From cf4908994d5fe874d4861396c41531957405fc9e Mon Sep 17 00:00:00 2001 From: devenkong Date: Mon, 5 Dec 2022 15:19:04 -0800 Subject: [PATCH] first version upgrade --- 1.1.build-environment.txt | 236 + LICENSE | 21 - README.en.md | 36 - README.md | 37 - devspec.en_US/1.0.general.txt | 260 + devspec.en_US/1.1.build-environment.txt | 267 + devspec.en_US/1.1.doc-md.txt | 127 + devspec.en_US/1.1.words-conception.txt | 9 + devspec.en_US/1.2.rules.txt | 29 + devspec.en_US/1.3.conception-and-mind.txt | 168 + devspec.en_US/2.0.develop-step-guide.txt | 101 + devspec.en_US/2.1.dev-actor-task.txt | 349 + devspec.en_US/2.2.develop-step-diagrams.txt | 616 + devspec.en_US/2.3.develop-management.txt | 143 + devspec.en_US/{file => 2.4.example-sed.txt} | 0 devspec.en_US/2.5.example-recutils.txt | 527 + devspec.en_US/{test => 2.6.example-umbrello.txt} | 0 test.md => devspec.en_US/3.0.code-style.txt | 0 devspec.en_US/3.1.code-format.txt | 55 + devspec.en_US/3.2.name-style.txt | 399 + devspec.en_US/3.3.c-cpp-code-format.txt | 274 + devspec.en_US/{file => 3.4.sh-code-format.txt} | 0 devspec.en_US/4.0.prog-style.txt | 96 + devspec.en_US/{file => 4.1.classical.txt} | 0 .../{file => 4.2.data-structure-algorithm.txt} | 0 devspec.en_US/5.0.copying-lisence.txt | 125 + devspec.en_US/{file => 6.0.pkg-structure.txt} | 0 devspec.en_US/6.1.version-code.txt | 38 + .../{file => 6.2.pkg-file-name-format.txt} | 0 devspec.en_US/6.3.general-file-type.txt | 26 + devspec.en_US/6.4.src-pkg-dir-structure.txt | 73 + devspec.en_US/6.5.install-pkg-dir-structure.txt | 6 + .../{file => 7.0.code-and-executables.txt} | 0 devspec.en_US/7.1.code-manage-git.txt | 468 + devspec.en_US/{file => 7.2.home-pages.txt} | 0 devspec.en_US/7.3.code-hosting.txt | 48 + devspec.en_US/{file => 7.4.publish.txt} | 0 devspec.en_US/7.5.soft-repository.txt | 2 + devspec.en_US/8.0.template.txt | 20 + devspec.en_US/{file => 8.1.language-element.txt} | 0 devspec.en_US/{file => 8.2.src-file.txt} | 0 devspec.en_US/{file => 8.3.src-pkg-template.txt} | 0 .../{file => 8.4.classical-implement-template.txt} | 0 devspec.en_US/9.file-format.txt | 5 + devspec.en_US/codestyle/code-style.imi | 253 + devspec.en_US/codestyle/codetemplates.xml | 340 + devspec.en_US/codestyle/deven code style-org.xml | 155 + devspec.en_US/codestyle/deven code style.xml | 155 + devspec.en_US/codestyle/skeleton-linux.xml | 155 + devspec.en_US/codestyle/templates.xml | 603 + devspec.en_US/conception-and-mind.txt | 86 + .../SE-analysis-designprocedure.png | Bin 0 -> 33962 bytes .../compact-analysis-design-procedure.png | Bin 0 -> 16474 bytes devspec.en_US/dev-step-diagrams/dev-actor.png | Bin 0 -> 25320 bytes .../dev-step-diagrams/dev-work-flow-diagram.png | Bin 0 -> 34871 bytes .../dev-step-diagrams/devspec-20221113.uml | 20603 ++++++++ ...21115-\346\246\202\350\246\201\345\233\276.uml" | 30157 +++++++++++ ...21116-\346\246\202\350\246\201\345\233\276.uml" | 30157 +++++++++++ devspec.en_US/dev-step-diagrams/devspec.uml | 33049 ++++++++++++ devspec.en_US/dev-step-diagrams/top-usecase.png | Bin 0 -> 38775 bytes devspec.en_US/gnu-spec/boilerplate-source.html | 251 + devspec.en_US/{file => gnu-spec/distributions.txt} | 0 devspec.en_US/gnu-spec/ftp-space.txt | 220 + devspec.en_US/gnu-spec/gendocs_template_min.html | 108 + ...3\266\345\237\272\351\207\221\344\274\232.html" | 508 + .../banner-small.png" | Bin 0 -> 10561 bytes .../banner.png" | Bin 0 -> 55809 bytes .../fsf-logo-notext-small.png" | Bin 0 -> 2494 bytes .../fundraiser.css" | 202 + .../heckert_gnu.transp.small.png" | Bin 0 -> 7677 bytes .../layout.min.css" | 1 + .../mini.css" | 208 + .../print.min.css" | 18 + .../search.png" | Bin 0 -> 1136 bytes .../style.zh-cn.css" | 20 + .../translations.png" | Bin 0 -> 3346 bytes ...nformation for Maintainers of GNU Software.html | 4144 ++ .../manual.css | 72 + ...s - GNU Project - Free Software Foundation.html | 480 + .../banner-small.png | Bin 0 -> 10561 bytes .../banner.png | Bin 0 -> 55809 bytes .../fsf-logo-notext-small.png | Bin 0 -> 2494 bytes .../fundraiser.css | 202 + .../heckert_gnu.transp.small.png | Bin 0 -> 7677 bytes .../layout.min.css | 1 + .../mini.css | 208 + .../print.min.css | 18 + .../search.png | Bin 0 -> 1136 bytes .../translations.png | Bin 0 -> 3346 bytes ...s - GNU Project - Free Software Foundation.html | 1229 + .../banner-small.png | Bin 0 -> 10561 bytes .../banner.png | Bin 0 -> 55809 bytes .../fsf-logo-notext-small.png | Bin 0 -> 2494 bytes .../fundraiser.css | 202 + .../gnu-head-sm.jpg | Bin 0 -> 5286 bytes .../heckert_gnu.transp.small.png | Bin 0 -> 7677 bytes .../layout.min.css | 1 + .../mini.css | 208 + .../print.min.css | 18 + .../search.png | Bin 0 -> 1136 bytes .../translations.png | Bin 0 -> 3346 bytes devspec.en_US/gnu-spec/munual-on-webpages.txt | 66 + .../subject-for-gnu-softpkg-maintainning.txt | 28 + devspec.en_US/gnu-spec/webpages.txt | 51 + .../build-sample/cfg/dest-list.imi} | 0 .../{file => project/build-sample/cfg/flow.imi} | 0 devspec.en_US/project/build-sample/cfg/step.imi | 5 + devspec.en_US/project/build-sample/cfg/taglist.imi | 59 + .../default-params/compile-src-asm.imi} | 0 .../build-sample/default-params/compile-src-c.imi} | 0 .../default-params/compile-src-cpp.imi} | 0 .../build-sample/default-params/link-dest-a.imi | 33 + .../build-sample/default-params/link-dest-bin.imi} | 0 .../build-sample/default-params/link-dest-elf.imi} | 0 .../build-sample/default-params/link-dest-hex.imi} | 0 .../build-sample/default-params/link-dest-la.imi | 33 + .../build-sample/default-params/link-dest-o.imi | 33 + .../build-sample/default-params/link-dest-so.imi | 33 + .../build-sample/default-params/list-inc-hdr.imi} | 0 .../build-sample/default-params/list-inc-lib.imi} | 0 .../build-sample/default-params/list-inc-pkg.imi} | 0 .../default-params/list-macro-define.imi} | 0 .../default-params/list-path-incpath.imi} | 0 .../default-params/list-path-libpath.imi} | 0 .../build-sample/dest-test/compile-src-asm.imi} | 0 .../build-sample/dest-test/compile-src-c.imi} | 0 .../build-sample/dest-test/compile-src-cpp.imi} | 0 .../project/build-sample/dest-test/dest.imi | 33 + .../project/build-sample/dest-test/link-dest-a.imi | 33 + .../build-sample/dest-test/link-dest-bin.imi} | 0 .../build-sample/dest-test/link-dest-elf.imi} | 0 .../build-sample/dest-test/link-dest-hex.imi} | 0 .../build-sample/dest-test/link-dest-la.imi | 33 + .../project/build-sample/dest-test/link-dest-o.imi | 33 + .../build-sample/dest-test/list-inc-hdr.imi} | 0 .../build-sample/dest-test/list-inc-lib.imi} | 0 .../build-sample/dest-test/list-inc-pkg.imi} | 0 .../build-sample/dest-test/list-macro-define.imi} | 0 .../build-sample/dest-test/list-path-incpath.imi} | 0 .../build-sample/dest-test/list-path-libpath.imi} | 0 .../build-sample/dest-test/list-src-asm.imi} | 0 .../build-sample/dest-test/list-src-c.imi} | 0 .../build-sample/dest-test/list-src-cpp.imi} | 0 .../build-sample/dest-test/src/src.c.imi} | 0 .../buildpkg/public-params/compile-src-asm.imi} | 0 .../buildpkg/public-params/compile-src-c.imi} | 0 .../buildpkg/public-params/compile-src-cpp.imi} | 0 .../imilib/buildpkg/public-params/link-dest-a.imi | 33 + .../buildpkg/public-params/link-dest-bin.imi} | 0 .../buildpkg/public-params/link-dest-elf.imi} | 0 .../buildpkg/public-params/link-dest-hex.imi} | 0 .../imilib/buildpkg/public-params/link-dest-la.imi | 33 + .../imilib/buildpkg/public-params/link-dest-o.imi | 33 + .../imilib/buildpkg/public-params/link-dest-so.imi | 33 + .../buildpkg/public-params/list-inc-hdr.imi} | 0 .../buildpkg/public-params/list-inc-lib.imi} | 0 .../buildpkg/public-params/list-inc-pkg.imi} | 0 .../buildpkg/public-params/list-macro-define.imi} | 0 .../buildpkg/public-params/list-path-incpath.imi} | 0 .../buildpkg/public-params/list-path-libpath.imi} | 0 .../buildpkg/public-params/list-subproject.imi} | 0 .../buildpkg/public-params/list-unit-testing.imi} | 0 .../{file => project/build-sample/project.imi} | 0 devspec.en_US/project/build-sample/readme.txt | 38 + devspec.en_US/project/build-sample/setting.imi | 37 + .../project/build-sample/tasklib/build.shlib | 446 + .../tasklib/toolchain-gcc/compile-asm.shlib} | 0 .../tasklib/toolchain-gcc/compile-c.shlib} | 0 .../tasklib/toolchain-gcc/compile-cpp.shlib} | 0 .../tasklib/toolchain-gcc/fmt-bin2hex.shlib} | 0 .../tasklib/toolchain-gcc/fmt-hex2bin.shlib} | 0 .../tasklib/toolchain-gcc/link-a.shlib} | 0 .../tasklib/toolchain-gcc/link-elf.shlib} | 0 .../tasklib/toolchain-gcc/link-la.shlib} | 0 .../tasklib/toolchain-gcc/link-o.shlib} | 0 .../tasklib/toolchain-gcc/link-so.shlib} | 0 .../tasklib/toolchain-gcc/objcopy-bin.shlib} | 0 .../tasklib/toolchain-gcc/src-hdr-dep.shlib} | 0 .../tasklib/toolchain-gcc/toolchain.shlib} | 0 .../project/build-sample/tasklib/toolchain.shlib | 201 + .../{file => project/recutils-build/dest-list.txt} | 0 devspec.en_US/project/recutils/ABOUT-NLS | 1379 + devspec.en_US/project/recutils/AUTHORS | 21 + devspec.en_US/project/recutils/COPYING | 674 + devspec.en_US/project/recutils/ChangeLog | 8427 +++ devspec.en_US/project/recutils/GNUmakefile | 127 + devspec.en_US/project/recutils/INSTALL | 368 + devspec.en_US/project/recutils/Makefile | 2084 + devspec.en_US/project/recutils/Makefile.am | 30 + devspec.en_US/project/recutils/Makefile.in | 2084 + devspec.en_US/project/recutils/NEWS | 191 + devspec.en_US/project/recutils/README | 54 + devspec.en_US/project/recutils/aclocal.m4 | 1644 + .../project/recutils/algol68/.deps/rec.Po | 1 + devspec.en_US/project/recutils/algol68/Makefile | 1955 + devspec.en_US/project/recutils/algol68/Makefile.am | 30 + devspec.en_US/project/recutils/algol68/Makefile.in | 1955 + .../project/recutils/bash/.deps/readrec.Plo | 1 + .../project/recutils/bash/.deps/testrec.Plo | 1 + devspec.en_US/project/recutils/bash/Makefile | 1947 + devspec.en_US/project/recutils/bash/Makefile.am | 40 + devspec.en_US/project/recutils/bash/Makefile.in | 1947 + devspec.en_US/project/recutils/bash/readrec.c | 157 + devspec.en_US/project/recutils/bash/testrec.c | 134 + .../project/recutils/build-aux/announce-gen | 557 + devspec.en_US/project/recutils/build-aux/compile | 347 + .../project/recutils/build-aux/config.guess | 1493 + .../project/recutils/build-aux/config.rpath | 684 + .../project/recutils/build-aux/config.sub | 1791 + devspec.en_US/project/recutils/build-aux/depcomp | 791 + .../project/recutils/build-aux/gendocs.sh | 510 + devspec.en_US/project/recutils/build-aux/gnupload | 463 + .../project/recutils/build-aux/install-sh | 518 + devspec.en_US/project/recutils/build-aux/ltmain.sh | 11156 ++++ devspec.en_US/project/recutils/build-aux/mdate-sh | 228 + devspec.en_US/project/recutils/build-aux/missing | 215 + .../project/recutils/build-aux/test-driver | 148 + .../project/recutils/build-aux/texinfo.tex | 11672 ++++ .../recutils/build-aux/useless-if-before-free | 210 + .../project/recutils/build-aux/vc-list-files | 113 + devspec.en_US/project/recutils/build-aux/ylwrap | 247 + devspec.en_US/project/recutils/config.log | 22975 ++++++++ devspec.en_US/project/recutils/config.status | 3666 ++ devspec.en_US/project/recutils/configure | 52746 +++++++++++++++++++ devspec.en_US/project/recutils/configure.ac | 262 + devspec.en_US/project/recutils/doc/Makefile | 2077 + devspec.en_US/project/recutils/doc/Makefile.am | 22 + devspec.en_US/project/recutils/doc/Makefile.in | 2077 + devspec.en_US/project/recutils/doc/fdl.texi | 506 + .../project/recutils/doc/parse-datetime.texi | 594 + devspec.en_US/project/recutils/doc/rec-mode.info | 968 + devspec.en_US/project/recutils/doc/rec-mode.texi | 465 + devspec.en_US/project/recutils/doc/recutils.info | 6204 +++ devspec.en_US/project/recutils/doc/recutils.texi | 5631 ++ devspec.en_US/project/recutils/doc/stamp-1 | 4 + devspec.en_US/project/recutils/doc/stamp-vti | 4 + devspec.en_US/project/recutils/doc/texinfo.tex | 9153 ++++ .../project/recutils/doc/version-rec-mode.texi | 4 + devspec.en_US/project/recutils/doc/version.texi | 4 + devspec.en_US/project/recutils/etc/FSD.rec | 37 + devspec.en_US/project/recutils/etc/Makefile | 1789 + devspec.en_US/project/recutils/etc/Makefile.am | 23 + devspec.en_US/project/recutils/etc/Makefile.in | 1789 + devspec.en_US/project/recutils/etc/ob-rec.el | 79 + devspec.en_US/project/recutils/etc/rec-mode.el | 2210 + .../project/recutils/lib/.deps/acl-errno-valid.Plo | 102 + .../project/recutils/lib/.deps/acl-internal.Plo | 152 + .../project/recutils/lib/.deps/acl_entries.Plo | 1 + .../project/recutils/lib/.deps/alloca.Plo | 1 + .../project/recutils/lib/.deps/asnprintf.Plo | 13 + .../project/recutils/lib/.deps/asprintf.Plo | 98 + .../project/recutils/lib/.deps/base64.Plo | 138 + .../project/recutils/lib/.deps/basename-lgpl.Plo | 67 + devspec.en_US/project/recutils/lib/.deps/btowc.Plo | 1 + .../project/recutils/lib/.deps/c-ctype.Plo | 10 + .../project/recutils/lib/.deps/c-strcasecmp.Plo | 58 + .../project/recutils/lib/.deps/c-strncasecmp.Plo | 58 + .../recutils/lib/.deps/canonicalize-lgpl.Plo | 1 + .../project/recutils/lib/.deps/cloexec.Plo | 127 + .../project/recutils/lib/.deps/close-stream.Plo | 125 + devspec.en_US/project/recutils/lib/.deps/close.Plo | 1 + .../project/recutils/lib/.deps/closeout.Plo | 176 + .../project/recutils/lib/.deps/copy-acl.Plo | 135 + devspec.en_US/project/recutils/lib/.deps/crc.Plo | 61 + .../project/recutils/lib/.deps/dirname-lgpl.Plo | 114 + devspec.en_US/project/recutils/lib/.deps/dup2.Plo | 1 + devspec.en_US/project/recutils/lib/.deps/error.Plo | 1 + .../project/recutils/lib/.deps/euidaccess.Plo | 1 + .../project/recutils/lib/.deps/execute.Plo | 215 + .../project/recutils/lib/.deps/exitfail.Plo | 95 + .../project/recutils/lib/.deps/fatal-signal.Plo | 185 + devspec.en_US/project/recutils/lib/.deps/fcntl.Plo | 151 + .../project/recutils/lib/.deps/fd-hook.Plo | 95 + devspec.en_US/project/recutils/lib/.deps/float.Plo | 1 + devspec.en_US/project/recutils/lib/.deps/flock.Plo | 1 + devspec.en_US/project/recutils/lib/.deps/floor.Plo | 1 + .../project/recutils/lib/.deps/fpending.Plo | 1 + .../project/recutils/lib/.deps/fprintf.Plo | 164 + devspec.en_US/project/recutils/lib/.deps/frexp.Plo | 1 + .../project/recutils/lib/.deps/frexpl.Plo | 1 + devspec.en_US/project/recutils/lib/.deps/fseek.Plo | 1 + .../project/recutils/lib/.deps/fseeko.Plo | 1 + .../project/recutils/lib/.deps/fseterr.Plo | 117 + devspec.en_US/project/recutils/lib/.deps/fstat.Plo | 1 + devspec.en_US/project/recutils/lib/.deps/ftell.Plo | 1 + .../project/recutils/lib/.deps/ftello.Plo | 1 + .../project/recutils/lib/.deps/fwriting.Plo | 1 + .../project/recutils/lib/.deps/get-permissions.Plo | 166 + .../project/recutils/lib/.deps/getdelim.Plo | 1 + .../project/recutils/lib/.deps/getdtablesize.Plo | 1 + .../project/recutils/lib/.deps/getfilecon.Plo | 1 + .../project/recutils/lib/.deps/getgroups.Plo | 1 + .../project/recutils/lib/.deps/getline.Plo | 1 + .../project/recutils/lib/.deps/getopt.Plo | 1 + .../project/recutils/lib/.deps/getopt1.Plo | 1 + .../project/recutils/lib/.deps/getpass.Plo | 1 + .../project/recutils/lib/.deps/getprogname.Plo | 117 + .../project/recutils/lib/.deps/gettime.Plo | 64 + .../project/recutils/lib/.deps/gettimeofday.Plo | 1 + .../project/recutils/lib/.deps/gl_array_list.Plo | 153 + .../project/recutils/lib/.deps/gl_list.Plo | 13 + .../project/recutils/lib/.deps/group-member.Plo | 1 + .../project/recutils/lib/.deps/hard-locale.Plo | 119 + devspec.en_US/project/recutils/lib/.deps/isnan.Plo | 1 + .../project/recutils/lib/.deps/isnand.Plo | 1 + .../project/recutils/lib/.deps/isnanf.Plo | 1 + .../project/recutils/lib/.deps/isnanl.Plo | 1 + devspec.en_US/project/recutils/lib/.deps/itold.Plo | 1 + .../project/recutils/lib/.deps/localcharset.Plo | 148 + .../project/recutils/lib/.deps/localeconv.Plo | 1 + .../recutils/lib/.deps/localtime-buffer.Plo | 43 + devspec.en_US/project/recutils/lib/.deps/lseek.Plo | 1 + devspec.en_US/project/recutils/lib/.deps/lstat.Plo | 1 + .../project/recutils/lib/.deps/malloc.Plo | 1 + .../project/recutils/lib/.deps/malloca.Plo | 136 + devspec.en_US/project/recutils/lib/.deps/math.Plo | 56 + .../project/recutils/lib/.deps/mbrlen.Plo | 41 + .../project/recutils/lib/.deps/mbrtowc.Plo | 53 + .../project/recutils/lib/.deps/mbsinit.Plo | 1 + .../project/recutils/lib/.deps/mbtowc.Plo | 1 + .../project/recutils/lib/.deps/memchr.Plo | 1 + devspec.en_US/project/recutils/lib/.deps/mkdir.Plo | 1 + .../project/recutils/lib/.deps/mkostemp.Plo | 1 + .../project/recutils/lib/.deps/mkstemp.Plo | 1 + .../project/recutils/lib/.deps/mktime.Plo | 165 + .../project/recutils/lib/.deps/msvc-inval.Plo | 1 + .../project/recutils/lib/.deps/msvc-nothrow.Plo | 1 + .../project/recutils/lib/.deps/nl_langinfo.Plo | 73 + .../project/recutils/lib/.deps/nstrftime.Plo | 146 + .../project/recutils/lib/.deps/obstack.Plo | 187 + devspec.en_US/project/recutils/lib/.deps/open.Plo | 1 + .../project/recutils/lib/.deps/parse-datetime.Plo | 207 + .../project/recutils/lib/.deps/printf-args.Plo | 43 + .../project/recutils/lib/.deps/printf-frexp.Plo | 59 + .../project/recutils/lib/.deps/printf-frexpl.Plo | 63 + .../project/recutils/lib/.deps/printf-parse.Plo | 179 + .../project/recutils/lib/.deps/printf.Plo | 98 + .../project/recutils/lib/.deps/progname.Plo | 151 + .../project/recutils/lib/.deps/qcopy-acl.Plo | 152 + .../project/recutils/lib/.deps/qset-acl.Plo | 166 + .../project/recutils/lib/.deps/quotearg.Plo | 267 + devspec.en_US/project/recutils/lib/.deps/raise.Plo | 1 + .../project/recutils/lib/.deps/random_r.Plo | 1 + .../project/recutils/lib/.deps/rawmemchr.Plo | 1 + .../project/recutils/lib/.deps/read-file.Plo | 183 + .../project/recutils/lib/.deps/readline.Plo | 120 + .../project/recutils/lib/.deps/readlink.Plo | 1 + .../project/recutils/lib/.deps/realloc.Plo | 1 + .../project/recutils/lib/.deps/regcomp.Plo | 1 + devspec.en_US/project/recutils/lib/.deps/regex.Plo | 235 + .../project/recutils/lib/.deps/regex_internal.Plo | 1 + .../project/recutils/lib/.deps/regexec.Plo | 1 + .../project/recutils/lib/.deps/rename.Plo | 1 + devspec.en_US/project/recutils/lib/.deps/rmdir.Plo | 1 + .../project/recutils/lib/.deps/se-context.Plo | 37 + .../project/recutils/lib/.deps/se-selinux.Plo | 86 + .../project/recutils/lib/.deps/secure_getenv.Plo | 1 + .../project/recutils/lib/.deps/set-acl.Plo | 135 + .../project/recutils/lib/.deps/set-permissions.Plo | 152 + .../project/recutils/lib/.deps/setenv.Plo | 1 + .../project/recutils/lib/.deps/sig-handler.Plo | 97 + .../project/recutils/lib/.deps/sigaction.Plo | 1 + .../project/recutils/lib/.deps/signbitd.Plo | 1 + .../project/recutils/lib/.deps/signbitf.Plo | 1 + .../project/recutils/lib/.deps/signbitl.Plo | 1 + .../project/recutils/lib/.deps/sigprocmask.Plo | 1 + .../recutils/lib/.deps/spawn_faction_addopen.Plo | 1 + .../recutils/lib/.deps/spawn_faction_destroy.Plo | 1 + .../recutils/lib/.deps/spawn_faction_init.Plo | 1 + .../recutils/lib/.deps/spawnattr_destroy.Plo | 1 + .../project/recutils/lib/.deps/spawnattr_init.Plo | 1 + .../recutils/lib/.deps/spawnattr_setflags.Plo | 1 + .../recutils/lib/.deps/spawnattr_setsigmask.Plo | 1 + .../project/recutils/lib/.deps/spawni.Plo | 1 + .../project/recutils/lib/.deps/spawnp.Plo | 1 + .../project/recutils/lib/.deps/stat-time.Plo | 130 + .../project/recutils/lib/.deps/stat-w32.Plo | 1 + devspec.en_US/project/recutils/lib/.deps/stat.Plo | 1 + .../project/recutils/lib/.deps/strcasecmp.Plo | 1 + .../project/recutils/lib/.deps/strcasestr.Plo | 1 + .../project/recutils/lib/.deps/strchrnul.Plo | 1 + .../project/recutils/lib/.deps/strdup.Plo | 1 + .../recutils/lib/.deps/strerror-override.Plo | 1 + .../project/recutils/lib/.deps/strerror.Plo | 1 + .../project/recutils/lib/.deps/stripslash.Plo | 15 + .../project/recutils/lib/.deps/strncasecmp.Plo | 1 + .../project/recutils/lib/.deps/strsep.Plo | 1 + .../project/recutils/lib/.deps/strverscmp.Plo | 1 + .../project/recutils/lib/.deps/tempname.Plo | 238 + .../project/recutils/lib/.deps/time_r.Plo | 1 + .../project/recutils/lib/.deps/time_rz.Plo | 158 + .../project/recutils/lib/.deps/timegm.Plo | 1 + .../project/recutils/lib/.deps/timespec.Plo | 48 + .../project/recutils/lib/.deps/tmpdir.Plo | 209 + devspec.en_US/project/recutils/lib/.deps/tzset.Plo | 1 + .../project/recutils/lib/.deps/unistd.Plo | 90 + .../project/recutils/lib/.deps/unsetenv.Plo | 1 + .../project/recutils/lib/.deps/vasnprintf.Plo | 214 + .../project/recutils/lib/.deps/vasprintf.Plo | 162 + .../project/recutils/lib/.deps/version-etc-fsf.Plo | 101 + .../project/recutils/lib/.deps/version-etc.Plo | 133 + .../project/recutils/lib/.deps/vfprintf.Plo | 164 + .../project/recutils/lib/.deps/wait-process.Plo | 231 + .../project/recutils/lib/.deps/waitpid.Plo | 1 + .../project/recutils/lib/.deps/wcrtomb.Plo | 1 + devspec.en_US/project/recutils/lib/.deps/wctob.Plo | 1 + .../project/recutils/lib/.deps/wctomb.Plo | 1 + .../project/recutils/lib/.deps/wctype-h.Plo | 115 + .../project/recutils/lib/.deps/xalloc-die.Plo | 162 + .../project/recutils/lib/.deps/xmalloc.Plo | 146 + devspec.en_US/project/recutils/lib/.deps/xsize.Plo | 62 + devspec.en_US/project/recutils/lib/Makefile | 4004 ++ devspec.en_US/project/recutils/lib/Makefile.am | 3450 ++ devspec.en_US/project/recutils/lib/Makefile.in | 4004 ++ devspec.en_US/project/recutils/lib/_Noreturn.h | 14 + .../project/recutils/lib/acl-errno-valid.c | 52 + devspec.en_US/project/recutils/lib/acl-internal.c | 507 + devspec.en_US/project/recutils/lib/acl-internal.h | 302 + devspec.en_US/project/recutils/lib/acl.h | 35 + devspec.en_US/project/recutils/lib/acl_entries.c | 75 + devspec.en_US/project/recutils/lib/alignof.h | 50 + devspec.en_US/project/recutils/lib/alloca.c | 478 + devspec.en_US/project/recutils/lib/alloca.h | 66 + devspec.en_US/project/recutils/lib/alloca.in.h | 65 + devspec.en_US/project/recutils/lib/arg-nonnull.h | 26 + devspec.en_US/project/recutils/lib/asnprintf.c | 34 + devspec.en_US/project/recutils/lib/asprintf.c | 39 + devspec.en_US/project/recutils/lib/base64.c | 605 + devspec.en_US/project/recutils/lib/base64.h | 68 + devspec.en_US/project/recutils/lib/basename-lgpl.c | 75 + devspec.en_US/project/recutils/lib/btowc.c | 39 + devspec.en_US/project/recutils/lib/c++defs.h | 316 + devspec.en_US/project/recutils/lib/c-ctype.c | 3 + devspec.en_US/project/recutils/lib/c-ctype.h | 366 + devspec.en_US/project/recutils/lib/c-strcase.h | 56 + devspec.en_US/project/recutils/lib/c-strcasecmp.c | 56 + devspec.en_US/project/recutils/lib/c-strcaseeq.h | 181 + devspec.en_US/project/recutils/lib/c-strncasecmp.c | 56 + .../project/recutils/lib/canonicalize-lgpl.c | 428 + devspec.en_US/project/recutils/lib/cdefs.h | 514 + devspec.en_US/project/recutils/lib/cloexec.c | 83 + devspec.en_US/project/recutils/lib/cloexec.h | 38 + devspec.en_US/project/recutils/lib/close-stream.c | 78 + devspec.en_US/project/recutils/lib/close-stream.h | 2 + devspec.en_US/project/recutils/lib/close.c | 71 + devspec.en_US/project/recutils/lib/closeout.c | 136 + devspec.en_US/project/recutils/lib/closeout.h | 36 + devspec.en_US/project/recutils/lib/copy-acl.c | 61 + devspec.en_US/project/recutils/lib/crc.c | 103 + devspec.en_US/project/recutils/lib/crc.h | 47 + devspec.en_US/project/recutils/lib/dirname-lgpl.c | 86 + devspec.en_US/project/recutils/lib/dirname.h | 54 + devspec.en_US/project/recutils/lib/dosname.h | 52 + devspec.en_US/project/recutils/lib/dup2.c | 235 + devspec.en_US/project/recutils/lib/errno.in.h | 279 + devspec.en_US/project/recutils/lib/error.c | 411 + devspec.en_US/project/recutils/lib/error.h | 75 + devspec.en_US/project/recutils/lib/euidaccess.c | 223 + devspec.en_US/project/recutils/lib/execute.c | 274 + devspec.en_US/project/recutils/lib/execute.h | 44 + devspec.en_US/project/recutils/lib/exitfail.c | 24 + devspec.en_US/project/recutils/lib/exitfail.h | 18 + devspec.en_US/project/recutils/lib/fatal-signal.c | 286 + devspec.en_US/project/recutils/lib/fatal-signal.h | 76 + devspec.en_US/project/recutils/lib/fcntl.c | 626 + devspec.en_US/project/recutils/lib/fcntl.h | 840 + devspec.en_US/project/recutils/lib/fcntl.in.h | 366 + devspec.en_US/project/recutils/lib/fd-hook.c | 116 + devspec.en_US/project/recutils/lib/fd-hook.h | 119 + devspec.en_US/project/recutils/lib/filename.h | 54 + devspec.en_US/project/recutils/lib/flexmember.h | 45 + devspec.en_US/project/recutils/lib/float+.h | 147 + devspec.en_US/project/recutils/lib/float.c | 33 + devspec.en_US/project/recutils/lib/float.in.h | 188 + devspec.en_US/project/recutils/lib/flock.c | 224 + devspec.en_US/project/recutils/lib/floor.c | 105 + devspec.en_US/project/recutils/lib/fpending.c | 62 + devspec.en_US/project/recutils/lib/fpending.h | 29 + devspec.en_US/project/recutils/lib/fprintf.c | 77 + devspec.en_US/project/recutils/lib/fpucw.h | 108 + devspec.en_US/project/recutils/lib/frexp.c | 168 + devspec.en_US/project/recutils/lib/frexpl.c | 35 + devspec.en_US/project/recutils/lib/fseek.c | 30 + devspec.en_US/project/recutils/lib/fseeko.c | 164 + devspec.en_US/project/recutils/lib/fseterr.c | 84 + devspec.en_US/project/recutils/lib/fseterr.h | 45 + devspec.en_US/project/recutils/lib/fstat.c | 90 + devspec.en_US/project/recutils/lib/ftell.c | 37 + devspec.en_US/project/recutils/lib/ftello.c | 85 + devspec.en_US/project/recutils/lib/fwriting.c | 67 + devspec.en_US/project/recutils/lib/fwriting.h | 53 + .../project/recutils/lib/get-permissions.c | 291 + devspec.en_US/project/recutils/lib/getdelim.c | 147 + devspec.en_US/project/recutils/lib/getdtablesize.c | 124 + devspec.en_US/project/recutils/lib/getfilecon.c | 87 + devspec.en_US/project/recutils/lib/getgroups.c | 131 + devspec.en_US/project/recutils/lib/getline.c | 27 + .../project/recutils/lib/getopt-cdefs.in.h | 67 + devspec.en_US/project/recutils/lib/getopt-core.h | 96 + devspec.en_US/project/recutils/lib/getopt-ext.h | 77 + .../project/recutils/lib/getopt-pfx-core.h | 59 + .../project/recutils/lib/getopt-pfx-ext.h | 71 + devspec.en_US/project/recutils/lib/getopt.c | 811 + devspec.en_US/project/recutils/lib/getopt.in.h | 61 + devspec.en_US/project/recutils/lib/getopt1.c | 159 + devspec.en_US/project/recutils/lib/getopt_int.h | 118 + devspec.en_US/project/recutils/lib/getpass.c | 231 + devspec.en_US/project/recutils/lib/getpass.h | 4 + devspec.en_US/project/recutils/lib/getprogname.c | 255 + devspec.en_US/project/recutils/lib/getprogname.h | 40 + devspec.en_US/project/recutils/lib/gettext.h | 294 + devspec.en_US/project/recutils/lib/gettime.c | 49 + devspec.en_US/project/recutils/lib/gettimeofday.c | 150 + devspec.en_US/project/recutils/lib/gl_array_list.c | 680 + devspec.en_US/project/recutils/lib/gl_array_list.h | 34 + devspec.en_US/project/recutils/lib/gl_list.c | 3 + devspec.en_US/project/recutils/lib/gl_list.h | 843 + .../recutils/lib/glthread/.deps/.dirstamp} | 0 .../project/recutils/lib/glthread/.deps/lock.Plo | 123 + .../recutils/lib/glthread/.deps/threadlib.Plo | 106 + .../recutils/lib/glthread/.dirstamp} | 0 devspec.en_US/project/recutils/lib/glthread/lock.c | 1221 + devspec.en_US/project/recutils/lib/glthread/lock.h | 985 + .../project/recutils/lib/glthread/threadlib.c | 73 + devspec.en_US/project/recutils/lib/group-member.c | 115 + devspec.en_US/project/recutils/lib/hard-locale.c | 72 + devspec.en_US/project/recutils/lib/hard-locale.h | 25 + devspec.en_US/project/recutils/lib/intprops.h | 455 + devspec.en_US/project/recutils/lib/inttypes.h | 1620 + devspec.en_US/project/recutils/lib/inttypes.in.h | 1146 + devspec.en_US/project/recutils/lib/isnan.c | 189 + devspec.en_US/project/recutils/lib/isnand-nolibm.h | 33 + devspec.en_US/project/recutils/lib/isnand.c | 19 + devspec.en_US/project/recutils/lib/isnanf-nolibm.h | 40 + devspec.en_US/project/recutils/lib/isnanf.c | 20 + devspec.en_US/project/recutils/lib/isnanl-nolibm.h | 33 + devspec.en_US/project/recutils/lib/isnanl.c | 20 + devspec.en_US/project/recutils/lib/itold.c | 28 + devspec.en_US/project/recutils/lib/langinfo.h | 670 + devspec.en_US/project/recutils/lib/langinfo.in.h | 222 + devspec.en_US/project/recutils/lib/libc-config.h | 174 + devspec.en_US/project/recutils/lib/limits.h | 105 + devspec.en_US/project/recutils/lib/limits.in.h | 104 + devspec.en_US/project/recutils/lib/localcharset.c | 996 + devspec.en_US/project/recutils/lib/localcharset.h | 134 + devspec.en_US/project/recutils/lib/locale.h | 746 + devspec.en_US/project/recutils/lib/locale.in.h | 272 + devspec.en_US/project/recutils/lib/localeconv.c | 103 + .../project/recutils/lib/localtime-buffer.c | 60 + .../project/recutils/lib/localtime-buffer.h | 27 + devspec.en_US/project/recutils/lib/lseek.c | 71 + devspec.en_US/project/recutils/lib/lstat.c | 100 + devspec.en_US/project/recutils/lib/malloc.c | 56 + devspec.en_US/project/recutils/lib/malloca.c | 105 + devspec.en_US/project/recutils/lib/malloca.h | 127 + devspec.en_US/project/recutils/lib/math.c | 4 + devspec.en_US/project/recutils/lib/math.h | 2891 + devspec.en_US/project/recutils/lib/math.in.h | 2417 + devspec.en_US/project/recutils/lib/mbrlen.c | 32 + devspec.en_US/project/recutils/lib/mbrtowc.c | 458 + devspec.en_US/project/recutils/lib/mbsinit.c | 73 + devspec.en_US/project/recutils/lib/mbtowc-impl.h | 44 + devspec.en_US/project/recutils/lib/mbtowc.c | 26 + devspec.en_US/project/recutils/lib/memchr.c | 172 + devspec.en_US/project/recutils/lib/memchr.valgrind | 14 + devspec.en_US/project/recutils/lib/minmax.h | 60 + devspec.en_US/project/recutils/lib/mkdir.c | 93 + devspec.en_US/project/recutils/lib/mkostemp.c | 46 + devspec.en_US/project/recutils/lib/mkstemp.c | 50 + .../project/recutils/lib/mktime-internal.h | 53 + devspec.en_US/project/recutils/lib/mktime.c | 549 + devspec.en_US/project/recutils/lib/msvc-inval.c | 129 + devspec.en_US/project/recutils/lib/msvc-inval.h | 222 + devspec.en_US/project/recutils/lib/msvc-nothrow.c | 51 + devspec.en_US/project/recutils/lib/msvc-nothrow.h | 43 + devspec.en_US/project/recutils/lib/nl_langinfo.c | 366 + devspec.en_US/project/recutils/lib/nstrftime.c | 1502 + devspec.en_US/project/recutils/lib/obstack.c | 354 + devspec.en_US/project/recutils/lib/obstack.h | 546 + devspec.en_US/project/recutils/lib/open.c | 208 + .../project/recutils/lib/parse-datetime.c | 4129 ++ .../project/recutils/lib/parse-datetime.h | 29 + .../project/recutils/lib/parse-datetime.y | 2428 + devspec.en_US/project/recutils/lib/pathmax.h | 83 + devspec.en_US/project/recutils/lib/printf-args.c | 187 + devspec.en_US/project/recutils/lib/printf-args.h | 158 + devspec.en_US/project/recutils/lib/printf-frexp.c | 190 + devspec.en_US/project/recutils/lib/printf-frexp.h | 23 + devspec.en_US/project/recutils/lib/printf-frexpl.c | 37 + devspec.en_US/project/recutils/lib/printf-frexpl.h | 23 + devspec.en_US/project/recutils/lib/printf-parse.c | 638 + devspec.en_US/project/recutils/lib/printf-parse.h | 193 + devspec.en_US/project/recutils/lib/printf.c | 40 + devspec.en_US/project/recutils/lib/progname.c | 92 + devspec.en_US/project/recutils/lib/progname.h | 62 + devspec.en_US/project/recutils/lib/qcopy-acl.c | 51 + devspec.en_US/project/recutils/lib/qset-acl.c | 49 + devspec.en_US/project/recutils/lib/quote.h | 46 + devspec.en_US/project/recutils/lib/quotearg.c | 1089 + devspec.en_US/project/recutils/lib/quotearg.h | 425 + devspec.en_US/project/recutils/lib/raise.c | 83 + devspec.en_US/project/recutils/lib/random_r.c | 430 + devspec.en_US/project/recutils/lib/rawmemchr.c | 136 + .../project/recutils/lib/rawmemchr.valgrind | 12 + devspec.en_US/project/recutils/lib/read-file.c | 188 + devspec.en_US/project/recutils/lib/read-file.h | 33 + devspec.en_US/project/recutils/lib/readline.c | 55 + devspec.en_US/project/recutils/lib/readline.h | 34 + devspec.en_US/project/recutils/lib/readlink.c | 74 + devspec.en_US/project/recutils/lib/realloc.c | 79 + devspec.en_US/project/recutils/lib/regcomp.c | 3934 ++ devspec.en_US/project/recutils/lib/regex.c | 81 + devspec.en_US/project/recutils/lib/regex.h | 658 + .../project/recutils/lib/regex_internal.c | 1746 + .../project/recutils/lib/regex_internal.h | 874 + devspec.en_US/project/recutils/lib/regexec.c | 4334 ++ devspec.en_US/project/recutils/lib/rename.c | 475 + devspec.en_US/project/recutils/lib/rmdir.c | 53 + devspec.en_US/project/recutils/lib/root-uid.h | 30 + devspec.en_US/project/recutils/lib/same-inode.h | 47 + devspec.en_US/project/recutils/lib/sched.in.h | 70 + devspec.en_US/project/recutils/lib/se-context.c | 3 + devspec.en_US/project/recutils/lib/se-context.in.h | 46 + devspec.en_US/project/recutils/lib/se-selinux.c | 3 + devspec.en_US/project/recutils/lib/se-selinux.in.h | 119 + devspec.en_US/project/recutils/lib/secure_getenv.c | 54 + .../project/recutils/lib/selinux/context.h | 83 + .../project/recutils/lib/selinux/selinux.h | 156 + devspec.en_US/project/recutils/lib/set-acl.c | 48 + .../project/recutils/lib/set-permissions.c | 847 + devspec.en_US/project/recutils/lib/setenv.c | 390 + devspec.en_US/project/recutils/lib/sig-handler.c | 3 + devspec.en_US/project/recutils/lib/sig-handler.h | 51 + devspec.en_US/project/recutils/lib/sigaction.c | 204 + devspec.en_US/project/recutils/lib/signal.h | 937 + devspec.en_US/project/recutils/lib/signal.in.h | 463 + devspec.en_US/project/recutils/lib/signbitd.c | 64 + devspec.en_US/project/recutils/lib/signbitf.c | 64 + devspec.en_US/project/recutils/lib/signbitl.c | 64 + devspec.en_US/project/recutils/lib/sigprocmask.c | 349 + devspec.en_US/project/recutils/lib/size_max.h | 30 + devspec.en_US/project/recutils/lib/spawn.h | 1392 + devspec.en_US/project/recutils/lib/spawn.in.h | 918 + .../project/recutils/lib/spawn_faction_addopen.c | 73 + .../project/recutils/lib/spawn_faction_destroy.c | 31 + .../project/recutils/lib/spawn_faction_init.c | 56 + devspec.en_US/project/recutils/lib/spawn_int.h | 67 + .../project/recutils/lib/spawnattr_destroy.c | 28 + .../project/recutils/lib/spawnattr_init.c | 33 + .../project/recutils/lib/spawnattr_setflags.c | 45 + .../project/recutils/lib/spawnattr_setsigmask.c | 33 + devspec.en_US/project/recutils/lib/spawni.c | 380 + devspec.en_US/project/recutils/lib/spawnp.c | 33 + devspec.en_US/project/recutils/lib/stat-macros.h | 3 + devspec.en_US/project/recutils/lib/stat-time.c | 3 + devspec.en_US/project/recutils/lib/stat-time.h | 252 + devspec.en_US/project/recutils/lib/stat-w32.c | 425 + devspec.en_US/project/recutils/lib/stat-w32.h | 37 + devspec.en_US/project/recutils/lib/stat.c | 429 + devspec.en_US/project/recutils/lib/stdarg.in.h | 35 + devspec.en_US/project/recutils/lib/stdbool.in.h | 132 + devspec.en_US/project/recutils/lib/stddef.in.h | 114 + devspec.en_US/project/recutils/lib/stdint.h | 727 + devspec.en_US/project/recutils/lib/stdint.in.h | 726 + devspec.en_US/project/recutils/lib/stdio-impl.h | 202 + devspec.en_US/project/recutils/lib/stdio.h | 1851 + devspec.en_US/project/recutils/lib/stdio.in.h | 1377 + devspec.en_US/project/recutils/lib/stdlib.h | 1501 + devspec.en_US/project/recutils/lib/stdlib.in.h | 1013 + devspec.en_US/project/recutils/lib/str-two-way.h | 452 + devspec.en_US/project/recutils/lib/strcasecmp.c | 62 + devspec.en_US/project/recutils/lib/strcasestr.c | 82 + devspec.en_US/project/recutils/lib/strchrnul.c | 142 + .../project/recutils/lib/strchrnul.valgrind | 12 + devspec.en_US/project/recutils/lib/strdup.c | 54 + devspec.en_US/project/recutils/lib/streq.h | 176 + .../project/recutils/lib/strerror-override.c | 302 + .../project/recutils/lib/strerror-override.h | 56 + devspec.en_US/project/recutils/lib/strerror.c | 71 + devspec.en_US/project/recutils/lib/strftime.h | 33 + devspec.en_US/project/recutils/lib/string.h | 1537 + devspec.en_US/project/recutils/lib/string.in.h | 1063 + devspec.en_US/project/recutils/lib/strings.h | 596 + devspec.en_US/project/recutils/lib/strings.in.h | 122 + devspec.en_US/project/recutils/lib/stripslash.c | 45 + devspec.en_US/project/recutils/lib/strncasecmp.c | 62 + devspec.en_US/project/recutils/lib/strsep.c | 57 + devspec.en_US/project/recutils/lib/strverscmp.c | 117 + devspec.en_US/project/recutils/lib/sys/file.h | 195 + devspec.en_US/project/recutils/lib/sys/stat.h | 1290 + devspec.en_US/project/recutils/lib/sys/time.h | 694 + devspec.en_US/project/recutils/lib/sys/types.h | 107 + devspec.en_US/project/recutils/lib/sys/wait.h | 577 + devspec.en_US/project/recutils/lib/sys_file.in.h | 63 + devspec.en_US/project/recutils/lib/sys_stat.in.h | 816 + devspec.en_US/project/recutils/lib/sys_time.in.h | 220 + devspec.en_US/project/recutils/lib/sys_types.in.h | 106 + devspec.en_US/project/recutils/lib/sys_wait.in.h | 129 + devspec.en_US/project/recutils/lib/tempname.c | 323 + devspec.en_US/project/recutils/lib/tempname.h | 65 + devspec.en_US/project/recutils/lib/time-internal.h | 49 + devspec.en_US/project/recutils/lib/time.h | 824 + devspec.en_US/project/recutils/lib/time.in.h | 350 + devspec.en_US/project/recutils/lib/time_r.c | 44 + devspec.en_US/project/recutils/lib/time_rz.c | 344 + devspec.en_US/project/recutils/lib/timegm.c | 34 + devspec.en_US/project/recutils/lib/timespec.c | 3 + devspec.en_US/project/recutils/lib/timespec.h | 136 + devspec.en_US/project/recutils/lib/tmpdir.c | 159 + devspec.en_US/project/recutils/lib/tmpdir.h | 26 + devspec.en_US/project/recutils/lib/tzset.c | 83 + devspec.en_US/project/recutils/lib/unistd.c | 4 + devspec.en_US/project/recutils/lib/unistd.h | 2142 + devspec.en_US/project/recutils/lib/unistd.in.h | 1668 + devspec.en_US/project/recutils/lib/unlocked-io.h | 136 + devspec.en_US/project/recutils/lib/unsetenv.c | 127 + .../project/recutils/lib/unused-parameter.h | 36 + devspec.en_US/project/recutils/lib/vasnprintf.c | 5621 ++ devspec.en_US/project/recutils/lib/vasnprintf.h | 79 + devspec.en_US/project/recutils/lib/vasprintf.c | 50 + devspec.en_US/project/recutils/lib/verify.h | 285 + .../project/recutils/lib/version-etc-fsf.c | 30 + devspec.en_US/project/recutils/lib/version-etc.c | 258 + devspec.en_US/project/recutils/lib/version-etc.h | 78 + devspec.en_US/project/recutils/lib/vfprintf.c | 74 + devspec.en_US/project/recutils/lib/w32spawn.h | 233 + devspec.en_US/project/recutils/lib/wait-process.c | 361 + devspec.en_US/project/recutils/lib/wait-process.h | 74 + devspec.en_US/project/recutils/lib/waitpid.c | 30 + devspec.en_US/project/recutils/lib/warn-on-use.h | 131 + devspec.en_US/project/recutils/lib/wchar.h | 1546 + devspec.en_US/project/recutils/lib/wchar.in.h | 1072 + devspec.en_US/project/recutils/lib/wcrtomb.c | 53 + devspec.en_US/project/recutils/lib/wctob.c | 38 + devspec.en_US/project/recutils/lib/wctomb-impl.h | 34 + devspec.en_US/project/recutils/lib/wctomb.c | 25 + devspec.en_US/project/recutils/lib/wctype-h.c | 4 + devspec.en_US/project/recutils/lib/wctype.h | 981 + devspec.en_US/project/recutils/lib/wctype.in.h | 533 + devspec.en_US/project/recutils/lib/xalloc-die.c | 41 + .../project/recutils/lib/xalloc-oversized.h | 60 + devspec.en_US/project/recutils/lib/xalloc.h | 262 + devspec.en_US/project/recutils/lib/xmalloc.c | 122 + devspec.en_US/project/recutils/lib/xsize.c | 3 + devspec.en_US/project/recutils/lib/xsize.h | 117 + .../project/recutils/libcsv/.deps/libcsv.Plo | 113 + devspec.en_US/project/recutils/libcsv/Makefile | 1862 + devspec.en_US/project/recutils/libcsv/Makefile.am | 23 + devspec.en_US/project/recutils/libcsv/Makefile.in | 1862 + devspec.en_US/project/recutils/libcsv/README | 7 + devspec.en_US/project/recutils/libcsv/csv.h | 111 + devspec.en_US/project/recutils/libcsv/libcsv.c | 586 + devspec.en_US/project/recutils/libtool | 11653 ++++ devspec.en_US/project/recutils/m4/00gnulib.m4 | 46 + devspec.en_US/project/recutils/m4/__inline.m4 | 22 + .../project/recutils/m4/absolute-header.m4 | 102 + devspec.en_US/project/recutils/m4/acl.m4 | 211 + devspec.en_US/project/recutils/m4/alloca.m4 | 121 + .../project/recutils/m4/asm-underscore.m4 | 72 + devspec.en_US/project/recutils/m4/autobuild.m4 | 39 + devspec.en_US/project/recutils/m4/base64.m4 | 15 + devspec.en_US/project/recutils/m4/bison.m4 | 25 + devspec.en_US/project/recutils/m4/btowc.m4 | 120 + .../project/recutils/m4/builtin-expect.m4 | 49 + devspec.en_US/project/recutils/m4/canonicalize.m4 | 131 + devspec.en_US/project/recutils/m4/clock_time.m4 | 31 + devspec.en_US/project/recutils/m4/close-stream.m4 | 11 + devspec.en_US/project/recutils/m4/close.m4 | 35 + devspec.en_US/project/recutils/m4/closeout.m4 | 12 + devspec.en_US/project/recutils/m4/codeset.m4 | 24 + devspec.en_US/project/recutils/m4/dirname.m4 | 19 + .../project/recutils/m4/double-slash-root.m4 | 38 + devspec.en_US/project/recutils/m4/dup2.m4 | 117 + devspec.en_US/project/recutils/m4/eealloc.m4 | 31 + devspec.en_US/project/recutils/m4/environ.m4 | 45 + devspec.en_US/project/recutils/m4/errno_h.m4 | 133 + devspec.en_US/project/recutils/m4/error.m4 | 27 + devspec.en_US/project/recutils/m4/euidaccess.m4 | 52 + devspec.en_US/project/recutils/m4/execute.m4 | 11 + devspec.en_US/project/recutils/m4/exponentd.m4 | 116 + devspec.en_US/project/recutils/m4/exponentf.m4 | 92 + devspec.en_US/project/recutils/m4/exponentl.m4 | 114 + devspec.en_US/project/recutils/m4/extensions.m4 | 189 + devspec.en_US/project/recutils/m4/extern-inline.m4 | 114 + devspec.en_US/project/recutils/m4/fatal-signal.m4 | 12 + devspec.en_US/project/recutils/m4/fcntl-o.m4 | 139 + devspec.en_US/project/recutils/m4/fcntl.m4 | 126 + devspec.en_US/project/recutils/m4/fcntl_h.m4 | 50 + devspec.en_US/project/recutils/m4/flexmember.m4 | 46 + devspec.en_US/project/recutils/m4/float_h.m4 | 108 + devspec.en_US/project/recutils/m4/flock.m4 | 24 + devspec.en_US/project/recutils/m4/floor.m4 | 101 + devspec.en_US/project/recutils/m4/fpending.m4 | 36 + devspec.en_US/project/recutils/m4/fpieee.m4 | 54 + devspec.en_US/project/recutils/m4/fprintf-posix.m4 | 110 + devspec.en_US/project/recutils/m4/frexp.m4 | 181 + devspec.en_US/project/recutils/m4/frexpl.m4 | 231 + devspec.en_US/project/recutils/m4/fseek.m4 | 15 + devspec.en_US/project/recutils/m4/fseeko.m4 | 77 + devspec.en_US/project/recutils/m4/fseterr.m4 | 10 + devspec.en_US/project/recutils/m4/fstat.m4 | 39 + devspec.en_US/project/recutils/m4/ftell.m4 | 15 + devspec.en_US/project/recutils/m4/ftello.m4 | 142 + devspec.en_US/project/recutils/m4/fwriting.m4 | 10 + devspec.en_US/project/recutils/m4/getdelim.m4 | 90 + devspec.en_US/project/recutils/m4/getdtablesize.m4 | 60 + devspec.en_US/project/recutils/m4/getgroups.m4 | 109 + devspec.en_US/project/recutils/m4/getline.m4 | 99 + devspec.en_US/project/recutils/m4/getopt.m4 | 379 + devspec.en_US/project/recutils/m4/getpass.m4 | 106 + devspec.en_US/project/recutils/m4/getprogname.m4 | 43 + devspec.en_US/project/recutils/m4/gettext.m4 | 420 + devspec.en_US/project/recutils/m4/gettime.m4 | 13 + devspec.en_US/project/recutils/m4/gettimeofday.m4 | 126 + devspec.en_US/project/recutils/m4/glibc21.m4 | 34 + devspec.en_US/project/recutils/m4/gnulib-common.m4 | 394 + devspec.en_US/project/recutils/m4/gnulib-comp.m4 | 1612 + devspec.en_US/project/recutils/m4/group-member.m4 | 29 + .../project/recutils/m4/host-cpu-c-abi.m4 | 644 + devspec.en_US/project/recutils/m4/iconv.m4 | 271 + devspec.en_US/project/recutils/m4/include_next.m4 | 224 + devspec.en_US/project/recutils/m4/intlmacosx.m4 | 56 + devspec.en_US/project/recutils/m4/intmax_t.m4 | 67 + devspec.en_US/project/recutils/m4/inttypes-pri.m4 | 42 + devspec.en_US/project/recutils/m4/inttypes.m4 | 159 + devspec.en_US/project/recutils/m4/inttypes_h.m4 | 29 + devspec.en_US/project/recutils/m4/isnand.m4 | 96 + devspec.en_US/project/recutils/m4/isnanf.m4 | 197 + devspec.en_US/project/recutils/m4/isnanl.m4 | 248 + devspec.en_US/project/recutils/m4/langinfo_h.m4 | 120 + devspec.en_US/project/recutils/m4/largefile.m4 | 161 + devspec.en_US/project/recutils/m4/ldexpl.m4 | 135 + devspec.en_US/project/recutils/m4/lib-ld.m4 | 168 + devspec.en_US/project/recutils/m4/lib-link.m4 | 774 + devspec.en_US/project/recutils/m4/lib-prefix.m4 | 249 + devspec.en_US/project/recutils/m4/libtool.m4 | 8387 +++ devspec.en_US/project/recutils/m4/limits-h.m4 | 43 + devspec.en_US/project/recutils/m4/localcharset.m4 | 11 + devspec.en_US/project/recutils/m4/locale-fr.m4 | 257 + devspec.en_US/project/recutils/m4/locale-ja.m4 | 145 + devspec.en_US/project/recutils/m4/locale-zh.m4 | 139 + devspec.en_US/project/recutils/m4/locale_h.m4 | 127 + devspec.en_US/project/recutils/m4/localeconv.m4 | 22 + .../project/recutils/m4/localtime-buffer.m4 | 21 + devspec.en_US/project/recutils/m4/lock.m4 | 47 + devspec.en_US/project/recutils/m4/longlong.m4 | 113 + devspec.en_US/project/recutils/m4/lseek.m4 | 71 + devspec.en_US/project/recutils/m4/lstat.m4 | 79 + devspec.en_US/project/recutils/m4/ltoptions.m4 | 437 + devspec.en_US/project/recutils/m4/ltsugar.m4 | 124 + devspec.en_US/project/recutils/m4/ltversion.m4 | 23 + devspec.en_US/project/recutils/m4/lt~obsolete.m4 | 99 + devspec.en_US/project/recutils/m4/malloc.m4 | 101 + devspec.en_US/project/recutils/m4/malloca.m4 | 15 + devspec.en_US/project/recutils/m4/math_h.m4 | 366 + devspec.en_US/project/recutils/m4/mbrlen.m4 | 266 + devspec.en_US/project/recutils/m4/mbrtowc.m4 | 672 + devspec.en_US/project/recutils/m4/mbsinit.m4 | 51 + devspec.en_US/project/recutils/m4/mbstate_t.m4 | 41 + devspec.en_US/project/recutils/m4/mbtowc.m4 | 19 + devspec.en_US/project/recutils/m4/memchr.m4 | 99 + devspec.en_US/project/recutils/m4/minmax.m4 | 44 + devspec.en_US/project/recutils/m4/mkdir.m4 | 82 + devspec.en_US/project/recutils/m4/mkostemp.m4 | 23 + devspec.en_US/project/recutils/m4/mkstemp.m4 | 84 + devspec.en_US/project/recutils/m4/mktime.m4 | 299 + devspec.en_US/project/recutils/m4/mmap-anon.m4 | 55 + devspec.en_US/project/recutils/m4/mode_t.m4 | 26 + devspec.en_US/project/recutils/m4/msvc-inval.m4 | 19 + devspec.en_US/project/recutils/m4/msvc-nothrow.m4 | 10 + devspec.en_US/project/recutils/m4/multiarch.m4 | 62 + devspec.en_US/project/recutils/m4/nl_langinfo.m4 | 53 + devspec.en_US/project/recutils/m4/nls.m4 | 32 + devspec.en_US/project/recutils/m4/nocrash.m4 | 131 + devspec.en_US/project/recutils/m4/nstrftime.m4 | 22 + devspec.en_US/project/recutils/m4/obstack.m4 | 35 + devspec.en_US/project/recutils/m4/off_t.m4 | 18 + devspec.en_US/project/recutils/m4/open-cloexec.m4 | 21 + devspec.en_US/project/recutils/m4/open.m4 | 95 + .../project/recutils/m4/parse-datetime.m4 | 39 + devspec.en_US/project/recutils/m4/pathmax.m4 | 42 + devspec.en_US/project/recutils/m4/po.m4 | 453 + devspec.en_US/project/recutils/m4/posix_spawn.m4 | 545 + devspec.en_US/project/recutils/m4/printf-frexp.m4 | 38 + devspec.en_US/project/recutils/m4/printf-frexpl.m4 | 48 + .../project/recutils/m4/printf-posix-rpl.m4 | 26 + devspec.en_US/project/recutils/m4/printf.m4 | 1632 + devspec.en_US/project/recutils/m4/progtest.m4 | 91 + .../project/recutils/m4/pthread_rwlock_rdlock.m4 | 165 + devspec.en_US/project/recutils/m4/quote.m4 | 13 + devspec.en_US/project/recutils/m4/quotearg.m4 | 10 + devspec.en_US/project/recutils/m4/raise.m4 | 36 + devspec.en_US/project/recutils/m4/random_r.m4 | 43 + devspec.en_US/project/recutils/m4/rawmemchr.m4 | 20 + devspec.en_US/project/recutils/m4/read-file.m4 | 8 + devspec.en_US/project/recutils/m4/readline.m4 | 81 + devspec.en_US/project/recutils/m4/readlink.m4 | 73 + devspec.en_US/project/recutils/m4/realloc.m4 | 79 + devspec.en_US/project/recutils/m4/regex.m4 | 311 + devspec.en_US/project/recutils/m4/rename.m4 | 250 + devspec.en_US/project/recutils/m4/rmdir.m4 | 53 + devspec.en_US/project/recutils/m4/sched_h.m4 | 75 + devspec.en_US/project/recutils/m4/secure_getenv.m4 | 26 + .../project/recutils/m4/selinux-context-h.m4 | 22 + .../project/recutils/m4/selinux-selinux-h.m4 | 71 + devspec.en_US/project/recutils/m4/setenv.m4 | 160 + devspec.en_US/project/recutils/m4/sh-filename.m4 | 20 + devspec.en_US/project/recutils/m4/sig_atomic_t.m4 | 14 + devspec.en_US/project/recutils/m4/sigaction.m4 | 40 + devspec.en_US/project/recutils/m4/signal_h.m4 | 83 + .../project/recutils/m4/signalblocking.m4 | 25 + devspec.en_US/project/recutils/m4/signbit.m4 | 377 + devspec.en_US/project/recutils/m4/size_max.m4 | 75 + devspec.en_US/project/recutils/m4/spawn_h.m4 | 130 + devspec.en_US/project/recutils/m4/ssize_t.m4 | 23 + devspec.en_US/project/recutils/m4/stat-time.m4 | 83 + devspec.en_US/project/recutils/m4/stat.m4 | 74 + devspec.en_US/project/recutils/m4/stdarg.m4 | 78 + devspec.en_US/project/recutils/m4/stdbool.m4 | 108 + devspec.en_US/project/recutils/m4/stddef_h.m4 | 72 + devspec.en_US/project/recutils/m4/stdint.m4 | 544 + devspec.en_US/project/recutils/m4/stdint_h.m4 | 27 + devspec.en_US/project/recutils/m4/stdio_h.m4 | 225 + devspec.en_US/project/recutils/m4/stdlib_h.m4 | 127 + devspec.en_US/project/recutils/m4/strcase.m4 | 45 + devspec.en_US/project/recutils/m4/strcasestr.m4 | 154 + devspec.en_US/project/recutils/m4/strchrnul.m4 | 50 + devspec.en_US/project/recutils/m4/strdup.m4 | 36 + devspec.en_US/project/recutils/m4/strerror.m4 | 98 + devspec.en_US/project/recutils/m4/string_h.m4 | 122 + devspec.en_US/project/recutils/m4/strings_h.m4 | 52 + devspec.en_US/project/recutils/m4/strsep.m4 | 23 + devspec.en_US/project/recutils/m4/strverscmp.m4 | 22 + devspec.en_US/project/recutils/m4/sys_file_h.m4 | 41 + devspec.en_US/project/recutils/m4/sys_socket_h.m4 | 176 + devspec.en_US/project/recutils/m4/sys_stat_h.m4 | 100 + devspec.en_US/project/recutils/m4/sys_time_h.m4 | 110 + devspec.en_US/project/recutils/m4/sys_types_h.m4 | 60 + devspec.en_US/project/recutils/m4/sys_wait_h.m4 | 36 + devspec.en_US/project/recutils/m4/tempname.m4 | 19 + devspec.en_US/project/recutils/m4/threadlib.m4 | 473 + devspec.en_US/project/recutils/m4/time_h.m4 | 144 + devspec.en_US/project/recutils/m4/time_r.m4 | 58 + devspec.en_US/project/recutils/m4/time_rz.m4 | 53 + devspec.en_US/project/recutils/m4/timegm.m4 | 26 + devspec.en_US/project/recutils/m4/timespec.m4 | 11 + devspec.en_US/project/recutils/m4/tm_gmtoff.m4 | 14 + devspec.en_US/project/recutils/m4/tmpdir.m4 | 9 + devspec.en_US/project/recutils/m4/tzset.m4 | 83 + devspec.en_US/project/recutils/m4/unistd_h.m4 | 197 + devspec.en_US/project/recutils/m4/unlocked-io.m4 | 41 + .../project/recutils/m4/vasnprintf-posix.m4 | 100 + devspec.en_US/project/recutils/m4/vasnprintf.m4 | 291 + .../project/recutils/m4/vasprintf-posix.m4 | 101 + devspec.en_US/project/recutils/m4/vasprintf.m4 | 46 + devspec.en_US/project/recutils/m4/version-etc.m4 | 33 + .../project/recutils/m4/vfprintf-posix.m4 | 110 + devspec.en_US/project/recutils/m4/wait-process.m4 | 12 + devspec.en_US/project/recutils/m4/waitpid.m4 | 14 + devspec.en_US/project/recutils/m4/warn-on-use.m4 | 51 + devspec.en_US/project/recutils/m4/wchar_h.m4 | 240 + devspec.en_US/project/recutils/m4/wchar_t.m4 | 24 + devspec.en_US/project/recutils/m4/wcrtomb.m4 | 114 + devspec.en_US/project/recutils/m4/wctob.m4 | 130 + devspec.en_US/project/recutils/m4/wctomb.m4 | 19 + devspec.en_US/project/recutils/m4/wctype_h.m4 | 212 + devspec.en_US/project/recutils/m4/wint_t.m4 | 74 + devspec.en_US/project/recutils/m4/xalloc.m4 | 7 + devspec.en_US/project/recutils/m4/xsize.m4 | 12 + devspec.en_US/project/recutils/maint.mk | 1712 + devspec.en_US/project/recutils/man/Makefile | 1833 + devspec.en_US/project/recutils/man/Makefile.am | 73 + devspec.en_US/project/recutils/man/Makefile.in | 1833 + devspec.en_US/project/recutils/man/csv2rec.1 | 51 + devspec.en_US/project/recutils/man/mdb2rec.1 | 52 + devspec.en_US/project/recutils/man/rec2csv.1 | 51 + devspec.en_US/project/recutils/man/recdel.1 | 79 + devspec.en_US/project/recutils/man/recfix.1 | 70 + devspec.en_US/project/recutils/man/recfmt.1 | 44 + devspec.en_US/project/recutils/man/recinf.1 | 56 + devspec.en_US/project/recutils/man/recins.1 | 90 + devspec.en_US/project/recutils/man/recsel.1 | 104 + devspec.en_US/project/recutils/man/recset.1 | 95 + devspec.en_US/project/recutils/po/ChangeLog | 14 + devspec.en_US/project/recutils/po/LINGUAS | 10 + devspec.en_US/project/recutils/po/Makefile | 958 + devspec.en_US/project/recutils/po/Makefile.in | 483 + devspec.en_US/project/recutils/po/Makefile.in.in | 483 + devspec.en_US/project/recutils/po/Makevars | 89 + devspec.en_US/project/recutils/po/POTFILES | 328 + devspec.en_US/project/recutils/po/POTFILES.in | 336 + devspec.en_US/project/recutils/po/Rules-quot | 58 + devspec.en_US/project/recutils/po/boldquot.sed | 10 + devspec.en_US/project/recutils/po/de.gmo | Bin 0 -> 35833 bytes devspec.en_US/project/recutils/po/de.po | 2196 + .../project/recutils/po/en@boldquot.header | 25 + devspec.en_US/project/recutils/po/en@quot.header | 22 + devspec.en_US/project/recutils/po/es.gmo | Bin 0 -> 17909 bytes devspec.en_US/project/recutils/po/es.po | 1901 + devspec.en_US/project/recutils/po/fi.gmo | Bin 0 -> 35172 bytes devspec.en_US/project/recutils/po/fi.po | 2164 + devspec.en_US/project/recutils/po/fr.gmo | Bin 0 -> 36013 bytes devspec.en_US/project/recutils/po/fr.po | 2070 + .../project/recutils/po/insert-header.sin | 23 + devspec.en_US/project/recutils/po/nl.gmo | Bin 0 -> 33948 bytes devspec.en_US/project/recutils/po/nl.po | 2148 + devspec.en_US/project/recutils/po/pt_BR.gmo | Bin 0 -> 35807 bytes devspec.en_US/project/recutils/po/pt_BR.po | 1993 + devspec.en_US/project/recutils/po/quot.sed | 6 + devspec.en_US/project/recutils/po/recutils.pot | 1736 + .../project/recutils/po/remove-potcdate.sin | 19 + devspec.en_US/project/recutils/po/sr.gmo | Bin 0 -> 42076 bytes devspec.en_US/project/recutils/po/sr.po | 1941 + devspec.en_US/project/recutils/po/stamp-po | 1 + devspec.en_US/project/recutils/po/sv.gmo | Bin 0 -> 34183 bytes devspec.en_US/project/recutils/po/sv.po | 1950 + devspec.en_US/project/recutils/po/uk.gmo | Bin 0 -> 45597 bytes devspec.en_US/project/recutils/po/uk.po | 2007 + devspec.en_US/project/recutils/po/vi.gmo | Bin 0 -> 37365 bytes devspec.en_US/project/recutils/po/vi.po | 1972 + .../project/recutils/src/.deps/rec-aggregate.Plo | 272 + .../project/recutils/src/.deps/rec-buf.Plo | 146 + .../project/recutils/src/.deps/rec-comment.Plo | 159 + .../project/recutils/src/.deps/rec-crypt-dummy.Plo | 123 + .../project/recutils/src/.deps/rec-crypt.Plo | 1 + .../project/recutils/src/.deps/rec-db.Plo | 204 + .../project/recutils/src/.deps/rec-fex.Plo | 207 + .../project/recutils/src/.deps/rec-field-name.Plo | 211 + .../project/recutils/src/.deps/rec-field.Plo | 159 + .../project/recutils/src/.deps/rec-int.Plo | 212 + .../project/recutils/src/.deps/rec-mset.Plo | 166 + .../project/recutils/src/.deps/rec-parser.Plo | 207 + .../project/recutils/src/.deps/rec-record.Plo | 195 + .../project/recutils/src/.deps/rec-rset.Plo | 223 + .../project/recutils/src/.deps/rec-sex-ast.Plo | 140 + .../project/recutils/src/.deps/rec-sex-lex.Plo | 241 + .../project/recutils/src/.deps/rec-sex-parser.Plo | 145 + .../project/recutils/src/.deps/rec-sex-tab.Plo | 171 + .../project/recutils/src/.deps/rec-sex.Plo | 209 + .../project/recutils/src/.deps/rec-types.Plo | 215 + .../project/recutils/src/.deps/rec-utils.Plo | 209 + .../project/recutils/src/.deps/rec-writer.Plo | 195 + devspec.en_US/project/recutils/src/.deps/rec.Plo | 154 + .../project/recutils/src/.libs/librec.lai | 41 + devspec.en_US/project/recutils/src/Makefile | 2063 + devspec.en_US/project/recutils/src/Makefile.am | 85 + devspec.en_US/project/recutils/src/Makefile.in | 2063 + devspec.en_US/project/recutils/src/config.h | 2046 + devspec.en_US/project/recutils/src/config.h.in | 2045 + devspec.en_US/project/recutils/src/rec-aggregate.c | 381 + devspec.en_US/project/recutils/src/rec-buf.c | 150 + devspec.en_US/project/recutils/src/rec-comment.c | 79 + .../project/recutils/src/rec-crypt-dummy.c | 80 + devspec.en_US/project/recutils/src/rec-crypt.c | 438 + devspec.en_US/project/recutils/src/rec-db.c | 1791 + devspec.en_US/project/recutils/src/rec-fex.c | 854 + .../project/recutils/src/rec-field-name.c | 120 + devspec.en_US/project/recutils/src/rec-field.c | 332 + devspec.en_US/project/recutils/src/rec-int.c | 1269 + devspec.en_US/project/recutils/src/rec-mset.c | 912 + devspec.en_US/project/recutils/src/rec-parser.c | 1162 + devspec.en_US/project/recutils/src/rec-record.c | 846 + devspec.en_US/project/recutils/src/rec-rset.c | 1825 + devspec.en_US/project/recutils/src/rec-sex-ast.c | 437 + devspec.en_US/project/recutils/src/rec-sex-ast.h | 137 + devspec.en_US/project/recutils/src/rec-sex-lex.c | 2656 + devspec.en_US/project/recutils/src/rec-sex-lex.l | 267 + .../project/recutils/src/rec-sex-parser.c | 173 + .../project/recutils/src/rec-sex-parser.h | 60 + devspec.en_US/project/recutils/src/rec-sex-tab.c | 1778 + devspec.en_US/project/recutils/src/rec-sex-tab.h | 105 + devspec.en_US/project/recutils/src/rec-sex-tab.y | 176 + devspec.en_US/project/recutils/src/rec-sex.c | 1172 + devspec.en_US/project/recutils/src/rec-types.c | 1691 + devspec.en_US/project/recutils/src/rec-utils.c | 447 + devspec.en_US/project/recutils/src/rec-utils.h | 91 + devspec.en_US/project/recutils/src/rec-writer.c | 752 + devspec.en_US/project/recutils/src/rec.c | 53 + devspec.en_US/project/recutils/src/rec.h | 2273 + devspec.en_US/project/recutils/src/stamp-h1 | 1 + .../recutils/torture/.deps/runtests-runtests.Po | 1 + devspec.en_US/project/recutils/torture/Makefile | 4466 ++ devspec.en_US/project/recutils/torture/Makefile.am | 163 + devspec.en_US/project/recutils/torture/Makefile.in | 4466 ++ .../.deps/runtests-rec-comment-destroy.Po | 1 + .../rec-comment/.deps/runtests-rec-comment-dup.Po | 1 + .../.deps/runtests-rec-comment-equal-p.Po | 1 + .../rec-comment/.deps/runtests-rec-comment-new.Po | 1 + .../.deps/runtests-rec-comment-set-text.Po | 1 + .../rec-comment/.deps/runtests-rec-comment-text.Po | 1 + .../.deps/runtests-tsuite-rec-comment.Po | 1 + .../torture/rec-comment/rec-comment-destroy.c | 62 + .../recutils/torture/rec-comment/rec-comment-dup.c | 73 + .../torture/rec-comment/rec-comment-equal-p.c | 85 + .../recutils/torture/rec-comment/rec-comment-new.c | 81 + .../torture/rec-comment/rec-comment-set-text.c | 71 + .../torture/rec-comment/rec-comment-text.c | 87 + .../torture/rec-comment/tsuite-rec-comment.c | 52 + .../rec-fex/.deps/runtests-rec-fex-check.Po | 1 + .../rec-fex/.deps/runtests-rec-fex-destroy.Po | 1 + .../.deps/runtests-rec-fex-elem-field-name.Po | 1 + .../rec-fex/.deps/runtests-rec-fex-elem-max.Po | 1 + .../rec-fex/.deps/runtests-rec-fex-elem-min.Po | 1 + .../.deps/runtests-rec-fex-elem-rewrite-to.Po | 1 + .../torture/rec-fex/.deps/runtests-rec-fex-get.Po | 1 + .../torture/rec-fex/.deps/runtests-rec-fex-new.Po | 1 + .../torture/rec-fex/.deps/runtests-rec-fex-size.Po | 1 + .../torture/rec-fex/.deps/runtests-rec-fex-sort.Po | 1 + .../torture/rec-fex/.deps/runtests-rec-fex-str.Po | 1 + .../rec-fex/.deps/runtests-tsuite-rec-fex.Po | 1 + .../recutils/torture/rec-fex/rec-fex-check.c | 137 + .../recutils/torture/rec-fex/rec-fex-destroy.c | 61 + .../torture/rec-fex/rec-fex-elem-field-name.c | 71 + .../recutils/torture/rec-fex/rec-fex-elem-max.c | 120 + .../recutils/torture/rec-fex/rec-fex-elem-min.c | 120 + .../torture/rec-fex/rec-fex-elem-rewrite-to.c | 93 + .../project/recutils/torture/rec-fex/rec-fex-get.c | 104 + .../project/recutils/torture/rec-fex/rec-fex-new.c | 297 + .../recutils/torture/rec-fex/rec-fex-size.c | 72 + .../recutils/torture/rec-fex/rec-fex-sort.c | 78 + .../project/recutils/torture/rec-fex/rec-fex-str.c | 107 + .../recutils/torture/rec-fex/tsuite-rec-fex.c | 62 + .../.deps/runtests-rec-field-name-equal-p.Po | 1 + .../.deps/runtests-rec-field-name-normalise.Po | 1 + .../.deps/runtests-rec-field-name-p.Po | 1 + .../.deps/runtests-tsuite-rec-field-name.Po | 1 + .../rec-field-name/rec-field-name-equal-p.c | 81 + .../rec-field-name/rec-field-name-normalise.c | 71 + .../torture/rec-field-name/rec-field-name-p.c | 64 + .../torture/rec-field-name/tsuite-rec-field-name.c | 47 + .../.deps/runtests-rec-field-char-location-str.Po | 1 + .../.deps/runtests-rec-field-char-location.Po | 1 + .../rec-field/.deps/runtests-rec-field-destroy.Po | 1 + .../rec-field/.deps/runtests-rec-field-dup.Po | 1 + .../rec-field/.deps/runtests-rec-field-equal-p.Po | 1 + .../.deps/runtests-rec-field-location-str.Po | 1 + .../rec-field/.deps/runtests-rec-field-location.Po | 1 + .../rec-field/.deps/runtests-rec-field-name.Po | 1 + .../rec-field/.deps/runtests-rec-field-new.Po | 1 + .../.deps/runtests-rec-field-set-char-location.Po | 1 + .../.deps/runtests-rec-field-set-location.Po | 1 + .../rec-field/.deps/runtests-rec-field-set-name.Po | 1 + .../.deps/runtests-rec-field-set-source.Po | 1 + .../.deps/runtests-rec-field-set-value.Po | 1 + .../rec-field/.deps/runtests-rec-field-source.Po | 1 + .../.deps/runtests-rec-field-to-comment.Po | 1 + .../rec-field/.deps/runtests-rec-field-value.Po | 1 + .../rec-field/.deps/runtests-tsuite-rec-field.Po | 1 + .../rec-field/rec-field-char-location-str.c | 72 + .../torture/rec-field/rec-field-char-location.c | 65 + .../recutils/torture/rec-field/rec-field-destroy.c | 61 + .../recutils/torture/rec-field/rec-field-dup.c | 125 + .../recutils/torture/rec-field/rec-field-equal-p.c | 96 + .../torture/rec-field/rec-field-location-str.c | 71 + .../torture/rec-field/rec-field-location.c | 66 + .../recutils/torture/rec-field/rec-field-name.c | 97 + .../recutils/torture/rec-field/rec-field-new.c | 64 + .../rec-field/rec-field-set-char-location.c | 64 + .../torture/rec-field/rec-field-set-location.c | 64 + .../torture/rec-field/rec-field-set-name.c | 104 + .../torture/rec-field/rec-field-set-source.c | 64 + .../torture/rec-field/rec-field-set-value.c | 101 + .../recutils/torture/rec-field/rec-field-source.c | 66 + .../torture/rec-field/rec-field-to-comment.c | 79 + .../recutils/torture/rec-field/rec-field-value.c | 99 + .../recutils/torture/rec-field/tsuite-rec-field.c | 74 + .../rec-mset/.deps/runtests-rec-mset-count.Po | 1 + .../rec-mset/.deps/runtests-rec-mset-dup.Po | 1 + .../rec-mset/.deps/runtests-rec-mset-get-at.Po | 1 + .../rec-mset/.deps/runtests-rec-mset-new.Po | 1 + .../.deps/runtests-rec-mset-register-type.Po | 1 + .../rec-mset/.deps/runtests-rec-mset-type-p.Po | 1 + .../rec-mset/.deps/runtests-tsuite-rec-mset.Po | 1 + .../project/recutils/torture/rec-mset/elem-types.h | 123 + .../recutils/torture/rec-mset/rec-mset-count.c | 138 + .../recutils/torture/rec-mset/rec-mset-dup.c | 125 + .../recutils/torture/rec-mset/rec-mset-get-at.c | 195 + .../recutils/torture/rec-mset/rec-mset-new.c | 63 + .../torture/rec-mset/rec-mset-register-type.c | 75 + .../recutils/torture/rec-mset/rec-mset-type-p.c | 126 + .../recutils/torture/rec-mset/tsuite-rec-mset.c | 52 + .../rec-parser/.deps/runtests-rec-parse-db.Po | 1 + .../.deps/runtests-rec-parse-field-name-str.Po | 1 + .../.deps/runtests-rec-parse-field-name.Po | 1 + .../rec-parser/.deps/runtests-rec-parse-field.Po | 1 + .../.deps/runtests-rec-parse-record-str.Po | 1 + .../rec-parser/.deps/runtests-rec-parse-record.Po | 1 + .../rec-parser/.deps/runtests-rec-parse-rset.Po | 1 + .../.deps/runtests-rec-parser-destroy.Po | 1 + .../rec-parser/.deps/runtests-rec-parser-eof.Po | 1 + .../rec-parser/.deps/runtests-rec-parser-error.Po | 1 + .../.deps/runtests-rec-parser-new-mem.Po | 1 + .../.deps/runtests-rec-parser-new-str.Po | 1 + .../rec-parser/.deps/runtests-rec-parser-new.Po | 1 + .../rec-parser/.deps/runtests-rec-parser-perror.Po | 1 + .../rec-parser/.deps/runtests-rec-parser-reset.Po | 1 + .../.deps/runtests-rec-parser-seek-mem.Po | 1 + .../rec-parser/.deps/runtests-tsuite-rec-parser.Po | 1 + .../recutils/torture/rec-parser/rec-parse-db.c | 80 + .../torture/rec-parser/rec-parse-field-name-str.c | 102 + .../torture/rec-parser/rec-parse-field-name.c | 121 + .../recutils/torture/rec-parser/rec-parse-field.c | 190 + .../torture/rec-parser/rec-parse-record-str.c | 89 + .../recutils/torture/rec-parser/rec-parse-record.c | 139 + .../recutils/torture/rec-parser/rec-parse-rset.c | 109 + .../torture/rec-parser/rec-parser-destroy.c | 62 + .../recutils/torture/rec-parser/rec-parser-eof.c | 67 + .../recutils/torture/rec-parser/rec-parser-error.c | 67 + .../torture/rec-parser/rec-parser-new-mem.c | 71 + .../torture/rec-parser/rec-parser-new-str.c | 63 + .../recutils/torture/rec-parser/rec-parser-new.c | 62 + .../torture/rec-parser/rec-parser-perror.c | 68 + .../recutils/torture/rec-parser/rec-parser-reset.c | 67 + .../torture/rec-parser/rec-parser-seek-mem.c | 117 + .../torture/rec-parser/tsuite-rec-parser.c | 73 + .../rec-record/.deps/runtests-tsuite-rec-record.Po | 1 + .../torture/rec-record/tsuite-rec-record.c | 51 + .../rec-sex/.deps/runtests-rec-sex-compile.Po | 1 + .../rec-sex/.deps/runtests-rec-sex-destroy.Po | 1 + .../torture/rec-sex/.deps/runtests-rec-sex-eval.Po | 1 + .../torture/rec-sex/.deps/runtests-rec-sex-new.Po | 1 + .../rec-sex/.deps/runtests-tsuite-rec-sex.Po | 1 + .../recutils/torture/rec-sex/rec-sex-compile.c | 91 + .../recutils/torture/rec-sex/rec-sex-destroy.c | 64 + .../recutils/torture/rec-sex/rec-sex-eval.c | 80 + .../project/recutils/torture/rec-sex/rec-sex-new.c | 64 + .../recutils/torture/rec-sex/tsuite-rec-sex.c | 48 + .../.deps/runtests-rec-type-reg-destroy.Po | 1 + .../.deps/runtests-rec-type-reg-get.Po | 1 + .../.deps/runtests-rec-type-reg-new.Po | 1 + .../.deps/runtests-tsuite-rec-type-reg.Po | 1 + .../torture/rec-type-reg/rec-type-reg-destroy.c | 60 + .../torture/rec-type-reg/rec-type-reg-get.c | 95 + .../torture/rec-type-reg/rec-type-reg-new.c | 60 + .../torture/rec-type-reg/tsuite-rec-type-reg.c | 46 + .../rec-type/.deps/runtests-rec-type-check.Po | 1 + .../rec-type/.deps/runtests-rec-type-descr-p.Po | 1 + .../rec-type/.deps/runtests-rec-type-destroy.Po | 1 + .../rec-type/.deps/runtests-rec-type-equal-p.Po | 1 + .../rec-type/.deps/runtests-rec-type-kind-str.Po | 1 + .../rec-type/.deps/runtests-rec-type-kind.Po | 1 + .../rec-type/.deps/runtests-rec-type-name.Po | 1 + .../rec-type/.deps/runtests-rec-type-new.Po | 1 + .../rec-type/.deps/runtests-rec-type-set-name.Po | 1 + .../rec-type/.deps/runtests-tsuite-rec-type.Po | 1 + .../recutils/torture/rec-type/rec-type-check.c | 354 + .../recutils/torture/rec-type/rec-type-descr-p.c | 95 + .../recutils/torture/rec-type/rec-type-destroy.c | 60 + .../recutils/torture/rec-type/rec-type-equal-p.c | 140 + .../recutils/torture/rec-type/rec-type-kind-str.c | 113 + .../recutils/torture/rec-type/rec-type-kind.c | 110 + .../recutils/torture/rec-type/rec-type-name.c | 85 + .../recutils/torture/rec-type/rec-type-new.c | 178 + .../recutils/torture/rec-type/rec-type-set-name.c | 66 + .../recutils/torture/rec-type/tsuite-rec-type.c | 58 + .../.deps/runtests-rec-write-comment-str.Po | 1 + .../rec-writer/.deps/runtests-rec-write-comment.Po | 1 + .../rec-writer/.deps/runtests-rec-write-db.Po | 1 + .../.deps/runtests-rec-write-field-name-str.Po | 1 + .../.deps/runtests-rec-write-field-name.Po | 1 + .../.deps/runtests-rec-write-field-str.Po | 1 + .../rec-writer/.deps/runtests-rec-write-field.Po | 1 + .../rec-writer/.deps/runtests-rec-write-record.Po | 1 + .../rec-writer/.deps/runtests-rec-write-rset.Po | 1 + .../.deps/runtests-rec-writer-destroy.Po | 1 + .../rec-writer/.deps/runtests-rec-writer-new.Po | 1 + .../rec-writer/.deps/runtests-tsuite-rec-writer.Po | 1 + .../torture/rec-writer/rec-write-comment-str.c | 99 + .../torture/rec-writer/rec-write-comment.c | 127 + .../recutils/torture/rec-writer/rec-write-db.c | 100 + .../torture/rec-writer/rec-write-field-name-str.c | 83 + .../torture/rec-writer/rec-write-field-name.c | 93 + .../torture/rec-writer/rec-write-field-str.c | 88 + .../recutils/torture/rec-writer/rec-write-field.c | 171 + .../recutils/torture/rec-writer/rec-write-record.c | 240 + .../recutils/torture/rec-writer/rec-write-rset.c | 95 + .../torture/rec-writer/rec-writer-destroy.c | 62 + .../recutils/torture/rec-writer/rec-writer-new.c | 62 + .../torture/rec-writer/tsuite-rec-writer.c | 62 + devspec.en_US/project/recutils/torture/runtests.c | 72 + .../project/recutils/torture/utils/Makefile | 2157 + .../project/recutils/torture/utils/Makefile.am | 34 + .../project/recutils/torture/utils/Makefile.in | 2157 + .../project/recutils/torture/utils/config.sh | 24 + .../project/recutils/torture/utils/config.sh.in | 24 + .../project/recutils/torture/utils/csv2rec.sh | 148 + .../project/recutils/torture/utils/rec2csv.sh | 246 + .../project/recutils/torture/utils/recdel.sh | 295 + .../project/recutils/torture/utils/recfix.sh | 2419 + .../project/recutils/torture/utils/recfmt.sh | 150 + .../project/recutils/torture/utils/recinf.sh | 154 + .../project/recutils/torture/utils/recins.sh | 540 + .../project/recutils/torture/utils/recsel.sh | 1850 + .../project/recutils/torture/utils/recset.sh | 491 + .../project/recutils/torture/utils/testutils.sh | 216 + .../project/recutils/utils/.deps/csv2rec.Po | 220 + .../recutils/utils/.deps/mdb2rec-mdb2rec.Po | 1 + .../project/recutils/utils/.deps/mdb2rec-recutl.Po | 1 + .../project/recutils/utils/.deps/rec2csv.Po | 220 + .../project/recutils/utils/.deps/recdel.Po | 218 + .../project/recutils/utils/.deps/recfix.Po | 219 + .../project/recutils/utils/.deps/recfmt.Po | 217 + .../project/recutils/utils/.deps/recinf.Po | 218 + .../project/recutils/utils/.deps/recins.Po | 238 + .../project/recutils/utils/.deps/recsel.Po | 218 + .../project/recutils/utils/.deps/recset.Po | 218 + .../project/recutils/utils/.deps/recutl.Po | 256 + devspec.en_US/project/recutils/utils/.libs/csv2rec | Bin 0 -> 438508 bytes devspec.en_US/project/recutils/utils/.libs/rec2csv | Bin 0 -> 441336 bytes devspec.en_US/project/recutils/utils/.libs/recdel | Bin 0 -> 422228 bytes devspec.en_US/project/recutils/utils/.libs/recfix | Bin 0 -> 418632 bytes devspec.en_US/project/recutils/utils/.libs/recfmt | Bin 0 -> 418964 bytes devspec.en_US/project/recutils/utils/.libs/recinf | Bin 0 -> 417864 bytes devspec.en_US/project/recutils/utils/.libs/recins | Bin 0 -> 423912 bytes devspec.en_US/project/recutils/utils/.libs/recsel | Bin 0 -> 429124 bytes devspec.en_US/project/recutils/utils/.libs/recset | Bin 0 -> 423560 bytes devspec.en_US/project/recutils/utils/Makefile | 2083 + devspec.en_US/project/recutils/utils/Makefile.am | 88 + devspec.en_US/project/recutils/utils/Makefile.in | 2083 + devspec.en_US/project/recutils/utils/csv2rec | 228 + devspec.en_US/project/recutils/utils/csv2rec.c | 414 + devspec.en_US/project/recutils/utils/mdb2rec.c | 553 + devspec.en_US/project/recutils/utils/rec2csv | 228 + devspec.en_US/project/recutils/utils/rec2csv.c | 359 + devspec.en_US/project/recutils/utils/recdel | 228 + devspec.en_US/project/recutils/utils/recdel.c | 284 + devspec.en_US/project/recutils/utils/recfix | 228 + devspec.en_US/project/recutils/utils/recfix.c | 581 + devspec.en_US/project/recutils/utils/recfmt | 228 + devspec.en_US/project/recutils/utils/recfmt.c | 303 + devspec.en_US/project/recutils/utils/recinf | 228 + devspec.en_US/project/recutils/utils/recinf.c | 290 + devspec.en_US/project/recutils/utils/recins | 228 + devspec.en_US/project/recutils/utils/recins.c | 418 + devspec.en_US/project/recutils/utils/recsel | 228 + devspec.en_US/project/recutils/utils/recsel.c | 535 + devspec.en_US/project/recutils/utils/recset | 228 + devspec.en_US/project/recutils/utils/recset.c | 373 + devspec.en_US/project/recutils/utils/recutl.c | 654 + devspec.en_US/project/recutils/utils/recutl.h | 266 + devspec.en_US/tmp.txt | 69 + docs/index.md | 17 + mkdocs.yml | 1 + .readthedocs.yaml => readthedocs.txt | 0 requirements.txt | 1 - 1345 files changed, 583719 insertions(+), 95 deletions(-) create mode 100755 1.1.build-environment.txt delete mode 100644 LICENSE delete mode 100644 README.en.md delete mode 100644 README.md create mode 100755 devspec.en_US/1.0.general.txt create mode 100755 devspec.en_US/1.1.build-environment.txt create mode 100755 devspec.en_US/1.1.doc-md.txt create mode 100755 devspec.en_US/1.1.words-conception.txt create mode 100755 devspec.en_US/1.2.rules.txt create mode 100755 devspec.en_US/1.3.conception-and-mind.txt create mode 100755 devspec.en_US/2.0.develop-step-guide.txt create mode 100755 devspec.en_US/2.1.dev-actor-task.txt create mode 100755 devspec.en_US/2.2.develop-step-diagrams.txt create mode 100755 devspec.en_US/2.3.develop-management.txt copy devspec.en_US/{file => 2.4.example-sed.txt} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/2.5.example-recutils.txt rename devspec.en_US/{test => 2.6.example-umbrello.txt} (100%) mode change 100644 => 100755 rename test.md => devspec.en_US/3.0.code-style.txt (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/3.1.code-format.txt create mode 100755 devspec.en_US/3.2.name-style.txt create mode 100755 devspec.en_US/3.3.c-cpp-code-format.txt copy devspec.en_US/{file => 3.4.sh-code-format.txt} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/4.0.prog-style.txt copy devspec.en_US/{file => 4.1.classical.txt} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => 4.2.data-structure-algorithm.txt} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/5.0.copying-lisence.txt copy devspec.en_US/{file => 6.0.pkg-structure.txt} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/6.1.version-code.txt copy devspec.en_US/{file => 6.2.pkg-file-name-format.txt} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/6.3.general-file-type.txt create mode 100755 devspec.en_US/6.4.src-pkg-dir-structure.txt create mode 100755 devspec.en_US/6.5.install-pkg-dir-structure.txt copy devspec.en_US/{file => 7.0.code-and-executables.txt} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/7.1.code-manage-git.txt copy devspec.en_US/{file => 7.2.home-pages.txt} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/7.3.code-hosting.txt copy devspec.en_US/{file => 7.4.publish.txt} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/7.5.soft-repository.txt create mode 100755 devspec.en_US/8.0.template.txt copy devspec.en_US/{file => 8.1.language-element.txt} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => 8.2.src-file.txt} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => 8.3.src-pkg-template.txt} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => 8.4.classical-implement-template.txt} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/9.file-format.txt create mode 100755 devspec.en_US/codestyle/code-style.imi create mode 100755 devspec.en_US/codestyle/codetemplates.xml create mode 100755 devspec.en_US/codestyle/deven code style-org.xml create mode 100755 devspec.en_US/codestyle/deven code style.xml create mode 100755 devspec.en_US/codestyle/skeleton-linux.xml create mode 100755 devspec.en_US/codestyle/templates.xml create mode 100755 devspec.en_US/conception-and-mind.txt create mode 100755 devspec.en_US/dev-step-diagrams/SE-analysis-designprocedure.png create mode 100755 devspec.en_US/dev-step-diagrams/compact-analysis-design-procedure.png create mode 100755 devspec.en_US/dev-step-diagrams/dev-actor.png create mode 100755 devspec.en_US/dev-step-diagrams/dev-work-flow-diagram.png create mode 100755 devspec.en_US/dev-step-diagrams/devspec-20221113.uml create mode 100755 "devspec.en_US/dev-step-diagrams/devspec-20221115-\346\246\202\350\246\201\345\233\276.uml" create mode 100755 "devspec.en_US/dev-step-diagrams/devspec-20221116-\346\246\202\350\246\201\345\233\276.uml" create mode 100755 devspec.en_US/dev-step-diagrams/devspec.uml create mode 100755 devspec.en_US/dev-step-diagrams/top-usecase.png create mode 100755 devspec.en_US/gnu-spec/boilerplate-source.html copy devspec.en_US/{file => gnu-spec/distributions.txt} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/gnu-spec/ftp-space.txt create mode 100755 devspec.en_US/gnu-spec/gendocs_template_min.html create mode 100755 "devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232.html" create mode 100755 "devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/banner-small.png" create mode 100755 "devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/banner.png" create mode 100755 "devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/fsf-logo-notext-small.png" create mode 100755 "devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/fundraiser.css" create mode 100755 "devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/heckert_gnu.transp.small.png" create mode 100755 "devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/layout.min.css" create mode 100755 "devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/mini.css" create mode 100755 "devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/print.min.css" create mode 100755 "devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/search.png" create mode 100755 "devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/style.zh-cn.css" create mode 100755 "devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/translations.png" create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Information for Maintainers of GNU Software.html create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Information for Maintainers of GNU Software_files/manual.css create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation.html create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/banner-small.png create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/banner.png create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/fsf-logo-notext-small.png create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/fundraiser.css create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/heckert_gnu.transp.small.png create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/layout.min.css create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/mini.css create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/print.min.css create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/search.png create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/translations.png create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation.html create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/banner-small.png create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/banner.png create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/fsf-logo-notext-small.png create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/fundraiser.css create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/gnu-head-sm.jpg create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/heckert_gnu.transp.small.png create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/layout.min.css create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/mini.css create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/print.min.css create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/search.png create mode 100755 devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/translations.png create mode 100755 devspec.en_US/gnu-spec/munual-on-webpages.txt create mode 100755 devspec.en_US/gnu-spec/subject-for-gnu-softpkg-maintainning.txt create mode 100755 devspec.en_US/gnu-spec/webpages.txt copy devspec.en_US/{file => project/build-sample/cfg/dest-list.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/cfg/flow.imi} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/project/build-sample/cfg/step.imi create mode 100755 devspec.en_US/project/build-sample/cfg/taglist.imi copy devspec.en_US/{file => project/build-sample/default-params/compile-src-asm.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/default-params/compile-src-c.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/default-params/compile-src-cpp.imi} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/project/build-sample/default-params/link-dest-a.imi copy devspec.en_US/{file => project/build-sample/default-params/link-dest-bin.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/default-params/link-dest-elf.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/default-params/link-dest-hex.imi} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/project/build-sample/default-params/link-dest-la.imi create mode 100755 devspec.en_US/project/build-sample/default-params/link-dest-o.imi create mode 100755 devspec.en_US/project/build-sample/default-params/link-dest-so.imi copy devspec.en_US/{file => project/build-sample/default-params/list-inc-hdr.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/default-params/list-inc-lib.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/default-params/list-inc-pkg.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/default-params/list-macro-define.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/default-params/list-path-incpath.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/default-params/list-path-libpath.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/dest-test/compile-src-asm.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/dest-test/compile-src-c.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/dest-test/compile-src-cpp.imi} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/project/build-sample/dest-test/dest.imi create mode 100755 devspec.en_US/project/build-sample/dest-test/link-dest-a.imi copy devspec.en_US/{file => project/build-sample/dest-test/link-dest-bin.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/dest-test/link-dest-elf.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/dest-test/link-dest-hex.imi} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/project/build-sample/dest-test/link-dest-la.imi create mode 100755 devspec.en_US/project/build-sample/dest-test/link-dest-o.imi copy devspec.en_US/{file => project/build-sample/dest-test/list-inc-hdr.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/dest-test/list-inc-lib.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/dest-test/list-inc-pkg.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/dest-test/list-macro-define.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/dest-test/list-path-incpath.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/dest-test/list-path-libpath.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/dest-test/list-src-asm.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/dest-test/list-src-c.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/dest-test/list-src-cpp.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/dest-test/src/src.c.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/imilib/buildpkg/public-params/compile-src-asm.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/imilib/buildpkg/public-params/compile-src-c.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/imilib/buildpkg/public-params/compile-src-cpp.imi} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-a.imi copy devspec.en_US/{file => project/build-sample/imilib/buildpkg/public-params/link-dest-bin.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/imilib/buildpkg/public-params/link-dest-elf.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/imilib/buildpkg/public-params/link-dest-hex.imi} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-la.imi create mode 100755 devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-o.imi create mode 100755 devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-so.imi copy devspec.en_US/{file => project/build-sample/imilib/buildpkg/public-params/list-inc-hdr.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/imilib/buildpkg/public-params/list-inc-lib.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/imilib/buildpkg/public-params/list-inc-pkg.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/imilib/buildpkg/public-params/list-macro-define.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/imilib/buildpkg/public-params/list-path-incpath.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/imilib/buildpkg/public-params/list-path-libpath.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/imilib/buildpkg/public-params/list-subproject.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/imilib/buildpkg/public-params/list-unit-testing.imi} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/project.imi} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/project/build-sample/readme.txt create mode 100755 devspec.en_US/project/build-sample/setting.imi create mode 100755 devspec.en_US/project/build-sample/tasklib/build.shlib copy devspec.en_US/{file => project/build-sample/tasklib/toolchain-gcc/compile-asm.shlib} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/tasklib/toolchain-gcc/compile-c.shlib} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/tasklib/toolchain-gcc/compile-cpp.shlib} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/tasklib/toolchain-gcc/fmt-bin2hex.shlib} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/tasklib/toolchain-gcc/fmt-hex2bin.shlib} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/tasklib/toolchain-gcc/link-a.shlib} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/tasklib/toolchain-gcc/link-elf.shlib} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/tasklib/toolchain-gcc/link-la.shlib} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/tasklib/toolchain-gcc/link-o.shlib} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/tasklib/toolchain-gcc/link-so.shlib} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/tasklib/toolchain-gcc/objcopy-bin.shlib} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/tasklib/toolchain-gcc/src-hdr-dep.shlib} (100%) mode change 100644 => 100755 copy devspec.en_US/{file => project/build-sample/tasklib/toolchain-gcc/toolchain.shlib} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/project/build-sample/tasklib/toolchain.shlib copy devspec.en_US/{file => project/recutils-build/dest-list.txt} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/project/recutils/ABOUT-NLS create mode 100755 devspec.en_US/project/recutils/AUTHORS create mode 100755 devspec.en_US/project/recutils/COPYING create mode 100755 devspec.en_US/project/recutils/ChangeLog create mode 100755 devspec.en_US/project/recutils/GNUmakefile create mode 100755 devspec.en_US/project/recutils/INSTALL create mode 100755 devspec.en_US/project/recutils/Makefile create mode 100755 devspec.en_US/project/recutils/Makefile.am create mode 100755 devspec.en_US/project/recutils/Makefile.in create mode 100755 devspec.en_US/project/recutils/NEWS create mode 100755 devspec.en_US/project/recutils/README create mode 100755 devspec.en_US/project/recutils/aclocal.m4 create mode 100755 devspec.en_US/project/recutils/algol68/.deps/rec.Po create mode 100755 devspec.en_US/project/recutils/algol68/Makefile create mode 100755 devspec.en_US/project/recutils/algol68/Makefile.am create mode 100755 devspec.en_US/project/recutils/algol68/Makefile.in create mode 100755 devspec.en_US/project/recutils/bash/.deps/readrec.Plo create mode 100755 devspec.en_US/project/recutils/bash/.deps/testrec.Plo create mode 100755 devspec.en_US/project/recutils/bash/Makefile create mode 100755 devspec.en_US/project/recutils/bash/Makefile.am create mode 100755 devspec.en_US/project/recutils/bash/Makefile.in create mode 100755 devspec.en_US/project/recutils/bash/readrec.c create mode 100755 devspec.en_US/project/recutils/bash/testrec.c create mode 100755 devspec.en_US/project/recutils/build-aux/announce-gen create mode 100755 devspec.en_US/project/recutils/build-aux/compile create mode 100755 devspec.en_US/project/recutils/build-aux/config.guess create mode 100755 devspec.en_US/project/recutils/build-aux/config.rpath create mode 100755 devspec.en_US/project/recutils/build-aux/config.sub create mode 100755 devspec.en_US/project/recutils/build-aux/depcomp create mode 100755 devspec.en_US/project/recutils/build-aux/gendocs.sh create mode 100755 devspec.en_US/project/recutils/build-aux/gnupload create mode 100755 devspec.en_US/project/recutils/build-aux/install-sh create mode 100755 devspec.en_US/project/recutils/build-aux/ltmain.sh create mode 100755 devspec.en_US/project/recutils/build-aux/mdate-sh create mode 100755 devspec.en_US/project/recutils/build-aux/missing create mode 100755 devspec.en_US/project/recutils/build-aux/test-driver create mode 100755 devspec.en_US/project/recutils/build-aux/texinfo.tex create mode 100755 devspec.en_US/project/recutils/build-aux/useless-if-before-free create mode 100755 devspec.en_US/project/recutils/build-aux/vc-list-files create mode 100755 devspec.en_US/project/recutils/build-aux/ylwrap create mode 100755 devspec.en_US/project/recutils/config.log create mode 100755 devspec.en_US/project/recutils/config.status create mode 100755 devspec.en_US/project/recutils/configure create mode 100755 devspec.en_US/project/recutils/configure.ac create mode 100755 devspec.en_US/project/recutils/doc/Makefile create mode 100755 devspec.en_US/project/recutils/doc/Makefile.am create mode 100755 devspec.en_US/project/recutils/doc/Makefile.in create mode 100755 devspec.en_US/project/recutils/doc/fdl.texi create mode 100755 devspec.en_US/project/recutils/doc/parse-datetime.texi create mode 100755 devspec.en_US/project/recutils/doc/rec-mode.info create mode 100755 devspec.en_US/project/recutils/doc/rec-mode.texi create mode 100755 devspec.en_US/project/recutils/doc/recutils.info create mode 100755 devspec.en_US/project/recutils/doc/recutils.texi create mode 100755 devspec.en_US/project/recutils/doc/stamp-1 create mode 100755 devspec.en_US/project/recutils/doc/stamp-vti create mode 100755 devspec.en_US/project/recutils/doc/texinfo.tex create mode 100755 devspec.en_US/project/recutils/doc/version-rec-mode.texi create mode 100755 devspec.en_US/project/recutils/doc/version.texi create mode 100755 devspec.en_US/project/recutils/etc/FSD.rec create mode 100755 devspec.en_US/project/recutils/etc/Makefile create mode 100755 devspec.en_US/project/recutils/etc/Makefile.am create mode 100755 devspec.en_US/project/recutils/etc/Makefile.in create mode 100755 devspec.en_US/project/recutils/etc/ob-rec.el create mode 100755 devspec.en_US/project/recutils/etc/rec-mode.el create mode 100755 devspec.en_US/project/recutils/lib/.deps/acl-errno-valid.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/acl-internal.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/acl_entries.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/alloca.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/asnprintf.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/asprintf.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/base64.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/basename-lgpl.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/btowc.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/c-ctype.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/c-strcasecmp.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/c-strncasecmp.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/canonicalize-lgpl.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/cloexec.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/close-stream.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/close.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/closeout.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/copy-acl.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/crc.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/dirname-lgpl.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/dup2.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/error.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/euidaccess.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/execute.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/exitfail.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/fatal-signal.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/fcntl.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/fd-hook.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/float.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/flock.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/floor.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/fpending.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/fprintf.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/frexp.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/frexpl.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/fseek.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/fseeko.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/fseterr.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/fstat.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/ftell.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/ftello.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/fwriting.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/get-permissions.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/getdelim.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/getdtablesize.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/getfilecon.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/getgroups.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/getline.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/getopt.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/getopt1.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/getpass.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/getprogname.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/gettime.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/gettimeofday.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/gl_array_list.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/gl_list.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/group-member.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/hard-locale.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/isnan.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/isnand.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/isnanf.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/isnanl.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/itold.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/localcharset.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/localeconv.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/localtime-buffer.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/lseek.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/lstat.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/malloc.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/malloca.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/math.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/mbrlen.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/mbrtowc.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/mbsinit.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/mbtowc.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/memchr.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/mkdir.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/mkostemp.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/mkstemp.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/mktime.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/msvc-inval.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/msvc-nothrow.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/nl_langinfo.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/nstrftime.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/obstack.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/open.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/parse-datetime.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/printf-args.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/printf-frexp.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/printf-frexpl.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/printf-parse.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/printf.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/progname.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/qcopy-acl.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/qset-acl.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/quotearg.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/raise.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/random_r.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/rawmemchr.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/read-file.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/readline.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/readlink.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/realloc.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/regcomp.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/regex.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/regex_internal.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/regexec.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/rename.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/rmdir.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/se-context.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/se-selinux.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/secure_getenv.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/set-acl.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/set-permissions.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/setenv.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/sig-handler.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/sigaction.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/signbitd.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/signbitf.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/signbitl.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/sigprocmask.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/spawn_faction_addopen.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/spawn_faction_destroy.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/spawn_faction_init.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/spawnattr_destroy.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/spawnattr_init.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/spawnattr_setflags.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/spawnattr_setsigmask.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/spawni.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/spawnp.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/stat-time.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/stat-w32.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/stat.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/strcasecmp.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/strcasestr.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/strchrnul.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/strdup.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/strerror-override.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/strerror.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/stripslash.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/strncasecmp.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/strsep.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/strverscmp.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/tempname.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/time_r.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/time_rz.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/timegm.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/timespec.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/tmpdir.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/tzset.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/unistd.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/unsetenv.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/vasnprintf.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/vasprintf.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/version-etc-fsf.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/version-etc.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/vfprintf.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/wait-process.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/waitpid.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/wcrtomb.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/wctob.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/wctomb.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/wctype-h.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/xalloc-die.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/xmalloc.Plo create mode 100755 devspec.en_US/project/recutils/lib/.deps/xsize.Plo create mode 100755 devspec.en_US/project/recutils/lib/Makefile create mode 100755 devspec.en_US/project/recutils/lib/Makefile.am create mode 100755 devspec.en_US/project/recutils/lib/Makefile.in create mode 100755 devspec.en_US/project/recutils/lib/_Noreturn.h create mode 100755 devspec.en_US/project/recutils/lib/acl-errno-valid.c create mode 100755 devspec.en_US/project/recutils/lib/acl-internal.c create mode 100755 devspec.en_US/project/recutils/lib/acl-internal.h create mode 100755 devspec.en_US/project/recutils/lib/acl.h create mode 100755 devspec.en_US/project/recutils/lib/acl_entries.c create mode 100755 devspec.en_US/project/recutils/lib/alignof.h create mode 100755 devspec.en_US/project/recutils/lib/alloca.c create mode 100755 devspec.en_US/project/recutils/lib/alloca.h create mode 100755 devspec.en_US/project/recutils/lib/alloca.in.h create mode 100755 devspec.en_US/project/recutils/lib/arg-nonnull.h create mode 100755 devspec.en_US/project/recutils/lib/asnprintf.c create mode 100755 devspec.en_US/project/recutils/lib/asprintf.c create mode 100755 devspec.en_US/project/recutils/lib/base64.c create mode 100755 devspec.en_US/project/recutils/lib/base64.h create mode 100755 devspec.en_US/project/recutils/lib/basename-lgpl.c create mode 100755 devspec.en_US/project/recutils/lib/btowc.c create mode 100755 devspec.en_US/project/recutils/lib/c++defs.h create mode 100755 devspec.en_US/project/recutils/lib/c-ctype.c create mode 100755 devspec.en_US/project/recutils/lib/c-ctype.h create mode 100755 devspec.en_US/project/recutils/lib/c-strcase.h create mode 100755 devspec.en_US/project/recutils/lib/c-strcasecmp.c create mode 100755 devspec.en_US/project/recutils/lib/c-strcaseeq.h create mode 100755 devspec.en_US/project/recutils/lib/c-strncasecmp.c create mode 100755 devspec.en_US/project/recutils/lib/canonicalize-lgpl.c create mode 100755 devspec.en_US/project/recutils/lib/cdefs.h create mode 100755 devspec.en_US/project/recutils/lib/cloexec.c create mode 100755 devspec.en_US/project/recutils/lib/cloexec.h create mode 100755 devspec.en_US/project/recutils/lib/close-stream.c create mode 100755 devspec.en_US/project/recutils/lib/close-stream.h create mode 100755 devspec.en_US/project/recutils/lib/close.c create mode 100755 devspec.en_US/project/recutils/lib/closeout.c create mode 100755 devspec.en_US/project/recutils/lib/closeout.h create mode 100755 devspec.en_US/project/recutils/lib/copy-acl.c create mode 100755 devspec.en_US/project/recutils/lib/crc.c create mode 100755 devspec.en_US/project/recutils/lib/crc.h create mode 100755 devspec.en_US/project/recutils/lib/dirname-lgpl.c create mode 100755 devspec.en_US/project/recutils/lib/dirname.h create mode 100755 devspec.en_US/project/recutils/lib/dosname.h create mode 100755 devspec.en_US/project/recutils/lib/dup2.c create mode 100755 devspec.en_US/project/recutils/lib/errno.in.h create mode 100755 devspec.en_US/project/recutils/lib/error.c create mode 100755 devspec.en_US/project/recutils/lib/error.h create mode 100755 devspec.en_US/project/recutils/lib/euidaccess.c create mode 100755 devspec.en_US/project/recutils/lib/execute.c create mode 100755 devspec.en_US/project/recutils/lib/execute.h create mode 100755 devspec.en_US/project/recutils/lib/exitfail.c create mode 100755 devspec.en_US/project/recutils/lib/exitfail.h create mode 100755 devspec.en_US/project/recutils/lib/fatal-signal.c create mode 100755 devspec.en_US/project/recutils/lib/fatal-signal.h create mode 100755 devspec.en_US/project/recutils/lib/fcntl.c create mode 100755 devspec.en_US/project/recutils/lib/fcntl.h create mode 100755 devspec.en_US/project/recutils/lib/fcntl.in.h create mode 100755 devspec.en_US/project/recutils/lib/fd-hook.c create mode 100755 devspec.en_US/project/recutils/lib/fd-hook.h create mode 100755 devspec.en_US/project/recutils/lib/filename.h create mode 100755 devspec.en_US/project/recutils/lib/flexmember.h create mode 100755 devspec.en_US/project/recutils/lib/float+.h create mode 100755 devspec.en_US/project/recutils/lib/float.c create mode 100755 devspec.en_US/project/recutils/lib/float.in.h create mode 100755 devspec.en_US/project/recutils/lib/flock.c create mode 100755 devspec.en_US/project/recutils/lib/floor.c create mode 100755 devspec.en_US/project/recutils/lib/fpending.c create mode 100755 devspec.en_US/project/recutils/lib/fpending.h create mode 100755 devspec.en_US/project/recutils/lib/fprintf.c create mode 100755 devspec.en_US/project/recutils/lib/fpucw.h create mode 100755 devspec.en_US/project/recutils/lib/frexp.c create mode 100755 devspec.en_US/project/recutils/lib/frexpl.c create mode 100755 devspec.en_US/project/recutils/lib/fseek.c create mode 100755 devspec.en_US/project/recutils/lib/fseeko.c create mode 100755 devspec.en_US/project/recutils/lib/fseterr.c create mode 100755 devspec.en_US/project/recutils/lib/fseterr.h create mode 100755 devspec.en_US/project/recutils/lib/fstat.c create mode 100755 devspec.en_US/project/recutils/lib/ftell.c create mode 100755 devspec.en_US/project/recutils/lib/ftello.c create mode 100755 devspec.en_US/project/recutils/lib/fwriting.c create mode 100755 devspec.en_US/project/recutils/lib/fwriting.h create mode 100755 devspec.en_US/project/recutils/lib/get-permissions.c create mode 100755 devspec.en_US/project/recutils/lib/getdelim.c create mode 100755 devspec.en_US/project/recutils/lib/getdtablesize.c create mode 100755 devspec.en_US/project/recutils/lib/getfilecon.c create mode 100755 devspec.en_US/project/recutils/lib/getgroups.c create mode 100755 devspec.en_US/project/recutils/lib/getline.c create mode 100755 devspec.en_US/project/recutils/lib/getopt-cdefs.in.h create mode 100755 devspec.en_US/project/recutils/lib/getopt-core.h create mode 100755 devspec.en_US/project/recutils/lib/getopt-ext.h create mode 100755 devspec.en_US/project/recutils/lib/getopt-pfx-core.h create mode 100755 devspec.en_US/project/recutils/lib/getopt-pfx-ext.h create mode 100755 devspec.en_US/project/recutils/lib/getopt.c create mode 100755 devspec.en_US/project/recutils/lib/getopt.in.h create mode 100755 devspec.en_US/project/recutils/lib/getopt1.c create mode 100755 devspec.en_US/project/recutils/lib/getopt_int.h create mode 100755 devspec.en_US/project/recutils/lib/getpass.c create mode 100755 devspec.en_US/project/recutils/lib/getpass.h create mode 100755 devspec.en_US/project/recutils/lib/getprogname.c create mode 100755 devspec.en_US/project/recutils/lib/getprogname.h create mode 100755 devspec.en_US/project/recutils/lib/gettext.h create mode 100755 devspec.en_US/project/recutils/lib/gettime.c create mode 100755 devspec.en_US/project/recutils/lib/gettimeofday.c create mode 100755 devspec.en_US/project/recutils/lib/gl_array_list.c create mode 100755 devspec.en_US/project/recutils/lib/gl_array_list.h create mode 100755 devspec.en_US/project/recutils/lib/gl_list.c create mode 100755 devspec.en_US/project/recutils/lib/gl_list.h copy devspec.en_US/{file => project/recutils/lib/glthread/.deps/.dirstamp} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/project/recutils/lib/glthread/.deps/lock.Plo create mode 100755 devspec.en_US/project/recutils/lib/glthread/.deps/threadlib.Plo rename devspec.en_US/{file => project/recutils/lib/glthread/.dirstamp} (100%) mode change 100644 => 100755 create mode 100755 devspec.en_US/project/recutils/lib/glthread/lock.c create mode 100755 devspec.en_US/project/recutils/lib/glthread/lock.h create mode 100755 devspec.en_US/project/recutils/lib/glthread/threadlib.c create mode 100755 devspec.en_US/project/recutils/lib/group-member.c create mode 100755 devspec.en_US/project/recutils/lib/hard-locale.c create mode 100755 devspec.en_US/project/recutils/lib/hard-locale.h create mode 100755 devspec.en_US/project/recutils/lib/intprops.h create mode 100755 devspec.en_US/project/recutils/lib/inttypes.h create mode 100755 devspec.en_US/project/recutils/lib/inttypes.in.h create mode 100755 devspec.en_US/project/recutils/lib/isnan.c create mode 100755 devspec.en_US/project/recutils/lib/isnand-nolibm.h create mode 100755 devspec.en_US/project/recutils/lib/isnand.c create mode 100755 devspec.en_US/project/recutils/lib/isnanf-nolibm.h create mode 100755 devspec.en_US/project/recutils/lib/isnanf.c create mode 100755 devspec.en_US/project/recutils/lib/isnanl-nolibm.h create mode 100755 devspec.en_US/project/recutils/lib/isnanl.c create mode 100755 devspec.en_US/project/recutils/lib/itold.c create mode 100755 devspec.en_US/project/recutils/lib/langinfo.h create mode 100755 devspec.en_US/project/recutils/lib/langinfo.in.h create mode 100755 devspec.en_US/project/recutils/lib/libc-config.h create mode 100755 devspec.en_US/project/recutils/lib/limits.h create mode 100755 devspec.en_US/project/recutils/lib/limits.in.h create mode 100755 devspec.en_US/project/recutils/lib/localcharset.c create mode 100755 devspec.en_US/project/recutils/lib/localcharset.h create mode 100755 devspec.en_US/project/recutils/lib/locale.h create mode 100755 devspec.en_US/project/recutils/lib/locale.in.h create mode 100755 devspec.en_US/project/recutils/lib/localeconv.c create mode 100755 devspec.en_US/project/recutils/lib/localtime-buffer.c create mode 100755 devspec.en_US/project/recutils/lib/localtime-buffer.h create mode 100755 devspec.en_US/project/recutils/lib/lseek.c create mode 100755 devspec.en_US/project/recutils/lib/lstat.c create mode 100755 devspec.en_US/project/recutils/lib/malloc.c create mode 100755 devspec.en_US/project/recutils/lib/malloca.c create mode 100755 devspec.en_US/project/recutils/lib/malloca.h create mode 100755 devspec.en_US/project/recutils/lib/math.c create mode 100755 devspec.en_US/project/recutils/lib/math.h create mode 100755 devspec.en_US/project/recutils/lib/math.in.h create mode 100755 devspec.en_US/project/recutils/lib/mbrlen.c create mode 100755 devspec.en_US/project/recutils/lib/mbrtowc.c create mode 100755 devspec.en_US/project/recutils/lib/mbsinit.c create mode 100755 devspec.en_US/project/recutils/lib/mbtowc-impl.h create mode 100755 devspec.en_US/project/recutils/lib/mbtowc.c create mode 100755 devspec.en_US/project/recutils/lib/memchr.c create mode 100755 devspec.en_US/project/recutils/lib/memchr.valgrind create mode 100755 devspec.en_US/project/recutils/lib/minmax.h create mode 100755 devspec.en_US/project/recutils/lib/mkdir.c create mode 100755 devspec.en_US/project/recutils/lib/mkostemp.c create mode 100755 devspec.en_US/project/recutils/lib/mkstemp.c create mode 100755 devspec.en_US/project/recutils/lib/mktime-internal.h create mode 100755 devspec.en_US/project/recutils/lib/mktime.c create mode 100755 devspec.en_US/project/recutils/lib/msvc-inval.c create mode 100755 devspec.en_US/project/recutils/lib/msvc-inval.h create mode 100755 devspec.en_US/project/recutils/lib/msvc-nothrow.c create mode 100755 devspec.en_US/project/recutils/lib/msvc-nothrow.h create mode 100755 devspec.en_US/project/recutils/lib/nl_langinfo.c create mode 100755 devspec.en_US/project/recutils/lib/nstrftime.c create mode 100755 devspec.en_US/project/recutils/lib/obstack.c create mode 100755 devspec.en_US/project/recutils/lib/obstack.h create mode 100755 devspec.en_US/project/recutils/lib/open.c create mode 100755 devspec.en_US/project/recutils/lib/parse-datetime.c create mode 100755 devspec.en_US/project/recutils/lib/parse-datetime.h create mode 100755 devspec.en_US/project/recutils/lib/parse-datetime.y create mode 100755 devspec.en_US/project/recutils/lib/pathmax.h create mode 100755 devspec.en_US/project/recutils/lib/printf-args.c create mode 100755 devspec.en_US/project/recutils/lib/printf-args.h create mode 100755 devspec.en_US/project/recutils/lib/printf-frexp.c create mode 100755 devspec.en_US/project/recutils/lib/printf-frexp.h create mode 100755 devspec.en_US/project/recutils/lib/printf-frexpl.c create mode 100755 devspec.en_US/project/recutils/lib/printf-frexpl.h create mode 100755 devspec.en_US/project/recutils/lib/printf-parse.c create mode 100755 devspec.en_US/project/recutils/lib/printf-parse.h create mode 100755 devspec.en_US/project/recutils/lib/printf.c create mode 100755 devspec.en_US/project/recutils/lib/progname.c create mode 100755 devspec.en_US/project/recutils/lib/progname.h create mode 100755 devspec.en_US/project/recutils/lib/qcopy-acl.c create mode 100755 devspec.en_US/project/recutils/lib/qset-acl.c create mode 100755 devspec.en_US/project/recutils/lib/quote.h create mode 100755 devspec.en_US/project/recutils/lib/quotearg.c create mode 100755 devspec.en_US/project/recutils/lib/quotearg.h create mode 100755 devspec.en_US/project/recutils/lib/raise.c create mode 100755 devspec.en_US/project/recutils/lib/random_r.c create mode 100755 devspec.en_US/project/recutils/lib/rawmemchr.c create mode 100755 devspec.en_US/project/recutils/lib/rawmemchr.valgrind create mode 100755 devspec.en_US/project/recutils/lib/read-file.c create mode 100755 devspec.en_US/project/recutils/lib/read-file.h create mode 100755 devspec.en_US/project/recutils/lib/readline.c create mode 100755 devspec.en_US/project/recutils/lib/readline.h create mode 100755 devspec.en_US/project/recutils/lib/readlink.c create mode 100755 devspec.en_US/project/recutils/lib/realloc.c create mode 100755 devspec.en_US/project/recutils/lib/regcomp.c create mode 100755 devspec.en_US/project/recutils/lib/regex.c create mode 100755 devspec.en_US/project/recutils/lib/regex.h create mode 100755 devspec.en_US/project/recutils/lib/regex_internal.c create mode 100755 devspec.en_US/project/recutils/lib/regex_internal.h create mode 100755 devspec.en_US/project/recutils/lib/regexec.c create mode 100755 devspec.en_US/project/recutils/lib/rename.c create mode 100755 devspec.en_US/project/recutils/lib/rmdir.c create mode 100755 devspec.en_US/project/recutils/lib/root-uid.h create mode 100755 devspec.en_US/project/recutils/lib/same-inode.h create mode 100755 devspec.en_US/project/recutils/lib/sched.in.h create mode 100755 devspec.en_US/project/recutils/lib/se-context.c create mode 100755 devspec.en_US/project/recutils/lib/se-context.in.h create mode 100755 devspec.en_US/project/recutils/lib/se-selinux.c create mode 100755 devspec.en_US/project/recutils/lib/se-selinux.in.h create mode 100755 devspec.en_US/project/recutils/lib/secure_getenv.c create mode 100755 devspec.en_US/project/recutils/lib/selinux/context.h create mode 100755 devspec.en_US/project/recutils/lib/selinux/selinux.h create mode 100755 devspec.en_US/project/recutils/lib/set-acl.c create mode 100755 devspec.en_US/project/recutils/lib/set-permissions.c create mode 100755 devspec.en_US/project/recutils/lib/setenv.c create mode 100755 devspec.en_US/project/recutils/lib/sig-handler.c create mode 100755 devspec.en_US/project/recutils/lib/sig-handler.h create mode 100755 devspec.en_US/project/recutils/lib/sigaction.c create mode 100755 devspec.en_US/project/recutils/lib/signal.h create mode 100755 devspec.en_US/project/recutils/lib/signal.in.h create mode 100755 devspec.en_US/project/recutils/lib/signbitd.c create mode 100755 devspec.en_US/project/recutils/lib/signbitf.c create mode 100755 devspec.en_US/project/recutils/lib/signbitl.c create mode 100755 devspec.en_US/project/recutils/lib/sigprocmask.c create mode 100755 devspec.en_US/project/recutils/lib/size_max.h create mode 100755 devspec.en_US/project/recutils/lib/spawn.h create mode 100755 devspec.en_US/project/recutils/lib/spawn.in.h create mode 100755 devspec.en_US/project/recutils/lib/spawn_faction_addopen.c create mode 100755 devspec.en_US/project/recutils/lib/spawn_faction_destroy.c create mode 100755 devspec.en_US/project/recutils/lib/spawn_faction_init.c create mode 100755 devspec.en_US/project/recutils/lib/spawn_int.h create mode 100755 devspec.en_US/project/recutils/lib/spawnattr_destroy.c create mode 100755 devspec.en_US/project/recutils/lib/spawnattr_init.c create mode 100755 devspec.en_US/project/recutils/lib/spawnattr_setflags.c create mode 100755 devspec.en_US/project/recutils/lib/spawnattr_setsigmask.c create mode 100755 devspec.en_US/project/recutils/lib/spawni.c create mode 100755 devspec.en_US/project/recutils/lib/spawnp.c create mode 100755 devspec.en_US/project/recutils/lib/stat-macros.h create mode 100755 devspec.en_US/project/recutils/lib/stat-time.c create mode 100755 devspec.en_US/project/recutils/lib/stat-time.h create mode 100755 devspec.en_US/project/recutils/lib/stat-w32.c create mode 100755 devspec.en_US/project/recutils/lib/stat-w32.h create mode 100755 devspec.en_US/project/recutils/lib/stat.c create mode 100755 devspec.en_US/project/recutils/lib/stdarg.in.h create mode 100755 devspec.en_US/project/recutils/lib/stdbool.in.h create mode 100755 devspec.en_US/project/recutils/lib/stddef.in.h create mode 100755 devspec.en_US/project/recutils/lib/stdint.h create mode 100755 devspec.en_US/project/recutils/lib/stdint.in.h create mode 100755 devspec.en_US/project/recutils/lib/stdio-impl.h create mode 100755 devspec.en_US/project/recutils/lib/stdio.h create mode 100755 devspec.en_US/project/recutils/lib/stdio.in.h create mode 100755 devspec.en_US/project/recutils/lib/stdlib.h create mode 100755 devspec.en_US/project/recutils/lib/stdlib.in.h create mode 100755 devspec.en_US/project/recutils/lib/str-two-way.h create mode 100755 devspec.en_US/project/recutils/lib/strcasecmp.c create mode 100755 devspec.en_US/project/recutils/lib/strcasestr.c create mode 100755 devspec.en_US/project/recutils/lib/strchrnul.c create mode 100755 devspec.en_US/project/recutils/lib/strchrnul.valgrind create mode 100755 devspec.en_US/project/recutils/lib/strdup.c create mode 100755 devspec.en_US/project/recutils/lib/streq.h create mode 100755 devspec.en_US/project/recutils/lib/strerror-override.c create mode 100755 devspec.en_US/project/recutils/lib/strerror-override.h create mode 100755 devspec.en_US/project/recutils/lib/strerror.c create mode 100755 devspec.en_US/project/recutils/lib/strftime.h create mode 100755 devspec.en_US/project/recutils/lib/string.h create mode 100755 devspec.en_US/project/recutils/lib/string.in.h create mode 100755 devspec.en_US/project/recutils/lib/strings.h create mode 100755 devspec.en_US/project/recutils/lib/strings.in.h create mode 100755 devspec.en_US/project/recutils/lib/stripslash.c create mode 100755 devspec.en_US/project/recutils/lib/strncasecmp.c create mode 100755 devspec.en_US/project/recutils/lib/strsep.c create mode 100755 devspec.en_US/project/recutils/lib/strverscmp.c create mode 100755 devspec.en_US/project/recutils/lib/sys/file.h create mode 100755 devspec.en_US/project/recutils/lib/sys/stat.h create mode 100755 devspec.en_US/project/recutils/lib/sys/time.h create mode 100755 devspec.en_US/project/recutils/lib/sys/types.h create mode 100755 devspec.en_US/project/recutils/lib/sys/wait.h create mode 100755 devspec.en_US/project/recutils/lib/sys_file.in.h create mode 100755 devspec.en_US/project/recutils/lib/sys_stat.in.h create mode 100755 devspec.en_US/project/recutils/lib/sys_time.in.h create mode 100755 devspec.en_US/project/recutils/lib/sys_types.in.h create mode 100755 devspec.en_US/project/recutils/lib/sys_wait.in.h create mode 100755 devspec.en_US/project/recutils/lib/tempname.c create mode 100755 devspec.en_US/project/recutils/lib/tempname.h create mode 100755 devspec.en_US/project/recutils/lib/time-internal.h create mode 100755 devspec.en_US/project/recutils/lib/time.h create mode 100755 devspec.en_US/project/recutils/lib/time.in.h create mode 100755 devspec.en_US/project/recutils/lib/time_r.c create mode 100755 devspec.en_US/project/recutils/lib/time_rz.c create mode 100755 devspec.en_US/project/recutils/lib/timegm.c create mode 100755 devspec.en_US/project/recutils/lib/timespec.c create mode 100755 devspec.en_US/project/recutils/lib/timespec.h create mode 100755 devspec.en_US/project/recutils/lib/tmpdir.c create mode 100755 devspec.en_US/project/recutils/lib/tmpdir.h create mode 100755 devspec.en_US/project/recutils/lib/tzset.c create mode 100755 devspec.en_US/project/recutils/lib/unistd.c create mode 100755 devspec.en_US/project/recutils/lib/unistd.h create mode 100755 devspec.en_US/project/recutils/lib/unistd.in.h create mode 100755 devspec.en_US/project/recutils/lib/unlocked-io.h create mode 100755 devspec.en_US/project/recutils/lib/unsetenv.c create mode 100755 devspec.en_US/project/recutils/lib/unused-parameter.h create mode 100755 devspec.en_US/project/recutils/lib/vasnprintf.c create mode 100755 devspec.en_US/project/recutils/lib/vasnprintf.h create mode 100755 devspec.en_US/project/recutils/lib/vasprintf.c create mode 100755 devspec.en_US/project/recutils/lib/verify.h create mode 100755 devspec.en_US/project/recutils/lib/version-etc-fsf.c create mode 100755 devspec.en_US/project/recutils/lib/version-etc.c create mode 100755 devspec.en_US/project/recutils/lib/version-etc.h create mode 100755 devspec.en_US/project/recutils/lib/vfprintf.c create mode 100755 devspec.en_US/project/recutils/lib/w32spawn.h create mode 100755 devspec.en_US/project/recutils/lib/wait-process.c create mode 100755 devspec.en_US/project/recutils/lib/wait-process.h create mode 100755 devspec.en_US/project/recutils/lib/waitpid.c create mode 100755 devspec.en_US/project/recutils/lib/warn-on-use.h create mode 100755 devspec.en_US/project/recutils/lib/wchar.h create mode 100755 devspec.en_US/project/recutils/lib/wchar.in.h create mode 100755 devspec.en_US/project/recutils/lib/wcrtomb.c create mode 100755 devspec.en_US/project/recutils/lib/wctob.c create mode 100755 devspec.en_US/project/recutils/lib/wctomb-impl.h create mode 100755 devspec.en_US/project/recutils/lib/wctomb.c create mode 100755 devspec.en_US/project/recutils/lib/wctype-h.c create mode 100755 devspec.en_US/project/recutils/lib/wctype.h create mode 100755 devspec.en_US/project/recutils/lib/wctype.in.h create mode 100755 devspec.en_US/project/recutils/lib/xalloc-die.c create mode 100755 devspec.en_US/project/recutils/lib/xalloc-oversized.h create mode 100755 devspec.en_US/project/recutils/lib/xalloc.h create mode 100755 devspec.en_US/project/recutils/lib/xmalloc.c create mode 100755 devspec.en_US/project/recutils/lib/xsize.c create mode 100755 devspec.en_US/project/recutils/lib/xsize.h create mode 100755 devspec.en_US/project/recutils/libcsv/.deps/libcsv.Plo create mode 100755 devspec.en_US/project/recutils/libcsv/Makefile create mode 100755 devspec.en_US/project/recutils/libcsv/Makefile.am create mode 100755 devspec.en_US/project/recutils/libcsv/Makefile.in create mode 100755 devspec.en_US/project/recutils/libcsv/README create mode 100755 devspec.en_US/project/recutils/libcsv/csv.h create mode 100755 devspec.en_US/project/recutils/libcsv/libcsv.c create mode 100755 devspec.en_US/project/recutils/libtool create mode 100755 devspec.en_US/project/recutils/m4/00gnulib.m4 create mode 100755 devspec.en_US/project/recutils/m4/__inline.m4 create mode 100755 devspec.en_US/project/recutils/m4/absolute-header.m4 create mode 100755 devspec.en_US/project/recutils/m4/acl.m4 create mode 100755 devspec.en_US/project/recutils/m4/alloca.m4 create mode 100755 devspec.en_US/project/recutils/m4/asm-underscore.m4 create mode 100755 devspec.en_US/project/recutils/m4/autobuild.m4 create mode 100755 devspec.en_US/project/recutils/m4/base64.m4 create mode 100755 devspec.en_US/project/recutils/m4/bison.m4 create mode 100755 devspec.en_US/project/recutils/m4/btowc.m4 create mode 100755 devspec.en_US/project/recutils/m4/builtin-expect.m4 create mode 100755 devspec.en_US/project/recutils/m4/canonicalize.m4 create mode 100755 devspec.en_US/project/recutils/m4/clock_time.m4 create mode 100755 devspec.en_US/project/recutils/m4/close-stream.m4 create mode 100755 devspec.en_US/project/recutils/m4/close.m4 create mode 100755 devspec.en_US/project/recutils/m4/closeout.m4 create mode 100755 devspec.en_US/project/recutils/m4/codeset.m4 create mode 100755 devspec.en_US/project/recutils/m4/dirname.m4 create mode 100755 devspec.en_US/project/recutils/m4/double-slash-root.m4 create mode 100755 devspec.en_US/project/recutils/m4/dup2.m4 create mode 100755 devspec.en_US/project/recutils/m4/eealloc.m4 create mode 100755 devspec.en_US/project/recutils/m4/environ.m4 create mode 100755 devspec.en_US/project/recutils/m4/errno_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/error.m4 create mode 100755 devspec.en_US/project/recutils/m4/euidaccess.m4 create mode 100755 devspec.en_US/project/recutils/m4/execute.m4 create mode 100755 devspec.en_US/project/recutils/m4/exponentd.m4 create mode 100755 devspec.en_US/project/recutils/m4/exponentf.m4 create mode 100755 devspec.en_US/project/recutils/m4/exponentl.m4 create mode 100755 devspec.en_US/project/recutils/m4/extensions.m4 create mode 100755 devspec.en_US/project/recutils/m4/extern-inline.m4 create mode 100755 devspec.en_US/project/recutils/m4/fatal-signal.m4 create mode 100755 devspec.en_US/project/recutils/m4/fcntl-o.m4 create mode 100755 devspec.en_US/project/recutils/m4/fcntl.m4 create mode 100755 devspec.en_US/project/recutils/m4/fcntl_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/flexmember.m4 create mode 100755 devspec.en_US/project/recutils/m4/float_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/flock.m4 create mode 100755 devspec.en_US/project/recutils/m4/floor.m4 create mode 100755 devspec.en_US/project/recutils/m4/fpending.m4 create mode 100755 devspec.en_US/project/recutils/m4/fpieee.m4 create mode 100755 devspec.en_US/project/recutils/m4/fprintf-posix.m4 create mode 100755 devspec.en_US/project/recutils/m4/frexp.m4 create mode 100755 devspec.en_US/project/recutils/m4/frexpl.m4 create mode 100755 devspec.en_US/project/recutils/m4/fseek.m4 create mode 100755 devspec.en_US/project/recutils/m4/fseeko.m4 create mode 100755 devspec.en_US/project/recutils/m4/fseterr.m4 create mode 100755 devspec.en_US/project/recutils/m4/fstat.m4 create mode 100755 devspec.en_US/project/recutils/m4/ftell.m4 create mode 100755 devspec.en_US/project/recutils/m4/ftello.m4 create mode 100755 devspec.en_US/project/recutils/m4/fwriting.m4 create mode 100755 devspec.en_US/project/recutils/m4/getdelim.m4 create mode 100755 devspec.en_US/project/recutils/m4/getdtablesize.m4 create mode 100755 devspec.en_US/project/recutils/m4/getgroups.m4 create mode 100755 devspec.en_US/project/recutils/m4/getline.m4 create mode 100755 devspec.en_US/project/recutils/m4/getopt.m4 create mode 100755 devspec.en_US/project/recutils/m4/getpass.m4 create mode 100755 devspec.en_US/project/recutils/m4/getprogname.m4 create mode 100755 devspec.en_US/project/recutils/m4/gettext.m4 create mode 100755 devspec.en_US/project/recutils/m4/gettime.m4 create mode 100755 devspec.en_US/project/recutils/m4/gettimeofday.m4 create mode 100755 devspec.en_US/project/recutils/m4/glibc21.m4 create mode 100755 devspec.en_US/project/recutils/m4/gnulib-common.m4 create mode 100755 devspec.en_US/project/recutils/m4/gnulib-comp.m4 create mode 100755 devspec.en_US/project/recutils/m4/group-member.m4 create mode 100755 devspec.en_US/project/recutils/m4/host-cpu-c-abi.m4 create mode 100755 devspec.en_US/project/recutils/m4/iconv.m4 create mode 100755 devspec.en_US/project/recutils/m4/include_next.m4 create mode 100755 devspec.en_US/project/recutils/m4/intlmacosx.m4 create mode 100755 devspec.en_US/project/recutils/m4/intmax_t.m4 create mode 100755 devspec.en_US/project/recutils/m4/inttypes-pri.m4 create mode 100755 devspec.en_US/project/recutils/m4/inttypes.m4 create mode 100755 devspec.en_US/project/recutils/m4/inttypes_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/isnand.m4 create mode 100755 devspec.en_US/project/recutils/m4/isnanf.m4 create mode 100755 devspec.en_US/project/recutils/m4/isnanl.m4 create mode 100755 devspec.en_US/project/recutils/m4/langinfo_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/largefile.m4 create mode 100755 devspec.en_US/project/recutils/m4/ldexpl.m4 create mode 100755 devspec.en_US/project/recutils/m4/lib-ld.m4 create mode 100755 devspec.en_US/project/recutils/m4/lib-link.m4 create mode 100755 devspec.en_US/project/recutils/m4/lib-prefix.m4 create mode 100755 devspec.en_US/project/recutils/m4/libtool.m4 create mode 100755 devspec.en_US/project/recutils/m4/limits-h.m4 create mode 100755 devspec.en_US/project/recutils/m4/localcharset.m4 create mode 100755 devspec.en_US/project/recutils/m4/locale-fr.m4 create mode 100755 devspec.en_US/project/recutils/m4/locale-ja.m4 create mode 100755 devspec.en_US/project/recutils/m4/locale-zh.m4 create mode 100755 devspec.en_US/project/recutils/m4/locale_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/localeconv.m4 create mode 100755 devspec.en_US/project/recutils/m4/localtime-buffer.m4 create mode 100755 devspec.en_US/project/recutils/m4/lock.m4 create mode 100755 devspec.en_US/project/recutils/m4/longlong.m4 create mode 100755 devspec.en_US/project/recutils/m4/lseek.m4 create mode 100755 devspec.en_US/project/recutils/m4/lstat.m4 create mode 100755 devspec.en_US/project/recutils/m4/ltoptions.m4 create mode 100755 devspec.en_US/project/recutils/m4/ltsugar.m4 create mode 100755 devspec.en_US/project/recutils/m4/ltversion.m4 create mode 100755 devspec.en_US/project/recutils/m4/lt~obsolete.m4 create mode 100755 devspec.en_US/project/recutils/m4/malloc.m4 create mode 100755 devspec.en_US/project/recutils/m4/malloca.m4 create mode 100755 devspec.en_US/project/recutils/m4/math_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/mbrlen.m4 create mode 100755 devspec.en_US/project/recutils/m4/mbrtowc.m4 create mode 100755 devspec.en_US/project/recutils/m4/mbsinit.m4 create mode 100755 devspec.en_US/project/recutils/m4/mbstate_t.m4 create mode 100755 devspec.en_US/project/recutils/m4/mbtowc.m4 create mode 100755 devspec.en_US/project/recutils/m4/memchr.m4 create mode 100755 devspec.en_US/project/recutils/m4/minmax.m4 create mode 100755 devspec.en_US/project/recutils/m4/mkdir.m4 create mode 100755 devspec.en_US/project/recutils/m4/mkostemp.m4 create mode 100755 devspec.en_US/project/recutils/m4/mkstemp.m4 create mode 100755 devspec.en_US/project/recutils/m4/mktime.m4 create mode 100755 devspec.en_US/project/recutils/m4/mmap-anon.m4 create mode 100755 devspec.en_US/project/recutils/m4/mode_t.m4 create mode 100755 devspec.en_US/project/recutils/m4/msvc-inval.m4 create mode 100755 devspec.en_US/project/recutils/m4/msvc-nothrow.m4 create mode 100755 devspec.en_US/project/recutils/m4/multiarch.m4 create mode 100755 devspec.en_US/project/recutils/m4/nl_langinfo.m4 create mode 100755 devspec.en_US/project/recutils/m4/nls.m4 create mode 100755 devspec.en_US/project/recutils/m4/nocrash.m4 create mode 100755 devspec.en_US/project/recutils/m4/nstrftime.m4 create mode 100755 devspec.en_US/project/recutils/m4/obstack.m4 create mode 100755 devspec.en_US/project/recutils/m4/off_t.m4 create mode 100755 devspec.en_US/project/recutils/m4/open-cloexec.m4 create mode 100755 devspec.en_US/project/recutils/m4/open.m4 create mode 100755 devspec.en_US/project/recutils/m4/parse-datetime.m4 create mode 100755 devspec.en_US/project/recutils/m4/pathmax.m4 create mode 100755 devspec.en_US/project/recutils/m4/po.m4 create mode 100755 devspec.en_US/project/recutils/m4/posix_spawn.m4 create mode 100755 devspec.en_US/project/recutils/m4/printf-frexp.m4 create mode 100755 devspec.en_US/project/recutils/m4/printf-frexpl.m4 create mode 100755 devspec.en_US/project/recutils/m4/printf-posix-rpl.m4 create mode 100755 devspec.en_US/project/recutils/m4/printf.m4 create mode 100755 devspec.en_US/project/recutils/m4/progtest.m4 create mode 100755 devspec.en_US/project/recutils/m4/pthread_rwlock_rdlock.m4 create mode 100755 devspec.en_US/project/recutils/m4/quote.m4 create mode 100755 devspec.en_US/project/recutils/m4/quotearg.m4 create mode 100755 devspec.en_US/project/recutils/m4/raise.m4 create mode 100755 devspec.en_US/project/recutils/m4/random_r.m4 create mode 100755 devspec.en_US/project/recutils/m4/rawmemchr.m4 create mode 100755 devspec.en_US/project/recutils/m4/read-file.m4 create mode 100755 devspec.en_US/project/recutils/m4/readline.m4 create mode 100755 devspec.en_US/project/recutils/m4/readlink.m4 create mode 100755 devspec.en_US/project/recutils/m4/realloc.m4 create mode 100755 devspec.en_US/project/recutils/m4/regex.m4 create mode 100755 devspec.en_US/project/recutils/m4/rename.m4 create mode 100755 devspec.en_US/project/recutils/m4/rmdir.m4 create mode 100755 devspec.en_US/project/recutils/m4/sched_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/secure_getenv.m4 create mode 100755 devspec.en_US/project/recutils/m4/selinux-context-h.m4 create mode 100755 devspec.en_US/project/recutils/m4/selinux-selinux-h.m4 create mode 100755 devspec.en_US/project/recutils/m4/setenv.m4 create mode 100755 devspec.en_US/project/recutils/m4/sh-filename.m4 create mode 100755 devspec.en_US/project/recutils/m4/sig_atomic_t.m4 create mode 100755 devspec.en_US/project/recutils/m4/sigaction.m4 create mode 100755 devspec.en_US/project/recutils/m4/signal_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/signalblocking.m4 create mode 100755 devspec.en_US/project/recutils/m4/signbit.m4 create mode 100755 devspec.en_US/project/recutils/m4/size_max.m4 create mode 100755 devspec.en_US/project/recutils/m4/spawn_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/ssize_t.m4 create mode 100755 devspec.en_US/project/recutils/m4/stat-time.m4 create mode 100755 devspec.en_US/project/recutils/m4/stat.m4 create mode 100755 devspec.en_US/project/recutils/m4/stdarg.m4 create mode 100755 devspec.en_US/project/recutils/m4/stdbool.m4 create mode 100755 devspec.en_US/project/recutils/m4/stddef_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/stdint.m4 create mode 100755 devspec.en_US/project/recutils/m4/stdint_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/stdio_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/stdlib_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/strcase.m4 create mode 100755 devspec.en_US/project/recutils/m4/strcasestr.m4 create mode 100755 devspec.en_US/project/recutils/m4/strchrnul.m4 create mode 100755 devspec.en_US/project/recutils/m4/strdup.m4 create mode 100755 devspec.en_US/project/recutils/m4/strerror.m4 create mode 100755 devspec.en_US/project/recutils/m4/string_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/strings_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/strsep.m4 create mode 100755 devspec.en_US/project/recutils/m4/strverscmp.m4 create mode 100755 devspec.en_US/project/recutils/m4/sys_file_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/sys_socket_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/sys_stat_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/sys_time_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/sys_types_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/sys_wait_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/tempname.m4 create mode 100755 devspec.en_US/project/recutils/m4/threadlib.m4 create mode 100755 devspec.en_US/project/recutils/m4/time_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/time_r.m4 create mode 100755 devspec.en_US/project/recutils/m4/time_rz.m4 create mode 100755 devspec.en_US/project/recutils/m4/timegm.m4 create mode 100755 devspec.en_US/project/recutils/m4/timespec.m4 create mode 100755 devspec.en_US/project/recutils/m4/tm_gmtoff.m4 create mode 100755 devspec.en_US/project/recutils/m4/tmpdir.m4 create mode 100755 devspec.en_US/project/recutils/m4/tzset.m4 create mode 100755 devspec.en_US/project/recutils/m4/unistd_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/unlocked-io.m4 create mode 100755 devspec.en_US/project/recutils/m4/vasnprintf-posix.m4 create mode 100755 devspec.en_US/project/recutils/m4/vasnprintf.m4 create mode 100755 devspec.en_US/project/recutils/m4/vasprintf-posix.m4 create mode 100755 devspec.en_US/project/recutils/m4/vasprintf.m4 create mode 100755 devspec.en_US/project/recutils/m4/version-etc.m4 create mode 100755 devspec.en_US/project/recutils/m4/vfprintf-posix.m4 create mode 100755 devspec.en_US/project/recutils/m4/wait-process.m4 create mode 100755 devspec.en_US/project/recutils/m4/waitpid.m4 create mode 100755 devspec.en_US/project/recutils/m4/warn-on-use.m4 create mode 100755 devspec.en_US/project/recutils/m4/wchar_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/wchar_t.m4 create mode 100755 devspec.en_US/project/recutils/m4/wcrtomb.m4 create mode 100755 devspec.en_US/project/recutils/m4/wctob.m4 create mode 100755 devspec.en_US/project/recutils/m4/wctomb.m4 create mode 100755 devspec.en_US/project/recutils/m4/wctype_h.m4 create mode 100755 devspec.en_US/project/recutils/m4/wint_t.m4 create mode 100755 devspec.en_US/project/recutils/m4/xalloc.m4 create mode 100755 devspec.en_US/project/recutils/m4/xsize.m4 create mode 100755 devspec.en_US/project/recutils/maint.mk create mode 100755 devspec.en_US/project/recutils/man/Makefile create mode 100755 devspec.en_US/project/recutils/man/Makefile.am create mode 100755 devspec.en_US/project/recutils/man/Makefile.in create mode 100755 devspec.en_US/project/recutils/man/csv2rec.1 create mode 100755 devspec.en_US/project/recutils/man/mdb2rec.1 create mode 100755 devspec.en_US/project/recutils/man/rec2csv.1 create mode 100755 devspec.en_US/project/recutils/man/recdel.1 create mode 100755 devspec.en_US/project/recutils/man/recfix.1 create mode 100755 devspec.en_US/project/recutils/man/recfmt.1 create mode 100755 devspec.en_US/project/recutils/man/recinf.1 create mode 100755 devspec.en_US/project/recutils/man/recins.1 create mode 100755 devspec.en_US/project/recutils/man/recsel.1 create mode 100755 devspec.en_US/project/recutils/man/recset.1 create mode 100755 devspec.en_US/project/recutils/po/ChangeLog create mode 100755 devspec.en_US/project/recutils/po/LINGUAS create mode 100755 devspec.en_US/project/recutils/po/Makefile create mode 100755 devspec.en_US/project/recutils/po/Makefile.in create mode 100755 devspec.en_US/project/recutils/po/Makefile.in.in create mode 100755 devspec.en_US/project/recutils/po/Makevars create mode 100755 devspec.en_US/project/recutils/po/POTFILES create mode 100755 devspec.en_US/project/recutils/po/POTFILES.in create mode 100755 devspec.en_US/project/recutils/po/Rules-quot create mode 100755 devspec.en_US/project/recutils/po/boldquot.sed create mode 100755 devspec.en_US/project/recutils/po/de.gmo create mode 100755 devspec.en_US/project/recutils/po/de.po create mode 100755 devspec.en_US/project/recutils/po/en@boldquot.header create mode 100755 devspec.en_US/project/recutils/po/en@quot.header create mode 100755 devspec.en_US/project/recutils/po/es.gmo create mode 100755 devspec.en_US/project/recutils/po/es.po create mode 100755 devspec.en_US/project/recutils/po/fi.gmo create mode 100755 devspec.en_US/project/recutils/po/fi.po create mode 100755 devspec.en_US/project/recutils/po/fr.gmo create mode 100755 devspec.en_US/project/recutils/po/fr.po create mode 100755 devspec.en_US/project/recutils/po/insert-header.sin create mode 100755 devspec.en_US/project/recutils/po/nl.gmo create mode 100755 devspec.en_US/project/recutils/po/nl.po create mode 100755 devspec.en_US/project/recutils/po/pt_BR.gmo create mode 100755 devspec.en_US/project/recutils/po/pt_BR.po create mode 100755 devspec.en_US/project/recutils/po/quot.sed create mode 100755 devspec.en_US/project/recutils/po/recutils.pot create mode 100755 devspec.en_US/project/recutils/po/remove-potcdate.sin create mode 100755 devspec.en_US/project/recutils/po/sr.gmo create mode 100755 devspec.en_US/project/recutils/po/sr.po create mode 100755 devspec.en_US/project/recutils/po/stamp-po create mode 100755 devspec.en_US/project/recutils/po/sv.gmo create mode 100755 devspec.en_US/project/recutils/po/sv.po create mode 100755 devspec.en_US/project/recutils/po/uk.gmo create mode 100755 devspec.en_US/project/recutils/po/uk.po create mode 100755 devspec.en_US/project/recutils/po/vi.gmo create mode 100755 devspec.en_US/project/recutils/po/vi.po create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-aggregate.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-buf.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-comment.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-crypt-dummy.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-crypt.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-db.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-fex.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-field-name.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-field.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-int.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-mset.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-parser.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-record.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-rset.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-sex-ast.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-sex-lex.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-sex-parser.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-sex-tab.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-sex.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-types.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-utils.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec-writer.Plo create mode 100755 devspec.en_US/project/recutils/src/.deps/rec.Plo create mode 100755 devspec.en_US/project/recutils/src/.libs/librec.lai create mode 100755 devspec.en_US/project/recutils/src/Makefile create mode 100755 devspec.en_US/project/recutils/src/Makefile.am create mode 100755 devspec.en_US/project/recutils/src/Makefile.in create mode 100755 devspec.en_US/project/recutils/src/config.h create mode 100755 devspec.en_US/project/recutils/src/config.h.in create mode 100755 devspec.en_US/project/recutils/src/rec-aggregate.c create mode 100755 devspec.en_US/project/recutils/src/rec-buf.c create mode 100755 devspec.en_US/project/recutils/src/rec-comment.c create mode 100755 devspec.en_US/project/recutils/src/rec-crypt-dummy.c create mode 100755 devspec.en_US/project/recutils/src/rec-crypt.c create mode 100755 devspec.en_US/project/recutils/src/rec-db.c create mode 100755 devspec.en_US/project/recutils/src/rec-fex.c create mode 100755 devspec.en_US/project/recutils/src/rec-field-name.c create mode 100755 devspec.en_US/project/recutils/src/rec-field.c create mode 100755 devspec.en_US/project/recutils/src/rec-int.c create mode 100755 devspec.en_US/project/recutils/src/rec-mset.c create mode 100755 devspec.en_US/project/recutils/src/rec-parser.c create mode 100755 devspec.en_US/project/recutils/src/rec-record.c create mode 100755 devspec.en_US/project/recutils/src/rec-rset.c create mode 100755 devspec.en_US/project/recutils/src/rec-sex-ast.c create mode 100755 devspec.en_US/project/recutils/src/rec-sex-ast.h create mode 100755 devspec.en_US/project/recutils/src/rec-sex-lex.c create mode 100755 devspec.en_US/project/recutils/src/rec-sex-lex.l create mode 100755 devspec.en_US/project/recutils/src/rec-sex-parser.c create mode 100755 devspec.en_US/project/recutils/src/rec-sex-parser.h create mode 100755 devspec.en_US/project/recutils/src/rec-sex-tab.c create mode 100755 devspec.en_US/project/recutils/src/rec-sex-tab.h create mode 100755 devspec.en_US/project/recutils/src/rec-sex-tab.y create mode 100755 devspec.en_US/project/recutils/src/rec-sex.c create mode 100755 devspec.en_US/project/recutils/src/rec-types.c create mode 100755 devspec.en_US/project/recutils/src/rec-utils.c create mode 100755 devspec.en_US/project/recutils/src/rec-utils.h create mode 100755 devspec.en_US/project/recutils/src/rec-writer.c create mode 100755 devspec.en_US/project/recutils/src/rec.c create mode 100755 devspec.en_US/project/recutils/src/rec.h create mode 100755 devspec.en_US/project/recutils/src/stamp-h1 create mode 100755 devspec.en_US/project/recutils/torture/.deps/runtests-runtests.Po create mode 100755 devspec.en_US/project/recutils/torture/Makefile create mode 100755 devspec.en_US/project/recutils/torture/Makefile.am create mode 100755 devspec.en_US/project/recutils/torture/Makefile.in create mode 100755 devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-destroy.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-dup.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-equal-p.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-new.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-set-text.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-text.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-tsuite-rec-comment.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-comment/rec-comment-destroy.c create mode 100755 devspec.en_US/project/recutils/torture/rec-comment/rec-comment-dup.c create mode 100755 devspec.en_US/project/recutils/torture/rec-comment/rec-comment-equal-p.c create mode 100755 devspec.en_US/project/recutils/torture/rec-comment/rec-comment-new.c create mode 100755 devspec.en_US/project/recutils/torture/rec-comment/rec-comment-set-text.c create mode 100755 devspec.en_US/project/recutils/torture/rec-comment/rec-comment-text.c create mode 100755 devspec.en_US/project/recutils/torture/rec-comment/tsuite-rec-comment.c create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-check.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-destroy.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-elem-field-name.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-elem-max.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-elem-min.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-elem-rewrite-to.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-get.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-new.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-size.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-sort.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-str.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-tsuite-rec-fex.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/rec-fex-check.c create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/rec-fex-destroy.c create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/rec-fex-elem-field-name.c create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/rec-fex-elem-max.c create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/rec-fex-elem-min.c create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/rec-fex-elem-rewrite-to.c create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/rec-fex-get.c create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/rec-fex-new.c create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/rec-fex-size.c create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/rec-fex-sort.c create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/rec-fex-str.c create mode 100755 devspec.en_US/project/recutils/torture/rec-fex/tsuite-rec-fex.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field-name/.deps/runtests-rec-field-name-equal-p.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field-name/.deps/runtests-rec-field-name-normalise.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field-name/.deps/runtests-rec-field-name-p.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field-name/.deps/runtests-tsuite-rec-field-name.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field-name/rec-field-name-equal-p.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field-name/rec-field-name-normalise.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field-name/rec-field-name-p.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field-name/tsuite-rec-field-name.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-char-location-str.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-char-location.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-destroy.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-dup.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-equal-p.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-location-str.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-location.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-name.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-new.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-char-location.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-location.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-name.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-source.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-value.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-source.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-to-comment.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-value.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-tsuite-rec-field.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-field/rec-field-char-location-str.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/rec-field-char-location.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/rec-field-destroy.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/rec-field-dup.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/rec-field-equal-p.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/rec-field-location-str.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/rec-field-location.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/rec-field-name.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/rec-field-new.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/rec-field-set-char-location.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/rec-field-set-location.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/rec-field-set-name.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/rec-field-set-source.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/rec-field-set-value.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/rec-field-source.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/rec-field-to-comment.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/rec-field-value.c create mode 100755 devspec.en_US/project/recutils/torture/rec-field/tsuite-rec-field.c create mode 100755 devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-count.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-dup.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-get-at.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-new.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-register-type.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-type-p.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-tsuite-rec-mset.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-mset/elem-types.h create mode 100755 devspec.en_US/project/recutils/torture/rec-mset/rec-mset-count.c create mode 100755 devspec.en_US/project/recutils/torture/rec-mset/rec-mset-dup.c create mode 100755 devspec.en_US/project/recutils/torture/rec-mset/rec-mset-get-at.c create mode 100755 devspec.en_US/project/recutils/torture/rec-mset/rec-mset-new.c create mode 100755 devspec.en_US/project/recutils/torture/rec-mset/rec-mset-register-type.c create mode 100755 devspec.en_US/project/recutils/torture/rec-mset/rec-mset-type-p.c create mode 100755 devspec.en_US/project/recutils/torture/rec-mset/tsuite-rec-mset.c create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-db.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-field-name-str.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-field-name.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-field.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-record-str.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-record.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-rset.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-destroy.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-eof.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-error.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-new-mem.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-new-str.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-new.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-perror.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-reset.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-seek-mem.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-tsuite-rec-parser.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/rec-parse-db.c create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/rec-parse-field-name-str.c create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/rec-parse-field-name.c create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/rec-parse-field.c create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/rec-parse-record-str.c create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/rec-parse-record.c create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/rec-parse-rset.c create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/rec-parser-destroy.c create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/rec-parser-eof.c create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/rec-parser-error.c create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/rec-parser-new-mem.c create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/rec-parser-new-str.c create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/rec-parser-new.c create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/rec-parser-perror.c create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/rec-parser-reset.c create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/rec-parser-seek-mem.c create mode 100755 devspec.en_US/project/recutils/torture/rec-parser/tsuite-rec-parser.c create mode 100755 devspec.en_US/project/recutils/torture/rec-record/.deps/runtests-tsuite-rec-record.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-record/tsuite-rec-record.c create mode 100755 devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-rec-sex-compile.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-rec-sex-destroy.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-rec-sex-eval.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-rec-sex-new.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-tsuite-rec-sex.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-sex/rec-sex-compile.c create mode 100755 devspec.en_US/project/recutils/torture/rec-sex/rec-sex-destroy.c create mode 100755 devspec.en_US/project/recutils/torture/rec-sex/rec-sex-eval.c create mode 100755 devspec.en_US/project/recutils/torture/rec-sex/rec-sex-new.c create mode 100755 devspec.en_US/project/recutils/torture/rec-sex/tsuite-rec-sex.c create mode 100755 devspec.en_US/project/recutils/torture/rec-type-reg/.deps/runtests-rec-type-reg-destroy.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-type-reg/.deps/runtests-rec-type-reg-get.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-type-reg/.deps/runtests-rec-type-reg-new.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-type-reg/.deps/runtests-tsuite-rec-type-reg.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-type-reg/rec-type-reg-destroy.c create mode 100755 devspec.en_US/project/recutils/torture/rec-type-reg/rec-type-reg-get.c create mode 100755 devspec.en_US/project/recutils/torture/rec-type-reg/rec-type-reg-new.c create mode 100755 devspec.en_US/project/recutils/torture/rec-type-reg/tsuite-rec-type-reg.c create mode 100755 devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-check.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-descr-p.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-destroy.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-equal-p.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-kind-str.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-kind.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-name.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-new.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-set-name.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-tsuite-rec-type.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-type/rec-type-check.c create mode 100755 devspec.en_US/project/recutils/torture/rec-type/rec-type-descr-p.c create mode 100755 devspec.en_US/project/recutils/torture/rec-type/rec-type-destroy.c create mode 100755 devspec.en_US/project/recutils/torture/rec-type/rec-type-equal-p.c create mode 100755 devspec.en_US/project/recutils/torture/rec-type/rec-type-kind-str.c create mode 100755 devspec.en_US/project/recutils/torture/rec-type/rec-type-kind.c create mode 100755 devspec.en_US/project/recutils/torture/rec-type/rec-type-name.c create mode 100755 devspec.en_US/project/recutils/torture/rec-type/rec-type-new.c create mode 100755 devspec.en_US/project/recutils/torture/rec-type/rec-type-set-name.c create mode 100755 devspec.en_US/project/recutils/torture/rec-type/tsuite-rec-type.c create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-comment-str.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-comment.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-db.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-field-name-str.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-field-name.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-field-str.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-field.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-record.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-rset.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-writer-destroy.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-writer-new.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-tsuite-rec-writer.Po create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/rec-write-comment-str.c create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/rec-write-comment.c create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/rec-write-db.c create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/rec-write-field-name-str.c create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/rec-write-field-name.c create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/rec-write-field-str.c create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/rec-write-field.c create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/rec-write-record.c create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/rec-write-rset.c create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/rec-writer-destroy.c create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/rec-writer-new.c create mode 100755 devspec.en_US/project/recutils/torture/rec-writer/tsuite-rec-writer.c create mode 100755 devspec.en_US/project/recutils/torture/runtests.c create mode 100755 devspec.en_US/project/recutils/torture/utils/Makefile create mode 100755 devspec.en_US/project/recutils/torture/utils/Makefile.am create mode 100755 devspec.en_US/project/recutils/torture/utils/Makefile.in create mode 100755 devspec.en_US/project/recutils/torture/utils/config.sh create mode 100755 devspec.en_US/project/recutils/torture/utils/config.sh.in create mode 100755 devspec.en_US/project/recutils/torture/utils/csv2rec.sh create mode 100755 devspec.en_US/project/recutils/torture/utils/rec2csv.sh create mode 100755 devspec.en_US/project/recutils/torture/utils/recdel.sh create mode 100755 devspec.en_US/project/recutils/torture/utils/recfix.sh create mode 100755 devspec.en_US/project/recutils/torture/utils/recfmt.sh create mode 100755 devspec.en_US/project/recutils/torture/utils/recinf.sh create mode 100755 devspec.en_US/project/recutils/torture/utils/recins.sh create mode 100755 devspec.en_US/project/recutils/torture/utils/recsel.sh create mode 100755 devspec.en_US/project/recutils/torture/utils/recset.sh create mode 100755 devspec.en_US/project/recutils/torture/utils/testutils.sh create mode 100755 devspec.en_US/project/recutils/utils/.deps/csv2rec.Po create mode 100755 devspec.en_US/project/recutils/utils/.deps/mdb2rec-mdb2rec.Po create mode 100755 devspec.en_US/project/recutils/utils/.deps/mdb2rec-recutl.Po create mode 100755 devspec.en_US/project/recutils/utils/.deps/rec2csv.Po create mode 100755 devspec.en_US/project/recutils/utils/.deps/recdel.Po create mode 100755 devspec.en_US/project/recutils/utils/.deps/recfix.Po create mode 100755 devspec.en_US/project/recutils/utils/.deps/recfmt.Po create mode 100755 devspec.en_US/project/recutils/utils/.deps/recinf.Po create mode 100755 devspec.en_US/project/recutils/utils/.deps/recins.Po create mode 100755 devspec.en_US/project/recutils/utils/.deps/recsel.Po create mode 100755 devspec.en_US/project/recutils/utils/.deps/recset.Po create mode 100755 devspec.en_US/project/recutils/utils/.deps/recutl.Po create mode 100755 devspec.en_US/project/recutils/utils/.libs/csv2rec create mode 100755 devspec.en_US/project/recutils/utils/.libs/rec2csv create mode 100755 devspec.en_US/project/recutils/utils/.libs/recdel create mode 100755 devspec.en_US/project/recutils/utils/.libs/recfix create mode 100755 devspec.en_US/project/recutils/utils/.libs/recfmt create mode 100755 devspec.en_US/project/recutils/utils/.libs/recinf create mode 100755 devspec.en_US/project/recutils/utils/.libs/recins create mode 100755 devspec.en_US/project/recutils/utils/.libs/recsel create mode 100755 devspec.en_US/project/recutils/utils/.libs/recset create mode 100755 devspec.en_US/project/recutils/utils/Makefile create mode 100755 devspec.en_US/project/recutils/utils/Makefile.am create mode 100755 devspec.en_US/project/recutils/utils/Makefile.in create mode 100755 devspec.en_US/project/recutils/utils/csv2rec create mode 100755 devspec.en_US/project/recutils/utils/csv2rec.c create mode 100755 devspec.en_US/project/recutils/utils/mdb2rec.c create mode 100755 devspec.en_US/project/recutils/utils/rec2csv create mode 100755 devspec.en_US/project/recutils/utils/rec2csv.c create mode 100755 devspec.en_US/project/recutils/utils/recdel create mode 100755 devspec.en_US/project/recutils/utils/recdel.c create mode 100755 devspec.en_US/project/recutils/utils/recfix create mode 100755 devspec.en_US/project/recutils/utils/recfix.c create mode 100755 devspec.en_US/project/recutils/utils/recfmt create mode 100755 devspec.en_US/project/recutils/utils/recfmt.c create mode 100755 devspec.en_US/project/recutils/utils/recinf create mode 100755 devspec.en_US/project/recutils/utils/recinf.c create mode 100755 devspec.en_US/project/recutils/utils/recins create mode 100755 devspec.en_US/project/recutils/utils/recins.c create mode 100755 devspec.en_US/project/recutils/utils/recsel create mode 100755 devspec.en_US/project/recutils/utils/recsel.c create mode 100755 devspec.en_US/project/recutils/utils/recset create mode 100755 devspec.en_US/project/recutils/utils/recset.c create mode 100755 devspec.en_US/project/recutils/utils/recutl.c create mode 100755 devspec.en_US/project/recutils/utils/recutl.h create mode 100755 devspec.en_US/tmp.txt create mode 100644 docs/index.md create mode 100644 mkdocs.yml rename .readthedocs.yaml => readthedocs.txt (100%) delete mode 100644 requirements.txt diff --git a/1.1.build-environment.txt b/1.1.build-environment.txt new file mode 100755 index 0000000..5b0ad7a --- /dev/null +++ b/1.1.build-environment.txt @@ -0,0 +1,236 @@ + + + +# gnu build-tools for gnu soft-pkgs +=================================== + + generally, a gnu soft-pkg uses software below, to build and develop +programs. + +[gnu-soft-pkg] +# Compile-Link: gcc/g++/clang/binutils(ld/objcopy/nm/...), libc-dev, + kernel-headers, flex/bison, toolchain-cross-ng +# project orgnize: make/cmake, (meson, ninja) +# compile config soft-pkg: autotools(automake/autoconf/libtool), M4, autogen, + pkg-config, menuconfig + +# Multi-language: gettext, libintl +# info/man documents: texinfo, help2man, groff, man, +# api documents: doxygen, +# webpages: gnu-gendocs.sh(script translate txt into html, used for web + access.) +# code-online-doc: +# tutorial: ttyrec +# design-doc: change-log, ideas-doc, demand-doc, design-doc, + modulize-design-doc, + +# debug-utils: gdb/gdb-server, logview, +# testing(unit-test, test-frame work): cunit, cppunit, greg, DejaGnu, +# bug-mngr: +# perform: gconv(code-coverage), gprof, perf, systemtap, +# code-chk-utils: lint, Valgrind, + +# compile-cache: ccache, +# multi-host-compile: distcc + +@ code-utils +# code-compare: beyound-compare +# func-call-trace: cflow(call-graph), global(src-tag-prog) +# code-symbol-tag-index: McCabe/pmccabe/complexity/mifuz, +# code-highlight: Src-highlight, +# code-format: gengen/indent, cproto, +# code-args-autogen: gengetopt, +# code-gen: + +@ +# code manager: git, RCS/SCCS, diff/patch, +# git+pages: github/gitee/gitlab +# email(cmd-client): mailutils + + +@ traditional-dev-utilities +# awk, gprof, gperf, dpkg/opkg, +# idutils, OrgaDoc(txt2xml-doc), src-highile, aspell, womb(gnu pkg repo) + + + +# pkg-builder +============= + + pkg-builder is a program set to build soft-pkgs. it's similar with 'make', +but it's writen by shell script code, the dependence is only a shell program. + pkg-builder is consisted by those pkgs: + +@ devspec: pkg of this doc. the guide doc of soft-pkg develop by pkg-builer for + low-level system pkgs, espacially for pkgs of 'skeletone-linux'. +@ CCompilerCollection: gcc build src pkgs. it include toolchain-cross-ng, gcc, + binutils, and other dependent pkgs. it can build gcc with different platform. + CCompilerCollection in pkg-builder is a fixed version of gcc. so that + developer uses the same version of compiler, in order to avoid different + compile errors. pkg-builder is face to low-level system pkgs, so it does not + need a frequently updated compiler for many new features. +@ build-pkg: equal to 'make'. but the config info is distributed in different + config files. it's easy to dispatch infos in program. it's easy to use, but + it's not smart enough like 'makefile'. +@ build-config: the program manuconfig in kernel. let it to be a independence + soft-pkg. so that many other programs can use it for configuration. +@ build-pkglist: it's familar with 'buildroot'. it orgnize a system by config + files, and download, config, build it. it support distribute building. +@ shlib-devutils: a toolset writen by shell script code. it provide various + programs for developping. +@ build-ext-utils: gnu soft-pkg for pkg-builder. some of the feature have not + implemented in pkg-builder. use binary soft-pkg. such as doxygen. +@ code-mngr: a version control program like svn/git. it's also a shell script + program. and it need less server-end program to use, it is based on sftp + storage. beyound version control, it support web page update to sftp/git + server. +@ soft-repo: published file manage program. src-pkg or binary-pkg, or resource- + pkg. it like a application store, or a program repo for user to download. + + +# gnu pkgs beyound pkg-builder +============================== + + many features has not been implemented in pkg-builder. it uses traditional +binary soft-pkgs. + +@ libtool +@ pkg-config +@ gettext, libintl +@ texinfo, help2man, groff, man +@ doxygen +@ gendocs.sh(integerated in devutils) +@ ttyrec +@ ccache +@ distcc +@ git/RCS/SCCS/CSSC +@ mailutils: email(cmd-client). + +@ cunit +@ gconv, gprof, perf, systemtap +@ lint, Valgrind +@ diffutils, meld(with gui) +@ +# code-compare: beyound-compare +# func-call-trace: cflow(call-graph), global(src-tag-prog) +# code-symbol-tag-index: McCabe/pmccabe/complexity/mifuz, +# code-highlight: Src-highlight, +# code-format: gengen/indent, cproto, +# code-args-autogen: gengetopt, + +@ idutils, OrgaDoc(txt2xml-doc), src-highile, aspell, womb(gnu pkg repo) + + + + + + + + + + + + + + + + + + + + + + + + +[gnu¿ª·¢ÖеŤ¾ßÈí¼þ¼¯ºÏ] +@ ¿ªÔ´Èí¼þ¿ª·¢Ì×¼þ¹¦ÄÜ +# pub(git+pages): github/gitlab/gitee +# email(cmd-client): mailutils + +# ±àÒëÁ´½Ó: gcc/g++/clang/binutil(gcc/g++/ld), libc-dev, kernel-headers, flex/bison, +# ¹¤³Ì¹¹½¨, µ÷ÓñàÒëÆ÷±àÒë³ÌÐò: make/cmake, (meson, ninja) +# ÅäÖñàÒëÏà¹ØÄÚÈÝ: autotools(automake, autoconf, libtool), autogen, pkg-config, M4, menuconfig +# multi-language: gettext, intl +# info/manÎĵµÉú³É: texinfo, help2man, Éú³ÉinfoºÍmanµÄ°ïÖúÎĵµ¡£groff¡£ +# ´úÂëapiÎĵµ: doxygen, ¸ù¾Ý´úÂë, Êä³ö´úÂëµÄapiÎĵµ¡£ +# ¸ù¾ÝtxtʹÓÃ˵Ã÷Îĵµ, gendocs.sh (script)´¦ÀíºóÊä³öhtmlÎĵµ¡£ +# code online readÎĵµ, +# pkgÖÆ×÷Èí¼þ: dpkg/opkg, + +# tutorial: ttyrec, ++# design-doc(change-log, ideas-doc, demand-doc, design-doc, modulize-doc): +# °æ±¾¹ÜÀí: git, RCS/CSSC, diff/patch, + +# bug-mngr: GNATS, bugzilla +# testing(unit-testing, test-framework): cunit, cppunit, greg, DejaGnu, testdrive +# degug-utils: gdb/gdbserver, logview +# perform: gcov(code-coverage), gprof, perf, systemtap +*# code-check-utils: lint, Valgrind, + +# code-utils: +beyoundcompare: +inc-file-list: (makefileÖÐ-include $(OBJ:.o,.d), ±àÒë.oÎļþ֮ǰgcc -MM -MT $@ -MF $(patsubst $<,%.o,%.d) $<, Êä³öµ½.dÎļþ-includeµ½makefile, .hÐÞ¸Äʱ, .o³ÌÐò±àÒë¡£)(gcc -MM -MF xxx.d -MT xxx.o xxx.c) +func-call-trace: cflow, global, graphvize +symbol-tag-index(code-hint): global(src-tag-prog)/McCabe/pmccabe/complexity, +code-highlight, Src-Highlite, +code-formatter: gengen/indent, cproto, +code-arg-autogen: gengetopt +code-gen: + +@ traditional-dev-utilities +# gawk, gprof(ÔËÐÐÐÔÄÜÈí¼þ), gperf, +# , Idutils, OrgaDoc(txt2xml-doc), Src-Highlite, aspell, womb(gnu pkg repo), + + + + + + + + + + + + + + + + + + + + + + + + + + +[gnu-dev-tools¿ª·¢Èí¼þ°ü-¹¦ÄܲÙ×÷½Ó¿Ú] +@ toolchain &utils + +@ Èí¼þÅäÖᢱàÒë(dep-chk)¡¢pkgÖÆ×÷¡¢°²×° + +@ proj(src-dir-scan¡¢file-add/del¡¢param-cfg-file¡¢target-add/del¡¢lib/.h-inc&path¡¢) + +@ cross±àÒë +@ cache¡¢distcc +@ doc(man¡¢info¡¢html-pages¡¢doxygen¡¢online-codeview¡¢ttyrec¡¢graphvize¡¢) +@ code(format¡¢gen¡¢edit¡¢syn2design) + +@ src(back¡¢release¡¢version-id¡¢git/RCS¡¢branch¡¢diff/patch¡¢merge¡¢change log) + +@ pkg(inst-pkg¡¢src-pkg¡¢pkg-repo) + + +@ code-check(mem-leakage¡¢grammar) +@ dev(info¡¢str-modify¡¢multi-byte¡¢libintl/gettext¡¢func-trace-graph¡¢hint¡¢hilight¡¢optgen¡¢debug¡¢logview) +@ multi-plat-adept(cpu-plat¡¢sys-plat) +@ ÐÔÄÜ(performence¡¢gcov) +@ test(unit¡¢script) +@ bug-mngr +@ software(readme¡¢lisence¡¢change log¡¢todo¡¢demand/funclist/idea-record¡¢) +@ web-pages(online-wiki/manual/api/code¡¢src/pkg/doc-download¡¢git) + +@ net-utils(wget/curl¡¢term&ssh-client¡¢mail-utils¡¢) diff --git a/LICENSE b/LICENSE deleted file mode 100644 index f3be461..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 skeletone - -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. diff --git a/README.en.md b/README.en.md deleted file mode 100644 index 2cbf279..0000000 --- a/README.en.md +++ /dev/null @@ -1,36 +0,0 @@ -# devspec - -#### Description -develop guide documents. - -#### Software Architecture -Software architecture description - -#### Installation - -1. xxxx -2. xxxx -3. xxxx - -#### Instructions - -1. xxxx -2. xxxx -3. xxxx - -#### Contribution - -1. Fork the repository -2. Create Feat_xxx branch -3. Commit your code -4. Create Pull Request - - -#### Gitee Feature - -1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md -2. Gitee blog [blog.gitee.com](https://blog.gitee.com) -3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) -4. The most valuable open source project [GVP](https://gitee.com/gvp) -5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) -6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/README.md b/README.md deleted file mode 100644 index 7d5b898..0000000 --- a/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# devspec - -#### 介绍 -develop guide documents. - -#### 软件架构 -软件架构说明 - - -#### 安装教程 - -1. xxxx -2. xxxx -3. xxxx - -#### 使用说明 - -1. xxxx -2. xxxx -3. xxxx - -#### 参与贡献 - -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request - - -#### 特技 - -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/devspec.en_US/1.0.general.txt b/devspec.en_US/1.0.general.txt new file mode 100755 index 0000000..8f27e98 --- /dev/null +++ b/devspec.en_US/1.0.general.txt @@ -0,0 +1,260 @@ +posiable => possible +integerat => integrat +template => template +traditional => classical +developer => + + + + dev-spec is not a rule to limit developer, it's an assistant with less +limitation. + it provide style doc, and provide auto-utils and template at the same time. + it provide design doc and flow, but only less relative info in design, in +order to sync with code, when the developer modify code, it can sync from it, +and could use the design info again in next time when it is needed. + it provide dev-flow doc, and it is used with a todolist note as normal. it +is just the doc which developer would use it usually. + it provide pkg-structure doc, and also provide util-prog, and simple +build paramter file to use it. + it provide webpages guide doc, and also provide .md to html doc util-prog, +and webpages sync util-prog, which is referenced from GNU lib. + + + + + +# introduction +============== + + what's the pkg-builder? + it's a toolset for software build and develop, and provide a develop +specific and guide document. + pkg-builder is designed for skeletone-linux building. developer can +develop low-level system soft-pkg by it, and do not need to install other +software as possible. + pkg-builder uses shell script to write utility programs, it depend external +pkgs as less as possible. system building in 'buildroot' need a step of host +environment pkg building. by using pkg-builder, it could run system building +directly, or just rebuild pkg-builder. + normally, src-pkg build need some advanced soft-pkgs like perl python in +desktop linux system. if we need to build a low-level system src-pkg for +embedded linux system, we need a cross-compile develop environment on computer. +pkg-builder provide utilities writen by shell script, some of the src-pkg can +be build in embedded linux system. + + what's the devspec? + devspec is a part of pkg-builder. it provide guide document for develop, +some of them has a utility program in pkg of 'devutils'. it helps developer to +check or generate codes automatically acrroding devspec. + devspec is a thing, that let the developer has the SAME STYLE and METHOD +in develop, and uses AUTOMATICAL utility program to ASSIST the devspec. it want +to let the pkg-builder to be a CLASSICAL tool, like 'borland c++ builder', or +'virsual c++'. + + why a src-pkg need the devspec? + devsepc PROVIDE the SAME programming/coding STYLE, and name rules, and so +on. it let the different developer write code as a same programer as possible, +and other developer can read code easily and clearly. + it provide usage of UTILS in devutils, CHECKING and GENERATING code +AUTOMATICALLY. the guide doc would not be a burden for developer as possible. + it provide step guide in developing for software DEVELOPPING LIFE CYCLE. +the PROCEDURE of soft-pkg develop can be known by a NEWER. look at the diagram +of 'devspec.uml', it shows WHAT PEOPLE will use and operate on a src-pkg. and +WHAT THING the people would to do, and the STEP of the thing people would to +do. + the FILES generated in develop can be the same as possible, the MEANING and +PURPOSE of those file should be defined as same as possible. there are TEMPLATE +files for develop in devspec, and use them to generate things by utilities in +'devutils' automatically. + + devspec is consisted by those part below: + +@ dev-flow/dev-step guide + # definations for dev-actor, work-task, dev-skill + # defines develop-step diagram. and design diagram files for pkg-builder and + it's sub-pkgs. + # develop manager: dev-task-trace, cooperation, dev-step-trace +@ code-style + # code-format + # name-style + # c-cpp-code-format + # sh-code-format +@ prog-style: programming style guide. it uses prog-level and prog-elem + + prog-model + prog-lib + traditional-impl to design programs. + # traditional program model/template/sample. + # data-structure and algorithm +@ copying lisence +@ pkg structure + # version code and it's meaning. + # src-pkg and install-pkg file name format. + # general file types. + # src-pkg file structure. + # install pkg file structure and external dir in system. +@ code and executable + # code-manager(file version manager), + # home pages, + # code hosting, + # src/bin public storage pages, + # soft-repo +@ template(src-module file comment header, function comment header, src-module + file, program-lang-element, blank project, ) + # program element template + # src file template + # project template + # classical implement template + + + +# hilight features +================== + + here list the features for difference from other classical linux-soft-pkg: + +@ it's automatical thing with less memory remember. + +@ it defined a develop flow in software developing life cycle. +@ develop manage info is putted into the src-pkg. function feature, work task, + task trace, bug trace. some of the will be deleted in publish version, and + traslate content to changelog and TODO. +@ simplly home pages for a soft-pkg, and the tools for pages update. it is used + for soft-pkg publish automatically by script programs. +@ it defines coding styles, to keep code clear and readable, and use utility + program to generate code automatically, and easy to analyze code by using + 'tag-comment'. +@ it use template file for code-auto-gen, and code-format. and template for new + src-pkg. +@ define directory structure of install pkg, and use .etz file as the binary + publish file. it can install without pkg manager program, and the install + infomation can be used by actual pkg manager program. it defines the public + directories that a software needed, and specified the install path when it is + installing. the pkg manager program record install info, and the public + directories which is needed by a install-pkg. +@ define directory of a src-pkg. it append dir of design document, management + document, resource files, and so on. the src-pkg can be used in same dir + structure, and the install-pkg have the same dir struct, it can install by it + self, it's more better then make install. or translate install-pkg to linux + distribution pkg format. + + + +# purpose & goal +================ + +@ src-pkg developed can be the same style, by same develop flow, same develop + method. it's helpfull for develop cooperation, and code reading. +@ integrate automatical tools for developing as possible. the specification + and rules can be used without painstakingly by humen remembering. +@ devspec and pkg-builder is designed for system pkg develop and build, in + order to provide a build & develop environment with less program dependence. + it nearly just need shell program and compiler only, build a src-pkg without + make, auto-tools, M4. it integrate flex/bison/gettext/intl/doxygen/texinfo/ + pkg-config for developing. some of them are developed by script programs in + devutils, and some of them are in the plan. + especially, it is used for the pkgs of 'skeletone-linux', and the src-pkgs in + this skeletone. +@ it uses c/c++, and shell script as the default programming language. and + maybe use languages like 'vala', for modulization of c-language. +@ for pure application programs, there are many build tools. devspec and + pkg-builder can not cover various range of applications. +@ textilization. use editable text file as more as possible. it's easy to edit, + and can be read without special utility programs. easy to analysis problems + when error occurs. + + + +# scrope & misc +=============== + +@ mainly for system low-level src-pkgs, espacially for 'skeletone-linux'. +@ the lisence of 'skeletone-linux' src-pkg to be developed would be MIT as + possible. others, look at the document of 'copying-lisence'. +@ main dependence of external src-pkgs is gcc, and shell program, and few + binary programs. the binary pkgs it needed, will be improved by shell script + as possible. the concept of shell program is not only shell script + interpreter, it include command set for a shell environment. +@ this document is mainly for suggest guide, and the rules must be kept in + 'skeletone-linux' pkgs, to be a suggest guide beyound 'skeletone-linux'. +@ + + + +# reading guide for devspec +=========================== + +@ dev-step + it defined a suggest develop step. + look at the document of 'project-develop-step'. + view the uml diagram document in dir of 'dev-step-diagrams' by umberello. + +@ the defination of dev actor, and work task + look at the document of 'dev-actor-task' 'develop-step-diagrams'. + view the uml diagram document in dir of 'dev-step-diagrams' by umberello. + +@ project manager(design feature list, task, cooperation, dev-step-trace) + the feature of a soft-pkg is not recorded in src-pkg. but it's usefull for +user and developer. it uses changelog for feature record when it is published. +but sometimes, it need record the features which has not been developed. + orgnize a task to develop one of the feature in feature list, and provide +develop step trace, to see the status of feature developing. + submit a bug, and launch a task to fix it. + when the soft-pkg is published, keep feature list, output changelog/news by +manager info, and delete develop manager doc. + look at the document of 'develop-work-task'. + +@ programming styles + look at the document of 'rules'. + +# code-format + code format or code style defination. + look at the document of 'code-format', 'name-style', 'c-cpp-code-format', + 'sh-code-format'. + +# name-style + it's a part of code-style. + look at the document of 'name-style'. + +@ copying and lisence + it's depend on the type and purpose of src-pkgs would be developed. it +defines lisence type of different src-pkg type in a operating system. + look at the document of 'copying-lisence'. + +@ pkg structure +# name and directory structure of a pkg + define install pkg name format, so that pkg info can be dispatched from +install pkg file name. + the directory structure for src-pkg is defined. use project template in +developing. + directory of install-pkg is defined, a soft-pkg can be installed in various +operation systems. + look at the document of 'srcpkg-general-doc-files', +'instpkg-general-doc-files'. + +# version code + define the meaning of version code, and use utility program to increas +version code when a src-pkg is published. + look at the document of 'version-code', + +@ code-manager +# file version manager, +# code repo, + version manager program usage document, for src-pkgs and install-pkgs. + look at the document of 'git-client-usage'. + look at the document of 'code-repo-usage'. + +# home pages, +# src/bin public storage pages, + it provide guide document for code hosting, and how to use utilities in +soft-pkg of 'devutils', to create/update/publish web pages. + it provide guide document for a developer for things beyound coding. + look at the document of 'code-hosting'. + +@ template(src-module file comment header, function comment header, src-module + file, program-lang-element, blank project, ) + template file is used for code-gen and code-fmt. use utility program, or +used as a guide document for coding. + look at the document of 'sample-prj-and-code-tmpl'. + + + + + diff --git a/devspec.en_US/1.1.build-environment.txt b/devspec.en_US/1.1.build-environment.txt new file mode 100755 index 0000000..9dfa655 --- /dev/null +++ b/devspec.en_US/1.1.build-environment.txt @@ -0,0 +1,267 @@ + + + +# gnu build-tools for gnu soft-pkgs +=================================== + + generally, a gnu soft-pkg uses software below, to build and develop +programs. + +[gnu-soft-pkg] ++ Compile-Link: gcc/g++/clang/binutils(ld/objcopy/nm/...), libc-dev, + kernel-headers, flex/bison, toolchain-cross-ng(±àÒëÆ÷µÄ¹¹½¨) ++ project orgnize: make/cmake, (meson, ninja) ++ compile config soft-pkg: autotools(automake/autoconf/libtool), M4, autogen, + pkg-config, menuconfig + ++ Multi-language: gettext, libintl ++ info/manÎĵµ: texinfo, help2man, groff, man, ++ ´úÂëapiÎĵµ: doxygen, ++ webpages: gnu-gendocs.sh(script translate txt into html, used for web + access.) ++ code-online-doc: ++ tutorial: ttyrec ++ design-doc: change-log, ideas-doc, demand-doc, design-doc, + modulize-design-doc, + ++ debug-utils: gdb/gdb-server, logview, ++ testing(unit-test, test-frame work): cunit, cppunit, greg, DejaGnu, ++ bug-mngr: ++ perform: gconv(code-coverage), gprof, perf, systemtap, ++ code-chk-utils: lint, Valgrind, + ++ compile-cache: ccache, ++ multi-host-compile: distcc + +@ code-utils ++ code-compare: beyound-compare ++ func-call-trace: cflow(call-graph), global(src-tag-prog) ++ code-symbol-tag-index: McCabe/pmccabe/complexity/mifuz, ++ code-highlight: Src-highlight, ++ code-format: gengen/indent, cproto, ++ code-args-autogen: gengetopt, ++ code-gen: + +@ ++ code manager: git, RCS/SCCS, diff/patch, ++ git+pages: github/gitee/gitlab ++ email(cmd-client): mailutils + + +@ traditional-dev-utilities ++ awk, gprof, gperf, dpkg/opkg, ++ idutils, OrgaDoc(txt2xml-doc), src-highile, aspell, womb(gnu pkg repo) + + + +# pkg-builder +============= + + pkg-builder is a program set to build soft-pkgs. it's similar with 'make', +but it's writen by shell script code, the dependence is only a shell program. + pkg-builder is consisted by those pkgs: + +@ devspec: pkg of this doc. the guide doc of soft-pkg develop by pkg-builer for + low-level system pkgs, espacially for pkgs of 'skeletone-linux'. +@ CCompilerCollection: gcc build src pkgs. it include toolchain-cross-ng, gcc, + binutils, and other dependent pkgs. it can build gcc with different platform. + CCompilerCollection in pkg-builder is a fixed version of gcc. so that + developer uses the same version of compiler, in order to avoid different + compile errors. pkg-builder is face to low-level system pkgs, so it does not + need a frequently updated compiler for many new features. +@ build-pkg: equal to 'make'. but the config info is distributed in different + config files. it's easy to dispatch infos in program. it's easy to use, but + it's not smart enough like 'makefile'. +@ build-config: the program manuconfig in kernel. let it to be a independence + soft-pkg. so that many other programs can use it for configuration. +@ build-pkglist: it's familar with 'buildroot'. it orgnize a system by config + files, and download, config, build it. it support distribute building. +@ shlib-devutils: a toolset writen by shell script code. it provide various + programs for developing. +@ build-ext-utils: gnu soft-pkg for pkg-builder. some of the feature have not + implemented in pkg-builder. use binary soft-pkg. such as doxygen. +@ code-mngr: a version control program like svn/git. it's also a shell script + program. and it need less server-end program to use, it is based on sftp + storage. beyound version control, it support web page update to sftp/git + server. +@ soft-repo: published file manage program. src-pkg or binary-pkg, or resource- + pkg. it like a application store, or a program repo for user to download. + +@ build-res: it provide extend develop resource. the first design goal for pkg- + builder is used for 'skeletone-linux' build and dev, beyound this, it put + other res in build-res to extend using range of it. eg: application develop. + +@ dev-assistant: + + + +# gnu pkgs beyound pkg-builder +============================== + + many features has not been implemented in pkg-builder. it uses traditional +binary soft-pkgs. + +@ libtool +@ pkg-config +@ gettext, libintl +@ texinfo, help2man, groff, man +@ doxygen +@ gendocs.sh(integrated in devutils) +@ ttyrec +@ ccache +@ distcc +@ git/RCS/SCCS/CSSC +@ mailutils: email(cmd-client). +@ gconv, gprof, perf, systemtap + +@ cunit +@ lint, Valgrind +@ diffutils, meld(with gui) +@ +# code-compare: beyound-compare +# func-call-trace: cflow(call-graph), global(src-tag-prog) +# code-symbol-tag-index: McCabe/pmccabe/complexity/mifuz, +# code-highlight: Src-highlight, +# code-format: gengen/indent, cproto, +# code-args-autogen: gengetopt, + +@ idutils, OrgaDoc(txt2xml-doc), src-highile, aspell, womb(gnu pkg repo) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[gnu¿ª·¢ÖеŤ¾ßÈí¼þ¼¯ºÏ] +@ ¿ªÔ´Èí¼þ¿ª·¢Ì×¼þ¹¦ÄÜ +# pub(git+pages): github/gitlab/gitee +# email(cmd-client): mailutils + +# ±àÒëÁ´½Ó: gcc/g++/clang/binutil(gcc/g++/ld), libc-dev, kernel-headers, flex/bison, +# ¹¤³Ì¹¹½¨, µ÷ÓñàÒëÆ÷±àÒë³ÌÐò: make/cmake, (meson, ninja) +# ÅäÖñàÒëÏà¹ØÄÚÈÝ: autotools(automake, autoconf, libtool), autogen, pkg-config, M4, menuconfig +# multi-language: gettext, intl +# info/manÎĵµÉú³É: texinfo, help2man, Éú³ÉinfoºÍmanµÄ°ïÖúÎĵµ¡£groff¡£ +# ´úÂëapiÎĵµ: doxygen, ¸ù¾Ý´úÂë, Êä³ö´úÂëµÄapiÎĵµ¡£ +# ¸ù¾ÝtxtʹÓÃ˵Ã÷Îĵµ, gendocs.sh (script)´¦ÀíºóÊä³öhtmlÎĵµ¡£ +# code online readÎĵµ, +# pkgÖÆ×÷Èí¼þ: dpkg/opkg, + +# tutorial: ttyrec, ++# design-doc(change-log, ideas-doc, demand-doc, design-doc, modulize-doc): +# °æ±¾¹ÜÀí: git, RCS/CSSC, diff/patch, + +# bug-mngr: GNATS, bugzilla +# testing(unit-testing, test-framework): cunit, cppunit, greg, DejaGnu, testdrive +# degug-utils: gdb/gdbserver, logview +# perform: gcov(code-coverage), gprof, perf, systemtap +*# code-check-utils: lint, Valgrind, + +# code-utils: +beyoundcompare: +inc-file-list: (makefileÖÐ-include $(OBJ:.o,.d), ±àÒë.oÎļþ֮ǰgcc -MM -MT $@ -MF $(patsubst $<,%.o,%.d) $<, Êä³öµ½.dÎļþ-includeµ½makefile, .hÐÞ¸Äʱ, .o³ÌÐò±àÒë¡£)(gcc -MM -MF xxx.d -MT xxx.o xxx.c) +func-call-trace: cflow, global, graphvize +symbol-tag-index(code-hint): global(src-tag-prog)/McCabe/pmccabe/complexity, +code-highlight, Src-Highlite, +code-formatter: gengen/indent, cproto, +code-arg-autogen: gengetopt +code-gen: + +@ traditional-dev-utilities +# gawk, gprof(ÔËÐÐÐÔÄÜÈí¼þ), gperf, +# , Idutils, OrgaDoc(txt2xml-doc), Src-Highlite, aspell, womb(gnu pkg repo), + + + + + + + + + + + + + + + + + + + + + + + + + + +[gnu-dev-tools¿ª·¢Èí¼þ°ü-¹¦ÄܲÙ×÷½Ó¿Ú] +@ toolchain &utils + +@ Èí¼þÅäÖᢱàÒë(dep-chk)¡¢pkgÖÆ×÷¡¢°²×° + +@ proj(src-dir-scan¡¢file-add/del¡¢param-cfg-file¡¢target-add/del¡¢lib/.h-inc&path¡¢) + +@ cross±àÒë +@ cache¡¢distcc +@ doc(man¡¢info¡¢html-pages¡¢doxygen¡¢online-codeview¡¢ttyrec¡¢graphvize¡¢) +@ code(format¡¢gen¡¢edit¡¢syn2design) + +@ src(back¡¢release¡¢version-id¡¢git/RCS¡¢branch¡¢diff/patch¡¢merge¡¢change log) + +@ pkg(inst-pkg¡¢src-pkg¡¢pkg-repo) + + +@ code-check(mem-leakage¡¢grammar) +@ dev(info¡¢str-modify¡¢multi-byte¡¢libintl/gettext¡¢func-trace-graph¡¢hint¡¢hilight¡¢optgen¡¢debug¡¢logview) +@ multi-plat-adept(cpu-plat¡¢sys-plat) +@ ÐÔÄÜ(performence¡¢gcov) +@ test(unit¡¢script) +@ bug-mngr +@ software(readme¡¢lisence¡¢change log¡¢todo¡¢demand/funclist/idea-record¡¢) +@ web-pages(online-wiki/manual/api/code¡¢src/pkg/doc-download¡¢git) + +@ net-utils(wget/curl¡¢term&ssh-client¡¢mail-utils¡¢) diff --git a/devspec.en_US/1.1.doc-md.txt b/devspec.en_US/1.1.doc-md.txt new file mode 100755 index 0000000..e144be9 --- /dev/null +++ b/devspec.en_US/1.1.doc-md.txt @@ -0,0 +1,127 @@ + + +# introduce +=========== + + + + +# Ò»¼¶±êÌâ +========= + +# ¶þ¼¶±êÌâ +--------- + +# Ò»¼¶±êÌâ +## ¶þ¼¶±êÌâ +### Èý¼¶±êÌâ + + +### ÁíÒ»ÖÖ´øsuffxµÄ±êÌâ ###> + ²»ÂÛÊǸñʽ»¹ÊÇÃÀ¹Û³Ì¶È£¬Ê¹ÓöԳƵıê¼Ç·û±È½ÏʵÓà + ÉÏÒ»ÐеÄÎÄ×ÖĩβÌí¼ÓÁ½¸ö¿Õ¸ñ£¬±íʾһ¸ö»»Ðзû¡£ + ÕâÔÚgiteeÖÐsuffix²»Ê¹Ó㬵±³ÉÎı¾ÄÚÈÝ¡£ÉÏÁ½ÐÐÐÐÊ×´ø¿Õ¸ñ£¬µ±Ç°Ðв»´ø¿Õ¸ñ¡£ + +ps: + Õâ¸öÔÚgiteeÉÏÎÞ·¨ÊµÓᣠ+ + +# ±í¸ñÏÔʾЧ¹û +±í¸ñ +| ÏîÄ¿ | ¼Û¸ñ | ÊýÁ¿ | +| --------- | -----: | :----: | +| ¼ÆËã»ú | \$1600 | 5 | +| ÊÖ»ú | \$12 | 12 | +| ¹ÜÏß | \$1 | 234 | +: ÊǶÔÆë·½Ïò + +# ÎÞÐòÁбí +* ÐǺŠ++ ¼ÓºÅ +- ¼õºÅ + +# ÓÐÐòÁбí +1. Áбí1 +2. Áбí2 +3. Áбí3 + +# ´øËõ½øµÄÁбí +>* Ò»¸ötab +>>* Á½¸ötab +>>>* Èý¸ötab + +*> Ò»¸ötab +*>> Á½¸ötab +*>>> Èý¸ötab +*ÐèÔÚËõ½ø·ûÖ®ºó£¬·ñÔò²»Æð×÷Óᣠ+ +>1. Ò»¸ötab +>>1.1. Á½¸ötab +>>>1.1.1. Èý¸ötab + +1. > Ò»¸ötab +1.1. >> Á½¸ötab +1.1.1. >>> Èý¸ötab + +1.> Ò»¸ötab +1.1.>> Á½¸ötab +1.1.1.>>> Èý¸ötab + ++ 1 > ++ 1.1 >> ++ 1.1.1 >>> + + + +# Á´½ÓºÍͼƬ +[ÍøÖ·Á´½Ó](http:www.taobao.com) +![cmd-markdown-logo](https://www.zybuluo.com/static/img/logo.png) + +# ÎÄ×Ö×ÅÖرê¼Ç +*бÌå* +**´ÖÌå** +***´ÖбÌå*** + +# ´úÂë +ÔÚÎı¾ÖÐǶÈë`printf("%d", var);`µ¥ÐдúÂë¡£´øÓï·¨¸ßÁÁ¡£ +´úÂë¿é¡£ÔÚÆðʼ±ê¼ÇºóÌí¼Ó´úÂëÓïÑÔÀàÐÍ¡£ +```c +printf("%d", var); +``` + +# ·Ö¸îÏß +Èý¸ö¼°ÒÔÉϵÄ×Ö·û¡£Ê¹ÓÃ=£¬-£¬~ +x================= +ÎÄ×ÖÄÚÈÝ +x----------------- + ÎÄ×ÖÄÚÈÝ¡£ +x~~~~~~~~~~~~~~~~~ + + + + + + + + +# ÐÐÊ×Îı¾Ëõ½øÓë»»Ðзû +µ±Ç°charpter֮ǰ°üº¬¶àÐл»Ðзû£¬µ«²»ÏÔʾ¡£ +Õâ¸öÎÄ×Ö²»º¬ÈçºÎ±ê¼Ç + Õâ¸öÎÄ×Ö´ø¿Õ¸ñµÄËõ½ø¡£ +Õâ¸öÎÄ×Öβ²¿´øÁ½¸ö¿Õ¸ñ¡£ + Õâ¸öÎÄ×ÖÐÐÊ×´ø¿Õ¸ñ£¬Î²²¿´øÁ½¸ö¿Õ¸ñ¡£ + + + +ÉÏ3ÐÐΪ2¸ö¿Õ¸ñµÄ¿ÕÐС£ +ÓÃÓÚÎÄ×ÖÖ®¼äµÄ¿Õ¸ñ¡£ + + + +ÉÏÃæ3ÐÐÖ»°üº¬»»Ðзû£¬²»´ø¿Õ¸ñ¡£ + + + +# charpterÖ®¼äµÄ¿ÕÐÐ + µ±Ç°charpter֮ǰ°üº¬Èý¸ö¿ÕÐУ¬¿ÕÐÐÒÔÁ½¸ö¿Õ¸ñΪÄÚÈÝ¡£ +> ÒÔ>·ûºÅµÄprefix£¬ÓÃÓÚÎÄ×ÖµÄËõ½ø¡£ \ No newline at end of file diff --git a/devspec.en_US/1.1.words-conception.txt b/devspec.en_US/1.1.words-conception.txt new file mode 100755 index 0000000..7acae93 --- /dev/null +++ b/devspec.en_US/1.1.words-conception.txt @@ -0,0 +1,9 @@ + + +@ pkg, package: file or program function collection in a file. +@ src-pkg, source package: source code of a software in a zipped tarball file. +@ inst-pkg, install-pkg, installable package: executable files to be installed + in system. +@ soft-pkg, software package: general name of a software. it means a src-pkg or + a installable package. + diff --git a/devspec.en_US/1.2.rules.txt b/devspec.en_US/1.2.rules.txt new file mode 100755 index 0000000..44f8df4 --- /dev/null +++ b/devspec.en_US/1.2.rules.txt @@ -0,0 +1,29 @@ + + +[¹æÔò] +@ ¹æÔò¶¨ÒåµÄÉÙ¶ø¾«£¬Êµ¼Ê¿É²Ù×÷µÄ¹æÔò¡£ +@ ´úÂë·ç¸ñ¡£´úÂëÒÔÒ»¶¨µÄ¿ò¼ÜºÍ¸ñʽ±àд£¬Ê¹ÓÃcomment-tag±ê¼Ç´úÂëÖи÷¸öÓï·¨ÌØÐÔ +²¿·Ö£¬±ãÓÚ³ÌÐò½âÎö¡£Í¬Ê±´úÂëÒÔÒ»ÖÖ´úÂë·ç¸ñ±àд£¬³ÌÐò¿´ÉÏÈ¥¸üÕû½à¡£²Î¿¼ +"code-style-rules"¡£ +@ Ò»¸öÈí¼þ°üÓ¦°üº¬GNUÔ´Âë°üËùÐèµÄÎĵµ¡£ +@ ¿ª·¢Á÷³Ì¡£³ÌÐòµÄidea£¬µ½Éè¼Æ¡¢±àÂë¡¢µ÷ÊÔ¡¢²âÊÔ¡¢·¢²¼£¬×ñÑ­³ÌÐò¿ª·¢Á÷³Ì¡£²Î¿¼"project-develop-flow" + + +@ less rule defination£¬more executable rules¡£ +@ code sytle. pay attension on code sytle, and use code-format util to format code automatically before new version publish. +@ a src pkg should contain full-doc as a standard GNU src pkg. +@ develop flow. a src pkg or a project follows develop flow rules, reference from "project-develop-flow.txt". +@ + + +[½¨Òé¹æÔò] +@ Ä£°å +# Èí¼þ°ü¹¤³ÌÄ£°å¡£Ò»¸öÈí¼þ°üµÄÎļþ¡¢Ä¿Â¼½á¹¹£¬Ê¹Óù¤³ÌÄ£°å£¬ÊÇÒ»¸öÈí¼þ°ü¿ª·¢µÄÆðµã¡£ +# Ô´´úÂëÄ£°å¡£Ô´ÂëÎļþÐè°üº¬ÎļþÐÅϢͷ¡¢´ø×¢ÊÍ·Ö¸ôµÄ±à³ÌÓïÑÔÓï·¨ÌØÐԵĴúÂëʵÏÖ¡£Ê¹ÓÃtmpl»òcodegen²úÉúµÄ´úÂë¿ò¼Ü±àÂ룬¶ø²»ÊÇÊÖ¹¤ +±àдÎļþ¡£ +@ »ù´¡±à³ÌÓïÑÔ֪ʶ¡£Ê¹ÓÃͨÓõÄ֪ʶºÍ¼¼Êõ±àд´úÂ룬¶ø·Çif/else/for/whileȥʵÏÖ´úÂë¡£ +@ ¹¹½¨Í¨ÓõĴúÂë´¦Àí³ÌÐò¿â¡£ÒÔͨÓôúÂë¿âµÄ·½·¨±àд´úÂë¡£ÀýÈ磺Êý¾Ý½á¹¹£¬×é¼þ¼¼Êõ£¬MVPÄ£ÐÍ»¯³ÌÐòÉè¼Æ¡£ + +@ ʹÓÃͨÓõÄÅäÖÃÎļþºÍÊý¾ÝÎļþ¸ñʽ£¬°üÀ¨imi¡¢catalog¡¢xml¡¢rec¡¢csv¡¢db¡£ + +=============================== diff --git a/devspec.en_US/1.3.conception-and-mind.txt b/devspec.en_US/1.3.conception-and-mind.txt new file mode 100755 index 0000000..cd205ce --- /dev/null +++ b/devspec.en_US/1.3.conception-and-mind.txt @@ -0,0 +1,168 @@ + + + + + + + + + + + + + +@ text-lization + it's easy to use and edit. + +@ software re-use. + for shell script, use the function in shlib by default. + for c/cpp, use the function in libcxt by default. + +@ software re-use + a program use RAD tools to develop program, it cost less time, and it's easy +to implement function feature. at the same time, size of the executable would +be smaller by using public library. + for dependence of public library, it uses library as a codelib. when the +lib of codelib has been compiled, and existing in system or develop environment +it link lib in executables. if the lib of codelib is not existing in system, +or specify the build mode with codelib linking, it's just copy the code in +codelib, compile and link them into current executables. + + +@ program level and element + different feature implementation need different program element, it's the +different level of programming. + if we need to write a low level system program, we use asm. the element of +program is instruction. + if we need to write a program feature only by the language, the element of +program is lang-element. + if we need to write a system relative program, or a bit complex program, +the element of program is function-set-element, or lib-pkg-element. + if we need to write a program rapidly, we use script language, or use libs +with better absolution. such as MFC, VCL. the element of program is +module-element, or class-element, or lib-pkg-element. + if we need to architect a bit more large system program, the element of +program is pkg-elemnt. + if we need to architect a more large system program, the element of +'software', is prog-element, or service-element. + + +@ program level and element + different feature implementation need different program element, it's the +different level of programming. + if we need to write a low level system program, we use asm. the element of +program is instruction. + if we need to write a program feature only by the language, the element of +program is lang-element. + if we need to write a system relative program, or a bit complex program, +the element of program is function-set-element, or lib-pkg-element. + if we need to write a program rapidly, we use script language, or use libs +with better absolution. such as MFC, VCL. the element of program is +module-element, or class-element, or lib-pkg-element. + if we need to architect a bit more large system program, the element of +program is pkg-elemnt. + if we need to architect a more large system program, the element of +'software', is prog-element, or service-element. + + conclution: +@ instruction: +@ lang-feature-element: +@ function-set-element: +@ module-element: +@ class-element: +@ prog-element: +@ svc-element: +@ lib-pkg-element: + + before writing the program code, think about the purpose of the program, +and the level of the software. then, use the corresponding element to writing +code. + different level has different traditional element. + eg: for lang-element, reference-var is a feature, it helps programer use +variable without pointer operation. when it is used as a return type, developer +can operate the variable on left side of '='. + eg: for lang-element, throw-try-catch is a feature for processing of a +condition that function invoking is failed. if there are many functions will be +invoke to alloc some resource, it's a good feature to process the failed +condition. + eg: for module-element or class-element, data-structure is a util for data +orgnize. in a program language, variable is a point of data, and struct +variable is a set of data. data-struect orgnize data by it's rule. + eg: for prog-lement, or svc-element, ssh, sftp, and so on. otherwize, there +many program in shell is a good feature for program processing. such as sed, +grep, awk. it's a conception of text data processing. in a traditional c/c++ +program, it uses str-functions, and program lang-feature-element, to implement +text data processing. use shell script to process text data, it's more easy +then c/c++ lang-feature-element. + the interface/element of string process of traditional c/cpp, is strcpy/ +strcmp/strstr/a2i/i2a. + the interface/element of string process of shell script, is: +@ init-if-existing-or-null: +${var-DEFAULT}, if no declare, use DEFAULT. +${var:-DEFAULT}, if no declare, or null, use DEFAULT. +${var=DEFAULT}, if no declare, use DEFAULT. +${var:=DEFAULT}, if no declare, or null, use DEFAULT. +${var+OTHER}, if no declare, use null, otherwise, use OTHER. +${var:+OTHER}, if no declare, or null, use null, otherwise, use OTHER. +':': if null +'-': if no declare, use default value. +'=': if no declare, use & set default value. +'+': if no declare, use opesite logic, use null value in default, otherwise ... +@ slice: ${str:0:1}, 0 is the start offset, 1 is the lenth of string. it can be + positive value. ${str:-1:-2}, -1 is start from the tail of the string, -2 is + the previous char at offset position. +@ truncate: ${str#*left_once}, ${str##*left_all}, ${str%right_once*}, + ${str%%right_all*}. +@ null-chk: [[ -n ${str} ]], or [[ -z ${str} ]]. +@ find: cat file.txt | grep -E "find_str" +@ replace: cat file.txt | sed -i -E "s/find_str/replace_str/g", or + ${str/find_str_once/replace_str} or ${str//find_str_all/replace_str}. +@ column-cut: echo "a b c" | cut -d ' ' -f1,3. or use array. + OLD_IFS=$OLD_IFS && IFS=' ' && data=( a b c ) && echo ${data[0]} ${data[2]} && IFS=$OLD_IFS +@ up-char: tr '[a-z]' '[A-Z]', or ${str^^} +@ low-char: tr '[A-Z]' '[a-z]', or ${str,,} +@ regex: regular-expression, it is widlly used in grep/sed/awk. =~ in [[]] is + a powerfull thing. get the matching string in array of BASH_MATCHING. + + + + + + + + + +@ codelib + # ref-copy & lib-link + # general-dep-interface + + basical-module(stdio£¬file-ops£¬string£¬mem-ops) + + opt-module(thread£¬fiber£¬ipc) + + cplr-feature(TLS£¬weak£¬alias£¬)¡£aliasÓÃÓÚgnuºÍmfcÁ½ÖÖ·ç¸ñµÄ½Ó¿Úº¯ÊýµÄ¼æÈÝ£¬ÔÚ±àÒëÆ÷ÉÏÐèÒªÔÚÁ´½Óʱ½«importµÄº¯ÊýÃû½øÐÐת»»¡£ + # scrope£¬ÓÃÓÚÐèÒªÏà¶Ô¸´Ôӵģ¬Ö»Óë±à³ÌÓïÑÔÏà¹ØµÄ¹¦ÄÜ¡£ÓÃÓÚ£ºµ¥Æ¬»úϵͳ£¬sys-low-leval´úÂ룬Çý¶¯¼°ÏµÍ³»ù´¡Èí¼þ°ü£¬ÒÔ¼°Ó¦ÓóÌÐòÖÐÉÙ²¿·Ö²Ù×÷ϵͳ¹¦ÄÜÎ޹أ¬±à³ÌÓïÑÔ¼°³ÌÐòÉè¼ÆÄ£ÐÍÏà¹ØµÄ´úÂë¡£ + # Ò»¸öÄ£¿é°üº¬£º.cºÍ.hÔ´Îļþ£¬.mdlÄ£¿é»¯½Ó¿ÚÉè¼ÆÎļþ£¬.config¹¦ÄÜÅäÖÃÎļþ£¬build±àÒë²ÎÊýĿ¼£¬.recÉè¼ÆÎĵµ£¬.md»ù±¾µÄ˵Ã÷Îĵµ£¬manual.mdʹÓÃÊÖ²áÎļþ£¬_test.c, _test.sh, .stdio, .time, .timecost£¬µÈ²âÊÔÎļþ¡£¸ù¾Ý²»Í¬µÄ´úÂëʵÏÖ£¬Ò»Ð©Îļþ¿ÉÉìËõ¡£ + һЩÈí¼þ°üµÄͨÓÃÎļþ£¬ÏñLISENCE£¬AUTHORµÈ£¬Í¨³£Ê¹ÓÃÈí¼þ°üͨÓõġ£¶ÔÓÚchangelog£¬news£¬¿ÉÔÚÄ£¿éÖÐʹÓã¬Ò²¿ÉÔÚÈí¼þ°üÖÐʹÓᣠ+ mdlÎļþºÍ.hÎļþ£¬ÓÃÓÚÆä±¾Éí¹¦ÄÜÖ®Í⣬°üº¬interface¹¦ÄÜ¡£¶ÔÓÚc³ÌÐòÄ£¿é£¬Êä³ömacro£¬type£¬var£¬func¡£ + # codelib¶Ôsrc-module½øÐй¤³Ì»¯µÄorg£¬Ä£¿é¼äµÄdep£¬ÒÔ¼°¹¦ÄÜ·ÖÀ࣬¶Ô²»Í¬cpu£¬²Ù×÷ϵͳ£¬±àÒëÆ÷µÈÔËÐл·¾³µÄadepter¡£ + ¹¦ÄÜ·ÖÀàÒÔÒ»¸öcatalogÎļþÃèÊö£¬»òÒÔĿ¼Á´½ÓÎļþµÄĿ¼½á¹¹ÃèÊö¡£ + # codelibµÄ¹¦ÄÜÄ£¿éÔ´×ÔÓÚÒÑÓÐÈí¼þ°üÖУ¬Ò»Ð©Ö»Óë±à³ÌÓïÑÔÏà¹ØfeatureµÄ³éÏóºÍÄ£¿é»¯¡£ÒÔ¼°³ÌÐòÉè¼ÆÖеÄidea£¬Êµ¼ÊÎÊÌâµÄ´¦Àí·½·¨µÈ¡£ + + +@ codelib£¬¶à¸ö¹¦ÄÜÄ£¿é×éºÏ³ÉÒ»¸ölib£¬²¢ÒÔ±àÒ룬»òrefµÄÐÎʽ£¬Ê¹ÓÃlib¡£libÖеŦÄÜÄ£¿éΪpure-lang-feature£¬ÔÚstdioÓëmem-allocµÈ¹¦ÄÜÖ®Í⣬¼¸ºõ²»Ê¹ÓÃÍⲿ½Ó¿Úº¯Êý¡£ + # codelibÖеÄÿ¸öÄ£¿é¶¼ÊÇÏà¶ÔÈõñîºÏÐԵġ£ + # codelibµÄ´úÂë°üº¬Á½ÖÖʹÓ÷½·¨£¬copyʹÓúͱàÒëʹÓá£copyʹÓÃʱ£¬¸ù¾ÝhdrµÄinclude±íʾµÄdep£¬½«ÆäËüÄ£¿éһͬcopyÊä³öµ½Êä³öĿ¼¡£ + # ÆäËü³ÌÐòʹÓÃʱ£¬Ò²¿É¸ù¾ÝÔËÐл·¾³£¬ÒÔcopy´úÂë»ò¶þ½øÖÆlibÁ´½ÓÁ½ÖÖÀàÐÍ¡£Õâ¶ÔÓÚ¼õÉÙ´úÂëÈßÓà¶È£¬Í¬Ê±¼æ¹ËÈõñîºÏÐԱȽϺÃһЩ¡£ + eg: Êý¾Ý½á¹¹µÄ´úÂëÊÇͨÓôúÂ룬µ«ºÜ¶à³ÌÐòÖж¼°üº¬Ò»Ð©Êý¾Ý½á¹¹µÄ´úÂë¡£¶à¸öÈí¼þ°üÖУ¬ÕâЩ´úÂëÊÇÈßÓà¿É¸´Óõġ£ + µ«Èç¹ûÒÔ¶þ½øÖÆlibʹÓã¬Ò»¸ö³ÌÐòÖÐÐèÒª½Ï¶àlibµÄʹÓ㬽µµÍÁËÈõñîºÏÐÔ¡£ + ʹÓÃcodelib£¬¼æ¹ËÁËÄ£¿éµÄÈõñîºÏÐÔ£¬ÒÔcopyʹÓôúÂë¡£³ÌÐòÉè¼ÆµÄÈßÓà¶È½µµÍÁË£¬¶þ½øÖÆ´úÂëµ½ÈßÓà¶È¸ù¾Ýϵͳ»·¾³ÖÐÊÇ·ñ°üº¬codelibµÄ¿âÎļþ£¬Ê¹ÓÃlib½µµÍ¶þ½øÖÆÈßÓà¶È£¬ÇÒcodelibÏñlibcÒ»Ñù³ÉΪһ¸öͨÓÃlib£¬²¢²»Ôö¼Ó³ÌÐòµÄñîºÏÐÔ¡£Èç¹ûcodelibÔÚlibc¿âÖÐÒÔcopyʹÓã¬ÄÇô¶ÔÓÚÓ¦ÓóÌÐòµÄÍⲿ½Ó¿ÚÊDz»±äµÄ£¬Î´Ôö¼Ó³ÌÐòµÄñîºÏÐÔ£¬µ«½µµÍÁ˳ÌÐòÉè¼ÆºÍ´úÂëµ½ÈßÓà¶È¡£ÕâÖÖʹÓ÷½·¨£¬ÔÝÇÒ³Æ֮Ϊcode-piece¡£ + codelibÊDZà³ÌÓïÑÔÏà¹ØµÄ¿â£¬Óë±àÒëÆ÷/cpu/OSÎ޹صÄlib¡£ + µ±codelib¹ã·ºµÄʹÓÃʱ£¬ÏñlibcÒ»Ñù£¬³ÉΪһ¸ö»ù´¡libʱ£¬ÆäËüʹÓÃcodelibµÄ³ÌÐò£¬¸ù¾Ý¿ª·¢»·¾³ÖеÄcodelib¿âÒÔlibʹÓ㬶ø²»ÊÇ´úÂëcopy¡£¶øÕâ¶Ôdevelopper¶øÑÔ£¬Ô­ÓеÄcodelibÖеĺ¯Êý½Ó¿Ú²»±ä£¬×Ô¶¯Çл»³ÉlibʹÓᣠ+ # »ù´¡¹¦ÄÜÄ£¿éinterface + stdio£¬fops£¬string£¬mem-ops(alloc£¬copy£¬comp)£¬¼°ÆäÏà¹ØµÄ¹¦ÄÜÄ£¿é£¬Îª»ù´¡¹¦ÄÜÄ£¿é£¬ÒÔÒ»¸öÕûÌ壬ΪÆäËü¿âµÄdepÄ£¿é¡£ÆäËüÄ£¿éͨ³£Ö»ÒÔ±à³ÌÓïÑԺͻù´¡¹¦ÄÜÄ£¿éΪdep¡£½µµÍÄ£¿éµÄñîºÏÐÔ¡£ + stdioºÍfopsÖ»ÒÔinterfaceÌṩ£¬¸ù¾Ý²»Í¬µÄÔËÐл·¾³£¬Ê¹Óò»Í¬µÄ´úÂëʵÏÖ¡£Õâ¶ÔÓÚ²Ù×÷ϵͳ»·¾³ºÍµ¥Æ¬»ú»·¾³¶¼¼æ¹ËºÍͨÓᣠ+ eg£º³ÌÐòÖеĶàÓïÑÔ¹¦ÄÜ£¬ÔÚlibcÖÐÓÐʹÓ㬴úÂëµÄʹÓÃÒÀÀµÓÚÎļþ²Ù×÷¡£ÔڷDzÙ×÷ϵͳ»·¾³£¬»òÊÇδʹÓÃÎļþ¹¦ÄܵÄrtosÖУ¬Îļþ¼´¿Éº¯ÊýÒÔÎļþÃûºÍ´æ´¢Æ÷µØÖ·µÄ¹ØÁª±íʵÏÖ´úÂëµ½¼æÈÝ¡£ÕâÑù£¬¶àÓïÑÔ¹¦ÄܵĴúÂëÔÚ²»Ê¹ÓÃÎļþϵͳµÄ³ÌÐòÖÐÒ²¿ÉʹÓᣠ+ ÕâʹcodelibµÄ´úÂ븴ÓÃÐÔµÃÒÔÌáÉý£¬¸÷ÖÖ³ÌÐòʹÓÃcodelib£¬½µµÍ³ÌÐòÉè¼ÆºÍ¶þ½øÖÆ´úÂëµÄÈßÓà¶È¡£ + # »ù´¡¹¦ÄÜÄ£¿éÖУ¬°üº¬thread£¬fiber£¬ipc£¬ÓÃÓÚ¹¹³É²Ù×÷ϵͳ»ù±¾¹¦ÄÜ¡£ + һЩµ¥Æ¬»ú»·¾³²»ÐèÒª¶àÈÎÎñ²¢·¢¹¦ÄÜ£¬ÕâЩ¹¦ÄÜÄ£¿éÅäÖóÉÏà¹ØµÄnull²Ù×÷¡£ÔÚ´úÂë±àÒëʱ£¬²»°üº¬Ïà¹Øº¯ÊýµÄµ÷Óá£Ïà±ÈifdefµÄºê¶¨Ò忪¹Ø£¬´úÂëµ½¿É¶ÁÐÔ¸üºÃ¡£ + + + diff --git a/devspec.en_US/2.0.develop-step-guide.txt b/devspec.en_US/2.0.develop-step-guide.txt new file mode 100755 index 0000000..3615df7 --- /dev/null +++ b/devspec.en_US/2.0.develop-step-guide.txt @@ -0,0 +1,101 @@ + + +# introduction +============== + + the develop step is defined as a guide document. it shows which thing will +do in a src-pkg developing. it uses uml diagram tool to express the step info. + there two type of dev-step: + +@ software engineering dev-step. it start from demand doc, and walk over demand + doc with structurelized analysis, structurelized design, code auto-gen, + coding and testing loop in unit, inegrate testing, document writing, and end + with publish. +@ compact design dev-step. it compact the analysis step by human experience + without graphical design utilities, and also compact the design step. use + a feature-list file(TODO) instead of analysis diagram, use module-list file + (*.catalog) instead of class diagram, and append a file named 'todolist' to + list the task work for current src-pkg, use 'worktask.tmp' for current + developer of the src-pkg. it's nearly a normal soft-pkg develop step, but + have the conception for software engineering developing. + + the compact design dev-step is introduced in software engineering dev-step. +most of the document is introducing the conception and diagram and method and +utility program for software engineering develop. + as an engineering src-pkg, it include manage info for it. it uses a loose +and flexible method to orgnize a src-pkg project developing. it just use +list file 'TODO' for features to be developed as a feature demand doc, and use +'TODOLIST' for task list of a src-pkg, and use 'worktasks.tmp' for developer. + + the analysis and design file is appended for a src-pkg, it's different from +the tranditional src-pkg. and i hope it's a method for software develop, not +a redundence design work for developer. there are auto-utility-programs for +code-design-sync between design file and src-code. + it uses structurelized analysis and design method instead of uml diagram, +for personally, it's an easy work to do for developer, rather than using the +uml diagram with more knownlege background of object orianted design. + the diagram is drawed by uml diagram program, and it does not contains some +element of graphical shape. so, use uml diagram element instead. + + in the charpter of 'dev-actor-task', it introduced the actor and behaviour +of an actor and develop work task exist in a develop procedure. use the usecase +diagram to describe it. + in the charpter of 'develop-step-diagrams', it pay attention on the flow +and step for developing, it uses usecase diagram as a flow diagram. + in the charpter of 'develop-menagement', it introduced the engeering +orgnize method of develop task. actually, it's a compact method. + + + +# conception and names +====================== + ++ diagram: graphical expression method, to show the relationship between + various things. ++ catalog-file: text doc orgnized as a tree struct with tab indent. ++ list-file: storage every text info in a row. ++ ++ structure analysis(SA): traditional analysis method. it list the input and + output object, draw the flow diagram by data. ++ structure design(SD): traditional design method. it design programs accroding + structure analysis info. ++ ++ top-usecase: analysis the actor and its behaviour of a software. ++ module-pkg-usecase: if the action mapped to behaviour is complex, put the + usecase-diagram into a new one, and it's a module of the diagram. ++ data-flow-diagram(DFD): the method of structure analysis. the diagram use + data flow info to express the software. ++ function-invoking-procedure-diagram: a program has two things to express it + self. data flow and execute/invoking flow. this diagram shows the invoding + sequence of different function feature process module behand the user action. ++ function-feature-list-file: list function feature as the demond of a src-pkg. ++ data-dict: all data in DFD. ++ ER-diagram: Data entity diagram. ++ ++ pkg-diagram: pkg is a set of program module. ++ component-diagram: the software of system public program. ++ deployment-diagram: programs would be installed on various physical machine. ++ build-dest-list: list the dest executable file in the software. ++ install-pkg-list: list the pkg file in the software. an install pkg include + dest executable files. ++ src-pkg-list: sometimes, every executable file use a src-pkg to implement it, + and sometimes several familiar executables implemented in a src-pkg. it's + a list of src-pkg to be developed for the software. creating src-pkgs by + those -list info file. ++ ++ top-function-module-list-file: this file generated by build-dest-list and + install-pkg-list and src-pkg-list. generate project info by this file. ++ function-module-list-file: generate framework of a src-code dir by this file. ++ ++ function-module-struct-diagram: same as architech-diagram. ++ architech-diagram: display the layered structure of a software. ++ class-diagram: it shows the relationship bewteen different class defination. + it include the attribute data and method defination in a class. ++ object-diagram: entity of class type. ++ ++ cmd-args-design: argument info for a command. ++ running-param-design: paramter file defination. ++ time-sequence-diagram: it show the sequence of invokding. ++ + + diff --git a/devspec.en_US/2.1.dev-actor-task.txt b/devspec.en_US/2.1.dev-actor-task.txt new file mode 100755 index 0000000..3be76c6 --- /dev/null +++ b/devspec.en_US/2.1.dev-actor-task.txt @@ -0,0 +1,349 @@ + + +# top usecase of src-pkg develop +================================ + + look at the diagram 'top-usecase'. it shows the relationship between actor +and its behaviour(work content in dev), and the work-task machine. + main develop flow is the work of maintainer and tech-leader to do and will +do. the actual develop task running with file of 'todo' 'todolist' 'bugs' +'worktasks.tmp'. + + view 'top-usecase' and 'dev-work-flow-diagram' before reading the text doc +below. + + + +# actor +======= + ++ author + the original code writer. normally, it's equal to the maintainer, + tech-leader, developer, and tester. if the soft-pkg is large and complex, + add maintainer to manage the project, and the author is to be the + tech-leader. ++ tech-leader + process problems on technical. design the archtecture of the soft-pkg. + the works for he/she is: new ideas, check if publish, feature-list, design- + module, doc-tutorial. ++ maintainer + the soft-pkg manager for new feature develop and bug fix task. decide + feature list to be develop, decide bug to be fixed in various version, and + decide new version of soft-pkg publish. + author is face to the soft-pkg it self, the soft-pkg can be used in various + environment. but maintainer face to the operating system project. if the operating system need to append some features, + the work for he/she is: new ideas, check if publish, launch publish, + publish. ++ developer + has the ability of programming in some of a language. familar with + pkg-builder, use it for function module develop and unit test. + the work for he/she is: new ideas, design-module, develop, doc-tutorial, ++ tester + writing shell test code for soft-pkg by scripttest. writing c/cpp test + code. experience in security. familar with tools for code checking. + the work for he/she is: test-task, bug-retest, new-demond, download & + build. ++ user + soft-pkg user maybe is an other soft-pkg developer. or a terminal user of + a software. + the work for he/she is: download & build, bug-report, new-demond. ++ traslator + work for multi-language design file translating. + the work for he/she is: doc & tutorial. ++ documentor + document review and check. writing example code for libs, create ttyrec tutorial. + the work for he/she is: doc & tutorial. + + + +# author & maintainer & tech-leader +=================================== + + author and maintainer and tech-leader, who hold the src-pkg? + the author and maintainer and tech-leader always have the ability of +developing. they are the same person in small scale of soft-pkg developing. + tech-leader is an advanced and mainly developer for a src-pkg. + most of the condition, the author is the actor of maintainer and +tech-leader. + if the soft-pkg is a bit large, there are many developer need to cooperate +together to writing code, the author of src-pkg is the actor of maintainer and +tech-leader, develop with other developers. + sometimes, the author of src-pkg is not like to resolve the things for +publish and so on, a maintainer do this works, and he is an actor of assitant +for tech-leader. + sometimes, the src-pkg is belong to a software, or an orgniztion, the +author of the src-pkg is a tech-leader, and the maintainer is the member in +other soft-pkgs, he/she only gives new-idea or new-demond for this src-pkg, +and decide which version of src pkg can be published. + eg: a tester in a src-pkg want to use an automatical utility, but he/she +have no time to develop. he only provide new-ideas and new-demond for the +src-pkg, and decide the publish of src-pkg, because he/she is the user of this src-pkg. + eg: a soft-pkg need to develop a set of function feature, and the implement +code can be re-used for others, so they launch a src-pkg project, and the +maintainer/tech-leader/developer of the parent src-pkg is the maintainer of +this new src-pkg. + if the soft-pkg is very complex, the author do the design work and few of +develop work, he/she can be the actor of tech-leader or maintainer. + + + +# behaviour of various actors +============================= + + work content for various actor: + ++ author, it's an 'actor' of 'honray' src-pkg owner. ++ maintainer, + - new-idea-action, new-demond-action. + - initial-dev-launch: create a src-pkg, and develop for it's first version. + - analysis-action. analysis idea doc, and translate them into feature + list file(todo). + - new-feature-dev-launch. get the task in file of 'todo' in a version, + put them into task list(todolist) of this src-pkg, and add other tasks like + document writing, translation, testing, publish, and so on. 'devtask launch + ' will do this work automatically with version id. the task + generated in todolist can be modify manually. + - complete-estimate: check if the task launched is done. + - publish-launch: decide to publish one version of code. + - publish-estimate: decide if the src-pkg should be published. + - publish-task: loop-back testing, put src-pkg and install-pkg on web, update + homepages. + - but not do other the actual develop work. ++ tech-leader, + - same as the maintainer if willing to do some of that. + - design-task: do work of the design task in new feature develop procedure. + writing or modifying program module list file. append module, ethod/function + and variable to .catalog file, develop task dispatching, and so on. design + work is the important work for developing. + - bugfix-estimate. check if the bug should not be fixed juest now. by default, + the bug reported will be fixed, and put bugfix info into 'todolist' from + 'bugs'. + - testing-estimate: after testing bug-report, estimate the bugs, and decided + if it will be fix or not. end task or do next task. + - get task from task list (todolist), do the actual develop or other works. + - same work as a normal developer. ++ developer, + - task-work: get coding tasks in src-pkg task list(todolist). maybe it is a + new feature job, or a bug-fix job. + - writing unit test code, or test script for bug testing. + - document and tutorial writing, especially for design document. any thing + a documentor will do. ++ tester, + - task-work: test schem write with script for tool of 'scripttest'. + - white box testing. + - black box testing. + - bug-report-task: put bug description string into 'bugs', put bug detail + info into .tagdoc file, or pkg-record file under doc/testing//. ++ user, + - use-action: download, build, install, and use. + - usr-bug-report-action: send bug-report by email, or on the webpages, + sometimes with code patch file. + - new-demond-action: ++ translator, + - task-work: translation of documents by getting translation task in + 'todolist'. ++ documentor, + - task-work: getting task from task list about document. + - design document. + - user manual in different file format. + - man or info helper file. + - generate and check webpages. + - cmdline tutorial if needed. + + the work of those task is the author of src-pkg would to do, if there is +only one developer to develop the src-pkg. + this doc analysis those tasks, category, and assign to a virtual actor. if +there are other peoles instresting 'with the same src-pkg, and willing to +develop together, the maintainer could assign an actor and the corresponding +work to them. + + type of things could do: + +@ action: the things some one would do, or want to do in a src-pkg. it's a bit + frequently than others. +@ launch: it start a serial of working tasks, by setting task info from 'todo' + into 'todolist'. +@ task: an actual work for the src-pkg from 'todolist'. +@ estimate: evaluation task. evaluate the src-pkg develop state. +@ procedure: a set of task to complete part of work by same task attribution. +@ work: same as 'launch', but it is normally launched automatically. maintainer + or tech-leader can launch a work independently. + + main things that various actor will do. + +@ new-idea-action: +@ new-demond-action: +@ initial-dev-launch: +@ analysis-action: +@ new-feature-dev-launch: +@ complete-estimate: +@ publish-estimate: +@ testing-estimate: +@ bugfix-estimate: +@ publish-launch: +@ usr-bug-report-action: +@ using-action: +@ works of bugfix, testing, document, translation: +@ tasks of analysis, design, coding, testing, document, translation: + + + +# tasks +========= + + it's described in charpter of 'develop-step-diagrams'. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# tasks for an actor in src-pkg +=============================== + + + +# skill and ability +=================== ++ system use ++ c developer ++ cpp developer ++ sh-script developer ++ test (scripttest) with sh-script skill ++ language traslation ++ + + + +# privilege +=========== + ++ code download ++ code submit ++ design dir submit ++ mngr dir submit + + + +# task +====== + +task: a thing to be done. bugfix, new-feature, initial-dev, and so on. +step: an un-dispatchable unit for a task. it has a subject to do a thing for + something. +procedure: step=list for doing some thing. the step in it has the same purpose + to implement. + + task a process for a thing, it's the conception of run-time. + + + task entrence: + ++ bug re-testing task ++ bug fix task ++ new feature develop task ++ test task ++ publish task + + tasks: + ++ download & build + ++ launch-publish ++ check-if-publish ++ publish ++ task-manager + ++ new-idea ++ new-demond + ++ feature-list ++ design-module ++ develop + ++ bug-report ++ bug-retest ++ bug-fix ++ test-task + ++ doc & tutorial ++ + + +# privilege +=========== + + every type of operation create a security code. checking it before +operating. + the operation right assign to a person, assign security code of the +operation. but it's a weak tool for privilege. so, it's juest a cooperation +utility. not the real meaning of operation privilege. + + + + + + + +# behaviour of various actors +============================= + + here shows what thing the actor would to do. the actual work is translate +to a procedure, which is a set of steps. + +initial-dev: first version of a src-pkg. maybe it's a new software, or it is a + lib-pkg of a software. +new-features: note => one version of features in todo => features and other task in todolist => runing task one by one => merge code. +bug-report: submit bug description in mail, re-test, append into file of + 'bugs', and append with publish or LTS tag by tech-leader if it is needed. + if the bug is important and emergency, write it into active-queue, and + sign with 'publish' tag. when the bug is fixed, it will launch a patch + version publish. + if the bug is tagged with 'LTS', fix bug in all long times support + version. every LTS version has a forked branch. +bug-fix: get bug-report in 'bugs', append to 'todolist'. it would not be mixed + with new feature todolist, because the todolist for new feature is in the new + branch. +testing: test for whole program. +document: query document task, and get document or tutorial task in 'todolist', + do actual work for it. when document have been writen, it invoke 'devtask' to + delete corresponding document task in 'todolist'. and commit to server. +translation: it's the same with document, but the actual work is document + translation. +publish: the condition of publish is that tasks in todolist is done. it do + put some testing works, and put src-pkg and install-pkg on server, update + webpages. +LTS: long time support. if the version has suffix with '-LTS', it's a long time + support version of code. long time support version is workd in N years, or + M number of LTS version, and N years.0 diff --git a/devspec.en_US/2.2.develop-step-diagrams.txt b/devspec.en_US/2.2.develop-step-diagrams.txt new file mode 100755 index 0000000..e40c5ac --- /dev/null +++ b/devspec.en_US/2.2.develop-step-diagrams.txt @@ -0,0 +1,616 @@ + + +# introduce +=========== + + + +# tasks +======= + +**TBD** it's the behaviour and action description of different actors. task is + the work to do. + ++ maintainer, + - new-idea-action, new-demond-action. + - initial-dev-launch: create a src-pkg, and develop for it's first version. + - analysis-action. analysis idea doc, and translate them into feature + list file(todo). + - new-feature-dev-launch. get the task in file of 'todo' in a version, + put them into task list(todolist) of this src-pkg, and add other tasks like + document writing, translation, testing, publish, and so on. 'devtask launch + ' will do this work automatically with version id. the task + generated in todolist can be modify manually. + - complete-estimate: check if the task launched is done. + - publish-launch: decide to publish one version of code. + - publish-estimate: decide if the src-pkg should be published. + - publish-task: loop-back testing, put src-pkg and install-pkg on web, update + homepages. + - but not do other the actual develop work. ++ tech-leader, + - same as the maintainer if willing to do some of that. + - design-task: do work of the design task in new feature develop procedure. + writing or modifying program module list file. append module, ethod/function + and variable to .catalog file, develop task dispatching, and so on. design + work is the important work for developing. + - bugfix-estimate. check if the bug should not be fixed juest now. by default, + the bug reported will be fixed, and put bugfix info into 'todolist' from + 'bugs'. + - testing-estimate: after testing bug-report, estimate the bugs, and decided + if it will be fix or not. end task or do next task. + - get task from task list (todolist), do the actual develop or other works. + - same work as a normal developer. ++ developer, + - task-work: get coding tasks in src-pkg task list(todolist). maybe it is a + new feature job, or a bug-fix job. + - writing unit test code, or test script for bug testing. + - document and tutorial writing, especially for design document. any thing + a documentor will do. ++ tester, + - task-work: test schem write with script for tool of 'scripttest'. + - white box testing. + - black box testing. + - bug-report-task: put bug description string into 'bugs', put bug detail + info into .tagdoc file, or pkg-record file under doc/testing//. ++ user, + - use-action: download, build, install, and use. + - usr-bug-report-action: send bug-report by email, or on the webpages, + sometimes with code patch file. + - new-demond-action: ++ translator, + - task-work: translation of documents by getting translation task in + 'todolist'. ++ documentor, + - task-work: getting task from task list about document. + - design document. + - user manual in different file format. + - man or info helper file. + - generate and check webpages. + - cmdline tutorial if needed. + + +# develop step +============== + + it's sourced from the behaviour-action list, then to the work tasks, and +in this charpter, it's the step. + +actor ==> behaviour action ==> work task ==> dev-step + + view '*-procedure' usecase diagrams first. + those below are the develop flow used for pkg-builder under devspec, and it +is a note for usecase diagrams. + +@ new sof-pkg project creating +# download and install pkg-builder, check the develop environment works well. +# create a soft-pkg by templete. +# create web home pages by program or guide documents. +# first-version-dev-env-chk: create the start version of the soft-pkg, compile, + and comit to code repo, and publist the initial blank version of soft pkg for + testing. + +@ for new project develop +# tag-doc. record the function feature or idea for a soft-pkg. +# trimp the tag-doc, and output a feature list to be developed. +# catalog. writing function module for soft-pkg by using .catalog file. +# generate code framwork automatically by using codegen. compile and fix + compile bug, output an executables. +# modulized design: ++ write unit test code, and coding for single function module, ++ unit test by using cunit or scripttest. ++ coding ... until the code of function module is tested ok. +# integrate testing by scripttest. +# performence testing accroding to the demond of design. memory leakage, code + coverage, and code optimization. +# multi-lang support accroding to the demond of design. +# first version testing, and bug-report, bug-fix, re-testing. +# document: manual-helper-doc, dev-api-doc, tutorial/animation, example, and so + on. +# publish for src-pkg, binary install pkg, relative resource file pkg, web + pages, documents, by using utility programs in devutils. + +@ part of code develop +# get the develop task from task list, and clear what to be developed. +# create unit test code, coding for task. +# unit test, and fix-bug, re-test. +# inegerate test, or function feature loop-back test. + +@ new features +# send issue by email to the maintainer, maybe with the patch code. or ideas + from the author of soft-pkg. +# view the issue by maintainer, append a feature in tag-doc if it is needed for + soft-pkg. + +@ new feature branch marge +# fork a new branch from main version, modify code on it until it is done. +# check if the code of main version +# get the corresponding version of code forked from mainline. get the current + newest version of code, and compare them. +# combine the compared modification code into new branch. +# loop-back testing +# commit if the ocde of main version is not updated since it is used for + comparing. if new modification commited, compare and combine again. + +@ bug-report +# send mail to the maintainer. it's better to bring test environment + description, even if the patch code. +# record the bug-report info, and append the bug re-testing task. +# tester or some one get the task of bug re-testing in current version, and + test in various long time support version. +# record the bug-report and bug-testing info, append a bug-fix task, and + specify the version code to be fixed, and record patch version publish + demaond if the fixed-bug is need to be publish as a patch version. + +@ new feature develop +# get a intreast task from feature list by developer, or assign task to a + developer by the maintainer. +# developer get the task, and the relative documents. do develop works + accroding 'part of code develop'. +# check if all features developed in new version feature list, and publish + soft-pkg if done. + +@ bug-fix +# create a task for bug-fixing. +# developer get the task, and the relative description text. do develop works + accroding 'part of code develop'. +# fix and test in other versions listed in task. +# publish patch version if needed. + +@ publish +# check feature list that has been developed, check bug list that has been + fixed. +# build soft-pkg, generate documents. +# function feature loop-back testing, documents checking, fix-bug if needed. +# output changelog and news automatically by tag-doc. delete task record and + bug record that has been done. trimp documents in tag-doc. +# upload src-pkg and bin-pkg, update web pages by utility programs in devutils. + view the web pages, and test downloading, build and running loop-back test. + + the develop of soft-pkg is driven by task and develop step. the maintainer +put developer on a task, or a developer is intreasting in some feature, or +willing to fix some bug. it push the step for soft-pkg developing. + + here impmort a conception of 'procedure'. it's the step serial for works +in developing. + + + +# design files +============== + +@ dev-design +# use-relationship ++ topÓÃÀýͼ£º°üº¬user¡¢softwareÖ®¼ä¹ØÁªµÄ´óÌå¿òͼ¡£²àÖØÓÚÓû§behaviour£¬¼°¶ÔÓ¦ + µÄ¹¦ÄÜÄ£¿é¡£¶ÔÓÚÒ»¸öÃüÁîÐгÌÐò£¬Í¨³£ÊÇÃüÁîÐвÎÊý¼°¶ÔÓ¦µÄ¹¦ÄÜ¡£ÔÚÓÃÀýͼÖаüº¬pkgÐÅÏ¢£¬²»ÁíÍâ»æÖÆpkgͼ¡£ ++ pkgÓÃÀýͼ£º°üº¬Ò»¸öpkg»òһЩ¹¦ÄÜÏà½üµÄpkgµÄuserºÍoperationÖ®¼äµÄ¹Øϵͼ¡£Èç¹û + ³ÌÐò½Ï¸´ÔÓ£¬°üº¬¶à¸ösub-pkg£¬»ò°üº¬¶à¸öexe³ÌÐòʱ£¬¶Ôpkg»òexeµÄÓÃÀýÃèÊö¡£ + +# analysis ++ £¡¹¦Äܵ÷Óùý³Ìͼ(function-invoking-procedure-diagram)¡£ + ´ÓÍⲿÊäÈëµ½¹¦ÄÜ´¦ÀíµÄÔËÐйý³Ìͼ¡£ÓëÊý¾ÝÁ÷ͼÏà¶ÔÓ¦µÄ¹¦ÄÜÔËÐйý³Ìͼ¡£ÀýÈç´Ó + Óû§ÊäÈëÃüÁîÐеÄij¸ö²ÎÊýµ½¹¦ÄÜʵÏֵŦÄÜÄ£¿éµ÷Óá£Ò»¸ö¹¦ÄÜÄ£¿é¿ÉÒÔÊÇÒ»¸ö + module£¬Ò²¿ÉÒÔÊǺ¯Êý¡£ ++ ¹¦ÄÜÌØÐÔÁбíÎļþ(function-feature-list-file) + ÓÃÓÚ¹¦ÄÜÌØÐÔÐèÇóµÄtracer¡£Í¬Ê±ÓÃÓÚÊä³öTODOÎļþ¡£TODOÎļþµÄ¹¦ÄÜʵÏÖºó£¬ÓÃÓÚ + changelogºÍnewsÎļþµÄÊä³ö¡£ + ¶Ô¹¦ÄÜÐèÇó»ò¹¦ÄÜÌØÐÔµÄÃèÊö¡£¸ù¾ÝuserµÄ²Ù×÷£¬ÒÔ¼°¹¦ÄÜÄ£¿éµ÷Óùý³Ì£¬Êä³ö¹¦ÄÜ + ÌØÐÔÁбíÎļþ£¬ÓÃÓڼǼ¹¦ÄÜÐèÇ󡣸ù¾Ý¡®¹¦Äܵ÷Óùý³Ìͼ¡¯ÖÐʹÓõŦÄÜÄ£¿é£¬ÂÞÁÐÒ» + ¸ötable½á¹¹µÄÁбíÎļþ¡£²¢¸ù¾Ý¹¦ÄÜÄ£¿éÖ®¼äµÄ¹ØÁª¹Øϵ£¬ÒÔĿ¼½á¹¹±íʾ¹¦ÄÜÄ£¿éÁÐ + ±í¡£ ++ £¡Êý¾ÝÁ÷ͼ(DFD, data-flow-diagram)¡£ + ¸ù¾ÝÈí¼þÓëÍⲿÎïÀíʵÌåµÄÊý¾Ý½»»¥£¬·ÖÎö¼°»æÖÆÊý¾Ý´¦Àí¹ý³Ì¡£ + + ϸ»¯¹¦ÄÜÄ£¿éÖ®¼äµÄµ÷Óùý³Ì£¬ + ++ Êý¾Ý×Öµä(data-dict)¡£DFDÖÐÿ¸öÊý¾ÝÌõÄ¿µÄ¼¯ºÏ¡£ÓÃÓÚE-RͼµÄÊý¾ÝÏî¡£E-RͼÊä³öÊý¾Ý±í¼°Êý¾ÝÄÚÈݵĶ¨Òå¡£ ++ E-Rͼ(ER-diagram)£¬ÊµÌå¶ÔÏóͼ¡£ÓÃÓÚÊä³öÊý¾Ý¿â±í½á¹¹¶¨Òå¡£ + +# deployment ++ °üͼ/×é¼þͼ/²¿Êðͼ£¬ÓÃÓÚ±íʾ²»Í¬level¹æÄ£µÄÈí¼þÄ£¿é¡£×é¼þͼÓÃÓÚ±íʾϵͳ¼¶³ÌÐò + Ì×¼þ£¬²¿ÊðͼÓÃÓÚ±íʾ²»Í¬³ÌÐòÔÚ¶à»ú»·¾³µÄ°²×°²¿Ê𡣶ÔÓÚ°üͼµÄ¹¦ÄÜ£¬ÔÚc/cppÖÐµÄ + Èí¼þ°üÓëjÖеIJ»ÍêÈ«Ïàͬ¡£ ++ ʵ¼ÊÔÚc/cpp¿ª·¢ÖУ¬Êä³öbuild-destÁÐ±í£¬Êä³öinstall-pkgÁÐ±í£¬Êä³ösrc-pkgÁÐ±í£¬ + ÕâЩÁбíÓÃÓÚ¹¦ÄÜÄ£¿éÁбíÎļþµÄtop-levelÉè¼Æ£¬src-pkgµ½exec-pkgµ½build-dest¡£ + һЩsrc-pkgµÄexec-pkg½Ï¶àʱ£¬»ò½«exec-pkg¶ÔÓ¦µÄsrcת»»Îªsub-src-pkg¡£ ++ ¸ù¾ÝÕâЩÁÐ±í£¬top-levelµÄ¡®¹¦ÄÜÄ£¿éÁбíÎļþ¡¯¡£ÔÚcodegenʱ£¬Êä³ösrc-pkg£¬¼°ÆäÄ¿ + ¼·ÖÀ࣬ÒÔ¼°Ò»¸ösrc-pkgÖеÄinstall-pkgºÍbuild-dest¡£ + +# design ++ top-level¹¦ÄÜÄ£¿éÁбíÎļþ + ÓÃÓÚÈí¼þ´úÂ빤³Ì³õʼ»¯Ê±£¬Êä³ö²»Í¬µÄsrc-pkg¡£ ++ ¹¦ÄÜÄ£¿éÁбíÎļþ(function-module-list-file) + ¸ÃÎļþÓÃÓÚcodegenÊä³ö´úÂë¿ò¼Ü£¬ÒÔ¼°²âÊÔÓÃÀý¡£ + ²»Í¬ÓÚ¹¦ÄÜÌØÐÔÁбíµÄÊÇ£¬ÕâÊÇÒ»¸ö³ÌÐò´úÂëÄ£¿éµÄ»®·Ö¡£¶ø¹¦ÄÜÌØÐÔÁбíÊǶԹ¦ÄÜ + ÐèÇ󣬹¦ÄÜÌØÐÔµÄÃèÊö¡£ÔÚ¡®¹¦ÄÜÌØÐÔÁбíÎļþ¡¯ÖУ¬½«Ä£¿éÃû³ÆÌí¼Óµ½¶ÔÓ¦µÄ¹¦ÄÜÌØÐÔÃèÊöÖУ¬Ê¹Á½¸öÁбíÄÚÈÝÉÏ¿Éͬ²½¼°¹ØÁª¡£ + ʹÓÃ.catalogÎļþ±àд£¬ÃèÊöÒ»¸öĿ¼½á¹¹µÄ¹¦ÄÜÄ£¿éÁÐ±í¡£ÔÚcpp³ÌÐòÉè¼Æʱ£¬»¹¿É + ʹÓÃ.umlÀàͼ¡£¸ÃÎļþÓÃÓÚÊä³ö³ÌÐò´úÂë¿ò¼Ü¡£ + Èí¼þ½Ï¸´ÔÓʱ£¬°üº¬¶à¸ö¹¦ÄÜÄ£¿éÁбíÎļþ¡£ + topÎļþ°üº¬µÄÊÇÈí¼þdeploymentÏà¹ØµÄÉè¼ÆÐÅÏ¢¡£Ò»¸ösoftware¶ÔÓ¦Ò»¸ötopÉè¼ÆÎÄ + ¼þ£¬Ò»¸ösoftwareÖаüº¬¶à¸ösrc-pkg£¬Ò»¸ösrc-pkgÖпɰüº¬¶à¸öinstall-pkg£¬Ò»¸ö + install-pkgÖпɰüº¬¶à¸öbuild-dest¡£¸ù¾ÝÈí¼þµÄʵ¼ÊÇé¿ö£¬ÒÔ²»Í¬µÄ½á¹¹×éÖ¯¡£ + Ò»¸öbuild-dest¶ÔÓ¦×ÅÒ»¸ö¶þ½øÖƳÌÐò£¬ÒÔ¼°ÏàÓ¦µÄcatalogÎļþ¡£ + ÕâÀïµÄtop-catalogÎļþÔÚ³õʼ»¯Ô´Â빤³ÌÎļþʱʹÓã¬ÆäËücatalogÎļþcopyµ½¶ÔÓ¦ + src-pkgµÄÖС£ + ¸ù¾Ý¡®¹¦Äܵ÷Óùý³Ìͼ¡¯ÖеÄÄ£¿é£¬Êä³ö¹¦ÄÜÄ£¿éÁÐ±í¡£¸ù¾ÝͼÖеIJÙ×÷Á÷ºÍÊý¾ÝÁ÷£¬ + Êä³öÄ£¿éµÄ½Ó¿Úº¯Êý¼°²ÎÊý£¬Êä³öÄ£¿éÖ®¼äµÄ¹«ÓÃÊý¾Ý£¨Îļþ£¬db-tbl£¬global + variable£©¡£ÕâЩÄÚÈÝÊä³öµ½Ò»¸öcatalogÎļþ£¬µÈͬÓÚÒ»¸ö´øĿ¼½á¹¹µÄÀàͼ¡£ ++ ¹¦ÄÜÄ£¿é½á¹¹Í¼(function-module-struct-diagram)/¼Ü¹¹Í¼£¨architech-diagram£© + ²ã´Î»¯Éè¼ÆµÄ¿òͼ¡£¸ù¾Ý¹¦Äܹý³Ìµ÷ÓÃͼºÍÊý¾ÝÁ÷ͼ¶øµÃ¡£ + ʹÓÃcatalogÎļþÒ²¿É±íʾ¹¦ÄÜÄ£¿éµÄ²ã´Î»¯½á¹¹¡£ ++ Ààͼ(class-diagram) + ¸ù¾Ý¹¦Äܹý³Ìµ÷ÓÃͼºÍÊý¾ÝÁ÷ͼÖеÄÄ£¿é£¬Êä³ö¹¦ÄÜÄ£¿éµÄÀàͼ¡£ÒÔ¼°Êý¾ÝºÍ¹¦Äܵ÷ + ÓùØϵ£¬Êä³ö±äÁ¿ºÍº¯ÊýµÄ¶¨Òå¡£cÓïÑÔ³ÌÐòÉè¼Æʱ£¬Ò²¿ÉʹÓÃcatalogÎļþ´úÌæÀàͼ¡£ + + Óë³ÌÐò¿âÖÐÒÑÓÐÈí¼þÉè¼Æ½á¹¹µÄmatching£¬ÓÃÓÚÊä³öÏàͬµÄÉè¼Æ½á¹¹µÄÉè¼Æ´úÂë¡£ + +# design£¨opt£© ++ ³ÌÐòÃüÁîÐвÎÊýÉè¼ÆÎļþ(cmd-args-design)¡£ ++ ³ÌÐòÔËÐвÎÊýÉè¼ÆÎļþ(running-param-design)¡£ ++ txtÎı¾Êý¾ÝµÄ´Ê·¨/Óï·¨¸ñʽ¶¨ÒåÎļþ(.lex/.gmr)£¬ÓÃÓÚÎļþ»òͨÐÅЭÒé¸ñʽÃèÊö¡£ ++ hex¶þ½øÖÆÊý¾ÝµÄ½á¹¹»¯¸ñʽ¶¨ÒåÎļþ¡£Ê¹ÓÃhexfmt(.type)£¬ÓÃÓÚÎļþ»òͨÐÅЭÒé¸ñʽ + ÃèÊö¡£ ++ ͨÐÅЭÒéµÄtime-sequenceͼ¡£ ++ UIÈË»ú½»»¥½çÃæµÄÉè¼ÆÎļþ(.ui)¡£Ê¹ÓÃscript»òRAD¿ª·¢Èí¼þ½øÐнçÃæÉè¼ÆºÍÏÔʾ¡£ ++ ÊäÈëÊä³öÐźÅ/Êý¾ÝµÄtime-sequenceͼ¡£ ++ Óû§Êý¾ÝÊý¾ÝÎļþ¡£E-Rͼ£¬tbl½á¹¹¡£ + +# implement ++ Èí¼þ°ü¹¤³ÌĿ¼´´½¨£¬²¢±àдGNUÈí¼þ°üÏà¹ØµÄÎļþ¡£ ++ code-gen¸ù¾Ý.catalog»ò.umlÀàͼ´´½¨´úÂë¿ò¼Ü¡£ ++ ¸ù¾Ý¿ª·¢Ï°¹ßºÍÐèÒª£¬Ê¹ÓÃRADÈí¼þ¿ª·¢demo¡£ ++ ¹¦ÄÜÄ£¿éunitµÄ²âÊÔÓÃÀý¡¢±àÂë¡¢²âÊÔ¿ª·¢¡£ ++ ¹¦ÄÜÄ£¿é¼¯³ÉµÄ±àÂë¡¢²âÊÔ¡£ ++ Èí¼þÄڲ⡢¹«²â¡£ ++ doc£¬tutorial£¬webdoc¡£ ++ °æ±¾ÉèÖã¬src-pkgºÍexe-pkgµÄÖÆ×÷¡£ + +# publish ++ pkgÔÚrepoµÄsync¡£ ++ ÏÂÔØ£¬±àÒ룬loop-back²âÊÔ¡£ ++ webdocµÄpublish¡£ + + + +# different scale of developing +================================ + + most of the src-pkg is developed by one developer, and others provide +ideas, suggestion, bug-report, bug-fix-patch, maybe write a part of code. all actor is the same peron, the author/maintainer of the src-pkg. + if the soft-pkg is complex, it need many developer work together for +developing. the actor fills with an actual person. all developer cooperate to +develop the soft-pkg. + if the software is an system, such as operating system, the software is +consisted by various src-pkgs. + + the example of different scale software. + +@ linux operating system. not the linux kernel, it is consisted by lots of pkgs + with different function feature. +@ linux kernel. it's a complex software, but all it is in one src-pkg. +@ putty terminal program. it's an example of general application programs with + GUI. it consisted by some of src-pkg. +@ libxml2. it's a src-pkg with lib and executables. libc is a well known lib + for this type of src-pkg. +@ sed. it's a classic program, and only one utility program with docs. + + +# traditional design +==================== + +function feature list +levelized architecture diagram +program module list +attr & method in a module + + + +# compact design +================ + + the meaning of the design work is for auto-sync between design and src-code, +and the same processing method. + + + +# SE design +=========== + + the meaning of this design work is providing a method how to generate design +files for code generation. + + + +# classic app feature design +============================ + + it's a topic of program style in charpter of 'prog-style'. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# develop flow +============== + +¹¤×÷Á÷ͼ£ºÊý¾ÝÁ÷ͼ£¬action-data-flow-diagram/flow-diagram¡£ + + + +@ ¶ÔÓÚÏêϸÉè¼Æ£¬Îĵµ²»Èç´úÂë±¾ÉíÖ±¹Û¡£Ö»¶Ô²¿·Ö¿ò¼ÜÐԵŦÄÜ£¬»ò½Ï¸´ÔÓÐèҪͼ±íÉè¼ÆµÄ¹¦ÄÜ£¬Êä³öÉè¼ÆÎļþ¡£¹ýÓÚϸÖµÄÉè¼ÆÎĵµ£¬ÔÚ³ÌÐò´úÂëÐÞ¸Äʱ£¬²»Ò×±»Í¬²½µ½Éè¼ÆÎļþ¡£ + + + + + + + + + + + + + + + + + + + + + + + + + +@ pkg-builderÈí¼þά»¤µÄ¿ª·¢Á÷³Ì +# ¸ù¾ÝTODOÖеÄδÌí¼ÓµÄ¹¦ÄܽøÐдúÂëʵÏÖ¡£ +# ¸ù¾ÝÓʼþ»ògitµÄissueÖеÄbug-report»òsuggest½øÐдúÂëÐ޸ġ£½«bug-report»òissueÌí¼Óµ½tag-docµÄbug-listÖС£ +@ ±àÂë¡¢²âÊÔ¡¢³ÌÐòcommitµÄÑ­»·£¬Ö±µ½¹¦ÄÜÍê³É£¬»òbugÐÞ¸´¡£ +@ loopback testing£¬ÕûÌåµÄ¹¦ÄܲâÊÔ¡£ +@ °æ±¾¸üУ¬·¢²¼£¬Îĵµ¸üС£ + + +@ pkg-builder¿ª·¢¸¨Öú¹¦ÄÜ +# +# +# µ¥´Êƴд¼ì²â +# * ´úÂë±à¼­Æ÷µÄcode-hint¡£idutils¹¹½¨´úÂë·ûºÅ¿â£¬²¢¸ù¾Ý±à¼­Èí¼þµÄÊäÈëË÷Òý·ûºÅÁÐ±í¡£ +# ÓÃÓڽű¾³ÌÐò/cÓïÑÔ³ÌÐò£¬³ÌÐò²ÎÊý´¦Àí´úÂë +# +# code-compare£ºdiff¹¤¾ß¡£ +# func-call-trace£ºº¯Êýµ÷ÓÃͼ£¬call-trace¡£cflow(call-graph)£¬global(src-tag-prog) +# code-symbol-tag-index/code-hint/code-jump£ºÓÃÓÚij¸ö·ûºÅ¶¨ÒåµÄ²éÕÒ£¬ÒÔ¼°´úÂëÌáʾ¡£McCabe/pmccabe/complexity/mifuz£¬ +# code-highlight£ºSrc-highlight£¬ +# code-fmt£º´úÂë¸ñʽ»¯³ÌÐò¡£[@]gengen/indent(´úÂë¸ñʽÕûÀí)£¬cproto£¬ +# code-args-autogen£º[@]gengetopt£¬ +# code-gen£º¹¤¾ßcatalogµÄ³ÌÐòÄ£¿éÉè¼Æ¿ò¼ÜÊä³ö´úÂë¿ò¼Ü¡£ + + + +# soft-pkgs +=========== + +@ pkg-builderÓõ½µÄ¿ª·¢Èí¼þ +# build-pkg£¬Èí¼þ°üµÄÔ´Âë±àÒ빤¾ß¡£ +# bulid-config£¬Èí¼þ°üµÄ¹¦ÄÜÅäÖù¤¾ß¡£ +# build-pkglist£¬ +# shlib£¬devutilsÖеijÌÐòʹÓõĽű¾³ÌÐò¿â¡£ +# devutils£¬¿ª·¢ÖÐʹÓõÄһЩ½Å±¾³ÌÐò¡£ +# CCompiler£¬Ò»¸öc/c++µÄ±àÒëÆ÷¡£Í¨³£ÊÇij¸ö°æ±¾µÄgcc³ÌÐò¡£gccµÄһЩÓï·¨ÌØÐÔ²¢²»ÊÇËùÓгÌÐòÉè¼ÆÖж¼ÐèÒªµÄ£¬¾¡Á¿Ê¹Óù̶¨µÄ±àÒëÆ÷³ÌÐò¼° +°æ±¾£¬Ê¹³ÌÐòµÄ±àÒë»·¾³¸üͳһ¡£³ÌÐòµÄµ÷ÊÔʹÓûùÓÚµ÷ÊÔÐÅÏ¢µÄ²å×®µ÷ÊÔ·¨£¬Í¨³£²»Ê¹ÓÃgdbÖ®ÀàµÄÈí¼þ¡£ +# gconv£¬gprof£¬systemtap£¬´úÂ븲¸ÇÂʲâÊÔ³ÌÐò£¬ÓÃÓÚ´úÂëÓÅ»¯¡£ +# doxygen£¬´úÂëÎĵµÊä³ö³ÌÐò£¨ÊÇ·ñʹÓÃshell½Å±¾±àд£¿£©¡£ +# ttyrec£¬ÖÕ¶ËÃüÁîÐмǼ³ÌÐò£¬ÓÃÓÚÃüÁîÐеijÌÐòʹÓÃÑÝʾ¡£ +# texinfo£¬groff£¬Èí¼þµÄmanÎĵµÊä³ö³ÌÐò¡£ +# cflow£¬´úÂëµÄcall-trace³ÌÐò¡£ +# *RCCS£¬»ùÓÚ±¾»úÎļþÐÅÏ¢µÄ´úÂë°æ±¾¹ÜÀíÈí¼þ¡£ +# mailutil£¬Ê¹ÓÃÓʼþ¿Í»§¶Ëä¯ÀÀbug-report¡£ +# git´úÂëÍйÜÍøÕ¾µÄ¿Õ¼äÉêÇë¡£ +# webpages¿Õ¼äÉêÇë¡£»òÈí¼þ°ühosting¡£ + + + + + + + + + + +@ ÊÊÓÃÁ½ÖÖ¿ª·¢Ì×¼þ +# pkg-builder¡£Ò»¸ö´¿shell½Å±¾¹¹½¨µÄ¹¤³Ì×éÖ¯¡¢±àÒ빤¾ß£¬Ó봫ͳµÄlinuxÈí¼þ°ü±È½ÏÏà½ü¡£ +# soft-designer¡£Ò»¸ö»ùÓÚͼÐλ¯¹¤¾ßÈí¼þµÄÖÇÄÜ¿ª·¢Ì×¼þ£¬¹¤³ÌµÄ±àÒë»ùÓÚpkg-builder¡£ + +¡¾pkg-builder¡¿ +@ ÊÊÓÃÓÚ»ùÓÚÃüÁîÐÐ×Ö·û½çÃæµÄ³ÌÐò¿ª·¢¡¢±àÒë¡£ + +@ pkg-builderÓõ½µÄ¿ª·¢Èí¼þ +# build-pkg£¬Èí¼þ°üµÄÔ´Âë±àÒ빤¾ß¡£ +# bulid-config£¬Èí¼þ°üµÄ¹¦ÄÜÅäÖù¤¾ß¡£ +# build-pkglist£¬ +# shlib£¬devutilsÖеijÌÐòʹÓõĽű¾³ÌÐò¿â¡£ +# devutils£¬¿ª·¢ÖÐʹÓõÄһЩ½Å±¾³ÌÐò¡£ +# CCompiler£¬Ò»¸öc/c++µÄ±àÒëÆ÷¡£Í¨³£ÊÇij¸ö°æ±¾µÄgcc³ÌÐò¡£gccµÄһЩÓï·¨ÌØÐÔ²¢²»ÊÇËùÓгÌÐòÉè¼ÆÖж¼ÐèÒªµÄ£¬¾¡Á¿Ê¹Óù̶¨µÄ±àÒëÆ÷³ÌÐò¼° +°æ±¾£¬Ê¹³ÌÐòµÄ±àÒë»·¾³¸üͳһ¡£³ÌÐòµÄµ÷ÊÔʹÓûùÓÚµ÷ÊÔÐÅÏ¢µÄ²å×®µ÷ÊÔ·¨£¬Í¨³£²»Ê¹ÓÃgdbÖ®ÀàµÄÈí¼þ¡£ +# gconv£¬gprof£¬systemtap£¬´úÂ븲¸ÇÂʲâÊÔ³ÌÐò£¬ÓÃÓÚ´úÂëÓÅ»¯¡£ +# doxygen£¬´úÂëÎĵµÊä³ö³ÌÐò£¨ÊÇ·ñʹÓÃshell½Å±¾±àд£¿£©¡£ +# ttyrec£¬ÖÕ¶ËÃüÁîÐмǼ³ÌÐò£¬ÓÃÓÚÃüÁîÐеijÌÐòʹÓÃÑÝʾ¡£ +# texinfo£¬groff£¬Èí¼þµÄmanÎĵµÊä³ö³ÌÐò¡£ +# cflow£¬´úÂëµÄcall-trace³ÌÐò¡£ +# *RCCS£¬»ùÓÚ±¾»úÎļþÐÅÏ¢µÄ´úÂë°æ±¾¹ÜÀíÈí¼þ¡£ +# mailutil£¬Ê¹ÓÃÓʼþ¿Í»§¶Ëä¯ÀÀbug-report¡£ +# git´úÂëÍйÜÍøÕ¾µÄ¿Õ¼äÉêÇë¡£ +# webpages¿Õ¼äÉêÇë¡£»òÈí¼þ°ühosting¡£ + + +@ pkg-builder¿ª·¢Á÷³Ì£º +# tag-doc¼Ç¼һ¸ö³ÌÐò¹¦ÄÜ»òieadµÈÁãÉ¢µÄÎÄ×Ö¡£ +# ÔÚtag-docÖÐÕûÀí¹¦ÄÜÐèÇó¡£ +# ³ÌÐò´óֵŦÄÜÄ£¿é£¬´úÂë¿ò¼Ü£¬±àд²¢±£´æµ½code.catalogÖС£ +# ʹÓÃcodegen£¬¸ù¾Ýcode.catalogµÄ³ÌÐò¹¦ÄÜÄ£¿é¿ò¼Ü£¬Êä³öÈí¼þ°üsrcĿ¼ÏµĴúÂë¿ò¼Ü£¬²¢±àÒ룬Ð޸ıàÒë´íÎó£¬Êä³öÒ»¸öexecutable³ÌÐò¡£ +# ³ÌÐò½øÐÐÄ£¿é»¯Éè¼Æ£¬ ++ µ¥¸ö¹¦ÄÜÄ£¿é½øÐбàÂë¡£¿ÉÒÔËùÓдúÂë±àдºóµ¥Ôª²âÊÔ£¬»ò²¿·Ö´úÂë±àдºó½øÐÐijһ¸öº¯ÊýµÄ¹¦ÄܲâÊÔ¡£ ++ µ¥Ôª²âÊÔ¡£Ê¹ÓÃcunit»òscripttest½øÐй¦ÄÜÄ£¿éµÄµ¥Ôª²âÊÔ¡£ ++ ³ÌÐòÐ޸ġ£ +# ³ÌÐò´úÂëÄ£¿é±àд֮ºóµÄ¼¯³É²âÊÔ¡£ +# ¸ù¾ÝÐèÒª£¬½øÐÐÐÔÄܲâÊÔ£¬Ê¹ÓÃÄÚ´æй¶²âÊÔÈí¼þ²âÊÔÄÚ´æʹÓÃÂʼ°ÄÚ´æй¶£¬Ê¹ÓÃgconv²âÊÔÔËÐÐʱµÄ´úÂ븲¸ÇÂÊ·ÖÎöº¯ÊýʹÓÃƵÂÊ£¬ÔÙ½øÐдúÂë +ÓÅ»¯¡£ +# ¸ù¾ÝÐèÒª£¬½øÐгÌÐòµÄi18n¶àÓïÑÔÖ§³Ö¡£ +# µÚÒ»¸ö°æ±¾µÄðÑ̲âÊÔ£¬ÒÔ¼°bug-report¡¢bug-fix¡¢re-testing¡£ +# doc£ºhelper-doc¡¢dev-api-doc¡¢tutorial/animation¡¢example +# Ô´´úÂë¡¢¶þ½øÖƳÌÐò¡¢×ÊÔ´ÎļþµÈ´ò°ü·¢²¼£¬Îĵµ£¨changelog¡¢manual£©¸üе½webpages¡£ + +@ pkg-builderÈí¼þά»¤µÄ¿ª·¢Á÷³Ì +# ¸ù¾ÝTODOÖеÄδÌí¼ÓµÄ¹¦ÄܽøÐдúÂëʵÏÖ¡£ +# ¸ù¾ÝÓʼþ»ògitµÄissueÖеÄbug-report»òsuggest½øÐдúÂëÐ޸ġ£½«bug-report»òissueÌí¼Óµ½tag-docµÄbug-listÖС£ +@ ±àÂë¡¢²âÊÔ¡¢³ÌÐòcommitµÄÑ­»·£¬Ö±µ½¹¦ÄÜÍê³É£¬»òbugÐÞ¸´¡£ +@ loopback testing£¬ÕûÌåµÄ¹¦ÄܲâÊÔ¡£ +@ °æ±¾¸üУ¬·¢²¼£¬Îĵµ¸üС£ + + +@ pkg-builder¿ª·¢¸¨Öú¹¦ÄÜ +# +# +# µ¥´Êƴд¼ì²â +# * ´úÂë±à¼­Æ÷µÄcode-hint¡£idutils¹¹½¨´úÂë·ûºÅ¿â£¬²¢¸ù¾Ý±à¼­Èí¼þµÄÊäÈëË÷Òý·ûºÅÁÐ±í¡£ +# ÓÃÓڽű¾³ÌÐò/cÓïÑÔ³ÌÐò£¬³ÌÐò²ÎÊý´¦Àí´úÂë +# +# code-compare£ºdiff¹¤¾ß¡£ +# func-call-trace£ºº¯Êýµ÷ÓÃͼ£¬call-trace¡£cflow(call-graph)£¬global(src-tag-prog) +# code-symbol-tag-index/code-hint/code-jump£ºÓÃÓÚij¸ö·ûºÅ¶¨ÒåµÄ²éÕÒ£¬ÒÔ¼°´úÂëÌáʾ¡£McCabe/pmccabe/complexity/mifuz£¬ +# code-highlight£ºSrc-highlight£¬ +# code-fmt£º´úÂë¸ñʽ»¯³ÌÐò¡£[@]gengen/indent(´úÂë¸ñʽÕûÀí)£¬cproto£¬ +# code-args-autogen£º[@]gengetopt£¬ +# code-gen£º¹¤¾ßcatalogµÄ³ÌÐòÄ£¿éÉè¼Æ¿ò¼ÜÊä³ö´úÂë¿ò¼Ü¡£ + + + +¡¾soft-designer¡¿ +@ ³ÌÐò¿ª·¢Á÷³Ì£º +# һЩpkg-builderÖеĿª·¢Èí¼þ£¬ÔÚsoft-designerÖÐʹÓÃͼÐλ¯Éè¼Æ³ÌÐò£¬µ«¹¦ÄܲÙ×÷ÓÃ;ÊÇÀàËƵġ£ +# ¸ÅÄî¡¢Ô­ÐÍ¡£ +# ÐèÇóºÍ¹¦ÄÜ£¬Ê¹ÓÃtagdocÕª¼Ç£ºideas/tips¡¢¹¦ÄÜÐèÇóÁÐ±í¡¢¹¦ÄÜÄ£¿éÁÐ±í¡¢todolist¡¢buglistµÈÎÄ×ÖÐÅÏ¢¡£ +# design£¬Ê¹ÓÃsoft-designer£¬ÒÔÀàumlµÄͼ±í»¯µÄÉè¼Æ£¬½«ÐèÇóºÍ¹¦ÄÜÒÔÉè¼Æͼ±í±íʾ(ÀàËÆÓÚһЩRAD¿ª·¢Èí¼þ)£¬²¢¿ÉʹÓÃsoft-designerÊä³ö +¸üе½src-code¡£ +# coding£¬ +# testing£¬Ê¹ÓÃc unit¡¢cppunit½øÐе¥Ôª²âÊÔ£¬Ê¹ÓÃshunit2»òscripttest½øÐÐsh½Å±¾µÄµ¥Ôª²âÊÔ£¬Ê¹ÓÃscripttest¡¢testcase¡¢testcaselib +½øÐм¯³É²âÊÔ¡£ +# bugfix£¬ +# code-mngr£¬gitµÄ´úÂë°æ±¾¹ÜÀí£¬ÒÔ¼°pkg-builderÖлùÓÚrcsµÄlocal´úÂë°æ±¾¹ÜÀíÈí¼þ¡£ +# ¼¯³É²âÊÔ +# design-develop-testing-bugfix-commit-loop +# doc£ºhelper-doc¡¢dev-api-doc¡¢tutorial/animation¡¢example +# alpha²âÊÔ +# belta²âÊÔ +# publish£¬src-tarball£¬pkg-tarball£¬°æ±¾¹ÜÀíµÈ¹¦ÄÜ¡£Ê¹ÓÃdev-utilsÖеijÌÐò£¬ÒÔpkg-builderµÄÃüÁîÐнӿڽøÐÐʹÓᣠ+# new-feature£¬design-develop-testing-bugfix-commit-loop +# bug-mngr£¬Ê¹ÓÃbuggzilla½øÐÐbug¹ÜÀí¡£×¢Ò⣬devµÄbug-mngrºÍÓû§³ÌÐòÔËÐÐÖеÄbug-mngr²»Í¬ +# bugfix£¬ +# publish£¬ + + +@ ʹÓÃpkg-builderµÄdev-flow +# ÔÚÒ»¸ö³ÌÐò»òÈí¼þ¿ª·¢Ö®³õ£¬ÊÇһЩ¶Ô³ÌÐò¹¦ÄܵĴóÌåµÄÃèÊö£¬ÒÔtagdoc¼Ç¼ÕâЩÐÅÏ¢¡£ +# ¸ù¾Ý³ÌÐò¹¦ÄܼǼµÄÎÄ×Ö£¬¼Ç¼»òÕûÀí³ö³ÌÐòµÄfeature-list¡£ +# ¸ù¾Ý³ÌÐòµÄÀàÐÍ£¬Ñ¡Ôñ²»Í¬µÄÄ£ÐͺͿò¼Ü£¬ÒÔ¼°¹¦ÄÜÄ£¿éºÍ³ÌÐòÄ£°å¡£ +# ¸ù¾Ý³ÌÐòµÄfeature-list£¬ÔÚcatalogÎļþÖÐÒÔĿ¼½á¹¹±àд³ÌÐòµÄÄ£¿é½á¹¹¡£ +# ¶ÔcatalogÎļþÖеÄÄ£¿é½Ó¿ÚµÄ±äÁ¿¡¢º¯Êý½øÐж¨Òå¡£ +# ¸ù¾ÝcatalogÎļþ¶¨ÒåµÄÄ£¿éºÍÄ£¿é¶¨Ò壬Êä³öÄ£¿é¶ÔÓ¦µÄimiÅäÖÃÎļþ£¬°üÀ¨±äÁ¿¡¢º¯ÊýµÄ×¢ÊÍÐÅÏ¢µÄ¶¨Òå¡£ +# ʹÓÃcode-tmpl±à¼­¡¢Ìí¼Ó±äÁ¿¡¢º¯ÊýµÄ×¢ÊÍÐÅÏ¢¡£ +# ʹÓÃcode-gen£¬¸ù¾ÝcatalogÎļþºÍimiÎļþ£¬ÒÔ¼°code-gen¶¨ÒåµÄ³ÌÐòÄ£°åÎļþ£¬Êä³ö³ÌÐòĿ¼½á¹¹ºÍÔ´´úÂëÎļþ£¬ÓÃÓÚ³ÌÐòµÄ±àдºÍ±àÒë¡£ +# ³ÌÐò±àд£¬ÐÂÌí¼ÓµÄ½Ó¿Úº¯Êý»ò±äÁ¿£¬Ê¹ÓÃsyncͬ²½¹¦ÄÜͬ²½¸üе½catalogºÍimiÎļþ¡£ +# ʹÓÃcatalogÎļþ±àдtestcase½á¹¹Ä¿Â¼£¬²¢Êä³ötestcaseĿ¼½á¹¹µÄ½Å±¾ÎļþĿ¼£¬ÓÃÓÚ±àд²âÊԽű¾³ÌÐò½øÐвâÊÔ¡£ +# catalogÎļþºÍimiÎļþÓësoft-designerµÄÉè¼Æͼ֮¼äµÄת»»ºÍͬ²½¸üС£ + + + +[member&role] +@ +# soft-rule-maintainer£¬wrting doc for soft design rules£¬workflow£¬templete of doc & code£¬ +# pkg maintainer£¬soft-dev maintainer£¬check things accroding workflow£¬web page update£¬soft-pkg publish and event update£¬mailing-list-category£¬update doc of change-log/news/readme/authors£¬bug-fix job assignment¡£some work could use script to do those work¡£ +# tech maintainer£¬tech design£¬function feature list maintainer +# coder£¬tester£¬write code for feature implement£¬and write testing-case£¬fix-bug¡£ +# user-tester£¬download src pkg£¬compile pkg£¬install on different platform£¬run testing-case£¬simply using£¬ +# bug-reporter£¬report bug£¬provide testing-case or program dump£¬or descript text for enviroument¡£ +# doc-checker£¬generate doc£¬read it on words expression£¬errors£¬translate to multi lang if needed. + + + +[analyzer-model] +@ typical-model + µäÐÍ»¯/ͨÓû¯µÄÀàÐͺͿ⡣һЩÊäÈë¡¢Êä³ö¡¢´¦ÀíÊý¾ÝÀàÐͺͳÌÐòÄ£¿éµäÐÍ»¯£¬×é¼þ»¯£¬²¢ÒÔarch×éÖ¯¡£ +@ IPO-model + ÊäÈë¡¢´¦Àí¡¢Êä³öµÄÄ£ÐͽøÐзÖÎö£¬¶ÔÊäÈëµÄ¶ÔÏó/Êý¾ÝÀàÐÍ¡¢Êä³öµÄ¶ÔÏó/Êý¾ÝÀàÐÍ¡¢´¦Àí³ÌÐò´¦ÀíµÄÄÚÈÝ£¬½øÐзÖÎö¡£¶Ô¶ÔÏó¡¢Êý¾ÝÀàÐÍ¡¢³ÌÐò¿â½øÐÐÀàÐÍÆ¥Å䣬ÔÚcompolibÖоßÓеģ¬Ê¹ÓÃcompolibÖеģ¬²»Í¬µÄ£¬ÔÙÒÔIPOÄ£ÐÍ·ÖÎö£¬ÖªµÀ´úÂë¿ÉʹÓÃcompolibÖеÄÀàÐͺͿ⡣ +@ MVC-model + һЩӦÓó¡ºÏÓеäÐ͵ijÌÐò´¦Àí·½·¨£¬½«ÕâЩ·½·¨Ä£ÐÍ»¯£¬²¢ÒÔmvcµÄ½á¹¹Éè¼Æij¸ö¹¦ÄÜÄ£¿é¡£ +@ + + + + +[soft-designer-step] +@ ´Ódemondµ½design£¬Ê¹ÓÃanalyzer-model½øÐзÖÎö£¬Êä³öÓÃÀýͼ£¬Êý¾ÝÁ÷ͼ£¬ºÍÔËÐÐ˳Ðòͼ¡£ +@ demondÏà¹ØµÄͼ±í£¬°üÀ¨ÓÃÀýͼ¡¢Êý¾ÝÁ÷ͼ¡¢ÔËÐÐ˳Ðòͼ£¬ÕûºÏÊä³öµ½"³ÌÐò¹¦ÄÜͼ"¡£ +@ ³ÌÐò¹¦ÄÜͼ£¬³ÌÐòÉè¼Æ½á¹¹Í¼£¬³ÌÐòÄ£¿éÉè¼Æͼ£¬Êä³öÄ£¿éÉè¼Æͼ(Ààͼ+ÀàʵÀýͼ/catalog+imi)£¬ERͼ£¬UI-designer£¬ +@ Èí¼þµÄdesignʹÓóÌÐòÉè¼Æ½á¹¹Í¼(³ÌÐò¹¦ÄÜͼ)£¬Ê¹ÓÃtype¡¢compoºÍarchµÄlib¿â£¬ÒÔ¼°LinuxAppDevKitLibºÍbzbox£¬½øÐÐÈí¼þ¹¦ÄܵĿª·¢Éè¼Æ¡£ +@ ×é¼þÄ£¿éÉè¼Æͼ(µ¥¸öÄ£¿é/×é¼þµÄÉè¼Æ¿òͼ£¬ÀàËÆÓÚµ¥¸öÔªÆ÷¼þͼ) +@ ´Ódesignµ½code£¬Ê¹ÓÃcode-genÊä³ö´úÂë½á¹¹¡£ +@ + + + + + +@ compile-flow +# .xml => .list +# .list <=> .xml +# .xml => .c/.m +# .list => .c/.m +# .c => .o +# .o + .m => .o +# .o => .a/.la +# .a/.la => ko/so/dll/exe/elf +# ko/so/dll/exe/elf/.a/.la/.o => .bin/.hex +# files => pkg + + + + + + + + + diff --git a/devspec.en_US/2.3.develop-management.txt b/devspec.en_US/2.3.develop-management.txt new file mode 100755 index 0000000..683087e --- /dev/null +++ b/devspec.en_US/2.3.develop-management.txt @@ -0,0 +1,143 @@ + + + + +# design feature list +===================== + +# task +====== + +# cooperation +============= + +# dev step trace +================ + + + + + + + + + + + +# introduce +=========== + + + +# method +======== + + files: + +@ todo: the maintainer of a src-pkg write the new feature list. if the feature + would be append in plan, put it in active-queue in the doc, under a version + id to be published. one version of tech-task will be append to 'todolist', + when the todolist is empty. it will append task beyound tech-task, such as + design-procedure, testing-procedure, document-procedure, publish-procedure, + to architect a full flow of new feature dev. +@ todolist: tasks to be done for a version. it comes from task set for one + version in 'todo' file. developer use 'devtask list' to see the work they + can do, and use 'devtask get ' to put it into 'worktasks.tmp'. +@ worktasks.tmp: task to be done for a developer in one copy of src-pkg dir. + task-id comes from todolist. it's the todolist for developer. +@ features: full feature list for the software. +@ changelogs: news history log. +@ news: changes between last version. + + +note.tdr: note for new ideas, improvement, bug-report, suggest issue, and any + thing others about the src-pkg. +todo: the feature plan to do in different future version. develop task will get + features in one version, put it into todolist until done, and get the feature + in next version, until all of them are done. + this file is a .catalog file, all features orgnized with category. there + are two queue in the file, one is active-queue, the other is inactive-queue. + the queue of inactive-queue is saved with features which is not needed to be + implemented now. the features in active-queue would be implemented in plan. + code for appending new features in 'todo' file is forked in new branch. + when a version of features is done, modification in main version since it was + forked will be combined into new branch. combine new branch code into main + version when loop-back testing is ok. +bugs: it record the bug reported and re-tested. it also have two queues to be + done like todo file. code for bug-fixing is the main version code. +todolist: the features & bug-fix in the queue of plan. one feature enable one + develop task for new feature. when all tasks in it are implemented, testing + and document, then publish as a new version. +feature-list: the feature has been implemented. +changelog: feature and bug-fix list in different version. +new: the feature & bug-fix different from last ver. + + + +# utility program +================= + +@ devtask append + it open the text content in tagdoc, and translate note text into a feature +message with short-name, version id, activity state. + +@ devtask list + task-type can be 'analysis', 'design', 'dev', 'doc', 'tran', 'test', + +@ devtask get + task id is a random hex-number, or a short name without blanks. + when this cmd invoked, it put the corresponding task-id into the file +'worktasks.tmp'. + + task conflection. one developer implement a task, and the other is do this +work too, when the code is commited, the local file of todolist is conflected +with the one on the server. + before 'devtask get ', it check email info, and there are no one +hold the task, and send an email to developer list to nodify others to hold +this task, then do the next operation. it's a simple method to solve task +conflection, but not very well. + before 'devtask submit ', it pull file of 'todolist', check if +the task is completed by any others. then send the email of task done, at last, +it commit files to code repo. + normally, before get the task, others will check email info, and could not +get the task. if others receive the email and seen, also would not to get the +task in 'todolist'. although, email is not a real time response method, but +humen operation is also not a real time operation in short times. + + another method is public lock file in code repo. try to pull lock file +instead of resolve email info. but also send email to others for text info +nodification. + +@ devtask submit + it get the task-id in worktasks.tmp, and delete it in the file. it get the +task in todolist, copy the content to 'news' and 'changelogs' if it is a +feature or a bug-fix task. then, delete it in 'todolist'. + +@ devtask launch [task-id-ver] + if there is no paramter after 'launch', it list the task in 'todo'. launch +the task by name of task id and task version. it put tasks into 'todolist'. + +@ devtask launchback [task-id-ver] + put the task info in 'todolist' back to file of 'todo'. normally, the work +in 'todolist' have not been taken by others. + +@ devtask suspend [task-id-ver] + suspend task, put save 'todolist' as 'todolist-.suspend'. + if no name specified, the default operation is the current 'task-id-ver'. + +@ devtask resume + resume task if current 'dotolist' is empty. or type 'devtask suspend' +first. + +@ devtask + when the feature is not plan to be developed, but it has been append to +'todolist'. + +########## + files '.tagdoc' 'todo' 'todolist' 'worktasks.tmp' is used to implement a +type of work-task-distribution from demond text doc to feature list analysis, +to actual work tasks. + those work above can be done without the util program of devtask. but the +developers will have the same conception of task distribute and cooperation. + + diff --git a/devspec.en_US/file b/devspec.en_US/2.4.example-sed.txt old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/2.4.example-sed.txt diff --git a/devspec.en_US/2.5.example-recutils.txt b/devspec.en_US/2.5.example-recutils.txt new file mode 100755 index 0000000..d3284c6 --- /dev/null +++ b/devspec.en_US/2.5.example-recutils.txt @@ -0,0 +1,527 @@ + + +@ dest file list is consisted by: +# dest executables +# test executables +# middle libs + + +# getting DEST_LIST + +$ sudo apt-cache depends recutils +recutils + Depends: libc6 + Depends: libmdb2 + Depends: libreadline6 + Depends: librec1 +$ dpkg -L libmdb2 +/. +/usr +/usr/share +/usr/share/doc +/usr/share/doc/libmdb2 +/usr/share/doc/libmdb2/copyright +/usr/share/doc/libmdb2/changelog.Debian.gz +/usr/lib +/usr/lib/i386-linux-gnu +/usr/lib/i386-linux-gnu/libmdb.so.2.0.1 +/usr/lib/i386-linux-gnu/libmdb.so.2 +$ dpkg -L librec1 +/. +/usr +/usr/lib +/usr/lib/librec.so.1.0.0 +/usr/share +/usr/share/doc +/usr/share/doc/librec1 +/usr/share/doc/librec1/copyright +/usr/share/doc/librec1/changelog.Debian.gz +/usr/lib/librec.so.1 +$ dpkg -L recutils +/. +/usr +/usr/lib +/usr/lib/recutils +/usr/lib/recutils/bash-builtins +/usr/lib/recutils/bash-builtins/readrec.so +/usr/bin +/usr/bin/recfix +/usr/bin/recinf +/usr/bin/csv2rec +/usr/bin/recset +/usr/bin/mdb2rec +/usr/bin/recfmt +/usr/bin/recsel +/usr/bin/recins +/usr/bin/recdel +/usr/bin/rec2csv +/usr/share +/usr/share/doc +/usr/share/doc/recutils +/usr/share/doc/recutils/README +/usr/share/doc/recutils/examples +/usr/share/doc/recutils/examples/bash-builtins +/usr/share/doc/recutils/examples/bash-builtins/readrec.sh +/usr/share/doc/recutils/examples/movie-database +/usr/share/doc/recutils/examples/movie-database/group_movies_by_audio.sh +/usr/share/doc/recutils/examples/movie-database/show_movies_german.sh +/usr/share/doc/recutils/examples/movie-database/README +/usr/share/doc/recutils/examples/movie-database/group_movies_by_media.sh +/usr/share/doc/recutils/examples/movie-database/count_movies.sh +/usr/share/doc/recutils/examples/movie-database/show_movies_unseen_german.sh +/usr/share/doc/recutils/examples/movie-database/show_movies_unseen.sh +/usr/share/doc/recutils/examples/movie-database/movies.csv +/usr/share/doc/recutils/examples/movie-database/show_oldest_and_latest_moviedate.sh +/usr/share/doc/recutils/examples/movie-database/count_movies_german.sh +/usr/share/doc/recutils/examples/movie-database/movies.rec +/usr/share/doc/recutils/examples/movie-database/show_movies_with_more_than_2_discs.sh +/usr/share/doc/recutils/examples/movie-database/convert_csv_to_rec.sh +/usr/share/doc/recutils/examples/passwords +/usr/share/doc/recutils/examples/passwords/show-passwords.sh +/usr/share/doc/recutils/examples/passwords/passwords.rec +/usr/share/doc/recutils/examples/passwords/check-encryption.sh +/usr/share/doc/recutils/examples/passwords/show-encrypted-passwords.sh +/usr/share/doc/recutils/examples/tool-database +/usr/share/doc/recutils/examples/tool-database/tools.rec +/usr/share/doc/recutils/examples/tool-database/README +/usr/share/doc/recutils/examples/tool-database/to-purchase.sh +/usr/share/doc/recutils/NEWS.gz +/usr/share/doc/recutils/README.Debian +/usr/share/doc/recutils/copyright +/usr/share/emacs +/usr/share/emacs/site-lisp +/usr/share/emacs/site-lisp/rec-mode.el +/usr/share/emacs/site-lisp/ob-rec.el +/usr/share/man +/usr/share/man/man1 +/usr/share/man/man1/recsel.1.gz +/usr/share/man/man1/mdb2rec.1.gz +/usr/share/man/man1/recset.1.gz +/usr/share/man/man1/recinf.1.gz +/usr/share/man/man1/recdel.1.gz +/usr/share/man/man1/recfmt.1.gz +/usr/share/man/man1/csv2rec.1.gz +/usr/share/man/man1/rec2csv.1.gz +/usr/share/man/man1/recins.1.gz +/usr/share/man/man1/recfix.1.gz +/usr/share/locale +/usr/share/locale/sr +/usr/share/locale/sr/LC_MESSAGES +/usr/share/locale/sr/LC_MESSAGES/recutils.mo +/usr/share/locale/vi +/usr/share/locale/vi/LC_MESSAGES +/usr/share/locale/vi/LC_MESSAGES/recutils.mo +/usr/share/locale/nl +/usr/share/locale/nl/LC_MESSAGES +/usr/share/locale/nl/LC_MESSAGES/recutils.mo +/usr/share/locale/sv +/usr/share/locale/sv/LC_MESSAGES +/usr/share/locale/sv/LC_MESSAGES/recutils.mo +/usr/share/locale/de +/usr/share/locale/de/LC_MESSAGES +/usr/share/locale/de/LC_MESSAGES/recutils.mo +/usr/share/locale/uk +/usr/share/locale/uk/LC_MESSAGES +/usr/share/locale/uk/LC_MESSAGES/recutils.mo +/usr/share/locale/fr +/usr/share/locale/fr/LC_MESSAGES +/usr/share/locale/fr/LC_MESSAGES/recutils.mo +/usr/share/locale/fi +/usr/share/locale/fi/LC_MESSAGES +/usr/share/locale/fi/LC_MESSAGES/recutils.mo +/usr/share/info +/usr/share/info/recutils.info.gz +/usr/share/info/rec-mode.info.gz +/usr/share/recutils +/usr/share/recutils/etc +/usr/share/recutils/etc/FSD.rec +/usr/share/doc/recutils/changelog.Debian.gz + + + this soft-pkg contain two intall-pkg, and the corresponding executables. + +$ dpkg -L libmdb2 +/usr/lib/i386-linux-gnu/libmdb.so.2.0.1 +/usr/lib/i386-linux-gnu/libmdb.so.2 +$ dpkg -L librec1 +/usr/lib/librec.so.1 +/usr/lib/librec.so.1.0.0 +$ dpkg -L recutils +/usr/lib/recutils/bash-builtins/readrec.so +/usr/bin/recfix +/usr/bin/recinf +/usr/bin/csv2rec +/usr/bin/recset +/usr/bin/mdb2rec +/usr/bin/recfmt +/usr/bin/recsel +/usr/bin/recins +/usr/bin/recdel +/usr/bin/rec2csv + + + + + +PARAM_SRCPKG=recutils + +[arch::] +PARAM_ARCH_LIST=x86 arm + +build_arch_list(PARAM_ARCH_LIST); + + +[srcpkg::recutils] +PARAM_SRCPKG_LIST=recutils libmdb2 + +PARAM_SRCPKG_BUILD_LIST=recutils-x86 libmdb2-x86 recutils-arm libmdb2-arm + +build_srcpkg_list PARAM_SRCPKG_BUILD_LIST x86 +build_srcpkg_list PARAM_SRCPKG_BUILD_LIST arm + +# +# build srcpkg recutils x86 +# +PARAM_DEST_BUILD_LIST="" + +[srcpkg::x86::recutils] +PARAM_ARCH=x86 +PARAM_INSTPKG_LIST=recutils librec1 + +[instpkg::x86::recutils] +PARAM_ARCH_LIST=x86 +PARAM_DEST_LIST="recutils readrec.so recfix recinf csv2rec recset mdb2rec recfmt recsel recins recdel rec2csv" +::PARAM_DEST_BUILD_LIST+=" $PARAM_DEST_LIST" + +[instpkg::x86::librec1] +PARAM_ARCH_LIST=x86 +PARAM_DEST_LIST=librec.so.1.0.0 +::PARAM_DEST_BUILD_LIST+=" $PARAM_DEST_LIST" + +# build dest in list with specified arch. +build_dest_list PARAM_DEST_BUILD_LIST x86 +# pkg dest files into install pkg in spedified arch. +build_instpkg_list ::PARAM_INSTPKG_LIST x86 + + +# +# build srcpkg libmdb2 x86 +# +PARAM_DEST_BUILD_LIST="" + +[srcpkg::x86::libmdb2] +PARAM_ARCH_LIST=x86 +PARAM_INSTPKG_LIST=libmdb2 + +[instpkg::x86::libmdb2] +PARAM_ARCH_LIST=x86 +PARAM_DEST_LIST="libmdb.so.2.0.1" +::PARAM_DEST_BUILD_LIST+=" $PARAM_DEST_LIST" + +# build dest in list with specified arch. +build_dest_list PARAM_DEST_BUILD_LIST x86 +# pkg dest files into install pkg in spedified arch. +build_instpkg_list ::PARAM_INSTPKG_LIST x86 +# end of building for x86 + +# +# build srcpkg recutils arm +# +PARAM_DEST_BUILD_LIST="" + +[srcpkg::arm::recutils] +PARAM_ARCH=arm +PARAM_INSTPKG_LIST=recutils librec1 + +[instpkg::arm::recutils] +PARAM_ARCH_LIST=arm +PARAM_DEST_LIST="recutils readrec.so recfix recinf csv2rec recset mdb2rec recfmt recsel recins recdel rec2csv" +::PARAM_DEST_BUILD_LIST+=" $PARAM_DEST_LIST" + +[instpkg::arm::librec1] +PARAM_ARCH_LIST=arm +PARAM_DEST_LIST=librec.so.1.0.0 +::PARAM_DEST_BUILD_LIST+=" $PARAM_DEST_LIST" + +# build dest in list with specified arch. +build_dest_list(PARAM_DEST_BUILD_LIST, x86) +# pkg dest files into install pkg in spedified arch. +build_instpkg_list(::PARAM_INSTPKG_LIST, x86) + + +# +# build srcpkg libmdb2 arm +# +PARAM_DEST_BUILD_LIST="" + +[srcpkg::arm::libmdb2] +PARAM_ARCH_LIST=arm +PARAM_INSTPKG_LIST=libmdb2 + +[instpkg::arm::libmdb2] +PARAM_ARCH_LIST=arm +PARAM_DEST_LIST="libmdb.so.2.0.1" +PARAM_DEST_BUILD_LIST+=" $PARAM_DEST_LIST" + + +PARAM_INSTPKG_LIST=recutils librec1 libmdb.so.2.0.1 +PARAM_DEST_LIST=recutils librec.so.1.0.0 readrec.so recfix recinf csv2rec recset mdb2rec recfmt recsel recins recdel rec2csv libmdb.so.2.0.1 + +# build dest in list with specified arch. +build_dest_list PARAM_DEST_BUILD_LIST x86 +# pkg dest files into install pkg in spedified arch. +build_instpkg_list ::PARAM_INSTPKG_LIST x86 +# end of building for arm + + + +# +# build_all: all => arch => srcpkg => dest +# qstk: push build func into qstk, and running in task loop. +# new task appended in task func, until the task complete. +# +# build_dest: dest_type => dest_step => task_func +# +# +# + +# +# build all: if a srcpkg with multi-srcpkg, it get the build arch_list first, +# and get the srcpkg_list by 'build srcpkglist'. and execute 'build curr' to +# build the dest in current srcpkg. +# 'build srcpkglist' invoke 'build subsrcpkglist' and 'build depsrcpkglist' +# to display other srcpkg list. and invoke 'build srcpkglist' in dir path of +# each sub srcpkg. at last, it get the srcpkg_list to be built for current +# srcpkg. +# 'build curr' get the dest_list in crrent srcpkg, or get the instpkg_list, +# and combine the dest_list in them. then do the build work by 'build_dest'. +# +# build_dest: it's the unit of building operation. it get the dest_type, and +# get the dest_step_list, do work one by one. every step is consisted by a +# taskunit. it contains input/output/paramter, and the corresponding function +# to execute. it like a pipe line, one step produce product for next step, +# until the component is produced. +# another type of building operation is dependence & trig taskunit. the +# dest_type contain a dest_unit. and the dest_unit is in a taskunit lib. all +# taskunit fill with the info of dependence & trig & taskfunc. dependence or +# trig specify one or more relative taskunit, or the output res generated by +# other taskunit. or generate the output res itself, and trig other task unit +# automatically. +# taskunit can work with those two method. it is setted by dest_step_list, +# or dest_taskunit. +# the dependence relationship can be draw as a graphic diagram, it will +# display the sequence diagram similar with the dest_step_list. +# for the legcey feature of tag dependence in makefile, task unit can +# express more info then it in makefile. +# +# dest and srcpkg: +# building work stage is sperated at single srcpkg building. building work +# of srcpkg is consisted by many single srcpkg building work. there are no +# complex building step and relationship between them, just use a work task +# queue. and the work can be scheduled by parell task executing feature on +# different cpu, even if on different host machine. +# one arch type, one single srcpkg, can be built on one host machine. it +# will save build time. +# at the same time, a dest building work orgnized by taskunit, can also be +# running one different host machine. but the method of building work is +# different, it uses cmd agent, instead of taskunit distribution. +# +# +# + +# +# 'build all' checks srcpkg in depsrcpkglist, if it is existing in develop +# environment. if it is not exist in develop environment, download and unzip +# them into dir of 'ext-pkgs'. +# list. those command will be invoked in sub-srcpkg dir path again. +# external srcpkg_list and sub srcpkg_list. +# get srcpkg list by cmd: +# 'build -d $srcpkg_dir subpkglist' +# 'build -d $srcpkg_dir deppkglist' +# 'build -d $srcpkg_dir arch=$PARAM_ARCH all'. +# this cmd check srcpkg type in specified dir path, and set cross-platform of +# srcpkg, then invoke build function to construct the srcpkg in specified dir. +# + +get_srcpkg_build_srcpkg_list () +{ + : +} + +qstk_create qstk_build_task + + + +build_qstk_task () +{ + local qstk_task= + + while true; do + qstk_task="$(qstk_pop qstk_build_task)" + [[ -z $qstk_task ]] && break; + + # execute + $qstk_task + done +} + +######################################## + +get_this_srcpkg_name () +{ + echo "$PARAM_SRCPKG" +} + +# get sub srcpkg in the srcpkg. +get_srcpkg_sub_list () +{ + : +} + +# get external dependence srcpkg for srcpkg. +get_srcpkg_extern_list () +{ + : +} + +get_srcpkg_dest_list () +{ + : +} + +get_srcpkg_inst_list () +{ + : +} + +get_instpkg_dest_list () +{ + : +} + +get_dest_type () +{ + : +} + +get_dest_type_step_list () +{ + : +} + + +######################################## + +build_all () +{ + build_arch_list "$PARAM_ARCH_LIST" + + # executing task in loop. + build_qstk_task +} + +# compile, and generate install pkgs by different arch. +build_arch_list () +{ + local arch= + local this_pkg="$(get_this_srcpkg_name)" + + for arch in $1; do + qstk_push qstk_build_task "build_srcpkg_list \"$(get_srcpkg_list $this_pkg $arch)\" $1" + done +} + +# compile dest executables in a srcpkg list, and make install pkgs. +build_srcpkg_list () +{ + local dest_list= + local instpkg_list= + + instpkg_list="$(get_srcpkg_inst_list $1)" + + # normally, dest_list is stored in srcpkg, + # but sometimes, a srcpkg generate several install pkgs, + # and contain a dest_list. the dest_list for srcpkg is + # the combination dest_list of all install pkgs. + dest_list="$(get_srcpkg_dest_list $1)" + if [[ -z $dest_list ]]; then + for i in $instpkg_list; do + dest_list+=" $(get_instpkg_dest_list $i)" + done + fi + + qstk_push qstk_build_task "build_dest_list \"$dest_list\" $2" + build_instpkg_list "$instpkg_list" $2 +} + +# compile dest executables in dest_list. +build_dest_list () +{ + for i in $1; do + qstk_push qstk_build_task "build_dest $i $2" + done +} + +build_instpkg_list () +{ + for i in $1; do + qstk_push qstk_build_task "build_instpkg $i $2" + done +} + +# +# building for one actual executable dest. +# +build_dest () +{ + local dest=$1 + local dest_type= + local dest_attr= + + local dest_step_list= + local src_list= + + dest_type="$get_dest_type $dest" + dest_step_list="$get_dest_type_step_list $dest_type" + + for i in $dest_step_list; do + build_dest_by_step $i $dest $dest_type + done +} + +build_dest_by_step () +{ + local step=$1 + local dest=$2 + local dest_type=$3 + + local src_list= + local dest_list= + local buildtask= + + src_list="$(get_step_src_list $step)" + dest_list="$(get_step_dest_list $step)" + buildtask="$(get_step_buildtask_list $step)" + + for srcfile in $src_list; do + build_task $buildtask "$srcfile" "$dest_list" + done +} + +build_task () +{ + local taskfunc= + + taskfunc="$(get_build_task_func $1)" + $taskfunc "$2" "$3" +} + + +build_instpkg () +{ + # build instpkg with specified arch. + # by using install file list in instpkg setting file. + : +} + + get the output executables: ttyrec, ttyplay, ttytime/ diff --git a/devspec.en_US/test b/devspec.en_US/2.6.example-umbrello.txt old mode 100644 new mode 100755 similarity index 100% rename from devspec.en_US/test rename to devspec.en_US/2.6.example-umbrello.txt diff --git a/test.md b/devspec.en_US/3.0.code-style.txt old mode 100644 new mode 100755 similarity index 100% rename from test.md rename to devspec.en_US/3.0.code-style.txt diff --git a/devspec.en_US/3.1.code-format.txt b/devspec.en_US/3.1.code-format.txt new file mode 100755 index 0000000..5facf57 --- /dev/null +++ b/devspec.en_US/3.1.code-format.txt @@ -0,0 +1,55 @@ + +@ ³ÌÐò´úÂë·ç¸ñ +# ³ÌÐòµÄ´úÂë·ç¸ñÒÔÎÄ×Ö¶¨Ò壬ÒÔtmpl.imiÔÚ´úÂëÊä³öºÍ´úÂë¸ñʽ»¯Ê±Ê¹Óᣠ+# ÒÔcode-tmplĿ¼ÏµÄimiÄ£°åÎļþ¶¨Òå¸÷ÖÖ±à³ÌÓïÑÔµÄtmpl£¬ÒÔ¼°²»Í¬Ê¹ÓÃ×éºÏµÄtmpl¡£ +# ÔÚsample-projectµÄdesignĿ¼ÖУ¬°üº¬Ò»¸ö´úÂëÄ£°åʹÓõÄÑùÀý¡£ + + + +# +========== + + + +# Code Style +============ + ³ÌÐòµÄ´úÂë¸ü¸ö°üº¬¶à¸ö·½Ãæ¡£ +@ ºê¶¨Òå¡¢º¯Êý¡¢±äÁ¿µÄÃüÃû¹æÔò +@ ´úÂëµÄËõ½ø +@ if¡¢elseÕâÀà°üº¬£û£ýsub-routingµÄÓï·¨Óï¾äµÄ·ç¸ñ +@ º¯Êý¶¨ÒåºÍµ÷ÓÃʱµÄ¸ñʽ +@ max width +@ ´úÂë×¢ÊÍ +@ Ô´´úÂëÎļþ½á¹¹ +@ ÓÃÓÚº¯ÊýµÈpublic·ÃÎʵÄÎĵµ×¢ÊÍ¡£ +@ comment-stub£¬ÌØÊâÓÃ;µÄ×¢ÊÍÄÚÈÝ¡£ + ÕâЩÊÇͨÓõĴúÂë·ç¸ñ£¬ÒÔ¼°°üº¬Ò»Ð©´úÂ빦ÄÜʵÏÖÉϵķç¸ñ£¬»òÕßÊdz£¼ûÄ£Ð͵ij£Óô¦Àí·½·¨£º +@ ʹÓÃÊý¾Ý½á¹¹sqltg¼¸ÖÖÀàÐÍÃèÊöºÍ×éÖ¯Êý¾Ý£¬¼õÉÙ´¿buffer+Ö¸ÕëµÄʹÓà +@ »ù±¾µÄͨÓÃËã·¨µÄʹÓᣠ+@ adapterÄ£ÐÍ£¬ÀýÈçfops£¬Í³Ò»½á¹¹£¬²»Í¬adapterʹÓöÔÓ¦²»Í¬µÄº¯Êý¡£ +@ registerÄ£ÐÍ£¬¶Ô¶à¸öobjµÄ×éÖ¯¹ÜÀíʹÓã¬Ã¿¸öobjÒÔÒ»ÖֽṹÁ¬½Ó£¬Í¨³£ÊÇÁ´±í¡£ + + +# Name Style +============ + reference from chapter-2.1. and append additional guide here. + + + +# File Structure Format +======================= + + +# Comment +========= + + +# Misc +====== + + +# General Implementation Style +============================== + + + diff --git a/devspec.en_US/3.2.name-style.txt b/devspec.en_US/3.2.name-style.txt new file mode 100755 index 0000000..873c93c --- /dev/null +++ b/devspec.en_US/3.2.name-style.txt @@ -0,0 +1,399 @@ + + +# introduction +============== + + in a program, src-code is consisted by lots of symbol word. some of them +are fixed, and called reserved-words. some of them is a chars beyound a-z and +A-Z and 0-9 and _, called operation-char. some of them are normal word for +programming element, variables, functions, types, macros, and so on. + this doc is used to describe the guide for the third part above. + a clear and better name is helpfull in program coding and reading. name is +a interface between different program, and different developers. + + there is a tool to descript words charactors, it is regular-expression. it +can be used to describe the name in program. + + a word consisted by a format, can express more informations. + eg: a variable name called 'i32TempValue', can be dispatched by those info: + +@ i, integer, the type of this variable. +@ 32, bit lenth, the size of this variable. +@ Temp, short name of 'temperature'. with a four char short name to express a + long word. +@ Value, the word it self. + + name style defines format like the above example. it's helpfull for a +developer to known the meaning of a variable. + + in current world, there is more coding-style in various program guide. this +doc is a general doc for name style. + + name style is used for program element, and also used for file name. + + + +# conception +============ + + those conception are used for general text. + +@ char-encoding-set: a charactor is described as a binary code in computer + system. the traditional char-encoding-set is asdii, and the popular one is + utf-8. a program src-code use ascii as normal. if a compiler support multi- + bytes encoding, such as utf-8, normally it is used for string data in + program. the code it self is writen by ascii in most of program language. +@ char/charactor: one charactor in various char-encoding-set. it's one byte + size data in ascii, and it's two bytes size data in GBK, and it's two or + three bytes size data in utf-8. +@ word: it is consisted by a-z or A-Z or 0-9. in reg-expr, the char in the word + has a name called 'alnum'. +@ words: it is consisted by several word. if it is used for language txt, it's + a sentence. +@ opr-char: operation char, signatures. it is a char beyound word in ascii. + there is a name in reg-expr for it, it called 'punct'. + + general name for chars: + +@ upper-char: the char of A-Z. +@ lower-char: the char of a-z. + + and those conception are used for programming. + +@ var-name/vname: variable name is a word for program variable or function + name. it is consisted by word or '_', the first char of a word can not be + digital char. +@ symbol/symbol-word: it's an alias for variable or function name. the + importance of this name is pay attension on export or import in a program. +@ reserved-word/key-word: the fixed name used in code for a type of program + language. +@ lexuary: a rule used to consist a word. +@ grammar: a rule used to orgnize different word with a txt syntax. + + general reg-expr. it is used in reg-expr, and it is also a suitable name +for calling them. + +[:alpha:]: equal to [a-zA-Z] +[:lower:]: equal to [a-z] +[:upper:]: equal to [A-Z] +[:digit:]: equal to [0-9] +[:alnum:]: equal to [a-zA-Z0-9] +[:blank:]: matching ' '(blank), '\t'(table char) +[:space:]: matching ' '(blank), '\t'(table char), '\n'(newline), '\f'(), + '\v'(vertical table char), '\r'(return char). +[:cntrl:]: control char. it is started from 000 to 037 and 177 (DEL) in ascii + by oct. +[:print:]: equal to [:alnum:] and [:punct:] and ' '(blank). +[:graph:]: equal to [:alnum:] and [:punct:]. +[:punct:]: it is: "`! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | + } ~ '". +[:xdigit:]: chars for hex word. include 0-9 or A-F or a-f. + + + +# Popular Name Style +===================== + + different developer has different code style. but in a orgnization, or in +a company, the name-style guide doc is needed by developers. + the famous one is: + +@ GeneralStyle: a newer use single char or a single word to name the variable + in normal. it's easy and readable in src-code. but there is a limitation in + one word name to express the meaning of variable or function. +@ GNUStyle: join different word with '_', the word can be full name string, or + a short name string. it's an improvement of GeneralStyle. +@ MFCStyle: widlly used coding-style, and to be a traditional one. many + c/cpp developers started from this one. + it uses a short or full word name string combination, and the first char of + every word is a upper-char, others is lower-char. it has a type prefix for + variables or types by short word name. + short word name can save the char space in storage. but sometimes, it is + a bit hard to read the meaning of variable. i think it is usefull for low- + level programming, because of less ram space cost. +@ JavaStyle: it's a bit different with MFCStyle. the first word in name string + is started with lower-char. this featrue is compative with one word name. + the name of variable is consisted without type prefix, except the type name + of a class. + + here enum the example of different coding-style for c/cpp. + GeneralStyle example: + +``` +int i, j, value; + +int foo () +{ + // replace code here. + printf("value is : %d\n", value); + + return 0; +} +``` + the name is very short, it's helpfull for code-reading, but weakness for +expression of meanings. + others express a name with multi-word, maybe with a type prefix. + it is not very nice for reading, if the lenth of name string is too long. + + GNUStyle example: + +``` +int i, j, value_for_test; + +int example_function () +{ + // replace code here. + printf("value is : %d\n", value_for_test); + + return 0; +} +``` + + MFCStyle example: + +``` +int i, j, i32ValueForTest; + +int ExampleFunc () +{ + // replace code here. + printf("value is : %d\n", i32ValueForTest); + + return 0; +} +``` + + JavaStyle example: + +``` +int i, j, valueForTest; + +int exampleFunction () +{ + // replace code here. + printf("value is : %d\n", valueForTest); + + return 0; +} +``` + + those examples are simplly to show general difference between them. see +the corresponding documents for them to known them deeply. + + + +# subject in name style +======================= + + a name style can be seperated by several parts. every part is a subject. + +@ short name or full name. + a short name is a string that cost less space, it is helpfull for low-level +program. + +@ started with upper-char or join with '_'. + the type of those two style can express the meaning of a name more better, +rather than a single word name. + it is good for code reading when the name is too long. + the after one cost a bit more char space in memory. + +@ started with lower-char for first word or not. + by using lower-char for first word, it can be compative with GeneralStyle. +if the name is one word string, it's equal to GeneralStyle. + +@ type prefix. + it's usefull for low-level programming, because developer use more basical +type variables in code, and it is helpfull to name a variable with type prefix. + but in application programming, the developer face to many self-defined +type, or class type. the type prefix of a variable is normally a class-type +prefix, or other type-defined prefix. + +@ short name. + how to get a readable short name? + in MFCStyle, the short name is consisted by 2~6 chars. the char of a word +is the '¸¨Òô' char, or the first N char(4 char in traditional), so that it can +be recognized more better. + in other condition, the name is described by several word, or a sentence, +the first char of this sentence also can be used for namming. + + + + +# Name Style +============ + + name style is used in those condition. + +@ program language element name. variables, functions, macros, types, and so + on. +@ src code file. +@ src code pkg file. +@ binary install pkg file. +@ + + if it is used for programming element, read the charpter of 'Name Style For +devrules'. if it is used for file name, read the charpter of 'Name Style for +file'. + + + +# Name Style For devspec +========================= + + the style of name style is based on 'MFCStyle' for devspec. because it is +used for low-level system programming in most. the style used for application +developing is in extend document. + the default name-style is GeneralStyle. it's easy for comprehansion. but +the interface(var/func) of a module, must use MFCStyle, and with extend specyfic below. + + the helpfull features by MFCStyle are: + +@ using short name to save memory space, and easy to read. +@ using type prefix to known the type of symbol string. +@ it defined a lot of type prefix for variable. such as c(char), i(int), + u(unsigned int), l(long), f(float), sz(string), lp(long pointer), v(void). +@ it uses 'C' for class type name as a type prefix. no prefix for others such + as macro, enum, struct, union. +@ macro and enum define. + use full upper-char with short name combination, and join word with '_'. + append 'M_' prefix for macro, and 'EM_' for enum type. + if the macro is defined as a macro-function, the name of it is same as + function. +@ struct and union define + all struct is defined as a typedef for global accessing. the default name +style is familiar with macro. using full upper-case with short name combination +and join with '_'. append 'ST_' prefix for struct, and 'UN_' for union, if it +is nessecory. + the struct-type defined in struct is another name, which is different from +type name. use a '__tag_' prefix before type name. + define a pointer type with 'P' prefix of the type. eg: + +``` +struct __tag_ST_TYPE_EXAMPLE { + int i; +} ST_TYPE_EXAMPLE, *PST_TYPE_EXAMPLE; +``` + +@ + + + the difference from MFCStyle is: + +@ use General Style for simple function feature implement. +@ type prefix extend: st(struct type), un(union type), em(enum). +@ size of type extend: 8/16/32/64. +@ type prefix for type name. is not only for class name, it uses type prefix + for macro, enum, struct, union. +@ + + + +# General Style +=============== + +@ single char variable + the normal single char variable is: +# i, j, k, they are the default general purpose name. +# i, j, k; m, n, l; x, y, z; they are used for array index variable, or loop + increasing variable. +# some variable is the short name of physical-unit or physical-value-name. eg: + v(speed), t(time/temperature), s(distance). + +@ single word variable or function + it's the first choosen of local variable in functions. and the function +name for traditional module. + for example: traditional module of CStack, has many functions which is +single word name. push(), pop(), and so on. it's easy to use rather than +Multi-word. it has traditional operating function with a traditional name. + +@ + + + + + + +# syntax for file name +====================== + + see the charpter of 'pkg-file-name-format'. + + file name style is used for those files: + +@ src code file. + it's the similar with function name. it's consisted by upper-char started +word combination. and a type prefix such as C(Class), T(Type), M(Module). + +@ unit test src code file. + the name of src code file, has a '_test' suffix after module name, and +before extend file name. + eg: CStack.c is a src-code file for CStack module, and the test src file +for it is CStack_test.c. + +@ src code and binary install pkg file. + it's a file name syntax, not file name style. + the syntax of pkg file name is : +'_[-]--.' + +# pkg-name, main content. a pkg-name +# pkg-type, if it is a src pkg, append 'src' after pkg-name for src-pkg, leave + it blank for binary-install-pkg, and 'res' for resource-install-pkg. +# version, a version code with three level version id. +# date, pkg archive date. +# chksum, 16bit hex summary of file content. it's used for file modification + checking. or use 16bit hex summary of file sha1 value. +# ext-name, use tar.gz/tar.bz2/tar.xz for src-pkg, use 'etz' for install-pkg. + +@ + + + + + + + + + +# Name Style +============ + ÔÚ³ÌÐòÖУ¬ÐèÒª¶Ô±äÁ¿¡¢º¯Êý¡¢ºê¶¨Òå¡¢ÎļþÃû½øÐÐÃüÃû¡£ÎªÁËʹÃû³Æ¿ÉÒÔÖ±¹ÛµÄ±íʾº¬Ò壬ÇÒÔÚʹÓÃÖмæ¹ËÊäÈëµÄ±ã½ÝÐÔ£¬ºÍ´úÂëµÄÃÀ¹Û£¬ +¶ÔÃû³Æ×Ö·û´®µÄÃüÃûÒÔijÖÖ·ç¸ñºÍ¹æÔò½øÐÐÃüÃû£¬½«Õâ¸ö³Æ֮Ϊ³ÌÐòµÄÃüÃû¹æÔò/ÃüÃû·ç¸ñ +£¨NameSytle£©¡£ + + ʹÓô¿Ð¡Ð´»òMFCStyleµÄ´úÂë·ç¸ñ¡£ + + Ò»¸öÃû³Æ×Ö·û´®Óв»Í¬µÄµ¥´Ê»ò×Ö·û×é³É¡£ +@ ÒÔµ¥´ÊÁ¬½ÓÃüÃû£¬Öм䲻´ø¿Õ¸ñ£¬Ê××Öĸ´óдÓÃÓÚÎĵµÖеÄÃèÊö£¬³ÌÐòµÄ±äÁ¿ºÍº¯ÊýÊ××ÖĸСд¡£ +@ ÒÔµ¥´ÊµÄËõдÁ¬½Ó£¬ËõдΪ2-5¸ö×Öĸ£¬Ê××Öĸ´óд¡£ +@ ʹÓõ¥´Ê¡¢Óï¾ä×éºÏµÄÊ××Öĸ×éºÏ£¬±íʾһ¸ö¹¦ÄÜÃû³ÆµÄËõд¡£ +@ ÒÔµ¥´Ê¡¢Óï¾ä×éºÏµÄÊ××Öĸ×éºÏ£¬Ä©Î²»òÆðʼµÄµ¥´Ê²»ÊǷdz£³¤Ê±£¬ÒÔÍêÕûµÄµ¥´ÊÃüÃû£¬±È½ÏÈÝÒ×Á˽ⵥ´ÊµÄº¬Òå¡£eg£ºbuild-pkglist£¬ +ËõдΪbpl£¬»òbuildpl£¬ÒÔÏÔʾbuildÕâ¸ö¹¦Äܵĺ¬Òå¡£ +@ + + ³£ÓõÄÃüÃû¹æÔò£º +@ ³ÌÐòÎļþÃû£ºÒÔ¶à¸ö´óд×Öĸ¿ªÍ·µÄµ¥´Ê±íʾ£¬Öм䲻¼Ó¿Õ¸ñ¡¢Ï»®ÏßµÈ×Ö·û¡£ +@ ÀàÐÍÃû³Æ£º´óд×Öĸ¿ªÍ·µÄµ¥´Ê×éºÏ£¬²¢Ìí¼ÓÀàÐÍpfx¡£¶ÔÓÚtypedef structºÍtypedef enumµÄÀàÐͶ¨Ò壬ʹÓú궨Òå·ç¸ñµÄ´óд×Öĸ¼ÓÏ»®Ïß×éºÏ¡£ +@ ±äÁ¿Ãû³Æ£ºµ¥¸öСд×Öĸ£¬»ò´¿Ð¡Ð´×ÖĸµÄµ¥¸öµ¥´Ê£¬»ò´óд×Öĸ¿ªÍ·µÄµ¥´Ê×éºÏ+ÀàÐÍpfx¡£¶ÔÓÚÀàÐÍpfx£¬ÓÃÓÚ±íʾ±äÁ¿ÀàÐ͵Äͬʱ£¬Çø·ÖÓÚº¯Êý¡£ +@ ºê¶¨ÒåºÍö¾Ù/½á¹¹ÌåÀàÐÍÃüÃû£º´¿´óдµ¥´Ê×éºÏ£¬²¢ÒÔÏ»®ÏßÁ¬½Óµ¥´Ê¡£ºê¶¨ÒåÒÔM_Ϊpfx£¬½á¹¹ÌåÒÔST_Ϊpfx£¬Ã¶¾ÙÀàÐÍÒÔEM_Ϊpfx£¬ÁªºÏÀàÐÍ +ÒÔUN_Ϊpfx¡£ + + ¶ÔÓÚÃüÃûµÄ·½·¨£¬Í¨³£½¨ÒéÐÔµÄÕâôʹÓ㺠+@ ʹÓõ¥¸ö×Ö·ûµÄÁÙʱ±äÁ¿£¬i¡¢j¡¢x¡¢y¡¢z¡¢m¡¢n¡¢k¡¢lµÈ£¬ÓÃÓÚindex¡£ÆäËüµ¥¸ö×ÖĸµÄ±äÁ¿ÃüÃûÓÃÓÚÒ»¸öº¯ÊýÄÚµ¥¸öobjµÄ±íʾ¡£ +@ 2¡«3¸ö×Ö·ûµÄËõд£¬»òÒ»¸öµ¥´Ê£¬ÓÃÓÚÒ»¸öº¯ÊýÄÚµ¥¸öobjµÄ±íʾ¡£ +@ ÔÚº¯ÊýÖÐʹÓõıäÁ¿¶ÔÏó½Ï¶à£¬»ò±äÁ¿¶ÔÏó²»³£Óûò²»Í¨Óã¬ÐèʹÓÃÍêÕûµÄÃû³Æ×Ö·û´®£¬Ê¹±äÁ¿µÄº¬Òå±È½ÏÖ±¹Û¡£ +@ ³ÉÔ±±äÁ¿£¬ÓÈÆäÊÇpublicʹÓõģ¬Ê¹ÓÃMFCStyle£¬ÇÒÌí¼ÓÀàÐÍpfx¡£ +@ ³ÉÔ±º¯ÊýÒÔµ¥¸öµ¥´Ê±íʾµÄ£¬Ê¹Óô¿Ð¡Ð´Ãû³Æ£¬»ò´óдÆðʼµÄ×Ö·û´®ÃüÃû£¬¸ù¾ÝʹÓÃÏ°¹ß¶ø¶¨¡£ÀýÈçÒ»¸ö¶ÓÁÐQueueÊÇͨÓÃÀàÐÍ£¬ÔÚ¶¨Òå³É±äÁ¿Ê¹Óà +ʱºÜ¶àʱºò¿ÉÄÜʹÓõ¥¸öСд×Öĸ£¬»ò´¿Ð¡Ð´µ¥´Ê£¬ËùÒÔµ¥¸öµ¥´ÊµÄ³ÉÔ±º¯ÊýʹÓô¿Ð¡Ð´£¬ÇÒ¾¡Á¿Ê¹Óõ¥¸öµ¥´Ê±íʾһ¸ö³ÉÔ±º¯Êý¡£ +@ ¾Ö²¿±äÁ¿Í¨³£Ê¹Óõ¥¸öСд×Öĸ£¬´¿Ð¡Ð´Ëõд»ò´¿Ð¡Ð´µ¥´Ê£¬ÒÔʹ´úÂë¿´ÉÏÈ¥¾¡Á¿¼ò½à¡£ +@ ¶ÔÓÚpublicµÄÈ«¾Ö±äÁ¿£¬Ê¹Óôóд×Öĸ¿ªÍ·µÄµ¥´Ê×éºÏ£¬²¢´øÀàÐÍpfx¡£ +@ ¶ÔÓÚ¾Ö²¿±äÁ¿Öв»³£ÓõıäÁ¿ÀàÐÍ»ò±äÁ¿ÄÚÈÝ£¬ÐèÒªÒÔ¶à¸öµ¥´Ê±íʾµÄ£¬²Î¿¼publicµÄÈ«¾Ö±äÁ¿µÄÃüÃû¡£ + + GNUStyleµÄ±äÁ¿ÃüÃû£¬ÔÚ²ÎÊýÅäÖÃÎļþÖÐʹÓá£Ò»¸öÈ«¾ÖµÄ»·¾³±äÁ¿£¬Ê¹ÓÃgnuµÄstyle±È½ÏºÏÊÊ¡£ + + +@ ±äÁ¿µÄ¶¨Òå +# ÔÚsrcµÄ¿ªÊ¼²¿·Ö¶¨Ò壬ÔÚÖ®ºóʹÓ᣷DZäÁ¿¶¨ÒåÇøÓò¶¨ÒåµÄ±äÁ¿£¬Í¨³£²»ÕâôʹÓ㬻òÓÃÓÚµ÷ÊԵȡ£ +# ±äÁ¿¶¨ÒåÇøÓò²Î¿¼code-sample +# ±äÁ¿ÒÔÏÔʽµÄ±äÁ¿¶¨Ò壬²»¶¨ÒåÒþʽµÄ±äÁ¿ÉùÃ÷¡£ + +@ diff --git a/devspec.en_US/3.3.c-cpp-code-format.txt b/devspec.en_US/3.3.c-cpp-code-format.txt new file mode 100755 index 0000000..89c494e --- /dev/null +++ b/devspec.en_US/3.3.c-cpp-code-format.txt @@ -0,0 +1,274 @@ + + +# introduction +============== + + code style does not trig a compile error, but it's important for code +reading. it seems as the method of brick putting in a box. if you put brick +disorderly, the box contains only few bricks. but if you heap brick one by one +trimly, it contains more bricks in a box. it's the style, or rule, or method +to do a thing. + when we study programming first, we use one char for variables, and single +word for function name. but the program is growing as the function feature +increasing, more and more variables and functions will be defined. how to +recognize them, and how to remember them? + code style is not a program grammar, but it's a method for writing code +regulary. + there is a software containning code-style-feature, it is used for +formating code when develop need. and it provide code templete feature for +creating a new src file or new function. it is 'eclipse'. + manay code style rules referenced from it. you can use this document for +eclipse code-style setting. it is used for devutils to define the style in imi +setting file. so that the program 'codefmt' can be used for code formating. +although, the code style setting infomation has been writen in devutils, we +have to read this document too, in order to get the concept of coding style, +and known why some of the syntax is used like that. + + code style setting is consisted by those parts below: + +@ indentation + every code line add tabs for indentation, it shows the level of code, + especially in nest statement, it shows which statement the code line is + belong to. so that we can read the logic relation ship a bit clearly. +@ braces + it brace the code as a block, and the first brace can be in the same line + with grammar element, such as a function declaration. +@ white space + the space between word and word, word and operating char. +@ control statements + it put the reserved word line in same line or not with braces or other + reserved word. +@ line wrapping + white lines between codes in two lines, it seperate grammar elements more + readable. + + + +# conception +============ + +parenthesis: char of '(' and ')' +open-paren: char of '(' +close-paren: char of ')' +brace: char of '{' and '}' +comma: char of ',' +colon: char of ':' +semicolon: char of ';' +argument: entity paramter +paramter: protocol paramter + + + +# settings +========== + + export the setting file from eclipse, and we will get a xml file. + read the file, we will get the paramters we setted in eclipse. + translate the xml file setting into imi file. + read file code-style.imi for reference. and note some of the setting. + +@ function space insert + insert a space in function declaration, do not insert it in function +invoking. + when the developer want to get the declaration of a function(eg:foo()), +he can search code by 'foo (', it will not mix with function invoking. in the +other side, search code by 'foo(' will get the function invoding. + +@ white space + all comma ',' will be insterted a white space, in order to see the element +clearly. + +@ brace + all braces '{' start in a new line. '{' is not putted in the line which +contains if/for/while reserved-word. + this keep all braces in same style, '{' and '}' is a pare to brace code +block clearly. + +@ function declare + return type is putted in the same line even if it has a long qualifier +word. and paramters can be in the different line when the code width out of max +line width. + wrap all paramters except first element, and indent on column. + when the paramter out of the max line width by column indentation, use +default indentation, one tab compare to function. + if the function invoking has been writen with paramter wrap, do not wrap +or not again even if the code is not out of max line width. + if the code-format can not set two type of indent, use the second one. + +@ wrap lines + insert 1 line between two elements. instert two lines after section code, +it will seperate code more clearly. + if the code-format can not set code section insert, put a comment for it. + +@ comment column align + the comment after code lines should be column aligned. this feature has not +been implemented in eclipse. but it's usefull. + + +# File Structure Format +======================= + + a src file has a structure to seperate code into several parts. + +@ file header. it include soft-pkg info, create/modify info, author and lisence +info, and note for current source module. +@ include area. put all external include here. +@ macro/type/var defination. +@ private function. use static qualifier, it will be optimized automatically. +@ public function. use 'XXAPI' qualifier, to specify the calling stack type. + + otherwize, type.h defines some of the macros + +@ XXX(module_name) and external_XXX(module_name) is used to sperate functions +in function defination section. if there are many functions, they are need to +be categoried to several parts. it defines invalid functions, and it will be +recognized by code-editor, and display on function list. other side, function +defination will be treated as a non referenced and invalid function, optimized +by compiler, and do not cost code size. +@ tag-comment. put comment to seperate code. and the tag info can be recognized +by programs in devutils. it is used to code analyze. + + the file structure is defined as a templete file in devutils. it can be +used by codegen and codefmt, generate structured src code, and format the code. + + +# API doc +========= + every external defined with a API note comment before the function +declaration. it can be used to generate API doc automatically. + this function comment is writen in templete file in devutils. it uses +doxygen, the reserved-word for comment is: + +\function: function name +\paramter: paramter type, name, comment +\return: return type +\brief: note for current function feature. + + only public functions is declared with API doc comment. and the comment +can be syncronized to header file by programs in devutils. + + +# ifdef macro +============= + use few #ifdef, define same implement function, or macro function for +interface instead. or define variables for run time switch. + + +# +============ + + + +# Misc +====== + +@ if dbgout string output is not used, insert comment operator at the beginning + of the dbgout invoking. it's clear to see that it's a dbgout string output. + when we trimp code, we can get the dbgout string quickly. + + + +# Regular Implementation Style +============================== + + + + + + + + + + + + + + + + + + + + + + + + + + + +@ ³ÌÐò´úÂë·ç¸ñ +# ³ÌÐòµÄ´úÂë·ç¸ñÒÔÎÄ×Ö¶¨Ò壬ÒÔtmpl.imiÔÚ´úÂëÊä³öºÍ´úÂë¸ñʽ»¯Ê±Ê¹Óᣠ+# ÒÔcode-tmplĿ¼ÏµÄimiÄ£°åÎļþ¶¨Òå¸÷ÖÖ±à³ÌÓïÑÔµÄtmpl£¬ÒÔ¼°²»Í¬Ê¹ÓÃ×éºÏµÄtmpl¡£ +# ÔÚsample-projectµÄdesignĿ¼ÖУ¬°üº¬Ò»¸ö´úÂëÄ£°åʹÓõÄÑùÀý¡£ + + + + + + +# Code Style +============ + ³ÌÐòµÄ´úÂë¸ü¸ö°üº¬¶à¸ö·½Ãæ¡£ +@ ºê¶¨Òå¡¢º¯Êý¡¢±äÁ¿µÄÃüÃû¹æÔò +@ ´úÂëµÄËõ½ø +@ if¡¢elseÕâÀà°üº¬£û£ýsub-routingµÄÓï·¨Óï¾äµÄ·ç¸ñ +@ º¯Êý¶¨ÒåºÍµ÷ÓÃʱµÄ¸ñʽ +@ max width +@ ´úÂë×¢ÊÍ +@ Ô´´úÂëÎļþ½á¹¹ +@ ÓÃÓÚº¯ÊýµÈpublic·ÃÎʵÄÎĵµ×¢ÊÍ¡£ +@ comment-stub£¬ÌØÊâÓÃ;µÄ×¢ÊÍÄÚÈÝ¡£ + ÕâЩÊÇͨÓõĴúÂë·ç¸ñ£¬ÒÔ¼°°üº¬Ò»Ð©´úÂ빦ÄÜʵÏÖÉϵķç¸ñ£¬»òÕßÊdz£¼ûÄ£Ð͵ij£Óô¦Àí·½·¨£º +@ ʹÓÃÊý¾Ý½á¹¹sqltg¼¸ÖÖÀàÐÍÃèÊöºÍ×éÖ¯Êý¾Ý£¬¼õÉÙ´¿buffer+Ö¸ÕëµÄʹÓà +@ »ù±¾µÄͨÓÃËã·¨µÄʹÓᣠ+@ adapterÄ£ÐÍ£¬ÀýÈçfops£¬Í³Ò»½á¹¹£¬²»Í¬adapterʹÓöÔÓ¦²»Í¬µÄº¯Êý¡£ +@ registerÄ£ÐÍ£¬¶Ô¶à¸öobjµÄ×éÖ¯¹ÜÀíʹÓã¬Ã¿¸öobjÒÔÒ»ÖֽṹÁ¬½Ó£¬Í¨³£ÊÇÁ´±í¡£ + + +# Name Style +============ + ÔÚ³ÌÐòÖУ¬ÐèÒª¶Ô±äÁ¿¡¢º¯Êý¡¢ºê¶¨Òå¡¢ÎļþÃû½øÐÐÃüÃû¡£ÎªÁËʹÃû³Æ¿ÉÒÔÖ±¹ÛµÄ±íʾº¬Ò壬ÇÒÔÚʹÓÃÖмæ¹ËÊäÈëµÄ±ã½ÝÐÔ£¬ºÍ´úÂëµÄÃÀ¹Û£¬ +¶ÔÃû³Æ×Ö·û´®µÄÃüÃûÒÔijÖÖ·ç¸ñºÍ¹æÔò½øÐÐÃüÃû£¬½«Õâ¸ö³Æ֮Ϊ³ÌÐòµÄÃüÃû¹æÔò/ÃüÃû·ç¸ñ£¨NameSytle£©¡£ + ÔÚÏÖÓеĴúÂë·ç¸ñÖУ¬ÓÐÕâЩÀàÐÍ¡£ +JStyle£ºÐ¡Ð´µ¥¸öµ¥´Ê£¬ÔÚʹÓÃʱ±È½ÏÖ±¹Û¼ò½à¡£µ¥¶à¸öµ¥´ÊµÄÃû³Æ£¬Ð¡Ð´´óдÆðʼ»ìºÏ£¬Ó봿СдµÄ·ç¸ñ²»Í¬¡£ +MFCStyle£º¶¼ÊÇ´óдÆðʼ£¬¿´ÉÏÈ¥Ïà¶ÔÒ»ÖÂЩ¡£ +GNUStyle£º¶à¸ö³ÉÔ±±äÁ¿µÄ·ÃÎÊʱ£¬´úÂë±È½ÏÈß³¤¡£ + ʹÓô¿Ð¡Ð´»òMFCStyleµÄ´úÂë·ç¸ñ¡£ + + Ò»¸öÃû³Æ×Ö·û´®Óв»Í¬µÄµ¥´Ê»ò×Ö·û×é³É¡£ +@ ÒÔµ¥´ÊÁ¬½ÓÃüÃû£¬Öм䲻´ø¿Õ¸ñ£¬Ê××Öĸ´óдÓÃÓÚÎĵµÖеÄÃèÊö£¬³ÌÐòµÄ±äÁ¿ºÍº¯ÊýÊ××ÖĸСд¡£ +@ ÒÔµ¥´ÊµÄËõдÁ¬½Ó£¬ËõдΪ2-5¸ö×Öĸ£¬Ê××Öĸ´óд¡£ +@ ʹÓõ¥´Ê¡¢Óï¾ä×éºÏµÄÊ××Öĸ×éºÏ£¬±íʾһ¸ö¹¦ÄÜÃû³ÆµÄËõд¡£ +@ ÒÔµ¥´Ê¡¢Óï¾ä×éºÏµÄÊ××Öĸ×éºÏ£¬Ä©Î²»òÆðʼµÄµ¥´Ê²»ÊǷdz£³¤Ê±£¬ÒÔÍêÕûµÄµ¥´ÊÃüÃû£¬±È½ÏÈÝÒ×Á˽ⵥ´ÊµÄº¬Òå¡£eg£ºbuild-pkglist£¬ +ËõдΪbpl£¬»òbuildpl£¬ÒÔÏÔʾbuildÕâ¸ö¹¦Äܵĺ¬Òå¡£ +@ + + ³£ÓõÄÃüÃû¹æÔò£º +@ ³ÌÐòÎļþÃû£ºÒÔ¶à¸ö´óд×Öĸ¿ªÍ·µÄµ¥´Ê±íʾ£¬Öм䲻¼Ó¿Õ¸ñ¡¢Ï»®ÏßµÈ×Ö·û¡£ +@ ÀàÐÍÃû³Æ£º´óд×Öĸ¿ªÍ·µÄµ¥´Ê×éºÏ£¬²¢Ìí¼ÓÀàÐÍpfx¡£¶ÔÓÚtypedef structºÍtypedef enumµÄÀàÐͶ¨Ò壬ʹÓú궨Òå·ç¸ñµÄ´óд×Öĸ¼ÓÏ»®Ïß×éºÏ¡£ +@ ±äÁ¿Ãû³Æ£ºµ¥¸öСд×Öĸ£¬»ò´¿Ð¡Ð´×ÖĸµÄµ¥¸öµ¥´Ê£¬»ò´óд×Öĸ¿ªÍ·µÄµ¥´Ê×éºÏ+ÀàÐÍpfx¡£¶ÔÓÚÀàÐÍpfx£¬ÓÃÓÚ±íʾ±äÁ¿ÀàÐ͵Äͬʱ£¬Çø·ÖÓÚº¯Êý¡£ +@ ºê¶¨ÒåºÍö¾Ù/½á¹¹ÌåÀàÐÍÃüÃû£º´¿´óдµ¥´Ê×éºÏ£¬²¢ÒÔÏ»®ÏßÁ¬½Óµ¥´Ê¡£ºê¶¨ÒåÒÔM_Ϊpfx£¬½á¹¹ÌåÒÔST_Ϊpfx£¬Ã¶¾ÙÀàÐÍÒÔEM_Ϊpfx£¬ÁªºÏÀàÐÍ +ÒÔUN_Ϊpfx¡£ + + ¶ÔÓÚÃüÃûµÄ·½·¨£¬Í¨³£½¨ÒéÐÔµÄÕâôʹÓ㺠+@ ʹÓõ¥¸ö×Ö·ûµÄÁÙʱ±äÁ¿£¬i¡¢j¡¢x¡¢y¡¢z¡¢m¡¢n¡¢k¡¢lµÈ£¬ÓÃÓÚindex¡£ÆäËüµ¥¸ö×ÖĸµÄ±äÁ¿ÃüÃûÓÃÓÚÒ»¸öº¯ÊýÄÚµ¥¸öobjµÄ±íʾ¡£ +@ 2¡«3¸ö×Ö·ûµÄËõд£¬»òÒ»¸öµ¥´Ê£¬ÓÃÓÚÒ»¸öº¯ÊýÄÚµ¥¸öobjµÄ±íʾ¡£ +@ ÔÚº¯ÊýÖÐʹÓõıäÁ¿¶ÔÏó½Ï¶à£¬»ò±äÁ¿¶ÔÏó²»³£Óûò²»Í¨Óã¬ÐèʹÓÃÍêÕûµÄÃû³Æ×Ö·û´®£¬Ê¹±äÁ¿µÄº¬Òå±È½ÏÖ±¹Û¡£ +@ ³ÉÔ±±äÁ¿£¬ÓÈÆäÊÇpublicʹÓõģ¬Ê¹ÓÃMFCStyle£¬ÇÒÌí¼ÓÀàÐÍpfx¡£ +@ ³ÉÔ±º¯ÊýÒÔµ¥¸öµ¥´Ê±íʾµÄ£¬Ê¹Óô¿Ð¡Ð´Ãû³Æ£¬»ò´óдÆðʼµÄ×Ö·û´®ÃüÃû£¬¸ù¾ÝʹÓÃÏ°¹ß¶ø¶¨¡£ÀýÈçÒ»¸ö¶ÓÁÐQueueÊÇͨÓÃÀàÐÍ£¬ÔÚ¶¨Òå³É±äÁ¿Ê¹Óà +ʱºÜ¶àʱºò¿ÉÄÜʹÓõ¥¸öСд×Öĸ£¬»ò´¿Ð¡Ð´µ¥´Ê£¬ËùÒÔµ¥¸öµ¥´ÊµÄ³ÉÔ±º¯ÊýʹÓô¿Ð¡Ð´£¬ÇÒ¾¡Á¿Ê¹Óõ¥¸öµ¥´Ê±íʾһ¸ö³ÉÔ±º¯Êý¡£ +@ ¾Ö²¿±äÁ¿Í¨³£Ê¹Óõ¥¸öСд×Öĸ£¬´¿Ð¡Ð´Ëõд»ò´¿Ð¡Ð´µ¥´Ê£¬ÒÔʹ´úÂë¿´ÉÏÈ¥¾¡Á¿¼ò½à¡£ +@ ¶ÔÓÚpublicµÄÈ«¾Ö±äÁ¿£¬Ê¹Óôóд×Öĸ¿ªÍ·µÄµ¥´Ê×éºÏ£¬²¢´øÀàÐÍpfx¡£ +@ ¶ÔÓÚ¾Ö²¿±äÁ¿Öв»³£ÓõıäÁ¿ÀàÐÍ»ò±äÁ¿ÄÚÈÝ£¬ÐèÒªÒÔ¶à¸öµ¥´Ê±íʾµÄ£¬²Î¿¼publicµÄÈ«¾Ö±äÁ¿µÄÃüÃû¡£ + + GNUStyleµÄ±äÁ¿ÃüÃû£¬ÔÚ²ÎÊýÅäÖÃÎļþÖÐʹÓá£Ò»¸öÈ«¾ÖµÄ»·¾³±äÁ¿£¬Ê¹ÓÃgnuµÄstyle±È½ÏºÏÊÊ¡£ + + +@ ±äÁ¿µÄ¶¨Òå +# ÔÚsrcµÄ¿ªÊ¼²¿·Ö¶¨Ò壬ÔÚÖ®ºóʹÓ᣷DZäÁ¿¶¨ÒåÇøÓò¶¨ÒåµÄ±äÁ¿£¬Í¨³£²»ÕâôʹÓ㬻òÓÃÓÚµ÷ÊԵȡ£ +# ±äÁ¿¶¨ÒåÇøÓò²Î¿¼code-sample +# ±äÁ¿ÒÔÏÔʽµÄ±äÁ¿¶¨Ò壬²»¶¨ÒåÒþʽµÄ±äÁ¿ÉùÃ÷¡£ + +@ + diff --git a/devspec.en_US/file b/devspec.en_US/3.4.sh-code-format.txt old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/3.4.sh-code-format.txt diff --git a/devspec.en_US/4.0.prog-style.txt b/devspec.en_US/4.0.prog-style.txt new file mode 100755 index 0000000..30ac01f --- /dev/null +++ b/devspec.en_US/4.0.prog-style.txt @@ -0,0 +1,96 @@ + + + + +# program scale +=============== + + program level and element conclution: + +@ instruction: asm programming. +@ lang-feature-element: c/cpp programming. +@ function-set-element: invoking functions with particular feature. +@ module-element: using a set of functions for the same feature. +@ class-element: same as module, but stronger then module on soft-reuse and + inherit. +@ lib-pkg-element: function set for some feature, or midware. +@ prog-element: cmd set. +@ svc-element: service program. + + + + +# program type +============== + +[type-lib-func-module] +@ +# program£ºexeprog£¬libprog£¬task£¬svc£¬ +# process£ºprocess£¬thread£¬fiber +# mem£ºshmm£¬slice£¬slb +# ipc£ºmsg£¬evnt£¬databus£¬rpc + +@ Connector£º +Connector(Socket£¬Wire)£¬ +Wire(Property/Wire£¬WireGroup£¬Stream£¬Bucket)£¬Wire(Tier/Bind/alias)£¬Stream(Pipe£¬Thr£¬Fiber)£¬(Char£¬LinedTxt£¬Frame£¬proc)£¬ +Buffer(Normal£¬Frame£¬Slab) +# Bucket(dynamic-struct) +@ ui +# gui/tui/wui£¬¸÷ÖÖctlrµÄ¶¨Òå¡¢±à¼­ºÍ²âÊÔ·½·¨ +# cli£¬feature-list£¬arg-list£¬²ÎÊý²âÊÔ +@ ipc & comm proto & file-format +# format(hexfmt) +# proto(hw-comm£¬pipe£¬sock)(hexfmt)£¬ +# msg/evnt/databus£¬ +@ db +# +@ io-dev +# libusb +# btn-key£¬key£¬ +# io-value£ºio-signal£¬io-analog£¬io-bus£¬io-pwm(f/d)£¬io-clk(c/f/l)£¬ +# motor(s/p/c)£¬sensor(p/c) +# timer£¬tick£¬time£¬date£¬tp£¬timetp£¬ +# ad/daÒÔaudio»òvideoµÄdrvʹÓã¬Êý¾Ý´¦ÀíµÄ³ÌÐòÒ²ÒÔaudio»òvideoµÄ³ÌÐò½á¹¹½øÐбàд£¬¿ÉʹÓÃaudio/video±à¼­Èí¼þ¶ÔÊý¾Ý½øÐб༭¡£ + + the feature of the program is disscused in other doc, and would not be +disscused here. + + + +# codelib +========= + + # ref-copy & lib-link + # general-dep-interface + + basical-module(stdio£¬file-ops£¬string£¬mem-ops) + + opt-module(thread£¬fiber£¬ipc) + + cplr-feature(TLS£¬weak£¬alias£¬)¡£aliasÓÃÓÚgnuºÍmfcÁ½ÖÖ·ç¸ñµÄ½Ó¿Úº¯ÊýµÄ¼æÈÝ£¬ÔÚ±àÒëÆ÷ÉÏÐèÒªÔÚÁ´½Óʱ½«importµÄº¯ÊýÃû½øÐÐת»»¡£ + # scrope£¬ÓÃÓÚÐèÒªÏà¶Ô¸´Ôӵģ¬Ö»Óë±à³ÌÓïÑÔÏà¹ØµÄ¹¦ÄÜ¡£ÓÃÓÚ£ºµ¥Æ¬»úϵͳ£¬sys-low-leval´úÂ룬Çý¶¯¼°ÏµÍ³»ù´¡Èí¼þ°ü£¬ÒÔ¼°Ó¦ÓóÌÐòÖÐÉÙ²¿·Ö²Ù×÷ϵͳ¹¦ÄÜÎ޹أ¬±à³ÌÓïÑÔ¼°³ÌÐòÉè¼ÆÄ£ÐÍÏà¹ØµÄ´úÂë¡£ + # Ò»¸öÄ£¿é°üº¬£º.cºÍ.hÔ´Îļþ£¬.mdlÄ£¿é»¯½Ó¿ÚÉè¼ÆÎļþ£¬.config¹¦ÄÜÅäÖÃÎļþ£¬build±àÒë²ÎÊýĿ¼£¬.recÉè¼ÆÎĵµ£¬.md»ù±¾µÄ˵Ã÷Îĵµ£¬manual.mdʹÓÃÊÖ²áÎļþ£¬_test.c, _test.sh, .stdio, .time, .timecost£¬µÈ²âÊÔÎļþ¡£¸ù¾Ý²»Í¬µÄ´úÂëʵÏÖ£¬Ò»Ð©Îļþ¿ÉÉìËõ¡£ + һЩÈí¼þ°üµÄͨÓÃÎļþ£¬ÏñLISENCE£¬AUTHORµÈ£¬Í¨³£Ê¹ÓÃÈí¼þ°üͨÓõġ£¶ÔÓÚchangelog£¬news£¬¿ÉÔÚÄ£¿éÖÐʹÓã¬Ò²¿ÉÔÚÈí¼þ°üÖÐʹÓᣠ+ mdlÎļþºÍ.hÎļþ£¬ÓÃÓÚÆä±¾Éí¹¦ÄÜÖ®Í⣬°üº¬interface¹¦ÄÜ¡£¶ÔÓÚc³ÌÐòÄ£¿é£¬Êä³ömacro£¬type£¬var£¬func¡£ + # codelib¶Ôsrc-module½øÐй¤³Ì»¯µÄorg£¬Ä£¿é¼äµÄdep£¬ÒÔ¼°¹¦ÄÜ·ÖÀ࣬¶Ô²»Í¬cpu£¬²Ù×÷ϵͳ£¬±àÒëÆ÷µÈÔËÐл·¾³µÄadepter¡£ + ¹¦ÄÜ·ÖÀàÒÔÒ»¸öcatalogÎļþÃèÊö£¬»òÒÔĿ¼Á´½ÓÎļþµÄĿ¼½á¹¹ÃèÊö¡£ + # codelibµÄ¹¦ÄÜÄ£¿éÔ´×ÔÓÚÒÑÓÐÈí¼þ°üÖУ¬Ò»Ð©Ö»Óë±à³ÌÓïÑÔÏà¹ØfeatureµÄ³éÏóºÍÄ£¿é»¯¡£ÒÔ¼°³ÌÐòÉè¼ÆÖеÄidea£¬Êµ¼ÊÎÊÌâµÄ´¦Àí·½·¨µÈ¡£ + + +@ codelib£¬¶à¸ö¹¦ÄÜÄ£¿é×éºÏ³ÉÒ»¸ölib£¬²¢ÒÔ±àÒ룬»òrefµÄÐÎʽ£¬Ê¹ÓÃlib¡£libÖеŦÄÜÄ£¿éΪpure-lang-feature£¬ÔÚstdioÓëmem-allocµÈ¹¦ÄÜÖ®Í⣬¼¸ºõ²»Ê¹ÓÃÍⲿ½Ó¿Úº¯Êý¡£ + # codelibÖеÄÿ¸öÄ£¿é¶¼ÊÇÏà¶ÔÈõñîºÏÐԵġ£ + # codelibµÄ´úÂë°üº¬Á½ÖÖʹÓ÷½·¨£¬copyʹÓúͱàÒëʹÓá£copyʹÓÃʱ£¬¸ù¾ÝhdrµÄinclude±íʾµÄdep£¬½«ÆäËüÄ£¿éһͬcopyÊä³öµ½Êä³öĿ¼¡£ + # ÆäËü³ÌÐòʹÓÃʱ£¬Ò²¿É¸ù¾ÝÔËÐл·¾³£¬ÒÔcopy´úÂë»ò¶þ½øÖÆlibÁ´½ÓÁ½ÖÖÀàÐÍ¡£Õâ¶ÔÓÚ¼õÉÙ´úÂëÈßÓà¶È£¬Í¬Ê±¼æ¹ËÈõñîºÏÐԱȽϺÃһЩ¡£ + eg: Êý¾Ý½á¹¹µÄ´úÂëÊÇͨÓôúÂ룬µ«ºÜ¶à³ÌÐòÖж¼°üº¬Ò»Ð©Êý¾Ý½á¹¹µÄ´úÂë¡£¶à¸öÈí¼þ°üÖУ¬ÕâЩ´úÂëÊÇÈßÓà¿É¸´Óõġ£ + µ«Èç¹ûÒÔ¶þ½øÖÆlibʹÓã¬Ò»¸ö³ÌÐòÖÐÐèÒª½Ï¶àlibµÄʹÓ㬽µµÍÁËÈõñîºÏÐÔ¡£ + ʹÓÃcodelib£¬¼æ¹ËÁËÄ£¿éµÄÈõñîºÏÐÔ£¬ÒÔcopyʹÓôúÂë¡£³ÌÐòÉè¼ÆµÄÈßÓà¶È½µµÍÁË£¬¶þ½øÖÆ´úÂëµ½ÈßÓà¶È¸ù¾Ýϵͳ»·¾³ÖÐÊÇ·ñ°üº¬codelibµÄ¿âÎļþ£¬Ê¹ÓÃlib½µµÍ¶þ½øÖÆÈßÓà¶È£¬ÇÒcodelibÏñlibcÒ»Ñù³ÉΪһ¸öͨÓÃlib£¬²¢²»Ôö¼Ó³ÌÐòµÄñîºÏÐÔ¡£Èç¹ûcodelibÔÚlibc¿âÖÐÒÔcopyʹÓã¬ÄÇô¶ÔÓÚÓ¦ÓóÌÐòµÄÍⲿ½Ó¿ÚÊDz»±äµÄ£¬Î´Ôö¼Ó³ÌÐòµÄñîºÏÐÔ£¬µ«½µµÍÁ˳ÌÐòÉè¼ÆºÍ´úÂëµ½ÈßÓà¶È¡£ÕâÖÖʹÓ÷½·¨£¬ÔÝÇÒ³Æ֮Ϊcode-piece¡£ + codelibÊDZà³ÌÓïÑÔÏà¹ØµÄ¿â£¬Óë±àÒëÆ÷/cpu/OSÎ޹صÄlib¡£ + µ±codelib¹ã·ºµÄʹÓÃʱ£¬ÏñlibcÒ»Ñù£¬³ÉΪһ¸ö»ù´¡libʱ£¬ÆäËüʹÓÃcodelibµÄ³ÌÐò£¬¸ù¾Ý¿ª·¢»·¾³ÖеÄcodelib¿âÒÔlibʹÓ㬶ø²»ÊÇ´úÂëcopy¡£¶øÕâ¶Ôdeveloper¶øÑÔ£¬Ô­ÓеÄcodelibÖеĺ¯Êý½Ó¿Ú²»±ä£¬×Ô¶¯Çл»³ÉlibʹÓᣠ+ # »ù´¡¹¦ÄÜÄ£¿éinterface + stdio£¬fops£¬string£¬mem-ops(alloc£¬copy£¬comp)£¬¼°ÆäÏà¹ØµÄ¹¦ÄÜÄ£¿é£¬Îª»ù´¡¹¦ÄÜÄ£¿é£¬ÒÔÒ»¸öÕûÌ壬ΪÆäËü¿âµÄdepÄ£¿é¡£ÆäËüÄ£¿éͨ³£Ö»ÒÔ±à³ÌÓïÑԺͻù´¡¹¦ÄÜÄ£¿éΪdep¡£½µµÍÄ£¿éµÄñîºÏÐÔ¡£ + stdioºÍfopsÖ»ÒÔinterfaceÌṩ£¬¸ù¾Ý²»Í¬µÄÔËÐл·¾³£¬Ê¹Óò»Í¬µÄ´úÂëʵÏÖ¡£Õâ¶ÔÓÚ²Ù×÷ϵͳ»·¾³ºÍµ¥Æ¬»ú»·¾³¶¼¼æ¹ËºÍͨÓᣠ+ eg£º³ÌÐòÖеĶàÓïÑÔ¹¦ÄÜ£¬ÔÚlibcÖÐÓÐʹÓ㬴úÂëµÄʹÓÃÒÀÀµÓÚÎļþ²Ù×÷¡£ÔڷDzÙ×÷ϵͳ»·¾³£¬»òÊÇδʹÓÃÎļþ¹¦ÄܵÄrtosÖУ¬Îļþ¼´¿Éº¯ÊýÒÔÎļþÃûºÍ´æ´¢Æ÷µØÖ·µÄ¹ØÁª±íʵÏÖ´úÂëµ½¼æÈÝ¡£ÕâÑù£¬¶àÓïÑÔ¹¦ÄܵĴúÂëÔÚ²»Ê¹ÓÃÎļþϵͳµÄ³ÌÐòÖÐÒ²¿ÉʹÓᣠ+ ÕâʹcodelibµÄ´úÂ븴ÓÃÐÔµÃÒÔÌáÉý£¬¸÷ÖÖ³ÌÐòʹÓÃcodelib£¬½µµÍ³ÌÐòÉè¼ÆºÍ¶þ½øÖÆ´úÂëµÄÈßÓà¶È¡£ + # »ù´¡¹¦ÄÜÄ£¿éÖУ¬°üº¬thread£¬fiber£¬ipc£¬ÓÃÓÚ¹¹³É²Ù×÷ϵͳ»ù±¾¹¦ÄÜ¡£ + һЩµ¥Æ¬»ú»·¾³²»ÐèÒª¶àÈÎÎñ²¢·¢¹¦ÄÜ£¬ÕâЩ¹¦ÄÜÄ£¿éÅäÖóÉÏà¹ØµÄnull²Ù×÷¡£ÔÚ´úÂë±àÒëʱ£¬²»°üº¬Ïà¹Øº¯ÊýµÄµ÷Óá£Ïà±ÈifdefµÄºê¶¨Ò忪¹Ø£¬´úÂëµ½¿É¶ÁÐÔ¸üºÃ¡£ + + + + diff --git a/devspec.en_US/file b/devspec.en_US/4.1.classical.txt old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/4.1.classical.txt diff --git a/devspec.en_US/file b/devspec.en_US/4.2.data-structure-algorithm.txt old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/4.2.data-structure-algorithm.txt diff --git a/devspec.en_US/5.0.copying-lisence.txt b/devspec.en_US/5.0.copying-lisence.txt new file mode 100755 index 0000000..882b71e --- /dev/null +++ b/devspec.en_US/5.0.copying-lisence.txt @@ -0,0 +1,125 @@ + + +# soft-pkg type +=============== + + + +# windows & linux & skeletone-linux +=================================== + + + + + + + + + + + + + + + + +@ ÔÚwindowsÏ£¬³ÌÐòÒÔϵͳºÍÓ¦ÓýøÐл®·Ö£¬ÒÔAPIΪ½Ó¿Ú¡£linuxÖÐͨ³£²»¾ßÓÐÏÔʽÒâÒåµÄAPI£¬¶øÊÇfree-developµÄ·½·¨£¬ÒÔÈí¼þ°üµÄ +·ÖÀà½øÐв»Í¬¹¦ÄܺÍϵͳ¼Ü¹¹µÄ×éÖ¯¡£skeletone-linuxÔÚlinuxµÄfree-develop»ù´¡ÉÏ£¬Ôö¼Ó¼Ü¹¹µÄ¸ÅÄºÍAPIµÄ¸ÅÄî¡£ +# ½Ó¿ÚµÄʹÓã¬Ê¹µÃÈí¼þµÄ¼æÈÝÐԽϺá£Ò»¸öÈí¼þÔÚubuntu 10ÉÏÔËÐÐʹÓã¬ÔÚubuntu 20ÉÏ»òÐíÐèÒª¸üн϶à¿â²Å¿ÉʹÓá£Ê¹Óýӿڣ¬API +µÄ¹æ·¶£¬Ê¹µÃϵͳ¿ÉÌṩ½ÏºÃµÄÓ¦ÓóÌÐò¼æÈÝÐÔ¡£µ«½Ó¿Ú´øÀ´µÄ³É±¾£¬ÒÔ¼°Èõ»¯Á˳ÌÐò¿ª·¢µÄÁé»îÐÔ£¬ÊÇʹÓýӿڵIJ»×ã¡£Ò»¸ö½Ó¿Úº¯Êý£¬ +Ò»¸ö½Ó¿Ú³ÌÐòÐèÒª½Ï¶àµÄ²âÊÔ¹ý³Ì¡£Ê¹Óýӿڣ¬ÔÚϵͳºÍÓ¦ÓÃÈí¼þÖ®¼ä²»¿É×Ô¶¨Ò庯ÊýÀ´Ôö¼Ó¡¢À©Õ¹¹¦ÄÜ¡£Ê¹ÓÃijһÖּܹ¹£¬Òâζ×ųÌÐò +Éè¼Æ·½·¨µÄÏà¶Ô¹Ì»¯£¬µ«Õâ»òÐíÄܼõ»¯³ÌÐò¿ª·¢¡£ +# Ïà¶ÔÓÚwindowsϵÄʹÓÃϵͳ¼Ü¹¹µÄ˼·¶Ôϵͳ½øÐÐÀí½â£¬linuxʹÓÃÈí¼þ°ü¼°Æä·ÖÀàµÄ·½·¨¡£ÕâÔÚÒ»¶¨³Ì¶ÈÉÏÔö¼Ó³ÌÐò¿ª·¢µÄÁé»îÐÔºÍ +×ÔÓÉÐÔ¡£linuxÈí¼þ°üµÄ·¢Õ¹£¬¾ÍÏñÊÇÒ»ÖÖÌÙÂûÖ²ÎïµÄÉú³¤¡£skeletone-linuxµÄÈí¼þ°ü·ÖÀàµÄ·½·¨£¬¾ÍÏñÊǽ«Ò»Ð©Ïà½üµÄ¹¦ÄÜ·ÖÖ§½øÐÐ +¹Ì¶¨µÄÉþ×Ó¡£ +# linuxÈí¼þ°üʹÈí¼þ¹¦ÄܺʹúÂëÉϵÄËéƬ»¯£¬µ«ÒÔһЩ·½·¨£¬½øÐйéÀàʹÓã¬ËéƬ»¯È´ÊÇÈí¼þÄ£¿é»¯¡¢µÍñîºÏµÄ½ÏºÃÌåÏÖ¡£ + +@ windows & linux & skeletone-linux +# ÉÌÒµ»¯£¬·Ç¿ªÔ´µÄwindows£¬Ê¹µÃϵͳӦÓÃÓÚһЩ»·¾³¡£·Ç¿ªÔ´´øÀ´µÄϵͳÏà¶Ô°²È«ÐÔ¡£ÉÌÒµ»¯´øÀ´µÄÊÇÉÌÒµ»·¾³Ê¹ÓÃʱ¶ÔÈí¼þµÄ¼¼Êõ +Ö§³Ö¡£ÉÌÒµ»¯µÄ¿ª·¢£¬¸ü×¢ÖسÌÐòÔ±µÄ֪ʶ²úȨ£¬Ê¹µÃ³ÌÐòÔ±µÄÒ»·Ý¸ûÔÅ£¬»ñµÃÒ»·ÝÊÕ»ñ¡£ +# GNU/LinuxµÄopen£¬free£¬×ÔÓÉ»¯£¬ËÉÉ¢»¯£¬´øÀ´¸ü¿íËɵĿª·¢»·¾³¡£¶ÔÓÚһЩnew featureµÄ¿ª·¢£¬ÎÒÏë»òÐí³ÌÐòÔ±¶¼»áÓÐ͵ÀÁµÄʱºò£¬ +ËæÒâÔÚ²»Í¬µÄÈí¼þ°üÖж¨ÒåһЩº¯Êý£¬´øÀ´¿ª·¢Ê±½ÏÉÙµÄÏÞÖÆ¡£ÕâÔÚ³ÌÐò·¢ÐаæÖнøÐе÷Õû¡£´Ó×î³õµÄGNU/Linux²Ù×÷ϵͳµÄ¹¦ÄܺÍÈí¼þ°ü£¬ +µ½ÏÖÔÚ£¬guiµÄ´°¿Ú¹ÜÀíÆ÷¾ÍÓжàÖÖÈí¼þ°ü¡£Êý¾Ý¿â³ÌÐò£¬°üº¬²»Í¬Ê¹Óó¡¾°µÄmysql£¬sqlite¡¢redis¡£GNU/Linux´øÀ´µÄ¿íËÉ»·¾³£¬Ê¹µÃ +Èí¼þµÄ·¢Õ¹»·¾³½ÏºÃ¡£ +# skeletone-linuxµÄÊÇGNU/LinuxµÄÍØÕ¹£¬ÔÚһЩ¹«ÓõÄϵͳµ×²ãÈí¼þÉÏ£¬Ê¹Óøü¿íËɵÄMITµÄlisence£¬²Î¿¼windowsʹÓýӿںÍAPIµÄ +¸ÅÄϵͳµÄʹÓû·¾³Ïà¶Ô¿ÉÒÔ¸ü¶àһЩ£¬±ãÓÚ¿ª·¢ÈËÔ±ºÍÓû§ÐγÉͨÓᢻù´¡¡¢well-knownµÄ¸ÅÄîºÍ˼Ï롣Ϊ»ùÓÚ¸Ãϵͳ¿ò¼ÜµÄÓ¦Óòã +ÌṩͨÓõÄ֪ʶ¸ÅÄîÇ°ÌᡣһЩÉÌÓÃÈí¼þÒòΪGPLµÄlisence£¬ÎÞ·¨ÔÚGNU/LinuxϵͳÉÏʹÓ㬶ø»ùÓÚskeletone-linuxµÄϵͳÊÇMITµÄlisence£¬ +ÒÔ¼°½Ó¿ÚºÍAPIµÄ¶¨Ò壬ʹµÃÉÌÒµ³ÌÐò¾ßÓÐÏà¶Ô½ÏºÃµÄ¿ª·¢»·¾³¡£µ«ÌÈÈôûÓÐGPLµÄlisence£¬»òÐílinuxÏÂÈÔÈ»ÊÇÉÌÒµÈí¼þ¾Ó¶àµÄϵͳ»·¾³¡£ +GPLµÄlisence£¬Ïà¶ÔÓÐÀûÓÚ¿ªÔ´Èí¼þµÄ·¢Õ¹¡£Í¨³£½¨ÒéÒÔGPL»òMITµÄlisence¿ª·¢Èí¼þ£¬¶ø²»ÊÇÉÌÒµ»ò·Ç¿ªÔ´µÄÈí¼þ¿ª·¢¡£ + +@ Èí¼þ +# ÉÌÓÃÈí¼þ£¬¶ÔÓÚһЩÏȽøºÍ¸ß¼¶µÄ¼¼Êõ£¬ÒÔprojectµÄÐÎʽ×éÖ¯¿ª·¢£¬¶ÔÓÚһЩ¸ß¶ËµÄ£¬ÐèҪ֪ʶ²úȨ±£»¤µÄÈí¼þ£¬ÓиüºÃµÄ»·¾³ºÍ¶¯Á¦ +È¥¿ª·¢¡£ +# ¿ªÔ´Èí¼þ£¬¶ÔÓÚһЩÒѾ­Í¨Óû¯µÄ¼¼Êõ£¬ÒÔGNUµÄÐÎʽ½øÐÐfreeµÄ¿ª·¢¡£¶ÔÓÚ¸öÈ˵ļ¼ÊõÉÁ¹âµã£¬´øÀ´µÄ¸¶·ÑÈí¼þ£¬Í¨³£½¨ÒéÒÔopen & +non-free½øÐпª·¢£¬Ê¹ÓÃÏà¶ÔÓÚGPL¸ü²àÖØÓÚ֪ʶ²úȨµÄlisence¡£¿ªÔ´£¬Ê¹µÃ¼¼Êõ·¢Õ¹¸üºÃ£¬non-free£¬ÔÚÒ»¶¨³Ì¶ÈÉ϶ÔÈí¼þ×÷ÕßµÄ֪ʶ +²úȨºÍÉÌÒµÀûÒæ½øÐб£»¤¡£¶ø¿ªÔ´±ØÈ»»á´øÀ´non-freeµÄ·Ç³Ö¾Ã£¬ÕâʹµÃÒ»¸ö³ÌÐòµÄideaºÍÒ»ÖÖ¼¼Êõ£¬ÔÚ×î³õÒÔopen & non-free¿ÉÒÔ»ñÀû£¬ +¶øÔÚһЩʱ¼äºó£¬Í¬ÀàÈí¼þÔö¶à£¬´øÀ´µÄÊǸÃÏî¼¼ÊõµÄ·¢Õ¹¸üͨÓû¯¡£ÓÉnon-freeµÄ¿ª·¢Õߣ¬¶ÔÕâÀàideaºÍ¼¼Êõ½øÐÐÆÀ¹À¡£±»·ÂµÄÔ½¶àµÄ¼¼Êõ¼¼Êõ£¬Ïà¶Ô¿ª·¢ÈËÔ±µÄÈϿɶȸü¸ß£¬¸üÓÐÀûÓڸü¼ÊõµÄÉú´æ¡£ÀýÈ磺Ӳ¼þÏÔ¿¨µÄÇý¶¯Í¨³£¶¼ÊÇ·Ç¿ªÔ´µÄ£¬Õâʱ¶ÔÓ²¼þÉè¼ÆµÄÒ»ÖÖÖ§³Ö²úȨµÄ +±£»¤¡£ÀýÈ磺J-Link³ÌÐòÏÂÔØÆ÷µÄÇý¶¯×î³õÒ²ÊÇ·Ç¿ªÔ´µÄ£¬¶øÔÚһЩʱ¼äºó£¬Ò²ÓÐÁË¿ªÔ´µÄÇý¶¯³ÌÐò£¬Ê¹µÃÕâÏî¼¼Êõ¸üͨÓû¯¡£Ò»¿îÔÚ +GNU/LinuxÏ¿ÉʹÓõijÌÐòÏÂÔØÆ÷£¬Ïà¶ÔÆäËü³ÌÐòÏÂÔØÆ÷£¬Í¨³£À´ËµÓû§ÈËȺ¸ü¹ã·º£¬»òÊǼ¼ÊõÉϸüÓÅһЩ¡£Õâʱ¶Ô¸öÈË»òСÍŶӿª·¢µÄÈí¼þ +µÄ½¨ÒéÐÔµÄlisence¡£ + Õâ¶ÔһЩÉÌÒµÈí¼þÔÚ¼¼Êõ֪ʶ²úȨ֮³õ£¬¿É»ñÀû£¬Ëæ׿¼ÊõµÄ·¢Õ¹£¬Èí¼þ¸üͨÓû¯¡£¼´Ê¹Ò»Ð©ÉÌÓÃÈí¼þδ¿ªÔ´£¬Ò²»áÓпªÔ´Èí¼þ·¢Õ¹£¬ +³ÉΪÀàËƹ¦ÄܵÄÈí¼þ£¬¶øһЩÉÌÓòÉÓÿªÔ´»ò²¿·Ö¿ªÔ´£¬»ò»ù´¡²¿·Ö¿ªÔ´µÄ˼Ï룬¸üÓÐÀûÓÚÉÌÓÃÈí¼þµÄ·¢Õ¹¡£Í¬Ê±¿ªÔ´´øÀ´µÄ¼¼Êõ½»Á÷£¬ +ÉõÖÁ¿ÉÒÔÊÇÉÌÒµÈí¼þµÄÒ»ÖÖ"´úÂëÉóºË"£¬ºÍ"¼¼Êõ½è¼ø"¡£ +# Ãâ·ÑµÄ¿ªÔ´Èí¼þ£¬¶ÔһЩ¹²Óõģ¬Í¨ÓõÄÈí¼þºÍ¼¼Êõ£¬Ê¹ÓÿªÔ´ÇÒÃâ·ÑµÄlisence£¬Ê¹µÃһЩÈí¼þºÍ¼¼Êõ³ÉΪwell-known£¬basicalµÄ¼¼Êõ¡£ +¾ÍÏñÊý¾Ý½á¹¹ºÍ»ù´¡µÄËã·¨£¬ÓëcÓïÑÔÒ»Ñù£¬ÒÔͨÓõļ¼Êõ£¬×÷Ϊ¿ª·¢Ê±µÄ¼¼Êõ»ù´¡£¬¼¼ÊõÇ°Ìᣬ¼¼Êõ±³¾°¡£Ò»¸öÖ»»áʹÓÃcÓïÑÔµÄif/else/ +while/forÓï¾äµÄ³ÌÐòÔ±£¬ºÍÒ»¸ö»¹»áʹÓÃÊý¾Ý½á¹¹£¬»ù´¡Ëã·¨£¬ÒÔ¼°Ò»ÖÖ²Ù×÷ϵͳµÄ³ÌÐòÔ±£¬¿ª·¢µÄ´úÂëÖÊÁ¿ÊDz»Í¬µÄ¡£¶øopen & freeµÄ +Èí¼þ°üºÍ¼¼Êõ£¬Ê¹µÃ¸ÃÈí¼þ°üºÍ¼¼Êõ³ÉΪ³ÌÐòÔ±µÄ»ù´¡ÖªÊ¶£¬ÔÚ¿ª·¢Ê±¶Ô³ÌÐòÉè¼Æ˼Ïë¸üºÃһЩ£¬ÔÚ²»Í¬µÄ³ÌÐòÔ±½øÐÐÏà¶Ô¸´ÔӵŦÄÜʵÏÖ +ʱµÄ¼¼Êõ½»Á÷¸üºÃһЩ¡£ºÃ±ÈÊÇʹÓûã±àÓïÑÔÄÜЩµÄ³ÌÐò¹æÄ££¬ºÍcÓïÑÔÏà±È£¬cÓïÑԵijÌÐò¹æÄ£¿ÉÒÔ¸ü´óһЩ£¬¶øc++µÄOOP˼Ï룬ÒÔ¼°AOP/ +SAOPµÄ±à³Ì˼ÏëʹµÃ¿ª·¢ÈËÔ±¿ÉÒÔ½øÐиü¸´ÔÓµÄÈí¼þ¿ª·¢¡£¶øÕâЩеļ¼Êõ£¬¼´ÊÇÒ»ÖÖ¼¼Êõ»ù´¡£¬¼¼ÊõÇ°Ìᣬ¼¼Êõ±³¾°¡£ÀýÈ磬ÕýÔò±í´ïʽ +ÊÇlinux϶Ô×Ö·û´®¸ñʽ»¯´¦ÀíµÄÒ»ÖÖ¼¼Êõ¡£µ±ÕýÔò±í´ïʽÒÔÒ»Ö̶ֹ¨µÄ½Ó¿Ú£¬¿íËɵÄlisenceÌṩʱ£¬Õâʱ³ÌÐò¿ª·¢ÈËÔ±¿ÉÒÔ¸üºÃµÄ¿ª·¢ +³ÌÐò¡£Í¬Ê±ÔÚÓëÆäËü³ÌÐòÔ±½øÐм¼Êõ½»Á÷ʱ£¬¾ßÓÐÒ»¸ö"¼¼ÊõÇ°Ìá"£¬Ò»¸ö¼òµ¥µÄ"ÕýÔò±í´ïʽ"µÄ³Æºô£¬¼´¿É°üº¬Ðí¶à¶Ô¸´ÔÓ×Ö·û´®¸ñʽµÄ +ÓïÑÔÃèÊö¡£ +# ÉÌÓÃÈí¼þÊÇÐÖ³¤£¬¿ªÔ´Èí¼þºÍÃâ·Ñ¿ªÔ´Èí¼þÊÇæ¢Ãá£Ò»Ìõ¿ã×Ó£¬¸ç¸ç³¤¸ßÁË´©²»ÉÏ£¬¸øµÜµÜ´©£¬µÜµÜ³¤´óÁË£¬¸øÆäËüµÜµÜ´©¡£Ò»ÖÖ¼¼Êõ +µÄ·¢Õ¹£¬´Ó×î³õµÄ¸ß¶Ë¼¼Êõ£¬µ½³£ÓõÄÈí¼þ£¬µ½Í¨Óõļ¼Êõ»ù´¡£¬»òÐí¿ÉÒÔÒÔÕâ¸öÀý×ÓÀ´±í´ï¡£ÀýÈ磺¼ÆËã»ú¼¼ÊõÔÚ50Äê´úʱÊǾüʼ¶µÄ +¸ß¾«¼â¼¼Êõ£¬Ö»ÓпÆѧÈËÔ±¿ÉÒÔʹÓ᣶øÔÚ΢Èí/intelʱ´ú£¬¼ÆËã»úÓ²¼þºÍ²Ù×÷ϵͳ£¬´Ó¾ÉʱÍõлÌÃÇ°Ñ࣬·ÉÈëÑ°³£°ÙÐÕ¼Ò¡£ÔÚµ±Ç°µÄР+ʱ´ú£¬¼ÆËã»ú¼¼ÊõÒÔ³ÉΪ¹²ÓÃÉèÊ©ºÍ»ù´¡£¬³ÉΪȫÃñÖÜÖªµÄ¼¼Êõ±³¾°¡£skeletone-linuxµÄ¿ªÔ´Ãâ·ÑµÄÈí¼þ£¬¼´ÊÇÔÚÕâÒ»»·¾³ÏÂÃÈÉúµÄ¼¼Êõ +¹ÛÄî¡£ + + +@ lisence¡£ +# lang-support/kernel/rtl,ÕâЩ±à³ÌÓïÑԺͲÙ×÷ϵͳÏà¹ØµÄ£¬Ê¹ÓÃopen & freeµÄmit¡£Ê¹µÃ²Ù×÷ϵͳµÄÊÊÓÃÐÔ¸ü¹ã·º¡£ +# skeletoneÈí¼þ£¬²Ù×÷ϵͳ¿ò¼ÜÏà¹ØµÄ»ù´¡Èí¼þ£¬Ê¹ÓÃopen & freeµÄmit£¬²¢ÇÒ³ÌÐòÊÇshell-lizationµÄ£¬Ê¹µÃϵͳµÄÊÊÓÃÐÔ¸ü¹ã·º¡£ +# LDDK/LSDK/LADK£¬³ÌÐò¿ª·¢¿â£¬ÓÃÓÚÌṩ"»ù´¡"¹¦ÄÜ£¬Ê¹ÓÃopen & freeµÄmit¡£Ê¹µÃϵͳµÄÊÊÓÃÐÔ¸ü¹ã·º¡£ +# midwareÖмä¼þ£¬Ê¹ÓÃGPL»òÆäËü£¬ÉõÖÁÊÇһЩ·Ç¿ªÔ´µÄ¡£ËüʹµÃһЩӦÓü¼ÊõµÄ¿ª·¢£¬µÃÒÔ¸üºÃµÄ°æȨ±£»¤¡£ +# devdrvÉ豸Çý¶¯£¬Í¨ÓÃÓ²¼þʹÓÃopen & freeµÄmit»òGPL¡£Ò»Ð©ÉÌÒµÓ²¼þµÄÇý¶¯³ÌÐòͨ³£ÊÇÉÌҵ֪ʶ²úȨ±£»¤µÄ£¬Ê¹ÓÿÉʹÓ÷ǿªÔ´ +·ÇfreeµÄlisence¡£µ«½¨ÒéÐÔµÄʹÓÃGPLµÄlisence£¬·ñÔòʧȥÁË¿ªÔ´Èí¼þµÄ˼ÏëºÍ¾«Éñ£¬ÑÜÉúΪwindowsÀàËƵÄϵͳ»·¾³¡£ +# + +@ skeletone-linux +# skeletone-linux²àÖØÓÚ±à³ÌÓïÑÔÈí¼þ£¬Linuxϵͳ¿ò¼ÜÈí¼þ£¬³ÌÐò½Ó¿ÚºÍAPI¶¨Ò壬ÒÔ¼°²¿·Ö³£Óã¬Í¨Ó㬻ù´¡ÐÔµÄϵͳ¹¦ÄÜ¡£ +# pkg-builderÊÇÓÃÓÚskeletone-linuxµÄÈí¼þ°ü¿ª·¢¹¤¾ß£¬¶ÔÓ¦ÓÃÈí¼þµÄ¿ª·¢£¬²»½øÐй¦ÄÜÍØÕ¹¡£ +# bzboxÊǽű¾³ÌÐòshell-lizationµÄ»ù´¡¡£bzsh¼°Æäshlib¸ü²àÖØÓÚΪshellʵÏÖ±à³ÌÓïÑÔµÄÓï·¨ºÍ¹¦ÄÜ»ù´¡¡£ +# LinuxAppDevLibºÍcompolibsÊÇÏà¶Ô²»ÊÇwell-knownµÄʹÓÃÐÎʽ£¬µ«±ÊÕßÆÚÍûʹ֮ÄܳÉΪÏñc++Ò»ÑùµÄÒ»ÃųÌÐòÉè¼ÆµÄ¼¼ÊõÇ°ÌáºÍ¼¼Êõ±³¾°¡£ + +@ user-linux£¨ÔÝʱÕâô³Æºô£© +# skeletone-linuxÖ»°üº¬µ×²ãµÄ¼Ü¹¹Èí¼þ°üºÍÖÜÖªµÄ»ù´¡Èí¼þ°ü£¬ËùʹÓõĿª·¢¹¤¾ßͨ³£Ò²²»°üº¬GUI³ÌÐò¼°Ïà¹ØµÄ¼¼Êõ¡£¶øuser-linux +°üº¬GUI£¬²¢ÒÔguiµÄ½Ç¶ÈÌṩһЩÀàËÆskeletone-linuxµÄ»ù´¡Èí¼þ°ü¡£ËüÊǶÔGUIºÍDesktopEnv£¬PhoneEnvµÄ½Ó¿Ú³éÏó¡£ + + + + + + + + + + + + + +@ ¼ÙÉèÔÚÒ»¸ö½Ï²îµÄ¼ÆËã»ú»·¾³Ï½øÐпª·¢£¬Èí¼þËùÐèÒªµÄ»ù±¾Ë¼Ïë¡£ +# Ö»ÔÚ¹«Óõģ¬ÏµÍ³µÄ£¬½Ïµ×²ãµÄÈí¼þÖÐʹÓá£ÒòΪ³ÌÐòµÄ¿ª·¢¼¼ÊõµÄ·¢Õ¹ÊÇѸËٵģ¬ÔÚÓ¦Óò㲻¾ÖÏÞÓÚÕâÑùµÄ³ÌÐòÉè¼Æ˼Ï룬¶øʹÓà +µ±ÏÂÁ÷Ðеģ¬Í¨Óõģ¬¿ª·¢ÈËԱϲºÃµÄ³ÌÐòÉè¼Æ˼Ïë¡£»òÐíÒÔÒ»¸ö²»ÊǷdz£Ïà½üµÄÀý×ÓÀ´±ÈÓ÷£¬Ìú´òµÄÓªÅÌÁ÷Ë®µÄ±ø¡£ÏµÍ³ÊÇÒ»¸ö´¢Îï¹ñ£¬ +ÖÁÓÚ·Åʲô¶«Î÷£¬¸÷²»Ïàͬ¡£ + +@ µ×²ãÈí¼þµÄÈõñîºÏÐÔ£¬ÔöÇ¿ÄÚ¾ÛÐÔµÄ˼Ïë¡£ +# shell-lization£¬Ê¹ÓÃshell½Å±¾£¬¼õÉÙ²»Í¬µÄ³ÌÐòºÍ½Å±¾³ÌÐòÀàÐÍ£¬¼°Ïà¹ØÈí¼þ°üµÄʹÓá£ÀýÈçmake³ÌÐò¼ò»¯Îªbuild-pkg¡£ + +@ txt-basedµÄ˼Ïë¡£ÄÜʹÓÃÎı¾±íʾµÄ£¬¾¡Á¿²»Ê¹ÓÃרÓóÌÐòµÄÉè¼ÆÎļþ¡£ +# ³ÌÐòµÄÎĵµÍ¨³£Ê¹Ó÷ÇÅÅ°æÈí¼þµÄtxtÎĵµ¡£Ê¹ÓÃmd/catalogµÈÎı¾±ê¼Ç£¬ÓÃÓÚÊä³ö´øÅÅ°æµÄhtmlÎĵµ£¬ÒÔ¼°pdfµÈ£¬Ôö¼ÓÎĵµ¿É¶ÁÐÔ¡£ +# һЩͼ±í£¬Ê¹ÓÃ-¡¢=¡¢>¡¢|µÈasciiÂë×Ö·û×é³ÉµÄʾÒâͼ¡£Ò»Ð©½Ï¸´ÔÓµÄͼʹÓÃSVGÎı¾¸ñʽµÄÊÊÁ¿Í¼Îļþ£¬ÔÚGUI»·¾³Ï¿ÉÒÔÓÐ½ÏºÃµÄ +ÔĶÁÐÔ¡£Í¼±íµÄ½á¹¹ÀàÐÍ°üÀ¨treeÀàÐͺÍgraphÀàÐÍ£¬ÒÔ¼°ÆäËü¸´ÔÓµÄÀàÐÍ¡£¶øÔÚ³ÌÐò¿ª·¢ºÍʹÓÃÖУ¬table¡¢tree¡¢graph£¬ÊǶÔÊý¾ÝºÍ +ÄÚÈݵij£ÓÃ×éÖ¯·½Ê½£¬ÕâʱÓÉÈ˵Ä˼άϰ¹ß¶ø¶¨µÄ¡£table½á¹¹µÄʹÓÃcvsÎļþ£¬¿ÉÔÚÎı¾±à¼­Æ÷ʹÓã¬Ò²¿ÉÔÚexelÖÐʹÓá£tree½á¹¹µÄ£¬ +ÉÙ²¿·ÖÊý¾Ý£¬Ê¹ÓÃ"×Ö·û»­"£¬ÎļþϵͳµÄĿ¼½á¹¹£¨gui»·¾³ÏµÄÎļþä¯ÀÀÆ÷µÄÊ÷Ðνṹ¼´ÊÇÒ»¸ö¼òÒ×µÄtree½á¹¹µÄä¯ÀÀÆ÷£©£¬SVGÎļþ +¿É»ñµÃ½ÏºÃµÄÏÔʾ¡£¶ÔÓÚgraphͼÐνṹ£¬µäÐ͵ÄÈí¼þ°üÒÀÀµ¹Øϵͼ£¬Ê¹ÓÃ.dotºÍ.SVGÎļþ±íʾ¡£ +# ³ÌÐò¾¡Á¿Ê¹ÓÃshell½Å±¾³ÌÐò£¬Ïà±ÈÓÚ¶þ½øÖƳÌÐò£¬ÔĶÁÐÔ¡¢°²È«ÐÔ¡¢Ò×ÓÃÐÔ¸üºÃһЩ¡£ diff --git a/devspec.en_US/file b/devspec.en_US/6.0.pkg-structure.txt old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/6.0.pkg-structure.txt diff --git a/devspec.en_US/6.1.version-code.txt b/devspec.en_US/6.1.version-code.txt new file mode 100755 index 0000000..894c1a5 --- /dev/null +++ b/devspec.en_US/6.1.version-code.txt @@ -0,0 +1,38 @@ + + +# version code +============== + + every soft-pkg uses tree stage version code. + the first id is main version id, it shows the main architecture of a soft +pkg. + the second id is function feature version id. it shows function feature +appended. + the third id is patch version id. when the function feature version is +improved, increase patch version id for it. + the fourth id is publish date string. it save date info for a version code. + + syntax: +v1.1.1-20221122-LTS +v..-[-] +VER1: main version code, it means the architecture of the src-pkg. +VER2: minor version code, function feature version code. increase it when the + new feature is appended. +VER3: patch version code, it means that some bug or little improve is patched + into the src-pkg. +VDATA:publish date version code, others can read the date info clearly. +VSFX: suffix version code, it's the assistant version info for a src-pkg. the + classical sfx 'LTS' means 'long time support', and it will be supported + in several years. 'vX.0.X' must be a 'LTS' version, it's an actual + meaning of publish version for src-pkg, and defined the external function + or cmdline interface. + +# auto tools +============ + + version id is managed by 'versionid' script program in devutils. it +increase different stage of version id, and searching version info in src dir, +modify them at the same time. + this program will be integrated in build-pkg, it's a sub-cmd of build-pkg. + + diff --git a/devspec.en_US/file b/devspec.en_US/6.2.pkg-file-name-format.txt old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/6.2.pkg-file-name-format.txt diff --git a/devspec.en_US/6.3.general-file-type.txt b/devspec.en_US/6.3.general-file-type.txt new file mode 100755 index 0000000..2a8e37f --- /dev/null +++ b/devspec.en_US/6.3.general-file-type.txt @@ -0,0 +1,26 @@ + + + general file types: +.md: text doc file with markdown grammar. +.conf: linux config file. +.ini/.imi: ini config file. imi is a extend version of ini. +.catalog/.cata: catalog structure files. +.rec/.csv: record files. +.xml: general config file and data file. +.db: sqlite database file. +.dot/.svg: graphic file. + + + there are many compress file types in linux. such as +zip, 7z, rar, gzip, bzip2, lzma, xz, lzo, lz4. + + general compress and archive files: +tar: archive file. +zip: traditional compress file. +gzip: get the balance of compress rate, compress speed, decompress speed. +xz: the best compress rate, but more slow then others. it is use for static + data compression. +lz4: fast compress. it can be used for some paramter files. + + + diff --git a/devspec.en_US/6.4.src-pkg-dir-structure.txt b/devspec.en_US/6.4.src-pkg-dir-structure.txt new file mode 100755 index 0000000..e10c61d --- /dev/null +++ b/devspec.en_US/6.4.src-pkg-dir-structure.txt @@ -0,0 +1,73 @@ + + +# dir of src pkg +================ + + look at the directory of sample project, and the meaning of every dir is: + +@ build: pkg build info. it's equal to a makefile, it guide the compiler to + build the src-pkg. +@ bin: script executable programs. +@ shlib: shell script library. +@ doc: include all document files. +@ src: c/cpp src code dir. +@ lib: build as a static lib, and link to the other program. +@ testing: test script dir. use scripttest to test it. +@ res: resource file beyound binary and src-code. such as config file, data + files, fonts, pictures, and so on. +@ readme.md/readme.txt/README.txt/README.md. soft-pkg introduce file. + + + +# document dir +============== + + the dir of 'doc' include many document files: + +@ LISENCES/COPYING. it shows the intellectual property rights of a soft-pkg. +# AUTHORS/authors/authors.txt/AUTHORS.txt. it include author info. +# THANKS. record the person helps to the soft-pkg. +# BUILD-DEP. it record the dependent pkg name, website, for building. +# EXEC-DEP. it record the dependent pkg name, website, for executing. +# NEWS/news.txt. it shows the new feature in current version. +# ChangeLog/ChangeLog.txt. software update record every function feature + version of the pkg. +# INSTALL/install/install.txt/INSTALL.txt. compile build step document. +# TODO. the features to be developed, the bug to be fixed. +# README.dev. it's a doc file for developers who want to develop for this soft + pkg. + +# UM.man.en_US/UM.man.zh_CN. user manual file in man format with different + language. +# API-Doc. if the soft-pkg is a library, it include an API-Doc dir for it + instead of user manual. +# example. example dir. sometimes, testing dir include many examples. so it is + not needed normally. +# tutorial. tutorial files for soft-pkg using. it uses ttyrec, or gif file. +# design. if the soft-pkg uses graphical design tools, such as uml diagram. or + it stores txt/md design doc files. +# tagdoc. it stores feature list, demand text, iead note, and so on. it uses + tag-doc to save different type of info. delete infos except feature list when + the pkg would be published. +# tagdoc£¬tagdoc¼Ç¼µÄһЩÎĵµµÄ±£´æ¡£tagdoc°üÀ¨£º¹¦ÄÜÃèÊöÎÄ×Ö£¬feature-list£¬todolist£¬ +# + + + + + +@ Ò»¸öÈí¼þ°ü°üº¬µÄÎĵµ£¬±£´æÔÚdocĿ¼ÖС£ +# LISENCESÎļþ£¬¶ÔÈí¼þ°üµÄʹÓÃȨÏÞ¡¢ÓÃ;µÄ˵Ã÷¡£ +# readme.md/readme.txt/README.txt/README.md£¬ÒÔmdÓï·¨±àдµÄ˵Ã÷Îĵµ£¬°üº¬¹¦ÄÜÓÃ;¸ÅÊö£¬feature-list +# author/author.txt/AUTHOR/AUTHORMtxt£¬°üº¬Èí¼þ¿ª·¢ÕßÐÅÏ¢ +# changelog/changelog.txt£¬Èí¼þ°æ±¾¸üÐÂʱµÄ¹¦ÄܼǼ¡£ +# install/install.txt/INSTALL/INSTALL.txt£¬³ÌÐò±àÒë¡¢°²×°Îĵµ¡£ +# todolist£¬ + +# man-pages£¬man/info°ïÖúÐÅÏ¢¡£ +# API-Doc£¬Èç¹ûÊÇlib¿â£¬°üº¬Ò»¸öapiÎĵµÄ¿Â¼¡£ +# example£¬Ê¹ÓõÄÀý×Ó³ÌÐò¡£ +# tutorial£¬³ÌÐò¡¢libʹÓõÄÀý×Ó£¬ÒÔgif¡¢ttyrec¡¢ÊÓƵµÈ¸ñʽ±£´æ¡£ +# design£¬³ÌÐòÎÄ×ÖÐÔµÄÉè¼Æ˵Ã÷Îĵµ¡£ +# tagdoc£¬tagdoc¼Ç¼µÄһЩÎĵµµÄ±£´æ¡£tagdoc°üÀ¨£º¹¦ÄÜÃèÊöÎÄ×Ö£¬feature-list£¬todolist£¬ + diff --git a/devspec.en_US/6.5.install-pkg-dir-structure.txt b/devspec.en_US/6.5.install-pkg-dir-structure.txt new file mode 100755 index 0000000..0ffb39e --- /dev/null +++ b/devspec.en_US/6.5.install-pkg-dir-structure.txt @@ -0,0 +1,6 @@ + + +# install pkg dir +================= + + reference the doc file in shlib in 'paths' charpter. diff --git a/devspec.en_US/file b/devspec.en_US/7.0.code-and-executables.txt old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/7.0.code-and-executables.txt diff --git a/devspec.en_US/7.1.code-manage-git.txt b/devspec.en_US/7.1.code-manage-git.txt new file mode 100755 index 0000000..98d0756 --- /dev/null +++ b/devspec.en_US/7.1.code-manage-git.txt @@ -0,0 +1,468 @@ + + + +================= +$ git clone https://gitee.com/用户个性地址/HelloGitee.git +$ git config --global user.name "你的名字或昵称" +$ git config --global user.email "你的邮箱" + +$ git add . #将当前目录所有文件添加到git暂存区 +$ git commit -m "my first commit" #提交并备注提交信息 +$ git push origin master #将本地提交推送到远程仓库 + + +================== +$ git init +$ git remote add origin https://gitee.com/用户个性地址/HelloGitee.git +$ git pull origin master +$ git add . +$ git commit -m "第一次提交" +$ git push origin master +$ git push origin master -f +$ git push origin master + + + + +git使用手册 + +简介 + git是一个程序版本关联软件。与传统的cvs和svn不同的是,git是一个分布式的版本管理软件,可对多个源码库进行代码的使用或管理。 + 使用git,通常有这么几个用途: +@ 已有软件包的源码下载,用于编译。 +@ 新建项目的软件源码管理。 +@ 已有软件包的部分代码修改,递交给container进行bug修复,功能添加。 +@ 基于已有软件包,创建一个软件包的分支,或基于该软件包的一个新软件包。 + 在这些用途中,使用git包含这些操作: +@ 安装git-client软件,并初始化一个git目录。 +@ 下载一个已有软件包的源码,并非clone一个软件包。 +@ 使用一个git-server进行代码管理。 +@ 新建一个软件包代码库。本机新建一个目录,用于git-server上的代码库的共享和同步,并添加一个软件包模板文件,编译,distclean之后,commit到本机代码库,再push到git-server。 +@ 在另一台计算机或另一个目录,从git-server上clone一份代码,进行编译,添加功能代码后,commit并push到git-server。 +@ 在原有目录中pull代码到本机,并进行代码merge,再进行代码编译。 +@ 两个目录下的代码修改同一个源文件,在merge时产生的conflect处理。 +@ 创建代码tag,用于对于代码创建分支前的标记。 +@ 再新建一个目录,并创建一个软件包的分支。修改单个文件,commit并push到分支,同时将修改的代码merge到主分支,并编译。 +@ 在主分支和新建的分支同时编写代码,将新建的分支代码merge到主分支,编译。删除用于功能扩展的分支。 + 这里罗列的是单个代码库的多人开发,以及其它用户下载、使用代码的操作。对于新建分支到另一个代码库,对个人以及中小规模的软件开发不常用,不进行介绍。 + +概念 +版本: +代码库: +分支: +标签: +clone: +ckeckout: +branch: +本机代码库状态: +traced: +modifier: +commit: +push: +pull: + +1.安装git客户端软件 + 在ubuntu下,git客户端软件的安装只需单个命令行命令. +$ sudo apt-get install git + +1.1.只下载用于编译的代码 + 通常使用git用于下载代码,并编译程序使用.相比与clone一个git的project,下载代码只下载代码,而clone一个project是将代码的所有修改信息都下载到本机,占用的流量和存储空间都比较大. + +$ git remote https://github.com/xxx/ABC.git +$ git checkout master +$ git pull + +1.2.git-server的使用 + 这里的git-server并不是指自己搭建的git服务器,而是提供git服务的网站的申请.较常用的git代码管理网站有: +@ github.io +@ gitlab.net +@ gitee.net +@ code.net +@ gitea.com +@ savannah.nongnu.org + + +2.新建一个软件包 + 一个project的代码最初是从一个空白的project或其它project代码修改而来的.在git上使用,需要先新建一个project,并进行代码的修改和递交. + + +2.1.添加traced文件 + traced表示文件在某个git库中的一种状态.文件traced,表示git对该文件进行trace(管理),文件的修改,在git库中进行记录.当文件commit时,将已修改的文件commit到git的本地代码库.而为traced的文件,未进行trace(管理),当commit时,文件不commit到本地代码库. + 使用traced状态,将代码中一些编译时临时的输出文件,不放入代码库中,便于代码管理. + 使用以下命令将文件添加到代码库. + +$ git status +On branch master +Untracked files: +(use "git add ..." to include in what will be committed) +README +nothing added to commit but untracked files present (use "git add" to track) +$ git add README + + 使用git的status命令浏览代码库中的文件状态. + +$ git status +On branch master +Changes to be committed: +(use "git reset HEAD ..." to unstage) +new file: README + + 可以看到,git代码库的缓存中包含了一个文件. + + +2.2.修改文件并添加到缓存中 + +$ git status +On branch master +Changes to be committed: +(use "git reset HEAD ..." to unstage) +new file: README +$ touch README +$ git status +On branch master +Changes to be committed: +(use "git reset HEAD ..." to unstage) +new file: README + + +2.3.代码库文件状态 + +2.4.代码到commit + +2.5.push代码到git-server + +3.在另一个目录clone代码编译 + +3.1.修改并添加文件,更新到代码库 + +3.2.原目录下的代码更新和编译 + +3.3.merge时代码的conflect + +4.1.创建代码库的tag + +5.创建软件包版本分支 + +5.1.修改并添加文件,commit&push到新的分支 + +5.2.新的分支代码merge到主分支 + +5.3.新的分支和主分支代码同时修改后的merge + +5.4.删除分支 + +6.git命令行小结 + + + + +用户配置 + +git config --global user.name "Your Name" +git config --global user.email "email@example.com" + +注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。 + +git config --global user.name "Your Name" +git config --global user.email "email@example.com" + +密钥配置 + +编写代码之前还需要生成并配置SSH-KEY(这个东东是将本地的工作区中的分支和远程的分支进行关联的) + +#生成密钥,一路回车、用默认选项 +ssh-keygen -t rsa +#在本地(我的电脑或者计算机)中找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件(id_rsa是私钥,id_rsa.pub是公钥),将id_rsa.pub文件中的内容 复制到粘贴板 +cat ~/.ssh/id_rsa.pub | clip # Windows +cat ~/.ssh/id_rsa.pub | pbcopy # MacOS + +注意:粘贴的一定是.pub文件,里面的是公钥,另一个文件不能随便透露,里面是私钥。 + +ssh-keygen -t rsa +cat ~/.ssh/id_rsa.pub + +在现有目录中初始化仓库 + +$ git init +$ git add *.c +$ git add LICENSE +$ git commit -m 'initial project version' + +使用现有的仓库 + +$ git clone https://github.com/libgit2/libgit2 +这会在当前目录下创建一个名为 “libgit2” 的目录,并在这个目录下初始化一个 .git 文件夹,从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。 + +$ git clone https://github.com/libgit2/libgit2 mylibgit + +记录每次更新到仓库 + +详见下载的示意图。git对untraces,unmodified,modofied,staged文件进行跟踪。 + +检查当前文件状态 + +要查看哪些文件处于什么状态,可以用 git status 命令。 + +在克隆仓库后立即使用此命令,会看到类似这样的输出: +$ git status +On branch master +nothing to commit, working directory clean + +在项目下创建一个新的 README 文件。 如果之前并不存在这个文件,使用 git status 命令,你将看到一个新的未跟踪文件: +$ echo 'My Project' > README +$ git status +On branch master +Untracked files: +(use "git add ..." to include in what will be committed) +README +nothing added to commit but untracked files present (use "git add" to track) + +暂存已修改文件 + +现在我们来修改一个已被跟踪的文件。 如果你修改了一个名为 CONTRIBUTING.md 的已被跟踪的文件,然后运行 git status 命令,会看到下面内容: +$ git status +On branch master +Changes to be committed: +(use "git reset HEAD ..." to unstage) +new file: README +Changes not staged for commit: +(use "git add ..." to update what will be committed) +(use "git checkout -- ..." to discard changes in working directory) +modified: CONTRIBUTING.md + + modified表示文件在git仓库中,但修改后未添加到commit列表,即未在stage中。这在git reset --hard和git reset --soft时有些不同。 + +状态简览 + +git status 命令的输出十分详细,但其用语有些繁琐。 如果你使用 git status -s命令或 git status --short 命令,你将得到一种更为紧凑的格式输出。 运行 git status -s ,状态报告输出如下: + +$ git status -s +M README +MM Rakefile +A lib/git.rb +M lib/simplegit.rb +?? LICENSE.txt + +?? 新添加的未跟踪文件 +A 新添加到暂存区中的文件 +M 修改过的文件前面有 M 标记。 M有两个可以出现的位置。 +出现在右边的 M 表示该文件被修改了,但是还没放入暂存区。 +出现在靠左边的 M 表示该文件被修改了,并放入了暂存区。 + +忽略文件 +一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。 来看一个实际的例子: +$ cat .gitignore +*.[oa] +*~ + +参考: https://github.com/github/gitignore + +查看已暂存和未暂存的修改 +git diff将通过文件补丁的格式显示具体哪些行发生了改变。 +若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached 命令。(Git 1.6.1 及更高版本还允许使用 git diff --staged,效果是相同的,但更好记些。) + +提交更新 + +$ git commit + +这种方式会启动文本编辑器以便输入本次提交的说明。 (默认会启用 shell 的环境变量 $EDITOR 所指定的软件,一般都是 vim 或 emacs。当然也可以按照 起步 介绍的方式,使用 git config --global core.editor 命令设定你喜欢的编辑软件。) + +在 commit 命令后添加 -m选项,将提交信息与命令放在同一行,如下所示: +$ git commit -m "Story 182: Fix benchmarks for speed" +[master 463dc4f] Story 182: Fix benchmarks for speed +2 files changed, 2 insertions(+) create mode 100644 README + +跳过使用暂存区域 + +git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交。 + +git是一个分布式的版本管理软件。在代码从远处服务器更新到本地时,更新到是所有的版本更新内容。所以commit递交到本地的代码库。通常服务器上的project不一定是当前代码修改者的,如果代码修改者在project中,具有写权限,即可将代码push到远处服务器上。 +git push [remote-name] [branch-name]。 + + 例如: +$ git push origin master + + 这里origin是服务器,master是branch。服务器名详见"remote"相关的内容,它用于代替冗长的web地址。 + +从远程仓库中获取与拉取 + +从远程仓库中获得数据,可以运行: + +$ git fetch [remote-name] + +通常在其它开发者commit代码修改后,需要进行的代码获取操作。 +必须注意 git fetch 命令会将数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。 + +如果你有一个分支设置为跟踪一个远程分支(阅读下一节与 Git 分支 了解更多信息),可以使用 git pull 命令来自动的获取然后合并远程分支到当前分支。 +$ git checkout iss53 +Switched to a new branch "iss53" + + 通常fetch某个remote的某个branch的代码,需要使用上面这个命令。 + + + + + +移除文件 + +$ git rm \*~ + +该命令为删除以 ~ 结尾的所有文件。 + +移除文件 + +$ git mv file_from file_to + +移动文件 + +$ git mv README.md README +$ git status +On branch master +Changes to be committed: (use "git reset HEAD ..." to unstage) +renamed: README.md -> README + +其实,运行 git mv 就相当于运行了下面三条命令: +$ mv README.md README +$ git rm README.md +$ git add README + +查看提交历史 + +git log 有许多选项可以帮助你搜寻你所要找的提交, 接下来我们介绍些最常用的。 + +一个常用的选项是 -p,用来显示每次提交的内容差异。 你也可以加上 -2 来仅显示最近两次提交: + +撤消操作 +有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令尝试重新提交: +$ git commit -m 'initial commit' +$ git add forgotten_file +$ git commit --amend + + +取消暂存的文件 + +$ git reset HEAD CONTRIBUTING.md +Unstaged changes after reset: M CONTRIBUTING.md + +撤消对文件的修改 + +$ git checkout -- CONTRIBUTING.md + + +远程仓库的使用 + +查看远程仓库 + +如果想查看你已经配置的远程仓库服务器,可以运行 git remote 命令。 它会列出你指定的每一个远程服务器的简写。 如果你已经克隆了自己的仓库,那么至少应该能看到 origin - 这是 Git 给你克隆的仓库服务器的默认名字: + +$ git clone https://github.com/schacon/ticgit +Cloning into 'ticgit'... +remote: Reusing existing pack: 1857, done. +remote: Total 1857 (delta 0), reused 0 (delta 0) +Receiving objects: 100% (1857/1857), 374.35 KiB | 268.00 KiB/s, done. +Resolving deltas: 100% (772/772), done. +Checking connectivity... done. +$ cd ticgit +$ git remote +origin + +你也可以指定选项 -v,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。 +$ git remote -v origin https://github.com/schacon/ticgit (fetch) origin https://github.com/schacon/ticgit (push) + + 这里origin即是前面的web地址的名称。它用于git push是的server-name。 + +如果你的远程仓库不止一个,该命令会将它们全部列出。 例如,与几个协作者合作的,拥有多个远程仓库的仓库看起来像下面这样: + +$ cd grit +$ git remote -v +bakkdoor https://github.com/bakkdoor/grit (fetch) +bakkdoor https://github.com/bakkdoor/grit (push) +cho45 https://github.com/cho45/grit (fetch) +cho45 https://github.com/cho45/grit (push) +defunkt https://github.com/defunkt/grit (fetch) +defunkt https://github.com/defunkt/grit (push) +koke git://github.com/koke/grit.git (fetch) +koke git://github.com/koke/grit.git (push) +origin git@github.com:mojombo/grit.git (fetch) + + 这里表示origin这个服务器上下载的代码,包含了多个cooperator,每个cooperator使用自己的server地址。这对于多个project的协同使用,通常用到的比较少。 + +添加远程仓库 + +我在之前的章节中已经提到并展示了如何添加远程仓库的示例,不过这里将告诉你如何明确地做到这一点。 运行 git remote add 添加一个新的远程 Git 仓库,同时指定一个你可以轻松引用的简写: + +$ git remote origin +$ git remote add pb +https://github.com/paulboone/ticgit +$ git remote -v +origin https://github.com/schacon/ticgit (fetch) +origin https://github.com/schacon/ticgit (push) +pb https://github.com/paulboone/ticgit (fetch) +pb https://github.com/paulboone/ticgit (push) + +从远程仓库中抓取与拉取 + +$ git fetch [remote-name] + +推送到远程仓库 + +$ git push origin master + +查看远程仓库 + +$ git remote show origin + +远程仓库的移除与重命名 + +$ git remote rename pb paul +$ git remote +origin +paul + +同样也会修改你的远程分支名字。 那些过去引用 pb/master 的现在会引用 paul/master。 + +如果因为一些原因想要移除一个远程仓库,可以使用 git remote rm : + +$ git remote rm paul +$ git remote +origin + +Git 分支 + +分支创建 + +$ git branch testing + +它只是为你创建了一个可以移动的新的指针。实际在每次commit之后,是以sha1校验值为id的tree结构。分支创建了对应的指针,用于指向某个节点。 + +分支切换 + +$ git checkout testing + +分支的创建并切换 + +$ git checkout -b iss53 +Switched to a new branch "iss53" + + 它是下面两条命令的简写: +$ git branch iss53 +$ git checkout iss53 + +分支的删除 +$ git branch -d hotfix +Deleted branch hotfix (3a0874c). + +分支的合并 + +假设你已经修正了 #53 问题,并且打算将你的工作合并入 master 分支。 为此,你需要合并 iss53 分支到 master 分支,这和之前你合并 hotfix 分支所做的工作差不多。 你只需要检出到你想合并入的分支,然后运行 git merge 命令: + +$ git checkout master +Switched to branch 'master' +$ git merge iss53 Merge made by the 'recursive' strategy. +index.html | 1 + +1 file changed, 1 insertion(+) + + + + + diff --git a/devspec.en_US/file b/devspec.en_US/7.2.home-pages.txt old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/7.2.home-pages.txt diff --git a/devspec.en_US/7.3.code-hosting.txt b/devspec.en_US/7.3.code-hosting.txt new file mode 100755 index 0000000..8eef373 --- /dev/null +++ b/devspec.en_US/7.3.code-hosting.txt @@ -0,0 +1,48 @@ + + +# introduction +============== + + + +# code hosting +============== + + + +# web pages +=========== + + + +# src and binary download storage +================================= + + + +# auto tools +============ + + + + +【project-hosting-website】 +@ +# gnu的savannah和launchpad,以及sourceforge包含Operating System的project多一些,而launchpad和sourceforge也包含较多的app project +# github、gitlab、gitee都包含git服务器,且包含wiki pages +# git xxx包含pages功能,但github的web访问不是和好 +# savannah、sourceforge、launchpad包含web功能,但project的reg比较繁琐。 +# mywiki.cn需要手动编辑和更新wiki,不像其它只需要.md文件即可。gnu的aux脚本中还包含web文档输出程序,使programmer可以使用txt文档更新web-wiki。 +@ ubuntu的lauchpad +https://launchpad.net +https://launchpad.net/projects/+new +@ sourceforge +https://sourceforge.net/create/ +@ gnu的project-website +https://savannah.nongnu.org/register/index.php +@ github+pages +@ gitee+pages +@ gitlab+pages +@ gitea +@ git server+web+wiki +www.mywiki.cn diff --git a/devspec.en_US/file b/devspec.en_US/7.4.publish.txt old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/7.4.publish.txt diff --git a/devspec.en_US/7.5.soft-repository.txt b/devspec.en_US/7.5.soft-repository.txt new file mode 100755 index 0000000..7e49c65 --- /dev/null +++ b/devspec.en_US/7.5.soft-repository.txt @@ -0,0 +1,2 @@ + +apt-get apt-mirror diff --git a/devspec.en_US/8.0.template.txt b/devspec.en_US/8.0.template.txt new file mode 100755 index 0000000..ecb2eab --- /dev/null +++ b/devspec.en_US/8.0.template.txt @@ -0,0 +1,20 @@ + + +# code template +=============== + + + +# sample project +================ + + + + + + + + +@ ʹÓÃsoft-designerÖж¨ÒåµÄcode-tmplºÍsample-projectΪÑùÀý¡£ + + diff --git a/devspec.en_US/file b/devspec.en_US/8.1.language-element.txt old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/8.1.language-element.txt diff --git a/devspec.en_US/file b/devspec.en_US/8.2.src-file.txt old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/8.2.src-file.txt diff --git a/devspec.en_US/file b/devspec.en_US/8.3.src-pkg-template.txt old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/8.3.src-pkg-template.txt diff --git a/devspec.en_US/file b/devspec.en_US/8.4.classical-implement-template.txt old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/8.4.classical-implement-template.txt diff --git a/devspec.en_US/9.file-format.txt b/devspec.en_US/9.file-format.txt new file mode 100755 index 0000000..57f9e33 --- /dev/null +++ b/devspec.en_US/9.file-format.txt @@ -0,0 +1,5 @@ + + +md +imi +catalog diff --git a/devspec.en_US/codestyle/code-style.imi b/devspec.en_US/codestyle/code-style.imi new file mode 100755 index 0000000..36a39d2 --- /dev/null +++ b/devspec.en_US/codestyle/code-style.imi @@ -0,0 +1,253 @@ + +# codefmt-cpp-lang.imi + +[general] +kind="CodeFormatterProfile" +name="SkeletonLinux" +version="1" + +# using org.eclipse.cdt.core.formatter + + +[indentation] +# General settings +tabulation.char="tab" +use_tabs_only_for_leading_indentations="false" +indentation.size="4" +tabulation.size="4" + +# Indent +indent_access_specifier_compare_to_type_header="false" +indent_body_declarations_compare_to_access_specifier="true" + +indent_statements_compare_to_body="true" +indent_statements_compare_to_block="true" +indent_switchstatements_compare_to_switch="false" +indent_switchstatements_compare_to_cases="true" +indent_breaks_compare_to_cases="true" + +indent_body_declarations_compare_to_namespace_header="false" +indent_empty_lines="false" + + +[braces] +brace_position_for_type_declaration="next_line" +brace_position_for_namespace_declaration="next_line" +brace_position_for_method_declaration="next_line" +brace_position_for_block="next_line" +brace_position_for_block_in_case="next_line" +brace_position_for_switch="next_line" +brace_position_for_array_initializer="next_line" +keep_empty_array_initializer_on_one_line="true" + + +[white-space] +# Declaretions::Types +insert_space_before_opening_brace_in_type_declaration="insert" +insert_space_before_colon_in_base_clause="do not insert" +insert_space_after_colon_in_base_clause="insert" +insert_space_before_comma_in_base_types="do not insert" +insert_space_after_comma_in_base_types="insert" + +# Declaretions::Declaretor-list +insert_space_before_comma_in_declarator_list="do not insert" +insert_space_after_comma_in_declarator_list="insert" + +# Declaretions::Functions +insert_space_before_opening_paren_in_method_declaration="insert" +insert_space_after_opening_paren_in_method_declaration="do not insert" +insert_space_before_closing_paren_in_method_declaration="do not insert" +insert_space_between_empty_parens_in_method_declaration="do not insert" +insert_space_before_opening_brace_in_method_declaration="insert" +insert_space_before_comma_in_method_declaration_parameters="do not insert" +insert_space_after_comma_in_method_declaration_parameters="insert" + +# Declaretions::Exception-specifications +insert_space_before_opening_paren_in_exception_specification="insert" +insert_space_after_opening_paren_in_exception_specification="do not insert" +insert_space_before_closing_paren_in_exception_specification="do not insert" +insert_space_between_empty_parens_in_exception_specification="do not insert" +insert_space_before_comma_in_method_declaration_throws="do not insert" +insert_space_after_comma_in_method_declaration_throws="insert" + +# Declaretions::Labels +insert_space_before_colon_in_labeled_statement="do not insert" +insert_space_after_colon_in_labeled_statement="insert" + +# Control-statements +insert_space_before_semicolon="do not insert" + +# Control-statements::Blocks +insert_space_before_opening_brace_in_block="insert" +insert_space_after_closing_brace_in_block="insert" + +# Control-statements::if-else +insert_space_before_opening_paren_in_if="insert" +insert_space_after_opening_paren_in_if="do not insert" +insert_space_before_closing_paren_in_if="do not insert" + +# Control-statements::for +insert_space_before_opening_paren_in_for="insert" +insert_space_after_opening_paren_in_for="do not insert" +insert_space_before_closing_paren_in_for="do not insert" +insert_space_before_semicolon_in_for="do not insert" +insert_space_after_semicolon_in_for="insert" + +# Control-statements::switch +insert_space_before_colon_in_case="do not insert" +insert_space_before_colon_in_default="do not insert" +insert_space_before_opening_brace_in_switch="insert" +insert_space_before_opening_paren_in_switch="insert" +insert_space_after_opening_paren_in_switch="do not insert" +insert_space_before_closing_paren_in_switch="do not insert" + +# Control-statements::while_n_do_while +insert_space_before_opening_paren_in_while="insert" +insert_space_after_opening_paren_in_while="do not insert" +insert_space_before_closing_paren_in_while="do not insert" + +# Control-statements::catch +insert_space_before_opening_paren_in_catch="insert" +insert_space_after_opening_paren_in_catch="do not insert" +insert_space_before_closing_paren_in_catch="do not insert" + +# Expressions::Function-invocations +insert_space_before_opening_paren_in_method_invocation="insert" +insert_space_after_opening_paren_in_method_invocation="do not insert" +insert_space_before_closing_paren_in_method_invocation="do not insert" +insert_space_between_empty_parens_in_method_invocation="do not insert" +insert_space_before_comma_in_method_invocation_arguments="do not insert" +insert_space_after_comma_in_method_invocation_arguments="insert" + +# Expressions::Assignments +insert_space_before_assignment_operator="insert" +insert_space_after_assignment_operator="insert" + +# Expressions::Initializer-list +insert_space_before_opening_brace_in_array_initializer="insert" +insert_space_after_opening_brace_in_array_initializer="insert" +insert_space_before_closing_brace_in_array_initializer="insert" +insert_space_before_comma_in_array_initializer="do not insert" +insert_space_after_comma_in_array_initializer="insert" +insert_space_between_empty_braces_in_array_initializer="do not insert" + +# Expressions::Operators +insert_space_before_binary_operator="insert" +insert_space_after_binary_operator="insert" +insert_space_before_unary_operator="do not insert" +insert_space_after_unary_operator="do not insert" +insert_space_before_prefix_operator="do not insert" +insert_space_after_prefix_operator="do not insert" +insert_space_before_postfix_operator="do not insert" +insert_space_after_postfix_operator="do not insert" + +# Expressions::Parenthesised-expression +insert_space_before_opening_paren_in_parenthesized_expression="do not insert" +insert_space_after_opening_paren_in_parenthesized_expression="do not insert" +insert_space_before_closing_paren_in_parenthesized_expression="do not insert" + +# Expressions::Type-casts +insert_space_after_opening_paren_in_cast="do not insert" +insert_space_before_closing_paren_in_cast="do not insert" +insert_space_after_closing_paren_in_cast="do not insert" + +# Expressions::Conditionals +insert_space_before_question_in_conditional="insert" +insert_space_after_question_in_conditional="insert" +insert_space_before_colon_in_conditional="insert" +insert_space_after_colon_in_conditional="insert" + +# Expressions::Expression-list +insert_space_before_comma_in_expression_list="do not insert" +insert_space_after_comma_in_expression_list="insert" + +# Arrays +insert_space_before_opening_bracket="do not insert" +insert_space_after_opening_bracket="do not insert" +insert_space_before_closing_bracket="do not insert" +insert_space_between_empty_brackets="do not insert" + +# Templete::Templete-arguments +insert_space_before_opening_angle_bracket_in_template_arguments="do not insert" +insert_space_after_opening_angle_bracket_in_template_arguments="do not insert" +insert_space_before_comma_in_template_arguments="do not insert" +insert_space_after_comma_in_template_arguments="insert" +insert_space_before_closing_angle_bracket_in_template_arguments="do not insert" +insert_space_after_closing_angle_bracket_in_template_arguments="insert" + +# Templete::Templete-paramters +insert_space_before_opening_angle_bracket_in_template_parameters="do not insert" +insert_space_after_opening_angle_bracket_in_template_parameters="do not insert" +insert_space_before_comma_in_template_parameters="do not insert" +insert_space_after_comma_in_template_parameters="insert" +insert_space_before_closing_angle_bracket_in_template_parameters="do not insert" +insert_space_after_closing_angle_bracket_in_template_parameters="insert" + + +[control-statement] +# General +insert_new_line_before_else_in_if_statement="do not insert" +insert_new_line_before_catch_in_try_statement="do not insert" +insert_new_line_before_while_in_do_statement="do not insert" + +# if else +keep_then_statement_on_same_line="false" +keep_imple_if_on_one_line="false" +keep_else_statement_on_same_line="false" +compact_else_if="true" + + +# [line-wrapping] +# line width and indentation levels +lineSplit="80" +continuation_indentation="1" +continuation_indentation_for_array_initializer="1" + + +# [Class-declarations] +# [Class-declarations::Base-clause] + + +# + + + + + + + +insert_space_after_colon_in_case="insert" + +insert_space_before_opening_brace_in_namespace_declaration="insert" + +insert_new_line_before_closing_brace_in_array_initializer="do not insert" +insert_new_line_after_opening_brace_in_array_initializer="do not insert" + +insert_new_line_at_end_of_file_if_missing="do not insert" +insert_new_line_before_identifier_in_function_declaration="do not insert" +insert_new_line_in_empty_block="insert" +insert_new_line_after_template_declaration="do not insert" + +insert_space_before_comma_in_enum_declarations="do not insert" +insert_space_after_comma_in_enum_declarations="insert" + +indent_declaration_compare_to_template_header="false" + +alignment_for_conditional_expression="80" +alignment_for_expressions_in_array_initializer="50" +alignment_for_enumerator_list="51" +alignment_for_declarator_list="16" +alignment_for_arguments_in_method_invocation="82" +alignment_for_parameters_in_method_declaration="82" +alignment_for_compact_if="0" +alignment_for_base_clause_in_type_declaration="83" +alignment_for_throws_clause_in_method_declaration="82" +alignment_for_expression_list="0" + +put_empty_statement_on_new_line="true" + +number_of_empty_lines_to_preserve="1" + +format_guardian_clause_on_one_line="false" + + diff --git a/devspec.en_US/codestyle/codetemplates.xml b/devspec.en_US/codestyle/codetemplates.xml new file mode 100755 index 0000000..1d7dae3 --- /dev/null +++ b/devspec.en_US/codestyle/codetemplates.xml @@ -0,0 +1,340 @@ + \ No newline at end of file diff --git a/devspec.en_US/codestyle/deven code style-org.xml b/devspec.en_US/codestyle/deven code style-org.xml new file mode 100755 index 0000000..764b32f --- /dev/null +++ b/devspec.en_US/codestyle/deven code style-org.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/devspec.en_US/codestyle/deven code style.xml b/devspec.en_US/codestyle/deven code style.xml new file mode 100755 index 0000000..5865e12 --- /dev/null +++ b/devspec.en_US/codestyle/deven code style.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/devspec.en_US/codestyle/skeleton-linux.xml b/devspec.en_US/codestyle/skeleton-linux.xml new file mode 100755 index 0000000..70779b3 --- /dev/null +++ b/devspec.en_US/codestyle/skeleton-linux.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/devspec.en_US/codestyle/templates.xml b/devspec.en_US/codestyle/templates.xml new file mode 100755 index 0000000..3614959 --- /dev/null +++ b/devspec.en_US/codestyle/templates.xml @@ -0,0 +1,603 @@ + \ No newline at end of file diff --git a/devspec.en_US/conception-and-mind.txt b/devspec.en_US/conception-and-mind.txt new file mode 100755 index 0000000..bb0f372 --- /dev/null +++ b/devspec.en_US/conception-and-mind.txt @@ -0,0 +1,86 @@ + + +@ software re-use. + for shell script, use the function in shlib by default. + for c/cpp, use the function in libcxt by default. + +@ program level and element + different feature implementation need different program element, it's the +different level of programming. + if we need to write a low level system program, we use asm. the element of +program is instruction. + if we need to write a program feature only by the language, the element of +program is lang-element. + if we need to write a system relative program, or a bit complex program, +the element of program is function-set-element, or lib-pkg-element. + if we need to write a program rapidly, we use script language, or use libs +with better absolution. such as MFC, VCL. the element of program is +module-element, or class-element, or lib-pkg-element. + if we need to architect a bit more large system program, the element of +program is pkg-elemnt. + if we need to architect a more large system program, the element of +'software', is prog-element, or service-element. + + conclution: +@ instruction: +@ lang-feature-element: +@ function-set-element: +@ module-element: +@ class-element: +@ prog-element: +@ svc-element: +@ lib-pkg-element: + + before writing the program code, think about the purpose of the program, +and the level of the software. then, use the corresponding element to writing +code. + different level has different traditional element. + eg: for lang-element, reference-var is a feature, it helps programer use +variable without pointer operation. when it is used as a return type, developer +can operate the variable on left side of '='. + eg: for lang-element, throw-try-catch is a feature for processing of a +condition that function invoking is failed. if there are many functions will be +invoke to alloc some resource, it's a good feature to process the failed +condition. + eg: for module-element or class-element, data-structure is a util for data +orgnize. in a program language, variable is a point of data, and struct +variable is a set of data. data-struect orgnize data by it's rule. + eg: for prog-lement, or svc-element, ssh, sftp, and so on. otherwize, there +many program in shell is a good feature for program processing. such as sed, +grep, awk. it's a conception of text data processing. in a traditional c/c++ +program, it uses str-functions, and program lang-feature-element, to implement +text data processing. use shell script to process text data, it's more easy +then c/c++ lang-feature-element. + the interface/element of string process of traditional c/cpp, is strcpy/ +strcmp/strstr/a2i/i2a. + the interface/element of string process of shell script, is: +@ init-if-existing-or-null: +${var-DEFAULT}, if no declare, use DEFAULT. +${var:-DEFAULT}, if no declare, or null, use DEFAULT. +${var=DEFAULT}, if no declare, use DEFAULT. +${var:=DEFAULT}, if no declare, or null, use DEFAULT. +${var+OTHER}, if no declare, use null, otherwise, use OTHER. +${var:+OTHER}, if no declare, or null, use null, otherwise, use OTHER. +':': if null +'-': if no declare, use default value. +'=': if no declare, use & set default value. +'+': if no declare, use opesite logic, use null value in default, otherwise ... +@ slice: ${str:0:1}, 0 is the start offset, 1 is the lenth of string. it can be + positive value. ${str:-1:-2}, -1 is start from the tail of the string, -2 is + the previous char at offset position. +@ truncate: ${str#*left_once}, ${str##*left_all}, ${str%right_once*}, + ${str%%right_all*}. +@ null-chk: [[ -n ${str} ]], or [[ -z ${str} ]]. +@ find: cat file.txt | grep -E "find_str" +@ replace: cat file.txt | sed -i -E "s/find_str/replace_str/g", or + ${str/find_str_once/replace_str} or ${str//find_str_all/replace_str}. +@ column-cut: echo "a b c" | cut -d ' ' -f1,3. or use array. + OLD_IFS=$OLD_IFS && IFS=' ' && data=( a b c ) && echo ${data[0]} ${data[2]} && IFS=$OLD_IFS +@ up-char: tr '[a-z]' '[A-Z]', or ${str^^} +@ low-char: tr '[A-Z]' '[a-z]', or ${str,,} +@ regex: regular-expression, it is widlly used in grep/sed/awk. =~ in [[]] is + a powerfull thing. get the matching string in array of BASH_MATCHING. + + + + diff --git a/devspec.en_US/dev-step-diagrams/SE-analysis-designprocedure.png b/devspec.en_US/dev-step-diagrams/SE-analysis-designprocedure.png new file mode 100755 index 0000000000000000000000000000000000000000..64c3606710b9811eab41b7fe807a1f1defc60098 GIT binary patch literal 33962 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 literal 0 HcwPel00001 diff --git a/devspec.en_US/dev-step-diagrams/dev-actor.png b/devspec.en_US/dev-step-diagrams/dev-actor.png new file mode 100755 index 0000000000000000000000000000000000000000..9b9db0dd57156f7ffc7ef2a426df0a683d6b6588 GIT binary patch literal 25320 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 ZdjNhF_MggsZT9p*Md6ivwd}i~{{fAc4}bsw literal 0 HcwPel00001 diff --git a/devspec.en_US/dev-step-diagrams/dev-work-flow-diagram.png b/devspec.en_US/dev-step-diagrams/dev-work-flow-diagram.png new file mode 100755 index 0000000000000000000000000000000000000000..ab6561e3dce39caaf2b00a072ec4b5156aeccf7d GIT binary patch literal 34871 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 + + + + + +UMLStandard + + + + +devspec +4 + +Use Case Model +UMLStandard +useCaseModel +IhiugfF1eE6vc8zKnVf8gAAA +3 + +dev-actor +tacoxPrx8kCKprVgJHnvqgAA + +onlEfskXsk6Q+UgmrTExSAAA +56 + +clMaroon +216 +68 +485 +389 +IgjANDHFx02GXu/pd9UODQAA + + +dev-step + + +False + + +False + + + + +clMaroon +$00B9FFFF +205,328;400,266 +Haa/HtHu8EumDcJn1va7CgAA +OJNZyLkPgkW5YFYA5x/ChQAA +8ZQdZB1z0kaDUzkVHOzvRgAA + +False +1.5707963267949 +15 +Haa/HtHu8EumDcJn1va7CgAA + + +False +1.5707963267949 +30 +Haa/HtHu8EumDcJn1va7CgAA + + +False +-1.5707963267949 +15 +Haa/HtHu8EumDcJn1va7CgAA + + +False +-0.523598775598299 +30 +epHead +m5jTftKx4ku74ElHxxMotAAA + + +False +0.523598775598299 +30 +epTail +TeOn6G5DU0iPhLs634h/BwAA + + +False +0.523598775598299 +25 +epHead +m5jTftKx4ku74ElHxxMotAAA + + +False +-0.523598775598299 +25 +epTail +TeOn6G5DU0iPhLs634h/BwAA + + +False +-0.785398163397448 +40 +epHead +m5jTftKx4ku74ElHxxMotAAA + + +False +0.785398163397448 +40 +epTail +TeOn6G5DU0iPhLs634h/BwAA + + +False +-1000 +-1000 +50 +8 +m5jTftKx4ku74ElHxxMotAAA + + +False +-1000 +-1000 +50 +8 +TeOn6G5DU0iPhLs634h/BwAA + + + +clMaroon +$00B9FFFF +8 +192 +77 +78 +FkRCE52YAkaM/9oO8q9QFQAA + + +1 +author + + +False + + +False + + + +False +FkRCE52YAkaM/9oO8q9QFQAA + + +False +FkRCE52YAkaM/9oO8q9QFQAA + + + +clMaroon +$00B9FFFF +124 +192 +76 +78 +MLBX+NGx9kymQ76b9EAKuwAA + + +1 +tech-leader + + +False + + +False + + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + + +clMaroon +$00B9FFFF +108 +92 +101 +78 +A/9YWnHJBEGH1jC8FI2M9gAA + + +1 +maintainer + + +False + + +False + + + +False +A/9YWnHJBEGH1jC8FI2M9gAA + + +False +A/9YWnHJBEGH1jC8FI2M9gAA + + + +clMaroon +$00B9FFFF +116 +304 +90 +78 +oWDHE/AIyEqhL2zTdizC4AAA + + +1 +developper + + +False + + +False + + + +False +oWDHE/AIyEqhL2zTdizC4AAA + + +False +oWDHE/AIyEqhL2zTdizC4AAA + + + +clMaroon +$00B9FFFF +760 +376 +86 +78 +78O5f65/80OvpHK3AuBEIQAA + + +1 +tester + + +False + + +False + + + +False +78O5f65/80OvpHK3AuBEIQAA + + +False +78O5f65/80OvpHK3AuBEIQAA + + + +clMaroon +$00B9FFFF +764 +276 +77 +78 +u2JHX3nMn0CMyZLWTG2R1QAA + + +1 +user + + +False + + +False + + + +False +u2JHX3nMn0CMyZLWTG2R1QAA + + +False +u2JHX3nMn0CMyZLWTG2R1QAA + + + +clMaroon +$00B9FFFF +760 +192 +86 +78 +aaiB2ZAB7kOSB9niWMGCrAAA + + +1 +translator + + +False + + +False + + + +False +aaiB2ZAB7kOSB9niWMGCrAAA + + +False +aaiB2ZAB7kOSB9niWMGCrAAA + + + +clMaroon +$00B9FFFF +756 +108 +91 +78 +Pu4+pL+iiU6lRzDtfLIgJwAA + + +1 +documentor + + +False + + +False + + + +False +Pu4+pL+iiU6lRzDtfLIgJwAA + + +False +Pu4+pL+iiU6lRzDtfLIgJwAA + + + +clMaroon +$00B9FFFF +556 +292 +121 +45 +ymnyuU2meUmuFQCl8KW3EwAA + + +1 +bug-report + + +False + + +False + + + +False +ymnyuU2meUmuFQCl8KW3EwAA + + +False +ymnyuU2meUmuFQCl8KW3EwAA + + +False +ymnyuU2meUmuFQCl8KW3EwAA + + + +clMaroon +$00B9FFFF +412 +292 +101 +45 +5JcsdOcl2kmUJ1xczZEQMQAA + + +1 +test-task + + +False + + +False + + + +False +5JcsdOcl2kmUJ1xczZEQMQAA + + +False +5JcsdOcl2kmUJ1xczZEQMQAA + + +False +5JcsdOcl2kmUJ1xczZEQMQAA + + + +clMaroon +$00B9FFFF +392 +148 +142 +45 ++JrMCo45qEOWtcTsDjqTTgAA + + +1 +check-if-publish + + +False + + +False + + + +False ++JrMCo45qEOWtcTsDjqTTgAA + + +False ++JrMCo45qEOWtcTsDjqTTgAA + + +False ++JrMCo45qEOWtcTsDjqTTgAA + + + +clMaroon +$00B9FFFF +396 +392 +127 +45 +wFR71rqQ/kavPS+ztzufLgAA + + +1 +bug-fix + + +False + + +False + + + +False +wFR71rqQ/kavPS+ztzufLgAA + + +False +wFR71rqQ/kavPS+ztzufLgAA + + +False +wFR71rqQ/kavPS+ztzufLgAA + + + +clMaroon +$00B9FFFF +244 +264 +121 +45 +8v8IRJdlJUmbHIylKGey5wAA + + +1 +feature-list + + +False + + +False + + + +False +8v8IRJdlJUmbHIylKGey5wAA + + +False +8v8IRJdlJUmbHIylKGey5wAA + + +False +8v8IRJdlJUmbHIylKGey5wAA + + + +clMaroon +$00B9FFFF +252 +392 +108 +45 +fIx21ILIBUuXaoqKHt5Z2AAA + + +1 +develop + + +False + + +False + + + +False +fIx21ILIBUuXaoqKHt5Z2AAA + + +False +fIx21ILIBUuXaoqKHt5Z2AAA + + +False +fIx21ILIBUuXaoqKHt5Z2AAA + + + +clMaroon +$00B9FFFF +556 +392 +121 +45 +UtnSzF7bC0iukjII33XrugAA + + +1 +bug-retest + + +False + + +False + + + +False +UtnSzF7bC0iukjII33XrugAA + + +False +UtnSzF7bC0iukjII33XrugAA + + +False +UtnSzF7bC0iukjII33XrugAA + + + +clMaroon +$00B9FFFF +304,308;305,332 +Zk/ihiJuFkm1nc08/lO3JAAA +0NZb34oq+0iz6/8DYcniywAA +1XmGBT1/RUKVRwCIItHBqQAA + +False +1.5707963267949 +15 +Zk/ihiJuFkm1nc08/lO3JAAA + + +False +1.5707963267949 +30 +Zk/ihiJuFkm1nc08/lO3JAAA + + +False +-1.5707963267949 +15 +Zk/ihiJuFkm1nc08/lO3JAAA + + +False +-0.523598775598299 +30 +epHead +cqCsUEAeA0in0Z2LWweznwAA + + +False +0.523598775598299 +30 +epTail +DWmCv3GYyE+A4/wxNfV/TgAA + + +False +0.523598775598299 +25 +epHead +cqCsUEAeA0in0Z2LWweznwAA + + +False +-0.523598775598299 +25 +epTail +DWmCv3GYyE+A4/wxNfV/TgAA + + +False +-0.785398163397448 +40 +epHead +cqCsUEAeA0in0Z2LWweznwAA + + +False +0.785398163397448 +40 +epTail +DWmCv3GYyE+A4/wxNfV/TgAA + + +False +-1060 +-976 +50 +8 +cqCsUEAeA0in0Z2LWweznwAA + + +False +-1060 +-976 +50 +8 +DWmCv3GYyE+A4/wxNfV/TgAA + + + +clMaroon +$00B9FFFF +340,392;428,336 +ZYww4bhgbUujMdsXvrsGRwAA +BoXflTl2zkiHVb9rTj8+gQAA +gzOBaPhYH0Sqi38GA9ka4gAA + +False +1.5707963267949 +15 +ZYww4bhgbUujMdsXvrsGRwAA + + +False +1.5707963267949 +30 +ZYww4bhgbUujMdsXvrsGRwAA + + +False +-1.5707963267949 +15 +ZYww4bhgbUujMdsXvrsGRwAA + + +False +-0.523598775598299 +30 +epHead +PKDNpsNf/kGUvFpvwAiMgwAA + + +False +0.523598775598299 +30 +epTail +9vaywntHRUS9MFakEmMvSgAA + + +False +0.523598775598299 +25 +epHead +PKDNpsNf/kGUvFpvwAiMgwAA + + +False +-0.523598775598299 +25 +epTail +9vaywntHRUS9MFakEmMvSgAA + + +False +-0.785398163397448 +40 +epHead +PKDNpsNf/kGUvFpvwAiMgwAA + + +False +0.785398163397448 +40 +epTail +9vaywntHRUS9MFakEmMvSgAA + + +False +-1060 +-976 +50 +8 +PKDNpsNf/kGUvFpvwAiMgwAA + + +False +-1060 +-976 +50 +8 +9vaywntHRUS9MFakEmMvSgAA + + + +clMaroon +$00B9FFFF +556,414;522,414 +u+LRK0aPeU+CvKL8BjN4+AAA +vIM1yyr2zUeK8LOSwJnagwAA +t5UaBajz3kuwVYgFf4H/6gAA + +False +1.5707963267949 +15 +u+LRK0aPeU+CvKL8BjN4+AAA + + +False +1.5707963267949 +30 +u+LRK0aPeU+CvKL8BjN4+AAA + + +False +-1.5707963267949 +15 +u+LRK0aPeU+CvKL8BjN4+AAA + + +False +-0.523598775598299 +30 +epHead +xQhxxFEtpECHagEXOLUIWQAA + + +False +0.523598775598299 +30 +epTail +Ni4/biH/lE2VxdPr2OKnEwAA + + +False +0.523598775598299 +25 +epHead +xQhxxFEtpECHagEXOLUIWQAA + + +False +-0.523598775598299 +25 +epTail +Ni4/biH/lE2VxdPr2OKnEwAA + + +False +-0.785398163397448 +40 +epHead +xQhxxFEtpECHagEXOLUIWQAA + + +False +0.785398163397448 +40 +epTail +Ni4/biH/lE2VxdPr2OKnEwAA + + +False +-1060 +-976 +50 +8 +xQhxxFEtpECHagEXOLUIWQAA + + +False +-1060 +-976 +50 +8 +Ni4/biH/lE2VxdPr2OKnEwAA + + + +clMaroon +$00B9FFFF +616,336;616,392 +Q5rq4hug80amVs0OquyiyAAA +t5UaBajz3kuwVYgFf4H/6gAA +lwnbG+r6OEegyTwNJ3FUnQAA + +False +1.5707963267949 +15 +Q5rq4hug80amVs0OquyiyAAA + + +False +1.5707963267949 +30 +Q5rq4hug80amVs0OquyiyAAA + + +False +-1.5707963267949 +15 +Q5rq4hug80amVs0OquyiyAAA + + +False +-0.523598775598299 +30 +epHead +wki5AWxXakSVFXSFIAWF6wAA + + +False +0.523598775598299 +30 +epTail +8x8LgMHMS0+ZEvqndI0NEgAA + + +False +0.523598775598299 +25 +epHead +wki5AWxXakSVFXSFIAWF6wAA + + +False +-0.523598775598299 +25 +epTail +8x8LgMHMS0+ZEvqndI0NEgAA + + +False +-0.785398163397448 +40 +epHead +wki5AWxXakSVFXSFIAWF6wAA + + +False +0.785398163397448 +40 +epTail +8x8LgMHMS0+ZEvqndI0NEgAA + + +False +-1060 +-976 +50 +8 +wki5AWxXakSVFXSFIAWF6wAA + + +False +-1060 +-976 +50 +8 +8x8LgMHMS0+ZEvqndI0NEgAA + + + +clMaroon +$00B9FFFF +396,414;359,414 +Lslcq+/wp0+7suaGPGIyVAAA +gzOBaPhYH0Sqi38GA9ka4gAA +vIM1yyr2zUeK8LOSwJnagwAA + +False +1.5707963267949 +15 +Lslcq+/wp0+7suaGPGIyVAAA + + +False +1.5707963267949 +30 +Lslcq+/wp0+7suaGPGIyVAAA + + +False +-1.5707963267949 +15 +Lslcq+/wp0+7suaGPGIyVAAA + + +False +-0.523598775598299 +30 +epHead +9H2x6+kFc0eo6Z2KrSpZMgAA + + +False +0.523598775598299 +30 +epTail +UFqxiSQgyUeoy0qNucDjhwAA + + +False +0.523598775598299 +25 +epHead +9H2x6+kFc0eo6Z2KrSpZMgAA + + +False +-0.523598775598299 +25 +epTail +UFqxiSQgyUeoy0qNucDjhwAA + + +False +-0.785398163397448 +40 +epHead +9H2x6+kFc0eo6Z2KrSpZMgAA + + +False +0.785398163397448 +40 +epTail +UFqxiSQgyUeoy0qNucDjhwAA + + +False +-1060 +-976 +50 +8 +9H2x6+kFc0eo6Z2KrSpZMgAA + + +False +-1060 +-976 +50 +8 +UFqxiSQgyUeoy0qNucDjhwAA + + + +clMaroon +$00B9FFFF +205,364;261,392 +QAFwbnInOU6vOm8b8SgmzAAA +gzOBaPhYH0Sqi38GA9ka4gAA +8ZQdZB1z0kaDUzkVHOzvRgAA + +False +1.5707963267949 +15 +QAFwbnInOU6vOm8b8SgmzAAA + + +False +1.5707963267949 +30 +QAFwbnInOU6vOm8b8SgmzAAA + + +False +-1.5707963267949 +15 +QAFwbnInOU6vOm8b8SgmzAAA + + +False +-0.523598775598299 +30 +epHead +M0pjGsRCsEy2IjYa560UuwAA + + +False +0.523598775598299 +30 +epTail +89CSjktmDk6aTYzK0WeqxgAA + + +False +0.523598775598299 +25 +epHead +M0pjGsRCsEy2IjYa560UuwAA + + +False +-0.523598775598299 +25 +epTail +89CSjktmDk6aTYzK0WeqxgAA + + +False +-0.785398163397448 +40 +epHead +M0pjGsRCsEy2IjYa560UuwAA + + +False +0.785398163397448 +40 +epTail +89CSjktmDk6aTYzK0WeqxgAA + + +False +-1060 +-976 +50 +8 +M0pjGsRCsEy2IjYa560UuwAA + + +False +-1060 +-976 +50 +8 +89CSjktmDk6aTYzK0WeqxgAA + + + +clMaroon +$00B9FFFF +208,137;392,161 +otl6N6twSUqOS1ckH+zvkAAA +Vdh7zL8QZ0OtD+C+OlvxpgAA +qYv8SJgqPUajzKDRtANOvwAA + +False +1.5707963267949 +15 +otl6N6twSUqOS1ckH+zvkAAA + + +False +1.5707963267949 +30 +otl6N6twSUqOS1ckH+zvkAAA + + +False +-1.5707963267949 +15 +otl6N6twSUqOS1ckH+zvkAAA + + +False +-0.523598775598299 +30 +epHead +m5bOddD2ykOYQJ+JqC5GQwAA + + +False +0.523598775598299 +30 +epTail +hIwTub9FSkK/mA+8tg3vAQAA + + +False +0.523598775598299 +25 +epHead +m5bOddD2ykOYQJ+JqC5GQwAA + + +False +-0.523598775598299 +25 +epTail +hIwTub9FSkK/mA+8tg3vAQAA + + +False +-0.785398163397448 +40 +epHead +m5bOddD2ykOYQJ+JqC5GQwAA + + +False +0.785398163397448 +40 +epTail +hIwTub9FSkK/mA+8tg3vAQAA + + +False +-1060 +-976 +50 +8 +m5bOddD2ykOYQJ+JqC5GQwAA + + +False +-1060 +-976 +50 +8 +hIwTub9FSkK/mA+8tg3vAQAA + + + +clMaroon +$00B9FFFF +84,196;114,169 +/wV294vExESRsoCAG0SOGwAA +qYv8SJgqPUajzKDRtANOvwAA +nLppBSuFyk6GHv3rvWfvuwAA + +False +1.5707963267949 +15 +/wV294vExESRsoCAG0SOGwAA + + +False +1.5707963267949 +30 +/wV294vExESRsoCAG0SOGwAA + + +False +-1.5707963267949 +15 +/wV294vExESRsoCAG0SOGwAA + + +False +-0.523598775598299 +30 +epHead +kW2xBvd5ck+7hi+wjeIDWwAA + + +False +0.523598775598299 +30 +epTail +6Neco6zcl0uObHufbrc7/wAA + + +False +0.523598775598299 +25 +epHead +kW2xBvd5ck+7hi+wjeIDWwAA + + +False +-0.523598775598299 +25 +epTail +6Neco6zcl0uObHufbrc7/wAA + + +False +-0.785398163397448 +40 +epHead +kW2xBvd5ck+7hi+wjeIDWwAA + + +False +0.785398163397448 +40 +epTail +6Neco6zcl0uObHufbrc7/wAA + + +False +-1060 +-976 +50 +8 +kW2xBvd5ck+7hi+wjeIDWwAA + + +False +-1060 +-976 +50 +8 +6Neco6zcl0uObHufbrc7/wAA + + + +clMaroon +$00B9FFFF +84,230;124,230 +As4jKIWMwk6c065+KZeGGQAA +LqRrN84lGEeTv5o2IgfsSwAA +nLppBSuFyk6GHv3rvWfvuwAA + +False +1.5707963267949 +15 +As4jKIWMwk6c065+KZeGGQAA + + +False +1.5707963267949 +30 +As4jKIWMwk6c065+KZeGGQAA + + +False +-1.5707963267949 +15 +As4jKIWMwk6c065+KZeGGQAA + + +False +-0.523598775598299 +30 +epHead ++Lil4MWKjUOC2XYl8SjTegAA + + +False +0.523598775598299 +30 +epTail +RHQsOilQckSyjRNZMJggpgAA + + +False +0.523598775598299 +25 +epHead ++Lil4MWKjUOC2XYl8SjTegAA + + +False +-0.523598775598299 +25 +epTail +RHQsOilQckSyjRNZMJggpgAA + + +False +-0.785398163397448 +40 +epHead ++Lil4MWKjUOC2XYl8SjTegAA + + +False +0.785398163397448 +40 +epTail +RHQsOilQckSyjRNZMJggpgAA + + +False +-1060 +-976 +50 +8 ++Lil4MWKjUOC2XYl8SjTegAA + + +False +-1060 +-976 +50 +8 +RHQsOilQckSyjRNZMJggpgAA + + + +clMaroon +$00B9FFFF +84,267;121,304 +qSMM7YEtUUmnkrz3femcAQAA +8ZQdZB1z0kaDUzkVHOzvRgAA +nLppBSuFyk6GHv3rvWfvuwAA + +False +1.5707963267949 +15 +qSMM7YEtUUmnkrz3femcAQAA + + +False +1.5707963267949 +30 +qSMM7YEtUUmnkrz3femcAQAA + + +False +-1.5707963267949 +15 +qSMM7YEtUUmnkrz3femcAQAA + + +False +-0.523598775598299 +30 +epHead +gzYTAF1gIkizg/Vue/2ZQwAA + + +False +0.523598775598299 +30 +epTail +hNisF5EBTE2ATvCijhzvOQAA + + +False +0.523598775598299 +25 +epHead +gzYTAF1gIkizg/Vue/2ZQwAA + + +False +-0.523598775598299 +25 +epTail +hNisF5EBTE2ATvCijhzvOQAA + + +False +-0.785398163397448 +40 +epHead +gzYTAF1gIkizg/Vue/2ZQwAA + + +False +0.785398163397448 +40 +epTail +hNisF5EBTE2ATvCijhzvOQAA + + +False +-1060 +-976 +50 +8 +gzYTAF1gIkizg/Vue/2ZQwAA + + +False +-1060 +-976 +50 +8 +hNisF5EBTE2ATvCijhzvOQAA + + + +clMaroon +$00B9FFFF +760,414;676,414 +QOEK3K2D6E6pqfTn0mjGSQAA +t5UaBajz3kuwVYgFf4H/6gAA +55htDUboMkKutvJNMs10VwAA + +False +1.5707963267949 +15 +QOEK3K2D6E6pqfTn0mjGSQAA + + +False +1.5707963267949 +30 +QOEK3K2D6E6pqfTn0mjGSQAA + + +False +-1.5707963267949 +15 +QOEK3K2D6E6pqfTn0mjGSQAA + + +False +-0.523598775598299 +30 +epHead +8lZk7+ScDkGsGw40b2zWuQAA + + +False +0.523598775598299 +30 +epTail +06vNfm1gx0OR0K9NmGmXEQAA + + +False +0.523598775598299 +25 +epHead +8lZk7+ScDkGsGw40b2zWuQAA + + +False +-0.523598775598299 +25 +epTail +06vNfm1gx0OR0K9NmGmXEQAA + + +False +-0.785398163397448 +40 +epHead +8lZk7+ScDkGsGw40b2zWuQAA + + +False +0.785398163397448 +40 +epTail +06vNfm1gx0OR0K9NmGmXEQAA + + +False +-1048 +-1000 +50 +8 +8lZk7+ScDkGsGw40b2zWuQAA + + +False +-1048 +-1000 +50 +8 +06vNfm1gx0OR0K9NmGmXEQAA + + + +clMaroon +$00B9FFFF +764,314;676,314 +BunHMt9UUEaob51EuVirsAAA +lwnbG+r6OEegyTwNJ3FUnQAA +jBby7rVxVkO+HkQ21KY54wAA + +False +1.5707963267949 +15 +BunHMt9UUEaob51EuVirsAAA + + +False +1.5707963267949 +30 +BunHMt9UUEaob51EuVirsAAA + + +False +-1.5707963267949 +15 +BunHMt9UUEaob51EuVirsAAA + + +False +-0.523598775598299 +30 +epHead +WX2MlGTb6EOX2luk/so3YwAA + + +False +0.523598775598299 +30 +epTail +h8kotrimC0Cpk4nuHRgyzAAA + + +False +0.523598775598299 +25 +epHead +WX2MlGTb6EOX2luk/so3YwAA + + +False +-0.523598775598299 +25 +epTail +h8kotrimC0Cpk4nuHRgyzAAA + + +False +-0.785398163397448 +40 +epHead +WX2MlGTb6EOX2luk/so3YwAA + + +False +0.785398163397448 +40 +epTail +h8kotrimC0Cpk4nuHRgyzAAA + + +False +-1048 +-1000 +50 +8 +WX2MlGTb6EOX2luk/so3YwAA + + +False +-1048 +-1000 +50 +8 +h8kotrimC0Cpk4nuHRgyzAAA + + + +clMaroon +$00B9FFFF +462,292;463,268 +GkzxRdxRNkmn62ufJTw13wAA +OJNZyLkPgkW5YFYA5x/ChQAA +BoXflTl2zkiHVb9rTj8+gQAA + +False +1.5707963267949 +15 +GkzxRdxRNkmn62ufJTw13wAA + + +False +1.5707963267949 +30 +GkzxRdxRNkmn62ufJTw13wAA + + +False +-1.5707963267949 +15 +GkzxRdxRNkmn62ufJTw13wAA + + +False +-0.523598775598299 +30 +epHead +UjrU3zr4ikWZcD67/VJ22wAA + + +False +0.523598775598299 +30 +epTail +LLG2+9u6KkebumqGep6bfAAA + + +False +0.523598775598299 +25 +epHead +UjrU3zr4ikWZcD67/VJ22wAA + + +False +-0.523598775598299 +25 +epTail +LLG2+9u6KkebumqGep6bfAAA + + +False +-0.785398163397448 +40 +epHead +UjrU3zr4ikWZcD67/VJ22wAA + + +False +0.785398163397448 +40 +epTail +LLG2+9u6KkebumqGep6bfAAA + + +False +-1000 +-1000 +50 +8 +UjrU3zr4ikWZcD67/VJ22wAA + + +False +-1000 +-1000 +50 +8 +LLG2+9u6KkebumqGep6bfAAA + + + +clMaroon +$00B9FFFF +248 +88 +121 +45 +FPjdKo5EqkuvbojCyT40wAAA + + +1 +pkg-publish + + +False + + +False + + + +False +FPjdKo5EqkuvbojCyT40wAAA + + +False +FPjdKo5EqkuvbojCyT40wAAA + + +False +FPjdKo5EqkuvbojCyT40wAAA + + + +clMaroon +$00B9FFFF +208,123;248,118 +atCUWqlo80uXI6LZ5VXAqwAA +7R3Vtrr63kqhX5GzE7CY4gAA +qYv8SJgqPUajzKDRtANOvwAA + +False +1.5707963267949 +15 +atCUWqlo80uXI6LZ5VXAqwAA + + +False +1.5707963267949 +30 +atCUWqlo80uXI6LZ5VXAqwAA + + +False +-1.5707963267949 +15 +atCUWqlo80uXI6LZ5VXAqwAA + + +False +-0.523598775598299 +30 +epHead +ZCmKuqp4sE2/fLQrj5OH6AAA + + +False +0.523598775598299 +30 +epTail +1rd1mOGAkk26xSFOjW6oBQAA + + +False +0.523598775598299 +25 +epHead +ZCmKuqp4sE2/fLQrj5OH6AAA + + +False +-0.523598775598299 +25 +epTail +1rd1mOGAkk26xSFOjW6oBQAA + + +False +-0.785398163397448 +40 +epHead +ZCmKuqp4sE2/fLQrj5OH6AAA + + +False +0.785398163397448 +40 +epTail +1rd1mOGAkk26xSFOjW6oBQAA + + +False +-1000 +-1000 +50 +8 +ZCmKuqp4sE2/fLQrj5OH6AAA + + +False +-1000 +-1000 +50 +8 +1rd1mOGAkk26xSFOjW6oBQAA + + + +clMaroon +$00B9FFFF +463,224;462,192 +VSr15ngAt0ucp/JSndd7fAAA +Vdh7zL8QZ0OtD+C+OlvxpgAA +OJNZyLkPgkW5YFYA5x/ChQAA + +False +1.5707963267949 +15 +VSr15ngAt0ucp/JSndd7fAAA + + +False +1.5707963267949 +30 +VSr15ngAt0ucp/JSndd7fAAA + + +False +-1.5707963267949 +15 +VSr15ngAt0ucp/JSndd7fAAA + + +False +-0.523598775598299 +30 +epHead +P1DmfF8A8U+xRvMvkio6ggAA + + +False +0.523598775598299 +30 +epTail +/91dQ7rhgUSI28jqjPHooQAA + + +False +0.523598775598299 +25 +epHead +P1DmfF8A8U+xRvMvkio6ggAA + + +False +-0.523598775598299 +25 +epTail +/91dQ7rhgUSI28jqjPHooQAA + + +False +-0.785398163397448 +40 +epHead +P1DmfF8A8U+xRvMvkio6ggAA + + +False +0.785398163397448 +40 +epTail +/91dQ7rhgUSI28jqjPHooQAA + + +False +-1000 +-1000 +50 +8 +P1DmfF8A8U+xRvMvkio6ggAA + + +False +-1000 +-1000 +50 +8 +/91dQ7rhgUSI28jqjPHooQAA + + + +clMaroon +$00B9FFFF +756,159;527,227 +t3ESzDEjd0ut89bd3IyWPQAA +OJNZyLkPgkW5YFYA5x/ChQAA +iDOAaVuVSUO57121Dqj8JQAA + +False +1.5707963267949 +15 +t3ESzDEjd0ut89bd3IyWPQAA + + +False +1.5707963267949 +30 +t3ESzDEjd0ut89bd3IyWPQAA + + +False +-1.5707963267949 +15 +t3ESzDEjd0ut89bd3IyWPQAA + + +False +-0.523598775598299 +30 +epHead +UVpvR8JQo0Goo1thnZ8TQwAA + + +False +0.523598775598299 +30 +epTail +UV6CUGeKi0qg+WyJsqDNMAAA + + +False +0.523598775598299 +25 +epHead +UVpvR8JQo0Goo1thnZ8TQwAA + + +False +-0.523598775598299 +25 +epTail +UV6CUGeKi0qg+WyJsqDNMAAA + + +False +-0.785398163397448 +40 +epHead +UVpvR8JQo0Goo1thnZ8TQwAA + + +False +0.785398163397448 +40 +epTail +UV6CUGeKi0qg+WyJsqDNMAAA + + +False +-1048 +-1000 +50 +8 +UVpvR8JQo0Goo1thnZ8TQwAA + + +False +-1048 +-1000 +50 +8 +UV6CUGeKi0qg+WyJsqDNMAAA + + + +clMaroon +$00B9FFFF +760,232;527,243 +j2qfJOQnLEyR5RVtbVGb8AAA +OJNZyLkPgkW5YFYA5x/ChQAA +OS8e8Zau7kWMtinIvCc/swAA + +False +1.5707963267949 +15 +j2qfJOQnLEyR5RVtbVGb8AAA + + +False +1.5707963267949 +30 +j2qfJOQnLEyR5RVtbVGb8AAA + + +False +-1.5707963267949 +15 +j2qfJOQnLEyR5RVtbVGb8AAA + + +False +-0.523598775598299 +30 +epHead +8zPYwZBWOEuUZxPtPgU/YQAA + + +False +0.523598775598299 +30 +epTail +DcOYQKycgUqgn2jU568/iAAA + + +False +0.523598775598299 +25 +epHead +8zPYwZBWOEuUZxPtPgU/YQAA + + +False +-0.523598775598299 +25 +epTail +DcOYQKycgUqgn2jU568/iAAA + + +False +-0.785398163397448 +40 +epHead +8zPYwZBWOEuUZxPtPgU/YQAA + + +False +0.785398163397448 +40 +epTail +DcOYQKycgUqgn2jU568/iAAA + + +False +-1048 +-1000 +50 +8 +8zPYwZBWOEuUZxPtPgU/YQAA + + +False +-1048 +-1000 +50 +8 +DcOYQKycgUqgn2jU568/iAAA + + + +clMaroon +$00B9FFFF +406,148;365,132 +L3wUC+fjukG9Mbmq0QYdiwAA +7R3Vtrr63kqhX5GzE7CY4gAA +Vdh7zL8QZ0OtD+C+OlvxpgAA + +False +1.5707963267949 +15 +L3wUC+fjukG9Mbmq0QYdiwAA + + +False +1.5707963267949 +30 +L3wUC+fjukG9Mbmq0QYdiwAA + + +False +-1.5707963267949 +15 +L3wUC+fjukG9Mbmq0QYdiwAA + + +False +-0.523598775598299 +30 +epHead +MVnve7DJ0kSTrd01IVyX1gAA + + +False +0.523598775598299 +30 +epTail +zaihnGbFv0SYjieuD3Ii+wAA + + +False +0.523598775598299 +25 +epHead +MVnve7DJ0kSTrd01IVyX1gAA + + +False +-0.523598775598299 +25 +epTail +zaihnGbFv0SYjieuD3Ii+wAA + + +False +-0.785398163397448 +40 +epHead +MVnve7DJ0kSTrd01IVyX1gAA + + +False +0.785398163397448 +40 +epTail +zaihnGbFv0SYjieuD3Ii+wAA + + +False +-1000 +-1000 +50 +8 +MVnve7DJ0kSTrd01IVyX1gAA + + +False +-1000 +-1000 +50 +8 +zaihnGbFv0SYjieuD3Ii+wAA + + + +clMaroon +$00B9FFFF +199,245;248,264 +ESsTAdhYyU64zi6/oVqTKgAA +1XmGBT1/RUKVRwCIItHBqQAA +LqRrN84lGEeTv5o2IgfsSwAA + +False +1.5707963267949 +15 +ESsTAdhYyU64zi6/oVqTKgAA + + +False +1.5707963267949 +30 +ESsTAdhYyU64zi6/oVqTKgAA + + +False +-1.5707963267949 +15 +ESsTAdhYyU64zi6/oVqTKgAA + + +False +-0.523598775598299 +30 +epHead +jqMq51leBkGUbLZ/J6mVggAA + + +False +0.523598775598299 +30 +epTail +NuLaPfQwkkOm5+Z8IfTRQwAA + + +False +0.523598775598299 +25 +epHead +jqMq51leBkGUbLZ/J6mVggAA + + +False +-0.523598775598299 +25 +epTail +NuLaPfQwkkOm5+Z8IfTRQwAA + + +False +-0.785398163397448 +40 +epHead +jqMq51leBkGUbLZ/J6mVggAA + + +False +0.785398163397448 +40 +epTail +NuLaPfQwkkOm5+Z8IfTRQwAA + + +False +-1000 +-1000 +50 +8 +jqMq51leBkGUbLZ/J6mVggAA + + +False +-1000 +-1000 +50 +8 +NuLaPfQwkkOm5+Z8IfTRQwAA + + + +clMaroon +$00B9FFFF +240 +332 +132 +45 +rxa+oNm2Kk2e9yVRZgZC4gAA + + +1 +design-module + + +False + + +False + + + +False +rxa+oNm2Kk2e9yVRZgZC4gAA + + +False +rxa+oNm2Kk2e9yVRZgZC4gAA + + +False +rxa+oNm2Kk2e9yVRZgZC4gAA + + + +clMaroon +$00B9FFFF +305,376;305,392 +udZiFgT1HUuXSsB17nyApQAA +gzOBaPhYH0Sqi38GA9ka4gAA +0NZb34oq+0iz6/8DYcniywAA + +False +1.5707963267949 +15 +udZiFgT1HUuXSsB17nyApQAA + + +False +1.5707963267949 +30 +udZiFgT1HUuXSsB17nyApQAA + + +False +-1.5707963267949 +15 +udZiFgT1HUuXSsB17nyApQAA + + +False +-0.523598775598299 +30 +epHead +Bkj3nzY1Z0OpLErETn5JAAAA + + +False +0.523598775598299 +30 +epTail +iGT7GmF0r0CH0TSScrk62AAA + + +False +0.523598775598299 +25 +epHead +Bkj3nzY1Z0OpLErETn5JAAAA + + +False +-0.523598775598299 +25 +epTail +iGT7GmF0r0CH0TSScrk62AAA + + +False +-0.785398163397448 +40 +epHead +Bkj3nzY1Z0OpLErETn5JAAAA + + +False +0.785398163397448 +40 +epTail +iGT7GmF0r0CH0TSScrk62AAA + + +False +-1000 +-1000 +50 +8 +Bkj3nzY1Z0OpLErETn5JAAAA + + +False +-1000 +-1000 +50 +8 +iGT7GmF0r0CH0TSScrk62AAA + + + +clMaroon +$00B9FFFF +760,402;512,329 +pRL6RWX7IUGI9SeSZRJAEwAA +BoXflTl2zkiHVb9rTj8+gQAA +55htDUboMkKutvJNMs10VwAA + +False +1.5707963267949 +15 +pRL6RWX7IUGI9SeSZRJAEwAA + + +False +1.5707963267949 +30 +pRL6RWX7IUGI9SeSZRJAEwAA + + +False +-1.5707963267949 +15 +pRL6RWX7IUGI9SeSZRJAEwAA + + +False +-0.523598775598299 +30 +epHead +He/O+ItNt0+c+XSWNytz9gAA + + +False +0.523598775598299 +30 +epTail +S4UJZMo1R0qd1Tyo5YNdtgAA + + +False +0.523598775598299 +25 +epHead +He/O+ItNt0+c+XSWNytz9gAA + + +False +-0.523598775598299 +25 +epTail +S4UJZMo1R0qd1Tyo5YNdtgAA + + +False +-0.785398163397448 +40 +epHead +He/O+ItNt0+c+XSWNytz9gAA + + +False +0.785398163397448 +40 +epTail +S4UJZMo1R0qd1Tyo5YNdtgAA + + +False +-1000 +-1000 +50 +8 +He/O+ItNt0+c+XSWNytz9gAA + + +False +-1000 +-1000 +50 +8 +S4UJZMo1R0qd1Tyo5YNdtgAA + + + +clMaroon +$00B9FFFF +536 +96 +149 +45 +cH75vr0YhkuvV/fYij/FMgAA + + +1 +download & build + + +False + + +False + + + +False +cH75vr0YhkuvV/fYij/FMgAA + + +False +cH75vr0YhkuvV/fYij/FMgAA + + +False +cH75vr0YhkuvV/fYij/FMgAA + + + +clMaroon +$00B9FFFF +368,112;536,116 +wARDKsfmxU6pDs0VU6O25wAA +DOHBlVwZH0CnyAOdMPUqxQAA +7R3Vtrr63kqhX5GzE7CY4gAA + +False +1.5707963267949 +15 +wARDKsfmxU6pDs0VU6O25wAA + + +False +1.5707963267949 +30 +wARDKsfmxU6pDs0VU6O25wAA + + +False +-1.5707963267949 +15 +wARDKsfmxU6pDs0VU6O25wAA + + +False +-0.523598775598299 +30 +epHead +tMwNvnbWx0qC99wvlGYF3AAA + + +False +0.523598775598299 +30 +epTail +6sd33lS3GkaENMAtDneYfAAA + + +False +0.523598775598299 +25 +epHead +tMwNvnbWx0qC99wvlGYF3AAA + + +False +-0.523598775598299 +25 +epTail +6sd33lS3GkaENMAtDneYfAAA + + +False +-0.785398163397448 +40 +epHead +tMwNvnbWx0qC99wvlGYF3AAA + + +False +0.785398163397448 +40 +epTail +6sd33lS3GkaENMAtDneYfAAA + + +False +-1000 +-1000 +50 +8 +tMwNvnbWx0qC99wvlGYF3AAA + + +False +-1000 +-1000 +50 +8 +6sd33lS3GkaENMAtDneYfAAA + + + +clMaroon +$00B9FFFF +765,276;632,140 +NRxXI+ohkUa8ldCSWR3lNQAA +DOHBlVwZH0CnyAOdMPUqxQAA +jBby7rVxVkO+HkQ21KY54wAA + +False +1.5707963267949 +15 +NRxXI+ohkUa8ldCSWR3lNQAA + + +False +1.5707963267949 +30 +NRxXI+ohkUa8ldCSWR3lNQAA + + +False +-1.5707963267949 +15 +NRxXI+ohkUa8ldCSWR3lNQAA + + +False +-0.523598775598299 +30 +epHead +VvLdglslUUqBPX/aHaWVywAA + + +False +0.523598775598299 +30 +epTail +8hHEA5HEUkaJOUrimD+IqwAA + + +False +0.523598775598299 +25 +epHead +VvLdglslUUqBPX/aHaWVywAA + + +False +-0.523598775598299 +25 +epTail +8hHEA5HEUkaJOUrimD+IqwAA + + +False +-0.785398163397448 +40 +epHead +VvLdglslUUqBPX/aHaWVywAA + + +False +0.785398163397448 +40 +epTail +8hHEA5HEUkaJOUrimD+IqwAA + + +False +-1000 +-1000 +50 +8 +VvLdglslUUqBPX/aHaWVywAA + + +False +-1000 +-1000 +50 +8 +8hHEA5HEUkaJOUrimD+IqwAA + + + +clMaroon +$00B9FFFF +544 +148 +127 +45 +K/jI5ejWkEmd+RwmoOHzSgAA + + +1 +new-demond + + +False + + +False + + + +False +K/jI5ejWkEmd+RwmoOHzSgAA + + +False +K/jI5ejWkEmd+RwmoOHzSgAA + + +False +K/jI5ejWkEmd+RwmoOHzSgAA + + + +clMaroon +$00B9FFFF +764,286;637,192 +HwNxguHxkEq1TTvntBzfPQAA ++xQR3R4Khk2Mr7tmPdkWSwAA +jBby7rVxVkO+HkQ21KY54wAA + +False +1.5707963267949 +15 +HwNxguHxkEq1TTvntBzfPQAA + + +False +1.5707963267949 +30 +HwNxguHxkEq1TTvntBzfPQAA + + +False +-1.5707963267949 +15 +HwNxguHxkEq1TTvntBzfPQAA + + +False +-0.523598775598299 +30 +epHead +LgaAK4fEB0e2otJzSn7toQAA + + +False +0.523598775598299 +30 +epTail +aS8jAO3xFkSspkn5BLzAQwAA + + +False +0.523598775598299 +25 +epHead +LgaAK4fEB0e2otJzSn7toQAA + + +False +-0.523598775598299 +25 +epTail +aS8jAO3xFkSspkn5BLzAQwAA + + +False +-0.785398163397448 +40 +epHead +LgaAK4fEB0e2otJzSn7toQAA + + +False +0.785398163397448 +40 +epTail +aS8jAO3xFkSspkn5BLzAQwAA + + +False +-1000 +-1000 +50 +8 +LgaAK4fEB0e2otJzSn7toQAA + + +False +-1000 +-1000 +50 +8 +aS8jAO3xFkSspkn5BLzAQwAA + + + +clMaroon +$00B9FFFF +772,376;625,192 +JDSYiscd1ku4Q9VTc3cxJAAA ++xQR3R4Khk2Mr7tmPdkWSwAA +55htDUboMkKutvJNMs10VwAA + +False +1.5707963267949 +15 +JDSYiscd1ku4Q9VTc3cxJAAA + + +False +1.5707963267949 +30 +JDSYiscd1ku4Q9VTc3cxJAAA + + +False +-1.5707963267949 +15 +JDSYiscd1ku4Q9VTc3cxJAAA + + +False +-0.523598775598299 +30 +epHead +hU4yh3LkjEKFkdS6cl0FBwAA + + +False +0.523598775598299 +30 +epTail +YldXkvDuwE27LSJywqCl4AAA + + +False +0.523598775598299 +25 +epHead +hU4yh3LkjEKFkdS6cl0FBwAA + + +False +-0.523598775598299 +25 +epTail +YldXkvDuwE27LSJywqCl4AAA + + +False +-0.785398163397448 +40 +epHead +hU4yh3LkjEKFkdS6cl0FBwAA + + +False +0.785398163397448 +40 +epTail +YldXkvDuwE27LSJywqCl4AAA + + +False +-1000 +-1000 +50 +8 +hU4yh3LkjEKFkdS6cl0FBwAA + + +False +-1000 +-1000 +50 +8 +YldXkvDuwE27LSJywqCl4AAA + + + +clMaroon +$00B9FFFF +550,192;362,264 +COsG4HSpZUe/Vic0aL5j4AAA +1XmGBT1/RUKVRwCIItHBqQAA ++xQR3R4Khk2Mr7tmPdkWSwAA + +False +1.5707963267949 +15 +COsG4HSpZUe/Vic0aL5j4AAA + + +False +1.5707963267949 +30 +COsG4HSpZUe/Vic0aL5j4AAA + + +False +-1.5707963267949 +15 +COsG4HSpZUe/Vic0aL5j4AAA + + +False +-0.523598775598299 +30 +epHead +TWHK+EvM0kuJxrZGPnmV/gAA + + +False +0.523598775598299 +30 +epTail +g4nzG5AXAUmT/Juw/Y+HhwAA + + +False +0.523598775598299 +25 +epHead +TWHK+EvM0kuJxrZGPnmV/gAA + + +False +-0.523598775598299 +25 +epTail +g4nzG5AXAUmT/Juw/Y+HhwAA + + +False +-0.785398163397448 +40 +epHead +TWHK+EvM0kuJxrZGPnmV/gAA + + +False +0.785398163397448 +40 +epTail +g4nzG5AXAUmT/Juw/Y+HhwAA + + +False +-1000 +-1000 +50 +8 +TWHK+EvM0kuJxrZGPnmV/gAA + + +False +-1000 +-1000 +50 +8 +g4nzG5AXAUmT/Juw/Y+HhwAA + + + +clMaroon +$00B9FFFF +400 +224 +128 +45 +ozTLGGkik02HnJ667z5MBQAA + + +1 +doc & tutorial + + +False + + +False + + + +False +ozTLGGkik02HnJ667z5MBQAA + + +False +ozTLGGkik02HnJ667z5MBQAA + + +False +ozTLGGkik02HnJ667z5MBQAA + + + +clMaroon +$00B9FFFF +199,222;392,184 +eD6wP/fAO0qZXgTPDYw14gAA +Vdh7zL8QZ0OtD+C+OlvxpgAA +LqRrN84lGEeTv5o2IgfsSwAA + +False +1.5707963267949 +15 +eD6wP/fAO0qZXgTPDYw14gAA + + +False +1.5707963267949 +30 +eD6wP/fAO0qZXgTPDYw14gAA + + +False +-1.5707963267949 +15 +eD6wP/fAO0qZXgTPDYw14gAA + + +False +-0.523598775598299 +30 +epHead +XNH/vjJrPkeWiAnFueRS2wAA + + +False +0.523598775598299 +30 +epTail +NwDa11zhX0qixnczVDBHswAA + + +False +0.523598775598299 +25 +epHead +XNH/vjJrPkeWiAnFueRS2wAA + + +False +-0.523598775598299 +25 +epTail +NwDa11zhX0qixnczVDBHswAA + + +False +-0.785398163397448 +40 +epHead +XNH/vjJrPkeWiAnFueRS2wAA + + +False +0.785398163397448 +40 +epTail +NwDa11zhX0qixnczVDBHswAA + + +False +-1000 +-1000 +50 +8 +XNH/vjJrPkeWiAnFueRS2wAA + + +False +-1000 +-1000 +50 +8 +NwDa11zhX0qixnczVDBHswAA + + + +clMaroon +$00B9FFFF +199,263;279,332 +ijA0VzIZG0G7ohk808I7EAAA +0NZb34oq+0iz6/8DYcniywAA +LqRrN84lGEeTv5o2IgfsSwAA + +False +1.5707963267949 +15 +ijA0VzIZG0G7ohk808I7EAAA + + +False +1.5707963267949 +30 +ijA0VzIZG0G7ohk808I7EAAA + + +False +-1.5707963267949 +15 +ijA0VzIZG0G7ohk808I7EAAA + + +False +-0.523598775598299 +30 +epHead +sHxTuCDocEyzJSz3moadcwAA + + +False +0.523598775598299 +30 +epTail +2wepYfQ1HEOA25v4ibitGAAA + + +False +0.523598775598299 +25 +epHead +sHxTuCDocEyzJSz3moadcwAA + + +False +-0.523598775598299 +25 +epTail +2wepYfQ1HEOA25v4ibitGAAA + + +False +-0.785398163397448 +40 +epHead +sHxTuCDocEyzJSz3moadcwAA + + +False +0.785398163397448 +40 +epTail +2wepYfQ1HEOA25v4ibitGAAA + + +False +-1000 +-1000 +50 +8 +sHxTuCDocEyzJSz3moadcwAA + + +False +-1000 +-1000 +50 +8 +2wepYfQ1HEOA25v4ibitGAAA + + + +clMaroon +$00B9FFFF +199,232;400,243 +tV4kKe/RSky6myfeSP18swAA +OJNZyLkPgkW5YFYA5x/ChQAA +LqRrN84lGEeTv5o2IgfsSwAA + +False +1.5707963267949 +15 +tV4kKe/RSky6myfeSP18swAA + + +False +1.5707963267949 +30 +tV4kKe/RSky6myfeSP18swAA + + +False +-1.5707963267949 +15 +tV4kKe/RSky6myfeSP18swAA + + +False +-0.523598775598299 +30 +epHead +yYIJFraZbU6Xh62CJfSi8wAA + + +False +0.523598775598299 +30 +epTail +PW0DMEjQBEykIxMEhQ5JaAAA + + +False +0.523598775598299 +25 +epHead +yYIJFraZbU6Xh62CJfSi8wAA + + +False +-0.523598775598299 +25 +epTail +PW0DMEjQBEykIxMEhQ5JaAAA + + +False +-0.785398163397448 +40 +epHead +yYIJFraZbU6Xh62CJfSi8wAA + + +False +0.785398163397448 +40 +epTail +PW0DMEjQBEykIxMEhQ5JaAAA + + +False +-1000 +-1000 +50 +8 +yYIJFraZbU6Xh62CJfSi8wAA + + +False +-1000 +-1000 +50 +8 +PW0DMEjQBEykIxMEhQ5JaAAA + + + +clMaroon +$00B9FFFF +16 +108 +130 +45 +wE/srVLQHE2sCDr/+ydmYAAA + + +1 +launch-publish + + +False + + +False + + + +False +wE/srVLQHE2sCDr/+ydmYAAA + + +False +wE/srVLQHE2sCDr/+ydmYAAA + + +False +wE/srVLQHE2sCDr/+ydmYAAA + + + +clMaroon +$00B9FFFF +205,346;240,349 +dK9I6bZRfUih3ErZpfx4hAAA +0NZb34oq+0iz6/8DYcniywAA +8ZQdZB1z0kaDUzkVHOzvRgAA + +False +1.5707963267949 +15 +dK9I6bZRfUih3ErZpfx4hAAA + + +False +1.5707963267949 +30 +dK9I6bZRfUih3ErZpfx4hAAA + + +False +-1.5707963267949 +15 +dK9I6bZRfUih3ErZpfx4hAAA + + +False +-0.523598775598299 +30 +epHead +gIU56iDnlUaFhBS+rQgjwgAA + + +False +0.523598775598299 +30 +epTail +VD6ZOZdU+UucOrfmGN2ehAAA + + +False +0.523598775598299 +25 +epHead +gIU56iDnlUaFhBS+rQgjwgAA + + +False +-0.523598775598299 +25 +epTail +VD6ZOZdU+UucOrfmGN2ehAAA + + +False +-0.785398163397448 +40 +epHead +gIU56iDnlUaFhBS+rQgjwgAA + + +False +0.785398163397448 +40 +epTail +VD6ZOZdU+UucOrfmGN2ehAAA + + +False +-1000 +-1000 +50 +8 +gIU56iDnlUaFhBS+rQgjwgAA + + +False +-1000 +-1000 +50 +8 +VD6ZOZdU+UucOrfmGN2ehAAA + + + +clMaroon +$00B9FFFF +16 +292 +128 +45 +KDFXOvN54E2A+KD+zjp/rwAA + + +1 +task-manager + + +False + + +False + + + +False +KDFXOvN54E2A+KD+zjp/rwAA + + +False +KDFXOvN54E2A+KD+zjp/rwAA + + +False +KDFXOvN54E2A+KD+zjp/rwAA + + + +clMaroon +$00B9FFFF +20 +348 +108 +45 +k6w1Bteav02GGDrC6cJmKQAA + + +1 +new-idea + + +False + + +False + + + +False +k6w1Bteav02GGDrC6cJmKQAA + + +False +k6w1Bteav02GGDrC6cJmKQAA + + +False +k6w1Bteav02GGDrC6cJmKQAA + + + +clMaroon +$00B9FFFF +777,376;624,140 +OeFvUQCLbkSUntfY8QQZjQAA +DOHBlVwZH0CnyAOdMPUqxQAA +55htDUboMkKutvJNMs10VwAA + +False +1.5707963267949 +15 +OeFvUQCLbkSUntfY8QQZjQAA + + +False +1.5707963267949 +30 +OeFvUQCLbkSUntfY8QQZjQAA + + +False +-1.5707963267949 +15 +OeFvUQCLbkSUntfY8QQZjQAA + + +False +-0.523598775598299 +30 +epHead +9QetYTXGJUuUfmUAHqUS4gAA + + +False +0.523598775598299 +30 +epTail +nrc3+Xx32EKxZK145yefSgAA + + +False +0.523598775598299 +25 +epHead +9QetYTXGJUuUfmUAHqUS4gAA + + +False +-0.523598775598299 +25 +epTail +nrc3+Xx32EKxZK145yefSgAA + + +False +-0.785398163397448 +40 +epHead +9QetYTXGJUuUfmUAHqUS4gAA + + +False +0.785398163397448 +40 +epTail +nrc3+Xx32EKxZK145yefSgAA + + +False +-1000 +-1000 +50 +8 +9QetYTXGJUuUfmUAHqUS4gAA + + +False +-1000 +-1000 +50 +8 +nrc3+Xx32EKxZK145yefSgAA + + + + + +pkg-builder +tacoxPrx8kCKprVgJHnvqgAA + +aYJ9/XooBkmA6/FiFJuMIQAA +7 + +clMaroon +$00B9FFFF +144 +108 +120 +70 ++ji05KqWx0+15bzf+i9ZaAAA + + +build-pkg + + +False + + +False + + + + +clMaroon +$00B9FFFF +332 +140 +120 +70 +9m9n/MGV7kKh0PE7WrKhKAAA + + +build-config + + +False + + +False + + + + +clMaroon +$00B9FFFF +224 +272 +120 +70 +NlQ9Rg8NL061+rbOyUtEFgAA + + +build-pkglist + + +False + + +False + + + + +clMaroon +$00B9FFFF +432 +296 +120 +70 +vt3kyFkrMUef7jELG3+4KQAA + + +devutils + + +False + + +False + + + + +clMaroon +$00B9FFFF +608 +232 +120 +70 +LAuXBlsgVEy9diBr2n4AdwAA + + +codemngr + + +False + + +False + + + + +clMaroon +$00B9FFFF +628 +324 +120 +70 +AihHVW7SgkeVDEL8szGXUQAA + + +soft-repo + + +False + + +False + + + + +clMaroon +$00B9FFFF +404 +64 +120 +70 +koV3blO6REyuCQSKEhgOdAAA + + +devspec + + +False + + +False + + + + + + +dev-flow +tacoxPrx8kCKprVgJHnvqgAA + +OX4lnFVWFU6PHMrbj32cxAAA +129 + +clMaroon +1368 +468 +196 +353 +System + + +clMaroon +1580 +308 +185 +273 +System + + +clMaroon +1088 +12 +477 +449 +System + + +clMaroon +1564 +208 +300 +System + + +clMaroon +$00B9FFFF +872 +304 +200 +300 +System + + +clMaroon +$00B9FFFF +720 +4 +320 +189 +System + + +clMaroon +$00B9FFFF +172 +56 +121 +45 +7QUh/FC01Eqc8uAicCcB5QAA + + +1 +analysis + + +False + + +False + + + +False +7QUh/FC01Eqc8uAicCcB5QAA + + +False +7QUh/FC01Eqc8uAicCcB5QAA + + +False +7QUh/FC01Eqc8uAicCcB5QAA + + + +clMaroon +$00B9FFFF +928 +356 +70 +32 +GB5fgt+BCEuZu+MykpdKRQAA + + +1 +design + + +False + + +False + + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + + +clMaroon +$00B9FFFF +76 +292 +113 +45 +h9lhv0QFq0aFwcWza3gsDAAA + + +1 +list-external + + +False + + +False + + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + + +clMaroon +$00B9FFFF +204 +312 +231 +45 +XmSQJXVfo0qkbNCidOBOzwAA + + +1 +operation & action analysis + + +False + + +False + + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + + +clMaroon +$00B9FFFF +216 +252 +144 +45 +kETY7OJYc0qg/QkJQX2LXQAA + + +1 +data-io-analysis + + +False + + +False + + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + + +clMaroon +132 +360 +112 +30 +operation-actor-list + + + +clMaroon +92 +220 +87 +30 +physical-io-list + + + +clMaroon +$00B9FFFF +134,249;133,292 +ar/cmfoCE0OyMW57ay1ytwAA +T4twcBKRhUu/n8O3MeJdLwAA + + +clMaroon +$00B9FFFF +174,360;152,336 +ar/cmfoCE0OyMW57ay1ytwAA +MY8KtI96lUemNY9fWLx6pgAA + + +clMaroon +$00B9FFFF +233,360;246,356 +6iOG2zf6TEyGTIPJKas9rAAA +MY8KtI96lUemNY9fWLx6pgAA + + +clMaroon +$00B9FFFF +178,245;216,255 +ZVZSHvdc90+uyCG9xQvFFwAA +T4twcBKRhUu/n8O3MeJdLwAA + + +clMaroon +$00B9FFFF +188,300;216,293 +NSCnR/cZlUa3fXcKMhA8sQAA +ZVZSHvdc90+uyCG9xQvFFwAA +ar/cmfoCE0OyMW57ay1ytwAA + +False +1.5707963267949 +15 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +1.5707963267949 +30 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +-1.5707963267949 +15 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +-0.523598775598299 +30 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +0.523598775598299 +30 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +0.523598775598299 +25 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +-0.523598775598299 +25 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +-0.785398163397448 +40 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +0.785398163397448 +40 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +-932 +-1004 +50 +8 +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +-932 +-1004 +50 +8 +HdgD2FmAh06xyFDupk4vagAA + + + +clMaroon +$00B9FFFF +188,320;204,322 +ubIfnYMMgEuGrguT+jcONAAA +6iOG2zf6TEyGTIPJKas9rAAA +ar/cmfoCE0OyMW57ay1ytwAA + +False +1.5707963267949 +15 +ubIfnYMMgEuGrguT+jcONAAA + + +False +1.5707963267949 +30 +ubIfnYMMgEuGrguT+jcONAAA + + +False +-1.5707963267949 +15 +ubIfnYMMgEuGrguT+jcONAAA + + +False +-0.523598775598299 +30 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +0.523598775598299 +30 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +0.523598775598299 +25 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +-0.523598775598299 +25 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +-0.785398163397448 +40 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +0.785398163397448 +40 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +-932 +-1004 +50 +8 +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +-932 +-1004 +50 +8 +pxqjN0GODE69EvLg0dAl+AAA + + + +clMaroon +$00FFFF80 +220 +168 +108 +30 +data-flow-diagram + + + +clMaroon +$00FFFF80 +380 +388 +154 +38 +action-flow-diagram +invoking-procedure-diagram + + + +clMaroon +$00B9FFFF +275,197;284,252 +ZVZSHvdc90+uyCG9xQvFFwAA +TUzHcFBaSUWvtpWsS2/jdQAA + + +clMaroon +$00B9FFFF +422,388;361,356 +6iOG2zf6TEyGTIPJKas9rAAA +3VXAJzmn0kOyq98DVwWHnAAA + + +clMaroon +$00FFFF80 +352 +560 +134 +30 +function-feature-list-file + + + +clMaroon +$00B9FFFF +240 +388 +121 +38 +top-usecase-diagram +usecase-diagram + + + +clMaroon +$00B9FFFF +305,388;313,356 +6iOG2zf6TEyGTIPJKas9rAAA +p961lf0fSEW3ZPuY+wyZQgAA + + +clMaroon +$00B9FFFF +204 +440 +121 +45 +TMPdkgNID0u772le0sCmLgAA + + +1 +new-ideas + + +False + + +False + + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + + +clMaroon +$00B9FFFF +205 +548 +127 +45 +Kh+ykp9GgU6PQXUx+CGLxgAA + + +1 +new-demonds + + +False + + +False + + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + + +clMaroon +$00B9FFFF +340 +496 +151 +45 +06qF2g1ff02RsBbBfLLo1gAA + + +1 +demond-analysis + + +False + + +False + + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + + +clMaroon +$00B9FFFF +208 +504 +123 +30 +note record in tagdoc + + + +clMaroon +$00B9FFFF +268,504;266,484 +sFw3N+djIEOBwQg4t6R70wAA +8hNIvxldLUuPj82B7trzxgAA + + +clMaroon +$00B9FFFF +268,548;268,533 +8hNIvxldLUuPj82B7trzxgAA +hlEB9emSQ0yr5JtMXv8exgAA + + +clMaroon +$00B9FFFF +340,518;330,518 +8hNIvxldLUuPj82B7trzxgAA +pbFdS1YKskuJx2F5GYPsxwAA + + +clMaroon +$00B9FFFF +324,484;356,496 +ZE6XGr3H4E+M1Lu1nRZ9BQAA +pbFdS1YKskuJx2F5GYPsxwAA +sFw3N+djIEOBwQg4t6R70wAA + +False +1.5707963267949 +15 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +1.5707963267949 +30 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-1.5707963267949 +15 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-0.523598775598299 +30 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.523598775598299 +30 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +0.523598775598299 +25 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +-0.523598775598299 +25 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-0.785398163397448 +40 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.785398163397448 +40 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-1104 +-720 +50 +8 +irMBt7uWtEaxRopZEBcfwgAA + + +False +-1104 +-720 +50 +8 +eu/8Siwir02KNGkRDOEa9gAA + + + +clMaroon +$00B9FFFF +331,548;353,540 +li4LwavBrE+pggONaW7QkwAA +pbFdS1YKskuJx2F5GYPsxwAA +hlEB9emSQ0yr5JtMXv8exgAA + +False +1.5707963267949 +15 +li4LwavBrE+pggONaW7QkwAA + + +False +1.5707963267949 +30 +li4LwavBrE+pggONaW7QkwAA + + +False +-1.5707963267949 +15 +li4LwavBrE+pggONaW7QkwAA + + +False +-0.523598775598299 +30 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.523598775598299 +30 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +0.523598775598299 +25 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-0.523598775598299 +25 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-0.785398163397448 +40 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.785398163397448 +40 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-1104 +-720 +50 +8 +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-1104 +-720 +50 +8 +gehfWFMIjEKeVzAcdHneqgAA + + + +clMaroon +$00B9FFFF +417,560;416,540 +pbFdS1YKskuJx2F5GYPsxwAA +n5RHkAHiq0GHEjHyehEKAgAA + + +clMaroon +$00B9FFFF +388 +208 +165 +45 +c4KyOid86k6Bzi+unTPcfAAA + + +1 +generate data-dict + + +False + + +False + + + +False +c4KyOid86k6Bzi+unTPcfAAA + + +False +c4KyOid86k6Bzi+unTPcfAAA + + +False +c4KyOid86k6Bzi+unTPcfAAA + + + +clMaroon +$00B9FFFF +408 +148 +63 +30 +data-dict + + + +clMaroon +$00B9FFFF +460,208;446,177 +tAAqkaExpkOHoSKHhWwzIAAA +RvaeyZG/PUeTpXEVgO7PywAA + + +clMaroon +$00B9FFFF +359,257;388,250 +dxugzP0ZBEOdRYlU9N5SDAAA +RvaeyZG/PUeTpXEVgO7PywAA +ZVZSHvdc90+uyCG9xQvFFwAA + +False +1.5707963267949 +15 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +1.5707963267949 +30 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +-1.5707963267949 +15 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +-0.523598775598299 +30 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +0.523598775598299 +30 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +0.523598775598299 +25 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +-0.523598775598299 +25 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +-0.785398163397448 +40 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +0.785398163397448 +40 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +-932 +-1004 +50 +8 +/vsJW8WzsU++6Lul86APuQAA + + +False +-932 +-1004 +50 +8 +z475GIA9kECnM3EOwAHh6QAA + + + +clMaroon +$00B9FFFF +520 +148 +178 +45 +8E86OOxmt0eTCKMQNrubWAAA + + +1 +data-entity-analysis + + +False + + +False + + + +False +8E86OOxmt0eTCKMQNrubWAAA + + +False +8E86OOxmt0eTCKMQNrubWAAA + + +False +8E86OOxmt0eTCKMQNrubWAAA + + + +clMaroon +$00B9FFFF +521,208;558,192 +TfaTWdzXx0eF98RMZF5U/AAA +3zDgV/Xi/0+DECy5hTfn6AAA +RvaeyZG/PUeTpXEVgO7PywAA + +False +1.5707963267949 +15 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +1.5707963267949 +30 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +-1.5707963267949 +15 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +-0.523598775598299 +30 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +0.523598775598299 +30 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +0.523598775598299 +25 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +-0.523598775598299 +25 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +-0.785398163397448 +40 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +0.785398163397448 +40 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +-932 +-1004 +50 +8 +FR6YZrNJHkeksGzXICrvngAA + + +False +-932 +-1004 +50 +8 +ApKyMGFOCkStssh0gwBpKAAA + + + +clMaroon +$00B9FFFF +520,166;470,164 +tAAqkaExpkOHoSKHhWwzIAAA +3zDgV/Xi/0+DECy5hTfn6AAA + + +clMaroon +$00B9FFFF +476 +108 +75 +30 +ER-diagram + + + +clMaroon +$00B9FFFF +543,137;565,148 +3zDgV/Xi/0+DECy5hTfn6AAA +kcVNQ0wczES+n8ehG2y2/QAA + + +clMaroon +$00B9FFFF +444 +260 +145 +45 +tnTkvoZxVkmVjIgd8K6VcwAA + + +1 +module-analysis + + +False + + +False + + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + + +clMaroon +$00B9FFFF +359,277;444,280 +BNlaobUxlkaxprXRzDMgIwAA +s/iW5IUcqEOvkUCPbURcvAAA +ZVZSHvdc90+uyCG9xQvFFwAA + +False +1.5707963267949 +15 +BNlaobUxlkaxprXRzDMgIwAA + + +False +1.5707963267949 +30 +BNlaobUxlkaxprXRzDMgIwAA + + +False +-1.5707963267949 +15 +BNlaobUxlkaxprXRzDMgIwAA + + +False +-0.523598775598299 +30 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +0.523598775598299 +30 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +0.523598775598299 +25 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +-0.523598775598299 +25 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +-0.785398163397448 +40 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +0.785398163397448 +40 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +-932 +-1004 +50 +8 +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +-932 +-1004 +50 +8 +UtVAs5JBSkKc0jSVdLpypQAA + + + +clMaroon +$00B9FFFF +402,312;444,301 +t3VIg1cXJEmsTGdIYQFIcwAA +s/iW5IUcqEOvkUCPbURcvAAA +6iOG2zf6TEyGTIPJKas9rAAA + +False +1.5707963267949 +15 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +1.5707963267949 +30 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +-1.5707963267949 +15 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +-0.523598775598299 +30 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +0.523598775598299 +30 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +0.523598775598299 +25 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +-0.523598775598299 +25 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +-0.785398163397448 +40 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +0.785398163397448 +40 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +-932 +-1004 +50 +8 +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +-932 +-1004 +50 +8 +IuqkqTOhTEuBUbn2uLNuqAAA + + + +clMaroon +$00B9FFFF +528 +500 +85 +53 +build-dest +install-pkg-list +src-pkg + + + +clMaroon +$00FFFF80 +508 +332 +152 +38 +function-module-list-file +class-diagram + + + +clMaroon +$00B9FFFF +565,332;538,304 +s/iW5IUcqEOvkUCPbURcvAAA +XplFyUBcGE23N1wJH+UaowAA + + +clMaroon +$00FF80FF +80 +524 +117 +45 +7FwnjSWdM0KKXAN3V8oQMAAA + + +1 +soft-demond + + +False + + +False + + + +False +7FwnjSWdM0KKXAN3V8oQMAAA + + +False +7FwnjSWdM0KKXAN3V8oQMAAA + + +False +7FwnjSWdM0KKXAN3V8oQMAAA + + + +clMaroon +$00FF80FF +72 +444 +121 +45 +mx6wTw6+KEuGtAr0iRUXJwAA + + +1 +soft-analysis + + +False + + +False + + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + + +clMaroon +$00B9FFFF +388,210;327,195 +TUzHcFBaSUWvtpWsS2/jdQAA +RvaeyZG/PUeTpXEVgO7PywAA + + +clMaroon +$00FFFF80 +560 +396 +152 +30 +top-function-module-list-file + + + +clMaroon +$00B9FFFF +544 +448 +267 +45 +EjjnPhUmf02yFIvhJmdcmQAA + + +1 +src-pkg and build dest category + + +False + + +False + + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + + +clMaroon +$00B9FFFF +635,492;612,504 +qVEe/fF3/kC3YIIc7BmwuAAA +RDlS3XZVdUCC/tRmDGvFywAA + + +clMaroon +$00B9FFFF +645,425;661,448 +RDlS3XZVdUCC/tRmDGvFywAA +T6b0hHxnwE+qhStkZmN/sQAA + + +clMaroon +$00B9FFFF +505,304;465,388 +3VXAJzmn0kOyq98DVwWHnAAA +s/iW5IUcqEOvkUCPbURcvAAA + + +clMaroon +$00B9FFFF +620 +260 +121 +45 +a7yZcyAyl02YNl0/FQziyQAA + + +1 +layer-design + + +False + + +False + + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + + +clMaroon +$00B9FFFF +600 +204 +171 +38 +function-module-struct-diagram +architech-diagram + + + +clMaroon +$00B9FFFF +683,241;682,260 +iVh3QgkpmkKlqxcSGYTCIQAA +wOOUnwLcykSHmOK6Cujx5gAA + + +clMaroon +$00B9FFFF +588,282;620,282 +xMoCRZ0FD0mJscRNN+UpywAA +iVh3QgkpmkKlqxcSGYTCIQAA +s/iW5IUcqEOvkUCPbURcvAAA + +False +1.5707963267949 +15 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +1.5707963267949 +30 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +-1.5707963267949 +15 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +-0.523598775598299 +30 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +0.523598775598299 +30 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +0.523598775598299 +25 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +-0.523598775598299 +25 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +-0.785398163397448 +40 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +0.785398163397448 +40 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +-932 +-1004 +50 +8 +FVDBPeq7mEKlp1go7V1hsgAA + + +False +-932 +-1004 +50 +8 +6MJU+jYHa0mx8HaVM4S+8QAA + + + +clMaroon +$00B9FFFF +132,444;132,336 +BZR3CshDZEOw2M912JpeeQAA +ar/cmfoCE0OyMW57ay1ytwAA +9ECchidjm0Oyi96zrE/MCgAA + +False +1.5707963267949 +15 +BZR3CshDZEOw2M912JpeeQAA + + +False +1.5707963267949 +30 +BZR3CshDZEOw2M912JpeeQAA + + +False +-1.5707963267949 +15 +BZR3CshDZEOw2M912JpeeQAA + + +False +-0.523598775598299 +30 +epHead +vN04w+sn8kGRW/7MCPHqyAAA + + +False +0.523598775598299 +30 +epTail +0CpaRkRUf0+bAPOkrSqRSgAA + + +False +0.523598775598299 +25 +epHead +vN04w+sn8kGRW/7MCPHqyAAA + + +False +-0.523598775598299 +25 +epTail +0CpaRkRUf0+bAPOkrSqRSgAA + + +False +-0.785398163397448 +40 +epHead +vN04w+sn8kGRW/7MCPHqyAAA + + +False +0.785398163397448 +40 +epTail +0CpaRkRUf0+bAPOkrSqRSgAA + + +False +-1000 +-1000 +50 +8 +vN04w+sn8kGRW/7MCPHqyAAA + + +False +-1000 +-1000 +50 +8 +0CpaRkRUf0+bAPOkrSqRSgAA + + + +clMaroon +$00B9FFFF +196,557;205,559 +/FmqeTd2akSH7n3I8hA3mQAA +hlEB9emSQ0yr5JtMXv8exgAA +XmyUwnJKX02C4THv/GbClAAA + +False +1.5707963267949 +15 +/FmqeTd2akSH7n3I8hA3mQAA + + +False +1.5707963267949 +30 +/FmqeTd2akSH7n3I8hA3mQAA + + +False +-1.5707963267949 +15 +/FmqeTd2akSH7n3I8hA3mQAA + + +False +-0.523598775598299 +30 +epHead +QZwwsltNj0eenKeiSJArvQAA + + +False +0.523598775598299 +30 +epTail +vq1zAfKQxUWnGiKbBTmYJwAA + + +False +0.523598775598299 +25 +epHead +QZwwsltNj0eenKeiSJArvQAA + + +False +-0.523598775598299 +25 +epTail +vq1zAfKQxUWnGiKbBTmYJwAA + + +False +-0.785398163397448 +40 +epHead +QZwwsltNj0eenKeiSJArvQAA + + +False +0.785398163397448 +40 +epTail +vq1zAfKQxUWnGiKbBTmYJwAA + + +False +-1000 +-1000 +50 +8 +QZwwsltNj0eenKeiSJArvQAA + + +False +-1000 +-1000 +50 +8 +vq1zAfKQxUWnGiKbBTmYJwAA + + + +clMaroon +$00B9FFFF +700 +524 +132 +98 +cmd-args-design +running-param-design +.lex/.gmr/.type/.ui +time-sequence-diagram +E-R-diagram +sql-tbl + + + +clMaroon +$00B9FFFF +1591 +76 +134 +45 +kM7+GQ5RuEmygAJdSluSjQAA + + +1 +src-pkg-create + + +False + + +False + + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + + +clMaroon +$00B9FFFF +1580 +248 +156 +45 +KmQBouG6c0yb16gPnUnBtQAA + + +1 +RAD-demo + + +False + + +False + + + +False +KmQBouG6c0yb16gPnUnBtQAA + + +False +KmQBouG6c0yb16gPnUnBtQAA + + +False +KmQBouG6c0yb16gPnUnBtQAA + + + +clMaroon +$00B9FFFF +1344 +173 +135 +32 +CLf6+wSJ/U+4iSwM7QoY3wAA + + +1 +design-to-code + + +False + + +False + + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + + +clMaroon +$00B9FFFF +1428 +284 +104 +32 +gJ7o4uiAMEqSPUL3dadz2wAA + + +1 +unit-coding + + +False + + +False + + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + + +clMaroon +$00B9FFFF +1360 +353 +108 +32 +wftqTlAvI0+cR9j69saRNQAA + + +1 +unit-testing + + +False + + +False + + + +False +wftqTlAvI0+cR9j69saRNQAA + + +False +wftqTlAvI0+cR9j69saRNQAA + + +False +wftqTlAvI0+cR9j69saRNQAA + + + +clMaroon +$00B9FFFF +1344 +404 +152 +32 +qlZGCifQOEyQyqBzIH1x/AAA + + +1 +integrate-testing + + +False + + +False + + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + + +clMaroon +$00B9FFFF +1609 +398 +121 +45 +lOyDrRE6cEms6LglvRhNKwAA + + +1 +testing + + +False + + +False + + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + + +clMaroon +$00B9FFFF +1595 +460 +148 +45 +ucei5JvgaEarsuGuZmgj7QAA + + +1 +doc-tutorial-web + + +False + + +False + + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + + +clMaroon +$00B9FFFF +1609 +522 +121 +45 +ZFe9gOmpTEWMgVssyEcAWAAA + + +1 +version-pkg + + +False + + +False + + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + + +clMaroon +$00B9FFFF +1401 +563 +131 +45 +lEIXTXT9L0CS9sEhjP/8NQAA + + +1 +pkg-repo-sync + + +False + + +False + + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + + +clMaroon +$00B9FFFF +1399 +630 +135 +45 +jmiilGYeBU+1y4Yw2n8CKAAA + + +1 +download-build + + +False + + +False + + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + + +clMaroon +$00B9FFFF +1395 +697 +142 +45 +RfRTk7cK0061dLioGm8l7wAA + + +1 +loopbak-testing + + +False + + +False + + + +False +RfRTk7cK0061dLioGm8l7wAA + + +False +RfRTk7cK0061dLioGm8l7wAA + + +False +RfRTk7cK0061dLioGm8l7wAA + + + +clMaroon +$00B9FFFF +1403 +764 +127 +45 +G18zTBUAj0+SdrsOmksR0QAA + + +1 +publish + + +False + + +False + + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + + +clMaroon +$00B9FFFF +1657,120;1657,132 +YcGgDGXOZ06J+TZOxU72agAA +bwHJGe0us0a2jeejcciWlwAA +mCnmzxWG6kWi9OPK25z8CgAA + +False +1.5707963267949 +15 +YcGgDGXOZ06J+TZOxU72agAA + + +False +1.5707963267949 +30 +YcGgDGXOZ06J+TZOxU72agAA + + +False +-1.5707963267949 +15 +YcGgDGXOZ06J+TZOxU72agAA + + +False +-0.523598775598299 +30 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +0.523598775598299 +30 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +0.523598775598299 +25 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +-0.523598775598299 +25 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +-0.785398163397448 +40 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +0.785398163397448 +40 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +-516 +-1008 +50 +8 +W6JXNHPDXE+JzttRtRevOgAA + + +False +-516 +-1008 +50 +8 +rO/Oarhbpk6wEn45hIpPfAAA + + + +clMaroon +$00B9FFFF +1580,269;1548,268;1548,52;964,52;965,72 +8kJkpVqo5kC/wdE3wXcwIAAA +5srcgF0EYUyRM6tylL0wVgAA +PUHktwo1XEONvjakWKxjjgAA + +False +1.5707963267949 +15 +8kJkpVqo5kC/wdE3wXcwIAAA + + +False +1.5707963267949 +30 +8kJkpVqo5kC/wdE3wXcwIAAA + + +False +-1.5707963267949 +15 +8kJkpVqo5kC/wdE3wXcwIAAA + + +False +-0.523598775598299 +30 +epHead +42F3TeDc+kOeEbEW2sSOqwAA + + +False +0.523598775598299 +30 +epTail +b75cgmrZUEiaHJZyDm8qXAAA + + +False +0.523598775598299 +25 +epHead +42F3TeDc+kOeEbEW2sSOqwAA + + +False +-0.523598775598299 +25 +epTail +b75cgmrZUEiaHJZyDm8qXAAA + + +False +-0.785398163397448 +40 +epHead +42F3TeDc+kOeEbEW2sSOqwAA + + +False +0.785398163397448 +40 +epTail +b75cgmrZUEiaHJZyDm8qXAAA + + +False +-540 +-1120 +50 +8 +42F3TeDc+kOeEbEW2sSOqwAA + + +False +-540 +-1120 +50 +8 +b75cgmrZUEiaHJZyDm8qXAAA + + + +clMaroon +$00B9FFFF +1411,204;1411,233 +k48n8C/dEECUhVTIv9BoGQAA +1soCBV2ToUK8JVFLvn+e2wAA +GaKv5RiKr0yqd1YQfpBS6QAA + +False +1.5707963267949 +15 +k48n8C/dEECUhVTIv9BoGQAA + + +False +1.5707963267949 +30 +k48n8C/dEECUhVTIv9BoGQAA + + +False +-1.5707963267949 +15 +k48n8C/dEECUhVTIv9BoGQAA + + +False +-0.523598775598299 +30 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +0.523598775598299 +30 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +0.523598775598299 +25 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +-0.523598775598299 +25 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +-0.785398163397448 +40 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +0.785398163397448 +40 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +-540 +-1120 +50 +8 +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +-540 +-1120 +50 +8 +YXudH8Doi0+zzc1qPMjDNAAA + + + +clMaroon +$00B9FFFF +1464,315;1427,353 +euFZ2oXh1UyoeBpwCRLyDQAA +0HXL2vLmwU+NgNkl6zVkQAAA +Ji7GcpOn/E2KIxghPULMgwAA + +False +1.5707963267949 +15 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +1.5707963267949 +30 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +-1.5707963267949 +15 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +-0.523598775598299 +30 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +0.523598775598299 +30 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +0.523598775598299 +25 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +-0.523598775598299 +25 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +-0.785398163397448 +40 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +0.785398163397448 +40 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +-540 +-1120 +50 +8 +g0Sss8qL1USpNMhJiejoNQAA + + +False +-540 +-1120 +50 +8 +nnIS6vjqXkqw2mw9rhuzugAA + + + +clMaroon +$00B9FFFF +1415,384;1417,404 +h7KFG98rIEKQY4C1dOWmFQAA +lSkarANt7EiYF5x5MQ7+qgAA +0HXL2vLmwU+NgNkl6zVkQAAA + +False +1.5707963267949 +15 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +1.5707963267949 +30 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +-1.5707963267949 +15 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +-0.523598775598299 +30 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +0.523598775598299 +30 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +0.523598775598299 +25 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +-0.523598775598299 +25 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +-0.785398163397448 +40 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +0.785398163397448 +40 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +-540 +-1120 +50 +8 +Fb68OZ19C0WB4BjQurmBRwAA + + +False +-540 +-1120 +50 +8 +akgagoM7O0WP1rFMWH/IzgAA + + + +clMaroon +$00B9FFFF +1480,404;1609,373 +GTroIE/UlEq3H/lwjMvR8wAA +8o8JeUyoWka2YCr2oj8TIgAA +lSkarANt7EiYF5x5MQ7+qgAA + +False +1.5707963267949 +15 +GTroIE/UlEq3H/lwjMvR8wAA + + +False +1.5707963267949 +30 +GTroIE/UlEq3H/lwjMvR8wAA + + +False +-1.5707963267949 +15 +GTroIE/UlEq3H/lwjMvR8wAA + + +False +-0.523598775598299 +30 +epHead +DiYoPg9r+0KN6xRjGDN+kwAA + + +False +0.523598775598299 +30 +epTail +BmvYAIFdPEKrfzWwQhihCAAA + + +False +0.523598775598299 +25 +epHead +DiYoPg9r+0KN6xRjGDN+kwAA + + +False +-0.523598775598299 +25 +epTail +BmvYAIFdPEKrfzWwQhihCAAA + + +False +-0.785398163397448 +40 +epHead +DiYoPg9r+0KN6xRjGDN+kwAA + + +False +0.785398163397448 +40 +epTail +BmvYAIFdPEKrfzWwQhihCAAA + + +False +-540 +-1120 +50 +8 +DiYoPg9r+0KN6xRjGDN+kwAA + + +False +-540 +-1120 +50 +8 +BmvYAIFdPEKrfzWwQhihCAAA + + + +clMaroon +$00B9FFFF +1669,442;1669,460 +hKV30qElWkWAVhrHK7PJbAAA +SJxSR34gTkGLBFrgEQoGBwAA +hhCDRIRYnU+Qwbyyoec6WwAA + +False +1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +1.5707963267949 +30 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-0.523598775598299 +30 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.523598775598299 +30 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +0.523598775598299 +25 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-0.523598775598299 +25 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-0.785398163397448 +40 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.785398163397448 +40 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-524 +-1032 +50 +8 +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-524 +-1032 +50 +8 +WHhyhUoWo0iDDhj6FaqW/gAA + + + +clMaroon +$00B9FFFF +1668,504;1668,522 +Htop0thy70qsJ36MwSIctgAA +wTzRmZpNA0CytlcwOuyUMQAA +SJxSR34gTkGLBFrgEQoGBwAA + +False +1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +1.5707963267949 +30 +Htop0thy70qsJ36MwSIctgAA + + +False +-1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +-0.523598775598299 +30 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.523598775598299 +30 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +0.523598775598299 +25 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-0.523598775598299 +25 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-0.785398163397448 +40 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.785398163397448 +40 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-524 +-1032 +50 +8 +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-524 +-1032 +50 +8 +bDyGtYJmuUiVC+pPkc7oHgAA + + + +clMaroon +$00B9FFFF +1609,536;1548,528 +wt/kYLKLC0CiPMmQly9eoAAA +f5vhNxPD30OIg0/MpcEnMgAA +wTzRmZpNA0CytlcwOuyUMQAA + +False +1.5707963267949 +15 +wt/kYLKLC0CiPMmQly9eoAAA + + +False +1.5707963267949 +30 +wt/kYLKLC0CiPMmQly9eoAAA + + +False +-1.5707963267949 +15 +wt/kYLKLC0CiPMmQly9eoAAA + + +False +-0.523598775598299 +30 +epHead +xGchvlfNhUO0g6gfoLFLRgAA + + +False +0.523598775598299 +30 +epTail +mwO8gf6vqUOl745za4HJ8wAA + + +False +0.523598775598299 +25 +epHead +xGchvlfNhUO0g6gfoLFLRgAA + + +False +-0.523598775598299 +25 +epTail +mwO8gf6vqUOl745za4HJ8wAA + + +False +-0.785398163397448 +40 +epHead +xGchvlfNhUO0g6gfoLFLRgAA + + +False +0.785398163397448 +40 +epTail +mwO8gf6vqUOl745za4HJ8wAA + + +False +-544 +-1008 +50 +8 +xGchvlfNhUO0g6gfoLFLRgAA + + +False +-544 +-1008 +50 +8 +mwO8gf6vqUOl745za4HJ8wAA + + + +clMaroon +$00B9FFFF +1466,607;1466,630 +t/ADlzXN00KW0NiGhwkclQAA +IIt4VBS2JkOc0GS4zIsSDAAA +sAS2iGQLE0GVexawSaeD0AAA + +False +1.5707963267949 +15 +t/ADlzXN00KW0NiGhwkclQAA + + +False +1.5707963267949 +30 +t/ADlzXN00KW0NiGhwkclQAA + + +False +-1.5707963267949 +15 +t/ADlzXN00KW0NiGhwkclQAA + + +False +-0.523598775598299 +30 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +0.523598775598299 +30 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +0.523598775598299 +25 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +-0.523598775598299 +25 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +-0.785398163397448 +40 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +0.785398163397448 +40 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +-712 +-1032 +50 +8 +LL86l17PZku+YBsr/fUklwAA + + +False +-712 +-1032 +50 +8 +bvYo1TGY6U2Io35TQ/yATAAA + + + +clMaroon +$00B9FFFF +1466,674;1465,697 +5n9wkh0NQUu8BFWyytdErgAA +e0Tnr7u8AE+La5gTMkR+KwAA +IIt4VBS2JkOc0GS4zIsSDAAA + +False +1.5707963267949 +15 +5n9wkh0NQUu8BFWyytdErgAA + + +False +1.5707963267949 +30 +5n9wkh0NQUu8BFWyytdErgAA + + +False +-1.5707963267949 +15 +5n9wkh0NQUu8BFWyytdErgAA + + +False +-0.523598775598299 +30 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +0.523598775598299 +30 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +0.523598775598299 +25 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +-0.523598775598299 +25 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +-0.785398163397448 +40 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +0.785398163397448 +40 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +-712 +-1032 +50 +8 +P+S209BDDkSnrN4WPl8+WAAA + + +False +-712 +-1032 +50 +8 +UYbXc0CahESM869EpDq6lwAA + + + +clMaroon +$00B9FFFF +1465,741;1466,764 +1QbYYnq3ykqiPL0Gv6UkSwAA +GNt2i16Jv0er8A8pORMwcAAA +e0Tnr7u8AE+La5gTMkR+KwAA + +False +1.5707963267949 +15 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +1.5707963267949 +30 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +-1.5707963267949 +15 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +-0.523598775598299 +30 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +0.523598775598299 +30 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +0.523598775598299 +25 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +-0.523598775598299 +25 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +-0.785398163397448 +40 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +0.785398163397448 +40 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +-712 +-1032 +50 +8 +2J0+TPdjaECdzYN0YQ2guQAA + + +False +-712 +-1032 +50 +8 +WMjnuHQF3kiQvKAfM+S81wAA + + + +clMaroon +$00B9FFFF +1591 +24 +135 +45 +l2Lw5fePkE+9xXcdzSY+bwAA + + +1 +dev-env-install + + +False + + +False + + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + + +clMaroon +$00B9FFFF +1658,68;1658,76 +3RL8yaG7p0udrs0v9djevAAA +mCnmzxWG6kWi9OPK25z8CgAA +ba/wrXKu5EuHn69Sc1EByQAA + +False +1.5707963267949 +15 +3RL8yaG7p0udrs0v9djevAAA + + +False +1.5707963267949 +30 +3RL8yaG7p0udrs0v9djevAAA + + +False +-1.5707963267949 +15 +3RL8yaG7p0udrs0v9djevAAA + + +False +-0.523598775598299 +30 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +0.523598775598299 +30 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +0.523598775598299 +25 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +-0.523598775598299 +25 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +-0.785398163397448 +40 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +0.785398163397448 +40 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +-516 +-1008 +50 +8 +La7Sdx9zEUWWIkxIncjJuAAA + + +False +-516 +-1008 +50 +8 +h4chvQo17kKpYAZk9SZs0wAA + + + +clMaroon +$00B9FFFF +1584 +132 +148 +45 +ofqv4KD9ukybRvF//Fek/AAA + + +1 +web home pages + + +False + + +False + + + +False +ofqv4KD9ukybRvF//Fek/AAA + + +False +ofqv4KD9ukybRvF//Fek/AAA + + +False +ofqv4KD9ukybRvF//Fek/AAA + + + +clMaroon +$00B9FFFF +1657,176;1657,196 +BYyEw6WhrkigDw+109evLAAA +xPeRQZfwOEmy8TaWIhh+GQAA +bwHJGe0us0a2jeejcciWlwAA + +False +1.5707963267949 +15 +BYyEw6WhrkigDw+109evLAAA + + +False +1.5707963267949 +30 +BYyEw6WhrkigDw+109evLAAA + + +False +-1.5707963267949 +15 +BYyEw6WhrkigDw+109evLAAA + + +False +-0.523598775598299 +30 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +0.523598775598299 +30 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +0.523598775598299 +25 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +-0.523598775598299 +25 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +-0.785398163397448 +40 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +0.785398163397448 +40 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +-516 +-1008 +50 +8 +2dUTUSyX8USUOoaapULmuQAA + + +False +-516 +-1008 +50 +8 +Dk4WLVZ+SU+WfPXc7TG0IwAA + + + +clMaroon +$00B9FFFF +1564 +196 +189 +45 +czS7yLr6oUygLwEMTWJMVgAA + + +1 +first-ver-dev-env-chk + + +False + + +False + + + +False +czS7yLr6oUygLwEMTWJMVgAA + + +False +czS7yLr6oUygLwEMTWJMVgAA + + +False +czS7yLr6oUygLwEMTWJMVgAA + + + +clMaroon +$00B9FFFF +1658,240;1658,248 +ULUs5j3aC0Gd9Vn1OUTU2wAA +PUHktwo1XEONvjakWKxjjgAA +xPeRQZfwOEmy8TaWIhh+GQAA + +False +1.5707963267949 +15 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +1.5707963267949 +30 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +-1.5707963267949 +15 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +-0.523598775598299 +30 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +0.523598775598299 +30 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +0.523598775598299 +25 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +-0.523598775598299 +25 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +-0.785398163397448 +40 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +0.785398163397448 +40 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +-516 +-1008 +50 +8 +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +-516 +-1008 +50 +8 +XXlOcGC2n0emsre13Wy0GgAA + + + +clMaroon +$00B9FFFF +1383 +496 +166 +45 +bjrraLbGKUSY+GYzLNk5RAAA + + +1 +launch-pkg-publish + + +False + + +False + + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + + +clMaroon +$00B9FFFF +1465,540;1466,563 +4wmxJ9R9R0eU6Jn8Ho3xFwAA +sAS2iGQLE0GVexawSaeD0AAA +f5vhNxPD30OIg0/MpcEnMgAA + +False +1.5707963267949 +15 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +1.5707963267949 +30 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +-1.5707963267949 +15 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +-0.523598775598299 +30 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +0.523598775598299 +30 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +0.523598775598299 +25 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +-0.523598775598299 +25 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +-0.785398163397448 +40 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +0.785398163397448 +40 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +-556 +-1072 +50 +8 +7JwpGqJmgku60xKurQDyPwAA + + +False +-556 +-1072 +50 +8 +L7xnZ29mQEadCI+TRP2QQAAA + + + +clMaroon +$00B9FFFF +1609 +336 +121 +45 +aUVRiLFY4USAN9h1PY1/vAAA + + +1 +multi-lang + + +False + + +False + + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + + +clMaroon +$00B9FFFF +1669,380;1669,398 ++nJDFiS7VECOJ4vWaYvszgAA +hhCDRIRYnU+Qwbyyoec6WwAA +8o8JeUyoWka2YCr2oj8TIgAA + +False +1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +1.5707963267949 +30 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-0.523598775598299 +30 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.523598775598299 +30 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +0.523598775598299 +25 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-0.523598775598299 +25 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-0.785398163397448 +40 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.785398163397448 +40 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-516 +-1008 +50 +8 +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-516 +-1008 +50 +8 +VvsNJNyOO0e86/eHwYM58QAA + + + +clMaroon +$00B9FFFF +1416 +472 +96 +23 +publish-procedure + + + +clMaroon +$00B9FFFF +1624 +312 +109 +23 +after-dev-procedure + + + +clMaroon +$00B9FFFF +1368 +12 +101 +23 +develop-procedure + + + +clMaroon +$00B9FFFF +1604 +4 +109 +23 +dev-initial-procedure + + + +clMaroon +$00B9FFFF +916 +132 +120 +32 +oKO/T5e9P0yxfxSC9DK89wAA + + +1 +get-task + + +False + + +False + + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + + +clMaroon +$00B9FFFF +1340 +233 +144 +32 +CBkE9JDrJU21ybYWNP2cCgAA + + +1 +create-test-unit + + +False + + +False + + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + + +clMaroon +$00B9FFFF +1276 +284 +123 +32 +CEEcWQKt0kyX8zYOPZHrrwAA + + +1 +bugfix-coding + + +False + + +False + + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + + +clMaroon +$00B9FFFF +740 +32 +196 +45 +KMKq644vfEq7voEHMFkLwgAA + + +1 +initial-dev-task-launch + + +False + + +False + + + +False +KMKq644vfEq7voEHMFkLwgAA + + +False +KMKq644vfEq7voEHMFkLwgAA + + +False +KMKq644vfEq7voEHMFkLwgAA + + + +clMaroon +$00B9FFFF +736 +80 +202 +45 +PjS4k33/kkePfB8R0Qh14AAA + + +1 +bugfix-dev-task-launch + + +False + + +False + + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + + +clMaroon +$00B9FFFF +732 +132 +251 +45 +GbTWbRuRqkK91Ggxct5sowAA + + +1 +new-feature-dev-task-launch + + +False + + +False + + + +False +GbTWbRuRqkK91Ggxct5sowAA + + +False +GbTWbRuRqkK91Ggxct5sowAA + + +False +GbTWbRuRqkK91Ggxct5sowAA + + + +clMaroon +$00B9FFFF +904 +72 +127 +45 +F4Ld7UGpQkiQCCnqXOJ06wAA + + +1 +task-schedule + + +False + + +False + + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + + +clMaroon +$00B9FFFF +974,163;963,356 +X3JNoNb8Jky2P0O9whu+8QAA +UxkwPHCKZUOZB8abt9yLgQAA +dbDAxqIYDEef6cq3x4sQfAAA + +False +1.5707963267949 +15 +X3JNoNb8Jky2P0O9whu+8QAA + + +False +1.5707963267949 +30 +X3JNoNb8Jky2P0O9whu+8QAA + + +False +-1.5707963267949 +15 +X3JNoNb8Jky2P0O9whu+8QAA + + +False +-0.523598775598299 +30 +epHead +UUjC686FYU6T/q1aKuDLkgAA + + +False +0.523598775598299 +30 +epTail +XdMG4B9cfkWIcWgvsVmQUgAA + + +False +0.523598775598299 +25 +epHead +UUjC686FYU6T/q1aKuDLkgAA + + +False +-0.523598775598299 +25 +epTail +XdMG4B9cfkWIcWgvsVmQUgAA + + +False +-0.785398163397448 +40 +epHead +UUjC686FYU6T/q1aKuDLkgAA + + +False +0.785398163397448 +40 +epTail +XdMG4B9cfkWIcWgvsVmQUgAA + + +False +-516 +-1008 +50 +8 +UUjC686FYU6T/q1aKuDLkgAA + + +False +-516 +-1008 +50 +8 +XdMG4B9cfkWIcWgvsVmQUgAA + + + +clMaroon +$00B9FFFF +1035,153;1344,182 +TzMLJBMMOEKimlwgjlIwnQAA +GaKv5RiKr0yqd1YQfpBS6QAA +dbDAxqIYDEef6cq3x4sQfAAA + +False +1.5707963267949 +15 +TzMLJBMMOEKimlwgjlIwnQAA + + +False +1.5707963267949 +30 +TzMLJBMMOEKimlwgjlIwnQAA + + +False +-1.5707963267949 +15 +TzMLJBMMOEKimlwgjlIwnQAA + + +False +-0.523598775598299 +30 +epHead +BOzCR9HOxU+q1mRime4kPgAA + + +False +0.523598775598299 +30 +epTail +cCWrTkROLUy3C0VntDGRjwAA + + +False +0.523598775598299 +25 +epHead +BOzCR9HOxU+q1mRime4kPgAA + + +False +-0.523598775598299 +25 +epTail +cCWrTkROLUy3C0VntDGRjwAA + + +False +-0.785398163397448 +40 +epHead +BOzCR9HOxU+q1mRime4kPgAA + + +False +0.785398163397448 +40 +epTail +cCWrTkROLUy3C0VntDGRjwAA + + +False +-516 +-1008 +50 +8 +BOzCR9HOxU+q1mRime4kPgAA + + +False +-516 +-1008 +50 +8 +cCWrTkROLUy3C0VntDGRjwAA + + + +clMaroon +$00B9FFFF +1432,264;1459,284 +DCobZcXopUed3uhu7f3tCwAA +Ji7GcpOn/E2KIxghPULMgwAA +1soCBV2ToUK8JVFLvn+e2wAA + +False +1.5707963267949 +15 +DCobZcXopUed3uhu7f3tCwAA + + +False +1.5707963267949 +30 +DCobZcXopUed3uhu7f3tCwAA + + +False +-1.5707963267949 +15 +DCobZcXopUed3uhu7f3tCwAA + + +False +-0.523598775598299 +30 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +0.523598775598299 +30 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +0.523598775598299 +25 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +-0.523598775598299 +25 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +-0.785398163397448 +40 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +0.785398163397448 +40 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +-516 +-1008 +50 +8 +GPR477SH0U2rZy9DRg9MzAAA + + +False +-516 +-1008 +50 +8 +DFlh0do87UmmJQigSQRsiAAA + + + +clMaroon +$00B9FFFF +1388,264;1359,284 +BUd2VmDLEkKHuqopStVszQAA +N1P5SuGh4EWdFcErHd0tKAAA +1soCBV2ToUK8JVFLvn+e2wAA + +False +1.5707963267949 +15 +BUd2VmDLEkKHuqopStVszQAA + + +False +1.5707963267949 +30 +BUd2VmDLEkKHuqopStVszQAA + + +False +-1.5707963267949 +15 +BUd2VmDLEkKHuqopStVszQAA + + +False +-0.523598775598299 +30 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +0.523598775598299 +30 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +0.523598775598299 +25 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +-0.523598775598299 +25 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +-0.785398163397448 +40 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +0.785398163397448 +40 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +-516 +-1008 +50 +8 +XyL91tS87U+MpUc/Z25u1gAA + + +False +-516 +-1008 +50 +8 +2t6hyyogW027sVhhVrjclQAA + + + +clMaroon +$00B9FFFF +1355,315;1397,353 +fk3nxDxX5USF8gff9cP5MwAA +0HXL2vLmwU+NgNkl6zVkQAAA +N1P5SuGh4EWdFcErHd0tKAAA + +False +1.5707963267949 +15 +fk3nxDxX5USF8gff9cP5MwAA + + +False +1.5707963267949 +30 +fk3nxDxX5USF8gff9cP5MwAA + + +False +-1.5707963267949 +15 +fk3nxDxX5USF8gff9cP5MwAA + + +False +-0.523598775598299 +30 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +0.523598775598299 +30 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +0.523598775598299 +25 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +-0.523598775598299 +25 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +-0.785398163397448 +40 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +0.785398163397448 +40 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +-516 +-1008 +50 +8 +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +-516 +-1008 +50 +8 +lp0ewCTLb06H/3WjWYmLOQAA + + + +clMaroon +$00B9FFFF +1152 +224 +104 +30 +test-code for unit + + + +clMaroon +$00B9FFFF +1484 +208 +61 +30 +src-code + + + +clMaroon +$00B9FFFF +920 +308 +94 +23 +design-procedure + + + +clMaroon +$00B9FFFF +1484 +148 +55 +30 +src-pkg + + + +clMaroon +$00B9FFFF +1116 +268 +144 +30 +testing-code for integrate + + + +clMaroon +$00B9FFFF +1124 +312 +125 +30 +testing-code for using + + + +clMaroon +$00B9FFFF +900 +8 +76 +23 +task-schedule + + + +clMaroon +$00B9FFFF +908,76;967,94 +dmgxVDpivEyRrIdXr3QLWwAA +5srcgF0EYUyRM6tylL0wVgAA +uI0Vw5nV8k2MpwNxuYq/IAAA + +False +1.5707963267949 +15 +dmgxVDpivEyRrIdXr3QLWwAA + + +False +1.5707963267949 +30 +dmgxVDpivEyRrIdXr3QLWwAA + + +False +-1.5707963267949 +15 +dmgxVDpivEyRrIdXr3QLWwAA + + +False +-0.523598775598299 +30 +epHead +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +0.523598775598299 +30 +epTail +v/43TdYAaEacDIIH0o4rFQAA + + +False +0.523598775598299 +25 +epHead +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +-0.523598775598299 +25 +epTail +v/43TdYAaEacDIIH0o4rFQAA + + +False +-0.785398163397448 +40 +epHead +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +0.785398163397448 +40 +epTail +v/43TdYAaEacDIIH0o4rFQAA + + +False +-1000 +-1000 +50 +8 +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +-1000 +-1000 +50 +8 +v/43TdYAaEacDIIH0o4rFQAA + + + +clMaroon +$00B9FFFF +937,96;967,94 +gFnk16iOFki43F+XSkxbHAAA +5srcgF0EYUyRM6tylL0wVgAA +IjimQpqMbkC8IpOXi07GSgAA + +False +1.5707963267949 +15 +gFnk16iOFki43F+XSkxbHAAA + + +False +1.5707963267949 +30 +gFnk16iOFki43F+XSkxbHAAA + + +False +-1.5707963267949 +15 +gFnk16iOFki43F+XSkxbHAAA + + +False +-0.523598775598299 +30 +epHead +IMPpHUaiT0CFZLcH+44uQwAA + + +False +0.523598775598299 +30 +epTail +Jrscu7bPaEOGr8p3WU+PYQAA + + +False +0.523598775598299 +25 +epHead +IMPpHUaiT0CFZLcH+44uQwAA + + +False +-0.523598775598299 +25 +epTail +Jrscu7bPaEOGr8p3WU+PYQAA + + +False +-0.785398163397448 +40 +epHead +IMPpHUaiT0CFZLcH+44uQwAA + + +False +0.785398163397448 +40 +epTail +Jrscu7bPaEOGr8p3WU+PYQAA + + +False +-1000 +-1000 +50 +8 +IMPpHUaiT0CFZLcH+44uQwAA + + +False +-1000 +-1000 +50 +8 +Jrscu7bPaEOGr8p3WU+PYQAA + + + +clMaroon +$00B9FFFF +897,132;926,116 +O9Ia0CXMxkC9ATowborgyQAA +5srcgF0EYUyRM6tylL0wVgAA +EJGh4IwbYkCWyCQWvIs0cgAA + +False +1.5707963267949 +15 +O9Ia0CXMxkC9ATowborgyQAA + + +False +1.5707963267949 +30 +O9Ia0CXMxkC9ATowborgyQAA + + +False +-1.5707963267949 +15 +O9Ia0CXMxkC9ATowborgyQAA + + +False +-0.523598775598299 +30 +epHead +X82I741yL0ybUyEPhBbTZQAA + + +False +0.523598775598299 +30 +epTail +VHwOYW9vAkeUFUXT+cxoEgAA + + +False +0.523598775598299 +25 +epHead +X82I741yL0ybUyEPhBbTZQAA + + +False +-0.523598775598299 +25 +epTail +VHwOYW9vAkeUFUXT+cxoEgAA + + +False +-0.785398163397448 +40 +epHead +X82I741yL0ybUyEPhBbTZQAA + + +False +0.785398163397448 +40 +epTail +VHwOYW9vAkeUFUXT+cxoEgAA + + +False +-1000 +-1000 +50 +8 +X82I741yL0ybUyEPhBbTZQAA + + +False +-1000 +-1000 +50 +8 +VHwOYW9vAkeUFUXT+cxoEgAA + + + +clMaroon +$00B9FFFF +970,116;973,132 +hIsaQ5I0Y0qxkPCenhTfsgAA +dbDAxqIYDEef6cq3x4sQfAAA +5srcgF0EYUyRM6tylL0wVgAA + +False +1.5707963267949 +15 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +1.5707963267949 +30 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +-1.5707963267949 +15 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +-0.523598775598299 +30 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +0.523598775598299 +30 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +0.523598775598299 +25 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +-0.523598775598299 +25 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +-0.785398163397448 +40 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +0.785398163397448 +40 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +-1000 +-1000 +50 +8 +qb8LVJbh5kG4uilxed700QAA + + +False +-1000 +-1000 +50 +8 +4Ujmk5gLj0WyU3SYagr0mAAA + + + +clMaroon +$00B9FFFF +1035,138;1591,56 ++xZvDwUvFkOoytPg7jDZ2wAA +ba/wrXKu5EuHn69Sc1EByQAA +dbDAxqIYDEef6cq3x4sQfAAA + +False +1.5707963267949 +15 ++xZvDwUvFkOoytPg7jDZ2wAA + + +False +1.5707963267949 +30 ++xZvDwUvFkOoytPg7jDZ2wAA + + +False +-1.5707963267949 +15 ++xZvDwUvFkOoytPg7jDZ2wAA + + +False +-0.523598775598299 +30 +epHead +RYlosGPoG0aBCofSJbKnegAA + + +False +0.523598775598299 +30 +epTail +yG+8cHFE1EeshJkd1dKuewAA + + +False +0.523598775598299 +25 +epHead +RYlosGPoG0aBCofSJbKnegAA + + +False +-0.523598775598299 +25 +epTail +yG+8cHFE1EeshJkd1dKuewAA + + +False +-0.785398163397448 +40 +epHead +RYlosGPoG0aBCofSJbKnegAA + + +False +0.785398163397448 +40 +epTail +yG+8cHFE1EeshJkd1dKuewAA + + +False +-1000 +-1000 +50 +8 +RYlosGPoG0aBCofSJbKnegAA + + +False +-1000 +-1000 +50 +8 +yG+8cHFE1EeshJkd1dKuewAA + + + + +154 + +author +tacoxPrx8kCKprVgJHnvqgAA +3 +nLppBSuFyk6GHv3rvWfvuwAA +1ej51eE+QUW6l7JYARpitgAA +2UnPMw8k20qDwX1yw3E7UwAA +3 +6Neco6zcl0uObHufbrc7/wAA +RHQsOilQckSyjRNZMJggpgAA +hNisF5EBTE2ATvCijhzvOQAA + + +tech-leader +tacoxPrx8kCKprVgJHnvqgAA +3 +LqRrN84lGEeTv5o2IgfsSwAA +G+LZrC/lykGqzYIlbLtstAAA +KOCYlVaZCE2z8yB61KBhRAAA +6 +RtTv62yj8kevg0AAwoW9WQAA ++Lil4MWKjUOC2XYl8SjTegAA +NuLaPfQwkkOm5+Z8IfTRQwAA +NwDa11zhX0qixnczVDBHswAA +2wepYfQ1HEOA25v4ibitGAAA +PW0DMEjQBEykIxMEhQ5JaAAA + + +maintainer +tacoxPrx8kCKprVgJHnvqgAA +3 +qYv8SJgqPUajzKDRtANOvwAA +5pTwS+Z6lEq+JlcroD00LAAA +5o5h8gI76UOPFFl3iyCbWAAA +4 +5LBvJCvx5U+R0JXvGrtJVQAA +hIwTub9FSkK/mA+8tg3vAQAA +kW2xBvd5ck+7hi+wjeIDWwAA +1rd1mOGAkk26xSFOjW6oBQAA + + +developper +tacoxPrx8kCKprVgJHnvqgAA +3 +8ZQdZB1z0kaDUzkVHOzvRgAA +Q4A69uNsRkiKLyZhGHqlPgAA +RfdgS6vdFU63KYKjPfN7OQAA +5 +89CSjktmDk6aTYzK0WeqxgAA +gzYTAF1gIkizg/Vue/2ZQwAA +TeOn6G5DU0iPhLs634h/BwAA +z1R9mDNJ/UyAy/2XR33nXgAA +VD6ZOZdU+UucOrfmGN2ehAAA + + +tester +tacoxPrx8kCKprVgJHnvqgAA +3 +55htDUboMkKutvJNMs10VwAA +6ZZwa71yx0+LjSxYRPl7qAAA +R6mmC12erkeQ4gBLy7dAbgAA +4 +06vNfm1gx0OR0K9NmGmXEQAA +S4UJZMo1R0qd1Tyo5YNdtgAA +YldXkvDuwE27LSJywqCl4AAA +nrc3+Xx32EKxZK145yefSgAA + + +user +tacoxPrx8kCKprVgJHnvqgAA +3 +jBby7rVxVkO+HkQ21KY54wAA +pPGvserbwU+ETNWzNZwzngAA +xAzVewxj5EO9A+Ldm9bqdQAA +3 +h8kotrimC0Cpk4nuHRgyzAAA +8hHEA5HEUkaJOUrimD+IqwAA +aS8jAO3xFkSspkn5BLzAQwAA + + +translator +tacoxPrx8kCKprVgJHnvqgAA +3 +OS8e8Zau7kWMtinIvCc/swAA +WsUDyP0DbEqd3tRk8yKANQAA +lLwl6ItcyUi/x+g1OzlffwAA +1 +DcOYQKycgUqgn2jU568/iAAA + + +documentor +tacoxPrx8kCKprVgJHnvqgAA +3 +iDOAaVuVSUO57121Dqj8JQAA +ZSoaGeJlOE6oA2yHk8/u3QAA +3qUjeu+vUEGjudMkYvZkAgAA +1 +UV6CUGeKi0qg+WyJsqDNMAAA + + +bug-report +tacoxPrx8kCKprVgJHnvqgAA +4 +lwnbG+r6OEegyTwNJ3FUnQAA +634oOmBInUS2gaxmact2gQAA +rVNExfqqBEubnXuOzUsTIwAA +rDeS25h7tEaGwfsBzGSXFgAA +2 +8x8LgMHMS0+ZEvqndI0NEgAA +WX2MlGTb6EOX2luk/so3YwAA + + +new-idea +tacoxPrx8kCKprVgJHnvqgAA +4 +cQ04Yqm8yUWze+0UejiQPQAA +wabWoZkEiECTn+HhKn6kkgAA +4XWH56+npEullggKbfFU9wAA +bUwcFsT37Uu0lm1qXTV5JwAA +6 +zx6gVR7LCk6dAYJetD7d4gAA +86l1myG4S0SDBf07PTiVHAAA +0RWbjevmkUewt0Cz0HxaRwAA +UQOyuA/Sn0+V7QfuwDF8zwAA +05xPD1FxVkik/6PBhUwnSwAA +S9Ht5rNXlk+R/Be2/tvjiQAA + + +test-task +tacoxPrx8kCKprVgJHnvqgAA +4 +BoXflTl2zkiHVb9rTj8+gQAA +AaYidFE7+EeaQRrTwlMiGgAA +ewET2F5E9kG0jnIQOrXD4wAA +Mpasmi600UeO4ulDZLR6YwAA +3 +PKDNpsNf/kGUvFpvwAiMgwAA +LLG2+9u6KkebumqGep6bfAAA +He/O+ItNt0+c+XSWNytz9gAA + + +check-if-publish +tacoxPrx8kCKprVgJHnvqgAA +4 +Vdh7zL8QZ0OtD+C+OlvxpgAA +9nnEfIe/n0qhqtnfVpjk3AAA +KOxxtbd2BkCVFupWEZ87XQAA +zW1N3bsNtUuzR/EjyyD3OQAA +5 +l+pJXTVuVEOXxepPp7tpmwAA +m5bOddD2ykOYQJ+JqC5GQwAA +P1DmfF8A8U+xRvMvkio6ggAA +zaihnGbFv0SYjieuD3Ii+wAA +XNH/vjJrPkeWiAnFueRS2wAA + + +bug-fix +tacoxPrx8kCKprVgJHnvqgAA +4 +vIM1yyr2zUeK8LOSwJnagwAA +We6DNRfsnkmrfVI7WoAPugAA +EDr1FZbaVEuIqOX/2tvVgwAA +p8wxG8B/XEKJ6aXtVJv2awAA +2 +xQhxxFEtpECHagEXOLUIWQAA +UFqxiSQgyUeoy0qNucDjhwAA + + +feature-list +tacoxPrx8kCKprVgJHnvqgAA +4 +1XmGBT1/RUKVRwCIItHBqQAA +unl82IKNKEqW/ZUy2OKO4AAA +miBSD9UWRU6FaRwjnVT8swAA +n+5DC+YcyUSIEMqbFpvGCAAA +4 +cekDFk5ILU6GQvHycWgn2QAA +DWmCv3GYyE+A4/wxNfV/TgAA +jqMq51leBkGUbLZ/J6mVggAA +TWHK+EvM0kuJxrZGPnmV/gAA + + +develop +tacoxPrx8kCKprVgJHnvqgAA +4 +gzOBaPhYH0Sqi38GA9ka4gAA +w1eKl3jLok6dQE3JB94YKgAA +N0BSH6oaTU6JSCzmTl8vsgAA +zLCn8+123Uu75sJijDTdZwAA +4 +9vaywntHRUS9MFakEmMvSgAA +9H2x6+kFc0eo6Z2KrSpZMgAA +M0pjGsRCsEy2IjYa560UuwAA +Bkj3nzY1Z0OpLErETn5JAAAA + + +bug-retest +tacoxPrx8kCKprVgJHnvqgAA +4 +t5UaBajz3kuwVYgFf4H/6gAA +1GAx466sEkKGRO0kCp33KAAA +2ZG7bQGVzUWNkSGwUMturQAA +RSFmeXj4YE6WLZX67O2S6QAA +3 +Ni4/biH/lE2VxdPr2OKnEwAA +wki5AWxXakSVFXSFIAWF6wAA +8lZk7+ScDkGsGw40b2zWuQAA + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +rLipCiuNnkCKrVs1Dppf/AAA +k6w1Bteav02GGDrC6cJmKQAA + + +rLipCiuNnkCKrVs1Dppf/AAA ++JrMCo45qEOWtcTsDjqTTgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +UWFTE8BDCkSEe3YOn84GrQAA +k6w1Bteav02GGDrC6cJmKQAA + + +UWFTE8BDCkSEe3YOn84GrQAA +8v8IRJdlJUmbHIylKGey5wAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +fPubsZnsN0OJ6WOaq1H5aAAA +8lQQB3J1o06qDEWADag8/gAA +WieLh+QA7k6+yEd3bSw1SAAA +gSPGOiEdNEuyFfKarlynsAAA +2 + +False +Zk/ihiJuFkm1nc08/lO3JAAA +8v8IRJdlJUmbHIylKGey5wAA +4 +JD4nWCXdqUet6cDY9tDd3gAA +F08DdZDlv0q0HVSEEw7dSwAA +7YM2x3Kz5kikaN9Vmz23KQAA +t8hbDZginEqDchu7EzAtzAAA + + +Zk/ihiJuFkm1nc08/lO3JAAA +rxa+oNm2Kk2e9yVRZgZC4gAA +4 +NNgL2DXXaUeoy5NCLXCTBQAA +XFlX2yGrbE6yNbCg7/LyewAA +n37gTKmZAUyChGFyO8WG7QAA +Ku1Y6FRLF0i51DAGxutpLAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +L/XvVYcg30OYQxS/1zrxCgAA +N4hlcI+mKUC+m0HhgvEqOwAA +NReszVRhfUKi44MHBhssMAAA +ewx0DSFyDUeKMe1loomMGAAA +2 + +False +ZYww4bhgbUujMdsXvrsGRwAA +fIx21ILIBUuXaoqKHt5Z2AAA +4 +5ykAGIN8akm+5iyaxICZEgAA +OFRV00KjoEiTYfaWFH+UywAA +QudUJVb+Hk2Diq0z4wQtwwAA +Fj8cEo58fUGw8dLpnuo41QAA + + +ZYww4bhgbUujMdsXvrsGRwAA +5JcsdOcl2kmUJ1xczZEQMQAA +4 +ry5zWkM330e/Jyq2nAqAPgAA +Gxdf4jHwM0KTUKMNkLGg7wAA +Dt7MGyVATk+r30Xwpxc7kQAA +bve9pJQnekGLVWbdvRS1hQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Sy0UyIHXHU2/ebKqVry2IAAA +Xq/XBhAjWEynmKXYmK4D2wAA +APEoSymd+UqTapvOaoTpqQAA +zJ3xlPYUtEW1e9Qdfc8mAQAA +2 + +False +u+LRK0aPeU+CvKL8BjN4+AAA +UtnSzF7bC0iukjII33XrugAA +4 +JxGA5uJESk2MhV27HtwkRAAA +Mb/iubFANUqY7j7ijlpP6gAA +YkX7H7Zt5EewPJWI5pJcTgAA +9exoDj9BU0mU0d4v1p1I9QAA + + +u+LRK0aPeU+CvKL8BjN4+AAA +wFR71rqQ/kavPS+ztzufLgAA +4 +3B6bcQ28K0qIePRIhMLx/gAA +EO3LmJMCfkiB87aUhqVz1wAA +81EORfyr30GhxjgRMSlsDAAA +1DUg+607CEG84+ifMI9jHwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +SR+lhqG2VkS85GKgVr4OgQAA +yQFjSnTLFUG6RKdehm1PfAAA +fVvRkqkPhEur/sLEGG5gIgAA +YPIwLlunYU6nARGBZMmXdAAA +2 + +False +Q5rq4hug80amVs0OquyiyAAA +ymnyuU2meUmuFQCl8KW3EwAA +4 +9Vn0AnxUS0iEZmCg5zFq5wAA +U79XDob2mkKddWcOf7rOVwAA +uBV2hvPo70iQ+3Znq+k27QAA +zINn6IQQ5UKucIti2VEvsAAA + + +Q5rq4hug80amVs0OquyiyAAA +UtnSzF7bC0iukjII33XrugAA +4 +Z/S1yG7Xs0C9XUP/GF9HwQAA +X4MciX+qy0awACeY5pAItQAA +TiCYBwm+TUib4VPH0BfH4QAA +/+MFfnkS/EaAfGeSNQPzLAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +sFjq/YNNnkGyuqGL8j09XQAA +5JJTfYLXMUubHFTpSMWkcQAA +GK5AklYlFEGV4gMEGxbkoAAA +m5bxj0wAHEKq1kq0Wqh99AAA +2 + +False +Lslcq+/wp0+7suaGPGIyVAAA +wFR71rqQ/kavPS+ztzufLgAA +4 +jzvWBb0OoU2Ux9UPntIHZgAA +59prGpA5EEmNhyV8cjBTMwAA +w9nI1ZdDuEeC6vWYoGBw2AAA +6XmugWGmxEW9E96QRUZpFQAA + + +Lslcq+/wp0+7suaGPGIyVAAA +fIx21ILIBUuXaoqKHt5Z2AAA +4 +FUgvbIJLH02QBj4Xw7kxugAA +selCGBBXDEymq17D9kSVYQAA +Pf6EEag26kej1e92R3JlJQAA +tSHDw1BT2kCMKspRtmDR+QAA + + + +doc & tutorial +tacoxPrx8kCKprVgJHnvqgAA +4 +OJNZyLkPgkW5YFYA5x/ChQAA +bfOuJlVHEEeu2T5S+l6VDwAA +gLaJGOxaI0CF/Qfa/zpwyAAA +wFcfBTWPIki0mu20Xv2DsAAA +6 +UjrU3zr4ikWZcD67/VJ22wAA +/91dQ7rhgUSI28jqjPHooQAA +UVpvR8JQo0Goo1thnZ8TQwAA +8zPYwZBWOEuUZxPtPgU/YQAA +m5jTftKx4ku74ElHxxMotAAA +yYIJFraZbU6Xh62CJfSi8wAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +CyLz987Yx0a9lbcL7SoWMgAA +AhCsuzIlRkW8R8jxObOIOgAA +MshDZxITwUuAI8EanqUuBwAA +KgraZq+q1EeEN9cCmIoc3AAA +2 + +False +QAFwbnInOU6vOm8b8SgmzAAA +oWDHE/AIyEqhL2zTdizC4AAA +4 +MjB41fYRRkeOWPYi1mSDNwAA +79jmtZfAbk+b7RrS1J8G8wAA +VafAtxP9eUqd2EyK2Zv4YgAA +/ZWIU1XDyki8c6Icr34klgAA + + +QAFwbnInOU6vOm8b8SgmzAAA +fIx21ILIBUuXaoqKHt5Z2AAA +4 +xYpebV5nwEKGEslHsNqBPAAA +mQ13YjXbH0Ov8jcHlE1sHAAA +SEVCW0KeF0+e2/I3sLziggAA +cU8aRSvXrk+YvWt5FpiOKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +DLeIpH/Vp0qz/k4Z835fxQAA +MLBX+NGx9kymQ76b9EAKuwAA + + +DLeIpH/Vp0qz/k4Z835fxQAA +k6w1Bteav02GGDrC6cJmKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +lyrV25UpIE2C5MemvaVCwgAA +A/9YWnHJBEGH1jC8FI2M9gAA + + +lyrV25UpIE2C5MemvaVCwgAA +k6w1Bteav02GGDrC6cJmKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +5Y4DPMdp/kOYhqjVFGVF0gAA +OG2PYYcnHky35qJfwJh4qgAA +sq/inVtUT0iJnxjV3mRDMQAA +8RoZjx2ZxUqloF7q2taKnAAA +2 + +False +otl6N6twSUqOS1ckH+zvkAAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +zu6VFQcBMUODfmyo6wewFQAA +7rlTm+0OOUuqqncqyCOO2gAA +X0S6Ww7LtEmtkuQtl9sSHwAA +bGxdMvOXXk2NUPsvL7epowAA + + +otl6N6twSUqOS1ckH+zvkAAA ++JrMCo45qEOWtcTsDjqTTgAA +4 +UpRN66IG20+BFv9v/cMFNAAA +w/WOK184rEemQsEXKo4phQAA +VWo1XbHSpUqAbWBG8Y1pmQAA +rg8w5tv8t0aL+onnxygB2gAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +hg8RO1a/B0qXE38vkUxToAAA +kgeNjAQDpke4/lNPm0LFAAAA +U+eCEWvk6EOEexJsJJdZdAAA +RUif+XapP0uGbbHG6ycMYQAA +2 + +/wV294vExESRsoCAG0SOGwAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +FqsiT9jK80uNARuQ3/AG5QAA +5P+VWT1nWEaSbfjMQy9BjwAA +zLaq7AqXFUiKHqNhg8FbOAAA ++FmtNecuYEKbk3Gd+zdrJQAA + + +/wV294vExESRsoCAG0SOGwAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +nHo+Mxd4i0iHZ+AQpPJ5fwAA +7KGAiedyz0WKUUF02ncA2QAA +Garb0zenNEix0LX/kaUszwAA +OX2NXD48IEyoOoxVnsVPfwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +o8jS0zGz6E2LAIlZNGWlcAAA +3/xIB6tCJEiuQ+3BA1D6+gAA +X6pIR5c4ckquwKbxtZgVJwAA +m874lnl0+EWvpF1V8NUfmwAA +2 + +As4jKIWMwk6c065+KZeGGQAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +HXrLE5esF0uyX+nXhGDMIwAA +KGe3EGq+xE+HhmH5w3i83gAA +RSYLHup0/Ui7ZXJ3fJL7pQAA +RuxQL2GTgEOo7mrXkSVvXQAA + + +As4jKIWMwk6c065+KZeGGQAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +a1hWjFvMzEKXg5P9yee1RwAA +8s/0yPkfbk63cY3zI0R5+AAA +5jur5jS15EyAnqY1Mu4dyQAA +IBQMJpgQTE2tqdMPKB3twQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Ukj9dkUAW0e0jMz7p9y3XgAA +gqf6o2E9O02AkOUFqATYEQAA +GNlx1cSQCEO2PMGBUXWYqgAA +GJyZzEhwd0ukYO0vnk3pVgAA +2 + +qSMM7YEtUUmnkrz3femcAQAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +83SS4KQg2UqD4zRlbhXGMAAA +YJHqwqDBpk6QlU5T8J2e5gAA +05ukk/GNr06GfKat3GnCzQAA +BFA5eZ8lYES8vRiBQkZPEAAA + + +qSMM7YEtUUmnkrz3femcAQAA +oWDHE/AIyEqhL2zTdizC4AAA +4 +cHzC9/NikU2NmptitY3gWAAA +JNc5ZjqPyEmEOy3uzsAFJQAA +X4/XaVGceUanYzAF163RhwAA +mBoJo/CYCk2+zejGQvvrDAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +DJ0vcchCY0CnHUnEhg0PEwAA +Bod4/k93VkWAJYk+f1yCeQAA +qJdNSfyuP0aFrWccEWBh5gAA +51N2HoXKo0600H7B4oOnogAA +2 + +False +QOEK3K2D6E6pqfTn0mjGSQAA +78O5f65/80OvpHK3AuBEIQAA +4 +PxuPxbf3F0mC6au1o42IuwAA +kdL930heekGPN3wEJHjDDwAA +Gmmlyr4gikOkIE7XSvtR5AAA +jGjpsCoc9k2BRUpeT8rHfgAA + + +QOEK3K2D6E6pqfTn0mjGSQAA +UtnSzF7bC0iukjII33XrugAA +4 +VpHIAv0gY0qmux4wbRVLeAAA +RW86qpqkyUCbJ3mVC8Yx9wAA +vP7AWBLFCE6fK8fvqa4SPAAA +b6K2ECYEiE2kI5jZVHhrsgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +rz0WGeAcf0SlqjuWwQwFcwAA +/rHWPGqA0EyYC8g1ohy0TgAA ++T1/+ZcXoUeUINJPUPZIlQAA +5j3yzrxHI0K34OA7BeXzkgAA +2 + +False +BunHMt9UUEaob51EuVirsAAA +u2JHX3nMn0CMyZLWTG2R1QAA +4 +wUOEptHUakSY6I/buij63gAA +Y5rhnjzJgkusxyp77WFreAAA +xavYe4pYuE+1GKIeCKVcQgAA +k6C4zp4DBUuxfcDbLW4s4QAA + + +BunHMt9UUEaob51EuVirsAAA +ymnyuU2meUmuFQCl8KW3EwAA +4 +qgHNFbE1yUSwxkP/sxtOJAAA +RhMu/pC/Iky065R2MwtEwgAA +LcHniQlwIUq3d4uYh3FjygAA +doeBGPbBvka5YzQ0Ety7BQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +KlnhplKJpEq9N4P3dZ0ccAAA +BOKhQBgkKE2PMWbp+G68zQAA +6e7NIB3pLES5O663rvpGEQAA +LBpamqW3qUugvknaG/5UlgAA +2 + +False +GkzxRdxRNkmn62ufJTw13wAA +5JcsdOcl2kmUJ1xczZEQMQAA +4 +0pj1G6QgAUi8yEL/QWtQYAAA +IwFFivWGCUuaGzQsRihSUQAA +Sgawiqqpx0ar5pnikeHcqAAA +vvj8L/FsF0KQt8Rv6nc+xAAA + + +GkzxRdxRNkmn62ufJTw13wAA +ozTLGGkik02HnJ667z5MBQAA +4 +HnVyaVwk6UqV4iof95F/rgAA +v1VAgbR/RkaonfOW9OfdSwAA +u4aWUY6eukmgQJnoeSmYwwAA +eS7sNcPgS0+PtF+i93PYHgAA + + + +pkg-publish +tacoxPrx8kCKprVgJHnvqgAA +4 +7R3Vtrr63kqhX5GzE7CY4gAA +ybuDZxrjnE24r0UbRgKqBAAA +88FpyAWY+UaSMKxPQD00qQAA +Qo+BUYj3w0K/jgQjuB4yzAAA +3 +ZCmKuqp4sE2/fLQrj5OH6AAA +MVnve7DJ0kSTrd01IVyX1gAA +6sd33lS3GkaENMAtDneYfAAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +VhZmB3uX7kaXnUWAdCGB4gAA +YHm3qWODUUWVW2CwTpLTaQAA +AE7QJjoB4E6T/F2wKOOQxQAA +1g4pudaRik2LByHmCigqngAA +2 + +False +atCUWqlo80uXI6LZ5VXAqwAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +FKOFyiXvw0iHjVXwyiZYqgAA +jILNTK/UXkWbJ6PxKPqDmgAA +qCE42hVjhEmwLIeOYimZJgAA +0bG7hQ2D6Ee0BMVHxFBNJQAA + + +atCUWqlo80uXI6LZ5VXAqwAA +FPjdKo5EqkuvbojCyT40wAAA +4 +4YZYJ9ZqD0e+ntjPLgKC4gAA +aP94sthRMUW8RTgcI9WsxAAA +1W0tSTT/LkSjIRxLUHi3JAAA +rnLRv+afEE+3AAL7HweCiAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Czjit70NTkyZKNjNdrecFwAA +LuU0Vft25kKxcILaYN9CdQAA +2sN7szkqhEus8hafmL5knAAA +ID3nS40y6EuYiL6ZVikQTwAA +2 + +False +VSr15ngAt0ucp/JSndd7fAAA +ozTLGGkik02HnJ667z5MBQAA +4 +RdZn2kfGcU2ncgqckMujkAAA +Y3wW9nCYf0eJQiKVTYEvOQAA +VhY5MGMR3kSEQMt2k2P1OgAA +538+xh2rfkyNzyyfuzNaxAAA + + +VSr15ngAt0ucp/JSndd7fAAA ++JrMCo45qEOWtcTsDjqTTgAA +4 +yka4fXbWQkWFJKSoFEDfOQAA +rNCF76BXd0WCwPP15XkCQAAA +3aycythwb0CBYkO8MqrmJwAA +ssKESmY0xEWVLBdE7OS9XwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +J7z2l0td/kS0hlue+2WNYQAA +VR+Aak79+Umgp3bA27YoRgAA +ifeg97N6WUiKvJUWgPOTWQAA +rUKAMmrrwkSGDcTXoCJBCgAA +2 + +False +t3ESzDEjd0ut89bd3IyWPQAA +Pu4+pL+iiU6lRzDtfLIgJwAA +4 +gkgGZ5XPq06Yq8H6/mhxGQAA +MU+LMLQy/UuMhldHl2jTHgAA +QgcPkrmTp0aOp/pigNvWDQAA +h9IwxH5j+EKzjaILt79S2QAA + + +t3ESzDEjd0ut89bd3IyWPQAA +ozTLGGkik02HnJ667z5MBQAA +4 +/CIUOEoegE2GdBSsuNrBcgAA +rDaPvFt+JU6hhz1f/ruuQwAA +jKF1QEu3K027LQII/cNBHQAA +WCH6wS+B0UC0GOaYvqf4IQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +oN3tAssrmESYbJ7DnDbJBwAA +7ysOtBF5OU6C7B5SD/LNSQAA +oaVoZkRA7UCX5U0gSlyRowAA +fZ8hfYZLE0+6wSSSLnMIkwAA +2 + +False +j2qfJOQnLEyR5RVtbVGb8AAA +aaiB2ZAB7kOSB9niWMGCrAAA +4 +PNLBgWLlt0qh0qSiWmm6fQAA +sBLEv0a6MUOxVSIjTI7oRAAA +iFFsmLbtvkyYY6NDPf2kEwAA +9ngGt/WHPEOVYrMQhnNZ5gAA + + +j2qfJOQnLEyR5RVtbVGb8AAA +ozTLGGkik02HnJ667z5MBQAA +4 +Sc0OIQhuoUidWTJx9x27pgAA +72tlEmphJk6IXASFp9X90QAA +xmWLUGETMkOoyFeatsLLRQAA +3uuqO1MbXkeeqkPqmxsoaQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +hJRk9KPU+UeHMYRbZjP9rAAA +j6VFeRd+Zk+KQjIP8kMcLQAA +Bb1h473Ln0CI2BMiHfpkIwAA +XUZPy8Cf9UuC2K67UdYxgwAA +2 + +False +L3wUC+fjukG9Mbmq0QYdiwAA ++JrMCo45qEOWtcTsDjqTTgAA +4 +7aqzoShHzEehoT62iqdZxwAA +3bht/bebjkaXO8woQb1WBgAA +MRKVz+IA1UuD2xpuZyp/oAAA +3m6+IGlmjU29wgIEQCRA2gAA + + +L3wUC+fjukG9Mbmq0QYdiwAA +FPjdKo5EqkuvbojCyT40wAAA +4 +ut1qqbJf/0+LzAbSHfgIWgAA +aDRG2nt4jkSjokdzljbhwwAA +n3N2hwYIO0yFMlpxJ7peaQAA +lEr7AB6W/UacoRJesmNIdgAA + + + +dev-step +tacoxPrx8kCKprVgJHnvqgAA +1 +Okzvn1c6D0+Yg2dWMAvJaQAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +ARENPNto502mBSSO/cnOHAAA +2tWkSXrKQU+2V8FO46j7TgAA +QepaXmVy4UO6DCEgKl2vlgAA +nt6ZlS30U0SdfHYYR1O1bwAA +2 + +False +ESsTAdhYyU64zi6/oVqTKgAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +J5lkR3i3wUKycPleWHDTIQAA +voEc49klakK8QbtZG2qiOwAA +11o3SRF/yUWFDDIRfrSFSgAA +O5+bHbxyC0+bdQMM/tgFqgAA + + +ESsTAdhYyU64zi6/oVqTKgAA +8v8IRJdlJUmbHIylKGey5wAA +4 +Qn3h51Gw80+mPHTcNEs35QAA +BT/LIA7EAUqDxudgpaJCqwAA +aRMFIiI8k0yN2B0jGd+5EAAA +LXxWlKm6rkWV2zrq9dgykwAA + + + +design-module +tacoxPrx8kCKprVgJHnvqgAA +4 +0NZb34oq+0iz6/8DYcniywAA +dP9LP9rtuEO+i3avSgAGVgAA +nMpMGReseU6Kct5O6ks3VgAA +7Ykp0d9JCkOp70mCxl8J5QAA +4 +cqCsUEAeA0in0Z2LWweznwAA +iGT7GmF0r0CH0TSScrk62AAA +sHxTuCDocEyzJSz3moadcwAA +gIU56iDnlUaFhBS+rQgjwgAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +D+7+lRtL20CwVpExOSBX7AAA +oVw/jiGMz0C0iTNLLteJDAAA +JKuU1ThtKE2xQ1f4Aqnj4gAA +jN2kHhJMu0StmPqVq52n4QAA +2 + +False +udZiFgT1HUuXSsB17nyApQAA +rxa+oNm2Kk2e9yVRZgZC4gAA +4 +IFguHS6Qo06X/Ulso405AwAA +WUvJoZKV9EqzY5IvmGwopQAA +1x7fD+aqoUyyaQ5pbw9SEAAA +leTm99c2L02ZKVnOiVJgWgAA + + +udZiFgT1HUuXSsB17nyApQAA +fIx21ILIBUuXaoqKHt5Z2AAA +4 ++bEGPey1WUGgjGGgZLap3QAA +wzt6WGKB7ESFZTq6g9VpEwAA +1ILZi1CbdkiyGDrCpDDKlwAA +ao99dAh38UyNcJJhz93rNwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +4MaPAdQQfkmUFpuWT1PHmwAA +F2UqhwXe80yk7JK6L04XBwAA +nYYAkY1enkKoJFwILoBHlgAA +HuQAUs9y2Eao9ac5QhECtgAA +2 + +False +pRL6RWX7IUGI9SeSZRJAEwAA +78O5f65/80OvpHK3AuBEIQAA +4 +m8RN+Neh5kWte9e96DlsaAAA +12G/TZTZU0qEeu64QA6VzAAA +kmLtEPc6gEymKXVYoCB16AAA +CjGJ3aMfGUuQto2I1CNm8wAA + + +pRL6RWX7IUGI9SeSZRJAEwAA +5JcsdOcl2kmUJ1xczZEQMQAA +4 +IlxqCNXp/UyYHUzZVYvcsQAA +EJRHT+wc7kmdr8+/mZ6uDwAA +veH3hs7Pwke/ekic2iLsQgAA +Oj6Ju1KupkSFy335XdgZKgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +2l+fNLxcTEylJYcIIiDgwgAA +5s00rboppUq3tLlx9FoH0gAA +fM9i9Yaj90Ob7B0dimgDYgAA +E3qBcsRXvECWJCWON6Z2IgAA +2 + +False +Haa/HtHu8EumDcJn1va7CgAA +oWDHE/AIyEqhL2zTdizC4AAA +4 +iF9DJxKvnEWdlnsFZiL0OAAA +OwUaQ5wAUE+DkUi0zdPTOQAA +rGcSLsaV1EqNaT6crweOGQAA +P3NpWkuCd0+OeVdtAOsadAAA + + +Haa/HtHu8EumDcJn1va7CgAA +ozTLGGkik02HnJ667z5MBQAA +4 +8qM5hRSWWE68NwIGkB3CFwAA +Za+gZMnHAECWRhLalgbWrgAA +ClGq0qJLCkqpfd5k0CmPRQAA +YJbGZPdFvUOBS3uX0q02HwAA + + + +build-pkg +tacoxPrx8kCKprVgJHnvqgAA +1 +n/jxS2ae4kuHCG+KzrGgtQAA + + +build-config +tacoxPrx8kCKprVgJHnvqgAA +1 +GXaySoAyJ0qZ4VKE8gVC8gAA + + +build-pkglist +tacoxPrx8kCKprVgJHnvqgAA +1 +voQgF26qyU+tJv2JRt78GgAA + + +devutils +tacoxPrx8kCKprVgJHnvqgAA +1 +M2viQFzR7kKSo4AiZxz9dgAA + + +codemngr +tacoxPrx8kCKprVgJHnvqgAA +1 +xnCmPbwYs0qrDDBl7cz9sQAA + + +soft-repo +tacoxPrx8kCKprVgJHnvqgAA +1 +7NCDjevVfUa8aWdQ8GgHMAAA + + +devspec +tacoxPrx8kCKprVgJHnvqgAA +1 +vnVOoxtjQUaPd3N/Mn71+gAA + + +download & build +tacoxPrx8kCKprVgJHnvqgAA +4 +DOHBlVwZH0CnyAOdMPUqxQAA +Km3rwjMun0+5NDhhHXm5GQAA +JRnPcdhgf0GhE4NZqTmUyQAA +07vEojIcbEqh2llQKPlxOQAA +3 +tMwNvnbWx0qC99wvlGYF3AAA +VvLdglslUUqBPX/aHaWVywAA +9QetYTXGJUuUfmUAHqUS4gAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +4j+FYeH/A0WfZtbw+agk/AAA +HdfK1M7g00yeb9gq8cQwYQAA +t32yCOrpQEacMTjogEZyYwAA +RJgmkH5hk0mnzfrNKsnC3AAA +2 + +False +wARDKsfmxU6pDs0VU6O25wAA +FPjdKo5EqkuvbojCyT40wAAA +4 +ygfFznufl0y0T3K8r5hlkAAA +PIELQcytDE+hPTNaBNiuwQAA +jI6Et43WQE2zDN60+cjlIgAA +YmoNlaGcA0a8fo4lXqv+uQAA + + +wARDKsfmxU6pDs0VU6O25wAA +cH75vr0YhkuvV/fYij/FMgAA +4 +vX3yKNnf9kWT+KdSKla1cgAA +eHuBA0XdyUmhMo3B9ab0AQAA +OfnE0o02K0+ASmJ1zRdiXgAA +hQCJMBooikqa1DS/O6iTZgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +kvMDTC7QZECLLi+bfmC10wAA +VoUNBOUjkEmAMelwyyIhTwAA +0WzY4BhxFkyctNved5yIKAAA +Ib0YeqIjLE2HWXxd+ODqTwAA +2 + +False +NRxXI+ohkUa8ldCSWR3lNQAA +u2JHX3nMn0CMyZLWTG2R1QAA +4 +0jbEs1Oeqkqgv4k4euSItwAA +ubjxV1WOlEal88NwYpdXjAAA +vpAsZ9TOC0SAs0znqYREbAAA +JAFz0ssyuUqRfHHTTGFBXQAA + + +NRxXI+ohkUa8ldCSWR3lNQAA +cH75vr0YhkuvV/fYij/FMgAA +4 +oicOAnPBqEeBGOYO0zKOdwAA +SHrGxXFE4E+JFsETvnUisgAA +gYabRv0JmkS5BbfVxNmTzgAA +MRinMx5ptEOv+QF74paAiQAA + + + +new-demond +tacoxPrx8kCKprVgJHnvqgAA +4 ++xQR3R4Khk2Mr7tmPdkWSwAA +lBSUAk54IEO9/+7rsBiabgAA +SHPjTX3I+UasU0SECLayjgAA +GaHNfivTfEKsvmOcA6hT6wAA +4 +LgaAK4fEB0e2otJzSn7toQAA +hU4yh3LkjEKFkdS6cl0FBwAA +RKdpd+0S+0OaYFIwovSw5AAA +g4nzG5AXAUmT/Juw/Y+HhwAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +3djyNWh5qUO+iA3WzB20KQAA +vkj0BOoRg0qr8lzo0Z8UyAAA +veywQG923UCpJmHqy0uBQgAA +xJfHk4n1e0e9blWmKGQ2KQAA +2 + +False +HwNxguHxkEq1TTvntBzfPQAA +u2JHX3nMn0CMyZLWTG2R1QAA +4 +28qijT2f9EC/y3piF0/+OwAA +B5QJ9P4hf0uJyfwdf7Rw/QAA +y41GheG/aUSOla4Jjw2CrAAA +u87KZbz6v0a374YpZrGucgAA + + +HwNxguHxkEq1TTvntBzfPQAA +K/jI5ejWkEmd+RwmoOHzSgAA +4 +b9VVWnuxUUy0gytp8KpRmgAA +V3tKgSpL1Eu0kYg13PnjhAAA +nM5w7GSejEGEhI+IZJlUGQAA +vkJuk8uzxUi8zC+a2EkAagAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +MAiiKxGK/kKDbI0OJK5r9QAA +k/63DwjndkiLReX2QpxL6AAA +JvDTgvMJuUylq++u0waS8QAA +cXH/C205ikKf4GPXGnXArQAA +2 + +False +JDSYiscd1ku4Q9VTc3cxJAAA +78O5f65/80OvpHK3AuBEIQAA +4 +5KGEQZPXtUa5SXo3rpaRKgAA +6wB5DLUFQU+RrP2KOUtcTQAA +4OmKSfO1oUKfuQp+h1hWZAAA +xxxm+L2W8kCan9BNPKWsRAAA + + +JDSYiscd1ku4Q9VTc3cxJAAA +K/jI5ejWkEmd+RwmoOHzSgAA +4 +u4UXJfgnQ0eLHbqR0iWixQAA +rhAybtEUtkOwXV5kWFtzzwAA +JC37Y9iOX0uoXkBqmeqeKwAA +uRnWFV241Eq+9UWbGsRLmgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +GbYPWnb7/kS6XkGQmFc6wQAA +K/jI5ejWkEmd+RwmoOHzSgAA + + +GbYPWnb7/kS6XkGQmFc6wQAA +k6w1Bteav02GGDrC6cJmKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Nprb3bcLoUC61BOosZ9+hwAA +eygKNnDk3Um2veEIU6qg/QAA +l77tB7orTkiaZGrlQF3L0QAA +hJ0tc1S87kqSAuGX4+RWxwAA +2 + +False +COsG4HSpZUe/Vic0aL5j4AAA +K/jI5ejWkEmd+RwmoOHzSgAA +4 +2ZL9sACt00qx0Cg3iKmTLQAA +MIT8/Gv+e0Ws6jjGmNmmRwAA +AqAynQlGr0a1papQOgqXLAAA +rOXKiozVPU6e9pH0bYSg9wAA + + +COsG4HSpZUe/Vic0aL5j4AAA +8v8IRJdlJUmbHIylKGey5wAA +4 +jIsNFDdsRUWTT/OvN3ztnwAA +SUFcnz8a9EyTdHbW/lUdiQAA +CCkLRFuVRk6SFqbFPXkadQAA +947HFL6RbESshkpOTCj6YgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +uyacuCS7AEOEyOJVoSre4AAA +oWDHE/AIyEqhL2zTdizC4AAA + + +uyacuCS7AEOEyOJVoSre4AAA +k6w1Bteav02GGDrC6cJmKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +ZbjLAPzqb0imjL9CBZqQ6wAA ++/rTqhVzAEanWKk5UAntOgAA +zTb+/Fnwd0CoyaRDml2Z2wAA +RTy3JBPgPE2M2q3nGOEYvwAA +2 + +False +eD6wP/fAO0qZXgTPDYw14gAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +wRmuK74HIUOvDrQoi+BSuAAA +6hCTfmWvn0yyP3giXUc9tgAA +5gpoE+R1G0iDKOkRu5zLPgAA +ccQzOf52xEi0amCF/8K9BgAA + + +eD6wP/fAO0qZXgTPDYw14gAA ++JrMCo45qEOWtcTsDjqTTgAA +4 ++OXDruHvSUSKNXOy2wGb3gAA +qE2GZ6s1ukyBLc88d/1nvgAA +Ej6+aNOXQEGZuM8hFdotdgAA +e13Bn2S91EWRco7/lFEK6QAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +zndTLn+VeUWCBso9iSlxIAAA +7We6jKhRo02CFGApUPu5qgAA +VWLLVa6rK0K9X2l9yy6DOgAA +Xc5ZA57kP0ml+tO/lPS33wAA +2 + +False +ijA0VzIZG0G7ohk808I7EAAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +GN/OGGMWgEaSB8JusgHu7AAA +oh/G+M1SwU6NDi3PJjxQ7AAA +ManByBkfuEa/QuAb9KyCegAA +KMXug6TF9kKKVD8hfLqKzgAA + + +ijA0VzIZG0G7ohk808I7EAAA +rxa+oNm2Kk2e9yVRZgZC4gAA +4 +7WIytDVyn0elYv9g0jIlFQAA +euqRVFPROUq61icLqYjqiAAA +pFN3VBz/gUegQqhdFPISVQAA +qS0GuIHmW0mGCwTQiKbaJQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +oYCpI+SVFkOQu/mdPxc9+wAA +az2lLUGRQUupbW9hQCNYSAAA +fTmol6tRDU6DqEmfzV7ghgAA +FO4VJAOJpUKdBPcB6bzb+AAA +2 + +False +tV4kKe/RSky6myfeSP18swAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +P2T82CWlhkeOIk7xG1KUrgAA +SN/k76NOskujX25BHIRKawAA +lcCkiyfNF0KupPJcTuWI7QAA +05j+Q/HW00uw8j4mIwIEswAA + + +tV4kKe/RSky6myfeSP18swAA +ozTLGGkik02HnJ667z5MBQAA +4 +gKhPIz5mO0eoPt/x5JSGAAAA +njDa0vrYDkm1DGrCHjymvgAA +KotcZ3zFRE2Em1BaxReehwAA +UCRIEOg5i0+H3+S0YsVRywAA + + + +launch-publish +tacoxPrx8kCKprVgJHnvqgAA +4 +PPr3wQqIsUGCabBRaWDJzgAA +djEhP9lNSUK8mnKeulkyPgAA +hCToqxtIk0qWtMLlSe0z8wAA +zD045480Pkmhr1WF0ULGdAAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +G7+qnUqDRkCl7KxPlw45aAAA +Lqdtm/Vix06mrQ7wczG1YwAA +227qZ5x4bkmZX296Jdp8hwAA +X+hRi98oq0mH2HPVYPg2tgAA +2 + +False +dK9I6bZRfUih3ErZpfx4hAAA +oWDHE/AIyEqhL2zTdizC4AAA +4 +USu5nDow40GMAnC3n0zdoAAA +ABjVTWJiuEGEhdtfxqN0TQAA +H+7aZ2vIPUmdty3JwrEuogAA +vCjAaFVyDE63i9p1Jt2SOgAA + + +dK9I6bZRfUih3ErZpfx4hAAA +rxa+oNm2Kk2e9yVRZgZC4gAA +4 +WOwADkmaF0Gyn65Y0rhPDAAA +pZXkD7qSDEmLVoipN2i44gAA +aXuHs3Koc0iND5nLqn7wbAAA +LheoZ8TVLECQvoj7m1PP0QAA + + + +task-manager +tacoxPrx8kCKprVgJHnvqgAA +4 +0zxf2/fiaECjGyhbRvdvKwAA +NgHnhun2cUyB5rcs/wB8gwAA ++vDknIqORUmbqQrKoJWQTAAA +SXqC2no5IkqvM/Sc2IexLQAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +qV/n64Gaa02UNoVye8cFkQAA +xkUywc1uKUOHql535nPlMgAA +OQp12fjZgEuEgGrczfPTDwAA +n1Fdt9CcnEqbWv7SXLf7xwAA +2 + +False +OeFvUQCLbkSUntfY8QQZjQAA +78O5f65/80OvpHK3AuBEIQAA +4 +RtC6tXmAOUaGZ2UBQ4l7MAAA +IgO8lC5yxUa1HdNIocz1zQAA +8ZlaZgm1uUSPeRt/pbshTAAA +6vaU8A5xoUSGrf6oRA5e3wAA + + +OeFvUQCLbkSUntfY8QQZjQAA +cH75vr0YhkuvV/fYij/FMgAA +4 +/n+fJ5dGJ0akY59zvY2SAQAA +SR69sArTiEKkYzbG8UNF3gAA +dy49LVIfCU6rTMb2Tw1YtwAA +nh07AMkdm0KkkjCUeiTU5gAA + + + +analysis +tacoxPrx8kCKprVgJHnvqgAA +4 ++20ew2cMdUe5jGz97OU79wAA +8SNn6Do/vk2SjHYY36SUiQAA +rSMRhJLXDUSq+9dS3sodwQAA +YuLOiO+5jk60EwVW5oveBQAA + + +design +tacoxPrx8kCKprVgJHnvqgAA +8 +UxkwPHCKZUOZB8abt9yLgQAA +Jh30Fj+sxUCDtvnsiCha3AAA +KlL5ohRGcU6EsMEKnjkoHQAA +vbtIlNyGZkSMrpr7bAuFPgAA +osrqahmcuUqmug8ogBw+JwAA +OQh1pUOuZ0qZn1StB933JgAA +HoVB+uqR9kSkJKLFudhvpQAA +znd3Gw6Wc0uT0DexMR166gAA +1 +UUjC686FYU6T/q1aKuDLkgAA + + +implement +tacoxPrx8kCKprVgJHnvqgAA + + +public +tacoxPrx8kCKprVgJHnvqgAA + + +list-external +tacoxPrx8kCKprVgJHnvqgAA +8 +ar/cmfoCE0OyMW57ay1ytwAA +sh+7dEH4LU2Lg/8CNJS0gQAA +EP52ASOIpkKf0ggG4AxB1AAA +5y40oWQyE0CBov7GZBhxKQAA +1BA+Xn0RUUm64eTCTOCRugAA +3Ceimlwjy0acJvsa1GxoBwAA +tYUtzmHef0ujkk6pYML00wAA +kc94znEDbE2QFP473g5b9QAA +3 +HdgD2FmAh06xyFDupk4vagAA +pxqjN0GODE69EvLg0dAl+AAA +vN04w+sn8kGRW/7MCPHqyAAA + + +operation & action analysis +tacoxPrx8kCKprVgJHnvqgAA +8 +6iOG2zf6TEyGTIPJKas9rAAA +4uB0MbN3+0SYxOfF580zMAAA +3b21Z/iMs0au0myIZ4Z7OwAA +uw2YtpvMEUqC14Kimc8eCAAA +fdnXBAbHkUmPlMqC0iAwCAAA +tL32Ahv9FU65Qnsw8w+SEAAA +/elZXku6H0OwmLMGsCEUQwAA +UCL+mBaEH0SfVWfmTGP3pAAA +2 +ZKrxwL9D1EiytZ9M2QdpNAAA +IuqkqTOhTEuBUbn2uLNuqAAA + + +data-io-analysis +tacoxPrx8kCKprVgJHnvqgAA +8 +ZVZSHvdc90+uyCG9xQvFFwAA +bafEaCWS5kmZa7YDL4tt/wAA +usVme/vWz0SVfEPEfK9TYQAA +s/XioP1Y/UiGduhk/y1+vgAA +lD0x8R9zUU+Gr16SYaMDDAAA +Sucs8l4ei0y7QTbSmrmMQwAA +/G8jAuopsUmv6+KWFz1bEQAA +UI4PRuPYSUCQMhM25b6T/QAA +3 +iwDC0+jcHkWoYFMM+ST2BQAA +z475GIA9kECnM3EOwAHh6QAA +UtVAs5JBSkKc0jSVdLpypQAA + + +data-flow-diagram +tacoxPrx8kCKprVgJHnvqgAA + + +action-flow-diagram +tacoxPrx8kCKprVgJHnvqgAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +FPVj7um6IUGVTfTFIuWNJQAA +9ClYsIQN4ESsljoYy9AsGQAA +oE2t0LzdaUavFzZUAuBV9QAA +tRR+kP/uV0eCpww7mN13/QAA +P3WVydlyRkuwh778fQBIcgAA +v58zl0lFo0OthalTYGFTKQAA +8CY1bBdDxkaH1PcNb3ZGGQAA +o0UURrS8nkeLRNMFFRJEIwAA +2 + +False +NSCnR/cZlUa3fXcKMhA8sQAA +h9lhv0QFq0aFwcWza3gsDAAA +8 +jU0P61wvf0Sy2jgaGJASWAAA +etw0ktzUr0+/O4dDmvT3vQAA +MyjKgBMQxU2TbX49+Rc42QAA +VbiSotMd7EeaDvs0rvjocQAA +IaMKGZD9PkehJr5RNTkSuAAA +Qmp+r+VK8UGO3Il0AjKc5AAA ++KcOzTuJEEumW7XiX0Ad+gAA +R5sVjH9o1USufBZZZSNj+QAA + + +NSCnR/cZlUa3fXcKMhA8sQAA +kETY7OJYc0qg/QkJQX2LXQAA +8 +D9SHHlxBLEqXdBpMaZ9kFAAA +LJ4YEIvhRUyrGKotu/am4gAA +J/9G8Kg5VUmDIQejVTibIwAA +VhPiwKgSzk+08pWyuIXK5AAA +pc1C/Gssc0WTEJ9iA3sBfwAA +rrfF5kKwgUydDdMT+RYxWQAA +SYIv7T9MIUWW/8Kz5GVcDAAA +1DCRn/1rv0iPg5mNyTqoUgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +1w4wHAblgECqTDPtsEemngAA +hSySeZ9DC0SSAiGeMvNYsQAA +cjLydq9Qq0K5MLvIzC4ZzwAA +MTUlmgLqSk+EhiqgGzBkEgAA +s/o88wUJakujvT14Ov4UHwAA +vEWfDTINBEWTGOqxOvavoQAA +XRxA9coNmkyZUu6tdX06TwAA +yt5ClHoBukORHaNOqHHHeAAA +2 + +False +ubIfnYMMgEuGrguT+jcONAAA +h9lhv0QFq0aFwcWza3gsDAAA +8 +DDH1fzvZTkK9PCSBAo9DCAAA +Z31wKQv5ZkuWfbIiqiZBrAAA +os6IS6Yqb0+7B361C+X+bwAA +K+sZdSLIMkienNxNayD6cgAA +tbEQiUZMe0WYVJjXyskomAAA +WmLXQ63kSUm6XqUcy2B3CgAA ++8HfQ2so60ytd8QKTve/lgAA +yNKcQJzJXk6y3PRK2hMaSAAA + + +ubIfnYMMgEuGrguT+jcONAAA +XmSQJXVfo0qkbNCidOBOzwAA +8 +H2BXDDVNUUiLD4SQo3VDHwAA +Ae21XiE0qEupdm2so2ksSgAA +vqoRgYFlIUObG1V4IBIcPwAA +I6eIBiEaNUim4wptRirLyQAA +t4BKFTI2xEGAOUjZEfUgMAAA +I/neFMNDVECDqbPIqXzddgAA +LpYdX7mvBE+M0kSuJGODcwAA +jL6n6OBHr0OMtVccYz6J3AAA + + + +new-ideas +tacoxPrx8kCKprVgJHnvqgAA +8 +sFw3N+djIEOBwQg4t6R70wAA +W3a7WL0aFU20hih/wxO0bwAA +4muU6fXv5EiIdWEzNbniFwAA +PquWW3QJBEGNiYCf83kEewAA +umqbMP1usEeGKjfgQw96+wAA +HuoQwFKJzUi1M05uJPUKCgAA +vrhCSQY0cESQG2s0mSUhNQAA +48lGakpXhkaHy6VMyqpHeAAA +1 +eu/8Siwir02KNGkRDOEa9gAA + + +new-demonds +tacoxPrx8kCKprVgJHnvqgAA +8 +hlEB9emSQ0yr5JtMXv8exgAA +FwaArb5Ga0aYUTqWNOixkwAA +HlL2+wrhT0ORfjlk79BMhwAA +x7hhnO/x50WCblTkyLQKgAAA +QuIP3dNrrki2gCnUv8ZdHQAA +ttpLX2ygo0azm86I/2CA3QAA +lZVbHajCeUu0qKYmBkilvgAA +/8AtP/KQIUaT6bVaEoRjAwAA +2 +gehfWFMIjEKeVzAcdHneqgAA +QZwwsltNj0eenKeiSJArvQAA + + +demond-analysis +tacoxPrx8kCKprVgJHnvqgAA +8 +pbFdS1YKskuJx2F5GYPsxwAA +zYACq9E1tEW8e+FvZoDOgQAA +kUFkbG09xU2F0FPldPOSOAAA +XhSXsGYa7EeHk8sf5VkWaAAA +knkDUQ8LvE+zzvGR3o0h1wAA +eqHuuhez6EuJ/krA9nMkdAAA +s4JN01tlPkmUqAAuiqEjGwAA +2hIf197VZUuHI1PdUVOlMwAA +2 +irMBt7uWtEaxRopZEBcfwgAA +A/3hkPn0ukKjvmT5rHr/7QAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +r2txyI05mEG1QxI9jG/azgAA +IbbVyikZU0+AJeIlhnXJdgAA +f7+h0+yeYEiqquMG2Ha7wgAA +jZ3okYJ6AEaO6xaIq/M6fAAA ++mPQAtrWQU6aN4ktN6SRxwAA +RSg5OHPPVE6X3KXlPl390AAA +OHrfl2GnF0CNl6x6qL4P3AAA +7FHlp+8RW0ahBqPk+C3x8wAA +2 + +False +ZE6XGr3H4E+M1Lu1nRZ9BQAA +TMPdkgNID0u772le0sCmLgAA +8 +0JiEkFKmmUuDZogH7iBRrgAA +O9KRx3XtLkCvQ3wPo//NrQAA +oQbN8gPfP0O1X69kI97iZwAA +gLz7JlBfJkaKllUko0yHYgAA +ioeVAMWoskuxqRDcSrAwGwAA +Ba9Qlq7W0Eum64GHW3CjZAAA +NHci+NHOCEOiljZdBTOP4gAA +rWEwffm8xkKvt7EwMVVceQAA + + +ZE6XGr3H4E+M1Lu1nRZ9BQAA +06qF2g1ff02RsBbBfLLo1gAA +8 +zwJIwa6zRU6NT12pG6ldmAAA +b5a7t3L8RkWGBByXZgWELwAA +o4FInn2nRUy0+squnhBaaQAA +OampBor9ZEusGPPwYeuHvQAA +2KP66hmaukS2qNcy+vxwMQAA +rkS53cxrZEqi2ws5JBYW4wAA +dJnjiaU/o0ONGKw9cakvHAAA +TEPYpFt610WAay85Dr9bWgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +9JFMShBAc0y7u6p4T7ocqwAA +BMb7HcVwtkuyXT6JdvC3xAAA +YRJ3JRRm30qX8Bm8fcufFgAA +2AuxrO4IBke7EBbcD6KjbAAA +Vs1vIdHfYkmFi5mbSzwXVwAA +6my+K6X+GUSlpXMFrZyaugAA +ThHurU3G/Uq7XONAeBqOWgAA +p5O2r/VbiUKnHoQRCdkCugAA +2 + +False +li4LwavBrE+pggONaW7QkwAA +Kh+ykp9GgU6PQXUx+CGLxgAA +8 +E/KBcTvORkybhPbj7PCZhgAA +1O2DroJjnEWYvz6+FVubtwAA +uUEz4BCUTEyz3GLP1b95YgAA +jgSNRtyAi0OwZSqJK4Fv4AAA +IBXygk5Mwk+yD44irQTKtwAA +oFMsRIyp7k+pq6sA7ZtJBAAA +yHedW9DhBUm+c4iXzW8F9QAA +hGfLrNiSI0GJQNpC8q1JTgAA + + +li4LwavBrE+pggONaW7QkwAA +06qF2g1ff02RsBbBfLLo1gAA +8 +FOjcSLTE3EmrGUF3rq57aQAA +MxmMoRWpqk6NlGYdxOQfHAAA +XlFBJXt59kymFd9cnNWfWgAA +BLWUtAOsR0e764vPctr7mAAA ++fNxcNb4QEOIhpIQ29uHGwAA +yeBMFAf4k0eM5QTkLiB/3gAA +Nu8TBo5EXEmaXjY8ml8vawAA +sXxYlBeOv0efv7suA2hZngAA + + + +generate data-dict +tacoxPrx8kCKprVgJHnvqgAA +8 +RvaeyZG/PUeTpXEVgO7PywAA +O21u+hfXDku6m5GsWPIKYgAA +CFtG17Si+0qYjRDSXLSGQgAA +fjSHlNsETE6w6BSvmFbdygAA +dun4oB1o7E2GPmOE4gcj2AAA +76SBS3RX/EiEq8ITD1msEwAA +3AscrpCrjkGGa2g6YOynTAAA +RQx6gozO6U2i9e2xDumgkAAA +2 +/vsJW8WzsU++6Lul86APuQAA +ApKyMGFOCkStssh0gwBpKAAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +WpDBYAgV7ECwN5q2IG0BWwAA +7rIZbRHbBkK4a7w0rBYU3gAA +q/OnjSf81ECiOCiUPrRD8gAA +RUaCGSwd/EOt4x3vVZ61FgAA +osRUS6INl0m9Fos+HK5ZhgAA +Ni9GG8rC2U+WOwOH6hpjvQAA +qhJIY6DI90KYPr7FiN0WowAA ++IdKjqWf+U2tP5ahYB93wgAA +2 + +False +dxugzP0ZBEOdRYlU9N5SDAAA +kETY7OJYc0qg/QkJQX2LXQAA +8 +C4CW3kag50+/7JDRv/6ksQAA +3RyfQVGOeECDb+G4M1dI5AAA +AKTiOf8XNU+ZeP8H/sww1QAA +AIxnJXRNfkKn+hLzgPHnCAAA +CPhIMuHEvUidckSkXTkmoQAA +7+KwpdmJz065aoKo4OrMDwAA +HEGX4XyfqkSVZryUoF2M2gAA +nfgtb7VVvk2Fn8MugHPRywAA + + +dxugzP0ZBEOdRYlU9N5SDAAA +c4KyOid86k6Bzi+unTPcfAAA +8 +LkVqtD1DukGhkeIQL+7y0wAA +XbyXWUa96kaA+O6KmLTd5QAA +Pg8ABkt4iku58sQ1D5ZJ3gAA +P/SLxRpfCUeLWjfOe+I6kgAA +C0MPxSwCL0y7z+mSbW3smwAA +YDHUyusmUUesQOoYwCbNnQAA +UdRBun9lFUOYT+NAlRFeSwAA +Zf3oMXLA4EK7HdlGdccVKQAA + + + +data-entity-analysis +tacoxPrx8kCKprVgJHnvqgAA +8 +3zDgV/Xi/0+DECy5hTfn6AAA +7MUgaMAgqUiX3AtwO9eCeAAA +n4fUp6VAdkqOet3jRKvJxwAA +k2y0V3BTMEK9HghOYUIgIQAA +VJbVUyCxs0u+Lgy9ekB9lQAA +tIn7qsZLLUaarigzNkPpaQAA +q8fBOBxBPk+cb8AIplBN3QAA +ZM1d8Q0QDEqUmVRsk+jV8gAA +1 +FR6YZrNJHkeksGzXICrvngAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +d1SzxXFeMUq9ZDqrQYaaJQAA +no7Q6S0jF0qn6b74ZkjszAAA +eoGlpcWkrkeigDwGMKxRJwAA +JghCAAhzrEmLlPfMRJaFLAAA +uLKrd9AKWE2k+0Hro7u6eQAA +TrUf9wr2q0m9vdTszmldcwAA +CAdOEA8zXkWG78r1tV9tvQAA +XoBi3j6pj0eUzpoE6SSRyQAA +2 + +False +TfaTWdzXx0eF98RMZF5U/AAA +c4KyOid86k6Bzi+unTPcfAAA +8 +OPO3MD+GLk2sKsCAn9g3RgAA +2wu7JXIoFkCQqKwPeaRSwAAA +CqiC2IdTyECHs45xZep4+QAA +wz3jELMGt0abXQAhk5/BXgAA +69AT526weUSQX0AhgzUL4gAA +i9w0K2dLZEegGFJoXuZTAgAA +MV/N+sBKDkGqsyw6Ql2a4AAA +OysuMXmZgkKRAzPVCnmGvAAA + + +TfaTWdzXx0eF98RMZF5U/AAA +8E86OOxmt0eTCKMQNrubWAAA +8 +Rz9PKJAggEWsSFtV8Q3OHQAA +uIpCimBeOkensj/KYTA4dgAA +S6QqNwG3OU+PU+KEcOuSiwAA +5N76yKfHxki0E/ohnKcC7gAA +WDm/gIWPZEODM32fUbeQLwAA +62KlpqlkX025GPxjt5jeAgAA +/vrk/iCUqEmebDYHOKVcMAAA +EeL2HbB9VEeWcc+9AXvHOwAA + + + +module-analysis +tacoxPrx8kCKprVgJHnvqgAA +8 +s/iW5IUcqEOvkUCPbURcvAAA +n7Wi4yj3J0mP8qQHTFyZ6QAA +sUWdqigs40qlwo595TWrgQAA +NByCAJBkO0yxwHvl4JF4JgAA +/UwMH6vM3kKzkuL76KD36AAA +x8QSHcKys0u8cfkxdnyffgAA +fACfPJVnbEuY/XYoLHkrWwAA +puU2uGH4uUmFyD3iemCffwAA +3 +1Y6QXQ3IbUKN3Aa7VuMr4gAA +zmuhwJCP20GxOG2Xkj+EQwAA +6MJU+jYHa0mx8HaVM4S+8QAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +UZOe5+gzxUK6uYSuhvLe7gAA +sJKcVAmUS0yXXy8qmLULKwAA +5kqYjmgZKE2N0q6FUG6tRAAA +IvDtzBpc+kGUu1MBFIIBIAAA +TT2n59wcFEWjjjI3sTCzTgAA +bfDfeVO8jk68tvUUIHRMOAAA +Wmnz9SIV5kyejhVVCn5CKgAA +zYwa2WPUy0mvZG0zbxLCbQAA +2 + +False +BNlaobUxlkaxprXRzDMgIwAA +kETY7OJYc0qg/QkJQX2LXQAA +8 +0SedcRZhRU6EHGfFmfMNZQAA +cjEDpAqJpUGJrnqSbhV3PwAA +ca5AEw4qL0uQhG+nfp/DcAAA +iG1p6EpH/UG7egUDUcWMAQAA +lfjq3XhKn0G8CDwzbGNwqAAA +jHLp+F3hhkWsf3OerYCqfQAA +JN1SvoPFc0GpXxS2lAzKqAAA +TXwavc+6rEiRa5clDy5NHAAA + + +BNlaobUxlkaxprXRzDMgIwAA +tnTkvoZxVkmVjIgd8K6VcwAA +8 +HDzKZWrd+kWyG+ZoXL2xaQAA +nByWoGhft06Q9EGhwBj7VQAA +St8KV4XKrU6+frs38fgK6gAA +WCZwqYsrC0mSL0K3dekBXQAA +g3VwcZkMz0me1WfEuaG/xgAA +vlK4naBV4UKSVNOErL9ytQAA +USMEgjft6EmwvN/hTXMM7gAA +U3GWx91z10uqa0+RLMXoewAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +f85cHGowA0GlkeCEZn6NKwAA +Pw9U76T200SKacFK/Fn7sAAA +n74kabJjqUiILIrL5vBZwwAA +0qH69FZc7EKvdojSPXMjiQAA +hLn65azACU6daYAVZ0j7CgAA +BikNtAupjUScT790usgi0gAA +RstLIONy6kGorgVe2Uqi4gAA +jcNiqYhbH06jiCc33VQDNQAA +2 + +False +t3VIg1cXJEmsTGdIYQFIcwAA +XmSQJXVfo0qkbNCidOBOzwAA +8 +7czXXL2ln0q8vqBno9oLaAAA +ipRqDjZPTEelcuD3REQYGAAA +5q4zooGEi0KidnNJpYCbyAAA +TGA79NBrL0alouW9618sMwAA +Ps4bHxmtJky2Qk8nDc05YwAA +rjNAWvp/T0OxL8Bu9JJPCgAA +e+wMe/1RAUSqqf2Zcn6XDgAA +At2iUXomGEO79uliyY9zdwAA + + +t3VIg1cXJEmsTGdIYQFIcwAA +tnTkvoZxVkmVjIgd8K6VcwAA +8 +hix5sIQ94UG9xQQblrGFPAAA +Tbq04QMjMUGQ4BbLO7+V0AAA +92hJ/PtaoUqMPCxPtw5uLQAA +YyKeAt5nZ02OYKZevuihZQAA +PUnmliyfv0qGFzpdLEoEYwAA +b1vyJY69L0qigfqsHdckzgAA +DOgbOMvLUUG6s6fNR3Iq9AAA +y4H2PvsUDka98uLH4SMgVQAA + + + +code-gen +tacoxPrx8kCKprVgJHnvqgAA + + +soft-demond +tacoxPrx8kCKprVgJHnvqgAA +8 +XmyUwnJKX02C4THv/GbClAAA +ntKdZXdNWkaeImBRCzTsNQAA +kax7LvKiKk2pc72H3cf9hAAA +Yf0qt5KoJUaLlRYdZcS+FgAA +czSw1q8UVEOeSKFvdSakVgAA +q4oTydUQw0eJlnW7lCbubgAA +jslNvnX5eEiSl2ZkgZOqwAAA +qpO8JT/0R0+fIWT59ztb+wAA +1 +vq1zAfKQxUWnGiKbBTmYJwAA + + +soft-analysis +tacoxPrx8kCKprVgJHnvqgAA +8 +9ECchidjm0Oyi96zrE/MCgAA +qyHyd0r1GEWFF8dxNKhu9QAA +/HtDJeaJ2EisBDirjMeQewAA +VMlY1o05V0i+2N9qs751BAAA +gyES4qtFcEWegLydxWy1GQAA +3e957Towm0iSjwavk+RM9AAA +/lJo6FrQxEunObunGXs38AAA +yNZwoo/PjE6a4NtwUj9H9AAA +1 +0CpaRkRUf0+bAPOkrSqRSgAA + + +src-pkg and build dest category +tacoxPrx8kCKprVgJHnvqgAA +8 +RDlS3XZVdUCC/tRmDGvFywAA +yxzVmyELk0mT4um+FwipdgAA +S+TygaKYk0uAbwsfbYN96AAA +hqaktbVQnUCUYBQCSEFGJAAA +9pbwNzO7hUyC11S5a9Hn1gAA +XA+iFLjZMkGzUwnZ7CSZagAA +Mx39kg30k0Wku2RoM1yA7QAA +eBQADWbmxkuSBAnzjH3FjwAA + + +layer-design +tacoxPrx8kCKprVgJHnvqgAA +8 +iVh3QgkpmkKlqxcSGYTCIQAA +GoBih2tm1kaBir5nDWZudQAA +ZDBgyQA8cEGtR3Px/wUD/wAA +7+HFaANoQkiVifwMlmuntwAA +cnN0HexzX0WKGgNpVfpw2gAA +k2nvWTKeBE6d6Ay9xGtHjQAA +e7eqCRCXH0SWTE8rd+4h1AAA +iXj2sP0tHU6aLRRVxEieSQAA +1 +FVDBPeq7mEKlp1go7V1hsgAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +PPxNPcf4O0eyQOM/EGPOkwAA +k1jS3/OqMUqf4D58ppccVQAA +1h5gznPDFEizRfu4K9GfkQAA +WzJn/PWv0EWKhoaAZJqYBAAA +oMQw+nxcQEqK73wSmEOFOgAA +md4ITarkD0C6tNE2+WjNBgAA +18jESLWPRkO+Wb1w/V0g0AAA +FZVXwLSUrEeJ/KAn+/gCFQAA +2 + +False +xMoCRZ0FD0mJscRNN+UpywAA +tnTkvoZxVkmVjIgd8K6VcwAA +8 +teOONX/vn0OFHLcfp91+fwAA +Ys/C7kHTkkeJlFZEXuZ7CAAA +pIL5ZYFg5EmhEkN2XAEWxAAA +5z16Fa1ESk6c/kBXAOA5PgAA +6ssAIonIkU6drI87qw239QAA +EzTRgY/3FU+9+QXX23lk+QAA +JQZp7nqtcEal9RLMKf2hrgAA +to2fWcgN7UivUOpxIDyx9wAA + + +xMoCRZ0FD0mJscRNN+UpywAA +a7yZcyAyl02YNl0/FQziyQAA +8 +GrDwi0bWFE+6q2G+DxTM7gAA +b59QNJCEA0OTqfWZZZ00oAAA +avzZeQ4gZkCmBihm3WuNZgAA +liyiZqIWCkSVU1TZsb0dPQAA +wHvLvs5Y5EuhN+zZWiBaawAA +HiTxVySzUkmVAxzB7f9hKwAA +ADiQIjRGYkm3eT6HLSERVAAA +brEbvKvIMU6JZZ26T+nJZgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +aKlp5X/0Sk6upQusuXcE7wAA +YrKpRBjqbUOv/BEau+9IvAAA +qUUpYr8AA0+91K8cYmxfZQAA +HRqlh/Pfz06rxhWK8YIXNAAA +MxHGvnoG4kubDHYag7Z3XQAA +zEZFBHrdakWTr0CA5+zx6wAA +3DN6YOWorkq2uvZapFt4IgAA +7GYq6BsAwEGiLDGUxTWyHgAA +2 + +False +BZR3CshDZEOw2M912JpeeQAA +mx6wTw6+KEuGtAr0iRUXJwAA +8 +vDlhSKsYj0SiclZtg1zWMgAA +eJB4z6oLJku5RUGcRVnuJgAA +zRiFMhdhhkCKpi15xt2PUgAA +GdG/AQhxnkCG/OHU5GRwUQAA +AGa56lwOME+089iJmd4uqQAA +jP/DATADPEefcGKYyv50pAAA +SOWW3hlBg0Wxc3C9EHGAsAAA +n0a2k7u1UkadG1yxOaII7AAA + + +BZR3CshDZEOw2M912JpeeQAA +h9lhv0QFq0aFwcWza3gsDAAA +8 ++usbllKSsk63D2j5+09vnQAA +EyiLt2MkxEmZbpCQZ3BiAgAA +y2Y3A+hwA0yH03L0ahMfqQAA +L7KAi7ah6UK+5IiKOQ1WRwAA +su83baQFVkuLfQ2BANXJIgAA +yhaBFLMONECtrhuExO62yAAA +iyq6+g0UQ0aqJVrI75/DrAAA +IwMQhbsPT0GCIoQStqniGgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +510d+QiLBUaVuLRPUEL9qQAA +kIh9KIhRZUuelTWJW4n/HgAA +aEHcsGiJ/U6d4dKbIEsbLAAA +FapXsrPO1EeFWmBfEHsg7gAA +goADWAtaski9biWCXIVlwwAA +c3mdMnCVKUGEPyRoo5Je3AAA +0P1XWOa7/0WholNxM0rYrQAA +/NURZy18KEiP+eNIwn1mIgAA +2 + +False +/FmqeTd2akSH7n3I8hA3mQAA +7FwnjSWdM0KKXAN3V8oQMAAA +8 +EXw/pqknA0Kd0b8z6qWv6AAA +e0tXVecyVUi+17715ZUmbAAA +XlIPivxjD0eqEer53H9//gAA +Ofhcz8psBU2RJnfRWrgU+AAA +FEbvE0nZuEyAsu3clsKMzwAA +LVPH7Sb5ukmNcsTpC8hkGAAA +AEFvy3vY/U2Dy5jjX1fFGgAA +/lVPxwplgU+vlsxd/2ojMwAA + + +/FmqeTd2akSH7n3I8hA3mQAA +Kh+ykp9GgU6PQXUx+CGLxgAA +8 +J0WU5HBiuk2zrF6bP1GMdwAA +j77fLGv3w0OyHO0m9cpaywAA +DgSs2SHsGEiUrrqVFCobLQAA +2m1lI/IudEKbqYK5eGkLHgAA +8qi6YRYimUmDetVXB+xs5gAA +LUWiksah20O65ZMPZonHrQAA +bABEcBXeCkejb3T9ocn1MQAA +BoC3ljMpAUmDjtJRD8QbMgAA + + + +src-pkg-create +tacoxPrx8kCKprVgJHnvqgAA +8 +mCnmzxWG6kWi9OPK25z8CgAA +vHIslL8mHEG7AZUKpbASQgAA +EBCxIVC9fUOI+5JDHb+LtgAA +L/HbzZyqtE+XtNHUSoPfPAAA +g9FXZVEqkEeDovQh5ld2zgAA +qw6KSgAtDUeOGiUtVSgfPwAA +IAGZ65A030uJKQsfl5d4hAAA +TQzPqjv61EO5sWqxsv5l5QAA +2 +rO/Oarhbpk6wEn45hIpPfAAA +La7Sdx9zEUWWIkxIncjJuAAA + + +RAD-demo +tacoxPrx8kCKprVgJHnvqgAA +8 +PUHktwo1XEONvjakWKxjjgAA +qv+NuW1txkSwDGqRM2sVVgAA +ZMCMz/XbAkebr+z1iFakUQAA +rdXuZl0AnUu5bUtQ1R+mcQAA +jJnr+ewJmkiXbJ8FW5RHwQAA +gqbWU6zyIEKT7BJEgeEKwgAA +25wBG/AA/EmUwngaHeRreAAA +FtkLwuPA/EaAPtwS1hmobQAA +2 +b75cgmrZUEiaHJZyDm8qXAAA +wHTgM9Z8VUmrcZGO/o0jJgAA + + +design-to-code +tacoxPrx8kCKprVgJHnvqgAA +8 +GaKv5RiKr0yqd1YQfpBS6QAA +c8pfaqnHTUWk4Xz+BwDOiQAA +nizmT/+xhUioIp9m6FDdFQAA +M8yQafKDFE2wDMT5pStIYQAA +XsyNCerqHEuJZ3n6KxffswAA +LPtuazSta0OzNyQ9ZXeN8wAA +W2/FwjRBmU+aJQIqciy14wAA +W+5m8PECWU6GMRs8bhfjMwAA +2 +YXudH8Doi0+zzc1qPMjDNAAA +BOzCR9HOxU+q1mRime4kPgAA + + +unit-coding +tacoxPrx8kCKprVgJHnvqgAA +8 +Ji7GcpOn/E2KIxghPULMgwAA +Ajldi01MC0e0b7U0X+hYIgAA +2weBpxVnqUmWEHvnxDKFmQAA +Go+WF+6klUqANH5bP0R0AgAA +cXkc4ROKfkK2AEQ27ILD7AAA +G06Bcl1PFki+yEQJl+DDygAA +BacBkZe6ikOp5mhmJa2nlwAA +0AvdzElZo0irXbBhq8MV1AAA +2 +nnIS6vjqXkqw2mw9rhuzugAA +GPR477SH0U2rZy9DRg9MzAAA + + +unit-testing +tacoxPrx8kCKprVgJHnvqgAA +8 +0HXL2vLmwU+NgNkl6zVkQAAA +IvP3jaLlBUqCVYhTQNMWKAAA +Yn+UYxYUkEKAY3Glng05RwAA +KS5hUG2YU0Ozn8Gc/u0C6AAA +udnYsolK4EGZ5Tqfu1inggAA +UMgdqkl1sUysMrcoUTrVVwAA +vCCvyT9WBUGugbCVunkTNQAA +o3n8H2G9wUeFUWZ221n2TAAA +3 +g0Sss8qL1USpNMhJiejoNQAA +akgagoM7O0WP1rFMWH/IzgAA +OPxtPn1oKkaU2Qqr5fDcUwAA + + +integrate-testing +tacoxPrx8kCKprVgJHnvqgAA +8 +lSkarANt7EiYF5x5MQ7+qgAA +eH7cSqHzM06eWri06Bz8UAAA +0IgroACfLEKJ1tcXHw17PgAA +LJcQqwjK3UiQPKY+TkBKbwAA +kVd1VyDwJEWJDwZbvH1q6wAA +Unl2nXQhZk291xCVwjdJNgAA +/Cb6h3yeUEiDvfXk44ztzAAA +S69h6PuNhEOikjMwKUnPAwAA +2 +Fb68OZ19C0WB4BjQurmBRwAA +BmvYAIFdPEKrfzWwQhihCAAA + + +testing +tacoxPrx8kCKprVgJHnvqgAA +12 +hhCDRIRYnU+Qwbyyoec6WwAA +LxeJT8NHO0+lD0/d7KGSQQAA +2RPT+xZTsUeyQTt3cLgQaQAA +aTjSnapBbkm/m3CcTts4eAAA +kZAXDcSScUSa3zPofC/wwAAA +A8ZV/Kqj30iWrIPk6HYOEQAA +yXUYr4lyGUCtn8eyKakSYwAA +jnjaBfSZbU+G24TMM6jQJgAA +qudITNuevEOUiPdD67icGQAA +pIcjCSqCp0u0bE+JXiLXYwAA +jAH0o8IBf0e+UE01jheoowAA +awqqy2Oc8ESXvFOT3vBCYwAA +2 +WHhyhUoWo0iDDhj6FaqW/gAA +1eC8b7wYzU6Y7xZwvUG1yQAA + + +doc-tutorial-web +tacoxPrx8kCKprVgJHnvqgAA +12 +SJxSR34gTkGLBFrgEQoGBwAA +gazS/rMWWU2cuASRb6PWXgAA +JJAGKyUInU2dRtE+qC+f5wAA +T7n1RS6MyUKHQFHnbELd4QAA +IygCYEX6+Uu+11eoseJSngAA +TCGlYZgKEEmJHQ/sWrYZWwAA +zeNRwcBsxUSrLnYk/ihjLQAA +6V+fmC9BbkeqmKkaO53PigAA +ugI2euwM3Ey7T7DNJ++xmgAA +/jxr0s4HuE2Plztsq3ArPAAA +tsg+NqwwBkGd9rNrIIq6BwAA +8c8SA3tUmket5UPwt8V1UwAA +2 +PfXDwrF2QEKVag/W5+FPYAAA +bDyGtYJmuUiVC+pPkc7oHgAA + + +Package1 +tacoxPrx8kCKprVgJHnvqgAA + + +version-pkg +tacoxPrx8kCKprVgJHnvqgAA +12 +wTzRmZpNA0CytlcwOuyUMQAA +7n+64jk+fUibN2OwbrzKEgAA +K2UfbyVtjEqINckDan+MFwAA +LtqIKvhMKE2+MEY2TQGkowAA +cr3AMb7W2EWA6biraBdVIQAA +9kzSurKehUa5ijBcVIpSNgAA +6rngOocODE2STH52F9LPDQAA +y5wFK/chLkurLsrcepDVQAAA +0JMCaRFeCk+HcMqp5TyNyAAA +JfPAxs20JUyEIMe2hcvp6QAA +bSsQwYPoxkueKjR2EOojGwAA +1oYOAgKGHUm8dAsMba1dwQAA +2 +W+X0z/vQIUO+tUzMI7hv5AAA +mwO8gf6vqUOl745za4HJ8wAA + + +pkg-repo-sync +tacoxPrx8kCKprVgJHnvqgAA +8 +sAS2iGQLE0GVexawSaeD0AAA +/WLV0sEBRkO9qHVG8A4ZogAA +0a+6/xINhkCgV02hVYaeuQAA +8QGFMJJltkuRXkksGVdKqwAA +VXT22UgSZE6QUG18w3YrRQAA +w9bt8imE3UuRd49OAK8iuAAA +IrOh8uJuXkayIar3FXHiuAAA +JoTu8087cECdlb4taCTq/AAA +2 +bvYo1TGY6U2Io35TQ/yATAAA +7JwpGqJmgku60xKurQDyPwAA + + +download-build +tacoxPrx8kCKprVgJHnvqgAA +8 +IIt4VBS2JkOc0GS4zIsSDAAA +s4eAGaFkf0GNj99lI//gWQAA +Ve2Lk9KcQkiqWzdMRgwYIAAA +6VVbqmmtlUWUEgP5GSFFLQAA +vblLAfzXRUOgCjpCebaQyAAA +6tLstOmIkEabOr0ZjGnl9wAA +uD0opCN/bUioOWfKcTYo3QAA +TDhxh2ymqkG+UIDWdQ4O/gAA +2 +LL86l17PZku+YBsr/fUklwAA +UYbXc0CahESM869EpDq6lwAA + + +loopbak-testing +tacoxPrx8kCKprVgJHnvqgAA +8 +e0Tnr7u8AE+La5gTMkR+KwAA +pXJ8yh72jEiZ8IFi5raIZAAA +aSm3kANR9UKC0kqSlISpFwAA +MENiA1QHdkeUvLAzEz9kkQAA +obfQS5n3b0uAe1Y1fNtQ1gAA +QrYU2VR3F06JCrxaoEHkswAA +XuKjI1kKhUmIsFRie8FoiQAA +xvC6yrGOhU+0Bh9pjWjR2wAA +2 +P+S209BDDkSnrN4WPl8+WAAA +WMjnuHQF3kiQvKAfM+S81wAA + + +Package2 +tacoxPrx8kCKprVgJHnvqgAA + + +publish +tacoxPrx8kCKprVgJHnvqgAA +8 +GNt2i16Jv0er8A8pORMwcAAA +yzDihPA+/k26KU657GbvEgAA +AbO8F6w1VE2FP2PujMK2PgAA +hmBNRbsHt0qM3SlsJcQsrwAA +M4HlmVZXi0yRAE9UMU0zRgAA +NuoNLcCPVEy0Sl9PBnsvdgAA +vji5FSPdD0uoJCI3ApFo+gAA +RhJ7yKi3GkinYtjrGs0fZAAA +1 +2J0+TPdjaECdzYN0YQ2guQAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +Pkm/LUuEZU2sscqG4XMdwQAA +RfiAlLFylUOvxIT3HNjRLAAA +X97pa4VNfkKiMSEp0APWXQAA +jibAwPsQH0miEfHQobVeMQAA +J7fs9nguMkCx0sN3/itqlQAA +A02eHxtACEuJopeiYV8tFAAA +stmkz8TtAkmK+IHjUC1TrgAA +A8s/mlVafE6S32TvtubF9AAA +2 + +False +YcGgDGXOZ06J+TZOxU72agAA +kM7+GQ5RuEmygAJdSluSjQAA +8 +SJagtU1r1EGpeC+GVrzmnwAA +yMYrBPv3JkqFc4pBLZSqXAAA +w/r659TDDk2AKnLYAKyZRwAA +d9Hi+WZ7hE+Zcc/Mg0rOnQAA +GPPcvU2gT0S/DtfSki9PyQAA +rjGKT+HBW0SrGHCxt14YRgAA +ev0VerKdWUeYBJVkteamGQAA +FnpNWRF/sUqHyIiqwG6HZQAA + + +YcGgDGXOZ06J+TZOxU72agAA +ofqv4KD9ukybRvF//Fek/AAA +8 +//dfa+a3DUOk/JFd2Qg1wQAA +82YAZoYhJ0iEsq3g0y46DQAA +r0+FEls86EiJnMmVAY2frQAA +R4pWtVfhOUu2zR4GTA8KvQAA +moNTePrjx0G5wipybEFNXgAA +p89w54Wr5EipR3+Mc3dcAwAA +hsFdjFPNRUGY1dTFSWccugAA +Py45JMqK80i2ym9oab56kQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +VFeTKuaRGkaKxga8eylyYgAA +EEqzQY0eXEaiToVUiEiBywAA +n+1lHS47vkSPW6TLQogepAAA +WbKJQLdI5UqcM66j2W6W4AAA +2 + +False +8kJkpVqo5kC/wdE3wXcwIAAA +KmQBouG6c0yb16gPnUnBtQAA +4 +FSyt3Jcfe0WqyePjM2GzQwAA +UBR3QgyjKEahZS2MwTnRwQAA +7GvYaVJHlkqX9dZW0eJH+wAA +pkjx8DJiuUSiShtYkdHa+AAA + + +8kJkpVqo5kC/wdE3wXcwIAAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +2AzXF0RAVUOZPs1N2GiP9gAA +qUcTAtahPkyTA/B2RX5HhgAA +lHaP8TUSgUijBnXTHvKzCgAA +cMgK0PZW9kOVBYxhsWu1JQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +kdpCRdOBgkeS7e1zmaIiNgAA +LacDIW8TZUyV6H66XI2hAgAA +ZxB/vF47I06QY3VhmgMg5gAA +6QWoT3qEu0OWAYbwv6pCNQAA +9ClMv5qBYk+xGqhG/8fDJQAA +4BN+cbNZ2kyf9+0hv/APywAA +qGLCHUQ8gEC1AWJA/ohqlgAA +AG9jAIkxgkikZAPXh9fwtgAA +2 + +False +k48n8C/dEECUhVTIv9BoGQAA +CLf6+wSJ/U+4iSwM7QoY3wAA +8 +32LynD2PNUS+zmKAfgM65wAA +HbVkzqmSZEuh6+oH7iBo3QAA ++jjHibKnRE6F94xoLDr+sAAA +6Fs//drdYEK/Osv78JnO4wAA +C91i5HF5xE2XUOVZyfLf7QAA +WkTB+22klUuDtxaVUjyb8gAA +BXPs7l2boU6n6hkCKN+HBwAA +VTukdeFoqESJY44bna0TMwAA + + +k48n8C/dEECUhVTIv9BoGQAA +CBkE9JDrJU21ybYWNP2cCgAA +8 +Sjbwduw+yUy6YKwMJRDn9QAA +RCwYqywTKUyWHLN2p3k73wAA +i7WgcsxLGkW9jueuILf7hAAA +ukqpM2qDDkibbdj/IWzVkgAA +48lG3YT+6kWSp+o5ZeXBoAAA +wNfrc/LQmUaoVtseaMproAAA +OWk1nrPBb0axfmYeKsjtfAAA +8YDAKWlN0EOkbZr6QIRbogAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +bFWnUyz3XU6PUyO8klcYtwAA +znOhkDQI7UW1LCvNppPz0gAA +OyAECyVdIUy81hOLRTjNZQAA ++MRomIMRK0ibtmFnRIyulwAA +y6Oz2IKPREO+ayJvu0bgbAAA +HIot0WFTFUGmrT/d7i1FQAAA +IkJgV/YDH0asfKCc6kYdKwAA +VDJ1jv/imkqltbvjuDa/PAAA +2 + +False +euFZ2oXh1UyoeBpwCRLyDQAA +gJ7o4uiAMEqSPUL3dadz2wAA +8 +bRj+Z0B+pkmSHphrP9c82QAA +VZOZlBxYK0mQpScnNl+VrwAA +0VRSk03Q8kW6EUFpKXHrPgAA +6JKgI/q1C0SqiEyZiJanhQAA +C0N4TLgCl0CNoLW4dogDfQAA +ht3SGjyEfEeyOWe3Z4s3/gAA +DxQR7FaFFUu3IIS8RDMZtgAA +zDVl/QeveEG/USqn/02KJwAA + + +euFZ2oXh1UyoeBpwCRLyDQAA +wftqTlAvI0+cR9j69saRNQAA +8 +YKdwlOqxbUmcHwlEZGbbAAAA +Z4kmJUO+B0e6H3WfTULQhgAA +QeMWYpqpmk214x8wWzYjvQAA +6nr3jdfiCEudsLpG1r9fYAAA +UYI0q7BmVE2BDBAnBvN8KwAA +zjR4X1GXdkOSwV9Jg7IUxAAA +7qOJ9rZH7E+Cw9O4m87FAAAA +i9M+gCwOx0uSBI5us8ZeggAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +4oPnfAFHhE6/ISoA/+aS8wAA +2rIgenhnpkabtwRUsoBPIQAA +8dK5J0xvHUi45I/ldzxTjAAA +CFaHNx0wXE2oEMC260K6ewAA +vr5dJIVOv0i4095jxhQgLQAA +xjRSn0jCck6297mpxLiSeQAA +0fDmWGdYC0umYmtNhgRTlQAA +JC2ySJ+8l0OmPisGKqbC7gAA +2 + +False +h7KFG98rIEKQY4C1dOWmFQAA +wftqTlAvI0+cR9j69saRNQAA +8 +amCS86yQokmBw9iE5Em5XAAA +wLpk6edW402MJiWMLPFs4QAA +GjC1B9dpx0WVHy9Ch5p7XgAA +2a1E+GT1OUudOpzLmExIlwAA +uRUuJjzOSUi3zedG02xZOAAA +coB6KzFb7kGcscLs3tUsDQAA +UogwSIEaqEynqg28c7LArgAA +Y+iHdmVp90WAIcO2JV4EpQAA + + +h7KFG98rIEKQY4C1dOWmFQAA +qlZGCifQOEyQyqBzIH1x/AAA +8 +4YWPMPPS3Ee4eGBBulWf4wAA +x971qljypk2Mxs4EESNUlQAA +vDw4VTS7xE+ALnQIi+LghwAA +yLxma2tYy0WdKKGTatwHtgAA +bsnO07b3aUKAOHjtBiOKqAAA +C6FnR8gV8E+ge8Anc8s1MAAA +HEh6j+pSFU6d+mygI7VmLAAA +JNHLRwWRh0yxzb73OU3iHwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +ApVaIJ8p+UuKYOnmucWR0QAA +j1P+mulSiUilwp5iVIU6JQAA +VA6gJS7wx0OId1Ym7CBCtQAA +nCUUpsop0EKoN/1sGtyMTQAA +2 + +False +GTroIE/UlEq3H/lwjMvR8wAA +qlZGCifQOEyQyqBzIH1x/AAA +4 +EV6LFWRMUEGUkIR0PQdmYAAA +ekEO6fRpHUu1agfvfFotVAAA +usF7ceVB0k6ToFDOiEy/xwAA +vPK9/RbxDUCkokkIG+02xgAA + + +GTroIE/UlEq3H/lwjMvR8wAA +aUVRiLFY4USAN9h1PY1/vAAA +4 +BlqB20QFNUic8w2EL1Y3YwAA +OUPVHH84SkiSpock8Zk5AQAA +aT8M/BevNUaYUuk1vcfW2gAA +4dMobckqEEyYi5I9LP+iEQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +12 +ELSMvyV3sU6uKnuwUH2DqQAA +672pY5ZNT0q2iAq0JstQzwAA +deVrWv05d0WlEjXfEZMNVQAA +aiSv5GtVZUmblrWnG0OWKgAA +zWCVEaCukEmioWHWj9xrEgAA +KuM9SDuCYk2DDYv+RlulmQAA +NyhpCEV5yECbvRXHTs6u0gAA +oIHJfZV22ESrABytSt1ZrgAA +UG1DeHxyj0KnP/b44l6YxAAA +HpjhuM8doE+hLK5vtuaWhgAA +PkkR8Y5aiU6ROcPZSoYn8wAA +zHG6Wqua/EWN1zxQMMY6YwAA +2 + +False +hKV30qElWkWAVhrHK7PJbAAA +lOyDrRE6cEms6LglvRhNKwAA +12 +wrPs7btneU+4/4uy1t65gQAA +EZdota7+4E+fapccbeVGOAAA +WP0kV5ui6EahES4xbrNn0QAA +AaBwTHQlcU+2zxABLAx/LQAA +A6zPXf9sxEKi6tCnRoEadAAA +drE4CxLGJk+Twq3skbIK9gAA +E5uPMXrlZEaHoMIhPxHmyAAA +OOu0zNPSdE+kcM3wLNK+ZAAA +XxFpGIiCe0iv4t3ZhWQowQAA +Fdu3DVY0OESeFJp19+do8AAA +LTCccJGkJ0W4WniLabjCzgAA +bUhu9iXnZkuDMupVNbEDhgAA + + +hKV30qElWkWAVhrHK7PJbAAA +ucei5JvgaEarsuGuZmgj7QAA +12 +adwZOgzgVEu8vRZnzLvX5QAA +B/5bwhGST0GX3LqdwAUEugAA +uEiwFi+v60+4XAsWsh01WQAA +xz5TCgjZbUCh+NdRSPPN7AAA +wrgJdHvDbkKD5Wp31QHsdwAA +p7XygoAMg0SS2eRxSOqxRgAA +r72GlFJn0EWF4AToL1oODwAA +jHc+PLXi90SSE+2S7WoWEQAA +Ejobow3maE2Lo93EU8TC7AAA +8lsmxrk0/kKwevGvhhPoyAAA +jCVDZJOqM0GbioKAqDMW0QAA +t8O6PWkSp0ixlfnyup/pqAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +12 +23Rs3xncKUaW4e/mZABZEwAA +Sr2QccDmA02ejFaCDyOhJAAA +LKeEwos5jkO/UMCrxr8ogAAA +0JoiXfezFkWUyb8JzfAMpwAA +QZkd5XnTY0q0ZQlaKfzE2QAA +mGWNn+wvsEiUFMm1TusZWgAA +35Zs0mj42Ei+nB1xHc8YXgAA +51Tqwh3UZUednQQWKSqH+wAA +fsKF5kiA60eCCGJ8JU6A3QAA +MyZA2JbAuE6HVqdkJh2IAwAA ++pcSzpBV/UmByuIz4qc5RgAA +U0EMSNhd1EiZ9TM17PxQgQAA +2 + +False +Htop0thy70qsJ36MwSIctgAA +ucei5JvgaEarsuGuZmgj7QAA +12 +3civWJtnOE6KaXbtjF3EtQAA +1nnUX7BhoE+8FDqX5JCMrwAA +Uq82LGc7106GAoiBd22jmgAA +e/+0NbH7zkKaLmb5SvnIEQAA +Ju6+MEBmj0q4J0cj0QZctAAA +YfuEqIsSakGg/YLCBWZ7sQAA +hal3XeMiZEW8XFL35EabjwAA +6rfLsMyQ1UuZvB6qd8xLdgAA +JQkUmAVaUECK68Z+PBZMnwAA +wKeELpbiqU+mZNXTDFMPWwAA +RBXNNt0PpEiMu6NWZ8kV5QAA +bUMNhQpKSkCb2UNeXaU4YwAA + + +Htop0thy70qsJ36MwSIctgAA +ZFe9gOmpTEWMgVssyEcAWAAA +12 +eGuSskckwEWS8bm6OG1viQAA +5ESeulQ+k0qlFsdNLLD2RQAA +/Vq1dV1v7kqB8WKAWWww6wAA +JBSR6uvp+0iRpOdtIP1wSgAA +RU7t2ySv/0mZzzXHjmY/UQAA +mcUTkVwAlk6m7GmiHjc3PQAA +mZk+sW7EKUqxpp6cR3N3swAA +bKDy7/dqREigWFZcreSbMAAA ++U4v0NjmkEOQ/oXa8vkCMAAA +akDT4SbVhU+jjWvvA7IZ+QAA +wDKW+XfpY0WY3iwDwu6hqgAA +Q0tBGQROi0KYYrMQ4hH2VwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +tJ9OC2uyr0a5R/S6A80mSAAA +iJFVNyIKGk6JWN15tHYGwgAA +EIPWlpufJkC1CWgCFKD5/QAA +e06qqjV+LUuQA4gcALfFVQAA +2 + +False +wt/kYLKLC0CiPMmQly9eoAAA +ZFe9gOmpTEWMgVssyEcAWAAA +4 +6V1345E9/EaEk5Wlz0UXHwAA +tcGN1Q/aH0em5vS2B28e4gAA +X2KZGP4vPUSwtZJqfbQx3QAA +e4uR5nM3WkmgbCyyGuaFMQAA + + +wt/kYLKLC0CiPMmQly9eoAAA +bjrraLbGKUSY+GYzLNk5RAAA +4 +3IEe8h7VzEqVIels70srPgAA +np8+zFbOdECKjn6N92ocugAA +K9Qh7lJvXkmXFWNOQnoksQAA +u+0F6EQoZ0Wc7TVhOqm+/wAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +eK+s3h1+tUa5S89BeRTysgAA +irvhe9biS0yCRokY35duwAAA +g9rjg4Kwo0iCHTt97UKetgAA +1t01IKMBekWnQr/kalH65gAA +3Urn8h+7IkuUb+S9M1o5oAAA +TQI0/RGCN0WGXsffNwjglwAA +Y+SL7VCO00mc23mHNBjiTgAA +m7lkXpofcEC37XnKaTp/pgAA +2 + +False +t/ADlzXN00KW0NiGhwkclQAA +lEIXTXT9L0CS9sEhjP/8NQAA +8 +WHqHs0BXoEaBctJ2a4HLxAAA +KNbDzQoB1kSAad2TYKqCiwAA +xW1aYBmmzkeBvirin2DeXQAA +UD/VE5O5dk6xa7gcFk1rxwAA +nja2xO230kiyKAlW444ggwAA +nmh5COzJZEacRxUgBcmrkQAA +hom19XpmKUOHCPdo80KrMwAA +YVb2yD8+70SeWYu6bVUMAwAA + + +t/ADlzXN00KW0NiGhwkclQAA +jmiilGYeBU+1y4Yw2n8CKAAA +8 +5hSe19uy60OlYLhjkm04hgAA +xUaZ+tGXsU+l0EWjPeS+XAAA +nbQW6h7wEkCjQws3cgFJQQAA +jjE/H5LyQUmmExw2VuMZNQAA +RTvHi3wSPEasB+W2svEsXQAA +SDvVxVQeKkOIIUjgrI9zzQAA ++CragV7FN0a9e4TE2i3ZDAAA +t+6jPxsLx06wKn2VdwOreQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +zgcZD9Eix0mQqY5tiBc58gAA +xRQTPxvLJ02qeJABqaiA8AAA +f3lulNClOEyUnx9kwpFozwAA +FNHQaQIpRE2cZfU9uYuJvwAA +/7Y7fI4J/kKePnnikUYKJwAA +dtDq/VWElEmEZKgm5DgPhAAA +q8Enx2j1jE+MCMQdbFWIKwAA +chr7OfjQr0yE+w/9pOVsbgAA +2 + +False +5n9wkh0NQUu8BFWyytdErgAA +jmiilGYeBU+1y4Yw2n8CKAAA +8 +YxCw3+kozEq3lDv8Du7uFwAA +mVDVzjF0rUKRSRu2PDcyHgAA +o+7ZOrSV00amudfAvKjpBgAA +IKkaD0uqOU21qVYV1VRbmAAA +IPdLjDMwf02/2AYlxVN7aAAA +PMx0J2aKtkiMPkfmmGgj4wAA +iyUWReEolUOjip3Ir35pwQAA +jQJJwJoJqkaTRWWDxGHSMQAA + + +5n9wkh0NQUu8BFWyytdErgAA +RfRTk7cK0061dLioGm8l7wAA +8 +s4wRQk+rKkyT9imx0mP/BgAA +Px5k9k8MnUePr8KB87O/pAAA +fisS7r35gUaumur2UeJ4YQAA +6y+w+iKGb0qytgrOOekGBQAA +1lbbmWCUIEKULpxG32UtxwAA +8fcr/nszaEOxN63YzX6aTwAA +EXtWwuWUDkmlhxj7uZ2URQAA +wrTkTSpbc0GOAJTQ8YHFRQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +yhifciM4t0SxSdh9h3bXWQAA +2dvooJL4nkeQFxy1FwfqrQAA +OMAqedbcbke4Td9nlMbBjQAA +hj576w/e6kWlzOdCESfG1QAA +23jf1GrnXkKEQ0n7Bvh9RQAA +FuTxkCpgjEOA6jAKoor/xAAA +lqHQtCRUsUOJ+/WK6LIipwAA +HctHTpWvMUWsOxTOsnvPpgAA +2 + +False +1QbYYnq3ykqiPL0Gv6UkSwAA +RfRTk7cK0061dLioGm8l7wAA +8 +v8ArftSuoUmQvafMp/xnqAAA +zotXwQFK9EeqePAaW6CCYAAA +4t5gJmqppkS620x3ZwRLeQAA +pXzSsjnf8kGCv3karBwU0AAA +gYZs8WaqCkq9QUeWj1MG3AAA +2dTYHxZCI0SkCrOufj8YUwAA +WpFuOatGF0Off0YSOpez3QAA +qRsQhdBHlE+iJap8o0CDKQAA + + +1QbYYnq3ykqiPL0Gv6UkSwAA +G18zTBUAj0+SdrsOmksR0QAA +8 +ei7z7krny0eZbYgwicOTPgAA +hxWyFV27X0qSedmq3fk8BgAA +t/zTGwkt5U+hYpHWo17MxQAA +ia3WFVStdk2DNEsRW8vsHQAA +nPJxrC+2z0WURbKClcdRSQAA +gsSk3bfnf0Oj1Lc+zN7q7QAA +VSS5xV9YZESUeD+xggX/IwAA +KXO+UsTChUq38634eSKq0QAA + + + +dev-env-install +tacoxPrx8kCKprVgJHnvqgAA +8 +ba/wrXKu5EuHn69Sc1EByQAA +7qBr4kbrM0Ok4Wvvp8OiwgAA +SCw2lGX49UC8psUFSwkINgAA +1VXVAzZDa0O66YYoAelaTAAA +Hb/FVc/wi0OFVH1zZMj5cQAA +ZtYh/d6uxkafJUW9Ja1SSQAA +CxC7S8TWhE6XFsSP70kZNwAA +D3FjLXbkfEibzziVdZZHlQAA +2 +h4chvQo17kKpYAZk9SZs0wAA +RYlosGPoG0aBCofSJbKnegAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +1BeGHCaJM0aE4liGzGSKEQAA +/OtrZHS50UmxTtXyPCIv2wAA ++trgfX5CKUuKneW1O3iLpgAA +TYwOYk+BWEOU97RbRQIZmAAA +IgWDdbat8kGTkkhRze5NpQAA +QXsNU/tJi0m/sKust3LpuQAA +SA9ILRBpj0ydt9w5LayjFQAA +4TxVvTwV/kuHeJPy6bZ9/gAA +2 + +False +3RL8yaG7p0udrs0v9djevAAA +l2Lw5fePkE+9xXcdzSY+bwAA +8 +1rDBcyTy4UymdMr+VkeDiAAA +b6gRd2nYHk+sjJlQgIYocQAA +w1TTr1d8AEWt7Ztwo3qROQAA +ndVjm5cqoUWQtwTV/vvB6wAA +8LrVVTjyNkSZCblGqcDyaQAA +YI3j2MfpDEWX5XT3BOE1FQAA +cU3QetonzkSXsQIYo6qMkAAA +MhYRlrpa50u8ua6aMIOifwAA + + +3RL8yaG7p0udrs0v9djevAAA +kM7+GQ5RuEmygAJdSluSjQAA +8 +Inj0+DegnEanA9QLkf381QAA +xWmm9IkbFkS0FnbyVJkYbwAA +PMSgMdUmWkGCgBDrXH6wIwAA +zmaEd9UklE2gaxd+BD692QAA +1FMYGA9b70uUpVfHjt6I0AAA +rK+Mwd8nqUyMSVjVZFO2wAAA +cisi8Dg080+GPHuMIfsbOwAA +0K5CwSSjGUy+OuUg+ymSCgAA + + + +web home pages +tacoxPrx8kCKprVgJHnvqgAA +8 +bwHJGe0us0a2jeejcciWlwAA +5nWpCLryxU+W1L4vMMysUgAA +lTn3JPXrE0WtO6xxO/meIgAA +rOYnh5GiIEWvpsqjPR/+ugAA +MD2wdRztkUaHPYJptdpRnwAA +n2mhrPkys0uUk5zrbGxJkQAA +6ZdUhecHXUGvxYQET5eAgAAA +MFrT63/q+E68adfyjGu36QAA +2 +W6JXNHPDXE+JzttRtRevOgAA +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +EXZq7lQsH0C0TX8svYjG7wAA +/X4+5hi/vE+MGWkEeKtwagAA +SrPE9PVhrEedX12h8lHgNwAA +BqyT8Mz/cEuSgmqdPEgV2gAA +izoOonNJgkmVtNQ8BSL6GQAA +nyhO2XsEZk2/ocJBCQDifwAA +T81pj0fIzU+305smIfznlgAA +r10TXV8gUki+hy0ivghKHAAA +2 + +False +BYyEw6WhrkigDw+109evLAAA +ofqv4KD9ukybRvF//Fek/AAA +8 +yN7VqGtqpUyravSEdu2rzwAA +4PPrIg1ZCU+hHHlPqvmIQQAA +31MYfdVsxEGmEYsOfMLDxwAA +eXdc++2Blk+pga7UqlXLpgAA +cNAOlL7q8kG32zKwquMNggAA +1IdMwIKVAkWbiUwRJaeM5AAA +MpxlUePbikSqO/ZfqoRVmQAA +YRoVWDG7e0qP+KkrrYdy3gAA + + +BYyEw6WhrkigDw+109evLAAA +czS7yLr6oUygLwEMTWJMVgAA +8 +zxBR5c+keUiAk3nmi403EAAA +++lWUtNWQ0CIrLSUTFZiUwAA +1MZZ5p29yU+gvc5aFuydEAAA +i38XfgewW0G3A/juGZFDVAAA +puGoNqmn30ycZD+Zuwkh9wAA +uU8Cvy77BUS41tikV+UY0AAA +UAOOm/CB1UKm52VIVpzj3gAA +pXc4McsLgk+tdSmHggG41AAA + + + +first-ver-dev-env-chk +tacoxPrx8kCKprVgJHnvqgAA +8 +xPeRQZfwOEmy8TaWIhh+GQAA +ipReBhaLlUiP0veoOeCueQAA +lbKCy3nAjE+36pd+YsvbPwAA +fmef16CUgUCIJ7DECeS9+AAA +JUjJ0DqUdUiwoes9veWzIgAA +XHJ+KIa+LUOmnxrvG19UrwAA +DCvGHwWMiUaM2EPCXRglRgAA +mOeC3oy2t0mAmrzYLD6MnQAA +2 +2dUTUSyX8USUOoaapULmuQAA +XXlOcGC2n0emsre13Wy0GgAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +FsBmt7f9x0i8NZmH9PBT/wAA +Jh1tA+9DKECphGpBL9rOqgAA +W7nTlddAq0+DXFFC6ARAkgAA +X5tOLh3e2EyLWr25x8EsSwAA +D+m8VOzK2E2CWGNaS8twSQAA +SUKHlaWKY0SYz3rgaS47dAAA +5sTNoyMVSkqPzS3nOI12MgAA +dSudZc7AWE2oZ3u96/qRagAA +2 + +False +ULUs5j3aC0Gd9Vn1OUTU2wAA +czS7yLr6oUygLwEMTWJMVgAA +8 +hUEpCPvaTkyEzAeb9oyubQAA +Wsw+mey+pUy5AohEUrtKmgAA +CqwiyBc+KUaI2rLHACHtogAA +ToVEL21vsUSMeo/HuVDP/QAA +OccyHfK/lE+XmSKA1iOWXAAA +4Uy/BFQQTESijev9yxqizwAA +7+9jwj60MkK9nzDtBWjMXAAA +SNfnTvkGw0yx9WVIMBGwnAAA + + +ULUs5j3aC0Gd9Vn1OUTU2wAA +KmQBouG6c0yb16gPnUnBtQAA +8 +zGlIglH7XkS9P5nfxe/hwQAA +S8P8jRtMgk+qLuGTYKHjdgAA +HJ4VafDpE0+xqpdGQC/k3gAA +HYNSdg0kHU25MO3otgr04gAA +Ep2cIRxHWUKCVVlqQncFnQAA +pUyUGxm2xUqFGCHyn2Gq/QAA +2AyHN/WHxUupxN8PyCbe2wAA +XvhDnYaBOU2vkPhdhs3fdwAA + + + +launch-pkg-publish +tacoxPrx8kCKprVgJHnvqgAA +8 +f5vhNxPD30OIg0/MpcEnMgAA +7Ek7+e7sXUWCXM/B1iYyWAAA +fSbvcnMQhk2y6Dfu18fh/wAA +9eix14HVGk6iND2tYikfowAA +ZCA8lMYtvkK0TOXL+AgswwAA +Y4ZHWvzhn0a2kJK4AmvZOgAA +SOmtQrqMhEiNjRvbTX2yowAA +H4Ib+2CtoEasviUjTG65zwAA +2 +xGchvlfNhUO0g6gfoLFLRgAA +L7xnZ29mQEadCI+TRP2QQAAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +L5dPNcLFS0WwJgs/xGJvzAAA +ziTnWmTFUkSA92yYD8zFBQAA +CFuaOqGBW0+iB8JeadyfjAAA ++p5iGUJE2kmhWLKtb2bNxAAA +sRQtOebtnUizFq2DltgMmwAA +nhY/0P2Lg0K+vRyxq9aMUAAA +pa3Dr5INn02ZQjBZOiRZbgAA +NXzZNZsd+Uqg5OQKfE4tKwAA +2 + +False +4wmxJ9R9R0eU6Jn8Ho3xFwAA +bjrraLbGKUSY+GYzLNk5RAAA +8 +lBU4DnE4a0CWPnDGuqw6SAAA +q3huMYIN9Ee9A4IsNHTZPQAA +OZ8lvoPq3Emra+EuBtjTnAAA +vVczgk+j0UCy0tIcFcmZEQAA ++VPdWUPcA0CZNYI4hBxBuQAA +sGZ0+eQn7kunhq3AfuzjSAAA +8QjRv12hcki/c/oIEBtdUwAA +x6LDR4tDmU2yyTXRK5ZmbwAA + + +4wmxJ9R9R0eU6Jn8Ho3xFwAA +lEIXTXT9L0CS9sEhjP/8NQAA +8 +4WrWHhCGgECeXGxs+FwiHgAA +36jq2bh15kWXx5iHEKVw0AAA +obw/YWnbxkqOMltzJdIPmAAA +/YXeInxHx0yLIZn7mPd4nAAA +r8e9MVk/UU6E+J9ELHzEegAA +Xv4NnrN6fkaX8FAaquMNJgAA +dmaBqPLIN0WVrnI+lnq7pAAA +keDNi+t3yUGU13m+iiVcEwAA + + + +multi-lang +tacoxPrx8kCKprVgJHnvqgAA +12 +8o8JeUyoWka2YCr2oj8TIgAA +vd8AYCy53UmF9R658q6+fgAA +pQRW3JLjPUe0Ey3Q6CAz9gAA +6wPjZMLJBUy5GV/gtO3A3QAA +fafd82Xh5Uu1mt+678C5PwAA +wScVwume1UuXvylUQyJcLgAA +gfJmJuROV02VAUs7F3zghAAA +QyB557azoU+U7UiRx0zfUgAA +4gxKHPiS4kKv1jznPUiVLAAA +hA6lwyp95U6cZrsxEmrZpwAA +io3NG7NSjEKdaeuRWeTIQwAA +lyn4DVJ/R02D+cQt2ywNfgAA +2 +DiYoPg9r+0KN6xRjGDN+kwAA +VvsNJNyOO0e86/eHwYM58QAA + + +tacoxPrx8kCKprVgJHnvqgAA +12 +YcX/A/cPYU+1nUlhrpozswAA +onSs1LIldEm6lhE/SJbE6wAA +VFPMQMEq6kiKT9xvnAAUJAAA +GTY1wJFPOEG3H9kMQJExAwAA +cDetESGq00+Cf51WlhE/YgAA +s77/VwzqN0qSZAziYoUuvwAA +mMQH5HD0kE+8WzVquBV9gQAA +Zz45RjGn8E+ziNpLrsoKPwAA +EAd+u7pyI0eGvl3ncpA2sgAA +aCu34FOIg0y3mJV2hdaKYgAA +486AIXth90OWDfmbx7qWUwAA +AHTKQxrufE2r8X84kxQU4AAA +2 + +False ++nJDFiS7VECOJ4vWaYvszgAA +aUVRiLFY4USAN9h1PY1/vAAA +12 +ukaguX4DaUarG+u9yukRzwAA +dMwmFyk9GEyuMSgc/wy3gQAA +jQSlBqAFA0mDyIN5h3VZDwAA +57iR0L7gvEGC/gvlMKcTlgAA +ib/kJAcaSEmrXYAU6YG6BwAA +NVJTBVtArEG0+hKVQdM9sQAA +6V8WC2Ti5kS65zJ4DtOLOQAA +I3Mv2tU6IUSI1nT5FkafpAAA +FQHq1WeXGkyrJ+2lLAFwBAAA +D8nOU0F0W0G+enyYrZ75NgAA +KWpjK3SoXUOLFXp0RwZ1aAAA +6ZUPKx85/0O8tj+M5tmVUAAA + + ++nJDFiS7VECOJ4vWaYvszgAA +lOyDrRE6cEms6LglvRhNKwAA +12 +CK82bAuIC0CascsugUXsHQAA +cjYuFaYi2Uqvj5EiM+mSYQAA +sb0ocggYr0ivDFAeSJhaGgAA +hnBwISb0BkqMZsB72qDFPgAA +1bvlbUX+q0mTstSuUQyuNQAA +Cznkc/hfLUSKFH+4bblcwwAA +xUtM4vpgtEaga8dQhn5yWQAA +HFPM3fh+wUqlJKjqheRwfgAA +vrHwb3STNkyIwnAEBS0UEgAA +BEdreG/R/Eq2ClHGKuq4BgAA +9EzDFBqF9EyOFIwV88xbTgAA +TRgEEzBNlUWLqHZ3s07ZawAA + + + +get-task +tacoxPrx8kCKprVgJHnvqgAA +8 +dbDAxqIYDEef6cq3x4sQfAAA +Ms4aM+Xhc0+Cse/Ezh5YyAAA +GvA9RoHfF0Wj3JDZ3dBWWAAA +RRU6mr4m2UeuPuvwlZsDxAAA +Jhw5BLAD7EWhHUYbBGN+BgAA +fO+aFJgwG0W3pnL/WoIjrgAA +tHsQCgi0XUOtWhWls5f/WwAA +Ag0THsfpc0uvxcnVdeHQGAAA +4 +XdMG4B9cfkWIcWgvsVmQUgAA +qb8LVJbh5kG4uilxed700QAA +cCWrTkROLUy3C0VntDGRjwAA +yG+8cHFE1EeshJkd1dKuewAA + + +create-test-unit +tacoxPrx8kCKprVgJHnvqgAA +8 +1soCBV2ToUK8JVFLvn+e2wAA +TUY5qOG1Wk2L4dK2Sz1bHgAA +r4JRHbMgrk2XD1LtUyWhlAAA +96xtOKfc8k+YpIcLMpzWWQAA +iZbm2TAx1keNx/mPHzSEmgAA +74AFtM0Y3Eu7Qr3msZk1/AAA +aJIYE3lYAESHESjaTsbdbgAA +jGPh5jW7FU+Yzr6Z5vTWegAA +3 +pSiPgqpAb0+UkTDVbbXBnQAA +DFlh0do87UmmJQigSQRsiAAA +2t6hyyogW027sVhhVrjclQAA + + +bugfix-coding +tacoxPrx8kCKprVgJHnvqgAA +8 +N1P5SuGh4EWdFcErHd0tKAAA +EQPWWuSqVUeGLxNVsXR4owAA +b2rJUuCenEO3F7brCai33AAA +10MTb/zOsE+Y0pitUa1KUAAA +vmizIwBnQ0SKIRlT6FSqSwAA +OzxXAzuxCECfRoLz7F4qJwAA +Xzoq618yJ0C6kSd8/Y8r3wAA +fwgX/TPnZ0yxuSlUG9nWUQAA +2 +XyL91tS87U+MpUc/Z25u1gAA +lp0ewCTLb06H/3WjWYmLOQAA + + +initial-dev-task-launch +tacoxPrx8kCKprVgJHnvqgAA +8 +uI0Vw5nV8k2MpwNxuYq/IAAA +XQrlR2J2FkemJnNVF09juwAA +Nw70TZWqwEKEe5uHIFQpVwAA +1zBbL3jigU6wLBuTCxn1YQAA +GiWAdL1cP0Kc0Io94onSPwAA +VS3jQr7gOU+zgHg7wDPtoAAA +22X5nzsKEkiDyVo9BWGYdwAA +h/BUK4mqwUuVzksrTOFPkQAA +1 +v/43TdYAaEacDIIH0o4rFQAA + + +bugfix-dev-task-launch +tacoxPrx8kCKprVgJHnvqgAA +8 +IjimQpqMbkC8IpOXi07GSgAA +/cZDuD4jR0O34YcTRfRsWQAA +jjJsTCw84ke5j286f1BfkQAA +tY9/iLXqT0W/syfdAJLqmgAA +op7TXMmXt0mHqk1AIwA74gAA +m/74iar3XU6wz8WDBqi6jgAA +6WZvTQptJk6RR60FUydKAAAA +tsEvZ7FEwkicvO6yHyOUyQAA +1 +Jrscu7bPaEOGr8p3WU+PYQAA + + +new-feature-dev-task-launch +tacoxPrx8kCKprVgJHnvqgAA +8 +EJGh4IwbYkCWyCQWvIs0cgAA +v0iUxioMTEWRqob+OLFFpgAA +jJEQt4nzfkCSg5YlGt9LbAAA +CfthfYnYbECGOYkPnqR4LQAA +njT7QTVbQUy2rZI/zfQRFAAA +HHHVgpbP/0CfPe9HPI4J7wAA +abIxqllHVUiT80mMGVmbqQAA +t0wJ15S87keltsWkG4rmUAAA +1 +VHwOYW9vAkeUFUXT+cxoEgAA + + +task-schedule +tacoxPrx8kCKprVgJHnvqgAA +8 +5srcgF0EYUyRM6tylL0wVgAA +Xu54VWu8wkeijgDGJaqNuQAA +v4ZnhLBpxEa7GZU1RBMP5gAA +dOoZ/1BsCE+WFWqlspiDbQAA +ql+YUpy6cUi716voXkuJ3QAA +bukAGo+y/EiR1yyPNl4BxQAA +bbhk5BpzpEKuV36PBZ6vUAAA +UGxNmFYZokyPwPe9NlqcfgAA +7 +jhEbrPQWVkCDWTgpxUyF+gAA +IMPpHUaiT0CFZLcH+44uQwAA +X82I741yL0ybUyEPhBbTZQAA +4Ujmk5gLj0WyU3SYagr0mAAA +42F3TeDc+kOeEbEW2sSOqwAA +v4O00Fgt/UO7ZDLsyBtHIQAA +5z6XidYYrkexqaAHLrMuGQAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +8wc4LntVV06YQUHrphlYQAAA +O1OSy5OLu06z1200FfZnYwAA +lLMFX1l0RUSShxqU+stRmgAA +3whQVDqlAUSLBxfNcgLdhwAA +2 + +False +X3JNoNb8Jky2P0O9whu+8QAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +ovLTerBOqEqBIrrcolH9vwAA +HZt/1fUltkGvbGRtpKewvwAA +GS9fAYzR+06hzTzQldE0/gAA +NVIdYUxIPUWDxVZvtmAI9gAA + + +X3JNoNb8Jky2P0O9whu+8QAA +GB5fgt+BCEuZu+MykpdKRQAA +4 +pMhuaX/f+E68J9HnsTSlWwAA +TlQwGjNbNUq8e1XBffomXQAA +SlhG73PEnEqrHp5VLn7u9wAA +6UiUqMycfUy88EkFhdatgwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +wNeaBDZGOUyVfgkes4au3wAA +QxOrhy5efE6PCLoZK3x1AgAA +8b36DyuxtEK0ySxca1+yxAAA +JFejifk9DUa/ffgUp++1CgAA +2 + +False +TzMLJBMMOEKimlwgjlIwnQAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +Yh8oRVNnWEytikAyxs+GDgAA +ZdYQbYPwPkKT/rwkyQnf3AAA +9Ojh1NTP806FSJxTnAkzZQAA +kjldeczyGE+fnGe+xXziWwAA + + +TzMLJBMMOEKimlwgjlIwnQAA +CLf6+wSJ/U+4iSwM7QoY3wAA +4 +R04Mx4jWOEeuU+tG5PHs5wAA +r64gKB2UykW8ivHMO/g8CgAA +h7zm93+eC0ql3a1RDDiitwAA +NRRzXbgvKECCdxUUCPmd9AAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +2NuRWuYK50WnxBuUP4gBxAAA +0SMIyCdQFU+3q6A3OBoSlAAA +6J17FAECSkSCuYB1u/ogRwAA +uNegZGxraUaPNSPi7Pio8AAA +CktursNXL0eCMo1MGk5IrwAA +9pZ2B6DaSE+8T+/g1s90rAAA +teG8mx/ulECMRFVJuc682AAA +5qAAd/Kj3kG84oS/FyTJjgAA +2 + +False +DCobZcXopUed3uhu7f3tCwAA +CBkE9JDrJU21ybYWNP2cCgAA +8 +P8qHBXylckuDx/SkGs6/kgAA +z+pH801Q3EyVUqojN5NvcwAA +a23JEbE+xESafl0SbgJQUgAA +KKvDhWnzmkqPKuY0HjK8FgAA +3jCvVmLkmUOmqPd9htgolAAA +NadBPwcmBkCzQdPVoQ9nvgAA +zcW4R+DVKEu8iUYSDcj5lAAA +30s76xTpRUuGuQxZ0XJZmgAA + + +DCobZcXopUed3uhu7f3tCwAA +gJ7o4uiAMEqSPUL3dadz2wAA +8 +Y6LLjk5cA0OsM7eoYAvrAwAA +8ygaym1cVEKz+N3yjz+W1gAA +Q5ZwPenNC0WasjAzROTzGgAA +HSxQFf1qK0WYE5koAI47NAAA +Fbb8iSttAkCLoXNQQYEh3gAA +0sFv0U4b70SFffCDO7hjwAAA +CJheABw8b0irpkh65QeXlgAA +TR8oUjdAi0mgDQVpsU2x6QAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +dX9uvZH5mkKAFvskfoSY4QAA +rx3wB640uEyxN5/DQtbuawAA +64LyWbrmdEWFwQqGeMIhyQAA +aA6E1w9IoEGWoT0Q2XPx7wAA +uzG8uEdgi0i3H3UTNKhIIwAA +jRCasBdvq0Kn6T98PqDklQAA +pIEeisDPxUKZSTx+78xgJwAA +jK3EHCMME0y3UxN5gnLtsAAA +2 + +False +BUd2VmDLEkKHuqopStVszQAA +CBkE9JDrJU21ybYWNP2cCgAA +8 +sKhaqPLUPkmQM5K/X26iuAAA +loxl+4peu0msXA77GnU8CQAA +b0vedHq3j0u0coqCStqegQAA +F6tJ0pAeRUyFxtSLc1fimAAA +ZkbBwb4oMkiIM06X8VOTnQAA +Sj7lExzOPE+bbzg2lGqdsgAA +NhOiP47RcUW4PnbbHYKoigAA +uapIl/BVCEq5sExn6a+eVQAA + + +BUd2VmDLEkKHuqopStVszQAA +CEEcWQKt0kyX8zYOPZHrrwAA +8 +GVKWXfODm0iz3AP+Sgk4jwAA +ISWs/UeT4UiqncGs3Uaa7wAA +dQaQkx0Vukqci2ZJPGzLWwAA +VFDUhUFtwEKttTOYZEL1MAAA +wcNfkmFEBE2keKjrKnmYYQAA +b0vtc6nmIUyxCy552ywXcAAA +Xbpb0Knly06f32NWncRL3AAA +1elATEBhCESSVyalvtl1vgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +sNLeG4PJm0+8KCjqxqOCWwAA +HVTDYD/3okuTybpb3B1gOwAA +54Cx5D+dfEKjT3d0hBdjIQAA +EStqlexzsEetdK3v+w2VawAA ++UefbA7FIUSK/MESxoYt2gAA +JGrwX2xTnUyO7LiORoNaNgAA +35v5O50q9kCcUVg18mQ6xQAA +mKwniIrgcUmCAC3v/3o52QAA +2 + +False +fk3nxDxX5USF8gff9cP5MwAA +CEEcWQKt0kyX8zYOPZHrrwAA +8 +asJnsfN0GUWiyMuFCahDXgAA +BOEUQBrK30mjhvdpQHwJpQAA +NLl/T2j9okSgftxWUdGV2AAA +aokp2W90v0qswNfwmPOJfQAA +tZjYlGv610WzFoaaA/QP7wAA +h1BJSVelXEKRHU32rCPsLQAA +X1gftWAdoEWj2o7ki1YRiwAA +LX4tOha660eSLUYwNx89gwAA + + +fk3nxDxX5USF8gff9cP5MwAA +wftqTlAvI0+cR9j69saRNQAA +8 +J7YaaNWyYEiRwsgF2wYQgwAA +cXbKG9fCoEiC8fKZ7PMScAAA +O5E0E1GJSU+UB48yIZiM1wAA +C5cNYIx0qU6kT8FdTJ0W7wAA +wszj3UGclUqXbjurkvilmgAA +Vnl1L4a9kEyci6a5Ua9U5wAA +WWxGikyDf0uEiIKyAjjmrAAA +5xtTazOfxUiBxjKpHLQMBwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +xynMxno5NUOHq++yCyr7XgAA +traa/ZvvpUegPBbgP4JR/gAA ++c016pTsWE2c8mhuuBmHdgAA +YFKXLFn4AkyJ8o/xBGCVBQAA +moYBniAHpk6rh1bA5+/lQQAA +TDB/PdyqhEe8XIoWctLlgQAA +dWzUUkOsU0STJdJfx1PjmwAA +iLT/mI10dkS2HeRKDLBTHAAA +2 + +False +dmgxVDpivEyRrIdXr3QLWwAA +KMKq644vfEq7voEHMFkLwgAA +8 +IE//HfmdUUaWXwbESvusOwAA +2GC8D1k2jkOWw0rykq0X+QAA +X1gVSFkWvkaH9wNUwqMsfgAA ++8M/uOF/Rkq++LijZdtMWAAA +h5vDRfV3FkC6NcPAUAlyrAAA +uIfRe5Pd7UKkRh6QctPq3wAA +X0RkNE1ZnUKAO3d8D8AMUQAA +6CWjrrKPsUquBacqw/SpfwAA + + +dmgxVDpivEyRrIdXr3QLWwAA +F4Ld7UGpQkiQCCnqXOJ06wAA +8 +lucB0vsdJkKPQUhW3zytXgAA +ymkzWLJAsUO0vpFi3JPk2wAA +wEFzJjk5NUurs7wK5l30kwAA +u4G0ctI3+0CgmaFxijqQCAAA +DwXI8VhQEkeAo5kPczPQOgAA +7XV18QteVUypZ1/M3bj4BgAA +IQV3FSz2bkKPaLe6M4hbaAAA +z/7Vs40vGEikdThHS7o7EAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +Avubf/Jv+ESjoY+fCSXr/wAA +bTAk9AIUs0WzbfD8kX5PRQAA +VqzGpLJi2E+VpZlzs+NuhQAA +Jp275MIge0q5w9sDDfeBpwAA +fJK/525PLE2lfLtPYj2/tQAA +heltoA57v0y0UBSS76GVLwAA +wDINGPAtTU+mREFCG2HXMgAA +/2sFm47zekuUQKky+ZbsrQAA +2 + +False +gFnk16iOFki43F+XSkxbHAAA +PjS4k33/kkePfB8R0Qh14AAA +8 +BfBksAic0Uu60LI/dyrMJAAA +/dKZaYx8cEeZYrYyiRYU5wAA +X9WPIh7u8E+7ZxiW5atmCAAA +OtNIFqV3gEGRcxG9TEDMNwAA +m/G1rfEFUka8DI4G6JCPuQAA +siXaJqB8aEC8e682KSWEzgAA +f12D9jarKE+34F7lz+zD/AAA +6yeS+EgSSU2P8TiPn7CjCwAA + + +gFnk16iOFki43F+XSkxbHAAA +F4Ld7UGpQkiQCCnqXOJ06wAA +8 +t/hXvvCqEkW1Bqw5sGsFLQAA +uRjP/dEd7US4Uku0S8rxbgAA +rR9yh3vj5EOFrJDYVMnPxQAA +WgEbSvB4gU6GVbqjwLk2HgAA +FG3ZYrOjY0C1aQtMLF02AQAA +gLSWzLWXFkWalhzVjrj6vQAA +buV8LyZG0kenVCk3Ss6tAgAA +ByNFmxrOTEuDA8pyePfYvgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +jJ76FI5b90a+e5mKujxmLgAA +osHJ9uFuaku6ue23AkENGAAA +MoIUq7GFK0Wg88wQUwW3vgAA +y+AM/qQrxUyKhjffTSG7kAAA +yA2vGoYnikmERwBtpVTRVgAA +mzcULh1BdkyQHaHHhtKX2wAA +qqVkp6v+V0COV7oChtshfQAA +ly+ao15eJkyZarn6JnfnEAAA +2 + +False +O9Ia0CXMxkC9ATowborgyQAA +GbTWbRuRqkK91Ggxct5sowAA +8 +CooaoBIgEUi4hdtL77yrVAAA +oHxPaRG/nUqKic/NsC9StwAA +yxFGMboUqUqI16EC56JPRAAA +wm315JfaDkOBUzNDG7sWOAAA +RFEdWcX/O0WHq3dWGo40wwAA +BTF6C7SDGkS92XVv+3XDrAAA +HKWOZAeFAUW60I4WQg9+dQAA +U10MYlwVoEq28qxd7mRoxwAA + + +O9Ia0CXMxkC9ATowborgyQAA +F4Ld7UGpQkiQCCnqXOJ06wAA +8 +quVg6+WfjEa2I1ezl5O6SAAA +uedrORCY30SiJBNI193LogAA +XA9BJ+jjN0S+ADAx70K9YwAA +BSonIpOcYkK+u52kKButfwAA +bZKVCHzu7U+57nBpXZ94iQAA +GVqjthkLA0yUktCgVruzTQAA +7y5Lx0OmF0WKKxyplJK1IgAA +JTQr3LKZPEiut1LVNEwSewAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +Y8EYWDXebEqqmXmnIro7RgAA +RV4aYgM5kE6PwLGX5PlbCQAA +RZSzrPCCtUWog9NfLYFhxgAA +olT7nuE/AEiDMgcQR32i6gAA +KZYku9JeQEerMKwWAyf3oQAA +2fskPMEcpk2c7tOpftVGDwAA +z6MCXmYZ10iA7II3jvfi7AAA +n7FqfyfwfkK+R7j4Q7qNvgAA +2 + +False +hIsaQ5I0Y0qxkPCenhTfsgAA +F4Ld7UGpQkiQCCnqXOJ06wAA +8 +4MGKOKLqFUG3zS/WHyOr7AAA +zcHVUWij3U2f4OSHRSHNtgAA +rfRZgjlfbU2Q9GPaf7T6MgAA +9WYXmu4veEmK8H5Rteq1EQAA +GaqFsq3J5EG3TCrK7yydVwAA +t2T2pRqzj0eL8dyQrMC8kgAA +bZXAYseKtEyxMBnbT19F8AAA +4a3xdynsvUCyiym3wYiR5gAA + + +hIsaQ5I0Y0qxkPCenhTfsgAA +oKO/T5e9P0yxfxSC9DK89wAA +8 +G6P9O56zp0OagK8tAzvQGwAA +lNsNxZsx5kuZgI2//ydbkQAA +CoGIdA9u+0qWKrxSjEdDnQAA +Wt6GBkg7c0arLOwwEDNm4QAA +hzCbuZITkkuMjrnDdx6JmgAA +yX8zC7ZnV0Smw0zKAleFcQAA +fJ0aRYx6EUChwt92IBxTCAAA +TVyBt72FxEyzq+HS3Zse+AAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +ZQWq1tkei0aqV2y9CTuhYQAA +mhLUwyJky0+kaf5QJQeB/gAA +jQOA2QHLnEq2uF9+WuOTZAAA +w+emc4F3tEG4UaIhzt1sBgAA +2 + +False ++xZvDwUvFkOoytPg7jDZ2wAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +H66oi9Rqu0qNdT8O/7+AlQAA +ernUbNyH10eNZO90vpFTGQAA +2RlRZpNAPkeTSgkFCr1NqQAA +vdzc3HglWEiuEuuhnu0fnAAA + + ++xZvDwUvFkOoytPg7jDZ2wAA +l2Lw5fePkE+9xXcdzSY+bwAA +4 +Kl1lkIkKfkuqXTA7dAIA1wAA +2UNUcsKEeEeKWTVt5g06LgAA +5PxKeTHXdkO2Qw0LR+wXQwAA +h8UxVi/8lEKAmsFho3b7rQAA + + + + +Design Model +UMLStandard +designModel +IhiugfF1eE6vc8zKnVf8gAAA +11 + +analysis-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +TKJqvI0CWUmyoh/jntYGBwAA +58 + +clMaroon +$00B9FFFF +78 +210 +113 +45 +h9lhv0QFq0aFwcWza3gsDAAA + + +1 +list-external + + +False + + +False + + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + + +clMaroon +$00B9FFFF +206 +230 +231 +45 +XmSQJXVfo0qkbNCidOBOzwAA + + +1 +operation & action analysis + + +False + + +False + + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + + +clMaroon +$00B9FFFF +218 +170 +144 +45 +kETY7OJYc0qg/QkJQX2LXQAA + + +1 +data-io-analysis + + +False + + +False + + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + + +clMaroon +134 +278 +112 +30 +operation-actor-list + + + +clMaroon +94 +138 +87 +30 +physical-io-list + + + +clMaroon +$00B9FFFF +136,167;135,210 +1BA+Xn0RUUm64eTCTOCRugAA +h1gtwyOEbUeBccNY4PTnrQAA + + +clMaroon +$00B9FFFF +176,278;154,254 +1BA+Xn0RUUm64eTCTOCRugAA +jHXkp+eLg0+gvycDjEzupAAA + + +clMaroon +$00B9FFFF +235,278;248,274 +fdnXBAbHkUmPlMqC0iAwCAAA +jHXkp+eLg0+gvycDjEzupAAA + + +clMaroon +$00B9FFFF +180,163;218,173 +lD0x8R9zUU+Gr16SYaMDDAAA +h1gtwyOEbUeBccNY4PTnrQAA + + +clMaroon +$00B9FFFF +190,218;218,211 +NSCnR/cZlUa3fXcKMhA8sQAA +lD0x8R9zUU+Gr16SYaMDDAAA +1BA+Xn0RUUm64eTCTOCRugAA + +False +1.5707963267949 +15 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +1.5707963267949 +30 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +-1.5707963267949 +15 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +-0.523598775598299 +30 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +0.523598775598299 +30 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +0.523598775598299 +25 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +-0.523598775598299 +25 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +-0.785398163397448 +40 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +0.785398163397448 +40 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +-940 +-1096 +50 +8 +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +-940 +-1096 +50 +8 +HdgD2FmAh06xyFDupk4vagAA + + + +clMaroon +$00B9FFFF +190,238;206,240 +ubIfnYMMgEuGrguT+jcONAAA +fdnXBAbHkUmPlMqC0iAwCAAA +1BA+Xn0RUUm64eTCTOCRugAA + +False +1.5707963267949 +15 +ubIfnYMMgEuGrguT+jcONAAA + + +False +1.5707963267949 +30 +ubIfnYMMgEuGrguT+jcONAAA + + +False +-1.5707963267949 +15 +ubIfnYMMgEuGrguT+jcONAAA + + +False +-0.523598775598299 +30 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +0.523598775598299 +30 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +0.523598775598299 +25 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +-0.523598775598299 +25 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +-0.785398163397448 +40 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +0.785398163397448 +40 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +-940 +-1096 +50 +8 +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +-940 +-1096 +50 +8 +pxqjN0GODE69EvLg0dAl+AAA + + + +clMaroon +$00FFFF80 +222 +86 +108 +30 +data-flow-diagram + + + +clMaroon +$00FFFF80 +382 +306 +154 +38 +action-flow-diagram +invoking-procedure-diagram + + + +clMaroon +$00B9FFFF +277,115;286,170 +lD0x8R9zUU+Gr16SYaMDDAAA +IVt2tjJDzEuz/vWJVDnpEQAA + + +clMaroon +$00B9FFFF +424,306;363,274 +fdnXBAbHkUmPlMqC0iAwCAAA +o8gstZMu+EaxvNdITt/2+AAA + + +clMaroon +$00FFFF80 +354 +478 +134 +30 +function-feature-list-file + + + +clMaroon +$00B9FFFF +242 +306 +121 +38 +top-usecase-diagram +usecase-diagram + + + +clMaroon +$00B9FFFF +307,306;315,274 +fdnXBAbHkUmPlMqC0iAwCAAA +tZ9aM6anSEuS/LhHJ8Er8AAA + + +clMaroon +$00B9FFFF +206 +358 +121 +45 +TMPdkgNID0u772le0sCmLgAA + + +1 +new-ideas + + +False + + +False + + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + + +clMaroon +$00B9FFFF +207 +466 +127 +45 +Kh+ykp9GgU6PQXUx+CGLxgAA + + +1 +new-demonds + + +False + + +False + + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + + +clMaroon +$00B9FFFF +342 +414 +151 +45 +06qF2g1ff02RsBbBfLLo1gAA + + +1 +demond-analysis + + +False + + +False + + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + + +clMaroon +$00B9FFFF +210 +422 +123 +30 +note record in tagdoc + + + +clMaroon +$00B9FFFF +270,422;268,402 +umqbMP1usEeGKjfgQw96+wAA +yolbfAmFSUK5fZ2yTbFdYgAA + + +clMaroon +$00B9FFFF +270,466;270,451 +yolbfAmFSUK5fZ2yTbFdYgAA +QuIP3dNrrki2gCnUv8ZdHQAA + + +clMaroon +$00B9FFFF +342,436;332,436 +yolbfAmFSUK5fZ2yTbFdYgAA +knkDUQ8LvE+zzvGR3o0h1wAA + + +clMaroon +$00B9FFFF +326,402;358,414 +ZE6XGr3H4E+M1Lu1nRZ9BQAA +knkDUQ8LvE+zzvGR3o0h1wAA +umqbMP1usEeGKjfgQw96+wAA + +False +1.5707963267949 +15 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +1.5707963267949 +30 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-1.5707963267949 +15 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-0.523598775598299 +30 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.523598775598299 +30 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +0.523598775598299 +25 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +-0.523598775598299 +25 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-0.785398163397448 +40 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.785398163397448 +40 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-1112 +-812 +50 +8 +irMBt7uWtEaxRopZEBcfwgAA + + +False +-1112 +-812 +50 +8 +eu/8Siwir02KNGkRDOEa9gAA + + + +clMaroon +$00B9FFFF +333,466;355,458 +li4LwavBrE+pggONaW7QkwAA +knkDUQ8LvE+zzvGR3o0h1wAA +QuIP3dNrrki2gCnUv8ZdHQAA + +False +1.5707963267949 +15 +li4LwavBrE+pggONaW7QkwAA + + +False +1.5707963267949 +30 +li4LwavBrE+pggONaW7QkwAA + + +False +-1.5707963267949 +15 +li4LwavBrE+pggONaW7QkwAA + + +False +-0.523598775598299 +30 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.523598775598299 +30 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +0.523598775598299 +25 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-0.523598775598299 +25 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-0.785398163397448 +40 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.785398163397448 +40 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-1112 +-812 +50 +8 +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-1112 +-812 +50 +8 +gehfWFMIjEKeVzAcdHneqgAA + + + +clMaroon +$00B9FFFF +419,478;418,458 +knkDUQ8LvE+zzvGR3o0h1wAA +jBBE+hQ6uESc/I5aEwkGOAAA + + +clMaroon +$00B9FFFF +390 +126 +165 +45 +c4KyOid86k6Bzi+unTPcfAAA + + +1 +generate data-dict + + +False + + +False + + + +False +c4KyOid86k6Bzi+unTPcfAAA + + +False +c4KyOid86k6Bzi+unTPcfAAA + + +False +c4KyOid86k6Bzi+unTPcfAAA + + + +clMaroon +$00B9FFFF +410 +66 +63 +30 +data-dict + + + +clMaroon +$00B9FFFF +462,126;448,95 ++pV2gAzD5k290JEx4IzJcAAA +dun4oB1o7E2GPmOE4gcj2AAA + + +clMaroon +$00B9FFFF +361,175;390,168 +dxugzP0ZBEOdRYlU9N5SDAAA +dun4oB1o7E2GPmOE4gcj2AAA +lD0x8R9zUU+Gr16SYaMDDAAA + +False +1.5707963267949 +15 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +1.5707963267949 +30 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +-1.5707963267949 +15 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +-0.523598775598299 +30 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +0.523598775598299 +30 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +0.523598775598299 +25 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +-0.523598775598299 +25 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +-0.785398163397448 +40 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +0.785398163397448 +40 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +-940 +-1096 +50 +8 +/vsJW8WzsU++6Lul86APuQAA + + +False +-940 +-1096 +50 +8 +z475GIA9kECnM3EOwAHh6QAA + + + +clMaroon +$00B9FFFF +522 +66 +178 +45 +8E86OOxmt0eTCKMQNrubWAAA + + +1 +data-entity-analysis + + +False + + +False + + + +False +8E86OOxmt0eTCKMQNrubWAAA + + +False +8E86OOxmt0eTCKMQNrubWAAA + + +False +8E86OOxmt0eTCKMQNrubWAAA + + + +clMaroon +$00B9FFFF +523,126;560,110 +TfaTWdzXx0eF98RMZF5U/AAA +VJbVUyCxs0u+Lgy9ekB9lQAA +dun4oB1o7E2GPmOE4gcj2AAA + +False +1.5707963267949 +15 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +1.5707963267949 +30 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +-1.5707963267949 +15 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +-0.523598775598299 +30 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +0.523598775598299 +30 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +0.523598775598299 +25 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +-0.523598775598299 +25 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +-0.785398163397448 +40 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +0.785398163397448 +40 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +-940 +-1096 +50 +8 +FR6YZrNJHkeksGzXICrvngAA + + +False +-940 +-1096 +50 +8 +ApKyMGFOCkStssh0gwBpKAAA + + + +clMaroon +$00B9FFFF +522,84;472,82 ++pV2gAzD5k290JEx4IzJcAAA +VJbVUyCxs0u+Lgy9ekB9lQAA + + +clMaroon +$00B9FFFF +478 +26 +75 +30 +ER-diagram + + + +clMaroon +$00B9FFFF +545,55;567,66 +VJbVUyCxs0u+Lgy9ekB9lQAA +WWY3RCgVKEyMXKhU6sBafwAA + + +clMaroon +$00B9FFFF +446 +178 +145 +45 +tnTkvoZxVkmVjIgd8K6VcwAA + + +1 +module-analysis + + +False + + +False + + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + + +clMaroon +$00B9FFFF +361,195;446,198 +BNlaobUxlkaxprXRzDMgIwAA +/UwMH6vM3kKzkuL76KD36AAA +lD0x8R9zUU+Gr16SYaMDDAAA + +False +1.5707963267949 +15 +BNlaobUxlkaxprXRzDMgIwAA + + +False +1.5707963267949 +30 +BNlaobUxlkaxprXRzDMgIwAA + + +False +-1.5707963267949 +15 +BNlaobUxlkaxprXRzDMgIwAA + + +False +-0.523598775598299 +30 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +0.523598775598299 +30 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +0.523598775598299 +25 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +-0.523598775598299 +25 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +-0.785398163397448 +40 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +0.785398163397448 +40 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +-940 +-1096 +50 +8 +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +-940 +-1096 +50 +8 +UtVAs5JBSkKc0jSVdLpypQAA + + + +clMaroon +$00B9FFFF +404,230;446,219 +t3VIg1cXJEmsTGdIYQFIcwAA +/UwMH6vM3kKzkuL76KD36AAA +fdnXBAbHkUmPlMqC0iAwCAAA + +False +1.5707963267949 +15 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +1.5707963267949 +30 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +-1.5707963267949 +15 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +-0.523598775598299 +30 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +0.523598775598299 +30 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +0.523598775598299 +25 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +-0.523598775598299 +25 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +-0.785398163397448 +40 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +0.785398163397448 +40 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +-940 +-1096 +50 +8 +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +-940 +-1096 +50 +8 +IuqkqTOhTEuBUbn2uLNuqAAA + + + +clMaroon +$00B9FFFF +530 +418 +85 +53 +build-dest +install-pkg-list +src-pkg + + + +clMaroon +$00FFFF80 +510 +250 +152 +38 +function-module-list-file +class-diagram + + + +clMaroon +$00B9FFFF +567,250;540,222 +/UwMH6vM3kKzkuL76KD36AAA +stxtQ4b9QEC3ZMO0j91+GAAA + + +clMaroon +$00FF80FF +82 +442 +117 +45 +7FwnjSWdM0KKXAN3V8oQMAAA + + +1 +soft-demond + + +False + + +False + + + +False +7FwnjSWdM0KKXAN3V8oQMAAA + + +False +7FwnjSWdM0KKXAN3V8oQMAAA + + +False +7FwnjSWdM0KKXAN3V8oQMAAA + + + +clMaroon +$00FF80FF +74 +362 +121 +45 +mx6wTw6+KEuGtAr0iRUXJwAA + + +1 +soft-analysis + + +False + + +False + + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + + +clMaroon +$00B9FFFF +390,128;329,113 +IVt2tjJDzEuz/vWJVDnpEQAA +dun4oB1o7E2GPmOE4gcj2AAA + + +clMaroon +$00FFFF80 +562 +314 +152 +30 +top-function-module-list-file + + + +clMaroon +$00B9FFFF +546 +366 +267 +45 +EjjnPhUmf02yFIvhJmdcmQAA + + +1 +src-pkg and build dest category + + +False + + +False + + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + + +clMaroon +$00B9FFFF +637,410;614,422 +tuK8HBQysUWa6342kavm+gAA +9pbwNzO7hUyC11S5a9Hn1gAA + + +clMaroon +$00B9FFFF +647,343;663,366 +9pbwNzO7hUyC11S5a9Hn1gAA +EXFA5Cr3i0S0CjlpdMlBDgAA + + +clMaroon +$00B9FFFF +507,222;467,306 +o8gstZMu+EaxvNdITt/2+AAA +/UwMH6vM3kKzkuL76KD36AAA + + +clMaroon +$00B9FFFF +622 +178 +121 +45 +a7yZcyAyl02YNl0/FQziyQAA + + +1 +layer-design + + +False + + +False + + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + + +clMaroon +$00B9FFFF +602 +122 +171 +38 +function-module-struct-diagram +architech-diagram + + + +clMaroon +$00B9FFFF +685,159;684,178 +cnN0HexzX0WKGgNpVfpw2gAA +24B4XL60XEOLWuEJN79LNQAA + + +clMaroon +$00B9FFFF +590,200;622,200 +xMoCRZ0FD0mJscRNN+UpywAA +cnN0HexzX0WKGgNpVfpw2gAA +/UwMH6vM3kKzkuL76KD36AAA + +False +1.5707963267949 +15 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +1.5707963267949 +30 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +-1.5707963267949 +15 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +-0.523598775598299 +30 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +0.523598775598299 +30 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +0.523598775598299 +25 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +-0.523598775598299 +25 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +-0.785398163397448 +40 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +0.785398163397448 +40 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +-940 +-1096 +50 +8 +FVDBPeq7mEKlp1go7V1hsgAA + + +False +-940 +-1096 +50 +8 +6MJU+jYHa0mx8HaVM4S+8QAA + + + +clMaroon +$00B9FFFF +134,362;134,254 +BZR3CshDZEOw2M912JpeeQAA +1BA+Xn0RUUm64eTCTOCRugAA +gyES4qtFcEWegLydxWy1GQAA + +False +1.5707963267949 +15 +BZR3CshDZEOw2M912JpeeQAA + + +False +1.5707963267949 +30 +BZR3CshDZEOw2M912JpeeQAA + + +False +-1.5707963267949 +15 +BZR3CshDZEOw2M912JpeeQAA + + +False +-0.523598775598299 +30 +epHead +vN04w+sn8kGRW/7MCPHqyAAA + + +False +0.523598775598299 +30 +epTail +0CpaRkRUf0+bAPOkrSqRSgAA + + +False +0.523598775598299 +25 +epHead +vN04w+sn8kGRW/7MCPHqyAAA + + +False +-0.523598775598299 +25 +epTail +0CpaRkRUf0+bAPOkrSqRSgAA + + +False +-0.785398163397448 +40 +epHead +vN04w+sn8kGRW/7MCPHqyAAA + + +False +0.785398163397448 +40 +epTail +0CpaRkRUf0+bAPOkrSqRSgAA + + +False +-1008 +-1092 +50 +8 +vN04w+sn8kGRW/7MCPHqyAAA + + +False +-1008 +-1092 +50 +8 +0CpaRkRUf0+bAPOkrSqRSgAA + + + +clMaroon +$00B9FFFF +198,475;207,477 +/FmqeTd2akSH7n3I8hA3mQAA +QuIP3dNrrki2gCnUv8ZdHQAA +czSw1q8UVEOeSKFvdSakVgAA + +False +1.5707963267949 +15 +/FmqeTd2akSH7n3I8hA3mQAA + + +False +1.5707963267949 +30 +/FmqeTd2akSH7n3I8hA3mQAA + + +False +-1.5707963267949 +15 +/FmqeTd2akSH7n3I8hA3mQAA + + +False +-0.523598775598299 +30 +epHead +QZwwsltNj0eenKeiSJArvQAA + + +False +0.523598775598299 +30 +epTail +vq1zAfKQxUWnGiKbBTmYJwAA + + +False +0.523598775598299 +25 +epHead +QZwwsltNj0eenKeiSJArvQAA + + +False +-0.523598775598299 +25 +epTail +vq1zAfKQxUWnGiKbBTmYJwAA + + +False +-0.785398163397448 +40 +epHead +QZwwsltNj0eenKeiSJArvQAA + + +False +0.785398163397448 +40 +epTail +vq1zAfKQxUWnGiKbBTmYJwAA + + +False +-1008 +-1092 +50 +8 +QZwwsltNj0eenKeiSJArvQAA + + +False +-1008 +-1092 +50 +8 +vq1zAfKQxUWnGiKbBTmYJwAA + + + +clMaroon +$00B9FFFF +702 +442 +132 +98 +cmd-args-design +running-param-design +.lex/.gmr/.type/.ui +time-sequence-diagram +E-R-diagram +sql-tbl + + + + + +develop-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +xVwuXCiSU0OjjNx3L+iLBgAA +18 + +clMaroon +62 +18 +477 +449 +System + + +clMaroon +$00B9FFFF +126 +230 +104 +30 +test-code for unit + + + +clMaroon +$00B9FFFF +90 +274 +144 +30 +testing-code for integrate + + + +clMaroon +$00B9FFFF +98 +318 +125 +30 +testing-code for using + + + +clMaroon +$00B9FFFF +318 +179 +135 +32 +CLf6+wSJ/U+4iSwM7QoY3wAA + + +1 +design-to-code + + +False + + +False + + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + + +clMaroon +$00B9FFFF +402 +290 +104 +32 +gJ7o4uiAMEqSPUL3dadz2wAA + + +1 +unit-coding + + +False + + +False + + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + + +clMaroon +$00B9FFFF +334 +359 +108 +32 +wftqTlAvI0+cR9j69saRNQAA + + +1 +unit-testing + + +False + + +False + + + +False +wftqTlAvI0+cR9j69saRNQAA + + +False +wftqTlAvI0+cR9j69saRNQAA + + +False +wftqTlAvI0+cR9j69saRNQAA + + + +clMaroon +$00B9FFFF +318 +410 +152 +32 +qlZGCifQOEyQyqBzIH1x/AAA + + +1 +integrate-testing + + +False + + +False + + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + + +clMaroon +$00B9FFFF +385,210;385,239 +k48n8C/dEECUhVTIv9BoGQAA +iZbm2TAx1keNx/mPHzSEmgAA +XsyNCerqHEuJZ3n6KxffswAA + +False +1.5707963267949 +15 +k48n8C/dEECUhVTIv9BoGQAA + + +False +1.5707963267949 +30 +k48n8C/dEECUhVTIv9BoGQAA + + +False +-1.5707963267949 +15 +k48n8C/dEECUhVTIv9BoGQAA + + +False +-0.523598775598299 +30 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +0.523598775598299 +30 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +0.523598775598299 +25 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +-0.523598775598299 +25 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +-0.785398163397448 +40 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +0.785398163397448 +40 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +-1576 +-1124 +50 +8 +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +-1576 +-1124 +50 +8 +YXudH8Doi0+zzc1qPMjDNAAA + + + +clMaroon +$00B9FFFF +438,321;401,359 +euFZ2oXh1UyoeBpwCRLyDQAA +udnYsolK4EGZ5Tqfu1inggAA +cXkc4ROKfkK2AEQ27ILD7AAA + +False +1.5707963267949 +15 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +1.5707963267949 +30 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +-1.5707963267949 +15 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +-0.523598775598299 +30 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +0.523598775598299 +30 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +0.523598775598299 +25 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +-0.523598775598299 +25 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +-0.785398163397448 +40 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +0.785398163397448 +40 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +-1576 +-1124 +50 +8 +g0Sss8qL1USpNMhJiejoNQAA + + +False +-1576 +-1124 +50 +8 +nnIS6vjqXkqw2mw9rhuzugAA + + + +clMaroon +$00B9FFFF +389,390;391,410 +h7KFG98rIEKQY4C1dOWmFQAA +kVd1VyDwJEWJDwZbvH1q6wAA +udnYsolK4EGZ5Tqfu1inggAA + +False +1.5707963267949 +15 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +1.5707963267949 +30 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +-1.5707963267949 +15 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +-0.523598775598299 +30 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +0.523598775598299 +30 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +0.523598775598299 +25 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +-0.523598775598299 +25 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +-0.785398163397448 +40 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +0.785398163397448 +40 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +-1576 +-1124 +50 +8 +Fb68OZ19C0WB4BjQurmBRwAA + + +False +-1576 +-1124 +50 +8 +akgagoM7O0WP1rFMWH/IzgAA + + + +clMaroon +$00B9FFFF +314 +239 +144 +32 +CBkE9JDrJU21ybYWNP2cCgAA + + +1 +create-test-unit + + +False + + +False + + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + + +clMaroon +$00B9FFFF +250 +290 +123 +32 +CEEcWQKt0kyX8zYOPZHrrwAA + + +1 +bugfix-coding + + +False + + +False + + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + + +clMaroon +$00B9FFFF +406,270;433,290 +DCobZcXopUed3uhu7f3tCwAA +cXkc4ROKfkK2AEQ27ILD7AAA +iZbm2TAx1keNx/mPHzSEmgAA + +False +1.5707963267949 +15 +DCobZcXopUed3uhu7f3tCwAA + + +False +1.5707963267949 +30 +DCobZcXopUed3uhu7f3tCwAA + + +False +-1.5707963267949 +15 +DCobZcXopUed3uhu7f3tCwAA + + +False +-0.523598775598299 +30 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +0.523598775598299 +30 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +0.523598775598299 +25 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +-0.523598775598299 +25 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +-0.785398163397448 +40 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +0.785398163397448 +40 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +-1552 +-1012 +50 +8 +GPR477SH0U2rZy9DRg9MzAAA + + +False +-1552 +-1012 +50 +8 +DFlh0do87UmmJQigSQRsiAAA + + + +clMaroon +$00B9FFFF +362,270;333,290 +BUd2VmDLEkKHuqopStVszQAA +vmizIwBnQ0SKIRlT6FSqSwAA +iZbm2TAx1keNx/mPHzSEmgAA + +False +1.5707963267949 +15 +BUd2VmDLEkKHuqopStVszQAA + + +False +1.5707963267949 +30 +BUd2VmDLEkKHuqopStVszQAA + + +False +-1.5707963267949 +15 +BUd2VmDLEkKHuqopStVszQAA + + +False +-0.523598775598299 +30 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +0.523598775598299 +30 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +0.523598775598299 +25 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +-0.523598775598299 +25 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +-0.785398163397448 +40 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +0.785398163397448 +40 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +-1552 +-1012 +50 +8 +XyL91tS87U+MpUc/Z25u1gAA + + +False +-1552 +-1012 +50 +8 +2t6hyyogW027sVhhVrjclQAA + + + +clMaroon +$00B9FFFF +329,321;371,359 +fk3nxDxX5USF8gff9cP5MwAA +udnYsolK4EGZ5Tqfu1inggAA +vmizIwBnQ0SKIRlT6FSqSwAA + +False +1.5707963267949 +15 +fk3nxDxX5USF8gff9cP5MwAA + + +False +1.5707963267949 +30 +fk3nxDxX5USF8gff9cP5MwAA + + +False +-1.5707963267949 +15 +fk3nxDxX5USF8gff9cP5MwAA + + +False +-0.523598775598299 +30 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +0.523598775598299 +30 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +0.523598775598299 +25 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +-0.523598775598299 +25 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +-0.785398163397448 +40 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +0.785398163397448 +40 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +-1552 +-1012 +50 +8 +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +-1552 +-1012 +50 +8 +lp0ewCTLb06H/3WjWYmLOQAA + + + +clMaroon +$00B9FFFF +458 +214 +61 +30 +src-code + + + +clMaroon +$00B9FFFF +458 +154 +55 +30 +src-pkg + + + + + +design-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +ySTAVfcj2U6jFfCvuMqyogAA + + + +dev-flow +yePcB6NdXUG1SBs2wQJA7gAA + +SY6zyr8S8EyWPA7+VdC+9wAA +50 + +clMaroon +$00B9FFFF +272 +152 +345 +189 +System + + +clMaroon +$00B9FFFF +492 +276 +120 +32 +oKO/T5e9P0yxfxSC9DK89wAA + + +1 +get-task + + +False + + +False + + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + + +clMaroon +$00B9FFFF +140 +184 +196 +32 +KMKq644vfEq7voEHMFkLwgAA + + +1 +initial-dev-task-launch + + +False + + +False + + + +False +KMKq644vfEq7voEHMFkLwgAA + + +False +KMKq644vfEq7voEHMFkLwgAA + + +False +KMKq644vfEq7voEHMFkLwgAA + + + +clMaroon +$00B9FFFF +136 +256 +202 +32 +PjS4k33/kkePfB8R0Qh14AAA + + +1 +bugfix-dev-task-launch + + +False + + +False + + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + + +clMaroon +$00B9FFFF +144 +308 +251 +32 +GbTWbRuRqkK91Ggxct5sowAA + + +1 +new-feature-dev-task-launch + + +False + + +False + + + +False +GbTWbRuRqkK91Ggxct5sowAA + + +False +GbTWbRuRqkK91Ggxct5sowAA + + +False +GbTWbRuRqkK91Ggxct5sowAA + + + +clMaroon +$00B9FFFF +488 +228 +127 +32 +F4Ld7UGpQkiQCCnqXOJ06wAA + + +1 +task-schedule + + +False + + +False + + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + + +clMaroon +$00B9FFFF +452 +156 +76 +23 +task-schedule + + + +clMaroon +$00B9FFFF +335,213;488,234 +dmgxVDpivEyRrIdXr3QLWwAA +ql+YUpy6cUi716voXkuJ3QAA +GiWAdL1cP0Kc0Io94onSPwAA + +False +1.5707963267949 +15 +dmgxVDpivEyRrIdXr3QLWwAA + + +False +1.5707963267949 +30 +dmgxVDpivEyRrIdXr3QLWwAA + + +False +-1.5707963267949 +15 +dmgxVDpivEyRrIdXr3QLWwAA + + +False +-0.523598775598299 +30 +epHead +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +0.523598775598299 +30 +epTail +v/43TdYAaEacDIIH0o4rFQAA + + +False +0.523598775598299 +25 +epHead +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +-0.523598775598299 +25 +epTail +v/43TdYAaEacDIIH0o4rFQAA + + +False +-0.785398163397448 +40 +epHead +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +0.785398163397448 +40 +epTail +v/43TdYAaEacDIIH0o4rFQAA + + +False +-1448 +-852 +50 +8 +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +-1448 +-852 +50 +8 +v/43TdYAaEacDIIH0o4rFQAA + + + +clMaroon +$00B9FFFF +337,262;488,249 +gFnk16iOFki43F+XSkxbHAAA +ql+YUpy6cUi716voXkuJ3QAA +op7TXMmXt0mHqk1AIwA74gAA + +False +1.5707963267949 +15 +gFnk16iOFki43F+XSkxbHAAA + + +False +1.5707963267949 +30 +gFnk16iOFki43F+XSkxbHAAA + + +False +-1.5707963267949 +15 +gFnk16iOFki43F+XSkxbHAAA + + +False +-0.523598775598299 +30 +epHead +IMPpHUaiT0CFZLcH+44uQwAA + + +False +0.523598775598299 +30 +epTail +Jrscu7bPaEOGr8p3WU+PYQAA + + +False +0.523598775598299 +25 +epHead +IMPpHUaiT0CFZLcH+44uQwAA + + +False +-0.523598775598299 +25 +epTail +Jrscu7bPaEOGr8p3WU+PYQAA + + +False +-0.785398163397448 +40 +epHead +IMPpHUaiT0CFZLcH+44uQwAA + + +False +0.785398163397448 +40 +epTail +Jrscu7bPaEOGr8p3WU+PYQAA + + +False +-1448 +-852 +50 +8 +IMPpHUaiT0CFZLcH+44uQwAA + + +False +-1448 +-852 +50 +8 +Jrscu7bPaEOGr8p3WU+PYQAA + + + +clMaroon +$00B9FFFF +322,308;495,259 +O9Ia0CXMxkC9ATowborgyQAA +ql+YUpy6cUi716voXkuJ3QAA +njT7QTVbQUy2rZI/zfQRFAAA + +False +1.5707963267949 +15 +O9Ia0CXMxkC9ATowborgyQAA + + +False +1.5707963267949 +30 +O9Ia0CXMxkC9ATowborgyQAA + + +False +-1.5707963267949 +15 +O9Ia0CXMxkC9ATowborgyQAA + + +False +-0.523598775598299 +30 +epHead +X82I741yL0ybUyEPhBbTZQAA + + +False +0.523598775598299 +30 +epTail +VHwOYW9vAkeUFUXT+cxoEgAA + + +False +0.523598775598299 +25 +epHead +X82I741yL0ybUyEPhBbTZQAA + + +False +-0.523598775598299 +25 +epTail +VHwOYW9vAkeUFUXT+cxoEgAA + + +False +-0.785398163397448 +40 +epHead +X82I741yL0ybUyEPhBbTZQAA + + +False +0.785398163397448 +40 +epTail +VHwOYW9vAkeUFUXT+cxoEgAA + + +False +-1448 +-852 +50 +8 +X82I741yL0ybUyEPhBbTZQAA + + +False +-1448 +-852 +50 +8 +VHwOYW9vAkeUFUXT+cxoEgAA + + + +clMaroon +$00B9FFFF +551,259;551,276 +hIsaQ5I0Y0qxkPCenhTfsgAA +Jhw5BLAD7EWhHUYbBGN+BgAA +ql+YUpy6cUi716voXkuJ3QAA + +False +1.5707963267949 +15 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +1.5707963267949 +30 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +-1.5707963267949 +15 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +-0.523598775598299 +30 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +0.523598775598299 +30 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +0.523598775598299 +25 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +-0.523598775598299 +25 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +-0.785398163397448 +40 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +0.785398163397448 +40 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +-1448 +-852 +50 +8 +qb8LVJbh5kG4uilxed700QAA + + +False +-1448 +-852 +50 +8 +4Ujmk5gLj0WyU3SYagr0mAAA + + + +clMaroon +$00B9FFFF +40 +532 +120 +40 +h5aHoI2/GkuAptKzGDmHIwAA + + +dev-initial-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +188 +484 +120 +40 +NezC/3LDGUub0eLy4M8sOgAA + + +design-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +188 +536 +120 +40 +7jBLX6wjTkmObbw8i4xK0gAA + + +develop-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +336 +484 +120 +40 +qG82m0zlPkqvT2acHPihkwAA + + +testing-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +600 +488 +120 +40 +Gn5CjkIjQUCxSoecNQk2dQAA + + +document-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +28 +364 +120 +40 +1Q7qLHEF7kKyydsrAZ/k1QAA + + +publish-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +40 +480 +120 +40 +lNk1i5gHU02RiCDfZIsLEQAA + + +analysis-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +724 +124 +181 +217 +H2eGySLGMka4LNHqki1wzQAA + + +after-develop-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +468 +432 +106 +32 +H7tysEnUp0+p4o84YYVC8wAA + + +1 +bugfix-task + + +False + + +False + + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + + +clMaroon +$00B9FFFF +228 +76 +113 +45 +dHVXjobujkKGloy7+Ox8DAAA + + +1 +publish-task + + +False + + +False + + + +False +dHVXjobujkKGloy7+Ox8DAAA + + +False +dHVXjobujkKGloy7+Ox8DAAA + + +False +dHVXjobujkKGloy7+Ox8DAAA + + + +clMaroon +$00B9FFFF +584 +432 +137 +32 +VwrgoiK6h0aUxHMgZDKYzgAA + + +1 +document-task + + +False + + +False + + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + + +clMaroon +$00B9FFFF +736 +432 +134 +32 +fKAlsL5x3U2cAiir26vsAQAA + + +1 +traslation-task + + +False + + +False + + + +False +fKAlsL5x3U2cAiir26vsAQAA + + +False +fKAlsL5x3U2cAiir26vsAQAA + + +False +fKAlsL5x3U2cAiir26vsAQAA + + + +clMaroon +$00B9FFFF +336 +432 +113 +32 +KbXj7bLsjku9BsYv/z63VgAA + + +1 +testing-task + + +False + + +False + + + +False +KbXj7bLsjku9BsYv/z63VgAA + + +False +KbXj7bLsjku9BsYv/z63VgAA + + +False +KbXj7bLsjku9BsYv/z63VgAA + + + +clMaroon +$00B9FFFF +24 +284 +120 +40 +VKh7LpFhYka/yUWbEMRTBAAA + + +bug-report-task + + +False + + +False + + + + +clMaroon +$00B9FFFF +352 +180 +111 +32 +al6ONjrnZ02miWcUt8E4UAAA + + +1 +submit-task + + +False + + +False + + + +False +al6ONjrnZ02miWcUt8E4UAAA + + +False +al6ONjrnZ02miWcUt8E4UAAA + + +False +al6ONjrnZ02miWcUt8E4UAAA + + + +clMaroon +$00B9FFFF +512 +176 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +455,211;506,228 +ZX2SocfyGUGaYAoZdJTHCQAA +ql+YUpy6cUi716voXkuJ3QAA +FcnkDLlWXkuemMb1lINg6QAA + +False +1.5707963267949 +15 +ZX2SocfyGUGaYAoZdJTHCQAA + + +False +1.5707963267949 +30 +ZX2SocfyGUGaYAoZdJTHCQAA + + +False +-1.5707963267949 +15 +ZX2SocfyGUGaYAoZdJTHCQAA + + +False +-0.523598775598299 +30 +epHead +v4O00Fgt/UO7ZDLsyBtHIQAA + + +False +0.523598775598299 +30 +epTail +YezoOUqiMEqMfQ47zgiYggAA + + +False +0.523598775598299 +25 +epHead +v4O00Fgt/UO7ZDLsyBtHIQAA + + +False +-0.523598775598299 +25 +epTail +YezoOUqiMEqMfQ47zgiYggAA + + +False +-0.785398163397448 +40 +epHead +v4O00Fgt/UO7ZDLsyBtHIQAA + + +False +0.785398163397448 +40 +epTail +YezoOUqiMEqMfQ47zgiYggAA + + +False +-1000 +-1000 +50 +8 +v4O00Fgt/UO7ZDLsyBtHIQAA + + +False +-1000 +-1000 +50 +8 +YezoOUqiMEqMfQ47zgiYggAA + + + +clMaroon +$00B9FFFF +553,207;552,228 +V+JDAD1y1kGhDKjzLQ2kzwAA +ql+YUpy6cUi716voXkuJ3QAA +R1Mz4YKyKEmXSdZTt+wNQAAA + +False +1.5707963267949 +15 +V+JDAD1y1kGhDKjzLQ2kzwAA + + +False +1.5707963267949 +30 +V+JDAD1y1kGhDKjzLQ2kzwAA + + +False +-1.5707963267949 +15 +V+JDAD1y1kGhDKjzLQ2kzwAA + + +False +-0.523598775598299 +30 +epHead +5z6XidYYrkexqaAHLrMuGQAA + + +False +0.523598775598299 +30 +epTail +ivchHpb/m0Oy82i37nw/zwAA + + +False +0.523598775598299 +25 +epHead +5z6XidYYrkexqaAHLrMuGQAA + + +False +-0.523598775598299 +25 +epTail +ivchHpb/m0Oy82i37nw/zwAA + + +False +-0.785398163397448 +40 +epHead +5z6XidYYrkexqaAHLrMuGQAA + + +False +0.785398163397448 +40 +epTail +ivchHpb/m0Oy82i37nw/zwAA + + +False +-1000 +-1000 +50 +8 +5z6XidYYrkexqaAHLrMuGQAA + + +False +-1000 +-1000 +50 +8 +ivchHpb/m0Oy82i37nw/zwAA + + + +clMaroon +$00B9FFFF +172 +432 +155 +32 +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +1 +new-feature-task + + +False + + +False + + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + + +clMaroon +$00B9FFFF +28 +432 +137 +32 +d6r7rOW3akG5lkJDtATmigAA + + +1 +initial-dev-task + + +False + + +False + + + +False +d6r7rOW3akG5lkJDtATmigAA + + +False +d6r7rOW3akG5lkJDtATmigAA + + +False +d6r7rOW3akG5lkJDtATmigAA + + + +clMaroon +$00B9FFFF +600 +300 +108 +32 +5yDX8wNG3Ui+FMgq3rqJkQAA + + +1 +launch-task + + +False + + +False + + + +False +5yDX8wNG3Ui+FMgq3rqJkQAA + + +False +5yDX8wNG3Ui+FMgq3rqJkQAA + + +False +5yDX8wNG3Ui+FMgq3rqJkQAA + + + +clMaroon +$00B9FFFF +736 +488 +120 +40 +Gn5CjkIjQUCxSoecNQk2dQAA + + +document-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +468 +488 +120 +40 +7jBLX6wjTkmObbw8i4xK0gAA + + +develop-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +99,519;99,532 +viIiAZ9C80y4tKd497zwFAAA +Rq0Cydd7nEKOfOgn8htc8QAA +pkAZPt0EzUO5vbW8/2ISDgAA + +False +1.5707963267949 +15 +viIiAZ9C80y4tKd497zwFAAA + + +False +1.5707963267949 +30 +viIiAZ9C80y4tKd497zwFAAA + + +False +-1.5707963267949 +15 +viIiAZ9C80y4tKd497zwFAAA + + +False +-0.523598775598299 +30 +epHead +9OsI3YefmEShu4VA2aYWsgAA + + +False +0.523598775598299 +30 +epTail +OH+C5n4Y3k61fQSZesUVxwAA + + +False +0.523598775598299 +25 +epHead +9OsI3YefmEShu4VA2aYWsgAA + + +False +-0.523598775598299 +25 +epTail +OH+C5n4Y3k61fQSZesUVxwAA + + +False +-0.785398163397448 +40 +epHead +9OsI3YefmEShu4VA2aYWsgAA + + +False +0.785398163397448 +40 +epTail +OH+C5n4Y3k61fQSZesUVxwAA + + +False +-1000 +-1000 +50 +8 +9OsI3YefmEShu4VA2aYWsgAA + + +False +-1000 +-1000 +50 +8 +OH+C5n4Y3k61fQSZesUVxwAA + + + +clMaroon +$00B9FFFF +159,532;188,522 +zhltSEBb90+T60/21ERiXQAA +05y9pi2UcU6ptxllVr+G/gAA +Rq0Cydd7nEKOfOgn8htc8QAA + +False +1.5707963267949 +15 +zhltSEBb90+T60/21ERiXQAA + + +False +1.5707963267949 +30 +zhltSEBb90+T60/21ERiXQAA + + +False +-1.5707963267949 +15 +zhltSEBb90+T60/21ERiXQAA + + +False +-0.523598775598299 +30 +epHead +IJastPE4CkGI6UtKXQb+xgAA + + +False +0.523598775598299 +30 +epTail +wVShJ+TldkiCQjPWrQHwugAA + + +False +0.523598775598299 +25 +epHead +IJastPE4CkGI6UtKXQb+xgAA + + +False +-0.523598775598299 +25 +epTail +wVShJ+TldkiCQjPWrQHwugAA + + +False +-0.785398163397448 +40 +epHead +IJastPE4CkGI6UtKXQb+xgAA + + +False +0.785398163397448 +40 +epTail +wVShJ+TldkiCQjPWrQHwugAA + + +False +-1000 +-1000 +50 +8 +IJastPE4CkGI6UtKXQb+xgAA + + +False +-1000 +-1000 +50 +8 +wVShJ+TldkiCQjPWrQHwugAA + + + +clMaroon +$00B9FFFF +247,523;247,536 +IQdvD61jPEq7KzieVIPMnAAA +LdINJygfWEW3vhPOZonupQAA +05y9pi2UcU6ptxllVr+G/gAA + +False +1.5707963267949 +15 +IQdvD61jPEq7KzieVIPMnAAA + + +False +1.5707963267949 +30 +IQdvD61jPEq7KzieVIPMnAAA + + +False +-1.5707963267949 +15 +IQdvD61jPEq7KzieVIPMnAAA + + +False +-0.523598775598299 +30 +epHead +d4BprJk1YUek3SfLLsVZ4QAA + + +False +0.523598775598299 +30 +epTail +I2MiL+bJOEWcCQW8PlUaEAAA + + +False +0.523598775598299 +25 +epHead +d4BprJk1YUek3SfLLsVZ4QAA + + +False +-0.523598775598299 +25 +epTail +I2MiL+bJOEWcCQW8PlUaEAAA + + +False +-0.785398163397448 +40 +epHead +d4BprJk1YUek3SfLLsVZ4QAA + + +False +0.785398163397448 +40 +epTail +I2MiL+bJOEWcCQW8PlUaEAAA + + +False +-1000 +-1000 +50 +8 +d4BprJk1YUek3SfLLsVZ4QAA + + +False +-1000 +-1000 +50 +8 +I2MiL+bJOEWcCQW8PlUaEAAA + + + +clMaroon +$00B9FFFF +301,536;338,523 +/HuYmDQGHEeXQIQr+1PRoQAA +0eY6HnBo4kSNrbtAFd/AoQAA +LdINJygfWEW3vhPOZonupQAA + +False +1.5707963267949 +15 +/HuYmDQGHEeXQIQr+1PRoQAA + + +False +1.5707963267949 +30 +/HuYmDQGHEeXQIQr+1PRoQAA + + +False +-1.5707963267949 +15 +/HuYmDQGHEeXQIQr+1PRoQAA + + +False +-0.523598775598299 +30 +epHead +/pztn/xQEUmMs4TaAXsCagAA + + +False +0.523598775598299 +30 +epTail +770F/tljqkKHqvtGDTfVzAAA + + +False +0.523598775598299 +25 +epHead +/pztn/xQEUmMs4TaAXsCagAA + + +False +-0.523598775598299 +25 +epTail +770F/tljqkKHqvtGDTfVzAAA + + +False +-0.785398163397448 +40 +epHead +/pztn/xQEUmMs4TaAXsCagAA + + +False +0.785398163397448 +40 +epTail +770F/tljqkKHqvtGDTfVzAAA + + +False +-1000 +-1000 +50 +8 +/pztn/xQEUmMs4TaAXsCagAA + + +False +-1000 +-1000 +50 +8 +770F/tljqkKHqvtGDTfVzAAA + + + +clMaroon +$00B9FFFF +587,507;600,507 +QnKEQWAvGUeHGbfSVIcc0gAA +Y9Di27a99UCLuicgXHRPbQAA +TTYozwHvrUuniRYLcHLDwgAA + +False +1.5707963267949 +15 +QnKEQWAvGUeHGbfSVIcc0gAA + + +False +1.5707963267949 +30 +QnKEQWAvGUeHGbfSVIcc0gAA + + +False +-1.5707963267949 +15 +QnKEQWAvGUeHGbfSVIcc0gAA + + +False +-0.523598775598299 +30 +epHead +avTqriQFjUueOCz6jCc/IwAA + + +False +0.523598775598299 +30 +epTail +BPf4vCTXTUSPQUWNKaCQDQAA + + +False +0.523598775598299 +25 +epHead +avTqriQFjUueOCz6jCc/IwAA + + +False +-0.523598775598299 +25 +epTail +BPf4vCTXTUSPQUWNKaCQDQAA + + +False +-0.785398163397448 +40 +epHead +avTqriQFjUueOCz6jCc/IwAA + + +False +0.785398163397448 +40 +epTail +BPf4vCTXTUSPQUWNKaCQDQAA + + +False +-1000 +-1000 +50 +8 +avTqriQFjUueOCz6jCc/IwAA + + +False +-1000 +-1000 +50 +8 +BPf4vCTXTUSPQUWNKaCQDQAA + + + +clMaroon +$00B9FFFF +719,507;736,507 +4uPxSnoEgUO3ovjSg4lAfgAA +tQieUJFUIUWjBNmfDel6vwAA +Y9Di27a99UCLuicgXHRPbQAA + +False +1.5707963267949 +15 +4uPxSnoEgUO3ovjSg4lAfgAA + + +False +1.5707963267949 +30 +4uPxSnoEgUO3ovjSg4lAfgAA + + +False +-1.5707963267949 +15 +4uPxSnoEgUO3ovjSg4lAfgAA + + +False +-0.523598775598299 +30 +epHead +KCe+sJFeFUW7JorDZydAQQAA + + +False +0.523598775598299 +30 +epTail +8MwPX9NZj0SQu64mihvgxAAA + + +False +0.523598775598299 +25 +epHead +KCe+sJFeFUW7JorDZydAQQAA + + +False +-0.523598775598299 +25 +epTail +8MwPX9NZj0SQu64mihvgxAAA + + +False +-0.785398163397448 +40 +epHead +KCe+sJFeFUW7JorDZydAQQAA + + +False +0.785398163397448 +40 +epTail +8MwPX9NZj0SQu64mihvgxAAA + + +False +-1000 +-1000 +50 +8 +KCe+sJFeFUW7JorDZydAQQAA + + +False +-1000 +-1000 +50 +8 +8MwPX9NZj0SQu64mihvgxAAA + + + +clMaroon +$00B9FFFF +16 +117 +118 +32 +7lWVbX8GnUmVFBjNoEJuAAAA + + +1 +new-demond + + +False + + +False + + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + + +clMaroon +$00B9FFFF +188 +596 +120 +40 +1Q7qLHEF7kKyydsrAZ/k1QAA + + +publish-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +472 +596 +120 +40 +1Q7qLHEF7kKyydsrAZ/k1QAA + + +publish-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +336 +536 +120 +40 +VKh7LpFhYka/yUWbEMRTBAAA + + +bug-report-task + + +False + + +False + + + + +clMaroon +$00B9FFFF +395,523;395,536 +wamDBWad0EiNBPiMYvPoYQAA +OO7ku5gAkUOUNTByzbCZzgAA +0eY6HnBo4kSNrbtAFd/AoQAA + +False +1.5707963267949 +15 +wamDBWad0EiNBPiMYvPoYQAA + + +False +1.5707963267949 +30 +wamDBWad0EiNBPiMYvPoYQAA + + +False +-1.5707963267949 +15 +wamDBWad0EiNBPiMYvPoYQAA + + +False +-0.523598775598299 +30 +epHead +SG8bVsROWE+5+iyuVGPkBQAA + + +False +0.523598775598299 +30 +epTail +1IsgVb2s8Ui+xnl92d08gQAA + + +False +0.523598775598299 +25 +epHead +SG8bVsROWE+5+iyuVGPkBQAA + + +False +-0.523598775598299 +25 +epTail +1IsgVb2s8Ui+xnl92d08gQAA + + +False +-0.785398163397448 +40 +epHead +SG8bVsROWE+5+iyuVGPkBQAA + + +False +0.785398163397448 +40 +epTail +1IsgVb2s8Ui+xnl92d08gQAA + + +False +-1000 +-1000 +50 +8 +SG8bVsROWE+5+iyuVGPkBQAA + + +False +-1000 +-1000 +50 +8 +1IsgVb2s8Ui+xnl92d08gQAA + + + +clMaroon +$00B9FFFF +394,575;393,592 +RPaUCtwDgE+7Y3vewD8uWQAA +4hezOO3zxE6T3AtmMrs4MwAA +OO7ku5gAkUOUNTByzbCZzgAA + +False +1.5707963267949 +15 +RPaUCtwDgE+7Y3vewD8uWQAA + + +False +1.5707963267949 +30 +RPaUCtwDgE+7Y3vewD8uWQAA + + +False +-1.5707963267949 +15 +RPaUCtwDgE+7Y3vewD8uWQAA + + +False +-0.523598775598299 +30 +epHead +RaGpcXRFFk2Egrs9p45aEwAA + + +False +0.523598775598299 +30 +epTail +51zN/AjS8UKGQuZi3cgptgAA + + +False +0.523598775598299 +25 +epHead +RaGpcXRFFk2Egrs9p45aEwAA + + +False +-0.523598775598299 +25 +epTail +51zN/AjS8UKGQuZi3cgptgAA + + +False +-0.785398163397448 +40 +epHead +RaGpcXRFFk2Egrs9p45aEwAA + + +False +0.785398163397448 +40 +epTail +51zN/AjS8UKGQuZi3cgptgAA + + +False +-1000 +-1000 +50 +8 +RaGpcXRFFk2Egrs9p45aEwAA + + +False +-1000 +-1000 +50 +8 +51zN/AjS8UKGQuZi3cgptgAA + + + +clMaroon +$00B9FFFF +336 +592 +113 +32 +Qefe92j2XEq8x5GI1Vq+RQAA + + +1 +dev-estimat + + +False + + +False + + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + + +clMaroon +$00B9FFFF +412,592;500,527 +MEolPOO0IEuLY63mhD0XIAAA +TTYozwHvrUuniRYLcHLDwgAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +MEolPOO0IEuLY63mhD0XIAAA + + +False +1.5707963267949 +30 +MEolPOO0IEuLY63mhD0XIAAA + + +False +-1.5707963267949 +15 +MEolPOO0IEuLY63mhD0XIAAA + + +False +-0.523598775598299 +30 +epHead +6XJvWCMrykCACsZlVke/PAAA + + +False +0.523598775598299 +30 +epTail +g0TBPf3Nh0KJwiSYVxiPhQAA + + +False +0.523598775598299 +25 +epHead +6XJvWCMrykCACsZlVke/PAAA + + +False +-0.523598775598299 +25 +epTail +g0TBPf3Nh0KJwiSYVxiPhQAA + + +False +-0.785398163397448 +40 +epHead +6XJvWCMrykCACsZlVke/PAAA + + +False +0.785398163397448 +40 +epTail +g0TBPf3Nh0KJwiSYVxiPhQAA + + +False +-1000 +-1000 +50 +8 +6XJvWCMrykCACsZlVke/PAAA + + +False +-1000 +-1000 +50 +8 +g0TBPf3Nh0KJwiSYVxiPhQAA + + + +clMaroon +$00B9FFFF +448,610;472,611 +FcZQ8iR/bkazNlwyyf9ViQAA +Q9Jt8tCpI0KztPNZg/DB7QAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +FcZQ8iR/bkazNlwyyf9ViQAA + + +False +1.5707963267949 +30 +FcZQ8iR/bkazNlwyyf9ViQAA + + +False +-1.5707963267949 +15 +FcZQ8iR/bkazNlwyyf9ViQAA + + +False +-0.523598775598299 +30 +epHead +ZJ10cvLftEKNjkYS8UBeogAA + + +False +0.523598775598299 +30 +epTail +z8s7WtExy0+auE7CN08QzQAA + + +False +0.523598775598299 +25 +epHead +ZJ10cvLftEKNjkYS8UBeogAA + + +False +-0.523598775598299 +25 +epTail +z8s7WtExy0+auE7CN08QzQAA + + +False +-0.785398163397448 +40 +epHead +ZJ10cvLftEKNjkYS8UBeogAA + + +False +0.785398163397448 +40 +epTail +z8s7WtExy0+auE7CN08QzQAA + + +False +-1000 +-1000 +50 +8 +ZJ10cvLftEKNjkYS8UBeogAA + + +False +-1000 +-1000 +50 +8 +z8s7WtExy0+auE7CN08QzQAA + + + +clMaroon +$00B9FFFF +336,610;307,612 +ys0dUMXSfkahAJXAYIjoOQAA +4JaPx8QgwEWT8vCziLxdSQAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +ys0dUMXSfkahAJXAYIjoOQAA + + +False +1.5707963267949 +30 +ys0dUMXSfkahAJXAYIjoOQAA + + +False +-1.5707963267949 +15 +ys0dUMXSfkahAJXAYIjoOQAA + + +False +-0.523598775598299 +30 +epHead +j0eu/Ys1xkyBAac51lq70AAA + + +False +0.523598775598299 +30 +epTail +gijAVu6IkkimRi58YU5afQAA + + +False +0.523598775598299 +25 +epHead +j0eu/Ys1xkyBAac51lq70AAA + + +False +-0.523598775598299 +25 +epTail +gijAVu6IkkimRi58YU5afQAA + + +False +-0.785398163397448 +40 +epHead +j0eu/Ys1xkyBAac51lq70AAA + + +False +0.785398163397448 +40 +epTail +gijAVu6IkkimRi58YU5afQAA + + +False +-1000 +-1000 +50 +8 +j0eu/Ys1xkyBAac51lq70AAA + + +False +-1000 +-1000 +50 +8 +gijAVu6IkkimRi58YU5afQAA + + + + + +dev-initial-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +F7Rmog3w4EughQCSKf38hgAA +11 + +clMaroon +34 +22 +208 +300 +System + + +clMaroon +$00B9FFFF +61 +98 +134 +45 +kM7+GQ5RuEmygAJdSluSjQAA + + +1 +src-pkg-create + + +False + + +False + + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + + +clMaroon +$00B9FFFF +50 +270 +156 +45 +KmQBouG6c0yb16gPnUnBtQAA + + +1 +RAD-demo + + +False + + +False + + + +False +KmQBouG6c0yb16gPnUnBtQAA + + +False +KmQBouG6c0yb16gPnUnBtQAA + + +False +KmQBouG6c0yb16gPnUnBtQAA + + + +clMaroon +$00B9FFFF +127,142;127,154 +YcGgDGXOZ06J+TZOxU72agAA +MD2wdRztkUaHPYJptdpRnwAA +g9FXZVEqkEeDovQh5ld2zgAA + +False +1.5707963267949 +15 +YcGgDGXOZ06J+TZOxU72agAA + + +False +1.5707963267949 +30 +YcGgDGXOZ06J+TZOxU72agAA + + +False +-1.5707963267949 +15 +YcGgDGXOZ06J+TZOxU72agAA + + +False +-0.523598775598299 +30 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +0.523598775598299 +30 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +0.523598775598299 +25 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +-0.523598775598299 +25 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +-0.785398163397448 +40 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +0.785398163397448 +40 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +-2056 +-996 +50 +8 +W6JXNHPDXE+JzttRtRevOgAA + + +False +-2056 +-996 +50 +8 +rO/Oarhbpk6wEn45hIpPfAAA + + + +clMaroon +$00B9FFFF +61 +46 +135 +45 +l2Lw5fePkE+9xXcdzSY+bwAA + + +1 +dev-env-install + + +False + + +False + + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + + +clMaroon +$00B9FFFF +128,90;128,98 +3RL8yaG7p0udrs0v9djevAAA +g9FXZVEqkEeDovQh5ld2zgAA +Hb/FVc/wi0OFVH1zZMj5cQAA + +False +1.5707963267949 +15 +3RL8yaG7p0udrs0v9djevAAA + + +False +1.5707963267949 +30 +3RL8yaG7p0udrs0v9djevAAA + + +False +-1.5707963267949 +15 +3RL8yaG7p0udrs0v9djevAAA + + +False +-0.523598775598299 +30 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +0.523598775598299 +30 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +0.523598775598299 +25 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +-0.523598775598299 +25 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +-0.785398163397448 +40 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +0.785398163397448 +40 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +-2056 +-996 +50 +8 +La7Sdx9zEUWWIkxIncjJuAAA + + +False +-2056 +-996 +50 +8 +h4chvQo17kKpYAZk9SZs0wAA + + + +clMaroon +$00B9FFFF +54 +154 +148 +45 +ofqv4KD9ukybRvF//Fek/AAA + + +1 +web home pages + + +False + + +False + + + +False +ofqv4KD9ukybRvF//Fek/AAA + + +False +ofqv4KD9ukybRvF//Fek/AAA + + +False +ofqv4KD9ukybRvF//Fek/AAA + + + +clMaroon +$00B9FFFF +127,198;127,218 +BYyEw6WhrkigDw+109evLAAA +JUjJ0DqUdUiwoes9veWzIgAA +MD2wdRztkUaHPYJptdpRnwAA + +False +1.5707963267949 +15 +BYyEw6WhrkigDw+109evLAAA + + +False +1.5707963267949 +30 +BYyEw6WhrkigDw+109evLAAA + + +False +-1.5707963267949 +15 +BYyEw6WhrkigDw+109evLAAA + + +False +-0.523598775598299 +30 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +0.523598775598299 +30 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +0.523598775598299 +25 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +-0.523598775598299 +25 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +-0.785398163397448 +40 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +0.785398163397448 +40 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +-2056 +-996 +50 +8 +2dUTUSyX8USUOoaapULmuQAA + + +False +-2056 +-996 +50 +8 +Dk4WLVZ+SU+WfPXc7TG0IwAA + + + +clMaroon +$00B9FFFF +34 +218 +189 +45 +czS7yLr6oUygLwEMTWJMVgAA + + +1 +first-ver-dev-env-chk + + +False + + +False + + + +False +czS7yLr6oUygLwEMTWJMVgAA + + +False +czS7yLr6oUygLwEMTWJMVgAA + + +False +czS7yLr6oUygLwEMTWJMVgAA + + + +clMaroon +$00B9FFFF +128,262;128,270 +ULUs5j3aC0Gd9Vn1OUTU2wAA +jJnr+ewJmkiXbJ8FW5RHwQAA +JUjJ0DqUdUiwoes9veWzIgAA + +False +1.5707963267949 +15 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +1.5707963267949 +30 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +-1.5707963267949 +15 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +-0.523598775598299 +30 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +0.523598775598299 +30 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +0.523598775598299 +25 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +-0.523598775598299 +25 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +-0.785398163397448 +40 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +0.785398163397448 +40 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +-2056 +-996 +50 +8 +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +-2056 +-996 +50 +8 +XXlOcGC2n0emsre13Wy0GgAA + + + +clMaroon +$00B9FFFF +74 +26 +109 +23 +dev-initial-procedure + + + + + +after-develop-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +wscyfYAYZkafubA/1NDMYwAA + + + +docment-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +3PhU1VdqeEmvUNILZTm2/QAA +9 + +clMaroon +38 +38 +185 +273 +System + + +clMaroon +$00B9FFFF +67 +128 +121 +45 +lOyDrRE6cEms6LglvRhNKwAA + + +1 +testing + + +False + + +False + + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + + +clMaroon +$00B9FFFF +53 +190 +148 +45 +ucei5JvgaEarsuGuZmgj7QAA + + +1 +doc-tutorial-web + + +False + + +False + + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + + +clMaroon +$00B9FFFF +67 +252 +121 +45 +ZFe9gOmpTEWMgVssyEcAWAAA + + +1 +version-pkg + + +False + + +False + + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + + +clMaroon +$00B9FFFF +127,172;127,190 +hKV30qElWkWAVhrHK7PJbAAA +IygCYEX6+Uu+11eoseJSngAA +kZAXDcSScUSa3zPofC/wwAAA + +False +1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +1.5707963267949 +30 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-0.523598775598299 +30 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.523598775598299 +30 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +0.523598775598299 +25 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-0.523598775598299 +25 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-0.785398163397448 +40 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.785398163397448 +40 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-2076 +-1312 +50 +8 +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-2076 +-1312 +50 +8 +WHhyhUoWo0iDDhj6FaqW/gAA + + + +clMaroon +$00B9FFFF +126,234;126,252 +Htop0thy70qsJ36MwSIctgAA +cr3AMb7W2EWA6biraBdVIQAA +IygCYEX6+Uu+11eoseJSngAA + +False +1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +1.5707963267949 +30 +Htop0thy70qsJ36MwSIctgAA + + +False +-1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +-0.523598775598299 +30 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.523598775598299 +30 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +0.523598775598299 +25 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-0.523598775598299 +25 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-0.785398163397448 +40 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.785398163397448 +40 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-2076 +-1312 +50 +8 +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-2076 +-1312 +50 +8 +bDyGtYJmuUiVC+pPkc7oHgAA + + + +clMaroon +$00B9FFFF +67 +66 +121 +45 +aUVRiLFY4USAN9h1PY1/vAAA + + +1 +multi-lang + + +False + + +False + + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + + +clMaroon +$00B9FFFF +127,110;127,128 ++nJDFiS7VECOJ4vWaYvszgAA +kZAXDcSScUSa3zPofC/wwAAA +fafd82Xh5Uu1mt+678C5PwAA + +False +1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +1.5707963267949 +30 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-0.523598775598299 +30 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.523598775598299 +30 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +0.523598775598299 +25 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-0.523598775598299 +25 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-0.785398163397448 +40 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.785398163397448 +40 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-2068 +-1288 +50 +8 +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-2068 +-1288 +50 +8 +VvsNJNyOO0e86/eHwYM58QAA + + + +clMaroon +$00B9FFFF +82 +42 +109 +23 +after-dev-procedure + + + + + +testing-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +lwwdtvTW6EyqvIRscOot6QAA +9 + +clMaroon +48 +48 +185 +273 +System + + +clMaroon +$00B9FFFF +77 +138 +121 +45 +lOyDrRE6cEms6LglvRhNKwAA + + +1 +testing + + +False + + +False + + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + + +clMaroon +$00B9FFFF +63 +200 +148 +45 +ucei5JvgaEarsuGuZmgj7QAA + + +1 +doc-tutorial-web + + +False + + +False + + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + + +clMaroon +$00B9FFFF +77 +262 +121 +45 +ZFe9gOmpTEWMgVssyEcAWAAA + + +1 +version-pkg + + +False + + +False + + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + + +clMaroon +$00B9FFFF +137,182;137,200 +hKV30qElWkWAVhrHK7PJbAAA +ugI2euwM3Ey7T7DNJ++xmgAA +qudITNuevEOUiPdD67icGQAA + +False +1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +1.5707963267949 +30 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-0.523598775598299 +30 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.523598775598299 +30 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +0.523598775598299 +25 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-0.523598775598299 +25 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-0.785398163397448 +40 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.785398163397448 +40 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-2076 +-1312 +50 +8 +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-2076 +-1312 +50 +8 +WHhyhUoWo0iDDhj6FaqW/gAA + + + +clMaroon +$00B9FFFF +136,244;136,262 +Htop0thy70qsJ36MwSIctgAA +0JMCaRFeCk+HcMqp5TyNyAAA +ugI2euwM3Ey7T7DNJ++xmgAA + +False +1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +1.5707963267949 +30 +Htop0thy70qsJ36MwSIctgAA + + +False +-1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +-0.523598775598299 +30 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.523598775598299 +30 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +0.523598775598299 +25 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-0.523598775598299 +25 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-0.785398163397448 +40 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.785398163397448 +40 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-2076 +-1312 +50 +8 +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-2076 +-1312 +50 +8 +bDyGtYJmuUiVC+pPkc7oHgAA + + + +clMaroon +$00B9FFFF +77 +76 +121 +45 +aUVRiLFY4USAN9h1PY1/vAAA + + +1 +multi-lang + + +False + + +False + + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + + +clMaroon +$00B9FFFF +137,120;137,138 ++nJDFiS7VECOJ4vWaYvszgAA +qudITNuevEOUiPdD67icGQAA +4gxKHPiS4kKv1jznPUiVLAAA + +False +1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +1.5707963267949 +30 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-0.523598775598299 +30 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.523598775598299 +30 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +0.523598775598299 +25 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-0.523598775598299 +25 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-0.785398163397448 +40 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.785398163397448 +40 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-2068 +-1288 +50 +8 +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-2068 +-1288 +50 +8 +VvsNJNyOO0e86/eHwYM58QAA + + + +clMaroon +$00B9FFFF +92 +52 +109 +23 +after-dev-procedure + + + + + +publish-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +dzXgTAQgkku8i81bEq7qFAAA +11 + +clMaroon +58 +42 +196 +353 +System + + +clMaroon +$00B9FFFF +91 +137 +131 +45 +lEIXTXT9L0CS9sEhjP/8NQAA + + +1 +pkg-repo-sync + + +False + + +False + + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + + +clMaroon +$00B9FFFF +89 +204 +135 +45 +jmiilGYeBU+1y4Yw2n8CKAAA + + +1 +download-build + + +False + + +False + + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + + +clMaroon +$00B9FFFF +85 +271 +142 +45 +RfRTk7cK0061dLioGm8l7wAA + + +1 +loopbak-testing + + +False + + +False + + + +False +RfRTk7cK0061dLioGm8l7wAA + + +False +RfRTk7cK0061dLioGm8l7wAA + + +False +RfRTk7cK0061dLioGm8l7wAA + + + +clMaroon +$00B9FFFF +93 +338 +127 +45 +G18zTBUAj0+SdrsOmksR0QAA + + +1 +publish + + +False + + +False + + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + + +clMaroon +$00B9FFFF +156,181;156,204 +t/ADlzXN00KW0NiGhwkclQAA +vblLAfzXRUOgCjpCebaQyAAA +VXT22UgSZE6QUG18w3YrRQAA + +False +1.5707963267949 +15 +t/ADlzXN00KW0NiGhwkclQAA + + +False +1.5707963267949 +30 +t/ADlzXN00KW0NiGhwkclQAA + + +False +-1.5707963267949 +15 +t/ADlzXN00KW0NiGhwkclQAA + + +False +-0.523598775598299 +30 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +0.523598775598299 +30 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +0.523598775598299 +25 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +-0.523598775598299 +25 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +-0.785398163397448 +40 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +0.785398163397448 +40 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +-2032 +-1468 +50 +8 +LL86l17PZku+YBsr/fUklwAA + + +False +-2032 +-1468 +50 +8 +bvYo1TGY6U2Io35TQ/yATAAA + + + +clMaroon +$00B9FFFF +156,248;155,271 +5n9wkh0NQUu8BFWyytdErgAA +obfQS5n3b0uAe1Y1fNtQ1gAA +vblLAfzXRUOgCjpCebaQyAAA + +False +1.5707963267949 +15 +5n9wkh0NQUu8BFWyytdErgAA + + +False +1.5707963267949 +30 +5n9wkh0NQUu8BFWyytdErgAA + + +False +-1.5707963267949 +15 +5n9wkh0NQUu8BFWyytdErgAA + + +False +-0.523598775598299 +30 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +0.523598775598299 +30 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +0.523598775598299 +25 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +-0.523598775598299 +25 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +-0.785398163397448 +40 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +0.785398163397448 +40 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +-2032 +-1468 +50 +8 +P+S209BDDkSnrN4WPl8+WAAA + + +False +-2032 +-1468 +50 +8 +UYbXc0CahESM869EpDq6lwAA + + + +clMaroon +$00B9FFFF +155,315;156,338 +1QbYYnq3ykqiPL0Gv6UkSwAA +M4HlmVZXi0yRAE9UMU0zRgAA +obfQS5n3b0uAe1Y1fNtQ1gAA + +False +1.5707963267949 +15 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +1.5707963267949 +30 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +-1.5707963267949 +15 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +-0.523598775598299 +30 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +0.523598775598299 +30 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +0.523598775598299 +25 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +-0.523598775598299 +25 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +-0.785398163397448 +40 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +0.785398163397448 +40 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +-2032 +-1468 +50 +8 +2J0+TPdjaECdzYN0YQ2guQAA + + +False +-2032 +-1468 +50 +8 +WMjnuHQF3kiQvKAfM+S81wAA + + + +clMaroon +$00B9FFFF +73 +70 +166 +45 +bjrraLbGKUSY+GYzLNk5RAAA + + +1 +launch-pkg-publish + + +False + + +False + + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + + +clMaroon +$00B9FFFF +155,114;156,137 +4wmxJ9R9R0eU6Jn8Ho3xFwAA +VXT22UgSZE6QUG18w3YrRQAA +ZCA8lMYtvkK0TOXL+AgswwAA + +False +1.5707963267949 +15 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +1.5707963267949 +30 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +-1.5707963267949 +15 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +-0.523598775598299 +30 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +0.523598775598299 +30 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +0.523598775598299 +25 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +-0.523598775598299 +25 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +-0.785398163397448 +40 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +0.785398163397448 +40 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +-1876 +-1508 +50 +8 +7JwpGqJmgku60xKurQDyPwAA + + +False +-1876 +-1508 +50 +8 +L7xnZ29mQEadCI+TRP2QQAAA + + + +clMaroon +$00B9FFFF +106 +46 +96 +23 +publish-procedure + + + + + +design-prodedure +yePcB6NdXUG1SBs2wQJA7gAA + +xDqjmnV1EE274hI5eX4EuQAA +3 + +clMaroon +$00B9FFFF +46 +38 +200 +300 +System + + +clMaroon +$00B9FFFF +102 +90 +70 +32 +GB5fgt+BCEuZu+MykpdKRQAA + + +1 +design + + +False + + +False + + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + + +clMaroon +$00B9FFFF +94 +42 +94 +23 +design-procedure + + + + + +bug-report-task +yePcB6NdXUG1SBs2wQJA7gAA + +PW8yW9pEYkid5X6nOzwaKwAA +5 + +clMaroon +$00B9FFFF +56 +48 +200 +300 +System + + +clMaroon +$00B9FFFF +88 +52 +115 +23 +bug-report-procedure + + + +clMaroon +$00B9FFFF +108 +96 +101 +32 +bX1Gcdx2ME+p8q+9ZuNdKAAA + + +1 +bug-report + + +False + + +False + + + +False +bX1Gcdx2ME+p8q+9ZuNdKAAA + + +False +bX1Gcdx2ME+p8q+9ZuNdKAAA + + +False +bX1Gcdx2ME+p8q+9ZuNdKAAA + + + +clMaroon +$00B9FFFF +88 +161 +131 +32 +5Yonx0jXgUiliXhd1LHAEgAA + + +1 +bug-re-testing + + +False + + +False + + + +False +5Yonx0jXgUiliXhd1LHAEgAA + + +False +5Yonx0jXgUiliXhd1LHAEgAA + + +False +5Yonx0jXgUiliXhd1LHAEgAA + + + +clMaroon +$00B9FFFF +104 +220 +106 +32 +TiqUoHnaOUevV4hK4Dz2MgAA + + +1 +bug-submit + + +False + + +False + + + +False +TiqUoHnaOUevV4hK4Dz2MgAA + + +False +TiqUoHnaOUevV4hK4Dz2MgAA + + +False +TiqUoHnaOUevV4hK4Dz2MgAA + + + + +43 + +Analysis Model +UMLStandard +analysisModel +yePcB6NdXUG1SBs2wQJA7gAA +23 + +build-pkg +BSZfgYLf+UenyGFbr+pLkAAA +1 +d80+2bpPQEWd7xFbiS1W/QAA +1 + +build-pkg +dDcpfNoxBUqy9oolGaPx0gAA + +li5qOhdL3EywRkIibb85HgAA + + +5 +MNWsgkXOBkGGgVZDdul4wwAA +sbGMwLTYC0iPKxhMH07wNwAA +msQ48rxqPEu61hvT3MeGjAAA +hgxswP4hVESXBm2wFWvVcwAA +D7TjLucAs0GEm5kB3a48nQAA +1 +5gOKGIQCUUm9L2zzA0ihPwAA +3 +gE0dxYNQQk6+JMyejPbD0AAA +1+gcf+vp9UmuwKSWYw/q2AAA +SylI2hFzwEeEyBv836BczAAA + + +build-config +BSZfgYLf+UenyGFbr+pLkAAA +1 +7JSGJYt6DkKIltRHc7ZjjwAA +1 + +build-config +MNfuyG0iBUiHZjmp8cHgZAAA + +Rue74u4PaUuHI0nqxQePdgAA + + +1 +hgxswP4hVESXBm2wFWvVcwAA + + +build-pkglist +BSZfgYLf+UenyGFbr+pLkAAA +1 +0p/90i+HQk+PTlMz5cboYQAA +1 + +build-pkglist +ulDQuuX3NUK3rZULACE1rwAA + +FtQxKj4yUkaT6NimaKKVfQAA + + +2 +5gOKGIQCUUm9L2zzA0ihPwAA +e6psiYw1mUqAWpE0+BvMzwAA +1 +u8pcfLoZm0et+dZoEh63EQAA + + +CCompilerCollection +BSZfgYLf+UenyGFbr+pLkAAA +1 +J1vjbeNnkkCOD1TmM672AwAA +1 + +CCompilerCollection +8GaHfoYho0OH58Fb/r1/wwAA + +mSd/X6+k/EGNlLgYdDkzTQAA + + +1 +msQ48rxqPEu61hvT3MeGjAAA + + +devutils +BSZfgYLf+UenyGFbr+pLkAAA +1 +s24sB0NbR0qJ0UXqzyR5QAAA +1 +MNWsgkXOBkGGgVZDdul4wwAA +1 +wQbKSnCSekyKjTFeI7tFhAAA + + +build-ext-utils +BSZfgYLf+UenyGFbr+pLkAAA +1 +micWrkg2dEqol44gMrgRnwAA +1 +sbGMwLTYC0iPKxhMH07wNwAA + + +soft-repo +BSZfgYLf+UenyGFbr+pLkAAA +1 +1OJ+jtvJzUOTUnGRNLZx9QAA +1 + +soft-repo +nEPUg6e8b0iEP7HhfuJnQgAA + +IxfADsYcqUOzQeMV371fvQAA + + +1 +wObYeAYwXEqWEKmMI+cCBQAA + + +code-mngr +BSZfgYLf+UenyGFbr+pLkAAA +1 +Mp32K0T3yUeiTjZXRy3GmAAA +1 + +code-mngr +fSDUjRTS0EuzKA5KD1YWegAA + +NR89VNkpPUKOxB+nia9hiwAA + + +1 +al7Ey6vM+kaiJQHEFZ17rwAA +1 +D7TjLucAs0GEm5kB3a48nQAA +1 +7tt1GtqhUkiRGXNftPMzmwAA + + +build-res +BSZfgYLf+UenyGFbr+pLkAAA +1 +/FD1CIRw00KUpr3wg3YqqQAA +2 +al7Ey6vM+kaiJQHEFZ17rwAA +e6psiYw1mUqAWpE0+BvMzwAA +3 +vEc8G/U42EKSe8lYsfqw+AAA +9nKgADD4c0K1Ju7SAno9nAAA +OCj2SIVuA0+GWCgP6VtYXwAA + + +BSZfgYLf+UenyGFbr+pLkAAA +ulDQuuX3NUK3rZULACE1rwAA +dDcpfNoxBUqy9oolGaPx0gAA +4 +UoBCufIUMEuVh02PZFeaLQAA +1I+XikHN9kK/t6EfmCSl2AAA +Yhj6u4aCR0a1cYZT4RlFUAAA +/oNB7nuz/EmsI+XHW9mNwgAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +FvqLDu2fxEWj6v1E//JLVAAA +4 +12RF249Lw0G6nu4rpS0PKQAA +TSYZvuWGT063HQhrZXnwswAA +Wh9uDcTiKke8indOdnLx+AAA +dNi0biCobUCHtgHLSB4DowAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +3VktYBg6c0GafkkhrKd5LAAA +4 +zH3LB5Kp+k+RtXF8y3gBJQAA +AFlPvmqXa0WcUJlrCLmd4gAA +93ZyTLwkFUSUCB69LWQQqwAA +LeBR8Xe4KUev5/e3MjUcRQAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +8GaHfoYho0OH58Fb/r1/wwAA +4 +AHnGqbO0/kGTU4QKEsYScwAA +Y7RbLVN23kGR9SWr289rrwAA +2x2sZtHy80usYPz3kI3z1QAA +BK5Y9Y56EkGsokfaRnlDewAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +MNfuyG0iBUiHZjmp8cHgZAAA +4 +8R86nCYMXEGWqEfjdEptdwAA +BaxvJ+mHB0edJuGJJnWXpwAA +swRIhR69xECXY7Hm0VdU1gAA +Msy3y/jcvk6HuMMb9QenZwAA + + +BSZfgYLf+UenyGFbr+pLkAAA +2 + +L1yiPMYx6EyAA2xxRTEU0QAA +dDcpfNoxBUqy9oolGaPx0gAA + + +L1yiPMYx6EyAA2xxRTEU0QAA +fSDUjRTS0EuzKA5KD1YWegAA + + + +BSZfgYLf+UenyGFbr+pLkAAA +4 +FkxkrPmiAkyXlKNWMG0ZKgAA +7qRjaiz8Y02/8IjPJip+RwAA +hyaO0HgmIkahhBHyYzcUvgAA +TfDa35ItK0KUm+1ADO7gLgAA +2 + +R1zBdkBAwk+mm7+XQTKYmwAA +dDcpfNoxBUqy9oolGaPx0gAA +4 +vkWvz4Be7EKnjG09HAI0lwAA +GYmL2i5aQUaxGKAzQuX9egAA +yjKcGdY8ekKPVZWWLqM/6wAA +f5y2gp278kuHvg4nM8S4nQAA + + +R1zBdkBAwk+mm7+XQTKYmwAA +pvhDF96KaEGykg05qmd3jwAA +4 +nMOdDXc1F0SDNw9WnnOG9AAA +VZF+TVC/iEK1We2bIp7d4gAA +UKH5CQTTbE+GpcuqPCsccAAA +TGNi2j7+dEKt9AixnFgTTQAA + + + +BSZfgYLf+UenyGFbr+pLkAAA +4 +WwhFha+1WECbLD243p2h3AAA +6jt28ExI0kyKCW146he6rAAA +6SspI/hB80+l7hPostMZ9gAA +4qL44fMXlUqi569NEIKm/gAA +2 + +SN9GhsPG3EaOZFcQPgCPJQAA +dDcpfNoxBUqy9oolGaPx0gAA +4 +R4xBqApf3EGTaQ3BUUbbgQAA ++4qoi2mJvkutuLRgEKTKvAAA +3eKQsHPkq0C3GhsNVgjTAwAA +wkqwWuTZ7E6Ya9xY2tS+dAAA + + +SN9GhsPG3EaOZFcQPgCPJQAA +nEPUg6e8b0iEP7HhfuJnQgAA +4 +/mEKF2CdXkO+qvCXd5BlyQAA +b4mEYJOuLEWElIBAR+wsTgAA +KokDYCjUO0GHYQRTHw1HmAAA +q/gj0Y/d20yrOBJ5JToeqQAA + + + +BSZfgYLf+UenyGFbr+pLkAAA +fSDUjRTS0EuzKA5KD1YWegAA +pvhDF96KaEGykg05qmd3jwAA + + +BSZfgYLf+UenyGFbr+pLkAAA +ulDQuuX3NUK3rZULACE1rwAA +pvhDF96KaEGykg05qmd3jwAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +fSDUjRTS0EuzKA5KD1YWegAA +4 +yxB73q7LmEq5bftoZyqChgAA +l8o/vkzEVEuW8Z0ESj9HlQAA +0q4mfT8180OBC/2k9nwvzQAA +gSGj8mQyA0eW4arWOFjxmgAA + + +BSZfgYLf+UenyGFbr+pLkAAA +4 +2EmKz1gekUeBYNJEqwk5ywAA +kaZVmwnTuk21j+2fm8qGzgAA +0wFWC8ZHbEuWnNks6iXbJQAA +iXf7s60RO0OEUR4JwNRbOwAA +2 + +aKvfewyzgE2DFbpbrUqRcgAA +pvhDF96KaEGykg05qmd3jwAA +4 +D424m/G3KUiG7LYqWvtilAAA +slHTOpURSEicm2werij8XQAA +s539IwA/MEWjk5PR3mNPOwAA +mCCnjuKULEOwMSaiZkDCRAAA + + +aKvfewyzgE2DFbpbrUqRcgAA +FvqLDu2fxEWj6v1E//JLVAAA +4 +amM0V48QtE+LtX1V+NpK4wAA +dR3D81mWLU67Hzigg8FXxwAA +m+pLG91QP02bu5lY6KLSzAAA +f8W0J6x6VkWJOhnZZGnsGAAA + + + +BSZfgYLf+UenyGFbr+pLkAAA +4 +q9EN5ZUrgkW1YBaEUlNSJgAA +i35rwePtn0e2dmudkVnb+wAA +5mvXcya1M0md/uA7y2TQIQAA +yA/VGm7Eu0yzqagLfS1FigAA +2 + +MzbhBShYo0uTBm9zBJ3IJQAA +ulDQuuX3NUK3rZULACE1rwAA +4 +GndO5+L+XEGYZWuYTo8WZwAA +tq9xchL8WEuHonDjf5BVYAAA +Ur81kW6jjk6GTIC91ukrnwAA +Q3b6JPtGzEqX1L0AOqdNsAAA + + +MzbhBShYo0uTBm9zBJ3IJQAA +pvhDF96KaEGykg05qmd3jwAA +4 +HmJC5ge6e0qQIGXY9346rQAA +FAQVL0M1NUm4ZIaW+4XhQgAA +n5u114I+7U6Bpr9OeXawtgAA +z9YPw3YbgEKyQzl2yX31/wAA + + + +pkg-builder +BSZfgYLf+UenyGFbr+pLkAAA +1 +ccqDzWrIbU67QDaF1jCh3gAA +1 + +pkg-builder +T8bTYhwSAkKMom5PJGDBkAAA + +o+rsUkl11kGIPjXPPm66KAAA +22 + +clMaroon +64 +24 +685 +401 +T8bTYhwSAkKMom5PJGDBkAAA + + +pkg-builder + + +False + + +False + + + + +clMaroon +$00B9FFFF +456 +208 +120 +70 +dDcpfNoxBUqy9oolGaPx0gAA + + +build-pkg + + +False + + +False + + + + +clMaroon +$00B9FFFF +316 +208 +120 +70 +MNfuyG0iBUiHZjmp8cHgZAAA + + +build-config + + +False + + +False + + + + +clMaroon +$00B9FFFF +456 +84 +120 +70 +ulDQuuX3NUK3rZULACE1rwAA + + +build-pkglist + + +False + + +False + + + + +clMaroon +$00B9FFFF +316 +332 +120 +70 +8GaHfoYho0OH58Fb/r1/wwAA + + +CCompilerCollection + + +False + + +False + + + + +clMaroon +$00B9FFFF +608 +332 +120 +70 +FvqLDu2fxEWj6v1E//JLVAAA + + +devutils + + +False + + +False + + + + +clMaroon +$00B9FFFF +176 +332 +120 +70 +3VktYBg6c0GafkkhrKd5LAAA + + +build-ext-utils + + +False + + +False + + + + +clMaroon +$00B9FFFF +608 +84 +120 +70 +nEPUg6e8b0iEP7HhfuJnQgAA + + +soft-repo + + +False + + +False + + + + +clMaroon +$00B9FFFF +456 +332 +120 +70 +fSDUjRTS0EuzKA5KD1YWegAA + + +code-mngr + + +False + + +False + + + + +clMaroon +$00B9FFFF +608 +208 +120 +70 +pvhDF96KaEGykg05qmd3jwAA + + +build-res + + +False + + +False + + + + +clMaroon +$00B9FFFF +515,153;515,208 +5gOKGIQCUUm9L2zzA0ihPwAA +d80+2bpPQEWd7xFbiS1W/QAA +0p/90i+HQk+PTlMz5cboYQAA + +False +1.5707963267949 +15 +5gOKGIQCUUm9L2zzA0ihPwAA + + +False +1.5707963267949 +30 +5gOKGIQCUUm9L2zzA0ihPwAA + + +False +-1.5707963267949 +15 +5gOKGIQCUUm9L2zzA0ihPwAA + + + +clMaroon +$00B9FFFF +558,277;625,332 +MNWsgkXOBkGGgVZDdul4wwAA +s24sB0NbR0qJ0UXqzyR5QAAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +MNWsgkXOBkGGgVZDdul4wwAA + + +False +1.5707963267949 +30 +MNWsgkXOBkGGgVZDdul4wwAA + + +False +-1.5707963267949 +15 +MNWsgkXOBkGGgVZDdul4wwAA + + + +clMaroon +$00B9FFFF +456,268;295,339 +sbGMwLTYC0iPKxhMH07wNwAA +micWrkg2dEqol44gMrgRnwAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +sbGMwLTYC0iPKxhMH07wNwAA + + +False +1.5707963267949 +30 +sbGMwLTYC0iPKxhMH07wNwAA + + +False +-1.5707963267949 +15 +sbGMwLTYC0iPKxhMH07wNwAA + + + +clMaroon +$00B9FFFF +475,277;413,332 +msQ48rxqPEu61hvT3MeGjAAA +J1vjbeNnkkCOD1TmM672AwAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +msQ48rxqPEu61hvT3MeGjAAA + + +False +1.5707963267949 +30 +msQ48rxqPEu61hvT3MeGjAAA + + +False +-1.5707963267949 +15 +msQ48rxqPEu61hvT3MeGjAAA + + + +clMaroon +$00B9FFFF +456,242;435,242 +hgxswP4hVESXBm2wFWvVcwAA +7JSGJYt6DkKIltRHc7ZjjwAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +hgxswP4hVESXBm2wFWvVcwAA + + +False +1.5707963267949 +30 +hgxswP4hVESXBm2wFWvVcwAA + + +False +-1.5707963267949 +15 +hgxswP4hVESXBm2wFWvVcwAA + + + +clMaroon +$00B9FFFF +575,242;608,242 +R1zBdkBAwk+mm7+XQTKYmwAA +/FD1CIRw00KUpr3wg3YqqQAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +R1zBdkBAwk+mm7+XQTKYmwAA + + +False +1.5707963267949 +30 +R1zBdkBAwk+mm7+XQTKYmwAA + + +False +-1.5707963267949 +15 +R1zBdkBAwk+mm7+XQTKYmwAA + + +False +-0.523598775598299 +30 +epHead +vEc8G/U42EKSe8lYsfqw+AAA + + +False +0.523598775598299 +30 +epTail +1+gcf+vp9UmuwKSWYw/q2AAA + + +False +0.523598775598299 +25 +epHead +vEc8G/U42EKSe8lYsfqw+AAA + + +False +-0.523598775598299 +25 +epTail +1+gcf+vp9UmuwKSWYw/q2AAA + + +False +-0.785398163397448 +40 +epHead +vEc8G/U42EKSe8lYsfqw+AAA + + +False +0.785398163397448 +40 +epTail +1+gcf+vp9UmuwKSWYw/q2AAA + + +False +-1000 +-1000 +50 +8 +vEc8G/U42EKSe8lYsfqw+AAA + + +False +-1000 +-1000 +50 +8 +1+gcf+vp9UmuwKSWYw/q2AAA + + + +clMaroon +$00B9FFFF +557,208;624,153 +SN9GhsPG3EaOZFcQPgCPJQAA +1OJ+jtvJzUOTUnGRNLZx9QAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +SN9GhsPG3EaOZFcQPgCPJQAA + + +False +1.5707963267949 +30 +SN9GhsPG3EaOZFcQPgCPJQAA + + +False +-1.5707963267949 +15 +SN9GhsPG3EaOZFcQPgCPJQAA + + +False +-0.523598775598299 +30 +epHead +wObYeAYwXEqWEKmMI+cCBQAA + + +False +0.523598775598299 +30 +epTail +SylI2hFzwEeEyBv836BczAAA + + +False +0.523598775598299 +25 +epHead +wObYeAYwXEqWEKmMI+cCBQAA + + +False +-0.523598775598299 +25 +epTail +SylI2hFzwEeEyBv836BczAAA + + +False +-0.785398163397448 +40 +epHead +wObYeAYwXEqWEKmMI+cCBQAA + + +False +0.785398163397448 +40 +epTail +SylI2hFzwEeEyBv836BczAAA + + +False +-1000 +-1000 +50 +8 +wObYeAYwXEqWEKmMI+cCBQAA + + +False +-1000 +-1000 +50 +8 +SylI2hFzwEeEyBv836BczAAA + + + +clMaroon +$00B9FFFF +515,277;515,332 +D7TjLucAs0GEm5kB3a48nQAA +Mp32K0T3yUeiTjZXRy3GmAAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +D7TjLucAs0GEm5kB3a48nQAA + + +False +1.5707963267949 +30 +D7TjLucAs0GEm5kB3a48nQAA + + +False +-1.5707963267949 +15 +D7TjLucAs0GEm5kB3a48nQAA + + + +clMaroon +$00B9FFFF +667,277;667,332 +aKvfewyzgE2DFbpbrUqRcgAA +s24sB0NbR0qJ0UXqzyR5QAAA +/FD1CIRw00KUpr3wg3YqqQAA + +False +1.5707963267949 +15 +aKvfewyzgE2DFbpbrUqRcgAA + + +False +1.5707963267949 +30 +aKvfewyzgE2DFbpbrUqRcgAA + + +False +-1.5707963267949 +15 +aKvfewyzgE2DFbpbrUqRcgAA + + +False +-0.523598775598299 +30 +epHead +wQbKSnCSekyKjTFeI7tFhAAA + + +False +0.523598775598299 +30 +epTail +9nKgADD4c0K1Ju7SAno9nAAA + + +False +0.523598775598299 +25 +epHead +wQbKSnCSekyKjTFeI7tFhAAA + + +False +-0.523598775598299 +25 +epTail +9nKgADD4c0K1Ju7SAno9nAAA + + +False +-0.785398163397448 +40 +epHead +wQbKSnCSekyKjTFeI7tFhAAA + + +False +0.785398163397448 +40 +epTail +9nKgADD4c0K1Ju7SAno9nAAA + + +False +-1000 +-1000 +50 +8 +wQbKSnCSekyKjTFeI7tFhAAA + + +False +-1000 +-1000 +50 +8 +9nKgADD4c0K1Ju7SAno9nAAA + + + +clMaroon +$00B9FFFF +558,153;625,208 +MzbhBShYo0uTBm9zBJ3IJQAA +/FD1CIRw00KUpr3wg3YqqQAA +0p/90i+HQk+PTlMz5cboYQAA + +False +1.5707963267949 +15 +MzbhBShYo0uTBm9zBJ3IJQAA + + +False +1.5707963267949 +30 +MzbhBShYo0uTBm9zBJ3IJQAA + + +False +-1.5707963267949 +15 +MzbhBShYo0uTBm9zBJ3IJQAA + + +False +-0.523598775598299 +30 +epHead +OCj2SIVuA0+GWCgP6VtYXwAA + + +False +0.523598775598299 +30 +epTail +u8pcfLoZm0et+dZoEh63EQAA + + +False +0.523598775598299 +25 +epHead +OCj2SIVuA0+GWCgP6VtYXwAA + + +False +-0.523598775598299 +25 +epTail +u8pcfLoZm0et+dZoEh63EQAA + + +False +-0.785398163397448 +40 +epHead +OCj2SIVuA0+GWCgP6VtYXwAA + + +False +0.785398163397448 +40 +epTail +u8pcfLoZm0et+dZoEh63EQAA + + +False +-1000 +-1000 +50 +8 +OCj2SIVuA0+GWCgP6VtYXwAA + + +False +-1000 +-1000 +50 +8 +u8pcfLoZm0et+dZoEh63EQAA + + + +clMaroon +84 +52 +217 +278 +associate: relationship of using +dependence: running dependence. + +@ build-pkglist: it is used for building + large number of pkgs. +@ build-pkg: it is used for single pkg, + or a software with several pkgs. +@ build-config: config util for build-pkg + and build-pkglist. it like menuconfig + in 'linux-kernel' or 'buildroot'. +@ build-ext-utils, CCompilerCollection + the basical gnu pkgs running for + build-pkg. +@ code-mngr: tools like SVN/git. +@ devutils: programs used in develop. +@ soft-repo: a tool like apt-get. it + manages the src or exe pkg files + for user or developer + + + +clMaroon +316 +68 +131 +133 +@ build-res: extention + of code temlate file, + code format file, + project sample, + system distribution + pkg-list info. + + + + + + + +dev-initial-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +Rq0Cydd7nEKOfOgn8htc8QAA +2 +9OsI3YefmEShu4VA2aYWsgAA +wVShJ+TldkiCQjPWrQHwugAA + + +design-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +05y9pi2UcU6ptxllVr+G/gAA +2 +IJastPE4CkGI6UtKXQb+xgAA +I2MiL+bJOEWcCQW8PlUaEAAA + + +develop-procedure +yePcB6NdXUG1SBs2wQJA7gAA +2 +LdINJygfWEW3vhPOZonupQAA +TTYozwHvrUuniRYLcHLDwgAA +5 +d4BprJk1YUek3SfLLsVZ4QAA +770F/tljqkKHqvtGDTfVzAAA +gcJyB+Iyk02GIY0VRlqRGgAA +BPf4vCTXTUSPQUWNKaCQDQAA +6XJvWCMrykCACsZlVke/PAAA + + +testing-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +0eY6HnBo4kSNrbtAFd/AoQAA +3 +/pztn/xQEUmMs4TaAXsCagAA ++IilmFj9BEyQ3rGjS6FoBwAA +1IsgVb2s8Ui+xnl92d08gQAA + + +document-procedure +yePcB6NdXUG1SBs2wQJA7gAA +2 +Y9Di27a99UCLuicgXHRPbQAA +tQieUJFUIUWjBNmfDel6vwAA +3 +avTqriQFjUueOCz6jCc/IwAA +8MwPX9NZj0SQu64mihvgxAAA +KCe+sJFeFUW7JorDZydAQQAA + + +publish-procedure +yePcB6NdXUG1SBs2wQJA7gAA +3 +T2cKdPg1Bk+hDccckoYQ5QAA +4JaPx8QgwEWT8vCziLxdSQAA +Q9Jt8tCpI0KztPNZg/DB7QAA +2 +ZJ10cvLftEKNjkYS8UBeogAA +j0eu/Ys1xkyBAac51lq70AAA + + +analysis-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +pkAZPt0EzUO5vbW8/2ISDgAA +1 +OH+C5n4Y3k61fQSZesUVxwAA + + +after-develop-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +bVEp4IVtuku6zzGEpqhBjgAA + + +initial-develop-task +yePcB6NdXUG1SBs2wQJA7gAA + + +bugfix-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +n/wO/s227keDkWnSaoMPFwAA +sVfJQGL/iEmAQIELtumavgAA +tRC4kQ89GUmsBaAGTfVeoQAA ++K+Sw8lGqEG5WmXZqf+lFQAA + + +publish-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +H35H/g998EO5+b+My/9TGwAA +dT4il+6/Gk+54ilEECXeewAA +Ne7JwDq7qUGFKV22/VvzWQAA +3NKcWi2ax0OdHq9842Z0nQAA + + +document-task +yePcB6NdXUG1SBs2wQJA7gAA +4 ++UDQJ377E0yfeyDDN+u8twAA +BGoBs6YePUulGOuXefEg5gAA +lEULUtfhO02wKvtZ95If0QAA +BgV7xtxh2ka6fAVka31AOAAA + + +traslation-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +LdVy/adykEu3BEUiOmsYBgAA +umhkgUahRUGia9WqIF9RGwAA +RCJ0RKClMUyQKGB/551t5gAA +/ErrPXm43EePkfQzcWwL2AAA + + +testing-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +8LIFapZp5k6ylbwQfcyklgAA +yG5w39tpzUq7mH0dMD3LKQAA +oV8haZAwFUKZLy08zi9zHwAA +xgmQ4XcO80abByGugCvNwwAA + + +bug-report-task +yePcB6NdXUG1SBs2wQJA7gAA +2 +5MFFfKGii0alC9QQCQ0N3AAA +OO7ku5gAkUOUNTByzbCZzgAA +4 +fX++8JJ/Wk2XNALtMhEEnAAA +LOhftqHbTkmRcNDOgH9duwAA +SG8bVsROWE+5+iyuVGPkBQAA +51zN/AjS8UKGQuZi3cgptgAA + + +submit-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +FcnkDLlWXkuemMb1lINg6QAA +V3kWQPOe/US5PHdGE7locgAA +A9Xi58dfWUOFOmaH2Il2mAAA +owbsNU+5zUGnyygVL7ilEQAA +1 +YezoOUqiMEqMfQ47zgiYggAA + + +Package1 +yePcB6NdXUG1SBs2wQJA7gAA + + +end-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +R1Mz4YKyKEmXSdZTt+wNQAAA +VVMSz+fOjEOPmsK8rHI/CwAA +ohgB73ZMBEKDfGlAvrGFnwAA +265oLtp1wk+oxG6a1qIXDwAA +1 +ivchHpb/m0Oy82i37nw/zwAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +025tw+SNKEeyfy1pnVGMKAAA +YW1g9W10e0iNO/ea6DgvHAAA +hFdIbk7pck+2OrNaE64I0wAA +IklW3RNZDkqcxJgfsnGscAAA +2 + +False +ZX2SocfyGUGaYAoZdJTHCQAA +al6ONjrnZ02miWcUt8E4UAAA +4 +2+NTtvtW0EatqcSImsHefwAA +HpvotWVYM02PDGo3mVX5kwAA +oEdmDOZefE631sKpYFBoqAAA +j8lQXe1i+0C9CsU8A2pptwAA + + +ZX2SocfyGUGaYAoZdJTHCQAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +rD+S3LApaU+zSssJbTrXCwAA +S2/SQOWvGESHD1k3mAEdbwAA +dL96wrCSU0iYUVDRWiRhAgAA +VQ523fg0+0KHuVBn2+43PwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +zqAe+m77BE6nGviJYImfNQAA +buhjG2iRaEaCwxkynVO//QAA +jFmE1K4uK0u4drmwB2JYIQAA +GUCOa986mEe9QMx07aUbxgAA +2 + +False +V+JDAD1y1kGhDKjzLQ2kzwAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +OCE3hcdvq02skR3zpPHmpgAA +f1EoQ648HkiLCrjKBIP+BgAA +juPsP1miqEaFzDk6dldK+wAA +l+5SGXCzx0+Yi2fLdGNmUwAA + + +V+JDAD1y1kGhDKjzLQ2kzwAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +wRqEXhf2hECvN9jA1VKk+gAA +SocYv+jFlk+oa/+FbSWLAwAA +vtC5YpRhc0ya8y3wZNH85QAA +C6d/tyH6BUyykc83TnqpDQAA + + + +new-feature-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +cgzV1Cjm1E+TvgDTXT4Z/AAA +gOS3u3FsTkaxLks+tNLf3gAA +fpb5Nfhk3UWR8BQO44zXUAAA +ACmDJDLCfEm8xvezwSa4wAAA + + +initial-dev-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +WZ6Nv0dBuES8PyEoPwv1hAAA +Q5sbq+MJM0m32AXCRIw2ggAA +ApqLEo2bbkyP7ixAkGIEvwAA +1r18Q4ZaWEeRGppfm0yOsAAA + + +launch-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +KCr/pN1eSU6K7QIqCdMUBwAA +qa60clm7RUCb3hX3eVDnzwAA +LI9do1VGH0OUyz5eqaXxWAAA +fKtr7DTTeUWI99RFbukSZgAA + + +bug-report +yePcB6NdXUG1SBs2wQJA7gAA +4 +C20w/XrBX0mAaNgTr9yhLQAA +Uupz/901ZE+XIw4g1BAcRQAA ++xOjz2leC0iVpM7EWCrfPgAA +iNAwSjifbkW13w8FPylDPgAA + + +bug-re-testing +yePcB6NdXUG1SBs2wQJA7gAA +4 +buhigGknbES8XNgVLZlKLwAA +FSCr+o5e6U6a7He85XeDDgAA +iBRah/D6MUuSbI9OBTScBgAA +dxQdYgWxA0CgQInUC/IpCAAA + + +bug-submit +yePcB6NdXUG1SBs2wQJA7gAA +4 +mT+dBzveUUq78fBK8tyuCwAA +iC392Q5uY0ejDPkQ6yAuewAA +IjpkADEpeUm7SlOGUS/D1QAA +PxjcBM87dUW6TRg2CMyMtAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +xiYC8A1z2ECFHdLMG3LMpQAA +KWjTdOw10kyLoQy6wAmcdAAA +QJHLrr9nwEyU0kBqcoM+vAAA +UH6aR+zhfky4QpfTspBFqgAA +2 + +False +viIiAZ9C80y4tKd497zwFAAA +lNk1i5gHU02RiCDfZIsLEQAA +4 +44417kl8qECrc5gcDDCbpQAA ++blkZmc2+k2QyQMDY/PulgAA +LqM6XmWs30+GwMbeTmXqLAAA +hlUCIoyR8Eu0oeRLPCA7OwAA + + +viIiAZ9C80y4tKd497zwFAAA +h5aHoI2/GkuAptKzGDmHIwAA +4 +2o6HL83VUke2BWxMmz//2QAA +GWVtFiY2DUydFevhRauukgAA +UYxfjqoJMkS+eFmYuS/arwAA +WCGprCefxUqNxNUpIqPPMQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +LOc/5UF2RE6WxVPI5i3f2AAA +WIs46u9twU2kOrq4ziC4DQAA +4Hd7aaR47UKFuG1AHNHL4gAA +5OXPXPpBikSBHEcEoU6OLAAA +2 + +False +zhltSEBb90+T60/21ERiXQAA +h5aHoI2/GkuAptKzGDmHIwAA +4 +Peo8julEk0izHC02+xQo5AAA +PckVy4hMYEiUhVBRpMtgWAAA +zPtKPggnBEWDvFiH5dvHlAAA +P1qV9LjKr0miol86SsoISQAA + + +zhltSEBb90+T60/21ERiXQAA +NezC/3LDGUub0eLy4M8sOgAA +4 +FZ9qCJzBsUmmyg0wsTFYHAAA +slN9bskvh0KAvUcDNKikWwAA +uBVmFA4po02nFJ6nAyW7zAAA +tHPynh6pDEqcXKeMZBTCoQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +SxST++HSbEq7tRtqP6tp8QAA +Tr1u8sV+FEGZgLye/fDfFgAA +uDEp+Ynce02beNYRQMEjkwAA +M6JWSFfmB0WegWsY6MGqKQAA +2 + +False +IQdvD61jPEq7KzieVIPMnAAA +NezC/3LDGUub0eLy4M8sOgAA +4 +eC5I/hw63EGb2/tIaq7jqwAA +UBQeSX6eNkqkjdRgfgYjpwAA +DTw0yX91k0S4rgVogZtBSwAA +keNdO2E+Zkq6OP5ryQTaYgAA + + +IQdvD61jPEq7KzieVIPMnAAA +7jBLX6wjTkmObbw8i4xK0gAA +4 +YZjAwce8xUGRc9RG6KILwwAA +QhsMDcCiC0SilZYDHxZF/wAA +8559GMWlj0S65ehn1KzhKQAA +VbfvNzosnk+z8oj2qqkGNAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +yavSIuc8BU6mjFGRfwcbigAA +FBG5eKLnokqazjt/gSdntwAA +8CT1gagTgUaGN7D1zXjjlQAA +Z9j4/mmiMEGq/1QyJWrvoQAA +2 + +False +/HuYmDQGHEeXQIQr+1PRoQAA +7jBLX6wjTkmObbw8i4xK0gAA +4 +7toSXj7hI0SGqWJu0Hrb2gAA +lRaNJ55JcE2+aco3LVRPEwAA +ZiC5LNsSUk+FZYOug/J9wwAA +TjdjvmoiXEW8fUj/M9AHjwAA + + +/HuYmDQGHEeXQIQr+1PRoQAA +qG82m0zlPkqvT2acHPihkwAA +4 +gc2dvhJo5U2uwDSD598UNQAA +dbazKDL7nUCBQHm48yiO/QAA +1rATM7KuqE2OQ8OWGFlyfAAA +6/jDHm2AMEOGMeDrl0boxgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +afH0/Nq6IkuRpp+K6scJJAAA +VKh7LpFhYka/yUWbEMRTBAAA + + +afH0/Nq6IkuRpp+K6scJJAAA +7jBLX6wjTkmObbw8i4xK0gAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +j/leDwhhwkuQZTDyJEFl0gAA +kWr98hhnkkarrqCXK8/LIAAA +0QohAMhHdESBPJd1+PpX2AAA +5wjhE203GEiXoO2/BHMRQgAA +2 + +False +QnKEQWAvGUeHGbfSVIcc0gAA +7jBLX6wjTkmObbw8i4xK0gAA +4 ++CnoK3nCPECF21gcKhCVzQAA +OiunwgUwmUeWrYxyRqT+KQAA +5+GEf/Qe4UayEZBen8I9uAAA +cUBJlDrkk0Wuehk6kX+TvgAA + + +QnKEQWAvGUeHGbfSVIcc0gAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +l83fvVQ+6kuatnoT2IBpVAAA +TQnJqh383kmjYeT/91WexQAA +dud/hADOcESJYm+5PkpqQwAA +SL0BvbiWokiRIOSxw8CrdwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +1GhJXuWKL0CokaroBLxGNwAA +I4amOsGISUSsoOo88j4Z0QAA +5W2ul4FezkGUpNSL6TYfWAAA +ABGH7N76VEaYmnB5fB1yygAA +2 + +False +4uPxSnoEgUO3ovjSg4lAfgAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +5VXFG9SFTEqrgZWor68muAAA +mGP/7QyoMUu0V0J6De+h+AAA +LTRz/deb50iZdr6x1kb26QAA +sLPhlXbi9E2/+CFNsXYCIgAA + + +4uPxSnoEgUO3ovjSg4lAfgAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +wEFThTuAvUSViVvuda4kmQAA +zGEal+uubEaO7xLtV68NLwAA +nORCxAZvM0iMiY2y+0SfwwAA +zzBq2YLJw0u2SXPKrg83HAAA + + + +new-demond +yePcB6NdXUG1SBs2wQJA7gAA +4 +7uNpzIMfD0eMWIaeUbLlHQAA +CoDDnYyT8k+e37B6gDfRwwAA +AEWVoilfPk+nAdpLsV0CwQAA +BdS90sxroUOUWQjMZTYdzQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +TGB7/N63rEO/nWFXWUc5GwAA +qG82m0zlPkqvT2acHPihkwAA + + +TGB7/N63rEO/nWFXWUc5GwAA +VKh7LpFhYka/yUWbEMRTBAAA + + + +bug-report-task- +yePcB6NdXUG1SBs2wQJA7gAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +MuORoP61R0OsaeYLMDCl7gAA +o8F4GnogRkmyoRivq80I8gAA +DVsDsvtAxEuFS9yKd9yFhAAA +oVWauA9x2E2qEglF2ZDgEAAA +2 + +False +wamDBWad0EiNBPiMYvPoYQAA +qG82m0zlPkqvT2acHPihkwAA +4 +FYFKqkHuIE+3NtkMevwh8gAA +F/rcfI71lkaOlDALKRyGvwAA +y/3sLoxurkmF7W8QVQeGFAAA +wNjJO4cpoUG4zyJW10vv4gAA + + +wamDBWad0EiNBPiMYvPoYQAA +VKh7LpFhYka/yUWbEMRTBAAA +4 ++JcnWuOL6Ua0vcKq3AnqPAAA +AbqO/C672kONX5Mi2FbZ2QAA +bvgsB45GAUWn72xi0F8DwAAA +gKpRvq3Wtke/YRFjIPcBjwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +Z1Oi371va0Wir60qC+nM1gAA +f/z1m4NMYEKJnnjr+0UN9AAA +PkI7i9fOlUC/h1Ub3/JHuwAA +N2XZxMgaBkS6wbjtWcXjtwAA +2 + +False +RPaUCtwDgE+7Y3vewD8uWQAA +VKh7LpFhYka/yUWbEMRTBAAA +4 +1JyKB5qSqUGgyixgwqrr4QAA +uUlgSVv9A0O8qqHGPqY/lQAA +smQzJNghMEGh+a5mlwOEDAAA +MfZLmjPihUyj8tck8q+9DwAA + + +RPaUCtwDgE+7Y3vewD8uWQAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +hIEi63PUsUq/5VuNe91rswAA +8/FTvIbKkEOm7haEILRhUAAA +9J5Hn+PxpkG+ZtedOkQ6EgAA +DRdGsJaoRU6bj9Ny8RvVzQAA + + + +dev-estimat +yePcB6NdXUG1SBs2wQJA7gAA +4 +4hezOO3zxE6T3AtmMrs4MwAA +Atypt726KkmaNnTw7Q3EYQAA +VS+vlz3GQUaLWwxRTkTLygAA +MqUW6X1Ww0GfjJ5qx4G20AAA +4 +RaGpcXRFFk2Egrs9p45aEwAA +g0TBPf3Nh0KJwiSYVxiPhQAA +z8s7WtExy0+auE7CN08QzQAA +gijAVu6IkkimRi58YU5afQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +FoDSEMS2ZkmTsrDtcYgDKAAA +odAX0fSALUCF3JgPgPmtPAAA +8VY2G3NxhEyw2+PmLVn4gAAA +TF+1Rgt/SEWoTFnDpd97sgAA +2 + +False +MEolPOO0IEuLY63mhD0XIAAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +YOFhTIRXZkCRT/20iOiu3wAA +G4JmI6QLpk6kLeS8fGipzwAA +MIqqDpNDaECMiszUTnTiOAAA +3e7dYeGE9Emyh4P37Ui5kwAA + + +MEolPOO0IEuLY63mhD0XIAAA +7jBLX6wjTkmObbw8i4xK0gAA +4 +POKY+tfyxUa+oX7KAX99XAAA +VZ/O9Cx1HUqJrk/DSux2nAAA +facP0dJwe0GdoUHFRqYvJAAA +ahz4Ad8q4EeqFI9A45hoWwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +XRPiAL3JZkqvn5gDILsbEgAA +eM8AXE34pECc07/JzA0XeQAA +6d0LdnYRS0+NvjKCbuDw5wAA +p2S6/u0WqEmNROovqOqHQQAA +2 + +False +FcZQ8iR/bkazNlwyyf9ViQAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +spGXt7NYTkOifncfh17dnQAA +nCh1yrHLGEiPABS6OwGFWQAA +xF4vp97G9EiKRqjFHAl/AAAA +tqC9+2eUmEeT3+5G8ssYFAAA + + +FcZQ8iR/bkazNlwyyf9ViQAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +jmQ780BvoEiCDUgz5qDszQAA +IPsmFLnOqECtXGK7N86FQwAA +9elBI/khn0yxLS0lflQuPAAA +kXqYlCGLWUm9u6P8W+D6aAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +koNsJpIFwUmiquwPJJU7AQAA +QOUwkebWf0CryTQBc4Nr4gAA +6LrIq+6OyUKPnK3361v6AgAA +MaWCaOXLrUWJEm/r6uinpwAA +2 + +False +ys0dUMXSfkahAJXAYIjoOQAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +jIZ4geFcHEeuJxmhlB6cOwAA +N7zaxB1EEkOVOC3/HWuclgAA +IruNF2tIIUSk4EWcTfUwagAA +eVpalVUqlEWLl/ivXOcjvAAA + + +ys0dUMXSfkahAJXAYIjoOQAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +tcgXPbWKlkeq5whCkIEqBgAA +VHdO32YS9kaEjGvUPD3IDgAA +1s8vxl+q3kOLUyQ2DB47DQAA +6uw+HNw3AUW+/dCDQKJYgwAA + + + + +Implementation Model +UMLStandard +implementationModel +IhiugfF1eE6vc8zKnVf8gAAA +1 + +ImplModel +PAdOgcwcsk+/d7YIjUX11gAA + +GQq3RWC/e0+WAmX5RQoy6wAA + + + + +Deployment Model +UMLStandard +deploymentModel +IhiugfF1eE6vc8zKnVf8gAAA +1 + +deployModel +7qxGQutBXU2dAghX9gmsOwAA + +djhlF/CGLkaIX1y/ia3ghQAA + + + + + + diff --git "a/devspec.en_US/dev-step-diagrams/devspec-20221115-\346\246\202\350\246\201\345\233\276.uml" "b/devspec.en_US/dev-step-diagrams/devspec-20221115-\346\246\202\350\246\201\345\233\276.uml" new file mode 100755 index 0000000..38207a0 --- /dev/null +++ "b/devspec.en_US/dev-step-diagrams/devspec-20221115-\346\246\202\350\246\201\345\233\276.uml" @@ -0,0 +1,30157 @@ + + + + + + +UMLStandard + + + + +devspec +4 + +Use Case Model +UMLStandard +useCaseModel +IhiugfF1eE6vc8zKnVf8gAAA +3 + +dev-actor +tacoxPrx8kCKprVgJHnvqgAA + +onlEfskXsk6Q+UgmrTExSAAA +57 + +clMaroon +216 +68 +485 +389 +IgjANDHFx02GXu/pd9UODQAA + + +dev-step + + +False + + +False + + + + +clMaroon +$00B9FFFF +205,328;400,266 +Haa/HtHu8EumDcJn1va7CgAA +OJNZyLkPgkW5YFYA5x/ChQAA +8ZQdZB1z0kaDUzkVHOzvRgAA + +False +1.5707963267949 +15 +Haa/HtHu8EumDcJn1va7CgAA + + +False +1.5707963267949 +30 +Haa/HtHu8EumDcJn1va7CgAA + + +False +-1.5707963267949 +15 +Haa/HtHu8EumDcJn1va7CgAA + + +False +-0.523598775598299 +30 +epHead +m5jTftKx4ku74ElHxxMotAAA + + +False +0.523598775598299 +30 +epTail +TeOn6G5DU0iPhLs634h/BwAA + + +False +0.523598775598299 +25 +epHead +m5jTftKx4ku74ElHxxMotAAA + + +False +-0.523598775598299 +25 +epTail +TeOn6G5DU0iPhLs634h/BwAA + + +False +-0.785398163397448 +40 +epHead +m5jTftKx4ku74ElHxxMotAAA + + +False +0.785398163397448 +40 +epTail +TeOn6G5DU0iPhLs634h/BwAA + + +False +-1000 +-1000 +50 +8 +m5jTftKx4ku74ElHxxMotAAA + + +False +-1000 +-1000 +50 +8 +TeOn6G5DU0iPhLs634h/BwAA + + + +clMaroon +$00B9FFFF +8 +192 +77 +78 +FkRCE52YAkaM/9oO8q9QFQAA + + +1 +author + + +False + + +False + + + +False +FkRCE52YAkaM/9oO8q9QFQAA + + +False +FkRCE52YAkaM/9oO8q9QFQAA + + + +clMaroon +$00B9FFFF +124 +192 +76 +78 +MLBX+NGx9kymQ76b9EAKuwAA + + +1 +tech-leader + + +False + + +False + + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + + +clMaroon +$00B9FFFF +108 +92 +101 +78 +A/9YWnHJBEGH1jC8FI2M9gAA + + +1 +maintainer + + +False + + +False + + + +False +A/9YWnHJBEGH1jC8FI2M9gAA + + +False +A/9YWnHJBEGH1jC8FI2M9gAA + + + +clMaroon +$00B9FFFF +116 +304 +90 +78 +oWDHE/AIyEqhL2zTdizC4AAA + + +1 +developper + + +False + + +False + + + +False +oWDHE/AIyEqhL2zTdizC4AAA + + +False +oWDHE/AIyEqhL2zTdizC4AAA + + + +clMaroon +$00B9FFFF +760 +376 +86 +78 +78O5f65/80OvpHK3AuBEIQAA + + +1 +tester + + +False + + +False + + + +False +78O5f65/80OvpHK3AuBEIQAA + + +False +78O5f65/80OvpHK3AuBEIQAA + + + +clMaroon +$00B9FFFF +764 +276 +77 +78 +u2JHX3nMn0CMyZLWTG2R1QAA + + +1 +user + + +False + + +False + + + +False +u2JHX3nMn0CMyZLWTG2R1QAA + + +False +u2JHX3nMn0CMyZLWTG2R1QAA + + + +clMaroon +$00B9FFFF +760 +192 +86 +78 +aaiB2ZAB7kOSB9niWMGCrAAA + + +1 +translator + + +False + + +False + + + +False +aaiB2ZAB7kOSB9niWMGCrAAA + + +False +aaiB2ZAB7kOSB9niWMGCrAAA + + + +clMaroon +$00B9FFFF +756 +108 +91 +78 +Pu4+pL+iiU6lRzDtfLIgJwAA + + +1 +documentor + + +False + + +False + + + +False +Pu4+pL+iiU6lRzDtfLIgJwAA + + +False +Pu4+pL+iiU6lRzDtfLIgJwAA + + + +clMaroon +$00B9FFFF +556 +292 +121 +45 +ymnyuU2meUmuFQCl8KW3EwAA + + +1 +bug-report + + +False + + +False + + + +False +ymnyuU2meUmuFQCl8KW3EwAA + + +False +ymnyuU2meUmuFQCl8KW3EwAA + + +False +ymnyuU2meUmuFQCl8KW3EwAA + + + +clMaroon +$00B9FFFF +412 +292 +101 +45 +5JcsdOcl2kmUJ1xczZEQMQAA + + +1 +test-task + + +False + + +False + + + +False +5JcsdOcl2kmUJ1xczZEQMQAA + + +False +5JcsdOcl2kmUJ1xczZEQMQAA + + +False +5JcsdOcl2kmUJ1xczZEQMQAA + + + +clMaroon +$00B9FFFF +392 +148 +142 +45 ++JrMCo45qEOWtcTsDjqTTgAA + + +1 +check-if-publish + + +False + + +False + + + +False ++JrMCo45qEOWtcTsDjqTTgAA + + +False ++JrMCo45qEOWtcTsDjqTTgAA + + +False ++JrMCo45qEOWtcTsDjqTTgAA + + + +clMaroon +$00B9FFFF +396 +392 +127 +45 +wFR71rqQ/kavPS+ztzufLgAA + + +1 +bug-fix + + +False + + +False + + + +False +wFR71rqQ/kavPS+ztzufLgAA + + +False +wFR71rqQ/kavPS+ztzufLgAA + + +False +wFR71rqQ/kavPS+ztzufLgAA + + + +clMaroon +$00B9FFFF +244 +264 +121 +45 +8v8IRJdlJUmbHIylKGey5wAA + + +1 +feature-list + + +False + + +False + + + +False +8v8IRJdlJUmbHIylKGey5wAA + + +False +8v8IRJdlJUmbHIylKGey5wAA + + +False +8v8IRJdlJUmbHIylKGey5wAA + + + +clMaroon +$00B9FFFF +252 +392 +108 +45 +fIx21ILIBUuXaoqKHt5Z2AAA + + +1 +develop + + +False + + +False + + + +False +fIx21ILIBUuXaoqKHt5Z2AAA + + +False +fIx21ILIBUuXaoqKHt5Z2AAA + + +False +fIx21ILIBUuXaoqKHt5Z2AAA + + + +clMaroon +$00B9FFFF +556 +392 +121 +45 +UtnSzF7bC0iukjII33XrugAA + + +1 +bug-retest + + +False + + +False + + + +False +UtnSzF7bC0iukjII33XrugAA + + +False +UtnSzF7bC0iukjII33XrugAA + + +False +UtnSzF7bC0iukjII33XrugAA + + + +clMaroon +$00B9FFFF +304,308;305,332 +Zk/ihiJuFkm1nc08/lO3JAAA +0NZb34oq+0iz6/8DYcniywAA +1XmGBT1/RUKVRwCIItHBqQAA + +False +1.5707963267949 +15 +Zk/ihiJuFkm1nc08/lO3JAAA + + +False +1.5707963267949 +30 +Zk/ihiJuFkm1nc08/lO3JAAA + + +False +-1.5707963267949 +15 +Zk/ihiJuFkm1nc08/lO3JAAA + + +False +-0.523598775598299 +30 +epHead +cqCsUEAeA0in0Z2LWweznwAA + + +False +0.523598775598299 +30 +epTail +DWmCv3GYyE+A4/wxNfV/TgAA + + +False +0.523598775598299 +25 +epHead +cqCsUEAeA0in0Z2LWweznwAA + + +False +-0.523598775598299 +25 +epTail +DWmCv3GYyE+A4/wxNfV/TgAA + + +False +-0.785398163397448 +40 +epHead +cqCsUEAeA0in0Z2LWweznwAA + + +False +0.785398163397448 +40 +epTail +DWmCv3GYyE+A4/wxNfV/TgAA + + +False +-1060 +-976 +50 +8 +cqCsUEAeA0in0Z2LWweznwAA + + +False +-1060 +-976 +50 +8 +DWmCv3GYyE+A4/wxNfV/TgAA + + + +clMaroon +$00B9FFFF +340,392;428,336 +ZYww4bhgbUujMdsXvrsGRwAA +BoXflTl2zkiHVb9rTj8+gQAA +gzOBaPhYH0Sqi38GA9ka4gAA + +False +1.5707963267949 +15 +ZYww4bhgbUujMdsXvrsGRwAA + + +False +1.5707963267949 +30 +ZYww4bhgbUujMdsXvrsGRwAA + + +False +-1.5707963267949 +15 +ZYww4bhgbUujMdsXvrsGRwAA + + +False +-0.523598775598299 +30 +epHead +PKDNpsNf/kGUvFpvwAiMgwAA + + +False +0.523598775598299 +30 +epTail +9vaywntHRUS9MFakEmMvSgAA + + +False +0.523598775598299 +25 +epHead +PKDNpsNf/kGUvFpvwAiMgwAA + + +False +-0.523598775598299 +25 +epTail +9vaywntHRUS9MFakEmMvSgAA + + +False +-0.785398163397448 +40 +epHead +PKDNpsNf/kGUvFpvwAiMgwAA + + +False +0.785398163397448 +40 +epTail +9vaywntHRUS9MFakEmMvSgAA + + +False +-1060 +-976 +50 +8 +PKDNpsNf/kGUvFpvwAiMgwAA + + +False +-1060 +-976 +50 +8 +9vaywntHRUS9MFakEmMvSgAA + + + +clMaroon +$00B9FFFF +556,414;522,414 +u+LRK0aPeU+CvKL8BjN4+AAA +vIM1yyr2zUeK8LOSwJnagwAA +t5UaBajz3kuwVYgFf4H/6gAA + +False +1.5707963267949 +15 +u+LRK0aPeU+CvKL8BjN4+AAA + + +False +1.5707963267949 +30 +u+LRK0aPeU+CvKL8BjN4+AAA + + +False +-1.5707963267949 +15 +u+LRK0aPeU+CvKL8BjN4+AAA + + +False +-0.523598775598299 +30 +epHead +xQhxxFEtpECHagEXOLUIWQAA + + +False +0.523598775598299 +30 +epTail +Ni4/biH/lE2VxdPr2OKnEwAA + + +False +0.523598775598299 +25 +epHead +xQhxxFEtpECHagEXOLUIWQAA + + +False +-0.523598775598299 +25 +epTail +Ni4/biH/lE2VxdPr2OKnEwAA + + +False +-0.785398163397448 +40 +epHead +xQhxxFEtpECHagEXOLUIWQAA + + +False +0.785398163397448 +40 +epTail +Ni4/biH/lE2VxdPr2OKnEwAA + + +False +-1060 +-976 +50 +8 +xQhxxFEtpECHagEXOLUIWQAA + + +False +-1060 +-976 +50 +8 +Ni4/biH/lE2VxdPr2OKnEwAA + + + +clMaroon +$00B9FFFF +616,336;616,392 +Q5rq4hug80amVs0OquyiyAAA +t5UaBajz3kuwVYgFf4H/6gAA +lwnbG+r6OEegyTwNJ3FUnQAA + +False +1.5707963267949 +15 +Q5rq4hug80amVs0OquyiyAAA + + +False +1.5707963267949 +30 +Q5rq4hug80amVs0OquyiyAAA + + +False +-1.5707963267949 +15 +Q5rq4hug80amVs0OquyiyAAA + + +False +-0.523598775598299 +30 +epHead +wki5AWxXakSVFXSFIAWF6wAA + + +False +0.523598775598299 +30 +epTail +8x8LgMHMS0+ZEvqndI0NEgAA + + +False +0.523598775598299 +25 +epHead +wki5AWxXakSVFXSFIAWF6wAA + + +False +-0.523598775598299 +25 +epTail +8x8LgMHMS0+ZEvqndI0NEgAA + + +False +-0.785398163397448 +40 +epHead +wki5AWxXakSVFXSFIAWF6wAA + + +False +0.785398163397448 +40 +epTail +8x8LgMHMS0+ZEvqndI0NEgAA + + +False +-1060 +-976 +50 +8 +wki5AWxXakSVFXSFIAWF6wAA + + +False +-1060 +-976 +50 +8 +8x8LgMHMS0+ZEvqndI0NEgAA + + + +clMaroon +$00B9FFFF +396,414;359,414 +Lslcq+/wp0+7suaGPGIyVAAA +gzOBaPhYH0Sqi38GA9ka4gAA +vIM1yyr2zUeK8LOSwJnagwAA + +False +1.5707963267949 +15 +Lslcq+/wp0+7suaGPGIyVAAA + + +False +1.5707963267949 +30 +Lslcq+/wp0+7suaGPGIyVAAA + + +False +-1.5707963267949 +15 +Lslcq+/wp0+7suaGPGIyVAAA + + +False +-0.523598775598299 +30 +epHead +9H2x6+kFc0eo6Z2KrSpZMgAA + + +False +0.523598775598299 +30 +epTail +UFqxiSQgyUeoy0qNucDjhwAA + + +False +0.523598775598299 +25 +epHead +9H2x6+kFc0eo6Z2KrSpZMgAA + + +False +-0.523598775598299 +25 +epTail +UFqxiSQgyUeoy0qNucDjhwAA + + +False +-0.785398163397448 +40 +epHead +9H2x6+kFc0eo6Z2KrSpZMgAA + + +False +0.785398163397448 +40 +epTail +UFqxiSQgyUeoy0qNucDjhwAA + + +False +-1060 +-976 +50 +8 +9H2x6+kFc0eo6Z2KrSpZMgAA + + +False +-1060 +-976 +50 +8 +UFqxiSQgyUeoy0qNucDjhwAA + + + +clMaroon +$00B9FFFF +205,364;261,392 +QAFwbnInOU6vOm8b8SgmzAAA +gzOBaPhYH0Sqi38GA9ka4gAA +8ZQdZB1z0kaDUzkVHOzvRgAA + +False +1.5707963267949 +15 +QAFwbnInOU6vOm8b8SgmzAAA + + +False +1.5707963267949 +30 +QAFwbnInOU6vOm8b8SgmzAAA + + +False +-1.5707963267949 +15 +QAFwbnInOU6vOm8b8SgmzAAA + + +False +-0.523598775598299 +30 +epHead +M0pjGsRCsEy2IjYa560UuwAA + + +False +0.523598775598299 +30 +epTail +89CSjktmDk6aTYzK0WeqxgAA + + +False +0.523598775598299 +25 +epHead +M0pjGsRCsEy2IjYa560UuwAA + + +False +-0.523598775598299 +25 +epTail +89CSjktmDk6aTYzK0WeqxgAA + + +False +-0.785398163397448 +40 +epHead +M0pjGsRCsEy2IjYa560UuwAA + + +False +0.785398163397448 +40 +epTail +89CSjktmDk6aTYzK0WeqxgAA + + +False +-1060 +-976 +50 +8 +M0pjGsRCsEy2IjYa560UuwAA + + +False +-1060 +-976 +50 +8 +89CSjktmDk6aTYzK0WeqxgAA + + + +clMaroon +$00B9FFFF +208,137;392,161 +otl6N6twSUqOS1ckH+zvkAAA +Vdh7zL8QZ0OtD+C+OlvxpgAA +qYv8SJgqPUajzKDRtANOvwAA + +False +1.5707963267949 +15 +otl6N6twSUqOS1ckH+zvkAAA + + +False +1.5707963267949 +30 +otl6N6twSUqOS1ckH+zvkAAA + + +False +-1.5707963267949 +15 +otl6N6twSUqOS1ckH+zvkAAA + + +False +-0.523598775598299 +30 +epHead +m5bOddD2ykOYQJ+JqC5GQwAA + + +False +0.523598775598299 +30 +epTail +hIwTub9FSkK/mA+8tg3vAQAA + + +False +0.523598775598299 +25 +epHead +m5bOddD2ykOYQJ+JqC5GQwAA + + +False +-0.523598775598299 +25 +epTail +hIwTub9FSkK/mA+8tg3vAQAA + + +False +-0.785398163397448 +40 +epHead +m5bOddD2ykOYQJ+JqC5GQwAA + + +False +0.785398163397448 +40 +epTail +hIwTub9FSkK/mA+8tg3vAQAA + + +False +-1060 +-976 +50 +8 +m5bOddD2ykOYQJ+JqC5GQwAA + + +False +-1060 +-976 +50 +8 +hIwTub9FSkK/mA+8tg3vAQAA + + + +clMaroon +$00B9FFFF +84,196;114,169 +/wV294vExESRsoCAG0SOGwAA +qYv8SJgqPUajzKDRtANOvwAA +nLppBSuFyk6GHv3rvWfvuwAA + +False +1.5707963267949 +15 +/wV294vExESRsoCAG0SOGwAA + + +False +1.5707963267949 +30 +/wV294vExESRsoCAG0SOGwAA + + +False +-1.5707963267949 +15 +/wV294vExESRsoCAG0SOGwAA + + +False +-0.523598775598299 +30 +epHead +kW2xBvd5ck+7hi+wjeIDWwAA + + +False +0.523598775598299 +30 +epTail +6Neco6zcl0uObHufbrc7/wAA + + +False +0.523598775598299 +25 +epHead +kW2xBvd5ck+7hi+wjeIDWwAA + + +False +-0.523598775598299 +25 +epTail +6Neco6zcl0uObHufbrc7/wAA + + +False +-0.785398163397448 +40 +epHead +kW2xBvd5ck+7hi+wjeIDWwAA + + +False +0.785398163397448 +40 +epTail +6Neco6zcl0uObHufbrc7/wAA + + +False +-1060 +-976 +50 +8 +kW2xBvd5ck+7hi+wjeIDWwAA + + +False +-1060 +-976 +50 +8 +6Neco6zcl0uObHufbrc7/wAA + + + +clMaroon +$00B9FFFF +84,230;124,230 +As4jKIWMwk6c065+KZeGGQAA +LqRrN84lGEeTv5o2IgfsSwAA +nLppBSuFyk6GHv3rvWfvuwAA + +False +1.5707963267949 +15 +As4jKIWMwk6c065+KZeGGQAA + + +False +1.5707963267949 +30 +As4jKIWMwk6c065+KZeGGQAA + + +False +-1.5707963267949 +15 +As4jKIWMwk6c065+KZeGGQAA + + +False +-0.523598775598299 +30 +epHead ++Lil4MWKjUOC2XYl8SjTegAA + + +False +0.523598775598299 +30 +epTail +RHQsOilQckSyjRNZMJggpgAA + + +False +0.523598775598299 +25 +epHead ++Lil4MWKjUOC2XYl8SjTegAA + + +False +-0.523598775598299 +25 +epTail +RHQsOilQckSyjRNZMJggpgAA + + +False +-0.785398163397448 +40 +epHead ++Lil4MWKjUOC2XYl8SjTegAA + + +False +0.785398163397448 +40 +epTail +RHQsOilQckSyjRNZMJggpgAA + + +False +-1060 +-976 +50 +8 ++Lil4MWKjUOC2XYl8SjTegAA + + +False +-1060 +-976 +50 +8 +RHQsOilQckSyjRNZMJggpgAA + + + +clMaroon +$00B9FFFF +84,267;121,304 +qSMM7YEtUUmnkrz3femcAQAA +8ZQdZB1z0kaDUzkVHOzvRgAA +nLppBSuFyk6GHv3rvWfvuwAA + +False +1.5707963267949 +15 +qSMM7YEtUUmnkrz3femcAQAA + + +False +1.5707963267949 +30 +qSMM7YEtUUmnkrz3femcAQAA + + +False +-1.5707963267949 +15 +qSMM7YEtUUmnkrz3femcAQAA + + +False +-0.523598775598299 +30 +epHead +gzYTAF1gIkizg/Vue/2ZQwAA + + +False +0.523598775598299 +30 +epTail +hNisF5EBTE2ATvCijhzvOQAA + + +False +0.523598775598299 +25 +epHead +gzYTAF1gIkizg/Vue/2ZQwAA + + +False +-0.523598775598299 +25 +epTail +hNisF5EBTE2ATvCijhzvOQAA + + +False +-0.785398163397448 +40 +epHead +gzYTAF1gIkizg/Vue/2ZQwAA + + +False +0.785398163397448 +40 +epTail +hNisF5EBTE2ATvCijhzvOQAA + + +False +-1060 +-976 +50 +8 +gzYTAF1gIkizg/Vue/2ZQwAA + + +False +-1060 +-976 +50 +8 +hNisF5EBTE2ATvCijhzvOQAA + + + +clMaroon +$00B9FFFF +760,414;676,414 +QOEK3K2D6E6pqfTn0mjGSQAA +t5UaBajz3kuwVYgFf4H/6gAA +55htDUboMkKutvJNMs10VwAA + +False +1.5707963267949 +15 +QOEK3K2D6E6pqfTn0mjGSQAA + + +False +1.5707963267949 +30 +QOEK3K2D6E6pqfTn0mjGSQAA + + +False +-1.5707963267949 +15 +QOEK3K2D6E6pqfTn0mjGSQAA + + +False +-0.523598775598299 +30 +epHead +8lZk7+ScDkGsGw40b2zWuQAA + + +False +0.523598775598299 +30 +epTail +06vNfm1gx0OR0K9NmGmXEQAA + + +False +0.523598775598299 +25 +epHead +8lZk7+ScDkGsGw40b2zWuQAA + + +False +-0.523598775598299 +25 +epTail +06vNfm1gx0OR0K9NmGmXEQAA + + +False +-0.785398163397448 +40 +epHead +8lZk7+ScDkGsGw40b2zWuQAA + + +False +0.785398163397448 +40 +epTail +06vNfm1gx0OR0K9NmGmXEQAA + + +False +-1048 +-1000 +50 +8 +8lZk7+ScDkGsGw40b2zWuQAA + + +False +-1048 +-1000 +50 +8 +06vNfm1gx0OR0K9NmGmXEQAA + + + +clMaroon +$00B9FFFF +764,314;676,314 +BunHMt9UUEaob51EuVirsAAA +lwnbG+r6OEegyTwNJ3FUnQAA +jBby7rVxVkO+HkQ21KY54wAA + +False +1.5707963267949 +15 +BunHMt9UUEaob51EuVirsAAA + + +False +1.5707963267949 +30 +BunHMt9UUEaob51EuVirsAAA + + +False +-1.5707963267949 +15 +BunHMt9UUEaob51EuVirsAAA + + +False +-0.523598775598299 +30 +epHead +WX2MlGTb6EOX2luk/so3YwAA + + +False +0.523598775598299 +30 +epTail +h8kotrimC0Cpk4nuHRgyzAAA + + +False +0.523598775598299 +25 +epHead +WX2MlGTb6EOX2luk/so3YwAA + + +False +-0.523598775598299 +25 +epTail +h8kotrimC0Cpk4nuHRgyzAAA + + +False +-0.785398163397448 +40 +epHead +WX2MlGTb6EOX2luk/so3YwAA + + +False +0.785398163397448 +40 +epTail +h8kotrimC0Cpk4nuHRgyzAAA + + +False +-1048 +-1000 +50 +8 +WX2MlGTb6EOX2luk/so3YwAA + + +False +-1048 +-1000 +50 +8 +h8kotrimC0Cpk4nuHRgyzAAA + + + +clMaroon +$00B9FFFF +462,292;463,268 +GkzxRdxRNkmn62ufJTw13wAA +OJNZyLkPgkW5YFYA5x/ChQAA +BoXflTl2zkiHVb9rTj8+gQAA + +False +1.5707963267949 +15 +GkzxRdxRNkmn62ufJTw13wAA + + +False +1.5707963267949 +30 +GkzxRdxRNkmn62ufJTw13wAA + + +False +-1.5707963267949 +15 +GkzxRdxRNkmn62ufJTw13wAA + + +False +-0.523598775598299 +30 +epHead +UjrU3zr4ikWZcD67/VJ22wAA + + +False +0.523598775598299 +30 +epTail +LLG2+9u6KkebumqGep6bfAAA + + +False +0.523598775598299 +25 +epHead +UjrU3zr4ikWZcD67/VJ22wAA + + +False +-0.523598775598299 +25 +epTail +LLG2+9u6KkebumqGep6bfAAA + + +False +-0.785398163397448 +40 +epHead +UjrU3zr4ikWZcD67/VJ22wAA + + +False +0.785398163397448 +40 +epTail +LLG2+9u6KkebumqGep6bfAAA + + +False +-1000 +-1000 +50 +8 +UjrU3zr4ikWZcD67/VJ22wAA + + +False +-1000 +-1000 +50 +8 +LLG2+9u6KkebumqGep6bfAAA + + + +clMaroon +$00B9FFFF +248 +88 +121 +45 +FPjdKo5EqkuvbojCyT40wAAA + + +1 +pkg-publish + + +False + + +False + + + +False +FPjdKo5EqkuvbojCyT40wAAA + + +False +FPjdKo5EqkuvbojCyT40wAAA + + +False +FPjdKo5EqkuvbojCyT40wAAA + + + +clMaroon +$00B9FFFF +208,123;248,118 +atCUWqlo80uXI6LZ5VXAqwAA +7R3Vtrr63kqhX5GzE7CY4gAA +qYv8SJgqPUajzKDRtANOvwAA + +False +1.5707963267949 +15 +atCUWqlo80uXI6LZ5VXAqwAA + + +False +1.5707963267949 +30 +atCUWqlo80uXI6LZ5VXAqwAA + + +False +-1.5707963267949 +15 +atCUWqlo80uXI6LZ5VXAqwAA + + +False +-0.523598775598299 +30 +epHead +ZCmKuqp4sE2/fLQrj5OH6AAA + + +False +0.523598775598299 +30 +epTail +1rd1mOGAkk26xSFOjW6oBQAA + + +False +0.523598775598299 +25 +epHead +ZCmKuqp4sE2/fLQrj5OH6AAA + + +False +-0.523598775598299 +25 +epTail +1rd1mOGAkk26xSFOjW6oBQAA + + +False +-0.785398163397448 +40 +epHead +ZCmKuqp4sE2/fLQrj5OH6AAA + + +False +0.785398163397448 +40 +epTail +1rd1mOGAkk26xSFOjW6oBQAA + + +False +-1000 +-1000 +50 +8 +ZCmKuqp4sE2/fLQrj5OH6AAA + + +False +-1000 +-1000 +50 +8 +1rd1mOGAkk26xSFOjW6oBQAA + + + +clMaroon +$00B9FFFF +463,224;462,192 +VSr15ngAt0ucp/JSndd7fAAA +Vdh7zL8QZ0OtD+C+OlvxpgAA +OJNZyLkPgkW5YFYA5x/ChQAA + +False +1.5707963267949 +15 +VSr15ngAt0ucp/JSndd7fAAA + + +False +1.5707963267949 +30 +VSr15ngAt0ucp/JSndd7fAAA + + +False +-1.5707963267949 +15 +VSr15ngAt0ucp/JSndd7fAAA + + +False +-0.523598775598299 +30 +epHead +P1DmfF8A8U+xRvMvkio6ggAA + + +False +0.523598775598299 +30 +epTail +/91dQ7rhgUSI28jqjPHooQAA + + +False +0.523598775598299 +25 +epHead +P1DmfF8A8U+xRvMvkio6ggAA + + +False +-0.523598775598299 +25 +epTail +/91dQ7rhgUSI28jqjPHooQAA + + +False +-0.785398163397448 +40 +epHead +P1DmfF8A8U+xRvMvkio6ggAA + + +False +0.785398163397448 +40 +epTail +/91dQ7rhgUSI28jqjPHooQAA + + +False +-1000 +-1000 +50 +8 +P1DmfF8A8U+xRvMvkio6ggAA + + +False +-1000 +-1000 +50 +8 +/91dQ7rhgUSI28jqjPHooQAA + + + +clMaroon +$00B9FFFF +756,159;527,227 +t3ESzDEjd0ut89bd3IyWPQAA +OJNZyLkPgkW5YFYA5x/ChQAA +iDOAaVuVSUO57121Dqj8JQAA + +False +1.5707963267949 +15 +t3ESzDEjd0ut89bd3IyWPQAA + + +False +1.5707963267949 +30 +t3ESzDEjd0ut89bd3IyWPQAA + + +False +-1.5707963267949 +15 +t3ESzDEjd0ut89bd3IyWPQAA + + +False +-0.523598775598299 +30 +epHead +UVpvR8JQo0Goo1thnZ8TQwAA + + +False +0.523598775598299 +30 +epTail +UV6CUGeKi0qg+WyJsqDNMAAA + + +False +0.523598775598299 +25 +epHead +UVpvR8JQo0Goo1thnZ8TQwAA + + +False +-0.523598775598299 +25 +epTail +UV6CUGeKi0qg+WyJsqDNMAAA + + +False +-0.785398163397448 +40 +epHead +UVpvR8JQo0Goo1thnZ8TQwAA + + +False +0.785398163397448 +40 +epTail +UV6CUGeKi0qg+WyJsqDNMAAA + + +False +-1048 +-1000 +50 +8 +UVpvR8JQo0Goo1thnZ8TQwAA + + +False +-1048 +-1000 +50 +8 +UV6CUGeKi0qg+WyJsqDNMAAA + + + +clMaroon +$00B9FFFF +760,232;527,243 +j2qfJOQnLEyR5RVtbVGb8AAA +OJNZyLkPgkW5YFYA5x/ChQAA +OS8e8Zau7kWMtinIvCc/swAA + +False +1.5707963267949 +15 +j2qfJOQnLEyR5RVtbVGb8AAA + + +False +1.5707963267949 +30 +j2qfJOQnLEyR5RVtbVGb8AAA + + +False +-1.5707963267949 +15 +j2qfJOQnLEyR5RVtbVGb8AAA + + +False +-0.523598775598299 +30 +epHead +8zPYwZBWOEuUZxPtPgU/YQAA + + +False +0.523598775598299 +30 +epTail +DcOYQKycgUqgn2jU568/iAAA + + +False +0.523598775598299 +25 +epHead +8zPYwZBWOEuUZxPtPgU/YQAA + + +False +-0.523598775598299 +25 +epTail +DcOYQKycgUqgn2jU568/iAAA + + +False +-0.785398163397448 +40 +epHead +8zPYwZBWOEuUZxPtPgU/YQAA + + +False +0.785398163397448 +40 +epTail +DcOYQKycgUqgn2jU568/iAAA + + +False +-1048 +-1000 +50 +8 +8zPYwZBWOEuUZxPtPgU/YQAA + + +False +-1048 +-1000 +50 +8 +DcOYQKycgUqgn2jU568/iAAA + + + +clMaroon +$00B9FFFF +406,148;365,132 +L3wUC+fjukG9Mbmq0QYdiwAA +7R3Vtrr63kqhX5GzE7CY4gAA +Vdh7zL8QZ0OtD+C+OlvxpgAA + +False +1.5707963267949 +15 +L3wUC+fjukG9Mbmq0QYdiwAA + + +False +1.5707963267949 +30 +L3wUC+fjukG9Mbmq0QYdiwAA + + +False +-1.5707963267949 +15 +L3wUC+fjukG9Mbmq0QYdiwAA + + +False +-0.523598775598299 +30 +epHead +MVnve7DJ0kSTrd01IVyX1gAA + + +False +0.523598775598299 +30 +epTail +zaihnGbFv0SYjieuD3Ii+wAA + + +False +0.523598775598299 +25 +epHead +MVnve7DJ0kSTrd01IVyX1gAA + + +False +-0.523598775598299 +25 +epTail +zaihnGbFv0SYjieuD3Ii+wAA + + +False +-0.785398163397448 +40 +epHead +MVnve7DJ0kSTrd01IVyX1gAA + + +False +0.785398163397448 +40 +epTail +zaihnGbFv0SYjieuD3Ii+wAA + + +False +-1000 +-1000 +50 +8 +MVnve7DJ0kSTrd01IVyX1gAA + + +False +-1000 +-1000 +50 +8 +zaihnGbFv0SYjieuD3Ii+wAA + + + +clMaroon +$00B9FFFF +199,245;248,264 +ESsTAdhYyU64zi6/oVqTKgAA +1XmGBT1/RUKVRwCIItHBqQAA +LqRrN84lGEeTv5o2IgfsSwAA + +False +1.5707963267949 +15 +ESsTAdhYyU64zi6/oVqTKgAA + + +False +1.5707963267949 +30 +ESsTAdhYyU64zi6/oVqTKgAA + + +False +-1.5707963267949 +15 +ESsTAdhYyU64zi6/oVqTKgAA + + +False +-0.523598775598299 +30 +epHead +jqMq51leBkGUbLZ/J6mVggAA + + +False +0.523598775598299 +30 +epTail +NuLaPfQwkkOm5+Z8IfTRQwAA + + +False +0.523598775598299 +25 +epHead +jqMq51leBkGUbLZ/J6mVggAA + + +False +-0.523598775598299 +25 +epTail +NuLaPfQwkkOm5+Z8IfTRQwAA + + +False +-0.785398163397448 +40 +epHead +jqMq51leBkGUbLZ/J6mVggAA + + +False +0.785398163397448 +40 +epTail +NuLaPfQwkkOm5+Z8IfTRQwAA + + +False +-1000 +-1000 +50 +8 +jqMq51leBkGUbLZ/J6mVggAA + + +False +-1000 +-1000 +50 +8 +NuLaPfQwkkOm5+Z8IfTRQwAA + + + +clMaroon +$00B9FFFF +240 +332 +132 +45 +rxa+oNm2Kk2e9yVRZgZC4gAA + + +1 +design-module + + +False + + +False + + + +False +rxa+oNm2Kk2e9yVRZgZC4gAA + + +False +rxa+oNm2Kk2e9yVRZgZC4gAA + + +False +rxa+oNm2Kk2e9yVRZgZC4gAA + + + +clMaroon +$00B9FFFF +305,376;305,392 +udZiFgT1HUuXSsB17nyApQAA +gzOBaPhYH0Sqi38GA9ka4gAA +0NZb34oq+0iz6/8DYcniywAA + +False +1.5707963267949 +15 +udZiFgT1HUuXSsB17nyApQAA + + +False +1.5707963267949 +30 +udZiFgT1HUuXSsB17nyApQAA + + +False +-1.5707963267949 +15 +udZiFgT1HUuXSsB17nyApQAA + + +False +-0.523598775598299 +30 +epHead +Bkj3nzY1Z0OpLErETn5JAAAA + + +False +0.523598775598299 +30 +epTail +iGT7GmF0r0CH0TSScrk62AAA + + +False +0.523598775598299 +25 +epHead +Bkj3nzY1Z0OpLErETn5JAAAA + + +False +-0.523598775598299 +25 +epTail +iGT7GmF0r0CH0TSScrk62AAA + + +False +-0.785398163397448 +40 +epHead +Bkj3nzY1Z0OpLErETn5JAAAA + + +False +0.785398163397448 +40 +epTail +iGT7GmF0r0CH0TSScrk62AAA + + +False +-1000 +-1000 +50 +8 +Bkj3nzY1Z0OpLErETn5JAAAA + + +False +-1000 +-1000 +50 +8 +iGT7GmF0r0CH0TSScrk62AAA + + + +clMaroon +$00B9FFFF +760,402;512,329 +pRL6RWX7IUGI9SeSZRJAEwAA +BoXflTl2zkiHVb9rTj8+gQAA +55htDUboMkKutvJNMs10VwAA + +False +1.5707963267949 +15 +pRL6RWX7IUGI9SeSZRJAEwAA + + +False +1.5707963267949 +30 +pRL6RWX7IUGI9SeSZRJAEwAA + + +False +-1.5707963267949 +15 +pRL6RWX7IUGI9SeSZRJAEwAA + + +False +-0.523598775598299 +30 +epHead +He/O+ItNt0+c+XSWNytz9gAA + + +False +0.523598775598299 +30 +epTail +S4UJZMo1R0qd1Tyo5YNdtgAA + + +False +0.523598775598299 +25 +epHead +He/O+ItNt0+c+XSWNytz9gAA + + +False +-0.523598775598299 +25 +epTail +S4UJZMo1R0qd1Tyo5YNdtgAA + + +False +-0.785398163397448 +40 +epHead +He/O+ItNt0+c+XSWNytz9gAA + + +False +0.785398163397448 +40 +epTail +S4UJZMo1R0qd1Tyo5YNdtgAA + + +False +-1000 +-1000 +50 +8 +He/O+ItNt0+c+XSWNytz9gAA + + +False +-1000 +-1000 +50 +8 +S4UJZMo1R0qd1Tyo5YNdtgAA + + + +clMaroon +$00B9FFFF +536 +96 +149 +45 +cH75vr0YhkuvV/fYij/FMgAA + + +1 +download & build + + +False + + +False + + + +False +cH75vr0YhkuvV/fYij/FMgAA + + +False +cH75vr0YhkuvV/fYij/FMgAA + + +False +cH75vr0YhkuvV/fYij/FMgAA + + + +clMaroon +$00B9FFFF +368,112;536,116 +wARDKsfmxU6pDs0VU6O25wAA +DOHBlVwZH0CnyAOdMPUqxQAA +7R3Vtrr63kqhX5GzE7CY4gAA + +False +1.5707963267949 +15 +wARDKsfmxU6pDs0VU6O25wAA + + +False +1.5707963267949 +30 +wARDKsfmxU6pDs0VU6O25wAA + + +False +-1.5707963267949 +15 +wARDKsfmxU6pDs0VU6O25wAA + + +False +-0.523598775598299 +30 +epHead +tMwNvnbWx0qC99wvlGYF3AAA + + +False +0.523598775598299 +30 +epTail +6sd33lS3GkaENMAtDneYfAAA + + +False +0.523598775598299 +25 +epHead +tMwNvnbWx0qC99wvlGYF3AAA + + +False +-0.523598775598299 +25 +epTail +6sd33lS3GkaENMAtDneYfAAA + + +False +-0.785398163397448 +40 +epHead +tMwNvnbWx0qC99wvlGYF3AAA + + +False +0.785398163397448 +40 +epTail +6sd33lS3GkaENMAtDneYfAAA + + +False +-1000 +-1000 +50 +8 +tMwNvnbWx0qC99wvlGYF3AAA + + +False +-1000 +-1000 +50 +8 +6sd33lS3GkaENMAtDneYfAAA + + + +clMaroon +$00B9FFFF +765,276;632,140 +NRxXI+ohkUa8ldCSWR3lNQAA +DOHBlVwZH0CnyAOdMPUqxQAA +jBby7rVxVkO+HkQ21KY54wAA + +False +1.5707963267949 +15 +NRxXI+ohkUa8ldCSWR3lNQAA + + +False +1.5707963267949 +30 +NRxXI+ohkUa8ldCSWR3lNQAA + + +False +-1.5707963267949 +15 +NRxXI+ohkUa8ldCSWR3lNQAA + + +False +-0.523598775598299 +30 +epHead +VvLdglslUUqBPX/aHaWVywAA + + +False +0.523598775598299 +30 +epTail +8hHEA5HEUkaJOUrimD+IqwAA + + +False +0.523598775598299 +25 +epHead +VvLdglslUUqBPX/aHaWVywAA + + +False +-0.523598775598299 +25 +epTail +8hHEA5HEUkaJOUrimD+IqwAA + + +False +-0.785398163397448 +40 +epHead +VvLdglslUUqBPX/aHaWVywAA + + +False +0.785398163397448 +40 +epTail +8hHEA5HEUkaJOUrimD+IqwAA + + +False +-1000 +-1000 +50 +8 +VvLdglslUUqBPX/aHaWVywAA + + +False +-1000 +-1000 +50 +8 +8hHEA5HEUkaJOUrimD+IqwAA + + + +clMaroon +$00B9FFFF +544 +148 +127 +45 +K/jI5ejWkEmd+RwmoOHzSgAA + + +1 +new-demond + + +False + + +False + + + +False +K/jI5ejWkEmd+RwmoOHzSgAA + + +False +K/jI5ejWkEmd+RwmoOHzSgAA + + +False +K/jI5ejWkEmd+RwmoOHzSgAA + + + +clMaroon +$00B9FFFF +764,286;637,192 +HwNxguHxkEq1TTvntBzfPQAA ++xQR3R4Khk2Mr7tmPdkWSwAA +jBby7rVxVkO+HkQ21KY54wAA + +False +1.5707963267949 +15 +HwNxguHxkEq1TTvntBzfPQAA + + +False +1.5707963267949 +30 +HwNxguHxkEq1TTvntBzfPQAA + + +False +-1.5707963267949 +15 +HwNxguHxkEq1TTvntBzfPQAA + + +False +-0.523598775598299 +30 +epHead +LgaAK4fEB0e2otJzSn7toQAA + + +False +0.523598775598299 +30 +epTail +aS8jAO3xFkSspkn5BLzAQwAA + + +False +0.523598775598299 +25 +epHead +LgaAK4fEB0e2otJzSn7toQAA + + +False +-0.523598775598299 +25 +epTail +aS8jAO3xFkSspkn5BLzAQwAA + + +False +-0.785398163397448 +40 +epHead +LgaAK4fEB0e2otJzSn7toQAA + + +False +0.785398163397448 +40 +epTail +aS8jAO3xFkSspkn5BLzAQwAA + + +False +-1000 +-1000 +50 +8 +LgaAK4fEB0e2otJzSn7toQAA + + +False +-1000 +-1000 +50 +8 +aS8jAO3xFkSspkn5BLzAQwAA + + + +clMaroon +$00B9FFFF +772,376;625,192 +JDSYiscd1ku4Q9VTc3cxJAAA ++xQR3R4Khk2Mr7tmPdkWSwAA +55htDUboMkKutvJNMs10VwAA + +False +1.5707963267949 +15 +JDSYiscd1ku4Q9VTc3cxJAAA + + +False +1.5707963267949 +30 +JDSYiscd1ku4Q9VTc3cxJAAA + + +False +-1.5707963267949 +15 +JDSYiscd1ku4Q9VTc3cxJAAA + + +False +-0.523598775598299 +30 +epHead +hU4yh3LkjEKFkdS6cl0FBwAA + + +False +0.523598775598299 +30 +epTail +YldXkvDuwE27LSJywqCl4AAA + + +False +0.523598775598299 +25 +epHead +hU4yh3LkjEKFkdS6cl0FBwAA + + +False +-0.523598775598299 +25 +epTail +YldXkvDuwE27LSJywqCl4AAA + + +False +-0.785398163397448 +40 +epHead +hU4yh3LkjEKFkdS6cl0FBwAA + + +False +0.785398163397448 +40 +epTail +YldXkvDuwE27LSJywqCl4AAA + + +False +-1000 +-1000 +50 +8 +hU4yh3LkjEKFkdS6cl0FBwAA + + +False +-1000 +-1000 +50 +8 +YldXkvDuwE27LSJywqCl4AAA + + + +clMaroon +$00B9FFFF +550,192;362,264 +COsG4HSpZUe/Vic0aL5j4AAA +1XmGBT1/RUKVRwCIItHBqQAA ++xQR3R4Khk2Mr7tmPdkWSwAA + +False +1.5707963267949 +15 +COsG4HSpZUe/Vic0aL5j4AAA + + +False +1.5707963267949 +30 +COsG4HSpZUe/Vic0aL5j4AAA + + +False +-1.5707963267949 +15 +COsG4HSpZUe/Vic0aL5j4AAA + + +False +-0.523598775598299 +30 +epHead +TWHK+EvM0kuJxrZGPnmV/gAA + + +False +0.523598775598299 +30 +epTail +g4nzG5AXAUmT/Juw/Y+HhwAA + + +False +0.523598775598299 +25 +epHead +TWHK+EvM0kuJxrZGPnmV/gAA + + +False +-0.523598775598299 +25 +epTail +g4nzG5AXAUmT/Juw/Y+HhwAA + + +False +-0.785398163397448 +40 +epHead +TWHK+EvM0kuJxrZGPnmV/gAA + + +False +0.785398163397448 +40 +epTail +g4nzG5AXAUmT/Juw/Y+HhwAA + + +False +-1000 +-1000 +50 +8 +TWHK+EvM0kuJxrZGPnmV/gAA + + +False +-1000 +-1000 +50 +8 +g4nzG5AXAUmT/Juw/Y+HhwAA + + + +clMaroon +$00B9FFFF +400 +224 +128 +45 +ozTLGGkik02HnJ667z5MBQAA + + +1 +doc & tutorial + + +False + + +False + + + +False +ozTLGGkik02HnJ667z5MBQAA + + +False +ozTLGGkik02HnJ667z5MBQAA + + +False +ozTLGGkik02HnJ667z5MBQAA + + + +clMaroon +$00B9FFFF +199,222;392,184 +eD6wP/fAO0qZXgTPDYw14gAA +Vdh7zL8QZ0OtD+C+OlvxpgAA +LqRrN84lGEeTv5o2IgfsSwAA + +False +1.5707963267949 +15 +eD6wP/fAO0qZXgTPDYw14gAA + + +False +1.5707963267949 +30 +eD6wP/fAO0qZXgTPDYw14gAA + + +False +-1.5707963267949 +15 +eD6wP/fAO0qZXgTPDYw14gAA + + +False +-0.523598775598299 +30 +epHead +XNH/vjJrPkeWiAnFueRS2wAA + + +False +0.523598775598299 +30 +epTail +NwDa11zhX0qixnczVDBHswAA + + +False +0.523598775598299 +25 +epHead +XNH/vjJrPkeWiAnFueRS2wAA + + +False +-0.523598775598299 +25 +epTail +NwDa11zhX0qixnczVDBHswAA + + +False +-0.785398163397448 +40 +epHead +XNH/vjJrPkeWiAnFueRS2wAA + + +False +0.785398163397448 +40 +epTail +NwDa11zhX0qixnczVDBHswAA + + +False +-1000 +-1000 +50 +8 +XNH/vjJrPkeWiAnFueRS2wAA + + +False +-1000 +-1000 +50 +8 +NwDa11zhX0qixnczVDBHswAA + + + +clMaroon +$00B9FFFF +199,263;279,332 +ijA0VzIZG0G7ohk808I7EAAA +0NZb34oq+0iz6/8DYcniywAA +LqRrN84lGEeTv5o2IgfsSwAA + +False +1.5707963267949 +15 +ijA0VzIZG0G7ohk808I7EAAA + + +False +1.5707963267949 +30 +ijA0VzIZG0G7ohk808I7EAAA + + +False +-1.5707963267949 +15 +ijA0VzIZG0G7ohk808I7EAAA + + +False +-0.523598775598299 +30 +epHead +sHxTuCDocEyzJSz3moadcwAA + + +False +0.523598775598299 +30 +epTail +2wepYfQ1HEOA25v4ibitGAAA + + +False +0.523598775598299 +25 +epHead +sHxTuCDocEyzJSz3moadcwAA + + +False +-0.523598775598299 +25 +epTail +2wepYfQ1HEOA25v4ibitGAAA + + +False +-0.785398163397448 +40 +epHead +sHxTuCDocEyzJSz3moadcwAA + + +False +0.785398163397448 +40 +epTail +2wepYfQ1HEOA25v4ibitGAAA + + +False +-1000 +-1000 +50 +8 +sHxTuCDocEyzJSz3moadcwAA + + +False +-1000 +-1000 +50 +8 +2wepYfQ1HEOA25v4ibitGAAA + + + +clMaroon +$00B9FFFF +199,232;400,243 +tV4kKe/RSky6myfeSP18swAA +OJNZyLkPgkW5YFYA5x/ChQAA +LqRrN84lGEeTv5o2IgfsSwAA + +False +1.5707963267949 +15 +tV4kKe/RSky6myfeSP18swAA + + +False +1.5707963267949 +30 +tV4kKe/RSky6myfeSP18swAA + + +False +-1.5707963267949 +15 +tV4kKe/RSky6myfeSP18swAA + + +False +-0.523598775598299 +30 +epHead +yYIJFraZbU6Xh62CJfSi8wAA + + +False +0.523598775598299 +30 +epTail +PW0DMEjQBEykIxMEhQ5JaAAA + + +False +0.523598775598299 +25 +epHead +yYIJFraZbU6Xh62CJfSi8wAA + + +False +-0.523598775598299 +25 +epTail +PW0DMEjQBEykIxMEhQ5JaAAA + + +False +-0.785398163397448 +40 +epHead +yYIJFraZbU6Xh62CJfSi8wAA + + +False +0.785398163397448 +40 +epTail +PW0DMEjQBEykIxMEhQ5JaAAA + + +False +-1000 +-1000 +50 +8 +yYIJFraZbU6Xh62CJfSi8wAA + + +False +-1000 +-1000 +50 +8 +PW0DMEjQBEykIxMEhQ5JaAAA + + + +clMaroon +$00B9FFFF +16 +108 +130 +45 +wE/srVLQHE2sCDr/+ydmYAAA + + +1 +launch-publish + + +False + + +False + + + +False +wE/srVLQHE2sCDr/+ydmYAAA + + +False +wE/srVLQHE2sCDr/+ydmYAAA + + +False +wE/srVLQHE2sCDr/+ydmYAAA + + + +clMaroon +$00B9FFFF +205,346;240,349 +dK9I6bZRfUih3ErZpfx4hAAA +0NZb34oq+0iz6/8DYcniywAA +8ZQdZB1z0kaDUzkVHOzvRgAA + +False +1.5707963267949 +15 +dK9I6bZRfUih3ErZpfx4hAAA + + +False +1.5707963267949 +30 +dK9I6bZRfUih3ErZpfx4hAAA + + +False +-1.5707963267949 +15 +dK9I6bZRfUih3ErZpfx4hAAA + + +False +-0.523598775598299 +30 +epHead +gIU56iDnlUaFhBS+rQgjwgAA + + +False +0.523598775598299 +30 +epTail +VD6ZOZdU+UucOrfmGN2ehAAA + + +False +0.523598775598299 +25 +epHead +gIU56iDnlUaFhBS+rQgjwgAA + + +False +-0.523598775598299 +25 +epTail +VD6ZOZdU+UucOrfmGN2ehAAA + + +False +-0.785398163397448 +40 +epHead +gIU56iDnlUaFhBS+rQgjwgAA + + +False +0.785398163397448 +40 +epTail +VD6ZOZdU+UucOrfmGN2ehAAA + + +False +-1000 +-1000 +50 +8 +gIU56iDnlUaFhBS+rQgjwgAA + + +False +-1000 +-1000 +50 +8 +VD6ZOZdU+UucOrfmGN2ehAAA + + + +clMaroon +$00B9FFFF +16 +292 +128 +45 +KDFXOvN54E2A+KD+zjp/rwAA + + +1 +task-manager + + +False + + +False + + + +False +KDFXOvN54E2A+KD+zjp/rwAA + + +False +KDFXOvN54E2A+KD+zjp/rwAA + + +False +KDFXOvN54E2A+KD+zjp/rwAA + + + +clMaroon +$00B9FFFF +20 +348 +108 +45 +k6w1Bteav02GGDrC6cJmKQAA + + +1 +new-idea + + +False + + +False + + + +False +k6w1Bteav02GGDrC6cJmKQAA + + +False +k6w1Bteav02GGDrC6cJmKQAA + + +False +k6w1Bteav02GGDrC6cJmKQAA + + + +clMaroon +$00B9FFFF +777,376;624,140 +OeFvUQCLbkSUntfY8QQZjQAA +DOHBlVwZH0CnyAOdMPUqxQAA +55htDUboMkKutvJNMs10VwAA + +False +1.5707963267949 +15 +OeFvUQCLbkSUntfY8QQZjQAA + + +False +1.5707963267949 +30 +OeFvUQCLbkSUntfY8QQZjQAA + + +False +-1.5707963267949 +15 +OeFvUQCLbkSUntfY8QQZjQAA + + +False +-0.523598775598299 +30 +epHead +9QetYTXGJUuUfmUAHqUS4gAA + + +False +0.523598775598299 +30 +epTail +nrc3+Xx32EKxZK145yefSgAA + + +False +0.523598775598299 +25 +epHead +9QetYTXGJUuUfmUAHqUS4gAA + + +False +-0.523598775598299 +25 +epTail +nrc3+Xx32EKxZK145yefSgAA + + +False +-0.785398163397448 +40 +epHead +9QetYTXGJUuUfmUAHqUS4gAA + + +False +0.785398163397448 +40 +epTail +nrc3+Xx32EKxZK145yefSgAA + + +False +-1000 +-1000 +50 +8 +9QetYTXGJUuUfmUAHqUS4gAA + + +False +-1000 +-1000 +50 +8 +nrc3+Xx32EKxZK145yefSgAA + + + +clMaroon +$00B9FFFF +194,169;283,264 +u2pg0MZyBkybxjv8s4b5hwAA +1XmGBT1/RUKVRwCIItHBqQAA +qYv8SJgqPUajzKDRtANOvwAA + +False +1.5707963267949 +15 +u2pg0MZyBkybxjv8s4b5hwAA + + +False +1.5707963267949 +30 +u2pg0MZyBkybxjv8s4b5hwAA + + +False +-1.5707963267949 +15 +u2pg0MZyBkybxjv8s4b5hwAA + + +False +-0.523598775598299 +30 +epHead +gL33aMDC5EaM1KvQAa8OywAA + + +False +0.523598775598299 +30 +epTail +PltbgL9aKEOMcFQlA6pKEQAA + + +False +0.523598775598299 +25 +epHead +gL33aMDC5EaM1KvQAa8OywAA + + +False +-0.523598775598299 +25 +epTail +PltbgL9aKEOMcFQlA6pKEQAA + + +False +-0.785398163397448 +40 +epHead +gL33aMDC5EaM1KvQAa8OywAA + + +False +0.785398163397448 +40 +epTail +PltbgL9aKEOMcFQlA6pKEQAA + + +False +-1000 +-1000 +50 +8 +gL33aMDC5EaM1KvQAa8OywAA + + +False +-1000 +-1000 +50 +8 +PltbgL9aKEOMcFQlA6pKEQAA + + + + + +pkg-builder +tacoxPrx8kCKprVgJHnvqgAA + +aYJ9/XooBkmA6/FiFJuMIQAA +7 + +clMaroon +$00B9FFFF +144 +108 +120 +70 ++ji05KqWx0+15bzf+i9ZaAAA + + +build-pkg + + +False + + +False + + + + +clMaroon +$00B9FFFF +332 +140 +120 +70 +9m9n/MGV7kKh0PE7WrKhKAAA + + +build-config + + +False + + +False + + + + +clMaroon +$00B9FFFF +224 +272 +120 +70 +NlQ9Rg8NL061+rbOyUtEFgAA + + +build-pkglist + + +False + + +False + + + + +clMaroon +$00B9FFFF +432 +296 +120 +70 +vt3kyFkrMUef7jELG3+4KQAA + + +devutils + + +False + + +False + + + + +clMaroon +$00B9FFFF +608 +232 +120 +70 +LAuXBlsgVEy9diBr2n4AdwAA + + +codemngr + + +False + + +False + + + + +clMaroon +$00B9FFFF +628 +324 +120 +70 +AihHVW7SgkeVDEL8szGXUQAA + + +soft-repo + + +False + + +False + + + + +clMaroon +$00B9FFFF +404 +64 +120 +70 +koV3blO6REyuCQSKEhgOdAAA + + +devspec + + +False + + +False + + + + + + +dev-flow +tacoxPrx8kCKprVgJHnvqgAA + +OX4lnFVWFU6PHMrbj32cxAAA +129 + +clMaroon +1368 +468 +196 +353 +System + + +clMaroon +1580 +308 +185 +273 +System + + +clMaroon +1088 +12 +477 +449 +System + + +clMaroon +1564 +208 +300 +System + + +clMaroon +$00B9FFFF +872 +304 +200 +300 +System + + +clMaroon +$00B9FFFF +720 +4 +320 +189 +System + + +clMaroon +$00B9FFFF +172 +56 +121 +45 +7QUh/FC01Eqc8uAicCcB5QAA + + +1 +analysis + + +False + + +False + + + +False +7QUh/FC01Eqc8uAicCcB5QAA + + +False +7QUh/FC01Eqc8uAicCcB5QAA + + +False +7QUh/FC01Eqc8uAicCcB5QAA + + + +clMaroon +$00B9FFFF +928 +356 +70 +32 +GB5fgt+BCEuZu+MykpdKRQAA + + +1 +design + + +False + + +False + + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + + +clMaroon +$00B9FFFF +76 +292 +113 +45 +h9lhv0QFq0aFwcWza3gsDAAA + + +1 +list-external + + +False + + +False + + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + + +clMaroon +$00B9FFFF +204 +312 +231 +45 +XmSQJXVfo0qkbNCidOBOzwAA + + +1 +actor & action analysis + + +False + + +False + + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + + +clMaroon +$00B9FFFF +216 +252 +144 +45 +kETY7OJYc0qg/QkJQX2LXQAA + + +1 +data-io-analysis + + +False + + +False + + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + + +clMaroon +132 +360 +112 +30 +operation-actor-list + + + +clMaroon +92 +220 +87 +30 +physical-io-list + + + +clMaroon +$00B9FFFF +134,249;133,292 +ar/cmfoCE0OyMW57ay1ytwAA +T4twcBKRhUu/n8O3MeJdLwAA + + +clMaroon +$00B9FFFF +174,360;152,336 +ar/cmfoCE0OyMW57ay1ytwAA +MY8KtI96lUemNY9fWLx6pgAA + + +clMaroon +$00B9FFFF +233,360;246,356 +6iOG2zf6TEyGTIPJKas9rAAA +MY8KtI96lUemNY9fWLx6pgAA + + +clMaroon +$00B9FFFF +178,245;216,255 +ZVZSHvdc90+uyCG9xQvFFwAA +T4twcBKRhUu/n8O3MeJdLwAA + + +clMaroon +$00B9FFFF +188,300;216,293 +NSCnR/cZlUa3fXcKMhA8sQAA +ZVZSHvdc90+uyCG9xQvFFwAA +ar/cmfoCE0OyMW57ay1ytwAA + +False +1.5707963267949 +15 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +1.5707963267949 +30 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +-1.5707963267949 +15 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +-0.523598775598299 +30 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +0.523598775598299 +30 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +0.523598775598299 +25 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +-0.523598775598299 +25 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +-0.785398163397448 +40 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +0.785398163397448 +40 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +-932 +-1004 +50 +8 +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +-932 +-1004 +50 +8 +HdgD2FmAh06xyFDupk4vagAA + + + +clMaroon +$00B9FFFF +188,320;204,322 +ubIfnYMMgEuGrguT+jcONAAA +6iOG2zf6TEyGTIPJKas9rAAA +ar/cmfoCE0OyMW57ay1ytwAA + +False +1.5707963267949 +15 +ubIfnYMMgEuGrguT+jcONAAA + + +False +1.5707963267949 +30 +ubIfnYMMgEuGrguT+jcONAAA + + +False +-1.5707963267949 +15 +ubIfnYMMgEuGrguT+jcONAAA + + +False +-0.523598775598299 +30 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +0.523598775598299 +30 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +0.523598775598299 +25 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +-0.523598775598299 +25 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +-0.785398163397448 +40 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +0.785398163397448 +40 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +-932 +-1004 +50 +8 +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +-932 +-1004 +50 +8 +pxqjN0GODE69EvLg0dAl+AAA + + + +clMaroon +$00FFFF80 +220 +168 +108 +30 +data-flow-diagram + + + +clMaroon +$00FFFF80 +380 +388 +154 +38 +action-flow-diagram +invoking-procedure-diagram + + + +clMaroon +$00B9FFFF +275,197;284,252 +ZVZSHvdc90+uyCG9xQvFFwAA +TUzHcFBaSUWvtpWsS2/jdQAA + + +clMaroon +$00B9FFFF +422,388;361,356 +6iOG2zf6TEyGTIPJKas9rAAA +3VXAJzmn0kOyq98DVwWHnAAA + + +clMaroon +$00FFFF80 +352 +560 +134 +30 +function-feature-list-file + + + +clMaroon +$00B9FFFF +240 +388 +121 +38 +top-usecase-diagram +usecase-diagram + + + +clMaroon +$00B9FFFF +305,388;313,356 +6iOG2zf6TEyGTIPJKas9rAAA +p961lf0fSEW3ZPuY+wyZQgAA + + +clMaroon +$00B9FFFF +204 +440 +121 +45 +TMPdkgNID0u772le0sCmLgAA + + +1 +new-ideas-action + + +False + + +False + + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + + +clMaroon +$00B9FFFF +205 +548 +127 +45 +Kh+ykp9GgU6PQXUx+CGLxgAA + + +1 +new-demond-action + + +False + + +False + + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + + +clMaroon +$00B9FFFF +340 +496 +151 +45 +06qF2g1ff02RsBbBfLLo1gAA + + +1 +feature-analysis-task + + +False + + +False + + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + + +clMaroon +$00B9FFFF +208 +504 +123 +30 +note record in tagdoc + + + +clMaroon +$00B9FFFF +268,504;266,484 +sFw3N+djIEOBwQg4t6R70wAA +8hNIvxldLUuPj82B7trzxgAA + + +clMaroon +$00B9FFFF +268,548;268,533 +8hNIvxldLUuPj82B7trzxgAA +hlEB9emSQ0yr5JtMXv8exgAA + + +clMaroon +$00B9FFFF +340,518;330,518 +8hNIvxldLUuPj82B7trzxgAA +pbFdS1YKskuJx2F5GYPsxwAA + + +clMaroon +$00B9FFFF +324,484;356,496 +ZE6XGr3H4E+M1Lu1nRZ9BQAA +pbFdS1YKskuJx2F5GYPsxwAA +sFw3N+djIEOBwQg4t6R70wAA + +False +1.5707963267949 +15 +trimple-catagory +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +1.5707963267949 +30 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-1.5707963267949 +15 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-0.523598775598299 +30 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.523598775598299 +30 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +0.523598775598299 +25 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +-0.523598775598299 +25 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-0.785398163397448 +40 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.785398163397448 +40 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-1104 +-720 +50 +8 +irMBt7uWtEaxRopZEBcfwgAA + + +False +-1104 +-720 +50 +8 +eu/8Siwir02KNGkRDOEa9gAA + + + +clMaroon +$00B9FFFF +331,548;353,540 +li4LwavBrE+pggONaW7QkwAA +pbFdS1YKskuJx2F5GYPsxwAA +hlEB9emSQ0yr5JtMXv8exgAA + +False +1.5707963267949 +15 +trimple-catagory +li4LwavBrE+pggONaW7QkwAA + + +False +1.5707963267949 +30 +li4LwavBrE+pggONaW7QkwAA + + +False +-1.5707963267949 +15 +li4LwavBrE+pggONaW7QkwAA + + +False +-0.523598775598299 +30 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.523598775598299 +30 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +0.523598775598299 +25 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-0.523598775598299 +25 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-0.785398163397448 +40 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.785398163397448 +40 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-1104 +-720 +50 +8 +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-1104 +-720 +50 +8 +gehfWFMIjEKeVzAcdHneqgAA + + + +clMaroon +$00B9FFFF +417,560;416,540 +pbFdS1YKskuJx2F5GYPsxwAA +n5RHkAHiq0GHEjHyehEKAgAA + + +clMaroon +$00B9FFFF +388 +208 +165 +45 +c4KyOid86k6Bzi+unTPcfAAA + + +1 +generate data-dict + + +False + + +False + + + +False +c4KyOid86k6Bzi+unTPcfAAA + + +False +c4KyOid86k6Bzi+unTPcfAAA + + +False +c4KyOid86k6Bzi+unTPcfAAA + + + +clMaroon +$00B9FFFF +408 +148 +63 +30 +data-dict + + + +clMaroon +$00B9FFFF +460,208;446,177 +tAAqkaExpkOHoSKHhWwzIAAA +RvaeyZG/PUeTpXEVgO7PywAA + + +clMaroon +$00B9FFFF +359,257;388,250 +dxugzP0ZBEOdRYlU9N5SDAAA +RvaeyZG/PUeTpXEVgO7PywAA +ZVZSHvdc90+uyCG9xQvFFwAA + +False +1.5707963267949 +15 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +1.5707963267949 +30 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +-1.5707963267949 +15 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +-0.523598775598299 +30 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +0.523598775598299 +30 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +0.523598775598299 +25 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +-0.523598775598299 +25 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +-0.785398163397448 +40 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +0.785398163397448 +40 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +-932 +-1004 +50 +8 +/vsJW8WzsU++6Lul86APuQAA + + +False +-932 +-1004 +50 +8 +z475GIA9kECnM3EOwAHh6QAA + + + +clMaroon +$00B9FFFF +520 +148 +178 +45 +8E86OOxmt0eTCKMQNrubWAAA + + +1 +data-entity-analysis + + +False + + +False + + + +False +8E86OOxmt0eTCKMQNrubWAAA + + +False +8E86OOxmt0eTCKMQNrubWAAA + + +False +8E86OOxmt0eTCKMQNrubWAAA + + + +clMaroon +$00B9FFFF +521,208;558,192 +TfaTWdzXx0eF98RMZF5U/AAA +3zDgV/Xi/0+DECy5hTfn6AAA +RvaeyZG/PUeTpXEVgO7PywAA + +False +1.5707963267949 +15 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +1.5707963267949 +30 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +-1.5707963267949 +15 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +-0.523598775598299 +30 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +0.523598775598299 +30 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +0.523598775598299 +25 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +-0.523598775598299 +25 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +-0.785398163397448 +40 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +0.785398163397448 +40 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +-932 +-1004 +50 +8 +FR6YZrNJHkeksGzXICrvngAA + + +False +-932 +-1004 +50 +8 +ApKyMGFOCkStssh0gwBpKAAA + + + +clMaroon +$00B9FFFF +520,166;470,164 +tAAqkaExpkOHoSKHhWwzIAAA +3zDgV/Xi/0+DECy5hTfn6AAA + + +clMaroon +$00B9FFFF +476 +108 +75 +30 +ER-diagram + + + +clMaroon +$00B9FFFF +543,137;565,148 +3zDgV/Xi/0+DECy5hTfn6AAA +kcVNQ0wczES+n8ehG2y2/QAA + + +clMaroon +$00B9FFFF +444 +260 +145 +45 +tnTkvoZxVkmVjIgd8K6VcwAA + + +1 +module-design-task + + +False + + +False + + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + + +clMaroon +$00B9FFFF +359,277;444,280 +BNlaobUxlkaxprXRzDMgIwAA +s/iW5IUcqEOvkUCPbURcvAAA +ZVZSHvdc90+uyCG9xQvFFwAA + +False +1.5707963267949 +15 +BNlaobUxlkaxprXRzDMgIwAA + + +False +1.5707963267949 +30 +BNlaobUxlkaxprXRzDMgIwAA + + +False +-1.5707963267949 +15 +BNlaobUxlkaxprXRzDMgIwAA + + +False +-0.523598775598299 +30 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +0.523598775598299 +30 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +0.523598775598299 +25 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +-0.523598775598299 +25 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +-0.785398163397448 +40 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +0.785398163397448 +40 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +-932 +-1004 +50 +8 +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +-932 +-1004 +50 +8 +UtVAs5JBSkKc0jSVdLpypQAA + + + +clMaroon +$00B9FFFF +402,312;444,301 +t3VIg1cXJEmsTGdIYQFIcwAA +s/iW5IUcqEOvkUCPbURcvAAA +6iOG2zf6TEyGTIPJKas9rAAA + +False +1.5707963267949 +15 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +1.5707963267949 +30 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +-1.5707963267949 +15 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +-0.523598775598299 +30 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +0.523598775598299 +30 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +0.523598775598299 +25 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +-0.523598775598299 +25 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +-0.785398163397448 +40 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +0.785398163397448 +40 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +-932 +-1004 +50 +8 +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +-932 +-1004 +50 +8 +IuqkqTOhTEuBUbn2uLNuqAAA + + + +clMaroon +$00B9FFFF +528 +500 +85 +53 +build-dest +install-pkg-list +src-pkg + + + +clMaroon +$00FFFF80 +508 +332 +152 +38 +function-module-list-file +class-diagram + + + +clMaroon +$00B9FFFF +565,332;538,304 +s/iW5IUcqEOvkUCPbURcvAAA +XplFyUBcGE23N1wJH+UaowAA + + +clMaroon +$00FF80FF +80 +524 +117 +45 +7FwnjSWdM0KKXAN3V8oQMAAA + + +1 +soft-demond + + +False + + +False + + + +False +7FwnjSWdM0KKXAN3V8oQMAAA + + +False +7FwnjSWdM0KKXAN3V8oQMAAA + + +False +7FwnjSWdM0KKXAN3V8oQMAAA + + + +clMaroon +$00FF80FF +72 +444 +121 +45 +mx6wTw6+KEuGtAr0iRUXJwAA + + +1 +analysis-task + + +False + + +False + + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + + +clMaroon +$00B9FFFF +388,210;327,195 +TUzHcFBaSUWvtpWsS2/jdQAA +RvaeyZG/PUeTpXEVgO7PywAA + + +clMaroon +$00FFFF80 +560 +396 +152 +30 +top-function-module-list-file + + + +clMaroon +$00B9FFFF +544 +448 +267 +45 +EjjnPhUmf02yFIvhJmdcmQAA + + +1 +pkg-dest category + + +False + + +False + + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + + +clMaroon +$00B9FFFF +635,492;612,504 +qVEe/fF3/kC3YIIc7BmwuAAA +RDlS3XZVdUCC/tRmDGvFywAA + + +clMaroon +$00B9FFFF +645,425;661,448 +RDlS3XZVdUCC/tRmDGvFywAA +T6b0hHxnwE+qhStkZmN/sQAA + + +clMaroon +$00B9FFFF +505,304;465,388 +3VXAJzmn0kOyq98DVwWHnAAA +s/iW5IUcqEOvkUCPbURcvAAA + + +clMaroon +$00B9FFFF +620 +260 +121 +45 +a7yZcyAyl02YNl0/FQziyQAA + + +1 +layer-design + + +False + + +False + + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + + +clMaroon +$00B9FFFF +600 +204 +171 +38 +function-module-struct-diagram +architech-diagram + + + +clMaroon +$00B9FFFF +683,241;682,260 +iVh3QgkpmkKlqxcSGYTCIQAA +wOOUnwLcykSHmOK6Cujx5gAA + + +clMaroon +$00B9FFFF +588,282;620,282 +xMoCRZ0FD0mJscRNN+UpywAA +iVh3QgkpmkKlqxcSGYTCIQAA +s/iW5IUcqEOvkUCPbURcvAAA + +False +1.5707963267949 +15 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +1.5707963267949 +30 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +-1.5707963267949 +15 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +-0.523598775598299 +30 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +0.523598775598299 +30 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +0.523598775598299 +25 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +-0.523598775598299 +25 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +-0.785398163397448 +40 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +0.785398163397448 +40 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +-932 +-1004 +50 +8 +FVDBPeq7mEKlp1go7V1hsgAA + + +False +-932 +-1004 +50 +8 +6MJU+jYHa0mx8HaVM4S+8QAA + + + +clMaroon +$00B9FFFF +132,444;132,336 +BZR3CshDZEOw2M912JpeeQAA +ar/cmfoCE0OyMW57ay1ytwAA +9ECchidjm0Oyi96zrE/MCgAA + +False +1.5707963267949 +15 +BZR3CshDZEOw2M912JpeeQAA + + +False +1.5707963267949 +30 +BZR3CshDZEOw2M912JpeeQAA + + +False +-1.5707963267949 +15 +BZR3CshDZEOw2M912JpeeQAA + + +False +-0.523598775598299 +30 +epHead +vN04w+sn8kGRW/7MCPHqyAAA + + +False +0.523598775598299 +30 +epTail +0CpaRkRUf0+bAPOkrSqRSgAA + + +False +0.523598775598299 +25 +epHead +vN04w+sn8kGRW/7MCPHqyAAA + + +False +-0.523598775598299 +25 +epTail +0CpaRkRUf0+bAPOkrSqRSgAA + + +False +-0.785398163397448 +40 +epHead +vN04w+sn8kGRW/7MCPHqyAAA + + +False +0.785398163397448 +40 +epTail +0CpaRkRUf0+bAPOkrSqRSgAA + + +False +-1000 +-1000 +50 +8 +vN04w+sn8kGRW/7MCPHqyAAA + + +False +-1000 +-1000 +50 +8 +0CpaRkRUf0+bAPOkrSqRSgAA + + + +clMaroon +$00B9FFFF +196,557;205,559 +/FmqeTd2akSH7n3I8hA3mQAA +hlEB9emSQ0yr5JtMXv8exgAA +XmyUwnJKX02C4THv/GbClAAA + +False +1.5707963267949 +15 +/FmqeTd2akSH7n3I8hA3mQAA + + +False +1.5707963267949 +30 +/FmqeTd2akSH7n3I8hA3mQAA + + +False +-1.5707963267949 +15 +/FmqeTd2akSH7n3I8hA3mQAA + + +False +-0.523598775598299 +30 +epHead +QZwwsltNj0eenKeiSJArvQAA + + +False +0.523598775598299 +30 +epTail +vq1zAfKQxUWnGiKbBTmYJwAA + + +False +0.523598775598299 +25 +epHead +QZwwsltNj0eenKeiSJArvQAA + + +False +-0.523598775598299 +25 +epTail +vq1zAfKQxUWnGiKbBTmYJwAA + + +False +-0.785398163397448 +40 +epHead +QZwwsltNj0eenKeiSJArvQAA + + +False +0.785398163397448 +40 +epTail +vq1zAfKQxUWnGiKbBTmYJwAA + + +False +-1000 +-1000 +50 +8 +QZwwsltNj0eenKeiSJArvQAA + + +False +-1000 +-1000 +50 +8 +vq1zAfKQxUWnGiKbBTmYJwAA + + + +clMaroon +$00B9FFFF +700 +524 +132 +98 +cmd-args-design +running-param-design +.lex/.gmr/.type/.ui +time-sequence-diagram +E-R-diagram +sql-tbl + + + +clMaroon +$00B9FFFF +1591 +76 +134 +45 +kM7+GQ5RuEmygAJdSluSjQAA + + +1 +src-pkg-create + + +False + + +False + + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + + +clMaroon +$00B9FFFF +1580 +248 +156 +45 +KmQBouG6c0yb16gPnUnBtQAA + + +1 +RAD-demo + + +False + + +False + + + +False +KmQBouG6c0yb16gPnUnBtQAA + + +False +KmQBouG6c0yb16gPnUnBtQAA + + +False +KmQBouG6c0yb16gPnUnBtQAA + + + +clMaroon +$00B9FFFF +1344 +173 +135 +32 +CLf6+wSJ/U+4iSwM7QoY3wAA + + +1 +design-to-code + + +False + + +False + + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + + +clMaroon +$00B9FFFF +1428 +284 +104 +32 +gJ7o4uiAMEqSPUL3dadz2wAA + + +1 +unit-coding + + +False + + +False + + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + + +clMaroon +$00B9FFFF +1360 +353 +108 +32 +wftqTlAvI0+cR9j69saRNQAA + + +1 +unit-testing + + +False + + +False + + + +False +wftqTlAvI0+cR9j69saRNQAA + + +False +wftqTlAvI0+cR9j69saRNQAA + + +False +wftqTlAvI0+cR9j69saRNQAA + + + +clMaroon +$00B9FFFF +1344 +404 +152 +32 +qlZGCifQOEyQyqBzIH1x/AAA + + +1 +integrate-testing + + +False + + +False + + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + + +clMaroon +$00B9FFFF +1609 +398 +121 +45 +lOyDrRE6cEms6LglvRhNKwAA + + +1 +testing + + +False + + +False + + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + + +clMaroon +$00B9FFFF +1595 +460 +148 +45 +ucei5JvgaEarsuGuZmgj7QAA + + +1 +doc-tutorial-web + + +False + + +False + + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + + +clMaroon +$00B9FFFF +1609 +522 +121 +45 +ZFe9gOmpTEWMgVssyEcAWAAA + + +1 +version-pkg + + +False + + +False + + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + + +clMaroon +$00B9FFFF +1401 +563 +131 +45 +lEIXTXT9L0CS9sEhjP/8NQAA + + +1 +pkg-repo-sync + + +False + + +False + + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + + +clMaroon +$00B9FFFF +1399 +630 +135 +45 +jmiilGYeBU+1y4Yw2n8CKAAA + + +1 +download-build + + +False + + +False + + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + + +clMaroon +$00B9FFFF +1395 +697 +142 +45 +RfRTk7cK0061dLioGm8l7wAA + + +1 +loopbak-testing + + +False + + +False + + + +False +RfRTk7cK0061dLioGm8l7wAA + + +False +RfRTk7cK0061dLioGm8l7wAA + + +False +RfRTk7cK0061dLioGm8l7wAA + + + +clMaroon +$00B9FFFF +1403 +764 +127 +45 +G18zTBUAj0+SdrsOmksR0QAA + + +1 +publish-task + + +False + + +False + + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + + +clMaroon +$00B9FFFF +1657,120;1657,132 +YcGgDGXOZ06J+TZOxU72agAA +bwHJGe0us0a2jeejcciWlwAA +mCnmzxWG6kWi9OPK25z8CgAA + +False +1.5707963267949 +15 +YcGgDGXOZ06J+TZOxU72agAA + + +False +1.5707963267949 +30 +YcGgDGXOZ06J+TZOxU72agAA + + +False +-1.5707963267949 +15 +YcGgDGXOZ06J+TZOxU72agAA + + +False +-0.523598775598299 +30 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +0.523598775598299 +30 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +0.523598775598299 +25 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +-0.523598775598299 +25 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +-0.785398163397448 +40 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +0.785398163397448 +40 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +-516 +-1008 +50 +8 +W6JXNHPDXE+JzttRtRevOgAA + + +False +-516 +-1008 +50 +8 +rO/Oarhbpk6wEn45hIpPfAAA + + + +clMaroon +$00B9FFFF +1580,269;1548,268;1548,52;964,52;965,72 +8kJkpVqo5kC/wdE3wXcwIAAA +5srcgF0EYUyRM6tylL0wVgAA +PUHktwo1XEONvjakWKxjjgAA + +False +1.5707963267949 +15 +8kJkpVqo5kC/wdE3wXcwIAAA + + +False +1.5707963267949 +30 +8kJkpVqo5kC/wdE3wXcwIAAA + + +False +-1.5707963267949 +15 +8kJkpVqo5kC/wdE3wXcwIAAA + + +False +-0.523598775598299 +30 +epHead +42F3TeDc+kOeEbEW2sSOqwAA + + +False +0.523598775598299 +30 +epTail +b75cgmrZUEiaHJZyDm8qXAAA + + +False +0.523598775598299 +25 +epHead +42F3TeDc+kOeEbEW2sSOqwAA + + +False +-0.523598775598299 +25 +epTail +b75cgmrZUEiaHJZyDm8qXAAA + + +False +-0.785398163397448 +40 +epHead +42F3TeDc+kOeEbEW2sSOqwAA + + +False +0.785398163397448 +40 +epTail +b75cgmrZUEiaHJZyDm8qXAAA + + +False +-540 +-1120 +50 +8 +42F3TeDc+kOeEbEW2sSOqwAA + + +False +-540 +-1120 +50 +8 +b75cgmrZUEiaHJZyDm8qXAAA + + + +clMaroon +$00B9FFFF +1411,204;1411,233 +k48n8C/dEECUhVTIv9BoGQAA +1soCBV2ToUK8JVFLvn+e2wAA +GaKv5RiKr0yqd1YQfpBS6QAA + +False +1.5707963267949 +15 +k48n8C/dEECUhVTIv9BoGQAA + + +False +1.5707963267949 +30 +k48n8C/dEECUhVTIv9BoGQAA + + +False +-1.5707963267949 +15 +k48n8C/dEECUhVTIv9BoGQAA + + +False +-0.523598775598299 +30 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +0.523598775598299 +30 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +0.523598775598299 +25 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +-0.523598775598299 +25 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +-0.785398163397448 +40 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +0.785398163397448 +40 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +-540 +-1120 +50 +8 +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +-540 +-1120 +50 +8 +YXudH8Doi0+zzc1qPMjDNAAA + + + +clMaroon +$00B9FFFF +1464,315;1427,353 +euFZ2oXh1UyoeBpwCRLyDQAA +0HXL2vLmwU+NgNkl6zVkQAAA +Ji7GcpOn/E2KIxghPULMgwAA + +False +1.5707963267949 +15 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +1.5707963267949 +30 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +-1.5707963267949 +15 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +-0.523598775598299 +30 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +0.523598775598299 +30 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +0.523598775598299 +25 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +-0.523598775598299 +25 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +-0.785398163397448 +40 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +0.785398163397448 +40 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +-540 +-1120 +50 +8 +g0Sss8qL1USpNMhJiejoNQAA + + +False +-540 +-1120 +50 +8 +nnIS6vjqXkqw2mw9rhuzugAA + + + +clMaroon +$00B9FFFF +1415,384;1417,404 +h7KFG98rIEKQY4C1dOWmFQAA +lSkarANt7EiYF5x5MQ7+qgAA +0HXL2vLmwU+NgNkl6zVkQAAA + +False +1.5707963267949 +15 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +1.5707963267949 +30 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +-1.5707963267949 +15 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +-0.523598775598299 +30 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +0.523598775598299 +30 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +0.523598775598299 +25 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +-0.523598775598299 +25 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +-0.785398163397448 +40 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +0.785398163397448 +40 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +-540 +-1120 +50 +8 +Fb68OZ19C0WB4BjQurmBRwAA + + +False +-540 +-1120 +50 +8 +akgagoM7O0WP1rFMWH/IzgAA + + + +clMaroon +$00B9FFFF +1480,404;1609,373 +GTroIE/UlEq3H/lwjMvR8wAA +8o8JeUyoWka2YCr2oj8TIgAA +lSkarANt7EiYF5x5MQ7+qgAA + +False +1.5707963267949 +15 +GTroIE/UlEq3H/lwjMvR8wAA + + +False +1.5707963267949 +30 +GTroIE/UlEq3H/lwjMvR8wAA + + +False +-1.5707963267949 +15 +GTroIE/UlEq3H/lwjMvR8wAA + + +False +-0.523598775598299 +30 +epHead +DiYoPg9r+0KN6xRjGDN+kwAA + + +False +0.523598775598299 +30 +epTail +BmvYAIFdPEKrfzWwQhihCAAA + + +False +0.523598775598299 +25 +epHead +DiYoPg9r+0KN6xRjGDN+kwAA + + +False +-0.523598775598299 +25 +epTail +BmvYAIFdPEKrfzWwQhihCAAA + + +False +-0.785398163397448 +40 +epHead +DiYoPg9r+0KN6xRjGDN+kwAA + + +False +0.785398163397448 +40 +epTail +BmvYAIFdPEKrfzWwQhihCAAA + + +False +-540 +-1120 +50 +8 +DiYoPg9r+0KN6xRjGDN+kwAA + + +False +-540 +-1120 +50 +8 +BmvYAIFdPEKrfzWwQhihCAAA + + + +clMaroon +$00B9FFFF +1669,442;1669,460 +hKV30qElWkWAVhrHK7PJbAAA +SJxSR34gTkGLBFrgEQoGBwAA +hhCDRIRYnU+Qwbyyoec6WwAA + +False +1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +1.5707963267949 +30 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-0.523598775598299 +30 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.523598775598299 +30 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +0.523598775598299 +25 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-0.523598775598299 +25 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-0.785398163397448 +40 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.785398163397448 +40 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-524 +-1032 +50 +8 +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-524 +-1032 +50 +8 +WHhyhUoWo0iDDhj6FaqW/gAA + + + +clMaroon +$00B9FFFF +1668,504;1668,522 +Htop0thy70qsJ36MwSIctgAA +wTzRmZpNA0CytlcwOuyUMQAA +SJxSR34gTkGLBFrgEQoGBwAA + +False +1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +1.5707963267949 +30 +Htop0thy70qsJ36MwSIctgAA + + +False +-1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +-0.523598775598299 +30 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.523598775598299 +30 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +0.523598775598299 +25 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-0.523598775598299 +25 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-0.785398163397448 +40 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.785398163397448 +40 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-524 +-1032 +50 +8 +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-524 +-1032 +50 +8 +bDyGtYJmuUiVC+pPkc7oHgAA + + + +clMaroon +$00B9FFFF +1609,536;1548,528 +wt/kYLKLC0CiPMmQly9eoAAA +f5vhNxPD30OIg0/MpcEnMgAA +wTzRmZpNA0CytlcwOuyUMQAA + +False +1.5707963267949 +15 +wt/kYLKLC0CiPMmQly9eoAAA + + +False +1.5707963267949 +30 +wt/kYLKLC0CiPMmQly9eoAAA + + +False +-1.5707963267949 +15 +wt/kYLKLC0CiPMmQly9eoAAA + + +False +-0.523598775598299 +30 +epHead +xGchvlfNhUO0g6gfoLFLRgAA + + +False +0.523598775598299 +30 +epTail +mwO8gf6vqUOl745za4HJ8wAA + + +False +0.523598775598299 +25 +epHead +xGchvlfNhUO0g6gfoLFLRgAA + + +False +-0.523598775598299 +25 +epTail +mwO8gf6vqUOl745za4HJ8wAA + + +False +-0.785398163397448 +40 +epHead +xGchvlfNhUO0g6gfoLFLRgAA + + +False +0.785398163397448 +40 +epTail +mwO8gf6vqUOl745za4HJ8wAA + + +False +-544 +-1008 +50 +8 +xGchvlfNhUO0g6gfoLFLRgAA + + +False +-544 +-1008 +50 +8 +mwO8gf6vqUOl745za4HJ8wAA + + + +clMaroon +$00B9FFFF +1466,607;1466,630 +t/ADlzXN00KW0NiGhwkclQAA +IIt4VBS2JkOc0GS4zIsSDAAA +sAS2iGQLE0GVexawSaeD0AAA + +False +1.5707963267949 +15 +t/ADlzXN00KW0NiGhwkclQAA + + +False +1.5707963267949 +30 +t/ADlzXN00KW0NiGhwkclQAA + + +False +-1.5707963267949 +15 +t/ADlzXN00KW0NiGhwkclQAA + + +False +-0.523598775598299 +30 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +0.523598775598299 +30 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +0.523598775598299 +25 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +-0.523598775598299 +25 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +-0.785398163397448 +40 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +0.785398163397448 +40 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +-712 +-1032 +50 +8 +LL86l17PZku+YBsr/fUklwAA + + +False +-712 +-1032 +50 +8 +bvYo1TGY6U2Io35TQ/yATAAA + + + +clMaroon +$00B9FFFF +1466,674;1465,697 +5n9wkh0NQUu8BFWyytdErgAA +e0Tnr7u8AE+La5gTMkR+KwAA +IIt4VBS2JkOc0GS4zIsSDAAA + +False +1.5707963267949 +15 +5n9wkh0NQUu8BFWyytdErgAA + + +False +1.5707963267949 +30 +5n9wkh0NQUu8BFWyytdErgAA + + +False +-1.5707963267949 +15 +5n9wkh0NQUu8BFWyytdErgAA + + +False +-0.523598775598299 +30 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +0.523598775598299 +30 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +0.523598775598299 +25 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +-0.523598775598299 +25 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +-0.785398163397448 +40 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +0.785398163397448 +40 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +-712 +-1032 +50 +8 +P+S209BDDkSnrN4WPl8+WAAA + + +False +-712 +-1032 +50 +8 +UYbXc0CahESM869EpDq6lwAA + + + +clMaroon +$00B9FFFF +1465,741;1466,764 +1QbYYnq3ykqiPL0Gv6UkSwAA +GNt2i16Jv0er8A8pORMwcAAA +e0Tnr7u8AE+La5gTMkR+KwAA + +False +1.5707963267949 +15 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +1.5707963267949 +30 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +-1.5707963267949 +15 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +-0.523598775598299 +30 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +0.523598775598299 +30 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +0.523598775598299 +25 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +-0.523598775598299 +25 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +-0.785398163397448 +40 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +0.785398163397448 +40 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +-712 +-1032 +50 +8 +2J0+TPdjaECdzYN0YQ2guQAA + + +False +-712 +-1032 +50 +8 +WMjnuHQF3kiQvKAfM+S81wAA + + + +clMaroon +$00B9FFFF +1591 +24 +135 +45 +l2Lw5fePkE+9xXcdzSY+bwAA + + +1 +dev-env-install + + +False + + +False + + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + + +clMaroon +$00B9FFFF +1658,68;1658,76 +3RL8yaG7p0udrs0v9djevAAA +mCnmzxWG6kWi9OPK25z8CgAA +ba/wrXKu5EuHn69Sc1EByQAA + +False +1.5707963267949 +15 +3RL8yaG7p0udrs0v9djevAAA + + +False +1.5707963267949 +30 +3RL8yaG7p0udrs0v9djevAAA + + +False +-1.5707963267949 +15 +3RL8yaG7p0udrs0v9djevAAA + + +False +-0.523598775598299 +30 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +0.523598775598299 +30 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +0.523598775598299 +25 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +-0.523598775598299 +25 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +-0.785398163397448 +40 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +0.785398163397448 +40 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +-516 +-1008 +50 +8 +La7Sdx9zEUWWIkxIncjJuAAA + + +False +-516 +-1008 +50 +8 +h4chvQo17kKpYAZk9SZs0wAA + + + +clMaroon +$00B9FFFF +1584 +132 +148 +45 +ofqv4KD9ukybRvF//Fek/AAA + + +1 +web home pages + + +False + + +False + + + +False +ofqv4KD9ukybRvF//Fek/AAA + + +False +ofqv4KD9ukybRvF//Fek/AAA + + +False +ofqv4KD9ukybRvF//Fek/AAA + + + +clMaroon +$00B9FFFF +1657,176;1657,196 +BYyEw6WhrkigDw+109evLAAA +xPeRQZfwOEmy8TaWIhh+GQAA +bwHJGe0us0a2jeejcciWlwAA + +False +1.5707963267949 +15 +BYyEw6WhrkigDw+109evLAAA + + +False +1.5707963267949 +30 +BYyEw6WhrkigDw+109evLAAA + + +False +-1.5707963267949 +15 +BYyEw6WhrkigDw+109evLAAA + + +False +-0.523598775598299 +30 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +0.523598775598299 +30 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +0.523598775598299 +25 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +-0.523598775598299 +25 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +-0.785398163397448 +40 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +0.785398163397448 +40 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +-516 +-1008 +50 +8 +2dUTUSyX8USUOoaapULmuQAA + + +False +-516 +-1008 +50 +8 +Dk4WLVZ+SU+WfPXc7TG0IwAA + + + +clMaroon +$00B9FFFF +1564 +196 +189 +45 +czS7yLr6oUygLwEMTWJMVgAA + + +1 +first-ver-dev-env-chk + + +False + + +False + + + +False +czS7yLr6oUygLwEMTWJMVgAA + + +False +czS7yLr6oUygLwEMTWJMVgAA + + +False +czS7yLr6oUygLwEMTWJMVgAA + + + +clMaroon +$00B9FFFF +1658,240;1658,248 +ULUs5j3aC0Gd9Vn1OUTU2wAA +PUHktwo1XEONvjakWKxjjgAA +xPeRQZfwOEmy8TaWIhh+GQAA + +False +1.5707963267949 +15 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +1.5707963267949 +30 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +-1.5707963267949 +15 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +-0.523598775598299 +30 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +0.523598775598299 +30 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +0.523598775598299 +25 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +-0.523598775598299 +25 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +-0.785398163397448 +40 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +0.785398163397448 +40 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +-516 +-1008 +50 +8 +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +-516 +-1008 +50 +8 +XXlOcGC2n0emsre13Wy0GgAA + + + +clMaroon +$00B9FFFF +1383 +496 +166 +45 +bjrraLbGKUSY+GYzLNk5RAAA + + +1 +launch-pkg-publish + + +False + + +False + + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + + +clMaroon +$00B9FFFF +1465,540;1466,563 +4wmxJ9R9R0eU6Jn8Ho3xFwAA +sAS2iGQLE0GVexawSaeD0AAA +f5vhNxPD30OIg0/MpcEnMgAA + +False +1.5707963267949 +15 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +1.5707963267949 +30 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +-1.5707963267949 +15 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +-0.523598775598299 +30 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +0.523598775598299 +30 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +0.523598775598299 +25 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +-0.523598775598299 +25 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +-0.785398163397448 +40 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +0.785398163397448 +40 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +-556 +-1072 +50 +8 +7JwpGqJmgku60xKurQDyPwAA + + +False +-556 +-1072 +50 +8 +L7xnZ29mQEadCI+TRP2QQAAA + + + +clMaroon +$00B9FFFF +1609 +336 +121 +45 +aUVRiLFY4USAN9h1PY1/vAAA + + +1 +multi-lang + + +False + + +False + + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + + +clMaroon +$00B9FFFF +1669,380;1669,398 ++nJDFiS7VECOJ4vWaYvszgAA +hhCDRIRYnU+Qwbyyoec6WwAA +8o8JeUyoWka2YCr2oj8TIgAA + +False +1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +1.5707963267949 +30 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-0.523598775598299 +30 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.523598775598299 +30 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +0.523598775598299 +25 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-0.523598775598299 +25 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-0.785398163397448 +40 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.785398163397448 +40 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-516 +-1008 +50 +8 +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-516 +-1008 +50 +8 +VvsNJNyOO0e86/eHwYM58QAA + + + +clMaroon +$00B9FFFF +1416 +472 +96 +23 +publish-procedure + + + +clMaroon +$00B9FFFF +1624 +312 +109 +23 +after-dev-procedure + + + +clMaroon +$00B9FFFF +1368 +12 +101 +23 +develop-procedure + + + +clMaroon +$00B9FFFF +1604 +4 +109 +23 +dev-initial-procedure + + + +clMaroon +$00B9FFFF +916 +132 +120 +32 +oKO/T5e9P0yxfxSC9DK89wAA + + +1 +get-task + + +False + + +False + + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + + +clMaroon +$00B9FFFF +1340 +233 +144 +32 +CBkE9JDrJU21ybYWNP2cCgAA + + +1 +create-test-unit + + +False + + +False + + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + + +clMaroon +$00B9FFFF +1276 +284 +123 +32 +CEEcWQKt0kyX8zYOPZHrrwAA + + +1 +bugfix-coding + + +False + + +False + + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + + +clMaroon +$00B9FFFF +740 +32 +154 +45 +KMKq644vfEq7voEHMFkLwgAA + + +1 +initial-dev-launch + + +False + + +False + + + +False +KMKq644vfEq7voEHMFkLwgAA + + +False +KMKq644vfEq7voEHMFkLwgAA + + +False +KMKq644vfEq7voEHMFkLwgAA + + + +clMaroon +$00B9FFFF +736 +80 +142 +45 +PjS4k33/kkePfB8R0Qh14AAA + + +1 +bugfix-estimate + + +False + + +False + + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + + +clMaroon +$00B9FFFF +732 +132 +209 +45 +GbTWbRuRqkK91Ggxct5sowAA + + +1 +new-feature-dev-launch + + +False + + +False + + + +False +GbTWbRuRqkK91Ggxct5sowAA + + +False +GbTWbRuRqkK91Ggxct5sowAA + + +False +GbTWbRuRqkK91Ggxct5sowAA + + + +clMaroon +$00B9FFFF +904 +72 +127 +45 +F4Ld7UGpQkiQCCnqXOJ06wAA + + +1 +task-schedule + + +False + + +False + + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + + +clMaroon +$00B9FFFF +974,163;963,356 +X3JNoNb8Jky2P0O9whu+8QAA +UxkwPHCKZUOZB8abt9yLgQAA +dbDAxqIYDEef6cq3x4sQfAAA + +False +1.5707963267949 +15 +X3JNoNb8Jky2P0O9whu+8QAA + + +False +1.5707963267949 +30 +X3JNoNb8Jky2P0O9whu+8QAA + + +False +-1.5707963267949 +15 +X3JNoNb8Jky2P0O9whu+8QAA + + +False +-0.523598775598299 +30 +epHead +UUjC686FYU6T/q1aKuDLkgAA + + +False +0.523598775598299 +30 +epTail +XdMG4B9cfkWIcWgvsVmQUgAA + + +False +0.523598775598299 +25 +epHead +UUjC686FYU6T/q1aKuDLkgAA + + +False +-0.523598775598299 +25 +epTail +XdMG4B9cfkWIcWgvsVmQUgAA + + +False +-0.785398163397448 +40 +epHead +UUjC686FYU6T/q1aKuDLkgAA + + +False +0.785398163397448 +40 +epTail +XdMG4B9cfkWIcWgvsVmQUgAA + + +False +-516 +-1008 +50 +8 +UUjC686FYU6T/q1aKuDLkgAA + + +False +-516 +-1008 +50 +8 +XdMG4B9cfkWIcWgvsVmQUgAA + + + +clMaroon +$00B9FFFF +1035,153;1344,182 +TzMLJBMMOEKimlwgjlIwnQAA +GaKv5RiKr0yqd1YQfpBS6QAA +dbDAxqIYDEef6cq3x4sQfAAA + +False +1.5707963267949 +15 +TzMLJBMMOEKimlwgjlIwnQAA + + +False +1.5707963267949 +30 +TzMLJBMMOEKimlwgjlIwnQAA + + +False +-1.5707963267949 +15 +TzMLJBMMOEKimlwgjlIwnQAA + + +False +-0.523598775598299 +30 +epHead +BOzCR9HOxU+q1mRime4kPgAA + + +False +0.523598775598299 +30 +epTail +cCWrTkROLUy3C0VntDGRjwAA + + +False +0.523598775598299 +25 +epHead +BOzCR9HOxU+q1mRime4kPgAA + + +False +-0.523598775598299 +25 +epTail +cCWrTkROLUy3C0VntDGRjwAA + + +False +-0.785398163397448 +40 +epHead +BOzCR9HOxU+q1mRime4kPgAA + + +False +0.785398163397448 +40 +epTail +cCWrTkROLUy3C0VntDGRjwAA + + +False +-516 +-1008 +50 +8 +BOzCR9HOxU+q1mRime4kPgAA + + +False +-516 +-1008 +50 +8 +cCWrTkROLUy3C0VntDGRjwAA + + + +clMaroon +$00B9FFFF +1432,264;1459,284 +DCobZcXopUed3uhu7f3tCwAA +Ji7GcpOn/E2KIxghPULMgwAA +1soCBV2ToUK8JVFLvn+e2wAA + +False +1.5707963267949 +15 +DCobZcXopUed3uhu7f3tCwAA + + +False +1.5707963267949 +30 +DCobZcXopUed3uhu7f3tCwAA + + +False +-1.5707963267949 +15 +DCobZcXopUed3uhu7f3tCwAA + + +False +-0.523598775598299 +30 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +0.523598775598299 +30 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +0.523598775598299 +25 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +-0.523598775598299 +25 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +-0.785398163397448 +40 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +0.785398163397448 +40 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +-516 +-1008 +50 +8 +GPR477SH0U2rZy9DRg9MzAAA + + +False +-516 +-1008 +50 +8 +DFlh0do87UmmJQigSQRsiAAA + + + +clMaroon +$00B9FFFF +1388,264;1359,284 +BUd2VmDLEkKHuqopStVszQAA +N1P5SuGh4EWdFcErHd0tKAAA +1soCBV2ToUK8JVFLvn+e2wAA + +False +1.5707963267949 +15 +BUd2VmDLEkKHuqopStVszQAA + + +False +1.5707963267949 +30 +BUd2VmDLEkKHuqopStVszQAA + + +False +-1.5707963267949 +15 +BUd2VmDLEkKHuqopStVszQAA + + +False +-0.523598775598299 +30 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +0.523598775598299 +30 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +0.523598775598299 +25 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +-0.523598775598299 +25 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +-0.785398163397448 +40 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +0.785398163397448 +40 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +-516 +-1008 +50 +8 +XyL91tS87U+MpUc/Z25u1gAA + + +False +-516 +-1008 +50 +8 +2t6hyyogW027sVhhVrjclQAA + + + +clMaroon +$00B9FFFF +1355,315;1397,353 +fk3nxDxX5USF8gff9cP5MwAA +0HXL2vLmwU+NgNkl6zVkQAAA +N1P5SuGh4EWdFcErHd0tKAAA + +False +1.5707963267949 +15 +fk3nxDxX5USF8gff9cP5MwAA + + +False +1.5707963267949 +30 +fk3nxDxX5USF8gff9cP5MwAA + + +False +-1.5707963267949 +15 +fk3nxDxX5USF8gff9cP5MwAA + + +False +-0.523598775598299 +30 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +0.523598775598299 +30 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +0.523598775598299 +25 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +-0.523598775598299 +25 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +-0.785398163397448 +40 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +0.785398163397448 +40 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +-516 +-1008 +50 +8 +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +-516 +-1008 +50 +8 +lp0ewCTLb06H/3WjWYmLOQAA + + + +clMaroon +$00B9FFFF +1152 +224 +104 +30 +test-code for unit + + + +clMaroon +$00B9FFFF +1484 +208 +61 +30 +src-code + + + +clMaroon +$00B9FFFF +920 +308 +94 +23 +design-procedure + + + +clMaroon +$00B9FFFF +1484 +148 +55 +30 +src-pkg + + + +clMaroon +$00B9FFFF +1116 +268 +144 +30 +testing-code for integrate + + + +clMaroon +$00B9FFFF +1124 +312 +125 +30 +testing-code for using + + + +clMaroon +$00B9FFFF +900 +8 +76 +23 +task-schedule + + + +clMaroon +$00B9FFFF +893,74;904,77 +dmgxVDpivEyRrIdXr3QLWwAA +5srcgF0EYUyRM6tylL0wVgAA +uI0Vw5nV8k2MpwNxuYq/IAAA + +False +1.5707963267949 +15 +dmgxVDpivEyRrIdXr3QLWwAA + + +False +1.5707963267949 +30 +dmgxVDpivEyRrIdXr3QLWwAA + + +False +-1.5707963267949 +15 +dmgxVDpivEyRrIdXr3QLWwAA + + +False +-0.523598775598299 +30 +epHead +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +0.523598775598299 +30 +epTail +v/43TdYAaEacDIIH0o4rFQAA + + +False +0.523598775598299 +25 +epHead +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +-0.523598775598299 +25 +epTail +v/43TdYAaEacDIIH0o4rFQAA + + +False +-0.785398163397448 +40 +epHead +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +0.785398163397448 +40 +epTail +v/43TdYAaEacDIIH0o4rFQAA + + +False +-1000 +-1000 +50 +8 +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +-1000 +-1000 +50 +8 +v/43TdYAaEacDIIH0o4rFQAA + + + +clMaroon +$00B9FFFF +877,98;904,97 +gFnk16iOFki43F+XSkxbHAAA +5srcgF0EYUyRM6tylL0wVgAA +IjimQpqMbkC8IpOXi07GSgAA + +False +1.5707963267949 +15 +gFnk16iOFki43F+XSkxbHAAA + + +False +1.5707963267949 +30 +gFnk16iOFki43F+XSkxbHAAA + + +False +-1.5707963267949 +15 +gFnk16iOFki43F+XSkxbHAAA + + +False +-0.523598775598299 +30 +epHead +IMPpHUaiT0CFZLcH+44uQwAA + + +False +0.523598775598299 +30 +epTail +Jrscu7bPaEOGr8p3WU+PYQAA + + +False +0.523598775598299 +25 +epHead +IMPpHUaiT0CFZLcH+44uQwAA + + +False +-0.523598775598299 +25 +epTail +Jrscu7bPaEOGr8p3WU+PYQAA + + +False +-0.785398163397448 +40 +epHead +IMPpHUaiT0CFZLcH+44uQwAA + + +False +0.785398163397448 +40 +epTail +Jrscu7bPaEOGr8p3WU+PYQAA + + +False +-1000 +-1000 +50 +8 +IMPpHUaiT0CFZLcH+44uQwAA + + +False +-1000 +-1000 +50 +8 +Jrscu7bPaEOGr8p3WU+PYQAA + + + +clMaroon +$00B9FFFF +884,132;919,116 +O9Ia0CXMxkC9ATowborgyQAA +5srcgF0EYUyRM6tylL0wVgAA +EJGh4IwbYkCWyCQWvIs0cgAA + +False +1.5707963267949 +15 +O9Ia0CXMxkC9ATowborgyQAA + + +False +1.5707963267949 +30 +O9Ia0CXMxkC9ATowborgyQAA + + +False +-1.5707963267949 +15 +O9Ia0CXMxkC9ATowborgyQAA + + +False +-0.523598775598299 +30 +epHead +X82I741yL0ybUyEPhBbTZQAA + + +False +0.523598775598299 +30 +epTail +VHwOYW9vAkeUFUXT+cxoEgAA + + +False +0.523598775598299 +25 +epHead +X82I741yL0ybUyEPhBbTZQAA + + +False +-0.523598775598299 +25 +epTail +VHwOYW9vAkeUFUXT+cxoEgAA + + +False +-0.785398163397448 +40 +epHead +X82I741yL0ybUyEPhBbTZQAA + + +False +0.785398163397448 +40 +epTail +VHwOYW9vAkeUFUXT+cxoEgAA + + +False +-1000 +-1000 +50 +8 +X82I741yL0ybUyEPhBbTZQAA + + +False +-1000 +-1000 +50 +8 +VHwOYW9vAkeUFUXT+cxoEgAA + + + +clMaroon +$00B9FFFF +970,116;973,132 +hIsaQ5I0Y0qxkPCenhTfsgAA +dbDAxqIYDEef6cq3x4sQfAAA +5srcgF0EYUyRM6tylL0wVgAA + +False +1.5707963267949 +15 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +1.5707963267949 +30 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +-1.5707963267949 +15 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +-0.523598775598299 +30 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +0.523598775598299 +30 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +0.523598775598299 +25 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +-0.523598775598299 +25 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +-0.785398163397448 +40 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +0.785398163397448 +40 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +-1000 +-1000 +50 +8 +qb8LVJbh5kG4uilxed700QAA + + +False +-1000 +-1000 +50 +8 +4Ujmk5gLj0WyU3SYagr0mAAA + + + +clMaroon +$00B9FFFF +1035,138;1591,56 ++xZvDwUvFkOoytPg7jDZ2wAA +ba/wrXKu5EuHn69Sc1EByQAA +dbDAxqIYDEef6cq3x4sQfAAA + +False +1.5707963267949 +15 ++xZvDwUvFkOoytPg7jDZ2wAA + + +False +1.5707963267949 +30 ++xZvDwUvFkOoytPg7jDZ2wAA + + +False +-1.5707963267949 +15 ++xZvDwUvFkOoytPg7jDZ2wAA + + +False +-0.523598775598299 +30 +epHead +RYlosGPoG0aBCofSJbKnegAA + + +False +0.523598775598299 +30 +epTail +yG+8cHFE1EeshJkd1dKuewAA + + +False +0.523598775598299 +25 +epHead +RYlosGPoG0aBCofSJbKnegAA + + +False +-0.523598775598299 +25 +epTail +yG+8cHFE1EeshJkd1dKuewAA + + +False +-0.785398163397448 +40 +epHead +RYlosGPoG0aBCofSJbKnegAA + + +False +0.785398163397448 +40 +epTail +yG+8cHFE1EeshJkd1dKuewAA + + +False +-1000 +-1000 +50 +8 +RYlosGPoG0aBCofSJbKnegAA + + +False +-1000 +-1000 +50 +8 +yG+8cHFE1EeshJkd1dKuewAA + + + + +153 + +author +tacoxPrx8kCKprVgJHnvqgAA +6 +nLppBSuFyk6GHv3rvWfvuwAA +1ej51eE+QUW6l7JYARpitgAA +2UnPMw8k20qDwX1yw3E7UwAA +oUU7LbB8z06lO7+JvHxYawAA +7LaXktD+hUO/Zzg8rhchAQAA +G0Zgal9HnkKCrG9Vxdh6QgAA +6 +6Neco6zcl0uObHufbrc7/wAA +RHQsOilQckSyjRNZMJggpgAA +hNisF5EBTE2ATvCijhzvOQAA +sSUjGLtYakKYMG7MJEOs3AAA +6V1phiekNEigGlosS4iI4AAA +6sfC0Hl2I0uatFIXeo2nzwAA + + +tech-leader +tacoxPrx8kCKprVgJHnvqgAA +9 +LqRrN84lGEeTv5o2IgfsSwAA +G+LZrC/lykGqzYIlbLtstAAA +KOCYlVaZCE2z8yB61KBhRAAA +yKTK++/I8UuxNnTadbtxZwAA ++fqlfLLhFUa9tO2ZL52d2wAA +EJOR7NjNj0S9b5XYcTHPBAAA +zxkaRnUQnkGeblZpKwGHRgAA +t8mGGcRMLE6wazEY0Zmr6gAA +6oJrQfnv3E6j48E04AF4ngAA +8 +onJRiZekkkW+HvL7efTCQAAA +DLyG2IErKEu/iLgO368jEQAA +GHPM6mLD3kO4lCP2rqtf+QAA +Fxyv+zwMo0S0Ncj/Azp5dQAA +zYrgxJijVUeKhRuYPCJv9wAA +7VFRD/OOk0CHQPmyBREE7QAA +dr0yGiZ9w0ifqTGL7hJMYAAA +b/CTfa0mFUyr1SeIhcoTFwAA +10 +RtTv62yj8kevg0AAwoW9WQAA ++Lil4MWKjUOC2XYl8SjTegAA +NuLaPfQwkkOm5+Z8IfTRQwAA +NwDa11zhX0qixnczVDBHswAA +2wepYfQ1HEOA25v4ibitGAAA +PW0DMEjQBEykIxMEhQ5JaAAA +vtJPgAzR9kGwh+4LTMVDFwAA +L7XtJLG57UiukOzPeHdrVQAA +XQjB4BPTt0WAkavaXOClKAAA +VpLHTBYio0+yCxvIWp4QywAA + + +maintainer +tacoxPrx8kCKprVgJHnvqgAA +6 +qYv8SJgqPUajzKDRtANOvwAA +5pTwS+Z6lEq+JlcroD00LAAA +5o5h8gI76UOPFFl3iyCbWAAA +hLrtDO2G80+MBE7w/xqYWAAA +2+I7Hr2iCkGIQNrSDaC9XwAA +3sJVGZf+pU+A0jzck8PutAAA +9 +MAKnyTiDo06cPkcuyMVz0AAA +esX3j+a1KU2snuv6WgXrzgAA +bFIlptiTHUqaYGcZ9Z9BwwAA +YwY92xK+JEOUOaknXh7XMAAA +VUF2hqp6/UCePhaBLl598gAA +xg7XA4XPo0GPzFxhulYO7QAA +3ExrMzh4BU+qEom+NkgXhAAA +N6rmhGGOH06+NgfTaWft1gAA +jTxlFtrXok2VlE3EA+IAugAA +7 +5LBvJCvx5U+R0JXvGrtJVQAA +hIwTub9FSkK/mA+8tg3vAQAA +kW2xBvd5ck+7hi+wjeIDWwAA +1rd1mOGAkk26xSFOjW6oBQAA +PltbgL9aKEOMcFQlA6pKEQAA +l7A5rUSAq0+kXr+A6mdcRwAA +hbdfYKhKQEGS3E5YtXQxcAAA + + +developper +tacoxPrx8kCKprVgJHnvqgAA +6 +8ZQdZB1z0kaDUzkVHOzvRgAA +Q4A69uNsRkiKLyZhGHqlPgAA +RfdgS6vdFU63KYKjPfN7OQAA +J56vYtWN6EGOMGIGF6vlZAAA +zjTOREEuZUS4nSu9c4x/IAAA +2F8fgWQwpUafOOb13FZn/wAA +1 +vY9LoEpVCEyXKh6+k1PP4AAA +6 +89CSjktmDk6aTYzK0WeqxgAA +gzYTAF1gIkizg/Vue/2ZQwAA +TeOn6G5DU0iPhLs634h/BwAA +z1R9mDNJ/UyAy/2XR33nXgAA +VD6ZOZdU+UucOrfmGN2ehAAA +MIv+ry9OkUGDFu+OFQh5qgAA + + +tester +tacoxPrx8kCKprVgJHnvqgAA +6 +55htDUboMkKutvJNMs10VwAA +6ZZwa71yx0+LjSxYRPl7qAAA +R6mmC12erkeQ4gBLy7dAbgAA +yTQvkxa2EU+paqJboa22BgAA +spUNNABBB0m9QcDFKPawHAAA +du8mkF0Y/E6rhBNO394/ogAA +1 +jKTbz3HBukOB4vjFAHBjhwAA +4 +06vNfm1gx0OR0K9NmGmXEQAA +S4UJZMo1R0qd1Tyo5YNdtgAA +YldXkvDuwE27LSJywqCl4AAA +nrc3+Xx32EKxZK145yefSgAA + + +user +tacoxPrx8kCKprVgJHnvqgAA +6 +jBby7rVxVkO+HkQ21KY54wAA +pPGvserbwU+ETNWzNZwzngAA +xAzVewxj5EO9A+Ldm9bqdQAA +vaX40+6yy0+QL2+OqVsz5wAA +/0zKkFlFd0y4ssTde7JXtAAA +ihZPVqkPV0SOVKNScRxMaQAA +2 +gIzn+8O0A0ux4mJbpKNkEwAA +4d0O1iKcq0+kIW5Bpb2joAAA +3 +h8kotrimC0Cpk4nuHRgyzAAA +8hHEA5HEUkaJOUrimD+IqwAA +aS8jAO3xFkSspkn5BLzAQwAA + + +translator +tacoxPrx8kCKprVgJHnvqgAA +6 +OS8e8Zau7kWMtinIvCc/swAA +WsUDyP0DbEqd3tRk8yKANQAA +lLwl6ItcyUi/x+g1OzlffwAA +sTVRqiD/L0m+CYPwqsjRYQAA +qxo+NWBQ90Gy4fr+d5nWPwAA +X11dAvxeG0Gw+L7zzawWMQAA +1 +wKnDb+gcSEGIVFdvrqRcMwAA +1 +DcOYQKycgUqgn2jU568/iAAA + + +documentor +tacoxPrx8kCKprVgJHnvqgAA +6 +iDOAaVuVSUO57121Dqj8JQAA +ZSoaGeJlOE6oA2yHk8/u3QAA +3qUjeu+vUEGjudMkYvZkAgAA +jRMnNsOHm0ilwTcHjyhAsQAA ++Bd5Cjuy3kS/2+gRidXBMAAA +qdDfy1OPokez1IabjuMXfQAA +1 +3we00g4TrUSP2RwRD/Zr6AAA +1 +UV6CUGeKi0qg+WyJsqDNMAAA + + +bug-report +tacoxPrx8kCKprVgJHnvqgAA +4 +lwnbG+r6OEegyTwNJ3FUnQAA +634oOmBInUS2gaxmact2gQAA +rVNExfqqBEubnXuOzUsTIwAA +rDeS25h7tEaGwfsBzGSXFgAA +2 +8x8LgMHMS0+ZEvqndI0NEgAA +WX2MlGTb6EOX2luk/so3YwAA + + +new-idea +tacoxPrx8kCKprVgJHnvqgAA +4 +cQ04Yqm8yUWze+0UejiQPQAA +wabWoZkEiECTn+HhKn6kkgAA +4XWH56+npEullggKbfFU9wAA +bUwcFsT37Uu0lm1qXTV5JwAA +6 +zx6gVR7LCk6dAYJetD7d4gAA +86l1myG4S0SDBf07PTiVHAAA +0RWbjevmkUewt0Cz0HxaRwAA +UQOyuA/Sn0+V7QfuwDF8zwAA +05xPD1FxVkik/6PBhUwnSwAA +S9Ht5rNXlk+R/Be2/tvjiQAA + + +test-task +tacoxPrx8kCKprVgJHnvqgAA +4 +BoXflTl2zkiHVb9rTj8+gQAA +AaYidFE7+EeaQRrTwlMiGgAA +ewET2F5E9kG0jnIQOrXD4wAA +Mpasmi600UeO4ulDZLR6YwAA +3 +PKDNpsNf/kGUvFpvwAiMgwAA +LLG2+9u6KkebumqGep6bfAAA +He/O+ItNt0+c+XSWNytz9gAA + + +check-if-publish +tacoxPrx8kCKprVgJHnvqgAA +4 +Vdh7zL8QZ0OtD+C+OlvxpgAA +9nnEfIe/n0qhqtnfVpjk3AAA +KOxxtbd2BkCVFupWEZ87XQAA +zW1N3bsNtUuzR/EjyyD3OQAA +5 +l+pJXTVuVEOXxepPp7tpmwAA +m5bOddD2ykOYQJ+JqC5GQwAA +P1DmfF8A8U+xRvMvkio6ggAA +zaihnGbFv0SYjieuD3Ii+wAA +XNH/vjJrPkeWiAnFueRS2wAA + + +bug-fix +tacoxPrx8kCKprVgJHnvqgAA +4 +vIM1yyr2zUeK8LOSwJnagwAA +We6DNRfsnkmrfVI7WoAPugAA +EDr1FZbaVEuIqOX/2tvVgwAA +p8wxG8B/XEKJ6aXtVJv2awAA +2 +xQhxxFEtpECHagEXOLUIWQAA +UFqxiSQgyUeoy0qNucDjhwAA + + +feature-list +tacoxPrx8kCKprVgJHnvqgAA +4 +1XmGBT1/RUKVRwCIItHBqQAA +unl82IKNKEqW/ZUy2OKO4AAA +miBSD9UWRU6FaRwjnVT8swAA +n+5DC+YcyUSIEMqbFpvGCAAA +5 +cekDFk5ILU6GQvHycWgn2QAA +DWmCv3GYyE+A4/wxNfV/TgAA +jqMq51leBkGUbLZ/J6mVggAA +TWHK+EvM0kuJxrZGPnmV/gAA +gL33aMDC5EaM1KvQAa8OywAA + + +develop +tacoxPrx8kCKprVgJHnvqgAA +4 +gzOBaPhYH0Sqi38GA9ka4gAA +w1eKl3jLok6dQE3JB94YKgAA +N0BSH6oaTU6JSCzmTl8vsgAA +zLCn8+123Uu75sJijDTdZwAA +4 +9vaywntHRUS9MFakEmMvSgAA +9H2x6+kFc0eo6Z2KrSpZMgAA +M0pjGsRCsEy2IjYa560UuwAA +Bkj3nzY1Z0OpLErETn5JAAAA + + +bug-retest +tacoxPrx8kCKprVgJHnvqgAA +4 +t5UaBajz3kuwVYgFf4H/6gAA +1GAx466sEkKGRO0kCp33KAAA +2ZG7bQGVzUWNkSGwUMturQAA +RSFmeXj4YE6WLZX67O2S6QAA +3 +Ni4/biH/lE2VxdPr2OKnEwAA +wki5AWxXakSVFXSFIAWF6wAA +8lZk7+ScDkGsGw40b2zWuQAA + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +rLipCiuNnkCKrVs1Dppf/AAA +k6w1Bteav02GGDrC6cJmKQAA + + +rLipCiuNnkCKrVs1Dppf/AAA ++JrMCo45qEOWtcTsDjqTTgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +UWFTE8BDCkSEe3YOn84GrQAA +k6w1Bteav02GGDrC6cJmKQAA + + +UWFTE8BDCkSEe3YOn84GrQAA +8v8IRJdlJUmbHIylKGey5wAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +fPubsZnsN0OJ6WOaq1H5aAAA +8lQQB3J1o06qDEWADag8/gAA +WieLh+QA7k6+yEd3bSw1SAAA +gSPGOiEdNEuyFfKarlynsAAA +2 + +False +Zk/ihiJuFkm1nc08/lO3JAAA +8v8IRJdlJUmbHIylKGey5wAA +4 +JD4nWCXdqUet6cDY9tDd3gAA +F08DdZDlv0q0HVSEEw7dSwAA +7YM2x3Kz5kikaN9Vmz23KQAA +t8hbDZginEqDchu7EzAtzAAA + + +Zk/ihiJuFkm1nc08/lO3JAAA +rxa+oNm2Kk2e9yVRZgZC4gAA +4 +NNgL2DXXaUeoy5NCLXCTBQAA +XFlX2yGrbE6yNbCg7/LyewAA +n37gTKmZAUyChGFyO8WG7QAA +Ku1Y6FRLF0i51DAGxutpLAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +L/XvVYcg30OYQxS/1zrxCgAA +N4hlcI+mKUC+m0HhgvEqOwAA +NReszVRhfUKi44MHBhssMAAA +ewx0DSFyDUeKMe1loomMGAAA +2 + +False +ZYww4bhgbUujMdsXvrsGRwAA +fIx21ILIBUuXaoqKHt5Z2AAA +4 +5ykAGIN8akm+5iyaxICZEgAA +OFRV00KjoEiTYfaWFH+UywAA +QudUJVb+Hk2Diq0z4wQtwwAA +Fj8cEo58fUGw8dLpnuo41QAA + + +ZYww4bhgbUujMdsXvrsGRwAA +5JcsdOcl2kmUJ1xczZEQMQAA +4 +ry5zWkM330e/Jyq2nAqAPgAA +Gxdf4jHwM0KTUKMNkLGg7wAA +Dt7MGyVATk+r30Xwpxc7kQAA +bve9pJQnekGLVWbdvRS1hQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Sy0UyIHXHU2/ebKqVry2IAAA +Xq/XBhAjWEynmKXYmK4D2wAA +APEoSymd+UqTapvOaoTpqQAA +zJ3xlPYUtEW1e9Qdfc8mAQAA +2 + +False +u+LRK0aPeU+CvKL8BjN4+AAA +UtnSzF7bC0iukjII33XrugAA +4 +JxGA5uJESk2MhV27HtwkRAAA +Mb/iubFANUqY7j7ijlpP6gAA +YkX7H7Zt5EewPJWI5pJcTgAA +9exoDj9BU0mU0d4v1p1I9QAA + + +u+LRK0aPeU+CvKL8BjN4+AAA +wFR71rqQ/kavPS+ztzufLgAA +4 +3B6bcQ28K0qIePRIhMLx/gAA +EO3LmJMCfkiB87aUhqVz1wAA +81EORfyr30GhxjgRMSlsDAAA +1DUg+607CEG84+ifMI9jHwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +SR+lhqG2VkS85GKgVr4OgQAA +yQFjSnTLFUG6RKdehm1PfAAA +fVvRkqkPhEur/sLEGG5gIgAA +YPIwLlunYU6nARGBZMmXdAAA +2 + +False +Q5rq4hug80amVs0OquyiyAAA +ymnyuU2meUmuFQCl8KW3EwAA +4 +9Vn0AnxUS0iEZmCg5zFq5wAA +U79XDob2mkKddWcOf7rOVwAA +uBV2hvPo70iQ+3Znq+k27QAA +zINn6IQQ5UKucIti2VEvsAAA + + +Q5rq4hug80amVs0OquyiyAAA +UtnSzF7bC0iukjII33XrugAA +4 +Z/S1yG7Xs0C9XUP/GF9HwQAA +X4MciX+qy0awACeY5pAItQAA +TiCYBwm+TUib4VPH0BfH4QAA +/+MFfnkS/EaAfGeSNQPzLAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +sFjq/YNNnkGyuqGL8j09XQAA +5JJTfYLXMUubHFTpSMWkcQAA +GK5AklYlFEGV4gMEGxbkoAAA +m5bxj0wAHEKq1kq0Wqh99AAA +2 + +False +Lslcq+/wp0+7suaGPGIyVAAA +wFR71rqQ/kavPS+ztzufLgAA +4 +jzvWBb0OoU2Ux9UPntIHZgAA +59prGpA5EEmNhyV8cjBTMwAA +w9nI1ZdDuEeC6vWYoGBw2AAA +6XmugWGmxEW9E96QRUZpFQAA + + +Lslcq+/wp0+7suaGPGIyVAAA +fIx21ILIBUuXaoqKHt5Z2AAA +4 +FUgvbIJLH02QBj4Xw7kxugAA +selCGBBXDEymq17D9kSVYQAA +Pf6EEag26kej1e92R3JlJQAA +tSHDw1BT2kCMKspRtmDR+QAA + + + +doc & tutorial +tacoxPrx8kCKprVgJHnvqgAA +4 +OJNZyLkPgkW5YFYA5x/ChQAA +bfOuJlVHEEeu2T5S+l6VDwAA +gLaJGOxaI0CF/Qfa/zpwyAAA +wFcfBTWPIki0mu20Xv2DsAAA +6 +UjrU3zr4ikWZcD67/VJ22wAA +/91dQ7rhgUSI28jqjPHooQAA +UVpvR8JQo0Goo1thnZ8TQwAA +8zPYwZBWOEuUZxPtPgU/YQAA +m5jTftKx4ku74ElHxxMotAAA +yYIJFraZbU6Xh62CJfSi8wAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +CyLz987Yx0a9lbcL7SoWMgAA +AhCsuzIlRkW8R8jxObOIOgAA +MshDZxITwUuAI8EanqUuBwAA +KgraZq+q1EeEN9cCmIoc3AAA +2 + +False +QAFwbnInOU6vOm8b8SgmzAAA +oWDHE/AIyEqhL2zTdizC4AAA +4 +MjB41fYRRkeOWPYi1mSDNwAA +79jmtZfAbk+b7RrS1J8G8wAA +VafAtxP9eUqd2EyK2Zv4YgAA +/ZWIU1XDyki8c6Icr34klgAA + + +QAFwbnInOU6vOm8b8SgmzAAA +fIx21ILIBUuXaoqKHt5Z2AAA +4 +xYpebV5nwEKGEslHsNqBPAAA +mQ13YjXbH0Ov8jcHlE1sHAAA +SEVCW0KeF0+e2/I3sLziggAA +cU8aRSvXrk+YvWt5FpiOKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +DLeIpH/Vp0qz/k4Z835fxQAA +MLBX+NGx9kymQ76b9EAKuwAA + + +DLeIpH/Vp0qz/k4Z835fxQAA +k6w1Bteav02GGDrC6cJmKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +lyrV25UpIE2C5MemvaVCwgAA +A/9YWnHJBEGH1jC8FI2M9gAA + + +lyrV25UpIE2C5MemvaVCwgAA +k6w1Bteav02GGDrC6cJmKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +5Y4DPMdp/kOYhqjVFGVF0gAA +OG2PYYcnHky35qJfwJh4qgAA +sq/inVtUT0iJnxjV3mRDMQAA +8RoZjx2ZxUqloF7q2taKnAAA +2 + +False +otl6N6twSUqOS1ckH+zvkAAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +zu6VFQcBMUODfmyo6wewFQAA +7rlTm+0OOUuqqncqyCOO2gAA +X0S6Ww7LtEmtkuQtl9sSHwAA +bGxdMvOXXk2NUPsvL7epowAA + + +otl6N6twSUqOS1ckH+zvkAAA ++JrMCo45qEOWtcTsDjqTTgAA +4 +UpRN66IG20+BFv9v/cMFNAAA +w/WOK184rEemQsEXKo4phQAA +VWo1XbHSpUqAbWBG8Y1pmQAA +rg8w5tv8t0aL+onnxygB2gAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +hg8RO1a/B0qXE38vkUxToAAA +kgeNjAQDpke4/lNPm0LFAAAA +U+eCEWvk6EOEexJsJJdZdAAA +RUif+XapP0uGbbHG6ycMYQAA +2 + +/wV294vExESRsoCAG0SOGwAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +FqsiT9jK80uNARuQ3/AG5QAA +5P+VWT1nWEaSbfjMQy9BjwAA +zLaq7AqXFUiKHqNhg8FbOAAA ++FmtNecuYEKbk3Gd+zdrJQAA + + +/wV294vExESRsoCAG0SOGwAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +nHo+Mxd4i0iHZ+AQpPJ5fwAA +7KGAiedyz0WKUUF02ncA2QAA +Garb0zenNEix0LX/kaUszwAA +OX2NXD48IEyoOoxVnsVPfwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +o8jS0zGz6E2LAIlZNGWlcAAA +3/xIB6tCJEiuQ+3BA1D6+gAA +X6pIR5c4ckquwKbxtZgVJwAA +m874lnl0+EWvpF1V8NUfmwAA +2 + +As4jKIWMwk6c065+KZeGGQAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +HXrLE5esF0uyX+nXhGDMIwAA +KGe3EGq+xE+HhmH5w3i83gAA +RSYLHup0/Ui7ZXJ3fJL7pQAA +RuxQL2GTgEOo7mrXkSVvXQAA + + +As4jKIWMwk6c065+KZeGGQAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +a1hWjFvMzEKXg5P9yee1RwAA +8s/0yPkfbk63cY3zI0R5+AAA +5jur5jS15EyAnqY1Mu4dyQAA +IBQMJpgQTE2tqdMPKB3twQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Ukj9dkUAW0e0jMz7p9y3XgAA +gqf6o2E9O02AkOUFqATYEQAA +GNlx1cSQCEO2PMGBUXWYqgAA +GJyZzEhwd0ukYO0vnk3pVgAA +2 + +qSMM7YEtUUmnkrz3femcAQAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +83SS4KQg2UqD4zRlbhXGMAAA +YJHqwqDBpk6QlU5T8J2e5gAA +05ukk/GNr06GfKat3GnCzQAA +BFA5eZ8lYES8vRiBQkZPEAAA + + +qSMM7YEtUUmnkrz3femcAQAA +oWDHE/AIyEqhL2zTdizC4AAA +4 +cHzC9/NikU2NmptitY3gWAAA +JNc5ZjqPyEmEOy3uzsAFJQAA +X4/XaVGceUanYzAF163RhwAA +mBoJo/CYCk2+zejGQvvrDAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +DJ0vcchCY0CnHUnEhg0PEwAA +Bod4/k93VkWAJYk+f1yCeQAA +qJdNSfyuP0aFrWccEWBh5gAA +51N2HoXKo0600H7B4oOnogAA +2 + +False +QOEK3K2D6E6pqfTn0mjGSQAA +78O5f65/80OvpHK3AuBEIQAA +4 +PxuPxbf3F0mC6au1o42IuwAA +kdL930heekGPN3wEJHjDDwAA +Gmmlyr4gikOkIE7XSvtR5AAA +jGjpsCoc9k2BRUpeT8rHfgAA + + +QOEK3K2D6E6pqfTn0mjGSQAA +UtnSzF7bC0iukjII33XrugAA +4 +VpHIAv0gY0qmux4wbRVLeAAA +RW86qpqkyUCbJ3mVC8Yx9wAA +vP7AWBLFCE6fK8fvqa4SPAAA +b6K2ECYEiE2kI5jZVHhrsgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +rz0WGeAcf0SlqjuWwQwFcwAA +/rHWPGqA0EyYC8g1ohy0TgAA ++T1/+ZcXoUeUINJPUPZIlQAA +5j3yzrxHI0K34OA7BeXzkgAA +2 + +False +BunHMt9UUEaob51EuVirsAAA +u2JHX3nMn0CMyZLWTG2R1QAA +4 +wUOEptHUakSY6I/buij63gAA +Y5rhnjzJgkusxyp77WFreAAA +xavYe4pYuE+1GKIeCKVcQgAA +k6C4zp4DBUuxfcDbLW4s4QAA + + +BunHMt9UUEaob51EuVirsAAA +ymnyuU2meUmuFQCl8KW3EwAA +4 +qgHNFbE1yUSwxkP/sxtOJAAA +RhMu/pC/Iky065R2MwtEwgAA +LcHniQlwIUq3d4uYh3FjygAA +doeBGPbBvka5YzQ0Ety7BQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +KlnhplKJpEq9N4P3dZ0ccAAA +BOKhQBgkKE2PMWbp+G68zQAA +6e7NIB3pLES5O663rvpGEQAA +LBpamqW3qUugvknaG/5UlgAA +2 + +False +GkzxRdxRNkmn62ufJTw13wAA +5JcsdOcl2kmUJ1xczZEQMQAA +4 +0pj1G6QgAUi8yEL/QWtQYAAA +IwFFivWGCUuaGzQsRihSUQAA +Sgawiqqpx0ar5pnikeHcqAAA +vvj8L/FsF0KQt8Rv6nc+xAAA + + +GkzxRdxRNkmn62ufJTw13wAA +ozTLGGkik02HnJ667z5MBQAA +4 +HnVyaVwk6UqV4iof95F/rgAA +v1VAgbR/RkaonfOW9OfdSwAA +u4aWUY6eukmgQJnoeSmYwwAA +eS7sNcPgS0+PtF+i93PYHgAA + + + +pkg-publish +tacoxPrx8kCKprVgJHnvqgAA +4 +7R3Vtrr63kqhX5GzE7CY4gAA +ybuDZxrjnE24r0UbRgKqBAAA +88FpyAWY+UaSMKxPQD00qQAA +Qo+BUYj3w0K/jgQjuB4yzAAA +3 +ZCmKuqp4sE2/fLQrj5OH6AAA +MVnve7DJ0kSTrd01IVyX1gAA +6sd33lS3GkaENMAtDneYfAAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +VhZmB3uX7kaXnUWAdCGB4gAA +YHm3qWODUUWVW2CwTpLTaQAA +AE7QJjoB4E6T/F2wKOOQxQAA +1g4pudaRik2LByHmCigqngAA +2 + +False +atCUWqlo80uXI6LZ5VXAqwAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +FKOFyiXvw0iHjVXwyiZYqgAA +jILNTK/UXkWbJ6PxKPqDmgAA +qCE42hVjhEmwLIeOYimZJgAA +0bG7hQ2D6Ee0BMVHxFBNJQAA + + +atCUWqlo80uXI6LZ5VXAqwAA +FPjdKo5EqkuvbojCyT40wAAA +4 +4YZYJ9ZqD0e+ntjPLgKC4gAA +aP94sthRMUW8RTgcI9WsxAAA +1W0tSTT/LkSjIRxLUHi3JAAA +rnLRv+afEE+3AAL7HweCiAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Czjit70NTkyZKNjNdrecFwAA +LuU0Vft25kKxcILaYN9CdQAA +2sN7szkqhEus8hafmL5knAAA +ID3nS40y6EuYiL6ZVikQTwAA +2 + +False +VSr15ngAt0ucp/JSndd7fAAA +ozTLGGkik02HnJ667z5MBQAA +4 +RdZn2kfGcU2ncgqckMujkAAA +Y3wW9nCYf0eJQiKVTYEvOQAA +VhY5MGMR3kSEQMt2k2P1OgAA +538+xh2rfkyNzyyfuzNaxAAA + + +VSr15ngAt0ucp/JSndd7fAAA ++JrMCo45qEOWtcTsDjqTTgAA +4 +yka4fXbWQkWFJKSoFEDfOQAA +rNCF76BXd0WCwPP15XkCQAAA +3aycythwb0CBYkO8MqrmJwAA +ssKESmY0xEWVLBdE7OS9XwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +J7z2l0td/kS0hlue+2WNYQAA +VR+Aak79+Umgp3bA27YoRgAA +ifeg97N6WUiKvJUWgPOTWQAA +rUKAMmrrwkSGDcTXoCJBCgAA +2 + +False +t3ESzDEjd0ut89bd3IyWPQAA +Pu4+pL+iiU6lRzDtfLIgJwAA +4 +gkgGZ5XPq06Yq8H6/mhxGQAA +MU+LMLQy/UuMhldHl2jTHgAA +QgcPkrmTp0aOp/pigNvWDQAA +h9IwxH5j+EKzjaILt79S2QAA + + +t3ESzDEjd0ut89bd3IyWPQAA +ozTLGGkik02HnJ667z5MBQAA +4 +/CIUOEoegE2GdBSsuNrBcgAA +rDaPvFt+JU6hhz1f/ruuQwAA +jKF1QEu3K027LQII/cNBHQAA +WCH6wS+B0UC0GOaYvqf4IQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +oN3tAssrmESYbJ7DnDbJBwAA +7ysOtBF5OU6C7B5SD/LNSQAA +oaVoZkRA7UCX5U0gSlyRowAA +fZ8hfYZLE0+6wSSSLnMIkwAA +2 + +False +j2qfJOQnLEyR5RVtbVGb8AAA +aaiB2ZAB7kOSB9niWMGCrAAA +4 +PNLBgWLlt0qh0qSiWmm6fQAA +sBLEv0a6MUOxVSIjTI7oRAAA +iFFsmLbtvkyYY6NDPf2kEwAA +9ngGt/WHPEOVYrMQhnNZ5gAA + + +j2qfJOQnLEyR5RVtbVGb8AAA +ozTLGGkik02HnJ667z5MBQAA +4 +Sc0OIQhuoUidWTJx9x27pgAA +72tlEmphJk6IXASFp9X90QAA +xmWLUGETMkOoyFeatsLLRQAA +3uuqO1MbXkeeqkPqmxsoaQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +hJRk9KPU+UeHMYRbZjP9rAAA +j6VFeRd+Zk+KQjIP8kMcLQAA +Bb1h473Ln0CI2BMiHfpkIwAA +XUZPy8Cf9UuC2K67UdYxgwAA +2 + +False +L3wUC+fjukG9Mbmq0QYdiwAA ++JrMCo45qEOWtcTsDjqTTgAA +4 +7aqzoShHzEehoT62iqdZxwAA +3bht/bebjkaXO8woQb1WBgAA +MRKVz+IA1UuD2xpuZyp/oAAA +3m6+IGlmjU29wgIEQCRA2gAA + + +L3wUC+fjukG9Mbmq0QYdiwAA +FPjdKo5EqkuvbojCyT40wAAA +4 +ut1qqbJf/0+LzAbSHfgIWgAA +aDRG2nt4jkSjokdzljbhwwAA +n3N2hwYIO0yFMlpxJ7peaQAA +lEr7AB6W/UacoRJesmNIdgAA + + + +dev-step +tacoxPrx8kCKprVgJHnvqgAA +1 +Okzvn1c6D0+Yg2dWMAvJaQAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +ARENPNto502mBSSO/cnOHAAA +2tWkSXrKQU+2V8FO46j7TgAA +QepaXmVy4UO6DCEgKl2vlgAA +nt6ZlS30U0SdfHYYR1O1bwAA +2 + +False +ESsTAdhYyU64zi6/oVqTKgAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +J5lkR3i3wUKycPleWHDTIQAA +voEc49klakK8QbtZG2qiOwAA +11o3SRF/yUWFDDIRfrSFSgAA +O5+bHbxyC0+bdQMM/tgFqgAA + + +ESsTAdhYyU64zi6/oVqTKgAA +8v8IRJdlJUmbHIylKGey5wAA +4 +Qn3h51Gw80+mPHTcNEs35QAA +BT/LIA7EAUqDxudgpaJCqwAA +aRMFIiI8k0yN2B0jGd+5EAAA +LXxWlKm6rkWV2zrq9dgykwAA + + + +design-module +tacoxPrx8kCKprVgJHnvqgAA +4 +0NZb34oq+0iz6/8DYcniywAA +dP9LP9rtuEO+i3avSgAGVgAA +nMpMGReseU6Kct5O6ks3VgAA +7Ykp0d9JCkOp70mCxl8J5QAA +4 +cqCsUEAeA0in0Z2LWweznwAA +iGT7GmF0r0CH0TSScrk62AAA +sHxTuCDocEyzJSz3moadcwAA +gIU56iDnlUaFhBS+rQgjwgAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +D+7+lRtL20CwVpExOSBX7AAA +oVw/jiGMz0C0iTNLLteJDAAA +JKuU1ThtKE2xQ1f4Aqnj4gAA +jN2kHhJMu0StmPqVq52n4QAA +2 + +False +udZiFgT1HUuXSsB17nyApQAA +rxa+oNm2Kk2e9yVRZgZC4gAA +4 +IFguHS6Qo06X/Ulso405AwAA +WUvJoZKV9EqzY5IvmGwopQAA +1x7fD+aqoUyyaQ5pbw9SEAAA +leTm99c2L02ZKVnOiVJgWgAA + + +udZiFgT1HUuXSsB17nyApQAA +fIx21ILIBUuXaoqKHt5Z2AAA +4 ++bEGPey1WUGgjGGgZLap3QAA +wzt6WGKB7ESFZTq6g9VpEwAA +1ILZi1CbdkiyGDrCpDDKlwAA +ao99dAh38UyNcJJhz93rNwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +4MaPAdQQfkmUFpuWT1PHmwAA +F2UqhwXe80yk7JK6L04XBwAA +nYYAkY1enkKoJFwILoBHlgAA +HuQAUs9y2Eao9ac5QhECtgAA +2 + +False +pRL6RWX7IUGI9SeSZRJAEwAA +78O5f65/80OvpHK3AuBEIQAA +4 +m8RN+Neh5kWte9e96DlsaAAA +12G/TZTZU0qEeu64QA6VzAAA +kmLtEPc6gEymKXVYoCB16AAA +CjGJ3aMfGUuQto2I1CNm8wAA + + +pRL6RWX7IUGI9SeSZRJAEwAA +5JcsdOcl2kmUJ1xczZEQMQAA +4 +IlxqCNXp/UyYHUzZVYvcsQAA +EJRHT+wc7kmdr8+/mZ6uDwAA +veH3hs7Pwke/ekic2iLsQgAA +Oj6Ju1KupkSFy335XdgZKgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +2l+fNLxcTEylJYcIIiDgwgAA +5s00rboppUq3tLlx9FoH0gAA +fM9i9Yaj90Ob7B0dimgDYgAA +E3qBcsRXvECWJCWON6Z2IgAA +2 + +False +Haa/HtHu8EumDcJn1va7CgAA +oWDHE/AIyEqhL2zTdizC4AAA +4 +iF9DJxKvnEWdlnsFZiL0OAAA +OwUaQ5wAUE+DkUi0zdPTOQAA +rGcSLsaV1EqNaT6crweOGQAA +P3NpWkuCd0+OeVdtAOsadAAA + + +Haa/HtHu8EumDcJn1va7CgAA +ozTLGGkik02HnJ667z5MBQAA +4 +8qM5hRSWWE68NwIGkB3CFwAA +Za+gZMnHAECWRhLalgbWrgAA +ClGq0qJLCkqpfd5k0CmPRQAA +YJbGZPdFvUOBS3uX0q02HwAA + + + +build-pkg +tacoxPrx8kCKprVgJHnvqgAA +1 +n/jxS2ae4kuHCG+KzrGgtQAA + + +build-config +tacoxPrx8kCKprVgJHnvqgAA +1 +GXaySoAyJ0qZ4VKE8gVC8gAA + + +build-pkglist +tacoxPrx8kCKprVgJHnvqgAA +1 +voQgF26qyU+tJv2JRt78GgAA + + +devutils +tacoxPrx8kCKprVgJHnvqgAA +1 +M2viQFzR7kKSo4AiZxz9dgAA + + +codemngr +tacoxPrx8kCKprVgJHnvqgAA +1 +xnCmPbwYs0qrDDBl7cz9sQAA + + +soft-repo +tacoxPrx8kCKprVgJHnvqgAA +2 +7NCDjevVfUa8aWdQ8GgHMAAA +gKBHXghpeUKFepoXHyXpvwAA + + +devspec +tacoxPrx8kCKprVgJHnvqgAA +1 +vnVOoxtjQUaPd3N/Mn71+gAA + + +download & build +tacoxPrx8kCKprVgJHnvqgAA +4 +DOHBlVwZH0CnyAOdMPUqxQAA +Km3rwjMun0+5NDhhHXm5GQAA +JRnPcdhgf0GhE4NZqTmUyQAA +07vEojIcbEqh2llQKPlxOQAA +3 +tMwNvnbWx0qC99wvlGYF3AAA +VvLdglslUUqBPX/aHaWVywAA +9QetYTXGJUuUfmUAHqUS4gAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +4j+FYeH/A0WfZtbw+agk/AAA +HdfK1M7g00yeb9gq8cQwYQAA +t32yCOrpQEacMTjogEZyYwAA +RJgmkH5hk0mnzfrNKsnC3AAA +2 + +False +wARDKsfmxU6pDs0VU6O25wAA +FPjdKo5EqkuvbojCyT40wAAA +4 +ygfFznufl0y0T3K8r5hlkAAA +PIELQcytDE+hPTNaBNiuwQAA +jI6Et43WQE2zDN60+cjlIgAA +YmoNlaGcA0a8fo4lXqv+uQAA + + +wARDKsfmxU6pDs0VU6O25wAA +cH75vr0YhkuvV/fYij/FMgAA +4 +vX3yKNnf9kWT+KdSKla1cgAA +eHuBA0XdyUmhMo3B9ab0AQAA +OfnE0o02K0+ASmJ1zRdiXgAA +hQCJMBooikqa1DS/O6iTZgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +kvMDTC7QZECLLi+bfmC10wAA +VoUNBOUjkEmAMelwyyIhTwAA +0WzY4BhxFkyctNved5yIKAAA +Ib0YeqIjLE2HWXxd+ODqTwAA +2 + +False +NRxXI+ohkUa8ldCSWR3lNQAA +u2JHX3nMn0CMyZLWTG2R1QAA +4 +0jbEs1Oeqkqgv4k4euSItwAA +ubjxV1WOlEal88NwYpdXjAAA +vpAsZ9TOC0SAs0znqYREbAAA +JAFz0ssyuUqRfHHTTGFBXQAA + + +NRxXI+ohkUa8ldCSWR3lNQAA +cH75vr0YhkuvV/fYij/FMgAA +4 +oicOAnPBqEeBGOYO0zKOdwAA +SHrGxXFE4E+JFsETvnUisgAA +gYabRv0JmkS5BbfVxNmTzgAA +MRinMx5ptEOv+QF74paAiQAA + + + +new-demond +tacoxPrx8kCKprVgJHnvqgAA +4 ++xQR3R4Khk2Mr7tmPdkWSwAA +lBSUAk54IEO9/+7rsBiabgAA +SHPjTX3I+UasU0SECLayjgAA +GaHNfivTfEKsvmOcA6hT6wAA +4 +LgaAK4fEB0e2otJzSn7toQAA +hU4yh3LkjEKFkdS6cl0FBwAA +RKdpd+0S+0OaYFIwovSw5AAA +g4nzG5AXAUmT/Juw/Y+HhwAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +3djyNWh5qUO+iA3WzB20KQAA +vkj0BOoRg0qr8lzo0Z8UyAAA +veywQG923UCpJmHqy0uBQgAA +xJfHk4n1e0e9blWmKGQ2KQAA +2 + +False +HwNxguHxkEq1TTvntBzfPQAA +u2JHX3nMn0CMyZLWTG2R1QAA +4 +28qijT2f9EC/y3piF0/+OwAA +B5QJ9P4hf0uJyfwdf7Rw/QAA +y41GheG/aUSOla4Jjw2CrAAA +u87KZbz6v0a374YpZrGucgAA + + +HwNxguHxkEq1TTvntBzfPQAA +K/jI5ejWkEmd+RwmoOHzSgAA +4 +b9VVWnuxUUy0gytp8KpRmgAA +V3tKgSpL1Eu0kYg13PnjhAAA +nM5w7GSejEGEhI+IZJlUGQAA +vkJuk8uzxUi8zC+a2EkAagAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +MAiiKxGK/kKDbI0OJK5r9QAA +k/63DwjndkiLReX2QpxL6AAA +JvDTgvMJuUylq++u0waS8QAA +cXH/C205ikKf4GPXGnXArQAA +2 + +False +JDSYiscd1ku4Q9VTc3cxJAAA +78O5f65/80OvpHK3AuBEIQAA +4 +5KGEQZPXtUa5SXo3rpaRKgAA +6wB5DLUFQU+RrP2KOUtcTQAA +4OmKSfO1oUKfuQp+h1hWZAAA +xxxm+L2W8kCan9BNPKWsRAAA + + +JDSYiscd1ku4Q9VTc3cxJAAA +K/jI5ejWkEmd+RwmoOHzSgAA +4 +u4UXJfgnQ0eLHbqR0iWixQAA +rhAybtEUtkOwXV5kWFtzzwAA +JC37Y9iOX0uoXkBqmeqeKwAA +uRnWFV241Eq+9UWbGsRLmgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +GbYPWnb7/kS6XkGQmFc6wQAA +K/jI5ejWkEmd+RwmoOHzSgAA + + +GbYPWnb7/kS6XkGQmFc6wQAA +k6w1Bteav02GGDrC6cJmKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Nprb3bcLoUC61BOosZ9+hwAA +eygKNnDk3Um2veEIU6qg/QAA +l77tB7orTkiaZGrlQF3L0QAA +hJ0tc1S87kqSAuGX4+RWxwAA +2 + +False +COsG4HSpZUe/Vic0aL5j4AAA +K/jI5ejWkEmd+RwmoOHzSgAA +4 +2ZL9sACt00qx0Cg3iKmTLQAA +MIT8/Gv+e0Ws6jjGmNmmRwAA +AqAynQlGr0a1papQOgqXLAAA +rOXKiozVPU6e9pH0bYSg9wAA + + +COsG4HSpZUe/Vic0aL5j4AAA +8v8IRJdlJUmbHIylKGey5wAA +4 +jIsNFDdsRUWTT/OvN3ztnwAA +SUFcnz8a9EyTdHbW/lUdiQAA +CCkLRFuVRk6SFqbFPXkadQAA +947HFL6RbESshkpOTCj6YgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +uyacuCS7AEOEyOJVoSre4AAA +oWDHE/AIyEqhL2zTdizC4AAA + + +uyacuCS7AEOEyOJVoSre4AAA +k6w1Bteav02GGDrC6cJmKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +ZbjLAPzqb0imjL9CBZqQ6wAA ++/rTqhVzAEanWKk5UAntOgAA +zTb+/Fnwd0CoyaRDml2Z2wAA +RTy3JBPgPE2M2q3nGOEYvwAA +2 + +False +eD6wP/fAO0qZXgTPDYw14gAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +wRmuK74HIUOvDrQoi+BSuAAA +6hCTfmWvn0yyP3giXUc9tgAA +5gpoE+R1G0iDKOkRu5zLPgAA +ccQzOf52xEi0amCF/8K9BgAA + + +eD6wP/fAO0qZXgTPDYw14gAA ++JrMCo45qEOWtcTsDjqTTgAA +4 ++OXDruHvSUSKNXOy2wGb3gAA +qE2GZ6s1ukyBLc88d/1nvgAA +Ej6+aNOXQEGZuM8hFdotdgAA +e13Bn2S91EWRco7/lFEK6QAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +zndTLn+VeUWCBso9iSlxIAAA +7We6jKhRo02CFGApUPu5qgAA +VWLLVa6rK0K9X2l9yy6DOgAA +Xc5ZA57kP0ml+tO/lPS33wAA +2 + +False +ijA0VzIZG0G7ohk808I7EAAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +GN/OGGMWgEaSB8JusgHu7AAA +oh/G+M1SwU6NDi3PJjxQ7AAA +ManByBkfuEa/QuAb9KyCegAA +KMXug6TF9kKKVD8hfLqKzgAA + + +ijA0VzIZG0G7ohk808I7EAAA +rxa+oNm2Kk2e9yVRZgZC4gAA +4 +7WIytDVyn0elYv9g0jIlFQAA +euqRVFPROUq61icLqYjqiAAA +pFN3VBz/gUegQqhdFPISVQAA +qS0GuIHmW0mGCwTQiKbaJQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +oYCpI+SVFkOQu/mdPxc9+wAA +az2lLUGRQUupbW9hQCNYSAAA +fTmol6tRDU6DqEmfzV7ghgAA +FO4VJAOJpUKdBPcB6bzb+AAA +2 + +False +tV4kKe/RSky6myfeSP18swAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +P2T82CWlhkeOIk7xG1KUrgAA +SN/k76NOskujX25BHIRKawAA +lcCkiyfNF0KupPJcTuWI7QAA +05j+Q/HW00uw8j4mIwIEswAA + + +tV4kKe/RSky6myfeSP18swAA +ozTLGGkik02HnJ667z5MBQAA +4 +gKhPIz5mO0eoPt/x5JSGAAAA +njDa0vrYDkm1DGrCHjymvgAA +KotcZ3zFRE2Em1BaxReehwAA +UCRIEOg5i0+H3+S0YsVRywAA + + + +launch-publish +tacoxPrx8kCKprVgJHnvqgAA +4 +PPr3wQqIsUGCabBRaWDJzgAA +djEhP9lNSUK8mnKeulkyPgAA +hCToqxtIk0qWtMLlSe0z8wAA +zD045480Pkmhr1WF0ULGdAAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +G7+qnUqDRkCl7KxPlw45aAAA +Lqdtm/Vix06mrQ7wczG1YwAA +227qZ5x4bkmZX296Jdp8hwAA +X+hRi98oq0mH2HPVYPg2tgAA +2 + +False +dK9I6bZRfUih3ErZpfx4hAAA +oWDHE/AIyEqhL2zTdizC4AAA +4 +USu5nDow40GMAnC3n0zdoAAA +ABjVTWJiuEGEhdtfxqN0TQAA +H+7aZ2vIPUmdty3JwrEuogAA +vCjAaFVyDE63i9p1Jt2SOgAA + + +dK9I6bZRfUih3ErZpfx4hAAA +rxa+oNm2Kk2e9yVRZgZC4gAA +4 +WOwADkmaF0Gyn65Y0rhPDAAA +pZXkD7qSDEmLVoipN2i44gAA +aXuHs3Koc0iND5nLqn7wbAAA +LheoZ8TVLECQvoj7m1PP0QAA + + + +task-manager +tacoxPrx8kCKprVgJHnvqgAA +4 +0zxf2/fiaECjGyhbRvdvKwAA +NgHnhun2cUyB5rcs/wB8gwAA ++vDknIqORUmbqQrKoJWQTAAA +SXqC2no5IkqvM/Sc2IexLQAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +qV/n64Gaa02UNoVye8cFkQAA +xkUywc1uKUOHql535nPlMgAA +OQp12fjZgEuEgGrczfPTDwAA +n1Fdt9CcnEqbWv7SXLf7xwAA +2 + +False +OeFvUQCLbkSUntfY8QQZjQAA +78O5f65/80OvpHK3AuBEIQAA +4 +RtC6tXmAOUaGZ2UBQ4l7MAAA +IgO8lC5yxUa1HdNIocz1zQAA +8ZlaZgm1uUSPeRt/pbshTAAA +6vaU8A5xoUSGrf6oRA5e3wAA + + +OeFvUQCLbkSUntfY8QQZjQAA +cH75vr0YhkuvV/fYij/FMgAA +4 +/n+fJ5dGJ0akY59zvY2SAQAA +SR69sArTiEKkYzbG8UNF3gAA +dy49LVIfCU6rTMb2Tw1YtwAA +nh07AMkdm0KkkjCUeiTU5gAA + + + +analysis +tacoxPrx8kCKprVgJHnvqgAA +4 ++20ew2cMdUe5jGz97OU79wAA +8SNn6Do/vk2SjHYY36SUiQAA +rSMRhJLXDUSq+9dS3sodwQAA +YuLOiO+5jk60EwVW5oveBQAA + + +design +tacoxPrx8kCKprVgJHnvqgAA +8 +UxkwPHCKZUOZB8abt9yLgQAA +Jh30Fj+sxUCDtvnsiCha3AAA +KlL5ohRGcU6EsMEKnjkoHQAA +vbtIlNyGZkSMrpr7bAuFPgAA +osrqahmcuUqmug8ogBw+JwAA +OQh1pUOuZ0qZn1StB933JgAA +HoVB+uqR9kSkJKLFudhvpQAA +znd3Gw6Wc0uT0DexMR166gAA +1 +UUjC686FYU6T/q1aKuDLkgAA + + +implement +tacoxPrx8kCKprVgJHnvqgAA + + +public +tacoxPrx8kCKprVgJHnvqgAA + + +list-external +tacoxPrx8kCKprVgJHnvqgAA +8 +ar/cmfoCE0OyMW57ay1ytwAA +sh+7dEH4LU2Lg/8CNJS0gQAA +EP52ASOIpkKf0ggG4AxB1AAA +5y40oWQyE0CBov7GZBhxKQAA +1BA+Xn0RUUm64eTCTOCRugAA +3Ceimlwjy0acJvsa1GxoBwAA +tYUtzmHef0ujkk6pYML00wAA +kc94znEDbE2QFP473g5b9QAA +4 +HdgD2FmAh06xyFDupk4vagAA +pxqjN0GODE69EvLg0dAl+AAA +vN04w+sn8kGRW/7MCPHqyAAA +K0nWpIYMbkyuYvBBAUwcaAAA + + +actor & action analysis +tacoxPrx8kCKprVgJHnvqgAA +8 +6iOG2zf6TEyGTIPJKas9rAAA +4uB0MbN3+0SYxOfF580zMAAA +3b21Z/iMs0au0myIZ4Z7OwAA +uw2YtpvMEUqC14Kimc8eCAAA +fdnXBAbHkUmPlMqC0iAwCAAA +tL32Ahv9FU65Qnsw8w+SEAAA +/elZXku6H0OwmLMGsCEUQwAA +UCL+mBaEH0SfVWfmTGP3pAAA +2 +ZKrxwL9D1EiytZ9M2QdpNAAA +IuqkqTOhTEuBUbn2uLNuqAAA + + +data-io-analysis +tacoxPrx8kCKprVgJHnvqgAA +8 +ZVZSHvdc90+uyCG9xQvFFwAA +bafEaCWS5kmZa7YDL4tt/wAA +usVme/vWz0SVfEPEfK9TYQAA +s/XioP1Y/UiGduhk/y1+vgAA +lD0x8R9zUU+Gr16SYaMDDAAA +Sucs8l4ei0y7QTbSmrmMQwAA +/G8jAuopsUmv6+KWFz1bEQAA +UI4PRuPYSUCQMhM25b6T/QAA +3 +iwDC0+jcHkWoYFMM+ST2BQAA +z475GIA9kECnM3EOwAHh6QAA +UtVAs5JBSkKc0jSVdLpypQAA + + +data-flow-diagram +tacoxPrx8kCKprVgJHnvqgAA + + +action-flow-diagram +tacoxPrx8kCKprVgJHnvqgAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +FPVj7um6IUGVTfTFIuWNJQAA +9ClYsIQN4ESsljoYy9AsGQAA +oE2t0LzdaUavFzZUAuBV9QAA +tRR+kP/uV0eCpww7mN13/QAA +P3WVydlyRkuwh778fQBIcgAA +v58zl0lFo0OthalTYGFTKQAA +8CY1bBdDxkaH1PcNb3ZGGQAA +o0UURrS8nkeLRNMFFRJEIwAA +2 + +False +NSCnR/cZlUa3fXcKMhA8sQAA +h9lhv0QFq0aFwcWza3gsDAAA +8 +jU0P61wvf0Sy2jgaGJASWAAA +etw0ktzUr0+/O4dDmvT3vQAA +MyjKgBMQxU2TbX49+Rc42QAA +VbiSotMd7EeaDvs0rvjocQAA +IaMKGZD9PkehJr5RNTkSuAAA +Qmp+r+VK8UGO3Il0AjKc5AAA ++KcOzTuJEEumW7XiX0Ad+gAA +R5sVjH9o1USufBZZZSNj+QAA + + +NSCnR/cZlUa3fXcKMhA8sQAA +kETY7OJYc0qg/QkJQX2LXQAA +8 +D9SHHlxBLEqXdBpMaZ9kFAAA +LJ4YEIvhRUyrGKotu/am4gAA +J/9G8Kg5VUmDIQejVTibIwAA +VhPiwKgSzk+08pWyuIXK5AAA +pc1C/Gssc0WTEJ9iA3sBfwAA +rrfF5kKwgUydDdMT+RYxWQAA +SYIv7T9MIUWW/8Kz5GVcDAAA +1DCRn/1rv0iPg5mNyTqoUgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +1w4wHAblgECqTDPtsEemngAA +hSySeZ9DC0SSAiGeMvNYsQAA +cjLydq9Qq0K5MLvIzC4ZzwAA +MTUlmgLqSk+EhiqgGzBkEgAA +s/o88wUJakujvT14Ov4UHwAA +vEWfDTINBEWTGOqxOvavoQAA +XRxA9coNmkyZUu6tdX06TwAA +yt5ClHoBukORHaNOqHHHeAAA +2 + +False +ubIfnYMMgEuGrguT+jcONAAA +h9lhv0QFq0aFwcWza3gsDAAA +8 +DDH1fzvZTkK9PCSBAo9DCAAA +Z31wKQv5ZkuWfbIiqiZBrAAA +os6IS6Yqb0+7B361C+X+bwAA +K+sZdSLIMkienNxNayD6cgAA +tbEQiUZMe0WYVJjXyskomAAA +WmLXQ63kSUm6XqUcy2B3CgAA ++8HfQ2so60ytd8QKTve/lgAA +yNKcQJzJXk6y3PRK2hMaSAAA + + +ubIfnYMMgEuGrguT+jcONAAA +XmSQJXVfo0qkbNCidOBOzwAA +8 +H2BXDDVNUUiLD4SQo3VDHwAA +Ae21XiE0qEupdm2so2ksSgAA +vqoRgYFlIUObG1V4IBIcPwAA +I6eIBiEaNUim4wptRirLyQAA +t4BKFTI2xEGAOUjZEfUgMAAA +I/neFMNDVECDqbPIqXzddgAA +LpYdX7mvBE+M0kSuJGODcwAA +jL6n6OBHr0OMtVccYz6J3AAA + + + +new-ideas-action +tacoxPrx8kCKprVgJHnvqgAA +12 +sFw3N+djIEOBwQg4t6R70wAA +W3a7WL0aFU20hih/wxO0bwAA +4muU6fXv5EiIdWEzNbniFwAA +PquWW3QJBEGNiYCf83kEewAA +iyiy7059g0u9oLbvhyWMJwAA +JxJkJSnVgE2VHO76ajV3FgAA +okmfJkeX3EGOTX0nQ+R5GwAA +dUC1F3J8T0iQxgFoqKP0JgAA +yubkqivm4UyQY4rz+UzVhwAA +cGEkiBjuH0eX70/v3LHhawAA +bxmyW15+1kSOe1pNkAHOdQAA +suojASD+g0C0ixTnOxLxJAAA +1 +eu/8Siwir02KNGkRDOEa9gAA + + +new-demond-action +tacoxPrx8kCKprVgJHnvqgAA +12 +hlEB9emSQ0yr5JtMXv8exgAA +FwaArb5Ga0aYUTqWNOixkwAA +HlL2+wrhT0ORfjlk79BMhwAA +x7hhnO/x50WCblTkyLQKgAAA +o5iA92FZHkuxkU8FJDrcDwAA +O04bxDhOnE2xAvO9lOu6RQAA +wqIyBZodNUmQUoL/nMEwlAAA +auNQYiGkC0qhE9Ksin5OhQAA +u0BNgriFLkW8D2ch2mkMLwAA +aNIoCx0Ry0S6WaUFcfdBUAAA +BjzerCL6GU6nFjHHHbtq0wAA +L+HE8roaqkW6x9pvbnkxRwAA +2 +gehfWFMIjEKeVzAcdHneqgAA +QZwwsltNj0eenKeiSJArvQAA + + +feature-analysis-task +tacoxPrx8kCKprVgJHnvqgAA +12 +pbFdS1YKskuJx2F5GYPsxwAA +zYACq9E1tEW8e+FvZoDOgQAA +kUFkbG09xU2F0FPldPOSOAAA +XhSXsGYa7EeHk8sf5VkWaAAA +7jqlLyDAzESQnbx/rHQ2dgAA +kLG9EfbVqk+GF6IpIFbp7gAA +JYczFEIka0iDSdsiGO5lpgAA +l726APnE3kOD8F+US6t3OgAA +8trqinRilUOT7pAQsxAfFQAA +P25uCvpbiUGQgV5bkXS0ZAAA +rzZ+dOLwtkGiZE2uKcXh7QAA +48x+iipvxkywCwxO3Jac9AAA +5 +irMBt7uWtEaxRopZEBcfwgAA +A/3hkPn0ukKjvmT5rHr/7QAA +NYZAYRfo+EqcnxFwEX16dAAA +tj9PxTnKWUOoKg0de6lHnQAA +apr06sAa1U2fZat0sCQPpQAA + + +trimple-catagory +tacoxPrx8kCKprVgJHnvqgAA +12 +r2txyI05mEG1QxI9jG/azgAA +IbbVyikZU0+AJeIlhnXJdgAA +f7+h0+yeYEiqquMG2Ha7wgAA +jZ3okYJ6AEaO6xaIq/M6fAAA +nLCQxDcq4kavFuzl40RaCAAA +APiwpHGo9EGbGEr540wNZQAA +aud/6OGNJkGwwm67Fp14AgAA +m2PPoWgKZki4iK1aoSvosgAA +RgVLcJzuWEyRcNWU2C2BWAAA +6CHFltMttkaUdOWgg3O4WwAA +nspClDUWi0a57ZqqCRTqwwAA +62IMpf0m1UCr8ziCGwq2YwAA +2 + +False +ZE6XGr3H4E+M1Lu1nRZ9BQAA +TMPdkgNID0u772le0sCmLgAA +12 +0JiEkFKmmUuDZogH7iBRrgAA +O9KRx3XtLkCvQ3wPo//NrQAA +oQbN8gPfP0O1X69kI97iZwAA +gLz7JlBfJkaKllUko0yHYgAA +Mcq2cOcmcUeltWDBm1twnAAA +0wUYZwLUBUSupqgI4y1w4gAA +WV2z0+WAdkiSo+swgUPt3AAA +UpuKAXdnPEO4PYn/71kcfgAA +c/y3IplZJkebjzv/7xxnHAAA +bbmn4SKp90OsX5ZdSsEy4gAA ++dIU5R1gqEa0zsJrG/dMNgAA +qe0P1m1ZVEajA/QvokOjBQAA + + +ZE6XGr3H4E+M1Lu1nRZ9BQAA +06qF2g1ff02RsBbBfLLo1gAA +12 +zwJIwa6zRU6NT12pG6ldmAAA +b5a7t3L8RkWGBByXZgWELwAA +o4FInn2nRUy0+squnhBaaQAA +OampBor9ZEusGPPwYeuHvQAA +8plRxWqvrka/0Wv9OEunPgAA +DVZT6uSkakKkSB+XFEYZ8gAA +jFhEJsskSEif+pDccs5GOAAA +dDniAV37SUmFB6dixacy8QAA +IAvETOSI2kSu0BISexLAPQAA +M5tY0EEVp0iw9ACt0C4eCwAA +yEFIey7D6EmPZ06g/0pOhgAA +C2Y1atnuK0a0Hm+1B20v7QAA + + + +trimple-catagory +tacoxPrx8kCKprVgJHnvqgAA +12 +9JFMShBAc0y7u6p4T7ocqwAA +BMb7HcVwtkuyXT6JdvC3xAAA +YRJ3JRRm30qX8Bm8fcufFgAA +2AuxrO4IBke7EBbcD6KjbAAA +7eeJrPLVyECeTW5tz3TPiQAA +z+JwqY6hmU2YsUYEDrO4FQAA +r61Ju1Op9EqdayjvTMk6uwAA +JJfK7Fg21UiMfmZIi3nvgQAA +6McqlEsI8ESaueIPBJuFZQAA +Bss9ojsAikC1HNaXai6SGQAA +aWErRSOs4kuGUEDLEJg11wAA +5d1dyb2fJUaMsd5Wy8IC9wAA +2 + +False +li4LwavBrE+pggONaW7QkwAA +Kh+ykp9GgU6PQXUx+CGLxgAA +12 +E/KBcTvORkybhPbj7PCZhgAA +1O2DroJjnEWYvz6+FVubtwAA +uUEz4BCUTEyz3GLP1b95YgAA +jgSNRtyAi0OwZSqJK4Fv4AAA +Tx5kfHdor0aPHgvEpdYdEwAA +DK/OVbW8j0O88TdU+gb2GgAA +bK49WNL54EiSD88DaGfy2AAA +Nlqa8zxkhEOJVcFbqx/lNwAA +VEZ/l/jzyEeAJflOJvcnRwAA +shQfPFK/3kqg25/Xtpfp9gAA +sKr8wtRNwU+gT9tWBD+zBwAA +dSW9mbndO02IVtmUb4rvnQAA + + +li4LwavBrE+pggONaW7QkwAA +06qF2g1ff02RsBbBfLLo1gAA +12 +FOjcSLTE3EmrGUF3rq57aQAA +MxmMoRWpqk6NlGYdxOQfHAAA +XlFBJXt59kymFd9cnNWfWgAA +BLWUtAOsR0e764vPctr7mAAA +3kBb29upD0qqiewXl4yjVwAA +Y2XhEg2ZWEa6lXp9nqtw9QAA +EoWflUy2l02AqxPBKRABtAAA +ppVcGE5q4kmPMFnVzEJwhgAA +Es4KN5mXDEWWO/bntEO29wAA +5DRiCUSRcEydrAECeEaBzAAA +QZ0oroK+AU2JIRZ8EdW4UAAA +6mT/ShY9gUG/kK6lJla3jQAA + + + +generate data-dict +tacoxPrx8kCKprVgJHnvqgAA +8 +RvaeyZG/PUeTpXEVgO7PywAA +O21u+hfXDku6m5GsWPIKYgAA +CFtG17Si+0qYjRDSXLSGQgAA +fjSHlNsETE6w6BSvmFbdygAA +dun4oB1o7E2GPmOE4gcj2AAA +76SBS3RX/EiEq8ITD1msEwAA +3AscrpCrjkGGa2g6YOynTAAA +RQx6gozO6U2i9e2xDumgkAAA +2 +/vsJW8WzsU++6Lul86APuQAA +ApKyMGFOCkStssh0gwBpKAAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +WpDBYAgV7ECwN5q2IG0BWwAA +7rIZbRHbBkK4a7w0rBYU3gAA +q/OnjSf81ECiOCiUPrRD8gAA +RUaCGSwd/EOt4x3vVZ61FgAA +osRUS6INl0m9Fos+HK5ZhgAA +Ni9GG8rC2U+WOwOH6hpjvQAA +qhJIY6DI90KYPr7FiN0WowAA ++IdKjqWf+U2tP5ahYB93wgAA +2 + +False +dxugzP0ZBEOdRYlU9N5SDAAA +kETY7OJYc0qg/QkJQX2LXQAA +8 +C4CW3kag50+/7JDRv/6ksQAA +3RyfQVGOeECDb+G4M1dI5AAA +AKTiOf8XNU+ZeP8H/sww1QAA +AIxnJXRNfkKn+hLzgPHnCAAA +CPhIMuHEvUidckSkXTkmoQAA +7+KwpdmJz065aoKo4OrMDwAA +HEGX4XyfqkSVZryUoF2M2gAA +nfgtb7VVvk2Fn8MugHPRywAA + + +dxugzP0ZBEOdRYlU9N5SDAAA +c4KyOid86k6Bzi+unTPcfAAA +8 +LkVqtD1DukGhkeIQL+7y0wAA +XbyXWUa96kaA+O6KmLTd5QAA +Pg8ABkt4iku58sQ1D5ZJ3gAA +P/SLxRpfCUeLWjfOe+I6kgAA +C0MPxSwCL0y7z+mSbW3smwAA +YDHUyusmUUesQOoYwCbNnQAA +UdRBun9lFUOYT+NAlRFeSwAA +Zf3oMXLA4EK7HdlGdccVKQAA + + + +data-entity-analysis +tacoxPrx8kCKprVgJHnvqgAA +8 +3zDgV/Xi/0+DECy5hTfn6AAA +7MUgaMAgqUiX3AtwO9eCeAAA +n4fUp6VAdkqOet3jRKvJxwAA +k2y0V3BTMEK9HghOYUIgIQAA +VJbVUyCxs0u+Lgy9ekB9lQAA +tIn7qsZLLUaarigzNkPpaQAA +q8fBOBxBPk+cb8AIplBN3QAA +ZM1d8Q0QDEqUmVRsk+jV8gAA +1 +FR6YZrNJHkeksGzXICrvngAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +d1SzxXFeMUq9ZDqrQYaaJQAA +no7Q6S0jF0qn6b74ZkjszAAA +eoGlpcWkrkeigDwGMKxRJwAA +JghCAAhzrEmLlPfMRJaFLAAA +uLKrd9AKWE2k+0Hro7u6eQAA +TrUf9wr2q0m9vdTszmldcwAA +CAdOEA8zXkWG78r1tV9tvQAA +XoBi3j6pj0eUzpoE6SSRyQAA +2 + +False +TfaTWdzXx0eF98RMZF5U/AAA +c4KyOid86k6Bzi+unTPcfAAA +8 +OPO3MD+GLk2sKsCAn9g3RgAA +2wu7JXIoFkCQqKwPeaRSwAAA +CqiC2IdTyECHs45xZep4+QAA +wz3jELMGt0abXQAhk5/BXgAA +69AT526weUSQX0AhgzUL4gAA +i9w0K2dLZEegGFJoXuZTAgAA +MV/N+sBKDkGqsyw6Ql2a4AAA +OysuMXmZgkKRAzPVCnmGvAAA + + +TfaTWdzXx0eF98RMZF5U/AAA +8E86OOxmt0eTCKMQNrubWAAA +8 +Rz9PKJAggEWsSFtV8Q3OHQAA +uIpCimBeOkensj/KYTA4dgAA +S6QqNwG3OU+PU+KEcOuSiwAA +5N76yKfHxki0E/ohnKcC7gAA +WDm/gIWPZEODM32fUbeQLwAA +62KlpqlkX025GPxjt5jeAgAA +/vrk/iCUqEmebDYHOKVcMAAA +EeL2HbB9VEeWcc+9AXvHOwAA + + + +module-design-task +tacoxPrx8kCKprVgJHnvqgAA +12 +s/iW5IUcqEOvkUCPbURcvAAA +n7Wi4yj3J0mP8qQHTFyZ6QAA +sUWdqigs40qlwo595TWrgQAA +NByCAJBkO0yxwHvl4JF4JgAA +/UwMH6vM3kKzkuL76KD36AAA +x8QSHcKys0u8cfkxdnyffgAA +fACfPJVnbEuY/XYoLHkrWwAA +puU2uGH4uUmFyD3iemCffwAA +BghWDCz5OkKF8K6lTv+jGQAA +u0k4V1QdOke02jJmSY/ZEwAA +0tfqL6KwI06BCHULWyD4bQAA +YbFQlPPkskK0jgdgCNykoQAA +6 +1Y6QXQ3IbUKN3Aa7VuMr4gAA +zmuhwJCP20GxOG2Xkj+EQwAA +6MJU+jYHa0mx8HaVM4S+8QAA +DF7gLd86sEO0pjZnITQi5QAA +sYEr8xJzY0uFxXGAJQj62QAA +5rkAHpBOt0OZxpkOhYsRfQAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +UZOe5+gzxUK6uYSuhvLe7gAA +sJKcVAmUS0yXXy8qmLULKwAA +5kqYjmgZKE2N0q6FUG6tRAAA +IvDtzBpc+kGUu1MBFIIBIAAA +TT2n59wcFEWjjjI3sTCzTgAA +bfDfeVO8jk68tvUUIHRMOAAA +Wmnz9SIV5kyejhVVCn5CKgAA +zYwa2WPUy0mvZG0zbxLCbQAA +2 + +False +BNlaobUxlkaxprXRzDMgIwAA +kETY7OJYc0qg/QkJQX2LXQAA +8 +0SedcRZhRU6EHGfFmfMNZQAA +cjEDpAqJpUGJrnqSbhV3PwAA +ca5AEw4qL0uQhG+nfp/DcAAA +iG1p6EpH/UG7egUDUcWMAQAA +lfjq3XhKn0G8CDwzbGNwqAAA +jHLp+F3hhkWsf3OerYCqfQAA +JN1SvoPFc0GpXxS2lAzKqAAA +TXwavc+6rEiRa5clDy5NHAAA + + +BNlaobUxlkaxprXRzDMgIwAA +tnTkvoZxVkmVjIgd8K6VcwAA +8 +HDzKZWrd+kWyG+ZoXL2xaQAA +nByWoGhft06Q9EGhwBj7VQAA +St8KV4XKrU6+frs38fgK6gAA +WCZwqYsrC0mSL0K3dekBXQAA +g3VwcZkMz0me1WfEuaG/xgAA +vlK4naBV4UKSVNOErL9ytQAA +USMEgjft6EmwvN/hTXMM7gAA +U3GWx91z10uqa0+RLMXoewAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +f85cHGowA0GlkeCEZn6NKwAA +Pw9U76T200SKacFK/Fn7sAAA +n74kabJjqUiILIrL5vBZwwAA +0qH69FZc7EKvdojSPXMjiQAA +hLn65azACU6daYAVZ0j7CgAA +BikNtAupjUScT790usgi0gAA +RstLIONy6kGorgVe2Uqi4gAA +jcNiqYhbH06jiCc33VQDNQAA +2 + +False +t3VIg1cXJEmsTGdIYQFIcwAA +XmSQJXVfo0qkbNCidOBOzwAA +8 +7czXXL2ln0q8vqBno9oLaAAA +ipRqDjZPTEelcuD3REQYGAAA +5q4zooGEi0KidnNJpYCbyAAA +TGA79NBrL0alouW9618sMwAA +Ps4bHxmtJky2Qk8nDc05YwAA +rjNAWvp/T0OxL8Bu9JJPCgAA +e+wMe/1RAUSqqf2Zcn6XDgAA +At2iUXomGEO79uliyY9zdwAA + + +t3VIg1cXJEmsTGdIYQFIcwAA +tnTkvoZxVkmVjIgd8K6VcwAA +8 +hix5sIQ94UG9xQQblrGFPAAA +Tbq04QMjMUGQ4BbLO7+V0AAA +92hJ/PtaoUqMPCxPtw5uLQAA +YyKeAt5nZ02OYKZevuihZQAA +PUnmliyfv0qGFzpdLEoEYwAA +b1vyJY69L0qigfqsHdckzgAA +DOgbOMvLUUG6s6fNR3Iq9AAA +y4H2PvsUDka98uLH4SMgVQAA + + + +code-gen +tacoxPrx8kCKprVgJHnvqgAA + + +soft-demond +tacoxPrx8kCKprVgJHnvqgAA +4 +XmyUwnJKX02C4THv/GbClAAA +ntKdZXdNWkaeImBRCzTsNQAA +kax7LvKiKk2pc72H3cf9hAAA +Yf0qt5KoJUaLlRYdZcS+FgAA +1 +vq1zAfKQxUWnGiKbBTmYJwAA + + +analysis-task +tacoxPrx8kCKprVgJHnvqgAA +12 +9ECchidjm0Oyi96zrE/MCgAA +qyHyd0r1GEWFF8dxNKhu9QAA +/HtDJeaJ2EisBDirjMeQewAA +VMlY1o05V0i+2N9qs751BAAA +eow26LjeFU6GRSdSgeT85AAA +uFB3UbYhAkC0E6G309qnnQAA +xb/bV5qP9kWSDd7+sUpGJQAA +96UTe3kUFkuj2ViKB3jrFgAA +X0LJqLv76E+ZXpuLxFOtvwAA +G7+PoKG3m0am95da3OwEyAAA +6GYFGGnZI0uHnyHtPQd4uQAA +HnaVk+Fe9UGlf8AM/giaFQAA +2 +0CpaRkRUf0+bAPOkrSqRSgAA +pOTqH/7r40O4aKzqIuqcswAA + + +pkg-dest category +tacoxPrx8kCKprVgJHnvqgAA +8 +RDlS3XZVdUCC/tRmDGvFywAA +yxzVmyELk0mT4um+FwipdgAA +S+TygaKYk0uAbwsfbYN96AAA +hqaktbVQnUCUYBQCSEFGJAAA +9pbwNzO7hUyC11S5a9Hn1gAA +XA+iFLjZMkGzUwnZ7CSZagAA +Mx39kg30k0Wku2RoM1yA7QAA +eBQADWbmxkuSBAnzjH3FjwAA +1 +8/RYS0HDWka/NEMRgtUecgAA + + +layer-design +tacoxPrx8kCKprVgJHnvqgAA +12 +iVh3QgkpmkKlqxcSGYTCIQAA +GoBih2tm1kaBir5nDWZudQAA +ZDBgyQA8cEGtR3Px/wUD/wAA +7+HFaANoQkiVifwMlmuntwAA +cnN0HexzX0WKGgNpVfpw2gAA +k2nvWTKeBE6d6Ay9xGtHjQAA +e7eqCRCXH0SWTE8rd+4h1AAA +iXj2sP0tHU6aLRRVxEieSQAA +gwBYAnNeEk2uCxTsZUvhjAAA +J1M/HetPEkSO5Fv5/0LfigAA +33xUuD6h9kuXOZTkWh9pdgAA +1Ozamn5AAEaxseq6qsaHxgAA +4 +FVDBPeq7mEKlp1go7V1hsgAA +iUFGIr8VC0SljnWHghKcFAAA +L2yiBfWQi0CXNccTHoAyQQAA +Emmft/ih+ESwNLfwOBP+ogAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +PPxNPcf4O0eyQOM/EGPOkwAA +k1jS3/OqMUqf4D58ppccVQAA +1h5gznPDFEizRfu4K9GfkQAA +WzJn/PWv0EWKhoaAZJqYBAAA +oMQw+nxcQEqK73wSmEOFOgAA +md4ITarkD0C6tNE2+WjNBgAA +18jESLWPRkO+Wb1w/V0g0AAA +FZVXwLSUrEeJ/KAn+/gCFQAA +2 + +False +xMoCRZ0FD0mJscRNN+UpywAA +tnTkvoZxVkmVjIgd8K6VcwAA +8 +teOONX/vn0OFHLcfp91+fwAA +Ys/C7kHTkkeJlFZEXuZ7CAAA +pIL5ZYFg5EmhEkN2XAEWxAAA +5z16Fa1ESk6c/kBXAOA5PgAA +6ssAIonIkU6drI87qw239QAA +EzTRgY/3FU+9+QXX23lk+QAA +JQZp7nqtcEal9RLMKf2hrgAA +to2fWcgN7UivUOpxIDyx9wAA + + +xMoCRZ0FD0mJscRNN+UpywAA +a7yZcyAyl02YNl0/FQziyQAA +8 +GrDwi0bWFE+6q2G+DxTM7gAA +b59QNJCEA0OTqfWZZZ00oAAA +avzZeQ4gZkCmBihm3WuNZgAA +liyiZqIWCkSVU1TZsb0dPQAA +wHvLvs5Y5EuhN+zZWiBaawAA +HiTxVySzUkmVAxzB7f9hKwAA +ADiQIjRGYkm3eT6HLSERVAAA +brEbvKvIMU6JZZ26T+nJZgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +aKlp5X/0Sk6upQusuXcE7wAA +YrKpRBjqbUOv/BEau+9IvAAA +qUUpYr8AA0+91K8cYmxfZQAA +HRqlh/Pfz06rxhWK8YIXNAAA +2 + +False +BZR3CshDZEOw2M912JpeeQAA +mx6wTw6+KEuGtAr0iRUXJwAA +4 +vDlhSKsYj0SiclZtg1zWMgAA +eJB4z6oLJku5RUGcRVnuJgAA +zRiFMhdhhkCKpi15xt2PUgAA +GdG/AQhxnkCG/OHU5GRwUQAA + + +BZR3CshDZEOw2M912JpeeQAA +h9lhv0QFq0aFwcWza3gsDAAA +4 ++usbllKSsk63D2j5+09vnQAA +EyiLt2MkxEmZbpCQZ3BiAgAA +y2Y3A+hwA0yH03L0ahMfqQAA +L7KAi7ah6UK+5IiKOQ1WRwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +510d+QiLBUaVuLRPUEL9qQAA +kIh9KIhRZUuelTWJW4n/HgAA +aEHcsGiJ/U6d4dKbIEsbLAAA +FapXsrPO1EeFWmBfEHsg7gAA +2 + +False +/FmqeTd2akSH7n3I8hA3mQAA +7FwnjSWdM0KKXAN3V8oQMAAA +4 +EXw/pqknA0Kd0b8z6qWv6AAA +e0tXVecyVUi+17715ZUmbAAA +XlIPivxjD0eqEer53H9//gAA +Ofhcz8psBU2RJnfRWrgU+AAA + + +/FmqeTd2akSH7n3I8hA3mQAA +Kh+ykp9GgU6PQXUx+CGLxgAA +4 +J0WU5HBiuk2zrF6bP1GMdwAA +j77fLGv3w0OyHO0m9cpaywAA +DgSs2SHsGEiUrrqVFCobLQAA +2m1lI/IudEKbqYK5eGkLHgAA + + + +src-pkg-create +tacoxPrx8kCKprVgJHnvqgAA +8 +mCnmzxWG6kWi9OPK25z8CgAA +vHIslL8mHEG7AZUKpbASQgAA +EBCxIVC9fUOI+5JDHb+LtgAA +L/HbzZyqtE+XtNHUSoPfPAAA +g9FXZVEqkEeDovQh5ld2zgAA +qw6KSgAtDUeOGiUtVSgfPwAA +IAGZ65A030uJKQsfl5d4hAAA +TQzPqjv61EO5sWqxsv5l5QAA +2 +rO/Oarhbpk6wEn45hIpPfAAA +La7Sdx9zEUWWIkxIncjJuAAA + + +RAD-demo +tacoxPrx8kCKprVgJHnvqgAA +8 +PUHktwo1XEONvjakWKxjjgAA +qv+NuW1txkSwDGqRM2sVVgAA +ZMCMz/XbAkebr+z1iFakUQAA +rdXuZl0AnUu5bUtQ1R+mcQAA +jJnr+ewJmkiXbJ8FW5RHwQAA +gqbWU6zyIEKT7BJEgeEKwgAA +25wBG/AA/EmUwngaHeRreAAA +FtkLwuPA/EaAPtwS1hmobQAA +3 +b75cgmrZUEiaHJZyDm8qXAAA +wHTgM9Z8VUmrcZGO/o0jJgAA +7Yo61DFsNUaIwp+0+TNjXwAA + + +design-to-code +tacoxPrx8kCKprVgJHnvqgAA +8 +GaKv5RiKr0yqd1YQfpBS6QAA +c8pfaqnHTUWk4Xz+BwDOiQAA +nizmT/+xhUioIp9m6FDdFQAA +M8yQafKDFE2wDMT5pStIYQAA +XsyNCerqHEuJZ3n6KxffswAA +LPtuazSta0OzNyQ9ZXeN8wAA +W2/FwjRBmU+aJQIqciy14wAA +W+5m8PECWU6GMRs8bhfjMwAA +2 +YXudH8Doi0+zzc1qPMjDNAAA +BOzCR9HOxU+q1mRime4kPgAA + + +unit-coding +tacoxPrx8kCKprVgJHnvqgAA +8 +Ji7GcpOn/E2KIxghPULMgwAA +Ajldi01MC0e0b7U0X+hYIgAA +2weBpxVnqUmWEHvnxDKFmQAA +Go+WF+6klUqANH5bP0R0AgAA +cXkc4ROKfkK2AEQ27ILD7AAA +G06Bcl1PFki+yEQJl+DDygAA +BacBkZe6ikOp5mhmJa2nlwAA +0AvdzElZo0irXbBhq8MV1AAA +2 +nnIS6vjqXkqw2mw9rhuzugAA +GPR477SH0U2rZy9DRg9MzAAA + + +unit-testing +tacoxPrx8kCKprVgJHnvqgAA +8 +0HXL2vLmwU+NgNkl6zVkQAAA +IvP3jaLlBUqCVYhTQNMWKAAA +Yn+UYxYUkEKAY3Glng05RwAA +KS5hUG2YU0Ozn8Gc/u0C6AAA +udnYsolK4EGZ5Tqfu1inggAA +UMgdqkl1sUysMrcoUTrVVwAA +vCCvyT9WBUGugbCVunkTNQAA +o3n8H2G9wUeFUWZ221n2TAAA +3 +g0Sss8qL1USpNMhJiejoNQAA +akgagoM7O0WP1rFMWH/IzgAA +OPxtPn1oKkaU2Qqr5fDcUwAA + + +integrate-testing +tacoxPrx8kCKprVgJHnvqgAA +8 +lSkarANt7EiYF5x5MQ7+qgAA +eH7cSqHzM06eWri06Bz8UAAA +0IgroACfLEKJ1tcXHw17PgAA +LJcQqwjK3UiQPKY+TkBKbwAA +kVd1VyDwJEWJDwZbvH1q6wAA +Unl2nXQhZk291xCVwjdJNgAA +/Cb6h3yeUEiDvfXk44ztzAAA +S69h6PuNhEOikjMwKUnPAwAA +2 +Fb68OZ19C0WB4BjQurmBRwAA +BmvYAIFdPEKrfzWwQhihCAAA + + +testing +tacoxPrx8kCKprVgJHnvqgAA +12 +hhCDRIRYnU+Qwbyyoec6WwAA +LxeJT8NHO0+lD0/d7KGSQQAA +2RPT+xZTsUeyQTt3cLgQaQAA +aTjSnapBbkm/m3CcTts4eAAA +kZAXDcSScUSa3zPofC/wwAAA +A8ZV/Kqj30iWrIPk6HYOEQAA +yXUYr4lyGUCtn8eyKakSYwAA +jnjaBfSZbU+G24TMM6jQJgAA +qudITNuevEOUiPdD67icGQAA +pIcjCSqCp0u0bE+JXiLXYwAA +jAH0o8IBf0e+UE01jheoowAA +awqqy2Oc8ESXvFOT3vBCYwAA +2 +WHhyhUoWo0iDDhj6FaqW/gAA +1eC8b7wYzU6Y7xZwvUG1yQAA + + +doc-tutorial-web +tacoxPrx8kCKprVgJHnvqgAA +12 +SJxSR34gTkGLBFrgEQoGBwAA +gazS/rMWWU2cuASRb6PWXgAA +JJAGKyUInU2dRtE+qC+f5wAA +T7n1RS6MyUKHQFHnbELd4QAA +IygCYEX6+Uu+11eoseJSngAA +TCGlYZgKEEmJHQ/sWrYZWwAA +zeNRwcBsxUSrLnYk/ihjLQAA +6V+fmC9BbkeqmKkaO53PigAA +ugI2euwM3Ey7T7DNJ++xmgAA +/jxr0s4HuE2Plztsq3ArPAAA +tsg+NqwwBkGd9rNrIIq6BwAA +8c8SA3tUmket5UPwt8V1UwAA +2 +PfXDwrF2QEKVag/W5+FPYAAA +bDyGtYJmuUiVC+pPkc7oHgAA + + +version-pkg +tacoxPrx8kCKprVgJHnvqgAA +12 +wTzRmZpNA0CytlcwOuyUMQAA +7n+64jk+fUibN2OwbrzKEgAA +K2UfbyVtjEqINckDan+MFwAA +LtqIKvhMKE2+MEY2TQGkowAA +cr3AMb7W2EWA6biraBdVIQAA +9kzSurKehUa5ijBcVIpSNgAA +6rngOocODE2STH52F9LPDQAA +y5wFK/chLkurLsrcepDVQAAA +0JMCaRFeCk+HcMqp5TyNyAAA +JfPAxs20JUyEIMe2hcvp6QAA +bSsQwYPoxkueKjR2EOojGwAA +1oYOAgKGHUm8dAsMba1dwQAA +2 +W+X0z/vQIUO+tUzMI7hv5AAA +mwO8gf6vqUOl745za4HJ8wAA + + +pkg-repo-sync +tacoxPrx8kCKprVgJHnvqgAA +8 +sAS2iGQLE0GVexawSaeD0AAA +/WLV0sEBRkO9qHVG8A4ZogAA +0a+6/xINhkCgV02hVYaeuQAA +8QGFMJJltkuRXkksGVdKqwAA +VXT22UgSZE6QUG18w3YrRQAA +w9bt8imE3UuRd49OAK8iuAAA +IrOh8uJuXkayIar3FXHiuAAA +JoTu8087cECdlb4taCTq/AAA +2 +bvYo1TGY6U2Io35TQ/yATAAA +7JwpGqJmgku60xKurQDyPwAA + + +download-build +tacoxPrx8kCKprVgJHnvqgAA +8 +IIt4VBS2JkOc0GS4zIsSDAAA +s4eAGaFkf0GNj99lI//gWQAA +Ve2Lk9KcQkiqWzdMRgwYIAAA +6VVbqmmtlUWUEgP5GSFFLQAA +vblLAfzXRUOgCjpCebaQyAAA +6tLstOmIkEabOr0ZjGnl9wAA +uD0opCN/bUioOWfKcTYo3QAA +TDhxh2ymqkG+UIDWdQ4O/gAA +2 +LL86l17PZku+YBsr/fUklwAA +UYbXc0CahESM869EpDq6lwAA + + +loopbak-testing +tacoxPrx8kCKprVgJHnvqgAA +8 +e0Tnr7u8AE+La5gTMkR+KwAA +pXJ8yh72jEiZ8IFi5raIZAAA +aSm3kANR9UKC0kqSlISpFwAA +MENiA1QHdkeUvLAzEz9kkQAA +obfQS5n3b0uAe1Y1fNtQ1gAA +QrYU2VR3F06JCrxaoEHkswAA +XuKjI1kKhUmIsFRie8FoiQAA +xvC6yrGOhU+0Bh9pjWjR2wAA +2 +P+S209BDDkSnrN4WPl8+WAAA +WMjnuHQF3kiQvKAfM+S81wAA + + +publish-task +tacoxPrx8kCKprVgJHnvqgAA +12 +GNt2i16Jv0er8A8pORMwcAAA +yzDihPA+/k26KU657GbvEgAA +AbO8F6w1VE2FP2PujMK2PgAA +hmBNRbsHt0qM3SlsJcQsrwAA +M4HlmVZXi0yRAE9UMU0zRgAA +NuoNLcCPVEy0Sl9PBnsvdgAA +vji5FSPdD0uoJCI3ApFo+gAA +RhJ7yKi3GkinYtjrGs0fZAAA +b4fOXlO640eOSeo31HjDiQAA ++ev3GI66DUKXLiSgMwFP0gAA +MCTGUgm7hkmTjo5wQuXT2wAA +DV6msO+P+0yBStbbcFea1QAA +1 +jTxlFtrXok2VlE3EA+IAugAA +2 +2J0+TPdjaECdzYN0YQ2guQAA +m+4bIFntFkmXMzdv2SUAzQAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +Pkm/LUuEZU2sscqG4XMdwQAA +RfiAlLFylUOvxIT3HNjRLAAA +X97pa4VNfkKiMSEp0APWXQAA +jibAwPsQH0miEfHQobVeMQAA +J7fs9nguMkCx0sN3/itqlQAA +A02eHxtACEuJopeiYV8tFAAA +stmkz8TtAkmK+IHjUC1TrgAA +A8s/mlVafE6S32TvtubF9AAA +2 + +False +YcGgDGXOZ06J+TZOxU72agAA +kM7+GQ5RuEmygAJdSluSjQAA +8 +SJagtU1r1EGpeC+GVrzmnwAA +yMYrBPv3JkqFc4pBLZSqXAAA +w/r659TDDk2AKnLYAKyZRwAA +d9Hi+WZ7hE+Zcc/Mg0rOnQAA +GPPcvU2gT0S/DtfSki9PyQAA +rjGKT+HBW0SrGHCxt14YRgAA +ev0VerKdWUeYBJVkteamGQAA +FnpNWRF/sUqHyIiqwG6HZQAA + + +YcGgDGXOZ06J+TZOxU72agAA +ofqv4KD9ukybRvF//Fek/AAA +8 +//dfa+a3DUOk/JFd2Qg1wQAA +82YAZoYhJ0iEsq3g0y46DQAA +r0+FEls86EiJnMmVAY2frQAA +R4pWtVfhOUu2zR4GTA8KvQAA +moNTePrjx0G5wipybEFNXgAA +p89w54Wr5EipR3+Mc3dcAwAA +hsFdjFPNRUGY1dTFSWccugAA +Py45JMqK80i2ym9oab56kQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +VFeTKuaRGkaKxga8eylyYgAA +EEqzQY0eXEaiToVUiEiBywAA +n+1lHS47vkSPW6TLQogepAAA +WbKJQLdI5UqcM66j2W6W4AAA +2 + +False +8kJkpVqo5kC/wdE3wXcwIAAA +KmQBouG6c0yb16gPnUnBtQAA +4 +FSyt3Jcfe0WqyePjM2GzQwAA +UBR3QgyjKEahZS2MwTnRwQAA +7GvYaVJHlkqX9dZW0eJH+wAA +pkjx8DJiuUSiShtYkdHa+AAA + + +8kJkpVqo5kC/wdE3wXcwIAAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +2AzXF0RAVUOZPs1N2GiP9gAA +qUcTAtahPkyTA/B2RX5HhgAA +lHaP8TUSgUijBnXTHvKzCgAA +cMgK0PZW9kOVBYxhsWu1JQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +kdpCRdOBgkeS7e1zmaIiNgAA +LacDIW8TZUyV6H66XI2hAgAA +ZxB/vF47I06QY3VhmgMg5gAA +6QWoT3qEu0OWAYbwv6pCNQAA +9ClMv5qBYk+xGqhG/8fDJQAA +4BN+cbNZ2kyf9+0hv/APywAA +qGLCHUQ8gEC1AWJA/ohqlgAA +AG9jAIkxgkikZAPXh9fwtgAA +2 + +False +k48n8C/dEECUhVTIv9BoGQAA +CLf6+wSJ/U+4iSwM7QoY3wAA +8 +32LynD2PNUS+zmKAfgM65wAA +HbVkzqmSZEuh6+oH7iBo3QAA ++jjHibKnRE6F94xoLDr+sAAA +6Fs//drdYEK/Osv78JnO4wAA +C91i5HF5xE2XUOVZyfLf7QAA +WkTB+22klUuDtxaVUjyb8gAA +BXPs7l2boU6n6hkCKN+HBwAA +VTukdeFoqESJY44bna0TMwAA + + +k48n8C/dEECUhVTIv9BoGQAA +CBkE9JDrJU21ybYWNP2cCgAA +8 +Sjbwduw+yUy6YKwMJRDn9QAA +RCwYqywTKUyWHLN2p3k73wAA +i7WgcsxLGkW9jueuILf7hAAA +ukqpM2qDDkibbdj/IWzVkgAA +48lG3YT+6kWSp+o5ZeXBoAAA +wNfrc/LQmUaoVtseaMproAAA +OWk1nrPBb0axfmYeKsjtfAAA +8YDAKWlN0EOkbZr6QIRbogAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +bFWnUyz3XU6PUyO8klcYtwAA +znOhkDQI7UW1LCvNppPz0gAA +OyAECyVdIUy81hOLRTjNZQAA ++MRomIMRK0ibtmFnRIyulwAA +y6Oz2IKPREO+ayJvu0bgbAAA +HIot0WFTFUGmrT/d7i1FQAAA +IkJgV/YDH0asfKCc6kYdKwAA +VDJ1jv/imkqltbvjuDa/PAAA +2 + +False +euFZ2oXh1UyoeBpwCRLyDQAA +gJ7o4uiAMEqSPUL3dadz2wAA +8 +bRj+Z0B+pkmSHphrP9c82QAA +VZOZlBxYK0mQpScnNl+VrwAA +0VRSk03Q8kW6EUFpKXHrPgAA +6JKgI/q1C0SqiEyZiJanhQAA +C0N4TLgCl0CNoLW4dogDfQAA +ht3SGjyEfEeyOWe3Z4s3/gAA +DxQR7FaFFUu3IIS8RDMZtgAA +zDVl/QeveEG/USqn/02KJwAA + + +euFZ2oXh1UyoeBpwCRLyDQAA +wftqTlAvI0+cR9j69saRNQAA +8 +YKdwlOqxbUmcHwlEZGbbAAAA +Z4kmJUO+B0e6H3WfTULQhgAA +QeMWYpqpmk214x8wWzYjvQAA +6nr3jdfiCEudsLpG1r9fYAAA +UYI0q7BmVE2BDBAnBvN8KwAA +zjR4X1GXdkOSwV9Jg7IUxAAA +7qOJ9rZH7E+Cw9O4m87FAAAA +i9M+gCwOx0uSBI5us8ZeggAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +4oPnfAFHhE6/ISoA/+aS8wAA +2rIgenhnpkabtwRUsoBPIQAA +8dK5J0xvHUi45I/ldzxTjAAA +CFaHNx0wXE2oEMC260K6ewAA +vr5dJIVOv0i4095jxhQgLQAA +xjRSn0jCck6297mpxLiSeQAA +0fDmWGdYC0umYmtNhgRTlQAA +JC2ySJ+8l0OmPisGKqbC7gAA +2 + +False +h7KFG98rIEKQY4C1dOWmFQAA +wftqTlAvI0+cR9j69saRNQAA +8 +amCS86yQokmBw9iE5Em5XAAA +wLpk6edW402MJiWMLPFs4QAA +GjC1B9dpx0WVHy9Ch5p7XgAA +2a1E+GT1OUudOpzLmExIlwAA +uRUuJjzOSUi3zedG02xZOAAA +coB6KzFb7kGcscLs3tUsDQAA +UogwSIEaqEynqg28c7LArgAA +Y+iHdmVp90WAIcO2JV4EpQAA + + +h7KFG98rIEKQY4C1dOWmFQAA +qlZGCifQOEyQyqBzIH1x/AAA +8 +4YWPMPPS3Ee4eGBBulWf4wAA +x971qljypk2Mxs4EESNUlQAA +vDw4VTS7xE+ALnQIi+LghwAA +yLxma2tYy0WdKKGTatwHtgAA +bsnO07b3aUKAOHjtBiOKqAAA +C6FnR8gV8E+ge8Anc8s1MAAA +HEh6j+pSFU6d+mygI7VmLAAA +JNHLRwWRh0yxzb73OU3iHwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +ApVaIJ8p+UuKYOnmucWR0QAA +j1P+mulSiUilwp5iVIU6JQAA +VA6gJS7wx0OId1Ym7CBCtQAA +nCUUpsop0EKoN/1sGtyMTQAA +2 + +False +GTroIE/UlEq3H/lwjMvR8wAA +qlZGCifQOEyQyqBzIH1x/AAA +4 +EV6LFWRMUEGUkIR0PQdmYAAA +ekEO6fRpHUu1agfvfFotVAAA +usF7ceVB0k6ToFDOiEy/xwAA +vPK9/RbxDUCkokkIG+02xgAA + + +GTroIE/UlEq3H/lwjMvR8wAA +aUVRiLFY4USAN9h1PY1/vAAA +4 +BlqB20QFNUic8w2EL1Y3YwAA +OUPVHH84SkiSpock8Zk5AQAA +aT8M/BevNUaYUuk1vcfW2gAA +4dMobckqEEyYi5I9LP+iEQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +12 +ELSMvyV3sU6uKnuwUH2DqQAA +672pY5ZNT0q2iAq0JstQzwAA +deVrWv05d0WlEjXfEZMNVQAA +aiSv5GtVZUmblrWnG0OWKgAA +zWCVEaCukEmioWHWj9xrEgAA +KuM9SDuCYk2DDYv+RlulmQAA +NyhpCEV5yECbvRXHTs6u0gAA +oIHJfZV22ESrABytSt1ZrgAA +UG1DeHxyj0KnP/b44l6YxAAA +HpjhuM8doE+hLK5vtuaWhgAA +PkkR8Y5aiU6ROcPZSoYn8wAA +zHG6Wqua/EWN1zxQMMY6YwAA +2 + +False +hKV30qElWkWAVhrHK7PJbAAA +lOyDrRE6cEms6LglvRhNKwAA +12 +wrPs7btneU+4/4uy1t65gQAA +EZdota7+4E+fapccbeVGOAAA +WP0kV5ui6EahES4xbrNn0QAA +AaBwTHQlcU+2zxABLAx/LQAA +A6zPXf9sxEKi6tCnRoEadAAA +drE4CxLGJk+Twq3skbIK9gAA +E5uPMXrlZEaHoMIhPxHmyAAA +OOu0zNPSdE+kcM3wLNK+ZAAA +XxFpGIiCe0iv4t3ZhWQowQAA +Fdu3DVY0OESeFJp19+do8AAA +LTCccJGkJ0W4WniLabjCzgAA +bUhu9iXnZkuDMupVNbEDhgAA + + +hKV30qElWkWAVhrHK7PJbAAA +ucei5JvgaEarsuGuZmgj7QAA +12 +adwZOgzgVEu8vRZnzLvX5QAA +B/5bwhGST0GX3LqdwAUEugAA +uEiwFi+v60+4XAsWsh01WQAA +xz5TCgjZbUCh+NdRSPPN7AAA +wrgJdHvDbkKD5Wp31QHsdwAA +p7XygoAMg0SS2eRxSOqxRgAA +r72GlFJn0EWF4AToL1oODwAA +jHc+PLXi90SSE+2S7WoWEQAA +Ejobow3maE2Lo93EU8TC7AAA +8lsmxrk0/kKwevGvhhPoyAAA +jCVDZJOqM0GbioKAqDMW0QAA +t8O6PWkSp0ixlfnyup/pqAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +12 +23Rs3xncKUaW4e/mZABZEwAA +Sr2QccDmA02ejFaCDyOhJAAA +LKeEwos5jkO/UMCrxr8ogAAA +0JoiXfezFkWUyb8JzfAMpwAA +QZkd5XnTY0q0ZQlaKfzE2QAA +mGWNn+wvsEiUFMm1TusZWgAA +35Zs0mj42Ei+nB1xHc8YXgAA +51Tqwh3UZUednQQWKSqH+wAA +fsKF5kiA60eCCGJ8JU6A3QAA +MyZA2JbAuE6HVqdkJh2IAwAA ++pcSzpBV/UmByuIz4qc5RgAA +U0EMSNhd1EiZ9TM17PxQgQAA +2 + +False +Htop0thy70qsJ36MwSIctgAA +ucei5JvgaEarsuGuZmgj7QAA +12 +3civWJtnOE6KaXbtjF3EtQAA +1nnUX7BhoE+8FDqX5JCMrwAA +Uq82LGc7106GAoiBd22jmgAA +e/+0NbH7zkKaLmb5SvnIEQAA +Ju6+MEBmj0q4J0cj0QZctAAA +YfuEqIsSakGg/YLCBWZ7sQAA +hal3XeMiZEW8XFL35EabjwAA +6rfLsMyQ1UuZvB6qd8xLdgAA +JQkUmAVaUECK68Z+PBZMnwAA +wKeELpbiqU+mZNXTDFMPWwAA +RBXNNt0PpEiMu6NWZ8kV5QAA +bUMNhQpKSkCb2UNeXaU4YwAA + + +Htop0thy70qsJ36MwSIctgAA +ZFe9gOmpTEWMgVssyEcAWAAA +12 +eGuSskckwEWS8bm6OG1viQAA +5ESeulQ+k0qlFsdNLLD2RQAA +/Vq1dV1v7kqB8WKAWWww6wAA +JBSR6uvp+0iRpOdtIP1wSgAA +RU7t2ySv/0mZzzXHjmY/UQAA +mcUTkVwAlk6m7GmiHjc3PQAA +mZk+sW7EKUqxpp6cR3N3swAA +bKDy7/dqREigWFZcreSbMAAA ++U4v0NjmkEOQ/oXa8vkCMAAA +akDT4SbVhU+jjWvvA7IZ+QAA +wDKW+XfpY0WY3iwDwu6hqgAA +Q0tBGQROi0KYYrMQ4hH2VwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +tJ9OC2uyr0a5R/S6A80mSAAA +iJFVNyIKGk6JWN15tHYGwgAA +EIPWlpufJkC1CWgCFKD5/QAA +e06qqjV+LUuQA4gcALfFVQAA +2 + +False +wt/kYLKLC0CiPMmQly9eoAAA +ZFe9gOmpTEWMgVssyEcAWAAA +4 +6V1345E9/EaEk5Wlz0UXHwAA +tcGN1Q/aH0em5vS2B28e4gAA +X2KZGP4vPUSwtZJqfbQx3QAA +e4uR5nM3WkmgbCyyGuaFMQAA + + +wt/kYLKLC0CiPMmQly9eoAAA +bjrraLbGKUSY+GYzLNk5RAAA +4 +3IEe8h7VzEqVIels70srPgAA +np8+zFbOdECKjn6N92ocugAA +K9Qh7lJvXkmXFWNOQnoksQAA +u+0F6EQoZ0Wc7TVhOqm+/wAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +eK+s3h1+tUa5S89BeRTysgAA +irvhe9biS0yCRokY35duwAAA +g9rjg4Kwo0iCHTt97UKetgAA +1t01IKMBekWnQr/kalH65gAA +3Urn8h+7IkuUb+S9M1o5oAAA +TQI0/RGCN0WGXsffNwjglwAA +Y+SL7VCO00mc23mHNBjiTgAA +m7lkXpofcEC37XnKaTp/pgAA +2 + +False +t/ADlzXN00KW0NiGhwkclQAA +lEIXTXT9L0CS9sEhjP/8NQAA +8 +WHqHs0BXoEaBctJ2a4HLxAAA +KNbDzQoB1kSAad2TYKqCiwAA +xW1aYBmmzkeBvirin2DeXQAA +UD/VE5O5dk6xa7gcFk1rxwAA +nja2xO230kiyKAlW444ggwAA +nmh5COzJZEacRxUgBcmrkQAA +hom19XpmKUOHCPdo80KrMwAA +YVb2yD8+70SeWYu6bVUMAwAA + + +t/ADlzXN00KW0NiGhwkclQAA +jmiilGYeBU+1y4Yw2n8CKAAA +8 +5hSe19uy60OlYLhjkm04hgAA +xUaZ+tGXsU+l0EWjPeS+XAAA +nbQW6h7wEkCjQws3cgFJQQAA +jjE/H5LyQUmmExw2VuMZNQAA +RTvHi3wSPEasB+W2svEsXQAA +SDvVxVQeKkOIIUjgrI9zzQAA ++CragV7FN0a9e4TE2i3ZDAAA +t+6jPxsLx06wKn2VdwOreQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +zgcZD9Eix0mQqY5tiBc58gAA +xRQTPxvLJ02qeJABqaiA8AAA +f3lulNClOEyUnx9kwpFozwAA +FNHQaQIpRE2cZfU9uYuJvwAA +/7Y7fI4J/kKePnnikUYKJwAA +dtDq/VWElEmEZKgm5DgPhAAA +q8Enx2j1jE+MCMQdbFWIKwAA +chr7OfjQr0yE+w/9pOVsbgAA +2 + +False +5n9wkh0NQUu8BFWyytdErgAA +jmiilGYeBU+1y4Yw2n8CKAAA +8 +YxCw3+kozEq3lDv8Du7uFwAA +mVDVzjF0rUKRSRu2PDcyHgAA +o+7ZOrSV00amudfAvKjpBgAA +IKkaD0uqOU21qVYV1VRbmAAA +IPdLjDMwf02/2AYlxVN7aAAA +PMx0J2aKtkiMPkfmmGgj4wAA +iyUWReEolUOjip3Ir35pwQAA +jQJJwJoJqkaTRWWDxGHSMQAA + + +5n9wkh0NQUu8BFWyytdErgAA +RfRTk7cK0061dLioGm8l7wAA +8 +s4wRQk+rKkyT9imx0mP/BgAA +Px5k9k8MnUePr8KB87O/pAAA +fisS7r35gUaumur2UeJ4YQAA +6y+w+iKGb0qytgrOOekGBQAA +1lbbmWCUIEKULpxG32UtxwAA +8fcr/nszaEOxN63YzX6aTwAA +EXtWwuWUDkmlhxj7uZ2URQAA +wrTkTSpbc0GOAJTQ8YHFRQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +yhifciM4t0SxSdh9h3bXWQAA +2dvooJL4nkeQFxy1FwfqrQAA +OMAqedbcbke4Td9nlMbBjQAA +hj576w/e6kWlzOdCESfG1QAA +23jf1GrnXkKEQ0n7Bvh9RQAA +FuTxkCpgjEOA6jAKoor/xAAA +lqHQtCRUsUOJ+/WK6LIipwAA +HctHTpWvMUWsOxTOsnvPpgAA +2 + +False +1QbYYnq3ykqiPL0Gv6UkSwAA +RfRTk7cK0061dLioGm8l7wAA +8 +v8ArftSuoUmQvafMp/xnqAAA +zotXwQFK9EeqePAaW6CCYAAA +4t5gJmqppkS620x3ZwRLeQAA +pXzSsjnf8kGCv3karBwU0AAA +gYZs8WaqCkq9QUeWj1MG3AAA +2dTYHxZCI0SkCrOufj8YUwAA +WpFuOatGF0Off0YSOpez3QAA +qRsQhdBHlE+iJap8o0CDKQAA + + +1QbYYnq3ykqiPL0Gv6UkSwAA +G18zTBUAj0+SdrsOmksR0QAA +8 +ei7z7krny0eZbYgwicOTPgAA +hxWyFV27X0qSedmq3fk8BgAA +t/zTGwkt5U+hYpHWo17MxQAA +ia3WFVStdk2DNEsRW8vsHQAA +nPJxrC+2z0WURbKClcdRSQAA +gsSk3bfnf0Oj1Lc+zN7q7QAA +VSS5xV9YZESUeD+xggX/IwAA +KXO+UsTChUq38634eSKq0QAA + + + +dev-env-install +tacoxPrx8kCKprVgJHnvqgAA +8 +ba/wrXKu5EuHn69Sc1EByQAA +7qBr4kbrM0Ok4Wvvp8OiwgAA +SCw2lGX49UC8psUFSwkINgAA +1VXVAzZDa0O66YYoAelaTAAA +Hb/FVc/wi0OFVH1zZMj5cQAA +ZtYh/d6uxkafJUW9Ja1SSQAA +CxC7S8TWhE6XFsSP70kZNwAA +D3FjLXbkfEibzziVdZZHlQAA +2 +h4chvQo17kKpYAZk9SZs0wAA +RYlosGPoG0aBCofSJbKnegAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +1BeGHCaJM0aE4liGzGSKEQAA +/OtrZHS50UmxTtXyPCIv2wAA ++trgfX5CKUuKneW1O3iLpgAA +TYwOYk+BWEOU97RbRQIZmAAA +IgWDdbat8kGTkkhRze5NpQAA +QXsNU/tJi0m/sKust3LpuQAA +SA9ILRBpj0ydt9w5LayjFQAA +4TxVvTwV/kuHeJPy6bZ9/gAA +2 + +False +3RL8yaG7p0udrs0v9djevAAA +l2Lw5fePkE+9xXcdzSY+bwAA +8 +1rDBcyTy4UymdMr+VkeDiAAA +b6gRd2nYHk+sjJlQgIYocQAA +w1TTr1d8AEWt7Ztwo3qROQAA +ndVjm5cqoUWQtwTV/vvB6wAA +8LrVVTjyNkSZCblGqcDyaQAA +YI3j2MfpDEWX5XT3BOE1FQAA +cU3QetonzkSXsQIYo6qMkAAA +MhYRlrpa50u8ua6aMIOifwAA + + +3RL8yaG7p0udrs0v9djevAAA +kM7+GQ5RuEmygAJdSluSjQAA +8 +Inj0+DegnEanA9QLkf381QAA +xWmm9IkbFkS0FnbyVJkYbwAA +PMSgMdUmWkGCgBDrXH6wIwAA +zmaEd9UklE2gaxd+BD692QAA +1FMYGA9b70uUpVfHjt6I0AAA +rK+Mwd8nqUyMSVjVZFO2wAAA +cisi8Dg080+GPHuMIfsbOwAA +0K5CwSSjGUy+OuUg+ymSCgAA + + + +web home pages +tacoxPrx8kCKprVgJHnvqgAA +8 +bwHJGe0us0a2jeejcciWlwAA +5nWpCLryxU+W1L4vMMysUgAA +lTn3JPXrE0WtO6xxO/meIgAA +rOYnh5GiIEWvpsqjPR/+ugAA +MD2wdRztkUaHPYJptdpRnwAA +n2mhrPkys0uUk5zrbGxJkQAA +6ZdUhecHXUGvxYQET5eAgAAA +MFrT63/q+E68adfyjGu36QAA +2 +W6JXNHPDXE+JzttRtRevOgAA +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +EXZq7lQsH0C0TX8svYjG7wAA +/X4+5hi/vE+MGWkEeKtwagAA +SrPE9PVhrEedX12h8lHgNwAA +BqyT8Mz/cEuSgmqdPEgV2gAA +izoOonNJgkmVtNQ8BSL6GQAA +nyhO2XsEZk2/ocJBCQDifwAA +T81pj0fIzU+305smIfznlgAA +r10TXV8gUki+hy0ivghKHAAA +2 + +False +BYyEw6WhrkigDw+109evLAAA +ofqv4KD9ukybRvF//Fek/AAA +8 +yN7VqGtqpUyravSEdu2rzwAA +4PPrIg1ZCU+hHHlPqvmIQQAA +31MYfdVsxEGmEYsOfMLDxwAA +eXdc++2Blk+pga7UqlXLpgAA +cNAOlL7q8kG32zKwquMNggAA +1IdMwIKVAkWbiUwRJaeM5AAA +MpxlUePbikSqO/ZfqoRVmQAA +YRoVWDG7e0qP+KkrrYdy3gAA + + +BYyEw6WhrkigDw+109evLAAA +czS7yLr6oUygLwEMTWJMVgAA +8 +zxBR5c+keUiAk3nmi403EAAA +++lWUtNWQ0CIrLSUTFZiUwAA +1MZZ5p29yU+gvc5aFuydEAAA +i38XfgewW0G3A/juGZFDVAAA +puGoNqmn30ycZD+Zuwkh9wAA +uU8Cvy77BUS41tikV+UY0AAA +UAOOm/CB1UKm52VIVpzj3gAA +pXc4McsLgk+tdSmHggG41AAA + + + +first-ver-dev-env-chk +tacoxPrx8kCKprVgJHnvqgAA +8 +xPeRQZfwOEmy8TaWIhh+GQAA +ipReBhaLlUiP0veoOeCueQAA +lbKCy3nAjE+36pd+YsvbPwAA +fmef16CUgUCIJ7DECeS9+AAA +JUjJ0DqUdUiwoes9veWzIgAA +XHJ+KIa+LUOmnxrvG19UrwAA +DCvGHwWMiUaM2EPCXRglRgAA +mOeC3oy2t0mAmrzYLD6MnQAA +2 +2dUTUSyX8USUOoaapULmuQAA +XXlOcGC2n0emsre13Wy0GgAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +FsBmt7f9x0i8NZmH9PBT/wAA +Jh1tA+9DKECphGpBL9rOqgAA +W7nTlddAq0+DXFFC6ARAkgAA +X5tOLh3e2EyLWr25x8EsSwAA +D+m8VOzK2E2CWGNaS8twSQAA +SUKHlaWKY0SYz3rgaS47dAAA +5sTNoyMVSkqPzS3nOI12MgAA +dSudZc7AWE2oZ3u96/qRagAA +2 + +False +ULUs5j3aC0Gd9Vn1OUTU2wAA +czS7yLr6oUygLwEMTWJMVgAA +8 +hUEpCPvaTkyEzAeb9oyubQAA +Wsw+mey+pUy5AohEUrtKmgAA +CqwiyBc+KUaI2rLHACHtogAA +ToVEL21vsUSMeo/HuVDP/QAA +OccyHfK/lE+XmSKA1iOWXAAA +4Uy/BFQQTESijev9yxqizwAA +7+9jwj60MkK9nzDtBWjMXAAA +SNfnTvkGw0yx9WVIMBGwnAAA + + +ULUs5j3aC0Gd9Vn1OUTU2wAA +KmQBouG6c0yb16gPnUnBtQAA +8 +zGlIglH7XkS9P5nfxe/hwQAA +S8P8jRtMgk+qLuGTYKHjdgAA +HJ4VafDpE0+xqpdGQC/k3gAA +HYNSdg0kHU25MO3otgr04gAA +Ep2cIRxHWUKCVVlqQncFnQAA +pUyUGxm2xUqFGCHyn2Gq/QAA +2AyHN/WHxUupxN8PyCbe2wAA +XvhDnYaBOU2vkPhdhs3fdwAA + + + +launch-pkg-publish +tacoxPrx8kCKprVgJHnvqgAA +8 +f5vhNxPD30OIg0/MpcEnMgAA +7Ek7+e7sXUWCXM/B1iYyWAAA +fSbvcnMQhk2y6Dfu18fh/wAA +9eix14HVGk6iND2tYikfowAA +ZCA8lMYtvkK0TOXL+AgswwAA +Y4ZHWvzhn0a2kJK4AmvZOgAA +SOmtQrqMhEiNjRvbTX2yowAA +H4Ib+2CtoEasviUjTG65zwAA +2 +xGchvlfNhUO0g6gfoLFLRgAA +L7xnZ29mQEadCI+TRP2QQAAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +L5dPNcLFS0WwJgs/xGJvzAAA +ziTnWmTFUkSA92yYD8zFBQAA +CFuaOqGBW0+iB8JeadyfjAAA ++p5iGUJE2kmhWLKtb2bNxAAA +sRQtOebtnUizFq2DltgMmwAA +nhY/0P2Lg0K+vRyxq9aMUAAA +pa3Dr5INn02ZQjBZOiRZbgAA +NXzZNZsd+Uqg5OQKfE4tKwAA +2 + +False +4wmxJ9R9R0eU6Jn8Ho3xFwAA +bjrraLbGKUSY+GYzLNk5RAAA +8 +lBU4DnE4a0CWPnDGuqw6SAAA +q3huMYIN9Ee9A4IsNHTZPQAA +OZ8lvoPq3Emra+EuBtjTnAAA +vVczgk+j0UCy0tIcFcmZEQAA ++VPdWUPcA0CZNYI4hBxBuQAA +sGZ0+eQn7kunhq3AfuzjSAAA +8QjRv12hcki/c/oIEBtdUwAA +x6LDR4tDmU2yyTXRK5ZmbwAA + + +4wmxJ9R9R0eU6Jn8Ho3xFwAA +lEIXTXT9L0CS9sEhjP/8NQAA +8 +4WrWHhCGgECeXGxs+FwiHgAA +36jq2bh15kWXx5iHEKVw0AAA +obw/YWnbxkqOMltzJdIPmAAA +/YXeInxHx0yLIZn7mPd4nAAA +r8e9MVk/UU6E+J9ELHzEegAA +Xv4NnrN6fkaX8FAaquMNJgAA +dmaBqPLIN0WVrnI+lnq7pAAA +keDNi+t3yUGU13m+iiVcEwAA + + + +multi-lang +tacoxPrx8kCKprVgJHnvqgAA +12 +8o8JeUyoWka2YCr2oj8TIgAA +vd8AYCy53UmF9R658q6+fgAA +pQRW3JLjPUe0Ey3Q6CAz9gAA +6wPjZMLJBUy5GV/gtO3A3QAA +fafd82Xh5Uu1mt+678C5PwAA +wScVwume1UuXvylUQyJcLgAA +gfJmJuROV02VAUs7F3zghAAA +QyB557azoU+U7UiRx0zfUgAA +4gxKHPiS4kKv1jznPUiVLAAA +hA6lwyp95U6cZrsxEmrZpwAA +io3NG7NSjEKdaeuRWeTIQwAA +lyn4DVJ/R02D+cQt2ywNfgAA +2 +DiYoPg9r+0KN6xRjGDN+kwAA +VvsNJNyOO0e86/eHwYM58QAA + + +tacoxPrx8kCKprVgJHnvqgAA +12 +YcX/A/cPYU+1nUlhrpozswAA +onSs1LIldEm6lhE/SJbE6wAA +VFPMQMEq6kiKT9xvnAAUJAAA +GTY1wJFPOEG3H9kMQJExAwAA +cDetESGq00+Cf51WlhE/YgAA +s77/VwzqN0qSZAziYoUuvwAA +mMQH5HD0kE+8WzVquBV9gQAA +Zz45RjGn8E+ziNpLrsoKPwAA +EAd+u7pyI0eGvl3ncpA2sgAA +aCu34FOIg0y3mJV2hdaKYgAA +486AIXth90OWDfmbx7qWUwAA +AHTKQxrufE2r8X84kxQU4AAA +2 + +False ++nJDFiS7VECOJ4vWaYvszgAA +aUVRiLFY4USAN9h1PY1/vAAA +12 +ukaguX4DaUarG+u9yukRzwAA +dMwmFyk9GEyuMSgc/wy3gQAA +jQSlBqAFA0mDyIN5h3VZDwAA +57iR0L7gvEGC/gvlMKcTlgAA +ib/kJAcaSEmrXYAU6YG6BwAA +NVJTBVtArEG0+hKVQdM9sQAA +6V8WC2Ti5kS65zJ4DtOLOQAA +I3Mv2tU6IUSI1nT5FkafpAAA +FQHq1WeXGkyrJ+2lLAFwBAAA +D8nOU0F0W0G+enyYrZ75NgAA +KWpjK3SoXUOLFXp0RwZ1aAAA +6ZUPKx85/0O8tj+M5tmVUAAA + + ++nJDFiS7VECOJ4vWaYvszgAA +lOyDrRE6cEms6LglvRhNKwAA +12 +CK82bAuIC0CascsugUXsHQAA +cjYuFaYi2Uqvj5EiM+mSYQAA +sb0ocggYr0ivDFAeSJhaGgAA +hnBwISb0BkqMZsB72qDFPgAA +1bvlbUX+q0mTstSuUQyuNQAA +Cznkc/hfLUSKFH+4bblcwwAA +xUtM4vpgtEaga8dQhn5yWQAA +HFPM3fh+wUqlJKjqheRwfgAA +vrHwb3STNkyIwnAEBS0UEgAA +BEdreG/R/Eq2ClHGKuq4BgAA +9EzDFBqF9EyOFIwV88xbTgAA +TRgEEzBNlUWLqHZ3s07ZawAA + + + +get-task +tacoxPrx8kCKprVgJHnvqgAA +8 +dbDAxqIYDEef6cq3x4sQfAAA +Ms4aM+Xhc0+Cse/Ezh5YyAAA +GvA9RoHfF0Wj3JDZ3dBWWAAA +RRU6mr4m2UeuPuvwlZsDxAAA +PDF/3iFxa0qb6QrTKCb/YQAA +j1FipIXkwkuLNnXJrtjO/gAA +6E8wutm9jkSz4+3B8pJgzAAA +ObJJTAyv8EuiQvdQAF1IsAAA +12 +XdMG4B9cfkWIcWgvsVmQUgAA +qb8LVJbh5kG4uilxed700QAA +cCWrTkROLUy3C0VntDGRjwAA +yG+8cHFE1EeshJkd1dKuewAA +G5oIOUpHjU6CAVOHO5cbSQAA +kZf004keokGnnIbJREbJ8gAA +50uCeDif8kKZsdKCSOxuyQAA +Pqls1twyrUOYZaqZAZic8QAA +XPjUoHBhGkOE8kyb9uqy1AAA +7QebQWj8AEy2+oMl4FpmTAAA ++Ekcl1W/rkuftPam8GOdiQAA +2nuMoO9sH06KowfPyWX8XwAA + + +create-test-unit +tacoxPrx8kCKprVgJHnvqgAA +8 +1soCBV2ToUK8JVFLvn+e2wAA +TUY5qOG1Wk2L4dK2Sz1bHgAA +r4JRHbMgrk2XD1LtUyWhlAAA +96xtOKfc8k+YpIcLMpzWWQAA +iZbm2TAx1keNx/mPHzSEmgAA +74AFtM0Y3Eu7Qr3msZk1/AAA +aJIYE3lYAESHESjaTsbdbgAA +jGPh5jW7FU+Yzr6Z5vTWegAA +3 +pSiPgqpAb0+UkTDVbbXBnQAA +DFlh0do87UmmJQigSQRsiAAA +2t6hyyogW027sVhhVrjclQAA + + +bugfix-coding +tacoxPrx8kCKprVgJHnvqgAA +8 +N1P5SuGh4EWdFcErHd0tKAAA +EQPWWuSqVUeGLxNVsXR4owAA +b2rJUuCenEO3F7brCai33AAA +10MTb/zOsE+Y0pitUa1KUAAA +vmizIwBnQ0SKIRlT6FSqSwAA +OzxXAzuxCECfRoLz7F4qJwAA +Xzoq618yJ0C6kSd8/Y8r3wAA +fwgX/TPnZ0yxuSlUG9nWUQAA +2 +XyL91tS87U+MpUc/Z25u1gAA +lp0ewCTLb06H/3WjWYmLOQAA + + +initial-dev-launch +tacoxPrx8kCKprVgJHnvqgAA +4 +uI0Vw5nV8k2MpwNxuYq/IAAA +XQrlR2J2FkemJnNVF09juwAA +Nw70TZWqwEKEe5uHIFQpVwAA +1zBbL3jigU6wLBuTCxn1YQAA +1 +v/43TdYAaEacDIIH0o4rFQAA + + +bugfix-estimate +tacoxPrx8kCKprVgJHnvqgAA +12 +IjimQpqMbkC8IpOXi07GSgAA +/cZDuD4jR0O34YcTRfRsWQAA +jjJsTCw84ke5j286f1BfkQAA +tY9/iLXqT0W/syfdAJLqmgAA +op7TXMmXt0mHqk1AIwA74gAA +m/74iar3XU6wz8WDBqi6jgAA +6WZvTQptJk6RR60FUydKAAAA +tsEvZ7FEwkicvO6yHyOUyQAA +6WD/injqLkGLLLrBFiLSOQAA +QNFykr69eECPj0/V6+5YdgAA +u7tk2lPZZk+0vdmDA1J37AAA +evBsfM9gAUqOGdgsUIYbZAAA +1 +DLyG2IErKEu/iLgO368jEQAA +4 +Jrscu7bPaEOGr8p3WU+PYQAA +gfyHi9WUpE6GD9hBzk2snQAA +5RC8wEWMEE64UO9nj5kBkAAA +TdvnjlqSk0mqUzoHhiVfUAAA + + +new-feature-dev-launch +tacoxPrx8kCKprVgJHnvqgAA +4 +EJGh4IwbYkCWyCQWvIs0cgAA +v0iUxioMTEWRqob+OLFFpgAA +jJEQt4nzfkCSg5YlGt9LbAAA +CfthfYnYbECGOYkPnqR4LQAA +1 +VHwOYW9vAkeUFUXT+cxoEgAA + + +task-schedule +tacoxPrx8kCKprVgJHnvqgAA +8 +5srcgF0EYUyRM6tylL0wVgAA +Xu54VWu8wkeijgDGJaqNuQAA +v4ZnhLBpxEa7GZU1RBMP5gAA +dOoZ/1BsCE+WFWqlspiDbQAA +78WbrY6e4EC/58P5Ws4JCgAA +avBhFpUQK0iDdpDZEWL6YwAA +k8J1gBfsp0u9lwLuIrLzxwAA +ay14X9YfAkaTyLB5uIcx/QAA +7 +jhEbrPQWVkCDWTgpxUyF+gAA +IMPpHUaiT0CFZLcH+44uQwAA +X82I741yL0ybUyEPhBbTZQAA +4Ujmk5gLj0WyU3SYagr0mAAA +42F3TeDc+kOeEbEW2sSOqwAA +v4O00Fgt/UO7ZDLsyBtHIQAA +5z6XidYYrkexqaAHLrMuGQAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +8wc4LntVV06YQUHrphlYQAAA +O1OSy5OLu06z1200FfZnYwAA +lLMFX1l0RUSShxqU+stRmgAA +3whQVDqlAUSLBxfNcgLdhwAA +2 + +False +X3JNoNb8Jky2P0O9whu+8QAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +ovLTerBOqEqBIrrcolH9vwAA +HZt/1fUltkGvbGRtpKewvwAA +GS9fAYzR+06hzTzQldE0/gAA +NVIdYUxIPUWDxVZvtmAI9gAA + + +X3JNoNb8Jky2P0O9whu+8QAA +GB5fgt+BCEuZu+MykpdKRQAA +4 +pMhuaX/f+E68J9HnsTSlWwAA +TlQwGjNbNUq8e1XBffomXQAA +SlhG73PEnEqrHp5VLn7u9wAA +6UiUqMycfUy88EkFhdatgwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +wNeaBDZGOUyVfgkes4au3wAA +QxOrhy5efE6PCLoZK3x1AgAA +8b36DyuxtEK0ySxca1+yxAAA +JFejifk9DUa/ffgUp++1CgAA +2 + +False +TzMLJBMMOEKimlwgjlIwnQAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +Yh8oRVNnWEytikAyxs+GDgAA +ZdYQbYPwPkKT/rwkyQnf3AAA +9Ojh1NTP806FSJxTnAkzZQAA +kjldeczyGE+fnGe+xXziWwAA + + +TzMLJBMMOEKimlwgjlIwnQAA +CLf6+wSJ/U+4iSwM7QoY3wAA +4 +R04Mx4jWOEeuU+tG5PHs5wAA +r64gKB2UykW8ivHMO/g8CgAA +h7zm93+eC0ql3a1RDDiitwAA +NRRzXbgvKECCdxUUCPmd9AAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +2NuRWuYK50WnxBuUP4gBxAAA +0SMIyCdQFU+3q6A3OBoSlAAA +6J17FAECSkSCuYB1u/ogRwAA +uNegZGxraUaPNSPi7Pio8AAA +CktursNXL0eCMo1MGk5IrwAA +9pZ2B6DaSE+8T+/g1s90rAAA +teG8mx/ulECMRFVJuc682AAA +5qAAd/Kj3kG84oS/FyTJjgAA +2 + +False +DCobZcXopUed3uhu7f3tCwAA +CBkE9JDrJU21ybYWNP2cCgAA +8 +P8qHBXylckuDx/SkGs6/kgAA +z+pH801Q3EyVUqojN5NvcwAA +a23JEbE+xESafl0SbgJQUgAA +KKvDhWnzmkqPKuY0HjK8FgAA +3jCvVmLkmUOmqPd9htgolAAA +NadBPwcmBkCzQdPVoQ9nvgAA +zcW4R+DVKEu8iUYSDcj5lAAA +30s76xTpRUuGuQxZ0XJZmgAA + + +DCobZcXopUed3uhu7f3tCwAA +gJ7o4uiAMEqSPUL3dadz2wAA +8 +Y6LLjk5cA0OsM7eoYAvrAwAA +8ygaym1cVEKz+N3yjz+W1gAA +Q5ZwPenNC0WasjAzROTzGgAA +HSxQFf1qK0WYE5koAI47NAAA +Fbb8iSttAkCLoXNQQYEh3gAA +0sFv0U4b70SFffCDO7hjwAAA +CJheABw8b0irpkh65QeXlgAA +TR8oUjdAi0mgDQVpsU2x6QAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +dX9uvZH5mkKAFvskfoSY4QAA +rx3wB640uEyxN5/DQtbuawAA +64LyWbrmdEWFwQqGeMIhyQAA +aA6E1w9IoEGWoT0Q2XPx7wAA +uzG8uEdgi0i3H3UTNKhIIwAA +jRCasBdvq0Kn6T98PqDklQAA +pIEeisDPxUKZSTx+78xgJwAA +jK3EHCMME0y3UxN5gnLtsAAA +2 + +False +BUd2VmDLEkKHuqopStVszQAA +CBkE9JDrJU21ybYWNP2cCgAA +8 +sKhaqPLUPkmQM5K/X26iuAAA +loxl+4peu0msXA77GnU8CQAA +b0vedHq3j0u0coqCStqegQAA +F6tJ0pAeRUyFxtSLc1fimAAA +ZkbBwb4oMkiIM06X8VOTnQAA +Sj7lExzOPE+bbzg2lGqdsgAA +NhOiP47RcUW4PnbbHYKoigAA +uapIl/BVCEq5sExn6a+eVQAA + + +BUd2VmDLEkKHuqopStVszQAA +CEEcWQKt0kyX8zYOPZHrrwAA +8 +GVKWXfODm0iz3AP+Sgk4jwAA +ISWs/UeT4UiqncGs3Uaa7wAA +dQaQkx0Vukqci2ZJPGzLWwAA +VFDUhUFtwEKttTOYZEL1MAAA +wcNfkmFEBE2keKjrKnmYYQAA +b0vtc6nmIUyxCy552ywXcAAA +Xbpb0Knly06f32NWncRL3AAA +1elATEBhCESSVyalvtl1vgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +sNLeG4PJm0+8KCjqxqOCWwAA +HVTDYD/3okuTybpb3B1gOwAA +54Cx5D+dfEKjT3d0hBdjIQAA +EStqlexzsEetdK3v+w2VawAA ++UefbA7FIUSK/MESxoYt2gAA +JGrwX2xTnUyO7LiORoNaNgAA +35v5O50q9kCcUVg18mQ6xQAA +mKwniIrgcUmCAC3v/3o52QAA +2 + +False +fk3nxDxX5USF8gff9cP5MwAA +CEEcWQKt0kyX8zYOPZHrrwAA +8 +asJnsfN0GUWiyMuFCahDXgAA +BOEUQBrK30mjhvdpQHwJpQAA +NLl/T2j9okSgftxWUdGV2AAA +aokp2W90v0qswNfwmPOJfQAA +tZjYlGv610WzFoaaA/QP7wAA +h1BJSVelXEKRHU32rCPsLQAA +X1gftWAdoEWj2o7ki1YRiwAA +LX4tOha660eSLUYwNx89gwAA + + +fk3nxDxX5USF8gff9cP5MwAA +wftqTlAvI0+cR9j69saRNQAA +8 +J7YaaNWyYEiRwsgF2wYQgwAA +cXbKG9fCoEiC8fKZ7PMScAAA +O5E0E1GJSU+UB48yIZiM1wAA +C5cNYIx0qU6kT8FdTJ0W7wAA +wszj3UGclUqXbjurkvilmgAA +Vnl1L4a9kEyci6a5Ua9U5wAA +WWxGikyDf0uEiIKyAjjmrAAA +5xtTazOfxUiBxjKpHLQMBwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +xynMxno5NUOHq++yCyr7XgAA +traa/ZvvpUegPBbgP4JR/gAA ++c016pTsWE2c8mhuuBmHdgAA +YFKXLFn4AkyJ8o/xBGCVBQAA +2 + +False +dmgxVDpivEyRrIdXr3QLWwAA +KMKq644vfEq7voEHMFkLwgAA +4 +IE//HfmdUUaWXwbESvusOwAA +2GC8D1k2jkOWw0rykq0X+QAA +X1gVSFkWvkaH9wNUwqMsfgAA ++8M/uOF/Rkq++LijZdtMWAAA + + +dmgxVDpivEyRrIdXr3QLWwAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +lucB0vsdJkKPQUhW3zytXgAA +ymkzWLJAsUO0vpFi3JPk2wAA +wEFzJjk5NUurs7wK5l30kwAA +u4G0ctI3+0CgmaFxijqQCAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Avubf/Jv+ESjoY+fCSXr/wAA +bTAk9AIUs0WzbfD8kX5PRQAA +VqzGpLJi2E+VpZlzs+NuhQAA +Jp275MIge0q5w9sDDfeBpwAA +2 + +False +gFnk16iOFki43F+XSkxbHAAA +PjS4k33/kkePfB8R0Qh14AAA +4 +BfBksAic0Uu60LI/dyrMJAAA +/dKZaYx8cEeZYrYyiRYU5wAA +X9WPIh7u8E+7ZxiW5atmCAAA +OtNIFqV3gEGRcxG9TEDMNwAA + + +gFnk16iOFki43F+XSkxbHAAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +t/hXvvCqEkW1Bqw5sGsFLQAA +uRjP/dEd7US4Uku0S8rxbgAA +rR9yh3vj5EOFrJDYVMnPxQAA +WgEbSvB4gU6GVbqjwLk2HgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +jJ76FI5b90a+e5mKujxmLgAA +osHJ9uFuaku6ue23AkENGAAA +MoIUq7GFK0Wg88wQUwW3vgAA +y+AM/qQrxUyKhjffTSG7kAAA +2 + +False +O9Ia0CXMxkC9ATowborgyQAA +GbTWbRuRqkK91Ggxct5sowAA +4 +CooaoBIgEUi4hdtL77yrVAAA +oHxPaRG/nUqKic/NsC9StwAA +yxFGMboUqUqI16EC56JPRAAA +wm315JfaDkOBUzNDG7sWOAAA + + +O9Ia0CXMxkC9ATowborgyQAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +quVg6+WfjEa2I1ezl5O6SAAA +uedrORCY30SiJBNI193LogAA +XA9BJ+jjN0S+ADAx70K9YwAA +BSonIpOcYkK+u52kKButfwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +Y8EYWDXebEqqmXmnIro7RgAA +RV4aYgM5kE6PwLGX5PlbCQAA +RZSzrPCCtUWog9NfLYFhxgAA +olT7nuE/AEiDMgcQR32i6gAA +hq7WdlJapUCRsNXzSlOg/wAA +ro06C6vOo0GrLR1OTeXtogAA +2eAKXDc15UmaC0HKYUX0LwAA +AgkGQiaAhUeC59PTP+bfDQAA +2 + +False +hIsaQ5I0Y0qxkPCenhTfsgAA +F4Ld7UGpQkiQCCnqXOJ06wAA +8 +4MGKOKLqFUG3zS/WHyOr7AAA +zcHVUWij3U2f4OSHRSHNtgAA +rfRZgjlfbU2Q9GPaf7T6MgAA +9WYXmu4veEmK8H5Rteq1EQAA +PLrFDUDFl0OTZ4GYxcMbcwAA +YOpK/IqPVUOEkJXgmM+WHQAA +6O29cXMNhkiZvCJoA/sYNgAA +y/Rd1kLnV0OQYUyIl8KwWQAA + + +hIsaQ5I0Y0qxkPCenhTfsgAA +oKO/T5e9P0yxfxSC9DK89wAA +8 +G6P9O56zp0OagK8tAzvQGwAA +lNsNxZsx5kuZgI2//ydbkQAA +CoGIdA9u+0qWKrxSjEdDnQAA +Wt6GBkg7c0arLOwwEDNm4QAA +grMM67g/AEma0xf6QP5SfQAA +cRt1wkDA3kC4InO75uRc5wAA +C0l8Gmx+KkiAoYGtfTU76wAA +Erp8FPxuSEasSd1sJUWZeQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +ZQWq1tkei0aqV2y9CTuhYQAA +mhLUwyJky0+kaf5QJQeB/gAA +jQOA2QHLnEq2uF9+WuOTZAAA +w+emc4F3tEG4UaIhzt1sBgAA +2 + +False ++xZvDwUvFkOoytPg7jDZ2wAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +H66oi9Rqu0qNdT8O/7+AlQAA +ernUbNyH10eNZO90vpFTGQAA +2RlRZpNAPkeTSgkFCr1NqQAA +vdzc3HglWEiuEuuhnu0fnAAA + + ++xZvDwUvFkOoytPg7jDZ2wAA +l2Lw5fePkE+9xXcdzSY+bwAA +4 +Kl1lkIkKfkuqXTA7dAIA1wAA +2UNUcsKEeEeKWTVt5g06LgAA +5PxKeTHXdkO2Qw0LR+wXQwAA +h8UxVi/8lEKAmsFho3b7rQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +eL6lwgahcEKBUq3GRlz2ZwAA +Jh4IU3dK4U+krGZ0QI/oRQAA +OvUzLGtLH0yNsHPNrCbV9AAA +hfUS7gJryEiWUmI9MdS3fAAA +2 + +False +u2pg0MZyBkybxjv8s4b5hwAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +ukJoRgO7dEqeIxzBC8WiHAAA +g1HdXhrb506cqQbA6Nh3fAAA +LssztM2JukuehqMSYvNjIgAA +O7zJTWjg3kyjAgSat+MEYAAA + + +u2pg0MZyBkybxjv8s4b5hwAA +8v8IRJdlJUmbHIylKGey5wAA +4 +xOl++89mgkGXasQBMel+twAA +xD9176CVbEub8tdlNDaF7QAA +nL9/Pzg7gkicKqdvYbcSswAA +JgOWGoUr4Uy5jhm926nZkQAA + + + + +Design Model +UMLStandard +designModel +IhiugfF1eE6vc8zKnVf8gAAA +13 + +top-level-usecase-diagram +yePcB6NdXUG1SBs2wQJA7gAA + +dAvcL1pOSkyfQnbJT2mFKgAA +80 + +clMaroon +$00B9FFFF +314 +214 +245 +169 +System + + +clMaroon +$00B9FFFF +394 +338 +120 +32 +oKO/T5e9P0yxfxSC9DK89wAA + + +1 +get-task + + +False + + +False + + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + + +clMaroon +$00B9FFFF +390 +290 +127 +32 +F4Ld7UGpQkiQCCnqXOJ06wAA + + +1 +task-schedule + + +False + + +False + + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + + +clMaroon +$00B9FFFF +320 +276 +76 +23 +task-schedule + + + +clMaroon +$00B9FFFF +453,321;453,338 +hIsaQ5I0Y0qxkPCenhTfsgAA +PDF/3iFxa0qb6QrTKCb/YQAA +78WbrY6e4EC/58P5Ws4JCgAA + +False +1.5707963267949 +15 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +1.5707963267949 +30 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +-1.5707963267949 +15 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +-0.523598775598299 +30 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +0.523598775598299 +30 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +0.523598775598299 +25 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +-0.523598775598299 +25 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +-0.785398163397448 +40 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +0.785398163397448 +40 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +-1516 +-800 +50 +8 +qb8LVJbh5kG4uilxed700QAA + + +False +-1516 +-800 +50 +8 +4Ujmk5gLj0WyU3SYagr0mAAA + + + +clMaroon +$00B9FFFF +334 +242 +111 +32 +al6ONjrnZ02miWcUt8E4UAAA + + +1 +submit-task + + +False + + +False + + + +False +al6ONjrnZ02miWcUt8E4UAAA + + +False +al6ONjrnZ02miWcUt8E4UAAA + + +False +al6ONjrnZ02miWcUt8E4UAAA + + + +clMaroon +$00B9FFFF +454 +242 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +410,273;433,290 +ZX2SocfyGUGaYAoZdJTHCQAA +78WbrY6e4EC/58P5Ws4JCgAA +mGag8uVpX0+zFhYfpZD08wAA + +False +1.5707963267949 +15 +ZX2SocfyGUGaYAoZdJTHCQAA + + +False +1.5707963267949 +30 +ZX2SocfyGUGaYAoZdJTHCQAA + + +False +-1.5707963267949 +15 +ZX2SocfyGUGaYAoZdJTHCQAA + + +False +-0.523598775598299 +30 +epHead +v4O00Fgt/UO7ZDLsyBtHIQAA + + +False +0.523598775598299 +30 +epTail +YezoOUqiMEqMfQ47zgiYggAA + + +False +0.523598775598299 +25 +epHead +v4O00Fgt/UO7ZDLsyBtHIQAA + + +False +-0.523598775598299 +25 +epTail +YezoOUqiMEqMfQ47zgiYggAA + + +False +-0.785398163397448 +40 +epHead +v4O00Fgt/UO7ZDLsyBtHIQAA + + +False +0.785398163397448 +40 +epTail +YezoOUqiMEqMfQ47zgiYggAA + + +False +-1068 +-948 +50 +8 +v4O00Fgt/UO7ZDLsyBtHIQAA + + +False +-1068 +-948 +50 +8 +YezoOUqiMEqMfQ47zgiYggAA + + + +clMaroon +$00B9FFFF +482,273;467,290 +V+JDAD1y1kGhDKjzLQ2kzwAA +78WbrY6e4EC/58P5Ws4JCgAA +MM23IzSqWEWlGoT6/hNe5AAA + +False +1.5707963267949 +15 +V+JDAD1y1kGhDKjzLQ2kzwAA + + +False +1.5707963267949 +30 +V+JDAD1y1kGhDKjzLQ2kzwAA + + +False +-1.5707963267949 +15 +V+JDAD1y1kGhDKjzLQ2kzwAA + + +False +-0.523598775598299 +30 +epHead +5z6XidYYrkexqaAHLrMuGQAA + + +False +0.523598775598299 +30 +epTail +ivchHpb/m0Oy82i37nw/zwAA + + +False +0.523598775598299 +25 +epHead +5z6XidYYrkexqaAHLrMuGQAA + + +False +-0.523598775598299 +25 +epTail +ivchHpb/m0Oy82i37nw/zwAA + + +False +-0.785398163397448 +40 +epHead +5z6XidYYrkexqaAHLrMuGQAA + + +False +0.785398163397448 +40 +epTail +ivchHpb/m0Oy82i37nw/zwAA + + +False +-1068 +-948 +50 +8 +5z6XidYYrkexqaAHLrMuGQAA + + +False +-1068 +-948 +50 +8 +ivchHpb/m0Oy82i37nw/zwAA + + + +clMaroon +$00FF80FF +568 +180 +159 +32 +PjS4k33/kkePfB8R0Qh14AAA + + +1 +bugfix-estimate + + +False + + +False + + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + + +clMaroon +$0080FF80 +124 +104 +175 +32 +7lWVbX8GnUmVFBjNoEJuAAAA + + +1 +new-demond-action + + +False + + +False + + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + + +clMaroon +$0080FF80 +140 +188 +144 +32 +dqA/cPl8GEmWvU/R693yfAAA + + +1 +new-idea-action + + +False + + +False + + + +False +dqA/cPl8GEmWvU/R693yfAAA + + +False +dqA/cPl8GEmWvU/R693yfAAA + + +False +dqA/cPl8GEmWvU/R693yfAAA + + + +clMaroon +$0080FF80 +296 +4 +190 +32 +jic239+6CEiL3vfxIBKzZwAA + + +1 +usr-bug-report-action + + +False + + +False + + + +False +jic239+6CEiL3vfxIBKzZwAA + + +False +jic239+6CEiL3vfxIBKzZwAA + + +False +jic239+6CEiL3vfxIBKzZwAA + + + +clMaroon +$0080FF80 +332 +52 +113 +32 +hWsqFBqliU2am4OA8VEXDgAA + + +1 +using-action + + +False + + +False + + + +False +hWsqFBqliU2am4OA8VEXDgAA + + +False +hWsqFBqliU2am4OA8VEXDgAA + + +False +hWsqFBqliU2am4OA8VEXDgAA + + + +clMaroon +clSilver +596 +144 +110 +32 +H7tysEnUp0+p4o84YYVC8wAA + + +1 +bugfix-work + + +False + + +False + + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + + +clMaroon +$0080FF80 +232 +148 +138 +32 +tptycT8EmUmriJ3RFm3kFAAA + + +1 +analysis-action + + +False + + +False + + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + + +clMaroon +$00B9FFFF +243,135;269,148 +Ycu282Q90kSZPuP8Y2664QAA +kl2Aed9IkUu2D64AkSCxzAAA +UE1o5B5rJESipHfZBqKwygAA + +False +1.5707963267949 +15 +Ycu282Q90kSZPuP8Y2664QAA + + +False +1.5707963267949 +30 +Ycu282Q90kSZPuP8Y2664QAA + + +False +-1.5707963267949 +15 +Ycu282Q90kSZPuP8Y2664QAA + + +False +-0.523598775598299 +30 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +0.523598775598299 +30 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +0.523598775598299 +25 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +-0.523598775598299 +25 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +-0.785398163397448 +40 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +0.785398163397448 +40 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +-1008 +-1160 +50 +8 +tbE2qZkS9UCvoD6eysPdBQAA + + +False +-1008 +-1160 +50 +8 +8Gn/k11xTkGZ83K2PTY6tgAA + + + +clMaroon +$00B9FFFF +244,188;264,179 +2f8CCoiKYEm2bnh0fSgF5AAA +kl2Aed9IkUu2D64AkSCxzAAA +9tFoXvjmTECmCvT8S3sjAwAA + +False +1.5707963267949 +15 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +1.5707963267949 +30 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +-1.5707963267949 +15 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +-0.523598775598299 +30 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +0.523598775598299 +30 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +0.523598775598299 +25 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +-0.523598775598299 +25 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +-0.785398163397448 +40 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +0.785398163397448 +40 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +-1008 +-1160 +50 +8 +XqdZXwSYokCQBpZDzAi8kQAA + + +False +-1008 +-1160 +50 +8 +FMzzdvZAeUWKXvIN8LFkfwAA + + + +clMaroon +$00FFFF80 +152 +232 +130 +32 +dHVXjobujkKGloy7+Ox8DAAA + + +1 +publish-launch + + +False + + +False + + + +False +dHVXjobujkKGloy7+Ox8DAAA + + +False +dHVXjobujkKGloy7+Ox8DAAA + + +False +dHVXjobujkKGloy7+Ox8DAAA + + + +clMaroon +clSilver +580 +60 +141 +32 +VwrgoiK6h0aUxHMgZDKYzgAA + + +1 +document-work + + +False + + +False + + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + + +clMaroon +clSilver +584 +104 +138 +32 +fKAlsL5x3U2cAiir26vsAQAA + + +1 +traslation-work + + +False + + +False + + + +False +fKAlsL5x3U2cAiir26vsAQAA + + +False +fKAlsL5x3U2cAiir26vsAQAA + + +False +fKAlsL5x3U2cAiir26vsAQAA + + + +clMaroon +clSilver +588 +16 +117 +32 +KbXj7bLsjku9BsYv/z63VgAA + + +1 +testing-work + + +False + + +False + + + +False +KbXj7bLsjku9BsYv/z63VgAA + + +False +KbXj7bLsjku9BsYv/z63VgAA + + +False +KbXj7bLsjku9BsYv/z63VgAA + + + +clMaroon +$00FFFF80 +92 +20 +209 +32 +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +1 +new-feature-dev-launch + + +False + + +False + + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + + +clMaroon +$00FFFF80 +132 +64 +154 +32 +d6r7rOW3akG5lkJDtATmigAA + + +1 +initial-dev-launch + + +False + + +False + + + +False +d6r7rOW3akG5lkJDtATmigAA + + +False +d6r7rOW3akG5lkJDtATmigAA + + +False +d6r7rOW3akG5lkJDtATmigAA + + + +clMaroon +$00B9FFFF +124 +101 +78 +A/9YWnHJBEGH1jC8FI2M9gAA + + +1 +maintainer + + +False + + +False + + + +False +A/9YWnHJBEGH1jC8FI2M9gAA + + +False +A/9YWnHJBEGH1jC8FI2M9gAA + + + +clMaroon +$00B9FFFF +12 +236 +77 +78 +FkRCE52YAkaM/9oO8q9QFQAA + + +1 +author + + +False + + +False + + + +False +FkRCE52YAkaM/9oO8q9QFQAA + + +False +FkRCE52YAkaM/9oO8q9QFQAA + + + +clMaroon +$00B9FFFF +800 +28 +76 +78 +MLBX+NGx9kymQ76b9EAKuwAA + + +1 +tech-leader + + +False + + +False + + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + + +clMaroon +$00B9FFFF +796 +176 +90 +78 +oWDHE/AIyEqhL2zTdizC4AAA + + +1 +developper + + +False + + +False + + + +False +oWDHE/AIyEqhL2zTdizC4AAA + + +False +oWDHE/AIyEqhL2zTdizC4AAA + + + +clMaroon +$00B9FFFF +796 +244 +91 +78 +Pu4+pL+iiU6lRzDtfLIgJwAA + + +1 +documentor + + +False + + +False + + + +False +Pu4+pL+iiU6lRzDtfLIgJwAA + + +False +Pu4+pL+iiU6lRzDtfLIgJwAA + + + +clMaroon +$00B9FFFF +800 +316 +86 +78 +aaiB2ZAB7kOSB9niWMGCrAAA + + +1 +translator + + +False + + +False + + + +False +aaiB2ZAB7kOSB9niWMGCrAAA + + +False +aaiB2ZAB7kOSB9niWMGCrAAA + + + +clMaroon +$00B9FFFF +492 +8 +77 +78 +u2JHX3nMn0CMyZLWTG2R1QAA + + +1 +user + + +False + + +False + + + +False +u2JHX3nMn0CMyZLWTG2R1QAA + + +False +u2JHX3nMn0CMyZLWTG2R1QAA + + + +clMaroon +$00B9FFFF +796 +100 +86 +78 +78O5f65/80OvpHK3AuBEIQAA + + +1 +tester + + +False + + +False + + + +False +78O5f65/80OvpHK3AuBEIQAA + + +False +78O5f65/80OvpHK3AuBEIQAA + + + +clMaroon +$00B9FFFF +100,149;152,135 +MAKnyTiDo06cPkcuyMVz0AAA +UE1o5B5rJESipHfZBqKwygAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +MAKnyTiDo06cPkcuyMVz0AAA + + +False +1.5707963267949 +30 +MAKnyTiDo06cPkcuyMVz0AAA + + +False +-1.5707963267949 +15 +MAKnyTiDo06cPkcuyMVz0AAA + + + +clMaroon +$00B9FFFF +100,162;232,163 +esX3j+a1KU2snuv6WgXrzgAA +kl2Aed9IkUu2D64AkSCxzAAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +esX3j+a1KU2snuv6WgXrzgAA + + +False +1.5707963267949 +30 +esX3j+a1KU2snuv6WgXrzgAA + + +False +-1.5707963267949 +15 +esX3j+a1KU2snuv6WgXrzgAA + + + +clMaroon +$00B9FFFF +100,175;152,188 +bFIlptiTHUqaYGcZ9Z9BwwAA +9tFoXvjmTECmCvT8S3sjAwAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +bFIlptiTHUqaYGcZ9Z9BwwAA + + +False +1.5707963267949 +30 +bFIlptiTHUqaYGcZ9Z9BwwAA + + +False +-1.5707963267949 +15 +bFIlptiTHUqaYGcZ9Z9BwwAA + + + +clMaroon +$00B9FFFF +88,124;104,108;151,95 +YwY92xK+JEOUOaknXh7XMAAA +65HjSOXEV02PyHHndkIc4wAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +YwY92xK+JEOUOaknXh7XMAAA + + +False +1.5707963267949 +30 +YwY92xK+JEOUOaknXh7XMAAA + + +False +-1.5707963267949 +15 +YwY92xK+JEOUOaknXh7XMAAA + + + +clMaroon +$00B9FFFF +64,124;84,72;148,51 +VUF2hqp6/UCePhaBLl598gAA +D0y3HjNuyEeD8w3pOiVL9gAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +VUF2hqp6/UCePhaBLl598gAA + + +False +1.5707963267949 +30 +VUF2hqp6/UCePhaBLl598gAA + + +False +-1.5707963267949 +15 +VUF2hqp6/UCePhaBLl598gAA + + + +clMaroon +$00FF80FF +584 +216 +140 +32 +Qefe92j2XEq8x5GI1Vq+RQAA + + +1 +testing-estimat + + +False + + +False + + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + + +clMaroon +$00FF80FF +140 +324 +140 +32 +YPSGJ8SkH0mAV1HZcqVjOgAA + + +1 +publish-estimat + + +False + + +False + + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + + +clMaroon +$00FF80FF +128 +276 +168 +32 +sl9IvUV4W0Kodgc58LjsVgAA + + +1 +complete-estimate + + +False + + +False + + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + + +clMaroon +$00B9FFFF +77,201;116,256;170,276 +xg7XA4XPo0GPzFxhulYO7QAA +tJdxQ2n6kUCuF/faDlNrnwAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +xg7XA4XPo0GPzFxhulYO7QAA + + +False +1.5707963267949 +30 +xg7XA4XPo0GPzFxhulYO7QAA + + +False +-1.5707963267949 +15 +xg7XA4XPo0GPzFxhulYO7QAA + + + +clMaroon +$00B9FFFF +68,201;116,304;169,324 +3ExrMzh4BU+qEom+NkgXhAAA +myJOly92w06UWOgls7OciAAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +3ExrMzh4BU+qEom+NkgXhAAA + + +False +1.5707963267949 +30 +3ExrMzh4BU+qEom+NkgXhAAA + + +False +-1.5707963267949 +15 +3ExrMzh4BU+qEom+NkgXhAAA + + + +clMaroon +$00B9FFFF +600 +252 +108 +32 +U//hAdD8QU+M1p1r952pSAAA + + +1 +design-task + + +False + + +False + + + +False +U//hAdD8QU+M1p1r952pSAAA + + +False +U//hAdD8QU+M1p1r952pSAAA + + +False +U//hAdD8QU+M1p1r952pSAAA + + + +clMaroon +$00B9FFFF +816,105;748,232;694,252 +onJRiZekkkW+HvL7efTCQAAA +HIeb6G3eG0y9ALZQK+J4gQAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +onJRiZekkkW+HvL7efTCQAAA + + +False +1.5707963267949 +30 +onJRiZekkkW+HvL7efTCQAAA + + +False +-1.5707963267949 +15 +onJRiZekkkW+HvL7efTCQAAA + + + +clMaroon +$00B9FFFF +800,99;744,148;678,180 +DLyG2IErKEu/iLgO368jEQAA +6WD/injqLkGLLLrBFiLSOQAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +DLyG2IErKEu/iLgO368jEQAA + + +False +1.5707963267949 +30 +DLyG2IErKEu/iLgO368jEQAA + + +False +-1.5707963267949 +15 +DLyG2IErKEu/iLgO368jEQAA + + + +clMaroon +$00B9FFFF +812,105;748,204;706,216 +GHPM6mLD3kO4lCP2rqtf+QAA +kliHiKyFiEyM4tl1y2PxqQAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +GHPM6mLD3kO4lCP2rqtf+QAA + + +False +1.5707963267949 +30 +GHPM6mLD3kO4lCP2rqtf+QAA + + +False +-1.5707963267949 +15 +GHPM6mLD3kO4lCP2rqtf+QAA + + + +clMaroon +$00B9FFFF +156 +368 +113 +32 +G18zTBUAj0+SdrsOmksR0QAA + + +1 +publish-task + + +False + + +False + + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + + +clMaroon +$00B9FFFF +100,199;128,220;167,232 +N6rmhGGOH06+NgfTaWft1gAA +3rdXqG4KQ0W+d59DtblscAAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +N6rmhGGOH06+NgfTaWft1gAA + + +False +1.5707963267949 +30 +N6rmhGGOH06+NgfTaWft1gAA + + +False +-1.5707963267949 +15 +N6rmhGGOH06+NgfTaWft1gAA + + + +clMaroon +$00B9FFFF +62,201;108,352;162,368 +jTxlFtrXok2VlE3EA+IAugAA +b4fOXlO640eOSeo31HjDiQAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +jTxlFtrXok2VlE3EA+IAugAA + + +False +1.5707963267949 +30 +jTxlFtrXok2VlE3EA+IAugAA + + +False +-1.5707963267949 +15 +jTxlFtrXok2VlE3EA+IAugAA + + + +clMaroon +$00B9FFFF +50,236;50,201 +Iz8n1Vm2AECplTLk/g9l/gAA +hLrtDO2G80+MBE7w/xqYWAAA +oUU7LbB8z06lO7+JvHxYawAA + +False +1.5707963267949 +15 +Iz8n1Vm2AECplTLk/g9l/gAA + + +False +1.5707963267949 +30 +Iz8n1Vm2AECplTLk/g9l/gAA + + +False +-1.5707963267949 +15 +Iz8n1Vm2AECplTLk/g9l/gAA + + +False +-0.523598775598299 +30 +epHead +hbdfYKhKQEGS3E5YtXQxcAAA + + +False +0.523598775598299 +30 +epTail +6V1phiekNEigGlosS4iI4AAA + + +False +0.523598775598299 +25 +epHead +hbdfYKhKQEGS3E5YtXQxcAAA + + +False +-0.523598775598299 +25 +epTail +6V1phiekNEigGlosS4iI4AAA + + +False +-0.785398163397448 +40 +epHead +hbdfYKhKQEGS3E5YtXQxcAAA + + +False +0.785398163397448 +40 +epTail +6V1phiekNEigGlosS4iI4AAA + + +False +-1116 +-1432 +50 +8 +hbdfYKhKQEGS3E5YtXQxcAAA + + +False +-1116 +-1432 +50 +8 +6V1phiekNEigGlosS4iI4AAA + + + +clMaroon +$00B9FFFF +596 +348 +96 +32 +akeIYx92HUGIvgZi/7qslgAA + + +1 +work-task + + +False + + +False + + + +False +akeIYx92HUGIvgZi/7qslgAA + + +False +akeIYx92HUGIvgZi/7qslgAA + + +False +akeIYx92HUGIvgZi/7qslgAA + + + +clMaroon +$00B9FFFF +812,253;768,316;683,348 +vY9LoEpVCEyXKh6+k1PP4AAA +PZbcok41dUuxzpJHw+qcCQAA +J56vYtWN6EGOMGIGF6vlZAAA + +False +1.5707963267949 +15 +vY9LoEpVCEyXKh6+k1PP4AAA + + +False +1.5707963267949 +30 +vY9LoEpVCEyXKh6+k1PP4AAA + + +False +-1.5707963267949 +15 +vY9LoEpVCEyXKh6+k1PP4AAA + + + +clMaroon +$00B9FFFF +800,84;680,144 +Fxyv+zwMo0S0Ncj/Azp5dQAA +6X0FK2w+kUGeRH2fHqoCSwAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +Fxyv+zwMo0S0Ncj/Azp5dQAA + + +False +1.5707963267949 +30 +Fxyv+zwMo0S0Ncj/Azp5dQAA + + +False +-1.5707963267949 +15 +Fxyv+zwMo0S0Ncj/Azp5dQAA + + + +clMaroon +$00B9FFFF +800,77;705,104 +zYrgxJijVUeKhRuYPCJv9wAA +CVNk+aZ2kUS/be+Nv1opngAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +zYrgxJijVUeKhRuYPCJv9wAA + + +False +1.5707963267949 +30 +zYrgxJijVUeKhRuYPCJv9wAA + + +False +-1.5707963267949 +15 +zYrgxJijVUeKhRuYPCJv9wAA + + + +clMaroon +$00B9FFFF +800,71;740,80;720,79 +7VFRD/OOk0CHQPmyBREE7QAA +vza3XuXwdUy+RCEd4a7/AAAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +7VFRD/OOk0CHQPmyBREE7QAA + + +False +1.5707963267949 +30 +7VFRD/OOk0CHQPmyBREE7QAA + + +False +-1.5707963267949 +15 +7VFRD/OOk0CHQPmyBREE7QAA + + + +clMaroon +$00B9FFFF +800,59;744,48;704,41 +dr0yGiZ9w0ifqTGL7hJMYAAA +Sl7WaLUfCE+IreEUylmhuQAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +dr0yGiZ9w0ifqTGL7hJMYAAA + + +False +1.5707963267949 +30 +dr0yGiZ9w0ifqTGL7hJMYAAA + + +False +-1.5707963267949 +15 +dr0yGiZ9w0ifqTGL7hJMYAAA + + + +clMaroon +$00B9FFFF +805,321;780,348;691,358 +3we00g4TrUSP2RwRD/Zr6AAA +PZbcok41dUuxzpJHw+qcCQAA +jRMnNsOHm0ilwTcHjyhAsQAA + +False +1.5707963267949 +15 +3we00g4TrUSP2RwRD/Zr6AAA + + +False +1.5707963267949 +30 +3we00g4TrUSP2RwRD/Zr6AAA + + +False +-1.5707963267949 +15 +3we00g4TrUSP2RwRD/Zr6AAA + + + +clMaroon +$00B9FFFF +816,177;748,300;668,348 +jKTbz3HBukOB4vjFAHBjhwAA +PZbcok41dUuxzpJHw+qcCQAA +yTQvkxa2EU+paqJboa22BgAA + +False +1.5707963267949 +15 +jKTbz3HBukOB4vjFAHBjhwAA + + +False +1.5707963267949 +30 +jKTbz3HBukOB4vjFAHBjhwAA + + +False +-1.5707963267949 +15 +jKTbz3HBukOB4vjFAHBjhwAA + + + +clMaroon +$00B9FFFF +800,369;780,376;691,368 +wKnDb+gcSEGIVFdvrqRcMwAA +PZbcok41dUuxzpJHw+qcCQAA +sTVRqiD/L0m+CYPwqsjRYQAA + +False +1.5707963267949 +15 +wKnDb+gcSEGIVFdvrqRcMwAA + + +False +1.5707963267949 +30 +wKnDb+gcSEGIVFdvrqRcMwAA + + +False +-1.5707963267949 +15 +wKnDb+gcSEGIVFdvrqRcMwAA + + + +clMaroon +$00B9FFFF +394,360;268,376 +dQUIyAabUkW3BrzevL6ajQAA +b4fOXlO640eOSeo31HjDiQAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +dQUIyAabUkW3BrzevL6ajQAA + + +False +1.5707963267949 +30 +dQUIyAabUkW3BrzevL6ajQAA + + +False +-1.5707963267949 +15 +dQUIyAabUkW3BrzevL6ajQAA + + +False +-0.523598775598299 +30 +epHead +m+4bIFntFkmXMzdv2SUAzQAA + + +False +0.523598775598299 +30 +epTail +G5oIOUpHjU6CAVOHO5cbSQAA + + +False +0.523598775598299 +25 +epHead +m+4bIFntFkmXMzdv2SUAzQAA + + +False +-0.523598775598299 +25 +epTail +G5oIOUpHjU6CAVOHO5cbSQAA + + +False +-0.785398163397448 +40 +epHead +m+4bIFntFkmXMzdv2SUAzQAA + + +False +0.785398163397448 +40 +epTail +G5oIOUpHjU6CAVOHO5cbSQAA + + +False +-1032 +-996 +50 +8 +m+4bIFntFkmXMzdv2SUAzQAA + + +False +-1032 +-996 +50 +8 +G5oIOUpHjU6CAVOHO5cbSQAA + + + +clMaroon +$00B9FFFF +513,356;596,360 +b9LJxRkpzEy/d2cpGE3jlAAA +PZbcok41dUuxzpJHw+qcCQAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +b9LJxRkpzEy/d2cpGE3jlAAA + + +False +1.5707963267949 +30 +b9LJxRkpzEy/d2cpGE3jlAAA + + +False +-1.5707963267949 +15 +b9LJxRkpzEy/d2cpGE3jlAAA + + +False +-0.523598775598299 +30 +epHead +MEkNsUXvgEqT0nEOCk4PgAAA + + +False +0.523598775598299 +30 +epTail +kZf004keokGnnIbJREbJ8gAA + + +False +0.523598775598299 +25 +epHead +MEkNsUXvgEqT0nEOCk4PgAAA + + +False +-0.523598775598299 +25 +epTail +kZf004keokGnnIbJREbJ8gAA + + +False +-0.785398163397448 +40 +epHead +MEkNsUXvgEqT0nEOCk4PgAAA + + +False +0.785398163397448 +40 +epTail +kZf004keokGnnIbJREbJ8gAA + + +False +-1032 +-996 +50 +8 +MEkNsUXvgEqT0nEOCk4PgAAA + + +False +-1032 +-996 +50 +8 +kZf004keokGnnIbJREbJ8gAA + + + +clMaroon +$00B9FFFF +394,350;279,343 +4cv8mepYQESw1qV+1hogLAAA +myJOly92w06UWOgls7OciAAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +4cv8mepYQESw1qV+1hogLAAA + + +False +1.5707963267949 +30 +4cv8mepYQESw1qV+1hogLAAA + + +False +-1.5707963267949 +15 +4cv8mepYQESw1qV+1hogLAAA + + +False +-0.523598775598299 +30 +epHead +PlQ+p7G7JUegK51TuNbuLgAA + + +False +0.523598775598299 +30 +epTail +50uCeDif8kKZsdKCSOxuyQAA + + +False +0.523598775598299 +25 +epHead +PlQ+p7G7JUegK51TuNbuLgAA + + +False +-0.523598775598299 +25 +epTail +50uCeDif8kKZsdKCSOxuyQAA + + +False +-0.785398163397448 +40 +epHead +PlQ+p7G7JUegK51TuNbuLgAA + + +False +0.785398163397448 +40 +epTail +50uCeDif8kKZsdKCSOxuyQAA + + +False +-1032 +-996 +50 +8 +PlQ+p7G7JUegK51TuNbuLgAA + + +False +-1032 +-996 +50 +8 +50uCeDif8kKZsdKCSOxuyQAA + + + +clMaroon +$00B9FFFF +394,338;273,307 +dle0km/8mEy/njpP8YzaVgAA +tJdxQ2n6kUCuF/faDlNrnwAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +dle0km/8mEy/njpP8YzaVgAA + + +False +1.5707963267949 +30 +dle0km/8mEy/njpP8YzaVgAA + + +False +-1.5707963267949 +15 +dle0km/8mEy/njpP8YzaVgAA + + +False +-0.523598775598299 +30 +epHead +YvCannseaUmrs70XgLp5GQAA + + +False +0.523598775598299 +30 +epTail +Pqls1twyrUOYZaqZAZic8QAA + + +False +0.523598775598299 +25 +epHead +YvCannseaUmrs70XgLp5GQAA + + +False +-0.523598775598299 +25 +epTail +Pqls1twyrUOYZaqZAZic8QAA + + +False +-0.785398163397448 +40 +epHead +YvCannseaUmrs70XgLp5GQAA + + +False +0.785398163397448 +40 +epTail +Pqls1twyrUOYZaqZAZic8QAA + + +False +-1032 +-996 +50 +8 +YvCannseaUmrs70XgLp5GQAA + + +False +-1032 +-996 +50 +8 +Pqls1twyrUOYZaqZAZic8QAA + + + +clMaroon +$00B9FFFF +281,251;334,254 +bLyKzfToT0G3pHx4RMAW5wAA +mGag8uVpX0+zFhYfpZD08wAA +3rdXqG4KQ0W+d59DtblscAAA + +False +1.5707963267949 +15 +bLyKzfToT0G3pHx4RMAW5wAA + + +False +1.5707963267949 +30 +bLyKzfToT0G3pHx4RMAW5wAA + + +False +-1.5707963267949 +15 +bLyKzfToT0G3pHx4RMAW5wAA + + +False +-0.523598775598299 +30 +epHead +stbsvaZCJkG2vJI5d3KxdwAA + + +False +0.523598775598299 +30 +epTail +dIPnH0JAR0m2CEwio1XRKwAA + + +False +0.523598775598299 +25 +epHead +stbsvaZCJkG2vJI5d3KxdwAA + + +False +-0.523598775598299 +25 +epTail +dIPnH0JAR0m2CEwio1XRKwAA + + +False +-0.785398163397448 +40 +epHead +stbsvaZCJkG2vJI5d3KxdwAA + + +False +0.785398163397448 +40 +epTail +dIPnH0JAR0m2CEwio1XRKwAA + + +False +-1032 +-996 +50 +8 +stbsvaZCJkG2vJI5d3KxdwAA + + +False +-1032 +-996 +50 +8 +dIPnH0JAR0m2CEwio1XRKwAA + + + +clMaroon +$00B9FFFF +596 +288 +121 +32 +HhCFPxH60EuycMQ2nfXWCQAA + + +1 +analysis-task + + +False + + +False + + + +False +HhCFPxH60EuycMQ2nfXWCQAA + + +False +HhCFPxH60EuycMQ2nfXWCQAA + + +False +HhCFPxH60EuycMQ2nfXWCQAA + + + +clMaroon +$00B9FFFF +818,105;748,252;683,288 +b/CTfa0mFUyr1SeIhcoTFwAA +5CbxRWAfz0OazD2BC6LOtgAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +b/CTfa0mFUyr1SeIhcoTFwAA + + +False +1.5707963267949 +30 +b/CTfa0mFUyr1SeIhcoTFwAA + + +False +-1.5707963267949 +15 +b/CTfa0mFUyr1SeIhcoTFwAA + + + +clMaroon +$00B9FFFF +492,39;472,35 +gIzn+8O0A0ux4mJbpKNkEwAA +Ms00Ghmc4EasjVjv6tSf/wAA +vaX40+6yy0+QL2+OqVsz5wAA + +False +1.5707963267949 +15 +gIzn+8O0A0ux4mJbpKNkEwAA + + +False +1.5707963267949 +30 +gIzn+8O0A0ux4mJbpKNkEwAA + + +False +-1.5707963267949 +15 +gIzn+8O0A0ux4mJbpKNkEwAA + + + +clMaroon +$00B9FFFF +492,52;444,59 +4d0O1iKcq0+kIW5Bpb2joAAA +P24tgRFfhEi1BROVlu7OOgAA +vaX40+6yy0+QL2+OqVsz5wAA + +False +1.5707963267949 +15 +4d0O1iKcq0+kIW5Bpb2joAAA + + +False +1.5707963267949 +30 +4d0O1iKcq0+kIW5Bpb2joAAA + + +False +-1.5707963267949 +15 +4d0O1iKcq0+kIW5Bpb2joAAA + + + +clMaroon +$00B9FFFF +251,95;372,140;387,242 +63BfEROBLEGGjWv9qa4YPgAA +mGag8uVpX0+zFhYfpZD08wAA +65HjSOXEV02PyHHndkIc4wAA + +False +1.5707963267949 +15 +63BfEROBLEGGjWv9qa4YPgAA + + +False +1.5707963267949 +30 +63BfEROBLEGGjWv9qa4YPgAA + + +False +-1.5707963267949 +15 +63BfEROBLEGGjWv9qa4YPgAA + + +False +-0.523598775598299 +30 +epHead +1q5yuUkA0kGBWLWrt4cfxwAA + + +False +0.523598775598299 +30 +epTail +7zDlLto/L02ptrUw9yDPUQAA + + +False +0.523598775598299 +25 +epHead +1q5yuUkA0kGBWLWrt4cfxwAA + + +False +-0.523598775598299 +25 +epTail +7zDlLto/L02ptrUw9yDPUQAA + + +False +-0.785398163397448 +40 +epHead +1q5yuUkA0kGBWLWrt4cfxwAA + + +False +0.785398163397448 +40 +epTail +7zDlLto/L02ptrUw9yDPUQAA + + +False +-1000 +-1000 +50 +8 +1q5yuUkA0kGBWLWrt4cfxwAA + + +False +-1000 +-1000 +50 +8 +7zDlLto/L02ptrUw9yDPUQAA + + + +clMaroon +$00B9FFFF +234,51;380,112;388,242 +aM8L++tUe0CN4YEwoVH/cwAA +mGag8uVpX0+zFhYfpZD08wAA +D0y3HjNuyEeD8w3pOiVL9gAA + +False +1.5707963267949 +15 +aM8L++tUe0CN4YEwoVH/cwAA + + +False +1.5707963267949 +30 +aM8L++tUe0CN4YEwoVH/cwAA + + +False +-1.5707963267949 +15 +aM8L++tUe0CN4YEwoVH/cwAA + + +False +-0.523598775598299 +30 +epHead +jZEe3B1pgkqg0horzFKWzwAA + + +False +0.523598775598299 +30 +epTail +OOVxi4WGDkKWer/0+AwIPgAA + + +False +0.523598775598299 +25 +epHead +jZEe3B1pgkqg0horzFKWzwAA + + +False +-0.523598775598299 +25 +epTail +OOVxi4WGDkKWer/0+AwIPgAA + + +False +-0.785398163397448 +40 +epHead +jZEe3B1pgkqg0horzFKWzwAA + + +False +0.785398163397448 +40 +epTail +OOVxi4WGDkKWer/0+AwIPgAA + + +False +-1000 +-1000 +50 +8 +jZEe3B1pgkqg0horzFKWzwAA + + +False +-1000 +-1000 +50 +8 +OOVxi4WGDkKWer/0+AwIPgAA + + + +clMaroon +$00B9FFFF +513,338;596,318 ++pKtO8/uIk+Z4sYfrACDGgAA +5CbxRWAfz0OazD2BC6LOtgAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 ++pKtO8/uIk+Z4sYfrACDGgAA + + +False +1.5707963267949 +30 ++pKtO8/uIk+Z4sYfrACDGgAA + + +False +-1.5707963267949 +15 ++pKtO8/uIk+Z4sYfrACDGgAA + + +False +-0.523598775598299 +30 +epHead +LJwRpPfpFE+v3TCpYFoQmgAA + + +False +0.523598775598299 +30 +epTail +XPjUoHBhGkOE8kyb9uqy1AAA + + +False +0.523598775598299 +25 +epHead +LJwRpPfpFE+v3TCpYFoQmgAA + + +False +-0.523598775598299 +25 +epTail +XPjUoHBhGkOE8kyb9uqy1AAA + + +False +-0.785398163397448 +40 +epHead +LJwRpPfpFE+v3TCpYFoQmgAA + + +False +0.785398163397448 +40 +epTail +XPjUoHBhGkOE8kyb9uqy1AAA + + +False +-1000 +-1000 +50 +8 +LJwRpPfpFE+v3TCpYFoQmgAA + + +False +-1000 +-1000 +50 +8 +XPjUoHBhGkOE8kyb9uqy1AAA + + + +clMaroon +$00B9FFFF +488,338;616,283 +nmuSEcLCrEGvKBQ/lU47BwAA +HIeb6G3eG0y9ALZQK+J4gQAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +nmuSEcLCrEGvKBQ/lU47BwAA + + +False +1.5707963267949 +30 +nmuSEcLCrEGvKBQ/lU47BwAA + + +False +-1.5707963267949 +15 +nmuSEcLCrEGvKBQ/lU47BwAA + + +False +-0.523598775598299 +30 +epHead +L7a4CYmPC0uUj33RRoWiJgAA + + +False +0.523598775598299 +30 +epTail +7QebQWj8AEy2+oMl4FpmTAAA + + +False +0.523598775598299 +25 +epHead +L7a4CYmPC0uUj33RRoWiJgAA + + +False +-0.523598775598299 +25 +epTail +7QebQWj8AEy2+oMl4FpmTAAA + + +False +-0.785398163397448 +40 +epHead +L7a4CYmPC0uUj33RRoWiJgAA + + +False +0.785398163397448 +40 +epTail +7QebQWj8AEy2+oMl4FpmTAAA + + +False +-1000 +-1000 +50 +8 +L7a4CYmPC0uUj33RRoWiJgAA + + +False +-1000 +-1000 +50 +8 +7QebQWj8AEy2+oMl4FpmTAAA + + + +clMaroon +$00B9FFFF +478,338;627,247 +ByfvBxwbrkGP5+WxTb1ZvQAA +kliHiKyFiEyM4tl1y2PxqQAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +ByfvBxwbrkGP5+WxTb1ZvQAA + + +False +1.5707963267949 +30 +ByfvBxwbrkGP5+WxTb1ZvQAA + + +False +-1.5707963267949 +15 +ByfvBxwbrkGP5+WxTb1ZvQAA + + +False +-0.523598775598299 +30 +epHead +n6mfTSaq+k2RnTd3faTkxQAA + + +False +0.523598775598299 +30 +epTail ++Ekcl1W/rkuftPam8GOdiQAA + + +False +0.523598775598299 +25 +epHead +n6mfTSaq+k2RnTd3faTkxQAA + + +False +-0.523598775598299 +25 +epTail ++Ekcl1W/rkuftPam8GOdiQAA + + +False +-0.785398163397448 +40 +epHead +n6mfTSaq+k2RnTd3faTkxQAA + + +False +0.785398163397448 +40 +epTail ++Ekcl1W/rkuftPam8GOdiQAA + + +False +-1000 +-1000 +50 +8 +n6mfTSaq+k2RnTd3faTkxQAA + + +False +-1000 +-1000 +50 +8 ++Ekcl1W/rkuftPam8GOdiQAA + + + +clMaroon +$00B9FFFF +471,338;627,211 +plxmjyQkfUmt2P8uBP0I6AAA +6WD/injqLkGLLLrBFiLSOQAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +plxmjyQkfUmt2P8uBP0I6AAA + + +False +1.5707963267949 +30 +plxmjyQkfUmt2P8uBP0I6AAA + + +False +-1.5707963267949 +15 +plxmjyQkfUmt2P8uBP0I6AAA + + +False +-0.523598775598299 +30 +epHead +TdvnjlqSk0mqUzoHhiVfUAAA + + +False +0.523598775598299 +30 +epTail +2nuMoO9sH06KowfPyWX8XwAA + + +False +0.523598775598299 +25 +epHead +TdvnjlqSk0mqUzoHhiVfUAAA + + +False +-0.523598775598299 +25 +epTail +2nuMoO9sH06KowfPyWX8XwAA + + +False +-0.785398163397448 +40 +epHead +TdvnjlqSk0mqUzoHhiVfUAAA + + +False +0.785398163397448 +40 +epTail +2nuMoO9sH06KowfPyWX8XwAA + + +False +-1000 +-1000 +50 +8 +TdvnjlqSk0mqUzoHhiVfUAAA + + +False +-1000 +-1000 +50 +8 +2nuMoO9sH06KowfPyWX8XwAA + + + +clMaroon +$00B9FFFF +596,172;532,188;420,242 +PG5XF/RdmEuhi42wm0MztgAA +mGag8uVpX0+zFhYfpZD08wAA +6X0FK2w+kUGeRH2fHqoCSwAA + +False +1.5707963267949 +15 +PG5XF/RdmEuhi42wm0MztgAA + + +False +1.5707963267949 +30 +PG5XF/RdmEuhi42wm0MztgAA + + +False +-1.5707963267949 +15 +PG5XF/RdmEuhi42wm0MztgAA + + +False +-0.523598775598299 +30 +epHead +v3GPPcr2HE2FA9MsBQRCJAAA + + +False +0.523598775598299 +30 +epTail +7yl9aNzP9UWJYqcoZ5ct1gAA + + +False +0.523598775598299 +25 +epHead +v3GPPcr2HE2FA9MsBQRCJAAA + + +False +-0.523598775598299 +25 +epTail +7yl9aNzP9UWJYqcoZ5ct1gAA + + +False +-0.785398163397448 +40 +epHead +v3GPPcr2HE2FA9MsBQRCJAAA + + +False +0.785398163397448 +40 +epTail +7yl9aNzP9UWJYqcoZ5ct1gAA + + +False +-1000 +-1000 +50 +8 +v3GPPcr2HE2FA9MsBQRCJAAA + + +False +-1000 +-1000 +50 +8 +7yl9aNzP9UWJYqcoZ5ct1gAA + + + +clMaroon +$00B9FFFF +604,135;516,164;409,242 +iEqKHNrjWEaqo2MpcoTeAQAA +mGag8uVpX0+zFhYfpZD08wAA +CVNk+aZ2kUS/be+Nv1opngAA + +False +1.5707963267949 +15 +iEqKHNrjWEaqo2MpcoTeAQAA + + +False +1.5707963267949 +30 +iEqKHNrjWEaqo2MpcoTeAQAA + + +False +-1.5707963267949 +15 +iEqKHNrjWEaqo2MpcoTeAQAA + + +False +-0.523598775598299 +30 +epHead +8ERRXx11LUue4tf/9sRJGwAA + + +False +0.523598775598299 +30 +epTail +oZNlQDVXUEObs3iZw4x9YgAA + + +False +0.523598775598299 +25 +epHead +8ERRXx11LUue4tf/9sRJGwAA + + +False +-0.523598775598299 +25 +epTail +oZNlQDVXUEObs3iZw4x9YgAA + + +False +-0.785398163397448 +40 +epHead +8ERRXx11LUue4tf/9sRJGwAA + + +False +0.785398163397448 +40 +epTail +oZNlQDVXUEObs3iZw4x9YgAA + + +False +-1000 +-1000 +50 +8 +8ERRXx11LUue4tf/9sRJGwAA + + +False +-1000 +-1000 +50 +8 +oZNlQDVXUEObs3iZw4x9YgAA + + + +clMaroon +$00B9FFFF +612,91;488,144;402,242 +vqzVjlQpAEeeuOH/0tJhSAAA +mGag8uVpX0+zFhYfpZD08wAA +vza3XuXwdUy+RCEd4a7/AAAA + +False +1.5707963267949 +15 +vqzVjlQpAEeeuOH/0tJhSAAA + + +False +1.5707963267949 +30 +vqzVjlQpAEeeuOH/0tJhSAAA + + +False +-1.5707963267949 +15 +vqzVjlQpAEeeuOH/0tJhSAAA + + +False +-0.523598775598299 +30 +epHead +lWAMkSVvoUOg4oaaawtIxgAA + + +False +0.523598775598299 +30 +epTail +OAiy1ef+XUG7aqN4fnwIDQAA + + +False +0.523598775598299 +25 +epHead +lWAMkSVvoUOg4oaaawtIxgAA + + +False +-0.523598775598299 +25 +epTail +OAiy1ef+XUG7aqN4fnwIDQAA + + +False +-0.785398163397448 +40 +epHead +lWAMkSVvoUOg4oaaawtIxgAA + + +False +0.785398163397448 +40 +epTail +OAiy1ef+XUG7aqN4fnwIDQAA + + +False +-1000 +-1000 +50 +8 +lWAMkSVvoUOg4oaaawtIxgAA + + +False +-1000 +-1000 +50 +8 +OAiy1ef+XUG7aqN4fnwIDQAA + + + +clMaroon +$00B9FFFF +615,47;456,128;397,242 +/EsTz8Iu7ECqGh594+MkSQAA +mGag8uVpX0+zFhYfpZD08wAA +Sl7WaLUfCE+IreEUylmhuQAA + +False +1.5707963267949 +15 +/EsTz8Iu7ECqGh594+MkSQAA + + +False +1.5707963267949 +30 +/EsTz8Iu7ECqGh594+MkSQAA + + +False +-1.5707963267949 +15 +/EsTz8Iu7ECqGh594+MkSQAA + + +False +-0.523598775598299 +30 +epHead +gm2xbeKGuUu+OipRQpK+OQAA + + +False +0.523598775598299 +30 +epTail +TTMaOnOcrUGQ/DPwfi1ITwAA + + +False +0.523598775598299 +25 +epHead +gm2xbeKGuUu+OipRQpK+OQAA + + +False +-0.523598775598299 +25 +epTail +TTMaOnOcrUGQ/DPwfi1ITwAA + + +False +-0.785398163397448 +40 +epHead +gm2xbeKGuUu+OipRQpK+OQAA + + +False +0.785398163397448 +40 +epTail +TTMaOnOcrUGQ/DPwfi1ITwAA + + +False +-1000 +-1000 +50 +8 +gm2xbeKGuUu+OipRQpK+OQAA + + +False +-1000 +-1000 +50 +8 +TTMaOnOcrUGQ/DPwfi1ITwAA + + + +clMaroon +$00B9FFFF +12 +328 +76 +78 +MLBX+NGx9kymQ76b9EAKuwAA + + +1 +tech-leader + + +False + + +False + + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + + +clMaroon +$00B9FFFF +50,313;50,328 +WE9oOq/kF0adq9jjlgnt+QAA +zxkaRnUQnkGeblZpKwGHRgAA +oUU7LbB8z06lO7+JvHxYawAA + +False +1.5707963267949 +15 +WE9oOq/kF0adq9jjlgnt+QAA + + +False +1.5707963267949 +30 +WE9oOq/kF0adq9jjlgnt+QAA + + +False +-1.5707963267949 +15 +WE9oOq/kF0adq9jjlgnt+QAA + + +False +-0.523598775598299 +30 +epHead +VpLHTBYio0+yCxvIWp4QywAA + + +False +0.523598775598299 +30 +epTail +6sfC0Hl2I0uatFIXeo2nzwAA + + +False +0.523598775598299 +25 +epHead +VpLHTBYio0+yCxvIWp4QywAA + + +False +-0.523598775598299 +25 +epTail +6sfC0Hl2I0uatFIXeo2nzwAA + + +False +-0.785398163397448 +40 +epHead +VpLHTBYio0+yCxvIWp4QywAA + + +False +0.785398163397448 +40 +epTail +6sfC0Hl2I0uatFIXeo2nzwAA + + +False +-1000 +-1000 +50 +8 +VpLHTBYio0+yCxvIWp4QywAA + + +False +-1000 +-1000 +50 +8 +6sfC0Hl2I0uatFIXeo2nzwAA + + + + + +compact-analysis-design-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +82mxJtBoS0iD7vWybIrikwAA +31 + +clMaroon +$00BCBEFC +196 +260 +134 +30 +function-feature-list-file + + + +clMaroon +$00B9FFFF +40 +277 +152 +32 +TMPdkgNID0u772le0sCmLgAA + + +1 +new-ideas-action + + +False + + +False + + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + + +clMaroon +$00B9FFFF +20 +376 +175 +32 +Kh+ykp9GgU6PQXUx+CGLxgAA + + +1 +new-demond-action + + +False + + +False + + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + + +clMaroon +$00B9FFFF +272 +329 +188 +32 +06qF2g1ff02RsBbBfLLo1gAA + + +1 +feature-analysis-task + + +False + + +False + + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + + +clMaroon +$00BCBEFC +52 +328 +123 +30 +note record in tagdoc + + + +clMaroon +$00B9FFFF +114,328;115,308 +iyiy7059g0u9oLbvhyWMJwAA +nq2K2eTwOUCNMF6eKE4KDQAA + + +clMaroon +$00B9FFFF +109,376;111,357 +nq2K2eTwOUCNMF6eKE4KDQAA +o5iA92FZHkuxkU8FJDrcDwAA + + +clMaroon +$00B9FFFF +272,343;174,342 +nq2K2eTwOUCNMF6eKE4KDQAA +7jqlLyDAzESQnbx/rHQ2dgAA + + +clMaroon +$00B9FFFF +191,308;292,329 +ZE6XGr3H4E+M1Lu1nRZ9BQAA +7jqlLyDAzESQnbx/rHQ2dgAA +iyiy7059g0u9oLbvhyWMJwAA + +1.5707963267949 +15 +trimple-catagory +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +1.5707963267949 +30 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-1.5707963267949 +15 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-0.523598775598299 +30 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.523598775598299 +30 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +0.523598775598299 +25 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +-0.523598775598299 +25 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-0.785398163397448 +40 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.785398163397448 +40 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-1244 +-964 +50 +8 +irMBt7uWtEaxRopZEBcfwgAA + + +False +-1244 +-964 +50 +8 +eu/8Siwir02KNGkRDOEa9gAA + + + +clMaroon +$00B9FFFF +189,376;277,360 +li4LwavBrE+pggONaW7QkwAA +7jqlLyDAzESQnbx/rHQ2dgAA +o5iA92FZHkuxkU8FJDrcDwAA + +1.5707963267949 +15 +trimple-catagory +li4LwavBrE+pggONaW7QkwAA + + +False +1.5707963267949 +30 +li4LwavBrE+pggONaW7QkwAA + + +False +-1.5707963267949 +15 +li4LwavBrE+pggONaW7QkwAA + + +False +-0.523598775598299 +30 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.523598775598299 +30 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +0.523598775598299 +25 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-0.523598775598299 +25 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-0.785398163397448 +40 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.785398163397448 +40 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-1188 +-964 +50 +8 +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-1188 +-964 +50 +8 +gehfWFMIjEKeVzAcdHneqgAA + + + +clMaroon +$00B9FFFF +284,289;343,329 +7jqlLyDAzESQnbx/rHQ2dgAA +njRTD7ql6UCc1F0jjK/nOwAA + + +clMaroon +$00BCBEFC +340 +132 +152 +38 +function-module-list-file +class-diagram + + + +clMaroon +$00FF80FF +312 +380 +121 +32 +mx6wTw6+KEuGtAr0iRUXJwAA + + +1 +analysis-task + + +False + + +False + + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + + +clMaroon +$00B9FFFF +508 +205 +114 +32 +a7yZcyAyl02YNl0/FQziyQAA + + +1 +layer-design + + +False + + +False + + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + + +clMaroon +$00BCBEFC +548 +132 +171 +38 +function-module-struct-diagram +architech-diagram + + + +clMaroon +$00B9FFFF +614,169;579,205 +gwBYAnNeEk2uCxTsZUvhjAAA +m651NpyIZEyDLHqpx98poQAA + + +clMaroon +$00BCBEFC +536 +300 +132 +113 +classic-feature-list +cmd-args-design +running-param-design +.lex/.gmr/.type/.ui +time-sequence-diagram +E-R-diagram +sql-tbl + + + +clMaroon +$00B9FFFF +280 +205 +175 +32 +tnTkvoZxVkmVjIgd8K6VcwAA + + +1 +module-design-task + + +False + + +False + + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + + +clMaroon +$00B9FFFF +402,169;377,205 +BghWDCz5OkKF8K6lTv+jGQAA +LwUxcozs1UOu4jaFLiFsSQAA + + +clMaroon +$00B9FFFF +454,220;508,220 +l+7wPt1sHES9zLE77waRvAAA +gwBYAnNeEk2uCxTsZUvhjAAA +BghWDCz5OkKF8K6lTv+jGQAA + +1.5707963267949 +15 +category +l+7wPt1sHES9zLE77waRvAAA + + +False +1.5707963267949 +30 +l+7wPt1sHES9zLE77waRvAAA + + +False +-1.5707963267949 +15 +l+7wPt1sHES9zLE77waRvAAA + + +False +-0.523598775598299 +30 +epHead +iUFGIr8VC0SljnWHghKcFAAA + + +False +0.523598775598299 +30 +epTail +DF7gLd86sEO0pjZnITQi5QAA + + +False +0.523598775598299 +25 +epHead +iUFGIr8VC0SljnWHghKcFAAA + + +False +-0.523598775598299 +25 +epTail +DF7gLd86sEO0pjZnITQi5QAA + + +False +-0.785398163397448 +40 +epHead +iUFGIr8VC0SljnWHghKcFAAA + + +False +0.785398163397448 +40 +epTail +DF7gLd86sEO0pjZnITQi5QAA + + +False +-1056 +-968 +50 +8 +iUFGIr8VC0SljnWHghKcFAAA + + +False +-1056 +-968 +50 +8 +DF7gLd86sEO0pjZnITQi5QAA + + + +clMaroon +$00B9FFFF +384 +256 +229 +32 +hi9GvwnwFkKy8F8f44i8mgAA + + +1 +classic-app-feature-design + + +False + + +False + + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + + +clMaroon +$00B9FFFF +536,302;518,287 +5o0i3tmiW0+wft5WJgf5swAA +tOec8LvaOEuTNI/k5kwMrwAA + + +clMaroon +$00B9FFFF +365,329;367,236 +Fcx+CoxfEEarzL288+IirQAA +BghWDCz5OkKF8K6lTv+jGQAA +7jqlLyDAzESQnbx/rHQ2dgAA + +1.5707963267949 +15 +design +Fcx+CoxfEEarzL288+IirQAA + + +False +1.5707963267949 +30 +Fcx+CoxfEEarzL288+IirQAA + + +False +-1.5707963267949 +15 +Fcx+CoxfEEarzL288+IirQAA + + +False +-0.523598775598299 +30 +epHead +sYEr8xJzY0uFxXGAJQj62QAA + + +False +0.523598775598299 +30 +epTail +NYZAYRfo+EqcnxFwEX16dAAA + + +False +0.523598775598299 +25 +epHead +sYEr8xJzY0uFxXGAJQj62QAA + + +False +-0.523598775598299 +25 +epTail +NYZAYRfo+EqcnxFwEX16dAAA + + +False +-0.785398163397448 +40 +epHead +sYEr8xJzY0uFxXGAJQj62QAA + + +False +0.785398163397448 +40 +epTail +NYZAYRfo+EqcnxFwEX16dAAA + + +False +-1000 +-1000 +50 +8 +sYEr8xJzY0uFxXGAJQj62QAA + + +False +-1000 +-1000 +50 +8 +NYZAYRfo+EqcnxFwEX16dAAA + + + +clMaroon +$00B9FFFF +408,236;459,256 +CcwrYONHfkWTOXKrfeQn0wAA +5o0i3tmiW0+wft5WJgf5swAA +BghWDCz5OkKF8K6lTv+jGQAA + +False +1.5707963267949 +15 +CcwrYONHfkWTOXKrfeQn0wAA + + +False +1.5707963267949 +30 +CcwrYONHfkWTOXKrfeQn0wAA + + +False +-1.5707963267949 +15 +CcwrYONHfkWTOXKrfeQn0wAA + + +False +-0.523598775598299 +30 +epHead +0IK4qX1pZ0mmy0tW1H9wYwAA + + +False +0.523598775598299 +30 +epTail +5rkAHpBOt0OZxpkOhYsRfQAA + + +False +0.523598775598299 +25 +epHead +0IK4qX1pZ0mmy0tW1H9wYwAA + + +False +-0.523598775598299 +25 +epTail +5rkAHpBOt0OZxpkOhYsRfQAA + + +False +-0.785398163397448 +40 +epHead +0IK4qX1pZ0mmy0tW1H9wYwAA + + +False +0.785398163397448 +40 +epTail +5rkAHpBOt0OZxpkOhYsRfQAA + + +False +-1000 +-1000 +50 +8 +0IK4qX1pZ0mmy0tW1H9wYwAA + + +False +-1000 +-1000 +50 +8 +5rkAHpBOt0OZxpkOhYsRfQAA + + + +clMaroon +$00B9FFFF +636 +233 +108 +32 +2LU3javC70yzEUTHd0L+VAAA + + +1 +end-of-proc + + +False + + +False + + + +False +2LU3javC70yzEUTHd0L+VAAA + + +False +2LU3javC70yzEUTHd0L+VAAA + + +False +2LU3javC70yzEUTHd0L+VAAA + + + +clMaroon +$00B9FFFF +612,257;636,254 +D/6a5FDvaU2giul+pputrgAA +E3qklen4DEiMkHMgk5C+JQAA +5o0i3tmiW0+wft5WJgf5swAA + +False +1.5707963267949 +15 +D/6a5FDvaU2giul+pputrgAA + + +False +1.5707963267949 +30 +D/6a5FDvaU2giul+pputrgAA + + +False +-1.5707963267949 +15 +D/6a5FDvaU2giul+pputrgAA + + +False +-0.523598775598299 +30 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +0.523598775598299 +30 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +0.523598775598299 +25 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +-0.523598775598299 +25 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +-0.785398163397448 +40 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +0.785398163397448 +40 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +-1000 +-1000 +50 +8 +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +-1000 +-1000 +50 +8 +fj2tpTa4tk+iVJg+TnTWUwAA + + + +clMaroon +$00B9FFFF +621,233;636,236 +YHQtCOYCXU6JlB3IIm7OuQAA +E3qklen4DEiMkHMgk5C+JQAA +gwBYAnNeEk2uCxTsZUvhjAAA + +False +1.5707963267949 +15 +YHQtCOYCXU6JlB3IIm7OuQAA + + +False +1.5707963267949 +30 +YHQtCOYCXU6JlB3IIm7OuQAA + + +False +-1.5707963267949 +15 +YHQtCOYCXU6JlB3IIm7OuQAA + + +False +-0.523598775598299 +30 +epHead +e/jJUmPBsUuFL+zaG4xKZgAA + + +False +0.523598775598299 +30 +epTail +L2yiBfWQi0CXNccTHoAyQQAA + + +False +0.523598775598299 +25 +epHead +e/jJUmPBsUuFL+zaG4xKZgAA + + +False +-0.523598775598299 +25 +epTail +L2yiBfWQi0CXNccTHoAyQQAA + + +False +-0.785398163397448 +40 +epHead +e/jJUmPBsUuFL+zaG4xKZgAA + + +False +0.785398163397448 +40 +epTail +L2yiBfWQi0CXNccTHoAyQQAA + + +False +-1000 +-1000 +50 +8 +e/jJUmPBsUuFL+zaG4xKZgAA + + +False +-1000 +-1000 +50 +8 +L2yiBfWQi0CXNccTHoAyQQAA + + + +clMaroon +$00B9FFFF +336,236;289,260 +njRTD7ql6UCc1F0jjK/nOwAA +BghWDCz5OkKF8K6lTv+jGQAA + + +clMaroon +$00B9FFFF +532,205;455,169 +LwUxcozs1UOu4jaFLiFsSQAA +gwBYAnNeEk2uCxTsZUvhjAAA + + +clMaroon +$00B9FFFF +370,380;367,360 +dOqivJTIIUigVVTdSjV6NQAA +7jqlLyDAzESQnbx/rHQ2dgAA +eow26LjeFU6GRSdSgeT85AAA + +False +1.5707963267949 +15 +dOqivJTIIUigVVTdSjV6NQAA + + +False +1.5707963267949 +30 +dOqivJTIIUigVVTdSjV6NQAA + + +False +-1.5707963267949 +15 +dOqivJTIIUigVVTdSjV6NQAA + + +False +-0.523598775598299 +30 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +0.523598775598299 +30 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +0.523598775598299 +25 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +-0.523598775598299 +25 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +-0.785398163397448 +40 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +0.785398163397448 +40 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +-1000 +-1000 +50 +8 +tj9PxTnKWUOoKg0de6lHnQAA + + +False +-1000 +-1000 +50 +8 +pOTqH/7r40O4aKzqIuqcswAA + + + +clMaroon +$00B9FFFF +384,272;329,273 +njRTD7ql6UCc1F0jjK/nOwAA +5o0i3tmiW0+wft5WJgf5swAA + + + + +analysis-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +TKJqvI0CWUmyoh/jntYGBwAA +73 + +clMaroon +$00B9FFFF +60 +221 +113 +32 +h9lhv0QFq0aFwcWza3gsDAAA + + +1 +list-external + + +False + + +False + + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + + +clMaroon +clYellow +256 +244 +196 +32 +XmSQJXVfo0qkbNCidOBOzwAA + + +1 +actor & action analysis + + +False + + +False + + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + + +clMaroon +$00B9FFFF +200 +172 +144 +32 +kETY7OJYc0qg/QkJQX2LXQAA + + +1 +data-io-analysis + + +False + + +False + + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + + +clMaroon +$00FFFF80 +4 +276 +95 +30 +actor-action-list + + + +clMaroon +$00FFFF80 +76 +142 +87 +30 +physical-io-list + + + +clMaroon +$00B9FFFF +118,171;116,221 +1BA+Xn0RUUm64eTCTOCRugAA +h1gtwyOEbUeBccNY4PTnrQAA + + +clBlue +$00B9FFFF +98,285;256,269 +fdnXBAbHkUmPlMqC0iAwCAAA +jHXkp+eLg0+gvycDjEzupAAA + + +clMaroon +$00B9FFFF +162,165;200,173 +lD0x8R9zUU+Gr16SYaMDDAAA +h1gtwyOEbUeBccNY4PTnrQAA + + +clMaroon +$00B9FFFF +163,221;220,203 +NSCnR/cZlUa3fXcKMhA8sQAA +lD0x8R9zUU+Gr16SYaMDDAAA +1BA+Xn0RUUm64eTCTOCRugAA + +False +1.5707963267949 +15 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +1.5707963267949 +30 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +-1.5707963267949 +15 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +-0.523598775598299 +30 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +0.523598775598299 +30 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +0.523598775598299 +25 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +-0.523598775598299 +25 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +-0.785398163397448 +40 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +0.785398163397448 +40 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +-958 +-1092 +50 +8 +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +-958 +-1092 +50 +8 +HdgD2FmAh06xyFDupk4vagAA + + + +clMaroon +$00B9FFFF +172,241;256,249 +ubIfnYMMgEuGrguT+jcONAAA +fdnXBAbHkUmPlMqC0iAwCAAA +1BA+Xn0RUUm64eTCTOCRugAA + +False +1.5707963267949 +15 +ubIfnYMMgEuGrguT+jcONAAA + + +False +1.5707963267949 +30 +ubIfnYMMgEuGrguT+jcONAAA + + +False +-1.5707963267949 +15 +ubIfnYMMgEuGrguT+jcONAAA + + +False +-0.523598775598299 +30 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +0.523598775598299 +30 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +0.523598775598299 +25 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +-0.523598775598299 +25 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +-0.785398163397448 +40 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +0.785398163397448 +40 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +-958 +-1092 +50 +8 +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +-958 +-1092 +50 +8 +pxqjN0GODE69EvLg0dAl+AAA + + + +clMaroon +$00FFFF80 +204 +90 +108 +30 +data-flow-diagram + + + +clMaroon +$00FFFF80 +444 +332 +154 +38 +action-flow-diagram +invoking-procedure-diagram + + + +clMaroon +$00B9FFFF +260,119;269,172 +lD0x8R9zUU+Gr16SYaMDDAAA +IVt2tjJDzEuz/vWJVDnpEQAA + + +clMaroon +$00B9FFFF +487,332;382,275 +fdnXBAbHkUmPlMqC0iAwCAAA +o8gstZMu+EaxvNdITt/2+AAA + + +clMaroon +$00FFFF80 +256 +348 +121 +23 +top-usecase-diagram + + + +clBlue +$00B9FFFF +320,348;347,275 +fdnXBAbHkUmPlMqC0iAwCAAA +tZ9aM6anSEuS/LhHJ8Er8AAA + + +clMaroon +$00B9FFFF +370 +128 +165 +32 +c4KyOid86k6Bzi+unTPcfAAA + + +1 +generate data-dict + + +False + + +False + + + +False +c4KyOid86k6Bzi+unTPcfAAA + + +False +c4KyOid86k6Bzi+unTPcfAAA + + +False +c4KyOid86k6Bzi+unTPcfAAA + + + +clMaroon +$00FFFF80 +392 +70 +63 +30 +data-dict + + + +clMaroon +$00B9FFFF +445,128;430,99 ++pV2gAzD5k290JEx4IzJcAAA +dun4oB1o7E2GPmOE4gcj2AAA + + +clMaroon +$00B9FFFF +333,172;386,159 +dxugzP0ZBEOdRYlU9N5SDAAA +dun4oB1o7E2GPmOE4gcj2AAA +lD0x8R9zUU+Gr16SYaMDDAAA + +False +1.5707963267949 +15 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +1.5707963267949 +30 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +-1.5707963267949 +15 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +-0.523598775598299 +30 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +0.523598775598299 +30 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +0.523598775598299 +25 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +-0.523598775598299 +25 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +-0.785398163397448 +40 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +0.785398163397448 +40 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +-958 +-1092 +50 +8 +/vsJW8WzsU++6Lul86APuQAA + + +False +-958 +-1092 +50 +8 +z475GIA9kECnM3EOwAHh6QAA + + + +clMaroon +$00B9FFFF +504 +70 +178 +32 +8E86OOxmt0eTCKMQNrubWAAA + + +1 +data-entity-analysis + + +False + + +False + + + +False +8E86OOxmt0eTCKMQNrubWAAA + + +False +8E86OOxmt0eTCKMQNrubWAAA + + +False +8E86OOxmt0eTCKMQNrubWAAA + + + +clMaroon +$00B9FFFF +488,128;553,101 +TfaTWdzXx0eF98RMZF5U/AAA +VJbVUyCxs0u+Lgy9ekB9lQAA +dun4oB1o7E2GPmOE4gcj2AAA + +False +1.5707963267949 +15 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +1.5707963267949 +30 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +-1.5707963267949 +15 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +-0.523598775598299 +30 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +0.523598775598299 +30 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +0.523598775598299 +25 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +-0.523598775598299 +25 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +-0.785398163397448 +40 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +0.785398163397448 +40 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +-958 +-1092 +50 +8 +FR6YZrNJHkeksGzXICrvngAA + + +False +-958 +-1092 +50 +8 +ApKyMGFOCkStssh0gwBpKAAA + + + +clMaroon +$00B9FFFF +504,84;454,84 ++pV2gAzD5k290JEx4IzJcAAA +VJbVUyCxs0u+Lgy9ekB9lQAA + + +clMaroon +$00FFFF80 +696 +68 +96 +38 +ER-diagram +data-file-format + + + +clMaroon +$00B9FFFF +696,86;681,86 +VJbVUyCxs0u+Lgy9ekB9lQAA +WWY3RCgVKEyMXKhU6sBafwAA + + +clMaroon +clYellow +428 +182 +175 +32 +tnTkvoZxVkmVjIgd8K6VcwAA + + +1 +module-design-task + + +False + + +False + + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + + +clMaroon +$00B9FFFF +343,190;428,193 +BNlaobUxlkaxprXRzDMgIwAA +/UwMH6vM3kKzkuL76KD36AAA +lD0x8R9zUU+Gr16SYaMDDAAA + +False +1.5707963267949 +15 +BNlaobUxlkaxprXRzDMgIwAA + + +False +1.5707963267949 +30 +BNlaobUxlkaxprXRzDMgIwAA + + +False +-1.5707963267949 +15 +BNlaobUxlkaxprXRzDMgIwAA + + +False +-0.523598775598299 +30 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +0.523598775598299 +30 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +0.523598775598299 +25 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +-0.523598775598299 +25 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +-0.785398163397448 +40 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +0.785398163397448 +40 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +-958 +-1092 +50 +8 +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +-958 +-1092 +50 +8 +UtVAs5JBSkKc0jSVdLpypQAA + + + +clMaroon +$00B9FFFF +392,244;473,213 +t3VIg1cXJEmsTGdIYQFIcwAA +/UwMH6vM3kKzkuL76KD36AAA +fdnXBAbHkUmPlMqC0iAwCAAA + +False +1.5707963267949 +15 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +1.5707963267949 +30 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +-1.5707963267949 +15 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +-0.523598775598299 +30 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +0.523598775598299 +30 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +0.523598775598299 +25 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +-0.523598775598299 +25 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +-0.785398163397448 +40 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +0.785398163397448 +40 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +-958 +-1092 +50 +8 +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +-958 +-1092 +50 +8 +IuqkqTOhTEuBUbn2uLNuqAAA + + + +clMaroon +$00FFFF80 +682 +248 +85 +53 +build-dest +install-pkg-list +src-pkg + + + +clMaroon +$00EAEA00 +524 +232 +152 +38 +function-module-list-file +class-diagram + + + +clMaroon +$00B9FFFF +570,232;540,213 +/UwMH6vM3kKzkuL76KD36AAA +stxtQ4b9QEC3ZMO0j91+GAAA + + +clMaroon +$00B9FFFF +377,128;311,115 +IVt2tjJDzEuz/vWJVDnpEQAA +dun4oB1o7E2GPmOE4gcj2AAA + + +clMaroon +$00EAEA00 +528 +292 +135 +30 +top-level-module-list-file + + + +clMaroon +$00B9FFFF +606 +336 +162 +32 +EjjnPhUmf02yFIvhJmdcmQAA + + +1 +pkg-dest category + + +False + + +False + + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + + +clMaroon +$00B9FFFF +693,336;711,300 +tuK8HBQysUWa6342kavm+gAA +9pbwNzO7hUyC11S5a9Hn1gAA + + +clMaroon +$00B9FFFF +625,321;655,336 +9pbwNzO7hUyC11S5a9Hn1gAA +EXFA5Cr3i0S0CjlpdMlBDgAA + + +clMaroon +$00B9FFFF +516,213;519,332 +o8gstZMu+EaxvNdITt/2+AAA +/UwMH6vM3kKzkuL76KD36AAA + + +clMaroon +$00B9FFFF +626 +184 +114 +32 +a7yZcyAyl02YNl0/FQziyQAA + + +1 +layer-design + + +False + + +False + + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + + +clMaroon +$00FFFF80 +606 +126 +171 +38 +function-module-struct-diagram +architech-diagram + + + +clMaroon +$00B9FFFF +688,163;684,184 +cnN0HexzX0WKGgNpVfpw2gAA +24B4XL60XEOLWuEJN79LNQAA + + +clMaroon +$00B9FFFF +602,198;626,198 +xMoCRZ0FD0mJscRNN+UpywAA +cnN0HexzX0WKGgNpVfpw2gAA +/UwMH6vM3kKzkuL76KD36AAA + +False +1.5707963267949 +15 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +1.5707963267949 +30 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +-1.5707963267949 +15 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +-0.523598775598299 +30 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +0.523598775598299 +30 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +0.523598775598299 +25 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +-0.523598775598299 +25 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +-0.785398163397448 +40 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +0.785398163397448 +40 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +-958 +-1092 +50 +8 +FVDBPeq7mEKlp1go7V1hsgAA + + +False +-958 +-1092 +50 +8 +6MJU+jYHa0mx8HaVM4S+8QAA + + + +clMaroon +$00EAEA00 +116 +340 +134 +30 +function-feature-list-file + + + +clMaroon +$00FF80FF +228 +380 +152 +32 +TMPdkgNID0u772le0sCmLgAA + + +1 +new-ideas-action + + +False + + +False + + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + + +clMaroon +$00FF80FF +216 +472 +175 +32 +Kh+ykp9GgU6PQXUx+CGLxgAA + + +1 +new-demond-action + + +False + + +False + + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + + +clMaroon +$00B9FFFF +8 +419 +188 +32 +06qF2g1ff02RsBbBfLLo1gAA + + +1 +feature-analysis-task + + +False + + +False + + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + + +clMaroon +$00FFFF80 +240 +426 +123 +30 +note record in tagdoc + + + +clMaroon +$00B9FFFF +302,426;302,411 +yubkqivm4UyQY4rz+UzVhwAA +2x5jLOE4SECwK7+07XFOYgAA + + +clMaroon +$00B9FFFF +302,472;301,455 +2x5jLOE4SECwK7+07XFOYgAA +u0BNgriFLkW8D2ch2mkMLwAA + + +clMaroon +$00B9FFFF +195,437;240,438 +2x5jLOE4SECwK7+07XFOYgAA +8trqinRilUOT7pAQsxAfFQAA + + +clMaroon +$00B9FFFF +228,409;177,419 +ZE6XGr3H4E+M1Lu1nRZ9BQAA +8trqinRilUOT7pAQsxAfFQAA +yubkqivm4UyQY4rz+UzVhwAA + +1.5707963267949 +15 +trimple-catagory +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +1.5707963267949 +30 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-1.5707963267949 +15 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-0.523598775598299 +30 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.523598775598299 +30 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +0.523598775598299 +25 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +-0.523598775598299 +25 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-0.785398163397448 +40 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.785398163397448 +40 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-1518 +-884 +50 +8 +irMBt7uWtEaxRopZEBcfwgAA + + +False +-1518 +-884 +50 +8 +eu/8Siwir02KNGkRDOEa9gAA + + + +clMaroon +$00B9FFFF +246,472;162,450 +li4LwavBrE+pggONaW7QkwAA +8trqinRilUOT7pAQsxAfFQAA +u0BNgriFLkW8D2ch2mkMLwAA + +1.5707963267949 +15 +trimple-catagory +li4LwavBrE+pggONaW7QkwAA + + +False +1.5707963267949 +30 +li4LwavBrE+pggONaW7QkwAA + + +False +-1.5707963267949 +15 +li4LwavBrE+pggONaW7QkwAA + + +False +-0.523598775598299 +30 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.523598775598299 +30 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +0.523598775598299 +25 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-0.523598775598299 +25 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-0.785398163397448 +40 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.785398163397448 +40 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-1462 +-884 +50 +8 +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-1462 +-884 +50 +8 +gehfWFMIjEKeVzAcdHneqgAA + + + +clMaroon +$00B9FFFF +167,369;116,419 +8trqinRilUOT7pAQsxAfFQAA +tD2TJMzZuUamXRz9MXpsGgAA + + +clMaroon +$00FF80FF +48 +470 +121 +32 +mx6wTw6+KEuGtAr0iRUXJwAA + + +1 +analysis-task + + +False + + +False + + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + + +clMaroon +$00FFFF80 +400 +420 +132 +113 +classic-feature-list +cmd-args-design +running-param-design +.lex/.gmr/.type/.ui +time-sequence-diagram +E-R-diagram +sql-tbl + + + +clMaroon +$00B9FFFF +552 +388 +229 +32 +hi9GvwnwFkKy8F8f44i8mgAA + + +1 +classic-app-feature-design + + +False + + +False + + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + + +clMaroon +$00B9FFFF +531,452;622,419 +01HabwybsEaAlwmb1OptXgAA +w94pSqv/oES2twsIdN9QSQAA + + +clMaroon +$00FF80FF +668 +488 +108 +32 +2LU3javC70yzEUTHd0L+VAAA + + +1 +end-of-proc + + +False + + +False + + + +False +2LU3javC70yzEUTHd0L+VAAA + + +False +2LU3javC70yzEUTHd0L+VAAA + + +False +2LU3javC70yzEUTHd0L+VAAA + + + +clMaroon +$00B9FFFF +675,419;713,488 +D/6a5FDvaU2giul+pputrgAA +7yHMpOEN0EiC2uZBihzZkQAA +01HabwybsEaAlwmb1OptXgAA + +False +1.5707963267949 +15 +D/6a5FDvaU2giul+pputrgAA + + +False +1.5707963267949 +30 +D/6a5FDvaU2giul+pputrgAA + + +False +-1.5707963267949 +15 +D/6a5FDvaU2giul+pputrgAA + + +False +-0.523598775598299 +30 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +0.523598775598299 +30 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +0.523598775598299 +25 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +-0.523598775598299 +25 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +-0.785398163397448 +40 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +0.785398163397448 +40 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +-682 +-732 +50 +8 +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +-682 +-732 +50 +8 +fj2tpTa4tk+iVJg+TnTWUwAA + + + +clMaroon +$00B9FFFF +106,470;103,450 +dOqivJTIIUigVVTdSjV6NQAA +8trqinRilUOT7pAQsxAfFQAA +X0LJqLv76E+ZXpuLxFOtvwAA + +False +1.5707963267949 +15 +dOqivJTIIUigVVTdSjV6NQAA + + +False +1.5707963267949 +30 +dOqivJTIIUigVVTdSjV6NQAA + + +False +-1.5707963267949 +15 +dOqivJTIIUigVVTdSjV6NQAA + + +False +-0.523598775598299 +30 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +0.523598775598299 +30 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +0.523598775598299 +25 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +-0.523598775598299 +25 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +-0.785398163397448 +40 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +0.785398163397448 +40 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +-1274 +-920 +50 +8 +tj9PxTnKWUOoKg0de6lHnQAA + + +False +-1274 +-920 +50 +8 +pOTqH/7r40O4aKzqIuqcswAA + + + +clMaroon +$00B9FFFF +709,248;691,215 +cnN0HexzX0WKGgNpVfpw2gAA +tuK8HBQysUWa6342kavm+gAA + + +clMaroon +$00B9FFFF +102,419;115,252 +R5itKCcXY0KrRhRkbaji9QAA +1BA+Xn0RUUm64eTCTOCRugAA +8trqinRilUOT7pAQsxAfFQAA + +False +1.5707963267949 +15 +R5itKCcXY0KrRhRkbaji9QAA + + +False +1.5707963267949 +30 +R5itKCcXY0KrRhRkbaji9QAA + + +False +-1.5707963267949 +15 +R5itKCcXY0KrRhRkbaji9QAA + + +False +-0.523598775598299 +30 +epHead +K0nWpIYMbkyuYvBBAUwcaAAA + + +False +0.523598775598299 +30 +epTail +apr06sAa1U2fZat0sCQPpQAA + + +False +0.523598775598299 +25 +epHead +K0nWpIYMbkyuYvBBAUwcaAAA + + +False +-0.523598775598299 +25 +epTail +apr06sAa1U2fZat0sCQPpQAA + + +False +-0.785398163397448 +40 +epHead +K0nWpIYMbkyuYvBBAUwcaAAA + + +False +0.785398163397448 +40 +epTail +apr06sAa1U2fZat0sCQPpQAA + + +False +-992 +-1040 +50 +8 +K0nWpIYMbkyuYvBBAUwcaAAA + + +False +-992 +-1040 +50 +8 +apr06sAa1U2fZat0sCQPpQAA + + + +clMaroon +$00B9FFFF +262,203;189,340 +tD2TJMzZuUamXRz9MXpsGgAA +lD0x8R9zUU+Gr16SYaMDDAAA + + +clBlue +$00B9FFFF +324,275;207,340 +tD2TJMzZuUamXRz9MXpsGgAA +fdnXBAbHkUmPlMqC0iAwCAAA + + +clMaroon +$00FFFF80 +388 +384 +139 +23 +module-usecase-diagram + + + +clMaroon +$00B9FFFF +449,384;365,275 +fdnXBAbHkUmPlMqC0iAwCAAA +rgknhtOlx0SK43f4Gd6p0wAA + + +clMaroon +$00B9FFFF +298,348;142,252 +1BA+Xn0RUUm64eTCTOCRugAA +tZ9aM6anSEuS/LhHJ8Er8AAA + + +clMaroon +$00B9FFFF +97,252;68,276 +jHXkp+eLg0+gvycDjEzupAAA +1BA+Xn0RUUm64eTCTOCRugAA + + +clMaroon +$00B9FFFF +510,213;488,292;249,340 +tD2TJMzZuUamXRz9MXpsGgAA +/UwMH6vM3kKzkuL76KD36AAA + + +clMaroon +$00B9FFFF +656,215;628,232 +stxtQ4b9QEC3ZMO0j91+GAAA +cnN0HexzX0WKGgNpVfpw2gAA + + +clMaroon +$00EAEA00 +544 +456 +134 +30 +function-feature-list-file + + + +clMaroon +$00B9FFFF +653,419;622,456 +EhkwLjJjd0u6pWqgLOaY0gAA +01HabwybsEaAlwmb1OptXgAA + + +clMaroon +$00B9FFFF +767,352;788,352;788,448;739,488 +wGKQiVXBLE+NlgisexkoeQAA +7yHMpOEN0EiC2uZBihzZkQAA +9pbwNzO7hUyC11S5a9Hn1gAA + +False +1.5707963267949 +15 +wGKQiVXBLE+NlgisexkoeQAA + + +False +1.5707963267949 +30 +wGKQiVXBLE+NlgisexkoeQAA + + +False +-1.5707963267949 +15 +wGKQiVXBLE+NlgisexkoeQAA + + +False +-0.523598775598299 +30 +epHead +nveEivVzpUOmQHaQgBzwHgAA + + +False +0.523598775598299 +30 +epTail +8/RYS0HDWka/NEMRgtUecgAA + + +False +0.523598775598299 +25 +epHead +nveEivVzpUOmQHaQgBzwHgAA + + +False +-0.523598775598299 +25 +epTail +8/RYS0HDWka/NEMRgtUecgAA + + +False +-0.785398163397448 +40 +epHead +nveEivVzpUOmQHaQgBzwHgAA + + +False +0.785398163397448 +40 +epTail +8/RYS0HDWka/NEMRgtUecgAA + + +False +-1000 +-1000 +50 +8 +nveEivVzpUOmQHaQgBzwHgAA + + +False +-1000 +-1000 +50 +8 +8/RYS0HDWka/NEMRgtUecgAA + + + +clMaroon +$00B9FFFF +739,199;804,200;804,464;753,488 ++UTsgf65KEqv4PlEE9eDUwAA +7yHMpOEN0EiC2uZBihzZkQAA +cnN0HexzX0WKGgNpVfpw2gAA + +False +1.5707963267949 +15 ++UTsgf65KEqv4PlEE9eDUwAA + + +False +1.5707963267949 +30 ++UTsgf65KEqv4PlEE9eDUwAA + + +False +-1.5707963267949 +15 ++UTsgf65KEqv4PlEE9eDUwAA + + +False +-0.523598775598299 +30 +epHead +3okeT8etnkmVfryHL+rOcQAA + + +False +0.523598775598299 +30 +epTail +Emmft/ih+ESwNLfwOBP+ogAA + + +False +0.523598775598299 +25 +epHead +3okeT8etnkmVfryHL+rOcQAA + + +False +-0.523598775598299 +25 +epTail +Emmft/ih+ESwNLfwOBP+ogAA + + +False +-0.785398163397448 +40 +epHead +3okeT8etnkmVfryHL+rOcQAA + + +False +0.785398163397448 +40 +epTail +Emmft/ih+ESwNLfwOBP+ogAA + + +False +-1000 +-1000 +50 +8 +3okeT8etnkmVfryHL+rOcQAA + + +False +-1000 +-1000 +50 +8 +Emmft/ih+ESwNLfwOBP+ogAA + + + + + +develop-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +xVwuXCiSU0OjjNx3L+iLBgAA +18 + +clMaroon +62 +18 +477 +449 +System + + +clMaroon +$00B9FFFF +126 +230 +104 +30 +test-code for unit + + + +clMaroon +$00B9FFFF +90 +274 +144 +30 +testing-code for integrate + + + +clMaroon +$00B9FFFF +98 +318 +125 +30 +testing-code for using + + + +clMaroon +$00B9FFFF +318 +179 +135 +32 +CLf6+wSJ/U+4iSwM7QoY3wAA + + +1 +design-to-code + + +False + + +False + + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + + +clMaroon +$00B9FFFF +402 +290 +104 +32 +gJ7o4uiAMEqSPUL3dadz2wAA + + +1 +unit-coding + + +False + + +False + + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + + +clMaroon +$00B9FFFF +334 +359 +108 +32 +wftqTlAvI0+cR9j69saRNQAA + + +1 +unit-testing + + +False + + +False + + + +False +wftqTlAvI0+cR9j69saRNQAA + + +False +wftqTlAvI0+cR9j69saRNQAA + + +False +wftqTlAvI0+cR9j69saRNQAA + + + +clMaroon +$00B9FFFF +318 +410 +152 +32 +qlZGCifQOEyQyqBzIH1x/AAA + + +1 +integrate-testing + + +False + + +False + + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + + +clMaroon +$00B9FFFF +385,210;385,239 +k48n8C/dEECUhVTIv9BoGQAA +iZbm2TAx1keNx/mPHzSEmgAA +XsyNCerqHEuJZ3n6KxffswAA + +False +1.5707963267949 +15 +k48n8C/dEECUhVTIv9BoGQAA + + +False +1.5707963267949 +30 +k48n8C/dEECUhVTIv9BoGQAA + + +False +-1.5707963267949 +15 +k48n8C/dEECUhVTIv9BoGQAA + + +False +-0.523598775598299 +30 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +0.523598775598299 +30 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +0.523598775598299 +25 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +-0.523598775598299 +25 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +-0.785398163397448 +40 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +0.785398163397448 +40 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +-1576 +-1124 +50 +8 +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +-1576 +-1124 +50 +8 +YXudH8Doi0+zzc1qPMjDNAAA + + + +clMaroon +$00B9FFFF +438,321;401,359 +euFZ2oXh1UyoeBpwCRLyDQAA +udnYsolK4EGZ5Tqfu1inggAA +cXkc4ROKfkK2AEQ27ILD7AAA + +False +1.5707963267949 +15 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +1.5707963267949 +30 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +-1.5707963267949 +15 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +-0.523598775598299 +30 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +0.523598775598299 +30 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +0.523598775598299 +25 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +-0.523598775598299 +25 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +-0.785398163397448 +40 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +0.785398163397448 +40 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +-1576 +-1124 +50 +8 +g0Sss8qL1USpNMhJiejoNQAA + + +False +-1576 +-1124 +50 +8 +nnIS6vjqXkqw2mw9rhuzugAA + + + +clMaroon +$00B9FFFF +389,390;391,410 +h7KFG98rIEKQY4C1dOWmFQAA +kVd1VyDwJEWJDwZbvH1q6wAA +udnYsolK4EGZ5Tqfu1inggAA + +False +1.5707963267949 +15 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +1.5707963267949 +30 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +-1.5707963267949 +15 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +-0.523598775598299 +30 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +0.523598775598299 +30 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +0.523598775598299 +25 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +-0.523598775598299 +25 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +-0.785398163397448 +40 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +0.785398163397448 +40 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +-1576 +-1124 +50 +8 +Fb68OZ19C0WB4BjQurmBRwAA + + +False +-1576 +-1124 +50 +8 +akgagoM7O0WP1rFMWH/IzgAA + + + +clMaroon +$00B9FFFF +314 +239 +144 +32 +CBkE9JDrJU21ybYWNP2cCgAA + + +1 +create-test-unit + + +False + + +False + + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + + +clMaroon +$00B9FFFF +250 +290 +123 +32 +CEEcWQKt0kyX8zYOPZHrrwAA + + +1 +bugfix-coding + + +False + + +False + + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + + +clMaroon +$00B9FFFF +406,270;433,290 +DCobZcXopUed3uhu7f3tCwAA +cXkc4ROKfkK2AEQ27ILD7AAA +iZbm2TAx1keNx/mPHzSEmgAA + +False +1.5707963267949 +15 +DCobZcXopUed3uhu7f3tCwAA + + +False +1.5707963267949 +30 +DCobZcXopUed3uhu7f3tCwAA + + +False +-1.5707963267949 +15 +DCobZcXopUed3uhu7f3tCwAA + + +False +-0.523598775598299 +30 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +0.523598775598299 +30 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +0.523598775598299 +25 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +-0.523598775598299 +25 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +-0.785398163397448 +40 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +0.785398163397448 +40 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +-1552 +-1012 +50 +8 +GPR477SH0U2rZy9DRg9MzAAA + + +False +-1552 +-1012 +50 +8 +DFlh0do87UmmJQigSQRsiAAA + + + +clMaroon +$00B9FFFF +362,270;333,290 +BUd2VmDLEkKHuqopStVszQAA +vmizIwBnQ0SKIRlT6FSqSwAA +iZbm2TAx1keNx/mPHzSEmgAA + +False +1.5707963267949 +15 +BUd2VmDLEkKHuqopStVszQAA + + +False +1.5707963267949 +30 +BUd2VmDLEkKHuqopStVszQAA + + +False +-1.5707963267949 +15 +BUd2VmDLEkKHuqopStVszQAA + + +False +-0.523598775598299 +30 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +0.523598775598299 +30 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +0.523598775598299 +25 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +-0.523598775598299 +25 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +-0.785398163397448 +40 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +0.785398163397448 +40 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +-1552 +-1012 +50 +8 +XyL91tS87U+MpUc/Z25u1gAA + + +False +-1552 +-1012 +50 +8 +2t6hyyogW027sVhhVrjclQAA + + + +clMaroon +$00B9FFFF +329,321;371,359 +fk3nxDxX5USF8gff9cP5MwAA +udnYsolK4EGZ5Tqfu1inggAA +vmizIwBnQ0SKIRlT6FSqSwAA + +False +1.5707963267949 +15 +fk3nxDxX5USF8gff9cP5MwAA + + +False +1.5707963267949 +30 +fk3nxDxX5USF8gff9cP5MwAA + + +False +-1.5707963267949 +15 +fk3nxDxX5USF8gff9cP5MwAA + + +False +-0.523598775598299 +30 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +0.523598775598299 +30 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +0.523598775598299 +25 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +-0.523598775598299 +25 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +-0.785398163397448 +40 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +0.785398163397448 +40 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +-1552 +-1012 +50 +8 +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +-1552 +-1012 +50 +8 +lp0ewCTLb06H/3WjWYmLOQAA + + + +clMaroon +$00B9FFFF +458 +214 +61 +30 +src-code + + + +clMaroon +$00B9FFFF +458 +154 +55 +30 +src-pkg + + + + + +design-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +ySTAVfcj2U6jFfCvuMqyogAA +1 + +clMaroon +$00B9FFFF +52 +36 +108 +32 +U//hAdD8QU+M1p1r952pSAAA + + +1 +design-task + + +False + + +False + + + +False +U//hAdD8QU+M1p1r952pSAAA + + +False +U//hAdD8QU+M1p1r952pSAAA + + +False +U//hAdD8QU+M1p1r952pSAAA + + + + + +dev-work-flow-diagram +yePcB6NdXUG1SBs2wQJA7gAA + +SY6zyr8S8EyWPA7+VdC+9wAA +76 + +clMaroon +$00FF80FF +240 +104 +159 +32 +PjS4k33/kkePfB8R0Qh14AAA + + +1 +bugfix-estimate + + +False + + +False + + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + + +clMaroon +$00B9FFFF +253 +216 +120 +40 +h5aHoI2/GkuAptKzGDmHIwAA + + +dev-initial-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +276 +120 +40 +NezC/3LDGUub0eLy4M8sOgAA + + +design-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +388 +120 +40 +7jBLX6wjTkmObbw8i4xK0gAA + + +develop-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +448 +120 +40 +qG82m0zlPkqvT2acHPihkwAA + + +testing-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +568 +120 +40 +Gn5CjkIjQUCxSoecNQk2dQAA + + +document-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +688 +120 +40 +1Q7qLHEF7kKyydsrAZ/k1QAA + + +publish-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +156 +120 +40 +lNk1i5gHU02RiCDfZIsLEQAA + + +analysis-procedure + + +False + + +False + + + + +clMaroon +clSilver +67 +392 +110 +32 +H7tysEnUp0+p4o84YYVC8wAA + + +1 +bugfix-work + + +False + + +False + + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + + +clMaroon +$00FFFF80 +56 +692 +130 +32 +dHVXjobujkKGloy7+Ox8DAAA + + +1 +publish-launch + + +False + + +False + + + +False +dHVXjobujkKGloy7+Ox8DAAA + + +False +dHVXjobujkKGloy7+Ox8DAAA + + +False +dHVXjobujkKGloy7+Ox8DAAA + + + +clMaroon +clSilver +52 +572 +141 +32 +VwrgoiK6h0aUxHMgZDKYzgAA + + +1 +document-work + + +False + + +False + + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + + +clMaroon +clSilver +53 +632 +138 +32 +fKAlsL5x3U2cAiir26vsAQAA + + +1 +traslation-work + + +False + + +False + + + +False +fKAlsL5x3U2cAiir26vsAQAA + + +False +fKAlsL5x3U2cAiir26vsAQAA + + +False +fKAlsL5x3U2cAiir26vsAQAA + + + +clMaroon +clSilver +64 +452 +117 +32 +KbXj7bLsjku9BsYv/z63VgAA + + +1 +testing-work + + +False + + +False + + + +False +KbXj7bLsjku9BsYv/z63VgAA + + +False +KbXj7bLsjku9BsYv/z63VgAA + + +False +KbXj7bLsjku9BsYv/z63VgAA + + + +clMaroon +$00FFFF80 +16 +280 +209 +32 +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +1 +new-feature-dev-launch + + +False + + +False + + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + + +clMaroon +$00FFFF80 +43 +160 +154 +32 +d6r7rOW3akG5lkJDtATmigAA + + +1 +initial-dev-launch + + +False + + +False + + + +False +d6r7rOW3akG5lkJDtATmigAA + + +False +d6r7rOW3akG5lkJDtATmigAA + + +False +d6r7rOW3akG5lkJDtATmigAA + + + +clMaroon +$00B9FFFF +253 +628 +120 +40 +Gn5CjkIjQUCxSoecNQk2dQAA + + +document-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +312,195;312,216 +viIiAZ9C80y4tKd497zwFAAA +Rq0Cydd7nEKOfOgn8htc8QAA +pkAZPt0EzUO5vbW8/2ISDgAA + +False +1.5707963267949 +15 +viIiAZ9C80y4tKd497zwFAAA + + +False +1.5707963267949 +30 +viIiAZ9C80y4tKd497zwFAAA + + +False +-1.5707963267949 +15 +viIiAZ9C80y4tKd497zwFAAA + + +False +-0.523598775598299 +30 +epHead +9OsI3YefmEShu4VA2aYWsgAA + + +False +0.523598775598299 +30 +epTail +OH+C5n4Y3k61fQSZesUVxwAA + + +False +0.523598775598299 +25 +epHead +9OsI3YefmEShu4VA2aYWsgAA + + +False +-0.523598775598299 +25 +epTail +OH+C5n4Y3k61fQSZesUVxwAA + + +False +-0.785398163397448 +40 +epHead +9OsI3YefmEShu4VA2aYWsgAA + + +False +0.785398163397448 +40 +epTail +OH+C5n4Y3k61fQSZesUVxwAA + + +False +-796 +-1324 +50 +8 +9OsI3YefmEShu4VA2aYWsgAA + + +False +-796 +-1324 +50 +8 +OH+C5n4Y3k61fQSZesUVxwAA + + + +clMaroon +$00B9FFFF +312,255;312,276 +zhltSEBb90+T60/21ERiXQAA +05y9pi2UcU6ptxllVr+G/gAA +Rq0Cydd7nEKOfOgn8htc8QAA + +False +1.5707963267949 +15 +zhltSEBb90+T60/21ERiXQAA + + +False +1.5707963267949 +30 +zhltSEBb90+T60/21ERiXQAA + + +False +-1.5707963267949 +15 +zhltSEBb90+T60/21ERiXQAA + + +False +-0.523598775598299 +30 +epHead +IJastPE4CkGI6UtKXQb+xgAA + + +False +0.523598775598299 +30 +epTail +wVShJ+TldkiCQjPWrQHwugAA + + +False +0.523598775598299 +25 +epHead +IJastPE4CkGI6UtKXQb+xgAA + + +False +-0.523598775598299 +25 +epTail +wVShJ+TldkiCQjPWrQHwugAA + + +False +-0.785398163397448 +40 +epHead +IJastPE4CkGI6UtKXQb+xgAA + + +False +0.785398163397448 +40 +epTail +wVShJ+TldkiCQjPWrQHwugAA + + +False +-944 +-1200 +50 +8 +IJastPE4CkGI6UtKXQb+xgAA + + +False +-944 +-1200 +50 +8 +wVShJ+TldkiCQjPWrQHwugAA + + + +clMaroon +$00B9FFFF +312,315;313,336 +IQdvD61jPEq7KzieVIPMnAAA +ycjyLlSj3kqAT4WlwN+ABQAA +05y9pi2UcU6ptxllVr+G/gAA + +False +1.5707963267949 +15 +IQdvD61jPEq7KzieVIPMnAAA + + +False +1.5707963267949 +30 +IQdvD61jPEq7KzieVIPMnAAA + + +False +-1.5707963267949 +15 +IQdvD61jPEq7KzieVIPMnAAA + + +False +-0.523598775598299 +30 +epHead +d4BprJk1YUek3SfLLsVZ4QAA + + +False +0.523598775598299 +30 +epTail +I2MiL+bJOEWcCQW8PlUaEAAA + + +False +0.523598775598299 +25 +epHead +d4BprJk1YUek3SfLLsVZ4QAA + + +False +-0.523598775598299 +25 +epTail +I2MiL+bJOEWcCQW8PlUaEAAA + + +False +-0.785398163397448 +40 +epHead +d4BprJk1YUek3SfLLsVZ4QAA + + +False +0.785398163397448 +40 +epTail +I2MiL+bJOEWcCQW8PlUaEAAA + + +False +-944 +-1132 +50 +8 +d4BprJk1YUek3SfLLsVZ4QAA + + +False +-944 +-1132 +50 +8 +I2MiL+bJOEWcCQW8PlUaEAAA + + + +clMaroon +$00B9FFFF +312,427;312,448 +/HuYmDQGHEeXQIQr+1PRoQAA +0eY6HnBo4kSNrbtAFd/AoQAA +LdINJygfWEW3vhPOZonupQAA + +False +1.5707963267949 +15 +/HuYmDQGHEeXQIQr+1PRoQAA + + +False +1.5707963267949 +30 +/HuYmDQGHEeXQIQr+1PRoQAA + + +False +-1.5707963267949 +15 +/HuYmDQGHEeXQIQr+1PRoQAA + + +False +-0.523598775598299 +30 +epHead +/pztn/xQEUmMs4TaAXsCagAA + + +False +0.523598775598299 +30 +epTail +770F/tljqkKHqvtGDTfVzAAA + + +False +0.523598775598299 +25 +epHead +/pztn/xQEUmMs4TaAXsCagAA + + +False +-0.523598775598299 +25 +epTail +770F/tljqkKHqvtGDTfVzAAA + + +False +-0.785398163397448 +40 +epHead +/pztn/xQEUmMs4TaAXsCagAA + + +False +0.785398163397448 +40 +epTail +770F/tljqkKHqvtGDTfVzAAA + + +False +-944 +-1132 +50 +8 +/pztn/xQEUmMs4TaAXsCagAA + + +False +-944 +-1132 +50 +8 +770F/tljqkKHqvtGDTfVzAAA + + + +clMaroon +$00B9FFFF +312,607;312,628 +4uPxSnoEgUO3ovjSg4lAfgAA +tQieUJFUIUWjBNmfDel6vwAA +Y9Di27a99UCLuicgXHRPbQAA + +False +1.5707963267949 +15 +4uPxSnoEgUO3ovjSg4lAfgAA + + +False +1.5707963267949 +30 +4uPxSnoEgUO3ovjSg4lAfgAA + + +False +-1.5707963267949 +15 +4uPxSnoEgUO3ovjSg4lAfgAA + + +False +-0.523598775598299 +30 +epHead +KCe+sJFeFUW7JorDZydAQQAA + + +False +0.523598775598299 +30 +epTail +8MwPX9NZj0SQu64mihvgxAAA + + +False +0.523598775598299 +25 +epHead +KCe+sJFeFUW7JorDZydAQQAA + + +False +-0.523598775598299 +25 +epTail +8MwPX9NZj0SQu64mihvgxAAA + + +False +-0.785398163397448 +40 +epHead +KCe+sJFeFUW7JorDZydAQQAA + + +False +0.785398163397448 +40 +epTail +8MwPX9NZj0SQu64mihvgxAAA + + +False +-796 +-1316 +50 +8 +KCe+sJFeFUW7JorDZydAQQAA + + +False +-796 +-1316 +50 +8 +8MwPX9NZj0SQu64mihvgxAAA + + + +clMaroon +$0080FF80 +36 +12 +175 +32 +7lWVbX8GnUmVFBjNoEJuAAAA + + +1 +new-demond-action + + +False + + +False + + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + + +clMaroon +$00B9FFFF +430 +276 +120 +40 +1Q7qLHEF7kKyydsrAZ/k1QAA + + +publish-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +508 +120 +40 +VKh7LpFhYka/yUWbEMRTBAAA + + +bug-report-task + + +False + + +False + + + + +clMaroon +$00B9FFFF +312,487;312,508 +wamDBWad0EiNBPiMYvPoYQAA +OO7ku5gAkUOUNTByzbCZzgAA +0eY6HnBo4kSNrbtAFd/AoQAA + +False +1.5707963267949 +15 +wamDBWad0EiNBPiMYvPoYQAA + + +False +1.5707963267949 +30 +wamDBWad0EiNBPiMYvPoYQAA + + +False +-1.5707963267949 +15 +wamDBWad0EiNBPiMYvPoYQAA + + +False +-0.523598775598299 +30 +epHead +SG8bVsROWE+5+iyuVGPkBQAA + + +False +0.523598775598299 +30 +epTail +1IsgVb2s8Ui+xnl92d08gQAA + + +False +0.523598775598299 +25 +epHead +SG8bVsROWE+5+iyuVGPkBQAA + + +False +-0.523598775598299 +25 +epTail +1IsgVb2s8Ui+xnl92d08gQAA + + +False +-0.785398163397448 +40 +epHead +SG8bVsROWE+5+iyuVGPkBQAA + + +False +0.785398163397448 +40 +epTail +1IsgVb2s8Ui+xnl92d08gQAA + + +False +-1064 +-1024 +50 +8 +SG8bVsROWE+5+iyuVGPkBQAA + + +False +-1064 +-1024 +50 +8 +1IsgVb2s8Ui+xnl92d08gQAA + + + +clMaroon +$00B9FFFF +372,527;420,527 +RPaUCtwDgE+7Y3vewD8uWQAA +4hezOO3zxE6T3AtmMrs4MwAA +OO7ku5gAkUOUNTByzbCZzgAA + +False +1.5707963267949 +15 +RPaUCtwDgE+7Y3vewD8uWQAA + + +False +1.5707963267949 +30 +RPaUCtwDgE+7Y3vewD8uWQAA + + +False +-1.5707963267949 +15 +RPaUCtwDgE+7Y3vewD8uWQAA + + +False +-0.523598775598299 +30 +epHead +RaGpcXRFFk2Egrs9p45aEwAA + + +False +0.523598775598299 +30 +epTail +51zN/AjS8UKGQuZi3cgptgAA + + +False +0.523598775598299 +25 +epHead +RaGpcXRFFk2Egrs9p45aEwAA + + +False +-0.523598775598299 +25 +epTail +51zN/AjS8UKGQuZi3cgptgAA + + +False +-0.785398163397448 +40 +epHead +RaGpcXRFFk2Egrs9p45aEwAA + + +False +0.785398163397448 +40 +epTail +51zN/AjS8UKGQuZi3cgptgAA + + +False +-1064 +-1024 +50 +8 +RaGpcXRFFk2Egrs9p45aEwAA + + +False +-1064 +-1024 +50 +8 +51zN/AjS8UKGQuZi3cgptgAA + + + +clMaroon +$00FF80FF +420 +512 +140 +32 +Qefe92j2XEq8x5GI1Vq+RQAA + + +1 +testing-estimat + + +False + + +False + + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + + +clMaroon +$00B9FFFF +482,512;448,444;336,444;325,427 +MEolPOO0IEuLY63mhD0XIAAA +LdINJygfWEW3vhPOZonupQAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +MEolPOO0IEuLY63mhD0XIAAA + + +False +1.5707963267949 +30 +MEolPOO0IEuLY63mhD0XIAAA + + +False +-1.5707963267949 +15 +MEolPOO0IEuLY63mhD0XIAAA + + +False +-0.523598775598299 +30 +epHead +6XJvWCMrykCACsZlVke/PAAA + + +False +0.523598775598299 +30 +epTail +g0TBPf3Nh0KJwiSYVxiPhQAA + + +False +0.523598775598299 +25 +epHead +6XJvWCMrykCACsZlVke/PAAA + + +False +-0.523598775598299 +25 +epTail +g0TBPf3Nh0KJwiSYVxiPhQAA + + +False +-0.785398163397448 +40 +epHead +6XJvWCMrykCACsZlVke/PAAA + + +False +0.785398163397448 +40 +epTail +g0TBPf3Nh0KJwiSYVxiPhQAA + + +False +-1064 +-1024 +50 +8 +6XJvWCMrykCACsZlVke/PAAA + + +False +-1064 +-1024 +50 +8 +g0TBPf3Nh0KJwiSYVxiPhQAA + + + +clMaroon +$00B9FFFF +559,668;600,668;600,328;549,313 +ys0dUMXSfkahAJXAYIjoOQAA +4JaPx8QgwEWT8vCziLxdSQAA ++sKzDE+8zkS7xWQbBBTVcwAA + +False +1.5707963267949 +15 +ys0dUMXSfkahAJXAYIjoOQAA + + +False +1.5707963267949 +30 +ys0dUMXSfkahAJXAYIjoOQAA + + +False +-1.5707963267949 +15 +ys0dUMXSfkahAJXAYIjoOQAA + + +False +-0.523598775598299 +30 +epHead +j0eu/Ys1xkyBAac51lq70AAA + + +False +0.523598775598299 +30 +epTail +gijAVu6IkkimRi58YU5afQAA + + +False +0.523598775598299 +25 +epHead +j0eu/Ys1xkyBAac51lq70AAA + + +False +-0.523598775598299 +25 +epTail +gijAVu6IkkimRi58YU5afQAA + + +False +-0.785398163397448 +40 +epHead +j0eu/Ys1xkyBAac51lq70AAA + + +False +0.785398163397448 +40 +epTail +gijAVu6IkkimRi58YU5afQAA + + +False +-1028 +-1084 +50 +8 +j0eu/Ys1xkyBAac51lq70AAA + + +False +-1028 +-1084 +50 +8 +gijAVu6IkkimRi58YU5afQAA + + + +clMaroon +$00B9FFFF +430 +156 +120 +40 +1Q7qLHEF7kKyydsrAZ/k1QAA + + +publish-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +664 +160 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +664 +280 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +664 +512 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +664 +392 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +559,527;664,527 +qMuZkyzh+ky3oDxBIC0P/AAA +OUCMrBecwkmcxrWWZfI9yQAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +qMuZkyzh+ky3oDxBIC0P/AAA + + +False +1.5707963267949 +30 +qMuZkyzh+ky3oDxBIC0P/AAA + + +False +-1.5707963267949 +15 +qMuZkyzh+ky3oDxBIC0P/AAA + + +False +-0.523598775598299 +30 +epHead +MBHAyH1qPEWL3nIRNBXalAAA + + +False +0.523598775598299 +30 +epTail +SqEbSyA4zkqxiqZEBvO8kQAA + + +False +0.523598775598299 +25 +epHead +MBHAyH1qPEWL3nIRNBXalAAA + + +False +-0.523598775598299 +25 +epTail +SqEbSyA4zkqxiqZEBvO8kQAA + + +False +-0.785398163397448 +40 +epHead +MBHAyH1qPEWL3nIRNBXalAAA + + +False +0.785398163397448 +40 +epTail +SqEbSyA4zkqxiqZEBvO8kQAA + + +False +-900 +-1256 +50 +8 +MBHAyH1qPEWL3nIRNBXalAAA + + +False +-900 +-1256 +50 +8 +SqEbSyA4zkqxiqZEBvO8kQAA + + + +clMaroon +$00B9FFFF +549,295;664,295 +o0d7TUyzXk6c+PfIZT5lEAAA +kDJ4sMyQokGYpNNs0RQlPQAA +4JaPx8QgwEWT8vCziLxdSQAA + +False +1.5707963267949 +15 +o0d7TUyzXk6c+PfIZT5lEAAA + + +False +1.5707963267949 +30 +o0d7TUyzXk6c+PfIZT5lEAAA + + +False +-1.5707963267949 +15 +o0d7TUyzXk6c+PfIZT5lEAAA + + +False +-0.523598775598299 +30 +epHead +XISyKVl4zUKFIG8yEnSeZwAA + + +False +0.523598775598299 +30 +epTail +B018yNXvg0ygTAeYfrer4QAA + + +False +0.523598775598299 +25 +epHead +XISyKVl4zUKFIG8yEnSeZwAA + + +False +-0.523598775598299 +25 +epTail +B018yNXvg0ygTAeYfrer4QAA + + +False +-0.785398163397448 +40 +epHead +XISyKVl4zUKFIG8yEnSeZwAA + + +False +0.785398163397448 +40 +epTail +B018yNXvg0ygTAeYfrer4QAA + + +False +-900 +-1324 +50 +8 +XISyKVl4zUKFIG8yEnSeZwAA + + +False +-900 +-1324 +50 +8 +B018yNXvg0ygTAeYfrer4QAA + + + +clMaroon +$00B9FFFF +372,592;406,595 +BY9qrj1RFUm4rNyc3SVDmgAA +IY8NFiPGQkOPFFwtq6H0ZgAA +Y9Di27a99UCLuicgXHRPbQAA + +False +1.5707963267949 +15 +BY9qrj1RFUm4rNyc3SVDmgAA + + +False +1.5707963267949 +30 +BY9qrj1RFUm4rNyc3SVDmgAA + + +False +-1.5707963267949 +15 +BY9qrj1RFUm4rNyc3SVDmgAA + + +False +-0.523598775598299 +30 +epHead +d4j7kpAS0ka+ba2k0nXpZAAA + + +False +0.523598775598299 +30 +epTail +IHj45UgS/0izQOpDHKO3GAAA + + +False +0.523598775598299 +25 +epHead +d4j7kpAS0ka+ba2k0nXpZAAA + + +False +-0.523598775598299 +25 +epTail +IHj45UgS/0izQOpDHKO3GAAA + + +False +-0.785398163397448 +40 +epHead +d4j7kpAS0ka+ba2k0nXpZAAA + + +False +0.785398163397448 +40 +epTail +IHj45UgS/0izQOpDHKO3GAAA + + +False +-936 +-1316 +50 +8 +d4j7kpAS0ka+ba2k0nXpZAAA + + +False +-936 +-1316 +50 +8 +IHj45UgS/0izQOpDHKO3GAAA + + + +clMaroon +$00B9FFFF +372,632;424,619 +YnZl5Nva0UCe5UdReEoIzQAA +IY8NFiPGQkOPFFwtq6H0ZgAA +tQieUJFUIUWjBNmfDel6vwAA + +False +1.5707963267949 +15 +YnZl5Nva0UCe5UdReEoIzQAA + + +False +1.5707963267949 +30 +YnZl5Nva0UCe5UdReEoIzQAA + + +False +-1.5707963267949 +15 +YnZl5Nva0UCe5UdReEoIzQAA + + +False +-0.523598775598299 +30 +epHead +A9CObdPLTUSepg+ci/+UBAAA + + +False +0.523598775598299 +30 +epTail +zzJAA14PKEyZOy48ze8TUQAA + + +False +0.523598775598299 +25 +epHead +A9CObdPLTUSepg+ci/+UBAAA + + +False +-0.523598775598299 +25 +epTail +zzJAA14PKEyZOy48ze8TUQAA + + +False +-0.785398163397448 +40 +epHead +A9CObdPLTUSepg+ci/+UBAAA + + +False +0.785398163397448 +40 +epTail +zzJAA14PKEyZOy48ze8TUQAA + + +False +-936 +-1316 +50 +8 +A9CObdPLTUSepg+ci/+UBAAA + + +False +-936 +-1316 +50 +8 +zzJAA14PKEyZOy48ze8TUQAA + + + +clMaroon +$00B9FFFF +549,175;664,175 +hLW1nXlISEGkjCaKgHd0dAAA +pXNv1QjBU0iuyfVI3ul8fwAA +hXLnvpDLz0KIpSPRhb6ECgAA + +False +1.5707963267949 +15 +hLW1nXlISEGkjCaKgHd0dAAA + + +False +1.5707963267949 +30 +hLW1nXlISEGkjCaKgHd0dAAA + + +False +-1.5707963267949 +15 +hLW1nXlISEGkjCaKgHd0dAAA + + +False +-0.523598775598299 +30 +epHead +nWK8/Dbe5kGwMfVczyrs6wAA + + +False +0.523598775598299 +30 +epTail +WZ976OFIREimbDaKoU7o0QAA + + +False +0.523598775598299 +25 +epHead +nWK8/Dbe5kGwMfVczyrs6wAA + + +False +-0.523598775598299 +25 +epTail +WZ976OFIREimbDaKoU7o0QAA + + +False +-0.785398163397448 +40 +epHead +nWK8/Dbe5kGwMfVczyrs6wAA + + +False +0.785398163397448 +40 +epTail +WZ976OFIREimbDaKoU7o0QAA + + +False +-892 +-1428 +50 +8 +nWK8/Dbe5kGwMfVczyrs6wAA + + +False +-892 +-1428 +50 +8 +WZ976OFIREimbDaKoU7o0QAA + + + +clMaroon +$00B9FFFF +559,668;616,668;616,212;549,192 +S8IcyUEQBk2t/QasjWBrEAAA +hXLnvpDLz0KIpSPRhb6ECgAA ++sKzDE+8zkS7xWQbBBTVcwAA + +False +1.5707963267949 +15 +S8IcyUEQBk2t/QasjWBrEAAA + + +False +1.5707963267949 +30 +S8IcyUEQBk2t/QasjWBrEAAA + + +False +-1.5707963267949 +15 +S8IcyUEQBk2t/QasjWBrEAAA + + +False +-0.523598775598299 +30 +epHead +6PWLFqBgek+WMYGWr8g3pAAA + + +False +0.523598775598299 +30 +epTail +9wmTKLpCT0Ga+RcZfnUdYQAA + + +False +0.523598775598299 +25 +epHead +6PWLFqBgek+WMYGWr8g3pAAA + + +False +-0.523598775598299 +25 +epTail +9wmTKLpCT0Ga+RcZfnUdYQAA + + +False +-0.785398163397448 +40 +epHead +6PWLFqBgek+WMYGWr8g3pAAA + + +False +0.785398163397448 +40 +epTail +9wmTKLpCT0Ga+RcZfnUdYQAA + + +False +-900 +-1384 +50 +8 +6PWLFqBgek+WMYGWr8g3pAAA + + +False +-900 +-1384 +50 +8 +9wmTKLpCT0Ga+RcZfnUdYQAA + + + +clMaroon +$0080FF80 +40 +52 +144 +32 +dqA/cPl8GEmWvU/R693yfAAA + + +1 +new-idea-action + + +False + + +False + + + +False +dqA/cPl8GEmWvU/R693yfAAA + + +False +dqA/cPl8GEmWvU/R693yfAAA + + +False +dqA/cPl8GEmWvU/R693yfAAA + + + +clMaroon +$00B9FFFF +664 +692 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +372,707;664,707 +eim49HTyz0aTq6cSTLKUxQAA +6fWpQKk33U+G9a3MEcCGcQAA +T2cKdPg1Bk+hDccckoYQ5QAA + +False +1.5707963267949 +15 +eim49HTyz0aTq6cSTLKUxQAA + + +False +1.5707963267949 +30 +eim49HTyz0aTq6cSTLKUxQAA + + +False +-1.5707963267949 +15 +eim49HTyz0aTq6cSTLKUxQAA + + +False +-0.523598775598299 +30 +epHead +bDDeA0cjxEy6AaRuuqyRnwAA + + +False +0.523598775598299 +30 +epTail +Wbq2l1nmWUigv45vNt7DRAAA + + +False +0.523598775598299 +25 +epHead +bDDeA0cjxEy6AaRuuqyRnwAA + + +False +-0.523598775598299 +25 +epTail +Wbq2l1nmWUigv45vNt7DRAAA + + +False +-0.785398163397448 +40 +epHead +bDDeA0cjxEy6AaRuuqyRnwAA + + +False +0.785398163397448 +40 +epTail +Wbq2l1nmWUigv45vNt7DRAAA + + +False +-980 +-1192 +50 +8 +bDDeA0cjxEy6AaRuuqyRnwAA + + +False +-980 +-1192 +50 +8 +Wbq2l1nmWUigv45vNt7DRAAA + + + +clMaroon +$00FF80FF +420 +652 +140 +32 +YPSGJ8SkH0mAV1HZcqVjOgAA + + +1 +publish-estimat + + +False + + +False + + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + + +clMaroon +$00B9FFFF +430 +388 +120 +40 +1Q7qLHEF7kKyydsrAZ/k1QAA + + +publish-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +489,512;489,427 +Ia4zuWdlXkG9ym+vnOiB3AAA +FqQn7IeHTkizfymgIbEsLAAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +Ia4zuWdlXkG9ym+vnOiB3AAA + + +False +1.5707963267949 +30 +Ia4zuWdlXkG9ym+vnOiB3AAA + + +False +-1.5707963267949 +15 +Ia4zuWdlXkG9ym+vnOiB3AAA + + +False +-0.523598775598299 +30 +epHead +b4rYIDwkWUShf2GiOCXYDgAA + + +False +0.523598775598299 +30 +epTail +02hOTKH4qE+Snq2RdNFI/gAA + + +False +0.523598775598299 +25 +epHead +b4rYIDwkWUShf2GiOCXYDgAA + + +False +-0.523598775598299 +25 +epTail +02hOTKH4qE+Snq2RdNFI/gAA + + +False +-0.785398163397448 +40 +epHead +b4rYIDwkWUShf2GiOCXYDgAA + + +False +0.785398163397448 +40 +epTail +02hOTKH4qE+Snq2RdNFI/gAA + + +False +-1016 +-1132 +50 +8 +b4rYIDwkWUShf2GiOCXYDgAA + + +False +-1016 +-1132 +50 +8 +02hOTKH4qE+Snq2RdNFI/gAA + + + +clMaroon +$00B9FFFF +549,407;664,407 +XiWUowb9X0+cmh/jn2Y6nwAA +/jiNGEbH9EKzxyhBp7dGbAAA +FqQn7IeHTkizfymgIbEsLAAA + +False +1.5707963267949 +15 +XiWUowb9X0+cmh/jn2Y6nwAA + + +False +1.5707963267949 +30 +XiWUowb9X0+cmh/jn2Y6nwAA + + +False +-1.5707963267949 +15 +XiWUowb9X0+cmh/jn2Y6nwAA + + +False +-0.523598775598299 +30 +epHead +NM+MZJjv/UaHiAj8twEHBgAA + + +False +0.523598775598299 +30 +epTail +KHKx1GHN4Uam3tVmAqbglQAA + + +False +0.523598775598299 +25 +epHead +NM+MZJjv/UaHiAj8twEHBgAA + + +False +-0.523598775598299 +25 +epTail +KHKx1GHN4Uam3tVmAqbglQAA + + +False +-0.785398163397448 +40 +epHead +NM+MZJjv/UaHiAj8twEHBgAA + + +False +0.785398163397448 +40 +epTail +KHKx1GHN4Uam3tVmAqbglQAA + + +False +-1016 +-1132 +50 +8 +NM+MZJjv/UaHiAj8twEHBgAA + + +False +-1016 +-1132 +50 +8 +KHKx1GHN4Uam3tVmAqbglQAA + + + +clMaroon +$00B9FFFF +489,543;489,588 +MQ6Mry1/cE60C5Ss93uHrAAA +IY8NFiPGQkOPFFwtq6H0ZgAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +MQ6Mry1/cE60C5Ss93uHrAAA + + +False +1.5707963267949 +30 +MQ6Mry1/cE60C5Ss93uHrAAA + + +False +-1.5707963267949 +15 +MQ6Mry1/cE60C5Ss93uHrAAA + + +False +-0.523598775598299 +30 +epHead +x9ru4+yHq0W72sfWmglc7wAA + + +False +0.523598775598299 +30 +epTail +xf2zcv1RLES2E6ZY//8hdwAA + + +False +0.523598775598299 +25 +epHead +x9ru4+yHq0W72sfWmglc7wAA + + +False +-0.523598775598299 +25 +epTail +xf2zcv1RLES2E6ZY//8hdwAA + + +False +-0.785398163397448 +40 +epHead +x9ru4+yHq0W72sfWmglc7wAA + + +False +0.785398163397448 +40 +epTail +xf2zcv1RLES2E6ZY//8hdwAA + + +False +-1016 +-1132 +50 +8 +x9ru4+yHq0W72sfWmglc7wAA + + +False +-1016 +-1132 +50 +8 +xf2zcv1RLES2E6ZY//8hdwAA + + + +clMaroon +$00B9FFFF +559,668;568,668;568,440;537,427 +/Q+8gAvTq0+PLlF0qnEkGwAA +FqQn7IeHTkizfymgIbEsLAAA ++sKzDE+8zkS7xWQbBBTVcwAA + +False +1.5707963267949 +15 +/Q+8gAvTq0+PLlF0qnEkGwAA + + +False +1.5707963267949 +30 +/Q+8gAvTq0+PLlF0qnEkGwAA + + +False +-1.5707963267949 +15 +/Q+8gAvTq0+PLlF0qnEkGwAA + + +False +-0.523598775598299 +30 +epHead +hu41jycWSEOI3Ox7jzRK0gAA + + +False +0.523598775598299 +30 +epTail +v1eyd2Q+GU+hNljhcBIlnAAA + + +False +0.523598775598299 +25 +epHead +hu41jycWSEOI3Ox7jzRK0gAA + + +False +-0.523598775598299 +25 +epTail +v1eyd2Q+GU+hNljhcBIlnAAA + + +False +-0.785398163397448 +40 +epHead +hu41jycWSEOI3Ox7jzRK0gAA + + +False +0.785398163397448 +40 +epTail +v1eyd2Q+GU+hNljhcBIlnAAA + + +False +-1016 +-1132 +50 +8 +hu41jycWSEOI3Ox7jzRK0gAA + + +False +-1016 +-1132 +50 +8 +v1eyd2Q+GU+hNljhcBIlnAAA + + + +clMaroon +$00B9FFFF +253 +336 +121 +32 +LRvECEfPPkOYfW5/8H8P3QAA + + +1 +code-branch + + +False + + +False + + + +False +LRvECEfPPkOYfW5/8H8P3QAA + + +False +LRvECEfPPkOYfW5/8H8P3QAA + + +False +LRvECEfPPkOYfW5/8H8P3QAA + + + +clMaroon +$00B9FFFF +313,367;312,388 +SCWqm0HM/0qIGrMzbXXlWwAA +LdINJygfWEW3vhPOZonupQAA +ycjyLlSj3kqAT4WlwN+ABQAA + +False +1.5707963267949 +15 +SCWqm0HM/0qIGrMzbXXlWwAA + + +False +1.5707963267949 +30 +SCWqm0HM/0qIGrMzbXXlWwAA + + +False +-1.5707963267949 +15 +SCWqm0HM/0qIGrMzbXXlWwAA + + +False +-0.523598775598299 +30 +epHead +6hCImufvAUuT81kGxRsmxgAA + + +False +0.523598775598299 +30 +epTail +6mwoN9toVUKgNXSs/zpXIQAA + + +False +0.523598775598299 +25 +epHead +6hCImufvAUuT81kGxRsmxgAA + + +False +-0.523598775598299 +25 +epTail +6mwoN9toVUKgNXSs/zpXIQAA + + +False +-0.785398163397448 +40 +epHead +6hCImufvAUuT81kGxRsmxgAA + + +False +0.785398163397448 +40 +epTail +6mwoN9toVUKgNXSs/zpXIQAA + + +False +-1008 +-1236 +50 +8 +6hCImufvAUuT81kGxRsmxgAA + + +False +-1008 +-1236 +50 +8 +6mwoN9toVUKgNXSs/zpXIQAA + + + +clMaroon +$00B9FFFF +427 +332 +127 +32 +bdHUhH7aEUuvu1sA17cxzQAA + + +1 +code-combine + + +False + + +False + + + +False +bdHUhH7aEUuvu1sA17cxzQAA + + +False +bdHUhH7aEUuvu1sA17cxzQAA + + +False +bdHUhH7aEUuvu1sA17cxzQAA + + + +clMaroon +$00B9FFFF +559,528;584,528;584,384;531,363 +xrdGh677e02q1kDtgtazfQAA +ZIbf0/c06EGBYTz9Fgc3IQAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +xrdGh677e02q1kDtgtazfQAA + + +False +1.5707963267949 +30 +xrdGh677e02q1kDtgtazfQAA + + +False +-1.5707963267949 +15 +xrdGh677e02q1kDtgtazfQAA + + +False +-0.523598775598299 +30 +epHead +TchuDcMxgU66R77KAyfQSgAA + + +False +0.523598775598299 +30 +epTail +7PzK5upkUk+dJkyPmUbNewAA + + +False +0.523598775598299 +25 +epHead +TchuDcMxgU66R77KAyfQSgAA + + +False +-0.523598775598299 +25 +epTail +7PzK5upkUk+dJkyPmUbNewAA + + +False +-0.785398163397448 +40 +epHead +TchuDcMxgU66R77KAyfQSgAA + + +False +0.785398163397448 +40 +epTail +7PzK5upkUk+dJkyPmUbNewAA + + +False +-1008 +-1236 +50 +8 +TchuDcMxgU66R77KAyfQSgAA + + +False +-1008 +-1236 +50 +8 +7PzK5upkUk+dJkyPmUbNewAA + + + +clMaroon +$00B9FFFF +427,348;396,348;396,468;372,468 +SQJ2LNwqDUSo9n73ytxYFwAA +0eY6HnBo4kSNrbtAFd/AoQAA +ZIbf0/c06EGBYTz9Fgc3IQAA + +False +1.5707963267949 +15 +SQJ2LNwqDUSo9n73ytxYFwAA + + +False +1.5707963267949 +30 +SQJ2LNwqDUSo9n73ytxYFwAA + + +False +-1.5707963267949 +15 +SQJ2LNwqDUSo9n73ytxYFwAA + + +False +-0.523598775598299 +30 +epHead +TumZKVN0d0in5UkpqbuZTAAA + + +False +0.523598775598299 +30 +epTail +98m3w3R5mkuexiYTm0X0CQAA + + +False +0.523598775598299 +25 +epHead +TumZKVN0d0in5UkpqbuZTAAA + + +False +-0.523598775598299 +25 +epTail +98m3w3R5mkuexiYTm0X0CQAA + + +False +-0.785398163397448 +40 +epHead +TumZKVN0d0in5UkpqbuZTAAA + + +False +0.785398163397448 +40 +epTail +98m3w3R5mkuexiYTm0X0CQAA + + +False +-1008 +-1236 +50 +8 +TumZKVN0d0in5UkpqbuZTAAA + + +False +-1008 +-1236 +50 +8 +98m3w3R5mkuexiYTm0X0CQAA + + + +clMaroon +$00B9FFFF +442,543;368,568 +pBLToI3BDkSX21nTyuesfQAA +Y9Di27a99UCLuicgXHRPbQAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +pBLToI3BDkSX21nTyuesfQAA + + +False +1.5707963267949 +30 +pBLToI3BDkSX21nTyuesfQAA + + +False +-1.5707963267949 +15 +pBLToI3BDkSX21nTyuesfQAA + + +False +-0.523598775598299 +30 +epHead +9Txo32SVmUCTFUkGnzyaoQAA + + +False +0.523598775598299 +30 +epTail +SlWJmvsLTEKb0sz8CslRigAA + + +False +0.523598775598299 +25 +epHead +9Txo32SVmUCTFUkGnzyaoQAA + + +False +-0.523598775598299 +25 +epTail +SlWJmvsLTEKb0sz8CslRigAA + + +False +-0.785398163397448 +40 +epHead +9Txo32SVmUCTFUkGnzyaoQAA + + +False +0.785398163397448 +40 +epTail +SlWJmvsLTEKb0sz8CslRigAA + + +False +-1008 +-1236 +50 +8 +9Txo32SVmUCTFUkGnzyaoQAA + + +False +-1008 +-1236 +50 +8 +SlWJmvsLTEKb0sz8CslRigAA + + + +clMaroon +$00B9FFFF +624 +600 +120 +70 +AihHVW7SgkeVDEL8szGXUQAA + + +soft-repo + + +False + + +False + + + + +clMaroon +$00B9FFFF +224,295;253,295 +zLIxpYqFF02jEI1wZKI0SQAA +05y9pi2UcU6ptxllVr+G/gAA +cgzV1Cjm1E+TvgDTXT4Z/AAA + +False +1.5707963267949 +15 +zLIxpYqFF02jEI1wZKI0SQAA + + +False +1.5707963267949 +30 +zLIxpYqFF02jEI1wZKI0SQAA + + +False +-1.5707963267949 +15 +zLIxpYqFF02jEI1wZKI0SQAA + + +False +-0.523598775598299 +30 +epHead +RueokuJsJ02RY8qTm1ik8wAA + + +False +0.523598775598299 +30 +epTail +oV0xUwtlkEW3wNVlZTulsQAA + + +False +0.523598775598299 +25 +epHead +RueokuJsJ02RY8qTm1ik8wAA + + +False +-0.523598775598299 +25 +epTail +oV0xUwtlkEW3wNVlZTulsQAA + + +False +-0.785398163397448 +40 +epHead +RueokuJsJ02RY8qTm1ik8wAA + + +False +0.785398163397448 +40 +epTail +oV0xUwtlkEW3wNVlZTulsQAA + + +False +-1008 +-1236 +50 +8 +RueokuJsJ02RY8qTm1ik8wAA + + +False +-1008 +-1236 +50 +8 +oV0xUwtlkEW3wNVlZTulsQAA + + + +clMaroon +$00B9FFFF +176,407;253,407 +8JoAmLoX6UCsEUuYOfgFrwAA +LdINJygfWEW3vhPOZonupQAA +n/wO/s227keDkWnSaoMPFwAA + +False +1.5707963267949 +15 +8JoAmLoX6UCsEUuYOfgFrwAA + + +False +1.5707963267949 +30 +8JoAmLoX6UCsEUuYOfgFrwAA + + +False +-1.5707963267949 +15 +8JoAmLoX6UCsEUuYOfgFrwAA + + +False +-0.523598775598299 +30 +epHead +kQl08Rz6jUCQA6Vz31/AmQAA + + +False +0.523598775598299 +30 +epTail +HAKtlFj5902XipIJf5JuhQAA + + +False +0.523598775598299 +25 +epHead +kQl08Rz6jUCQA6Vz31/AmQAA + + +False +-0.523598775598299 +25 +epTail +HAKtlFj5902XipIJf5JuhQAA + + +False +-0.785398163397448 +40 +epHead +kQl08Rz6jUCQA6Vz31/AmQAA + + +False +0.785398163397448 +40 +epTail +HAKtlFj5902XipIJf5JuhQAA + + +False +-1008 +-1236 +50 +8 +kQl08Rz6jUCQA6Vz31/AmQAA + + +False +-1008 +-1236 +50 +8 +HAKtlFj5902XipIJf5JuhQAA + + + +clMaroon +$00B9FFFF +180,467;253,467 +uQ67KS+1vUmRO9PVPQmAvQAA +0eY6HnBo4kSNrbtAFd/AoQAA +8LIFapZp5k6ylbwQfcyklgAA + +False +1.5707963267949 +15 +uQ67KS+1vUmRO9PVPQmAvQAA + + +False +1.5707963267949 +30 +uQ67KS+1vUmRO9PVPQmAvQAA + + +False +-1.5707963267949 +15 +uQ67KS+1vUmRO9PVPQmAvQAA + + +False +-0.523598775598299 +30 +epHead +su8oYR2Ky0aSXbd6TlFoXAAA + + +False +0.523598775598299 +30 +epTail +IT/R9YctZE+fstolgXNfRwAA + + +False +0.523598775598299 +25 +epHead +su8oYR2Ky0aSXbd6TlFoXAAA + + +False +-0.523598775598299 +25 +epTail +IT/R9YctZE+fstolgXNfRwAA + + +False +-0.785398163397448 +40 +epHead +su8oYR2Ky0aSXbd6TlFoXAAA + + +False +0.785398163397448 +40 +epTail +IT/R9YctZE+fstolgXNfRwAA + + +False +-1008 +-1236 +50 +8 +su8oYR2Ky0aSXbd6TlFoXAAA + + +False +-1008 +-1236 +50 +8 +IT/R9YctZE+fstolgXNfRwAA + + + +clMaroon +$00B9FFFF +192,587;253,587 +S89azVl1DEerKr0Lg7uYIwAA +Y9Di27a99UCLuicgXHRPbQAA ++UDQJ377E0yfeyDDN+u8twAA + +False +1.5707963267949 +15 +S89azVl1DEerKr0Lg7uYIwAA + + +False +1.5707963267949 +30 +S89azVl1DEerKr0Lg7uYIwAA + + +False +-1.5707963267949 +15 +S89azVl1DEerKr0Lg7uYIwAA + + +False +-0.523598775598299 +30 +epHead +c1DHaSDPuEOz4QdBj45gwQAA + + +False +0.523598775598299 +30 +epTail +r/hRY5C/z0KLE99Zb7wcHwAA + + +False +0.523598775598299 +25 +epHead +c1DHaSDPuEOz4QdBj45gwQAA + + +False +-0.523598775598299 +25 +epTail +r/hRY5C/z0KLE99Zb7wcHwAA + + +False +-0.785398163397448 +40 +epHead +c1DHaSDPuEOz4QdBj45gwQAA + + +False +0.785398163397448 +40 +epTail +r/hRY5C/z0KLE99Zb7wcHwAA + + +False +-1008 +-1236 +50 +8 +c1DHaSDPuEOz4QdBj45gwQAA + + +False +-1008 +-1236 +50 +8 +r/hRY5C/z0KLE99Zb7wcHwAA + + + +clMaroon +$00B9FFFF +190,647;253,647 +UmPi888MJEySape3IDytNQAA +tQieUJFUIUWjBNmfDel6vwAA +LdVy/adykEu3BEUiOmsYBgAA + +False +1.5707963267949 +15 +UmPi888MJEySape3IDytNQAA + + +False +1.5707963267949 +30 +UmPi888MJEySape3IDytNQAA + + +False +-1.5707963267949 +15 +UmPi888MJEySape3IDytNQAA + + +False +-0.523598775598299 +30 +epHead +5AK+S/x8EU+IYfu9OvYF4QAA + + +False +0.523598775598299 +30 +epTail +0G7qZy+/sEqjVd5kqmhK0QAA + + +False +0.523598775598299 +25 +epHead +5AK+S/x8EU+IYfu9OvYF4QAA + + +False +-0.523598775598299 +25 +epTail +0G7qZy+/sEqjVd5kqmhK0QAA + + +False +-0.785398163397448 +40 +epHead +5AK+S/x8EU+IYfu9OvYF4QAA + + +False +0.785398163397448 +40 +epTail +0G7qZy+/sEqjVd5kqmhK0QAA + + +False +-1008 +-1236 +50 +8 +5AK+S/x8EU+IYfu9OvYF4QAA + + +False +-1008 +-1236 +50 +8 +0G7qZy+/sEqjVd5kqmhK0QAA + + + +clMaroon +$00B9FFFF +196,175;253,175 +WED3oZHyO0Sbd335J3t4SwAA +pkAZPt0EzUO5vbW8/2ISDgAA +WZ6Nv0dBuES8PyEoPwv1hAAA + +False +1.5707963267949 +15 +WED3oZHyO0Sbd335J3t4SwAA + + +False +1.5707963267949 +30 +WED3oZHyO0Sbd335J3t4SwAA + + +False +-1.5707963267949 +15 +WED3oZHyO0Sbd335J3t4SwAA + + +False +-0.523598775598299 +30 +epHead +6hqoLK2vfEyhVl9t+07/sQAA + + +False +0.523598775598299 +30 +epTail +BtfJFt8gzkWLxq07KGt8ZQAA + + +False +0.523598775598299 +25 +epHead +6hqoLK2vfEyhVl9t+07/sQAA + + +False +-0.523598775598299 +25 +epTail +BtfJFt8gzkWLxq07KGt8ZQAA + + +False +-0.785398163397448 +40 +epHead +6hqoLK2vfEyhVl9t+07/sQAA + + +False +0.785398163397448 +40 +epTail +BtfJFt8gzkWLxq07KGt8ZQAA + + +False +-1008 +-1236 +50 +8 +6hqoLK2vfEyhVl9t+07/sQAA + + +False +-1008 +-1236 +50 +8 +BtfJFt8gzkWLxq07KGt8ZQAA + + + +clMaroon +$00B9FFFF +185,707;253,707 +OaMYngAfm0WoiHZwhZD+qQAA +T2cKdPg1Bk+hDccckoYQ5QAA +H35H/g998EO5+b+My/9TGwAA + +False +1.5707963267949 +15 +OaMYngAfm0WoiHZwhZD+qQAA + + +False +1.5707963267949 +30 +OaMYngAfm0WoiHZwhZD+qQAA + + +False +-1.5707963267949 +15 +OaMYngAfm0WoiHZwhZD+qQAA + + +False +-0.523598775598299 +30 +epHead +cmrnCjXFp0S8tNPvjvqbWgAA + + +False +0.523598775598299 +30 +epTail +Dwy9nxvM50Cbv0guTPXG+QAA + + +False +0.523598775598299 +25 +epHead +cmrnCjXFp0S8tNPvjvqbWgAA + + +False +-0.523598775598299 +25 +epTail +Dwy9nxvM50Cbv0guTPXG+QAA + + +False +-0.785398163397448 +40 +epHead +cmrnCjXFp0S8tNPvjvqbWgAA + + +False +0.785398163397448 +40 +epTail +Dwy9nxvM50Cbv0guTPXG+QAA + + +False +-1036 +-1236 +50 +8 +cmrnCjXFp0S8tNPvjvqbWgAA + + +False +-1036 +-1236 +50 +8 +Dwy9nxvM50Cbv0guTPXG+QAA + + + +clMaroon +$0080FF80 +51 +204 +138 +32 +tptycT8EmUmriJ3RFm3kFAAA + + +1 +analysis-action + + +False + + +False + + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + + +clMaroon +$0080FF80 +12 +104 +190 +32 +jic239+6CEiL3vfxIBKzZwAA + + +1 +usr-bug-report-action + + +False + + +False + + + +False +jic239+6CEiL3vfxIBKzZwAA + + +False +jic239+6CEiL3vfxIBKzZwAA + + +False +jic239+6CEiL3vfxIBKzZwAA + + + +clMaroon +$00B9FFFF +185,204;253,188 +IoGZLKJYy0Su7gKold2FugAA +pkAZPt0EzUO5vbW8/2ISDgAA +UyNk1RnZTki1ekm3+nWlBAAA + +False +1.5707963267949 +15 +IoGZLKJYy0Su7gKold2FugAA + + +False +1.5707963267949 +30 +IoGZLKJYy0Su7gKold2FugAA + + +False +-1.5707963267949 +15 +IoGZLKJYy0Su7gKold2FugAA + + +False +-0.523598775598299 +30 +epHead +npHVEpJLck2XAMV9s8g6VwAA + + +False +0.523598775598299 +30 +epTail +J3TF5Wds2UivZ3unkZY6DwAA + + +False +0.523598775598299 +25 +epHead +npHVEpJLck2XAMV9s8g6VwAA + + +False +-0.523598775598299 +25 +epTail +J3TF5Wds2UivZ3unkZY6DwAA + + +False +-0.785398163397448 +40 +epHead +npHVEpJLck2XAMV9s8g6VwAA + + +False +0.785398163397448 +40 +epTail +J3TF5Wds2UivZ3unkZY6DwAA + + +False +-1008 +-1236 +50 +8 +npHVEpJLck2XAMV9s8g6VwAA + + +False +-1008 +-1236 +50 +8 +J3TF5Wds2UivZ3unkZY6DwAA + + + +clMaroon +$00FF80FF +406 +588 +168 +32 +sl9IvUV4W0Kodgc58LjsVgAA + + +1 +complete-estimate + + +False + + +False + + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + + +clMaroon +$00B9FFFF +489,619;489,652 +KPYLQRKmIkeAc/y+UUmN4QAA ++sKzDE+8zkS7xWQbBBTVcwAA +IY8NFiPGQkOPFFwtq6H0ZgAA + +False +1.5707963267949 +15 +KPYLQRKmIkeAc/y+UUmN4QAA + + +False +1.5707963267949 +30 +KPYLQRKmIkeAc/y+UUmN4QAA + + +False +-1.5707963267949 +15 +KPYLQRKmIkeAc/y+UUmN4QAA + + +False +-0.523598775598299 +30 +epHead +BlAGbbIi30aMaBEtftLGIAAA + + +False +0.523598775598299 +30 +epTail +lrh/7WQ3A0mIOTZd1oStcgAA + + +False +0.523598775598299 +25 +epHead +BlAGbbIi30aMaBEtftLGIAAA + + +False +-0.523598775598299 +25 +epTail +lrh/7WQ3A0mIOTZd1oStcgAA + + +False +-0.785398163397448 +40 +epHead +BlAGbbIi30aMaBEtftLGIAAA + + +False +0.785398163397448 +40 +epTail +lrh/7WQ3A0mIOTZd1oStcgAA + + +False +-1008 +-1236 +50 +8 +BlAGbbIi30aMaBEtftLGIAAA + + +False +-1008 +-1236 +50 +8 +lrh/7WQ3A0mIOTZd1oStcgAA + + + +clMaroon +$0080FF80 +452 +32 +113 +32 +hWsqFBqliU2am4OA8VEXDgAA + + +1 +using-action + + +False + + +False + + + +False +hWsqFBqliU2am4OA8VEXDgAA + + +False +hWsqFBqliU2am4OA8VEXDgAA + + +False +hWsqFBqliU2am4OA8VEXDgAA + + + +clMaroon +$00B9FFFF +372,176;396,176;396,296;372,296 +FAmlbTk0n0ytt/cqGfgskwAA +05y9pi2UcU6ptxllVr+G/gAA +pkAZPt0EzUO5vbW8/2ISDgAA + +False +1.5707963267949 +15 +FAmlbTk0n0ytt/cqGfgskwAA + + +False +1.5707963267949 +30 +FAmlbTk0n0ytt/cqGfgskwAA + + +False +-1.5707963267949 +15 +FAmlbTk0n0ytt/cqGfgskwAA + + +False +-0.523598775598299 +30 +epHead +WDInVNo55Uu7BHXfcUQLNgAA + + +False +0.523598775598299 +30 +epTail +tXhFQ7TewkWyBpAaKgAS+QAA + + +False +0.523598775598299 +25 +epHead +WDInVNo55Uu7BHXfcUQLNgAA + + +False +-0.523598775598299 +25 +epTail +tXhFQ7TewkWyBpAaKgAS+QAA + + +False +-0.785398163397448 +40 +epHead +WDInVNo55Uu7BHXfcUQLNgAA + + +False +0.785398163397448 +40 +epTail +tXhFQ7TewkWyBpAaKgAS+QAA + + +False +-1008 +-1236 +50 +8 +WDInVNo55Uu7BHXfcUQLNgAA + + +False +-1008 +-1236 +50 +8 +tXhFQ7TewkWyBpAaKgAS+QAA + + + +clMaroon +$00B9FFFF +201,119;240,119 +powHE2AyUUeexm1F5fODTAAA +op7TXMmXt0mHqk1AIwA74gAA +YVBwJiAt70+Y3BJSw5fjFgAA + +False +1.5707963267949 +15 +powHE2AyUUeexm1F5fODTAAA + + +False +1.5707963267949 +30 +powHE2AyUUeexm1F5fODTAAA + + +False +-1.5707963267949 +15 +powHE2AyUUeexm1F5fODTAAA + + +False +-0.523598775598299 +30 +epHead +gfyHi9WUpE6GD9hBzk2snQAA + + +False +0.523598775598299 +30 +epTail +YjM/m1UlCki4/Q0e0sh8lgAA + + +False +0.523598775598299 +25 +epHead +gfyHi9WUpE6GD9hBzk2snQAA + + +False +-0.523598775598299 +25 +epTail +YjM/m1UlCki4/Q0e0sh8lgAA + + +False +-0.785398163397448 +40 +epHead +gfyHi9WUpE6GD9hBzk2snQAA + + +False +0.785398163397448 +40 +epTail +YjM/m1UlCki4/Q0e0sh8lgAA + + +False +-368 +-1180 +50 +8 +gfyHi9WUpE6GD9hBzk2snQAA + + +False +-368 +-1180 +50 +8 +YjM/m1UlCki4/Q0e0sh8lgAA + + + +clMaroon +clSilver +652 +104 +110 +32 +H7tysEnUp0+p4o84YYVC8wAA + + +1 +bugfix-work + + +False + + +False + + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + + +clMaroon +$00B9FFFF +398,119;652,119 ++gvlzndWo0SXFj3rSfMCdQAA +gVBoAJXO/kqra8XiHFVH7QAA +op7TXMmXt0mHqk1AIwA74gAA + +False +1.5707963267949 +15 ++gvlzndWo0SXFj3rSfMCdQAA + + +False +1.5707963267949 +30 ++gvlzndWo0SXFj3rSfMCdQAA + + +False +-1.5707963267949 +15 ++gvlzndWo0SXFj3rSfMCdQAA + + +False +-0.523598775598299 +30 +epHead +o/0hT+QIWUatedossmtPBQAA + + +False +0.523598775598299 +30 +epTail +5RC8wEWMEE64UO9nj5kBkAAA + + +False +0.523598775598299 +25 +epHead +o/0hT+QIWUatedossmtPBQAA + + +False +-0.523598775598299 +25 +epTail +5RC8wEWMEE64UO9nj5kBkAAA + + +False +-0.785398163397448 +40 +epHead +o/0hT+QIWUatedossmtPBQAA + + +False +0.785398163397448 +40 +epTail +5RC8wEWMEE64UO9nj5kBkAAA + + +False +-1008 +-1236 +50 +8 +o/0hT+QIWUatedossmtPBQAA + + +False +-1008 +-1236 +50 +8 +5RC8wEWMEE64UO9nj5kBkAAA + + + +clMaroon +$0080FF80 +252 +32 +138 +32 +tptycT8EmUmriJ3RFm3kFAAA + + +1 +analysis-action + + +False + + +False + + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + + +clMaroon +$00B9FFFF +210,36;252,40 +Ycu282Q90kSZPuP8Y2664QAA +3nCDuBMsK0+QzoSS/9JHsgAA +7uNpzIMfD0eMWIaeUbLlHQAA + +False +1.5707963267949 +15 +Ycu282Q90kSZPuP8Y2664QAA + + +False +1.5707963267949 +30 +Ycu282Q90kSZPuP8Y2664QAA + + +False +-1.5707963267949 +15 +Ycu282Q90kSZPuP8Y2664QAA + + +False +-0.523598775598299 +30 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +0.523598775598299 +30 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +0.523598775598299 +25 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +-0.523598775598299 +25 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +-0.785398163397448 +40 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +0.785398163397448 +40 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +-1008 +-1236 +50 +8 +tbE2qZkS9UCvoD6eysPdBQAA + + +False +-1008 +-1236 +50 +8 +8Gn/k11xTkGZ83K2PTY6tgAA + + + +clMaroon +$00B9FFFF +183,60;252,53 +2f8CCoiKYEm2bnh0fSgF5AAA +3nCDuBMsK0+QzoSS/9JHsgAA +KLbcUDvcykStsj8g95lfAgAA + +False +1.5707963267949 +15 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +1.5707963267949 +30 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +-1.5707963267949 +15 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +-0.523598775598299 +30 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +0.523598775598299 +30 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +0.523598775598299 +25 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +-0.523598775598299 +25 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +-0.785398163397448 +40 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +0.785398163397448 +40 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +-1008 +-1236 +50 +8 +XqdZXwSYokCQBpZDzAi8kQAA + + +False +-1008 +-1236 +50 +8 +FMzzdvZAeUWKXvIN8LFkfwAA + + + + + +dev-initial-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +F7Rmog3w4EughQCSKf38hgAA +13 + +clMaroon +28 +22 +208 +339 +System + + +clMaroon +$00B9FFFF +61 +98 +134 +45 +kM7+GQ5RuEmygAJdSluSjQAA + + +1 +src-pkg-create + + +False + + +False + + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + + +clMaroon +$00B9FFFF +76 +276 +100 +32 +KmQBouG6c0yb16gPnUnBtQAA + + +1 +RAD-demo + + +False + + +False + + + +False +KmQBouG6c0yb16gPnUnBtQAA + + +False +KmQBouG6c0yb16gPnUnBtQAA + + +False +KmQBouG6c0yb16gPnUnBtQAA + + + +clMaroon +$00B9FFFF +127,142;127,154 +YcGgDGXOZ06J+TZOxU72agAA +MD2wdRztkUaHPYJptdpRnwAA +g9FXZVEqkEeDovQh5ld2zgAA + +False +1.5707963267949 +15 +YcGgDGXOZ06J+TZOxU72agAA + + +False +1.5707963267949 +30 +YcGgDGXOZ06J+TZOxU72agAA + + +False +-1.5707963267949 +15 +YcGgDGXOZ06J+TZOxU72agAA + + +False +-0.523598775598299 +30 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +0.523598775598299 +30 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +0.523598775598299 +25 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +-0.523598775598299 +25 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +-0.785398163397448 +40 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +0.785398163397448 +40 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +-2056 +-996 +50 +8 +W6JXNHPDXE+JzttRtRevOgAA + + +False +-2056 +-996 +50 +8 +rO/Oarhbpk6wEn45hIpPfAAA + + + +clMaroon +$00B9FFFF +61 +46 +135 +45 +l2Lw5fePkE+9xXcdzSY+bwAA + + +1 +dev-env-install + + +False + + +False + + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + + +clMaroon +$00B9FFFF +128,90;128,98 +3RL8yaG7p0udrs0v9djevAAA +g9FXZVEqkEeDovQh5ld2zgAA +Hb/FVc/wi0OFVH1zZMj5cQAA + +False +1.5707963267949 +15 +3RL8yaG7p0udrs0v9djevAAA + + +False +1.5707963267949 +30 +3RL8yaG7p0udrs0v9djevAAA + + +False +-1.5707963267949 +15 +3RL8yaG7p0udrs0v9djevAAA + + +False +-0.523598775598299 +30 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +0.523598775598299 +30 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +0.523598775598299 +25 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +-0.523598775598299 +25 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +-0.785398163397448 +40 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +0.785398163397448 +40 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +-2056 +-996 +50 +8 +La7Sdx9zEUWWIkxIncjJuAAA + + +False +-2056 +-996 +50 +8 +h4chvQo17kKpYAZk9SZs0wAA + + + +clMaroon +$00B9FFFF +54 +154 +148 +45 +ofqv4KD9ukybRvF//Fek/AAA + + +1 +web home pages + + +False + + +False + + + +False +ofqv4KD9ukybRvF//Fek/AAA + + +False +ofqv4KD9ukybRvF//Fek/AAA + + +False +ofqv4KD9ukybRvF//Fek/AAA + + + +clMaroon +$00B9FFFF +127,198;127,218 +BYyEw6WhrkigDw+109evLAAA +JUjJ0DqUdUiwoes9veWzIgAA +MD2wdRztkUaHPYJptdpRnwAA + +False +1.5707963267949 +15 +BYyEw6WhrkigDw+109evLAAA + + +False +1.5707963267949 +30 +BYyEw6WhrkigDw+109evLAAA + + +False +-1.5707963267949 +15 +BYyEw6WhrkigDw+109evLAAA + + +False +-0.523598775598299 +30 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +0.523598775598299 +30 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +0.523598775598299 +25 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +-0.523598775598299 +25 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +-0.785398163397448 +40 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +0.785398163397448 +40 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +-2056 +-996 +50 +8 +2dUTUSyX8USUOoaapULmuQAA + + +False +-2056 +-996 +50 +8 +Dk4WLVZ+SU+WfPXc7TG0IwAA + + + +clMaroon +$00B9FFFF +34 +218 +189 +45 +czS7yLr6oUygLwEMTWJMVgAA + + +1 +first-ver-dev-env-chk + + +False + + +False + + + +False +czS7yLr6oUygLwEMTWJMVgAA + + +False +czS7yLr6oUygLwEMTWJMVgAA + + +False +czS7yLr6oUygLwEMTWJMVgAA + + + +clMaroon +$00B9FFFF +127,262;126,276 +ULUs5j3aC0Gd9Vn1OUTU2wAA +jJnr+ewJmkiXbJ8FW5RHwQAA +JUjJ0DqUdUiwoes9veWzIgAA + +False +1.5707963267949 +15 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +1.5707963267949 +30 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +-1.5707963267949 +15 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +-0.523598775598299 +30 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +0.523598775598299 +30 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +0.523598775598299 +25 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +-0.523598775598299 +25 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +-0.785398163397448 +40 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +0.785398163397448 +40 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +-2056 +-996 +50 +8 +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +-2056 +-996 +50 +8 +XXlOcGC2n0emsre13Wy0GgAA + + + +clMaroon +$00B9FFFF +74 +26 +109 +23 +dev-initial-procedure + + + +clMaroon +$00B9FFFF +60 +320 +132 +32 +4Ng728cyoEW6niFYPfKpFAAA + + +1 +end-procedure + + +False + + +False + + + +False +4Ng728cyoEW6niFYPfKpFAAA + + +False +4Ng728cyoEW6niFYPfKpFAAA + + +False +4Ng728cyoEW6niFYPfKpFAAA + + + +clMaroon +$00B9FFFF +125,307;125,320 +ucnlPfSho0+nLeC2/imr6wAA +70rDX5jwP0iWbeW/wLyyFwAA +jJnr+ewJmkiXbJ8FW5RHwQAA + +False +1.5707963267949 +15 +ucnlPfSho0+nLeC2/imr6wAA + + +False +1.5707963267949 +30 +ucnlPfSho0+nLeC2/imr6wAA + + +False +-1.5707963267949 +15 +ucnlPfSho0+nLeC2/imr6wAA + + +False +-0.523598775598299 +30 +epHead +hxKkcKewvkuhqVgosrEOqAAA + + +False +0.523598775598299 +30 +epTail +7Yo61DFsNUaIwp+0+TNjXwAA + + +False +0.523598775598299 +25 +epHead +hxKkcKewvkuhqVgosrEOqAAA + + +False +-0.523598775598299 +25 +epTail +7Yo61DFsNUaIwp+0+TNjXwAA + + +False +-0.785398163397448 +40 +epHead +hxKkcKewvkuhqVgosrEOqAAA + + +False +0.785398163397448 +40 +epTail +7Yo61DFsNUaIwp+0+TNjXwAA + + +False +-1000 +-1000 +50 +8 +hxKkcKewvkuhqVgosrEOqAAA + + +False +-1000 +-1000 +50 +8 +7Yo61DFsNUaIwp+0+TNjXwAA + + + + + +after-develop-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +wscyfYAYZkafubA/1NDMYwAA + + + +docment-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +3PhU1VdqeEmvUNILZTm2/QAA +9 + +clMaroon +38 +38 +185 +273 +System + + +clMaroon +$00B9FFFF +67 +128 +121 +45 +lOyDrRE6cEms6LglvRhNKwAA + + +1 +testing + + +False + + +False + + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + + +clMaroon +$00B9FFFF +53 +190 +148 +45 +ucei5JvgaEarsuGuZmgj7QAA + + +1 +doc-tutorial-web + + +False + + +False + + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + + +clMaroon +$00B9FFFF +67 +252 +121 +45 +ZFe9gOmpTEWMgVssyEcAWAAA + + +1 +version-pkg + + +False + + +False + + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + + +clMaroon +$00B9FFFF +127,172;127,190 +hKV30qElWkWAVhrHK7PJbAAA +IygCYEX6+Uu+11eoseJSngAA +kZAXDcSScUSa3zPofC/wwAAA + +False +1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +1.5707963267949 +30 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-0.523598775598299 +30 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.523598775598299 +30 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +0.523598775598299 +25 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-0.523598775598299 +25 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-0.785398163397448 +40 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.785398163397448 +40 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-2076 +-1312 +50 +8 +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-2076 +-1312 +50 +8 +WHhyhUoWo0iDDhj6FaqW/gAA + + + +clMaroon +$00B9FFFF +126,234;126,252 +Htop0thy70qsJ36MwSIctgAA +cr3AMb7W2EWA6biraBdVIQAA +IygCYEX6+Uu+11eoseJSngAA + +False +1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +1.5707963267949 +30 +Htop0thy70qsJ36MwSIctgAA + + +False +-1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +-0.523598775598299 +30 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.523598775598299 +30 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +0.523598775598299 +25 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-0.523598775598299 +25 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-0.785398163397448 +40 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.785398163397448 +40 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-2076 +-1312 +50 +8 +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-2076 +-1312 +50 +8 +bDyGtYJmuUiVC+pPkc7oHgAA + + + +clMaroon +$00B9FFFF +67 +66 +121 +45 +aUVRiLFY4USAN9h1PY1/vAAA + + +1 +multi-lang + + +False + + +False + + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + + +clMaroon +$00B9FFFF +127,110;127,128 ++nJDFiS7VECOJ4vWaYvszgAA +kZAXDcSScUSa3zPofC/wwAAA +fafd82Xh5Uu1mt+678C5PwAA + +False +1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +1.5707963267949 +30 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-0.523598775598299 +30 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.523598775598299 +30 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +0.523598775598299 +25 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-0.523598775598299 +25 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-0.785398163397448 +40 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.785398163397448 +40 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-2068 +-1288 +50 +8 +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-2068 +-1288 +50 +8 +VvsNJNyOO0e86/eHwYM58QAA + + + +clMaroon +$00B9FFFF +82 +42 +109 +23 +after-dev-procedure + + + + + +testing-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +lwwdtvTW6EyqvIRscOot6QAA +9 + +clMaroon +48 +48 +185 +273 +System + + +clMaroon +$00B9FFFF +77 +138 +121 +45 +lOyDrRE6cEms6LglvRhNKwAA + + +1 +testing + + +False + + +False + + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + + +clMaroon +$00B9FFFF +63 +200 +148 +45 +ucei5JvgaEarsuGuZmgj7QAA + + +1 +doc-tutorial-web + + +False + + +False + + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + + +clMaroon +$00B9FFFF +77 +262 +121 +45 +ZFe9gOmpTEWMgVssyEcAWAAA + + +1 +version-pkg + + +False + + +False + + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + + +clMaroon +$00B9FFFF +137,182;137,200 +hKV30qElWkWAVhrHK7PJbAAA +ugI2euwM3Ey7T7DNJ++xmgAA +qudITNuevEOUiPdD67icGQAA + +False +1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +1.5707963267949 +30 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-0.523598775598299 +30 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.523598775598299 +30 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +0.523598775598299 +25 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-0.523598775598299 +25 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-0.785398163397448 +40 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.785398163397448 +40 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-2076 +-1312 +50 +8 +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-2076 +-1312 +50 +8 +WHhyhUoWo0iDDhj6FaqW/gAA + + + +clMaroon +$00B9FFFF +136,244;136,262 +Htop0thy70qsJ36MwSIctgAA +0JMCaRFeCk+HcMqp5TyNyAAA +ugI2euwM3Ey7T7DNJ++xmgAA + +False +1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +1.5707963267949 +30 +Htop0thy70qsJ36MwSIctgAA + + +False +-1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +-0.523598775598299 +30 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.523598775598299 +30 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +0.523598775598299 +25 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-0.523598775598299 +25 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-0.785398163397448 +40 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.785398163397448 +40 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-2076 +-1312 +50 +8 +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-2076 +-1312 +50 +8 +bDyGtYJmuUiVC+pPkc7oHgAA + + + +clMaroon +$00B9FFFF +77 +76 +121 +45 +aUVRiLFY4USAN9h1PY1/vAAA + + +1 +multi-lang + + +False + + +False + + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + + +clMaroon +$00B9FFFF +137,120;137,138 ++nJDFiS7VECOJ4vWaYvszgAA +qudITNuevEOUiPdD67icGQAA +4gxKHPiS4kKv1jznPUiVLAAA + +False +1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +1.5707963267949 +30 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-0.523598775598299 +30 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.523598775598299 +30 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +0.523598775598299 +25 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-0.523598775598299 +25 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-0.785398163397448 +40 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.785398163397448 +40 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-2068 +-1288 +50 +8 +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-2068 +-1288 +50 +8 +VvsNJNyOO0e86/eHwYM58QAA + + + +clMaroon +$00B9FFFF +92 +52 +109 +23 +after-dev-procedure + + + + + +publish-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +dzXgTAQgkku8i81bEq7qFAAA +11 + +clMaroon +58 +42 +196 +353 +System + + +clMaroon +$00B9FFFF +91 +137 +131 +45 +lEIXTXT9L0CS9sEhjP/8NQAA + + +1 +pkg-repo-sync + + +False + + +False + + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + + +clMaroon +$00B9FFFF +89 +204 +135 +45 +jmiilGYeBU+1y4Yw2n8CKAAA + + +1 +download-build + + +False + + +False + + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + + +clMaroon +$00B9FFFF +85 +271 +142 +45 +RfRTk7cK0061dLioGm8l7wAA + + +1 +loopbak-testing + + +False + + +False + + + +False +RfRTk7cK0061dLioGm8l7wAA + + +False +RfRTk7cK0061dLioGm8l7wAA + + +False +RfRTk7cK0061dLioGm8l7wAA + + + +clMaroon +$00B9FFFF +100 +338 +113 +32 +G18zTBUAj0+SdrsOmksR0QAA + + +1 +publish-task + + +False + + +False + + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + + +clMaroon +$00B9FFFF +156,181;156,204 +t/ADlzXN00KW0NiGhwkclQAA +vblLAfzXRUOgCjpCebaQyAAA +VXT22UgSZE6QUG18w3YrRQAA + +False +1.5707963267949 +15 +t/ADlzXN00KW0NiGhwkclQAA + + +False +1.5707963267949 +30 +t/ADlzXN00KW0NiGhwkclQAA + + +False +-1.5707963267949 +15 +t/ADlzXN00KW0NiGhwkclQAA + + +False +-0.523598775598299 +30 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +0.523598775598299 +30 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +0.523598775598299 +25 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +-0.523598775598299 +25 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +-0.785398163397448 +40 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +0.785398163397448 +40 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +-2032 +-1468 +50 +8 +LL86l17PZku+YBsr/fUklwAA + + +False +-2032 +-1468 +50 +8 +bvYo1TGY6U2Io35TQ/yATAAA + + + +clMaroon +$00B9FFFF +156,248;155,271 +5n9wkh0NQUu8BFWyytdErgAA +obfQS5n3b0uAe1Y1fNtQ1gAA +vblLAfzXRUOgCjpCebaQyAAA + +False +1.5707963267949 +15 +5n9wkh0NQUu8BFWyytdErgAA + + +False +1.5707963267949 +30 +5n9wkh0NQUu8BFWyytdErgAA + + +False +-1.5707963267949 +15 +5n9wkh0NQUu8BFWyytdErgAA + + +False +-0.523598775598299 +30 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +0.523598775598299 +30 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +0.523598775598299 +25 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +-0.523598775598299 +25 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +-0.785398163397448 +40 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +0.785398163397448 +40 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +-2032 +-1468 +50 +8 +P+S209BDDkSnrN4WPl8+WAAA + + +False +-2032 +-1468 +50 +8 +UYbXc0CahESM869EpDq6lwAA + + + +clMaroon +$00B9FFFF +155,315;156,338 +1QbYYnq3ykqiPL0Gv6UkSwAA +M4HlmVZXi0yRAE9UMU0zRgAA +obfQS5n3b0uAe1Y1fNtQ1gAA + +False +1.5707963267949 +15 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +1.5707963267949 +30 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +-1.5707963267949 +15 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +-0.523598775598299 +30 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +0.523598775598299 +30 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +0.523598775598299 +25 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +-0.523598775598299 +25 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +-0.785398163397448 +40 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +0.785398163397448 +40 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +-2032 +-1468 +50 +8 +2J0+TPdjaECdzYN0YQ2guQAA + + +False +-2032 +-1468 +50 +8 +WMjnuHQF3kiQvKAfM+S81wAA + + + +clMaroon +$00B9FFFF +73 +70 +166 +45 +bjrraLbGKUSY+GYzLNk5RAAA + + +1 +launch-pkg-publish + + +False + + +False + + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + + +clMaroon +$00B9FFFF +155,114;156,137 +4wmxJ9R9R0eU6Jn8Ho3xFwAA +VXT22UgSZE6QUG18w3YrRQAA +ZCA8lMYtvkK0TOXL+AgswwAA + +False +1.5707963267949 +15 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +1.5707963267949 +30 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +-1.5707963267949 +15 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +-0.523598775598299 +30 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +0.523598775598299 +30 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +0.523598775598299 +25 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +-0.523598775598299 +25 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +-0.785398163397448 +40 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +0.785398163397448 +40 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +-1876 +-1508 +50 +8 +7JwpGqJmgku60xKurQDyPwAA + + +False +-1876 +-1508 +50 +8 +L7xnZ29mQEadCI+TRP2QQAAA + + + +clMaroon +$00B9FFFF +106 +46 +96 +23 +publish-procedure + + + + + +design-prodedure +yePcB6NdXUG1SBs2wQJA7gAA + +xDqjmnV1EE274hI5eX4EuQAA +3 + +clMaroon +$00B9FFFF +46 +38 +200 +300 +System + + +clMaroon +$00B9FFFF +102 +90 +70 +32 +GB5fgt+BCEuZu+MykpdKRQAA + + +1 +design + + +False + + +False + + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + + +clMaroon +$00B9FFFF +94 +42 +94 +23 +design-procedure + + + + + +bug-report-task +yePcB6NdXUG1SBs2wQJA7gAA + +PW8yW9pEYkid5X6nOzwaKwAA +5 + +clMaroon +$00B9FFFF +56 +48 +200 +300 +System + + +clMaroon +$00B9FFFF +88 +52 +115 +23 +bug-report-procedure + + + +clMaroon +$00B9FFFF +108 +96 +101 +32 +bX1Gcdx2ME+p8q+9ZuNdKAAA + + +1 +bug-report + + +False + + +False + + + +False +bX1Gcdx2ME+p8q+9ZuNdKAAA + + +False +bX1Gcdx2ME+p8q+9ZuNdKAAA + + +False +bX1Gcdx2ME+p8q+9ZuNdKAAA + + + +clMaroon +$00B9FFFF +88 +161 +131 +32 +5Yonx0jXgUiliXhd1LHAEgAA + + +1 +bug-re-testing + + +False + + +False + + + +False +5Yonx0jXgUiliXhd1LHAEgAA + + +False +5Yonx0jXgUiliXhd1LHAEgAA + + +False +5Yonx0jXgUiliXhd1LHAEgAA + + + +clMaroon +$00B9FFFF +104 +220 +106 +32 +TiqUoHnaOUevV4hK4Dz2MgAA + + +1 +bug-submit + + +False + + +False + + + +False +TiqUoHnaOUevV4hK4Dz2MgAA + + +False +TiqUoHnaOUevV4hK4Dz2MgAA + + +False +TiqUoHnaOUevV4hK4Dz2MgAA + + + + +141 + +Analysis Model +UMLStandard +analysisModel +yePcB6NdXUG1SBs2wQJA7gAA +23 + +build-pkg +BSZfgYLf+UenyGFbr+pLkAAA +1 +d80+2bpPQEWd7xFbiS1W/QAA +1 + +build-pkg +dDcpfNoxBUqy9oolGaPx0gAA + +li5qOhdL3EywRkIibb85HgAA + + +5 +MNWsgkXOBkGGgVZDdul4wwAA +sbGMwLTYC0iPKxhMH07wNwAA +msQ48rxqPEu61hvT3MeGjAAA +hgxswP4hVESXBm2wFWvVcwAA +D7TjLucAs0GEm5kB3a48nQAA +1 +5gOKGIQCUUm9L2zzA0ihPwAA +3 +gE0dxYNQQk6+JMyejPbD0AAA +1+gcf+vp9UmuwKSWYw/q2AAA +SylI2hFzwEeEyBv836BczAAA + + +build-config +BSZfgYLf+UenyGFbr+pLkAAA +1 +7JSGJYt6DkKIltRHc7ZjjwAA +1 + +build-config +MNfuyG0iBUiHZjmp8cHgZAAA + +Rue74u4PaUuHI0nqxQePdgAA + + +1 +hgxswP4hVESXBm2wFWvVcwAA + + +build-pkglist +BSZfgYLf+UenyGFbr+pLkAAA +1 +0p/90i+HQk+PTlMz5cboYQAA +1 + +build-pkglist +ulDQuuX3NUK3rZULACE1rwAA + +FtQxKj4yUkaT6NimaKKVfQAA + + +2 +5gOKGIQCUUm9L2zzA0ihPwAA +e6psiYw1mUqAWpE0+BvMzwAA +1 +u8pcfLoZm0et+dZoEh63EQAA + + +CCompilerCollection +BSZfgYLf+UenyGFbr+pLkAAA +1 +J1vjbeNnkkCOD1TmM672AwAA +1 + +CCompilerCollection +8GaHfoYho0OH58Fb/r1/wwAA + +mSd/X6+k/EGNlLgYdDkzTQAA + + +1 +msQ48rxqPEu61hvT3MeGjAAA + + +devutils +BSZfgYLf+UenyGFbr+pLkAAA +1 +s24sB0NbR0qJ0UXqzyR5QAAA +1 +MNWsgkXOBkGGgVZDdul4wwAA +1 +wQbKSnCSekyKjTFeI7tFhAAA + + +build-ext-utils +BSZfgYLf+UenyGFbr+pLkAAA +1 +micWrkg2dEqol44gMrgRnwAA +1 +sbGMwLTYC0iPKxhMH07wNwAA + + +soft-repo +BSZfgYLf+UenyGFbr+pLkAAA +1 +1OJ+jtvJzUOTUnGRNLZx9QAA +1 + +soft-repo +nEPUg6e8b0iEP7HhfuJnQgAA + +IxfADsYcqUOzQeMV371fvQAA + + +1 +wObYeAYwXEqWEKmMI+cCBQAA + + +code-mngr +BSZfgYLf+UenyGFbr+pLkAAA +1 +Mp32K0T3yUeiTjZXRy3GmAAA +1 + +code-mngr +fSDUjRTS0EuzKA5KD1YWegAA + +NR89VNkpPUKOxB+nia9hiwAA + + +1 +al7Ey6vM+kaiJQHEFZ17rwAA +1 +D7TjLucAs0GEm5kB3a48nQAA +1 +7tt1GtqhUkiRGXNftPMzmwAA + + +build-res +BSZfgYLf+UenyGFbr+pLkAAA +1 +/FD1CIRw00KUpr3wg3YqqQAA +2 +al7Ey6vM+kaiJQHEFZ17rwAA +e6psiYw1mUqAWpE0+BvMzwAA +3 +vEc8G/U42EKSe8lYsfqw+AAA +9nKgADD4c0K1Ju7SAno9nAAA +OCj2SIVuA0+GWCgP6VtYXwAA + + +BSZfgYLf+UenyGFbr+pLkAAA +ulDQuuX3NUK3rZULACE1rwAA +dDcpfNoxBUqy9oolGaPx0gAA +4 +UoBCufIUMEuVh02PZFeaLQAA +1I+XikHN9kK/t6EfmCSl2AAA +Yhj6u4aCR0a1cYZT4RlFUAAA +/oNB7nuz/EmsI+XHW9mNwgAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +FvqLDu2fxEWj6v1E//JLVAAA +4 +12RF249Lw0G6nu4rpS0PKQAA +TSYZvuWGT063HQhrZXnwswAA +Wh9uDcTiKke8indOdnLx+AAA +dNi0biCobUCHtgHLSB4DowAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +3VktYBg6c0GafkkhrKd5LAAA +4 +zH3LB5Kp+k+RtXF8y3gBJQAA +AFlPvmqXa0WcUJlrCLmd4gAA +93ZyTLwkFUSUCB69LWQQqwAA +LeBR8Xe4KUev5/e3MjUcRQAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +8GaHfoYho0OH58Fb/r1/wwAA +4 +AHnGqbO0/kGTU4QKEsYScwAA +Y7RbLVN23kGR9SWr289rrwAA +2x2sZtHy80usYPz3kI3z1QAA +BK5Y9Y56EkGsokfaRnlDewAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +MNfuyG0iBUiHZjmp8cHgZAAA +4 +8R86nCYMXEGWqEfjdEptdwAA +BaxvJ+mHB0edJuGJJnWXpwAA +swRIhR69xECXY7Hm0VdU1gAA +Msy3y/jcvk6HuMMb9QenZwAA + + +BSZfgYLf+UenyGFbr+pLkAAA +2 + +L1yiPMYx6EyAA2xxRTEU0QAA +dDcpfNoxBUqy9oolGaPx0gAA + + +L1yiPMYx6EyAA2xxRTEU0QAA +fSDUjRTS0EuzKA5KD1YWegAA + + + +BSZfgYLf+UenyGFbr+pLkAAA +4 +FkxkrPmiAkyXlKNWMG0ZKgAA +7qRjaiz8Y02/8IjPJip+RwAA +hyaO0HgmIkahhBHyYzcUvgAA +TfDa35ItK0KUm+1ADO7gLgAA +2 + +R1zBdkBAwk+mm7+XQTKYmwAA +dDcpfNoxBUqy9oolGaPx0gAA +4 +vkWvz4Be7EKnjG09HAI0lwAA +GYmL2i5aQUaxGKAzQuX9egAA +yjKcGdY8ekKPVZWWLqM/6wAA +f5y2gp278kuHvg4nM8S4nQAA + + +R1zBdkBAwk+mm7+XQTKYmwAA +pvhDF96KaEGykg05qmd3jwAA +4 +nMOdDXc1F0SDNw9WnnOG9AAA +VZF+TVC/iEK1We2bIp7d4gAA +UKH5CQTTbE+GpcuqPCsccAAA +TGNi2j7+dEKt9AixnFgTTQAA + + + +BSZfgYLf+UenyGFbr+pLkAAA +4 +WwhFha+1WECbLD243p2h3AAA +6jt28ExI0kyKCW146he6rAAA +6SspI/hB80+l7hPostMZ9gAA +4qL44fMXlUqi569NEIKm/gAA +2 + +SN9GhsPG3EaOZFcQPgCPJQAA +dDcpfNoxBUqy9oolGaPx0gAA +4 +R4xBqApf3EGTaQ3BUUbbgQAA ++4qoi2mJvkutuLRgEKTKvAAA +3eKQsHPkq0C3GhsNVgjTAwAA +wkqwWuTZ7E6Ya9xY2tS+dAAA + + +SN9GhsPG3EaOZFcQPgCPJQAA +nEPUg6e8b0iEP7HhfuJnQgAA +4 +/mEKF2CdXkO+qvCXd5BlyQAA +b4mEYJOuLEWElIBAR+wsTgAA +KokDYCjUO0GHYQRTHw1HmAAA +q/gj0Y/d20yrOBJ5JToeqQAA + + + +BSZfgYLf+UenyGFbr+pLkAAA +fSDUjRTS0EuzKA5KD1YWegAA +pvhDF96KaEGykg05qmd3jwAA + + +BSZfgYLf+UenyGFbr+pLkAAA +ulDQuuX3NUK3rZULACE1rwAA +pvhDF96KaEGykg05qmd3jwAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +fSDUjRTS0EuzKA5KD1YWegAA +4 +yxB73q7LmEq5bftoZyqChgAA +l8o/vkzEVEuW8Z0ESj9HlQAA +0q4mfT8180OBC/2k9nwvzQAA +gSGj8mQyA0eW4arWOFjxmgAA + + +BSZfgYLf+UenyGFbr+pLkAAA +4 +2EmKz1gekUeBYNJEqwk5ywAA +kaZVmwnTuk21j+2fm8qGzgAA +0wFWC8ZHbEuWnNks6iXbJQAA +iXf7s60RO0OEUR4JwNRbOwAA +2 + +aKvfewyzgE2DFbpbrUqRcgAA +pvhDF96KaEGykg05qmd3jwAA +4 +D424m/G3KUiG7LYqWvtilAAA +slHTOpURSEicm2werij8XQAA +s539IwA/MEWjk5PR3mNPOwAA +mCCnjuKULEOwMSaiZkDCRAAA + + +aKvfewyzgE2DFbpbrUqRcgAA +FvqLDu2fxEWj6v1E//JLVAAA +4 +amM0V48QtE+LtX1V+NpK4wAA +dR3D81mWLU67Hzigg8FXxwAA +m+pLG91QP02bu5lY6KLSzAAA +f8W0J6x6VkWJOhnZZGnsGAAA + + + +BSZfgYLf+UenyGFbr+pLkAAA +4 +q9EN5ZUrgkW1YBaEUlNSJgAA +i35rwePtn0e2dmudkVnb+wAA +5mvXcya1M0md/uA7y2TQIQAA +yA/VGm7Eu0yzqagLfS1FigAA +2 + +MzbhBShYo0uTBm9zBJ3IJQAA +ulDQuuX3NUK3rZULACE1rwAA +4 +GndO5+L+XEGYZWuYTo8WZwAA +tq9xchL8WEuHonDjf5BVYAAA +Ur81kW6jjk6GTIC91ukrnwAA +Q3b6JPtGzEqX1L0AOqdNsAAA + + +MzbhBShYo0uTBm9zBJ3IJQAA +pvhDF96KaEGykg05qmd3jwAA +4 +HmJC5ge6e0qQIGXY9346rQAA +FAQVL0M1NUm4ZIaW+4XhQgAA +n5u114I+7U6Bpr9OeXawtgAA +z9YPw3YbgEKyQzl2yX31/wAA + + + +pkg-builder +BSZfgYLf+UenyGFbr+pLkAAA +1 +ccqDzWrIbU67QDaF1jCh3gAA +1 + +pkg-builder +T8bTYhwSAkKMom5PJGDBkAAA + +o+rsUkl11kGIPjXPPm66KAAA +22 + +clMaroon +64 +24 +685 +401 +T8bTYhwSAkKMom5PJGDBkAAA + + +pkg-builder + + +False + + +False + + + + +clMaroon +$00B9FFFF +456 +208 +120 +70 +dDcpfNoxBUqy9oolGaPx0gAA + + +build-pkg + + +False + + +False + + + + +clMaroon +$00B9FFFF +316 +208 +120 +70 +MNfuyG0iBUiHZjmp8cHgZAAA + + +build-config + + +False + + +False + + + + +clMaroon +$00B9FFFF +456 +84 +120 +70 +ulDQuuX3NUK3rZULACE1rwAA + + +build-pkglist + + +False + + +False + + + + +clMaroon +$00B9FFFF +316 +332 +120 +70 +8GaHfoYho0OH58Fb/r1/wwAA + + +CCompilerCollection + + +False + + +False + + + + +clMaroon +$00B9FFFF +608 +332 +120 +70 +FvqLDu2fxEWj6v1E//JLVAAA + + +devutils + + +False + + +False + + + + +clMaroon +$00B9FFFF +176 +332 +120 +70 +3VktYBg6c0GafkkhrKd5LAAA + + +build-ext-utils + + +False + + +False + + + + +clMaroon +$00B9FFFF +608 +84 +120 +70 +nEPUg6e8b0iEP7HhfuJnQgAA + + +soft-repo + + +False + + +False + + + + +clMaroon +$00B9FFFF +456 +332 +120 +70 +fSDUjRTS0EuzKA5KD1YWegAA + + +code-mngr + + +False + + +False + + + + +clMaroon +$00B9FFFF +608 +208 +120 +70 +pvhDF96KaEGykg05qmd3jwAA + + +build-res + + +False + + +False + + + + +clMaroon +$00B9FFFF +515,153;515,208 +5gOKGIQCUUm9L2zzA0ihPwAA +d80+2bpPQEWd7xFbiS1W/QAA +0p/90i+HQk+PTlMz5cboYQAA + +False +1.5707963267949 +15 +5gOKGIQCUUm9L2zzA0ihPwAA + + +False +1.5707963267949 +30 +5gOKGIQCUUm9L2zzA0ihPwAA + + +False +-1.5707963267949 +15 +5gOKGIQCUUm9L2zzA0ihPwAA + + + +clMaroon +$00B9FFFF +558,277;625,332 +MNWsgkXOBkGGgVZDdul4wwAA +s24sB0NbR0qJ0UXqzyR5QAAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +MNWsgkXOBkGGgVZDdul4wwAA + + +False +1.5707963267949 +30 +MNWsgkXOBkGGgVZDdul4wwAA + + +False +-1.5707963267949 +15 +MNWsgkXOBkGGgVZDdul4wwAA + + + +clMaroon +$00B9FFFF +456,268;295,339 +sbGMwLTYC0iPKxhMH07wNwAA +micWrkg2dEqol44gMrgRnwAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +sbGMwLTYC0iPKxhMH07wNwAA + + +False +1.5707963267949 +30 +sbGMwLTYC0iPKxhMH07wNwAA + + +False +-1.5707963267949 +15 +sbGMwLTYC0iPKxhMH07wNwAA + + + +clMaroon +$00B9FFFF +475,277;413,332 +msQ48rxqPEu61hvT3MeGjAAA +J1vjbeNnkkCOD1TmM672AwAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +msQ48rxqPEu61hvT3MeGjAAA + + +False +1.5707963267949 +30 +msQ48rxqPEu61hvT3MeGjAAA + + +False +-1.5707963267949 +15 +msQ48rxqPEu61hvT3MeGjAAA + + + +clMaroon +$00B9FFFF +456,242;435,242 +hgxswP4hVESXBm2wFWvVcwAA +7JSGJYt6DkKIltRHc7ZjjwAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +hgxswP4hVESXBm2wFWvVcwAA + + +False +1.5707963267949 +30 +hgxswP4hVESXBm2wFWvVcwAA + + +False +-1.5707963267949 +15 +hgxswP4hVESXBm2wFWvVcwAA + + + +clMaroon +$00B9FFFF +575,242;608,242 +R1zBdkBAwk+mm7+XQTKYmwAA +/FD1CIRw00KUpr3wg3YqqQAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +R1zBdkBAwk+mm7+XQTKYmwAA + + +False +1.5707963267949 +30 +R1zBdkBAwk+mm7+XQTKYmwAA + + +False +-1.5707963267949 +15 +R1zBdkBAwk+mm7+XQTKYmwAA + + +False +-0.523598775598299 +30 +epHead +vEc8G/U42EKSe8lYsfqw+AAA + + +False +0.523598775598299 +30 +epTail +1+gcf+vp9UmuwKSWYw/q2AAA + + +False +0.523598775598299 +25 +epHead +vEc8G/U42EKSe8lYsfqw+AAA + + +False +-0.523598775598299 +25 +epTail +1+gcf+vp9UmuwKSWYw/q2AAA + + +False +-0.785398163397448 +40 +epHead +vEc8G/U42EKSe8lYsfqw+AAA + + +False +0.785398163397448 +40 +epTail +1+gcf+vp9UmuwKSWYw/q2AAA + + +False +-1000 +-1000 +50 +8 +vEc8G/U42EKSe8lYsfqw+AAA + + +False +-1000 +-1000 +50 +8 +1+gcf+vp9UmuwKSWYw/q2AAA + + + +clMaroon +$00B9FFFF +557,208;624,153 +SN9GhsPG3EaOZFcQPgCPJQAA +1OJ+jtvJzUOTUnGRNLZx9QAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +SN9GhsPG3EaOZFcQPgCPJQAA + + +False +1.5707963267949 +30 +SN9GhsPG3EaOZFcQPgCPJQAA + + +False +-1.5707963267949 +15 +SN9GhsPG3EaOZFcQPgCPJQAA + + +False +-0.523598775598299 +30 +epHead +wObYeAYwXEqWEKmMI+cCBQAA + + +False +0.523598775598299 +30 +epTail +SylI2hFzwEeEyBv836BczAAA + + +False +0.523598775598299 +25 +epHead +wObYeAYwXEqWEKmMI+cCBQAA + + +False +-0.523598775598299 +25 +epTail +SylI2hFzwEeEyBv836BczAAA + + +False +-0.785398163397448 +40 +epHead +wObYeAYwXEqWEKmMI+cCBQAA + + +False +0.785398163397448 +40 +epTail +SylI2hFzwEeEyBv836BczAAA + + +False +-1000 +-1000 +50 +8 +wObYeAYwXEqWEKmMI+cCBQAA + + +False +-1000 +-1000 +50 +8 +SylI2hFzwEeEyBv836BczAAA + + + +clMaroon +$00B9FFFF +515,277;515,332 +D7TjLucAs0GEm5kB3a48nQAA +Mp32K0T3yUeiTjZXRy3GmAAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +D7TjLucAs0GEm5kB3a48nQAA + + +False +1.5707963267949 +30 +D7TjLucAs0GEm5kB3a48nQAA + + +False +-1.5707963267949 +15 +D7TjLucAs0GEm5kB3a48nQAA + + + +clMaroon +$00B9FFFF +667,277;667,332 +aKvfewyzgE2DFbpbrUqRcgAA +s24sB0NbR0qJ0UXqzyR5QAAA +/FD1CIRw00KUpr3wg3YqqQAA + +False +1.5707963267949 +15 +aKvfewyzgE2DFbpbrUqRcgAA + + +False +1.5707963267949 +30 +aKvfewyzgE2DFbpbrUqRcgAA + + +False +-1.5707963267949 +15 +aKvfewyzgE2DFbpbrUqRcgAA + + +False +-0.523598775598299 +30 +epHead +wQbKSnCSekyKjTFeI7tFhAAA + + +False +0.523598775598299 +30 +epTail +9nKgADD4c0K1Ju7SAno9nAAA + + +False +0.523598775598299 +25 +epHead +wQbKSnCSekyKjTFeI7tFhAAA + + +False +-0.523598775598299 +25 +epTail +9nKgADD4c0K1Ju7SAno9nAAA + + +False +-0.785398163397448 +40 +epHead +wQbKSnCSekyKjTFeI7tFhAAA + + +False +0.785398163397448 +40 +epTail +9nKgADD4c0K1Ju7SAno9nAAA + + +False +-1000 +-1000 +50 +8 +wQbKSnCSekyKjTFeI7tFhAAA + + +False +-1000 +-1000 +50 +8 +9nKgADD4c0K1Ju7SAno9nAAA + + + +clMaroon +$00B9FFFF +558,153;625,208 +MzbhBShYo0uTBm9zBJ3IJQAA +/FD1CIRw00KUpr3wg3YqqQAA +0p/90i+HQk+PTlMz5cboYQAA + +False +1.5707963267949 +15 +MzbhBShYo0uTBm9zBJ3IJQAA + + +False +1.5707963267949 +30 +MzbhBShYo0uTBm9zBJ3IJQAA + + +False +-1.5707963267949 +15 +MzbhBShYo0uTBm9zBJ3IJQAA + + +False +-0.523598775598299 +30 +epHead +OCj2SIVuA0+GWCgP6VtYXwAA + + +False +0.523598775598299 +30 +epTail +u8pcfLoZm0et+dZoEh63EQAA + + +False +0.523598775598299 +25 +epHead +OCj2SIVuA0+GWCgP6VtYXwAA + + +False +-0.523598775598299 +25 +epTail +u8pcfLoZm0et+dZoEh63EQAA + + +False +-0.785398163397448 +40 +epHead +OCj2SIVuA0+GWCgP6VtYXwAA + + +False +0.785398163397448 +40 +epTail +u8pcfLoZm0et+dZoEh63EQAA + + +False +-1000 +-1000 +50 +8 +OCj2SIVuA0+GWCgP6VtYXwAA + + +False +-1000 +-1000 +50 +8 +u8pcfLoZm0et+dZoEh63EQAA + + + +clMaroon +84 +52 +217 +278 +associate: relationship of using +dependence: running dependence. + +@ build-pkglist: it is used for building + large number of pkgs. +@ build-pkg: it is used for single pkg, + or a software with several pkgs. +@ build-config: config util for build-pkg + and build-pkglist. it like menuconfig + in 'linux-kernel' or 'buildroot'. +@ build-ext-utils, CCompilerCollection + the basical gnu pkgs running for + build-pkg. +@ code-mngr: tools like SVN/git. +@ devutils: programs used in develop. +@ soft-repo: a tool like apt-get. it + manages the src or exe pkg files + for user or developer + + + +clMaroon +316 +68 +131 +133 +@ build-res: extention + of code temlate file, + code format file, + project sample, + system distribution + pkg-list info. + + + + + + + +dev-initial-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +Rq0Cydd7nEKOfOgn8htc8QAA +2 +9OsI3YefmEShu4VA2aYWsgAA +wVShJ+TldkiCQjPWrQHwugAA + + +design-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +05y9pi2UcU6ptxllVr+G/gAA +4 +I2MiL+bJOEWcCQW8PlUaEAAA +IJastPE4CkGI6UtKXQb+xgAA +RueokuJsJ02RY8qTm1ik8wAA +WDInVNo55Uu7BHXfcUQLNgAA + + +develop-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +LdINJygfWEW3vhPOZonupQAA +6 +770F/tljqkKHqvtGDTfVzAAA +gcJyB+Iyk02GIY0VRlqRGgAA +BPf4vCTXTUSPQUWNKaCQDQAA +6XJvWCMrykCACsZlVke/PAAA +6hCImufvAUuT81kGxRsmxgAA +kQl08Rz6jUCQA6Vz31/AmQAA + + +testing-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +0eY6HnBo4kSNrbtAFd/AoQAA +6 +/pztn/xQEUmMs4TaAXsCagAA ++IilmFj9BEyQ3rGjS6FoBwAA +1IsgVb2s8Ui+xnl92d08gQAA +avTqriQFjUueOCz6jCc/IwAA +TumZKVN0d0in5UkpqbuZTAAA +su8oYR2Ky0aSXbd6TlFoXAAA + + +document-procedure +yePcB6NdXUG1SBs2wQJA7gAA +2 +Y9Di27a99UCLuicgXHRPbQAA +tQieUJFUIUWjBNmfDel6vwAA +8 +8MwPX9NZj0SQu64mihvgxAAA +KCe+sJFeFUW7JorDZydAQQAA +IHj45UgS/0izQOpDHKO3GAAA +zzJAA14PKEyZOy48ze8TUQAA +Q2TvPbYi9Umzfpsm3agX8QAA +9Txo32SVmUCTFUkGnzyaoQAA +c1DHaSDPuEOz4QdBj45gwQAA +5AK+S/x8EU+IYfu9OvYF4QAA + + +publish-procedure +yePcB6NdXUG1SBs2wQJA7gAA +4 +T2cKdPg1Bk+hDccckoYQ5QAA +4JaPx8QgwEWT8vCziLxdSQAA +hXLnvpDLz0KIpSPRhb6ECgAA +FqQn7IeHTkizfymgIbEsLAAA +11 +ZJ10cvLftEKNjkYS8UBeogAA +j0eu/Ys1xkyBAac51lq70AAA +ynutmgtgJkyYVyOvECShhgAA +B018yNXvg0ygTAeYfrer4QAA +WZ976OFIREimbDaKoU7o0QAA +6PWLFqBgek+WMYGWr8g3pAAA +Wbq2l1nmWUigv45vNt7DRAAA +b4rYIDwkWUShf2GiOCXYDgAA +KHKx1GHN4Uam3tVmAqbglQAA +hu41jycWSEOI3Ox7jzRK0gAA +cmrnCjXFp0S8tNPvjvqbWgAA + + +analysis-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +pkAZPt0EzUO5vbW8/2ISDgAA +4 +OH+C5n4Y3k61fQSZesUVxwAA +6hqoLK2vfEyhVl9t+07/sQAA +npHVEpJLck2XAMV9s8g6VwAA +tXhFQ7TewkWyBpAaKgAS+QAA + + +after-develop-procedure +yePcB6NdXUG1SBs2wQJA7gAA + + +initial-develop-task +yePcB6NdXUG1SBs2wQJA7gAA + + +bugfix-work +yePcB6NdXUG1SBs2wQJA7gAA +12 +6X0FK2w+kUGeRH2fHqoCSwAA +Nej+ugs75UCTuLSNJoL32AAA +JocKzIahAE2Rg/Jush/NNwAA +1H7NZUwSckaq3vFxfgP1PwAA +n/wO/s227keDkWnSaoMPFwAA +sVfJQGL/iEmAQIELtumavgAA +tRC4kQ89GUmsBaAGTfVeoQAA ++K+Sw8lGqEG5WmXZqf+lFQAA +gVBoAJXO/kqra8XiHFVH7QAA +h289pqUixkWiMfkTT2nHFwAA +stlOgsTNBkWvbXZKK9KhjwAA +lXjbu8nHB02J0fx44kZpegAA +1 +Fxyv+zwMo0S0Ncj/Azp5dQAA +3 +HAKtlFj5902XipIJf5JuhQAA +o/0hT+QIWUatedossmtPBQAA +7yl9aNzP9UWJYqcoZ5ct1gAA + + +publish-launch +yePcB6NdXUG1SBs2wQJA7gAA +8 +3rdXqG4KQ0W+d59DtblscAAA +cSRlx/HJsEO3o59EMew3rQAA +vIl2IY+vVkSHONoG0GsxtwAA +rr+TSJZ0ukeIV9ZkTTa+cwAA +H35H/g998EO5+b+My/9TGwAA +dT4il+6/Gk+54ilEECXeewAA +Ne7JwDq7qUGFKV22/VvzWQAA +3NKcWi2ax0OdHq9842Z0nQAA +1 +N6rmhGGOH06+NgfTaWft1gAA +2 +Dwy9nxvM50Cbv0guTPXG+QAA +dIPnH0JAR0m2CEwio1XRKwAA + + +document-work +yePcB6NdXUG1SBs2wQJA7gAA +8 +vza3XuXwdUy+RCEd4a7/AAAA +iLg/87XLFEykCFJGhifOMQAA +UgLZsN12KkGQu5JOL4PUnAAA +TPTibd5Ro02/LQCkwrcM2gAA ++UDQJ377E0yfeyDDN+u8twAA +BGoBs6YePUulGOuXefEg5gAA +lEULUtfhO02wKvtZ95If0QAA +BgV7xtxh2ka6fAVka31AOAAA +1 +7VFRD/OOk0CHQPmyBREE7QAA +2 +r/hRY5C/z0KLE99Zb7wcHwAA +OAiy1ef+XUG7aqN4fnwIDQAA + + +traslation-work +yePcB6NdXUG1SBs2wQJA7gAA +8 +CVNk+aZ2kUS/be+Nv1opngAA +JNaO0ffDoUS+AX7lAxEl+wAA +zcDagyLZgk+64Eb/4CGyoQAA +nNYDjhrV/km6H65r2Oa18AAA +LdVy/adykEu3BEUiOmsYBgAA +umhkgUahRUGia9WqIF9RGwAA +RCJ0RKClMUyQKGB/551t5gAA +/ErrPXm43EePkfQzcWwL2AAA +1 +zYrgxJijVUeKhRuYPCJv9wAA +2 +0G7qZy+/sEqjVd5kqmhK0QAA +oZNlQDVXUEObs3iZw4x9YgAA + + +testing-work +yePcB6NdXUG1SBs2wQJA7gAA +8 +Sl7WaLUfCE+IreEUylmhuQAA +d92ZEkD1AkSE4doXZ/wRyAAA +69x1DUAOn02pkroD/c4e4QAA +LFszJWWWokWXHQFJ76SS4gAA +8LIFapZp5k6ylbwQfcyklgAA +yG5w39tpzUq7mH0dMD3LKQAA +oV8haZAwFUKZLy08zi9zHwAA +xgmQ4XcO80abByGugCvNwwAA +1 +dr0yGiZ9w0ifqTGL7hJMYAAA +2 +IT/R9YctZE+fstolgXNfRwAA +TTMaOnOcrUGQ/DPwfi1ITwAA + + +bug-report-task +yePcB6NdXUG1SBs2wQJA7gAA +1 +OO7ku5gAkUOUNTByzbCZzgAA +4 +fX++8JJ/Wk2XNALtMhEEnAAA +LOhftqHbTkmRcNDOgH9duwAA +SG8bVsROWE+5+iyuVGPkBQAA +51zN/AjS8UKGQuZi3cgptgAA + + +submit-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +mGag8uVpX0+zFhYfpZD08wAA +8ZbWuHTxHE6qhUPxazFa3wAA +GhCmdps1qUimWLPkoyM0vwAA +ErN9mgwzEky4Bc0y6Vf2wAAA +8 +YezoOUqiMEqMfQ47zgiYggAA +stbsvaZCJkG2vJI5d3KxdwAA +1q5yuUkA0kGBWLWrt4cfxwAA +jZEe3B1pgkqg0horzFKWzwAA +v3GPPcr2HE2FA9MsBQRCJAAA +8ERRXx11LUue4tf/9sRJGwAA +lWAMkSVvoUOg4oaaawtIxgAA +gm2xbeKGuUu+OipRQpK+OQAA + + +Package1 +yePcB6NdXUG1SBs2wQJA7gAA + + +end-task +yePcB6NdXUG1SBs2wQJA7gAA +24 +MM23IzSqWEWlGoT6/hNe5AAA +I1hmv0LT3EOVaJS78zs7cQAA +cJmvwIsT2UaVRR9+wm5I7QAA +aMDoNmAIiUSHx8Jkj1gUNwAA +pXNv1QjBU0iuyfVI3ul8fwAA +OmrpHeDuIkue/rNl85AltwAA +SW+RJAtpLUu8SXRqM+Z9fQAA +IFA/Dso7PEWhmUW+jDt0OQAA +kDJ4sMyQokGYpNNs0RQlPQAA +J3jNybR8pESBj+G0z2pHSAAA +zg18MfAqFk2aPTMOsyZ6GAAA +lN99a5fXUUS+1ZSh4ltrsAAA +OUCMrBecwkmcxrWWZfI9yQAA +D/Fzuyfwx0G/w46ih4OFNwAA +A67Iqky3ykit1KxSaoWfuAAA +oPnsNxEY1keJ0GUU+n/wQAAA +/jiNGEbH9EKzxyhBp7dGbAAA +lLOgPchTZkOKOyzQjN/NfwAA +dV+scLw75UesnYGNVK+u7AAA +77l918JxekuvPzyRw9O6PgAA +6fWpQKk33U+G9a3MEcCGcQAA +QTlFZjtkX0WmdfXdYUNK9AAA +sXh7Dh8jSkeZHM9yKyxxIAAA +0ysDVucETUCSJEUjhqnvzwAA +7 +ivchHpb/m0Oy82i37nw/zwAA +0A9khIrxsUqQn1Bnzz7X+QAA +MBHAyH1qPEWL3nIRNBXalAAA +XISyKVl4zUKFIG8yEnSeZwAA +nWK8/Dbe5kGwMfVczyrs6wAA +bDDeA0cjxEy6AaRuuqyRnwAA +NM+MZJjv/UaHiAj8twEHBgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +2IrhFWrgrUmDBuMuEDUAdAAA +nAXhDlKCrUet/Cgh+eR0lwAA +GjSWw/vKMUqzFogJghR7lAAA +VzJuDXLkWkSlIzTauPLeyQAA +2 + +False +ZX2SocfyGUGaYAoZdJTHCQAA +al6ONjrnZ02miWcUt8E4UAAA +4 +R3VYeRnHJ0iHHZgETGnFTgAA +U0G+djCiGUGaAO8rqjy+/gAA +03HqS9DKYkC58TjBT8YhzgAA +eVe8gSC9TUudPXc3TQIQMQAA + + +ZX2SocfyGUGaYAoZdJTHCQAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +R6UA269F+06Dyv6RSUforgAA +PTB5eJ7qf0CMi4IQCpgc+gAA +iufHP5iarUSm4F2TVzv8hwAA +RjEND+40e0K38ow7fT/DnQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +SOi6DqwGsUCFFA6PPLRMHQAA +i4r/qbWY2Ui5Iqlipx7NxAAA +MuAa7SUDD0W4hIqJ2nfEXwAA +AEsb9TCA0EespCceVXOMjwAA +2 + +False +V+JDAD1y1kGhDKjzLQ2kzwAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +uSsEVpBp0k6B0NfDRQxCuQAA +KQxwkKIY0k24QxARVN7AyQAA +zZGyb6RQskaIEQguCpcx3AAA +/rhxyKfqY0exDlY3hzjC+QAA + + +V+JDAD1y1kGhDKjzLQ2kzwAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +RZ7cwuzp7UGX4REYDoJ3zAAA +IrtVeVcBk0KMJ2gOAZTJ8wAA +j+ag4q9lk0y7qbcyN+fjvAAA +TfE50q7v6EakPTxRWTq1wQAA + + + +new-feature-dev-launch +yePcB6NdXUG1SBs2wQJA7gAA +8 +D0y3HjNuyEeD8w3pOiVL9gAA +OA5Var/WjE65QkGvQTUeKQAA +9lpKFxkWIk65QvnKqmbbIwAA +iyk6aGgh00eFz52t8uPdRgAA +cgzV1Cjm1E+TvgDTXT4Z/AAA +gOS3u3FsTkaxLks+tNLf3gAA +fpb5Nfhk3UWR8BQO44zXUAAA +ACmDJDLCfEm8xvezwSa4wAAA +1 +VUF2hqp6/UCePhaBLl598gAA +2 +oV0xUwtlkEW3wNVlZTulsQAA +OOVxi4WGDkKWer/0+AwIPgAA + + +initial-dev-launch +yePcB6NdXUG1SBs2wQJA7gAA +8 +65HjSOXEV02PyHHndkIc4wAA +88HbdewmeUmxNVKR4zye2AAA +fJ1Wa6yln0GHO+arSEbX4gAA +cmZP7iJc50WGKoSnWGapIQAA +WZ6Nv0dBuES8PyEoPwv1hAAA +Q5sbq+MJM0m32AXCRIw2ggAA +ApqLEo2bbkyP7ixAkGIEvwAA +1r18Q4ZaWEeRGppfm0yOsAAA +1 +YwY92xK+JEOUOaknXh7XMAAA +2 +BtfJFt8gzkWLxq07KGt8ZQAA +7zDlLto/L02ptrUw9yDPUQAA + + +bug-report +yePcB6NdXUG1SBs2wQJA7gAA +4 +C20w/XrBX0mAaNgTr9yhLQAA +Uupz/901ZE+XIw4g1BAcRQAA ++xOjz2leC0iVpM7EWCrfPgAA +iNAwSjifbkW13w8FPylDPgAA + + +bug-re-testing +yePcB6NdXUG1SBs2wQJA7gAA +4 +buhigGknbES8XNgVLZlKLwAA +FSCr+o5e6U6a7He85XeDDgAA +iBRah/D6MUuSbI9OBTScBgAA +dxQdYgWxA0CgQInUC/IpCAAA + + +bug-submit +yePcB6NdXUG1SBs2wQJA7gAA +4 +mT+dBzveUUq78fBK8tyuCwAA +iC392Q5uY0ejDPkQ6yAuewAA +IjpkADEpeUm7SlOGUS/D1QAA +PxjcBM87dUW6TRg2CMyMtAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +xiYC8A1z2ECFHdLMG3LMpQAA +KWjTdOw10kyLoQy6wAmcdAAA +QJHLrr9nwEyU0kBqcoM+vAAA +UH6aR+zhfky4QpfTspBFqgAA +2 + +False +viIiAZ9C80y4tKd497zwFAAA +lNk1i5gHU02RiCDfZIsLEQAA +4 +44417kl8qECrc5gcDDCbpQAA ++blkZmc2+k2QyQMDY/PulgAA +LqM6XmWs30+GwMbeTmXqLAAA +hlUCIoyR8Eu0oeRLPCA7OwAA + + +viIiAZ9C80y4tKd497zwFAAA +h5aHoI2/GkuAptKzGDmHIwAA +4 +2o6HL83VUke2BWxMmz//2QAA +GWVtFiY2DUydFevhRauukgAA +UYxfjqoJMkS+eFmYuS/arwAA +WCGprCefxUqNxNUpIqPPMQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +LOc/5UF2RE6WxVPI5i3f2AAA +WIs46u9twU2kOrq4ziC4DQAA +4Hd7aaR47UKFuG1AHNHL4gAA +5OXPXPpBikSBHEcEoU6OLAAA +2 + +False +zhltSEBb90+T60/21ERiXQAA +h5aHoI2/GkuAptKzGDmHIwAA +4 +Peo8julEk0izHC02+xQo5AAA +PckVy4hMYEiUhVBRpMtgWAAA +zPtKPggnBEWDvFiH5dvHlAAA +P1qV9LjKr0miol86SsoISQAA + + +zhltSEBb90+T60/21ERiXQAA +NezC/3LDGUub0eLy4M8sOgAA +4 +FZ9qCJzBsUmmyg0wsTFYHAAA +slN9bskvh0KAvUcDNKikWwAA +uBVmFA4po02nFJ6nAyW7zAAA +tHPynh6pDEqcXKeMZBTCoQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +SxST++HSbEq7tRtqP6tp8QAA +Tr1u8sV+FEGZgLye/fDfFgAA +uDEp+Ynce02beNYRQMEjkwAA +M6JWSFfmB0WegWsY6MGqKQAA +2 + +False +IQdvD61jPEq7KzieVIPMnAAA +NezC/3LDGUub0eLy4M8sOgAA +4 +eC5I/hw63EGb2/tIaq7jqwAA +UBQeSX6eNkqkjdRgfgYjpwAA +DTw0yX91k0S4rgVogZtBSwAA +keNdO2E+Zkq6OP5ryQTaYgAA + + +IQdvD61jPEq7KzieVIPMnAAA +LRvECEfPPkOYfW5/8H8P3QAA +4 +YZjAwce8xUGRc9RG6KILwwAA +QhsMDcCiC0SilZYDHxZF/wAA +8559GMWlj0S65ehn1KzhKQAA +VbfvNzosnk+z8oj2qqkGNAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +yavSIuc8BU6mjFGRfwcbigAA +FBG5eKLnokqazjt/gSdntwAA +8CT1gagTgUaGN7D1zXjjlQAA +Z9j4/mmiMEGq/1QyJWrvoQAA +2 + +False +/HuYmDQGHEeXQIQr+1PRoQAA +7jBLX6wjTkmObbw8i4xK0gAA +4 +7toSXj7hI0SGqWJu0Hrb2gAA +lRaNJ55JcE2+aco3LVRPEwAA +ZiC5LNsSUk+FZYOug/J9wwAA +TjdjvmoiXEW8fUj/M9AHjwAA + + +/HuYmDQGHEeXQIQr+1PRoQAA +qG82m0zlPkqvT2acHPihkwAA +4 +gc2dvhJo5U2uwDSD598UNQAA +dbazKDL7nUCBQHm48yiO/QAA +1rATM7KuqE2OQ8OWGFlyfAAA +6/jDHm2AMEOGMeDrl0boxgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +afH0/Nq6IkuRpp+K6scJJAAA +VKh7LpFhYka/yUWbEMRTBAAA + + +afH0/Nq6IkuRpp+K6scJJAAA +7jBLX6wjTkmObbw8i4xK0gAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +QnKEQWAvGUeHGbfSVIcc0gAA +7jBLX6wjTkmObbw8i4xK0gAA + + +QnKEQWAvGUeHGbfSVIcc0gAA +qG82m0zlPkqvT2acHPihkwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +1GhJXuWKL0CokaroBLxGNwAA +I4amOsGISUSsoOo88j4Z0QAA +5W2ul4FezkGUpNSL6TYfWAAA +ABGH7N76VEaYmnB5fB1yygAA +2 + +False +4uPxSnoEgUO3ovjSg4lAfgAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +5VXFG9SFTEqrgZWor68muAAA +mGP/7QyoMUu0V0J6De+h+AAA +LTRz/deb50iZdr6x1kb26QAA +sLPhlXbi9E2/+CFNsXYCIgAA + + +4uPxSnoEgUO3ovjSg4lAfgAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +wEFThTuAvUSViVvuda4kmQAA +zGEal+uubEaO7xLtV68NLwAA +nORCxAZvM0iMiY2y+0SfwwAA +zzBq2YLJw0u2SXPKrg83HAAA + + + +new-demond-action +yePcB6NdXUG1SBs2wQJA7gAA +8 +UE1o5B5rJESipHfZBqKwygAA +yRMu+MWKuEWYQ5ErjYaWiwAA +FpFu4xXxZ0yA+Twh2wpJlgAA +Z3chHk2lFUGnailrPWq6MQAA +7uNpzIMfD0eMWIaeUbLlHQAA +CoDDnYyT8k+e37B6gDfRwwAA +AEWVoilfPk+nAdpLsV0CwQAA +BdS90sxroUOUWQjMZTYdzQAA +1 +MAKnyTiDo06cPkcuyMVz0AAA +1 +8Gn/k11xTkGZ83K2PTY6tgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +TGB7/N63rEO/nWFXWUc5GwAA +qG82m0zlPkqvT2acHPihkwAA + + +TGB7/N63rEO/nWFXWUc5GwAA +VKh7LpFhYka/yUWbEMRTBAAA + + + +bug-report-task- +yePcB6NdXUG1SBs2wQJA7gAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +MuORoP61R0OsaeYLMDCl7gAA +o8F4GnogRkmyoRivq80I8gAA +DVsDsvtAxEuFS9yKd9yFhAAA +oVWauA9x2E2qEglF2ZDgEAAA +2 + +False +wamDBWad0EiNBPiMYvPoYQAA +qG82m0zlPkqvT2acHPihkwAA +4 +FYFKqkHuIE+3NtkMevwh8gAA +F/rcfI71lkaOlDALKRyGvwAA +y/3sLoxurkmF7W8QVQeGFAAA +wNjJO4cpoUG4zyJW10vv4gAA + + +wamDBWad0EiNBPiMYvPoYQAA +VKh7LpFhYka/yUWbEMRTBAAA +4 ++JcnWuOL6Ua0vcKq3AnqPAAA +AbqO/C672kONX5Mi2FbZ2QAA +bvgsB45GAUWn72xi0F8DwAAA +gKpRvq3Wtke/YRFjIPcBjwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +Z1Oi371va0Wir60qC+nM1gAA +f/z1m4NMYEKJnnjr+0UN9AAA +PkI7i9fOlUC/h1Ub3/JHuwAA +N2XZxMgaBkS6wbjtWcXjtwAA +2 + +False +RPaUCtwDgE+7Y3vewD8uWQAA +VKh7LpFhYka/yUWbEMRTBAAA +4 +1JyKB5qSqUGgyixgwqrr4QAA +uUlgSVv9A0O8qqHGPqY/lQAA +smQzJNghMEGh+a5mlwOEDAAA +MfZLmjPihUyj8tck8q+9DwAA + + +RPaUCtwDgE+7Y3vewD8uWQAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +hIEi63PUsUq/5VuNe91rswAA +8/FTvIbKkEOm7haEILRhUAAA +9J5Hn+PxpkG+ZtedOkQ6EgAA +DRdGsJaoRU6bj9Ny8RvVzQAA + + + +testing-estimat +yePcB6NdXUG1SBs2wQJA7gAA +8 +kliHiKyFiEyM4tl1y2PxqQAA +ZK9vBuzwK0+qvHlmi4UQZwAA +4MlemzUG6UupqHiGZMz5rQAA +dctb+/EJlE2GmNIiqKwD3gAA +4hezOO3zxE6T3AtmMrs4MwAA +Atypt726KkmaNnTw7Q3EYQAA +VS+vlz3GQUaLWwxRTkTLygAA +MqUW6X1Ww0GfjJ5qx4G20AAA +1 +GHPM6mLD3kO4lCP2rqtf+QAA +11 +RaGpcXRFFk2Egrs9p45aEwAA +g0TBPf3Nh0KJwiSYVxiPhQAA +z8s7WtExy0+auE7CN08QzQAA +SqEbSyA4zkqxiqZEBvO8kQAA +3NROu9QlyE+nFFHGnsD1eQAA +9Ra0YEGAbk+1k11e5pAURQAA +02hOTKH4qE+Snq2RdNFI/gAA +xf2zcv1RLES2E6ZY//8hdwAA +7PzK5upkUk+dJkyPmUbNewAA +SlWJmvsLTEKb0sz8CslRigAA +n6mfTSaq+k2RnTd3faTkxQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +FoDSEMS2ZkmTsrDtcYgDKAAA +odAX0fSALUCF3JgPgPmtPAAA +8VY2G3NxhEyw2+PmLVn4gAAA +TF+1Rgt/SEWoTFnDpd97sgAA +2 + +False +MEolPOO0IEuLY63mhD0XIAAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +YOFhTIRXZkCRT/20iOiu3wAA +G4JmI6QLpk6kLeS8fGipzwAA +MIqqDpNDaECMiszUTnTiOAAA +3e7dYeGE9Emyh4P37Ui5kwAA + + +MEolPOO0IEuLY63mhD0XIAAA +7jBLX6wjTkmObbw8i4xK0gAA +4 +POKY+tfyxUa+oX7KAX99XAAA +VZ/O9Cx1HUqJrk/DSux2nAAA +facP0dJwe0GdoUHFRqYvJAAA +ahz4Ad8q4EeqFI9A45hoWwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +FcZQ8iR/bkazNlwyyf9ViQAA +Qefe92j2XEq8x5GI1Vq+RQAA + + +FcZQ8iR/bkazNlwyyf9ViQAA +1Q7qLHEF7kKyydsrAZ/k1QAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +koNsJpIFwUmiquwPJJU7AQAA +QOUwkebWf0CryTQBc4Nr4gAA +6LrIq+6OyUKPnK3361v6AgAA +MaWCaOXLrUWJEm/r6uinpwAA +2 + +False +ys0dUMXSfkahAJXAYIjoOQAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +jIZ4geFcHEeuJxmhlB6cOwAA +N7zaxB1EEkOVOC3/HWuclgAA +IruNF2tIIUSk4EWcTfUwagAA +eVpalVUqlEWLl/ivXOcjvAAA + + +ys0dUMXSfkahAJXAYIjoOQAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +tcgXPbWKlkeq5whCkIEqBgAA +VHdO32YS9kaEjGvUPD3IDgAA +1s8vxl+q3kOLUyQ2DB47DQAA +6uw+HNw3AUW+/dCDQKJYgwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +nduyctsSjkWP5vNrczVzqgAA +1Q7qLHEF7kKyydsrAZ/k1QAA + + +nduyctsSjkWP5vNrczVzqgAA +bScKf7cMEkSKjrnDI4WzMgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +bRsNxdqG0k6JLtSqvVC7bQAA +mpfjLZNtmk+r8NuXBwWeiQAA +wB0f0yPBF0CYawBPvVqjIAAA +rHCvnsPGTE+zNZbDHE++awAA +2 + +False +qMuZkyzh+ky3oDxBIC0P/AAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +G4p5D5Ok+Uq50KJ8TFJblAAA +KFXH/VPOPkCDr8uXJAgXNwAA +qRx5UAbiP0m7IxOQxFq5KgAA +COFQHz8FNEypZM5OiCfh2AAA + + +qMuZkyzh+ky3oDxBIC0P/AAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +BrRWzuKLz0KFDeU3c7N6BwAA +uYlzPTT9LUWsJl6NSPSXlAAA +eQQ+fe2JaU+PM4aHo10w3gAA +qnjcyNRRC0OhIBkWjj2kEgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +rLKFRFKvd02r4IddUDKCOgAA +nwYr6bC930GQjManD/dXpgAA +MQLUBjz7Yk+8+xgKnwfHuwAA +EjCwqV9Fq0qAcntkeFJQqQAA +2 + +False +o0d7TUyzXk6c+PfIZT5lEAAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +a1WYHB1SLEy4LG/E/Zeq1QAA +KJHZMYdLG0mG+n1NFdD/nAAA +8OWv29487ky824lt3C0XKQAA +4fMRlY3bWEqFktL7lGOv8AAA + + +o0d7TUyzXk6c+PfIZT5lEAAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +32emQ4jPiEmk7EAvbQyaPAAA +6+55BoAGDkypGs1J57yGjAAA +KGzPZAjPqkCThoyxiqehEAAA +6g/fkENGek+bT0GlNSgHTQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +foJcoD2H3UmHTbmdcC4aiAAA +tckPYfstsE+v/xd6OD3ZLwAA +5bL+GE44EUCV4W74tbFlNAAA +wXbAb1614kC1SzAuIyi06gAA +2 + +False +BY9qrj1RFUm4rNyc3SVDmgAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +BrvWNXoTFkyiHxtJ+bByuwAA +ydPi2iOn4UyXblaa5PWyogAA +hHBJX3EgkUWXL+ReoFbutQAA +gqnIDYyd8kaWfF7fhYX0iQAA + + +BY9qrj1RFUm4rNyc3SVDmgAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +bO11anmKb0CZ+JUIT4eieQAA +MyBUM9gZBkK9MJI0Tz3ElwAA +H5yGIMXi602z+Wqj41vwHAAA +AmAJjiZHHkiInGfBM09YrQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +7maIWTGCx0Khz0Rnm5V+mQAA +s33ESSsZBEKgT9leWTzmVgAA +xFp99wMq2Eenlwr1HkpQkwAA +F7exZAwmtky9CKkUTofWhwAA +2 + +False +YnZl5Nva0UCe5UdReEoIzQAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +U2B6gobzpUKdSm2ZbkiPnwAA +0c5ct3w1jEaxkkGofwHlggAA +vx3NHGReik6tmP0DvwVCBgAA +vbS43s/1bk2pqHw4p/4JKAAA + + +YnZl5Nva0UCe5UdReEoIzQAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +H7w8bsQvJ0y+LG9GNf5K4gAA +S3OhH+qsmk2HPOBItVf4sQAA +Uj6b2BJjjkGuzn6m32vtpgAA +9MvEYJvH40qNBQkRWfP66wAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +Y3uVi8cKqkmudWYJZVT42wAA ++EC0O5eg0UesZPNCaFtddgAA +ZzZVr53oR0CxeUy0pPfUZQAA +7Rx4Hg1l/0K5AReBqHkMygAA +2 + +False +hLW1nXlISEGkjCaKgHd0dAAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +K822YUSdAE6ljgHfvrzwWQAA +2FNSgarAMku9KDUzZhJUqQAA +YSZ34zDGI0yU6QiD97sQBQAA +4npIOhO2wU21BzCFta4prQAA + + +hLW1nXlISEGkjCaKgHd0dAAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +7FxQGTNqQ0mOxCOpm4LnkgAA +rBEgZmTttkWVH9SFriyvuwAA +FHNSMg+PXkSYPfrWFwCmowAA +iq/IxYwimkqAQwc4Wg2m2QAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +YxOd3m1qA027GPH/yUDlNQAA +A9QzROkaZUmnGfbSzFg+OAAA +H8Mu2zo4F0O0v/oOmWITewAA +B5mOx3F5z0CDf5elmW3rKgAA +2 + +False +S8IcyUEQBk2t/QasjWBrEAAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +qxbpICxEGkuUgZ/RQSijVgAA +dStQaLCiWEubUOsDD1KlxgAA +IYegeYzmMU+ufgzi+oE9QAAA +2FUz1jUtw0SHEkc+JHv+lgAA + + +S8IcyUEQBk2t/QasjWBrEAAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +9mQnJERMRkueEmZU7cNaGgAA +gdsA+vvVX0iSWRF/L8fKYgAA +ArH5MMi9REuzagzAPHe4yAAA +T18gFKwuWUm9Jqo8urQlNgAA + + + +new-idea-action +yePcB6NdXUG1SBs2wQJA7gAA +8 +9tFoXvjmTECmCvT8S3sjAwAA +0IUfU0HSS0aMONgZS6fWwAAA +s1jJF/myk06ik/AJ0uNaogAA +cqNVL4+p4EedgBCL68GWNgAA +KLbcUDvcykStsj8g95lfAgAA +ptyiyKssw0CACA+T6S7DKAAA +Dsa4qhDcsUGFmeuJwl066gAA +BNU2drZyikiUUdl0FN6qdgAA +1 +bFIlptiTHUqaYGcZ9Z9BwwAA +1 +FMzzdvZAeUWKXvIN8LFkfwAA + + +end-procedure +yePcB6NdXUG1SBs2wQJA7gAA +4 +70rDX5jwP0iWbeW/wLyyFwAA +0sRGCg9R7UOT/Q1hjztyTwAA +E/Wqyfb0+E6vtMXK4MXoWgAA +g/ZQORCh0EuoipikJ12ePwAA +1 +hxKkcKewvkuhqVgosrEOqAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +0kBRIU7rpEqIjDV+ztOz6gAA +qL8SYOZTakCpt/xFZB9aCgAA +yG8mashwhkePgQ043HCYHwAA +lYTuVyJ0AUWte0DxhMUpsgAA +2 + +False +ucnlPfSho0+nLeC2/imr6wAA +KmQBouG6c0yb16gPnUnBtQAA +4 +nEvyQei+qk2Csenal9KdxwAA +HDFNulUJ00exHzEH3OWJbwAA +7ApMfzp6zEOI/yoWOXSltQAA +I1PKl4azt0ybN/z4NB0yiAAA + + +ucnlPfSho0+nLeC2/imr6wAA +4Ng728cyoEW6niFYPfKpFAAA +4 +4cCFPrNWokirOBfQcx8P4QAA +fwplPBMi6U22/RdD/I8q0gAA +hP0cLMB2eUW8uoBWjtHShwAA +C/WDcp4Qdk64iOKgs1J5nQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +y4dctQaIvUu8HlgoRpHpZgAA +jCo/i8/cQUKUbMTu8A1S4QAA +LxsAdFoKPEi74V/NzCDknQAA +7VnlqWnpQU2b8NCOdjhgjQAA +2 + +False +eim49HTyz0aTq6cSTLKUxQAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +wZlZ3gUfGk+6FmsjGSG06AAA +GOg+Iodw/kShpHfvCXm3pQAA +H7VtE2ZCMEq9RZqsL8TN6AAA +66p9bzxbSE+yPJdyi/eZowAA + + +eim49HTyz0aTq6cSTLKUxQAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +Lk2coXYS3UmufPm/f7gqIQAA +gENhWHX2U0u4FOkgahO1EgAA +/RM1XcCf8EulMAmNr+UW5gAA +iDCzMrQJkUC8t/crY2Y/sgAA + + + +publish-estimat +yePcB6NdXUG1SBs2wQJA7gAA +8 +myJOly92w06UWOgls7OciAAA +xtDPOGEiQEq5zvK05i1ZQQAA +pqMjRmdXxECNy6m3ZCjo/AAA +QMeyBuFWaEeMG/C/SIUDtgAA ++sKzDE+8zkS7xWQbBBTVcwAA +QZbMHiqcWUGAnSlTjF8BKgAA +8TdrUeKG/EatRU4pg0LoXAAA +exXG6JzqIEG/GjzljGMeMQAA +1 +3ExrMzh4BU+qEom+NkgXhAAA +6 +lw2G96qqakq/ubRYW8gRuAAA +9wmTKLpCT0Ga+RcZfnUdYQAA +gijAVu6IkkimRi58YU5afQAA +v1eyd2Q+GU+hNljhcBIlnAAA +BlAGbbIi30aMaBEtftLGIAAA +PlQ+p7G7JUegK51TuNbuLgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +WkOm4xYDUUyoLlIgX+fSBgAA +Qefe92j2XEq8x5GI1Vq+RQAA + + +WkOm4xYDUUyoLlIgX+fSBgAA +YPSGJ8SkH0mAV1HZcqVjOgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +LsVJKqXOn02QFoWv9t1wrwAA +Qefe92j2XEq8x5GI1Vq+RQAA + + +LsVJKqXOn02QFoWv9t1wrwAA +Gn5CjkIjQUCxSoecNQk2dQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +4MicNE+yPUqY4NnHd42b0QAA +aWV41fQv60C8uVZ9swUndQAA +hLg0dIG13UemZ7c3etRPIwAA +ivogB1p0xkaHAcK2138VUAAA +2 + +False +Ia4zuWdlXkG9ym+vnOiB3AAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +LinjFC7WWUiQjF/A2MhzxwAA +4EM2InXwRU+hZvMQBTkh6wAA +E3fb6PG62UGgaZ5VtwsoCwAA +ffZLLZvKnE27oy6YUAJd+QAA + + +Ia4zuWdlXkG9ym+vnOiB3AAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +EBMBSXpP40CLBBHRoJmm4gAA +iyW2JSzOGE+k95P7Y+wiTwAA +vTYhXjelzE+L96fmZxH14gAA +9kmFdT3h/Uy/04odtOKUxAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +H9tO76ypL0u/lVd8LEmP5wAA +X3K2/2UkaEW02WfTJWrbrgAA +GFhpB8ALgUuYKZheX9f2mgAA +0tCSzrlst0KRUHBw65XrfwAA +2 + +False +XiWUowb9X0+cmh/jn2Y6nwAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +c0EpKV2ek0Sm3FTSwQseKgAA +n/JsNYmspEOdMSgbu6gP4QAA +Z/uI4gE3B06rvtvxRiGuowAA +5p4U6cdT+0KwWnKqspkhvQAA + + +XiWUowb9X0+cmh/jn2Y6nwAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +xSEHuBVq9kCc94aMdOEZiwAA +uS2FzsJNa0ODv13PbJzLHQAA +A+phxBs/IESWgG/IndRnrwAA +qP7aUdfBakKg0kW7dB2yGAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +I6Sg7V/1pkuC6IMdDFktRwAA ++fBNjJxucEuxc1rgaJ5C4wAA +HAJpIxzai0GYHY8zAPHyFwAA +YrL0dmjJKkWgHEPsiSFnDQAA +2 + +False +MQ6Mry1/cE60C5Ss93uHrAAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +hfnqCjUcYUmSkRQIJeUl9AAA +NqcYZ/50jUCYH/CZ+wThaAAA +a3CORyuYKkmCIGCdk1khMgAA +vvFUIIC/AUSuAPLp7zbRYwAA + + +MQ6Mry1/cE60C5Ss93uHrAAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +MOiTVKU1bUSKSN6NfwTiQQAA +c5QlVkvfYE2er/gkBcROMwAA +sXAVyb+nJEe1AqzSvYP2pwAA +L6UzUatZrkSFAUJrQar0eAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +fQp6Fp6IyUubCElo4r6YrQAA +wIhe3Md/S0GEpDD21j4/aQAA ++7jQmWLFdEGaneK/pLM1oQAA +oSM4Eaw97EKV5kkL+aeKygAA +2 + +False +/Q+8gAvTq0+PLlF0qnEkGwAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +gpCQD7FsKUinVOVQiO8mswAA +tyEovfQXnUSDTkXjBsGHBwAA +6rqFA6S390K8HKObMmG7yAAA +kYqCqYC+v0meOIOSfwEEkwAA + + +/Q+8gAvTq0+PLlF0qnEkGwAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +g4kBZ0sNcUm7OsiYpxpj+AAA +d8A5ZIgIg0eBBfO7VB+bTAAA +wp3JBnhPRkCGTrgmAOSrnAAA +v5OOInR1QkOf6HRPUltjLAAA + + + +code-branch +yePcB6NdXUG1SBs2wQJA7gAA +4 +ycjyLlSj3kqAT4WlwN+ABQAA +h9dpCkD2OUCLU/AA4wY/vAAA +i9qta1y1tEGstQ7toqMoBgAA +CnpOLcx9+0uyUmV6SN6AGQAA +2 +6mwoN9toVUKgNXSs/zpXIQAA +d4BprJk1YUek3SfLLsVZ4QAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +nL0BKKvjfUS8lRhdP5BepgAA +o0h5Ac2oOEWBQeNXkBDFTgAA +xlUi2A4f5UWhPZsOsPvyfAAA +pXFSbkRrxUmU2r9ZufCHsAAA +2 + +False +SCWqm0HM/0qIGrMzbXXlWwAA +LRvECEfPPkOYfW5/8H8P3QAA +4 +UbiZK9KAYkm/FxXs/sJ1PgAA +x7hNOWGjKEa8EiErSQ6qIwAA +PLyM4N1Bw02AUgqA6MXflAAA +dAJyrrajuU+xCq1OAFacWgAA + + +SCWqm0HM/0qIGrMzbXXlWwAA +7jBLX6wjTkmObbw8i4xK0gAA +4 +np1slmkaZUOnSUwDUcogqwAA +rq193iVGokKT1FV+8m0diwAA +gnp1FflDnk60TRVkAGKY1wAA +9V7yrrZe9ka1GpuGHGllYQAA + + + +code-combine +yePcB6NdXUG1SBs2wQJA7gAA +4 +ZIbf0/c06EGBYTz9Fgc3IQAA +K+bc/F2cWUasS1vEHOYxHgAA +qg0GnAowhkGHkTgF7qQnvAAA +/CFC299mxEOJ7Xs7/C1FEQAA +2 +TchuDcMxgU66R77KAyfQSgAA +98m3w3R5mkuexiYTm0X0CQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +sfSiXZ6QikGNN6fySNJjzwAA +s3GM0aNS5E2dj1+MyKZnpgAA +QzhBowV/9kequQU8n5eqLAAA +9EkHHOTcT0G1iuVVh+ZxEwAA +2 + +False +xrdGh677e02q1kDtgtazfQAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +G5F62P80BkyXeMyc2KLF7gAA +7vjmYbJaMEiyrBOSaQbL2gAA +uPUrO0BUi066us5iZo9epgAA +1ktB2ZoUnUikhZa9Lr9FRwAA + + +xrdGh677e02q1kDtgtazfQAA +bdHUhH7aEUuvu1sA17cxzQAA +4 +Dol+tuk8s0WJWWz74S9jHwAA +FmBhRYFbHEOGHHmAOwC/qAAA +0RPa69fXYE+o2DG3dFehZgAA ++k4nMLbv+EK2MFbo5Tv50gAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +BVpvZ9oKmUKBwXRl+EfdAgAA +R943EP40H0200KX45yLxQAAA +boCO6v7bLkO/j4chx/pWQQAA +q7wCw8+kuE6WZysXuaUUbQAA +2 + +False +SQJ2LNwqDUSo9n73ytxYFwAA +bdHUhH7aEUuvu1sA17cxzQAA +4 +YD/flTMSUk6ialXpCYyMJwAA +5kP/FDbDmEm0I8MqCKKXGQAA +dOLpHN/2tk6g4tcwp6B1MgAA +v0o8fbCba0W+mmdhxMt5pAAA + + +SQJ2LNwqDUSo9n73ytxYFwAA +qG82m0zlPkqvT2acHPihkwAA +4 +sIL9vztZWEKDIKiWVikwZAAA +3qvmKXeWXECro5tiBkLh8gAA +sN3xv/nWR0ucEOdnNKKixQAA +mhX1n2TRTU+w+HyxBv00bAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +4nnMMpx0+0i9PSTfNY7csQAA +B+GzpaLzbEi00iZacS4QmAAA +iWz2OzoL2kalmml3xNye0AAA +elLWki7pC0CXxpIof1gy4AAA +2 + +False +pBLToI3BDkSX21nTyuesfQAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +Kma+Vd3S5U6otU4y7JOK0QAA +l2I2tRgZ5kKYTPr6xQkpEQAA +nOnigqRlbEyZ/3XnClAguwAA +HDlSfDj3ZEGQCGXDh6jZQgAA + + +pBLToI3BDkSX21nTyuesfQAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +PEql8kY/BUWWRB6vCttfgwAA +NKGdJEyW50iLnnQKqNPw1gAA +n6ULT067HkKEe73P5cz6jQAA +kpLMNZAgt0CyTvFxn8SOqAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +M9gClhiZZUu0WfRQaPfoVgAA +MSB+eYXhR06R7pNMOlHa6gAA +l9bLzOVoHUW9+zT5nA9uoAAA +Jkn6+PMm3ESP8mxG5mxjnAAA +2 + +False +zLIxpYqFF02jEI1wZKI0SQAA +lCPHtP6cZ0W7Oq4UP4fxpAAA +4 +qfmagCRPAUuFcPIYFphYaAAA +QV+XPkHQD0u0fNLVt4126wAA +cWUNxOoI8UKQ6iotD7Y0LAAA +sF4wph8sVEyqz1PnCDEJFAAA + + +zLIxpYqFF02jEI1wZKI0SQAA +NezC/3LDGUub0eLy4M8sOgAA +4 +9bXySmX5o0+4AL+ewvoWRAAA +Lev/Vk8CvEyEtqUz9OhBtQAA +oIh7bKQALEmVaNDkQps1ZAAA +Csx6RuVTEkCXXiL88dVaOwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +xhtYHO9mUkm8cjhhbG2RJgAA +/jxlDAqQTES6JWGBrBLn3QAA +vbkyhLgWKE+5reC6WVk8ZwAA +90brfcoCEE2yV5vKbRgpLAAA +2 + +False +8JoAmLoX6UCsEUuYOfgFrwAA +H7tysEnUp0+p4o84YYVC8wAA +4 +Yt19qcMiC0GBT+fewwRKTAAA +tZStD9Hh9UCu/SnLwbwrcgAA +Y6Tfa3wjCkaDfJKm1In5ygAA +b6x9zPYut0yPZk6pGKB1dAAA + + +8JoAmLoX6UCsEUuYOfgFrwAA +7jBLX6wjTkmObbw8i4xK0gAA +4 +KmZodHdsaEm4baVb8D2C+AAA +LuqqYjeu6UeDkT/f2wnL6wAA +ucEBO1PfpUS3Y9SIWVHZlAAA +hCqcivFWD02WFq/oWQCa6AAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +WJWDvRBteEWSI3P/KPuhRgAA +HJxA3vmcS0yZPBLyOFbhdwAA ++TMFmG/26E2WuAagodHaVAAA +SHmb6/jKMEecA8SrIWf9pQAA +2 + +False +uQ67KS+1vUmRO9PVPQmAvQAA +KbXj7bLsjku9BsYv/z63VgAA +4 +jJBDxIfObUm02xMmQwwQUgAA +H+MHJME5cEe3/z57Hwb9qQAA +KKa8KDhiT0yywcRZFEhgZAAA +a8JxRIyCpUuktghxCqZYNAAA + + +uQ67KS+1vUmRO9PVPQmAvQAA +qG82m0zlPkqvT2acHPihkwAA +4 +7cE9qkWD5EmPpJLBAp1HeAAA +3LZt9srt6kCwSNKITlWE2gAA +Pd8O31jYK06fx9i+6clIywAA +vKLG2zhoYUyeqFTjhy8ZKwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +yaORZuMMGUad2TRGYETePwAA +cDz8tGhKvUCuPbstPQ9A9wAA +nkW18+CiUkO5hxLJg52lVQAA +WqCbvh1C1E6wcJkqgIjjnAAA +2 + +False +S89azVl1DEerKr0Lg7uYIwAA +VwrgoiK6h0aUxHMgZDKYzgAA +4 +YjUwXNx4x0W+0JP1C8bBsgAA +ZuZvgd8HF0qjC85h6/pWuQAA +H4OnetFRCEWTCj6Fs1hSPQAA +AB35xTBI3kCNRQfQ0zRxlQAA + + +S89azVl1DEerKr0Lg7uYIwAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +8pKXJYWq/U+GC1Gw7P3YogAA +xm8csvGgWUqbrmJTGobYggAA +nGixJcTMQU6pMIRfTHnwOAAA +0W+J5TWQEU279og+ldhIMAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +UBIpllFC2E+GQMCzMBXoywAA +HNZiX6rmcE61AUOe/aikagAA +colrF1SicEuXbQMzolS0cwAA +1JavVcL0tkWP5qL4f2ol1gAA +2 + +False +UmPi888MJEySape3IDytNQAA +fKAlsL5x3U2cAiir26vsAQAA +4 +MBMCXCaE2E6DBqZhj0hI4wAA +Zl68UCRFw0KCZo4LWXEB7AAA +JoVq17ylOEiLiPs23koDdQAA +kV4z6nwflEGtPRWJRbm2MQAA + + +UmPi888MJEySape3IDytNQAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +3xFIXB43e02oCzXQnJyBIQAA +E81GEhfrO0uBcZ1YwYxrRQAA +6ru8xt186Eu5CJ+CnQcPSAAA +IyNUDKRo80uk1+vWOdd6ZwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +Wy3bqEfYM0KVFZ1Ydr4GSgAA +fEMuc7IoL0+m7gdsXU5KVgAA +GEfO+w8NfUiyxBr4wREzSgAA +O6Ti9cuFB0WVM7vuNLFhlQAA +2 + +False +WED3oZHyO0Sbd335J3t4SwAA +d6r7rOW3akG5lkJDtATmigAA +4 +0ZfC7dfSdU+77n8W+2oFxwAA +q5mo1sXERECknsOga63bQwAA +dvrtx2qjA0yPQapYCJKnKAAA +I2T0Katdr0C5LeWEd7aHxAAA + + +WED3oZHyO0Sbd335J3t4SwAA +lNk1i5gHU02RiCDfZIsLEQAA +4 +LdSvWje1J0CqbOHWDaAgUAAA ++sQGHocwrUmn3ruLRXPZpgAA +O0m/ydhB50iFll0hEFZfZAAA +0mXOeImHsU2RNOJHpNFjXQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +oxEARNr9gkGzwAFVPhHIkAAA +Z1qYhmVIPUW+vEfAv0piWQAA +lOi6KelScUuy5fZD8Ryk7AAA +mhW1I09edUiS8X8MEmfclgAA +2 + +False +OaMYngAfm0WoiHZwhZD+qQAA +dHVXjobujkKGloy7+Ox8DAAA +4 +MC+sWMseaE+MfE3R3FxpyAAA +/KqujkQIjUCqirzj1ToUhwAA +W51m75wQcUSvNIIUfcBISgAA +IZiW0v0hjEOFt9F4QTWCkQAA + + +OaMYngAfm0WoiHZwhZD+qQAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +HYqM8w3OGk2uKsT8jnNQxgAA +rhuf+QT8r0a2Yed82O3gfwAA +T6ij/GDNiUaiIC/GNAwBnwAA +1t+/KulozES5sUUdXSN5mQAA + + + +analysis-action +yePcB6NdXUG1SBs2wQJA7gAA +12 +kl2Aed9IkUu2D64AkSCxzAAA +nZg4+VLgWUSW2gCcSLKJUgAA ++zOyC07eKEGprweVTpdPsgAA +465btYj/XE+ZLJj45PLqwAAA +UyNk1RnZTki1ekm3+nWlBAAA +TTECX4f+skmDkGsbwwgAeQAA +zzTQXIDdakKYtCtdopebawAA +pLHkBSDUz0Cppz3RO12bCgAA +3nCDuBMsK0+QzoSS/9JHsgAA +c1JY/FdyT0m6nHqAUmamegAA +U8zURKBko0+T0bhz3P57cQAA +IpedjlXLukO3PmzSFfsqmQAA +1 +esX3j+a1KU2snuv6WgXrzgAA +3 +J3TF5Wds2UivZ3unkZY6DwAA +tbE2qZkS9UCvoD6eysPdBQAA +XqdZXwSYokCQBpZDzAi8kQAA + + +usr-bug-report-action +yePcB6NdXUG1SBs2wQJA7gAA +8 +Ms00Ghmc4EasjVjv6tSf/wAA +2MwFay2zRke8ERv83MTOKAAA +QSgfeZx5+0WBg9urqunRTQAA +IOSjRcFSOEO7mU5Zk7XrigAA +YVBwJiAt70+Y3BJSw5fjFgAA +2U7nVobKJ0Sm/kAUGOjUBgAA +Onj/hiih60uvArokB0ksxAAA +8cwV08rY7U+T5xbsVw709wAA +1 +gIzn+8O0A0ux4mJbpKNkEwAA +1 +YjM/m1UlCki4/Q0e0sh8lgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +18YORdrZe0urPTyJgbu7GgAA +JdmCvIJu+0yQ0OKD/cfItAAA +qenoNaUDpkKy/63NHyGaDAAA +vYG716j5tEq9Zvemg7EhQgAA +2 + +False +IoGZLKJYy0Su7gKold2FugAA +tptycT8EmUmriJ3RFm3kFAAA +4 +BxxfBaPrJUiHrm6OTAQRBwAA +Kx6M1RltWUODr5/zwwlzJQAA +q5WGu8fjgE+IYjKnK69adQAA +V5bL71jyhUiq41ZWtdO1qwAA + + +IoGZLKJYy0Su7gKold2FugAA +lNk1i5gHU02RiCDfZIsLEQAA +4 +sVcHIGR/2k2As0X3aTjfAgAA +UR5K0UNdXESX2cbrq6vB7AAA +QBCzNuSgD0+F9eOztz82WQAA +s0vjM72K0UCC49bt4Zqw5wAA + + + +complete-estimate +yePcB6NdXUG1SBs2wQJA7gAA +8 +tJdxQ2n6kUCuF/faDlNrnwAA +v1fjD//B7EWEisQfMlIvuwAA +A6YZj2skIESvHAbuIH/EhwAA +FO5BKxRG5U+UtKdGhxorgAAA +IY8NFiPGQkOPFFwtq6H0ZgAA +eUPPRkruHEWmhfWv5COWmQAA +gQBdHO5xl0+ZtCjcXYPsMgAA +jb4Zzs6N40GLyjrIR+q5DAAA +1 +xg7XA4XPo0GPzFxhulYO7QAA +5 +x9ru4+yHq0W72sfWmglc7wAA +d4j7kpAS0ka+ba2k0nXpZAAA +A9CObdPLTUSepg+ci/+UBAAA +lrh/7WQ3A0mIOTZd1oStcgAA +YvCannseaUmrs70XgLp5GQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +9/JEphG95UKpIBxwyVir1AAA +PFCuXJitn06zd0wiU+ftPgAA +Ru0bpp+XR0i+xwgb91d4rAAA +ZquN1AsAqEGCf/7mx+YoigAA +2 + +False +KPYLQRKmIkeAc/y+UUmN4QAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +yVa1pUDStk+GRkq5Fgck/gAA +dqzw/nc6y0yihANiteld9QAA +17VOfTLTlE2P6EGY1i/XPAAA +kmmyZzWP1EaOnNihdtkk4gAA + + +KPYLQRKmIkeAc/y+UUmN4QAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +a/A8WMu1lkq1N4TaDnyqKQAA +hazIN21n+Uia5yNe6q5mbAAA +HR0n+oEr/UO3gMljEFbgXAAA +qQ/3gm9gpEy7RDIWnmKIPgAA + + + +using-action +yePcB6NdXUG1SBs2wQJA7gAA +8 +P24tgRFfhEi1BROVlu7OOgAA +B5bvNIvuXUiZk2omQW+YVgAA +BXM5xmQ/8k+h/QvqfjyNugAA +ssG5VODZa0yjefMUfiFFhgAA +HWqJtv0eeke43TE3RflDdwAA +CikF7NStM06PDiNPFZ2tegAA +qJGvjFnjMU+TxEjvvb3XugAA +Qn7B7prY/0m0aCSTH59GxgAA +1 +4d0O1iKcq0+kIW5Bpb2joAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +CzI5Y9qff0CxcFCZVa5S3AAA +wa/TG8q/LEaXge7GDOYfVAAA +AVD95rCx60KHmIaTiLcRxQAA +R5CkGmm/YEOj5eV88Id3jgAA +2 + +False +FAmlbTk0n0ytt/cqGfgskwAA +lNk1i5gHU02RiCDfZIsLEQAA +4 +qr22hFooyEK4i8WQ+1Sv/gAA +mX9Nobkxvke0GOFz+BBEeAAA +I2ZBrN3vf0GLpKzqD0z1xQAA +zkLTUjffTkuMGaMOBrHz4QAA + + +FAmlbTk0n0ytt/cqGfgskwAA +NezC/3LDGUub0eLy4M8sOgAA +4 +NjzjPxTYbUud2VwEUWcxbgAA +Fk1nkB+UR0K2Sge74B4V4AAA +WFadMfk7n0KEmxucDFCN9QAA +Ydctqv+D60OjutAnNGrhDQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +peIWiqIkvE68pZZZB65+ggAA +bWK0sQ56QESfnUfUkTRYBQAA +oiHtLcL9tUi8L4HTr4RE/wAA +Md29uhL4tkaJIuBUA85ObwAA +2 + +False +powHE2AyUUeexm1F5fODTAAA +jic239+6CEiL3vfxIBKzZwAA +4 +tmxcg6bdVUCOl28UigeIkgAA +X7SYFxMcIkW8+laCzdFvEQAA +vqPes6cJxUy3B4CDigTD1QAA +WXAnzpMOckeKZs71K8JyxQAA + + +powHE2AyUUeexm1F5fODTAAA +PjS4k33/kkePfB8R0Qh14AAA +4 +bM7is6uMMk2GIxlWDVB33wAA +GUY//HsXnUa8rBs+YO2UNwAA +q68BWLg+d0+YKa8sJRnjvgAA +C1uWNcOmb0iYVMU4I2QyrwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +jDGR0qRjR0iquyAXdyKoeAAA +KAANTO4nTEqLiFX/UbUTngAA +aCktCRSJrU+V/ga/VLJaVQAA +YPjebXY/pEmUpD8U4gQdbQAA +2 + +False ++gvlzndWo0SXFj3rSfMCdQAA +PjS4k33/kkePfB8R0Qh14AAA +4 +XHfdmC0DpEiEXC06KQbVFAAA +kRnwqGgnDkKM2rlcFxRDjgAA +HGFSjWvB3ECFbAD5eNHg3wAA +xXlOnXywLEaD4BZewBg9fwAA + + ++gvlzndWo0SXFj3rSfMCdQAA +H7tysEnUp0+p4o84YYVC8wAA +4 +57iU7zAT40KuHJV4IshzgwAA +sEugwmegAEyJn4OWNNCuFAAA +IkS9kzpevEGrVfQq1JkVwAAA +nQaETYUhZUWG4b4vq1CUdgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +8 +feLQ0J+Qwk6YWzkfsbZt2AAA +n4sycilAaUOLLNGTDGGONwAA +5Zt6ttadSUyDPVmooIqN+AAA +01hwlutU30ePjiZ3f7ZOEAAA ++cahWdC1I0yBuh9ZIYNbOgAA +cqBAIkf4akeCsyrTqB75yAAA +8bfLKj53rk28PpoVbAn7bAAA +8vfYrGNmA0GHQ9MzSLFQ3wAA +2 + +False +Ycu282Q90kSZPuP8Y2664QAA +7lWVbX8GnUmVFBjNoEJuAAAA +8 +O7P3rpnbkku5vOnBBDQnVQAA +gGlpGjQickOmFCKkVfkdHgAA +kBSGXCJeH0uQsgrL0D2JtwAA +Xz1mHPhFmU6vfUOcO0mRGgAA +GfCS+zY2FESbRxFOH0OuTwAA +RzK1yiO9KkOPeHU250BbAAAA +shE3WVSqfUGtgY/jCHqDLAAA +b+pxabew10WQqsfp/xDwHQAA + + +Ycu282Q90kSZPuP8Y2664QAA +tptycT8EmUmriJ3RFm3kFAAA +8 +z4wjqqzFbk2EDYNc14VWGwAA +dUYMp1/Jl0W4mPnxHjW6BgAA +S0Rejdceg0CCIF2vhtC+VQAA +Kupf+0xddkayQ/uMYBkjBAAA +eiS7Ik+TokSFh8Orh33ZmQAA +aevdSpRoxkqa/QLPsPDfjAAA +MGZmdqR9AEeBTwMHLCQEBwAA +0aTLMjhAfk2t4kFS9CsFygAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +8 +1Z18b9EM2EiZ9nTwB001WwAA +CxY36aptjU2fMKwL8Zw0qQAA +tknMQuvbTkybhfn4FRSI0wAA +z/48QS1QOUGo5Pgu+2qOMQAA +vatANhgzI0CKn2V4OtnZ0AAA +PAtvo9voFUunEJIhEVGP5wAA +uFUs6mdPhUq72o+iu7u12AAA +wlHx5ohFOU+qFb6sgE923AAA +2 + +False +2f8CCoiKYEm2bnh0fSgF5AAA +dqA/cPl8GEmWvU/R693yfAAA +8 +xfGXcs5oEEOMNfSOBHdYzAAA +hA7vOr4tyUuMmRw30XQa7wAA +KL01PYasUUWRDnG4x4RUUQAA +d9S0f7NrSk64dwSQRNob1gAA +L7sujdVry0+QVQEVJqsXugAA +rzawLrQjRkC0QyIo5jR5kgAA +m5XLlIWekU2Jhm12nAqoQAAA +/kOCH4YBBkaQHdYdD6P8RQAA + + +2f8CCoiKYEm2bnh0fSgF5AAA +tptycT8EmUmriJ3RFm3kFAAA +8 +noKBc1mo4UG1t2EMlDRaywAA +VzUlrSyXFk+iDHWgRGS9sAAA +z0AE0yBfeEOfsLbGxesbtQAA +I5ch13+LJUO+XBwczhguKwAA +z+u8fjAoikGnoYtuvyFK1wAA +7SP7byz6dkyTbiK0vGn0+AAA +4n0Ym0BlAk6zJNk3a0YjQQAA +fG/jWZWN3kuLndl9TqLltwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +7lWVbX8GnUmVFBjNoEJuAAAA +4 +LPYa5c2HsU6j2Ex9FqXjTgAA +ZOAvKuNRVkCT0opidy1PXgAA +JcpxIb6QnUWC1QZbALQFzgAA +ZsMOazCICku0dmBxu5BPwwAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +tptycT8EmUmriJ3RFm3kFAAA +4 +fe5rVGDTZkm30nnnVjUnGwAA +dBcQppHqzUKTIuOYZvqCKgAA +a9a5QLTQQky8K7vE9psNmQAA +HJ9i2/A6LECi4DFihuoAjgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +dqA/cPl8GEmWvU/R693yfAAA +4 +PIeD4XTRgkWqIqXdXMW6LAAA +MJTa0XDYzka+Vo9PAyM/7QAA +8lLpkHDS4EW6va0BdDqCVwAA +60NGyDqm4k6FLnYIfNuDGQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +d6r7rOW3akG5lkJDtATmigAA +4 +WoMdHjHT60y/ucZKUI2yRQAA +nUoCWqfBDkq00NytI11QpQAA +r89GsQOYQ0Sxo76W1HZ4MAAA +t+dO3/Yc70u5VbpokZ3MUAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +lCPHtP6cZ0W7Oq4UP4fxpAAA +4 +suq3p4Gr1ECCNNqsL9GNmgAA +EfQ5GYqRlEmcyjiM59X7eAAA +gVWQwwDPJUu3UtwIHnMh5wAA +N1Ajm1F3J0OuhEA3jFy40AAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +3/I8Qb882kyBbKWrLspv1QAA +uZTV3tuKiku+LqqH5r8NAwAA +pE8BwqyV1E6GWivMp/8rmwAA +wI2BFcx4G0uwhSvKTvMuBwAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +K2wne454ikKjxhvQugAQgQAA +KGBLRdO8h0y/fiusODvvawAA +AFPgFpfzXU2Dt7nsMpfDjAAA +Cj8ijFRd6E2Ghc/QEhvpswAA + + +design-task +yePcB6NdXUG1SBs2wQJA7gAA +8 +HIeb6G3eG0y9ALZQK+J4gQAA +D86021vpd0u1rin08iqseQAA +I3aQoW+RVE2X1kWe+WKkXwAA +vNom6Up/KkqoATKRFkBn3AAA +MhTplpcR+UyDiR2znck4tAAA +Zk50HZexL02VLsWY70R4agAA +hqbV8Js5W0uw1DupV1XQqwAA +tAB9iGd8D0+4oE8cVggsrAAA +1 +onJRiZekkkW+HvL7efTCQAAA +1 +L7a4CYmPC0uUj33RRoWiJgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +U//hAdD8QU+M1p1r952pSAAA +4 +wse/k+6Wo0ywK/W3StD9gQAA +v5RmwFwCqkKsqOLo8tsnXwAA +IwreAe0oQEeC0kg1/1uy0AAA +2UaSFudIDkuHDMikZiR2UwAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +PjS4k33/kkePfB8R0Qh14AAA +4 +sAjv9H6fb02YWJbD/tg8iwAA +XdON7SMH3kaqHDs3tzr1MQAA +Ogcrs25sXUGBUDPgjxhOsgAA +a9K3+Pr2UEGcGEzwmgPGSQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +guejFFOf3EeA800C6x9HyQAA +Or2IcXa7pEKjvrKWslJVFQAA +3n65+/c4i0GSW7vB8tbfNAAA +AyLTcrRat0m8EpooVXUxYgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +dHVXjobujkKGloy7+Ox8DAAA +4 +5tiqe3EwmEWE4YAS3g4JywAA +3b5OnzxpJkSC8Au+eBrkCQAA +dZ0qyYWrrEeUup1awqQUQgAA +ICDtZyDxBkmvrnvCjWPUugAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +G18zTBUAj0+SdrsOmksR0QAA +4 +Mv9HX3XjskWl4ZZPrqk1SQAA +KE0SJGBWG0KLgIFbd3i2QwAA +sGtoAbArIk6KT4dMfnI5ZwAA +yuc6pkaW9kKoN2MNyEsy9gAA + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +MFtSG5Zvd0SAELRfJuoHSgAA +MLBX+NGx9kymQ76b9EAKuwAA + + +MFtSG5Zvd0SAELRfJuoHSgAA +A/9YWnHJBEGH1jC8FI2M9gAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +rIGY5vyYw0+5KlohHZ6IOgAA +FkRCE52YAkaM/9oO8q9QFQAA + + +rIGY5vyYw0+5KlohHZ6IOgAA +MLBX+NGx9kymQ76b9EAKuwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +IL0+lwOVJkG2nXuxtPKJ/gAA +lnMIF7NC00m+YQbuUp4sbQAA +K1WW3wVHoUyz9tHvK8VYbAAA +GT2ouTWB5E25hjeZqE9AqQAA +2 + +Iz8n1Vm2AECplTLk/g9l/gAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +FJMQGI9o7EaSAVILMSXz2AAA +2dXNHgoH/UyKDBFzCvKvCQAA +222NKC8A/EK869IU54oTzAAA +dMY9zr/dJUSXGcAwhrDKQgAA + + +Iz8n1Vm2AECplTLk/g9l/gAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +Pbx/h52lXEGFKUAsD6TuMQAA +luHbToKxx0Cq5pYgxyEghQAA +nvwqDdPeikW9ZHZafgxVjgAA +qxhXSpOcEkeLxhhsnRiBowAA + + + +work-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +PZbcok41dUuxzpJHw+qcCQAA +43iteVy960mk6uiA4go8PgAA +Cf/wmnOCDk2JQYNqAdsrhAAA +1rLyekG6wU+wq4oVZHpEmwAA +4 +vY9LoEpVCEyXKh6+k1PP4AAA +3we00g4TrUSP2RwRD/Zr6AAA +jKTbz3HBukOB4vjFAHBjhwAA +wKnDb+gcSEGIVFdvrqRcMwAA +1 +MEkNsUXvgEqT0nEOCk4PgAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +GhrYfY9FhkaeOZ1Xi81ILwAA +MLBX+NGx9kymQ76b9EAKuwAA + + +GhrYfY9FhkaeOZ1Xi81ILwAA +oWDHE/AIyEqhL2zTdizC4AAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +oWDHE/AIyEqhL2zTdizC4AAA +akeIYx92HUGIvgZi/7qslgAA +4 +uAXLJOTriES/hdpjvEjnfQAA +dFPWubn5jEyxcLoGfqOBxwAA +RLdr22IYBU64sB29OxwdYAAA +CN2JHBk3CkyvzUC9V9TQSgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +H7tysEnUp0+p4o84YYVC8wAA +4 +erYw8J9LZk+PGvdV0EXI5QAA +4R3Y/IEGzkKI5zf8iF1FIwAA +GZqM0GLxrkCbK74b2fZjVgAA +U0RTzBQOMEaMiFuDOdAiEAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +fKAlsL5x3U2cAiir26vsAQAA +4 +nsTw2ZA9MUyYNIZWkuGSVQAA +7WH+78NmtkO404fHbMbE+wAA +gFyeuj8huka5UWP2sPI8NgAA +RbFtgmQUt0mjDPZw/98xJgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +VwrgoiK6h0aUxHMgZDKYzgAA +4 +T+9SH6frG0y133/kjqaxMQAA +/N3RA5gFwEuotsWov+FmpwAA +0qjH7AqwK0iDS24VpsP+pQAA +P40xQHH9t0adC+QCUjBEgQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +KbXj7bLsjku9BsYv/z63VgAA +4 +sG7PAP0kWk6qe6SGPVoV1gAA +Ncubj6PQLkGMH3816dToeQAA +uzghXnAMTEWnVB9fwZw38QAA +0wWIHrFPP0i7omKIPR8t/AAA + + +yePcB6NdXUG1SBs2wQJA7gAA +Pu4+pL+iiU6lRzDtfLIgJwAA +akeIYx92HUGIvgZi/7qslgAA +4 +XZl6ZYNUfE+xutFWVAYtIgAA +IlwfJtARtEWtIPrnUbJu+gAA +NM5iDpHui0+j/2BV9i6RegAA +w+/2TypeZUyTM0XqlJ7faQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +78O5f65/80OvpHK3AuBEIQAA +akeIYx92HUGIvgZi/7qslgAA +4 +2y2CptpPXEOY6VTEMg6cFwAA +wDtgwkge8Eekbd+5Ba+RbgAA +pdsVCh/+6Uu1HKUTdGtwjAAA +YApY7dvNDkORwuLnh4r20gAA + + +yePcB6NdXUG1SBs2wQJA7gAA +aaiB2ZAB7kOSB9niWMGCrAAA +akeIYx92HUGIvgZi/7qslgAA +4 +S8IrOhFZMUqS53hszSTWTAAA +jlLodtp9HUyGpoRb3+ML8QAA +xt/qLKtHg0u/N7p1pQFM0AAA +UFUtmSkZOUOK8DDY2gqd4wAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +eYAhc/LzL02L/DGmAby1vQAA +mvyb1zRY7U+XMJoOIduwmQAA +QgWJ7oztH0qn8zJe0XTaTQAA +/muOiq+WlUKTjMf6selBcgAA +2 + +False +dQUIyAabUkW3BrzevL6ajQAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +PRlhOyseoEG/msjM8eMfPwAA +DxTUmp3bfkWzQFVWm9RyagAA +V4wre64b5EWdOFIRv9rIwwAA +YLHhiMeh+k2oN/11Bvs+gwAA + + +dQUIyAabUkW3BrzevL6ajQAA +G18zTBUAj0+SdrsOmksR0QAA +4 +N6JFJEMxTkOgdVOofY3b1QAA +mZHrhWLZaU6QhhhCk9KQfgAA +DFuqnRcmjUOC1Geo3//5zAAA +pdSXcQZ3gkKTKkk4UZxQJwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +KU8/JzWES0ezPaDHnQt0ggAA +Vox6i1CeQ0GtcIQfm9YdjQAA +OKiwIRAE6U24IXlip6X1yQAA +XNFIJAoRkU24kFw1qWOJlgAA +2 + +False +b9LJxRkpzEy/d2cpGE3jlAAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +HAz756pKI0OhGP2NtD0LDQAA +HpvaXT7zG0a7spn7t7WsWgAA +uUl6vpxXEEiSMJ+jtBGE8AAA +8fEP7wTYv06+QS91ksrWGQAA + + +b9LJxRkpzEy/d2cpGE3jlAAA +akeIYx92HUGIvgZi/7qslgAA +4 +sWk8jHPVsUye0HAsrU9b8AAA +RIn9UYqCL06+hesNsfMg6AAA +YCdV2KrXnUGdWgpMSmo9swAA +3TSC9ViOMUWuOEW/VpJVpwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +Z3aP6/bReUG/BiTD9Tel6QAA +xDzDwTIOc0CrvW83L5kNygAA +Dhui633kv0Cs2TIr6anG8wAA +5/pq026ljUSXXG9LFiSJ6QAA +2 + +False +4cv8mepYQESw1qV+1hogLAAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +rQ/5KauNLkeb7A+N18/ZsgAA +AmyHNf9XYkWoZVaiHltK9QAA +Q3r8d1VXUUCiw5jeBuPRBAAA +4CuRclNHSka0VlzQhJNPIgAA + + +4cv8mepYQESw1qV+1hogLAAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +38AJre7phEq8uaFiUBhWJAAA +ACkFzy2Ap0ekTd9POpd0yAAA +Yp09FNf+oU6WbgJ3oyb2TgAA +GPiKAl+kUUOMaKtvVoPG8QAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +fTfJa+yF+EWqKclyNZLkWQAA +P1yQkUBYGUiuEKYEWhglEQAA +kVVFAfrEM0OVQG3dDEzrBAAA +S3/s+zksLE+2TteXiSgC+gAA +2 + +False +dle0km/8mEy/njpP8YzaVgAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +4zV/mMXZeki4F4OORYJKqgAA +7BDESY6TMUSiCt8YhffRGwAA +i85LCAkm8UObs6Dbb7SXcQAA +6KJws/bR0kG6QHE3AdAQeAAA + + +dle0km/8mEy/njpP8YzaVgAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +aEQPXEaJV0er8Itg/qCxPgAA +KVRGSFyS00mRDojdelzFBgAA +bvpVPBwdx0u11NBBvQk7wgAA +MiXG1qhsiUeRYJptMcJQkQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +czrJDt7ZN0OLO96UOxknWwAA +gaRl0hEWgkCIBalaDt313AAA +ffTHJI14WEOPsSVHBZAxGAAA +qtCJ3djTpk2qq4PyUnahhgAA +2 + +False +bLyKzfToT0G3pHx4RMAW5wAA +dHVXjobujkKGloy7+Ox8DAAA +4 +KsNAAD4Lr0uKhL8mv0FA/gAA +IiMPfmMo8Ei+L+Qthava8gAA +elNO2l0whk+ACvfb6xpfgAAA +aMXoiUGT3kuTJcZCzOuaaQAA + + +bLyKzfToT0G3pHx4RMAW5wAA +al6ONjrnZ02miWcUt8E4UAAA +4 +6YgRzS7R8kySc95PMlWYmgAA +EDrCt1B2OEG9fFPIfbI4rwAA +mivDYBfKo0CA/Cgxh1MvdAAA +eFcfZIWulEa9jeD5P2DxVgAA + + + +analysis-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +5CbxRWAfz0OazD2BC6LOtgAA +Zt9DS7yc/kaN6Qper163XQAA +m98ZTsriLEiMT+5V1oPIMgAA +DBT1Z0iJuEep77ITNSgtaAAA +1 +b/CTfa0mFUyr1SeIhcoTFwAA +1 +LJwRpPfpFE+v3TCpYFoQmgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +HhCFPxH60EuycMQ2nfXWCQAA +4 +TC+FJGU+7U+XMAe9+osKVwAA +OKZ6FA3aWkmyc5tJxPl2xwAA +a5DpK6h4vUiaRFZby6lkRwAA +IVMQ+hvxhUmfRCtEQI3axwAA + + +yePcB6NdXUG1SBs2wQJA7gAA +u2JHX3nMn0CMyZLWTG2R1QAA +jic239+6CEiL3vfxIBKzZwAA +4 +EMzyT+wgi0SGPNxUTGhQAwAA +MEHedzzYGUKI3aU8wHa5zQAA +LUSg1SkB5Um4VPumlmoLUQAA +fWByKXIJ/UesLRVcVIFYjgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +u2JHX3nMn0CMyZLWTG2R1QAA +hWsqFBqliU2am4OA8VEXDgAA +4 +2StkfbIsv0+Ea31zqPRbPgAA +YwNcx3tMbkyEUBR20ozA5wAA +r6QhCqIxOk+4icWyLlvQbAAA +9fNSdobGT0qiuDpbuYC1mQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +6LFnNLjF4Eu3upg4H/I2PgAA +T3viGZHVdU2KCEMCtGcHywAA +0O24YQVuSUGBLdG6cr61BQAA +MkEs4VIPMEyuULHWFBfzBAAA +2 + +False +63BfEROBLEGGjWv9qa4YPgAA +d6r7rOW3akG5lkJDtATmigAA +4 +BG6uAAQJ3USU48cz1nG1AQAA +qoSb5uU2NUmYdmJrbZRo+wAA +k8caYibEm0qaWqQprAJv7QAA +L1b56qKED0K/OmtE7EMpAAAA + + +63BfEROBLEGGjWv9qa4YPgAA +al6ONjrnZ02miWcUt8E4UAAA +4 +GucH94UjaUuAs/9vQLKSgwAA +iInWxuDATke2XZEx8dB5rgAA +sAbeSljN6ku9YWHiJh2gAQAA +kPEGKDmfB0usxAwTkbzsEQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +6ywkVp/d8EqsgwjREOmd8wAA +/N0SyYdjD0ygX98Jcv8cbgAA +48K09Y/WJ0+YSQsYPdpMHQAA +nzyOD5QmRUizjQrpBcujeQAA +2 + +False +aM8L++tUe0CN4YEwoVH/cwAA +lCPHtP6cZ0W7Oq4UP4fxpAAA +4 +msoq4IUSvUOE3Re5LWjihgAA +AzsLD4INkkuYE+ga3BxkYAAA +VoZuvjQT6kycIZ3NEU+7CgAA +ra2CyZNXr0SxCsxEfDrydwAA + + +aM8L++tUe0CN4YEwoVH/cwAA +al6ONjrnZ02miWcUt8E4UAAA +4 +m3m2vxD9JkmtGEsZc/xJ6wAA +FrqY42jWGkmMMP8junaplgAA +wkOOpfK8jkGMOu0MGTO5MQAA +YlBJtxpA+0+wDN7Ulrf3aQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +QduQ4Ok2AkGuFmC3XIBgnQAA +juA4uUbJ1kCWLaXuVkETfwAA +FUgWHDyDyU+1bkEqG6bRmwAA +gVtrNy5QF0i/P7qC6xnEpgAA +2 + +False ++pKtO8/uIk+Z4sYfrACDGgAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +UQTu+Bo94kmBzf+mjZwZmwAA +wVIJgceIH0exOVKPaP1z6wAA +zZZMTPhd90WH5erQAYdfbgAA +kwiIvmxBBE6w7oKrN7hx8QAA + + ++pKtO8/uIk+Z4sYfrACDGgAA +HhCFPxH60EuycMQ2nfXWCQAA +4 +EDy+dKHUrU+pfpVMqA9DggAA +whwcvMT/5Ey6sH7pSG08CgAA +ffnMNN1sFEaHkgVnY6s0dgAA +LmRYO3VxHE6VFU6W7AhxTQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +2MyNnTzCX0CKIC1Al7qEswAA +p4VmZ8UtKU+WtJ6viCYxLQAA +YGd2QgnwHkC6rD8tQ0CXxAAA +eV4elLi8KUGC37VqeR7CwAAA +2 + +False +nmuSEcLCrEGvKBQ/lU47BwAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +fFlOZcqa+02Fn8I4gTDLZwAA +P41vIBK0Tkue4cv+G7GcAQAA +i0WSg+lbzEWux/SLQGsJTwAA +ci+FC6Q3YEmfkvFbLijaugAA + + +nmuSEcLCrEGvKBQ/lU47BwAA +U//hAdD8QU+M1p1r952pSAAA +4 +RNddAkpBB0GCLMC7EpbPbAAA +SztPCjNLmEOMd98qHlHotgAA ++cZPh9TPzk+f4BvHiPSBDQAA +eT1WGqzvgkCedfY6DwEnjAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +BBhjaKkxRUW65NVVP3xoPAAA +mrNXb/QVrkG6pMijaFWH1AAA +xVC7JLSvakCV/fOil1YTTgAA +cdH8abq6NkqwMOZTM1qowAAA +2 + +False +ByfvBxwbrkGP5+WxTb1ZvQAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +3VNBJgUT1ESbJj6oerBRBwAA +AEIM9ftCKkqu23ENSoylIwAA +cYJMKLARhkqBRBxgr/mmugAA +9Sc4ehY3F02Nnq/1ONnHqwAA + + +ByfvBxwbrkGP5+WxTb1ZvQAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +NEF5UFpEPEa8LewZkL+pzwAA +Y1wfv+TbeUiBIWyr3XF1oQAA +4dzksrgLRkmn2K4+PzVAAwAA +Q4VfY2mKEEagQ9Sien0oAQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +Er/IcQJ6aEWnC/jnbAerxwAA +vBSCcR0zEk6heJhRA9+/jgAA +R6sDVbUzmkCOpOqDtgb95QAA +7cSC8fDODkGhE34/Ivo2lgAA +2 + +False +plxmjyQkfUmt2P8uBP0I6AAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +ZW5MBHm/2E+1yLMrcVeXyAAA +NJoq9GUiXEaB6kF2/+oD7AAA +6FsSzIh78kuXWgeKyKOr7wAA +J+7OtBHv/UiHHToH+mQHIwAA + + +plxmjyQkfUmt2P8uBP0I6AAA +PjS4k33/kkePfB8R0Qh14AAA +4 +jGNkdF3HkkKq7jXTrUZsTAAA +Li1yPbg3ikmowJct/XLIJAAA +9gWvY2I19ECJ2JHZyICmaQAA +hthvjK6+IkGurSwM1sO5sgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +9M8k9jVEn0+imHxWtip8zAAA +hW2TBOZ2GkeqyvR1LcoA5wAA +hStsUWIkaUSh3dHCIQDsrwAA +CchPSgqG2UO0y0CWv+CReQAA +2 + +False +PG5XF/RdmEuhi42wm0MztgAA +H7tysEnUp0+p4o84YYVC8wAA +4 +8M//8OjKVUSqYJEdATpcKAAA +xwmxcJfgmEu8jqFLV02ESAAA +NlHV9qheKkGJKyriXEMrswAA +Ol3remHhKU2PUt/ZVbbpJAAA + + +PG5XF/RdmEuhi42wm0MztgAA +al6ONjrnZ02miWcUt8E4UAAA +4 +KBiF4UWhM02naU25CE6x7wAA +0PDjvprOukaGpNXF/LrDOwAA +iL4ldjmKCkaQddS8Us9lfAAA +GbSXYAXuPk2AA2X25+e75QAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +cQ1UjZFa+ESsldzOxc7x3QAA +AtxUfjiFEUydozX3zTxuhwAA +KsGqvKBGZUydfvlFOVBsEgAA +gkMsHVqkvUmf5sTBDQbbsAAA +2 + +False +iEqKHNrjWEaqo2MpcoTeAQAA +fKAlsL5x3U2cAiir26vsAQAA +4 +B5vrno8oG0WHRR8oSnvztAAA +NbPIuO0EIESPkD83Qt/7XgAA +bQXIiy3wuE2GktotZ3qRpwAA +mPVhNLie/0iyIDYp2Gz8qQAA + + +iEqKHNrjWEaqo2MpcoTeAQAA +al6ONjrnZ02miWcUt8E4UAAA +4 ++VnS4mxEAUq9GjK1ZFjNXQAA +yVZBSXDgcUKk6XXGrLlG9AAA +hWLHN4VgR0yLbOmpAcO7dAAA +1yjIF/Qtf0GkiyuhS3lHygAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 ++LqteTvUZE251X37ePI5ZAAA +HhvsYpgiZU60i3Xl73iPAgAA +LQbJiz7F40aHUaMTr1nEzwAA +0LhdsydzF0y5rwKnzrEH3gAA +2 + +False +vqzVjlQpAEeeuOH/0tJhSAAA +VwrgoiK6h0aUxHMgZDKYzgAA +4 +nwZrxb0/aEag3U0cftcxwgAA +ChThwtngvE+E3bcbm5+U0gAA +qKPU767g40WK0aKOE2zsmQAA +DfEPI33WlEmquhQKU5JasAAA + + +vqzVjlQpAEeeuOH/0tJhSAAA +al6ONjrnZ02miWcUt8E4UAAA +4 +Tco0ZKyigkO6i2JgbPbPIQAA +3tmwS2FY1EGofHOFKms2MgAA +53HyKe99JEqda3YnEmrceAAA +E0CDlfpJaEKd9B/hBrb5GAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +9XMJ/3cDAkGuEKCPVj/iLgAA +aNni7X6kCkOBY0PEh7ixuAAA +RSavgDXHsESBKomJM7XxEQAA +q1torB3CA0eIlcbHri8UwwAA +2 + +False +/EsTz8Iu7ECqGh594+MkSQAA +KbXj7bLsjku9BsYv/z63VgAA +4 +J8Ih4QVnQU6I8JCUJASGuAAA +cMDPJmJtrU6c0kZBz/ximAAA +E97u9+CrykCHzJci7EX1KQAA +4wjKRNNezUatUAECs4Om1AAA + + +/EsTz8Iu7ECqGh594+MkSQAA +al6ONjrnZ02miWcUt8E4UAAA +4 +B5R1mtT4dUOs/uV+LEdqJQAA +PMbDtRXQP022rtEQoHIsJAAA +89NTUxBLMEmo6yCmqgDLggAA +FCgtSBb5AUyBOqaQo4qF8wAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +SsN0wbB3DEGugos94Z/JYwAA +ekUUyiGzWUWPspF8MnvCswAA +PR4n1D+cl0e6xcc2Zdy7yQAA +j4JeUkGqLkirbgrhVMRK5gAA +2 + +WE9oOq/kF0adq9jjlgnt+QAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +xNaWyCZ2MESTbdkfExzSxAAA +xYc4/Jkqt0OCuBTuA6733AAA +bPF50ox5zE6HMrPNhutaOwAA +d1IlJObWTEGOk3bLwFcFWwAA + + +WE9oOq/kF0adq9jjlgnt+QAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +gkOedX9Cz06jnDCM9ARFyQAA +EO4KK2YeREWHhpdgBsQtYgAA +zdUjjhIrB0O0sZtN7FwV0QAA +kGh4Q/1e+0GaAxkswm+e4wAA + + + +category +yePcB6NdXUG1SBs2wQJA7gAA +4 +rBTgf3yyy0aS7AIMV4nbCQAA +RqFpqzo6aUWchYkICso+VgAA +kfLWWLVjAUCnHHoYoOY80gAA +pNHW3mFR1EuqKtBZ0lEYtQAA +2 + +False +l+7wPt1sHES9zLE77waRvAAA +tnTkvoZxVkmVjIgd8K6VcwAA +4 +Qtw8TQW17EyiHPP9duIpmgAA +hfcihhN1fEucjFfISu659wAA +rw3GNGbVAkmfSnZ0YJp4IgAA +544/CBy42Uald/FJpfiMLAAA + + +l+7wPt1sHES9zLE77waRvAAA +a7yZcyAyl02YNl0/FQziyQAA +4 +Ga3kGBw73kWCOVxx9Gc3nwAA +kRal9tDw8EeSrCb++k1TFwAA +NA2W+LpMOkmJqV2S9qUWRQAA +K8HheBKFdEmD9vNkhTY8AQAA + + + +classic-app-feature-design +yePcB6NdXUG1SBs2wQJA7gAA +8 +5o0i3tmiW0+wft5WJgf5swAA +bg+NK1sooUqJH1CpV8UXwAAA +xmpQPQJJdk2Ec8ulseJkagAA +Wg9ZznDfo06M9wmoPdl22QAA +01HabwybsEaAlwmb1OptXgAA +2+4IHs6fZkei6MLJQpxRbgAA +SHP5QIYVmUGk+aKxaEEI5QAA +wSIkDkt3JEOnveIWvMvNCgAA +2 +0IK4qX1pZ0mmy0tW1H9wYwAA +fj2tpTa4tk+iVJg+TnTWUwAA + + +design +yePcB6NdXUG1SBs2wQJA7gAA +4 +G8pGxp+7HUOghY85Kx80HQAA +aeHC4Yjoh0ucOGTxKyLb4gAA +atNQRsYI/0mjirZ+8TZzDwAA +7QV7Nl/UIEWUAuEvbQssJQAA +2 + +False +Fcx+CoxfEEarzL288+IirQAA +06qF2g1ff02RsBbBfLLo1gAA +4 +avUyx+z1eE2dyQcfhRb/FQAA +t1H4mK6dSEi22SACXk4y/QAA +1o8CdcWHrEOj+z2wlQOfHgAA +P2p+IwPuckCIxXAN+vu53QAA + + +Fcx+CoxfEEarzL288+IirQAA +tnTkvoZxVkmVjIgd8K6VcwAA +4 +T/SQSHCXrkaTeb3BFxL/2AAA +REy7OWWSmU2pymx4frsGYQAA +dyVmgja1vUWTzr/uWr1FKwAA +q2uSCcTV/EiZ09/S9Q4pDAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +K/N48hEc90isDNHluhXYGgAA +KYwFn2j5vEquoL1ESGlO2wAA +7flh+JkZmUKn3EqRfO+QpQAA +guHoA/ZQVkKDLUmxpDnphQAA +2 + +False +CcwrYONHfkWTOXKrfeQn0wAA +tnTkvoZxVkmVjIgd8K6VcwAA +4 +9CvdUbFDPUK8uydeWfgaogAA ++8SKxD5O7kSdbG3JZelAXAAA +tzPR94GDPUm22smF7UOd4AAA +GzFDAGVvP0mwhHa6Eh0vogAA + + +CcwrYONHfkWTOXKrfeQn0wAA +hi9GvwnwFkKy8F8f44i8mgAA +4 +pjfvTV+rVEG0U2S/tnmpAgAA +tbNgjQq2m0qlWalcRV5NBAAA +IbDFIc73vEGKrItGjul6sgAA +K7ZFSLnY9Um1ZqEWD30hJgAA + + + +end-of-proc +yePcB6NdXUG1SBs2wQJA7gAA +8 +E3qklen4DEiMkHMgk5C+JQAA ++grsi8aXYkOskmRWw+4JbQAA +O8P1m/Sat0OzXVaEJZStyAAA +B+lztxU5Dk+JfaJmkCY8hgAA +7yHMpOEN0EiC2uZBihzZkQAA +aaTGLHBaO0qCxv9DsJ2emwAA +is3BMmH6G0qHp9SnOXbFrgAA +AzVPqKGUmkycVwzbt3F/pAAA +4 +dn0Z1OGNQ0a5XNqkWwGbGQAA +e/jJUmPBsUuFL+zaG4xKZgAA +nveEivVzpUOmQHaQgBzwHgAA +3okeT8etnkmVfryHL+rOcQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +8 +vSDgm3TeekGlZwnl1HP0qQAA +UuSa6Jn+N0+CIZtXQIn1wwAA +ChZbXv/JqUiuzlF1YHAa0wAA +rUH0SgsgXkmIICcw5cm0cQAA +VtQ/BitCuEGKeKkUqNzdygAA +oVIweKrLf0WsLgvbubPwOAAA +XO/MdlBoPE2cxpYHwTFQRQAA +tXz6Gw8dw0OnFyN59BPnagAA +2 + +False +D/6a5FDvaU2giul+pputrgAA +hi9GvwnwFkKy8F8f44i8mgAA +8 +Nxo1uq8xpECF6vxcmPsbFAAA +Da0sgjocFUGwnJOSvCY2AwAA +fq/dHJxaQkGr3OLIoNFWLQAA +X/h+NkqLtkuIanPTvPxGBwAA +cyqa3qRfn06e6wJKn5IUtgAA +GtpB9hj7rUGuVbAd69VliAAA +7nTyRTsvqUOh9Q7S310qiAAA +Bn/qveELaUSDSRPENyFXtQAA + + +D/6a5FDvaU2giul+pputrgAA +2LU3javC70yzEUTHd0L+VAAA +8 +JUivG0vsokWf0vlAAlyUEQAA +ZLfFS2SWZUWHVGawr0+0BAAA +0C+g3w4rhUyU7EJ7+EW+GwAA +tJRgIY9UPEy3iQM1Por1agAA +BovzmAL4U0SxsJj6w3As5QAA +7WwZN4h56kCEBDeESGRrOgAA +wk2NSn8RMkyo/K+wslJ4rAAA +Nk3QEyhBLkSD+lcXBWAvPAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +GtvxPyG8TE+iL/5hGOXsiwAA +BhUfe/tLakq87Pz84FKHJAAA +kcfFmnmlpE+OJF4nbnQIXgAA +7D0owjECbEGH1PeS7URueQAA +2 + +False +YHQtCOYCXU6JlB3IIm7OuQAA +a7yZcyAyl02YNl0/FQziyQAA +4 +68OMF0Yq4UeC8WOgCACF6gAA +6HR180RrWUu7KmqtQtfgSQAA +2Zm4OGI8TE2SLS93SIfd4QAA +QnEeEzHjKEG+xlPNKURJuQAA + + +YHQtCOYCXU6JlB3IIm7OuQAA +2LU3javC70yzEUTHd0L+VAAA +4 +4qJLBp2kokWxpO9Di7YOPgAA +VSIsPEctxkye85otBGzNlwAA +/ueUQo0Vk0GoAM+RDMeoQQAA +sCFp9JtJZE2HAdSOQk2ZEAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +8 +j3aSLqd5SEa5ECOCR/ep0wAA +95FdYrfr4EKlcvEbVN/+iAAA +NI1A1Mr0FEO5JDfRKlpIIgAA +stM3MzH2m0WqCLM6RV2A1AAA +7q+EIWAF6U2OD8EFGBLi9wAA +a6rllJp08UyNoILYO0ZDGAAA +hD1fqlWcMkqNR6XkXsPjxQAA +s4x5AMnuZkKtX1v3sNhviAAA +2 + +False +dOqivJTIIUigVVTdSjV6NQAA +mx6wTw6+KEuGtAr0iRUXJwAA +8 +aIk1FLU7xUujLgOzJuxyegAA +xsUp5xXaYUWmopn1ec8lQAAA +5QolDJ1+Nk2X9gtaLP95XwAA +JKtSAwXDLUi7VfWtN02AowAA +qrvUz8jqHE+P25Oemkxg8wAA +ve0GFgxs1Uim80BKzlf9twAA +DKxketRXtkSQFr75Q4Z4GQAA +8jhErecvD0OxjDb3sCDoIgAA + + +dOqivJTIIUigVVTdSjV6NQAA +06qF2g1ff02RsBbBfLLo1gAA +8 +IGTIPt4gvkCsiV1hazMeOQAA +piV76KL9i0GMCE3XnUA4cAAA +sUG4Z0dUp0qEP27TiylFbQAA +eERixS6x7E6JZhK21xo2SAAA +Yj3QEHtzQECnhXJ5tpcaXgAA +il8rhSJNa0ilvvEw0QPDaQAA +BlLvd/e2kECt1LVo/KlkKwAA +mMzSrrz0d0WRzJdhssK0GAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +AHgAz59sakycT1uGC/0bfwAA +odaUjQ23cEiputvcMBH4AQAA +fvduAOJN70+xe9+pglMJ9wAA ++1YcNllAmk6OB4X0037I9gAA +2 + +False +R5itKCcXY0KrRhRkbaji9QAA +06qF2g1ff02RsBbBfLLo1gAA +4 +jKZOYFpKDUeO6/tqwC6CcQAA +Cs456ZFZYke1J0SLFErp1wAA +7XwWma90TkmQzHEWZQqbdwAA +CqOBqA+JoU64NEGEN0fnlAAA + + +R5itKCcXY0KrRhRkbaji9QAA +h9lhv0QFq0aFwcWza3gsDAAA +4 +M0em+z0uiUact4Er3oUlOgAA +qWKZlZcTOEqt5EEXdp47CgAA +1JiqckmNXEu/JcX8iqNdJQAA +s+TUNMEkxU6hpOHfr+xi3QAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +WdsaDYIpME64TRUARPIYrQAA +mSYvghXBSkOhJN/xEfnV6AAA +QXyXsP+QRECfQcb39mIDxAAA +wFfHFGnoYkW1fv8AI/OGKgAA +2 + +False +wGKQiVXBLE+NlgisexkoeQAA +EjjnPhUmf02yFIvhJmdcmQAA +4 ++NoLioROWEeiPARKLDCN+wAA +MgAK1ZprykWyZ45LfEngngAA +7AmLpGOIG0q2LpsIwbAZyAAA ++D5SS2J5lUe0MSP5r7QCiwAA + + +wGKQiVXBLE+NlgisexkoeQAA +2LU3javC70yzEUTHd0L+VAAA +4 +f7cmTBFk2k6O75ckd9RThQAA +h8bY73mMGkq2+mPLeSOO4wAA +tI3cxhqUJkiKlMV+h2NW5QAA +/8MdOGkuSEWSuGAgqmCzGgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +T3KM5U5FfUW8PxhJPPuyigAA +tWc4YW7wtUGAp5aruL/I7QAA +m2kf1oaXGkWbvTjm5TdDaAAA +Xtd1Qzb5YU2uJZme3z6wGAAA +2 + +False ++UTsgf65KEqv4PlEE9eDUwAA +a7yZcyAyl02YNl0/FQziyQAA +4 +joymL8ZZbUqjMF0s780rMwAA +/F1gzg1W0kKrNTDaQmWTYQAA +VTqukkqeVUylcOpnpkEHQgAA +LpNQOYpfjEG0ooVcjm64HQAA + + ++UTsgf65KEqv4PlEE9eDUwAA +2LU3javC70yzEUTHd0L+VAAA +4 +eBaXXjEElkukIyXiy/0ZKgAA +yGuyBWc/aE6ay96LpDGPOwAA +w3KO/MdFwkOk9qFrN50QxwAA +rcCpKYnITkSa9mAoJwIt+QAA + + + + +Implementation Model +UMLStandard +implementationModel +IhiugfF1eE6vc8zKnVf8gAAA +1 + +ImplModel +PAdOgcwcsk+/d7YIjUX11gAA + +GQq3RWC/e0+WAmX5RQoy6wAA + + + + +Deployment Model +UMLStandard +deploymentModel +IhiugfF1eE6vc8zKnVf8gAAA +1 + +deployModel +7qxGQutBXU2dAghX9gmsOwAA + +djhlF/CGLkaIX1y/ia3ghQAA + + + + + + diff --git "a/devspec.en_US/dev-step-diagrams/devspec-20221116-\346\246\202\350\246\201\345\233\276.uml" "b/devspec.en_US/dev-step-diagrams/devspec-20221116-\346\246\202\350\246\201\345\233\276.uml" new file mode 100755 index 0000000..5885f39 --- /dev/null +++ "b/devspec.en_US/dev-step-diagrams/devspec-20221116-\346\246\202\350\246\201\345\233\276.uml" @@ -0,0 +1,30157 @@ + + + + + + +UMLStandard + + + + +devspec +4 + +Use Case Model +UMLStandard +useCaseModel +IhiugfF1eE6vc8zKnVf8gAAA +3 + +dev-actor +tacoxPrx8kCKprVgJHnvqgAA + +onlEfskXsk6Q+UgmrTExSAAA +57 + +clMaroon +216 +68 +485 +389 +IgjANDHFx02GXu/pd9UODQAA + + +dev-step + + +False + + +False + + + + +clMaroon +$00B9FFFF +205,328;400,266 +Haa/HtHu8EumDcJn1va7CgAA +OJNZyLkPgkW5YFYA5x/ChQAA +8ZQdZB1z0kaDUzkVHOzvRgAA + +False +1.5707963267949 +15 +Haa/HtHu8EumDcJn1va7CgAA + + +False +1.5707963267949 +30 +Haa/HtHu8EumDcJn1va7CgAA + + +False +-1.5707963267949 +15 +Haa/HtHu8EumDcJn1va7CgAA + + +False +-0.523598775598299 +30 +epHead +m5jTftKx4ku74ElHxxMotAAA + + +False +0.523598775598299 +30 +epTail +TeOn6G5DU0iPhLs634h/BwAA + + +False +0.523598775598299 +25 +epHead +m5jTftKx4ku74ElHxxMotAAA + + +False +-0.523598775598299 +25 +epTail +TeOn6G5DU0iPhLs634h/BwAA + + +False +-0.785398163397448 +40 +epHead +m5jTftKx4ku74ElHxxMotAAA + + +False +0.785398163397448 +40 +epTail +TeOn6G5DU0iPhLs634h/BwAA + + +False +-1000 +-1000 +50 +8 +m5jTftKx4ku74ElHxxMotAAA + + +False +-1000 +-1000 +50 +8 +TeOn6G5DU0iPhLs634h/BwAA + + + +clMaroon +$00B9FFFF +8 +192 +77 +78 +FkRCE52YAkaM/9oO8q9QFQAA + + +1 +author + + +False + + +False + + + +False +FkRCE52YAkaM/9oO8q9QFQAA + + +False +FkRCE52YAkaM/9oO8q9QFQAA + + + +clMaroon +$00B9FFFF +124 +192 +76 +78 +MLBX+NGx9kymQ76b9EAKuwAA + + +1 +tech-leader + + +False + + +False + + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + + +clMaroon +$00B9FFFF +108 +92 +101 +78 +A/9YWnHJBEGH1jC8FI2M9gAA + + +1 +maintainer + + +False + + +False + + + +False +A/9YWnHJBEGH1jC8FI2M9gAA + + +False +A/9YWnHJBEGH1jC8FI2M9gAA + + + +clMaroon +$00B9FFFF +116 +304 +90 +78 +oWDHE/AIyEqhL2zTdizC4AAA + + +1 +developper + + +False + + +False + + + +False +oWDHE/AIyEqhL2zTdizC4AAA + + +False +oWDHE/AIyEqhL2zTdizC4AAA + + + +clMaroon +$00B9FFFF +760 +376 +86 +78 +78O5f65/80OvpHK3AuBEIQAA + + +1 +tester + + +False + + +False + + + +False +78O5f65/80OvpHK3AuBEIQAA + + +False +78O5f65/80OvpHK3AuBEIQAA + + + +clMaroon +$00B9FFFF +764 +276 +77 +78 +u2JHX3nMn0CMyZLWTG2R1QAA + + +1 +user + + +False + + +False + + + +False +u2JHX3nMn0CMyZLWTG2R1QAA + + +False +u2JHX3nMn0CMyZLWTG2R1QAA + + + +clMaroon +$00B9FFFF +760 +192 +86 +78 +aaiB2ZAB7kOSB9niWMGCrAAA + + +1 +translator + + +False + + +False + + + +False +aaiB2ZAB7kOSB9niWMGCrAAA + + +False +aaiB2ZAB7kOSB9niWMGCrAAA + + + +clMaroon +$00B9FFFF +756 +108 +91 +78 +Pu4+pL+iiU6lRzDtfLIgJwAA + + +1 +documentor + + +False + + +False + + + +False +Pu4+pL+iiU6lRzDtfLIgJwAA + + +False +Pu4+pL+iiU6lRzDtfLIgJwAA + + + +clMaroon +$00B9FFFF +556 +292 +121 +45 +ymnyuU2meUmuFQCl8KW3EwAA + + +1 +bug-report + + +False + + +False + + + +False +ymnyuU2meUmuFQCl8KW3EwAA + + +False +ymnyuU2meUmuFQCl8KW3EwAA + + +False +ymnyuU2meUmuFQCl8KW3EwAA + + + +clMaroon +$00B9FFFF +412 +292 +101 +45 +5JcsdOcl2kmUJ1xczZEQMQAA + + +1 +test-task + + +False + + +False + + + +False +5JcsdOcl2kmUJ1xczZEQMQAA + + +False +5JcsdOcl2kmUJ1xczZEQMQAA + + +False +5JcsdOcl2kmUJ1xczZEQMQAA + + + +clMaroon +$00B9FFFF +392 +148 +142 +45 ++JrMCo45qEOWtcTsDjqTTgAA + + +1 +check-if-publish + + +False + + +False + + + +False ++JrMCo45qEOWtcTsDjqTTgAA + + +False ++JrMCo45qEOWtcTsDjqTTgAA + + +False ++JrMCo45qEOWtcTsDjqTTgAA + + + +clMaroon +$00B9FFFF +396 +392 +127 +45 +wFR71rqQ/kavPS+ztzufLgAA + + +1 +bug-fix + + +False + + +False + + + +False +wFR71rqQ/kavPS+ztzufLgAA + + +False +wFR71rqQ/kavPS+ztzufLgAA + + +False +wFR71rqQ/kavPS+ztzufLgAA + + + +clMaroon +$00B9FFFF +244 +264 +121 +45 +8v8IRJdlJUmbHIylKGey5wAA + + +1 +feature-list + + +False + + +False + + + +False +8v8IRJdlJUmbHIylKGey5wAA + + +False +8v8IRJdlJUmbHIylKGey5wAA + + +False +8v8IRJdlJUmbHIylKGey5wAA + + + +clMaroon +$00B9FFFF +252 +392 +108 +45 +fIx21ILIBUuXaoqKHt5Z2AAA + + +1 +develop + + +False + + +False + + + +False +fIx21ILIBUuXaoqKHt5Z2AAA + + +False +fIx21ILIBUuXaoqKHt5Z2AAA + + +False +fIx21ILIBUuXaoqKHt5Z2AAA + + + +clMaroon +$00B9FFFF +556 +392 +121 +45 +UtnSzF7bC0iukjII33XrugAA + + +1 +bug-retest + + +False + + +False + + + +False +UtnSzF7bC0iukjII33XrugAA + + +False +UtnSzF7bC0iukjII33XrugAA + + +False +UtnSzF7bC0iukjII33XrugAA + + + +clMaroon +$00B9FFFF +304,308;305,332 +Zk/ihiJuFkm1nc08/lO3JAAA +0NZb34oq+0iz6/8DYcniywAA +1XmGBT1/RUKVRwCIItHBqQAA + +False +1.5707963267949 +15 +Zk/ihiJuFkm1nc08/lO3JAAA + + +False +1.5707963267949 +30 +Zk/ihiJuFkm1nc08/lO3JAAA + + +False +-1.5707963267949 +15 +Zk/ihiJuFkm1nc08/lO3JAAA + + +False +-0.523598775598299 +30 +epHead +cqCsUEAeA0in0Z2LWweznwAA + + +False +0.523598775598299 +30 +epTail +DWmCv3GYyE+A4/wxNfV/TgAA + + +False +0.523598775598299 +25 +epHead +cqCsUEAeA0in0Z2LWweznwAA + + +False +-0.523598775598299 +25 +epTail +DWmCv3GYyE+A4/wxNfV/TgAA + + +False +-0.785398163397448 +40 +epHead +cqCsUEAeA0in0Z2LWweznwAA + + +False +0.785398163397448 +40 +epTail +DWmCv3GYyE+A4/wxNfV/TgAA + + +False +-1060 +-976 +50 +8 +cqCsUEAeA0in0Z2LWweznwAA + + +False +-1060 +-976 +50 +8 +DWmCv3GYyE+A4/wxNfV/TgAA + + + +clMaroon +$00B9FFFF +340,392;428,336 +ZYww4bhgbUujMdsXvrsGRwAA +BoXflTl2zkiHVb9rTj8+gQAA +gzOBaPhYH0Sqi38GA9ka4gAA + +False +1.5707963267949 +15 +ZYww4bhgbUujMdsXvrsGRwAA + + +False +1.5707963267949 +30 +ZYww4bhgbUujMdsXvrsGRwAA + + +False +-1.5707963267949 +15 +ZYww4bhgbUujMdsXvrsGRwAA + + +False +-0.523598775598299 +30 +epHead +PKDNpsNf/kGUvFpvwAiMgwAA + + +False +0.523598775598299 +30 +epTail +9vaywntHRUS9MFakEmMvSgAA + + +False +0.523598775598299 +25 +epHead +PKDNpsNf/kGUvFpvwAiMgwAA + + +False +-0.523598775598299 +25 +epTail +9vaywntHRUS9MFakEmMvSgAA + + +False +-0.785398163397448 +40 +epHead +PKDNpsNf/kGUvFpvwAiMgwAA + + +False +0.785398163397448 +40 +epTail +9vaywntHRUS9MFakEmMvSgAA + + +False +-1060 +-976 +50 +8 +PKDNpsNf/kGUvFpvwAiMgwAA + + +False +-1060 +-976 +50 +8 +9vaywntHRUS9MFakEmMvSgAA + + + +clMaroon +$00B9FFFF +556,414;522,414 +u+LRK0aPeU+CvKL8BjN4+AAA +vIM1yyr2zUeK8LOSwJnagwAA +t5UaBajz3kuwVYgFf4H/6gAA + +False +1.5707963267949 +15 +u+LRK0aPeU+CvKL8BjN4+AAA + + +False +1.5707963267949 +30 +u+LRK0aPeU+CvKL8BjN4+AAA + + +False +-1.5707963267949 +15 +u+LRK0aPeU+CvKL8BjN4+AAA + + +False +-0.523598775598299 +30 +epHead +xQhxxFEtpECHagEXOLUIWQAA + + +False +0.523598775598299 +30 +epTail +Ni4/biH/lE2VxdPr2OKnEwAA + + +False +0.523598775598299 +25 +epHead +xQhxxFEtpECHagEXOLUIWQAA + + +False +-0.523598775598299 +25 +epTail +Ni4/biH/lE2VxdPr2OKnEwAA + + +False +-0.785398163397448 +40 +epHead +xQhxxFEtpECHagEXOLUIWQAA + + +False +0.785398163397448 +40 +epTail +Ni4/biH/lE2VxdPr2OKnEwAA + + +False +-1060 +-976 +50 +8 +xQhxxFEtpECHagEXOLUIWQAA + + +False +-1060 +-976 +50 +8 +Ni4/biH/lE2VxdPr2OKnEwAA + + + +clMaroon +$00B9FFFF +616,336;616,392 +Q5rq4hug80amVs0OquyiyAAA +t5UaBajz3kuwVYgFf4H/6gAA +lwnbG+r6OEegyTwNJ3FUnQAA + +False +1.5707963267949 +15 +Q5rq4hug80amVs0OquyiyAAA + + +False +1.5707963267949 +30 +Q5rq4hug80amVs0OquyiyAAA + + +False +-1.5707963267949 +15 +Q5rq4hug80amVs0OquyiyAAA + + +False +-0.523598775598299 +30 +epHead +wki5AWxXakSVFXSFIAWF6wAA + + +False +0.523598775598299 +30 +epTail +8x8LgMHMS0+ZEvqndI0NEgAA + + +False +0.523598775598299 +25 +epHead +wki5AWxXakSVFXSFIAWF6wAA + + +False +-0.523598775598299 +25 +epTail +8x8LgMHMS0+ZEvqndI0NEgAA + + +False +-0.785398163397448 +40 +epHead +wki5AWxXakSVFXSFIAWF6wAA + + +False +0.785398163397448 +40 +epTail +8x8LgMHMS0+ZEvqndI0NEgAA + + +False +-1060 +-976 +50 +8 +wki5AWxXakSVFXSFIAWF6wAA + + +False +-1060 +-976 +50 +8 +8x8LgMHMS0+ZEvqndI0NEgAA + + + +clMaroon +$00B9FFFF +396,414;359,414 +Lslcq+/wp0+7suaGPGIyVAAA +gzOBaPhYH0Sqi38GA9ka4gAA +vIM1yyr2zUeK8LOSwJnagwAA + +False +1.5707963267949 +15 +Lslcq+/wp0+7suaGPGIyVAAA + + +False +1.5707963267949 +30 +Lslcq+/wp0+7suaGPGIyVAAA + + +False +-1.5707963267949 +15 +Lslcq+/wp0+7suaGPGIyVAAA + + +False +-0.523598775598299 +30 +epHead +9H2x6+kFc0eo6Z2KrSpZMgAA + + +False +0.523598775598299 +30 +epTail +UFqxiSQgyUeoy0qNucDjhwAA + + +False +0.523598775598299 +25 +epHead +9H2x6+kFc0eo6Z2KrSpZMgAA + + +False +-0.523598775598299 +25 +epTail +UFqxiSQgyUeoy0qNucDjhwAA + + +False +-0.785398163397448 +40 +epHead +9H2x6+kFc0eo6Z2KrSpZMgAA + + +False +0.785398163397448 +40 +epTail +UFqxiSQgyUeoy0qNucDjhwAA + + +False +-1060 +-976 +50 +8 +9H2x6+kFc0eo6Z2KrSpZMgAA + + +False +-1060 +-976 +50 +8 +UFqxiSQgyUeoy0qNucDjhwAA + + + +clMaroon +$00B9FFFF +205,364;261,392 +QAFwbnInOU6vOm8b8SgmzAAA +gzOBaPhYH0Sqi38GA9ka4gAA +8ZQdZB1z0kaDUzkVHOzvRgAA + +False +1.5707963267949 +15 +QAFwbnInOU6vOm8b8SgmzAAA + + +False +1.5707963267949 +30 +QAFwbnInOU6vOm8b8SgmzAAA + + +False +-1.5707963267949 +15 +QAFwbnInOU6vOm8b8SgmzAAA + + +False +-0.523598775598299 +30 +epHead +M0pjGsRCsEy2IjYa560UuwAA + + +False +0.523598775598299 +30 +epTail +89CSjktmDk6aTYzK0WeqxgAA + + +False +0.523598775598299 +25 +epHead +M0pjGsRCsEy2IjYa560UuwAA + + +False +-0.523598775598299 +25 +epTail +89CSjktmDk6aTYzK0WeqxgAA + + +False +-0.785398163397448 +40 +epHead +M0pjGsRCsEy2IjYa560UuwAA + + +False +0.785398163397448 +40 +epTail +89CSjktmDk6aTYzK0WeqxgAA + + +False +-1060 +-976 +50 +8 +M0pjGsRCsEy2IjYa560UuwAA + + +False +-1060 +-976 +50 +8 +89CSjktmDk6aTYzK0WeqxgAA + + + +clMaroon +$00B9FFFF +208,137;392,161 +otl6N6twSUqOS1ckH+zvkAAA +Vdh7zL8QZ0OtD+C+OlvxpgAA +qYv8SJgqPUajzKDRtANOvwAA + +False +1.5707963267949 +15 +otl6N6twSUqOS1ckH+zvkAAA + + +False +1.5707963267949 +30 +otl6N6twSUqOS1ckH+zvkAAA + + +False +-1.5707963267949 +15 +otl6N6twSUqOS1ckH+zvkAAA + + +False +-0.523598775598299 +30 +epHead +m5bOddD2ykOYQJ+JqC5GQwAA + + +False +0.523598775598299 +30 +epTail +hIwTub9FSkK/mA+8tg3vAQAA + + +False +0.523598775598299 +25 +epHead +m5bOddD2ykOYQJ+JqC5GQwAA + + +False +-0.523598775598299 +25 +epTail +hIwTub9FSkK/mA+8tg3vAQAA + + +False +-0.785398163397448 +40 +epHead +m5bOddD2ykOYQJ+JqC5GQwAA + + +False +0.785398163397448 +40 +epTail +hIwTub9FSkK/mA+8tg3vAQAA + + +False +-1060 +-976 +50 +8 +m5bOddD2ykOYQJ+JqC5GQwAA + + +False +-1060 +-976 +50 +8 +hIwTub9FSkK/mA+8tg3vAQAA + + + +clMaroon +$00B9FFFF +84,196;114,169 +/wV294vExESRsoCAG0SOGwAA +qYv8SJgqPUajzKDRtANOvwAA +nLppBSuFyk6GHv3rvWfvuwAA + +False +1.5707963267949 +15 +/wV294vExESRsoCAG0SOGwAA + + +False +1.5707963267949 +30 +/wV294vExESRsoCAG0SOGwAA + + +False +-1.5707963267949 +15 +/wV294vExESRsoCAG0SOGwAA + + +False +-0.523598775598299 +30 +epHead +kW2xBvd5ck+7hi+wjeIDWwAA + + +False +0.523598775598299 +30 +epTail +6Neco6zcl0uObHufbrc7/wAA + + +False +0.523598775598299 +25 +epHead +kW2xBvd5ck+7hi+wjeIDWwAA + + +False +-0.523598775598299 +25 +epTail +6Neco6zcl0uObHufbrc7/wAA + + +False +-0.785398163397448 +40 +epHead +kW2xBvd5ck+7hi+wjeIDWwAA + + +False +0.785398163397448 +40 +epTail +6Neco6zcl0uObHufbrc7/wAA + + +False +-1060 +-976 +50 +8 +kW2xBvd5ck+7hi+wjeIDWwAA + + +False +-1060 +-976 +50 +8 +6Neco6zcl0uObHufbrc7/wAA + + + +clMaroon +$00B9FFFF +84,230;124,230 +As4jKIWMwk6c065+KZeGGQAA +LqRrN84lGEeTv5o2IgfsSwAA +nLppBSuFyk6GHv3rvWfvuwAA + +False +1.5707963267949 +15 +As4jKIWMwk6c065+KZeGGQAA + + +False +1.5707963267949 +30 +As4jKIWMwk6c065+KZeGGQAA + + +False +-1.5707963267949 +15 +As4jKIWMwk6c065+KZeGGQAA + + +False +-0.523598775598299 +30 +epHead ++Lil4MWKjUOC2XYl8SjTegAA + + +False +0.523598775598299 +30 +epTail +RHQsOilQckSyjRNZMJggpgAA + + +False +0.523598775598299 +25 +epHead ++Lil4MWKjUOC2XYl8SjTegAA + + +False +-0.523598775598299 +25 +epTail +RHQsOilQckSyjRNZMJggpgAA + + +False +-0.785398163397448 +40 +epHead ++Lil4MWKjUOC2XYl8SjTegAA + + +False +0.785398163397448 +40 +epTail +RHQsOilQckSyjRNZMJggpgAA + + +False +-1060 +-976 +50 +8 ++Lil4MWKjUOC2XYl8SjTegAA + + +False +-1060 +-976 +50 +8 +RHQsOilQckSyjRNZMJggpgAA + + + +clMaroon +$00B9FFFF +84,267;121,304 +qSMM7YEtUUmnkrz3femcAQAA +8ZQdZB1z0kaDUzkVHOzvRgAA +nLppBSuFyk6GHv3rvWfvuwAA + +False +1.5707963267949 +15 +qSMM7YEtUUmnkrz3femcAQAA + + +False +1.5707963267949 +30 +qSMM7YEtUUmnkrz3femcAQAA + + +False +-1.5707963267949 +15 +qSMM7YEtUUmnkrz3femcAQAA + + +False +-0.523598775598299 +30 +epHead +gzYTAF1gIkizg/Vue/2ZQwAA + + +False +0.523598775598299 +30 +epTail +hNisF5EBTE2ATvCijhzvOQAA + + +False +0.523598775598299 +25 +epHead +gzYTAF1gIkizg/Vue/2ZQwAA + + +False +-0.523598775598299 +25 +epTail +hNisF5EBTE2ATvCijhzvOQAA + + +False +-0.785398163397448 +40 +epHead +gzYTAF1gIkizg/Vue/2ZQwAA + + +False +0.785398163397448 +40 +epTail +hNisF5EBTE2ATvCijhzvOQAA + + +False +-1060 +-976 +50 +8 +gzYTAF1gIkizg/Vue/2ZQwAA + + +False +-1060 +-976 +50 +8 +hNisF5EBTE2ATvCijhzvOQAA + + + +clMaroon +$00B9FFFF +760,414;676,414 +QOEK3K2D6E6pqfTn0mjGSQAA +t5UaBajz3kuwVYgFf4H/6gAA +55htDUboMkKutvJNMs10VwAA + +False +1.5707963267949 +15 +QOEK3K2D6E6pqfTn0mjGSQAA + + +False +1.5707963267949 +30 +QOEK3K2D6E6pqfTn0mjGSQAA + + +False +-1.5707963267949 +15 +QOEK3K2D6E6pqfTn0mjGSQAA + + +False +-0.523598775598299 +30 +epHead +8lZk7+ScDkGsGw40b2zWuQAA + + +False +0.523598775598299 +30 +epTail +06vNfm1gx0OR0K9NmGmXEQAA + + +False +0.523598775598299 +25 +epHead +8lZk7+ScDkGsGw40b2zWuQAA + + +False +-0.523598775598299 +25 +epTail +06vNfm1gx0OR0K9NmGmXEQAA + + +False +-0.785398163397448 +40 +epHead +8lZk7+ScDkGsGw40b2zWuQAA + + +False +0.785398163397448 +40 +epTail +06vNfm1gx0OR0K9NmGmXEQAA + + +False +-1048 +-1000 +50 +8 +8lZk7+ScDkGsGw40b2zWuQAA + + +False +-1048 +-1000 +50 +8 +06vNfm1gx0OR0K9NmGmXEQAA + + + +clMaroon +$00B9FFFF +764,314;676,314 +BunHMt9UUEaob51EuVirsAAA +lwnbG+r6OEegyTwNJ3FUnQAA +jBby7rVxVkO+HkQ21KY54wAA + +False +1.5707963267949 +15 +BunHMt9UUEaob51EuVirsAAA + + +False +1.5707963267949 +30 +BunHMt9UUEaob51EuVirsAAA + + +False +-1.5707963267949 +15 +BunHMt9UUEaob51EuVirsAAA + + +False +-0.523598775598299 +30 +epHead +WX2MlGTb6EOX2luk/so3YwAA + + +False +0.523598775598299 +30 +epTail +h8kotrimC0Cpk4nuHRgyzAAA + + +False +0.523598775598299 +25 +epHead +WX2MlGTb6EOX2luk/so3YwAA + + +False +-0.523598775598299 +25 +epTail +h8kotrimC0Cpk4nuHRgyzAAA + + +False +-0.785398163397448 +40 +epHead +WX2MlGTb6EOX2luk/so3YwAA + + +False +0.785398163397448 +40 +epTail +h8kotrimC0Cpk4nuHRgyzAAA + + +False +-1048 +-1000 +50 +8 +WX2MlGTb6EOX2luk/so3YwAA + + +False +-1048 +-1000 +50 +8 +h8kotrimC0Cpk4nuHRgyzAAA + + + +clMaroon +$00B9FFFF +462,292;463,268 +GkzxRdxRNkmn62ufJTw13wAA +OJNZyLkPgkW5YFYA5x/ChQAA +BoXflTl2zkiHVb9rTj8+gQAA + +False +1.5707963267949 +15 +GkzxRdxRNkmn62ufJTw13wAA + + +False +1.5707963267949 +30 +GkzxRdxRNkmn62ufJTw13wAA + + +False +-1.5707963267949 +15 +GkzxRdxRNkmn62ufJTw13wAA + + +False +-0.523598775598299 +30 +epHead +UjrU3zr4ikWZcD67/VJ22wAA + + +False +0.523598775598299 +30 +epTail +LLG2+9u6KkebumqGep6bfAAA + + +False +0.523598775598299 +25 +epHead +UjrU3zr4ikWZcD67/VJ22wAA + + +False +-0.523598775598299 +25 +epTail +LLG2+9u6KkebumqGep6bfAAA + + +False +-0.785398163397448 +40 +epHead +UjrU3zr4ikWZcD67/VJ22wAA + + +False +0.785398163397448 +40 +epTail +LLG2+9u6KkebumqGep6bfAAA + + +False +-1000 +-1000 +50 +8 +UjrU3zr4ikWZcD67/VJ22wAA + + +False +-1000 +-1000 +50 +8 +LLG2+9u6KkebumqGep6bfAAA + + + +clMaroon +$00B9FFFF +248 +88 +121 +45 +FPjdKo5EqkuvbojCyT40wAAA + + +1 +pkg-publish + + +False + + +False + + + +False +FPjdKo5EqkuvbojCyT40wAAA + + +False +FPjdKo5EqkuvbojCyT40wAAA + + +False +FPjdKo5EqkuvbojCyT40wAAA + + + +clMaroon +$00B9FFFF +208,123;248,118 +atCUWqlo80uXI6LZ5VXAqwAA +7R3Vtrr63kqhX5GzE7CY4gAA +qYv8SJgqPUajzKDRtANOvwAA + +False +1.5707963267949 +15 +atCUWqlo80uXI6LZ5VXAqwAA + + +False +1.5707963267949 +30 +atCUWqlo80uXI6LZ5VXAqwAA + + +False +-1.5707963267949 +15 +atCUWqlo80uXI6LZ5VXAqwAA + + +False +-0.523598775598299 +30 +epHead +ZCmKuqp4sE2/fLQrj5OH6AAA + + +False +0.523598775598299 +30 +epTail +1rd1mOGAkk26xSFOjW6oBQAA + + +False +0.523598775598299 +25 +epHead +ZCmKuqp4sE2/fLQrj5OH6AAA + + +False +-0.523598775598299 +25 +epTail +1rd1mOGAkk26xSFOjW6oBQAA + + +False +-0.785398163397448 +40 +epHead +ZCmKuqp4sE2/fLQrj5OH6AAA + + +False +0.785398163397448 +40 +epTail +1rd1mOGAkk26xSFOjW6oBQAA + + +False +-1000 +-1000 +50 +8 +ZCmKuqp4sE2/fLQrj5OH6AAA + + +False +-1000 +-1000 +50 +8 +1rd1mOGAkk26xSFOjW6oBQAA + + + +clMaroon +$00B9FFFF +463,224;462,192 +VSr15ngAt0ucp/JSndd7fAAA +Vdh7zL8QZ0OtD+C+OlvxpgAA +OJNZyLkPgkW5YFYA5x/ChQAA + +False +1.5707963267949 +15 +VSr15ngAt0ucp/JSndd7fAAA + + +False +1.5707963267949 +30 +VSr15ngAt0ucp/JSndd7fAAA + + +False +-1.5707963267949 +15 +VSr15ngAt0ucp/JSndd7fAAA + + +False +-0.523598775598299 +30 +epHead +P1DmfF8A8U+xRvMvkio6ggAA + + +False +0.523598775598299 +30 +epTail +/91dQ7rhgUSI28jqjPHooQAA + + +False +0.523598775598299 +25 +epHead +P1DmfF8A8U+xRvMvkio6ggAA + + +False +-0.523598775598299 +25 +epTail +/91dQ7rhgUSI28jqjPHooQAA + + +False +-0.785398163397448 +40 +epHead +P1DmfF8A8U+xRvMvkio6ggAA + + +False +0.785398163397448 +40 +epTail +/91dQ7rhgUSI28jqjPHooQAA + + +False +-1000 +-1000 +50 +8 +P1DmfF8A8U+xRvMvkio6ggAA + + +False +-1000 +-1000 +50 +8 +/91dQ7rhgUSI28jqjPHooQAA + + + +clMaroon +$00B9FFFF +756,159;527,227 +t3ESzDEjd0ut89bd3IyWPQAA +OJNZyLkPgkW5YFYA5x/ChQAA +iDOAaVuVSUO57121Dqj8JQAA + +False +1.5707963267949 +15 +t3ESzDEjd0ut89bd3IyWPQAA + + +False +1.5707963267949 +30 +t3ESzDEjd0ut89bd3IyWPQAA + + +False +-1.5707963267949 +15 +t3ESzDEjd0ut89bd3IyWPQAA + + +False +-0.523598775598299 +30 +epHead +UVpvR8JQo0Goo1thnZ8TQwAA + + +False +0.523598775598299 +30 +epTail +UV6CUGeKi0qg+WyJsqDNMAAA + + +False +0.523598775598299 +25 +epHead +UVpvR8JQo0Goo1thnZ8TQwAA + + +False +-0.523598775598299 +25 +epTail +UV6CUGeKi0qg+WyJsqDNMAAA + + +False +-0.785398163397448 +40 +epHead +UVpvR8JQo0Goo1thnZ8TQwAA + + +False +0.785398163397448 +40 +epTail +UV6CUGeKi0qg+WyJsqDNMAAA + + +False +-1048 +-1000 +50 +8 +UVpvR8JQo0Goo1thnZ8TQwAA + + +False +-1048 +-1000 +50 +8 +UV6CUGeKi0qg+WyJsqDNMAAA + + + +clMaroon +$00B9FFFF +760,232;527,243 +j2qfJOQnLEyR5RVtbVGb8AAA +OJNZyLkPgkW5YFYA5x/ChQAA +OS8e8Zau7kWMtinIvCc/swAA + +False +1.5707963267949 +15 +j2qfJOQnLEyR5RVtbVGb8AAA + + +False +1.5707963267949 +30 +j2qfJOQnLEyR5RVtbVGb8AAA + + +False +-1.5707963267949 +15 +j2qfJOQnLEyR5RVtbVGb8AAA + + +False +-0.523598775598299 +30 +epHead +8zPYwZBWOEuUZxPtPgU/YQAA + + +False +0.523598775598299 +30 +epTail +DcOYQKycgUqgn2jU568/iAAA + + +False +0.523598775598299 +25 +epHead +8zPYwZBWOEuUZxPtPgU/YQAA + + +False +-0.523598775598299 +25 +epTail +DcOYQKycgUqgn2jU568/iAAA + + +False +-0.785398163397448 +40 +epHead +8zPYwZBWOEuUZxPtPgU/YQAA + + +False +0.785398163397448 +40 +epTail +DcOYQKycgUqgn2jU568/iAAA + + +False +-1048 +-1000 +50 +8 +8zPYwZBWOEuUZxPtPgU/YQAA + + +False +-1048 +-1000 +50 +8 +DcOYQKycgUqgn2jU568/iAAA + + + +clMaroon +$00B9FFFF +406,148;365,132 +L3wUC+fjukG9Mbmq0QYdiwAA +7R3Vtrr63kqhX5GzE7CY4gAA +Vdh7zL8QZ0OtD+C+OlvxpgAA + +False +1.5707963267949 +15 +L3wUC+fjukG9Mbmq0QYdiwAA + + +False +1.5707963267949 +30 +L3wUC+fjukG9Mbmq0QYdiwAA + + +False +-1.5707963267949 +15 +L3wUC+fjukG9Mbmq0QYdiwAA + + +False +-0.523598775598299 +30 +epHead +MVnve7DJ0kSTrd01IVyX1gAA + + +False +0.523598775598299 +30 +epTail +zaihnGbFv0SYjieuD3Ii+wAA + + +False +0.523598775598299 +25 +epHead +MVnve7DJ0kSTrd01IVyX1gAA + + +False +-0.523598775598299 +25 +epTail +zaihnGbFv0SYjieuD3Ii+wAA + + +False +-0.785398163397448 +40 +epHead +MVnve7DJ0kSTrd01IVyX1gAA + + +False +0.785398163397448 +40 +epTail +zaihnGbFv0SYjieuD3Ii+wAA + + +False +-1000 +-1000 +50 +8 +MVnve7DJ0kSTrd01IVyX1gAA + + +False +-1000 +-1000 +50 +8 +zaihnGbFv0SYjieuD3Ii+wAA + + + +clMaroon +$00B9FFFF +199,245;248,264 +ESsTAdhYyU64zi6/oVqTKgAA +1XmGBT1/RUKVRwCIItHBqQAA +LqRrN84lGEeTv5o2IgfsSwAA + +False +1.5707963267949 +15 +ESsTAdhYyU64zi6/oVqTKgAA + + +False +1.5707963267949 +30 +ESsTAdhYyU64zi6/oVqTKgAA + + +False +-1.5707963267949 +15 +ESsTAdhYyU64zi6/oVqTKgAA + + +False +-0.523598775598299 +30 +epHead +jqMq51leBkGUbLZ/J6mVggAA + + +False +0.523598775598299 +30 +epTail +NuLaPfQwkkOm5+Z8IfTRQwAA + + +False +0.523598775598299 +25 +epHead +jqMq51leBkGUbLZ/J6mVggAA + + +False +-0.523598775598299 +25 +epTail +NuLaPfQwkkOm5+Z8IfTRQwAA + + +False +-0.785398163397448 +40 +epHead +jqMq51leBkGUbLZ/J6mVggAA + + +False +0.785398163397448 +40 +epTail +NuLaPfQwkkOm5+Z8IfTRQwAA + + +False +-1000 +-1000 +50 +8 +jqMq51leBkGUbLZ/J6mVggAA + + +False +-1000 +-1000 +50 +8 +NuLaPfQwkkOm5+Z8IfTRQwAA + + + +clMaroon +$00B9FFFF +240 +332 +132 +45 +rxa+oNm2Kk2e9yVRZgZC4gAA + + +1 +design-module + + +False + + +False + + + +False +rxa+oNm2Kk2e9yVRZgZC4gAA + + +False +rxa+oNm2Kk2e9yVRZgZC4gAA + + +False +rxa+oNm2Kk2e9yVRZgZC4gAA + + + +clMaroon +$00B9FFFF +305,376;305,392 +udZiFgT1HUuXSsB17nyApQAA +gzOBaPhYH0Sqi38GA9ka4gAA +0NZb34oq+0iz6/8DYcniywAA + +False +1.5707963267949 +15 +udZiFgT1HUuXSsB17nyApQAA + + +False +1.5707963267949 +30 +udZiFgT1HUuXSsB17nyApQAA + + +False +-1.5707963267949 +15 +udZiFgT1HUuXSsB17nyApQAA + + +False +-0.523598775598299 +30 +epHead +Bkj3nzY1Z0OpLErETn5JAAAA + + +False +0.523598775598299 +30 +epTail +iGT7GmF0r0CH0TSScrk62AAA + + +False +0.523598775598299 +25 +epHead +Bkj3nzY1Z0OpLErETn5JAAAA + + +False +-0.523598775598299 +25 +epTail +iGT7GmF0r0CH0TSScrk62AAA + + +False +-0.785398163397448 +40 +epHead +Bkj3nzY1Z0OpLErETn5JAAAA + + +False +0.785398163397448 +40 +epTail +iGT7GmF0r0CH0TSScrk62AAA + + +False +-1000 +-1000 +50 +8 +Bkj3nzY1Z0OpLErETn5JAAAA + + +False +-1000 +-1000 +50 +8 +iGT7GmF0r0CH0TSScrk62AAA + + + +clMaroon +$00B9FFFF +760,402;512,329 +pRL6RWX7IUGI9SeSZRJAEwAA +BoXflTl2zkiHVb9rTj8+gQAA +55htDUboMkKutvJNMs10VwAA + +False +1.5707963267949 +15 +pRL6RWX7IUGI9SeSZRJAEwAA + + +False +1.5707963267949 +30 +pRL6RWX7IUGI9SeSZRJAEwAA + + +False +-1.5707963267949 +15 +pRL6RWX7IUGI9SeSZRJAEwAA + + +False +-0.523598775598299 +30 +epHead +He/O+ItNt0+c+XSWNytz9gAA + + +False +0.523598775598299 +30 +epTail +S4UJZMo1R0qd1Tyo5YNdtgAA + + +False +0.523598775598299 +25 +epHead +He/O+ItNt0+c+XSWNytz9gAA + + +False +-0.523598775598299 +25 +epTail +S4UJZMo1R0qd1Tyo5YNdtgAA + + +False +-0.785398163397448 +40 +epHead +He/O+ItNt0+c+XSWNytz9gAA + + +False +0.785398163397448 +40 +epTail +S4UJZMo1R0qd1Tyo5YNdtgAA + + +False +-1000 +-1000 +50 +8 +He/O+ItNt0+c+XSWNytz9gAA + + +False +-1000 +-1000 +50 +8 +S4UJZMo1R0qd1Tyo5YNdtgAA + + + +clMaroon +$00B9FFFF +536 +96 +149 +45 +cH75vr0YhkuvV/fYij/FMgAA + + +1 +download & build + + +False + + +False + + + +False +cH75vr0YhkuvV/fYij/FMgAA + + +False +cH75vr0YhkuvV/fYij/FMgAA + + +False +cH75vr0YhkuvV/fYij/FMgAA + + + +clMaroon +$00B9FFFF +368,112;536,116 +wARDKsfmxU6pDs0VU6O25wAA +DOHBlVwZH0CnyAOdMPUqxQAA +7R3Vtrr63kqhX5GzE7CY4gAA + +False +1.5707963267949 +15 +wARDKsfmxU6pDs0VU6O25wAA + + +False +1.5707963267949 +30 +wARDKsfmxU6pDs0VU6O25wAA + + +False +-1.5707963267949 +15 +wARDKsfmxU6pDs0VU6O25wAA + + +False +-0.523598775598299 +30 +epHead +tMwNvnbWx0qC99wvlGYF3AAA + + +False +0.523598775598299 +30 +epTail +6sd33lS3GkaENMAtDneYfAAA + + +False +0.523598775598299 +25 +epHead +tMwNvnbWx0qC99wvlGYF3AAA + + +False +-0.523598775598299 +25 +epTail +6sd33lS3GkaENMAtDneYfAAA + + +False +-0.785398163397448 +40 +epHead +tMwNvnbWx0qC99wvlGYF3AAA + + +False +0.785398163397448 +40 +epTail +6sd33lS3GkaENMAtDneYfAAA + + +False +-1000 +-1000 +50 +8 +tMwNvnbWx0qC99wvlGYF3AAA + + +False +-1000 +-1000 +50 +8 +6sd33lS3GkaENMAtDneYfAAA + + + +clMaroon +$00B9FFFF +765,276;632,140 +NRxXI+ohkUa8ldCSWR3lNQAA +DOHBlVwZH0CnyAOdMPUqxQAA +jBby7rVxVkO+HkQ21KY54wAA + +False +1.5707963267949 +15 +NRxXI+ohkUa8ldCSWR3lNQAA + + +False +1.5707963267949 +30 +NRxXI+ohkUa8ldCSWR3lNQAA + + +False +-1.5707963267949 +15 +NRxXI+ohkUa8ldCSWR3lNQAA + + +False +-0.523598775598299 +30 +epHead +VvLdglslUUqBPX/aHaWVywAA + + +False +0.523598775598299 +30 +epTail +8hHEA5HEUkaJOUrimD+IqwAA + + +False +0.523598775598299 +25 +epHead +VvLdglslUUqBPX/aHaWVywAA + + +False +-0.523598775598299 +25 +epTail +8hHEA5HEUkaJOUrimD+IqwAA + + +False +-0.785398163397448 +40 +epHead +VvLdglslUUqBPX/aHaWVywAA + + +False +0.785398163397448 +40 +epTail +8hHEA5HEUkaJOUrimD+IqwAA + + +False +-1000 +-1000 +50 +8 +VvLdglslUUqBPX/aHaWVywAA + + +False +-1000 +-1000 +50 +8 +8hHEA5HEUkaJOUrimD+IqwAA + + + +clMaroon +$00B9FFFF +544 +148 +127 +45 +K/jI5ejWkEmd+RwmoOHzSgAA + + +1 +new-demond + + +False + + +False + + + +False +K/jI5ejWkEmd+RwmoOHzSgAA + + +False +K/jI5ejWkEmd+RwmoOHzSgAA + + +False +K/jI5ejWkEmd+RwmoOHzSgAA + + + +clMaroon +$00B9FFFF +764,286;637,192 +HwNxguHxkEq1TTvntBzfPQAA ++xQR3R4Khk2Mr7tmPdkWSwAA +jBby7rVxVkO+HkQ21KY54wAA + +False +1.5707963267949 +15 +HwNxguHxkEq1TTvntBzfPQAA + + +False +1.5707963267949 +30 +HwNxguHxkEq1TTvntBzfPQAA + + +False +-1.5707963267949 +15 +HwNxguHxkEq1TTvntBzfPQAA + + +False +-0.523598775598299 +30 +epHead +LgaAK4fEB0e2otJzSn7toQAA + + +False +0.523598775598299 +30 +epTail +aS8jAO3xFkSspkn5BLzAQwAA + + +False +0.523598775598299 +25 +epHead +LgaAK4fEB0e2otJzSn7toQAA + + +False +-0.523598775598299 +25 +epTail +aS8jAO3xFkSspkn5BLzAQwAA + + +False +-0.785398163397448 +40 +epHead +LgaAK4fEB0e2otJzSn7toQAA + + +False +0.785398163397448 +40 +epTail +aS8jAO3xFkSspkn5BLzAQwAA + + +False +-1000 +-1000 +50 +8 +LgaAK4fEB0e2otJzSn7toQAA + + +False +-1000 +-1000 +50 +8 +aS8jAO3xFkSspkn5BLzAQwAA + + + +clMaroon +$00B9FFFF +772,376;625,192 +JDSYiscd1ku4Q9VTc3cxJAAA ++xQR3R4Khk2Mr7tmPdkWSwAA +55htDUboMkKutvJNMs10VwAA + +False +1.5707963267949 +15 +JDSYiscd1ku4Q9VTc3cxJAAA + + +False +1.5707963267949 +30 +JDSYiscd1ku4Q9VTc3cxJAAA + + +False +-1.5707963267949 +15 +JDSYiscd1ku4Q9VTc3cxJAAA + + +False +-0.523598775598299 +30 +epHead +hU4yh3LkjEKFkdS6cl0FBwAA + + +False +0.523598775598299 +30 +epTail +YldXkvDuwE27LSJywqCl4AAA + + +False +0.523598775598299 +25 +epHead +hU4yh3LkjEKFkdS6cl0FBwAA + + +False +-0.523598775598299 +25 +epTail +YldXkvDuwE27LSJywqCl4AAA + + +False +-0.785398163397448 +40 +epHead +hU4yh3LkjEKFkdS6cl0FBwAA + + +False +0.785398163397448 +40 +epTail +YldXkvDuwE27LSJywqCl4AAA + + +False +-1000 +-1000 +50 +8 +hU4yh3LkjEKFkdS6cl0FBwAA + + +False +-1000 +-1000 +50 +8 +YldXkvDuwE27LSJywqCl4AAA + + + +clMaroon +$00B9FFFF +550,192;362,264 +COsG4HSpZUe/Vic0aL5j4AAA +1XmGBT1/RUKVRwCIItHBqQAA ++xQR3R4Khk2Mr7tmPdkWSwAA + +False +1.5707963267949 +15 +COsG4HSpZUe/Vic0aL5j4AAA + + +False +1.5707963267949 +30 +COsG4HSpZUe/Vic0aL5j4AAA + + +False +-1.5707963267949 +15 +COsG4HSpZUe/Vic0aL5j4AAA + + +False +-0.523598775598299 +30 +epHead +TWHK+EvM0kuJxrZGPnmV/gAA + + +False +0.523598775598299 +30 +epTail +g4nzG5AXAUmT/Juw/Y+HhwAA + + +False +0.523598775598299 +25 +epHead +TWHK+EvM0kuJxrZGPnmV/gAA + + +False +-0.523598775598299 +25 +epTail +g4nzG5AXAUmT/Juw/Y+HhwAA + + +False +-0.785398163397448 +40 +epHead +TWHK+EvM0kuJxrZGPnmV/gAA + + +False +0.785398163397448 +40 +epTail +g4nzG5AXAUmT/Juw/Y+HhwAA + + +False +-1000 +-1000 +50 +8 +TWHK+EvM0kuJxrZGPnmV/gAA + + +False +-1000 +-1000 +50 +8 +g4nzG5AXAUmT/Juw/Y+HhwAA + + + +clMaroon +$00B9FFFF +400 +224 +128 +45 +ozTLGGkik02HnJ667z5MBQAA + + +1 +doc & tutorial + + +False + + +False + + + +False +ozTLGGkik02HnJ667z5MBQAA + + +False +ozTLGGkik02HnJ667z5MBQAA + + +False +ozTLGGkik02HnJ667z5MBQAA + + + +clMaroon +$00B9FFFF +199,222;392,184 +eD6wP/fAO0qZXgTPDYw14gAA +Vdh7zL8QZ0OtD+C+OlvxpgAA +LqRrN84lGEeTv5o2IgfsSwAA + +False +1.5707963267949 +15 +eD6wP/fAO0qZXgTPDYw14gAA + + +False +1.5707963267949 +30 +eD6wP/fAO0qZXgTPDYw14gAA + + +False +-1.5707963267949 +15 +eD6wP/fAO0qZXgTPDYw14gAA + + +False +-0.523598775598299 +30 +epHead +XNH/vjJrPkeWiAnFueRS2wAA + + +False +0.523598775598299 +30 +epTail +NwDa11zhX0qixnczVDBHswAA + + +False +0.523598775598299 +25 +epHead +XNH/vjJrPkeWiAnFueRS2wAA + + +False +-0.523598775598299 +25 +epTail +NwDa11zhX0qixnczVDBHswAA + + +False +-0.785398163397448 +40 +epHead +XNH/vjJrPkeWiAnFueRS2wAA + + +False +0.785398163397448 +40 +epTail +NwDa11zhX0qixnczVDBHswAA + + +False +-1000 +-1000 +50 +8 +XNH/vjJrPkeWiAnFueRS2wAA + + +False +-1000 +-1000 +50 +8 +NwDa11zhX0qixnczVDBHswAA + + + +clMaroon +$00B9FFFF +199,263;279,332 +ijA0VzIZG0G7ohk808I7EAAA +0NZb34oq+0iz6/8DYcniywAA +LqRrN84lGEeTv5o2IgfsSwAA + +False +1.5707963267949 +15 +ijA0VzIZG0G7ohk808I7EAAA + + +False +1.5707963267949 +30 +ijA0VzIZG0G7ohk808I7EAAA + + +False +-1.5707963267949 +15 +ijA0VzIZG0G7ohk808I7EAAA + + +False +-0.523598775598299 +30 +epHead +sHxTuCDocEyzJSz3moadcwAA + + +False +0.523598775598299 +30 +epTail +2wepYfQ1HEOA25v4ibitGAAA + + +False +0.523598775598299 +25 +epHead +sHxTuCDocEyzJSz3moadcwAA + + +False +-0.523598775598299 +25 +epTail +2wepYfQ1HEOA25v4ibitGAAA + + +False +-0.785398163397448 +40 +epHead +sHxTuCDocEyzJSz3moadcwAA + + +False +0.785398163397448 +40 +epTail +2wepYfQ1HEOA25v4ibitGAAA + + +False +-1000 +-1000 +50 +8 +sHxTuCDocEyzJSz3moadcwAA + + +False +-1000 +-1000 +50 +8 +2wepYfQ1HEOA25v4ibitGAAA + + + +clMaroon +$00B9FFFF +199,232;400,243 +tV4kKe/RSky6myfeSP18swAA +OJNZyLkPgkW5YFYA5x/ChQAA +LqRrN84lGEeTv5o2IgfsSwAA + +False +1.5707963267949 +15 +tV4kKe/RSky6myfeSP18swAA + + +False +1.5707963267949 +30 +tV4kKe/RSky6myfeSP18swAA + + +False +-1.5707963267949 +15 +tV4kKe/RSky6myfeSP18swAA + + +False +-0.523598775598299 +30 +epHead +yYIJFraZbU6Xh62CJfSi8wAA + + +False +0.523598775598299 +30 +epTail +PW0DMEjQBEykIxMEhQ5JaAAA + + +False +0.523598775598299 +25 +epHead +yYIJFraZbU6Xh62CJfSi8wAA + + +False +-0.523598775598299 +25 +epTail +PW0DMEjQBEykIxMEhQ5JaAAA + + +False +-0.785398163397448 +40 +epHead +yYIJFraZbU6Xh62CJfSi8wAA + + +False +0.785398163397448 +40 +epTail +PW0DMEjQBEykIxMEhQ5JaAAA + + +False +-1000 +-1000 +50 +8 +yYIJFraZbU6Xh62CJfSi8wAA + + +False +-1000 +-1000 +50 +8 +PW0DMEjQBEykIxMEhQ5JaAAA + + + +clMaroon +$00B9FFFF +16 +108 +130 +45 +wE/srVLQHE2sCDr/+ydmYAAA + + +1 +launch-publish + + +False + + +False + + + +False +wE/srVLQHE2sCDr/+ydmYAAA + + +False +wE/srVLQHE2sCDr/+ydmYAAA + + +False +wE/srVLQHE2sCDr/+ydmYAAA + + + +clMaroon +$00B9FFFF +205,346;240,349 +dK9I6bZRfUih3ErZpfx4hAAA +0NZb34oq+0iz6/8DYcniywAA +8ZQdZB1z0kaDUzkVHOzvRgAA + +False +1.5707963267949 +15 +dK9I6bZRfUih3ErZpfx4hAAA + + +False +1.5707963267949 +30 +dK9I6bZRfUih3ErZpfx4hAAA + + +False +-1.5707963267949 +15 +dK9I6bZRfUih3ErZpfx4hAAA + + +False +-0.523598775598299 +30 +epHead +gIU56iDnlUaFhBS+rQgjwgAA + + +False +0.523598775598299 +30 +epTail +VD6ZOZdU+UucOrfmGN2ehAAA + + +False +0.523598775598299 +25 +epHead +gIU56iDnlUaFhBS+rQgjwgAA + + +False +-0.523598775598299 +25 +epTail +VD6ZOZdU+UucOrfmGN2ehAAA + + +False +-0.785398163397448 +40 +epHead +gIU56iDnlUaFhBS+rQgjwgAA + + +False +0.785398163397448 +40 +epTail +VD6ZOZdU+UucOrfmGN2ehAAA + + +False +-1000 +-1000 +50 +8 +gIU56iDnlUaFhBS+rQgjwgAA + + +False +-1000 +-1000 +50 +8 +VD6ZOZdU+UucOrfmGN2ehAAA + + + +clMaroon +$00B9FFFF +16 +292 +128 +45 +KDFXOvN54E2A+KD+zjp/rwAA + + +1 +task-manager + + +False + + +False + + + +False +KDFXOvN54E2A+KD+zjp/rwAA + + +False +KDFXOvN54E2A+KD+zjp/rwAA + + +False +KDFXOvN54E2A+KD+zjp/rwAA + + + +clMaroon +$00B9FFFF +20 +348 +108 +45 +k6w1Bteav02GGDrC6cJmKQAA + + +1 +new-idea + + +False + + +False + + + +False +k6w1Bteav02GGDrC6cJmKQAA + + +False +k6w1Bteav02GGDrC6cJmKQAA + + +False +k6w1Bteav02GGDrC6cJmKQAA + + + +clMaroon +$00B9FFFF +777,376;624,140 +OeFvUQCLbkSUntfY8QQZjQAA +DOHBlVwZH0CnyAOdMPUqxQAA +55htDUboMkKutvJNMs10VwAA + +False +1.5707963267949 +15 +OeFvUQCLbkSUntfY8QQZjQAA + + +False +1.5707963267949 +30 +OeFvUQCLbkSUntfY8QQZjQAA + + +False +-1.5707963267949 +15 +OeFvUQCLbkSUntfY8QQZjQAA + + +False +-0.523598775598299 +30 +epHead +9QetYTXGJUuUfmUAHqUS4gAA + + +False +0.523598775598299 +30 +epTail +nrc3+Xx32EKxZK145yefSgAA + + +False +0.523598775598299 +25 +epHead +9QetYTXGJUuUfmUAHqUS4gAA + + +False +-0.523598775598299 +25 +epTail +nrc3+Xx32EKxZK145yefSgAA + + +False +-0.785398163397448 +40 +epHead +9QetYTXGJUuUfmUAHqUS4gAA + + +False +0.785398163397448 +40 +epTail +nrc3+Xx32EKxZK145yefSgAA + + +False +-1000 +-1000 +50 +8 +9QetYTXGJUuUfmUAHqUS4gAA + + +False +-1000 +-1000 +50 +8 +nrc3+Xx32EKxZK145yefSgAA + + + +clMaroon +$00B9FFFF +194,169;283,264 +u2pg0MZyBkybxjv8s4b5hwAA +1XmGBT1/RUKVRwCIItHBqQAA +qYv8SJgqPUajzKDRtANOvwAA + +False +1.5707963267949 +15 +u2pg0MZyBkybxjv8s4b5hwAA + + +False +1.5707963267949 +30 +u2pg0MZyBkybxjv8s4b5hwAA + + +False +-1.5707963267949 +15 +u2pg0MZyBkybxjv8s4b5hwAA + + +False +-0.523598775598299 +30 +epHead +gL33aMDC5EaM1KvQAa8OywAA + + +False +0.523598775598299 +30 +epTail +PltbgL9aKEOMcFQlA6pKEQAA + + +False +0.523598775598299 +25 +epHead +gL33aMDC5EaM1KvQAa8OywAA + + +False +-0.523598775598299 +25 +epTail +PltbgL9aKEOMcFQlA6pKEQAA + + +False +-0.785398163397448 +40 +epHead +gL33aMDC5EaM1KvQAa8OywAA + + +False +0.785398163397448 +40 +epTail +PltbgL9aKEOMcFQlA6pKEQAA + + +False +-1000 +-1000 +50 +8 +gL33aMDC5EaM1KvQAa8OywAA + + +False +-1000 +-1000 +50 +8 +PltbgL9aKEOMcFQlA6pKEQAA + + + + + +pkg-builder +tacoxPrx8kCKprVgJHnvqgAA + +aYJ9/XooBkmA6/FiFJuMIQAA +7 + +clMaroon +$00B9FFFF +144 +108 +120 +70 ++ji05KqWx0+15bzf+i9ZaAAA + + +build-pkg + + +False + + +False + + + + +clMaroon +$00B9FFFF +332 +140 +120 +70 +9m9n/MGV7kKh0PE7WrKhKAAA + + +build-config + + +False + + +False + + + + +clMaroon +$00B9FFFF +224 +272 +120 +70 +NlQ9Rg8NL061+rbOyUtEFgAA + + +build-pkglist + + +False + + +False + + + + +clMaroon +$00B9FFFF +432 +296 +120 +70 +vt3kyFkrMUef7jELG3+4KQAA + + +devutils + + +False + + +False + + + + +clMaroon +$00B9FFFF +608 +232 +120 +70 +LAuXBlsgVEy9diBr2n4AdwAA + + +codemngr + + +False + + +False + + + + +clMaroon +$00B9FFFF +628 +324 +120 +70 +AihHVW7SgkeVDEL8szGXUQAA + + +soft-repo + + +False + + +False + + + + +clMaroon +$00B9FFFF +404 +64 +120 +70 +koV3blO6REyuCQSKEhgOdAAA + + +devspec + + +False + + +False + + + + + + +dev-flow +tacoxPrx8kCKprVgJHnvqgAA + +OX4lnFVWFU6PHMrbj32cxAAA +129 + +clMaroon +1368 +468 +196 +353 +System + + +clMaroon +1580 +308 +185 +273 +System + + +clMaroon +1088 +12 +477 +449 +System + + +clMaroon +1564 +208 +300 +System + + +clMaroon +$00B9FFFF +872 +304 +200 +300 +System + + +clMaroon +$00B9FFFF +720 +4 +320 +189 +System + + +clMaroon +$00B9FFFF +172 +56 +121 +45 +7QUh/FC01Eqc8uAicCcB5QAA + + +1 +analysis + + +False + + +False + + + +False +7QUh/FC01Eqc8uAicCcB5QAA + + +False +7QUh/FC01Eqc8uAicCcB5QAA + + +False +7QUh/FC01Eqc8uAicCcB5QAA + + + +clMaroon +$00B9FFFF +928 +356 +70 +32 +GB5fgt+BCEuZu+MykpdKRQAA + + +1 +design + + +False + + +False + + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + + +clMaroon +$00B9FFFF +76 +292 +113 +45 +h9lhv0QFq0aFwcWza3gsDAAA + + +1 +list-external + + +False + + +False + + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + + +clMaroon +$00B9FFFF +204 +312 +231 +45 +XmSQJXVfo0qkbNCidOBOzwAA + + +1 +actor & action analysis + + +False + + +False + + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + + +clMaroon +$00B9FFFF +216 +252 +144 +45 +kETY7OJYc0qg/QkJQX2LXQAA + + +1 +data-io-analysis + + +False + + +False + + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + + +clMaroon +132 +360 +112 +30 +operation-actor-list + + + +clMaroon +92 +220 +87 +30 +physical-io-list + + + +clMaroon +$00B9FFFF +134,249;133,292 +ar/cmfoCE0OyMW57ay1ytwAA +T4twcBKRhUu/n8O3MeJdLwAA + + +clMaroon +$00B9FFFF +174,360;152,336 +ar/cmfoCE0OyMW57ay1ytwAA +MY8KtI96lUemNY9fWLx6pgAA + + +clMaroon +$00B9FFFF +233,360;246,356 +6iOG2zf6TEyGTIPJKas9rAAA +MY8KtI96lUemNY9fWLx6pgAA + + +clMaroon +$00B9FFFF +178,245;216,255 +ZVZSHvdc90+uyCG9xQvFFwAA +T4twcBKRhUu/n8O3MeJdLwAA + + +clMaroon +$00B9FFFF +188,300;216,293 +NSCnR/cZlUa3fXcKMhA8sQAA +ZVZSHvdc90+uyCG9xQvFFwAA +ar/cmfoCE0OyMW57ay1ytwAA + +False +1.5707963267949 +15 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +1.5707963267949 +30 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +-1.5707963267949 +15 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +-0.523598775598299 +30 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +0.523598775598299 +30 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +0.523598775598299 +25 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +-0.523598775598299 +25 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +-0.785398163397448 +40 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +0.785398163397448 +40 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +-932 +-1004 +50 +8 +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +-932 +-1004 +50 +8 +HdgD2FmAh06xyFDupk4vagAA + + + +clMaroon +$00B9FFFF +188,320;204,322 +ubIfnYMMgEuGrguT+jcONAAA +6iOG2zf6TEyGTIPJKas9rAAA +ar/cmfoCE0OyMW57ay1ytwAA + +False +1.5707963267949 +15 +ubIfnYMMgEuGrguT+jcONAAA + + +False +1.5707963267949 +30 +ubIfnYMMgEuGrguT+jcONAAA + + +False +-1.5707963267949 +15 +ubIfnYMMgEuGrguT+jcONAAA + + +False +-0.523598775598299 +30 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +0.523598775598299 +30 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +0.523598775598299 +25 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +-0.523598775598299 +25 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +-0.785398163397448 +40 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +0.785398163397448 +40 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +-932 +-1004 +50 +8 +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +-932 +-1004 +50 +8 +pxqjN0GODE69EvLg0dAl+AAA + + + +clMaroon +$00FFFF80 +220 +168 +108 +30 +data-flow-diagram + + + +clMaroon +$00FFFF80 +380 +388 +154 +38 +action-flow-diagram +invoking-procedure-diagram + + + +clMaroon +$00B9FFFF +275,197;284,252 +ZVZSHvdc90+uyCG9xQvFFwAA +TUzHcFBaSUWvtpWsS2/jdQAA + + +clMaroon +$00B9FFFF +422,388;361,356 +6iOG2zf6TEyGTIPJKas9rAAA +3VXAJzmn0kOyq98DVwWHnAAA + + +clMaroon +$00FFFF80 +352 +560 +134 +30 +function-feature-list-file + + + +clMaroon +$00B9FFFF +240 +388 +121 +38 +top-usecase-diagram +usecase-diagram + + + +clMaroon +$00B9FFFF +305,388;313,356 +6iOG2zf6TEyGTIPJKas9rAAA +p961lf0fSEW3ZPuY+wyZQgAA + + +clMaroon +$00B9FFFF +204 +440 +121 +45 +TMPdkgNID0u772le0sCmLgAA + + +1 +new-ideas-action + + +False + + +False + + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + + +clMaroon +$00B9FFFF +205 +548 +127 +45 +Kh+ykp9GgU6PQXUx+CGLxgAA + + +1 +new-demond-action + + +False + + +False + + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + + +clMaroon +$00B9FFFF +340 +496 +151 +45 +06qF2g1ff02RsBbBfLLo1gAA + + +1 +feature-analysis-task + + +False + + +False + + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + + +clMaroon +$00B9FFFF +208 +504 +123 +30 +note record in tagdoc + + + +clMaroon +$00B9FFFF +268,504;266,484 +sFw3N+djIEOBwQg4t6R70wAA +8hNIvxldLUuPj82B7trzxgAA + + +clMaroon +$00B9FFFF +268,548;268,533 +8hNIvxldLUuPj82B7trzxgAA +hlEB9emSQ0yr5JtMXv8exgAA + + +clMaroon +$00B9FFFF +340,518;330,518 +8hNIvxldLUuPj82B7trzxgAA +pbFdS1YKskuJx2F5GYPsxwAA + + +clMaroon +$00B9FFFF +324,484;356,496 +ZE6XGr3H4E+M1Lu1nRZ9BQAA +pbFdS1YKskuJx2F5GYPsxwAA +sFw3N+djIEOBwQg4t6R70wAA + +False +1.5707963267949 +15 +trimple-catagory +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +1.5707963267949 +30 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-1.5707963267949 +15 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-0.523598775598299 +30 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.523598775598299 +30 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +0.523598775598299 +25 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +-0.523598775598299 +25 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-0.785398163397448 +40 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.785398163397448 +40 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-1104 +-720 +50 +8 +irMBt7uWtEaxRopZEBcfwgAA + + +False +-1104 +-720 +50 +8 +eu/8Siwir02KNGkRDOEa9gAA + + + +clMaroon +$00B9FFFF +331,548;353,540 +li4LwavBrE+pggONaW7QkwAA +pbFdS1YKskuJx2F5GYPsxwAA +hlEB9emSQ0yr5JtMXv8exgAA + +False +1.5707963267949 +15 +trimple-catagory +li4LwavBrE+pggONaW7QkwAA + + +False +1.5707963267949 +30 +li4LwavBrE+pggONaW7QkwAA + + +False +-1.5707963267949 +15 +li4LwavBrE+pggONaW7QkwAA + + +False +-0.523598775598299 +30 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.523598775598299 +30 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +0.523598775598299 +25 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-0.523598775598299 +25 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-0.785398163397448 +40 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.785398163397448 +40 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-1104 +-720 +50 +8 +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-1104 +-720 +50 +8 +gehfWFMIjEKeVzAcdHneqgAA + + + +clMaroon +$00B9FFFF +417,560;416,540 +pbFdS1YKskuJx2F5GYPsxwAA +n5RHkAHiq0GHEjHyehEKAgAA + + +clMaroon +$00B9FFFF +388 +208 +165 +45 +c4KyOid86k6Bzi+unTPcfAAA + + +1 +generate data-dict + + +False + + +False + + + +False +c4KyOid86k6Bzi+unTPcfAAA + + +False +c4KyOid86k6Bzi+unTPcfAAA + + +False +c4KyOid86k6Bzi+unTPcfAAA + + + +clMaroon +$00B9FFFF +408 +148 +63 +30 +data-dict + + + +clMaroon +$00B9FFFF +460,208;446,177 +tAAqkaExpkOHoSKHhWwzIAAA +RvaeyZG/PUeTpXEVgO7PywAA + + +clMaroon +$00B9FFFF +359,257;388,250 +dxugzP0ZBEOdRYlU9N5SDAAA +RvaeyZG/PUeTpXEVgO7PywAA +ZVZSHvdc90+uyCG9xQvFFwAA + +False +1.5707963267949 +15 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +1.5707963267949 +30 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +-1.5707963267949 +15 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +-0.523598775598299 +30 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +0.523598775598299 +30 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +0.523598775598299 +25 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +-0.523598775598299 +25 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +-0.785398163397448 +40 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +0.785398163397448 +40 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +-932 +-1004 +50 +8 +/vsJW8WzsU++6Lul86APuQAA + + +False +-932 +-1004 +50 +8 +z475GIA9kECnM3EOwAHh6QAA + + + +clMaroon +$00B9FFFF +520 +148 +178 +45 +8E86OOxmt0eTCKMQNrubWAAA + + +1 +data-entity-analysis + + +False + + +False + + + +False +8E86OOxmt0eTCKMQNrubWAAA + + +False +8E86OOxmt0eTCKMQNrubWAAA + + +False +8E86OOxmt0eTCKMQNrubWAAA + + + +clMaroon +$00B9FFFF +521,208;558,192 +TfaTWdzXx0eF98RMZF5U/AAA +3zDgV/Xi/0+DECy5hTfn6AAA +RvaeyZG/PUeTpXEVgO7PywAA + +False +1.5707963267949 +15 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +1.5707963267949 +30 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +-1.5707963267949 +15 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +-0.523598775598299 +30 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +0.523598775598299 +30 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +0.523598775598299 +25 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +-0.523598775598299 +25 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +-0.785398163397448 +40 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +0.785398163397448 +40 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +-932 +-1004 +50 +8 +FR6YZrNJHkeksGzXICrvngAA + + +False +-932 +-1004 +50 +8 +ApKyMGFOCkStssh0gwBpKAAA + + + +clMaroon +$00B9FFFF +520,166;470,164 +tAAqkaExpkOHoSKHhWwzIAAA +3zDgV/Xi/0+DECy5hTfn6AAA + + +clMaroon +$00B9FFFF +476 +108 +75 +30 +ER-diagram + + + +clMaroon +$00B9FFFF +543,137;565,148 +3zDgV/Xi/0+DECy5hTfn6AAA +kcVNQ0wczES+n8ehG2y2/QAA + + +clMaroon +$00B9FFFF +444 +260 +145 +45 +tnTkvoZxVkmVjIgd8K6VcwAA + + +1 +module-design-task + + +False + + +False + + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + + +clMaroon +$00B9FFFF +359,277;444,280 +BNlaobUxlkaxprXRzDMgIwAA +s/iW5IUcqEOvkUCPbURcvAAA +ZVZSHvdc90+uyCG9xQvFFwAA + +False +1.5707963267949 +15 +BNlaobUxlkaxprXRzDMgIwAA + + +False +1.5707963267949 +30 +BNlaobUxlkaxprXRzDMgIwAA + + +False +-1.5707963267949 +15 +BNlaobUxlkaxprXRzDMgIwAA + + +False +-0.523598775598299 +30 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +0.523598775598299 +30 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +0.523598775598299 +25 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +-0.523598775598299 +25 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +-0.785398163397448 +40 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +0.785398163397448 +40 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +-932 +-1004 +50 +8 +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +-932 +-1004 +50 +8 +UtVAs5JBSkKc0jSVdLpypQAA + + + +clMaroon +$00B9FFFF +402,312;444,301 +t3VIg1cXJEmsTGdIYQFIcwAA +s/iW5IUcqEOvkUCPbURcvAAA +6iOG2zf6TEyGTIPJKas9rAAA + +False +1.5707963267949 +15 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +1.5707963267949 +30 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +-1.5707963267949 +15 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +-0.523598775598299 +30 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +0.523598775598299 +30 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +0.523598775598299 +25 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +-0.523598775598299 +25 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +-0.785398163397448 +40 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +0.785398163397448 +40 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +-932 +-1004 +50 +8 +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +-932 +-1004 +50 +8 +IuqkqTOhTEuBUbn2uLNuqAAA + + + +clMaroon +$00B9FFFF +528 +500 +85 +53 +build-dest +install-pkg-list +src-pkg + + + +clMaroon +$00FFFF80 +508 +332 +152 +38 +function-module-list-file +class-diagram + + + +clMaroon +$00B9FFFF +565,332;538,304 +s/iW5IUcqEOvkUCPbURcvAAA +XplFyUBcGE23N1wJH+UaowAA + + +clMaroon +$00FF80FF +80 +524 +117 +45 +7FwnjSWdM0KKXAN3V8oQMAAA + + +1 +soft-demond + + +False + + +False + + + +False +7FwnjSWdM0KKXAN3V8oQMAAA + + +False +7FwnjSWdM0KKXAN3V8oQMAAA + + +False +7FwnjSWdM0KKXAN3V8oQMAAA + + + +clMaroon +$00FF80FF +72 +444 +121 +45 +mx6wTw6+KEuGtAr0iRUXJwAA + + +1 +analysis-task + + +False + + +False + + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + + +clMaroon +$00B9FFFF +388,210;327,195 +TUzHcFBaSUWvtpWsS2/jdQAA +RvaeyZG/PUeTpXEVgO7PywAA + + +clMaroon +$00FFFF80 +560 +396 +152 +30 +top-function-module-list-file + + + +clMaroon +$00B9FFFF +544 +448 +267 +45 +EjjnPhUmf02yFIvhJmdcmQAA + + +1 +pkg-dest category + + +False + + +False + + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + + +clMaroon +$00B9FFFF +635,492;612,504 +qVEe/fF3/kC3YIIc7BmwuAAA +RDlS3XZVdUCC/tRmDGvFywAA + + +clMaroon +$00B9FFFF +645,425;661,448 +RDlS3XZVdUCC/tRmDGvFywAA +T6b0hHxnwE+qhStkZmN/sQAA + + +clMaroon +$00B9FFFF +505,304;465,388 +3VXAJzmn0kOyq98DVwWHnAAA +s/iW5IUcqEOvkUCPbURcvAAA + + +clMaroon +$00B9FFFF +620 +260 +121 +45 +a7yZcyAyl02YNl0/FQziyQAA + + +1 +layer-design + + +False + + +False + + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + + +clMaroon +$00B9FFFF +600 +204 +171 +38 +function-module-struct-diagram +architech-diagram + + + +clMaroon +$00B9FFFF +683,241;682,260 +iVh3QgkpmkKlqxcSGYTCIQAA +wOOUnwLcykSHmOK6Cujx5gAA + + +clMaroon +$00B9FFFF +588,282;620,282 +xMoCRZ0FD0mJscRNN+UpywAA +iVh3QgkpmkKlqxcSGYTCIQAA +s/iW5IUcqEOvkUCPbURcvAAA + +False +1.5707963267949 +15 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +1.5707963267949 +30 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +-1.5707963267949 +15 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +-0.523598775598299 +30 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +0.523598775598299 +30 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +0.523598775598299 +25 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +-0.523598775598299 +25 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +-0.785398163397448 +40 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +0.785398163397448 +40 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +-932 +-1004 +50 +8 +FVDBPeq7mEKlp1go7V1hsgAA + + +False +-932 +-1004 +50 +8 +6MJU+jYHa0mx8HaVM4S+8QAA + + + +clMaroon +$00B9FFFF +132,444;132,336 +BZR3CshDZEOw2M912JpeeQAA +ar/cmfoCE0OyMW57ay1ytwAA +9ECchidjm0Oyi96zrE/MCgAA + +False +1.5707963267949 +15 +BZR3CshDZEOw2M912JpeeQAA + + +False +1.5707963267949 +30 +BZR3CshDZEOw2M912JpeeQAA + + +False +-1.5707963267949 +15 +BZR3CshDZEOw2M912JpeeQAA + + +False +-0.523598775598299 +30 +epHead +vN04w+sn8kGRW/7MCPHqyAAA + + +False +0.523598775598299 +30 +epTail +0CpaRkRUf0+bAPOkrSqRSgAA + + +False +0.523598775598299 +25 +epHead +vN04w+sn8kGRW/7MCPHqyAAA + + +False +-0.523598775598299 +25 +epTail +0CpaRkRUf0+bAPOkrSqRSgAA + + +False +-0.785398163397448 +40 +epHead +vN04w+sn8kGRW/7MCPHqyAAA + + +False +0.785398163397448 +40 +epTail +0CpaRkRUf0+bAPOkrSqRSgAA + + +False +-1000 +-1000 +50 +8 +vN04w+sn8kGRW/7MCPHqyAAA + + +False +-1000 +-1000 +50 +8 +0CpaRkRUf0+bAPOkrSqRSgAA + + + +clMaroon +$00B9FFFF +196,557;205,559 +/FmqeTd2akSH7n3I8hA3mQAA +hlEB9emSQ0yr5JtMXv8exgAA +XmyUwnJKX02C4THv/GbClAAA + +False +1.5707963267949 +15 +/FmqeTd2akSH7n3I8hA3mQAA + + +False +1.5707963267949 +30 +/FmqeTd2akSH7n3I8hA3mQAA + + +False +-1.5707963267949 +15 +/FmqeTd2akSH7n3I8hA3mQAA + + +False +-0.523598775598299 +30 +epHead +QZwwsltNj0eenKeiSJArvQAA + + +False +0.523598775598299 +30 +epTail +vq1zAfKQxUWnGiKbBTmYJwAA + + +False +0.523598775598299 +25 +epHead +QZwwsltNj0eenKeiSJArvQAA + + +False +-0.523598775598299 +25 +epTail +vq1zAfKQxUWnGiKbBTmYJwAA + + +False +-0.785398163397448 +40 +epHead +QZwwsltNj0eenKeiSJArvQAA + + +False +0.785398163397448 +40 +epTail +vq1zAfKQxUWnGiKbBTmYJwAA + + +False +-1000 +-1000 +50 +8 +QZwwsltNj0eenKeiSJArvQAA + + +False +-1000 +-1000 +50 +8 +vq1zAfKQxUWnGiKbBTmYJwAA + + + +clMaroon +$00B9FFFF +700 +524 +132 +98 +cmd-args-design +running-param-design +.lex/.gmr/.type/.ui +time-sequence-diagram +E-R-diagram +sql-tbl + + + +clMaroon +$00B9FFFF +1591 +76 +134 +45 +kM7+GQ5RuEmygAJdSluSjQAA + + +1 +src-pkg-create + + +False + + +False + + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + + +clMaroon +$00B9FFFF +1580 +248 +156 +45 +KmQBouG6c0yb16gPnUnBtQAA + + +1 +RAD-demo + + +False + + +False + + + +False +KmQBouG6c0yb16gPnUnBtQAA + + +False +KmQBouG6c0yb16gPnUnBtQAA + + +False +KmQBouG6c0yb16gPnUnBtQAA + + + +clMaroon +$00B9FFFF +1344 +173 +135 +32 +CLf6+wSJ/U+4iSwM7QoY3wAA + + +1 +design-to-code + + +False + + +False + + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + + +clMaroon +$00B9FFFF +1428 +284 +104 +32 +gJ7o4uiAMEqSPUL3dadz2wAA + + +1 +unit-coding + + +False + + +False + + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + + +clMaroon +$00B9FFFF +1360 +353 +108 +32 +wftqTlAvI0+cR9j69saRNQAA + + +1 +unit-testing + + +False + + +False + + + +False +wftqTlAvI0+cR9j69saRNQAA + + +False +wftqTlAvI0+cR9j69saRNQAA + + +False +wftqTlAvI0+cR9j69saRNQAA + + + +clMaroon +$00B9FFFF +1344 +404 +152 +32 +qlZGCifQOEyQyqBzIH1x/AAA + + +1 +integrate-testing + + +False + + +False + + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + + +clMaroon +$00B9FFFF +1609 +398 +121 +45 +lOyDrRE6cEms6LglvRhNKwAA + + +1 +testing + + +False + + +False + + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + + +clMaroon +$00B9FFFF +1595 +460 +148 +45 +ucei5JvgaEarsuGuZmgj7QAA + + +1 +doc-tutorial-web + + +False + + +False + + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + + +clMaroon +$00B9FFFF +1609 +522 +121 +45 +ZFe9gOmpTEWMgVssyEcAWAAA + + +1 +version-pkg + + +False + + +False + + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + + +clMaroon +$00B9FFFF +1401 +563 +131 +45 +lEIXTXT9L0CS9sEhjP/8NQAA + + +1 +pkg-repo-sync + + +False + + +False + + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + + +clMaroon +$00B9FFFF +1399 +630 +135 +45 +jmiilGYeBU+1y4Yw2n8CKAAA + + +1 +download-build + + +False + + +False + + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + + +clMaroon +$00B9FFFF +1395 +697 +142 +45 +RfRTk7cK0061dLioGm8l7wAA + + +1 +loopbak-testing + + +False + + +False + + + +False +RfRTk7cK0061dLioGm8l7wAA + + +False +RfRTk7cK0061dLioGm8l7wAA + + +False +RfRTk7cK0061dLioGm8l7wAA + + + +clMaroon +$00B9FFFF +1403 +764 +127 +45 +G18zTBUAj0+SdrsOmksR0QAA + + +1 +publish-task + + +False + + +False + + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + + +clMaroon +$00B9FFFF +1657,120;1657,132 +YcGgDGXOZ06J+TZOxU72agAA +bwHJGe0us0a2jeejcciWlwAA +mCnmzxWG6kWi9OPK25z8CgAA + +False +1.5707963267949 +15 +YcGgDGXOZ06J+TZOxU72agAA + + +False +1.5707963267949 +30 +YcGgDGXOZ06J+TZOxU72agAA + + +False +-1.5707963267949 +15 +YcGgDGXOZ06J+TZOxU72agAA + + +False +-0.523598775598299 +30 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +0.523598775598299 +30 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +0.523598775598299 +25 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +-0.523598775598299 +25 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +-0.785398163397448 +40 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +0.785398163397448 +40 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +-516 +-1008 +50 +8 +W6JXNHPDXE+JzttRtRevOgAA + + +False +-516 +-1008 +50 +8 +rO/Oarhbpk6wEn45hIpPfAAA + + + +clMaroon +$00B9FFFF +1580,269;1548,268;1548,52;964,52;965,72 +8kJkpVqo5kC/wdE3wXcwIAAA +5srcgF0EYUyRM6tylL0wVgAA +PUHktwo1XEONvjakWKxjjgAA + +False +1.5707963267949 +15 +8kJkpVqo5kC/wdE3wXcwIAAA + + +False +1.5707963267949 +30 +8kJkpVqo5kC/wdE3wXcwIAAA + + +False +-1.5707963267949 +15 +8kJkpVqo5kC/wdE3wXcwIAAA + + +False +-0.523598775598299 +30 +epHead +42F3TeDc+kOeEbEW2sSOqwAA + + +False +0.523598775598299 +30 +epTail +b75cgmrZUEiaHJZyDm8qXAAA + + +False +0.523598775598299 +25 +epHead +42F3TeDc+kOeEbEW2sSOqwAA + + +False +-0.523598775598299 +25 +epTail +b75cgmrZUEiaHJZyDm8qXAAA + + +False +-0.785398163397448 +40 +epHead +42F3TeDc+kOeEbEW2sSOqwAA + + +False +0.785398163397448 +40 +epTail +b75cgmrZUEiaHJZyDm8qXAAA + + +False +-540 +-1120 +50 +8 +42F3TeDc+kOeEbEW2sSOqwAA + + +False +-540 +-1120 +50 +8 +b75cgmrZUEiaHJZyDm8qXAAA + + + +clMaroon +$00B9FFFF +1411,204;1411,233 +k48n8C/dEECUhVTIv9BoGQAA +1soCBV2ToUK8JVFLvn+e2wAA +GaKv5RiKr0yqd1YQfpBS6QAA + +False +1.5707963267949 +15 +k48n8C/dEECUhVTIv9BoGQAA + + +False +1.5707963267949 +30 +k48n8C/dEECUhVTIv9BoGQAA + + +False +-1.5707963267949 +15 +k48n8C/dEECUhVTIv9BoGQAA + + +False +-0.523598775598299 +30 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +0.523598775598299 +30 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +0.523598775598299 +25 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +-0.523598775598299 +25 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +-0.785398163397448 +40 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +0.785398163397448 +40 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +-540 +-1120 +50 +8 +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +-540 +-1120 +50 +8 +YXudH8Doi0+zzc1qPMjDNAAA + + + +clMaroon +$00B9FFFF +1464,315;1427,353 +euFZ2oXh1UyoeBpwCRLyDQAA +0HXL2vLmwU+NgNkl6zVkQAAA +Ji7GcpOn/E2KIxghPULMgwAA + +False +1.5707963267949 +15 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +1.5707963267949 +30 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +-1.5707963267949 +15 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +-0.523598775598299 +30 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +0.523598775598299 +30 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +0.523598775598299 +25 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +-0.523598775598299 +25 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +-0.785398163397448 +40 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +0.785398163397448 +40 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +-540 +-1120 +50 +8 +g0Sss8qL1USpNMhJiejoNQAA + + +False +-540 +-1120 +50 +8 +nnIS6vjqXkqw2mw9rhuzugAA + + + +clMaroon +$00B9FFFF +1415,384;1417,404 +h7KFG98rIEKQY4C1dOWmFQAA +lSkarANt7EiYF5x5MQ7+qgAA +0HXL2vLmwU+NgNkl6zVkQAAA + +False +1.5707963267949 +15 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +1.5707963267949 +30 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +-1.5707963267949 +15 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +-0.523598775598299 +30 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +0.523598775598299 +30 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +0.523598775598299 +25 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +-0.523598775598299 +25 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +-0.785398163397448 +40 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +0.785398163397448 +40 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +-540 +-1120 +50 +8 +Fb68OZ19C0WB4BjQurmBRwAA + + +False +-540 +-1120 +50 +8 +akgagoM7O0WP1rFMWH/IzgAA + + + +clMaroon +$00B9FFFF +1480,404;1609,373 +GTroIE/UlEq3H/lwjMvR8wAA +8o8JeUyoWka2YCr2oj8TIgAA +lSkarANt7EiYF5x5MQ7+qgAA + +False +1.5707963267949 +15 +GTroIE/UlEq3H/lwjMvR8wAA + + +False +1.5707963267949 +30 +GTroIE/UlEq3H/lwjMvR8wAA + + +False +-1.5707963267949 +15 +GTroIE/UlEq3H/lwjMvR8wAA + + +False +-0.523598775598299 +30 +epHead +DiYoPg9r+0KN6xRjGDN+kwAA + + +False +0.523598775598299 +30 +epTail +BmvYAIFdPEKrfzWwQhihCAAA + + +False +0.523598775598299 +25 +epHead +DiYoPg9r+0KN6xRjGDN+kwAA + + +False +-0.523598775598299 +25 +epTail +BmvYAIFdPEKrfzWwQhihCAAA + + +False +-0.785398163397448 +40 +epHead +DiYoPg9r+0KN6xRjGDN+kwAA + + +False +0.785398163397448 +40 +epTail +BmvYAIFdPEKrfzWwQhihCAAA + + +False +-540 +-1120 +50 +8 +DiYoPg9r+0KN6xRjGDN+kwAA + + +False +-540 +-1120 +50 +8 +BmvYAIFdPEKrfzWwQhihCAAA + + + +clMaroon +$00B9FFFF +1669,442;1669,460 +hKV30qElWkWAVhrHK7PJbAAA +SJxSR34gTkGLBFrgEQoGBwAA +hhCDRIRYnU+Qwbyyoec6WwAA + +False +1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +1.5707963267949 +30 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-0.523598775598299 +30 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.523598775598299 +30 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +0.523598775598299 +25 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-0.523598775598299 +25 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-0.785398163397448 +40 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.785398163397448 +40 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-524 +-1032 +50 +8 +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-524 +-1032 +50 +8 +WHhyhUoWo0iDDhj6FaqW/gAA + + + +clMaroon +$00B9FFFF +1668,504;1668,522 +Htop0thy70qsJ36MwSIctgAA +wTzRmZpNA0CytlcwOuyUMQAA +SJxSR34gTkGLBFrgEQoGBwAA + +False +1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +1.5707963267949 +30 +Htop0thy70qsJ36MwSIctgAA + + +False +-1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +-0.523598775598299 +30 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.523598775598299 +30 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +0.523598775598299 +25 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-0.523598775598299 +25 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-0.785398163397448 +40 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.785398163397448 +40 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-524 +-1032 +50 +8 +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-524 +-1032 +50 +8 +bDyGtYJmuUiVC+pPkc7oHgAA + + + +clMaroon +$00B9FFFF +1609,536;1548,528 +wt/kYLKLC0CiPMmQly9eoAAA +f5vhNxPD30OIg0/MpcEnMgAA +wTzRmZpNA0CytlcwOuyUMQAA + +False +1.5707963267949 +15 +wt/kYLKLC0CiPMmQly9eoAAA + + +False +1.5707963267949 +30 +wt/kYLKLC0CiPMmQly9eoAAA + + +False +-1.5707963267949 +15 +wt/kYLKLC0CiPMmQly9eoAAA + + +False +-0.523598775598299 +30 +epHead +xGchvlfNhUO0g6gfoLFLRgAA + + +False +0.523598775598299 +30 +epTail +mwO8gf6vqUOl745za4HJ8wAA + + +False +0.523598775598299 +25 +epHead +xGchvlfNhUO0g6gfoLFLRgAA + + +False +-0.523598775598299 +25 +epTail +mwO8gf6vqUOl745za4HJ8wAA + + +False +-0.785398163397448 +40 +epHead +xGchvlfNhUO0g6gfoLFLRgAA + + +False +0.785398163397448 +40 +epTail +mwO8gf6vqUOl745za4HJ8wAA + + +False +-544 +-1008 +50 +8 +xGchvlfNhUO0g6gfoLFLRgAA + + +False +-544 +-1008 +50 +8 +mwO8gf6vqUOl745za4HJ8wAA + + + +clMaroon +$00B9FFFF +1466,607;1466,630 +t/ADlzXN00KW0NiGhwkclQAA +IIt4VBS2JkOc0GS4zIsSDAAA +sAS2iGQLE0GVexawSaeD0AAA + +False +1.5707963267949 +15 +t/ADlzXN00KW0NiGhwkclQAA + + +False +1.5707963267949 +30 +t/ADlzXN00KW0NiGhwkclQAA + + +False +-1.5707963267949 +15 +t/ADlzXN00KW0NiGhwkclQAA + + +False +-0.523598775598299 +30 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +0.523598775598299 +30 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +0.523598775598299 +25 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +-0.523598775598299 +25 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +-0.785398163397448 +40 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +0.785398163397448 +40 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +-712 +-1032 +50 +8 +LL86l17PZku+YBsr/fUklwAA + + +False +-712 +-1032 +50 +8 +bvYo1TGY6U2Io35TQ/yATAAA + + + +clMaroon +$00B9FFFF +1466,674;1465,697 +5n9wkh0NQUu8BFWyytdErgAA +e0Tnr7u8AE+La5gTMkR+KwAA +IIt4VBS2JkOc0GS4zIsSDAAA + +False +1.5707963267949 +15 +5n9wkh0NQUu8BFWyytdErgAA + + +False +1.5707963267949 +30 +5n9wkh0NQUu8BFWyytdErgAA + + +False +-1.5707963267949 +15 +5n9wkh0NQUu8BFWyytdErgAA + + +False +-0.523598775598299 +30 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +0.523598775598299 +30 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +0.523598775598299 +25 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +-0.523598775598299 +25 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +-0.785398163397448 +40 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +0.785398163397448 +40 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +-712 +-1032 +50 +8 +P+S209BDDkSnrN4WPl8+WAAA + + +False +-712 +-1032 +50 +8 +UYbXc0CahESM869EpDq6lwAA + + + +clMaroon +$00B9FFFF +1465,741;1466,764 +1QbYYnq3ykqiPL0Gv6UkSwAA +GNt2i16Jv0er8A8pORMwcAAA +e0Tnr7u8AE+La5gTMkR+KwAA + +False +1.5707963267949 +15 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +1.5707963267949 +30 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +-1.5707963267949 +15 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +-0.523598775598299 +30 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +0.523598775598299 +30 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +0.523598775598299 +25 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +-0.523598775598299 +25 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +-0.785398163397448 +40 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +0.785398163397448 +40 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +-712 +-1032 +50 +8 +2J0+TPdjaECdzYN0YQ2guQAA + + +False +-712 +-1032 +50 +8 +WMjnuHQF3kiQvKAfM+S81wAA + + + +clMaroon +$00B9FFFF +1591 +24 +135 +45 +l2Lw5fePkE+9xXcdzSY+bwAA + + +1 +dev-env-install + + +False + + +False + + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + + +clMaroon +$00B9FFFF +1658,68;1658,76 +3RL8yaG7p0udrs0v9djevAAA +mCnmzxWG6kWi9OPK25z8CgAA +ba/wrXKu5EuHn69Sc1EByQAA + +False +1.5707963267949 +15 +3RL8yaG7p0udrs0v9djevAAA + + +False +1.5707963267949 +30 +3RL8yaG7p0udrs0v9djevAAA + + +False +-1.5707963267949 +15 +3RL8yaG7p0udrs0v9djevAAA + + +False +-0.523598775598299 +30 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +0.523598775598299 +30 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +0.523598775598299 +25 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +-0.523598775598299 +25 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +-0.785398163397448 +40 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +0.785398163397448 +40 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +-516 +-1008 +50 +8 +La7Sdx9zEUWWIkxIncjJuAAA + + +False +-516 +-1008 +50 +8 +h4chvQo17kKpYAZk9SZs0wAA + + + +clMaroon +$00B9FFFF +1584 +132 +148 +45 +ofqv4KD9ukybRvF//Fek/AAA + + +1 +web home pages + + +False + + +False + + + +False +ofqv4KD9ukybRvF//Fek/AAA + + +False +ofqv4KD9ukybRvF//Fek/AAA + + +False +ofqv4KD9ukybRvF//Fek/AAA + + + +clMaroon +$00B9FFFF +1657,176;1657,196 +BYyEw6WhrkigDw+109evLAAA +xPeRQZfwOEmy8TaWIhh+GQAA +bwHJGe0us0a2jeejcciWlwAA + +False +1.5707963267949 +15 +BYyEw6WhrkigDw+109evLAAA + + +False +1.5707963267949 +30 +BYyEw6WhrkigDw+109evLAAA + + +False +-1.5707963267949 +15 +BYyEw6WhrkigDw+109evLAAA + + +False +-0.523598775598299 +30 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +0.523598775598299 +30 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +0.523598775598299 +25 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +-0.523598775598299 +25 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +-0.785398163397448 +40 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +0.785398163397448 +40 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +-516 +-1008 +50 +8 +2dUTUSyX8USUOoaapULmuQAA + + +False +-516 +-1008 +50 +8 +Dk4WLVZ+SU+WfPXc7TG0IwAA + + + +clMaroon +$00B9FFFF +1564 +196 +189 +45 +czS7yLr6oUygLwEMTWJMVgAA + + +1 +first-ver-dev-env-chk + + +False + + +False + + + +False +czS7yLr6oUygLwEMTWJMVgAA + + +False +czS7yLr6oUygLwEMTWJMVgAA + + +False +czS7yLr6oUygLwEMTWJMVgAA + + + +clMaroon +$00B9FFFF +1658,240;1658,248 +ULUs5j3aC0Gd9Vn1OUTU2wAA +PUHktwo1XEONvjakWKxjjgAA +xPeRQZfwOEmy8TaWIhh+GQAA + +False +1.5707963267949 +15 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +1.5707963267949 +30 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +-1.5707963267949 +15 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +-0.523598775598299 +30 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +0.523598775598299 +30 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +0.523598775598299 +25 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +-0.523598775598299 +25 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +-0.785398163397448 +40 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +0.785398163397448 +40 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +-516 +-1008 +50 +8 +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +-516 +-1008 +50 +8 +XXlOcGC2n0emsre13Wy0GgAA + + + +clMaroon +$00B9FFFF +1383 +496 +166 +45 +bjrraLbGKUSY+GYzLNk5RAAA + + +1 +launch-pkg-publish + + +False + + +False + + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + + +clMaroon +$00B9FFFF +1465,540;1466,563 +4wmxJ9R9R0eU6Jn8Ho3xFwAA +sAS2iGQLE0GVexawSaeD0AAA +f5vhNxPD30OIg0/MpcEnMgAA + +False +1.5707963267949 +15 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +1.5707963267949 +30 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +-1.5707963267949 +15 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +-0.523598775598299 +30 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +0.523598775598299 +30 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +0.523598775598299 +25 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +-0.523598775598299 +25 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +-0.785398163397448 +40 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +0.785398163397448 +40 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +-556 +-1072 +50 +8 +7JwpGqJmgku60xKurQDyPwAA + + +False +-556 +-1072 +50 +8 +L7xnZ29mQEadCI+TRP2QQAAA + + + +clMaroon +$00B9FFFF +1609 +336 +121 +45 +aUVRiLFY4USAN9h1PY1/vAAA + + +1 +multi-lang + + +False + + +False + + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + + +clMaroon +$00B9FFFF +1669,380;1669,398 ++nJDFiS7VECOJ4vWaYvszgAA +hhCDRIRYnU+Qwbyyoec6WwAA +8o8JeUyoWka2YCr2oj8TIgAA + +False +1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +1.5707963267949 +30 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-0.523598775598299 +30 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.523598775598299 +30 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +0.523598775598299 +25 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-0.523598775598299 +25 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-0.785398163397448 +40 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.785398163397448 +40 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-516 +-1008 +50 +8 +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-516 +-1008 +50 +8 +VvsNJNyOO0e86/eHwYM58QAA + + + +clMaroon +$00B9FFFF +1416 +472 +96 +23 +publish-procedure + + + +clMaroon +$00B9FFFF +1624 +312 +109 +23 +after-dev-procedure + + + +clMaroon +$00B9FFFF +1368 +12 +101 +23 +develop-procedure + + + +clMaroon +$00B9FFFF +1604 +4 +109 +23 +dev-initial-procedure + + + +clMaroon +$00B9FFFF +916 +132 +120 +32 +oKO/T5e9P0yxfxSC9DK89wAA + + +1 +get-task + + +False + + +False + + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + + +clMaroon +$00B9FFFF +1340 +233 +144 +32 +CBkE9JDrJU21ybYWNP2cCgAA + + +1 +create-test-unit + + +False + + +False + + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + + +clMaroon +$00B9FFFF +1276 +284 +123 +32 +CEEcWQKt0kyX8zYOPZHrrwAA + + +1 +bugfix-coding + + +False + + +False + + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + + +clMaroon +$00B9FFFF +740 +32 +154 +45 +KMKq644vfEq7voEHMFkLwgAA + + +1 +initial-dev-launch + + +False + + +False + + + +False +KMKq644vfEq7voEHMFkLwgAA + + +False +KMKq644vfEq7voEHMFkLwgAA + + +False +KMKq644vfEq7voEHMFkLwgAA + + + +clMaroon +$00B9FFFF +736 +80 +142 +45 +PjS4k33/kkePfB8R0Qh14AAA + + +1 +bugfix-estimate + + +False + + +False + + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + + +clMaroon +$00B9FFFF +732 +132 +209 +45 +GbTWbRuRqkK91Ggxct5sowAA + + +1 +new-feature-dev-launch + + +False + + +False + + + +False +GbTWbRuRqkK91Ggxct5sowAA + + +False +GbTWbRuRqkK91Ggxct5sowAA + + +False +GbTWbRuRqkK91Ggxct5sowAA + + + +clMaroon +$00B9FFFF +904 +72 +127 +45 +F4Ld7UGpQkiQCCnqXOJ06wAA + + +1 +task-schedule + + +False + + +False + + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + + +clMaroon +$00B9FFFF +974,163;963,356 +X3JNoNb8Jky2P0O9whu+8QAA +UxkwPHCKZUOZB8abt9yLgQAA +dbDAxqIYDEef6cq3x4sQfAAA + +False +1.5707963267949 +15 +X3JNoNb8Jky2P0O9whu+8QAA + + +False +1.5707963267949 +30 +X3JNoNb8Jky2P0O9whu+8QAA + + +False +-1.5707963267949 +15 +X3JNoNb8Jky2P0O9whu+8QAA + + +False +-0.523598775598299 +30 +epHead +UUjC686FYU6T/q1aKuDLkgAA + + +False +0.523598775598299 +30 +epTail +XdMG4B9cfkWIcWgvsVmQUgAA + + +False +0.523598775598299 +25 +epHead +UUjC686FYU6T/q1aKuDLkgAA + + +False +-0.523598775598299 +25 +epTail +XdMG4B9cfkWIcWgvsVmQUgAA + + +False +-0.785398163397448 +40 +epHead +UUjC686FYU6T/q1aKuDLkgAA + + +False +0.785398163397448 +40 +epTail +XdMG4B9cfkWIcWgvsVmQUgAA + + +False +-516 +-1008 +50 +8 +UUjC686FYU6T/q1aKuDLkgAA + + +False +-516 +-1008 +50 +8 +XdMG4B9cfkWIcWgvsVmQUgAA + + + +clMaroon +$00B9FFFF +1035,153;1344,182 +TzMLJBMMOEKimlwgjlIwnQAA +GaKv5RiKr0yqd1YQfpBS6QAA +dbDAxqIYDEef6cq3x4sQfAAA + +False +1.5707963267949 +15 +TzMLJBMMOEKimlwgjlIwnQAA + + +False +1.5707963267949 +30 +TzMLJBMMOEKimlwgjlIwnQAA + + +False +-1.5707963267949 +15 +TzMLJBMMOEKimlwgjlIwnQAA + + +False +-0.523598775598299 +30 +epHead +BOzCR9HOxU+q1mRime4kPgAA + + +False +0.523598775598299 +30 +epTail +cCWrTkROLUy3C0VntDGRjwAA + + +False +0.523598775598299 +25 +epHead +BOzCR9HOxU+q1mRime4kPgAA + + +False +-0.523598775598299 +25 +epTail +cCWrTkROLUy3C0VntDGRjwAA + + +False +-0.785398163397448 +40 +epHead +BOzCR9HOxU+q1mRime4kPgAA + + +False +0.785398163397448 +40 +epTail +cCWrTkROLUy3C0VntDGRjwAA + + +False +-516 +-1008 +50 +8 +BOzCR9HOxU+q1mRime4kPgAA + + +False +-516 +-1008 +50 +8 +cCWrTkROLUy3C0VntDGRjwAA + + + +clMaroon +$00B9FFFF +1432,264;1459,284 +DCobZcXopUed3uhu7f3tCwAA +Ji7GcpOn/E2KIxghPULMgwAA +1soCBV2ToUK8JVFLvn+e2wAA + +False +1.5707963267949 +15 +DCobZcXopUed3uhu7f3tCwAA + + +False +1.5707963267949 +30 +DCobZcXopUed3uhu7f3tCwAA + + +False +-1.5707963267949 +15 +DCobZcXopUed3uhu7f3tCwAA + + +False +-0.523598775598299 +30 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +0.523598775598299 +30 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +0.523598775598299 +25 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +-0.523598775598299 +25 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +-0.785398163397448 +40 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +0.785398163397448 +40 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +-516 +-1008 +50 +8 +GPR477SH0U2rZy9DRg9MzAAA + + +False +-516 +-1008 +50 +8 +DFlh0do87UmmJQigSQRsiAAA + + + +clMaroon +$00B9FFFF +1388,264;1359,284 +BUd2VmDLEkKHuqopStVszQAA +N1P5SuGh4EWdFcErHd0tKAAA +1soCBV2ToUK8JVFLvn+e2wAA + +False +1.5707963267949 +15 +BUd2VmDLEkKHuqopStVszQAA + + +False +1.5707963267949 +30 +BUd2VmDLEkKHuqopStVszQAA + + +False +-1.5707963267949 +15 +BUd2VmDLEkKHuqopStVszQAA + + +False +-0.523598775598299 +30 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +0.523598775598299 +30 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +0.523598775598299 +25 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +-0.523598775598299 +25 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +-0.785398163397448 +40 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +0.785398163397448 +40 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +-516 +-1008 +50 +8 +XyL91tS87U+MpUc/Z25u1gAA + + +False +-516 +-1008 +50 +8 +2t6hyyogW027sVhhVrjclQAA + + + +clMaroon +$00B9FFFF +1355,315;1397,353 +fk3nxDxX5USF8gff9cP5MwAA +0HXL2vLmwU+NgNkl6zVkQAAA +N1P5SuGh4EWdFcErHd0tKAAA + +False +1.5707963267949 +15 +fk3nxDxX5USF8gff9cP5MwAA + + +False +1.5707963267949 +30 +fk3nxDxX5USF8gff9cP5MwAA + + +False +-1.5707963267949 +15 +fk3nxDxX5USF8gff9cP5MwAA + + +False +-0.523598775598299 +30 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +0.523598775598299 +30 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +0.523598775598299 +25 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +-0.523598775598299 +25 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +-0.785398163397448 +40 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +0.785398163397448 +40 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +-516 +-1008 +50 +8 +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +-516 +-1008 +50 +8 +lp0ewCTLb06H/3WjWYmLOQAA + + + +clMaroon +$00B9FFFF +1152 +224 +104 +30 +test-code for unit + + + +clMaroon +$00B9FFFF +1484 +208 +61 +30 +src-code + + + +clMaroon +$00B9FFFF +920 +308 +94 +23 +design-procedure + + + +clMaroon +$00B9FFFF +1484 +148 +55 +30 +src-pkg + + + +clMaroon +$00B9FFFF +1116 +268 +144 +30 +testing-code for integrate + + + +clMaroon +$00B9FFFF +1124 +312 +125 +30 +testing-code for using + + + +clMaroon +$00B9FFFF +900 +8 +76 +23 +task-schedule + + + +clMaroon +$00B9FFFF +893,74;904,77 +dmgxVDpivEyRrIdXr3QLWwAA +5srcgF0EYUyRM6tylL0wVgAA +uI0Vw5nV8k2MpwNxuYq/IAAA + +False +1.5707963267949 +15 +dmgxVDpivEyRrIdXr3QLWwAA + + +False +1.5707963267949 +30 +dmgxVDpivEyRrIdXr3QLWwAA + + +False +-1.5707963267949 +15 +dmgxVDpivEyRrIdXr3QLWwAA + + +False +-0.523598775598299 +30 +epHead +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +0.523598775598299 +30 +epTail +v/43TdYAaEacDIIH0o4rFQAA + + +False +0.523598775598299 +25 +epHead +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +-0.523598775598299 +25 +epTail +v/43TdYAaEacDIIH0o4rFQAA + + +False +-0.785398163397448 +40 +epHead +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +0.785398163397448 +40 +epTail +v/43TdYAaEacDIIH0o4rFQAA + + +False +-1000 +-1000 +50 +8 +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +-1000 +-1000 +50 +8 +v/43TdYAaEacDIIH0o4rFQAA + + + +clMaroon +$00B9FFFF +877,98;904,97 +gFnk16iOFki43F+XSkxbHAAA +5srcgF0EYUyRM6tylL0wVgAA +IjimQpqMbkC8IpOXi07GSgAA + +False +1.5707963267949 +15 +gFnk16iOFki43F+XSkxbHAAA + + +False +1.5707963267949 +30 +gFnk16iOFki43F+XSkxbHAAA + + +False +-1.5707963267949 +15 +gFnk16iOFki43F+XSkxbHAAA + + +False +-0.523598775598299 +30 +epHead +IMPpHUaiT0CFZLcH+44uQwAA + + +False +0.523598775598299 +30 +epTail +Jrscu7bPaEOGr8p3WU+PYQAA + + +False +0.523598775598299 +25 +epHead +IMPpHUaiT0CFZLcH+44uQwAA + + +False +-0.523598775598299 +25 +epTail +Jrscu7bPaEOGr8p3WU+PYQAA + + +False +-0.785398163397448 +40 +epHead +IMPpHUaiT0CFZLcH+44uQwAA + + +False +0.785398163397448 +40 +epTail +Jrscu7bPaEOGr8p3WU+PYQAA + + +False +-1000 +-1000 +50 +8 +IMPpHUaiT0CFZLcH+44uQwAA + + +False +-1000 +-1000 +50 +8 +Jrscu7bPaEOGr8p3WU+PYQAA + + + +clMaroon +$00B9FFFF +884,132;919,116 +O9Ia0CXMxkC9ATowborgyQAA +5srcgF0EYUyRM6tylL0wVgAA +EJGh4IwbYkCWyCQWvIs0cgAA + +False +1.5707963267949 +15 +O9Ia0CXMxkC9ATowborgyQAA + + +False +1.5707963267949 +30 +O9Ia0CXMxkC9ATowborgyQAA + + +False +-1.5707963267949 +15 +O9Ia0CXMxkC9ATowborgyQAA + + +False +-0.523598775598299 +30 +epHead +X82I741yL0ybUyEPhBbTZQAA + + +False +0.523598775598299 +30 +epTail +VHwOYW9vAkeUFUXT+cxoEgAA + + +False +0.523598775598299 +25 +epHead +X82I741yL0ybUyEPhBbTZQAA + + +False +-0.523598775598299 +25 +epTail +VHwOYW9vAkeUFUXT+cxoEgAA + + +False +-0.785398163397448 +40 +epHead +X82I741yL0ybUyEPhBbTZQAA + + +False +0.785398163397448 +40 +epTail +VHwOYW9vAkeUFUXT+cxoEgAA + + +False +-1000 +-1000 +50 +8 +X82I741yL0ybUyEPhBbTZQAA + + +False +-1000 +-1000 +50 +8 +VHwOYW9vAkeUFUXT+cxoEgAA + + + +clMaroon +$00B9FFFF +970,116;973,132 +hIsaQ5I0Y0qxkPCenhTfsgAA +dbDAxqIYDEef6cq3x4sQfAAA +5srcgF0EYUyRM6tylL0wVgAA + +False +1.5707963267949 +15 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +1.5707963267949 +30 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +-1.5707963267949 +15 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +-0.523598775598299 +30 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +0.523598775598299 +30 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +0.523598775598299 +25 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +-0.523598775598299 +25 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +-0.785398163397448 +40 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +0.785398163397448 +40 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +-1000 +-1000 +50 +8 +qb8LVJbh5kG4uilxed700QAA + + +False +-1000 +-1000 +50 +8 +4Ujmk5gLj0WyU3SYagr0mAAA + + + +clMaroon +$00B9FFFF +1035,138;1591,56 ++xZvDwUvFkOoytPg7jDZ2wAA +ba/wrXKu5EuHn69Sc1EByQAA +dbDAxqIYDEef6cq3x4sQfAAA + +False +1.5707963267949 +15 ++xZvDwUvFkOoytPg7jDZ2wAA + + +False +1.5707963267949 +30 ++xZvDwUvFkOoytPg7jDZ2wAA + + +False +-1.5707963267949 +15 ++xZvDwUvFkOoytPg7jDZ2wAA + + +False +-0.523598775598299 +30 +epHead +RYlosGPoG0aBCofSJbKnegAA + + +False +0.523598775598299 +30 +epTail +yG+8cHFE1EeshJkd1dKuewAA + + +False +0.523598775598299 +25 +epHead +RYlosGPoG0aBCofSJbKnegAA + + +False +-0.523598775598299 +25 +epTail +yG+8cHFE1EeshJkd1dKuewAA + + +False +-0.785398163397448 +40 +epHead +RYlosGPoG0aBCofSJbKnegAA + + +False +0.785398163397448 +40 +epTail +yG+8cHFE1EeshJkd1dKuewAA + + +False +-1000 +-1000 +50 +8 +RYlosGPoG0aBCofSJbKnegAA + + +False +-1000 +-1000 +50 +8 +yG+8cHFE1EeshJkd1dKuewAA + + + + +153 + +author +tacoxPrx8kCKprVgJHnvqgAA +6 +nLppBSuFyk6GHv3rvWfvuwAA +1ej51eE+QUW6l7JYARpitgAA +2UnPMw8k20qDwX1yw3E7UwAA +oUU7LbB8z06lO7+JvHxYawAA +7LaXktD+hUO/Zzg8rhchAQAA +G0Zgal9HnkKCrG9Vxdh6QgAA +6 +6Neco6zcl0uObHufbrc7/wAA +RHQsOilQckSyjRNZMJggpgAA +hNisF5EBTE2ATvCijhzvOQAA +sSUjGLtYakKYMG7MJEOs3AAA +6V1phiekNEigGlosS4iI4AAA +6sfC0Hl2I0uatFIXeo2nzwAA + + +tech-leader +tacoxPrx8kCKprVgJHnvqgAA +9 +LqRrN84lGEeTv5o2IgfsSwAA +G+LZrC/lykGqzYIlbLtstAAA +KOCYlVaZCE2z8yB61KBhRAAA +yKTK++/I8UuxNnTadbtxZwAA ++fqlfLLhFUa9tO2ZL52d2wAA +EJOR7NjNj0S9b5XYcTHPBAAA +zxkaRnUQnkGeblZpKwGHRgAA +t8mGGcRMLE6wazEY0Zmr6gAA +6oJrQfnv3E6j48E04AF4ngAA +8 +onJRiZekkkW+HvL7efTCQAAA +DLyG2IErKEu/iLgO368jEQAA +GHPM6mLD3kO4lCP2rqtf+QAA +Fxyv+zwMo0S0Ncj/Azp5dQAA +zYrgxJijVUeKhRuYPCJv9wAA +7VFRD/OOk0CHQPmyBREE7QAA +dr0yGiZ9w0ifqTGL7hJMYAAA +b/CTfa0mFUyr1SeIhcoTFwAA +10 +RtTv62yj8kevg0AAwoW9WQAA ++Lil4MWKjUOC2XYl8SjTegAA +NuLaPfQwkkOm5+Z8IfTRQwAA +NwDa11zhX0qixnczVDBHswAA +2wepYfQ1HEOA25v4ibitGAAA +PW0DMEjQBEykIxMEhQ5JaAAA +vtJPgAzR9kGwh+4LTMVDFwAA +L7XtJLG57UiukOzPeHdrVQAA +XQjB4BPTt0WAkavaXOClKAAA +VpLHTBYio0+yCxvIWp4QywAA + + +maintainer +tacoxPrx8kCKprVgJHnvqgAA +6 +qYv8SJgqPUajzKDRtANOvwAA +5pTwS+Z6lEq+JlcroD00LAAA +5o5h8gI76UOPFFl3iyCbWAAA +hLrtDO2G80+MBE7w/xqYWAAA +2+I7Hr2iCkGIQNrSDaC9XwAA +3sJVGZf+pU+A0jzck8PutAAA +9 +MAKnyTiDo06cPkcuyMVz0AAA +esX3j+a1KU2snuv6WgXrzgAA +bFIlptiTHUqaYGcZ9Z9BwwAA +YwY92xK+JEOUOaknXh7XMAAA +VUF2hqp6/UCePhaBLl598gAA +xg7XA4XPo0GPzFxhulYO7QAA +3ExrMzh4BU+qEom+NkgXhAAA +N6rmhGGOH06+NgfTaWft1gAA +jTxlFtrXok2VlE3EA+IAugAA +7 +5LBvJCvx5U+R0JXvGrtJVQAA +hIwTub9FSkK/mA+8tg3vAQAA +kW2xBvd5ck+7hi+wjeIDWwAA +1rd1mOGAkk26xSFOjW6oBQAA +PltbgL9aKEOMcFQlA6pKEQAA +l7A5rUSAq0+kXr+A6mdcRwAA +hbdfYKhKQEGS3E5YtXQxcAAA + + +developper +tacoxPrx8kCKprVgJHnvqgAA +6 +8ZQdZB1z0kaDUzkVHOzvRgAA +Q4A69uNsRkiKLyZhGHqlPgAA +RfdgS6vdFU63KYKjPfN7OQAA +J56vYtWN6EGOMGIGF6vlZAAA +zjTOREEuZUS4nSu9c4x/IAAA +2F8fgWQwpUafOOb13FZn/wAA +1 +vY9LoEpVCEyXKh6+k1PP4AAA +6 +89CSjktmDk6aTYzK0WeqxgAA +gzYTAF1gIkizg/Vue/2ZQwAA +TeOn6G5DU0iPhLs634h/BwAA +z1R9mDNJ/UyAy/2XR33nXgAA +VD6ZOZdU+UucOrfmGN2ehAAA +MIv+ry9OkUGDFu+OFQh5qgAA + + +tester +tacoxPrx8kCKprVgJHnvqgAA +6 +55htDUboMkKutvJNMs10VwAA +6ZZwa71yx0+LjSxYRPl7qAAA +R6mmC12erkeQ4gBLy7dAbgAA +yTQvkxa2EU+paqJboa22BgAA +spUNNABBB0m9QcDFKPawHAAA +du8mkF0Y/E6rhBNO394/ogAA +1 +jKTbz3HBukOB4vjFAHBjhwAA +4 +06vNfm1gx0OR0K9NmGmXEQAA +S4UJZMo1R0qd1Tyo5YNdtgAA +YldXkvDuwE27LSJywqCl4AAA +nrc3+Xx32EKxZK145yefSgAA + + +user +tacoxPrx8kCKprVgJHnvqgAA +6 +jBby7rVxVkO+HkQ21KY54wAA +pPGvserbwU+ETNWzNZwzngAA +xAzVewxj5EO9A+Ldm9bqdQAA +vaX40+6yy0+QL2+OqVsz5wAA +/0zKkFlFd0y4ssTde7JXtAAA +ihZPVqkPV0SOVKNScRxMaQAA +2 +gIzn+8O0A0ux4mJbpKNkEwAA +4d0O1iKcq0+kIW5Bpb2joAAA +3 +h8kotrimC0Cpk4nuHRgyzAAA +8hHEA5HEUkaJOUrimD+IqwAA +aS8jAO3xFkSspkn5BLzAQwAA + + +translator +tacoxPrx8kCKprVgJHnvqgAA +6 +OS8e8Zau7kWMtinIvCc/swAA +WsUDyP0DbEqd3tRk8yKANQAA +lLwl6ItcyUi/x+g1OzlffwAA +sTVRqiD/L0m+CYPwqsjRYQAA +qxo+NWBQ90Gy4fr+d5nWPwAA +X11dAvxeG0Gw+L7zzawWMQAA +1 +wKnDb+gcSEGIVFdvrqRcMwAA +1 +DcOYQKycgUqgn2jU568/iAAA + + +documentor +tacoxPrx8kCKprVgJHnvqgAA +6 +iDOAaVuVSUO57121Dqj8JQAA +ZSoaGeJlOE6oA2yHk8/u3QAA +3qUjeu+vUEGjudMkYvZkAgAA +jRMnNsOHm0ilwTcHjyhAsQAA ++Bd5Cjuy3kS/2+gRidXBMAAA +qdDfy1OPokez1IabjuMXfQAA +1 +3we00g4TrUSP2RwRD/Zr6AAA +1 +UV6CUGeKi0qg+WyJsqDNMAAA + + +bug-report +tacoxPrx8kCKprVgJHnvqgAA +4 +lwnbG+r6OEegyTwNJ3FUnQAA +634oOmBInUS2gaxmact2gQAA +rVNExfqqBEubnXuOzUsTIwAA +rDeS25h7tEaGwfsBzGSXFgAA +2 +8x8LgMHMS0+ZEvqndI0NEgAA +WX2MlGTb6EOX2luk/so3YwAA + + +new-idea +tacoxPrx8kCKprVgJHnvqgAA +4 +cQ04Yqm8yUWze+0UejiQPQAA +wabWoZkEiECTn+HhKn6kkgAA +4XWH56+npEullggKbfFU9wAA +bUwcFsT37Uu0lm1qXTV5JwAA +6 +zx6gVR7LCk6dAYJetD7d4gAA +86l1myG4S0SDBf07PTiVHAAA +0RWbjevmkUewt0Cz0HxaRwAA +UQOyuA/Sn0+V7QfuwDF8zwAA +05xPD1FxVkik/6PBhUwnSwAA +S9Ht5rNXlk+R/Be2/tvjiQAA + + +test-task +tacoxPrx8kCKprVgJHnvqgAA +4 +BoXflTl2zkiHVb9rTj8+gQAA +AaYidFE7+EeaQRrTwlMiGgAA +ewET2F5E9kG0jnIQOrXD4wAA +Mpasmi600UeO4ulDZLR6YwAA +3 +PKDNpsNf/kGUvFpvwAiMgwAA +LLG2+9u6KkebumqGep6bfAAA +He/O+ItNt0+c+XSWNytz9gAA + + +check-if-publish +tacoxPrx8kCKprVgJHnvqgAA +4 +Vdh7zL8QZ0OtD+C+OlvxpgAA +9nnEfIe/n0qhqtnfVpjk3AAA +KOxxtbd2BkCVFupWEZ87XQAA +zW1N3bsNtUuzR/EjyyD3OQAA +5 +l+pJXTVuVEOXxepPp7tpmwAA +m5bOddD2ykOYQJ+JqC5GQwAA +P1DmfF8A8U+xRvMvkio6ggAA +zaihnGbFv0SYjieuD3Ii+wAA +XNH/vjJrPkeWiAnFueRS2wAA + + +bug-fix +tacoxPrx8kCKprVgJHnvqgAA +4 +vIM1yyr2zUeK8LOSwJnagwAA +We6DNRfsnkmrfVI7WoAPugAA +EDr1FZbaVEuIqOX/2tvVgwAA +p8wxG8B/XEKJ6aXtVJv2awAA +2 +xQhxxFEtpECHagEXOLUIWQAA +UFqxiSQgyUeoy0qNucDjhwAA + + +feature-list +tacoxPrx8kCKprVgJHnvqgAA +4 +1XmGBT1/RUKVRwCIItHBqQAA +unl82IKNKEqW/ZUy2OKO4AAA +miBSD9UWRU6FaRwjnVT8swAA +n+5DC+YcyUSIEMqbFpvGCAAA +5 +cekDFk5ILU6GQvHycWgn2QAA +DWmCv3GYyE+A4/wxNfV/TgAA +jqMq51leBkGUbLZ/J6mVggAA +TWHK+EvM0kuJxrZGPnmV/gAA +gL33aMDC5EaM1KvQAa8OywAA + + +develop +tacoxPrx8kCKprVgJHnvqgAA +4 +gzOBaPhYH0Sqi38GA9ka4gAA +w1eKl3jLok6dQE3JB94YKgAA +N0BSH6oaTU6JSCzmTl8vsgAA +zLCn8+123Uu75sJijDTdZwAA +4 +9vaywntHRUS9MFakEmMvSgAA +9H2x6+kFc0eo6Z2KrSpZMgAA +M0pjGsRCsEy2IjYa560UuwAA +Bkj3nzY1Z0OpLErETn5JAAAA + + +bug-retest +tacoxPrx8kCKprVgJHnvqgAA +4 +t5UaBajz3kuwVYgFf4H/6gAA +1GAx466sEkKGRO0kCp33KAAA +2ZG7bQGVzUWNkSGwUMturQAA +RSFmeXj4YE6WLZX67O2S6QAA +3 +Ni4/biH/lE2VxdPr2OKnEwAA +wki5AWxXakSVFXSFIAWF6wAA +8lZk7+ScDkGsGw40b2zWuQAA + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +rLipCiuNnkCKrVs1Dppf/AAA +k6w1Bteav02GGDrC6cJmKQAA + + +rLipCiuNnkCKrVs1Dppf/AAA ++JrMCo45qEOWtcTsDjqTTgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +UWFTE8BDCkSEe3YOn84GrQAA +k6w1Bteav02GGDrC6cJmKQAA + + +UWFTE8BDCkSEe3YOn84GrQAA +8v8IRJdlJUmbHIylKGey5wAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +fPubsZnsN0OJ6WOaq1H5aAAA +8lQQB3J1o06qDEWADag8/gAA +WieLh+QA7k6+yEd3bSw1SAAA +gSPGOiEdNEuyFfKarlynsAAA +2 + +False +Zk/ihiJuFkm1nc08/lO3JAAA +8v8IRJdlJUmbHIylKGey5wAA +4 +JD4nWCXdqUet6cDY9tDd3gAA +F08DdZDlv0q0HVSEEw7dSwAA +7YM2x3Kz5kikaN9Vmz23KQAA +t8hbDZginEqDchu7EzAtzAAA + + +Zk/ihiJuFkm1nc08/lO3JAAA +rxa+oNm2Kk2e9yVRZgZC4gAA +4 +NNgL2DXXaUeoy5NCLXCTBQAA +XFlX2yGrbE6yNbCg7/LyewAA +n37gTKmZAUyChGFyO8WG7QAA +Ku1Y6FRLF0i51DAGxutpLAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +L/XvVYcg30OYQxS/1zrxCgAA +N4hlcI+mKUC+m0HhgvEqOwAA +NReszVRhfUKi44MHBhssMAAA +ewx0DSFyDUeKMe1loomMGAAA +2 + +False +ZYww4bhgbUujMdsXvrsGRwAA +fIx21ILIBUuXaoqKHt5Z2AAA +4 +5ykAGIN8akm+5iyaxICZEgAA +OFRV00KjoEiTYfaWFH+UywAA +QudUJVb+Hk2Diq0z4wQtwwAA +Fj8cEo58fUGw8dLpnuo41QAA + + +ZYww4bhgbUujMdsXvrsGRwAA +5JcsdOcl2kmUJ1xczZEQMQAA +4 +ry5zWkM330e/Jyq2nAqAPgAA +Gxdf4jHwM0KTUKMNkLGg7wAA +Dt7MGyVATk+r30Xwpxc7kQAA +bve9pJQnekGLVWbdvRS1hQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Sy0UyIHXHU2/ebKqVry2IAAA +Xq/XBhAjWEynmKXYmK4D2wAA +APEoSymd+UqTapvOaoTpqQAA +zJ3xlPYUtEW1e9Qdfc8mAQAA +2 + +False +u+LRK0aPeU+CvKL8BjN4+AAA +UtnSzF7bC0iukjII33XrugAA +4 +JxGA5uJESk2MhV27HtwkRAAA +Mb/iubFANUqY7j7ijlpP6gAA +YkX7H7Zt5EewPJWI5pJcTgAA +9exoDj9BU0mU0d4v1p1I9QAA + + +u+LRK0aPeU+CvKL8BjN4+AAA +wFR71rqQ/kavPS+ztzufLgAA +4 +3B6bcQ28K0qIePRIhMLx/gAA +EO3LmJMCfkiB87aUhqVz1wAA +81EORfyr30GhxjgRMSlsDAAA +1DUg+607CEG84+ifMI9jHwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +SR+lhqG2VkS85GKgVr4OgQAA +yQFjSnTLFUG6RKdehm1PfAAA +fVvRkqkPhEur/sLEGG5gIgAA +YPIwLlunYU6nARGBZMmXdAAA +2 + +False +Q5rq4hug80amVs0OquyiyAAA +ymnyuU2meUmuFQCl8KW3EwAA +4 +9Vn0AnxUS0iEZmCg5zFq5wAA +U79XDob2mkKddWcOf7rOVwAA +uBV2hvPo70iQ+3Znq+k27QAA +zINn6IQQ5UKucIti2VEvsAAA + + +Q5rq4hug80amVs0OquyiyAAA +UtnSzF7bC0iukjII33XrugAA +4 +Z/S1yG7Xs0C9XUP/GF9HwQAA +X4MciX+qy0awACeY5pAItQAA +TiCYBwm+TUib4VPH0BfH4QAA +/+MFfnkS/EaAfGeSNQPzLAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +sFjq/YNNnkGyuqGL8j09XQAA +5JJTfYLXMUubHFTpSMWkcQAA +GK5AklYlFEGV4gMEGxbkoAAA +m5bxj0wAHEKq1kq0Wqh99AAA +2 + +False +Lslcq+/wp0+7suaGPGIyVAAA +wFR71rqQ/kavPS+ztzufLgAA +4 +jzvWBb0OoU2Ux9UPntIHZgAA +59prGpA5EEmNhyV8cjBTMwAA +w9nI1ZdDuEeC6vWYoGBw2AAA +6XmugWGmxEW9E96QRUZpFQAA + + +Lslcq+/wp0+7suaGPGIyVAAA +fIx21ILIBUuXaoqKHt5Z2AAA +4 +FUgvbIJLH02QBj4Xw7kxugAA +selCGBBXDEymq17D9kSVYQAA +Pf6EEag26kej1e92R3JlJQAA +tSHDw1BT2kCMKspRtmDR+QAA + + + +doc & tutorial +tacoxPrx8kCKprVgJHnvqgAA +4 +OJNZyLkPgkW5YFYA5x/ChQAA +bfOuJlVHEEeu2T5S+l6VDwAA +gLaJGOxaI0CF/Qfa/zpwyAAA +wFcfBTWPIki0mu20Xv2DsAAA +6 +UjrU3zr4ikWZcD67/VJ22wAA +/91dQ7rhgUSI28jqjPHooQAA +UVpvR8JQo0Goo1thnZ8TQwAA +8zPYwZBWOEuUZxPtPgU/YQAA +m5jTftKx4ku74ElHxxMotAAA +yYIJFraZbU6Xh62CJfSi8wAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +CyLz987Yx0a9lbcL7SoWMgAA +AhCsuzIlRkW8R8jxObOIOgAA +MshDZxITwUuAI8EanqUuBwAA +KgraZq+q1EeEN9cCmIoc3AAA +2 + +False +QAFwbnInOU6vOm8b8SgmzAAA +oWDHE/AIyEqhL2zTdizC4AAA +4 +MjB41fYRRkeOWPYi1mSDNwAA +79jmtZfAbk+b7RrS1J8G8wAA +VafAtxP9eUqd2EyK2Zv4YgAA +/ZWIU1XDyki8c6Icr34klgAA + + +QAFwbnInOU6vOm8b8SgmzAAA +fIx21ILIBUuXaoqKHt5Z2AAA +4 +xYpebV5nwEKGEslHsNqBPAAA +mQ13YjXbH0Ov8jcHlE1sHAAA +SEVCW0KeF0+e2/I3sLziggAA +cU8aRSvXrk+YvWt5FpiOKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +DLeIpH/Vp0qz/k4Z835fxQAA +MLBX+NGx9kymQ76b9EAKuwAA + + +DLeIpH/Vp0qz/k4Z835fxQAA +k6w1Bteav02GGDrC6cJmKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +lyrV25UpIE2C5MemvaVCwgAA +A/9YWnHJBEGH1jC8FI2M9gAA + + +lyrV25UpIE2C5MemvaVCwgAA +k6w1Bteav02GGDrC6cJmKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +5Y4DPMdp/kOYhqjVFGVF0gAA +OG2PYYcnHky35qJfwJh4qgAA +sq/inVtUT0iJnxjV3mRDMQAA +8RoZjx2ZxUqloF7q2taKnAAA +2 + +False +otl6N6twSUqOS1ckH+zvkAAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +zu6VFQcBMUODfmyo6wewFQAA +7rlTm+0OOUuqqncqyCOO2gAA +X0S6Ww7LtEmtkuQtl9sSHwAA +bGxdMvOXXk2NUPsvL7epowAA + + +otl6N6twSUqOS1ckH+zvkAAA ++JrMCo45qEOWtcTsDjqTTgAA +4 +UpRN66IG20+BFv9v/cMFNAAA +w/WOK184rEemQsEXKo4phQAA +VWo1XbHSpUqAbWBG8Y1pmQAA +rg8w5tv8t0aL+onnxygB2gAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +hg8RO1a/B0qXE38vkUxToAAA +kgeNjAQDpke4/lNPm0LFAAAA +U+eCEWvk6EOEexJsJJdZdAAA +RUif+XapP0uGbbHG6ycMYQAA +2 + +/wV294vExESRsoCAG0SOGwAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +FqsiT9jK80uNARuQ3/AG5QAA +5P+VWT1nWEaSbfjMQy9BjwAA +zLaq7AqXFUiKHqNhg8FbOAAA ++FmtNecuYEKbk3Gd+zdrJQAA + + +/wV294vExESRsoCAG0SOGwAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +nHo+Mxd4i0iHZ+AQpPJ5fwAA +7KGAiedyz0WKUUF02ncA2QAA +Garb0zenNEix0LX/kaUszwAA +OX2NXD48IEyoOoxVnsVPfwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +o8jS0zGz6E2LAIlZNGWlcAAA +3/xIB6tCJEiuQ+3BA1D6+gAA +X6pIR5c4ckquwKbxtZgVJwAA +m874lnl0+EWvpF1V8NUfmwAA +2 + +As4jKIWMwk6c065+KZeGGQAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +HXrLE5esF0uyX+nXhGDMIwAA +KGe3EGq+xE+HhmH5w3i83gAA +RSYLHup0/Ui7ZXJ3fJL7pQAA +RuxQL2GTgEOo7mrXkSVvXQAA + + +As4jKIWMwk6c065+KZeGGQAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +a1hWjFvMzEKXg5P9yee1RwAA +8s/0yPkfbk63cY3zI0R5+AAA +5jur5jS15EyAnqY1Mu4dyQAA +IBQMJpgQTE2tqdMPKB3twQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Ukj9dkUAW0e0jMz7p9y3XgAA +gqf6o2E9O02AkOUFqATYEQAA +GNlx1cSQCEO2PMGBUXWYqgAA +GJyZzEhwd0ukYO0vnk3pVgAA +2 + +qSMM7YEtUUmnkrz3femcAQAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +83SS4KQg2UqD4zRlbhXGMAAA +YJHqwqDBpk6QlU5T8J2e5gAA +05ukk/GNr06GfKat3GnCzQAA +BFA5eZ8lYES8vRiBQkZPEAAA + + +qSMM7YEtUUmnkrz3femcAQAA +oWDHE/AIyEqhL2zTdizC4AAA +4 +cHzC9/NikU2NmptitY3gWAAA +JNc5ZjqPyEmEOy3uzsAFJQAA +X4/XaVGceUanYzAF163RhwAA +mBoJo/CYCk2+zejGQvvrDAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +DJ0vcchCY0CnHUnEhg0PEwAA +Bod4/k93VkWAJYk+f1yCeQAA +qJdNSfyuP0aFrWccEWBh5gAA +51N2HoXKo0600H7B4oOnogAA +2 + +False +QOEK3K2D6E6pqfTn0mjGSQAA +78O5f65/80OvpHK3AuBEIQAA +4 +PxuPxbf3F0mC6au1o42IuwAA +kdL930heekGPN3wEJHjDDwAA +Gmmlyr4gikOkIE7XSvtR5AAA +jGjpsCoc9k2BRUpeT8rHfgAA + + +QOEK3K2D6E6pqfTn0mjGSQAA +UtnSzF7bC0iukjII33XrugAA +4 +VpHIAv0gY0qmux4wbRVLeAAA +RW86qpqkyUCbJ3mVC8Yx9wAA +vP7AWBLFCE6fK8fvqa4SPAAA +b6K2ECYEiE2kI5jZVHhrsgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +rz0WGeAcf0SlqjuWwQwFcwAA +/rHWPGqA0EyYC8g1ohy0TgAA ++T1/+ZcXoUeUINJPUPZIlQAA +5j3yzrxHI0K34OA7BeXzkgAA +2 + +False +BunHMt9UUEaob51EuVirsAAA +u2JHX3nMn0CMyZLWTG2R1QAA +4 +wUOEptHUakSY6I/buij63gAA +Y5rhnjzJgkusxyp77WFreAAA +xavYe4pYuE+1GKIeCKVcQgAA +k6C4zp4DBUuxfcDbLW4s4QAA + + +BunHMt9UUEaob51EuVirsAAA +ymnyuU2meUmuFQCl8KW3EwAA +4 +qgHNFbE1yUSwxkP/sxtOJAAA +RhMu/pC/Iky065R2MwtEwgAA +LcHniQlwIUq3d4uYh3FjygAA +doeBGPbBvka5YzQ0Ety7BQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +KlnhplKJpEq9N4P3dZ0ccAAA +BOKhQBgkKE2PMWbp+G68zQAA +6e7NIB3pLES5O663rvpGEQAA +LBpamqW3qUugvknaG/5UlgAA +2 + +False +GkzxRdxRNkmn62ufJTw13wAA +5JcsdOcl2kmUJ1xczZEQMQAA +4 +0pj1G6QgAUi8yEL/QWtQYAAA +IwFFivWGCUuaGzQsRihSUQAA +Sgawiqqpx0ar5pnikeHcqAAA +vvj8L/FsF0KQt8Rv6nc+xAAA + + +GkzxRdxRNkmn62ufJTw13wAA +ozTLGGkik02HnJ667z5MBQAA +4 +HnVyaVwk6UqV4iof95F/rgAA +v1VAgbR/RkaonfOW9OfdSwAA +u4aWUY6eukmgQJnoeSmYwwAA +eS7sNcPgS0+PtF+i93PYHgAA + + + +pkg-publish +tacoxPrx8kCKprVgJHnvqgAA +4 +7R3Vtrr63kqhX5GzE7CY4gAA +ybuDZxrjnE24r0UbRgKqBAAA +88FpyAWY+UaSMKxPQD00qQAA +Qo+BUYj3w0K/jgQjuB4yzAAA +3 +ZCmKuqp4sE2/fLQrj5OH6AAA +MVnve7DJ0kSTrd01IVyX1gAA +6sd33lS3GkaENMAtDneYfAAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +VhZmB3uX7kaXnUWAdCGB4gAA +YHm3qWODUUWVW2CwTpLTaQAA +AE7QJjoB4E6T/F2wKOOQxQAA +1g4pudaRik2LByHmCigqngAA +2 + +False +atCUWqlo80uXI6LZ5VXAqwAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +FKOFyiXvw0iHjVXwyiZYqgAA +jILNTK/UXkWbJ6PxKPqDmgAA +qCE42hVjhEmwLIeOYimZJgAA +0bG7hQ2D6Ee0BMVHxFBNJQAA + + +atCUWqlo80uXI6LZ5VXAqwAA +FPjdKo5EqkuvbojCyT40wAAA +4 +4YZYJ9ZqD0e+ntjPLgKC4gAA +aP94sthRMUW8RTgcI9WsxAAA +1W0tSTT/LkSjIRxLUHi3JAAA +rnLRv+afEE+3AAL7HweCiAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Czjit70NTkyZKNjNdrecFwAA +LuU0Vft25kKxcILaYN9CdQAA +2sN7szkqhEus8hafmL5knAAA +ID3nS40y6EuYiL6ZVikQTwAA +2 + +False +VSr15ngAt0ucp/JSndd7fAAA +ozTLGGkik02HnJ667z5MBQAA +4 +RdZn2kfGcU2ncgqckMujkAAA +Y3wW9nCYf0eJQiKVTYEvOQAA +VhY5MGMR3kSEQMt2k2P1OgAA +538+xh2rfkyNzyyfuzNaxAAA + + +VSr15ngAt0ucp/JSndd7fAAA ++JrMCo45qEOWtcTsDjqTTgAA +4 +yka4fXbWQkWFJKSoFEDfOQAA +rNCF76BXd0WCwPP15XkCQAAA +3aycythwb0CBYkO8MqrmJwAA +ssKESmY0xEWVLBdE7OS9XwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +J7z2l0td/kS0hlue+2WNYQAA +VR+Aak79+Umgp3bA27YoRgAA +ifeg97N6WUiKvJUWgPOTWQAA +rUKAMmrrwkSGDcTXoCJBCgAA +2 + +False +t3ESzDEjd0ut89bd3IyWPQAA +Pu4+pL+iiU6lRzDtfLIgJwAA +4 +gkgGZ5XPq06Yq8H6/mhxGQAA +MU+LMLQy/UuMhldHl2jTHgAA +QgcPkrmTp0aOp/pigNvWDQAA +h9IwxH5j+EKzjaILt79S2QAA + + +t3ESzDEjd0ut89bd3IyWPQAA +ozTLGGkik02HnJ667z5MBQAA +4 +/CIUOEoegE2GdBSsuNrBcgAA +rDaPvFt+JU6hhz1f/ruuQwAA +jKF1QEu3K027LQII/cNBHQAA +WCH6wS+B0UC0GOaYvqf4IQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +oN3tAssrmESYbJ7DnDbJBwAA +7ysOtBF5OU6C7B5SD/LNSQAA +oaVoZkRA7UCX5U0gSlyRowAA +fZ8hfYZLE0+6wSSSLnMIkwAA +2 + +False +j2qfJOQnLEyR5RVtbVGb8AAA +aaiB2ZAB7kOSB9niWMGCrAAA +4 +PNLBgWLlt0qh0qSiWmm6fQAA +sBLEv0a6MUOxVSIjTI7oRAAA +iFFsmLbtvkyYY6NDPf2kEwAA +9ngGt/WHPEOVYrMQhnNZ5gAA + + +j2qfJOQnLEyR5RVtbVGb8AAA +ozTLGGkik02HnJ667z5MBQAA +4 +Sc0OIQhuoUidWTJx9x27pgAA +72tlEmphJk6IXASFp9X90QAA +xmWLUGETMkOoyFeatsLLRQAA +3uuqO1MbXkeeqkPqmxsoaQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +hJRk9KPU+UeHMYRbZjP9rAAA +j6VFeRd+Zk+KQjIP8kMcLQAA +Bb1h473Ln0CI2BMiHfpkIwAA +XUZPy8Cf9UuC2K67UdYxgwAA +2 + +False +L3wUC+fjukG9Mbmq0QYdiwAA ++JrMCo45qEOWtcTsDjqTTgAA +4 +7aqzoShHzEehoT62iqdZxwAA +3bht/bebjkaXO8woQb1WBgAA +MRKVz+IA1UuD2xpuZyp/oAAA +3m6+IGlmjU29wgIEQCRA2gAA + + +L3wUC+fjukG9Mbmq0QYdiwAA +FPjdKo5EqkuvbojCyT40wAAA +4 +ut1qqbJf/0+LzAbSHfgIWgAA +aDRG2nt4jkSjokdzljbhwwAA +n3N2hwYIO0yFMlpxJ7peaQAA +lEr7AB6W/UacoRJesmNIdgAA + + + +dev-step +tacoxPrx8kCKprVgJHnvqgAA +1 +Okzvn1c6D0+Yg2dWMAvJaQAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +ARENPNto502mBSSO/cnOHAAA +2tWkSXrKQU+2V8FO46j7TgAA +QepaXmVy4UO6DCEgKl2vlgAA +nt6ZlS30U0SdfHYYR1O1bwAA +2 + +False +ESsTAdhYyU64zi6/oVqTKgAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +J5lkR3i3wUKycPleWHDTIQAA +voEc49klakK8QbtZG2qiOwAA +11o3SRF/yUWFDDIRfrSFSgAA +O5+bHbxyC0+bdQMM/tgFqgAA + + +ESsTAdhYyU64zi6/oVqTKgAA +8v8IRJdlJUmbHIylKGey5wAA +4 +Qn3h51Gw80+mPHTcNEs35QAA +BT/LIA7EAUqDxudgpaJCqwAA +aRMFIiI8k0yN2B0jGd+5EAAA +LXxWlKm6rkWV2zrq9dgykwAA + + + +design-module +tacoxPrx8kCKprVgJHnvqgAA +4 +0NZb34oq+0iz6/8DYcniywAA +dP9LP9rtuEO+i3avSgAGVgAA +nMpMGReseU6Kct5O6ks3VgAA +7Ykp0d9JCkOp70mCxl8J5QAA +4 +cqCsUEAeA0in0Z2LWweznwAA +iGT7GmF0r0CH0TSScrk62AAA +sHxTuCDocEyzJSz3moadcwAA +gIU56iDnlUaFhBS+rQgjwgAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +D+7+lRtL20CwVpExOSBX7AAA +oVw/jiGMz0C0iTNLLteJDAAA +JKuU1ThtKE2xQ1f4Aqnj4gAA +jN2kHhJMu0StmPqVq52n4QAA +2 + +False +udZiFgT1HUuXSsB17nyApQAA +rxa+oNm2Kk2e9yVRZgZC4gAA +4 +IFguHS6Qo06X/Ulso405AwAA +WUvJoZKV9EqzY5IvmGwopQAA +1x7fD+aqoUyyaQ5pbw9SEAAA +leTm99c2L02ZKVnOiVJgWgAA + + +udZiFgT1HUuXSsB17nyApQAA +fIx21ILIBUuXaoqKHt5Z2AAA +4 ++bEGPey1WUGgjGGgZLap3QAA +wzt6WGKB7ESFZTq6g9VpEwAA +1ILZi1CbdkiyGDrCpDDKlwAA +ao99dAh38UyNcJJhz93rNwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +4MaPAdQQfkmUFpuWT1PHmwAA +F2UqhwXe80yk7JK6L04XBwAA +nYYAkY1enkKoJFwILoBHlgAA +HuQAUs9y2Eao9ac5QhECtgAA +2 + +False +pRL6RWX7IUGI9SeSZRJAEwAA +78O5f65/80OvpHK3AuBEIQAA +4 +m8RN+Neh5kWte9e96DlsaAAA +12G/TZTZU0qEeu64QA6VzAAA +kmLtEPc6gEymKXVYoCB16AAA +CjGJ3aMfGUuQto2I1CNm8wAA + + +pRL6RWX7IUGI9SeSZRJAEwAA +5JcsdOcl2kmUJ1xczZEQMQAA +4 +IlxqCNXp/UyYHUzZVYvcsQAA +EJRHT+wc7kmdr8+/mZ6uDwAA +veH3hs7Pwke/ekic2iLsQgAA +Oj6Ju1KupkSFy335XdgZKgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +2l+fNLxcTEylJYcIIiDgwgAA +5s00rboppUq3tLlx9FoH0gAA +fM9i9Yaj90Ob7B0dimgDYgAA +E3qBcsRXvECWJCWON6Z2IgAA +2 + +False +Haa/HtHu8EumDcJn1va7CgAA +oWDHE/AIyEqhL2zTdizC4AAA +4 +iF9DJxKvnEWdlnsFZiL0OAAA +OwUaQ5wAUE+DkUi0zdPTOQAA +rGcSLsaV1EqNaT6crweOGQAA +P3NpWkuCd0+OeVdtAOsadAAA + + +Haa/HtHu8EumDcJn1va7CgAA +ozTLGGkik02HnJ667z5MBQAA +4 +8qM5hRSWWE68NwIGkB3CFwAA +Za+gZMnHAECWRhLalgbWrgAA +ClGq0qJLCkqpfd5k0CmPRQAA +YJbGZPdFvUOBS3uX0q02HwAA + + + +build-pkg +tacoxPrx8kCKprVgJHnvqgAA +1 +n/jxS2ae4kuHCG+KzrGgtQAA + + +build-config +tacoxPrx8kCKprVgJHnvqgAA +1 +GXaySoAyJ0qZ4VKE8gVC8gAA + + +build-pkglist +tacoxPrx8kCKprVgJHnvqgAA +1 +voQgF26qyU+tJv2JRt78GgAA + + +devutils +tacoxPrx8kCKprVgJHnvqgAA +1 +M2viQFzR7kKSo4AiZxz9dgAA + + +codemngr +tacoxPrx8kCKprVgJHnvqgAA +1 +xnCmPbwYs0qrDDBl7cz9sQAA + + +soft-repo +tacoxPrx8kCKprVgJHnvqgAA +2 +7NCDjevVfUa8aWdQ8GgHMAAA +gKBHXghpeUKFepoXHyXpvwAA + + +devspec +tacoxPrx8kCKprVgJHnvqgAA +1 +vnVOoxtjQUaPd3N/Mn71+gAA + + +download & build +tacoxPrx8kCKprVgJHnvqgAA +4 +DOHBlVwZH0CnyAOdMPUqxQAA +Km3rwjMun0+5NDhhHXm5GQAA +JRnPcdhgf0GhE4NZqTmUyQAA +07vEojIcbEqh2llQKPlxOQAA +3 +tMwNvnbWx0qC99wvlGYF3AAA +VvLdglslUUqBPX/aHaWVywAA +9QetYTXGJUuUfmUAHqUS4gAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +4j+FYeH/A0WfZtbw+agk/AAA +HdfK1M7g00yeb9gq8cQwYQAA +t32yCOrpQEacMTjogEZyYwAA +RJgmkH5hk0mnzfrNKsnC3AAA +2 + +False +wARDKsfmxU6pDs0VU6O25wAA +FPjdKo5EqkuvbojCyT40wAAA +4 +ygfFznufl0y0T3K8r5hlkAAA +PIELQcytDE+hPTNaBNiuwQAA +jI6Et43WQE2zDN60+cjlIgAA +YmoNlaGcA0a8fo4lXqv+uQAA + + +wARDKsfmxU6pDs0VU6O25wAA +cH75vr0YhkuvV/fYij/FMgAA +4 +vX3yKNnf9kWT+KdSKla1cgAA +eHuBA0XdyUmhMo3B9ab0AQAA +OfnE0o02K0+ASmJ1zRdiXgAA +hQCJMBooikqa1DS/O6iTZgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +kvMDTC7QZECLLi+bfmC10wAA +VoUNBOUjkEmAMelwyyIhTwAA +0WzY4BhxFkyctNved5yIKAAA +Ib0YeqIjLE2HWXxd+ODqTwAA +2 + +False +NRxXI+ohkUa8ldCSWR3lNQAA +u2JHX3nMn0CMyZLWTG2R1QAA +4 +0jbEs1Oeqkqgv4k4euSItwAA +ubjxV1WOlEal88NwYpdXjAAA +vpAsZ9TOC0SAs0znqYREbAAA +JAFz0ssyuUqRfHHTTGFBXQAA + + +NRxXI+ohkUa8ldCSWR3lNQAA +cH75vr0YhkuvV/fYij/FMgAA +4 +oicOAnPBqEeBGOYO0zKOdwAA +SHrGxXFE4E+JFsETvnUisgAA +gYabRv0JmkS5BbfVxNmTzgAA +MRinMx5ptEOv+QF74paAiQAA + + + +new-demond +tacoxPrx8kCKprVgJHnvqgAA +4 ++xQR3R4Khk2Mr7tmPdkWSwAA +lBSUAk54IEO9/+7rsBiabgAA +SHPjTX3I+UasU0SECLayjgAA +GaHNfivTfEKsvmOcA6hT6wAA +4 +LgaAK4fEB0e2otJzSn7toQAA +hU4yh3LkjEKFkdS6cl0FBwAA +RKdpd+0S+0OaYFIwovSw5AAA +g4nzG5AXAUmT/Juw/Y+HhwAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +3djyNWh5qUO+iA3WzB20KQAA +vkj0BOoRg0qr8lzo0Z8UyAAA +veywQG923UCpJmHqy0uBQgAA +xJfHk4n1e0e9blWmKGQ2KQAA +2 + +False +HwNxguHxkEq1TTvntBzfPQAA +u2JHX3nMn0CMyZLWTG2R1QAA +4 +28qijT2f9EC/y3piF0/+OwAA +B5QJ9P4hf0uJyfwdf7Rw/QAA +y41GheG/aUSOla4Jjw2CrAAA +u87KZbz6v0a374YpZrGucgAA + + +HwNxguHxkEq1TTvntBzfPQAA +K/jI5ejWkEmd+RwmoOHzSgAA +4 +b9VVWnuxUUy0gytp8KpRmgAA +V3tKgSpL1Eu0kYg13PnjhAAA +nM5w7GSejEGEhI+IZJlUGQAA +vkJuk8uzxUi8zC+a2EkAagAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +MAiiKxGK/kKDbI0OJK5r9QAA +k/63DwjndkiLReX2QpxL6AAA +JvDTgvMJuUylq++u0waS8QAA +cXH/C205ikKf4GPXGnXArQAA +2 + +False +JDSYiscd1ku4Q9VTc3cxJAAA +78O5f65/80OvpHK3AuBEIQAA +4 +5KGEQZPXtUa5SXo3rpaRKgAA +6wB5DLUFQU+RrP2KOUtcTQAA +4OmKSfO1oUKfuQp+h1hWZAAA +xxxm+L2W8kCan9BNPKWsRAAA + + +JDSYiscd1ku4Q9VTc3cxJAAA +K/jI5ejWkEmd+RwmoOHzSgAA +4 +u4UXJfgnQ0eLHbqR0iWixQAA +rhAybtEUtkOwXV5kWFtzzwAA +JC37Y9iOX0uoXkBqmeqeKwAA +uRnWFV241Eq+9UWbGsRLmgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +GbYPWnb7/kS6XkGQmFc6wQAA +K/jI5ejWkEmd+RwmoOHzSgAA + + +GbYPWnb7/kS6XkGQmFc6wQAA +k6w1Bteav02GGDrC6cJmKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Nprb3bcLoUC61BOosZ9+hwAA +eygKNnDk3Um2veEIU6qg/QAA +l77tB7orTkiaZGrlQF3L0QAA +hJ0tc1S87kqSAuGX4+RWxwAA +2 + +False +COsG4HSpZUe/Vic0aL5j4AAA +K/jI5ejWkEmd+RwmoOHzSgAA +4 +2ZL9sACt00qx0Cg3iKmTLQAA +MIT8/Gv+e0Ws6jjGmNmmRwAA +AqAynQlGr0a1papQOgqXLAAA +rOXKiozVPU6e9pH0bYSg9wAA + + +COsG4HSpZUe/Vic0aL5j4AAA +8v8IRJdlJUmbHIylKGey5wAA +4 +jIsNFDdsRUWTT/OvN3ztnwAA +SUFcnz8a9EyTdHbW/lUdiQAA +CCkLRFuVRk6SFqbFPXkadQAA +947HFL6RbESshkpOTCj6YgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +uyacuCS7AEOEyOJVoSre4AAA +oWDHE/AIyEqhL2zTdizC4AAA + + +uyacuCS7AEOEyOJVoSre4AAA +k6w1Bteav02GGDrC6cJmKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +ZbjLAPzqb0imjL9CBZqQ6wAA ++/rTqhVzAEanWKk5UAntOgAA +zTb+/Fnwd0CoyaRDml2Z2wAA +RTy3JBPgPE2M2q3nGOEYvwAA +2 + +False +eD6wP/fAO0qZXgTPDYw14gAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +wRmuK74HIUOvDrQoi+BSuAAA +6hCTfmWvn0yyP3giXUc9tgAA +5gpoE+R1G0iDKOkRu5zLPgAA +ccQzOf52xEi0amCF/8K9BgAA + + +eD6wP/fAO0qZXgTPDYw14gAA ++JrMCo45qEOWtcTsDjqTTgAA +4 ++OXDruHvSUSKNXOy2wGb3gAA +qE2GZ6s1ukyBLc88d/1nvgAA +Ej6+aNOXQEGZuM8hFdotdgAA +e13Bn2S91EWRco7/lFEK6QAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +zndTLn+VeUWCBso9iSlxIAAA +7We6jKhRo02CFGApUPu5qgAA +VWLLVa6rK0K9X2l9yy6DOgAA +Xc5ZA57kP0ml+tO/lPS33wAA +2 + +False +ijA0VzIZG0G7ohk808I7EAAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +GN/OGGMWgEaSB8JusgHu7AAA +oh/G+M1SwU6NDi3PJjxQ7AAA +ManByBkfuEa/QuAb9KyCegAA +KMXug6TF9kKKVD8hfLqKzgAA + + +ijA0VzIZG0G7ohk808I7EAAA +rxa+oNm2Kk2e9yVRZgZC4gAA +4 +7WIytDVyn0elYv9g0jIlFQAA +euqRVFPROUq61icLqYjqiAAA +pFN3VBz/gUegQqhdFPISVQAA +qS0GuIHmW0mGCwTQiKbaJQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +oYCpI+SVFkOQu/mdPxc9+wAA +az2lLUGRQUupbW9hQCNYSAAA +fTmol6tRDU6DqEmfzV7ghgAA +FO4VJAOJpUKdBPcB6bzb+AAA +2 + +False +tV4kKe/RSky6myfeSP18swAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +P2T82CWlhkeOIk7xG1KUrgAA +SN/k76NOskujX25BHIRKawAA +lcCkiyfNF0KupPJcTuWI7QAA +05j+Q/HW00uw8j4mIwIEswAA + + +tV4kKe/RSky6myfeSP18swAA +ozTLGGkik02HnJ667z5MBQAA +4 +gKhPIz5mO0eoPt/x5JSGAAAA +njDa0vrYDkm1DGrCHjymvgAA +KotcZ3zFRE2Em1BaxReehwAA +UCRIEOg5i0+H3+S0YsVRywAA + + + +launch-publish +tacoxPrx8kCKprVgJHnvqgAA +4 +PPr3wQqIsUGCabBRaWDJzgAA +djEhP9lNSUK8mnKeulkyPgAA +hCToqxtIk0qWtMLlSe0z8wAA +zD045480Pkmhr1WF0ULGdAAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +G7+qnUqDRkCl7KxPlw45aAAA +Lqdtm/Vix06mrQ7wczG1YwAA +227qZ5x4bkmZX296Jdp8hwAA +X+hRi98oq0mH2HPVYPg2tgAA +2 + +False +dK9I6bZRfUih3ErZpfx4hAAA +oWDHE/AIyEqhL2zTdizC4AAA +4 +USu5nDow40GMAnC3n0zdoAAA +ABjVTWJiuEGEhdtfxqN0TQAA +H+7aZ2vIPUmdty3JwrEuogAA +vCjAaFVyDE63i9p1Jt2SOgAA + + +dK9I6bZRfUih3ErZpfx4hAAA +rxa+oNm2Kk2e9yVRZgZC4gAA +4 +WOwADkmaF0Gyn65Y0rhPDAAA +pZXkD7qSDEmLVoipN2i44gAA +aXuHs3Koc0iND5nLqn7wbAAA +LheoZ8TVLECQvoj7m1PP0QAA + + + +task-manager +tacoxPrx8kCKprVgJHnvqgAA +4 +0zxf2/fiaECjGyhbRvdvKwAA +NgHnhun2cUyB5rcs/wB8gwAA ++vDknIqORUmbqQrKoJWQTAAA +SXqC2no5IkqvM/Sc2IexLQAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +qV/n64Gaa02UNoVye8cFkQAA +xkUywc1uKUOHql535nPlMgAA +OQp12fjZgEuEgGrczfPTDwAA +n1Fdt9CcnEqbWv7SXLf7xwAA +2 + +False +OeFvUQCLbkSUntfY8QQZjQAA +78O5f65/80OvpHK3AuBEIQAA +4 +RtC6tXmAOUaGZ2UBQ4l7MAAA +IgO8lC5yxUa1HdNIocz1zQAA +8ZlaZgm1uUSPeRt/pbshTAAA +6vaU8A5xoUSGrf6oRA5e3wAA + + +OeFvUQCLbkSUntfY8QQZjQAA +cH75vr0YhkuvV/fYij/FMgAA +4 +/n+fJ5dGJ0akY59zvY2SAQAA +SR69sArTiEKkYzbG8UNF3gAA +dy49LVIfCU6rTMb2Tw1YtwAA +nh07AMkdm0KkkjCUeiTU5gAA + + + +analysis +tacoxPrx8kCKprVgJHnvqgAA +4 ++20ew2cMdUe5jGz97OU79wAA +8SNn6Do/vk2SjHYY36SUiQAA +rSMRhJLXDUSq+9dS3sodwQAA +YuLOiO+5jk60EwVW5oveBQAA + + +design +tacoxPrx8kCKprVgJHnvqgAA +8 +UxkwPHCKZUOZB8abt9yLgQAA +Jh30Fj+sxUCDtvnsiCha3AAA +KlL5ohRGcU6EsMEKnjkoHQAA +vbtIlNyGZkSMrpr7bAuFPgAA +osrqahmcuUqmug8ogBw+JwAA +OQh1pUOuZ0qZn1StB933JgAA +HoVB+uqR9kSkJKLFudhvpQAA +znd3Gw6Wc0uT0DexMR166gAA +1 +UUjC686FYU6T/q1aKuDLkgAA + + +implement +tacoxPrx8kCKprVgJHnvqgAA + + +public +tacoxPrx8kCKprVgJHnvqgAA + + +list-external +tacoxPrx8kCKprVgJHnvqgAA +8 +ar/cmfoCE0OyMW57ay1ytwAA +sh+7dEH4LU2Lg/8CNJS0gQAA +EP52ASOIpkKf0ggG4AxB1AAA +5y40oWQyE0CBov7GZBhxKQAA +1BA+Xn0RUUm64eTCTOCRugAA +3Ceimlwjy0acJvsa1GxoBwAA +tYUtzmHef0ujkk6pYML00wAA +kc94znEDbE2QFP473g5b9QAA +4 +HdgD2FmAh06xyFDupk4vagAA +pxqjN0GODE69EvLg0dAl+AAA +vN04w+sn8kGRW/7MCPHqyAAA +K0nWpIYMbkyuYvBBAUwcaAAA + + +actor & action analysis +tacoxPrx8kCKprVgJHnvqgAA +8 +6iOG2zf6TEyGTIPJKas9rAAA +4uB0MbN3+0SYxOfF580zMAAA +3b21Z/iMs0au0myIZ4Z7OwAA +uw2YtpvMEUqC14Kimc8eCAAA +fdnXBAbHkUmPlMqC0iAwCAAA +tL32Ahv9FU65Qnsw8w+SEAAA +/elZXku6H0OwmLMGsCEUQwAA +UCL+mBaEH0SfVWfmTGP3pAAA +2 +ZKrxwL9D1EiytZ9M2QdpNAAA +IuqkqTOhTEuBUbn2uLNuqAAA + + +data-io-analysis +tacoxPrx8kCKprVgJHnvqgAA +8 +ZVZSHvdc90+uyCG9xQvFFwAA +bafEaCWS5kmZa7YDL4tt/wAA +usVme/vWz0SVfEPEfK9TYQAA +s/XioP1Y/UiGduhk/y1+vgAA +lD0x8R9zUU+Gr16SYaMDDAAA +Sucs8l4ei0y7QTbSmrmMQwAA +/G8jAuopsUmv6+KWFz1bEQAA +UI4PRuPYSUCQMhM25b6T/QAA +3 +iwDC0+jcHkWoYFMM+ST2BQAA +z475GIA9kECnM3EOwAHh6QAA +UtVAs5JBSkKc0jSVdLpypQAA + + +data-flow-diagram +tacoxPrx8kCKprVgJHnvqgAA + + +action-flow-diagram +tacoxPrx8kCKprVgJHnvqgAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +FPVj7um6IUGVTfTFIuWNJQAA +9ClYsIQN4ESsljoYy9AsGQAA +oE2t0LzdaUavFzZUAuBV9QAA +tRR+kP/uV0eCpww7mN13/QAA +P3WVydlyRkuwh778fQBIcgAA +v58zl0lFo0OthalTYGFTKQAA +8CY1bBdDxkaH1PcNb3ZGGQAA +o0UURrS8nkeLRNMFFRJEIwAA +2 + +False +NSCnR/cZlUa3fXcKMhA8sQAA +h9lhv0QFq0aFwcWza3gsDAAA +8 +jU0P61wvf0Sy2jgaGJASWAAA +etw0ktzUr0+/O4dDmvT3vQAA +MyjKgBMQxU2TbX49+Rc42QAA +VbiSotMd7EeaDvs0rvjocQAA +IaMKGZD9PkehJr5RNTkSuAAA +Qmp+r+VK8UGO3Il0AjKc5AAA ++KcOzTuJEEumW7XiX0Ad+gAA +R5sVjH9o1USufBZZZSNj+QAA + + +NSCnR/cZlUa3fXcKMhA8sQAA +kETY7OJYc0qg/QkJQX2LXQAA +8 +D9SHHlxBLEqXdBpMaZ9kFAAA +LJ4YEIvhRUyrGKotu/am4gAA +J/9G8Kg5VUmDIQejVTibIwAA +VhPiwKgSzk+08pWyuIXK5AAA +pc1C/Gssc0WTEJ9iA3sBfwAA +rrfF5kKwgUydDdMT+RYxWQAA +SYIv7T9MIUWW/8Kz5GVcDAAA +1DCRn/1rv0iPg5mNyTqoUgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +1w4wHAblgECqTDPtsEemngAA +hSySeZ9DC0SSAiGeMvNYsQAA +cjLydq9Qq0K5MLvIzC4ZzwAA +MTUlmgLqSk+EhiqgGzBkEgAA +s/o88wUJakujvT14Ov4UHwAA +vEWfDTINBEWTGOqxOvavoQAA +XRxA9coNmkyZUu6tdX06TwAA +yt5ClHoBukORHaNOqHHHeAAA +2 + +False +ubIfnYMMgEuGrguT+jcONAAA +h9lhv0QFq0aFwcWza3gsDAAA +8 +DDH1fzvZTkK9PCSBAo9DCAAA +Z31wKQv5ZkuWfbIiqiZBrAAA +os6IS6Yqb0+7B361C+X+bwAA +K+sZdSLIMkienNxNayD6cgAA +tbEQiUZMe0WYVJjXyskomAAA +WmLXQ63kSUm6XqUcy2B3CgAA ++8HfQ2so60ytd8QKTve/lgAA +yNKcQJzJXk6y3PRK2hMaSAAA + + +ubIfnYMMgEuGrguT+jcONAAA +XmSQJXVfo0qkbNCidOBOzwAA +8 +H2BXDDVNUUiLD4SQo3VDHwAA +Ae21XiE0qEupdm2so2ksSgAA +vqoRgYFlIUObG1V4IBIcPwAA +I6eIBiEaNUim4wptRirLyQAA +t4BKFTI2xEGAOUjZEfUgMAAA +I/neFMNDVECDqbPIqXzddgAA +LpYdX7mvBE+M0kSuJGODcwAA +jL6n6OBHr0OMtVccYz6J3AAA + + + +new-ideas-action +tacoxPrx8kCKprVgJHnvqgAA +12 +sFw3N+djIEOBwQg4t6R70wAA +W3a7WL0aFU20hih/wxO0bwAA +4muU6fXv5EiIdWEzNbniFwAA +PquWW3QJBEGNiYCf83kEewAA +iyiy7059g0u9oLbvhyWMJwAA +JxJkJSnVgE2VHO76ajV3FgAA +okmfJkeX3EGOTX0nQ+R5GwAA +dUC1F3J8T0iQxgFoqKP0JgAA +yubkqivm4UyQY4rz+UzVhwAA +cGEkiBjuH0eX70/v3LHhawAA +bxmyW15+1kSOe1pNkAHOdQAA +suojASD+g0C0ixTnOxLxJAAA +1 +eu/8Siwir02KNGkRDOEa9gAA + + +new-demond-action +tacoxPrx8kCKprVgJHnvqgAA +12 +hlEB9emSQ0yr5JtMXv8exgAA +FwaArb5Ga0aYUTqWNOixkwAA +HlL2+wrhT0ORfjlk79BMhwAA +x7hhnO/x50WCblTkyLQKgAAA +o5iA92FZHkuxkU8FJDrcDwAA +O04bxDhOnE2xAvO9lOu6RQAA +wqIyBZodNUmQUoL/nMEwlAAA +auNQYiGkC0qhE9Ksin5OhQAA +u0BNgriFLkW8D2ch2mkMLwAA +aNIoCx0Ry0S6WaUFcfdBUAAA +BjzerCL6GU6nFjHHHbtq0wAA +L+HE8roaqkW6x9pvbnkxRwAA +2 +gehfWFMIjEKeVzAcdHneqgAA +QZwwsltNj0eenKeiSJArvQAA + + +feature-analysis-task +tacoxPrx8kCKprVgJHnvqgAA +12 +pbFdS1YKskuJx2F5GYPsxwAA +zYACq9E1tEW8e+FvZoDOgQAA +kUFkbG09xU2F0FPldPOSOAAA +XhSXsGYa7EeHk8sf5VkWaAAA +7jqlLyDAzESQnbx/rHQ2dgAA +kLG9EfbVqk+GF6IpIFbp7gAA +JYczFEIka0iDSdsiGO5lpgAA +l726APnE3kOD8F+US6t3OgAA +8trqinRilUOT7pAQsxAfFQAA +P25uCvpbiUGQgV5bkXS0ZAAA +rzZ+dOLwtkGiZE2uKcXh7QAA +48x+iipvxkywCwxO3Jac9AAA +5 +irMBt7uWtEaxRopZEBcfwgAA +A/3hkPn0ukKjvmT5rHr/7QAA +NYZAYRfo+EqcnxFwEX16dAAA +tj9PxTnKWUOoKg0de6lHnQAA +apr06sAa1U2fZat0sCQPpQAA + + +trimple-catagory +tacoxPrx8kCKprVgJHnvqgAA +12 +r2txyI05mEG1QxI9jG/azgAA +IbbVyikZU0+AJeIlhnXJdgAA +f7+h0+yeYEiqquMG2Ha7wgAA +jZ3okYJ6AEaO6xaIq/M6fAAA +nLCQxDcq4kavFuzl40RaCAAA +APiwpHGo9EGbGEr540wNZQAA +aud/6OGNJkGwwm67Fp14AgAA +m2PPoWgKZki4iK1aoSvosgAA +RgVLcJzuWEyRcNWU2C2BWAAA +6CHFltMttkaUdOWgg3O4WwAA +nspClDUWi0a57ZqqCRTqwwAA +62IMpf0m1UCr8ziCGwq2YwAA +2 + +False +ZE6XGr3H4E+M1Lu1nRZ9BQAA +TMPdkgNID0u772le0sCmLgAA +12 +0JiEkFKmmUuDZogH7iBRrgAA +O9KRx3XtLkCvQ3wPo//NrQAA +oQbN8gPfP0O1X69kI97iZwAA +gLz7JlBfJkaKllUko0yHYgAA +Mcq2cOcmcUeltWDBm1twnAAA +0wUYZwLUBUSupqgI4y1w4gAA +WV2z0+WAdkiSo+swgUPt3AAA +UpuKAXdnPEO4PYn/71kcfgAA +c/y3IplZJkebjzv/7xxnHAAA +bbmn4SKp90OsX5ZdSsEy4gAA ++dIU5R1gqEa0zsJrG/dMNgAA +qe0P1m1ZVEajA/QvokOjBQAA + + +ZE6XGr3H4E+M1Lu1nRZ9BQAA +06qF2g1ff02RsBbBfLLo1gAA +12 +zwJIwa6zRU6NT12pG6ldmAAA +b5a7t3L8RkWGBByXZgWELwAA +o4FInn2nRUy0+squnhBaaQAA +OampBor9ZEusGPPwYeuHvQAA +8plRxWqvrka/0Wv9OEunPgAA +DVZT6uSkakKkSB+XFEYZ8gAA +jFhEJsskSEif+pDccs5GOAAA +dDniAV37SUmFB6dixacy8QAA +IAvETOSI2kSu0BISexLAPQAA +M5tY0EEVp0iw9ACt0C4eCwAA +yEFIey7D6EmPZ06g/0pOhgAA +C2Y1atnuK0a0Hm+1B20v7QAA + + + +trimple-catagory +tacoxPrx8kCKprVgJHnvqgAA +12 +9JFMShBAc0y7u6p4T7ocqwAA +BMb7HcVwtkuyXT6JdvC3xAAA +YRJ3JRRm30qX8Bm8fcufFgAA +2AuxrO4IBke7EBbcD6KjbAAA +7eeJrPLVyECeTW5tz3TPiQAA +z+JwqY6hmU2YsUYEDrO4FQAA +r61Ju1Op9EqdayjvTMk6uwAA +JJfK7Fg21UiMfmZIi3nvgQAA +6McqlEsI8ESaueIPBJuFZQAA +Bss9ojsAikC1HNaXai6SGQAA +aWErRSOs4kuGUEDLEJg11wAA +5d1dyb2fJUaMsd5Wy8IC9wAA +2 + +False +li4LwavBrE+pggONaW7QkwAA +Kh+ykp9GgU6PQXUx+CGLxgAA +12 +E/KBcTvORkybhPbj7PCZhgAA +1O2DroJjnEWYvz6+FVubtwAA +uUEz4BCUTEyz3GLP1b95YgAA +jgSNRtyAi0OwZSqJK4Fv4AAA +Tx5kfHdor0aPHgvEpdYdEwAA +DK/OVbW8j0O88TdU+gb2GgAA +bK49WNL54EiSD88DaGfy2AAA +Nlqa8zxkhEOJVcFbqx/lNwAA +VEZ/l/jzyEeAJflOJvcnRwAA +shQfPFK/3kqg25/Xtpfp9gAA +sKr8wtRNwU+gT9tWBD+zBwAA +dSW9mbndO02IVtmUb4rvnQAA + + +li4LwavBrE+pggONaW7QkwAA +06qF2g1ff02RsBbBfLLo1gAA +12 +FOjcSLTE3EmrGUF3rq57aQAA +MxmMoRWpqk6NlGYdxOQfHAAA +XlFBJXt59kymFd9cnNWfWgAA +BLWUtAOsR0e764vPctr7mAAA +3kBb29upD0qqiewXl4yjVwAA +Y2XhEg2ZWEa6lXp9nqtw9QAA +EoWflUy2l02AqxPBKRABtAAA +ppVcGE5q4kmPMFnVzEJwhgAA +Es4KN5mXDEWWO/bntEO29wAA +5DRiCUSRcEydrAECeEaBzAAA +QZ0oroK+AU2JIRZ8EdW4UAAA +6mT/ShY9gUG/kK6lJla3jQAA + + + +generate data-dict +tacoxPrx8kCKprVgJHnvqgAA +8 +RvaeyZG/PUeTpXEVgO7PywAA +O21u+hfXDku6m5GsWPIKYgAA +CFtG17Si+0qYjRDSXLSGQgAA +fjSHlNsETE6w6BSvmFbdygAA +dun4oB1o7E2GPmOE4gcj2AAA +76SBS3RX/EiEq8ITD1msEwAA +3AscrpCrjkGGa2g6YOynTAAA +RQx6gozO6U2i9e2xDumgkAAA +2 +/vsJW8WzsU++6Lul86APuQAA +ApKyMGFOCkStssh0gwBpKAAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +WpDBYAgV7ECwN5q2IG0BWwAA +7rIZbRHbBkK4a7w0rBYU3gAA +q/OnjSf81ECiOCiUPrRD8gAA +RUaCGSwd/EOt4x3vVZ61FgAA +osRUS6INl0m9Fos+HK5ZhgAA +Ni9GG8rC2U+WOwOH6hpjvQAA +qhJIY6DI90KYPr7FiN0WowAA ++IdKjqWf+U2tP5ahYB93wgAA +2 + +False +dxugzP0ZBEOdRYlU9N5SDAAA +kETY7OJYc0qg/QkJQX2LXQAA +8 +C4CW3kag50+/7JDRv/6ksQAA +3RyfQVGOeECDb+G4M1dI5AAA +AKTiOf8XNU+ZeP8H/sww1QAA +AIxnJXRNfkKn+hLzgPHnCAAA +CPhIMuHEvUidckSkXTkmoQAA +7+KwpdmJz065aoKo4OrMDwAA +HEGX4XyfqkSVZryUoF2M2gAA +nfgtb7VVvk2Fn8MugHPRywAA + + +dxugzP0ZBEOdRYlU9N5SDAAA +c4KyOid86k6Bzi+unTPcfAAA +8 +LkVqtD1DukGhkeIQL+7y0wAA +XbyXWUa96kaA+O6KmLTd5QAA +Pg8ABkt4iku58sQ1D5ZJ3gAA +P/SLxRpfCUeLWjfOe+I6kgAA +C0MPxSwCL0y7z+mSbW3smwAA +YDHUyusmUUesQOoYwCbNnQAA +UdRBun9lFUOYT+NAlRFeSwAA +Zf3oMXLA4EK7HdlGdccVKQAA + + + +data-entity-analysis +tacoxPrx8kCKprVgJHnvqgAA +8 +3zDgV/Xi/0+DECy5hTfn6AAA +7MUgaMAgqUiX3AtwO9eCeAAA +n4fUp6VAdkqOet3jRKvJxwAA +k2y0V3BTMEK9HghOYUIgIQAA +VJbVUyCxs0u+Lgy9ekB9lQAA +tIn7qsZLLUaarigzNkPpaQAA +q8fBOBxBPk+cb8AIplBN3QAA +ZM1d8Q0QDEqUmVRsk+jV8gAA +1 +FR6YZrNJHkeksGzXICrvngAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +d1SzxXFeMUq9ZDqrQYaaJQAA +no7Q6S0jF0qn6b74ZkjszAAA +eoGlpcWkrkeigDwGMKxRJwAA +JghCAAhzrEmLlPfMRJaFLAAA +uLKrd9AKWE2k+0Hro7u6eQAA +TrUf9wr2q0m9vdTszmldcwAA +CAdOEA8zXkWG78r1tV9tvQAA +XoBi3j6pj0eUzpoE6SSRyQAA +2 + +False +TfaTWdzXx0eF98RMZF5U/AAA +c4KyOid86k6Bzi+unTPcfAAA +8 +OPO3MD+GLk2sKsCAn9g3RgAA +2wu7JXIoFkCQqKwPeaRSwAAA +CqiC2IdTyECHs45xZep4+QAA +wz3jELMGt0abXQAhk5/BXgAA +69AT526weUSQX0AhgzUL4gAA +i9w0K2dLZEegGFJoXuZTAgAA +MV/N+sBKDkGqsyw6Ql2a4AAA +OysuMXmZgkKRAzPVCnmGvAAA + + +TfaTWdzXx0eF98RMZF5U/AAA +8E86OOxmt0eTCKMQNrubWAAA +8 +Rz9PKJAggEWsSFtV8Q3OHQAA +uIpCimBeOkensj/KYTA4dgAA +S6QqNwG3OU+PU+KEcOuSiwAA +5N76yKfHxki0E/ohnKcC7gAA +WDm/gIWPZEODM32fUbeQLwAA +62KlpqlkX025GPxjt5jeAgAA +/vrk/iCUqEmebDYHOKVcMAAA +EeL2HbB9VEeWcc+9AXvHOwAA + + + +module-design-task +tacoxPrx8kCKprVgJHnvqgAA +12 +s/iW5IUcqEOvkUCPbURcvAAA +n7Wi4yj3J0mP8qQHTFyZ6QAA +sUWdqigs40qlwo595TWrgQAA +NByCAJBkO0yxwHvl4JF4JgAA +/UwMH6vM3kKzkuL76KD36AAA +x8QSHcKys0u8cfkxdnyffgAA +fACfPJVnbEuY/XYoLHkrWwAA +puU2uGH4uUmFyD3iemCffwAA +BghWDCz5OkKF8K6lTv+jGQAA +u0k4V1QdOke02jJmSY/ZEwAA +0tfqL6KwI06BCHULWyD4bQAA +YbFQlPPkskK0jgdgCNykoQAA +6 +1Y6QXQ3IbUKN3Aa7VuMr4gAA +zmuhwJCP20GxOG2Xkj+EQwAA +6MJU+jYHa0mx8HaVM4S+8QAA +DF7gLd86sEO0pjZnITQi5QAA +sYEr8xJzY0uFxXGAJQj62QAA +5rkAHpBOt0OZxpkOhYsRfQAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +UZOe5+gzxUK6uYSuhvLe7gAA +sJKcVAmUS0yXXy8qmLULKwAA +5kqYjmgZKE2N0q6FUG6tRAAA +IvDtzBpc+kGUu1MBFIIBIAAA +TT2n59wcFEWjjjI3sTCzTgAA +bfDfeVO8jk68tvUUIHRMOAAA +Wmnz9SIV5kyejhVVCn5CKgAA +zYwa2WPUy0mvZG0zbxLCbQAA +2 + +False +BNlaobUxlkaxprXRzDMgIwAA +kETY7OJYc0qg/QkJQX2LXQAA +8 +0SedcRZhRU6EHGfFmfMNZQAA +cjEDpAqJpUGJrnqSbhV3PwAA +ca5AEw4qL0uQhG+nfp/DcAAA +iG1p6EpH/UG7egUDUcWMAQAA +lfjq3XhKn0G8CDwzbGNwqAAA +jHLp+F3hhkWsf3OerYCqfQAA +JN1SvoPFc0GpXxS2lAzKqAAA +TXwavc+6rEiRa5clDy5NHAAA + + +BNlaobUxlkaxprXRzDMgIwAA +tnTkvoZxVkmVjIgd8K6VcwAA +8 +HDzKZWrd+kWyG+ZoXL2xaQAA +nByWoGhft06Q9EGhwBj7VQAA +St8KV4XKrU6+frs38fgK6gAA +WCZwqYsrC0mSL0K3dekBXQAA +g3VwcZkMz0me1WfEuaG/xgAA +vlK4naBV4UKSVNOErL9ytQAA +USMEgjft6EmwvN/hTXMM7gAA +U3GWx91z10uqa0+RLMXoewAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +f85cHGowA0GlkeCEZn6NKwAA +Pw9U76T200SKacFK/Fn7sAAA +n74kabJjqUiILIrL5vBZwwAA +0qH69FZc7EKvdojSPXMjiQAA +hLn65azACU6daYAVZ0j7CgAA +BikNtAupjUScT790usgi0gAA +RstLIONy6kGorgVe2Uqi4gAA +jcNiqYhbH06jiCc33VQDNQAA +2 + +False +t3VIg1cXJEmsTGdIYQFIcwAA +XmSQJXVfo0qkbNCidOBOzwAA +8 +7czXXL2ln0q8vqBno9oLaAAA +ipRqDjZPTEelcuD3REQYGAAA +5q4zooGEi0KidnNJpYCbyAAA +TGA79NBrL0alouW9618sMwAA +Ps4bHxmtJky2Qk8nDc05YwAA +rjNAWvp/T0OxL8Bu9JJPCgAA +e+wMe/1RAUSqqf2Zcn6XDgAA +At2iUXomGEO79uliyY9zdwAA + + +t3VIg1cXJEmsTGdIYQFIcwAA +tnTkvoZxVkmVjIgd8K6VcwAA +8 +hix5sIQ94UG9xQQblrGFPAAA +Tbq04QMjMUGQ4BbLO7+V0AAA +92hJ/PtaoUqMPCxPtw5uLQAA +YyKeAt5nZ02OYKZevuihZQAA +PUnmliyfv0qGFzpdLEoEYwAA +b1vyJY69L0qigfqsHdckzgAA +DOgbOMvLUUG6s6fNR3Iq9AAA +y4H2PvsUDka98uLH4SMgVQAA + + + +code-gen +tacoxPrx8kCKprVgJHnvqgAA + + +soft-demond +tacoxPrx8kCKprVgJHnvqgAA +4 +XmyUwnJKX02C4THv/GbClAAA +ntKdZXdNWkaeImBRCzTsNQAA +kax7LvKiKk2pc72H3cf9hAAA +Yf0qt5KoJUaLlRYdZcS+FgAA +1 +vq1zAfKQxUWnGiKbBTmYJwAA + + +analysis-task +tacoxPrx8kCKprVgJHnvqgAA +12 +9ECchidjm0Oyi96zrE/MCgAA +qyHyd0r1GEWFF8dxNKhu9QAA +/HtDJeaJ2EisBDirjMeQewAA +VMlY1o05V0i+2N9qs751BAAA +eow26LjeFU6GRSdSgeT85AAA +uFB3UbYhAkC0E6G309qnnQAA +xb/bV5qP9kWSDd7+sUpGJQAA +96UTe3kUFkuj2ViKB3jrFgAA +X0LJqLv76E+ZXpuLxFOtvwAA +G7+PoKG3m0am95da3OwEyAAA +6GYFGGnZI0uHnyHtPQd4uQAA +HnaVk+Fe9UGlf8AM/giaFQAA +2 +0CpaRkRUf0+bAPOkrSqRSgAA +pOTqH/7r40O4aKzqIuqcswAA + + +pkg-dest category +tacoxPrx8kCKprVgJHnvqgAA +8 +RDlS3XZVdUCC/tRmDGvFywAA +yxzVmyELk0mT4um+FwipdgAA +S+TygaKYk0uAbwsfbYN96AAA +hqaktbVQnUCUYBQCSEFGJAAA +9pbwNzO7hUyC11S5a9Hn1gAA +XA+iFLjZMkGzUwnZ7CSZagAA +Mx39kg30k0Wku2RoM1yA7QAA +eBQADWbmxkuSBAnzjH3FjwAA +1 +8/RYS0HDWka/NEMRgtUecgAA + + +layer-design +tacoxPrx8kCKprVgJHnvqgAA +12 +iVh3QgkpmkKlqxcSGYTCIQAA +GoBih2tm1kaBir5nDWZudQAA +ZDBgyQA8cEGtR3Px/wUD/wAA +7+HFaANoQkiVifwMlmuntwAA +cnN0HexzX0WKGgNpVfpw2gAA +k2nvWTKeBE6d6Ay9xGtHjQAA +e7eqCRCXH0SWTE8rd+4h1AAA +iXj2sP0tHU6aLRRVxEieSQAA +gwBYAnNeEk2uCxTsZUvhjAAA +J1M/HetPEkSO5Fv5/0LfigAA +33xUuD6h9kuXOZTkWh9pdgAA +1Ozamn5AAEaxseq6qsaHxgAA +4 +FVDBPeq7mEKlp1go7V1hsgAA +iUFGIr8VC0SljnWHghKcFAAA +L2yiBfWQi0CXNccTHoAyQQAA +Emmft/ih+ESwNLfwOBP+ogAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +PPxNPcf4O0eyQOM/EGPOkwAA +k1jS3/OqMUqf4D58ppccVQAA +1h5gznPDFEizRfu4K9GfkQAA +WzJn/PWv0EWKhoaAZJqYBAAA +oMQw+nxcQEqK73wSmEOFOgAA +md4ITarkD0C6tNE2+WjNBgAA +18jESLWPRkO+Wb1w/V0g0AAA +FZVXwLSUrEeJ/KAn+/gCFQAA +2 + +False +xMoCRZ0FD0mJscRNN+UpywAA +tnTkvoZxVkmVjIgd8K6VcwAA +8 +teOONX/vn0OFHLcfp91+fwAA +Ys/C7kHTkkeJlFZEXuZ7CAAA +pIL5ZYFg5EmhEkN2XAEWxAAA +5z16Fa1ESk6c/kBXAOA5PgAA +6ssAIonIkU6drI87qw239QAA +EzTRgY/3FU+9+QXX23lk+QAA +JQZp7nqtcEal9RLMKf2hrgAA +to2fWcgN7UivUOpxIDyx9wAA + + +xMoCRZ0FD0mJscRNN+UpywAA +a7yZcyAyl02YNl0/FQziyQAA +8 +GrDwi0bWFE+6q2G+DxTM7gAA +b59QNJCEA0OTqfWZZZ00oAAA +avzZeQ4gZkCmBihm3WuNZgAA +liyiZqIWCkSVU1TZsb0dPQAA +wHvLvs5Y5EuhN+zZWiBaawAA +HiTxVySzUkmVAxzB7f9hKwAA +ADiQIjRGYkm3eT6HLSERVAAA +brEbvKvIMU6JZZ26T+nJZgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +aKlp5X/0Sk6upQusuXcE7wAA +YrKpRBjqbUOv/BEau+9IvAAA +qUUpYr8AA0+91K8cYmxfZQAA +HRqlh/Pfz06rxhWK8YIXNAAA +2 + +False +BZR3CshDZEOw2M912JpeeQAA +mx6wTw6+KEuGtAr0iRUXJwAA +4 +vDlhSKsYj0SiclZtg1zWMgAA +eJB4z6oLJku5RUGcRVnuJgAA +zRiFMhdhhkCKpi15xt2PUgAA +GdG/AQhxnkCG/OHU5GRwUQAA + + +BZR3CshDZEOw2M912JpeeQAA +h9lhv0QFq0aFwcWza3gsDAAA +4 ++usbllKSsk63D2j5+09vnQAA +EyiLt2MkxEmZbpCQZ3BiAgAA +y2Y3A+hwA0yH03L0ahMfqQAA +L7KAi7ah6UK+5IiKOQ1WRwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +510d+QiLBUaVuLRPUEL9qQAA +kIh9KIhRZUuelTWJW4n/HgAA +aEHcsGiJ/U6d4dKbIEsbLAAA +FapXsrPO1EeFWmBfEHsg7gAA +2 + +False +/FmqeTd2akSH7n3I8hA3mQAA +7FwnjSWdM0KKXAN3V8oQMAAA +4 +EXw/pqknA0Kd0b8z6qWv6AAA +e0tXVecyVUi+17715ZUmbAAA +XlIPivxjD0eqEer53H9//gAA +Ofhcz8psBU2RJnfRWrgU+AAA + + +/FmqeTd2akSH7n3I8hA3mQAA +Kh+ykp9GgU6PQXUx+CGLxgAA +4 +J0WU5HBiuk2zrF6bP1GMdwAA +j77fLGv3w0OyHO0m9cpaywAA +DgSs2SHsGEiUrrqVFCobLQAA +2m1lI/IudEKbqYK5eGkLHgAA + + + +src-pkg-create +tacoxPrx8kCKprVgJHnvqgAA +8 +mCnmzxWG6kWi9OPK25z8CgAA +vHIslL8mHEG7AZUKpbASQgAA +EBCxIVC9fUOI+5JDHb+LtgAA +L/HbzZyqtE+XtNHUSoPfPAAA +g9FXZVEqkEeDovQh5ld2zgAA +qw6KSgAtDUeOGiUtVSgfPwAA +IAGZ65A030uJKQsfl5d4hAAA +TQzPqjv61EO5sWqxsv5l5QAA +2 +rO/Oarhbpk6wEn45hIpPfAAA +La7Sdx9zEUWWIkxIncjJuAAA + + +RAD-demo +tacoxPrx8kCKprVgJHnvqgAA +8 +PUHktwo1XEONvjakWKxjjgAA +qv+NuW1txkSwDGqRM2sVVgAA +ZMCMz/XbAkebr+z1iFakUQAA +rdXuZl0AnUu5bUtQ1R+mcQAA +jJnr+ewJmkiXbJ8FW5RHwQAA +gqbWU6zyIEKT7BJEgeEKwgAA +25wBG/AA/EmUwngaHeRreAAA +FtkLwuPA/EaAPtwS1hmobQAA +3 +b75cgmrZUEiaHJZyDm8qXAAA +wHTgM9Z8VUmrcZGO/o0jJgAA +7Yo61DFsNUaIwp+0+TNjXwAA + + +design-to-code +tacoxPrx8kCKprVgJHnvqgAA +8 +GaKv5RiKr0yqd1YQfpBS6QAA +c8pfaqnHTUWk4Xz+BwDOiQAA +nizmT/+xhUioIp9m6FDdFQAA +M8yQafKDFE2wDMT5pStIYQAA +XsyNCerqHEuJZ3n6KxffswAA +LPtuazSta0OzNyQ9ZXeN8wAA +W2/FwjRBmU+aJQIqciy14wAA +W+5m8PECWU6GMRs8bhfjMwAA +2 +YXudH8Doi0+zzc1qPMjDNAAA +BOzCR9HOxU+q1mRime4kPgAA + + +unit-coding +tacoxPrx8kCKprVgJHnvqgAA +8 +Ji7GcpOn/E2KIxghPULMgwAA +Ajldi01MC0e0b7U0X+hYIgAA +2weBpxVnqUmWEHvnxDKFmQAA +Go+WF+6klUqANH5bP0R0AgAA +cXkc4ROKfkK2AEQ27ILD7AAA +G06Bcl1PFki+yEQJl+DDygAA +BacBkZe6ikOp5mhmJa2nlwAA +0AvdzElZo0irXbBhq8MV1AAA +2 +nnIS6vjqXkqw2mw9rhuzugAA +GPR477SH0U2rZy9DRg9MzAAA + + +unit-testing +tacoxPrx8kCKprVgJHnvqgAA +8 +0HXL2vLmwU+NgNkl6zVkQAAA +IvP3jaLlBUqCVYhTQNMWKAAA +Yn+UYxYUkEKAY3Glng05RwAA +KS5hUG2YU0Ozn8Gc/u0C6AAA +udnYsolK4EGZ5Tqfu1inggAA +UMgdqkl1sUysMrcoUTrVVwAA +vCCvyT9WBUGugbCVunkTNQAA +o3n8H2G9wUeFUWZ221n2TAAA +3 +g0Sss8qL1USpNMhJiejoNQAA +akgagoM7O0WP1rFMWH/IzgAA +OPxtPn1oKkaU2Qqr5fDcUwAA + + +integrate-testing +tacoxPrx8kCKprVgJHnvqgAA +8 +lSkarANt7EiYF5x5MQ7+qgAA +eH7cSqHzM06eWri06Bz8UAAA +0IgroACfLEKJ1tcXHw17PgAA +LJcQqwjK3UiQPKY+TkBKbwAA +kVd1VyDwJEWJDwZbvH1q6wAA +Unl2nXQhZk291xCVwjdJNgAA +/Cb6h3yeUEiDvfXk44ztzAAA +S69h6PuNhEOikjMwKUnPAwAA +2 +Fb68OZ19C0WB4BjQurmBRwAA +BmvYAIFdPEKrfzWwQhihCAAA + + +testing +tacoxPrx8kCKprVgJHnvqgAA +12 +hhCDRIRYnU+Qwbyyoec6WwAA +LxeJT8NHO0+lD0/d7KGSQQAA +2RPT+xZTsUeyQTt3cLgQaQAA +aTjSnapBbkm/m3CcTts4eAAA +kZAXDcSScUSa3zPofC/wwAAA +A8ZV/Kqj30iWrIPk6HYOEQAA +yXUYr4lyGUCtn8eyKakSYwAA +jnjaBfSZbU+G24TMM6jQJgAA +qudITNuevEOUiPdD67icGQAA +pIcjCSqCp0u0bE+JXiLXYwAA +jAH0o8IBf0e+UE01jheoowAA +awqqy2Oc8ESXvFOT3vBCYwAA +2 +WHhyhUoWo0iDDhj6FaqW/gAA +1eC8b7wYzU6Y7xZwvUG1yQAA + + +doc-tutorial-web +tacoxPrx8kCKprVgJHnvqgAA +12 +SJxSR34gTkGLBFrgEQoGBwAA +gazS/rMWWU2cuASRb6PWXgAA +JJAGKyUInU2dRtE+qC+f5wAA +T7n1RS6MyUKHQFHnbELd4QAA +IygCYEX6+Uu+11eoseJSngAA +TCGlYZgKEEmJHQ/sWrYZWwAA +zeNRwcBsxUSrLnYk/ihjLQAA +6V+fmC9BbkeqmKkaO53PigAA +ugI2euwM3Ey7T7DNJ++xmgAA +/jxr0s4HuE2Plztsq3ArPAAA +tsg+NqwwBkGd9rNrIIq6BwAA +8c8SA3tUmket5UPwt8V1UwAA +2 +PfXDwrF2QEKVag/W5+FPYAAA +bDyGtYJmuUiVC+pPkc7oHgAA + + +version-pkg +tacoxPrx8kCKprVgJHnvqgAA +12 +wTzRmZpNA0CytlcwOuyUMQAA +7n+64jk+fUibN2OwbrzKEgAA +K2UfbyVtjEqINckDan+MFwAA +LtqIKvhMKE2+MEY2TQGkowAA +cr3AMb7W2EWA6biraBdVIQAA +9kzSurKehUa5ijBcVIpSNgAA +6rngOocODE2STH52F9LPDQAA +y5wFK/chLkurLsrcepDVQAAA +0JMCaRFeCk+HcMqp5TyNyAAA +JfPAxs20JUyEIMe2hcvp6QAA +bSsQwYPoxkueKjR2EOojGwAA +1oYOAgKGHUm8dAsMba1dwQAA +2 +W+X0z/vQIUO+tUzMI7hv5AAA +mwO8gf6vqUOl745za4HJ8wAA + + +pkg-repo-sync +tacoxPrx8kCKprVgJHnvqgAA +8 +sAS2iGQLE0GVexawSaeD0AAA +/WLV0sEBRkO9qHVG8A4ZogAA +0a+6/xINhkCgV02hVYaeuQAA +8QGFMJJltkuRXkksGVdKqwAA +VXT22UgSZE6QUG18w3YrRQAA +w9bt8imE3UuRd49OAK8iuAAA +IrOh8uJuXkayIar3FXHiuAAA +JoTu8087cECdlb4taCTq/AAA +2 +bvYo1TGY6U2Io35TQ/yATAAA +7JwpGqJmgku60xKurQDyPwAA + + +download-build +tacoxPrx8kCKprVgJHnvqgAA +8 +IIt4VBS2JkOc0GS4zIsSDAAA +s4eAGaFkf0GNj99lI//gWQAA +Ve2Lk9KcQkiqWzdMRgwYIAAA +6VVbqmmtlUWUEgP5GSFFLQAA +vblLAfzXRUOgCjpCebaQyAAA +6tLstOmIkEabOr0ZjGnl9wAA +uD0opCN/bUioOWfKcTYo3QAA +TDhxh2ymqkG+UIDWdQ4O/gAA +2 +LL86l17PZku+YBsr/fUklwAA +UYbXc0CahESM869EpDq6lwAA + + +loopbak-testing +tacoxPrx8kCKprVgJHnvqgAA +8 +e0Tnr7u8AE+La5gTMkR+KwAA +pXJ8yh72jEiZ8IFi5raIZAAA +aSm3kANR9UKC0kqSlISpFwAA +MENiA1QHdkeUvLAzEz9kkQAA +obfQS5n3b0uAe1Y1fNtQ1gAA +QrYU2VR3F06JCrxaoEHkswAA +XuKjI1kKhUmIsFRie8FoiQAA +xvC6yrGOhU+0Bh9pjWjR2wAA +2 +P+S209BDDkSnrN4WPl8+WAAA +WMjnuHQF3kiQvKAfM+S81wAA + + +publish-task +tacoxPrx8kCKprVgJHnvqgAA +12 +GNt2i16Jv0er8A8pORMwcAAA +yzDihPA+/k26KU657GbvEgAA +AbO8F6w1VE2FP2PujMK2PgAA +hmBNRbsHt0qM3SlsJcQsrwAA +M4HlmVZXi0yRAE9UMU0zRgAA +NuoNLcCPVEy0Sl9PBnsvdgAA +vji5FSPdD0uoJCI3ApFo+gAA +RhJ7yKi3GkinYtjrGs0fZAAA +b4fOXlO640eOSeo31HjDiQAA ++ev3GI66DUKXLiSgMwFP0gAA +MCTGUgm7hkmTjo5wQuXT2wAA +DV6msO+P+0yBStbbcFea1QAA +1 +jTxlFtrXok2VlE3EA+IAugAA +2 +2J0+TPdjaECdzYN0YQ2guQAA +m+4bIFntFkmXMzdv2SUAzQAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +Pkm/LUuEZU2sscqG4XMdwQAA +RfiAlLFylUOvxIT3HNjRLAAA +X97pa4VNfkKiMSEp0APWXQAA +jibAwPsQH0miEfHQobVeMQAA +J7fs9nguMkCx0sN3/itqlQAA +A02eHxtACEuJopeiYV8tFAAA +stmkz8TtAkmK+IHjUC1TrgAA +A8s/mlVafE6S32TvtubF9AAA +2 + +False +YcGgDGXOZ06J+TZOxU72agAA +kM7+GQ5RuEmygAJdSluSjQAA +8 +SJagtU1r1EGpeC+GVrzmnwAA +yMYrBPv3JkqFc4pBLZSqXAAA +w/r659TDDk2AKnLYAKyZRwAA +d9Hi+WZ7hE+Zcc/Mg0rOnQAA +GPPcvU2gT0S/DtfSki9PyQAA +rjGKT+HBW0SrGHCxt14YRgAA +ev0VerKdWUeYBJVkteamGQAA +FnpNWRF/sUqHyIiqwG6HZQAA + + +YcGgDGXOZ06J+TZOxU72agAA +ofqv4KD9ukybRvF//Fek/AAA +8 +//dfa+a3DUOk/JFd2Qg1wQAA +82YAZoYhJ0iEsq3g0y46DQAA +r0+FEls86EiJnMmVAY2frQAA +R4pWtVfhOUu2zR4GTA8KvQAA +moNTePrjx0G5wipybEFNXgAA +p89w54Wr5EipR3+Mc3dcAwAA +hsFdjFPNRUGY1dTFSWccugAA +Py45JMqK80i2ym9oab56kQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +VFeTKuaRGkaKxga8eylyYgAA +EEqzQY0eXEaiToVUiEiBywAA +n+1lHS47vkSPW6TLQogepAAA +WbKJQLdI5UqcM66j2W6W4AAA +2 + +False +8kJkpVqo5kC/wdE3wXcwIAAA +KmQBouG6c0yb16gPnUnBtQAA +4 +FSyt3Jcfe0WqyePjM2GzQwAA +UBR3QgyjKEahZS2MwTnRwQAA +7GvYaVJHlkqX9dZW0eJH+wAA +pkjx8DJiuUSiShtYkdHa+AAA + + +8kJkpVqo5kC/wdE3wXcwIAAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +2AzXF0RAVUOZPs1N2GiP9gAA +qUcTAtahPkyTA/B2RX5HhgAA +lHaP8TUSgUijBnXTHvKzCgAA +cMgK0PZW9kOVBYxhsWu1JQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +kdpCRdOBgkeS7e1zmaIiNgAA +LacDIW8TZUyV6H66XI2hAgAA +ZxB/vF47I06QY3VhmgMg5gAA +6QWoT3qEu0OWAYbwv6pCNQAA +9ClMv5qBYk+xGqhG/8fDJQAA +4BN+cbNZ2kyf9+0hv/APywAA +qGLCHUQ8gEC1AWJA/ohqlgAA +AG9jAIkxgkikZAPXh9fwtgAA +2 + +False +k48n8C/dEECUhVTIv9BoGQAA +CLf6+wSJ/U+4iSwM7QoY3wAA +8 +32LynD2PNUS+zmKAfgM65wAA +HbVkzqmSZEuh6+oH7iBo3QAA ++jjHibKnRE6F94xoLDr+sAAA +6Fs//drdYEK/Osv78JnO4wAA +C91i5HF5xE2XUOVZyfLf7QAA +WkTB+22klUuDtxaVUjyb8gAA +BXPs7l2boU6n6hkCKN+HBwAA +VTukdeFoqESJY44bna0TMwAA + + +k48n8C/dEECUhVTIv9BoGQAA +CBkE9JDrJU21ybYWNP2cCgAA +8 +Sjbwduw+yUy6YKwMJRDn9QAA +RCwYqywTKUyWHLN2p3k73wAA +i7WgcsxLGkW9jueuILf7hAAA +ukqpM2qDDkibbdj/IWzVkgAA +48lG3YT+6kWSp+o5ZeXBoAAA +wNfrc/LQmUaoVtseaMproAAA +OWk1nrPBb0axfmYeKsjtfAAA +8YDAKWlN0EOkbZr6QIRbogAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +bFWnUyz3XU6PUyO8klcYtwAA +znOhkDQI7UW1LCvNppPz0gAA +OyAECyVdIUy81hOLRTjNZQAA ++MRomIMRK0ibtmFnRIyulwAA +y6Oz2IKPREO+ayJvu0bgbAAA +HIot0WFTFUGmrT/d7i1FQAAA +IkJgV/YDH0asfKCc6kYdKwAA +VDJ1jv/imkqltbvjuDa/PAAA +2 + +False +euFZ2oXh1UyoeBpwCRLyDQAA +gJ7o4uiAMEqSPUL3dadz2wAA +8 +bRj+Z0B+pkmSHphrP9c82QAA +VZOZlBxYK0mQpScnNl+VrwAA +0VRSk03Q8kW6EUFpKXHrPgAA +6JKgI/q1C0SqiEyZiJanhQAA +C0N4TLgCl0CNoLW4dogDfQAA +ht3SGjyEfEeyOWe3Z4s3/gAA +DxQR7FaFFUu3IIS8RDMZtgAA +zDVl/QeveEG/USqn/02KJwAA + + +euFZ2oXh1UyoeBpwCRLyDQAA +wftqTlAvI0+cR9j69saRNQAA +8 +YKdwlOqxbUmcHwlEZGbbAAAA +Z4kmJUO+B0e6H3WfTULQhgAA +QeMWYpqpmk214x8wWzYjvQAA +6nr3jdfiCEudsLpG1r9fYAAA +UYI0q7BmVE2BDBAnBvN8KwAA +zjR4X1GXdkOSwV9Jg7IUxAAA +7qOJ9rZH7E+Cw9O4m87FAAAA +i9M+gCwOx0uSBI5us8ZeggAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +4oPnfAFHhE6/ISoA/+aS8wAA +2rIgenhnpkabtwRUsoBPIQAA +8dK5J0xvHUi45I/ldzxTjAAA +CFaHNx0wXE2oEMC260K6ewAA +vr5dJIVOv0i4095jxhQgLQAA +xjRSn0jCck6297mpxLiSeQAA +0fDmWGdYC0umYmtNhgRTlQAA +JC2ySJ+8l0OmPisGKqbC7gAA +2 + +False +h7KFG98rIEKQY4C1dOWmFQAA +wftqTlAvI0+cR9j69saRNQAA +8 +amCS86yQokmBw9iE5Em5XAAA +wLpk6edW402MJiWMLPFs4QAA +GjC1B9dpx0WVHy9Ch5p7XgAA +2a1E+GT1OUudOpzLmExIlwAA +uRUuJjzOSUi3zedG02xZOAAA +coB6KzFb7kGcscLs3tUsDQAA +UogwSIEaqEynqg28c7LArgAA +Y+iHdmVp90WAIcO2JV4EpQAA + + +h7KFG98rIEKQY4C1dOWmFQAA +qlZGCifQOEyQyqBzIH1x/AAA +8 +4YWPMPPS3Ee4eGBBulWf4wAA +x971qljypk2Mxs4EESNUlQAA +vDw4VTS7xE+ALnQIi+LghwAA +yLxma2tYy0WdKKGTatwHtgAA +bsnO07b3aUKAOHjtBiOKqAAA +C6FnR8gV8E+ge8Anc8s1MAAA +HEh6j+pSFU6d+mygI7VmLAAA +JNHLRwWRh0yxzb73OU3iHwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +ApVaIJ8p+UuKYOnmucWR0QAA +j1P+mulSiUilwp5iVIU6JQAA +VA6gJS7wx0OId1Ym7CBCtQAA +nCUUpsop0EKoN/1sGtyMTQAA +2 + +False +GTroIE/UlEq3H/lwjMvR8wAA +qlZGCifQOEyQyqBzIH1x/AAA +4 +EV6LFWRMUEGUkIR0PQdmYAAA +ekEO6fRpHUu1agfvfFotVAAA +usF7ceVB0k6ToFDOiEy/xwAA +vPK9/RbxDUCkokkIG+02xgAA + + +GTroIE/UlEq3H/lwjMvR8wAA +aUVRiLFY4USAN9h1PY1/vAAA +4 +BlqB20QFNUic8w2EL1Y3YwAA +OUPVHH84SkiSpock8Zk5AQAA +aT8M/BevNUaYUuk1vcfW2gAA +4dMobckqEEyYi5I9LP+iEQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +12 +ELSMvyV3sU6uKnuwUH2DqQAA +672pY5ZNT0q2iAq0JstQzwAA +deVrWv05d0WlEjXfEZMNVQAA +aiSv5GtVZUmblrWnG0OWKgAA +zWCVEaCukEmioWHWj9xrEgAA +KuM9SDuCYk2DDYv+RlulmQAA +NyhpCEV5yECbvRXHTs6u0gAA +oIHJfZV22ESrABytSt1ZrgAA +UG1DeHxyj0KnP/b44l6YxAAA +HpjhuM8doE+hLK5vtuaWhgAA +PkkR8Y5aiU6ROcPZSoYn8wAA +zHG6Wqua/EWN1zxQMMY6YwAA +2 + +False +hKV30qElWkWAVhrHK7PJbAAA +lOyDrRE6cEms6LglvRhNKwAA +12 +wrPs7btneU+4/4uy1t65gQAA +EZdota7+4E+fapccbeVGOAAA +WP0kV5ui6EahES4xbrNn0QAA +AaBwTHQlcU+2zxABLAx/LQAA +A6zPXf9sxEKi6tCnRoEadAAA +drE4CxLGJk+Twq3skbIK9gAA +E5uPMXrlZEaHoMIhPxHmyAAA +OOu0zNPSdE+kcM3wLNK+ZAAA +XxFpGIiCe0iv4t3ZhWQowQAA +Fdu3DVY0OESeFJp19+do8AAA +LTCccJGkJ0W4WniLabjCzgAA +bUhu9iXnZkuDMupVNbEDhgAA + + +hKV30qElWkWAVhrHK7PJbAAA +ucei5JvgaEarsuGuZmgj7QAA +12 +adwZOgzgVEu8vRZnzLvX5QAA +B/5bwhGST0GX3LqdwAUEugAA +uEiwFi+v60+4XAsWsh01WQAA +xz5TCgjZbUCh+NdRSPPN7AAA +wrgJdHvDbkKD5Wp31QHsdwAA +p7XygoAMg0SS2eRxSOqxRgAA +r72GlFJn0EWF4AToL1oODwAA +jHc+PLXi90SSE+2S7WoWEQAA +Ejobow3maE2Lo93EU8TC7AAA +8lsmxrk0/kKwevGvhhPoyAAA +jCVDZJOqM0GbioKAqDMW0QAA +t8O6PWkSp0ixlfnyup/pqAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +12 +23Rs3xncKUaW4e/mZABZEwAA +Sr2QccDmA02ejFaCDyOhJAAA +LKeEwos5jkO/UMCrxr8ogAAA +0JoiXfezFkWUyb8JzfAMpwAA +QZkd5XnTY0q0ZQlaKfzE2QAA +mGWNn+wvsEiUFMm1TusZWgAA +35Zs0mj42Ei+nB1xHc8YXgAA +51Tqwh3UZUednQQWKSqH+wAA +fsKF5kiA60eCCGJ8JU6A3QAA +MyZA2JbAuE6HVqdkJh2IAwAA ++pcSzpBV/UmByuIz4qc5RgAA +U0EMSNhd1EiZ9TM17PxQgQAA +2 + +False +Htop0thy70qsJ36MwSIctgAA +ucei5JvgaEarsuGuZmgj7QAA +12 +3civWJtnOE6KaXbtjF3EtQAA +1nnUX7BhoE+8FDqX5JCMrwAA +Uq82LGc7106GAoiBd22jmgAA +e/+0NbH7zkKaLmb5SvnIEQAA +Ju6+MEBmj0q4J0cj0QZctAAA +YfuEqIsSakGg/YLCBWZ7sQAA +hal3XeMiZEW8XFL35EabjwAA +6rfLsMyQ1UuZvB6qd8xLdgAA +JQkUmAVaUECK68Z+PBZMnwAA +wKeELpbiqU+mZNXTDFMPWwAA +RBXNNt0PpEiMu6NWZ8kV5QAA +bUMNhQpKSkCb2UNeXaU4YwAA + + +Htop0thy70qsJ36MwSIctgAA +ZFe9gOmpTEWMgVssyEcAWAAA +12 +eGuSskckwEWS8bm6OG1viQAA +5ESeulQ+k0qlFsdNLLD2RQAA +/Vq1dV1v7kqB8WKAWWww6wAA +JBSR6uvp+0iRpOdtIP1wSgAA +RU7t2ySv/0mZzzXHjmY/UQAA +mcUTkVwAlk6m7GmiHjc3PQAA +mZk+sW7EKUqxpp6cR3N3swAA +bKDy7/dqREigWFZcreSbMAAA ++U4v0NjmkEOQ/oXa8vkCMAAA +akDT4SbVhU+jjWvvA7IZ+QAA +wDKW+XfpY0WY3iwDwu6hqgAA +Q0tBGQROi0KYYrMQ4hH2VwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +tJ9OC2uyr0a5R/S6A80mSAAA +iJFVNyIKGk6JWN15tHYGwgAA +EIPWlpufJkC1CWgCFKD5/QAA +e06qqjV+LUuQA4gcALfFVQAA +2 + +False +wt/kYLKLC0CiPMmQly9eoAAA +ZFe9gOmpTEWMgVssyEcAWAAA +4 +6V1345E9/EaEk5Wlz0UXHwAA +tcGN1Q/aH0em5vS2B28e4gAA +X2KZGP4vPUSwtZJqfbQx3QAA +e4uR5nM3WkmgbCyyGuaFMQAA + + +wt/kYLKLC0CiPMmQly9eoAAA +bjrraLbGKUSY+GYzLNk5RAAA +4 +3IEe8h7VzEqVIels70srPgAA +np8+zFbOdECKjn6N92ocugAA +K9Qh7lJvXkmXFWNOQnoksQAA +u+0F6EQoZ0Wc7TVhOqm+/wAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +eK+s3h1+tUa5S89BeRTysgAA +irvhe9biS0yCRokY35duwAAA +g9rjg4Kwo0iCHTt97UKetgAA +1t01IKMBekWnQr/kalH65gAA +3Urn8h+7IkuUb+S9M1o5oAAA +TQI0/RGCN0WGXsffNwjglwAA +Y+SL7VCO00mc23mHNBjiTgAA +m7lkXpofcEC37XnKaTp/pgAA +2 + +False +t/ADlzXN00KW0NiGhwkclQAA +lEIXTXT9L0CS9sEhjP/8NQAA +8 +WHqHs0BXoEaBctJ2a4HLxAAA +KNbDzQoB1kSAad2TYKqCiwAA +xW1aYBmmzkeBvirin2DeXQAA +UD/VE5O5dk6xa7gcFk1rxwAA +nja2xO230kiyKAlW444ggwAA +nmh5COzJZEacRxUgBcmrkQAA +hom19XpmKUOHCPdo80KrMwAA +YVb2yD8+70SeWYu6bVUMAwAA + + +t/ADlzXN00KW0NiGhwkclQAA +jmiilGYeBU+1y4Yw2n8CKAAA +8 +5hSe19uy60OlYLhjkm04hgAA +xUaZ+tGXsU+l0EWjPeS+XAAA +nbQW6h7wEkCjQws3cgFJQQAA +jjE/H5LyQUmmExw2VuMZNQAA +RTvHi3wSPEasB+W2svEsXQAA +SDvVxVQeKkOIIUjgrI9zzQAA ++CragV7FN0a9e4TE2i3ZDAAA +t+6jPxsLx06wKn2VdwOreQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +zgcZD9Eix0mQqY5tiBc58gAA +xRQTPxvLJ02qeJABqaiA8AAA +f3lulNClOEyUnx9kwpFozwAA +FNHQaQIpRE2cZfU9uYuJvwAA +/7Y7fI4J/kKePnnikUYKJwAA +dtDq/VWElEmEZKgm5DgPhAAA +q8Enx2j1jE+MCMQdbFWIKwAA +chr7OfjQr0yE+w/9pOVsbgAA +2 + +False +5n9wkh0NQUu8BFWyytdErgAA +jmiilGYeBU+1y4Yw2n8CKAAA +8 +YxCw3+kozEq3lDv8Du7uFwAA +mVDVzjF0rUKRSRu2PDcyHgAA +o+7ZOrSV00amudfAvKjpBgAA +IKkaD0uqOU21qVYV1VRbmAAA +IPdLjDMwf02/2AYlxVN7aAAA +PMx0J2aKtkiMPkfmmGgj4wAA +iyUWReEolUOjip3Ir35pwQAA +jQJJwJoJqkaTRWWDxGHSMQAA + + +5n9wkh0NQUu8BFWyytdErgAA +RfRTk7cK0061dLioGm8l7wAA +8 +s4wRQk+rKkyT9imx0mP/BgAA +Px5k9k8MnUePr8KB87O/pAAA +fisS7r35gUaumur2UeJ4YQAA +6y+w+iKGb0qytgrOOekGBQAA +1lbbmWCUIEKULpxG32UtxwAA +8fcr/nszaEOxN63YzX6aTwAA +EXtWwuWUDkmlhxj7uZ2URQAA +wrTkTSpbc0GOAJTQ8YHFRQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +yhifciM4t0SxSdh9h3bXWQAA +2dvooJL4nkeQFxy1FwfqrQAA +OMAqedbcbke4Td9nlMbBjQAA +hj576w/e6kWlzOdCESfG1QAA +23jf1GrnXkKEQ0n7Bvh9RQAA +FuTxkCpgjEOA6jAKoor/xAAA +lqHQtCRUsUOJ+/WK6LIipwAA +HctHTpWvMUWsOxTOsnvPpgAA +2 + +False +1QbYYnq3ykqiPL0Gv6UkSwAA +RfRTk7cK0061dLioGm8l7wAA +8 +v8ArftSuoUmQvafMp/xnqAAA +zotXwQFK9EeqePAaW6CCYAAA +4t5gJmqppkS620x3ZwRLeQAA +pXzSsjnf8kGCv3karBwU0AAA +gYZs8WaqCkq9QUeWj1MG3AAA +2dTYHxZCI0SkCrOufj8YUwAA +WpFuOatGF0Off0YSOpez3QAA +qRsQhdBHlE+iJap8o0CDKQAA + + +1QbYYnq3ykqiPL0Gv6UkSwAA +G18zTBUAj0+SdrsOmksR0QAA +8 +ei7z7krny0eZbYgwicOTPgAA +hxWyFV27X0qSedmq3fk8BgAA +t/zTGwkt5U+hYpHWo17MxQAA +ia3WFVStdk2DNEsRW8vsHQAA +nPJxrC+2z0WURbKClcdRSQAA +gsSk3bfnf0Oj1Lc+zN7q7QAA +VSS5xV9YZESUeD+xggX/IwAA +KXO+UsTChUq38634eSKq0QAA + + + +dev-env-install +tacoxPrx8kCKprVgJHnvqgAA +8 +ba/wrXKu5EuHn69Sc1EByQAA +7qBr4kbrM0Ok4Wvvp8OiwgAA +SCw2lGX49UC8psUFSwkINgAA +1VXVAzZDa0O66YYoAelaTAAA +Hb/FVc/wi0OFVH1zZMj5cQAA +ZtYh/d6uxkafJUW9Ja1SSQAA +CxC7S8TWhE6XFsSP70kZNwAA +D3FjLXbkfEibzziVdZZHlQAA +2 +h4chvQo17kKpYAZk9SZs0wAA +RYlosGPoG0aBCofSJbKnegAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +1BeGHCaJM0aE4liGzGSKEQAA +/OtrZHS50UmxTtXyPCIv2wAA ++trgfX5CKUuKneW1O3iLpgAA +TYwOYk+BWEOU97RbRQIZmAAA +IgWDdbat8kGTkkhRze5NpQAA +QXsNU/tJi0m/sKust3LpuQAA +SA9ILRBpj0ydt9w5LayjFQAA +4TxVvTwV/kuHeJPy6bZ9/gAA +2 + +False +3RL8yaG7p0udrs0v9djevAAA +l2Lw5fePkE+9xXcdzSY+bwAA +8 +1rDBcyTy4UymdMr+VkeDiAAA +b6gRd2nYHk+sjJlQgIYocQAA +w1TTr1d8AEWt7Ztwo3qROQAA +ndVjm5cqoUWQtwTV/vvB6wAA +8LrVVTjyNkSZCblGqcDyaQAA +YI3j2MfpDEWX5XT3BOE1FQAA +cU3QetonzkSXsQIYo6qMkAAA +MhYRlrpa50u8ua6aMIOifwAA + + +3RL8yaG7p0udrs0v9djevAAA +kM7+GQ5RuEmygAJdSluSjQAA +8 +Inj0+DegnEanA9QLkf381QAA +xWmm9IkbFkS0FnbyVJkYbwAA +PMSgMdUmWkGCgBDrXH6wIwAA +zmaEd9UklE2gaxd+BD692QAA +1FMYGA9b70uUpVfHjt6I0AAA +rK+Mwd8nqUyMSVjVZFO2wAAA +cisi8Dg080+GPHuMIfsbOwAA +0K5CwSSjGUy+OuUg+ymSCgAA + + + +web home pages +tacoxPrx8kCKprVgJHnvqgAA +8 +bwHJGe0us0a2jeejcciWlwAA +5nWpCLryxU+W1L4vMMysUgAA +lTn3JPXrE0WtO6xxO/meIgAA +rOYnh5GiIEWvpsqjPR/+ugAA +MD2wdRztkUaHPYJptdpRnwAA +n2mhrPkys0uUk5zrbGxJkQAA +6ZdUhecHXUGvxYQET5eAgAAA +MFrT63/q+E68adfyjGu36QAA +2 +W6JXNHPDXE+JzttRtRevOgAA +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +EXZq7lQsH0C0TX8svYjG7wAA +/X4+5hi/vE+MGWkEeKtwagAA +SrPE9PVhrEedX12h8lHgNwAA +BqyT8Mz/cEuSgmqdPEgV2gAA +izoOonNJgkmVtNQ8BSL6GQAA +nyhO2XsEZk2/ocJBCQDifwAA +T81pj0fIzU+305smIfznlgAA +r10TXV8gUki+hy0ivghKHAAA +2 + +False +BYyEw6WhrkigDw+109evLAAA +ofqv4KD9ukybRvF//Fek/AAA +8 +yN7VqGtqpUyravSEdu2rzwAA +4PPrIg1ZCU+hHHlPqvmIQQAA +31MYfdVsxEGmEYsOfMLDxwAA +eXdc++2Blk+pga7UqlXLpgAA +cNAOlL7q8kG32zKwquMNggAA +1IdMwIKVAkWbiUwRJaeM5AAA +MpxlUePbikSqO/ZfqoRVmQAA +YRoVWDG7e0qP+KkrrYdy3gAA + + +BYyEw6WhrkigDw+109evLAAA +czS7yLr6oUygLwEMTWJMVgAA +8 +zxBR5c+keUiAk3nmi403EAAA +++lWUtNWQ0CIrLSUTFZiUwAA +1MZZ5p29yU+gvc5aFuydEAAA +i38XfgewW0G3A/juGZFDVAAA +puGoNqmn30ycZD+Zuwkh9wAA +uU8Cvy77BUS41tikV+UY0AAA +UAOOm/CB1UKm52VIVpzj3gAA +pXc4McsLgk+tdSmHggG41AAA + + + +first-ver-dev-env-chk +tacoxPrx8kCKprVgJHnvqgAA +8 +xPeRQZfwOEmy8TaWIhh+GQAA +ipReBhaLlUiP0veoOeCueQAA +lbKCy3nAjE+36pd+YsvbPwAA +fmef16CUgUCIJ7DECeS9+AAA +JUjJ0DqUdUiwoes9veWzIgAA +XHJ+KIa+LUOmnxrvG19UrwAA +DCvGHwWMiUaM2EPCXRglRgAA +mOeC3oy2t0mAmrzYLD6MnQAA +2 +2dUTUSyX8USUOoaapULmuQAA +XXlOcGC2n0emsre13Wy0GgAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +FsBmt7f9x0i8NZmH9PBT/wAA +Jh1tA+9DKECphGpBL9rOqgAA +W7nTlddAq0+DXFFC6ARAkgAA +X5tOLh3e2EyLWr25x8EsSwAA +D+m8VOzK2E2CWGNaS8twSQAA +SUKHlaWKY0SYz3rgaS47dAAA +5sTNoyMVSkqPzS3nOI12MgAA +dSudZc7AWE2oZ3u96/qRagAA +2 + +False +ULUs5j3aC0Gd9Vn1OUTU2wAA +czS7yLr6oUygLwEMTWJMVgAA +8 +hUEpCPvaTkyEzAeb9oyubQAA +Wsw+mey+pUy5AohEUrtKmgAA +CqwiyBc+KUaI2rLHACHtogAA +ToVEL21vsUSMeo/HuVDP/QAA +OccyHfK/lE+XmSKA1iOWXAAA +4Uy/BFQQTESijev9yxqizwAA +7+9jwj60MkK9nzDtBWjMXAAA +SNfnTvkGw0yx9WVIMBGwnAAA + + +ULUs5j3aC0Gd9Vn1OUTU2wAA +KmQBouG6c0yb16gPnUnBtQAA +8 +zGlIglH7XkS9P5nfxe/hwQAA +S8P8jRtMgk+qLuGTYKHjdgAA +HJ4VafDpE0+xqpdGQC/k3gAA +HYNSdg0kHU25MO3otgr04gAA +Ep2cIRxHWUKCVVlqQncFnQAA +pUyUGxm2xUqFGCHyn2Gq/QAA +2AyHN/WHxUupxN8PyCbe2wAA +XvhDnYaBOU2vkPhdhs3fdwAA + + + +launch-pkg-publish +tacoxPrx8kCKprVgJHnvqgAA +8 +f5vhNxPD30OIg0/MpcEnMgAA +7Ek7+e7sXUWCXM/B1iYyWAAA +fSbvcnMQhk2y6Dfu18fh/wAA +9eix14HVGk6iND2tYikfowAA +ZCA8lMYtvkK0TOXL+AgswwAA +Y4ZHWvzhn0a2kJK4AmvZOgAA +SOmtQrqMhEiNjRvbTX2yowAA +H4Ib+2CtoEasviUjTG65zwAA +2 +xGchvlfNhUO0g6gfoLFLRgAA +L7xnZ29mQEadCI+TRP2QQAAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +L5dPNcLFS0WwJgs/xGJvzAAA +ziTnWmTFUkSA92yYD8zFBQAA +CFuaOqGBW0+iB8JeadyfjAAA ++p5iGUJE2kmhWLKtb2bNxAAA +sRQtOebtnUizFq2DltgMmwAA +nhY/0P2Lg0K+vRyxq9aMUAAA +pa3Dr5INn02ZQjBZOiRZbgAA +NXzZNZsd+Uqg5OQKfE4tKwAA +2 + +False +4wmxJ9R9R0eU6Jn8Ho3xFwAA +bjrraLbGKUSY+GYzLNk5RAAA +8 +lBU4DnE4a0CWPnDGuqw6SAAA +q3huMYIN9Ee9A4IsNHTZPQAA +OZ8lvoPq3Emra+EuBtjTnAAA +vVczgk+j0UCy0tIcFcmZEQAA ++VPdWUPcA0CZNYI4hBxBuQAA +sGZ0+eQn7kunhq3AfuzjSAAA +8QjRv12hcki/c/oIEBtdUwAA +x6LDR4tDmU2yyTXRK5ZmbwAA + + +4wmxJ9R9R0eU6Jn8Ho3xFwAA +lEIXTXT9L0CS9sEhjP/8NQAA +8 +4WrWHhCGgECeXGxs+FwiHgAA +36jq2bh15kWXx5iHEKVw0AAA +obw/YWnbxkqOMltzJdIPmAAA +/YXeInxHx0yLIZn7mPd4nAAA +r8e9MVk/UU6E+J9ELHzEegAA +Xv4NnrN6fkaX8FAaquMNJgAA +dmaBqPLIN0WVrnI+lnq7pAAA +keDNi+t3yUGU13m+iiVcEwAA + + + +multi-lang +tacoxPrx8kCKprVgJHnvqgAA +12 +8o8JeUyoWka2YCr2oj8TIgAA +vd8AYCy53UmF9R658q6+fgAA +pQRW3JLjPUe0Ey3Q6CAz9gAA +6wPjZMLJBUy5GV/gtO3A3QAA +fafd82Xh5Uu1mt+678C5PwAA +wScVwume1UuXvylUQyJcLgAA +gfJmJuROV02VAUs7F3zghAAA +QyB557azoU+U7UiRx0zfUgAA +4gxKHPiS4kKv1jznPUiVLAAA +hA6lwyp95U6cZrsxEmrZpwAA +io3NG7NSjEKdaeuRWeTIQwAA +lyn4DVJ/R02D+cQt2ywNfgAA +2 +DiYoPg9r+0KN6xRjGDN+kwAA +VvsNJNyOO0e86/eHwYM58QAA + + +tacoxPrx8kCKprVgJHnvqgAA +12 +YcX/A/cPYU+1nUlhrpozswAA +onSs1LIldEm6lhE/SJbE6wAA +VFPMQMEq6kiKT9xvnAAUJAAA +GTY1wJFPOEG3H9kMQJExAwAA +cDetESGq00+Cf51WlhE/YgAA +s77/VwzqN0qSZAziYoUuvwAA +mMQH5HD0kE+8WzVquBV9gQAA +Zz45RjGn8E+ziNpLrsoKPwAA +EAd+u7pyI0eGvl3ncpA2sgAA +aCu34FOIg0y3mJV2hdaKYgAA +486AIXth90OWDfmbx7qWUwAA +AHTKQxrufE2r8X84kxQU4AAA +2 + +False ++nJDFiS7VECOJ4vWaYvszgAA +aUVRiLFY4USAN9h1PY1/vAAA +12 +ukaguX4DaUarG+u9yukRzwAA +dMwmFyk9GEyuMSgc/wy3gQAA +jQSlBqAFA0mDyIN5h3VZDwAA +57iR0L7gvEGC/gvlMKcTlgAA +ib/kJAcaSEmrXYAU6YG6BwAA +NVJTBVtArEG0+hKVQdM9sQAA +6V8WC2Ti5kS65zJ4DtOLOQAA +I3Mv2tU6IUSI1nT5FkafpAAA +FQHq1WeXGkyrJ+2lLAFwBAAA +D8nOU0F0W0G+enyYrZ75NgAA +KWpjK3SoXUOLFXp0RwZ1aAAA +6ZUPKx85/0O8tj+M5tmVUAAA + + ++nJDFiS7VECOJ4vWaYvszgAA +lOyDrRE6cEms6LglvRhNKwAA +12 +CK82bAuIC0CascsugUXsHQAA +cjYuFaYi2Uqvj5EiM+mSYQAA +sb0ocggYr0ivDFAeSJhaGgAA +hnBwISb0BkqMZsB72qDFPgAA +1bvlbUX+q0mTstSuUQyuNQAA +Cznkc/hfLUSKFH+4bblcwwAA +xUtM4vpgtEaga8dQhn5yWQAA +HFPM3fh+wUqlJKjqheRwfgAA +vrHwb3STNkyIwnAEBS0UEgAA +BEdreG/R/Eq2ClHGKuq4BgAA +9EzDFBqF9EyOFIwV88xbTgAA +TRgEEzBNlUWLqHZ3s07ZawAA + + + +get-task +tacoxPrx8kCKprVgJHnvqgAA +8 +dbDAxqIYDEef6cq3x4sQfAAA +Ms4aM+Xhc0+Cse/Ezh5YyAAA +GvA9RoHfF0Wj3JDZ3dBWWAAA +RRU6mr4m2UeuPuvwlZsDxAAA +PDF/3iFxa0qb6QrTKCb/YQAA +j1FipIXkwkuLNnXJrtjO/gAA +6E8wutm9jkSz4+3B8pJgzAAA +ObJJTAyv8EuiQvdQAF1IsAAA +12 +XdMG4B9cfkWIcWgvsVmQUgAA +qb8LVJbh5kG4uilxed700QAA +cCWrTkROLUy3C0VntDGRjwAA +yG+8cHFE1EeshJkd1dKuewAA +G5oIOUpHjU6CAVOHO5cbSQAA +kZf004keokGnnIbJREbJ8gAA +50uCeDif8kKZsdKCSOxuyQAA +Pqls1twyrUOYZaqZAZic8QAA +XPjUoHBhGkOE8kyb9uqy1AAA +7QebQWj8AEy2+oMl4FpmTAAA ++Ekcl1W/rkuftPam8GOdiQAA +2nuMoO9sH06KowfPyWX8XwAA + + +create-test-unit +tacoxPrx8kCKprVgJHnvqgAA +8 +1soCBV2ToUK8JVFLvn+e2wAA +TUY5qOG1Wk2L4dK2Sz1bHgAA +r4JRHbMgrk2XD1LtUyWhlAAA +96xtOKfc8k+YpIcLMpzWWQAA +iZbm2TAx1keNx/mPHzSEmgAA +74AFtM0Y3Eu7Qr3msZk1/AAA +aJIYE3lYAESHESjaTsbdbgAA +jGPh5jW7FU+Yzr6Z5vTWegAA +3 +pSiPgqpAb0+UkTDVbbXBnQAA +DFlh0do87UmmJQigSQRsiAAA +2t6hyyogW027sVhhVrjclQAA + + +bugfix-coding +tacoxPrx8kCKprVgJHnvqgAA +8 +N1P5SuGh4EWdFcErHd0tKAAA +EQPWWuSqVUeGLxNVsXR4owAA +b2rJUuCenEO3F7brCai33AAA +10MTb/zOsE+Y0pitUa1KUAAA +vmizIwBnQ0SKIRlT6FSqSwAA +OzxXAzuxCECfRoLz7F4qJwAA +Xzoq618yJ0C6kSd8/Y8r3wAA +fwgX/TPnZ0yxuSlUG9nWUQAA +2 +XyL91tS87U+MpUc/Z25u1gAA +lp0ewCTLb06H/3WjWYmLOQAA + + +initial-dev-launch +tacoxPrx8kCKprVgJHnvqgAA +4 +uI0Vw5nV8k2MpwNxuYq/IAAA +XQrlR2J2FkemJnNVF09juwAA +Nw70TZWqwEKEe5uHIFQpVwAA +1zBbL3jigU6wLBuTCxn1YQAA +1 +v/43TdYAaEacDIIH0o4rFQAA + + +bugfix-estimate +tacoxPrx8kCKprVgJHnvqgAA +12 +IjimQpqMbkC8IpOXi07GSgAA +/cZDuD4jR0O34YcTRfRsWQAA +jjJsTCw84ke5j286f1BfkQAA +tY9/iLXqT0W/syfdAJLqmgAA +op7TXMmXt0mHqk1AIwA74gAA +m/74iar3XU6wz8WDBqi6jgAA +6WZvTQptJk6RR60FUydKAAAA +tsEvZ7FEwkicvO6yHyOUyQAA +6WD/injqLkGLLLrBFiLSOQAA +QNFykr69eECPj0/V6+5YdgAA +u7tk2lPZZk+0vdmDA1J37AAA +evBsfM9gAUqOGdgsUIYbZAAA +1 +DLyG2IErKEu/iLgO368jEQAA +4 +Jrscu7bPaEOGr8p3WU+PYQAA +gfyHi9WUpE6GD9hBzk2snQAA +5RC8wEWMEE64UO9nj5kBkAAA +TdvnjlqSk0mqUzoHhiVfUAAA + + +new-feature-dev-launch +tacoxPrx8kCKprVgJHnvqgAA +4 +EJGh4IwbYkCWyCQWvIs0cgAA +v0iUxioMTEWRqob+OLFFpgAA +jJEQt4nzfkCSg5YlGt9LbAAA +CfthfYnYbECGOYkPnqR4LQAA +1 +VHwOYW9vAkeUFUXT+cxoEgAA + + +task-schedule +tacoxPrx8kCKprVgJHnvqgAA +8 +5srcgF0EYUyRM6tylL0wVgAA +Xu54VWu8wkeijgDGJaqNuQAA +v4ZnhLBpxEa7GZU1RBMP5gAA +dOoZ/1BsCE+WFWqlspiDbQAA +78WbrY6e4EC/58P5Ws4JCgAA +avBhFpUQK0iDdpDZEWL6YwAA +k8J1gBfsp0u9lwLuIrLzxwAA +ay14X9YfAkaTyLB5uIcx/QAA +7 +jhEbrPQWVkCDWTgpxUyF+gAA +IMPpHUaiT0CFZLcH+44uQwAA +X82I741yL0ybUyEPhBbTZQAA +4Ujmk5gLj0WyU3SYagr0mAAA +42F3TeDc+kOeEbEW2sSOqwAA +v4O00Fgt/UO7ZDLsyBtHIQAA +5z6XidYYrkexqaAHLrMuGQAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +8wc4LntVV06YQUHrphlYQAAA +O1OSy5OLu06z1200FfZnYwAA +lLMFX1l0RUSShxqU+stRmgAA +3whQVDqlAUSLBxfNcgLdhwAA +2 + +False +X3JNoNb8Jky2P0O9whu+8QAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +ovLTerBOqEqBIrrcolH9vwAA +HZt/1fUltkGvbGRtpKewvwAA +GS9fAYzR+06hzTzQldE0/gAA +NVIdYUxIPUWDxVZvtmAI9gAA + + +X3JNoNb8Jky2P0O9whu+8QAA +GB5fgt+BCEuZu+MykpdKRQAA +4 +pMhuaX/f+E68J9HnsTSlWwAA +TlQwGjNbNUq8e1XBffomXQAA +SlhG73PEnEqrHp5VLn7u9wAA +6UiUqMycfUy88EkFhdatgwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +wNeaBDZGOUyVfgkes4au3wAA +QxOrhy5efE6PCLoZK3x1AgAA +8b36DyuxtEK0ySxca1+yxAAA +JFejifk9DUa/ffgUp++1CgAA +2 + +False +TzMLJBMMOEKimlwgjlIwnQAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +Yh8oRVNnWEytikAyxs+GDgAA +ZdYQbYPwPkKT/rwkyQnf3AAA +9Ojh1NTP806FSJxTnAkzZQAA +kjldeczyGE+fnGe+xXziWwAA + + +TzMLJBMMOEKimlwgjlIwnQAA +CLf6+wSJ/U+4iSwM7QoY3wAA +4 +R04Mx4jWOEeuU+tG5PHs5wAA +r64gKB2UykW8ivHMO/g8CgAA +h7zm93+eC0ql3a1RDDiitwAA +NRRzXbgvKECCdxUUCPmd9AAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +2NuRWuYK50WnxBuUP4gBxAAA +0SMIyCdQFU+3q6A3OBoSlAAA +6J17FAECSkSCuYB1u/ogRwAA +uNegZGxraUaPNSPi7Pio8AAA +CktursNXL0eCMo1MGk5IrwAA +9pZ2B6DaSE+8T+/g1s90rAAA +teG8mx/ulECMRFVJuc682AAA +5qAAd/Kj3kG84oS/FyTJjgAA +2 + +False +DCobZcXopUed3uhu7f3tCwAA +CBkE9JDrJU21ybYWNP2cCgAA +8 +P8qHBXylckuDx/SkGs6/kgAA +z+pH801Q3EyVUqojN5NvcwAA +a23JEbE+xESafl0SbgJQUgAA +KKvDhWnzmkqPKuY0HjK8FgAA +3jCvVmLkmUOmqPd9htgolAAA +NadBPwcmBkCzQdPVoQ9nvgAA +zcW4R+DVKEu8iUYSDcj5lAAA +30s76xTpRUuGuQxZ0XJZmgAA + + +DCobZcXopUed3uhu7f3tCwAA +gJ7o4uiAMEqSPUL3dadz2wAA +8 +Y6LLjk5cA0OsM7eoYAvrAwAA +8ygaym1cVEKz+N3yjz+W1gAA +Q5ZwPenNC0WasjAzROTzGgAA +HSxQFf1qK0WYE5koAI47NAAA +Fbb8iSttAkCLoXNQQYEh3gAA +0sFv0U4b70SFffCDO7hjwAAA +CJheABw8b0irpkh65QeXlgAA +TR8oUjdAi0mgDQVpsU2x6QAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +dX9uvZH5mkKAFvskfoSY4QAA +rx3wB640uEyxN5/DQtbuawAA +64LyWbrmdEWFwQqGeMIhyQAA +aA6E1w9IoEGWoT0Q2XPx7wAA +uzG8uEdgi0i3H3UTNKhIIwAA +jRCasBdvq0Kn6T98PqDklQAA +pIEeisDPxUKZSTx+78xgJwAA +jK3EHCMME0y3UxN5gnLtsAAA +2 + +False +BUd2VmDLEkKHuqopStVszQAA +CBkE9JDrJU21ybYWNP2cCgAA +8 +sKhaqPLUPkmQM5K/X26iuAAA +loxl+4peu0msXA77GnU8CQAA +b0vedHq3j0u0coqCStqegQAA +F6tJ0pAeRUyFxtSLc1fimAAA +ZkbBwb4oMkiIM06X8VOTnQAA +Sj7lExzOPE+bbzg2lGqdsgAA +NhOiP47RcUW4PnbbHYKoigAA +uapIl/BVCEq5sExn6a+eVQAA + + +BUd2VmDLEkKHuqopStVszQAA +CEEcWQKt0kyX8zYOPZHrrwAA +8 +GVKWXfODm0iz3AP+Sgk4jwAA +ISWs/UeT4UiqncGs3Uaa7wAA +dQaQkx0Vukqci2ZJPGzLWwAA +VFDUhUFtwEKttTOYZEL1MAAA +wcNfkmFEBE2keKjrKnmYYQAA +b0vtc6nmIUyxCy552ywXcAAA +Xbpb0Knly06f32NWncRL3AAA +1elATEBhCESSVyalvtl1vgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +sNLeG4PJm0+8KCjqxqOCWwAA +HVTDYD/3okuTybpb3B1gOwAA +54Cx5D+dfEKjT3d0hBdjIQAA +EStqlexzsEetdK3v+w2VawAA ++UefbA7FIUSK/MESxoYt2gAA +JGrwX2xTnUyO7LiORoNaNgAA +35v5O50q9kCcUVg18mQ6xQAA +mKwniIrgcUmCAC3v/3o52QAA +2 + +False +fk3nxDxX5USF8gff9cP5MwAA +CEEcWQKt0kyX8zYOPZHrrwAA +8 +asJnsfN0GUWiyMuFCahDXgAA +BOEUQBrK30mjhvdpQHwJpQAA +NLl/T2j9okSgftxWUdGV2AAA +aokp2W90v0qswNfwmPOJfQAA +tZjYlGv610WzFoaaA/QP7wAA +h1BJSVelXEKRHU32rCPsLQAA +X1gftWAdoEWj2o7ki1YRiwAA +LX4tOha660eSLUYwNx89gwAA + + +fk3nxDxX5USF8gff9cP5MwAA +wftqTlAvI0+cR9j69saRNQAA +8 +J7YaaNWyYEiRwsgF2wYQgwAA +cXbKG9fCoEiC8fKZ7PMScAAA +O5E0E1GJSU+UB48yIZiM1wAA +C5cNYIx0qU6kT8FdTJ0W7wAA +wszj3UGclUqXbjurkvilmgAA +Vnl1L4a9kEyci6a5Ua9U5wAA +WWxGikyDf0uEiIKyAjjmrAAA +5xtTazOfxUiBxjKpHLQMBwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +xynMxno5NUOHq++yCyr7XgAA +traa/ZvvpUegPBbgP4JR/gAA ++c016pTsWE2c8mhuuBmHdgAA +YFKXLFn4AkyJ8o/xBGCVBQAA +2 + +False +dmgxVDpivEyRrIdXr3QLWwAA +KMKq644vfEq7voEHMFkLwgAA +4 +IE//HfmdUUaWXwbESvusOwAA +2GC8D1k2jkOWw0rykq0X+QAA +X1gVSFkWvkaH9wNUwqMsfgAA ++8M/uOF/Rkq++LijZdtMWAAA + + +dmgxVDpivEyRrIdXr3QLWwAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +lucB0vsdJkKPQUhW3zytXgAA +ymkzWLJAsUO0vpFi3JPk2wAA +wEFzJjk5NUurs7wK5l30kwAA +u4G0ctI3+0CgmaFxijqQCAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Avubf/Jv+ESjoY+fCSXr/wAA +bTAk9AIUs0WzbfD8kX5PRQAA +VqzGpLJi2E+VpZlzs+NuhQAA +Jp275MIge0q5w9sDDfeBpwAA +2 + +False +gFnk16iOFki43F+XSkxbHAAA +PjS4k33/kkePfB8R0Qh14AAA +4 +BfBksAic0Uu60LI/dyrMJAAA +/dKZaYx8cEeZYrYyiRYU5wAA +X9WPIh7u8E+7ZxiW5atmCAAA +OtNIFqV3gEGRcxG9TEDMNwAA + + +gFnk16iOFki43F+XSkxbHAAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +t/hXvvCqEkW1Bqw5sGsFLQAA +uRjP/dEd7US4Uku0S8rxbgAA +rR9yh3vj5EOFrJDYVMnPxQAA +WgEbSvB4gU6GVbqjwLk2HgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +jJ76FI5b90a+e5mKujxmLgAA +osHJ9uFuaku6ue23AkENGAAA +MoIUq7GFK0Wg88wQUwW3vgAA +y+AM/qQrxUyKhjffTSG7kAAA +2 + +False +O9Ia0CXMxkC9ATowborgyQAA +GbTWbRuRqkK91Ggxct5sowAA +4 +CooaoBIgEUi4hdtL77yrVAAA +oHxPaRG/nUqKic/NsC9StwAA +yxFGMboUqUqI16EC56JPRAAA +wm315JfaDkOBUzNDG7sWOAAA + + +O9Ia0CXMxkC9ATowborgyQAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +quVg6+WfjEa2I1ezl5O6SAAA +uedrORCY30SiJBNI193LogAA +XA9BJ+jjN0S+ADAx70K9YwAA +BSonIpOcYkK+u52kKButfwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +Y8EYWDXebEqqmXmnIro7RgAA +RV4aYgM5kE6PwLGX5PlbCQAA +RZSzrPCCtUWog9NfLYFhxgAA +olT7nuE/AEiDMgcQR32i6gAA +hq7WdlJapUCRsNXzSlOg/wAA +ro06C6vOo0GrLR1OTeXtogAA +2eAKXDc15UmaC0HKYUX0LwAA +AgkGQiaAhUeC59PTP+bfDQAA +2 + +False +hIsaQ5I0Y0qxkPCenhTfsgAA +F4Ld7UGpQkiQCCnqXOJ06wAA +8 +4MGKOKLqFUG3zS/WHyOr7AAA +zcHVUWij3U2f4OSHRSHNtgAA +rfRZgjlfbU2Q9GPaf7T6MgAA +9WYXmu4veEmK8H5Rteq1EQAA +PLrFDUDFl0OTZ4GYxcMbcwAA +YOpK/IqPVUOEkJXgmM+WHQAA +6O29cXMNhkiZvCJoA/sYNgAA +y/Rd1kLnV0OQYUyIl8KwWQAA + + +hIsaQ5I0Y0qxkPCenhTfsgAA +oKO/T5e9P0yxfxSC9DK89wAA +8 +G6P9O56zp0OagK8tAzvQGwAA +lNsNxZsx5kuZgI2//ydbkQAA +CoGIdA9u+0qWKrxSjEdDnQAA +Wt6GBkg7c0arLOwwEDNm4QAA +grMM67g/AEma0xf6QP5SfQAA +cRt1wkDA3kC4InO75uRc5wAA +C0l8Gmx+KkiAoYGtfTU76wAA +Erp8FPxuSEasSd1sJUWZeQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +ZQWq1tkei0aqV2y9CTuhYQAA +mhLUwyJky0+kaf5QJQeB/gAA +jQOA2QHLnEq2uF9+WuOTZAAA +w+emc4F3tEG4UaIhzt1sBgAA +2 + +False ++xZvDwUvFkOoytPg7jDZ2wAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +H66oi9Rqu0qNdT8O/7+AlQAA +ernUbNyH10eNZO90vpFTGQAA +2RlRZpNAPkeTSgkFCr1NqQAA +vdzc3HglWEiuEuuhnu0fnAAA + + ++xZvDwUvFkOoytPg7jDZ2wAA +l2Lw5fePkE+9xXcdzSY+bwAA +4 +Kl1lkIkKfkuqXTA7dAIA1wAA +2UNUcsKEeEeKWTVt5g06LgAA +5PxKeTHXdkO2Qw0LR+wXQwAA +h8UxVi/8lEKAmsFho3b7rQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +eL6lwgahcEKBUq3GRlz2ZwAA +Jh4IU3dK4U+krGZ0QI/oRQAA +OvUzLGtLH0yNsHPNrCbV9AAA +hfUS7gJryEiWUmI9MdS3fAAA +2 + +False +u2pg0MZyBkybxjv8s4b5hwAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +ukJoRgO7dEqeIxzBC8WiHAAA +g1HdXhrb506cqQbA6Nh3fAAA +LssztM2JukuehqMSYvNjIgAA +O7zJTWjg3kyjAgSat+MEYAAA + + +u2pg0MZyBkybxjv8s4b5hwAA +8v8IRJdlJUmbHIylKGey5wAA +4 +xOl++89mgkGXasQBMel+twAA +xD9176CVbEub8tdlNDaF7QAA +nL9/Pzg7gkicKqdvYbcSswAA +JgOWGoUr4Uy5jhm926nZkQAA + + + + +Design Model +UMLStandard +designModel +IhiugfF1eE6vc8zKnVf8gAAA +13 + +top-level-usecase-diagram +yePcB6NdXUG1SBs2wQJA7gAA + +dAvcL1pOSkyfQnbJT2mFKgAA +80 + +clMaroon +$00B9FFFF +314 +214 +245 +169 +System + + +clMaroon +$00B9FFFF +394 +338 +120 +32 +oKO/T5e9P0yxfxSC9DK89wAA + + +1 +get-task + + +False + + +False + + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + + +clMaroon +$00B9FFFF +390 +290 +127 +32 +F4Ld7UGpQkiQCCnqXOJ06wAA + + +1 +task-schedule + + +False + + +False + + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + + +clMaroon +$00B9FFFF +320 +276 +76 +23 +task-schedule + + + +clMaroon +$00B9FFFF +453,321;453,338 +hIsaQ5I0Y0qxkPCenhTfsgAA +PDF/3iFxa0qb6QrTKCb/YQAA +78WbrY6e4EC/58P5Ws4JCgAA + +False +1.5707963267949 +15 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +1.5707963267949 +30 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +-1.5707963267949 +15 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +-0.523598775598299 +30 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +0.523598775598299 +30 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +0.523598775598299 +25 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +-0.523598775598299 +25 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +-0.785398163397448 +40 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +0.785398163397448 +40 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +-1516 +-800 +50 +8 +qb8LVJbh5kG4uilxed700QAA + + +False +-1516 +-800 +50 +8 +4Ujmk5gLj0WyU3SYagr0mAAA + + + +clMaroon +$00B9FFFF +334 +242 +111 +32 +al6ONjrnZ02miWcUt8E4UAAA + + +1 +submit-task + + +False + + +False + + + +False +al6ONjrnZ02miWcUt8E4UAAA + + +False +al6ONjrnZ02miWcUt8E4UAAA + + +False +al6ONjrnZ02miWcUt8E4UAAA + + + +clMaroon +$00B9FFFF +454 +242 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +410,273;433,290 +ZX2SocfyGUGaYAoZdJTHCQAA +78WbrY6e4EC/58P5Ws4JCgAA +mGag8uVpX0+zFhYfpZD08wAA + +False +1.5707963267949 +15 +ZX2SocfyGUGaYAoZdJTHCQAA + + +False +1.5707963267949 +30 +ZX2SocfyGUGaYAoZdJTHCQAA + + +False +-1.5707963267949 +15 +ZX2SocfyGUGaYAoZdJTHCQAA + + +False +-0.523598775598299 +30 +epHead +v4O00Fgt/UO7ZDLsyBtHIQAA + + +False +0.523598775598299 +30 +epTail +YezoOUqiMEqMfQ47zgiYggAA + + +False +0.523598775598299 +25 +epHead +v4O00Fgt/UO7ZDLsyBtHIQAA + + +False +-0.523598775598299 +25 +epTail +YezoOUqiMEqMfQ47zgiYggAA + + +False +-0.785398163397448 +40 +epHead +v4O00Fgt/UO7ZDLsyBtHIQAA + + +False +0.785398163397448 +40 +epTail +YezoOUqiMEqMfQ47zgiYggAA + + +False +-1068 +-948 +50 +8 +v4O00Fgt/UO7ZDLsyBtHIQAA + + +False +-1068 +-948 +50 +8 +YezoOUqiMEqMfQ47zgiYggAA + + + +clMaroon +$00B9FFFF +482,273;467,290 +V+JDAD1y1kGhDKjzLQ2kzwAA +78WbrY6e4EC/58P5Ws4JCgAA +MM23IzSqWEWlGoT6/hNe5AAA + +False +1.5707963267949 +15 +V+JDAD1y1kGhDKjzLQ2kzwAA + + +False +1.5707963267949 +30 +V+JDAD1y1kGhDKjzLQ2kzwAA + + +False +-1.5707963267949 +15 +V+JDAD1y1kGhDKjzLQ2kzwAA + + +False +-0.523598775598299 +30 +epHead +5z6XidYYrkexqaAHLrMuGQAA + + +False +0.523598775598299 +30 +epTail +ivchHpb/m0Oy82i37nw/zwAA + + +False +0.523598775598299 +25 +epHead +5z6XidYYrkexqaAHLrMuGQAA + + +False +-0.523598775598299 +25 +epTail +ivchHpb/m0Oy82i37nw/zwAA + + +False +-0.785398163397448 +40 +epHead +5z6XidYYrkexqaAHLrMuGQAA + + +False +0.785398163397448 +40 +epTail +ivchHpb/m0Oy82i37nw/zwAA + + +False +-1068 +-948 +50 +8 +5z6XidYYrkexqaAHLrMuGQAA + + +False +-1068 +-948 +50 +8 +ivchHpb/m0Oy82i37nw/zwAA + + + +clMaroon +$00FF80FF +568 +180 +159 +32 +PjS4k33/kkePfB8R0Qh14AAA + + +1 +bugfix-estimate + + +False + + +False + + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + + +clMaroon +$0080FF80 +124 +104 +175 +32 +7lWVbX8GnUmVFBjNoEJuAAAA + + +1 +new-demond-action + + +False + + +False + + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + + +clMaroon +$0080FF80 +140 +188 +144 +32 +dqA/cPl8GEmWvU/R693yfAAA + + +1 +new-idea-action + + +False + + +False + + + +False +dqA/cPl8GEmWvU/R693yfAAA + + +False +dqA/cPl8GEmWvU/R693yfAAA + + +False +dqA/cPl8GEmWvU/R693yfAAA + + + +clMaroon +$0080FF80 +296 +4 +190 +32 +jic239+6CEiL3vfxIBKzZwAA + + +1 +usr-bug-report-action + + +False + + +False + + + +False +jic239+6CEiL3vfxIBKzZwAA + + +False +jic239+6CEiL3vfxIBKzZwAA + + +False +jic239+6CEiL3vfxIBKzZwAA + + + +clMaroon +$0080FF80 +332 +52 +113 +32 +hWsqFBqliU2am4OA8VEXDgAA + + +1 +using-action + + +False + + +False + + + +False +hWsqFBqliU2am4OA8VEXDgAA + + +False +hWsqFBqliU2am4OA8VEXDgAA + + +False +hWsqFBqliU2am4OA8VEXDgAA + + + +clMaroon +clSilver +596 +144 +110 +32 +H7tysEnUp0+p4o84YYVC8wAA + + +1 +bugfix-work + + +False + + +False + + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + + +clMaroon +$0080FF80 +232 +148 +138 +32 +tptycT8EmUmriJ3RFm3kFAAA + + +1 +analysis-action + + +False + + +False + + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + + +clMaroon +$00B9FFFF +243,135;269,148 +Ycu282Q90kSZPuP8Y2664QAA +kl2Aed9IkUu2D64AkSCxzAAA +UE1o5B5rJESipHfZBqKwygAA + +False +1.5707963267949 +15 +Ycu282Q90kSZPuP8Y2664QAA + + +False +1.5707963267949 +30 +Ycu282Q90kSZPuP8Y2664QAA + + +False +-1.5707963267949 +15 +Ycu282Q90kSZPuP8Y2664QAA + + +False +-0.523598775598299 +30 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +0.523598775598299 +30 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +0.523598775598299 +25 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +-0.523598775598299 +25 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +-0.785398163397448 +40 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +0.785398163397448 +40 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +-1008 +-1160 +50 +8 +tbE2qZkS9UCvoD6eysPdBQAA + + +False +-1008 +-1160 +50 +8 +8Gn/k11xTkGZ83K2PTY6tgAA + + + +clMaroon +$00B9FFFF +244,188;264,179 +2f8CCoiKYEm2bnh0fSgF5AAA +kl2Aed9IkUu2D64AkSCxzAAA +9tFoXvjmTECmCvT8S3sjAwAA + +False +1.5707963267949 +15 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +1.5707963267949 +30 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +-1.5707963267949 +15 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +-0.523598775598299 +30 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +0.523598775598299 +30 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +0.523598775598299 +25 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +-0.523598775598299 +25 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +-0.785398163397448 +40 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +0.785398163397448 +40 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +-1008 +-1160 +50 +8 +XqdZXwSYokCQBpZDzAi8kQAA + + +False +-1008 +-1160 +50 +8 +FMzzdvZAeUWKXvIN8LFkfwAA + + + +clMaroon +$00FFFF80 +152 +232 +130 +32 +dHVXjobujkKGloy7+Ox8DAAA + + +1 +publish-launch + + +False + + +False + + + +False +dHVXjobujkKGloy7+Ox8DAAA + + +False +dHVXjobujkKGloy7+Ox8DAAA + + +False +dHVXjobujkKGloy7+Ox8DAAA + + + +clMaroon +clSilver +580 +60 +141 +32 +VwrgoiK6h0aUxHMgZDKYzgAA + + +1 +document-work + + +False + + +False + + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + + +clMaroon +clSilver +584 +104 +138 +32 +fKAlsL5x3U2cAiir26vsAQAA + + +1 +traslation-work + + +False + + +False + + + +False +fKAlsL5x3U2cAiir26vsAQAA + + +False +fKAlsL5x3U2cAiir26vsAQAA + + +False +fKAlsL5x3U2cAiir26vsAQAA + + + +clMaroon +clSilver +588 +16 +117 +32 +KbXj7bLsjku9BsYv/z63VgAA + + +1 +testing-work + + +False + + +False + + + +False +KbXj7bLsjku9BsYv/z63VgAA + + +False +KbXj7bLsjku9BsYv/z63VgAA + + +False +KbXj7bLsjku9BsYv/z63VgAA + + + +clMaroon +$00FFFF80 +92 +20 +209 +32 +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +1 +new-feature-dev-launch + + +False + + +False + + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + + +clMaroon +$00FFFF80 +132 +64 +154 +32 +d6r7rOW3akG5lkJDtATmigAA + + +1 +initial-dev-launch + + +False + + +False + + + +False +d6r7rOW3akG5lkJDtATmigAA + + +False +d6r7rOW3akG5lkJDtATmigAA + + +False +d6r7rOW3akG5lkJDtATmigAA + + + +clMaroon +$00B9FFFF +124 +101 +78 +A/9YWnHJBEGH1jC8FI2M9gAA + + +1 +maintainer + + +False + + +False + + + +False +A/9YWnHJBEGH1jC8FI2M9gAA + + +False +A/9YWnHJBEGH1jC8FI2M9gAA + + + +clMaroon +$00B9FFFF +12 +236 +77 +78 +FkRCE52YAkaM/9oO8q9QFQAA + + +1 +author + + +False + + +False + + + +False +FkRCE52YAkaM/9oO8q9QFQAA + + +False +FkRCE52YAkaM/9oO8q9QFQAA + + + +clMaroon +$00B9FFFF +800 +28 +76 +78 +MLBX+NGx9kymQ76b9EAKuwAA + + +1 +tech-leader + + +False + + +False + + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + + +clMaroon +$00B9FFFF +796 +176 +90 +78 +oWDHE/AIyEqhL2zTdizC4AAA + + +1 +developper + + +False + + +False + + + +False +oWDHE/AIyEqhL2zTdizC4AAA + + +False +oWDHE/AIyEqhL2zTdizC4AAA + + + +clMaroon +$00B9FFFF +796 +244 +91 +78 +Pu4+pL+iiU6lRzDtfLIgJwAA + + +1 +documentor + + +False + + +False + + + +False +Pu4+pL+iiU6lRzDtfLIgJwAA + + +False +Pu4+pL+iiU6lRzDtfLIgJwAA + + + +clMaroon +$00B9FFFF +800 +316 +86 +78 +aaiB2ZAB7kOSB9niWMGCrAAA + + +1 +translator + + +False + + +False + + + +False +aaiB2ZAB7kOSB9niWMGCrAAA + + +False +aaiB2ZAB7kOSB9niWMGCrAAA + + + +clMaroon +$00B9FFFF +492 +8 +77 +78 +u2JHX3nMn0CMyZLWTG2R1QAA + + +1 +user + + +False + + +False + + + +False +u2JHX3nMn0CMyZLWTG2R1QAA + + +False +u2JHX3nMn0CMyZLWTG2R1QAA + + + +clMaroon +$00B9FFFF +796 +100 +86 +78 +78O5f65/80OvpHK3AuBEIQAA + + +1 +tester + + +False + + +False + + + +False +78O5f65/80OvpHK3AuBEIQAA + + +False +78O5f65/80OvpHK3AuBEIQAA + + + +clMaroon +$00B9FFFF +100,149;152,135 +MAKnyTiDo06cPkcuyMVz0AAA +UE1o5B5rJESipHfZBqKwygAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +MAKnyTiDo06cPkcuyMVz0AAA + + +False +1.5707963267949 +30 +MAKnyTiDo06cPkcuyMVz0AAA + + +False +-1.5707963267949 +15 +MAKnyTiDo06cPkcuyMVz0AAA + + + +clMaroon +$00B9FFFF +100,162;232,163 +esX3j+a1KU2snuv6WgXrzgAA +kl2Aed9IkUu2D64AkSCxzAAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +esX3j+a1KU2snuv6WgXrzgAA + + +False +1.5707963267949 +30 +esX3j+a1KU2snuv6WgXrzgAA + + +False +-1.5707963267949 +15 +esX3j+a1KU2snuv6WgXrzgAA + + + +clMaroon +$00B9FFFF +100,175;152,188 +bFIlptiTHUqaYGcZ9Z9BwwAA +9tFoXvjmTECmCvT8S3sjAwAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +bFIlptiTHUqaYGcZ9Z9BwwAA + + +False +1.5707963267949 +30 +bFIlptiTHUqaYGcZ9Z9BwwAA + + +False +-1.5707963267949 +15 +bFIlptiTHUqaYGcZ9Z9BwwAA + + + +clMaroon +$00B9FFFF +88,124;104,108;151,95 +YwY92xK+JEOUOaknXh7XMAAA +65HjSOXEV02PyHHndkIc4wAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +YwY92xK+JEOUOaknXh7XMAAA + + +False +1.5707963267949 +30 +YwY92xK+JEOUOaknXh7XMAAA + + +False +-1.5707963267949 +15 +YwY92xK+JEOUOaknXh7XMAAA + + + +clMaroon +$00B9FFFF +64,124;84,72;148,51 +VUF2hqp6/UCePhaBLl598gAA +D0y3HjNuyEeD8w3pOiVL9gAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +VUF2hqp6/UCePhaBLl598gAA + + +False +1.5707963267949 +30 +VUF2hqp6/UCePhaBLl598gAA + + +False +-1.5707963267949 +15 +VUF2hqp6/UCePhaBLl598gAA + + + +clMaroon +$00FF80FF +584 +216 +140 +32 +Qefe92j2XEq8x5GI1Vq+RQAA + + +1 +testing-estimat + + +False + + +False + + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + + +clMaroon +$00FF80FF +140 +324 +140 +32 +YPSGJ8SkH0mAV1HZcqVjOgAA + + +1 +publish-estimat + + +False + + +False + + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + + +clMaroon +$00FF80FF +128 +276 +168 +32 +sl9IvUV4W0Kodgc58LjsVgAA + + +1 +complete-estimate + + +False + + +False + + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + + +clMaroon +$00B9FFFF +77,201;116,256;170,276 +xg7XA4XPo0GPzFxhulYO7QAA +tJdxQ2n6kUCuF/faDlNrnwAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +xg7XA4XPo0GPzFxhulYO7QAA + + +False +1.5707963267949 +30 +xg7XA4XPo0GPzFxhulYO7QAA + + +False +-1.5707963267949 +15 +xg7XA4XPo0GPzFxhulYO7QAA + + + +clMaroon +$00B9FFFF +68,201;116,304;169,324 +3ExrMzh4BU+qEom+NkgXhAAA +myJOly92w06UWOgls7OciAAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +3ExrMzh4BU+qEom+NkgXhAAA + + +False +1.5707963267949 +30 +3ExrMzh4BU+qEom+NkgXhAAA + + +False +-1.5707963267949 +15 +3ExrMzh4BU+qEom+NkgXhAAA + + + +clMaroon +$00B9FFFF +600 +252 +108 +32 +U//hAdD8QU+M1p1r952pSAAA + + +1 +design-task + + +False + + +False + + + +False +U//hAdD8QU+M1p1r952pSAAA + + +False +U//hAdD8QU+M1p1r952pSAAA + + +False +U//hAdD8QU+M1p1r952pSAAA + + + +clMaroon +$00B9FFFF +816,105;748,232;694,252 +onJRiZekkkW+HvL7efTCQAAA +HIeb6G3eG0y9ALZQK+J4gQAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +onJRiZekkkW+HvL7efTCQAAA + + +False +1.5707963267949 +30 +onJRiZekkkW+HvL7efTCQAAA + + +False +-1.5707963267949 +15 +onJRiZekkkW+HvL7efTCQAAA + + + +clMaroon +$00B9FFFF +800,99;744,148;678,180 +DLyG2IErKEu/iLgO368jEQAA +6WD/injqLkGLLLrBFiLSOQAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +DLyG2IErKEu/iLgO368jEQAA + + +False +1.5707963267949 +30 +DLyG2IErKEu/iLgO368jEQAA + + +False +-1.5707963267949 +15 +DLyG2IErKEu/iLgO368jEQAA + + + +clMaroon +$00B9FFFF +812,105;748,204;706,216 +GHPM6mLD3kO4lCP2rqtf+QAA +kliHiKyFiEyM4tl1y2PxqQAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +GHPM6mLD3kO4lCP2rqtf+QAA + + +False +1.5707963267949 +30 +GHPM6mLD3kO4lCP2rqtf+QAA + + +False +-1.5707963267949 +15 +GHPM6mLD3kO4lCP2rqtf+QAA + + + +clMaroon +$00B9FFFF +156 +368 +113 +32 +G18zTBUAj0+SdrsOmksR0QAA + + +1 +publish-task + + +False + + +False + + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + + +clMaroon +$00B9FFFF +100,199;128,220;167,232 +N6rmhGGOH06+NgfTaWft1gAA +3rdXqG4KQ0W+d59DtblscAAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +N6rmhGGOH06+NgfTaWft1gAA + + +False +1.5707963267949 +30 +N6rmhGGOH06+NgfTaWft1gAA + + +False +-1.5707963267949 +15 +N6rmhGGOH06+NgfTaWft1gAA + + + +clMaroon +$00B9FFFF +62,201;108,352;162,368 +jTxlFtrXok2VlE3EA+IAugAA +b4fOXlO640eOSeo31HjDiQAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +jTxlFtrXok2VlE3EA+IAugAA + + +False +1.5707963267949 +30 +jTxlFtrXok2VlE3EA+IAugAA + + +False +-1.5707963267949 +15 +jTxlFtrXok2VlE3EA+IAugAA + + + +clMaroon +$00B9FFFF +50,236;50,201 +Iz8n1Vm2AECplTLk/g9l/gAA +hLrtDO2G80+MBE7w/xqYWAAA +oUU7LbB8z06lO7+JvHxYawAA + +False +1.5707963267949 +15 +Iz8n1Vm2AECplTLk/g9l/gAA + + +False +1.5707963267949 +30 +Iz8n1Vm2AECplTLk/g9l/gAA + + +False +-1.5707963267949 +15 +Iz8n1Vm2AECplTLk/g9l/gAA + + +False +-0.523598775598299 +30 +epHead +hbdfYKhKQEGS3E5YtXQxcAAA + + +False +0.523598775598299 +30 +epTail +6V1phiekNEigGlosS4iI4AAA + + +False +0.523598775598299 +25 +epHead +hbdfYKhKQEGS3E5YtXQxcAAA + + +False +-0.523598775598299 +25 +epTail +6V1phiekNEigGlosS4iI4AAA + + +False +-0.785398163397448 +40 +epHead +hbdfYKhKQEGS3E5YtXQxcAAA + + +False +0.785398163397448 +40 +epTail +6V1phiekNEigGlosS4iI4AAA + + +False +-1116 +-1432 +50 +8 +hbdfYKhKQEGS3E5YtXQxcAAA + + +False +-1116 +-1432 +50 +8 +6V1phiekNEigGlosS4iI4AAA + + + +clMaroon +$00B9FFFF +596 +348 +96 +32 +akeIYx92HUGIvgZi/7qslgAA + + +1 +work-task + + +False + + +False + + + +False +akeIYx92HUGIvgZi/7qslgAA + + +False +akeIYx92HUGIvgZi/7qslgAA + + +False +akeIYx92HUGIvgZi/7qslgAA + + + +clMaroon +$00B9FFFF +812,253;768,316;683,348 +vY9LoEpVCEyXKh6+k1PP4AAA +PZbcok41dUuxzpJHw+qcCQAA +J56vYtWN6EGOMGIGF6vlZAAA + +False +1.5707963267949 +15 +vY9LoEpVCEyXKh6+k1PP4AAA + + +False +1.5707963267949 +30 +vY9LoEpVCEyXKh6+k1PP4AAA + + +False +-1.5707963267949 +15 +vY9LoEpVCEyXKh6+k1PP4AAA + + + +clMaroon +$00B9FFFF +800,84;680,144 +Fxyv+zwMo0S0Ncj/Azp5dQAA +6X0FK2w+kUGeRH2fHqoCSwAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +Fxyv+zwMo0S0Ncj/Azp5dQAA + + +False +1.5707963267949 +30 +Fxyv+zwMo0S0Ncj/Azp5dQAA + + +False +-1.5707963267949 +15 +Fxyv+zwMo0S0Ncj/Azp5dQAA + + + +clMaroon +$00B9FFFF +800,77;705,104 +zYrgxJijVUeKhRuYPCJv9wAA +CVNk+aZ2kUS/be+Nv1opngAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +zYrgxJijVUeKhRuYPCJv9wAA + + +False +1.5707963267949 +30 +zYrgxJijVUeKhRuYPCJv9wAA + + +False +-1.5707963267949 +15 +zYrgxJijVUeKhRuYPCJv9wAA + + + +clMaroon +$00B9FFFF +800,71;740,80;720,79 +7VFRD/OOk0CHQPmyBREE7QAA +vza3XuXwdUy+RCEd4a7/AAAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +7VFRD/OOk0CHQPmyBREE7QAA + + +False +1.5707963267949 +30 +7VFRD/OOk0CHQPmyBREE7QAA + + +False +-1.5707963267949 +15 +7VFRD/OOk0CHQPmyBREE7QAA + + + +clMaroon +$00B9FFFF +800,59;744,48;704,41 +dr0yGiZ9w0ifqTGL7hJMYAAA +Sl7WaLUfCE+IreEUylmhuQAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +dr0yGiZ9w0ifqTGL7hJMYAAA + + +False +1.5707963267949 +30 +dr0yGiZ9w0ifqTGL7hJMYAAA + + +False +-1.5707963267949 +15 +dr0yGiZ9w0ifqTGL7hJMYAAA + + + +clMaroon +$00B9FFFF +805,321;780,348;691,358 +3we00g4TrUSP2RwRD/Zr6AAA +PZbcok41dUuxzpJHw+qcCQAA +jRMnNsOHm0ilwTcHjyhAsQAA + +False +1.5707963267949 +15 +3we00g4TrUSP2RwRD/Zr6AAA + + +False +1.5707963267949 +30 +3we00g4TrUSP2RwRD/Zr6AAA + + +False +-1.5707963267949 +15 +3we00g4TrUSP2RwRD/Zr6AAA + + + +clMaroon +$00B9FFFF +816,177;748,300;668,348 +jKTbz3HBukOB4vjFAHBjhwAA +PZbcok41dUuxzpJHw+qcCQAA +yTQvkxa2EU+paqJboa22BgAA + +False +1.5707963267949 +15 +jKTbz3HBukOB4vjFAHBjhwAA + + +False +1.5707963267949 +30 +jKTbz3HBukOB4vjFAHBjhwAA + + +False +-1.5707963267949 +15 +jKTbz3HBukOB4vjFAHBjhwAA + + + +clMaroon +$00B9FFFF +800,369;780,376;691,368 +wKnDb+gcSEGIVFdvrqRcMwAA +PZbcok41dUuxzpJHw+qcCQAA +sTVRqiD/L0m+CYPwqsjRYQAA + +False +1.5707963267949 +15 +wKnDb+gcSEGIVFdvrqRcMwAA + + +False +1.5707963267949 +30 +wKnDb+gcSEGIVFdvrqRcMwAA + + +False +-1.5707963267949 +15 +wKnDb+gcSEGIVFdvrqRcMwAA + + + +clMaroon +$00B9FFFF +394,360;268,376 +dQUIyAabUkW3BrzevL6ajQAA +b4fOXlO640eOSeo31HjDiQAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +dQUIyAabUkW3BrzevL6ajQAA + + +False +1.5707963267949 +30 +dQUIyAabUkW3BrzevL6ajQAA + + +False +-1.5707963267949 +15 +dQUIyAabUkW3BrzevL6ajQAA + + +False +-0.523598775598299 +30 +epHead +m+4bIFntFkmXMzdv2SUAzQAA + + +False +0.523598775598299 +30 +epTail +G5oIOUpHjU6CAVOHO5cbSQAA + + +False +0.523598775598299 +25 +epHead +m+4bIFntFkmXMzdv2SUAzQAA + + +False +-0.523598775598299 +25 +epTail +G5oIOUpHjU6CAVOHO5cbSQAA + + +False +-0.785398163397448 +40 +epHead +m+4bIFntFkmXMzdv2SUAzQAA + + +False +0.785398163397448 +40 +epTail +G5oIOUpHjU6CAVOHO5cbSQAA + + +False +-1032 +-996 +50 +8 +m+4bIFntFkmXMzdv2SUAzQAA + + +False +-1032 +-996 +50 +8 +G5oIOUpHjU6CAVOHO5cbSQAA + + + +clMaroon +$00B9FFFF +513,356;596,360 +b9LJxRkpzEy/d2cpGE3jlAAA +PZbcok41dUuxzpJHw+qcCQAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +b9LJxRkpzEy/d2cpGE3jlAAA + + +False +1.5707963267949 +30 +b9LJxRkpzEy/d2cpGE3jlAAA + + +False +-1.5707963267949 +15 +b9LJxRkpzEy/d2cpGE3jlAAA + + +False +-0.523598775598299 +30 +epHead +MEkNsUXvgEqT0nEOCk4PgAAA + + +False +0.523598775598299 +30 +epTail +kZf004keokGnnIbJREbJ8gAA + + +False +0.523598775598299 +25 +epHead +MEkNsUXvgEqT0nEOCk4PgAAA + + +False +-0.523598775598299 +25 +epTail +kZf004keokGnnIbJREbJ8gAA + + +False +-0.785398163397448 +40 +epHead +MEkNsUXvgEqT0nEOCk4PgAAA + + +False +0.785398163397448 +40 +epTail +kZf004keokGnnIbJREbJ8gAA + + +False +-1032 +-996 +50 +8 +MEkNsUXvgEqT0nEOCk4PgAAA + + +False +-1032 +-996 +50 +8 +kZf004keokGnnIbJREbJ8gAA + + + +clMaroon +$00B9FFFF +394,350;279,343 +4cv8mepYQESw1qV+1hogLAAA +myJOly92w06UWOgls7OciAAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +4cv8mepYQESw1qV+1hogLAAA + + +False +1.5707963267949 +30 +4cv8mepYQESw1qV+1hogLAAA + + +False +-1.5707963267949 +15 +4cv8mepYQESw1qV+1hogLAAA + + +False +-0.523598775598299 +30 +epHead +PlQ+p7G7JUegK51TuNbuLgAA + + +False +0.523598775598299 +30 +epTail +50uCeDif8kKZsdKCSOxuyQAA + + +False +0.523598775598299 +25 +epHead +PlQ+p7G7JUegK51TuNbuLgAA + + +False +-0.523598775598299 +25 +epTail +50uCeDif8kKZsdKCSOxuyQAA + + +False +-0.785398163397448 +40 +epHead +PlQ+p7G7JUegK51TuNbuLgAA + + +False +0.785398163397448 +40 +epTail +50uCeDif8kKZsdKCSOxuyQAA + + +False +-1032 +-996 +50 +8 +PlQ+p7G7JUegK51TuNbuLgAA + + +False +-1032 +-996 +50 +8 +50uCeDif8kKZsdKCSOxuyQAA + + + +clMaroon +$00B9FFFF +394,338;273,307 +dle0km/8mEy/njpP8YzaVgAA +tJdxQ2n6kUCuF/faDlNrnwAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +dle0km/8mEy/njpP8YzaVgAA + + +False +1.5707963267949 +30 +dle0km/8mEy/njpP8YzaVgAA + + +False +-1.5707963267949 +15 +dle0km/8mEy/njpP8YzaVgAA + + +False +-0.523598775598299 +30 +epHead +YvCannseaUmrs70XgLp5GQAA + + +False +0.523598775598299 +30 +epTail +Pqls1twyrUOYZaqZAZic8QAA + + +False +0.523598775598299 +25 +epHead +YvCannseaUmrs70XgLp5GQAA + + +False +-0.523598775598299 +25 +epTail +Pqls1twyrUOYZaqZAZic8QAA + + +False +-0.785398163397448 +40 +epHead +YvCannseaUmrs70XgLp5GQAA + + +False +0.785398163397448 +40 +epTail +Pqls1twyrUOYZaqZAZic8QAA + + +False +-1032 +-996 +50 +8 +YvCannseaUmrs70XgLp5GQAA + + +False +-1032 +-996 +50 +8 +Pqls1twyrUOYZaqZAZic8QAA + + + +clMaroon +$00B9FFFF +281,251;334,254 +bLyKzfToT0G3pHx4RMAW5wAA +mGag8uVpX0+zFhYfpZD08wAA +3rdXqG4KQ0W+d59DtblscAAA + +False +1.5707963267949 +15 +bLyKzfToT0G3pHx4RMAW5wAA + + +False +1.5707963267949 +30 +bLyKzfToT0G3pHx4RMAW5wAA + + +False +-1.5707963267949 +15 +bLyKzfToT0G3pHx4RMAW5wAA + + +False +-0.523598775598299 +30 +epHead +stbsvaZCJkG2vJI5d3KxdwAA + + +False +0.523598775598299 +30 +epTail +dIPnH0JAR0m2CEwio1XRKwAA + + +False +0.523598775598299 +25 +epHead +stbsvaZCJkG2vJI5d3KxdwAA + + +False +-0.523598775598299 +25 +epTail +dIPnH0JAR0m2CEwio1XRKwAA + + +False +-0.785398163397448 +40 +epHead +stbsvaZCJkG2vJI5d3KxdwAA + + +False +0.785398163397448 +40 +epTail +dIPnH0JAR0m2CEwio1XRKwAA + + +False +-1032 +-996 +50 +8 +stbsvaZCJkG2vJI5d3KxdwAA + + +False +-1032 +-996 +50 +8 +dIPnH0JAR0m2CEwio1XRKwAA + + + +clMaroon +$00B9FFFF +596 +288 +121 +32 +HhCFPxH60EuycMQ2nfXWCQAA + + +1 +analysis-task + + +False + + +False + + + +False +HhCFPxH60EuycMQ2nfXWCQAA + + +False +HhCFPxH60EuycMQ2nfXWCQAA + + +False +HhCFPxH60EuycMQ2nfXWCQAA + + + +clMaroon +$00B9FFFF +818,105;748,252;683,288 +b/CTfa0mFUyr1SeIhcoTFwAA +5CbxRWAfz0OazD2BC6LOtgAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +b/CTfa0mFUyr1SeIhcoTFwAA + + +False +1.5707963267949 +30 +b/CTfa0mFUyr1SeIhcoTFwAA + + +False +-1.5707963267949 +15 +b/CTfa0mFUyr1SeIhcoTFwAA + + + +clMaroon +$00B9FFFF +492,39;472,35 +gIzn+8O0A0ux4mJbpKNkEwAA +Ms00Ghmc4EasjVjv6tSf/wAA +vaX40+6yy0+QL2+OqVsz5wAA + +False +1.5707963267949 +15 +gIzn+8O0A0ux4mJbpKNkEwAA + + +False +1.5707963267949 +30 +gIzn+8O0A0ux4mJbpKNkEwAA + + +False +-1.5707963267949 +15 +gIzn+8O0A0ux4mJbpKNkEwAA + + + +clMaroon +$00B9FFFF +492,52;444,59 +4d0O1iKcq0+kIW5Bpb2joAAA +P24tgRFfhEi1BROVlu7OOgAA +vaX40+6yy0+QL2+OqVsz5wAA + +False +1.5707963267949 +15 +4d0O1iKcq0+kIW5Bpb2joAAA + + +False +1.5707963267949 +30 +4d0O1iKcq0+kIW5Bpb2joAAA + + +False +-1.5707963267949 +15 +4d0O1iKcq0+kIW5Bpb2joAAA + + + +clMaroon +$00B9FFFF +251,95;372,140;387,242 +63BfEROBLEGGjWv9qa4YPgAA +mGag8uVpX0+zFhYfpZD08wAA +65HjSOXEV02PyHHndkIc4wAA + +False +1.5707963267949 +15 +63BfEROBLEGGjWv9qa4YPgAA + + +False +1.5707963267949 +30 +63BfEROBLEGGjWv9qa4YPgAA + + +False +-1.5707963267949 +15 +63BfEROBLEGGjWv9qa4YPgAA + + +False +-0.523598775598299 +30 +epHead +1q5yuUkA0kGBWLWrt4cfxwAA + + +False +0.523598775598299 +30 +epTail +7zDlLto/L02ptrUw9yDPUQAA + + +False +0.523598775598299 +25 +epHead +1q5yuUkA0kGBWLWrt4cfxwAA + + +False +-0.523598775598299 +25 +epTail +7zDlLto/L02ptrUw9yDPUQAA + + +False +-0.785398163397448 +40 +epHead +1q5yuUkA0kGBWLWrt4cfxwAA + + +False +0.785398163397448 +40 +epTail +7zDlLto/L02ptrUw9yDPUQAA + + +False +-1000 +-1000 +50 +8 +1q5yuUkA0kGBWLWrt4cfxwAA + + +False +-1000 +-1000 +50 +8 +7zDlLto/L02ptrUw9yDPUQAA + + + +clMaroon +$00B9FFFF +234,51;380,112;388,242 +aM8L++tUe0CN4YEwoVH/cwAA +mGag8uVpX0+zFhYfpZD08wAA +D0y3HjNuyEeD8w3pOiVL9gAA + +False +1.5707963267949 +15 +aM8L++tUe0CN4YEwoVH/cwAA + + +False +1.5707963267949 +30 +aM8L++tUe0CN4YEwoVH/cwAA + + +False +-1.5707963267949 +15 +aM8L++tUe0CN4YEwoVH/cwAA + + +False +-0.523598775598299 +30 +epHead +jZEe3B1pgkqg0horzFKWzwAA + + +False +0.523598775598299 +30 +epTail +OOVxi4WGDkKWer/0+AwIPgAA + + +False +0.523598775598299 +25 +epHead +jZEe3B1pgkqg0horzFKWzwAA + + +False +-0.523598775598299 +25 +epTail +OOVxi4WGDkKWer/0+AwIPgAA + + +False +-0.785398163397448 +40 +epHead +jZEe3B1pgkqg0horzFKWzwAA + + +False +0.785398163397448 +40 +epTail +OOVxi4WGDkKWer/0+AwIPgAA + + +False +-1000 +-1000 +50 +8 +jZEe3B1pgkqg0horzFKWzwAA + + +False +-1000 +-1000 +50 +8 +OOVxi4WGDkKWer/0+AwIPgAA + + + +clMaroon +$00B9FFFF +513,338;596,318 ++pKtO8/uIk+Z4sYfrACDGgAA +5CbxRWAfz0OazD2BC6LOtgAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 ++pKtO8/uIk+Z4sYfrACDGgAA + + +False +1.5707963267949 +30 ++pKtO8/uIk+Z4sYfrACDGgAA + + +False +-1.5707963267949 +15 ++pKtO8/uIk+Z4sYfrACDGgAA + + +False +-0.523598775598299 +30 +epHead +LJwRpPfpFE+v3TCpYFoQmgAA + + +False +0.523598775598299 +30 +epTail +XPjUoHBhGkOE8kyb9uqy1AAA + + +False +0.523598775598299 +25 +epHead +LJwRpPfpFE+v3TCpYFoQmgAA + + +False +-0.523598775598299 +25 +epTail +XPjUoHBhGkOE8kyb9uqy1AAA + + +False +-0.785398163397448 +40 +epHead +LJwRpPfpFE+v3TCpYFoQmgAA + + +False +0.785398163397448 +40 +epTail +XPjUoHBhGkOE8kyb9uqy1AAA + + +False +-1000 +-1000 +50 +8 +LJwRpPfpFE+v3TCpYFoQmgAA + + +False +-1000 +-1000 +50 +8 +XPjUoHBhGkOE8kyb9uqy1AAA + + + +clMaroon +$00B9FFFF +488,338;616,283 +nmuSEcLCrEGvKBQ/lU47BwAA +HIeb6G3eG0y9ALZQK+J4gQAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +nmuSEcLCrEGvKBQ/lU47BwAA + + +False +1.5707963267949 +30 +nmuSEcLCrEGvKBQ/lU47BwAA + + +False +-1.5707963267949 +15 +nmuSEcLCrEGvKBQ/lU47BwAA + + +False +-0.523598775598299 +30 +epHead +L7a4CYmPC0uUj33RRoWiJgAA + + +False +0.523598775598299 +30 +epTail +7QebQWj8AEy2+oMl4FpmTAAA + + +False +0.523598775598299 +25 +epHead +L7a4CYmPC0uUj33RRoWiJgAA + + +False +-0.523598775598299 +25 +epTail +7QebQWj8AEy2+oMl4FpmTAAA + + +False +-0.785398163397448 +40 +epHead +L7a4CYmPC0uUj33RRoWiJgAA + + +False +0.785398163397448 +40 +epTail +7QebQWj8AEy2+oMl4FpmTAAA + + +False +-1000 +-1000 +50 +8 +L7a4CYmPC0uUj33RRoWiJgAA + + +False +-1000 +-1000 +50 +8 +7QebQWj8AEy2+oMl4FpmTAAA + + + +clMaroon +$00B9FFFF +478,338;627,247 +ByfvBxwbrkGP5+WxTb1ZvQAA +kliHiKyFiEyM4tl1y2PxqQAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +ByfvBxwbrkGP5+WxTb1ZvQAA + + +False +1.5707963267949 +30 +ByfvBxwbrkGP5+WxTb1ZvQAA + + +False +-1.5707963267949 +15 +ByfvBxwbrkGP5+WxTb1ZvQAA + + +False +-0.523598775598299 +30 +epHead +n6mfTSaq+k2RnTd3faTkxQAA + + +False +0.523598775598299 +30 +epTail ++Ekcl1W/rkuftPam8GOdiQAA + + +False +0.523598775598299 +25 +epHead +n6mfTSaq+k2RnTd3faTkxQAA + + +False +-0.523598775598299 +25 +epTail ++Ekcl1W/rkuftPam8GOdiQAA + + +False +-0.785398163397448 +40 +epHead +n6mfTSaq+k2RnTd3faTkxQAA + + +False +0.785398163397448 +40 +epTail ++Ekcl1W/rkuftPam8GOdiQAA + + +False +-1000 +-1000 +50 +8 +n6mfTSaq+k2RnTd3faTkxQAA + + +False +-1000 +-1000 +50 +8 ++Ekcl1W/rkuftPam8GOdiQAA + + + +clMaroon +$00B9FFFF +471,338;627,211 +plxmjyQkfUmt2P8uBP0I6AAA +6WD/injqLkGLLLrBFiLSOQAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +plxmjyQkfUmt2P8uBP0I6AAA + + +False +1.5707963267949 +30 +plxmjyQkfUmt2P8uBP0I6AAA + + +False +-1.5707963267949 +15 +plxmjyQkfUmt2P8uBP0I6AAA + + +False +-0.523598775598299 +30 +epHead +TdvnjlqSk0mqUzoHhiVfUAAA + + +False +0.523598775598299 +30 +epTail +2nuMoO9sH06KowfPyWX8XwAA + + +False +0.523598775598299 +25 +epHead +TdvnjlqSk0mqUzoHhiVfUAAA + + +False +-0.523598775598299 +25 +epTail +2nuMoO9sH06KowfPyWX8XwAA + + +False +-0.785398163397448 +40 +epHead +TdvnjlqSk0mqUzoHhiVfUAAA + + +False +0.785398163397448 +40 +epTail +2nuMoO9sH06KowfPyWX8XwAA + + +False +-1000 +-1000 +50 +8 +TdvnjlqSk0mqUzoHhiVfUAAA + + +False +-1000 +-1000 +50 +8 +2nuMoO9sH06KowfPyWX8XwAA + + + +clMaroon +$00B9FFFF +596,172;532,188;420,242 +PG5XF/RdmEuhi42wm0MztgAA +mGag8uVpX0+zFhYfpZD08wAA +6X0FK2w+kUGeRH2fHqoCSwAA + +False +1.5707963267949 +15 +PG5XF/RdmEuhi42wm0MztgAA + + +False +1.5707963267949 +30 +PG5XF/RdmEuhi42wm0MztgAA + + +False +-1.5707963267949 +15 +PG5XF/RdmEuhi42wm0MztgAA + + +False +-0.523598775598299 +30 +epHead +v3GPPcr2HE2FA9MsBQRCJAAA + + +False +0.523598775598299 +30 +epTail +7yl9aNzP9UWJYqcoZ5ct1gAA + + +False +0.523598775598299 +25 +epHead +v3GPPcr2HE2FA9MsBQRCJAAA + + +False +-0.523598775598299 +25 +epTail +7yl9aNzP9UWJYqcoZ5ct1gAA + + +False +-0.785398163397448 +40 +epHead +v3GPPcr2HE2FA9MsBQRCJAAA + + +False +0.785398163397448 +40 +epTail +7yl9aNzP9UWJYqcoZ5ct1gAA + + +False +-1000 +-1000 +50 +8 +v3GPPcr2HE2FA9MsBQRCJAAA + + +False +-1000 +-1000 +50 +8 +7yl9aNzP9UWJYqcoZ5ct1gAA + + + +clMaroon +$00B9FFFF +604,135;516,164;409,242 +iEqKHNrjWEaqo2MpcoTeAQAA +mGag8uVpX0+zFhYfpZD08wAA +CVNk+aZ2kUS/be+Nv1opngAA + +False +1.5707963267949 +15 +iEqKHNrjWEaqo2MpcoTeAQAA + + +False +1.5707963267949 +30 +iEqKHNrjWEaqo2MpcoTeAQAA + + +False +-1.5707963267949 +15 +iEqKHNrjWEaqo2MpcoTeAQAA + + +False +-0.523598775598299 +30 +epHead +8ERRXx11LUue4tf/9sRJGwAA + + +False +0.523598775598299 +30 +epTail +oZNlQDVXUEObs3iZw4x9YgAA + + +False +0.523598775598299 +25 +epHead +8ERRXx11LUue4tf/9sRJGwAA + + +False +-0.523598775598299 +25 +epTail +oZNlQDVXUEObs3iZw4x9YgAA + + +False +-0.785398163397448 +40 +epHead +8ERRXx11LUue4tf/9sRJGwAA + + +False +0.785398163397448 +40 +epTail +oZNlQDVXUEObs3iZw4x9YgAA + + +False +-1000 +-1000 +50 +8 +8ERRXx11LUue4tf/9sRJGwAA + + +False +-1000 +-1000 +50 +8 +oZNlQDVXUEObs3iZw4x9YgAA + + + +clMaroon +$00B9FFFF +612,91;488,144;402,242 +vqzVjlQpAEeeuOH/0tJhSAAA +mGag8uVpX0+zFhYfpZD08wAA +vza3XuXwdUy+RCEd4a7/AAAA + +False +1.5707963267949 +15 +vqzVjlQpAEeeuOH/0tJhSAAA + + +False +1.5707963267949 +30 +vqzVjlQpAEeeuOH/0tJhSAAA + + +False +-1.5707963267949 +15 +vqzVjlQpAEeeuOH/0tJhSAAA + + +False +-0.523598775598299 +30 +epHead +lWAMkSVvoUOg4oaaawtIxgAA + + +False +0.523598775598299 +30 +epTail +OAiy1ef+XUG7aqN4fnwIDQAA + + +False +0.523598775598299 +25 +epHead +lWAMkSVvoUOg4oaaawtIxgAA + + +False +-0.523598775598299 +25 +epTail +OAiy1ef+XUG7aqN4fnwIDQAA + + +False +-0.785398163397448 +40 +epHead +lWAMkSVvoUOg4oaaawtIxgAA + + +False +0.785398163397448 +40 +epTail +OAiy1ef+XUG7aqN4fnwIDQAA + + +False +-1000 +-1000 +50 +8 +lWAMkSVvoUOg4oaaawtIxgAA + + +False +-1000 +-1000 +50 +8 +OAiy1ef+XUG7aqN4fnwIDQAA + + + +clMaroon +$00B9FFFF +615,47;456,128;397,242 +/EsTz8Iu7ECqGh594+MkSQAA +mGag8uVpX0+zFhYfpZD08wAA +Sl7WaLUfCE+IreEUylmhuQAA + +False +1.5707963267949 +15 +/EsTz8Iu7ECqGh594+MkSQAA + + +False +1.5707963267949 +30 +/EsTz8Iu7ECqGh594+MkSQAA + + +False +-1.5707963267949 +15 +/EsTz8Iu7ECqGh594+MkSQAA + + +False +-0.523598775598299 +30 +epHead +gm2xbeKGuUu+OipRQpK+OQAA + + +False +0.523598775598299 +30 +epTail +TTMaOnOcrUGQ/DPwfi1ITwAA + + +False +0.523598775598299 +25 +epHead +gm2xbeKGuUu+OipRQpK+OQAA + + +False +-0.523598775598299 +25 +epTail +TTMaOnOcrUGQ/DPwfi1ITwAA + + +False +-0.785398163397448 +40 +epHead +gm2xbeKGuUu+OipRQpK+OQAA + + +False +0.785398163397448 +40 +epTail +TTMaOnOcrUGQ/DPwfi1ITwAA + + +False +-1000 +-1000 +50 +8 +gm2xbeKGuUu+OipRQpK+OQAA + + +False +-1000 +-1000 +50 +8 +TTMaOnOcrUGQ/DPwfi1ITwAA + + + +clMaroon +$00B9FFFF +12 +328 +76 +78 +MLBX+NGx9kymQ76b9EAKuwAA + + +1 +tech-leader + + +False + + +False + + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + + +clMaroon +$00B9FFFF +50,313;50,328 +WE9oOq/kF0adq9jjlgnt+QAA +zxkaRnUQnkGeblZpKwGHRgAA +oUU7LbB8z06lO7+JvHxYawAA + +False +1.5707963267949 +15 +WE9oOq/kF0adq9jjlgnt+QAA + + +False +1.5707963267949 +30 +WE9oOq/kF0adq9jjlgnt+QAA + + +False +-1.5707963267949 +15 +WE9oOq/kF0adq9jjlgnt+QAA + + +False +-0.523598775598299 +30 +epHead +VpLHTBYio0+yCxvIWp4QywAA + + +False +0.523598775598299 +30 +epTail +6sfC0Hl2I0uatFIXeo2nzwAA + + +False +0.523598775598299 +25 +epHead +VpLHTBYio0+yCxvIWp4QywAA + + +False +-0.523598775598299 +25 +epTail +6sfC0Hl2I0uatFIXeo2nzwAA + + +False +-0.785398163397448 +40 +epHead +VpLHTBYio0+yCxvIWp4QywAA + + +False +0.785398163397448 +40 +epTail +6sfC0Hl2I0uatFIXeo2nzwAA + + +False +-1000 +-1000 +50 +8 +VpLHTBYio0+yCxvIWp4QywAA + + +False +-1000 +-1000 +50 +8 +6sfC0Hl2I0uatFIXeo2nzwAA + + + + + +compact-analysis-design-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +82mxJtBoS0iD7vWybIrikwAA +31 + +clMaroon +$00BCBEFC +196 +260 +134 +30 +function-feature-list-file + + + +clMaroon +$00B9FFFF +40 +277 +152 +32 +TMPdkgNID0u772le0sCmLgAA + + +1 +new-ideas-action + + +False + + +False + + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + + +clMaroon +$00B9FFFF +20 +376 +175 +32 +Kh+ykp9GgU6PQXUx+CGLxgAA + + +1 +new-demond-action + + +False + + +False + + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + + +clMaroon +$00B9FFFF +272 +329 +188 +32 +06qF2g1ff02RsBbBfLLo1gAA + + +1 +feature-analysis-task + + +False + + +False + + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + + +clMaroon +$00BCBEFC +52 +328 +123 +30 +note record in tagdoc + + + +clMaroon +$00B9FFFF +114,328;115,308 +iyiy7059g0u9oLbvhyWMJwAA +nq2K2eTwOUCNMF6eKE4KDQAA + + +clMaroon +$00B9FFFF +109,376;111,357 +nq2K2eTwOUCNMF6eKE4KDQAA +o5iA92FZHkuxkU8FJDrcDwAA + + +clMaroon +$00B9FFFF +272,343;174,342 +nq2K2eTwOUCNMF6eKE4KDQAA +7jqlLyDAzESQnbx/rHQ2dgAA + + +clMaroon +$00B9FFFF +191,308;292,329 +ZE6XGr3H4E+M1Lu1nRZ9BQAA +7jqlLyDAzESQnbx/rHQ2dgAA +iyiy7059g0u9oLbvhyWMJwAA + +1.5707963267949 +15 +trimple-catagory +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +1.5707963267949 +30 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-1.5707963267949 +15 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-0.523598775598299 +30 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.523598775598299 +30 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +0.523598775598299 +25 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +-0.523598775598299 +25 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-0.785398163397448 +40 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.785398163397448 +40 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-1244 +-964 +50 +8 +irMBt7uWtEaxRopZEBcfwgAA + + +False +-1244 +-964 +50 +8 +eu/8Siwir02KNGkRDOEa9gAA + + + +clMaroon +$00B9FFFF +189,376;277,360 +li4LwavBrE+pggONaW7QkwAA +7jqlLyDAzESQnbx/rHQ2dgAA +o5iA92FZHkuxkU8FJDrcDwAA + +1.5707963267949 +15 +trimple-catagory +li4LwavBrE+pggONaW7QkwAA + + +False +1.5707963267949 +30 +li4LwavBrE+pggONaW7QkwAA + + +False +-1.5707963267949 +15 +li4LwavBrE+pggONaW7QkwAA + + +False +-0.523598775598299 +30 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.523598775598299 +30 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +0.523598775598299 +25 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-0.523598775598299 +25 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-0.785398163397448 +40 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.785398163397448 +40 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-1188 +-964 +50 +8 +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-1188 +-964 +50 +8 +gehfWFMIjEKeVzAcdHneqgAA + + + +clMaroon +$00B9FFFF +284,289;343,329 +7jqlLyDAzESQnbx/rHQ2dgAA +njRTD7ql6UCc1F0jjK/nOwAA + + +clMaroon +$00BCBEFC +340 +132 +152 +38 +function-module-list-file +class-diagram + + + +clMaroon +$00FF80FF +312 +380 +121 +32 +mx6wTw6+KEuGtAr0iRUXJwAA + + +1 +analysis-task + + +False + + +False + + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + + +clMaroon +$00B9FFFF +508 +205 +114 +32 +a7yZcyAyl02YNl0/FQziyQAA + + +1 +layer-design + + +False + + +False + + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + + +clMaroon +$00BCBEFC +548 +132 +171 +38 +function-module-struct-diagram +architech-diagram + + + +clMaroon +$00B9FFFF +614,169;579,205 +gwBYAnNeEk2uCxTsZUvhjAAA +m651NpyIZEyDLHqpx98poQAA + + +clMaroon +$00BCBEFC +536 +300 +132 +113 +classic-feature-list +cmd-args-design +running-param-design +.lex/.gmr/.type/.ui +time-sequence-diagram +E-R-diagram +sql-tbl + + + +clMaroon +$00B9FFFF +280 +205 +175 +32 +tnTkvoZxVkmVjIgd8K6VcwAA + + +1 +module-design-task + + +False + + +False + + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + + +clMaroon +$00B9FFFF +402,169;377,205 +BghWDCz5OkKF8K6lTv+jGQAA +LwUxcozs1UOu4jaFLiFsSQAA + + +clMaroon +$00B9FFFF +454,220;508,220 +l+7wPt1sHES9zLE77waRvAAA +gwBYAnNeEk2uCxTsZUvhjAAA +BghWDCz5OkKF8K6lTv+jGQAA + +1.5707963267949 +15 +category +l+7wPt1sHES9zLE77waRvAAA + + +False +1.5707963267949 +30 +l+7wPt1sHES9zLE77waRvAAA + + +False +-1.5707963267949 +15 +l+7wPt1sHES9zLE77waRvAAA + + +False +-0.523598775598299 +30 +epHead +iUFGIr8VC0SljnWHghKcFAAA + + +False +0.523598775598299 +30 +epTail +DF7gLd86sEO0pjZnITQi5QAA + + +False +0.523598775598299 +25 +epHead +iUFGIr8VC0SljnWHghKcFAAA + + +False +-0.523598775598299 +25 +epTail +DF7gLd86sEO0pjZnITQi5QAA + + +False +-0.785398163397448 +40 +epHead +iUFGIr8VC0SljnWHghKcFAAA + + +False +0.785398163397448 +40 +epTail +DF7gLd86sEO0pjZnITQi5QAA + + +False +-1056 +-968 +50 +8 +iUFGIr8VC0SljnWHghKcFAAA + + +False +-1056 +-968 +50 +8 +DF7gLd86sEO0pjZnITQi5QAA + + + +clMaroon +$00B9FFFF +384 +256 +229 +32 +hi9GvwnwFkKy8F8f44i8mgAA + + +1 +classic-app-feature-design + + +False + + +False + + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + + +clMaroon +$00B9FFFF +536,302;518,287 +5o0i3tmiW0+wft5WJgf5swAA +tOec8LvaOEuTNI/k5kwMrwAA + + +clMaroon +$00B9FFFF +365,329;367,236 +Fcx+CoxfEEarzL288+IirQAA +BghWDCz5OkKF8K6lTv+jGQAA +7jqlLyDAzESQnbx/rHQ2dgAA + +1.5707963267949 +15 +design +Fcx+CoxfEEarzL288+IirQAA + + +False +1.5707963267949 +30 +Fcx+CoxfEEarzL288+IirQAA + + +False +-1.5707963267949 +15 +Fcx+CoxfEEarzL288+IirQAA + + +False +-0.523598775598299 +30 +epHead +sYEr8xJzY0uFxXGAJQj62QAA + + +False +0.523598775598299 +30 +epTail +NYZAYRfo+EqcnxFwEX16dAAA + + +False +0.523598775598299 +25 +epHead +sYEr8xJzY0uFxXGAJQj62QAA + + +False +-0.523598775598299 +25 +epTail +NYZAYRfo+EqcnxFwEX16dAAA + + +False +-0.785398163397448 +40 +epHead +sYEr8xJzY0uFxXGAJQj62QAA + + +False +0.785398163397448 +40 +epTail +NYZAYRfo+EqcnxFwEX16dAAA + + +False +-1000 +-1000 +50 +8 +sYEr8xJzY0uFxXGAJQj62QAA + + +False +-1000 +-1000 +50 +8 +NYZAYRfo+EqcnxFwEX16dAAA + + + +clMaroon +$00B9FFFF +408,236;459,256 +CcwrYONHfkWTOXKrfeQn0wAA +5o0i3tmiW0+wft5WJgf5swAA +BghWDCz5OkKF8K6lTv+jGQAA + +False +1.5707963267949 +15 +CcwrYONHfkWTOXKrfeQn0wAA + + +False +1.5707963267949 +30 +CcwrYONHfkWTOXKrfeQn0wAA + + +False +-1.5707963267949 +15 +CcwrYONHfkWTOXKrfeQn0wAA + + +False +-0.523598775598299 +30 +epHead +0IK4qX1pZ0mmy0tW1H9wYwAA + + +False +0.523598775598299 +30 +epTail +5rkAHpBOt0OZxpkOhYsRfQAA + + +False +0.523598775598299 +25 +epHead +0IK4qX1pZ0mmy0tW1H9wYwAA + + +False +-0.523598775598299 +25 +epTail +5rkAHpBOt0OZxpkOhYsRfQAA + + +False +-0.785398163397448 +40 +epHead +0IK4qX1pZ0mmy0tW1H9wYwAA + + +False +0.785398163397448 +40 +epTail +5rkAHpBOt0OZxpkOhYsRfQAA + + +False +-1000 +-1000 +50 +8 +0IK4qX1pZ0mmy0tW1H9wYwAA + + +False +-1000 +-1000 +50 +8 +5rkAHpBOt0OZxpkOhYsRfQAA + + + +clMaroon +$00B9FFFF +636 +233 +108 +32 +2LU3javC70yzEUTHd0L+VAAA + + +1 +end-of-proc + + +False + + +False + + + +False +2LU3javC70yzEUTHd0L+VAAA + + +False +2LU3javC70yzEUTHd0L+VAAA + + +False +2LU3javC70yzEUTHd0L+VAAA + + + +clMaroon +$00B9FFFF +612,257;636,254 +D/6a5FDvaU2giul+pputrgAA +E3qklen4DEiMkHMgk5C+JQAA +5o0i3tmiW0+wft5WJgf5swAA + +False +1.5707963267949 +15 +D/6a5FDvaU2giul+pputrgAA + + +False +1.5707963267949 +30 +D/6a5FDvaU2giul+pputrgAA + + +False +-1.5707963267949 +15 +D/6a5FDvaU2giul+pputrgAA + + +False +-0.523598775598299 +30 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +0.523598775598299 +30 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +0.523598775598299 +25 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +-0.523598775598299 +25 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +-0.785398163397448 +40 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +0.785398163397448 +40 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +-1000 +-1000 +50 +8 +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +-1000 +-1000 +50 +8 +fj2tpTa4tk+iVJg+TnTWUwAA + + + +clMaroon +$00B9FFFF +621,233;636,236 +YHQtCOYCXU6JlB3IIm7OuQAA +E3qklen4DEiMkHMgk5C+JQAA +gwBYAnNeEk2uCxTsZUvhjAAA + +False +1.5707963267949 +15 +YHQtCOYCXU6JlB3IIm7OuQAA + + +False +1.5707963267949 +30 +YHQtCOYCXU6JlB3IIm7OuQAA + + +False +-1.5707963267949 +15 +YHQtCOYCXU6JlB3IIm7OuQAA + + +False +-0.523598775598299 +30 +epHead +e/jJUmPBsUuFL+zaG4xKZgAA + + +False +0.523598775598299 +30 +epTail +L2yiBfWQi0CXNccTHoAyQQAA + + +False +0.523598775598299 +25 +epHead +e/jJUmPBsUuFL+zaG4xKZgAA + + +False +-0.523598775598299 +25 +epTail +L2yiBfWQi0CXNccTHoAyQQAA + + +False +-0.785398163397448 +40 +epHead +e/jJUmPBsUuFL+zaG4xKZgAA + + +False +0.785398163397448 +40 +epTail +L2yiBfWQi0CXNccTHoAyQQAA + + +False +-1000 +-1000 +50 +8 +e/jJUmPBsUuFL+zaG4xKZgAA + + +False +-1000 +-1000 +50 +8 +L2yiBfWQi0CXNccTHoAyQQAA + + + +clMaroon +$00B9FFFF +336,236;289,260 +njRTD7ql6UCc1F0jjK/nOwAA +BghWDCz5OkKF8K6lTv+jGQAA + + +clMaroon +$00B9FFFF +532,205;455,169 +LwUxcozs1UOu4jaFLiFsSQAA +gwBYAnNeEk2uCxTsZUvhjAAA + + +clMaroon +$00B9FFFF +370,380;367,360 +dOqivJTIIUigVVTdSjV6NQAA +7jqlLyDAzESQnbx/rHQ2dgAA +eow26LjeFU6GRSdSgeT85AAA + +False +1.5707963267949 +15 +dOqivJTIIUigVVTdSjV6NQAA + + +False +1.5707963267949 +30 +dOqivJTIIUigVVTdSjV6NQAA + + +False +-1.5707963267949 +15 +dOqivJTIIUigVVTdSjV6NQAA + + +False +-0.523598775598299 +30 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +0.523598775598299 +30 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +0.523598775598299 +25 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +-0.523598775598299 +25 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +-0.785398163397448 +40 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +0.785398163397448 +40 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +-1000 +-1000 +50 +8 +tj9PxTnKWUOoKg0de6lHnQAA + + +False +-1000 +-1000 +50 +8 +pOTqH/7r40O4aKzqIuqcswAA + + + +clMaroon +$00B9FFFF +384,272;329,273 +njRTD7ql6UCc1F0jjK/nOwAA +5o0i3tmiW0+wft5WJgf5swAA + + + + +SE-analysis-designprocedure +yePcB6NdXUG1SBs2wQJA7gAA + +TKJqvI0CWUmyoh/jntYGBwAA +73 + +clMaroon +$00B9FFFF +64 +161 +113 +32 +h9lhv0QFq0aFwcWza3gsDAAA + + +1 +list-external + + +False + + +False + + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + + +clMaroon +clYellow +260 +184 +196 +32 +XmSQJXVfo0qkbNCidOBOzwAA + + +1 +actor & action analysis + + +False + + +False + + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + + +clMaroon +$00B9FFFF +204 +112 +144 +32 +kETY7OJYc0qg/QkJQX2LXQAA + + +1 +data-io-analysis + + +False + + +False + + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + + +clMaroon +$00FFFF80 +8 +216 +95 +30 +actor-action-list + + + +clMaroon +$00FFFF80 +80 +82 +87 +30 +physical-io-list + + + +clMaroon +$00B9FFFF +122,111;120,161 +1BA+Xn0RUUm64eTCTOCRugAA +h1gtwyOEbUeBccNY4PTnrQAA + + +clBlue +$00B9FFFF +102,225;260,209 +fdnXBAbHkUmPlMqC0iAwCAAA +jHXkp+eLg0+gvycDjEzupAAA + + +clMaroon +$00B9FFFF +166,105;204,113 +lD0x8R9zUU+Gr16SYaMDDAAA +h1gtwyOEbUeBccNY4PTnrQAA + + +clMaroon +$00B9FFFF +167,161;224,143 +NSCnR/cZlUa3fXcKMhA8sQAA +lD0x8R9zUU+Gr16SYaMDDAAA +1BA+Xn0RUUm64eTCTOCRugAA + +False +1.5707963267949 +15 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +1.5707963267949 +30 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +-1.5707963267949 +15 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +-0.523598775598299 +30 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +0.523598775598299 +30 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +0.523598775598299 +25 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +-0.523598775598299 +25 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +-0.785398163397448 +40 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +0.785398163397448 +40 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +-954 +-1152 +50 +8 +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +-954 +-1152 +50 +8 +HdgD2FmAh06xyFDupk4vagAA + + + +clMaroon +$00B9FFFF +176,181;260,189 +ubIfnYMMgEuGrguT+jcONAAA +fdnXBAbHkUmPlMqC0iAwCAAA +1BA+Xn0RUUm64eTCTOCRugAA + +False +1.5707963267949 +15 +ubIfnYMMgEuGrguT+jcONAAA + + +False +1.5707963267949 +30 +ubIfnYMMgEuGrguT+jcONAAA + + +False +-1.5707963267949 +15 +ubIfnYMMgEuGrguT+jcONAAA + + +False +-0.523598775598299 +30 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +0.523598775598299 +30 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +0.523598775598299 +25 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +-0.523598775598299 +25 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +-0.785398163397448 +40 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +0.785398163397448 +40 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +-954 +-1152 +50 +8 +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +-954 +-1152 +50 +8 +pxqjN0GODE69EvLg0dAl+AAA + + + +clMaroon +$00FFFF80 +208 +30 +108 +30 +data-flow-diagram + + + +clMaroon +$00FFFF80 +448 +272 +154 +38 +action-flow-diagram +invoking-procedure-diagram + + + +clMaroon +$00B9FFFF +264,59;273,112 +lD0x8R9zUU+Gr16SYaMDDAAA +IVt2tjJDzEuz/vWJVDnpEQAA + + +clMaroon +$00B9FFFF +491,272;386,215 +fdnXBAbHkUmPlMqC0iAwCAAA +o8gstZMu+EaxvNdITt/2+AAA + + +clMaroon +$00FFFF80 +260 +288 +121 +23 +top-usecase-diagram + + + +clBlue +$00B9FFFF +324,288;351,215 +fdnXBAbHkUmPlMqC0iAwCAAA +tZ9aM6anSEuS/LhHJ8Er8AAA + + +clMaroon +$00B9FFFF +374 +68 +165 +32 +c4KyOid86k6Bzi+unTPcfAAA + + +1 +generate data-dict + + +False + + +False + + + +False +c4KyOid86k6Bzi+unTPcfAAA + + +False +c4KyOid86k6Bzi+unTPcfAAA + + +False +c4KyOid86k6Bzi+unTPcfAAA + + + +clMaroon +$00FFFF80 +396 +10 +63 +30 +data-dict + + + +clMaroon +$00B9FFFF +449,68;434,39 ++pV2gAzD5k290JEx4IzJcAAA +dun4oB1o7E2GPmOE4gcj2AAA + + +clMaroon +$00B9FFFF +337,112;390,99 +dxugzP0ZBEOdRYlU9N5SDAAA +dun4oB1o7E2GPmOE4gcj2AAA +lD0x8R9zUU+Gr16SYaMDDAAA + +False +1.5707963267949 +15 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +1.5707963267949 +30 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +-1.5707963267949 +15 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +-0.523598775598299 +30 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +0.523598775598299 +30 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +0.523598775598299 +25 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +-0.523598775598299 +25 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +-0.785398163397448 +40 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +0.785398163397448 +40 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +-954 +-1152 +50 +8 +/vsJW8WzsU++6Lul86APuQAA + + +False +-954 +-1152 +50 +8 +z475GIA9kECnM3EOwAHh6QAA + + + +clMaroon +$00B9FFFF +508 +10 +178 +32 +8E86OOxmt0eTCKMQNrubWAAA + + +1 +data-entity-analysis + + +False + + +False + + + +False +8E86OOxmt0eTCKMQNrubWAAA + + +False +8E86OOxmt0eTCKMQNrubWAAA + + +False +8E86OOxmt0eTCKMQNrubWAAA + + + +clMaroon +$00B9FFFF +492,68;557,41 +TfaTWdzXx0eF98RMZF5U/AAA +VJbVUyCxs0u+Lgy9ekB9lQAA +dun4oB1o7E2GPmOE4gcj2AAA + +False +1.5707963267949 +15 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +1.5707963267949 +30 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +-1.5707963267949 +15 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +-0.523598775598299 +30 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +0.523598775598299 +30 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +0.523598775598299 +25 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +-0.523598775598299 +25 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +-0.785398163397448 +40 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +0.785398163397448 +40 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +-954 +-1152 +50 +8 +FR6YZrNJHkeksGzXICrvngAA + + +False +-954 +-1152 +50 +8 +ApKyMGFOCkStssh0gwBpKAAA + + + +clMaroon +$00B9FFFF +508,24;458,24 ++pV2gAzD5k290JEx4IzJcAAA +VJbVUyCxs0u+Lgy9ekB9lQAA + + +clMaroon +$00FFFF80 +700 +8 +96 +38 +ER-diagram +data-file-format + + + +clMaroon +$00B9FFFF +700,26;685,26 +VJbVUyCxs0u+Lgy9ekB9lQAA +WWY3RCgVKEyMXKhU6sBafwAA + + +clMaroon +clYellow +432 +122 +175 +32 +tnTkvoZxVkmVjIgd8K6VcwAA + + +1 +module-design-task + + +False + + +False + + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + + +clMaroon +$00B9FFFF +347,130;432,133 +BNlaobUxlkaxprXRzDMgIwAA +/UwMH6vM3kKzkuL76KD36AAA +lD0x8R9zUU+Gr16SYaMDDAAA + +False +1.5707963267949 +15 +BNlaobUxlkaxprXRzDMgIwAA + + +False +1.5707963267949 +30 +BNlaobUxlkaxprXRzDMgIwAA + + +False +-1.5707963267949 +15 +BNlaobUxlkaxprXRzDMgIwAA + + +False +-0.523598775598299 +30 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +0.523598775598299 +30 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +0.523598775598299 +25 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +-0.523598775598299 +25 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +-0.785398163397448 +40 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +0.785398163397448 +40 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +-954 +-1152 +50 +8 +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +-954 +-1152 +50 +8 +UtVAs5JBSkKc0jSVdLpypQAA + + + +clMaroon +$00B9FFFF +396,184;477,153 +t3VIg1cXJEmsTGdIYQFIcwAA +/UwMH6vM3kKzkuL76KD36AAA +fdnXBAbHkUmPlMqC0iAwCAAA + +False +1.5707963267949 +15 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +1.5707963267949 +30 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +-1.5707963267949 +15 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +-0.523598775598299 +30 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +0.523598775598299 +30 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +0.523598775598299 +25 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +-0.523598775598299 +25 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +-0.785398163397448 +40 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +0.785398163397448 +40 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +-954 +-1152 +50 +8 +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +-954 +-1152 +50 +8 +IuqkqTOhTEuBUbn2uLNuqAAA + + + +clMaroon +$00FFFF80 +686 +188 +85 +53 +build-dest +install-pkg-list +src-pkg + + + +clMaroon +$00EAEA00 +528 +172 +152 +38 +function-module-list-file +class-diagram + + + +clMaroon +$00B9FFFF +574,172;544,153 +/UwMH6vM3kKzkuL76KD36AAA +stxtQ4b9QEC3ZMO0j91+GAAA + + +clMaroon +$00B9FFFF +381,68;315,55 +IVt2tjJDzEuz/vWJVDnpEQAA +dun4oB1o7E2GPmOE4gcj2AAA + + +clMaroon +$00EAEA00 +532 +232 +135 +30 +top-level-module-list-file + + + +clMaroon +$00B9FFFF +610 +276 +162 +32 +EjjnPhUmf02yFIvhJmdcmQAA + + +1 +pkg-dest category + + +False + + +False + + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + + +clMaroon +$00B9FFFF +697,276;715,240 +tuK8HBQysUWa6342kavm+gAA +9pbwNzO7hUyC11S5a9Hn1gAA + + +clMaroon +$00B9FFFF +629,261;659,276 +9pbwNzO7hUyC11S5a9Hn1gAA +EXFA5Cr3i0S0CjlpdMlBDgAA + + +clMaroon +$00B9FFFF +520,153;523,272 +o8gstZMu+EaxvNdITt/2+AAA +/UwMH6vM3kKzkuL76KD36AAA + + +clMaroon +$00B9FFFF +630 +124 +114 +32 +a7yZcyAyl02YNl0/FQziyQAA + + +1 +layer-design + + +False + + +False + + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + + +clMaroon +$00FFFF80 +610 +66 +171 +38 +function-module-struct-diagram +architech-diagram + + + +clMaroon +$00B9FFFF +692,103;688,124 +cnN0HexzX0WKGgNpVfpw2gAA +24B4XL60XEOLWuEJN79LNQAA + + +clMaroon +$00B9FFFF +606,138;630,138 +xMoCRZ0FD0mJscRNN+UpywAA +cnN0HexzX0WKGgNpVfpw2gAA +/UwMH6vM3kKzkuL76KD36AAA + +False +1.5707963267949 +15 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +1.5707963267949 +30 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +-1.5707963267949 +15 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +-0.523598775598299 +30 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +0.523598775598299 +30 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +0.523598775598299 +25 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +-0.523598775598299 +25 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +-0.785398163397448 +40 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +0.785398163397448 +40 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +-954 +-1152 +50 +8 +FVDBPeq7mEKlp1go7V1hsgAA + + +False +-954 +-1152 +50 +8 +6MJU+jYHa0mx8HaVM4S+8QAA + + + +clMaroon +$00EAEA00 +120 +280 +134 +30 +function-feature-list-file + + + +clMaroon +$00FF80FF +232 +320 +152 +32 +TMPdkgNID0u772le0sCmLgAA + + +1 +new-ideas-action + + +False + + +False + + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + + +clMaroon +$00FF80FF +220 +412 +175 +32 +Kh+ykp9GgU6PQXUx+CGLxgAA + + +1 +new-demond-action + + +False + + +False + + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + + +clMaroon +$00B9FFFF +12 +359 +188 +32 +06qF2g1ff02RsBbBfLLo1gAA + + +1 +feature-analysis-task + + +False + + +False + + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + + +clMaroon +$00FFFF80 +244 +366 +123 +30 +note record in tagdoc + + + +clMaroon +$00B9FFFF +306,366;306,351 +yubkqivm4UyQY4rz+UzVhwAA +2x5jLOE4SECwK7+07XFOYgAA + + +clMaroon +$00B9FFFF +306,412;305,395 +2x5jLOE4SECwK7+07XFOYgAA +u0BNgriFLkW8D2ch2mkMLwAA + + +clMaroon +$00B9FFFF +199,377;244,378 +2x5jLOE4SECwK7+07XFOYgAA +8trqinRilUOT7pAQsxAfFQAA + + +clMaroon +$00B9FFFF +232,349;181,359 +ZE6XGr3H4E+M1Lu1nRZ9BQAA +8trqinRilUOT7pAQsxAfFQAA +yubkqivm4UyQY4rz+UzVhwAA + +1.5707963267949 +15 +trimple-catagory +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +1.5707963267949 +30 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-1.5707963267949 +15 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-0.523598775598299 +30 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.523598775598299 +30 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +0.523598775598299 +25 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +-0.523598775598299 +25 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-0.785398163397448 +40 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.785398163397448 +40 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-1514 +-944 +50 +8 +irMBt7uWtEaxRopZEBcfwgAA + + +False +-1514 +-944 +50 +8 +eu/8Siwir02KNGkRDOEa9gAA + + + +clMaroon +$00B9FFFF +250,412;166,390 +li4LwavBrE+pggONaW7QkwAA +8trqinRilUOT7pAQsxAfFQAA +u0BNgriFLkW8D2ch2mkMLwAA + +1.5707963267949 +15 +trimple-catagory +li4LwavBrE+pggONaW7QkwAA + + +False +1.5707963267949 +30 +li4LwavBrE+pggONaW7QkwAA + + +False +-1.5707963267949 +15 +li4LwavBrE+pggONaW7QkwAA + + +False +-0.523598775598299 +30 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.523598775598299 +30 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +0.523598775598299 +25 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-0.523598775598299 +25 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-0.785398163397448 +40 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.785398163397448 +40 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-1458 +-944 +50 +8 +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-1458 +-944 +50 +8 +gehfWFMIjEKeVzAcdHneqgAA + + + +clMaroon +$00B9FFFF +171,309;120,359 +8trqinRilUOT7pAQsxAfFQAA +tD2TJMzZuUamXRz9MXpsGgAA + + +clMaroon +$00FF80FF +52 +410 +121 +32 +mx6wTw6+KEuGtAr0iRUXJwAA + + +1 +analysis-task + + +False + + +False + + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + + +clMaroon +$00FFFF80 +404 +360 +132 +113 +classic-feature-list +cmd-args-design +running-param-design +.lex/.gmr/.type/.ui +time-sequence-diagram +E-R-diagram +sql-tbl + + + +clMaroon +$00B9FFFF +556 +328 +229 +32 +hi9GvwnwFkKy8F8f44i8mgAA + + +1 +classic-app-feature-design + + +False + + +False + + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + + +clMaroon +$00B9FFFF +535,392;626,359 +01HabwybsEaAlwmb1OptXgAA +w94pSqv/oES2twsIdN9QSQAA + + +clMaroon +$00FF80FF +672 +428 +108 +32 +2LU3javC70yzEUTHd0L+VAAA + + +1 +end-of-proc + + +False + + +False + + + +False +2LU3javC70yzEUTHd0L+VAAA + + +False +2LU3javC70yzEUTHd0L+VAAA + + +False +2LU3javC70yzEUTHd0L+VAAA + + + +clMaroon +$00B9FFFF +679,359;717,428 +D/6a5FDvaU2giul+pputrgAA +7yHMpOEN0EiC2uZBihzZkQAA +01HabwybsEaAlwmb1OptXgAA + +False +1.5707963267949 +15 +D/6a5FDvaU2giul+pputrgAA + + +False +1.5707963267949 +30 +D/6a5FDvaU2giul+pputrgAA + + +False +-1.5707963267949 +15 +D/6a5FDvaU2giul+pputrgAA + + +False +-0.523598775598299 +30 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +0.523598775598299 +30 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +0.523598775598299 +25 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +-0.523598775598299 +25 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +-0.785398163397448 +40 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +0.785398163397448 +40 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +-678 +-792 +50 +8 +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +-678 +-792 +50 +8 +fj2tpTa4tk+iVJg+TnTWUwAA + + + +clMaroon +$00B9FFFF +110,410;107,390 +dOqivJTIIUigVVTdSjV6NQAA +8trqinRilUOT7pAQsxAfFQAA +X0LJqLv76E+ZXpuLxFOtvwAA + +False +1.5707963267949 +15 +dOqivJTIIUigVVTdSjV6NQAA + + +False +1.5707963267949 +30 +dOqivJTIIUigVVTdSjV6NQAA + + +False +-1.5707963267949 +15 +dOqivJTIIUigVVTdSjV6NQAA + + +False +-0.523598775598299 +30 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +0.523598775598299 +30 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +0.523598775598299 +25 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +-0.523598775598299 +25 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +-0.785398163397448 +40 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +0.785398163397448 +40 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +-1270 +-980 +50 +8 +tj9PxTnKWUOoKg0de6lHnQAA + + +False +-1270 +-980 +50 +8 +pOTqH/7r40O4aKzqIuqcswAA + + + +clMaroon +$00B9FFFF +713,188;695,155 +cnN0HexzX0WKGgNpVfpw2gAA +tuK8HBQysUWa6342kavm+gAA + + +clMaroon +$00B9FFFF +106,359;119,192 +R5itKCcXY0KrRhRkbaji9QAA +1BA+Xn0RUUm64eTCTOCRugAA +8trqinRilUOT7pAQsxAfFQAA + +False +1.5707963267949 +15 +R5itKCcXY0KrRhRkbaji9QAA + + +False +1.5707963267949 +30 +R5itKCcXY0KrRhRkbaji9QAA + + +False +-1.5707963267949 +15 +R5itKCcXY0KrRhRkbaji9QAA + + +False +-0.523598775598299 +30 +epHead +K0nWpIYMbkyuYvBBAUwcaAAA + + +False +0.523598775598299 +30 +epTail +apr06sAa1U2fZat0sCQPpQAA + + +False +0.523598775598299 +25 +epHead +K0nWpIYMbkyuYvBBAUwcaAAA + + +False +-0.523598775598299 +25 +epTail +apr06sAa1U2fZat0sCQPpQAA + + +False +-0.785398163397448 +40 +epHead +K0nWpIYMbkyuYvBBAUwcaAAA + + +False +0.785398163397448 +40 +epTail +apr06sAa1U2fZat0sCQPpQAA + + +False +-988 +-1100 +50 +8 +K0nWpIYMbkyuYvBBAUwcaAAA + + +False +-988 +-1100 +50 +8 +apr06sAa1U2fZat0sCQPpQAA + + + +clMaroon +$00B9FFFF +266,143;193,280 +tD2TJMzZuUamXRz9MXpsGgAA +lD0x8R9zUU+Gr16SYaMDDAAA + + +clBlue +$00B9FFFF +328,215;211,280 +tD2TJMzZuUamXRz9MXpsGgAA +fdnXBAbHkUmPlMqC0iAwCAAA + + +clMaroon +$00FFFF80 +392 +324 +139 +23 +module-usecase-diagram + + + +clMaroon +$00B9FFFF +453,324;369,215 +fdnXBAbHkUmPlMqC0iAwCAAA +rgknhtOlx0SK43f4Gd6p0wAA + + +clMaroon +$00B9FFFF +302,288;146,192 +1BA+Xn0RUUm64eTCTOCRugAA +tZ9aM6anSEuS/LhHJ8Er8AAA + + +clMaroon +$00B9FFFF +101,192;72,216 +jHXkp+eLg0+gvycDjEzupAAA +1BA+Xn0RUUm64eTCTOCRugAA + + +clMaroon +$00B9FFFF +514,153;492,232;253,280 +tD2TJMzZuUamXRz9MXpsGgAA +/UwMH6vM3kKzkuL76KD36AAA + + +clMaroon +$00B9FFFF +660,155;632,172 +stxtQ4b9QEC3ZMO0j91+GAAA +cnN0HexzX0WKGgNpVfpw2gAA + + +clMaroon +$00EAEA00 +548 +396 +134 +30 +function-feature-list-file + + + +clMaroon +$00B9FFFF +657,359;626,396 +EhkwLjJjd0u6pWqgLOaY0gAA +01HabwybsEaAlwmb1OptXgAA + + +clMaroon +$00B9FFFF +771,292;792,292;792,388;743,428 +wGKQiVXBLE+NlgisexkoeQAA +7yHMpOEN0EiC2uZBihzZkQAA +9pbwNzO7hUyC11S5a9Hn1gAA + +False +1.5707963267949 +15 +wGKQiVXBLE+NlgisexkoeQAA + + +False +1.5707963267949 +30 +wGKQiVXBLE+NlgisexkoeQAA + + +False +-1.5707963267949 +15 +wGKQiVXBLE+NlgisexkoeQAA + + +False +-0.523598775598299 +30 +epHead +nveEivVzpUOmQHaQgBzwHgAA + + +False +0.523598775598299 +30 +epTail +8/RYS0HDWka/NEMRgtUecgAA + + +False +0.523598775598299 +25 +epHead +nveEivVzpUOmQHaQgBzwHgAA + + +False +-0.523598775598299 +25 +epTail +8/RYS0HDWka/NEMRgtUecgAA + + +False +-0.785398163397448 +40 +epHead +nveEivVzpUOmQHaQgBzwHgAA + + +False +0.785398163397448 +40 +epTail +8/RYS0HDWka/NEMRgtUecgAA + + +False +-996 +-1060 +50 +8 +nveEivVzpUOmQHaQgBzwHgAA + + +False +-996 +-1060 +50 +8 +8/RYS0HDWka/NEMRgtUecgAA + + + +clMaroon +$00B9FFFF +743,139;808,140;808,404;757,428 ++UTsgf65KEqv4PlEE9eDUwAA +7yHMpOEN0EiC2uZBihzZkQAA +cnN0HexzX0WKGgNpVfpw2gAA + +False +1.5707963267949 +15 ++UTsgf65KEqv4PlEE9eDUwAA + + +False +1.5707963267949 +30 ++UTsgf65KEqv4PlEE9eDUwAA + + +False +-1.5707963267949 +15 ++UTsgf65KEqv4PlEE9eDUwAA + + +False +-0.523598775598299 +30 +epHead +3okeT8etnkmVfryHL+rOcQAA + + +False +0.523598775598299 +30 +epTail +Emmft/ih+ESwNLfwOBP+ogAA + + +False +0.523598775598299 +25 +epHead +3okeT8etnkmVfryHL+rOcQAA + + +False +-0.523598775598299 +25 +epTail +Emmft/ih+ESwNLfwOBP+ogAA + + +False +-0.785398163397448 +40 +epHead +3okeT8etnkmVfryHL+rOcQAA + + +False +0.785398163397448 +40 +epTail +Emmft/ih+ESwNLfwOBP+ogAA + + +False +-996 +-1060 +50 +8 +3okeT8etnkmVfryHL+rOcQAA + + +False +-996 +-1060 +50 +8 +Emmft/ih+ESwNLfwOBP+ogAA + + + + + +develop-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +xVwuXCiSU0OjjNx3L+iLBgAA +18 + +clMaroon +62 +18 +477 +449 +System + + +clMaroon +$00B9FFFF +126 +230 +104 +30 +test-code for unit + + + +clMaroon +$00B9FFFF +90 +274 +144 +30 +testing-code for integrate + + + +clMaroon +$00B9FFFF +98 +318 +125 +30 +testing-code for using + + + +clMaroon +$00B9FFFF +318 +179 +135 +32 +CLf6+wSJ/U+4iSwM7QoY3wAA + + +1 +design-to-code + + +False + + +False + + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + + +clMaroon +$00B9FFFF +402 +290 +104 +32 +gJ7o4uiAMEqSPUL3dadz2wAA + + +1 +unit-coding + + +False + + +False + + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + + +clMaroon +$00B9FFFF +334 +359 +108 +32 +wftqTlAvI0+cR9j69saRNQAA + + +1 +unit-testing + + +False + + +False + + + +False +wftqTlAvI0+cR9j69saRNQAA + + +False +wftqTlAvI0+cR9j69saRNQAA + + +False +wftqTlAvI0+cR9j69saRNQAA + + + +clMaroon +$00B9FFFF +318 +410 +152 +32 +qlZGCifQOEyQyqBzIH1x/AAA + + +1 +integrate-testing + + +False + + +False + + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + + +clMaroon +$00B9FFFF +385,210;385,239 +k48n8C/dEECUhVTIv9BoGQAA +iZbm2TAx1keNx/mPHzSEmgAA +XsyNCerqHEuJZ3n6KxffswAA + +False +1.5707963267949 +15 +k48n8C/dEECUhVTIv9BoGQAA + + +False +1.5707963267949 +30 +k48n8C/dEECUhVTIv9BoGQAA + + +False +-1.5707963267949 +15 +k48n8C/dEECUhVTIv9BoGQAA + + +False +-0.523598775598299 +30 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +0.523598775598299 +30 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +0.523598775598299 +25 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +-0.523598775598299 +25 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +-0.785398163397448 +40 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +0.785398163397448 +40 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +-1576 +-1124 +50 +8 +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +-1576 +-1124 +50 +8 +YXudH8Doi0+zzc1qPMjDNAAA + + + +clMaroon +$00B9FFFF +438,321;401,359 +euFZ2oXh1UyoeBpwCRLyDQAA +udnYsolK4EGZ5Tqfu1inggAA +cXkc4ROKfkK2AEQ27ILD7AAA + +False +1.5707963267949 +15 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +1.5707963267949 +30 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +-1.5707963267949 +15 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +-0.523598775598299 +30 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +0.523598775598299 +30 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +0.523598775598299 +25 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +-0.523598775598299 +25 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +-0.785398163397448 +40 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +0.785398163397448 +40 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +-1576 +-1124 +50 +8 +g0Sss8qL1USpNMhJiejoNQAA + + +False +-1576 +-1124 +50 +8 +nnIS6vjqXkqw2mw9rhuzugAA + + + +clMaroon +$00B9FFFF +389,390;391,410 +h7KFG98rIEKQY4C1dOWmFQAA +kVd1VyDwJEWJDwZbvH1q6wAA +udnYsolK4EGZ5Tqfu1inggAA + +False +1.5707963267949 +15 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +1.5707963267949 +30 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +-1.5707963267949 +15 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +-0.523598775598299 +30 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +0.523598775598299 +30 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +0.523598775598299 +25 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +-0.523598775598299 +25 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +-0.785398163397448 +40 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +0.785398163397448 +40 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +-1576 +-1124 +50 +8 +Fb68OZ19C0WB4BjQurmBRwAA + + +False +-1576 +-1124 +50 +8 +akgagoM7O0WP1rFMWH/IzgAA + + + +clMaroon +$00B9FFFF +314 +239 +144 +32 +CBkE9JDrJU21ybYWNP2cCgAA + + +1 +create-test-unit + + +False + + +False + + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + + +clMaroon +$00B9FFFF +250 +290 +123 +32 +CEEcWQKt0kyX8zYOPZHrrwAA + + +1 +bugfix-coding + + +False + + +False + + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + + +clMaroon +$00B9FFFF +406,270;433,290 +DCobZcXopUed3uhu7f3tCwAA +cXkc4ROKfkK2AEQ27ILD7AAA +iZbm2TAx1keNx/mPHzSEmgAA + +False +1.5707963267949 +15 +DCobZcXopUed3uhu7f3tCwAA + + +False +1.5707963267949 +30 +DCobZcXopUed3uhu7f3tCwAA + + +False +-1.5707963267949 +15 +DCobZcXopUed3uhu7f3tCwAA + + +False +-0.523598775598299 +30 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +0.523598775598299 +30 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +0.523598775598299 +25 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +-0.523598775598299 +25 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +-0.785398163397448 +40 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +0.785398163397448 +40 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +-1552 +-1012 +50 +8 +GPR477SH0U2rZy9DRg9MzAAA + + +False +-1552 +-1012 +50 +8 +DFlh0do87UmmJQigSQRsiAAA + + + +clMaroon +$00B9FFFF +362,270;333,290 +BUd2VmDLEkKHuqopStVszQAA +vmizIwBnQ0SKIRlT6FSqSwAA +iZbm2TAx1keNx/mPHzSEmgAA + +False +1.5707963267949 +15 +BUd2VmDLEkKHuqopStVszQAA + + +False +1.5707963267949 +30 +BUd2VmDLEkKHuqopStVszQAA + + +False +-1.5707963267949 +15 +BUd2VmDLEkKHuqopStVszQAA + + +False +-0.523598775598299 +30 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +0.523598775598299 +30 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +0.523598775598299 +25 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +-0.523598775598299 +25 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +-0.785398163397448 +40 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +0.785398163397448 +40 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +-1552 +-1012 +50 +8 +XyL91tS87U+MpUc/Z25u1gAA + + +False +-1552 +-1012 +50 +8 +2t6hyyogW027sVhhVrjclQAA + + + +clMaroon +$00B9FFFF +329,321;371,359 +fk3nxDxX5USF8gff9cP5MwAA +udnYsolK4EGZ5Tqfu1inggAA +vmizIwBnQ0SKIRlT6FSqSwAA + +False +1.5707963267949 +15 +fk3nxDxX5USF8gff9cP5MwAA + + +False +1.5707963267949 +30 +fk3nxDxX5USF8gff9cP5MwAA + + +False +-1.5707963267949 +15 +fk3nxDxX5USF8gff9cP5MwAA + + +False +-0.523598775598299 +30 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +0.523598775598299 +30 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +0.523598775598299 +25 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +-0.523598775598299 +25 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +-0.785398163397448 +40 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +0.785398163397448 +40 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +-1552 +-1012 +50 +8 +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +-1552 +-1012 +50 +8 +lp0ewCTLb06H/3WjWYmLOQAA + + + +clMaroon +$00B9FFFF +458 +214 +61 +30 +src-code + + + +clMaroon +$00B9FFFF +458 +154 +55 +30 +src-pkg + + + + + +design-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +ySTAVfcj2U6jFfCvuMqyogAA +1 + +clMaroon +$00B9FFFF +52 +36 +108 +32 +U//hAdD8QU+M1p1r952pSAAA + + +1 +design-task + + +False + + +False + + + +False +U//hAdD8QU+M1p1r952pSAAA + + +False +U//hAdD8QU+M1p1r952pSAAA + + +False +U//hAdD8QU+M1p1r952pSAAA + + + + + +dev-work-flow-diagram +yePcB6NdXUG1SBs2wQJA7gAA + +SY6zyr8S8EyWPA7+VdC+9wAA +76 + +clMaroon +$00FF80FF +240 +104 +159 +32 +PjS4k33/kkePfB8R0Qh14AAA + + +1 +bugfix-estimate + + +False + + +False + + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + + +clMaroon +$00B9FFFF +253 +216 +120 +40 +h5aHoI2/GkuAptKzGDmHIwAA + + +dev-initial-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +276 +120 +40 +NezC/3LDGUub0eLy4M8sOgAA + + +design-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +388 +120 +40 +7jBLX6wjTkmObbw8i4xK0gAA + + +develop-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +448 +120 +40 +qG82m0zlPkqvT2acHPihkwAA + + +testing-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +568 +120 +40 +Gn5CjkIjQUCxSoecNQk2dQAA + + +document-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +688 +120 +40 +1Q7qLHEF7kKyydsrAZ/k1QAA + + +publish-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +156 +120 +40 +lNk1i5gHU02RiCDfZIsLEQAA + + +analysis-procedure + + +False + + +False + + + + +clMaroon +clSilver +67 +392 +110 +32 +H7tysEnUp0+p4o84YYVC8wAA + + +1 +bugfix-work + + +False + + +False + + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + + +clMaroon +$00FFFF80 +56 +692 +130 +32 +dHVXjobujkKGloy7+Ox8DAAA + + +1 +publish-launch + + +False + + +False + + + +False +dHVXjobujkKGloy7+Ox8DAAA + + +False +dHVXjobujkKGloy7+Ox8DAAA + + +False +dHVXjobujkKGloy7+Ox8DAAA + + + +clMaroon +clSilver +52 +572 +141 +32 +VwrgoiK6h0aUxHMgZDKYzgAA + + +1 +document-work + + +False + + +False + + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + + +clMaroon +clSilver +53 +632 +138 +32 +fKAlsL5x3U2cAiir26vsAQAA + + +1 +traslation-work + + +False + + +False + + + +False +fKAlsL5x3U2cAiir26vsAQAA + + +False +fKAlsL5x3U2cAiir26vsAQAA + + +False +fKAlsL5x3U2cAiir26vsAQAA + + + +clMaroon +clSilver +64 +452 +117 +32 +KbXj7bLsjku9BsYv/z63VgAA + + +1 +testing-work + + +False + + +False + + + +False +KbXj7bLsjku9BsYv/z63VgAA + + +False +KbXj7bLsjku9BsYv/z63VgAA + + +False +KbXj7bLsjku9BsYv/z63VgAA + + + +clMaroon +$00FFFF80 +16 +280 +209 +32 +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +1 +new-feature-dev-launch + + +False + + +False + + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + + +clMaroon +$00FFFF80 +43 +160 +154 +32 +d6r7rOW3akG5lkJDtATmigAA + + +1 +initial-dev-launch + + +False + + +False + + + +False +d6r7rOW3akG5lkJDtATmigAA + + +False +d6r7rOW3akG5lkJDtATmigAA + + +False +d6r7rOW3akG5lkJDtATmigAA + + + +clMaroon +$00B9FFFF +253 +628 +120 +40 +Gn5CjkIjQUCxSoecNQk2dQAA + + +document-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +312,195;312,216 +viIiAZ9C80y4tKd497zwFAAA +Rq0Cydd7nEKOfOgn8htc8QAA +pkAZPt0EzUO5vbW8/2ISDgAA + +False +1.5707963267949 +15 +viIiAZ9C80y4tKd497zwFAAA + + +False +1.5707963267949 +30 +viIiAZ9C80y4tKd497zwFAAA + + +False +-1.5707963267949 +15 +viIiAZ9C80y4tKd497zwFAAA + + +False +-0.523598775598299 +30 +epHead +9OsI3YefmEShu4VA2aYWsgAA + + +False +0.523598775598299 +30 +epTail +OH+C5n4Y3k61fQSZesUVxwAA + + +False +0.523598775598299 +25 +epHead +9OsI3YefmEShu4VA2aYWsgAA + + +False +-0.523598775598299 +25 +epTail +OH+C5n4Y3k61fQSZesUVxwAA + + +False +-0.785398163397448 +40 +epHead +9OsI3YefmEShu4VA2aYWsgAA + + +False +0.785398163397448 +40 +epTail +OH+C5n4Y3k61fQSZesUVxwAA + + +False +-796 +-1324 +50 +8 +9OsI3YefmEShu4VA2aYWsgAA + + +False +-796 +-1324 +50 +8 +OH+C5n4Y3k61fQSZesUVxwAA + + + +clMaroon +$00B9FFFF +312,255;312,276 +zhltSEBb90+T60/21ERiXQAA +05y9pi2UcU6ptxllVr+G/gAA +Rq0Cydd7nEKOfOgn8htc8QAA + +False +1.5707963267949 +15 +zhltSEBb90+T60/21ERiXQAA + + +False +1.5707963267949 +30 +zhltSEBb90+T60/21ERiXQAA + + +False +-1.5707963267949 +15 +zhltSEBb90+T60/21ERiXQAA + + +False +-0.523598775598299 +30 +epHead +IJastPE4CkGI6UtKXQb+xgAA + + +False +0.523598775598299 +30 +epTail +wVShJ+TldkiCQjPWrQHwugAA + + +False +0.523598775598299 +25 +epHead +IJastPE4CkGI6UtKXQb+xgAA + + +False +-0.523598775598299 +25 +epTail +wVShJ+TldkiCQjPWrQHwugAA + + +False +-0.785398163397448 +40 +epHead +IJastPE4CkGI6UtKXQb+xgAA + + +False +0.785398163397448 +40 +epTail +wVShJ+TldkiCQjPWrQHwugAA + + +False +-944 +-1200 +50 +8 +IJastPE4CkGI6UtKXQb+xgAA + + +False +-944 +-1200 +50 +8 +wVShJ+TldkiCQjPWrQHwugAA + + + +clMaroon +$00B9FFFF +312,315;313,336 +IQdvD61jPEq7KzieVIPMnAAA +ycjyLlSj3kqAT4WlwN+ABQAA +05y9pi2UcU6ptxllVr+G/gAA + +False +1.5707963267949 +15 +IQdvD61jPEq7KzieVIPMnAAA + + +False +1.5707963267949 +30 +IQdvD61jPEq7KzieVIPMnAAA + + +False +-1.5707963267949 +15 +IQdvD61jPEq7KzieVIPMnAAA + + +False +-0.523598775598299 +30 +epHead +d4BprJk1YUek3SfLLsVZ4QAA + + +False +0.523598775598299 +30 +epTail +I2MiL+bJOEWcCQW8PlUaEAAA + + +False +0.523598775598299 +25 +epHead +d4BprJk1YUek3SfLLsVZ4QAA + + +False +-0.523598775598299 +25 +epTail +I2MiL+bJOEWcCQW8PlUaEAAA + + +False +-0.785398163397448 +40 +epHead +d4BprJk1YUek3SfLLsVZ4QAA + + +False +0.785398163397448 +40 +epTail +I2MiL+bJOEWcCQW8PlUaEAAA + + +False +-944 +-1132 +50 +8 +d4BprJk1YUek3SfLLsVZ4QAA + + +False +-944 +-1132 +50 +8 +I2MiL+bJOEWcCQW8PlUaEAAA + + + +clMaroon +$00B9FFFF +312,427;312,448 +/HuYmDQGHEeXQIQr+1PRoQAA +0eY6HnBo4kSNrbtAFd/AoQAA +LdINJygfWEW3vhPOZonupQAA + +False +1.5707963267949 +15 +/HuYmDQGHEeXQIQr+1PRoQAA + + +False +1.5707963267949 +30 +/HuYmDQGHEeXQIQr+1PRoQAA + + +False +-1.5707963267949 +15 +/HuYmDQGHEeXQIQr+1PRoQAA + + +False +-0.523598775598299 +30 +epHead +/pztn/xQEUmMs4TaAXsCagAA + + +False +0.523598775598299 +30 +epTail +770F/tljqkKHqvtGDTfVzAAA + + +False +0.523598775598299 +25 +epHead +/pztn/xQEUmMs4TaAXsCagAA + + +False +-0.523598775598299 +25 +epTail +770F/tljqkKHqvtGDTfVzAAA + + +False +-0.785398163397448 +40 +epHead +/pztn/xQEUmMs4TaAXsCagAA + + +False +0.785398163397448 +40 +epTail +770F/tljqkKHqvtGDTfVzAAA + + +False +-944 +-1132 +50 +8 +/pztn/xQEUmMs4TaAXsCagAA + + +False +-944 +-1132 +50 +8 +770F/tljqkKHqvtGDTfVzAAA + + + +clMaroon +$00B9FFFF +312,607;312,628 +4uPxSnoEgUO3ovjSg4lAfgAA +tQieUJFUIUWjBNmfDel6vwAA +Y9Di27a99UCLuicgXHRPbQAA + +False +1.5707963267949 +15 +4uPxSnoEgUO3ovjSg4lAfgAA + + +False +1.5707963267949 +30 +4uPxSnoEgUO3ovjSg4lAfgAA + + +False +-1.5707963267949 +15 +4uPxSnoEgUO3ovjSg4lAfgAA + + +False +-0.523598775598299 +30 +epHead +KCe+sJFeFUW7JorDZydAQQAA + + +False +0.523598775598299 +30 +epTail +8MwPX9NZj0SQu64mihvgxAAA + + +False +0.523598775598299 +25 +epHead +KCe+sJFeFUW7JorDZydAQQAA + + +False +-0.523598775598299 +25 +epTail +8MwPX9NZj0SQu64mihvgxAAA + + +False +-0.785398163397448 +40 +epHead +KCe+sJFeFUW7JorDZydAQQAA + + +False +0.785398163397448 +40 +epTail +8MwPX9NZj0SQu64mihvgxAAA + + +False +-796 +-1316 +50 +8 +KCe+sJFeFUW7JorDZydAQQAA + + +False +-796 +-1316 +50 +8 +8MwPX9NZj0SQu64mihvgxAAA + + + +clMaroon +$0080FF80 +36 +12 +175 +32 +7lWVbX8GnUmVFBjNoEJuAAAA + + +1 +new-demond-action + + +False + + +False + + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + + +clMaroon +$00B9FFFF +430 +276 +120 +40 +1Q7qLHEF7kKyydsrAZ/k1QAA + + +publish-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +508 +120 +40 +VKh7LpFhYka/yUWbEMRTBAAA + + +bug-report-task + + +False + + +False + + + + +clMaroon +$00B9FFFF +312,487;312,508 +wamDBWad0EiNBPiMYvPoYQAA +OO7ku5gAkUOUNTByzbCZzgAA +0eY6HnBo4kSNrbtAFd/AoQAA + +False +1.5707963267949 +15 +wamDBWad0EiNBPiMYvPoYQAA + + +False +1.5707963267949 +30 +wamDBWad0EiNBPiMYvPoYQAA + + +False +-1.5707963267949 +15 +wamDBWad0EiNBPiMYvPoYQAA + + +False +-0.523598775598299 +30 +epHead +SG8bVsROWE+5+iyuVGPkBQAA + + +False +0.523598775598299 +30 +epTail +1IsgVb2s8Ui+xnl92d08gQAA + + +False +0.523598775598299 +25 +epHead +SG8bVsROWE+5+iyuVGPkBQAA + + +False +-0.523598775598299 +25 +epTail +1IsgVb2s8Ui+xnl92d08gQAA + + +False +-0.785398163397448 +40 +epHead +SG8bVsROWE+5+iyuVGPkBQAA + + +False +0.785398163397448 +40 +epTail +1IsgVb2s8Ui+xnl92d08gQAA + + +False +-1064 +-1024 +50 +8 +SG8bVsROWE+5+iyuVGPkBQAA + + +False +-1064 +-1024 +50 +8 +1IsgVb2s8Ui+xnl92d08gQAA + + + +clMaroon +$00B9FFFF +372,527;420,527 +RPaUCtwDgE+7Y3vewD8uWQAA +4hezOO3zxE6T3AtmMrs4MwAA +OO7ku5gAkUOUNTByzbCZzgAA + +False +1.5707963267949 +15 +RPaUCtwDgE+7Y3vewD8uWQAA + + +False +1.5707963267949 +30 +RPaUCtwDgE+7Y3vewD8uWQAA + + +False +-1.5707963267949 +15 +RPaUCtwDgE+7Y3vewD8uWQAA + + +False +-0.523598775598299 +30 +epHead +RaGpcXRFFk2Egrs9p45aEwAA + + +False +0.523598775598299 +30 +epTail +51zN/AjS8UKGQuZi3cgptgAA + + +False +0.523598775598299 +25 +epHead +RaGpcXRFFk2Egrs9p45aEwAA + + +False +-0.523598775598299 +25 +epTail +51zN/AjS8UKGQuZi3cgptgAA + + +False +-0.785398163397448 +40 +epHead +RaGpcXRFFk2Egrs9p45aEwAA + + +False +0.785398163397448 +40 +epTail +51zN/AjS8UKGQuZi3cgptgAA + + +False +-1064 +-1024 +50 +8 +RaGpcXRFFk2Egrs9p45aEwAA + + +False +-1064 +-1024 +50 +8 +51zN/AjS8UKGQuZi3cgptgAA + + + +clMaroon +$00FF80FF +420 +512 +140 +32 +Qefe92j2XEq8x5GI1Vq+RQAA + + +1 +testing-estimat + + +False + + +False + + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + + +clMaroon +$00B9FFFF +482,512;448,444;336,444;325,427 +MEolPOO0IEuLY63mhD0XIAAA +LdINJygfWEW3vhPOZonupQAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +MEolPOO0IEuLY63mhD0XIAAA + + +False +1.5707963267949 +30 +MEolPOO0IEuLY63mhD0XIAAA + + +False +-1.5707963267949 +15 +MEolPOO0IEuLY63mhD0XIAAA + + +False +-0.523598775598299 +30 +epHead +6XJvWCMrykCACsZlVke/PAAA + + +False +0.523598775598299 +30 +epTail +g0TBPf3Nh0KJwiSYVxiPhQAA + + +False +0.523598775598299 +25 +epHead +6XJvWCMrykCACsZlVke/PAAA + + +False +-0.523598775598299 +25 +epTail +g0TBPf3Nh0KJwiSYVxiPhQAA + + +False +-0.785398163397448 +40 +epHead +6XJvWCMrykCACsZlVke/PAAA + + +False +0.785398163397448 +40 +epTail +g0TBPf3Nh0KJwiSYVxiPhQAA + + +False +-1064 +-1024 +50 +8 +6XJvWCMrykCACsZlVke/PAAA + + +False +-1064 +-1024 +50 +8 +g0TBPf3Nh0KJwiSYVxiPhQAA + + + +clMaroon +$00B9FFFF +559,668;600,668;600,328;549,313 +ys0dUMXSfkahAJXAYIjoOQAA +4JaPx8QgwEWT8vCziLxdSQAA ++sKzDE+8zkS7xWQbBBTVcwAA + +False +1.5707963267949 +15 +ys0dUMXSfkahAJXAYIjoOQAA + + +False +1.5707963267949 +30 +ys0dUMXSfkahAJXAYIjoOQAA + + +False +-1.5707963267949 +15 +ys0dUMXSfkahAJXAYIjoOQAA + + +False +-0.523598775598299 +30 +epHead +j0eu/Ys1xkyBAac51lq70AAA + + +False +0.523598775598299 +30 +epTail +gijAVu6IkkimRi58YU5afQAA + + +False +0.523598775598299 +25 +epHead +j0eu/Ys1xkyBAac51lq70AAA + + +False +-0.523598775598299 +25 +epTail +gijAVu6IkkimRi58YU5afQAA + + +False +-0.785398163397448 +40 +epHead +j0eu/Ys1xkyBAac51lq70AAA + + +False +0.785398163397448 +40 +epTail +gijAVu6IkkimRi58YU5afQAA + + +False +-1028 +-1084 +50 +8 +j0eu/Ys1xkyBAac51lq70AAA + + +False +-1028 +-1084 +50 +8 +gijAVu6IkkimRi58YU5afQAA + + + +clMaroon +$00B9FFFF +430 +156 +120 +40 +1Q7qLHEF7kKyydsrAZ/k1QAA + + +publish-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +664 +160 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +664 +280 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +664 +512 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +664 +392 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +559,527;664,527 +qMuZkyzh+ky3oDxBIC0P/AAA +OUCMrBecwkmcxrWWZfI9yQAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +qMuZkyzh+ky3oDxBIC0P/AAA + + +False +1.5707963267949 +30 +qMuZkyzh+ky3oDxBIC0P/AAA + + +False +-1.5707963267949 +15 +qMuZkyzh+ky3oDxBIC0P/AAA + + +False +-0.523598775598299 +30 +epHead +MBHAyH1qPEWL3nIRNBXalAAA + + +False +0.523598775598299 +30 +epTail +SqEbSyA4zkqxiqZEBvO8kQAA + + +False +0.523598775598299 +25 +epHead +MBHAyH1qPEWL3nIRNBXalAAA + + +False +-0.523598775598299 +25 +epTail +SqEbSyA4zkqxiqZEBvO8kQAA + + +False +-0.785398163397448 +40 +epHead +MBHAyH1qPEWL3nIRNBXalAAA + + +False +0.785398163397448 +40 +epTail +SqEbSyA4zkqxiqZEBvO8kQAA + + +False +-900 +-1256 +50 +8 +MBHAyH1qPEWL3nIRNBXalAAA + + +False +-900 +-1256 +50 +8 +SqEbSyA4zkqxiqZEBvO8kQAA + + + +clMaroon +$00B9FFFF +549,295;664,295 +o0d7TUyzXk6c+PfIZT5lEAAA +kDJ4sMyQokGYpNNs0RQlPQAA +4JaPx8QgwEWT8vCziLxdSQAA + +False +1.5707963267949 +15 +o0d7TUyzXk6c+PfIZT5lEAAA + + +False +1.5707963267949 +30 +o0d7TUyzXk6c+PfIZT5lEAAA + + +False +-1.5707963267949 +15 +o0d7TUyzXk6c+PfIZT5lEAAA + + +False +-0.523598775598299 +30 +epHead +XISyKVl4zUKFIG8yEnSeZwAA + + +False +0.523598775598299 +30 +epTail +B018yNXvg0ygTAeYfrer4QAA + + +False +0.523598775598299 +25 +epHead +XISyKVl4zUKFIG8yEnSeZwAA + + +False +-0.523598775598299 +25 +epTail +B018yNXvg0ygTAeYfrer4QAA + + +False +-0.785398163397448 +40 +epHead +XISyKVl4zUKFIG8yEnSeZwAA + + +False +0.785398163397448 +40 +epTail +B018yNXvg0ygTAeYfrer4QAA + + +False +-900 +-1324 +50 +8 +XISyKVl4zUKFIG8yEnSeZwAA + + +False +-900 +-1324 +50 +8 +B018yNXvg0ygTAeYfrer4QAA + + + +clMaroon +$00B9FFFF +372,592;406,595 +BY9qrj1RFUm4rNyc3SVDmgAA +IY8NFiPGQkOPFFwtq6H0ZgAA +Y9Di27a99UCLuicgXHRPbQAA + +False +1.5707963267949 +15 +BY9qrj1RFUm4rNyc3SVDmgAA + + +False +1.5707963267949 +30 +BY9qrj1RFUm4rNyc3SVDmgAA + + +False +-1.5707963267949 +15 +BY9qrj1RFUm4rNyc3SVDmgAA + + +False +-0.523598775598299 +30 +epHead +d4j7kpAS0ka+ba2k0nXpZAAA + + +False +0.523598775598299 +30 +epTail +IHj45UgS/0izQOpDHKO3GAAA + + +False +0.523598775598299 +25 +epHead +d4j7kpAS0ka+ba2k0nXpZAAA + + +False +-0.523598775598299 +25 +epTail +IHj45UgS/0izQOpDHKO3GAAA + + +False +-0.785398163397448 +40 +epHead +d4j7kpAS0ka+ba2k0nXpZAAA + + +False +0.785398163397448 +40 +epTail +IHj45UgS/0izQOpDHKO3GAAA + + +False +-936 +-1316 +50 +8 +d4j7kpAS0ka+ba2k0nXpZAAA + + +False +-936 +-1316 +50 +8 +IHj45UgS/0izQOpDHKO3GAAA + + + +clMaroon +$00B9FFFF +372,632;424,619 +YnZl5Nva0UCe5UdReEoIzQAA +IY8NFiPGQkOPFFwtq6H0ZgAA +tQieUJFUIUWjBNmfDel6vwAA + +False +1.5707963267949 +15 +YnZl5Nva0UCe5UdReEoIzQAA + + +False +1.5707963267949 +30 +YnZl5Nva0UCe5UdReEoIzQAA + + +False +-1.5707963267949 +15 +YnZl5Nva0UCe5UdReEoIzQAA + + +False +-0.523598775598299 +30 +epHead +A9CObdPLTUSepg+ci/+UBAAA + + +False +0.523598775598299 +30 +epTail +zzJAA14PKEyZOy48ze8TUQAA + + +False +0.523598775598299 +25 +epHead +A9CObdPLTUSepg+ci/+UBAAA + + +False +-0.523598775598299 +25 +epTail +zzJAA14PKEyZOy48ze8TUQAA + + +False +-0.785398163397448 +40 +epHead +A9CObdPLTUSepg+ci/+UBAAA + + +False +0.785398163397448 +40 +epTail +zzJAA14PKEyZOy48ze8TUQAA + + +False +-936 +-1316 +50 +8 +A9CObdPLTUSepg+ci/+UBAAA + + +False +-936 +-1316 +50 +8 +zzJAA14PKEyZOy48ze8TUQAA + + + +clMaroon +$00B9FFFF +549,175;664,175 +hLW1nXlISEGkjCaKgHd0dAAA +pXNv1QjBU0iuyfVI3ul8fwAA +hXLnvpDLz0KIpSPRhb6ECgAA + +False +1.5707963267949 +15 +hLW1nXlISEGkjCaKgHd0dAAA + + +False +1.5707963267949 +30 +hLW1nXlISEGkjCaKgHd0dAAA + + +False +-1.5707963267949 +15 +hLW1nXlISEGkjCaKgHd0dAAA + + +False +-0.523598775598299 +30 +epHead +nWK8/Dbe5kGwMfVczyrs6wAA + + +False +0.523598775598299 +30 +epTail +WZ976OFIREimbDaKoU7o0QAA + + +False +0.523598775598299 +25 +epHead +nWK8/Dbe5kGwMfVczyrs6wAA + + +False +-0.523598775598299 +25 +epTail +WZ976OFIREimbDaKoU7o0QAA + + +False +-0.785398163397448 +40 +epHead +nWK8/Dbe5kGwMfVczyrs6wAA + + +False +0.785398163397448 +40 +epTail +WZ976OFIREimbDaKoU7o0QAA + + +False +-892 +-1428 +50 +8 +nWK8/Dbe5kGwMfVczyrs6wAA + + +False +-892 +-1428 +50 +8 +WZ976OFIREimbDaKoU7o0QAA + + + +clMaroon +$00B9FFFF +559,668;616,668;616,212;549,192 +S8IcyUEQBk2t/QasjWBrEAAA +hXLnvpDLz0KIpSPRhb6ECgAA ++sKzDE+8zkS7xWQbBBTVcwAA + +False +1.5707963267949 +15 +S8IcyUEQBk2t/QasjWBrEAAA + + +False +1.5707963267949 +30 +S8IcyUEQBk2t/QasjWBrEAAA + + +False +-1.5707963267949 +15 +S8IcyUEQBk2t/QasjWBrEAAA + + +False +-0.523598775598299 +30 +epHead +6PWLFqBgek+WMYGWr8g3pAAA + + +False +0.523598775598299 +30 +epTail +9wmTKLpCT0Ga+RcZfnUdYQAA + + +False +0.523598775598299 +25 +epHead +6PWLFqBgek+WMYGWr8g3pAAA + + +False +-0.523598775598299 +25 +epTail +9wmTKLpCT0Ga+RcZfnUdYQAA + + +False +-0.785398163397448 +40 +epHead +6PWLFqBgek+WMYGWr8g3pAAA + + +False +0.785398163397448 +40 +epTail +9wmTKLpCT0Ga+RcZfnUdYQAA + + +False +-900 +-1384 +50 +8 +6PWLFqBgek+WMYGWr8g3pAAA + + +False +-900 +-1384 +50 +8 +9wmTKLpCT0Ga+RcZfnUdYQAA + + + +clMaroon +$0080FF80 +40 +52 +144 +32 +dqA/cPl8GEmWvU/R693yfAAA + + +1 +new-idea-action + + +False + + +False + + + +False +dqA/cPl8GEmWvU/R693yfAAA + + +False +dqA/cPl8GEmWvU/R693yfAAA + + +False +dqA/cPl8GEmWvU/R693yfAAA + + + +clMaroon +$00B9FFFF +664 +692 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +372,707;664,707 +eim49HTyz0aTq6cSTLKUxQAA +6fWpQKk33U+G9a3MEcCGcQAA +T2cKdPg1Bk+hDccckoYQ5QAA + +False +1.5707963267949 +15 +eim49HTyz0aTq6cSTLKUxQAA + + +False +1.5707963267949 +30 +eim49HTyz0aTq6cSTLKUxQAA + + +False +-1.5707963267949 +15 +eim49HTyz0aTq6cSTLKUxQAA + + +False +-0.523598775598299 +30 +epHead +bDDeA0cjxEy6AaRuuqyRnwAA + + +False +0.523598775598299 +30 +epTail +Wbq2l1nmWUigv45vNt7DRAAA + + +False +0.523598775598299 +25 +epHead +bDDeA0cjxEy6AaRuuqyRnwAA + + +False +-0.523598775598299 +25 +epTail +Wbq2l1nmWUigv45vNt7DRAAA + + +False +-0.785398163397448 +40 +epHead +bDDeA0cjxEy6AaRuuqyRnwAA + + +False +0.785398163397448 +40 +epTail +Wbq2l1nmWUigv45vNt7DRAAA + + +False +-980 +-1192 +50 +8 +bDDeA0cjxEy6AaRuuqyRnwAA + + +False +-980 +-1192 +50 +8 +Wbq2l1nmWUigv45vNt7DRAAA + + + +clMaroon +$00FF80FF +420 +652 +140 +32 +YPSGJ8SkH0mAV1HZcqVjOgAA + + +1 +publish-estimat + + +False + + +False + + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + + +clMaroon +$00B9FFFF +430 +388 +120 +40 +1Q7qLHEF7kKyydsrAZ/k1QAA + + +publish-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +489,512;489,427 +Ia4zuWdlXkG9ym+vnOiB3AAA +FqQn7IeHTkizfymgIbEsLAAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +Ia4zuWdlXkG9ym+vnOiB3AAA + + +False +1.5707963267949 +30 +Ia4zuWdlXkG9ym+vnOiB3AAA + + +False +-1.5707963267949 +15 +Ia4zuWdlXkG9ym+vnOiB3AAA + + +False +-0.523598775598299 +30 +epHead +b4rYIDwkWUShf2GiOCXYDgAA + + +False +0.523598775598299 +30 +epTail +02hOTKH4qE+Snq2RdNFI/gAA + + +False +0.523598775598299 +25 +epHead +b4rYIDwkWUShf2GiOCXYDgAA + + +False +-0.523598775598299 +25 +epTail +02hOTKH4qE+Snq2RdNFI/gAA + + +False +-0.785398163397448 +40 +epHead +b4rYIDwkWUShf2GiOCXYDgAA + + +False +0.785398163397448 +40 +epTail +02hOTKH4qE+Snq2RdNFI/gAA + + +False +-1016 +-1132 +50 +8 +b4rYIDwkWUShf2GiOCXYDgAA + + +False +-1016 +-1132 +50 +8 +02hOTKH4qE+Snq2RdNFI/gAA + + + +clMaroon +$00B9FFFF +549,407;664,407 +XiWUowb9X0+cmh/jn2Y6nwAA +/jiNGEbH9EKzxyhBp7dGbAAA +FqQn7IeHTkizfymgIbEsLAAA + +False +1.5707963267949 +15 +XiWUowb9X0+cmh/jn2Y6nwAA + + +False +1.5707963267949 +30 +XiWUowb9X0+cmh/jn2Y6nwAA + + +False +-1.5707963267949 +15 +XiWUowb9X0+cmh/jn2Y6nwAA + + +False +-0.523598775598299 +30 +epHead +NM+MZJjv/UaHiAj8twEHBgAA + + +False +0.523598775598299 +30 +epTail +KHKx1GHN4Uam3tVmAqbglQAA + + +False +0.523598775598299 +25 +epHead +NM+MZJjv/UaHiAj8twEHBgAA + + +False +-0.523598775598299 +25 +epTail +KHKx1GHN4Uam3tVmAqbglQAA + + +False +-0.785398163397448 +40 +epHead +NM+MZJjv/UaHiAj8twEHBgAA + + +False +0.785398163397448 +40 +epTail +KHKx1GHN4Uam3tVmAqbglQAA + + +False +-1016 +-1132 +50 +8 +NM+MZJjv/UaHiAj8twEHBgAA + + +False +-1016 +-1132 +50 +8 +KHKx1GHN4Uam3tVmAqbglQAA + + + +clMaroon +$00B9FFFF +489,543;489,588 +MQ6Mry1/cE60C5Ss93uHrAAA +IY8NFiPGQkOPFFwtq6H0ZgAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +MQ6Mry1/cE60C5Ss93uHrAAA + + +False +1.5707963267949 +30 +MQ6Mry1/cE60C5Ss93uHrAAA + + +False +-1.5707963267949 +15 +MQ6Mry1/cE60C5Ss93uHrAAA + + +False +-0.523598775598299 +30 +epHead +x9ru4+yHq0W72sfWmglc7wAA + + +False +0.523598775598299 +30 +epTail +xf2zcv1RLES2E6ZY//8hdwAA + + +False +0.523598775598299 +25 +epHead +x9ru4+yHq0W72sfWmglc7wAA + + +False +-0.523598775598299 +25 +epTail +xf2zcv1RLES2E6ZY//8hdwAA + + +False +-0.785398163397448 +40 +epHead +x9ru4+yHq0W72sfWmglc7wAA + + +False +0.785398163397448 +40 +epTail +xf2zcv1RLES2E6ZY//8hdwAA + + +False +-1016 +-1132 +50 +8 +x9ru4+yHq0W72sfWmglc7wAA + + +False +-1016 +-1132 +50 +8 +xf2zcv1RLES2E6ZY//8hdwAA + + + +clMaroon +$00B9FFFF +559,668;568,668;568,440;537,427 +/Q+8gAvTq0+PLlF0qnEkGwAA +FqQn7IeHTkizfymgIbEsLAAA ++sKzDE+8zkS7xWQbBBTVcwAA + +False +1.5707963267949 +15 +/Q+8gAvTq0+PLlF0qnEkGwAA + + +False +1.5707963267949 +30 +/Q+8gAvTq0+PLlF0qnEkGwAA + + +False +-1.5707963267949 +15 +/Q+8gAvTq0+PLlF0qnEkGwAA + + +False +-0.523598775598299 +30 +epHead +hu41jycWSEOI3Ox7jzRK0gAA + + +False +0.523598775598299 +30 +epTail +v1eyd2Q+GU+hNljhcBIlnAAA + + +False +0.523598775598299 +25 +epHead +hu41jycWSEOI3Ox7jzRK0gAA + + +False +-0.523598775598299 +25 +epTail +v1eyd2Q+GU+hNljhcBIlnAAA + + +False +-0.785398163397448 +40 +epHead +hu41jycWSEOI3Ox7jzRK0gAA + + +False +0.785398163397448 +40 +epTail +v1eyd2Q+GU+hNljhcBIlnAAA + + +False +-1016 +-1132 +50 +8 +hu41jycWSEOI3Ox7jzRK0gAA + + +False +-1016 +-1132 +50 +8 +v1eyd2Q+GU+hNljhcBIlnAAA + + + +clMaroon +$00B9FFFF +253 +336 +121 +32 +LRvECEfPPkOYfW5/8H8P3QAA + + +1 +code-branch + + +False + + +False + + + +False +LRvECEfPPkOYfW5/8H8P3QAA + + +False +LRvECEfPPkOYfW5/8H8P3QAA + + +False +LRvECEfPPkOYfW5/8H8P3QAA + + + +clMaroon +$00B9FFFF +313,367;312,388 +SCWqm0HM/0qIGrMzbXXlWwAA +LdINJygfWEW3vhPOZonupQAA +ycjyLlSj3kqAT4WlwN+ABQAA + +False +1.5707963267949 +15 +SCWqm0HM/0qIGrMzbXXlWwAA + + +False +1.5707963267949 +30 +SCWqm0HM/0qIGrMzbXXlWwAA + + +False +-1.5707963267949 +15 +SCWqm0HM/0qIGrMzbXXlWwAA + + +False +-0.523598775598299 +30 +epHead +6hCImufvAUuT81kGxRsmxgAA + + +False +0.523598775598299 +30 +epTail +6mwoN9toVUKgNXSs/zpXIQAA + + +False +0.523598775598299 +25 +epHead +6hCImufvAUuT81kGxRsmxgAA + + +False +-0.523598775598299 +25 +epTail +6mwoN9toVUKgNXSs/zpXIQAA + + +False +-0.785398163397448 +40 +epHead +6hCImufvAUuT81kGxRsmxgAA + + +False +0.785398163397448 +40 +epTail +6mwoN9toVUKgNXSs/zpXIQAA + + +False +-1008 +-1236 +50 +8 +6hCImufvAUuT81kGxRsmxgAA + + +False +-1008 +-1236 +50 +8 +6mwoN9toVUKgNXSs/zpXIQAA + + + +clMaroon +$00B9FFFF +427 +332 +127 +32 +bdHUhH7aEUuvu1sA17cxzQAA + + +1 +code-combine + + +False + + +False + + + +False +bdHUhH7aEUuvu1sA17cxzQAA + + +False +bdHUhH7aEUuvu1sA17cxzQAA + + +False +bdHUhH7aEUuvu1sA17cxzQAA + + + +clMaroon +$00B9FFFF +559,528;584,528;584,384;531,363 +xrdGh677e02q1kDtgtazfQAA +ZIbf0/c06EGBYTz9Fgc3IQAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +xrdGh677e02q1kDtgtazfQAA + + +False +1.5707963267949 +30 +xrdGh677e02q1kDtgtazfQAA + + +False +-1.5707963267949 +15 +xrdGh677e02q1kDtgtazfQAA + + +False +-0.523598775598299 +30 +epHead +TchuDcMxgU66R77KAyfQSgAA + + +False +0.523598775598299 +30 +epTail +7PzK5upkUk+dJkyPmUbNewAA + + +False +0.523598775598299 +25 +epHead +TchuDcMxgU66R77KAyfQSgAA + + +False +-0.523598775598299 +25 +epTail +7PzK5upkUk+dJkyPmUbNewAA + + +False +-0.785398163397448 +40 +epHead +TchuDcMxgU66R77KAyfQSgAA + + +False +0.785398163397448 +40 +epTail +7PzK5upkUk+dJkyPmUbNewAA + + +False +-1008 +-1236 +50 +8 +TchuDcMxgU66R77KAyfQSgAA + + +False +-1008 +-1236 +50 +8 +7PzK5upkUk+dJkyPmUbNewAA + + + +clMaroon +$00B9FFFF +427,348;396,348;396,468;372,468 +SQJ2LNwqDUSo9n73ytxYFwAA +0eY6HnBo4kSNrbtAFd/AoQAA +ZIbf0/c06EGBYTz9Fgc3IQAA + +False +1.5707963267949 +15 +SQJ2LNwqDUSo9n73ytxYFwAA + + +False +1.5707963267949 +30 +SQJ2LNwqDUSo9n73ytxYFwAA + + +False +-1.5707963267949 +15 +SQJ2LNwqDUSo9n73ytxYFwAA + + +False +-0.523598775598299 +30 +epHead +TumZKVN0d0in5UkpqbuZTAAA + + +False +0.523598775598299 +30 +epTail +98m3w3R5mkuexiYTm0X0CQAA + + +False +0.523598775598299 +25 +epHead +TumZKVN0d0in5UkpqbuZTAAA + + +False +-0.523598775598299 +25 +epTail +98m3w3R5mkuexiYTm0X0CQAA + + +False +-0.785398163397448 +40 +epHead +TumZKVN0d0in5UkpqbuZTAAA + + +False +0.785398163397448 +40 +epTail +98m3w3R5mkuexiYTm0X0CQAA + + +False +-1008 +-1236 +50 +8 +TumZKVN0d0in5UkpqbuZTAAA + + +False +-1008 +-1236 +50 +8 +98m3w3R5mkuexiYTm0X0CQAA + + + +clMaroon +$00B9FFFF +442,543;368,568 +pBLToI3BDkSX21nTyuesfQAA +Y9Di27a99UCLuicgXHRPbQAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +pBLToI3BDkSX21nTyuesfQAA + + +False +1.5707963267949 +30 +pBLToI3BDkSX21nTyuesfQAA + + +False +-1.5707963267949 +15 +pBLToI3BDkSX21nTyuesfQAA + + +False +-0.523598775598299 +30 +epHead +9Txo32SVmUCTFUkGnzyaoQAA + + +False +0.523598775598299 +30 +epTail +SlWJmvsLTEKb0sz8CslRigAA + + +False +0.523598775598299 +25 +epHead +9Txo32SVmUCTFUkGnzyaoQAA + + +False +-0.523598775598299 +25 +epTail +SlWJmvsLTEKb0sz8CslRigAA + + +False +-0.785398163397448 +40 +epHead +9Txo32SVmUCTFUkGnzyaoQAA + + +False +0.785398163397448 +40 +epTail +SlWJmvsLTEKb0sz8CslRigAA + + +False +-1008 +-1236 +50 +8 +9Txo32SVmUCTFUkGnzyaoQAA + + +False +-1008 +-1236 +50 +8 +SlWJmvsLTEKb0sz8CslRigAA + + + +clMaroon +$00B9FFFF +624 +600 +120 +70 +AihHVW7SgkeVDEL8szGXUQAA + + +soft-repo + + +False + + +False + + + + +clMaroon +$00B9FFFF +224,295;253,295 +zLIxpYqFF02jEI1wZKI0SQAA +05y9pi2UcU6ptxllVr+G/gAA +cgzV1Cjm1E+TvgDTXT4Z/AAA + +False +1.5707963267949 +15 +zLIxpYqFF02jEI1wZKI0SQAA + + +False +1.5707963267949 +30 +zLIxpYqFF02jEI1wZKI0SQAA + + +False +-1.5707963267949 +15 +zLIxpYqFF02jEI1wZKI0SQAA + + +False +-0.523598775598299 +30 +epHead +RueokuJsJ02RY8qTm1ik8wAA + + +False +0.523598775598299 +30 +epTail +oV0xUwtlkEW3wNVlZTulsQAA + + +False +0.523598775598299 +25 +epHead +RueokuJsJ02RY8qTm1ik8wAA + + +False +-0.523598775598299 +25 +epTail +oV0xUwtlkEW3wNVlZTulsQAA + + +False +-0.785398163397448 +40 +epHead +RueokuJsJ02RY8qTm1ik8wAA + + +False +0.785398163397448 +40 +epTail +oV0xUwtlkEW3wNVlZTulsQAA + + +False +-1008 +-1236 +50 +8 +RueokuJsJ02RY8qTm1ik8wAA + + +False +-1008 +-1236 +50 +8 +oV0xUwtlkEW3wNVlZTulsQAA + + + +clMaroon +$00B9FFFF +176,407;253,407 +8JoAmLoX6UCsEUuYOfgFrwAA +LdINJygfWEW3vhPOZonupQAA +n/wO/s227keDkWnSaoMPFwAA + +False +1.5707963267949 +15 +8JoAmLoX6UCsEUuYOfgFrwAA + + +False +1.5707963267949 +30 +8JoAmLoX6UCsEUuYOfgFrwAA + + +False +-1.5707963267949 +15 +8JoAmLoX6UCsEUuYOfgFrwAA + + +False +-0.523598775598299 +30 +epHead +kQl08Rz6jUCQA6Vz31/AmQAA + + +False +0.523598775598299 +30 +epTail +HAKtlFj5902XipIJf5JuhQAA + + +False +0.523598775598299 +25 +epHead +kQl08Rz6jUCQA6Vz31/AmQAA + + +False +-0.523598775598299 +25 +epTail +HAKtlFj5902XipIJf5JuhQAA + + +False +-0.785398163397448 +40 +epHead +kQl08Rz6jUCQA6Vz31/AmQAA + + +False +0.785398163397448 +40 +epTail +HAKtlFj5902XipIJf5JuhQAA + + +False +-1008 +-1236 +50 +8 +kQl08Rz6jUCQA6Vz31/AmQAA + + +False +-1008 +-1236 +50 +8 +HAKtlFj5902XipIJf5JuhQAA + + + +clMaroon +$00B9FFFF +180,467;253,467 +uQ67KS+1vUmRO9PVPQmAvQAA +0eY6HnBo4kSNrbtAFd/AoQAA +8LIFapZp5k6ylbwQfcyklgAA + +False +1.5707963267949 +15 +uQ67KS+1vUmRO9PVPQmAvQAA + + +False +1.5707963267949 +30 +uQ67KS+1vUmRO9PVPQmAvQAA + + +False +-1.5707963267949 +15 +uQ67KS+1vUmRO9PVPQmAvQAA + + +False +-0.523598775598299 +30 +epHead +su8oYR2Ky0aSXbd6TlFoXAAA + + +False +0.523598775598299 +30 +epTail +IT/R9YctZE+fstolgXNfRwAA + + +False +0.523598775598299 +25 +epHead +su8oYR2Ky0aSXbd6TlFoXAAA + + +False +-0.523598775598299 +25 +epTail +IT/R9YctZE+fstolgXNfRwAA + + +False +-0.785398163397448 +40 +epHead +su8oYR2Ky0aSXbd6TlFoXAAA + + +False +0.785398163397448 +40 +epTail +IT/R9YctZE+fstolgXNfRwAA + + +False +-1008 +-1236 +50 +8 +su8oYR2Ky0aSXbd6TlFoXAAA + + +False +-1008 +-1236 +50 +8 +IT/R9YctZE+fstolgXNfRwAA + + + +clMaroon +$00B9FFFF +192,587;253,587 +S89azVl1DEerKr0Lg7uYIwAA +Y9Di27a99UCLuicgXHRPbQAA ++UDQJ377E0yfeyDDN+u8twAA + +False +1.5707963267949 +15 +S89azVl1DEerKr0Lg7uYIwAA + + +False +1.5707963267949 +30 +S89azVl1DEerKr0Lg7uYIwAA + + +False +-1.5707963267949 +15 +S89azVl1DEerKr0Lg7uYIwAA + + +False +-0.523598775598299 +30 +epHead +c1DHaSDPuEOz4QdBj45gwQAA + + +False +0.523598775598299 +30 +epTail +r/hRY5C/z0KLE99Zb7wcHwAA + + +False +0.523598775598299 +25 +epHead +c1DHaSDPuEOz4QdBj45gwQAA + + +False +-0.523598775598299 +25 +epTail +r/hRY5C/z0KLE99Zb7wcHwAA + + +False +-0.785398163397448 +40 +epHead +c1DHaSDPuEOz4QdBj45gwQAA + + +False +0.785398163397448 +40 +epTail +r/hRY5C/z0KLE99Zb7wcHwAA + + +False +-1008 +-1236 +50 +8 +c1DHaSDPuEOz4QdBj45gwQAA + + +False +-1008 +-1236 +50 +8 +r/hRY5C/z0KLE99Zb7wcHwAA + + + +clMaroon +$00B9FFFF +190,647;253,647 +UmPi888MJEySape3IDytNQAA +tQieUJFUIUWjBNmfDel6vwAA +LdVy/adykEu3BEUiOmsYBgAA + +False +1.5707963267949 +15 +UmPi888MJEySape3IDytNQAA + + +False +1.5707963267949 +30 +UmPi888MJEySape3IDytNQAA + + +False +-1.5707963267949 +15 +UmPi888MJEySape3IDytNQAA + + +False +-0.523598775598299 +30 +epHead +5AK+S/x8EU+IYfu9OvYF4QAA + + +False +0.523598775598299 +30 +epTail +0G7qZy+/sEqjVd5kqmhK0QAA + + +False +0.523598775598299 +25 +epHead +5AK+S/x8EU+IYfu9OvYF4QAA + + +False +-0.523598775598299 +25 +epTail +0G7qZy+/sEqjVd5kqmhK0QAA + + +False +-0.785398163397448 +40 +epHead +5AK+S/x8EU+IYfu9OvYF4QAA + + +False +0.785398163397448 +40 +epTail +0G7qZy+/sEqjVd5kqmhK0QAA + + +False +-1008 +-1236 +50 +8 +5AK+S/x8EU+IYfu9OvYF4QAA + + +False +-1008 +-1236 +50 +8 +0G7qZy+/sEqjVd5kqmhK0QAA + + + +clMaroon +$00B9FFFF +196,175;253,175 +WED3oZHyO0Sbd335J3t4SwAA +pkAZPt0EzUO5vbW8/2ISDgAA +WZ6Nv0dBuES8PyEoPwv1hAAA + +False +1.5707963267949 +15 +WED3oZHyO0Sbd335J3t4SwAA + + +False +1.5707963267949 +30 +WED3oZHyO0Sbd335J3t4SwAA + + +False +-1.5707963267949 +15 +WED3oZHyO0Sbd335J3t4SwAA + + +False +-0.523598775598299 +30 +epHead +6hqoLK2vfEyhVl9t+07/sQAA + + +False +0.523598775598299 +30 +epTail +BtfJFt8gzkWLxq07KGt8ZQAA + + +False +0.523598775598299 +25 +epHead +6hqoLK2vfEyhVl9t+07/sQAA + + +False +-0.523598775598299 +25 +epTail +BtfJFt8gzkWLxq07KGt8ZQAA + + +False +-0.785398163397448 +40 +epHead +6hqoLK2vfEyhVl9t+07/sQAA + + +False +0.785398163397448 +40 +epTail +BtfJFt8gzkWLxq07KGt8ZQAA + + +False +-1008 +-1236 +50 +8 +6hqoLK2vfEyhVl9t+07/sQAA + + +False +-1008 +-1236 +50 +8 +BtfJFt8gzkWLxq07KGt8ZQAA + + + +clMaroon +$00B9FFFF +185,707;253,707 +OaMYngAfm0WoiHZwhZD+qQAA +T2cKdPg1Bk+hDccckoYQ5QAA +H35H/g998EO5+b+My/9TGwAA + +False +1.5707963267949 +15 +OaMYngAfm0WoiHZwhZD+qQAA + + +False +1.5707963267949 +30 +OaMYngAfm0WoiHZwhZD+qQAA + + +False +-1.5707963267949 +15 +OaMYngAfm0WoiHZwhZD+qQAA + + +False +-0.523598775598299 +30 +epHead +cmrnCjXFp0S8tNPvjvqbWgAA + + +False +0.523598775598299 +30 +epTail +Dwy9nxvM50Cbv0guTPXG+QAA + + +False +0.523598775598299 +25 +epHead +cmrnCjXFp0S8tNPvjvqbWgAA + + +False +-0.523598775598299 +25 +epTail +Dwy9nxvM50Cbv0guTPXG+QAA + + +False +-0.785398163397448 +40 +epHead +cmrnCjXFp0S8tNPvjvqbWgAA + + +False +0.785398163397448 +40 +epTail +Dwy9nxvM50Cbv0guTPXG+QAA + + +False +-1036 +-1236 +50 +8 +cmrnCjXFp0S8tNPvjvqbWgAA + + +False +-1036 +-1236 +50 +8 +Dwy9nxvM50Cbv0guTPXG+QAA + + + +clMaroon +$0080FF80 +51 +204 +138 +32 +tptycT8EmUmriJ3RFm3kFAAA + + +1 +analysis-action + + +False + + +False + + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + + +clMaroon +$0080FF80 +12 +104 +190 +32 +jic239+6CEiL3vfxIBKzZwAA + + +1 +usr-bug-report-action + + +False + + +False + + + +False +jic239+6CEiL3vfxIBKzZwAA + + +False +jic239+6CEiL3vfxIBKzZwAA + + +False +jic239+6CEiL3vfxIBKzZwAA + + + +clMaroon +$00B9FFFF +185,204;253,188 +IoGZLKJYy0Su7gKold2FugAA +pkAZPt0EzUO5vbW8/2ISDgAA +UyNk1RnZTki1ekm3+nWlBAAA + +False +1.5707963267949 +15 +IoGZLKJYy0Su7gKold2FugAA + + +False +1.5707963267949 +30 +IoGZLKJYy0Su7gKold2FugAA + + +False +-1.5707963267949 +15 +IoGZLKJYy0Su7gKold2FugAA + + +False +-0.523598775598299 +30 +epHead +npHVEpJLck2XAMV9s8g6VwAA + + +False +0.523598775598299 +30 +epTail +J3TF5Wds2UivZ3unkZY6DwAA + + +False +0.523598775598299 +25 +epHead +npHVEpJLck2XAMV9s8g6VwAA + + +False +-0.523598775598299 +25 +epTail +J3TF5Wds2UivZ3unkZY6DwAA + + +False +-0.785398163397448 +40 +epHead +npHVEpJLck2XAMV9s8g6VwAA + + +False +0.785398163397448 +40 +epTail +J3TF5Wds2UivZ3unkZY6DwAA + + +False +-1008 +-1236 +50 +8 +npHVEpJLck2XAMV9s8g6VwAA + + +False +-1008 +-1236 +50 +8 +J3TF5Wds2UivZ3unkZY6DwAA + + + +clMaroon +$00FF80FF +406 +588 +168 +32 +sl9IvUV4W0Kodgc58LjsVgAA + + +1 +complete-estimate + + +False + + +False + + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + + +clMaroon +$00B9FFFF +489,619;489,652 +KPYLQRKmIkeAc/y+UUmN4QAA ++sKzDE+8zkS7xWQbBBTVcwAA +IY8NFiPGQkOPFFwtq6H0ZgAA + +False +1.5707963267949 +15 +KPYLQRKmIkeAc/y+UUmN4QAA + + +False +1.5707963267949 +30 +KPYLQRKmIkeAc/y+UUmN4QAA + + +False +-1.5707963267949 +15 +KPYLQRKmIkeAc/y+UUmN4QAA + + +False +-0.523598775598299 +30 +epHead +BlAGbbIi30aMaBEtftLGIAAA + + +False +0.523598775598299 +30 +epTail +lrh/7WQ3A0mIOTZd1oStcgAA + + +False +0.523598775598299 +25 +epHead +BlAGbbIi30aMaBEtftLGIAAA + + +False +-0.523598775598299 +25 +epTail +lrh/7WQ3A0mIOTZd1oStcgAA + + +False +-0.785398163397448 +40 +epHead +BlAGbbIi30aMaBEtftLGIAAA + + +False +0.785398163397448 +40 +epTail +lrh/7WQ3A0mIOTZd1oStcgAA + + +False +-1008 +-1236 +50 +8 +BlAGbbIi30aMaBEtftLGIAAA + + +False +-1008 +-1236 +50 +8 +lrh/7WQ3A0mIOTZd1oStcgAA + + + +clMaroon +$0080FF80 +452 +32 +113 +32 +hWsqFBqliU2am4OA8VEXDgAA + + +1 +using-action + + +False + + +False + + + +False +hWsqFBqliU2am4OA8VEXDgAA + + +False +hWsqFBqliU2am4OA8VEXDgAA + + +False +hWsqFBqliU2am4OA8VEXDgAA + + + +clMaroon +$00B9FFFF +372,176;396,176;396,296;372,296 +FAmlbTk0n0ytt/cqGfgskwAA +05y9pi2UcU6ptxllVr+G/gAA +pkAZPt0EzUO5vbW8/2ISDgAA + +False +1.5707963267949 +15 +FAmlbTk0n0ytt/cqGfgskwAA + + +False +1.5707963267949 +30 +FAmlbTk0n0ytt/cqGfgskwAA + + +False +-1.5707963267949 +15 +FAmlbTk0n0ytt/cqGfgskwAA + + +False +-0.523598775598299 +30 +epHead +WDInVNo55Uu7BHXfcUQLNgAA + + +False +0.523598775598299 +30 +epTail +tXhFQ7TewkWyBpAaKgAS+QAA + + +False +0.523598775598299 +25 +epHead +WDInVNo55Uu7BHXfcUQLNgAA + + +False +-0.523598775598299 +25 +epTail +tXhFQ7TewkWyBpAaKgAS+QAA + + +False +-0.785398163397448 +40 +epHead +WDInVNo55Uu7BHXfcUQLNgAA + + +False +0.785398163397448 +40 +epTail +tXhFQ7TewkWyBpAaKgAS+QAA + + +False +-1008 +-1236 +50 +8 +WDInVNo55Uu7BHXfcUQLNgAA + + +False +-1008 +-1236 +50 +8 +tXhFQ7TewkWyBpAaKgAS+QAA + + + +clMaroon +$00B9FFFF +201,119;240,119 +powHE2AyUUeexm1F5fODTAAA +op7TXMmXt0mHqk1AIwA74gAA +YVBwJiAt70+Y3BJSw5fjFgAA + +False +1.5707963267949 +15 +powHE2AyUUeexm1F5fODTAAA + + +False +1.5707963267949 +30 +powHE2AyUUeexm1F5fODTAAA + + +False +-1.5707963267949 +15 +powHE2AyUUeexm1F5fODTAAA + + +False +-0.523598775598299 +30 +epHead +gfyHi9WUpE6GD9hBzk2snQAA + + +False +0.523598775598299 +30 +epTail +YjM/m1UlCki4/Q0e0sh8lgAA + + +False +0.523598775598299 +25 +epHead +gfyHi9WUpE6GD9hBzk2snQAA + + +False +-0.523598775598299 +25 +epTail +YjM/m1UlCki4/Q0e0sh8lgAA + + +False +-0.785398163397448 +40 +epHead +gfyHi9WUpE6GD9hBzk2snQAA + + +False +0.785398163397448 +40 +epTail +YjM/m1UlCki4/Q0e0sh8lgAA + + +False +-368 +-1180 +50 +8 +gfyHi9WUpE6GD9hBzk2snQAA + + +False +-368 +-1180 +50 +8 +YjM/m1UlCki4/Q0e0sh8lgAA + + + +clMaroon +clSilver +652 +104 +110 +32 +H7tysEnUp0+p4o84YYVC8wAA + + +1 +bugfix-work + + +False + + +False + + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + + +clMaroon +$00B9FFFF +398,119;652,119 ++gvlzndWo0SXFj3rSfMCdQAA +gVBoAJXO/kqra8XiHFVH7QAA +op7TXMmXt0mHqk1AIwA74gAA + +False +1.5707963267949 +15 ++gvlzndWo0SXFj3rSfMCdQAA + + +False +1.5707963267949 +30 ++gvlzndWo0SXFj3rSfMCdQAA + + +False +-1.5707963267949 +15 ++gvlzndWo0SXFj3rSfMCdQAA + + +False +-0.523598775598299 +30 +epHead +o/0hT+QIWUatedossmtPBQAA + + +False +0.523598775598299 +30 +epTail +5RC8wEWMEE64UO9nj5kBkAAA + + +False +0.523598775598299 +25 +epHead +o/0hT+QIWUatedossmtPBQAA + + +False +-0.523598775598299 +25 +epTail +5RC8wEWMEE64UO9nj5kBkAAA + + +False +-0.785398163397448 +40 +epHead +o/0hT+QIWUatedossmtPBQAA + + +False +0.785398163397448 +40 +epTail +5RC8wEWMEE64UO9nj5kBkAAA + + +False +-1008 +-1236 +50 +8 +o/0hT+QIWUatedossmtPBQAA + + +False +-1008 +-1236 +50 +8 +5RC8wEWMEE64UO9nj5kBkAAA + + + +clMaroon +$0080FF80 +252 +32 +138 +32 +tptycT8EmUmriJ3RFm3kFAAA + + +1 +analysis-action + + +False + + +False + + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + + +clMaroon +$00B9FFFF +210,36;252,40 +Ycu282Q90kSZPuP8Y2664QAA +3nCDuBMsK0+QzoSS/9JHsgAA +7uNpzIMfD0eMWIaeUbLlHQAA + +False +1.5707963267949 +15 +Ycu282Q90kSZPuP8Y2664QAA + + +False +1.5707963267949 +30 +Ycu282Q90kSZPuP8Y2664QAA + + +False +-1.5707963267949 +15 +Ycu282Q90kSZPuP8Y2664QAA + + +False +-0.523598775598299 +30 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +0.523598775598299 +30 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +0.523598775598299 +25 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +-0.523598775598299 +25 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +-0.785398163397448 +40 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +0.785398163397448 +40 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +-1008 +-1236 +50 +8 +tbE2qZkS9UCvoD6eysPdBQAA + + +False +-1008 +-1236 +50 +8 +8Gn/k11xTkGZ83K2PTY6tgAA + + + +clMaroon +$00B9FFFF +183,60;252,53 +2f8CCoiKYEm2bnh0fSgF5AAA +3nCDuBMsK0+QzoSS/9JHsgAA +KLbcUDvcykStsj8g95lfAgAA + +False +1.5707963267949 +15 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +1.5707963267949 +30 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +-1.5707963267949 +15 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +-0.523598775598299 +30 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +0.523598775598299 +30 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +0.523598775598299 +25 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +-0.523598775598299 +25 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +-0.785398163397448 +40 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +0.785398163397448 +40 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +-1008 +-1236 +50 +8 +XqdZXwSYokCQBpZDzAi8kQAA + + +False +-1008 +-1236 +50 +8 +FMzzdvZAeUWKXvIN8LFkfwAA + + + + + +dev-initial-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +F7Rmog3w4EughQCSKf38hgAA +13 + +clMaroon +28 +22 +208 +339 +System + + +clMaroon +$00B9FFFF +61 +98 +134 +45 +kM7+GQ5RuEmygAJdSluSjQAA + + +1 +src-pkg-create + + +False + + +False + + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + + +clMaroon +$00B9FFFF +76 +276 +100 +32 +KmQBouG6c0yb16gPnUnBtQAA + + +1 +RAD-demo + + +False + + +False + + + +False +KmQBouG6c0yb16gPnUnBtQAA + + +False +KmQBouG6c0yb16gPnUnBtQAA + + +False +KmQBouG6c0yb16gPnUnBtQAA + + + +clMaroon +$00B9FFFF +127,142;127,154 +YcGgDGXOZ06J+TZOxU72agAA +MD2wdRztkUaHPYJptdpRnwAA +g9FXZVEqkEeDovQh5ld2zgAA + +False +1.5707963267949 +15 +YcGgDGXOZ06J+TZOxU72agAA + + +False +1.5707963267949 +30 +YcGgDGXOZ06J+TZOxU72agAA + + +False +-1.5707963267949 +15 +YcGgDGXOZ06J+TZOxU72agAA + + +False +-0.523598775598299 +30 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +0.523598775598299 +30 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +0.523598775598299 +25 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +-0.523598775598299 +25 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +-0.785398163397448 +40 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +0.785398163397448 +40 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +-2056 +-996 +50 +8 +W6JXNHPDXE+JzttRtRevOgAA + + +False +-2056 +-996 +50 +8 +rO/Oarhbpk6wEn45hIpPfAAA + + + +clMaroon +$00B9FFFF +61 +46 +135 +45 +l2Lw5fePkE+9xXcdzSY+bwAA + + +1 +dev-env-install + + +False + + +False + + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + + +clMaroon +$00B9FFFF +128,90;128,98 +3RL8yaG7p0udrs0v9djevAAA +g9FXZVEqkEeDovQh5ld2zgAA +Hb/FVc/wi0OFVH1zZMj5cQAA + +False +1.5707963267949 +15 +3RL8yaG7p0udrs0v9djevAAA + + +False +1.5707963267949 +30 +3RL8yaG7p0udrs0v9djevAAA + + +False +-1.5707963267949 +15 +3RL8yaG7p0udrs0v9djevAAA + + +False +-0.523598775598299 +30 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +0.523598775598299 +30 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +0.523598775598299 +25 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +-0.523598775598299 +25 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +-0.785398163397448 +40 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +0.785398163397448 +40 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +-2056 +-996 +50 +8 +La7Sdx9zEUWWIkxIncjJuAAA + + +False +-2056 +-996 +50 +8 +h4chvQo17kKpYAZk9SZs0wAA + + + +clMaroon +$00B9FFFF +54 +154 +148 +45 +ofqv4KD9ukybRvF//Fek/AAA + + +1 +web home pages + + +False + + +False + + + +False +ofqv4KD9ukybRvF//Fek/AAA + + +False +ofqv4KD9ukybRvF//Fek/AAA + + +False +ofqv4KD9ukybRvF//Fek/AAA + + + +clMaroon +$00B9FFFF +127,198;127,218 +BYyEw6WhrkigDw+109evLAAA +JUjJ0DqUdUiwoes9veWzIgAA +MD2wdRztkUaHPYJptdpRnwAA + +False +1.5707963267949 +15 +BYyEw6WhrkigDw+109evLAAA + + +False +1.5707963267949 +30 +BYyEw6WhrkigDw+109evLAAA + + +False +-1.5707963267949 +15 +BYyEw6WhrkigDw+109evLAAA + + +False +-0.523598775598299 +30 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +0.523598775598299 +30 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +0.523598775598299 +25 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +-0.523598775598299 +25 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +-0.785398163397448 +40 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +0.785398163397448 +40 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +-2056 +-996 +50 +8 +2dUTUSyX8USUOoaapULmuQAA + + +False +-2056 +-996 +50 +8 +Dk4WLVZ+SU+WfPXc7TG0IwAA + + + +clMaroon +$00B9FFFF +34 +218 +189 +45 +czS7yLr6oUygLwEMTWJMVgAA + + +1 +first-ver-dev-env-chk + + +False + + +False + + + +False +czS7yLr6oUygLwEMTWJMVgAA + + +False +czS7yLr6oUygLwEMTWJMVgAA + + +False +czS7yLr6oUygLwEMTWJMVgAA + + + +clMaroon +$00B9FFFF +127,262;126,276 +ULUs5j3aC0Gd9Vn1OUTU2wAA +jJnr+ewJmkiXbJ8FW5RHwQAA +JUjJ0DqUdUiwoes9veWzIgAA + +False +1.5707963267949 +15 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +1.5707963267949 +30 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +-1.5707963267949 +15 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +-0.523598775598299 +30 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +0.523598775598299 +30 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +0.523598775598299 +25 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +-0.523598775598299 +25 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +-0.785398163397448 +40 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +0.785398163397448 +40 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +-2056 +-996 +50 +8 +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +-2056 +-996 +50 +8 +XXlOcGC2n0emsre13Wy0GgAA + + + +clMaroon +$00B9FFFF +74 +26 +109 +23 +dev-initial-procedure + + + +clMaroon +$00B9FFFF +60 +320 +132 +32 +4Ng728cyoEW6niFYPfKpFAAA + + +1 +end-procedure + + +False + + +False + + + +False +4Ng728cyoEW6niFYPfKpFAAA + + +False +4Ng728cyoEW6niFYPfKpFAAA + + +False +4Ng728cyoEW6niFYPfKpFAAA + + + +clMaroon +$00B9FFFF +125,307;125,320 +ucnlPfSho0+nLeC2/imr6wAA +70rDX5jwP0iWbeW/wLyyFwAA +jJnr+ewJmkiXbJ8FW5RHwQAA + +False +1.5707963267949 +15 +ucnlPfSho0+nLeC2/imr6wAA + + +False +1.5707963267949 +30 +ucnlPfSho0+nLeC2/imr6wAA + + +False +-1.5707963267949 +15 +ucnlPfSho0+nLeC2/imr6wAA + + +False +-0.523598775598299 +30 +epHead +hxKkcKewvkuhqVgosrEOqAAA + + +False +0.523598775598299 +30 +epTail +7Yo61DFsNUaIwp+0+TNjXwAA + + +False +0.523598775598299 +25 +epHead +hxKkcKewvkuhqVgosrEOqAAA + + +False +-0.523598775598299 +25 +epTail +7Yo61DFsNUaIwp+0+TNjXwAA + + +False +-0.785398163397448 +40 +epHead +hxKkcKewvkuhqVgosrEOqAAA + + +False +0.785398163397448 +40 +epTail +7Yo61DFsNUaIwp+0+TNjXwAA + + +False +-1000 +-1000 +50 +8 +hxKkcKewvkuhqVgosrEOqAAA + + +False +-1000 +-1000 +50 +8 +7Yo61DFsNUaIwp+0+TNjXwAA + + + + + +after-develop-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +wscyfYAYZkafubA/1NDMYwAA + + + +docment-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +3PhU1VdqeEmvUNILZTm2/QAA +9 + +clMaroon +38 +38 +185 +273 +System + + +clMaroon +$00B9FFFF +67 +128 +121 +45 +lOyDrRE6cEms6LglvRhNKwAA + + +1 +testing + + +False + + +False + + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + + +clMaroon +$00B9FFFF +53 +190 +148 +45 +ucei5JvgaEarsuGuZmgj7QAA + + +1 +doc-tutorial-web + + +False + + +False + + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + + +clMaroon +$00B9FFFF +67 +252 +121 +45 +ZFe9gOmpTEWMgVssyEcAWAAA + + +1 +version-pkg + + +False + + +False + + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + + +clMaroon +$00B9FFFF +127,172;127,190 +hKV30qElWkWAVhrHK7PJbAAA +IygCYEX6+Uu+11eoseJSngAA +kZAXDcSScUSa3zPofC/wwAAA + +False +1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +1.5707963267949 +30 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-0.523598775598299 +30 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.523598775598299 +30 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +0.523598775598299 +25 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-0.523598775598299 +25 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-0.785398163397448 +40 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.785398163397448 +40 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-2076 +-1312 +50 +8 +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-2076 +-1312 +50 +8 +WHhyhUoWo0iDDhj6FaqW/gAA + + + +clMaroon +$00B9FFFF +126,234;126,252 +Htop0thy70qsJ36MwSIctgAA +cr3AMb7W2EWA6biraBdVIQAA +IygCYEX6+Uu+11eoseJSngAA + +False +1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +1.5707963267949 +30 +Htop0thy70qsJ36MwSIctgAA + + +False +-1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +-0.523598775598299 +30 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.523598775598299 +30 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +0.523598775598299 +25 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-0.523598775598299 +25 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-0.785398163397448 +40 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.785398163397448 +40 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-2076 +-1312 +50 +8 +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-2076 +-1312 +50 +8 +bDyGtYJmuUiVC+pPkc7oHgAA + + + +clMaroon +$00B9FFFF +67 +66 +121 +45 +aUVRiLFY4USAN9h1PY1/vAAA + + +1 +multi-lang + + +False + + +False + + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + + +clMaroon +$00B9FFFF +127,110;127,128 ++nJDFiS7VECOJ4vWaYvszgAA +kZAXDcSScUSa3zPofC/wwAAA +fafd82Xh5Uu1mt+678C5PwAA + +False +1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +1.5707963267949 +30 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-0.523598775598299 +30 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.523598775598299 +30 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +0.523598775598299 +25 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-0.523598775598299 +25 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-0.785398163397448 +40 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.785398163397448 +40 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-2068 +-1288 +50 +8 +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-2068 +-1288 +50 +8 +VvsNJNyOO0e86/eHwYM58QAA + + + +clMaroon +$00B9FFFF +82 +42 +109 +23 +after-dev-procedure + + + + + +testing-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +lwwdtvTW6EyqvIRscOot6QAA +9 + +clMaroon +48 +48 +185 +273 +System + + +clMaroon +$00B9FFFF +77 +138 +121 +45 +lOyDrRE6cEms6LglvRhNKwAA + + +1 +testing + + +False + + +False + + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + + +clMaroon +$00B9FFFF +63 +200 +148 +45 +ucei5JvgaEarsuGuZmgj7QAA + + +1 +doc-tutorial-web + + +False + + +False + + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + + +clMaroon +$00B9FFFF +77 +262 +121 +45 +ZFe9gOmpTEWMgVssyEcAWAAA + + +1 +version-pkg + + +False + + +False + + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + + +clMaroon +$00B9FFFF +137,182;137,200 +hKV30qElWkWAVhrHK7PJbAAA +ugI2euwM3Ey7T7DNJ++xmgAA +qudITNuevEOUiPdD67icGQAA + +False +1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +1.5707963267949 +30 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-0.523598775598299 +30 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.523598775598299 +30 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +0.523598775598299 +25 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-0.523598775598299 +25 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-0.785398163397448 +40 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.785398163397448 +40 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-2076 +-1312 +50 +8 +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-2076 +-1312 +50 +8 +WHhyhUoWo0iDDhj6FaqW/gAA + + + +clMaroon +$00B9FFFF +136,244;136,262 +Htop0thy70qsJ36MwSIctgAA +0JMCaRFeCk+HcMqp5TyNyAAA +ugI2euwM3Ey7T7DNJ++xmgAA + +False +1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +1.5707963267949 +30 +Htop0thy70qsJ36MwSIctgAA + + +False +-1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +-0.523598775598299 +30 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.523598775598299 +30 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +0.523598775598299 +25 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-0.523598775598299 +25 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-0.785398163397448 +40 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.785398163397448 +40 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-2076 +-1312 +50 +8 +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-2076 +-1312 +50 +8 +bDyGtYJmuUiVC+pPkc7oHgAA + + + +clMaroon +$00B9FFFF +77 +76 +121 +45 +aUVRiLFY4USAN9h1PY1/vAAA + + +1 +multi-lang + + +False + + +False + + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + + +clMaroon +$00B9FFFF +137,120;137,138 ++nJDFiS7VECOJ4vWaYvszgAA +qudITNuevEOUiPdD67icGQAA +4gxKHPiS4kKv1jznPUiVLAAA + +False +1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +1.5707963267949 +30 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-0.523598775598299 +30 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.523598775598299 +30 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +0.523598775598299 +25 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-0.523598775598299 +25 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-0.785398163397448 +40 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.785398163397448 +40 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-2068 +-1288 +50 +8 +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-2068 +-1288 +50 +8 +VvsNJNyOO0e86/eHwYM58QAA + + + +clMaroon +$00B9FFFF +92 +52 +109 +23 +after-dev-procedure + + + + + +publish-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +dzXgTAQgkku8i81bEq7qFAAA +11 + +clMaroon +58 +42 +196 +353 +System + + +clMaroon +$00B9FFFF +91 +137 +131 +45 +lEIXTXT9L0CS9sEhjP/8NQAA + + +1 +pkg-repo-sync + + +False + + +False + + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + + +clMaroon +$00B9FFFF +89 +204 +135 +45 +jmiilGYeBU+1y4Yw2n8CKAAA + + +1 +download-build + + +False + + +False + + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + + +clMaroon +$00B9FFFF +85 +271 +142 +45 +RfRTk7cK0061dLioGm8l7wAA + + +1 +loopbak-testing + + +False + + +False + + + +False +RfRTk7cK0061dLioGm8l7wAA + + +False +RfRTk7cK0061dLioGm8l7wAA + + +False +RfRTk7cK0061dLioGm8l7wAA + + + +clMaroon +$00B9FFFF +100 +338 +113 +32 +G18zTBUAj0+SdrsOmksR0QAA + + +1 +publish-task + + +False + + +False + + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + + +clMaroon +$00B9FFFF +156,181;156,204 +t/ADlzXN00KW0NiGhwkclQAA +vblLAfzXRUOgCjpCebaQyAAA +VXT22UgSZE6QUG18w3YrRQAA + +False +1.5707963267949 +15 +t/ADlzXN00KW0NiGhwkclQAA + + +False +1.5707963267949 +30 +t/ADlzXN00KW0NiGhwkclQAA + + +False +-1.5707963267949 +15 +t/ADlzXN00KW0NiGhwkclQAA + + +False +-0.523598775598299 +30 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +0.523598775598299 +30 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +0.523598775598299 +25 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +-0.523598775598299 +25 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +-0.785398163397448 +40 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +0.785398163397448 +40 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +-2032 +-1468 +50 +8 +LL86l17PZku+YBsr/fUklwAA + + +False +-2032 +-1468 +50 +8 +bvYo1TGY6U2Io35TQ/yATAAA + + + +clMaroon +$00B9FFFF +156,248;155,271 +5n9wkh0NQUu8BFWyytdErgAA +obfQS5n3b0uAe1Y1fNtQ1gAA +vblLAfzXRUOgCjpCebaQyAAA + +False +1.5707963267949 +15 +5n9wkh0NQUu8BFWyytdErgAA + + +False +1.5707963267949 +30 +5n9wkh0NQUu8BFWyytdErgAA + + +False +-1.5707963267949 +15 +5n9wkh0NQUu8BFWyytdErgAA + + +False +-0.523598775598299 +30 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +0.523598775598299 +30 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +0.523598775598299 +25 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +-0.523598775598299 +25 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +-0.785398163397448 +40 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +0.785398163397448 +40 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +-2032 +-1468 +50 +8 +P+S209BDDkSnrN4WPl8+WAAA + + +False +-2032 +-1468 +50 +8 +UYbXc0CahESM869EpDq6lwAA + + + +clMaroon +$00B9FFFF +155,315;156,338 +1QbYYnq3ykqiPL0Gv6UkSwAA +M4HlmVZXi0yRAE9UMU0zRgAA +obfQS5n3b0uAe1Y1fNtQ1gAA + +False +1.5707963267949 +15 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +1.5707963267949 +30 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +-1.5707963267949 +15 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +-0.523598775598299 +30 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +0.523598775598299 +30 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +0.523598775598299 +25 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +-0.523598775598299 +25 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +-0.785398163397448 +40 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +0.785398163397448 +40 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +-2032 +-1468 +50 +8 +2J0+TPdjaECdzYN0YQ2guQAA + + +False +-2032 +-1468 +50 +8 +WMjnuHQF3kiQvKAfM+S81wAA + + + +clMaroon +$00B9FFFF +73 +70 +166 +45 +bjrraLbGKUSY+GYzLNk5RAAA + + +1 +launch-pkg-publish + + +False + + +False + + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + + +clMaroon +$00B9FFFF +155,114;156,137 +4wmxJ9R9R0eU6Jn8Ho3xFwAA +VXT22UgSZE6QUG18w3YrRQAA +ZCA8lMYtvkK0TOXL+AgswwAA + +False +1.5707963267949 +15 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +1.5707963267949 +30 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +-1.5707963267949 +15 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +-0.523598775598299 +30 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +0.523598775598299 +30 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +0.523598775598299 +25 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +-0.523598775598299 +25 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +-0.785398163397448 +40 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +0.785398163397448 +40 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +-1876 +-1508 +50 +8 +7JwpGqJmgku60xKurQDyPwAA + + +False +-1876 +-1508 +50 +8 +L7xnZ29mQEadCI+TRP2QQAAA + + + +clMaroon +$00B9FFFF +106 +46 +96 +23 +publish-procedure + + + + + +design-prodedure +yePcB6NdXUG1SBs2wQJA7gAA + +xDqjmnV1EE274hI5eX4EuQAA +3 + +clMaroon +$00B9FFFF +46 +38 +200 +300 +System + + +clMaroon +$00B9FFFF +102 +90 +70 +32 +GB5fgt+BCEuZu+MykpdKRQAA + + +1 +design + + +False + + +False + + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + + +clMaroon +$00B9FFFF +94 +42 +94 +23 +design-procedure + + + + + +bug-report-task +yePcB6NdXUG1SBs2wQJA7gAA + +PW8yW9pEYkid5X6nOzwaKwAA +5 + +clMaroon +$00B9FFFF +56 +48 +200 +300 +System + + +clMaroon +$00B9FFFF +88 +52 +115 +23 +bug-report-procedure + + + +clMaroon +$00B9FFFF +108 +96 +101 +32 +bX1Gcdx2ME+p8q+9ZuNdKAAA + + +1 +bug-report + + +False + + +False + + + +False +bX1Gcdx2ME+p8q+9ZuNdKAAA + + +False +bX1Gcdx2ME+p8q+9ZuNdKAAA + + +False +bX1Gcdx2ME+p8q+9ZuNdKAAA + + + +clMaroon +$00B9FFFF +88 +161 +131 +32 +5Yonx0jXgUiliXhd1LHAEgAA + + +1 +bug-re-testing + + +False + + +False + + + +False +5Yonx0jXgUiliXhd1LHAEgAA + + +False +5Yonx0jXgUiliXhd1LHAEgAA + + +False +5Yonx0jXgUiliXhd1LHAEgAA + + + +clMaroon +$00B9FFFF +104 +220 +106 +32 +TiqUoHnaOUevV4hK4Dz2MgAA + + +1 +bug-submit + + +False + + +False + + + +False +TiqUoHnaOUevV4hK4Dz2MgAA + + +False +TiqUoHnaOUevV4hK4Dz2MgAA + + +False +TiqUoHnaOUevV4hK4Dz2MgAA + + + + +141 + +Analysis Model +UMLStandard +analysisModel +yePcB6NdXUG1SBs2wQJA7gAA +23 + +build-pkg +BSZfgYLf+UenyGFbr+pLkAAA +1 +d80+2bpPQEWd7xFbiS1W/QAA +1 + +build-pkg +dDcpfNoxBUqy9oolGaPx0gAA + +li5qOhdL3EywRkIibb85HgAA + + +5 +MNWsgkXOBkGGgVZDdul4wwAA +sbGMwLTYC0iPKxhMH07wNwAA +msQ48rxqPEu61hvT3MeGjAAA +hgxswP4hVESXBm2wFWvVcwAA +D7TjLucAs0GEm5kB3a48nQAA +1 +5gOKGIQCUUm9L2zzA0ihPwAA +3 +gE0dxYNQQk6+JMyejPbD0AAA +1+gcf+vp9UmuwKSWYw/q2AAA +SylI2hFzwEeEyBv836BczAAA + + +build-config +BSZfgYLf+UenyGFbr+pLkAAA +1 +7JSGJYt6DkKIltRHc7ZjjwAA +1 + +build-config +MNfuyG0iBUiHZjmp8cHgZAAA + +Rue74u4PaUuHI0nqxQePdgAA + + +1 +hgxswP4hVESXBm2wFWvVcwAA + + +build-pkglist +BSZfgYLf+UenyGFbr+pLkAAA +1 +0p/90i+HQk+PTlMz5cboYQAA +1 + +build-pkglist +ulDQuuX3NUK3rZULACE1rwAA + +FtQxKj4yUkaT6NimaKKVfQAA + + +2 +5gOKGIQCUUm9L2zzA0ihPwAA +e6psiYw1mUqAWpE0+BvMzwAA +1 +u8pcfLoZm0et+dZoEh63EQAA + + +CCompilerCollection +BSZfgYLf+UenyGFbr+pLkAAA +1 +J1vjbeNnkkCOD1TmM672AwAA +1 + +CCompilerCollection +8GaHfoYho0OH58Fb/r1/wwAA + +mSd/X6+k/EGNlLgYdDkzTQAA + + +1 +msQ48rxqPEu61hvT3MeGjAAA + + +devutils +BSZfgYLf+UenyGFbr+pLkAAA +1 +s24sB0NbR0qJ0UXqzyR5QAAA +1 +MNWsgkXOBkGGgVZDdul4wwAA +1 +wQbKSnCSekyKjTFeI7tFhAAA + + +build-ext-utils +BSZfgYLf+UenyGFbr+pLkAAA +1 +micWrkg2dEqol44gMrgRnwAA +1 +sbGMwLTYC0iPKxhMH07wNwAA + + +soft-repo +BSZfgYLf+UenyGFbr+pLkAAA +1 +1OJ+jtvJzUOTUnGRNLZx9QAA +1 + +soft-repo +nEPUg6e8b0iEP7HhfuJnQgAA + +IxfADsYcqUOzQeMV371fvQAA + + +1 +wObYeAYwXEqWEKmMI+cCBQAA + + +code-mngr +BSZfgYLf+UenyGFbr+pLkAAA +1 +Mp32K0T3yUeiTjZXRy3GmAAA +1 + +code-mngr +fSDUjRTS0EuzKA5KD1YWegAA + +NR89VNkpPUKOxB+nia9hiwAA + + +1 +al7Ey6vM+kaiJQHEFZ17rwAA +1 +D7TjLucAs0GEm5kB3a48nQAA +1 +7tt1GtqhUkiRGXNftPMzmwAA + + +build-res +BSZfgYLf+UenyGFbr+pLkAAA +1 +/FD1CIRw00KUpr3wg3YqqQAA +2 +al7Ey6vM+kaiJQHEFZ17rwAA +e6psiYw1mUqAWpE0+BvMzwAA +3 +vEc8G/U42EKSe8lYsfqw+AAA +9nKgADD4c0K1Ju7SAno9nAAA +OCj2SIVuA0+GWCgP6VtYXwAA + + +BSZfgYLf+UenyGFbr+pLkAAA +ulDQuuX3NUK3rZULACE1rwAA +dDcpfNoxBUqy9oolGaPx0gAA +4 +UoBCufIUMEuVh02PZFeaLQAA +1I+XikHN9kK/t6EfmCSl2AAA +Yhj6u4aCR0a1cYZT4RlFUAAA +/oNB7nuz/EmsI+XHW9mNwgAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +FvqLDu2fxEWj6v1E//JLVAAA +4 +12RF249Lw0G6nu4rpS0PKQAA +TSYZvuWGT063HQhrZXnwswAA +Wh9uDcTiKke8indOdnLx+AAA +dNi0biCobUCHtgHLSB4DowAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +3VktYBg6c0GafkkhrKd5LAAA +4 +zH3LB5Kp+k+RtXF8y3gBJQAA +AFlPvmqXa0WcUJlrCLmd4gAA +93ZyTLwkFUSUCB69LWQQqwAA +LeBR8Xe4KUev5/e3MjUcRQAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +8GaHfoYho0OH58Fb/r1/wwAA +4 +AHnGqbO0/kGTU4QKEsYScwAA +Y7RbLVN23kGR9SWr289rrwAA +2x2sZtHy80usYPz3kI3z1QAA +BK5Y9Y56EkGsokfaRnlDewAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +MNfuyG0iBUiHZjmp8cHgZAAA +4 +8R86nCYMXEGWqEfjdEptdwAA +BaxvJ+mHB0edJuGJJnWXpwAA +swRIhR69xECXY7Hm0VdU1gAA +Msy3y/jcvk6HuMMb9QenZwAA + + +BSZfgYLf+UenyGFbr+pLkAAA +2 + +L1yiPMYx6EyAA2xxRTEU0QAA +dDcpfNoxBUqy9oolGaPx0gAA + + +L1yiPMYx6EyAA2xxRTEU0QAA +fSDUjRTS0EuzKA5KD1YWegAA + + + +BSZfgYLf+UenyGFbr+pLkAAA +4 +FkxkrPmiAkyXlKNWMG0ZKgAA +7qRjaiz8Y02/8IjPJip+RwAA +hyaO0HgmIkahhBHyYzcUvgAA +TfDa35ItK0KUm+1ADO7gLgAA +2 + +R1zBdkBAwk+mm7+XQTKYmwAA +dDcpfNoxBUqy9oolGaPx0gAA +4 +vkWvz4Be7EKnjG09HAI0lwAA +GYmL2i5aQUaxGKAzQuX9egAA +yjKcGdY8ekKPVZWWLqM/6wAA +f5y2gp278kuHvg4nM8S4nQAA + + +R1zBdkBAwk+mm7+XQTKYmwAA +pvhDF96KaEGykg05qmd3jwAA +4 +nMOdDXc1F0SDNw9WnnOG9AAA +VZF+TVC/iEK1We2bIp7d4gAA +UKH5CQTTbE+GpcuqPCsccAAA +TGNi2j7+dEKt9AixnFgTTQAA + + + +BSZfgYLf+UenyGFbr+pLkAAA +4 +WwhFha+1WECbLD243p2h3AAA +6jt28ExI0kyKCW146he6rAAA +6SspI/hB80+l7hPostMZ9gAA +4qL44fMXlUqi569NEIKm/gAA +2 + +SN9GhsPG3EaOZFcQPgCPJQAA +dDcpfNoxBUqy9oolGaPx0gAA +4 +R4xBqApf3EGTaQ3BUUbbgQAA ++4qoi2mJvkutuLRgEKTKvAAA +3eKQsHPkq0C3GhsNVgjTAwAA +wkqwWuTZ7E6Ya9xY2tS+dAAA + + +SN9GhsPG3EaOZFcQPgCPJQAA +nEPUg6e8b0iEP7HhfuJnQgAA +4 +/mEKF2CdXkO+qvCXd5BlyQAA +b4mEYJOuLEWElIBAR+wsTgAA +KokDYCjUO0GHYQRTHw1HmAAA +q/gj0Y/d20yrOBJ5JToeqQAA + + + +BSZfgYLf+UenyGFbr+pLkAAA +fSDUjRTS0EuzKA5KD1YWegAA +pvhDF96KaEGykg05qmd3jwAA + + +BSZfgYLf+UenyGFbr+pLkAAA +ulDQuuX3NUK3rZULACE1rwAA +pvhDF96KaEGykg05qmd3jwAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +fSDUjRTS0EuzKA5KD1YWegAA +4 +yxB73q7LmEq5bftoZyqChgAA +l8o/vkzEVEuW8Z0ESj9HlQAA +0q4mfT8180OBC/2k9nwvzQAA +gSGj8mQyA0eW4arWOFjxmgAA + + +BSZfgYLf+UenyGFbr+pLkAAA +4 +2EmKz1gekUeBYNJEqwk5ywAA +kaZVmwnTuk21j+2fm8qGzgAA +0wFWC8ZHbEuWnNks6iXbJQAA +iXf7s60RO0OEUR4JwNRbOwAA +2 + +aKvfewyzgE2DFbpbrUqRcgAA +pvhDF96KaEGykg05qmd3jwAA +4 +D424m/G3KUiG7LYqWvtilAAA +slHTOpURSEicm2werij8XQAA +s539IwA/MEWjk5PR3mNPOwAA +mCCnjuKULEOwMSaiZkDCRAAA + + +aKvfewyzgE2DFbpbrUqRcgAA +FvqLDu2fxEWj6v1E//JLVAAA +4 +amM0V48QtE+LtX1V+NpK4wAA +dR3D81mWLU67Hzigg8FXxwAA +m+pLG91QP02bu5lY6KLSzAAA +f8W0J6x6VkWJOhnZZGnsGAAA + + + +BSZfgYLf+UenyGFbr+pLkAAA +4 +q9EN5ZUrgkW1YBaEUlNSJgAA +i35rwePtn0e2dmudkVnb+wAA +5mvXcya1M0md/uA7y2TQIQAA +yA/VGm7Eu0yzqagLfS1FigAA +2 + +MzbhBShYo0uTBm9zBJ3IJQAA +ulDQuuX3NUK3rZULACE1rwAA +4 +GndO5+L+XEGYZWuYTo8WZwAA +tq9xchL8WEuHonDjf5BVYAAA +Ur81kW6jjk6GTIC91ukrnwAA +Q3b6JPtGzEqX1L0AOqdNsAAA + + +MzbhBShYo0uTBm9zBJ3IJQAA +pvhDF96KaEGykg05qmd3jwAA +4 +HmJC5ge6e0qQIGXY9346rQAA +FAQVL0M1NUm4ZIaW+4XhQgAA +n5u114I+7U6Bpr9OeXawtgAA +z9YPw3YbgEKyQzl2yX31/wAA + + + +pkg-builder +BSZfgYLf+UenyGFbr+pLkAAA +1 +ccqDzWrIbU67QDaF1jCh3gAA +1 + +pkg-builder +T8bTYhwSAkKMom5PJGDBkAAA + +o+rsUkl11kGIPjXPPm66KAAA +22 + +clMaroon +64 +24 +685 +401 +T8bTYhwSAkKMom5PJGDBkAAA + + +pkg-builder + + +False + + +False + + + + +clMaroon +$00B9FFFF +456 +208 +120 +70 +dDcpfNoxBUqy9oolGaPx0gAA + + +build-pkg + + +False + + +False + + + + +clMaroon +$00B9FFFF +316 +208 +120 +70 +MNfuyG0iBUiHZjmp8cHgZAAA + + +build-config + + +False + + +False + + + + +clMaroon +$00B9FFFF +456 +84 +120 +70 +ulDQuuX3NUK3rZULACE1rwAA + + +build-pkglist + + +False + + +False + + + + +clMaroon +$00B9FFFF +316 +332 +120 +70 +8GaHfoYho0OH58Fb/r1/wwAA + + +CCompilerCollection + + +False + + +False + + + + +clMaroon +$00B9FFFF +608 +332 +120 +70 +FvqLDu2fxEWj6v1E//JLVAAA + + +devutils + + +False + + +False + + + + +clMaroon +$00B9FFFF +176 +332 +120 +70 +3VktYBg6c0GafkkhrKd5LAAA + + +build-ext-utils + + +False + + +False + + + + +clMaroon +$00B9FFFF +608 +84 +120 +70 +nEPUg6e8b0iEP7HhfuJnQgAA + + +soft-repo + + +False + + +False + + + + +clMaroon +$00B9FFFF +456 +332 +120 +70 +fSDUjRTS0EuzKA5KD1YWegAA + + +code-mngr + + +False + + +False + + + + +clMaroon +$00B9FFFF +608 +208 +120 +70 +pvhDF96KaEGykg05qmd3jwAA + + +build-res + + +False + + +False + + + + +clMaroon +$00B9FFFF +515,153;515,208 +5gOKGIQCUUm9L2zzA0ihPwAA +d80+2bpPQEWd7xFbiS1W/QAA +0p/90i+HQk+PTlMz5cboYQAA + +False +1.5707963267949 +15 +5gOKGIQCUUm9L2zzA0ihPwAA + + +False +1.5707963267949 +30 +5gOKGIQCUUm9L2zzA0ihPwAA + + +False +-1.5707963267949 +15 +5gOKGIQCUUm9L2zzA0ihPwAA + + + +clMaroon +$00B9FFFF +558,277;625,332 +MNWsgkXOBkGGgVZDdul4wwAA +s24sB0NbR0qJ0UXqzyR5QAAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +MNWsgkXOBkGGgVZDdul4wwAA + + +False +1.5707963267949 +30 +MNWsgkXOBkGGgVZDdul4wwAA + + +False +-1.5707963267949 +15 +MNWsgkXOBkGGgVZDdul4wwAA + + + +clMaroon +$00B9FFFF +456,268;295,339 +sbGMwLTYC0iPKxhMH07wNwAA +micWrkg2dEqol44gMrgRnwAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +sbGMwLTYC0iPKxhMH07wNwAA + + +False +1.5707963267949 +30 +sbGMwLTYC0iPKxhMH07wNwAA + + +False +-1.5707963267949 +15 +sbGMwLTYC0iPKxhMH07wNwAA + + + +clMaroon +$00B9FFFF +475,277;413,332 +msQ48rxqPEu61hvT3MeGjAAA +J1vjbeNnkkCOD1TmM672AwAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +msQ48rxqPEu61hvT3MeGjAAA + + +False +1.5707963267949 +30 +msQ48rxqPEu61hvT3MeGjAAA + + +False +-1.5707963267949 +15 +msQ48rxqPEu61hvT3MeGjAAA + + + +clMaroon +$00B9FFFF +456,242;435,242 +hgxswP4hVESXBm2wFWvVcwAA +7JSGJYt6DkKIltRHc7ZjjwAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +hgxswP4hVESXBm2wFWvVcwAA + + +False +1.5707963267949 +30 +hgxswP4hVESXBm2wFWvVcwAA + + +False +-1.5707963267949 +15 +hgxswP4hVESXBm2wFWvVcwAA + + + +clMaroon +$00B9FFFF +575,242;608,242 +R1zBdkBAwk+mm7+XQTKYmwAA +/FD1CIRw00KUpr3wg3YqqQAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +R1zBdkBAwk+mm7+XQTKYmwAA + + +False +1.5707963267949 +30 +R1zBdkBAwk+mm7+XQTKYmwAA + + +False +-1.5707963267949 +15 +R1zBdkBAwk+mm7+XQTKYmwAA + + +False +-0.523598775598299 +30 +epHead +vEc8G/U42EKSe8lYsfqw+AAA + + +False +0.523598775598299 +30 +epTail +1+gcf+vp9UmuwKSWYw/q2AAA + + +False +0.523598775598299 +25 +epHead +vEc8G/U42EKSe8lYsfqw+AAA + + +False +-0.523598775598299 +25 +epTail +1+gcf+vp9UmuwKSWYw/q2AAA + + +False +-0.785398163397448 +40 +epHead +vEc8G/U42EKSe8lYsfqw+AAA + + +False +0.785398163397448 +40 +epTail +1+gcf+vp9UmuwKSWYw/q2AAA + + +False +-1000 +-1000 +50 +8 +vEc8G/U42EKSe8lYsfqw+AAA + + +False +-1000 +-1000 +50 +8 +1+gcf+vp9UmuwKSWYw/q2AAA + + + +clMaroon +$00B9FFFF +557,208;624,153 +SN9GhsPG3EaOZFcQPgCPJQAA +1OJ+jtvJzUOTUnGRNLZx9QAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +SN9GhsPG3EaOZFcQPgCPJQAA + + +False +1.5707963267949 +30 +SN9GhsPG3EaOZFcQPgCPJQAA + + +False +-1.5707963267949 +15 +SN9GhsPG3EaOZFcQPgCPJQAA + + +False +-0.523598775598299 +30 +epHead +wObYeAYwXEqWEKmMI+cCBQAA + + +False +0.523598775598299 +30 +epTail +SylI2hFzwEeEyBv836BczAAA + + +False +0.523598775598299 +25 +epHead +wObYeAYwXEqWEKmMI+cCBQAA + + +False +-0.523598775598299 +25 +epTail +SylI2hFzwEeEyBv836BczAAA + + +False +-0.785398163397448 +40 +epHead +wObYeAYwXEqWEKmMI+cCBQAA + + +False +0.785398163397448 +40 +epTail +SylI2hFzwEeEyBv836BczAAA + + +False +-1000 +-1000 +50 +8 +wObYeAYwXEqWEKmMI+cCBQAA + + +False +-1000 +-1000 +50 +8 +SylI2hFzwEeEyBv836BczAAA + + + +clMaroon +$00B9FFFF +515,277;515,332 +D7TjLucAs0GEm5kB3a48nQAA +Mp32K0T3yUeiTjZXRy3GmAAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +D7TjLucAs0GEm5kB3a48nQAA + + +False +1.5707963267949 +30 +D7TjLucAs0GEm5kB3a48nQAA + + +False +-1.5707963267949 +15 +D7TjLucAs0GEm5kB3a48nQAA + + + +clMaroon +$00B9FFFF +667,277;667,332 +aKvfewyzgE2DFbpbrUqRcgAA +s24sB0NbR0qJ0UXqzyR5QAAA +/FD1CIRw00KUpr3wg3YqqQAA + +False +1.5707963267949 +15 +aKvfewyzgE2DFbpbrUqRcgAA + + +False +1.5707963267949 +30 +aKvfewyzgE2DFbpbrUqRcgAA + + +False +-1.5707963267949 +15 +aKvfewyzgE2DFbpbrUqRcgAA + + +False +-0.523598775598299 +30 +epHead +wQbKSnCSekyKjTFeI7tFhAAA + + +False +0.523598775598299 +30 +epTail +9nKgADD4c0K1Ju7SAno9nAAA + + +False +0.523598775598299 +25 +epHead +wQbKSnCSekyKjTFeI7tFhAAA + + +False +-0.523598775598299 +25 +epTail +9nKgADD4c0K1Ju7SAno9nAAA + + +False +-0.785398163397448 +40 +epHead +wQbKSnCSekyKjTFeI7tFhAAA + + +False +0.785398163397448 +40 +epTail +9nKgADD4c0K1Ju7SAno9nAAA + + +False +-1000 +-1000 +50 +8 +wQbKSnCSekyKjTFeI7tFhAAA + + +False +-1000 +-1000 +50 +8 +9nKgADD4c0K1Ju7SAno9nAAA + + + +clMaroon +$00B9FFFF +558,153;625,208 +MzbhBShYo0uTBm9zBJ3IJQAA +/FD1CIRw00KUpr3wg3YqqQAA +0p/90i+HQk+PTlMz5cboYQAA + +False +1.5707963267949 +15 +MzbhBShYo0uTBm9zBJ3IJQAA + + +False +1.5707963267949 +30 +MzbhBShYo0uTBm9zBJ3IJQAA + + +False +-1.5707963267949 +15 +MzbhBShYo0uTBm9zBJ3IJQAA + + +False +-0.523598775598299 +30 +epHead +OCj2SIVuA0+GWCgP6VtYXwAA + + +False +0.523598775598299 +30 +epTail +u8pcfLoZm0et+dZoEh63EQAA + + +False +0.523598775598299 +25 +epHead +OCj2SIVuA0+GWCgP6VtYXwAA + + +False +-0.523598775598299 +25 +epTail +u8pcfLoZm0et+dZoEh63EQAA + + +False +-0.785398163397448 +40 +epHead +OCj2SIVuA0+GWCgP6VtYXwAA + + +False +0.785398163397448 +40 +epTail +u8pcfLoZm0et+dZoEh63EQAA + + +False +-1000 +-1000 +50 +8 +OCj2SIVuA0+GWCgP6VtYXwAA + + +False +-1000 +-1000 +50 +8 +u8pcfLoZm0et+dZoEh63EQAA + + + +clMaroon +84 +52 +217 +278 +associate: relationship of using +dependence: running dependence. + +@ build-pkglist: it is used for building + large number of pkgs. +@ build-pkg: it is used for single pkg, + or a software with several pkgs. +@ build-config: config util for build-pkg + and build-pkglist. it like menuconfig + in 'linux-kernel' or 'buildroot'. +@ build-ext-utils, CCompilerCollection + the basical gnu pkgs running for + build-pkg. +@ code-mngr: tools like SVN/git. +@ devutils: programs used in develop. +@ soft-repo: a tool like apt-get. it + manages the src or exe pkg files + for user or developer + + + +clMaroon +316 +68 +131 +133 +@ build-res: extention + of code temlate file, + code format file, + project sample, + system distribution + pkg-list info. + + + + + + + +dev-initial-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +Rq0Cydd7nEKOfOgn8htc8QAA +2 +9OsI3YefmEShu4VA2aYWsgAA +wVShJ+TldkiCQjPWrQHwugAA + + +design-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +05y9pi2UcU6ptxllVr+G/gAA +4 +I2MiL+bJOEWcCQW8PlUaEAAA +IJastPE4CkGI6UtKXQb+xgAA +RueokuJsJ02RY8qTm1ik8wAA +WDInVNo55Uu7BHXfcUQLNgAA + + +develop-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +LdINJygfWEW3vhPOZonupQAA +6 +770F/tljqkKHqvtGDTfVzAAA +gcJyB+Iyk02GIY0VRlqRGgAA +BPf4vCTXTUSPQUWNKaCQDQAA +6XJvWCMrykCACsZlVke/PAAA +6hCImufvAUuT81kGxRsmxgAA +kQl08Rz6jUCQA6Vz31/AmQAA + + +testing-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +0eY6HnBo4kSNrbtAFd/AoQAA +6 +/pztn/xQEUmMs4TaAXsCagAA ++IilmFj9BEyQ3rGjS6FoBwAA +1IsgVb2s8Ui+xnl92d08gQAA +avTqriQFjUueOCz6jCc/IwAA +TumZKVN0d0in5UkpqbuZTAAA +su8oYR2Ky0aSXbd6TlFoXAAA + + +document-procedure +yePcB6NdXUG1SBs2wQJA7gAA +2 +Y9Di27a99UCLuicgXHRPbQAA +tQieUJFUIUWjBNmfDel6vwAA +8 +8MwPX9NZj0SQu64mihvgxAAA +KCe+sJFeFUW7JorDZydAQQAA +IHj45UgS/0izQOpDHKO3GAAA +zzJAA14PKEyZOy48ze8TUQAA +Q2TvPbYi9Umzfpsm3agX8QAA +9Txo32SVmUCTFUkGnzyaoQAA +c1DHaSDPuEOz4QdBj45gwQAA +5AK+S/x8EU+IYfu9OvYF4QAA + + +publish-procedure +yePcB6NdXUG1SBs2wQJA7gAA +4 +T2cKdPg1Bk+hDccckoYQ5QAA +4JaPx8QgwEWT8vCziLxdSQAA +hXLnvpDLz0KIpSPRhb6ECgAA +FqQn7IeHTkizfymgIbEsLAAA +11 +ZJ10cvLftEKNjkYS8UBeogAA +j0eu/Ys1xkyBAac51lq70AAA +ynutmgtgJkyYVyOvECShhgAA +B018yNXvg0ygTAeYfrer4QAA +WZ976OFIREimbDaKoU7o0QAA +6PWLFqBgek+WMYGWr8g3pAAA +Wbq2l1nmWUigv45vNt7DRAAA +b4rYIDwkWUShf2GiOCXYDgAA +KHKx1GHN4Uam3tVmAqbglQAA +hu41jycWSEOI3Ox7jzRK0gAA +cmrnCjXFp0S8tNPvjvqbWgAA + + +analysis-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +pkAZPt0EzUO5vbW8/2ISDgAA +4 +OH+C5n4Y3k61fQSZesUVxwAA +6hqoLK2vfEyhVl9t+07/sQAA +npHVEpJLck2XAMV9s8g6VwAA +tXhFQ7TewkWyBpAaKgAS+QAA + + +after-develop-procedure +yePcB6NdXUG1SBs2wQJA7gAA + + +initial-develop-task +yePcB6NdXUG1SBs2wQJA7gAA + + +bugfix-work +yePcB6NdXUG1SBs2wQJA7gAA +12 +6X0FK2w+kUGeRH2fHqoCSwAA +Nej+ugs75UCTuLSNJoL32AAA +JocKzIahAE2Rg/Jush/NNwAA +1H7NZUwSckaq3vFxfgP1PwAA +n/wO/s227keDkWnSaoMPFwAA +sVfJQGL/iEmAQIELtumavgAA +tRC4kQ89GUmsBaAGTfVeoQAA ++K+Sw8lGqEG5WmXZqf+lFQAA +gVBoAJXO/kqra8XiHFVH7QAA +h289pqUixkWiMfkTT2nHFwAA +stlOgsTNBkWvbXZKK9KhjwAA +lXjbu8nHB02J0fx44kZpegAA +1 +Fxyv+zwMo0S0Ncj/Azp5dQAA +3 +HAKtlFj5902XipIJf5JuhQAA +o/0hT+QIWUatedossmtPBQAA +7yl9aNzP9UWJYqcoZ5ct1gAA + + +publish-launch +yePcB6NdXUG1SBs2wQJA7gAA +8 +3rdXqG4KQ0W+d59DtblscAAA +cSRlx/HJsEO3o59EMew3rQAA +vIl2IY+vVkSHONoG0GsxtwAA +rr+TSJZ0ukeIV9ZkTTa+cwAA +H35H/g998EO5+b+My/9TGwAA +dT4il+6/Gk+54ilEECXeewAA +Ne7JwDq7qUGFKV22/VvzWQAA +3NKcWi2ax0OdHq9842Z0nQAA +1 +N6rmhGGOH06+NgfTaWft1gAA +2 +Dwy9nxvM50Cbv0guTPXG+QAA +dIPnH0JAR0m2CEwio1XRKwAA + + +document-work +yePcB6NdXUG1SBs2wQJA7gAA +8 +vza3XuXwdUy+RCEd4a7/AAAA +iLg/87XLFEykCFJGhifOMQAA +UgLZsN12KkGQu5JOL4PUnAAA +TPTibd5Ro02/LQCkwrcM2gAA ++UDQJ377E0yfeyDDN+u8twAA +BGoBs6YePUulGOuXefEg5gAA +lEULUtfhO02wKvtZ95If0QAA +BgV7xtxh2ka6fAVka31AOAAA +1 +7VFRD/OOk0CHQPmyBREE7QAA +2 +r/hRY5C/z0KLE99Zb7wcHwAA +OAiy1ef+XUG7aqN4fnwIDQAA + + +traslation-work +yePcB6NdXUG1SBs2wQJA7gAA +8 +CVNk+aZ2kUS/be+Nv1opngAA +JNaO0ffDoUS+AX7lAxEl+wAA +zcDagyLZgk+64Eb/4CGyoQAA +nNYDjhrV/km6H65r2Oa18AAA +LdVy/adykEu3BEUiOmsYBgAA +umhkgUahRUGia9WqIF9RGwAA +RCJ0RKClMUyQKGB/551t5gAA +/ErrPXm43EePkfQzcWwL2AAA +1 +zYrgxJijVUeKhRuYPCJv9wAA +2 +0G7qZy+/sEqjVd5kqmhK0QAA +oZNlQDVXUEObs3iZw4x9YgAA + + +testing-work +yePcB6NdXUG1SBs2wQJA7gAA +8 +Sl7WaLUfCE+IreEUylmhuQAA +d92ZEkD1AkSE4doXZ/wRyAAA +69x1DUAOn02pkroD/c4e4QAA +LFszJWWWokWXHQFJ76SS4gAA +8LIFapZp5k6ylbwQfcyklgAA +yG5w39tpzUq7mH0dMD3LKQAA +oV8haZAwFUKZLy08zi9zHwAA +xgmQ4XcO80abByGugCvNwwAA +1 +dr0yGiZ9w0ifqTGL7hJMYAAA +2 +IT/R9YctZE+fstolgXNfRwAA +TTMaOnOcrUGQ/DPwfi1ITwAA + + +bug-report-task +yePcB6NdXUG1SBs2wQJA7gAA +1 +OO7ku5gAkUOUNTByzbCZzgAA +4 +fX++8JJ/Wk2XNALtMhEEnAAA +LOhftqHbTkmRcNDOgH9duwAA +SG8bVsROWE+5+iyuVGPkBQAA +51zN/AjS8UKGQuZi3cgptgAA + + +submit-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +mGag8uVpX0+zFhYfpZD08wAA +8ZbWuHTxHE6qhUPxazFa3wAA +GhCmdps1qUimWLPkoyM0vwAA +ErN9mgwzEky4Bc0y6Vf2wAAA +8 +YezoOUqiMEqMfQ47zgiYggAA +stbsvaZCJkG2vJI5d3KxdwAA +1q5yuUkA0kGBWLWrt4cfxwAA +jZEe3B1pgkqg0horzFKWzwAA +v3GPPcr2HE2FA9MsBQRCJAAA +8ERRXx11LUue4tf/9sRJGwAA +lWAMkSVvoUOg4oaaawtIxgAA +gm2xbeKGuUu+OipRQpK+OQAA + + +Package1 +yePcB6NdXUG1SBs2wQJA7gAA + + +end-task +yePcB6NdXUG1SBs2wQJA7gAA +24 +MM23IzSqWEWlGoT6/hNe5AAA +I1hmv0LT3EOVaJS78zs7cQAA +cJmvwIsT2UaVRR9+wm5I7QAA +aMDoNmAIiUSHx8Jkj1gUNwAA +pXNv1QjBU0iuyfVI3ul8fwAA +OmrpHeDuIkue/rNl85AltwAA +SW+RJAtpLUu8SXRqM+Z9fQAA +IFA/Dso7PEWhmUW+jDt0OQAA +kDJ4sMyQokGYpNNs0RQlPQAA +J3jNybR8pESBj+G0z2pHSAAA +zg18MfAqFk2aPTMOsyZ6GAAA +lN99a5fXUUS+1ZSh4ltrsAAA +OUCMrBecwkmcxrWWZfI9yQAA +D/Fzuyfwx0G/w46ih4OFNwAA +A67Iqky3ykit1KxSaoWfuAAA +oPnsNxEY1keJ0GUU+n/wQAAA +/jiNGEbH9EKzxyhBp7dGbAAA +lLOgPchTZkOKOyzQjN/NfwAA +dV+scLw75UesnYGNVK+u7AAA +77l918JxekuvPzyRw9O6PgAA +6fWpQKk33U+G9a3MEcCGcQAA +QTlFZjtkX0WmdfXdYUNK9AAA +sXh7Dh8jSkeZHM9yKyxxIAAA +0ysDVucETUCSJEUjhqnvzwAA +7 +ivchHpb/m0Oy82i37nw/zwAA +0A9khIrxsUqQn1Bnzz7X+QAA +MBHAyH1qPEWL3nIRNBXalAAA +XISyKVl4zUKFIG8yEnSeZwAA +nWK8/Dbe5kGwMfVczyrs6wAA +bDDeA0cjxEy6AaRuuqyRnwAA +NM+MZJjv/UaHiAj8twEHBgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +2IrhFWrgrUmDBuMuEDUAdAAA +nAXhDlKCrUet/Cgh+eR0lwAA +GjSWw/vKMUqzFogJghR7lAAA +VzJuDXLkWkSlIzTauPLeyQAA +2 + +False +ZX2SocfyGUGaYAoZdJTHCQAA +al6ONjrnZ02miWcUt8E4UAAA +4 +R3VYeRnHJ0iHHZgETGnFTgAA +U0G+djCiGUGaAO8rqjy+/gAA +03HqS9DKYkC58TjBT8YhzgAA +eVe8gSC9TUudPXc3TQIQMQAA + + +ZX2SocfyGUGaYAoZdJTHCQAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +R6UA269F+06Dyv6RSUforgAA +PTB5eJ7qf0CMi4IQCpgc+gAA +iufHP5iarUSm4F2TVzv8hwAA +RjEND+40e0K38ow7fT/DnQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +SOi6DqwGsUCFFA6PPLRMHQAA +i4r/qbWY2Ui5Iqlipx7NxAAA +MuAa7SUDD0W4hIqJ2nfEXwAA +AEsb9TCA0EespCceVXOMjwAA +2 + +False +V+JDAD1y1kGhDKjzLQ2kzwAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +uSsEVpBp0k6B0NfDRQxCuQAA +KQxwkKIY0k24QxARVN7AyQAA +zZGyb6RQskaIEQguCpcx3AAA +/rhxyKfqY0exDlY3hzjC+QAA + + +V+JDAD1y1kGhDKjzLQ2kzwAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +RZ7cwuzp7UGX4REYDoJ3zAAA +IrtVeVcBk0KMJ2gOAZTJ8wAA +j+ag4q9lk0y7qbcyN+fjvAAA +TfE50q7v6EakPTxRWTq1wQAA + + + +new-feature-dev-launch +yePcB6NdXUG1SBs2wQJA7gAA +8 +D0y3HjNuyEeD8w3pOiVL9gAA +OA5Var/WjE65QkGvQTUeKQAA +9lpKFxkWIk65QvnKqmbbIwAA +iyk6aGgh00eFz52t8uPdRgAA +cgzV1Cjm1E+TvgDTXT4Z/AAA +gOS3u3FsTkaxLks+tNLf3gAA +fpb5Nfhk3UWR8BQO44zXUAAA +ACmDJDLCfEm8xvezwSa4wAAA +1 +VUF2hqp6/UCePhaBLl598gAA +2 +oV0xUwtlkEW3wNVlZTulsQAA +OOVxi4WGDkKWer/0+AwIPgAA + + +initial-dev-launch +yePcB6NdXUG1SBs2wQJA7gAA +8 +65HjSOXEV02PyHHndkIc4wAA +88HbdewmeUmxNVKR4zye2AAA +fJ1Wa6yln0GHO+arSEbX4gAA +cmZP7iJc50WGKoSnWGapIQAA +WZ6Nv0dBuES8PyEoPwv1hAAA +Q5sbq+MJM0m32AXCRIw2ggAA +ApqLEo2bbkyP7ixAkGIEvwAA +1r18Q4ZaWEeRGppfm0yOsAAA +1 +YwY92xK+JEOUOaknXh7XMAAA +2 +BtfJFt8gzkWLxq07KGt8ZQAA +7zDlLto/L02ptrUw9yDPUQAA + + +bug-report +yePcB6NdXUG1SBs2wQJA7gAA +4 +C20w/XrBX0mAaNgTr9yhLQAA +Uupz/901ZE+XIw4g1BAcRQAA ++xOjz2leC0iVpM7EWCrfPgAA +iNAwSjifbkW13w8FPylDPgAA + + +bug-re-testing +yePcB6NdXUG1SBs2wQJA7gAA +4 +buhigGknbES8XNgVLZlKLwAA +FSCr+o5e6U6a7He85XeDDgAA +iBRah/D6MUuSbI9OBTScBgAA +dxQdYgWxA0CgQInUC/IpCAAA + + +bug-submit +yePcB6NdXUG1SBs2wQJA7gAA +4 +mT+dBzveUUq78fBK8tyuCwAA +iC392Q5uY0ejDPkQ6yAuewAA +IjpkADEpeUm7SlOGUS/D1QAA +PxjcBM87dUW6TRg2CMyMtAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +xiYC8A1z2ECFHdLMG3LMpQAA +KWjTdOw10kyLoQy6wAmcdAAA +QJHLrr9nwEyU0kBqcoM+vAAA +UH6aR+zhfky4QpfTspBFqgAA +2 + +False +viIiAZ9C80y4tKd497zwFAAA +lNk1i5gHU02RiCDfZIsLEQAA +4 +44417kl8qECrc5gcDDCbpQAA ++blkZmc2+k2QyQMDY/PulgAA +LqM6XmWs30+GwMbeTmXqLAAA +hlUCIoyR8Eu0oeRLPCA7OwAA + + +viIiAZ9C80y4tKd497zwFAAA +h5aHoI2/GkuAptKzGDmHIwAA +4 +2o6HL83VUke2BWxMmz//2QAA +GWVtFiY2DUydFevhRauukgAA +UYxfjqoJMkS+eFmYuS/arwAA +WCGprCefxUqNxNUpIqPPMQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +LOc/5UF2RE6WxVPI5i3f2AAA +WIs46u9twU2kOrq4ziC4DQAA +4Hd7aaR47UKFuG1AHNHL4gAA +5OXPXPpBikSBHEcEoU6OLAAA +2 + +False +zhltSEBb90+T60/21ERiXQAA +h5aHoI2/GkuAptKzGDmHIwAA +4 +Peo8julEk0izHC02+xQo5AAA +PckVy4hMYEiUhVBRpMtgWAAA +zPtKPggnBEWDvFiH5dvHlAAA +P1qV9LjKr0miol86SsoISQAA + + +zhltSEBb90+T60/21ERiXQAA +NezC/3LDGUub0eLy4M8sOgAA +4 +FZ9qCJzBsUmmyg0wsTFYHAAA +slN9bskvh0KAvUcDNKikWwAA +uBVmFA4po02nFJ6nAyW7zAAA +tHPynh6pDEqcXKeMZBTCoQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +SxST++HSbEq7tRtqP6tp8QAA +Tr1u8sV+FEGZgLye/fDfFgAA +uDEp+Ynce02beNYRQMEjkwAA +M6JWSFfmB0WegWsY6MGqKQAA +2 + +False +IQdvD61jPEq7KzieVIPMnAAA +NezC/3LDGUub0eLy4M8sOgAA +4 +eC5I/hw63EGb2/tIaq7jqwAA +UBQeSX6eNkqkjdRgfgYjpwAA +DTw0yX91k0S4rgVogZtBSwAA +keNdO2E+Zkq6OP5ryQTaYgAA + + +IQdvD61jPEq7KzieVIPMnAAA +LRvECEfPPkOYfW5/8H8P3QAA +4 +YZjAwce8xUGRc9RG6KILwwAA +QhsMDcCiC0SilZYDHxZF/wAA +8559GMWlj0S65ehn1KzhKQAA +VbfvNzosnk+z8oj2qqkGNAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +yavSIuc8BU6mjFGRfwcbigAA +FBG5eKLnokqazjt/gSdntwAA +8CT1gagTgUaGN7D1zXjjlQAA +Z9j4/mmiMEGq/1QyJWrvoQAA +2 + +False +/HuYmDQGHEeXQIQr+1PRoQAA +7jBLX6wjTkmObbw8i4xK0gAA +4 +7toSXj7hI0SGqWJu0Hrb2gAA +lRaNJ55JcE2+aco3LVRPEwAA +ZiC5LNsSUk+FZYOug/J9wwAA +TjdjvmoiXEW8fUj/M9AHjwAA + + +/HuYmDQGHEeXQIQr+1PRoQAA +qG82m0zlPkqvT2acHPihkwAA +4 +gc2dvhJo5U2uwDSD598UNQAA +dbazKDL7nUCBQHm48yiO/QAA +1rATM7KuqE2OQ8OWGFlyfAAA +6/jDHm2AMEOGMeDrl0boxgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +afH0/Nq6IkuRpp+K6scJJAAA +VKh7LpFhYka/yUWbEMRTBAAA + + +afH0/Nq6IkuRpp+K6scJJAAA +7jBLX6wjTkmObbw8i4xK0gAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +QnKEQWAvGUeHGbfSVIcc0gAA +7jBLX6wjTkmObbw8i4xK0gAA + + +QnKEQWAvGUeHGbfSVIcc0gAA +qG82m0zlPkqvT2acHPihkwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +1GhJXuWKL0CokaroBLxGNwAA +I4amOsGISUSsoOo88j4Z0QAA +5W2ul4FezkGUpNSL6TYfWAAA +ABGH7N76VEaYmnB5fB1yygAA +2 + +False +4uPxSnoEgUO3ovjSg4lAfgAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +5VXFG9SFTEqrgZWor68muAAA +mGP/7QyoMUu0V0J6De+h+AAA +LTRz/deb50iZdr6x1kb26QAA +sLPhlXbi9E2/+CFNsXYCIgAA + + +4uPxSnoEgUO3ovjSg4lAfgAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +wEFThTuAvUSViVvuda4kmQAA +zGEal+uubEaO7xLtV68NLwAA +nORCxAZvM0iMiY2y+0SfwwAA +zzBq2YLJw0u2SXPKrg83HAAA + + + +new-demond-action +yePcB6NdXUG1SBs2wQJA7gAA +8 +UE1o5B5rJESipHfZBqKwygAA +yRMu+MWKuEWYQ5ErjYaWiwAA +FpFu4xXxZ0yA+Twh2wpJlgAA +Z3chHk2lFUGnailrPWq6MQAA +7uNpzIMfD0eMWIaeUbLlHQAA +CoDDnYyT8k+e37B6gDfRwwAA +AEWVoilfPk+nAdpLsV0CwQAA +BdS90sxroUOUWQjMZTYdzQAA +1 +MAKnyTiDo06cPkcuyMVz0AAA +1 +8Gn/k11xTkGZ83K2PTY6tgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +TGB7/N63rEO/nWFXWUc5GwAA +qG82m0zlPkqvT2acHPihkwAA + + +TGB7/N63rEO/nWFXWUc5GwAA +VKh7LpFhYka/yUWbEMRTBAAA + + + +bug-report-task- +yePcB6NdXUG1SBs2wQJA7gAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +MuORoP61R0OsaeYLMDCl7gAA +o8F4GnogRkmyoRivq80I8gAA +DVsDsvtAxEuFS9yKd9yFhAAA +oVWauA9x2E2qEglF2ZDgEAAA +2 + +False +wamDBWad0EiNBPiMYvPoYQAA +qG82m0zlPkqvT2acHPihkwAA +4 +FYFKqkHuIE+3NtkMevwh8gAA +F/rcfI71lkaOlDALKRyGvwAA +y/3sLoxurkmF7W8QVQeGFAAA +wNjJO4cpoUG4zyJW10vv4gAA + + +wamDBWad0EiNBPiMYvPoYQAA +VKh7LpFhYka/yUWbEMRTBAAA +4 ++JcnWuOL6Ua0vcKq3AnqPAAA +AbqO/C672kONX5Mi2FbZ2QAA +bvgsB45GAUWn72xi0F8DwAAA +gKpRvq3Wtke/YRFjIPcBjwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +Z1Oi371va0Wir60qC+nM1gAA +f/z1m4NMYEKJnnjr+0UN9AAA +PkI7i9fOlUC/h1Ub3/JHuwAA +N2XZxMgaBkS6wbjtWcXjtwAA +2 + +False +RPaUCtwDgE+7Y3vewD8uWQAA +VKh7LpFhYka/yUWbEMRTBAAA +4 +1JyKB5qSqUGgyixgwqrr4QAA +uUlgSVv9A0O8qqHGPqY/lQAA +smQzJNghMEGh+a5mlwOEDAAA +MfZLmjPihUyj8tck8q+9DwAA + + +RPaUCtwDgE+7Y3vewD8uWQAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +hIEi63PUsUq/5VuNe91rswAA +8/FTvIbKkEOm7haEILRhUAAA +9J5Hn+PxpkG+ZtedOkQ6EgAA +DRdGsJaoRU6bj9Ny8RvVzQAA + + + +testing-estimat +yePcB6NdXUG1SBs2wQJA7gAA +8 +kliHiKyFiEyM4tl1y2PxqQAA +ZK9vBuzwK0+qvHlmi4UQZwAA +4MlemzUG6UupqHiGZMz5rQAA +dctb+/EJlE2GmNIiqKwD3gAA +4hezOO3zxE6T3AtmMrs4MwAA +Atypt726KkmaNnTw7Q3EYQAA +VS+vlz3GQUaLWwxRTkTLygAA +MqUW6X1Ww0GfjJ5qx4G20AAA +1 +GHPM6mLD3kO4lCP2rqtf+QAA +11 +RaGpcXRFFk2Egrs9p45aEwAA +g0TBPf3Nh0KJwiSYVxiPhQAA +z8s7WtExy0+auE7CN08QzQAA +SqEbSyA4zkqxiqZEBvO8kQAA +3NROu9QlyE+nFFHGnsD1eQAA +9Ra0YEGAbk+1k11e5pAURQAA +02hOTKH4qE+Snq2RdNFI/gAA +xf2zcv1RLES2E6ZY//8hdwAA +7PzK5upkUk+dJkyPmUbNewAA +SlWJmvsLTEKb0sz8CslRigAA +n6mfTSaq+k2RnTd3faTkxQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +FoDSEMS2ZkmTsrDtcYgDKAAA +odAX0fSALUCF3JgPgPmtPAAA +8VY2G3NxhEyw2+PmLVn4gAAA +TF+1Rgt/SEWoTFnDpd97sgAA +2 + +False +MEolPOO0IEuLY63mhD0XIAAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +YOFhTIRXZkCRT/20iOiu3wAA +G4JmI6QLpk6kLeS8fGipzwAA +MIqqDpNDaECMiszUTnTiOAAA +3e7dYeGE9Emyh4P37Ui5kwAA + + +MEolPOO0IEuLY63mhD0XIAAA +7jBLX6wjTkmObbw8i4xK0gAA +4 +POKY+tfyxUa+oX7KAX99XAAA +VZ/O9Cx1HUqJrk/DSux2nAAA +facP0dJwe0GdoUHFRqYvJAAA +ahz4Ad8q4EeqFI9A45hoWwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +FcZQ8iR/bkazNlwyyf9ViQAA +Qefe92j2XEq8x5GI1Vq+RQAA + + +FcZQ8iR/bkazNlwyyf9ViQAA +1Q7qLHEF7kKyydsrAZ/k1QAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +koNsJpIFwUmiquwPJJU7AQAA +QOUwkebWf0CryTQBc4Nr4gAA +6LrIq+6OyUKPnK3361v6AgAA +MaWCaOXLrUWJEm/r6uinpwAA +2 + +False +ys0dUMXSfkahAJXAYIjoOQAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +jIZ4geFcHEeuJxmhlB6cOwAA +N7zaxB1EEkOVOC3/HWuclgAA +IruNF2tIIUSk4EWcTfUwagAA +eVpalVUqlEWLl/ivXOcjvAAA + + +ys0dUMXSfkahAJXAYIjoOQAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +tcgXPbWKlkeq5whCkIEqBgAA +VHdO32YS9kaEjGvUPD3IDgAA +1s8vxl+q3kOLUyQ2DB47DQAA +6uw+HNw3AUW+/dCDQKJYgwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +nduyctsSjkWP5vNrczVzqgAA +1Q7qLHEF7kKyydsrAZ/k1QAA + + +nduyctsSjkWP5vNrczVzqgAA +bScKf7cMEkSKjrnDI4WzMgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +bRsNxdqG0k6JLtSqvVC7bQAA +mpfjLZNtmk+r8NuXBwWeiQAA +wB0f0yPBF0CYawBPvVqjIAAA +rHCvnsPGTE+zNZbDHE++awAA +2 + +False +qMuZkyzh+ky3oDxBIC0P/AAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +G4p5D5Ok+Uq50KJ8TFJblAAA +KFXH/VPOPkCDr8uXJAgXNwAA +qRx5UAbiP0m7IxOQxFq5KgAA +COFQHz8FNEypZM5OiCfh2AAA + + +qMuZkyzh+ky3oDxBIC0P/AAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +BrRWzuKLz0KFDeU3c7N6BwAA +uYlzPTT9LUWsJl6NSPSXlAAA +eQQ+fe2JaU+PM4aHo10w3gAA +qnjcyNRRC0OhIBkWjj2kEgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +rLKFRFKvd02r4IddUDKCOgAA +nwYr6bC930GQjManD/dXpgAA +MQLUBjz7Yk+8+xgKnwfHuwAA +EjCwqV9Fq0qAcntkeFJQqQAA +2 + +False +o0d7TUyzXk6c+PfIZT5lEAAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +a1WYHB1SLEy4LG/E/Zeq1QAA +KJHZMYdLG0mG+n1NFdD/nAAA +8OWv29487ky824lt3C0XKQAA +4fMRlY3bWEqFktL7lGOv8AAA + + +o0d7TUyzXk6c+PfIZT5lEAAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +32emQ4jPiEmk7EAvbQyaPAAA +6+55BoAGDkypGs1J57yGjAAA +KGzPZAjPqkCThoyxiqehEAAA +6g/fkENGek+bT0GlNSgHTQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +foJcoD2H3UmHTbmdcC4aiAAA +tckPYfstsE+v/xd6OD3ZLwAA +5bL+GE44EUCV4W74tbFlNAAA +wXbAb1614kC1SzAuIyi06gAA +2 + +False +BY9qrj1RFUm4rNyc3SVDmgAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +BrvWNXoTFkyiHxtJ+bByuwAA +ydPi2iOn4UyXblaa5PWyogAA +hHBJX3EgkUWXL+ReoFbutQAA +gqnIDYyd8kaWfF7fhYX0iQAA + + +BY9qrj1RFUm4rNyc3SVDmgAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +bO11anmKb0CZ+JUIT4eieQAA +MyBUM9gZBkK9MJI0Tz3ElwAA +H5yGIMXi602z+Wqj41vwHAAA +AmAJjiZHHkiInGfBM09YrQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +7maIWTGCx0Khz0Rnm5V+mQAA +s33ESSsZBEKgT9leWTzmVgAA +xFp99wMq2Eenlwr1HkpQkwAA +F7exZAwmtky9CKkUTofWhwAA +2 + +False +YnZl5Nva0UCe5UdReEoIzQAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +U2B6gobzpUKdSm2ZbkiPnwAA +0c5ct3w1jEaxkkGofwHlggAA +vx3NHGReik6tmP0DvwVCBgAA +vbS43s/1bk2pqHw4p/4JKAAA + + +YnZl5Nva0UCe5UdReEoIzQAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +H7w8bsQvJ0y+LG9GNf5K4gAA +S3OhH+qsmk2HPOBItVf4sQAA +Uj6b2BJjjkGuzn6m32vtpgAA +9MvEYJvH40qNBQkRWfP66wAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +Y3uVi8cKqkmudWYJZVT42wAA ++EC0O5eg0UesZPNCaFtddgAA +ZzZVr53oR0CxeUy0pPfUZQAA +7Rx4Hg1l/0K5AReBqHkMygAA +2 + +False +hLW1nXlISEGkjCaKgHd0dAAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +K822YUSdAE6ljgHfvrzwWQAA +2FNSgarAMku9KDUzZhJUqQAA +YSZ34zDGI0yU6QiD97sQBQAA +4npIOhO2wU21BzCFta4prQAA + + +hLW1nXlISEGkjCaKgHd0dAAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +7FxQGTNqQ0mOxCOpm4LnkgAA +rBEgZmTttkWVH9SFriyvuwAA +FHNSMg+PXkSYPfrWFwCmowAA +iq/IxYwimkqAQwc4Wg2m2QAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +YxOd3m1qA027GPH/yUDlNQAA +A9QzROkaZUmnGfbSzFg+OAAA +H8Mu2zo4F0O0v/oOmWITewAA +B5mOx3F5z0CDf5elmW3rKgAA +2 + +False +S8IcyUEQBk2t/QasjWBrEAAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +qxbpICxEGkuUgZ/RQSijVgAA +dStQaLCiWEubUOsDD1KlxgAA +IYegeYzmMU+ufgzi+oE9QAAA +2FUz1jUtw0SHEkc+JHv+lgAA + + +S8IcyUEQBk2t/QasjWBrEAAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +9mQnJERMRkueEmZU7cNaGgAA +gdsA+vvVX0iSWRF/L8fKYgAA +ArH5MMi9REuzagzAPHe4yAAA +T18gFKwuWUm9Jqo8urQlNgAA + + + +new-idea-action +yePcB6NdXUG1SBs2wQJA7gAA +8 +9tFoXvjmTECmCvT8S3sjAwAA +0IUfU0HSS0aMONgZS6fWwAAA +s1jJF/myk06ik/AJ0uNaogAA +cqNVL4+p4EedgBCL68GWNgAA +KLbcUDvcykStsj8g95lfAgAA +ptyiyKssw0CACA+T6S7DKAAA +Dsa4qhDcsUGFmeuJwl066gAA +BNU2drZyikiUUdl0FN6qdgAA +1 +bFIlptiTHUqaYGcZ9Z9BwwAA +1 +FMzzdvZAeUWKXvIN8LFkfwAA + + +end-procedure +yePcB6NdXUG1SBs2wQJA7gAA +4 +70rDX5jwP0iWbeW/wLyyFwAA +0sRGCg9R7UOT/Q1hjztyTwAA +E/Wqyfb0+E6vtMXK4MXoWgAA +g/ZQORCh0EuoipikJ12ePwAA +1 +hxKkcKewvkuhqVgosrEOqAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +0kBRIU7rpEqIjDV+ztOz6gAA +qL8SYOZTakCpt/xFZB9aCgAA +yG8mashwhkePgQ043HCYHwAA +lYTuVyJ0AUWte0DxhMUpsgAA +2 + +False +ucnlPfSho0+nLeC2/imr6wAA +KmQBouG6c0yb16gPnUnBtQAA +4 +nEvyQei+qk2Csenal9KdxwAA +HDFNulUJ00exHzEH3OWJbwAA +7ApMfzp6zEOI/yoWOXSltQAA +I1PKl4azt0ybN/z4NB0yiAAA + + +ucnlPfSho0+nLeC2/imr6wAA +4Ng728cyoEW6niFYPfKpFAAA +4 +4cCFPrNWokirOBfQcx8P4QAA +fwplPBMi6U22/RdD/I8q0gAA +hP0cLMB2eUW8uoBWjtHShwAA +C/WDcp4Qdk64iOKgs1J5nQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +y4dctQaIvUu8HlgoRpHpZgAA +jCo/i8/cQUKUbMTu8A1S4QAA +LxsAdFoKPEi74V/NzCDknQAA +7VnlqWnpQU2b8NCOdjhgjQAA +2 + +False +eim49HTyz0aTq6cSTLKUxQAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +wZlZ3gUfGk+6FmsjGSG06AAA +GOg+Iodw/kShpHfvCXm3pQAA +H7VtE2ZCMEq9RZqsL8TN6AAA +66p9bzxbSE+yPJdyi/eZowAA + + +eim49HTyz0aTq6cSTLKUxQAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +Lk2coXYS3UmufPm/f7gqIQAA +gENhWHX2U0u4FOkgahO1EgAA +/RM1XcCf8EulMAmNr+UW5gAA +iDCzMrQJkUC8t/crY2Y/sgAA + + + +publish-estimat +yePcB6NdXUG1SBs2wQJA7gAA +8 +myJOly92w06UWOgls7OciAAA +xtDPOGEiQEq5zvK05i1ZQQAA +pqMjRmdXxECNy6m3ZCjo/AAA +QMeyBuFWaEeMG/C/SIUDtgAA ++sKzDE+8zkS7xWQbBBTVcwAA +QZbMHiqcWUGAnSlTjF8BKgAA +8TdrUeKG/EatRU4pg0LoXAAA +exXG6JzqIEG/GjzljGMeMQAA +1 +3ExrMzh4BU+qEom+NkgXhAAA +6 +lw2G96qqakq/ubRYW8gRuAAA +9wmTKLpCT0Ga+RcZfnUdYQAA +gijAVu6IkkimRi58YU5afQAA +v1eyd2Q+GU+hNljhcBIlnAAA +BlAGbbIi30aMaBEtftLGIAAA +PlQ+p7G7JUegK51TuNbuLgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +WkOm4xYDUUyoLlIgX+fSBgAA +Qefe92j2XEq8x5GI1Vq+RQAA + + +WkOm4xYDUUyoLlIgX+fSBgAA +YPSGJ8SkH0mAV1HZcqVjOgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +LsVJKqXOn02QFoWv9t1wrwAA +Qefe92j2XEq8x5GI1Vq+RQAA + + +LsVJKqXOn02QFoWv9t1wrwAA +Gn5CjkIjQUCxSoecNQk2dQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +4MicNE+yPUqY4NnHd42b0QAA +aWV41fQv60C8uVZ9swUndQAA +hLg0dIG13UemZ7c3etRPIwAA +ivogB1p0xkaHAcK2138VUAAA +2 + +False +Ia4zuWdlXkG9ym+vnOiB3AAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +LinjFC7WWUiQjF/A2MhzxwAA +4EM2InXwRU+hZvMQBTkh6wAA +E3fb6PG62UGgaZ5VtwsoCwAA +ffZLLZvKnE27oy6YUAJd+QAA + + +Ia4zuWdlXkG9ym+vnOiB3AAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +EBMBSXpP40CLBBHRoJmm4gAA +iyW2JSzOGE+k95P7Y+wiTwAA +vTYhXjelzE+L96fmZxH14gAA +9kmFdT3h/Uy/04odtOKUxAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +H9tO76ypL0u/lVd8LEmP5wAA +X3K2/2UkaEW02WfTJWrbrgAA +GFhpB8ALgUuYKZheX9f2mgAA +0tCSzrlst0KRUHBw65XrfwAA +2 + +False +XiWUowb9X0+cmh/jn2Y6nwAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +c0EpKV2ek0Sm3FTSwQseKgAA +n/JsNYmspEOdMSgbu6gP4QAA +Z/uI4gE3B06rvtvxRiGuowAA +5p4U6cdT+0KwWnKqspkhvQAA + + +XiWUowb9X0+cmh/jn2Y6nwAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +xSEHuBVq9kCc94aMdOEZiwAA +uS2FzsJNa0ODv13PbJzLHQAA +A+phxBs/IESWgG/IndRnrwAA +qP7aUdfBakKg0kW7dB2yGAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +I6Sg7V/1pkuC6IMdDFktRwAA ++fBNjJxucEuxc1rgaJ5C4wAA +HAJpIxzai0GYHY8zAPHyFwAA +YrL0dmjJKkWgHEPsiSFnDQAA +2 + +False +MQ6Mry1/cE60C5Ss93uHrAAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +hfnqCjUcYUmSkRQIJeUl9AAA +NqcYZ/50jUCYH/CZ+wThaAAA +a3CORyuYKkmCIGCdk1khMgAA +vvFUIIC/AUSuAPLp7zbRYwAA + + +MQ6Mry1/cE60C5Ss93uHrAAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +MOiTVKU1bUSKSN6NfwTiQQAA +c5QlVkvfYE2er/gkBcROMwAA +sXAVyb+nJEe1AqzSvYP2pwAA +L6UzUatZrkSFAUJrQar0eAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +fQp6Fp6IyUubCElo4r6YrQAA +wIhe3Md/S0GEpDD21j4/aQAA ++7jQmWLFdEGaneK/pLM1oQAA +oSM4Eaw97EKV5kkL+aeKygAA +2 + +False +/Q+8gAvTq0+PLlF0qnEkGwAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +gpCQD7FsKUinVOVQiO8mswAA +tyEovfQXnUSDTkXjBsGHBwAA +6rqFA6S390K8HKObMmG7yAAA +kYqCqYC+v0meOIOSfwEEkwAA + + +/Q+8gAvTq0+PLlF0qnEkGwAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +g4kBZ0sNcUm7OsiYpxpj+AAA +d8A5ZIgIg0eBBfO7VB+bTAAA +wp3JBnhPRkCGTrgmAOSrnAAA +v5OOInR1QkOf6HRPUltjLAAA + + + +code-branch +yePcB6NdXUG1SBs2wQJA7gAA +4 +ycjyLlSj3kqAT4WlwN+ABQAA +h9dpCkD2OUCLU/AA4wY/vAAA +i9qta1y1tEGstQ7toqMoBgAA +CnpOLcx9+0uyUmV6SN6AGQAA +2 +6mwoN9toVUKgNXSs/zpXIQAA +d4BprJk1YUek3SfLLsVZ4QAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +nL0BKKvjfUS8lRhdP5BepgAA +o0h5Ac2oOEWBQeNXkBDFTgAA +xlUi2A4f5UWhPZsOsPvyfAAA +pXFSbkRrxUmU2r9ZufCHsAAA +2 + +False +SCWqm0HM/0qIGrMzbXXlWwAA +LRvECEfPPkOYfW5/8H8P3QAA +4 +UbiZK9KAYkm/FxXs/sJ1PgAA +x7hNOWGjKEa8EiErSQ6qIwAA +PLyM4N1Bw02AUgqA6MXflAAA +dAJyrrajuU+xCq1OAFacWgAA + + +SCWqm0HM/0qIGrMzbXXlWwAA +7jBLX6wjTkmObbw8i4xK0gAA +4 +np1slmkaZUOnSUwDUcogqwAA +rq193iVGokKT1FV+8m0diwAA +gnp1FflDnk60TRVkAGKY1wAA +9V7yrrZe9ka1GpuGHGllYQAA + + + +code-combine +yePcB6NdXUG1SBs2wQJA7gAA +4 +ZIbf0/c06EGBYTz9Fgc3IQAA +K+bc/F2cWUasS1vEHOYxHgAA +qg0GnAowhkGHkTgF7qQnvAAA +/CFC299mxEOJ7Xs7/C1FEQAA +2 +TchuDcMxgU66R77KAyfQSgAA +98m3w3R5mkuexiYTm0X0CQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +sfSiXZ6QikGNN6fySNJjzwAA +s3GM0aNS5E2dj1+MyKZnpgAA +QzhBowV/9kequQU8n5eqLAAA +9EkHHOTcT0G1iuVVh+ZxEwAA +2 + +False +xrdGh677e02q1kDtgtazfQAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +G5F62P80BkyXeMyc2KLF7gAA +7vjmYbJaMEiyrBOSaQbL2gAA +uPUrO0BUi066us5iZo9epgAA +1ktB2ZoUnUikhZa9Lr9FRwAA + + +xrdGh677e02q1kDtgtazfQAA +bdHUhH7aEUuvu1sA17cxzQAA +4 +Dol+tuk8s0WJWWz74S9jHwAA +FmBhRYFbHEOGHHmAOwC/qAAA +0RPa69fXYE+o2DG3dFehZgAA ++k4nMLbv+EK2MFbo5Tv50gAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +BVpvZ9oKmUKBwXRl+EfdAgAA +R943EP40H0200KX45yLxQAAA +boCO6v7bLkO/j4chx/pWQQAA +q7wCw8+kuE6WZysXuaUUbQAA +2 + +False +SQJ2LNwqDUSo9n73ytxYFwAA +bdHUhH7aEUuvu1sA17cxzQAA +4 +YD/flTMSUk6ialXpCYyMJwAA +5kP/FDbDmEm0I8MqCKKXGQAA +dOLpHN/2tk6g4tcwp6B1MgAA +v0o8fbCba0W+mmdhxMt5pAAA + + +SQJ2LNwqDUSo9n73ytxYFwAA +qG82m0zlPkqvT2acHPihkwAA +4 +sIL9vztZWEKDIKiWVikwZAAA +3qvmKXeWXECro5tiBkLh8gAA +sN3xv/nWR0ucEOdnNKKixQAA +mhX1n2TRTU+w+HyxBv00bAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +4nnMMpx0+0i9PSTfNY7csQAA +B+GzpaLzbEi00iZacS4QmAAA +iWz2OzoL2kalmml3xNye0AAA +elLWki7pC0CXxpIof1gy4AAA +2 + +False +pBLToI3BDkSX21nTyuesfQAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +Kma+Vd3S5U6otU4y7JOK0QAA +l2I2tRgZ5kKYTPr6xQkpEQAA +nOnigqRlbEyZ/3XnClAguwAA +HDlSfDj3ZEGQCGXDh6jZQgAA + + +pBLToI3BDkSX21nTyuesfQAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +PEql8kY/BUWWRB6vCttfgwAA +NKGdJEyW50iLnnQKqNPw1gAA +n6ULT067HkKEe73P5cz6jQAA +kpLMNZAgt0CyTvFxn8SOqAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +M9gClhiZZUu0WfRQaPfoVgAA +MSB+eYXhR06R7pNMOlHa6gAA +l9bLzOVoHUW9+zT5nA9uoAAA +Jkn6+PMm3ESP8mxG5mxjnAAA +2 + +False +zLIxpYqFF02jEI1wZKI0SQAA +lCPHtP6cZ0W7Oq4UP4fxpAAA +4 +qfmagCRPAUuFcPIYFphYaAAA +QV+XPkHQD0u0fNLVt4126wAA +cWUNxOoI8UKQ6iotD7Y0LAAA +sF4wph8sVEyqz1PnCDEJFAAA + + +zLIxpYqFF02jEI1wZKI0SQAA +NezC/3LDGUub0eLy4M8sOgAA +4 +9bXySmX5o0+4AL+ewvoWRAAA +Lev/Vk8CvEyEtqUz9OhBtQAA +oIh7bKQALEmVaNDkQps1ZAAA +Csx6RuVTEkCXXiL88dVaOwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +xhtYHO9mUkm8cjhhbG2RJgAA +/jxlDAqQTES6JWGBrBLn3QAA +vbkyhLgWKE+5reC6WVk8ZwAA +90brfcoCEE2yV5vKbRgpLAAA +2 + +False +8JoAmLoX6UCsEUuYOfgFrwAA +H7tysEnUp0+p4o84YYVC8wAA +4 +Yt19qcMiC0GBT+fewwRKTAAA +tZStD9Hh9UCu/SnLwbwrcgAA +Y6Tfa3wjCkaDfJKm1In5ygAA +b6x9zPYut0yPZk6pGKB1dAAA + + +8JoAmLoX6UCsEUuYOfgFrwAA +7jBLX6wjTkmObbw8i4xK0gAA +4 +KmZodHdsaEm4baVb8D2C+AAA +LuqqYjeu6UeDkT/f2wnL6wAA +ucEBO1PfpUS3Y9SIWVHZlAAA +hCqcivFWD02WFq/oWQCa6AAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +WJWDvRBteEWSI3P/KPuhRgAA +HJxA3vmcS0yZPBLyOFbhdwAA ++TMFmG/26E2WuAagodHaVAAA +SHmb6/jKMEecA8SrIWf9pQAA +2 + +False +uQ67KS+1vUmRO9PVPQmAvQAA +KbXj7bLsjku9BsYv/z63VgAA +4 +jJBDxIfObUm02xMmQwwQUgAA +H+MHJME5cEe3/z57Hwb9qQAA +KKa8KDhiT0yywcRZFEhgZAAA +a8JxRIyCpUuktghxCqZYNAAA + + +uQ67KS+1vUmRO9PVPQmAvQAA +qG82m0zlPkqvT2acHPihkwAA +4 +7cE9qkWD5EmPpJLBAp1HeAAA +3LZt9srt6kCwSNKITlWE2gAA +Pd8O31jYK06fx9i+6clIywAA +vKLG2zhoYUyeqFTjhy8ZKwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +yaORZuMMGUad2TRGYETePwAA +cDz8tGhKvUCuPbstPQ9A9wAA +nkW18+CiUkO5hxLJg52lVQAA +WqCbvh1C1E6wcJkqgIjjnAAA +2 + +False +S89azVl1DEerKr0Lg7uYIwAA +VwrgoiK6h0aUxHMgZDKYzgAA +4 +YjUwXNx4x0W+0JP1C8bBsgAA +ZuZvgd8HF0qjC85h6/pWuQAA +H4OnetFRCEWTCj6Fs1hSPQAA +AB35xTBI3kCNRQfQ0zRxlQAA + + +S89azVl1DEerKr0Lg7uYIwAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +8pKXJYWq/U+GC1Gw7P3YogAA +xm8csvGgWUqbrmJTGobYggAA +nGixJcTMQU6pMIRfTHnwOAAA +0W+J5TWQEU279og+ldhIMAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +UBIpllFC2E+GQMCzMBXoywAA +HNZiX6rmcE61AUOe/aikagAA +colrF1SicEuXbQMzolS0cwAA +1JavVcL0tkWP5qL4f2ol1gAA +2 + +False +UmPi888MJEySape3IDytNQAA +fKAlsL5x3U2cAiir26vsAQAA +4 +MBMCXCaE2E6DBqZhj0hI4wAA +Zl68UCRFw0KCZo4LWXEB7AAA +JoVq17ylOEiLiPs23koDdQAA +kV4z6nwflEGtPRWJRbm2MQAA + + +UmPi888MJEySape3IDytNQAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +3xFIXB43e02oCzXQnJyBIQAA +E81GEhfrO0uBcZ1YwYxrRQAA +6ru8xt186Eu5CJ+CnQcPSAAA +IyNUDKRo80uk1+vWOdd6ZwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +Wy3bqEfYM0KVFZ1Ydr4GSgAA +fEMuc7IoL0+m7gdsXU5KVgAA +GEfO+w8NfUiyxBr4wREzSgAA +O6Ti9cuFB0WVM7vuNLFhlQAA +2 + +False +WED3oZHyO0Sbd335J3t4SwAA +d6r7rOW3akG5lkJDtATmigAA +4 +0ZfC7dfSdU+77n8W+2oFxwAA +q5mo1sXERECknsOga63bQwAA +dvrtx2qjA0yPQapYCJKnKAAA +I2T0Katdr0C5LeWEd7aHxAAA + + +WED3oZHyO0Sbd335J3t4SwAA +lNk1i5gHU02RiCDfZIsLEQAA +4 +LdSvWje1J0CqbOHWDaAgUAAA ++sQGHocwrUmn3ruLRXPZpgAA +O0m/ydhB50iFll0hEFZfZAAA +0mXOeImHsU2RNOJHpNFjXQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +oxEARNr9gkGzwAFVPhHIkAAA +Z1qYhmVIPUW+vEfAv0piWQAA +lOi6KelScUuy5fZD8Ryk7AAA +mhW1I09edUiS8X8MEmfclgAA +2 + +False +OaMYngAfm0WoiHZwhZD+qQAA +dHVXjobujkKGloy7+Ox8DAAA +4 +MC+sWMseaE+MfE3R3FxpyAAA +/KqujkQIjUCqirzj1ToUhwAA +W51m75wQcUSvNIIUfcBISgAA +IZiW0v0hjEOFt9F4QTWCkQAA + + +OaMYngAfm0WoiHZwhZD+qQAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +HYqM8w3OGk2uKsT8jnNQxgAA +rhuf+QT8r0a2Yed82O3gfwAA +T6ij/GDNiUaiIC/GNAwBnwAA +1t+/KulozES5sUUdXSN5mQAA + + + +analysis-action +yePcB6NdXUG1SBs2wQJA7gAA +12 +kl2Aed9IkUu2D64AkSCxzAAA +nZg4+VLgWUSW2gCcSLKJUgAA ++zOyC07eKEGprweVTpdPsgAA +465btYj/XE+ZLJj45PLqwAAA +UyNk1RnZTki1ekm3+nWlBAAA +TTECX4f+skmDkGsbwwgAeQAA +zzTQXIDdakKYtCtdopebawAA +pLHkBSDUz0Cppz3RO12bCgAA +3nCDuBMsK0+QzoSS/9JHsgAA +c1JY/FdyT0m6nHqAUmamegAA +U8zURKBko0+T0bhz3P57cQAA +IpedjlXLukO3PmzSFfsqmQAA +1 +esX3j+a1KU2snuv6WgXrzgAA +3 +J3TF5Wds2UivZ3unkZY6DwAA +tbE2qZkS9UCvoD6eysPdBQAA +XqdZXwSYokCQBpZDzAi8kQAA + + +usr-bug-report-action +yePcB6NdXUG1SBs2wQJA7gAA +8 +Ms00Ghmc4EasjVjv6tSf/wAA +2MwFay2zRke8ERv83MTOKAAA +QSgfeZx5+0WBg9urqunRTQAA +IOSjRcFSOEO7mU5Zk7XrigAA +YVBwJiAt70+Y3BJSw5fjFgAA +2U7nVobKJ0Sm/kAUGOjUBgAA +Onj/hiih60uvArokB0ksxAAA +8cwV08rY7U+T5xbsVw709wAA +1 +gIzn+8O0A0ux4mJbpKNkEwAA +1 +YjM/m1UlCki4/Q0e0sh8lgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +18YORdrZe0urPTyJgbu7GgAA +JdmCvIJu+0yQ0OKD/cfItAAA +qenoNaUDpkKy/63NHyGaDAAA +vYG716j5tEq9Zvemg7EhQgAA +2 + +False +IoGZLKJYy0Su7gKold2FugAA +tptycT8EmUmriJ3RFm3kFAAA +4 +BxxfBaPrJUiHrm6OTAQRBwAA +Kx6M1RltWUODr5/zwwlzJQAA +q5WGu8fjgE+IYjKnK69adQAA +V5bL71jyhUiq41ZWtdO1qwAA + + +IoGZLKJYy0Su7gKold2FugAA +lNk1i5gHU02RiCDfZIsLEQAA +4 +sVcHIGR/2k2As0X3aTjfAgAA +UR5K0UNdXESX2cbrq6vB7AAA +QBCzNuSgD0+F9eOztz82WQAA +s0vjM72K0UCC49bt4Zqw5wAA + + + +complete-estimate +yePcB6NdXUG1SBs2wQJA7gAA +8 +tJdxQ2n6kUCuF/faDlNrnwAA +v1fjD//B7EWEisQfMlIvuwAA +A6YZj2skIESvHAbuIH/EhwAA +FO5BKxRG5U+UtKdGhxorgAAA +IY8NFiPGQkOPFFwtq6H0ZgAA +eUPPRkruHEWmhfWv5COWmQAA +gQBdHO5xl0+ZtCjcXYPsMgAA +jb4Zzs6N40GLyjrIR+q5DAAA +1 +xg7XA4XPo0GPzFxhulYO7QAA +5 +x9ru4+yHq0W72sfWmglc7wAA +d4j7kpAS0ka+ba2k0nXpZAAA +A9CObdPLTUSepg+ci/+UBAAA +lrh/7WQ3A0mIOTZd1oStcgAA +YvCannseaUmrs70XgLp5GQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +9/JEphG95UKpIBxwyVir1AAA +PFCuXJitn06zd0wiU+ftPgAA +Ru0bpp+XR0i+xwgb91d4rAAA +ZquN1AsAqEGCf/7mx+YoigAA +2 + +False +KPYLQRKmIkeAc/y+UUmN4QAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +yVa1pUDStk+GRkq5Fgck/gAA +dqzw/nc6y0yihANiteld9QAA +17VOfTLTlE2P6EGY1i/XPAAA +kmmyZzWP1EaOnNihdtkk4gAA + + +KPYLQRKmIkeAc/y+UUmN4QAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +a/A8WMu1lkq1N4TaDnyqKQAA +hazIN21n+Uia5yNe6q5mbAAA +HR0n+oEr/UO3gMljEFbgXAAA +qQ/3gm9gpEy7RDIWnmKIPgAA + + + +using-action +yePcB6NdXUG1SBs2wQJA7gAA +8 +P24tgRFfhEi1BROVlu7OOgAA +B5bvNIvuXUiZk2omQW+YVgAA +BXM5xmQ/8k+h/QvqfjyNugAA +ssG5VODZa0yjefMUfiFFhgAA +HWqJtv0eeke43TE3RflDdwAA +CikF7NStM06PDiNPFZ2tegAA +qJGvjFnjMU+TxEjvvb3XugAA +Qn7B7prY/0m0aCSTH59GxgAA +1 +4d0O1iKcq0+kIW5Bpb2joAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +CzI5Y9qff0CxcFCZVa5S3AAA +wa/TG8q/LEaXge7GDOYfVAAA +AVD95rCx60KHmIaTiLcRxQAA +R5CkGmm/YEOj5eV88Id3jgAA +2 + +False +FAmlbTk0n0ytt/cqGfgskwAA +lNk1i5gHU02RiCDfZIsLEQAA +4 +qr22hFooyEK4i8WQ+1Sv/gAA +mX9Nobkxvke0GOFz+BBEeAAA +I2ZBrN3vf0GLpKzqD0z1xQAA +zkLTUjffTkuMGaMOBrHz4QAA + + +FAmlbTk0n0ytt/cqGfgskwAA +NezC/3LDGUub0eLy4M8sOgAA +4 +NjzjPxTYbUud2VwEUWcxbgAA +Fk1nkB+UR0K2Sge74B4V4AAA +WFadMfk7n0KEmxucDFCN9QAA +Ydctqv+D60OjutAnNGrhDQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +peIWiqIkvE68pZZZB65+ggAA +bWK0sQ56QESfnUfUkTRYBQAA +oiHtLcL9tUi8L4HTr4RE/wAA +Md29uhL4tkaJIuBUA85ObwAA +2 + +False +powHE2AyUUeexm1F5fODTAAA +jic239+6CEiL3vfxIBKzZwAA +4 +tmxcg6bdVUCOl28UigeIkgAA +X7SYFxMcIkW8+laCzdFvEQAA +vqPes6cJxUy3B4CDigTD1QAA +WXAnzpMOckeKZs71K8JyxQAA + + +powHE2AyUUeexm1F5fODTAAA +PjS4k33/kkePfB8R0Qh14AAA +4 +bM7is6uMMk2GIxlWDVB33wAA +GUY//HsXnUa8rBs+YO2UNwAA +q68BWLg+d0+YKa8sJRnjvgAA +C1uWNcOmb0iYVMU4I2QyrwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +jDGR0qRjR0iquyAXdyKoeAAA +KAANTO4nTEqLiFX/UbUTngAA +aCktCRSJrU+V/ga/VLJaVQAA +YPjebXY/pEmUpD8U4gQdbQAA +2 + +False ++gvlzndWo0SXFj3rSfMCdQAA +PjS4k33/kkePfB8R0Qh14AAA +4 +XHfdmC0DpEiEXC06KQbVFAAA +kRnwqGgnDkKM2rlcFxRDjgAA +HGFSjWvB3ECFbAD5eNHg3wAA +xXlOnXywLEaD4BZewBg9fwAA + + ++gvlzndWo0SXFj3rSfMCdQAA +H7tysEnUp0+p4o84YYVC8wAA +4 +57iU7zAT40KuHJV4IshzgwAA +sEugwmegAEyJn4OWNNCuFAAA +IkS9kzpevEGrVfQq1JkVwAAA +nQaETYUhZUWG4b4vq1CUdgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +8 +feLQ0J+Qwk6YWzkfsbZt2AAA +n4sycilAaUOLLNGTDGGONwAA +5Zt6ttadSUyDPVmooIqN+AAA +01hwlutU30ePjiZ3f7ZOEAAA ++cahWdC1I0yBuh9ZIYNbOgAA +cqBAIkf4akeCsyrTqB75yAAA +8bfLKj53rk28PpoVbAn7bAAA +8vfYrGNmA0GHQ9MzSLFQ3wAA +2 + +False +Ycu282Q90kSZPuP8Y2664QAA +7lWVbX8GnUmVFBjNoEJuAAAA +8 +O7P3rpnbkku5vOnBBDQnVQAA +gGlpGjQickOmFCKkVfkdHgAA +kBSGXCJeH0uQsgrL0D2JtwAA +Xz1mHPhFmU6vfUOcO0mRGgAA +GfCS+zY2FESbRxFOH0OuTwAA +RzK1yiO9KkOPeHU250BbAAAA +shE3WVSqfUGtgY/jCHqDLAAA +b+pxabew10WQqsfp/xDwHQAA + + +Ycu282Q90kSZPuP8Y2664QAA +tptycT8EmUmriJ3RFm3kFAAA +8 +z4wjqqzFbk2EDYNc14VWGwAA +dUYMp1/Jl0W4mPnxHjW6BgAA +S0Rejdceg0CCIF2vhtC+VQAA +Kupf+0xddkayQ/uMYBkjBAAA +eiS7Ik+TokSFh8Orh33ZmQAA +aevdSpRoxkqa/QLPsPDfjAAA +MGZmdqR9AEeBTwMHLCQEBwAA +0aTLMjhAfk2t4kFS9CsFygAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +8 +1Z18b9EM2EiZ9nTwB001WwAA +CxY36aptjU2fMKwL8Zw0qQAA +tknMQuvbTkybhfn4FRSI0wAA +z/48QS1QOUGo5Pgu+2qOMQAA +vatANhgzI0CKn2V4OtnZ0AAA +PAtvo9voFUunEJIhEVGP5wAA +uFUs6mdPhUq72o+iu7u12AAA +wlHx5ohFOU+qFb6sgE923AAA +2 + +False +2f8CCoiKYEm2bnh0fSgF5AAA +dqA/cPl8GEmWvU/R693yfAAA +8 +xfGXcs5oEEOMNfSOBHdYzAAA +hA7vOr4tyUuMmRw30XQa7wAA +KL01PYasUUWRDnG4x4RUUQAA +d9S0f7NrSk64dwSQRNob1gAA +L7sujdVry0+QVQEVJqsXugAA +rzawLrQjRkC0QyIo5jR5kgAA +m5XLlIWekU2Jhm12nAqoQAAA +/kOCH4YBBkaQHdYdD6P8RQAA + + +2f8CCoiKYEm2bnh0fSgF5AAA +tptycT8EmUmriJ3RFm3kFAAA +8 +noKBc1mo4UG1t2EMlDRaywAA +VzUlrSyXFk+iDHWgRGS9sAAA +z0AE0yBfeEOfsLbGxesbtQAA +I5ch13+LJUO+XBwczhguKwAA +z+u8fjAoikGnoYtuvyFK1wAA +7SP7byz6dkyTbiK0vGn0+AAA +4n0Ym0BlAk6zJNk3a0YjQQAA +fG/jWZWN3kuLndl9TqLltwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +7lWVbX8GnUmVFBjNoEJuAAAA +4 +LPYa5c2HsU6j2Ex9FqXjTgAA +ZOAvKuNRVkCT0opidy1PXgAA +JcpxIb6QnUWC1QZbALQFzgAA +ZsMOazCICku0dmBxu5BPwwAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +tptycT8EmUmriJ3RFm3kFAAA +4 +fe5rVGDTZkm30nnnVjUnGwAA +dBcQppHqzUKTIuOYZvqCKgAA +a9a5QLTQQky8K7vE9psNmQAA +HJ9i2/A6LECi4DFihuoAjgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +dqA/cPl8GEmWvU/R693yfAAA +4 +PIeD4XTRgkWqIqXdXMW6LAAA +MJTa0XDYzka+Vo9PAyM/7QAA +8lLpkHDS4EW6va0BdDqCVwAA +60NGyDqm4k6FLnYIfNuDGQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +d6r7rOW3akG5lkJDtATmigAA +4 +WoMdHjHT60y/ucZKUI2yRQAA +nUoCWqfBDkq00NytI11QpQAA +r89GsQOYQ0Sxo76W1HZ4MAAA +t+dO3/Yc70u5VbpokZ3MUAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +lCPHtP6cZ0W7Oq4UP4fxpAAA +4 +suq3p4Gr1ECCNNqsL9GNmgAA +EfQ5GYqRlEmcyjiM59X7eAAA +gVWQwwDPJUu3UtwIHnMh5wAA +N1Ajm1F3J0OuhEA3jFy40AAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +3/I8Qb882kyBbKWrLspv1QAA +uZTV3tuKiku+LqqH5r8NAwAA +pE8BwqyV1E6GWivMp/8rmwAA +wI2BFcx4G0uwhSvKTvMuBwAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +K2wne454ikKjxhvQugAQgQAA +KGBLRdO8h0y/fiusODvvawAA +AFPgFpfzXU2Dt7nsMpfDjAAA +Cj8ijFRd6E2Ghc/QEhvpswAA + + +design-task +yePcB6NdXUG1SBs2wQJA7gAA +8 +HIeb6G3eG0y9ALZQK+J4gQAA +D86021vpd0u1rin08iqseQAA +I3aQoW+RVE2X1kWe+WKkXwAA +vNom6Up/KkqoATKRFkBn3AAA +MhTplpcR+UyDiR2znck4tAAA +Zk50HZexL02VLsWY70R4agAA +hqbV8Js5W0uw1DupV1XQqwAA +tAB9iGd8D0+4oE8cVggsrAAA +1 +onJRiZekkkW+HvL7efTCQAAA +1 +L7a4CYmPC0uUj33RRoWiJgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +U//hAdD8QU+M1p1r952pSAAA +4 +wse/k+6Wo0ywK/W3StD9gQAA +v5RmwFwCqkKsqOLo8tsnXwAA +IwreAe0oQEeC0kg1/1uy0AAA +2UaSFudIDkuHDMikZiR2UwAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +PjS4k33/kkePfB8R0Qh14AAA +4 +sAjv9H6fb02YWJbD/tg8iwAA +XdON7SMH3kaqHDs3tzr1MQAA +Ogcrs25sXUGBUDPgjxhOsgAA +a9K3+Pr2UEGcGEzwmgPGSQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +guejFFOf3EeA800C6x9HyQAA +Or2IcXa7pEKjvrKWslJVFQAA +3n65+/c4i0GSW7vB8tbfNAAA +AyLTcrRat0m8EpooVXUxYgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +dHVXjobujkKGloy7+Ox8DAAA +4 +5tiqe3EwmEWE4YAS3g4JywAA +3b5OnzxpJkSC8Au+eBrkCQAA +dZ0qyYWrrEeUup1awqQUQgAA +ICDtZyDxBkmvrnvCjWPUugAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +G18zTBUAj0+SdrsOmksR0QAA +4 +Mv9HX3XjskWl4ZZPrqk1SQAA +KE0SJGBWG0KLgIFbd3i2QwAA +sGtoAbArIk6KT4dMfnI5ZwAA +yuc6pkaW9kKoN2MNyEsy9gAA + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +MFtSG5Zvd0SAELRfJuoHSgAA +MLBX+NGx9kymQ76b9EAKuwAA + + +MFtSG5Zvd0SAELRfJuoHSgAA +A/9YWnHJBEGH1jC8FI2M9gAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +rIGY5vyYw0+5KlohHZ6IOgAA +FkRCE52YAkaM/9oO8q9QFQAA + + +rIGY5vyYw0+5KlohHZ6IOgAA +MLBX+NGx9kymQ76b9EAKuwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +IL0+lwOVJkG2nXuxtPKJ/gAA +lnMIF7NC00m+YQbuUp4sbQAA +K1WW3wVHoUyz9tHvK8VYbAAA +GT2ouTWB5E25hjeZqE9AqQAA +2 + +Iz8n1Vm2AECplTLk/g9l/gAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +FJMQGI9o7EaSAVILMSXz2AAA +2dXNHgoH/UyKDBFzCvKvCQAA +222NKC8A/EK869IU54oTzAAA +dMY9zr/dJUSXGcAwhrDKQgAA + + +Iz8n1Vm2AECplTLk/g9l/gAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +Pbx/h52lXEGFKUAsD6TuMQAA +luHbToKxx0Cq5pYgxyEghQAA +nvwqDdPeikW9ZHZafgxVjgAA +qxhXSpOcEkeLxhhsnRiBowAA + + + +work-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +PZbcok41dUuxzpJHw+qcCQAA +43iteVy960mk6uiA4go8PgAA +Cf/wmnOCDk2JQYNqAdsrhAAA +1rLyekG6wU+wq4oVZHpEmwAA +4 +vY9LoEpVCEyXKh6+k1PP4AAA +3we00g4TrUSP2RwRD/Zr6AAA +jKTbz3HBukOB4vjFAHBjhwAA +wKnDb+gcSEGIVFdvrqRcMwAA +1 +MEkNsUXvgEqT0nEOCk4PgAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +GhrYfY9FhkaeOZ1Xi81ILwAA +MLBX+NGx9kymQ76b9EAKuwAA + + +GhrYfY9FhkaeOZ1Xi81ILwAA +oWDHE/AIyEqhL2zTdizC4AAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +oWDHE/AIyEqhL2zTdizC4AAA +akeIYx92HUGIvgZi/7qslgAA +4 +uAXLJOTriES/hdpjvEjnfQAA +dFPWubn5jEyxcLoGfqOBxwAA +RLdr22IYBU64sB29OxwdYAAA +CN2JHBk3CkyvzUC9V9TQSgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +H7tysEnUp0+p4o84YYVC8wAA +4 +erYw8J9LZk+PGvdV0EXI5QAA +4R3Y/IEGzkKI5zf8iF1FIwAA +GZqM0GLxrkCbK74b2fZjVgAA +U0RTzBQOMEaMiFuDOdAiEAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +fKAlsL5x3U2cAiir26vsAQAA +4 +nsTw2ZA9MUyYNIZWkuGSVQAA +7WH+78NmtkO404fHbMbE+wAA +gFyeuj8huka5UWP2sPI8NgAA +RbFtgmQUt0mjDPZw/98xJgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +VwrgoiK6h0aUxHMgZDKYzgAA +4 +T+9SH6frG0y133/kjqaxMQAA +/N3RA5gFwEuotsWov+FmpwAA +0qjH7AqwK0iDS24VpsP+pQAA +P40xQHH9t0adC+QCUjBEgQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +KbXj7bLsjku9BsYv/z63VgAA +4 +sG7PAP0kWk6qe6SGPVoV1gAA +Ncubj6PQLkGMH3816dToeQAA +uzghXnAMTEWnVB9fwZw38QAA +0wWIHrFPP0i7omKIPR8t/AAA + + +yePcB6NdXUG1SBs2wQJA7gAA +Pu4+pL+iiU6lRzDtfLIgJwAA +akeIYx92HUGIvgZi/7qslgAA +4 +XZl6ZYNUfE+xutFWVAYtIgAA +IlwfJtARtEWtIPrnUbJu+gAA +NM5iDpHui0+j/2BV9i6RegAA +w+/2TypeZUyTM0XqlJ7faQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +78O5f65/80OvpHK3AuBEIQAA +akeIYx92HUGIvgZi/7qslgAA +4 +2y2CptpPXEOY6VTEMg6cFwAA +wDtgwkge8Eekbd+5Ba+RbgAA +pdsVCh/+6Uu1HKUTdGtwjAAA +YApY7dvNDkORwuLnh4r20gAA + + +yePcB6NdXUG1SBs2wQJA7gAA +aaiB2ZAB7kOSB9niWMGCrAAA +akeIYx92HUGIvgZi/7qslgAA +4 +S8IrOhFZMUqS53hszSTWTAAA +jlLodtp9HUyGpoRb3+ML8QAA +xt/qLKtHg0u/N7p1pQFM0AAA +UFUtmSkZOUOK8DDY2gqd4wAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +eYAhc/LzL02L/DGmAby1vQAA +mvyb1zRY7U+XMJoOIduwmQAA +QgWJ7oztH0qn8zJe0XTaTQAA +/muOiq+WlUKTjMf6selBcgAA +2 + +False +dQUIyAabUkW3BrzevL6ajQAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +PRlhOyseoEG/msjM8eMfPwAA +DxTUmp3bfkWzQFVWm9RyagAA +V4wre64b5EWdOFIRv9rIwwAA +YLHhiMeh+k2oN/11Bvs+gwAA + + +dQUIyAabUkW3BrzevL6ajQAA +G18zTBUAj0+SdrsOmksR0QAA +4 +N6JFJEMxTkOgdVOofY3b1QAA +mZHrhWLZaU6QhhhCk9KQfgAA +DFuqnRcmjUOC1Geo3//5zAAA +pdSXcQZ3gkKTKkk4UZxQJwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +KU8/JzWES0ezPaDHnQt0ggAA +Vox6i1CeQ0GtcIQfm9YdjQAA +OKiwIRAE6U24IXlip6X1yQAA +XNFIJAoRkU24kFw1qWOJlgAA +2 + +False +b9LJxRkpzEy/d2cpGE3jlAAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +HAz756pKI0OhGP2NtD0LDQAA +HpvaXT7zG0a7spn7t7WsWgAA +uUl6vpxXEEiSMJ+jtBGE8AAA +8fEP7wTYv06+QS91ksrWGQAA + + +b9LJxRkpzEy/d2cpGE3jlAAA +akeIYx92HUGIvgZi/7qslgAA +4 +sWk8jHPVsUye0HAsrU9b8AAA +RIn9UYqCL06+hesNsfMg6AAA +YCdV2KrXnUGdWgpMSmo9swAA +3TSC9ViOMUWuOEW/VpJVpwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +Z3aP6/bReUG/BiTD9Tel6QAA +xDzDwTIOc0CrvW83L5kNygAA +Dhui633kv0Cs2TIr6anG8wAA +5/pq026ljUSXXG9LFiSJ6QAA +2 + +False +4cv8mepYQESw1qV+1hogLAAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +rQ/5KauNLkeb7A+N18/ZsgAA +AmyHNf9XYkWoZVaiHltK9QAA +Q3r8d1VXUUCiw5jeBuPRBAAA +4CuRclNHSka0VlzQhJNPIgAA + + +4cv8mepYQESw1qV+1hogLAAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +38AJre7phEq8uaFiUBhWJAAA +ACkFzy2Ap0ekTd9POpd0yAAA +Yp09FNf+oU6WbgJ3oyb2TgAA +GPiKAl+kUUOMaKtvVoPG8QAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +fTfJa+yF+EWqKclyNZLkWQAA +P1yQkUBYGUiuEKYEWhglEQAA +kVVFAfrEM0OVQG3dDEzrBAAA +S3/s+zksLE+2TteXiSgC+gAA +2 + +False +dle0km/8mEy/njpP8YzaVgAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +4zV/mMXZeki4F4OORYJKqgAA +7BDESY6TMUSiCt8YhffRGwAA +i85LCAkm8UObs6Dbb7SXcQAA +6KJws/bR0kG6QHE3AdAQeAAA + + +dle0km/8mEy/njpP8YzaVgAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +aEQPXEaJV0er8Itg/qCxPgAA +KVRGSFyS00mRDojdelzFBgAA +bvpVPBwdx0u11NBBvQk7wgAA +MiXG1qhsiUeRYJptMcJQkQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +czrJDt7ZN0OLO96UOxknWwAA +gaRl0hEWgkCIBalaDt313AAA +ffTHJI14WEOPsSVHBZAxGAAA +qtCJ3djTpk2qq4PyUnahhgAA +2 + +False +bLyKzfToT0G3pHx4RMAW5wAA +dHVXjobujkKGloy7+Ox8DAAA +4 +KsNAAD4Lr0uKhL8mv0FA/gAA +IiMPfmMo8Ei+L+Qthava8gAA +elNO2l0whk+ACvfb6xpfgAAA +aMXoiUGT3kuTJcZCzOuaaQAA + + +bLyKzfToT0G3pHx4RMAW5wAA +al6ONjrnZ02miWcUt8E4UAAA +4 +6YgRzS7R8kySc95PMlWYmgAA +EDrCt1B2OEG9fFPIfbI4rwAA +mivDYBfKo0CA/Cgxh1MvdAAA +eFcfZIWulEa9jeD5P2DxVgAA + + + +analysis-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +5CbxRWAfz0OazD2BC6LOtgAA +Zt9DS7yc/kaN6Qper163XQAA +m98ZTsriLEiMT+5V1oPIMgAA +DBT1Z0iJuEep77ITNSgtaAAA +1 +b/CTfa0mFUyr1SeIhcoTFwAA +1 +LJwRpPfpFE+v3TCpYFoQmgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +HhCFPxH60EuycMQ2nfXWCQAA +4 +TC+FJGU+7U+XMAe9+osKVwAA +OKZ6FA3aWkmyc5tJxPl2xwAA +a5DpK6h4vUiaRFZby6lkRwAA +IVMQ+hvxhUmfRCtEQI3axwAA + + +yePcB6NdXUG1SBs2wQJA7gAA +u2JHX3nMn0CMyZLWTG2R1QAA +jic239+6CEiL3vfxIBKzZwAA +4 +EMzyT+wgi0SGPNxUTGhQAwAA +MEHedzzYGUKI3aU8wHa5zQAA +LUSg1SkB5Um4VPumlmoLUQAA +fWByKXIJ/UesLRVcVIFYjgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +u2JHX3nMn0CMyZLWTG2R1QAA +hWsqFBqliU2am4OA8VEXDgAA +4 +2StkfbIsv0+Ea31zqPRbPgAA +YwNcx3tMbkyEUBR20ozA5wAA +r6QhCqIxOk+4icWyLlvQbAAA +9fNSdobGT0qiuDpbuYC1mQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +6LFnNLjF4Eu3upg4H/I2PgAA +T3viGZHVdU2KCEMCtGcHywAA +0O24YQVuSUGBLdG6cr61BQAA +MkEs4VIPMEyuULHWFBfzBAAA +2 + +False +63BfEROBLEGGjWv9qa4YPgAA +d6r7rOW3akG5lkJDtATmigAA +4 +BG6uAAQJ3USU48cz1nG1AQAA +qoSb5uU2NUmYdmJrbZRo+wAA +k8caYibEm0qaWqQprAJv7QAA +L1b56qKED0K/OmtE7EMpAAAA + + +63BfEROBLEGGjWv9qa4YPgAA +al6ONjrnZ02miWcUt8E4UAAA +4 +GucH94UjaUuAs/9vQLKSgwAA +iInWxuDATke2XZEx8dB5rgAA +sAbeSljN6ku9YWHiJh2gAQAA +kPEGKDmfB0usxAwTkbzsEQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +6ywkVp/d8EqsgwjREOmd8wAA +/N0SyYdjD0ygX98Jcv8cbgAA +48K09Y/WJ0+YSQsYPdpMHQAA +nzyOD5QmRUizjQrpBcujeQAA +2 + +False +aM8L++tUe0CN4YEwoVH/cwAA +lCPHtP6cZ0W7Oq4UP4fxpAAA +4 +msoq4IUSvUOE3Re5LWjihgAA +AzsLD4INkkuYE+ga3BxkYAAA +VoZuvjQT6kycIZ3NEU+7CgAA +ra2CyZNXr0SxCsxEfDrydwAA + + +aM8L++tUe0CN4YEwoVH/cwAA +al6ONjrnZ02miWcUt8E4UAAA +4 +m3m2vxD9JkmtGEsZc/xJ6wAA +FrqY42jWGkmMMP8junaplgAA +wkOOpfK8jkGMOu0MGTO5MQAA +YlBJtxpA+0+wDN7Ulrf3aQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +QduQ4Ok2AkGuFmC3XIBgnQAA +juA4uUbJ1kCWLaXuVkETfwAA +FUgWHDyDyU+1bkEqG6bRmwAA +gVtrNy5QF0i/P7qC6xnEpgAA +2 + +False ++pKtO8/uIk+Z4sYfrACDGgAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +UQTu+Bo94kmBzf+mjZwZmwAA +wVIJgceIH0exOVKPaP1z6wAA +zZZMTPhd90WH5erQAYdfbgAA +kwiIvmxBBE6w7oKrN7hx8QAA + + ++pKtO8/uIk+Z4sYfrACDGgAA +HhCFPxH60EuycMQ2nfXWCQAA +4 +EDy+dKHUrU+pfpVMqA9DggAA +whwcvMT/5Ey6sH7pSG08CgAA +ffnMNN1sFEaHkgVnY6s0dgAA +LmRYO3VxHE6VFU6W7AhxTQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +2MyNnTzCX0CKIC1Al7qEswAA +p4VmZ8UtKU+WtJ6viCYxLQAA +YGd2QgnwHkC6rD8tQ0CXxAAA +eV4elLi8KUGC37VqeR7CwAAA +2 + +False +nmuSEcLCrEGvKBQ/lU47BwAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +fFlOZcqa+02Fn8I4gTDLZwAA +P41vIBK0Tkue4cv+G7GcAQAA +i0WSg+lbzEWux/SLQGsJTwAA +ci+FC6Q3YEmfkvFbLijaugAA + + +nmuSEcLCrEGvKBQ/lU47BwAA +U//hAdD8QU+M1p1r952pSAAA +4 +RNddAkpBB0GCLMC7EpbPbAAA +SztPCjNLmEOMd98qHlHotgAA ++cZPh9TPzk+f4BvHiPSBDQAA +eT1WGqzvgkCedfY6DwEnjAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +BBhjaKkxRUW65NVVP3xoPAAA +mrNXb/QVrkG6pMijaFWH1AAA +xVC7JLSvakCV/fOil1YTTgAA +cdH8abq6NkqwMOZTM1qowAAA +2 + +False +ByfvBxwbrkGP5+WxTb1ZvQAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +3VNBJgUT1ESbJj6oerBRBwAA +AEIM9ftCKkqu23ENSoylIwAA +cYJMKLARhkqBRBxgr/mmugAA +9Sc4ehY3F02Nnq/1ONnHqwAA + + +ByfvBxwbrkGP5+WxTb1ZvQAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +NEF5UFpEPEa8LewZkL+pzwAA +Y1wfv+TbeUiBIWyr3XF1oQAA +4dzksrgLRkmn2K4+PzVAAwAA +Q4VfY2mKEEagQ9Sien0oAQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +Er/IcQJ6aEWnC/jnbAerxwAA +vBSCcR0zEk6heJhRA9+/jgAA +R6sDVbUzmkCOpOqDtgb95QAA +7cSC8fDODkGhE34/Ivo2lgAA +2 + +False +plxmjyQkfUmt2P8uBP0I6AAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +ZW5MBHm/2E+1yLMrcVeXyAAA +NJoq9GUiXEaB6kF2/+oD7AAA +6FsSzIh78kuXWgeKyKOr7wAA +J+7OtBHv/UiHHToH+mQHIwAA + + +plxmjyQkfUmt2P8uBP0I6AAA +PjS4k33/kkePfB8R0Qh14AAA +4 +jGNkdF3HkkKq7jXTrUZsTAAA +Li1yPbg3ikmowJct/XLIJAAA +9gWvY2I19ECJ2JHZyICmaQAA +hthvjK6+IkGurSwM1sO5sgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +9M8k9jVEn0+imHxWtip8zAAA +hW2TBOZ2GkeqyvR1LcoA5wAA +hStsUWIkaUSh3dHCIQDsrwAA +CchPSgqG2UO0y0CWv+CReQAA +2 + +False +PG5XF/RdmEuhi42wm0MztgAA +H7tysEnUp0+p4o84YYVC8wAA +4 +8M//8OjKVUSqYJEdATpcKAAA +xwmxcJfgmEu8jqFLV02ESAAA +NlHV9qheKkGJKyriXEMrswAA +Ol3remHhKU2PUt/ZVbbpJAAA + + +PG5XF/RdmEuhi42wm0MztgAA +al6ONjrnZ02miWcUt8E4UAAA +4 +KBiF4UWhM02naU25CE6x7wAA +0PDjvprOukaGpNXF/LrDOwAA +iL4ldjmKCkaQddS8Us9lfAAA +GbSXYAXuPk2AA2X25+e75QAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +cQ1UjZFa+ESsldzOxc7x3QAA +AtxUfjiFEUydozX3zTxuhwAA +KsGqvKBGZUydfvlFOVBsEgAA +gkMsHVqkvUmf5sTBDQbbsAAA +2 + +False +iEqKHNrjWEaqo2MpcoTeAQAA +fKAlsL5x3U2cAiir26vsAQAA +4 +B5vrno8oG0WHRR8oSnvztAAA +NbPIuO0EIESPkD83Qt/7XgAA +bQXIiy3wuE2GktotZ3qRpwAA +mPVhNLie/0iyIDYp2Gz8qQAA + + +iEqKHNrjWEaqo2MpcoTeAQAA +al6ONjrnZ02miWcUt8E4UAAA +4 ++VnS4mxEAUq9GjK1ZFjNXQAA +yVZBSXDgcUKk6XXGrLlG9AAA +hWLHN4VgR0yLbOmpAcO7dAAA +1yjIF/Qtf0GkiyuhS3lHygAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 ++LqteTvUZE251X37ePI5ZAAA +HhvsYpgiZU60i3Xl73iPAgAA +LQbJiz7F40aHUaMTr1nEzwAA +0LhdsydzF0y5rwKnzrEH3gAA +2 + +False +vqzVjlQpAEeeuOH/0tJhSAAA +VwrgoiK6h0aUxHMgZDKYzgAA +4 +nwZrxb0/aEag3U0cftcxwgAA +ChThwtngvE+E3bcbm5+U0gAA +qKPU767g40WK0aKOE2zsmQAA +DfEPI33WlEmquhQKU5JasAAA + + +vqzVjlQpAEeeuOH/0tJhSAAA +al6ONjrnZ02miWcUt8E4UAAA +4 +Tco0ZKyigkO6i2JgbPbPIQAA +3tmwS2FY1EGofHOFKms2MgAA +53HyKe99JEqda3YnEmrceAAA +E0CDlfpJaEKd9B/hBrb5GAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +9XMJ/3cDAkGuEKCPVj/iLgAA +aNni7X6kCkOBY0PEh7ixuAAA +RSavgDXHsESBKomJM7XxEQAA +q1torB3CA0eIlcbHri8UwwAA +2 + +False +/EsTz8Iu7ECqGh594+MkSQAA +KbXj7bLsjku9BsYv/z63VgAA +4 +J8Ih4QVnQU6I8JCUJASGuAAA +cMDPJmJtrU6c0kZBz/ximAAA +E97u9+CrykCHzJci7EX1KQAA +4wjKRNNezUatUAECs4Om1AAA + + +/EsTz8Iu7ECqGh594+MkSQAA +al6ONjrnZ02miWcUt8E4UAAA +4 +B5R1mtT4dUOs/uV+LEdqJQAA +PMbDtRXQP022rtEQoHIsJAAA +89NTUxBLMEmo6yCmqgDLggAA +FCgtSBb5AUyBOqaQo4qF8wAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +SsN0wbB3DEGugos94Z/JYwAA +ekUUyiGzWUWPspF8MnvCswAA +PR4n1D+cl0e6xcc2Zdy7yQAA +j4JeUkGqLkirbgrhVMRK5gAA +2 + +WE9oOq/kF0adq9jjlgnt+QAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +xNaWyCZ2MESTbdkfExzSxAAA +xYc4/Jkqt0OCuBTuA6733AAA +bPF50ox5zE6HMrPNhutaOwAA +d1IlJObWTEGOk3bLwFcFWwAA + + +WE9oOq/kF0adq9jjlgnt+QAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +gkOedX9Cz06jnDCM9ARFyQAA +EO4KK2YeREWHhpdgBsQtYgAA +zdUjjhIrB0O0sZtN7FwV0QAA +kGh4Q/1e+0GaAxkswm+e4wAA + + + +category +yePcB6NdXUG1SBs2wQJA7gAA +4 +rBTgf3yyy0aS7AIMV4nbCQAA +RqFpqzo6aUWchYkICso+VgAA +kfLWWLVjAUCnHHoYoOY80gAA +pNHW3mFR1EuqKtBZ0lEYtQAA +2 + +False +l+7wPt1sHES9zLE77waRvAAA +tnTkvoZxVkmVjIgd8K6VcwAA +4 +Qtw8TQW17EyiHPP9duIpmgAA +hfcihhN1fEucjFfISu659wAA +rw3GNGbVAkmfSnZ0YJp4IgAA +544/CBy42Uald/FJpfiMLAAA + + +l+7wPt1sHES9zLE77waRvAAA +a7yZcyAyl02YNl0/FQziyQAA +4 +Ga3kGBw73kWCOVxx9Gc3nwAA +kRal9tDw8EeSrCb++k1TFwAA +NA2W+LpMOkmJqV2S9qUWRQAA +K8HheBKFdEmD9vNkhTY8AQAA + + + +classic-app-feature-design +yePcB6NdXUG1SBs2wQJA7gAA +8 +5o0i3tmiW0+wft5WJgf5swAA +bg+NK1sooUqJH1CpV8UXwAAA +xmpQPQJJdk2Ec8ulseJkagAA +Wg9ZznDfo06M9wmoPdl22QAA +01HabwybsEaAlwmb1OptXgAA +2+4IHs6fZkei6MLJQpxRbgAA +SHP5QIYVmUGk+aKxaEEI5QAA +wSIkDkt3JEOnveIWvMvNCgAA +2 +0IK4qX1pZ0mmy0tW1H9wYwAA +fj2tpTa4tk+iVJg+TnTWUwAA + + +design +yePcB6NdXUG1SBs2wQJA7gAA +4 +G8pGxp+7HUOghY85Kx80HQAA +aeHC4Yjoh0ucOGTxKyLb4gAA +atNQRsYI/0mjirZ+8TZzDwAA +7QV7Nl/UIEWUAuEvbQssJQAA +2 + +False +Fcx+CoxfEEarzL288+IirQAA +06qF2g1ff02RsBbBfLLo1gAA +4 +avUyx+z1eE2dyQcfhRb/FQAA +t1H4mK6dSEi22SACXk4y/QAA +1o8CdcWHrEOj+z2wlQOfHgAA +P2p+IwPuckCIxXAN+vu53QAA + + +Fcx+CoxfEEarzL288+IirQAA +tnTkvoZxVkmVjIgd8K6VcwAA +4 +T/SQSHCXrkaTeb3BFxL/2AAA +REy7OWWSmU2pymx4frsGYQAA +dyVmgja1vUWTzr/uWr1FKwAA +q2uSCcTV/EiZ09/S9Q4pDAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +K/N48hEc90isDNHluhXYGgAA +KYwFn2j5vEquoL1ESGlO2wAA +7flh+JkZmUKn3EqRfO+QpQAA +guHoA/ZQVkKDLUmxpDnphQAA +2 + +False +CcwrYONHfkWTOXKrfeQn0wAA +tnTkvoZxVkmVjIgd8K6VcwAA +4 +9CvdUbFDPUK8uydeWfgaogAA ++8SKxD5O7kSdbG3JZelAXAAA +tzPR94GDPUm22smF7UOd4AAA +GzFDAGVvP0mwhHa6Eh0vogAA + + +CcwrYONHfkWTOXKrfeQn0wAA +hi9GvwnwFkKy8F8f44i8mgAA +4 +pjfvTV+rVEG0U2S/tnmpAgAA +tbNgjQq2m0qlWalcRV5NBAAA +IbDFIc73vEGKrItGjul6sgAA +K7ZFSLnY9Um1ZqEWD30hJgAA + + + +end-of-proc +yePcB6NdXUG1SBs2wQJA7gAA +8 +E3qklen4DEiMkHMgk5C+JQAA ++grsi8aXYkOskmRWw+4JbQAA +O8P1m/Sat0OzXVaEJZStyAAA +B+lztxU5Dk+JfaJmkCY8hgAA +7yHMpOEN0EiC2uZBihzZkQAA +aaTGLHBaO0qCxv9DsJ2emwAA +is3BMmH6G0qHp9SnOXbFrgAA +AzVPqKGUmkycVwzbt3F/pAAA +4 +dn0Z1OGNQ0a5XNqkWwGbGQAA +e/jJUmPBsUuFL+zaG4xKZgAA +nveEivVzpUOmQHaQgBzwHgAA +3okeT8etnkmVfryHL+rOcQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +8 +vSDgm3TeekGlZwnl1HP0qQAA +UuSa6Jn+N0+CIZtXQIn1wwAA +ChZbXv/JqUiuzlF1YHAa0wAA +rUH0SgsgXkmIICcw5cm0cQAA +VtQ/BitCuEGKeKkUqNzdygAA +oVIweKrLf0WsLgvbubPwOAAA +XO/MdlBoPE2cxpYHwTFQRQAA +tXz6Gw8dw0OnFyN59BPnagAA +2 + +False +D/6a5FDvaU2giul+pputrgAA +hi9GvwnwFkKy8F8f44i8mgAA +8 +Nxo1uq8xpECF6vxcmPsbFAAA +Da0sgjocFUGwnJOSvCY2AwAA +fq/dHJxaQkGr3OLIoNFWLQAA +X/h+NkqLtkuIanPTvPxGBwAA +cyqa3qRfn06e6wJKn5IUtgAA +GtpB9hj7rUGuVbAd69VliAAA +7nTyRTsvqUOh9Q7S310qiAAA +Bn/qveELaUSDSRPENyFXtQAA + + +D/6a5FDvaU2giul+pputrgAA +2LU3javC70yzEUTHd0L+VAAA +8 +JUivG0vsokWf0vlAAlyUEQAA +ZLfFS2SWZUWHVGawr0+0BAAA +0C+g3w4rhUyU7EJ7+EW+GwAA +tJRgIY9UPEy3iQM1Por1agAA +BovzmAL4U0SxsJj6w3As5QAA +7WwZN4h56kCEBDeESGRrOgAA +wk2NSn8RMkyo/K+wslJ4rAAA +Nk3QEyhBLkSD+lcXBWAvPAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +GtvxPyG8TE+iL/5hGOXsiwAA +BhUfe/tLakq87Pz84FKHJAAA +kcfFmnmlpE+OJF4nbnQIXgAA +7D0owjECbEGH1PeS7URueQAA +2 + +False +YHQtCOYCXU6JlB3IIm7OuQAA +a7yZcyAyl02YNl0/FQziyQAA +4 +68OMF0Yq4UeC8WOgCACF6gAA +6HR180RrWUu7KmqtQtfgSQAA +2Zm4OGI8TE2SLS93SIfd4QAA +QnEeEzHjKEG+xlPNKURJuQAA + + +YHQtCOYCXU6JlB3IIm7OuQAA +2LU3javC70yzEUTHd0L+VAAA +4 +4qJLBp2kokWxpO9Di7YOPgAA +VSIsPEctxkye85otBGzNlwAA +/ueUQo0Vk0GoAM+RDMeoQQAA +sCFp9JtJZE2HAdSOQk2ZEAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +8 +j3aSLqd5SEa5ECOCR/ep0wAA +95FdYrfr4EKlcvEbVN/+iAAA +NI1A1Mr0FEO5JDfRKlpIIgAA +stM3MzH2m0WqCLM6RV2A1AAA +7q+EIWAF6U2OD8EFGBLi9wAA +a6rllJp08UyNoILYO0ZDGAAA +hD1fqlWcMkqNR6XkXsPjxQAA +s4x5AMnuZkKtX1v3sNhviAAA +2 + +False +dOqivJTIIUigVVTdSjV6NQAA +mx6wTw6+KEuGtAr0iRUXJwAA +8 +aIk1FLU7xUujLgOzJuxyegAA +xsUp5xXaYUWmopn1ec8lQAAA +5QolDJ1+Nk2X9gtaLP95XwAA +JKtSAwXDLUi7VfWtN02AowAA +qrvUz8jqHE+P25Oemkxg8wAA +ve0GFgxs1Uim80BKzlf9twAA +DKxketRXtkSQFr75Q4Z4GQAA +8jhErecvD0OxjDb3sCDoIgAA + + +dOqivJTIIUigVVTdSjV6NQAA +06qF2g1ff02RsBbBfLLo1gAA +8 +IGTIPt4gvkCsiV1hazMeOQAA +piV76KL9i0GMCE3XnUA4cAAA +sUG4Z0dUp0qEP27TiylFbQAA +eERixS6x7E6JZhK21xo2SAAA +Yj3QEHtzQECnhXJ5tpcaXgAA +il8rhSJNa0ilvvEw0QPDaQAA +BlLvd/e2kECt1LVo/KlkKwAA +mMzSrrz0d0WRzJdhssK0GAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +AHgAz59sakycT1uGC/0bfwAA +odaUjQ23cEiputvcMBH4AQAA +fvduAOJN70+xe9+pglMJ9wAA ++1YcNllAmk6OB4X0037I9gAA +2 + +False +R5itKCcXY0KrRhRkbaji9QAA +06qF2g1ff02RsBbBfLLo1gAA +4 +jKZOYFpKDUeO6/tqwC6CcQAA +Cs456ZFZYke1J0SLFErp1wAA +7XwWma90TkmQzHEWZQqbdwAA +CqOBqA+JoU64NEGEN0fnlAAA + + +R5itKCcXY0KrRhRkbaji9QAA +h9lhv0QFq0aFwcWza3gsDAAA +4 +M0em+z0uiUact4Er3oUlOgAA +qWKZlZcTOEqt5EEXdp47CgAA +1JiqckmNXEu/JcX8iqNdJQAA +s+TUNMEkxU6hpOHfr+xi3QAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +WdsaDYIpME64TRUARPIYrQAA +mSYvghXBSkOhJN/xEfnV6AAA +QXyXsP+QRECfQcb39mIDxAAA +wFfHFGnoYkW1fv8AI/OGKgAA +2 + +False +wGKQiVXBLE+NlgisexkoeQAA +EjjnPhUmf02yFIvhJmdcmQAA +4 ++NoLioROWEeiPARKLDCN+wAA +MgAK1ZprykWyZ45LfEngngAA +7AmLpGOIG0q2LpsIwbAZyAAA ++D5SS2J5lUe0MSP5r7QCiwAA + + +wGKQiVXBLE+NlgisexkoeQAA +2LU3javC70yzEUTHd0L+VAAA +4 +f7cmTBFk2k6O75ckd9RThQAA +h8bY73mMGkq2+mPLeSOO4wAA +tI3cxhqUJkiKlMV+h2NW5QAA +/8MdOGkuSEWSuGAgqmCzGgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +T3KM5U5FfUW8PxhJPPuyigAA +tWc4YW7wtUGAp5aruL/I7QAA +m2kf1oaXGkWbvTjm5TdDaAAA +Xtd1Qzb5YU2uJZme3z6wGAAA +2 + +False ++UTsgf65KEqv4PlEE9eDUwAA +a7yZcyAyl02YNl0/FQziyQAA +4 +joymL8ZZbUqjMF0s780rMwAA +/F1gzg1W0kKrNTDaQmWTYQAA +VTqukkqeVUylcOpnpkEHQgAA +LpNQOYpfjEG0ooVcjm64HQAA + + ++UTsgf65KEqv4PlEE9eDUwAA +2LU3javC70yzEUTHd0L+VAAA +4 +eBaXXjEElkukIyXiy/0ZKgAA +yGuyBWc/aE6ay96LpDGPOwAA +w3KO/MdFwkOk9qFrN50QxwAA +rcCpKYnITkSa9mAoJwIt+QAA + + + + +Implementation Model +UMLStandard +implementationModel +IhiugfF1eE6vc8zKnVf8gAAA +1 + +ImplModel +PAdOgcwcsk+/d7YIjUX11gAA + +GQq3RWC/e0+WAmX5RQoy6wAA + + + + +Deployment Model +UMLStandard +deploymentModel +IhiugfF1eE6vc8zKnVf8gAAA +1 + +deployModel +7qxGQutBXU2dAghX9gmsOwAA + +djhlF/CGLkaIX1y/ia3ghQAA + + + + + + diff --git a/devspec.en_US/dev-step-diagrams/devspec.uml b/devspec.en_US/dev-step-diagrams/devspec.uml new file mode 100755 index 0000000..72c4a52 --- /dev/null +++ b/devspec.en_US/dev-step-diagrams/devspec.uml @@ -0,0 +1,33049 @@ + + + + + + +UMLStandard + + + + +devspec +4 + +Use Case Model +UMLStandard +useCaseModel +IhiugfF1eE6vc8zKnVf8gAAA +3 + +dev-actor +tacoxPrx8kCKprVgJHnvqgAA + +onlEfskXsk6Q+UgmrTExSAAA +57 + +clMaroon +216 +68 +485 +389 +IgjANDHFx02GXu/pd9UODQAA + + +dev-step + + +False + + +False + + + + +clMaroon +$00B9FFFF +205,328;400,266 +Haa/HtHu8EumDcJn1va7CgAA +OJNZyLkPgkW5YFYA5x/ChQAA +8ZQdZB1z0kaDUzkVHOzvRgAA + +False +1.5707963267949 +15 +Haa/HtHu8EumDcJn1va7CgAA + + +False +1.5707963267949 +30 +Haa/HtHu8EumDcJn1va7CgAA + + +False +-1.5707963267949 +15 +Haa/HtHu8EumDcJn1va7CgAA + + +False +-0.523598775598299 +30 +epHead +m5jTftKx4ku74ElHxxMotAAA + + +False +0.523598775598299 +30 +epTail +TeOn6G5DU0iPhLs634h/BwAA + + +False +0.523598775598299 +25 +epHead +m5jTftKx4ku74ElHxxMotAAA + + +False +-0.523598775598299 +25 +epTail +TeOn6G5DU0iPhLs634h/BwAA + + +False +-0.785398163397448 +40 +epHead +m5jTftKx4ku74ElHxxMotAAA + + +False +0.785398163397448 +40 +epTail +TeOn6G5DU0iPhLs634h/BwAA + + +False +-1000 +-1000 +50 +8 +m5jTftKx4ku74ElHxxMotAAA + + +False +-1000 +-1000 +50 +8 +TeOn6G5DU0iPhLs634h/BwAA + + + +clMaroon +$00B9FFFF +8 +192 +77 +78 +FkRCE52YAkaM/9oO8q9QFQAA + + +1 +author + + +False + + +False + + + +False +FkRCE52YAkaM/9oO8q9QFQAA + + +False +FkRCE52YAkaM/9oO8q9QFQAA + + + +clMaroon +$00B9FFFF +124 +192 +76 +78 +MLBX+NGx9kymQ76b9EAKuwAA + + +1 +tech-leader + + +False + + +False + + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + + +clMaroon +$00B9FFFF +108 +92 +101 +78 +A/9YWnHJBEGH1jC8FI2M9gAA + + +1 +maintainer + + +False + + +False + + + +False +A/9YWnHJBEGH1jC8FI2M9gAA + + +False +A/9YWnHJBEGH1jC8FI2M9gAA + + + +clMaroon +$00B9FFFF +116 +304 +90 +78 +oWDHE/AIyEqhL2zTdizC4AAA + + +1 +developer + + +False + + +False + + + +False +oWDHE/AIyEqhL2zTdizC4AAA + + +False +oWDHE/AIyEqhL2zTdizC4AAA + + + +clMaroon +$00B9FFFF +760 +376 +86 +78 +78O5f65/80OvpHK3AuBEIQAA + + +1 +tester + + +False + + +False + + + +False +78O5f65/80OvpHK3AuBEIQAA + + +False +78O5f65/80OvpHK3AuBEIQAA + + + +clMaroon +$00B9FFFF +764 +276 +77 +78 +u2JHX3nMn0CMyZLWTG2R1QAA + + +1 +user + + +False + + +False + + + +False +u2JHX3nMn0CMyZLWTG2R1QAA + + +False +u2JHX3nMn0CMyZLWTG2R1QAA + + + +clMaroon +$00B9FFFF +760 +192 +86 +78 +aaiB2ZAB7kOSB9niWMGCrAAA + + +1 +translator + + +False + + +False + + + +False +aaiB2ZAB7kOSB9niWMGCrAAA + + +False +aaiB2ZAB7kOSB9niWMGCrAAA + + + +clMaroon +$00B9FFFF +756 +108 +91 +78 +Pu4+pL+iiU6lRzDtfLIgJwAA + + +1 +documentor + + +False + + +False + + + +False +Pu4+pL+iiU6lRzDtfLIgJwAA + + +False +Pu4+pL+iiU6lRzDtfLIgJwAA + + + +clMaroon +$00B9FFFF +556 +292 +121 +45 +ymnyuU2meUmuFQCl8KW3EwAA + + +1 +bug-report + + +False + + +False + + + +False +ymnyuU2meUmuFQCl8KW3EwAA + + +False +ymnyuU2meUmuFQCl8KW3EwAA + + +False +ymnyuU2meUmuFQCl8KW3EwAA + + + +clMaroon +$00B9FFFF +412 +292 +101 +45 +5JcsdOcl2kmUJ1xczZEQMQAA + + +1 +test-task + + +False + + +False + + + +False +5JcsdOcl2kmUJ1xczZEQMQAA + + +False +5JcsdOcl2kmUJ1xczZEQMQAA + + +False +5JcsdOcl2kmUJ1xczZEQMQAA + + + +clMaroon +$00B9FFFF +392 +148 +142 +45 ++JrMCo45qEOWtcTsDjqTTgAA + + +1 +check-if-publish + + +False + + +False + + + +False ++JrMCo45qEOWtcTsDjqTTgAA + + +False ++JrMCo45qEOWtcTsDjqTTgAA + + +False ++JrMCo45qEOWtcTsDjqTTgAA + + + +clMaroon +$00B9FFFF +396 +392 +127 +45 +wFR71rqQ/kavPS+ztzufLgAA + + +1 +bug-fix + + +False + + +False + + + +False +wFR71rqQ/kavPS+ztzufLgAA + + +False +wFR71rqQ/kavPS+ztzufLgAA + + +False +wFR71rqQ/kavPS+ztzufLgAA + + + +clMaroon +$00B9FFFF +244 +264 +121 +45 +8v8IRJdlJUmbHIylKGey5wAA + + +1 +feature-list + + +False + + +False + + + +False +8v8IRJdlJUmbHIylKGey5wAA + + +False +8v8IRJdlJUmbHIylKGey5wAA + + +False +8v8IRJdlJUmbHIylKGey5wAA + + + +clMaroon +$00B9FFFF +252 +392 +108 +45 +fIx21ILIBUuXaoqKHt5Z2AAA + + +1 +develop + + +False + + +False + + + +False +fIx21ILIBUuXaoqKHt5Z2AAA + + +False +fIx21ILIBUuXaoqKHt5Z2AAA + + +False +fIx21ILIBUuXaoqKHt5Z2AAA + + + +clMaroon +$00B9FFFF +556 +392 +121 +45 +UtnSzF7bC0iukjII33XrugAA + + +1 +bug-retest + + +False + + +False + + + +False +UtnSzF7bC0iukjII33XrugAA + + +False +UtnSzF7bC0iukjII33XrugAA + + +False +UtnSzF7bC0iukjII33XrugAA + + + +clMaroon +$00B9FFFF +304,308;305,332 +Zk/ihiJuFkm1nc08/lO3JAAA +0NZb34oq+0iz6/8DYcniywAA +1XmGBT1/RUKVRwCIItHBqQAA + +False +1.5707963267949 +15 +Zk/ihiJuFkm1nc08/lO3JAAA + + +False +1.5707963267949 +30 +Zk/ihiJuFkm1nc08/lO3JAAA + + +False +-1.5707963267949 +15 +Zk/ihiJuFkm1nc08/lO3JAAA + + +False +-0.523598775598299 +30 +epHead +cqCsUEAeA0in0Z2LWweznwAA + + +False +0.523598775598299 +30 +epTail +DWmCv3GYyE+A4/wxNfV/TgAA + + +False +0.523598775598299 +25 +epHead +cqCsUEAeA0in0Z2LWweznwAA + + +False +-0.523598775598299 +25 +epTail +DWmCv3GYyE+A4/wxNfV/TgAA + + +False +-0.785398163397448 +40 +epHead +cqCsUEAeA0in0Z2LWweznwAA + + +False +0.785398163397448 +40 +epTail +DWmCv3GYyE+A4/wxNfV/TgAA + + +False +-1060 +-976 +50 +8 +cqCsUEAeA0in0Z2LWweznwAA + + +False +-1060 +-976 +50 +8 +DWmCv3GYyE+A4/wxNfV/TgAA + + + +clMaroon +$00B9FFFF +340,392;428,336 +ZYww4bhgbUujMdsXvrsGRwAA +BoXflTl2zkiHVb9rTj8+gQAA +gzOBaPhYH0Sqi38GA9ka4gAA + +False +1.5707963267949 +15 +ZYww4bhgbUujMdsXvrsGRwAA + + +False +1.5707963267949 +30 +ZYww4bhgbUujMdsXvrsGRwAA + + +False +-1.5707963267949 +15 +ZYww4bhgbUujMdsXvrsGRwAA + + +False +-0.523598775598299 +30 +epHead +PKDNpsNf/kGUvFpvwAiMgwAA + + +False +0.523598775598299 +30 +epTail +9vaywntHRUS9MFakEmMvSgAA + + +False +0.523598775598299 +25 +epHead +PKDNpsNf/kGUvFpvwAiMgwAA + + +False +-0.523598775598299 +25 +epTail +9vaywntHRUS9MFakEmMvSgAA + + +False +-0.785398163397448 +40 +epHead +PKDNpsNf/kGUvFpvwAiMgwAA + + +False +0.785398163397448 +40 +epTail +9vaywntHRUS9MFakEmMvSgAA + + +False +-1060 +-976 +50 +8 +PKDNpsNf/kGUvFpvwAiMgwAA + + +False +-1060 +-976 +50 +8 +9vaywntHRUS9MFakEmMvSgAA + + + +clMaroon +$00B9FFFF +556,414;522,414 +u+LRK0aPeU+CvKL8BjN4+AAA +vIM1yyr2zUeK8LOSwJnagwAA +t5UaBajz3kuwVYgFf4H/6gAA + +False +1.5707963267949 +15 +u+LRK0aPeU+CvKL8BjN4+AAA + + +False +1.5707963267949 +30 +u+LRK0aPeU+CvKL8BjN4+AAA + + +False +-1.5707963267949 +15 +u+LRK0aPeU+CvKL8BjN4+AAA + + +False +-0.523598775598299 +30 +epHead +xQhxxFEtpECHagEXOLUIWQAA + + +False +0.523598775598299 +30 +epTail +Ni4/biH/lE2VxdPr2OKnEwAA + + +False +0.523598775598299 +25 +epHead +xQhxxFEtpECHagEXOLUIWQAA + + +False +-0.523598775598299 +25 +epTail +Ni4/biH/lE2VxdPr2OKnEwAA + + +False +-0.785398163397448 +40 +epHead +xQhxxFEtpECHagEXOLUIWQAA + + +False +0.785398163397448 +40 +epTail +Ni4/biH/lE2VxdPr2OKnEwAA + + +False +-1060 +-976 +50 +8 +xQhxxFEtpECHagEXOLUIWQAA + + +False +-1060 +-976 +50 +8 +Ni4/biH/lE2VxdPr2OKnEwAA + + + +clMaroon +$00B9FFFF +616,336;616,392 +Q5rq4hug80amVs0OquyiyAAA +t5UaBajz3kuwVYgFf4H/6gAA +lwnbG+r6OEegyTwNJ3FUnQAA + +False +1.5707963267949 +15 +Q5rq4hug80amVs0OquyiyAAA + + +False +1.5707963267949 +30 +Q5rq4hug80amVs0OquyiyAAA + + +False +-1.5707963267949 +15 +Q5rq4hug80amVs0OquyiyAAA + + +False +-0.523598775598299 +30 +epHead +wki5AWxXakSVFXSFIAWF6wAA + + +False +0.523598775598299 +30 +epTail +8x8LgMHMS0+ZEvqndI0NEgAA + + +False +0.523598775598299 +25 +epHead +wki5AWxXakSVFXSFIAWF6wAA + + +False +-0.523598775598299 +25 +epTail +8x8LgMHMS0+ZEvqndI0NEgAA + + +False +-0.785398163397448 +40 +epHead +wki5AWxXakSVFXSFIAWF6wAA + + +False +0.785398163397448 +40 +epTail +8x8LgMHMS0+ZEvqndI0NEgAA + + +False +-1060 +-976 +50 +8 +wki5AWxXakSVFXSFIAWF6wAA + + +False +-1060 +-976 +50 +8 +8x8LgMHMS0+ZEvqndI0NEgAA + + + +clMaroon +$00B9FFFF +396,414;359,414 +Lslcq+/wp0+7suaGPGIyVAAA +gzOBaPhYH0Sqi38GA9ka4gAA +vIM1yyr2zUeK8LOSwJnagwAA + +False +1.5707963267949 +15 +Lslcq+/wp0+7suaGPGIyVAAA + + +False +1.5707963267949 +30 +Lslcq+/wp0+7suaGPGIyVAAA + + +False +-1.5707963267949 +15 +Lslcq+/wp0+7suaGPGIyVAAA + + +False +-0.523598775598299 +30 +epHead +9H2x6+kFc0eo6Z2KrSpZMgAA + + +False +0.523598775598299 +30 +epTail +UFqxiSQgyUeoy0qNucDjhwAA + + +False +0.523598775598299 +25 +epHead +9H2x6+kFc0eo6Z2KrSpZMgAA + + +False +-0.523598775598299 +25 +epTail +UFqxiSQgyUeoy0qNucDjhwAA + + +False +-0.785398163397448 +40 +epHead +9H2x6+kFc0eo6Z2KrSpZMgAA + + +False +0.785398163397448 +40 +epTail +UFqxiSQgyUeoy0qNucDjhwAA + + +False +-1060 +-976 +50 +8 +9H2x6+kFc0eo6Z2KrSpZMgAA + + +False +-1060 +-976 +50 +8 +UFqxiSQgyUeoy0qNucDjhwAA + + + +clMaroon +$00B9FFFF +205,364;261,392 +QAFwbnInOU6vOm8b8SgmzAAA +gzOBaPhYH0Sqi38GA9ka4gAA +8ZQdZB1z0kaDUzkVHOzvRgAA + +False +1.5707963267949 +15 +QAFwbnInOU6vOm8b8SgmzAAA + + +False +1.5707963267949 +30 +QAFwbnInOU6vOm8b8SgmzAAA + + +False +-1.5707963267949 +15 +QAFwbnInOU6vOm8b8SgmzAAA + + +False +-0.523598775598299 +30 +epHead +M0pjGsRCsEy2IjYa560UuwAA + + +False +0.523598775598299 +30 +epTail +89CSjktmDk6aTYzK0WeqxgAA + + +False +0.523598775598299 +25 +epHead +M0pjGsRCsEy2IjYa560UuwAA + + +False +-0.523598775598299 +25 +epTail +89CSjktmDk6aTYzK0WeqxgAA + + +False +-0.785398163397448 +40 +epHead +M0pjGsRCsEy2IjYa560UuwAA + + +False +0.785398163397448 +40 +epTail +89CSjktmDk6aTYzK0WeqxgAA + + +False +-1060 +-976 +50 +8 +M0pjGsRCsEy2IjYa560UuwAA + + +False +-1060 +-976 +50 +8 +89CSjktmDk6aTYzK0WeqxgAA + + + +clMaroon +$00B9FFFF +208,137;392,161 +otl6N6twSUqOS1ckH+zvkAAA +Vdh7zL8QZ0OtD+C+OlvxpgAA +qYv8SJgqPUajzKDRtANOvwAA + +False +1.5707963267949 +15 +otl6N6twSUqOS1ckH+zvkAAA + + +False +1.5707963267949 +30 +otl6N6twSUqOS1ckH+zvkAAA + + +False +-1.5707963267949 +15 +otl6N6twSUqOS1ckH+zvkAAA + + +False +-0.523598775598299 +30 +epHead +m5bOddD2ykOYQJ+JqC5GQwAA + + +False +0.523598775598299 +30 +epTail +hIwTub9FSkK/mA+8tg3vAQAA + + +False +0.523598775598299 +25 +epHead +m5bOddD2ykOYQJ+JqC5GQwAA + + +False +-0.523598775598299 +25 +epTail +hIwTub9FSkK/mA+8tg3vAQAA + + +False +-0.785398163397448 +40 +epHead +m5bOddD2ykOYQJ+JqC5GQwAA + + +False +0.785398163397448 +40 +epTail +hIwTub9FSkK/mA+8tg3vAQAA + + +False +-1060 +-976 +50 +8 +m5bOddD2ykOYQJ+JqC5GQwAA + + +False +-1060 +-976 +50 +8 +hIwTub9FSkK/mA+8tg3vAQAA + + + +clMaroon +$00B9FFFF +84,196;114,169 +/wV294vExESRsoCAG0SOGwAA +qYv8SJgqPUajzKDRtANOvwAA +nLppBSuFyk6GHv3rvWfvuwAA + +False +1.5707963267949 +15 +/wV294vExESRsoCAG0SOGwAA + + +False +1.5707963267949 +30 +/wV294vExESRsoCAG0SOGwAA + + +False +-1.5707963267949 +15 +/wV294vExESRsoCAG0SOGwAA + + +False +-0.523598775598299 +30 +epHead +kW2xBvd5ck+7hi+wjeIDWwAA + + +False +0.523598775598299 +30 +epTail +6Neco6zcl0uObHufbrc7/wAA + + +False +0.523598775598299 +25 +epHead +kW2xBvd5ck+7hi+wjeIDWwAA + + +False +-0.523598775598299 +25 +epTail +6Neco6zcl0uObHufbrc7/wAA + + +False +-0.785398163397448 +40 +epHead +kW2xBvd5ck+7hi+wjeIDWwAA + + +False +0.785398163397448 +40 +epTail +6Neco6zcl0uObHufbrc7/wAA + + +False +-1060 +-976 +50 +8 +kW2xBvd5ck+7hi+wjeIDWwAA + + +False +-1060 +-976 +50 +8 +6Neco6zcl0uObHufbrc7/wAA + + + +clMaroon +$00B9FFFF +84,230;124,230 +As4jKIWMwk6c065+KZeGGQAA +LqRrN84lGEeTv5o2IgfsSwAA +nLppBSuFyk6GHv3rvWfvuwAA + +False +1.5707963267949 +15 +As4jKIWMwk6c065+KZeGGQAA + + +False +1.5707963267949 +30 +As4jKIWMwk6c065+KZeGGQAA + + +False +-1.5707963267949 +15 +As4jKIWMwk6c065+KZeGGQAA + + +False +-0.523598775598299 +30 +epHead ++Lil4MWKjUOC2XYl8SjTegAA + + +False +0.523598775598299 +30 +epTail +RHQsOilQckSyjRNZMJggpgAA + + +False +0.523598775598299 +25 +epHead ++Lil4MWKjUOC2XYl8SjTegAA + + +False +-0.523598775598299 +25 +epTail +RHQsOilQckSyjRNZMJggpgAA + + +False +-0.785398163397448 +40 +epHead ++Lil4MWKjUOC2XYl8SjTegAA + + +False +0.785398163397448 +40 +epTail +RHQsOilQckSyjRNZMJggpgAA + + +False +-1060 +-976 +50 +8 ++Lil4MWKjUOC2XYl8SjTegAA + + +False +-1060 +-976 +50 +8 +RHQsOilQckSyjRNZMJggpgAA + + + +clMaroon +$00B9FFFF +84,267;121,304 +qSMM7YEtUUmnkrz3femcAQAA +8ZQdZB1z0kaDUzkVHOzvRgAA +nLppBSuFyk6GHv3rvWfvuwAA + +False +1.5707963267949 +15 +qSMM7YEtUUmnkrz3femcAQAA + + +False +1.5707963267949 +30 +qSMM7YEtUUmnkrz3femcAQAA + + +False +-1.5707963267949 +15 +qSMM7YEtUUmnkrz3femcAQAA + + +False +-0.523598775598299 +30 +epHead +gzYTAF1gIkizg/Vue/2ZQwAA + + +False +0.523598775598299 +30 +epTail +hNisF5EBTE2ATvCijhzvOQAA + + +False +0.523598775598299 +25 +epHead +gzYTAF1gIkizg/Vue/2ZQwAA + + +False +-0.523598775598299 +25 +epTail +hNisF5EBTE2ATvCijhzvOQAA + + +False +-0.785398163397448 +40 +epHead +gzYTAF1gIkizg/Vue/2ZQwAA + + +False +0.785398163397448 +40 +epTail +hNisF5EBTE2ATvCijhzvOQAA + + +False +-1060 +-976 +50 +8 +gzYTAF1gIkizg/Vue/2ZQwAA + + +False +-1060 +-976 +50 +8 +hNisF5EBTE2ATvCijhzvOQAA + + + +clMaroon +$00B9FFFF +760,414;676,414 +QOEK3K2D6E6pqfTn0mjGSQAA +t5UaBajz3kuwVYgFf4H/6gAA +55htDUboMkKutvJNMs10VwAA + +False +1.5707963267949 +15 +QOEK3K2D6E6pqfTn0mjGSQAA + + +False +1.5707963267949 +30 +QOEK3K2D6E6pqfTn0mjGSQAA + + +False +-1.5707963267949 +15 +QOEK3K2D6E6pqfTn0mjGSQAA + + +False +-0.523598775598299 +30 +epHead +8lZk7+ScDkGsGw40b2zWuQAA + + +False +0.523598775598299 +30 +epTail +06vNfm1gx0OR0K9NmGmXEQAA + + +False +0.523598775598299 +25 +epHead +8lZk7+ScDkGsGw40b2zWuQAA + + +False +-0.523598775598299 +25 +epTail +06vNfm1gx0OR0K9NmGmXEQAA + + +False +-0.785398163397448 +40 +epHead +8lZk7+ScDkGsGw40b2zWuQAA + + +False +0.785398163397448 +40 +epTail +06vNfm1gx0OR0K9NmGmXEQAA + + +False +-1048 +-1000 +50 +8 +8lZk7+ScDkGsGw40b2zWuQAA + + +False +-1048 +-1000 +50 +8 +06vNfm1gx0OR0K9NmGmXEQAA + + + +clMaroon +$00B9FFFF +764,314;676,314 +BunHMt9UUEaob51EuVirsAAA +lwnbG+r6OEegyTwNJ3FUnQAA +jBby7rVxVkO+HkQ21KY54wAA + +False +1.5707963267949 +15 +BunHMt9UUEaob51EuVirsAAA + + +False +1.5707963267949 +30 +BunHMt9UUEaob51EuVirsAAA + + +False +-1.5707963267949 +15 +BunHMt9UUEaob51EuVirsAAA + + +False +-0.523598775598299 +30 +epHead +WX2MlGTb6EOX2luk/so3YwAA + + +False +0.523598775598299 +30 +epTail +h8kotrimC0Cpk4nuHRgyzAAA + + +False +0.523598775598299 +25 +epHead +WX2MlGTb6EOX2luk/so3YwAA + + +False +-0.523598775598299 +25 +epTail +h8kotrimC0Cpk4nuHRgyzAAA + + +False +-0.785398163397448 +40 +epHead +WX2MlGTb6EOX2luk/so3YwAA + + +False +0.785398163397448 +40 +epTail +h8kotrimC0Cpk4nuHRgyzAAA + + +False +-1048 +-1000 +50 +8 +WX2MlGTb6EOX2luk/so3YwAA + + +False +-1048 +-1000 +50 +8 +h8kotrimC0Cpk4nuHRgyzAAA + + + +clMaroon +$00B9FFFF +462,292;463,268 +GkzxRdxRNkmn62ufJTw13wAA +OJNZyLkPgkW5YFYA5x/ChQAA +BoXflTl2zkiHVb9rTj8+gQAA + +False +1.5707963267949 +15 +GkzxRdxRNkmn62ufJTw13wAA + + +False +1.5707963267949 +30 +GkzxRdxRNkmn62ufJTw13wAA + + +False +-1.5707963267949 +15 +GkzxRdxRNkmn62ufJTw13wAA + + +False +-0.523598775598299 +30 +epHead +UjrU3zr4ikWZcD67/VJ22wAA + + +False +0.523598775598299 +30 +epTail +LLG2+9u6KkebumqGep6bfAAA + + +False +0.523598775598299 +25 +epHead +UjrU3zr4ikWZcD67/VJ22wAA + + +False +-0.523598775598299 +25 +epTail +LLG2+9u6KkebumqGep6bfAAA + + +False +-0.785398163397448 +40 +epHead +UjrU3zr4ikWZcD67/VJ22wAA + + +False +0.785398163397448 +40 +epTail +LLG2+9u6KkebumqGep6bfAAA + + +False +-1000 +-1000 +50 +8 +UjrU3zr4ikWZcD67/VJ22wAA + + +False +-1000 +-1000 +50 +8 +LLG2+9u6KkebumqGep6bfAAA + + + +clMaroon +$00B9FFFF +248 +88 +121 +45 +FPjdKo5EqkuvbojCyT40wAAA + + +1 +pkg-publish + + +False + + +False + + + +False +FPjdKo5EqkuvbojCyT40wAAA + + +False +FPjdKo5EqkuvbojCyT40wAAA + + +False +FPjdKo5EqkuvbojCyT40wAAA + + + +clMaroon +$00B9FFFF +208,123;248,118 +atCUWqlo80uXI6LZ5VXAqwAA +7R3Vtrr63kqhX5GzE7CY4gAA +qYv8SJgqPUajzKDRtANOvwAA + +False +1.5707963267949 +15 +atCUWqlo80uXI6LZ5VXAqwAA + + +False +1.5707963267949 +30 +atCUWqlo80uXI6LZ5VXAqwAA + + +False +-1.5707963267949 +15 +atCUWqlo80uXI6LZ5VXAqwAA + + +False +-0.523598775598299 +30 +epHead +ZCmKuqp4sE2/fLQrj5OH6AAA + + +False +0.523598775598299 +30 +epTail +1rd1mOGAkk26xSFOjW6oBQAA + + +False +0.523598775598299 +25 +epHead +ZCmKuqp4sE2/fLQrj5OH6AAA + + +False +-0.523598775598299 +25 +epTail +1rd1mOGAkk26xSFOjW6oBQAA + + +False +-0.785398163397448 +40 +epHead +ZCmKuqp4sE2/fLQrj5OH6AAA + + +False +0.785398163397448 +40 +epTail +1rd1mOGAkk26xSFOjW6oBQAA + + +False +-1000 +-1000 +50 +8 +ZCmKuqp4sE2/fLQrj5OH6AAA + + +False +-1000 +-1000 +50 +8 +1rd1mOGAkk26xSFOjW6oBQAA + + + +clMaroon +$00B9FFFF +463,224;462,192 +VSr15ngAt0ucp/JSndd7fAAA +Vdh7zL8QZ0OtD+C+OlvxpgAA +OJNZyLkPgkW5YFYA5x/ChQAA + +False +1.5707963267949 +15 +VSr15ngAt0ucp/JSndd7fAAA + + +False +1.5707963267949 +30 +VSr15ngAt0ucp/JSndd7fAAA + + +False +-1.5707963267949 +15 +VSr15ngAt0ucp/JSndd7fAAA + + +False +-0.523598775598299 +30 +epHead +P1DmfF8A8U+xRvMvkio6ggAA + + +False +0.523598775598299 +30 +epTail +/91dQ7rhgUSI28jqjPHooQAA + + +False +0.523598775598299 +25 +epHead +P1DmfF8A8U+xRvMvkio6ggAA + + +False +-0.523598775598299 +25 +epTail +/91dQ7rhgUSI28jqjPHooQAA + + +False +-0.785398163397448 +40 +epHead +P1DmfF8A8U+xRvMvkio6ggAA + + +False +0.785398163397448 +40 +epTail +/91dQ7rhgUSI28jqjPHooQAA + + +False +-1000 +-1000 +50 +8 +P1DmfF8A8U+xRvMvkio6ggAA + + +False +-1000 +-1000 +50 +8 +/91dQ7rhgUSI28jqjPHooQAA + + + +clMaroon +$00B9FFFF +756,159;527,227 +t3ESzDEjd0ut89bd3IyWPQAA +OJNZyLkPgkW5YFYA5x/ChQAA +iDOAaVuVSUO57121Dqj8JQAA + +False +1.5707963267949 +15 +t3ESzDEjd0ut89bd3IyWPQAA + + +False +1.5707963267949 +30 +t3ESzDEjd0ut89bd3IyWPQAA + + +False +-1.5707963267949 +15 +t3ESzDEjd0ut89bd3IyWPQAA + + +False +-0.523598775598299 +30 +epHead +UVpvR8JQo0Goo1thnZ8TQwAA + + +False +0.523598775598299 +30 +epTail +UV6CUGeKi0qg+WyJsqDNMAAA + + +False +0.523598775598299 +25 +epHead +UVpvR8JQo0Goo1thnZ8TQwAA + + +False +-0.523598775598299 +25 +epTail +UV6CUGeKi0qg+WyJsqDNMAAA + + +False +-0.785398163397448 +40 +epHead +UVpvR8JQo0Goo1thnZ8TQwAA + + +False +0.785398163397448 +40 +epTail +UV6CUGeKi0qg+WyJsqDNMAAA + + +False +-1048 +-1000 +50 +8 +UVpvR8JQo0Goo1thnZ8TQwAA + + +False +-1048 +-1000 +50 +8 +UV6CUGeKi0qg+WyJsqDNMAAA + + + +clMaroon +$00B9FFFF +760,232;527,243 +j2qfJOQnLEyR5RVtbVGb8AAA +OJNZyLkPgkW5YFYA5x/ChQAA +OS8e8Zau7kWMtinIvCc/swAA + +False +1.5707963267949 +15 +j2qfJOQnLEyR5RVtbVGb8AAA + + +False +1.5707963267949 +30 +j2qfJOQnLEyR5RVtbVGb8AAA + + +False +-1.5707963267949 +15 +j2qfJOQnLEyR5RVtbVGb8AAA + + +False +-0.523598775598299 +30 +epHead +8zPYwZBWOEuUZxPtPgU/YQAA + + +False +0.523598775598299 +30 +epTail +DcOYQKycgUqgn2jU568/iAAA + + +False +0.523598775598299 +25 +epHead +8zPYwZBWOEuUZxPtPgU/YQAA + + +False +-0.523598775598299 +25 +epTail +DcOYQKycgUqgn2jU568/iAAA + + +False +-0.785398163397448 +40 +epHead +8zPYwZBWOEuUZxPtPgU/YQAA + + +False +0.785398163397448 +40 +epTail +DcOYQKycgUqgn2jU568/iAAA + + +False +-1048 +-1000 +50 +8 +8zPYwZBWOEuUZxPtPgU/YQAA + + +False +-1048 +-1000 +50 +8 +DcOYQKycgUqgn2jU568/iAAA + + + +clMaroon +$00B9FFFF +406,148;365,132 +L3wUC+fjukG9Mbmq0QYdiwAA +7R3Vtrr63kqhX5GzE7CY4gAA +Vdh7zL8QZ0OtD+C+OlvxpgAA + +False +1.5707963267949 +15 +L3wUC+fjukG9Mbmq0QYdiwAA + + +False +1.5707963267949 +30 +L3wUC+fjukG9Mbmq0QYdiwAA + + +False +-1.5707963267949 +15 +L3wUC+fjukG9Mbmq0QYdiwAA + + +False +-0.523598775598299 +30 +epHead +MVnve7DJ0kSTrd01IVyX1gAA + + +False +0.523598775598299 +30 +epTail +zaihnGbFv0SYjieuD3Ii+wAA + + +False +0.523598775598299 +25 +epHead +MVnve7DJ0kSTrd01IVyX1gAA + + +False +-0.523598775598299 +25 +epTail +zaihnGbFv0SYjieuD3Ii+wAA + + +False +-0.785398163397448 +40 +epHead +MVnve7DJ0kSTrd01IVyX1gAA + + +False +0.785398163397448 +40 +epTail +zaihnGbFv0SYjieuD3Ii+wAA + + +False +-1000 +-1000 +50 +8 +MVnve7DJ0kSTrd01IVyX1gAA + + +False +-1000 +-1000 +50 +8 +zaihnGbFv0SYjieuD3Ii+wAA + + + +clMaroon +$00B9FFFF +199,245;248,264 +ESsTAdhYyU64zi6/oVqTKgAA +1XmGBT1/RUKVRwCIItHBqQAA +LqRrN84lGEeTv5o2IgfsSwAA + +False +1.5707963267949 +15 +ESsTAdhYyU64zi6/oVqTKgAA + + +False +1.5707963267949 +30 +ESsTAdhYyU64zi6/oVqTKgAA + + +False +-1.5707963267949 +15 +ESsTAdhYyU64zi6/oVqTKgAA + + +False +-0.523598775598299 +30 +epHead +jqMq51leBkGUbLZ/J6mVggAA + + +False +0.523598775598299 +30 +epTail +NuLaPfQwkkOm5+Z8IfTRQwAA + + +False +0.523598775598299 +25 +epHead +jqMq51leBkGUbLZ/J6mVggAA + + +False +-0.523598775598299 +25 +epTail +NuLaPfQwkkOm5+Z8IfTRQwAA + + +False +-0.785398163397448 +40 +epHead +jqMq51leBkGUbLZ/J6mVggAA + + +False +0.785398163397448 +40 +epTail +NuLaPfQwkkOm5+Z8IfTRQwAA + + +False +-1000 +-1000 +50 +8 +jqMq51leBkGUbLZ/J6mVggAA + + +False +-1000 +-1000 +50 +8 +NuLaPfQwkkOm5+Z8IfTRQwAA + + + +clMaroon +$00B9FFFF +240 +332 +132 +45 +rxa+oNm2Kk2e9yVRZgZC4gAA + + +1 +design-module + + +False + + +False + + + +False +rxa+oNm2Kk2e9yVRZgZC4gAA + + +False +rxa+oNm2Kk2e9yVRZgZC4gAA + + +False +rxa+oNm2Kk2e9yVRZgZC4gAA + + + +clMaroon +$00B9FFFF +305,376;305,392 +udZiFgT1HUuXSsB17nyApQAA +gzOBaPhYH0Sqi38GA9ka4gAA +0NZb34oq+0iz6/8DYcniywAA + +False +1.5707963267949 +15 +udZiFgT1HUuXSsB17nyApQAA + + +False +1.5707963267949 +30 +udZiFgT1HUuXSsB17nyApQAA + + +False +-1.5707963267949 +15 +udZiFgT1HUuXSsB17nyApQAA + + +False +-0.523598775598299 +30 +epHead +Bkj3nzY1Z0OpLErETn5JAAAA + + +False +0.523598775598299 +30 +epTail +iGT7GmF0r0CH0TSScrk62AAA + + +False +0.523598775598299 +25 +epHead +Bkj3nzY1Z0OpLErETn5JAAAA + + +False +-0.523598775598299 +25 +epTail +iGT7GmF0r0CH0TSScrk62AAA + + +False +-0.785398163397448 +40 +epHead +Bkj3nzY1Z0OpLErETn5JAAAA + + +False +0.785398163397448 +40 +epTail +iGT7GmF0r0CH0TSScrk62AAA + + +False +-1000 +-1000 +50 +8 +Bkj3nzY1Z0OpLErETn5JAAAA + + +False +-1000 +-1000 +50 +8 +iGT7GmF0r0CH0TSScrk62AAA + + + +clMaroon +$00B9FFFF +760,402;512,329 +pRL6RWX7IUGI9SeSZRJAEwAA +BoXflTl2zkiHVb9rTj8+gQAA +55htDUboMkKutvJNMs10VwAA + +False +1.5707963267949 +15 +pRL6RWX7IUGI9SeSZRJAEwAA + + +False +1.5707963267949 +30 +pRL6RWX7IUGI9SeSZRJAEwAA + + +False +-1.5707963267949 +15 +pRL6RWX7IUGI9SeSZRJAEwAA + + +False +-0.523598775598299 +30 +epHead +He/O+ItNt0+c+XSWNytz9gAA + + +False +0.523598775598299 +30 +epTail +S4UJZMo1R0qd1Tyo5YNdtgAA + + +False +0.523598775598299 +25 +epHead +He/O+ItNt0+c+XSWNytz9gAA + + +False +-0.523598775598299 +25 +epTail +S4UJZMo1R0qd1Tyo5YNdtgAA + + +False +-0.785398163397448 +40 +epHead +He/O+ItNt0+c+XSWNytz9gAA + + +False +0.785398163397448 +40 +epTail +S4UJZMo1R0qd1Tyo5YNdtgAA + + +False +-1000 +-1000 +50 +8 +He/O+ItNt0+c+XSWNytz9gAA + + +False +-1000 +-1000 +50 +8 +S4UJZMo1R0qd1Tyo5YNdtgAA + + + +clMaroon +$00B9FFFF +536 +96 +149 +45 +cH75vr0YhkuvV/fYij/FMgAA + + +1 +download & build + + +False + + +False + + + +False +cH75vr0YhkuvV/fYij/FMgAA + + +False +cH75vr0YhkuvV/fYij/FMgAA + + +False +cH75vr0YhkuvV/fYij/FMgAA + + + +clMaroon +$00B9FFFF +368,112;536,116 +wARDKsfmxU6pDs0VU6O25wAA +DOHBlVwZH0CnyAOdMPUqxQAA +7R3Vtrr63kqhX5GzE7CY4gAA + +False +1.5707963267949 +15 +wARDKsfmxU6pDs0VU6O25wAA + + +False +1.5707963267949 +30 +wARDKsfmxU6pDs0VU6O25wAA + + +False +-1.5707963267949 +15 +wARDKsfmxU6pDs0VU6O25wAA + + +False +-0.523598775598299 +30 +epHead +tMwNvnbWx0qC99wvlGYF3AAA + + +False +0.523598775598299 +30 +epTail +6sd33lS3GkaENMAtDneYfAAA + + +False +0.523598775598299 +25 +epHead +tMwNvnbWx0qC99wvlGYF3AAA + + +False +-0.523598775598299 +25 +epTail +6sd33lS3GkaENMAtDneYfAAA + + +False +-0.785398163397448 +40 +epHead +tMwNvnbWx0qC99wvlGYF3AAA + + +False +0.785398163397448 +40 +epTail +6sd33lS3GkaENMAtDneYfAAA + + +False +-1000 +-1000 +50 +8 +tMwNvnbWx0qC99wvlGYF3AAA + + +False +-1000 +-1000 +50 +8 +6sd33lS3GkaENMAtDneYfAAA + + + +clMaroon +$00B9FFFF +765,276;632,140 +NRxXI+ohkUa8ldCSWR3lNQAA +DOHBlVwZH0CnyAOdMPUqxQAA +jBby7rVxVkO+HkQ21KY54wAA + +False +1.5707963267949 +15 +NRxXI+ohkUa8ldCSWR3lNQAA + + +False +1.5707963267949 +30 +NRxXI+ohkUa8ldCSWR3lNQAA + + +False +-1.5707963267949 +15 +NRxXI+ohkUa8ldCSWR3lNQAA + + +False +-0.523598775598299 +30 +epHead +VvLdglslUUqBPX/aHaWVywAA + + +False +0.523598775598299 +30 +epTail +8hHEA5HEUkaJOUrimD+IqwAA + + +False +0.523598775598299 +25 +epHead +VvLdglslUUqBPX/aHaWVywAA + + +False +-0.523598775598299 +25 +epTail +8hHEA5HEUkaJOUrimD+IqwAA + + +False +-0.785398163397448 +40 +epHead +VvLdglslUUqBPX/aHaWVywAA + + +False +0.785398163397448 +40 +epTail +8hHEA5HEUkaJOUrimD+IqwAA + + +False +-1000 +-1000 +50 +8 +VvLdglslUUqBPX/aHaWVywAA + + +False +-1000 +-1000 +50 +8 +8hHEA5HEUkaJOUrimD+IqwAA + + + +clMaroon +$00B9FFFF +544 +148 +127 +45 +K/jI5ejWkEmd+RwmoOHzSgAA + + +1 +new-demond + + +False + + +False + + + +False +K/jI5ejWkEmd+RwmoOHzSgAA + + +False +K/jI5ejWkEmd+RwmoOHzSgAA + + +False +K/jI5ejWkEmd+RwmoOHzSgAA + + + +clMaroon +$00B9FFFF +764,286;637,192 +HwNxguHxkEq1TTvntBzfPQAA ++xQR3R4Khk2Mr7tmPdkWSwAA +jBby7rVxVkO+HkQ21KY54wAA + +False +1.5707963267949 +15 +HwNxguHxkEq1TTvntBzfPQAA + + +False +1.5707963267949 +30 +HwNxguHxkEq1TTvntBzfPQAA + + +False +-1.5707963267949 +15 +HwNxguHxkEq1TTvntBzfPQAA + + +False +-0.523598775598299 +30 +epHead +LgaAK4fEB0e2otJzSn7toQAA + + +False +0.523598775598299 +30 +epTail +aS8jAO3xFkSspkn5BLzAQwAA + + +False +0.523598775598299 +25 +epHead +LgaAK4fEB0e2otJzSn7toQAA + + +False +-0.523598775598299 +25 +epTail +aS8jAO3xFkSspkn5BLzAQwAA + + +False +-0.785398163397448 +40 +epHead +LgaAK4fEB0e2otJzSn7toQAA + + +False +0.785398163397448 +40 +epTail +aS8jAO3xFkSspkn5BLzAQwAA + + +False +-1000 +-1000 +50 +8 +LgaAK4fEB0e2otJzSn7toQAA + + +False +-1000 +-1000 +50 +8 +aS8jAO3xFkSspkn5BLzAQwAA + + + +clMaroon +$00B9FFFF +772,376;625,192 +JDSYiscd1ku4Q9VTc3cxJAAA ++xQR3R4Khk2Mr7tmPdkWSwAA +55htDUboMkKutvJNMs10VwAA + +False +1.5707963267949 +15 +JDSYiscd1ku4Q9VTc3cxJAAA + + +False +1.5707963267949 +30 +JDSYiscd1ku4Q9VTc3cxJAAA + + +False +-1.5707963267949 +15 +JDSYiscd1ku4Q9VTc3cxJAAA + + +False +-0.523598775598299 +30 +epHead +hU4yh3LkjEKFkdS6cl0FBwAA + + +False +0.523598775598299 +30 +epTail +YldXkvDuwE27LSJywqCl4AAA + + +False +0.523598775598299 +25 +epHead +hU4yh3LkjEKFkdS6cl0FBwAA + + +False +-0.523598775598299 +25 +epTail +YldXkvDuwE27LSJywqCl4AAA + + +False +-0.785398163397448 +40 +epHead +hU4yh3LkjEKFkdS6cl0FBwAA + + +False +0.785398163397448 +40 +epTail +YldXkvDuwE27LSJywqCl4AAA + + +False +-1000 +-1000 +50 +8 +hU4yh3LkjEKFkdS6cl0FBwAA + + +False +-1000 +-1000 +50 +8 +YldXkvDuwE27LSJywqCl4AAA + + + +clMaroon +$00B9FFFF +550,192;362,264 +COsG4HSpZUe/Vic0aL5j4AAA +1XmGBT1/RUKVRwCIItHBqQAA ++xQR3R4Khk2Mr7tmPdkWSwAA + +False +1.5707963267949 +15 +COsG4HSpZUe/Vic0aL5j4AAA + + +False +1.5707963267949 +30 +COsG4HSpZUe/Vic0aL5j4AAA + + +False +-1.5707963267949 +15 +COsG4HSpZUe/Vic0aL5j4AAA + + +False +-0.523598775598299 +30 +epHead +TWHK+EvM0kuJxrZGPnmV/gAA + + +False +0.523598775598299 +30 +epTail +g4nzG5AXAUmT/Juw/Y+HhwAA + + +False +0.523598775598299 +25 +epHead +TWHK+EvM0kuJxrZGPnmV/gAA + + +False +-0.523598775598299 +25 +epTail +g4nzG5AXAUmT/Juw/Y+HhwAA + + +False +-0.785398163397448 +40 +epHead +TWHK+EvM0kuJxrZGPnmV/gAA + + +False +0.785398163397448 +40 +epTail +g4nzG5AXAUmT/Juw/Y+HhwAA + + +False +-1000 +-1000 +50 +8 +TWHK+EvM0kuJxrZGPnmV/gAA + + +False +-1000 +-1000 +50 +8 +g4nzG5AXAUmT/Juw/Y+HhwAA + + + +clMaroon +$00B9FFFF +400 +224 +128 +45 +ozTLGGkik02HnJ667z5MBQAA + + +1 +doc & tutorial + + +False + + +False + + + +False +ozTLGGkik02HnJ667z5MBQAA + + +False +ozTLGGkik02HnJ667z5MBQAA + + +False +ozTLGGkik02HnJ667z5MBQAA + + + +clMaroon +$00B9FFFF +199,222;392,184 +eD6wP/fAO0qZXgTPDYw14gAA +Vdh7zL8QZ0OtD+C+OlvxpgAA +LqRrN84lGEeTv5o2IgfsSwAA + +False +1.5707963267949 +15 +eD6wP/fAO0qZXgTPDYw14gAA + + +False +1.5707963267949 +30 +eD6wP/fAO0qZXgTPDYw14gAA + + +False +-1.5707963267949 +15 +eD6wP/fAO0qZXgTPDYw14gAA + + +False +-0.523598775598299 +30 +epHead +XNH/vjJrPkeWiAnFueRS2wAA + + +False +0.523598775598299 +30 +epTail +NwDa11zhX0qixnczVDBHswAA + + +False +0.523598775598299 +25 +epHead +XNH/vjJrPkeWiAnFueRS2wAA + + +False +-0.523598775598299 +25 +epTail +NwDa11zhX0qixnczVDBHswAA + + +False +-0.785398163397448 +40 +epHead +XNH/vjJrPkeWiAnFueRS2wAA + + +False +0.785398163397448 +40 +epTail +NwDa11zhX0qixnczVDBHswAA + + +False +-1000 +-1000 +50 +8 +XNH/vjJrPkeWiAnFueRS2wAA + + +False +-1000 +-1000 +50 +8 +NwDa11zhX0qixnczVDBHswAA + + + +clMaroon +$00B9FFFF +199,263;279,332 +ijA0VzIZG0G7ohk808I7EAAA +0NZb34oq+0iz6/8DYcniywAA +LqRrN84lGEeTv5o2IgfsSwAA + +False +1.5707963267949 +15 +ijA0VzIZG0G7ohk808I7EAAA + + +False +1.5707963267949 +30 +ijA0VzIZG0G7ohk808I7EAAA + + +False +-1.5707963267949 +15 +ijA0VzIZG0G7ohk808I7EAAA + + +False +-0.523598775598299 +30 +epHead +sHxTuCDocEyzJSz3moadcwAA + + +False +0.523598775598299 +30 +epTail +2wepYfQ1HEOA25v4ibitGAAA + + +False +0.523598775598299 +25 +epHead +sHxTuCDocEyzJSz3moadcwAA + + +False +-0.523598775598299 +25 +epTail +2wepYfQ1HEOA25v4ibitGAAA + + +False +-0.785398163397448 +40 +epHead +sHxTuCDocEyzJSz3moadcwAA + + +False +0.785398163397448 +40 +epTail +2wepYfQ1HEOA25v4ibitGAAA + + +False +-1000 +-1000 +50 +8 +sHxTuCDocEyzJSz3moadcwAA + + +False +-1000 +-1000 +50 +8 +2wepYfQ1HEOA25v4ibitGAAA + + + +clMaroon +$00B9FFFF +199,232;400,243 +tV4kKe/RSky6myfeSP18swAA +OJNZyLkPgkW5YFYA5x/ChQAA +LqRrN84lGEeTv5o2IgfsSwAA + +False +1.5707963267949 +15 +tV4kKe/RSky6myfeSP18swAA + + +False +1.5707963267949 +30 +tV4kKe/RSky6myfeSP18swAA + + +False +-1.5707963267949 +15 +tV4kKe/RSky6myfeSP18swAA + + +False +-0.523598775598299 +30 +epHead +yYIJFraZbU6Xh62CJfSi8wAA + + +False +0.523598775598299 +30 +epTail +PW0DMEjQBEykIxMEhQ5JaAAA + + +False +0.523598775598299 +25 +epHead +yYIJFraZbU6Xh62CJfSi8wAA + + +False +-0.523598775598299 +25 +epTail +PW0DMEjQBEykIxMEhQ5JaAAA + + +False +-0.785398163397448 +40 +epHead +yYIJFraZbU6Xh62CJfSi8wAA + + +False +0.785398163397448 +40 +epTail +PW0DMEjQBEykIxMEhQ5JaAAA + + +False +-1000 +-1000 +50 +8 +yYIJFraZbU6Xh62CJfSi8wAA + + +False +-1000 +-1000 +50 +8 +PW0DMEjQBEykIxMEhQ5JaAAA + + + +clMaroon +$00B9FFFF +16 +108 +130 +45 +wE/srVLQHE2sCDr/+ydmYAAA + + +1 +launch-publish + + +False + + +False + + + +False +wE/srVLQHE2sCDr/+ydmYAAA + + +False +wE/srVLQHE2sCDr/+ydmYAAA + + +False +wE/srVLQHE2sCDr/+ydmYAAA + + + +clMaroon +$00B9FFFF +205,346;240,349 +dK9I6bZRfUih3ErZpfx4hAAA +0NZb34oq+0iz6/8DYcniywAA +8ZQdZB1z0kaDUzkVHOzvRgAA + +False +1.5707963267949 +15 +dK9I6bZRfUih3ErZpfx4hAAA + + +False +1.5707963267949 +30 +dK9I6bZRfUih3ErZpfx4hAAA + + +False +-1.5707963267949 +15 +dK9I6bZRfUih3ErZpfx4hAAA + + +False +-0.523598775598299 +30 +epHead +gIU56iDnlUaFhBS+rQgjwgAA + + +False +0.523598775598299 +30 +epTail +VD6ZOZdU+UucOrfmGN2ehAAA + + +False +0.523598775598299 +25 +epHead +gIU56iDnlUaFhBS+rQgjwgAA + + +False +-0.523598775598299 +25 +epTail +VD6ZOZdU+UucOrfmGN2ehAAA + + +False +-0.785398163397448 +40 +epHead +gIU56iDnlUaFhBS+rQgjwgAA + + +False +0.785398163397448 +40 +epTail +VD6ZOZdU+UucOrfmGN2ehAAA + + +False +-1000 +-1000 +50 +8 +gIU56iDnlUaFhBS+rQgjwgAA + + +False +-1000 +-1000 +50 +8 +VD6ZOZdU+UucOrfmGN2ehAAA + + + +clMaroon +$00B9FFFF +16 +292 +128 +45 +KDFXOvN54E2A+KD+zjp/rwAA + + +1 +task-manager + + +False + + +False + + + +False +KDFXOvN54E2A+KD+zjp/rwAA + + +False +KDFXOvN54E2A+KD+zjp/rwAA + + +False +KDFXOvN54E2A+KD+zjp/rwAA + + + +clMaroon +$00B9FFFF +20 +348 +108 +45 +k6w1Bteav02GGDrC6cJmKQAA + + +1 +new-idea + + +False + + +False + + + +False +k6w1Bteav02GGDrC6cJmKQAA + + +False +k6w1Bteav02GGDrC6cJmKQAA + + +False +k6w1Bteav02GGDrC6cJmKQAA + + + +clMaroon +$00B9FFFF +777,376;624,140 +OeFvUQCLbkSUntfY8QQZjQAA +DOHBlVwZH0CnyAOdMPUqxQAA +55htDUboMkKutvJNMs10VwAA + +False +1.5707963267949 +15 +OeFvUQCLbkSUntfY8QQZjQAA + + +False +1.5707963267949 +30 +OeFvUQCLbkSUntfY8QQZjQAA + + +False +-1.5707963267949 +15 +OeFvUQCLbkSUntfY8QQZjQAA + + +False +-0.523598775598299 +30 +epHead +9QetYTXGJUuUfmUAHqUS4gAA + + +False +0.523598775598299 +30 +epTail +nrc3+Xx32EKxZK145yefSgAA + + +False +0.523598775598299 +25 +epHead +9QetYTXGJUuUfmUAHqUS4gAA + + +False +-0.523598775598299 +25 +epTail +nrc3+Xx32EKxZK145yefSgAA + + +False +-0.785398163397448 +40 +epHead +9QetYTXGJUuUfmUAHqUS4gAA + + +False +0.785398163397448 +40 +epTail +nrc3+Xx32EKxZK145yefSgAA + + +False +-1000 +-1000 +50 +8 +9QetYTXGJUuUfmUAHqUS4gAA + + +False +-1000 +-1000 +50 +8 +nrc3+Xx32EKxZK145yefSgAA + + + +clMaroon +$00B9FFFF +194,169;283,264 +u2pg0MZyBkybxjv8s4b5hwAA +1XmGBT1/RUKVRwCIItHBqQAA +qYv8SJgqPUajzKDRtANOvwAA + +False +1.5707963267949 +15 +u2pg0MZyBkybxjv8s4b5hwAA + + +False +1.5707963267949 +30 +u2pg0MZyBkybxjv8s4b5hwAA + + +False +-1.5707963267949 +15 +u2pg0MZyBkybxjv8s4b5hwAA + + +False +-0.523598775598299 +30 +epHead +gL33aMDC5EaM1KvQAa8OywAA + + +False +0.523598775598299 +30 +epTail +PltbgL9aKEOMcFQlA6pKEQAA + + +False +0.523598775598299 +25 +epHead +gL33aMDC5EaM1KvQAa8OywAA + + +False +-0.523598775598299 +25 +epTail +PltbgL9aKEOMcFQlA6pKEQAA + + +False +-0.785398163397448 +40 +epHead +gL33aMDC5EaM1KvQAa8OywAA + + +False +0.785398163397448 +40 +epTail +PltbgL9aKEOMcFQlA6pKEQAA + + +False +-1000 +-1000 +50 +8 +gL33aMDC5EaM1KvQAa8OywAA + + +False +-1000 +-1000 +50 +8 +PltbgL9aKEOMcFQlA6pKEQAA + + + + + +pkg-builder +tacoxPrx8kCKprVgJHnvqgAA + +aYJ9/XooBkmA6/FiFJuMIQAA +7 + +clMaroon +$00B9FFFF +144 +108 +120 +70 ++ji05KqWx0+15bzf+i9ZaAAA + + +build-pkg + + +False + + +False + + + + +clMaroon +$00B9FFFF +332 +140 +120 +70 +9m9n/MGV7kKh0PE7WrKhKAAA + + +build-config + + +False + + +False + + + + +clMaroon +$00B9FFFF +224 +272 +120 +70 +NlQ9Rg8NL061+rbOyUtEFgAA + + +build-pkglist + + +False + + +False + + + + +clMaroon +$00B9FFFF +432 +296 +120 +70 +vt3kyFkrMUef7jELG3+4KQAA + + +devutils + + +False + + +False + + + + +clMaroon +$00B9FFFF +608 +232 +120 +70 +LAuXBlsgVEy9diBr2n4AdwAA + + +codemngr + + +False + + +False + + + + +clMaroon +$00B9FFFF +628 +324 +120 +70 +AihHVW7SgkeVDEL8szGXUQAA + + +soft-repo + + +False + + +False + + + + +clMaroon +$00B9FFFF +404 +64 +120 +70 +koV3blO6REyuCQSKEhgOdAAA + + +devspec + + +False + + +False + + + + + + +dev-flow +tacoxPrx8kCKprVgJHnvqgAA + +OX4lnFVWFU6PHMrbj32cxAAA +129 + +clMaroon +1368 +468 +196 +353 +System + + +clMaroon +1580 +308 +185 +273 +System + + +clMaroon +1088 +12 +477 +449 +System + + +clMaroon +1564 +208 +300 +System + + +clMaroon +$00B9FFFF +872 +304 +200 +300 +System + + +clMaroon +$00B9FFFF +720 +4 +320 +189 +System + + +clMaroon +$00B9FFFF +172 +56 +121 +45 +7QUh/FC01Eqc8uAicCcB5QAA + + +1 +analysis + + +False + + +False + + + +False +7QUh/FC01Eqc8uAicCcB5QAA + + +False +7QUh/FC01Eqc8uAicCcB5QAA + + +False +7QUh/FC01Eqc8uAicCcB5QAA + + + +clMaroon +$00B9FFFF +928 +356 +70 +32 +GB5fgt+BCEuZu+MykpdKRQAA + + +1 +design + + +False + + +False + + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + +False +GB5fgt+BCEuZu+MykpdKRQAA + + + +clMaroon +$00B9FFFF +76 +292 +113 +45 +h9lhv0QFq0aFwcWza3gsDAAA + + +1 +list-external + + +False + + +False + + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + + +clMaroon +$00B9FFFF +204 +312 +231 +45 +XmSQJXVfo0qkbNCidOBOzwAA + + +1 +actor & action analysis + + +False + + +False + + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + + +clMaroon +$00B9FFFF +216 +252 +144 +45 +kETY7OJYc0qg/QkJQX2LXQAA + + +1 +data-io-analysis + + +False + + +False + + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + + +clMaroon +132 +360 +112 +30 +operation-actor-list + + + +clMaroon +92 +220 +87 +30 +physical-io-list + + + +clMaroon +$00B9FFFF +134,249;133,292 +ar/cmfoCE0OyMW57ay1ytwAA +T4twcBKRhUu/n8O3MeJdLwAA + + +clMaroon +$00B9FFFF +174,360;152,336 +ar/cmfoCE0OyMW57ay1ytwAA +MY8KtI96lUemNY9fWLx6pgAA + + +clMaroon +$00B9FFFF +233,360;246,356 +6iOG2zf6TEyGTIPJKas9rAAA +MY8KtI96lUemNY9fWLx6pgAA + + +clMaroon +$00B9FFFF +178,245;216,255 +ZVZSHvdc90+uyCG9xQvFFwAA +T4twcBKRhUu/n8O3MeJdLwAA + + +clMaroon +$00B9FFFF +188,300;216,293 +NSCnR/cZlUa3fXcKMhA8sQAA +ZVZSHvdc90+uyCG9xQvFFwAA +ar/cmfoCE0OyMW57ay1ytwAA + +False +1.5707963267949 +15 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +1.5707963267949 +30 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +-1.5707963267949 +15 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +-0.523598775598299 +30 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +0.523598775598299 +30 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +0.523598775598299 +25 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +-0.523598775598299 +25 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +-0.785398163397448 +40 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +0.785398163397448 +40 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +-932 +-1004 +50 +8 +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +-932 +-1004 +50 +8 +HdgD2FmAh06xyFDupk4vagAA + + + +clMaroon +$00B9FFFF +188,320;204,322 +ubIfnYMMgEuGrguT+jcONAAA +6iOG2zf6TEyGTIPJKas9rAAA +ar/cmfoCE0OyMW57ay1ytwAA + +False +1.5707963267949 +15 +ubIfnYMMgEuGrguT+jcONAAA + + +False +1.5707963267949 +30 +ubIfnYMMgEuGrguT+jcONAAA + + +False +-1.5707963267949 +15 +ubIfnYMMgEuGrguT+jcONAAA + + +False +-0.523598775598299 +30 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +0.523598775598299 +30 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +0.523598775598299 +25 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +-0.523598775598299 +25 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +-0.785398163397448 +40 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +0.785398163397448 +40 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +-932 +-1004 +50 +8 +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +-932 +-1004 +50 +8 +pxqjN0GODE69EvLg0dAl+AAA + + + +clMaroon +$00FFFF80 +220 +168 +108 +30 +data-flow-diagram + + + +clMaroon +$00FFFF80 +380 +388 +154 +38 +action-flow-diagram +invoking-procedure-diagram + + + +clMaroon +$00B9FFFF +275,197;284,252 +ZVZSHvdc90+uyCG9xQvFFwAA +TUzHcFBaSUWvtpWsS2/jdQAA + + +clMaroon +$00B9FFFF +422,388;361,356 +6iOG2zf6TEyGTIPJKas9rAAA +3VXAJzmn0kOyq98DVwWHnAAA + + +clMaroon +$00FFFF80 +352 +560 +134 +30 +function-feature-list-file + + + +clMaroon +$00B9FFFF +240 +388 +121 +38 +top-usecase-diagram +usecase-diagram + + + +clMaroon +$00B9FFFF +305,388;313,356 +6iOG2zf6TEyGTIPJKas9rAAA +p961lf0fSEW3ZPuY+wyZQgAA + + +clMaroon +$00B9FFFF +204 +440 +152 +45 +TMPdkgNID0u772le0sCmLgAA + + +1 +new-ideas-action + + +False + + +False + + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + + +clMaroon +$00B9FFFF +205 +548 +175 +45 +Kh+ykp9GgU6PQXUx+CGLxgAA + + +1 +new-demond-action + + +False + + +False + + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + + +clMaroon +$00B9FFFF +340 +496 +188 +45 +06qF2g1ff02RsBbBfLLo1gAA + + +1 +feature-analysis-task + + +False + + +False + + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + + +clMaroon +$00B9FFFF +208 +504 +123 +30 +note record in tagdoc + + + +clMaroon +$00B9FFFF +272,504;275,484 +sFw3N+djIEOBwQg4t6R70wAA +8hNIvxldLUuPj82B7trzxgAA + + +clMaroon +$00B9FFFF +282,548;276,533 +8hNIvxldLUuPj82B7trzxgAA +hlEB9emSQ0yr5JtMXv8exgAA + + +clMaroon +$00B9FFFF +340,518;330,518 +8hNIvxldLUuPj82B7trzxgAA +pbFdS1YKskuJx2F5GYPsxwAA + + +clMaroon +$00B9FFFF +339,484;372,496 +ZE6XGr3H4E+M1Lu1nRZ9BQAA +pbFdS1YKskuJx2F5GYPsxwAA +sFw3N+djIEOBwQg4t6R70wAA + +1.5707963267949 +15 +trimple-catagory +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +1.5707963267949 +30 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-1.5707963267949 +15 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-0.523598775598299 +30 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.523598775598299 +30 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +0.523598775598299 +25 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +-0.523598775598299 +25 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-0.785398163397448 +40 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.785398163397448 +40 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-1104 +-720 +50 +8 +irMBt7uWtEaxRopZEBcfwgAA + + +False +-1104 +-720 +50 +8 +eu/8Siwir02KNGkRDOEa9gAA + + + +clMaroon +$00B9FFFF +352,548;374,540 +li4LwavBrE+pggONaW7QkwAA +pbFdS1YKskuJx2F5GYPsxwAA +hlEB9emSQ0yr5JtMXv8exgAA + +1.5707963267949 +15 +trimple-catagory +li4LwavBrE+pggONaW7QkwAA + + +False +1.5707963267949 +30 +li4LwavBrE+pggONaW7QkwAA + + +False +-1.5707963267949 +15 +li4LwavBrE+pggONaW7QkwAA + + +False +-0.523598775598299 +30 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.523598775598299 +30 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +0.523598775598299 +25 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-0.523598775598299 +25 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-0.785398163397448 +40 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.785398163397448 +40 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-1104 +-720 +50 +8 +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-1104 +-720 +50 +8 +gehfWFMIjEKeVzAcdHneqgAA + + + +clMaroon +$00B9FFFF +422,560;427,540 +pbFdS1YKskuJx2F5GYPsxwAA +n5RHkAHiq0GHEjHyehEKAgAA + + +clMaroon +$00B9FFFF +388 +208 +165 +45 +c4KyOid86k6Bzi+unTPcfAAA + + +1 +generate data-dict + + +False + + +False + + + +False +c4KyOid86k6Bzi+unTPcfAAA + + +False +c4KyOid86k6Bzi+unTPcfAAA + + +False +c4KyOid86k6Bzi+unTPcfAAA + + + +clMaroon +$00B9FFFF +408 +148 +63 +30 +data-dict + + + +clMaroon +$00B9FFFF +460,208;446,177 +tAAqkaExpkOHoSKHhWwzIAAA +RvaeyZG/PUeTpXEVgO7PywAA + + +clMaroon +$00B9FFFF +359,257;388,250 +dxugzP0ZBEOdRYlU9N5SDAAA +RvaeyZG/PUeTpXEVgO7PywAA +ZVZSHvdc90+uyCG9xQvFFwAA + +False +1.5707963267949 +15 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +1.5707963267949 +30 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +-1.5707963267949 +15 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +-0.523598775598299 +30 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +0.523598775598299 +30 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +0.523598775598299 +25 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +-0.523598775598299 +25 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +-0.785398163397448 +40 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +0.785398163397448 +40 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +-932 +-1004 +50 +8 +/vsJW8WzsU++6Lul86APuQAA + + +False +-932 +-1004 +50 +8 +z475GIA9kECnM3EOwAHh6QAA + + + +clMaroon +$00B9FFFF +520 +148 +178 +45 +8E86OOxmt0eTCKMQNrubWAAA + + +1 +data-entity-analysis + + +False + + +False + + + +False +8E86OOxmt0eTCKMQNrubWAAA + + +False +8E86OOxmt0eTCKMQNrubWAAA + + +False +8E86OOxmt0eTCKMQNrubWAAA + + + +clMaroon +$00B9FFFF +521,208;558,192 +TfaTWdzXx0eF98RMZF5U/AAA +3zDgV/Xi/0+DECy5hTfn6AAA +RvaeyZG/PUeTpXEVgO7PywAA + +False +1.5707963267949 +15 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +1.5707963267949 +30 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +-1.5707963267949 +15 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +-0.523598775598299 +30 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +0.523598775598299 +30 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +0.523598775598299 +25 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +-0.523598775598299 +25 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +-0.785398163397448 +40 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +0.785398163397448 +40 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +-932 +-1004 +50 +8 +FR6YZrNJHkeksGzXICrvngAA + + +False +-932 +-1004 +50 +8 +ApKyMGFOCkStssh0gwBpKAAA + + + +clMaroon +$00B9FFFF +520,166;470,164 +tAAqkaExpkOHoSKHhWwzIAAA +3zDgV/Xi/0+DECy5hTfn6AAA + + +clMaroon +$00B9FFFF +476 +108 +75 +30 +ER-diagram + + + +clMaroon +$00B9FFFF +543,137;565,148 +3zDgV/Xi/0+DECy5hTfn6AAA +kcVNQ0wczES+n8ehG2y2/QAA + + +clMaroon +$00B9FFFF +444 +260 +175 +45 +tnTkvoZxVkmVjIgd8K6VcwAA + + +1 +module-design-task + + +False + + +False + + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + + +clMaroon +$00B9FFFF +359,276;444,279 +BNlaobUxlkaxprXRzDMgIwAA +s/iW5IUcqEOvkUCPbURcvAAA +ZVZSHvdc90+uyCG9xQvFFwAA + +False +1.5707963267949 +15 +BNlaobUxlkaxprXRzDMgIwAA + + +False +1.5707963267949 +30 +BNlaobUxlkaxprXRzDMgIwAA + + +False +-1.5707963267949 +15 +BNlaobUxlkaxprXRzDMgIwAA + + +False +-0.523598775598299 +30 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +0.523598775598299 +30 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +0.523598775598299 +25 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +-0.523598775598299 +25 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +-0.785398163397448 +40 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +0.785398163397448 +40 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +-932 +-1004 +50 +8 +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +-932 +-1004 +50 +8 +UtVAs5JBSkKc0jSVdLpypQAA + + + +clMaroon +$00B9FFFF +409,312;444,303 +t3VIg1cXJEmsTGdIYQFIcwAA +s/iW5IUcqEOvkUCPbURcvAAA +6iOG2zf6TEyGTIPJKas9rAAA + +False +1.5707963267949 +15 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +1.5707963267949 +30 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +-1.5707963267949 +15 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +-0.523598775598299 +30 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +0.523598775598299 +30 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +0.523598775598299 +25 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +-0.523598775598299 +25 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +-0.785398163397448 +40 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +0.785398163397448 +40 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +-932 +-1004 +50 +8 +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +-932 +-1004 +50 +8 +IuqkqTOhTEuBUbn2uLNuqAAA + + + +clMaroon +$00B9FFFF +528 +500 +85 +53 +build-dest +install-pkg-list +src-pkg + + + +clMaroon +$00FFFF80 +508 +332 +152 +38 +function-module-list-file +class-diagram + + + +clMaroon +$00B9FFFF +569,332;548,304 +s/iW5IUcqEOvkUCPbURcvAAA +XplFyUBcGE23N1wJH+UaowAA + + +clMaroon +$00FF80FF +80 +524 +117 +45 +7FwnjSWdM0KKXAN3V8oQMAAA + + +1 +soft-demond + + +False + + +False + + + +False +7FwnjSWdM0KKXAN3V8oQMAAA + + +False +7FwnjSWdM0KKXAN3V8oQMAAA + + +False +7FwnjSWdM0KKXAN3V8oQMAAA + + + +clMaroon +$00FF80FF +72 +444 +121 +45 +mx6wTw6+KEuGtAr0iRUXJwAA + + +1 +analysis-task + + +False + + +False + + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + + +clMaroon +$00B9FFFF +388,210;327,195 +TUzHcFBaSUWvtpWsS2/jdQAA +RvaeyZG/PUeTpXEVgO7PywAA + + +clMaroon +$00FFFF80 +560 +396 +152 +30 +top-function-module-list-file + + + +clMaroon +$00B9FFFF +544 +448 +267 +45 +EjjnPhUmf02yFIvhJmdcmQAA + + +1 +pkg-dest category + + +False + + +False + + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + + +clMaroon +$00B9FFFF +635,492;612,504 +qVEe/fF3/kC3YIIc7BmwuAAA +RDlS3XZVdUCC/tRmDGvFywAA + + +clMaroon +$00B9FFFF +645,425;661,448 +RDlS3XZVdUCC/tRmDGvFywAA +T6b0hHxnwE+qhStkZmN/sQAA + + +clMaroon +$00B9FFFF +518,304;467,388 +3VXAJzmn0kOyq98DVwWHnAAA +s/iW5IUcqEOvkUCPbURcvAAA + + +clMaroon +$00B9FFFF +620 +260 +121 +45 +a7yZcyAyl02YNl0/FQziyQAA + + +1 +layer-design + + +False + + +False + + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + + +clMaroon +$00B9FFFF +600 +204 +171 +38 +function-module-struct-diagram +architech-diagram + + + +clMaroon +$00B9FFFF +683,241;682,260 +iVh3QgkpmkKlqxcSGYTCIQAA +wOOUnwLcykSHmOK6Cujx5gAA + + +clMaroon +$00B9FFFF +618,282;620,282 +xMoCRZ0FD0mJscRNN+UpywAA +iVh3QgkpmkKlqxcSGYTCIQAA +s/iW5IUcqEOvkUCPbURcvAAA + +False +1.5707963267949 +15 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +1.5707963267949 +30 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +-1.5707963267949 +15 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +-0.523598775598299 +30 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +0.523598775598299 +30 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +0.523598775598299 +25 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +-0.523598775598299 +25 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +-0.785398163397448 +40 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +0.785398163397448 +40 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +-932 +-1004 +50 +8 +FVDBPeq7mEKlp1go7V1hsgAA + + +False +-932 +-1004 +50 +8 +6MJU+jYHa0mx8HaVM4S+8QAA + + + +clMaroon +$00B9FFFF +132,444;132,336 +BZR3CshDZEOw2M912JpeeQAA +ar/cmfoCE0OyMW57ay1ytwAA +9ECchidjm0Oyi96zrE/MCgAA + +False +1.5707963267949 +15 +BZR3CshDZEOw2M912JpeeQAA + + +False +1.5707963267949 +30 +BZR3CshDZEOw2M912JpeeQAA + + +False +-1.5707963267949 +15 +BZR3CshDZEOw2M912JpeeQAA + + +False +-0.523598775598299 +30 +epHead +vN04w+sn8kGRW/7MCPHqyAAA + + +False +0.523598775598299 +30 +epTail +0CpaRkRUf0+bAPOkrSqRSgAA + + +False +0.523598775598299 +25 +epHead +vN04w+sn8kGRW/7MCPHqyAAA + + +False +-0.523598775598299 +25 +epTail +0CpaRkRUf0+bAPOkrSqRSgAA + + +False +-0.785398163397448 +40 +epHead +vN04w+sn8kGRW/7MCPHqyAAA + + +False +0.785398163397448 +40 +epTail +0CpaRkRUf0+bAPOkrSqRSgAA + + +False +-1000 +-1000 +50 +8 +vN04w+sn8kGRW/7MCPHqyAAA + + +False +-1000 +-1000 +50 +8 +0CpaRkRUf0+bAPOkrSqRSgAA + + + +clMaroon +$00B9FFFF +196,555;205,556 +/FmqeTd2akSH7n3I8hA3mQAA +hlEB9emSQ0yr5JtMXv8exgAA +XmyUwnJKX02C4THv/GbClAAA + +False +1.5707963267949 +15 +/FmqeTd2akSH7n3I8hA3mQAA + + +False +1.5707963267949 +30 +/FmqeTd2akSH7n3I8hA3mQAA + + +False +-1.5707963267949 +15 +/FmqeTd2akSH7n3I8hA3mQAA + + +False +-0.523598775598299 +30 +epHead +QZwwsltNj0eenKeiSJArvQAA + + +False +0.523598775598299 +30 +epTail +vq1zAfKQxUWnGiKbBTmYJwAA + + +False +0.523598775598299 +25 +epHead +QZwwsltNj0eenKeiSJArvQAA + + +False +-0.523598775598299 +25 +epTail +vq1zAfKQxUWnGiKbBTmYJwAA + + +False +-0.785398163397448 +40 +epHead +QZwwsltNj0eenKeiSJArvQAA + + +False +0.785398163397448 +40 +epTail +vq1zAfKQxUWnGiKbBTmYJwAA + + +False +-1000 +-1000 +50 +8 +QZwwsltNj0eenKeiSJArvQAA + + +False +-1000 +-1000 +50 +8 +vq1zAfKQxUWnGiKbBTmYJwAA + + + +clMaroon +$00B9FFFF +700 +524 +132 +98 +cmd-args-design +running-param-design +.lex/.gmr/.type/.ui +time-sequence-diagram +E-R-diagram +sql-tbl + + + +clMaroon +$00B9FFFF +1591 +76 +134 +45 +kM7+GQ5RuEmygAJdSluSjQAA + + +1 +src-pkg-create + + +False + + +False + + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + + +clMaroon +$00B9FFFF +1580 +248 +156 +45 +KmQBouG6c0yb16gPnUnBtQAA + + +1 +RAD-demo + + +False + + +False + + + +False +KmQBouG6c0yb16gPnUnBtQAA + + +False +KmQBouG6c0yb16gPnUnBtQAA + + +False +KmQBouG6c0yb16gPnUnBtQAA + + + +clMaroon +$00B9FFFF +1344 +173 +135 +32 +CLf6+wSJ/U+4iSwM7QoY3wAA + + +1 +design-to-code + + +False + + +False + + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + + +clMaroon +$00B9FFFF +1428 +284 +104 +32 +gJ7o4uiAMEqSPUL3dadz2wAA + + +1 +unit-coding + + +False + + +False + + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + + +clMaroon +$00B9FFFF +1360 +353 +108 +32 +wftqTlAvI0+cR9j69saRNQAA + + +1 +unit-testing + + +False + + +False + + + +False +wftqTlAvI0+cR9j69saRNQAA + + +False +wftqTlAvI0+cR9j69saRNQAA + + +False +wftqTlAvI0+cR9j69saRNQAA + + + +clMaroon +$00B9FFFF +1344 +404 +152 +32 +qlZGCifQOEyQyqBzIH1x/AAA + + +1 +integrate-testing + + +False + + +False + + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + + +clMaroon +$00B9FFFF +1609 +398 +121 +45 +lOyDrRE6cEms6LglvRhNKwAA + + +1 +build + + +False + + +False + + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + + +clMaroon +$00B9FFFF +1595 +460 +148 +45 +ucei5JvgaEarsuGuZmgj7QAA + + +1 +build-cross + + +False + + +False + + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + + +clMaroon +$00B9FFFF +1609 +522 +121 +45 +ZFe9gOmpTEWMgVssyEcAWAAA + + +1 +build-install + + +False + + +False + + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + + +clMaroon +$00B9FFFF +1401 +563 +131 +45 +lEIXTXT9L0CS9sEhjP/8NQAA + + +1 +pkg-repo-sync + + +False + + +False + + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + + +clMaroon +$00B9FFFF +1399 +630 +135 +45 +jmiilGYeBU+1y4Yw2n8CKAAA + + +1 +download-build + + +False + + +False + + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + + +clMaroon +$00B9FFFF +1395 +697 +142 +45 +RfRTk7cK0061dLioGm8l7wAA + + +1 +loopbak-testing + + +False + + +False + + + +False +RfRTk7cK0061dLioGm8l7wAA + + +False +RfRTk7cK0061dLioGm8l7wAA + + +False +RfRTk7cK0061dLioGm8l7wAA + + + +clMaroon +$00B9FFFF +1403 +764 +127 +45 +G18zTBUAj0+SdrsOmksR0QAA + + +1 +publish-task + + +False + + +False + + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + + +clMaroon +$00B9FFFF +1657,120;1657,132 +YcGgDGXOZ06J+TZOxU72agAA +bwHJGe0us0a2jeejcciWlwAA +mCnmzxWG6kWi9OPK25z8CgAA + +False +1.5707963267949 +15 +YcGgDGXOZ06J+TZOxU72agAA + + +False +1.5707963267949 +30 +YcGgDGXOZ06J+TZOxU72agAA + + +False +-1.5707963267949 +15 +YcGgDGXOZ06J+TZOxU72agAA + + +False +-0.523598775598299 +30 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +0.523598775598299 +30 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +0.523598775598299 +25 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +-0.523598775598299 +25 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +-0.785398163397448 +40 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +0.785398163397448 +40 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +-516 +-1008 +50 +8 +W6JXNHPDXE+JzttRtRevOgAA + + +False +-516 +-1008 +50 +8 +rO/Oarhbpk6wEn45hIpPfAAA + + + +clMaroon +$00B9FFFF +1580,269;1548,268;1548,52;964,52;965,72 +8kJkpVqo5kC/wdE3wXcwIAAA +5srcgF0EYUyRM6tylL0wVgAA +PUHktwo1XEONvjakWKxjjgAA + +False +1.5707963267949 +15 +8kJkpVqo5kC/wdE3wXcwIAAA + + +False +1.5707963267949 +30 +8kJkpVqo5kC/wdE3wXcwIAAA + + +False +-1.5707963267949 +15 +8kJkpVqo5kC/wdE3wXcwIAAA + + +False +-0.523598775598299 +30 +epHead +42F3TeDc+kOeEbEW2sSOqwAA + + +False +0.523598775598299 +30 +epTail +b75cgmrZUEiaHJZyDm8qXAAA + + +False +0.523598775598299 +25 +epHead +42F3TeDc+kOeEbEW2sSOqwAA + + +False +-0.523598775598299 +25 +epTail +b75cgmrZUEiaHJZyDm8qXAAA + + +False +-0.785398163397448 +40 +epHead +42F3TeDc+kOeEbEW2sSOqwAA + + +False +0.785398163397448 +40 +epTail +b75cgmrZUEiaHJZyDm8qXAAA + + +False +-540 +-1120 +50 +8 +42F3TeDc+kOeEbEW2sSOqwAA + + +False +-540 +-1120 +50 +8 +b75cgmrZUEiaHJZyDm8qXAAA + + + +clMaroon +$00B9FFFF +1411,204;1411,233 +k48n8C/dEECUhVTIv9BoGQAA +1soCBV2ToUK8JVFLvn+e2wAA +GaKv5RiKr0yqd1YQfpBS6QAA + +False +1.5707963267949 +15 +k48n8C/dEECUhVTIv9BoGQAA + + +False +1.5707963267949 +30 +k48n8C/dEECUhVTIv9BoGQAA + + +False +-1.5707963267949 +15 +k48n8C/dEECUhVTIv9BoGQAA + + +False +-0.523598775598299 +30 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +0.523598775598299 +30 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +0.523598775598299 +25 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +-0.523598775598299 +25 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +-0.785398163397448 +40 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +0.785398163397448 +40 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +-540 +-1120 +50 +8 +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +-540 +-1120 +50 +8 +YXudH8Doi0+zzc1qPMjDNAAA + + + +clMaroon +$00B9FFFF +1464,315;1427,353 +euFZ2oXh1UyoeBpwCRLyDQAA +0HXL2vLmwU+NgNkl6zVkQAAA +Ji7GcpOn/E2KIxghPULMgwAA + +False +1.5707963267949 +15 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +1.5707963267949 +30 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +-1.5707963267949 +15 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +-0.523598775598299 +30 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +0.523598775598299 +30 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +0.523598775598299 +25 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +-0.523598775598299 +25 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +-0.785398163397448 +40 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +0.785398163397448 +40 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +-540 +-1120 +50 +8 +g0Sss8qL1USpNMhJiejoNQAA + + +False +-540 +-1120 +50 +8 +nnIS6vjqXkqw2mw9rhuzugAA + + + +clMaroon +$00B9FFFF +1415,384;1417,404 +h7KFG98rIEKQY4C1dOWmFQAA +lSkarANt7EiYF5x5MQ7+qgAA +0HXL2vLmwU+NgNkl6zVkQAAA + +False +1.5707963267949 +15 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +1.5707963267949 +30 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +-1.5707963267949 +15 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +-0.523598775598299 +30 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +0.523598775598299 +30 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +0.523598775598299 +25 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +-0.523598775598299 +25 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +-0.785398163397448 +40 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +0.785398163397448 +40 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +-540 +-1120 +50 +8 +Fb68OZ19C0WB4BjQurmBRwAA + + +False +-540 +-1120 +50 +8 +akgagoM7O0WP1rFMWH/IzgAA + + + +clMaroon +$00B9FFFF +1480,404;1609,373 +GTroIE/UlEq3H/lwjMvR8wAA +8o8JeUyoWka2YCr2oj8TIgAA +lSkarANt7EiYF5x5MQ7+qgAA + +False +1.5707963267949 +15 +GTroIE/UlEq3H/lwjMvR8wAA + + +False +1.5707963267949 +30 +GTroIE/UlEq3H/lwjMvR8wAA + + +False +-1.5707963267949 +15 +GTroIE/UlEq3H/lwjMvR8wAA + + +False +-0.523598775598299 +30 +epHead +DiYoPg9r+0KN6xRjGDN+kwAA + + +False +0.523598775598299 +30 +epTail +BmvYAIFdPEKrfzWwQhihCAAA + + +False +0.523598775598299 +25 +epHead +DiYoPg9r+0KN6xRjGDN+kwAA + + +False +-0.523598775598299 +25 +epTail +BmvYAIFdPEKrfzWwQhihCAAA + + +False +-0.785398163397448 +40 +epHead +DiYoPg9r+0KN6xRjGDN+kwAA + + +False +0.785398163397448 +40 +epTail +BmvYAIFdPEKrfzWwQhihCAAA + + +False +-540 +-1120 +50 +8 +DiYoPg9r+0KN6xRjGDN+kwAA + + +False +-540 +-1120 +50 +8 +BmvYAIFdPEKrfzWwQhihCAAA + + + +clMaroon +$00B9FFFF +1669,442;1669,460 +hKV30qElWkWAVhrHK7PJbAAA +SJxSR34gTkGLBFrgEQoGBwAA +hhCDRIRYnU+Qwbyyoec6WwAA + +False +1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +1.5707963267949 +30 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-0.523598775598299 +30 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.523598775598299 +30 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +0.523598775598299 +25 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-0.523598775598299 +25 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-0.785398163397448 +40 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.785398163397448 +40 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-524 +-1032 +50 +8 +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-524 +-1032 +50 +8 +WHhyhUoWo0iDDhj6FaqW/gAA + + + +clMaroon +$00B9FFFF +1668,504;1668,522 +Htop0thy70qsJ36MwSIctgAA +wTzRmZpNA0CytlcwOuyUMQAA +SJxSR34gTkGLBFrgEQoGBwAA + +False +1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +1.5707963267949 +30 +Htop0thy70qsJ36MwSIctgAA + + +False +-1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +-0.523598775598299 +30 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.523598775598299 +30 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +0.523598775598299 +25 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-0.523598775598299 +25 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-0.785398163397448 +40 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.785398163397448 +40 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-524 +-1032 +50 +8 +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-524 +-1032 +50 +8 +bDyGtYJmuUiVC+pPkc7oHgAA + + + +clMaroon +$00B9FFFF +1609,536;1548,528 +wt/kYLKLC0CiPMmQly9eoAAA +f5vhNxPD30OIg0/MpcEnMgAA +wTzRmZpNA0CytlcwOuyUMQAA + +False +1.5707963267949 +15 +wt/kYLKLC0CiPMmQly9eoAAA + + +False +1.5707963267949 +30 +wt/kYLKLC0CiPMmQly9eoAAA + + +False +-1.5707963267949 +15 +wt/kYLKLC0CiPMmQly9eoAAA + + +False +-0.523598775598299 +30 +epHead +xGchvlfNhUO0g6gfoLFLRgAA + + +False +0.523598775598299 +30 +epTail +mwO8gf6vqUOl745za4HJ8wAA + + +False +0.523598775598299 +25 +epHead +xGchvlfNhUO0g6gfoLFLRgAA + + +False +-0.523598775598299 +25 +epTail +mwO8gf6vqUOl745za4HJ8wAA + + +False +-0.785398163397448 +40 +epHead +xGchvlfNhUO0g6gfoLFLRgAA + + +False +0.785398163397448 +40 +epTail +mwO8gf6vqUOl745za4HJ8wAA + + +False +-544 +-1008 +50 +8 +xGchvlfNhUO0g6gfoLFLRgAA + + +False +-544 +-1008 +50 +8 +mwO8gf6vqUOl745za4HJ8wAA + + + +clMaroon +$00B9FFFF +1466,607;1466,630 +t/ADlzXN00KW0NiGhwkclQAA +IIt4VBS2JkOc0GS4zIsSDAAA +sAS2iGQLE0GVexawSaeD0AAA + +False +1.5707963267949 +15 +t/ADlzXN00KW0NiGhwkclQAA + + +False +1.5707963267949 +30 +t/ADlzXN00KW0NiGhwkclQAA + + +False +-1.5707963267949 +15 +t/ADlzXN00KW0NiGhwkclQAA + + +False +-0.523598775598299 +30 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +0.523598775598299 +30 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +0.523598775598299 +25 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +-0.523598775598299 +25 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +-0.785398163397448 +40 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +0.785398163397448 +40 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +-712 +-1032 +50 +8 +LL86l17PZku+YBsr/fUklwAA + + +False +-712 +-1032 +50 +8 +bvYo1TGY6U2Io35TQ/yATAAA + + + +clMaroon +$00B9FFFF +1466,674;1465,697 +5n9wkh0NQUu8BFWyytdErgAA +e0Tnr7u8AE+La5gTMkR+KwAA +IIt4VBS2JkOc0GS4zIsSDAAA + +False +1.5707963267949 +15 +5n9wkh0NQUu8BFWyytdErgAA + + +False +1.5707963267949 +30 +5n9wkh0NQUu8BFWyytdErgAA + + +False +-1.5707963267949 +15 +5n9wkh0NQUu8BFWyytdErgAA + + +False +-0.523598775598299 +30 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +0.523598775598299 +30 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +0.523598775598299 +25 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +-0.523598775598299 +25 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +-0.785398163397448 +40 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +0.785398163397448 +40 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +-712 +-1032 +50 +8 +P+S209BDDkSnrN4WPl8+WAAA + + +False +-712 +-1032 +50 +8 +UYbXc0CahESM869EpDq6lwAA + + + +clMaroon +$00B9FFFF +1465,741;1466,764 +1QbYYnq3ykqiPL0Gv6UkSwAA +GNt2i16Jv0er8A8pORMwcAAA +e0Tnr7u8AE+La5gTMkR+KwAA + +False +1.5707963267949 +15 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +1.5707963267949 +30 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +-1.5707963267949 +15 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +-0.523598775598299 +30 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +0.523598775598299 +30 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +0.523598775598299 +25 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +-0.523598775598299 +25 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +-0.785398163397448 +40 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +0.785398163397448 +40 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +-712 +-1032 +50 +8 +2J0+TPdjaECdzYN0YQ2guQAA + + +False +-712 +-1032 +50 +8 +WMjnuHQF3kiQvKAfM+S81wAA + + + +clMaroon +$00B9FFFF +1591 +24 +135 +45 +l2Lw5fePkE+9xXcdzSY+bwAA + + +1 +dev-env-install + + +False + + +False + + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + + +clMaroon +$00B9FFFF +1658,68;1658,76 +3RL8yaG7p0udrs0v9djevAAA +mCnmzxWG6kWi9OPK25z8CgAA +ba/wrXKu5EuHn69Sc1EByQAA + +False +1.5707963267949 +15 +3RL8yaG7p0udrs0v9djevAAA + + +False +1.5707963267949 +30 +3RL8yaG7p0udrs0v9djevAAA + + +False +-1.5707963267949 +15 +3RL8yaG7p0udrs0v9djevAAA + + +False +-0.523598775598299 +30 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +0.523598775598299 +30 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +0.523598775598299 +25 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +-0.523598775598299 +25 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +-0.785398163397448 +40 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +0.785398163397448 +40 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +-516 +-1008 +50 +8 +La7Sdx9zEUWWIkxIncjJuAAA + + +False +-516 +-1008 +50 +8 +h4chvQo17kKpYAZk9SZs0wAA + + + +clMaroon +$00B9FFFF +1584 +132 +148 +45 +ofqv4KD9ukybRvF//Fek/AAA + + +1 +web home pages + + +False + + +False + + + +False +ofqv4KD9ukybRvF//Fek/AAA + + +False +ofqv4KD9ukybRvF//Fek/AAA + + +False +ofqv4KD9ukybRvF//Fek/AAA + + + +clMaroon +$00B9FFFF +1657,176;1657,196 +BYyEw6WhrkigDw+109evLAAA +xPeRQZfwOEmy8TaWIhh+GQAA +bwHJGe0us0a2jeejcciWlwAA + +False +1.5707963267949 +15 +BYyEw6WhrkigDw+109evLAAA + + +False +1.5707963267949 +30 +BYyEw6WhrkigDw+109evLAAA + + +False +-1.5707963267949 +15 +BYyEw6WhrkigDw+109evLAAA + + +False +-0.523598775598299 +30 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +0.523598775598299 +30 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +0.523598775598299 +25 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +-0.523598775598299 +25 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +-0.785398163397448 +40 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +0.785398163397448 +40 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +-516 +-1008 +50 +8 +2dUTUSyX8USUOoaapULmuQAA + + +False +-516 +-1008 +50 +8 +Dk4WLVZ+SU+WfPXc7TG0IwAA + + + +clMaroon +$00B9FFFF +1564 +196 +189 +45 +czS7yLr6oUygLwEMTWJMVgAA + + +1 +first-ver-dev-env-chk + + +False + + +False + + + +False +czS7yLr6oUygLwEMTWJMVgAA + + +False +czS7yLr6oUygLwEMTWJMVgAA + + +False +czS7yLr6oUygLwEMTWJMVgAA + + + +clMaroon +$00B9FFFF +1658,240;1658,248 +ULUs5j3aC0Gd9Vn1OUTU2wAA +PUHktwo1XEONvjakWKxjjgAA +xPeRQZfwOEmy8TaWIhh+GQAA + +False +1.5707963267949 +15 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +1.5707963267949 +30 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +-1.5707963267949 +15 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +-0.523598775598299 +30 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +0.523598775598299 +30 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +0.523598775598299 +25 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +-0.523598775598299 +25 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +-0.785398163397448 +40 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +0.785398163397448 +40 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +-516 +-1008 +50 +8 +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +-516 +-1008 +50 +8 +XXlOcGC2n0emsre13Wy0GgAA + + + +clMaroon +$00B9FFFF +1383 +496 +166 +45 +bjrraLbGKUSY+GYzLNk5RAAA + + +1 +launch-pkg-publish + + +False + + +False + + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + + +clMaroon +$00B9FFFF +1465,540;1466,563 +4wmxJ9R9R0eU6Jn8Ho3xFwAA +sAS2iGQLE0GVexawSaeD0AAA +f5vhNxPD30OIg0/MpcEnMgAA + +False +1.5707963267949 +15 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +1.5707963267949 +30 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +-1.5707963267949 +15 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +-0.523598775598299 +30 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +0.523598775598299 +30 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +0.523598775598299 +25 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +-0.523598775598299 +25 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +-0.785398163397448 +40 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +0.785398163397448 +40 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +-556 +-1072 +50 +8 +7JwpGqJmgku60xKurQDyPwAA + + +False +-556 +-1072 +50 +8 +L7xnZ29mQEadCI+TRP2QQAAA + + + +clMaroon +$00B9FFFF +1609 +336 +121 +45 +aUVRiLFY4USAN9h1PY1/vAAA + + +1 +build-debug + + +False + + +False + + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + + +clMaroon +$00B9FFFF +1669,380;1669,398 ++nJDFiS7VECOJ4vWaYvszgAA +hhCDRIRYnU+Qwbyyoec6WwAA +8o8JeUyoWka2YCr2oj8TIgAA + +False +1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +1.5707963267949 +30 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-0.523598775598299 +30 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.523598775598299 +30 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +0.523598775598299 +25 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-0.523598775598299 +25 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-0.785398163397448 +40 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.785398163397448 +40 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-516 +-1008 +50 +8 +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-516 +-1008 +50 +8 +VvsNJNyOO0e86/eHwYM58QAA + + + +clMaroon +$00B9FFFF +1416 +472 +96 +23 +publish-procedure + + + +clMaroon +$00B9FFFF +1624 +312 +109 +23 +after-dev-procedure + + + +clMaroon +$00B9FFFF +1368 +12 +101 +23 +develop-procedure + + + +clMaroon +$00B9FFFF +1604 +4 +109 +23 +dev-initial-procedure + + + +clMaroon +$00B9FFFF +916 +132 +120 +32 +oKO/T5e9P0yxfxSC9DK89wAA + + +1 +get-task + + +False + + +False + + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + + +clMaroon +$00B9FFFF +1340 +233 +144 +32 +CBkE9JDrJU21ybYWNP2cCgAA + + +1 +create-test-unit + + +False + + +False + + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + + +clMaroon +$00B9FFFF +1276 +284 +123 +32 +CEEcWQKt0kyX8zYOPZHrrwAA + + +1 +bugfix-coding + + +False + + +False + + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + + +clMaroon +$00B9FFFF +740 +32 +154 +45 +KMKq644vfEq7voEHMFkLwgAA + + +1 +initial-dev-launch + + +False + + +False + + + +False +KMKq644vfEq7voEHMFkLwgAA + + +False +KMKq644vfEq7voEHMFkLwgAA + + +False +KMKq644vfEq7voEHMFkLwgAA + + + +clMaroon +$00B9FFFF +736 +80 +142 +45 +PjS4k33/kkePfB8R0Qh14AAA + + +1 +bugfix-estimate + + +False + + +False + + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + + +clMaroon +$00B9FFFF +732 +132 +209 +45 +GbTWbRuRqkK91Ggxct5sowAA + + +1 +new-feature-dev-launch + + +False + + +False + + + +False +GbTWbRuRqkK91Ggxct5sowAA + + +False +GbTWbRuRqkK91Ggxct5sowAA + + +False +GbTWbRuRqkK91Ggxct5sowAA + + + +clMaroon +$00B9FFFF +904 +72 +127 +45 +F4Ld7UGpQkiQCCnqXOJ06wAA + + +1 +task-schedule + + +False + + +False + + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + + +clMaroon +$00B9FFFF +974,163;963,356 +X3JNoNb8Jky2P0O9whu+8QAA +UxkwPHCKZUOZB8abt9yLgQAA +dbDAxqIYDEef6cq3x4sQfAAA + +False +1.5707963267949 +15 +X3JNoNb8Jky2P0O9whu+8QAA + + +False +1.5707963267949 +30 +X3JNoNb8Jky2P0O9whu+8QAA + + +False +-1.5707963267949 +15 +X3JNoNb8Jky2P0O9whu+8QAA + + +False +-0.523598775598299 +30 +epHead +UUjC686FYU6T/q1aKuDLkgAA + + +False +0.523598775598299 +30 +epTail +XdMG4B9cfkWIcWgvsVmQUgAA + + +False +0.523598775598299 +25 +epHead +UUjC686FYU6T/q1aKuDLkgAA + + +False +-0.523598775598299 +25 +epTail +XdMG4B9cfkWIcWgvsVmQUgAA + + +False +-0.785398163397448 +40 +epHead +UUjC686FYU6T/q1aKuDLkgAA + + +False +0.785398163397448 +40 +epTail +XdMG4B9cfkWIcWgvsVmQUgAA + + +False +-516 +-1008 +50 +8 +UUjC686FYU6T/q1aKuDLkgAA + + +False +-516 +-1008 +50 +8 +XdMG4B9cfkWIcWgvsVmQUgAA + + + +clMaroon +$00B9FFFF +1035,153;1344,182 +TzMLJBMMOEKimlwgjlIwnQAA +GaKv5RiKr0yqd1YQfpBS6QAA +dbDAxqIYDEef6cq3x4sQfAAA + +False +1.5707963267949 +15 +TzMLJBMMOEKimlwgjlIwnQAA + + +False +1.5707963267949 +30 +TzMLJBMMOEKimlwgjlIwnQAA + + +False +-1.5707963267949 +15 +TzMLJBMMOEKimlwgjlIwnQAA + + +False +-0.523598775598299 +30 +epHead +BOzCR9HOxU+q1mRime4kPgAA + + +False +0.523598775598299 +30 +epTail +cCWrTkROLUy3C0VntDGRjwAA + + +False +0.523598775598299 +25 +epHead +BOzCR9HOxU+q1mRime4kPgAA + + +False +-0.523598775598299 +25 +epTail +cCWrTkROLUy3C0VntDGRjwAA + + +False +-0.785398163397448 +40 +epHead +BOzCR9HOxU+q1mRime4kPgAA + + +False +0.785398163397448 +40 +epTail +cCWrTkROLUy3C0VntDGRjwAA + + +False +-516 +-1008 +50 +8 +BOzCR9HOxU+q1mRime4kPgAA + + +False +-516 +-1008 +50 +8 +cCWrTkROLUy3C0VntDGRjwAA + + + +clMaroon +$00B9FFFF +1432,264;1459,284 +DCobZcXopUed3uhu7f3tCwAA +Ji7GcpOn/E2KIxghPULMgwAA +1soCBV2ToUK8JVFLvn+e2wAA + +False +1.5707963267949 +15 +DCobZcXopUed3uhu7f3tCwAA + + +False +1.5707963267949 +30 +DCobZcXopUed3uhu7f3tCwAA + + +False +-1.5707963267949 +15 +DCobZcXopUed3uhu7f3tCwAA + + +False +-0.523598775598299 +30 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +0.523598775598299 +30 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +0.523598775598299 +25 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +-0.523598775598299 +25 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +-0.785398163397448 +40 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +0.785398163397448 +40 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +-516 +-1008 +50 +8 +GPR477SH0U2rZy9DRg9MzAAA + + +False +-516 +-1008 +50 +8 +DFlh0do87UmmJQigSQRsiAAA + + + +clMaroon +$00B9FFFF +1388,264;1359,284 +BUd2VmDLEkKHuqopStVszQAA +N1P5SuGh4EWdFcErHd0tKAAA +1soCBV2ToUK8JVFLvn+e2wAA + +False +1.5707963267949 +15 +BUd2VmDLEkKHuqopStVszQAA + + +False +1.5707963267949 +30 +BUd2VmDLEkKHuqopStVszQAA + + +False +-1.5707963267949 +15 +BUd2VmDLEkKHuqopStVszQAA + + +False +-0.523598775598299 +30 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +0.523598775598299 +30 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +0.523598775598299 +25 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +-0.523598775598299 +25 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +-0.785398163397448 +40 +epHead +XyL91tS87U+MpUc/Z25u1gAA + + +False +0.785398163397448 +40 +epTail +2t6hyyogW027sVhhVrjclQAA + + +False +-516 +-1008 +50 +8 +XyL91tS87U+MpUc/Z25u1gAA + + +False +-516 +-1008 +50 +8 +2t6hyyogW027sVhhVrjclQAA + + + +clMaroon +$00B9FFFF +1355,315;1397,353 +fk3nxDxX5USF8gff9cP5MwAA +0HXL2vLmwU+NgNkl6zVkQAAA +N1P5SuGh4EWdFcErHd0tKAAA + +False +1.5707963267949 +15 +fk3nxDxX5USF8gff9cP5MwAA + + +False +1.5707963267949 +30 +fk3nxDxX5USF8gff9cP5MwAA + + +False +-1.5707963267949 +15 +fk3nxDxX5USF8gff9cP5MwAA + + +False +-0.523598775598299 +30 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +0.523598775598299 +30 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +0.523598775598299 +25 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +-0.523598775598299 +25 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +-0.785398163397448 +40 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +0.785398163397448 +40 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +-516 +-1008 +50 +8 +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +-516 +-1008 +50 +8 +lp0ewCTLb06H/3WjWYmLOQAA + + + +clMaroon +$00B9FFFF +1152 +224 +104 +30 +test-code for unit + + + +clMaroon +$00B9FFFF +1484 +208 +61 +30 +src-code + + + +clMaroon +$00B9FFFF +920 +308 +94 +23 +design-procedure + + + +clMaroon +$00B9FFFF +1484 +148 +55 +30 +src-pkg + + + +clMaroon +$00B9FFFF +1116 +268 +144 +30 +testing-code for integrate + + + +clMaroon +$00B9FFFF +1124 +312 +125 +30 +testing-code for using + + + +clMaroon +$00B9FFFF +900 +8 +76 +23 +task-schedule + + + +clMaroon +$00B9FFFF +893,74;904,77 +dmgxVDpivEyRrIdXr3QLWwAA +5srcgF0EYUyRM6tylL0wVgAA +uI0Vw5nV8k2MpwNxuYq/IAAA + +False +1.5707963267949 +15 +dmgxVDpivEyRrIdXr3QLWwAA + + +False +1.5707963267949 +30 +dmgxVDpivEyRrIdXr3QLWwAA + + +False +-1.5707963267949 +15 +dmgxVDpivEyRrIdXr3QLWwAA + + +False +-0.523598775598299 +30 +epHead +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +0.523598775598299 +30 +epTail +v/43TdYAaEacDIIH0o4rFQAA + + +False +0.523598775598299 +25 +epHead +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +-0.523598775598299 +25 +epTail +v/43TdYAaEacDIIH0o4rFQAA + + +False +-0.785398163397448 +40 +epHead +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +0.785398163397448 +40 +epTail +v/43TdYAaEacDIIH0o4rFQAA + + +False +-1000 +-1000 +50 +8 +jhEbrPQWVkCDWTgpxUyF+gAA + + +False +-1000 +-1000 +50 +8 +v/43TdYAaEacDIIH0o4rFQAA + + + +clMaroon +$00B9FFFF +877,98;904,97 +gFnk16iOFki43F+XSkxbHAAA +5srcgF0EYUyRM6tylL0wVgAA +IjimQpqMbkC8IpOXi07GSgAA + +False +1.5707963267949 +15 +gFnk16iOFki43F+XSkxbHAAA + + +False +1.5707963267949 +30 +gFnk16iOFki43F+XSkxbHAAA + + +False +-1.5707963267949 +15 +gFnk16iOFki43F+XSkxbHAAA + + +False +-0.523598775598299 +30 +epHead +IMPpHUaiT0CFZLcH+44uQwAA + + +False +0.523598775598299 +30 +epTail +Jrscu7bPaEOGr8p3WU+PYQAA + + +False +0.523598775598299 +25 +epHead +IMPpHUaiT0CFZLcH+44uQwAA + + +False +-0.523598775598299 +25 +epTail +Jrscu7bPaEOGr8p3WU+PYQAA + + +False +-0.785398163397448 +40 +epHead +IMPpHUaiT0CFZLcH+44uQwAA + + +False +0.785398163397448 +40 +epTail +Jrscu7bPaEOGr8p3WU+PYQAA + + +False +-1000 +-1000 +50 +8 +IMPpHUaiT0CFZLcH+44uQwAA + + +False +-1000 +-1000 +50 +8 +Jrscu7bPaEOGr8p3WU+PYQAA + + + +clMaroon +$00B9FFFF +884,132;919,116 +O9Ia0CXMxkC9ATowborgyQAA +5srcgF0EYUyRM6tylL0wVgAA +EJGh4IwbYkCWyCQWvIs0cgAA + +False +1.5707963267949 +15 +O9Ia0CXMxkC9ATowborgyQAA + + +False +1.5707963267949 +30 +O9Ia0CXMxkC9ATowborgyQAA + + +False +-1.5707963267949 +15 +O9Ia0CXMxkC9ATowborgyQAA + + +False +-0.523598775598299 +30 +epHead +X82I741yL0ybUyEPhBbTZQAA + + +False +0.523598775598299 +30 +epTail +VHwOYW9vAkeUFUXT+cxoEgAA + + +False +0.523598775598299 +25 +epHead +X82I741yL0ybUyEPhBbTZQAA + + +False +-0.523598775598299 +25 +epTail +VHwOYW9vAkeUFUXT+cxoEgAA + + +False +-0.785398163397448 +40 +epHead +X82I741yL0ybUyEPhBbTZQAA + + +False +0.785398163397448 +40 +epTail +VHwOYW9vAkeUFUXT+cxoEgAA + + +False +-1000 +-1000 +50 +8 +X82I741yL0ybUyEPhBbTZQAA + + +False +-1000 +-1000 +50 +8 +VHwOYW9vAkeUFUXT+cxoEgAA + + + +clMaroon +$00B9FFFF +970,116;973,132 +hIsaQ5I0Y0qxkPCenhTfsgAA +dbDAxqIYDEef6cq3x4sQfAAA +5srcgF0EYUyRM6tylL0wVgAA + +False +1.5707963267949 +15 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +1.5707963267949 +30 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +-1.5707963267949 +15 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +-0.523598775598299 +30 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +0.523598775598299 +30 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +0.523598775598299 +25 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +-0.523598775598299 +25 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +-0.785398163397448 +40 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +0.785398163397448 +40 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +-1000 +-1000 +50 +8 +qb8LVJbh5kG4uilxed700QAA + + +False +-1000 +-1000 +50 +8 +4Ujmk5gLj0WyU3SYagr0mAAA + + + +clMaroon +$00B9FFFF +1035,138;1591,56 ++xZvDwUvFkOoytPg7jDZ2wAA +ba/wrXKu5EuHn69Sc1EByQAA +dbDAxqIYDEef6cq3x4sQfAAA + +False +1.5707963267949 +15 ++xZvDwUvFkOoytPg7jDZ2wAA + + +False +1.5707963267949 +30 ++xZvDwUvFkOoytPg7jDZ2wAA + + +False +-1.5707963267949 +15 ++xZvDwUvFkOoytPg7jDZ2wAA + + +False +-0.523598775598299 +30 +epHead +RYlosGPoG0aBCofSJbKnegAA + + +False +0.523598775598299 +30 +epTail +yG+8cHFE1EeshJkd1dKuewAA + + +False +0.523598775598299 +25 +epHead +RYlosGPoG0aBCofSJbKnegAA + + +False +-0.523598775598299 +25 +epTail +yG+8cHFE1EeshJkd1dKuewAA + + +False +-0.785398163397448 +40 +epHead +RYlosGPoG0aBCofSJbKnegAA + + +False +0.785398163397448 +40 +epTail +yG+8cHFE1EeshJkd1dKuewAA + + +False +-1000 +-1000 +50 +8 +RYlosGPoG0aBCofSJbKnegAA + + +False +-1000 +-1000 +50 +8 +yG+8cHFE1EeshJkd1dKuewAA + + + + +153 + +author +tacoxPrx8kCKprVgJHnvqgAA +6 +nLppBSuFyk6GHv3rvWfvuwAA +1ej51eE+QUW6l7JYARpitgAA +2UnPMw8k20qDwX1yw3E7UwAA +oUU7LbB8z06lO7+JvHxYawAA +7LaXktD+hUO/Zzg8rhchAQAA +G0Zgal9HnkKCrG9Vxdh6QgAA +6 +6Neco6zcl0uObHufbrc7/wAA +RHQsOilQckSyjRNZMJggpgAA +hNisF5EBTE2ATvCijhzvOQAA +sSUjGLtYakKYMG7MJEOs3AAA +6V1phiekNEigGlosS4iI4AAA +6sfC0Hl2I0uatFIXeo2nzwAA + + +tech-leader +tacoxPrx8kCKprVgJHnvqgAA +9 +LqRrN84lGEeTv5o2IgfsSwAA +G+LZrC/lykGqzYIlbLtstAAA +KOCYlVaZCE2z8yB61KBhRAAA +yKTK++/I8UuxNnTadbtxZwAA ++fqlfLLhFUa9tO2ZL52d2wAA +EJOR7NjNj0S9b5XYcTHPBAAA +zxkaRnUQnkGeblZpKwGHRgAA +t8mGGcRMLE6wazEY0Zmr6gAA +6oJrQfnv3E6j48E04AF4ngAA +8 +onJRiZekkkW+HvL7efTCQAAA +DLyG2IErKEu/iLgO368jEQAA +GHPM6mLD3kO4lCP2rqtf+QAA +Fxyv+zwMo0S0Ncj/Azp5dQAA +zYrgxJijVUeKhRuYPCJv9wAA +7VFRD/OOk0CHQPmyBREE7QAA +dr0yGiZ9w0ifqTGL7hJMYAAA +b/CTfa0mFUyr1SeIhcoTFwAA +10 +RtTv62yj8kevg0AAwoW9WQAA ++Lil4MWKjUOC2XYl8SjTegAA +NuLaPfQwkkOm5+Z8IfTRQwAA +NwDa11zhX0qixnczVDBHswAA +2wepYfQ1HEOA25v4ibitGAAA +PW0DMEjQBEykIxMEhQ5JaAAA +vtJPgAzR9kGwh+4LTMVDFwAA +L7XtJLG57UiukOzPeHdrVQAA +XQjB4BPTt0WAkavaXOClKAAA +VpLHTBYio0+yCxvIWp4QywAA + + +maintainer +tacoxPrx8kCKprVgJHnvqgAA +6 +qYv8SJgqPUajzKDRtANOvwAA +5pTwS+Z6lEq+JlcroD00LAAA +5o5h8gI76UOPFFl3iyCbWAAA +hLrtDO2G80+MBE7w/xqYWAAA +2+I7Hr2iCkGIQNrSDaC9XwAA +3sJVGZf+pU+A0jzck8PutAAA +9 +MAKnyTiDo06cPkcuyMVz0AAA +esX3j+a1KU2snuv6WgXrzgAA +bFIlptiTHUqaYGcZ9Z9BwwAA +YwY92xK+JEOUOaknXh7XMAAA +VUF2hqp6/UCePhaBLl598gAA +xg7XA4XPo0GPzFxhulYO7QAA +3ExrMzh4BU+qEom+NkgXhAAA +N6rmhGGOH06+NgfTaWft1gAA +jTxlFtrXok2VlE3EA+IAugAA +7 +5LBvJCvx5U+R0JXvGrtJVQAA +hIwTub9FSkK/mA+8tg3vAQAA +kW2xBvd5ck+7hi+wjeIDWwAA +1rd1mOGAkk26xSFOjW6oBQAA +PltbgL9aKEOMcFQlA6pKEQAA +l7A5rUSAq0+kXr+A6mdcRwAA +hbdfYKhKQEGS3E5YtXQxcAAA + + +developer +tacoxPrx8kCKprVgJHnvqgAA +6 +8ZQdZB1z0kaDUzkVHOzvRgAA +Q4A69uNsRkiKLyZhGHqlPgAA +RfdgS6vdFU63KYKjPfN7OQAA +J56vYtWN6EGOMGIGF6vlZAAA +zjTOREEuZUS4nSu9c4x/IAAA +2F8fgWQwpUafOOb13FZn/wAA +1 +vY9LoEpVCEyXKh6+k1PP4AAA +6 +89CSjktmDk6aTYzK0WeqxgAA +gzYTAF1gIkizg/Vue/2ZQwAA +TeOn6G5DU0iPhLs634h/BwAA +z1R9mDNJ/UyAy/2XR33nXgAA +VD6ZOZdU+UucOrfmGN2ehAAA +MIv+ry9OkUGDFu+OFQh5qgAA + + +tester +tacoxPrx8kCKprVgJHnvqgAA +6 +55htDUboMkKutvJNMs10VwAA +6ZZwa71yx0+LjSxYRPl7qAAA +R6mmC12erkeQ4gBLy7dAbgAA +yTQvkxa2EU+paqJboa22BgAA +spUNNABBB0m9QcDFKPawHAAA +du8mkF0Y/E6rhBNO394/ogAA +1 +jKTbz3HBukOB4vjFAHBjhwAA +4 +06vNfm1gx0OR0K9NmGmXEQAA +S4UJZMo1R0qd1Tyo5YNdtgAA +YldXkvDuwE27LSJywqCl4AAA +nrc3+Xx32EKxZK145yefSgAA + + +user +tacoxPrx8kCKprVgJHnvqgAA +6 +jBby7rVxVkO+HkQ21KY54wAA +pPGvserbwU+ETNWzNZwzngAA +xAzVewxj5EO9A+Ldm9bqdQAA +vaX40+6yy0+QL2+OqVsz5wAA +/0zKkFlFd0y4ssTde7JXtAAA +ihZPVqkPV0SOVKNScRxMaQAA +2 +gIzn+8O0A0ux4mJbpKNkEwAA +4d0O1iKcq0+kIW5Bpb2joAAA +3 +h8kotrimC0Cpk4nuHRgyzAAA +8hHEA5HEUkaJOUrimD+IqwAA +aS8jAO3xFkSspkn5BLzAQwAA + + +translator +tacoxPrx8kCKprVgJHnvqgAA +6 +OS8e8Zau7kWMtinIvCc/swAA +WsUDyP0DbEqd3tRk8yKANQAA +lLwl6ItcyUi/x+g1OzlffwAA +sTVRqiD/L0m+CYPwqsjRYQAA +qxo+NWBQ90Gy4fr+d5nWPwAA +X11dAvxeG0Gw+L7zzawWMQAA +1 +wKnDb+gcSEGIVFdvrqRcMwAA +1 +DcOYQKycgUqgn2jU568/iAAA + + +documentor +tacoxPrx8kCKprVgJHnvqgAA +6 +iDOAaVuVSUO57121Dqj8JQAA +ZSoaGeJlOE6oA2yHk8/u3QAA +3qUjeu+vUEGjudMkYvZkAgAA +jRMnNsOHm0ilwTcHjyhAsQAA ++Bd5Cjuy3kS/2+gRidXBMAAA +qdDfy1OPokez1IabjuMXfQAA +1 +3we00g4TrUSP2RwRD/Zr6AAA +1 +UV6CUGeKi0qg+WyJsqDNMAAA + + +bug-report +tacoxPrx8kCKprVgJHnvqgAA +4 +lwnbG+r6OEegyTwNJ3FUnQAA +634oOmBInUS2gaxmact2gQAA +rVNExfqqBEubnXuOzUsTIwAA +rDeS25h7tEaGwfsBzGSXFgAA +2 +8x8LgMHMS0+ZEvqndI0NEgAA +WX2MlGTb6EOX2luk/so3YwAA + + +new-idea +tacoxPrx8kCKprVgJHnvqgAA +4 +cQ04Yqm8yUWze+0UejiQPQAA +wabWoZkEiECTn+HhKn6kkgAA +4XWH56+npEullggKbfFU9wAA +bUwcFsT37Uu0lm1qXTV5JwAA +6 +zx6gVR7LCk6dAYJetD7d4gAA +86l1myG4S0SDBf07PTiVHAAA +0RWbjevmkUewt0Cz0HxaRwAA +UQOyuA/Sn0+V7QfuwDF8zwAA +05xPD1FxVkik/6PBhUwnSwAA +S9Ht5rNXlk+R/Be2/tvjiQAA + + +test-task +tacoxPrx8kCKprVgJHnvqgAA +4 +BoXflTl2zkiHVb9rTj8+gQAA +AaYidFE7+EeaQRrTwlMiGgAA +ewET2F5E9kG0jnIQOrXD4wAA +Mpasmi600UeO4ulDZLR6YwAA +3 +PKDNpsNf/kGUvFpvwAiMgwAA +LLG2+9u6KkebumqGep6bfAAA +He/O+ItNt0+c+XSWNytz9gAA + + +check-if-publish +tacoxPrx8kCKprVgJHnvqgAA +4 +Vdh7zL8QZ0OtD+C+OlvxpgAA +9nnEfIe/n0qhqtnfVpjk3AAA +KOxxtbd2BkCVFupWEZ87XQAA +zW1N3bsNtUuzR/EjyyD3OQAA +5 +l+pJXTVuVEOXxepPp7tpmwAA +m5bOddD2ykOYQJ+JqC5GQwAA +P1DmfF8A8U+xRvMvkio6ggAA +zaihnGbFv0SYjieuD3Ii+wAA +XNH/vjJrPkeWiAnFueRS2wAA + + +bug-fix +tacoxPrx8kCKprVgJHnvqgAA +4 +vIM1yyr2zUeK8LOSwJnagwAA +We6DNRfsnkmrfVI7WoAPugAA +EDr1FZbaVEuIqOX/2tvVgwAA +p8wxG8B/XEKJ6aXtVJv2awAA +2 +xQhxxFEtpECHagEXOLUIWQAA +UFqxiSQgyUeoy0qNucDjhwAA + + +feature-list +tacoxPrx8kCKprVgJHnvqgAA +4 +1XmGBT1/RUKVRwCIItHBqQAA +unl82IKNKEqW/ZUy2OKO4AAA +miBSD9UWRU6FaRwjnVT8swAA +n+5DC+YcyUSIEMqbFpvGCAAA +5 +cekDFk5ILU6GQvHycWgn2QAA +DWmCv3GYyE+A4/wxNfV/TgAA +jqMq51leBkGUbLZ/J6mVggAA +TWHK+EvM0kuJxrZGPnmV/gAA +gL33aMDC5EaM1KvQAa8OywAA + + +develop +tacoxPrx8kCKprVgJHnvqgAA +4 +gzOBaPhYH0Sqi38GA9ka4gAA +w1eKl3jLok6dQE3JB94YKgAA +N0BSH6oaTU6JSCzmTl8vsgAA +zLCn8+123Uu75sJijDTdZwAA +4 +9vaywntHRUS9MFakEmMvSgAA +9H2x6+kFc0eo6Z2KrSpZMgAA +M0pjGsRCsEy2IjYa560UuwAA +Bkj3nzY1Z0OpLErETn5JAAAA + + +bug-retest +tacoxPrx8kCKprVgJHnvqgAA +4 +t5UaBajz3kuwVYgFf4H/6gAA +1GAx466sEkKGRO0kCp33KAAA +2ZG7bQGVzUWNkSGwUMturQAA +RSFmeXj4YE6WLZX67O2S6QAA +3 +Ni4/biH/lE2VxdPr2OKnEwAA +wki5AWxXakSVFXSFIAWF6wAA +8lZk7+ScDkGsGw40b2zWuQAA + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +rLipCiuNnkCKrVs1Dppf/AAA +k6w1Bteav02GGDrC6cJmKQAA + + +rLipCiuNnkCKrVs1Dppf/AAA ++JrMCo45qEOWtcTsDjqTTgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +UWFTE8BDCkSEe3YOn84GrQAA +k6w1Bteav02GGDrC6cJmKQAA + + +UWFTE8BDCkSEe3YOn84GrQAA +8v8IRJdlJUmbHIylKGey5wAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +fPubsZnsN0OJ6WOaq1H5aAAA +8lQQB3J1o06qDEWADag8/gAA +WieLh+QA7k6+yEd3bSw1SAAA +gSPGOiEdNEuyFfKarlynsAAA +2 + +False +Zk/ihiJuFkm1nc08/lO3JAAA +8v8IRJdlJUmbHIylKGey5wAA +4 +JD4nWCXdqUet6cDY9tDd3gAA +F08DdZDlv0q0HVSEEw7dSwAA +7YM2x3Kz5kikaN9Vmz23KQAA +t8hbDZginEqDchu7EzAtzAAA + + +Zk/ihiJuFkm1nc08/lO3JAAA +rxa+oNm2Kk2e9yVRZgZC4gAA +4 +NNgL2DXXaUeoy5NCLXCTBQAA +XFlX2yGrbE6yNbCg7/LyewAA +n37gTKmZAUyChGFyO8WG7QAA +Ku1Y6FRLF0i51DAGxutpLAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +L/XvVYcg30OYQxS/1zrxCgAA +N4hlcI+mKUC+m0HhgvEqOwAA +NReszVRhfUKi44MHBhssMAAA +ewx0DSFyDUeKMe1loomMGAAA +2 + +False +ZYww4bhgbUujMdsXvrsGRwAA +fIx21ILIBUuXaoqKHt5Z2AAA +4 +5ykAGIN8akm+5iyaxICZEgAA +OFRV00KjoEiTYfaWFH+UywAA +QudUJVb+Hk2Diq0z4wQtwwAA +Fj8cEo58fUGw8dLpnuo41QAA + + +ZYww4bhgbUujMdsXvrsGRwAA +5JcsdOcl2kmUJ1xczZEQMQAA +4 +ry5zWkM330e/Jyq2nAqAPgAA +Gxdf4jHwM0KTUKMNkLGg7wAA +Dt7MGyVATk+r30Xwpxc7kQAA +bve9pJQnekGLVWbdvRS1hQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Sy0UyIHXHU2/ebKqVry2IAAA +Xq/XBhAjWEynmKXYmK4D2wAA +APEoSymd+UqTapvOaoTpqQAA +zJ3xlPYUtEW1e9Qdfc8mAQAA +2 + +False +u+LRK0aPeU+CvKL8BjN4+AAA +UtnSzF7bC0iukjII33XrugAA +4 +JxGA5uJESk2MhV27HtwkRAAA +Mb/iubFANUqY7j7ijlpP6gAA +YkX7H7Zt5EewPJWI5pJcTgAA +9exoDj9BU0mU0d4v1p1I9QAA + + +u+LRK0aPeU+CvKL8BjN4+AAA +wFR71rqQ/kavPS+ztzufLgAA +4 +3B6bcQ28K0qIePRIhMLx/gAA +EO3LmJMCfkiB87aUhqVz1wAA +81EORfyr30GhxjgRMSlsDAAA +1DUg+607CEG84+ifMI9jHwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +SR+lhqG2VkS85GKgVr4OgQAA +yQFjSnTLFUG6RKdehm1PfAAA +fVvRkqkPhEur/sLEGG5gIgAA +YPIwLlunYU6nARGBZMmXdAAA +2 + +False +Q5rq4hug80amVs0OquyiyAAA +ymnyuU2meUmuFQCl8KW3EwAA +4 +9Vn0AnxUS0iEZmCg5zFq5wAA +U79XDob2mkKddWcOf7rOVwAA +uBV2hvPo70iQ+3Znq+k27QAA +zINn6IQQ5UKucIti2VEvsAAA + + +Q5rq4hug80amVs0OquyiyAAA +UtnSzF7bC0iukjII33XrugAA +4 +Z/S1yG7Xs0C9XUP/GF9HwQAA +X4MciX+qy0awACeY5pAItQAA +TiCYBwm+TUib4VPH0BfH4QAA +/+MFfnkS/EaAfGeSNQPzLAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +sFjq/YNNnkGyuqGL8j09XQAA +5JJTfYLXMUubHFTpSMWkcQAA +GK5AklYlFEGV4gMEGxbkoAAA +m5bxj0wAHEKq1kq0Wqh99AAA +2 + +False +Lslcq+/wp0+7suaGPGIyVAAA +wFR71rqQ/kavPS+ztzufLgAA +4 +jzvWBb0OoU2Ux9UPntIHZgAA +59prGpA5EEmNhyV8cjBTMwAA +w9nI1ZdDuEeC6vWYoGBw2AAA +6XmugWGmxEW9E96QRUZpFQAA + + +Lslcq+/wp0+7suaGPGIyVAAA +fIx21ILIBUuXaoqKHt5Z2AAA +4 +FUgvbIJLH02QBj4Xw7kxugAA +selCGBBXDEymq17D9kSVYQAA +Pf6EEag26kej1e92R3JlJQAA +tSHDw1BT2kCMKspRtmDR+QAA + + + +doc & tutorial +tacoxPrx8kCKprVgJHnvqgAA +4 +OJNZyLkPgkW5YFYA5x/ChQAA +bfOuJlVHEEeu2T5S+l6VDwAA +gLaJGOxaI0CF/Qfa/zpwyAAA +wFcfBTWPIki0mu20Xv2DsAAA +6 +UjrU3zr4ikWZcD67/VJ22wAA +/91dQ7rhgUSI28jqjPHooQAA +UVpvR8JQo0Goo1thnZ8TQwAA +8zPYwZBWOEuUZxPtPgU/YQAA +m5jTftKx4ku74ElHxxMotAAA +yYIJFraZbU6Xh62CJfSi8wAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +CyLz987Yx0a9lbcL7SoWMgAA +AhCsuzIlRkW8R8jxObOIOgAA +MshDZxITwUuAI8EanqUuBwAA +KgraZq+q1EeEN9cCmIoc3AAA +2 + +False +QAFwbnInOU6vOm8b8SgmzAAA +oWDHE/AIyEqhL2zTdizC4AAA +4 +MjB41fYRRkeOWPYi1mSDNwAA +79jmtZfAbk+b7RrS1J8G8wAA +VafAtxP9eUqd2EyK2Zv4YgAA +/ZWIU1XDyki8c6Icr34klgAA + + +QAFwbnInOU6vOm8b8SgmzAAA +fIx21ILIBUuXaoqKHt5Z2AAA +4 +xYpebV5nwEKGEslHsNqBPAAA +mQ13YjXbH0Ov8jcHlE1sHAAA +SEVCW0KeF0+e2/I3sLziggAA +cU8aRSvXrk+YvWt5FpiOKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +DLeIpH/Vp0qz/k4Z835fxQAA +MLBX+NGx9kymQ76b9EAKuwAA + + +DLeIpH/Vp0qz/k4Z835fxQAA +k6w1Bteav02GGDrC6cJmKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +lyrV25UpIE2C5MemvaVCwgAA +A/9YWnHJBEGH1jC8FI2M9gAA + + +lyrV25UpIE2C5MemvaVCwgAA +k6w1Bteav02GGDrC6cJmKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +5Y4DPMdp/kOYhqjVFGVF0gAA +OG2PYYcnHky35qJfwJh4qgAA +sq/inVtUT0iJnxjV3mRDMQAA +8RoZjx2ZxUqloF7q2taKnAAA +2 + +False +otl6N6twSUqOS1ckH+zvkAAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +zu6VFQcBMUODfmyo6wewFQAA +7rlTm+0OOUuqqncqyCOO2gAA +X0S6Ww7LtEmtkuQtl9sSHwAA +bGxdMvOXXk2NUPsvL7epowAA + + +otl6N6twSUqOS1ckH+zvkAAA ++JrMCo45qEOWtcTsDjqTTgAA +4 +UpRN66IG20+BFv9v/cMFNAAA +w/WOK184rEemQsEXKo4phQAA +VWo1XbHSpUqAbWBG8Y1pmQAA +rg8w5tv8t0aL+onnxygB2gAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +hg8RO1a/B0qXE38vkUxToAAA +kgeNjAQDpke4/lNPm0LFAAAA +U+eCEWvk6EOEexJsJJdZdAAA +RUif+XapP0uGbbHG6ycMYQAA +2 + +/wV294vExESRsoCAG0SOGwAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +FqsiT9jK80uNARuQ3/AG5QAA +5P+VWT1nWEaSbfjMQy9BjwAA +zLaq7AqXFUiKHqNhg8FbOAAA ++FmtNecuYEKbk3Gd+zdrJQAA + + +/wV294vExESRsoCAG0SOGwAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +nHo+Mxd4i0iHZ+AQpPJ5fwAA +7KGAiedyz0WKUUF02ncA2QAA +Garb0zenNEix0LX/kaUszwAA +OX2NXD48IEyoOoxVnsVPfwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +o8jS0zGz6E2LAIlZNGWlcAAA +3/xIB6tCJEiuQ+3BA1D6+gAA +X6pIR5c4ckquwKbxtZgVJwAA +m874lnl0+EWvpF1V8NUfmwAA +2 + +As4jKIWMwk6c065+KZeGGQAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +HXrLE5esF0uyX+nXhGDMIwAA +KGe3EGq+xE+HhmH5w3i83gAA +RSYLHup0/Ui7ZXJ3fJL7pQAA +RuxQL2GTgEOo7mrXkSVvXQAA + + +As4jKIWMwk6c065+KZeGGQAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +a1hWjFvMzEKXg5P9yee1RwAA +8s/0yPkfbk63cY3zI0R5+AAA +5jur5jS15EyAnqY1Mu4dyQAA +IBQMJpgQTE2tqdMPKB3twQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Ukj9dkUAW0e0jMz7p9y3XgAA +gqf6o2E9O02AkOUFqATYEQAA +GNlx1cSQCEO2PMGBUXWYqgAA +GJyZzEhwd0ukYO0vnk3pVgAA +2 + +qSMM7YEtUUmnkrz3femcAQAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +83SS4KQg2UqD4zRlbhXGMAAA +YJHqwqDBpk6QlU5T8J2e5gAA +05ukk/GNr06GfKat3GnCzQAA +BFA5eZ8lYES8vRiBQkZPEAAA + + +qSMM7YEtUUmnkrz3femcAQAA +oWDHE/AIyEqhL2zTdizC4AAA +4 +cHzC9/NikU2NmptitY3gWAAA +JNc5ZjqPyEmEOy3uzsAFJQAA +X4/XaVGceUanYzAF163RhwAA +mBoJo/CYCk2+zejGQvvrDAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +DJ0vcchCY0CnHUnEhg0PEwAA +Bod4/k93VkWAJYk+f1yCeQAA +qJdNSfyuP0aFrWccEWBh5gAA +51N2HoXKo0600H7B4oOnogAA +2 + +False +QOEK3K2D6E6pqfTn0mjGSQAA +78O5f65/80OvpHK3AuBEIQAA +4 +PxuPxbf3F0mC6au1o42IuwAA +kdL930heekGPN3wEJHjDDwAA +Gmmlyr4gikOkIE7XSvtR5AAA +jGjpsCoc9k2BRUpeT8rHfgAA + + +QOEK3K2D6E6pqfTn0mjGSQAA +UtnSzF7bC0iukjII33XrugAA +4 +VpHIAv0gY0qmux4wbRVLeAAA +RW86qpqkyUCbJ3mVC8Yx9wAA +vP7AWBLFCE6fK8fvqa4SPAAA +b6K2ECYEiE2kI5jZVHhrsgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +rz0WGeAcf0SlqjuWwQwFcwAA +/rHWPGqA0EyYC8g1ohy0TgAA ++T1/+ZcXoUeUINJPUPZIlQAA +5j3yzrxHI0K34OA7BeXzkgAA +2 + +False +BunHMt9UUEaob51EuVirsAAA +u2JHX3nMn0CMyZLWTG2R1QAA +4 +wUOEptHUakSY6I/buij63gAA +Y5rhnjzJgkusxyp77WFreAAA +xavYe4pYuE+1GKIeCKVcQgAA +k6C4zp4DBUuxfcDbLW4s4QAA + + +BunHMt9UUEaob51EuVirsAAA +ymnyuU2meUmuFQCl8KW3EwAA +4 +qgHNFbE1yUSwxkP/sxtOJAAA +RhMu/pC/Iky065R2MwtEwgAA +LcHniQlwIUq3d4uYh3FjygAA +doeBGPbBvka5YzQ0Ety7BQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +KlnhplKJpEq9N4P3dZ0ccAAA +BOKhQBgkKE2PMWbp+G68zQAA +6e7NIB3pLES5O663rvpGEQAA +LBpamqW3qUugvknaG/5UlgAA +2 + +False +GkzxRdxRNkmn62ufJTw13wAA +5JcsdOcl2kmUJ1xczZEQMQAA +4 +0pj1G6QgAUi8yEL/QWtQYAAA +IwFFivWGCUuaGzQsRihSUQAA +Sgawiqqpx0ar5pnikeHcqAAA +vvj8L/FsF0KQt8Rv6nc+xAAA + + +GkzxRdxRNkmn62ufJTw13wAA +ozTLGGkik02HnJ667z5MBQAA +4 +HnVyaVwk6UqV4iof95F/rgAA +v1VAgbR/RkaonfOW9OfdSwAA +u4aWUY6eukmgQJnoeSmYwwAA +eS7sNcPgS0+PtF+i93PYHgAA + + + +pkg-publish +tacoxPrx8kCKprVgJHnvqgAA +4 +7R3Vtrr63kqhX5GzE7CY4gAA +ybuDZxrjnE24r0UbRgKqBAAA +88FpyAWY+UaSMKxPQD00qQAA +Qo+BUYj3w0K/jgQjuB4yzAAA +3 +ZCmKuqp4sE2/fLQrj5OH6AAA +MVnve7DJ0kSTrd01IVyX1gAA +6sd33lS3GkaENMAtDneYfAAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +VhZmB3uX7kaXnUWAdCGB4gAA +YHm3qWODUUWVW2CwTpLTaQAA +AE7QJjoB4E6T/F2wKOOQxQAA +1g4pudaRik2LByHmCigqngAA +2 + +False +atCUWqlo80uXI6LZ5VXAqwAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +FKOFyiXvw0iHjVXwyiZYqgAA +jILNTK/UXkWbJ6PxKPqDmgAA +qCE42hVjhEmwLIeOYimZJgAA +0bG7hQ2D6Ee0BMVHxFBNJQAA + + +atCUWqlo80uXI6LZ5VXAqwAA +FPjdKo5EqkuvbojCyT40wAAA +4 +4YZYJ9ZqD0e+ntjPLgKC4gAA +aP94sthRMUW8RTgcI9WsxAAA +1W0tSTT/LkSjIRxLUHi3JAAA +rnLRv+afEE+3AAL7HweCiAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Czjit70NTkyZKNjNdrecFwAA +LuU0Vft25kKxcILaYN9CdQAA +2sN7szkqhEus8hafmL5knAAA +ID3nS40y6EuYiL6ZVikQTwAA +2 + +False +VSr15ngAt0ucp/JSndd7fAAA +ozTLGGkik02HnJ667z5MBQAA +4 +RdZn2kfGcU2ncgqckMujkAAA +Y3wW9nCYf0eJQiKVTYEvOQAA +VhY5MGMR3kSEQMt2k2P1OgAA +538+xh2rfkyNzyyfuzNaxAAA + + +VSr15ngAt0ucp/JSndd7fAAA ++JrMCo45qEOWtcTsDjqTTgAA +4 +yka4fXbWQkWFJKSoFEDfOQAA +rNCF76BXd0WCwPP15XkCQAAA +3aycythwb0CBYkO8MqrmJwAA +ssKESmY0xEWVLBdE7OS9XwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +J7z2l0td/kS0hlue+2WNYQAA +VR+Aak79+Umgp3bA27YoRgAA +ifeg97N6WUiKvJUWgPOTWQAA +rUKAMmrrwkSGDcTXoCJBCgAA +2 + +False +t3ESzDEjd0ut89bd3IyWPQAA +Pu4+pL+iiU6lRzDtfLIgJwAA +4 +gkgGZ5XPq06Yq8H6/mhxGQAA +MU+LMLQy/UuMhldHl2jTHgAA +QgcPkrmTp0aOp/pigNvWDQAA +h9IwxH5j+EKzjaILt79S2QAA + + +t3ESzDEjd0ut89bd3IyWPQAA +ozTLGGkik02HnJ667z5MBQAA +4 +/CIUOEoegE2GdBSsuNrBcgAA +rDaPvFt+JU6hhz1f/ruuQwAA +jKF1QEu3K027LQII/cNBHQAA +WCH6wS+B0UC0GOaYvqf4IQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +oN3tAssrmESYbJ7DnDbJBwAA +7ysOtBF5OU6C7B5SD/LNSQAA +oaVoZkRA7UCX5U0gSlyRowAA +fZ8hfYZLE0+6wSSSLnMIkwAA +2 + +False +j2qfJOQnLEyR5RVtbVGb8AAA +aaiB2ZAB7kOSB9niWMGCrAAA +4 +PNLBgWLlt0qh0qSiWmm6fQAA +sBLEv0a6MUOxVSIjTI7oRAAA +iFFsmLbtvkyYY6NDPf2kEwAA +9ngGt/WHPEOVYrMQhnNZ5gAA + + +j2qfJOQnLEyR5RVtbVGb8AAA +ozTLGGkik02HnJ667z5MBQAA +4 +Sc0OIQhuoUidWTJx9x27pgAA +72tlEmphJk6IXASFp9X90QAA +xmWLUGETMkOoyFeatsLLRQAA +3uuqO1MbXkeeqkPqmxsoaQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +hJRk9KPU+UeHMYRbZjP9rAAA +j6VFeRd+Zk+KQjIP8kMcLQAA +Bb1h473Ln0CI2BMiHfpkIwAA +XUZPy8Cf9UuC2K67UdYxgwAA +2 + +False +L3wUC+fjukG9Mbmq0QYdiwAA ++JrMCo45qEOWtcTsDjqTTgAA +4 +7aqzoShHzEehoT62iqdZxwAA +3bht/bebjkaXO8woQb1WBgAA +MRKVz+IA1UuD2xpuZyp/oAAA +3m6+IGlmjU29wgIEQCRA2gAA + + +L3wUC+fjukG9Mbmq0QYdiwAA +FPjdKo5EqkuvbojCyT40wAAA +4 +ut1qqbJf/0+LzAbSHfgIWgAA +aDRG2nt4jkSjokdzljbhwwAA +n3N2hwYIO0yFMlpxJ7peaQAA +lEr7AB6W/UacoRJesmNIdgAA + + + +dev-step +tacoxPrx8kCKprVgJHnvqgAA +1 +Okzvn1c6D0+Yg2dWMAvJaQAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +ARENPNto502mBSSO/cnOHAAA +2tWkSXrKQU+2V8FO46j7TgAA +QepaXmVy4UO6DCEgKl2vlgAA +nt6ZlS30U0SdfHYYR1O1bwAA +2 + +False +ESsTAdhYyU64zi6/oVqTKgAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +J5lkR3i3wUKycPleWHDTIQAA +voEc49klakK8QbtZG2qiOwAA +11o3SRF/yUWFDDIRfrSFSgAA +O5+bHbxyC0+bdQMM/tgFqgAA + + +ESsTAdhYyU64zi6/oVqTKgAA +8v8IRJdlJUmbHIylKGey5wAA +4 +Qn3h51Gw80+mPHTcNEs35QAA +BT/LIA7EAUqDxudgpaJCqwAA +aRMFIiI8k0yN2B0jGd+5EAAA +LXxWlKm6rkWV2zrq9dgykwAA + + + +design-module +tacoxPrx8kCKprVgJHnvqgAA +4 +0NZb34oq+0iz6/8DYcniywAA +dP9LP9rtuEO+i3avSgAGVgAA +nMpMGReseU6Kct5O6ks3VgAA +7Ykp0d9JCkOp70mCxl8J5QAA +4 +cqCsUEAeA0in0Z2LWweznwAA +iGT7GmF0r0CH0TSScrk62AAA +sHxTuCDocEyzJSz3moadcwAA +gIU56iDnlUaFhBS+rQgjwgAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +D+7+lRtL20CwVpExOSBX7AAA +oVw/jiGMz0C0iTNLLteJDAAA +JKuU1ThtKE2xQ1f4Aqnj4gAA +jN2kHhJMu0StmPqVq52n4QAA +2 + +False +udZiFgT1HUuXSsB17nyApQAA +rxa+oNm2Kk2e9yVRZgZC4gAA +4 +IFguHS6Qo06X/Ulso405AwAA +WUvJoZKV9EqzY5IvmGwopQAA +1x7fD+aqoUyyaQ5pbw9SEAAA +leTm99c2L02ZKVnOiVJgWgAA + + +udZiFgT1HUuXSsB17nyApQAA +fIx21ILIBUuXaoqKHt5Z2AAA +4 ++bEGPey1WUGgjGGgZLap3QAA +wzt6WGKB7ESFZTq6g9VpEwAA +1ILZi1CbdkiyGDrCpDDKlwAA +ao99dAh38UyNcJJhz93rNwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +4MaPAdQQfkmUFpuWT1PHmwAA +F2UqhwXe80yk7JK6L04XBwAA +nYYAkY1enkKoJFwILoBHlgAA +HuQAUs9y2Eao9ac5QhECtgAA +2 + +False +pRL6RWX7IUGI9SeSZRJAEwAA +78O5f65/80OvpHK3AuBEIQAA +4 +m8RN+Neh5kWte9e96DlsaAAA +12G/TZTZU0qEeu64QA6VzAAA +kmLtEPc6gEymKXVYoCB16AAA +CjGJ3aMfGUuQto2I1CNm8wAA + + +pRL6RWX7IUGI9SeSZRJAEwAA +5JcsdOcl2kmUJ1xczZEQMQAA +4 +IlxqCNXp/UyYHUzZVYvcsQAA +EJRHT+wc7kmdr8+/mZ6uDwAA +veH3hs7Pwke/ekic2iLsQgAA +Oj6Ju1KupkSFy335XdgZKgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +2l+fNLxcTEylJYcIIiDgwgAA +5s00rboppUq3tLlx9FoH0gAA +fM9i9Yaj90Ob7B0dimgDYgAA +E3qBcsRXvECWJCWON6Z2IgAA +2 + +False +Haa/HtHu8EumDcJn1va7CgAA +oWDHE/AIyEqhL2zTdizC4AAA +4 +iF9DJxKvnEWdlnsFZiL0OAAA +OwUaQ5wAUE+DkUi0zdPTOQAA +rGcSLsaV1EqNaT6crweOGQAA +P3NpWkuCd0+OeVdtAOsadAAA + + +Haa/HtHu8EumDcJn1va7CgAA +ozTLGGkik02HnJ667z5MBQAA +4 +8qM5hRSWWE68NwIGkB3CFwAA +Za+gZMnHAECWRhLalgbWrgAA +ClGq0qJLCkqpfd5k0CmPRQAA +YJbGZPdFvUOBS3uX0q02HwAA + + + +build-pkg +tacoxPrx8kCKprVgJHnvqgAA +1 +n/jxS2ae4kuHCG+KzrGgtQAA + + +build-config +tacoxPrx8kCKprVgJHnvqgAA +1 +GXaySoAyJ0qZ4VKE8gVC8gAA + + +build-pkglist +tacoxPrx8kCKprVgJHnvqgAA +1 +voQgF26qyU+tJv2JRt78GgAA + + +devutils +tacoxPrx8kCKprVgJHnvqgAA +1 +M2viQFzR7kKSo4AiZxz9dgAA + + +codemngr +tacoxPrx8kCKprVgJHnvqgAA +1 +xnCmPbwYs0qrDDBl7cz9sQAA + + +soft-repo +tacoxPrx8kCKprVgJHnvqgAA +2 +7NCDjevVfUa8aWdQ8GgHMAAA +gKBHXghpeUKFepoXHyXpvwAA + + +devspec +tacoxPrx8kCKprVgJHnvqgAA +1 +vnVOoxtjQUaPd3N/Mn71+gAA + + +download & build +tacoxPrx8kCKprVgJHnvqgAA +4 +DOHBlVwZH0CnyAOdMPUqxQAA +Km3rwjMun0+5NDhhHXm5GQAA +JRnPcdhgf0GhE4NZqTmUyQAA +07vEojIcbEqh2llQKPlxOQAA +3 +tMwNvnbWx0qC99wvlGYF3AAA +VvLdglslUUqBPX/aHaWVywAA +9QetYTXGJUuUfmUAHqUS4gAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +4j+FYeH/A0WfZtbw+agk/AAA +HdfK1M7g00yeb9gq8cQwYQAA +t32yCOrpQEacMTjogEZyYwAA +RJgmkH5hk0mnzfrNKsnC3AAA +2 + +False +wARDKsfmxU6pDs0VU6O25wAA +FPjdKo5EqkuvbojCyT40wAAA +4 +ygfFznufl0y0T3K8r5hlkAAA +PIELQcytDE+hPTNaBNiuwQAA +jI6Et43WQE2zDN60+cjlIgAA +YmoNlaGcA0a8fo4lXqv+uQAA + + +wARDKsfmxU6pDs0VU6O25wAA +cH75vr0YhkuvV/fYij/FMgAA +4 +vX3yKNnf9kWT+KdSKla1cgAA +eHuBA0XdyUmhMo3B9ab0AQAA +OfnE0o02K0+ASmJ1zRdiXgAA +hQCJMBooikqa1DS/O6iTZgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +kvMDTC7QZECLLi+bfmC10wAA +VoUNBOUjkEmAMelwyyIhTwAA +0WzY4BhxFkyctNved5yIKAAA +Ib0YeqIjLE2HWXxd+ODqTwAA +2 + +False +NRxXI+ohkUa8ldCSWR3lNQAA +u2JHX3nMn0CMyZLWTG2R1QAA +4 +0jbEs1Oeqkqgv4k4euSItwAA +ubjxV1WOlEal88NwYpdXjAAA +vpAsZ9TOC0SAs0znqYREbAAA +JAFz0ssyuUqRfHHTTGFBXQAA + + +NRxXI+ohkUa8ldCSWR3lNQAA +cH75vr0YhkuvV/fYij/FMgAA +4 +oicOAnPBqEeBGOYO0zKOdwAA +SHrGxXFE4E+JFsETvnUisgAA +gYabRv0JmkS5BbfVxNmTzgAA +MRinMx5ptEOv+QF74paAiQAA + + + +new-demond +tacoxPrx8kCKprVgJHnvqgAA +4 ++xQR3R4Khk2Mr7tmPdkWSwAA +lBSUAk54IEO9/+7rsBiabgAA +SHPjTX3I+UasU0SECLayjgAA +GaHNfivTfEKsvmOcA6hT6wAA +4 +LgaAK4fEB0e2otJzSn7toQAA +hU4yh3LkjEKFkdS6cl0FBwAA +RKdpd+0S+0OaYFIwovSw5AAA +g4nzG5AXAUmT/Juw/Y+HhwAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +3djyNWh5qUO+iA3WzB20KQAA +vkj0BOoRg0qr8lzo0Z8UyAAA +veywQG923UCpJmHqy0uBQgAA +xJfHk4n1e0e9blWmKGQ2KQAA +2 + +False +HwNxguHxkEq1TTvntBzfPQAA +u2JHX3nMn0CMyZLWTG2R1QAA +4 +28qijT2f9EC/y3piF0/+OwAA +B5QJ9P4hf0uJyfwdf7Rw/QAA +y41GheG/aUSOla4Jjw2CrAAA +u87KZbz6v0a374YpZrGucgAA + + +HwNxguHxkEq1TTvntBzfPQAA +K/jI5ejWkEmd+RwmoOHzSgAA +4 +b9VVWnuxUUy0gytp8KpRmgAA +V3tKgSpL1Eu0kYg13PnjhAAA +nM5w7GSejEGEhI+IZJlUGQAA +vkJuk8uzxUi8zC+a2EkAagAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +MAiiKxGK/kKDbI0OJK5r9QAA +k/63DwjndkiLReX2QpxL6AAA +JvDTgvMJuUylq++u0waS8QAA +cXH/C205ikKf4GPXGnXArQAA +2 + +False +JDSYiscd1ku4Q9VTc3cxJAAA +78O5f65/80OvpHK3AuBEIQAA +4 +5KGEQZPXtUa5SXo3rpaRKgAA +6wB5DLUFQU+RrP2KOUtcTQAA +4OmKSfO1oUKfuQp+h1hWZAAA +xxxm+L2W8kCan9BNPKWsRAAA + + +JDSYiscd1ku4Q9VTc3cxJAAA +K/jI5ejWkEmd+RwmoOHzSgAA +4 +u4UXJfgnQ0eLHbqR0iWixQAA +rhAybtEUtkOwXV5kWFtzzwAA +JC37Y9iOX0uoXkBqmeqeKwAA +uRnWFV241Eq+9UWbGsRLmgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +GbYPWnb7/kS6XkGQmFc6wQAA +K/jI5ejWkEmd+RwmoOHzSgAA + + +GbYPWnb7/kS6XkGQmFc6wQAA +k6w1Bteav02GGDrC6cJmKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Nprb3bcLoUC61BOosZ9+hwAA +eygKNnDk3Um2veEIU6qg/QAA +l77tB7orTkiaZGrlQF3L0QAA +hJ0tc1S87kqSAuGX4+RWxwAA +2 + +False +COsG4HSpZUe/Vic0aL5j4AAA +K/jI5ejWkEmd+RwmoOHzSgAA +4 +2ZL9sACt00qx0Cg3iKmTLQAA +MIT8/Gv+e0Ws6jjGmNmmRwAA +AqAynQlGr0a1papQOgqXLAAA +rOXKiozVPU6e9pH0bYSg9wAA + + +COsG4HSpZUe/Vic0aL5j4AAA +8v8IRJdlJUmbHIylKGey5wAA +4 +jIsNFDdsRUWTT/OvN3ztnwAA +SUFcnz8a9EyTdHbW/lUdiQAA +CCkLRFuVRk6SFqbFPXkadQAA +947HFL6RbESshkpOTCj6YgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +2 + +False +uyacuCS7AEOEyOJVoSre4AAA +oWDHE/AIyEqhL2zTdizC4AAA + + +uyacuCS7AEOEyOJVoSre4AAA +k6w1Bteav02GGDrC6cJmKQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +ZbjLAPzqb0imjL9CBZqQ6wAA ++/rTqhVzAEanWKk5UAntOgAA +zTb+/Fnwd0CoyaRDml2Z2wAA +RTy3JBPgPE2M2q3nGOEYvwAA +2 + +False +eD6wP/fAO0qZXgTPDYw14gAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +wRmuK74HIUOvDrQoi+BSuAAA +6hCTfmWvn0yyP3giXUc9tgAA +5gpoE+R1G0iDKOkRu5zLPgAA +ccQzOf52xEi0amCF/8K9BgAA + + +eD6wP/fAO0qZXgTPDYw14gAA ++JrMCo45qEOWtcTsDjqTTgAA +4 ++OXDruHvSUSKNXOy2wGb3gAA +qE2GZ6s1ukyBLc88d/1nvgAA +Ej6+aNOXQEGZuM8hFdotdgAA +e13Bn2S91EWRco7/lFEK6QAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +zndTLn+VeUWCBso9iSlxIAAA +7We6jKhRo02CFGApUPu5qgAA +VWLLVa6rK0K9X2l9yy6DOgAA +Xc5ZA57kP0ml+tO/lPS33wAA +2 + +False +ijA0VzIZG0G7ohk808I7EAAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +GN/OGGMWgEaSB8JusgHu7AAA +oh/G+M1SwU6NDi3PJjxQ7AAA +ManByBkfuEa/QuAb9KyCegAA +KMXug6TF9kKKVD8hfLqKzgAA + + +ijA0VzIZG0G7ohk808I7EAAA +rxa+oNm2Kk2e9yVRZgZC4gAA +4 +7WIytDVyn0elYv9g0jIlFQAA +euqRVFPROUq61icLqYjqiAAA +pFN3VBz/gUegQqhdFPISVQAA +qS0GuIHmW0mGCwTQiKbaJQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +oYCpI+SVFkOQu/mdPxc9+wAA +az2lLUGRQUupbW9hQCNYSAAA +fTmol6tRDU6DqEmfzV7ghgAA +FO4VJAOJpUKdBPcB6bzb+AAA +2 + +False +tV4kKe/RSky6myfeSP18swAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +P2T82CWlhkeOIk7xG1KUrgAA +SN/k76NOskujX25BHIRKawAA +lcCkiyfNF0KupPJcTuWI7QAA +05j+Q/HW00uw8j4mIwIEswAA + + +tV4kKe/RSky6myfeSP18swAA +ozTLGGkik02HnJ667z5MBQAA +4 +gKhPIz5mO0eoPt/x5JSGAAAA +njDa0vrYDkm1DGrCHjymvgAA +KotcZ3zFRE2Em1BaxReehwAA +UCRIEOg5i0+H3+S0YsVRywAA + + + +launch-publish +tacoxPrx8kCKprVgJHnvqgAA +4 +PPr3wQqIsUGCabBRaWDJzgAA +djEhP9lNSUK8mnKeulkyPgAA +hCToqxtIk0qWtMLlSe0z8wAA +zD045480Pkmhr1WF0ULGdAAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +G7+qnUqDRkCl7KxPlw45aAAA +Lqdtm/Vix06mrQ7wczG1YwAA +227qZ5x4bkmZX296Jdp8hwAA +X+hRi98oq0mH2HPVYPg2tgAA +2 + +False +dK9I6bZRfUih3ErZpfx4hAAA +oWDHE/AIyEqhL2zTdizC4AAA +4 +USu5nDow40GMAnC3n0zdoAAA +ABjVTWJiuEGEhdtfxqN0TQAA +H+7aZ2vIPUmdty3JwrEuogAA +vCjAaFVyDE63i9p1Jt2SOgAA + + +dK9I6bZRfUih3ErZpfx4hAAA +rxa+oNm2Kk2e9yVRZgZC4gAA +4 +WOwADkmaF0Gyn65Y0rhPDAAA +pZXkD7qSDEmLVoipN2i44gAA +aXuHs3Koc0iND5nLqn7wbAAA +LheoZ8TVLECQvoj7m1PP0QAA + + + +task-manager +tacoxPrx8kCKprVgJHnvqgAA +4 +0zxf2/fiaECjGyhbRvdvKwAA +NgHnhun2cUyB5rcs/wB8gwAA ++vDknIqORUmbqQrKoJWQTAAA +SXqC2no5IkqvM/Sc2IexLQAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +qV/n64Gaa02UNoVye8cFkQAA +xkUywc1uKUOHql535nPlMgAA +OQp12fjZgEuEgGrczfPTDwAA +n1Fdt9CcnEqbWv7SXLf7xwAA +2 + +False +OeFvUQCLbkSUntfY8QQZjQAA +78O5f65/80OvpHK3AuBEIQAA +4 +RtC6tXmAOUaGZ2UBQ4l7MAAA +IgO8lC5yxUa1HdNIocz1zQAA +8ZlaZgm1uUSPeRt/pbshTAAA +6vaU8A5xoUSGrf6oRA5e3wAA + + +OeFvUQCLbkSUntfY8QQZjQAA +cH75vr0YhkuvV/fYij/FMgAA +4 +/n+fJ5dGJ0akY59zvY2SAQAA +SR69sArTiEKkYzbG8UNF3gAA +dy49LVIfCU6rTMb2Tw1YtwAA +nh07AMkdm0KkkjCUeiTU5gAA + + + +analysis +tacoxPrx8kCKprVgJHnvqgAA +4 ++20ew2cMdUe5jGz97OU79wAA +8SNn6Do/vk2SjHYY36SUiQAA +rSMRhJLXDUSq+9dS3sodwQAA +YuLOiO+5jk60EwVW5oveBQAA + + +design +tacoxPrx8kCKprVgJHnvqgAA +4 +UxkwPHCKZUOZB8abt9yLgQAA +Jh30Fj+sxUCDtvnsiCha3AAA +KlL5ohRGcU6EsMEKnjkoHQAA +vbtIlNyGZkSMrpr7bAuFPgAA +1 +UUjC686FYU6T/q1aKuDLkgAA + + +implement +tacoxPrx8kCKprVgJHnvqgAA + + +public +tacoxPrx8kCKprVgJHnvqgAA + + +list-external +tacoxPrx8kCKprVgJHnvqgAA +8 +ar/cmfoCE0OyMW57ay1ytwAA +sh+7dEH4LU2Lg/8CNJS0gQAA +EP52ASOIpkKf0ggG4AxB1AAA +5y40oWQyE0CBov7GZBhxKQAA +1BA+Xn0RUUm64eTCTOCRugAA +3Ceimlwjy0acJvsa1GxoBwAA +tYUtzmHef0ujkk6pYML00wAA +kc94znEDbE2QFP473g5b9QAA +4 +HdgD2FmAh06xyFDupk4vagAA +pxqjN0GODE69EvLg0dAl+AAA +vN04w+sn8kGRW/7MCPHqyAAA +K0nWpIYMbkyuYvBBAUwcaAAA + + +actor & action analysis +tacoxPrx8kCKprVgJHnvqgAA +8 +6iOG2zf6TEyGTIPJKas9rAAA +4uB0MbN3+0SYxOfF580zMAAA +3b21Z/iMs0au0myIZ4Z7OwAA +uw2YtpvMEUqC14Kimc8eCAAA +fdnXBAbHkUmPlMqC0iAwCAAA +tL32Ahv9FU65Qnsw8w+SEAAA +/elZXku6H0OwmLMGsCEUQwAA +UCL+mBaEH0SfVWfmTGP3pAAA +2 +ZKrxwL9D1EiytZ9M2QdpNAAA +IuqkqTOhTEuBUbn2uLNuqAAA + + +data-io-analysis +tacoxPrx8kCKprVgJHnvqgAA +8 +ZVZSHvdc90+uyCG9xQvFFwAA +bafEaCWS5kmZa7YDL4tt/wAA +usVme/vWz0SVfEPEfK9TYQAA +s/XioP1Y/UiGduhk/y1+vgAA +lD0x8R9zUU+Gr16SYaMDDAAA +Sucs8l4ei0y7QTbSmrmMQwAA +/G8jAuopsUmv6+KWFz1bEQAA +UI4PRuPYSUCQMhM25b6T/QAA +3 +iwDC0+jcHkWoYFMM+ST2BQAA +z475GIA9kECnM3EOwAHh6QAA +UtVAs5JBSkKc0jSVdLpypQAA + + +data-flow-diagram +tacoxPrx8kCKprVgJHnvqgAA + + +action-flow-diagram +tacoxPrx8kCKprVgJHnvqgAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +FPVj7um6IUGVTfTFIuWNJQAA +9ClYsIQN4ESsljoYy9AsGQAA +oE2t0LzdaUavFzZUAuBV9QAA +tRR+kP/uV0eCpww7mN13/QAA +P3WVydlyRkuwh778fQBIcgAA +v58zl0lFo0OthalTYGFTKQAA +8CY1bBdDxkaH1PcNb3ZGGQAA +o0UURrS8nkeLRNMFFRJEIwAA +2 + +False +NSCnR/cZlUa3fXcKMhA8sQAA +h9lhv0QFq0aFwcWza3gsDAAA +8 +jU0P61wvf0Sy2jgaGJASWAAA +etw0ktzUr0+/O4dDmvT3vQAA +MyjKgBMQxU2TbX49+Rc42QAA +VbiSotMd7EeaDvs0rvjocQAA +IaMKGZD9PkehJr5RNTkSuAAA +Qmp+r+VK8UGO3Il0AjKc5AAA ++KcOzTuJEEumW7XiX0Ad+gAA +R5sVjH9o1USufBZZZSNj+QAA + + +NSCnR/cZlUa3fXcKMhA8sQAA +kETY7OJYc0qg/QkJQX2LXQAA +8 +D9SHHlxBLEqXdBpMaZ9kFAAA +LJ4YEIvhRUyrGKotu/am4gAA +J/9G8Kg5VUmDIQejVTibIwAA +VhPiwKgSzk+08pWyuIXK5AAA +pc1C/Gssc0WTEJ9iA3sBfwAA +rrfF5kKwgUydDdMT+RYxWQAA +SYIv7T9MIUWW/8Kz5GVcDAAA +1DCRn/1rv0iPg5mNyTqoUgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +1w4wHAblgECqTDPtsEemngAA +hSySeZ9DC0SSAiGeMvNYsQAA +cjLydq9Qq0K5MLvIzC4ZzwAA +MTUlmgLqSk+EhiqgGzBkEgAA +s/o88wUJakujvT14Ov4UHwAA +vEWfDTINBEWTGOqxOvavoQAA +XRxA9coNmkyZUu6tdX06TwAA +yt5ClHoBukORHaNOqHHHeAAA +2 + +False +ubIfnYMMgEuGrguT+jcONAAA +h9lhv0QFq0aFwcWza3gsDAAA +8 +DDH1fzvZTkK9PCSBAo9DCAAA +Z31wKQv5ZkuWfbIiqiZBrAAA +os6IS6Yqb0+7B361C+X+bwAA +K+sZdSLIMkienNxNayD6cgAA +tbEQiUZMe0WYVJjXyskomAAA +WmLXQ63kSUm6XqUcy2B3CgAA ++8HfQ2so60ytd8QKTve/lgAA +yNKcQJzJXk6y3PRK2hMaSAAA + + +ubIfnYMMgEuGrguT+jcONAAA +XmSQJXVfo0qkbNCidOBOzwAA +8 +H2BXDDVNUUiLD4SQo3VDHwAA +Ae21XiE0qEupdm2so2ksSgAA +vqoRgYFlIUObG1V4IBIcPwAA +I6eIBiEaNUim4wptRirLyQAA +t4BKFTI2xEGAOUjZEfUgMAAA +I/neFMNDVECDqbPIqXzddgAA +LpYdX7mvBE+M0kSuJGODcwAA +jL6n6OBHr0OMtVccYz6J3AAA + + + +new-ideas-action +tacoxPrx8kCKprVgJHnvqgAA +12 +sFw3N+djIEOBwQg4t6R70wAA +W3a7WL0aFU20hih/wxO0bwAA +4muU6fXv5EiIdWEzNbniFwAA +PquWW3QJBEGNiYCf83kEewAA +iyiy7059g0u9oLbvhyWMJwAA +JxJkJSnVgE2VHO76ajV3FgAA +okmfJkeX3EGOTX0nQ+R5GwAA +dUC1F3J8T0iQxgFoqKP0JgAA +yubkqivm4UyQY4rz+UzVhwAA +cGEkiBjuH0eX70/v3LHhawAA +bxmyW15+1kSOe1pNkAHOdQAA +suojASD+g0C0ixTnOxLxJAAA +1 +eu/8Siwir02KNGkRDOEa9gAA + + +new-demond-action +tacoxPrx8kCKprVgJHnvqgAA +12 +hlEB9emSQ0yr5JtMXv8exgAA +FwaArb5Ga0aYUTqWNOixkwAA +HlL2+wrhT0ORfjlk79BMhwAA +x7hhnO/x50WCblTkyLQKgAAA +o5iA92FZHkuxkU8FJDrcDwAA +O04bxDhOnE2xAvO9lOu6RQAA +wqIyBZodNUmQUoL/nMEwlAAA +auNQYiGkC0qhE9Ksin5OhQAA +u0BNgriFLkW8D2ch2mkMLwAA +aNIoCx0Ry0S6WaUFcfdBUAAA +BjzerCL6GU6nFjHHHbtq0wAA +L+HE8roaqkW6x9pvbnkxRwAA +2 +gehfWFMIjEKeVzAcdHneqgAA +QZwwsltNj0eenKeiSJArvQAA + + +feature-analysis-task +tacoxPrx8kCKprVgJHnvqgAA +12 +pbFdS1YKskuJx2F5GYPsxwAA +zYACq9E1tEW8e+FvZoDOgQAA +kUFkbG09xU2F0FPldPOSOAAA +XhSXsGYa7EeHk8sf5VkWaAAA +7jqlLyDAzESQnbx/rHQ2dgAA +kLG9EfbVqk+GF6IpIFbp7gAA +JYczFEIka0iDSdsiGO5lpgAA +l726APnE3kOD8F+US6t3OgAA +8trqinRilUOT7pAQsxAfFQAA +P25uCvpbiUGQgV5bkXS0ZAAA +rzZ+dOLwtkGiZE2uKcXh7QAA +48x+iipvxkywCwxO3Jac9AAA +5 +irMBt7uWtEaxRopZEBcfwgAA +A/3hkPn0ukKjvmT5rHr/7QAA +NYZAYRfo+EqcnxFwEX16dAAA +tj9PxTnKWUOoKg0de6lHnQAA +apr06sAa1U2fZat0sCQPpQAA + + +trimple-catagory +tacoxPrx8kCKprVgJHnvqgAA +12 +r2txyI05mEG1QxI9jG/azgAA +IbbVyikZU0+AJeIlhnXJdgAA +f7+h0+yeYEiqquMG2Ha7wgAA +jZ3okYJ6AEaO6xaIq/M6fAAA +nLCQxDcq4kavFuzl40RaCAAA +APiwpHGo9EGbGEr540wNZQAA +aud/6OGNJkGwwm67Fp14AgAA +m2PPoWgKZki4iK1aoSvosgAA +RgVLcJzuWEyRcNWU2C2BWAAA +6CHFltMttkaUdOWgg3O4WwAA +nspClDUWi0a57ZqqCRTqwwAA +62IMpf0m1UCr8ziCGwq2YwAA +2 + +False +ZE6XGr3H4E+M1Lu1nRZ9BQAA +TMPdkgNID0u772le0sCmLgAA +12 +0JiEkFKmmUuDZogH7iBRrgAA +O9KRx3XtLkCvQ3wPo//NrQAA +oQbN8gPfP0O1X69kI97iZwAA +gLz7JlBfJkaKllUko0yHYgAA +Mcq2cOcmcUeltWDBm1twnAAA +0wUYZwLUBUSupqgI4y1w4gAA +WV2z0+WAdkiSo+swgUPt3AAA +UpuKAXdnPEO4PYn/71kcfgAA +c/y3IplZJkebjzv/7xxnHAAA +bbmn4SKp90OsX5ZdSsEy4gAA ++dIU5R1gqEa0zsJrG/dMNgAA +qe0P1m1ZVEajA/QvokOjBQAA + + +ZE6XGr3H4E+M1Lu1nRZ9BQAA +06qF2g1ff02RsBbBfLLo1gAA +12 +zwJIwa6zRU6NT12pG6ldmAAA +b5a7t3L8RkWGBByXZgWELwAA +o4FInn2nRUy0+squnhBaaQAA +OampBor9ZEusGPPwYeuHvQAA +8plRxWqvrka/0Wv9OEunPgAA +DVZT6uSkakKkSB+XFEYZ8gAA +jFhEJsskSEif+pDccs5GOAAA +dDniAV37SUmFB6dixacy8QAA +IAvETOSI2kSu0BISexLAPQAA +M5tY0EEVp0iw9ACt0C4eCwAA +yEFIey7D6EmPZ06g/0pOhgAA +C2Y1atnuK0a0Hm+1B20v7QAA + + + +trimple-catagory +tacoxPrx8kCKprVgJHnvqgAA +12 +9JFMShBAc0y7u6p4T7ocqwAA +BMb7HcVwtkuyXT6JdvC3xAAA +YRJ3JRRm30qX8Bm8fcufFgAA +2AuxrO4IBke7EBbcD6KjbAAA +7eeJrPLVyECeTW5tz3TPiQAA +z+JwqY6hmU2YsUYEDrO4FQAA +r61Ju1Op9EqdayjvTMk6uwAA +JJfK7Fg21UiMfmZIi3nvgQAA +6McqlEsI8ESaueIPBJuFZQAA +Bss9ojsAikC1HNaXai6SGQAA +aWErRSOs4kuGUEDLEJg11wAA +5d1dyb2fJUaMsd5Wy8IC9wAA +2 + +False +li4LwavBrE+pggONaW7QkwAA +Kh+ykp9GgU6PQXUx+CGLxgAA +12 +E/KBcTvORkybhPbj7PCZhgAA +1O2DroJjnEWYvz6+FVubtwAA +uUEz4BCUTEyz3GLP1b95YgAA +jgSNRtyAi0OwZSqJK4Fv4AAA +Tx5kfHdor0aPHgvEpdYdEwAA +DK/OVbW8j0O88TdU+gb2GgAA +bK49WNL54EiSD88DaGfy2AAA +Nlqa8zxkhEOJVcFbqx/lNwAA +VEZ/l/jzyEeAJflOJvcnRwAA +shQfPFK/3kqg25/Xtpfp9gAA +sKr8wtRNwU+gT9tWBD+zBwAA +dSW9mbndO02IVtmUb4rvnQAA + + +li4LwavBrE+pggONaW7QkwAA +06qF2g1ff02RsBbBfLLo1gAA +12 +FOjcSLTE3EmrGUF3rq57aQAA +MxmMoRWpqk6NlGYdxOQfHAAA +XlFBJXt59kymFd9cnNWfWgAA +BLWUtAOsR0e764vPctr7mAAA +3kBb29upD0qqiewXl4yjVwAA +Y2XhEg2ZWEa6lXp9nqtw9QAA +EoWflUy2l02AqxPBKRABtAAA +ppVcGE5q4kmPMFnVzEJwhgAA +Es4KN5mXDEWWO/bntEO29wAA +5DRiCUSRcEydrAECeEaBzAAA +QZ0oroK+AU2JIRZ8EdW4UAAA +6mT/ShY9gUG/kK6lJla3jQAA + + + +generate data-dict +tacoxPrx8kCKprVgJHnvqgAA +8 +RvaeyZG/PUeTpXEVgO7PywAA +O21u+hfXDku6m5GsWPIKYgAA +CFtG17Si+0qYjRDSXLSGQgAA +fjSHlNsETE6w6BSvmFbdygAA +dun4oB1o7E2GPmOE4gcj2AAA +76SBS3RX/EiEq8ITD1msEwAA +3AscrpCrjkGGa2g6YOynTAAA +RQx6gozO6U2i9e2xDumgkAAA +2 +/vsJW8WzsU++6Lul86APuQAA +ApKyMGFOCkStssh0gwBpKAAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +WpDBYAgV7ECwN5q2IG0BWwAA +7rIZbRHbBkK4a7w0rBYU3gAA +q/OnjSf81ECiOCiUPrRD8gAA +RUaCGSwd/EOt4x3vVZ61FgAA +osRUS6INl0m9Fos+HK5ZhgAA +Ni9GG8rC2U+WOwOH6hpjvQAA +qhJIY6DI90KYPr7FiN0WowAA ++IdKjqWf+U2tP5ahYB93wgAA +2 + +False +dxugzP0ZBEOdRYlU9N5SDAAA +kETY7OJYc0qg/QkJQX2LXQAA +8 +C4CW3kag50+/7JDRv/6ksQAA +3RyfQVGOeECDb+G4M1dI5AAA +AKTiOf8XNU+ZeP8H/sww1QAA +AIxnJXRNfkKn+hLzgPHnCAAA +CPhIMuHEvUidckSkXTkmoQAA +7+KwpdmJz065aoKo4OrMDwAA +HEGX4XyfqkSVZryUoF2M2gAA +nfgtb7VVvk2Fn8MugHPRywAA + + +dxugzP0ZBEOdRYlU9N5SDAAA +c4KyOid86k6Bzi+unTPcfAAA +8 +LkVqtD1DukGhkeIQL+7y0wAA +XbyXWUa96kaA+O6KmLTd5QAA +Pg8ABkt4iku58sQ1D5ZJ3gAA +P/SLxRpfCUeLWjfOe+I6kgAA +C0MPxSwCL0y7z+mSbW3smwAA +YDHUyusmUUesQOoYwCbNnQAA +UdRBun9lFUOYT+NAlRFeSwAA +Zf3oMXLA4EK7HdlGdccVKQAA + + + +data-entity-analysis +tacoxPrx8kCKprVgJHnvqgAA +8 +3zDgV/Xi/0+DECy5hTfn6AAA +7MUgaMAgqUiX3AtwO9eCeAAA +n4fUp6VAdkqOet3jRKvJxwAA +k2y0V3BTMEK9HghOYUIgIQAA +VJbVUyCxs0u+Lgy9ekB9lQAA +tIn7qsZLLUaarigzNkPpaQAA +q8fBOBxBPk+cb8AIplBN3QAA +ZM1d8Q0QDEqUmVRsk+jV8gAA +1 +FR6YZrNJHkeksGzXICrvngAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +d1SzxXFeMUq9ZDqrQYaaJQAA +no7Q6S0jF0qn6b74ZkjszAAA +eoGlpcWkrkeigDwGMKxRJwAA +JghCAAhzrEmLlPfMRJaFLAAA +uLKrd9AKWE2k+0Hro7u6eQAA +TrUf9wr2q0m9vdTszmldcwAA +CAdOEA8zXkWG78r1tV9tvQAA +XoBi3j6pj0eUzpoE6SSRyQAA +2 + +False +TfaTWdzXx0eF98RMZF5U/AAA +c4KyOid86k6Bzi+unTPcfAAA +8 +OPO3MD+GLk2sKsCAn9g3RgAA +2wu7JXIoFkCQqKwPeaRSwAAA +CqiC2IdTyECHs45xZep4+QAA +wz3jELMGt0abXQAhk5/BXgAA +69AT526weUSQX0AhgzUL4gAA +i9w0K2dLZEegGFJoXuZTAgAA +MV/N+sBKDkGqsyw6Ql2a4AAA +OysuMXmZgkKRAzPVCnmGvAAA + + +TfaTWdzXx0eF98RMZF5U/AAA +8E86OOxmt0eTCKMQNrubWAAA +8 +Rz9PKJAggEWsSFtV8Q3OHQAA +uIpCimBeOkensj/KYTA4dgAA +S6QqNwG3OU+PU+KEcOuSiwAA +5N76yKfHxki0E/ohnKcC7gAA +WDm/gIWPZEODM32fUbeQLwAA +62KlpqlkX025GPxjt5jeAgAA +/vrk/iCUqEmebDYHOKVcMAAA +EeL2HbB9VEeWcc+9AXvHOwAA + + + +module-design-task +tacoxPrx8kCKprVgJHnvqgAA +12 +s/iW5IUcqEOvkUCPbURcvAAA +n7Wi4yj3J0mP8qQHTFyZ6QAA +sUWdqigs40qlwo595TWrgQAA +NByCAJBkO0yxwHvl4JF4JgAA +/UwMH6vM3kKzkuL76KD36AAA +x8QSHcKys0u8cfkxdnyffgAA +fACfPJVnbEuY/XYoLHkrWwAA +puU2uGH4uUmFyD3iemCffwAA +BghWDCz5OkKF8K6lTv+jGQAA +u0k4V1QdOke02jJmSY/ZEwAA +0tfqL6KwI06BCHULWyD4bQAA +YbFQlPPkskK0jgdgCNykoQAA +6 +1Y6QXQ3IbUKN3Aa7VuMr4gAA +zmuhwJCP20GxOG2Xkj+EQwAA +6MJU+jYHa0mx8HaVM4S+8QAA +DF7gLd86sEO0pjZnITQi5QAA +sYEr8xJzY0uFxXGAJQj62QAA +5rkAHpBOt0OZxpkOhYsRfQAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +UZOe5+gzxUK6uYSuhvLe7gAA +sJKcVAmUS0yXXy8qmLULKwAA +5kqYjmgZKE2N0q6FUG6tRAAA +IvDtzBpc+kGUu1MBFIIBIAAA +TT2n59wcFEWjjjI3sTCzTgAA +bfDfeVO8jk68tvUUIHRMOAAA +Wmnz9SIV5kyejhVVCn5CKgAA +zYwa2WPUy0mvZG0zbxLCbQAA +2 + +False +BNlaobUxlkaxprXRzDMgIwAA +kETY7OJYc0qg/QkJQX2LXQAA +8 +0SedcRZhRU6EHGfFmfMNZQAA +cjEDpAqJpUGJrnqSbhV3PwAA +ca5AEw4qL0uQhG+nfp/DcAAA +iG1p6EpH/UG7egUDUcWMAQAA +lfjq3XhKn0G8CDwzbGNwqAAA +jHLp+F3hhkWsf3OerYCqfQAA +JN1SvoPFc0GpXxS2lAzKqAAA +TXwavc+6rEiRa5clDy5NHAAA + + +BNlaobUxlkaxprXRzDMgIwAA +tnTkvoZxVkmVjIgd8K6VcwAA +8 +HDzKZWrd+kWyG+ZoXL2xaQAA +nByWoGhft06Q9EGhwBj7VQAA +St8KV4XKrU6+frs38fgK6gAA +WCZwqYsrC0mSL0K3dekBXQAA +g3VwcZkMz0me1WfEuaG/xgAA +vlK4naBV4UKSVNOErL9ytQAA +USMEgjft6EmwvN/hTXMM7gAA +U3GWx91z10uqa0+RLMXoewAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +f85cHGowA0GlkeCEZn6NKwAA +Pw9U76T200SKacFK/Fn7sAAA +n74kabJjqUiILIrL5vBZwwAA +0qH69FZc7EKvdojSPXMjiQAA +hLn65azACU6daYAVZ0j7CgAA +BikNtAupjUScT790usgi0gAA +RstLIONy6kGorgVe2Uqi4gAA +jcNiqYhbH06jiCc33VQDNQAA +2 + +False +t3VIg1cXJEmsTGdIYQFIcwAA +XmSQJXVfo0qkbNCidOBOzwAA +8 +7czXXL2ln0q8vqBno9oLaAAA +ipRqDjZPTEelcuD3REQYGAAA +5q4zooGEi0KidnNJpYCbyAAA +TGA79NBrL0alouW9618sMwAA +Ps4bHxmtJky2Qk8nDc05YwAA +rjNAWvp/T0OxL8Bu9JJPCgAA +e+wMe/1RAUSqqf2Zcn6XDgAA +At2iUXomGEO79uliyY9zdwAA + + +t3VIg1cXJEmsTGdIYQFIcwAA +tnTkvoZxVkmVjIgd8K6VcwAA +8 +hix5sIQ94UG9xQQblrGFPAAA +Tbq04QMjMUGQ4BbLO7+V0AAA +92hJ/PtaoUqMPCxPtw5uLQAA +YyKeAt5nZ02OYKZevuihZQAA +PUnmliyfv0qGFzpdLEoEYwAA +b1vyJY69L0qigfqsHdckzgAA +DOgbOMvLUUG6s6fNR3Iq9AAA +y4H2PvsUDka98uLH4SMgVQAA + + + +code-gen +tacoxPrx8kCKprVgJHnvqgAA + + +soft-demond +tacoxPrx8kCKprVgJHnvqgAA +4 +XmyUwnJKX02C4THv/GbClAAA +ntKdZXdNWkaeImBRCzTsNQAA +kax7LvKiKk2pc72H3cf9hAAA +Yf0qt5KoJUaLlRYdZcS+FgAA +1 +vq1zAfKQxUWnGiKbBTmYJwAA + + +analysis-task +tacoxPrx8kCKprVgJHnvqgAA +12 +9ECchidjm0Oyi96zrE/MCgAA +qyHyd0r1GEWFF8dxNKhu9QAA +/HtDJeaJ2EisBDirjMeQewAA +VMlY1o05V0i+2N9qs751BAAA +eow26LjeFU6GRSdSgeT85AAA +uFB3UbYhAkC0E6G309qnnQAA +xb/bV5qP9kWSDd7+sUpGJQAA +96UTe3kUFkuj2ViKB3jrFgAA +X0LJqLv76E+ZXpuLxFOtvwAA +G7+PoKG3m0am95da3OwEyAAA +6GYFGGnZI0uHnyHtPQd4uQAA +HnaVk+Fe9UGlf8AM/giaFQAA +2 +0CpaRkRUf0+bAPOkrSqRSgAA +pOTqH/7r40O4aKzqIuqcswAA + + +pkg-dest category +tacoxPrx8kCKprVgJHnvqgAA +8 +RDlS3XZVdUCC/tRmDGvFywAA +yxzVmyELk0mT4um+FwipdgAA +S+TygaKYk0uAbwsfbYN96AAA +hqaktbVQnUCUYBQCSEFGJAAA +9pbwNzO7hUyC11S5a9Hn1gAA +XA+iFLjZMkGzUwnZ7CSZagAA +Mx39kg30k0Wku2RoM1yA7QAA +eBQADWbmxkuSBAnzjH3FjwAA +1 +8/RYS0HDWka/NEMRgtUecgAA + + +layer-design +tacoxPrx8kCKprVgJHnvqgAA +12 +iVh3QgkpmkKlqxcSGYTCIQAA +GoBih2tm1kaBir5nDWZudQAA +ZDBgyQA8cEGtR3Px/wUD/wAA +7+HFaANoQkiVifwMlmuntwAA +cnN0HexzX0WKGgNpVfpw2gAA +k2nvWTKeBE6d6Ay9xGtHjQAA +e7eqCRCXH0SWTE8rd+4h1AAA +iXj2sP0tHU6aLRRVxEieSQAA +gwBYAnNeEk2uCxTsZUvhjAAA +J1M/HetPEkSO5Fv5/0LfigAA +33xUuD6h9kuXOZTkWh9pdgAA +1Ozamn5AAEaxseq6qsaHxgAA +4 +FVDBPeq7mEKlp1go7V1hsgAA +iUFGIr8VC0SljnWHghKcFAAA +L2yiBfWQi0CXNccTHoAyQQAA +Emmft/ih+ESwNLfwOBP+ogAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +PPxNPcf4O0eyQOM/EGPOkwAA +k1jS3/OqMUqf4D58ppccVQAA +1h5gznPDFEizRfu4K9GfkQAA +WzJn/PWv0EWKhoaAZJqYBAAA +oMQw+nxcQEqK73wSmEOFOgAA +md4ITarkD0C6tNE2+WjNBgAA +18jESLWPRkO+Wb1w/V0g0AAA +FZVXwLSUrEeJ/KAn+/gCFQAA +2 + +False +xMoCRZ0FD0mJscRNN+UpywAA +tnTkvoZxVkmVjIgd8K6VcwAA +8 +teOONX/vn0OFHLcfp91+fwAA +Ys/C7kHTkkeJlFZEXuZ7CAAA +pIL5ZYFg5EmhEkN2XAEWxAAA +5z16Fa1ESk6c/kBXAOA5PgAA +6ssAIonIkU6drI87qw239QAA +EzTRgY/3FU+9+QXX23lk+QAA +JQZp7nqtcEal9RLMKf2hrgAA +to2fWcgN7UivUOpxIDyx9wAA + + +xMoCRZ0FD0mJscRNN+UpywAA +a7yZcyAyl02YNl0/FQziyQAA +8 +GrDwi0bWFE+6q2G+DxTM7gAA +b59QNJCEA0OTqfWZZZ00oAAA +avzZeQ4gZkCmBihm3WuNZgAA +liyiZqIWCkSVU1TZsb0dPQAA +wHvLvs5Y5EuhN+zZWiBaawAA +HiTxVySzUkmVAxzB7f9hKwAA +ADiQIjRGYkm3eT6HLSERVAAA +brEbvKvIMU6JZZ26T+nJZgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +aKlp5X/0Sk6upQusuXcE7wAA +YrKpRBjqbUOv/BEau+9IvAAA +qUUpYr8AA0+91K8cYmxfZQAA +HRqlh/Pfz06rxhWK8YIXNAAA +2 + +False +BZR3CshDZEOw2M912JpeeQAA +mx6wTw6+KEuGtAr0iRUXJwAA +4 +vDlhSKsYj0SiclZtg1zWMgAA +eJB4z6oLJku5RUGcRVnuJgAA +zRiFMhdhhkCKpi15xt2PUgAA +GdG/AQhxnkCG/OHU5GRwUQAA + + +BZR3CshDZEOw2M912JpeeQAA +h9lhv0QFq0aFwcWza3gsDAAA +4 ++usbllKSsk63D2j5+09vnQAA +EyiLt2MkxEmZbpCQZ3BiAgAA +y2Y3A+hwA0yH03L0ahMfqQAA +L7KAi7ah6UK+5IiKOQ1WRwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +510d+QiLBUaVuLRPUEL9qQAA +kIh9KIhRZUuelTWJW4n/HgAA +aEHcsGiJ/U6d4dKbIEsbLAAA +FapXsrPO1EeFWmBfEHsg7gAA +2 + +False +/FmqeTd2akSH7n3I8hA3mQAA +7FwnjSWdM0KKXAN3V8oQMAAA +4 +EXw/pqknA0Kd0b8z6qWv6AAA +e0tXVecyVUi+17715ZUmbAAA +XlIPivxjD0eqEer53H9//gAA +Ofhcz8psBU2RJnfRWrgU+AAA + + +/FmqeTd2akSH7n3I8hA3mQAA +Kh+ykp9GgU6PQXUx+CGLxgAA +4 +J0WU5HBiuk2zrF6bP1GMdwAA +j77fLGv3w0OyHO0m9cpaywAA +DgSs2SHsGEiUrrqVFCobLQAA +2m1lI/IudEKbqYK5eGkLHgAA + + + +src-pkg-create +tacoxPrx8kCKprVgJHnvqgAA +8 +mCnmzxWG6kWi9OPK25z8CgAA +vHIslL8mHEG7AZUKpbASQgAA +EBCxIVC9fUOI+5JDHb+LtgAA +L/HbzZyqtE+XtNHUSoPfPAAA +g9FXZVEqkEeDovQh5ld2zgAA +qw6KSgAtDUeOGiUtVSgfPwAA +IAGZ65A030uJKQsfl5d4hAAA +TQzPqjv61EO5sWqxsv5l5QAA +2 +rO/Oarhbpk6wEn45hIpPfAAA +La7Sdx9zEUWWIkxIncjJuAAA + + +RAD-demo +tacoxPrx8kCKprVgJHnvqgAA +8 +PUHktwo1XEONvjakWKxjjgAA +qv+NuW1txkSwDGqRM2sVVgAA +ZMCMz/XbAkebr+z1iFakUQAA +rdXuZl0AnUu5bUtQ1R+mcQAA +jJnr+ewJmkiXbJ8FW5RHwQAA +gqbWU6zyIEKT7BJEgeEKwgAA +25wBG/AA/EmUwngaHeRreAAA +FtkLwuPA/EaAPtwS1hmobQAA +3 +b75cgmrZUEiaHJZyDm8qXAAA +wHTgM9Z8VUmrcZGO/o0jJgAA +7Yo61DFsNUaIwp+0+TNjXwAA + + +design-to-code +tacoxPrx8kCKprVgJHnvqgAA +8 +GaKv5RiKr0yqd1YQfpBS6QAA +c8pfaqnHTUWk4Xz+BwDOiQAA +nizmT/+xhUioIp9m6FDdFQAA +M8yQafKDFE2wDMT5pStIYQAA +XsyNCerqHEuJZ3n6KxffswAA +LPtuazSta0OzNyQ9ZXeN8wAA +W2/FwjRBmU+aJQIqciy14wAA +W+5m8PECWU6GMRs8bhfjMwAA +2 +YXudH8Doi0+zzc1qPMjDNAAA +BOzCR9HOxU+q1mRime4kPgAA + + +unit-coding +tacoxPrx8kCKprVgJHnvqgAA +8 +Ji7GcpOn/E2KIxghPULMgwAA +Ajldi01MC0e0b7U0X+hYIgAA +2weBpxVnqUmWEHvnxDKFmQAA +Go+WF+6klUqANH5bP0R0AgAA +cXkc4ROKfkK2AEQ27ILD7AAA +G06Bcl1PFki+yEQJl+DDygAA +BacBkZe6ikOp5mhmJa2nlwAA +0AvdzElZo0irXbBhq8MV1AAA +2 +nnIS6vjqXkqw2mw9rhuzugAA +GPR477SH0U2rZy9DRg9MzAAA + + +unit-testing +tacoxPrx8kCKprVgJHnvqgAA +8 +0HXL2vLmwU+NgNkl6zVkQAAA +IvP3jaLlBUqCVYhTQNMWKAAA +Yn+UYxYUkEKAY3Glng05RwAA +KS5hUG2YU0Ozn8Gc/u0C6AAA +udnYsolK4EGZ5Tqfu1inggAA +UMgdqkl1sUysMrcoUTrVVwAA +vCCvyT9WBUGugbCVunkTNQAA +o3n8H2G9wUeFUWZ221n2TAAA +4 +g0Sss8qL1USpNMhJiejoNQAA +akgagoM7O0WP1rFMWH/IzgAA +OPxtPn1oKkaU2Qqr5fDcUwAA +g3Yl/RO2Aky2SDl/c9CL3AAA + + +integrate-testing +tacoxPrx8kCKprVgJHnvqgAA +8 +lSkarANt7EiYF5x5MQ7+qgAA +eH7cSqHzM06eWri06Bz8UAAA +0IgroACfLEKJ1tcXHw17PgAA +LJcQqwjK3UiQPKY+TkBKbwAA +kVd1VyDwJEWJDwZbvH1q6wAA +Unl2nXQhZk291xCVwjdJNgAA +/Cb6h3yeUEiDvfXk44ztzAAA +S69h6PuNhEOikjMwKUnPAwAA +2 +Fb68OZ19C0WB4BjQurmBRwAA +BmvYAIFdPEKrfzWwQhihCAAA + + +build +tacoxPrx8kCKprVgJHnvqgAA +20 +hhCDRIRYnU+Qwbyyoec6WwAA +LxeJT8NHO0+lD0/d7KGSQQAA +2RPT+xZTsUeyQTt3cLgQaQAA +aTjSnapBbkm/m3CcTts4eAAA +kZAXDcSScUSa3zPofC/wwAAA +A8ZV/Kqj30iWrIPk6HYOEQAA +yXUYr4lyGUCtn8eyKakSYwAA +jnjaBfSZbU+G24TMM6jQJgAA +qudITNuevEOUiPdD67icGQAA +pIcjCSqCp0u0bE+JXiLXYwAA +jAH0o8IBf0e+UE01jheoowAA +awqqy2Oc8ESXvFOT3vBCYwAA +h9oHrLLBNESPJJJAQyk1wAAA +HnIMbs9Jw0y7qdlDaFIZMgAA +E6z9d1rAOEmbnDv4x3VxHAAA +SbDy+vqraE+HF/gCB14JDwAA +eL9lDsKGCEmo1ezUdY44EgAA +NnDEqeggU02q+MxtNmBTvQAA +lSLzFYiVdUWWclwZbo2UrQAA +G6HW0wLlH0ux8UcwNllTMAAA +2 +WHhyhUoWo0iDDhj6FaqW/gAA +1eC8b7wYzU6Y7xZwvUG1yQAA +3 +VzL/5LAnlkGJyIYcJauhgQAA +5aKY/x+ZoUO6ajG8h3B7egAA +141jpsdb4EK0UYCsLQiPoAAA + + +build-cross +tacoxPrx8kCKprVgJHnvqgAA +20 +SJxSR34gTkGLBFrgEQoGBwAA +gazS/rMWWU2cuASRb6PWXgAA +JJAGKyUInU2dRtE+qC+f5wAA +T7n1RS6MyUKHQFHnbELd4QAA +IygCYEX6+Uu+11eoseJSngAA +TCGlYZgKEEmJHQ/sWrYZWwAA +zeNRwcBsxUSrLnYk/ihjLQAA +6V+fmC9BbkeqmKkaO53PigAA +ugI2euwM3Ey7T7DNJ++xmgAA +/jxr0s4HuE2Plztsq3ArPAAA +tsg+NqwwBkGd9rNrIIq6BwAA +8c8SA3tUmket5UPwt8V1UwAA +6WZ1EJk62UWalkSDT6jwlAAA +SsYhl8a+TE2Q/sxMIkkuWgAA +fVT5E5/A8Uq3zMM8iLQYdwAA +lukOgXx9/E2Ed7i7ZboU/AAA +GmJVvycvyUy/9jSuYyFOHwAA +OTaJYAHoK0GsTMV+l5sZTQAA +2Dmn+Nir7UWAqBmAQUzykgAA +GW7ZsIplJ0C12OCoYhZw5wAA +2 +PfXDwrF2QEKVag/W5+FPYAAA +bDyGtYJmuUiVC+pPkc7oHgAA + + +build-install +tacoxPrx8kCKprVgJHnvqgAA +20 +wTzRmZpNA0CytlcwOuyUMQAA +7n+64jk+fUibN2OwbrzKEgAA +K2UfbyVtjEqINckDan+MFwAA +LtqIKvhMKE2+MEY2TQGkowAA +cr3AMb7W2EWA6biraBdVIQAA +9kzSurKehUa5ijBcVIpSNgAA +6rngOocODE2STH52F9LPDQAA +y5wFK/chLkurLsrcepDVQAAA +0JMCaRFeCk+HcMqp5TyNyAAA +JfPAxs20JUyEIMe2hcvp6QAA +bSsQwYPoxkueKjR2EOojGwAA +1oYOAgKGHUm8dAsMba1dwQAA +IkMD22VsNUKoi5LKu7S4LAAA +AT13u5gSh0iTSL7pJSelSwAA +qQNJt0c7NESQfmpotCi9CQAA +JLZ+b0OXN0SGgFXjnlqMtgAA +zCoS/g61OUCowJ+8Npp2mAAA +0gtJSr9ki0eu2GJzBRhp0wAA +sZyLais3NECoTDtJ8FNPLQAA +F7+2nLjvAkueiYeBK7VgqAAA +2 +W+X0z/vQIUO+tUzMI7hv5AAA +mwO8gf6vqUOl745za4HJ8wAA + + +pkg-repo-sync +tacoxPrx8kCKprVgJHnvqgAA +8 +sAS2iGQLE0GVexawSaeD0AAA +/WLV0sEBRkO9qHVG8A4ZogAA +0a+6/xINhkCgV02hVYaeuQAA +8QGFMJJltkuRXkksGVdKqwAA +VXT22UgSZE6QUG18w3YrRQAA +w9bt8imE3UuRd49OAK8iuAAA +IrOh8uJuXkayIar3FXHiuAAA +JoTu8087cECdlb4taCTq/AAA +2 +bvYo1TGY6U2Io35TQ/yATAAA +7JwpGqJmgku60xKurQDyPwAA + + +download-build +tacoxPrx8kCKprVgJHnvqgAA +8 +IIt4VBS2JkOc0GS4zIsSDAAA +s4eAGaFkf0GNj99lI//gWQAA +Ve2Lk9KcQkiqWzdMRgwYIAAA +6VVbqmmtlUWUEgP5GSFFLQAA +vblLAfzXRUOgCjpCebaQyAAA +6tLstOmIkEabOr0ZjGnl9wAA +uD0opCN/bUioOWfKcTYo3QAA +TDhxh2ymqkG+UIDWdQ4O/gAA +2 +LL86l17PZku+YBsr/fUklwAA +UYbXc0CahESM869EpDq6lwAA + + +loopbak-testing +tacoxPrx8kCKprVgJHnvqgAA +8 +e0Tnr7u8AE+La5gTMkR+KwAA +pXJ8yh72jEiZ8IFi5raIZAAA +aSm3kANR9UKC0kqSlISpFwAA +MENiA1QHdkeUvLAzEz9kkQAA +obfQS5n3b0uAe1Y1fNtQ1gAA +QrYU2VR3F06JCrxaoEHkswAA +XuKjI1kKhUmIsFRie8FoiQAA +xvC6yrGOhU+0Bh9pjWjR2wAA +2 +P+S209BDDkSnrN4WPl8+WAAA +WMjnuHQF3kiQvKAfM+S81wAA + + +publish-task +tacoxPrx8kCKprVgJHnvqgAA +12 +GNt2i16Jv0er8A8pORMwcAAA +yzDihPA+/k26KU657GbvEgAA +AbO8F6w1VE2FP2PujMK2PgAA +hmBNRbsHt0qM3SlsJcQsrwAA +M4HlmVZXi0yRAE9UMU0zRgAA +NuoNLcCPVEy0Sl9PBnsvdgAA +vji5FSPdD0uoJCI3ApFo+gAA +RhJ7yKi3GkinYtjrGs0fZAAA +b4fOXlO640eOSeo31HjDiQAA ++ev3GI66DUKXLiSgMwFP0gAA +MCTGUgm7hkmTjo5wQuXT2wAA +DV6msO+P+0yBStbbcFea1QAA +1 +jTxlFtrXok2VlE3EA+IAugAA +2 +2J0+TPdjaECdzYN0YQ2guQAA +m+4bIFntFkmXMzdv2SUAzQAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +Pkm/LUuEZU2sscqG4XMdwQAA +RfiAlLFylUOvxIT3HNjRLAAA +X97pa4VNfkKiMSEp0APWXQAA +jibAwPsQH0miEfHQobVeMQAA +J7fs9nguMkCx0sN3/itqlQAA +A02eHxtACEuJopeiYV8tFAAA +stmkz8TtAkmK+IHjUC1TrgAA +A8s/mlVafE6S32TvtubF9AAA +2 + +False +YcGgDGXOZ06J+TZOxU72agAA +kM7+GQ5RuEmygAJdSluSjQAA +8 +SJagtU1r1EGpeC+GVrzmnwAA +yMYrBPv3JkqFc4pBLZSqXAAA +w/r659TDDk2AKnLYAKyZRwAA +d9Hi+WZ7hE+Zcc/Mg0rOnQAA +GPPcvU2gT0S/DtfSki9PyQAA +rjGKT+HBW0SrGHCxt14YRgAA +ev0VerKdWUeYBJVkteamGQAA +FnpNWRF/sUqHyIiqwG6HZQAA + + +YcGgDGXOZ06J+TZOxU72agAA +ofqv4KD9ukybRvF//Fek/AAA +8 +//dfa+a3DUOk/JFd2Qg1wQAA +82YAZoYhJ0iEsq3g0y46DQAA +r0+FEls86EiJnMmVAY2frQAA +R4pWtVfhOUu2zR4GTA8KvQAA +moNTePrjx0G5wipybEFNXgAA +p89w54Wr5EipR3+Mc3dcAwAA +hsFdjFPNRUGY1dTFSWccugAA +Py45JMqK80i2ym9oab56kQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +VFeTKuaRGkaKxga8eylyYgAA +EEqzQY0eXEaiToVUiEiBywAA +n+1lHS47vkSPW6TLQogepAAA +WbKJQLdI5UqcM66j2W6W4AAA +2 + +False +8kJkpVqo5kC/wdE3wXcwIAAA +KmQBouG6c0yb16gPnUnBtQAA +4 +FSyt3Jcfe0WqyePjM2GzQwAA +UBR3QgyjKEahZS2MwTnRwQAA +7GvYaVJHlkqX9dZW0eJH+wAA +pkjx8DJiuUSiShtYkdHa+AAA + + +8kJkpVqo5kC/wdE3wXcwIAAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +2AzXF0RAVUOZPs1N2GiP9gAA +qUcTAtahPkyTA/B2RX5HhgAA +lHaP8TUSgUijBnXTHvKzCgAA +cMgK0PZW9kOVBYxhsWu1JQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +kdpCRdOBgkeS7e1zmaIiNgAA +LacDIW8TZUyV6H66XI2hAgAA +ZxB/vF47I06QY3VhmgMg5gAA +6QWoT3qEu0OWAYbwv6pCNQAA +9ClMv5qBYk+xGqhG/8fDJQAA +4BN+cbNZ2kyf9+0hv/APywAA +qGLCHUQ8gEC1AWJA/ohqlgAA +AG9jAIkxgkikZAPXh9fwtgAA +2 + +False +k48n8C/dEECUhVTIv9BoGQAA +CLf6+wSJ/U+4iSwM7QoY3wAA +8 +32LynD2PNUS+zmKAfgM65wAA +HbVkzqmSZEuh6+oH7iBo3QAA ++jjHibKnRE6F94xoLDr+sAAA +6Fs//drdYEK/Osv78JnO4wAA +C91i5HF5xE2XUOVZyfLf7QAA +WkTB+22klUuDtxaVUjyb8gAA +BXPs7l2boU6n6hkCKN+HBwAA +VTukdeFoqESJY44bna0TMwAA + + +k48n8C/dEECUhVTIv9BoGQAA +CBkE9JDrJU21ybYWNP2cCgAA +8 +Sjbwduw+yUy6YKwMJRDn9QAA +RCwYqywTKUyWHLN2p3k73wAA +i7WgcsxLGkW9jueuILf7hAAA +ukqpM2qDDkibbdj/IWzVkgAA +48lG3YT+6kWSp+o5ZeXBoAAA +wNfrc/LQmUaoVtseaMproAAA +OWk1nrPBb0axfmYeKsjtfAAA +8YDAKWlN0EOkbZr6QIRbogAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +bFWnUyz3XU6PUyO8klcYtwAA +znOhkDQI7UW1LCvNppPz0gAA +OyAECyVdIUy81hOLRTjNZQAA ++MRomIMRK0ibtmFnRIyulwAA +y6Oz2IKPREO+ayJvu0bgbAAA +HIot0WFTFUGmrT/d7i1FQAAA +IkJgV/YDH0asfKCc6kYdKwAA +VDJ1jv/imkqltbvjuDa/PAAA +2 + +False +euFZ2oXh1UyoeBpwCRLyDQAA +gJ7o4uiAMEqSPUL3dadz2wAA +8 +bRj+Z0B+pkmSHphrP9c82QAA +VZOZlBxYK0mQpScnNl+VrwAA +0VRSk03Q8kW6EUFpKXHrPgAA +6JKgI/q1C0SqiEyZiJanhQAA +C0N4TLgCl0CNoLW4dogDfQAA +ht3SGjyEfEeyOWe3Z4s3/gAA +DxQR7FaFFUu3IIS8RDMZtgAA +zDVl/QeveEG/USqn/02KJwAA + + +euFZ2oXh1UyoeBpwCRLyDQAA +wftqTlAvI0+cR9j69saRNQAA +8 +YKdwlOqxbUmcHwlEZGbbAAAA +Z4kmJUO+B0e6H3WfTULQhgAA +QeMWYpqpmk214x8wWzYjvQAA +6nr3jdfiCEudsLpG1r9fYAAA +UYI0q7BmVE2BDBAnBvN8KwAA +zjR4X1GXdkOSwV9Jg7IUxAAA +7qOJ9rZH7E+Cw9O4m87FAAAA +i9M+gCwOx0uSBI5us8ZeggAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +4oPnfAFHhE6/ISoA/+aS8wAA +2rIgenhnpkabtwRUsoBPIQAA +8dK5J0xvHUi45I/ldzxTjAAA +CFaHNx0wXE2oEMC260K6ewAA +vr5dJIVOv0i4095jxhQgLQAA +xjRSn0jCck6297mpxLiSeQAA +0fDmWGdYC0umYmtNhgRTlQAA +JC2ySJ+8l0OmPisGKqbC7gAA +2 + +False +h7KFG98rIEKQY4C1dOWmFQAA +wftqTlAvI0+cR9j69saRNQAA +8 +amCS86yQokmBw9iE5Em5XAAA +wLpk6edW402MJiWMLPFs4QAA +GjC1B9dpx0WVHy9Ch5p7XgAA +2a1E+GT1OUudOpzLmExIlwAA +uRUuJjzOSUi3zedG02xZOAAA +coB6KzFb7kGcscLs3tUsDQAA +UogwSIEaqEynqg28c7LArgAA +Y+iHdmVp90WAIcO2JV4EpQAA + + +h7KFG98rIEKQY4C1dOWmFQAA +qlZGCifQOEyQyqBzIH1x/AAA +8 +4YWPMPPS3Ee4eGBBulWf4wAA +x971qljypk2Mxs4EESNUlQAA +vDw4VTS7xE+ALnQIi+LghwAA +yLxma2tYy0WdKKGTatwHtgAA +bsnO07b3aUKAOHjtBiOKqAAA +C6FnR8gV8E+ge8Anc8s1MAAA +HEh6j+pSFU6d+mygI7VmLAAA +JNHLRwWRh0yxzb73OU3iHwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +ApVaIJ8p+UuKYOnmucWR0QAA +j1P+mulSiUilwp5iVIU6JQAA +VA6gJS7wx0OId1Ym7CBCtQAA +nCUUpsop0EKoN/1sGtyMTQAA +2 + +False +GTroIE/UlEq3H/lwjMvR8wAA +qlZGCifQOEyQyqBzIH1x/AAA +4 +EV6LFWRMUEGUkIR0PQdmYAAA +ekEO6fRpHUu1agfvfFotVAAA +usF7ceVB0k6ToFDOiEy/xwAA +vPK9/RbxDUCkokkIG+02xgAA + + +GTroIE/UlEq3H/lwjMvR8wAA +aUVRiLFY4USAN9h1PY1/vAAA +4 +BlqB20QFNUic8w2EL1Y3YwAA +OUPVHH84SkiSpock8Zk5AQAA +aT8M/BevNUaYUuk1vcfW2gAA +4dMobckqEEyYi5I9LP+iEQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +16 +ELSMvyV3sU6uKnuwUH2DqQAA +672pY5ZNT0q2iAq0JstQzwAA +deVrWv05d0WlEjXfEZMNVQAA +aiSv5GtVZUmblrWnG0OWKgAA +UG1DeHxyj0KnP/b44l6YxAAA +HpjhuM8doE+hLK5vtuaWhgAA +PkkR8Y5aiU6ROcPZSoYn8wAA +zHG6Wqua/EWN1zxQMMY6YwAA +WctXCjeNBU20LgE/tBUA0gAA +pEyE4I/J9Ee25anDvRikCwAA +SgC7JEd/PUS4o3RvXfDtXAAA +zpYfEH2SLEC0ccR9t9Mk3QAA +jwh7C07g8Um7ul0hUqdD3gAA +NHQoed3nR0S4Ho2s4buWQwAA ++B6x6eM/p0K3hgctczLgJgAA +zgrRJMaQ9Uimkz3OYZi8bQAA +2 + +False +hKV30qElWkWAVhrHK7PJbAAA +lOyDrRE6cEms6LglvRhNKwAA +16 +wrPs7btneU+4/4uy1t65gQAA +EZdota7+4E+fapccbeVGOAAA +WP0kV5ui6EahES4xbrNn0QAA +AaBwTHQlcU+2zxABLAx/LQAA +XxFpGIiCe0iv4t3ZhWQowQAA +Fdu3DVY0OESeFJp19+do8AAA +LTCccJGkJ0W4WniLabjCzgAA +bUhu9iXnZkuDMupVNbEDhgAA +XVRnmgXxw0OFdlZy2gjLpQAA +RngVbJE2Ikmc/SMbq9QKwAAA +6c5YlhZitE2Pymwc/l6UywAA +1s62siq1bkWG22g9hv5ocAAA +uvb0kf9AAUKIJSQWyNwrQwAA +oUVdoKJc/06teKF2MVbVnQAA +BZuKn+GVCkuxw4HjfESHvwAA +9V0i+Lhn9Em+Hh8gSD50GQAA + + +hKV30qElWkWAVhrHK7PJbAAA +ucei5JvgaEarsuGuZmgj7QAA +16 +adwZOgzgVEu8vRZnzLvX5QAA +B/5bwhGST0GX3LqdwAUEugAA +uEiwFi+v60+4XAsWsh01WQAA +xz5TCgjZbUCh+NdRSPPN7AAA +Ejobow3maE2Lo93EU8TC7AAA +8lsmxrk0/kKwevGvhhPoyAAA +jCVDZJOqM0GbioKAqDMW0QAA +t8O6PWkSp0ixlfnyup/pqAAA +yORLurs3AE+B6CmU04AjxwAA +91a58vdPmkuriQ+CyOah0QAA +Ki51pHfXS0mj5JylzLc1QwAA +C0aYgVJRWE2w4FrwmoxivgAA +4Hg/OHi3J0mNioVwdmVEJQAA +ogClD8IlS0OZO4USfnJL3AAA +6Lk9q9ATA0WtJsaWYUu1LgAA +y4iyJrqWg0+/KNIEpVCwXAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +16 +23Rs3xncKUaW4e/mZABZEwAA +Sr2QccDmA02ejFaCDyOhJAAA +LKeEwos5jkO/UMCrxr8ogAAA +0JoiXfezFkWUyb8JzfAMpwAA +fsKF5kiA60eCCGJ8JU6A3QAA +MyZA2JbAuE6HVqdkJh2IAwAA ++pcSzpBV/UmByuIz4qc5RgAA +U0EMSNhd1EiZ9TM17PxQgQAA +ocxoNoWL2kiBpSYI3UlPxQAA +U+/GvvKmX0+EXYaoXyFZxwAA +pTcH+/+sH0u3NlBgXnZvBgAA +GzoyQjXVKUSTIlxWiv1OaAAA +il9FI68E1EuiPOXsXr/qAgAA +d0i+tnyjt0umpcugv0NejQAA +vF/PafHN6UCn/88zBiCm0AAA +og7pF0IjtUSN8mIIjTiXywAA +2 + +False +Htop0thy70qsJ36MwSIctgAA +ucei5JvgaEarsuGuZmgj7QAA +16 +3civWJtnOE6KaXbtjF3EtQAA +1nnUX7BhoE+8FDqX5JCMrwAA +Uq82LGc7106GAoiBd22jmgAA +e/+0NbH7zkKaLmb5SvnIEQAA +JQkUmAVaUECK68Z+PBZMnwAA +wKeELpbiqU+mZNXTDFMPWwAA +RBXNNt0PpEiMu6NWZ8kV5QAA +bUMNhQpKSkCb2UNeXaU4YwAA +4IRbPLgURE6vi5yZaCKVmQAA +9YsVw3qVmkmdIz3xvdWksAAA +Izwy8U2q0Eyn8qFcPRTtoAAA +uFqhFWEUmEKZPHLcHD8VIgAA +MJw5q9BiOkGhqoc80YxfBAAA +ixPqHpjkgUGiDH/lMJ+W7gAA +xjChHdA9vUK/Mb7r/r9AggAA +nyMdulH59kqjVjBmJhpGUwAA + + +Htop0thy70qsJ36MwSIctgAA +ZFe9gOmpTEWMgVssyEcAWAAA +16 +eGuSskckwEWS8bm6OG1viQAA +5ESeulQ+k0qlFsdNLLD2RQAA +/Vq1dV1v7kqB8WKAWWww6wAA +JBSR6uvp+0iRpOdtIP1wSgAA ++U4v0NjmkEOQ/oXa8vkCMAAA +akDT4SbVhU+jjWvvA7IZ+QAA +wDKW+XfpY0WY3iwDwu6hqgAA +Q0tBGQROi0KYYrMQ4hH2VwAA +xwiGb0IR0kONiIzpgVIQwgAA +OJWe3Wvwok+fKXprWMCX0QAA +64U60zfLP0afLKQS+xSPVAAA +M4BwK6tIikSlB9lBtIyboQAA +hbU308CQsU6aQSukxu2YwgAA +wU8EUTRigUS3zrpSxXAiNAAA +BKRR4+g6DEu0zV2FUBFfJQAA +MRwFTtsyykuXA3rSlzOTiAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +tJ9OC2uyr0a5R/S6A80mSAAA +iJFVNyIKGk6JWN15tHYGwgAA +EIPWlpufJkC1CWgCFKD5/QAA +e06qqjV+LUuQA4gcALfFVQAA +2 + +False +wt/kYLKLC0CiPMmQly9eoAAA +ZFe9gOmpTEWMgVssyEcAWAAA +4 +6V1345E9/EaEk5Wlz0UXHwAA +tcGN1Q/aH0em5vS2B28e4gAA +X2KZGP4vPUSwtZJqfbQx3QAA +e4uR5nM3WkmgbCyyGuaFMQAA + + +wt/kYLKLC0CiPMmQly9eoAAA +bjrraLbGKUSY+GYzLNk5RAAA +4 +3IEe8h7VzEqVIels70srPgAA +np8+zFbOdECKjn6N92ocugAA +K9Qh7lJvXkmXFWNOQnoksQAA +u+0F6EQoZ0Wc7TVhOqm+/wAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +eK+s3h1+tUa5S89BeRTysgAA +irvhe9biS0yCRokY35duwAAA +g9rjg4Kwo0iCHTt97UKetgAA +1t01IKMBekWnQr/kalH65gAA +3Urn8h+7IkuUb+S9M1o5oAAA +TQI0/RGCN0WGXsffNwjglwAA +Y+SL7VCO00mc23mHNBjiTgAA +m7lkXpofcEC37XnKaTp/pgAA +2 + +False +t/ADlzXN00KW0NiGhwkclQAA +lEIXTXT9L0CS9sEhjP/8NQAA +8 +WHqHs0BXoEaBctJ2a4HLxAAA +KNbDzQoB1kSAad2TYKqCiwAA +xW1aYBmmzkeBvirin2DeXQAA +UD/VE5O5dk6xa7gcFk1rxwAA +nja2xO230kiyKAlW444ggwAA +nmh5COzJZEacRxUgBcmrkQAA +hom19XpmKUOHCPdo80KrMwAA +YVb2yD8+70SeWYu6bVUMAwAA + + +t/ADlzXN00KW0NiGhwkclQAA +jmiilGYeBU+1y4Yw2n8CKAAA +8 +5hSe19uy60OlYLhjkm04hgAA +xUaZ+tGXsU+l0EWjPeS+XAAA +nbQW6h7wEkCjQws3cgFJQQAA +jjE/H5LyQUmmExw2VuMZNQAA +RTvHi3wSPEasB+W2svEsXQAA +SDvVxVQeKkOIIUjgrI9zzQAA ++CragV7FN0a9e4TE2i3ZDAAA +t+6jPxsLx06wKn2VdwOreQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +zgcZD9Eix0mQqY5tiBc58gAA +xRQTPxvLJ02qeJABqaiA8AAA +f3lulNClOEyUnx9kwpFozwAA +FNHQaQIpRE2cZfU9uYuJvwAA +/7Y7fI4J/kKePnnikUYKJwAA +dtDq/VWElEmEZKgm5DgPhAAA +q8Enx2j1jE+MCMQdbFWIKwAA +chr7OfjQr0yE+w/9pOVsbgAA +2 + +False +5n9wkh0NQUu8BFWyytdErgAA +jmiilGYeBU+1y4Yw2n8CKAAA +8 +YxCw3+kozEq3lDv8Du7uFwAA +mVDVzjF0rUKRSRu2PDcyHgAA +o+7ZOrSV00amudfAvKjpBgAA +IKkaD0uqOU21qVYV1VRbmAAA +IPdLjDMwf02/2AYlxVN7aAAA +PMx0J2aKtkiMPkfmmGgj4wAA +iyUWReEolUOjip3Ir35pwQAA +jQJJwJoJqkaTRWWDxGHSMQAA + + +5n9wkh0NQUu8BFWyytdErgAA +RfRTk7cK0061dLioGm8l7wAA +8 +s4wRQk+rKkyT9imx0mP/BgAA +Px5k9k8MnUePr8KB87O/pAAA +fisS7r35gUaumur2UeJ4YQAA +6y+w+iKGb0qytgrOOekGBQAA +1lbbmWCUIEKULpxG32UtxwAA +8fcr/nszaEOxN63YzX6aTwAA +EXtWwuWUDkmlhxj7uZ2URQAA +wrTkTSpbc0GOAJTQ8YHFRQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +yhifciM4t0SxSdh9h3bXWQAA +2dvooJL4nkeQFxy1FwfqrQAA +OMAqedbcbke4Td9nlMbBjQAA +hj576w/e6kWlzOdCESfG1QAA +23jf1GrnXkKEQ0n7Bvh9RQAA +FuTxkCpgjEOA6jAKoor/xAAA +lqHQtCRUsUOJ+/WK6LIipwAA +HctHTpWvMUWsOxTOsnvPpgAA +2 + +False +1QbYYnq3ykqiPL0Gv6UkSwAA +RfRTk7cK0061dLioGm8l7wAA +8 +v8ArftSuoUmQvafMp/xnqAAA +zotXwQFK9EeqePAaW6CCYAAA +4t5gJmqppkS620x3ZwRLeQAA +pXzSsjnf8kGCv3karBwU0AAA +gYZs8WaqCkq9QUeWj1MG3AAA +2dTYHxZCI0SkCrOufj8YUwAA +WpFuOatGF0Off0YSOpez3QAA +qRsQhdBHlE+iJap8o0CDKQAA + + +1QbYYnq3ykqiPL0Gv6UkSwAA +G18zTBUAj0+SdrsOmksR0QAA +8 +ei7z7krny0eZbYgwicOTPgAA +hxWyFV27X0qSedmq3fk8BgAA +t/zTGwkt5U+hYpHWo17MxQAA +ia3WFVStdk2DNEsRW8vsHQAA +nPJxrC+2z0WURbKClcdRSQAA +gsSk3bfnf0Oj1Lc+zN7q7QAA +VSS5xV9YZESUeD+xggX/IwAA +KXO+UsTChUq38634eSKq0QAA + + + +dev-env-install +tacoxPrx8kCKprVgJHnvqgAA +8 +ba/wrXKu5EuHn69Sc1EByQAA +7qBr4kbrM0Ok4Wvvp8OiwgAA +SCw2lGX49UC8psUFSwkINgAA +1VXVAzZDa0O66YYoAelaTAAA +Hb/FVc/wi0OFVH1zZMj5cQAA +ZtYh/d6uxkafJUW9Ja1SSQAA +CxC7S8TWhE6XFsSP70kZNwAA +D3FjLXbkfEibzziVdZZHlQAA +2 +h4chvQo17kKpYAZk9SZs0wAA +RYlosGPoG0aBCofSJbKnegAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +1BeGHCaJM0aE4liGzGSKEQAA +/OtrZHS50UmxTtXyPCIv2wAA ++trgfX5CKUuKneW1O3iLpgAA +TYwOYk+BWEOU97RbRQIZmAAA +IgWDdbat8kGTkkhRze5NpQAA +QXsNU/tJi0m/sKust3LpuQAA +SA9ILRBpj0ydt9w5LayjFQAA +4TxVvTwV/kuHeJPy6bZ9/gAA +2 + +False +3RL8yaG7p0udrs0v9djevAAA +l2Lw5fePkE+9xXcdzSY+bwAA +8 +1rDBcyTy4UymdMr+VkeDiAAA +b6gRd2nYHk+sjJlQgIYocQAA +w1TTr1d8AEWt7Ztwo3qROQAA +ndVjm5cqoUWQtwTV/vvB6wAA +8LrVVTjyNkSZCblGqcDyaQAA +YI3j2MfpDEWX5XT3BOE1FQAA +cU3QetonzkSXsQIYo6qMkAAA +MhYRlrpa50u8ua6aMIOifwAA + + +3RL8yaG7p0udrs0v9djevAAA +kM7+GQ5RuEmygAJdSluSjQAA +8 +Inj0+DegnEanA9QLkf381QAA +xWmm9IkbFkS0FnbyVJkYbwAA +PMSgMdUmWkGCgBDrXH6wIwAA +zmaEd9UklE2gaxd+BD692QAA +1FMYGA9b70uUpVfHjt6I0AAA +rK+Mwd8nqUyMSVjVZFO2wAAA +cisi8Dg080+GPHuMIfsbOwAA +0K5CwSSjGUy+OuUg+ymSCgAA + + + +web home pages +tacoxPrx8kCKprVgJHnvqgAA +8 +bwHJGe0us0a2jeejcciWlwAA +5nWpCLryxU+W1L4vMMysUgAA +lTn3JPXrE0WtO6xxO/meIgAA +rOYnh5GiIEWvpsqjPR/+ugAA +MD2wdRztkUaHPYJptdpRnwAA +n2mhrPkys0uUk5zrbGxJkQAA +6ZdUhecHXUGvxYQET5eAgAAA +MFrT63/q+E68adfyjGu36QAA +2 +W6JXNHPDXE+JzttRtRevOgAA +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +EXZq7lQsH0C0TX8svYjG7wAA +/X4+5hi/vE+MGWkEeKtwagAA +SrPE9PVhrEedX12h8lHgNwAA +BqyT8Mz/cEuSgmqdPEgV2gAA +izoOonNJgkmVtNQ8BSL6GQAA +nyhO2XsEZk2/ocJBCQDifwAA +T81pj0fIzU+305smIfznlgAA +r10TXV8gUki+hy0ivghKHAAA +2 + +False +BYyEw6WhrkigDw+109evLAAA +ofqv4KD9ukybRvF//Fek/AAA +8 +yN7VqGtqpUyravSEdu2rzwAA +4PPrIg1ZCU+hHHlPqvmIQQAA +31MYfdVsxEGmEYsOfMLDxwAA +eXdc++2Blk+pga7UqlXLpgAA +cNAOlL7q8kG32zKwquMNggAA +1IdMwIKVAkWbiUwRJaeM5AAA +MpxlUePbikSqO/ZfqoRVmQAA +YRoVWDG7e0qP+KkrrYdy3gAA + + +BYyEw6WhrkigDw+109evLAAA +czS7yLr6oUygLwEMTWJMVgAA +8 +zxBR5c+keUiAk3nmi403EAAA +++lWUtNWQ0CIrLSUTFZiUwAA +1MZZ5p29yU+gvc5aFuydEAAA +i38XfgewW0G3A/juGZFDVAAA +puGoNqmn30ycZD+Zuwkh9wAA +uU8Cvy77BUS41tikV+UY0AAA +UAOOm/CB1UKm52VIVpzj3gAA +pXc4McsLgk+tdSmHggG41AAA + + + +first-ver-dev-env-chk +tacoxPrx8kCKprVgJHnvqgAA +8 +xPeRQZfwOEmy8TaWIhh+GQAA +ipReBhaLlUiP0veoOeCueQAA +lbKCy3nAjE+36pd+YsvbPwAA +fmef16CUgUCIJ7DECeS9+AAA +JUjJ0DqUdUiwoes9veWzIgAA +XHJ+KIa+LUOmnxrvG19UrwAA +DCvGHwWMiUaM2EPCXRglRgAA +mOeC3oy2t0mAmrzYLD6MnQAA +2 +2dUTUSyX8USUOoaapULmuQAA +XXlOcGC2n0emsre13Wy0GgAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +FsBmt7f9x0i8NZmH9PBT/wAA +Jh1tA+9DKECphGpBL9rOqgAA +W7nTlddAq0+DXFFC6ARAkgAA +X5tOLh3e2EyLWr25x8EsSwAA +D+m8VOzK2E2CWGNaS8twSQAA +SUKHlaWKY0SYz3rgaS47dAAA +5sTNoyMVSkqPzS3nOI12MgAA +dSudZc7AWE2oZ3u96/qRagAA +2 + +False +ULUs5j3aC0Gd9Vn1OUTU2wAA +czS7yLr6oUygLwEMTWJMVgAA +8 +hUEpCPvaTkyEzAeb9oyubQAA +Wsw+mey+pUy5AohEUrtKmgAA +CqwiyBc+KUaI2rLHACHtogAA +ToVEL21vsUSMeo/HuVDP/QAA +OccyHfK/lE+XmSKA1iOWXAAA +4Uy/BFQQTESijev9yxqizwAA +7+9jwj60MkK9nzDtBWjMXAAA +SNfnTvkGw0yx9WVIMBGwnAAA + + +ULUs5j3aC0Gd9Vn1OUTU2wAA +KmQBouG6c0yb16gPnUnBtQAA +8 +zGlIglH7XkS9P5nfxe/hwQAA +S8P8jRtMgk+qLuGTYKHjdgAA +HJ4VafDpE0+xqpdGQC/k3gAA +HYNSdg0kHU25MO3otgr04gAA +Ep2cIRxHWUKCVVlqQncFnQAA +pUyUGxm2xUqFGCHyn2Gq/QAA +2AyHN/WHxUupxN8PyCbe2wAA +XvhDnYaBOU2vkPhdhs3fdwAA + + + +launch-pkg-publish +tacoxPrx8kCKprVgJHnvqgAA +8 +f5vhNxPD30OIg0/MpcEnMgAA +7Ek7+e7sXUWCXM/B1iYyWAAA +fSbvcnMQhk2y6Dfu18fh/wAA +9eix14HVGk6iND2tYikfowAA +ZCA8lMYtvkK0TOXL+AgswwAA +Y4ZHWvzhn0a2kJK4AmvZOgAA +SOmtQrqMhEiNjRvbTX2yowAA +H4Ib+2CtoEasviUjTG65zwAA +2 +xGchvlfNhUO0g6gfoLFLRgAA +L7xnZ29mQEadCI+TRP2QQAAA + + +tacoxPrx8kCKprVgJHnvqgAA +8 +L5dPNcLFS0WwJgs/xGJvzAAA +ziTnWmTFUkSA92yYD8zFBQAA +CFuaOqGBW0+iB8JeadyfjAAA ++p5iGUJE2kmhWLKtb2bNxAAA +sRQtOebtnUizFq2DltgMmwAA +nhY/0P2Lg0K+vRyxq9aMUAAA +pa3Dr5INn02ZQjBZOiRZbgAA +NXzZNZsd+Uqg5OQKfE4tKwAA +2 + +False +4wmxJ9R9R0eU6Jn8Ho3xFwAA +bjrraLbGKUSY+GYzLNk5RAAA +8 +lBU4DnE4a0CWPnDGuqw6SAAA +q3huMYIN9Ee9A4IsNHTZPQAA +OZ8lvoPq3Emra+EuBtjTnAAA +vVczgk+j0UCy0tIcFcmZEQAA ++VPdWUPcA0CZNYI4hBxBuQAA +sGZ0+eQn7kunhq3AfuzjSAAA +8QjRv12hcki/c/oIEBtdUwAA +x6LDR4tDmU2yyTXRK5ZmbwAA + + +4wmxJ9R9R0eU6Jn8Ho3xFwAA +lEIXTXT9L0CS9sEhjP/8NQAA +8 +4WrWHhCGgECeXGxs+FwiHgAA +36jq2bh15kWXx5iHEKVw0AAA +obw/YWnbxkqOMltzJdIPmAAA +/YXeInxHx0yLIZn7mPd4nAAA +r8e9MVk/UU6E+J9ELHzEegAA +Xv4NnrN6fkaX8FAaquMNJgAA +dmaBqPLIN0WVrnI+lnq7pAAA +keDNi+t3yUGU13m+iiVcEwAA + + + +build-debug +tacoxPrx8kCKprVgJHnvqgAA +20 +8o8JeUyoWka2YCr2oj8TIgAA +vd8AYCy53UmF9R658q6+fgAA +pQRW3JLjPUe0Ey3Q6CAz9gAA +6wPjZMLJBUy5GV/gtO3A3QAA +fafd82Xh5Uu1mt+678C5PwAA +wScVwume1UuXvylUQyJcLgAA +gfJmJuROV02VAUs7F3zghAAA +QyB557azoU+U7UiRx0zfUgAA +4gxKHPiS4kKv1jznPUiVLAAA +hA6lwyp95U6cZrsxEmrZpwAA +io3NG7NSjEKdaeuRWeTIQwAA +lyn4DVJ/R02D+cQt2ywNfgAA +ubE8N91xkU+8S/F8CDBhWAAA +MNPM9e98CEuq9fHZVeliuAAA +NM4VI5erKUahBUVJj5TDUAAA +QAswIfT7L0OgncljLSWntwAA +mrtIj3FcCEKGxx/TACfdzAAA +G2QIm2cEs06YhaqPO+glCgAA +x3oKSmRCpEaSNflAh2ivMwAA +C5W755qNvEi/3v/qP8HYNgAA +2 +DiYoPg9r+0KN6xRjGDN+kwAA +VvsNJNyOO0e86/eHwYM58QAA + + +tacoxPrx8kCKprVgJHnvqgAA +16 +YcX/A/cPYU+1nUlhrpozswAA +onSs1LIldEm6lhE/SJbE6wAA +VFPMQMEq6kiKT9xvnAAUJAAA +GTY1wJFPOEG3H9kMQJExAwAA +EAd+u7pyI0eGvl3ncpA2sgAA +aCu34FOIg0y3mJV2hdaKYgAA +486AIXth90OWDfmbx7qWUwAA +AHTKQxrufE2r8X84kxQU4AAA +qb9v6XRy30SjLAfRE8y6UAAA +Yy8UWHjuq0WcZr8vAsDbhQAA +8esb8g2RZ02fw5tE1cgGQwAA +EEhvW/6k90OTer2F38bIMQAA +E84gE/YKHk+hXxs60s4TcgAA +NLBzBWskmk+oBT8WDK7ouwAA +wyXUsShuKUyR84X4zH7flQAA +NMO9bvbJbUuk6Alnod95vgAA +2 + +False ++nJDFiS7VECOJ4vWaYvszgAA +aUVRiLFY4USAN9h1PY1/vAAA +16 +ukaguX4DaUarG+u9yukRzwAA +dMwmFyk9GEyuMSgc/wy3gQAA +jQSlBqAFA0mDyIN5h3VZDwAA +57iR0L7gvEGC/gvlMKcTlgAA +FQHq1WeXGkyrJ+2lLAFwBAAA +D8nOU0F0W0G+enyYrZ75NgAA +KWpjK3SoXUOLFXp0RwZ1aAAA +6ZUPKx85/0O8tj+M5tmVUAAA +DLgiQeniQE2qzH+RFkoEkQAA +IJE6pvjfbEKwesUBsgc7kgAA +LMl6Ww2xb06zL9cfQZtdOAAA +uxlxO7sStUqLdbSkCdtNygAA +In2F0msavEGd4+Bfj0vbkAAA +a7TOZu//w06A45xpB7QyFQAA +e22ca6p3wEeOsZbZb2U47AAA +pxwqk8S7IEGHoSZ1dZVsqgAA + + ++nJDFiS7VECOJ4vWaYvszgAA +lOyDrRE6cEms6LglvRhNKwAA +16 +CK82bAuIC0CascsugUXsHQAA +cjYuFaYi2Uqvj5EiM+mSYQAA +sb0ocggYr0ivDFAeSJhaGgAA +hnBwISb0BkqMZsB72qDFPgAA +vrHwb3STNkyIwnAEBS0UEgAA +BEdreG/R/Eq2ClHGKuq4BgAA +9EzDFBqF9EyOFIwV88xbTgAA +TRgEEzBNlUWLqHZ3s07ZawAA +gsYC9YJwvUaHfRQl1zcGQwAA +lfzmhqZj406OA1RIDpmNKwAA +VrXPAIXChUaF3dOEb4yelgAA +gw2xhcPvZEe0WM+SBhw+MQAA +QlsAdql5Mk6OeUobS3GJ3AAA +vrymV9lDA0muZfJSg2KPGgAA +wsTC1B5vBESkqyD88GuBBAAA +TWouZRd6gEW8U+r00vMszAAA + + + +get-task +tacoxPrx8kCKprVgJHnvqgAA +8 +dbDAxqIYDEef6cq3x4sQfAAA +Ms4aM+Xhc0+Cse/Ezh5YyAAA +GvA9RoHfF0Wj3JDZ3dBWWAAA +RRU6mr4m2UeuPuvwlZsDxAAA +PDF/3iFxa0qb6QrTKCb/YQAA +j1FipIXkwkuLNnXJrtjO/gAA +6E8wutm9jkSz4+3B8pJgzAAA +ObJJTAyv8EuiQvdQAF1IsAAA +12 +XdMG4B9cfkWIcWgvsVmQUgAA +qb8LVJbh5kG4uilxed700QAA +cCWrTkROLUy3C0VntDGRjwAA +yG+8cHFE1EeshJkd1dKuewAA +G5oIOUpHjU6CAVOHO5cbSQAA +kZf004keokGnnIbJREbJ8gAA +50uCeDif8kKZsdKCSOxuyQAA +Pqls1twyrUOYZaqZAZic8QAA +XPjUoHBhGkOE8kyb9uqy1AAA +7QebQWj8AEy2+oMl4FpmTAAA ++Ekcl1W/rkuftPam8GOdiQAA +2nuMoO9sH06KowfPyWX8XwAA + + +create-test-unit +tacoxPrx8kCKprVgJHnvqgAA +8 +1soCBV2ToUK8JVFLvn+e2wAA +TUY5qOG1Wk2L4dK2Sz1bHgAA +r4JRHbMgrk2XD1LtUyWhlAAA +96xtOKfc8k+YpIcLMpzWWQAA +iZbm2TAx1keNx/mPHzSEmgAA +74AFtM0Y3Eu7Qr3msZk1/AAA +aJIYE3lYAESHESjaTsbdbgAA +jGPh5jW7FU+Yzr6Z5vTWegAA +3 +pSiPgqpAb0+UkTDVbbXBnQAA +DFlh0do87UmmJQigSQRsiAAA +2t6hyyogW027sVhhVrjclQAA + + +bugfix-coding +tacoxPrx8kCKprVgJHnvqgAA +8 +N1P5SuGh4EWdFcErHd0tKAAA +EQPWWuSqVUeGLxNVsXR4owAA +b2rJUuCenEO3F7brCai33AAA +10MTb/zOsE+Y0pitUa1KUAAA +vmizIwBnQ0SKIRlT6FSqSwAA +OzxXAzuxCECfRoLz7F4qJwAA +Xzoq618yJ0C6kSd8/Y8r3wAA +fwgX/TPnZ0yxuSlUG9nWUQAA +3 +XyL91tS87U+MpUc/Z25u1gAA +lp0ewCTLb06H/3WjWYmLOQAA +WqzD8pNC6EyQOHtzw/R19wAA + + +initial-dev-launch +tacoxPrx8kCKprVgJHnvqgAA +4 +uI0Vw5nV8k2MpwNxuYq/IAAA +XQrlR2J2FkemJnNVF09juwAA +Nw70TZWqwEKEe5uHIFQpVwAA +1zBbL3jigU6wLBuTCxn1YQAA +1 +v/43TdYAaEacDIIH0o4rFQAA + + +bugfix-estimate +tacoxPrx8kCKprVgJHnvqgAA +12 +IjimQpqMbkC8IpOXi07GSgAA +/cZDuD4jR0O34YcTRfRsWQAA +jjJsTCw84ke5j286f1BfkQAA +tY9/iLXqT0W/syfdAJLqmgAA +op7TXMmXt0mHqk1AIwA74gAA +m/74iar3XU6wz8WDBqi6jgAA +6WZvTQptJk6RR60FUydKAAAA +tsEvZ7FEwkicvO6yHyOUyQAA +6WD/injqLkGLLLrBFiLSOQAA +QNFykr69eECPj0/V6+5YdgAA +u7tk2lPZZk+0vdmDA1J37AAA +evBsfM9gAUqOGdgsUIYbZAAA +1 +DLyG2IErKEu/iLgO368jEQAA +4 +Jrscu7bPaEOGr8p3WU+PYQAA +gfyHi9WUpE6GD9hBzk2snQAA +5RC8wEWMEE64UO9nj5kBkAAA +TdvnjlqSk0mqUzoHhiVfUAAA + + +new-feature-dev-launch +tacoxPrx8kCKprVgJHnvqgAA +4 +EJGh4IwbYkCWyCQWvIs0cgAA +v0iUxioMTEWRqob+OLFFpgAA +jJEQt4nzfkCSg5YlGt9LbAAA +CfthfYnYbECGOYkPnqR4LQAA +1 +VHwOYW9vAkeUFUXT+cxoEgAA + + +task-schedule +tacoxPrx8kCKprVgJHnvqgAA +8 +5srcgF0EYUyRM6tylL0wVgAA +Xu54VWu8wkeijgDGJaqNuQAA +v4ZnhLBpxEa7GZU1RBMP5gAA +dOoZ/1BsCE+WFWqlspiDbQAA +78WbrY6e4EC/58P5Ws4JCgAA +avBhFpUQK0iDdpDZEWL6YwAA +k8J1gBfsp0u9lwLuIrLzxwAA +ay14X9YfAkaTyLB5uIcx/QAA +7 +jhEbrPQWVkCDWTgpxUyF+gAA +IMPpHUaiT0CFZLcH+44uQwAA +X82I741yL0ybUyEPhBbTZQAA +4Ujmk5gLj0WyU3SYagr0mAAA +42F3TeDc+kOeEbEW2sSOqwAA +v4O00Fgt/UO7ZDLsyBtHIQAA +5z6XidYYrkexqaAHLrMuGQAA + + +tacoxPrx8kCKprVgJHnvqgAA +4 +8wc4LntVV06YQUHrphlYQAAA +O1OSy5OLu06z1200FfZnYwAA +lLMFX1l0RUSShxqU+stRmgAA +3whQVDqlAUSLBxfNcgLdhwAA +2 + +False +X3JNoNb8Jky2P0O9whu+8QAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +ovLTerBOqEqBIrrcolH9vwAA +HZt/1fUltkGvbGRtpKewvwAA +GS9fAYzR+06hzTzQldE0/gAA +NVIdYUxIPUWDxVZvtmAI9gAA + + +X3JNoNb8Jky2P0O9whu+8QAA +GB5fgt+BCEuZu+MykpdKRQAA +4 +pMhuaX/f+E68J9HnsTSlWwAA +TlQwGjNbNUq8e1XBffomXQAA +SlhG73PEnEqrHp5VLn7u9wAA +6UiUqMycfUy88EkFhdatgwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +wNeaBDZGOUyVfgkes4au3wAA +QxOrhy5efE6PCLoZK3x1AgAA +8b36DyuxtEK0ySxca1+yxAAA +JFejifk9DUa/ffgUp++1CgAA +2 + +False +TzMLJBMMOEKimlwgjlIwnQAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +Yh8oRVNnWEytikAyxs+GDgAA +ZdYQbYPwPkKT/rwkyQnf3AAA +9Ojh1NTP806FSJxTnAkzZQAA +kjldeczyGE+fnGe+xXziWwAA + + +TzMLJBMMOEKimlwgjlIwnQAA +CLf6+wSJ/U+4iSwM7QoY3wAA +4 +R04Mx4jWOEeuU+tG5PHs5wAA +r64gKB2UykW8ivHMO/g8CgAA +h7zm93+eC0ql3a1RDDiitwAA +NRRzXbgvKECCdxUUCPmd9AAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +2NuRWuYK50WnxBuUP4gBxAAA +0SMIyCdQFU+3q6A3OBoSlAAA +6J17FAECSkSCuYB1u/ogRwAA +uNegZGxraUaPNSPi7Pio8AAA +CktursNXL0eCMo1MGk5IrwAA +9pZ2B6DaSE+8T+/g1s90rAAA +teG8mx/ulECMRFVJuc682AAA +5qAAd/Kj3kG84oS/FyTJjgAA +2 + +False +DCobZcXopUed3uhu7f3tCwAA +CBkE9JDrJU21ybYWNP2cCgAA +8 +P8qHBXylckuDx/SkGs6/kgAA +z+pH801Q3EyVUqojN5NvcwAA +a23JEbE+xESafl0SbgJQUgAA +KKvDhWnzmkqPKuY0HjK8FgAA +3jCvVmLkmUOmqPd9htgolAAA +NadBPwcmBkCzQdPVoQ9nvgAA +zcW4R+DVKEu8iUYSDcj5lAAA +30s76xTpRUuGuQxZ0XJZmgAA + + +DCobZcXopUed3uhu7f3tCwAA +gJ7o4uiAMEqSPUL3dadz2wAA +8 +Y6LLjk5cA0OsM7eoYAvrAwAA +8ygaym1cVEKz+N3yjz+W1gAA +Q5ZwPenNC0WasjAzROTzGgAA +HSxQFf1qK0WYE5koAI47NAAA +Fbb8iSttAkCLoXNQQYEh3gAA +0sFv0U4b70SFffCDO7hjwAAA +CJheABw8b0irpkh65QeXlgAA +TR8oUjdAi0mgDQVpsU2x6QAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +dX9uvZH5mkKAFvskfoSY4QAA +rx3wB640uEyxN5/DQtbuawAA +64LyWbrmdEWFwQqGeMIhyQAA +aA6E1w9IoEGWoT0Q2XPx7wAA +2 + +False +BUd2VmDLEkKHuqopStVszQAA +CBkE9JDrJU21ybYWNP2cCgAA +4 +sKhaqPLUPkmQM5K/X26iuAAA +loxl+4peu0msXA77GnU8CQAA +b0vedHq3j0u0coqCStqegQAA +F6tJ0pAeRUyFxtSLc1fimAAA + + +BUd2VmDLEkKHuqopStVszQAA +CEEcWQKt0kyX8zYOPZHrrwAA +4 +GVKWXfODm0iz3AP+Sgk4jwAA +ISWs/UeT4UiqncGs3Uaa7wAA +dQaQkx0Vukqci2ZJPGzLWwAA +VFDUhUFtwEKttTOYZEL1MAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +sNLeG4PJm0+8KCjqxqOCWwAA +HVTDYD/3okuTybpb3B1gOwAA +54Cx5D+dfEKjT3d0hBdjIQAA +EStqlexzsEetdK3v+w2VawAA ++UefbA7FIUSK/MESxoYt2gAA +JGrwX2xTnUyO7LiORoNaNgAA +35v5O50q9kCcUVg18mQ6xQAA +mKwniIrgcUmCAC3v/3o52QAA +2 + +False +fk3nxDxX5USF8gff9cP5MwAA +CEEcWQKt0kyX8zYOPZHrrwAA +8 +asJnsfN0GUWiyMuFCahDXgAA +BOEUQBrK30mjhvdpQHwJpQAA +NLl/T2j9okSgftxWUdGV2AAA +aokp2W90v0qswNfwmPOJfQAA +tZjYlGv610WzFoaaA/QP7wAA +h1BJSVelXEKRHU32rCPsLQAA +X1gftWAdoEWj2o7ki1YRiwAA +LX4tOha660eSLUYwNx89gwAA + + +fk3nxDxX5USF8gff9cP5MwAA +wftqTlAvI0+cR9j69saRNQAA +8 +J7YaaNWyYEiRwsgF2wYQgwAA +cXbKG9fCoEiC8fKZ7PMScAAA +O5E0E1GJSU+UB48yIZiM1wAA +C5cNYIx0qU6kT8FdTJ0W7wAA +wszj3UGclUqXbjurkvilmgAA +Vnl1L4a9kEyci6a5Ua9U5wAA +WWxGikyDf0uEiIKyAjjmrAAA +5xtTazOfxUiBxjKpHLQMBwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +xynMxno5NUOHq++yCyr7XgAA +traa/ZvvpUegPBbgP4JR/gAA ++c016pTsWE2c8mhuuBmHdgAA +YFKXLFn4AkyJ8o/xBGCVBQAA +2 + +False +dmgxVDpivEyRrIdXr3QLWwAA +KMKq644vfEq7voEHMFkLwgAA +4 +IE//HfmdUUaWXwbESvusOwAA +2GC8D1k2jkOWw0rykq0X+QAA +X1gVSFkWvkaH9wNUwqMsfgAA ++8M/uOF/Rkq++LijZdtMWAAA + + +dmgxVDpivEyRrIdXr3QLWwAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +lucB0vsdJkKPQUhW3zytXgAA +ymkzWLJAsUO0vpFi3JPk2wAA +wEFzJjk5NUurs7wK5l30kwAA +u4G0ctI3+0CgmaFxijqQCAAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +Avubf/Jv+ESjoY+fCSXr/wAA +bTAk9AIUs0WzbfD8kX5PRQAA +VqzGpLJi2E+VpZlzs+NuhQAA +Jp275MIge0q5w9sDDfeBpwAA +2 + +False +gFnk16iOFki43F+XSkxbHAAA +PjS4k33/kkePfB8R0Qh14AAA +4 +BfBksAic0Uu60LI/dyrMJAAA +/dKZaYx8cEeZYrYyiRYU5wAA +X9WPIh7u8E+7ZxiW5atmCAAA +OtNIFqV3gEGRcxG9TEDMNwAA + + +gFnk16iOFki43F+XSkxbHAAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +t/hXvvCqEkW1Bqw5sGsFLQAA +uRjP/dEd7US4Uku0S8rxbgAA +rR9yh3vj5EOFrJDYVMnPxQAA +WgEbSvB4gU6GVbqjwLk2HgAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +jJ76FI5b90a+e5mKujxmLgAA +osHJ9uFuaku6ue23AkENGAAA +MoIUq7GFK0Wg88wQUwW3vgAA +y+AM/qQrxUyKhjffTSG7kAAA +2 + +False +O9Ia0CXMxkC9ATowborgyQAA +GbTWbRuRqkK91Ggxct5sowAA +4 +CooaoBIgEUi4hdtL77yrVAAA +oHxPaRG/nUqKic/NsC9StwAA +yxFGMboUqUqI16EC56JPRAAA +wm315JfaDkOBUzNDG7sWOAAA + + +O9Ia0CXMxkC9ATowborgyQAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +quVg6+WfjEa2I1ezl5O6SAAA +uedrORCY30SiJBNI193LogAA +XA9BJ+jjN0S+ADAx70K9YwAA +BSonIpOcYkK+u52kKButfwAA + + + +tacoxPrx8kCKprVgJHnvqgAA +8 +Y8EYWDXebEqqmXmnIro7RgAA +RV4aYgM5kE6PwLGX5PlbCQAA +RZSzrPCCtUWog9NfLYFhxgAA +olT7nuE/AEiDMgcQR32i6gAA +hq7WdlJapUCRsNXzSlOg/wAA +ro06C6vOo0GrLR1OTeXtogAA +2eAKXDc15UmaC0HKYUX0LwAA +AgkGQiaAhUeC59PTP+bfDQAA +2 + +False +hIsaQ5I0Y0qxkPCenhTfsgAA +F4Ld7UGpQkiQCCnqXOJ06wAA +8 +4MGKOKLqFUG3zS/WHyOr7AAA +zcHVUWij3U2f4OSHRSHNtgAA +rfRZgjlfbU2Q9GPaf7T6MgAA +9WYXmu4veEmK8H5Rteq1EQAA +PLrFDUDFl0OTZ4GYxcMbcwAA +YOpK/IqPVUOEkJXgmM+WHQAA +6O29cXMNhkiZvCJoA/sYNgAA +y/Rd1kLnV0OQYUyIl8KwWQAA + + +hIsaQ5I0Y0qxkPCenhTfsgAA +oKO/T5e9P0yxfxSC9DK89wAA +8 +G6P9O56zp0OagK8tAzvQGwAA +lNsNxZsx5kuZgI2//ydbkQAA +CoGIdA9u+0qWKrxSjEdDnQAA +Wt6GBkg7c0arLOwwEDNm4QAA +grMM67g/AEma0xf6QP5SfQAA +cRt1wkDA3kC4InO75uRc5wAA +C0l8Gmx+KkiAoYGtfTU76wAA +Erp8FPxuSEasSd1sJUWZeQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +ZQWq1tkei0aqV2y9CTuhYQAA +mhLUwyJky0+kaf5QJQeB/gAA +jQOA2QHLnEq2uF9+WuOTZAAA +w+emc4F3tEG4UaIhzt1sBgAA +2 + +False ++xZvDwUvFkOoytPg7jDZ2wAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +H66oi9Rqu0qNdT8O/7+AlQAA +ernUbNyH10eNZO90vpFTGQAA +2RlRZpNAPkeTSgkFCr1NqQAA +vdzc3HglWEiuEuuhnu0fnAAA + + ++xZvDwUvFkOoytPg7jDZ2wAA +l2Lw5fePkE+9xXcdzSY+bwAA +4 +Kl1lkIkKfkuqXTA7dAIA1wAA +2UNUcsKEeEeKWTVt5g06LgAA +5PxKeTHXdkO2Qw0LR+wXQwAA +h8UxVi/8lEKAmsFho3b7rQAA + + + +tacoxPrx8kCKprVgJHnvqgAA +4 +eL6lwgahcEKBUq3GRlz2ZwAA +Jh4IU3dK4U+krGZ0QI/oRQAA +OvUzLGtLH0yNsHPNrCbV9AAA +hfUS7gJryEiWUmI9MdS3fAAA +2 + +False +u2pg0MZyBkybxjv8s4b5hwAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +ukJoRgO7dEqeIxzBC8WiHAAA +g1HdXhrb506cqQbA6Nh3fAAA +LssztM2JukuehqMSYvNjIgAA +O7zJTWjg3kyjAgSat+MEYAAA + + +u2pg0MZyBkybxjv8s4b5hwAA +8v8IRJdlJUmbHIylKGey5wAA +4 +xOl++89mgkGXasQBMel+twAA +xD9176CVbEub8tdlNDaF7QAA +nL9/Pzg7gkicKqdvYbcSswAA +JgOWGoUr4Uy5jhm926nZkQAA + + + + +Design Model +UMLStandard +designModel +IhiugfF1eE6vc8zKnVf8gAAA +12 + +top-level-usecase-diagram +yePcB6NdXUG1SBs2wQJA7gAA + +dAvcL1pOSkyfQnbJT2mFKgAA +80 + +clMaroon +$00B9FFFF +314 +214 +245 +169 +System + + +clMaroon +$00B9FFFF +394 +338 +120 +32 +oKO/T5e9P0yxfxSC9DK89wAA + + +1 +get-task + + +False + + +False + + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + +False +oKO/T5e9P0yxfxSC9DK89wAA + + + +clMaroon +$00B9FFFF +390 +290 +127 +32 +F4Ld7UGpQkiQCCnqXOJ06wAA + + +1 +task-schedule + + +False + + +False + + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + +False +F4Ld7UGpQkiQCCnqXOJ06wAA + + + +clMaroon +$00B9FFFF +320 +276 +76 +23 +task-schedule + + + +clMaroon +$00B9FFFF +453,321;453,338 +hIsaQ5I0Y0qxkPCenhTfsgAA +PDF/3iFxa0qb6QrTKCb/YQAA +78WbrY6e4EC/58P5Ws4JCgAA + +False +1.5707963267949 +15 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +1.5707963267949 +30 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +-1.5707963267949 +15 +hIsaQ5I0Y0qxkPCenhTfsgAA + + +False +-0.523598775598299 +30 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +0.523598775598299 +30 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +0.523598775598299 +25 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +-0.523598775598299 +25 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +-0.785398163397448 +40 +epHead +qb8LVJbh5kG4uilxed700QAA + + +False +0.785398163397448 +40 +epTail +4Ujmk5gLj0WyU3SYagr0mAAA + + +False +-1516 +-800 +50 +8 +qb8LVJbh5kG4uilxed700QAA + + +False +-1516 +-800 +50 +8 +4Ujmk5gLj0WyU3SYagr0mAAA + + + +clMaroon +$00B9FFFF +334 +242 +111 +32 +al6ONjrnZ02miWcUt8E4UAAA + + +1 +submit-task + + +False + + +False + + + +False +al6ONjrnZ02miWcUt8E4UAAA + + +False +al6ONjrnZ02miWcUt8E4UAAA + + +False +al6ONjrnZ02miWcUt8E4UAAA + + + +clMaroon +$00B9FFFF +454 +242 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +410,273;433,290 +ZX2SocfyGUGaYAoZdJTHCQAA +78WbrY6e4EC/58P5Ws4JCgAA +mGag8uVpX0+zFhYfpZD08wAA + +False +1.5707963267949 +15 +ZX2SocfyGUGaYAoZdJTHCQAA + + +False +1.5707963267949 +30 +ZX2SocfyGUGaYAoZdJTHCQAA + + +False +-1.5707963267949 +15 +ZX2SocfyGUGaYAoZdJTHCQAA + + +False +-0.523598775598299 +30 +epHead +v4O00Fgt/UO7ZDLsyBtHIQAA + + +False +0.523598775598299 +30 +epTail +YezoOUqiMEqMfQ47zgiYggAA + + +False +0.523598775598299 +25 +epHead +v4O00Fgt/UO7ZDLsyBtHIQAA + + +False +-0.523598775598299 +25 +epTail +YezoOUqiMEqMfQ47zgiYggAA + + +False +-0.785398163397448 +40 +epHead +v4O00Fgt/UO7ZDLsyBtHIQAA + + +False +0.785398163397448 +40 +epTail +YezoOUqiMEqMfQ47zgiYggAA + + +False +-1068 +-948 +50 +8 +v4O00Fgt/UO7ZDLsyBtHIQAA + + +False +-1068 +-948 +50 +8 +YezoOUqiMEqMfQ47zgiYggAA + + + +clMaroon +$00B9FFFF +482,273;467,290 +V+JDAD1y1kGhDKjzLQ2kzwAA +78WbrY6e4EC/58P5Ws4JCgAA +MM23IzSqWEWlGoT6/hNe5AAA + +False +1.5707963267949 +15 +V+JDAD1y1kGhDKjzLQ2kzwAA + + +False +1.5707963267949 +30 +V+JDAD1y1kGhDKjzLQ2kzwAA + + +False +-1.5707963267949 +15 +V+JDAD1y1kGhDKjzLQ2kzwAA + + +False +-0.523598775598299 +30 +epHead +5z6XidYYrkexqaAHLrMuGQAA + + +False +0.523598775598299 +30 +epTail +ivchHpb/m0Oy82i37nw/zwAA + + +False +0.523598775598299 +25 +epHead +5z6XidYYrkexqaAHLrMuGQAA + + +False +-0.523598775598299 +25 +epTail +ivchHpb/m0Oy82i37nw/zwAA + + +False +-0.785398163397448 +40 +epHead +5z6XidYYrkexqaAHLrMuGQAA + + +False +0.785398163397448 +40 +epTail +ivchHpb/m0Oy82i37nw/zwAA + + +False +-1068 +-948 +50 +8 +5z6XidYYrkexqaAHLrMuGQAA + + +False +-1068 +-948 +50 +8 +ivchHpb/m0Oy82i37nw/zwAA + + + +clMaroon +$00FF80FF +568 +180 +159 +32 +PjS4k33/kkePfB8R0Qh14AAA + + +1 +bugfix-estimate + + +False + + +False + + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + + +clMaroon +$0080FF80 +124 +104 +175 +32 +7lWVbX8GnUmVFBjNoEJuAAAA + + +1 +new-demond-action + + +False + + +False + + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + + +clMaroon +$0080FF80 +140 +188 +144 +32 +dqA/cPl8GEmWvU/R693yfAAA + + +1 +new-idea-action + + +False + + +False + + + +False +dqA/cPl8GEmWvU/R693yfAAA + + +False +dqA/cPl8GEmWvU/R693yfAAA + + +False +dqA/cPl8GEmWvU/R693yfAAA + + + +clMaroon +$0080FF80 +296 +4 +190 +32 +jic239+6CEiL3vfxIBKzZwAA + + +1 +usr-bug-report-action + + +False + + +False + + + +False +jic239+6CEiL3vfxIBKzZwAA + + +False +jic239+6CEiL3vfxIBKzZwAA + + +False +jic239+6CEiL3vfxIBKzZwAA + + + +clMaroon +$0080FF80 +332 +52 +113 +32 +hWsqFBqliU2am4OA8VEXDgAA + + +1 +using-action + + +False + + +False + + + +False +hWsqFBqliU2am4OA8VEXDgAA + + +False +hWsqFBqliU2am4OA8VEXDgAA + + +False +hWsqFBqliU2am4OA8VEXDgAA + + + +clMaroon +clSilver +596 +144 +110 +32 +H7tysEnUp0+p4o84YYVC8wAA + + +1 +bugfix-work + + +False + + +False + + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + + +clMaroon +$0080FF80 +232 +148 +138 +32 +tptycT8EmUmriJ3RFm3kFAAA + + +1 +analysis-action + + +False + + +False + + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + + +clMaroon +$00B9FFFF +243,135;269,148 +Ycu282Q90kSZPuP8Y2664QAA +kl2Aed9IkUu2D64AkSCxzAAA +UE1o5B5rJESipHfZBqKwygAA + +False +1.5707963267949 +15 +Ycu282Q90kSZPuP8Y2664QAA + + +False +1.5707963267949 +30 +Ycu282Q90kSZPuP8Y2664QAA + + +False +-1.5707963267949 +15 +Ycu282Q90kSZPuP8Y2664QAA + + +False +-0.523598775598299 +30 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +0.523598775598299 +30 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +0.523598775598299 +25 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +-0.523598775598299 +25 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +-0.785398163397448 +40 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +0.785398163397448 +40 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +-1008 +-1160 +50 +8 +tbE2qZkS9UCvoD6eysPdBQAA + + +False +-1008 +-1160 +50 +8 +8Gn/k11xTkGZ83K2PTY6tgAA + + + +clMaroon +$00B9FFFF +244,188;264,179 +2f8CCoiKYEm2bnh0fSgF5AAA +kl2Aed9IkUu2D64AkSCxzAAA +9tFoXvjmTECmCvT8S3sjAwAA + +False +1.5707963267949 +15 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +1.5707963267949 +30 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +-1.5707963267949 +15 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +-0.523598775598299 +30 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +0.523598775598299 +30 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +0.523598775598299 +25 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +-0.523598775598299 +25 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +-0.785398163397448 +40 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +0.785398163397448 +40 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +-1008 +-1160 +50 +8 +XqdZXwSYokCQBpZDzAi8kQAA + + +False +-1008 +-1160 +50 +8 +FMzzdvZAeUWKXvIN8LFkfwAA + + + +clMaroon +$00FFFF80 +152 +232 +130 +32 +dHVXjobujkKGloy7+Ox8DAAA + + +1 +publish-launch + + +False + + +False + + + +False +dHVXjobujkKGloy7+Ox8DAAA + + +False +dHVXjobujkKGloy7+Ox8DAAA + + +False +dHVXjobujkKGloy7+Ox8DAAA + + + +clMaroon +clSilver +580 +60 +141 +32 +VwrgoiK6h0aUxHMgZDKYzgAA + + +1 +document-work + + +False + + +False + + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + + +clMaroon +clSilver +584 +104 +138 +32 +fKAlsL5x3U2cAiir26vsAQAA + + +1 +traslation-work + + +False + + +False + + + +False +fKAlsL5x3U2cAiir26vsAQAA + + +False +fKAlsL5x3U2cAiir26vsAQAA + + +False +fKAlsL5x3U2cAiir26vsAQAA + + + +clMaroon +clSilver +588 +16 +117 +32 +KbXj7bLsjku9BsYv/z63VgAA + + +1 +testing-work + + +False + + +False + + + +False +KbXj7bLsjku9BsYv/z63VgAA + + +False +KbXj7bLsjku9BsYv/z63VgAA + + +False +KbXj7bLsjku9BsYv/z63VgAA + + + +clMaroon +$00FFFF80 +92 +20 +209 +32 +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +1 +new-feature-dev-launch + + +False + + +False + + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + + +clMaroon +$00FFFF80 +132 +64 +154 +32 +d6r7rOW3akG5lkJDtATmigAA + + +1 +initial-dev-launch + + +False + + +False + + + +False +d6r7rOW3akG5lkJDtATmigAA + + +False +d6r7rOW3akG5lkJDtATmigAA + + +False +d6r7rOW3akG5lkJDtATmigAA + + + +clMaroon +$00B9FFFF +124 +101 +78 +A/9YWnHJBEGH1jC8FI2M9gAA + + +1 +maintainer + + +False + + +False + + + +False +A/9YWnHJBEGH1jC8FI2M9gAA + + +False +A/9YWnHJBEGH1jC8FI2M9gAA + + + +clMaroon +$00B9FFFF +12 +236 +77 +78 +FkRCE52YAkaM/9oO8q9QFQAA + + +1 +author + + +False + + +False + + + +False +FkRCE52YAkaM/9oO8q9QFQAA + + +False +FkRCE52YAkaM/9oO8q9QFQAA + + + +clMaroon +$00B9FFFF +800 +28 +76 +78 +MLBX+NGx9kymQ76b9EAKuwAA + + +1 +tech-leader + + +False + + +False + + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + + +clMaroon +$00B9FFFF +796 +176 +90 +78 +oWDHE/AIyEqhL2zTdizC4AAA + + +1 +developer + + +False + + +False + + + +False +oWDHE/AIyEqhL2zTdizC4AAA + + +False +oWDHE/AIyEqhL2zTdizC4AAA + + + +clMaroon +$00B9FFFF +796 +244 +91 +78 +Pu4+pL+iiU6lRzDtfLIgJwAA + + +1 +documentor + + +False + + +False + + + +False +Pu4+pL+iiU6lRzDtfLIgJwAA + + +False +Pu4+pL+iiU6lRzDtfLIgJwAA + + + +clMaroon +$00B9FFFF +800 +316 +86 +78 +aaiB2ZAB7kOSB9niWMGCrAAA + + +1 +translator + + +False + + +False + + + +False +aaiB2ZAB7kOSB9niWMGCrAAA + + +False +aaiB2ZAB7kOSB9niWMGCrAAA + + + +clMaroon +$00B9FFFF +492 +8 +77 +78 +u2JHX3nMn0CMyZLWTG2R1QAA + + +1 +user + + +False + + +False + + + +False +u2JHX3nMn0CMyZLWTG2R1QAA + + +False +u2JHX3nMn0CMyZLWTG2R1QAA + + + +clMaroon +$00B9FFFF +796 +100 +86 +78 +78O5f65/80OvpHK3AuBEIQAA + + +1 +tester + + +False + + +False + + + +False +78O5f65/80OvpHK3AuBEIQAA + + +False +78O5f65/80OvpHK3AuBEIQAA + + + +clMaroon +$00B9FFFF +100,149;152,135 +MAKnyTiDo06cPkcuyMVz0AAA +UE1o5B5rJESipHfZBqKwygAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +MAKnyTiDo06cPkcuyMVz0AAA + + +False +1.5707963267949 +30 +MAKnyTiDo06cPkcuyMVz0AAA + + +False +-1.5707963267949 +15 +MAKnyTiDo06cPkcuyMVz0AAA + + + +clMaroon +$00B9FFFF +100,162;232,163 +esX3j+a1KU2snuv6WgXrzgAA +kl2Aed9IkUu2D64AkSCxzAAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +esX3j+a1KU2snuv6WgXrzgAA + + +False +1.5707963267949 +30 +esX3j+a1KU2snuv6WgXrzgAA + + +False +-1.5707963267949 +15 +esX3j+a1KU2snuv6WgXrzgAA + + + +clMaroon +$00B9FFFF +100,175;152,188 +bFIlptiTHUqaYGcZ9Z9BwwAA +9tFoXvjmTECmCvT8S3sjAwAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +bFIlptiTHUqaYGcZ9Z9BwwAA + + +False +1.5707963267949 +30 +bFIlptiTHUqaYGcZ9Z9BwwAA + + +False +-1.5707963267949 +15 +bFIlptiTHUqaYGcZ9Z9BwwAA + + + +clMaroon +$00B9FFFF +88,124;104,108;151,95 +YwY92xK+JEOUOaknXh7XMAAA +65HjSOXEV02PyHHndkIc4wAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +YwY92xK+JEOUOaknXh7XMAAA + + +False +1.5707963267949 +30 +YwY92xK+JEOUOaknXh7XMAAA + + +False +-1.5707963267949 +15 +YwY92xK+JEOUOaknXh7XMAAA + + + +clMaroon +$00B9FFFF +64,124;84,72;148,51 +VUF2hqp6/UCePhaBLl598gAA +D0y3HjNuyEeD8w3pOiVL9gAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +VUF2hqp6/UCePhaBLl598gAA + + +False +1.5707963267949 +30 +VUF2hqp6/UCePhaBLl598gAA + + +False +-1.5707963267949 +15 +VUF2hqp6/UCePhaBLl598gAA + + + +clMaroon +$00FF80FF +584 +216 +149 +32 +Qefe92j2XEq8x5GI1Vq+RQAA + + +1 +testing-estimate + + +False + + +False + + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + + +clMaroon +$00FF80FF +140 +324 +149 +32 +YPSGJ8SkH0mAV1HZcqVjOgAA + + +1 +publish-estimate + + +False + + +False + + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + + +clMaroon +$00FF80FF +128 +276 +168 +32 +sl9IvUV4W0Kodgc58LjsVgAA + + +1 +complete-estimate + + +False + + +False + + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + + +clMaroon +$00B9FFFF +77,201;116,256;170,276 +xg7XA4XPo0GPzFxhulYO7QAA +tJdxQ2n6kUCuF/faDlNrnwAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +xg7XA4XPo0GPzFxhulYO7QAA + + +False +1.5707963267949 +30 +xg7XA4XPo0GPzFxhulYO7QAA + + +False +-1.5707963267949 +15 +xg7XA4XPo0GPzFxhulYO7QAA + + + +clMaroon +$00B9FFFF +68,201;116,304;172,324 +3ExrMzh4BU+qEom+NkgXhAAA +myJOly92w06UWOgls7OciAAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +3ExrMzh4BU+qEom+NkgXhAAA + + +False +1.5707963267949 +30 +3ExrMzh4BU+qEom+NkgXhAAA + + +False +-1.5707963267949 +15 +3ExrMzh4BU+qEom+NkgXhAAA + + + +clMaroon +$00B9FFFF +600 +252 +108 +32 +U//hAdD8QU+M1p1r952pSAAA + + +1 +design-task + + +False + + +False + + + +False +U//hAdD8QU+M1p1r952pSAAA + + +False +U//hAdD8QU+M1p1r952pSAAA + + +False +U//hAdD8QU+M1p1r952pSAAA + + + +clMaroon +$00B9FFFF +816,105;748,232;694,252 +onJRiZekkkW+HvL7efTCQAAA +HIeb6G3eG0y9ALZQK+J4gQAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +onJRiZekkkW+HvL7efTCQAAA + + +False +1.5707963267949 +30 +onJRiZekkkW+HvL7efTCQAAA + + +False +-1.5707963267949 +15 +onJRiZekkkW+HvL7efTCQAAA + + + +clMaroon +$00B9FFFF +800,99;744,148;678,180 +DLyG2IErKEu/iLgO368jEQAA +6WD/injqLkGLLLrBFiLSOQAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +DLyG2IErKEu/iLgO368jEQAA + + +False +1.5707963267949 +30 +DLyG2IErKEu/iLgO368jEQAA + + +False +-1.5707963267949 +15 +DLyG2IErKEu/iLgO368jEQAA + + + +clMaroon +$00B9FFFF +812,105;748,204;708,216 +GHPM6mLD3kO4lCP2rqtf+QAA +kliHiKyFiEyM4tl1y2PxqQAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +GHPM6mLD3kO4lCP2rqtf+QAA + + +False +1.5707963267949 +30 +GHPM6mLD3kO4lCP2rqtf+QAA + + +False +-1.5707963267949 +15 +GHPM6mLD3kO4lCP2rqtf+QAA + + + +clMaroon +$00B9FFFF +156 +368 +113 +32 +G18zTBUAj0+SdrsOmksR0QAA + + +1 +publish-task + + +False + + +False + + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + + +clMaroon +$00B9FFFF +100,199;128,220;167,232 +N6rmhGGOH06+NgfTaWft1gAA +3rdXqG4KQ0W+d59DtblscAAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +N6rmhGGOH06+NgfTaWft1gAA + + +False +1.5707963267949 +30 +N6rmhGGOH06+NgfTaWft1gAA + + +False +-1.5707963267949 +15 +N6rmhGGOH06+NgfTaWft1gAA + + + +clMaroon +$00B9FFFF +62,201;108,352;162,368 +jTxlFtrXok2VlE3EA+IAugAA +b4fOXlO640eOSeo31HjDiQAA +hLrtDO2G80+MBE7w/xqYWAAA + +False +1.5707963267949 +15 +jTxlFtrXok2VlE3EA+IAugAA + + +False +1.5707963267949 +30 +jTxlFtrXok2VlE3EA+IAugAA + + +False +-1.5707963267949 +15 +jTxlFtrXok2VlE3EA+IAugAA + + + +clMaroon +$00B9FFFF +50,236;50,201 +Iz8n1Vm2AECplTLk/g9l/gAA +hLrtDO2G80+MBE7w/xqYWAAA +oUU7LbB8z06lO7+JvHxYawAA + +False +1.5707963267949 +15 +Iz8n1Vm2AECplTLk/g9l/gAA + + +False +1.5707963267949 +30 +Iz8n1Vm2AECplTLk/g9l/gAA + + +False +-1.5707963267949 +15 +Iz8n1Vm2AECplTLk/g9l/gAA + + +False +-0.523598775598299 +30 +epHead +hbdfYKhKQEGS3E5YtXQxcAAA + + +False +0.523598775598299 +30 +epTail +6V1phiekNEigGlosS4iI4AAA + + +False +0.523598775598299 +25 +epHead +hbdfYKhKQEGS3E5YtXQxcAAA + + +False +-0.523598775598299 +25 +epTail +6V1phiekNEigGlosS4iI4AAA + + +False +-0.785398163397448 +40 +epHead +hbdfYKhKQEGS3E5YtXQxcAAA + + +False +0.785398163397448 +40 +epTail +6V1phiekNEigGlosS4iI4AAA + + +False +-1116 +-1432 +50 +8 +hbdfYKhKQEGS3E5YtXQxcAAA + + +False +-1116 +-1432 +50 +8 +6V1phiekNEigGlosS4iI4AAA + + + +clMaroon +$00B9FFFF +596 +348 +96 +32 +akeIYx92HUGIvgZi/7qslgAA + + +1 +work-task + + +False + + +False + + + +False +akeIYx92HUGIvgZi/7qslgAA + + +False +akeIYx92HUGIvgZi/7qslgAA + + +False +akeIYx92HUGIvgZi/7qslgAA + + + +clMaroon +$00B9FFFF +812,253;768,316;683,348 +vY9LoEpVCEyXKh6+k1PP4AAA +PZbcok41dUuxzpJHw+qcCQAA +J56vYtWN6EGOMGIGF6vlZAAA + +False +1.5707963267949 +15 +vY9LoEpVCEyXKh6+k1PP4AAA + + +False +1.5707963267949 +30 +vY9LoEpVCEyXKh6+k1PP4AAA + + +False +-1.5707963267949 +15 +vY9LoEpVCEyXKh6+k1PP4AAA + + + +clMaroon +$00B9FFFF +800,84;680,144 +Fxyv+zwMo0S0Ncj/Azp5dQAA +6X0FK2w+kUGeRH2fHqoCSwAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +Fxyv+zwMo0S0Ncj/Azp5dQAA + + +False +1.5707963267949 +30 +Fxyv+zwMo0S0Ncj/Azp5dQAA + + +False +-1.5707963267949 +15 +Fxyv+zwMo0S0Ncj/Azp5dQAA + + + +clMaroon +$00B9FFFF +800,77;705,104 +zYrgxJijVUeKhRuYPCJv9wAA +CVNk+aZ2kUS/be+Nv1opngAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +zYrgxJijVUeKhRuYPCJv9wAA + + +False +1.5707963267949 +30 +zYrgxJijVUeKhRuYPCJv9wAA + + +False +-1.5707963267949 +15 +zYrgxJijVUeKhRuYPCJv9wAA + + + +clMaroon +$00B9FFFF +800,71;740,80;720,79 +7VFRD/OOk0CHQPmyBREE7QAA +vza3XuXwdUy+RCEd4a7/AAAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +7VFRD/OOk0CHQPmyBREE7QAA + + +False +1.5707963267949 +30 +7VFRD/OOk0CHQPmyBREE7QAA + + +False +-1.5707963267949 +15 +7VFRD/OOk0CHQPmyBREE7QAA + + + +clMaroon +$00B9FFFF +800,59;744,48;704,41 +dr0yGiZ9w0ifqTGL7hJMYAAA +Sl7WaLUfCE+IreEUylmhuQAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +dr0yGiZ9w0ifqTGL7hJMYAAA + + +False +1.5707963267949 +30 +dr0yGiZ9w0ifqTGL7hJMYAAA + + +False +-1.5707963267949 +15 +dr0yGiZ9w0ifqTGL7hJMYAAA + + + +clMaroon +$00B9FFFF +805,321;780,348;691,358 +3we00g4TrUSP2RwRD/Zr6AAA +PZbcok41dUuxzpJHw+qcCQAA +jRMnNsOHm0ilwTcHjyhAsQAA + +False +1.5707963267949 +15 +3we00g4TrUSP2RwRD/Zr6AAA + + +False +1.5707963267949 +30 +3we00g4TrUSP2RwRD/Zr6AAA + + +False +-1.5707963267949 +15 +3we00g4TrUSP2RwRD/Zr6AAA + + + +clMaroon +$00B9FFFF +816,177;748,300;668,348 +jKTbz3HBukOB4vjFAHBjhwAA +PZbcok41dUuxzpJHw+qcCQAA +yTQvkxa2EU+paqJboa22BgAA + +False +1.5707963267949 +15 +jKTbz3HBukOB4vjFAHBjhwAA + + +False +1.5707963267949 +30 +jKTbz3HBukOB4vjFAHBjhwAA + + +False +-1.5707963267949 +15 +jKTbz3HBukOB4vjFAHBjhwAA + + + +clMaroon +$00B9FFFF +800,369;780,376;691,368 +wKnDb+gcSEGIVFdvrqRcMwAA +PZbcok41dUuxzpJHw+qcCQAA +sTVRqiD/L0m+CYPwqsjRYQAA + +False +1.5707963267949 +15 +wKnDb+gcSEGIVFdvrqRcMwAA + + +False +1.5707963267949 +30 +wKnDb+gcSEGIVFdvrqRcMwAA + + +False +-1.5707963267949 +15 +wKnDb+gcSEGIVFdvrqRcMwAA + + + +clMaroon +$00B9FFFF +394,360;268,376 +dQUIyAabUkW3BrzevL6ajQAA +b4fOXlO640eOSeo31HjDiQAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +dQUIyAabUkW3BrzevL6ajQAA + + +False +1.5707963267949 +30 +dQUIyAabUkW3BrzevL6ajQAA + + +False +-1.5707963267949 +15 +dQUIyAabUkW3BrzevL6ajQAA + + +False +-0.523598775598299 +30 +epHead +m+4bIFntFkmXMzdv2SUAzQAA + + +False +0.523598775598299 +30 +epTail +G5oIOUpHjU6CAVOHO5cbSQAA + + +False +0.523598775598299 +25 +epHead +m+4bIFntFkmXMzdv2SUAzQAA + + +False +-0.523598775598299 +25 +epTail +G5oIOUpHjU6CAVOHO5cbSQAA + + +False +-0.785398163397448 +40 +epHead +m+4bIFntFkmXMzdv2SUAzQAA + + +False +0.785398163397448 +40 +epTail +G5oIOUpHjU6CAVOHO5cbSQAA + + +False +-1032 +-996 +50 +8 +m+4bIFntFkmXMzdv2SUAzQAA + + +False +-1032 +-996 +50 +8 +G5oIOUpHjU6CAVOHO5cbSQAA + + + +clMaroon +$00B9FFFF +513,356;596,360 +b9LJxRkpzEy/d2cpGE3jlAAA +PZbcok41dUuxzpJHw+qcCQAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +b9LJxRkpzEy/d2cpGE3jlAAA + + +False +1.5707963267949 +30 +b9LJxRkpzEy/d2cpGE3jlAAA + + +False +-1.5707963267949 +15 +b9LJxRkpzEy/d2cpGE3jlAAA + + +False +-0.523598775598299 +30 +epHead +MEkNsUXvgEqT0nEOCk4PgAAA + + +False +0.523598775598299 +30 +epTail +kZf004keokGnnIbJREbJ8gAA + + +False +0.523598775598299 +25 +epHead +MEkNsUXvgEqT0nEOCk4PgAAA + + +False +-0.523598775598299 +25 +epTail +kZf004keokGnnIbJREbJ8gAA + + +False +-0.785398163397448 +40 +epHead +MEkNsUXvgEqT0nEOCk4PgAAA + + +False +0.785398163397448 +40 +epTail +kZf004keokGnnIbJREbJ8gAA + + +False +-1032 +-996 +50 +8 +MEkNsUXvgEqT0nEOCk4PgAAA + + +False +-1032 +-996 +50 +8 +kZf004keokGnnIbJREbJ8gAA + + + +clMaroon +$00B9FFFF +394,350;288,344 +4cv8mepYQESw1qV+1hogLAAA +myJOly92w06UWOgls7OciAAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +4cv8mepYQESw1qV+1hogLAAA + + +False +1.5707963267949 +30 +4cv8mepYQESw1qV+1hogLAAA + + +False +-1.5707963267949 +15 +4cv8mepYQESw1qV+1hogLAAA + + +False +-0.523598775598299 +30 +epHead +PlQ+p7G7JUegK51TuNbuLgAA + + +False +0.523598775598299 +30 +epTail +50uCeDif8kKZsdKCSOxuyQAA + + +False +0.523598775598299 +25 +epHead +PlQ+p7G7JUegK51TuNbuLgAA + + +False +-0.523598775598299 +25 +epTail +50uCeDif8kKZsdKCSOxuyQAA + + +False +-0.785398163397448 +40 +epHead +PlQ+p7G7JUegK51TuNbuLgAA + + +False +0.785398163397448 +40 +epTail +50uCeDif8kKZsdKCSOxuyQAA + + +False +-1032 +-996 +50 +8 +PlQ+p7G7JUegK51TuNbuLgAA + + +False +-1032 +-996 +50 +8 +50uCeDif8kKZsdKCSOxuyQAA + + + +clMaroon +$00B9FFFF +394,338;273,307 +dle0km/8mEy/njpP8YzaVgAA +tJdxQ2n6kUCuF/faDlNrnwAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +dle0km/8mEy/njpP8YzaVgAA + + +False +1.5707963267949 +30 +dle0km/8mEy/njpP8YzaVgAA + + +False +-1.5707963267949 +15 +dle0km/8mEy/njpP8YzaVgAA + + +False +-0.523598775598299 +30 +epHead +YvCannseaUmrs70XgLp5GQAA + + +False +0.523598775598299 +30 +epTail +Pqls1twyrUOYZaqZAZic8QAA + + +False +0.523598775598299 +25 +epHead +YvCannseaUmrs70XgLp5GQAA + + +False +-0.523598775598299 +25 +epTail +Pqls1twyrUOYZaqZAZic8QAA + + +False +-0.785398163397448 +40 +epHead +YvCannseaUmrs70XgLp5GQAA + + +False +0.785398163397448 +40 +epTail +Pqls1twyrUOYZaqZAZic8QAA + + +False +-1032 +-996 +50 +8 +YvCannseaUmrs70XgLp5GQAA + + +False +-1032 +-996 +50 +8 +Pqls1twyrUOYZaqZAZic8QAA + + + +clMaroon +$00B9FFFF +281,251;334,254 +bLyKzfToT0G3pHx4RMAW5wAA +mGag8uVpX0+zFhYfpZD08wAA +3rdXqG4KQ0W+d59DtblscAAA + +False +1.5707963267949 +15 +bLyKzfToT0G3pHx4RMAW5wAA + + +False +1.5707963267949 +30 +bLyKzfToT0G3pHx4RMAW5wAA + + +False +-1.5707963267949 +15 +bLyKzfToT0G3pHx4RMAW5wAA + + +False +-0.523598775598299 +30 +epHead +stbsvaZCJkG2vJI5d3KxdwAA + + +False +0.523598775598299 +30 +epTail +dIPnH0JAR0m2CEwio1XRKwAA + + +False +0.523598775598299 +25 +epHead +stbsvaZCJkG2vJI5d3KxdwAA + + +False +-0.523598775598299 +25 +epTail +dIPnH0JAR0m2CEwio1XRKwAA + + +False +-0.785398163397448 +40 +epHead +stbsvaZCJkG2vJI5d3KxdwAA + + +False +0.785398163397448 +40 +epTail +dIPnH0JAR0m2CEwio1XRKwAA + + +False +-1032 +-996 +50 +8 +stbsvaZCJkG2vJI5d3KxdwAA + + +False +-1032 +-996 +50 +8 +dIPnH0JAR0m2CEwio1XRKwAA + + + +clMaroon +$00B9FFFF +596 +288 +121 +32 +HhCFPxH60EuycMQ2nfXWCQAA + + +1 +analysis-task + + +False + + +False + + + +False +HhCFPxH60EuycMQ2nfXWCQAA + + +False +HhCFPxH60EuycMQ2nfXWCQAA + + +False +HhCFPxH60EuycMQ2nfXWCQAA + + + +clMaroon +$00B9FFFF +818,105;748,252;683,288 +b/CTfa0mFUyr1SeIhcoTFwAA +5CbxRWAfz0OazD2BC6LOtgAA +yKTK++/I8UuxNnTadbtxZwAA + +False +1.5707963267949 +15 +b/CTfa0mFUyr1SeIhcoTFwAA + + +False +1.5707963267949 +30 +b/CTfa0mFUyr1SeIhcoTFwAA + + +False +-1.5707963267949 +15 +b/CTfa0mFUyr1SeIhcoTFwAA + + + +clMaroon +$00B9FFFF +492,39;472,35 +gIzn+8O0A0ux4mJbpKNkEwAA +Ms00Ghmc4EasjVjv6tSf/wAA +vaX40+6yy0+QL2+OqVsz5wAA + +False +1.5707963267949 +15 +gIzn+8O0A0ux4mJbpKNkEwAA + + +False +1.5707963267949 +30 +gIzn+8O0A0ux4mJbpKNkEwAA + + +False +-1.5707963267949 +15 +gIzn+8O0A0ux4mJbpKNkEwAA + + + +clMaroon +$00B9FFFF +492,52;444,59 +4d0O1iKcq0+kIW5Bpb2joAAA +P24tgRFfhEi1BROVlu7OOgAA +vaX40+6yy0+QL2+OqVsz5wAA + +False +1.5707963267949 +15 +4d0O1iKcq0+kIW5Bpb2joAAA + + +False +1.5707963267949 +30 +4d0O1iKcq0+kIW5Bpb2joAAA + + +False +-1.5707963267949 +15 +4d0O1iKcq0+kIW5Bpb2joAAA + + + +clMaroon +$00B9FFFF +251,95;372,140;387,242 +63BfEROBLEGGjWv9qa4YPgAA +mGag8uVpX0+zFhYfpZD08wAA +65HjSOXEV02PyHHndkIc4wAA + +False +1.5707963267949 +15 +63BfEROBLEGGjWv9qa4YPgAA + + +False +1.5707963267949 +30 +63BfEROBLEGGjWv9qa4YPgAA + + +False +-1.5707963267949 +15 +63BfEROBLEGGjWv9qa4YPgAA + + +False +-0.523598775598299 +30 +epHead +1q5yuUkA0kGBWLWrt4cfxwAA + + +False +0.523598775598299 +30 +epTail +7zDlLto/L02ptrUw9yDPUQAA + + +False +0.523598775598299 +25 +epHead +1q5yuUkA0kGBWLWrt4cfxwAA + + +False +-0.523598775598299 +25 +epTail +7zDlLto/L02ptrUw9yDPUQAA + + +False +-0.785398163397448 +40 +epHead +1q5yuUkA0kGBWLWrt4cfxwAA + + +False +0.785398163397448 +40 +epTail +7zDlLto/L02ptrUw9yDPUQAA + + +False +-1000 +-1000 +50 +8 +1q5yuUkA0kGBWLWrt4cfxwAA + + +False +-1000 +-1000 +50 +8 +7zDlLto/L02ptrUw9yDPUQAA + + + +clMaroon +$00B9FFFF +234,51;380,112;388,242 +aM8L++tUe0CN4YEwoVH/cwAA +mGag8uVpX0+zFhYfpZD08wAA +D0y3HjNuyEeD8w3pOiVL9gAA + +False +1.5707963267949 +15 +aM8L++tUe0CN4YEwoVH/cwAA + + +False +1.5707963267949 +30 +aM8L++tUe0CN4YEwoVH/cwAA + + +False +-1.5707963267949 +15 +aM8L++tUe0CN4YEwoVH/cwAA + + +False +-0.523598775598299 +30 +epHead +jZEe3B1pgkqg0horzFKWzwAA + + +False +0.523598775598299 +30 +epTail +OOVxi4WGDkKWer/0+AwIPgAA + + +False +0.523598775598299 +25 +epHead +jZEe3B1pgkqg0horzFKWzwAA + + +False +-0.523598775598299 +25 +epTail +OOVxi4WGDkKWer/0+AwIPgAA + + +False +-0.785398163397448 +40 +epHead +jZEe3B1pgkqg0horzFKWzwAA + + +False +0.785398163397448 +40 +epTail +OOVxi4WGDkKWer/0+AwIPgAA + + +False +-1000 +-1000 +50 +8 +jZEe3B1pgkqg0horzFKWzwAA + + +False +-1000 +-1000 +50 +8 +OOVxi4WGDkKWer/0+AwIPgAA + + + +clMaroon +$00B9FFFF +513,338;596,318 ++pKtO8/uIk+Z4sYfrACDGgAA +5CbxRWAfz0OazD2BC6LOtgAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 ++pKtO8/uIk+Z4sYfrACDGgAA + + +False +1.5707963267949 +30 ++pKtO8/uIk+Z4sYfrACDGgAA + + +False +-1.5707963267949 +15 ++pKtO8/uIk+Z4sYfrACDGgAA + + +False +-0.523598775598299 +30 +epHead +LJwRpPfpFE+v3TCpYFoQmgAA + + +False +0.523598775598299 +30 +epTail +XPjUoHBhGkOE8kyb9uqy1AAA + + +False +0.523598775598299 +25 +epHead +LJwRpPfpFE+v3TCpYFoQmgAA + + +False +-0.523598775598299 +25 +epTail +XPjUoHBhGkOE8kyb9uqy1AAA + + +False +-0.785398163397448 +40 +epHead +LJwRpPfpFE+v3TCpYFoQmgAA + + +False +0.785398163397448 +40 +epTail +XPjUoHBhGkOE8kyb9uqy1AAA + + +False +-1000 +-1000 +50 +8 +LJwRpPfpFE+v3TCpYFoQmgAA + + +False +-1000 +-1000 +50 +8 +XPjUoHBhGkOE8kyb9uqy1AAA + + + +clMaroon +$00B9FFFF +488,338;616,283 +nmuSEcLCrEGvKBQ/lU47BwAA +HIeb6G3eG0y9ALZQK+J4gQAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +nmuSEcLCrEGvKBQ/lU47BwAA + + +False +1.5707963267949 +30 +nmuSEcLCrEGvKBQ/lU47BwAA + + +False +-1.5707963267949 +15 +nmuSEcLCrEGvKBQ/lU47BwAA + + +False +-0.523598775598299 +30 +epHead +L7a4CYmPC0uUj33RRoWiJgAA + + +False +0.523598775598299 +30 +epTail +7QebQWj8AEy2+oMl4FpmTAAA + + +False +0.523598775598299 +25 +epHead +L7a4CYmPC0uUj33RRoWiJgAA + + +False +-0.523598775598299 +25 +epTail +7QebQWj8AEy2+oMl4FpmTAAA + + +False +-0.785398163397448 +40 +epHead +L7a4CYmPC0uUj33RRoWiJgAA + + +False +0.785398163397448 +40 +epTail +7QebQWj8AEy2+oMl4FpmTAAA + + +False +-1000 +-1000 +50 +8 +L7a4CYmPC0uUj33RRoWiJgAA + + +False +-1000 +-1000 +50 +8 +7QebQWj8AEy2+oMl4FpmTAAA + + + +clMaroon +$00B9FFFF +478,338;631,247 +ByfvBxwbrkGP5+WxTb1ZvQAA +kliHiKyFiEyM4tl1y2PxqQAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +ByfvBxwbrkGP5+WxTb1ZvQAA + + +False +1.5707963267949 +30 +ByfvBxwbrkGP5+WxTb1ZvQAA + + +False +-1.5707963267949 +15 +ByfvBxwbrkGP5+WxTb1ZvQAA + + +False +-0.523598775598299 +30 +epHead +n6mfTSaq+k2RnTd3faTkxQAA + + +False +0.523598775598299 +30 +epTail ++Ekcl1W/rkuftPam8GOdiQAA + + +False +0.523598775598299 +25 +epHead +n6mfTSaq+k2RnTd3faTkxQAA + + +False +-0.523598775598299 +25 +epTail ++Ekcl1W/rkuftPam8GOdiQAA + + +False +-0.785398163397448 +40 +epHead +n6mfTSaq+k2RnTd3faTkxQAA + + +False +0.785398163397448 +40 +epTail ++Ekcl1W/rkuftPam8GOdiQAA + + +False +-1000 +-1000 +50 +8 +n6mfTSaq+k2RnTd3faTkxQAA + + +False +-1000 +-1000 +50 +8 ++Ekcl1W/rkuftPam8GOdiQAA + + + +clMaroon +$00B9FFFF +471,338;627,211 +plxmjyQkfUmt2P8uBP0I6AAA +6WD/injqLkGLLLrBFiLSOQAA +PDF/3iFxa0qb6QrTKCb/YQAA + +False +1.5707963267949 +15 +plxmjyQkfUmt2P8uBP0I6AAA + + +False +1.5707963267949 +30 +plxmjyQkfUmt2P8uBP0I6AAA + + +False +-1.5707963267949 +15 +plxmjyQkfUmt2P8uBP0I6AAA + + +False +-0.523598775598299 +30 +epHead +TdvnjlqSk0mqUzoHhiVfUAAA + + +False +0.523598775598299 +30 +epTail +2nuMoO9sH06KowfPyWX8XwAA + + +False +0.523598775598299 +25 +epHead +TdvnjlqSk0mqUzoHhiVfUAAA + + +False +-0.523598775598299 +25 +epTail +2nuMoO9sH06KowfPyWX8XwAA + + +False +-0.785398163397448 +40 +epHead +TdvnjlqSk0mqUzoHhiVfUAAA + + +False +0.785398163397448 +40 +epTail +2nuMoO9sH06KowfPyWX8XwAA + + +False +-1000 +-1000 +50 +8 +TdvnjlqSk0mqUzoHhiVfUAAA + + +False +-1000 +-1000 +50 +8 +2nuMoO9sH06KowfPyWX8XwAA + + + +clMaroon +$00B9FFFF +596,172;532,188;420,242 +PG5XF/RdmEuhi42wm0MztgAA +mGag8uVpX0+zFhYfpZD08wAA +6X0FK2w+kUGeRH2fHqoCSwAA + +False +1.5707963267949 +15 +PG5XF/RdmEuhi42wm0MztgAA + + +False +1.5707963267949 +30 +PG5XF/RdmEuhi42wm0MztgAA + + +False +-1.5707963267949 +15 +PG5XF/RdmEuhi42wm0MztgAA + + +False +-0.523598775598299 +30 +epHead +v3GPPcr2HE2FA9MsBQRCJAAA + + +False +0.523598775598299 +30 +epTail +7yl9aNzP9UWJYqcoZ5ct1gAA + + +False +0.523598775598299 +25 +epHead +v3GPPcr2HE2FA9MsBQRCJAAA + + +False +-0.523598775598299 +25 +epTail +7yl9aNzP9UWJYqcoZ5ct1gAA + + +False +-0.785398163397448 +40 +epHead +v3GPPcr2HE2FA9MsBQRCJAAA + + +False +0.785398163397448 +40 +epTail +7yl9aNzP9UWJYqcoZ5ct1gAA + + +False +-1000 +-1000 +50 +8 +v3GPPcr2HE2FA9MsBQRCJAAA + + +False +-1000 +-1000 +50 +8 +7yl9aNzP9UWJYqcoZ5ct1gAA + + + +clMaroon +$00B9FFFF +604,135;516,164;409,242 +iEqKHNrjWEaqo2MpcoTeAQAA +mGag8uVpX0+zFhYfpZD08wAA +CVNk+aZ2kUS/be+Nv1opngAA + +False +1.5707963267949 +15 +iEqKHNrjWEaqo2MpcoTeAQAA + + +False +1.5707963267949 +30 +iEqKHNrjWEaqo2MpcoTeAQAA + + +False +-1.5707963267949 +15 +iEqKHNrjWEaqo2MpcoTeAQAA + + +False +-0.523598775598299 +30 +epHead +8ERRXx11LUue4tf/9sRJGwAA + + +False +0.523598775598299 +30 +epTail +oZNlQDVXUEObs3iZw4x9YgAA + + +False +0.523598775598299 +25 +epHead +8ERRXx11LUue4tf/9sRJGwAA + + +False +-0.523598775598299 +25 +epTail +oZNlQDVXUEObs3iZw4x9YgAA + + +False +-0.785398163397448 +40 +epHead +8ERRXx11LUue4tf/9sRJGwAA + + +False +0.785398163397448 +40 +epTail +oZNlQDVXUEObs3iZw4x9YgAA + + +False +-1000 +-1000 +50 +8 +8ERRXx11LUue4tf/9sRJGwAA + + +False +-1000 +-1000 +50 +8 +oZNlQDVXUEObs3iZw4x9YgAA + + + +clMaroon +$00B9FFFF +612,91;488,144;402,242 +vqzVjlQpAEeeuOH/0tJhSAAA +mGag8uVpX0+zFhYfpZD08wAA +vza3XuXwdUy+RCEd4a7/AAAA + +False +1.5707963267949 +15 +vqzVjlQpAEeeuOH/0tJhSAAA + + +False +1.5707963267949 +30 +vqzVjlQpAEeeuOH/0tJhSAAA + + +False +-1.5707963267949 +15 +vqzVjlQpAEeeuOH/0tJhSAAA + + +False +-0.523598775598299 +30 +epHead +lWAMkSVvoUOg4oaaawtIxgAA + + +False +0.523598775598299 +30 +epTail +OAiy1ef+XUG7aqN4fnwIDQAA + + +False +0.523598775598299 +25 +epHead +lWAMkSVvoUOg4oaaawtIxgAA + + +False +-0.523598775598299 +25 +epTail +OAiy1ef+XUG7aqN4fnwIDQAA + + +False +-0.785398163397448 +40 +epHead +lWAMkSVvoUOg4oaaawtIxgAA + + +False +0.785398163397448 +40 +epTail +OAiy1ef+XUG7aqN4fnwIDQAA + + +False +-1000 +-1000 +50 +8 +lWAMkSVvoUOg4oaaawtIxgAA + + +False +-1000 +-1000 +50 +8 +OAiy1ef+XUG7aqN4fnwIDQAA + + + +clMaroon +$00B9FFFF +615,47;456,128;397,242 +/EsTz8Iu7ECqGh594+MkSQAA +mGag8uVpX0+zFhYfpZD08wAA +Sl7WaLUfCE+IreEUylmhuQAA + +False +1.5707963267949 +15 +/EsTz8Iu7ECqGh594+MkSQAA + + +False +1.5707963267949 +30 +/EsTz8Iu7ECqGh594+MkSQAA + + +False +-1.5707963267949 +15 +/EsTz8Iu7ECqGh594+MkSQAA + + +False +-0.523598775598299 +30 +epHead +gm2xbeKGuUu+OipRQpK+OQAA + + +False +0.523598775598299 +30 +epTail +TTMaOnOcrUGQ/DPwfi1ITwAA + + +False +0.523598775598299 +25 +epHead +gm2xbeKGuUu+OipRQpK+OQAA + + +False +-0.523598775598299 +25 +epTail +TTMaOnOcrUGQ/DPwfi1ITwAA + + +False +-0.785398163397448 +40 +epHead +gm2xbeKGuUu+OipRQpK+OQAA + + +False +0.785398163397448 +40 +epTail +TTMaOnOcrUGQ/DPwfi1ITwAA + + +False +-1000 +-1000 +50 +8 +gm2xbeKGuUu+OipRQpK+OQAA + + +False +-1000 +-1000 +50 +8 +TTMaOnOcrUGQ/DPwfi1ITwAA + + + +clMaroon +$00B9FFFF +12 +328 +76 +78 +MLBX+NGx9kymQ76b9EAKuwAA + + +1 +tech-leader + + +False + + +False + + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + +False +MLBX+NGx9kymQ76b9EAKuwAA + + + +clMaroon +$00B9FFFF +50,313;50,328 +WE9oOq/kF0adq9jjlgnt+QAA +zxkaRnUQnkGeblZpKwGHRgAA +oUU7LbB8z06lO7+JvHxYawAA + +False +1.5707963267949 +15 +WE9oOq/kF0adq9jjlgnt+QAA + + +False +1.5707963267949 +30 +WE9oOq/kF0adq9jjlgnt+QAA + + +False +-1.5707963267949 +15 +WE9oOq/kF0adq9jjlgnt+QAA + + +False +-0.523598775598299 +30 +epHead +VpLHTBYio0+yCxvIWp4QywAA + + +False +0.523598775598299 +30 +epTail +6sfC0Hl2I0uatFIXeo2nzwAA + + +False +0.523598775598299 +25 +epHead +VpLHTBYio0+yCxvIWp4QywAA + + +False +-0.523598775598299 +25 +epTail +6sfC0Hl2I0uatFIXeo2nzwAA + + +False +-0.785398163397448 +40 +epHead +VpLHTBYio0+yCxvIWp4QywAA + + +False +0.785398163397448 +40 +epTail +6sfC0Hl2I0uatFIXeo2nzwAA + + +False +-1000 +-1000 +50 +8 +VpLHTBYio0+yCxvIWp4QywAA + + +False +-1000 +-1000 +50 +8 +6sfC0Hl2I0uatFIXeo2nzwAA + + + + + +compact-analysis-design-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +82mxJtBoS0iD7vWybIrikwAA +31 + +clMaroon +$00BCBEFC +208 +196 +134 +30 +function-feature-list-file + + + +clMaroon +$00B9FFFF +52 +213 +152 +32 +TMPdkgNID0u772le0sCmLgAA + + +1 +new-ideas-action + + +False + + +False + + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + + +clMaroon +$00B9FFFF +32 +312 +175 +32 +Kh+ykp9GgU6PQXUx+CGLxgAA + + +1 +new-demond-action + + +False + + +False + + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + + +clMaroon +$00B9FFFF +284 +265 +188 +32 +06qF2g1ff02RsBbBfLLo1gAA + + +1 +feature-analysis-task + + +False + + +False + + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + + +clMaroon +$00BCBEFC +64 +264 +123 +30 +note record in tagdoc + + + +clMaroon +$00B9FFFF +126,264;127,244 +iyiy7059g0u9oLbvhyWMJwAA +nq2K2eTwOUCNMF6eKE4KDQAA + + +clMaroon +$00B9FFFF +121,312;123,293 +nq2K2eTwOUCNMF6eKE4KDQAA +o5iA92FZHkuxkU8FJDrcDwAA + + +clMaroon +$00B9FFFF +284,279;186,278 +nq2K2eTwOUCNMF6eKE4KDQAA +7jqlLyDAzESQnbx/rHQ2dgAA + + +clMaroon +$00B9FFFF +203,244;304,265 +ZE6XGr3H4E+M1Lu1nRZ9BQAA +7jqlLyDAzESQnbx/rHQ2dgAA +iyiy7059g0u9oLbvhyWMJwAA + +1.5707963267949 +15 +trimple-catagory +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +1.5707963267949 +30 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-1.5707963267949 +15 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-0.523598775598299 +30 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.523598775598299 +30 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +0.523598775598299 +25 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +-0.523598775598299 +25 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-0.785398163397448 +40 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.785398163397448 +40 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-1232 +-1028 +50 +8 +irMBt7uWtEaxRopZEBcfwgAA + + +False +-1232 +-1028 +50 +8 +eu/8Siwir02KNGkRDOEa9gAA + + + +clMaroon +$00B9FFFF +201,312;289,296 +li4LwavBrE+pggONaW7QkwAA +7jqlLyDAzESQnbx/rHQ2dgAA +o5iA92FZHkuxkU8FJDrcDwAA + +1.5707963267949 +15 +trimple-catagory +li4LwavBrE+pggONaW7QkwAA + + +False +1.5707963267949 +30 +li4LwavBrE+pggONaW7QkwAA + + +False +-1.5707963267949 +15 +li4LwavBrE+pggONaW7QkwAA + + +False +-0.523598775598299 +30 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.523598775598299 +30 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +0.523598775598299 +25 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-0.523598775598299 +25 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-0.785398163397448 +40 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.785398163397448 +40 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-1176 +-1028 +50 +8 +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-1176 +-1028 +50 +8 +gehfWFMIjEKeVzAcdHneqgAA + + + +clMaroon +$00B9FFFF +296,225;355,265 +7jqlLyDAzESQnbx/rHQ2dgAA +njRTD7ql6UCc1F0jjK/nOwAA + + +clMaroon +$00BCBEFC +352 +68 +152 +38 +function-module-list-file +class-diagram + + + +clMaroon +$00FF80FF +324 +316 +121 +32 +mx6wTw6+KEuGtAr0iRUXJwAA + + +1 +analysis-task + + +False + + +False + + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + + +clMaroon +$00B9FFFF +520 +141 +114 +32 +a7yZcyAyl02YNl0/FQziyQAA + + +1 +layer-design + + +False + + +False + + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + + +clMaroon +$00BCBEFC +560 +68 +171 +38 +function-module-struct-diagram +architech-diagram + + + +clMaroon +$00B9FFFF +626,105;591,141 +gwBYAnNeEk2uCxTsZUvhjAAA +m651NpyIZEyDLHqpx98poQAA + + +clMaroon +$00BCBEFC +548 +236 +132 +113 +classic-feature-list +cmd-args-design +running-param-design +.lex/.gmr/.type/.ui +time-sequence-diagram +E-R-diagram +sql-tbl + + + +clMaroon +$00B9FFFF +292 +141 +175 +32 +tnTkvoZxVkmVjIgd8K6VcwAA + + +1 +module-design-task + + +False + + +False + + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + + +clMaroon +$00B9FFFF +414,105;389,141 +BghWDCz5OkKF8K6lTv+jGQAA +LwUxcozs1UOu4jaFLiFsSQAA + + +clMaroon +$00B9FFFF +466,156;520,156 +l+7wPt1sHES9zLE77waRvAAA +gwBYAnNeEk2uCxTsZUvhjAAA +BghWDCz5OkKF8K6lTv+jGQAA + +1.5707963267949 +15 +category +l+7wPt1sHES9zLE77waRvAAA + + +False +1.5707963267949 +30 +l+7wPt1sHES9zLE77waRvAAA + + +False +-1.5707963267949 +15 +l+7wPt1sHES9zLE77waRvAAA + + +False +-0.523598775598299 +30 +epHead +iUFGIr8VC0SljnWHghKcFAAA + + +False +0.523598775598299 +30 +epTail +DF7gLd86sEO0pjZnITQi5QAA + + +False +0.523598775598299 +25 +epHead +iUFGIr8VC0SljnWHghKcFAAA + + +False +-0.523598775598299 +25 +epTail +DF7gLd86sEO0pjZnITQi5QAA + + +False +-0.785398163397448 +40 +epHead +iUFGIr8VC0SljnWHghKcFAAA + + +False +0.785398163397448 +40 +epTail +DF7gLd86sEO0pjZnITQi5QAA + + +False +-1044 +-1032 +50 +8 +iUFGIr8VC0SljnWHghKcFAAA + + +False +-1044 +-1032 +50 +8 +DF7gLd86sEO0pjZnITQi5QAA + + + +clMaroon +$00B9FFFF +396 +192 +229 +32 +hi9GvwnwFkKy8F8f44i8mgAA + + +1 +classic-app-feature-design + + +False + + +False + + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + + +clMaroon +$00B9FFFF +548,238;530,223 +5o0i3tmiW0+wft5WJgf5swAA +tOec8LvaOEuTNI/k5kwMrwAA + + +clMaroon +$00B9FFFF +377,265;379,172 +Fcx+CoxfEEarzL288+IirQAA +BghWDCz5OkKF8K6lTv+jGQAA +7jqlLyDAzESQnbx/rHQ2dgAA + +1.5707963267949 +15 +design +Fcx+CoxfEEarzL288+IirQAA + + +False +1.5707963267949 +30 +Fcx+CoxfEEarzL288+IirQAA + + +False +-1.5707963267949 +15 +Fcx+CoxfEEarzL288+IirQAA + + +False +-0.523598775598299 +30 +epHead +sYEr8xJzY0uFxXGAJQj62QAA + + +False +0.523598775598299 +30 +epTail +NYZAYRfo+EqcnxFwEX16dAAA + + +False +0.523598775598299 +25 +epHead +sYEr8xJzY0uFxXGAJQj62QAA + + +False +-0.523598775598299 +25 +epTail +NYZAYRfo+EqcnxFwEX16dAAA + + +False +-0.785398163397448 +40 +epHead +sYEr8xJzY0uFxXGAJQj62QAA + + +False +0.785398163397448 +40 +epTail +NYZAYRfo+EqcnxFwEX16dAAA + + +False +-988 +-1064 +50 +8 +sYEr8xJzY0uFxXGAJQj62QAA + + +False +-988 +-1064 +50 +8 +NYZAYRfo+EqcnxFwEX16dAAA + + + +clMaroon +$00B9FFFF +420,172;471,192 +CcwrYONHfkWTOXKrfeQn0wAA +5o0i3tmiW0+wft5WJgf5swAA +BghWDCz5OkKF8K6lTv+jGQAA + +False +1.5707963267949 +15 +CcwrYONHfkWTOXKrfeQn0wAA + + +False +1.5707963267949 +30 +CcwrYONHfkWTOXKrfeQn0wAA + + +False +-1.5707963267949 +15 +CcwrYONHfkWTOXKrfeQn0wAA + + +False +-0.523598775598299 +30 +epHead +0IK4qX1pZ0mmy0tW1H9wYwAA + + +False +0.523598775598299 +30 +epTail +5rkAHpBOt0OZxpkOhYsRfQAA + + +False +0.523598775598299 +25 +epHead +0IK4qX1pZ0mmy0tW1H9wYwAA + + +False +-0.523598775598299 +25 +epTail +5rkAHpBOt0OZxpkOhYsRfQAA + + +False +-0.785398163397448 +40 +epHead +0IK4qX1pZ0mmy0tW1H9wYwAA + + +False +0.785398163397448 +40 +epTail +5rkAHpBOt0OZxpkOhYsRfQAA + + +False +-988 +-1064 +50 +8 +0IK4qX1pZ0mmy0tW1H9wYwAA + + +False +-988 +-1064 +50 +8 +5rkAHpBOt0OZxpkOhYsRfQAA + + + +clMaroon +$00B9FFFF +648 +169 +108 +32 +2LU3javC70yzEUTHd0L+VAAA + + +1 +end-of-proc + + +False + + +False + + + +False +2LU3javC70yzEUTHd0L+VAAA + + +False +2LU3javC70yzEUTHd0L+VAAA + + +False +2LU3javC70yzEUTHd0L+VAAA + + + +clMaroon +$00B9FFFF +624,193;648,190 +D/6a5FDvaU2giul+pputrgAA +E3qklen4DEiMkHMgk5C+JQAA +5o0i3tmiW0+wft5WJgf5swAA + +False +1.5707963267949 +15 +D/6a5FDvaU2giul+pputrgAA + + +False +1.5707963267949 +30 +D/6a5FDvaU2giul+pputrgAA + + +False +-1.5707963267949 +15 +D/6a5FDvaU2giul+pputrgAA + + +False +-0.523598775598299 +30 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +0.523598775598299 +30 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +0.523598775598299 +25 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +-0.523598775598299 +25 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +-0.785398163397448 +40 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +0.785398163397448 +40 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +-988 +-1064 +50 +8 +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +-988 +-1064 +50 +8 +fj2tpTa4tk+iVJg+TnTWUwAA + + + +clMaroon +$00B9FFFF +633,169;648,172 +YHQtCOYCXU6JlB3IIm7OuQAA +E3qklen4DEiMkHMgk5C+JQAA +gwBYAnNeEk2uCxTsZUvhjAAA + +False +1.5707963267949 +15 +YHQtCOYCXU6JlB3IIm7OuQAA + + +False +1.5707963267949 +30 +YHQtCOYCXU6JlB3IIm7OuQAA + + +False +-1.5707963267949 +15 +YHQtCOYCXU6JlB3IIm7OuQAA + + +False +-0.523598775598299 +30 +epHead +e/jJUmPBsUuFL+zaG4xKZgAA + + +False +0.523598775598299 +30 +epTail +L2yiBfWQi0CXNccTHoAyQQAA + + +False +0.523598775598299 +25 +epHead +e/jJUmPBsUuFL+zaG4xKZgAA + + +False +-0.523598775598299 +25 +epTail +L2yiBfWQi0CXNccTHoAyQQAA + + +False +-0.785398163397448 +40 +epHead +e/jJUmPBsUuFL+zaG4xKZgAA + + +False +0.785398163397448 +40 +epTail +L2yiBfWQi0CXNccTHoAyQQAA + + +False +-988 +-1064 +50 +8 +e/jJUmPBsUuFL+zaG4xKZgAA + + +False +-988 +-1064 +50 +8 +L2yiBfWQi0CXNccTHoAyQQAA + + + +clMaroon +$00B9FFFF +348,172;301,196 +njRTD7ql6UCc1F0jjK/nOwAA +BghWDCz5OkKF8K6lTv+jGQAA + + +clMaroon +$00B9FFFF +544,141;467,105 +LwUxcozs1UOu4jaFLiFsSQAA +gwBYAnNeEk2uCxTsZUvhjAAA + + +clMaroon +$00B9FFFF +382,316;379,296 +dOqivJTIIUigVVTdSjV6NQAA +7jqlLyDAzESQnbx/rHQ2dgAA +eow26LjeFU6GRSdSgeT85AAA + +False +1.5707963267949 +15 +dOqivJTIIUigVVTdSjV6NQAA + + +False +1.5707963267949 +30 +dOqivJTIIUigVVTdSjV6NQAA + + +False +-1.5707963267949 +15 +dOqivJTIIUigVVTdSjV6NQAA + + +False +-0.523598775598299 +30 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +0.523598775598299 +30 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +0.523598775598299 +25 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +-0.523598775598299 +25 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +-0.785398163397448 +40 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +0.785398163397448 +40 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +-988 +-1064 +50 +8 +tj9PxTnKWUOoKg0de6lHnQAA + + +False +-988 +-1064 +50 +8 +pOTqH/7r40O4aKzqIuqcswAA + + + +clMaroon +$00B9FFFF +396,208;341,209 +njRTD7ql6UCc1F0jjK/nOwAA +5o0i3tmiW0+wft5WJgf5swAA + + + + +SE-analysis-design-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +TKJqvI0CWUmyoh/jntYGBwAA +73 + +clMaroon +$00B9FFFF +64 +161 +113 +32 +h9lhv0QFq0aFwcWza3gsDAAA + + +1 +list-external + + +False + + +False + + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + +False +h9lhv0QFq0aFwcWza3gsDAAA + + + +clMaroon +clYellow +260 +184 +196 +32 +XmSQJXVfo0qkbNCidOBOzwAA + + +1 +actor & action analysis + + +False + + +False + + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + +False +XmSQJXVfo0qkbNCidOBOzwAA + + + +clMaroon +$00B9FFFF +204 +112 +144 +32 +kETY7OJYc0qg/QkJQX2LXQAA + + +1 +data-io-analysis + + +False + + +False + + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + +False +kETY7OJYc0qg/QkJQX2LXQAA + + + +clMaroon +$00FFFF80 +8 +216 +95 +30 +actor-action-list + + + +clMaroon +$00FFFF80 +80 +82 +87 +30 +physical-io-list + + + +clMaroon +$00B9FFFF +122,111;120,161 +1BA+Xn0RUUm64eTCTOCRugAA +h1gtwyOEbUeBccNY4PTnrQAA + + +clBlue +$00B9FFFF +102,225;260,209 +fdnXBAbHkUmPlMqC0iAwCAAA +jHXkp+eLg0+gvycDjEzupAAA + + +clMaroon +$00B9FFFF +166,105;204,113 +lD0x8R9zUU+Gr16SYaMDDAAA +h1gtwyOEbUeBccNY4PTnrQAA + + +clMaroon +$00B9FFFF +167,161;224,143 +NSCnR/cZlUa3fXcKMhA8sQAA +lD0x8R9zUU+Gr16SYaMDDAAA +1BA+Xn0RUUm64eTCTOCRugAA + +False +1.5707963267949 +15 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +1.5707963267949 +30 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +-1.5707963267949 +15 +NSCnR/cZlUa3fXcKMhA8sQAA + + +False +-0.523598775598299 +30 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +0.523598775598299 +30 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +0.523598775598299 +25 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +-0.523598775598299 +25 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +-0.785398163397448 +40 +epHead +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +0.785398163397448 +40 +epTail +HdgD2FmAh06xyFDupk4vagAA + + +False +-954 +-1152 +50 +8 +iwDC0+jcHkWoYFMM+ST2BQAA + + +False +-954 +-1152 +50 +8 +HdgD2FmAh06xyFDupk4vagAA + + + +clMaroon +$00B9FFFF +176,181;260,189 +ubIfnYMMgEuGrguT+jcONAAA +fdnXBAbHkUmPlMqC0iAwCAAA +1BA+Xn0RUUm64eTCTOCRugAA + +False +1.5707963267949 +15 +ubIfnYMMgEuGrguT+jcONAAA + + +False +1.5707963267949 +30 +ubIfnYMMgEuGrguT+jcONAAA + + +False +-1.5707963267949 +15 +ubIfnYMMgEuGrguT+jcONAAA + + +False +-0.523598775598299 +30 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +0.523598775598299 +30 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +0.523598775598299 +25 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +-0.523598775598299 +25 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +-0.785398163397448 +40 +epHead +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +0.785398163397448 +40 +epTail +pxqjN0GODE69EvLg0dAl+AAA + + +False +-954 +-1152 +50 +8 +ZKrxwL9D1EiytZ9M2QdpNAAA + + +False +-954 +-1152 +50 +8 +pxqjN0GODE69EvLg0dAl+AAA + + + +clMaroon +$00FFFF80 +208 +30 +108 +30 +data-flow-diagram + + + +clMaroon +$00FFFF80 +448 +272 +154 +38 +action-flow-diagram +invoking-procedure-diagram + + + +clMaroon +$00B9FFFF +264,59;273,112 +lD0x8R9zUU+Gr16SYaMDDAAA +IVt2tjJDzEuz/vWJVDnpEQAA + + +clMaroon +$00B9FFFF +491,272;386,215 +fdnXBAbHkUmPlMqC0iAwCAAA +o8gstZMu+EaxvNdITt/2+AAA + + +clMaroon +$00FFFF80 +260 +288 +121 +23 +top-usecase-diagram + + + +clBlue +$00B9FFFF +324,288;351,215 +fdnXBAbHkUmPlMqC0iAwCAAA +tZ9aM6anSEuS/LhHJ8Er8AAA + + +clMaroon +$00B9FFFF +374 +68 +165 +32 +c4KyOid86k6Bzi+unTPcfAAA + + +1 +generate data-dict + + +False + + +False + + + +False +c4KyOid86k6Bzi+unTPcfAAA + + +False +c4KyOid86k6Bzi+unTPcfAAA + + +False +c4KyOid86k6Bzi+unTPcfAAA + + + +clMaroon +$00FFFF80 +396 +10 +63 +30 +data-dict + + + +clMaroon +$00B9FFFF +449,68;434,39 ++pV2gAzD5k290JEx4IzJcAAA +dun4oB1o7E2GPmOE4gcj2AAA + + +clMaroon +$00B9FFFF +337,112;390,99 +dxugzP0ZBEOdRYlU9N5SDAAA +dun4oB1o7E2GPmOE4gcj2AAA +lD0x8R9zUU+Gr16SYaMDDAAA + +False +1.5707963267949 +15 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +1.5707963267949 +30 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +-1.5707963267949 +15 +dxugzP0ZBEOdRYlU9N5SDAAA + + +False +-0.523598775598299 +30 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +0.523598775598299 +30 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +0.523598775598299 +25 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +-0.523598775598299 +25 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +-0.785398163397448 +40 +epHead +/vsJW8WzsU++6Lul86APuQAA + + +False +0.785398163397448 +40 +epTail +z475GIA9kECnM3EOwAHh6QAA + + +False +-954 +-1152 +50 +8 +/vsJW8WzsU++6Lul86APuQAA + + +False +-954 +-1152 +50 +8 +z475GIA9kECnM3EOwAHh6QAA + + + +clMaroon +$00B9FFFF +508 +10 +178 +32 +8E86OOxmt0eTCKMQNrubWAAA + + +1 +data-entity-analysis + + +False + + +False + + + +False +8E86OOxmt0eTCKMQNrubWAAA + + +False +8E86OOxmt0eTCKMQNrubWAAA + + +False +8E86OOxmt0eTCKMQNrubWAAA + + + +clMaroon +$00B9FFFF +492,68;557,41 +TfaTWdzXx0eF98RMZF5U/AAA +VJbVUyCxs0u+Lgy9ekB9lQAA +dun4oB1o7E2GPmOE4gcj2AAA + +False +1.5707963267949 +15 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +1.5707963267949 +30 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +-1.5707963267949 +15 +TfaTWdzXx0eF98RMZF5U/AAA + + +False +-0.523598775598299 +30 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +0.523598775598299 +30 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +0.523598775598299 +25 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +-0.523598775598299 +25 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +-0.785398163397448 +40 +epHead +FR6YZrNJHkeksGzXICrvngAA + + +False +0.785398163397448 +40 +epTail +ApKyMGFOCkStssh0gwBpKAAA + + +False +-954 +-1152 +50 +8 +FR6YZrNJHkeksGzXICrvngAA + + +False +-954 +-1152 +50 +8 +ApKyMGFOCkStssh0gwBpKAAA + + + +clMaroon +$00B9FFFF +508,24;458,24 ++pV2gAzD5k290JEx4IzJcAAA +VJbVUyCxs0u+Lgy9ekB9lQAA + + +clMaroon +$00FFFF80 +700 +8 +96 +38 +ER-diagram +data-file-format + + + +clMaroon +$00B9FFFF +700,26;685,26 +VJbVUyCxs0u+Lgy9ekB9lQAA +WWY3RCgVKEyMXKhU6sBafwAA + + +clMaroon +clYellow +432 +122 +175 +32 +tnTkvoZxVkmVjIgd8K6VcwAA + + +1 +module-design-task + + +False + + +False + + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + +False +tnTkvoZxVkmVjIgd8K6VcwAA + + + +clMaroon +$00B9FFFF +347,130;432,133 +BNlaobUxlkaxprXRzDMgIwAA +/UwMH6vM3kKzkuL76KD36AAA +lD0x8R9zUU+Gr16SYaMDDAAA + +False +1.5707963267949 +15 +BNlaobUxlkaxprXRzDMgIwAA + + +False +1.5707963267949 +30 +BNlaobUxlkaxprXRzDMgIwAA + + +False +-1.5707963267949 +15 +BNlaobUxlkaxprXRzDMgIwAA + + +False +-0.523598775598299 +30 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +0.523598775598299 +30 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +0.523598775598299 +25 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +-0.523598775598299 +25 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +-0.785398163397448 +40 +epHead +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +0.785398163397448 +40 +epTail +UtVAs5JBSkKc0jSVdLpypQAA + + +False +-954 +-1152 +50 +8 +1Y6QXQ3IbUKN3Aa7VuMr4gAA + + +False +-954 +-1152 +50 +8 +UtVAs5JBSkKc0jSVdLpypQAA + + + +clMaroon +$00B9FFFF +396,184;477,153 +t3VIg1cXJEmsTGdIYQFIcwAA +/UwMH6vM3kKzkuL76KD36AAA +fdnXBAbHkUmPlMqC0iAwCAAA + +False +1.5707963267949 +15 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +1.5707963267949 +30 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +-1.5707963267949 +15 +t3VIg1cXJEmsTGdIYQFIcwAA + + +False +-0.523598775598299 +30 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +0.523598775598299 +30 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +0.523598775598299 +25 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +-0.523598775598299 +25 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +-0.785398163397448 +40 +epHead +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +0.785398163397448 +40 +epTail +IuqkqTOhTEuBUbn2uLNuqAAA + + +False +-954 +-1152 +50 +8 +zmuhwJCP20GxOG2Xkj+EQwAA + + +False +-954 +-1152 +50 +8 +IuqkqTOhTEuBUbn2uLNuqAAA + + + +clMaroon +$00FFFF80 +686 +188 +85 +53 +build-dest +install-pkg-list +src-pkg + + + +clMaroon +$00EAEA00 +528 +172 +152 +38 +function-module-list-file +class-diagram + + + +clMaroon +$00B9FFFF +574,172;544,153 +/UwMH6vM3kKzkuL76KD36AAA +stxtQ4b9QEC3ZMO0j91+GAAA + + +clMaroon +$00B9FFFF +381,68;315,55 +IVt2tjJDzEuz/vWJVDnpEQAA +dun4oB1o7E2GPmOE4gcj2AAA + + +clMaroon +$00EAEA00 +532 +232 +135 +30 +top-level-module-list-file + + + +clMaroon +$00B9FFFF +610 +276 +162 +32 +EjjnPhUmf02yFIvhJmdcmQAA + + +1 +pkg-dest category + + +False + + +False + + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + +False +EjjnPhUmf02yFIvhJmdcmQAA + + + +clMaroon +$00B9FFFF +697,276;715,240 +tuK8HBQysUWa6342kavm+gAA +9pbwNzO7hUyC11S5a9Hn1gAA + + +clMaroon +$00B9FFFF +629,261;659,276 +9pbwNzO7hUyC11S5a9Hn1gAA +EXFA5Cr3i0S0CjlpdMlBDgAA + + +clMaroon +$00B9FFFF +520,153;523,272 +o8gstZMu+EaxvNdITt/2+AAA +/UwMH6vM3kKzkuL76KD36AAA + + +clMaroon +$00B9FFFF +630 +124 +114 +32 +a7yZcyAyl02YNl0/FQziyQAA + + +1 +layer-design + + +False + + +False + + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + +False +a7yZcyAyl02YNl0/FQziyQAA + + + +clMaroon +$00FFFF80 +610 +66 +171 +38 +function-module-struct-diagram +architech-diagram + + + +clMaroon +$00B9FFFF +692,103;688,124 +cnN0HexzX0WKGgNpVfpw2gAA +24B4XL60XEOLWuEJN79LNQAA + + +clMaroon +$00B9FFFF +606,138;630,138 +xMoCRZ0FD0mJscRNN+UpywAA +cnN0HexzX0WKGgNpVfpw2gAA +/UwMH6vM3kKzkuL76KD36AAA + +False +1.5707963267949 +15 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +1.5707963267949 +30 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +-1.5707963267949 +15 +xMoCRZ0FD0mJscRNN+UpywAA + + +False +-0.523598775598299 +30 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +0.523598775598299 +30 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +0.523598775598299 +25 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +-0.523598775598299 +25 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +-0.785398163397448 +40 +epHead +FVDBPeq7mEKlp1go7V1hsgAA + + +False +0.785398163397448 +40 +epTail +6MJU+jYHa0mx8HaVM4S+8QAA + + +False +-954 +-1152 +50 +8 +FVDBPeq7mEKlp1go7V1hsgAA + + +False +-954 +-1152 +50 +8 +6MJU+jYHa0mx8HaVM4S+8QAA + + + +clMaroon +$00EAEA00 +120 +280 +134 +30 +function-feature-list-file + + + +clMaroon +$00FF80FF +232 +320 +152 +32 +TMPdkgNID0u772le0sCmLgAA + + +1 +new-ideas-action + + +False + + +False + + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + +False +TMPdkgNID0u772le0sCmLgAA + + + +clMaroon +$00FF80FF +220 +412 +175 +32 +Kh+ykp9GgU6PQXUx+CGLxgAA + + +1 +new-demond-action + + +False + + +False + + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + +False +Kh+ykp9GgU6PQXUx+CGLxgAA + + + +clMaroon +$00B9FFFF +12 +359 +188 +32 +06qF2g1ff02RsBbBfLLo1gAA + + +1 +feature-analysis-task + + +False + + +False + + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + +False +06qF2g1ff02RsBbBfLLo1gAA + + + +clMaroon +$00FFFF80 +244 +366 +123 +30 +note record in tagdoc + + + +clMaroon +$00B9FFFF +306,366;306,351 +yubkqivm4UyQY4rz+UzVhwAA +2x5jLOE4SECwK7+07XFOYgAA + + +clMaroon +$00B9FFFF +306,412;305,395 +2x5jLOE4SECwK7+07XFOYgAA +u0BNgriFLkW8D2ch2mkMLwAA + + +clMaroon +$00B9FFFF +199,377;244,378 +2x5jLOE4SECwK7+07XFOYgAA +8trqinRilUOT7pAQsxAfFQAA + + +clMaroon +$00B9FFFF +232,349;181,359 +ZE6XGr3H4E+M1Lu1nRZ9BQAA +8trqinRilUOT7pAQsxAfFQAA +yubkqivm4UyQY4rz+UzVhwAA + +1.5707963267949 +15 +trimple-catagory +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +1.5707963267949 +30 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-1.5707963267949 +15 +ZE6XGr3H4E+M1Lu1nRZ9BQAA + + +False +-0.523598775598299 +30 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.523598775598299 +30 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +0.523598775598299 +25 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +-0.523598775598299 +25 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-0.785398163397448 +40 +epHead +irMBt7uWtEaxRopZEBcfwgAA + + +False +0.785398163397448 +40 +epTail +eu/8Siwir02KNGkRDOEa9gAA + + +False +-1514 +-944 +50 +8 +irMBt7uWtEaxRopZEBcfwgAA + + +False +-1514 +-944 +50 +8 +eu/8Siwir02KNGkRDOEa9gAA + + + +clMaroon +$00B9FFFF +250,412;166,390 +li4LwavBrE+pggONaW7QkwAA +8trqinRilUOT7pAQsxAfFQAA +u0BNgriFLkW8D2ch2mkMLwAA + +1.5707963267949 +15 +trimple-catagory +li4LwavBrE+pggONaW7QkwAA + + +False +1.5707963267949 +30 +li4LwavBrE+pggONaW7QkwAA + + +False +-1.5707963267949 +15 +li4LwavBrE+pggONaW7QkwAA + + +False +-0.523598775598299 +30 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.523598775598299 +30 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +0.523598775598299 +25 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-0.523598775598299 +25 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-0.785398163397448 +40 +epHead +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +0.785398163397448 +40 +epTail +gehfWFMIjEKeVzAcdHneqgAA + + +False +-1458 +-944 +50 +8 +A/3hkPn0ukKjvmT5rHr/7QAA + + +False +-1458 +-944 +50 +8 +gehfWFMIjEKeVzAcdHneqgAA + + + +clMaroon +$00B9FFFF +171,309;120,359 +8trqinRilUOT7pAQsxAfFQAA +tD2TJMzZuUamXRz9MXpsGgAA + + +clMaroon +$00FF80FF +52 +410 +121 +32 +mx6wTw6+KEuGtAr0iRUXJwAA + + +1 +analysis-task + + +False + + +False + + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + +False +mx6wTw6+KEuGtAr0iRUXJwAA + + + +clMaroon +$00FFFF80 +404 +360 +132 +113 +classic-feature-list +cmd-args-design +running-param-design +.lex/.gmr/.type/.ui +time-sequence-diagram +E-R-diagram +sql-tbl + + + +clMaroon +$00B9FFFF +556 +328 +229 +32 +hi9GvwnwFkKy8F8f44i8mgAA + + +1 +classic-app-feature-design + + +False + + +False + + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + +False +hi9GvwnwFkKy8F8f44i8mgAA + + + +clMaroon +$00B9FFFF +535,392;626,359 +01HabwybsEaAlwmb1OptXgAA +w94pSqv/oES2twsIdN9QSQAA + + +clMaroon +$00FF80FF +672 +428 +108 +32 +2LU3javC70yzEUTHd0L+VAAA + + +1 +end-of-proc + + +False + + +False + + + +False +2LU3javC70yzEUTHd0L+VAAA + + +False +2LU3javC70yzEUTHd0L+VAAA + + +False +2LU3javC70yzEUTHd0L+VAAA + + + +clMaroon +$00B9FFFF +679,359;717,428 +D/6a5FDvaU2giul+pputrgAA +7yHMpOEN0EiC2uZBihzZkQAA +01HabwybsEaAlwmb1OptXgAA + +False +1.5707963267949 +15 +D/6a5FDvaU2giul+pputrgAA + + +False +1.5707963267949 +30 +D/6a5FDvaU2giul+pputrgAA + + +False +-1.5707963267949 +15 +D/6a5FDvaU2giul+pputrgAA + + +False +-0.523598775598299 +30 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +0.523598775598299 +30 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +0.523598775598299 +25 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +-0.523598775598299 +25 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +-0.785398163397448 +40 +epHead +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +0.785398163397448 +40 +epTail +fj2tpTa4tk+iVJg+TnTWUwAA + + +False +-678 +-792 +50 +8 +dn0Z1OGNQ0a5XNqkWwGbGQAA + + +False +-678 +-792 +50 +8 +fj2tpTa4tk+iVJg+TnTWUwAA + + + +clMaroon +$00B9FFFF +110,410;107,390 +dOqivJTIIUigVVTdSjV6NQAA +8trqinRilUOT7pAQsxAfFQAA +X0LJqLv76E+ZXpuLxFOtvwAA + +False +1.5707963267949 +15 +dOqivJTIIUigVVTdSjV6NQAA + + +False +1.5707963267949 +30 +dOqivJTIIUigVVTdSjV6NQAA + + +False +-1.5707963267949 +15 +dOqivJTIIUigVVTdSjV6NQAA + + +False +-0.523598775598299 +30 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +0.523598775598299 +30 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +0.523598775598299 +25 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +-0.523598775598299 +25 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +-0.785398163397448 +40 +epHead +tj9PxTnKWUOoKg0de6lHnQAA + + +False +0.785398163397448 +40 +epTail +pOTqH/7r40O4aKzqIuqcswAA + + +False +-1270 +-980 +50 +8 +tj9PxTnKWUOoKg0de6lHnQAA + + +False +-1270 +-980 +50 +8 +pOTqH/7r40O4aKzqIuqcswAA + + + +clMaroon +$00B9FFFF +713,188;695,155 +cnN0HexzX0WKGgNpVfpw2gAA +tuK8HBQysUWa6342kavm+gAA + + +clMaroon +$00B9FFFF +106,359;119,192 +R5itKCcXY0KrRhRkbaji9QAA +1BA+Xn0RUUm64eTCTOCRugAA +8trqinRilUOT7pAQsxAfFQAA + +False +1.5707963267949 +15 +R5itKCcXY0KrRhRkbaji9QAA + + +False +1.5707963267949 +30 +R5itKCcXY0KrRhRkbaji9QAA + + +False +-1.5707963267949 +15 +R5itKCcXY0KrRhRkbaji9QAA + + +False +-0.523598775598299 +30 +epHead +K0nWpIYMbkyuYvBBAUwcaAAA + + +False +0.523598775598299 +30 +epTail +apr06sAa1U2fZat0sCQPpQAA + + +False +0.523598775598299 +25 +epHead +K0nWpIYMbkyuYvBBAUwcaAAA + + +False +-0.523598775598299 +25 +epTail +apr06sAa1U2fZat0sCQPpQAA + + +False +-0.785398163397448 +40 +epHead +K0nWpIYMbkyuYvBBAUwcaAAA + + +False +0.785398163397448 +40 +epTail +apr06sAa1U2fZat0sCQPpQAA + + +False +-988 +-1100 +50 +8 +K0nWpIYMbkyuYvBBAUwcaAAA + + +False +-988 +-1100 +50 +8 +apr06sAa1U2fZat0sCQPpQAA + + + +clMaroon +$00B9FFFF +266,143;193,280 +tD2TJMzZuUamXRz9MXpsGgAA +lD0x8R9zUU+Gr16SYaMDDAAA + + +clBlue +$00B9FFFF +328,215;211,280 +tD2TJMzZuUamXRz9MXpsGgAA +fdnXBAbHkUmPlMqC0iAwCAAA + + +clMaroon +$00FFFF80 +392 +324 +139 +23 +module-usecase-diagram + + + +clMaroon +$00B9FFFF +453,324;369,215 +fdnXBAbHkUmPlMqC0iAwCAAA +rgknhtOlx0SK43f4Gd6p0wAA + + +clMaroon +$00B9FFFF +302,288;146,192 +1BA+Xn0RUUm64eTCTOCRugAA +tZ9aM6anSEuS/LhHJ8Er8AAA + + +clMaroon +$00B9FFFF +101,192;72,216 +jHXkp+eLg0+gvycDjEzupAAA +1BA+Xn0RUUm64eTCTOCRugAA + + +clMaroon +$00B9FFFF +514,153;492,232;253,280 +tD2TJMzZuUamXRz9MXpsGgAA +/UwMH6vM3kKzkuL76KD36AAA + + +clMaroon +$00B9FFFF +660,155;632,172 +stxtQ4b9QEC3ZMO0j91+GAAA +cnN0HexzX0WKGgNpVfpw2gAA + + +clMaroon +$00EAEA00 +548 +396 +134 +30 +function-feature-list-file + + + +clMaroon +$00B9FFFF +657,359;626,396 +EhkwLjJjd0u6pWqgLOaY0gAA +01HabwybsEaAlwmb1OptXgAA + + +clMaroon +$00B9FFFF +771,292;792,292;792,388;743,428 +wGKQiVXBLE+NlgisexkoeQAA +7yHMpOEN0EiC2uZBihzZkQAA +9pbwNzO7hUyC11S5a9Hn1gAA + +False +1.5707963267949 +15 +wGKQiVXBLE+NlgisexkoeQAA + + +False +1.5707963267949 +30 +wGKQiVXBLE+NlgisexkoeQAA + + +False +-1.5707963267949 +15 +wGKQiVXBLE+NlgisexkoeQAA + + +False +-0.523598775598299 +30 +epHead +nveEivVzpUOmQHaQgBzwHgAA + + +False +0.523598775598299 +30 +epTail +8/RYS0HDWka/NEMRgtUecgAA + + +False +0.523598775598299 +25 +epHead +nveEivVzpUOmQHaQgBzwHgAA + + +False +-0.523598775598299 +25 +epTail +8/RYS0HDWka/NEMRgtUecgAA + + +False +-0.785398163397448 +40 +epHead +nveEivVzpUOmQHaQgBzwHgAA + + +False +0.785398163397448 +40 +epTail +8/RYS0HDWka/NEMRgtUecgAA + + +False +-996 +-1060 +50 +8 +nveEivVzpUOmQHaQgBzwHgAA + + +False +-996 +-1060 +50 +8 +8/RYS0HDWka/NEMRgtUecgAA + + + +clMaroon +$00B9FFFF +743,139;808,140;808,404;757,428 ++UTsgf65KEqv4PlEE9eDUwAA +7yHMpOEN0EiC2uZBihzZkQAA +cnN0HexzX0WKGgNpVfpw2gAA + +False +1.5707963267949 +15 ++UTsgf65KEqv4PlEE9eDUwAA + + +False +1.5707963267949 +30 ++UTsgf65KEqv4PlEE9eDUwAA + + +False +-1.5707963267949 +15 ++UTsgf65KEqv4PlEE9eDUwAA + + +False +-0.523598775598299 +30 +epHead +3okeT8etnkmVfryHL+rOcQAA + + +False +0.523598775598299 +30 +epTail +Emmft/ih+ESwNLfwOBP+ogAA + + +False +0.523598775598299 +25 +epHead +3okeT8etnkmVfryHL+rOcQAA + + +False +-0.523598775598299 +25 +epTail +Emmft/ih+ESwNLfwOBP+ogAA + + +False +-0.785398163397448 +40 +epHead +3okeT8etnkmVfryHL+rOcQAA + + +False +0.785398163397448 +40 +epTail +Emmft/ih+ESwNLfwOBP+ogAA + + +False +-996 +-1060 +50 +8 +3okeT8etnkmVfryHL+rOcQAA + + +False +-996 +-1060 +50 +8 +Emmft/ih+ESwNLfwOBP+ogAA + + + + + +dev-work-flow-diagram +yePcB6NdXUG1SBs2wQJA7gAA + +SY6zyr8S8EyWPA7+VdC+9wAA +76 + +clMaroon +$00FF80FF +240 +104 +159 +32 +PjS4k33/kkePfB8R0Qh14AAA + + +1 +bugfix-estimate + + +False + + +False + + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + +False +PjS4k33/kkePfB8R0Qh14AAA + + + +clMaroon +$00B9FFFF +253 +216 +120 +40 +h5aHoI2/GkuAptKzGDmHIwAA + + +dev-initial-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +276 +120 +40 +NezC/3LDGUub0eLy4M8sOgAA + + +design-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +388 +120 +40 +7jBLX6wjTkmObbw8i4xK0gAA + + +develop-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +448 +120 +40 +qG82m0zlPkqvT2acHPihkwAA + + +testing-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +568 +120 +40 +Gn5CjkIjQUCxSoecNQk2dQAA + + +document-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +688 +120 +40 +1Q7qLHEF7kKyydsrAZ/k1QAA + + +publish-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +156 +120 +40 +lNk1i5gHU02RiCDfZIsLEQAA + + +analysis-procedure + + +False + + +False + + + + +clMaroon +clSilver +67 +392 +110 +32 +H7tysEnUp0+p4o84YYVC8wAA + + +1 +bugfix-work + + +False + + +False + + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + + +clMaroon +$00FFFF80 +56 +692 +130 +32 +dHVXjobujkKGloy7+Ox8DAAA + + +1 +publish-launch + + +False + + +False + + + +False +dHVXjobujkKGloy7+Ox8DAAA + + +False +dHVXjobujkKGloy7+Ox8DAAA + + +False +dHVXjobujkKGloy7+Ox8DAAA + + + +clMaroon +clSilver +52 +572 +141 +32 +VwrgoiK6h0aUxHMgZDKYzgAA + + +1 +document-work + + +False + + +False + + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + +False +VwrgoiK6h0aUxHMgZDKYzgAA + + + +clMaroon +clSilver +53 +632 +138 +32 +fKAlsL5x3U2cAiir26vsAQAA + + +1 +traslation-work + + +False + + +False + + + +False +fKAlsL5x3U2cAiir26vsAQAA + + +False +fKAlsL5x3U2cAiir26vsAQAA + + +False +fKAlsL5x3U2cAiir26vsAQAA + + + +clMaroon +clSilver +64 +452 +117 +32 +KbXj7bLsjku9BsYv/z63VgAA + + +1 +testing-work + + +False + + +False + + + +False +KbXj7bLsjku9BsYv/z63VgAA + + +False +KbXj7bLsjku9BsYv/z63VgAA + + +False +KbXj7bLsjku9BsYv/z63VgAA + + + +clMaroon +$00FFFF80 +16 +280 +209 +32 +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +1 +new-feature-dev-launch + + +False + + +False + + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + +False +lCPHtP6cZ0W7Oq4UP4fxpAAA + + + +clMaroon +$00FFFF80 +43 +160 +154 +32 +d6r7rOW3akG5lkJDtATmigAA + + +1 +initial-dev-launch + + +False + + +False + + + +False +d6r7rOW3akG5lkJDtATmigAA + + +False +d6r7rOW3akG5lkJDtATmigAA + + +False +d6r7rOW3akG5lkJDtATmigAA + + + +clMaroon +$00B9FFFF +253 +628 +120 +40 +Gn5CjkIjQUCxSoecNQk2dQAA + + +document-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +312,195;312,216 +viIiAZ9C80y4tKd497zwFAAA +Rq0Cydd7nEKOfOgn8htc8QAA +pkAZPt0EzUO5vbW8/2ISDgAA + +False +1.5707963267949 +15 +viIiAZ9C80y4tKd497zwFAAA + + +False +1.5707963267949 +30 +viIiAZ9C80y4tKd497zwFAAA + + +False +-1.5707963267949 +15 +viIiAZ9C80y4tKd497zwFAAA + + +False +-0.523598775598299 +30 +epHead +9OsI3YefmEShu4VA2aYWsgAA + + +False +0.523598775598299 +30 +epTail +OH+C5n4Y3k61fQSZesUVxwAA + + +False +0.523598775598299 +25 +epHead +9OsI3YefmEShu4VA2aYWsgAA + + +False +-0.523598775598299 +25 +epTail +OH+C5n4Y3k61fQSZesUVxwAA + + +False +-0.785398163397448 +40 +epHead +9OsI3YefmEShu4VA2aYWsgAA + + +False +0.785398163397448 +40 +epTail +OH+C5n4Y3k61fQSZesUVxwAA + + +False +-796 +-1324 +50 +8 +9OsI3YefmEShu4VA2aYWsgAA + + +False +-796 +-1324 +50 +8 +OH+C5n4Y3k61fQSZesUVxwAA + + + +clMaroon +$00B9FFFF +312,255;312,276 +zhltSEBb90+T60/21ERiXQAA +05y9pi2UcU6ptxllVr+G/gAA +Rq0Cydd7nEKOfOgn8htc8QAA + +False +1.5707963267949 +15 +zhltSEBb90+T60/21ERiXQAA + + +False +1.5707963267949 +30 +zhltSEBb90+T60/21ERiXQAA + + +False +-1.5707963267949 +15 +zhltSEBb90+T60/21ERiXQAA + + +False +-0.523598775598299 +30 +epHead +IJastPE4CkGI6UtKXQb+xgAA + + +False +0.523598775598299 +30 +epTail +wVShJ+TldkiCQjPWrQHwugAA + + +False +0.523598775598299 +25 +epHead +IJastPE4CkGI6UtKXQb+xgAA + + +False +-0.523598775598299 +25 +epTail +wVShJ+TldkiCQjPWrQHwugAA + + +False +-0.785398163397448 +40 +epHead +IJastPE4CkGI6UtKXQb+xgAA + + +False +0.785398163397448 +40 +epTail +wVShJ+TldkiCQjPWrQHwugAA + + +False +-944 +-1200 +50 +8 +IJastPE4CkGI6UtKXQb+xgAA + + +False +-944 +-1200 +50 +8 +wVShJ+TldkiCQjPWrQHwugAA + + + +clMaroon +$00B9FFFF +312,315;313,336 +IQdvD61jPEq7KzieVIPMnAAA +ycjyLlSj3kqAT4WlwN+ABQAA +05y9pi2UcU6ptxllVr+G/gAA + +False +1.5707963267949 +15 +IQdvD61jPEq7KzieVIPMnAAA + + +False +1.5707963267949 +30 +IQdvD61jPEq7KzieVIPMnAAA + + +False +-1.5707963267949 +15 +IQdvD61jPEq7KzieVIPMnAAA + + +False +-0.523598775598299 +30 +epHead +d4BprJk1YUek3SfLLsVZ4QAA + + +False +0.523598775598299 +30 +epTail +I2MiL+bJOEWcCQW8PlUaEAAA + + +False +0.523598775598299 +25 +epHead +d4BprJk1YUek3SfLLsVZ4QAA + + +False +-0.523598775598299 +25 +epTail +I2MiL+bJOEWcCQW8PlUaEAAA + + +False +-0.785398163397448 +40 +epHead +d4BprJk1YUek3SfLLsVZ4QAA + + +False +0.785398163397448 +40 +epTail +I2MiL+bJOEWcCQW8PlUaEAAA + + +False +-944 +-1132 +50 +8 +d4BprJk1YUek3SfLLsVZ4QAA + + +False +-944 +-1132 +50 +8 +I2MiL+bJOEWcCQW8PlUaEAAA + + + +clMaroon +$00B9FFFF +312,427;312,448 +/HuYmDQGHEeXQIQr+1PRoQAA +0eY6HnBo4kSNrbtAFd/AoQAA +LdINJygfWEW3vhPOZonupQAA + +False +1.5707963267949 +15 +/HuYmDQGHEeXQIQr+1PRoQAA + + +False +1.5707963267949 +30 +/HuYmDQGHEeXQIQr+1PRoQAA + + +False +-1.5707963267949 +15 +/HuYmDQGHEeXQIQr+1PRoQAA + + +False +-0.523598775598299 +30 +epHead +/pztn/xQEUmMs4TaAXsCagAA + + +False +0.523598775598299 +30 +epTail +770F/tljqkKHqvtGDTfVzAAA + + +False +0.523598775598299 +25 +epHead +/pztn/xQEUmMs4TaAXsCagAA + + +False +-0.523598775598299 +25 +epTail +770F/tljqkKHqvtGDTfVzAAA + + +False +-0.785398163397448 +40 +epHead +/pztn/xQEUmMs4TaAXsCagAA + + +False +0.785398163397448 +40 +epTail +770F/tljqkKHqvtGDTfVzAAA + + +False +-944 +-1132 +50 +8 +/pztn/xQEUmMs4TaAXsCagAA + + +False +-944 +-1132 +50 +8 +770F/tljqkKHqvtGDTfVzAAA + + + +clMaroon +$00B9FFFF +312,607;312,628 +4uPxSnoEgUO3ovjSg4lAfgAA +tQieUJFUIUWjBNmfDel6vwAA +Y9Di27a99UCLuicgXHRPbQAA + +False +1.5707963267949 +15 +4uPxSnoEgUO3ovjSg4lAfgAA + + +False +1.5707963267949 +30 +4uPxSnoEgUO3ovjSg4lAfgAA + + +False +-1.5707963267949 +15 +4uPxSnoEgUO3ovjSg4lAfgAA + + +False +-0.523598775598299 +30 +epHead +KCe+sJFeFUW7JorDZydAQQAA + + +False +0.523598775598299 +30 +epTail +8MwPX9NZj0SQu64mihvgxAAA + + +False +0.523598775598299 +25 +epHead +KCe+sJFeFUW7JorDZydAQQAA + + +False +-0.523598775598299 +25 +epTail +8MwPX9NZj0SQu64mihvgxAAA + + +False +-0.785398163397448 +40 +epHead +KCe+sJFeFUW7JorDZydAQQAA + + +False +0.785398163397448 +40 +epTail +8MwPX9NZj0SQu64mihvgxAAA + + +False +-796 +-1316 +50 +8 +KCe+sJFeFUW7JorDZydAQQAA + + +False +-796 +-1316 +50 +8 +8MwPX9NZj0SQu64mihvgxAAA + + + +clMaroon +$0080FF80 +36 +12 +175 +32 +7lWVbX8GnUmVFBjNoEJuAAAA + + +1 +new-demond-action + + +False + + +False + + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + +False +7lWVbX8GnUmVFBjNoEJuAAAA + + + +clMaroon +$00B9FFFF +430 +276 +120 +40 +1Q7qLHEF7kKyydsrAZ/k1QAA + + +publish-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +253 +508 +120 +40 +VKh7LpFhYka/yUWbEMRTBAAA + + +bug-report-task + + +False + + +False + + + + +clMaroon +$00B9FFFF +312,487;312,508 +wamDBWad0EiNBPiMYvPoYQAA +OO7ku5gAkUOUNTByzbCZzgAA +0eY6HnBo4kSNrbtAFd/AoQAA + +False +1.5707963267949 +15 +wamDBWad0EiNBPiMYvPoYQAA + + +False +1.5707963267949 +30 +wamDBWad0EiNBPiMYvPoYQAA + + +False +-1.5707963267949 +15 +wamDBWad0EiNBPiMYvPoYQAA + + +False +-0.523598775598299 +30 +epHead +SG8bVsROWE+5+iyuVGPkBQAA + + +False +0.523598775598299 +30 +epTail +1IsgVb2s8Ui+xnl92d08gQAA + + +False +0.523598775598299 +25 +epHead +SG8bVsROWE+5+iyuVGPkBQAA + + +False +-0.523598775598299 +25 +epTail +1IsgVb2s8Ui+xnl92d08gQAA + + +False +-0.785398163397448 +40 +epHead +SG8bVsROWE+5+iyuVGPkBQAA + + +False +0.785398163397448 +40 +epTail +1IsgVb2s8Ui+xnl92d08gQAA + + +False +-1064 +-1024 +50 +8 +SG8bVsROWE+5+iyuVGPkBQAA + + +False +-1064 +-1024 +50 +8 +1IsgVb2s8Ui+xnl92d08gQAA + + + +clMaroon +$00B9FFFF +372,527;420,527 +RPaUCtwDgE+7Y3vewD8uWQAA +4hezOO3zxE6T3AtmMrs4MwAA +OO7ku5gAkUOUNTByzbCZzgAA + +False +1.5707963267949 +15 +RPaUCtwDgE+7Y3vewD8uWQAA + + +False +1.5707963267949 +30 +RPaUCtwDgE+7Y3vewD8uWQAA + + +False +-1.5707963267949 +15 +RPaUCtwDgE+7Y3vewD8uWQAA + + +False +-0.523598775598299 +30 +epHead +RaGpcXRFFk2Egrs9p45aEwAA + + +False +0.523598775598299 +30 +epTail +51zN/AjS8UKGQuZi3cgptgAA + + +False +0.523598775598299 +25 +epHead +RaGpcXRFFk2Egrs9p45aEwAA + + +False +-0.523598775598299 +25 +epTail +51zN/AjS8UKGQuZi3cgptgAA + + +False +-0.785398163397448 +40 +epHead +RaGpcXRFFk2Egrs9p45aEwAA + + +False +0.785398163397448 +40 +epTail +51zN/AjS8UKGQuZi3cgptgAA + + +False +-1064 +-1024 +50 +8 +RaGpcXRFFk2Egrs9p45aEwAA + + +False +-1064 +-1024 +50 +8 +51zN/AjS8UKGQuZi3cgptgAA + + + +clMaroon +$00FF80FF +420 +512 +149 +32 +Qefe92j2XEq8x5GI1Vq+RQAA + + +1 +testing-estimate + + +False + + +False + + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + +False +Qefe92j2XEq8x5GI1Vq+RQAA + + + +clMaroon +$00B9FFFF +486,512;448,444;336,444;325,427 +MEolPOO0IEuLY63mhD0XIAAA +LdINJygfWEW3vhPOZonupQAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +MEolPOO0IEuLY63mhD0XIAAA + + +False +1.5707963267949 +30 +MEolPOO0IEuLY63mhD0XIAAA + + +False +-1.5707963267949 +15 +MEolPOO0IEuLY63mhD0XIAAA + + +False +-0.523598775598299 +30 +epHead +6XJvWCMrykCACsZlVke/PAAA + + +False +0.523598775598299 +30 +epTail +g0TBPf3Nh0KJwiSYVxiPhQAA + + +False +0.523598775598299 +25 +epHead +6XJvWCMrykCACsZlVke/PAAA + + +False +-0.523598775598299 +25 +epTail +g0TBPf3Nh0KJwiSYVxiPhQAA + + +False +-0.785398163397448 +40 +epHead +6XJvWCMrykCACsZlVke/PAAA + + +False +0.785398163397448 +40 +epTail +g0TBPf3Nh0KJwiSYVxiPhQAA + + +False +-1064 +-1024 +50 +8 +6XJvWCMrykCACsZlVke/PAAA + + +False +-1064 +-1024 +50 +8 +g0TBPf3Nh0KJwiSYVxiPhQAA + + + +clMaroon +$00B9FFFF +568,668;600,668;600,328;549,313 +ys0dUMXSfkahAJXAYIjoOQAA +4JaPx8QgwEWT8vCziLxdSQAA ++sKzDE+8zkS7xWQbBBTVcwAA + +False +1.5707963267949 +15 +ys0dUMXSfkahAJXAYIjoOQAA + + +False +1.5707963267949 +30 +ys0dUMXSfkahAJXAYIjoOQAA + + +False +-1.5707963267949 +15 +ys0dUMXSfkahAJXAYIjoOQAA + + +False +-0.523598775598299 +30 +epHead +j0eu/Ys1xkyBAac51lq70AAA + + +False +0.523598775598299 +30 +epTail +gijAVu6IkkimRi58YU5afQAA + + +False +0.523598775598299 +25 +epHead +j0eu/Ys1xkyBAac51lq70AAA + + +False +-0.523598775598299 +25 +epTail +gijAVu6IkkimRi58YU5afQAA + + +False +-0.785398163397448 +40 +epHead +j0eu/Ys1xkyBAac51lq70AAA + + +False +0.785398163397448 +40 +epTail +gijAVu6IkkimRi58YU5afQAA + + +False +-1028 +-1084 +50 +8 +j0eu/Ys1xkyBAac51lq70AAA + + +False +-1028 +-1084 +50 +8 +gijAVu6IkkimRi58YU5afQAA + + + +clMaroon +$00B9FFFF +430 +156 +120 +40 +1Q7qLHEF7kKyydsrAZ/k1QAA + + +publish-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +664 +160 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +664 +280 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +664 +512 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +664 +392 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +568,527;664,527 +qMuZkyzh+ky3oDxBIC0P/AAA +OUCMrBecwkmcxrWWZfI9yQAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +qMuZkyzh+ky3oDxBIC0P/AAA + + +False +1.5707963267949 +30 +qMuZkyzh+ky3oDxBIC0P/AAA + + +False +-1.5707963267949 +15 +qMuZkyzh+ky3oDxBIC0P/AAA + + +False +-0.523598775598299 +30 +epHead +MBHAyH1qPEWL3nIRNBXalAAA + + +False +0.523598775598299 +30 +epTail +SqEbSyA4zkqxiqZEBvO8kQAA + + +False +0.523598775598299 +25 +epHead +MBHAyH1qPEWL3nIRNBXalAAA + + +False +-0.523598775598299 +25 +epTail +SqEbSyA4zkqxiqZEBvO8kQAA + + +False +-0.785398163397448 +40 +epHead +MBHAyH1qPEWL3nIRNBXalAAA + + +False +0.785398163397448 +40 +epTail +SqEbSyA4zkqxiqZEBvO8kQAA + + +False +-900 +-1256 +50 +8 +MBHAyH1qPEWL3nIRNBXalAAA + + +False +-900 +-1256 +50 +8 +SqEbSyA4zkqxiqZEBvO8kQAA + + + +clMaroon +$00B9FFFF +549,295;664,295 +o0d7TUyzXk6c+PfIZT5lEAAA +kDJ4sMyQokGYpNNs0RQlPQAA +4JaPx8QgwEWT8vCziLxdSQAA + +False +1.5707963267949 +15 +o0d7TUyzXk6c+PfIZT5lEAAA + + +False +1.5707963267949 +30 +o0d7TUyzXk6c+PfIZT5lEAAA + + +False +-1.5707963267949 +15 +o0d7TUyzXk6c+PfIZT5lEAAA + + +False +-0.523598775598299 +30 +epHead +XISyKVl4zUKFIG8yEnSeZwAA + + +False +0.523598775598299 +30 +epTail +B018yNXvg0ygTAeYfrer4QAA + + +False +0.523598775598299 +25 +epHead +XISyKVl4zUKFIG8yEnSeZwAA + + +False +-0.523598775598299 +25 +epTail +B018yNXvg0ygTAeYfrer4QAA + + +False +-0.785398163397448 +40 +epHead +XISyKVl4zUKFIG8yEnSeZwAA + + +False +0.785398163397448 +40 +epTail +B018yNXvg0ygTAeYfrer4QAA + + +False +-900 +-1324 +50 +8 +XISyKVl4zUKFIG8yEnSeZwAA + + +False +-900 +-1324 +50 +8 +B018yNXvg0ygTAeYfrer4QAA + + + +clMaroon +$00B9FFFF +372,592;406,595 +BY9qrj1RFUm4rNyc3SVDmgAA +IY8NFiPGQkOPFFwtq6H0ZgAA +Y9Di27a99UCLuicgXHRPbQAA + +False +1.5707963267949 +15 +BY9qrj1RFUm4rNyc3SVDmgAA + + +False +1.5707963267949 +30 +BY9qrj1RFUm4rNyc3SVDmgAA + + +False +-1.5707963267949 +15 +BY9qrj1RFUm4rNyc3SVDmgAA + + +False +-0.523598775598299 +30 +epHead +d4j7kpAS0ka+ba2k0nXpZAAA + + +False +0.523598775598299 +30 +epTail +IHj45UgS/0izQOpDHKO3GAAA + + +False +0.523598775598299 +25 +epHead +d4j7kpAS0ka+ba2k0nXpZAAA + + +False +-0.523598775598299 +25 +epTail +IHj45UgS/0izQOpDHKO3GAAA + + +False +-0.785398163397448 +40 +epHead +d4j7kpAS0ka+ba2k0nXpZAAA + + +False +0.785398163397448 +40 +epTail +IHj45UgS/0izQOpDHKO3GAAA + + +False +-936 +-1316 +50 +8 +d4j7kpAS0ka+ba2k0nXpZAAA + + +False +-936 +-1316 +50 +8 +IHj45UgS/0izQOpDHKO3GAAA + + + +clMaroon +$00B9FFFF +372,632;424,619 +YnZl5Nva0UCe5UdReEoIzQAA +IY8NFiPGQkOPFFwtq6H0ZgAA +tQieUJFUIUWjBNmfDel6vwAA + +False +1.5707963267949 +15 +YnZl5Nva0UCe5UdReEoIzQAA + + +False +1.5707963267949 +30 +YnZl5Nva0UCe5UdReEoIzQAA + + +False +-1.5707963267949 +15 +YnZl5Nva0UCe5UdReEoIzQAA + + +False +-0.523598775598299 +30 +epHead +A9CObdPLTUSepg+ci/+UBAAA + + +False +0.523598775598299 +30 +epTail +zzJAA14PKEyZOy48ze8TUQAA + + +False +0.523598775598299 +25 +epHead +A9CObdPLTUSepg+ci/+UBAAA + + +False +-0.523598775598299 +25 +epTail +zzJAA14PKEyZOy48ze8TUQAA + + +False +-0.785398163397448 +40 +epHead +A9CObdPLTUSepg+ci/+UBAAA + + +False +0.785398163397448 +40 +epTail +zzJAA14PKEyZOy48ze8TUQAA + + +False +-936 +-1316 +50 +8 +A9CObdPLTUSepg+ci/+UBAAA + + +False +-936 +-1316 +50 +8 +zzJAA14PKEyZOy48ze8TUQAA + + + +clMaroon +$00B9FFFF +549,175;664,175 +hLW1nXlISEGkjCaKgHd0dAAA +pXNv1QjBU0iuyfVI3ul8fwAA +hXLnvpDLz0KIpSPRhb6ECgAA + +False +1.5707963267949 +15 +hLW1nXlISEGkjCaKgHd0dAAA + + +False +1.5707963267949 +30 +hLW1nXlISEGkjCaKgHd0dAAA + + +False +-1.5707963267949 +15 +hLW1nXlISEGkjCaKgHd0dAAA + + +False +-0.523598775598299 +30 +epHead +nWK8/Dbe5kGwMfVczyrs6wAA + + +False +0.523598775598299 +30 +epTail +WZ976OFIREimbDaKoU7o0QAA + + +False +0.523598775598299 +25 +epHead +nWK8/Dbe5kGwMfVczyrs6wAA + + +False +-0.523598775598299 +25 +epTail +WZ976OFIREimbDaKoU7o0QAA + + +False +-0.785398163397448 +40 +epHead +nWK8/Dbe5kGwMfVczyrs6wAA + + +False +0.785398163397448 +40 +epTail +WZ976OFIREimbDaKoU7o0QAA + + +False +-892 +-1428 +50 +8 +nWK8/Dbe5kGwMfVczyrs6wAA + + +False +-892 +-1428 +50 +8 +WZ976OFIREimbDaKoU7o0QAA + + + +clMaroon +$00B9FFFF +568,668;616,668;616,212;549,192 +S8IcyUEQBk2t/QasjWBrEAAA +hXLnvpDLz0KIpSPRhb6ECgAA ++sKzDE+8zkS7xWQbBBTVcwAA + +False +1.5707963267949 +15 +S8IcyUEQBk2t/QasjWBrEAAA + + +False +1.5707963267949 +30 +S8IcyUEQBk2t/QasjWBrEAAA + + +False +-1.5707963267949 +15 +S8IcyUEQBk2t/QasjWBrEAAA + + +False +-0.523598775598299 +30 +epHead +6PWLFqBgek+WMYGWr8g3pAAA + + +False +0.523598775598299 +30 +epTail +9wmTKLpCT0Ga+RcZfnUdYQAA + + +False +0.523598775598299 +25 +epHead +6PWLFqBgek+WMYGWr8g3pAAA + + +False +-0.523598775598299 +25 +epTail +9wmTKLpCT0Ga+RcZfnUdYQAA + + +False +-0.785398163397448 +40 +epHead +6PWLFqBgek+WMYGWr8g3pAAA + + +False +0.785398163397448 +40 +epTail +9wmTKLpCT0Ga+RcZfnUdYQAA + + +False +-900 +-1384 +50 +8 +6PWLFqBgek+WMYGWr8g3pAAA + + +False +-900 +-1384 +50 +8 +9wmTKLpCT0Ga+RcZfnUdYQAA + + + +clMaroon +$0080FF80 +40 +52 +144 +32 +dqA/cPl8GEmWvU/R693yfAAA + + +1 +new-idea-action + + +False + + +False + + + +False +dqA/cPl8GEmWvU/R693yfAAA + + +False +dqA/cPl8GEmWvU/R693yfAAA + + +False +dqA/cPl8GEmWvU/R693yfAAA + + + +clMaroon +$00B9FFFF +664 +692 +86 +32 +bScKf7cMEkSKjrnDI4WzMgAA + + +1 +end-task + + +False + + +False + + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + +False +bScKf7cMEkSKjrnDI4WzMgAA + + + +clMaroon +$00B9FFFF +372,707;664,707 +eim49HTyz0aTq6cSTLKUxQAA +6fWpQKk33U+G9a3MEcCGcQAA +T2cKdPg1Bk+hDccckoYQ5QAA + +False +1.5707963267949 +15 +eim49HTyz0aTq6cSTLKUxQAA + + +False +1.5707963267949 +30 +eim49HTyz0aTq6cSTLKUxQAA + + +False +-1.5707963267949 +15 +eim49HTyz0aTq6cSTLKUxQAA + + +False +-0.523598775598299 +30 +epHead +bDDeA0cjxEy6AaRuuqyRnwAA + + +False +0.523598775598299 +30 +epTail +Wbq2l1nmWUigv45vNt7DRAAA + + +False +0.523598775598299 +25 +epHead +bDDeA0cjxEy6AaRuuqyRnwAA + + +False +-0.523598775598299 +25 +epTail +Wbq2l1nmWUigv45vNt7DRAAA + + +False +-0.785398163397448 +40 +epHead +bDDeA0cjxEy6AaRuuqyRnwAA + + +False +0.785398163397448 +40 +epTail +Wbq2l1nmWUigv45vNt7DRAAA + + +False +-980 +-1192 +50 +8 +bDDeA0cjxEy6AaRuuqyRnwAA + + +False +-980 +-1192 +50 +8 +Wbq2l1nmWUigv45vNt7DRAAA + + + +clMaroon +$00FF80FF +420 +652 +149 +32 +YPSGJ8SkH0mAV1HZcqVjOgAA + + +1 +publish-estimate + + +False + + +False + + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + +False +YPSGJ8SkH0mAV1HZcqVjOgAA + + + +clMaroon +$00B9FFFF +430 +388 +120 +40 +1Q7qLHEF7kKyydsrAZ/k1QAA + + +publish-procedure + + +False + + +False + + + + +clMaroon +$00B9FFFF +493,512;490,427 +Ia4zuWdlXkG9ym+vnOiB3AAA +FqQn7IeHTkizfymgIbEsLAAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +Ia4zuWdlXkG9ym+vnOiB3AAA + + +False +1.5707963267949 +30 +Ia4zuWdlXkG9ym+vnOiB3AAA + + +False +-1.5707963267949 +15 +Ia4zuWdlXkG9ym+vnOiB3AAA + + +False +-0.523598775598299 +30 +epHead +b4rYIDwkWUShf2GiOCXYDgAA + + +False +0.523598775598299 +30 +epTail +02hOTKH4qE+Snq2RdNFI/gAA + + +False +0.523598775598299 +25 +epHead +b4rYIDwkWUShf2GiOCXYDgAA + + +False +-0.523598775598299 +25 +epTail +02hOTKH4qE+Snq2RdNFI/gAA + + +False +-0.785398163397448 +40 +epHead +b4rYIDwkWUShf2GiOCXYDgAA + + +False +0.785398163397448 +40 +epTail +02hOTKH4qE+Snq2RdNFI/gAA + + +False +-1016 +-1132 +50 +8 +b4rYIDwkWUShf2GiOCXYDgAA + + +False +-1016 +-1132 +50 +8 +02hOTKH4qE+Snq2RdNFI/gAA + + + +clMaroon +$00B9FFFF +549,407;664,407 +XiWUowb9X0+cmh/jn2Y6nwAA +/jiNGEbH9EKzxyhBp7dGbAAA +FqQn7IeHTkizfymgIbEsLAAA + +False +1.5707963267949 +15 +XiWUowb9X0+cmh/jn2Y6nwAA + + +False +1.5707963267949 +30 +XiWUowb9X0+cmh/jn2Y6nwAA + + +False +-1.5707963267949 +15 +XiWUowb9X0+cmh/jn2Y6nwAA + + +False +-0.523598775598299 +30 +epHead +NM+MZJjv/UaHiAj8twEHBgAA + + +False +0.523598775598299 +30 +epTail +KHKx1GHN4Uam3tVmAqbglQAA + + +False +0.523598775598299 +25 +epHead +NM+MZJjv/UaHiAj8twEHBgAA + + +False +-0.523598775598299 +25 +epTail +KHKx1GHN4Uam3tVmAqbglQAA + + +False +-0.785398163397448 +40 +epHead +NM+MZJjv/UaHiAj8twEHBgAA + + +False +0.785398163397448 +40 +epTail +KHKx1GHN4Uam3tVmAqbglQAA + + +False +-1016 +-1132 +50 +8 +NM+MZJjv/UaHiAj8twEHBgAA + + +False +-1016 +-1132 +50 +8 +KHKx1GHN4Uam3tVmAqbglQAA + + + +clMaroon +$00B9FFFF +493,543;490,588 +MQ6Mry1/cE60C5Ss93uHrAAA +IY8NFiPGQkOPFFwtq6H0ZgAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +MQ6Mry1/cE60C5Ss93uHrAAA + + +False +1.5707963267949 +30 +MQ6Mry1/cE60C5Ss93uHrAAA + + +False +-1.5707963267949 +15 +MQ6Mry1/cE60C5Ss93uHrAAA + + +False +-0.523598775598299 +30 +epHead +x9ru4+yHq0W72sfWmglc7wAA + + +False +0.523598775598299 +30 +epTail +xf2zcv1RLES2E6ZY//8hdwAA + + +False +0.523598775598299 +25 +epHead +x9ru4+yHq0W72sfWmglc7wAA + + +False +-0.523598775598299 +25 +epTail +xf2zcv1RLES2E6ZY//8hdwAA + + +False +-0.785398163397448 +40 +epHead +x9ru4+yHq0W72sfWmglc7wAA + + +False +0.785398163397448 +40 +epTail +xf2zcv1RLES2E6ZY//8hdwAA + + +False +-1016 +-1132 +50 +8 +x9ru4+yHq0W72sfWmglc7wAA + + +False +-1016 +-1132 +50 +8 +xf2zcv1RLES2E6ZY//8hdwAA + + + +clMaroon +$00B9FFFF +499,652;568,440;537,427 +/Q+8gAvTq0+PLlF0qnEkGwAA +FqQn7IeHTkizfymgIbEsLAAA ++sKzDE+8zkS7xWQbBBTVcwAA + +False +1.5707963267949 +15 +/Q+8gAvTq0+PLlF0qnEkGwAA + + +False +1.5707963267949 +30 +/Q+8gAvTq0+PLlF0qnEkGwAA + + +False +-1.5707963267949 +15 +/Q+8gAvTq0+PLlF0qnEkGwAA + + +False +-0.523598775598299 +30 +epHead +hu41jycWSEOI3Ox7jzRK0gAA + + +False +0.523598775598299 +30 +epTail +v1eyd2Q+GU+hNljhcBIlnAAA + + +False +0.523598775598299 +25 +epHead +hu41jycWSEOI3Ox7jzRK0gAA + + +False +-0.523598775598299 +25 +epTail +v1eyd2Q+GU+hNljhcBIlnAAA + + +False +-0.785398163397448 +40 +epHead +hu41jycWSEOI3Ox7jzRK0gAA + + +False +0.785398163397448 +40 +epTail +v1eyd2Q+GU+hNljhcBIlnAAA + + +False +-1016 +-1132 +50 +8 +hu41jycWSEOI3Ox7jzRK0gAA + + +False +-1016 +-1132 +50 +8 +v1eyd2Q+GU+hNljhcBIlnAAA + + + +clMaroon +$00B9FFFF +253 +336 +121 +32 +LRvECEfPPkOYfW5/8H8P3QAA + + +1 +code-branch + + +False + + +False + + + +False +LRvECEfPPkOYfW5/8H8P3QAA + + +False +LRvECEfPPkOYfW5/8H8P3QAA + + +False +LRvECEfPPkOYfW5/8H8P3QAA + + + +clMaroon +$00B9FFFF +313,367;312,388 +SCWqm0HM/0qIGrMzbXXlWwAA +LdINJygfWEW3vhPOZonupQAA +ycjyLlSj3kqAT4WlwN+ABQAA + +False +1.5707963267949 +15 +SCWqm0HM/0qIGrMzbXXlWwAA + + +False +1.5707963267949 +30 +SCWqm0HM/0qIGrMzbXXlWwAA + + +False +-1.5707963267949 +15 +SCWqm0HM/0qIGrMzbXXlWwAA + + +False +-0.523598775598299 +30 +epHead +6hCImufvAUuT81kGxRsmxgAA + + +False +0.523598775598299 +30 +epTail +6mwoN9toVUKgNXSs/zpXIQAA + + +False +0.523598775598299 +25 +epHead +6hCImufvAUuT81kGxRsmxgAA + + +False +-0.523598775598299 +25 +epTail +6mwoN9toVUKgNXSs/zpXIQAA + + +False +-0.785398163397448 +40 +epHead +6hCImufvAUuT81kGxRsmxgAA + + +False +0.785398163397448 +40 +epTail +6mwoN9toVUKgNXSs/zpXIQAA + + +False +-1008 +-1236 +50 +8 +6hCImufvAUuT81kGxRsmxgAA + + +False +-1008 +-1236 +50 +8 +6mwoN9toVUKgNXSs/zpXIQAA + + + +clMaroon +$00B9FFFF +427 +332 +127 +32 +bdHUhH7aEUuvu1sA17cxzQAA + + +1 +code-combine + + +False + + +False + + + +False +bdHUhH7aEUuvu1sA17cxzQAA + + +False +bdHUhH7aEUuvu1sA17cxzQAA + + +False +bdHUhH7aEUuvu1sA17cxzQAA + + + +clMaroon +$00B9FFFF +568,528;584,528;584,384;531,363 +xrdGh677e02q1kDtgtazfQAA +ZIbf0/c06EGBYTz9Fgc3IQAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +xrdGh677e02q1kDtgtazfQAA + + +False +1.5707963267949 +30 +xrdGh677e02q1kDtgtazfQAA + + +False +-1.5707963267949 +15 +xrdGh677e02q1kDtgtazfQAA + + +False +-0.523598775598299 +30 +epHead +TchuDcMxgU66R77KAyfQSgAA + + +False +0.523598775598299 +30 +epTail +7PzK5upkUk+dJkyPmUbNewAA + + +False +0.523598775598299 +25 +epHead +TchuDcMxgU66R77KAyfQSgAA + + +False +-0.523598775598299 +25 +epTail +7PzK5upkUk+dJkyPmUbNewAA + + +False +-0.785398163397448 +40 +epHead +TchuDcMxgU66R77KAyfQSgAA + + +False +0.785398163397448 +40 +epTail +7PzK5upkUk+dJkyPmUbNewAA + + +False +-1008 +-1236 +50 +8 +TchuDcMxgU66R77KAyfQSgAA + + +False +-1008 +-1236 +50 +8 +7PzK5upkUk+dJkyPmUbNewAA + + + +clMaroon +$00B9FFFF +427,348;396,348;396,468;372,468 +SQJ2LNwqDUSo9n73ytxYFwAA +0eY6HnBo4kSNrbtAFd/AoQAA +ZIbf0/c06EGBYTz9Fgc3IQAA + +False +1.5707963267949 +15 +SQJ2LNwqDUSo9n73ytxYFwAA + + +False +1.5707963267949 +30 +SQJ2LNwqDUSo9n73ytxYFwAA + + +False +-1.5707963267949 +15 +SQJ2LNwqDUSo9n73ytxYFwAA + + +False +-0.523598775598299 +30 +epHead +TumZKVN0d0in5UkpqbuZTAAA + + +False +0.523598775598299 +30 +epTail +98m3w3R5mkuexiYTm0X0CQAA + + +False +0.523598775598299 +25 +epHead +TumZKVN0d0in5UkpqbuZTAAA + + +False +-0.523598775598299 +25 +epTail +98m3w3R5mkuexiYTm0X0CQAA + + +False +-0.785398163397448 +40 +epHead +TumZKVN0d0in5UkpqbuZTAAA + + +False +0.785398163397448 +40 +epTail +98m3w3R5mkuexiYTm0X0CQAA + + +False +-1008 +-1236 +50 +8 +TumZKVN0d0in5UkpqbuZTAAA + + +False +-1008 +-1236 +50 +8 +98m3w3R5mkuexiYTm0X0CQAA + + + +clMaroon +$00B9FFFF +445,543;369,568 +pBLToI3BDkSX21nTyuesfQAA +Y9Di27a99UCLuicgXHRPbQAA +4hezOO3zxE6T3AtmMrs4MwAA + +False +1.5707963267949 +15 +pBLToI3BDkSX21nTyuesfQAA + + +False +1.5707963267949 +30 +pBLToI3BDkSX21nTyuesfQAA + + +False +-1.5707963267949 +15 +pBLToI3BDkSX21nTyuesfQAA + + +False +-0.523598775598299 +30 +epHead +9Txo32SVmUCTFUkGnzyaoQAA + + +False +0.523598775598299 +30 +epTail +SlWJmvsLTEKb0sz8CslRigAA + + +False +0.523598775598299 +25 +epHead +9Txo32SVmUCTFUkGnzyaoQAA + + +False +-0.523598775598299 +25 +epTail +SlWJmvsLTEKb0sz8CslRigAA + + +False +-0.785398163397448 +40 +epHead +9Txo32SVmUCTFUkGnzyaoQAA + + +False +0.785398163397448 +40 +epTail +SlWJmvsLTEKb0sz8CslRigAA + + +False +-1008 +-1236 +50 +8 +9Txo32SVmUCTFUkGnzyaoQAA + + +False +-1008 +-1236 +50 +8 +SlWJmvsLTEKb0sz8CslRigAA + + + +clMaroon +$00B9FFFF +624 +600 +120 +70 +AihHVW7SgkeVDEL8szGXUQAA + + +soft-repo + + +False + + +False + + + + +clMaroon +$00B9FFFF +224,295;253,295 +zLIxpYqFF02jEI1wZKI0SQAA +05y9pi2UcU6ptxllVr+G/gAA +cgzV1Cjm1E+TvgDTXT4Z/AAA + +False +1.5707963267949 +15 +zLIxpYqFF02jEI1wZKI0SQAA + + +False +1.5707963267949 +30 +zLIxpYqFF02jEI1wZKI0SQAA + + +False +-1.5707963267949 +15 +zLIxpYqFF02jEI1wZKI0SQAA + + +False +-0.523598775598299 +30 +epHead +RueokuJsJ02RY8qTm1ik8wAA + + +False +0.523598775598299 +30 +epTail +oV0xUwtlkEW3wNVlZTulsQAA + + +False +0.523598775598299 +25 +epHead +RueokuJsJ02RY8qTm1ik8wAA + + +False +-0.523598775598299 +25 +epTail +oV0xUwtlkEW3wNVlZTulsQAA + + +False +-0.785398163397448 +40 +epHead +RueokuJsJ02RY8qTm1ik8wAA + + +False +0.785398163397448 +40 +epTail +oV0xUwtlkEW3wNVlZTulsQAA + + +False +-1008 +-1236 +50 +8 +RueokuJsJ02RY8qTm1ik8wAA + + +False +-1008 +-1236 +50 +8 +oV0xUwtlkEW3wNVlZTulsQAA + + + +clMaroon +$00B9FFFF +176,407;253,407 +8JoAmLoX6UCsEUuYOfgFrwAA +LdINJygfWEW3vhPOZonupQAA +n/wO/s227keDkWnSaoMPFwAA + +False +1.5707963267949 +15 +8JoAmLoX6UCsEUuYOfgFrwAA + + +False +1.5707963267949 +30 +8JoAmLoX6UCsEUuYOfgFrwAA + + +False +-1.5707963267949 +15 +8JoAmLoX6UCsEUuYOfgFrwAA + + +False +-0.523598775598299 +30 +epHead +kQl08Rz6jUCQA6Vz31/AmQAA + + +False +0.523598775598299 +30 +epTail +HAKtlFj5902XipIJf5JuhQAA + + +False +0.523598775598299 +25 +epHead +kQl08Rz6jUCQA6Vz31/AmQAA + + +False +-0.523598775598299 +25 +epTail +HAKtlFj5902XipIJf5JuhQAA + + +False +-0.785398163397448 +40 +epHead +kQl08Rz6jUCQA6Vz31/AmQAA + + +False +0.785398163397448 +40 +epTail +HAKtlFj5902XipIJf5JuhQAA + + +False +-1008 +-1236 +50 +8 +kQl08Rz6jUCQA6Vz31/AmQAA + + +False +-1008 +-1236 +50 +8 +HAKtlFj5902XipIJf5JuhQAA + + + +clMaroon +$00B9FFFF +180,467;253,467 +uQ67KS+1vUmRO9PVPQmAvQAA +0eY6HnBo4kSNrbtAFd/AoQAA +8LIFapZp5k6ylbwQfcyklgAA + +False +1.5707963267949 +15 +uQ67KS+1vUmRO9PVPQmAvQAA + + +False +1.5707963267949 +30 +uQ67KS+1vUmRO9PVPQmAvQAA + + +False +-1.5707963267949 +15 +uQ67KS+1vUmRO9PVPQmAvQAA + + +False +-0.523598775598299 +30 +epHead +su8oYR2Ky0aSXbd6TlFoXAAA + + +False +0.523598775598299 +30 +epTail +IT/R9YctZE+fstolgXNfRwAA + + +False +0.523598775598299 +25 +epHead +su8oYR2Ky0aSXbd6TlFoXAAA + + +False +-0.523598775598299 +25 +epTail +IT/R9YctZE+fstolgXNfRwAA + + +False +-0.785398163397448 +40 +epHead +su8oYR2Ky0aSXbd6TlFoXAAA + + +False +0.785398163397448 +40 +epTail +IT/R9YctZE+fstolgXNfRwAA + + +False +-1008 +-1236 +50 +8 +su8oYR2Ky0aSXbd6TlFoXAAA + + +False +-1008 +-1236 +50 +8 +IT/R9YctZE+fstolgXNfRwAA + + + +clMaroon +$00B9FFFF +192,587;253,587 +S89azVl1DEerKr0Lg7uYIwAA +Y9Di27a99UCLuicgXHRPbQAA ++UDQJ377E0yfeyDDN+u8twAA + +False +1.5707963267949 +15 +S89azVl1DEerKr0Lg7uYIwAA + + +False +1.5707963267949 +30 +S89azVl1DEerKr0Lg7uYIwAA + + +False +-1.5707963267949 +15 +S89azVl1DEerKr0Lg7uYIwAA + + +False +-0.523598775598299 +30 +epHead +c1DHaSDPuEOz4QdBj45gwQAA + + +False +0.523598775598299 +30 +epTail +r/hRY5C/z0KLE99Zb7wcHwAA + + +False +0.523598775598299 +25 +epHead +c1DHaSDPuEOz4QdBj45gwQAA + + +False +-0.523598775598299 +25 +epTail +r/hRY5C/z0KLE99Zb7wcHwAA + + +False +-0.785398163397448 +40 +epHead +c1DHaSDPuEOz4QdBj45gwQAA + + +False +0.785398163397448 +40 +epTail +r/hRY5C/z0KLE99Zb7wcHwAA + + +False +-1008 +-1236 +50 +8 +c1DHaSDPuEOz4QdBj45gwQAA + + +False +-1008 +-1236 +50 +8 +r/hRY5C/z0KLE99Zb7wcHwAA + + + +clMaroon +$00B9FFFF +190,647;253,647 +UmPi888MJEySape3IDytNQAA +tQieUJFUIUWjBNmfDel6vwAA +LdVy/adykEu3BEUiOmsYBgAA + +False +1.5707963267949 +15 +UmPi888MJEySape3IDytNQAA + + +False +1.5707963267949 +30 +UmPi888MJEySape3IDytNQAA + + +False +-1.5707963267949 +15 +UmPi888MJEySape3IDytNQAA + + +False +-0.523598775598299 +30 +epHead +5AK+S/x8EU+IYfu9OvYF4QAA + + +False +0.523598775598299 +30 +epTail +0G7qZy+/sEqjVd5kqmhK0QAA + + +False +0.523598775598299 +25 +epHead +5AK+S/x8EU+IYfu9OvYF4QAA + + +False +-0.523598775598299 +25 +epTail +0G7qZy+/sEqjVd5kqmhK0QAA + + +False +-0.785398163397448 +40 +epHead +5AK+S/x8EU+IYfu9OvYF4QAA + + +False +0.785398163397448 +40 +epTail +0G7qZy+/sEqjVd5kqmhK0QAA + + +False +-1008 +-1236 +50 +8 +5AK+S/x8EU+IYfu9OvYF4QAA + + +False +-1008 +-1236 +50 +8 +0G7qZy+/sEqjVd5kqmhK0QAA + + + +clMaroon +$00B9FFFF +196,175;253,175 +WED3oZHyO0Sbd335J3t4SwAA +pkAZPt0EzUO5vbW8/2ISDgAA +WZ6Nv0dBuES8PyEoPwv1hAAA + +False +1.5707963267949 +15 +WED3oZHyO0Sbd335J3t4SwAA + + +False +1.5707963267949 +30 +WED3oZHyO0Sbd335J3t4SwAA + + +False +-1.5707963267949 +15 +WED3oZHyO0Sbd335J3t4SwAA + + +False +-0.523598775598299 +30 +epHead +6hqoLK2vfEyhVl9t+07/sQAA + + +False +0.523598775598299 +30 +epTail +BtfJFt8gzkWLxq07KGt8ZQAA + + +False +0.523598775598299 +25 +epHead +6hqoLK2vfEyhVl9t+07/sQAA + + +False +-0.523598775598299 +25 +epTail +BtfJFt8gzkWLxq07KGt8ZQAA + + +False +-0.785398163397448 +40 +epHead +6hqoLK2vfEyhVl9t+07/sQAA + + +False +0.785398163397448 +40 +epTail +BtfJFt8gzkWLxq07KGt8ZQAA + + +False +-1008 +-1236 +50 +8 +6hqoLK2vfEyhVl9t+07/sQAA + + +False +-1008 +-1236 +50 +8 +BtfJFt8gzkWLxq07KGt8ZQAA + + + +clMaroon +$00B9FFFF +185,707;253,707 +OaMYngAfm0WoiHZwhZD+qQAA +T2cKdPg1Bk+hDccckoYQ5QAA +H35H/g998EO5+b+My/9TGwAA + +False +1.5707963267949 +15 +OaMYngAfm0WoiHZwhZD+qQAA + + +False +1.5707963267949 +30 +OaMYngAfm0WoiHZwhZD+qQAA + + +False +-1.5707963267949 +15 +OaMYngAfm0WoiHZwhZD+qQAA + + +False +-0.523598775598299 +30 +epHead +cmrnCjXFp0S8tNPvjvqbWgAA + + +False +0.523598775598299 +30 +epTail +Dwy9nxvM50Cbv0guTPXG+QAA + + +False +0.523598775598299 +25 +epHead +cmrnCjXFp0S8tNPvjvqbWgAA + + +False +-0.523598775598299 +25 +epTail +Dwy9nxvM50Cbv0guTPXG+QAA + + +False +-0.785398163397448 +40 +epHead +cmrnCjXFp0S8tNPvjvqbWgAA + + +False +0.785398163397448 +40 +epTail +Dwy9nxvM50Cbv0guTPXG+QAA + + +False +-1036 +-1236 +50 +8 +cmrnCjXFp0S8tNPvjvqbWgAA + + +False +-1036 +-1236 +50 +8 +Dwy9nxvM50Cbv0guTPXG+QAA + + + +clMaroon +$0080FF80 +51 +204 +138 +32 +tptycT8EmUmriJ3RFm3kFAAA + + +1 +analysis-action + + +False + + +False + + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + + +clMaroon +$0080FF80 +12 +104 +190 +32 +jic239+6CEiL3vfxIBKzZwAA + + +1 +usr-bug-report-action + + +False + + +False + + + +False +jic239+6CEiL3vfxIBKzZwAA + + +False +jic239+6CEiL3vfxIBKzZwAA + + +False +jic239+6CEiL3vfxIBKzZwAA + + + +clMaroon +$00B9FFFF +185,204;253,188 +IoGZLKJYy0Su7gKold2FugAA +pkAZPt0EzUO5vbW8/2ISDgAA +UyNk1RnZTki1ekm3+nWlBAAA + +False +1.5707963267949 +15 +IoGZLKJYy0Su7gKold2FugAA + + +False +1.5707963267949 +30 +IoGZLKJYy0Su7gKold2FugAA + + +False +-1.5707963267949 +15 +IoGZLKJYy0Su7gKold2FugAA + + +False +-0.523598775598299 +30 +epHead +npHVEpJLck2XAMV9s8g6VwAA + + +False +0.523598775598299 +30 +epTail +J3TF5Wds2UivZ3unkZY6DwAA + + +False +0.523598775598299 +25 +epHead +npHVEpJLck2XAMV9s8g6VwAA + + +False +-0.523598775598299 +25 +epTail +J3TF5Wds2UivZ3unkZY6DwAA + + +False +-0.785398163397448 +40 +epHead +npHVEpJLck2XAMV9s8g6VwAA + + +False +0.785398163397448 +40 +epTail +J3TF5Wds2UivZ3unkZY6DwAA + + +False +-1008 +-1236 +50 +8 +npHVEpJLck2XAMV9s8g6VwAA + + +False +-1008 +-1236 +50 +8 +J3TF5Wds2UivZ3unkZY6DwAA + + + +clMaroon +$00FF80FF +406 +588 +168 +32 +sl9IvUV4W0Kodgc58LjsVgAA + + +1 +complete-estimate + + +False + + +False + + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + +False +sl9IvUV4W0Kodgc58LjsVgAA + + + +clMaroon +$00B9FFFF +490,619;493,652 +KPYLQRKmIkeAc/y+UUmN4QAA ++sKzDE+8zkS7xWQbBBTVcwAA +IY8NFiPGQkOPFFwtq6H0ZgAA + +False +1.5707963267949 +15 +KPYLQRKmIkeAc/y+UUmN4QAA + + +False +1.5707963267949 +30 +KPYLQRKmIkeAc/y+UUmN4QAA + + +False +-1.5707963267949 +15 +KPYLQRKmIkeAc/y+UUmN4QAA + + +False +-0.523598775598299 +30 +epHead +BlAGbbIi30aMaBEtftLGIAAA + + +False +0.523598775598299 +30 +epTail +lrh/7WQ3A0mIOTZd1oStcgAA + + +False +0.523598775598299 +25 +epHead +BlAGbbIi30aMaBEtftLGIAAA + + +False +-0.523598775598299 +25 +epTail +lrh/7WQ3A0mIOTZd1oStcgAA + + +False +-0.785398163397448 +40 +epHead +BlAGbbIi30aMaBEtftLGIAAA + + +False +0.785398163397448 +40 +epTail +lrh/7WQ3A0mIOTZd1oStcgAA + + +False +-1008 +-1236 +50 +8 +BlAGbbIi30aMaBEtftLGIAAA + + +False +-1008 +-1236 +50 +8 +lrh/7WQ3A0mIOTZd1oStcgAA + + + +clMaroon +$0080FF80 +452 +32 +113 +32 +hWsqFBqliU2am4OA8VEXDgAA + + +1 +using-action + + +False + + +False + + + +False +hWsqFBqliU2am4OA8VEXDgAA + + +False +hWsqFBqliU2am4OA8VEXDgAA + + +False +hWsqFBqliU2am4OA8VEXDgAA + + + +clMaroon +$00B9FFFF +372,176;396,176;396,296;372,296 +FAmlbTk0n0ytt/cqGfgskwAA +05y9pi2UcU6ptxllVr+G/gAA +pkAZPt0EzUO5vbW8/2ISDgAA + +False +1.5707963267949 +15 +FAmlbTk0n0ytt/cqGfgskwAA + + +False +1.5707963267949 +30 +FAmlbTk0n0ytt/cqGfgskwAA + + +False +-1.5707963267949 +15 +FAmlbTk0n0ytt/cqGfgskwAA + + +False +-0.523598775598299 +30 +epHead +WDInVNo55Uu7BHXfcUQLNgAA + + +False +0.523598775598299 +30 +epTail +tXhFQ7TewkWyBpAaKgAS+QAA + + +False +0.523598775598299 +25 +epHead +WDInVNo55Uu7BHXfcUQLNgAA + + +False +-0.523598775598299 +25 +epTail +tXhFQ7TewkWyBpAaKgAS+QAA + + +False +-0.785398163397448 +40 +epHead +WDInVNo55Uu7BHXfcUQLNgAA + + +False +0.785398163397448 +40 +epTail +tXhFQ7TewkWyBpAaKgAS+QAA + + +False +-1008 +-1236 +50 +8 +WDInVNo55Uu7BHXfcUQLNgAA + + +False +-1008 +-1236 +50 +8 +tXhFQ7TewkWyBpAaKgAS+QAA + + + +clMaroon +$00B9FFFF +201,119;240,119 +powHE2AyUUeexm1F5fODTAAA +op7TXMmXt0mHqk1AIwA74gAA +YVBwJiAt70+Y3BJSw5fjFgAA + +False +1.5707963267949 +15 +powHE2AyUUeexm1F5fODTAAA + + +False +1.5707963267949 +30 +powHE2AyUUeexm1F5fODTAAA + + +False +-1.5707963267949 +15 +powHE2AyUUeexm1F5fODTAAA + + +False +-0.523598775598299 +30 +epHead +gfyHi9WUpE6GD9hBzk2snQAA + + +False +0.523598775598299 +30 +epTail +YjM/m1UlCki4/Q0e0sh8lgAA + + +False +0.523598775598299 +25 +epHead +gfyHi9WUpE6GD9hBzk2snQAA + + +False +-0.523598775598299 +25 +epTail +YjM/m1UlCki4/Q0e0sh8lgAA + + +False +-0.785398163397448 +40 +epHead +gfyHi9WUpE6GD9hBzk2snQAA + + +False +0.785398163397448 +40 +epTail +YjM/m1UlCki4/Q0e0sh8lgAA + + +False +-368 +-1180 +50 +8 +gfyHi9WUpE6GD9hBzk2snQAA + + +False +-368 +-1180 +50 +8 +YjM/m1UlCki4/Q0e0sh8lgAA + + + +clMaroon +clSilver +652 +104 +110 +32 +H7tysEnUp0+p4o84YYVC8wAA + + +1 +bugfix-work + + +False + + +False + + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + +False +H7tysEnUp0+p4o84YYVC8wAA + + + +clMaroon +$00B9FFFF +398,119;652,119 ++gvlzndWo0SXFj3rSfMCdQAA +gVBoAJXO/kqra8XiHFVH7QAA +op7TXMmXt0mHqk1AIwA74gAA + +False +1.5707963267949 +15 ++gvlzndWo0SXFj3rSfMCdQAA + + +False +1.5707963267949 +30 ++gvlzndWo0SXFj3rSfMCdQAA + + +False +-1.5707963267949 +15 ++gvlzndWo0SXFj3rSfMCdQAA + + +False +-0.523598775598299 +30 +epHead +o/0hT+QIWUatedossmtPBQAA + + +False +0.523598775598299 +30 +epTail +5RC8wEWMEE64UO9nj5kBkAAA + + +False +0.523598775598299 +25 +epHead +o/0hT+QIWUatedossmtPBQAA + + +False +-0.523598775598299 +25 +epTail +5RC8wEWMEE64UO9nj5kBkAAA + + +False +-0.785398163397448 +40 +epHead +o/0hT+QIWUatedossmtPBQAA + + +False +0.785398163397448 +40 +epTail +5RC8wEWMEE64UO9nj5kBkAAA + + +False +-1008 +-1236 +50 +8 +o/0hT+QIWUatedossmtPBQAA + + +False +-1008 +-1236 +50 +8 +5RC8wEWMEE64UO9nj5kBkAAA + + + +clMaroon +$0080FF80 +252 +32 +138 +32 +tptycT8EmUmriJ3RFm3kFAAA + + +1 +analysis-action + + +False + + +False + + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + +False +tptycT8EmUmriJ3RFm3kFAAA + + + +clMaroon +$00B9FFFF +210,36;252,40 +Ycu282Q90kSZPuP8Y2664QAA +3nCDuBMsK0+QzoSS/9JHsgAA +7uNpzIMfD0eMWIaeUbLlHQAA + +False +1.5707963267949 +15 +Ycu282Q90kSZPuP8Y2664QAA + + +False +1.5707963267949 +30 +Ycu282Q90kSZPuP8Y2664QAA + + +False +-1.5707963267949 +15 +Ycu282Q90kSZPuP8Y2664QAA + + +False +-0.523598775598299 +30 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +0.523598775598299 +30 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +0.523598775598299 +25 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +-0.523598775598299 +25 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +-0.785398163397448 +40 +epHead +tbE2qZkS9UCvoD6eysPdBQAA + + +False +0.785398163397448 +40 +epTail +8Gn/k11xTkGZ83K2PTY6tgAA + + +False +-1008 +-1236 +50 +8 +tbE2qZkS9UCvoD6eysPdBQAA + + +False +-1008 +-1236 +50 +8 +8Gn/k11xTkGZ83K2PTY6tgAA + + + +clMaroon +$00B9FFFF +183,60;252,53 +2f8CCoiKYEm2bnh0fSgF5AAA +3nCDuBMsK0+QzoSS/9JHsgAA +KLbcUDvcykStsj8g95lfAgAA + +False +1.5707963267949 +15 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +1.5707963267949 +30 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +-1.5707963267949 +15 +2f8CCoiKYEm2bnh0fSgF5AAA + + +False +-0.523598775598299 +30 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +0.523598775598299 +30 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +0.523598775598299 +25 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +-0.523598775598299 +25 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +-0.785398163397448 +40 +epHead +XqdZXwSYokCQBpZDzAi8kQAA + + +False +0.785398163397448 +40 +epTail +FMzzdvZAeUWKXvIN8LFkfwAA + + +False +-1008 +-1236 +50 +8 +XqdZXwSYokCQBpZDzAi8kQAA + + +False +-1008 +-1236 +50 +8 +FMzzdvZAeUWKXvIN8LFkfwAA + + + + + +develop-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +xVwuXCiSU0OjjNx3L+iLBgAA +22 + +clMaroon +62 +18 +477 +449 +System + + +clMaroon +$00B9FFFF +84 +128 +104 +30 +test-code for unit + + + +clMaroon +$00B9FFFF +80 +404 +144 +30 +testing-code for integrate + + + +clMaroon +$00B9FFFF +72 +288 +125 +30 +testing-code for using + + + +clMaroon +$00B9FFFF +238 +107 +135 +32 +CLf6+wSJ/U+4iSwM7QoY3wAA + + +1 +design-to-code + + +False + + +False + + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + +False +CLf6+wSJ/U+4iSwM7QoY3wAA + + + +clMaroon +$00B9FFFF +322 +218 +104 +32 +gJ7o4uiAMEqSPUL3dadz2wAA + + +1 +unit-coding + + +False + + +False + + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + +False +gJ7o4uiAMEqSPUL3dadz2wAA + + + +clMaroon +$00B9FFFF +254 +287 +108 +32 +wftqTlAvI0+cR9j69saRNQAA + + +1 +unit-testing + + +False + + +False + + + +False +wftqTlAvI0+cR9j69saRNQAA + + +False +wftqTlAvI0+cR9j69saRNQAA + + +False +wftqTlAvI0+cR9j69saRNQAA + + + +clMaroon +$00B9FFFF +238 +338 +152 +32 +qlZGCifQOEyQyqBzIH1x/AAA + + +1 +integrate-testing + + +False + + +False + + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + +False +qlZGCifQOEyQyqBzIH1x/AAA + + + +clMaroon +$00B9FFFF +305,138;305,167 +k48n8C/dEECUhVTIv9BoGQAA +iZbm2TAx1keNx/mPHzSEmgAA +XsyNCerqHEuJZ3n6KxffswAA + +False +1.5707963267949 +15 +k48n8C/dEECUhVTIv9BoGQAA + + +False +1.5707963267949 +30 +k48n8C/dEECUhVTIv9BoGQAA + + +False +-1.5707963267949 +15 +k48n8C/dEECUhVTIv9BoGQAA + + +False +-0.523598775598299 +30 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +0.523598775598299 +30 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +0.523598775598299 +25 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +-0.523598775598299 +25 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +-0.785398163397448 +40 +epHead +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +0.785398163397448 +40 +epTail +YXudH8Doi0+zzc1qPMjDNAAA + + +False +-1576 +-1124 +50 +8 +pSiPgqpAb0+UkTDVbbXBnQAA + + +False +-1576 +-1124 +50 +8 +YXudH8Doi0+zzc1qPMjDNAAA + + + +clMaroon +$00B9FFFF +358,249;321,287 +euFZ2oXh1UyoeBpwCRLyDQAA +udnYsolK4EGZ5Tqfu1inggAA +cXkc4ROKfkK2AEQ27ILD7AAA + +False +1.5707963267949 +15 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +1.5707963267949 +30 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +-1.5707963267949 +15 +euFZ2oXh1UyoeBpwCRLyDQAA + + +False +-0.523598775598299 +30 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +0.523598775598299 +30 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +0.523598775598299 +25 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +-0.523598775598299 +25 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +-0.785398163397448 +40 +epHead +g0Sss8qL1USpNMhJiejoNQAA + + +False +0.785398163397448 +40 +epTail +nnIS6vjqXkqw2mw9rhuzugAA + + +False +-1576 +-1124 +50 +8 +g0Sss8qL1USpNMhJiejoNQAA + + +False +-1576 +-1124 +50 +8 +nnIS6vjqXkqw2mw9rhuzugAA + + + +clMaroon +$00B9FFFF +309,318;311,338 +h7KFG98rIEKQY4C1dOWmFQAA +kVd1VyDwJEWJDwZbvH1q6wAA +udnYsolK4EGZ5Tqfu1inggAA + +False +1.5707963267949 +15 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +1.5707963267949 +30 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +-1.5707963267949 +15 +h7KFG98rIEKQY4C1dOWmFQAA + + +False +-0.523598775598299 +30 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +0.523598775598299 +30 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +0.523598775598299 +25 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +-0.523598775598299 +25 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +-0.785398163397448 +40 +epHead +Fb68OZ19C0WB4BjQurmBRwAA + + +False +0.785398163397448 +40 +epTail +akgagoM7O0WP1rFMWH/IzgAA + + +False +-1576 +-1124 +50 +8 +Fb68OZ19C0WB4BjQurmBRwAA + + +False +-1576 +-1124 +50 +8 +akgagoM7O0WP1rFMWH/IzgAA + + + +clMaroon +$00B9FFFF +234 +167 +144 +32 +CBkE9JDrJU21ybYWNP2cCgAA + + +1 +create-test-unit + + +False + + +False + + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + +False +CBkE9JDrJU21ybYWNP2cCgAA + + + +clMaroon +$00B9FFFF +170 +218 +123 +32 +CEEcWQKt0kyX8zYOPZHrrwAA + + +1 +bugfix-coding + + +False + + +False + + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + +False +CEEcWQKt0kyX8zYOPZHrrwAA + + + +clMaroon +$00B9FFFF +326,198;353,218 +DCobZcXopUed3uhu7f3tCwAA +cXkc4ROKfkK2AEQ27ILD7AAA +iZbm2TAx1keNx/mPHzSEmgAA + +False +1.5707963267949 +15 +DCobZcXopUed3uhu7f3tCwAA + + +False +1.5707963267949 +30 +DCobZcXopUed3uhu7f3tCwAA + + +False +-1.5707963267949 +15 +DCobZcXopUed3uhu7f3tCwAA + + +False +-0.523598775598299 +30 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +0.523598775598299 +30 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +0.523598775598299 +25 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +-0.523598775598299 +25 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +-0.785398163397448 +40 +epHead +GPR477SH0U2rZy9DRg9MzAAA + + +False +0.785398163397448 +40 +epTail +DFlh0do87UmmJQigSQRsiAAA + + +False +-1552 +-1012 +50 +8 +GPR477SH0U2rZy9DRg9MzAAA + + +False +-1552 +-1012 +50 +8 +DFlh0do87UmmJQigSQRsiAAA + + + +clMaroon +$00B9FFFF +270,249;296,260;303,287 +fk3nxDxX5USF8gff9cP5MwAA +udnYsolK4EGZ5Tqfu1inggAA +vmizIwBnQ0SKIRlT6FSqSwAA + +False +1.5707963267949 +15 +fk3nxDxX5USF8gff9cP5MwAA + + +False +1.5707963267949 +30 +fk3nxDxX5USF8gff9cP5MwAA + + +False +-1.5707963267949 +15 +fk3nxDxX5USF8gff9cP5MwAA + + +False +-0.523598775598299 +30 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +0.523598775598299 +30 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +0.523598775598299 +25 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +-0.523598775598299 +25 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +-0.785398163397448 +40 +epHead +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +0.785398163397448 +40 +epTail +lp0ewCTLb06H/3WjWYmLOQAA + + +False +-1552 +-1012 +50 +8 +OPxtPn1oKkaU2Qqr5fDcUwAA + + +False +-1552 +-1012 +50 +8 +lp0ewCTLb06H/3WjWYmLOQAA + + + +clMaroon +$00B9FFFF +458 +214 +61 +30 +src-code + + + +clMaroon +$00B9FFFF +458 +154 +55 +30 +src-pkg + + + +clMaroon +$00B9FFFF +264,287;244,280;235,249 ++9JbOq56nEOxYV/d1LZDewAA +vmizIwBnQ0SKIRlT6FSqSwAA +udnYsolK4EGZ5Tqfu1inggAA + +False +1.5707963267949 +15 ++9JbOq56nEOxYV/d1LZDewAA + + +False +1.5707963267949 +30 ++9JbOq56nEOxYV/d1LZDewAA + + +False +-1.5707963267949 +15 ++9JbOq56nEOxYV/d1LZDewAA + + +False +-0.523598775598299 +30 +epHead +WqzD8pNC6EyQOHtzw/R19wAA + + +False +0.523598775598299 +30 +epTail +g3Yl/RO2Aky2SDl/c9CL3AAA + + +False +0.523598775598299 +25 +epHead +WqzD8pNC6EyQOHtzw/R19wAA + + +False +-0.523598775598299 +25 +epTail +g3Yl/RO2Aky2SDl/c9CL3AAA + + +False +-0.785398163397448 +40 +epHead +WqzD8pNC6EyQOHtzw/R19wAA + + +False +0.785398163397448 +40 +epTail +g3Yl/RO2Aky2SDl/c9CL3AAA + + +False +-1000 +-1000 +50 +8 +WqzD8pNC6EyQOHtzw/R19wAA + + +False +-1000 +-1000 +50 +8 +g3Yl/RO2Aky2SDl/c9CL3AAA + + + +clMaroon +$00B9FFFF +464,214;333,138 +XsyNCerqHEuJZ3n6KxffswAA +WFnnvP5A6Uyk6U7sMCHVCQAA + + +clMaroon +$00B9FFFF +425,231;458,229 +WFnnvP5A6Uyk6U7sMCHVCQAA +cXkc4ROKfkK2AEQ27ILD7AAA + + +clMaroon +$00B9FFFF +458,240;344,287 +udnYsolK4EGZ5Tqfu1inggAA +WFnnvP5A6Uyk6U7sMCHVCQAA + + +clMaroon +$00B9FFFF +458,218;388,196;292,219 +vmizIwBnQ0SKIRlT6FSqSwAA +WFnnvP5A6Uyk6U7sMCHVCQAA + + + + +design-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +ySTAVfcj2U6jFfCvuMqyogAA +1 + +clMaroon +$00B9FFFF +52 +36 +108 +32 +U//hAdD8QU+M1p1r952pSAAA + + +1 +design-task + + +False + + +False + + + +False +U//hAdD8QU+M1p1r952pSAAA + + +False +U//hAdD8QU+M1p1r952pSAAA + + +False +U//hAdD8QU+M1p1r952pSAAA + + + + + +dev-initial-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +F7Rmog3w4EughQCSKf38hgAA +13 + +clMaroon +28 +22 +208 +395 +System + + +clMaroon +$00B9FFFF +61 +112 +134 +45 +kM7+GQ5RuEmygAJdSluSjQAA + + +1 +src-pkg-create + + +False + + +False + + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + +False +kM7+GQ5RuEmygAJdSluSjQAA + + + +clMaroon +$00B9FFFF +80 +320 +100 +32 +KmQBouG6c0yb16gPnUnBtQAA + + +1 +RAD-demo + + +False + + +False + + + +False +KmQBouG6c0yb16gPnUnBtQAA + + +False +KmQBouG6c0yb16gPnUnBtQAA + + +False +KmQBouG6c0yb16gPnUnBtQAA + + + +clMaroon +$00B9FFFF +127,156;127,180 +YcGgDGXOZ06J+TZOxU72agAA +MD2wdRztkUaHPYJptdpRnwAA +g9FXZVEqkEeDovQh5ld2zgAA + +False +1.5707963267949 +15 +YcGgDGXOZ06J+TZOxU72agAA + + +False +1.5707963267949 +30 +YcGgDGXOZ06J+TZOxU72agAA + + +False +-1.5707963267949 +15 +YcGgDGXOZ06J+TZOxU72agAA + + +False +-0.523598775598299 +30 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +0.523598775598299 +30 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +0.523598775598299 +25 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +-0.523598775598299 +25 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +-0.785398163397448 +40 +epHead +W6JXNHPDXE+JzttRtRevOgAA + + +False +0.785398163397448 +40 +epTail +rO/Oarhbpk6wEn45hIpPfAAA + + +False +-2056 +-996 +50 +8 +W6JXNHPDXE+JzttRtRevOgAA + + +False +-2056 +-996 +50 +8 +rO/Oarhbpk6wEn45hIpPfAAA + + + +clMaroon +$00B9FFFF +61 +46 +135 +45 +l2Lw5fePkE+9xXcdzSY+bwAA + + +1 +dev-env-install + + +False + + +False + + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + +False +l2Lw5fePkE+9xXcdzSY+bwAA + + + +clMaroon +$00B9FFFF +128,90;128,112 +3RL8yaG7p0udrs0v9djevAAA +g9FXZVEqkEeDovQh5ld2zgAA +Hb/FVc/wi0OFVH1zZMj5cQAA + +False +1.5707963267949 +15 +3RL8yaG7p0udrs0v9djevAAA + + +False +1.5707963267949 +30 +3RL8yaG7p0udrs0v9djevAAA + + +False +-1.5707963267949 +15 +3RL8yaG7p0udrs0v9djevAAA + + +False +-0.523598775598299 +30 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +0.523598775598299 +30 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +0.523598775598299 +25 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +-0.523598775598299 +25 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +-0.785398163397448 +40 +epHead +La7Sdx9zEUWWIkxIncjJuAAA + + +False +0.785398163397448 +40 +epTail +h4chvQo17kKpYAZk9SZs0wAA + + +False +-2056 +-996 +50 +8 +La7Sdx9zEUWWIkxIncjJuAAA + + +False +-2056 +-996 +50 +8 +h4chvQo17kKpYAZk9SZs0wAA + + + +clMaroon +$00B9FFFF +54 +180 +148 +45 +ofqv4KD9ukybRvF//Fek/AAA + + +1 +web home pages + + +False + + +False + + + +False +ofqv4KD9ukybRvF//Fek/AAA + + +False +ofqv4KD9ukybRvF//Fek/AAA + + +False +ofqv4KD9ukybRvF//Fek/AAA + + + +clMaroon +$00B9FFFF +128,224;129,248 +BYyEw6WhrkigDw+109evLAAA +JUjJ0DqUdUiwoes9veWzIgAA +MD2wdRztkUaHPYJptdpRnwAA + +False +1.5707963267949 +15 +BYyEw6WhrkigDw+109evLAAA + + +False +1.5707963267949 +30 +BYyEw6WhrkigDw+109evLAAA + + +False +-1.5707963267949 +15 +BYyEw6WhrkigDw+109evLAAA + + +False +-0.523598775598299 +30 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +0.523598775598299 +30 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +0.523598775598299 +25 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +-0.523598775598299 +25 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +-0.785398163397448 +40 +epHead +2dUTUSyX8USUOoaapULmuQAA + + +False +0.785398163397448 +40 +epTail +Dk4WLVZ+SU+WfPXc7TG0IwAA + + +False +-2056 +-996 +50 +8 +2dUTUSyX8USUOoaapULmuQAA + + +False +-2056 +-996 +50 +8 +Dk4WLVZ+SU+WfPXc7TG0IwAA + + + +clMaroon +$00B9FFFF +36 +248 +189 +45 +czS7yLr6oUygLwEMTWJMVgAA + + +1 +first-ver-dev-env-chk + + +False + + +False + + + +False +czS7yLr6oUygLwEMTWJMVgAA + + +False +czS7yLr6oUygLwEMTWJMVgAA + + +False +czS7yLr6oUygLwEMTWJMVgAA + + + +clMaroon +$00B9FFFF +130,292;129,320 +ULUs5j3aC0Gd9Vn1OUTU2wAA +jJnr+ewJmkiXbJ8FW5RHwQAA +JUjJ0DqUdUiwoes9veWzIgAA + +False +1.5707963267949 +15 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +1.5707963267949 +30 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +-1.5707963267949 +15 +ULUs5j3aC0Gd9Vn1OUTU2wAA + + +False +-0.523598775598299 +30 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +0.523598775598299 +30 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +0.523598775598299 +25 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +-0.523598775598299 +25 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +-0.785398163397448 +40 +epHead +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +0.785398163397448 +40 +epTail +XXlOcGC2n0emsre13Wy0GgAA + + +False +-2056 +-996 +50 +8 +wHTgM9Z8VUmrcZGO/o0jJgAA + + +False +-2056 +-996 +50 +8 +XXlOcGC2n0emsre13Wy0GgAA + + + +clMaroon +$00B9FFFF +74 +26 +109 +23 +dev-initial-procedure + + + +clMaroon +$00B9FFFF +64 +376 +132 +32 +4Ng728cyoEW6niFYPfKpFAAA + + +1 +end-procedure + + +False + + +False + + + +False +4Ng728cyoEW6niFYPfKpFAAA + + +False +4Ng728cyoEW6niFYPfKpFAAA + + +False +4Ng728cyoEW6niFYPfKpFAAA + + + +clMaroon +$00B9FFFF +129,351;129,376 +ucnlPfSho0+nLeC2/imr6wAA +70rDX5jwP0iWbeW/wLyyFwAA +jJnr+ewJmkiXbJ8FW5RHwQAA + +False +1.5707963267949 +15 +ucnlPfSho0+nLeC2/imr6wAA + + +False +1.5707963267949 +30 +ucnlPfSho0+nLeC2/imr6wAA + + +False +-1.5707963267949 +15 +ucnlPfSho0+nLeC2/imr6wAA + + +False +-0.523598775598299 +30 +epHead +hxKkcKewvkuhqVgosrEOqAAA + + +False +0.523598775598299 +30 +epTail +7Yo61DFsNUaIwp+0+TNjXwAA + + +False +0.523598775598299 +25 +epHead +hxKkcKewvkuhqVgosrEOqAAA + + +False +-0.523598775598299 +25 +epTail +7Yo61DFsNUaIwp+0+TNjXwAA + + +False +-0.785398163397448 +40 +epHead +hxKkcKewvkuhqVgosrEOqAAA + + +False +0.785398163397448 +40 +epTail +7Yo61DFsNUaIwp+0+TNjXwAA + + +False +-1000 +-1000 +50 +8 +hxKkcKewvkuhqVgosrEOqAAA + + +False +-1000 +-1000 +50 +8 +7Yo61DFsNUaIwp+0+TNjXwAA + + + + + +after-develop-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +wscyfYAYZkafubA/1NDMYwAA +18 + +clMaroon +48 +48 +185 +273 +System + + +clMaroon +48 +48 +185 +273 +System + + +clMaroon +$00B9FFFF +77 +138 +121 +45 +lOyDrRE6cEms6LglvRhNKwAA + + +1 +build + + +False + + +False + + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + + +clMaroon +$00B9FFFF +63 +200 +148 +45 +ucei5JvgaEarsuGuZmgj7QAA + + +1 +build-cross + + +False + + +False + + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + + +clMaroon +$00B9FFFF +77 +262 +121 +45 +ZFe9gOmpTEWMgVssyEcAWAAA + + +1 +build-install + + +False + + +False + + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + + +clMaroon +$00B9FFFF +137,182;137,200 +hKV30qElWkWAVhrHK7PJbAAA +6WZ1EJk62UWalkSDT6jwlAAA +h9oHrLLBNESPJJJAQyk1wAAA + +False +1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +1.5707963267949 +30 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-0.523598775598299 +30 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.523598775598299 +30 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +0.523598775598299 +25 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-0.523598775598299 +25 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-0.785398163397448 +40 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.785398163397448 +40 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-2076 +-1312 +50 +8 +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-2076 +-1312 +50 +8 +WHhyhUoWo0iDDhj6FaqW/gAA + + + +clMaroon +$00B9FFFF +136,244;136,262 +Htop0thy70qsJ36MwSIctgAA +IkMD22VsNUKoi5LKu7S4LAAA +6WZ1EJk62UWalkSDT6jwlAAA + +False +1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +1.5707963267949 +30 +Htop0thy70qsJ36MwSIctgAA + + +False +-1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +-0.523598775598299 +30 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.523598775598299 +30 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +0.523598775598299 +25 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-0.523598775598299 +25 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-0.785398163397448 +40 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.785398163397448 +40 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-2076 +-1312 +50 +8 +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-2076 +-1312 +50 +8 +bDyGtYJmuUiVC+pPkc7oHgAA + + + +clMaroon +$00B9FFFF +77 +76 +121 +45 +aUVRiLFY4USAN9h1PY1/vAAA + + +1 +build-debug + + +False + + +False + + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + + +clMaroon +$00B9FFFF +137,120;137,138 ++nJDFiS7VECOJ4vWaYvszgAA +h9oHrLLBNESPJJJAQyk1wAAA +ubE8N91xkU+8S/F8CDBhWAAA + +False +1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +1.5707963267949 +30 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-0.523598775598299 +30 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.523598775598299 +30 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +0.523598775598299 +25 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-0.523598775598299 +25 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-0.785398163397448 +40 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.785398163397448 +40 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-2068 +-1288 +50 +8 +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-2068 +-1288 +50 +8 +VvsNJNyOO0e86/eHwYM58QAA + + + +clMaroon +$00B9FFFF +92 +52 +109 +23 +after-dev-procedure + + + +clMaroon +$00B9FFFF +77 +138 +121 +45 +lOyDrRE6cEms6LglvRhNKwAA + + +1 +build + + +False + + +False + + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + + +clMaroon +$00B9FFFF +63 +200 +148 +45 +ucei5JvgaEarsuGuZmgj7QAA + + +1 +build-cross + + +False + + +False + + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + + +clMaroon +$00B9FFFF +77 +262 +121 +45 +ZFe9gOmpTEWMgVssyEcAWAAA + + +1 +build-install + + +False + + +False + + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + + +clMaroon +$00B9FFFF +137,182;137,200 +hKV30qElWkWAVhrHK7PJbAAA +GmJVvycvyUy/9jSuYyFOHwAA +eL9lDsKGCEmo1ezUdY44EgAA + +False +1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +1.5707963267949 +30 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-0.523598775598299 +30 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.523598775598299 +30 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +0.523598775598299 +25 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-0.523598775598299 +25 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-0.785398163397448 +40 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.785398163397448 +40 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-2076 +-1312 +50 +8 +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-2076 +-1312 +50 +8 +WHhyhUoWo0iDDhj6FaqW/gAA + + + +clMaroon +$00B9FFFF +136,244;136,262 +Htop0thy70qsJ36MwSIctgAA +zCoS/g61OUCowJ+8Npp2mAAA +GmJVvycvyUy/9jSuYyFOHwAA + +False +1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +1.5707963267949 +30 +Htop0thy70qsJ36MwSIctgAA + + +False +-1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +-0.523598775598299 +30 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.523598775598299 +30 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +0.523598775598299 +25 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-0.523598775598299 +25 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-0.785398163397448 +40 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.785398163397448 +40 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-2076 +-1312 +50 +8 +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-2076 +-1312 +50 +8 +bDyGtYJmuUiVC+pPkc7oHgAA + + + +clMaroon +$00B9FFFF +77 +76 +121 +45 +aUVRiLFY4USAN9h1PY1/vAAA + + +1 +build-debug + + +False + + +False + + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + + +clMaroon +$00B9FFFF +137,120;137,138 ++nJDFiS7VECOJ4vWaYvszgAA +eL9lDsKGCEmo1ezUdY44EgAA +mrtIj3FcCEKGxx/TACfdzAAA + +False +1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +1.5707963267949 +30 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-0.523598775598299 +30 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.523598775598299 +30 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +0.523598775598299 +25 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-0.523598775598299 +25 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-0.785398163397448 +40 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.785398163397448 +40 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-2068 +-1288 +50 +8 +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-2068 +-1288 +50 +8 +VvsNJNyOO0e86/eHwYM58QAA + + + +clMaroon +$00B9FFFF +92 +52 +109 +23 +after-dev-procedure + + + + + +build-pkg +yePcB6NdXUG1SBs2wQJA7gAA + +3PhU1VdqeEmvUNILZTm2/QAA +61 + +clMaroon +90 +38 +185 +273 +System + + +clMaroon +$00B9FFFF +116 +344 +70 +32 +lOyDrRE6cEms6LglvRhNKwAA + + +1 +build + + +False + + +False + + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + + +clMaroon +$00B9FFFF +44 +216 +101 +32 +ucei5JvgaEarsuGuZmgj7QAA + + +1 +build-cross + + +False + + +False + + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + + +clMaroon +$00B9FFFF +100 +464 +110 +32 +ZFe9gOmpTEWMgVssyEcAWAAA + + +1 +build-install + + +False + + +False + + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + + +clMaroon +$00B9FFFF +36 +128 +108 +32 +aUVRiLFY4USAN9h1PY1/vAAA + + +1 +build-debug + + +False + + +False + + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + + +clMaroon +$00B9FFFF +110 +46 +109 +23 +after-dev-procedure + + + +clMaroon +$00B9FFFF +36 +172 +118 +32 +P/MTwXa4R0i4uDnbxP7rfgAA + + +1 +build-release + + +False + + +False + + + +False +P/MTwXa4R0i4uDnbxP7rfgAA + + +False +P/MTwXa4R0i4uDnbxP7rfgAA + + +False +P/MTwXa4R0i4uDnbxP7rfgAA + + + +clMaroon +$00B9FFFF +40 +264 +115 +32 +PpRs/sRHvESoLJthqRMMXgAA + + +1 +build-setting + + +False + + +False + + + +False +PpRs/sRHvESoLJthqRMMXgAA + + +False +PpRs/sRHvESoLJthqRMMXgAA + + +False +PpRs/sRHvESoLJthqRMMXgAA + + + +clMaroon +$00B9FFFF +108 +384 +91 +32 +cj5srxPT1Uu1WS6wP6jFWgAA + + +1 +build-test + + +False + + +False + + + +False +cj5srxPT1Uu1WS6wP6jFWgAA + + +False +cj5srxPT1Uu1WS6wP6jFWgAA + + +False +cj5srxPT1Uu1WS6wP6jFWgAA + + + +clMaroon +$00B9FFFF +104 +300 +107 +32 +jjwBjIz9TkqK2I6V9AoapgAA + + +1 +build-config + + +False + + +False + + + +False +jjwBjIz9TkqK2I6V9AoapgAA + + +False +jjwBjIz9TkqK2I6V9AoapgAA + + +False +jjwBjIz9TkqK2I6V9AoapgAA + + + +clMaroon +$00B9FFFF +100 +424 +118 +32 +UvkSiojv9EmjBxEu6NXaNAAA + + +1 +build-instpkg + + +False + + +False + + + +False +UvkSiojv9EmjBxEu6NXaNAAA + + +False +UvkSiojv9EmjBxEu6NXaNAAA + + +False +UvkSiojv9EmjBxEu6NXaNAAA + + + +clMaroon +$00B9FFFF +228 +348 +113 +32 +aA2W2p+5Lk6ydEIL/PlSWgAA + + +1 +build-srcpkg + + +False + + +False + + + +False +aA2W2p+5Lk6ydEIL/PlSWgAA + + +False +aA2W2p+5Lk6ydEIL/PlSWgAA + + +False +aA2W2p+5Lk6ydEIL/PlSWgAA + + + +clMaroon +$00B9FFFF +420 +532 +87 +32 +8jqYhOhGj0K+KdL5PZdJNgAA + + +1 +build-doc + + +False + + +False + + + +False +8jqYhOhGj0K+KdL5PZdJNgAA + + +False +8jqYhOhGj0K+KdL5PZdJNgAA + + +False +8jqYhOhGj0K+KdL5PZdJNgAA + + + +clMaroon +$00B9FFFF +396 +572 +140 +32 +E/qC0eDlTkG+5AWy4l3dQQAA + + +1 +build-webpages + + +False + + +False + + + +False +E/qC0eDlTkG+5AWy4l3dQQAA + + +False +E/qC0eDlTkG+5AWy4l3dQQAA + + +False +E/qC0eDlTkG+5AWy4l3dQQAA + + + +clMaroon +$00B9FFFF +380 +456 +148 +32 +ps9+jVi2eUWW6janr0EEiwAA + + +1 +build-webupdate + + +False + + +False + + + +False +ps9+jVi2eUWW6janr0EEiwAA + + +False +ps9+jVi2eUWW6janr0EEiwAA + + +False +ps9+jVi2eUWW6janr0EEiwAA + + + +clMaroon +$00B9FFFF +400 +492 +115 +32 +434fbRsx8Eib5YTYunmIUwAA + + +1 +build-publish + + +False + + +False + + + +False +434fbRsx8Eib5YTYunmIUwAA + + +False +434fbRsx8Eib5YTYunmIUwAA + + +False +434fbRsx8Eib5YTYunmIUwAA + + + +clMaroon +$00B9FFFF +544 +44 +121 +32 +LybgIsYTrkG30ogWKtabhgAA + + +1 +devtask-get + + +False + + +False + + + +False +LybgIsYTrkG30ogWKtabhgAA + + +False +LybgIsYTrkG30ogWKtabhgAA + + +False +LybgIsYTrkG30ogWKtabhgAA + + + +clMaroon +$00B9FFFF +196 +192 +113 +32 +1W8J/gBHjUCo/VAOs9JWPwAA + + +1 +build-delpkg + + +False + + +False + + + +False +1W8J/gBHjUCo/VAOs9JWPwAA + + +False +1W8J/gBHjUCo/VAOs9JWPwAA + + +False +1W8J/gBHjUCo/VAOs9JWPwAA + + + +clMaroon +$00B9FFFF +100 +500 +101 +32 +skKAKV8WLUKveLKYj5f3MwAA + + +1 +build-clean + + +False + + +False + + + +False +skKAKV8WLUKveLKYj5f3MwAA + + +False +skKAKV8WLUKveLKYj5f3MwAA + + +False +skKAKV8WLUKveLKYj5f3MwAA + + + +clMaroon +$00B9FFFF +92 +536 +124 +32 +0Us9UL+sBEqf+TsZQbKvZwAA + + +1 +build-disclean + + +False + + +False + + + +False +0Us9UL+sBEqf+TsZQbKvZwAA + + +False +0Us9UL+sBEqf+TsZQbKvZwAA + + +False +0Us9UL+sBEqf+TsZQbKvZwAA + + + +clMaroon +$00B9FFFF +192 +156 +118 +32 +ZeYAYtid8Eq2PylWoxGGKgAA + + +1 +build-addpkg + + +False + + +False + + + +False +ZeYAYtid8Eq2PylWoxGGKgAA + + +False +ZeYAYtid8Eq2PylWoxGGKgAA + + +False +ZeYAYtid8Eq2PylWoxGGKgAA + + + +clMaroon +$00B9FFFF +240 +384 +94 +32 +C3UjfnZrtUOL/GpuSfg6AwAA + + +1 +build-dest + + +False + + +False + + + +False +C3UjfnZrtUOL/GpuSfg6AwAA + + +False +C3UjfnZrtUOL/GpuSfg6AwAA + + +False +C3UjfnZrtUOL/GpuSfg6AwAA + + + +clMaroon +$00B9FFFF +244 +312 +77 +32 +fNCT4LEWnUeYrQHCKpc1sgAA + + +1 +build-all + + +False + + +False + + + +False +fNCT4LEWnUeYrQHCKpc1sgAA + + +False +fNCT4LEWnUeYrQHCKpc1sgAA + + +False +fNCT4LEWnUeYrQHCKpc1sgAA + + + +clMaroon +$00B9FFFF +108 +12 +93 +32 +3C+41V2joEKCgZW7qPFqJAAA + + +1 +build-help + + +False + + +False + + + +False +3C+41V2joEKCgZW7qPFqJAAA + + +False +3C+41V2joEKCgZW7qPFqJAAA + + +False +3C+41V2joEKCgZW7qPFqJAAA + + + +clMaroon +$00B9FFFF +52 +84 +84 +32 +soNd7MloD0ydwXp5ajeo1gAA + + +1 +build-init + + +False + + +False + + + +False +soNd7MloD0ydwXp5ajeo1gAA + + +False +soNd7MloD0ydwXp5ajeo1gAA + + +False +soNd7MloD0ydwXp5ajeo1gAA + + + +clMaroon +$00B9FFFF +388 +20 +90 +32 +Rur0kUmhk0ms3c4yOFpztQAA + + +1 +build-list + + +False + + +False + + + +False +Rur0kUmhk0ms3c4yOFpztQAA + + +False +Rur0kUmhk0ms3c4yOFpztQAA + + +False +Rur0kUmhk0ms3c4yOFpztQAA + + + +clMaroon +$00B9FFFF +372 +64 +130 +32 +HIX0HSmjakmb3Ep9Qef3lAAA + + +1 +build-listclear + + +False + + +False + + + +False +HIX0HSmjakmb3Ep9Qef3lAAA + + +False +HIX0HSmjakmb3Ep9Qef3lAAA + + +False +HIX0HSmjakmb3Ep9Qef3lAAA + + + +clMaroon +$00B9FFFF +388 +272 +108 +32 +24ykb6bVgUyfGvsLPDcEVAAA + + +1 +build-incv1 + + +False + + +False + + + +False +24ykb6bVgUyfGvsLPDcEVAAA + + +False +24ykb6bVgUyfGvsLPDcEVAAA + + +False +24ykb6bVgUyfGvsLPDcEVAAA + + + +clMaroon +$00B9FFFF +392 +312 +108 +32 +gakQZrsNI0qzUDS5AFRETgAA + + +1 +build-incv2 + + +False + + +False + + + +False +gakQZrsNI0qzUDS5AFRETgAA + + +False +gakQZrsNI0qzUDS5AFRETgAA + + +False +gakQZrsNI0qzUDS5AFRETgAA + + + +clMaroon +$00B9FFFF +392 +348 +108 +32 +tb4vh+i6FkejzgDKlRQKgAAA + + +1 +build-incv3 + + +False + + +False + + + +False +tb4vh+i6FkejzgDKlRQKgAAA + + +False +tb4vh+i6FkejzgDKlRQKgAAA + + +False +tb4vh+i6FkejzgDKlRQKgAAA + + + +clMaroon +$00B9FFFF +204 +268 +96 +32 +vLsuhPdpOUmfaYyp+dTB9AAA + + +1 +build-scan + + +False + + +False + + + +False +vLsuhPdpOUmfaYyp+dTB9AAA + + +False +vLsuhPdpOUmfaYyp+dTB9AAA + + +False +vLsuhPdpOUmfaYyp+dTB9AAA + + + +clMaroon +$00B9FFFF +360 +180 +148 +32 +NQnczPveFkqgSMxSpB5RXAAA + + +1 +build-addmodule + + +False + + +False + + + +False +NQnczPveFkqgSMxSpB5RXAAA + + +False +NQnczPveFkqgSMxSpB5RXAAA + + +False +NQnczPveFkqgSMxSpB5RXAAA + + + +clMaroon +$00B9FFFF +364 +224 +142 +32 +3mS3u1e5KkGpZrfKEVLwWwAA + + +1 +build-delmodule + + +False + + +False + + + +False +3mS3u1e5KkGpZrfKEVLwWwAA + + +False +3mS3u1e5KkGpZrfKEVLwWwAA + + +False +3mS3u1e5KkGpZrfKEVLwWwAA + + + +clMaroon +$00B9FFFF +380 +104 +113 +32 +VfUFjdmQ4U+PzmMWf4zLAgAA + + +1 +build-addfile + + +False + + +False + + + +False +VfUFjdmQ4U+PzmMWf4zLAgAA + + +False +VfUFjdmQ4U+PzmMWf4zLAgAA + + +False +VfUFjdmQ4U+PzmMWf4zLAgAA + + + +clMaroon +$00B9FFFF +380 +140 +107 +32 +Hjl3bWgUkkij070Nm8IwvQAA + + +1 +build-delfile + + +False + + +False + + + +False +Hjl3bWgUkkij070Nm8IwvQAA + + +False +Hjl3bWgUkkij070Nm8IwvQAA + + +False +Hjl3bWgUkkij070Nm8IwvQAA + + + +clMaroon +$00B9FFFF +176 +228 +151 +32 +FRxqvqas70SmaGbd0YXHVgAA + + +1 +build-pkgrename + + +False + + +False + + + +False +FRxqvqas70SmaGbd0YXHVgAA + + +False +FRxqvqas70SmaGbd0YXHVgAA + + +False +FRxqvqas70SmaGbd0YXHVgAA + + + +clMaroon +$00B9FFFF +100 +48 +115 +32 +WFKTBABAy0C+p2qS1SR8GQAA + + +1 +build-default + + +False + + +False + + + +False +WFKTBABAy0C+p2qS1SR8GQAA + + +False +WFKTBABAy0C+p2qS1SR8GQAA + + +False +WFKTBABAy0C+p2qS1SR8GQAA + + + +clMaroon +$00B9FFFF +96 +576 +117 +32 +/lAoKqVkC0OR3IQ+5JSTIQAA + + +1 +build-srcbak + + +False + + +False + + + +False +/lAoKqVkC0OR3IQ+5JSTIQAA + + +False +/lAoKqVkC0OR3IQ+5JSTIQAA + + +False +/lAoKqVkC0OR3IQ+5JSTIQAA + + + +clMaroon +$00B9FFFF +200 +76 +113 +32 +YUY8xSbHXUKxUg1evRyXywAA + + +1 +build-listpkg + + +False + + +False + + + +False +YUY8xSbHXUKxUg1evRyXywAA + + +False +YUY8xSbHXUKxUg1evRyXywAA + + +False +YUY8xSbHXUKxUg1evRyXywAA + + + +clMaroon +$00B9FFFF +176 +116 +152 +32 +BpGs6JvR/E2ke8CH/yuNLAAA + + +1 +build-listpkgclear + + +False + + +False + + + +False +BpGs6JvR/E2ke8CH/yuNLAAA + + +False +BpGs6JvR/E2ke8CH/yuNLAAA + + +False +BpGs6JvR/E2ke8CH/yuNLAAA + + + +clMaroon +$00B9FFFF +232 +456 +123 +32 +ja2Kay77hkyLXMf5w6VvZwAA + + +1 +build-mandoc + + +False + + +False + + + +False +ja2Kay77hkyLXMf5w6VvZwAA + + +False +ja2Kay77hkyLXMf5w6VvZwAA + + +False +ja2Kay77hkyLXMf5w6VvZwAA + + + +clMaroon +$00B9FFFF +236 +496 +117 +32 +aPGhvFldykut4+igGmWnpQAA + + +1 +build-infodoc + + +False + + +False + + + +False +aPGhvFldykut4+igGmWnpQAA + + +False +aPGhvFldykut4+igGmWnpQAA + + +False +aPGhvFldykut4+igGmWnpQAA + + + +clMaroon +$00B9FFFF +240 +536 +113 +32 +IKsHmuN07kG8OA1fPuCo+AAA + + +1 +build-pdfdoc + + +False + + +False + + + +False +IKsHmuN07kG8OA1fPuCo+AAA + + +False +IKsHmuN07kG8OA1fPuCo+AAA + + +False +IKsHmuN07kG8OA1fPuCo+AAA + + + +clMaroon +$00B9FFFF +236 +576 +124 +32 +O6y9SB7tiE2zxAlAfvxABgAA + + +1 +build-htmldoc + + +False + + +False + + + +False +O6y9SB7tiE2zxAlAfvxABgAA + + +False +O6y9SB7tiE2zxAlAfvxABgAA + + +False +O6y9SB7tiE2zxAlAfvxABgAA + + + +clMaroon +$00B9FFFF +384 +384 +120 +32 +X0RlJh5TpUuAKKvJZzn2kgAA + + +1 +build-commit + + +False + + +False + + + +False +X0RlJh5TpUuAKKvJZzn2kgAA + + +False +X0RlJh5TpUuAKKvJZzn2kgAA + + +False +X0RlJh5TpUuAKKvJZzn2kgAA + + + +clMaroon +$00B9FFFF +388 +420 +125 +32 +1/3fl+RRmUKmICTGrIimZAAA + + +1 +build-pkgsync + + +False + + +False + + + +False +1/3fl+RRmUKmICTGrIimZAAA + + +False +1/3fl+RRmUKmICTGrIimZAAA + + +False +1/3fl+RRmUKmICTGrIimZAAA + + + +clMaroon +$00B9FFFF +429,532;329,487 +NoXKQs2xtE6fioUtJ2BwDAAA +0aiGrBE650unkU8lCAe3AgAA +ubWV632pVEqnMYi4Kn9Z/gAA + +False +1.5707963267949 +15 +NoXKQs2xtE6fioUtJ2BwDAAA + + +-0.58956080801914 +13.0384048104053 +<<include>> +NoXKQs2xtE6fioUtJ2BwDAAA + + +False +-1.5707963267949 +15 +NoXKQs2xtE6fioUtJ2BwDAAA + + + +clMaroon +$00B9FFFF +420,538;352,523 +foV7YkoDo0iOCph37xX+aQAA +Rly12l6sikKFzpy4tCACBwAA +ubWV632pVEqnMYi4Kn9Z/gAA + +False +1.5707963267949 +15 +foV7YkoDo0iOCph37xX+aQAA + + +3.93263910966245 +7.21110255092798 +<<include>> +foV7YkoDo0iOCph37xX+aQAA + + +False +-1.5707963267949 +15 +foV7YkoDo0iOCph37xX+aQAA + + + +clMaroon +$00B9FFFF +420,548;352,550 +whoRvUDIx064d1Yagdz8BAAA +yD6ZJEzy4EGjPASyNYIKPQAA +ubWV632pVEqnMYi4Kn9Z/gAA + +False +1.5707963267949 +15 +whoRvUDIx064d1Yagdz8BAAA + + +-1.32190128539205 +7.28010988928052 +<<include>> +whoRvUDIx064d1Yagdz8BAAA + + +False +-1.5707963267949 +15 +whoRvUDIx064d1Yagdz8BAAA + + + +clMaroon +$00B9FFFF +420,558;353,576 +cZpclHoUiU6EG/tEiwqgBwAA +GbqfGI+7hkOpikiQtUSUqQAA +ubWV632pVEqnMYi4Kn9Z/gAA + +False +1.5707963267949 +15 +cZpclHoUiU6EG/tEiwqgBwAA + + +4.06562809947177 +5.3851648071345 +<<include>> +cZpclHoUiU6EG/tEiwqgBwAA + + +False +-1.5707963267949 +15 +cZpclHoUiU6EG/tEiwqgBwAA + + + +clMaroon +$00B9FFFF +185,351;244,336 +VzL/5LAnlkGJyIYcJauhgQAA +MI/PxlyihU2FsQW3zP5OjwAA +kZAXDcSScUSa3zPofC/wwAAA + +False +1.5707963267949 +15 +VzL/5LAnlkGJyIYcJauhgQAA + + +-3.63154932625384 +20.6155281280883 +<<include>> +VzL/5LAnlkGJyIYcJauhgQAA + + +False +-1.5707963267949 +15 +VzL/5LAnlkGJyIYcJauhgQAA + + + +clMaroon +$00B9FFFF +185,360;228,361 +5aKY/x+ZoUO6ajG8h3B7egAA +SyUaJbpLk0CJS89/ARTO3gAA +kZAXDcSScUSa3zPofC/wwAAA + +False +1.5707963267949 +15 +5aKY/x+ZoUO6ajG8h3B7egAA + + +1.29446753120203 +6.32455532033676 +<<include>> +5aKY/x+ZoUO6ajG8h3B7egAA + + +False +-1.5707963267949 +15 +5aKY/x+ZoUO6ajG8h3B7egAA + + + +clMaroon +$00B9FFFF +185,369;240,385 +141jpsdb4EK0UYCsLQiPoAAA +WNrDY4DDeEimX/kqwJi5fwAA +kZAXDcSScUSa3zPofC/wwAAA + +False +1.5707963267949 +15 +141jpsdb4EK0UYCsLQiPoAAA + + +-2.73893728694138 +8.06225774829855 +<<include>> +141jpsdb4EK0UYCsLQiPoAAA + + +False +-1.5707963267949 +15 +141jpsdb4EK0UYCsLQiPoAAA + + + +clMaroon +$00B9FFFF +552 +84 +110 +32 +afV679sgjUqDkvkJHfLrJQAA + + +1 +devtask-del + + +False + + +False + + + +False +afV679sgjUqDkvkJHfLrJQAA + + +False +afV679sgjUqDkvkJHfLrJQAA + + +False +afV679sgjUqDkvkJHfLrJQAA + + + +clMaroon +$00B9FFFF +542 +128 +141 +32 +MK78JSACN06YAVlefoQH3AAA + + +1 +devtask-submit + + +False + + +False + + + +False +MK78JSACN06YAVlefoQH3AAA + + +False +MK78JSACN06YAVlefoQH3AAA + + +False +MK78JSACN06YAVlefoQH3AAA + + + +clMaroon +$00B9FFFF +548 +4 +110 +32 +9bQcMN0KIEiriRALWgbCUAAA + + +1 +devtask-list + + +False + + +False + + + +False +9bQcMN0KIEiriRALWgbCUAAA + + +False +9bQcMN0KIEiriRALWgbCUAAA + + +False +9bQcMN0KIEiriRALWgbCUAAA + + + +clMaroon +$00B9FFFF +692 +33 +145 +32 +G7F6XVJd3ESOS+7Y6E1KpwAA + + +1 +devtask-append + + +False + + +False + + + +False +G7F6XVJd3ESOS+7Y6E1KpwAA + + +False +G7F6XVJd3ESOS+7Y6E1KpwAA + + +False +G7F6XVJd3ESOS+7Y6E1KpwAA + + + +clMaroon +$00B9FFFF +548 +181 +138 +32 +XU0Fs01RP0CmkBi55CYukgAA + + +1 +devtask-launch + + +False + + +False + + + +False +XU0Fs01RP0CmkBi55CYukgAA + + +False +XU0Fs01RP0CmkBi55CYukgAA + + +False +XU0Fs01RP0CmkBi55CYukgAA + + + +clMaroon +$00B9FFFF +540 +236 +176 +32 +6+iO/zhUzU2JPMvUpLXeOgAA + + +1 +devtask-launchback + + +False + + +False + + + +False +6+iO/zhUzU2JPMvUpLXeOgAA + + +False +6+iO/zhUzU2JPMvUpLXeOgAA + + +False +6+iO/zhUzU2JPMvUpLXeOgAA + + + +clMaroon +$00B9FFFF +552 +284 +152 +32 +IANPpbzXNU+0VSSY1PKUYQAA + + +1 +devtask-suspend + + +False + + +False + + + +False +IANPpbzXNU+0VSSY1PKUYQAA + + +False +IANPpbzXNU+0VSSY1PKUYQAA + + +False +IANPpbzXNU+0VSSY1PKUYQAA + + + +clMaroon +$00B9FFFF +552 +324 +147 +32 +QOYwBFQ3DEmLUscy+UAQowAA + + +1 +devtask-resume + + +False + + +False + + + +False +QOYwBFQ3DEmLUscy+UAQowAA + + +False +QOYwBFQ3DEmLUscy+UAQowAA + + +False +QOYwBFQ3DEmLUscy+UAQowAA + + + + + +testing-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +lwwdtvTW6EyqvIRscOot6QAA +9 + +clMaroon +48 +48 +185 +273 +System + + +clMaroon +$00B9FFFF +77 +138 +121 +45 +lOyDrRE6cEms6LglvRhNKwAA + + +1 +build + + +False + + +False + + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + +False +lOyDrRE6cEms6LglvRhNKwAA + + + +clMaroon +$00B9FFFF +63 +200 +148 +45 +ucei5JvgaEarsuGuZmgj7QAA + + +1 +build-cross + + +False + + +False + + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + +False +ucei5JvgaEarsuGuZmgj7QAA + + + +clMaroon +$00B9FFFF +77 +262 +121 +45 +ZFe9gOmpTEWMgVssyEcAWAAA + + +1 +build-install + + +False + + +False + + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + +False +ZFe9gOmpTEWMgVssyEcAWAAA + + + +clMaroon +$00B9FFFF +137,182;137,200 +hKV30qElWkWAVhrHK7PJbAAA +ugI2euwM3Ey7T7DNJ++xmgAA +qudITNuevEOUiPdD67icGQAA + +False +1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +1.5707963267949 +30 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-1.5707963267949 +15 +hKV30qElWkWAVhrHK7PJbAAA + + +False +-0.523598775598299 +30 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.523598775598299 +30 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +0.523598775598299 +25 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-0.523598775598299 +25 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-0.785398163397448 +40 +epHead +PfXDwrF2QEKVag/W5+FPYAAA + + +False +0.785398163397448 +40 +epTail +WHhyhUoWo0iDDhj6FaqW/gAA + + +False +-2076 +-1312 +50 +8 +PfXDwrF2QEKVag/W5+FPYAAA + + +False +-2076 +-1312 +50 +8 +WHhyhUoWo0iDDhj6FaqW/gAA + + + +clMaroon +$00B9FFFF +136,244;136,262 +Htop0thy70qsJ36MwSIctgAA +0JMCaRFeCk+HcMqp5TyNyAAA +ugI2euwM3Ey7T7DNJ++xmgAA + +False +1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +1.5707963267949 +30 +Htop0thy70qsJ36MwSIctgAA + + +False +-1.5707963267949 +15 +Htop0thy70qsJ36MwSIctgAA + + +False +-0.523598775598299 +30 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.523598775598299 +30 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +0.523598775598299 +25 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-0.523598775598299 +25 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-0.785398163397448 +40 +epHead +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +0.785398163397448 +40 +epTail +bDyGtYJmuUiVC+pPkc7oHgAA + + +False +-2076 +-1312 +50 +8 +W+X0z/vQIUO+tUzMI7hv5AAA + + +False +-2076 +-1312 +50 +8 +bDyGtYJmuUiVC+pPkc7oHgAA + + + +clMaroon +$00B9FFFF +77 +76 +121 +45 +aUVRiLFY4USAN9h1PY1/vAAA + + +1 +build-debug + + +False + + +False + + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + +False +aUVRiLFY4USAN9h1PY1/vAAA + + + +clMaroon +$00B9FFFF +137,120;137,138 ++nJDFiS7VECOJ4vWaYvszgAA +qudITNuevEOUiPdD67icGQAA +4gxKHPiS4kKv1jznPUiVLAAA + +False +1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +1.5707963267949 +30 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-1.5707963267949 +15 ++nJDFiS7VECOJ4vWaYvszgAA + + +False +-0.523598775598299 +30 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.523598775598299 +30 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +0.523598775598299 +25 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-0.523598775598299 +25 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-0.785398163397448 +40 +epHead +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +0.785398163397448 +40 +epTail +VvsNJNyOO0e86/eHwYM58QAA + + +False +-2068 +-1288 +50 +8 +1eC8b7wYzU6Y7xZwvUG1yQAA + + +False +-2068 +-1288 +50 +8 +VvsNJNyOO0e86/eHwYM58QAA + + + +clMaroon +$00B9FFFF +92 +52 +109 +23 +after-dev-procedure + + + + + +publish-procedure +yePcB6NdXUG1SBs2wQJA7gAA + +dzXgTAQgkku8i81bEq7qFAAA +11 + +clMaroon +58 +42 +196 +353 +System + + +clMaroon +$00B9FFFF +91 +137 +131 +45 +lEIXTXT9L0CS9sEhjP/8NQAA + + +1 +pkg-repo-sync + + +False + + +False + + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + +False +lEIXTXT9L0CS9sEhjP/8NQAA + + + +clMaroon +$00B9FFFF +89 +204 +135 +45 +jmiilGYeBU+1y4Yw2n8CKAAA + + +1 +download-build + + +False + + +False + + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + +False +jmiilGYeBU+1y4Yw2n8CKAAA + + + +clMaroon +$00B9FFFF +85 +271 +142 +45 +RfRTk7cK0061dLioGm8l7wAA + + +1 +loopbak-testing + + +False + + +False + + + +False +RfRTk7cK0061dLioGm8l7wAA + + +False +RfRTk7cK0061dLioGm8l7wAA + + +False +RfRTk7cK0061dLioGm8l7wAA + + + +clMaroon +$00B9FFFF +100 +338 +113 +32 +G18zTBUAj0+SdrsOmksR0QAA + + +1 +publish-task + + +False + + +False + + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + +False +G18zTBUAj0+SdrsOmksR0QAA + + + +clMaroon +$00B9FFFF +156,181;156,204 +t/ADlzXN00KW0NiGhwkclQAA +vblLAfzXRUOgCjpCebaQyAAA +VXT22UgSZE6QUG18w3YrRQAA + +False +1.5707963267949 +15 +t/ADlzXN00KW0NiGhwkclQAA + + +False +1.5707963267949 +30 +t/ADlzXN00KW0NiGhwkclQAA + + +False +-1.5707963267949 +15 +t/ADlzXN00KW0NiGhwkclQAA + + +False +-0.523598775598299 +30 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +0.523598775598299 +30 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +0.523598775598299 +25 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +-0.523598775598299 +25 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +-0.785398163397448 +40 +epHead +LL86l17PZku+YBsr/fUklwAA + + +False +0.785398163397448 +40 +epTail +bvYo1TGY6U2Io35TQ/yATAAA + + +False +-2032 +-1468 +50 +8 +LL86l17PZku+YBsr/fUklwAA + + +False +-2032 +-1468 +50 +8 +bvYo1TGY6U2Io35TQ/yATAAA + + + +clMaroon +$00B9FFFF +156,248;155,271 +5n9wkh0NQUu8BFWyytdErgAA +obfQS5n3b0uAe1Y1fNtQ1gAA +vblLAfzXRUOgCjpCebaQyAAA + +False +1.5707963267949 +15 +5n9wkh0NQUu8BFWyytdErgAA + + +False +1.5707963267949 +30 +5n9wkh0NQUu8BFWyytdErgAA + + +False +-1.5707963267949 +15 +5n9wkh0NQUu8BFWyytdErgAA + + +False +-0.523598775598299 +30 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +0.523598775598299 +30 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +0.523598775598299 +25 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +-0.523598775598299 +25 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +-0.785398163397448 +40 +epHead +P+S209BDDkSnrN4WPl8+WAAA + + +False +0.785398163397448 +40 +epTail +UYbXc0CahESM869EpDq6lwAA + + +False +-2032 +-1468 +50 +8 +P+S209BDDkSnrN4WPl8+WAAA + + +False +-2032 +-1468 +50 +8 +UYbXc0CahESM869EpDq6lwAA + + + +clMaroon +$00B9FFFF +155,315;156,338 +1QbYYnq3ykqiPL0Gv6UkSwAA +M4HlmVZXi0yRAE9UMU0zRgAA +obfQS5n3b0uAe1Y1fNtQ1gAA + +False +1.5707963267949 +15 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +1.5707963267949 +30 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +-1.5707963267949 +15 +1QbYYnq3ykqiPL0Gv6UkSwAA + + +False +-0.523598775598299 +30 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +0.523598775598299 +30 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +0.523598775598299 +25 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +-0.523598775598299 +25 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +-0.785398163397448 +40 +epHead +2J0+TPdjaECdzYN0YQ2guQAA + + +False +0.785398163397448 +40 +epTail +WMjnuHQF3kiQvKAfM+S81wAA + + +False +-2032 +-1468 +50 +8 +2J0+TPdjaECdzYN0YQ2guQAA + + +False +-2032 +-1468 +50 +8 +WMjnuHQF3kiQvKAfM+S81wAA + + + +clMaroon +$00B9FFFF +73 +70 +166 +45 +bjrraLbGKUSY+GYzLNk5RAAA + + +1 +launch-pkg-publish + + +False + + +False + + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + +False +bjrraLbGKUSY+GYzLNk5RAAA + + + +clMaroon +$00B9FFFF +155,114;156,137 +4wmxJ9R9R0eU6Jn8Ho3xFwAA +VXT22UgSZE6QUG18w3YrRQAA +ZCA8lMYtvkK0TOXL+AgswwAA + +False +1.5707963267949 +15 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +1.5707963267949 +30 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +-1.5707963267949 +15 +4wmxJ9R9R0eU6Jn8Ho3xFwAA + + +False +-0.523598775598299 +30 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +0.523598775598299 +30 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +0.523598775598299 +25 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +-0.523598775598299 +25 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +-0.785398163397448 +40 +epHead +7JwpGqJmgku60xKurQDyPwAA + + +False +0.785398163397448 +40 +epTail +L7xnZ29mQEadCI+TRP2QQAAA + + +False +-1876 +-1508 +50 +8 +7JwpGqJmgku60xKurQDyPwAA + + +False +-1876 +-1508 +50 +8 +L7xnZ29mQEadCI+TRP2QQAAA + + + +clMaroon +$00B9FFFF +106 +46 +96 +23 +publish-procedure + + + + + +bug-report-task +yePcB6NdXUG1SBs2wQJA7gAA + +PW8yW9pEYkid5X6nOzwaKwAA +5 + +clMaroon +$00B9FFFF +56 +48 +200 +300 +System + + +clMaroon +$00B9FFFF +88 +52 +115 +23 +bug-report-procedure + + + +clMaroon +$00B9FFFF +108 +96 +101 +32 +bX1Gcdx2ME+p8q+9ZuNdKAAA + + +1 +bug-report + + +False + + +False + + + +False +bX1Gcdx2ME+p8q+9ZuNdKAAA + + +False +bX1Gcdx2ME+p8q+9ZuNdKAAA + + +False +bX1Gcdx2ME+p8q+9ZuNdKAAA + + + +clMaroon +$00B9FFFF +88 +161 +131 +32 +5Yonx0jXgUiliXhd1LHAEgAA + + +1 +bug-re-testing + + +False + + +False + + + +False +5Yonx0jXgUiliXhd1LHAEgAA + + +False +5Yonx0jXgUiliXhd1LHAEgAA + + +False +5Yonx0jXgUiliXhd1LHAEgAA + + + +clMaroon +$00B9FFFF +104 +220 +106 +32 +TiqUoHnaOUevV4hK4Dz2MgAA + + +1 +bug-submit + + +False + + +False + + + +False +TiqUoHnaOUevV4hK4Dz2MgAA + + +False +TiqUoHnaOUevV4hK4Dz2MgAA + + +False +TiqUoHnaOUevV4hK4Dz2MgAA + + + + +197 + +Analysis Model +UMLStandard +analysisModel +yePcB6NdXUG1SBs2wQJA7gAA +23 + +build-pkg +BSZfgYLf+UenyGFbr+pLkAAA +1 +d80+2bpPQEWd7xFbiS1W/QAA +1 + +build-pkg +dDcpfNoxBUqy9oolGaPx0gAA + +li5qOhdL3EywRkIibb85HgAA + + +5 +MNWsgkXOBkGGgVZDdul4wwAA +sbGMwLTYC0iPKxhMH07wNwAA +msQ48rxqPEu61hvT3MeGjAAA +hgxswP4hVESXBm2wFWvVcwAA +D7TjLucAs0GEm5kB3a48nQAA +1 +5gOKGIQCUUm9L2zzA0ihPwAA +3 +gE0dxYNQQk6+JMyejPbD0AAA +1+gcf+vp9UmuwKSWYw/q2AAA +SylI2hFzwEeEyBv836BczAAA + + +build-config +BSZfgYLf+UenyGFbr+pLkAAA +1 +7JSGJYt6DkKIltRHc7ZjjwAA +1 + +build-config +MNfuyG0iBUiHZjmp8cHgZAAA + +Rue74u4PaUuHI0nqxQePdgAA + + +1 +hgxswP4hVESXBm2wFWvVcwAA + + +build-pkglist +BSZfgYLf+UenyGFbr+pLkAAA +1 +0p/90i+HQk+PTlMz5cboYQAA +1 + +build-pkglist +ulDQuuX3NUK3rZULACE1rwAA + +FtQxKj4yUkaT6NimaKKVfQAA + + +2 +5gOKGIQCUUm9L2zzA0ihPwAA +e6psiYw1mUqAWpE0+BvMzwAA +1 +u8pcfLoZm0et+dZoEh63EQAA + + +CCompilerCollection +BSZfgYLf+UenyGFbr+pLkAAA +1 +J1vjbeNnkkCOD1TmM672AwAA +1 + +CCompilerCollection +8GaHfoYho0OH58Fb/r1/wwAA + +mSd/X6+k/EGNlLgYdDkzTQAA + + +1 +msQ48rxqPEu61hvT3MeGjAAA + + +devutils +BSZfgYLf+UenyGFbr+pLkAAA +1 +s24sB0NbR0qJ0UXqzyR5QAAA +1 +MNWsgkXOBkGGgVZDdul4wwAA +1 +wQbKSnCSekyKjTFeI7tFhAAA + + +build-ext-utils +BSZfgYLf+UenyGFbr+pLkAAA +1 +micWrkg2dEqol44gMrgRnwAA +1 +sbGMwLTYC0iPKxhMH07wNwAA + + +soft-repo +BSZfgYLf+UenyGFbr+pLkAAA +1 +1OJ+jtvJzUOTUnGRNLZx9QAA +1 + +soft-repo +nEPUg6e8b0iEP7HhfuJnQgAA + +IxfADsYcqUOzQeMV371fvQAA + + +1 +wObYeAYwXEqWEKmMI+cCBQAA + + +code-mngr +BSZfgYLf+UenyGFbr+pLkAAA +1 +Mp32K0T3yUeiTjZXRy3GmAAA +1 + +code-mngr +fSDUjRTS0EuzKA5KD1YWegAA + +NR89VNkpPUKOxB+nia9hiwAA + + +1 +al7Ey6vM+kaiJQHEFZ17rwAA +1 +D7TjLucAs0GEm5kB3a48nQAA +1 +7tt1GtqhUkiRGXNftPMzmwAA + + +build-res +BSZfgYLf+UenyGFbr+pLkAAA +1 +/FD1CIRw00KUpr3wg3YqqQAA +2 +al7Ey6vM+kaiJQHEFZ17rwAA +e6psiYw1mUqAWpE0+BvMzwAA +3 +vEc8G/U42EKSe8lYsfqw+AAA +9nKgADD4c0K1Ju7SAno9nAAA +OCj2SIVuA0+GWCgP6VtYXwAA + + +BSZfgYLf+UenyGFbr+pLkAAA +ulDQuuX3NUK3rZULACE1rwAA +dDcpfNoxBUqy9oolGaPx0gAA +4 +UoBCufIUMEuVh02PZFeaLQAA +1I+XikHN9kK/t6EfmCSl2AAA +Yhj6u4aCR0a1cYZT4RlFUAAA +/oNB7nuz/EmsI+XHW9mNwgAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +FvqLDu2fxEWj6v1E//JLVAAA +4 +12RF249Lw0G6nu4rpS0PKQAA +TSYZvuWGT063HQhrZXnwswAA +Wh9uDcTiKke8indOdnLx+AAA +dNi0biCobUCHtgHLSB4DowAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +3VktYBg6c0GafkkhrKd5LAAA +4 +zH3LB5Kp+k+RtXF8y3gBJQAA +AFlPvmqXa0WcUJlrCLmd4gAA +93ZyTLwkFUSUCB69LWQQqwAA +LeBR8Xe4KUev5/e3MjUcRQAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +8GaHfoYho0OH58Fb/r1/wwAA +4 +AHnGqbO0/kGTU4QKEsYScwAA +Y7RbLVN23kGR9SWr289rrwAA +2x2sZtHy80usYPz3kI3z1QAA +BK5Y9Y56EkGsokfaRnlDewAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +MNfuyG0iBUiHZjmp8cHgZAAA +4 +8R86nCYMXEGWqEfjdEptdwAA +BaxvJ+mHB0edJuGJJnWXpwAA +swRIhR69xECXY7Hm0VdU1gAA +Msy3y/jcvk6HuMMb9QenZwAA + + +BSZfgYLf+UenyGFbr+pLkAAA +2 + +L1yiPMYx6EyAA2xxRTEU0QAA +dDcpfNoxBUqy9oolGaPx0gAA + + +L1yiPMYx6EyAA2xxRTEU0QAA +fSDUjRTS0EuzKA5KD1YWegAA + + + +BSZfgYLf+UenyGFbr+pLkAAA +4 +FkxkrPmiAkyXlKNWMG0ZKgAA +7qRjaiz8Y02/8IjPJip+RwAA +hyaO0HgmIkahhBHyYzcUvgAA +TfDa35ItK0KUm+1ADO7gLgAA +2 + +R1zBdkBAwk+mm7+XQTKYmwAA +dDcpfNoxBUqy9oolGaPx0gAA +4 +vkWvz4Be7EKnjG09HAI0lwAA +GYmL2i5aQUaxGKAzQuX9egAA +yjKcGdY8ekKPVZWWLqM/6wAA +f5y2gp278kuHvg4nM8S4nQAA + + +R1zBdkBAwk+mm7+XQTKYmwAA +pvhDF96KaEGykg05qmd3jwAA +4 +nMOdDXc1F0SDNw9WnnOG9AAA +VZF+TVC/iEK1We2bIp7d4gAA +UKH5CQTTbE+GpcuqPCsccAAA +TGNi2j7+dEKt9AixnFgTTQAA + + + +BSZfgYLf+UenyGFbr+pLkAAA +4 +WwhFha+1WECbLD243p2h3AAA +6jt28ExI0kyKCW146he6rAAA +6SspI/hB80+l7hPostMZ9gAA +4qL44fMXlUqi569NEIKm/gAA +2 + +SN9GhsPG3EaOZFcQPgCPJQAA +dDcpfNoxBUqy9oolGaPx0gAA +4 +R4xBqApf3EGTaQ3BUUbbgQAA ++4qoi2mJvkutuLRgEKTKvAAA +3eKQsHPkq0C3GhsNVgjTAwAA +wkqwWuTZ7E6Ya9xY2tS+dAAA + + +SN9GhsPG3EaOZFcQPgCPJQAA +nEPUg6e8b0iEP7HhfuJnQgAA +4 +/mEKF2CdXkO+qvCXd5BlyQAA +b4mEYJOuLEWElIBAR+wsTgAA +KokDYCjUO0GHYQRTHw1HmAAA +q/gj0Y/d20yrOBJ5JToeqQAA + + + +BSZfgYLf+UenyGFbr+pLkAAA +fSDUjRTS0EuzKA5KD1YWegAA +pvhDF96KaEGykg05qmd3jwAA + + +BSZfgYLf+UenyGFbr+pLkAAA +ulDQuuX3NUK3rZULACE1rwAA +pvhDF96KaEGykg05qmd3jwAA + + +BSZfgYLf+UenyGFbr+pLkAAA +dDcpfNoxBUqy9oolGaPx0gAA +fSDUjRTS0EuzKA5KD1YWegAA +4 +yxB73q7LmEq5bftoZyqChgAA +l8o/vkzEVEuW8Z0ESj9HlQAA +0q4mfT8180OBC/2k9nwvzQAA +gSGj8mQyA0eW4arWOFjxmgAA + + +BSZfgYLf+UenyGFbr+pLkAAA +4 +2EmKz1gekUeBYNJEqwk5ywAA +kaZVmwnTuk21j+2fm8qGzgAA +0wFWC8ZHbEuWnNks6iXbJQAA +iXf7s60RO0OEUR4JwNRbOwAA +2 + +aKvfewyzgE2DFbpbrUqRcgAA +pvhDF96KaEGykg05qmd3jwAA +4 +D424m/G3KUiG7LYqWvtilAAA +slHTOpURSEicm2werij8XQAA +s539IwA/MEWjk5PR3mNPOwAA +mCCnjuKULEOwMSaiZkDCRAAA + + +aKvfewyzgE2DFbpbrUqRcgAA +FvqLDu2fxEWj6v1E//JLVAAA +4 +amM0V48QtE+LtX1V+NpK4wAA +dR3D81mWLU67Hzigg8FXxwAA +m+pLG91QP02bu5lY6KLSzAAA +f8W0J6x6VkWJOhnZZGnsGAAA + + + +BSZfgYLf+UenyGFbr+pLkAAA +4 +q9EN5ZUrgkW1YBaEUlNSJgAA +i35rwePtn0e2dmudkVnb+wAA +5mvXcya1M0md/uA7y2TQIQAA +yA/VGm7Eu0yzqagLfS1FigAA +2 + +MzbhBShYo0uTBm9zBJ3IJQAA +ulDQuuX3NUK3rZULACE1rwAA +4 +GndO5+L+XEGYZWuYTo8WZwAA +tq9xchL8WEuHonDjf5BVYAAA +Ur81kW6jjk6GTIC91ukrnwAA +Q3b6JPtGzEqX1L0AOqdNsAAA + + +MzbhBShYo0uTBm9zBJ3IJQAA +pvhDF96KaEGykg05qmd3jwAA +4 +HmJC5ge6e0qQIGXY9346rQAA +FAQVL0M1NUm4ZIaW+4XhQgAA +n5u114I+7U6Bpr9OeXawtgAA +z9YPw3YbgEKyQzl2yX31/wAA + + + +pkg-builder +BSZfgYLf+UenyGFbr+pLkAAA +1 +ccqDzWrIbU67QDaF1jCh3gAA +1 + +pkg-builder +T8bTYhwSAkKMom5PJGDBkAAA + +o+rsUkl11kGIPjXPPm66KAAA +22 + +clMaroon +64 +24 +685 +401 +T8bTYhwSAkKMom5PJGDBkAAA + + +pkg-builder + + +False + + +False + + + + +clMaroon +$00B9FFFF +456 +208 +120 +70 +dDcpfNoxBUqy9oolGaPx0gAA + + +build-pkg + + +False + + +False + + + + +clMaroon +$00B9FFFF +316 +208 +120 +70 +MNfuyG0iBUiHZjmp8cHgZAAA + + +build-config + + +False + + +False + + + + +clMaroon +$00B9FFFF +456 +84 +120 +70 +ulDQuuX3NUK3rZULACE1rwAA + + +build-pkglist + + +False + + +False + + + + +clMaroon +$00B9FFFF +316 +332 +120 +70 +8GaHfoYho0OH58Fb/r1/wwAA + + +CCompilerCollection + + +False + + +False + + + + +clMaroon +$00B9FFFF +608 +332 +120 +70 +FvqLDu2fxEWj6v1E//JLVAAA + + +devutils + + +False + + +False + + + + +clMaroon +$00B9FFFF +176 +332 +120 +70 +3VktYBg6c0GafkkhrKd5LAAA + + +build-ext-utils + + +False + + +False + + + + +clMaroon +$00B9FFFF +608 +84 +120 +70 +nEPUg6e8b0iEP7HhfuJnQgAA + + +soft-repo + + +False + + +False + + + + +clMaroon +$00B9FFFF +456 +332 +120 +70 +fSDUjRTS0EuzKA5KD1YWegAA + + +code-mngr + + +False + + +False + + + + +clMaroon +$00B9FFFF +608 +208 +120 +70 +pvhDF96KaEGykg05qmd3jwAA + + +build-res + + +False + + +False + + + + +clMaroon +$00B9FFFF +515,153;515,208 +5gOKGIQCUUm9L2zzA0ihPwAA +d80+2bpPQEWd7xFbiS1W/QAA +0p/90i+HQk+PTlMz5cboYQAA + +False +1.5707963267949 +15 +5gOKGIQCUUm9L2zzA0ihPwAA + + +False +1.5707963267949 +30 +5gOKGIQCUUm9L2zzA0ihPwAA + + +False +-1.5707963267949 +15 +5gOKGIQCUUm9L2zzA0ihPwAA + + + +clMaroon +$00B9FFFF +558,277;625,332 +MNWsgkXOBkGGgVZDdul4wwAA +s24sB0NbR0qJ0UXqzyR5QAAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +MNWsgkXOBkGGgVZDdul4wwAA + + +False +1.5707963267949 +30 +MNWsgkXOBkGGgVZDdul4wwAA + + +False +-1.5707963267949 +15 +MNWsgkXOBkGGgVZDdul4wwAA + + + +clMaroon +$00B9FFFF +456,268;295,339 +sbGMwLTYC0iPKxhMH07wNwAA +micWrkg2dEqol44gMrgRnwAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +sbGMwLTYC0iPKxhMH07wNwAA + + +False +1.5707963267949 +30 +sbGMwLTYC0iPKxhMH07wNwAA + + +False +-1.5707963267949 +15 +sbGMwLTYC0iPKxhMH07wNwAA + + + +clMaroon +$00B9FFFF +475,277;413,332 +msQ48rxqPEu61hvT3MeGjAAA +J1vjbeNnkkCOD1TmM672AwAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +msQ48rxqPEu61hvT3MeGjAAA + + +False +1.5707963267949 +30 +msQ48rxqPEu61hvT3MeGjAAA + + +False +-1.5707963267949 +15 +msQ48rxqPEu61hvT3MeGjAAA + + + +clMaroon +$00B9FFFF +456,242;435,242 +hgxswP4hVESXBm2wFWvVcwAA +7JSGJYt6DkKIltRHc7ZjjwAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +hgxswP4hVESXBm2wFWvVcwAA + + +False +1.5707963267949 +30 +hgxswP4hVESXBm2wFWvVcwAA + + +False +-1.5707963267949 +15 +hgxswP4hVESXBm2wFWvVcwAA + + + +clMaroon +$00B9FFFF +575,242;608,242 +R1zBdkBAwk+mm7+XQTKYmwAA +/FD1CIRw00KUpr3wg3YqqQAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +R1zBdkBAwk+mm7+XQTKYmwAA + + +False +1.5707963267949 +30 +R1zBdkBAwk+mm7+XQTKYmwAA + + +False +-1.5707963267949 +15 +R1zBdkBAwk+mm7+XQTKYmwAA + + +False +-0.523598775598299 +30 +epHead +vEc8G/U42EKSe8lYsfqw+AAA + + +False +0.523598775598299 +30 +epTail +1+gcf+vp9UmuwKSWYw/q2AAA + + +False +0.523598775598299 +25 +epHead +vEc8G/U42EKSe8lYsfqw+AAA + + +False +-0.523598775598299 +25 +epTail +1+gcf+vp9UmuwKSWYw/q2AAA + + +False +-0.785398163397448 +40 +epHead +vEc8G/U42EKSe8lYsfqw+AAA + + +False +0.785398163397448 +40 +epTail +1+gcf+vp9UmuwKSWYw/q2AAA + + +False +-1000 +-1000 +50 +8 +vEc8G/U42EKSe8lYsfqw+AAA + + +False +-1000 +-1000 +50 +8 +1+gcf+vp9UmuwKSWYw/q2AAA + + + +clMaroon +$00B9FFFF +557,208;624,153 +SN9GhsPG3EaOZFcQPgCPJQAA +1OJ+jtvJzUOTUnGRNLZx9QAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +SN9GhsPG3EaOZFcQPgCPJQAA + + +False +1.5707963267949 +30 +SN9GhsPG3EaOZFcQPgCPJQAA + + +False +-1.5707963267949 +15 +SN9GhsPG3EaOZFcQPgCPJQAA + + +False +-0.523598775598299 +30 +epHead +wObYeAYwXEqWEKmMI+cCBQAA + + +False +0.523598775598299 +30 +epTail +SylI2hFzwEeEyBv836BczAAA + + +False +0.523598775598299 +25 +epHead +wObYeAYwXEqWEKmMI+cCBQAA + + +False +-0.523598775598299 +25 +epTail +SylI2hFzwEeEyBv836BczAAA + + +False +-0.785398163397448 +40 +epHead +wObYeAYwXEqWEKmMI+cCBQAA + + +False +0.785398163397448 +40 +epTail +SylI2hFzwEeEyBv836BczAAA + + +False +-1000 +-1000 +50 +8 +wObYeAYwXEqWEKmMI+cCBQAA + + +False +-1000 +-1000 +50 +8 +SylI2hFzwEeEyBv836BczAAA + + + +clMaroon +$00B9FFFF +515,277;515,332 +D7TjLucAs0GEm5kB3a48nQAA +Mp32K0T3yUeiTjZXRy3GmAAA +d80+2bpPQEWd7xFbiS1W/QAA + +False +1.5707963267949 +15 +D7TjLucAs0GEm5kB3a48nQAA + + +False +1.5707963267949 +30 +D7TjLucAs0GEm5kB3a48nQAA + + +False +-1.5707963267949 +15 +D7TjLucAs0GEm5kB3a48nQAA + + + +clMaroon +$00B9FFFF +667,277;667,332 +aKvfewyzgE2DFbpbrUqRcgAA +s24sB0NbR0qJ0UXqzyR5QAAA +/FD1CIRw00KUpr3wg3YqqQAA + +False +1.5707963267949 +15 +aKvfewyzgE2DFbpbrUqRcgAA + + +False +1.5707963267949 +30 +aKvfewyzgE2DFbpbrUqRcgAA + + +False +-1.5707963267949 +15 +aKvfewyzgE2DFbpbrUqRcgAA + + +False +-0.523598775598299 +30 +epHead +wQbKSnCSekyKjTFeI7tFhAAA + + +False +0.523598775598299 +30 +epTail +9nKgADD4c0K1Ju7SAno9nAAA + + +False +0.523598775598299 +25 +epHead +wQbKSnCSekyKjTFeI7tFhAAA + + +False +-0.523598775598299 +25 +epTail +9nKgADD4c0K1Ju7SAno9nAAA + + +False +-0.785398163397448 +40 +epHead +wQbKSnCSekyKjTFeI7tFhAAA + + +False +0.785398163397448 +40 +epTail +9nKgADD4c0K1Ju7SAno9nAAA + + +False +-1000 +-1000 +50 +8 +wQbKSnCSekyKjTFeI7tFhAAA + + +False +-1000 +-1000 +50 +8 +9nKgADD4c0K1Ju7SAno9nAAA + + + +clMaroon +$00B9FFFF +558,153;625,208 +MzbhBShYo0uTBm9zBJ3IJQAA +/FD1CIRw00KUpr3wg3YqqQAA +0p/90i+HQk+PTlMz5cboYQAA + +False +1.5707963267949 +15 +MzbhBShYo0uTBm9zBJ3IJQAA + + +False +1.5707963267949 +30 +MzbhBShYo0uTBm9zBJ3IJQAA + + +False +-1.5707963267949 +15 +MzbhBShYo0uTBm9zBJ3IJQAA + + +False +-0.523598775598299 +30 +epHead +OCj2SIVuA0+GWCgP6VtYXwAA + + +False +0.523598775598299 +30 +epTail +u8pcfLoZm0et+dZoEh63EQAA + + +False +0.523598775598299 +25 +epHead +OCj2SIVuA0+GWCgP6VtYXwAA + + +False +-0.523598775598299 +25 +epTail +u8pcfLoZm0et+dZoEh63EQAA + + +False +-0.785398163397448 +40 +epHead +OCj2SIVuA0+GWCgP6VtYXwAA + + +False +0.785398163397448 +40 +epTail +u8pcfLoZm0et+dZoEh63EQAA + + +False +-1000 +-1000 +50 +8 +OCj2SIVuA0+GWCgP6VtYXwAA + + +False +-1000 +-1000 +50 +8 +u8pcfLoZm0et+dZoEh63EQAA + + + +clMaroon +84 +52 +217 +278 +associate: relationship of using +dependence: running dependence. + +@ build-pkglist: it is used for building + large number of pkgs. +@ build-pkg: it is used for single pkg, + or a software with several pkgs. +@ build-config: config util for build-pkg + and build-pkglist. it like menuconfig + in 'linux-kernel' or 'buildroot'. +@ build-ext-utils, CCompilerCollection + the basical gnu pkgs running for + build-pkg. +@ code-mngr: tools like SVN/git. +@ devutils: programs used in develop. +@ soft-repo: a tool like apt-get. it + manages the src or exe pkg files + for user or developer + + + +clMaroon +316 +68 +131 +133 +@ build-res: extention + of code temlate file, + code format file, + project sample, + system distribution + pkg-list info. + + + + + + + +dev-initial-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +Rq0Cydd7nEKOfOgn8htc8QAA +2 +9OsI3YefmEShu4VA2aYWsgAA +wVShJ+TldkiCQjPWrQHwugAA + + +design-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +05y9pi2UcU6ptxllVr+G/gAA +4 +I2MiL+bJOEWcCQW8PlUaEAAA +IJastPE4CkGI6UtKXQb+xgAA +RueokuJsJ02RY8qTm1ik8wAA +WDInVNo55Uu7BHXfcUQLNgAA + + +develop-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +LdINJygfWEW3vhPOZonupQAA +6 +770F/tljqkKHqvtGDTfVzAAA +gcJyB+Iyk02GIY0VRlqRGgAA +BPf4vCTXTUSPQUWNKaCQDQAA +6XJvWCMrykCACsZlVke/PAAA +6hCImufvAUuT81kGxRsmxgAA +kQl08Rz6jUCQA6Vz31/AmQAA + + +testing-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +0eY6HnBo4kSNrbtAFd/AoQAA +6 +/pztn/xQEUmMs4TaAXsCagAA ++IilmFj9BEyQ3rGjS6FoBwAA +1IsgVb2s8Ui+xnl92d08gQAA +avTqriQFjUueOCz6jCc/IwAA +TumZKVN0d0in5UkpqbuZTAAA +su8oYR2Ky0aSXbd6TlFoXAAA + + +document-procedure +yePcB6NdXUG1SBs2wQJA7gAA +2 +Y9Di27a99UCLuicgXHRPbQAA +tQieUJFUIUWjBNmfDel6vwAA +8 +8MwPX9NZj0SQu64mihvgxAAA +KCe+sJFeFUW7JorDZydAQQAA +IHj45UgS/0izQOpDHKO3GAAA +zzJAA14PKEyZOy48ze8TUQAA +Q2TvPbYi9Umzfpsm3agX8QAA +9Txo32SVmUCTFUkGnzyaoQAA +c1DHaSDPuEOz4QdBj45gwQAA +5AK+S/x8EU+IYfu9OvYF4QAA + + +publish-procedure +yePcB6NdXUG1SBs2wQJA7gAA +4 +T2cKdPg1Bk+hDccckoYQ5QAA +4JaPx8QgwEWT8vCziLxdSQAA +hXLnvpDLz0KIpSPRhb6ECgAA +FqQn7IeHTkizfymgIbEsLAAA +11 +ZJ10cvLftEKNjkYS8UBeogAA +j0eu/Ys1xkyBAac51lq70AAA +ynutmgtgJkyYVyOvECShhgAA +B018yNXvg0ygTAeYfrer4QAA +WZ976OFIREimbDaKoU7o0QAA +6PWLFqBgek+WMYGWr8g3pAAA +Wbq2l1nmWUigv45vNt7DRAAA +b4rYIDwkWUShf2GiOCXYDgAA +KHKx1GHN4Uam3tVmAqbglQAA +hu41jycWSEOI3Ox7jzRK0gAA +cmrnCjXFp0S8tNPvjvqbWgAA + + +analysis-procedure +yePcB6NdXUG1SBs2wQJA7gAA +1 +pkAZPt0EzUO5vbW8/2ISDgAA +4 +OH+C5n4Y3k61fQSZesUVxwAA +6hqoLK2vfEyhVl9t+07/sQAA +npHVEpJLck2XAMV9s8g6VwAA +tXhFQ7TewkWyBpAaKgAS+QAA + + +after-develop-procedure +yePcB6NdXUG1SBs2wQJA7gAA + + +initial-develop-task +yePcB6NdXUG1SBs2wQJA7gAA + + +bugfix-work +yePcB6NdXUG1SBs2wQJA7gAA +12 +6X0FK2w+kUGeRH2fHqoCSwAA +Nej+ugs75UCTuLSNJoL32AAA +JocKzIahAE2Rg/Jush/NNwAA +1H7NZUwSckaq3vFxfgP1PwAA +n/wO/s227keDkWnSaoMPFwAA +sVfJQGL/iEmAQIELtumavgAA +tRC4kQ89GUmsBaAGTfVeoQAA ++K+Sw8lGqEG5WmXZqf+lFQAA +gVBoAJXO/kqra8XiHFVH7QAA +h289pqUixkWiMfkTT2nHFwAA +stlOgsTNBkWvbXZKK9KhjwAA +lXjbu8nHB02J0fx44kZpegAA +1 +Fxyv+zwMo0S0Ncj/Azp5dQAA +3 +HAKtlFj5902XipIJf5JuhQAA +o/0hT+QIWUatedossmtPBQAA +7yl9aNzP9UWJYqcoZ5ct1gAA + + +publish-launch +yePcB6NdXUG1SBs2wQJA7gAA +8 +3rdXqG4KQ0W+d59DtblscAAA +cSRlx/HJsEO3o59EMew3rQAA +vIl2IY+vVkSHONoG0GsxtwAA +rr+TSJZ0ukeIV9ZkTTa+cwAA +H35H/g998EO5+b+My/9TGwAA +dT4il+6/Gk+54ilEECXeewAA +Ne7JwDq7qUGFKV22/VvzWQAA +3NKcWi2ax0OdHq9842Z0nQAA +1 +N6rmhGGOH06+NgfTaWft1gAA +2 +Dwy9nxvM50Cbv0guTPXG+QAA +dIPnH0JAR0m2CEwio1XRKwAA + + +document-work +yePcB6NdXUG1SBs2wQJA7gAA +8 +vza3XuXwdUy+RCEd4a7/AAAA +iLg/87XLFEykCFJGhifOMQAA +UgLZsN12KkGQu5JOL4PUnAAA +TPTibd5Ro02/LQCkwrcM2gAA ++UDQJ377E0yfeyDDN+u8twAA +BGoBs6YePUulGOuXefEg5gAA +lEULUtfhO02wKvtZ95If0QAA +BgV7xtxh2ka6fAVka31AOAAA +1 +7VFRD/OOk0CHQPmyBREE7QAA +2 +r/hRY5C/z0KLE99Zb7wcHwAA +OAiy1ef+XUG7aqN4fnwIDQAA + + +traslation-work +yePcB6NdXUG1SBs2wQJA7gAA +8 +CVNk+aZ2kUS/be+Nv1opngAA +JNaO0ffDoUS+AX7lAxEl+wAA +zcDagyLZgk+64Eb/4CGyoQAA +nNYDjhrV/km6H65r2Oa18AAA +LdVy/adykEu3BEUiOmsYBgAA +umhkgUahRUGia9WqIF9RGwAA +RCJ0RKClMUyQKGB/551t5gAA +/ErrPXm43EePkfQzcWwL2AAA +1 +zYrgxJijVUeKhRuYPCJv9wAA +2 +0G7qZy+/sEqjVd5kqmhK0QAA +oZNlQDVXUEObs3iZw4x9YgAA + + +testing-work +yePcB6NdXUG1SBs2wQJA7gAA +8 +Sl7WaLUfCE+IreEUylmhuQAA +d92ZEkD1AkSE4doXZ/wRyAAA +69x1DUAOn02pkroD/c4e4QAA +LFszJWWWokWXHQFJ76SS4gAA +8LIFapZp5k6ylbwQfcyklgAA +yG5w39tpzUq7mH0dMD3LKQAA +oV8haZAwFUKZLy08zi9zHwAA +xgmQ4XcO80abByGugCvNwwAA +1 +dr0yGiZ9w0ifqTGL7hJMYAAA +2 +IT/R9YctZE+fstolgXNfRwAA +TTMaOnOcrUGQ/DPwfi1ITwAA + + +bug-report-task +yePcB6NdXUG1SBs2wQJA7gAA +1 +OO7ku5gAkUOUNTByzbCZzgAA +4 +fX++8JJ/Wk2XNALtMhEEnAAA +LOhftqHbTkmRcNDOgH9duwAA +SG8bVsROWE+5+iyuVGPkBQAA +51zN/AjS8UKGQuZi3cgptgAA + + +submit-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +mGag8uVpX0+zFhYfpZD08wAA +8ZbWuHTxHE6qhUPxazFa3wAA +GhCmdps1qUimWLPkoyM0vwAA +ErN9mgwzEky4Bc0y6Vf2wAAA +8 +YezoOUqiMEqMfQ47zgiYggAA +stbsvaZCJkG2vJI5d3KxdwAA +1q5yuUkA0kGBWLWrt4cfxwAA +jZEe3B1pgkqg0horzFKWzwAA +v3GPPcr2HE2FA9MsBQRCJAAA +8ERRXx11LUue4tf/9sRJGwAA +lWAMkSVvoUOg4oaaawtIxgAA +gm2xbeKGuUu+OipRQpK+OQAA + + +Package1 +yePcB6NdXUG1SBs2wQJA7gAA + + +end-task +yePcB6NdXUG1SBs2wQJA7gAA +24 +MM23IzSqWEWlGoT6/hNe5AAA +I1hmv0LT3EOVaJS78zs7cQAA +cJmvwIsT2UaVRR9+wm5I7QAA +aMDoNmAIiUSHx8Jkj1gUNwAA +pXNv1QjBU0iuyfVI3ul8fwAA +OmrpHeDuIkue/rNl85AltwAA +SW+RJAtpLUu8SXRqM+Z9fQAA +IFA/Dso7PEWhmUW+jDt0OQAA +kDJ4sMyQokGYpNNs0RQlPQAA +J3jNybR8pESBj+G0z2pHSAAA +zg18MfAqFk2aPTMOsyZ6GAAA +lN99a5fXUUS+1ZSh4ltrsAAA +OUCMrBecwkmcxrWWZfI9yQAA +D/Fzuyfwx0G/w46ih4OFNwAA +A67Iqky3ykit1KxSaoWfuAAA +oPnsNxEY1keJ0GUU+n/wQAAA +/jiNGEbH9EKzxyhBp7dGbAAA +lLOgPchTZkOKOyzQjN/NfwAA +dV+scLw75UesnYGNVK+u7AAA +77l918JxekuvPzyRw9O6PgAA +6fWpQKk33U+G9a3MEcCGcQAA +QTlFZjtkX0WmdfXdYUNK9AAA +sXh7Dh8jSkeZHM9yKyxxIAAA +0ysDVucETUCSJEUjhqnvzwAA +7 +ivchHpb/m0Oy82i37nw/zwAA +0A9khIrxsUqQn1Bnzz7X+QAA +MBHAyH1qPEWL3nIRNBXalAAA +XISyKVl4zUKFIG8yEnSeZwAA +nWK8/Dbe5kGwMfVczyrs6wAA +bDDeA0cjxEy6AaRuuqyRnwAA +NM+MZJjv/UaHiAj8twEHBgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +2IrhFWrgrUmDBuMuEDUAdAAA +nAXhDlKCrUet/Cgh+eR0lwAA +GjSWw/vKMUqzFogJghR7lAAA +VzJuDXLkWkSlIzTauPLeyQAA +2 + +False +ZX2SocfyGUGaYAoZdJTHCQAA +al6ONjrnZ02miWcUt8E4UAAA +4 +R3VYeRnHJ0iHHZgETGnFTgAA +U0G+djCiGUGaAO8rqjy+/gAA +03HqS9DKYkC58TjBT8YhzgAA +eVe8gSC9TUudPXc3TQIQMQAA + + +ZX2SocfyGUGaYAoZdJTHCQAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +R6UA269F+06Dyv6RSUforgAA +PTB5eJ7qf0CMi4IQCpgc+gAA +iufHP5iarUSm4F2TVzv8hwAA +RjEND+40e0K38ow7fT/DnQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +SOi6DqwGsUCFFA6PPLRMHQAA +i4r/qbWY2Ui5Iqlipx7NxAAA +MuAa7SUDD0W4hIqJ2nfEXwAA +AEsb9TCA0EespCceVXOMjwAA +2 + +False +V+JDAD1y1kGhDKjzLQ2kzwAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +uSsEVpBp0k6B0NfDRQxCuQAA +KQxwkKIY0k24QxARVN7AyQAA +zZGyb6RQskaIEQguCpcx3AAA +/rhxyKfqY0exDlY3hzjC+QAA + + +V+JDAD1y1kGhDKjzLQ2kzwAA +F4Ld7UGpQkiQCCnqXOJ06wAA +4 +RZ7cwuzp7UGX4REYDoJ3zAAA +IrtVeVcBk0KMJ2gOAZTJ8wAA +j+ag4q9lk0y7qbcyN+fjvAAA +TfE50q7v6EakPTxRWTq1wQAA + + + +new-feature-dev-launch +yePcB6NdXUG1SBs2wQJA7gAA +8 +D0y3HjNuyEeD8w3pOiVL9gAA +OA5Var/WjE65QkGvQTUeKQAA +9lpKFxkWIk65QvnKqmbbIwAA +iyk6aGgh00eFz52t8uPdRgAA +cgzV1Cjm1E+TvgDTXT4Z/AAA +gOS3u3FsTkaxLks+tNLf3gAA +fpb5Nfhk3UWR8BQO44zXUAAA +ACmDJDLCfEm8xvezwSa4wAAA +1 +VUF2hqp6/UCePhaBLl598gAA +2 +oV0xUwtlkEW3wNVlZTulsQAA +OOVxi4WGDkKWer/0+AwIPgAA + + +initial-dev-launch +yePcB6NdXUG1SBs2wQJA7gAA +8 +65HjSOXEV02PyHHndkIc4wAA +88HbdewmeUmxNVKR4zye2AAA +fJ1Wa6yln0GHO+arSEbX4gAA +cmZP7iJc50WGKoSnWGapIQAA +WZ6Nv0dBuES8PyEoPwv1hAAA +Q5sbq+MJM0m32AXCRIw2ggAA +ApqLEo2bbkyP7ixAkGIEvwAA +1r18Q4ZaWEeRGppfm0yOsAAA +1 +YwY92xK+JEOUOaknXh7XMAAA +2 +BtfJFt8gzkWLxq07KGt8ZQAA +7zDlLto/L02ptrUw9yDPUQAA + + +bug-report +yePcB6NdXUG1SBs2wQJA7gAA +4 +C20w/XrBX0mAaNgTr9yhLQAA +Uupz/901ZE+XIw4g1BAcRQAA ++xOjz2leC0iVpM7EWCrfPgAA +iNAwSjifbkW13w8FPylDPgAA + + +bug-re-testing +yePcB6NdXUG1SBs2wQJA7gAA +4 +buhigGknbES8XNgVLZlKLwAA +FSCr+o5e6U6a7He85XeDDgAA +iBRah/D6MUuSbI9OBTScBgAA +dxQdYgWxA0CgQInUC/IpCAAA + + +bug-submit +yePcB6NdXUG1SBs2wQJA7gAA +4 +mT+dBzveUUq78fBK8tyuCwAA +iC392Q5uY0ejDPkQ6yAuewAA +IjpkADEpeUm7SlOGUS/D1QAA +PxjcBM87dUW6TRg2CMyMtAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +xiYC8A1z2ECFHdLMG3LMpQAA +KWjTdOw10kyLoQy6wAmcdAAA +QJHLrr9nwEyU0kBqcoM+vAAA +UH6aR+zhfky4QpfTspBFqgAA +2 + +False +viIiAZ9C80y4tKd497zwFAAA +lNk1i5gHU02RiCDfZIsLEQAA +4 +44417kl8qECrc5gcDDCbpQAA ++blkZmc2+k2QyQMDY/PulgAA +LqM6XmWs30+GwMbeTmXqLAAA +hlUCIoyR8Eu0oeRLPCA7OwAA + + +viIiAZ9C80y4tKd497zwFAAA +h5aHoI2/GkuAptKzGDmHIwAA +4 +2o6HL83VUke2BWxMmz//2QAA +GWVtFiY2DUydFevhRauukgAA +UYxfjqoJMkS+eFmYuS/arwAA +WCGprCefxUqNxNUpIqPPMQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +LOc/5UF2RE6WxVPI5i3f2AAA +WIs46u9twU2kOrq4ziC4DQAA +4Hd7aaR47UKFuG1AHNHL4gAA +5OXPXPpBikSBHEcEoU6OLAAA +2 + +False +zhltSEBb90+T60/21ERiXQAA +h5aHoI2/GkuAptKzGDmHIwAA +4 +Peo8julEk0izHC02+xQo5AAA +PckVy4hMYEiUhVBRpMtgWAAA +zPtKPggnBEWDvFiH5dvHlAAA +P1qV9LjKr0miol86SsoISQAA + + +zhltSEBb90+T60/21ERiXQAA +NezC/3LDGUub0eLy4M8sOgAA +4 +FZ9qCJzBsUmmyg0wsTFYHAAA +slN9bskvh0KAvUcDNKikWwAA +uBVmFA4po02nFJ6nAyW7zAAA +tHPynh6pDEqcXKeMZBTCoQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +SxST++HSbEq7tRtqP6tp8QAA +Tr1u8sV+FEGZgLye/fDfFgAA +uDEp+Ynce02beNYRQMEjkwAA +M6JWSFfmB0WegWsY6MGqKQAA +2 + +False +IQdvD61jPEq7KzieVIPMnAAA +NezC/3LDGUub0eLy4M8sOgAA +4 +eC5I/hw63EGb2/tIaq7jqwAA +UBQeSX6eNkqkjdRgfgYjpwAA +DTw0yX91k0S4rgVogZtBSwAA +keNdO2E+Zkq6OP5ryQTaYgAA + + +IQdvD61jPEq7KzieVIPMnAAA +LRvECEfPPkOYfW5/8H8P3QAA +4 +YZjAwce8xUGRc9RG6KILwwAA +QhsMDcCiC0SilZYDHxZF/wAA +8559GMWlj0S65ehn1KzhKQAA +VbfvNzosnk+z8oj2qqkGNAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +yavSIuc8BU6mjFGRfwcbigAA +FBG5eKLnokqazjt/gSdntwAA +8CT1gagTgUaGN7D1zXjjlQAA +Z9j4/mmiMEGq/1QyJWrvoQAA +2 + +False +/HuYmDQGHEeXQIQr+1PRoQAA +7jBLX6wjTkmObbw8i4xK0gAA +4 +7toSXj7hI0SGqWJu0Hrb2gAA +lRaNJ55JcE2+aco3LVRPEwAA +ZiC5LNsSUk+FZYOug/J9wwAA +TjdjvmoiXEW8fUj/M9AHjwAA + + +/HuYmDQGHEeXQIQr+1PRoQAA +qG82m0zlPkqvT2acHPihkwAA +4 +gc2dvhJo5U2uwDSD598UNQAA +dbazKDL7nUCBQHm48yiO/QAA +1rATM7KuqE2OQ8OWGFlyfAAA +6/jDHm2AMEOGMeDrl0boxgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +afH0/Nq6IkuRpp+K6scJJAAA +VKh7LpFhYka/yUWbEMRTBAAA + + +afH0/Nq6IkuRpp+K6scJJAAA +7jBLX6wjTkmObbw8i4xK0gAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +QnKEQWAvGUeHGbfSVIcc0gAA +7jBLX6wjTkmObbw8i4xK0gAA + + +QnKEQWAvGUeHGbfSVIcc0gAA +qG82m0zlPkqvT2acHPihkwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +1GhJXuWKL0CokaroBLxGNwAA +I4amOsGISUSsoOo88j4Z0QAA +5W2ul4FezkGUpNSL6TYfWAAA +ABGH7N76VEaYmnB5fB1yygAA +2 + +False +4uPxSnoEgUO3ovjSg4lAfgAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +5VXFG9SFTEqrgZWor68muAAA +mGP/7QyoMUu0V0J6De+h+AAA +LTRz/deb50iZdr6x1kb26QAA +sLPhlXbi9E2/+CFNsXYCIgAA + + +4uPxSnoEgUO3ovjSg4lAfgAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +wEFThTuAvUSViVvuda4kmQAA +zGEal+uubEaO7xLtV68NLwAA +nORCxAZvM0iMiY2y+0SfwwAA +zzBq2YLJw0u2SXPKrg83HAAA + + + +new-demond-action +yePcB6NdXUG1SBs2wQJA7gAA +8 +UE1o5B5rJESipHfZBqKwygAA +yRMu+MWKuEWYQ5ErjYaWiwAA +FpFu4xXxZ0yA+Twh2wpJlgAA +Z3chHk2lFUGnailrPWq6MQAA +7uNpzIMfD0eMWIaeUbLlHQAA +CoDDnYyT8k+e37B6gDfRwwAA +AEWVoilfPk+nAdpLsV0CwQAA +BdS90sxroUOUWQjMZTYdzQAA +1 +MAKnyTiDo06cPkcuyMVz0AAA +1 +8Gn/k11xTkGZ83K2PTY6tgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +TGB7/N63rEO/nWFXWUc5GwAA +qG82m0zlPkqvT2acHPihkwAA + + +TGB7/N63rEO/nWFXWUc5GwAA +VKh7LpFhYka/yUWbEMRTBAAA + + + +bug-report-task- +yePcB6NdXUG1SBs2wQJA7gAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +MuORoP61R0OsaeYLMDCl7gAA +o8F4GnogRkmyoRivq80I8gAA +DVsDsvtAxEuFS9yKd9yFhAAA +oVWauA9x2E2qEglF2ZDgEAAA +2 + +False +wamDBWad0EiNBPiMYvPoYQAA +qG82m0zlPkqvT2acHPihkwAA +4 +FYFKqkHuIE+3NtkMevwh8gAA +F/rcfI71lkaOlDALKRyGvwAA +y/3sLoxurkmF7W8QVQeGFAAA +wNjJO4cpoUG4zyJW10vv4gAA + + +wamDBWad0EiNBPiMYvPoYQAA +VKh7LpFhYka/yUWbEMRTBAAA +4 ++JcnWuOL6Ua0vcKq3AnqPAAA +AbqO/C672kONX5Mi2FbZ2QAA +bvgsB45GAUWn72xi0F8DwAAA +gKpRvq3Wtke/YRFjIPcBjwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +Z1Oi371va0Wir60qC+nM1gAA +f/z1m4NMYEKJnnjr+0UN9AAA +PkI7i9fOlUC/h1Ub3/JHuwAA +N2XZxMgaBkS6wbjtWcXjtwAA +2 + +False +RPaUCtwDgE+7Y3vewD8uWQAA +VKh7LpFhYka/yUWbEMRTBAAA +4 +1JyKB5qSqUGgyixgwqrr4QAA +uUlgSVv9A0O8qqHGPqY/lQAA +smQzJNghMEGh+a5mlwOEDAAA +MfZLmjPihUyj8tck8q+9DwAA + + +RPaUCtwDgE+7Y3vewD8uWQAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +hIEi63PUsUq/5VuNe91rswAA +8/FTvIbKkEOm7haEILRhUAAA +9J5Hn+PxpkG+ZtedOkQ6EgAA +DRdGsJaoRU6bj9Ny8RvVzQAA + + + +testing-estimate +yePcB6NdXUG1SBs2wQJA7gAA +8 +kliHiKyFiEyM4tl1y2PxqQAA +ZK9vBuzwK0+qvHlmi4UQZwAA +4MlemzUG6UupqHiGZMz5rQAA +dctb+/EJlE2GmNIiqKwD3gAA +4hezOO3zxE6T3AtmMrs4MwAA +Atypt726KkmaNnTw7Q3EYQAA +VS+vlz3GQUaLWwxRTkTLygAA +MqUW6X1Ww0GfjJ5qx4G20AAA +1 +GHPM6mLD3kO4lCP2rqtf+QAA +11 +RaGpcXRFFk2Egrs9p45aEwAA +g0TBPf3Nh0KJwiSYVxiPhQAA +z8s7WtExy0+auE7CN08QzQAA +SqEbSyA4zkqxiqZEBvO8kQAA +3NROu9QlyE+nFFHGnsD1eQAA +9Ra0YEGAbk+1k11e5pAURQAA +02hOTKH4qE+Snq2RdNFI/gAA +xf2zcv1RLES2E6ZY//8hdwAA +7PzK5upkUk+dJkyPmUbNewAA +SlWJmvsLTEKb0sz8CslRigAA +n6mfTSaq+k2RnTd3faTkxQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +FoDSEMS2ZkmTsrDtcYgDKAAA +odAX0fSALUCF3JgPgPmtPAAA +8VY2G3NxhEyw2+PmLVn4gAAA +TF+1Rgt/SEWoTFnDpd97sgAA +2 + +False +MEolPOO0IEuLY63mhD0XIAAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +YOFhTIRXZkCRT/20iOiu3wAA +G4JmI6QLpk6kLeS8fGipzwAA +MIqqDpNDaECMiszUTnTiOAAA +3e7dYeGE9Emyh4P37Ui5kwAA + + +MEolPOO0IEuLY63mhD0XIAAA +7jBLX6wjTkmObbw8i4xK0gAA +4 +POKY+tfyxUa+oX7KAX99XAAA +VZ/O9Cx1HUqJrk/DSux2nAAA +facP0dJwe0GdoUHFRqYvJAAA +ahz4Ad8q4EeqFI9A45hoWwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +FcZQ8iR/bkazNlwyyf9ViQAA +Qefe92j2XEq8x5GI1Vq+RQAA + + +FcZQ8iR/bkazNlwyyf9ViQAA +1Q7qLHEF7kKyydsrAZ/k1QAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +koNsJpIFwUmiquwPJJU7AQAA +QOUwkebWf0CryTQBc4Nr4gAA +6LrIq+6OyUKPnK3361v6AgAA +MaWCaOXLrUWJEm/r6uinpwAA +2 + +False +ys0dUMXSfkahAJXAYIjoOQAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +jIZ4geFcHEeuJxmhlB6cOwAA +N7zaxB1EEkOVOC3/HWuclgAA +IruNF2tIIUSk4EWcTfUwagAA +eVpalVUqlEWLl/ivXOcjvAAA + + +ys0dUMXSfkahAJXAYIjoOQAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +tcgXPbWKlkeq5whCkIEqBgAA +VHdO32YS9kaEjGvUPD3IDgAA +1s8vxl+q3kOLUyQ2DB47DQAA +6uw+HNw3AUW+/dCDQKJYgwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +nduyctsSjkWP5vNrczVzqgAA +1Q7qLHEF7kKyydsrAZ/k1QAA + + +nduyctsSjkWP5vNrczVzqgAA +bScKf7cMEkSKjrnDI4WzMgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +bRsNxdqG0k6JLtSqvVC7bQAA +mpfjLZNtmk+r8NuXBwWeiQAA +wB0f0yPBF0CYawBPvVqjIAAA +rHCvnsPGTE+zNZbDHE++awAA +2 + +False +qMuZkyzh+ky3oDxBIC0P/AAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +G4p5D5Ok+Uq50KJ8TFJblAAA +KFXH/VPOPkCDr8uXJAgXNwAA +qRx5UAbiP0m7IxOQxFq5KgAA +COFQHz8FNEypZM5OiCfh2AAA + + +qMuZkyzh+ky3oDxBIC0P/AAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +BrRWzuKLz0KFDeU3c7N6BwAA +uYlzPTT9LUWsJl6NSPSXlAAA +eQQ+fe2JaU+PM4aHo10w3gAA +qnjcyNRRC0OhIBkWjj2kEgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +rLKFRFKvd02r4IddUDKCOgAA +nwYr6bC930GQjManD/dXpgAA +MQLUBjz7Yk+8+xgKnwfHuwAA +EjCwqV9Fq0qAcntkeFJQqQAA +2 + +False +o0d7TUyzXk6c+PfIZT5lEAAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +a1WYHB1SLEy4LG/E/Zeq1QAA +KJHZMYdLG0mG+n1NFdD/nAAA +8OWv29487ky824lt3C0XKQAA +4fMRlY3bWEqFktL7lGOv8AAA + + +o0d7TUyzXk6c+PfIZT5lEAAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +32emQ4jPiEmk7EAvbQyaPAAA +6+55BoAGDkypGs1J57yGjAAA +KGzPZAjPqkCThoyxiqehEAAA +6g/fkENGek+bT0GlNSgHTQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +foJcoD2H3UmHTbmdcC4aiAAA +tckPYfstsE+v/xd6OD3ZLwAA +5bL+GE44EUCV4W74tbFlNAAA +wXbAb1614kC1SzAuIyi06gAA +2 + +False +BY9qrj1RFUm4rNyc3SVDmgAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +BrvWNXoTFkyiHxtJ+bByuwAA +ydPi2iOn4UyXblaa5PWyogAA +hHBJX3EgkUWXL+ReoFbutQAA +gqnIDYyd8kaWfF7fhYX0iQAA + + +BY9qrj1RFUm4rNyc3SVDmgAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +bO11anmKb0CZ+JUIT4eieQAA +MyBUM9gZBkK9MJI0Tz3ElwAA +H5yGIMXi602z+Wqj41vwHAAA +AmAJjiZHHkiInGfBM09YrQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +7maIWTGCx0Khz0Rnm5V+mQAA +s33ESSsZBEKgT9leWTzmVgAA +xFp99wMq2Eenlwr1HkpQkwAA +F7exZAwmtky9CKkUTofWhwAA +2 + +False +YnZl5Nva0UCe5UdReEoIzQAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +U2B6gobzpUKdSm2ZbkiPnwAA +0c5ct3w1jEaxkkGofwHlggAA +vx3NHGReik6tmP0DvwVCBgAA +vbS43s/1bk2pqHw4p/4JKAAA + + +YnZl5Nva0UCe5UdReEoIzQAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +H7w8bsQvJ0y+LG9GNf5K4gAA +S3OhH+qsmk2HPOBItVf4sQAA +Uj6b2BJjjkGuzn6m32vtpgAA +9MvEYJvH40qNBQkRWfP66wAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +Y3uVi8cKqkmudWYJZVT42wAA ++EC0O5eg0UesZPNCaFtddgAA +ZzZVr53oR0CxeUy0pPfUZQAA +7Rx4Hg1l/0K5AReBqHkMygAA +2 + +False +hLW1nXlISEGkjCaKgHd0dAAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +K822YUSdAE6ljgHfvrzwWQAA +2FNSgarAMku9KDUzZhJUqQAA +YSZ34zDGI0yU6QiD97sQBQAA +4npIOhO2wU21BzCFta4prQAA + + +hLW1nXlISEGkjCaKgHd0dAAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +7FxQGTNqQ0mOxCOpm4LnkgAA +rBEgZmTttkWVH9SFriyvuwAA +FHNSMg+PXkSYPfrWFwCmowAA +iq/IxYwimkqAQwc4Wg2m2QAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +YxOd3m1qA027GPH/yUDlNQAA +A9QzROkaZUmnGfbSzFg+OAAA +H8Mu2zo4F0O0v/oOmWITewAA +B5mOx3F5z0CDf5elmW3rKgAA +2 + +False +S8IcyUEQBk2t/QasjWBrEAAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +qxbpICxEGkuUgZ/RQSijVgAA +dStQaLCiWEubUOsDD1KlxgAA +IYegeYzmMU+ufgzi+oE9QAAA +2FUz1jUtw0SHEkc+JHv+lgAA + + +S8IcyUEQBk2t/QasjWBrEAAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +9mQnJERMRkueEmZU7cNaGgAA +gdsA+vvVX0iSWRF/L8fKYgAA +ArH5MMi9REuzagzAPHe4yAAA +T18gFKwuWUm9Jqo8urQlNgAA + + + +new-idea-action +yePcB6NdXUG1SBs2wQJA7gAA +8 +9tFoXvjmTECmCvT8S3sjAwAA +0IUfU0HSS0aMONgZS6fWwAAA +s1jJF/myk06ik/AJ0uNaogAA +cqNVL4+p4EedgBCL68GWNgAA +KLbcUDvcykStsj8g95lfAgAA +ptyiyKssw0CACA+T6S7DKAAA +Dsa4qhDcsUGFmeuJwl066gAA +BNU2drZyikiUUdl0FN6qdgAA +1 +bFIlptiTHUqaYGcZ9Z9BwwAA +1 +FMzzdvZAeUWKXvIN8LFkfwAA + + +end-procedure +yePcB6NdXUG1SBs2wQJA7gAA +4 +70rDX5jwP0iWbeW/wLyyFwAA +0sRGCg9R7UOT/Q1hjztyTwAA +E/Wqyfb0+E6vtMXK4MXoWgAA +g/ZQORCh0EuoipikJ12ePwAA +1 +hxKkcKewvkuhqVgosrEOqAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +0kBRIU7rpEqIjDV+ztOz6gAA +qL8SYOZTakCpt/xFZB9aCgAA +yG8mashwhkePgQ043HCYHwAA +lYTuVyJ0AUWte0DxhMUpsgAA +2 + +False +ucnlPfSho0+nLeC2/imr6wAA +KmQBouG6c0yb16gPnUnBtQAA +4 +nEvyQei+qk2Csenal9KdxwAA +HDFNulUJ00exHzEH3OWJbwAA +7ApMfzp6zEOI/yoWOXSltQAA +I1PKl4azt0ybN/z4NB0yiAAA + + +ucnlPfSho0+nLeC2/imr6wAA +4Ng728cyoEW6niFYPfKpFAAA +4 +4cCFPrNWokirOBfQcx8P4QAA +fwplPBMi6U22/RdD/I8q0gAA +hP0cLMB2eUW8uoBWjtHShwAA +C/WDcp4Qdk64iOKgs1J5nQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +y4dctQaIvUu8HlgoRpHpZgAA +jCo/i8/cQUKUbMTu8A1S4QAA +LxsAdFoKPEi74V/NzCDknQAA +7VnlqWnpQU2b8NCOdjhgjQAA +2 + +False +eim49HTyz0aTq6cSTLKUxQAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +wZlZ3gUfGk+6FmsjGSG06AAA +GOg+Iodw/kShpHfvCXm3pQAA +H7VtE2ZCMEq9RZqsL8TN6AAA +66p9bzxbSE+yPJdyi/eZowAA + + +eim49HTyz0aTq6cSTLKUxQAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +Lk2coXYS3UmufPm/f7gqIQAA +gENhWHX2U0u4FOkgahO1EgAA +/RM1XcCf8EulMAmNr+UW5gAA +iDCzMrQJkUC8t/crY2Y/sgAA + + + +publish-estimate +yePcB6NdXUG1SBs2wQJA7gAA +8 +myJOly92w06UWOgls7OciAAA +xtDPOGEiQEq5zvK05i1ZQQAA +pqMjRmdXxECNy6m3ZCjo/AAA +QMeyBuFWaEeMG/C/SIUDtgAA ++sKzDE+8zkS7xWQbBBTVcwAA +QZbMHiqcWUGAnSlTjF8BKgAA +8TdrUeKG/EatRU4pg0LoXAAA +exXG6JzqIEG/GjzljGMeMQAA +1 +3ExrMzh4BU+qEom+NkgXhAAA +6 +lw2G96qqakq/ubRYW8gRuAAA +9wmTKLpCT0Ga+RcZfnUdYQAA +gijAVu6IkkimRi58YU5afQAA +v1eyd2Q+GU+hNljhcBIlnAAA +BlAGbbIi30aMaBEtftLGIAAA +PlQ+p7G7JUegK51TuNbuLgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +WkOm4xYDUUyoLlIgX+fSBgAA +Qefe92j2XEq8x5GI1Vq+RQAA + + +WkOm4xYDUUyoLlIgX+fSBgAA +YPSGJ8SkH0mAV1HZcqVjOgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +False +LsVJKqXOn02QFoWv9t1wrwAA +Qefe92j2XEq8x5GI1Vq+RQAA + + +LsVJKqXOn02QFoWv9t1wrwAA +Gn5CjkIjQUCxSoecNQk2dQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +4MicNE+yPUqY4NnHd42b0QAA +aWV41fQv60C8uVZ9swUndQAA +hLg0dIG13UemZ7c3etRPIwAA +ivogB1p0xkaHAcK2138VUAAA +2 + +False +Ia4zuWdlXkG9ym+vnOiB3AAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +LinjFC7WWUiQjF/A2MhzxwAA +4EM2InXwRU+hZvMQBTkh6wAA +E3fb6PG62UGgaZ5VtwsoCwAA +ffZLLZvKnE27oy6YUAJd+QAA + + +Ia4zuWdlXkG9ym+vnOiB3AAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +EBMBSXpP40CLBBHRoJmm4gAA +iyW2JSzOGE+k95P7Y+wiTwAA +vTYhXjelzE+L96fmZxH14gAA +9kmFdT3h/Uy/04odtOKUxAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +H9tO76ypL0u/lVd8LEmP5wAA +X3K2/2UkaEW02WfTJWrbrgAA +GFhpB8ALgUuYKZheX9f2mgAA +0tCSzrlst0KRUHBw65XrfwAA +2 + +False +XiWUowb9X0+cmh/jn2Y6nwAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +c0EpKV2ek0Sm3FTSwQseKgAA +n/JsNYmspEOdMSgbu6gP4QAA +Z/uI4gE3B06rvtvxRiGuowAA +5p4U6cdT+0KwWnKqspkhvQAA + + +XiWUowb9X0+cmh/jn2Y6nwAA +bScKf7cMEkSKjrnDI4WzMgAA +4 +xSEHuBVq9kCc94aMdOEZiwAA +uS2FzsJNa0ODv13PbJzLHQAA +A+phxBs/IESWgG/IndRnrwAA +qP7aUdfBakKg0kW7dB2yGAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +I6Sg7V/1pkuC6IMdDFktRwAA ++fBNjJxucEuxc1rgaJ5C4wAA +HAJpIxzai0GYHY8zAPHyFwAA +YrL0dmjJKkWgHEPsiSFnDQAA +2 + +False +MQ6Mry1/cE60C5Ss93uHrAAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +hfnqCjUcYUmSkRQIJeUl9AAA +NqcYZ/50jUCYH/CZ+wThaAAA +a3CORyuYKkmCIGCdk1khMgAA +vvFUIIC/AUSuAPLp7zbRYwAA + + +MQ6Mry1/cE60C5Ss93uHrAAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +MOiTVKU1bUSKSN6NfwTiQQAA +c5QlVkvfYE2er/gkBcROMwAA +sXAVyb+nJEe1AqzSvYP2pwAA +L6UzUatZrkSFAUJrQar0eAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +fQp6Fp6IyUubCElo4r6YrQAA +wIhe3Md/S0GEpDD21j4/aQAA ++7jQmWLFdEGaneK/pLM1oQAA +oSM4Eaw97EKV5kkL+aeKygAA +2 + +False +/Q+8gAvTq0+PLlF0qnEkGwAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +gpCQD7FsKUinVOVQiO8mswAA +tyEovfQXnUSDTkXjBsGHBwAA +6rqFA6S390K8HKObMmG7yAAA +kYqCqYC+v0meOIOSfwEEkwAA + + +/Q+8gAvTq0+PLlF0qnEkGwAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +g4kBZ0sNcUm7OsiYpxpj+AAA +d8A5ZIgIg0eBBfO7VB+bTAAA +wp3JBnhPRkCGTrgmAOSrnAAA +v5OOInR1QkOf6HRPUltjLAAA + + + +code-branch +yePcB6NdXUG1SBs2wQJA7gAA +4 +ycjyLlSj3kqAT4WlwN+ABQAA +h9dpCkD2OUCLU/AA4wY/vAAA +i9qta1y1tEGstQ7toqMoBgAA +CnpOLcx9+0uyUmV6SN6AGQAA +2 +6mwoN9toVUKgNXSs/zpXIQAA +d4BprJk1YUek3SfLLsVZ4QAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +nL0BKKvjfUS8lRhdP5BepgAA +o0h5Ac2oOEWBQeNXkBDFTgAA +xlUi2A4f5UWhPZsOsPvyfAAA +pXFSbkRrxUmU2r9ZufCHsAAA +2 + +False +SCWqm0HM/0qIGrMzbXXlWwAA +LRvECEfPPkOYfW5/8H8P3QAA +4 +UbiZK9KAYkm/FxXs/sJ1PgAA +x7hNOWGjKEa8EiErSQ6qIwAA +PLyM4N1Bw02AUgqA6MXflAAA +dAJyrrajuU+xCq1OAFacWgAA + + +SCWqm0HM/0qIGrMzbXXlWwAA +7jBLX6wjTkmObbw8i4xK0gAA +4 +np1slmkaZUOnSUwDUcogqwAA +rq193iVGokKT1FV+8m0diwAA +gnp1FflDnk60TRVkAGKY1wAA +9V7yrrZe9ka1GpuGHGllYQAA + + + +code-combine +yePcB6NdXUG1SBs2wQJA7gAA +4 +ZIbf0/c06EGBYTz9Fgc3IQAA +K+bc/F2cWUasS1vEHOYxHgAA +qg0GnAowhkGHkTgF7qQnvAAA +/CFC299mxEOJ7Xs7/C1FEQAA +2 +TchuDcMxgU66R77KAyfQSgAA +98m3w3R5mkuexiYTm0X0CQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +sfSiXZ6QikGNN6fySNJjzwAA +s3GM0aNS5E2dj1+MyKZnpgAA +QzhBowV/9kequQU8n5eqLAAA +9EkHHOTcT0G1iuVVh+ZxEwAA +2 + +False +xrdGh677e02q1kDtgtazfQAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +G5F62P80BkyXeMyc2KLF7gAA +7vjmYbJaMEiyrBOSaQbL2gAA +uPUrO0BUi066us5iZo9epgAA +1ktB2ZoUnUikhZa9Lr9FRwAA + + +xrdGh677e02q1kDtgtazfQAA +bdHUhH7aEUuvu1sA17cxzQAA +4 +Dol+tuk8s0WJWWz74S9jHwAA +FmBhRYFbHEOGHHmAOwC/qAAA +0RPa69fXYE+o2DG3dFehZgAA ++k4nMLbv+EK2MFbo5Tv50gAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +BVpvZ9oKmUKBwXRl+EfdAgAA +R943EP40H0200KX45yLxQAAA +boCO6v7bLkO/j4chx/pWQQAA +q7wCw8+kuE6WZysXuaUUbQAA +2 + +False +SQJ2LNwqDUSo9n73ytxYFwAA +bdHUhH7aEUuvu1sA17cxzQAA +4 +YD/flTMSUk6ialXpCYyMJwAA +5kP/FDbDmEm0I8MqCKKXGQAA +dOLpHN/2tk6g4tcwp6B1MgAA +v0o8fbCba0W+mmdhxMt5pAAA + + +SQJ2LNwqDUSo9n73ytxYFwAA +qG82m0zlPkqvT2acHPihkwAA +4 +sIL9vztZWEKDIKiWVikwZAAA +3qvmKXeWXECro5tiBkLh8gAA +sN3xv/nWR0ucEOdnNKKixQAA +mhX1n2TRTU+w+HyxBv00bAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +4nnMMpx0+0i9PSTfNY7csQAA +B+GzpaLzbEi00iZacS4QmAAA +iWz2OzoL2kalmml3xNye0AAA +elLWki7pC0CXxpIof1gy4AAA +2 + +False +pBLToI3BDkSX21nTyuesfQAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +Kma+Vd3S5U6otU4y7JOK0QAA +l2I2tRgZ5kKYTPr6xQkpEQAA +nOnigqRlbEyZ/3XnClAguwAA +HDlSfDj3ZEGQCGXDh6jZQgAA + + +pBLToI3BDkSX21nTyuesfQAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +PEql8kY/BUWWRB6vCttfgwAA +NKGdJEyW50iLnnQKqNPw1gAA +n6ULT067HkKEe73P5cz6jQAA +kpLMNZAgt0CyTvFxn8SOqAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +M9gClhiZZUu0WfRQaPfoVgAA +MSB+eYXhR06R7pNMOlHa6gAA +l9bLzOVoHUW9+zT5nA9uoAAA +Jkn6+PMm3ESP8mxG5mxjnAAA +2 + +False +zLIxpYqFF02jEI1wZKI0SQAA +lCPHtP6cZ0W7Oq4UP4fxpAAA +4 +qfmagCRPAUuFcPIYFphYaAAA +QV+XPkHQD0u0fNLVt4126wAA +cWUNxOoI8UKQ6iotD7Y0LAAA +sF4wph8sVEyqz1PnCDEJFAAA + + +zLIxpYqFF02jEI1wZKI0SQAA +NezC/3LDGUub0eLy4M8sOgAA +4 +9bXySmX5o0+4AL+ewvoWRAAA +Lev/Vk8CvEyEtqUz9OhBtQAA +oIh7bKQALEmVaNDkQps1ZAAA +Csx6RuVTEkCXXiL88dVaOwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +xhtYHO9mUkm8cjhhbG2RJgAA +/jxlDAqQTES6JWGBrBLn3QAA +vbkyhLgWKE+5reC6WVk8ZwAA +90brfcoCEE2yV5vKbRgpLAAA +2 + +False +8JoAmLoX6UCsEUuYOfgFrwAA +H7tysEnUp0+p4o84YYVC8wAA +4 +Yt19qcMiC0GBT+fewwRKTAAA +tZStD9Hh9UCu/SnLwbwrcgAA +Y6Tfa3wjCkaDfJKm1In5ygAA +b6x9zPYut0yPZk6pGKB1dAAA + + +8JoAmLoX6UCsEUuYOfgFrwAA +7jBLX6wjTkmObbw8i4xK0gAA +4 +KmZodHdsaEm4baVb8D2C+AAA +LuqqYjeu6UeDkT/f2wnL6wAA +ucEBO1PfpUS3Y9SIWVHZlAAA +hCqcivFWD02WFq/oWQCa6AAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +WJWDvRBteEWSI3P/KPuhRgAA +HJxA3vmcS0yZPBLyOFbhdwAA ++TMFmG/26E2WuAagodHaVAAA +SHmb6/jKMEecA8SrIWf9pQAA +2 + +False +uQ67KS+1vUmRO9PVPQmAvQAA +KbXj7bLsjku9BsYv/z63VgAA +4 +jJBDxIfObUm02xMmQwwQUgAA +H+MHJME5cEe3/z57Hwb9qQAA +KKa8KDhiT0yywcRZFEhgZAAA +a8JxRIyCpUuktghxCqZYNAAA + + +uQ67KS+1vUmRO9PVPQmAvQAA +qG82m0zlPkqvT2acHPihkwAA +4 +7cE9qkWD5EmPpJLBAp1HeAAA +3LZt9srt6kCwSNKITlWE2gAA +Pd8O31jYK06fx9i+6clIywAA +vKLG2zhoYUyeqFTjhy8ZKwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +yaORZuMMGUad2TRGYETePwAA +cDz8tGhKvUCuPbstPQ9A9wAA +nkW18+CiUkO5hxLJg52lVQAA +WqCbvh1C1E6wcJkqgIjjnAAA +2 + +False +S89azVl1DEerKr0Lg7uYIwAA +VwrgoiK6h0aUxHMgZDKYzgAA +4 +YjUwXNx4x0W+0JP1C8bBsgAA +ZuZvgd8HF0qjC85h6/pWuQAA +H4OnetFRCEWTCj6Fs1hSPQAA +AB35xTBI3kCNRQfQ0zRxlQAA + + +S89azVl1DEerKr0Lg7uYIwAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +8pKXJYWq/U+GC1Gw7P3YogAA +xm8csvGgWUqbrmJTGobYggAA +nGixJcTMQU6pMIRfTHnwOAAA +0W+J5TWQEU279og+ldhIMAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +UBIpllFC2E+GQMCzMBXoywAA +HNZiX6rmcE61AUOe/aikagAA +colrF1SicEuXbQMzolS0cwAA +1JavVcL0tkWP5qL4f2ol1gAA +2 + +False +UmPi888MJEySape3IDytNQAA +fKAlsL5x3U2cAiir26vsAQAA +4 +MBMCXCaE2E6DBqZhj0hI4wAA +Zl68UCRFw0KCZo4LWXEB7AAA +JoVq17ylOEiLiPs23koDdQAA +kV4z6nwflEGtPRWJRbm2MQAA + + +UmPi888MJEySape3IDytNQAA +Gn5CjkIjQUCxSoecNQk2dQAA +4 +3xFIXB43e02oCzXQnJyBIQAA +E81GEhfrO0uBcZ1YwYxrRQAA +6ru8xt186Eu5CJ+CnQcPSAAA +IyNUDKRo80uk1+vWOdd6ZwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +Wy3bqEfYM0KVFZ1Ydr4GSgAA +fEMuc7IoL0+m7gdsXU5KVgAA +GEfO+w8NfUiyxBr4wREzSgAA +O6Ti9cuFB0WVM7vuNLFhlQAA +2 + +False +WED3oZHyO0Sbd335J3t4SwAA +d6r7rOW3akG5lkJDtATmigAA +4 +0ZfC7dfSdU+77n8W+2oFxwAA +q5mo1sXERECknsOga63bQwAA +dvrtx2qjA0yPQapYCJKnKAAA +I2T0Katdr0C5LeWEd7aHxAAA + + +WED3oZHyO0Sbd335J3t4SwAA +lNk1i5gHU02RiCDfZIsLEQAA +4 +LdSvWje1J0CqbOHWDaAgUAAA ++sQGHocwrUmn3ruLRXPZpgAA +O0m/ydhB50iFll0hEFZfZAAA +0mXOeImHsU2RNOJHpNFjXQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +oxEARNr9gkGzwAFVPhHIkAAA +Z1qYhmVIPUW+vEfAv0piWQAA +lOi6KelScUuy5fZD8Ryk7AAA +mhW1I09edUiS8X8MEmfclgAA +2 + +False +OaMYngAfm0WoiHZwhZD+qQAA +dHVXjobujkKGloy7+Ox8DAAA +4 +MC+sWMseaE+MfE3R3FxpyAAA +/KqujkQIjUCqirzj1ToUhwAA +W51m75wQcUSvNIIUfcBISgAA +IZiW0v0hjEOFt9F4QTWCkQAA + + +OaMYngAfm0WoiHZwhZD+qQAA +1Q7qLHEF7kKyydsrAZ/k1QAA +4 +HYqM8w3OGk2uKsT8jnNQxgAA +rhuf+QT8r0a2Yed82O3gfwAA +T6ij/GDNiUaiIC/GNAwBnwAA +1t+/KulozES5sUUdXSN5mQAA + + + +analysis-action +yePcB6NdXUG1SBs2wQJA7gAA +12 +kl2Aed9IkUu2D64AkSCxzAAA +nZg4+VLgWUSW2gCcSLKJUgAA ++zOyC07eKEGprweVTpdPsgAA +465btYj/XE+ZLJj45PLqwAAA +UyNk1RnZTki1ekm3+nWlBAAA +TTECX4f+skmDkGsbwwgAeQAA +zzTQXIDdakKYtCtdopebawAA +pLHkBSDUz0Cppz3RO12bCgAA +3nCDuBMsK0+QzoSS/9JHsgAA +c1JY/FdyT0m6nHqAUmamegAA +U8zURKBko0+T0bhz3P57cQAA +IpedjlXLukO3PmzSFfsqmQAA +1 +esX3j+a1KU2snuv6WgXrzgAA +3 +J3TF5Wds2UivZ3unkZY6DwAA +tbE2qZkS9UCvoD6eysPdBQAA +XqdZXwSYokCQBpZDzAi8kQAA + + +usr-bug-report-action +yePcB6NdXUG1SBs2wQJA7gAA +8 +Ms00Ghmc4EasjVjv6tSf/wAA +2MwFay2zRke8ERv83MTOKAAA +QSgfeZx5+0WBg9urqunRTQAA +IOSjRcFSOEO7mU5Zk7XrigAA +YVBwJiAt70+Y3BJSw5fjFgAA +2U7nVobKJ0Sm/kAUGOjUBgAA +Onj/hiih60uvArokB0ksxAAA +8cwV08rY7U+T5xbsVw709wAA +1 +gIzn+8O0A0ux4mJbpKNkEwAA +1 +YjM/m1UlCki4/Q0e0sh8lgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +18YORdrZe0urPTyJgbu7GgAA +JdmCvIJu+0yQ0OKD/cfItAAA +qenoNaUDpkKy/63NHyGaDAAA +vYG716j5tEq9Zvemg7EhQgAA +2 + +False +IoGZLKJYy0Su7gKold2FugAA +tptycT8EmUmriJ3RFm3kFAAA +4 +BxxfBaPrJUiHrm6OTAQRBwAA +Kx6M1RltWUODr5/zwwlzJQAA +q5WGu8fjgE+IYjKnK69adQAA +V5bL71jyhUiq41ZWtdO1qwAA + + +IoGZLKJYy0Su7gKold2FugAA +lNk1i5gHU02RiCDfZIsLEQAA +4 +sVcHIGR/2k2As0X3aTjfAgAA +UR5K0UNdXESX2cbrq6vB7AAA +QBCzNuSgD0+F9eOztz82WQAA +s0vjM72K0UCC49bt4Zqw5wAA + + + +complete-estimate +yePcB6NdXUG1SBs2wQJA7gAA +8 +tJdxQ2n6kUCuF/faDlNrnwAA +v1fjD//B7EWEisQfMlIvuwAA +A6YZj2skIESvHAbuIH/EhwAA +FO5BKxRG5U+UtKdGhxorgAAA +IY8NFiPGQkOPFFwtq6H0ZgAA +eUPPRkruHEWmhfWv5COWmQAA +gQBdHO5xl0+ZtCjcXYPsMgAA +jb4Zzs6N40GLyjrIR+q5DAAA +1 +xg7XA4XPo0GPzFxhulYO7QAA +5 +x9ru4+yHq0W72sfWmglc7wAA +d4j7kpAS0ka+ba2k0nXpZAAA +A9CObdPLTUSepg+ci/+UBAAA +lrh/7WQ3A0mIOTZd1oStcgAA +YvCannseaUmrs70XgLp5GQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +9/JEphG95UKpIBxwyVir1AAA +PFCuXJitn06zd0wiU+ftPgAA +Ru0bpp+XR0i+xwgb91d4rAAA +ZquN1AsAqEGCf/7mx+YoigAA +2 + +False +KPYLQRKmIkeAc/y+UUmN4QAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +yVa1pUDStk+GRkq5Fgck/gAA +dqzw/nc6y0yihANiteld9QAA +17VOfTLTlE2P6EGY1i/XPAAA +kmmyZzWP1EaOnNihdtkk4gAA + + +KPYLQRKmIkeAc/y+UUmN4QAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +a/A8WMu1lkq1N4TaDnyqKQAA +hazIN21n+Uia5yNe6q5mbAAA +HR0n+oEr/UO3gMljEFbgXAAA +qQ/3gm9gpEy7RDIWnmKIPgAA + + + +using-action +yePcB6NdXUG1SBs2wQJA7gAA +8 +P24tgRFfhEi1BROVlu7OOgAA +B5bvNIvuXUiZk2omQW+YVgAA +BXM5xmQ/8k+h/QvqfjyNugAA +ssG5VODZa0yjefMUfiFFhgAA +HWqJtv0eeke43TE3RflDdwAA +CikF7NStM06PDiNPFZ2tegAA +qJGvjFnjMU+TxEjvvb3XugAA +Qn7B7prY/0m0aCSTH59GxgAA +1 +4d0O1iKcq0+kIW5Bpb2joAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +CzI5Y9qff0CxcFCZVa5S3AAA +wa/TG8q/LEaXge7GDOYfVAAA +AVD95rCx60KHmIaTiLcRxQAA +R5CkGmm/YEOj5eV88Id3jgAA +2 + +False +FAmlbTk0n0ytt/cqGfgskwAA +lNk1i5gHU02RiCDfZIsLEQAA +4 +qr22hFooyEK4i8WQ+1Sv/gAA +mX9Nobkxvke0GOFz+BBEeAAA +I2ZBrN3vf0GLpKzqD0z1xQAA +zkLTUjffTkuMGaMOBrHz4QAA + + +FAmlbTk0n0ytt/cqGfgskwAA +NezC/3LDGUub0eLy4M8sOgAA +4 +NjzjPxTYbUud2VwEUWcxbgAA +Fk1nkB+UR0K2Sge74B4V4AAA +WFadMfk7n0KEmxucDFCN9QAA +Ydctqv+D60OjutAnNGrhDQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +peIWiqIkvE68pZZZB65+ggAA +bWK0sQ56QESfnUfUkTRYBQAA +oiHtLcL9tUi8L4HTr4RE/wAA +Md29uhL4tkaJIuBUA85ObwAA +2 + +False +powHE2AyUUeexm1F5fODTAAA +jic239+6CEiL3vfxIBKzZwAA +4 +tmxcg6bdVUCOl28UigeIkgAA +X7SYFxMcIkW8+laCzdFvEQAA +vqPes6cJxUy3B4CDigTD1QAA +WXAnzpMOckeKZs71K8JyxQAA + + +powHE2AyUUeexm1F5fODTAAA +PjS4k33/kkePfB8R0Qh14AAA +4 +bM7is6uMMk2GIxlWDVB33wAA +GUY//HsXnUa8rBs+YO2UNwAA +q68BWLg+d0+YKa8sJRnjvgAA +C1uWNcOmb0iYVMU4I2QyrwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +jDGR0qRjR0iquyAXdyKoeAAA +KAANTO4nTEqLiFX/UbUTngAA +aCktCRSJrU+V/ga/VLJaVQAA +YPjebXY/pEmUpD8U4gQdbQAA +2 + +False ++gvlzndWo0SXFj3rSfMCdQAA +PjS4k33/kkePfB8R0Qh14AAA +4 +XHfdmC0DpEiEXC06KQbVFAAA +kRnwqGgnDkKM2rlcFxRDjgAA +HGFSjWvB3ECFbAD5eNHg3wAA +xXlOnXywLEaD4BZewBg9fwAA + + ++gvlzndWo0SXFj3rSfMCdQAA +H7tysEnUp0+p4o84YYVC8wAA +4 +57iU7zAT40KuHJV4IshzgwAA +sEugwmegAEyJn4OWNNCuFAAA +IkS9kzpevEGrVfQq1JkVwAAA +nQaETYUhZUWG4b4vq1CUdgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +8 +feLQ0J+Qwk6YWzkfsbZt2AAA +n4sycilAaUOLLNGTDGGONwAA +5Zt6ttadSUyDPVmooIqN+AAA +01hwlutU30ePjiZ3f7ZOEAAA ++cahWdC1I0yBuh9ZIYNbOgAA +cqBAIkf4akeCsyrTqB75yAAA +8bfLKj53rk28PpoVbAn7bAAA +8vfYrGNmA0GHQ9MzSLFQ3wAA +2 + +False +Ycu282Q90kSZPuP8Y2664QAA +7lWVbX8GnUmVFBjNoEJuAAAA +8 +O7P3rpnbkku5vOnBBDQnVQAA +gGlpGjQickOmFCKkVfkdHgAA +kBSGXCJeH0uQsgrL0D2JtwAA +Xz1mHPhFmU6vfUOcO0mRGgAA +GfCS+zY2FESbRxFOH0OuTwAA +RzK1yiO9KkOPeHU250BbAAAA +shE3WVSqfUGtgY/jCHqDLAAA +b+pxabew10WQqsfp/xDwHQAA + + +Ycu282Q90kSZPuP8Y2664QAA +tptycT8EmUmriJ3RFm3kFAAA +8 +z4wjqqzFbk2EDYNc14VWGwAA +dUYMp1/Jl0W4mPnxHjW6BgAA +S0Rejdceg0CCIF2vhtC+VQAA +Kupf+0xddkayQ/uMYBkjBAAA +eiS7Ik+TokSFh8Orh33ZmQAA +aevdSpRoxkqa/QLPsPDfjAAA +MGZmdqR9AEeBTwMHLCQEBwAA +0aTLMjhAfk2t4kFS9CsFygAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +8 +1Z18b9EM2EiZ9nTwB001WwAA +CxY36aptjU2fMKwL8Zw0qQAA +tknMQuvbTkybhfn4FRSI0wAA +z/48QS1QOUGo5Pgu+2qOMQAA +vatANhgzI0CKn2V4OtnZ0AAA +PAtvo9voFUunEJIhEVGP5wAA +uFUs6mdPhUq72o+iu7u12AAA +wlHx5ohFOU+qFb6sgE923AAA +2 + +False +2f8CCoiKYEm2bnh0fSgF5AAA +dqA/cPl8GEmWvU/R693yfAAA +8 +xfGXcs5oEEOMNfSOBHdYzAAA +hA7vOr4tyUuMmRw30XQa7wAA +KL01PYasUUWRDnG4x4RUUQAA +d9S0f7NrSk64dwSQRNob1gAA +L7sujdVry0+QVQEVJqsXugAA +rzawLrQjRkC0QyIo5jR5kgAA +m5XLlIWekU2Jhm12nAqoQAAA +/kOCH4YBBkaQHdYdD6P8RQAA + + +2f8CCoiKYEm2bnh0fSgF5AAA +tptycT8EmUmriJ3RFm3kFAAA +8 +noKBc1mo4UG1t2EMlDRaywAA +VzUlrSyXFk+iDHWgRGS9sAAA +z0AE0yBfeEOfsLbGxesbtQAA +I5ch13+LJUO+XBwczhguKwAA +z+u8fjAoikGnoYtuvyFK1wAA +7SP7byz6dkyTbiK0vGn0+AAA +4n0Ym0BlAk6zJNk3a0YjQQAA +fG/jWZWN3kuLndl9TqLltwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +7lWVbX8GnUmVFBjNoEJuAAAA +4 +LPYa5c2HsU6j2Ex9FqXjTgAA +ZOAvKuNRVkCT0opidy1PXgAA +JcpxIb6QnUWC1QZbALQFzgAA +ZsMOazCICku0dmBxu5BPwwAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +tptycT8EmUmriJ3RFm3kFAAA +4 +fe5rVGDTZkm30nnnVjUnGwAA +dBcQppHqzUKTIuOYZvqCKgAA +a9a5QLTQQky8K7vE9psNmQAA +HJ9i2/A6LECi4DFihuoAjgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +dqA/cPl8GEmWvU/R693yfAAA +4 +PIeD4XTRgkWqIqXdXMW6LAAA +MJTa0XDYzka+Vo9PAyM/7QAA +8lLpkHDS4EW6va0BdDqCVwAA +60NGyDqm4k6FLnYIfNuDGQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +d6r7rOW3akG5lkJDtATmigAA +4 +WoMdHjHT60y/ucZKUI2yRQAA +nUoCWqfBDkq00NytI11QpQAA +r89GsQOYQ0Sxo76W1HZ4MAAA +t+dO3/Yc70u5VbpokZ3MUAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +lCPHtP6cZ0W7Oq4UP4fxpAAA +4 +suq3p4Gr1ECCNNqsL9GNmgAA +EfQ5GYqRlEmcyjiM59X7eAAA +gVWQwwDPJUu3UtwIHnMh5wAA +N1Ajm1F3J0OuhEA3jFy40AAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +3/I8Qb882kyBbKWrLspv1QAA +uZTV3tuKiku+LqqH5r8NAwAA +pE8BwqyV1E6GWivMp/8rmwAA +wI2BFcx4G0uwhSvKTvMuBwAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +K2wne454ikKjxhvQugAQgQAA +KGBLRdO8h0y/fiusODvvawAA +AFPgFpfzXU2Dt7nsMpfDjAAA +Cj8ijFRd6E2Ghc/QEhvpswAA + + +design-task +yePcB6NdXUG1SBs2wQJA7gAA +8 +HIeb6G3eG0y9ALZQK+J4gQAA +D86021vpd0u1rin08iqseQAA +I3aQoW+RVE2X1kWe+WKkXwAA +vNom6Up/KkqoATKRFkBn3AAA +MhTplpcR+UyDiR2znck4tAAA +Zk50HZexL02VLsWY70R4agAA +hqbV8Js5W0uw1DupV1XQqwAA +tAB9iGd8D0+4oE8cVggsrAAA +1 +onJRiZekkkW+HvL7efTCQAAA +1 +L7a4CYmPC0uUj33RRoWiJgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +U//hAdD8QU+M1p1r952pSAAA +4 +wse/k+6Wo0ywK/W3StD9gQAA +v5RmwFwCqkKsqOLo8tsnXwAA +IwreAe0oQEeC0kg1/1uy0AAA +2UaSFudIDkuHDMikZiR2UwAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +PjS4k33/kkePfB8R0Qh14AAA +4 +sAjv9H6fb02YWJbD/tg8iwAA +XdON7SMH3kaqHDs3tzr1MQAA +Ogcrs25sXUGBUDPgjxhOsgAA +a9K3+Pr2UEGcGEzwmgPGSQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +guejFFOf3EeA800C6x9HyQAA +Or2IcXa7pEKjvrKWslJVFQAA +3n65+/c4i0GSW7vB8tbfNAAA +AyLTcrRat0m8EpooVXUxYgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +dHVXjobujkKGloy7+Ox8DAAA +4 +5tiqe3EwmEWE4YAS3g4JywAA +3b5OnzxpJkSC8Au+eBrkCQAA +dZ0qyYWrrEeUup1awqQUQgAA +ICDtZyDxBkmvrnvCjWPUugAA + + +yePcB6NdXUG1SBs2wQJA7gAA +A/9YWnHJBEGH1jC8FI2M9gAA +G18zTBUAj0+SdrsOmksR0QAA +4 +Mv9HX3XjskWl4ZZPrqk1SQAA +KE0SJGBWG0KLgIFbd3i2QwAA +sGtoAbArIk6KT4dMfnI5ZwAA +yuc6pkaW9kKoN2MNyEsy9gAA + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +MFtSG5Zvd0SAELRfJuoHSgAA +MLBX+NGx9kymQ76b9EAKuwAA + + +MFtSG5Zvd0SAELRfJuoHSgAA +A/9YWnHJBEGH1jC8FI2M9gAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +rIGY5vyYw0+5KlohHZ6IOgAA +FkRCE52YAkaM/9oO8q9QFQAA + + +rIGY5vyYw0+5KlohHZ6IOgAA +MLBX+NGx9kymQ76b9EAKuwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +IL0+lwOVJkG2nXuxtPKJ/gAA +lnMIF7NC00m+YQbuUp4sbQAA +K1WW3wVHoUyz9tHvK8VYbAAA +GT2ouTWB5E25hjeZqE9AqQAA +2 + +Iz8n1Vm2AECplTLk/g9l/gAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +FJMQGI9o7EaSAVILMSXz2AAA +2dXNHgoH/UyKDBFzCvKvCQAA +222NKC8A/EK869IU54oTzAAA +dMY9zr/dJUSXGcAwhrDKQgAA + + +Iz8n1Vm2AECplTLk/g9l/gAA +A/9YWnHJBEGH1jC8FI2M9gAA +4 +Pbx/h52lXEGFKUAsD6TuMQAA +luHbToKxx0Cq5pYgxyEghQAA +nvwqDdPeikW9ZHZafgxVjgAA +qxhXSpOcEkeLxhhsnRiBowAA + + + +work-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +PZbcok41dUuxzpJHw+qcCQAA +43iteVy960mk6uiA4go8PgAA +Cf/wmnOCDk2JQYNqAdsrhAAA +1rLyekG6wU+wq4oVZHpEmwAA +4 +vY9LoEpVCEyXKh6+k1PP4AAA +3we00g4TrUSP2RwRD/Zr6AAA +jKTbz3HBukOB4vjFAHBjhwAA +wKnDb+gcSEGIVFdvrqRcMwAA +1 +MEkNsUXvgEqT0nEOCk4PgAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +2 + +GhrYfY9FhkaeOZ1Xi81ILwAA +MLBX+NGx9kymQ76b9EAKuwAA + + +GhrYfY9FhkaeOZ1Xi81ILwAA +oWDHE/AIyEqhL2zTdizC4AAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +oWDHE/AIyEqhL2zTdizC4AAA +akeIYx92HUGIvgZi/7qslgAA +4 +uAXLJOTriES/hdpjvEjnfQAA +dFPWubn5jEyxcLoGfqOBxwAA +RLdr22IYBU64sB29OxwdYAAA +CN2JHBk3CkyvzUC9V9TQSgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +H7tysEnUp0+p4o84YYVC8wAA +4 +erYw8J9LZk+PGvdV0EXI5QAA +4R3Y/IEGzkKI5zf8iF1FIwAA +GZqM0GLxrkCbK74b2fZjVgAA +U0RTzBQOMEaMiFuDOdAiEAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +fKAlsL5x3U2cAiir26vsAQAA +4 +nsTw2ZA9MUyYNIZWkuGSVQAA +7WH+78NmtkO404fHbMbE+wAA +gFyeuj8huka5UWP2sPI8NgAA +RbFtgmQUt0mjDPZw/98xJgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +VwrgoiK6h0aUxHMgZDKYzgAA +4 +T+9SH6frG0y133/kjqaxMQAA +/N3RA5gFwEuotsWov+FmpwAA +0qjH7AqwK0iDS24VpsP+pQAA +P40xQHH9t0adC+QCUjBEgQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +KbXj7bLsjku9BsYv/z63VgAA +4 +sG7PAP0kWk6qe6SGPVoV1gAA +Ncubj6PQLkGMH3816dToeQAA +uzghXnAMTEWnVB9fwZw38QAA +0wWIHrFPP0i7omKIPR8t/AAA + + +yePcB6NdXUG1SBs2wQJA7gAA +Pu4+pL+iiU6lRzDtfLIgJwAA +akeIYx92HUGIvgZi/7qslgAA +4 +XZl6ZYNUfE+xutFWVAYtIgAA +IlwfJtARtEWtIPrnUbJu+gAA +NM5iDpHui0+j/2BV9i6RegAA +w+/2TypeZUyTM0XqlJ7faQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +78O5f65/80OvpHK3AuBEIQAA +akeIYx92HUGIvgZi/7qslgAA +4 +2y2CptpPXEOY6VTEMg6cFwAA +wDtgwkge8Eekbd+5Ba+RbgAA +pdsVCh/+6Uu1HKUTdGtwjAAA +YApY7dvNDkORwuLnh4r20gAA + + +yePcB6NdXUG1SBs2wQJA7gAA +aaiB2ZAB7kOSB9niWMGCrAAA +akeIYx92HUGIvgZi/7qslgAA +4 +S8IrOhFZMUqS53hszSTWTAAA +jlLodtp9HUyGpoRb3+ML8QAA +xt/qLKtHg0u/N7p1pQFM0AAA +UFUtmSkZOUOK8DDY2gqd4wAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +eYAhc/LzL02L/DGmAby1vQAA +mvyb1zRY7U+XMJoOIduwmQAA +QgWJ7oztH0qn8zJe0XTaTQAA +/muOiq+WlUKTjMf6selBcgAA +2 + +False +dQUIyAabUkW3BrzevL6ajQAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +PRlhOyseoEG/msjM8eMfPwAA +DxTUmp3bfkWzQFVWm9RyagAA +V4wre64b5EWdOFIRv9rIwwAA +YLHhiMeh+k2oN/11Bvs+gwAA + + +dQUIyAabUkW3BrzevL6ajQAA +G18zTBUAj0+SdrsOmksR0QAA +4 +N6JFJEMxTkOgdVOofY3b1QAA +mZHrhWLZaU6QhhhCk9KQfgAA +DFuqnRcmjUOC1Geo3//5zAAA +pdSXcQZ3gkKTKkk4UZxQJwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +KU8/JzWES0ezPaDHnQt0ggAA +Vox6i1CeQ0GtcIQfm9YdjQAA +OKiwIRAE6U24IXlip6X1yQAA +XNFIJAoRkU24kFw1qWOJlgAA +2 + +False +b9LJxRkpzEy/d2cpGE3jlAAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +HAz756pKI0OhGP2NtD0LDQAA +HpvaXT7zG0a7spn7t7WsWgAA +uUl6vpxXEEiSMJ+jtBGE8AAA +8fEP7wTYv06+QS91ksrWGQAA + + +b9LJxRkpzEy/d2cpGE3jlAAA +akeIYx92HUGIvgZi/7qslgAA +4 +sWk8jHPVsUye0HAsrU9b8AAA +RIn9UYqCL06+hesNsfMg6AAA +YCdV2KrXnUGdWgpMSmo9swAA +3TSC9ViOMUWuOEW/VpJVpwAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +Z3aP6/bReUG/BiTD9Tel6QAA +xDzDwTIOc0CrvW83L5kNygAA +Dhui633kv0Cs2TIr6anG8wAA +5/pq026ljUSXXG9LFiSJ6QAA +2 + +False +4cv8mepYQESw1qV+1hogLAAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +rQ/5KauNLkeb7A+N18/ZsgAA +AmyHNf9XYkWoZVaiHltK9QAA +Q3r8d1VXUUCiw5jeBuPRBAAA +4CuRclNHSka0VlzQhJNPIgAA + + +4cv8mepYQESw1qV+1hogLAAA +YPSGJ8SkH0mAV1HZcqVjOgAA +4 +38AJre7phEq8uaFiUBhWJAAA +ACkFzy2Ap0ekTd9POpd0yAAA +Yp09FNf+oU6WbgJ3oyb2TgAA +GPiKAl+kUUOMaKtvVoPG8QAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +fTfJa+yF+EWqKclyNZLkWQAA +P1yQkUBYGUiuEKYEWhglEQAA +kVVFAfrEM0OVQG3dDEzrBAAA +S3/s+zksLE+2TteXiSgC+gAA +2 + +False +dle0km/8mEy/njpP8YzaVgAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +4zV/mMXZeki4F4OORYJKqgAA +7BDESY6TMUSiCt8YhffRGwAA +i85LCAkm8UObs6Dbb7SXcQAA +6KJws/bR0kG6QHE3AdAQeAAA + + +dle0km/8mEy/njpP8YzaVgAA +sl9IvUV4W0Kodgc58LjsVgAA +4 +aEQPXEaJV0er8Itg/qCxPgAA +KVRGSFyS00mRDojdelzFBgAA +bvpVPBwdx0u11NBBvQk7wgAA +MiXG1qhsiUeRYJptMcJQkQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +czrJDt7ZN0OLO96UOxknWwAA +gaRl0hEWgkCIBalaDt313AAA +ffTHJI14WEOPsSVHBZAxGAAA +qtCJ3djTpk2qq4PyUnahhgAA +2 + +False +bLyKzfToT0G3pHx4RMAW5wAA +dHVXjobujkKGloy7+Ox8DAAA +4 +KsNAAD4Lr0uKhL8mv0FA/gAA +IiMPfmMo8Ei+L+Qthava8gAA +elNO2l0whk+ACvfb6xpfgAAA +aMXoiUGT3kuTJcZCzOuaaQAA + + +bLyKzfToT0G3pHx4RMAW5wAA +al6ONjrnZ02miWcUt8E4UAAA +4 +6YgRzS7R8kySc95PMlWYmgAA +EDrCt1B2OEG9fFPIfbI4rwAA +mivDYBfKo0CA/Cgxh1MvdAAA +eFcfZIWulEa9jeD5P2DxVgAA + + + +analysis-task +yePcB6NdXUG1SBs2wQJA7gAA +4 +5CbxRWAfz0OazD2BC6LOtgAA +Zt9DS7yc/kaN6Qper163XQAA +m98ZTsriLEiMT+5V1oPIMgAA +DBT1Z0iJuEep77ITNSgtaAAA +1 +b/CTfa0mFUyr1SeIhcoTFwAA +1 +LJwRpPfpFE+v3TCpYFoQmgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +MLBX+NGx9kymQ76b9EAKuwAA +HhCFPxH60EuycMQ2nfXWCQAA +4 +TC+FJGU+7U+XMAe9+osKVwAA +OKZ6FA3aWkmyc5tJxPl2xwAA +a5DpK6h4vUiaRFZby6lkRwAA +IVMQ+hvxhUmfRCtEQI3axwAA + + +yePcB6NdXUG1SBs2wQJA7gAA +u2JHX3nMn0CMyZLWTG2R1QAA +jic239+6CEiL3vfxIBKzZwAA +4 +EMzyT+wgi0SGPNxUTGhQAwAA +MEHedzzYGUKI3aU8wHa5zQAA +LUSg1SkB5Um4VPumlmoLUQAA +fWByKXIJ/UesLRVcVIFYjgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +u2JHX3nMn0CMyZLWTG2R1QAA +hWsqFBqliU2am4OA8VEXDgAA +4 +2StkfbIsv0+Ea31zqPRbPgAA +YwNcx3tMbkyEUBR20ozA5wAA +r6QhCqIxOk+4icWyLlvQbAAA +9fNSdobGT0qiuDpbuYC1mQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +6LFnNLjF4Eu3upg4H/I2PgAA +T3viGZHVdU2KCEMCtGcHywAA +0O24YQVuSUGBLdG6cr61BQAA +MkEs4VIPMEyuULHWFBfzBAAA +2 + +False +63BfEROBLEGGjWv9qa4YPgAA +d6r7rOW3akG5lkJDtATmigAA +4 +BG6uAAQJ3USU48cz1nG1AQAA +qoSb5uU2NUmYdmJrbZRo+wAA +k8caYibEm0qaWqQprAJv7QAA +L1b56qKED0K/OmtE7EMpAAAA + + +63BfEROBLEGGjWv9qa4YPgAA +al6ONjrnZ02miWcUt8E4UAAA +4 +GucH94UjaUuAs/9vQLKSgwAA +iInWxuDATke2XZEx8dB5rgAA +sAbeSljN6ku9YWHiJh2gAQAA +kPEGKDmfB0usxAwTkbzsEQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +6ywkVp/d8EqsgwjREOmd8wAA +/N0SyYdjD0ygX98Jcv8cbgAA +48K09Y/WJ0+YSQsYPdpMHQAA +nzyOD5QmRUizjQrpBcujeQAA +2 + +False +aM8L++tUe0CN4YEwoVH/cwAA +lCPHtP6cZ0W7Oq4UP4fxpAAA +4 +msoq4IUSvUOE3Re5LWjihgAA +AzsLD4INkkuYE+ga3BxkYAAA +VoZuvjQT6kycIZ3NEU+7CgAA +ra2CyZNXr0SxCsxEfDrydwAA + + +aM8L++tUe0CN4YEwoVH/cwAA +al6ONjrnZ02miWcUt8E4UAAA +4 +m3m2vxD9JkmtGEsZc/xJ6wAA +FrqY42jWGkmMMP8junaplgAA +wkOOpfK8jkGMOu0MGTO5MQAA +YlBJtxpA+0+wDN7Ulrf3aQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +QduQ4Ok2AkGuFmC3XIBgnQAA +juA4uUbJ1kCWLaXuVkETfwAA +FUgWHDyDyU+1bkEqG6bRmwAA +gVtrNy5QF0i/P7qC6xnEpgAA +2 + +False ++pKtO8/uIk+Z4sYfrACDGgAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +UQTu+Bo94kmBzf+mjZwZmwAA +wVIJgceIH0exOVKPaP1z6wAA +zZZMTPhd90WH5erQAYdfbgAA +kwiIvmxBBE6w7oKrN7hx8QAA + + ++pKtO8/uIk+Z4sYfrACDGgAA +HhCFPxH60EuycMQ2nfXWCQAA +4 +EDy+dKHUrU+pfpVMqA9DggAA +whwcvMT/5Ey6sH7pSG08CgAA +ffnMNN1sFEaHkgVnY6s0dgAA +LmRYO3VxHE6VFU6W7AhxTQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +2MyNnTzCX0CKIC1Al7qEswAA +p4VmZ8UtKU+WtJ6viCYxLQAA +YGd2QgnwHkC6rD8tQ0CXxAAA +eV4elLi8KUGC37VqeR7CwAAA +2 + +False +nmuSEcLCrEGvKBQ/lU47BwAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +fFlOZcqa+02Fn8I4gTDLZwAA +P41vIBK0Tkue4cv+G7GcAQAA +i0WSg+lbzEWux/SLQGsJTwAA +ci+FC6Q3YEmfkvFbLijaugAA + + +nmuSEcLCrEGvKBQ/lU47BwAA +U//hAdD8QU+M1p1r952pSAAA +4 +RNddAkpBB0GCLMC7EpbPbAAA +SztPCjNLmEOMd98qHlHotgAA ++cZPh9TPzk+f4BvHiPSBDQAA +eT1WGqzvgkCedfY6DwEnjAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +BBhjaKkxRUW65NVVP3xoPAAA +mrNXb/QVrkG6pMijaFWH1AAA +xVC7JLSvakCV/fOil1YTTgAA +cdH8abq6NkqwMOZTM1qowAAA +2 + +False +ByfvBxwbrkGP5+WxTb1ZvQAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +3VNBJgUT1ESbJj6oerBRBwAA +AEIM9ftCKkqu23ENSoylIwAA +cYJMKLARhkqBRBxgr/mmugAA +9Sc4ehY3F02Nnq/1ONnHqwAA + + +ByfvBxwbrkGP5+WxTb1ZvQAA +Qefe92j2XEq8x5GI1Vq+RQAA +4 +NEF5UFpEPEa8LewZkL+pzwAA +Y1wfv+TbeUiBIWyr3XF1oQAA +4dzksrgLRkmn2K4+PzVAAwAA +Q4VfY2mKEEagQ9Sien0oAQAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +Er/IcQJ6aEWnC/jnbAerxwAA +vBSCcR0zEk6heJhRA9+/jgAA +R6sDVbUzmkCOpOqDtgb95QAA +7cSC8fDODkGhE34/Ivo2lgAA +2 + +False +plxmjyQkfUmt2P8uBP0I6AAA +oKO/T5e9P0yxfxSC9DK89wAA +4 +ZW5MBHm/2E+1yLMrcVeXyAAA +NJoq9GUiXEaB6kF2/+oD7AAA +6FsSzIh78kuXWgeKyKOr7wAA +J+7OtBHv/UiHHToH+mQHIwAA + + +plxmjyQkfUmt2P8uBP0I6AAA +PjS4k33/kkePfB8R0Qh14AAA +4 +jGNkdF3HkkKq7jXTrUZsTAAA +Li1yPbg3ikmowJct/XLIJAAA +9gWvY2I19ECJ2JHZyICmaQAA +hthvjK6+IkGurSwM1sO5sgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +9M8k9jVEn0+imHxWtip8zAAA +hW2TBOZ2GkeqyvR1LcoA5wAA +hStsUWIkaUSh3dHCIQDsrwAA +CchPSgqG2UO0y0CWv+CReQAA +2 + +False +PG5XF/RdmEuhi42wm0MztgAA +H7tysEnUp0+p4o84YYVC8wAA +4 +8M//8OjKVUSqYJEdATpcKAAA +xwmxcJfgmEu8jqFLV02ESAAA +NlHV9qheKkGJKyriXEMrswAA +Ol3remHhKU2PUt/ZVbbpJAAA + + +PG5XF/RdmEuhi42wm0MztgAA +al6ONjrnZ02miWcUt8E4UAAA +4 +KBiF4UWhM02naU25CE6x7wAA +0PDjvprOukaGpNXF/LrDOwAA +iL4ldjmKCkaQddS8Us9lfAAA +GbSXYAXuPk2AA2X25+e75QAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +cQ1UjZFa+ESsldzOxc7x3QAA +AtxUfjiFEUydozX3zTxuhwAA +KsGqvKBGZUydfvlFOVBsEgAA +gkMsHVqkvUmf5sTBDQbbsAAA +2 + +False +iEqKHNrjWEaqo2MpcoTeAQAA +fKAlsL5x3U2cAiir26vsAQAA +4 +B5vrno8oG0WHRR8oSnvztAAA +NbPIuO0EIESPkD83Qt/7XgAA +bQXIiy3wuE2GktotZ3qRpwAA +mPVhNLie/0iyIDYp2Gz8qQAA + + +iEqKHNrjWEaqo2MpcoTeAQAA +al6ONjrnZ02miWcUt8E4UAAA +4 ++VnS4mxEAUq9GjK1ZFjNXQAA +yVZBSXDgcUKk6XXGrLlG9AAA +hWLHN4VgR0yLbOmpAcO7dAAA +1yjIF/Qtf0GkiyuhS3lHygAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 ++LqteTvUZE251X37ePI5ZAAA +HhvsYpgiZU60i3Xl73iPAgAA +LQbJiz7F40aHUaMTr1nEzwAA +0LhdsydzF0y5rwKnzrEH3gAA +2 + +False +vqzVjlQpAEeeuOH/0tJhSAAA +VwrgoiK6h0aUxHMgZDKYzgAA +4 +nwZrxb0/aEag3U0cftcxwgAA +ChThwtngvE+E3bcbm5+U0gAA +qKPU767g40WK0aKOE2zsmQAA +DfEPI33WlEmquhQKU5JasAAA + + +vqzVjlQpAEeeuOH/0tJhSAAA +al6ONjrnZ02miWcUt8E4UAAA +4 +Tco0ZKyigkO6i2JgbPbPIQAA +3tmwS2FY1EGofHOFKms2MgAA +53HyKe99JEqda3YnEmrceAAA +E0CDlfpJaEKd9B/hBrb5GAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +9XMJ/3cDAkGuEKCPVj/iLgAA +aNni7X6kCkOBY0PEh7ixuAAA +RSavgDXHsESBKomJM7XxEQAA +q1torB3CA0eIlcbHri8UwwAA +2 + +False +/EsTz8Iu7ECqGh594+MkSQAA +KbXj7bLsjku9BsYv/z63VgAA +4 +J8Ih4QVnQU6I8JCUJASGuAAA +cMDPJmJtrU6c0kZBz/ximAAA +E97u9+CrykCHzJci7EX1KQAA +4wjKRNNezUatUAECs4Om1AAA + + +/EsTz8Iu7ECqGh594+MkSQAA +al6ONjrnZ02miWcUt8E4UAAA +4 +B5R1mtT4dUOs/uV+LEdqJQAA +PMbDtRXQP022rtEQoHIsJAAA +89NTUxBLMEmo6yCmqgDLggAA +FCgtSBb5AUyBOqaQo4qF8wAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +SsN0wbB3DEGugos94Z/JYwAA +ekUUyiGzWUWPspF8MnvCswAA +PR4n1D+cl0e6xcc2Zdy7yQAA +j4JeUkGqLkirbgrhVMRK5gAA +2 + +WE9oOq/kF0adq9jjlgnt+QAA +FkRCE52YAkaM/9oO8q9QFQAA +4 +xNaWyCZ2MESTbdkfExzSxAAA +xYc4/Jkqt0OCuBTuA6733AAA +bPF50ox5zE6HMrPNhutaOwAA +d1IlJObWTEGOk3bLwFcFWwAA + + +WE9oOq/kF0adq9jjlgnt+QAA +MLBX+NGx9kymQ76b9EAKuwAA +4 +gkOedX9Cz06jnDCM9ARFyQAA +EO4KK2YeREWHhpdgBsQtYgAA +zdUjjhIrB0O0sZtN7FwV0QAA +kGh4Q/1e+0GaAxkswm+e4wAA + + + +category +yePcB6NdXUG1SBs2wQJA7gAA +4 +rBTgf3yyy0aS7AIMV4nbCQAA +RqFpqzo6aUWchYkICso+VgAA +kfLWWLVjAUCnHHoYoOY80gAA +pNHW3mFR1EuqKtBZ0lEYtQAA +2 + +False +l+7wPt1sHES9zLE77waRvAAA +tnTkvoZxVkmVjIgd8K6VcwAA +4 +Qtw8TQW17EyiHPP9duIpmgAA +hfcihhN1fEucjFfISu659wAA +rw3GNGbVAkmfSnZ0YJp4IgAA +544/CBy42Uald/FJpfiMLAAA + + +l+7wPt1sHES9zLE77waRvAAA +a7yZcyAyl02YNl0/FQziyQAA +4 +Ga3kGBw73kWCOVxx9Gc3nwAA +kRal9tDw8EeSrCb++k1TFwAA +NA2W+LpMOkmJqV2S9qUWRQAA +K8HheBKFdEmD9vNkhTY8AQAA + + + +classic-app-feature-design +yePcB6NdXUG1SBs2wQJA7gAA +8 +5o0i3tmiW0+wft5WJgf5swAA +bg+NK1sooUqJH1CpV8UXwAAA +xmpQPQJJdk2Ec8ulseJkagAA +Wg9ZznDfo06M9wmoPdl22QAA +01HabwybsEaAlwmb1OptXgAA +2+4IHs6fZkei6MLJQpxRbgAA +SHP5QIYVmUGk+aKxaEEI5QAA +wSIkDkt3JEOnveIWvMvNCgAA +2 +0IK4qX1pZ0mmy0tW1H9wYwAA +fj2tpTa4tk+iVJg+TnTWUwAA + + +design +yePcB6NdXUG1SBs2wQJA7gAA +4 +G8pGxp+7HUOghY85Kx80HQAA +aeHC4Yjoh0ucOGTxKyLb4gAA +atNQRsYI/0mjirZ+8TZzDwAA +7QV7Nl/UIEWUAuEvbQssJQAA +2 + +False +Fcx+CoxfEEarzL288+IirQAA +06qF2g1ff02RsBbBfLLo1gAA +4 +avUyx+z1eE2dyQcfhRb/FQAA +t1H4mK6dSEi22SACXk4y/QAA +1o8CdcWHrEOj+z2wlQOfHgAA +P2p+IwPuckCIxXAN+vu53QAA + + +Fcx+CoxfEEarzL288+IirQAA +tnTkvoZxVkmVjIgd8K6VcwAA +4 +T/SQSHCXrkaTeb3BFxL/2AAA +REy7OWWSmU2pymx4frsGYQAA +dyVmgja1vUWTzr/uWr1FKwAA +q2uSCcTV/EiZ09/S9Q4pDAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +K/N48hEc90isDNHluhXYGgAA +KYwFn2j5vEquoL1ESGlO2wAA +7flh+JkZmUKn3EqRfO+QpQAA +guHoA/ZQVkKDLUmxpDnphQAA +2 + +False +CcwrYONHfkWTOXKrfeQn0wAA +tnTkvoZxVkmVjIgd8K6VcwAA +4 +9CvdUbFDPUK8uydeWfgaogAA ++8SKxD5O7kSdbG3JZelAXAAA +tzPR94GDPUm22smF7UOd4AAA +GzFDAGVvP0mwhHa6Eh0vogAA + + +CcwrYONHfkWTOXKrfeQn0wAA +hi9GvwnwFkKy8F8f44i8mgAA +4 +pjfvTV+rVEG0U2S/tnmpAgAA +tbNgjQq2m0qlWalcRV5NBAAA +IbDFIc73vEGKrItGjul6sgAA +K7ZFSLnY9Um1ZqEWD30hJgAA + + + +end-of-proc +yePcB6NdXUG1SBs2wQJA7gAA +8 +E3qklen4DEiMkHMgk5C+JQAA ++grsi8aXYkOskmRWw+4JbQAA +O8P1m/Sat0OzXVaEJZStyAAA +B+lztxU5Dk+JfaJmkCY8hgAA +7yHMpOEN0EiC2uZBihzZkQAA +aaTGLHBaO0qCxv9DsJ2emwAA +is3BMmH6G0qHp9SnOXbFrgAA +AzVPqKGUmkycVwzbt3F/pAAA +4 +dn0Z1OGNQ0a5XNqkWwGbGQAA +e/jJUmPBsUuFL+zaG4xKZgAA +nveEivVzpUOmQHaQgBzwHgAA +3okeT8etnkmVfryHL+rOcQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +8 +vSDgm3TeekGlZwnl1HP0qQAA +UuSa6Jn+N0+CIZtXQIn1wwAA +ChZbXv/JqUiuzlF1YHAa0wAA +rUH0SgsgXkmIICcw5cm0cQAA +VtQ/BitCuEGKeKkUqNzdygAA +oVIweKrLf0WsLgvbubPwOAAA +XO/MdlBoPE2cxpYHwTFQRQAA +tXz6Gw8dw0OnFyN59BPnagAA +2 + +False +D/6a5FDvaU2giul+pputrgAA +hi9GvwnwFkKy8F8f44i8mgAA +8 +Nxo1uq8xpECF6vxcmPsbFAAA +Da0sgjocFUGwnJOSvCY2AwAA +fq/dHJxaQkGr3OLIoNFWLQAA +X/h+NkqLtkuIanPTvPxGBwAA +cyqa3qRfn06e6wJKn5IUtgAA +GtpB9hj7rUGuVbAd69VliAAA +7nTyRTsvqUOh9Q7S310qiAAA +Bn/qveELaUSDSRPENyFXtQAA + + +D/6a5FDvaU2giul+pputrgAA +2LU3javC70yzEUTHd0L+VAAA +8 +JUivG0vsokWf0vlAAlyUEQAA +ZLfFS2SWZUWHVGawr0+0BAAA +0C+g3w4rhUyU7EJ7+EW+GwAA +tJRgIY9UPEy3iQM1Por1agAA +BovzmAL4U0SxsJj6w3As5QAA +7WwZN4h56kCEBDeESGRrOgAA +wk2NSn8RMkyo/K+wslJ4rAAA +Nk3QEyhBLkSD+lcXBWAvPAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +GtvxPyG8TE+iL/5hGOXsiwAA +BhUfe/tLakq87Pz84FKHJAAA +kcfFmnmlpE+OJF4nbnQIXgAA +7D0owjECbEGH1PeS7URueQAA +2 + +False +YHQtCOYCXU6JlB3IIm7OuQAA +a7yZcyAyl02YNl0/FQziyQAA +4 +68OMF0Yq4UeC8WOgCACF6gAA +6HR180RrWUu7KmqtQtfgSQAA +2Zm4OGI8TE2SLS93SIfd4QAA +QnEeEzHjKEG+xlPNKURJuQAA + + +YHQtCOYCXU6JlB3IIm7OuQAA +2LU3javC70yzEUTHd0L+VAAA +4 +4qJLBp2kokWxpO9Di7YOPgAA +VSIsPEctxkye85otBGzNlwAA +/ueUQo0Vk0GoAM+RDMeoQQAA +sCFp9JtJZE2HAdSOQk2ZEAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +8 +j3aSLqd5SEa5ECOCR/ep0wAA +95FdYrfr4EKlcvEbVN/+iAAA +NI1A1Mr0FEO5JDfRKlpIIgAA +stM3MzH2m0WqCLM6RV2A1AAA +7q+EIWAF6U2OD8EFGBLi9wAA +a6rllJp08UyNoILYO0ZDGAAA +hD1fqlWcMkqNR6XkXsPjxQAA +s4x5AMnuZkKtX1v3sNhviAAA +2 + +False +dOqivJTIIUigVVTdSjV6NQAA +mx6wTw6+KEuGtAr0iRUXJwAA +8 +aIk1FLU7xUujLgOzJuxyegAA +xsUp5xXaYUWmopn1ec8lQAAA +5QolDJ1+Nk2X9gtaLP95XwAA +JKtSAwXDLUi7VfWtN02AowAA +qrvUz8jqHE+P25Oemkxg8wAA +ve0GFgxs1Uim80BKzlf9twAA +DKxketRXtkSQFr75Q4Z4GQAA +8jhErecvD0OxjDb3sCDoIgAA + + +dOqivJTIIUigVVTdSjV6NQAA +06qF2g1ff02RsBbBfLLo1gAA +8 +IGTIPt4gvkCsiV1hazMeOQAA +piV76KL9i0GMCE3XnUA4cAAA +sUG4Z0dUp0qEP27TiylFbQAA +eERixS6x7E6JZhK21xo2SAAA +Yj3QEHtzQECnhXJ5tpcaXgAA +il8rhSJNa0ilvvEw0QPDaQAA +BlLvd/e2kECt1LVo/KlkKwAA +mMzSrrz0d0WRzJdhssK0GAAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +AHgAz59sakycT1uGC/0bfwAA +odaUjQ23cEiputvcMBH4AQAA +fvduAOJN70+xe9+pglMJ9wAA ++1YcNllAmk6OB4X0037I9gAA +2 + +False +R5itKCcXY0KrRhRkbaji9QAA +06qF2g1ff02RsBbBfLLo1gAA +4 +jKZOYFpKDUeO6/tqwC6CcQAA +Cs456ZFZYke1J0SLFErp1wAA +7XwWma90TkmQzHEWZQqbdwAA +CqOBqA+JoU64NEGEN0fnlAAA + + +R5itKCcXY0KrRhRkbaji9QAA +h9lhv0QFq0aFwcWza3gsDAAA +4 +M0em+z0uiUact4Er3oUlOgAA +qWKZlZcTOEqt5EEXdp47CgAA +1JiqckmNXEu/JcX8iqNdJQAA +s+TUNMEkxU6hpOHfr+xi3QAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +WdsaDYIpME64TRUARPIYrQAA +mSYvghXBSkOhJN/xEfnV6AAA +QXyXsP+QRECfQcb39mIDxAAA +wFfHFGnoYkW1fv8AI/OGKgAA +2 + +False +wGKQiVXBLE+NlgisexkoeQAA +EjjnPhUmf02yFIvhJmdcmQAA +4 ++NoLioROWEeiPARKLDCN+wAA +MgAK1ZprykWyZ45LfEngngAA +7AmLpGOIG0q2LpsIwbAZyAAA ++D5SS2J5lUe0MSP5r7QCiwAA + + +wGKQiVXBLE+NlgisexkoeQAA +2LU3javC70yzEUTHd0L+VAAA +4 +f7cmTBFk2k6O75ckd9RThQAA +h8bY73mMGkq2+mPLeSOO4wAA +tI3cxhqUJkiKlMV+h2NW5QAA +/8MdOGkuSEWSuGAgqmCzGgAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +T3KM5U5FfUW8PxhJPPuyigAA +tWc4YW7wtUGAp5aruL/I7QAA +m2kf1oaXGkWbvTjm5TdDaAAA +Xtd1Qzb5YU2uJZme3z6wGAAA +2 + +False ++UTsgf65KEqv4PlEE9eDUwAA +a7yZcyAyl02YNl0/FQziyQAA +4 +joymL8ZZbUqjMF0s780rMwAA +/F1gzg1W0kKrNTDaQmWTYQAA +VTqukkqeVUylcOpnpkEHQgAA +LpNQOYpfjEG0ooVcjm64HQAA + + ++UTsgf65KEqv4PlEE9eDUwAA +2LU3javC70yzEUTHd0L+VAAA +4 +eBaXXjEElkukIyXiy/0ZKgAA +yGuyBWc/aE6ay96LpDGPOwAA +w3KO/MdFwkOk9qFrN50QxwAA +rcCpKYnITkSa9mAoJwIt+QAA + + + +yePcB6NdXUG1SBs2wQJA7gAA +4 +/SU70L2+/kCgh4tccE8AlAAA +tW5oMi+hK0aKpVXAKk5pRQAA +evc9OlS+Q02RyLpZ2KuqHAAA +nz4hbLSsQ0aC1XdnL+txVAAA +2 + +False ++9JbOq56nEOxYV/d1LZDewAA +wftqTlAvI0+cR9j69saRNQAA +4 +DvuPdJvP1EOfO81SilNMjQAA +br24YirwnkCsqqM3UtDiagAA +pP4Dw1fLxkm89ACfwe+1AwAA +jRMN1O03OE2EHqYSsdH2iwAA + + ++9JbOq56nEOxYV/d1LZDewAA +CEEcWQKt0kyX8zYOPZHrrwAA +4 +n4Qc7oeqgEGYIFIFAcS4uwAA +QUIFaHOTn0SID9Z46hN6TgAA +xAYuGZ2uKkaeI6xytgOsHQAA ++c6IMYCavUqfuYHWQqc6FgAA + + + +build-release +yePcB6NdXUG1SBs2wQJA7gAA +4 +Nhw+/fC1PEqexkd9g6PRNAAA +1MBpl2U6kU6AmWlKLuXn4QAA +pKHdEjIH+EaFXNFkUKpfcwAA +pVQbZ9c7bk+Oj+AcUIZTXAAA + + +build-setting +yePcB6NdXUG1SBs2wQJA7gAA +4 +KgE9RNT/H0aP4n6J87yd9AAA +V5+Gkxij5EW5NvEk4rh0yAAA +h/1wMMjJ7UuM2v62fSwPtQAA +KGyDEQjD3kuxlE3tRbdr5wAA + + +build-test +yePcB6NdXUG1SBs2wQJA7gAA +4 +Q5eduobk+Ee7nqLYKM6vkQAA +IOMtrLSyokmXJCrkY3rdQQAA +OP3VDE2bbUmsXcDgKnpnmwAA +5mRURqL/uk65wFor/lLeWQAA + + +build-config +yePcB6NdXUG1SBs2wQJA7gAA +4 +ibDVpOZx4Ueg9BCC+LICQAAA +xj5ZaIEVVEqPmaDAbqYDPwAA +AJ/NRT+HWUSlUU33vHno/wAA +WR8SSiqzn02uwGDTnfyTDgAA + + +build-instpkg +yePcB6NdXUG1SBs2wQJA7gAA +4 +86ig+o1VVkSdK6MXWhCihAAA +3lIrsBUHHUuAFyjoDf6BuwAA +LxHyMWLbrEq8O/0RjTEeDgAA +p3hc86c82UuA0zJrsIp91wAA + + +build-srcpkg +yePcB6NdXUG1SBs2wQJA7gAA +4 +SyUaJbpLk0CJS89/ARTO3gAA +5yukc9FuSU+AOrTKyT6CBwAA +dr53vZbsS0uNDE/UidFILQAA +MnQBf8DJSUCsNT1ZuMRuygAA +1 +5aKY/x+ZoUO6ajG8h3B7egAA + + +build-doc +yePcB6NdXUG1SBs2wQJA7gAA +4 +ubWV632pVEqnMYi4Kn9Z/gAA +8wKAvEGDKUKPw5yLtvQ5sAAA +GVa+J23T/kuxo6R4zrQuxwAA +RvptTm81+Ea4K3qJQxJyKQAA +4 +NoXKQs2xtE6fioUtJ2BwDAAA +foV7YkoDo0iOCph37xX+aQAA +whoRvUDIx064d1Yagdz8BAAA +cZpclHoUiU6EG/tEiwqgBwAA + + +build-webpages +yePcB6NdXUG1SBs2wQJA7gAA +4 +0xwfnvBEIUSr5fFwVHR4IgAA +ULJk0RMLEU6MBJsHAki9KQAA +gpwH5PyrFEuyMmMPpNiUHAAA +g49K2TymSEqszKMdNJ+SGQAA + + +build-webupdate +yePcB6NdXUG1SBs2wQJA7gAA +4 +G7nb1MoOKUyi4pt7Myq5RgAA +iclXpclQ30uvgprdEmtaZAAA +dGDo9JekN0Obv7CRwdRYFwAA +qLzIbV1hb0yEKputxg08YwAA + + +build-publish +yePcB6NdXUG1SBs2wQJA7gAA +4 +8Au/rWv7yEaf3QKL11B8GQAA +68aLRITnZU2G4Eb41tP+ZAAA +VqrLyXt0VUyBFN6cNMm5UQAA +4wvBIMYFbk6rD1L2XDYTJwAA + + +devtask-get +yePcB6NdXUG1SBs2wQJA7gAA +4 +g8kFgeS1YU2u55ytqJ8J5wAA +n5GMAujIC0OR9Vl+aOM0DgAA +SMNmjvrQo0yOjy8HKGhLuwAA +X7j2yR2h10qcuhPmIuCuogAA + + +build-delpkg +yePcB6NdXUG1SBs2wQJA7gAA +4 ++95L/KxF9Emg/YoDxej+GgAA +n8YRWj2sxkSS4LG6yi7N1AAA +wcEHdo81LEKELRtnQfI1jwAA +v12ixnZJDk2mCtOBdBC2fgAA + + +build-clean +yePcB6NdXUG1SBs2wQJA7gAA +4 +NNU06eL8WUelkdSYDrt9VgAA +G9o+v6AtvU6kA/jA+58UpwAA +Kqksaag4/E26GdvNv4ObvgAA +NeabsFvu+EmAMyHV7wnLXgAA + + +build-disclean +yePcB6NdXUG1SBs2wQJA7gAA +4 +1DX1eoXYK06KO93fevd0AAAA +VPtx0GxaQ0q0hlZsUM7ubQAA +cg0MEb6wak6NB2qjcXLODAAA +ndODf4KmE0ueYa/Bt/gBiAAA + + +build-addpkg +yePcB6NdXUG1SBs2wQJA7gAA +4 +1IS4wXO8Lka4fASGevw3QQAA +vth7ZczFAk2wX1FN9wnNVgAA +wE4uF76kQUqcej5yf2ksXgAA +RJuQo+6TqEyzV8pe9isV6QAA + + +build-dest +yePcB6NdXUG1SBs2wQJA7gAA +4 +WNrDY4DDeEimX/kqwJi5fwAA +S/97DLzm80+qzlK/+oeK2wAA +4rgXzFxMIUiNY9UTbBK/lQAA +I4Vyao38HUGq+TQJd1+c+AAA +1 +141jpsdb4EK0UYCsLQiPoAAA + + +build-all +yePcB6NdXUG1SBs2wQJA7gAA +4 +MI/PxlyihU2FsQW3zP5OjwAA +o3gzFX7g6UCYayXIut70+gAA +PBIKgsxE1ECwVVIZT3chjwAA +EDeNvyaFtEK65J+t/zf/jwAA +1 +VzL/5LAnlkGJyIYcJauhgQAA + + +build-help +yePcB6NdXUG1SBs2wQJA7gAA +4 +DJn6rOxBzE2vbp33PyP9CwAA +hhBSOBlnI0y2/ngh39IPQgAA +fUSBduwBmEOkvhytSseIEwAA +QtgBBZFr9E+flyOhYuGP0wAA + + +build-init +yePcB6NdXUG1SBs2wQJA7gAA +4 +nsIhhXvR0EmKZb+C4RIw+gAA +33WdDg3hekO9MGAu9I/OggAA ++sIb/p8cu06pisZSeacxxQAA +ZQvZ4r5thkeRNqATfFsgEQAA + + +build-list +yePcB6NdXUG1SBs2wQJA7gAA +4 +4jQG7ysPN0i9UTCuqxzqQwAA +o7Iz6LoIyUuOa2j4yiUjQgAA +1m9JAzGtuky0XELGdFZwEgAA +BIzv+B70RE+7j3BxGyo6agAA + + +build-listclear +yePcB6NdXUG1SBs2wQJA7gAA +4 +GXBQTHMjoUuEJnPWiLproAAA +G54ri+nIqEeBnL/WgRAEjgAA +zoRgSFYuu06+3G1NE19hQgAA +R9xuAinrjEaJYs5hX7Hd8gAA + + +build-incv1 +yePcB6NdXUG1SBs2wQJA7gAA +4 +cUSRZvQHqUeRV8XdK0sPZgAA +QFRn7DuAa0WFh/TSHE9pEQAA +/6h8Z+xCuU+x09rmWt7sWQAA +5wSFkzDFEUy40AoAN2Vl9AAA + + +build-incv2 +yePcB6NdXUG1SBs2wQJA7gAA +4 ++yTJcUwUCE6KvoTHayAeWwAA +Y/og7FuRBEeiWPJxMOK6QAAA +YoZ8e+RJSUGQ8Jy76LKsTAAA +yCBvijjV6Eug+KTvDVvPVwAA + + +build-incv3 +yePcB6NdXUG1SBs2wQJA7gAA +4 +989szjonTUGFDKWXYDXvlAAA +M7/MjSbtCkC+e3VIC8+ujgAA +f3DxeAB8T0O4/zemRAGCZwAA +KcoXVTctd0Kzh/ZZ6ZUduQAA + + +build-scan +yePcB6NdXUG1SBs2wQJA7gAA +4 +Ukzfl3YKDkq2dLw97hIehgAA +UGAdILovVk2VfXMjdQfmngAA +l8yJ5SD2zkaDo6vbL0lZkwAA +fCUz/phpHkSZM57TGX21MAAA + + +build-addmodule +yePcB6NdXUG1SBs2wQJA7gAA +4 +gCgDqgNriUq7I1R8qPnFBQAA +gwczB8JGi0C6Q7rE7NYc2AAA +X7Re0gqUFkCsB4/45zMrzQAA +ZnERyedzLUOq11/ausEnaAAA + + +build-delmodule +yePcB6NdXUG1SBs2wQJA7gAA +4 +7laRbv2bn0a/Qo4DtBVu+QAA +K/a6AG3trU6a2/tjNSSq0AAA +Jwvv++EuBUOqf4uMQj9ZhgAA +D8P1hS088kCRuUA/WE8tnwAA + + +build-addfile +yePcB6NdXUG1SBs2wQJA7gAA +4 +DL8bNOkiMkOOtX/ZQrfbPwAA +lfl/rS1Muki5wZWdX3uywgAA +zPrSGLRJL0q0eyktVKpXhwAA +cHS4LWSNPk6n4sS+O8NHTQAA + + +build-delfile +yePcB6NdXUG1SBs2wQJA7gAA +4 +IR5GEe/l2Uun9Z5UBb3KLgAA +1Y/tqm9sEEqT5RoNlLLrvAAA +vkxeTgyf2kmwAqPYJDJFSwAA +sUbeQmgxFkicFTfy/bkisgAA + + +build-pkgrename +yePcB6NdXUG1SBs2wQJA7gAA +4 +jO9Q8YauAUSCDkk3TCiUdAAA +v1cF4eBE0UC40o3wg8EXQwAA +bc6o86qZW0+ndt+gNyJsmQAA +jZbnUePrtEqYByAFEyVAEAAA + + +build-default +yePcB6NdXUG1SBs2wQJA7gAA +4 +vRIyYxT/6E++zZIpI/lsfAAA +y8BKGBW+j0urGxq4Dp5YiQAA +Zz4eGUONVE2R6j+enLa/PwAA +NWAkqJ4gcUm7ooWfVqqslgAA + + +build-srcbak +yePcB6NdXUG1SBs2wQJA7gAA +4 +ZchwXmhqu0+fFziLG5ZraQAA +VfAgauPJOkGe6v9r9KsWlAAA +p5Fd2taAo0abVRNmpfOLIAAA +xA6dZtEOE0uBybO7eb44VwAA + + +build-listpkg +yePcB6NdXUG1SBs2wQJA7gAA +4 +zqv+M/yq8E+Jkay1nBspzAAA +fghzvmc+u0iW6Io27OsgRgAA +q0pEs++oo0KvpgM45/D8ngAA +nLw9+cON0EeYTmcmYrYg6QAA + + +build-listpkgclear +yePcB6NdXUG1SBs2wQJA7gAA +4 +n3sgfI10pkqbR+MxJHVGjQAA +yG3BKVlyX0G4Ud4OjA1feAAA ++ezcS+UuakehZMxnRA3SYgAA +o0dmcC/6rEWtExRlAzaJ6AAA + + +build-mandoc +yePcB6NdXUG1SBs2wQJA7gAA +4 +0aiGrBE650unkU8lCAe3AgAA +2B1GxUtbeU+JYSlT+ZHCbQAA +3EQYCnG0IUG5dYPQMPWcLwAA +L8TpArbjUEuqV1/0P+46FQAA +1 +NoXKQs2xtE6fioUtJ2BwDAAA + + +build-infodoc +yePcB6NdXUG1SBs2wQJA7gAA +4 +Rly12l6sikKFzpy4tCACBwAA +fSckJajFfUyIshawYh16MwAA +aOjODmy3Nk6T9/Qa4ggHEgAA +5wpoNO4yXUyBrvUDEPU6KgAA +1 +foV7YkoDo0iOCph37xX+aQAA + + +build-pdfdoc +yePcB6NdXUG1SBs2wQJA7gAA +4 +yD6ZJEzy4EGjPASyNYIKPQAA +pW1AVrHUbkKm6HSASHTmlgAA +FzcT3RzGfUmGi6T12I3X0gAA +Xhj47F2Kk0mX08wop9iB1gAA +1 +whoRvUDIx064d1Yagdz8BAAA + + +build-htmldoc +yePcB6NdXUG1SBs2wQJA7gAA +4 +GbqfGI+7hkOpikiQtUSUqQAA +gkAwipNHTUyXJfxEEpKAlwAA +Jdnnhm1sdUymBd8Iw+MFHQAA +IpSpvZYHR0exma6yvs2q0AAA +1 +cZpclHoUiU6EG/tEiwqgBwAA + + +build-commit +yePcB6NdXUG1SBs2wQJA7gAA +4 +mfA1tpY190iXHr4GAJC7DQAA +fYF3/lxvO0+rp9f6Hc8YxAAA +SfHj1PNGq0ae7wM1br2SpgAA +O8daDFfHX0qDBcBAucPw3QAA + + +build-pkgsync +yePcB6NdXUG1SBs2wQJA7gAA +4 +MpmQhCquJ06ATJM/JNk6SQAA +QPh3NO065kuK/zY2m4weEQAA +Gz9U79GT2E+fLu/koQeC9QAA +nWelTpIURkqOU0SstOhDHwAA + + +yePcB6NdXUG1SBs2wQJA7gAA +ja2Kay77hkyLXMf5w6VvZwAA +8jqYhOhGj0K+KdL5PZdJNgAA +4 +eKWT1YwHXUa5w+Qs6hN/ygAA +NxK+DiY9U0KzK3FmlRQuAQAA +VAC+84+TGESTsGB+/ctRBQAA +q+1wQ7DUGEaHWu9s2ZyD+QAA + + +yePcB6NdXUG1SBs2wQJA7gAA +aPGhvFldykut4+igGmWnpQAA +8jqYhOhGj0K+KdL5PZdJNgAA +4 +9wX4dbnVBk+hj7pIiMDhnwAA +L+Y56RfuDEqg18UQvoJSCQAA +p9QvNfDa5U6gX2C76AT+ewAA +qKIYPD5egE2MM00EhpjKQgAA + + +yePcB6NdXUG1SBs2wQJA7gAA +IKsHmuN07kG8OA1fPuCo+AAA +8jqYhOhGj0K+KdL5PZdJNgAA +4 +eVBX1PoUXUuHS5xe7fyJKwAA +6mDUgr7DTkGopKTUTCy7dAAA +L84vV4uHGEqmcxliS80KGwAA +AttpUVSMFUOlWtck4FO8kAAA + + +yePcB6NdXUG1SBs2wQJA7gAA +O6y9SB7tiE2zxAlAfvxABgAA +8jqYhOhGj0K+KdL5PZdJNgAA +4 +a15rCjEANkCrkYVSP4Z6ywAA +cUYnOsZf+kq6fhhsH/SoJAAA +EOOtG/4YZEylpFdcnV2w7wAA +IO6YDqdf90Sv9gvD+kCkkQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +fNCT4LEWnUeYrQHCKpc1sgAA +lOyDrRE6cEms6LglvRhNKwAA +4 +w+DAEVyeBkanF1iSGTKH8AAA +0XATlXBEOUOa5L2NMf0DTwAA +ebnx2zwF4E+ON6e5PYGk9wAA +xvy7ll4sTkmI9y33LB5fVQAA + + +yePcB6NdXUG1SBs2wQJA7gAA +aA2W2p+5Lk6ydEIL/PlSWgAA +lOyDrRE6cEms6LglvRhNKwAA +4 +cmulMBaKlUqM+LZzv4OkJAAA +frIirjeA40SOunjT2Mn1FgAA +FJ1Af4gNzEmkzknWWye2SAAA +WblDD+QBWEWuZ/xK5ap07wAA + + +yePcB6NdXUG1SBs2wQJA7gAA +C3UjfnZrtUOL/GpuSfg6AwAA +lOyDrRE6cEms6LglvRhNKwAA +4 +JDv9QymQL0OsoCTiDAqB+AAA +n7d/QrwStk626OKTHUL1QgAA +6LW2VRjT0UalMmOJuIeloAAA +/PHAFrpiVE6LnvvUg6CxbQAA + + +devtask-del +yePcB6NdXUG1SBs2wQJA7gAA +4 ++OAmLFIuK0a65vhstWuWOQAA +fXErHNbO5Ey03LNyIMdMegAA +xaxpYJVXr02Y+cFtwjgTtwAA +JTYPKWPe5Euz2NO9aSCqTgAA + + +devtask-submit +yePcB6NdXUG1SBs2wQJA7gAA +4 +vpz09crX+0im+CE6MPx0bAAA +SS+mueD/5kqWfYxCP3P+3QAA +mXNOAS48RU2OYn2KtLA0JwAA +iZQb4ASLjUyWSwcI2lNfwAAA + + +devtask-list +yePcB6NdXUG1SBs2wQJA7gAA +4 +wsRdEgLOGUCbrcPXYLq9FwAA +MiRZu6F1fE2/+dx9+x8q0wAA +vDoZiNRTcE22gPBeWU5nYQAA +z3NyKl17fk+T6u9fSFCchwAA + + +devtask-append +yePcB6NdXUG1SBs2wQJA7gAA +4 +WRIHCVEH50+YE8qTTWEf9AAA +6XBAuPX9qU6Mqo6ih/VgQwAA +iYaBa3gnIk2Hp7+BaIfY9wAA +CVz7BRZ9QEWNE6jG0tL6GwAA + + +devtask-launch +yePcB6NdXUG1SBs2wQJA7gAA +4 +r9IMyOqYJEiG8cddGK3IpAAA +k3RGhb07FUO7JWxbUGkY1wAA +8ANe5oECOE+luULVpdiXAwAA +8q6mmDjZG0qiQjPzef2jwwAA + + +devtask-launchback +yePcB6NdXUG1SBs2wQJA7gAA +4 +JeVETx/mBE6JGJ2Tar2dRgAA +/4vB0OUbNkWYP9FiolTIcwAA +L5pQSvNEEkibnj/PNYBrfgAA +rpkM403pD0KruKMl2HS68AAA + + +devtask-suspend +yePcB6NdXUG1SBs2wQJA7gAA +4 +216VMUPATUSdKKxTp4hqfQAA +FN7ljcSMRkeRdVHpQ2MfnAAA +99ILz00B20elq8G74lTfBwAA +QlIP1mcod0+bvLU/whwF0QAA + + +devtask-resume +yePcB6NdXUG1SBs2wQJA7gAA +4 +M1BDzJOfDE2c0bNxR7JbaAAA +k837SU+3ZkeaQyixvQ2XvAAA +iKluqjIqNkKNapNXrswVgAAA +JqNpdHJAj0W3/CE6ozsHigAA + + + +Implementation Model +UMLStandard +implementationModel +IhiugfF1eE6vc8zKnVf8gAAA +1 + +ImplModel +PAdOgcwcsk+/d7YIjUX11gAA + +GQq3RWC/e0+WAmX5RQoy6wAA + + + + +Deployment Model +UMLStandard +deploymentModel +IhiugfF1eE6vc8zKnVf8gAAA +1 + +deployModel +7qxGQutBXU2dAghX9gmsOwAA + +djhlF/CGLkaIX1y/ia3ghQAA + + + + + + diff --git a/devspec.en_US/dev-step-diagrams/top-usecase.png b/devspec.en_US/dev-step-diagrams/top-usecase.png new file mode 100755 index 0000000000000000000000000000000000000000..ec1224936183f8bf41e68b06c6fd54d22fe4474c GIT binary patch literal 38775 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 z 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 + + + +Baz +- GNU Project - Free Software Foundation + + +

GNU Baz

+ +

Baz is... +

+ + + +
+ + + +

Download

+ +

Baz +can be found on the main GNU ftp server +(download Baz via HTTPS,  +download Baz via HTTP or +download Baz via FTP), and its +mirrors; please +use a mirror +if possible.

+ + +

Documentation

+ +

Documentation for +Baz +is online, as is documentation for most +GNU software. It can also be accessed by running +info baz or +man baz, or by looking at +/usr/share/doc/baz/, +or similar directories on your system. A brief summary is available by +running baz --help.

+ + +

Mailing lists

+ +

Baz +has the following mailing lists:

+ +
    +
  • bug-baz + for discussing most aspects of + Baz, + including development and enhancement requests, as well as bug reports.
  • +
  • help-baz + for general user help and discussion.
  • +
+ +

Announcements about +Baz +and most other GNU software are made on the +info-gnu +mailing list +(archives).

+ +

Security reports that should not be made immediately public can be +sent directly to the maintainer. If there is no response to an urgent +issue, you can escalate to the general +security +mailing list for advice.

+ + +

Getting involved

+ +

Development of +Baz, +and GNU in general, is a volunteer effort, and you can contribute. For +information, please read How to help GNU. If you'd +like to get involved, it's a good idea to join the discussion mailing +list (see above).

+ +
+
Development tools
+ +
For development sources, issue trackers, and other +information, please see the +Baz +project page +at savannah.gnu.org.
+ +
Testing
+ +
Trying the latest test release (when available) is always +appreciated. Test releases can be found on the GNU “alpha” +server +(HTTPS,  +HTTP,  +FTP) and its +mirrors.
+ +
Translating
+ +
To translate the program messages into other languages, please refer +to the +Translation Project page for +Baz. +New translations or updates to the existing strings will not be +incorporated into +Baz +if they are sent elsewhere. For more information, see the Translation +Project home page.
+ +
Maintainer
+ +
Baz +is currently maintained by +Bar Baz. +Please use the mailing lists for contact.
+
+ + +

Licensing

+ +

Baz +is free software; you can redistribute it and/or modify it under the +terms of the GNU General +Public License as published by the Free Software Foundation; either +version 3 of the License, or (at your option) any later version.

+ + + + + + + \ No newline at end of file diff --git a/devspec.en_US/file b/devspec.en_US/gnu-spec/distributions.txt old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/gnu-spec/distributions.txt diff --git a/devspec.en_US/gnu-spec/ftp-space.txt b/devspec.en_US/gnu-spec/ftp-space.txt new file mode 100755 index 0000000..72d94e3 --- /dev/null +++ b/devspec.en_US/gnu-spec/ftp-space.txt @@ -0,0 +1,220 @@ + +------------------------------------------------------------------------------ +Next: Announcements, Previous: Test Releases, Up: Distributions [Contents][Index] + +11.6 Automated FTP Uploads +In order to upload new releases to ftp.gnu.org or alpha.gnu.org, you first need to register the necessary information. Then, you can perform uploads yourself, with no intervention needed by the system administrators. + +The general idea is that releases should be cryptographically signed before they are made publicly available. + +• Automated Upload Registration: +• Automated Upload Procedure: +• FTP Upload Release File Triplet: +• FTP Upload Directive File: +• FTP Upload Directory Trees: +• FTP Upload File Replacement: +• FTP Upload Standalone Directives: +• FTP Upload Directive File - v1.1: +• FTP Upload Directive File - v1.0: + +------------------------------------------------------------------------------ +Next: Automated Upload Procedure, Up: Automated FTP Uploads [Contents][Index] + +11.6.1 Automated Upload Registration +Here is how to register your information so you can perform uploads for your GNU package: + +Create an account for yourself at https://savannah.gnu.org, if you don’t already have one. By the way, this is also needed to maintain the web pages at https://www.gnu.org for your project (see Web Pages). +In the ‘My Account Conf’ page on savannah, upload the GPG key (in ASCII-armored format) that you will use to sign your packages. If you haven’t created one before, you can do so with the command gpg --gen-key (you can accept and/or confirm the default answers to its questions). Then, to get the ASCII-armored version, run ‘gpg --export --armor your_key_id’. +Optional but recommended: Send your key to a GPG public key server: gpg --keyserver keys.gnupg.net --send-keys keyid, where keyid is the eight hex digits reported by gpg --list-public-keys on the pub line before the date. For full information about GPG, see https://www.gnu.org/software/gpg. + +Compose a message with the following items in some msgfile. Then GPG-sign it by running gpg --clearsign msgfile, and finally email the resulting msgfile.asc as an attachment to ftp-upload@gnu.org. +Name of package(s) that you are the maintainer for, your preferred email address, and your Savannah username. +The ASCII armored copy of your GPG key, as an attachment. +A list of names and preferred email addresses of other individuals you authorize to make releases for which packages, if any (in the case that you don’t make all releases yourself). +ASCII armored copies of GPG keys for any individuals listed in (3). +The administrators will acknowledge your message when they have added the proper GPG keys as authorized to upload files for the corresponding packages. + +The upload system will email receipts to the given email addresses when an upload is made, either successfully or unsuccessfully. + +Should you later have to update your GPG key, you’ll have to re-submit it to both Savannah and ftp-upload@gnu.org, as these systems are not connected. + +------------------------------------------------------------------------------ +Next: FTP Upload Release File Triplet, Previous: Automated Upload Registration, Up: Automated FTP Uploads [Contents][Index] + +11.6.2 Automated Upload Procedure +Once you have registered your information as described in the previous section, you can and should do ftp uploads for your package. There are two basic kinds of uploads (details in the following sections): + +Three related files (a “triplet”) to upload a file destined for ftp.gnu.org or alpha.gnu.org: see FTP Upload Release File Triplet. +A single (signed) standalone “directive file” to perform operations on the server: see FTP Upload Standalone Directives. +In either case, you upload the file(s) via anonymous ftp to the host ftp-upload.gnu.org. If the upload is destined for ftp.gnu.org, place the file(s) in the directory /incoming/ftp. If the upload is destined for alpha.gnu.org, place the file(s) in the directory /incoming/alpha. + +Uploads are processed every five minutes. Uploads that are in progress while the upload processing script is running are handled properly, so do not worry about the timing of your upload. Spurious and stale uploaded files are deleted automatically after 24 hours. + +Your designated upload email addresses (see Automated Upload Registration) are sent a message if there are problems processing an upload for your package. You also receive a message when an upload has been successfully processed. + +One programmatic way to create and transfer the necessary files is to use the gnupload script, which is available from the build-aux/ directory of the gnulib project at https://savannah.gnu.org/projects/gnulib. Run gnupload --help for a description and examples. (With gnupload, you specify a destination such as ‘ftp.gnu.org:’pkgname rather than using the ‘ftp-upload’ hostname.) + +gnupload invokes the program ncftpput to do the actual transfers; if you don’t happen to have the ncftp package installed, the ncftpput-ftp script in the build-aux/ directory of gnulib can serve as a replacement. It uses the plain command line ftp program. + +If you have difficulties with an upload, email ftp-upload@gnu.org. You can check the archive of uploads processed at https://lists.gnu.org/archive/html/ftp-upload-report. + +------------------------------------------------------------------------------ +Next: FTP Upload Directive File, Previous: Automated Upload Procedure, Up: Automated FTP Uploads [Contents][Index] + +11.6.3 FTP Upload Release File Triplet +Ordinarily, the goal is to upload a new release of your package, let’s say, the source archive foo-1.0.tar.gz. To do this, you simultaneously upload three files: + +The file to be distributed; in our example, foo-1.0.tar.gz. +Detached GPG binary signature file for (1); for example, foo-1.0.tar.gz.sig. Make this with ‘gpg -b foo-1.0.tar.gz’. +A clearsigned directive file; for example, foo-1.0.tar.gz.directive.asc, created with ‘gpg --clearsign foo-1.0.tar.gz.directive’. Its contents are described in the next section. +The names of the files are important. The signature file must have the same name as the file to be distributed, with an additional .sig extension. The directive file must have the same name as the file to be distributed, with an additional .directive.asc extension. If you do not follow this naming convention, the upload will not be processed. + +------------------------------------------------------------------------------ +Next: FTP Upload Directory Trees, Previous: FTP Upload Release File Triplet, Up: Automated FTP Uploads [Contents][Index] + +11.6.4 FTP Upload Directive File +To repeat, a (signed) directive file must be part of every upload. The unsigned original is just a plain text file you can create with any text editor. Its name must be, e.g., foo-1.0.tar.gz.directive for accompanying an upload of foo-1.0.tar.gz. + +After creating the file, run ‘gpg --clearsign foo-1.0.tar.gz.directive’, which will create foo-1.0.tar.gz.directive.asc; this is the file to be uploaded. + +When part of a triplet for uploading a release file, the directive file must always contain the directives version, filename and directory. In addition, a comment directive is optional. These directives can be given in any order. + +Continuing our example of uploading foo-1.0.tar.gz for a package named foo to ftp.gnu.org, the values would be as follows: + +version +must be the value ‘1.2’ (the current version, as of May 2012): +version: 1.2 + +filename +must be the name of the file to be distributed: +filename: foo-1.0.tar.gz + +directory +specifies the final destination directory where the uploaded file and its .sig companion are to be placed. Here we will put our file in the top level directory of the package, as is the most common practice: +directory: foo + +comment +is optional, and ignored if present: +comment: let's hope this works! + +Putting all of the above together, the complete contents of the directive file foo-1.0.tar.gz.directive for our example would be: + +version: 1.2 +directory: foo +filename: foo-1.0.tar.gz +comment: let's hope this works! +Then you ‘gpg --clearsign’ the file as given above, and upload (using anonymous ftp) the three files: + +foo-1.0.tar.gz +foo-1.0.tar.gz.sig +foo-1.0.tar.gz.directive.asc +to the host ftp-upload.gnu.org, directory /incoming/ftp (for official releases), or the directory /incoming/alpha (for test releases). + +After the system authenticates the signatures, the files foo-1.0.tar.gz and foo-1.0.tar.gz.sig are placed in the directory gnu/foo/ on ftp.gnu.org. That is, we’ll have made our release available at ‘https://ftp.gnu.org/gnu/foo/foo-1.0.tar.gz’ (and then from our many mirrors via ‘https://ftpmirror.gnu.org/foo/foo-1.0.tar.gz’). Whew. + +A common reason for the upload not succeeding is your GPG signature not being registered with the upload system. There is nothing that makes this happen automatically. You must email the system administrators as described above (see Automated Upload Registration). + +------------------------------------------------------------------------------ +Next: FTP Upload File Replacement, Previous: FTP Upload Directive File, Up: Automated FTP Uploads [Contents][Index] + +11.6.5 FTP Upload Directory Trees +You can make any directory hierarchy you like under your package directory. The system automatically creates any intermediate directories you specify in the directory directive. + +Slightly modifying the example above, the following directive file: + +version: 1.2 +directory: foo/foo-1.0 +filename: foo-1.0.tar.gz +comment: creates per-version subdirectory as needed +would put the tar file in the foo-1.0/ subdirectory of the package foo, thus ending up at ‘ftp.gnu.org:gnu/foo/foo-1.0/foo-1.0.tar.gz’. + +However, to keep things simpler for users, we recommend not using subdirectories, unless perhaps each release of your package consists of many separate files. + +------------------------------------------------------------------------------ +Next: FTP Upload Standalone Directives, Previous: FTP Upload Directory Trees, Up: Automated FTP Uploads [Contents][Index] + +11.6.6 FTP Upload File Replacement +You can replace existing files that have already been uploaded by including a directive line replace: true. For example, you might like to provide a README file in the release directory and update it from time to time. The full directive file for that would look like this: + +replace: true +version: 1.2 +directory: foo +filename: README +comment: replaces an existing README +It is ok if the file to be replaced doesn’t already exist; then the new file is simply added, i.e., the replace directive has no effect. + +When an existing file is replaced, the original is archived to a private location. There is no automated or public access to such archived files; if you want to retrieve or view them, please email sysadmin@fsf.org. + +We very strongly discourage replacing an actual software release file, such as foo-1.0.tar.gz. Releases should be unique, and forever. If you need to make fixes, make another release. If you have an exigent reason for a particular release file to no longer be available, it can be explicitly archived, as described in the next section. + +If you want to make the current release available under a generic name, such as foo-latest.tar.gz, that is better done with symlinks, also as described in the next section. + +------------------------------------------------------------------------------ +Next: FTP Upload Directive File - v1.1, Previous: FTP Upload File Replacement, Up: Automated FTP Uploads [Contents][Index] + +11.6.7 FTP Upload Standalone Directives +The previous sections describe how to upload a file to be publicly released. It’s also possible to upload a directive file by itself to perform a few operations on the upload directory. The supported directives are: + +symlink +creates a symlink. + +rmsymlink +removes a symlink. + +archive +takes a file or directory offline. + +As for the directives described above, the directory and version directives are still required, the comment directive remains optional, and the filename directive is not allowed. + +The .sig file should not be explicitly mentioned in a directive. When you specify a directive to operate on a file, its corresponding .sig file will be handled automatically. + +When uploaded by itself, the name of the directive file is not important. But it must be still be signed, using ‘gpg --clearsign’; the resulting .asc file is what should be uploaded. + +Here’s an example of the full directive file to create a foo-latest.tar.gz symlink: + +version: 1.2 +directory: foo +symlink: foo-1.1.tar.gz foo-latest.tar.gz +comment: create a symlink +If you include more than one directive in a standalone upload, the directives are executed in the sequence they are specified in. If a directive results in an error, further execution of the upload is aborted. + +Removing a symbolic link (with rmsymlink) which does not exist results in an error. On the other hand, attempting to create a symbolic link that already exists (with symlink) is not an error. In this case symlink behaves like the command ln -s -f: any existing symlink is removed before creating the link. (But an existing regular file or directory is not replaced.) + +Here’s an example of removing a symlink, e.g., if you decide not to maintain a foo-latest link any more: + +version: 1.2 +directory: foo +rmsymlink: foo-latest.tar.gz +comment: remove a symlink +And here’s an example of archiving a file, e.g., an unintended upload: + +version: 1.2 +directory: foo +archive: foo-1.1x.tar.gz +comment: archive an old file; it will not be +comment: publicly available any more. +The archive directive causes the specified items to become inaccessible. This should only be used when it is actively bad for them to be available, e.g., you uploaded something by mistake. + +If all you want to do is reduce how much stuff is in your release directory, an alternative is to email sysadmin@fsf.org and ask them to move old items to the https://ftp.gnu.org/old-gnu/ directory; then they will still be available. In general, however, we recommend leaving all official releases in the main release directory. + +------------------------------------------------------------------------------ +Next: FTP Upload Directive File - v1.0, Previous: FTP Upload Standalone Directives, Up: Automated FTP Uploads [Contents][Index] + +11.6.8 FTP Upload Directive File - v1.1 +The v1.1 protocol for uploads lacked the replace directive; instead, file replacements were done automatically and silently (clearly undesirable). This is the only difference between v1.2 and v1.1. + +Previous: FTP Upload Directive File - v1.1, Up: Automated FTP Uploads [Contents][Index] + +11.6.9 FTP Upload Directive File - v1.0 +Support for v1.0 uploads was discontinued in May 2012; please upgrade to v1.2. + +In v1.0, the directive file contained one line, excluding the clearsigned data GPG that inserts, which specifies the final destination directory where items (1) and (2) are to be placed. + +For example, the foo-1.0.tar.gz.directive.asc file might contain the single line: + +directory: bar/v1 +This directory line indicates that foo-1.0.tar.gz and foo-1.0.tar.gz.sig are part of package bar. If you were to upload the triplet to /incoming/ftp, and the system can positively authenticate the signatures, then the files foo-1.0.tar.gz and foo-1.0.tar.gz.sig will be placed in the directory gnu/bar/v1 of the ftp.gnu.org site. + +The directive file can be used to create currently non-existent directory trees, as long as they are under the package directory for your package (in the example above, that is bar). + +------------------------------------------------------------------------------ diff --git a/devspec.en_US/gnu-spec/gendocs_template_min.html b/devspec.en_US/gnu-spec/gendocs_template_min.html new file mode 100755 index 0000000..5377b2f --- /dev/null +++ b/devspec.en_US/gnu-spec/gendocs_template_min.html @@ -0,0 +1,108 @@ + + + + + + + +%%TITLE%% - GNU Project - Free Software Foundation + + + + + + +

%%TITLE%%

+ +
Free Software Foundation
+
last updated %%DATE%%
+

+ +  [image of the head of a GNU] + +

+
+ +

This manual (%%PACKAGE%%) is available in the following formats:

+ + + +

(This page generated by the %%SCRIPTNAME%% +script.)

+ + + + +

Copyright © 2020 Free Software Foundation, Inc.

+ +

This page is licensed under a Creative +Commons Attribution-NoDerivs 3.0 United States License.

+ + + + + + \ No newline at end of file diff --git "a/devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232.html" "b/devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232.html" new file mode 100755 index 0000000..40bc404 --- /dev/null +++ "b/devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232.html" @@ -0,0 +1,508 @@ + + + + + + + + + + + + + + + + + + +GNU 开发资源 - GNU 工程 - 自由软件基金会 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + +
+ + + + + + + + +

+ +这是针对英文原版页面的中文翻译。 + + + + + + +

+ + + + + + + +
+

GNU 开发资源

+
+ +

本页面旨在为GNU工程的开发人员介绍GNU为他们提供的诸多开发资源。想要了解GNU维护人员的详细职责,请参看GNU维护人员参考信息,且需遵循GNU编码规范。同时,这篇GNU维护人员技巧和这篇什么是GNU软件包也会有帮助。

+ +

随着能运行GNU/Linux的廉价计算机的丰富, +以及因特网访问服务实用性的增强, +许多GNU志愿者今天拥有他们所需要的全部计算机设施。可是,拥有中央计算机仍然有它的优点,在这儿,GNU志愿者们可以在一起工作而不必把他们自己机器的权限给别人。

+ +

因为这个原因,自由软件基金会(FSF)鼓励GNU软件工程像在家一样使用gnu.org上的机器。对这些机器的使用也间接的有利于GNU工程,通过增加公众对GNU的注意,传播为了有利于每一个人的在一起工作的思想。

+ + +

Savannah 和版本控制

+ +

倘若您在开发 GNU 的官方软件,我们强烈建议您使用 Savannah +为您提供的公开的版本控制系统。若要使用它,首先请 创建一个个人账号,然后 注册你的GNU软件包。之后,您可以选择一个版本控制系统,创建一些网页,给代码贡献者不同权限,以及其他的相关设置。

+ + +

邮件列表

+ +

我们为GNU软件包提供必须的邮件列表,包括手动管理列表和自动管理列表。

+ +

当 GNU 软件包在 Savannah 注册时, +会有一个网络界面允许开发者建立和管理该软件包专用的邮件列表。

+ +

对于每个 GNU 软件,倘若其名为 name,那么至少得有个叫做 +bug-pkgname@gnu.org 的邮件列表,用来汇报 bug,还可以给这列表起几个别名。使用 +Savannah,你可以为自己项目创建符合规范的列表。有些软件包共享列表 bug-gnu-utils@gnu.org 用来汇报 +bug,但是我们现在强烈建议每个软件包建立各自独立的列表。

+ +

软件包可以拥有用于公告、寻求帮助、放入相关的源代码、用户间讨论以及其他软件包的维护者认为有用的邮件列表。

+ +

自动管理的邮件列表归档于lists.gnu.org(mbox的归档可以通过HTTPS获取),也可以通过列表管理获取。手动管理的邮件列表归档于GNU机器的/com/archive

+ +

当邮件列表太大了而不能证明其有效性,我们可以建立一个gnu.*的新闻组,它双向链接到邮件列表中。

+ + +

网页服务

+ +

GNU 的主站点位于 www.gnu.org。我们强烈建议 GNU 软件包使用 +https://www.gnu.org/software/pkgname 作为它们的官方首页。

+ +

使用 Savannah,开发人员可以使用上述 url,通过 CVS 的 “网页仓库” +来创建和维护他们的项目主页。这个仓库和软件包的主仓库(它可以使用其他受支持的版本管理程序)是分开的。请参看 关于 GNU 网页维护的更多信息。

+ + +

FTP

+ +

为 GNU 软件提供 FTP 服务的站点在 https://ftp.gnu.org/gnu/。它在世界各地也有 +镜像。我们强烈建议您把您所维护的 GNU +软件包上传至此(当然,也可以再另外上传到您觉得方便的地方)。

+ +

我们为测试版本使用不同的服务器,因此人们不会因为它们已经准备好了而安装它们,这个服务器是 https://alpha.gnu.org/

+ +

GNU维护人员手册中,描述了详细的FTP上传的整个流程。这在上述服务器中均适用。

+ + +

登录账号

+ +

倘若 GNU 软件开发人员需要 shell 登录,我们可以为他们提供此服务,让他们登录到 GNU +的机器上。不过需要注意,使用这样的登录账户既拥有权利,也同时肩负着责任。这些账号必须只能用来做和 GNU 工程相关的工作。详情参考 如何获得登录账号

+ +

在所登陆的计算机上,gsrc 的开发者们维护着一个当前 GNU +软件包的资料库。这些软件均直接编译自各个软件的源代码。若要使用,请输入命令 source +/gd/gnu/gnusys/live/setup

+ +

您也可以 使用一个 GNU +账号来发邮件

+ + +

Hydra: 持续构建(Continuous builds)与可移植性测试

+ +

持续构建工具(continuous build tools,通常也被叫做持续集成工具—continuous integration +tools)可以在代码被加入项目后,迅速地找到其中的编程错误。这对于团队合作开发软件非常有帮助。

+ +

Hydra 是一款基于 Nix 的自由的持续构建工具。代尔夫特理工大学 Hydra 项目组的管理员们慷慨地为 GNU 项目提供了一片空间。Hydra +管理的项目会对每次提交或依赖关系更改(依赖关系包括标准构建环境,就是指 GCC 更新、GNU make +更新等等)进行重新集成。

+ +

目前,Hydra 支持在 +GNU/Linux(i686x86_64)、FreeBSD、Darwin、Solaris 以及 +Cygwin 下构建软件,同时也支持交叉编译其他体系结构或 MinGW 上的 GNU/Hurd、GNU/Linux 系统。它提供利用 LCOV +生成的代码覆盖报表。除了源代码压缩包和 Nix 包以外,它还可以为基于 deb- 或 RPM +软件包的发行版打包。软件包可以基于最新的依赖库来构建。比如,GnuTLS 需要用到 GNU libtasn1 和 +GNU libcrypt,那么就可以基于这两个库的最新版本来构建它。

+ +

除了 网络界面 以外,Hydra +可以在项目构建状态发生改变的时候,通过电子邮件来提醒管理人员——比如,从 SUCCEEDED +状态变为了 +FAILED)。当构建失败时,日志和构建树可以通过网络界面获取;后者允许审查已创建的文件(比如,config.log +或 testsuite.log),这样就可以获得处理故障的信息。

+ +

任何一个 GNU 软件包都可以申请在 Hydra 上的一片空间。每个软件包必须提供一份“构建策略”。该策略使用 Nix +语言编写(用 Nix 的术语来说,就是 Nix表达式)。GNU 项目通用 Nix +表达式范本可以在 Git 上获取。对于简单的项目来说,使用标准的 GNU 构建程序的话,比如 Automake 和 +Autoconf,这份构建策略通常非常简单。比如可以参考这个 GNU Patch +构建策略。对此您有任何问题,欢迎向 hydra-users@gnu.org提问。

+ +

在编写完您的构建策略之后,请把它发至 hydra-users@gnu.org,并要求把它加入到 +Hyra。同时确保它是 hydra-recipesSavannah +项目 的成员。这样你就可以直接定制自己项目的构建工作了。

+ +

关于 Hydra 的技术信息,请参考 Hydra +手册。更多细节,请参考 Nix +手册

+ + +

平台测试者:手动可移植性测试

+ +

另一项发布前测试选项是 平台测试者邮件列表。如果时间允许,该邮件列表成员会根据需求在多种平台上构建预先发布版本。(我们征求测试志愿者!只需加入该邮件列表就可以开始介入了。)

+ +

和Hydra不同,平台测试者主要进行手动测试,两种方法各有优劣。另外,平台测试者比Hydra有更多种类的平台和编译器。

+ +

所以,如果你有预发布版,你可以发信给邮件列表,提供(1) 压缩包的url,(2) 计划的发布日期,和(3) 收取构建报告的电子邮件地址。构建和报告都有列表里的志愿者手动完成。

+
+ +
+ + +
+
+ + + + + + + + + + + +
+ + +
+
+
+ +
+
+ + +

本页可选语言:

+ +
+

+[en] English   +[ca] català   +[de] Deutsch   +[es] español   +[pl] polski   +[pt-br] português   +[sq] Shqip   +[zh-cn] 简体中文   +

+
+
+
+ + + + + + + + +
+ + + + \ No newline at end of file diff --git "a/devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/banner-small.png" "b/devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/banner-small.png" new file mode 100755 index 0000000000000000000000000000000000000000..eb6dfaa4d2ad1cf7a024d638a3209468b353ed90 GIT binary patch literal 10561 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 z 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 literal 0 HcwPel00001 diff --git "a/devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/fsf-logo-notext-small.png" "b/devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/fsf-logo-notext-small.png" new file mode 100755 index 0000000000000000000000000000000000000000..5310c47b6417dfb97d6b8dfa14de05862d110420 GIT binary patch literal 2494 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,.translators-notes>strong{font-size:1.19em;font-size:1.19rem}.translators-notes>b,.translators-notes>strong{margin:1.2em 0 .8em;color:#333}.big-section{clear:left;float:left}.big-section h3{display:inline-block;font-size:1.75em;margin:1em .3em .5em 0;color:black;border-top:.12em solid #e74c3c;border-bottom:.12em solid #e74c3c}.article .big-section h3{font-size:1.65em}.big-subsection{margin:1.5em 0}.big-subsection h4{display:inline;font-size:1.5em;margin-right:.3em;color:black}.article .big-subsection h4{font-size:1.41em}.big-subsection{line-height:2.0em}.big-subsection h4{line-height:1.2em}.anchor-reference-id{font-weight:normal;font-size:.8125em}@media(max-width:30em){h1{font-size:2em}h2{font-size:1.73em}.article h2{font-size:1.63em}h3{font-size:1.4em}.article h3{font-size:1.32em}h4{font-size:1.2em}.article h4{font-size:1.13em}h5{font-size:1.07em}.big-section h3{font-size:1.53em}.article .big-section h3{font-size:1.44em}.big-subsection h4{font-size:1.4em}.article .big-subsection h4{font-size:1.32em}}ul,ol,li,dl,dd,dt{padding:0}li,dt,dd{line-height:1.5em}ul li{list-style:square outside}ul ul li,ol ul li{list-style:circle}ol li,#content ul li ol li{list-style:decimal outside}ul,ol{margin:1em 1.5%}ol li{margin:1em 0 0 1em}ul li,ul ol li{margin:.5em 0 0 1em}ul ul li{margin-top:.3em}ul li p,ul li pre,ul li blockquote,table li{margin-top:.3em;margin-bottom:.3em}ul ul,ol ul,table ul{margin:0 1.5%}ul.para>li{margin-top:1em}.date-tag{padding:.2em .5em;color:#505050;background:#f2f2f2;border-radius:.25em}ul.blurbs li{margin-top:1em}ul.blurbs ul li,ul.blurbs ol li,ul.blurbs dl li{margin-top:.5em}ul.blurbs>li{list-style:none}.blurbs .date-tag{position:relative;right:2em}@media(max-width:30em){.blurbs .date-tag{right:1.5em}}dl{margin:1.5em 0 0}dt{font-weight:bold;color:#333;margin:1em 0}dl dd{margin:1em 3% 1.5em}dl.compact{margin:.5em 0}dl.compact dt{font-weight:normal;font-style:italic;margin:.5em 0 0}dl.compact dd{margin:.3em 3% 0}dl.compact dd p{margin:.3em 0 0}dl.compact dd ul{margin:.3em 1.5% 0}hr{display:block;margin:1.2em 0;color:#999;background:#999}hr.separator{height:.3em;border:0}.thin{clear:both;height:2px;margin:1.5em 0;border:0;background:#bbb}.column-limit{height:.4em;width:15%;min-width:7em;margin:2em auto;border:0;background:#bbb;background-image:linear-gradient(to right,white,#bbb,white)}table{border-collapse:collapse;border-spacing:0;margin:1.5em 0}caption{font-style:inherit;font-weight:inherit;text-align:center;margin-bottom:.5em}th,td{border:1px solid #bbb;padding:.5em;margin:0}th{font-weight:bold;text-align:center}th,td,td p,td li{line-height:1.3em}.listing{width:100%;display:block;overflow-x:auto;border:.2em solid #ccc}.listing th{font-weight:normal;padding:.7em;color:black;background:#fff1c0;border:1px solid #999;border-bottom:0}.listing td{padding:1em;text-align:center;border:1px solid #999}.listing img{vertical-align:middle}.listing .odd{background:transparent}.listing .even{background:#f4f4f4}.columns p.inline-block{display:inline-block;margin:0}.columns>*:first-child{margin-top:0}.columns>*:last-child{margin-bottom:0}@media(min-width:55em){.columns{-webkit-column-count:2;-webkit-column-gap:1.5em;-moz-column-count:2;-moz-column-gap:1.5em;column-count:2;column-gap:1.5em}}img{vertical-align:top;border:0}.imgright,.imgleft{max-width:100%}.imgright{float:right;margin:.3em 0 1em 2em}.imgleft{float:left;margin:.3em 2em 1em 0}.narrow{width:15em}.medium{width:20em}.wide{width:27em}.pict{max-width:100%;margin:1em auto}.pict img{width:100%;height:auto}.pict p{text-align:center;font-style:italic;font-size:.875em;margin-top:.5em}@media(min-width:45em){.pict.narrow{max-width:45%;float:right;margin:.3em 0 1em 2em}}@media(min-width:50em){.pict.medium{max-width:45%;float:right;margin:.3em 0 1em 2em}}@media(min-width:57em){.pict.wide{max-width:45%;float:right;margin:.3em 0 1em 2em}}.comment,.introduction{font-style:italic;margin:1.5em 6%}.article .comment{font-size:.94em}.comment cite,.introduction cite{font-style:normal}.epigraph{margin:2em 0 2em 10%;color:#444}@media(max-width:30em){.comment,.introduction{margin:1.5em 0}}.emph-box *,.highlight-para *,.lyrics *,.announcement *,.important *{margin-bottom:0}.announcement,.important{padding:.4em 1em;margin-top:1.5em;margin-bottom:1.5em}.announcement blockquote{margin:0}.announcement p,.important p{padding-top:.4em;padding-bottom:.5em;margin:0}.announcement>ul,.important>ul{margin:0}.announcement li,.important li{padding-top:.2em;padding-bottom:.3em;margin-top:0}.announcement h3,.important h3{font-size:1.25em;margin:.35em 0 .4em}.announcement{border-left:.4em solid #5c5}.important{border-left:.4em solid #fc7}@media(min-width:48em){.announcement,.important{padding:.4em 1.5em}}blockquote.highlight-para,blockquote.emph-box,div.highlight-para,div.emph-box{padding:0 1.2em 1.1em;margin:2em 0}p.highlight-para,p.highlight,p.emph-box,pre.emph-box{padding:.7em 1.2em .8em}.emph-box h3,.highlight-para h3,.lyrics h3{font-size:1.25em;margin:.8em 0}.emph-box h4,.highlight-para h4,.lyrics h4{font-size:1em}pre.emph-box code,pre.emph-box kbd,pre.emph-box samp,p.emph-box code,p.emph-box kbd,p.emph-box samp{padding:0}.highlight-para,.highlight{background:#fff5d4}span.highlight{background:#fff1c0}.highlight-para{border-top:.1em solid #fc7;border-bottom:.1em solid #fc7}.emph-box{background:#f2f2f2;border:.1em solid #bbb}.lyrics{display:inline-block;max-width:80%;font-style:italic;padding:.5em 2em 1.7em;background:#f7f7f7;border:.1em solid #bbb;border-radius:.5em;margin:.5em 0 .5em 6%}@media(max-width:45em){.lyrics{box-sizing:border-box;max-width:100%;padding:0 1em 1.2em;margin-left:0}}.note,.edu-note{margin:2em auto}.edu-note{width:37.7em;max-width:100%}.edu-note p{font-style:italic;padding:.7em 1em .8em;margin:0}.note{width:45em;max-width:82%;padding:.3em 3% .4em;background:white}.note p{padding:.4em;margin:0}.note,.edu-note p{border:.15em solid #0aa}.edu-note p{border-radius:.5em}.summary,.toc{width:45em;text-align:center;padding:1.3em 3%;margin:2em auto;background:#f4f4f4}.summary{max-width:82%}.toc{max-width:94%}.summary>ul,.toc>ul{text-align:left;font-size:.94em;font-size:.94rem;display:inline-block;margin:0 .5em 0 0}.summary ul ul,.toc ul ul{margin:0}.summary li,.toc li{margin:0 0 0 1.5em;padding:.1em 0}.summary h3,.toc h3{font-size:1.125em;margin-top:.3em}.summary h4,.toc h4{text-align:left;font-size:1em}.summary a,.toc a{display:block;padding:.2em 0}.toc-inline{font-size:.94em;text-align:center;padding:0 3%;margin:2em auto}.toc-inline a{display:inline-block;padding:.1em .4em;margin:.3em;background:#f2f2f2;border:.1em solid #bbb}.toc-inline h3{display:none}.toc-inline h4{font-size:1em;margin:1em 0 .2em}.toc-inline h4 a{border:0}.toc-inline ul,.toc-inline li{display:inline;margin:0}@media(max-width:30em){.note,.summary{max-width:92%}#content .note{margin-left:auto;margin-right:auto}}@media(min-width:48em){.note,.summary{clear:right;float:right;width:20em;max-width:40%;margin:.5em 0 1em 2em}#content .note{margin-right:0;margin-left:2em}.summary{padding:1em .8em}.note{padding:.3em .8em .4em}}div.toc .malfunctions h3,div.toc .companies h3{padding:0;margin:0 0 .5em}#content .malfunctions,#content .companies{display:inline-block;padding:.5em .5em 0;margin:0}#content .toc .malfunctions{max-width:29em}#content .toc .companies{max-width:14em}#content .malfunctions ul,#content .companies ul{padding:0;margin:0}#content div.toc .malfunctions li,#content div.toc .companies li{padding:0 0 .5em;margin:0}.malfunctions a+br,.summary a+br{display:none}#content div.toc.c{background:0}#content div.toc.c h3{display:none}#content div.toc.c a{display:inline-block;padding:.1em .4em;margin:.3em;background:#f2f2f2;border:.1em solid #bbb}#content div.toc.c a:hover{background:white}#content #video-container{width:37.7em;margin:2em auto}#video-container .emph-box{font-size:smaller;margin-top:0}div.package-list a,div.package-list a:visited{margin-bottom:.1em}@media(min-width:48em){#content #dynamic-duo{width:19.2em;max-width:38%;margin-bottom:1.5em}#dynamic-duo p{font-size:.875em}}a[href]{text-decoration-color:#bbb}a[href]:link{color:#049}a[href]:visited{color:#503}a[href]:active{text-decoration:none}#gnu-banner>a{color:#333;text-decoration:none}#gnu-banner>a strong{color:#a32d2a}#fsf-support,#fsf-support a[href],#fssbox a[href],.breadcrumb a[href],.back a[href],.anchor-reference-id a[href]{color:#4b4b4b}#translations a[href],.trans-disclaimer a[href],.toc a[href],.toc-inline a[href],.summary a[href],.package-list a[href]{color:#049;text-decoration:none}a[href]:hover,#fsf-support a[href]:hover,#fssbox a[href]:hover{color:black;text-decoration:none}#translations a[href]:hover{background:#ebebff}.toc a[href]:hover,.summary a[href]:hover,.toc-inline a[href]:hover,.package-list a[href]:hover{background:white}form,legend,fieldset,textarea{padding:0}form,legend,button,textarea,input{margin:0}fieldset{border:0;margin:1em 0}input,button,textarea,select,optgroup,option{font-family:inherit;font-size:inherit;font-style:normal;font-weight:normal}button,select,input{padding:.2em .3em}#fssbox input,.button a{line-height:1.1em;padding:.4em .6em}#fssbox input[type="text"]{height:1.1em}#fssbox input[type="submit"],.button a{font-weight:bold;margin:0}.button a{display:block;display:inline-block}#support-the-fsf a{padding:.6em 1em;margin:1em 1.5em 0}.backtotop a{float:right;position:relative;bottom:1em;font-size:1.2em;font-weight:bold;line-height:1em;padding:.2em .6em .5em;margin:0 1em}.backtotop a span{display:none}.inner>.backtotop{margin-right:3%}.button a[href],.backtotop a[href]{text-decoration:none;color:#4040bb;background:white;border:.1em solid #999;border:.1rem solid #999}.button a[href]:hover,.backtotop a[href]:hover{color:#33c;background:#ebebff;border-color:#55b}#join-fsf a,#support-the-fsf a.join{color:#a32d2a;border-color:#a32d2a}#join-fsf a:hover,#support-the-fsf a.join:hover{color:#960400;background:#f6e5e1}#support-the-fsf a.donate{color:#4040bb;border-color:#55b}#support-the-fsf a.donate:hover{color:#33c;background:#ebebff}#support-the-fsf a.shop{color:#006363;border-color:#088}#support-the-fsf a.shop:hover{color:#005f5f;background:#dff}a[href].switch:hover{background:0;cursor:pointer}#fssbox input{background:white}#fssbox input[type="text"]{color:#555;border:.1em solid #bbb}#fssbox input[type="text"]:focus{color:#333;border-color:#088}#fssbox input[type="submit"]{color:#006363;border:.1em solid #088;cursor:pointer}#fssbox input[type="text"]:focus ~ input[type="submit"]{color:#005f5f;background:#dff}.rounded-corners,.button a,.backtotop a,#fssbox input{border-radius:.4em;-moz-border-radius:.4em;-khtml-border-radius:.4em;-webkit-border-radius:.4em;-opera-border-radius:.4em}a[href]{font-family:sans-serif}#fsf-frame a[href],form,.button a[href],#header a[href],#fsf-support,#languages,#languages a[href],.breadcrumb,.breadcrumb a,.trans-disclaimer,.trans-disclaimer a[href],#outdated,#outdated a[href]{font-family:"Noto Sans Display","Noto Sans","Liberation Sans",sans-serif}#navigation a[href],#edu-navigation a[href]{font-family:"Dosis","Noto Sans Display","Noto Sans","Liberation Sans",sans-serif}#gnu-banner strong{font-family:"Noto Sans","Liberation Sans",sans-serif} \ No newline at end of file diff --git "a/devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/mini.css" "b/devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/mini.css" new file mode 100755 index 0000000..6735aaa --- /dev/null +++ "b/devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/mini.css" @@ -0,0 +1,208 @@ +/* +Software License Agreement (BSD License) + +Copyright (c) 2006, Yahoo! Inc. +All rights reserved. + +Redistribution and use of this software in source and +binary forms, with or without modification, arepermitted +provided that the following conditions are met: + +* Redistributions of source code must retain the above +copyright notice, this list of conditions and the +following disclaimer. + +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other +materials provided with the distribution. + +* Neither the name of Yahoo! Inc. nor the names of its +contributors may be used to endorse or promote products +derived from this software without specific prior +written permission of Yahoo! Inc. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. +*/ +html +{ + color: #000; + background: #FFF; +} +body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, + pre, code, form, fieldset, legend, input, button, textarea, + p, blockquote, th, td +{ + margin: 0; + padding: 0; +} +table +{ + border-collapse: collapse; + border-spacing: 0; +} +fieldset, img +{ + border: 0; +} +address, caption, cite, code, dfn, em, strong, th, var, optgroup +{ + font-style: inherit; + font-weight: inherit; +} +del, ins +{ + text-decoration: none; +} +li +{ + list-style: none; +} +caption, th +{ + text-align: left; +} +h1, h2, h3, h4, h5, h6 +{ + font-size: 100%; + font-weight: normal; +} +q: before, q: after +{ + content: ''; +} +abbr, acronym +{ + border: 0; + font-variant: normal; +} +sup +{ + vertical-align: baseline; +} +sub +{ + vertical-align: baseline; +} +legend +{ + color: #000; +} +input, button, textarea, select, optgroup, option +{ + font-family: inherit; + font-size: inherit; + font-style: inherit; + font-weight: inherit; +} +input, button, textarea, select +{ + *font-size: 100%; +} + +body +{ + margin: 10px; +} +h1 +{ + font-size: 138.5%; +} +h2 +{ + font-size: 123.1%; +} +h3 +{ + font-size: 108%; +} +h1, h2, h3 +{ + margin: 1em 0; +} +h1, h2, h3, h4, h5, h6, strong, dt +{ + font-weight: bold; +} +optgroup +{ + font-weight: normal; +} +abbr, acronym +{ + border-bottom: 1px dotted #000; + cursor: help; +} +em +{ + font-style: italic; +} +del +{ + text-decoration: line-through; +} +blockquote, ul, ol, dl +{ + margin: 1em; +} +ol, ul, dl +{ + margin-left: 2em; +} +ol li +{ + list-style: decimal outside; +} +ul li +{ + list-style: disc outside; +} +dl dd +{ + margin-left: 1em; +} +th, td +{ + border: 1px solid #000; + padding: .5em; +} +th +{ + font-weight: bold; + text-align: center; +} +caption +{ + margin-bottom: .5em; + text-align: center; +} +sup +{ + vertical-align: super; +} +sub +{ + vertical-align: sub; +} +p, fieldset, table, pre +{ + margin-bottom: 1em; +} +button, input[type="checkbox"], input[type="radio"], + input[type="reset"], input[type="submit"] +{ + padding: 1px; +} diff --git "a/devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/print.min.css" "b/devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/print.min.css" new file mode 100755 index 0000000..176d1c9 --- /dev/null +++ "b/devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/print.min.css" @@ -0,0 +1,18 @@ +/*! +print.css -- css stylesheet used on www.gnu.org + +Copyright (C) 2006, 2007, 2014, 2020 Free Software Foundation + +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. + +*/#header,#navigation,#links,#toplinks,#fsf-links,#back-to-top,#translations,#searcher,.unprintable,#mission-statement,#Disclaimer,#education-content,.edu-breadcrumb,.anchor-reference-id,.back,.skip,#fsf-frame,#languages,#navlinks,.breadcrumb,.backtotop{display:none}.inner{width:100%}body{font-family:Baskerville,Georgia,Garamond,Times,serif;font-size:11pt!important;border:0}h1,h2,h3,h4,h5,h6{border:0;font-family:Baskerville,Georgia,Garamond,Times,serif}div,p,ul,dl,ol{width:auto!important}ul,ol,dl{padding-right:.5em}ul{list-style-type:square}.documentDescription{font-weight:bold}pre{border:1pt dotted black;white-space:pre;font-size:8pt;overflow:auto;padding:1em 0}table,td,th{padding:.3em;border:1pt solid black!important;border-collapse:collapse}table#gpl-compat-matrix td,th.gpl-matrix-border{text-align:center}th.gpl-matrix-license{text-align:right}tr.gpl-matrix-use-type{border-top:.2em solid black}a{color:Black!important;padding:0!important;text-decoration:none!important}a:link,a:visited{color:#520;background:transparent} \ No newline at end of file diff --git "a/devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/search.png" "b/devspec.en_US/gnu-spec/gnu-doc/GNU \345\274\200\345\217\221\350\265\204\346\272\220 - GNU \345\267\245\347\250\213 - \350\207\252\347\224\261\350\275\257\344\273\266\345\237\272\351\207\221\344\274\232_files/search.png" new file mode 100755 index 0000000000000000000000000000000000000000..57688dc5cb7dd7749ebf1583283537eec6748e0a GIT binary patch literal 1136 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 literal 0 HcwPel00001 diff --git a/devspec.en_US/gnu-spec/gnu-doc/Information for Maintainers of GNU Software.html b/devspec.en_US/gnu-spec/gnu-doc/Information for Maintainers of GNU Software.html new file mode 100755 index 0000000..f0bb807 --- /dev/null +++ b/devspec.en_US/gnu-spec/gnu-doc/Information for Maintainers of GNU Software.html @@ -0,0 +1,4144 @@ + + + + +Information for Maintainers of GNU Software + + + + + + + + + + + + + + + + + +

Information for Maintainers of GNU Software

+ + + + + + +
+

Table of Contents

+ +
+ + +
+ + + +
+

+Next: , Up: (dir)   [Contents][Index]

+
+ +

Version

+ +

Information for maintainers of GNU software, last updated April 24, 2020. +

+

Copyright © 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, +2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2019 Free Software Foundation, +Inc. +

+

Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, no Front-Cover Texts, and no Back-Cover +Texts. A copy of the license is included in the section entitled +“GNU Free Documentation License”. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

1 About This Document

+ +

This file contains guidelines and advice for someone who is the +maintainer of a GNU program on behalf of the GNU Project. Everyone is +entitled to change and redistribute GNU software; you need not pay +attention to this file to get permission. But if you want to maintain +a version for widespread distribution, we suggest you follow these +guidelines. If you are or would like to be a GNU maintainer, then it +is essential to follow these guidelines. +

+

In addition to this document, please read and follow the GNU Coding +Standards (see Contents in GNU Coding Standards). +You may also usefully check the “Tips for new GNU maintainers” +(https://www.gnu.org/software/maintainer-tips), a list of the +most important things you will need to do as a new maintainer. +

+ + + +

Please send corrections or suggestions for this document to +bug-standards@gnu.org. If you make a suggestion, please +include suggested new wording if you can. We prefer a context diff to +the Texinfo source, but if that’s difficult for you, you can make a +diff for some other version of this document, or propose it in any way +that makes it clear. The source repository for this document can be +found at https://savannah.gnu.org/projects/gnustandards. +

+ +

If you want to receive diffs for every change to these GNU documents, +join the mailing list gnustandards-commit@gnu.org, for +instance via the web interface at +https://lists.gnu.org/mailman/listinfo/gnustandards-commit. +Archives are also available there. +

+ +

This document uses the gender-neutral third-person pronouns “person” +(which can be shortened to “perse”), “per”, “pers” and +“perself.” These pronouns (aside from “perse”) were promoted, and +perhaps invented, by Marge Piercy in Woman on the Edge of Time. +They are used just like “she”, “her”, “hers” and “herself”, +except that they apply regardless of gender. For example, “Person +placed per new program under the GNU GPL, to maintain freedom for all +users of per work, and this way perse knows perse has done the right +thing.” +

+

This release of the GNU Maintainer Information was last updated +April 24, 2020. +

+
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

2 Getting Help

+ + + +

If you have any general questions or encounter a situation where it +isn’t clear how to get something done or who to ask, you (as a GNU +contributor) can always write to mentors@gnu.org, which is a +list of a few experienced GNU folks who have volunteered to answer +questions. Any GNU-related question is fair game for the +mentors list. +

+ +

The GNU Advisory Committee helps to coordinate activities in the GNU +project on behalf of RMS (Richard Stallman, the Chief GNUisance). If +you have any organizational questions or concerns you can contact the +committee at gnu-advisory@gnu.org. See +https://www.gnu.org/contact/gnu-advisory.html for the current +committee members. Additional information is in +/gd/gnuorg/advisory. +

+ + + +

If you find that any GNU computer systems (fencepost.gnu.org, +ftp.gnu.org, www.gnu.org, savannah.gnu.org, +…) seem to be down, you can check the current status at +https://hostux.social/@fsfstatus. Most likely the problem, if +it can be alleviated at the FSF end, is already being worked on. +

+ + + +

The FSF system administrators maintain the GNU network and server +hardware. You can email them at sysadmin@fsf.org. Please +report any failures in GNU servers to them without delay. Aside from +that, please try not to burden them unnecessarily. +

+
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

3 GNU Accounts and Resources

+ + + + + + +

The directory /gd/gnuorg mentioned throughout this document is +available on the general GNU server, currently +fencepost.gnu.org. If you are the maintainer of a GNU package, +you should have an account there. If you don’t have one already, see +https://www.gnu.org/software/README.accounts.html. Such GNU +login accounts include email (see +https://www.fsf.org/about/systems/sending-mail-via-fencepost). +

+

You can request for accounts for people who significantly help you in +working on the package; we will do this in special cases when there is +a good reason. +

+

Other resources available to GNU maintainers are described at +https://www.gnu.org/software/devel.html, as well as throughout +this document. In brief: +

+
    +
  • Login accounts (see above). + +
  • Version control (see Old Versions). + +
  • Mailing lists (see Mail). + +
  • Web pages (see Web Pages). + +
  • Mirrored release areas (see Distributions). + +
  • + +Pre-release portability testing, both automated (via Hydra) and +on request (via volunteers). + +
+ + +
+ + + +

4 Stepping Down

+ + + +

With good fortune, you will continue maintaining your package for many +decades. But sometimes for various reasons maintainers decide to step +down. +

+

If you’re the official maintainer of a GNU package and you decide to +step down, please inform the GNU Project (maintainers@gnu.org). +We need to know that the package no longer has a maintainer, so we can +look for and appoint a new maintainer. +

+ +

If you have an idea for who should take over, please tell +maintainers@gnu.org your suggestion. The appointment of a new +maintainer needs the GNU Project’s confirmation, but your judgment that +a person is capable of doing the job will carry a lot of weight. +

+

As your final act as maintainer, it would be helpful to set up or +update the package under savannah.gnu.org (see Old Versions). This will make it much easier for the new maintainer to +pick up where you left off and will ensure that the source tree is not +misplaced if it takes us a while to find a new maintainer. +

+ +
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

5 Recruiting Developers

+ +

Unless your package is a fairly small, you probably won’t do all the +work on it yourself. Most maintainers recruit other developers to help. +

+

Sometimes people will offer to help. Some of them will be capable, +while others will not. It’s up to you to determine who provides useful +help, and encourage those people to participate more. +

+

Some of the people who offer to help will support the GNU Project, while +others may be interested for other reasons. Some will support the goals +of the Free Software Movement, but some may not. They are all welcome +to help with the work—we don’t ask people’s views or motivations +before they contribute to GNU packages. +

+

As a consequence, you cannot expect all contributors to support the GNU +Project, or to have a concern for its policies and standards. So part +of your job as maintainer is to exercise your authority on these points +when they arise. No matter how much of the work other people do, you +are in charge of what goes in the release. When a crucial point arises, +you should calmly state your decision and stick to it. +

+

Sometimes a package has several co-maintainers who share the role of +maintainer. Unlike developers who help, co-maintainers have actually +been appointed jointly as the maintainers of the package, and they carry +out the maintainer’s functions together. If you would like to propose +some of your developers as co-maintainers, please contact +maintainers@gnu.org. +

+

We’re happy to acknowledge all major contributors to GNU packages on +the https://www.gnu.org/people/people.html web page. Please send +an entry for yourself to webmasters@gnu.org, and feel free to +suggest it to other significant developers on your package. +

+ +
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

6 Legal Matters

+ + +

This chapter describes procedures you should follow for legal reasons +as you maintain the program, to avoid legal difficulties. +

+ + + + + + + + + + + +
+ + + +

6.1 Copyright Papers

+ + + + +

If you maintain an FSF-copyrighted package, certain legal procedures +are required when incorporating legally significant changes written by +other people. This ensures that the FSF has the legal right to +distribute the package, and the standing to defend its GPL-covered +status in court if necessary. +

+

GNU packages need not be FSF-copyrighted; this is up to the author(s), +generally at the time the package is dubbed GNU. When copyright is +assigned to the FSF, the FSF can act to stop GPL violations about the +package. Otherwise, legal actions are up to the author(s). The rest +of this section is about the case when a package is FSF-copyrighted. +

+

Before incorporating significant changes, make sure that the +person who wrote the changes has signed copyright papers and that the +Free Software Foundation has received and signed them. We may also +need an employer’s disclaimer from the person’s employer, which +confirms that the work was not part of the person’s job and the +employer makes no claim on it. However, a copy of the person’s +employment contract, showing that the employer can’t claim any rights +to this work, is often sufficient. +

+

If the employer does claim the work was part of the person’s job, and +there is no clear basis to say that claim is invalid, then we have to +consider it valid. Then the person cannot assign copyright, but the +employer can. Many companies have done this. Please ask the +appropriate managers to contact assign@gnu.org. +

+ +

To check whether papers have been received, look in +/gd/gnuorg/copyright.list. If you can’t look there directly, +fsf-records@gnu.org can check for you. Our clerk can also +check for papers that are waiting to be entered and inform you when +expected papers arrive. +

+ +

The directory /gd/gnuorg mentioned throughout this document is +available on the general GNU server, currently +fencepost.gnu.org. If you are the maintainer of a GNU package, +you should have an account there. If you don’t have one already, see +https://www.gnu.org/software/README.accounts.html. Such GNU +login accounts include email (see +https://www.fsf.org/about/systems/sending-mail-via-fencepost). +

+

You can request for accounts for people who significantly help you in +working on the package; we will do this in special cases when there is +a good reason. +

+

In order for the contributor to know person should sign papers, you need +to ask per for the necessary papers. If you don’t know per well, and you +don’t know that person is used to our ways of handling copyright papers, +then it might be a good idea to raise the subject with a message like +this: +

+
+

Would you be willing to assign the copyright to the Free Software +Foundation, so that we could install it in package? +

+ +

or +

+
+

Would you be willing to sign a copyright disclaimer to put this change +in the public domain, so that we can install it in package? +

+ +

If the contributor then wants more information, you can send per the file +/gd/gnuorg/conditions.text, which explains per options (assign +vs. disclaim) and their consequences. +

+

Once the conversation is under way and the contributor is ready for +more details, you should send one of the templates that are found in +the directory /gd/gnuorg/Copyright/; they are also available +from the doc/Copyright/ directory of the gnulib project +at https://savannah.gnu.org/projects/gnulib. This section +explains which templates you should use in which circumstances. +Please don’t use any of the templates except for those listed +here, and please don’t change the wording. +

+

Once the conversation is under way, you can send the contributor the +precise wording and instructions by email. Before you do this, make +sure to get the current version of the template you will use! We change +these templates occasionally—don’t keep using an old version. +

+

For large changes, ask the contributor for an assignment. Send per a +copy of the file request-assign.changes. (Like all the +‘request-’ files, it is in /gd/gnuorg/Copyright and in +gnulib.) +

+

For medium to small changes, request a personal disclaimer by sending +per the file request-disclaim.changes. +

+

If the contributor is likely to keep making changes, person might want +to sign an assignment for all per future changes to the program. So it +is useful to offer per that alternative. If person wants to do it that +way, send per the request-assign.future. +

+

When you send a request- file, you don’t need to fill in anything +before sending it. Just send the file verbatim to the contributor. The +file gives per instructions for how to ask the FSF to mail per the +papers to sign. The request- file also raises the issue of +getting an employer’s disclaimer from the contributor’s employer. +

+

When the contributor emails the form to the FSF, the FSF sends per an +electronic (usually PDF) copy of the assignment. This, or whatever +response is required, should happen within five business days of the +initial request. If no reply from the FSF comes after that time, +please send a reminder. If there is still no response after an +additional week, please write to maintainers@gnu.org about it. +

+

After receiving the necessary form, the contributor needs to sign +it. Contributors residing in the USA or Italy may use GPG in order to +sign their assignment. Contributors located anywhere else can print, +sign, and then email (or fax) a scanned copy back to the +FSF. (Specific instructions for both cases are sent with the +assignment form.) They may use postal mail, if they prefer. To +emphasize, the necessary distinction is between residents and +non-residents of these countries; citizenship does not matter. +

+

For less common cases, we have template files you should send to the +contributor. Be sure to fill in the name of the person and the name +of the program in these templates, where it says ‘NAME OF PERSON’ +and ‘NAME OF PROGRAM’, before sending; otherwise person might +sign without noticing them, and the papers would be useless. Note +that in some templates there is more than one place to put the name of +the program or the name of the person; be sure to change all of them. +All the templates raise the issue of an employer’s disclaimer as well. +

+ +

You do not need to ask for separate papers for a manual that is +distributed only in the software package it describes. But if we +sometimes distribute the manual separately (for instance, if we publish +it as a book), then we need separate legal papers for changes in the +manual. For smaller changes, use +disclaim.changes.manual; for larger ones, use +assign.changes.manual. To cover both past and future +changes to a manual, you can use assign.future.manual. +For a translation of a manual, use assign.translation.manual. +

+

For translations of program strings (as used by GNU Gettext, for +example; see Internationalization in GNU Coding +Standards), use disclaim.translation. If you make use of the +Translation Project (https://translationproject.org) facilities, +please check with the TP coordinators that they have sent the +contributor the papers; if they haven’t, then you should send the +papers. In any case, you should wait for the confirmation from the +FSF that the signed papers have been received and accepted before +integrating the new contributor’s material, as usual. +

+

If a contributor is reluctant to sign an assignment for a large change, +and is willing to sign a disclaimer instead, that is acceptable, so you +should offer this alternative if it helps you reach agreement. We +prefer an assignment for a larger change, so that we can enforce the GNU +GPL for the new text, but a disclaimer is enough to let us use the text. +

+

If you maintain a collection of programs, occasionally someone will +contribute an entire separate program or manual that should be added to +the collection. Then you can use the files +request-assign.program, disclaim.program, +assign.manual, and disclaim.manual. We very much prefer +an assignment for a new separate program or manual, unless it is quite +small, but a disclaimer is acceptable if the contributor insists on +handling the matter that way. +

+

When a copyright holder has signed an assignment for all future +changes to the package, and contributes a change made up of new files +which require no change to any of the old files, we want to avoid any +uncertainty about whether these files are intended as a change to the +package and thus covered by that assignment. The way to do this is to +ask the contributor to say so in a message to you — for instance, +“My modules ‘frog’ and ‘kangaroo’ are intended as changes to the +program Hoppers.” Forward the message to assign@gnu.org, +who will save it permanently. A variation on this procedure: the +contributor who wrote the new files can send copies of the new files +which contain such a message. +

+

If a contributor wants the FSF to publish only a pseudonym, that is +ok. The contributor should say this, and state the desired pseudonym, +when answering the request- form. The actual legal papers will +use the real name, but the FSF will publish only the pseudonym. When +using one of the other forms, fill in the real name but ask the +contributor to discuss the use of a pseudonym with +assign@gnu.org before sending back the signed form. +

+

Although there are other templates besides the ones listed here, +they are for special circumstances; please do not use them without +getting advice from assign@gnu.org. +

+

If you are not sure what to do, then please ask assign@gnu.org for +advice; if the contributor asks you questions about the meaning and +consequences of the legal papers, and you don’t know the answers, you +can forward them to assign@gnu.org and we will answer. +

+

Please do not try changing the wording of a template yourself. +If you think a change is needed, please talk with assign@gnu.org, +and we will work with a lawyer to decide what to do. +

+
+ + + +

6.2 Legally Significant Changes

+ +

If a person contributes more than around 15 lines of code and/or text +that is legally significant for copyright purposes, we +need copyright papers for that contribution, as described above. +

+

A change of just a few lines (less than 15 or so) is not legally +significant for copyright. A regular series of repeated changes, such +as renaming a symbol, is not legally significant even if the symbol +has to be renamed in many places. Keep in mind, however, that a +series of minor changes by the same person can add up to a significant +contribution. What counts is the total contribution of the person; it +is irrelevant which parts of it were contributed when. +

+

Copyright does not cover ideas. If someone contributes ideas but no +text, these ideas may be morally significant as contributions, and +worth giving credit for, but they are not significant for copyright +purposes. Likewise, bug reports do not count for copyright purposes. +

+

When giving credit to people whose contributions are not legally +significant for copyright purposes, be careful to make that fact +clear. The credit should clearly say they did not contribute +significant code or text. +

+

When people’s contributions are not legally significant because they +did not write code, do this by stating clearly what their contribution +was. For instance, you could write this: +

+
+
/*
+ * Ideas by:
+ *   Richard Mlynarik <mly@adoc.xerox.com> (1997)
+ *   Masatake Yamato <masata-y@is.aist-nara.ac.jp> (1999)
+ */
+
+ +

Ideas by: makes it clear that Mlynarik and Yamato here +contributed only ideas, not code. Without the Ideas by: note, +several years from now we would find it hard to be sure whether they +had contributed code, and we might have to track them down and ask +them. +

+

When you record a small patch in a change log file, first search for +previous changes by the same person, and see if per past +contributions, plus the new one, add up to something legally +significant. If so, you should get copyright papers for all per +changes before you install the new change. +

+

If that is not so, you can install the small patch. Write ‘(tiny +change)’ after the patch author’s name, like this: +

+
+
2002-11-04  Robert Fenk  <Robert.Fenk@gmx.de>  (tiny change)
+
+ +
+ + + +

6.3 Recording Contributors

+ + +

Keep correct records of which portions were written by whom. +This is very important. These records should say which files or +parts of files were written by each person, and which files or +parts of files were revised by each person. This should include +installation scripts as well as manuals and documentation +files—everything. +

+

These records don’t need to be as detailed as a change log. They +don’t need to distinguish work done at different times, only different +people. They don’t need describe changes in more detail than which +files or parts of a file were changed. And they don’t need to say +anything about the function or purpose of a file or change—the +Register of Copyrights doesn’t care what the text does, just who wrote +or contributed to which parts. +

+

The list should also mention if certain files distributed in the same +package are really a separate program. +

+

Only the contributions that are legally significant for copyright +purposes (see Legally Significant) need to be listed. Small +contributions, bug reports, ideas, etc., can be omitted. +

+

For example, this would describe an early version of GAS: +

+
+
Dean Elsner   first version of all files except gdb-lines.c and m68k.c.
+Jay Fenlason  entire files gdb-lines.c and m68k.c, most of app.c,
+              plus extensive changes in messages.c, input-file.c, write.c
+              and revisions elsewhere.
+
+Note: GAS is distributed with the files obstack.c and obstack.h, but
+they are considered a separate package, not part of GAS proper.
+
+ + +

Please keep these records in a file named AUTHORS in the source +directory for the program itself. +

+

You can use the change log as the basis for these records, if you +wish. Just make sure to record the correct author for each change +(the person who wrote the change, not the person who installed +it), and add ‘(tiny change)’ for those changes that are too +trivial to matter for copyright purposes. Later on you can update the +AUTHORS file from the change log. This can even be done +automatically, if you are careful about the formatting of the change +log entries. +

+

It is ok to include other email addresses, names, and program +information in AUTHORS, such as bug-reporting information. +See Standard Mailing Lists. +

+ +
+ + + +

6.4 Copying from Other Packages

+ +

This section explains legal considerations when merging code from +other packages into your package. Using an entire module as a whole, +and maintaining its separate identity, is a different issue; +see External Libraries. +

+ + + + + +
+ + + +

6.4.1 Non-FSF-Copyrighted Package

+ +

Here we suppose that your package is not FSF-copyrighted. +

+

When you copy legally significant code from another free software +package with a GPL-compatible license, you should look in the +package’s records to find out the authors of the part you are copying, +and list them as the contributors of the code that you copied. If all +you did was copy it, not write it, then for copyright purposes you are +not one of the contributors of this code. +

+

If the code is supposed to be in the public domain, make sure that is +really true: that all the authors of the code have disclaimed +copyright interest. Then, when copying the new files into your +project, add a brief note at the beginning of the files recording the +authors, the public domain status, and anything else relevant. +

+

On the other hand, when merging some public domain code into an +existing file covered by the GPL (or LGPL or other free software +license), there is no reason to indicate the pieces which are public +domain. The notice saying that the whole file is under the GPL (or +other license) is legally sufficient. +

+

Using code that is not in the public domain, but rather released under +a GPL-compatible free license, may require preserving copyright +notices or other steps. Of course, you should follow the requirements +stated. +

+
+ + + +

6.4.2 FSF-Copyrighted Package

+ +

If you are maintaining an FSF-copyrighted package, please don’t copy +in any code without verifying first that we have suitable legal papers +for that code. +

+

If you are copying from another FSF-copyrighted package, then we +presumably have papers for that package’s own code, but you must check +whether the code you are copying is part of an external library; if +that is the case, we don’t have papers for it, so you should not copy +it. It can’t hurt in any case to double-check with the developer of +that package. +

+

When you are copying code for which we do not already have papers, you +need to get papers for it. It may be difficult to get the papers if +the code was not written as a contribution to your package, but that +doesn’t mean it is ok to do without them. If you cannot get papers +for the code, you can only use it as an external library +(see External Libraries). +

+ +
+ + + +

6.5 Copyright Notices

+ + +

You should maintain a proper copyright notice and a license +notice in each nontrivial file in the package. (Any file more than ten +lines long is nontrivial for this purpose.) This includes header files +and interface definitions for +building or running the program, documentation files, and any supporting +files. If a file has been explicitly placed in the public domain, then +instead of a copyright notice, it should have a notice saying explicitly +that it is in the public domain. +

+

Even image files and sound files should contain copyright notices and +license notices, if their format permits. Some formats do not have +room for textual annotations; for these files, state the copyright and +copying permissions in a README file in the same directory. +

+

Change log files should have a copyright notice and license notice at +the end, since new material is added at the beginning but the end +remains the end. +

+

When a file is automatically generated from some other file in the +distribution, it is useful for the automatic procedure to copy the +copyright notice and permission notice of the file it is generated +from, if possible. Alternatively, put a notice at the beginning saying +which file it is generated from. +

+

A copyright notice looks like this: +

+
+
Copyright (C) year1, year2, year3 copyright-holder
+
+ +

The word ‘Copyright’ must always be in English, by international +convention. +

+

The copyright-holder may be the Free Software Foundation, Inc., or +someone else; you should know who is the copyright holder for your +package. +

+

Replace the ‘(C)’ with a C-in-a-circle symbol if it is available. +For example, use ‘@copyright{}’ in a Texinfo file. However, +stick with parenthesized ‘C’ unless you know that C-in-a-circle +will work. For example, a program’s standard --version +message should use parenthesized ‘C’ by default, though message +translations may use C-in-a-circle in locales where that symbol is +known to work. Alternatively, the ‘(C)’ or C-in-a-circle can be +omitted entirely; the word ‘Copyright’ suffices. +

+

To update the list of year numbers, add each year in which you have +made nontrivial changes to the package. (Here we assume you’re using +a publicly accessible revision control server, so that every revision +installed is also immediately and automatically published.) When you +add the new year, it is not required to keep track of which files have +seen significant changes in the new year and which have not. It is +recommended and simpler to add the new year to all files in the +package, and be done with it for the rest of the year. +

+

Don’t delete old year numbers, though; they are significant since they +indicate when older versions might theoretically go into the public +domain, if the movie companies don’t continue buying laws to further +extend copyright. If you copy a file into the package from some other +program, keep the copyright years that come with the file. +

+

You can use a range (‘2008-2010’) instead of listing individual +years (‘2008, 2009, 2010’) if and only if: 1) every year in +the range, inclusive, really is a “copyrightable” year that would be +listed individually; and 2) you make an explicit statement +in a README file about this usage. +

+

For files which are regularly copied from another project (such as +‘gnulib’), leave the copyright notice as it is in the original. +

+

The copyright statement may be split across multiple lines, both in +source files and in any generated output. This often happens for +files with a long history, having many different years of +publication. +

+

For an FSF-copyrighted package, if you have followed the procedures to +obtain legal papers, each file should have just one copyright holder: +the Free Software Foundation, Inc. You should edit the file’s +copyright notice to list that name and only that name. +

+

But if contributors are not all assigning their copyrights to a single +copyright holder, it can easily happen that one file has several +copyright holders. Each contributor of nontrivial text is a copyright +holder. +

+

In that case, you should always include a copyright notice in the name +of main copyright holder of the file. You can also include copyright +notices for other copyright holders as well, and this is a good idea +for those who have contributed a large amount and for those who +specifically ask for notices in their names. (Sometimes the license +on code that you copy in may require preserving certain copyright +notices.) But you don’t have to include a notice for everyone who +contributed to the file (which would be rather inconvenient). +

+

Sometimes a program has an overall copyright notice that refers to the +whole program. It might be in the README file, or it might be +displayed when the program starts up. This copyright notice should +mention the year of completion of the most recent major version; it +can mention years of completion of previous major versions, but that +is optional. +

+ +
+ + + +

6.6 License Notices

+ + +

Every nontrivial file needs a license notice as well as the copyright +notice. (Without a license notice giving permission to copy and +change the file, the file is non-free.) +

+

The package itself should contain a full copy of GPL in plain text +(conventionally in a file named COPYING) and the GNU Free +Documentation License (included within your documentation, so there is +no need for a separate plain text version). If the package contains +any files distributed under the Lesser GPL, it should contain a full +copy of its plain text version also (conventionally in a file named +COPYING.LESSER). +

+

If you have questions about licensing issues for your GNU package, +please write licensing@gnu.org. +

+ + + + + + + + + + +
+ + + +

6.6.1 Licensing of GNU Packages

+ +

Normally, GNU packages should use the latest version of the GNU GPL, +with the “or any later version” formulation. See License Notices for Code, for the exact wording of the license notice. +

+

Occasionally, a GNU library may provide functionality which is already +widely available to proprietary programs through alternative +implementations; for example, the GNU C Library. In such cases, the +Lesser GPL should be used (again, for the notice wording, +see License Notices for Code). If a GNU library provides unique +functionality, however, the GNU GPL should be used. +https://www.gnu.org/licenses/why-not-lgpl.html discusses this +strategic choice. +

+

Some of these libraries need to work with programs released under +GPLv2-only; that is, which allow the GNU GPL version 2 but not later +versions. In this case, the GNU package should be released under a +dual license: GNU GPL version 2 (or any later version) and the GNU +Lesser GPL version 3 (or any later version). Here is the notice for +that case: +

+
+
This file is part of GNU package.
+
+GNU package is free software: you can redistribute it and/or
+modify it under the terms of either:
+
+  * the GNU Lesser General Public License as published by the Free
+    Software Foundation; either version 3 of the License, or (at your
+    option) any later version.
+
+or
+
+  * the GNU General Public License as published by the Free
+    Software Foundation; either version 2 of the License, or (at your
+    option) any later version.
+
+or both in parallel, as here.
+
+GNU package is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received copies of the GNU General Public License and
+the GNU Lesser General Public License along with this program.  If
+not, see https://www.gnu.org/licenses/.
+
+ +

For small packages, you can use “This program” instead of “GNU +package”. +

+ +
+ + + +

6.6.2 Canonical License Sources

+ +

You can get the official versions of these files from several places. +You can use whichever is the most convenient for you. +

+ + +

The official Texinfo sources for the licenses are also available in +those same places, so you can include them in your documentation. A +GFDL-covered manual should include the GFDL in this way. See GNU +Sample Texts in Texinfo, for a full example in a Texinfo +manual. +

+ +
+ + + +

6.6.3 License Notices for Code

+ +

Typically the license notice for program files (including build scripts, +configure files and makefiles) should cite the GPL, like this: +

+
+

This file is part of GNU package. +

+

GNU package is free software: you can redistribute it and/or +modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. +

+

GNU package is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +

+

You should have received a copy of the GNU General Public License +along with this program. If not, see https://www.gnu.org/licenses/. +

+ +

But in a small program which is just a few files, you can use +this instead: +

+
+

This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. +

+

This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +

+

You should have received a copy of the GNU General Public License +along with this program. If not, see https://www.gnu.org/licenses/. +

+ +

In either case, for those few packages which use the Lesser GPL +(see Licensing of GNU Packages), insert the word “Lesser” before +“General” in all three places. +https://www.gnu.org/licenses/gpl-howto.html discusses application +the GPL in more detail. +

+ +
+ + + +

6.6.4 License Notices for Documentation

+ +

Documentation files should have license notices also. Manuals should +use the GNU Free Documentation License. Following is an example of the +license notice to use after the copyright line(s) using all the +features of the GFDL. +

+
+
Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being ``GNU General Public License'', with the
+Front-Cover Texts being ``A GNU Manual'', and with the Back-Cover Texts
+as in (a) below.  A copy of the license is included in the section
+entitled ``GNU Free Documentation License''.
+
+(a) The FSF's Back-Cover Text is: ``You have the freedom to
+copy and modify this GNU manual.  Buying copies from the FSF
+supports it in developing GNU and promoting software freedom.''
+
+ +

If the FSF does not publish this manual on paper, then omit the last +sentence in (a) that talks about copies from GNU Press. If the FSF is +not the copyright holder, then replace ‘FSF’ with the appropriate +name. +

+

Please adjust the list of invariant sections as appropriate for your +manual. If there are none, then say “with no Invariant Sections”. +If your manual is not published by the FSF, and under 400 pages, you +can omit both cover texts. However, if it is copyright FSF, always +ask the FSF what to do. +

+

See GNU Sample Texts in Texinfo, for a full example in a +Texinfo manual, and see +https://www.gnu.org/licenses/fdl-howto.html for more advice about +how to use the GNU FDL. +

+

If you write a manual that people might want to buy on paper, please +write to maintainers@gnu.org to tell the FSF about it. We +might want to publish it. +

+

If the manual is over 400 pages, or if the FSF thinks it might be a +good choice for publishing on paper, then please include the GNU GPL, +as in the notice above. Please also include our standard invariant +section which explains the importance of free documentation. Write to +assign@gnu.org to get a copy of this section. +

+

When you distribute several manuals together in one software package, +their on-line forms can share a single copy of the GFDL (see +section 6). However, the printed (‘.dvi’, ‘.pdf’, +…) forms should each contain a copy of the GFDL, unless they are +set up to be printed and published only together. Therefore, it is +usually simplest to include the GFDL in each manual. +

+
+ + + +

6.6.5 License Notices for Code Examples

+ +

When a code example in documentation is more than two or three lines, +and specific enough that people might want to copy and adapt it, we +suggest putting a copy of the example in a file of code and releasing +that under some free software license. That means it will be +released under two different licenses: in the manual under the GFDL, +and in the code example file under a software license. +

+

If the example is important and nontrivial, and 40 lines or more, we +suggest releasing the code copy under the same license as the program +it pertains to. Otherwise, we recommend releasing it under the X11 license. +

+
+ + + +

6.6.6 License Notices for Other Files

+ +

Small supporting files, short manuals (under 300 lines long) and rough +documentation (README files, INSTALL files, etc.) can +use a simple all-permissive license like this one: +

+
+
Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.  This file is offered as-is,
+without any warranty.
+
+ +

Older versions of this license did not have the second sentence with +the express warranty disclaimer. There is no urgent need to update +existing files, but new files should use the new text. +

+

If your package distributes Autoconf macros that are intended to be +used (hence distributed) by third-party packages under possibly +incompatible licenses, you may also use the above all-permissive +license for these macros. +

+

These kinds of files can also be put in the public domain. If +publishing in the US, it is enough to insert a notice saying so. +Otherwise, use Creative Commons’s CC0—See +https://creativecommons.org/choose/zero/. +

+
+ + + +

6.7 External Libraries

+ +

As maintainer of an FSF-copyrighted GNU package, how do you use +separately-published general-purpose free modules? (We also call them +“libraries” because we are using them as libraries; it doesn’t +matter whether they are packaged as libraries or not.) +

+

It would be unreasonable to ask their authors to assign copyright to +the FSF. They didn’t write those modules as contributions to GNU. We +just happen to want to use them, as any developer might. It would be +rude to ask developers, out of the blue, to give the FSF their +copyright. Please don’t ask for that in cases like these. +

+

The proper way to use those modules is to link your package with them +and say they are not part of your package. See below for the +mechanics of this. +

+

To avoid present or future legal trouble, you must make sure the +license of the module is compatible with current and future GPL +versions. “GNU GPL version 3 or later” is good, and so is anything +which includes permission for use under those GPL versions (including +“GNU GPL version 2 or later”, “LGPL version n or later”, +“LGPL version 2.1”, “GNU Affero GPL version 3 or later”). Lax +permissive licenses are ok too, since they are compatible with all GPL +versions. +

+

“GPL version 2 only” is obviously unacceptable because it is +incompatible with GPL version 3. “GPL version 3 only” and “GPL +version 2 or 3 only” have a subtler problem: they would be incompatible +with GPL version 4, if we ever make one, so the module would become an +obstacle to upgrading your package’s license to “GPL version 4 or +later”. Don’t use such modules. +

+

One library you need to avoid is goffice, since it allows only +GPL versions 2 and 3. +

+

So, here are the mechanics of how to arrange your package to use the +unrelated free module. +

+
    +
  1. Assume the module is already installed on the system, and link with it +when linking your program. This is only reasonable if the module +really has the form of a library. + +
  2. Include the module in your package’s distribution, putting the source +in a separate subdirectory whose README file says, “This is +not part of the GNU FOO program, but is used with GNU FOO.” Then set +up your makefiles to build this module and link it into the +executable. + +

    With this method, it is not necessary to treat the module as a library +and make a ‘.a’ file from it. You can link directly with the +‘.o’ files in the usual manner. +

+ +

Both of these methods create an irregularity, and our lawyers have +told us to minimize the amount of such irregularity. So use these +methods only for general-purpose modules that were not written +for your package. For anything that was written as a contribution to +your package, please get papers signed. +

+
+ +
+

+Previous: , Up: Legal Matters   [Contents][Index]

+
+ +

6.8 Crediting Authors

+ + +

Strictly speaking, this is not a legal issue, but it seems to belong +with copyright notices. +

+

In any FSF-copyrighted GNU package, the authors of a file are not +named in the copyright notice. Therefore, it is nice to include a +comment line ‘Authors: authors of this file’ at the top +near the copyright notice, to give them credit in close association +with their contribution. +

+
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

7 Cleaning Up Changes

+ + + +

Don’t feel obligated to include every change that someone asks you to +include. You must judge which changes are improvements—partly based +on what you think the users will like, and partly based on your own +judgment of what is better. If you think a change is not good, you +should reject it. +

+

If someone sends you changes which are useful, but written in an ugly +way or hard to understand and maintain in the future, don’t hesitate to +ask per to clean up their changes before you merge them. Since the +amount of work we can do is limited, the more we convince others to help +us work efficiently, the faster GNU will advance. +

+

If the contributor will not or can not make the changes clean enough, +then it is legitimate to say “I can’t install this in its present form; +I can only do so if you clean it up.” Invite per to distribute per +changes another way, or to find other people to make them clean enough +for you to install and maintain. +

+

The only reason to do these cleanups yourself is if (1) it is easy, less +work than telling the author what to clean up, or (2) the change is an +important one, important enough to be worth the work of cleaning it up. +

+

The GNU Coding Standards are a good thing to send people when you ask +them to clean up changes (see Contents in GNU Coding +Standards). The Emacs Lisp manual contains an appendix that gives +coding standards for Emacs Lisp programs; it is good to urge Lisp authors to +read it (see Tips and Conventions in The GNU Emacs Lisp +Reference Manual). +

+
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

8 Platforms to Support

+ +

Most GNU packages run on a wide range of platforms. These platforms are +not equally important. +

+

The most important platforms for a GNU package to support are GNU and +GNU/Linux. Developing the GNU operating system is the whole point of +the GNU Project; a GNU package exists to make the whole GNU system more +powerful. So please keep that goal in mind and let it shape your work. +For instance, every new feature you add should work on GNU, and +GNU/Linux if possible too. If a new feature only runs on GNU and +GNU/Linux, it could still be acceptable. However, a feature that runs +only on other systems and not on GNU or GNU/Linux makes no sense in a +GNU package. +

+

You will naturally want to keep the program running on all the platforms +it supports. But you personally will not have access to most of these +platforms—so how should you do it? +

+

Don’t worry about trying to get access to all of these platforms. Even +if you did have access to all the platforms, it would be inefficient for +you to test the program on each platform yourself. Instead, you should +test the program on a few platforms, including GNU or GNU/Linux, and let +the users test it on the other platforms. You can do this through a +pretest phase before the real release; when there is no reason to expect +problems, in a package that is mostly portable, you can just make a +release and let the users tell you if anything unportable was +introduced. +

+

It is important to test the program personally on GNU or GNU/Linux, +because these are the most important platforms for a GNU package. If +you don’t have access to one of these platforms, as a GNU maintainer +you can get access to the general GNU login machine; see +https://www.gnu.org/software/README.accounts.html. +

+

Supporting other platforms is optional—we do it when that seems like +a good idea, but we don’t consider it obligatory. If the users don’t +take care of a certain platform, you may have to desupport it unless +and until users come forward to help. Conversely, if a user offers +changes to support an additional platform, you will probably want to +install them, but you don’t have to. If you feel the changes are +complex and ugly, if you think that they will increase the burden of +future maintenance, you can and should reject them. This includes +both free or mainly-free platforms such as OpenBSD, FreeBSD, and +NetBSD, and non-free platforms such as Windows. +

+ +
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

9 Dealing With Mail

+ + +

This chapter describes setting up mailing lists for your package, and +gives advice on how to handle bug reports and random requests once you +have them. +

+ + + + + + + +
+ +
+

+Next: , Up: Mail   [Contents][Index]

+
+ +

9.1 Standard Mailing Lists

+ + + + + +

Once a program is in use, you will get bug reports for it. Most GNU +programs have their own special lists for sending bug reports. The +advertised bug-reporting email address should always be +‘bug-package@gnu.org’, to help show users that the program +is a GNU package, but it is ok to set up that list to forward to another +site if you prefer. +

+ +

We also have a catch-all list, bug-gnu-utils@gnu.org, which is +used for all GNU programs that don’t have their own specific lists. But +nowadays we want to give each program its own bug-reporting list and +move away from using bug-gnu-utils. +

+

See Replying to Mail, for more about handling and tracking bug +reports. +

+ +

Some GNU programs with many users have another mailing list, +‘help-package@gnu.org’, for people to ask other users for +help. If your program has many users, you should create such a list +for it. For a fairly new program, which doesn’t have a large user +base yet, it is better not to bother with this. +

+ +

If you wish, you can also have a mailing list +‘info-package@gnu.org’ for announcements +(see Announcements). Any other mailing lists you find useful can +also be created. +

+

The package distribution should state the name of all the package’s +mailing lists in a prominent place, and ask users to help us by +reporting bugs appropriately. The top-level README file and/or +AUTHORS file are good places. Mailing list information should +also be included in the manual and the package web pages (see Web Pages). +

+ + +
+ +
+

+Next: , Previous: , Up: Mail   [Contents][Index]

+
+ +

9.2 Creating Mailing Lists

+ + + + +

Using the web interface on savannah.gnu.org is by far the +easiest way to create normal mailing lists, managed through Mailman on +the GNU mail server. Once you register your package on Savannah, you +can create (and remove) lists yourself through the ‘Mailing Lists’ +menu, without needing to wait for intervention by anyone else. +Furthermore, lists created through Savannah will have a reasonable +default configuration for antispam purposes (see below). +

+

To create and maintain simple aliases and unmanaged lists, you can +edit /com/mailer/aliases on the main GNU server. If you don’t +have an account there, please read +https://www.gnu.org/software/README.accounts.html (see GNU Accounts and Resources). +

+

But if you don’t want to learn how to do those things, you can ask +savannah-hackers@gnu.org to help you. +

+ +

You should moderate postings from non-subscribed addresses on your +mailing lists, to prevent propagation of unwanted messages (“spam”) +to subscribers and to the list archives. For lists controlled by +Mailman, you can do this by setting Privacy Options - Sender +Filter - generic_nonmember_action to Hold, and then +periodically (daily is best) reviewing the held messages, accepting +the real ones and discarding the junk. +

+

Lists created through Savannah will have this setting, and a number of +others, such that spam will be automatically deleted (after a short +delay). The Savannah mailing list page describes all the details. +You should still review the held messages in order to approve any that +are real. +

+ +
+ +
+

+Previous: , Up: Mail   [Contents][Index]

+
+ +

9.3 Replying to Mail

+ + + + + +

When you receive bug reports, keep in mind that bug reports are crucial +for your work. If you don’t know about problems, you cannot fix them. +So always thank each person who sends a bug report. +

+

You don’t have an obligation to give more response than that, though. +The main purpose of bug reports is to help you contribute to the +community by improving the next version of the program. Many of the +people who report bugs don’t realize this—they think that the point is +for you to help them individually. Some will ask you to focus on that +instead of on making the program better. If you comply with +their wishes, you will have been distracted from the job of maintaining +the program. +

+

For example, people sometimes report a bug in a vague (and therefore +useless) way, and when you ask for more information, they say, “I just +wanted to see if you already knew the solution” (in which case the bug +report would do nothing to help improve the program). When this +happens, you should explain to them the real purpose of bug reports. (A +canned explanation will make this more efficient.) +

+

When people ask you to put your time into helping them use the program, +it may seem “helpful” to do what they ask. But it is much less +helpful than improving the program, which is the maintainer’s real job. +

+

By all means help individual users when you feel like it, if you feel +you have the time available. But be careful to limit the amount of time +you spend doing this—don’t let it eat away the time you need to +maintain the program! Know how to say no; when you are pressed for +time, just “thanks for the bug report—I will fix it” is enough +response. +

+

Some GNU packages, such as Emacs and GCC, come with advice about how +to make bug reports useful. Copying and adapting that could be very +useful for your package. +

+ + + +

If you would like to use an email-based bug tracking system, see +https://bugs.gnu.org; this can be connected with the regular +bug-reporting address. Alternatively, if you would like to use a +web-based bug tracking system, Savannah supports this (see Old Versions), but please don’t fail to accept bugs by regular email as +well—we don’t want to put up unnecessary barriers against users +submitting reports. +

+ +
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

10 Recording Old Versions

+ + +

It is very important to keep backup files of all source files of GNU. +You can do this using a source control system (such as Bazaar, RCS, +CVS, Git, Subversion, …) if you like. An easy way to use +many such systems is via the Version Control library in Emacs +(see Introduction to Version Control in The GNU Emacs Manual). +

+

The history of previous revisions and log entries is very important for +future maintainers of the package, so even if you do not make it +publicly accessible, be careful not to put anything in the repository or +change log that you would not want to hand over to another maintainer +some day. +

+ +

The GNU Project provides a server that GNU packages can use +for source control and other package needs: savannah.gnu.org. +Savannah is managed by savannah-hackers@gnu.org. For more +details on using and contributing to Savannah, see +https://savannah.gnu.org/maintenance. +

+

It’s not an absolute requirement, but all GNU maintainers are strongly +encouraged to take advantage of Savannah, as sharing such a central +point can serve to foster a sense of community among GNU developers as +well as help in keeping up with project management. Please don’t mark +Savannah projects for GNU packages as private; that defeats a large +part of the purpose of using Savannah in the first place. +

+ +

If you do use Savannah, please subscribe to the +savannah-announce@gnu.org mailing list +(https://lists.gnu.org/mailman/listinfo/savannah-announce). This +is a very low-volume list to keep Savannah users informed of system +upgrades, problems, and the like. +

+ +
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

11 Distributions

+ +

Please follow the GNU conventions when making GNU software +distributions. +

+ + + + + + + + + + +
+ + + +

11.1 Distribution tar Files

+ + +

All packages should provide tar files for the distribution of their +releases. The tar file for version m.n of program +foo should be named foo-m.n.tar. It should +unpack into a subdirectory named foo-m.n. Tar +files should not unpack into files in the current directory, because +this is inconvenient if the user happens to unpack into a directory +with other files in it. +

+

Here is how the Makefile for Bison creates the tar file. +This method is good for other programs. +

+
+
dist: bison.info
+        echo bison-`sed -e '/version_string/!d' \
+          -e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q version.c` > .fname
+        -rm -rf `cat .fname`
+        mkdir `cat .fname`
+        dst=`cat .fname`; for f in $(DISTFILES); do \
+           ln $(srcdir)/$$f $$dst/$$f || { echo copying $$f; \
+             cp -p $(srcdir)/$$f $$dst/$$f ; } \
+        done
+        tar --gzip -chf `cat .fname`.tar.gz `cat .fname`
+        -rm -rf `cat .fname` .fname
+
+ +

Source files that are symbolic links to other file systems cannot be +installed in the temporary directory using ln, so use cp +if ln fails. +

+ +

Using Automake is a good way to take care of writing the dist +target. +

+
+ + + +

11.2 Distribution Patches

+ + +

If the program is large, it is useful to make a set of diffs for each +release, against the previous important release. +

+

At the front of the set of diffs, put a short explanation of which +version this is for and which previous version it is relative to. +Also explain what else people need to do to update the sources +properly (for example, delete or rename certain files before +installing the diffs). +

+

The purpose of having diffs is that they are small. To keep them +small, exclude files that the user can easily update. For example, +exclude info files, DVI files, tags tables, output files of Bison or +Flex. In Emacs diffs, we exclude compiled Lisp files, leaving it up +to the installer to recompile the patched sources. +

+

When you make the diffs, each version should be in a directory suitably +named—for example, gcc-2.3.2 and gcc-2.3.3. This way, +it will be very clear from the diffs themselves which version is which. +

+ + + +

If you use GNU diff to make the patch, use the options +‘-rc2P’. That will put any new files into the output as “entirely +different”. Also, the patch’s context diff headers should have dates +and times in Universal Time using traditional Unix format, so that patch +recipients can use GNU patch’s ‘-Z’ option. For example, +you could use the following Bourne shell command to create the patch: +

+
+
LC_ALL=C TZ=UTC0 diff -rc2P gcc-2.3.2 gcc-2.3.3 | \
+gzip -9 >gcc-2.3.2-2.3.3.patch.gz
+
+ +

If the distribution has subdirectories in it, then the diffs probably +include some files in the subdirectories. To help users install such +patches reliably, give them precise directions for how to run patch. +For example, say this: +

+
+
To apply these patches, cd to the main directory of the program
+and then use ‘patch -p1’.   ‘-p1’ avoids guesswork in choosing
+which subdirectory to find each file in.
+
+ +

It’s wise to test your patch by applying it to a copy of the old +version, and checking that the result exactly matches the new version. +

+
+ + + +

11.3 Binary Distribution for Nonfree Platforms

+ +

Some package maintainers release pre-compiled binaries for proprietary +systems such as Microsoft Windows or MacOS. It’s entirely up to you +whether to do that; we don’t ask you to do it, but we don’t object. +Please do not let anyone make you feel you have an obligation to do +this. +

+

If you distribute them, please inform their users prominently that +those non-free platforms trample their freedom. It is useful to refer +them to +https://www.gnu.org/philosophy/free-software-even-more-important.html. +You can say, “This program respects your freedom, but Windows does +not. To have freedom, you need to stop using Windows and other +software that denies your freedom.” +

+
+ + + +

11.4 Distribution on ftp.gnu.org

+ + + +

We strongly recommend using ftp.gnu.org to distribute official +releases. If you want to also distribute the package from a site of +your own, that is fine. To use some other site instead of +ftp.gnu.org is acceptable, provided it allows connections from +anyone anywhere. +

+

See Automated FTP Uploads, for the procedural details of putting +new versions on ftp.gnu.org. +

+ +
+ + + +

11.5 Test Releases

+ + + + + +

When you release a greatly changed new major version of a program, you +might want to do so as a pretest. This means that you make a tar file, +but send it only to a group of volunteers that you have recruited. (Use +a suitable GNU mailing list/newsgroup to recruit them.) +

+

We normally use the server alpha.gnu.org for pretests and +prerelease versions. See Automated FTP Uploads, for the procedural +details of putting new versions on alpha.gnu.org. +

+

Once a program gets to be widely used and people expect it to work +solidly, it is a good idea to do pretest releases before each “real” +release. +

+

There are three ways of handling version numbers for pretest versions. +One method is to treat them as versions preceding the release you are going +to make. +

+

In this method, if you are about to release version 4.6 but you want +to do a pretest first, call it 4.5.90. If you need a second pretest, +call it 4.5.91, and so on. If you are really unlucky and ten pretests +are not enough, after 4.5.99 you could advance to 4.5.990 and so on. +(You could also use 4.5.100, but 990 has the advantage of sorting in +the right order.) +

+

Another method is to attach a date to the release number that is +coming. For a pretest for version 4.6, made on Dec 10, 2002, this +would be 4.6.20021210. A second pretest made the same day could be +4.6.20021210.1. +

+

For development snapshots that are not formal pretests, using just +the date without the version numbers is ok too. +

+

A third method, if the package uses Git, is to run the script +build-aux/git-version-gen from Gnulib to generate test release +version numbers. It generates version numbers in the form +‘version.commits-commithash’, where +version is the latest version tag, commits is the number +of commits since that tag, and commithash is a hash code for the +latest commit. +

+

One thing that you should never do is to release a pretest with the same +version number as the planned real release. Many people will look only +at the version number (in the tar file name, in the directory name that +it unpacks into, or wherever they can find it) to determine whether a +tar file is the latest version. People might look at the test release +in this way and mistake it for the real release. Therefore, always +change the number when you release changed code. +

+ +
+ +
+

+Next: , Previous: , Up: Distributions   [Contents][Index]

+
+ +

11.6 Automated FTP Uploads

+ + +

In order to upload new releases to ftp.gnu.org or +alpha.gnu.org, you first need to register the necessary +information. Then, you can perform uploads yourself, with no +intervention needed by the system administrators. +

+

The general idea is that releases should be cryptographically signed +before they are made publicly available. +

+ + + + + + + + + + + + + +
+ + + +

11.6.1 Automated Upload Registration

+ + + + +

Here is how to register your information so you can perform uploads +for your GNU package: +

+
    +
  1. Create an account for yourself at https://savannah.gnu.org, if +you don’t already have one. By the way, this is also needed to +maintain the web pages at https://www.gnu.org for your project +(see Web Pages). + +
  2. In the ‘My Account Conf’ page on savannah, upload the GPG +key (in ASCII-armored format) that you will use to sign your packages. +If you haven’t created one before, you can do so with the command +gpg --gen-key (you can accept and/or confirm the default +answers to its questions). Then, to get the ASCII-armored version, +run ‘gpg --export --armor your_key_id’. + +

    Optional but recommended: Send your key to a GPG public key server: +gpg --keyserver keys.gnupg.net --send-keys keyid, where +keyid is the eight hex digits reported by gpg +--list-public-keys on the pub line before the date. For full +information about GPG, see https://www.gnu.org/software/gpg. +

    +
  3. Compose a message with the following items in some msgfile. +Then GPG-sign it by running gpg --clearsign msgfile, and +finally email the resulting msgfile.asc as an attachment to +ftp-upload@gnu.org. + +
      +
    1. Name of package(s) that you are the maintainer for, your +preferred email address, and your Savannah username. + +
    2. The ASCII armored copy of your GPG key, as an attachment. + +
    3. A list of names and preferred email addresses of other individuals you +authorize to make releases for which packages, if any (in the case that you +don’t make all releases yourself). + +
    4. ASCII armored copies of GPG keys for any individuals listed in (3). +
    +
+ +

The administrators will acknowledge your message when they have added +the proper GPG keys as authorized to upload files for the +corresponding packages. +

+

The upload system will email receipts to the given email addresses +when an upload is made, either successfully or unsuccessfully. +

+

Should you later have to update your GPG key, you’ll have to re-submit +it to both Savannah and ftp-upload@gnu.org, as these systems +are not connected. +

+ +
+ + + +

11.6.2 Automated Upload Procedure

+ + + +

Once you have registered your information as described in the previous +section, you can and should do ftp uploads for your package. There +are two basic kinds of uploads (details in the following sections): +

+
    +
  1. Three related files (a “triplet”) to upload a file destined for +ftp.gnu.org or alpha.gnu.org: see FTP Upload Release File Triplet. + +
  2. A single (signed) standalone “directive file” to perform operations +on the server: see FTP Upload Standalone Directives. +
+ +

In either case, you upload the file(s) via anonymous ftp to the host +ftp-upload.gnu.org. If the upload is destined for +ftp.gnu.org, place the file(s) in the directory +/incoming/ftp. If the upload is destined for +alpha.gnu.org, place the file(s) in the directory +/incoming/alpha. +

+

Uploads are processed every five minutes. Uploads that are in +progress while the upload processing script is running are handled +properly, so do not worry about the timing of your upload. Spurious +and stale uploaded files are deleted automatically after 24 hours. +

+

Your designated upload email addresses (see Automated Upload Registration) are sent a message if there are problems processing an +upload for your package. You also receive a message when an upload +has been successfully processed. +

+

One programmatic way to create and transfer the necessary files is to +use the gnupload script, which is available from the +build-aux/ directory of the gnulib project at +https://savannah.gnu.org/projects/gnulib. Run +gnupload --help for a description and examples. (With +gnupload, you specify a destination such as +‘ftp.gnu.org:pkgname rather than using the +‘ftp-upload’ hostname.) +

+

gnupload invokes the program ncftpput to do the actual +transfers; if you don’t happen to have the ncftp package +installed, the ncftpput-ftp script in the build-aux/ +directory of gnulib can serve as a replacement. It uses the +plain command line ftp program. +

+

If you have difficulties with an upload, email +ftp-upload@gnu.org. You can check the archive of uploads +processed at +https://lists.gnu.org/archive/html/ftp-upload-report. +

+ +
+ + + +

11.6.3 FTP Upload Release File Triplet

+ + + +

Ordinarily, the goal is to upload a new release of your package, let’s +say, the source archive foo-1.0.tar.gz. To do this, you +simultaneously upload three files: +

+
    +
  1. The file to be distributed; in our example, foo-1.0.tar.gz. + +
  2. Detached GPG binary signature file for (1); for example, +foo-1.0.tar.gz.sig. Make this with ‘gpg -b foo-1.0.tar.gz’. + +
  3. A clearsigned directive file; for example, +foo-1.0.tar.gz.directive.asc, created with ‘gpg +--clearsign foo-1.0.tar.gz.directive’. Its contents are described in +the next section. +
+ +

The names of the files are important. The signature file must have +the same name as the file to be distributed, with an additional +.sig extension. The directive file must have the same name as +the file to be distributed, with an additional .directive.asc +extension. If you do not follow this naming convention, the upload +will not be processed. +

+ +
+ + + +

11.6.4 FTP Upload Directive File

+ + + +

To repeat, a (signed) directive file must be part of every +upload. The unsigned original is just a plain text file you can +create with any text editor. Its name must be, e.g., +foo-1.0.tar.gz.directive for accompanying an upload of +foo-1.0.tar.gz. +

+

After creating the file, run ‘gpg --clearsign +foo-1.0.tar.gz.directive’, which will create +foo-1.0.tar.gz.directive.asc; this is the file to be uploaded. +

+

When part of a triplet for uploading a release file, the directive +file must always contain the directives version, +filename and directory. In addition, a comment +directive is optional. These directives can be given in any order. +

+

Continuing our example of uploading foo-1.0.tar.gz for a +package named foo to ftp.gnu.org, the values would be as +follows: +

+
+
version
+

must be the value ‘1.2’ (the current version, as of May 2012):
+version: 1.2 +

+
+
filename
+

must be the name of the file to be distributed:
+filename: foo-1.0.tar.gz +

+
+
directory
+

specifies the final destination directory where the uploaded file and +its .sig companion are to be placed. Here we will put our file +in the top level directory of the package, as is the most common +practice:
+directory: foo +

+
+
comment
+

is optional, and ignored if present:
+comment: let's hope this works! +

+
+ +

Putting all of the above together, the complete contents of the +directive file foo-1.0.tar.gz.directive for our example would +be: +

+
+
version: 1.2
+directory: foo
+filename: foo-1.0.tar.gz
+comment: let's hope this works!
+
+ +

Then you ‘gpg --clearsign’ the file as given above, and upload +(using anonymous ftp) the three files: +

+
+
foo-1.0.tar.gz
+
foo-1.0.tar.gz.sig
+
foo-1.0.tar.gz.directive.asc
+
+ +

to the host ftp-upload.gnu.org, directory +/incoming/ftp (for official releases), or the directory +/incoming/alpha (for test releases). +

+

After the system authenticates the signatures, the files +foo-1.0.tar.gz and foo-1.0.tar.gz.sig are placed in +the directory gnu/foo/ on ftp.gnu.org. That is, we’ll +have made our release available at +‘https://ftp.gnu.org/gnu/foo/foo-1.0.tar.gz’ (and then from +our many mirrors via +‘https://ftpmirror.gnu.org/foo/foo-1.0.tar.gz’). Whew. +

+

A common reason for the upload not succeeding is your GPG signature +not being registered with the upload system. There is nothing that +makes this happen automatically. You must email the system +administrators as described above (see Automated Upload Registration). +

+ +
+ + + +

11.6.5 FTP Upload Directory Trees

+ + + + + +

You can make any directory hierarchy you like under your package +directory. The system automatically creates any intermediate +directories you specify in the directory directive. +

+

Slightly modifying the example above, the following directive file: +

+
+
version: 1.2
+directory: foo/foo-1.0
+filename: foo-1.0.tar.gz
+comment: creates per-version subdirectory as needed
+
+ +

would put the tar file in the foo-1.0/ subdirectory of the +package foo, thus ending up at +‘ftp.gnu.org:gnu/foo/foo-1.0/foo-1.0.tar.gz’. +

+

However, to keep things simpler for users, we recommend not using +subdirectories, unless perhaps each release of your package consists +of many separate files. +

+ +
+ + + +

11.6.6 FTP Upload File Replacement

+ + + + +

You can replace existing files that have already been uploaded by +including a directive line replace: true. For example, +you might like to provide a README file in the release directory and +update it from time to time. The full directive file for that would +look like this: +

+
+
replace: true
+version: 1.2
+directory: foo
+filename: README
+comment: replaces an existing README
+
+ +

It is ok if the file to be replaced doesn’t already exist; then the +new file is simply added, i.e., the replace directive has no +effect. +

+

When an existing file is replaced, the original is archived to a +private location. There is no automated or public access to such +archived files; if you want to retrieve or view them, please email +sysadmin@fsf.org. +

+

We very strongly discourage replacing an actual software release file, +such as foo-1.0.tar.gz. Releases should be unique, and +forever. If you need to make fixes, make another release. If you +have an exigent reason for a particular release file to no longer be +available, it can be explicitly archived, as described in the next +section. +

+

If you want to make the current release available under a generic +name, such as foo-latest.tar.gz, that is better done with +symlinks, also as described in the next section. +

+ +
+ + + +

11.6.7 FTP Upload Standalone Directives

+ + + + +

The previous sections describe how to upload a file to be publicly +released. It’s also possible to upload a directive file by itself to +perform a few operations on the upload directory. The supported +directives are: +

+
+
symlink
+

creates a symlink. +

+
+
rmsymlink
+

removes a symlink. +

+
+
archive
+

takes a file or directory offline. +

+
+ +

As for the directives described above, the directory and +version directives are still required, the comment +directive remains optional, and the filename directive is not +allowed. +

+

The .sig file should not be explicitly mentioned in a directive. +When you specify a directive to operate on a file, its corresponding +.sig file will be handled automatically. +

+

When uploaded by itself, the name of the directive file is not +important. But it must be still be signed, using ‘gpg +--clearsign’; the resulting .asc file is what should be +uploaded. +

+

Here’s an example of the full directive file to create a +foo-latest.tar.gz symlink: +

+
+
version: 1.2
+directory: foo
+symlink: foo-1.1.tar.gz foo-latest.tar.gz
+comment: create a symlink
+
+ +

If you include more than one directive in a standalone upload, the +directives are executed in the sequence they are specified in. If a +directive results in an error, further execution of the upload is +aborted. +

+

Removing a symbolic link (with rmsymlink) which does not exist +results in an error. On the other hand, attempting to create a +symbolic link that already exists (with symlink) is not an +error. In this case symlink behaves like the command +ln -s -f: any existing symlink is removed before creating +the link. (But an existing regular file or directory is not replaced.) +

+

Here’s an example of removing a symlink, e.g., if you decide not to +maintain a foo-latest link any more: +

+
+
version: 1.2
+directory: foo
+rmsymlink: foo-latest.tar.gz
+comment: remove a symlink
+
+ +

And here’s an example of archiving a file, e.g., an unintended upload: +

+
+
version: 1.2
+directory: foo
+archive: foo-1.1x.tar.gz
+comment: archive an old file; it will not be
+comment: publicly available any more.
+
+ +

The archive directive causes the specified items to become +inaccessible. This should only be used when it is actively bad for +them to be available, e.g., you uploaded something by mistake. +

+

If all you want to do is reduce how much stuff is in your release +directory, an alternative is to email sysadmin@fsf.org and +ask them to move old items to the https://ftp.gnu.org/old-gnu/ +directory; then they will still be available. In general, however, we +recommend leaving all official releases in the main release directory. +

+ +
+ + + +

11.6.8 FTP Upload Directive File - v1.1

+ +

The v1.1 protocol for uploads lacked the replace directive; +instead, file replacements were done automatically and silently +(clearly undesirable). This is the only difference between v1.2 and +v1.1. +

+ +
+ + + +

11.6.9 FTP Upload Directive File - v1.0

+ +

Support for v1.0 uploads was discontinued in May 2012; please upgrade +to v1.2. +

+

In v1.0, the directive file contained one line, excluding the +clearsigned data GPG that inserts, which specifies the final +destination directory where items (1) and (2) are to be placed. +

+

For example, the foo-1.0.tar.gz.directive.asc file might contain the +single line: +

+
+
directory: bar/v1
+
+ +

This directory line indicates that foo-1.0.tar.gz and +foo-1.0.tar.gz.sig are part of package bar. If you were to +upload the triplet to /incoming/ftp, and the system can +positively authenticate the signatures, then the files +foo-1.0.tar.gz and foo-1.0.tar.gz.sig will be placed in the +directory gnu/bar/v1 of the ftp.gnu.org site. +

+

The directive file can be used to create currently non-existent +directory trees, as long as they are under the package directory for +your package (in the example above, that is bar). +

+ +
+ + + +

11.7 Announcing Releases

+ + + +

When you have a new release, please make an announcement. For +official new releases, including those made just to fix bugs, we +strongly recommend using the (moderated) general GNU announcements +list, info-gnu@gnu.org. Doing so makes it easier for users +and developers to find the latest GNU releases. On the other hand, +please do not announce test releases on info-gnu unless it’s a +highly unusual situation. +

+ + +

Please also post release announcements in the news section of your +Savannah project site. Here, it is fine to also write news entries +for test releases and any other newsworthy events. The news feeds +from all GNU projects at savannah are aggregated at +https://planet.gnu.org (GNU Planet), unless the text of the entry +contains the string ‘::noplanet::’. You can also post items +directly, or arrange for feeds from other locations; see information +on the GNU Planet web page. +

+ +

You can maintain your own mailing list (typically +‘info-package@gnu.org’) for announcements as well if you +like. For your own list, of course you decide as you see fit what +events are worth announcing. (See Mail, for setting this up, and +more suggestions on handling mail for your package.) +

+ +

When writing an announcement, please include the following: +

+
    +
  • A very brief description (a few sentences at most) of the general +purpose of your package. + +
  • Your package’s web page (normally +‘https://www.gnu.org/software/package/’). + +
  • Your package’s download location (normally +‘https://ftp.gnu.org/gnu/package/’). It is also +useful to mention the mirror list at +https://www.gnu.org/order/ftp.html, and that +‘https://ftpmirror.gnu.org/package/’ will automatically +redirect to a nearby mirror. + +
  • The NEWS (see NEWS File in GNU Coding Standards) for +the present release. +
+ +

You may find the announce-gen script useful for creating +announcements, which is available from the build-aux/ directory +of the gnulib project at +https://savannah.gnu.org/projects/gnulib. +

+ +
+ + + +

12 Web Pages

+ + +

As soon as a new package is dubbed GNU, its home page +(‘https://www.gnu.org/software/package/’) +is listed on +https://www.gnu.org/software/software.html and +https://www.gnu.org/manual/manual.html. To avoid broken links, +the webmasters create a temporary home page as follows: +

+
    +
  • If there is a Savannah project for this package (see Hosting for Web Pages), the temporary home page redirects to the project’s main +page, ‘https://savannah.gnu.org/projects/package’, +where a short description should be available. + +
  • Otherwise, the webmasters make a simple home page containing the short +description provided with the original submission of the package to GNU. +
+ +

This temporary home page ought to be replaced with the real one as soon +as possible. +

+

Some GNU packages have just simple web pages, but the more information +you provide, the better. So please write as much as you usefully can, +and put all of it on www.gnu.org. However, pages that access +databases (including mail archives and bug tracking) are an exception; +set them up on whatever site is convenient for you, and make the pages +on www.gnu.org link to that site. +

+

Your web pages should follow our usual standards (see +https://www.gnu.org/server/fsf-html-style-sheet.html). The +overall goals are to support a wide variety of browsers, to focus on +information rather than visual adornments, and to keep gnu.org/software/ +consistent on certain important points. +

+

We encourage you to use the standard www.gnu.org template as +the basis for your pages: +https://www.gnu.org/server/standards/boilerplate-source.html. +This template changes slightly from time to time for various reasons. If +a change affects existing web pages, the webmasters will inform you; +then you can make the change or they can. +

+

Please follow the best practices of accessibility in your web pages +(see https://www.gnu.org/accessibility/accessibility.html). +

+ + + + + + + +
+ + + +

12.1 Hosting for Web Pages

+ + +

The best way to maintain the web pages for your project is to register +the project on savannah.gnu.org. Then you can edit the pages +using CVS, using the separate “web pages repository” available on +Savannah, which corresponds to +‘https://www.gnu.org/software/package/’. You can +keep your source files there too (using any of a variety of version +control systems), but you can use savannah.gnu.org only for +your gnu.org web pages if you wish; simply register a “web-only” +project. +

+

If you don’t want to use that method, please talk with +webmasters@gnu.org about other possible methods. For +instance, you can mail them pages to install, if necessary. But that +is more work for them, so please use Savannah if you can. +

+

Please note that the GNU webmasters may fix technical details in your +web pages (HTML, CSS, obvious typos, broken links in the footer, etc.) +and inform you of the change afterwards. +

+

If you use Savannah, you can use a special file named .symlinks +in order to create symbolic links, which are not supported in CVS. +For details, see +https://www.gnu.org/server/standards/README.webmastering.html#symlinks. +

+ +
+ + + +

12.2 Freedom for Web Pages

+ + +

If you use a site other than www.gnu.org, please make sure that +the site runs on free software alone. (It is ok if the site uses +unreleased custom software, since that is free in a trivial sense: +there’s only one user and it has the four freedoms.) If the web site +for a GNU package runs on non-free software, the public will see this, +and it will have the effect of granting legitimacy to the non-free +program. +

+

If you use multiple sites, they should all follow that criterion. +Please don’t link to a site that is about your package, which the +public might perceive as connected with it and reflecting the position +of its developers, unless it follows that criterion. +

+

Please make sure it is possible to use the web site fully using the +Lynx browser, and with the IceCat browser with LibreJS enabled. It +should work both with Tor and without Tor. Of course, it is desirable +for the site to support as many other browsers as possible. +

+

Historically, web pages for GNU packages did not include GIF images, +because of patent problems (see Ethical and Philosophical Consideration). Although the GIF patents expired in 2006, using GIF +images is still not recommended, as the PNG and JPEG formats are +generally superior. See https://www.gnu.org/philosophy/gif.html. +

+

Please make sure that any Javascript code in your web pages is covered +by a free license, and has its license indicated in a way LibreJS can +recognize. See https://gnu.org/philosophy/javascript-trap.html. +If the Javascript in the page is minified, or for any other reason is +not the source code, it must point to its source code as described +there. +

+
+ + + +

12.3 Manuals on Web Pages

+ + + +

The web pages for the package should include its manuals, in HTML, +DVI, Info, PDF, plain ASCII, and the source Texinfo. All of these can +be generated automatically from Texinfo using Makeinfo and other +programs. If the Texinfo itself is generated from some other source +format, include that too. +

+

When there is only one manual, put it in a subdirectory called +manual; the file manual/index.html should have a link to +the manual in each of its forms. +

+

If the package has more than one manual, put each one in a +subdirectory of manual, set up index.html in each +subdirectory to link to that manual in all its forms, and make +manual/index.html link to each manual through its subdirectory. +

+

See the section below for details on a script to make the job of +creating all these different formats and index pages easier. +

+

We would like to list all GNU manuals on the page +https://www.gnu.org/manual, so if yours isn’t there, please send +mail to webmasters@gnu.org, asking them to add yours, and they +will do so based on the contents of your manual directory. +

+ + + + + +
+ + + +

12.3.1 Invoking gendocs.sh

+ + + + +

The script gendocs.sh eases the task of generating the +Texinfo documentation output for your web pages +section above. It has a companion template file, used as the basis +for the HTML index pages. Both are available from the Gnulib +development: +

+ + +

There is also a minimalistic template, available from: +

+ + +

Invoke the script like this, in the directory containing the Texinfo +source: +

+
+
gendocs.sh --email yourbuglist yourmanual "GNU yourmanual manual"
+
+ +

where yourmanual is the short name for your package +and yourbuglist is the email address for bug reports (which +should be bug-package@gnu.org). The script processes +the file yourmanual.texinfo (or .texi or +.txi). For example: +

+
+
cd .../texinfo/doc
+# download gendocs.sh and gendocs_template
+gendocs.sh --email bug-texinfo@gnu.org texinfo "GNU Texinfo manual"
+
+ +

gendocs.sh creates a subdirectory manual/ containing +the manual generated in all the standard output formats: Info, HTML, +DVI, and so on, as well as the Texinfo source. You then need to move +all those files, retaining the subdirectories, into the web pages for +your package. +

+

You can specify the option -o outdir to override the +name manual. Any previous contents of outdir will be deleted. +

+

The second argument, with the description, is included as part of the +HTML <title> of the overall manual/index.html file. It +should include the name of the package being documented, as shown. +manual/index.html is created by substitution from the file +gendocs_template. (Feel free to modify the generic template +for your own purposes.) +

+

If you have several manuals, you’ll need to run this script several +times with different arguments, specifying a different output +directory with -o each time, and moving all the output to +your web page. Then write (by hand) an overall index.html with links +to them all. For example: +

+
+
cd .../texinfo/doc
+gendocs.sh --email bug-texinfo@gnu.org -o texinfo texinfo "GNU Texinfo manual"
+gendocs.sh --email bug-texinfo@gnu.org -o info info "GNU Info manual"
+gendocs.sh --email bug-texinfo@gnu.org -o info-stnd info-stnd "GNU info-stnd manual"
+
+ +

By default, the script uses makeinfo for generating HTML +output. If you prefer to use texi2html, use the +--texi2html command line option, e.g.: +

+
+
gendocs --texi2html -o texinfo texinfo "GNU Texinfo manual"
+
+ +

The template files will automatically produce entries for additional +HTML output generated by texi2html (i.e., split by sections +and chapters). +

+

You can set the environment variables MAKEINFO, TEXI2DVI, +etc., to control the programs that get executed, and +GENDOCS_TEMPLATE_DIR to control where the +gendocs_template file is found. +

+

As usual, run ‘gendocs.sh --help’ for a description of all the +options, environment variables, and more information. +

+

Please email bug reports, enhancement requests, or other +correspondence about gendocs to bug-texinfo@gnu.org. +

+ +
+ +
+

+Previous: , Up: Web Pages   [Contents][Index]

+
+ +

12.4 CVS Keywords in Web Pages

+ + + + + +

Since www.gnu.org works through CVS, CVS keywords in your +manual, such as $Log$, need special treatment (even if you +don’t happen to maintain your manual in CVS). +

+

If these keywords end up in the generated output as literal strings, +they will be expanded. The most robust way to handle this is to turn +off keyword expansion for such generated files. For existing files, +this is done with: +

+
+
cvs admin -ko file1 file2 ...
+
+ +

For new files: +

+
+
cvs add -ko file1 file2 ...
+
+ +

See the “Keyword Substitution” section in the CVS manual, available +from https://cvs.nongnu.org. +

+

In Texinfo source, the recommended way to literally specify a +“dollar” keyword is: +

+
+
@w{$}Log$
+
+ +

The @w prevents keyword expansion in the Texinfo source +itself. Also, makeinfo notices the @w and generates +output avoiding the literal keyword string. +

+
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

13 Ethical and Philosophical Consideration

+ + + +

The GNU project takes a strong stand for software freedom. Many +times, this means you’ll need to avoid certain technologies when their +use would conflict with our long-term goals. +

+

Software patents threaten the advancement of free software and freedom +to program. There are so many software patents in the US that any +large program probably implements hundreds of patented techniques, +unknown to the program’s developers. It would be futile and +self-defeating to try to find and avoid all these patents. But there +are some patents which we know are likely to be used to threaten free +software, so we make an effort to avoid the patented techniques. If +you are concerned about the danger of a patent and would like advice, +write to licensing@gnu.org, and we will try to help you get +advice from a lawyer. +

+

Sometimes the GNU project takes a strong stand against a particular +patented technology in order to encourage society to reject it. That +is why we rejected MP3 audio format in favor of the unpatented Ogg +Vorbis format. These patents have reportedly expired, but we still +prefer Ogg formats to MP3 formats. Please support this campaign by +making Ogg Vorbis the preferred format for audio distribution +in GNU packages and their web sites. +

+

We will consider using Ogg Opus at some point in the future. +It is fine to distribute Ogg Opus files also, but please +continue distributing Ogg Vorbis, so as not to hurry users to change +the software with which they listen to audio. +

+

We are unable to find a modern compressed video format that is truly +safe from patents, so we use the Ogg Theora and WebM formats for which +no licensing consortium has been set up. GNU programs and their web +sites should not distribute video in MPEG-2 or MPEG 4 formats. +

+

A GNU package should not recommend use of any non-free program, nor +should it require a non-free program (such as a non-free compiler or +IDE) to build. Thus, a GNU package cannot be written in a programming +language that does not have a free software implementation. Now that +GNU/Linux systems are widely available, all GNU packages should +provide full functionality on a 100% free GNU/Linux system, and should +not require any non-free software to build or function. +The GNU Coding Standards say a lot more about this issue. +

+

Similarly, a GNU package should not require the use of non-free +software, including JavaScript, for the coordination of its +development. For example, please don’t use Transifex for translation +of your software because it requires your translators to use non-free, +JavaScript-based editing tools. Instead, a service without any +ethical concerns should be used, such as The Translation Project +(https://translationproject.org). +

+

A GNU package should not refer the user to any non-free documentation +for free software. The need for free documentation to come with free +software is now a major focus of the GNU project; to show that we are +serious about the need for free documentation, we must not contradict +our position by recommending use of documentation that isn’t free. +

+

Please don’t host discussions about your package in a service that +requires nonfree software. For instance, Google+ “communities” +require running a nonfree JavaScript program to post a message, so +they can’t be used in the Free World. Google Groups has the same +problem. To host discussions there would be excluding people who live +by free software principles. +

+

Of course, you can’t order people not to use such services to talk +with each other. What you can do is not legitimize them, and use your +influence to lead people away from them. For instance, where you say +where to have discussions related to the program, don’t list such a +place. +

+

Finally, new issues concerning the ethics of software freedom come up +frequently. We ask that GNU maintainers, at least on matters that +pertain specifically to their package, stand with the rest of the GNU +project when such issues come up. +

+
+ + + +

14 Humor and GNU

+ +

In GNU, we appreciate humor in our work. +

+

GNU is a project of hackers, and +hacking means +playful cleverness. Even the name “GNU” is an example of playful +cleverness—it is a +recursive acronym for +“GNU’s Not Unix.” +

+

In that spirit, we prize occasional doses of humor in GNU packages. +Humor is not mandatory in a GNU package; we do not tell maintainers, +“Make users smile, or else!” But when maintainers do that, we too +smile. +

+

Nowadays, our humor-positive approach occasionally encounters direct, +blanket opposition. Some people advocate, and even demand, removal of +jokes from software packages simply because they are jokes. We shrug +off that point of view. +

+

Jokes are subject to the same sorts of issues and criticism as other +writing. Sometimes there is a valid objection to text which is +humorous, so we do not defend every joke obtusely to the bitter end. +But the fact that it is a joke is not a valid objection. +

+

There are people who frown on anything that is slightly risqué or +controversial, including jokes. It would be a terrible shame for that +attitude to prevail, so our policy is that the occasional risqué joke +is ok. GNU is a 21st century project, not a 19th. +

+
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

15 Other Politics

+ +

The GNU Project supports the cause of software freedom, that the users +of computing should have control of their computing activities. This +requires that they have control of their software that does those +activities, which in turn requires that they do these activities +with free software and have the possibility of replacing any shared +copies with their own copies. +

+

It also supports basic human rights in computing including use of the +internet; opposing censorship, for instance. +

+

A GNU package should not seriously advocate any other political +causes. Not that the GNU Project opposes those other causes. Rather, +it is neutral on them, and GNU packages should be neutral too. +

+
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

16 Terminology Issues

+ + +

This chapter explains a couple of issues of terminology which are +important for correcting two widespread and important misunderstandings +about GNU. +

+ + + + + +
+ +
+

+Next: , Up: Terminology   [Contents][Index]

+
+ +

16.1 Free Software and Open Source

+ + + + + +

The terms “free software” and “open source”, while describing +almost the same category of software, stand for views based on +fundamentally different values. The free software movement is +idealistic, and raises issues of freedom, ethics, principle and what +makes for a good society. The term open source, initiated in 1998, is +associated with a philosophy which studiously avoids such questions. +For a detailed explanation, see +https://www.gnu.org/philosophy/open-source-misses-the-point.html. +

+

The GNU Project is aligned with the free software movement. This +doesn’t mean that all GNU contributors and maintainers have to agree; +your views on these issues are up to you, and you’re entitled to express +them when speaking for yourself. +

+

However, due to the much greater publicity that the term “open source” +receives, the GNU Project needs to overcome a widespread +mistaken impression that GNU is and always was an “open +source” activity. For this reason, please use the term “free +software”, not “open source” or “FOSS”, in GNU software releases, GNU +documentation, and announcements and articles that you publish in your +role as the maintainer of a GNU package. A reference to the URL given +above, to explain the difference, is a useful thing to include as +well. +

+ +
+ + + +

16.2 GNU and Linux

+ + + +

The GNU Project was formed to develop a free Unix-like operating system, +GNU. The existence of this system is our major accomplishment. +However, the widely used version of the GNU system, in which Linux is +used as the kernel, is often called simply “Linux”. As a result, most +users don’t know about the GNU Project’s major accomplishment—or more +precisely, they know about it, but don’t realize it is the GNU Project’s +accomplishment and reason for existence. Even people who believe they +know the real history often believe that the goal of GNU was to develop +“tools” or “utilities”. +

+

To correct this confusion, we have made a years-long effort to +distinguish between Linux, the kernel that Linus Torvalds wrote, and +GNU/Linux, the operating system that is the combination of GNU and +Linux. The resulting increased awareness of what the GNU Project has +already done helps every activity of the GNU Project recruit more +support and contributors. +

+

Please make this distinction consistently in GNU software releases, GNU +documentation, and announcements and articles that you publish in your +role as the maintainer of a GNU package. If you want to explain the +terminology and its reasons, you can refer to the URL +https://www.gnu.org/gnu/linux-and-gnu.html. +

+

To make it clear that Linux is a kernel, not an operating system, +please take care to avoid using the term “Linux system” in those +materials. If you want to have occasion to make a statement about +systems in which the kernel is Linux, write “systems in which the +kernel is Linux” or “systems with Linux as the kernel.” That +explicitly contrasts the system and the kernel, and will help readers +understand the difference between the two. Please avoid simplified +forms such as “Linux-based systems” because those fail to highlight +the difference between the kernel and the system, and could encourage +readers to overlook the distinction. +

+

To contrast the GNU system proper with GNU/Linux, you can call it +“GNU/Hurd” or “the GNU/Hurd system”. However, when that contrast +is not specifically the focus, please call it just “GNU” or “the +GNU system”. +

+

When referring to the collection of servers that is the higher level +of the GNU kernel, please call it “the Hurd” or “the GNU Hurd”. +Note that this uses a space, not a slash. +

+

For more about this point, see +https://www.gnu.org/gnu/gnu-linux-faq.html. +

+
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

17 Interviews and Speeches

+ +

Interviews and speeches about your package are an important channel +for informing the public about the GNU system and the ideas of the +free software movement. Please avoid saying “open source” and avoid +calling the GNU system “Linux”, just as you would in the package +itself (see Terminology). Likewise, avoid promoting nonfree +programs (see References in GNU Coding +Standards) as you would in the package itself. +

+

Many GNU users have erroneous ideas about GNU. Outside of our +community, most people think it is Linux. Please use your opportunity +to set them straight. Start the presentation with the answers to +these basic questions: +

+
    +
  • What GNU is (an operating system developed to be Unix-like and totally +free software). It is good to mention https://www.gnu.org. + +
  • What free software is (the users control it, so it doesn’t control +them). It is good to state the four freedoms and/or refer to +https://www.gnu.org/philosophy/free-sw.html. + +
  • What GNU/Linux is (Linux filled the last gap in GNU). It is useful to +refer to https://www.gnu.org/gnu/linux-and-gnu.html. + +
  • What the GNU Project is (the project to develop GNU). + +
  • How your package fits in (it’s part of GNU, and the work is part of +the GNU Project). +
+ +

If you feel a social pressure not to say these things, you may be +coming in contact with some who would prefer that these things not be +said. That’s precisely when we need your support most. +

+

Please don’t include advertisements or plugs for any company, product +or service. Even if the product would meet the standards for the FSF +to endorse it, an ad for it is out of place in a presentation about a +GNU package. Likewise, please don’t include company slogans. Mention +a company only when called for by the subject matter. +

+

A few GNU packages are actually business activities of a particular +company. In that case, it is ok to say so at the start. Otherwise, +please show that this is a project of the GNU Project, and avoid +suggesting it is any company’s project. +

+

If you are paid by a company to work on the GNU package, it is +appropriate to thank the company in a discreet way, but please don’t +go beyond that. +

+

Before you do a speech or interview, please contact the GNU Project +leadership. We can give you advice on how to deal with various +eventualities. +

+

When your interviews and speech recordings or transcript are posted, +please tell us about them. Then we can publicize them. +

+

Please post them in formats that are friendly to free software: not in +Doc or Docx format, not with Flash, not with QuickTime, not with MP3, +MPEG2 or MPEG4. Plain text, HTML and PDF are good. +

+
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

18 Hosting

+ + + + + + + + +

We recommend using savannah.gnu.org for the source code +repository for your package, but that’s not required. See Old Versions, for more information about Savannah. +

+

We strongly urge you to use ftp.gnu.org as the standard +distribution site for releases. Doing so makes it easier for +developers and users to find the latest GNU releases. However, it is +ok to use another server if you wish, provided it allows access from +the general public without limitation (for instance, without excluding +any country). +

+

If you use a company’s machine to hold the repository for your +program, or as its release distribution site, please put this +statement in a prominent place on the site, so as to prevent people +from getting the wrong idea about the relationship between the package +and the company: +

+
+
The programs <list of them> hosted here are free software packages
+of the GNU Project, not products of <company name>.  We call them
+"free software" because you are free to copy and redistribute them,
+following the rules stated in the license of each package.  For more
+information, see https://www.gnu.org/philosophy/free-sw.html.
+
+If you are looking for service or support for GNU software, see
+https://www.gnu.org/gethelp/ for suggestions of where to ask.
+
+If you would like to contribute to the development of one of these
+packages, contact the package maintainer or the bug-reporting address
+of the package (which should be listed in the package itself), or look
+on www.gnu.org for more information on how to contribute.
+
+ + +
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

19 Donations

+ + + +

As a maintainer, you might want to accept donations for your work, +especially if you pay for any of your own hosting/development +infrastructure. Following is some text you can adapt to your own +situation, and use on your package’s web site, README, or +in wherever way you find it useful: +

+
+
We appreciate contributions of any size -- donations enable us to spend
+more time working on the project, and help cover our infrastructure
+expenses.
+
+If you'd like to make a small donation, please visit url1 and do
+it through payment-service.  Since our project isn't a
+tax-exempt organization, we can't offer you a tax deduction, but for
+all donations over amount1, we'd be happy to recognize your
+contribution on url2.
+
+We are also happy to consider making particular improvements or
+changes, or giving specific technical assistance, in return for a
+substantial donation over amount2.  If you would like to discuss
+this possibility, write to us at address.
+
+Another possibility is to pay a software maintenance fee.  Again,
+write to us about this at address to discuss how much you want
+to pay and how much maintenance we can offer in return.  If you pay
+more than amount1, we can give you a document for your records.
+
+Thanks for your support!
+
+ +

We don’t recommend any specific payment service. However, GNU +developers should not use a service that requires them to sign a +proprietary software license, such as Google’s payment service. +Please also avoid sites that requires users to run nonfree software in +order to donate. (This includes JavaScript software, so try it with +LibreJS or with JavaScript disabled.) +

+

In the text you post on the site, please pay attention to the +terminological issues we care about (see Terminology). +

+

We have no objections to using Bitcoin to receive donations. +

+

The FSF can collect donations for a limited number of projects; if you +want to propose that for your project, write to +maintainers@gnu.org. The FSF is required to supervise the +spending of these funds. +

+

Of course, it is also good to encourage people to join the FSF +(https://www.fsf.org) or make a general donation, either instead +of or as well as package-specific donations. +

+ +
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

20 Free Software Directory

+ + + +

The Free Software Directory aims to be a complete list of free +software packages, within certain criteria. Every GNU package should +be listed there, so please see +https://www.gnu.org/help/directory.html#adding-entries for +information on how to write an entry for your package. Contact +bug-directory@gnu.org with any questions or suggestions for +the Free Software Directory. +

+ +
+ + + +

21 Using the Proofreaders List

+ + +

If you want help finding errors in documentation, +or help improving the quality of writing, +or if you are not a native speaker of English +and want help producing good English documentation, +you can use the GNU proofreaders mailing list: +proofreaders@gnu.org. +

+

But be careful when you use the list, +because there are over 200 people on it. +If you simply ask everyone on the list to read your work, +there will probably be tremendous duplication of effort +by the proofreaders, +and you will probably get the same errors reported 100 times. +This must be avoided. +

+

Also, the people on the list do not want to get +a large amount of mail from it. +So do not ever ask people on the list to send mail to the list! +

+

Here are a few methods that seem reasonable to use: +

+
    +
  • For something small, mail it to the list, +and ask people to pick a random number from 1 to 20, +and read it if the number comes out as 10. +This way, assuming 50% response, some 5 people will read the piece. + +
  • For a larger work, divide your work into around 20 equal-sized parts, +tell people where to get it, +and ask each person to pick randomly which part to read. + +

    Be sure to specify the random choice procedure; +otherwise people will probably use a mental procedure +that is not really random, +such as “pick a part near the middle”, +and you will not get even coverage. +

    +

    You can either divide up the work physically, into 20 separate files, +or describe a virtual division, such as by sections +(if your work has approximately 20 sections). +If you do the latter, be sure to be precise about it—for example, +do you want the material before the first section heading +to count as a section, or not? +

    +
  • For a job needing special skills, send an explanation of it, +and ask people to send you mail if they volunteer for the job. +When you get enough volunteers, send another message to the list saying +“I have enough volunteers, no more please.” +
+ + +
+ +
+

+Next: , Previous: , Up: Top   [Contents][Index]

+
+ +

Appendix A GNU Free Documentation License

+ + +
Version 1.3, 3 November 2008 +
+ +
+
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+https://fsf.org/
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+ +
    +
  1. PREAMBLE + +

    The purpose of this License is to make a manual, textbook, or other +functional and useful document free in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. +

    +

    This License is a kind of “copyleft”, which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. +

    +

    We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. +

    +
  2. APPLICABILITY AND DEFINITIONS + +

    This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The “Document”, below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as “you”. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. +

    +

    A “Modified Version” of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. +

    +

    A “Secondary Section” is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document’s overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. +

    +

    The “Invariant Sections” are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. +

    +

    The “Cover Texts” are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. +

    +

    A “Transparent” copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not “Transparent” is called “Opaque”. +

    +

    Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input +format, SGML or XML using a publicly available +DTD, and standard-conforming simple HTML, +PostScript or PDF designed for human modification. Examples +of transparent image formats include PNG, XCF and +JPG. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, SGML or +XML for which the DTD and/or processing tools are +not generally available, and the machine-generated HTML, +PostScript or PDF produced by some word processors for +output purposes only. +

    +

    The “Title Page” means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, “Title Page” means +the text near the most prominent appearance of the work’s title, +preceding the beginning of the body of the text. +

    +

    The “publisher” means any person or entity that distributes copies +of the Document to the public. +

    +

    A section “Entitled XYZ” means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as “Acknowledgements”, +“Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” +of such a section when you modify the Document means that it remains a +section “Entitled XYZ” according to this definition. +

    +

    The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. +

    +
  3. VERBATIM COPYING + +

    You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. +

    +

    You may also lend copies, under the same conditions stated above, and +you may publicly display copies. +

    +
  4. COPYING IN QUANTITY + +

    If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document’s license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. +

    +

    If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. +

    +

    If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. +

    +

    It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. +

    +
  5. MODIFICATIONS + +

    You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: +

    +
      +
    1. Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +
    2. List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +
    3. State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +
    4. Preserve all the copyright notices of the Document. + +
    5. Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +
    6. Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +
    7. Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document’s license notice. + +
    8. Include an unaltered copy of this License. + +
    9. Preserve the section Entitled “History”, Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled “History” in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +
    10. Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the “History” section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +
    11. For any section Entitled “Acknowledgements” or “Dedications”, Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +
    12. Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +
    13. Delete any section Entitled “Endorsements”. Such a section +may not be included in the Modified Version. + +
    14. Do not retitle any existing section to be Entitled “Endorsements” or +to conflict in title with any Invariant Section. + +
    15. Preserve any Warranty Disclaimers. +
    + +

    If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version’s license notice. +These titles must be distinct from any other section titles. +

    +

    You may add a section Entitled “Endorsements”, provided it contains +nothing but endorsements of your Modified Version by various +parties—for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. +

    +

    You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. +

    +

    The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. +

    +
  6. COMBINING DOCUMENTS + +

    You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. +

    +

    The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. +

    +

    In the combination, you must combine any sections Entitled “History” +in the various original documents, forming one section Entitled +“History”; likewise combine any sections Entitled “Acknowledgements”, +and any sections Entitled “Dedications”. You must delete all +sections Entitled “Endorsements.” +

    +
  7. COLLECTIONS OF DOCUMENTS + +

    You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. +

    +

    You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. +

    +
  8. AGGREGATION WITH INDEPENDENT WORKS + +

    A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an “aggregate” if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation’s users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. +

    +

    If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document’s Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. +

    +
  9. TRANSLATION + +

    Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. +

    +

    If a section in the Document is Entitled “Acknowledgements”, +“Dedications”, or “History”, the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. +

    +
  10. TERMINATION + +

    You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. +

    +

    However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. +

    +

    Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. +

    +

    Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. +

    +
  11. FUTURE REVISIONS OF THIS LICENSE + +

    The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +https://www.gnu.org/copyleft/. +

    +

    Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License “or any later version” applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy’s public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. +

    +
  12. RELICENSING + +

    “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +“Massive Multiauthor Collaboration” (or “MMC”) contained in the +site means any set of copyrightable works thus published on the MMC +site. +

    +

    “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. +

    +

    “Incorporate” means to publish or republish a Document, in whole or +in part, as part of another Document. +

    +

    An MMC is “eligible for relicensing” if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. +

    +

    The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. +

    +
+ + +

ADDENDUM: How to use this License for your documents

+ +

To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: +

+
+
  Copyright (C)  year  your name.
+  Permission is granted to copy, distribute and/or modify this document
+  under the terms of the GNU Free Documentation License, Version 1.3
+  or any later version published by the Free Software Foundation;
+  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+  Texts.  A copy of the license is included in the section entitled ``GNU
+  Free Documentation License''.
+
+ +

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the “with…Texts.” line with this: +

+
+
    with the Invariant Sections being list their titles, with
+    the Front-Cover Texts being list, and with the Back-Cover Texts
+    being list.
+
+ +

If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. +

+

If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. +

+ + +
+ + + +

Index

+
Jump to:   $ +   +/ +   +
+A +   +B +   +C +   +D +   +E +   +F +   +G +   +H +   +I +   +L +   +M +   +O +   +P +   +Q +   +R +   +S +   +T +   +U +   +V +   +W +   +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Index Entry  Section

$
$ keywords in web pages: CVS Keywords in Web Pages

/
/gd/gnuorg directory: Copyright Papers

A
advisory committee: Getting Help
alpha.gnu.org, test release site: Test Releases
announcement mailing list, project-specific: Announcements
announcements: Announcements
announcements, mailing list for: Standard Mailing Lists
assignments, copyright: Copyright Papers
AUTHORS file: Recording Contributors
automake: Distribution tar Files

B
beta releases: Test Releases
bug reports, email tracker for: Replying to Mail
bug reports, handling: Replying to Mail
bug reports, web tracker for: Replying to Mail
bug-gnu-utils@gnu.org: Standard Mailing Lists
bug-standards@gnu.org email address: Preface

C
contents of announcements: Announcements
contributions, accepting: Clean Ups
copyright notices in program files: Copyright Notices
copyright papers: Copyright Papers
creating mailing lists: Creating Mailing Lists
crediting authors: Crediting Authors
CVS keywords in web pages: CVS Keywords in Web Pages
CVS repository: Hosting

D
data base of GNU copyright assignments: Copyright Papers
development method, open source: Free Software and Open Source
development resources: GNU Accounts and Resources
diff: Distribution Patches
directive file, for FTP uploads: FTP Upload Directive File
directives for ftp uploads, standalone: FTP Upload Standalone Directives
directory trees, in ftp uploads: FTP Upload Directory Trees
Directory, Free Software: Free Software Directory
disclaimers: Copyright Papers
distribution, tar files: Distribution tar Files
documentation output, generating: Invoking gendocs.sh
Donations, for packages: Donations
down, when GNU machines are: Getting Help

E
email: Mail
ethics: Ethical and Philosophical Consideration

F
FDL, GNU Free Documentation License: GNU Free Documentation License
fencepost.gnu.org GNU login host: GNU Accounts and Resources
formats for documentation, desired: Manuals on Web Pages
Free Software Directory: Free Software Directory
free software movement: Free Software and Open Source
FSF system administrators: Getting Help
FTP site: Hosting
ftp uploads, automated: Automated FTP Uploads
FTP uploads, of release files: FTP Upload Release File Triplet
ftp.gnu.org, the GNU release site: Distribution on ftp.gnu.org

G
gendocs.sh: Invoking gendocs.sh
generating documentation output: Invoking gendocs.sh
GNU ftp site: Distribution on ftp.gnu.org
GNU system administrators: Getting Help
GNU/Linux: GNU and Linux
gnustandards project repository: Preface
gnustandards-commit@gnu.org mailing list: Preface

H
help for users, mailing list for: Standard Mailing Lists
help requests, handling: Replying to Mail
help, getting: Getting Help
hierarchy, under ftp upload directory: FTP Upload Directory Trees
hosting: Hosting
https://bugs.gnu.org: Replying to Mail
https://hostux.social/@fsfstatus: Getting Help
https://planet.gnu.org: Announcements
Hydra: GNU Accounts and Resources

I
info-gnu mailing list: Announcements

L
legal matters: Legal Matters
legal papers for changes in manuals: Copyright Papers
license notices in program files: License Notices
Linux: GNU and Linux

M
mailing list for bug reports: Standard Mailing Lists
mailing lists, creating: Creating Mailing Lists
mailing lists, standard names of: Standard Mailing Lists
maintainers@gnu.org: Stepping Down
mentors@gnu.org mailing list: Getting Help
Money, donated to packages: Donations
movement, free software: Free Software and Open Source

O
open source: Free Software and Open Source
outage, of GNU machines: Getting Help

P
patch: Distribution Patches
patches, against previous releases: Distribution Patches
philosophy: Ethical and Philosophical Consideration
Piercy, Marge: Preface
platform-testers mailing list: GNU Accounts and Resources
pretest releases: Test Releases
proofreading: Using the Proofreaders List

Q
quality of changes suggested by others: Clean Ups

R
RCS keywords in web pages: CVS Keywords in Web Pages
recording contributors: Recording Contributors
registration for uploads: Automated Upload Registration
release site: Hosting
replacing uploaded files: FTP Upload File Replacement
repository: Hosting
resigning as maintainer: Stepping Down
resources for GNU developers: GNU Accounts and Resources
responding to bug reports: Replying to Mail

S
Savannah repository for gnustandards: Preface
Savannah, news area: Announcements
savannah-announce@gnu.org mailing list: Old Versions
savannah-hackers@gnu.org: Old Versions
shell account, on fencepost: GNU Accounts and Resources
source repository: Hosting
spam prevention: Creating Mailing Lists
standalone directives, for ftp uploads: FTP Upload Standalone Directives
standard mailing lists: Standard Mailing Lists
stepping down as maintainer: Stepping Down
sysadmin, FSF: Getting Help

T
terminology: Terminology
test releases: Test Releases
time stamp in diffs: Distribution Patches

U
uploads: Automated Upload Procedure
uploads, directory trees in: FTP Upload Directory Trees
uploads, registration for: Automated Upload Registration
uploads, replacing: FTP Upload File Replacement

V
version control: Old Versions
version control system: Hosting

W
web pages: Web Pages
web pages, and CVS keywords: CVS Keywords in Web Pages
web pages, freedom for: Freedom for Web Pages
web pages, hosting for: Hosting for Web Pages
web pages, including manuals on: Manuals on Web Pages

+
Jump to:   $ +   +/ +   +
+A +   +B +   +C +   +D +   +E +   +F +   +G +   +H +   +I +   +L +   +M +   +O +   +P +   +Q +   +R +   +S +   +T +   +U +   +V +   +W +   +
+ +
+ + + + + + \ No newline at end of file diff --git a/devspec.en_US/gnu-spec/gnu-doc/Information for Maintainers of GNU Software_files/manual.css b/devspec.en_US/gnu-spec/gnu-doc/Information for Maintainers of GNU Software_files/manual.css new file mode 100755 index 0000000..93ae86d --- /dev/null +++ b/devspec.en_US/gnu-spec/gnu-doc/Information for Maintainers of GNU Software_files/manual.css @@ -0,0 +1,72 @@ +/* Style-sheet to use for manuals (copied from Emacs) */ + +@import url('/style.css'); + +/* makeinfo 6.5 converts @quotation to
. Highlight them. */ +blockquote { + font-style: normal; + border-left: solid 10px red; + padding-left: 2.5%; + margin-left: 0px; +} + +/* Increase inter-line spacing to improve readability. */ +p, pre, li, dt, dd, table, code, address { line-height: 1.5em; } + +var { font-style: italic; } + +/* Lay out @lisp just like @example. Copied from what /style.css + does for the 'example' class. */ +div.lisp { padding: .8em 1.2em .4em; } +pre.lisp { padding: .8em 1.2em; } +div.lisp, pre.lisp { + margin: 1em 0 1em 3% ; + -webkit-border-radius: .3em; + -moz-border-radius: .3em; + border-radius: .3em; + border: 1px solid #d4cbb6; + background-color: #f2efe4; +} +div.lisp > pre.lisp { + padding: 0 0 .4em; + margin: 0; + border: none; +} + +/* makeinfo 6.7 uses
for navigation links above node + titles. Make those links less prominent. */ +.header { + line-height: 2em; + font-size: 87.5%; + color: #433; +} + +/* In title and node titles, use Fira Sans if available as it is more + pleasant and more compact than Helvetica. */ +.settitle, .top, .chapter, .section, .subsection, .subsubsection { + font-family: Fira Sans, sans; +} + +/* ----- coreutils specific styling ----- */ + +/* layout.css indents "body p" when it should probably only indent "body > p"? + In any case, disable indenting of p in these sub elements. */ +dd p,li p { + margin-left: 0; + margin-right: 0; +} + +/* underlined links are distracting, especially within outlined tables. */ +a { /*add :link for external links*/ + text-decoration: none; /* don't underline links by default */ + outline-style: none; /* don't put dotted box around clicked links */ +} +a:hover { + text-decoration: underline; +} + +body { + /* Make sure the body doesn't become to wide: long lines are hard to + read. */ + max-width: 45em; +} diff --git a/devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation.html b/devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation.html new file mode 100755 index 0000000..3c10248 --- /dev/null +++ b/devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation.html @@ -0,0 +1,480 @@ + + + + + + + + + + + + + + +Tips for new GNU maintainers +- GNU Project - Free Software Foundation + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + + + +
+ + + + +
+ + + +

Tips for new GNU maintainers

+ +

If you are new to maintaining a GNU package, whether one that you +have offered to GNU or an existing one that you have adopted, it can be +overwhelming to know where to start. The official email notice you +received when you became a GNU maintainer has lots of details; this +document is not a replacement for that email, but rather a complement, +aiming to provide some tips on getting started.

+ +

Of course, what's listed here just skims the surface of GNU +maintainership. Please be sure to read the GNU Maintainers Guide and the GNU Coding Standards. Indeed, you should +have read them already, but they are densely enough written that careful +re-readings are useful. In addition, a few experienced GNU contributors +have volunteered to answer questions about GNU maintenance via +<mentors@gnu.org> as well as <maintainers@gnu.org>.

+ + +

First steps for new maintainers

+ +

These tasks are listed in order of priority. The labels +([All], [New], and +[Adopted]) indicate the category of packages +each task mostly applies to.

+ +
    +
  1. [All] Update project information on + Savannah. Go to your project page +(https://sv.gnu.org/projects/PKG, where PKG is the name of your +package), log in with your Savannah ID, and check under “Update public +info” in the “Main” menu. Here, you should set the project's +full name and, if needed, write both a short and a long description for +it (please also send those descriptions to <maintainers@gnu.org> for use +in the lists of all GNU +packages). You should also set its development status to reflect +the maturity of the code. It is essential to do this if you have +adopted a package, since it will be marked as “Orphan”.
  2. + +
  3. [All] Turn to the mailing lists. If you +have a new GNU package, you should set up at least one mailing list for the +package (“Select features” in the Main menu). It is strongly +recommended to have one called <bug-PKG@gnu.org>; +others can wait until traffic warrants. If +you have adopted an existing package, send an email introducing +yourself. Finally, whether lists are newly created or already existing, +don't forget to subscribe yourself, as this is not automatically done. +(About dealing with +mail.)
  4. + +
  5. [New] Set up a repository for your source +code (“Select features” in the Main menu), and import +whatever is available (look up the procedures under “Source Code +Manager” in the Development Tools section). Experience has shown +that self-hosting is unreliable. (About back-up +files.)
  6. + +
  7. [New] Upload your package to the GNU FTP +site if it is ready for public release. (About the upload +procedure.)
  8. + +
  9. [New] Create a GNU home page, to replace +the PKG.html file that webmasters have placed in your web repo +(keep the same name). If you want to make this quick and easy, use our +standard template. Comment +out the irrelevant parts, such as Downloading and Documentation if the +project has barely started; you'll complete them later on. Also put any + documentation you already have in a subdirectory called +“manual”. (About web pages.)
  10. + +
  11. [Adopted] Check for existing bug +reports if you have adopted an existing package. These may +be on any or all of a Savannah bug tracker, a mailing list (mbox archives can be +downloaded by HTTPS), or the GNU debbugs server. (About replying to +bug reports.)
  12. + +
  13. [Adopted] Contact distro packagers. +If you have adopted +an existing package and it is available in downstream distros, get in +contact with the packagers. It is likely that they have unresolved bug +reports to be addressed, and perhaps even patches that should be +applied. You may also like to get involved with the GNU Guix package manager. (About distros.)
  14. + +
  15. [Adopted] Use the software. +It should go without saying that if you +have adopted a GNU package, you should use it to get a feel for its +current status and to discover what might need to be fixed.
  16. + +
  17. [All] Pick some tasks and start hacking! +There's no substitute for spending time doing the actual work.
  18. +
+ + +

General tips on maintaining GNU software

+ +
    +
  • Aim for a quick first release. Whether your package is +new or you've adopted an older one, your number one priority should be +making a first release as soon as possible. If you've adopted a +package, it's sufficient to fix a few bugs and push that out. In fact, +just updating the infrastructure files (e.g., Autoconf/Automake, gnulib +modules, etc.) is enough to justify a new release when you've first +taken over a package. If your package is new, don't be afraid to put +out an early version that is not yet feature complete. In any case, a +release (with proper +announcements) will draw attention to your package in the form of +potential users or even other developers. It is the best way to let +people know that an old package has been revived or that a new package +exists at all. (About making +releases.)
  • + +
  • Focus on fixing outstanding bugs first. This is an excellent +way to start learning a new codebase, and get a +feel for how the system works. Besides, new features shouldn't be given +much focus if notable problems already exist. (About resources for GNU +developers.)
  • + +
  • Don't try to rewrite the entire thing. If you've adopted +a package, we strongly recommend that you not set out to rewrite the +whole program from scratch. While always tempting, and an easy thing to +start, completing it successfully requires a colossal effort, and +experience has shown that it is an almost sure-fire way to become +demotivated and lead to eventual (re-)stagnation of the project. +Instead, focus on incremental improvements. Once you've become +intimately familiar with the package, you will be in a better position +to consider more radical changes.
  • + +
  • You're in charge! As a maintainer, you look after a +package as part of the overall GNU project. GNU depends on you to take +care of legal +matters, make new releases, keep the web pages updated, +reply to bug reports and otherwise communicate with users, handle patches +appropriately, and all else. This is your privilege and your +responsibility. Please help us maintain an active and stable collection +of software. If you have questions or run into problems, do not +hesitate to get in touch via <maintainers@gnu.org>. (About +recruiting developers.)
  • + +
  • Get involved. GNU consists entirely of volunteers and +your participation in the organization is what you make of it! As a +maintainer, the communication received from us (read: pestering) will be +low-volume. Being active within GNU is a great way to increase your +contact and exposure to other like-minded volunteers. If you find an +aspect of GNU in which you would like to be involved, there is almost +certainly room for contribution. (About +helping GNU and free software.)
  • + +
+ +

To conclude this list with one final reiteration: the information and +links above are just a sampling. Please refer to and (re)read the full +GNU Maintainer Information and GNU Coding Standards documents for plenty +more.

+ + +

GNU Philosophy

+ +

This also seems like an appropriate page on which to give some links +to the basic ideas of GNU and free software:

+ + + +
+ + + + + + + +
+ + +
+
+
+ +
+
+ + +

Available for this page:

+
+

+[en] English   +[fr] français   +[pt-br] português   +

+
+
+
+ + + + + +
+ + + \ No newline at end of file diff --git a/devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/banner-small.png b/devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/banner-small.png new file mode 100755 index 0000000000000000000000000000000000000000..eb6dfaa4d2ad1cf7a024d638a3209468b353ed90 GIT binary patch literal 10561 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 z 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 literal 0 HcwPel00001 diff --git a/devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/fsf-logo-notext-small.png b/devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/fsf-logo-notext-small.png new file mode 100755 index 0000000000000000000000000000000000000000..5310c47b6417dfb97d6b8dfa14de05862d110420 GIT binary patch literal 2494 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,.translators-notes>strong{font-size:1.19em;font-size:1.19rem}.translators-notes>b,.translators-notes>strong{margin:1.2em 0 .8em;color:#333}.big-section{clear:left;float:left}.big-section h3{display:inline-block;font-size:1.75em;margin:1em .3em .5em 0;color:black;border-top:.12em solid #e74c3c;border-bottom:.12em solid #e74c3c}.article .big-section h3{font-size:1.65em}.big-subsection{margin:1.5em 0}.big-subsection h4{display:inline;font-size:1.5em;margin-right:.3em;color:black}.article .big-subsection h4{font-size:1.41em}.big-subsection{line-height:2.0em}.big-subsection h4{line-height:1.2em}.anchor-reference-id{font-weight:normal;font-size:.8125em}@media(max-width:30em){h1{font-size:2em}h2{font-size:1.73em}.article h2{font-size:1.63em}h3{font-size:1.4em}.article h3{font-size:1.32em}h4{font-size:1.2em}.article h4{font-size:1.13em}h5{font-size:1.07em}.big-section h3{font-size:1.53em}.article .big-section h3{font-size:1.44em}.big-subsection h4{font-size:1.4em}.article .big-subsection h4{font-size:1.32em}}ul,ol,li,dl,dd,dt{padding:0}li,dt,dd{line-height:1.5em}ul li{list-style:square outside}ul ul li,ol ul li{list-style:circle}ol li,#content ul li ol li{list-style:decimal outside}ul,ol{margin:1em 1.5%}ol li{margin:1em 0 0 1em}ul li,ul ol li{margin:.5em 0 0 1em}ul ul li{margin-top:.3em}ul li p,ul li pre,ul li blockquote,table li{margin-top:.3em;margin-bottom:.3em}ul ul,ol ul,table ul{margin:0 1.5%}ul.para>li{margin-top:1em}.date-tag{padding:.2em .5em;color:#505050;background:#f2f2f2;border-radius:.25em}ul.blurbs li{margin-top:1em}ul.blurbs ul li,ul.blurbs ol li,ul.blurbs dl li{margin-top:.5em}ul.blurbs>li{list-style:none}.blurbs .date-tag{position:relative;right:2em}@media(max-width:30em){.blurbs .date-tag{right:1.5em}}dl{margin:1.5em 0 0}dt{font-weight:bold;color:#333;margin:1em 0}dl dd{margin:1em 3% 1.5em}dl.compact{margin:.5em 0}dl.compact dt{font-weight:normal;font-style:italic;margin:.5em 0 0}dl.compact dd{margin:.3em 3% 0}dl.compact dd p{margin:.3em 0 0}dl.compact dd ul{margin:.3em 1.5% 0}hr{display:block;margin:1.2em 0;color:#999;background:#999}hr.separator{height:.3em;border:0}.thin{clear:both;height:2px;margin:1.5em 0;border:0;background:#bbb}.column-limit{height:.4em;width:15%;min-width:7em;margin:2em auto;border:0;background:#bbb;background-image:linear-gradient(to right,white,#bbb,white)}table{border-collapse:collapse;border-spacing:0;margin:1.5em 0}caption{font-style:inherit;font-weight:inherit;text-align:center;margin-bottom:.5em}th,td{border:1px solid #bbb;padding:.5em;margin:0}th{font-weight:bold;text-align:center}th,td,td p,td li{line-height:1.3em}.listing{width:100%;display:block;overflow-x:auto;border:.2em solid #ccc}.listing th{font-weight:normal;padding:.7em;color:black;background:#fff1c0;border:1px solid #999;border-bottom:0}.listing td{padding:1em;text-align:center;border:1px solid #999}.listing img{vertical-align:middle}.listing .odd{background:transparent}.listing .even{background:#f4f4f4}.columns p.inline-block{display:inline-block;margin:0}.columns>*:first-child{margin-top:0}.columns>*:last-child{margin-bottom:0}@media(min-width:55em){.columns{-webkit-column-count:2;-webkit-column-gap:1.5em;-moz-column-count:2;-moz-column-gap:1.5em;column-count:2;column-gap:1.5em}}img{vertical-align:top;border:0}.imgright,.imgleft{max-width:100%}.imgright{float:right;margin:.3em 0 1em 2em}.imgleft{float:left;margin:.3em 2em 1em 0}.narrow{width:15em}.medium{width:20em}.wide{width:27em}.pict{max-width:100%;margin:1em auto}.pict img{width:100%;height:auto}.pict p{text-align:center;font-style:italic;font-size:.875em;margin-top:.5em}@media(min-width:45em){.pict.narrow{max-width:45%;float:right;margin:.3em 0 1em 2em}}@media(min-width:50em){.pict.medium{max-width:45%;float:right;margin:.3em 0 1em 2em}}@media(min-width:57em){.pict.wide{max-width:45%;float:right;margin:.3em 0 1em 2em}}.comment,.introduction{font-style:italic;margin:1.5em 6%}.article .comment{font-size:.94em}.comment cite,.introduction cite{font-style:normal}.epigraph{margin:2em 0 2em 10%;color:#444}@media(max-width:30em){.comment,.introduction{margin:1.5em 0}}.emph-box *,.highlight-para *,.lyrics *,.announcement *,.important *{margin-bottom:0}.announcement,.important{padding:.4em 1em;margin-top:1.5em;margin-bottom:1.5em}.announcement blockquote{margin:0}.announcement p,.important p{padding-top:.4em;padding-bottom:.5em;margin:0}.announcement>ul,.important>ul{margin:0}.announcement li,.important li{padding-top:.2em;padding-bottom:.3em;margin-top:0}.announcement h3,.important h3{font-size:1.25em;margin:.35em 0 .4em}.announcement{border-left:.4em solid #5c5}.important{border-left:.4em solid #fc7}@media(min-width:48em){.announcement,.important{padding:.4em 1.5em}}blockquote.highlight-para,blockquote.emph-box,div.highlight-para,div.emph-box{padding:0 1.2em 1.1em;margin:2em 0}p.highlight-para,p.highlight,p.emph-box,pre.emph-box{padding:.7em 1.2em .8em}.emph-box h3,.highlight-para h3,.lyrics h3{font-size:1.25em;margin:.8em 0}.emph-box h4,.highlight-para h4,.lyrics h4{font-size:1em}pre.emph-box code,pre.emph-box kbd,pre.emph-box samp,p.emph-box code,p.emph-box kbd,p.emph-box samp{padding:0}.highlight-para,.highlight{background:#fff5d4}span.highlight{background:#fff1c0}.highlight-para{border-top:.1em solid #fc7;border-bottom:.1em solid #fc7}.emph-box{background:#f2f2f2;border:.1em solid #bbb}.lyrics{display:inline-block;max-width:80%;font-style:italic;padding:.5em 2em 1.7em;background:#f7f7f7;border:.1em solid #bbb;border-radius:.5em;margin:.5em 0 .5em 6%}@media(max-width:45em){.lyrics{box-sizing:border-box;max-width:100%;padding:0 1em 1.2em;margin-left:0}}.note,.edu-note{margin:2em auto}.edu-note{width:37.7em;max-width:100%}.edu-note p{font-style:italic;padding:.7em 1em .8em;margin:0}.note{width:45em;max-width:82%;padding:.3em 3% .4em;background:white}.note p{padding:.4em;margin:0}.note,.edu-note p{border:.15em solid #0aa}.edu-note p{border-radius:.5em}.summary,.toc{width:45em;text-align:center;padding:1.3em 3%;margin:2em auto;background:#f4f4f4}.summary{max-width:82%}.toc{max-width:94%}.summary>ul,.toc>ul{text-align:left;font-size:.94em;font-size:.94rem;display:inline-block;margin:0 .5em 0 0}.summary ul ul,.toc ul ul{margin:0}.summary li,.toc li{margin:0 0 0 1.5em;padding:.1em 0}.summary h3,.toc h3{font-size:1.125em;margin-top:.3em}.summary h4,.toc h4{text-align:left;font-size:1em}.summary a,.toc a{display:block;padding:.2em 0}.toc-inline{font-size:.94em;text-align:center;padding:0 3%;margin:2em auto}.toc-inline a{display:inline-block;padding:.1em .4em;margin:.3em;background:#f2f2f2;border:.1em solid #bbb}.toc-inline h3{display:none}.toc-inline h4{font-size:1em;margin:1em 0 .2em}.toc-inline h4 a{border:0}.toc-inline ul,.toc-inline li{display:inline;margin:0}@media(max-width:30em){.note,.summary{max-width:92%}#content .note{margin-left:auto;margin-right:auto}}@media(min-width:48em){.note,.summary{clear:right;float:right;width:20em;max-width:40%;margin:.5em 0 1em 2em}#content .note{margin-right:0;margin-left:2em}.summary{padding:1em .8em}.note{padding:.3em .8em .4em}}div.toc .malfunctions h3,div.toc .companies h3{padding:0;margin:0 0 .5em}#content .malfunctions,#content .companies{display:inline-block;padding:.5em .5em 0;margin:0}#content .toc .malfunctions{max-width:29em}#content .toc .companies{max-width:14em}#content .malfunctions ul,#content .companies ul{padding:0;margin:0}#content div.toc .malfunctions li,#content div.toc .companies li{padding:0 0 .5em;margin:0}.malfunctions a+br,.summary a+br{display:none}#content div.toc.c{background:0}#content div.toc.c h3{display:none}#content div.toc.c a{display:inline-block;padding:.1em .4em;margin:.3em;background:#f2f2f2;border:.1em solid #bbb}#content div.toc.c a:hover{background:white}#content #video-container{width:37.7em;margin:2em auto}#video-container .emph-box{font-size:smaller;margin-top:0}div.package-list a,div.package-list a:visited{margin-bottom:.1em}@media(min-width:48em){#content #dynamic-duo{width:19.2em;max-width:38%;margin-bottom:1.5em}#dynamic-duo p{font-size:.875em}}a[href]{text-decoration-color:#bbb}a[href]:link{color:#049}a[href]:visited{color:#503}a[href]:active{text-decoration:none}#gnu-banner>a{color:#333;text-decoration:none}#gnu-banner>a strong{color:#a32d2a}#fsf-support,#fsf-support a[href],#fssbox a[href],.breadcrumb a[href],.back a[href],.anchor-reference-id a[href]{color:#4b4b4b}#translations a[href],.trans-disclaimer a[href],.toc a[href],.toc-inline a[href],.summary a[href],.package-list a[href]{color:#049;text-decoration:none}a[href]:hover,#fsf-support a[href]:hover,#fssbox a[href]:hover{color:black;text-decoration:none}#translations a[href]:hover{background:#ebebff}.toc a[href]:hover,.summary a[href]:hover,.toc-inline a[href]:hover,.package-list a[href]:hover{background:white}form,legend,fieldset,textarea{padding:0}form,legend,button,textarea,input{margin:0}fieldset{border:0;margin:1em 0}input,button,textarea,select,optgroup,option{font-family:inherit;font-size:inherit;font-style:normal;font-weight:normal}button,select,input{padding:.2em .3em}#fssbox input,.button a{line-height:1.1em;padding:.4em .6em}#fssbox input[type="text"]{height:1.1em}#fssbox input[type="submit"],.button a{font-weight:bold;margin:0}.button a{display:block;display:inline-block}#support-the-fsf a{padding:.6em 1em;margin:1em 1.5em 0}.backtotop a{float:right;position:relative;bottom:1em;font-size:1.2em;font-weight:bold;line-height:1em;padding:.2em .6em .5em;margin:0 1em}.backtotop a span{display:none}.inner>.backtotop{margin-right:3%}.button a[href],.backtotop a[href]{text-decoration:none;color:#4040bb;background:white;border:.1em solid #999;border:.1rem solid #999}.button a[href]:hover,.backtotop a[href]:hover{color:#33c;background:#ebebff;border-color:#55b}#join-fsf a,#support-the-fsf a.join{color:#a32d2a;border-color:#a32d2a}#join-fsf a:hover,#support-the-fsf a.join:hover{color:#960400;background:#f6e5e1}#support-the-fsf a.donate{color:#4040bb;border-color:#55b}#support-the-fsf a.donate:hover{color:#33c;background:#ebebff}#support-the-fsf a.shop{color:#006363;border-color:#088}#support-the-fsf a.shop:hover{color:#005f5f;background:#dff}a[href].switch:hover{background:0;cursor:pointer}#fssbox input{background:white}#fssbox input[type="text"]{color:#555;border:.1em solid #bbb}#fssbox input[type="text"]:focus{color:#333;border-color:#088}#fssbox input[type="submit"]{color:#006363;border:.1em solid #088;cursor:pointer}#fssbox input[type="text"]:focus ~ input[type="submit"]{color:#005f5f;background:#dff}.rounded-corners,.button a,.backtotop a,#fssbox input{border-radius:.4em;-moz-border-radius:.4em;-khtml-border-radius:.4em;-webkit-border-radius:.4em;-opera-border-radius:.4em}a[href]{font-family:sans-serif}#fsf-frame a[href],form,.button a[href],#header a[href],#fsf-support,#languages,#languages a[href],.breadcrumb,.breadcrumb a,.trans-disclaimer,.trans-disclaimer a[href],#outdated,#outdated a[href]{font-family:"Noto Sans Display","Noto Sans","Liberation Sans",sans-serif}#navigation a[href],#edu-navigation a[href]{font-family:"Dosis","Noto Sans Display","Noto Sans","Liberation Sans",sans-serif}#gnu-banner strong{font-family:"Noto Sans","Liberation Sans",sans-serif} \ No newline at end of file diff --git a/devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/mini.css b/devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/mini.css new file mode 100755 index 0000000..6735aaa --- /dev/null +++ b/devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/mini.css @@ -0,0 +1,208 @@ +/* +Software License Agreement (BSD License) + +Copyright (c) 2006, Yahoo! Inc. +All rights reserved. + +Redistribution and use of this software in source and +binary forms, with or without modification, arepermitted +provided that the following conditions are met: + +* Redistributions of source code must retain the above +copyright notice, this list of conditions and the +following disclaimer. + +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other +materials provided with the distribution. + +* Neither the name of Yahoo! Inc. nor the names of its +contributors may be used to endorse or promote products +derived from this software without specific prior +written permission of Yahoo! Inc. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. +*/ +html +{ + color: #000; + background: #FFF; +} +body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, + pre, code, form, fieldset, legend, input, button, textarea, + p, blockquote, th, td +{ + margin: 0; + padding: 0; +} +table +{ + border-collapse: collapse; + border-spacing: 0; +} +fieldset, img +{ + border: 0; +} +address, caption, cite, code, dfn, em, strong, th, var, optgroup +{ + font-style: inherit; + font-weight: inherit; +} +del, ins +{ + text-decoration: none; +} +li +{ + list-style: none; +} +caption, th +{ + text-align: left; +} +h1, h2, h3, h4, h5, h6 +{ + font-size: 100%; + font-weight: normal; +} +q: before, q: after +{ + content: ''; +} +abbr, acronym +{ + border: 0; + font-variant: normal; +} +sup +{ + vertical-align: baseline; +} +sub +{ + vertical-align: baseline; +} +legend +{ + color: #000; +} +input, button, textarea, select, optgroup, option +{ + font-family: inherit; + font-size: inherit; + font-style: inherit; + font-weight: inherit; +} +input, button, textarea, select +{ + *font-size: 100%; +} + +body +{ + margin: 10px; +} +h1 +{ + font-size: 138.5%; +} +h2 +{ + font-size: 123.1%; +} +h3 +{ + font-size: 108%; +} +h1, h2, h3 +{ + margin: 1em 0; +} +h1, h2, h3, h4, h5, h6, strong, dt +{ + font-weight: bold; +} +optgroup +{ + font-weight: normal; +} +abbr, acronym +{ + border-bottom: 1px dotted #000; + cursor: help; +} +em +{ + font-style: italic; +} +del +{ + text-decoration: line-through; +} +blockquote, ul, ol, dl +{ + margin: 1em; +} +ol, ul, dl +{ + margin-left: 2em; +} +ol li +{ + list-style: decimal outside; +} +ul li +{ + list-style: disc outside; +} +dl dd +{ + margin-left: 1em; +} +th, td +{ + border: 1px solid #000; + padding: .5em; +} +th +{ + font-weight: bold; + text-align: center; +} +caption +{ + margin-bottom: .5em; + text-align: center; +} +sup +{ + vertical-align: super; +} +sub +{ + vertical-align: sub; +} +p, fieldset, table, pre +{ + margin-bottom: 1em; +} +button, input[type="checkbox"], input[type="radio"], + input[type="reset"], input[type="submit"] +{ + padding: 1px; +} diff --git a/devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/print.min.css b/devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/print.min.css new file mode 100755 index 0000000..176d1c9 --- /dev/null +++ b/devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/print.min.css @@ -0,0 +1,18 @@ +/*! +print.css -- css stylesheet used on www.gnu.org + +Copyright (C) 2006, 2007, 2014, 2020 Free Software Foundation + +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. + +*/#header,#navigation,#links,#toplinks,#fsf-links,#back-to-top,#translations,#searcher,.unprintable,#mission-statement,#Disclaimer,#education-content,.edu-breadcrumb,.anchor-reference-id,.back,.skip,#fsf-frame,#languages,#navlinks,.breadcrumb,.backtotop{display:none}.inner{width:100%}body{font-family:Baskerville,Georgia,Garamond,Times,serif;font-size:11pt!important;border:0}h1,h2,h3,h4,h5,h6{border:0;font-family:Baskerville,Georgia,Garamond,Times,serif}div,p,ul,dl,ol{width:auto!important}ul,ol,dl{padding-right:.5em}ul{list-style-type:square}.documentDescription{font-weight:bold}pre{border:1pt dotted black;white-space:pre;font-size:8pt;overflow:auto;padding:1em 0}table,td,th{padding:.3em;border:1pt solid black!important;border-collapse:collapse}table#gpl-compat-matrix td,th.gpl-matrix-border{text-align:center}th.gpl-matrix-license{text-align:right}tr.gpl-matrix-use-type{border-top:.2em solid black}a{color:Black!important;padding:0!important;text-decoration:none!important}a:link,a:visited{color:#520;background:transparent} \ No newline at end of file diff --git a/devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/search.png b/devspec.en_US/gnu-spec/gnu-doc/Tips for new GNU maintainers - GNU Project - Free Software Foundation_files/search.png new file mode 100755 index 0000000000000000000000000000000000000000..57688dc5cb7dd7749ebf1583283537eec6748e0a GIT binary patch literal 1136 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 literal 0 HcwPel00001 diff --git a/devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation.html b/devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation.html new file mode 100755 index 0000000..f4c68a5 --- /dev/null +++ b/devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation.html @@ -0,0 +1,1229 @@ + + + + + + + + + + + + + + +Website Guidelines - GNU Project - Free Software Foundation + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/banner-small.png b/devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/banner-small.png new file mode 100755 index 0000000000000000000000000000000000000000..eb6dfaa4d2ad1cf7a024d638a3209468b353ed90 GIT binary patch literal 10561 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 z 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 literal 0 HcwPel00001 diff --git a/devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/fsf-logo-notext-small.png b/devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/fsf-logo-notext-small.png new file mode 100755 index 0000000000000000000000000000000000000000..5310c47b6417dfb97d6b8dfa14de05862d110420 GIT binary patch literal 2494 zcwPa%2|@OWP)}>jglcOE`g|CH07i2& zLQz0;@+(XWdukf0!;WgRA#@!@)uQh;oj_G3wIwA8AvpiZ-;&g?e?oqm)-zlrLWmBp z^;o|UNYkWb<#N7$Jg`uTYB^GO?-PxiDzTmuF~9d?2p0zgp^ zii!{dp|sv}{65Pt0EuOo7{LJk{ly&Ku%5kdyhfm=hTIEhpgEEf7F(jH8BnqPbN;hr zF#!F>jAPnEk0i{vKy?+Rt5;F{&RZPbupW?PPn}NgMKc+6@ejy6?>y|uDW}z8hC|eQ zy)>1V(O6bS{b4T+hrI-SK0-bpkw7!jvJi@jGz}D0MG66yg_h*R?n%QnAcyo(`D9Kx zkL;<_5}MrI&H!nd?0oJyj%?Y)kxd&xN~(5!MW~@38Hx1Ru%NGo1FKddgg{YLCg1xD zCf|Jz&WsEYB9>*X@zXZzj(xeE1MjWCyM7(@2TPHriL@*fO(SFCWHKg9B=4e`qz)fJ z>X4z>Q&Xc^AVf45T6ML&_GXrMI|D4kVEI*-Q}NkW6kTs|iq(?BJr^SoAmf|~jJy3# z3T~K(?slINgz7!JIQ-E^9NGLaWm`7We5{uA(Zd)pt&q&g=hA=Ncs!#?0rb9}JmgHpSAD1%j*70-vhMJTG;c>`31?Tdbg zzhpmFB*LicZlLh7CvfNFwp(5RK6~4h{MtBBD=Ro5AL^);w=d#Cl3u31gp!BP-{$v?lJ!bhJt3Ha6su0QN$<&Uq# zU%ZdxK|`4Oz{5;`1(1TRGXAt0-~|3jP>(x!7?I@z3q+|_$NlZ5Q2KImp5lj zBk1=tW8q>7=G}}vC8gaGBMlSNG|;*b2xqMWI;x+Frp3V5-EK68qtjo$?WxBx0zp!T z4QJ->7q?q(T4mj>^H6jf*KOWP=EO;HWT1B6Udlh;#-TN-z=Zl>Ruv8NxXA`v$H?5Ftm7vnEE0E)oj@!%SejWaWo zy;X483yM+`7{$3+;!TtZF{}5w9<@3cz4dFRPEdmH@tlt67>1GC(^M4&Nyci zs>-L2KEx-FJVpwoJ_V>9tV2LJhq^F*Ckcv@3Y0>Ew zWZY`Q!VHB-%E%x+zW}?(gYI(U89kaIm&~I7go)jb;GHi#&(_BtK52c?b_h&-2Gnt{ z(Xrl6(a?c2FG5dFZl?u9v#*BQy+t4;sUt=*>8^V)L!qukfuc~odlyBo{)0ee6&3aM z$D62>?0)eDZr)YY?JZ<-ZeAStHg_@^lO|KKZ7XItj59L}&!~K)WhJf&H#8)UhR*$P z(>v!B6IO+vu5pSVHNV)$D(J8UB*}gzD;0Y&K>tex_UCxAuyP zFFud!8~w(N<*Ij9@XGknG?pD@@THe=@selH2o3Gf0UaqYV$puQM)${OzxC*Il`J7{Oq)^awDG2)!YlDVZ8)iJWMxs_UrTSnRcR zW~8x^6<1%084ktvQvyNOlqtwITiZl(BiTiLXN?0Ao%W68<-Gm<83b#pk1q$M1XU$_ zT45XBFObrT(bk@ds%a+;f!}!tw5_%E-b3to_8ImqdmSqhj@yn#f&nHjxSL30BYzp- z!IqqYqN?m$_69|-z1qV}kO)m@L3RBZT*jRNz*{HWdha2&J@p$(mj4^oZf`mBRpRa+ zciZjESh$EITQ;NG>~Sniwb^=JM!QimwY~^^EBKW=cd&Qa>m1#*5nu5>1e~-CG(tg~ z8CiU9>7QczCVNUMIfWNcy=PaHhGt}vHYy)!^=us>g!0a8jrwY4-HJ;K*7zr_B3 zy+xp=2GwpyQPpVeZ5^^K3ls%sW+nwU-NMvgJrp;9Wt=mCAFW!;Ym>%DY3QukiKC$> zJVMi_9MB$buKw?C4lI8c?}iU(Dla2YT^%bMT2j*S0n4(mA`vXZq~OMz7<=1%(hJ6% z^31>p1bT;tc5zzQzD0CTX`GajKvfmZRh2ZA9mQ9?kMd8q@Xbdb5~}l~+8wd8W}zrC zu%%_;%*@0+a1d$3M=#tfCPJLDz3bN zB=yh0nU#e*HxF0V0NeuykurD?DMN?Y*%@x{WY z(UOvo5^O2SsCFCnv~*JP29h~pBK9;7jx-Oh+#DR9blkbQxUzF`d;~Q@XdF6eRm7iBuiw8vNM>ZjD4B0lqI4P zg|TJdLe`NbDr>a)^?jb#^SkH%ch2kH_j#Y!x%YhzCl2QT0TT=k1F*5N0sk6s_y>?Q z!5bNCdEU6Cbd7k`UCICYX%g8Jp`xl8q@t>NI0YC0oL~-44lpMt2PYR7CpWJEFE0-d zukcZRh`@1S80@&Ph=`bktdy8I5-uWwP(&b4$emO;DJrF;tR$~2D}Pe{umw264TJ!Z zY;1zSVH*Gk0Co`DzZm|1{k?(<#Ldq3*Q+i7u(N@{Y#ttgGfjI;LP9bR( zu48Cn84IZDRc<6o-#0Q%#2~-bvU>Ay65#&#I9*`ZEXnHQ&5^Tv*JiE+=7%a9qKT4z zZK-7{xs4B``p9Yz19uf@k?tYgpRJFo4l)HOuZu1T!7}C;x*8q;%TueQbk_-09MW}$ zfFDB22cv2_0i^*T%v?HmDWnezy7c&;ksgmvMWlF4dhH*eZ5;C%3eOx z6XmixliWnDc|`J3xJt{ZjdLS+lgXhH0U;xmV(R<7!a_^{LJ3#z?Sb9@sESB{H*Udw zmo+z2mT`{JBO8rA_Cnds)cSlvs!)kq3UaQy?W9g(466mcIm#!+&}ZZ|Z zdSLP~>YZ$Y(1CW1Ih1JQ3L98=inDp1fAehFm)nm6(k-&%+_HwZ<_6YuCIIq0l#&3{^t@Z)TjELI4j~pb!RY0Z7FDAqP@Z*|LKIILo@y zs)x@om3nnc_#|@!ok(j8*MkU$BG-b&C-K#3LYhU%(n^o>DMr&-`P8UhMe}BHRN*VEHp5jIzoSDoM6_T+I(d8SN}k zONr|_$4OKGtRlNG){ejvkBeb1H<}{#Z5UMq-q9@r6N#47oq+pckiatPBmmq4jLUv2 zHW3I8Zh4i)&H}}z;wo}E=a-LAf5s(6WBg~>Rph9&UG@WKYPrt!JJFP3{jJSIU?~C% zI*`l%(`59jD6sN1A4lJ3^W6$a1AivXR{F^^CgM>i2pK;Y2#DoP`I_6_DXSaqB_Yae za70i03t7Ms)p~A^9>KPqif-RFMv~tY+Vpy1G9?xoOFNy3F{gE*_HZc5e|9=OyRy;A zH9uR-7d{G2kG)2p!#hPVPpn4(on0tMs&*=`>G$B)ixLjbxA~L`utd9=^Ve`o5$O>U zEJz~=a<^XP2|F2wm8_ejmlq}9_a7%@Qm{^EL^=npM>AZqemCHQCA+KH%xsZdmvTog z@-dA1xD$L%MXg>~SLt_*ve~)Z1UCQ~a+Vc=>l!oj5j(i!kXdQkK|_P88hN z++rJl@*AH_sx=6Ilwa(H@;4VKfvSpOz@?M+dOlFMrLI6k1oxTdv}s~_ikHdTD$T{R zvZ7mMC3~WIR32HDtwhw$U@EiU6SXW}RdzdBY}8y364t$DB<<%{kbeY}62&If=eu3; zee~1dAjLjOWB=h}vnLJ#iusQmt?NB8dmD~7s^1ej;&Cz* zYp_Y-w2Z6={>~>oWh|l^bthKq>!nZGyT198TfOY$SY?X|GxrSR4vZ9OjtV@(PZJ`J z_+IXqwRduPZERuQCzh=c6OLk?D&z!y!J&sh$7_q<=YM342YVKkVWKLJ&(MqFWu!9! zQJSo%40=i{@;(a-zaO3!YnZJ@6|qN>MeVVO=m|s$;`8c9H;ktXBaeb>0fJGV--qX2 zUTCnu%a$ymjeHv`6>E&G;5Fx^@d9uGs6I^tkL$Z&=AfgLpJ6*VGJ-~PTpBgVsNbQ= zv#t%f1Y=r*Xi5=B?=%F##%383tLKI%+InA6w3;yCwfCTcRNZyeyHoa3j3KT#GEaMUxejbbF`v&W9x7GfI|v^)H;W^X(sfKq?*;jSbG~ zho@rMEpgfxC2YPnDN%cTp2y~ss2Y=&8Ex2heX3kxgmP((ULU8Q-Ua_zNxIEfQd{kY z*v%?Nc|4Y2Rjv!s)UbhYv!G~K0HAA|srS1c0+$+&NsWCuGFU(I!d#p1+m6P0D{})wyQbj6`-1X{8Ptw#0N9;Rz!6A|Xw74(hj^f834C zI%p+L6rb&<0gUe_uJQaVT4-&8piyiCa&j=Wb9Yy}y~T|DC%&)IKgHZDhcik%E(sXk z5G7D}wo`Nj)2XKEYYBEAmCj8V#PY6m4x-!R-W^qJCB)h)7Drg}OFpu=-jG{PwI3?z zxt=ytkA91N%vQu{AdXRa5(rb#aA8~EK_m+G&F;!>Erm8(;9IZQ%gNNuyU$ZZ4N2B7 zT`EBC$??_j3@L1gmrr(7$VIeuTs7)kl$7C z9s&&>_1EwJR&vJLs2IV^&5RqnI-ss78u0-lm=~>~IM?#gF~#poR%o6jR*AykVyZPms<{^qB|tdsI~eFT z!wFv>aNK)MqYZkKPK6armYYDf*$w6dxI5QlyHKq3#aEw;lk2W{tr0U%I+MIu@iYb} zAN+ydDU=T^l{ZzqdgAItN7L}+%IQ(ze3|gQ0|y&l>SKNA3hmU|}6|)LD(VzS&)dppF?!z7J*9 zS*IG-4ZnPUN|__^UKcX!@tcpoM`0)y+mq$W(>=8tFK_H;cJ2yUbCSf=?@>mtX67c) z*Q<$r=ID&{h&;Yh9|z}g!$ZKLZH%D%^4zgZs|cuY8U?Cnk*gusrS)=X1;Wqs8;7JpYW9taj(g4+5NcJw<55%@-Qo zQOCj6iXS(oWT^2Q&-3#ej7=dz&rMzCr=!#Z@n&2XwaebIGPvGojjEAqm=;iQ7l=5rFb9wBr#R; zwanyd?cQkftjzFpH+>P@dw*uMhrr!6 zvu9Tv!<1;>L+S~ZW1%7^KZ`juxfgwRT$2I>nc(uP)tz(a!^J`PowwPv6t8z2kYmF` zsG(40g4s})kO)dzG4H7WS(p_8bd5HDsu}tsu4GhSCn)?1OJ;POvw>8B*i~Wds@$Ke zlTbc6wSFX+TN7b&zO3+Z;_0t=s(nrMmxhZmT zI-%86!@p9J{50*?!sCD&YcEXIero01*v+h}^T>_nzZQ!!36XN)cqgQ{fz{Gv7?jjw1h z6HIz5Kcbs_x=`~}E`J+jQSO;(jLz9lwKJmBCh_*DU`=5*jIUAG-qIVAU+0=bYwY*Cp@LAb`l1lN9>0RbX9ZLkBVWJm!88>I zHGVt)cXlFX{mN0k_Ai$buR`hpTjdHl}0m41u zb@9!Y#>Xz7)Bc7FrsJPNm1V@-!D(WiwNXsPP`4BSfbIN;9OI{@&;WJeUUDsFFnu2^ zcnG}qt+jp~R+7vh*ey|IZyVh}!y>!UzSC|5riV6P}{UO;aF z+7DoI4}hr9ucSsL$1ZT;6yw4CK-53`F8nT18ak0FQ9QLn?UR}n52FJc2A&h36=~C! z$nRwqF*&xs+W4PGtS6(wr$q_ppWd{k37?yCGVmANjITPY9oKRh^dx;ud)dOfp=zci z)`N5ilw-4)X9m%-_WIi8+?fxM-$K{J19C)u?)=$wpo$|ZC~LZ}Aq0`e1sdn(7j`!` zZkC@T2prpqk`R0MBV}bLw^HrI;zr7yx5}@Y^$r1Z@V*=h&>E#CiK+eNgHV6%PgH&L zELG)^L)B^1&dkgNjbFRc{waWJNBu_ANK`rt^G2ZR#3M6)IE}_-M-Y%p_#?v$-oI>)f=lxuLTd)i?Vvj z>VA5neiM*Tz^}jK;k7W&ot3e6uLkGAQoeO2hdN}v5%hNRug=@o7?$N2qHQC|0$`Mx|4rlFpW3chEQ3G>gd%XYAlJv zg`m&=N#P*OZGw!dR?Ypsj|r{nXqSiQ9KGUAN0N| z6!y47!ui7%Ig>ADJ1Y24C$J{=qlIzNRB&F()B}~SE{NkRN*U9(&YFi@5MK-^_ZDDN zD1^lFyWlAP&5GHOAI9~kx5I7`pz;e=7K-$9R~xsyj-pw5N{P!b0CJ0d-rRNKY~Udf zTv5+(2wE#k6vXCj$EDJVD2ihiQFBYDhM%_cTI_#$aXQE+-5v#B*ffwrgtQ_%zhRk% z(TTZzkU3>#bpvv2c0t*2Th%sptv^<7%Eb@v*(xfB1kLRcU}wb+ysCC>8aJ9;)<%E&mUz&NX^;i_)dZAb@yhEJ?PwGws32CCTba}RMA-i@{{7%gNY*9Ufd+fs?VUQQ=BfOP zni{{-4~E*WXIF`5WS(7Fy?3mz_*(8MIhk(52Q30U5q_l-ZeRhlQT%8?*!y5ldwB)Y zhJ^)QEw7=zAW&Vf%tlm^k;r}ZNg@=nd3k54q2giV`or?dj*s5)IGrxWJa$6Tq_g^^ zNiPl&jCBG>fD-j$owzJ|MJN}_gXq;tSG2` fC&AYp?75xNSKPsnwgxyB6Wy+a{2O)U@WcNBB({o0 literal 0 HcwPel00001 diff --git a/devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/heckert_gnu.transp.small.png b/devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/heckert_gnu.transp.small.png new file mode 100755 index 0000000000000000000000000000000000000000..3d4c647a9bcf0c9fad8dc62a222a3c808b496ed0 GIT binary patch literal 7677 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,.translators-notes>strong{font-size:1.19em;font-size:1.19rem}.translators-notes>b,.translators-notes>strong{margin:1.2em 0 .8em;color:#333}.big-section{clear:left;float:left}.big-section h3{display:inline-block;font-size:1.75em;margin:1em .3em .5em 0;color:black;border-top:.12em solid #e74c3c;border-bottom:.12em solid #e74c3c}.article .big-section h3{font-size:1.65em}.big-subsection{margin:1.5em 0}.big-subsection h4{display:inline;font-size:1.5em;margin-right:.3em;color:black}.article .big-subsection h4{font-size:1.41em}.big-subsection{line-height:2.0em}.big-subsection h4{line-height:1.2em}.anchor-reference-id{font-weight:normal;font-size:.8125em}@media(max-width:30em){h1{font-size:2em}h2{font-size:1.73em}.article h2{font-size:1.63em}h3{font-size:1.4em}.article h3{font-size:1.32em}h4{font-size:1.2em}.article h4{font-size:1.13em}h5{font-size:1.07em}.big-section h3{font-size:1.53em}.article .big-section h3{font-size:1.44em}.big-subsection h4{font-size:1.4em}.article .big-subsection h4{font-size:1.32em}}ul,ol,li,dl,dd,dt{padding:0}li,dt,dd{line-height:1.5em}ul li{list-style:square outside}ul ul li,ol ul li{list-style:circle}ol li,#content ul li ol li{list-style:decimal outside}ul,ol{margin:1em 1.5%}ol li{margin:1em 0 0 1em}ul li,ul ol li{margin:.5em 0 0 1em}ul ul li{margin-top:.3em}ul li p,ul li pre,ul li blockquote,table li{margin-top:.3em;margin-bottom:.3em}ul ul,ol ul,table ul{margin:0 1.5%}ul.para>li{margin-top:1em}.date-tag{padding:.2em .5em;color:#505050;background:#f2f2f2;border-radius:.25em}ul.blurbs li{margin-top:1em}ul.blurbs ul li,ul.blurbs ol li,ul.blurbs dl li{margin-top:.5em}ul.blurbs>li{list-style:none}.blurbs .date-tag{position:relative;right:2em}@media(max-width:30em){.blurbs .date-tag{right:1.5em}}dl{margin:1.5em 0 0}dt{font-weight:bold;color:#333;margin:1em 0}dl dd{margin:1em 3% 1.5em}dl.compact{margin:.5em 0}dl.compact dt{font-weight:normal;font-style:italic;margin:.5em 0 0}dl.compact dd{margin:.3em 3% 0}dl.compact dd p{margin:.3em 0 0}dl.compact dd ul{margin:.3em 1.5% 0}hr{display:block;margin:1.2em 0;color:#999;background:#999}hr.separator{height:.3em;border:0}.thin{clear:both;height:2px;margin:1.5em 0;border:0;background:#bbb}.column-limit{height:.4em;width:15%;min-width:7em;margin:2em auto;border:0;background:#bbb;background-image:linear-gradient(to right,white,#bbb,white)}table{border-collapse:collapse;border-spacing:0;margin:1.5em 0}caption{font-style:inherit;font-weight:inherit;text-align:center;margin-bottom:.5em}th,td{border:1px solid #bbb;padding:.5em;margin:0}th{font-weight:bold;text-align:center}th,td,td p,td li{line-height:1.3em}.listing{width:100%;display:block;overflow-x:auto;border:.2em solid #ccc}.listing th{font-weight:normal;padding:.7em;color:black;background:#fff1c0;border:1px solid #999;border-bottom:0}.listing td{padding:1em;text-align:center;border:1px solid #999}.listing img{vertical-align:middle}.listing .odd{background:transparent}.listing .even{background:#f4f4f4}.columns p.inline-block{display:inline-block;margin:0}.columns>*:first-child{margin-top:0}.columns>*:last-child{margin-bottom:0}@media(min-width:55em){.columns{-webkit-column-count:2;-webkit-column-gap:1.5em;-moz-column-count:2;-moz-column-gap:1.5em;column-count:2;column-gap:1.5em}}img{vertical-align:top;border:0}.imgright,.imgleft{max-width:100%}.imgright{float:right;margin:.3em 0 1em 2em}.imgleft{float:left;margin:.3em 2em 1em 0}.narrow{width:15em}.medium{width:20em}.wide{width:27em}.pict{max-width:100%;margin:1em auto}.pict img{width:100%;height:auto}.pict p{text-align:center;font-style:italic;font-size:.875em;margin-top:.5em}@media(min-width:45em){.pict.narrow{max-width:45%;float:right;margin:.3em 0 1em 2em}}@media(min-width:50em){.pict.medium{max-width:45%;float:right;margin:.3em 0 1em 2em}}@media(min-width:57em){.pict.wide{max-width:45%;float:right;margin:.3em 0 1em 2em}}.comment,.introduction{font-style:italic;margin:1.5em 6%}.article .comment{font-size:.94em}.comment cite,.introduction cite{font-style:normal}.epigraph{margin:2em 0 2em 10%;color:#444}@media(max-width:30em){.comment,.introduction{margin:1.5em 0}}.emph-box *,.highlight-para *,.lyrics *,.announcement *,.important *{margin-bottom:0}.announcement,.important{padding:.4em 1em;margin-top:1.5em;margin-bottom:1.5em}.announcement blockquote{margin:0}.announcement p,.important p{padding-top:.4em;padding-bottom:.5em;margin:0}.announcement>ul,.important>ul{margin:0}.announcement li,.important li{padding-top:.2em;padding-bottom:.3em;margin-top:0}.announcement h3,.important h3{font-size:1.25em;margin:.35em 0 .4em}.announcement{border-left:.4em solid #5c5}.important{border-left:.4em solid #fc7}@media(min-width:48em){.announcement,.important{padding:.4em 1.5em}}blockquote.highlight-para,blockquote.emph-box,div.highlight-para,div.emph-box{padding:0 1.2em 1.1em;margin:2em 0}p.highlight-para,p.highlight,p.emph-box,pre.emph-box{padding:.7em 1.2em .8em}.emph-box h3,.highlight-para h3,.lyrics h3{font-size:1.25em;margin:.8em 0}.emph-box h4,.highlight-para h4,.lyrics h4{font-size:1em}pre.emph-box code,pre.emph-box kbd,pre.emph-box samp,p.emph-box code,p.emph-box kbd,p.emph-box samp{padding:0}.highlight-para,.highlight{background:#fff5d4}span.highlight{background:#fff1c0}.highlight-para{border-top:.1em solid #fc7;border-bottom:.1em solid #fc7}.emph-box{background:#f2f2f2;border:.1em solid #bbb}.lyrics{display:inline-block;max-width:80%;font-style:italic;padding:.5em 2em 1.7em;background:#f7f7f7;border:.1em solid #bbb;border-radius:.5em;margin:.5em 0 .5em 6%}@media(max-width:45em){.lyrics{box-sizing:border-box;max-width:100%;padding:0 1em 1.2em;margin-left:0}}.note,.edu-note{margin:2em auto}.edu-note{width:37.7em;max-width:100%}.edu-note p{font-style:italic;padding:.7em 1em .8em;margin:0}.note{width:45em;max-width:82%;padding:.3em 3% .4em;background:white}.note p{padding:.4em;margin:0}.note,.edu-note p{border:.15em solid #0aa}.edu-note p{border-radius:.5em}.summary,.toc{width:45em;text-align:center;padding:1.3em 3%;margin:2em auto;background:#f4f4f4}.summary{max-width:82%}.toc{max-width:94%}.summary>ul,.toc>ul{text-align:left;font-size:.94em;font-size:.94rem;display:inline-block;margin:0 .5em 0 0}.summary ul ul,.toc ul ul{margin:0}.summary li,.toc li{margin:0 0 0 1.5em;padding:.1em 0}.summary h3,.toc h3{font-size:1.125em;margin-top:.3em}.summary h4,.toc h4{text-align:left;font-size:1em}.summary a,.toc a{display:block;padding:.2em 0}.toc-inline{font-size:.94em;text-align:center;padding:0 3%;margin:2em auto}.toc-inline a{display:inline-block;padding:.1em .4em;margin:.3em;background:#f2f2f2;border:.1em solid #bbb}.toc-inline h3{display:none}.toc-inline h4{font-size:1em;margin:1em 0 .2em}.toc-inline h4 a{border:0}.toc-inline ul,.toc-inline li{display:inline;margin:0}@media(max-width:30em){.note,.summary{max-width:92%}#content .note{margin-left:auto;margin-right:auto}}@media(min-width:48em){.note,.summary{clear:right;float:right;width:20em;max-width:40%;margin:.5em 0 1em 2em}#content .note{margin-right:0;margin-left:2em}.summary{padding:1em .8em}.note{padding:.3em .8em .4em}}div.toc .malfunctions h3,div.toc .companies h3{padding:0;margin:0 0 .5em}#content .malfunctions,#content .companies{display:inline-block;padding:.5em .5em 0;margin:0}#content .toc .malfunctions{max-width:29em}#content .toc .companies{max-width:14em}#content .malfunctions ul,#content .companies ul{padding:0;margin:0}#content div.toc .malfunctions li,#content div.toc .companies li{padding:0 0 .5em;margin:0}.malfunctions a+br,.summary a+br{display:none}#content div.toc.c{background:0}#content div.toc.c h3{display:none}#content div.toc.c a{display:inline-block;padding:.1em .4em;margin:.3em;background:#f2f2f2;border:.1em solid #bbb}#content div.toc.c a:hover{background:white}#content #video-container{width:37.7em;margin:2em auto}#video-container .emph-box{font-size:smaller;margin-top:0}div.package-list a,div.package-list a:visited{margin-bottom:.1em}@media(min-width:48em){#content #dynamic-duo{width:19.2em;max-width:38%;margin-bottom:1.5em}#dynamic-duo p{font-size:.875em}}a[href]{text-decoration-color:#bbb}a[href]:link{color:#049}a[href]:visited{color:#503}a[href]:active{text-decoration:none}#gnu-banner>a{color:#333;text-decoration:none}#gnu-banner>a strong{color:#a32d2a}#fsf-support,#fsf-support a[href],#fssbox a[href],.breadcrumb a[href],.back a[href],.anchor-reference-id a[href]{color:#4b4b4b}#translations a[href],.trans-disclaimer a[href],.toc a[href],.toc-inline a[href],.summary a[href],.package-list a[href]{color:#049;text-decoration:none}a[href]:hover,#fsf-support a[href]:hover,#fssbox a[href]:hover{color:black;text-decoration:none}#translations a[href]:hover{background:#ebebff}.toc a[href]:hover,.summary a[href]:hover,.toc-inline a[href]:hover,.package-list a[href]:hover{background:white}form,legend,fieldset,textarea{padding:0}form,legend,button,textarea,input{margin:0}fieldset{border:0;margin:1em 0}input,button,textarea,select,optgroup,option{font-family:inherit;font-size:inherit;font-style:normal;font-weight:normal}button,select,input{padding:.2em .3em}#fssbox input,.button a{line-height:1.1em;padding:.4em .6em}#fssbox input[type="text"]{height:1.1em}#fssbox input[type="submit"],.button a{font-weight:bold;margin:0}.button a{display:block;display:inline-block}#support-the-fsf a{padding:.6em 1em;margin:1em 1.5em 0}.backtotop a{float:right;position:relative;bottom:1em;font-size:1.2em;font-weight:bold;line-height:1em;padding:.2em .6em .5em;margin:0 1em}.backtotop a span{display:none}.inner>.backtotop{margin-right:3%}.button a[href],.backtotop a[href]{text-decoration:none;color:#4040bb;background:white;border:.1em solid #999;border:.1rem solid #999}.button a[href]:hover,.backtotop a[href]:hover{color:#33c;background:#ebebff;border-color:#55b}#join-fsf a,#support-the-fsf a.join{color:#a32d2a;border-color:#a32d2a}#join-fsf a:hover,#support-the-fsf a.join:hover{color:#960400;background:#f6e5e1}#support-the-fsf a.donate{color:#4040bb;border-color:#55b}#support-the-fsf a.donate:hover{color:#33c;background:#ebebff}#support-the-fsf a.shop{color:#006363;border-color:#088}#support-the-fsf a.shop:hover{color:#005f5f;background:#dff}a[href].switch:hover{background:0;cursor:pointer}#fssbox input{background:white}#fssbox input[type="text"]{color:#555;border:.1em solid #bbb}#fssbox input[type="text"]:focus{color:#333;border-color:#088}#fssbox input[type="submit"]{color:#006363;border:.1em solid #088;cursor:pointer}#fssbox input[type="text"]:focus ~ input[type="submit"]{color:#005f5f;background:#dff}.rounded-corners,.button a,.backtotop a,#fssbox input{border-radius:.4em;-moz-border-radius:.4em;-khtml-border-radius:.4em;-webkit-border-radius:.4em;-opera-border-radius:.4em}a[href]{font-family:sans-serif}#fsf-frame a[href],form,.button a[href],#header a[href],#fsf-support,#languages,#languages a[href],.breadcrumb,.breadcrumb a,.trans-disclaimer,.trans-disclaimer a[href],#outdated,#outdated a[href]{font-family:"Noto Sans Display","Noto Sans","Liberation Sans",sans-serif}#navigation a[href],#edu-navigation a[href]{font-family:"Dosis","Noto Sans Display","Noto Sans","Liberation Sans",sans-serif}#gnu-banner strong{font-family:"Noto Sans","Liberation Sans",sans-serif} \ No newline at end of file diff --git a/devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/mini.css b/devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/mini.css new file mode 100755 index 0000000..6735aaa --- /dev/null +++ b/devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/mini.css @@ -0,0 +1,208 @@ +/* +Software License Agreement (BSD License) + +Copyright (c) 2006, Yahoo! Inc. +All rights reserved. + +Redistribution and use of this software in source and +binary forms, with or without modification, arepermitted +provided that the following conditions are met: + +* Redistributions of source code must retain the above +copyright notice, this list of conditions and the +following disclaimer. + +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other +materials provided with the distribution. + +* Neither the name of Yahoo! Inc. nor the names of its +contributors may be used to endorse or promote products +derived from this software without specific prior +written permission of Yahoo! Inc. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. +*/ +html +{ + color: #000; + background: #FFF; +} +body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, + pre, code, form, fieldset, legend, input, button, textarea, + p, blockquote, th, td +{ + margin: 0; + padding: 0; +} +table +{ + border-collapse: collapse; + border-spacing: 0; +} +fieldset, img +{ + border: 0; +} +address, caption, cite, code, dfn, em, strong, th, var, optgroup +{ + font-style: inherit; + font-weight: inherit; +} +del, ins +{ + text-decoration: none; +} +li +{ + list-style: none; +} +caption, th +{ + text-align: left; +} +h1, h2, h3, h4, h5, h6 +{ + font-size: 100%; + font-weight: normal; +} +q: before, q: after +{ + content: ''; +} +abbr, acronym +{ + border: 0; + font-variant: normal; +} +sup +{ + vertical-align: baseline; +} +sub +{ + vertical-align: baseline; +} +legend +{ + color: #000; +} +input, button, textarea, select, optgroup, option +{ + font-family: inherit; + font-size: inherit; + font-style: inherit; + font-weight: inherit; +} +input, button, textarea, select +{ + *font-size: 100%; +} + +body +{ + margin: 10px; +} +h1 +{ + font-size: 138.5%; +} +h2 +{ + font-size: 123.1%; +} +h3 +{ + font-size: 108%; +} +h1, h2, h3 +{ + margin: 1em 0; +} +h1, h2, h3, h4, h5, h6, strong, dt +{ + font-weight: bold; +} +optgroup +{ + font-weight: normal; +} +abbr, acronym +{ + border-bottom: 1px dotted #000; + cursor: help; +} +em +{ + font-style: italic; +} +del +{ + text-decoration: line-through; +} +blockquote, ul, ol, dl +{ + margin: 1em; +} +ol, ul, dl +{ + margin-left: 2em; +} +ol li +{ + list-style: decimal outside; +} +ul li +{ + list-style: disc outside; +} +dl dd +{ + margin-left: 1em; +} +th, td +{ + border: 1px solid #000; + padding: .5em; +} +th +{ + font-weight: bold; + text-align: center; +} +caption +{ + margin-bottom: .5em; + text-align: center; +} +sup +{ + vertical-align: super; +} +sub +{ + vertical-align: sub; +} +p, fieldset, table, pre +{ + margin-bottom: 1em; +} +button, input[type="checkbox"], input[type="radio"], + input[type="reset"], input[type="submit"] +{ + padding: 1px; +} diff --git a/devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/print.min.css b/devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/print.min.css new file mode 100755 index 0000000..176d1c9 --- /dev/null +++ b/devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/print.min.css @@ -0,0 +1,18 @@ +/*! +print.css -- css stylesheet used on www.gnu.org + +Copyright (C) 2006, 2007, 2014, 2020 Free Software Foundation + +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. + +*/#header,#navigation,#links,#toplinks,#fsf-links,#back-to-top,#translations,#searcher,.unprintable,#mission-statement,#Disclaimer,#education-content,.edu-breadcrumb,.anchor-reference-id,.back,.skip,#fsf-frame,#languages,#navlinks,.breadcrumb,.backtotop{display:none}.inner{width:100%}body{font-family:Baskerville,Georgia,Garamond,Times,serif;font-size:11pt!important;border:0}h1,h2,h3,h4,h5,h6{border:0;font-family:Baskerville,Georgia,Garamond,Times,serif}div,p,ul,dl,ol{width:auto!important}ul,ol,dl{padding-right:.5em}ul{list-style-type:square}.documentDescription{font-weight:bold}pre{border:1pt dotted black;white-space:pre;font-size:8pt;overflow:auto;padding:1em 0}table,td,th{padding:.3em;border:1pt solid black!important;border-collapse:collapse}table#gpl-compat-matrix td,th.gpl-matrix-border{text-align:center}th.gpl-matrix-license{text-align:right}tr.gpl-matrix-use-type{border-top:.2em solid black}a{color:Black!important;padding:0!important;text-decoration:none!important}a:link,a:visited{color:#520;background:transparent} \ No newline at end of file diff --git a/devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/search.png b/devspec.en_US/gnu-spec/gnu-doc/Website Guidelines - GNU Project - Free Software Foundation_files/search.png new file mode 100755 index 0000000000000000000000000000000000000000..57688dc5cb7dd7749ebf1583283537eec6748e0a GIT binary patch literal 1136 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 literal 0 HcwPel00001 diff --git a/devspec.en_US/gnu-spec/munual-on-webpages.txt b/devspec.en_US/gnu-spec/munual-on-webpages.txt new file mode 100755 index 0000000..76904a0 --- /dev/null +++ b/devspec.en_US/gnu-spec/munual-on-webpages.txt @@ -0,0 +1,66 @@ + + +https://www.gnu.org/prep/maintain/maintain.html#Hosting-for-Web-Pages + + + + +------------------------------------------------------------------------------ +Next: CVS Keywords in Web Pages, Previous: Freedom for Web Pages, Up: Web Pages [Contents][Index] + +12.3 Manuals on Web Pages +The web pages for the package should include its manuals, in HTML, DVI, Info, PDF, plain ASCII, and the source Texinfo. All of these can be generated automatically from Texinfo using Makeinfo and other programs. If the Texinfo itself is generated from some other source format, include that too. + +When there is only one manual, put it in a subdirectory called manual; the file manual/index.html should have a link to the manual in each of its forms. + +If the package has more than one manual, put each one in a subdirectory of manual, set up index.html in each subdirectory to link to that manual in all its forms, and make manual/index.html link to each manual through its subdirectory. + +See the section below for details on a script to make the job of creating all these different formats and index pages easier. + +We would like to list all GNU manuals on the page https://www.gnu.org/manual, so if yours isn’t there, please send mail to webmasters@gnu.org, asking them to add yours, and they will do so based on the contents of your manual directory. + +• Invoking gendocs.sh: + +------------------------------------------------------------------------------ +Up: Manuals on Web Pages [Contents][Index] + +12.3.1 Invoking gendocs.sh +The script gendocs.sh eases the task of generating the Texinfo documentation output for your web pages section above. It has a companion template file, used as the basis for the HTML index pages. Both are available from the Gnulib development: + +https://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh +https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template +There is also a minimalistic template, available from: + +https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template_min +Invoke the script like this, in the directory containing the Texinfo source: + +gendocs.sh --email yourbuglist yourmanual "GNU yourmanual manual" +where yourmanual is the short name for your package and yourbuglist is the email address for bug reports (which should be bug-package@gnu.org). The script processes the file yourmanual.texinfo (or .texi or .txi). For example: + +cd .../texinfo/doc +# download gendocs.sh and gendocs_template +gendocs.sh --email bug-texinfo@gnu.org texinfo "GNU Texinfo manual" +gendocs.sh creates a subdirectory manual/ containing the manual generated in all the standard output formats: Info, HTML, DVI, and so on, as well as the Texinfo source. You then need to move all those files, retaining the subdirectories, into the web pages for your package. + +You can specify the option -o outdir to override the name manual. Any previous contents of outdir will be deleted. + +The second argument, with the description, is included as part of the HTML of the overall manual/index.html file. It should include the name of the package being documented, as shown. manual/index.html is created by substitution from the file gendocs_template. (Feel free to modify the generic template for your own purposes.) + +If you have several manuals, you’ll need to run this script several times with different arguments, specifying a different output directory with -o each time, and moving all the output to your web page. Then write (by hand) an overall index.html with links to them all. For example: + +cd .../texinfo/doc +gendocs.sh --email bug-texinfo@gnu.org -o texinfo texinfo "GNU Texinfo manual" +gendocs.sh --email bug-texinfo@gnu.org -o info info "GNU Info manual" +gendocs.sh --email bug-texinfo@gnu.org -o info-stnd info-stnd "GNU info-stnd manual" +By default, the script uses makeinfo for generating HTML output. If you prefer to use texi2html, use the --texi2html command line option, e.g.: + +gendocs --texi2html -o texinfo texinfo "GNU Texinfo manual" +The template files will automatically produce entries for additional HTML output generated by texi2html (i.e., split by sections and chapters). + +You can set the environment variables MAKEINFO, TEXI2DVI, etc., to control the programs that get executed, and GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is found. + +As usual, run ‘gendocs.sh --help’ for a description of all the options, environment variables, and more information. + +Please email bug reports, enhancement requests, or other correspondence about gendocs to bug-texinfo@gnu.org. + +------------------------------------------------------------------------------ diff --git a/devspec.en_US/gnu-spec/subject-for-gnu-softpkg-maintainning.txt b/devspec.en_US/gnu-spec/subject-for-gnu-softpkg-maintainning.txt new file mode 100755 index 0000000..655fedf --- /dev/null +++ b/devspec.en_US/gnu-spec/subject-for-gnu-softpkg-maintainning.txt @@ -0,0 +1,28 @@ + + +@ help +mentors@gnu.org + + + +[maintainer] + +@ bug-report-resolve + +@ lisence + +@ distribution (publish) + +@ webpages(templete file boilerplate-source) +# manual webpages(templete file munual-on-webpages, and scriipt gendocs.sh) + +@ ftp space using +# charpter 11.6.2 + +@ news/features/changelog +# gennerate todolist from misc text in tagdoc, it shows the work to do. +# use todolist as a feature list file, to be developed or not. +# features list the developed thing. +# news list the current version features and bug-fixed-info. +# change log list the features and bug have been solved. +# hilight, this file stores the good feature in the src-pkg to show others. diff --git a/devspec.en_US/gnu-spec/webpages.txt b/devspec.en_US/gnu-spec/webpages.txt new file mode 100755 index 0000000..d75237f --- /dev/null +++ b/devspec.en_US/gnu-spec/webpages.txt @@ -0,0 +1,51 @@ + +------------------------------------------------------------------------------ +Next: Ethical and Philosophical Consideration, Previous: Distributions, Up: Top [Contents][Index] + +12 Web Pages +As soon as a new package is dubbed GNU, its home page (‘https://www.gnu.org/software/package/’) is listed on https://www.gnu.org/software/software.html and https://www.gnu.org/manual/manual.html. To avoid broken links, the webmasters create a temporary home page as follows: + +If there is a Savannah project for this package (see Hosting for Web Pages), the temporary home page redirects to the project’s main page, ‘https://savannah.gnu.org/projects/package’, where a short description should be available. +Otherwise, the webmasters make a simple home page containing the short description provided with the original submission of the package to GNU. +This temporary home page ought to be replaced with the real one as soon as possible. + +Some GNU packages have just simple web pages, but the more information you provide, the better. So please write as much as you usefully can, and put all of it on www.gnu.org. However, pages that access databases (including mail archives and bug tracking) are an exception; set them up on whatever site is convenient for you, and make the pages on www.gnu.org link to that site. + +Your web pages should follow our usual standards (see https://www.gnu.org/server/fsf-html-style-sheet.html). The overall goals are to support a wide variety of browsers, to focus on information rather than visual adornments, and to keep gnu.org/software/ consistent on certain important points. + +We encourage you to use the standard www.gnu.org template as the basis for your pages: https://www.gnu.org/server/standards/boilerplate-source.html. This template changes slightly from time to time for various reasons. If a change affects existing web pages, the webmasters will inform you; then you can make the change or they can. + +Please follow the best practices of accessibility in your web pages (see https://www.gnu.org/accessibility/accessibility.html). + +• Hosting for Web Pages: +• Freedom for Web Pages: +• Manuals on Web Pages: +• CVS Keywords in Web Pages: + +------------------------------------------------------------------------------ +Next: Freedom for Web Pages, Up: Web Pages [Contents][Index] + +12.1 Hosting for Web Pages +The best way to maintain the web pages for your project is to register the project on savannah.gnu.org. Then you can edit the pages using CVS, using the separate “web pages repository” available on Savannah, which corresponds to ‘https://www.gnu.org/software/package/’. You can keep your source files there too (using any of a variety of version control systems), but you can use savannah.gnu.org only for your gnu.org web pages if you wish; simply register a “web-only” project. + +If you don’t want to use that method, please talk with webmasters@gnu.org about other possible methods. For instance, you can mail them pages to install, if necessary. But that is more work for them, so please use Savannah if you can. + +Please note that the GNU webmasters may fix technical details in your web pages (HTML, CSS, obvious typos, broken links in the footer, etc.) and inform you of the change afterwards. + +If you use Savannah, you can use a special file named .symlinks in order to create symbolic links, which are not supported in CVS. For details, see https://www.gnu.org/server/standards/README.webmastering.html#symlinks. + +------------------------------------------------------------------------------ +Next: Manuals on Web Pages, Previous: Hosting for Web Pages, Up: Web Pages [Contents][Index] + +12.2 Freedom for Web Pages +If you use a site other than www.gnu.org, please make sure that the site runs on free software alone. (It is ok if the site uses unreleased custom software, since that is free in a trivial sense: there’s only one user and it has the four freedoms.) If the web site for a GNU package runs on non-free software, the public will see this, and it will have the effect of granting legitimacy to the non-free program. + +If you use multiple sites, they should all follow that criterion. Please don’t link to a site that is about your package, which the public might perceive as connected with it and reflecting the position of its developers, unless it follows that criterion. + +Please make sure it is possible to use the web site fully using the Lynx browser, and with the IceCat browser with LibreJS enabled. It should work both with Tor and without Tor. Of course, it is desirable for the site to support as many other browsers as possible. + +Historically, web pages for GNU packages did not include GIF images, because of patent problems (see Ethical and Philosophical Consideration). Although the GIF patents expired in 2006, using GIF images is still not recommended, as the PNG and JPEG formats are generally superior. See https://www.gnu.org/philosophy/gif.html. + +Please make sure that any Javascript code in your web pages is covered by a free license, and has its license indicated in a way LibreJS can recognize. See https://gnu.org/philosophy/javascript-trap.html. If the Javascript in the page is minified, or for any other reason is not the source code, it must point to its source code as described there. + +------------------------------------------------------------------------------ diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/cfg/dest-list.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/cfg/dest-list.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/cfg/flow.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/cfg/flow.imi diff --git a/devspec.en_US/project/build-sample/cfg/step.imi b/devspec.en_US/project/build-sample/cfg/step.imi new file mode 100755 index 0000000..87b2c0b --- /dev/null +++ b/devspec.en_US/project/build-sample/cfg/step.imi @@ -0,0 +1,5 @@ + + +tag => step => tag/dest => step => tag => tasklib => imi-cfg + +buildstep=depchk cpldep compile link diff --git a/devspec.en_US/project/build-sample/cfg/taglist.imi b/devspec.en_US/project/build-sample/cfg/taglist.imi new file mode 100755 index 0000000..1a2559e --- /dev/null +++ b/devspec.en_US/project/build-sample/cfg/taglist.imi @@ -0,0 +1,59 @@ + +task+="input" +task+="output" +task+="cmpldep" +task+="taskparam" +task+="cmd" +task+="taskfunc" +task+="pfx" + +# task+="input" +# task+="input" +# task+="input" +# task+="input" +# task+="input" +# task+="input" +# task+="input" +# task+="input" + + + +taglist+="init" +taglist+="compile" +taglist+="build" +taglist+="depchk" +taglist+="dest" +taglist+="cross" +taglist+="devel" +taglist+="debug" +taglist+="release" +taglist+="normal" +taglist+="testing" +taglist+="pkg" +taglist+="tarball" +taglist+="install" + +taglist+="list" +taglist+="scan" +taglist+="addproj" +taglist+="addmod" +taglist+="addsrc" +taglist+="adddest" +taglist+="addlib" +taglist+="d2c" +taglist+="c2d" +taglist+="unitesting" +taglist+="verinc" +taglist+="commit" +taglist+="publish" + + + + + +# taglist+="init" +# taglist+="init" +# taglist+="init" + + + diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/default-params/compile-src-asm.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/default-params/compile-src-asm.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/default-params/compile-src-c.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/default-params/compile-src-c.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/default-params/compile-src-cpp.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/default-params/compile-src-cpp.imi diff --git a/devspec.en_US/project/build-sample/default-params/link-dest-a.imi b/devspec.en_US/project/build-sample/default-params/link-dest-a.imi new file mode 100755 index 0000000..69d1d66 --- /dev/null +++ b/devspec.en_US/project/build-sample/default-params/link-dest-a.imi @@ -0,0 +1,33 @@ + + +[dest] +NAME= +TYPE= + +[lib-pkg] +LIB_PKG+=`pkg-config cxt` + + +[libpath] +LIB_PATH+= + + +[incpath] +INC_PATH+=-I. +INC_PATH+=-I.. + + +[macro] +MACRO_DEF+=-DMACRO_TEST + +[opt] +OPT= + + +[param] +CFLAGS+= +CPPFLAGS+= +LDFLAGS+= + + + diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/default-params/link-dest-bin.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/default-params/link-dest-bin.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/default-params/link-dest-elf.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/default-params/link-dest-elf.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/default-params/link-dest-hex.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/default-params/link-dest-hex.imi diff --git a/devspec.en_US/project/build-sample/default-params/link-dest-la.imi b/devspec.en_US/project/build-sample/default-params/link-dest-la.imi new file mode 100755 index 0000000..69d1d66 --- /dev/null +++ b/devspec.en_US/project/build-sample/default-params/link-dest-la.imi @@ -0,0 +1,33 @@ + + +[dest] +NAME= +TYPE= + +[lib-pkg] +LIB_PKG+=`pkg-config cxt` + + +[libpath] +LIB_PATH+= + + +[incpath] +INC_PATH+=-I. +INC_PATH+=-I.. + + +[macro] +MACRO_DEF+=-DMACRO_TEST + +[opt] +OPT= + + +[param] +CFLAGS+= +CPPFLAGS+= +LDFLAGS+= + + + diff --git a/devspec.en_US/project/build-sample/default-params/link-dest-o.imi b/devspec.en_US/project/build-sample/default-params/link-dest-o.imi new file mode 100755 index 0000000..69d1d66 --- /dev/null +++ b/devspec.en_US/project/build-sample/default-params/link-dest-o.imi @@ -0,0 +1,33 @@ + + +[dest] +NAME= +TYPE= + +[lib-pkg] +LIB_PKG+=`pkg-config cxt` + + +[libpath] +LIB_PATH+= + + +[incpath] +INC_PATH+=-I. +INC_PATH+=-I.. + + +[macro] +MACRO_DEF+=-DMACRO_TEST + +[opt] +OPT= + + +[param] +CFLAGS+= +CPPFLAGS+= +LDFLAGS+= + + + diff --git a/devspec.en_US/project/build-sample/default-params/link-dest-so.imi b/devspec.en_US/project/build-sample/default-params/link-dest-so.imi new file mode 100755 index 0000000..69d1d66 --- /dev/null +++ b/devspec.en_US/project/build-sample/default-params/link-dest-so.imi @@ -0,0 +1,33 @@ + + +[dest] +NAME= +TYPE= + +[lib-pkg] +LIB_PKG+=`pkg-config cxt` + + +[libpath] +LIB_PATH+= + + +[incpath] +INC_PATH+=-I. +INC_PATH+=-I.. + + +[macro] +MACRO_DEF+=-DMACRO_TEST + +[opt] +OPT= + + +[param] +CFLAGS+= +CPPFLAGS+= +LDFLAGS+= + + + diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/default-params/list-inc-hdr.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/default-params/list-inc-hdr.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/default-params/list-inc-lib.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/default-params/list-inc-lib.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/default-params/list-inc-pkg.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/default-params/list-inc-pkg.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/default-params/list-macro-define.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/default-params/list-macro-define.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/default-params/list-path-incpath.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/default-params/list-path-incpath.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/default-params/list-path-libpath.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/default-params/list-path-libpath.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/dest-test/compile-src-asm.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/dest-test/compile-src-asm.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/dest-test/compile-src-c.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/dest-test/compile-src-c.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/dest-test/compile-src-cpp.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/dest-test/compile-src-cpp.imi diff --git a/devspec.en_US/project/build-sample/dest-test/dest.imi b/devspec.en_US/project/build-sample/dest-test/dest.imi new file mode 100755 index 0000000..69d1d66 --- /dev/null +++ b/devspec.en_US/project/build-sample/dest-test/dest.imi @@ -0,0 +1,33 @@ + + +[dest] +NAME= +TYPE= + +[lib-pkg] +LIB_PKG+=`pkg-config cxt` + + +[libpath] +LIB_PATH+= + + +[incpath] +INC_PATH+=-I. +INC_PATH+=-I.. + + +[macro] +MACRO_DEF+=-DMACRO_TEST + +[opt] +OPT= + + +[param] +CFLAGS+= +CPPFLAGS+= +LDFLAGS+= + + + diff --git a/devspec.en_US/project/build-sample/dest-test/link-dest-a.imi b/devspec.en_US/project/build-sample/dest-test/link-dest-a.imi new file mode 100755 index 0000000..69d1d66 --- /dev/null +++ b/devspec.en_US/project/build-sample/dest-test/link-dest-a.imi @@ -0,0 +1,33 @@ + + +[dest] +NAME= +TYPE= + +[lib-pkg] +LIB_PKG+=`pkg-config cxt` + + +[libpath] +LIB_PATH+= + + +[incpath] +INC_PATH+=-I. +INC_PATH+=-I.. + + +[macro] +MACRO_DEF+=-DMACRO_TEST + +[opt] +OPT= + + +[param] +CFLAGS+= +CPPFLAGS+= +LDFLAGS+= + + + diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/dest-test/link-dest-bin.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/dest-test/link-dest-bin.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/dest-test/link-dest-elf.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/dest-test/link-dest-elf.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/dest-test/link-dest-hex.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/dest-test/link-dest-hex.imi diff --git a/devspec.en_US/project/build-sample/dest-test/link-dest-la.imi b/devspec.en_US/project/build-sample/dest-test/link-dest-la.imi new file mode 100755 index 0000000..69d1d66 --- /dev/null +++ b/devspec.en_US/project/build-sample/dest-test/link-dest-la.imi @@ -0,0 +1,33 @@ + + +[dest] +NAME= +TYPE= + +[lib-pkg] +LIB_PKG+=`pkg-config cxt` + + +[libpath] +LIB_PATH+= + + +[incpath] +INC_PATH+=-I. +INC_PATH+=-I.. + + +[macro] +MACRO_DEF+=-DMACRO_TEST + +[opt] +OPT= + + +[param] +CFLAGS+= +CPPFLAGS+= +LDFLAGS+= + + + diff --git a/devspec.en_US/project/build-sample/dest-test/link-dest-o.imi b/devspec.en_US/project/build-sample/dest-test/link-dest-o.imi new file mode 100755 index 0000000..69d1d66 --- /dev/null +++ b/devspec.en_US/project/build-sample/dest-test/link-dest-o.imi @@ -0,0 +1,33 @@ + + +[dest] +NAME= +TYPE= + +[lib-pkg] +LIB_PKG+=`pkg-config cxt` + + +[libpath] +LIB_PATH+= + + +[incpath] +INC_PATH+=-I. +INC_PATH+=-I.. + + +[macro] +MACRO_DEF+=-DMACRO_TEST + +[opt] +OPT= + + +[param] +CFLAGS+= +CPPFLAGS+= +LDFLAGS+= + + + diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/dest-test/list-inc-hdr.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/dest-test/list-inc-hdr.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/dest-test/list-inc-lib.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/dest-test/list-inc-lib.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/dest-test/list-inc-pkg.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/dest-test/list-inc-pkg.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/dest-test/list-macro-define.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/dest-test/list-macro-define.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/dest-test/list-path-incpath.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/dest-test/list-path-incpath.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/dest-test/list-path-libpath.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/dest-test/list-path-libpath.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/dest-test/list-src-asm.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/dest-test/list-src-asm.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/dest-test/list-src-c.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/dest-test/list-src-c.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/dest-test/list-src-cpp.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/dest-test/list-src-cpp.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/dest-test/src/src.c.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/dest-test/src/src.c.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/compile-src-asm.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/imilib/buildpkg/public-params/compile-src-asm.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/compile-src-c.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/imilib/buildpkg/public-params/compile-src-c.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/compile-src-cpp.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/imilib/buildpkg/public-params/compile-src-cpp.imi diff --git a/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-a.imi b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-a.imi new file mode 100755 index 0000000..69d1d66 --- /dev/null +++ b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-a.imi @@ -0,0 +1,33 @@ + + +[dest] +NAME= +TYPE= + +[lib-pkg] +LIB_PKG+=`pkg-config cxt` + + +[libpath] +LIB_PATH+= + + +[incpath] +INC_PATH+=-I. +INC_PATH+=-I.. + + +[macro] +MACRO_DEF+=-DMACRO_TEST + +[opt] +OPT= + + +[param] +CFLAGS+= +CPPFLAGS+= +LDFLAGS+= + + + diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-bin.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-bin.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-elf.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-elf.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-hex.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-hex.imi diff --git a/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-la.imi b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-la.imi new file mode 100755 index 0000000..69d1d66 --- /dev/null +++ b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-la.imi @@ -0,0 +1,33 @@ + + +[dest] +NAME= +TYPE= + +[lib-pkg] +LIB_PKG+=`pkg-config cxt` + + +[libpath] +LIB_PATH+= + + +[incpath] +INC_PATH+=-I. +INC_PATH+=-I.. + + +[macro] +MACRO_DEF+=-DMACRO_TEST + +[opt] +OPT= + + +[param] +CFLAGS+= +CPPFLAGS+= +LDFLAGS+= + + + diff --git a/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-o.imi b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-o.imi new file mode 100755 index 0000000..69d1d66 --- /dev/null +++ b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-o.imi @@ -0,0 +1,33 @@ + + +[dest] +NAME= +TYPE= + +[lib-pkg] +LIB_PKG+=`pkg-config cxt` + + +[libpath] +LIB_PATH+= + + +[incpath] +INC_PATH+=-I. +INC_PATH+=-I.. + + +[macro] +MACRO_DEF+=-DMACRO_TEST + +[opt] +OPT= + + +[param] +CFLAGS+= +CPPFLAGS+= +LDFLAGS+= + + + diff --git a/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-so.imi b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-so.imi new file mode 100755 index 0000000..69d1d66 --- /dev/null +++ b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/link-dest-so.imi @@ -0,0 +1,33 @@ + + +[dest] +NAME= +TYPE= + +[lib-pkg] +LIB_PKG+=`pkg-config cxt` + + +[libpath] +LIB_PATH+= + + +[incpath] +INC_PATH+=-I. +INC_PATH+=-I.. + + +[macro] +MACRO_DEF+=-DMACRO_TEST + +[opt] +OPT= + + +[param] +CFLAGS+= +CPPFLAGS+= +LDFLAGS+= + + + diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/list-inc-hdr.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/imilib/buildpkg/public-params/list-inc-hdr.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/list-inc-lib.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/imilib/buildpkg/public-params/list-inc-lib.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/list-inc-pkg.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/imilib/buildpkg/public-params/list-inc-pkg.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/list-macro-define.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/imilib/buildpkg/public-params/list-macro-define.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/list-path-incpath.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/imilib/buildpkg/public-params/list-path-incpath.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/list-path-libpath.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/imilib/buildpkg/public-params/list-path-libpath.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/list-subproject.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/imilib/buildpkg/public-params/list-subproject.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/imilib/buildpkg/public-params/list-unit-testing.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/imilib/buildpkg/public-params/list-unit-testing.imi diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/project.imi old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/project.imi diff --git a/devspec.en_US/project/build-sample/readme.txt b/devspec.en_US/project/build-sample/readme.txt new file mode 100755 index 0000000..be3bdb6 --- /dev/null +++ b/devspec.en_US/project/build-sample/readme.txt @@ -0,0 +1,38 @@ + +[totoal] +@ listÎļþ + Ŀ¼½á¹¹ +# build½Å±¾³ÌÐò½«Ò»¸öprojectµÄÅäÖÃÎļþ»®·ÖΪ¶à¸ölistÎļþ¡£ +# ´Ó¹¦ÄÜÉÏ£¬Ò»¸ölistÁбíÎļþÁоٳöÏàͬÓÃ;µÄ²ÎÊý£¬ÔÚʹÓÃʱµÄ³ÌÐò´¦ÀíÉÏÒ²±È½ÏÈÝÒס£ +# Ïà±ÈxmlµÈÆäËüÎļþ¸ñʽ£¬¼¸ºõ²»ÐèÒª½âÎö£¬ÒÔÎļþϵͳµÄ½á¹¹¶Ôconfig²ÎÊýÒÔ²»Í¬½á¹¹µÄ×éÖ¯¡£ +# Ò»¸ölistÎļþ£¬ÈÝÒ×ÔÚÆäËü³ÌÐòÖÐʹÓ㬽øÐÐÌí¼Ó¡¢É¾³ý¡¢Î»Öõ÷Õû¡¢±éÀú£¬µÈ²Ù×÷£¬ÇÒ²»Í¬µÄlistÎļþÄÚÈÝʹÓÃÏàͬµÄ¹¦ÄܲÙ×÷½Ó¿Ú¡£ +@ +# ÒÔtag¡¢task¡¢flow£¬ÃèÊö±àÒëµÄstep¼°²Ù×÷¡£ + + + +[time] +@ ´´½¨Ò»¸öpublic¹¤³Ì£¬±àÒëÔ´Îļþ£¬±àÒ빤³ÌËùÐèʱ¼äµÈ²ÎÊý£¬±£´æµ½pkg-buildµÄÊý¾ÝÇø¡£ +@ ÔÚpkgÖиù¾ÝÎļþ¸öÊýºÍÎļþ´óС£¬Ô¤¹À±àÒëʱ¼ä¡£ +@ ±àÒëʱ¼äÓÃÓÚ²¢ÐбàÒëµÄ²¢·¢ÊýµÄÉèÖ᣶à°ü±àÒëÇÒÒÀÀµ¹Øϵʱ£¬¸ù¾Ý±àÒë·¾¶£¬ÉèÖÃpkg±àÒë²¢·¢Êý¡£ + + +[dir] +@ Èí¼þ°üµÄpkgĿ¼·ÅÖÃÈí¼þ°ü¹¹½¨Ê±µÄ²ÎÊý¡£ +@ public-paramsĿ¼·ÅÖÃÒ»¸öprojectµÄͨÓñàÒë²ÎÊý +@ default-paramsĿ¼·ÅÖõ±Ç°projectµÄĬÈϱàÒë²ÎÊý +@ dest-xxxĿ¼·ÅÖÃprojectÖÐÒ»¸öexecutableµÄ²ÎÊý +@ dest-xxx/srcĿ¼ÖУ¬»òimiÅäÖÃÎļþµÄ<filename>_CFLAGS²ÎÊýÖУ¬·ÅÖÃij¸öÔ´ÎļþµÄ±àÒë²ÎÊý£¬ÔÚ±àÒëʱʹÓᣠ+@ ±àÒë²ÎÊý°üÀ¨£ºpkg-builderĬÈϲÎÊý£¬projectÖеIJÎÊý£¬µ¥¸öexecutableµÄ²ÎÊý£¬µ¥¸öÔ´ÎļþµÄ±àÒë²ÎÊý¡£²¢ÒÔ²»Í¬µÄÉèÖÃÎļþ£¬·Ö±ð¿ÉÉèÖᣠ+@ list-unit-testing.imiÖаüº¬ÐèÒªµ¥Ôª²âÊÔµÄÄ£¿é¡£ÔÚproject½øÐÐsrcµÄscanʱ£¬xxx_testing.xÎļþµÄxxxÄ£¿éÌí¼Óµ½unit-testingÁбíÖС£µ¥Ôª²âÊÔÒÔxxx.oºÍxxx_testing.oÁ´½Ó³ÉÒ»¸öelfÎļþÓÃÓÚ²âÊÔ¡£ +@ ͨ³£Ò»¸öproject°üº¬Ò»¸öexecutable£¬ÀýÈçÒ»¸ölib¿âÖ»°üº¬Ò»¸ö.soÎļþ¡£Ê¹ÓÃdest-xxxĿ¼ÔÚÒ»¸öprojectÖаüº¬¶à¸ödestÎļþ£¬ÓÃÓÚһЩlib¿âµÄÈí¼þ°ü¸½´øһЩutils¡£¶ÔÓÚlinux-utilsÕâÑùµÄÈí¼þ°ü£¬°üº¬¶à¸ö³ÌÐòµÄ×éºÏ£¬¿ÉʹÓÃdest-xxxÊä³ö¶à¸ö³ÌÐò¡£ +@ ¶ÔÓÚÒ»¸ö³ÌÐò°üº¬¶à¸ölib¿â£¬»ò¶à¸ö³ÌÐòºÍ¶à¸ölib¿â£¬Ê¹ÓÃlist-subproject.imi£¬µ±Ç°projectΪһ¸öworkspace£¬°üº¬¶à¸öproject¡£Í¨³£µ±Ç°projectÖв»°üº¬Ô´Âë±àÒë¡£ + + +[tag] +@ taglist¶¨Òå±êÇ©£¬Ò»¸ötag°üº¬deplist¡¢actionlist¡¢step£¬ +@ Ò»¸östepÉèÖðüº¬ÁËÒ»¸ötagÔÚbuildʱÐèÒªÔËÐеÄÆäËütag¡£²»Í¬ÓÚdeplistµÄÊÇ£¬stepÊÇ°üº¬ÔËÐеÄÏȺó˳Ðò£¬¶ødeplistµÄtag¿ÉͬʱÔËÐС£deplistÊÇtagÖ®Í⣬»¹°üÀ¨src listµÈÎļþ£¬ +@ + + + + diff --git a/devspec.en_US/project/build-sample/setting.imi b/devspec.en_US/project/build-sample/setting.imi new file mode 100755 index 0000000..a23a398 --- /dev/null +++ b/devspec.en_US/project/build-sample/setting.imi @@ -0,0 +1,37 @@ + +[dest-list] +DEST_LIST+=test + +[flow] + +[dest::test] +name=test +type=elf +installpath=bin/ + +[step] +testing="scripttest" +unitesting="build testing" +compile="$src2o + $cmpldep" +build="$compile + $link" + +#link="$src2o + $cmpldep" + +[sub-project] +PROJECT_XXX=XXX + +[tag-list] +TAG_LIST="build compile link test" + +[toolchain] +TOOLCHAIN_NAME= + +CC= +CPP= +LD= +OBJCOPY= +RANLIB= +AR= +STRIPT= +PKGCONFIG= + diff --git a/devspec.en_US/project/build-sample/tasklib/build.shlib b/devspec.en_US/project/build-sample/tasklib/build.shlib new file mode 100755 index 0000000..976f27c --- /dev/null +++ b/devspec.en_US/project/build-sample/tasklib/build.shlib @@ -0,0 +1,446 @@ +#!/bin/bash +############################################################ +# source: toolchain.shlib +# author: devenkong(18151155@qq.com) +# date: 2022-04-21 +############################################################ +# note: +# build相关的函数集。 +############################################################ + +# +# todo: +# @ +# @ +# + +. shlibinc + +include gplib.shlib + +include stdio.shlib +#include term.shlib +#include args.shlib + +#include paths.shlib + +###################### +# section: 公用注释信息 +###################### + + + +###################### +# section: 变量定义 +###################### + + + + +###################### +# section: private函数 +###################### + + + + +###################### +# section: public函数 +###################### + + +######################################### +# 编译函数 +######################################### + +# +# fsyntax: a2o +# fdesc: asm汇编程序.S文件编译成.o文件。 +init () +{ + : +} + +# +# fsyntax: c2o +# fdesc: c语言程序.c文件编译成.o文件。 +depchk () +{ + : +} + +# +# fsyntax: cpp2o +# fdesc: cpp程序.cpp文件编译成.o文件。 +compile () +{ + : +} + +# +# fsyntax: c2h +# fdesc: c语言程序.c文件,输出/同步更新到模块对应的.h文件。 +link () +{ + : +} + +# +# fsyntax: cpp2h +# fdesc: cpp程序.cpp文件,输出/同步更新到模块对应的.h文件。 +cmpldep () +{ + : +} + +# +# fsyntax: srcdep +# fdesc: 源文件编译需要的.h文件的dep文件的创建,.h文件更新时,.dep文件需要更新, +# 对应的src文件重新编译。 +fcopy () +{ + : +} + + +######################################### +# 链接函数 +######################################### + +# +# fsyntax: o2o +# fdesc: .o文件链接成.o文件。 +pkggen () +{ + : +} + +# +# fsyntax: o2a +# fdesc: .o文件链接成.a文件。 +testing () +{ + : +} + +# +# fsyntax: o2la +# fdesc: .o文件链接成.la文件。 +tarball () +{ + : +} + +# +# fsyntax: o2so +# fdesc: .o文件链接成.so文件。 +install () +{ + : +} + + +######################################### +# build相关的类型参数设置函数。 +######################################### + +# +# fsyntax: o2elf +# fdesc: .o文件链接成elf可执行文件。 +setcross () +{ + : +} + +# +# fsyntax: elf2bin +# fdesc: elf文件读取code/data的section,保存成bin文件。 +# 通常用于非操作系统环境下运行的程序。 +setdevel () +{ + : +} + +# +# fsyntax: bin2hex +# fdesc: bin二进制文件转换成hex字符串。 +setnormal () +{ + : +} + +# +# fsyntax: hex2bin +# fdesc: hex字符串转换成bin二进制数据文件。 +setdebug () +{ + : +} + +# +# fsyntax: fbin2fhex +# fdesc: bin二进制文件转换成hex文件。 +setrelease () +{ + : +} + + +######################################### +# build相关的类型参数设置函数。 +######################################### + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +list () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +scan () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +addproj () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +addmod () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +addsrc () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +adddest () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +addlib () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +addelf () +{ + : +} + + +######################################### +# develop相关的功能函数。 +######################################### + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +d2c () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +c2d () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +unitesting () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +verinc () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +commit () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +publish () +{ + : +} + + + + + + + + + + + + + + + + +######################################### +# build相关的类型参数设置函数。 +######################################### + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +fhex2fbin () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +fhex2fbin () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +fhex2fbin () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +fhex2fbin () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +fhex2fbin () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +fhex2fbin () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +fhex2fbin () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +fhex2fbin () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +fhex2fbin () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +fhex2fbin () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +fhex2fbin () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +fhex2fbin () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +fhex2fbin () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +fhex2fbin () +{ + : +} + + + +###################### +# section: file tail +###################### + diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/tasklib/toolchain-gcc/compile-asm.shlib old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/tasklib/toolchain-gcc/compile-asm.shlib diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/tasklib/toolchain-gcc/compile-c.shlib old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/tasklib/toolchain-gcc/compile-c.shlib diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/tasklib/toolchain-gcc/compile-cpp.shlib old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/tasklib/toolchain-gcc/compile-cpp.shlib diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/tasklib/toolchain-gcc/fmt-bin2hex.shlib old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/tasklib/toolchain-gcc/fmt-bin2hex.shlib diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/tasklib/toolchain-gcc/fmt-hex2bin.shlib old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/tasklib/toolchain-gcc/fmt-hex2bin.shlib diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/tasklib/toolchain-gcc/link-a.shlib old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/tasklib/toolchain-gcc/link-a.shlib diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/tasklib/toolchain-gcc/link-elf.shlib old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/tasklib/toolchain-gcc/link-elf.shlib diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/tasklib/toolchain-gcc/link-la.shlib old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/tasklib/toolchain-gcc/link-la.shlib diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/tasklib/toolchain-gcc/link-o.shlib old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/tasklib/toolchain-gcc/link-o.shlib diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/tasklib/toolchain-gcc/link-so.shlib old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/tasklib/toolchain-gcc/link-so.shlib diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/tasklib/toolchain-gcc/objcopy-bin.shlib old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/tasklib/toolchain-gcc/objcopy-bin.shlib diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/tasklib/toolchain-gcc/src-hdr-dep.shlib old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/tasklib/toolchain-gcc/src-hdr-dep.shlib diff --git a/devspec.en_US/file b/devspec.en_US/project/build-sample/tasklib/toolchain-gcc/toolchain.shlib old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/build-sample/tasklib/toolchain-gcc/toolchain.shlib diff --git a/devspec.en_US/project/build-sample/tasklib/toolchain.shlib b/devspec.en_US/project/build-sample/tasklib/toolchain.shlib new file mode 100755 index 0000000..be673b1 --- /dev/null +++ b/devspec.en_US/project/build-sample/tasklib/toolchain.shlib @@ -0,0 +1,201 @@ +#!/bin/bash +############################################################ +# source: toolchain.shlib +# author: devenkong(18151155@qq.com) +# date: 2022-04-21 +############################################################ +# note: +# 编译器工具链相关的函数集。 +############################################################ + +# +# todo: +# @ +# @ +# + +. shlibinc + +include gplib.shlib + +include stdio.shlib +#include term.shlib +#include args.shlib + +#include paths.shlib + +###################### +# section: 公用注释信息 +###################### + + + +###################### +# section: 变量定义 +###################### + + + + +###################### +# section: private函数 +###################### + + + + +###################### +# section: public函数 +###################### + + +######################################### +# 编译函数 +######################################### + +# +# fsyntax: a2o +# fdesc: asm汇编程序.S文件编译成.o文件。 +a2o () +{ + : +} + +# +# fsyntax: c2o +# fdesc: c语言程序.c文件编译成.o文件。 +c2o () +{ + : +} + +# +# fsyntax: cpp2o +# fdesc: cpp程序.cpp文件编译成.o文件。 +cpp2o () +{ + : +} + +# +# fsyntax: c2h +# fdesc: c语言程序.c文件,输出/同步更新到模块对应的.h文件。 +c2h () +{ + : +} + +# +# fsyntax: cpp2h +# fdesc: cpp程序.cpp文件,输出/同步更新到模块对应的.h文件。 +cpp2h () +{ + : +} + +# +# fsyntax: srcdep +# fdesc: 源文件编译需要的.h文件的dep文件的创建,.h文件更新时,.dep文件需要更新, +# 对应的src文件重新编译。 +srcdep () +{ + : +} + + +######################################### +# 链接函数 +######################################### + +# +# fsyntax: o2o +# fdesc: .o文件链接成.o文件。 +o2o () +{ + : +} + +# +# fsyntax: o2a +# fdesc: .o文件链接成.a文件。 +o2a () +{ + : +} + +# +# fsyntax: o2la +# fdesc: .o文件链接成.la文件。 +o2la () +{ + : +} + +# +# fsyntax: o2so +# fdesc: .o文件链接成.so文件。 +o2so () +{ + : +} + +# +# fsyntax: o2elf +# fdesc: .o文件链接成elf可执行文件。 +o2elf () +{ + : +} + + +######################################### +# bin/hex格式的文件输出和格式转换。 +######################################### + +# +# fsyntax: elf2bin +# fdesc: elf文件读取code/data的section,保存成bin文件。 +# 通常用于非操作系统环境下运行的程序。 +elf2bin () +{ + : +} + +# +# fsyntax: bin2hex +# fdesc: bin二进制文件转换成hex字符串。 +bin2hex () +{ + : +} + +# +# fsyntax: hex2bin +# fdesc: hex字符串转换成bin二进制数据文件。 +hex2bin () +{ + : +} + +# +# fsyntax: fbin2fhex +# fdesc: bin二进制文件转换成hex文件。 +fbin2fhex () +{ + : +} + +# +# fsyntax: fhex2fbin +# fdesc: hex文件转换成bin二进制数据文件。 +fhex2fbin () +{ + : +} + + + +###################### +# section: file tail +###################### + diff --git a/devspec.en_US/file b/devspec.en_US/project/recutils-build/dest-list.txt old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/recutils-build/dest-list.txt diff --git a/devspec.en_US/project/recutils/ABOUT-NLS b/devspec.en_US/project/recutils/ABOUT-NLS new file mode 100755 index 0000000..3cc8286 --- /dev/null +++ b/devspec.en_US/project/recutils/ABOUT-NLS @@ -0,0 +1,1379 @@ +1 Notes on the Free Translation Project +*************************************** + +Free software is going international! The Free Translation Project is a +way to get maintainers of free software, translators, and users all +together, so that free software will gradually become able to speak many +languages. A few packages already provide translations for their +messages. + + If you found this 'ABOUT-NLS' file inside a distribution, you may +assume that the distributed package does use GNU 'gettext' internally, +itself available at your nearest GNU archive site. But you do _not_ +need to install GNU 'gettext' prior to configuring, installing or using +this package with messages translated. + + Installers will find here some useful hints. These notes also +explain how users should proceed for getting the programs to use the +available translations. They tell how people wanting to contribute and +work on translations can contact the appropriate team. + +1.1 INSTALL Matters +=================== + +Some packages are "localizable" when properly installed; the programs +they contain can be made to speak your own native language. Most such +packages use GNU 'gettext'. Other packages have their own ways to +internationalization, predating GNU 'gettext'. + + By default, this package will be installed to allow translation of +messages. It will automatically detect whether the system already +provides the GNU 'gettext' functions. Installers may use special +options at configuration time for changing the default behaviour. The +command: + + ./configure --disable-nls + +will _totally_ disable translation of messages. + + When you already have GNU 'gettext' installed on your system and run +configure without an option for your new package, 'configure' will +probably detect the previously built and installed 'libintl' library and +will decide to use it. If not, you may have to to use the +'--with-libintl-prefix' option to tell 'configure' where to look for it. + + Internationalized packages usually have many 'po/LL.po' files, where +LL gives an ISO 639 two-letter code identifying the language. Unless +translations have been forbidden at 'configure' time by using the +'--disable-nls' switch, all available translations are installed +together with the package. However, the environment variable 'LINGUAS' +may be set, prior to configuration, to limit the installed set. +'LINGUAS' should then contain a space separated list of two-letter +codes, stating which languages are allowed. + +1.2 Using This Package +====================== + +As a user, if your language has been installed for this package, you +only have to set the 'LANG' environment variable to the appropriate +'LL_CC' combination. If you happen to have the 'LC_ALL' or some other +'LC_xxx' environment variables set, you should unset them before setting +'LANG', otherwise the setting of 'LANG' will not have the desired +effect. Here 'LL' is an ISO 639 two-letter language code, and 'CC' is +an ISO 3166 two-letter country code. For example, let's suppose that +you speak German and live in Germany. At the shell prompt, merely +execute 'setenv LANG de_DE' (in 'csh'), 'export LANG; LANG=de_DE' (in +'sh') or 'export LANG=de_DE' (in 'bash'). This can be done from your +'.login' or '.profile' file, once and for all. + + You might think that the country code specification is redundant. +But in fact, some languages have dialects in different countries. For +example, 'de_AT' is used for Austria, and 'pt_BR' for Brazil. The +country code serves to distinguish the dialects. + + The locale naming convention of 'LL_CC', with 'LL' denoting the +language and 'CC' denoting the country, is the one use on systems based +on GNU libc. On other systems, some variations of this scheme are used, +such as 'LL' or 'LL_CC.ENCODING'. You can get the list of locales +supported by your system for your language by running the command +'locale -a | grep '^LL''. + + Not all programs have translations for all languages. By default, an +English message is shown in place of a nonexistent translation. If you +understand other languages, you can set up a priority list of languages. +This is done through a different environment variable, called +'LANGUAGE'. GNU 'gettext' gives preference to 'LANGUAGE' over 'LANG' +for the purpose of message handling, but you still need to have 'LANG' +set to the primary language; this is required by other parts of the +system libraries. For example, some Swedish users who would rather read +translations in German than English for when Swedish is not available, +set 'LANGUAGE' to 'sv:de' while leaving 'LANG' to 'sv_SE'. + + Special advice for Norwegian users: The language code for Norwegian +bokma*l changed from 'no' to 'nb' recently (in 2003). During the +transition period, while some message catalogs for this language are +installed under 'nb' and some older ones under 'no', it's recommended +for Norwegian users to set 'LANGUAGE' to 'nb:no' so that both newer and +older translations are used. + + In the 'LANGUAGE' environment variable, but not in the 'LANG' +environment variable, 'LL_CC' combinations can be abbreviated as 'LL' to +denote the language's main dialect. For example, 'de' is equivalent to +'de_DE' (German as spoken in Germany), and 'pt' to 'pt_PT' (Portuguese +as spoken in Portugal) in this context. + +1.3 Translating Teams +===================== + +For the Free Translation Project to be a success, we need interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +Each translation team has its own mailing list. The up-to-date list of +teams can be found at the Free Translation Project's homepage, +'http://translationproject.org/', in the "Teams" area. + + If you'd like to volunteer to _work_ at translating messages, you +should become a member of the translating team for your own language. +The subscribing address is _not_ the same as the list itself, it has +'-request' appended. For example, speakers of Swedish can send a +message to 'sv-request@li.org', having this message body: + + subscribe + + Keep in mind that team members are expected to participate _actively_ +in translations, or at solving translational difficulties, rather than +merely lurking around. If your team does not exist yet and you want to +start one, or if you are unsure about what to do or how to get started, +please write to 'coordinator@translationproject.org' to reach the +coordinator for all translator teams. + + The English team is special. It works at improving and uniformizing +the terminology in use. Proven linguistic skills are praised more than +programming skills, here. + +1.4 Available Packages +====================== + +Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of Jun 2014. +The matrix shows, in regard of each package, for which languages PO +files have been submitted to translation coordination, with a +translation percentage of at least 50%. + + Ready PO files af am an ar as ast az be bg bn bn_IN bs ca crh cs + +---------------------------------------------------+ + a2ps | [] [] [] | + aegis | | + anubis | | + aspell | [] [] [] | + bash | [] [] [] | + bfd | | + binutils | [] | + bison | | + bison-runtime | [] | + buzztrax | [] | + ccd2cue | | + ccide | | + cflow | | + clisp | | + coreutils | [] [] | + cpio | | + cppi | | + cpplib | [] | + cryptsetup | [] | + datamash | | + denemo | [] [] | + dfarc | [] | + dialog | [] [] [] | + dico | | + diffutils | [] | + dink | [] | + direvent | | + doodle | [] | + dos2unix | | + dos2unix-man | | + e2fsprogs | [] [] | + enscript | [] | + exif | [] | + fetchmail | [] [] | + findutils | [] | + flex | [] | + freedink | [] [] | + fusionforge | | + gas | | + gawk | [] | + gcal | [] | + gcc | | + gdbm | | + gettext-examples | [] [] [] [] [] | + gettext-runtime | [] [] [] | + gettext-tools | [] [] | + gjay | | + glunarclock | [] [] [] | + gnubiff | [] | + gnubik | [] | + gnucash | () () [] | + gnuchess | | + gnulib | [] | + gnunet | | + gnunet-gtk | | + gold | | + gphoto2 | [] | + gprof | [] | + gramadoir | | + grep | [] [] [] | + grub | [] | + gsasl | | + gss | | + gst-plugins-bad | [] [] | + gst-plugins-base | [] [] [] | + gst-plugins-good | [] [] [] | + gst-plugins-ugly | [] [] [] | + gstreamer | [] [] [] [] | + gtick | [] | + gtkam | [] [] | + gtkspell | [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] | + hello | [] | + help2man | | + help2man-texi | | + hylafax | | + idutils | | + iso_15924 | [] | + iso_3166 | [] [] [] [] [] [] [] [] [] [] | + iso_3166_2 | | + iso_4217 | [] | + iso_639 | [] [] [] [] [] [] [] [] [] | + iso_639_3 | [] [] | + iso_639_5 | | + jwhois | | + kbd | [] | + klavaro | [] [] [] [] [] | + ld | [] | + leafpad | [] [] [] [] | + libc | [] [] [] | + libexif | () | + libextractor | | + libgnutls | [] | + libgphoto2 | [] | + libgphoto2_port | [] | + libgsasl | | + libiconv | [] [] | + libidn | [] | + liferea | [] [] [] [] | + lilypond | [] [] | + lordsawar | [] | + lprng | | + lynx | [] [] | + m4 | [] | + mailfromd | | + mailutils | | + make | [] | + man-db | [] [] | + man-db-manpages | | + midi-instruments | [] [] [] | + minicom | [] | + mkisofs | [] | + myserver | [] | + nano | [] [] [] | + opcodes | | + parted | [] | + pies | | + pnmixer | | + popt | [] | + procps-ng | | + procps-ng-man | | + psmisc | [] | + pspp | [] | + pushover | [] | + pwdutils | | + pyspread | | + radius | [] | + recode | [] [] [] | + recutils | | + rpm | | + rush | | + sarg | | + sed | [] [] [] [] | + sharutils | [] | + shishi | | + skribilo | | + solfege | [] [] | + solfege-manual | | + spotmachine | | + sudo | [] [] | + sudoers | [] [] | + sysstat | [] | + tar | [] [] [] | + texinfo | [] [] | + texinfo_document | [] [] | + tigervnc | [] | + tin | | + tin-man | | + tracgoogleappsa... | | + trader | | + util-linux | [] | + ve | | + vice | | + vmm | | + vorbis-tools | [] | + wastesedge | | + wcd | | + wcd-man | | + wdiff | [] [] | + wget | [] | + wyslij-po | | + xboard | | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] | + +---------------------------------------------------+ + af am an ar as ast az be bg bn bn_IN bs ca crh cs + 4 0 2 5 3 11 0 8 25 3 3 1 55 4 74 + + da de el en en_GB en_ZA eo es et eu fa fi fr + +--------------------------------------------------+ + a2ps | [] [] [] [] [] [] [] [] [] | + aegis | [] [] [] [] | + anubis | [] [] [] [] [] | + aspell | [] [] [] [] [] [] [] | + bash | [] [] [] | + bfd | [] [] [] [] | + binutils | [] [] [] | + bison | [] [] [] [] [] [] [] [] | + bison-runtime | [] [] [] [] [] [] [] [] | + buzztrax | [] [] [] [] | + ccd2cue | [] [] [] [] | + ccide | [] [] [] [] [] [] | + cflow | [] [] [] [] [] | + clisp | [] [] [] [] [] | + coreutils | [] [] [] [] [] | + cpio | [] [] [] [] [] | + cppi | [] [] [] [] [] | + cpplib | [] [] [] [] [] [] | + cryptsetup | [] [] [] [] [] | + datamash | [] [] [] [] | + denemo | [] | + dfarc | [] [] [] [] [] [] | + dialog | [] [] [] [] [] [] [] [] [] | + dico | [] [] [] [] | + diffutils | [] [] [] [] [] [] | + dink | [] [] [] [] [] [] | + direvent | [] [] [] [] | + doodle | [] [] [] [] | + dos2unix | [] [] [] [] [] | + dos2unix-man | [] [] [] | + e2fsprogs | [] [] [] [] [] | + enscript | [] [] [] [] [] [] | + exif | [] [] [] [] [] [] | + fetchmail | [] () [] [] [] [] [] | + findutils | [] [] [] [] [] [] [] [] | + flex | [] [] [] [] [] [] | + freedink | [] [] [] [] [] [] [] [] | + fusionforge | [] [] [] | + gas | [] [] [] | + gawk | [] [] [] [] [] | + gcal | [] [] [] [] | + gcc | [] | + gdbm | [] [] [] [] [] | + gettext-examples | [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] | + gettext-tools | [] [] [] [] [] | + gjay | [] [] [] [] | + glunarclock | [] [] [] [] [] | + gnubiff | () [] [] () | + gnubik | [] [] [] [] [] | + gnucash | [] () () () () () () | + gnuchess | [] [] [] [] | + gnulib | [] [] [] [] [] [] [] | + gnunet | [] | + gnunet-gtk | [] | + gold | [] [] [] | + gphoto2 | [] () [] [] | + gprof | [] [] [] [] [] [] | + gramadoir | [] [] [] [] [] | + grep | [] [] [] [] [] [] [] | + grub | [] [] [] [] [] | + gsasl | [] [] [] [] [] | + gss | [] [] [] [] [] | + gst-plugins-bad | [] [] [] | + gst-plugins-base | [] [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] [] [] | + gtick | [] () [] [] [] | + gtkam | [] () [] [] [] [] | + gtkspell | [] [] [] [] [] [] [] [] | + guix | [] [] | + guix-packages | | + gutenprint | [] [] [] [] | + hello | [] [] [] [] [] [] [] [] | + help2man | [] [] [] [] [] [] [] | + help2man-texi | [] [] [] | + hylafax | [] [] | + idutils | [] [] [] [] [] | + iso_15924 | [] () [] [] () [] () | + iso_3166 | [] () [] [] [] [] () [] () | + iso_3166_2 | [] () () () | + iso_4217 | [] () [] [] [] () [] () | + iso_639 | [] () [] [] () [] () | + iso_639_3 | () () () | + iso_639_5 | () () () | + jwhois | [] [] [] [] [] | + kbd | [] [] [] [] [] [] | + klavaro | [] [] [] [] [] [] [] | + ld | [] [] [] [] | + leafpad | [] [] [] [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] [] () [] [] | + libextractor | [] | + libgnutls | [] [] [] [] | + libgphoto2 | [] () [] | + libgphoto2_port | [] () [] [] [] [] | + libgsasl | [] [] [] [] [] | + libiconv | [] [] [] [] [] [] [] | + libidn | [] [] [] [] [] | + liferea | [] () [] [] [] [] [] | + lilypond | [] [] [] [] [] [] | + lordsawar | [] [] | + lprng | | + lynx | [] [] [] [] [] [] | + m4 | [] [] [] [] [] [] | + mailfromd | [] | + mailutils | [] [] [] [] | + make | [] [] [] [] [] | + man-db | [] [] [] [] | + man-db-manpages | [] [] | + midi-instruments | [] [] [] [] [] [] [] [] [] | + minicom | [] [] [] [] [] | + mkisofs | [] [] [] | + myserver | [] [] [] [] | + nano | [] [] [] [] [] [] [] | + opcodes | [] [] [] [] [] | + parted | [] [] [] | + pies | [] | + pnmixer | [] [] | + popt | [] [] [] [] [] [] | + procps-ng | [] [] | + procps-ng-man | [] [] | + psmisc | [] [] [] [] [] [] [] | + pspp | [] [] [] | + pushover | () [] [] [] | + pwdutils | [] [] [] | + pyspread | [] [] [] | + radius | [] [] | + recode | [] [] [] [] [] [] [] | + recutils | [] [] [] [] | + rpm | [] [] [] [] [] | + rush | [] [] [] | + sarg | [] [] | + sed | [] [] [] [] [] [] [] [] | + sharutils | [] [] [] [] | + shishi | [] [] [] | + skribilo | [] [] [] | + solfege | [] [] [] [] [] [] [] [] | + solfege-manual | [] [] [] [] [] | + spotmachine | [] [] [] [] [] | + sudo | [] [] [] [] [] [] | + sudoers | [] [] [] [] [] [] | + sysstat | [] [] [] [] [] [] | + tar | [] [] [] [] [] [] [] | + texinfo | [] [] [] [] [] | + texinfo_document | [] [] [] [] | + tigervnc | [] [] [] [] [] [] | + tin | [] [] [] [] | + tin-man | [] | + tracgoogleappsa... | [] [] [] [] [] | + trader | [] [] [] [] [] [] | + util-linux | [] [] [] [] | + ve | [] [] [] [] [] | + vice | () () () | + vmm | [] [] | + vorbis-tools | [] [] [] [] | + wastesedge | [] | + wcd | [] [] [] [] | + wcd-man | [] | + wdiff | [] [] [] [] [] [] [] | + wget | [] [] [] [] [] [] | + wyslij-po | [] [] [] [] | + xboard | [] [] [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] [] [] [] | + +--------------------------------------------------+ + da de el en en_GB en_ZA eo es et eu fa fi fr + 119 131 32 1 6 0 94 95 22 13 4 102 139 + + ga gd gl gu he hi hr hu hy ia id is it ja ka kk + +-------------------------------------------------+ + a2ps | [] [] [] [] | + aegis | [] | + anubis | [] [] [] [] | + aspell | [] [] [] [] [] | + bash | [] [] [] [] | + bfd | [] [] | + binutils | [] [] [] | + bison | [] | + bison-runtime | [] [] [] [] [] [] [] [] | + buzztrax | | + ccd2cue | [] | + ccide | [] [] | + cflow | [] [] [] | + clisp | | + coreutils | [] [] | + cpio | [] [] [] [] [] [] | + cppi | [] [] [] [] [] | + cpplib | [] [] | + cryptsetup | [] | + datamash | | + denemo | [] | + dfarc | [] [] [] | + dialog | [] [] [] [] [] [] [] [] [] [] | + dico | | + diffutils | [] [] [] [] | + dink | [] | + direvent | [] | + doodle | [] [] | + dos2unix | [] [] | + dos2unix-man | | + e2fsprogs | [] [] | + enscript | [] [] [] | + exif | [] [] [] [] [] [] | + fetchmail | [] [] [] | + findutils | [] [] [] [] [] [] [] | + flex | [] | + freedink | [] [] [] [] | + fusionforge | | + gas | [] | + gawk | [] () [] | + gcal | | + gcc | | + gdbm | | + gettext-examples | [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] [] | + gettext-tools | [] [] [] | + gjay | [] | + glunarclock | [] [] [] [] [] [] | + gnubiff | [] [] () | + gnubik | [] [] [] | + gnucash | () () () () () | + gnuchess | | + gnulib | [] [] [] [] [] | + gnunet | | + gnunet-gtk | | + gold | [] [] | + gphoto2 | [] [] [] [] | + gprof | [] [] [] [] | + gramadoir | [] [] [] | + grep | [] [] [] [] [] [] [] | + grub | [] [] [] | + gsasl | [] [] [] [] [] | + gss | [] [] [] [] [] | + gst-plugins-bad | [] [] [] | + gst-plugins-base | [] [] [] [] | + gst-plugins-good | [] [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] | + gtick | [] [] [] [] [] | + gtkam | [] [] [] [] [] | + gtkspell | [] [] [] [] [] [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] [] [] | + hello | [] [] [] [] [] | + help2man | [] [] [] | + help2man-texi | | + hylafax | [] | + idutils | [] [] | + iso_15924 | [] [] [] [] [] [] | + iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] | + iso_3166_2 | [] [] | + iso_4217 | [] [] [] [] [] [] | + iso_639 | [] [] [] [] [] [] [] [] [] | + iso_639_3 | [] [] | + iso_639_5 | | + jwhois | [] [] [] [] | + kbd | [] [] [] | + klavaro | [] [] [] [] [] | + ld | [] [] [] [] | + leafpad | [] [] [] [] [] [] [] () | + libc | [] [] [] [] [] | + libexif | [] | + libextractor | | + libgnutls | [] | + libgphoto2 | [] [] | + libgphoto2_port | [] [] | + libgsasl | [] [] [] [] | + libiconv | [] [] [] [] [] [] [] | + libidn | [] [] [] [] | + liferea | [] [] [] [] [] | + lilypond | [] | + lordsawar | | + lprng | [] | + lynx | [] [] [] [] | + m4 | [] [] [] [] [] | + mailfromd | | + mailutils | | + make | [] [] [] [] | + man-db | [] [] | + man-db-manpages | [] [] | + midi-instruments | [] [] [] [] [] [] [] [] [] | + minicom | [] [] [] | + mkisofs | [] [] | + myserver | [] | + nano | [] [] [] [] [] [] | + opcodes | [] [] [] | + parted | [] [] [] [] [] | + pies | | + pnmixer | [] [] | + popt | [] [] [] [] [] [] [] [] [] [] | + procps-ng | | + procps-ng-man | | + psmisc | [] [] [] [] | + pspp | [] [] | + pushover | [] | + pwdutils | [] | + pyspread | | + radius | [] | + recode | [] [] [] [] [] [] [] | + recutils | | + rpm | [] | + rush | [] | + sarg | | + sed | [] [] [] [] [] [] [] | + sharutils | | + shishi | | + skribilo | [] | + solfege | [] [] | + solfege-manual | | + spotmachine | | + sudo | [] [] [] [] | + sudoers | [] [] [] | + sysstat | [] [] [] [] | + tar | [] [] [] [] [] [] | + texinfo | [] [] [] | + texinfo_document | [] [] [] | + tigervnc | | + tin | | + tin-man | | + tracgoogleappsa... | [] [] [] [] | + trader | [] [] | + util-linux | [] | + ve | [] | + vice | () () | + vmm | | + vorbis-tools | [] [] | + wastesedge | [] | + wcd | | + wcd-man | | + wdiff | [] [] [] | + wget | [] [] [] [] | + wyslij-po | [] [] [] | + xboard | | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] [] [] | + +-------------------------------------------------+ + ga gd gl gu he hi hr hu hy ia id is it ja ka kk + 35 2 47 4 8 2 60 71 2 6 81 11 87 57 0 3 + + kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl + +--------------------------------------------------+ + a2ps | [] [] | + aegis | [] | + anubis | [] [] [] | + aspell | [] [] | + bash | [] [] | + bfd | | + binutils | | + bison | [] | + bison-runtime | [] [] [] [] [] [] | + buzztrax | | + ccd2cue | | + ccide | [] [] | + cflow | [] | + clisp | [] | + coreutils | [] [] | + cpio | [] | + cppi | | + cpplib | [] | + cryptsetup | [] | + datamash | [] [] | + denemo | | + dfarc | [] [] | + dialog | [] [] [] [] [] [] | + dico | | + diffutils | [] [] [] | + dink | [] | + direvent | [] | + doodle | [] | + dos2unix | [] [] | + dos2unix-man | [] | + e2fsprogs | [] | + enscript | [] | + exif | [] [] [] | + fetchmail | [] | + findutils | [] [] | + flex | [] | + freedink | [] [] | + fusionforge | | + gas | | + gawk | [] | + gcal | | + gcc | | + gdbm | | + gettext-examples | [] [] [] [] [] [] | + gettext-runtime | [] [] [] | + gettext-tools | [] | + gjay | | + glunarclock | [] [] | + gnubiff | [] | + gnubik | [] [] | + gnucash | () () () () () () () [] | + gnuchess | [] [] | + gnulib | [] | + gnunet | | + gnunet-gtk | | + gold | | + gphoto2 | [] | + gprof | [] [] | + gramadoir | [] | + grep | [] [] | + grub | [] [] [] | + gsasl | [] | + gss | | + gst-plugins-bad | [] [] [] | + gst-plugins-base | [] [] [] | + gst-plugins-good | [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] | + gstreamer | [] [] [] | + gtick | [] | + gtkam | [] [] | + gtkspell | [] [] [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] | + hello | [] [] [] | + help2man | [] | + help2man-texi | | + hylafax | [] | + idutils | [] | + iso_15924 | () [] [] | + iso_3166 | [] [] [] () [] [] [] [] [] [] | + iso_3166_2 | () [] | + iso_4217 | () [] [] [] | + iso_639 | [] [] () [] [] [] [] | + iso_639_3 | [] () [] | + iso_639_5 | () | + jwhois | [] [] | + kbd | [] | + klavaro | [] [] | + ld | | + leafpad | [] [] [] [] [] | + libc | [] [] | + libexif | [] | + libextractor | [] | + libgnutls | [] [] | + libgphoto2 | [] | + libgphoto2_port | [] | + libgsasl | [] | + libiconv | [] [] | + libidn | [] | + liferea | [] [] [] | + lilypond | [] | + lordsawar | | + lprng | | + lynx | [] | + m4 | [] | + mailfromd | | + mailutils | | + make | [] [] | + man-db | [] | + man-db-manpages | [] | + midi-instruments | [] [] [] [] [] [] [] | + minicom | [] | + mkisofs | [] | + myserver | | + nano | [] [] [] | + opcodes | [] | + parted | [] [] | + pies | | + pnmixer | [] | + popt | [] [] [] [] [] | + procps-ng | | + procps-ng-man | | + psmisc | [] | + pspp | [] [] | + pushover | | + pwdutils | [] | + pyspread | | + radius | [] | + recode | [] [] | + recutils | [] | + rpm | [] | + rush | [] | + sarg | | + sed | [] [] | + sharutils | [] | + shishi | | + skribilo | | + solfege | [] [] | + solfege-manual | [] | + spotmachine | [] | + sudo | [] [] [] | + sudoers | [] [] [] | + sysstat | [] [] | + tar | [] [] [] | + texinfo | [] | + texinfo_document | [] | + tigervnc | [] | + tin | | + tin-man | | + tracgoogleappsa... | [] [] [] | + trader | [] | + util-linux | [] | + ve | [] | + vice | [] | + vmm | [] | + vorbis-tools | [] | + wastesedge | [] | + wcd | [] | + wcd-man | [] | + wdiff | [] | + wget | [] [] | + wyslij-po | [] | + xboard | [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] | + +--------------------------------------------------+ + kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl + 5 15 4 6 0 13 23 3 3 3 4 11 2 42 1 125 + + nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr + +------------------------------------------------+ + a2ps | [] [] [] [] [] [] [] | + aegis | [] [] | + anubis | [] [] [] | + aspell | [] [] [] [] [] [] [] | + bash | [] [] [] [] [] [] | + bfd | [] [] | + binutils | [] [] | + bison | [] [] [] | + bison-runtime | [] [] [] [] [] [] [] [] | + buzztrax | [] | + ccd2cue | [] [] | + ccide | [] [] [] | + cflow | [] [] [] | + clisp | [] | + coreutils | [] [] [] [] | + cpio | [] [] [] | + cppi | [] [] [] | + cpplib | [] [] [] | + cryptsetup | [] [] [] | + datamash | [] [] | + denemo | | + dfarc | [] [] [] | + dialog | [] [] [] [] [] [] [] | + dico | [] | + diffutils | [] [] [] | + dink | | + direvent | [] [] [] | + doodle | [] [] | + dos2unix | [] [] [] [] | + dos2unix-man | [] [] | + e2fsprogs | [] | + enscript | [] [] [] [] [] [] | + exif | [] [] [] [] [] [] | + fetchmail | [] [] [] | + findutils | [] [] [] [] [] [] | + flex | [] [] [] [] [] | + freedink | [] [] [] [] [] | + fusionforge | | + gas | | + gawk | [] | + gcal | | + gcc | | + gdbm | [] [] [] | + gettext-examples | [] [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] [] [] [] | + gettext-tools | [] [] [] [] [] [] [] | + gjay | [] | + glunarclock | [] [] [] [] [] [] | + gnubiff | [] | + gnubik | [] [] [] [] | + gnucash | () () () () () [] | + gnuchess | [] [] | + gnulib | [] [] [] [] [] | + gnunet | | + gnunet-gtk | | + gold | | + gphoto2 | [] [] [] [] [] | + gprof | [] [] [] [] | + gramadoir | [] [] | + grep | [] [] [] [] [] [] | + grub | [] [] [] [] [] | + gsasl | [] [] [] | + gss | [] [] [] [] | + gst-plugins-bad | [] [] [] [] [] | + gst-plugins-base | [] [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] [] [] | + gtick | [] [] [] [] [] | + gtkam | [] [] [] [] [] [] | + gtkspell | [] [] [] [] [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] [] | + hello | [] [] [] [] [] [] | + help2man | [] [] [] [] | + help2man-texi | [] | + hylafax | | + idutils | [] [] [] | + iso_15924 | [] () [] [] [] [] | + iso_3166 | [] [] [] [] () [] [] [] [] [] [] [] [] | + iso_3166_2 | [] () [] | + iso_4217 | [] [] () [] [] [] [] [] | + iso_639 | [] [] [] () [] [] [] [] [] [] | + iso_639_3 | [] () | + iso_639_5 | () [] | + jwhois | [] [] [] [] | + kbd | [] [] | + klavaro | [] [] [] [] [] | + ld | | + leafpad | [] [] [] [] [] [] [] [] | + libc | [] [] [] | + libexif | [] () [] | + libextractor | [] | + libgnutls | [] | + libgphoto2 | [] | + libgphoto2_port | [] [] [] [] [] | + libgsasl | [] [] [] [] | + libiconv | [] [] [] [] [] | + libidn | [] [] [] | + liferea | [] [] [] [] () [] [] | + lilypond | | + lordsawar | | + lprng | [] | + lynx | [] [] | + m4 | [] [] [] [] [] | + mailfromd | [] | + mailutils | [] | + make | [] [] [] | + man-db | [] [] [] | + man-db-manpages | [] [] [] | + midi-instruments | [] [] [] [] [] [] [] [] | + minicom | [] [] [] [] | + mkisofs | [] [] [] | + myserver | [] [] | + nano | [] [] [] [] [] [] | + opcodes | | + parted | [] [] [] [] [] [] | + pies | [] | + pnmixer | [] | + popt | [] [] [] [] [] [] | + procps-ng | [] | + procps-ng-man | [] | + psmisc | [] [] [] [] | + pspp | [] [] | + pushover | | + pwdutils | [] | + pyspread | [] [] | + radius | [] [] | + recode | [] [] [] [] [] [] [] [] | + recutils | [] [] | + rpm | [] | + rush | [] [] [] | + sarg | [] [] | + sed | [] [] [] [] [] [] [] [] | + sharutils | [] [] [] | + shishi | [] [] | + skribilo | [] | + solfege | [] [] [] | + solfege-manual | [] [] | + spotmachine | [] [] | + sudo | [] [] [] [] [] [] | + sudoers | [] [] [] [] | + sysstat | [] [] [] [] [] | + tar | [] [] [] [] [] | + texinfo | [] [] [] | + texinfo_document | [] [] | + tigervnc | [] [] [] | + tin | [] | + tin-man | | + tracgoogleappsa... | [] [] [] [] | + trader | [] [] | + util-linux | [] [] | + ve | [] [] [] | + vice | | + vmm | | + vorbis-tools | [] [] [] | + wastesedge | | + wcd | | + wcd-man | | + wdiff | [] [] [] [] [] | + wget | [] [] [] [] [] | + wyslij-po | [] [] [] [] | + xboard | [] [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] | + +------------------------------------------------+ + nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr + 7 3 6 114 1 12 88 32 82 3 40 45 7 101 + + sv sw ta te tg th tr uk ur vi wa wo zh_CN + +----------------------------------------------+ + a2ps | [] [] [] [] [] | + aegis | [] | + anubis | [] [] [] [] | + aspell | [] [] [] [] [] | + bash | [] [] [] [] | + bfd | [] [] [] | + binutils | [] [] [] | + bison | [] [] [] [] | + bison-runtime | [] [] [] [] [] [] | + buzztrax | [] [] [] | + ccd2cue | [] [] [] | + ccide | [] [] [] [] | + cflow | [] [] [] [] | + clisp | | + coreutils | [] [] [] | + cpio | [] [] [] [] [] | + cppi | [] [] [] [] | + cpplib | [] [] [] [] [] | + cryptsetup | [] [] [] | + datamash | [] [] [] | + denemo | [] | + dfarc | [] [] | + dialog | [] [] [] [] [] [] | + dico | [] | + diffutils | [] [] [] [] [] | + dink | [] | + direvent | [] [] | + doodle | [] [] | + dos2unix | [] [] [] [] | + dos2unix-man | [] [] [] | + e2fsprogs | [] [] [] [] | + enscript | [] [] [] [] | + exif | [] [] [] [] [] | + fetchmail | [] [] [] [] | + findutils | [] [] [] [] [] | + flex | [] [] [] [] | + freedink | [] [] [] | + fusionforge | | + gas | [] | + gawk | [] [] [] | + gcal | [] [] [] | + gcc | [] | + gdbm | [] [] | + gettext-examples | [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] | + gettext-tools | [] [] [] [] [] | + gjay | [] [] [] | + glunarclock | [] [] [] [] | + gnubiff | [] [] | + gnubik | [] [] [] [] | + gnucash | () () () () [] | + gnuchess | [] [] [] | + gnulib | [] [] [] [] | + gnunet | | + gnunet-gtk | | + gold | [] [] | + gphoto2 | [] [] [] [] | + gprof | [] [] [] [] | + gramadoir | [] [] [] | + grep | [] [] [] [] [] | + grub | [] [] [] [] | + gsasl | [] [] [] [] | + gss | [] [] [] | + gst-plugins-bad | [] [] [] [] [] | + gst-plugins-base | [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] | + gstreamer | [] [] [] [] [] | + gtick | [] [] [] | + gtkam | [] [] [] [] | + gtkspell | [] [] [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] [] [] [] | + hello | [] [] [] [] [] [] | + help2man | [] [] [] | + help2man-texi | [] | + hylafax | [] | + idutils | [] [] [] | + iso_15924 | [] () [] [] () [] | + iso_3166 | [] [] () [] [] () [] [] | + iso_3166_2 | () [] [] () [] | + iso_4217 | [] () [] [] () [] | + iso_639 | [] [] [] () [] [] () [] [] | + iso_639_3 | [] () [] [] () | + iso_639_5 | () [] () | + jwhois | [] [] [] [] | + kbd | [] [] [] [] | + klavaro | [] [] [] [] [] [] | + ld | [] [] [] [] [] | + leafpad | [] [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] [] () | + libextractor | [] [] | + libgnutls | [] [] [] [] | + libgphoto2 | [] [] [] | + libgphoto2_port | [] [] [] [] | + libgsasl | [] [] [] [] | + libiconv | [] [] [] [] [] | + libidn | () [] [] [] | + liferea | [] [] [] [] [] | + lilypond | [] | + lordsawar | | + lprng | [] | + lynx | [] [] [] [] | + m4 | [] [] [] | + mailfromd | [] [] | + mailutils | [] | + make | [] [] [] [] | + man-db | [] [] [] | + man-db-manpages | [] [] | + midi-instruments | [] [] [] [] [] [] | + minicom | [] [] | + mkisofs | [] [] [] | + myserver | [] | + nano | [] [] [] [] | + opcodes | [] [] [] | + parted | [] [] [] [] [] | + pies | [] [] | + pnmixer | [] [] [] | + popt | [] [] [] [] [] [] [] | + procps-ng | [] [] | + procps-ng-man | [] | + psmisc | [] [] [] [] | + pspp | [] [] [] | + pushover | [] | + pwdutils | [] [] | + pyspread | [] | + radius | [] [] | + recode | [] [] [] [] | + recutils | [] [] [] | + rpm | [] [] [] [] | + rush | [] [] | + sarg | | + sed | [] [] [] [] [] | + sharutils | [] [] [] [] | + shishi | [] [] | + skribilo | [] [] | + solfege | [] [] [] [] | + solfege-manual | [] | + spotmachine | [] [] [] | + sudo | [] [] [] [] [] | + sudoers | [] [] [] [] | + sysstat | [] [] [] [] [] | + tar | [] [] [] [] [] | + texinfo | [] [] [] | + texinfo_document | [] | + tigervnc | [] [] [] | + tin | [] | + tin-man | | + tracgoogleappsa... | [] [] [] [] [] | + trader | [] | + util-linux | [] [] [] [] | + ve | [] [] [] [] | + vice | () () | + vmm | | + vorbis-tools | [] [] | + wastesedge | | + wcd | [] [] [] | + wcd-man | [] | + wdiff | [] [] [] [] | + wget | [] [] [] | + wyslij-po | [] [] | + xboard | [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] | + +----------------------------------------------+ + sv sw ta te tg th tr uk ur vi wa wo zh_CN + 106 1 4 3 0 13 51 115 1 125 7 1 100 + + zh_HK zh_TW + +-------------+ + a2ps | | 30 + aegis | | 9 + anubis | | 19 + aspell | | 29 + bash | [] | 23 + bfd | | 11 + binutils | | 12 + bison | [] | 18 + bison-runtime | [] | 38 + buzztrax | | 9 + ccd2cue | | 10 + ccide | | 17 + cflow | | 16 + clisp | | 10 + coreutils | | 18 + cpio | | 20 + cppi | | 17 + cpplib | [] | 19 + cryptsetup | | 14 + datamash | | 11 + denemo | | 5 + dfarc | | 17 + dialog | [] | 42 + dico | | 6 + diffutils | | 22 + dink | | 10 + direvent | | 11 + doodle | | 12 + dos2unix | [] | 18 + dos2unix-man | | 9 + e2fsprogs | | 15 + enscript | | 21 + exif | | 27 + fetchmail | | 19 + findutils | | 29 + flex | [] | 19 + freedink | | 24 + fusionforge | | 3 + gas | | 5 + gawk | | 13 + gcal | | 8 + gcc | | 2 + gdbm | | 10 + gettext-examples | [] [] | 40 + gettext-runtime | [] [] | 35 + gettext-tools | [] | 24 + gjay | | 9 + glunarclock | [] | 27 + gnubiff | | 9 + gnubik | | 19 + gnucash | () | 6 + gnuchess | | 11 + gnulib | | 23 + gnunet | | 1 + gnunet-gtk | | 1 + gold | | 7 + gphoto2 | [] | 19 + gprof | | 21 + gramadoir | | 14 + grep | [] | 31 + grub | | 21 + gsasl | [] | 19 + gss | | 17 + gst-plugins-bad | | 21 + gst-plugins-base | | 27 + gst-plugins-good | | 32 + gst-plugins-ugly | | 34 + gstreamer | [] | 32 + gtick | | 19 + gtkam | | 24 + gtkspell | [] [] | 48 + guix | | 2 + guix-packages | | 0 + gutenprint | | 15 + hello | [] | 30 + help2man | | 18 + help2man-texi | | 5 + hylafax | | 5 + idutils | | 14 + iso_15924 | [] | 23 + iso_3166 | [] [] | 58 + iso_3166_2 | | 9 + iso_4217 | [] [] | 28 + iso_639 | [] [] | 46 + iso_639_3 | | 10 + iso_639_5 | | 2 + jwhois | [] | 20 + kbd | | 17 + klavaro | | 30 + ld | [] | 15 + leafpad | [] | 39 + libc | [] | 24 + libexif | | 10 + libextractor | | 5 + libgnutls | | 13 + libgphoto2 | | 10 + libgphoto2_port | [] | 19 + libgsasl | | 18 + libiconv | [] | 29 + libidn | | 17 + liferea | | 29 + lilypond | | 11 + lordsawar | | 3 + lprng | | 3 + lynx | | 19 + m4 | [] | 22 + mailfromd | | 4 + mailutils | | 6 + make | | 19 + man-db | | 15 + man-db-manpages | | 10 + midi-instruments | [] | 43 + minicom | [] | 17 + mkisofs | | 13 + myserver | | 9 + nano | [] | 30 + opcodes | | 12 + parted | [] | 23 + pies | | 4 + pnmixer | | 9 + popt | [] | 36 + procps-ng | | 5 + procps-ng-man | | 4 + psmisc | [] | 22 + pspp | | 13 + pushover | | 6 + pwdutils | | 8 + pyspread | | 6 + radius | | 9 + recode | | 31 + recutils | | 10 + rpm | [] | 13 + rush | | 10 + sarg | | 4 + sed | [] | 35 + sharutils | | 13 + shishi | | 7 + skribilo | | 7 + solfege | | 21 + solfege-manual | | 9 + spotmachine | | 11 + sudo | | 26 + sudoers | | 22 + sysstat | | 23 + tar | [] | 30 + texinfo | | 17 + texinfo_document | | 13 + tigervnc | | 14 + tin | [] | 7 + tin-man | | 1 + tracgoogleappsa... | [] | 22 + trader | | 12 + util-linux | | 13 + ve | | 14 + vice | | 1 + vmm | | 3 + vorbis-tools | | 13 + wastesedge | | 3 + wcd | | 8 + wcd-man | | 3 + wdiff | [] | 23 + wget | | 21 + wyslij-po | | 14 + xboard | | 10 + xdg-user-dirs | [] [] | 68 + xkeyboard-config | [] | 28 + +-------------+ + 89 teams zh_HK zh_TW + 166 domains 7 42 2809 + + Some counters in the preceding matrix are higher than the number of +visible blocks let us expect. This is because a few extra PO files are +used for implementing regional variants of languages, or language +dialects. + + For a PO file in the matrix above to be effective, the package to +which it applies should also have been internationalized and distributed +as such by its maintainer. There might be an observable lag between the +mere existence a PO file and its wide availability in a distribution. + + If Jun 2014 seems to be old, you may fetch a more recent copy of this +'ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix +with full percentage details can be found at +'http://translationproject.org/extra/matrix.html'. + +1.5 Using 'gettext' in new packages +=================================== + +If you are writing a freely available program and want to +internationalize it you are welcome to use GNU 'gettext' in your +package. Of course you have to respect the GNU Lesser General Public +License which covers the use of the GNU 'gettext' library. This means +in particular that even non-free programs can use 'libintl' as a shared +library, whereas only free software can use 'libintl' as a static +library or use modified versions of 'libintl'. + + Once the sources are changed appropriately and the setup can handle +the use of 'gettext' the only thing missing are the translations. The +Free Translation Project is also available for packages which are not +developed inside the GNU project. Therefore the information given above +applies also for every other Free Software Project. Contact +'coordinator@translationproject.org' to make the '.pot' files available +to the translation teams. diff --git a/devspec.en_US/project/recutils/AUTHORS b/devspec.en_US/project/recutils/AUTHORS new file mode 100755 index 0000000..d0f0715 --- /dev/null +++ b/devspec.en_US/project/recutils/AUTHORS @@ -0,0 +1,21 @@ +# -*- mode: rec -*- + +# This file contains the names of the people that contributed with +# code and/or documentation to GNU recutils. + +Name: Jose E. Marchesi +Email: jemarch@gnu.org + +Name: Ralf Wildenhues +Email: Ralf.Wildenhues@gmx.de + +Name: Daiki Ueno +Email: ueno@unixuser.org + +Name: John Darrington +Email: john@darrington.wattle.id.au + +Name: Michał Masłowski +Email: mtjm@mtjm.eu + +# End of AUTHORS diff --git a/devspec.en_US/project/recutils/COPYING b/devspec.en_US/project/recutils/COPYING new file mode 100755 index 0000000..94a9ed0 --- /dev/null +++ b/devspec.en_US/project/recutils/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/devspec.en_US/project/recutils/ChangeLog b/devspec.en_US/project/recutils/ChangeLog new file mode 100755 index 0000000..d234bae --- /dev/null +++ b/devspec.en_US/project/recutils/ChangeLog @@ -0,0 +1,8427 @@ +2019-01-03 Jose E. Marchesi <jose.marchesi@oracle.com> + + * configure.ac: Bump version to 1.8. + * NEWS: Likewise. + +2018-05-31 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi (Bash Builtins): Note that some systems + require the full path to the bash builtin shared object. + +2018-03-19 Jose E. Marchesi <jemarch@gnu.org> + + * configure.ac: Bump version to 1.7.91. + * NEWS: Likewise. + +2018-03-19 Jose E. Marchesi <jemarch@gnu.org> + + * bootstrap.conf (gnulib_modules): Use the signal-h module to + guarantee a GNU-like signal.h. + +2018-03-18 Jose E. Marchesi <jose.marchesi@oracle.com> + + * utils/recutl.c (PATH_MAX): handle systems where it is not + defined such as GNU/Hurd. + +2018-03-18 Jose E. Marchesi <jose.marchesi@oracle.com> + + * src/rec-aggregate.c (REC_AGGREGATE_ACCUM_FUNC): Use %g instead + of %zd to print the result of aggregate functions. + * torture/utils/recsel.sh: Adjust expected result. + +2018-03-17 Jose E. Marchesi <jemarch@gnu.org> + + * bash/readrec.c (readrec_builtin): Immediately return EX_USAGE if + no_options returns != 0. Fixes readrec --help. + +2018-03-17 Jose E. Marchesi <jemarch@gnu.org> + + * utils/recutl.c (recutl_print_version): Update copyright years. + * bash/readrec.c: Include config.h. + * bash/Makefile.am (COMMON_CPPFLAGS): Include the builddir lib. + * src/rec-sex-tab.y: Use new form of %name-prefix. + +2018-03-17 gettextize <bug-gnu-gettext@gnu.org> + + * m4/iconv.m4: Upgrade to gettext-0.19.8.1. + * m4/lib-ld.m4: Upgrade to gettext-0.19.8.1. + * m4/lib-link.m4: Upgrade to gettext-0.19.8.1. + * m4/lib-prefix.m4: Upgrade to gettext-0.19.8.1. + * m4/progtest.m4: Upgrade to gettext-0.19.8.1. + * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.19.8. + +2018-03-17 Jose E. Marchesi <jemarch@gnu.org> + + * src/Makefile.am (AM_CPPFLAGS): Include the builddir lib. + * configure.ac: Update version to 1.8. + * doc/recutils.texi (Bash Builtins): Add missing -f in enable + example. + * bash/Makefile.am (COMMON_CPPFLAGS): Add BASH_HEADERS/include to + the headers search path. + +2018-02-24 Jose E. Marchesi <jemarch@gnu.org> + + * configure.ac: Use the subdir-object automake option in + AM_INIT_AUTOMAKE. + +2018-02-15 Jose E. Marchesi <jose.marchesi@oracle.com> + + * utils/recutl.c (recutl_write_db_to_file): Do not use the current + directory to hold temporary files. + +2017-01-31 Jose E. Marchesi <jose.marchesi@oracle.com> + + * README-dev: Correct typo. + +2017-01-26 Jose E. Marchesi <jose.marchesi@oracle.com> + + * etc/rec-mode.el: Require tabulated-list. + +2016-12-19 Jose E. Marchesi <jemarch@gnu.org> + + * NEWS: Prepare release 1.8. + +2016-10-18 Jose E. Marchesi <jose.marchesi@oracle.com> + + * etc/rec-mode.el (rec-mode): Fix typo and run the actual + rec-mode-hook. + +2016-10-05 Jose E. Marchesi <jemarch@gnu.org> + + * etc/rec-mode.el (rec-remove-continuation-line-marker-overlays): + Fix setq typo. + +2016-09-13 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi: "Latinajo" fixed. Reported by Giovanni + Ridolfi. + +2016-06-21 Jose E. Marchesi <jemarch@gnu.org> + + * etc/ob-rec.el (org-babel-execute:rec): orb-babel switched to + lexical-binding. Define a result-params locally. + +2015-11-02 Jose E. Marchesi <jemarch@gnu.org> + + * etc/rec-mode.el (rec-field-name-face): New face. + (rec-keyword-face): Likewise. + (rec-continuation-line-face): Likewise. + (rec-font-lock-keywords): Use the rec-* faces. + +2015-05-05 Jose E. Marchesi <jemarch@gnu.org> + + src,torture: numeric results from aggregated functions are signed. + * src/rec-aggregate.c (REC_AGGREGATE_ACCUM_FUNC): Numeric results + from aggregated functions are signed. + * torture/utils/recsel.sh (negative_fields): New test input file. + (recsel-aggregate-sum-negative): New test. + +2015-04-28 Jose E. Marchesi <jemarch@gnu.org> + + * etc/rec-mode.el (rec-cmd-compile): Quote the file name argument + before to pass it to recfix in a shell. + +2015-04-27 Jose E. Marchesi <jemarch@gnu.org> + + * README: Copyright years updated. + * utils/recutl.h: Likewise. + * utils/recutl.c: Likewise. + * utils/recset.c: Likewise. + * utils/recsel.c: Likewise. + * utils/recins.c: Likewise. + * utils/recinf.c: Likewise. + * utils/recfmt.c: Likewise. + * utils/recfix.c: Likewise. + * utils/recdel.c: Likewise. + * utils/rec2csv.c: Likewise. + * utils/mdb2rec.c: Likewise. + * utils/Makefile.am: Likewise. + * utils/csv2rec.c: Likewise. + * torture/utils/testutils.sh: Likewise. + * torture/utils/recset.sh: Likewise. + * torture/utils/recsel.sh: Likewise. + * torture/utils/recins.sh: Likewise. + * torture/utils/recinf.sh: Likewise. + * torture/utils/recfmt.sh: Likewise. + * torture/utils/recfix.sh: Likewise. + * torture/utils/recdel.sh: Likewise. + * torture/utils/rec2csv.sh: Likewise. + * torture/utils/p-recsel.sh: Likewise. + * torture/utils/Makefile.am: Likewise. + * torture/utils/csv2rec.sh: Likewise. + * torture/utils/config.sh.in: Likewise. + * torture/runtests.c: Likewise. + * torture/rec-writer/tsuite-rec-writer.c: Likewise. + * torture/rec-writer/rec-write-rset.c: Likewise. + * torture/rec-writer/rec-writer-new.c: Likewise. + * torture/rec-writer/rec-write-record.c: Likewise. + * torture/rec-writer/rec-writer-destroy.c: Likewise. + * torture/rec-writer/rec-write-field-str.c: Likewise. + * torture/rec-writer/rec-write-field-name-str.c: Likewise. + * torture/rec-writer/rec-write-field-name.c: Likewise. + * torture/rec-writer/rec-write-field.c: Likewise. + * torture/rec-writer/rec-write-db.c: Likewise. + * torture/rec-writer/rec-write-comment-str.c: Likewise. + * torture/rec-writer/rec-write-comment.c: Likewise. + * torture/rec-type-reg/tsuite-rec-type-reg.c: Likewise. + * torture/rec-type-reg/rec-type-reg-new.c: Likewise. + * torture/rec-type-reg/rec-type-reg-get.c: Likewise. + * torture/rec-type-reg/rec-type-reg-destroy.c: Likewise. + * torture/rec-type/tsuite-rec-type.c: Likewise. + * torture/rec-type/rec-type-set-name.c: Likewise. + * torture/rec-type/rec-type-new.c: Likewise. + * torture/rec-type/rec-type-name.c: Likewise. + * torture/rec-type/rec-type-kind-str.c: Likewise. + * torture/rec-type/rec-type-kind.c: Likewise. + * torture/rec-type/rec-type-equal-p.c: Likewise. + * torture/rec-type/rec-type-destroy.c: Likewise. + * torture/rec-type/rec-type-descr-p.c: Likewise. + * torture/rec-type/rec-type-check.c: Likewise. + * torture/rec-sex/tsuite-rec-sex.c: Likewise. + * torture/rec-sex/rec-sex-new.c: Likewise. + * torture/rec-sex/rec-sex-eval.c: Likewise. + * torture/rec-sex/rec-sex-destroy.c: Likewise. + * torture/rec-sex/rec-sex-compile.c: Likewise. + * torture/rec-record/tsuite-rec-record.c: Likewise. + * torture/rec-record/rec-record-size.c: Likewise. + * torture/rec-record/rec-record-remove-field.c: Likewise. + * torture/rec-record/rec-record-new.c: Likewise. + * torture/rec-record/rec-record-insert-field.c: Likewise. + * torture/rec-record/rec-record-field-p.c: Likewise. + * torture/rec-parser/tsuite-rec-parser.c: Likewise. + * torture/rec-parser/rec-parse-rset.c: Likewise. + * torture/rec-parser/rec-parser-seek-mem.c: Likewise. + * torture/rec-parser/rec-parser-reset.c: Likewise. + * torture/rec-parser/rec-parser-perror.c: Likewise. + * torture/rec-parser/rec-parser-new-str.c: Likewise. + * torture/rec-parser/rec-parser-new-mem.c: Likewise. + * torture/rec-parser/rec-parser-new.c: Likewise. + * torture/rec-parser/rec-parser-error.c: Likewise. + * torture/rec-parser/rec-parser-eof.c: Likewise. + * torture/rec-parser/rec-parse-record-str.c: Likewise. + * torture/rec-parser/rec-parse-record.c: Likewise. + * torture/rec-parser/rec-parser-destroy.c: Likewise. + * torture/rec-parser/rec-parse-field-name-str.c: Likewise. + * torture/rec-parser/rec-parse-field-name.c: Likewise. + * torture/rec-parser/rec-parse-field.c: Likewise. + * torture/rec-parser/rec-parse-db.c: Likewise. + * torture/rec-mset/tsuite-rec-mset.c: Likewise. + * torture/rec-mset/rec-mset-type-p.c: Likewise. + * torture/rec-mset/rec-mset-register-type.c: Likewise. + * torture/rec-mset/rec-mset-new.c: Likewise. + * torture/rec-mset/rec-mset-get-at.c: Likewise. + * torture/rec-mset/rec-mset-dup.c: Likewise. + * torture/rec-mset/rec-mset-count.c: Likewise. + * torture/rec-mset/elem-types.h: Likewise. + * torture/rec-field-name/tsuite-rec-field-name.c: Likewise. + * torture/rec-field-name/rec-field-name-p.c: Likewise. + * torture/rec-field-name/rec-field-name-normalise.c: Likewise. + * torture/rec-field-name/rec-field-name-equal-p.c: Likewise. + * torture/rec-field/tsuite-rec-field.c: Likewise. + * torture/rec-field/rec-field-value.c: Likewise. + * torture/rec-field/rec-field-to-comment.c: Likewise. + * torture/rec-field/rec-field-source.c: Likewise. + * torture/rec-field/rec-field-set-value.c: Likewise. + * torture/rec-field/rec-field-set-source.c: Likewise. + * torture/rec-field/rec-field-set-name.c: Likewise. + * torture/rec-field/rec-field-set-location.c: Likewise. + * torture/rec-field/rec-field-set-char-location.c: Likewise. + * torture/rec-field/rec-field-new.c: Likewise. + * torture/rec-field/rec-field-name.c: Likewise. + * torture/rec-field/rec-field-location-str.c: Likewise. + * torture/rec-field/rec-field-location.c: Likewise. + * torture/rec-field/rec-field-equal-p.c: Likewise. + * torture/rec-field/rec-field-dup.c: Likewise. + * torture/rec-field/rec-field-destroy.c: Likewise. + * torture/rec-field/rec-field-char-location-str.c: Likewise. + * torture/rec-field/rec-field-char-location.c: Likewise. + * torture/rec-fex/tsuite-rec-fex.c: Likewise. + * torture/rec-fex/rec-fex-str.c: Likewise. + * torture/rec-fex/rec-fex-sort.c: Likewise. + * torture/rec-fex/rec-fex-size.c: Likewise. + * torture/rec-fex/rec-fex-new.c: Likewise. + * torture/rec-fex/rec-fex-get.c: Likewise. + * torture/rec-fex/rec-fex-elem-rewrite-to.c: Likewise. + * torture/rec-fex/rec-fex-elem-min.c: Likewise. + * torture/rec-fex/rec-fex-elem-max.c: Likewise. + * torture/rec-fex/rec-fex-elem-field-name.c: Likewise. + * torture/rec-fex/rec-fex-destroy.c: Likewise. + * torture/rec-fex/rec-fex-check.c: Likewise. + * torture/rec-comment/tsuite-rec-comment.c: Likewise. + * torture/rec-comment/rec-comment-text.c: Likewise. + * torture/rec-comment/rec-comment-set-text.c: Likewise. + * torture/rec-comment/rec-comment-new.c: Likewise. + * torture/rec-comment/rec-comment-equal-p.c: Likewise. + * torture/rec-comment/rec-comment-dup.c: Likewise. + * torture/rec-comment/rec-comment-destroy.c: Likewise. + * torture/Makefile.am: Likewise. + * src/rec-writer.c: Likewise. + * src/rec-utils.h: Likewise. + * src/rec-utils.c: Likewise. + * src/rec-types.c: Likewise. + * src/rec-sex-tab.y: Likewise. + * src/rec-sex-parser.h: Likewise. + * src/rec-sex-parser.c: Likewise. + * src/rec-sex-lex.l: Likewise. + * src/rec-sex.c: Likewise. + * src/rec-sex-ast.h: Likewise. + * src/rec-sex-ast.c: Likewise. + * src/rec-rset.c: Likewise. + * src/rec-record.c: Likewise. + * src/rec-int.c: Likewise. + * src/rec.h: Likewise. + * src/rec-field-name.c: Likewise. + * src/rec-field.c: Likewise. + * src/rec-fex.c: Likewise. + * src/rec-db.c: Likewise. + * src/rec-crypt-dummy.c: Likewise. + * src/rec-crypt.c: Likewise. + * src/rec-comment.c: Likewise. + * src/rec.c: Likewise. + * src/rec-aggregate.c: Likewise. + * src/rec-buf.c: Likewise. + * src/Makefile.am: Likewise. + * libcsv/libcsv.c: Likewise. + * libcsv/Makefile.am: Likewise. + * etc/rec-mode.el: Likewise. + * etc/ob-rec.el: Likewise. + * etc/Makefile.am: Likewise. + * doc/recutils.texi: Likewise. + * doc/rec-mode.texi: Likewise. + * bash/testrec.c: Likewise. + * bash/readrec.c: Likewise. + * bash/Makefile.am: Likewise. + * algol68/rec.a68: Likewise. + * algol68/Makefile.am: Likewise. + * README-dev: Likewise. + * NEWS: Likewise. + * Makefile.am: Likewise. + * configure.ac: Likewise. + * ChangeLog: Likewise. + +2015-04-27 Jose E. Marchesi <jose.marchesi@oracle.com> + + * src/rec-mset.c (rec_mset_dup): Check for the right variable + in order to duplicate names. + +2015-04-27 Jose E. Marchesi <jemarch@gnu.org> + + * src/rec-parser.c: Some minor stylish changes. + +2015-04-09 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: support search-insensitive searches. + * doc/rec-mode.texi (Searches): Document prefix arguments in both + rec-cmd-selext-fast and rec-cmd-select-sex. + + * etc/rec-mode.el (rec-cmd-select-fast): Support case-insensitive + searches. + (rec-cmd-select-sex): Likewise. + +2014-10-10 Michał Masłowski <mtjm@mtjm.eu> + + Fix detection of check on systems where it needs extra CFLAGS or + libraries. + * configure.ac: Use PKG_CHECK_MODULES to detect check. + * torture/Makefile.am (runtests_CFLAGS, runtests_LDADD): Pass + CFLAGS and LIBS that pkg-config specifies for check. + +2014-04-20 Jose E. Marchesi <jemarch@gnu.org> + + src,torture: fix evaluation of sexes containing #NAME expressions. + * torture/utils/recsel.sh (recurrent-fields-2): New input file. + (recsel-sex-sharp-multiple-2): New test. + + * src/rec-sex.c (rec_sex_eval): Do not permute fields appearing as + arguments to the # operator in the selection expression. + + * src/rec-sex-ast.c (rec_sex_ast_hash_name_p_1): New function. + (rec_sex_ast_name_p): Likewise. + +2014-03-27 Jose E. Marchesi <jemarch@gnu.org> + + * utils/csv2rec.c (field_cb): Fix printf template slots to avoid + warnings when compiled with -Wformat. + Patch by Daiki Ueno. + +2014-03-26 Jose E. Marchesi <jemarch@gnu.org> + + * .gitignore: Ignore some more files. + +2014-03-26 Jose E. Marchesi <jemarch@gnu.org> + + torture: fix make -j check. + * torture/utils/recins.sh: Fix names of input files so they + contain a reference to he test suite. + + * torture/utils/testutils.sh (test_declare_input_file): prepend + the test suite name to the input files in order to prevent + collisions with other tests. + (test_tool): Likewise. + +2014-03-24 Jose E. Marchesi <jemarch@gnu.org> + + Preparation for 1.7. + * configure.ac: Version bumped to 1.7. + * FSD (Version): Updated to 1.7. + +2014-03-22 Jose E. Marchesi <jose.marchesi@oracle.com> + + * configure.ac: fix non-portable test construct. + +2014-03-21 Jose E. Marchesi <jose.marchesi@oracle.com> + + rec-mode: fix a call to string-match-p with invalid arguments. + * etc/rec-mode.el (rec-check-type): fix a call to string-match-p. + +2014-03-21 Jose E. Marchesi <jose.marchesi@oracle.com> + + rec-mode: several fixes while removing byte-compilation warnings. + * etc/rec-mode.el (require): Require cl only at compile time. + (rec-record-assoc): Use mapc instead of mapcar. + (rec-field-type): Likewise. + (rec-record-names): Likewise. + (rec-cmd-edit-field): Likewise. + (rec-update-buffer-descriptors): Likewise. + (rec-goto-type): Likewise. + (rec-cmd-statistic): Likewise. + (rec-mode): Defvar all buffer-local variables. + (rec-cmd-edit-field): Likewise. + (rec-cmd-show-info): Make it work when the buffer is not + associated with a file on disk. + (rec-cmd-compile): Use insert-buffer-substring instead of + insert-buffer. + (rec-cmd-show-info): Likewise. + (rec-update-buffer-descriptors-and-check): Use with-current-buffer + instead of save-excursion+set-buffer. + (rec-idle-scheduler-mode): Use called-interactively-p instead of + interactive-p. + (rec-parse-type): Use string-to-number instead of string-to-int. + (rec-check-type): Likewise. + Rec-idle related functions removed. + +2014-03-20 Jose E. Marchesi <jemarch@gnu.org> + + * utils/recutl.c (recutl_print_version): Update copyright year. + +2014-03-19 Jose E. Marchesi <jemarch@gnu.org> + + * NEWS: Added entry for 1.6.90 listing changes since 1.6. + * configure.ac: Version bumped to 1.6.90. + +2014-03-19 Jose E. Marchesi <jemarch@gnu.org> + + manual: clarify how auto fields are generated. + * doc/recutils.texi (Counters): mention 'recins' instead of the + 'conforming application'. + (Auto-Generated Fields): Clarify that auto fields are physically + inserted in the recfile by recins. + +2014-03-19 Jose E. Marchesi <jemarch@gnu.org> + + src: simplify the implementation of mandatory/unique/prohibit + integrity checking. + * src/rec-int.c (rec_int_check_record_mandatory): Rewrote to use + rec_int_collect_field_list. + (rec_int_check_record_unique): Likewise. + (rec_int_check_record_prohibit): Likewise. + +2014-03-18 Jose E. Marchesi <jemarch@gnu.org> + + src,torture,doc: support for the %allowed special field. + * doc/recutils.texi (Record Sets Properties): Link to the new + section Allowed Fields. + (Allowed Fields): New section. + + * torture/utils/recfix.sh (allowed-ok-1): New input file. + (allowed-ok-2): Likewise. + (allowed-ok-3): Likewise. + (allowed-ok-4): Likewise. + (allowed-ok-5): Likewise. + (allowed-xfail-1): Likewise. + (allowed-xfail-2): Likewise. + (allowed-xfail-3): Likewise. + (recfix-allowed-ok-1): New test. + (recfix-allowed-ok-2): Likewise. + (recfix-allowed-ok-3): Likewise. + (recfix-allowed-ok-4): Likewise. + (recfix-allowed-ok-5): Likewise. + (recfix-allowed-xfail-1): Likewise. + (recfix-allowed-xfail-2): Likewise. + (recfix-allowed-xfail-3): Likewise. + + * src/rec-int.c (rec_int_check_record_allowed): New function. + (rec_int_collect_field_list): Likewise. + (rec_int_check_descriptor): Support %allowed. + (rec_int_check_record): Call rec_int_check_record_allowed. + + * src/rec-field-name.c (fnames): added entry for %allowed. + +2014-03-18 Jose E. Marchesi <jemarch@gnu.org> + + src,doc: allow merging anonymous records coming from several files + in a single record set. + * doc/recutils.texi (Simple Selections): Document that anonymous + records from several files will be merged. + + * src/rec.h: Prototype and doc for rec_mset_elem_dup_data. + * src/rec-mset.c (rec_mset_elem_dup_data): New function. + (rec_mset_iterator_next): Update data only if it is not NULL. + + * utils/recutl.c (recutl_parse_db_from_file): do not complain + about duplicated default record sets. + (recutl_parse_db_from_file): append anonymous records to the + anonymous rset of the database if it exists. + +2014-03-17 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi (Simple Selections): Improve the readability + of side-to-side example sections. + +2014-03-06 Jose E. Marchesi <jose.marchesi@oracle.com> + + rec-mode: fix selection commands when there are more than one + record sets on the recfile. + * etc/rec-mode.el (rec-cmd-select-fast): Use the current record + set. + (rec-cmd-select-sex): Likewise. + +2014-03-02 Jose E. Marchesi <jemarch@gnu.org> + + src: do not abort with an error when decrypting partially + encrypted records. + * src/rec-crypt.c (rec_decrypt_record): Stop decrypting fields in + case of an error. + (rec_encrypt_field): Return true in case a field is not encrypted. + +2014-02-25 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi: all @w and @kbd macros used to denote command + line options removed. + +2014-02-24 Jose E. Marchesi <jemarch@gnu.org> + + src: an ignored tab can also separate field names from field + values. + * src/rec-parser.c (rec_parse_field_name): tabs also finish field + names. + + * torture/utils/recsel.sh (ignored-first-blanks): New input file. + (recsel-ignored-first-blanks): New test. + +2014-02-24 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi: Many English changes in the manual. Patch by + Karl Berry. + (Selecting by Type): use LastRelease instead of URL in the + gnu.rec example. + +2014-02-24 Jose E. Marchesi <jemarch@gnu.org> + + * src/Makefile.am (librec_la_LDFLAGS): Bump current version to 1. + +2014-02-19 Jose E. Marchesi <jemarch@gnu.org> + + bash: fix librec linking issue. + * bash/Makefile.am (readrec_la_LIBADD): Link with the built librec. + (testrec_la_LIBADD): Likewise. + +2014-02-19 Jose E. Marchesi <jemarch@gnu.org> + + src,utils,manual,torture: new writer option to omit comments when + outputting rsets and comments. recsel now uses this option to + avoid emitting record fields. + + * torture/rec-writer/rec-write-record.c + (rec_write_record_skip_comments): New test. + + * src/rec-writer.c (rec_write_record): Do not write out comments + in records if the writer was configured to skip them. + (rec_write_rset): Likewise. + + * utils/recsel.c (recsel_process_data): Configure the writer to + skip comments. + + * torture/utils/recsel.sh (record-with-comments): New input file. + (recsel-record-with-comments): New test. + + * torture/rec-writer/rec-write-comment.c (rec_write_comment_sexp): + Adapted to new writer api. + (rec_write_comment_nominal): Likewise. + * torture/rec-writer/rec-write-record.c + (rec_write_record_nominal): Likewise. + (rec_write_record_sexp): Likewise. + (rec_write_record_values): Likewise. + (rec_write_record_values_row): Likewise. + * torture/rec-writer/rec-write-field-name.c + (rec_write_field_name_nominal): Likewise. + (rec_write_field_name_sexp): Likewise. + * torture/rec-writer/rec-write-field.c (rec_write_field_nominal): + Likewise. + (rec_write_field_values): Likewise. + (rec_write_field_values_row): Likewise. + (rec_write_field_sexp): Likewise. + * torture/rec-writer/rec-write-rset.c (rec_write_rset_nominal): + Likewise. + + * utils/recinf.c (print_info_file): Use the new interface for + setting a writer's mode. + * bash/readrec.c (readrec_builtin): Likewise. + * utils/recsel.c (recsel_process_data): Likewise. + + * src/rec-writer.c (rec_writer_set_skip_comments): New function. + (rec_writer_set_mode): Likewise. + (rec_writer_new_common): Set default values for the + skip_comments_p and mode writer options. + (rec_write_comment): Use the writer mode attribute instead of an + extra argument to determine how to output the entity. + (rec_write_field): Likewise. + (rec_write_field_name): Likewise. + (rec_write_record): Likewise. + (rec_write_rset): Likewise. + (rec_write_field_str): Likewise. + (rec_write_field_name_str): Likewise. + (rec_write_comment_str): Likewise. + + * src/rec.h: Copyright year updated. + Prototypes for rec_writer_set_skip_comments and + rec_writer_set_mode added. + + * src/rec-writer.c (struct rec_writer_s): New fields + skip_comments_p and mode. + +2014-02-18 Jose E. Marchesi <jemarch@gnu.org> + + manual: clarify decryption using several passwords. + * doc/recutils.texi (Confidential Fields): Added a note clarifying + that it is not possible to specify several passwords in a single + invocation of recsel. + +2014-02-17 Jose E. Marchesi <jemarch@gnu.org> + + manual: follow the standard way in naming the utility invokation + nodes. + * doc/recutils.texi (Invoking recinf): Renamed from node recinf. + (Invoking recsel): Likewise. + (Invoking recins): Likewise. + (Invoking recdel): Likewise. + (Invoking recset): Likewise. + (Invoking recfix): Likewise. + (Invoking recfmt): Likewise. + (Invoking csv2rec): Likewise. + (Invoking rec2csv): Likewise. + (Invoking mdb2rec): Likewise. + "Fast" access links in the "Individual utilities" dircategory + fixed to point to the nodes renamed above. + (Documenting Records): Xref fixed. + (Sorted Output): Likewise. + (Deleting Records): Likewise. + (Editing Fields): Likewise. + (CSV Files): Likewise. + +2014-02-17 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi (Scalar Field Types): Improve misleading + example. + * doc/recutils.texi (SEX Operands): Improve wording. + +2014-02-17 Jose E. Marchesi <jemarch@gnu.org> + + * src/rec-types.c (rec_type_parse_enum): Code typo fixed. + Reported by David Binderman. + +2014-02-05 Jose E. Marchesi <jemarch@gnu.org> + + utils: avoid segfaults in several utilities when reading invalid + rec data. + * utils/rec2csv.c (main): Avoid a segmentation fault when a file + containing invalid data is fetched to rec2csv. + * utils/recfmt.c (main): Likewise for recfmt. + +2014-01-02 Jose E. Marchesi <jemarch@gnu.org> + + doc: document the -d|--delim command line argument for rec2csv. + * doc/recutils.texi (rec2csv): Document -d|--delim. + +2014-01-02 Jose E. Marchesi <jemarch@gnu.org> + + utils: add support for arbitrary delimiter characters in rec2csv. + Patch provided by Sebastian Fischmeister. + * utils/rec2csv.c: New global variable rec2csv_delim. + (recutl_print_help): Documentation of -d. + (rec2csv_parse_args): Process the new -d|--delim command line + argument. + (rec2csv_generate_csv): Likewise. + +2014-01-02 Jose E. Marchesi <jemarch@gnu.org> + + Do not maintain local copies of .po files which are available in + the translation project. + * po/fr.po: file removed. + * po/sr.po: Likewise. + * po/uk.po: Likewise. + * po/vi.po: Likewise. + +2012-12-04 Julio C. M. Ramirez <rikijpn@member.fsf.org> + + * etc/rec-mode.el: adding numeric prefix to next/previous + records commands for recmode on emacs. + * doc/rec-mode.texi: adding mention for feature above. + +2013-11-04 Jose E. Marchesi <jemarch@gnu.org> + + * .gitignore: Updated with the files generated when building the + rec-mode manual. + +2013-11-03 Jose E. Marchesi <jemarch@gnu.org> + + Preparation for 1.6. + * configure.ac: Version number bumped to 1.6. + * NEWS: Updated for 1.6. + +2013-11-01 Jose E. Marchesi <jemarch@gnu.org> + + src,doc,torture: support single-char fields in selection + expressions. + * torture/utils/recsel.sh (single-char-field-names): New input + file. + (recsel-sex-single-char-field-names): New test. + + * doc/recutils.texi (Fields): Update regexp denoting field names + to allow fields composed by just one character. + + * src/rec-sex-lex.l: Allow fields composed by just one character + in selection expressions. + +2013-10-29 Jose E. Marchesi <jose.marchesi@oracle.com> + + * NEWS: Updated for 1.5.90. + + * bash/readrec.c: Do not check for HAVE_UNISTD_H. It is always + true with the corresponding gnulib module. + * bash/testrec.c: Likewise. + + * configure.ac: Version number bumped to 1.5.90. + +2013-10-29 Jose E. Marchesi <jose.marchesi@oracle.com> + + * doc/recutils.texi (Auto-Generated Fields): Finished. + (Counters): Written. + (Unique Identifiers): Likewise. + (Time-Stamps): Likewise. + +2013-10-17 Jose E. Marchesi <jose.marchesi@oracle.com> + + manual: document grouping and aggregate functions. + * doc/recutils.texi (Grouping Records): New section. + (Aggregate Functions): Likewise. + +2013-09-24 Jose E. Marchesi <jose.marchesi@oracle.com> + + recfmt: do not append a newline to the expansion of templates. + Reported by Aikido Guy. + * torture/utils/recfmt.sh: Adjust tests to not expect a newline + inserted between applications of a template. + + * utils/recfmt.c (recfmt_process_db): Do not append a newline to + the expansion of a template. + +2013-08-29 Jose E. Marchesi <jemarch@gnu.org> + + * etc/rec-mode.el (rec-fast-selection): Avoid an extra useless + window when using rec-fast-selection. + +2013-08-25 Jose E. Marchesi <jemarch@gnu.org> + + utils: avoid the replication of out-of-memory string literals. + * utils/csv2rec.c (field_cb): Use recutl_out_of_memory. + (record_cb): Likewise. + (record_cb): Likewise. + * utils/recsel.c (recsel_process_data): Likewise. + * utils/recins.c (recins_add_new_record): Likewise. + (recins_add_new_record): Likewise. + * utils/recfix.c (recfix_do_sort): Likewise. + (recfix_do_auto): Likewise. + * utils/recdel.c (recdel_delete_records): Likewise. + * utils/rec2csv.c (rec2csv_generate_csv): Likewise. + (rec2csv_generate_csv): Likewise. + (rec2csv_process_data): Likewise. + * utils/mdb2rec.c (process_table): Likewise. + (process_mdb): Likewise. + + * utils/recutl.c (recutl_out_of_memory): New function. + +2013-08-25 Jose E. Marchesi <jemarch@gnu.org> + + manual: documentation for the readrec bash built-in. + * doc/recutils.texi (Bash Builtins): Written. + (readrec): Written. + +2013-08-25 Jose E. Marchesi <jemarch@gnu.org> + + src: remove hard limit on the number of types registered in a + types registry. + * src/rec-types.c (REC_TYPE_REG_ALLOC_TYPES): New constant. + (rec_type_reg_destroy): Free the dynamically allocated list of + types. + (rec_type_reg_new): Initialize new->types to NULL. + (rec_type_reg_add): Adjusted to new semantics. + (rec_type_reg_add_synonym): Likewise. + +2013-08-25 Jose E. Marchesi <jemarch@gnu.org> + + src: remove hard limit on the number of literals in enum types. + * src/rec-types.c (REC_ENUM_NAMES): Removed. + (REC_ENUM_ALLOC_NAMES): Created. + (rec_type_new): Initialize the size of the type to 0. + (rec_type_parse_enum): Allocate memory for the enumeration names + in chunks. + (rec_type_equal_p): Adjusted to new semantics. + (rec_type_check_enum): Likewise. + +2013-08-25 Jose E. Marchesi <jemarch@gnu.org> + + csv2rec: remove hard limit on the number of fields in the input + csv file. + * utils/csv2rec.c (MAX_FIELDS): Removed. + (process_csv): Initialize ctx.field_names to NULL. + (field_cb): Re-allocate memory for fields when needed, in blocks + with size ALLOC_FIELDS. + +2013-08-25 Jose E. Marchesi <jemarch@gnu.org> + + * bash/readrec.c (readrec_builtin): Define variables after fields + in the read records. + +2013-08-24 Jose E. Marchesi <jemarch@gnu.org> + + * bash/Makefile.am (testrec_la_LDFLAGS): Define. + (testrec_la_LIBADD): Likewise. + (testrec_la_SOURCES): Likewise. + + * bash/testrec.c: New file. + (testrec_builtin): New function. + +2013-08-24 Jose E. Marchesi <jemarch@gnu.org> + + manual: empty stub sections for the bash bulitins. + * doc/recutils.texi (Bash Builtins): New stub chapter. + (readrec): Likewise. + (testrec): Likewise. + +2013-08-24 Jose E. Marchesi <jemarch@gnu.org> + + bash: readrec builtin. + * Makefile.am (SUBDIRS): Recurse to the bash/ subdirectory. + + * configure.ac: Handle --enable-bash-builtins and detection of + bash headers. + Handle --with-bash-headers. + + * bash/Makefile.am: New file. + + * bash/readrec.c: New file. + (readrec_builtin): New function. + +2013-08-21 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi (Replacing Records With recins): New section. + +2013-08-16 Jose E. Marchesi <jemarch@gnu.org> + + src: optimize the sex evaluator. + * src/rec-sex.c (rec_sex_eval): Optimize the evaluator, avoiding + discarding the same field twice. + +2013-08-16 Jose E. Marchesi <jemarch@gnu.org> + + src: support for field marks in records. + * src/rec-record.c (rec_record_reset_marks): New function. + (rec_record_mark_field): Likewise. + (rec_record_field_mark): Likewise. + + * src/rec-field.c (struct rec_field_s): New attribute 'mark' for + fields. + (rec_field_dup): Field mark. + (rec_field_set_mark): New function. + (rec_field_mark): Likewise. + + * src/rec.h: Prototypes for the new field marks related functions. + +2013-08-15 Giuseppe Scrivano <gscrivan@redhat.com> + + * src/rec-aggregate.c (rec_aggregate_std_count): Fix formatting string. + (rec_aggregate_std_avg): Likewise. + (REC_AGGREGATE_ACCUM_FUNC): Likewise. + * src/rec-fex.c (rec_fex_parse_str_simple): Wrap assignment in if + statement in parentheses. + * src/rec-sex-lex.l (top): Specify options header-file, noinput and + nounput. + (rec_sex_lex_extract_subname): Remove unused variable `res'. + * src/rec-sex-tab.y: Include "rec-sex-lex.h". + * src/rec-sex-ast.c (rec_sex_ast_print_node): Use name[0] to access the + name. + * src/rec-sex-parser.c: Include "rec-sex-lex.h" and "rec-sex-tab.h". + * src/rec-sex-lex.l: Generate the header file "rec-sex-lex.h". + * src/rec-int.c (rec_int_check_field_type): Removed unused variable + `field_name'. + * src/rec-db.c (rec_db_query): Removed unused variable `selected'. + (rec_db_query): Removed unused variable `n_rset'. + Remove declaration for the static function `rec_db_set_act_setadd'. + * src/rec-rset.c (rec_rset_record_compare_fn): Removed unused variables + `field1' and `field2'. + (rec_rset_update_field_props): Removed unused variable `type_name'. + * src/rec-mset.c (rec_mset_elem_init): Remove unused function. + +2013-08-08 Jose E. Marchesi <jemarch@gnu.org> + + src: optimize the evaluation of sex expressions, avoiding + permutations on fields not appearing in the expression. + * src/rec-sex-ast.c (rec_sex_ast_name_p_1): New function. + (rec_sex_ast_name_p): Likewise. + + * src/rec-sex.c (rec_sex_eval): Do not permute on fields not + featured on the selection expression. + +2013-08-08 Jose E. Marchesi <jemarch@gnu.org> + + src,torture,doc: support the usage of MIN and MAX keywords in + range types. + * doc/recutils.texi (Scalar Field Types): Document the MIN and MAX + keywords in range specifications. + + * torture/utils/recfix.sh (range_min_ok): New test. + (range_min_invalid): Likewise. + (range_max_ok): Likewise. + (range_max_invalid): Likewise. + (range_minmax_ok): Likewise. + (range_minmax_invalid): Likewise. + + * src/rec-types.c (rec_type_parse_range): Support MIN and MAX + keywords in range definitions. + (rec_type_parse_range_point): New function. + Include limits.h. + + * src/rec-utils.c (rec_parse_int): update 'ret' only if hte + parsing was successful. + (rec_parse_regexp): Likewise. + + * src/rec-types.c (REC_TYPE_RANGE_DESCR_RE): Allow MIN and MAX + literals as well as numeric literals. + (REC_TYPE_RANGE_MINMAX_RE): New constant. + (REC_TYPE_DESCR_RE): Duplicate check for REC_TYPE_RANGE_DESCR_RE + removed. + +2013-08-08 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi (Inserting Records): basic operation of recins + documented. + +2013-08-08 Jose E. Marchesi <jemarch@gnu.org> + + * utils/recins.c (recutl_print_help): typo fixed in help string: + -R must be -r. + +2013-08-08 Jose E. Marchesi <jemarch@gnu.org> + + maint: syntax-check fixes. + * etc/rec-mode.el (rec-summary-rec-buffer): Trailing blanks + removed from line. + * AUTHORS (John Darrington): Likewise. + + * .gitignore: Newline added at EOF to keep syntax-check happy. + + * etc/rec-mode.el (rec-mode): Typo in comment fixed. + +2013-07-29 Michał Masłowski <mtjm@mtjm.eu> + + src: fix memory leak. + * src/rec-rset.c (struct rec_rset_fprops_s): Remove const from + fname, since it can be dynamically allocated. + (rec_rset_destroy): Free fname. + (rec_rset_update_field_props): Destroy the temporary fex. + +2013-06-23 Jose E. Marchesi <jemarch@gnu.org> + + src,doc,torture: fix the insertion of anonymous records in dbs. + * doc/recutils.texi (Inserting Anonymous Records): New section. + + * torture/utils/recins.sh (marks): New input file. + + * src/rec-db.c (rec_db_get_rset): The position cant be zero + since size_t is unsigned so don't check for it. + (rec_db_insert_rset): Likewise. + (rec_db_remove_rset): Likewise. + (rec_db_insert): Fix the index of the default rset. + +2013-06-23 Jose E. Marchesi <jemarch@gnu.org> + + src,doc,elisp: remove support for hyphens in field names. + * torture/utils/recfix.sh (recfix-hyphens-in-field-names): new + test. + + * src/rec.h (REC_FNAME_RE): Don't allow hyphens in field names. + * src/rec-parser.c (rec_parse_field_name): Likewise. + * doc/recutils.texi (Fields): Likewise. + (Declaring Types): Likewise. + * etc/rec-mode.el (rec-field-name-re): Likewise. + (rec-font-lock-keywords): Likewise. + (rec-parse-type): Likewise. + (rec-check-type): Likewise. + (rec-field-type): Likewise. + +2013-05-22 Jose E. Marchesi <jemarch@gnu.org> + + utils: interactively ask for a password twice to avoid loosing + data because of typing errors. + * utils/recins.c (recins_add_new_record): Use recutl_getpass. + * utils/recsel.c (recsel_process_data): Likewise. + * utils/recfix.c (recfix_parse_args): Likewise. + + * utils/recutl.c (recutl_getpass): New function. + +2013-05-22 Jose E. Marchesi <jose.marchesi@oracle.com> + + * etc/ob-rec.el (org-babel-execute:rec): Add support for GroupBy. + (org-babel-execute:rec): Add support for joins. + +2013-05-09 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi (Sorted Output): Renamed from Sorting. + (Sorting Records): New section. + (Editing Records): Intro written. + +2013-03-14 Jose E. Marchesi <jemarch@gnu.org> + + doc: minor improvements in the manual. + * doc/recutils.texi: Add John as an author. + (Selecting by Type): Document the -d command line option to + recsel. + +2013-02-12 Jose E. Marchesi <jemarch@gnu.org> + + manual: get recutils.texi compiling again. + * doc/recutils.texi (Joining Records): Empty section created. + (Foreign Keys): Likewise. + (Top): Entry in menu fixed to avoid an invalid reference. + +2013-02-11 Jose E. Marchesi <jemarch@gnu.org> + + manual: Field Restrictions introduction written. + * doc/recutils.texi (Field Restrictions): Introduction to the + chapter written. + +2013-02-10 Michał Masłowski <mtjm@mtjm.eu> + + * configure.ac: Use AC_CONFIG_HEADERS, LT_INIT and AC_CONFIG_FILES + instead of deprecated AM_CONFIG_HEADER, AC_PROG_LIBTOOL and + argument of AC_OUTPUT. + +2013-02-10 Jose E. Marchesi <jemarch@gnu.org> + + * doc/rec-mode.texi: Copyright updated. + + * doc/recutils.texi (Random Records): Clarify how the internal + algorihtm works. + Copyright updated. + +2013-02-10 Jose E. Marchesi <jemarch@gnu.org> + + * src/rec-db.c (rec_db_process_fex): Avoid a segmentation fault + when the function is called with a NULL record. + +2013-02-10 Jose E. Marchesi <jemarch@gnu.org> + + manual: record sets and simple selection techniques documented. + * doc/recutils.texi (Record Sets): New subsection. + (Naming Record Types): Likewise. + (The Special Fields): Likewise. + (Selecting by Position): Written. + (Random Records): Likewise. + +2013-02-04 Jose E. Marchesi <jemarch@gnu.org> + + * etc/rec-mode.el (rec-summary-populate): Use the first header as + the sorting criteria. + (rec-cmd-show-summary): Store the record position as the ID of the + tabular row. + (rec-summary-rec-buffer): New variable. + (rec-cmd-show-summary): Set the buffer local variable + rec-summary-rec-buffer the proper value. + +2013-02-03 Jose E. Marchesi <jemarch@gnu.org> + + * etc/rec-mode.el (rec-keyword-summary): New constant. + (rec-summary-fields): New function. + (rec-join-string): Likewise. + + * src/rec-db.c (rec_db_process_fex): Don't loose the location + information in records processed by fexes. + +2013-02-02 Jose E. Marchesi <jemarch@gnu.org> + + * etc/rec-mode.el (rec-summary-mode): New function. + (rec-summary-mode-map): New variable. + (rec-mode-map): Map 'h' to rec-cmd-show-summary. + (rec-mode-edit-map): Map 'C-ch' to rec-cmd-show-summary. + (rec-cmd-show-summary): New function. + (rec-summary-populate): Likewise. + (rec-query): Use --print-sexps even if a fex was specified. + +2013-02-02 Jose E. Marchesi <jemarch@gnu.org> + + + writer: quote special characters when printing lisp strings. + * torture/utils/recsel.sh (unquoted-lisp-strings): New input file. + (recsel-unquoted-lisp-strings): New test. + + * src/rec-writer.c (rec_write_field): Escape double quotes and + backslashes when writing the field values in lisp strings. + +2013-02-02 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi (Checking Recfiles for Errors): format typo + fixed. + +2013-02-02 Jose E. Marchesi <jemarch@gnu.org> + + src: allow duplicated fields in grouped record sets. + * src/rec-rset.c (rec_rset_merge_records): Don't remove duplicated + fields when grouping record sets. + +2013-01-30 Jose E. Marchesi <jemarch@gnu.org> + + * README-dev: Mention bootstrap instead of autogen.sh. + + * src/Makefile.am (librec_la_LIBADD): Rename libgnu.la to + librecutils.la. + * utils/Makefile.am (COMMONLIBS): Likewise. + + * configure.ac: Invoke gl_EARLY after AC_PROG_CC. + +2013-01-30 Jose E. Marchesi <jemarch@gnu.org> + + static gnulib removed. + * bootstrap: Imported. + * bootstrap.conf: New file. + Many files deleted. + +2013-01-20 Jose E. Marchesi <jemarch@gnu.org> + + manual: new sections on configuring rec-mode. + * doc/rec-mode.texi (Records appearance): Section completed. + (Finding the recutils): New section. + (Top): Detailed menu updated. + +2013-01-07 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: be smart assigning letters to enumerated entries. + * etc/rec-mode.el (rec-cmd-edit-field): Assign letters to + enumerated entries in a "smart" way. + +2013-01-07 Jose E. Marchesi <jemarch@gnu.org> + + * etc/rec-mode.el: Copyright years updated. + +2013-01-04 Jose E. Marchesi <jemarch@gnu.org> + + * etc/rec-mode.el (rec-mode-version): New constant. + +2012-12-26 Jose E. Marchesi <jemarch@gnu.org> + + src,torture: simplify the creation of the descriptor of joined + record sets. + * torture/utils/recsel.sh (recsel-join-descriptor): New test. + + * src/rec-db.c (rec_db_join): The descriptor of joined records + only features a %rec: entry. + +2012-12-26 Jose E. Marchesi <jemarch@gnu.org> + + src: fix the parser in order to accept lines with blanks just + after records. + * torture/utils/recfix.sh (blank-line-after-record): New input + file. + (blank-line-after-record-invalid): Likewise. + (recfix-blank-line-after-record): New test. + (recfix-blank-line-after-record-invalid): Likewise. + + * src/rec-parser.c (rec_parse_record): Ignore lines composed by + only blank characters when they appear immediately after a record. + +2012-12-26 Jose E. Marchesi <jemarch@gnu.org> + + * etc/rec-mode.el (rec-finish-editing-field): dont hide + continuation line markers if the command was invoked from an + editing mode. + +2012-12-12 Jose E. Marchesi <jemarch@gnu.org> + + * etc/rec-mode.el (rec-finish-editing-field): Do the right thing + when the selected window is the only window in the frame. + +2012-12-06 Jose E. Marchesi <jemarch@gnu.org> + + src,torture: support several foreign keys with the same name in a + record. + * torture/utils/recsel.sh (several-foreign-keys): New input file. + (recsel-several-foreign-keys): New test. + + * src/rec-db.c (rec_db_join): A record may contain more than one + foreign field. + +2012-11-21 Jose E. Marchesi <jemarch@gnu.org> + + manual: little fix in the introduction. + * doc/recutils.texi (Introduction): Don't enumerate the different + utilities. + +2012-11-21 Jose E. Marchesi <jemarch@gnu.org> + + utils: make recsel to honour --print-row and --print-values. + * torture/utils/recsel.sh (recsel-row-long): New test. + (recsel-values-long): New test. + + * utils/recsel.c (recsel_parse_args): Honour --print-row and + --print-values. + +2012-11-21 Julio C. M. Ramirez <rikijpn@member.fsf.org> + + * doc/recutils.texi : Grammar corrections and rephrasing some + parts for easier reading. + +2012-11-21 John Darrington <john@darrington.wattle.id.au> + + * doc/recutils.texi: Updated so that Texinfo 4.13.90 does not + show errors. + +2012-11-15 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: visiting an empty file works again. + * etc/rec-mode.el (rec-buffer-valid-p): New function. + (rec-update-buffer-descriptors-and-check): Use rec-buffer-valid-p + to determine if the buffer contains valid rec data, instead of + rec-update-buffer-descriptors. + +2012-11-12 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: support for a mode hook. + * etc/rec-mode.el (rec-mode-hook): New custom. + (rec-mode): Run the hooks installed in rec-mode-hook. + +2012-11-11 Jose E. Marchesi <jemarch@gnu.org> + + doc: some work on the rec-mode manual. + * doc/rec-mode.texi (Opening recfiles): New section. + (Editing records and fields): Likewise. + (Edition modes): Likewise. + (Edition mode): Likewise. + (Data integrity): Likewise. + (Statistics): Likewise. + (Editing fields): Likewise. + (Searches): Likewise. + (Motion): Likewise. + (Navigation mode): Likewise. + (Field navigation and folding): Likewise. + (reccmd): New macro. + (ie): Likewise. + (Records appearance): New section. + +2012-11-11 Jose E. Marchesi <jemarch@gnu.org> + + utils: a NULL file name means stdout, which is always writable. + * utils/recutl.c (recutl_file_is_writable): Return true if the + file name is NULL. + +2012-11-10 Jose E. Marchesi <jemarch@gnu.org> + + utils: honor file permissions when doing in-place operations. + * utils/recset.c (main): Likewise. + + * utils/recins.c (main): Likewise. + + * utils/recfix.c (recfix_do_sort): Likewise. + + * utils/recdel.c (main): Check for the writeability of the file + before writing to it. + + * utils/recutl.c (recutl_check_file_is_writable): new function. + +2012-11-10 Jose E. Marchesi <jemarch@gnu.org> + + * gnulib module euidaccess imported. + +2012-11-10 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: check for the validity of the contents of the buffers + before going to navigation mode. + * etc/rec-mode.el (rec-mode): Do not activate the rec-mode if the + contents of the buffer are not valid rec data. Show an error + message in the modeline instead. + (rec-update-buffer-descriptors-and-check): New function. + (rec-finish-editing): Warn and don't abandon edit mode if there + are errors in the rec data in the buffer. + + * utils/recinf.c (main): Recognize parse errors when stdin is used + to read the rec data. + + * torture/utils/recinf.sh (invalid): New input file. + (recinf-invalid): New test. + + * src/rec-parser.c (rec_parse_db): Keep track of the result of + rec_parse_rset so an invalid database is properly reported. + + * utils/recinf.c (print_info_file): Return false if there is a + parse error in the input. + + * etc/rec-mode.el (rec-update-buffer-descriptors): Return nil if + the : + +2012-11-10 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: avoid trying to delete the sole window in the current + frame. + (rec-finish-editing-field): avoid trying to delete the edit window + if it is the only window in the frame. Switch to show the rec + buffer instead. + +2012-11-10 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: rec-end-of-field-pos now works properly when a field + ends with the end of file mark. + * etc/rec-mode.el (rec-end-of-field-pos): Do not add one to the + end-of-field position. + (rec-delete-field): Delete the trailing \n after the field, if + any. + +2012-11-07 Jose E. Marchesi <jemarch@gnu.org> + + src: emit a useful message when an invalid enum literal is found + in a field. + * src/rec-types.c (rec_type_check_enum): Add a meaningful error + message when the string to check is empty or otherwise an invvalid + enum literal. + +2012-11-07 Jose E. Marchesi <jemarch@gnu.org> + + man: do not require help2man unless the sources are changed. + * .gitignore: generated manpages removed. + * man/csv2rec.1: Added to the repo. + * man/recset.1: Likewise. + * man/recsel.1: Likewise. + * man/recins.1: Likewise. + * man/recinf.1: Likewise. + * man/recfmt.1: Likewise. + * man/recfix.1: Likewise. + * man/recdel.1: Likewise. + * man/rec2csv.1: Likewise. + * man/mdb2rec.1: Likewise. + +2012-10-08 Jose E. Marchesi <jemarch@gnu.org> + + csv2rec: diagnostic messages improved. + * utils/csv2rec.c (struct csv2rec_ctx): New field lineno. + (process_csv): Initialize lineno. + (field_cb): Improve the error message. + +2012-10-07 John Darrington <john@darrington.wattle.id.au> + + utils/recutl.c: (recutl_write_db_to_file) Fixed memory leak + +2012-09-07 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: fixed to allow comments in records. + * etc/rec-mode.el (rec-hide-continuation-line-markers): Fixed to + ignore comments in records. + (rec-hide-record-fields): Likewise. + (rec-record-elems): Renamed from rec-record-fields. + (rec-insert-record): Use rec-record-elems. + (rec-record-assoc): Likewise. + (rec-record-names): Likewise. + (rec-hide-continuation-line-markers): Likewise. + (rec-hide-record-fields): Likewise. + (rec-unfold-record-fields): Likewise. + (rec-log-current-defun): Likewise. + +2012-09-07 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: don't move the pointer after switching to edit buffer or + edit type mode. + * etc/rec-mode.el (rec-edit-buffer): Don't move the pointer to the + beginning of the buffer. + (rec-edit-type): Likewise. + +2012-09-06 John Darrington <john@darrington.wattle.id.au> + + * doc/recutils.texi : Minor markup alterations + * doc/recutils.texi : Added some index entries + +2012-09-04 Jose E. Marchesi <jco@terma.com> + + rec-mode: improve rec-log-current-defun so it works in all cases. + * etc/rec-mode.el (rec-log-current-defun): Cover the case where + there is a defined key but the field is not present in the record. + +2012-09-03 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: provide a sensible log-current-defun for the add-log + function. + * etc/rec-mode.el (rec-log-current-defun): New function. + (rec-mode): Set the buffer local value of + add-log-current-defun-function to rec-log-current-defun. + +2012-09-03 Jose E. Marchesi <jemarch@gnu.org> + + * AUTHORS: Daiki, Ralf, John and Michał added. + +2012-08-31 John Darrington <john@darrington.wattle.id.au> + + * doc/recutils.texi : Merge Fields and Records, and Comments into + one chapter + + * doc/recutils.texi : Added the start of a tutorial chapter + +2012-08-27 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi (Top): Concept Index added to the menu. + +2012-08-27 Jose E. Marchesi <jco@terma.com> + + * .x-sc_prohibit_strncpy: New file. + +2012-08-27 John Darrington <john@darrington.wattle.id.au> + + * doc/recutils.texi: Replaced one remaining instance of "i.e." with the + respective macro. Also added @: to the macro definition to improve + spacing. + + * doc/recutils.texi: Added @. where appropriate. + * doc/recutils.texi: Added an index. + +2012-08-26 Jose E. Marchesi <jemarch@gnu.org> + + doc: minor fixes in the manual. + * doc/recutils.texi (Conversion Utilities): @acronym removed. + (Record Descriptors): Relocate the menu to the end of the section + and remove the now uneeded list of special fields. + (Scalar types): The type identifier for integers is 'int' and not + 'integer'. + +2012-08-26 John Darrington <john@darrington.wattle.id.au> + + * doc/recutils.texi: Reorganised sectioning, in favour of fewer, but bigger chapters. + +2012-08-23 Jose E. Marchesi <jemarch@gnu.org> + + syntax-check fixes. + * etc/rec-mode.el: Trailing blanks removed from file. + + * doc/recutils.texi (recsel Grouping): Don't use @acronym{}. + http://lists.gnu.org/archive/html/bug-gnulib/2010-03/msg00321.html + explains why. + + * src/rec-db.c (rec_db_merge_records): Use memcpy instead of + strncpy. + (rec_db_process_fex): Likewise. + * utils/recfmt.c (recfmt_apply_template): Likewise. + * utils/mdb2rec.c (process_table): Likewise. + * utils/csv2rec.c (field_cb): Likewise. + * src/rec-utils.c (rec_extract_file): Likewise. + (rec_extract_url): Likewise. + (rec_extract_type): Likewise. + (rec_parse_regexp): Likewise. + (rec_concat_strings): Likewise. + * src/rec-sex-lex.l: Likewise. + * src/rec-sex.c (rec_sex_eval_node): Likewise. + (rec_sex_eval_node): Likewise. + * src/rec-parser.c (rec_parse_field_name_str): Likewise. + * src/rec-int.c (rec_int_merge_remote): Likewise. + * src/rec-field-name.c (rec_field_name_normalise): Likewise. + + * .x-sc_prohibit_strncpy: New file. + +2012-08-22 Jose E. Marchesi <jemarch@gnu.org> + + * src/rec-types.c (rec_type_destroy): Be a no-operation in case + the passed type is NULL. + +2012-08-21 Michał Masłowski <mtjm@mtjm.eu> + + src,torture: Fix memory leaks found by valgrind in unit tests. + * src/rec-fex.c (rec_fex_destroy): Free rewrite_to of each + element. + (rec_fex_parse_str_simple): Free fex_str, rewrite_to of each + element and use common code for destroying partial results on + error. + (rec_fex_parse_str_subscripts): Free fex_str and in case of error + field_name and str of each element. + (rec_fex_parse_elem): Free elem->str, elem->field_name and + elem->rewrite_to on error. + * src/rec-parser.c (rec_parser_perror): Don't allocate number_str, + asprintf will do it. + (rec_parse_record): Free the record on error. + (rec_parse_comment): Free the comment string not only on error. + * src/rec-rset.c (rec_rset_destroy): Free constraints. + * src/rec-sex-ast.c (rec_sex_ast_node_destroy): Free the node. + * src/rec-types.c (rec_type_new): Free the type on error. + (rec_type_destroy): Free the data of enum and regexp types. + + * torture/rec-fex/rec-fex-new.c (rec_fex_new_subscripts): Destroy + the fex after use. + * torture/rec-fex/rec-fex-str.c (rec_fex_str_nominal): Likewise. + * torture/rec-field/rec-field-set-name.c + (rec_field_set_name_empty): Destroy the field after use. + (rec_field_set_name_nonempty): Likewise. + * torture/rec-field/rec-field-set-value.c + (rec_field_set_value_empty): Likewise. + (rec_field_set_value_nonempty): Likewise. + * torture/rec-field/rec-field-value.c (rec_field_value_empty): + Likewise. + (rec_field_value_nonempty): Likewise. + * torture/rec-parser/rec-parse-record-str.c + (rec_parse_record_str_nominal): Free fname after use. + * torture/rec-parser/rec-parse-record.c + (rec_parse_record_nominal): Likewise. + * torture/rec-parser/rec-parse-rset.c (rec_parse_rset_nominal): + Destroy the rset after use. + * torture/rec-parser/rec-parser-new-mem.c + (rec_parser_new_mem_nominal): Likewise. + * torture/rec-parser/rec-parser-seek-mem.c + (rec_parser_seek_mem_skip): Destroy the record after use. + * torture/rec-writer/rec-write-comment-str.c + (rec_write_comment_str_nominal): Free str after use. + (rec_write_comment_str_sexp): Likewise. + * torture/rec-writer/rec-write-field-name-str.c + (rec_write_field_name_str_nominal): Likewise. + (rec_write_field_name_str_sexp): Likewise. + * torture/rec-writer/rec-write-field-str.c + (rec_write_field_str_nominal): Likewise. + (rec_write_field_str_sexp): Likewise. + +2012-08-21 Michał Masłowski <mtjm@mtjm.eu> + + src: Initialize unused fields to 0 in rec_fex_append. + * src/rec-fex.c (rec_fex_append): Zero new_elem content. + +2012-08-21 Michał Masłowski <mtjm@mtjm.eu> + + src: Fix an invalid read in an unit test detected by valgrind. + * src/rec-parser.c (rec_parse_field_name_str): Do the check for + trailing ':' only for nonempty strings. + +2012-08-16 John Darrington <john@darrington.wattle.id.au> + + doc: Reals always use the dot as separator + * doc/recutils.texi: Added a note to the effect that the LC_NUMERIC + locale class does not affect how real types are interpreted. + +2012-08-16 John Darrington <john@darrington.wattle.id.au> + + doc: Grammar and typos + * doc/recutils.texi: Corrected various minor grammatical and + typographical errors. + +2012-08-16 John Darrington <john@darrington.wattle.id.au> + + doc: Comments vs. %doc + * doc/recutils.texi: Elaborated on the distinction between comments + and %doc fields. Added an example for %doc + +2012-08-16 John Darrington <john@darrington.wattle.id.au> + + doc: Grammar + * doc/recutils.texi: "allows to" is not correct English. Added a + subject or reformulated as appropriate. + +2012-08-15 John Darrington <john@darrington.wattle.id.au> + + doc: Correct typo + * doc/recutils.texi: adquisition --> acquisition + +2012-08-15 John Darrington <john@darrington.wattle.id.au> + + doc: Add a macro for id est + * doc/recutils.texi: In English text, I think its easier to recognise these latin + abbreviations in italics. So I've added a macro for i.e. + +2012-08-15 John Darrington <john@darrington.wattle.id.au> + + doc: "data" is plural ("datum" is the singular) + * doc/recutils.texi: I find conjugations like "this data" just sound wrong. + +2012-08-14 Jose E. Marchesi <jemarch@gnu.org> + + src: compare real numbers with LC_NUMERIC=C. + * src/rec-utils.c: Include locale.h. + (rec_atod): Make sure that the dot is the decimal separator + regardless of the locale in the environment. + +2012-08-09 Jose E. Marchesi <jemarch@gnu.org> + + doc: typo fixed in manual. + * doc/recutils.texi: Incorrect "escalar" replaced by "scalar". + +2012-08-05 Jose E. Marchesi <jemarch@gnu.org> + + src,doc: support for dot notation in simple fexes. + * doc/recutils.texi (Field Expressions): Document dot notation in + field expressions. + + * src/rec-fex.c (rec_fex_parse_str_simple): Support for dot + notation in field names in simple fexes. + +2012-08-05 Jose E. Marchesi <jemarch@gnu.org> + + src,torture: don't try to perform a join if the referred type does + not exist in the database. + * src/rec-db.c (rec_db_query): Don't perform a join if records of + the referred type cannot be found in the database. + + * torture/utils/recsel.sh (non-existant-foreign-key): New input + file. + (recsel-non-existant-foreign-key): New test. + +2012-08-04 Michał Masłowski <mtjm@mtjm.eu> + + src,torture: fix a recfix crash reported by John Darrington. + * src/rec-rset.c (rec_rset_get_field_type): Don't call + rec_type_reg_get with NULL as type name. + + * torture/utils/recfix.sh (unused-type): New input file. + (recfix-unused-type): New test. + +2012-08-01 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: copy/kill fields and records commands. + * etc/rec-mode.el (rec-cmd-kill-field): New function. + (rec-cmd-copy-field): Likewise. + (rec-cmd-kill-record): Likewise. + (rec-cmd-copy-record): Likewise. + (rec-mode-edit-map): Map the copy/kill commands for fields and + records. + (rec-mode-map): Likewise. + +2012-07-31 Jose E. Marchesi <jemarch@gnu.org> + + src,doc,torture: support for the %constraint special field. + * doc/recutils.texi (%size and %constraint): Document the + usage of the %constraint special field. + + * src/rec-rset.c (rec_rset_num_sex_constraints): New function. + (rec_rset_sex_constraint): Likewise. + + * src/rec-int.c (rec_int_check_record): Call to + rec_int_check_record_sex_constraints. + (rec_int_check_record_sex_constraints): New function. + + * torture/utils/recfix.sh (constraint-sex-valid): New input file. + (constraint-sex-invalid): Likewise. + (constraint-sex-invalid-empty): Likewise. + (constraint-sex-several-valid): Likewise. + (constraint-sex-several-invalid): Likewise. + (constraint-sex-with-violation): Likewise. + (recfix-constraint-sex-valid): New test. + (recfix-constraint-sex-invalid): Likewise. + (recfix-constraint-sex-invalid-empty): Likewise. + (recfix-constraint-sex-several-valid): Likewise. + (recfix-constraint-sex-several-invalid): Likewise. + (recfix-constraint-sex-with-violation): Likewise. + + * src/rec-int.c (rec_int_check_descriptor): Check for the + integrity of the %constraint fields. + + * src/rec-rset.c (rec_rset_new): Initialize the internal + constraints structures to empty. + (rec_rset_destroy): Destroy the internal constraints structures. + (rec_rset_dup): Dup constraints. + (rec_rset_set_descriptor): Update sex constraints. + (rec_rset_update_sex_constraints): New function. + + * src/rec.h (enum rec_std_field_e): New member + REC_FIELD_CONSTRAINT. + + * src/rec-field-name.c (fnames): New special field name + %constraint. + +2012-07-31 Jose E. Marchesi <jemarch@gnu.org> + + torture: test for the => operator in sexes. + * torture/utils/recsel.sh (implications): New input file. + (recsel-sex-implies-1): New test. + +2012-07-28 Jose E. Marchesi <jemarch@gnu.org> + + doc: documentation of the => operator. + * doc/recutils.texi (SEX Operators): Document the => operator. + +2012-07-27 Jose E. Marchesi <jemarch@gnu.org> + + src: implementation of the => sex operator. + * src/rec-sex.c (rec_sex_eval_node): Implementation of the + "implies" operator. + + * src/rec-sex-ast.h (enum rec_sex_ast_node_type_e): New value + REC_SEX_OP_IMPLIES. + + * src/rec-sex-tab.y: Rule for the implies operator. + + * src/rec-sex-lex.l ("=>"): New token for the "implies" operator. + +2012-07-23 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: new command rec-cmd-statistics. + * etc/rec-mode.el (rec-cmd-statistic): New function. + (rec-mode-map): Map rec-cmd-statistic with %. + +2012-07-23 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: rec-cmd-count now suggests a default selection + expression when invoked with a numeric prefix. + * etc/rec-mode.el (rec-cmd-count): Use a default expression using + the field under point when invoked with a prefix argument. + +2012-07-20 Jose E. Marchesi <jemarch@gnu.org> + + * .x-sc_prohibit_defined_have_decl_tests: New file. + +2012-07-20 Jose E. Marchesi <jemarch@gnu.org> + + * gnulib module flock imported. + +2012-07-17 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: support for undo in navigation mode. + * etc/rec-mode.el (rec-mode-map): Remap `undo' into rec-cmd-undo + when in navigation mode. + (rec-cmd-undo): New function. + +2012-07-17 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: support for multiple field names in %type entries. + * etc/rec-mode.el (rec-field-type): Support for multiple field + names in %type entries. + +2012-07-17 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: time-stamps are now triggered with `t' instead of `n'. + * etc/rec-mode.el (rec-cmd-edit-field): Change the key to + trigger a time-stamp from `n' to `t'. + +2012-07-17 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: support for generating time-stamps in date fields. + * etc/rec-mode.el (rec-cmd-edit-field): Support for getting a + timestamp when editing date fields. + (rec-time-stamp-format): New constant. + +2012-07-17 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: fix edition of the default record set. + * etc/rec-mode.el (rec-record-descriptor): Return `nil' for a + non-existant record descriptor, not "". + +2012-07-17 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: allow the user to cancel the edit date operation by + quitting the calendar window. + * etc/rec-mode.el (rec-cmd-edit-field): Remap "q" in the calendar + to remove the modified local map in the *Calendar* buffer if the + user quits the calendar. + +2012-07-17 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: rec-cmd-edit-field supports a numeric argument. + * etc/rec-mode.el (rec-cmd-edit-field): Use the more general input + method for reading field values regardless their types if a + numeric argument is passed to the function. + +2012-07-17 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: support for editing date fields using the calendar. + * etc/rec-mode.el (rec-cmd-edit-field): Support for editing date + fields using the calendar. + (rec-popup-calendar): New customized variable. + +2012-07-10 Jose E. Marchesi <jemarch@gnu.org> + + algol68: several new wrappers for librec functions. + * algol68/rec.a68 (MODE RSET): New mode. + (rec rset new): New wrapper. + (rec rset destroy): Likewise. + (rec rset dup): Likewise. + (MODE MSET): New mode. + (MODE MSETELEM): Likewise. + (mset any): New constant. + (rec mset new): New wrapper. + (rec mset destroy): Likewise. + (rec mset dup): Likewise. + (rec mset type p): Likewise. + (rec mset get at): Likewise. + (rec mset insert at): Likewise. + (rec mset insert after): Likewise. + (rec mset append): Likewise. + (rec mset add sorted): Likewise. + (rec mset remove at): Likewise. + (rec mset remove elem): Likewise. + (rec mset search): Likewise. + +2012-07-10 Jose E. Marchesi <jemarch@termi> + + Tasktool operations. + * TODO: Task 14 resolved to 'DONE'. + +2012-07-08 Jose E. Marchesi <jemarch@gnu.org> + + * etc/rec-mode.el (rec-cmd-select-fast): New function. + (rec-cmd-select-sex): Likewise. + (rec-mode-edit-map): Bindings for selection functions added. + (rec-mode-map): Likewise. + +2012-06-22 Jose E. Marchesi <jco@terma.com> + + manual: some work in the grouping section. + * doc/recutils.texi (recsel Grouping): Some work in the section. + +2012-06-11 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: new functions returning properties of the current record + set. + * etc/rec-mode.el (rec-keyword-mandatory): New constant. + (rec-keyword-key): Likewise. + (rec-mandatory-fields): New function. + (rec-key): Likewise. + +2012-06-10 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: bug affecting the hiding of continuation line markers + fixed. + * etc/rec-mode.el (rec-hide-continuation-line-markers): Use + rec-insert-field-value in order to determine the length. + +2012-06-08 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: presentation of continuation lines in navigation modes, + and other improvements. + * etc/rec-mode.el (rec-query): renamed from rec-select, and + completed. + (cl): Package required, for keyword arguments support. + (rec-show-record): Call rec-hide-continuation-line-markers. + (rec-hide-continuation-line-markers): New function. + (rec-continuation-line-markers-overlays): New variable. + (rec-continuation-line-markers-width): New variable. + (rec-remove-continuation-line-marker-overlays): New function. + (rec-mode-syntax-table): Put " and ' in the word-constituent + syntax class to avoid unwanted font-locking and pairing. + +2012-06-05 Jose E. Marchesi <jemarch@gnu.org> + + manual: some more dummy sections for the rec-mode manual. + * doc/rec-mode.texi (Summary): New section. + (Installation): Likewise. + (Feedback): Likewise. + +2012-06-05 Jose E. Marchesi <jemarch@gnu.org> + + manual: skeleton for the rec-mode manual. + * .gitignore: Ignore doc/version-rec-mode.texi + + * doc/Makefile.am (info_TEXINFOS): Added rec-mode.texi. + + * doc/rec-mode.texi: New file. + (Introduction): New chapter. + (GNU Free Documentation License): New chapter. + +2012-06-05 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: support for selection expressions in rec-count. + * etc/rec-mode.el (rec-count): Support for selection expressions + in counts. + (rec-cmd-count): Likewise. + +2012-06-05 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: folding of fields. + * etc/rec-mode.el (rec-show-record): Call to + rec-hide-record-fields. + (rec-hide-record-fields): New function. + (rec-toggle-field-visibility): Likewise. + (rec-cmd-toggle-field-visibility): Likewise. + (rec-mode-edit-map): Bind SPC with + rec-cmd-toggle-field-visibility. + (rec-mode-map): Likewise. + (rec-mode): Add an invisibility spec for fields. + (rec-show-fields-all): New function. + (rec-field-folded-p): Likewise. + (rec-fold-field): Likewise. + (rec-cmd-beginning-of-line): Removed. + (rec-max-lines-in-fields): Default to 15. + (rec-unfold-record-fields): New function. + (rec-unfold-all-fields): New function. + (rec-edit-type): Unfold all fields before switching to edit mode. + (rec-edit-buffer): Likewise. + (rec-edit-record): Likewise. + +2012-06-04 Jose E. Marchesi <jemarch@gnu.org> + + * etc/rec-mode.el (rec-cmd-edit-field): Support editing boolean + fields as special enum values. + +2012-06-04 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: complete support for editing fields storing enumerated + values. + * etc/rec-mode.el (rec-cmd-show-type): Use + display-message-or-buffer in order to avoid overflowing the echo + area. + (rec-cmd-edit-field): Complete support for editing fields + containing enum values. + +2012-06-04 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: avoid security problems in calls to message by using %s. + * etc/rec-mode.el (rec-cmd-show-type): Use "%s" in message to + avoid security problems. + (rec-cmd-goto-next-rec): Likewise. + (rec-cmd-goto-previous-rec): Likewise. + (rec-cmd-count): Likewise. + (rec-cmd-show-info): Likewise. + +2012-06-03 Jose E. Marchesi <jemarch@gnu.org> + + * etc/rec-mode.el (rec-parse-field-name-from-string): Deleted. + (rec-mode-map): Use "d" to show descriptors, not t. + (rec-mode-edit-map): Likewise with C-cd. + (rec-mode-edit-map): New entry for rec-cmd-show-type. + (rec-mode-map): Likewise. + (rec-type-descriptor): New function. + (rec-parse-type): Allow comments in parenthesis in enum + descriptions. + (rec-cmd-edit-field): Edit the field value in several ways, + depending on its type. + (rec-type-data): New function. + (rec-type-kind): Likewise. + +2012-06-03 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: several functions to support field types. + * etc/rec-mode.el (rec-types): New variable. + (rec-type-kind-p): New function. + (rec-parse-type): Likewise. + (rec-parse-type-int): Likewise. + (rec-check-type): Likewise. + +2012-06-01 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: misc small fixes. + * etc/rec-mode.el (rec-mode): docstring updated to reflect the + real URL. + (rec-keyword-rec): Use rec-keyword-prefix. + (rec-mode-edit-map): Remove obsolete or not-working entries. + (rec-mode-map): Likewise. + (rec-field-trim-value): Don't remove the initial newline when + trimming when there is only one. + (rec-update-buffer-descriptors-xxx): Removed. + (rec-map): Removed. + (rec-do): Removed. + (rec-sel): Removed. + (rec-field-eq): Removed. + (rec-field-count): Removed. + (rec-init-selections): Removed. + (rec-finish-editing): Don't call rec-init-selections. + (rec-finish-editing-field): Likewise. + (rec-search-first): Removed. + (rec-selection-list): Removed. + (rec-cmd-sel): Removed. + (rec-mode): Wide the buffer after killing local variables. + +2012-06-01 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: fixes in goto-type and show-type. + * etc/rec-mode.el (rec-buffer-types): Return the values of the + first %rec entry in each record, not a list. + (rec-show-type): Show the first data record of the selected type, + if it exists. + (rec-show-type): Get an optional argument show-descriptor. + (rec-cmd-show-descriptor): Call rec-show-type with show-descriptor + t. + +2012-06-01 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: field names are no longer lists of parts. + * etc/rec-mode.el (rec-parse-record): Docstring updated. + (rec-field-name-re): Updated. + (rec-insert-field-name): Updated to new field structure. + (rec-buffer-types): Call rec-record-assoc with a string field + name, not a list. + (rec-record-descriptor-p): Likewise, and use rec-keyword-rec. + (rec-goto-type): Likewise. + (rec-regular-p): Likewise. + (rec-record-type): Likewise. + (rec-search-first): Likewise. + (rec-init-selections): Likewise. + +2012-05-31 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: editing of individual fields now works. + * etc/rec-mode.el (rec-insert-field): Fixed to work with the new + field structured. + +2012-05-31 Jose E. Marchesi <jemarch@gnu.org> + + src: fix sorting code to properly handle interleaved comments. + * src/rec-rset.c (rec_rset_record_compare_fn): Return 1 if elem2 + is a comment. + + * torture/utils/recsel.sh (sort-with-comment): New input file. + (sort-with-comment): New test. + +2012-05-29 Jose E. Marchesi <jemarch@gnu.org> + + Syntax fixes. + * python/setup.py: Trailing blank removed. + + * doc/recutils.texi (recins Encryption): Fix usage of @pxref. + +2012-05-25 Michał Masłowski <mtjm@mtjm.eu> + + src,torture: support changing parser position. + * src/rec-parser.c (rec_parser_seek, rec_parser_tell): New + functions. + * src/rec.h: Prototypes for rec_parser_seek, rec_parser_tell. + + * torture/Makefile.am (REC_PARSER_TSUITE): rec-parser-seek-mem.c + added. + * torture/rec-parser/rec-parser-seek-mem.c: New file. + * torture/rec-parser/tsuite-rec-parser.c (tsuite_rec_parser): + Added test_rec_parser_seek_mem. + +2012-05-25 Michał Masłowski <mtjm@mtjm.eu> + + src,torture: support parsing non-null terminated buffers. + * src/rec-parser.c (struct rec_parser_s): New field in_size. + * src/rec-parser.c (rec_parser_new): Initialize in_size to an + invalid value. + * src/rec-parser.c (rec_parser_getc): Use in_size instead of null + check to find EOF in memory buffers. + * src/rec-parser.c (rec_parser_new_mem): New function. + * src/rec-parser.c (rec_parser_new_str): Use rec_parser_new_mem. + * src/rec.h: Prototype for rec_parser_new_mem. + + * torture/Makefile.am (REC_PARSER_TSUITE): rec-parser-new-mem.c + added. + * torture/rec-parser/rec-parser-new-mem.c: New file. + * torture/rec-parser/tsuite-rec-parser.c (tsuite_rec_parser): + Added test_rec_parser_new_mem. + +2012-05-25 Jose E. Marchesi <jemarch@gnu.org> + + build,src: support versions of mdbtools using MDB_SDATETIME and + MDB_DATETIME. + * utils/mdb2rec.c (process_table): Use MDB_DATETIME instead of + MDB_SDATETIME. + + * utils/Makefile.am (mdb2rec_CPPFLAGS): Set MDB_DATETIME to the + proper symbol. + + * configure.ac (MDB_DATETIME): Check whether mdblib is using + MDB_SDATETIME or MDB_DATETIME. + +2012-05-25 Jose E. Marchesi <jemarch@gnu.org> + + torture,src: tests for aggregates and multiple-field grouping, and + several fixes. + * src/rec-aggregate.c (REC_AGGREGATE_ACCUM_FUNC): Get an INIT_VAL + argument. + Use DBL_MAX and DBL_MIN. + (rec_aggregate_std_avg): avg must be a double for the average. + + * torture/utils/recsel.sh (sales): New input file. + (recsel-group-multiple-fields): New test. + (recsel-aggregate-field-name): Likewise. + (recsel-aggregate-case-insensitive): Likewise. + (recsel-aggregate-rewrite-rule): Likewise. + (recsel-aggregate-count-overall): Likewise. + (recsel-aggregate-count-grouped): Likewise. + (recsel-aggregate-sum-overall): Likewise. + (recsel-aggregate-sum-grouped): Likewise. + (recsel-aggregate-min-overall): Likewise. + (recsel-aggregate-min-grouped): Likewise. + (recsel-aggregate-max-overall): Likewise. + (recsel-aggregate-max-grouped): Likewise. + +2012-05-25 Jose E. Marchesi <jemarch@gnu.org> + + utils: fix the detection of invalid fexes in -G and -S. + * utils/rec2csv.c (rec2csv_parse_args): Use rec_fex_check to + validate the list of fields in the command line. + * utils/recsel.c (recsel_parse_args): Likewise. + +2012-05-25 Jose E. Marchesi <jemarch@gnu.org> + + src,doc: support for grouping by several fields. + * doc/recutils.texi (recsel Invocation): Document that -G accepts + a comma separated list of fields. + + * utils/recsel.c: recutl_group_by_fields is now a fex. + (recsel_parse_args): Adjust error messages to that fact and parse + the fex. + (recutl_print_help): Likewise. + (recsel_process_data): Use recsel_group_by_fields. + + * src/rec-db.c (rec_db_set): group-by is now a fex. + + * src/rec-rset.c (rec_rset_merge_records): Get a fex argument with + the list of fields used for grouping. + (rec_rset_group): Group by multiple fields. + +2012-05-24 Jose E. Marchesi <jemarch@gnu.org> + + src: new function rec_rset_compare_typed_records. + * src/rec-rset.c (rec_rset_compare_typed_records): New function. + (rec_rset_record_compare_fn): Use rec_rset_compare_typed_records. + +2012-05-16 Jose E. Marchesi <jemarch@gnu.org> + + doc,manual: document the sorting with several fields. + * utils/recsel.c (recutl_print_help): Document that -S now gets a + FIELDS argument. + * utils/rec2csv.c (recutl_print_help): Likewise. + * doc/recutils.texi (recsel Invocation): Likewise. + (rec2csv Invocation): Likewise. + (%sort): Document that several fields can be used as sorting + criteria. + +2012-05-16 Jose E. Marchesi <jemarch@gnu.org> + + torture: tests for sorting with multiple fields. + * torture/utils/recsel.sh (sort-multiple): New input file. + (recsel-sort-multiple): New test. + (recsel-sort-field-multiple): Likewise. + + * torture/utils/recfix.sh (unsorted-multiple): New input file. + (recfix-sort-multiple): New test. + +2012-05-16 Jose E. Marchesi <jemarch@gnu.org> + + src,utils: implementation for sorting with multiple fields. + * src/rec-fex.c (rec_fex_parse_str_simple): Initialize + function_name, function_data and rewrite_to to NULL. + + * utils/rec2csv.c: rec2csv_sort_by_fields is now a fex. + (rec2csv_process_data): Pass the fex to rec_rset_sort. + + * utils/recsel.c: recutl_sort_by_fields is now a fex. + (recsel_parse_args): Handle several field names in -S. + (recsel_process_data): Pass the fex to rec_db_query. + + * src/rec-db.c (rec_db_query): The sort_by parameter is now a fex. + + * src/rec-rset.c (rec_rset_record_compare_fn): Use + rec_type_values_cmp. + (rec_rset_record_compare_fn): Rewritten to work on multiple + fields. + + * src/rec-types.c (rec_type_values_cmp): New function. + (REC_TYPE_BOOL_TRUE_VALUES_RE): New constant. + (REC_TYPE_BOOL_FALSE_VALUES_RE): Likewise. + (REC_TYPE_BOOL_VALUE_RE): Use REC_TYPE_BOOL_TRUE_VALUES_RE and + REC_TYPE_BOOL_FALSE_VALUES_RE. + + * src/rec-int.c (rec_int_check_descriptor): The %sort special + field now acccepts a simple_fex as its value. + + * src/rec-rset.c (rec_rset_update_field_props): Use fexes as + order_by fields. + + * src/rec-rset.c (rec_rset_dup): Use rec_fex_dup to duplicate the + fex containing the sort_by fields. + (rec_rset_set_order_by_field): Get a fex. + (rec_rset_order_by_field): Return a fex. + (rec_rset_sort): Get a fex. + + * src/rec-fex.c (rec_fex_dup): New function. + + * src/rec-rset.c (rec_rset_s): order_by_fields is now a fex. + (REC_RSET_MAX_ORDER): Unused constant removed. + (rec_rset_new): order_by_field renamed to order_by_fields. + (rec_rset_destroy): Destroy rset->order_by_fields with + rec_fex_destroy. + +2012-05-08 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi (recsel Grouping): New section documenting the + -G operation. + +2012-05-05 Jose E. Marchesi <jemarch@gnu.org> + + src: new aggregate Avg. + * src/rec-aggregate.c (std_aggregates): New aggregate "avg". + (rec_aggregate_std_avg): New function. + (rec_aggregate_std_avg_record): Likewise. + +2012-05-05 Jose E. Marchesi <jemarch@gnu.org> + + src: improvements in the aggregates implementation to avoid code + duplication. + * src/rec-aggregate.c: New global variable std_aggregates + containing descriptors for the standard aggregates. + (rec_aggregate_reg_add_standard): Use std_aggregates. + (rec_aggregate_std_p): Likewise. + (REC_AGGREGATE_ACCUM_FUNC): New macro. + +2012-05-03 Jose E. Marchesi <jemarch@gnu.org> + + src: new aggregates min and max. + * src/rec-aggregate.c (rec_aggregate_std_min): New function. + (rec_aggregate_std_min_record): Likewise. + (rec_aggregate_std_max): Likewise. + (rec_aggregate_std_max_record): Likewise. + (rec_aggregate_reg_add_standard): Register aggregates 'Min' and + 'Max'. + (rec_aggregate_std_p): Likewise. + + gnulib module minmax imported. + +2012-05-03 Jose E. Marchesi <jemarch@gnu.org> + + src,utils: recsel now complains if a non-existing aggregate + function is called in a fex. + * utils/recsel.c (recsel_parse_args): Check for the validity of + the aggregate functions used in the field expressions. + + * src/rec-aggregate.c (rec_aggregate_std_p): New function. + +2012-05-03 Jose E. Marchesi <jemarch@gnu.org> + + gnulib module floor imported. + +2012-05-03 Jose E. Marchesi <jco@terma.com> + + src: aggregate function names are case-insensitive. + * src/rec-aggregate.c (rec_aggregate_reg_get): Be case-insensitive + when retrieving functions from a registry. + +2012-05-03 Jose E. Marchesi <jco@terma.com> + + src: implementation of the SUM aggregate. + * src/rec-aggregate.c (rec_aggregate_std_sum): New function. + (rec_aggregate_std_sum_record): Likewise. + +2012-05-03 Jose E. Marchesi <jco@terma.com> + + src: sort after grouping so -S works with -G. + * src/rec-db.c (rec_db_query): Sort after grouping, so -S works + with -G. + +2012-05-03 Jose E. Marchesi <jco@terma.com> + + src: new semantics and interfaces for aggregates. + * src/rec-db.c (rec_db_process_fex): Use _ to separate the + function name and the field name when generating names for + aggregated fields. + + * src/rec-fex.c (rec_fex_all_calls_p): New function. + + * src/rec-aggregate.c (rec_aggregate_std_count): Rewritten with + new semantics. + +2012-05-03 Jose E. Marchesi <jco@terma.com> + + src: don't allow subscripts in the fields passed to function calls + in fexes and aggregates. + * src/rec.h: rec_aggregate_t modified to not get min and max + arguments. + (REC_FEX_CALL): Don't allow subscripts in the field names used in + the function calls. + + * src/rec-aggregate.c (rec_aggregate_std_count): Don't get 'min' + and 'max' arguments. + +2012-05-03 Jose E. Marchesi <jco@terma.com> + + src: field functions renamed to aggregates. + * src/rec-aggregate.c (rec_aggregate_std_count): Return a char* + instead of a record. + + * src/rec-db.c (struct rec_db_s): Field functions_reg renamed to + aggregates. + + * src/Makefile.am (librec_la_SOURCES): rec-func.c is now called + rec-aggregate.c. + + * src/rec-aggregate.c: Renamed from src/rec-func.c, and all + rec_func_* symbols renamed to rec_aggregate_*. + + * src/rec.h: rec_func_t modified to return a string instead of a + record and renamed to rec_aggregate_t. + + * src/rec-db.c (rec_db_query): Perform the group-by operation + before the selection. + +2012-04-27 Jose E. Marchesi <jemarch@gnu.org> + + src,utils: implementation of field functions, and Count. + * src/rec-record.c (rec_record_contains_field): New function. + + * src/rec-rset.c (rec_rset_merge_records): The merge operation + must not create duplicated fields on the resulting record. + + * src/rec-db.c (rec_db_new): Add standard field functions to the + database functions registry. + + * src/rec-func.c (rec_func_reg_add_standard): New function. + (rec_func_std_count): New function. + + * src/Makefile.am (librec_la_SOURCES): Added rec-func.c + + * src/rec-db.c (rec_db_s): New field 'functions_reg'. + (rec_db_new): Initialize the functions register of the database. + (rec_db_destroy): Dispose the memory used by the functions + register when destroying the databse. + (rec_db_functions): New function. + + * utils/recutl.c (recutl_build_db): Return NULL if there is not + enough memory to create the database. + + * src/rec-func.c (rec_func_reg_s): New structure. + (rec_type_reg_new): New function. + (rec_func_reg_destroy): Likewise. + (rec_func_reg_add): Likewise. + (rec_func_reg_et): Likewise. + + * src/rec-fex.c (rec_fex_elem_function_data): New function. + (rec_fex_elem_s): New field function_data. + (rec_fex_parse_elem): Initialize function_data to NULL. + + * src/rec.h: Data types and functions declarations for the field + functions and the function registries. + + * src/rec-func.c: New file. + + * src/rec-record.c (rec_record_append): New function. + + * src/rec-db.c (rec_db_process_fex): Fetch and invoke the + corresponding field functions if the fex contains function calls. + + * src/rec-fex.c (rec_fex_elem_s): New member function_name. + (rec_fex_parse_elem): Parse function calls. + (rec_fex_elem_function_name): New function. + +2012-04-22 Jose E. Marchesi <jemarch@gnu.org> + + * src/rec.h (REC_FEX_FNAME): New constant. + (REC_FEX_CALL): Likewise. + (REC_FNAME_FEX_RE): Modified to allow call entries. + +2012-04-22 Jose E. Marchesi <jemarch@gnu.org> + + syntax-check fixes. + * python/recmodule.c: Include config.h + +2012-04-22 Jose E. Marchesi <jemarch@gnu.org> + + src: support for >= and <= in selection expressions. + * torture/utils/recsel.sh (rec-sex-integer-lessequalthan): New + test. + (rec-sex-integer-greaterequalthan): Likewise. + + * src/rec-sex.c (rec_sex_eval_node): Semantics of REC_SEX_OP_GTE + and REC_SEX_OP_LTE implemented. + + * src/rec-sex-ast.h (rec_sex_ast_node_type_e): New entries + REC_SEX_OP_LTE and REC_SEX_OP_GTE. + + * src/rec-sex-tab.y: New tokens REC_SEX_TOK_LTE and + REC_SEX_TOK_GTE. + (exp): Rules for the >= and <= infix operators. + + * src/rec-sex-lex.l ("<="): New rule. + (">="): Likewise. + +2012-04-18 Jose E. Marchesi <jemarch@gnu.org> + + doc: new CSS file adapted from lilypond. + * doc/css/recutils-manuals.css: New file, adapted from + lilypond-manuals.css. + +2012-04-17 Jose E. Marchesi <jemarch@gnu.org> + + manual: missing documentation added for some command line options, + and inconsistencies removed. + * utils/recfix.c (recutl_print_help): Don't document -t|--type, + because it is not yet implemented. + + * doc/recutils.texi (recinf Invocation): Document that -S is the + short form for --print-sexps. + (recsel Invocation): Document -i|--case-insensitive. + (recdel Invocation): Likewise. + (recins Invocation): Document the --force command line option. + (recfix Invocation): Likewise. + (recdel Invocation): -f is not an alias for --force. + +2012-04-17 Jose E. Marchesi <jemarch@gnu.org> + + manual: documentation for field expressions fixed. + * doc/recutils.texi (Field Expressions): Documentation fixed in + order to reflect the fact that it is possible to repeat the same + field in the same field expression. + +2012-04-17 Jose E. Marchesi <jemarch@gnu.org> + + src: make the string comparison operators case-insensitive in + selection expressions when requested. + * torture/utils/recsel.sh (rec-sex-string-equal): New test. + (rec-sex-string-non-equal): Likewise. + (rec-sex-string-equal-insensitive): Likewise. + (rec-sex-string-non-equal-insensitive): Likewise. + + * src/rec-sex.c (rec_sex_eval_node): Make the = and != operators + case insensitive with strings when applicable. + +2012-04-17 Jose E. Marchesi <jemarch@gnu.org> + + utils,doc: fix the --number command line option. + * torture/utils/recsel.sh (recsel-index-long): New test. + + * utils/recutl.h (RECORD_SELECTION_LONG_ARGS): The long version of + -n is --number, not --num. + + * doc/recutils.texi (recsel Invocation): Document --number as the + long version of -n. + (recins Invocation): Likewise. + (recdel Invocation): Likewise. + (recset Invocation): Likewise. + +2012-04-16 Michał Masłowski <mtjm@mtjm.eu> + + src,utils: fix several memory leaks. + * src/rec-field.c (rec_field_destroy): Free the value, like the + other structure members. + + * src/rec-mset.c (rec_mset_destroy): Free type names and the mset + when destroying it. + + * src/rec-parser.c (rec_parse_field): Free field name and value + after setting them, since only copies are used later. + + * utils/recutl.c (recutl_parse_db_from_file): Destroy the parser + after using it. + +2012-04-17 Jose E. Marchesi <jco@terma.com> + + src: weird duplication of the file contens in rec-crypt-dummy.c + fixed. + * src/rec-crypt-dummy.c: Weird duplication of file fixed. WTF... + +2012-04-15 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi (Common Options): Typo fixed. + +2012-04-09 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: don't use a fixed list of keywords when font-locking + special fields and other minor fixes. + * etc/rec-mode.el (rec-mode): Don't go into navigation mode if the + file is empty. + (rec-keyword-prefix): New constant. + Copyright years list updated. + (rec-font-lock-keywords): Recognize as special fields any field + whose name starts with %. + +2012-04-09 Daiki Ueno <ueno@unixuser.org> + + rec-mode: fix error when rec-finish-editing on newly created file. + * etc/rec-mode.el (rec-update-buffer-descriptors): Don't assume + that the current buffer is already saved on the disk. + +2012-04-04 Daiki Ueno <ueno@unixuser.org> + + src: use a pinch of salt when encrypting confidential fields. + * src/rec-crypt.c (rec_encrypt): Insert a random salt to improve + security. + (rec_decrypt): Extract the salt of the encrypted data. + +2012-04-03 Daiki Ueno <ueno@unixuser.org> + + src: several leaks fixed in rec-crypt.c. + * src/rec-crypt.c (rec_encrypt): Avoid leaks by properly closing + the gcrypt handlers in case of errors. + +2012-03-27 Michał Masłowski <mtjm@mtjm.eu> + + src: always provide encryption routines and their prototypes. + * src/Makefile.am [!CRYPT]: Build rec-crypt-dummy.c instead of + rec-crypt.c if encryption is disabled. + * src/rec-crypt-dummy.c: New file. + * src/rec.h: Unconditionalize encryption routine declarations. + +2012-03-13 Jose E. Marchesi <jemarch@gnu.org> + + * src/rec.h (GNU_REC_H): Sentinel of the header file renamed from + REC_H in order to avoid potential conflicts. + +2012-03-07 Jose E. Marchesi <jemarch@gnu.org> + + torture: some system tests for the recsel join functionality. + * torture/utils/recsel.sh (recsel-join-default-rset): New test. + (recsel-join-no-foreign): Likewise. + +2012-03-04 Giuseppe Scrivano <gscrivano@gnu.org> + + src,lib: use the `read-file' module from gnulib. + * lib/read-file.h: Imported from gnulib. + * lib/read-file.c: Likewise. + * utils/recutl.c (recutl_read_file): Call `fread_file' instead + of reimplementing it. + +2012-03-02 Giuseppe Scrivano <giuseppe@southpole.se> + + src: make some variables static. + * utils/recutl.c (recutl_sort_p): Make it static. + (recutl_order_rset): Likewise. + (recutl_order_by_field): Likewise. + (recutl_interactive_p): Likewise. + (recutl_indexes): Likewise. + (recutl_indexes_size): Likewise. + +2012-03-02 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi (recsel Invocation): Document -j|--join. + +2012-03-02 Jose E. Marchesi <jco@terma.com> + + src: partial implementation of rset mixing in joins. + * src/rec-db.c (rec_db_join): Add a record descriptor to the + joined record set. + +2012-03-01 Jose E. Marchesi <jemarch@gnu.org> + + src: make the # operator to work with field subnames. + * src/rec-fex.c (rec_fex_parse_elem): Use rec_concat_strings. + + * src/rec-utils.c (rec_concat_strings): New function. + + * src/rec-sex.c (rec_sex_eval_node): Use the subname of the name + node, if present, in the evaluation of OP_SHA operations. + + * torture/utils/recsel.sh (package-maintainers): New input file. + (recsel-sex-sharp-subname): New test. + +2012-03-01 Jose E. Marchesi <jemarch@gnu.org> + + src: support for field subnames with dot notation in fexes. + * src/rec-fex.c (rec_fex_parse_elem): Support subnames in fexes. + + * src/rec.h (REC_FNAME_FEX_RE): New constant. + +2012-03-01 Jose E. Marchesi <jemarch@gnu.org> + + src,torture: fix a bug that caused to have empty records in query + results. + * torture/utils/recsel.sh (recsel-nonexistent-print): New test. + + * src/rec-db.c (rec_db_query): Do not add empty records to the + result record set. + +2012-03-01 Jose E. Marchesi <jemarch@gnu.org> + + src,utils: inner join implementation. + * src/rec-db.c (rec_db_merge_records): New function. + + * utils/recsel.c (recsel_join): New global. + (recutl_print_help): Include help for -j. + (recsel_parse_args): Process the new command line option + -j|--join. + (recsel_process_data): Invoke rec_db_query with the proper join + option. + + * src/rec-db.c (rec_db_query): Get a 'join' argument. + +2012-03-01 Jose E. Marchesi <jemarch@gnu.org> + + src,torture,doc: implementation of the 'rec' field type. + * doc/recutils.texi (Other types): Documentation for the 'rec' + field type. + + * torture/utils/recfix.sh (type-rec-norset): New input file. + (type-rec-nokey): Likewise. + (type-rec-key-notype): Likewise. + (type-rec-key-type): Likewise. + (type-rec-key-type-invalid): Likewise. + (recfix-type-rec-norset): New test. + (recfix-type-rec-nokey): Likewise. + (recfix-type-rec-key-notype): Likewise. + (recfix-type-rec-type): Likewise. + (recfix-type-rec-key-type-invalid): Likewise. + + * src/rec-int.c (rec_int_check_field_type): Check using the type + of the key of the referred record set (if any) if the field is of + type 'rec'. + + * src/rec-rset.c (rec_rset_fprops_s): New property key_p. + (rec_rset_update_field_props): Reset key_p. + (rec_rset_get_props): Initialize key_p. + (rec_rset_update_field_props): Update the key_p property. + (rec_rset_key): New function. + + * src/rec-types.c (rec_type_rec): New function. + + * torture/utils/recfix.sh (type-rec-valid): New input file. + (type-rec-invalid-empty): Likewise. + (type-rec-invalid-malformed): Likewise. + (recfix-type-rec-valid): New test. + (recfix-type-rec-invalid-empty): Likewise. + (recfix-type-rec-invalid-malformed): Likewise. + + * src/rec-types.c (REC_TYPE_REC_DESCR_RE): New constant. + (REC_TYPE_DESCR_RE): Updated. + (rec_type_parse_rec): New function. + (rec_type_check_rec): Likewise. + + * src/rec-int.c (rec_int_rec_type_p): Use REC_RECORD_TYPE_RE. + + * src/rec.h (REC_RECORD_TYPE_RE): New constant. + + * src/rec-types.c (REC_TYPE_REC_NAME): New constant. + (REC_TYPE_CLASS_RE): Updated. + +2012-02-29 Jose E. Marchesi <jemarch@gnu.org> + + src: support for dot notation in selection expressions. + * src/rec-sex-ast.c (rec_sex_ast_node_s): Name structs now contain + a name and a subname. + (rec_sex_ast_node_set_name): Get a 'subname' argument. + (rec_sex_ast_node_name): Return the name. + (rec_sex_ast_node_destroy): Destroy both name and subname in a + name node. + (rec_sex_ast_node_subname): New function. + + * src/rec-sex-lex.l: Rule for field names modified to accept two + field names separated by a dot character. + (rec_sex_lex_extract_subname): New function. + +2012-02-29 Jose E. Marchesi <jemarch@gnu.org> + + src: remove obsolete and unused functionality from the rec writer. + * src/rec-writer.c (rec_write_record_with_rset): Function removed. + (rec_write_field_with_rset): Likewise. + (rec_write_field): Don't get a 'name' argument. + (rec_writer_s): Field 'password' removed. + (rec_writer_new_common): Don't initialize password. + (rec_write_field): Encryption support removed. + (rec_writer_set_password): Function removed. + + * torture/Makefile.am (REC_WRITER_TSUITE): Tests for + rec_write_record_with_fex removed. + + * src/rec-writer.c (rec_write_record_with_fex): Function removed. + * utils/recutl.c (recutl_eval_field_expression): Likewise. + +2012-02-29 Jose E. Marchesi <jemarch@gnu.org> + + torture: failing unit test adapted to new API. + * torture/rec-writer/rec-write-rset.c: Add the 'mode' argument + when calling rec_write_rset. + +2012-02-29 Jose E. Marchesi <jemarch@gnu.org> + + src,utils: set high-level logic moved to librec and recset + adapted. + * utils/recset.c (recset_process_add): Function removed. + (recset_process_set): Likewise. + (recset_process_ren): Likewise. + (recset_process_del): Likewise. + (recset_process_actions): Use the new function in the library. + + * src/rec-db.c (rec_db_set): New function. + (rec_db_set_act_rename): Likewise. + (rec_db_set_act_set): Likewise. + (rec_db_set_act_add): Likewise. + (rec_db_set_act_delete): Likewise. + +2012-02-29 Jose E. Marchesi <jemarch@gnu.org> + + src,utils: query, insert and delete high-level logic moved to + librec and utilities adapted. + * torture/utils/recdel.sh (recdel-index-list): New test. + (recdel-case-insensitive): Likewise. + (recdel-case-sensitive): Likewise. + + * src/rec-db.c (rec_db_delete): New function. + + * torture/utils/recins.sh (multiple-records-case): New input file. + (recins-case-insensitive): New test. + (recins-case-sensitive): New test. + + * src/rec-rset.c (rec_rset_set_type): Get a const char* for the + 'type' argument. + + * src/rec-db.c (rec_db_insert): New function. + + * torture/utils/recsel.sh (recsel_descriptor): New test. + + * src/rec-writer.c (rec_writer_s): New field "collapse_p". + (rec_writer_new_common): Writers don't collapse output by default. + (rec_writer_set_collapse): New function. + + * utils/recutl.c (recutl_indexes): Global is now a pointer to + size_t. + (recutl_init): Initialize recutl_indexes. + (recutl_index_p): Removed. + (recutl_index_add_random): Likewise. + (recutl_reset_indexes): Adapted to *size_t. + (recutl_num_indexes): Likewise. + (recutl_index): New function. + + * src/rec-writer.c (rec_write_rset): Get a 'mode' argument. + + * src/rec-db.c (rec_db_query): Uniq the records if requested by + the user. + + * utils/recsel.c (recsel_parse_args): Set recsel_write_mode when + -P and -R are found. + (recsel_print_values): Global removed. + (recsel_print_row): Global removed. + +2012-02-28 Jose E. Marchesi <jemarch@gnu.org> + + src,utils,torture: new writer modes values and values_row, and + some improvements in the writer algorithms. + * utils/recutl.c (recutl_write_db_to_file): Write the db into the + file only if there are record sets to write. Otherwise create an + empty file. + + * src/rec-writer.c (rec_write_string): New function. + + * torture/rec-writer/rec-write-comment.c + (rec_write_comment_nominal): Added test with three lines. + + * torture/rec-writer/rec-write-record.c (rec_write_record_values): + New unit test. + (rec_write_record_values_row): Likewise. + + * torture/rec-writer/rec-write-field.c (rec_write_field_values): + New unit test. + (rec_write_field_values_row): Likewise. + + * src/rec-writer.c (rec_write_field_with_rset): Implement + REC_WRITER_VALUES and REC_WRITER_VALUES_ROW semantics. + + * src/rec.h (rec_writer_mode_e): New write modes REC_WRITER_VALUES + and REC_WRITER_VALUES_ROW. + +2012-02-28 Jose E. Marchesi <jemarch@gnu.org> + + src: random indexes support added to rec_db_query. + * src/rec-db.c (rec_db_query): Get an INDEX paramerter pointing to + a list of index intervals. + (rec_db_record_selected_p): Likewise. + (rec_db_record_selected_p): Handle indexes. + (rec_db_add_random_indexes): New function. + (rec_db_indexes_p): New function. + +2012-02-28 Jose E. Marchesi <jemarch@gnu.org> + + src: first version of rec_db_query. + * src/rec-db.c (rec_db_query): New function. + (rec_db_process_fex): New function. + (rec_db_record_selected_p): New function. + + * src/rec.h: Prototype for rec_db_query. + +2012-02-27 Jose E. Marchesi <jemarch@gnu.org> + + src: small changes in rec-db. + * src/rec-db.c (rec_db_s): Field 'size' is now of type size_t. + (rec_db_destroy): Be a no-operation if NULL is passed. + (rec_db_size): Return a size_t value. + (rec_db_get_rset): The 'position' argument is now a size_t. + (rec_db_insert_rset): Likewise. + (rec_db_remove_rset): Likewise. + (rec_db_type_p): Get a const char* argument. + +2012-02-27 Jose E. Marchesi <jemarch@gnu.org> + + torture: fix offline make perf. + * torture/utils/Makefile.am (perf): Invoke $(srcdir)/p-recsel.sh + and set srcdir. + +2012-02-26 Jose E. Marchesi <jemarch@gnu.org> + + python: start of the python bindings for librec. + * python/README: New file. + * python/setup.py: Likewise. + * python/recmodule.c: Likewise. + (prec_version): New function. + (initrec): Likewise. + (prec_functions): New global. + +2012-02-26 Jose E. Marchesi <jemarch@gnu.org> + + src,doc,torture: support for UUID field type and UUID auto fields. + * torture/utils/config.sh.in (UUID_SUPPORT): Set to @have_uuid@. + + * torture/utils/recfix.sh (uuid-fields-ok): New input file. + (uuid-fields-invalid): Likewise. + (recfix-uuid-ok): New test. + (recfix-uuid-invalid): Likewise. + + * doc/recutils.texi (Other types): UUID type documented. + (%auto): Likewise. + + * src/rec-int.c (rec_int_check_descriptor): Allow auto-incremented + fields of type uuid if suuport for uuids is compiled in. + + * src/rec-rset.c (rec_rset_add_auto_fields): Handle REC_TYPE_UUID. + (rec_rset_add_auto_field_uuid): New function. + + * src/rec.h (rec_type_kind_e): Added entry REC_TYPE_UUID. + + * src/rec-types.c (REC_TYPE_UUID_NAME): New constant. + (REC_TYPE_CLASS_RE): Add REC_TYPE_UUID_NAME. + (rec_type_check_uuid): New function. + (rec_type_new): Handle REC_TYPE_UUID. + (rec_type_kind_str): Likewise. + (rec_type_check): Likewise. + (rec_type_parse_type_kind): Likewise. + + * src/Makefile.am (librec_la_LIBADD): link with UUIDLIBS when + appropriate. + + * configure.ac: Check for libuuid and subst UUIDLIBS. + Define the automake conditional UUID_TYPE. + + * README-dev: List the dependency on libuuid. + +2012-02-26 Jose E. Marchesi <jemarch@gnu.org> + + src,doc,torture: support for rewrite rules in field expressions. + * torture/utils/recsel.sh (recsel-fex-rewrite-all): New test. + (recsel-fex-rewrite-subscript-single): Likewise. + (recsel-fex-rewrite-subscript-multi): Likewise. + (recsel-fex-rewrite-several): Likewise. + + * torture/rec-fex/rec-fex-elem-rewrite-to.c + (rec_fex_elem_field_rewrite_to_default): New unit test. + (rec_fex_elem_field_rewrite_to_nominal): Likewise. + + * torture/Makefile.am (REC_FEX_TSUITE): Added + rec-fex/rec-fex-elem-field-rewrite-to.c. + + * torture/rec-fex/tsuite-rec-fex.c (tsuite_rec_fex): Added + test_rec_fex_elem_rewrite_to. + + * torture/rec-fex/rec-fex-elem-rewrite-to.c: New file. + (test_rec_fex_elem_rewrite_to): New function. + + * doc/recutils.texi (Field Expressions): Documentation for rewrite + rules added. + + * torture/rec-writer/rec-write-field.c (rec_write_field_rewrite): + New unit test. + (rec_write_field_sexp_rewrite): Likewise. + + * src/rec-writer.c (rec_write_record_with_fex): Invoke + rec_write_field passing the rewrite_to property of the fex elem. + (rec_write_field): Get an extra argument 'name'. + (rec_write_field_with_rset): Likewise. + (rec_write_record_with_rset): Adapt to new + rec_write_field_with_rset. + (rec_write_field_str): Likewise. + + * src/rec-fex.c (rec_fex_parse_elem): The 'str' field must contain + a copy of the textual entry (including rewrite rules and + subscripts) and not just the field name. + (rec_fex_elem_rewrite_to): New function. + + * src/rec.h (REC_FNAME_SUB_RE): Allow the inclusion of a rewrite + rule at the end of the entry. + + * src/rec-fex.c (rec_fex_elem_s): New field 'rewrite_to'. + (rec_fex_parse_elem): Parse the rewrite rule if it is present in + the fex entry. + +2012-02-26 Jose E. Marchesi <jemarch@gnu.org> + + * TESTS: Regenerated. + +2012-02-26 Jose E. Marchesi <jemarch@gnu.org> + + torture: performance tests for recsel using a sex with regexp + matching. + * torture/utils/p-recsel.sh (recsel-200-records-sex-regexp): New + test. + (recsel-500-records-sex-regexp): Likewise. + (recsel-1000-records-sex-regexp): Likewise. + (recsel-10000-records-sex-regexp): Likewise. + (recsel-20000-records-sex-regexp): Likewise. + +2012-02-25 Jose E. Marchesi <jemarch@gnu.org> + + torture: support for performance test, and some performance recsel + tests. + * torture/utils/testutils.sh: Get a second parameter 'perf'. + (test_tool): Calculate and print timing statistics if $perf is not + empty. + + * torture/utils/p-recsel.sh: New file. + + * torture/utils/Makefile.am (perf): New rule. + * Makefile.am (perf): Likewise. + +2012-02-25 Jose E. Marchesi <jemarch@gnu.org> + + utils: fix short option for --random in help strings. + * utils/recutl.c (recutl_print_help_record_selection): The short + command line option for --random is -m not -R. + +2012-02-25 Jose E. Marchesi <jemarch@gnu.org> + + src,utils,torture: support for compound field names removed, and + code cleanup. + * torture/utils/recset.sh (recset-rename-all-key): Don't use a + compound field name. + + * doc/recutils.texi (Compound Field Names): Section removed, + because it is now obsolete. + (mdb2rec Examples): Removed examples involving compound field + names. + + * src/rec.h (REC_FNAME_RE): Remove the trailing colon. + + * torture/utils/recsel.sh (compound-names): Input file removed, + since there are not compound names anymore. + (recsel-sex-field-names): Test removed. + (recsel-sex-field-names-2): Likewise. + + * src/rec-sex-lex.l (FIELD_NAME): Set to contain just one name + part. + + * src/rec-fex.c (rec_fex_parse_str_simple): Remove the trailing : + from the field names if present. + (rec_fex_parse_elem): Likewise. + + * torture/rec-fex/rec-fex-elem-field-name-str.c: Removed. + + * torture/rec-field-name/rec-field-name-p.c: Renamed. + + * torture/rec-field-name/rec-field-name-normalise.c: Renamed from + rec-field-name-part-normalise.c. + + * torture/rec-field-name/rec-field-name-destroy.c: File removed. + * torture/rec-field-name/rec-field-name-str-p.c: Likewise. + * torture/rec-field-name/rec-field-name-size.c: Likewise. + * torture/rec-field-name/rec-field-name-set.c: Likewise. + * torture/rec-field-name/rec-field-name-ref-p.c: Likewise. + * torture/rec-field-name/rec-field-name-new.c: Likewise. + * torture/rec-field-name/rec-field-name-get.c: Likewise. + * torture/rec-field-name/rec-field-name-eql-p.c: Likewise. + * torture/rec-field-name/rec-field-name-dup.c: Likewise. + + * torture/rec-field-name/tsuite-rec-field-name.c: Removed test + cases for the no longer existing rec_field_name_* functions. + + * utils/recins.c (recins_parse_args): Adapted to the new field + names. + * utils/mdb2rec.c (get_field_name): Likewise. + (process_table): Likewise. + * utils/rec2csv.c (rec2csv_parse_args): Likewise. + (rec2csv_generate_csv): Likewise. + * utils/csv2rec.c (field_cb): Likewise. + * utils/recset.c (recset_process_add): Likewise. + (recset_process_set): Likewise. + (recset_process_ren): Likewise. + (recset_process_del): Likewise. + + * utils/recutl.c (recutl_order_by_field): Field name is now a NULL + terminated string. + * utils/recsel.c (recutl_sort_by_field): Likewise. + (recsel_group_by_field): Likewise. + + * src/rec-types.c (rec_type_check_int): Get a const char* + argument. + (rec_type_check_bool): Likewise. + (rec_type_check_range): Likewise. + (rec_type_check_real): Likewise. + (rec_type_check_size): Likewise. + (rec_type_check_line): Likewise. + (rec_type_check_regexp): Likewise. + (rec_type_check_date): Likewise. + (rec_type_check_email): Likewise. + (rec_type_check_enum): Likewise. + (rec_type_check_field): Likewise. + + * src/rec-crypt.c (rec_encrypt): Get const char* arguments. + (rec_decrypt): Likewise. + (rec_decrypt_field): Likewise. + (rec_decrypt_record): Likewise. + (rec_encrypt_field): Likewise. + + * src/rec-sex-parser.c (rec_sex_parser_set_in): Get a const char * + argument. + (rec_sex_parser_run): Likewise. + + * src/rec-sex.c (rec_sex_destroy): Be a no-operation if NULL is + passed. + (rec_sex_compile): Get a const char * argument. + (rec_sex_eval_node): Adapted to new field names. + + * src/rec-int.c (rec_int_rec_type_p): Get a const char * argument. + (rec_int_rec_type_p): Use REC_FNAME_RE instead of + REC_FNAME_PART_RE. + + * src/rec-types.c (rec_type_check): Get a const char * argument. + + * src/rec-int.c (rec_int_check_field_type): Simplified, since + there are no compound field names anymore. + (rec_int_check_record_mandatory): Adapted to the new field names. + (rec_int_check_record_unique): Likewise. + (rec_int_check_record_prohibit): Likewise. + (rec_int_check_record_key): Likewise. + (rec_int_check_descriptor): Likewise. + + * src/rec-writer.c (rec_writer_destroy): Be a no-operation if NULL + is passed. + (rec_write_field_with_rset): Adapted to the new field names. + (rec_write_field_name): Likewise. + (rec_write_record_with_fex): Likewise. + + * src/rec-parser.c (rec_parser_new): Get a const char* argument. + (rec_parser_new_str): Likewise. + (rec_parser_destroy): Be a no-operation if a NULL pointer is + passed. + (rec_parse_field_name): Store the field name in a char string. + (rec_parse_field_name_part): Removed. + (rec_parse_field): Adapted to the new field names. + (rec_parse_field_name_str): Removed. + (rec_parse_field_name_str): Return a char*. + (rec_parse_record_str): Get a const char* argument. + + * src/rec-fex.c (struct rec_fex_elem_s): Use a const char* for the + referred field(s) name. + (rec_fex_init): New function. + (rec_fex_destroy): Be a no-operation if a NULL pointed is passed. + (rec_fex_new): Use const chars* for the field names. + (rec_fex_check): Get const char* parameters for the strings. + (rec_fex_size): Return a size_t. + (rec_fex_elem_field_name): Return a const char *. + (rec_fex_elem_set_field_name): Get a const char * argument and + return a boolean denoting out-of-memory. + (rec_fex_elem_field_name_str): Removed. + (rec_fex_member_p): Get a const char * argument for the field + names. + (rec_fex_append): Likewise. + (rec_fex_parse_str_simple): Get const char* arguments for the + strings. + (rec_fex_parse_str_subscripts): Likewise. + (rec_fex_parse_elem): Likewise. + + * src/rec-rset.c (struct rec_rset_fprops_s): fname is now a const + char *. + (struct rec_rset_s): order_by_field is now a const char*. + (rec_rset_order_by_field): Return a const char *. + (rec_rset_destroy): Adapted to the new field names. + (rec_rset_dup): Likewise. + (rec_rset_set_type): Likewise. + (rec_rset_rename_field): Likewise. + (rec_rset_field_confidential_p): Likewise. + (rec_rset_get_field_type): Likewise. + (rec_rset_set_order_by_field): Likewise. + (rec_rset_sort): Likewise. + (rec_rset_group): Likewise. + (rec_rset_record_compare_fn): Likewise. + (rec_rset_update_field_props): Likewise. + (rec_rset_get_props): Likewise. + (rec_rset_add_auto_field_int): Likewise. + (rec_rset_add_auto_field_date): Likewise. + + * src/rec-field-name.c (rec_field_name_equal_p): New function. + + * src/rec-record.c (rec_record_field_p): Get a const char* for the + field name. + (rec_record_get_num_fields_by_name): Likewise. + (rec_record_get_field_by_name): Likewise. + (rec_record_remove_field_by_name): Likewise. + (rec_record_uniq): Adapted to the new field names. + + * src/rec-field.c (rec_field_name_str): Removed. + (rec_field_equal_p): Use strcmp to compare field names. + (rec_field_destroy): Be a no-operation if passed a NULL pointer. + (rec_field_init): New function. + (rec_field_new): Adapted to the new field names, and handle out of + memory eventualities. + (rec_field_dup): Likewise. + (rec_field_to_comment): Handle out-of-memory conditions properly. + + * src/rec-field-name.c (rec_field_name_normalise): Renamed from + rec_field_name_part_normalise. + (rec_field_name_p): Renamed from rec_field_name_str_p. + (rec_std_field_name_new): Removed. + (rec_field_name_destroy): Likewise. + (rec_field_name_size): Likewise. + (rec_field_name_get): Likewise. + (rec_field_name_set): Likewise. + (rec_field_name_dup): Likewise. + (rec_field_name_eql_p): Likewise. + (rec_field_name_equal_p): Likewise. + (rec_field_name_ref_p): Likewise. + (rec_field_name_str_p): Likewise. + (rec_field_name_part_str_p): Remove + (rec_std_field_name): Return a const char*. + + * src/rec.h (REC_FNAME_PART_RE): Removed. + (rec_field_name_*): Function prototypes removed. + + * src/rec-field.c (rec_field_s): Change the 'name' field to be a + NULL terminated string. + (rec_field_name): Return a const char*. + (rec_field_set_name): Get the name as a const char * and return a + boolean indicating out-of-memory. + (rec_field_value): Return a const char*. + (rec_field_source): Return a const char*. + (rec_field_set_source): Get a const char * and return a boolean + indicating out-of-memory. + (rec_field_location_str): Return a const char*. + (rec_field_char_location_str): Return a const char*. + +2012-02-24 Jose E. Marchesi <jemarch@gnu.org> + + src: documentation improvements in the public header. + * src/rec.h: Improve the documentation of the functions related + with the rec_field ADT. + +2012-02-22 Jose E. Marchesi <jemarch@gnu.org> + + src,utils: handle out-of-memory conditions. + * src/rec-rset.c (rec_rset_add_auto_field_date): Return a boolean + indicating whether there was enough memory to complete the + operation. + (rec_rset_add_auto_field_int): Likewise. + (rec_rset_add_auto_fields): Return a copy of the record set or + NULL in an out-of-memory condition. + (rec_rset_sort): Return a copy of the record set, or NULL in an + out-of-memory condition. + + * utils/recsel.c (recsel_process_data): Emit an out of error + message when appropriate. + * utils/recins.c (recins_insert_record): Likewise. + (recins_add_new_record): Likewise. + * utils/recfix.c (recfix_do_auto): Likewise. + (recfix_do_sort): Likewise. + * utils/rec2csv.c (rec2csv_process_data): Likewise. + + * src/rec-rset.c (rec_rset_init): New function. + (rec_rset_new): Use rec_rset_init and rec_rset_destroy in + out-of-memory conditions. + (rec_rset_destroy): Be a no-operation if NULL is passed. + (rec_rset_destroy): Also assume that other ADT destructors behave + the same. + (rec_rset_dup): Use rec_rset_init and rec_rset_destroy in + out-of-memory conditions. + (rec_rset_group): Return a copy of RSET or NULL if out of memory. + (rec_rset_merge_records): Return a copy of TO_RECORD, or NULL if + out of memory. + + * src/rec-mset.c (rec_mset_destroy): Be a no-op if the passed + pointer is NULL. + (rec_mset_init): New function. + (rec_mset_new): Call to rec_mset_init and rec_mset_destroy if + in an end-of-memory condition. + (rec_mset_dup): Likewise. + (rec_mset_sort): API changed to return false if there is not + enough memory to perform the operation, leaving the original mset + untoched. + (rec_mset_insert_at): Call rec_mset_elem_destroy when out of memory. + (rec_mset_elem_init): New function. + (rec_mset_insert_after): Call rec_mset_elem_destroy when out of + memory. + (rec_mset_add_sorted): Likewise. + (rec_mset_elem_destroy): Be a no-operation if called with NULL. + + * src/rec-record.c (rec_record_dup): Use rec_record_init and + rec_record_destroy in out-of-memory conditions. + (rec_record_init): New function. + (rec_record_new): Use rec_record_init. + (rec_record_destroy): Be a no-op if the passed pointer is NULL. + + * src/rec-field-name.c (rec_field_name_set): Return false if + strdup returns NULL. + + * src/rec-crypt.c (rec_encrypt_field): Return false if strdup + returns NULL. + + * src/rec-field.c (rec_field_set_location): Avoid a segmentation + fault if malloc returns NULL. + +2012-02-20 Giuseppe Scrivano <giuseppe@southpole.se> (tiny change) + + src,utils: fail gracefully on allocation errors. + * src/rec-parser.c (rec_parse_field): Return an error if `new' was + not allocated correctly. + * utils/recsel.c (main): Fail gracefully if `db' was not allocated + correctly. + +2012-01-19 Jose E. Marchesi <jemarch@gnu.org> + + utils: error reporting must always use recutl_fatal or + recutl_error. + * utils/recutl.h (RECORD_SELECTION_ARGS_CASES): Use recutl_fatal + instead of fprintf. + (RECORD_SELECTION_ARGS_CASES): Added a trailing \n to an error + message missing it. + +2012-01-17 Jose E. Marchesi <jemarch@gnu.org> + + doc: use same optarg names in --help outputs and the manual. + * doc/recutils.texi (recsel Invocation): Use same optarg names + than in the synopsis used in --help. + (recins Invocation): Likewise. + (recdel Invocation): Likewise. + (recset Invocation): Likewise. + * utils/recutl.c (recutl_print_help_record_selection): Likewise. + +2012-01-17 Jose E. Marchesi <jemarch@gnu.org> + + doc: make the texinfo documentation easier to find. + * man/Makefile.am (rec2csv.1): Use the 'recutils' manual instead + of the name of the utilities. + (csv2rec.1): Likewise. + (mdb2rec.1): Likewise. + (recdel.1): Likewise. + (recfix.1): Likewise. + (recinf.1): Likewise. + (recins.1): Likewise. + (recsel.1): Likewise. + (recset.1): Likewise. + (recfmt.1): Likewise. + + * doc/recutils.texi: Entries for the individual utilities in the + info index. + +2012-01-16 Jose E. Marchesi <jemarch@gnu.org> + + src,utils: fixes of typos in message strings. + * src/rec-int.c (rec_int_check_rset): Use 'shall' instead of + 'should' in text messages. + (rec_int_check_descriptor): Likewise. + + * utils/recins.c (recutl_print_help): Typos in help strings fixed. + +2012-01-15 Jose E. Marchesi <jemarch@gnu.org> + + recsel: print an error if an invalid fex is passed to -p,-P or -R. + * utils/recsel.c (recsel_parse_args): Print an error message if an + invalid fex is passed to -p, -P or -R. + +2012-01-14 Jose E. Marchesi <jemarch@gnu.org> + + manual: documentation of -G,--group-by. + * doc/recutils.texi (recsel Invocation): Documentation of + -G|--group-by. + +2012-01-14 Jose E. Marchesi <jemarch@gnu.org> + + torture: tests for the group-by operation. + * torture/utils/recsel.sh (group-records): New input file. + (recsel-group-records): New test. + (recsel-group-records-sort): Likewise. + (recsel-group-records-non-existing-field): Likewise. + (recsel-group-one-record): Likewise. + (recsel-group-records-missing): Likewise. + +2012-01-14 Jose E. Marchesi <jemarch@gnu.org> + + librec,torture: record sorting criteria adjusted to keep the + relative positions of 'equal' records. + * torture/utils/recfix.sh (Bool): Fix expected result to expect + the sorting algorithm to keep the relative order of equal fields. + (unsorted-int-with-equals): New input file. + (unsorted-range-with-equals): Likewise. + (unsorted-real-with-equals): Likewise. + (unsorted-lex-with-equals): Likewise. + (unsorted-date-with-equals): Likewise. + (recfix-sort-ints-with-equals): New test. + (recfix-sort-ranges-with-equals): Likewise. + (recfix-sort-reals-with-equals): Likewise. + (recfix-sort-lex-with-equals): Likewise. + (recfix-sort-dates-with-equals): Likewise. + + * src/rec-rset.c (rec_rset_record_compare_fn): Keep the relative + order of 'equal' fields when sorting. This implies a penalty in + performance, but makes the sorting algorithm to show a more + predictable behaviour, especially when using for record grouping. + +2012-01-14 Jose E. Marchesi <jemarch@gnu.org> + + recsel,librec: implementation of the group-by operation. + * src/rec-rset.c (rec_rset_group): New function. + (rec_rset_merge_records): New function. + + * utils/recsel.c (recsel_process_data): Invoke rec_rset_group_by + if a group-by field was specified in the command line. + + * src/rec.h: Prototype for rec_rset_group. + + * utils/recsel.c (recsel_group_by_field): New global. + (GNU_longOptions): New option --group-by. + (recutl_print_help): Documentation for -G|--group-by. + (recsel_parse_args): Manage -G|--group-by. + +2012-01-13 Jose E. Marchesi <jemarch@gnu.org> + + Preparation for 1.5. + * utils/recutl.c: Include time.h. + + * NEWS: Date updated in the 1.5 entry. + + * configure.ac: Version number changed to 1.5. + +2012-01-13 Jose E. Marchesi <jemarch@gnu.org> + + torture,utils: make the tests run properly in CRLF systems, and + missing header included in recutl.c. + * utils/recutl.c: Include stdint.h, since int32_t is used in the + file. + + * torture/utils/testutils.sh: Post-process the output of the tools + to remove CR characters. This avoid the tests to fail when + running in MSDOS or Windows systems. Problem reported and patch + sent by Bruno Haible. + +2012-01-13 Jose E. Marchesi <jemarch@gnu.org> + + * gnulib update. + +2012-01-12 Jose E. Marchesi <jco@terma.com> + + librec: enumeration mixing in rec-parser fixed. + * src/rec-parser.c (rec_parser_init_common): Reset parser->error + to REC_PARSER_NOERROR. + +2012-01-12 Jose E. Marchesi <jemarch@gnu.org> + + Preparation for 1.4.93. + * configure.ac: Version number changed to 1.4.93. + +2012-01-12 Jose E. Marchesi <jemarch@gnu.org> + + Portability issues with random and variadic macros fixed. + * utils/recutl.c (recutl_index_add_random): Use random_r and + srandom_r instead of random and srandom. + (recutl_index_add_random): Be careful to generate the requested + number of randoms. + + * lib/random_r.c: Imported from gnulib. + * m4/random_r.m4: Likewise. + + * configure.ac: Require C99 with the macro AC_PROG_CC_C99. + +2012-01-11 Jose E. Marchesi <jemarch@gnu.org> + + Preparation for 1.4.92. + * configure.ac: Version number changed to 1.4.92. + +2012-01-11 Jose E. Marchesi <jemarch@gnu.org> + + torture: don't run encryption related tests if crypt support was + not compiled into the library. + * torture/utils/recsel.sh: Run encryption related tests only if + crypt_support is "yes". + It defaults to "yes". + + * torture/utils/Makefile.am (TESTS_ENVIRONMENT): Pass + crypt_support to the test scripts. + +2012-01-11 Jose E. Marchesi <jemarch@gnu.org> + + utils: accept -s|--password only if compiled with encryption + support. + * utils/recutl.h: Define ENCRYPTION_SHORT_ARGS. + + * utils/recins.c (recins_parse_args): Likewise. + + * utils/recsel.c (recsel_parse_args): Process -s|--password only + if compiled with encryption support. + +2012-01-11 Jose E. Marchesi <jemarch@gnu.org> + + * gnulib modules fprintf-posix, vasprintf-posix and printf-posix + imported. + +2012-01-10 Jose E. Marchesi <jemarch@gnu.org> + + * strcasestr gnulib module imported. + * gnulib update. + +2012-01-10 Jose E. Marchesi <jemarch@gnu.org> + + librec,utils: handle the return values of asprintf and fread. + * utils/recutl.c (recutl_read_file): Handle fread errors. + + * src/rec-int.c (ADD_ERROR): Don't ignore the value returned by + asprintf. + * utils/rec2csv.c (rec2csv_generate_csv): Likewise. + * src/rec-types.c (rec_type_check_range): Likewise. + (rec_type_check_size): Likewise. + * src/rec-rset.c (rec_rset_add_auto_field_int): Likewise. + * src/rec-parser.c (rec_parser_perror): Likewise. + * src/rec-fex.c (rec_fex_str): Likewise. + +2012-01-10 Jose E. Marchesi <jemarch@gnu.org> + + Preparation for 1.4.91. + * configure.ac: Version number changed to 1.4.91. + +2012-01-10 Jose E. Marchesi <jemarch@gnu.org> + + librec: compilation problem in remote descriptors support fixed. + * src/rec-int.c (rec_int_merge_remote): Missing variable + tmpfile_des added. + +2012-01-10 Jose E. Marchesi <jemarch@gnu.org> + + Preparation for 1.4.90. + * NEWS: Entry for 1.5. + + * configure.ac: Version number changed to 1.4.90. + * po/de.po: Updated. + * po/fi.po: Likewise. + * po/nl.po: Likewise. + * po/recutils.pot: Likewise. + * po/sv.po: Likewise. + +2012-01-10 Jose E. Marchesi <jemarch@gnu.org> + + Warning fixes. + * utils/recfmt.c (recfmt_process_db): Useless variable rset_size + removed. + + * src/rec-mset.c (rec_mset_dup): Useless variable new_elem + removed. + (rec_mset_sort): Likewise. + (rec_mset_dump): Use %zd in printf to print size_t values. + * utils/recinf.c (print_info_file): Likewise. + * src/rec-int.c (rec_int_check_rset): Likewise. + (rec_int_check_descriptor): Likewise. + + * libcsv/libcsv.c: Copyright year update. + +2012-01-10 Jose E. Marchesi <jco@terma.com> + + * doc/recutils.texi: FSF copyright years updated in recutils.texi. + +2012-01-10 Jose E. Marchesi <jemach@gnu.org> + + Removal of warnings. + * utils/recutl.h (RECORD_SELECTION_ARGS_CASES): Likewise. + + * utils/recutl.c (recutl_index_list_parse): Likewise. + + * src/rec-fex.c (rec_fex_check): Likewise. + + * src/rec-int.c (rec_int_merge_remote): Likewise. + + * src/rec-rset.c (rec_rset_rename_field): Likewise. + + * src/rec-record.c (rec_record_subset_p): Unused variables removed. + (rec_record_uniq): Likewise. + + * src/rec-types.c (rec_type_check_re): Unused function removed. + + * src/rec-field-name.c: Include rec-utils.h. + + * src/rec-mset.c (rec_mset_iterator_next): Unused variable removed. + +2012-01-10 Jose E. Marchesi <jemarch@gnu.org> + + Unit tests fixes. + * src/rec-writer.c (rec_write_field_with_rset): Don't write the + blank character before field values if printin sexps. + + * torture/rec-field/rec-field-to-comment.c + (rec_field_to_comment_nominal): Adjusted to the new behaviour of + the writer with fields having empty values. + +2012-01-09 Jose E. Marchesi <jemarch@gnu.org> + + librec: rec_mset_append gets an extra argument indicating the + type of element for counting. + * src/rec-mset.c (rec_mset_append): Get an argument elem_type. + (rec_mset_dup): Use new rec_mset_append. + + * src/rec.h: New argument elem_type to rec_mset_append. + + * utils/recset.c (recset_process_add): Likewise. + (recset_process_set): Likewise. + * utils/recins.c (recins_insert_record): Likewise. + (recins_parse_args): Likewise. + * utils/mdb2rec.c (process_table): Likewise. + (process_table): Likewise. + * utils/csv2rec.c (field_cb): Likewise. + (record_cb): Likewise. + * src/rec-int.c (rec_int_merge_remote): Likewise. + * src/rec-parser.c (rec_parse_record): Likewise. + (rec_parse_record): Likewise. + (rec_parse_record): Likewise. + * src/rec-rset.c (rec_rset_set_type): Likewise. + +2012-01-09 Jose E. Marchesi <jemarch@gnu.org> + + torture: adapt unit tests to the new librec api. + * torture/rec-parser/rec-parse-record.c: Adapted to the new librec + API. + * torture/rec-writer/rec-write-db.c: Likewise. + * torture/rec-writer/rec-write-record-with-fex.c: Likewise. + * torture/rec-writer/rec-write-rset.c: Likewise. + * torture/rec-writer/rec-write-record.c: Likewise. + * torture/rec-parser/rec-parse-record-str.c: Likewise. + +2012-01-09 Jose E. Marchesi <jemarch@gnu.org> + + algol68: dist problem fixed. + * algol68/Makefile.am (nodist_librec_a68_a_SOURCES): Don't + distribute the generated C files from the algol68 sources. + +2012-01-09 Jose E. Marchesi <jco@terma.com> + + torture: get some unit tests up to date. + * torture/Makefile.am (REC_MSET_TSUITE): rec-mset-get.c renamed to + rec-mset-get-at.c. + + * torture/rec-mset/rec-mset-get.c (rec_mset_get_empty): Likewise. + + * torture/rec-mset/rec-mset-count.c: Include rec.h instead of + rec-mset.h. + (rec_mset_count_existing): Adapted to the new mset semantics. + + * torture/rec-mset/rec-mset-type-p.c: Likewise. + * torture/rec-mset/rec-mset-register-type.c: Likewise. + * torture/rec-mset/rec-mset-new.c: Likewise. + * torture/rec-mset/rec-mset-get.c: Likewise. + * torture/rec-mset/rec-mset-dup.c: Likewise. + (rec_mset_dup_nonempty): Adapted to the new mset semantics. + +2012-01-08 Jose E. Marchesi <jemarch@gnu.org> + + utils: support for the selection of random records in recsel, + recins, recdel and recset. + * torture/utils/recset.sh (recset-random-all): New test. + (recset-random-one): Likewise. + + * torture/utils/recdel.sh (recdel-random-all): New test. + (recdel-random-all-force): Likewise. + + * torture/utils/recins.sh (one-record): New input file. + (recins-random-all): New test. + (recins-random-one): Likewise. + + * torture/utils/recsel.sh (recsel-random-all): New test. + (recsel-random-one): Likewise. + (recsel-num-and-random): Likewise. + (recsel-sex-and-random): Likewise. + (recsel-quick-and-random): Likewise. + + * doc/recutils.texi (recsel Invocation): --random|-m documented. + (recins Invocation): Likewise. + (recdel Invocation): Likewise. + (recset Invocation): Likewise. + + * utils/recset.c (recutl_random): New global. + (recset_process_actions): Manage random records. + + * utils/recdel.c (recutl_random): New global. + (recdel_delete_records): Manage random records. + (recutl_print_help): Document --random|-r. + + * utils/recins.c (recutl_random): New global. + (recins_add_new_record): Manage random records. + + * doc/recutils.texi (recins Invocation): Likewise. + + * utils/recsel.c (recsel_process_data): Manage random indexes. + + * utils/recutl.c (recutl_reset_indexes): New function. + + * utils/recsel.c (recutl_print_help): Synopsis updated with -r. + + * utils/recutl.h (RECORD_SELECTION_ARGS): RANDOM_ARG added. + (RECORD_SELECTION_LONG_ARGS): Entry for random. + (RECORD_SELECTION_SHORT_ARGS): Likewise. + + * utils/recsel.c (recutl_random): New global. + + * utils/recutl.h (RECORD_SELECTION_ARGS_CASES): Manage + --random|-r. + + * utils/recutl.c (recutl_index_add_random): New function. + (recutl_print_help_record_selection): Documentation for + --random|-r. + (recutl_random): New global variable. + + * utils/recutl.h (recutl_index_add_random): New function + prototype. + +2012-01-08 Jose E. Marchesi <jemarch@gnu.org> + + recutl: remove an arbitrary limit in the number of indexes. + * utils/recutl.c (recutl_index_s): New structure. + (recutl_index_list_parse): Allocate the indexes list dynamically. + +2012-01-08 Jose E. Marchesi <jemarch@gnu.org> + + Copyright years update. + * utils/recutl.c (recutl_print_version): Copyright updated. + * doc/recutils.texi: Likewise. + +2012-01-08 Jose E. Marchesi <jemarch@gnu.org> + + manual: documentation for the new indexes system. + * utils/recsel.c (recutl_print_help): Documentation updated. + * utils/recutl.c (recutl_print_help_record_selection): Likewise. + + * doc/recutils.texi (recsel Invocation): Update description of -n. + (recins Invocation): Likewise. + (recdel Invocation): Likewise. + (recset Invocation): Likewise. + +2012-01-08 Jose E. Marchesi <jemarch@gnu.org> + + torture: tests for the new indexes system. + * utils/recins.c (recins_add_new_record): Dup the record to + insert, since it could be used to replace more than one record. + + * torture/utils/recins.sh (recins-replace-range): New test. + (recins-replace-several-indexes): Likewise. + + * torture/utils/recset.sh (recset-set-field-in-range): New test. + (recset-set-field-in-several-indexes): Likewise. + + * torture/utils/recsel.sh (recsel-index-toobig): New test. + (recsel-index-range-1): Likewise. + (recsel-index-range-2): Likewise. + (recsel-index-range-3): Likewise. + (recsel-index-several): Likewise. + (recsel-index-invalid-1): Likewise. + (recsel-index-invalid-2): Likewise. + (recsel-index-invalid-3): Likewise. + (recsel-index-invalid-4): Likewise. + +2012-01-07 Jose E. Marchesi <jemarch@gnu.org> + + utils: support for lists of indexes including ranges. + * utils/recset.c (recutl_num): Global variable removed. + (recset_process_actions): Use the new indexes system. + (recset_process_ren): Likewise. + + * utils/recins.c (recutl_num): Global variable removed. + (recins_add_new_record): Use the new indexes system. + + * utils/recdel.c (recutl_num): Global variable removed. + (recdel_delete_records): Use new indexes system. + (recdel_parse_args): Likewise. + (main): Likewise. + + * utils/recsel.c (recsel_process_data): Use new indexes system. + + * utils/recutl.h (RECORD_SELECTION_ARGS_CASES): Use + recutl_index_list_parse to handle -n. + + * utils/recutl.c (recutl_num_indexes): New function. + (recutl_index_p): New function. + + * utils/recsel.c (recutl_num): Global variable deleted. + + * utils/recutl.c (INDEX_LIST_ENTRY_RE): New constant. + (INDEX_LIST_RE): Likewise. + (recutl_index_list_parse): New function. + + * utils/recutl.h (recutl_index_list_s): New structure. + +2012-01-07 Jose E. Marchesi <jemarch@gnu.org> + + recins: implement the auto fields using the rec_rset facilities. + * utils/recins.c (recins_add_auto_field_int): Function deleted. + (recins_add_auto_field_date): Likewise. + (recins_add_auto_fields): Likewise. + (recins_insert_record): Use rec_rset_add_auto_fields instead of + recins_add_auto_fields. + (recins_insert_record): Likewise. + +2012-01-07 Jose E. Marchesi <jemarch@gnu.org> + + recfix: New operation --auto. + * torture/utils/recfix.sh (missing-auto-fields): New input file. + (recfix-missing-auto-fields): New test. + + * doc/recutils.texi (recfix Invocation): Documentation for the + --auto operation. + (recfix Examples): Example with --auto added. + + * utils/recfix.c (recfix_op): RECFIX_OP_AUTO. + (GNU_longOptions): Entry for --auto. + (recutl_print_help): Documentation for --auto. + (recfix_parse_args): Handle the --auto operation. + (main): Likewise. + + * src/rec-rset.c (rec_rset_add_auto_fields): New function. + (rec_rset_add_auto_field_int): Likewise. + (rec_rset_add_auto_field_date): Likewise. + Include errno.h and locale.h. + + * utils/recfix.c (recfix_do_auto): New function. + +2012-01-07 Jose E. Marchesi <jemarch@gnu.org> + + recsel: Support for --uniq|-U. + * torture/utils/recsel.sh (duplicated-fields): New input file. + (recsel-uniq): New test. + (recsel-uniq-long): New test. + + * doc/recutils.texi (recsel Invocation): Documentation for + --uniq|-U. + + * utils/recsel.c (GNU_longOptions): New command line argument + --uniq|-U. + (recutl_print_help): Documentation for --uniq|-U. + (recsel_parse_args): Handle --uniq|-U. + (recsel_uniq): New global. + (recsel_process_data): Remove duplicated fields in the processed + records if requested by the user with --uniq|-U. + +2012-01-04 Jose E. Marchesi <jemarch@gnu.org> + + librec: Initial implementation of the rec_record_uniq function. + * src/rec-record.c (rec_record_uniq): New function. + + * src/rec.h: Prototype for rec_record_uniq. + +2012-01-02 Jose E. Marchesi <jemarch@gnu.org> + + mset: disposal callback is now actually used. Memory leak fixed. + * src/rec-mset.c (rec_mset_elem_destroy): Dispose the data stored + in elements upon removal. + +2012-01-02 Jose E. Marchesi <jemarch@gnu.org> + + librec: improved sort support. + * src/rec-record.c (rec_record_dup): Don't pass a 'sorted' + argument to rec_mset_dup. + * src/rec-rset.c (rec_rset_dup): Likewise. + (rec_rset_sort): Use rec_mset_sort. + + * src/rec-mset.c (rec_mset_sort): New function. + (rec_mset_dup): Don't sort. + + * src/rec.h: New prototype for rec_mset_sort, and rec_mset_dup + modified to not get the 'sorted' argument. + +2011-12-28 Jose E. Marchesi <jemarch@gnu.org> + + writer: don't write a blank after the field name if the field + value is empty. + * torture/utils/recsel.sh (empty-field-values): New input file. + (recsel-empty-field-values): New test. + + * src/rec-writer.c (rec_write_field_with_rset): Print a blank + after the field name only if the field value is not the empty + string. + +2011-12-28 Jose E. Marchesi <jemarch@gnu.org> + + torture: system tests for csv2rec. + * torture/utils/csv2rec.sh: New file. + (simple-table): New input file. + (csv2rec-simple-table): New test. + (simple-table-quotes): New input file. + (csv2rec-simple-table-quotes): New test. + (empty-columns): New input file. + (csv2rec-empty-columns): New test. + (csv2rec-empty-columns-omit): Likewise. + (multi-line): New input file. + (csv2rec-multi-line): New test. + + * torture/utils/Makefile.am (TESTS): csv2rec.sh added. + +2011-12-28 Jose E. Marchesi <jemarch@gnu.org> + + * src/rec.h: Documentation for the rec_int_check_* functions. + +2011-12-26 Jose E. Marchesi <jemarch@gnu.org> + + librec,utils: new sorting mechanism on top of the new mset + implementation. + * torture/utils/rec2csv.sh (sort): New input file. + (rec2csv-sort): New test. + (rec2csv-sort-field): Likewise. + + * src/rec-rset.c (rec_rset_record_compare_fn): Incorrect results + were being calculated if a non-existing field was given to -S. + + * torture/utils/recsel.sh (sort): New input file. + (recsel-sort): New test. + (recsel-sort-field): Likewise. + (recsel-sort-field-nonexist): Likewise. + + * utils/recfix.c (recfix_do_sort): Rewritten to use rec_rset_sort. + * utils/rec2csv.c (rec2csv_process_data): Likewise. + * utils/recsel.c (recsel_process_data): Likewise. + + * src/rec-rset.c (struct rec_rset_s): Field ordered removed. + (rec_rset_set_ordered): Function removed. + (rec_rset_ordered): Function removed. + + * utils/rec2csv.c (rec2csv_parse_args): Likewise. + + * utils/recfmt.c (main): Likewise. + + * utils/recfix.c (recfix_do_sort): Likewise. + + * utils/recsel.c (recsel_parse_args): Don't use a sorting parser. + + * utils/recutl.c (recutl_sorting_parser): Function removed. + + * src/rec-parser.c (struct rec_parser_s): Fiels related with + sorting removed. + (rec_parse_rset): Don't sort. + (rec_parser_set_ordered): Function removed. + (rec_parser_ordered): Likewise. + (rec_parser_sort_rset): Likewise. + + * src/rec-record.c (rec_record_dup): Pass sorted=false to + rec_mset_dup. + + * src/rec-mset.c (rec_mset_dup): Take a new parameter 'sort'. + +2011-12-25 Jose E. Marchesi <jemarch@gnu.org> + + mset,recins: fix some problems on the removal of elements. + * src/rec-mset.c (rec_mset_remove_elem): Update statistics. + (rec_mset_remove_at): Don't update statistics, because + rec_mset_remove_elem already does that internally. + + * utils/recins.c (recins_add_new_record): Fix the replace of + selected record using the provided record. + +2011-12-25 Jose E. Marchesi <jemarch@gnu.org> + + utils: missing rec_record_set_container added. + * utils/mdb2rec.c (process_table): Set the rset container in the + record to insert. + * utils/recins.c (recins_insert_record): Likewise. + +2011-12-25 Jose E. Marchesi <jemarch@gnu.org> + + librec,utils: new mset iterators and API used in the codebase. + * utils/mdb2rec.c (process_table): Use rec_mset_append. + + * utils/rec2csv.c (rec2csv_generate_csv): Use iterators. + (rec2csv_determine_fields): Likewise. + + * utils/csv2rec.c (field_cb): Use rec_mset_append. + (record_cb): Likewise. + + * utils/recfix.c (recfix_do_crypt): Use iterators. + * utils/recfmt.c (recfmt_process_db): Likewise. + + * utils/recset.c (recset_process_actions): Use iterators. + (recset_process_add): Use rec_mset_append. + (recset_process_set): Likewise. + + * src/rec-mset.c (rec_mset_elem_destroy): Don't invoke the + disposal callback, since that is executed as part of + gl_list_remove_node. + (rec_mset_elem_set_type): New function. + (rec_mset_iterator_next): Update the list_node field of the mset + elements retrieved by iterating the list. + + * utils/recins.c (recins_add_auto_field_int): Use iterators and + new mset API. + (recins_add_auto_field_date): Likewise. + (recins_insert_record): Likewise. + (recins_parse_args): Likewise. + (recins_add_new_record): Likewise. + + * src/rec-parser.c (rec_parse_rset): Set the container for new + records. + + * src/rec-record.c (rec_record_s): New field 'container' to hold a + pointer managed by the user of the record. + (rec_record_new): Initialize the container pointer. + (rec_record_dup): Copy the container pointer. + (rec_record_container): New function. + (rec_record_set_container): New function. + + * utils/recsel.c (recsel_process_data): Use iterators. + + * src/rec-parser.c (rec_parse_rset): Use mset functions. + (rec_parse_record): Likewise. + + * src/rec-sex.c (rec_sex_eval): Use iterators. + + * src/rec-int.c (rec_int_check_rset): Use iterators. + (rec_int_check_record_types): Likewise. + (rec_int_check_record_secrets): Likewise. + (rec_int_check_record_key): Likewise. + (rec_int_check_descriptor): Likewise. + (rec_int_merge_remote): Likewise. + + * src/rec-writer.c (rec_write_record_with_rset): Use iterators. + (rec_write_rset): Likewise. + + * src/rec-rset.c (rec_rset_num_elems): Return a size_t type. + (rec_rset_num_records): Likewise. + (rec_rset_num_comments): Likewise. + (rec_rset_mset): New function. + (rec_rset_update_field_props): Use iterators. + (rec_rset_update_types): Likewise. + + * src/rec-record.c (rec_record_get_num_fields_by_name): Use + iterators. + (rec_record_get_field_by_name): Likewise. + + * src/rec-mset.c (rec_mset_search): Use iterators. + + * src/rec-record.c (rec_record_get_field_index): Use iterators. + (rec_record_get_field_index_by_name): Likewise. + (rec_record_contains_value): Likewise. + (rec_record_get_field): Function removed. + (rec_record_get_comment): Likewise. + (rec_record_remove_at): Likewise. + + * src/rec-mset.c (rec_mset_iter_gl2mset): New function. + (rec_mset_iter_mset2gl): Likewise. + (rec_mset_iterator_next): Use gl2mset and mset2gl instead of + memcpy. + + * src/rec-rset.c (rec_rset_rename_field): Use iterators. + + * src/rec-record.c (rec_record_new): Note about MSET_FIELD and + MSET_COMMENT added. + (rec_record_subset_p): Rewritten to use mset iterators. + (rec_record_mset): New function. + (rec_record_get_elem): Function removed. + + * src/rec.h (MSET_FIELD): New constant. + (MSET_COMMENT): Likewise. + +2011-12-22 Jose E. Marchesi <jemarch@gnu.org> + + * src/rec.h: Comments API properly documented. + +2011-12-22 Jose E. Marchesi <jemarch@gnu.org> + + mset: implementation of iterators ala gl_lib. + * src/rec-mset.c (rec_mset_iterator): New function. + (rec_mset_iterator_next): Likewise. + (rec_mset_iterator_free): Likewise. + + * src/rec.h: Prototypes for new functions related to iterators: + rec_mset_iterator, rec_mset_iterator_next and + rec_mset_iterator_free. + +2011-12-22 Jose E. Marchesi <jemarch@gnu.org> + + mset: use an explicit type for element types. + * src/rec-mset.c (struct rec_mset_elem_s): Use rec_mset_type_t. + (struct rec_mset_s): count is now of type size_t. + (rec_mset_get_at): Use new types. + (rec_mset_remove_at): Likewise. + (rec_mset_insert_at): Likewise. + (rec_mset_type_p): Likewise. + (rec_mset_register_type): Likewise. + (rec_mset_count): Likewise. + (rec_mset_get_at): Likewise. + (rec_mset_first): Likewise. + (rec_mset_next): Likewise. + + * src/rec.h: Change mset functions using positions to use size_t + variables instead of ints. + (rec_mset_type_t): New data type. + +2011-12-22 Jose E. Marchesi <jemarch@gnu.org> + + src: move the stuff of rec-mset.h to rec.h and document the API. + * src/rec-record.c: Stop including rec-mset.h. + * src/rec-rset.c: Likewise. + + * src/rec-mset.c: Include rec.h instead of rec-mset.h. + + * src/Makefile.am (librec_la_SOURCES): rec-mset.h removed. + + * src/rec-mset.h: File deleted. + + * src/rec.h: Stuff from rec-mset.h moved there. + (rec_mset_new): New prototype, and documented. + (rec_mset_destroy): Likewise. + (rec_mset_dup): Likewise. + (rec_mset_type_p): Likewise. + (rec_mset_register_type): Likewise. + (rec_mset_get_at): Likewise. + (rec_mset_insert_at): Likewise. + (rec_mset_append): Likewise. + (rec_mset_add_sorted): Likewise. + (rec_mset_insert_after): Likewise. + (rec_mset_remove_at): Likewise. + (rec_mset_remove): Likewise. + (rec_mset_search): Likewise. + (rec_mset_first): Likewise. + (rec_mset_next): Likewise. + (rec_mset_elem_new): Likewise. + (rec_mset_elem_destroy): Likewise. + (rec_mset_elem_type): Likewise. + (rec_mset_elem_data): Likewise. + (rec_mset_elem_set_data): Likewise. + (rec_mset_elem_equal_p): Likewise. + +2011-12-22 Jose E. Marchesi <jemarch@gnu.org> + + mset: several optimizations. + * src/rec-rset.c (rec_rset_get_elem): Likewise. + (rec_rset_get_record): Likewise. + (rec_rset_get_comment): Likewise. + + * src/rec-record.c (rec_record_get_elem): rec_mset_get is now + called rec_mset_get_at. + (rec_record_get_field): Likewise. + (rec_record_get_comment): Likewise. + + * src/rec-mset.c (rec_mset_remove_at): Use gl_list_get_at instead + of gl_list_remove_at. + (rec_mset_get): Optimization when the requested element is of any + type. + (rec_mset_get_at): Renamed from rec_mset_get. + +2011-12-22 Jose E. Marchesi <jemarch@gnu.org> + + torture: xfail tests failing are reported as failures. + * torture/utils/testutils.sh: Accumulate an error if an xfail test + does not fail. + +2011-12-22 Jose E. Marchesi <jemarch@gnu.org> + + src: auto fields not having an explicit type are now implicitly + typed as integers. + * doc/recutils.texi (%auto): Document that auto fields are + integers by default. + + * torture/utils/recins.sh (auto-notype): New input file. + (recins-auto-notype): New test. + + * torture/utils/recfix.sh (recfix-auto-notype): Adapted to new + semantics. + (auto-invalid-type): New input file. + (recfix-auto-invalid-type): New test. + + * src/rec-rset.c (rec_rset_update_field_props): Auto fields not + having an explicit type are implicitly typed as integers. + +2011-12-20 Jose Marchesi <jco@wilhelm> + + Tasktool operations. + * TODO: Task 20 resolved to 'DISCARDED'. + Note added for task 24. + Task 16 resolved to 'DISCARDED'. + Task 10 edited. + Task 35 resolved to 'DONE'. + Task 26 resolved to 'DONE'. + +2011-12-20 Jose E. Marchesi <jco@terma.com> + + recfix: interactive password prompt. + * doc/recutils.texi (recfix Invocation): Document the interactive + behaviour of recfix when it needs a password. + + * utils/recfix.c (recfix_parse_args): Prompt for a password to the + user if needed, and ignore empty passwords. + +2011-12-20 Jose E. Marchesi <jco@terma.com> + + recins: avoid code duplication in encryption code. + * utils/recins.c (recins_encrypt_record): New function. + (recins_insert_record): Use recins_encrypt_record. + (recins_add_new_record): Likewise. + +2011-12-20 Jose E. Marchesi <jco@terma.com> + + utils: interactive password prompt in recins. + * doc/recutils.texi (recins Encryption): Document the interactive + behaviour of recins when it needs a password. + + * utils/recins.c (recins_insert_record): Prompt for a password to + the user if needed, and ignore empty passwords. + (recins_add_new_record): Likewise. + +2011-12-20 Jose E. Marchesi <jco@terma.com> + + utils: interactive password prompt in recsel. + * utils/recsel.c (recsel_process_data): Use the provided password + only if it not the empty string. + + * doc/recutils.texi (recsel Encryption): Document the interactive + behaviour of recsel when it needs a password. + + * utils/recsel.c (recsel_process_data): Ask for a password if + recsel was called interactively, a password is needed and -s was + provided alone. + (GNU_longOptions): allow optional arguments to PASSWORD_ARG. + + * utils/recutl.c: New global variable recutl_interactive_p. + (recutl_interactive): New function. + (recutl_init): Initialize recutl_interactive. + +2011-12-20 Jose E. Marchesi <jemarch@gnu.org> + + * gnulib module getpass-gnu imported. + +2011-12-20 Jose E. Marchesi <jemarch@gnu.org> + + src: support for hexadecimal and octal literals in selection + expressions. + * doc/recutils.texi (SEX Operands): Document the usage of + hexadecimal and octal literals in selection expressions. + + * torture/utils/recsel.sh (recsel-sex-integer-equal-hex): New + test. + (recsel-sex-integer-equal-oct): Likewise. + + * src/rec-sex-lex.l: Modified to recognize hexadecimal and octal + literals as integers. + +2011-12-19 Jose E. Marchesi <jemarch@gnu.org> + + src: support for hexadecimal and octal numbers in type + descriptions, field values and %size entries. + * doc/recutils.texi (%size): Mention that hexadecimal and octal + numbers can be used in %size entries. + + * src/rec-utils.h (REC_INT_SIZE_RE): Rewritten to allow hex and + octal constants. + + * torture/utils/recfix.sh (size-exact-hex): New input file. + (size-exact-oct): Likewise. + (recfix-size-exact-hex): New test. + (recfix-size-exact-oct): Likewise. + + * doc/recutils.texi (Escalar types): Document that hexadecimal and + octal numbers can be used to define ranges. + (String types): Ditto for 'size' types. + + * src/rec-types.c (rec_type_parse_size): Make sure the user + specified type is not negative. + + * torture/utils/recfix.sh (ranges-hex-invalid): New input file. + (recfix-range-hex-xfail): New test. + (ranges-oct-ok): New input file. + (ranges-oct-invalid): Likewise. + (recfix-range-oct-ok): New test. + (recfix-range-oct-xfail): Likewise. + (type-size-valid): New input file. + (type-size-valid-hex): Likewise. + (type-size-valid-oct): Likewise. + (type-size-invalid): Likewise. + (type-size-invalid-negative): Likewise. + (recfix-type-size-valid): New test. + (recfix-type-size-valid-hex): Likewise. + (recfix-type-size-valid-oct): Likewise. + (recfix-type-size-invalid): Likewise. + (recfix-type-size-invalid-negative): Likewise. + + * src/rec-utils.c (rec_parse_int): Support hexadecimal numbers. + + * src/rec-types.c (REC_TYPE_INT_RE): New constant. + (REC_TYPE_RANGE_DESCR_RE): Use REC_TYPE_INT_RE. + (REC_TYPE_SIZE_DESCR_RE): Likewise. + + * torture/utils/recfix.sh (type-int-valid): Add integers in both + hexadecimal and octal formats. + (type-int-invalid): Likewise. + (ranges-hex-ok): New input file. + (recfix-ranges-hex-ok): New test. + + * src/rec-types.c (REC_TYPE_INT_VALUE_RE): Allow letters a-f and + A-F in hexadecimal constants. + +2011-12-10 Jose E. Marchesi <jemarch@gnu.org> + + src,utils: initial support for hexadecimal and octal numbers. + * src/rec-types.c (REC_TYPE_RANGE_DESCR_RE): Use + REC_TYPE_INT_VALUE_RE. + (REC_TYPE_SIZE_DESCR_RE): Likewise. + + * src/rec-int.c (rec_int_check_descriptor): Error message fixed. + + * doc/recutils.texi (Escalar types): Document octal and + hexadecimal numbers. + + * src/rec-types.c (REC_TYPE_INT_VALUE_RE): Modified to allow a 0x + prefix. + + * src/rec-utils.c (rec_atoi): Pass 'base' as 0 to strtol to + support numbers in hexadecimal and octal representation. + +2011-12-19 Jose E. Marchesi <jco@terma.com> + + utils: make recfix to exit with an error status if there is a + parse error. + * utils/recutl.c (recutl_parse_db_from_file): Return 'false' if a + syntax error is found by the parser. + +2011-12-06 Jose E. Marchesi <jemarch@gnu.org> + + src: allow tabs in blank lines between records. + * src/rec-parser.c (rec_parse_rset): Make the parser to ignore + tabs appearing between records. + +2011-12-05 Jose E. Marchesi <jemarch@gnu.org> + + src: support for several numeration bases in rec_atoi. + * src/rec-utils.c (rec_parse_int): Likewise. + + * src/rec-sex-lex.l (rec_sex_lex_extract_index): Likewise. + + * src/rec-sex.c (ATOI_VAL): Likewise. + (rec_sex_op_real_p): Likewise. + + * src/rec-rset.c (rec_rset_record_compare_fn): Pass the base + argument to rec_atoi. + + * src/rec-utils.c (rec_atoi): Get a new argument with the base of + the number. + +2011-11-27 Jose E. Marchesi <jemarch@gnu.org> + + librec: use rec_match intead of regex functions. + * src/rec-fex.c (rec_fex_check): Use rec_match instead of + regcomp/regexec. + +2011-11-27 Jose E. Marchesi <jemarch@gnu.org> + + qa: syntax fixes. + * algol68/rec.a68: Trailing blanks removed. + + * .x-sc_prohibit_xalloc_without_use: New file. + +2011-11-27 Jose E. Marchesi <jemarch@gnu.org> + + utils,librec: encrypted fields are now decrypted when using field + expressions in recsel. + * torture/utils/recsel.sh (confidential): New input file. + (recsel-confidential): New test. + (recsel-confidential-fex): New test. + (recsel-confidential-fex-value): New test. + (recsel-confidential-num): New test. + + * utils/recsel.c (recsel_process_data): Pass recsel_password to + recutl_eval_field_expression. + + * utils/recutl.c (recutl_eval_field_expression): Get a new + argument, 'password'. + (recutl_eval_field_expression): Set the passed password, if any, + to decrypt confidential fields. + + * src/rec-writer.c (rec_write_record_with_fex): Decrypt + confidential fields before printing them out. + +2011-11-27 Jose E. Marchesi <jemarch@gnu.org> + + librec: initialize passwords in writers, and avoid code + replication. + * src/rec-writer.c (rec_writer_new_str): Initialize the password + field to NULL. + (rec_writer_new_common): New function. + (rec_writer_new): Use rec_writer_new_common. + (rec_writer_new_str): Likewise. + +2011-11-26 Jose E. Marchesi <jemarch@gnu.org> + + Distribution fixes. + * etc/Makefile.am (dist_lisp_DATA): Install and distribute + ob-rec.el. + + * README-dev: Remove information incorrectly copied from the + libgnupdf README-dev file. + +2011-11-23 Jose E. Marchesi <jemarch@gnu.org> + + Wrappers for flexible buffers in the Algol68 frontend. + * algol68/rec.a68: Cast pointers to void* for values of mode CSTR. + Keep 'rec init' and 'rec fini'. + (MODE RECBUF): New mode. + (rec buf new): New procedure. + (rec buf close): New procedure. + (rec buf putc): New procedure. + (rec buf puts): New procedure. + (rec buf rewind): New procedure. + +2011-11-20 Jose E. Marchesi <jemarch@gnu.org> + + librec: avoid duplication of regular expressions and generalize + the usage of the rec_match_* functions. + * src/rec-types.c (rec_type_check_int): Use rec_match instead of + rec_type_check_re. + (rec_type_check_field): Likewise. + (rec_type_check_bool): Likewise. + (rec_type_check_real): Likewise. + (rec_type_check_line): Likewise. + (rec_type_check_email): Likewise. + (rec_type_check_enum): Likewise. + (rec_type_check_re): Function deleted. + + * src/rec-sex.c (rec_sex_eval_node): Use rec_match and + rec_match_insensitive. + + * src/rec-utils.c (rec_match_int): New function. + (rec_match_insensitive): New function. + + * src/rec-rset.c (rec_rset_type_field_p): Use + REC_FNAME_LIST_CS_RE. + (rec_rset_type_field_fex): Likewise. + (rec_rset_type_field_type): Likewise. + + * src/rec-field-name.c (rec_field_name_part_str_p): Use rec_match + instead of regcomp/regexec. + (rec_field_name_str_p): Likewise. + * src/rec-int.c (rec_int_rec_type_p): Likewise. + + * src/rec-fex.c (rec_fex_check): Use the REC_*_RE constants. + + * src/rec-utils.h (REC_FNAME_LIST_CS_RE): New constant. + (REC_FNAME_LIST_RE): Likewise. + (REC_FNAME_LIST_SUB_RE): Likewise. + +2011-11-20 Jose E. Marchesi <jemarch@gnu.org> + + librec: avoid duplication of error reporting code in rec-int.c. + * src/rec-int.c (ADD_ERROR): New macro. + (rec_int_check_rset): Use ADD_ERROR. + (rec_int_check_rset): Likewise. + (rec_int_check_record_mandatory): Likewise. + (rec_int_check_record_unique): Likewise. + (rec_int_check_record_prohibit): Likewise. + (rec_int_check_record_secrets): Likewise. + (rec_int_check_record_key): Likewise. + (rec_int_check_descriptor): Likewise. + (rec_int_merge_remote): Likewise. + +2011-11-20 Jose E. Marchesi <jemarch@gnu.org> + + librec: avoid duplication of special field names in the codebase. + * src/rec-parser.c (rec_parse_rset): Use rec_std_field_name. + + * src/rec-int.c (rec_int_check_descriptor): Use rec_std_field_name. + (rec_int_merge_remote): Likewise. + (rec_int_check_record_mandatory): Likewise. + (rec_int_check_record_unique): Likewise. + (rec_int_check_record_prohibit): Likewise. + (rec_int_check_record_key): Likewise. + + * src/rec-rset.c (rec_rset_rename_field): Use rec_std_field_name. + (rec_rset_set_type): Likewise. + (rec_rset_type): Likewise. + (rec_rset_url): Likewise. + (rec_rset_update_size_constraints): Likewise. + (rec_rset_update_field_props): Likewise. + (rec_rset_update_types): Likewise. + + * src/rec-field-name.c (rec_std_field_name_s): New structure type. + (rec_std_field_name_s): Global containing the names for the + standard fields. + (rec_std_field_name): New function. + +2011-11-19 Jose E. Marchesi <jemarch@gnu.org> + + utils: new function recutl_yesno. + * utils/recutl.c (recutl_yesno): New function. + +2011-11-19 Jose E. Marchesi <jemarch@gnu.org> + + * gnulib update, and module readline imported. + +2011-11-19 Jose E. Marchesi <jemarch@gnu.org> + + manual: document the -q,--quick command line argument in the + utilities supporting it. + * doc/recutils.texi (recsel Invocation): Documentation for the + -q,--quick command line argument. + (recdel Invocation): Likewise. + (recins Invocation): Likewise. + (recset Invocation): Likewise. + +2011-11-19 Jose E. Marchesi <jemarch@gnu.org> + + torture: tests for -q,--quick. + * torture/utils/recset.sh (multiple-records): New input file. + (recset-quick-simple): New test. + + * torture/utils/recins.sh (recins-quick-simple): New test. + + * torture/utils/recdel.sh (recdel-quick-simple): New test. + + * torture/utils/recsel.sh (recsel-quick-simple): New test. + (recsel-quick-and-sex): Likewise. + (recsel-sex-and-quick): Likewise. + (recsel-num-and-quick): Likewise. + (recsel-quick-and-num): Likewise. + +2011-11-19 Jose E. Marchesi <jemarch@gnu.org> + + recins: memory bug when several records get replaced fixed. + * utils/recins.c (recins_add_new_record): Insert copies of the new + record to insert, to cover cases where more than one record is + replaced. + +2011-11-19 Jose E. Marchesi <jemarch@gnu.org> + + utils: recset, recins, recdel and recsel adapted to support the + -q, --quick option. + * utils/recset.c (recset_process_actions): Honour + recutl_quick_str. + (recset_process_ren): Likewise. + + * utils/recins.c (recins_add_new_record): Honour recutl_quick_str. + + * utils/recdel.c (recdel_delete_records): Honour recutl_quick_str. + (recdel_parse_args): Take into account recutl_quick_str when + deciding whether a request to delete all records. + (main): Likewise. + + * src/rec-record.c (rec_record_contains_value): New function. + + * utils/recutl.h (RECORD_SELECTION_SHORT_ARGS): Updated with q:. + + * utils/recset.c: New global recutl_quick_str. + + * utils/recdel.c: New global recutl_quick_str. + (recutl_print_help): Document the usae of -q, --quick. + + * utils/recins.c: New global recutl_quick_str. + (recutl_print_help): Document the usage of -q, --quick. + + * utils/recutl.c (recutl_print_help_record_selection): Document + the usage of -q, --quick. + + * utils/recutl.h (RECORD_SELECTION_ARGS): QUICK_ARG added. + (RECORD_SELECTION_LONG_ARGS): Entry for QUICK_ARG. + (RECORD_SELECTION_ARGS_CASES): Likewise. + + * utils/recsel.c (recsel_process_data): Improve grammar in + comment. + (recutl_print_help): Document the usage of -q, --quick. + (recutl_quick_str): New global variable. + +2011-11-15 Jose E. Marchesi <jemarch@gnu.org> + + rec-init and rec-fini defined in the algol68 binding. + * algol68/rec.a68 (rec init): New procedure. + (rec fini): Likewise. + +2011-11-13 Jose E. Marchesi <jemarch@gnu.org> + + Initial work on the Algol 68 binding for librec. + * algol68/nameseed: New file. + + * Makefile.am (SUBDIRS): Recurse into algol68/ in case an Algol68 + compiler is available. + + * configure.ac: Check for the ca68 compiler. + + * algol68/Makefile.am: New file. + + * algol68/rec.a68: New file. + Define 'rec major version', 'rec minor version' and 'rec version + string'. + +2011-11-06 Jose E. Marchesi <jemarch@gnu.org> + + configure: generation of the lexer fixed. + * configure.ac: Define LEX_OUTPUT_ROOT so ylwrap can work + propertly when flex is installed. + +2011-11-03 Jose E. Marchesi <jemarch@gnu.org> + + Preparation for 1.4. + * NEWS: Updated. + + * configure.ac: Version number changed to 1.4. + +2011-11-02 Jose E. Marchesi <jemarch@gnu.org> + + Preparation for 1.3.91. + * configure.ac: Version number changed to 1.3.91. + +2011-11-02 Jose E. Marchesi <jemarch@gnu.org> + + src: endianess problem fixed in rec_encrypt/rec_decrypt. + * src/rec-utils.h: Include stdlib.h and declare rec_endian_swap. + + * src/rec-utils.c (rec_endian_swap): New function. + + * src/rec-crypt.c (rec_encrypt): Store the crc always in + little-endian. + (rec_decrypt): Restore the crc in little-endian. + +2011-11-01 Jose E. Marchesi <jemarch@gnu.org> + + * src/rec-crypt.c (rec_encrypt): Store the crc bytes in a way + independant of the endianess. + +2011-11-01 Jose E. Marchesi <jemarch@gnu.org> + + torture: portability problem with malloc.h fixed. + * torture/rec-fex/rec-fex-str.c: Include stdlib.h instead of + malloc.h to avoid problems in systems not featuring the second + header. + +2011-10-31 Jose E. Marchesi <jemarch@gnu.org> + + torture: support the running of the tests in Windows. + * torture/utils/testutils.sh: Append $EXEEXT to the utility name. + Source config.sh. + + * torture/utils/config.sh.in (EXEEXT): Make it available to the + tests. + +2011-10-31 Jose E. Marchesi <jemarch@gnu.org> + + Fixes to avoid warnings while compiling the codebase. + * src/rec-utils.c (rec_parse_regexp): Set result to NULL if there + is not match. + + * src/rec-types.c (rec_type_descr_p): Get a const char* parameter. + (rec_type_new): Likewise. + + * src/rec-rset.c (rec_rset_update_field_props): Make p and q const + char*. + + * src/rec-utils.c (rec_skip_blanks): Get a const char** parameter. + (rec_parse_regexp): Likewise. + (rec_atoi): Likewise. + (rec_atod): Likewise. + (rec_extract_file): Likewise. + (rec_extract_url): Likewise. + (rec_extract_type): Likewise. + (rec_parse_int): Likewise. + (rec_extract_size_condition): Likewise. + + * src/rec-rset.c (rec_rset_type_field_p): Make local pointer p + const. + + * src/rec-writer.c (rec_write_record): Return + rec_write_record_with_rset. + (rec_write_field): Likewise with rec_write_field_with_rset. + + * utils/recset.c (recset_process_actions): Parenthesis around && + and || added. + * utils/recdel.c (recdel_delete_records): Likewise. + + * utils/mdb2rec.c (process_table): Use column_name instead of + col->name. + + * utils/recfix.c (recfix_do_crypt): Unused variable elem_record + removed. + (main): Unused variable db removed. + + * utils/recutl.c: Include sys/stat.h. + +2011-10-31 Jose E. Marchesi <jemarch@gnu.org> + + torture: fix warnings in the rec-mset unit tests. + * torture/rec-mset/elem-types.h (type1_disp): Free s instead of + the void pointer. + (type2_disp): Likewise. + +2011-10-31 Jose E. Marchesi <jemarch@gnu.org>a + + Examples sections removed from the --help outputs. + * utils/csv2rec.c (recutl_print_help): Examples removed from + --help output. + * utils/recset.c (recutl_print_help): Likewise. + * utils/recsel.c (recutl_print_help): Likewise. + * utils/recins.c (recutl_print_help): Likewise. + * utils/recinf.c (recutl_print_help): Likewise. + * utils/recfmt.c (recutl_print_help): Likewise. + * utils/recdel.c (recutl_print_help): Likewise. + * utils/rec2csv.c (recutl_print_help): Likewise. + * utils/mdb2rec.c (recutl_print_help): Likewise. + +2011-10-31 Jose E. Marchesi <jemarch@gnu.org> + + gnulib update. + +2011-10-30 Jose E. Marchesi <jemarch@gnu.org> + + configure: do not require flex and bison at build time. + * utils/recdel.c: Include xalloc.h. + + * configure.ac: Use gl_BISON instead of AM_PROG_YACC. + +2011-10-30 Jose E. Marchesi <jemarch@gnu.org> + + Don't run tests associated with confidential fields when building + the tools without crypt support. + * .gitignore: torture/utils/config.sh added. + + * torture/utils/recfix.sh: include config.sh and test the + encryption support only if the utilities were built with that + support. + + * configure.ac: Generate torture/utils/config.sh + + * torture/utils/config.sh.in: New file. + + * configure.ac (REC_CRYPT_SUPPORT): Define and subst + CRYPT_SUPPORT. + +2011-10-30 Jose E. Marchesi <jemarch@gnu.org> + + Fixes for problems detected by the clang analyzer. + * src/rec-sex.c (rec_sex_eval_node): Take care about possible + divisions by zero when evaluating / and %. + + * utils/csv2rec.c (main): Unused local variable 'out' removed. + + * utils/recfmt.c (recfmt_process_db): Use rset_size to avoid + calculating the size of the rset at every iteration. + + * torture/rec-comment/rec-comment-set-text.c + (rec_comment_set_text_nominal): Use new version of + rec_comment_set_text. + + * src/rec-comment.c (rec_comment_set_text): Get a pointer to + comment in order to set its value. + + * src/rec-mset.c (rec_mset_remove_at): Unused local elem_type + removed. + + * src/rec-parser.c (rec_parser_perror): Usage of uninitialized + pointer fixed. + +2011-10-30 Jose E. Marchesi <jemarch@gnu.org> + + Preparation for 1.3.90. + * NEWS: Updated for 1.3.90. + + * configure.ac: Version updated to 1.3.90. + +2011-10-30 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi (recsel Encryption): Written. + (recins Encryption): Written. + +2011-10-29 Jose E. Marchesi <jemarch@gnu.org> + + manual: documentation for %confidential fields. + * doc/recutils.texi (%confidential): Written. + +2011-10-27 Jose E. Marchesi <jemarch@gnu.org> + + Don't allow several %sort entries in record descriptors. + * doc/recutils.texi (%sort): Document that only one %sort per + record descriptor is allowed. + + * torture/utils/recfix.sh (recfix-sort-several-fields-invalid): + New test. + + * src/rec-int.c (rec_int_check_descriptor): It is an error to have + several %sort fields in a record descriptor. + +2011-10-27 Jose E. Marchesi <jemarch@gnu.org> + + manual: documentation for %sort. + * doc/recutils.texi (%sort): Written. + +2011-10-26 Jose E. Marchesi <jemarch@gnu.org> + + manual: documenttion for %mandatory, %prohibit, %unique, %key and + %auto rewritten. + * doc/recutils.texi (%mandatory and %prohibit): Written. + (%unique and %key): Written. + (%auto): Improved and relocated. + +2011-10-25 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi (Record Descriptors): Reworked and simplified. + +2011-10-16 Jose E. Marchesi <jemarch@gnu.org> + + syntax fixes. + * utils/recdel.c: Don't include xalloc.h. + + * .x-sc_prohibit_undesirable_word_seq: New file. + + * .x-sc_prohibit_strings_without_use: New file. + + * .x-sc_prohibit_path_max_allocation: New file. + + * .x-sc_prohibit_doubled_word: Ignored lib/*. + + * README-dev: Spell file systme. + +2011-10-13 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi (Comments): Relocated. + (Fields and Records): Matusalen -> Matusalem. + +2011-10-13 Jose E. Marchesi <jemarch@gnu.org> + + manual: document the encryption options in recsel and recins. + * doc/recutils.texi (recsel Invocation): Global options added, + including a description of the --password argument. + (recins Invocation): Document --password. + (recins Invocation): Document --case-insensitive. + +2011-10-12 Jose E. Marchesi <jemarch@gnu.org> + + torture: tests for the --sort operation of recfix. + * torture/utils/recfix.sh (recfix-sort-ints): New test. + (recfix-sort-ranges): New test. + (recfix-sort-reals): New test. + (recfix-sort-lex): New test. + (recfix-sort-dates): New test. + (recfix-sort-booleans): New test. + +2011-10-11 Jose E. Marchesi <jemarch@gnu.org> + + * README-dev: URL to the git repo updated. + +2011-10-07 Jose E. Marchesi <jemarch@gnu.org> + + recfix: manage --encrypt when there are already encrypted fields + in the database. + * torture/utils/recfix.sh (recfix-encrypt-already-encrypted): New + test. + (recfix-encrypt-already-encrypted-force): New test. + + * utils/recfix.c (recfix_do_crypt): Emit an error if an already + encrypted field is found, unless --force was specified in the + command line. + (recutl_print_help): --force documented. + (recfix_parse_args): Recognize --force. + + * src/rec-crypt.c (rec_encrypt_field): Make sure the field is not + already encrypted before encrypting it. + +2011-10-07 Jose E. Marchesi <jemarch@gnu.org> + + utils: typo fixed in help string. + * utils/recsel.c (recutl_print_help): Typo in help string fixed. + +2011-10-06 Jose E. Marchesi <jemarch@gnu.org> + + build: documentation of dependencies updated. + * README-dev: Dependency on libgcrypt documented. + +2011-10-05 Jose E. Marchesi <jemarch@gnu.org> + + manual: little fix. + * doc/recutils.texi (mdb2rec Examples): Example fixed. Reported by + Sven Wick. + +2011-10-04 Jose E. Marchesi <jemarch@gnu.org> + + torture: tests for the --encrypt and --decrypt options of recfix. + * torture/utils/recfix.sh (recfix-encrypt): New test. + (recfix-encrypt-password-long): Likewise. + (recfix-encrypt-without-password): Likewise. + (recfix-encrypt-password-before-operation): Likewise. + (recfix-decrypt-invalid-password): Likewise. + +2011-10-03 Jose E. Marchesi <jemarch@gnu.org> + + torture: tests for the --check operation of recfix regarding + encryption, and some fixes. + * src/rec-int.c (rec_int_check_record_secrets): Return the number + of errors that occurred while checking the integrity. + + * torture/utils/recfix.sh (recfix-with-operation): New test. + (recfix-confidential): Likewise. + (recfix-invalid-confidential): Likewise. + (recfix-confidential-with-unencrypted-fields): Likewise. + +2011-10-03 Jose E. Marchesi <jemarch@gnu.org> + + manual: documentation for recfix updated. + * doc/recutils.texi (recfix Invocation): Documentation for the new + synopsis of recfix, including a description of all the supported + operations. + (recfix Examples): Add more examples covering the several + supported operations. + +2011-10-03 Jose E. Marchesi <jemarch@gnu.org> + + * utils/recfix.c (recfix_do_crypt): Don't check integrity before + doing an en/decryption operation. + +2011-10-03 Jose E. Marchesi <jemarch@gnu.org> + + librec: more encryption related routines, and encryption support + in recfix. + * utils/recfix.c (recfix_do_crypt): Use rec_decrypt_record. + + * src/rec-crypt.c (rec_decrypt_record): New function. + + * src/rec-writer.c (rec_write_field_with_rset): Use + rec_decrypt_field. + + * src/rec-crypt.c (rec_decrypt_field): New function. + + * utils/recfix.c (recfix_do_crypt): Adapted to the new semantics + of rec_encrypt_record. + * utils/recins.c (recins_insert_record): Likewise. + (recins_add_new_record): Likewise. + + * src/rec-crypt.c (rec_encrypt_field): New function. + (rec_encrypt_record): Use rec_encrypt_field. + +2011-09-30 Jose E. Marchesi <jemarch@gnu.org> + + * utils/recins.c (recins_insert_record): Use rec_encrypt_record. + (recins_encrypt_fields): Function removed. + + * src/rec-crypt.c (rec_encrypt_record): New function. + + * utils/recfix.c (main): Invoke the recfix_do_* functions + depending on the selected operation. + (recfix_do_check): New function. + (recfix_check_database): Renamed from recfix_process_data. + (recfix_parse_args): Made static, and adapted to use the new + recfix_do_* functions. + (recfix_do_sort): New function. + +2011-09-30 Jose E. Marchesi <jemarch@gnu.org> + + build: install lisp files in the proper directory. + * etc/Makefile.am: Install rec-mode.el in the proper place, and + use the dist_ prefix instead of the EXTRA_DIST automake variable. + Suggested by Ludovic Courtes. + +2011-09-19 Jose E. Marchesi <jemarch@gnu.org> + + lib: missing sorting cases added. + * src/rec-rset.c (rec_rset_record_compare_fn): Date sorting + algorithm fixed. + (rec_rset_record_compare_fn): Real sorting implemented. + (rec_rset_record_compare_fn): Likewise for booleans. + +2011-09-11 Jose E. Marchesi <jemarch@gnu.org> + + manual: argument description fixed. + * doc/recutils.texi (Common Options): The description of the '--' + option was truncated. Fixed. + +2011-09-04 Jose E. Marchesi <jemarch@gnu.org> + + recfix: normalise invocation to allow more commands. + * utils/recfix.c: New type recfix_op. + (recutl_print_help): Adapted to the new synopsis of recfix. + (recutl_print_help): Don't include examples in the --help output. + +2011-09-01 Jose E. Marchesi <jemarch@gnu.org> + + build: linking with libgcrypt fixed. + * src/Makefile.am (librec_la_LIBADD): Link with $LTLIBGCRYPT if + compiling with encryption support. + * utils/Makefile.am (COMMONLIBS): Likewise. + +2011-08-28 Jose E. Marchesi <jemarch@gnu.org> + + crypt: fix build with crypt support disabled. + * src/rec-rset.c (rec_rset_get_props): Update confidential_p only + if compiling with encryption support. + +2011-08-28 Jose E. Marchesi <jemarch@gnu.org> + + recfix: check for non-encrypted confidential fields. + * src/rec-int.c: Copyright year updated. + (rec_int_check_record): Call rec_int_check_record_secrets. + (rec_int_check_record_secrets): New function. + +2011-08-28 Jose E. Marchesi <jemarch@gnu.org> + + lib: regression affecting auto fields fixed. + * utils/recins.c (recins_add_new_record): Fix regression causing + the loosing of the auto fields. + (recins_add_new_record): Avoid memory leak destroying + recins_record. + + * src/rec-rset.c (rec_rset_get_props): Initialize confidential_p + to false. + +2011-08-28 Jose E. Marchesi <jemarch@gnu.org> + + crypt: support for CRC and encrypted prefix. + * src/rec-crypt.c: Include crc.h. + (rec_decrypt): Check the CRC of decrypted data. + (rec_encrypt): Append the CRC when encrypting. + +2011-08-28 Jose E. Marchesi <jemarch@gnu.org> + + gnulib: imported module crc. + * lib/crc.c: Imported from gnulib. + * lib/crc.h: Likewise. + +2011-08-28 Jose E. Marchesi <jemarch@gnu.org> + + * src/rec-writer.c (rec_write_record_with_rset): New function. + (rec_write_field_with_rset): New function. + + * utils/recsel.c (recsel_process_data): Set the password of the + writer, if specified on the command line. + + * src/rec-writer.c (rec_writer_new): Initialize the password field + of the writer structure. + (rec_writer_destroy): Free the memory used by the password, if + any. + (rec_writer_set_password): New function. + + * utils/recsel.c (recutl_print_help): Support the -s, --password + option. + (recsel_parse_args): Likewise. + + * src/rec-crypt.c (rec_decrypt): New function. + +2011-08-27 Jose E. Marchesi <jemarch@gnu.org> + + * utils/recins.c: Include base64.h. + + * gnulib base64 module imported. + +2011-08-26 Jose E. Marchesi <jemarch@gnu.org> + + * src/Makefile.am (librec_la_SOURCES): Compile rec-crypt.c if + encryption is supported. + + * src/rec-crypt.c: New file. + + * utils/recins.c (recins_encrypt_fields): New function. + + * src/rec-rset.c (rec_rset_confidential): New function. + + * utils/recins.c: New variable recins_password. + (recutl_print_help): Document -s,--password. + (recins_parse_args): Set recins_password. + + * src/rec-utils.c (rec_encrypt): New function. + (rec_decrypt): New function. + (rec_passphrase_cb): New function. + + * src/rec-utils.c: Include gcrypt.h. + + * src/rec-int.c (rec_int_check_descriptor): Check for the value of + %confidential entries. + + * src/rec-rset.c (rec_rset_rename_field): Rename field names in + %confidential fields. + (rec_rset_update_field_props): Set the confidential property of + fields. + +2011-08-25 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi (recfmt Templates): Typo fixed. + +2011-08-24 Jose E. Marchesi <jemarch@gnu.org> + + * doc/recutils.texi (Introduction): Comment about YAML. + +2011-08-24 Jose E. Marchesi <jemarch@gnu.org> + + * configure.ac: Complain if flex or bison are not found and exit. + +2011-08-24 Jose E. Marchesi <jemarch@gnu.org> + + * Time-stamp marks removed from the entire codebase and syntax + checks fixes. + +2011-08-15 Thien-Thi Nguyen <ttn@gnuvola.org> (tiny change) + + librec: Don't #include <config.h> in rec.h. + * src/rec.h: Don't #include <config.h>. + +2011-08-05 Jose E. Marchesi <jemarch@gnu.org> + + librec: acknowledge %sort entries when renaming fields. + * src/rec-rset.c (rec_rset_rename_field): Rename fields used as + sorting criteria in %sort: entries. + + * torture/utils/recset.sh: Tests renaming fields updated to cover + %sort entries. + +2011-08-05 Jose E. Marchesi <jco@terma.com> + + * etc/ob-rec.el (org-babel-execute:rec): Separate header when + generating tables. + (org-babel-execute:rec): Generate raw data when executed with + results: verbatim. + +2011-08-05 Jose E. Marchesi <jemarch@gnu.org> + + ob-rec: support for :sort and minor fixes. + * etc/ob-rec.el (org-babel-execute:rec): Support for :sort added. + (org-babel-execute:rec): Emit rec data, and not csv, when executed + with results: scalar, html or code. + +2011-07-29 Jose E. Marchesi <jemarch@gnu.org> + + librec: sorting by date values implemented. + * src/rec-rset.c (rec_rset_record_compare_fn): Sorting by date + value implementing. + + * src/rec-sex.c (rec_sex_eval_node): Use rec_timespec_subtract. + + * src/rec-utils.c (rec_timespec_subtract): Moved from rec-sex.c. + +2011-07-28 Jose E. Marchesi <jemarch@gnu.org> + + manual: documentation for %sort and %typedef. + * doc/recutils.texi (Record Descriptors): Document %typedef in the + list of special fields. + (Record Descriptors): Likewise for %sort. + (recsel Invocation): Document -S,--sort. + (rec2csv Invocation): Likewise. + +2011-07-21 Jose E. Marchesi <jemarch@gnu.org> + + manual: documentation for the sorting option of recfix. + * doc/recutils.texi (recfix Invocation): Synopsis fixed. + (recfix Invocation): Document the --sort operation. + (recfix Examples): Example of --sort added. + +2011-07-21 Jose E. Marchesi <jemarch@gnu.org> + + recfix: support the phisical sort operation. + * utils/recfix.c (main): Use recutl_read_db_from_file. + (recfix_parse_args): Set the value of recfix_file from the command + line and complain if no file was provided. + (recutl_print_help): Document the new usage of the command. + (recutl_print_help): Documnt the --sort option. + (recfix_parse_args): Manage --sort. + (main): Update the rec file if an operation requires it. + +2011-07-21 Jose E. Marchesi <jemarch@gnu.org> + + librec: check the integrity of %sort entries, and tests. + * torture/utils/recfix.sh (recfix-sortcheck-valid): New test. + (recfix-sortcheck-with-blanks): Likewise. + (recfix-sortcheck-invalid-empty): Likewise. + (recfix-sortcheck-invalid-field-name): Likewise. + + * src/rec-int.c (rec_int_check_descriptor): Make sure that %sort + fields have correct values. + +2011-07-21 Jose E. Marchesi <jemarch@gnu.org> + + librec: options -S,--sort supported in recsel and rec2csv. + * utils/rec2csv.c (recutl_print_help): Documentation for + --sort,-S. + (rec2csv_parse_args): Manage --sort, -S. + + * utils/recsel.c: New command-line argument --sort, -S. + (recutl_print_help): Documentation for --sort, -S. + (recsel_parse_args): Manage -S. + + * doc/recutils.texi (recinf Invocation): -S is not like + --print-sexps anymore. + + * utils/recutl.c (recutl_sorting_parser): Get a field name as a + sorting criteria. + + * src/rec-rset.c (rec_rset_update_field_props): %sort only has an + effect if order_by_field is not already set in the record set. + + * src/rec-parser.c (rec_parser_new): Initialize order_by_field to + NULL. + (rec_parser_set_order_by_field): New function. + + * src/rec-rset.c: New function. + (rec_rset_order_by_field): New function. + +2011-07-19 Jose E. Marchesi <jemarch@gnu.org> + + librec: record sorting implementation, and tools adjusted. + * utils/recsel.c (main): Likewise. + + * utils/recfmt.c (main): Likewise. + + * utils/rec2csv.c (main): Call recutl_sorting_parser with the + appropriate value. + + * utils/recutl.c (recutl_sorting_parser): New function. + + * utils/recutl.c (recutl_parse_db_from_file): Set the ordered + attribute of the parser to the value of the global recutl_sort_p. + + * src/rec-parser.c (rec_parser_new): Initialise ordered_p to + false. + (rec_parser_set_ordered): New function. + (rec_parser_ordered): New function. + (rec_parse_rset): Set the ordered attribute of the newly created + record set to the desired value. + + * src/rec-rset.c: New structure rec_rset_comment_s. + (rec_rset_elem_comment_new): Use rec_rset_comment_s. + (rec_rset_elem_comment): Likewise. + (rec_rset_comment_disp_fn): Likewise. + (rec_rset_comment_dup_fn): Likewise. + (rec_rset_set_ordered): New function. + (rec_rset_ordered): New function. + (rec_rset_insert_at): Insert sorting only if ordered_p. + (rec_rset_append): Likewise. + (rec_rset_append_record): Likewise. + (rec_rset_insert_after): Likewise. + (rec_rset_dup): Copy ordered_p. + +2011-07-19 Jose E. Marchesi <jco@terma.com> + + librec: use mset_add_sort in all record inserting operations in + rec-rset. + * src/rec-rset.c (rec_rset_insert_at): If the rset has a sort by + field and the element to be inserted is a record, insert it using + the sorting criteria instead of the requested location. + (rec_rset_append): Likewise. + (rec_rset_insert_after): Likewise. + +2011-07-18 Jose E. Marchesi <jemarch@gnu.org> + + librec: initial support for %sort. + * src/rec-rset.c (rec_rset_comment_compare_fn): New function. + (rec_rset_record_compare_fn): New function. + (rec_rset_update_field_props): Manage the %sort special field. + + * src/rec-record.c (rec_record_new): Pass NULL for the compare + function to rec_mset_register_type. + + * src/rec-mset.c (rec_mset_add_sorted): New function. + (rec_mset_new): Initialize the compare_fn function for types to + NULL. + (rec_mset_dup): Make a copy of compare_fn. + (rec_mset_register_type): Get a compare_fn argument. + (rec_mset_elem_compare_fn): New function. + + * src/rec-mset.h: New type rec_mset_compare_fn_t. + + * src/rec-rset.c: New attribute 'order_by_field' in struct + rec_rsets. + New structure rec_rset_record_s. + (rec_rset_new): Initialise the order by field name to NULL. + (rec_rset_destroy): Destroy the order by field name if it exists + in the record set. + (rec_rset_dup): Care about the order by field, if any. + (rec_rset_append_record): Use rec_mset_add_sorted to add the + record to the mset if there is a sort by field. + (rec_rset_elem_record_new): Insert a rec_rset_record_t instead of a + rec_record_t in the mset. + (rec_rset_record_disp_fn): Destroy a rec_rset_record_t structure, + including the contained record. + (rec_rset_record_dup_fn): Dup a rec_rset_record_t structure, + including the contained record. + +2011-07-17 Jose E. Marchesi <jemarch@gnu.org> + + torture: system tests for typedefs. + * torture/utils/recfix.sh (typedef-valid): New input file. + (typedef-valid-xfail): Likewise. + (typedef-valid-with-blanks): Likewise. + (typedef-valid-with-blanks-xfail): Likewise. + (typedef-valid-order): Likewise. + (typedef-valid-order-xfail): Likewise. + (typedef-valid-chain): Likewise. + (typedef-valid-chain-xfail): Likewise. + (typedef-valid-multiple): Likewise. + (typedef-valid-multiple-xfail): Likewise. + (typedef-invalid-bad-type): Likewise. + (typedef-invalid-chain-undefined): Likewise. + (typedef-invalid-chain-loop): Likewise. + (recfix-typedef-valid): New test. + (recfix-typedef-valid-xfail): Likewise. + (recfix-typedef-valid-with-blanks): Likewise. + (recfix-typedef-valid-with-blanks-xfail): Likewise. + (recfix-typedef-valid-order): Likewise. + (recfix-typedef-valid-order-xfail): Likewise. + (recfix-typedef-valid-chain): Likewise. + (recfix-typedef-valid-chain-xfail): Likewise. + (recfix-typedef-valid-multiple): Likewise. + (recfix-typedef-valid-multiple-xfail): Likewise. + (recfix-typedef-invalid-bad-type): Likewise. + (recfix-typedef-invalid-chain-undefined): Likewise. + (recfix-typedef-invalid-chain-loop): Likewise. + +2011-07-17 Jose E. Marchesi <jemarch@gnu.org> + + manual: documentation for %typedef. + * doc/recutils.texi (Field Types): Rewritten to introduce field + types in a clearer way. + (Declaring types): New section. + (Type descriptions): New section. + (Escalar types): Rewritten as a subsection. + (String types): Likewise. + (Enumerated types): Likewise. + (Other types): Likewise. + (Types and fields): New section. + +2011-07-17 Jose E. Marchesi <jemarch@gnu.org> + + librec: support for synonyms in type registries. + * src/rec-rset.c (rec_rset_update_types): Manage the declaration + of synonyms in %typedef entries. + + * src/rec-types.c: New struct rec_type_reg_entry_s. + (rec_type_reg_destroy): Adapted to the new structure of type + registry entries. + (rec_type_reg_add): Likewise. + (rec_type_reg_get): Likewise. + (rec_type_reg_add_synonym): New function. + + * src/rec-int.c (rec_int_check_descriptor): Check for the + existance of referred named types. + +2011-07-17 Jose E. Marchesi <jemarch@gnu.org> + + librec: support for %typedef. + * src/rec-int.c (rec_int_check_descriptor): Verify %typedef + entries. + + * src/rec-types.c: REC_TYPE_NAME_RE renamed to REC_TYPE_CLASS_RE + to not collide with the macro of the same name defined in rec.h. + + * src/rec.h (REC_TYPE_NAME_RE): New constant. + + * src/rec-int.c (rec_int_check_descriptor): Accept type names in + type descriptions. + + * src/rec-rset.c (rec_rset_rename_field): Update field props after + the rename of a field. + (rec_rset_update_types): Rewritten to process %typedef entries. + (rec_rset_type_field_p): Allow %type entries with named types. + +2011-07-16 Jose E. Marchesi <jemarch@gnu.org> + + librec: manage anonymous types using the fields props structures. + * src/rec-rset.c (rec_rset_new): Create an empty types registry. + + * src/rec-types.c: Data structures storing the associations + removed. + (rec_type_reg_destroy): Assocs code removed. Destroy the types. + (rec_type_reg_assoc): Deleted. + (rec_type_reg_assoc_anon): Deleted. + (rec_type_reg_field_type): Deleted. + + * src/rec-int.c (rec_int_check_field_type): Use + rec_rset_get_field_name instead of the type registry of the rset. + (rec_int_check_descriptor): Likewise. + + * src/rec-rset.c (rec_rset_update_field_props): Renamed from + rec_rset_update_auto_fields. + (rec_rset_get_field_type): Use the field properties to find and + return the type of a given field. + (rec_rset_update_field_props): Update type properties in the field + props. + +2011-07-16 Jose E. Marchesi <jemarch@gnu.org> + + librec: manage auto fields with the new fields properties + structure in record sets. + * utils/recins.c (recins_add_auto_fields): rec_rset_auto now + returns the auto fields in the right order, so no need to reverse + it. + + * src/rec-rset.c: New structure rec_rset_fprops_s to hold the + properties of a field. + New field field_props in the rec_rset_s struct. + (rec_rset_new): Initialise field_props to NULL. + (rec_rset_get_props): New function. + (rec_rset_update_auto_fields): Update field_props instead of the + auto_fields fex. + (rec_rset_auto): Build a fex from the contents of field_props and + return it. + (rec_rset_destroy): Destroy field_props. + +2011-07-16 Jose E. Marchesi <jemarch@gnu.org> + + torture: type-reg tests adapted. + * torture/rec-type-reg/rec-type-reg-assoc-anon.c: Renamed from + rec-type-reg-register.c, and adapted to the new semantics. + + * torture/rec-type-reg/rec-type-reg-get.c: Adapted to the new + semantics of rec_type_reg_get. + +2011-07-15 Jose E. Marchesi <jemarch@gnu.org> + + librec: support for named types in type registries. + * src/rec-rset.c (rec_rset_get_field_type): Likewise. + + * src/rec-int.c (rec_int_check_field_type): Use + rec_type_reg_get_type instead of rec_type_reg_get. + (rec_int_check_descriptor): Likewise. + + * src/rec-types.c (rec_type_reg_add): New function. + (rec_type_reg_assoc_anon): Renamed from rec_type_reg_register. + (rec_type_reg_assoc): New function. + (rec_type_reg_get): New function. + (rec_type_reg_assoc): Renamed from rec_type_reg_get and adapted to + use the new registry internal structure. + +2011-07-14 Jose E. Marchesi <jemarch@gnu.org> + + librec: attribute 'name' for types. + * torture/rec-type/tsuite-rec-type.c (tsuite_rec_type): Test cases + for rec_type_name and rec_type_set_name added. + + * torture/rec-type/rec-type-name.c: New file. + (rec_type_name_anonymous): New test. + (rec_type_name_nominal): New test. + + * torture/rec-type/rec-type-set-name.c: New file. + (rec_type_set_name_nominal): New test. + + * src/rec-types.c: New field 'name' in struct rec_type_s to hold + the name of the type, or NULL for an anonymous type. + (rec_type_name): New function. + (rec_type_set_name): New function. + (rec_type_new): Initialize the name to NULL. + (rec_type_new): type_name_str renamed to type_kind_str to avoid + confusion. + (rec_type_destroy): Deallocate type->name upon destruction. + +2011-07-14 Jose E. Marchesi <jemarch@gnu.org> + + librec: improvements in the api of rec_type. + * torture/rec-type/rec-type-check.c: Changed to use the new + rec_type_* API. + * torture/rec-type/rec-type-descr-p.c: Likewise. + * torture/rec-type-reg/rec-type-reg-get.c: Likewise. + * torture/rec-type-reg/rec-type-reg-register.c: Likewise. + * torture/rec-type/rec-type-new.c: Likewise. + * torture/rec-type/rec-type-kind-str.c: Likewise. + * torture/rec-type/rec-type-kind.c: Likewise. + * torture/rec-type/rec-type-equal-p.c: Likewise. + * torture/rec-type/rec-type-destroy.c: Likewise. + + * torture/rec-type/tsuite-rec-type.c: Tests for rec_type_descr_fex + and rec_type_descr_type removed. + + * src/rec-rset.c (rec_rset_type_field_type): New function. + (rec_rset_rename_field): Use rec_rset_type_field_type instead of + rec_type_descr_type. + + * src/rec-types.c: rec_type_descr_fex function removed. + * src/rec.h: Likewise. + + * src/rec-rset.c (rec_rset_update_types): Parse the list of fields + before invoking rec_type_new while processing %type: special + fields. + (rec_rset_type_field_p): New function. + (rec_rset_update_types): Use rec_rset_type_field_p instead of + rec_type_descr_p. + (rec_rset_rename_field): Likewise. + (rec_rset_type_field_fex): New function. + (rec_rset_rename_field): Use rec_rset_type_field_fex instead of + rec_type_descr_fex. + (rec_rset_update_types): Likewise. + + * src/rec-int.c (rec_int_check_descriptor): Likewise. + + * src/rec-types.c (rec_type_new): Do not expect the list of field + names in the STR parameter. + + * src/rec-utils.c (rec_parse_regexp): Don't store the result of + the parsing in 'result' if it is NULL. + +2011-06-21 Jose E. Marchesi <jco@terma.com> + + build: get offline builds working again. + * man/Makefile.am (rec2csv.1): Use $(builddir) to get offline + builds working. + (csv2rec.1): Likewise. + (mdb2rec.1): Likewise. + (recdel.1): Likewise. + (recfix.1): Likewise. + (recinf.1): Likewise. + (recins.1): Likewise. + (recsel.1): Likewise. + (recset.1): Likewise. + (recfmt.1): Likewise. + + * .gitignore: build-aux/config.guess, build-aux/config.sub. + +2011-06-19 Jose E. Marchesi <jemarch@gnu.org> + + utils: avoid the truncation of the result of getopt_long in + architectures featuring unsigned chars. + * utils/recfix.c (recfix_parse_args): 'ret' shall be an integer to + not truncate the -1 returned by getopt_long in architectures + featuring unsigned chars. + * utils/recsel.c (recsel_parse_args): Likewise. + * utils/recinf.c (main): Likewise. + * utils/recfmt.c (recfmt_parse_args): Likewise. + +2011-06-19 Jose E. Marchesi <jemarch@gnu.org> + + m4: files installed by libtool removed. They were causing a clash + on some systems shipping old versions of libtool. + * m4/ltoptions.m4: Deleted. + +2011-06-17 Jose E. Marchesi <jemarch@gnu.org> + + recins: create the specified file if it does not exist. + * doc/recutils.texi (recins Invocation): recins will create a new + file if it does not exist. + + * utils/recset.c (main): Likewise. + + * utils/recdel.c (main): Print an error message if the file could + not be opened. + + * utils/recutl.c (recutl_read_db_from_file): Return NULL if the + file could not be opened. + + * utils/recins.c (main): If the specified file does not exist then + create and populate an empty database. + +2011-06-17 Jose E. Marchesi <jemarch@gnu.org> + + recins: generate parseable dates that are locale independent. + * utils/recins.c: Include locale.h. + (recins_add_auto_field_date): Set the LC_TIME locale setting to + "C" before calling strftime and restore it to the environment + value afterwards. + +2011-06-09 Jose E. Marchesi <jemarch@gnu.org> + + ob-rec.el is not part of Emacs. + * etc/ob-rec.el: Not part of Emacs yet. + +2011-06-09 Jose E. Marchesi <jemarch@gnu.org> + + gitignore updated. + * .gitignore: Several entries added to the ignore list. + +2011-05-24 Jose E. Marchesi <jemarch@gnu.org> + + On MAC OS X, GNU libtoolize is named 'glibtoolize'. + * autogen.sh: Use glibtoolize instead of libtoolize in Darwin + systems. Reported and fixed by Sven Wick. + +2011-05-18 Jose E. Marchesi <jemarch@gnu.org> + + Updates to the FSD file. + * FSD (Version): Updated to 1.3 + (MaturityLevel): Updated to Production. + (HelpList): New entry. + +2011-05-16 Jose E. Marchesi <jemarch@gnu.org> + + Fix size constraint handling on LP64 systems. Patch sent by Daiki + Ueno. + +2011-05-10 Jose E. Marchesi <jemarch@termi> + + Tasktool operations. + * TODO: Task 25 resolved to 'DONE'. + Task 35 created. + +2011-05-10 Jose E. Marchesi <jemarch@gnu.org> + + librec: support for double quotes for delimiting string literals, + and unescaped newline characters. + * torture/utils/recsel.sh (recsel-sex-string-single-quote): New + test. + (recsel-sex-string-double-quote): New test. + (recsel-sex-string-multiline): New test. + + * doc/recutils.texi (SEX Operands): Description of string literals + updated to cover the usage of " as a delimiter and the support for + non-scaped newline characters. + + * src/rec-sex-lex.l: Regular expression for string literals + changed to support both ' and " style quotes and to support + newline characters. + +2011-05-05 Jose E. Marchesi <jemarch@gnu.org> + + Remove unneeded library linkages. Problem reported by Sven Wick. + * utils/Makefile.am (mdb2rec_LDADD): Don't link mdb2rec with glib + in a direct way. + (COMMONLIBS): Don't link the utilities with libgnu.la. + + * torture/Makefile.am (runtests_LDADD): Typo fixed: CHECK_LIBS to + CHECKLIBS. + + * src/Makefile.am (librec_la_LIBADD): Link with libcurl only if + the REMOVE_ESCRIPTORS automake conditional is set. + + * configure.ac: Avoid automatic linking with libcurl by specifying + an action for library-if-found in AC_CHECK_LIB. + Same for libcheck. + Subst CHECKLIBS. + +2011-05-04 Jose E. Marchesi <jemarch@gnu.org> + + ob-rec.el imported in the repo. + * etc/ob-rec.el: New file. + +2011-03-23 Jose E. Marchesi <jemarch@gnu.org> + + readme: added note about year intervals in the copyrights. + * README: The GNU maintainers guide asks to include an explicit + statement explaining the usage of year intervals in the copyright + notifications. + +2011-02-11 Jose E. Marchesi <jemarch@gnu.org> + + Preparation for 1.3. + * .gitignore: Trailing empty line removed. + + * configure.ac: Version changed to 1.3. + +2011-02-11 Jose E. Marchesi <jemarch@gnu.org> + + Translations updated. + * po/de.po: Updated from the translation project. + * po/fi.po: Likewise. + * po/nl.po: Likewise. + * po/sv.po: Likewise. + +2011-02-09 Jose E. Marchesi <jemarch@gnu.org> + + Documentation for %size. + * doc/recutils.texi (Record Descriptors): Documentation of the + %size special field. + +2011-02-09 Jose E. Marchesi <jemarch@gnu.org> + + Tests for the %size special field. + * torture/utils/recfix.sh: New input files size-invalid-1, + size-invalid-2, size-exact-zero, size-exact-zero-invalid, + size-exact, size-exact-invalid, size-less, size-less-invalid, + size-less-equal, size-less-equal-invalid, size-bigger, + size-bigger-invalid, size-bigger-equal and + size-bigger-equal-invalid. + (recfix-size-invalid-1): New test. + (recfix-size-invalid-2): New test. + (recfix-size-exact-zero): New test. + (recfix-size-exact-zero-invalid): New test. + (recfix-size-exact): New test. + (recfix-size-exact-invalid): New test. + (recfix-size-less): New test. + (recfix-size-less-invalid): New test. + (recfix-size-less-equal): New test. + (recfix-size-less-equal-invalid): New test. + (recfix-size-bigger): New test. + (recfix-size-bigger-invalid): New test. + (recfix-size-bigger-equal): New test. + (recfix-size-bigger-equal-invalid): New test. + +2011-02-08 Jose E. Marchesi <jemarch@gnu.org> + + portability fix for macos x. + * torture/rec-type/rec-type-descr-type.c: Include stdlib.h for + malloc, not malloc.h. Macos X does not provide malloc.h + +2011-02-08 Jose E. Marchesi <jemarch@gnu.org> + + manual: several texinfo fixes and improvements. + * doc/recutils.texi: Use @dots{}. + Use @: after i.e. and e.g. to avoid texinfo to insert double + spacing. + (recfmt Examples): Fix incomplete statement. + Use @var{} for all the parameters in synopsis. + +2011-02-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> + + Fix typos and nits in the manual. + * doc/recutils.texi (Introduction, Record Descriptors) + (SEX Operands, recsel Invocation, recset Invocation) + (recfix Examples, recfmt Templates, rec2csv Conversion): + Fix typos, add a few @noindent's. + +2011-02-08 Jose E. Marchesi <jemarch@gnu.org> + + warnings fixed in the codebase. + * src/rec-utils.c (rec_extract_size): Cast the second argument to + rec_parse_int from size_t* to int*. + + * src/rec-rset.c (rec_rset_update_size_constraints): Unused + variable record_elem removed. + (rec_rset_source): Unused variable rset_elem removed. + + * src/rec-int.c (rec_int_merge_remote): Return 0. + (rec_int_check_descriptor): Unused variables size_max, size_min, + size and invalid_sizes removed. + + * utils/recins.c (recins_add_new_record): Unused variables + errors_str_size, errors_str and errors_buf removed. + (recins_add_auto_field_int): Unused variable new_field removed. + + * utils/recdel.c (recdel_delete_records): Unused variable + 'errors_buf' removed. + + * utils/recfmt.c (recfmt_apply_template): Unused variable 'n' + removed. + + * utils/rec2csv.c (rec2csv_generate_csv): Unused variable + 'field_index' removed. + + * utils/mdb2rec.c (get_field_name): Unused variables field_part_0, + field_part_1 and field_part_2 removed. + (process_table): Unused variable j removed. + (process_mdb): Unused variables 'in' and 'rset' removed. + (main): Set 'ret' to success or failure. + + * torture/rec-type-reg/rec-type-reg-get.c (START_TEST): Unused + variable 'type' removed. + + * torture/rec-parser/rec-parse-db.c (START_TEST): Unused variable + stm removed. + + * torture/rec-parser/rec-parser-eof.c (START_TEST): Unused + variable ci removed. + +2011-02-07 Jose E. Marchesi <jemarch@gnu.org> + + List of ignored files updated. + * .gitignore: Ignore generated po/*mo files. + Ignore the doc/manual directory. + +2011-02-07 Jose E. Marchesi <jemarch@gnu.org> + + librec: implementation of the %size field. + * src/rec-rset.c (rec_rset_min_records): New function. + (rec_rset_max_records): New function. + (rec_rset_source): New function. + + * src/rec-int.c (rec_int_check_rset): Verify the size restrictions + of the record set. + + * src/rec-utils.c (rec_extract_size): New function. + (rec_extract_size_condition): Likewise. + + * src/rec-rset.c (rec_rset_update_size_constraints): New function. + + * src/rec-utils.c (rec_match): New function. + + * src/rec-rset.c (struct rec_rset_s): New fields min_size and + max_size. + (rec_rset_new): Initialize rset->size_min and rset->size_max. + (rec_rset_set_descriptor): Update size constraints. + (rec_rset_update_size_constraints): New function. + Include stdint.h for SIZE_MAX. + + * src/rec-int.c (rec_int_check_descriptor): Check for the validity + of values of %size fields. + +2011-02-07 Jose E. Marchesi <jemarch@gnu.org> + + librec: problem with non initialized variable fixed. + * src/rec-int.c (rec_int_check_descriptor): Initialize 'res' to 0. + +2011-02-04 Jose E. Marchesi <jemarch@gnu.org> + + Preparation for 1.2. + * NEWS: Updated for 1.2. + + * configure.ac: Version changed from 1.1.90 to 1.2. + +2011-02-04 Jose E. Marchesi <jemarch@gnu.org> + + Translations for German, Swedish, Finnish and Ducht. + * po/de.po: New file from the FTP. + * po/sv.po: Likewise. + * po/nl.po: Likewise. + * po/fi.po: Likewise. + + * po/LINGUAS: New file. + +2011-02-04 Jose E. Marchesi <jemarch@gnu.org> + + manual: some examples fixed. + * doc/recutils.texi (Escalar types): Fix example. + (Enumerated types): Likewise. + +2011-02-02 Jose E. Marchesi <jemarch@gnu.org> + + Preparation for 1.1.90. + * .x-sc_prohibit_strcmp: Added torture/*. + + * .x-sc_prohibit_stddef_without_use: New file. + + * po/recutils.pot: Updated for 1.1.90. + + * NEWS: Updated for 1.1.90. + + * configure.ac: Version changed to 1.1.90. + +2011-02-02 Jose E. Marchesi <jemarch@gnu.org> + + rec2csv: documentation. + * doc/recutils.texi (rec2csv): New section. + (rec2csv Invocation): New section. + (rec2csv Examples): New section. + (rec2csv Conversion): New section. + +2011-02-02 Jose E. Marchesi <jemarch@gnu.org> + + rec2csv: tests. + * torture/utils/Makefile.am (TESTS): rec2csv added. + + * torture/utils/rec2csv.sh: New file. New input files + 'default-records', 'missing-fields', 'missing-fields-first', + 'multi-line', 'escape-quotes', 'repeated-fields', + 'repeated-missing' and 'several-types'. + (rec2csv-default-record): New test. + (rec2csv-missing-fields): New test. + (rec2csv-missing-fields-first): New test. + (rec2csv-multi-line): New test. + (rec2csv-escape-quotes): New test. + (rec2csv-repeated-fields): New test. + (rec2csv-repeated-missing): New test. + (rec2csv-default-type): New test. + (rec2csv-with-type): New test. + (rec2csv-nonexistent-type): New test. + +2011-02-02 Jose E. Marchesi <jemarch@gnu.org> + + rec2csv: print data. + * utils/rec2csv.c (rec2csv_process_data): Process either the + specified record rset, or the default one, or the only rset + existing in the file. + +2011-02-02 Jose E. Marchesi <jemarch@gnu.org> + + rec2csv: print headers. + * utils/rec2csv.c (rec2csv_determine_fields): New function. + * utils/rec2csv.c (rec2csv_generate_csv): Likewise. + + * src/rec-fex.c (rec_fex_member_p): Get arguments 'min' and 'max'. + * src/rec-rset.c (rec_rset_update_auto_fields): Use the additional + parameters of rec_fex_member_p. + +2011-01-31 Jose E. Marchesi <jemarch@gnu.org> + + rec2csv: skeleton of the utility. + * man/Makefile.am (man_MANS): rec2csv.1 added. + (rec2csv.1): New rule. + + * utils/Makefile.am (bin_PROGRAMS): rec2csv added. + (rec2csv_SOURCES): Defined. + (rec2csv_LDADD): Defined. + + * utils/rec2csv.c: New file. + (recutl_print_help): New function. + (parse_args): Likewise. + (rec2csv_process_data): Likewise. + (main): Likewise. + +2011-01-30 Jose E. Marchesi <jemarch@gnu.org> + + recins: prepend the auto-generated fields. + * torture/utils/recins.sh: Tests adapted. + + * utils/recins.c (recins_add_auto_field_int): Prepend the + auto-generated field instead of appending it. + (recins_add_auto_field_date): Likewise. + +2011-01-30 Jose E. Marchesi <jemarch@gnu.org> + + Documentation for the auto generated fields. + * doc/recutils.texi (Record Descriptors): List %auto in the list + of allowed special fields. + (recins Invocation): Document --no-auto. + (Auto Generated Fields): auto-generated fields documentation. + +2011-01-30 Jose E. Marchesi <jemarch@gnu.org> + + Tests for the auto generated fields. + * torture/utils/recins.sh: New input files auto-fields and + auto-range-overflow. + (recins-auto-fields): New test. + (recins-no-auto): New test. + (recins-auto-range-overflow): New test. + (recins-auto-range-overflow-force): New test. + + * torture/utils/recfix.sh: New input files auto-int, auto-range, + auto-date, auto-notype and auto-nofex. + (recfix-auto-int): New test. + (recfix-auto-range): New test. + (recfix-auto-date): New test. + (recfix-auto-notype): New test. + (recfix-auto-nofex): New test. + +2011-01-30 Jose E. Marchesi <jemarch@gnu.org> + + Implementation of auto generated fields. + * utils/recins.c: New argument --no-auto. + + * src/rec-types.c (rec_type_min): New function. + (rec_type_max): New function. + + * src/rec.h: New function rec_rset_get_field_type. + + * utils/recins.c (recins_add_new_record): Add auto-set fields when + replacing a record. + (recins_insert_record): Likewise. + (recins_add_auto_fields): New function. + (recins_add_auto_field_int): New function. + (recins_add_auto_field_date): New function. + + * torture/rec-fex/rec-fex-new.c: Adapt tests to the new semantics + of rec_fex_new (NULL,...). + + * src/rec.h: New functions rec_fex_append and rec_fex_member_p. + * src/rec-fex.c (rec_fex_append): Implemented. + (rec_fex_member_p): Implemented. + (rec_fex_new): Create an empty FEX if the str parameter is NULL. + + * src/rec-rset.c (struct rec_rset_s): New 'auto_fields' member. + (rec_rset_new): Initialize 'auto_fields'. + (rec_rset_set_descriptor): Call rec_rset_update_auto_fields. + (rec_rset_update_auto_fields): New function. + (rec_rset_auto): New function. + + * src/rec.h: New function rec_rset_auto, that returns a list with + the names of the auto-set fields in the rset. + + * src/rec-int.c (rec_int_check_descriptor): Check that + auto-incremented fields are of type int. + +2011-01-29 Jose E. Marchesi <jemarch@gnu.org> + + utils: recdel now performs an integrity check of the resulting + database. + * doc/recutils.texi (recdel Invocation): Documentation for + '--force' and '--verbose'. + (recins Invocation): Likewise. + (recset Invocation): Likewise. + + * torture/utils/recdel.sh: New input file 'integrity-fail'. + New input file 'external-types'. + New input file 'external'. + (recdel-integrity-fail): New test. + (recdel-force-restrictions): New test. + (recdel-external-fail): New test. + (recdel-no-external): New test. + + * utils/recins.c (recins_add_new_record): Use + recutl_check_integrity. + + * utils/recdel.c: New parameter --verbose. + New parameter --no-external. + + * utils/recutl.h: New function 'recutl_check_integrity'. + * uitls/recutl.c: Likewise. + +2011-01-29 Jose E. Marchesi <jemarch@gnu.org> + + utils: fix the output of integrity error messages. + * utils/recins.c (recins_add_new_record): Dont use recutl_error to + report the integrity errors. + * utils/recset.c (recset_process_actions): Likewise. + +2011-01-29 Jose E. Marchesi <jemarch@gnu.org> + + librec: manage problems with the remote descriptors as integrity + errors. + * src/rec-int.c (rec_int_check_descriptor): Call + rec_int_merge_remote. + (rec_int_merge_remote): Return 1 if there is an error fetching the + remote descriptor. 0 otherwise. + (rec_int_merge_remote): Get an errors parameter. + (rec_int_merge_remote): Manage errors as integrity errors. + +2011-01-28 Jose E. Marchesi <jemarch@gnu.org> + + librec: avoid descriptor expansion when using remote descriptors. + * src/rec-int.c (rec_int_check_rset): Save a backup of the + rset descriptor before to merge any remote descriptor, and restore + it before returning. + + * torture/utils/recins.sh: New input files external-descriptor and + external-descriptor-types. + (recins-external-descriptor): New test. + +2011-01-25 Jose E. Marchesi <jemarch@gnu.org> + + manual: Fix the description of %unique, %prohibit, %mandatory, + %url and %type. + * doc/recutils.texi (Record Descriptors): Fix the documentation of + %prohibit, %mandatory and %unique so it says that the field names + are separated by blanks. + (Record Descriptors): Note that %url can be followed by an URL or + a file path. + (Record Descriptors): Clarify that the list of field names in + %type shall be separated by commas. + + Problems reported by Jean-François Ollier. + +2011-01-24 Jose E. Marchesi <jemarch@gnu.org> + + manual: document the supported regexp flavor. + * doc/recutils.texi (Regular Expressions): New chapter. + (String types): Clarify the supported regexp flavor. + (Field Values): Likewise. + +2011-01-24 Jose E. Marchesi <jemarch@gnu.org> + + gnulib: update and import regexprops-generic. + * doc/regexprops-generic.texi: New file. + + * lib/iswblank.c: New file. + +2011-01-23 Jose E. Marchesi <jemarch@gnu.org> + + recutl: make recset and recins to keep the permissions of the + operated rec file. + * utils/recutl.c (recutl_write_db_to_file): New variables st1 and + stat_result. + (recutl_write_db_to_file): Record the file attributes of the + original rec file and use its mode in the replace file. + Copyright updated. + + Problem reported, and solution outlined by Jean-François Ollier. + +2011-01-23 Jose E. Marchesi <jemarch@gnu.org> + + torture: tests checking the %prohibit restriction. + * torture/utils/recfix.sh: New input files prohibited-fields and + prohibited-fields-fail. + (recfix-prohibited-fields-ok): New test. + (recfix-prohibited-fields-fail): New test. + +2011-01-22 Jose E. Marchesi <jemarch@gnu.org> + + Use Task instead of Issue in examples involving TODO. + * doc/recutils.texi (recsel Examples): Issue replaced by Task. + (recins Examples): Likewise. + (recdel Examples): Likewise. + * utils/recinf.c (recutl_print_help): Likewise. + +2011-01-14 Jose E. Marchesi <jemarch@gnu.org> + + tasktool: use --set-add. + * tasktool (tt_process_cmd_resolve): Use the --set-add option of + tasktool to insert the ClosedAt field when resolving to DONE. + +2011-01-14 Jose E. Marchesi <jemarch@gnu.org> + + Tasktool operations. + * TODO: Task 29 resolved to 'DONE'. + Task 29 resolved to 'DONE'. + +2011-01-12 Jose E. Marchesi <jemarch@gnu.org> + + reset: support for the set-add operation. + * doc/recutils.texi (recset Invocation): Documentation for the -S, + --set-add command line option. + + * torture/utils/recset.sh (recset-set-add-1): New test. + (recset-set-add-2): New test. + (recset-set-add-3): New test. + + * utils/recset.c (RECSET_ACT_SET_ADD): New action. + (COMMON_ARGS): SET_ADD_ACTION_ARG added. + (recutl_print_help): Document -S, --set-add. + (recset_parse_args): Manage the set-add option. + (recset_process_actions): Likewise. + (recset_process_set): New parameter 'add_p' that tells whether to + add missing fields with the given value. + (CHECK_ACTION_PREREQ): New macro. + (recset_parse_args): Use CHECK_ACTION_PREREQ to avoid code + repetition. + +2011-01-10 Jose E. Marchesi <jemarch@gnu.org> + + TODO: put a comment at the beginning asking to execute ./tasktool + --help. + * tasktool (tt_db_template_header): Modified to include a note + about executing ./tasktool --help. + + * TODO: Likewise. + +2011-01-10 Jose E. Marchesi <jemarch@gnu.org> + + librec: support for comments in enum descriptions. + * doc/recutils.texi (Enumerated types): Comments in enum + descriptions documented. + Copyright updated. + + * torture/utils/recfix.sh: New input file 'enum-valid'. + New input file 'enum-invalid-1'. + New input file 'enum-invalid-2'. + (recfix-enum-valid): New test. + (recfix-enum-invalid-1): New test. + (recfix-enum-invalid-2): New test. + + * src/rec-types.c (rec_type_parse_enum): Skip comments in + enum descriptions. + +2010-12-23 Jose E. Marchesi <jemarch@gnu.org> + + Preparation for 1.1. + * .x-sc_prohibit_have_config_h: New file. + + * po/POTFILES.in: Updated. + + * m4/pkg.m4: Relicense from GPLv2+ to GPLv3+. + + * NEWS: Updated to version 1.1. + + * man/Makefile.am (man_MANS): recfmt.1 added. + (recfmt.1): New rule. + + * configure.ac: Package version changed to 1.1. + +2010-12-23 Jose E. Marchesi <jemarch@gnu.org> + + rec-sex: support for the string concatenation operator. + * doc/recutils.texi (SEX Operators): Documentation for the string + concatenation operator. + + * src/rec-sex.c (rec_sex_eval_node): Manage REC_SEX_OP_CONCAT. + + * src/rec-sex-ast.h: New operation REC_SEX_OP_CONCAT. + + * src/rec-sex-tab.y: Declare REC_SEX_TOK_AMP as a token. + + * src/rec-sex-lex.l: Recognize REC_SEX_TOK_AMP. + +2010-12-23 Jose E. Marchesi <jemarch@gnu.org> + + rec-sex: support for the conditional expression. + * doc/recutils.texi (SEX Operators): Documentation for the ternary + conditional operator added. + + * src/rec-sex.c (rec_sex_eval_node): Manage REC_SEX_OP_COND. + + * src/rec-sex-tab.y (CREATE_NODE_OP3): Macro defined. + + * src/rec-sex-ast.h: New operation REC_SEX_OP_COND. + + * src/rec-sex-tab.y: Declare REC_SEX_TOK_QM and REC_SEX_TOK_COLON + as tokens. + + * src/rec-sex-lex.l: Recognize REC_SEX_TOK_QM and + REC_SEX_TOK_COLON. + +2010-12-23 Jose E. Marchesi <jemarch@gnu.org> + + manual: first draft of the documentation for recfmt. + * doc/recutils.texi (recfmt): New chapter. + (recfmt Invocation): New section. + (recfmt Templates): New section. + (recfmt Examples): New section. + +2010-12-23 Jose E. Marchesi <jemarch@gnu.org> + + recfmt: use SEX expressions in template slots and change the slot + format. + * src/rec-sex.c (rec_sex_compile): Set the parser ast only if the + parsing was successful. + + * src/rec-sex-tab.y (exp): Grammar changed to require an + expression. + + * src/rec-sex.c (rec_sex_eval_str): New function. + + * utils/recfmt.c (recfmt_apply_template): Use {{...}} marks + instead of <#...>. + (recfmt_get_subst): New function. + +2010-12-22 Jose E. Marchesi <jemarch@gnu.org> + + recfmt: initial version. + * torture/utils/Makefile.am (TESTS): recfmt.sh added. + + * torture/utils/recfmt.sh: New file. + (recfmt-empty-template): New test. + (recfmt-empty-file): New test. + (recfmt-all-records): New test. + (recfmt-slot-beginning): New test. + (recfmt-no-prolog): New test. + (recfmt-subscripts): New test. + (recfmt-non-matching-records): New test. + (recfmt-empty-slot): New test. + (recfmt-invalid-slot): New test. + + * src/rec-record.c (rec_record_get_field_by_name): Return NULL if + the specified field is not found, instead of the last field of the + record. + + * utils/recutl.h: New function recutl_warning. + New function recutl_read_file. + * utils/recutl.c (recutl_warning): Implemented. + (recutl_read_file): Implemented. + + * utils/recfmt.c (recfmt_process_db): New function. + (rec_fmt_apply_template): New function. + + * utils/Makefile.am (bin_PROGRAMS): recfmt added. + + * utils/recfmt.c: New file. + (recutl_print_help): New function. + (recfmt_parse_args): New function. + (main): New function. + +2010-12-22 Jose E. Marchesi <jemarch@gnu.org> + + torture: manage errors when running the utilities in the system + tests. + * torture/utils/testutils.sh: Make the tests to fail if there is + an error running a system test. + +2010-12-21 Jose E. Marchesi <jemarch@gnu.org> + + Portability fixes. + * torture/utils/testutils.sh: Use the portable 'expr' instead of + 'bc'. + + * src/Makefile.am (AM_CFLAGS): gcc specific options -Wall and + -fno-strict-aliasing removed. + + * utils/recutl.h: Include progname.h so the declaration of + program_name is accessible in all the utilities. + + * utils/csv2rec.c: program_name global variable removed. + * utils/recset.c: Likewise. + * utils/recsel.c: Likewise. + * utils/recins.c: Likewise. + * utils/recinf.c: Likewise. + * utils/recfix.c: Likewise. + * utils/recdel.c: Likewise. + * utils/mdb2rec.c: Likewise. + + * utils/recutl.c: Include progname.h and use set_progname. + + * module 'progname' imported from gnulib. + + * src/rec.c: Remove the setting of a program_name variable when + compiling with mingw. + + * src/rec-sex.c (ATOTS_VAL): Use parse_datetime instead of + get_date. + Include parse-datetime.h instead of getdate.h. + * src/rec-types.c: Likewise. + + * po/Makevars.template: Removed. + + * README-dev: libcsv dependency removed. + Added a note asking for a recent version of flex. + + * m4/pkg.m4: Copied from /usr/share/aclocal/pkg.m4. + +2010-12-20 Jose E. Marchesi <jemarch@gnu.org> + + Build a librec.dll in mingw. + * src/Makefile.am (AM_LDFLAGS): Use -no-undefined. + + * src/rec.c: Avoid an undefined symbol in the generated + librec.dll. + +2010-12-20 Jose E. Marchesi <jemarch@gnu.org> + + Fix compilation in mingw32. + * src/rec-sex-lex.l: Use %top to get config.h included at the top + of the generated file. + + * strsep module imported from gnulib. + * mkdstemp module imported from gnulib. + +2010-12-20 Jose E. Marchesi <jemarch@gnu.org> + + echo -n is not recognized in macosx. Use printf instead. + * torture/utils/testutils.sh (test_declare_input_file): Use printf + instead of echo -n. + (test_tool): Likewise. + * tasktool (tt_email_p): Likewise. + (tt_process_cmd_note): Likewise. + (tt_process_cmd_create): Likewise. + +2010-12-19 Jose E. Marchesi <jemarch@gnu.org> + + Misc portability problems fixed. + * utils/recutl.h: Make recutl_fatal and recutl_error to get a + const char pointer as its first argument. + + * utils/recutl.c: Include locale.h. + + * src/rec-writer.c (rec_write_comment): Use strdup instead of + strdupa. + (rec_write_comment): Avoid freeing a tail of a string returned by + strdup. + +2010-12-19 Jose E. Marchesi <jemarch@gnu.org> + + Include gettext.h instead of libintl.h. + * src/rec.c: Include gettext.h instead of libintl.h. + * utils/recutl.c: Likewise. + * utils/recset.c: Likewise. + * utils/recsel.c: Likewise. + * utils/recins.c: Likewise. + * utils/recinf.c: Likewise. + * utils/recfix.c: Likewise. + * utils/recdel.c: Likewise. + * utils/mdb2rec.c: Likewise. + * utils/csv2rec.c: Likewise. + * src/rec-utils.c: Likewise. + * src/rec-types.c: Likewise. + * src/rec-parser.c: Likewise. + * src/rec-int.c: Likewise. + * src/rec-field-name.c: Likewise. + * src/rec-fex.c: Likewise. + +2010-12-19 Jose E. Marchesi <jemarch@gnu.org> + + gettext-h module imported from gnulib. + * m4/configmake.m4: New file. + +2010-12-19 Jose E. Marchesi <jemarch@gnu.org> + + librec: use %zu instead of %d to print size_t values in *printf + calls. + * src/rec-field.c (rec_field_set_location): Use %zu instead of %d + to print size_t values. + (rec_field_set_char_location): Likewise. + * src/rec-types.c (rec_type_check_size): Likewise. + * src/rec-parser.c (rec_parser_perror): Likewise. + * src/rec-record.c (rec_record_set_location): Likewise. + (rec_record_set_char_location): Likewise. + +2010-12-19 Jose E. Marchesi <jemarch@gnu.org> + + librec: use the safer construction asprintf instead of sprintf. + * src/rec-fex.c (rec_fex_str): Use asprintf instead of sprintf. + * src/rec-types.c (rec_type_check_size): Likewise. + (rec_type_check_range): Likewise. + * src/rec-record.c (rec_record_set_location): Likewise. + (rec_record_set_char_location): Likewise. + * src/rec-parser.c (rec_parser_perror): Likewise. + * src/rec-int.c (rec_int_check_field_type): Likewise. + (rec_int_check_record_mandatory): Likewise. + (rec_int_check_record_unique): Likewise. + (rec_int_check_record_prohibit): Likewise. + (rec_int_check_record_key): Likewise. + (rec_int_check_descriptor): Likewise. + * src/rec-field.c (rec_field_set_location): Likewise. + +2010-12-18 Jose E. Marchesi <jemarch@termi> + + Tasktool operations. + * TODO: Task 30 resolved to 'DONE'. + +2010-12-18 Jose E. Marchesi <jemarch@gnu.org> + + Stop using the non portable open_memstream. + * torture/rec-writer/rec-write-comment.c: Use the + rec_writer_new_str function instead of open_memstream and file + streams. + * torture/rec-writer/rec-write-rset.c: Likewise. + * torture/rec-writer/rec-write-record-with-fex.c: Likewise. + * torture/rec-writer/rec-write-record.c: Likewise. + * torture/rec-writer/rec-write-field-name.c: Likewise. + * torture/rec-writer/rec-write-field.c: Likewise. + * torture/rec-writer/rec-write-db.c: Likewise. + + * utils/recins.c: Don't use open_memstream. + * utils/recset.c: Likewise. + * utils/recutl.c: Likewise. + + * src/rec-buf.c: New file. + + * src/rec.h: Get a char** argument instead of a stream for the + 'errors' argument of the function rec_int_check_db, + rec_int_check_rset, rec_int_check_record and + rec_int_check_field_type. + rec_buf_* moved there from pdf-utils.h. + + * src/rec-writer.c: Support a rec_buf_t backend in the writer. + (rec_writer_new_str): New function. + (rec_writer_puts): Use the rec_buf backend if selected. + (rec_writer_putc): Likewise. + (rec_write_field_str): Use a rec_buf_t backed writer. + (rec_write_field_name_str): Likewise. + (rec_write_comment_str): Likewise. + + * src/rec-record.c (rec_record_to_comment): Use rec_buf_new + instead of the non portable open_memstream. + * src/rec-rset.c (rec_rset_rename_field): Likewise. + + * src/rec-types.c (rec_type_check): Use rec_buf_new instead of the + non portable open_memstream. + (rec_type_check_int): Likewise. + (rec_type_check_field): Likewise. + (rec_type_check_bool): Likewise. + (rec_type_check_range): Likewise. + (rec_type_check_real): Likewise. + (rec_type_check_size): Likewise. + (rec_type_check_line): Likewise. + (rec_type_check_regexp): Likewise. + (rec_type_check_date): Likewise. + (rec_type_check_email): Likewise. + (rec_type_check_enum): Likewise. + +2010-12-17 Jose E. Marchesi <jemarch@gnu.org> + + rec-utils: new open_memstream like API for rec_buf_t. + * src/rec-parser.c (rec_parse_field_name_part): Use the new + rec_buf_t API. + (rec_parse_comment): Likewise. + (rec_parse_field_value): Likewise. + + * src/rec-utils.h: New interface for the rec_buf_t abstract data + type, including: rec_buf_new, rec_buf_putc, rec_buf_puts and + rec_buf_close. + * src/rec-utils.c: rec_buf_new, rec_buf_putc, rec_buf_puts and + rec_buf_close implemented based in the old implementation. + +2010-12-16 Jose E. Marchesi <jemarch@gnu.org> + + syntax-check fixes. + * libcsv/libcsv.c (VERSION): Changed to 3.0.0-recutils. + Include config.h. + +2010-12-16 Jose E. Marchesi <jemarch@termi> + + Tasktool operations. + * TODO: Task 34 resolved to 'DONE'. + +2010-12-16 Jose E. Marchesi <jemarch@gnu.org> + + libcsv embedded in the source tree. + * utils/csv2rec.c: Include csv.h instead of libcsv/csv.h. + + * utils/Makefile.am (csv2rec_LDADD): Link with libcsv.la. + (AM_CPPFLAGS): Add the libcsv/ directory to the include path. + + * configure.ac: Checks for libcsv removed. + Conditional COMPILE_CSV2REC removed. + + * Makefile.am (SUBDIRS): libcsv/ added. + + * libcsv/csv.h: Imported from libcsv-3.0.0.tar.gz and relicensed + from LGPL2.1+ to GPLv3. + * libcsv/libcsv.c: Likewise. + + * libcsv/Makefile.am: New file. + +2010-12-16 Jose Marchesi <jco@wilhelm> + + Tasktool operations. + * TODO: Task 34 created. + +2010-12-15 Jose E. Marchesi <jemarch@gnu.org> + + tasktool: first version of log subcommand. + * tasktool (tt_process_cmd_log): New function. + (tt_help_log): New variable. + (tt_parse_arguments): Handle the 'log' subcommand. + +2010-12-14 Jose E. Marchesi <jemarch@gnu.org> + + librec: new function rec_buf_add_str in rec-utils. + * src/rec-utils.h: New function 'rec_buf_add_str'. + + * src/rec-utils.c (rec_buf_add_str): New function. + +2010-12-14 Jose E. Marchesi <jemarch@gnu.org> + + librec: rec_parser_buf abstraction moved to rec-utils as rec_buf. + * src/rec-parser.c: Use the rec_buf_* functions instead of the + rec_parser_buf_* functions. + Include rec-utils.h. + + * src/rec-utils.c: Implementation of the rec_buf_t type and the + rec_buf_* functions, moved and adapted from rec-parser.c. + + * src/rec-utils.h: New rec_buf_t abstract data type, renamed from + the rec_parser_buf_t type and functions in rec-parser.h. + +2010-12-14 Jose E. Marchesi <jemarch@gnu.org> + + Tasktool operations. + * TODO: Note added for task 30. + +2010-12-14 Jose E. Marchesi <jemarch@gnu.org> + + librec: remove the usage of the non-portable fmemopen. + * torture/rec-parser/rec-parse-db.c: Replace uses of fmemopen by + buffer backed parsers. + * torture/rec-parser/rec-parse-field.c: Likewise. + * torture/rec-parser/rec-parse-field-name.c: Likewise. + * torture/rec-parser/rec-parse-record.c: Likewise. + * torture/rec-parser/rec-parser-eof.c: Likewise. + * torture/rec-parser/rec-parser-error.c: Likewise. + * torture/rec-parser/rec-parser-perror.c: Likewise. + * torture/rec-parser/rec-parser-reset.c: Likewise. + * torture/rec-parser/rec-parse-rset.c: Likewise. + + * src/rec-parser.c (rec_parse_field_name_str): Rewritten to use + rec_parser_new_str and rec_parser_eof instead of fmemopen. + (rec_parse_record_str): Likewise. + + * torture/rec-parser/rec-parser-new-str.c: New file. + (test_rec_parser_new_str): New function. + (rec_parser_new_str_nominal): New test. + + * src/rec-parser.c: New member 'buffer' in the struct + rec_parser_s. + (rec_parser_init_common): New function. + (rec_parser_getc): Use the buffer backend if the parser was + created with rec_parser_new_str. + (rec_parser_ungetc): Likewise. + +2010-12-13 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: several fixes. + * etc/rec-mode.el: Several fixes. + * utils/recinf.c (print_info_file): Print "unknown" only if + generated normal output. It was breaking the sexps. + +2010-12-13 Jose E. Marchesi <jemarch@gnu.org> + + recins: check for integrity problems regardless of operational + mode. + * utils/recfix.c (recfix_process_data): Use new semantics of + rec_int_check_db. + + * src/rec-int.c (rec_int_check_db): Return the number of errors + found while checking the integrity of the database. + (rec_int_merge_remote): Unused variable removed. + + * utils/recins.c (recins_add_new_record): Check for the integrity + of the new database in both operation modes: normal and replace. + +2010-12-13 Jose Marchesi <jco@wilhelm> + + Tasktool operations. + * TODO: Task 30 edited. + Task 30 edited. + +2010-12-13 Jose E. Marchesi <jemarch@gnu.org> + + librec: don't allow several %rec: fields in record descriptors. + * src/rec-int.c (rec_int_check_descriptor): Don't allow more than + one %rec: fields in record descriptors. + + * torture/utils/recfix.sh: New tests 'recfix-one-rec' and + 'recfix-multiple-rec-in-descriptor'. + +2010-12-13 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: initial version of rec-cmd-compile. + * etc/rec-mode.el (rec-mode-edit-map): Map the rec-cmd-compile + command. + (rec-mode-map): Likewise. + (rec-recfix): New variable. + (rec-cmd-compile): New function. + +2010-12-10 Jose Marchesi <jemarch@gnu.org> + + Tasktool operations. + * TODO: Task 28 resolved to 'DONE'. + +2010-12-10 Jose E. Marchesi <jemarch@gnu.org> + + tasktool: support for categories. + * tasktool (tt_task_categories): New category 'rec-mode'. + (tt_process_cmd_list): Support the -c|--category parameter. + (tt_db_template_task): Set 'Category' as a mandatory field. + + * TODO: Updated to reflect the new categories. + +2010-12-04 Jose E. Marchesi <jemarch@termi> + + Tasktool operations. + * TODO: Task 30 created. + Task 30 edited. + +2010-12-04 Jose E. Marchesi <jemarch@gnu.org> + + librec: do not include malloc.h. Include the more portable + stdlib.h instead. + * src/rec-fex.c: Include stdlib.h instead of malloc.h. + * src/rec-field-name.c: Likewise. + * src/rec-field.c: Likewise. + * src/rec-parser.c: Likewise. + * src/rec-record.c: Likewise. + * src/rec-rset.c: Likewise. + * src/rec-sex.c: Likewise. + * src/rec-writer.c: Likewise. + +2010-12-04 Jose E. Marchesi <jemarch@gnu.org> + + Avoid a segmentation fault in rec_write_rset. + * src/rec-writer.c (rec_write_rset): Make sure that the descriptor + of a record set exists before to try to write it. Problem + reported by Elias Pipping. + +2010-12-02 Jose E. Marchesi <jemarch@gnu.org> + + rec-types: support ranges with implicit minimum limit. + * torture/utils/recfix.sh (recfix-ranges-ok): New test. + (recfix-ranges-xfail-1): New test. + (recfix-ranges-xfail-2): New test. + + * torture/rec-type/rec-type-new.c: Test ranges with just one + index. + + * src/rec-types.c (REC_TYPE_RANGE_DESCR_RE): Allow the omission of + one of the indexes of the range. + (rec_type_parse_range): Allow the omission of one of the indexes. + +2010-12-02 Jose E. Marchesi <jemarch@gnu.org> + + mdb2rec: normalise field names appearing in %type fields. + * utils/mdb2rec.c (process_table): Use normalised field name parts + in the %type: entries for columns. + +2010-12-01 Jose E. Marchesi <jemarch@termi> + + Tasktool operations. + * TODO: Task 29 created. + +2010-12-01 Jose E. Marchesi <jemarch@gnu.org> + + tasktool: fix the setting of the close time when resolving. + * tasktool (tt_process_cmd_resolve): Add or set the closing time + for a task, depending if there is an existing 'ClosedAt' field. + +2010-12-01 Jose E. Marchesi <jemarch@termi> + + Tasktool operations. + * TODO: Task 25 edited. + Task 28 created. + Task 27 created. + Task 24 edited. + Task 26 created. + +2010-12-01 Jose E. Marchesi <jemarch@gnu.org> + + tasktool: control record support. + * TODO: Control record added. + + * tasktool: Support for the TasktoolControl record and NextFreeId + field added. + +2010-12-01 Jose E. Marchesi <jemarch@gnu.org> + + rec-writer: cover an additional special case in rec_write_rset. + * src/rec-writer.c (rec_write_rset): Cover the special case where + a record set contains a set of comments followed by the record + descriptor. + + * torture/utils/recins.sh: New tests 'recins-only-descriptor' and + 'recins-comments-and-descriptor'. + +2010-12-01 Jose E. Marchesi <jemarch@gnu.org> + + tasktool: escape parameters passed to eval. + * tasktool (tt_escape_single_quoted): New function. + (tt_process_cmd_create): Escape all the parameters used in single + quoted strings passed to eval. + +2010-11-30 Jose E. Marchesi <jemarch@termi> + + Tasktool operations. + * TODO: Task 19 resolved to 'DONE'. + Task 24 edited. + Task 24 created. + +2010-11-30 Jose E. Marchesi <jemarch@gnu.org> + + Tests for the before, after and sametime operators. + * torture/utils/recsel.sh: New input file 'dates'. + (recsel-sex-date-sametime): New test. + (recsel-sex-date-before): New test. + (recsel-sex-date-after): New test. + +2010-11-30 Jose E. Marchesi <jemarch@gnu.org> + + Documentation of the before, after and sametime operators. + * doc/recutils.texi (SEX Operators): Date operators documented. + +2010-11-30 Jose E. Marchesi <jemarch@gnu.org> + + Date operators before, after and sametime implementation. + * src/rec-sex.c (timespec_subtract): New function. + (rec_sex_eval_node): Manage REC_SEX_OP_BEFORE. + (rec_sex_eval_node): Manage REC_SEX_OP_AFTER. + (rec_sex_eval_node): Manage REC_SEX_OP_SAMETIME. + + * src/rec-sex-ast.h: Constants for the date operators. + + * src/rec-sex-tab.y: Support for the date operators. + + * src/rec-sex-lex.l: New tokens for date operators '<<', '>>' and + '=='. + +2010-11-29 Jose E. Marchesi <jemarch@gnu.org> + + * NEWS: Updated for 1.0 release. + +2010-11-27 Jose E. Marchesi <jemarch@gnu.org> + + Syntax check fixes. + * TESTS: Regenerated. + + * torture/rec-record/rec-record-field-p.c: Trailing blanks + removed. + + * torture/utils/Makefile.am (TESTS_ENVIRONMENT): Use + $(PATH_SEPARATOR) instead of ':'. + +2010-11-27 Jose E. Marchesi <jemarch@termi> + + Tasktool operations. + * TODO: Task 22 edited. + +2010-11-27 Jose E. Marchesi <jemarch@gnu.org> + + Support for file paths as external descriptors. + * src/rec-types.c (rec_type_check_enum): Add digits in enum + constants. + + * doc/recutils.texi (External Descriptors): File paths in external + descriptors sources documented. + + * src/rec-int.c (rec_int_rec_type_p): Use REC_FILE_REGEXP. + + * src/rec-utils.c (rec_extract_file): New file. + +2010-11-25 Jose E. Marchesi <jemarch@termi> + + Tasktool operations. + * TODO: Task 23 edited. + Task 18 edited. + +2010-11-25 Jose E. Marchesi <jemarch@gnu.org> + + recset: support for -r|--rename. + * torture/rec-type/rec-type-descr-type.c: New file. + (test_rec_type_descr_type): New function. + (rec_type_descr_type_nominal): New test. + (rec_type_descr_type_invalid): New test. + + * src/rec-types.c (rec_type_descr_type): New function. + + * TODO: Regenerated. + + * torture/rec-fex/rec-fex-str.c: New file. + (test_rec_fex_str): New function. + (rec_fex_str_nominal): New test. + + * src/rec-fex.c (rec_fex_elem_set_field_name): New function. + (rec_fex_str): New function. + + * src/rec-rset.c (rec_rset_rename_field): New function. + + * torture/utils/recset.sh: + (recset-rename): New test. + (recset-rename-first): New test. + (recset-rename-middle): New test. + (recset-rename-last): New test. + (recset-rename-range-first): New test. + (recset-rename-range-last): New test. + (recset-rename-range-all): New test. + (recset-rename-all): New test. + (recset-rename-all-descriptor): New test. + (recset-rename-all-key): New test. + (recset-rename-invalid-fex): New test. + + * doc/recutils.texi (recset Invocation): Document -r|--rename. + (recset Examples): Added example for recset rename. + + * utils/recset.c (recutl_print_help): New option -r|--rename + documented. + (RECSET_ACT_RENAME): New constant. + (recset_process_ren): New function. + +2010-11-23 Jose E. Marchesi <jemarch@termi> + + Tasktool operations. + * TODO: Task 23 created. + +2010-11-23 Jose E. Marchesi <jemarch@gnu.org> + + System tests for the utilities. + * torture/utils/recfix.sh: New file. + (recfix-type-int-valid): New test. + (recfix-type-int-invalid): New test. + (recfix-type-real-valid): New test. + (recfix-type-real-invalid): New test. + (recfix-duplicated-keys): New test. + (recfix-missing-mandatory): New test. + (recfix-several-unique): New test. + (recfix-referred-type): New test. + (recfix-hidden-type): New test. + + * torture/utils/testutils.sh: Support expected statuses 'ok' and + 'xfail' in 'test_tool'. + + * torture/utils/recset.sh: New file. + (recset-append-field): New test. + (recset-set-field): New test. + (recset-delete-field): New test. + (recset-comment-out-field): New test. + (recset-delete-non-existant): New test. + (recset-comment-out-fex-first): New test. + (recset-comment-out-fex-last): New test. + (recset-force-integrity): New test. + + * torture/utils/recins.sh: New file. + (recins-empty): New test. + (recins-empty-with-type): New test. + (recins-several-fields): New test. + (recins-append): New test. + (recins-append-in-type): New test. + (recins-append-new-type): New test. + (recins-replace): New test. + (recins-replace-sex): New test. + (recins-force-restrictions): New test. + + * torture/utils/recdel.sh: New file. + (recdel-first): New test. + (recdel-second): New test. + (recdel-last): New test. + (recdel-comment): New test. + (recdel-sex): New test. + (recdel-type): New test. + (recdel-force-all): New test. + + * utils/recutl.c (recutl_write_db_to_file): Close the stream to + 'out' if it is not 'stdout' only. + + * torture/utils/recinf.sh: New file. + (recinf-empty): New test. + (recinf-one-record): New test. + (recinf-multiple-records): New test. + (recinf-multiple-named): New test. + (recinf-multiple-named-descriptors): New test. + (recinf-multiple-types): New test. + (recinf-names-only): New test. + + * torture/Makefile.am (SUBDIRS): Process the current directory + before 'utils/'. + (recsel-sex-sharp-zero): New test. + (recsel-sex-sharp-one): New test. + (recsel-sex-sharp-multiple): New test. + (recsel-sex-match): New test. + +2010-11-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> + + manual: fix overlong lines and a couple of examples. + * doc/recutils.texi (recsel Invocation, recins Invocation) + (recins Examples): Do not recommend appending to a file while + reading it. Avoid overlong lines in the synopses and examples. + +2010-11-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> + + Fix make check in VPATH case. + * torture/utils/recsel.sh: Ensure $srcdir is set; read + testsutils.sh from $srcdir. + * torture/utils/testutils.sh: Add $srcdir to PATH. + +2010-11-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> + + Tasktool operations. + * tasktool (tt_add_changelog_entry): Use portable sed features + only. Avoid changing more than the first matching entry. + +2010-11-20 Jose E. Marchesi <jemarch@gnu.org> + + Support negative integer and real literals in selection + expressions. + * src/rec-sex-lex.l: Support negative integers and reals in the + lexer level. + + * torture/utils/recsel.sh: Integer and real operators tests. + +2010-11-20 Jose E. Marchesi <jemarch@termi> + + Tasktool operations. + * TODO: Task 11 edited. + +2010-11-20 Jose E. Marchesi <jemarch@gnu.org> + + * tasktool (tt_process_cmd_list): Do not include tasks in + "resolution" status by default. + Include the status in the list. + +2010-11-19 Jose E. Marchesi <jemarch@termi> + + Tasktool operations. + * TODO: Task 3 edited. + +2010-11-15 Jose E. Marchesi <jemarch@gnu.org> + + * torture/utils/Makefile.am: New file. + +2010-11-15 Jose E. Marchesi <jemarch@gnu.org> + + rec-sex: unit tests. + * torture/rec-sex/rec-sex-eval.c: New file. + (test_rec_sex_eval): New function. + (rec_sex_eval_match): New test. + (rec_sex_eval_nomatch): New test. + + * torture/rec-sex/rec-sex-compile.c: New file. + (test_rec_sex_compile): New function. + (rec_sex_compile_nominal): New test. + (rec_sex_compile_invalid): New test. + + * torture/rec-sex/rec-sex-destroy.c: New file. + (test_rec_sex_destroy): New function. + (rec_sex_destroy_nominal): New test. + + * torture/rec-sex/rec-sex-new.c: New file. + (test_rec_sex_new): New function. + (rec_sex_new_nominal): New test. + + * torture/rec-sex/tsuite-rec-sex.c: New file. + (tsuite_rec_sex): New function. + +2010-11-15 Jose E. Marchesi <jemarch@gnu.org> + + utils: compilation warnings removed. + * utils/recinf.c: Unused variables removed. + * utils/recsel.c: Likewise. + * utils/recset.c: Likewise. + * utils/recins.c: Likewise. + +2010-11-15 Jose E. Marchesi <jemarch@gnu.org> + + rec-writer: unit tests. + * torture/rec-writer/rec-write-comment-str.c: New file. + (test_rec_write_comment_str): New function. + (rec_write_comment_str_nominal): New test. + (rec_write_comment_str_sexp): New test. + + * torture/rec-writer/rec-write-field-str.c: New file. + (test_rec_write_field_str): New function. + (rec_write_field_str_nominal): New test. + (rec_write_field_str_sexp): New test. + + * torture/rec-writer/rec-write-field-name-str.c: New file. + (test_rec_write_field_name_str): New function. + (rec_write_field_name_str_nominal): New test. + (rec_write_field_name_str_sexp): New test. + + * torture/rec-writer/rec-write-db.c: New file. + (test_rec_write_db): New function. + (rec_write_db_nominal): New test. + + * torture/rec-writer/rec-write-rset.c: New file. + (test_rec_write_rset): New function. + (rec_write_rset_nominal): New test. + + * torture/rec-writer/rec-write-record-with-fex.c: New file. + (test_rec_write_record_with_fex): New function. + (rec_write_record_with_fex_nominal): New test. + (rec_write_record_with_fex_values): New test. + (rec_write_record_with_fex_rows): New test. + +2010-11-14 Jose E. Marchesi <jemarch@gnu.org> + + rec-write unit tests. + * torture/rec-writer/rec-write-record.c: New file. + (test_rec_write_record): New function. + (rec_write_record_nominal): New test. + (rec_write_record_sexp): New test. + + * torture/rec-writer/rec-write-field-name.c: New file. + (test_rec_write_field_name): New function. + (rec_write_field_name_nominal): New test. + (rec_write_field_name_sexp): New test. + + * torture/rec-writer/rec-write-field.c: New file. + (test_rec_write_field): New function. + (rec_write_field_nominal): New test. + (rec_write_field_sexp): New test. + + * torture/rec-writer/rec-write-comment.c: New file. + (test_rec_write_comment): New function. + (rec_write_comment_nominal): New test. + (rec_write_comment_sexp): New test. + + * torture/rec-writer/rec-writer-destroy.c: New file. + (test_rec_writer_destroy): New function. + (rec_writer_destroy_nominal): New test. + + * torture/rec-writer/rec-writer-new.c: New file. + (test_rec_writer_new): New function. + (rec_writer_new_nominal): New test. + + * torture/rec-writer/tsuite-rec-writer.c: New file. + (tsuite_rec_writer): New function. + +2010-11-13 Jose E. Marchesi <jemarch@gnu.org> + + rec-parser unit tests. + * torture/rec-parser/rec-parser-perror.c: New file. + (test_rec_parser_perror): New function. + (rec_parser_perror_nominal): New test. + + * torture/rec-parser/rec-parser-reset.c: New file. + (test_rec_parser_reset): New function. + (rec_parser_reset_nominal): New test. + + * torture/rec-parser/rec-parser-error.c: New file. + (test_rec_parser_error): New function. + (rec_parser_error_nominal): New test. + + * torture/rec-parser/rec-parser-eof.c: New file. + (test_rec_parser_eof): New function. + (rec_parser_eof_nominal): New test. + + * torture/rec-parser/rec-parse-db.c: New file. + (test_rec_parse_db): New function. + (rec_parse_db_nominal): New test. + (rec_parse_db_invalid): New test. + + * torture/rec-parser/rec-parse-rset.c: New file. + (test_rec_parse_rset): New function. + (rec_parse_rset_nominal): New test. + (rec_parse_rset_invalid): New test. + + * torture/rec-parser/rec-parse-record.c: New file. + (test_rec_parse_record): New function. + (rec_parse_record_nominal): New test. + (rec_parse_record_invalid): New test. + + * torture/rec-parser/rec-parse-field.c: New file. + (test_rec_parse_field): New function. + (rec_parse_field_nominal): New test. + (rec_parse_field_invalid): New test. + + * torture/rec-parser/rec-parse-field-name.c: New file. + (test_rec_parse_field_name): New function. + (rec_parse_field_name_nominal): New test. + (rec_parse_field_name_invalid): New test. + + * torture/rec-parser/rec-parse-field-name-str.c: New file. + (test_rec_parse_field_name_str): New function. + (rec_parse_field_name_str_nominal): New test. + (rec_parse_field_name_str_invalid): New test. + + * torture/rec-parser/rec-parser-destroy.c: New file. + (test_rec_parser_destroy): New function. + (rec_parser_destroy_nominal): New test. + + * torture/rec-parser/rec-parser-new.c: New file. + (test_rec_parser_new): New function. + (rec_parser_new_nominal): New test. + + * torture/rec-parser/tsuite-rec-parser.c: New file. + (tsuite_rec_parser): New function. + +2010-11-12 Jose E. Marchesi <jemarch@gnu.org> + + rec-field unit tests. + * torture/rec-field/rec-field-to-comment.c: New file. + (test_rec_field_to_comment): New function. + (rec_field_to_comment_nominal): New test. + + * torture/rec-field/rec-field-set-char-location.c: New file. + (test_rec_field_set_char_location): New function. + (rec_field_set_char_location_nominal): New test. + + * torture/rec-field/rec-field-char-location-str.c: New file. + (test_rec_field_char_location_str): New function. + (rec_field_char_location_str_nominal): New test. + + * torture/rec-field/rec-field-char-location.c: New file. + (test_rec_field_char_location): New function. + (rec_field_char_location_nominal): New test. + + * torture/rec-field/rec-field-set-location.c: New file. + (test_rec_field_set_location): New function. + (rec_field_set_location_nominal): New test. + + * torture/rec-field/rec-field-location-str.c: New file. + (test_rec_field_location_str): New function. + (rec_field_location_str_nominal): New test. + + * torture/rec-field/rec-field-location.c: New file. + (test_rec_field_location): New function. + (rec_field_location_nominal): New test. + + * torture/rec-field/rec-field-set-source.c: New file. + (test_rec_field_set_source): New function. + (rec_field_set_source_nominal): New test. + + * torture/rec-field/rec-field-source.c: New file. + (test_rec_field_source): New function. + (rec_field_source_nominal): New test. + + * torture/rec-field/rec-field-equal-p.c: New file. + (test_rec_field_equal_p): New function. + (rec_field_equal_p_equal): New test. + (rec_field_equal_p_nonequal): New test. + + * torture/rec-field/rec-field-name-str.c: New file. + (test_rec_field_name_str): New function. + (rec_field_name_str_nominal): New test. + + * torture/rec-field/rec-field-destroy.c: New file. + (test_rec_field_destroy): New function. + (rec_field_destroy_nominal): New test. + + * torture/rec-field/rec-field-new-str.c: New file. + (test_rec_field_new_str): New function. + (rec_field_new_str_nominal): New test. + (rec_field_new_str_invalid): New test. + + * torture/rec-field/rec-field-new.c: New file. + (test_rec_field_new): New function. + (rec_field_new_nominal): New test. + +2010-11-12 Jose E. Marchesi <jemarch@gnu.org> + + More rec-fex unit tests. + * torture/rec-fex/rec-fex-elem-max.c: New file. + (test_rec_fex_elem_max): New function. + (rec_fex_elem_max_nosubs): New test. + (rec_fex_elem_max_min): New test. + (rec_fex_elem_max_minmax): New test. + + * torture/rec-fex/rec-fex-elem-min.c: New file. + (test_rec_fex_elem_min): New function. + (rec_fex_elem_min_nosubs): New test. + (rec_fex_elem_min_min): New test. + (rec_fex_elem_min_minmax): New test. + + * torture/rec-fex/rec-fex-elem-field-name-str.c: New file. + (test_rec_fex_elem_field_name_str): New function. + (rec_fex_elem_field_name_str_nominal): New test. + +2010-11-10 Jose E. Marchesi <jemarch@gnu.org> + + More rec-fex unit tests. + * torture/rec-fex/rec-fex-elem-field-name.c: New file. + (test_rec_fex_elem_field_name): New function. + (rec_fex_elem_field_name_nominal): New test. + + * torture/rec-fex/rec-fex-get.c: New file. + (test_rec_fex_get): New function. + (rec_fex_get_nominal): New test. + (rec_fex_get_invalid): New test. + +2010-11-09 Jose E. Marchesi <jemarch@gnu.org> + + rec-fex unit tests and some fixes. + * torture/rec-fex/rec-fex-size.c: New file. + (test_rec_fex_size): New function. + (rec_fex_size_nominal): New test. + + * torture/rec-fex/rec-fex-sort.c: New file. + (test_rec_fex_sort): New function. + (rec_fex_sort_nominal): New test. + + * torture/rec-fex/rec-fex-check.c: New file. + (test_rec_fex_check): New funtion. + (rec_fex_check_simple_nominal): New test. + (rec_fex_check_simple_invalid): New test. + (rec_fex_check_csv_nominal): New test. + (rec_fex_check_csv_invalid): New test. + (rec_fex_check_sub_nominal): New test. + (rec_fex_check_sub_invalid): New test. + + * torture/rec-fex/rec-fex-destroy.c: New file. + (test_rec_fex_destroy): New function. + (rec_fex_destroy_nominal): New test. + + * src/rec-fex.c (rec_fex_parse_elem): Support for maximum part in + subscripts. + + * torture/rec-fex/rec-fex-new.c: New file. + (test_rec_fex_new): New function. + (rec_fex_new_single): New test. + (rec_fex_new_simple): New test. + (rec_fex_new_subscripts): New test. + + * torture/rec-fex/tsuite-rec-fex.c: New file. + (tsuite_rec_fex): New function. + +2010-11-09 Jose E. Marchesi <jemarch@gnu.org> + + Lists of field names supported in type definitions. Closes task + 12. + * TESTS: Regenerated. + + * torture/rec-type/tsuite-rec-type.c: Reference rec-type-descr-fex + instead of rec-type-descr-field-name. + * torture/Makefile.am (REC_TYPE_TSUITE): Likewise. + + * torture/rec-type/rec-type-descr-fex.c: File renamed from + 'rec-type-descr-field-name.c'. + + * src/rec-rset.c: Include rec-utils.h. + + * src/rec-types.c (REC_TYPE_DESCR_RE): Regexp modified to allow a + comma-separated list of field names as part of the type + descriptor. + (rec_type_new): Skip the list of field names. + (rec_type_descr_fex): Renamed from 'rec_type_descr_field_name'. + +2010-11-08 Jose E. Marchesi <jemarch@termi> + + Tasktool operations. + * TODO: Task 19 created. + +2010-11-08 Jose E. Marchesi <jemarch@gnu.org> + + * tasktool: Make 'test' to use -ne and -eq for integer + comparisons. Problem reported by Ralf Wildenhues. + +2010-11-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> + + * doc/recutils.texi (recset Invocation): Avoid double `='. + + * man/Makefile.am (man_MANS): Do not build man pages when + associated programs are not present. + + * tasktool (tt_rec_check_utility): Fix redirection. + +2010-11-07 Jose E. Marchesi <jemarch@termi> + + Tasktool operations. + * TODO: Task 16 created. + +2010-11-07 Jose E. Marchesi <jemarch@gnu.org> + + Some improvements. + * doc/recutils.texi (Record Descriptors): Documentation of the + special fields fixed. + +2010-11-07 Jose E. Marchesi <jemarch@termi> + + Tasktool operations. + * TODO: Task 15 created. + +2010-11-07 Jose E. Marchesi <jemarch@gnu.org> + + * AUTHORS: Ralf Wildenhues added. + +2010-11-07 Jose E. Marchesi <jemarch@termi> + + Tasktool operations. + * TODO: Task 14 created. + Task 22 created. + Task 10 edited. + Task 21 edited. + Task 21 created. + Task 9 edited. + Task 8 edited. + Task 20 created. + Task 18 created. + Task 17 created. + +2010-11-07 Jose E. Marchesi <jemarch@gnu.org> + + recins: support replace mode. + * tasktool (tt_supported_vcs): Use the replace-mode of recins. + + * doc/recutils.texi (recins Invocation): Replace mode documented. + + * utils/recins.c (COMMON_ARGS): RECORD_SELECTION_ARGS added. + (recutl_print_help): Print the record selection --help output. + (recins_parse_args): Manage record selection arguments. + +2010-11-07 Jose E. Marchesi <jemarch@gnu.org> + + recins: support -r|--record. + * doc/recutils.texi (recins Invocation): Document -r|--record. + + * src/rec-parser.c (rec_parse_record_str): New function. + + * utils/recins.c (COMMON_ARGS): RECORD_ARG added. + (recins_parse_args): Manage the -r|--record option. + +2010-11-07 Jose E. Marchesi <jemarch@gnu.org> + + tasktool: support filtering by assigned-to in list command. + * tasktool: Support the --assigned-to option in 'list'. + (tt_supported_vcs): Use generic names for the fields in the + selection expression. + (tt_help_edit): New variable. + (tt_process_cmd_show): New function. + +2010-11-06 Jose E. Marchesi <jemarch@gnu.org> + + Syntax check fixes. + * src/rec-int.c: Useless cpp parens removed. + * src/rec.c: Likewise. + + * .x-sc_prohibit_always_true_header_tests: New file. + + * cfg.mk (gnulib_dir): Set gnulib_dir. + + * ChangeLog: Empty lines removed. + * .x-sc_trailing_blank: Likewise. + More exceptions added. + + * po/POTFILES.in: Updated. + + * .x-sc_prohibit_S_IS_definition: New file. + + * .x-sc_obsolete_symbols: New file. + +2010-11-06 Jose E. Marchesi <jemarch@gnu.org> + + * configure.ac: Generate etc/Makefile. + + * etc/Makefile.am: New file. + +2010-11-06 Jose E. Marchesi <jemarch@gnu.org> + + * etc/FSD.rec: New file. + + * doc/recutils.texi: Document the --no-remote command line + argument for recins, recfix and recset. + + * utils/recins.c: Support the --no-remote command line argument. + * utils/recfix.c: Likewise. + * utils/recset.c: Likewise. + + * src/rec-int.c (rec_int_check_rset): New function argument + 'remote_descriptor_p'. + (rec_int_check_rset): Call 'rec_int_merge_remote'. + (rec_int_merge_remote): New function. + Include regex.h. + +2010-11-06 Jose E. Marchesi <jemarch@gnu.org> + + tasktool: support for ChangeLog annotations. + * tasktool (tt_supported_vcs): New function. + +2010-11-06 Jose E. Marchesi <jemarch@gnu.org> + + * configure.ac: Version changed from git to 1.0. + + * TODO: Some tasks added. + +2010-11-05 Jose E. Marchesi <jemarch@gnu.org> + + * TODO: First serious version. + + * tasktool: Fixed many problems and 'delete' command implemented. + +2010-11-03 Jose E. Marchesi <jemarch@gnu.org> + + recfix: little fixes. + * utils/recfix.c (main): Use EXIT_SUCCESS and EXIT_FAILURE. + (recfix_process_data): Fix wrong comparison. + +2010-11-02 Jose E. Marchesi <jemarch@gnu.org> + + Generate manpages using help2man. + * configure.ac: Generate man/Makefile. + + * man/Makefile.am: New file. + + * configure.ac: Search for help2man if not cross-compiling. + +2010-11-01 Jose E. Marchesi <jemarch@gnu.org> + + Syntax check problems fixed. + * src/rec-writer.c: Include config.h. + * torture/runtests.c: Likewise. + + * tasktool: Use test ... && test ... instead of test ... -a + ... (likewise for ||). + + * utils/csv2rec.c (parse_args): Use EXIT_* values. + * utils/recutl.h: Likewise. + * utils/recutl.c: Likewise. + * utils/recset.c: Likewise. + * utils/recsel.c: Likewise. + * utils/recins.c: Likewise. + * utils/recinf.c: Likewise. + * utils/recfix.c: Likewise. + * utils/recdel.c: Likewise. + * utils/mdb2rec.c: Likewise. + * src/rec-types.c: Likewise. + * src/rec-sex.c: Likewise. + +2010-11-01 Jose E. Marchesi <jemarch@gnu.org> + + Make distcheck to work. + * doc/recutils.texi: Include version.texi. + + * doc/Makefile.am (TEXI_TEXINFOS): Added getdate.texi. + + * torture/rec-mset/rec-mset-count.c: Include + rec-mset/elem-types.h. + * torture/rec-mset/rec-mset-type-p.c: Likewise. + * torture/rec-mset/rec-mset-register-type.c: Likewise. + * torture/rec-mset/rec-mset-dup.c: Likewise. + + * torture/Makefile.am (AM_CPPFLAGS): -I$(top_srcdir)/torture + added. + +2010-10-29 Jose E. Marchesi <jemarch@gnu.org> + + Warnings removed in the codebase. + * src/rec-sex.c: Include rec-utils.h. + + * src/rec-sex.l: Include rec-utils.h. + + * src/rec-types.c (rec_type_new): Missing cases REC_TYPE_DATE and + REC_TYPE_EMAIL added. + Include rec-utils.h for rec-atoi. + (rec_type_parse_regexp): Unused variable 'b' removed. + (rec_type_descr_field_name): Likewise. + (rec_type_new): Likewise. + (rec_type_parse_size): Unused variable 'ret' removed. + (rec_type_parse_regexp_type): Unused variable 'escaping' removed. + + * src/rec-fex.c: Include rec-utils.h for rec-atoi. + Unused static function rec_fex_parse_int removed. + +2010-10-29 Jose E. Marchesi <jemarch@gnu.org> + + Coverage report generation. + * build-aux/generate-coverage-report: New file, from libgnupdf. + + * configure.ac: Support the --enable-coverage switch. + + * src/Makefile.am (AM_CFLAGS): Add coverage gcc options if + compiling the library with coverage support. + +2010-10-29 Jose E. Marchesi <jemarch@gnu.org> + + rec-type-reg unit tests and bug fixes. + * torture/rec-type-reg/rec-type-reg-get.c: New file. + (test_rec_type_reg_get): New function. + (rec_type_reg_get_nominal): New test. + (rec_type_reg_get_nonexisting): New test. + + * torture/rec-type-reg/rec-type-reg-register.c: New file. + (test_rec_type_reg_register): New function. + (rec_type_reg_register_nominal): New test. + + * torture/rec-type-reg/rec-type-reg-destroy.c: New file. + (test_rec_type_reg_destroy): New function. + (rec_type_reg_destroy_nominal): New test. + + * torture/rec-type-reg/rec-type-reg-new.c: New file. + (test_rec_type_reg_new): New function. + (rec_type_reg_new_nominal): New test. + + * torture/rec-type-reg/tsuite-rec-type-reg.c: New file. + (tsuite_rec_type_reg): New function. + +2010-10-29 Jose E. Marchesi <jemarch@gnu.org> + + rec-type unit tests and bug fixes. + * torture/rec-type/rec-type-check.c: New file. + (test_rec_type_check): New function. + (rec_type_check_int): New test. + (rec_type_check_bool): New test. + (rec_type_check_range): New test. + (rec_type_check_real): New test. + (rec_type_check_size): New test. + (rec_type_check_line): New test. + (rec_type_check_regexp): New test. + (rec_type_check_date): New test. + (rec_type_check_enum): New test. + (rec_type_check_field): New test. + (rec_type_check_email): New test. + + * torture/rec-type/rec-type-equal-p.c: New file. + (test_rec_type_equal_p): New function. + (rec_type_equal_p_nominal): New test. + + * torture/rec-type/rec-type-kind-str.c: New file. + (test_rec_type_kind_str): New function. + (rec_type_kind_str_nominal): New test. + + * torture/rec-type/rec-type-kind.c: New file. + (test_rec_type_kind): New function. + (rec_type_kind_nominal): New test. + + * torture/rec-type/rec-type-descr-field-name.c: New file. + (test_rec_type_descr_field_name): New function. + (rec_type_descr_field_name_nominal): New test. + (rec_type_descr_field_name_invalid): New test. + + * torture/rec-type/rec-type-descr-p.c: New file. + (test_rec_type_descr_p): New function. + (rec_type_descr_p_nominal): New test. + (rec_type_descr_p_invalid): New test. + + * torture/rec-type/rec-type-destroy.c: New file. + (test_rec_type_destroy): New function. + (rec_type_destroy_nominal): New test. + + * torture/rec-type/rec-type-new.c: New file. + (test_rec_type_new): New function. + (rec_type_new_nominal): New test. + (rec_type_new_invalid): New test. + + * torture/rec-type/tsuite-rec-type.c: New file. + (tsuite_rec_type): New function. + +2010-10-29 Jose E. Marchesi <jemarch@gnu.org> + + rec-field-name unit tests and bug fixes. + * TESTS: Regenerated. + + * torture/rec-field-name/rec-field-name-part-normalise.c: New + file. + (test_rec_field_name_part_normalise): New function. + (rec_field_name_part_normalise_nominal): New test. + + * torture/rec-field-name/rec-field-name-str-p.c: New file. + (test_rec_field_name_str_p): New function. + (rec_field_name_str_p_nominal): New test. + + * torture/rec-field-name/rec-field-name-part-str-p.c: New file. + (test_rec_field_name_part_str_p): New function. + (rec_field_name_part_str_p_nominal): New test. + + * torture/rec-field-name/rec-field-name-get.c: New file. + (test_rec_field_name_get): New function. + (rec_field_name_get_nominal): New test. + + * torture/rec-field-name/rec-field-name-set.c: New file. + (test_rec_field_name_set): New function. + (rec_field_name_set_nominal): New test. + + * torture/rec-field-name/rec-field-name-size.c: New file. + (test_rec_field_name_size): New function. + (rec_field_name_size_empty): New test. + (rec_field_name_size_nonempty): New test. + + * torture/rec-field-name/rec-field-name-ref-p.c: New file. + (test_rec_field_name_ref_p): New function. + (rec_field_name_ref_p_empty): New test. + (rec_field_naem_ref_p_nonempty): New test. + + * torture/rec-field-name/rec-field-name-equal-p.c: New file. + (test_rec_field_name_equal_p): New function. + (rec_field_name_equal_p_empty): New test. + (rec_field_name_equal_p_nonempty): New test. + + * torture/rec-field-name/rec-field-name-eql-p.c: New file. + (test_rec_field_name_eql_p): New function. + (rec_field_name_eql_p_empty): New test. + (rec_field_naem_eql_p_nonempty): New test. + + * torture/rec-field-name/rec-field-name-dup.c: New file. + (test_rec_field_name_dup): New function. + (rec_field_name_dup_empty): New test. + (rec_field_name_dup_nominal): New test. + + * torture/rec-field-name/rec-field-name-destroy.c: New file. + (test_rec_field_name_destroy): New function. + (rec_field_name_destroy_nominal): New test. + + * torture/rec-field-name/tsuite-rec-field-name.c: New file. + + * torture/rec-field-name/rec-field-name-new.c: New file. + (test_rec_field_name_new): New function. + (rec_field_name_new_nominal): New test. + +2010-10-29 Jose E. Marchesi <jemarch@gnu.org> + + rec-comment unit tests and bug fixes. + * TESTS: regenerated. + + * src/rec-comment.c (rec_comment_new): Check for a NULL argument. + + * torture/rec-comment/rec-comment/equal-p.c: New file. + (test_rec_comment_equal_p): New function. + (rec_comment_equal_p_nominal): New test. + + * torture/rec-comment/rec-comment-set-text.c: New file. + (test_rec_comment_set_text): New function. + (rec_comment_set_text_nominal): New test. + + * torture/rec-comment/rec-commment-text.c: New file. + (test_rec_comment_text): New function. + (rec_comment_text_nominal): New test. + (rec_comment_text_empty): New test. + + * torture/rec-comment/rec-comment-dup.c: New file. + (test_rec_comment_dup): New function. + (rec_comment_dup_nominal): New test. + + * torture/rec-comment/rec-comment-new.c: New file. + (test_rec_comment_new): New function. + (rec_comment_new_nominal): New test. + (rec_comment_new_null): New test. + + * torture/rec-comment/rec-comment-destroy.c: New file. + (test_rec_comment_destroy): New function. + (rec_comment_destroy_nominal): New test. + + * torture/runtests.c (main): rec-comment test suite added. + + * torture/Makefile.am: rec-comment files added. + + * torture/rec-comment/tsuite-rec-comment.c: New file. + (tsuite_rec_comment): New function. + +2010-10-28 Jose E. Marchesi <jemarch@gnu.org> + + Regenerate TESTS. + * TESTS: Regenerated. + +2010-10-28 Jose E. Marchesi <jemarch@gnu.org> + + Unit tests for rec_mset_get. + * torture/rec-mset/rec-mset-get.c: New file + (test_rec_mset_get): New function. + (rec_mset_get_empty): New test. + (rec_mset_get_existing): New test. + (rec_mset_get_any): New test. + (rec_mset_get_invalid): New test. + +2010-10-28 Jose E. Marchesi <jemarch@gnu.org> + + Unit tests for rec_mset_count. + * torture/rec-mset/rec-mset-count.c: New file. + (test_rec_mset_count): New function. + (rec_mset_count_empty): New test. + (rec_mset_count_existing): New test. + (rec_mset_count_nonexisting): New test. + +2010-10-28 Jose E. Marchesi <jemarch@gnu.org> + + Unit tests for rec_mset_register_type. + * torture/rec-mset/rec-mset-register-type.c: New file. + (test_rec_mset_register_type): New function. + (rec_mset_register_type_nominal): New test. + +2010-10-28 Jose E. Marchesi <jemarch@gnu.org> + + Unit tests for rec_mset_type_p. + * torture/rec-mset/rec-mset-type-p.c: New file. + (test_rec_mset_type_p): New function. + (rec_mset_type_p_any): New test. + (rec_mset_type_p_existing): New test. + (rec_mset_type_p_nonexisting): New test. + + * torture/rec-mset/elem-types.h: New file. + +2010-10-28 Jose E. Marchesi <jemarch@gnu.org> + + Unit tests for rec_mset_dup, and a bug fixed. + * src/rec-mset.c (rec_mset_dup): Avoid duplicating the counter of + nodes of the element types. + + * torture/Makefile.am (REC_MSET_TSUITE): rec-mset-dup.c added. + + * torture/rec-mset/rec-mset-dup.c: New file. + (test_rec_mset_dup): New function. + (rec_mset_dup_empty): New test. + +2010-10-28 Jose E. Marchesi <jemarch@gnu.org> + + rec_mset test suite. + * torture/runtests.c: rec_mset test suite added. + + * torture/Makefile.am: Include files from the rec_mset test suite. + + * torture/rec-mset/rec-mset-new.c: New file. + (rec_mset_new_and_destroy): New unit test. + + * torture/rec-mset/tsuite-rec-mset.c: New file. + (tsuite_rec_mset): New function. + +2010-10-28 Jose E. Marchesi <jemarch@gnu.org> + + * tasktool (tt_db_template_header): New variable. + (tt_db_template_issue): New variable. + (tt_db_template): Use tt_db_template_header and tt_db_template_issue. + (tt_db_wish): New variable. + (tt_db_wish_id): New variable. + (tt_db_wish_summary): New variable. + (tt_db_wish_description): New variable. + +2010-10-28 Jose E. Marchesi <jemarch@gnu.org> + + Documentation improvements. + * utils/recset.c (recutl_print_help): Don't duplicate the + --case-insensitive option in the output of --help. + + * utils/recinf.c (recutl_print_help): Print a newline before the + examples in the output of --help. + + * doc/recutils.texi: Documentation for recdel, recins, recset and + recfix added to the reference manual. + +2010-10-25 Jose E. Marchesi <jemarch@gnu.org> + + User manual work. + * doc/recutils.texi (Fields and Records): Wording improvements. + (Escalar types): Completed. + (String types): Completed. + (Time related types): Completed. + (recinf Invocation): Document -S|--print-sexps. + + * doc/recutils.texi (Top): Improve the menu layout. + +2010-10-24 Jose E. Marchesi <jemarch@gnu.org> + + i18n with gettext. + * m4/gettext.m4: Upgrade to gettext-0.18.1. + * m4/iconv.m4: Upgrade to gettext-0.18.1. + * m4/lib-ld.m4: Upgrade to gettext-0.18.1. + * m4/lib-link.m4: Upgrade to gettext-0.18.1. + * m4/progtest.m4: Upgrade to gettext-0.18.1. + * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.18.1. + + * src/Makefile.am (librec_la_SOURCES): Add rec.c. + + * src/rec-fex.c: Internationalize strings with gettext. + * src/rec-types.c: Likewise. + * src/rec-parser.c: Likewise. + * src/rec-int.c: Likewise. + * src/rec-field-name.c: Likewise. + * utils/recutl.c: Likewise. + * utils/recset.c: Likewise. + * utils/recsel.c: Likewise. + * utils/recins.c: Likewise. + * utils/recinf.c: Likewise. + * utils/recdel.c: Likewise. + * utils/mdb2rec.c: Likewise. + * utils/csv2rec.c: Likewise. + + * Makefile.am (SUBDIRS): Add po. + +2010-09-23 Jose E. Marchesi <jemarch@gnu.org> + + * configure.ac: Invoke AB_INIT. + +2010-09-19 Jose E. Marchesi <jemarch@gnu.org> + + Simple fix in --help. + * utils/recutl.h (COMMON_ARGS_DOC): Don't mention recsel in the + description of the --version option. + +2010-09-14 Jose E. Marchesi <jemarch@gnu.org> + + rec-mode: make C-a to do the right thing. + * lisp/rec-mode.el (rec-mode-map): Bind C-a to + rec-cmd-beginning-of-line. + (rec-mode-edit-map): Likewise. + (rec-cmd-beginning-of-line): New function. + +2010-09-09 Jose E. Marchesi <jemarch@gnu.org> + + Support for localization on lisp output. + * src/rec-record.c: New fiels 'char_location' and + 'char_location_str' in the 'rec_record_s' struct. + + * src/rec-parser.c (rec_parse_field): Set the char location of + fields. + (rec_parser_ungetc): Decrease parser->character. + + * src/rec-field.c: New functions 'rec_field_char_location', + 'rec_field_set_char_location' and 'rec_field_char_location_str'. + + * src/rec-parser.c: Use size_t instead of int for the 'line' field + of the rec_parser_s structure. + (rec_parser_getc): Update parser->character as well. + (rec_parser_new): Initialize parser->character to 0. + +2010-09-09 Jose E. Marchesi <jemarch@gnu.org> + + Support for lisp output. + * utils/recinf.c: Support the -S option. + + * utils/recsel.c: Likewise. + + * src/rec-writer.c (rec_write_record): New 'mode' argument. + (rec_write_field_name): Likewise. + (rec_write_field): Likewise. + (rec_write_field_str): Likewise. + + * src/rec.h: New function. + (rec_writer_mode_t): New data type. + +2010-09-02 Jose E. Marchesi <jemarch@gnu.org> + + Little doc improvements. + * doc/recutils.texi: Little doc improvements. + +2010-08-24 Jose E. Marchesi <jemarch@gnu.org> + + fixes in the parsing of types. + * src/rec-int.c (rec_int_check_descriptor): Localize the error in + the concrete field. + + * src/rec-types.c: Parsing routines rewritten. + +2010-08-23 Jose E. Marchesi <jemarch@gnu.org> + + * src/rec-types.c (rec_type_skip_blanks): New function. + (rec_type_descr_field_name): Use rec_type_skip_blanks. + (rec_type_new): Likewise. + (rec_type_parse_int): New function. + +2010-08-23 Jose E. Marchesi <jemarch@gnu.org> + + rec-sex: support for real values in some operators. + * src/rec-sex.c (rec_sex_op_real_p): New function. + (ATOF_VAL): New macro. + +2010-08-23 Jose E. Marchesi <jemarch@gnu.org> + + utilities: use xmalloc and xstrdup. + * utils/csv2rec.c: Use xmalloc instead of malloc. + Use xstrdup instead of strdup. + Include xalloc.h. + + * utils/recutl.h: Likewise. + + * utils/recutl.c: Likewise. + + * utils/recset.c: Likewise. + + * utils/recins.c: Likewise. + + * utils/mdb2rec.c: Likewise. + +2010-08-23 Jose E. Marchesi <jemarch@gnu.org> + + mdb2rec: documentation and management of money fields. + * utils/mdb2rec.c (process_table): Declare MONEY fields as real + values. + + * doc/recutils.texi (mdb2rec Examples): Written. + +2010-08-23 Jose E. Marchesi <jemarch@gnu.org> + + rec-types: support for the 'field' type. + * src/rec-types.c (REC_TYPE_FIELD_NAME): Defined. + (REC_TYPE_FIELD_VALUE_RE): Defined in terms of REC_FNAME_RE. + (REC_TYPE_NAME_RE): REC_TYPE_FIELD_NAME added. + (REC_TYPE_FIELD_DESCR_RE): Defined. + (REC_TYPE_DESCR_RE): REC_TYPE_FIELD_DESCR_RE added. + (rec_type_kind_str): Added case for REC_TYPE_FIELD. + (rec_type_check): Likewise. + (rec_type_parse_type_kind): Likewise. + (rec_type_check_field): New function. + + * src/rec.h (REC_FNAME_RE): Do not include anchors in regexp. + +2010-08-23 Jose E. Marchesi <jemarch@gnu.com> + + mdb2rec: specification of the table in the command line and the + list-tables option. + * doc/recutils.texi (mdb2rec Invocation): Document the + --list-tables command line option. + + * utils/mdb2rec.c (process_mdb): Print the names of the tables, + one per line, if mdb2rec_list_tables was specified. + + * doc/recutils.texi (mdb2rec Invocation): Document the usage of + TABLE in the command line. + + * utils/mdb2rec.c: New global variable 'mdb2rec_mdb_table'. + (parse_args): Set mdb2rec_mdb_table. + (process_mdb): Process the requested table only if + mdb2rec_mdb_table is initialized. + +2010-08-22 Jose E. Marchesi <jemarch@gnu.org> + + mdb2rec: emit field types for VARCHAR columns. + * src/rec-types.c (rec_type_new): Finish the number[] string with + a null value. + + * utils/mdb2rec.c (process_table): Process case when col_size > 0. + +2010-08-22 Jose E. Marchesi <jemarch@gnu.org> + + rec-int: warn on colling types only if the types are different. + * src/rec-int.c (rec_int_check_field_type): Emit warning on + colliding types only if the types are not equal. + + * src/rec-types.c (rec_type_equal_p): New function. + +2010-08-22 Jose E. Marchesi <jemarch@gnu.org> + + mdb2rec: use compound field names to reflect relationships between + columns in the mdb tables. + * utils/mdb2rec.c (get_field_name): New function. + (process_table): Use 'get_field_name'. + +2010-08-22 Jose E. Marchesi <jemarch@gnu.org> + + manual: texinfo fixes. + * doc/recutils.texi: mdb2rec is a chapter. + Fix mdb2rec menu. + +2010-08-22 Jose E. Marchesi <jemarch@gnu.org> + + build: advertise third-party dependencies. + * README-dev: Add a note on the dependencies on third party + products. + +2010-08-22 Jose E. Marchesi <jemarch@gnu.org> + + Validation of record type names and minor fixes. + * utils/mdb2rec.c (process_table): Use + 'rec_field_name_part_normalise'. + + * src/rec-field-name.c (rec_field_name_part_normalise): New + function. + + * utils/mdb2rec.c (process_mdb): Configure libmdb to dump dates in + ISO 8601 format. + + * src/rec-int.c (rec_int_check_descriptor): Check for the validity + of the record set type. + + * utils/recutl.h (RECORD_SELECTION_ARGS_CASES): Check for the + validity of the record types passed using -t. + + * src/rec.h: New function 'rec_field_name_str_p'. + New function 'rec_field_name_part_str_p'. + (REC_FNAME_PART_RE): Defined. + (REC_FNAME_RE): Defined. + + * src/rec-field-name.c (rec_field_name_str_p): New function. + (rec_field_name_part_str_p): New function. + + * doc/recutils.texi (Record Descriptors): Clarify that the record + types have the same format restrictions that field names. + +2010-08-22 Jose E. Marchesi <jemarch@gnu.org> + + build: check for glib as a dependency to build mdb2rec. + * configure.ac: Check for glib. + + * utils/mdb2rec.c: Include glib.h. + +2010-08-22 Jose E. Marchesi <jemarch@gnu.org> + + mdb2rec: normalize field names and new option to keep empty fields + in the rec output. + * doc/recutils.texi (mdb2rec Invocation): Document '-e'. + + * utils/mdb2rec.c (parse_args): Manage '-e'. + (process_table): Normalize field names. + +2010-08-21 Jose E. Marchesi <jemarch@gnu.org> + + utils: new util mdb2rec. + * src/rec-writer.c (rec_write_rset): Manage special case: empty + record sets with a record descriptor. + + * src/rec.h: New function 'rec_field_new_str'. + + * src/rec-field.c (rec_field_new_str): Idem. + +2010-08-20 Jose E. Marchesi <jemarch@gnu.org> + + * configure.ac: Search for libmdbtools and define MDBLIBS. + + * utils/Makefile.am: Build mdb2rec. + + * utils/mdb2rec.c: New file. + +2010-08-20 Jose E. Marchesi <jemarch@gnu.org> + + csv2rec: several minor fixes. + * utils/csv2rec.c (main): Make sure a rec database was created + before to attempt to write it. + + * configure.ac: Emit a warning if libcsv is not found, noticing + the user that csv2rec won't build. + +2010-08-20 Jose E. Marchesi <jemarch@gnu.org> + + Fixing of memory errors. + * src/rec-sex.c (rec_sex_eval_node): Free the memory used by the + compiled regexps. + + * utils/recfix.c (main): Free the memory used by the rec database. + + * utils/recsel.c (main): Likewise. + + * utils/recsel.c (recsel_process_data): Free the memory used by + the rec writer. + + * src/rec-parser.c (rec_parser_buf_adjust): Realloc to adjust the + memory used by the buffer. + + * src/rec-sex.l (rec_sex_lex_extract_name): Avoid an invalid write + after the res[] buffer. + +2010-08-20 Jose E. Marchesi <jemarch@gnu.org> + + utils: new util csv2rec. + * doc/recutils.texi (csv2rec): New chapter. + + * configure.ac: Check for libcsv and define the LIBCSV automake + conditional accondingly. + + * utils/Makefile.am (bin_PROGRAMS): csv2rec added. + (csv2rec_SOURCES): New variable. + (csv2rec_LDADD): New variable. + + * utils/csv2rec.c: New file. + +2010-08-20 Jose E. Marchesi <jemarch@gnu.org> + + build: fix autogen.sh. + * autogen.sh: Call libtoolize. + Invoke automake with --add-missing. + +2010-08-09 Jose E. Marchesi <jemarch@gnu.org> + + Little script to get cyclomatic metrics from pmccabe. + * build-aux/pmccabe2rec: New file. + +2010-08-08 Jose E. Marchesi <jemarch@gnu.org> + + Fix source in parse error messages in recinf. + * utils/recinf.c (print_info_file): Specify the file name in parse + errors instead of 'stdin'. + +2010-08-08 Jose E. Marchesi <jemarch@gnu.org> + + Generate information about tests in rec format and store it in + TESTS. + * README-dev: Added a note on updating the TESTS file when a test + is added to the test suite. + + * TESTS (Test): New file, generated ith 'get-test-data'. + + * build-aux/get-test-data: New file. + + * torture/rec-record/rec-record-size.c: rec_record_size_001 + renamed to rec_record_size_empty. + rec_record_size_002 renamed to rec_record_size_nonempty. + (test_rec_record_size): Call to rec_record_size_empty and + rec_record_size_nonempty. + + * torture/rec-record/rec-record-remove-field.c: + rec_record_remove_field_001 renamed to + rec_record_remove_field_existing. + (test_rec_record_remove_field): Call to + rec_record_remove_field_existing. + + * torture/rec-record/rec-record-new.c: rec_record_new_001 renamed + to rec_record_new_and_destroy. + + * torture/rec-record/rec-record-insert-field.c: + rec_record_insert_field_001 renamed to + rec_record_insert_field_empty. + rec_record_insert_field_002 renamed to + rec_record_insert_field_nonempty. + rec_record_insert_field_003 renamed to + rec_record_insert_field_duplicated. + (test_rec_record_insert_field): Call + rec_record_insert_field_empty, rec_record_insert_field_nonempty + and rec_record_insert_field_duplicated. + + * torture/rec-record/rec-record-field-p.c: rec_record_field_p_001 + renamed to rec_record_field_existing. + rec_record_field_p_002 renamed to rec_record_field_nonexisting. + + * torture/rec-field/rec-field-value.c: rec_field_value_001 renamed + to rec_field_value_empty. + rec_field_value_002 renamed to rec_field_value_nonempty. + (test_rec_field_value): Call to rec_field_value_empty and + rec_field_value_nonempty. + + * torture/rec-field/rec-field-set-value.c: rec_field_set_value_001 + renamed to rec_field_set_value_empty. + rec_field_set_value_002 renamed to rec_field_set_value_nonempty. + (test_rec_field_set_value): Call to rec_field_set_value_empty and + rec_field_set_value_nonempty. + + * torture/rec-field/rec-field-set-name.c: rec_field_set_name_001 + renamed to rec_field_set_name_empty. + rec_field_set_name_002 renamed to rec_field_set_name_nonempty. + (test_rec_field_set_name): Call to rec_field_set_name_empty and + rec_field_set_name_nonempty. + + * torture/rec-field/rec-field-name.c: rec_field_name_001 renamed + to rec_field_name_empty. + rec_field_name_002 renamed to rec_field_name_nonempty. + (test_rec_field_name): Call to 'rec_field_name_empty' and + 'rec_field_name_nonempty'. + Comments reformatted to contain rec data. + + * torture/rec-field/rec-field-dup.c: rec_field_dup_001 renamed to + rec_field_dup_empty. + rec_field_dup_002 renamed to rec_field_dup_nonempty. + (test_rec_field_dup): Call to 'rec_field_dup_empty' and + 'rec_field_dup_nonempty'. + Comments reformated to contain rec data. + +2010-08-07 Jose E. Marchesi <jemarch@gnu.org> + + Import the gnulib gettext module. + * 'gettext' gnulib module imported. + +2010-08-06 Jose E. Marchesi <jemarch@gnu.org> + + Minor fixes in documentation. + * src/rec-int.c (rec_int_check_field_type): Out to date comment + removed. + + * doc/recutils.texi (Field Types): New chapter. + (Escalar types): New section. + (String types): New section. + (Enumerated types): New section. + (Time related types): New section. + (Selection Expressions): New section. + +2010-08-05 Jose E. Marchesi <jemarch@gnu.org> + + Assure proper exit values when redirecting output and some common + facilities in recutl.c + * utils/recset.c (recset_parse_args): Use 'recutl_fatal' and + 'recutl_error'. + (main): Use 'recutl_init'. + + * utils/recins.c (recins_insert_record): Use 'recutl_error'. + (main): Use 'recutl_init'. + + * utils/recinf.c (main): Use 'recutl_init'. + + * utils/recfix.c (main): Use 'recutl_init'. + + * utils/recdel.c (recdel_delete_records): Use 'recutl_fatal'. + (recdel_delete_records): Likewise. + (recdel_parse_args): Likewise. + (main): Use 'recutl_init'. + + * utils/recsel.c (main): Use 'recutl_init'. + + * utils/recutl.c (recutl_error): New function. + + * utils/recsel.c (recsel_parse_args): Use 'recutl_fatal'. + (recsel_parse_args): Likewise. + (recsel_process_data): Use 'recutl_error'. + + * utils/recutl.c: Include 'closeout.h'. + (recutl_init): New function. + (recutl_init): Initialize the global variable 'program_name' with + 'util_name'. + (recutl_init): Install the 'close_stdout' handler to be executed + upon exit. + (recutl_fini): New function. + (recutl_fatal): New function. + Include stdarg. + + * Module 'closeout' imported from gnulib. + +2010-08-05 Jose E. Marchesi <jemarch@gnu.org> + + * README-dev: Imported and adapted from GNU hello. + + * NEWS: Likewise. + + * README: Rephrased to follow the GNU hello style. + + * configure.ac: Invoke AC_PROG_YACC. + + * autogen.sh: Imported and adapted from GNU hello. + +2010-08-02 Jose E. Marchesi <jemarch@gnu.org> + + lib+utils: check the values returned by malloc. + * src/rec-field.c (rec_field_set_location): Check for the return + value of 'malloc'. + + * src/rec-parser.c (rec_parser_perror): Likewise. + + * src/rec-parser.c (rec_parse_field_name_str): Likewise. + + * src/rec-record.c (rec_record_set_location): Likewise. + + * utils/recins.c (recins_parse_args): Likewise. + + * utils/recutl.c (recutl_write_db_to_file): Likewise. + + * src/rec-fex.c (rec_fex_check): Emit error message only if there + is enough memory to build the message. + (rec_fex_parse_str_simple): Check for the return value of + 'malloc'. + (rec_fex_parse_str_subscripts): Likewise. + (rec_fex_parse_elem): Likewise. + +2010-08-01 Jose E. Marchesi <jemarch@gnu.org> + + recutl: avoid printing spurious newline characters when -P or -R + is used. + * utils/recutl.c (recutl_eval_field_expression): New variable + 'written_field'. + (recutl_eval_field_expression): Add a newline to a sequence of + field values only if some field was actually written. + + rec-record: Tiny improvement in an algorithm. + * src/rec-record.c (rec_record_get_field_by_name): Don't return + from the middle of the function. Use a variable and break + instead. + + recsel: allow dashes in field names when checking the field + expressions. + * src/rec-fex.c (rec_fex_check): Allow dashes '-' in field names + in field expressions. + + recsel: avoid a segmentation fault while printing record descriptors. + * utils/recsel.c (recsel_process_data): Test for NULL before + printing the record descriptor of a record set. Reported by Kai + via savannah. + +2010-07-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> + + Fix distcheck: linking tests in torture/. + * torture/Makefile.am: Simplify. Use relative path to librec.la + so dependencies are tracked correctly and distcheck works. + +2010-07-31 Jose E. Marchesi <jemarch@gnu.org> + + Information for the Free Software Directory added in FSD. + * FSD (Description): New file. + + Make git to ignore some more generated files. + * .gitignore: Ignore doc/recutils.aux, doc/recutils.cp, doc/recutils.cps, + doc/recutils.fn, doc/recutils.fns, doc/recutils.ky, + doc/recutils.log, doc/recutils.pg, + doc/recutils.toc, doc/recutils.tp, doc/recutils.vr and + doc/recutils.vrs. + Ignore lib/alloca.h, lib/c++defs.h, lib/stdlib.h, lib/string.h, + lib/sys, lib/time.h, lib/warn-on-use.h, lib/wchar.h. + Ignore torture/test + +2010-07-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> + + Simplify makefile rules. + * utils/Makefile.am: Simplify. + * src/Makefile.am: Likewise. + + Typos and formatting nits. + * configure.ac: Fix typo. + * doc/recutils.texi: Fix typo, add some @noindents. + +2010-07-30 Jose E. Marchesi <jemarch@gnu.org> + + * gendocs gnulib module imported. + +2010-07-25 Jose E. Marchesi <jemarch@gnu.org> + + Manual: misc improvements. + * doc/recutils.texi: Misc improvements. + +2010-07-25 Jose E. Marchesi <jemarch@gnu.org> + + GHM 2010 slides. + * doc/recutils.ept: New file. + +2010-07-23 Jose E. Marchesi <jemarch@gnu.org> + + Parametrize the name of the fields in the issues. + * tasktool: New variables containing the names of the issue + fields: tt_db_field_id, tt_db_field_summary, tt_db_field_type, + tt_db_field_status, tt_db_field_originator, tt_db_field_assignee, + tt_db_field_assigned, tt_db_field_component, tt_db_field_created, + tt_db_field_note, tt_db_field_description. + (tt_db_template): Use the variables described above. + (tt_version): Likewise. + (tt_version): Likewise. + (tt_version): Likewise. + (tt_supported_vcs): Likewise. + (tt_supported_vcs): Likewise. + +2010-07-23 Jose E. Marchesi <jemarch@gnu.org> + + Avoid build dependency with bison. + * lib/getdate.c: New file. + + * build-aux/.gitignore: Ignore ylwrap. + +2010-07-23 Jose E. Marchesi <jemarch@gnu.org> + + Integrate getdate documentation in the manual. + * doc/recutils.texi (Top): Entry for the "Date input formats" + chapter added. + Include 'getdate.texi'. + FSF copyright added in the manual. + +2010-07-23 Jose E. Marchesi <jemarch@gnu.org> + + Implementation of the 'date' field type. + * tasktool (tt_db_template): Declare Date as a field of type + 'date'. + + * src/Makefile.am (librec_la_LIBADD): LIB_CLOCK_GETTIME added to + find the definition of 'clock_gettime'. + + * src/rec-types.c (rec_type_check_date): Implemented using + 'get_date'. + Include getdate.h. + +2010-07-23 Jose E. Marchesi <jemarch@gnu.org> + + Gnulib work. + * Gnulib updated. + + * Module 'getdate' imported. + +2010-07-18 Jose E. Marchesi <jemarch@gnu.org> + + Localization of fields and better error reporting. + * src/rec-int.c (rec_int_check_record_types): Improve error + localization. + + * utils/recutl.c (recutl_parse_db_from_file): Report parse errors. + + * src/rec-int.c (rec_int_check_field_type): Use localization + information in the warning. + + * src/rec-parser.c (rec_parse_field): Annotate the fields with + their location in the source file. + + * src/rec-field.c (rec_field_destroy): Free memory occupied by the + location properties upon field destruction. + + * src/rec.h: New functions 'rec_field_source', + 'rec_field_set_source', 'rec_field_location', + 'rec_field_set_location' and 'rec_field_location_str'. + + * src/rec-field.c: Implementation of the functions listed above. + +2010-07-18 Jose E. Marchesi <jemarch@gnu.org> + + * src/rec-int.c: Copyright notification added. + +2010-07-15 Jose E. Marchesi <jemarch@gnu.org> + + * src/rec-field-name.c (rec_field_name_ref_p): New function. + + * src/rec-int.c (rec_int_check_rset): Pass 'db' to + 'rec_rset_elem_record'. + + * utils/recins.c (recins_insert_record): Pass the database + containing the rset containing the record to 'rec_int_check_rset'. + + * utils/recset.c (recset_process_actions): Likewise. + + * src/rec.h: 'rec_int_check_rset' gets a parameter (optional using + NULL) 'db'. + Likewise for 'rec_int_check_record'. + Likewise for 'rec_int_check_field_type'. + + * src/rec-int.c (rec_int_check_rset): Likewise. + +2010-07-15 Jose E. Marchesi <jemarch@gnu.org> + + New function re_int_check_db to check the integrity of a database. + * utils/recfix.c (recfix_process_data): Use 'rec_int_check_db'. + + * src/rec-int.h: New function 'rec_int_check_db'. + + * src/rec-int.c (rec_int_check_db): New function. + +2010-07-15 Jose E. Marchesi <jemarch@gnu.org> + + Relocate data integrity related code to rec-int.c. + * src/rec-int.c (rec_int_check_field_type): Use + 'rec_rset_get_type_reg' to get the type registry of records sets + instead of accessing the data structure. + + * src/rec.h: New function 'rec_rset_get_type_reg'. + + * src/rec-rset.c (rec_rset_get_type_reg): New function. + + * src/Makefile.am (librec_la_SOURCES): 'rec-int.c' added. + + * utils/recfix.c (recfix_process_data): Use 'rec_int_check_rset' + instead of 'rec_rset_check'. + + * utils/recins.c (recins_insert_record): Likewise. + + * utils/recset.c (recset_process_actions): Likewise. + + * src/rec-int.c: New file. + + * src/rec.h: 'rec_rset_check' renamed to 'rec_int_check_rset'. + 'rec_rset_check_record' renamed to 'rec_int_check_record'. + 'rec_rset_check_field_type' renamed to 'rec_int_check_field_type'. + +2010-07-14 Jose E. Marchesi <jemarch@gnu.com> + + Change -v|--verbose in recinf for -d|--descriptor. + * utils/recinf.c (COMMON_ARGS): VERBOSE_ARG renamed to + DESCRIPTOR_ARG. + (print_info_file): Process the -d|--descriptor command line + argument instead of -v|--verbose. + +2010-07-14 Jose E. Marchesi <jemarch@gnu.org> + + Support for the --type option in recinf. + * utils/recinf.c (COMMON_ARGS): New argument 'TYPE_ARG'. + (GNU_longOptions): New argument '--type'. + (recutl_help_msg): Doc for the new argument 'type'. + (recinf_type): New global variable. + (print_info_file): If a type was specified at command line, skip + records not having that type. + +2010-07-14 Jose E. Marchesi <jemarch@gnu.org> + + Keep the descriptor relative position when inserting records in an + empty record set. + * utils/recins.c (recins_insert_record): Take into account the + descriptor relative position in the record set when inserting a + record into an empty rset. + +2010-07-14 Jose E. Marchesi <jemarch@gnu.org> + + Little fixes in tasktool. + * tasktool (tt_db_show_task): Use a selection expression implying + that Id is an integer, not a string. + (tt_supported_vcs): Typo fixed. + + * tasktool (tt_db_task_p): Likewise. + +2010-07-14 Jose E. Marchesi <jemarch@gnu.org> + + Fix a regression in the definition of the REC_TYPE_DESCR_RE + regexp. + * src/rec-types.c (REC_TYPE_DESCR_RE): Regexp fixed. + +2010-07-13 Jose E. Marchesi <jemarch@gnu.org> + + Support for the type 'field' removed. + * src/rec-types.c: Data types, constants and functions removed for + the 'field' type. + +2010-07-13 Jose E. Marchesi <jemarch@gnu.org> + + Bug preventing empty fields without a beginning space fixed. + * src/rec-parser.c (rec_parse_field_name): If a newline is found + terminating a field name then push it back to the input stream, so + it will be part of the field value. + +2010-07-13 Jose E. Marchesi <jemarch@gnu.org> + + Keep information about the position of the record descriptor in a + record set. + * src/rec-rset.c (rec_rset_set_descriptor_pos): New function. + (rec_rset_descriptor_pos): New function. + (rec_rset_new): Initialize new->descriptor_pos to 0. + (struct rec_rset_s): New field descriptor_pos. + + * src/rec.h: Prototypes for 'rec_rset_descriptor_pos' and + 'rec_rset_set_descriptor_pos'. + + * src/rec-parser.c (rec_parse_rset): New local variable to store + the number of comments added to the record set. In the special + case where some comments are preceding the first record descriptor + in the file, store the relative position of the descriptor in the + record set using rec_rset_descriptor_pos. + + * src/rec-writer.c (rec_write_rset): Write the descriptor in its + relative position into the record set. + +2010-06-19 Jose E. Marchesi <jemarch@gnu.org> + + * utils/recins.c: Help string improved. + +2010-04-30 Jose E. Marchesi <jemarch@gnu.org> + + * lisp/rec-mode.el (rec-count): New implementation based on + 'recsel'. + +2010-04-28 Jose E. Marchesi <jemarch@gnu.org> + + * .gitignore: Ignore /utils/recfix. + +2010-04-22 Jose E. Marchesi <jemarch@gnu.org> + + * utils/recset.c (recset_parse_args): Stop the program with an + error code if an invalid option is specified in the command line. + (recset_process_actions): SET action implemented. + +2010-04-21 Jose E. Marchesi <jemarch@gnu.org> + + * utils/recset.c: Help string completed with record selection + options, fields selection options and actions. + + * doc/recutils.texi (Record Descriptors): Documentation for the + record descriptor field '%order'. + +2010-04-08 Jose E. Marchesi <jemarch@gnu.org> + + * src/rec-mset.c: Distribution terms added. + + * src/rec-mset.h: Likewise. + +2010-04-07 Jose E. Marchesi <jemarch@gnu.org> + + * src/rec-mset.c (rec_mset_elem_next): Added the MSET parameter. + Return the first element of the given type if ELEM is NULL. + +2010-04-01 Jose E. Marchesi <jemarch@gnu.org> + + * .gitignore: Ignore backup files. + +2010-01-11 Jose E. Marchesi <jemarch@gnu.org> + + * src/rec-parser.c (rec_parse_field_name_str): New function. + +2010-01-09 Jose E. Marchesi <jemarch@gnu.org> + + * src/Makefile.am (librec_la_SOURCES): rec-sex.l added to the + list. + + * src/rec-sex.y: New file. + + * src/rec-sex.l: New file. + +2009-12-28 Jose E. Marchesi <jemarch@gnu.org> + + * utils/recinf.h (HELP_ARG): New file. + + * utils/recinf.c: New file. + + * utils/Makefile.am (recinf_LDFLAGS): New file. + +2009-12-23 Jose E. Marchesi <jemarch@gnu.org> + + * lisp/rec-mode.el: New file. + (rec-field-trim-value): New function. + (rec-cmd-trim-field-value): New function. + +2009-11-30 Jose E. Marchesi <jemarch@gnu.org> + + * lisp/rec-mode.el (rec-beginning-of-record-pos): Don't signal an + error if the buffer is empty. + +2009-10-02 Jose E. Marchesi <jemarch@gnu.org> + + * lisp/rec-mode.el: New file. + +2009-10-01 Jose E. Marchesi <jemarch@gnu.org> + + * src/rec-record.c (rec_record_new): Allow duplicates. + +2009-09-03 Jose E. Marchesi <jemarch@gnu.org> + + * src/grec.h: Comments clarified. + +2009-07-23 Jose E. Marchesi <jemarch@gnu.org> + + * doc/fdl.texi: New file. + + * doc/gnurec.texi: New file. + +2009-07-13 Jose E. Marchesi <jemarch@gnu.org> + + * torture/runtests.c (main): Use CK_ENV instead of CK_VERBOSE in + srunner_run_all. + + * Begin of the change log. + +Copyright 2009-2015 Jose E. Marchesi + +Copying and distribution of this file, with or without modification, are +permitted in any medium without royalty provided the copyright notice +and this notice are preserved. diff --git a/devspec.en_US/project/recutils/GNUmakefile b/devspec.en_US/project/recutils/GNUmakefile new file mode 100755 index 0000000..da25113 --- /dev/null +++ b/devspec.en_US/project/recutils/GNUmakefile @@ -0,0 +1,127 @@ +# Having a separate GNUmakefile lets me 'include' the dynamically +# generated rules created via cfg.mk (package-local configuration) +# as well as maint.mk (generic maintainer rules). +# This makefile is used only if you run GNU Make. +# It is necessary if you want to build targets usually of interest +# only to the maintainer. + +# Copyright (C) 2001, 2003, 2006-2019 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +# If the user runs GNU make but has not yet run ./configure, +# give them a diagnostic. +_gl-Makefile := $(wildcard [M]akefile) +ifneq ($(_gl-Makefile),) + +# Make tar archive easier to reproduce. +export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner + +# Allow the user to add to this in the Makefile. +ALL_RECURSIVE_TARGETS = + +include Makefile + +# Some projects override e.g., _autoreconf here. +-include $(srcdir)/cfg.mk + +# Allow cfg.mk to override these. +_build-aux ?= build-aux +_autoreconf ?= autoreconf -v + +include $(srcdir)/maint.mk + +# Ensure that $(VERSION) is up to date for dist-related targets, but not +# for others: rerunning autoreconf and recompiling everything isn't cheap. +_have-git-version-gen := \ + $(shell test -f $(srcdir)/$(_build-aux)/git-version-gen && echo yes) +ifeq ($(_have-git-version-gen)0,yes$(MAKELEVEL)) + _is-dist-target ?= $(filter-out %clean, \ + $(filter maintainer-% dist% alpha beta stable,$(MAKECMDGOALS))) + _is-install-target ?= $(filter-out %check, $(filter install%,$(MAKECMDGOALS))) + ifneq (,$(_is-dist-target)$(_is-install-target)) + _curr-ver := $(shell cd $(srcdir) \ + && $(_build-aux)/git-version-gen \ + .tarball-version \ + $(git-version-gen-tag-sed-script)) + ifneq ($(_curr-ver),$(VERSION)) + ifeq ($(_curr-ver),UNKNOWN) + $(info WARNING: unable to verify if $(VERSION) is the correct version) + else + ifneq (,$(_is-install-target)) + # GNU Coding Standards state that 'make install' should not cause + # recompilation after 'make all'. But as long as changing the version + # string alters config.h, the cost of having 'make all' always have an + # up-to-date version is prohibitive. So, as a compromise, we merely + # warn when installing a version string that is out of date; the user + # should run 'autoreconf' (or something like 'make distcheck') to + # fix the version, 'make all' to propagate it, then 'make install'. + $(info WARNING: version string $(VERSION) is out of date;) + $(info run '$(MAKE) _version' to fix it) + else + $(info INFO: running autoreconf for new version string: $(_curr-ver)) +GNUmakefile: _version + touch GNUmakefile + endif + endif + endif + endif +endif + +.PHONY: _version +_version: + cd $(srcdir) && rm -rf autom4te.cache .version && $(_autoreconf) + $(MAKE) $(AM_MAKEFLAGS) Makefile + +else + +.DEFAULT_GOAL := abort-due-to-no-makefile +srcdir = . + +# The package can override .DEFAULT_GOAL to run actions like autoreconf. +-include ./cfg.mk + +# Allow cfg.mk to override these. +_build-aux ?= build-aux +_autoreconf ?= autoreconf -v + +include ./maint.mk + +ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile) +$(MAKECMDGOALS): abort-due-to-no-makefile +endif + +abort-due-to-no-makefile: + @echo There seems to be no Makefile in this directory. 1>&2 + @echo "You must run ./configure before running 'make'." 1>&2 + @exit 1 + +endif + +# Tell version 3.79 and up of GNU make to not build goals in this +# directory in parallel, in case someone tries to build multiple +# targets, and one of them can cause a recursive target to be invoked. + +# Only set this if Automake doesn't provide it. +AM_RECURSIVE_TARGETS ?= $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) \ + dist distcheck tags ctags + +ALL_RECURSIVE_TARGETS += $(AM_RECURSIVE_TARGETS) + +ifneq ($(word 2, $(MAKECMDGOALS)), ) +ifneq ($(filter $(ALL_RECURSIVE_TARGETS), $(MAKECMDGOALS)), ) +.NOTPARALLEL: +endif +endif diff --git a/devspec.en_US/project/recutils/INSTALL b/devspec.en_US/project/recutils/INSTALL new file mode 100755 index 0000000..8865734 --- /dev/null +++ b/devspec.en_US/project/recutils/INSTALL @@ -0,0 +1,368 @@ +Installation Instructions +************************* + + Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software +Foundation, Inc. + + Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without warranty of any kind. + +Basic Installation +================== + + Briefly, the shell command './configure && make && make install' +should configure, build, and install this package. The following +more-detailed instructions are generic; see the 'README' file for +instructions specific to this package. Some packages provide this +'INSTALL' file but do not implement all of the features documented +below. The lack of an optional feature in a given package is not +necessarily a bug. More recommendations for GNU packages can be found +in *note Makefile Conventions: (standards)Makefile Conventions. + + The 'configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a 'Makefile' in each directory of the package. +It may also create one or more '.h' files containing system-dependent +definitions. Finally, it creates a shell script 'config.status' that +you can run in the future to recreate the current configuration, and a +file 'config.log' containing compiler output (useful mainly for +debugging 'configure'). + + It can also use an optional file (typically called 'config.cache' and +enabled with '--cache-file=config.cache' or simply '-C') that saves the +results of its tests to speed up reconfiguring. Caching is disabled by +default to prevent problems with accidental use of stale cache files. + + If you need to do unusual things to compile the package, please try +to figure out how 'configure' could check whether to do them, and mail +diffs or instructions to the address given in the 'README' so they can +be considered for the next release. If you are using the cache, and at +some point 'config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file 'configure.ac' (or 'configure.in') is used to create +'configure' by a program called 'autoconf'. You need 'configure.ac' if +you want to change it or regenerate 'configure' using a newer version of +'autoconf'. + + The simplest way to compile this package is: + + 1. 'cd' to the directory containing the package's source code and type + './configure' to configure the package for your system. + + Running 'configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type 'make' to compile the package. + + 3. Optionally, type 'make check' to run any self-tests that come with + the package, generally using the just-built uninstalled binaries. + + 4. Type 'make install' to install the programs and any data files and + documentation. When installing into a prefix owned by root, it is + recommended that the package be configured and built as a regular + user, and only the 'make install' phase executed with root + privileges. + + 5. Optionally, type 'make installcheck' to repeat any self-tests, but + this time using the binaries in their final installed location. + This target does not install anything. Running this target as a + regular user, particularly if the prior 'make install' required + root privileges, verifies that the installation completed + correctly. + + 6. You can remove the program binaries and object files from the + source code directory by typing 'make clean'. To also remove the + files that 'configure' created (so you can compile the package for + a different kind of computer), type 'make distclean'. There is + also a 'make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + + 7. Often, you can also type 'make uninstall' to remove the installed + files again. In practice, not all packages have tested that + uninstallation works correctly, even though it is required by the + GNU Coding Standards. + + 8. Some packages, particularly those that use Automake, provide 'make + distcheck', which can by used by developers to test that all other + targets like 'make install' and 'make uninstall' work correctly. + This target is generally not run by end users. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the 'configure' script does not know about. Run './configure --help' +for details on some of the pertinent environment variables. + + You can give 'configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here is +an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU 'make'. 'cd' to the +directory where you want the object files and executables to go and run +the 'configure' script. 'configure' automatically checks for the source +code in the directory that 'configure' is in and in '..'. This is known +as a "VPATH" build. + + With a non-GNU 'make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use 'make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple '-arch' options to the +compiler but only a single '-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the 'lipo' tool if you have problems. + +Installation Names +================== + + By default, 'make install' installs the package's commands under +'/usr/local/bin', include files under '/usr/local/include', etc. You +can specify an installation prefix other than '/usr/local' by giving +'configure' the option '--prefix=PREFIX', where PREFIX must be an +absolute file name. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option '--exec-prefix=PREFIX' to 'configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like '--bindir=DIR' to specify different values for particular +kinds of files. Run 'configure --help' for a list of the directories +you can set and what kinds of files go in them. In general, the default +for these options is expressed in terms of '${prefix}', so that +specifying just '--prefix' will affect all of the other directory +specifications that were not explicitly provided. + + The most portable way to affect installation locations is to pass the +correct locations to 'configure'; however, many packages provide one or +both of the following shortcuts of passing variable assignments to the +'make install' command line to change installation locations without +having to reconfigure or recompile. + + The first method involves providing an override variable for each +affected directory. For example, 'make install +prefix=/alternate/directory' will choose an alternate location for all +directory configuration variables that were expressed in terms of +'${prefix}'. Any directories that were specified during 'configure', +but not in terms of '${prefix}', must each be overridden at install time +for the entire installation to be relocated. The approach of makefile +variable overrides for each directory variable is required by the GNU +Coding Standards, and ideally causes no recompilation. However, some +platforms have known limitations with the semantics of shared libraries +that end up requiring recompilation when using this method, particularly +noticeable in packages that use GNU Libtool. + + The second method involves providing the 'DESTDIR' variable. For +example, 'make install DESTDIR=/alternate/directory' will prepend +'/alternate/directory' before all installation names. The approach of +'DESTDIR' overrides is not required by the GNU Coding Standards, and +does not work on platforms that have drive letters. On the other hand, +it does better at avoiding recompilation issues, and works well even +when some directory options were not specified in terms of '${prefix}' +at 'configure' time. + +Optional Features +================= + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving 'configure' the +option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. + + Some packages pay attention to '--enable-FEATURE' options to +'configure', where FEATURE indicates an optional part of the package. +They may also pay attention to '--with-PACKAGE' options, where PACKAGE +is something like 'gnu-as' or 'x' (for the X Window System). The +'README' should mention any '--enable-' and '--with-' options that the +package recognizes. + + For packages that use the X Window System, 'configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the 'configure' options '--x-includes=DIR' and +'--x-libraries=DIR' to specify their locations. + + Some packages offer the ability to configure how verbose the +execution of 'make' will be. For these packages, running './configure +--enable-silent-rules' sets the default to minimal output, which can be +overridden with 'make V=1'; while running './configure +--disable-silent-rules' sets the default to verbose, which can be +overridden with 'make V=0'. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC +is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + HP-UX 'make' updates targets which have the same time stamps as their +prerequisites, which makes it generally unusable when shipped generated +files such as 'configure' are involved. Use GNU 'make' instead. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its '<wchar.h>' header file. The option '-nodtk' can be used as a +workaround. If GNU CC is not installed, it is therefore recommended to +try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put '/usr/ucb' early in your 'PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in '/usr/bin'. So, if you need '/usr/ucb' +in your 'PATH', put it _after_ '/usr/bin'. + + On Haiku, software installed for all users goes in '/boot/common', +not '/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + +Specifying the System Type +========================== + + There may be some features 'configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, 'configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +'--build=TYPE' option. TYPE can either be a short name for the system +type, such as 'sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS + KERNEL-OS + + See the file 'config.sub' for the possible values of each field. If +'config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option '--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with '--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for 'configure' scripts to share, +you can create a site shell script called 'config.site' that gives +default values for variables like 'CC', 'cache_file', and 'prefix'. +'configure' looks for 'PREFIX/share/config.site' if it exists, then +'PREFIX/etc/config.site' if it exists. Or, you can set the +'CONFIG_SITE' environment variable to the location of the site script. +A warning: not all 'configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to 'configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the 'configure' command line, using 'VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified 'gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an +Autoconf limitation. Until the limitation is lifted, you can use this +workaround: + + CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash + +'configure' Invocation +====================== + + 'configure' recognizes the following options to control how it +operates. + +'--help' +'-h' + Print a summary of all of the options to 'configure', and exit. + +'--help=short' +'--help=recursive' + Print a summary of the options unique to this package's + 'configure', and exit. The 'short' variant lists options used only + in the top level, while the 'recursive' variant lists options also + present in any nested packages. + +'--version' +'-V' + Print the version of Autoconf used to generate the 'configure' + script, and exit. + +'--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally 'config.cache'. FILE defaults to '/dev/null' to + disable caching. + +'--config-cache' +'-C' + Alias for '--cache-file=config.cache'. + +'--quiet' +'--silent' +'-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to '/dev/null' (any error + messages will still be shown). + +'--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + 'configure' can determine that directory automatically. + +'--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: for + more details, including other options available for fine-tuning the + installation locations. + +'--no-create' +'-n' + Run the configure checks, but stop before creating any output + files. + +'configure' also accepts some other, not widely useful, options. Run +'configure --help' for more details. diff --git a/devspec.en_US/project/recutils/Makefile b/devspec.en_US/project/recutils/Makefile new file mode 100755 index 0000000..642f85f --- /dev/null +++ b/devspec.en_US/project/recutils/Makefile @@ -0,0 +1,2084 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# Top-level Makefile.am + +# Copyright (C) 2009-2015 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/recutils +pkgincludedir = $(includedir)/recutils +pkglibdir = $(libdir)/recutils +pkglibexecdir = $(libexecdir)/recutils +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +#am__append_1 = algol68 +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(am__DIST_COMMON) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_$(V)) +am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +DIST_SUBDIRS = lib libcsv src utils bash doc po man torture etc \ + algol68 +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/compile \ + $(top_srcdir)/build-aux/config.guess \ + $(top_srcdir)/build-aux/config.rpath \ + $(top_srcdir)/build-aux/config.sub \ + $(top_srcdir)/build-aux/install-sh \ + $(top_srcdir)/build-aux/ltmain.sh \ + $(top_srcdir)/build-aux/missing ABOUT-NLS AUTHORS COPYING \ + ChangeLog INSTALL NEWS README build-aux/compile \ + build-aux/config.guess build-aux/config.rpath \ + build-aux/config.sub build-aux/depcomp build-aux/install-sh \ + build-aux/ltmain.sh build-aux/mdate-sh build-aux/missing \ + build-aux/texinfo.tex build-aux/ylwrap +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing aclocal-1.15 +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = $${TAR-tar} +AM_DEFAULT_VERBOSITY = 1 +APPLE_UNIVERSAL_BUILD = 0 +AR = ar +ARFLAGS = cr +ASM_SYMBOL_PREFIX = "" +AUTOCONF = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoconf +AUTOHEADER = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoheader +AUTOMAKE = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing automake-1.15 +AWK = gawk +BASH_HEADERS = /usr/include/bash +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CA68 = +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CHECK_CFLAGS = +CHECK_LIBS = +CONFIG_INCLUDE = src/config.h +CPP = gcc -E +CPPFLAGS = +CURLLIBS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = false +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FGREP = /bin/grep -F +FLOAT_H = +FLOOR_LIBM = -lm +GETOPT_CDEFS_H = +GETOPT_H = +GETTEXT_MACRO_VERSION = 0.19 +GLIBC21 = yes +GLIB_CFLAGS = +GLIB_LIBS = +GMSGFMT = /usr/bin/msgfmt +GMSGFMT_015 = /usr/bin/msgfmt +GNULIB_ACOSF = 0 +GNULIB_ACOSL = 0 +GNULIB_ASINF = 0 +GNULIB_ASINL = 0 +GNULIB_ATAN2F = 0 +GNULIB_ATANF = 0 +GNULIB_ATANL = 0 +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CANONICALIZE_FILE_NAME = 1 +GNULIB_CBRT = 0 +GNULIB_CBRTF = 0 +GNULIB_CBRTL = 0 +GNULIB_CEIL = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHDIR = 1 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 1 +GNULIB_COPYSIGN = 0 +GNULIB_COPYSIGNF = 0 +GNULIB_COPYSIGNL = 0 +GNULIB_COSF = 0 +GNULIB_COSHF = 0 +GNULIB_COSL = 0 +GNULIB_CTIME = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP = 0 +GNULIB_DUP2 = 1 +GNULIB_DUP3 = 0 +GNULIB_DUPLOCALE = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 1 +GNULIB_EXP2 = 0 +GNULIB_EXP2F = 0 +GNULIB_EXP2L = 0 +GNULIB_EXPF = 0 +GNULIB_EXPL = 0 +GNULIB_EXPLICIT_BZERO = 0 +GNULIB_EXPM1 = 0 +GNULIB_EXPM1F = 0 +GNULIB_EXPM1L = 0 +GNULIB_FABSF = 0 +GNULIB_FABSL = 0 +GNULIB_FACCESSAT = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCHMODAT = 0 +GNULIB_FCHOWNAT = 0 +GNULIB_FCLOSE = 0 +GNULIB_FCNTL = 1 +GNULIB_FDATASYNC = 0 +GNULIB_FDOPEN = 0 +GNULIB_FFLUSH = 0 +GNULIB_FFS = 0 +GNULIB_FFSL = 0 +GNULIB_FFSLL = 0 +GNULIB_FGETC = 1 +GNULIB_FGETS = 1 +GNULIB_FLOCK = 1 +GNULIB_FLOOR = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FMA = 0 +GNULIB_FMAF = 0 +GNULIB_FMAL = 0 +GNULIB_FMOD = 0 +GNULIB_FMODF = 0 +GNULIB_FMODL = 0 +GNULIB_FOPEN = 0 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 1 +GNULIB_FPURGE = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREAD = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPF = 0 +GNULIB_FREXPL = 1 +GNULIB_FSCANF = 1 +GNULIB_FSEEK = 1 +GNULIB_FSEEKO = 1 +GNULIB_FSTAT = 1 +GNULIB_FSTATAT = 0 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 1 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FUTIMENS = 0 +GNULIB_FWRITE = 1 +GNULIB_GETC = 1 +GNULIB_GETCHAR = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 1 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETGROUPS = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 1 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETPASS = 1 +GNULIB_GETSUBOPT = 0 +GNULIB_GETTIMEOFDAY = 1 +GNULIB_GETUSERSHELL = 0 +GNULIB_GL_UNISTD_H_GETOPT = +GNULIB_GRANTPT = 0 +GNULIB_GROUP_MEMBER = 1 +GNULIB_HYPOT = 0 +GNULIB_HYPOTF = 0 +GNULIB_HYPOTL = 0 +GNULIB_ILOGB = 0 +GNULIB_ILOGBF = 0 +GNULIB_ILOGBL = 0 +GNULIB_IMAXABS = 0 +GNULIB_IMAXDIV = 0 +GNULIB_ISATTY = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_ISWBLANK = 0 +GNULIB_ISWCTYPE = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPF = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LINKAT = 0 +GNULIB_LOCALECONV = 1 +GNULIB_LOCALENAME = 0 +GNULIB_LOCALTIME = 0 +GNULIB_LOG = 0 +GNULIB_LOG10 = 0 +GNULIB_LOG10F = 0 +GNULIB_LOG10L = 0 +GNULIB_LOG1P = 0 +GNULIB_LOG1PF = 0 +GNULIB_LOG1PL = 0 +GNULIB_LOG2 = 0 +GNULIB_LOG2F = 0 +GNULIB_LOG2L = 0 +GNULIB_LOGB = 0 +GNULIB_LOGBF = 0 +GNULIB_LOGBL = 0 +GNULIB_LOGF = 0 +GNULIB_LOGL = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MBRLEN = 1 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MBTOWC = 1 +GNULIB_MEMCHR = 1 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDIRAT = 0 +GNULIB_MKDTEMP = 0 +GNULIB_MKFIFO = 0 +GNULIB_MKFIFOAT = 0 +GNULIB_MKNOD = 0 +GNULIB_MKNODAT = 0 +GNULIB_MKOSTEMP = 1 +GNULIB_MKOSTEMPS = 0 +GNULIB_MKSTEMP = 1 +GNULIB_MKSTEMPS = 0 +GNULIB_MKTIME = 1 +GNULIB_MODF = 0 +GNULIB_MODFF = 0 +GNULIB_MODFL = 0 +GNULIB_NANOSLEEP = 0 +GNULIB_NL_LANGINFO = 1 +GNULIB_NONBLOCKING = 0 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_OPENAT = 0 +GNULIB_OVERRIDES_STRUCT_STAT = 0 +GNULIB_OVERRIDES_WINT_T = 0 +GNULIB_PCLOSE = 0 +GNULIB_PERROR = 0 +GNULIB_PIPE = 0 +GNULIB_PIPE2 = 0 +GNULIB_POPEN = 0 +GNULIB_POSIX_OPENPT = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_POWF = 0 +GNULIB_PREAD = 0 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 1 +GNULIB_PTHREAD_SIGMASK = 0 +GNULIB_PTSNAME = 0 +GNULIB_PTSNAME_R = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_PWRITE = 0 +GNULIB_QSORT_R = 0 +GNULIB_RAISE = 1 +GNULIB_RANDOM = 0 +GNULIB_RANDOM_R = 1 +GNULIB_RAWMEMCHR = 1 +GNULIB_READ = 0 +GNULIB_READLINK = 1 +GNULIB_READLINKAT = 0 +GNULIB_REALLOCARRAY = 0 +GNULIB_REALLOC_POSIX = 1 +GNULIB_REALPATH = 1 +GNULIB_REMAINDER = 0 +GNULIB_REMAINDERF = 0 +GNULIB_REMAINDERL = 0 +GNULIB_REMOVE = 0 +GNULIB_RENAME = 1 +GNULIB_RENAMEAT = 0 +GNULIB_RINT = 0 +GNULIB_RINTF = 0 +GNULIB_RINTL = 0 +GNULIB_RMDIR = 1 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SCANF = 1 +GNULIB_SECURE_GETENV = 1 +GNULIB_SETENV = 1 +GNULIB_SETHOSTNAME = 0 +GNULIB_SETLOCALE = 0 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SINF = 0 +GNULIB_SINHF = 0 +GNULIB_SINL = 0 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 0 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_SQRTF = 0 +GNULIB_SQRTL = 0 +GNULIB_STAT = 1 +GNULIB_STDIO_H_NONBLOCKING = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 1 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 1 +GNULIB_STRERROR = 1 +GNULIB_STRERROR_R = 0 +GNULIB_STRFTIME = 0 +GNULIB_STRNCAT = 0 +GNULIB_STRNDUP = 0 +GNULIB_STRNLEN = 0 +GNULIB_STRPBRK = 0 +GNULIB_STRPTIME = 0 +GNULIB_STRSEP = 1 +GNULIB_STRSIGNAL = 0 +GNULIB_STRSTR = 0 +GNULIB_STRTOD = 0 +GNULIB_STRTOIMAX = 0 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRTOUMAX = 0 +GNULIB_STRVERSCMP = 1 +GNULIB_SYMLINK = 0 +GNULIB_SYMLINKAT = 0 +GNULIB_SYSTEM_POSIX = 0 +GNULIB_TANF = 0 +GNULIB_TANHF = 0 +GNULIB_TANL = 0 +GNULIB_TIMEGM = 1 +GNULIB_TIME_R = 1 +GNULIB_TIME_RZ = 1 +GNULIB_TMPFILE = 0 +GNULIB_TOWCTRANS = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCATE = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_TTYNAME_R = 0 +GNULIB_TZSET = 1 +GNULIB_UNISTD_H_NONBLOCKING = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNLINK = 0 +GNULIB_UNLINKAT = 0 +GNULIB_UNLOCKPT = 0 +GNULIB_UNSETENV = 1 +GNULIB_USLEEP = 0 +GNULIB_UTIMENSAT = 0 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 1 +GNULIB_VFSCANF = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSCANF = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WAITPID = 1 +GNULIB_WCPCPY = 0 +GNULIB_WCPNCPY = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSCASECMP = 0 +GNULIB_WCSCAT = 0 +GNULIB_WCSCHR = 0 +GNULIB_WCSCMP = 0 +GNULIB_WCSCOLL = 0 +GNULIB_WCSCPY = 0 +GNULIB_WCSCSPN = 0 +GNULIB_WCSDUP = 0 +GNULIB_WCSFTIME = 0 +GNULIB_WCSLEN = 0 +GNULIB_WCSNCASECMP = 0 +GNULIB_WCSNCAT = 0 +GNULIB_WCSNCMP = 0 +GNULIB_WCSNCPY = 0 +GNULIB_WCSNLEN = 0 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSPBRK = 0 +GNULIB_WCSRCHR = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCSSPN = 0 +GNULIB_WCSSTR = 0 +GNULIB_WCSTOK = 0 +GNULIB_WCSWIDTH = 0 +GNULIB_WCSXFRM = 0 +GNULIB_WCTOB = 1 +GNULIB_WCTOMB = 1 +GNULIB_WCTRANS = 0 +GNULIB_WCTYPE = 0 +GNULIB_WCWIDTH = 0 +GNULIB_WMEMCHR = 0 +GNULIB_WMEMCMP = 0 +GNULIB_WMEMCPY = 0 +GNULIB_WMEMMOVE = 0 +GNULIB_WMEMSET = 0 +GNULIB_WRITE = 0 +GNULIB__EXIT = 0 +GREP = /bin/grep +HAVE_ACOSF = 1 +HAVE_ACOSL = 1 +HAVE_ASINF = 1 +HAVE_ASINL = 1 +HAVE_ATAN2F = 1 +HAVE_ATANF = 1 +HAVE_ATANL = 1 +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_C99_STDINT_H = 1 +HAVE_CANONICALIZE_FILE_NAME = 1 +HAVE_CBRT = 1 +HAVE_CBRTF = 1 +HAVE_CBRTL = 1 +HAVE_CHOWN = 1 +HAVE_COPYSIGN = 1 +HAVE_COPYSIGNL = 1 +HAVE_COSF = 1 +HAVE_COSHF = 1 +HAVE_COSL = 1 +HAVE_CRTDEFS_H = 0 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_CBRTF = 1 +HAVE_DECL_CBRTL = 1 +HAVE_DECL_CEILF = 1 +HAVE_DECL_CEILL = 1 +HAVE_DECL_COPYSIGNF = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXP2 = 1 +HAVE_DECL_EXP2F = 1 +HAVE_DECL_EXP2L = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_EXPM1L = 1 +HAVE_DECL_FCHDIR = 1 +HAVE_DECL_FDATASYNC = 1 +HAVE_DECL_FLOORF = 1 +HAVE_DECL_FLOORL = 1 +HAVE_DECL_FPURGE = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_FSEEKO = 1 +HAVE_DECL_FTELLO = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETDOMAINNAME = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_GETPAGESIZE = 1 +HAVE_DECL_GETUSERSHELL = 1 +HAVE_DECL_IMAXABS = 1 +HAVE_DECL_IMAXDIV = 1 +HAVE_DECL_INITSTATE = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOCALTIME_R = 1 +HAVE_DECL_LOG10L = 1 +HAVE_DECL_LOG2 = 1 +HAVE_DECL_LOG2F = 1 +HAVE_DECL_LOG2L = 1 +HAVE_DECL_LOGB = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_REMAINDER = 1 +HAVE_DECL_REMAINDERL = 1 +HAVE_DECL_RINTF = 1 +HAVE_DECL_ROUND = 1 +HAVE_DECL_ROUNDF = 1 +HAVE_DECL_ROUNDL = 1 +HAVE_DECL_SETENV = 1 +HAVE_DECL_SETHOSTNAME = 1 +HAVE_DECL_SETSTATE = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR_R = 1 +HAVE_DECL_STRNCASECMP = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOIMAX = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_STRTOUMAX = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCATE = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_TRUNCL = 1 +HAVE_DECL_TTYNAME_R = 1 +HAVE_DECL_UNSETENV = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_DUP3 = 1 +HAVE_DUPLOCALE = 1 +HAVE_EUIDACCESS = 1 +HAVE_EXPF = 1 +HAVE_EXPL = 1 +HAVE_EXPLICIT_BZERO = 1 +HAVE_EXPM1 = 1 +HAVE_EXPM1F = 1 +HAVE_FABSF = 1 +HAVE_FABSL = 1 +HAVE_FACCESSAT = 1 +HAVE_FCHDIR = 1 +HAVE_FCHMODAT = 1 +HAVE_FCHOWNAT = 1 +HAVE_FCNTL = 1 +HAVE_FDATASYNC = 1 +HAVE_FEATURES_H = 1 +HAVE_FFS = 1 +HAVE_FFSL = 1 +HAVE_FFSLL = 1 +HAVE_FLOCK = 1 +HAVE_FMA = 1 +HAVE_FMAF = 1 +HAVE_FMAL = 1 +HAVE_FMODF = 1 +HAVE_FMODL = 1 +HAVE_FREELOCALE = 1 +HAVE_FREXPF = 1 +HAVE_FSEEKO = 1 +HAVE_FSTATAT = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_FUTIMENS = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETGROUPS = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETLOGIN = 1 +HAVE_GETOPT_H = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETPASS = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETTIMEOFDAY = 1 +HAVE_GRANTPT = 1 +HAVE_GROUP_MEMBER = 1 +HAVE_HYPOTF = 1 +HAVE_HYPOTL = 1 +HAVE_ILOGB = 1 +HAVE_ILOGBF = 1 +HAVE_ILOGBL = 1 +HAVE_IMAXDIV_T = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWBLANK = 1 +HAVE_ISWCNTRL = 1 +HAVE_LANGINFO_ALTMON = 0 +HAVE_LANGINFO_CODESET = 1 +HAVE_LANGINFO_ERA = 1 +HAVE_LANGINFO_H = 1 +HAVE_LANGINFO_T_FMT_AMPM = 1 +HAVE_LANGINFO_YESEXPR = 1 +HAVE_LCHMOD = 1 +HAVE_LCHOWN = 1 +HAVE_LDEXPF = 1 +HAVE_LIBGCRYPT = no +HAVE_LINK = 1 +HAVE_LINKAT = 1 +HAVE_LOG10F = 1 +HAVE_LOG10L = 1 +HAVE_LOG1P = 1 +HAVE_LOG1PF = 1 +HAVE_LOG1PL = 1 +HAVE_LOGBF = 1 +HAVE_LOGBL = 1 +HAVE_LOGF = 1 +HAVE_LOGL = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MAX_ALIGN_T = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSLEN = 0 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMCHR = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDIRAT = 1 +HAVE_MKDTEMP = 1 +HAVE_MKFIFO = 1 +HAVE_MKFIFOAT = 1 +HAVE_MKNOD = 1 +HAVE_MKNODAT = 1 +HAVE_MKOSTEMP = 1 +HAVE_MKOSTEMPS = 1 +HAVE_MKSTEMP = 1 +HAVE_MKSTEMPS = 1 +HAVE_MODFF = 1 +HAVE_MODFL = 1 +HAVE_MSVC_INVALID_PARAMETER_HANDLER = 0 +HAVE_NANOSLEEP = 1 +HAVE_NEWLOCALE = 1 +HAVE_NL_LANGINFO = 1 +HAVE_OPENAT = 1 +HAVE_OS_H = 0 +HAVE_PCLOSE = 1 +HAVE_PIPE = 1 +HAVE_PIPE2 = 1 +HAVE_POPEN = 1 +HAVE_POSIX_OPENPT = 1 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_POSIX_SPAWNATTR_T = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = 1 +HAVE_POWF = 1 +HAVE_PREAD = 1 +HAVE_PTHREAD_SIGMASK = 1 +HAVE_PTSNAME = 1 +HAVE_PTSNAME_R = 1 +HAVE_PWRITE = 1 +HAVE_QSORT_R = 1 +HAVE_RAISE = 1 +HAVE_RANDOM = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_READLINKAT = 1 +HAVE_REALLOCARRAY = 1 +HAVE_REALPATH = 1 +HAVE_REMAINDER = 1 +HAVE_REMAINDERF = 1 +HAVE_RENAMEAT = 1 +HAVE_RINT = 1 +HAVE_RINTL = 1 +HAVE_RPMATCH = 1 +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0 +HAVE_SCHED_H = +HAVE_SECURE_GETENV = 1 +HAVE_SETENV = 1 +HAVE_SETHOSTNAME = 1 +HAVE_SIGACTION = 1 +HAVE_SIGHANDLER_T = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SINF = 1 +HAVE_SINHF = 1 +HAVE_SINL = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_SQRTF = 1 +HAVE_SQRTL = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASECMP = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRINGS_H = 1 +HAVE_STRPBRK = 1 +HAVE_STRPTIME = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYMLINK = 1 +HAVE_SYMLINKAT = 1 +HAVE_SYS_BITYPES_H = 0 +HAVE_SYS_CDEFS_H = +HAVE_SYS_FILE_H = 1 +HAVE_SYS_INTTYPES_H = 0 +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TANF = 1 +HAVE_TANHF = 1 +HAVE_TANL = 1 +HAVE_TIMEGM = 1 +HAVE_TIMEZONE_T = 0 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_TZSET = 1 +HAVE_UNISTD_H = 1 +HAVE_UNLINKAT = 1 +HAVE_UNLOCKPT = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_USLEEP = 1 +HAVE_UTIMENSAT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCHAR_T = 1 +HAVE_WCPCPY = 1 +HAVE_WCPNCPY = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSCASECMP = 1 +HAVE_WCSCAT = 1 +HAVE_WCSCHR = 1 +HAVE_WCSCMP = 1 +HAVE_WCSCOLL = 1 +HAVE_WCSCPY = 1 +HAVE_WCSCSPN = 1 +HAVE_WCSDUP = 1 +HAVE_WCSFTIME = 1 +HAVE_WCSLEN = 1 +HAVE_WCSNCASECMP = 1 +HAVE_WCSNCAT = 1 +HAVE_WCSNCMP = 1 +HAVE_WCSNCPY = 1 +HAVE_WCSNLEN = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSPBRK = 1 +HAVE_WCSRCHR = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCSSPN = 1 +HAVE_WCSSTR = 1 +HAVE_WCSTOK = 1 +HAVE_WCSWIDTH = 1 +HAVE_WCSXFRM = 1 +HAVE_WCTRANS_T = 1 +HAVE_WCTYPE_H = 1 +HAVE_WCTYPE_T = 1 +HAVE_WINSOCK2_H = 0 +HAVE_WINT_T = 1 +HAVE_WMEMCHR = 1 +HAVE_WMEMCMP = 1 +HAVE_WMEMCPY = 1 +HAVE_WMEMMOVE = 1 +HAVE_WMEMSET = 1 +HAVE_XLOCALE_H = 1 +HAVE__BOOL = 1 +HAVE__EXIT = 1 +HELP2MAN = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing help2man +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +INT32_MAX_LT_INTMAX_MAX = 1 +INT64_MAX_EQ_LONG_MAX = 0 +INTLLIBS = +INTL_MACOSX_LIBS = +LD = /usr/bin/ld +LDFLAGS = +LEX = flex +LEXLIB = -lfl +LEX_OUTPUT_ROOT = lex.yy +LIBGCRYPT = +LIBGCRYPT_PREFIX = +LIBICONV = -liconv +LIBINTL = +LIBMULTITHREAD = -pthread -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBREADLINE = +LIBS = +LIBTHREAD = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIB_ACL = +LIB_CLOCK_GETTIME = +LIB_EACCESS = +LIB_POSIX_SPAWN = +LIB_SELINUX = +LIMITS_H = limits.h +LIPO = +LN_S = ln -s +LOCALCHARSET_TESTS_ENVIRONMENT = +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTALLOCA = +LTLIBGCRYPT = +LTLIBICONV = -liconv +LTLIBINTL = +LTLIBMULTITHREAD = -pthread +LTLIBOBJS = +LTLIBPTH = +LTLIBREADLINE = +LTLIBTHREAD = +LT_SYS_LIBRARY_PATH = +MAKEINFO = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing makeinfo +MANIFEST_TOOL = : +MDBLIBS = +MDB_DATETIME = +MKDIR_P = /bin/mkdir -p +MSGFMT = /usr/bin/msgfmt +MSGFMT_015 = /usr/bin/msgfmt +MSGMERGE = /usr/bin/msgmerge +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = <fcntl.h> +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = <getopt.h> +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = <inttypes.h> +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = <langinfo.h> +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = <limits.h> +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = <locale.h> +NEXT_AS_FIRST_DIRECTIVE_MATH_H = <math.h> +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = <signal.h> +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = <spawn.h> +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = <stdint.h> +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = <stdio.h> +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = <stdlib.h> +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = <strings.h> +NEXT_AS_FIRST_DIRECTIVE_STRING_H = <string.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = <sys/file.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = <sys/stat.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = <sys/time.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = <sys/types.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = <sys/wait.h> +NEXT_AS_FIRST_DIRECTIVE_TIME_H = <time.h> +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = <unistd.h> +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = <wchar.h> +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = <wctype.h> +NEXT_ERRNO_H = +NEXT_FCNTL_H = <fcntl.h> +NEXT_FLOAT_H = +NEXT_GETOPT_H = <getopt.h> +NEXT_INTTYPES_H = <inttypes.h> +NEXT_LANGINFO_H = <langinfo.h> +NEXT_LIMITS_H = <limits.h> +NEXT_LOCALE_H = <locale.h> +NEXT_MATH_H = <math.h> +NEXT_SCHED_H = +NEXT_SELINUX_SELINUX_H = +NEXT_SIGNAL_H = <signal.h> +NEXT_SPAWN_H = <spawn.h> +NEXT_STDARG_H = <stdarg.h> +NEXT_STDDEF_H = +NEXT_STDINT_H = <stdint.h> +NEXT_STDIO_H = <stdio.h> +NEXT_STDLIB_H = <stdlib.h> +NEXT_STRINGS_H = <strings.h> +NEXT_STRING_H = <string.h> +NEXT_SYS_FILE_H = <sys/file.h> +NEXT_SYS_STAT_H = <sys/stat.h> +NEXT_SYS_TIME_H = <sys/time.h> +NEXT_SYS_TYPES_H = <sys/types.h> +NEXT_SYS_WAIT_H = <sys/wait.h> +NEXT_TIME_H = <time.h> +NEXT_UNISTD_H = <unistd.h> +NEXT_WCHAR_H = <wchar.h> +NEXT_WCTYPE_H = <wctype.h> +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = recutils +PACKAGE_BUGREPORT = bug-recutils@gnu.org +PACKAGE_NAME = GNU recutils +PACKAGE_STRING = GNU recutils 1.8 +PACKAGE_TARNAME = recutils +PACKAGE_URL = http://www.gnu.org/software/recutils/ +PACKAGE_VERSION = 1.8 +PATH_SEPARATOR = : +PKG_CONFIG = /usr/bin/pkg-config +PKG_CONFIG_LIBDIR = +PKG_CONFIG_PATH = +POSUB = po +PRAGMA_COLUMNS = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PRIPTR_PREFIX = "l" +PRI_MACROS_BROKEN = 0 +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = 0 +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_ACOSF = 0 +REPLACE_ASINF = 0 +REPLACE_ATAN2F = 0 +REPLACE_ATANF = 0 +REPLACE_BTOWC = 0 +REPLACE_CALLOC = 0 +REPLACE_CANONICALIZE_FILE_NAME = 0 +REPLACE_CBRTF = 0 +REPLACE_CBRTL = 0 +REPLACE_CEIL = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_COSF = 0 +REPLACE_COSHF = 0 +REPLACE_CTIME = GNULIB_PORTCHECK +REPLACE_DPRINTF = 0 +REPLACE_DUP = 0 +REPLACE_DUP2 = 0 +REPLACE_DUPLOCALE = 0 +REPLACE_EXP2 = 0 +REPLACE_EXP2L = 0 +REPLACE_EXPF = 0 +REPLACE_EXPM1 = 0 +REPLACE_EXPM1F = 0 +REPLACE_FABSL = 0 +REPLACE_FACCESSAT = 0 +REPLACE_FCHOWNAT = 0 +REPLACE_FCLOSE = 0 +REPLACE_FCNTL = 1 +REPLACE_FDOPEN = 0 +REPLACE_FFLUSH = 0 +REPLACE_FLOOR = 0 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FMA = 0 +REPLACE_FMAF = 0 +REPLACE_FMAL = 0 +REPLACE_FMOD = 0 +REPLACE_FMODF = 0 +REPLACE_FMODL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 1 +REPLACE_FPURGE = 0 +REPLACE_FREELOCALE = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPF = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 0 +REPLACE_FSTAT = 0 +REPLACE_FSTATAT = 0 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_FTRUNCATE = 0 +REPLACE_FUTIMENS = 0 +REPLACE_GETCWD = 0 +REPLACE_GETDELIM = 0 +REPLACE_GETDOMAINNAME = 0 +REPLACE_GETDTABLESIZE = 0 +REPLACE_GETGROUPS = 0 +REPLACE_GETLINE = 0 +REPLACE_GETLOGIN_R = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETPASS = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_GMTIME = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_HYPOT = 0 +REPLACE_HYPOTF = 0 +REPLACE_HYPOTL = 0 +REPLACE_ILOGB = 0 +REPLACE_ILOGBF = 0 +REPLACE_ILOGBL = 0 +REPLACE_ISATTY = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWBLANK = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_ITOLD = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LINK = 0 +REPLACE_LINKAT = 0 +REPLACE_LOCALECONV = 0 +REPLACE_LOCALTIME = 0 +REPLACE_LOCALTIME_R = 0 +REPLACE_LOG = 0 +REPLACE_LOG10 = 0 +REPLACE_LOG10F = 0 +REPLACE_LOG10L = 0 +REPLACE_LOG1P = 0 +REPLACE_LOG1PF = 0 +REPLACE_LOG1PL = 0 +REPLACE_LOG2 = 0 +REPLACE_LOG2F = 0 +REPLACE_LOG2L = 0 +REPLACE_LOGB = 0 +REPLACE_LOGBF = 0 +REPLACE_LOGBL = 0 +REPLACE_LOGF = 0 +REPLACE_LOGL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MALLOC = 0 +REPLACE_MBRLEN = 1 +REPLACE_MBRTOWC = 1 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MBTOWC = 0 +REPLACE_MEMCHR = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKFIFO = 0 +REPLACE_MKNOD = 0 +REPLACE_MKSTEMP = 0 +REPLACE_MKTIME = 0 +REPLACE_MODF = 0 +REPLACE_MODFF = 0 +REPLACE_MODFL = 0 +REPLACE_NAN = 0 +REPLACE_NANOSLEEP = GNULIB_PORTCHECK +REPLACE_NEWLOCALE = 0 +REPLACE_NL_LANGINFO = 1 +REPLACE_NULL = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_OPENAT = 0 +REPLACE_PERROR = 0 +REPLACE_POPEN = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 0 +REPLACE_PREAD = 0 +REPLACE_PRINTF = 1 +REPLACE_PTHREAD_SIGMASK = 0 +REPLACE_PTSNAME = 0 +REPLACE_PTSNAME_R = 0 +REPLACE_PUTENV = 0 +REPLACE_PWRITE = 0 +REPLACE_QSORT_R = 0 +REPLACE_RAISE = 0 +REPLACE_RANDOM_R = 0 +REPLACE_READ = 0 +REPLACE_READLINK = 0 +REPLACE_READLINKAT = 0 +REPLACE_REALLOC = 0 +REPLACE_REALPATH = 0 +REPLACE_REMAINDER = 0 +REPLACE_REMAINDERF = 0 +REPLACE_REMAINDERL = 0 +REPLACE_REMOVE = 0 +REPLACE_RENAME = 0 +REPLACE_RENAMEAT = 0 +REPLACE_RMDIR = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SETENV = 0 +REPLACE_SETLOCALE = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SINF = 0 +REPLACE_SINHF = 0 +REPLACE_SLEEP = 0 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_SQRTF = 0 +REPLACE_SQRTL = 0 +REPLACE_STAT = 0 +REPLACE_STDIO_READ_FUNCS = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STPNCPY = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRCHRNUL = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRERROR_R = 0 +REPLACE_STRFTIME = GNULIB_PORTCHECK +REPLACE_STRNCAT = 0 +REPLACE_STRNDUP = 0 +REPLACE_STRNLEN = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 0 +REPLACE_STRTOD = 0 +REPLACE_STRTOIMAX = 0 +REPLACE_STRTOK_R = 0 +REPLACE_STRTOUMAX = 0 +REPLACE_STRUCT_LCONV = 0 +REPLACE_STRUCT_TIMEVAL = 0 +REPLACE_SYMLINK = 0 +REPLACE_SYMLINKAT = 0 +REPLACE_TANF = 0 +REPLACE_TANHF = 0 +REPLACE_TIMEGM = 0 +REPLACE_TMPFILE = 0 +REPLACE_TOWLOWER = 0 +REPLACE_TRUNC = 0 +REPLACE_TRUNCATE = 0 +REPLACE_TRUNCF = 0 +REPLACE_TRUNCL = 0 +REPLACE_TTYNAME_R = 0 +REPLACE_TZSET = 0 +REPLACE_UNLINK = 0 +REPLACE_UNLINKAT = 0 +REPLACE_UNSETENV = 0 +REPLACE_USLEEP = 0 +REPLACE_UTIMENSAT = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 1 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSFTIME = 0 +REPLACE_WCSNRTOMBS = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCSWIDTH = 0 +REPLACE_WCTOB = 0 +REPLACE_WCTOMB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SED = /bin/sed +SELINUX_CONTEXT_H = selinux/context.h +SET_MAKE = +SHELL = /bin/sh +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +STDARG_H = +STDBOOL_H = +STDDEF_H = +STDINT_H = stdint.h +STRIP = strip +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = 0 +TIME_H_DEFINES_STRUCT_TIMESPEC = 1 +UINT32_MAX_LT_UINTMAX_MAX = 1 +UINT64_MAX_EQ_ULONG_MAX = 0 +UNDEFINE_STRTOK_R = 0 +UNISTD_H_DEFINES_STRUCT_TIMESPEC = 0 +UNISTD_H_HAVE_WINSOCK2_H = 0 +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = 0 +USE_ACL = 0 +USE_NLS = yes +UUIDLIBS = +VERSION = 1.8 +WCHAR_T_SUFFIX = +WINDOWS_64_BIT_OFF_T = 0 +WINDOWS_64_BIT_ST_SIZE = 0 +WINDOWS_STAT_INODES = 0 +WINDOWS_STAT_TIMESPEC = 0 +WINT_T_SUFFIX = +XGETTEXT = /usr/bin/xgettext +XGETTEXT_015 = /usr/bin/xgettext +XGETTEXT_EXTRA_OPTIONS = --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format +YACC = bison -o y.tab.c +YFLAGS = +abs_builddir = /mnt/lfs/build/recutils/recutils-1.8 +abs_srcdir = /mnt/lfs/build/recutils/recutils-1.8 +abs_top_builddir = /mnt/lfs/build/recutils/recutils-1.8 +abs_top_srcdir = /mnt/lfs/build/recutils/recutils-1.8 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +builddir = . +crypt_support = no +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +gl_LIBOBJS = asnprintf.o asprintf.o fcntl.o fprintf.o fseterr.o localtime-buffer.o mbrlen.o mbrtowc.o mktime.o nl_langinfo.o obstack.o printf.o printf-args.o printf-parse.o readline.o regex.o time_rz.o vasnprintf.o vasprintf.o vfprintf.o +gl_LTLIBOBJS = asnprintf.lo asprintf.lo fcntl.lo fprintf.lo fseterr.lo localtime-buffer.lo mbrlen.lo mbrtowc.lo mktime.lo nl_langinfo.lo obstack.lo printf.lo printf-args.lo printf-parse.lo readline.lo regex.lo time_rz.lo vasnprintf.lo vasprintf.lo vfprintf.lo +gltests_LIBOBJS = +gltests_LTLIBOBJS = +gltests_WITNESS = IN_RECUTILS_GNULIB_TESTS +have_uuid = no +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = $(MKDIR_P) +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +runstatedir = ${localstatedir}/run +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = +top_builddir = . +top_srcdir = . +ACLOCAL_AMFLAGS = -I m4 +SUBDIRS = lib libcsv src utils bash doc po man torture etc \ + $(am__append_1) +all: all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=../.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-am clean clean-cscope clean-generic \ + clean-libtool cscope cscopelist-am ctags ctags-am dist \ + dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ + dist-xz dist-zip distcheck distclean distclean-generic \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +perf: + $(MAKE) -C torture/utils perf + +.PHONY: perf + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/Makefile.am b/devspec.en_US/project/recutils/Makefile.am new file mode 100755 index 0000000..08898a2 --- /dev/null +++ b/devspec.en_US/project/recutils/Makefile.am @@ -0,0 +1,30 @@ +# Top-level Makefile.am + +# Copyright (C) 2009-2015 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +ACLOCAL_AMFLAGS = -I m4 +SUBDIRS = lib libcsv src utils bash doc po man torture etc + +if BUILD_A68 + SUBDIRS += algol68 +endif + +perf: + $(MAKE) -C torture/utils perf + +.PHONY: perf + +# End of Makefile.am diff --git a/devspec.en_US/project/recutils/Makefile.in b/devspec.en_US/project/recutils/Makefile.in new file mode 100755 index 0000000..fb78b13 --- /dev/null +++ b/devspec.en_US/project/recutils/Makefile.in @@ -0,0 +1,2084 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Top-level Makefile.am + +# Copyright (C) 2009-2015 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@BUILD_A68_TRUE@am__append_1 = algol68 +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(am__DIST_COMMON) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +DIST_SUBDIRS = lib libcsv src utils bash doc po man torture etc \ + algol68 +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/compile \ + $(top_srcdir)/build-aux/config.guess \ + $(top_srcdir)/build-aux/config.rpath \ + $(top_srcdir)/build-aux/config.sub \ + $(top_srcdir)/build-aux/install-sh \ + $(top_srcdir)/build-aux/ltmain.sh \ + $(top_srcdir)/build-aux/missing ABOUT-NLS AUTHORS COPYING \ + ChangeLog INSTALL NEWS README build-aux/compile \ + build-aux/config.guess build-aux/config.rpath \ + build-aux/config.sub build-aux/depcomp build-aux/install-sh \ + build-aux/ltmain.sh build-aux/mdate-sh build-aux/missing \ + build-aux/texinfo.tex build-aux/ylwrap +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BASH_HEADERS = @BASH_HEADERS@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CA68 = @CA68@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CURLLIBS = @CURLLIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +FLOOR_LIBM = @FLOOR_LIBM@ +GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ACOSF = @GNULIB_ACOSF@ +GNULIB_ACOSL = @GNULIB_ACOSL@ +GNULIB_ASINF = @GNULIB_ASINF@ +GNULIB_ASINL = @GNULIB_ASINL@ +GNULIB_ATAN2F = @GNULIB_ATAN2F@ +GNULIB_ATANF = @GNULIB_ATANF@ +GNULIB_ATANL = @GNULIB_ATANL@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CBRT = @GNULIB_CBRT@ +GNULIB_CBRTF = @GNULIB_CBRTF@ +GNULIB_CBRTL = @GNULIB_CBRTL@ +GNULIB_CEIL = @GNULIB_CEIL@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ +GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ +GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ +GNULIB_COSF = @GNULIB_COSF@ +GNULIB_COSHF = @GNULIB_COSHF@ +GNULIB_COSL = @GNULIB_COSL@ +GNULIB_CTIME = @GNULIB_CTIME@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_EXP2 = @GNULIB_EXP2@ +GNULIB_EXP2F = @GNULIB_EXP2F@ +GNULIB_EXP2L = @GNULIB_EXP2L@ +GNULIB_EXPF = @GNULIB_EXPF@ +GNULIB_EXPL = @GNULIB_EXPL@ +GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ +GNULIB_EXPM1 = @GNULIB_EXPM1@ +GNULIB_EXPM1F = @GNULIB_EXPM1F@ +GNULIB_EXPM1L = @GNULIB_EXPM1L@ +GNULIB_FABSF = @GNULIB_FABSF@ +GNULIB_FABSL = @GNULIB_FABSL@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FCNTL = @GNULIB_FCNTL@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FLOCK = @GNULIB_FLOCK@ +GNULIB_FLOOR = @GNULIB_FLOOR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FMA = @GNULIB_FMA@ +GNULIB_FMAF = @GNULIB_FMAF@ +GNULIB_FMAL = @GNULIB_FMAL@ +GNULIB_FMOD = @GNULIB_FMOD@ +GNULIB_FMODF = @GNULIB_FMODF@ +GNULIB_FMODL = @GNULIB_FMODL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPF = @GNULIB_FREXPF@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSTAT = @GNULIB_FSTAT@ +GNULIB_FSTATAT = @GNULIB_FSTATAT@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETPASS = @GNULIB_GETPASS@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_HYPOT = @GNULIB_HYPOT@ +GNULIB_HYPOTF = @GNULIB_HYPOTF@ +GNULIB_HYPOTL = @GNULIB_HYPOTL@ +GNULIB_ILOGB = @GNULIB_ILOGB@ +GNULIB_ILOGBF = @GNULIB_ILOGBF@ +GNULIB_ILOGBL = @GNULIB_ILOGBL@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPF = @GNULIB_LDEXPF@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LOCALENAME = @GNULIB_LOCALENAME@ +GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ +GNULIB_LOG = @GNULIB_LOG@ +GNULIB_LOG10 = @GNULIB_LOG10@ +GNULIB_LOG10F = @GNULIB_LOG10F@ +GNULIB_LOG10L = @GNULIB_LOG10L@ +GNULIB_LOG1P = @GNULIB_LOG1P@ +GNULIB_LOG1PF = @GNULIB_LOG1PF@ +GNULIB_LOG1PL = @GNULIB_LOG1PL@ +GNULIB_LOG2 = @GNULIB_LOG2@ +GNULIB_LOG2F = @GNULIB_LOG2F@ +GNULIB_LOG2L = @GNULIB_LOG2L@ +GNULIB_LOGB = @GNULIB_LOGB@ +GNULIB_LOGBF = @GNULIB_LOGBF@ +GNULIB_LOGBL = @GNULIB_LOGBL@ +GNULIB_LOGF = @GNULIB_LOGF@ +GNULIB_LOGL = @GNULIB_LOGL@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKFIFO = @GNULIB_MKFIFO@ +GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ +GNULIB_MKNOD = @GNULIB_MKNOD@ +GNULIB_MKNODAT = @GNULIB_MKNODAT@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_MKTIME = @GNULIB_MKTIME@ +GNULIB_MODF = @GNULIB_MODF@ +GNULIB_MODFF = @GNULIB_MODFF@ +GNULIB_MODFL = @GNULIB_MODFL@ +GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ +GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_POWF = @GNULIB_POWF@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_QSORT_R = @GNULIB_QSORT_R@ +GNULIB_RAISE = @GNULIB_RAISE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMAINDER = @GNULIB_REMAINDER@ +GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ +GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RINT = @GNULIB_RINT@ +GNULIB_RINTF = @GNULIB_RINTF@ +GNULIB_RINTL = @GNULIB_RINTL@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SINF = @GNULIB_SINF@ +GNULIB_SINHF = @GNULIB_SINHF@ +GNULIB_SINL = @GNULIB_SINL@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_SQRTF = @GNULIB_SQRTF@ +GNULIB_SQRTL = @GNULIB_SQRTL@ +GNULIB_STAT = @GNULIB_STAT@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRFTIME = @GNULIB_STRFTIME@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRPTIME = @GNULIB_STRPTIME@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TANF = @GNULIB_TANF@ +GNULIB_TANHF = @GNULIB_TANHF@ +GNULIB_TANL = @GNULIB_TANL@ +GNULIB_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_TZSET = @GNULIB_TZSET@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WAITPID = @GNULIB_WAITPID@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +HAVE_ACOSF = @HAVE_ACOSF@ +HAVE_ACOSL = @HAVE_ACOSL@ +HAVE_ASINF = @HAVE_ASINF@ +HAVE_ASINL = @HAVE_ASINL@ +HAVE_ATAN2F = @HAVE_ATAN2F@ +HAVE_ATANF = @HAVE_ATANF@ +HAVE_ATANL = @HAVE_ATANL@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CBRT = @HAVE_CBRT@ +HAVE_CBRTF = @HAVE_CBRTF@ +HAVE_CBRTL = @HAVE_CBRTL@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_COPYSIGN = @HAVE_COPYSIGN@ +HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ +HAVE_COSF = @HAVE_COSF@ +HAVE_COSHF = @HAVE_COSHF@ +HAVE_COSL = @HAVE_COSL@ +HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ +HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ +HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ +HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ +HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ +HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ +HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ +HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ +HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ +HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ +HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ +HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ +HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ +HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ +HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ +HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ +HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ +HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ +HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ +HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_EXPF = @HAVE_EXPF@ +HAVE_EXPL = @HAVE_EXPL@ +HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ +HAVE_EXPM1 = @HAVE_EXPM1@ +HAVE_EXPM1F = @HAVE_EXPM1F@ +HAVE_FABSF = @HAVE_FABSF@ +HAVE_FABSL = @HAVE_FABSL@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FLOCK = @HAVE_FLOCK@ +HAVE_FMA = @HAVE_FMA@ +HAVE_FMAF = @HAVE_FMAF@ +HAVE_FMAL = @HAVE_FMAL@ +HAVE_FMODF = @HAVE_FMODF@ +HAVE_FMODL = @HAVE_FMODL@ +HAVE_FREELOCALE = @HAVE_FREELOCALE@ +HAVE_FREXPF = @HAVE_FREXPF@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSTATAT = @HAVE_FSTATAT@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_FUTIMENS = @HAVE_FUTIMENS@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETPASS = @HAVE_GETPASS@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_HYPOTF = @HAVE_HYPOTF@ +HAVE_HYPOTL = @HAVE_HYPOTL@ +HAVE_ILOGB = @HAVE_ILOGB@ +HAVE_ILOGBF = @HAVE_ILOGBF@ +HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LDEXPF = @HAVE_LDEXPF@ +HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOG10F = @HAVE_LOG10F@ +HAVE_LOG10L = @HAVE_LOG10L@ +HAVE_LOG1P = @HAVE_LOG1P@ +HAVE_LOG1PF = @HAVE_LOG1PF@ +HAVE_LOG1PL = @HAVE_LOG1PL@ +HAVE_LOGBF = @HAVE_LOGBF@ +HAVE_LOGBL = @HAVE_LOGBL@ +HAVE_LOGF = @HAVE_LOGF@ +HAVE_LOGL = @HAVE_LOGL@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDIRAT = @HAVE_MKDIRAT@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKFIFO = @HAVE_MKFIFO@ +HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ +HAVE_MKNOD = @HAVE_MKNOD@ +HAVE_MKNODAT = @HAVE_MKNODAT@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MODFF = @HAVE_MODFF@ +HAVE_MODFL = @HAVE_MODFL@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ +HAVE_POWF = @HAVE_POWF@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_QSORT_R = @HAVE_QSORT_R@ +HAVE_RAISE = @HAVE_RAISE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_REMAINDER = @HAVE_REMAINDER@ +HAVE_REMAINDERF = @HAVE_REMAINDERF@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RINT = @HAVE_RINT@ +HAVE_RINTL = @HAVE_RINTL@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SINF = @HAVE_SINF@ +HAVE_SINHF = @HAVE_SINHF@ +HAVE_SINL = @HAVE_SINL@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_SQRTF = @HAVE_SQRTF@ +HAVE_SQRTL = @HAVE_SQRTL@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRPTIME = @HAVE_STRPTIME@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ +HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TANF = @HAVE_TANF@ +HAVE_TANHF = @HAVE_TANHF@ +HAVE_TANL = @HAVE_TANL@ +HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_TZSET = @HAVE_TZSET@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSFTIME = @HAVE_WCSFTIME@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ +INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBGCRYPT = @LIBGCRYPT@ +LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBREADLINE = @LIBREADLINE@ +LIBS = @LIBS@ +LIBTHREAD = @LIBTHREAD@ +LIBTOOL = @LIBTOOL@ +LIB_ACL = @LIB_ACL@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LIB_EACCESS = @LIB_EACCESS@ +LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ +LIB_SELINUX = @LIB_SELINUX@ +LIMITS_H = @LIMITS_H@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTALLOCA = @LTALLOCA@ +LTLIBGCRYPT = @LTLIBGCRYPT@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBREADLINE = @LTLIBREADLINE@ +LTLIBTHREAD = @LTLIBTHREAD@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MDBLIBS = @MDBLIBS@ +MDB_DATETIME = @MDB_DATETIME@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ +NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LIMITS_H = @NEXT_LIMITS_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_ACOSF = @REPLACE_ACOSF@ +REPLACE_ASINF = @REPLACE_ASINF@ +REPLACE_ATAN2F = @REPLACE_ATAN2F@ +REPLACE_ATANF = @REPLACE_ATANF@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CBRTF = @REPLACE_CBRTF@ +REPLACE_CBRTL = @REPLACE_CBRTL@ +REPLACE_CEIL = @REPLACE_CEIL@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_COSF = @REPLACE_COSF@ +REPLACE_COSHF = @REPLACE_COSHF@ +REPLACE_CTIME = @REPLACE_CTIME@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_EXP2 = @REPLACE_EXP2@ +REPLACE_EXP2L = @REPLACE_EXP2L@ +REPLACE_EXPF = @REPLACE_EXPF@ +REPLACE_EXPM1 = @REPLACE_EXPM1@ +REPLACE_EXPM1F = @REPLACE_EXPM1F@ +REPLACE_FABSL = @REPLACE_FABSL@ +REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOOR = @REPLACE_FLOOR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FMA = @REPLACE_FMA@ +REPLACE_FMAF = @REPLACE_FMAF@ +REPLACE_FMAL = @REPLACE_FMAL@ +REPLACE_FMOD = @REPLACE_FMOD@ +REPLACE_FMODF = @REPLACE_FMODF@ +REPLACE_FMODL = @REPLACE_FMODL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPF = @REPLACE_FREXPF@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FSTAT = @REPLACE_FSTAT@ +REPLACE_FSTATAT = @REPLACE_FSTATAT@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETPASS = @REPLACE_GETPASS@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_GMTIME = @REPLACE_GMTIME@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_HYPOT = @REPLACE_HYPOT@ +REPLACE_HYPOTF = @REPLACE_HYPOTF@ +REPLACE_HYPOTL = @REPLACE_HYPOTL@ +REPLACE_ILOGB = @REPLACE_ILOGB@ +REPLACE_ILOGBF = @REPLACE_ILOGBF@ +REPLACE_ILOGBL = @REPLACE_ILOGBL@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LOG = @REPLACE_LOG@ +REPLACE_LOG10 = @REPLACE_LOG10@ +REPLACE_LOG10F = @REPLACE_LOG10F@ +REPLACE_LOG10L = @REPLACE_LOG10L@ +REPLACE_LOG1P = @REPLACE_LOG1P@ +REPLACE_LOG1PF = @REPLACE_LOG1PF@ +REPLACE_LOG1PL = @REPLACE_LOG1PL@ +REPLACE_LOG2 = @REPLACE_LOG2@ +REPLACE_LOG2F = @REPLACE_LOG2F@ +REPLACE_LOG2L = @REPLACE_LOG2L@ +REPLACE_LOGB = @REPLACE_LOGB@ +REPLACE_LOGBF = @REPLACE_LOGBF@ +REPLACE_LOGBL = @REPLACE_LOGBL@ +REPLACE_LOGF = @REPLACE_LOGF@ +REPLACE_LOGL = @REPLACE_LOGL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKFIFO = @REPLACE_MKFIFO@ +REPLACE_MKNOD = @REPLACE_MKNOD@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_MKTIME = @REPLACE_MKTIME@ +REPLACE_MODF = @REPLACE_MODF@ +REPLACE_MODFF = @REPLACE_MODFF@ +REPLACE_MODFL = @REPLACE_MODFL@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_OPENAT = @REPLACE_OPENAT@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_QSORT_R = @REPLACE_QSORT_R@ +REPLACE_RAISE = @REPLACE_RAISE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_READLINKAT = @REPLACE_READLINKAT@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMAINDER = @REPLACE_REMAINDER@ +REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ +REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SINF = @REPLACE_SINF@ +REPLACE_SINHF = @REPLACE_SINHF@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_SQRTF = @REPLACE_SQRTF@ +REPLACE_SQRTL = @REPLACE_SQRTL@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRFTIME = @REPLACE_STRFTIME@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ +REPLACE_TANF = @REPLACE_TANF@ +REPLACE_TANHF = @REPLACE_TANHF@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TRUNC = @REPLACE_TRUNC@ +REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ +REPLACE_TRUNCF = @REPLACE_TRUNCF@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_TZSET = @REPLACE_TZSET@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SED = @SED@ +SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ +UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +USE_ACL = @USE_ACL@ +USE_NLS = @USE_NLS@ +UUIDLIBS = @UUIDLIBS@ +VERSION = @VERSION@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ +WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ +WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +crypt_support = @crypt_support@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +have_uuid = @have_uuid@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +ACLOCAL_AMFLAGS = -I m4 +SUBDIRS = lib libcsv src utils bash doc po man torture etc \ + $(am__append_1) +all: all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=../.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-am clean clean-cscope clean-generic \ + clean-libtool cscope cscopelist-am ctags ctags-am dist \ + dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ + dist-xz dist-zip distcheck distclean distclean-generic \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +perf: + $(MAKE) -C torture/utils perf + +.PHONY: perf + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/NEWS b/devspec.en_US/project/recutils/NEWS new file mode 100755 index 0000000..9147855 --- /dev/null +++ b/devspec.en_US/project/recutils/NEWS @@ -0,0 +1,191 @@ +This NEWS file records noteworthy changes, very tersely. +See the manual for detailed information. + + Copyright 2010-2019 Jose E. Marchesi. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + + Version 1.8 (3 January 2019) +* Utilities: + . Fix the build of readrec with recent bash headers. +* librec: + . Fix evaluation of sexes containing #NAME expressions. + . Make numeric results from aggregated functions signed. +* readred: + . readrec --help now shows the help message and returns, + instead of waiting for input. +* Emacs mode: + . rec-mode.el now supports case-insensitive searches. + . rec-mode.el now defines it's own faces. + . ob-rec.el was switched to lexical binding to satisfy later + org-mode versions. +* It is now possible to run the testsuite in parallel. +* Other fixes: + . gnulib updated. + . GNU/Hurd build fixed. + . Aggregate functions now work properly in Aarch64 and powerpc. + + Version 1.7 (25 March 2014) +* Utilities: + . rec2csv now supports a -d option to change the delimiter + character in CSV files. + . It is now possible to specify several recfiles in the + command line containing anonymous records. +* Format: + . Support for restricting the fields that can appear in records + with the new %allowed special field. + . If a tab separates a field name and a field value is now + ignored and not considered part of the field value. +* librec: + . The current version of the library is now 1. +* Emacs mode: + . It now possible to jump several records while navigating + using a prefix argument to the next/previous commands. +* Documentation: + . The examples in the manual have been improved, and well as many + other aspects: formatting, English, etc. Special thanks to Karl + Berry for pointing out the problems and suggesting solutions. +* Internal cleanup and code factorization. +* Many, many, many bug fixes :D + + Version 1.6 (03 November 2013) +* Utilities: + . Support for joins and foreign keys. + . Grouping records by one or more fields. + . Sorting recors by several fields. + . Specifying rewrite rules in field expressions. + . Writing field values in rows. + . Dot-notation in selection expressions. + . Support for the >= and <= operators in selection expressions. + . Aggregated functions: sum, min, max, avg. + . New bash loadable builtin `readrec'. +* Format: + . New UUID field type. + . User provided arbitrary constraints with %constraint. + . Pre-defined constants MIN and MAX can now be used in ranges. +* librec: + . New high-level API: rec_db_query, rec_db_insert, rec_db_delete and + rec_db_set. + . Documentation in the rec.h header file extended and improved. +* Emacs mode: + . Texinfo manual describing the usage of rec-mode. + . Support for a mode hook. + . Comments are now supported in records. + . add-change-log-entry in a recfile now does the right thing. + . Commands for copying/killing fields and records. + . Support for undo in navigation mode. + . Field folding. + . Editing methods for the several field types. + . Statistics. +* Documentation: + . The user manual has been restructured and expanded. +* Internal cleanup and code factorization. +* Many, many, many bug fixes :D + + Version 1.5 (13 January 2012) +* The utilities will now ask interactively for a password if it was + not provided with the -s command line option. This avoids security + problems related to shell history files. +* Support for octal and hexadecimal numbers has been added. They can + be used in both the records and selection expressions. +* It is now possible to select a given number of random records in + many of the utilities using the -m command line option. +* The -n option now accepts a list of indexes, supporting ranges. +* The new -U (uniq) option for recsel removes duplicated fields in the + output records. +* The new -q (quick) option allows to quickly search for the desired + record without having to provide a complete selection expression. +* Auto generated fields are now considered integers by default. This + avoids repetitive patterns in record descriptors involving %auto and + %type. +* Tab characters are now allowed in blank lines betwwen records. +* The API in rec.h is now better documented with comments, and + improved. +* recfix now exits with an error status if there is a parse error in + some input file. +* The usage of the internal data structures has been _vastly_ + improved, resulting in a much faster operation. +* Internal cleanup and code factorization. +* Many, many, many bug fixes :D + + Version 1.4 (03 November 2011) +* Support for encryption with the new %confidential special field. +* Support for named types with the new %typedef special field. +* Support for sorting with the new %sort special field. +* Recutils support for org-babel is now included in the distribution + as ob-rec.el. It allows to read rec data into org documents in both + raw and table formats. +* It is now possible to use double quotes for delimiting string + literals in selection expressions, as well as single quotes. + Unescapted newline characters are also supported. +* The manual has been vastly improved. +* recfix now supports several operations: check, sort, encrypt and + decrypt. +* recins now generates parseable locale independent dates when + generating time-stamps in auto-fields. +* Lots of bug fixes. + + Version 1.3 (11 February 2011) +* A quite bad (and embarrassing) bug introduced in 1.2 has been + fixed. The bug was causing recins, recdel and recset to report + random integrity failures, due to a uninitialized variable. +* New special field %size, that allows to define constraints in the + size of record sets. +* Several fixes in the user manual. +* Little portability issue that prevented one of the tests to compile + in macos x has been fixed. +* Translations updates. + + Version 1.2 (4 February 2011) +* New utility rec2csv, to export rec data to csv files. +* Support for auto-incremented fields and timestamps with the new + %auto field in record descriptors. +* Support for comments in enum type descriptions. +* recset now supports a new "set or add field" operation, implementing + the common case of setting the value of a field in case it exists, + or else add it to the record. +* The flavor of regular expressions accepted in both selection + expressions and type descriptions is now documented in the user + manual. +* Translations for German, Finnish, Swedish and Dutch. +* recdel now performs an integrity check before to complete the + deletion. +* The utilities no longer "expand" the contents of remote descriptors + in the local ones. +* recset and recins no longer destroy the permissions of the rec file + that is being modified. +* Many fixes in the documentation. +* Lots of bug fixes. + + Version 1.1 (24 December 2010) +* New utility recfmt, to format records based on templates. +* Improvements in selection expressions: + . Support ranges in field subscripts. + . New date operators: before (<<), after (>>) and sametime (==). + . New ternary conditional operator (?:). + . New string concatenation operator (&). +* libcsv is now embedded in the source distribution, so it is no + longer required to have it installed to build csv2rec. +* Portability problems fixed. The programs have been tested in the + following systems: + . GNU/Linux + . FreeBSD 6.4 + . MacOS X + . mingw32 + . Solaris 8 + . AIX 5.1 + . HP-UX 11.00 + . IRIX 6.5 + . Tru64 (OSF/1 5.1) + . Cygwin 1.7 +* Lots of bug fixes. + + Version 1.0 (3 December 2010) +* Initial release. + . User manual. + . Library (librec). + . Utilities: recinf, recsel, recins, recdel, recset, recfix, csv2rec, + mdb2rec. + . Experimental Emacs mode (rec-mode.el). diff --git a/devspec.en_US/project/recutils/README b/devspec.en_US/project/recutils/README new file mode 100755 index 0000000..daf031b --- /dev/null +++ b/devspec.en_US/project/recutils/README @@ -0,0 +1,54 @@ +This is the README file for the GNU recutils distribution. +The GNU recutils are a set of libraries and utilities supporting the +Rec format: a human-readable, text-based format to store little to +medium sized databases. + + Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, + 2002, 2004, 2005, 2006, 2010 Free Software Foundation, Inc. + Copyright (C) 2010-2018 Jose E. Marchesi + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + +See the files ./INSTALL* for building and installation instructions. + +Primary distribution point: ftp://ftp.gnu.org/gnu/recutils/ + automatic redirection: http://ftpmirror.gnu.org/recutils + list of mirrors for manual selection: http://www.gnu.org/prep/ftp.html + +Home page: http://www.gnu.org/software/recutils/ + +Mailing list: bug-recutils@gnu.org +- please use this list for all discussion: bug reports, enhancements, etc. +- archived at: http://lists.gnu.org/pipermail/bug-recutils +- anyone is welcome to join the list; to do so, visit + http://lists.gnu.org/mailman/listinfo/bug-recutils +- there is no corresponding newsgroup. + +Bug reports: + Please include enough information for the maintainers to reproduce the + problem. Gnerally speaking, that means: +- the contents of any input files necessary to reproduce the bug + and command line invocations of the program(s) involved (crucial!). +- a description of the problem and any samples of the erroneous output. +- the version number of the program(s) involved (use --version). +- hardware, operating system, and compiler versions (uname -a). +- unusual options you gave to configure, if any (see config.status). +- anything else that you think would be helpful. + +Patches are most welcome; if possible, please make them with diff -c and +include ChangeLog entries. + +See README-dev for information on the development environment -- any +interested parties are welcome. If you're a programmer and wish to +contribute, this should get you started. If you're not a programmer, +your help in writing test cases, checking the documentation against the +implementation, translating the program strings to other languages, +etc., would still be very much appreciated. + +GNU Recutils is free software. See the file COPYING for copying conditions. + +For any copyright year range specified as YYYY-ZZZZ in this package +note that the range specifies every single year in that closed +interval. diff --git a/devspec.en_US/project/recutils/aclocal.m4 b/devspec.en_US/project/recutils/aclocal.m4 new file mode 100755 index 0000000..6c1ef74 --- /dev/null +++ b/devspec.en_US/project/recutils/aclocal.m4 @@ -0,0 +1,1644 @@ +# generated automatically by aclocal 1.15 -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +dnl serial 11 (pkg-config-0.29) +dnl +dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>. +dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com> +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +dnl 02111-1307, USA. +dnl +dnl As a special exception to the GNU General Public License, if you +dnl distribute this file as part of a program that contains a +dnl configuration script generated by Autoconf, you may include it under +dnl the same distribution terms that you use for the rest of that +dnl program. + +dnl PKG_PREREQ(MIN-VERSION) +dnl ----------------------- +dnl Since: 0.29 +dnl +dnl Verify that the version of the pkg-config macros are at least +dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's +dnl installed version of pkg-config, this checks the developer's version +dnl of pkg.m4 when generating configure. +dnl +dnl To ensure that this macro is defined, also add: +dnl m4_ifndef([PKG_PREREQ], +dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) +dnl +dnl See the "Since" comment for each macro you use to see what version +dnl of the macros you require. +m4_defun([PKG_PREREQ], +[m4_define([PKG_MACROS_VERSION], [0.29]) +m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, + [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) +])dnl PKG_PREREQ + +dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) +dnl ---------------------------------- +dnl Since: 0.16 +dnl +dnl Search for the pkg-config tool and set the PKG_CONFIG variable to +dnl first found in the path. Checks that the version of pkg-config found +dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is +dnl used since that's the first version where most current features of +dnl pkg-config existed. +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) +m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])dnl PKG_PROG_PKG_CONFIG + +dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------------------------------- +dnl Since: 0.18 +dnl +dnl Check to see whether a particular set of modules exists. Similar to +dnl PKG_CHECK_MODULES(), but does not set variables or print errors. +dnl +dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +dnl only at the first occurence in configure.ac, so if the first place +dnl it's called might be skipped (such as if it is within an "if", you +dnl have to call PKG_CHECK_EXISTS manually +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +dnl --------------------------------------------- +dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting +dnl pkg_failed based on the result. +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes ], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])dnl _PKG_CONFIG + +dnl _PKG_SHORT_ERRORS_SUPPORTED +dnl --------------------------- +dnl Internal check to see if pkg-config supports short errors. +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])dnl _PKG_SHORT_ERRORS_SUPPORTED + + +dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl -------------------------------------------------------------- +dnl Since: 0.4.0 +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES might not happen, you should be sure to include an +dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])[]dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])dnl PKG_CHECK_MODULES + + +dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl --------------------------------------------------------------------- +dnl Since: 0.29 +dnl +dnl Checks for existence of MODULES and gathers its build flags with +dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags +dnl and VARIABLE-PREFIX_LIBS from --libs. +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to +dnl include an explicit call to PKG_PROG_PKG_CONFIG in your +dnl configure.ac. +AC_DEFUN([PKG_CHECK_MODULES_STATIC], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +_save_PKG_CONFIG=$PKG_CONFIG +PKG_CONFIG="$PKG_CONFIG --static" +PKG_CHECK_MODULES($@) +PKG_CONFIG=$_save_PKG_CONFIG[]dnl +])dnl PKG_CHECK_MODULES_STATIC + + +dnl PKG_INSTALLDIR([DIRECTORY]) +dnl ------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable pkgconfigdir as the location where a module +dnl should install pkg-config .pc files. By default the directory is +dnl $libdir/pkgconfig, but the default can be changed by passing +dnl DIRECTORY. The user can override through the --with-pkgconfigdir +dnl parameter. +AC_DEFUN([PKG_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([pkgconfigdir], + [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, + [with_pkgconfigdir=]pkg_default) +AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_INSTALLDIR + + +dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) +dnl -------------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable noarch_pkgconfigdir as the location where a +dnl module should install arch-independent pkg-config .pc files. By +dnl default the directory is $datadir/pkgconfig, but the default can be +dnl changed by passing DIRECTORY. The user can override through the +dnl --with-noarch-pkgconfigdir parameter. +AC_DEFUN([PKG_NOARCH_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([noarch-pkgconfigdir], + [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, + [with_noarch_pkgconfigdir=]pkg_default) +AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +])dnl PKG_NOARCH_INSTALLDIR + + +dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------- +dnl Since: 0.28 +dnl +dnl Retrieves the value of the pkg-config variable for the given module. +AC_DEFUN([PKG_CHECK_VAR], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl + +_PKG_CONFIG([$1], [variable="][$3]["], [$2]) +AS_VAR_COPY([$1], [pkg_cv_][$1]) + +AS_VAR_IF([$1], [""], [$5], [$4])dnl +])dnl PKG_CHECK_VAR + +# Copyright (C) 2002-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.15' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.15], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.15])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> +# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: <http://www.gnu.org/software/coreutils/>. + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar <conftest.tar]) + AM_RUN_LOG([cat conftest.dir/file]) + grep GrepMe conftest.dir/file >/dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/00gnulib.m4]) +m4_include([m4/__inline.m4]) +m4_include([m4/absolute-header.m4]) +m4_include([m4/acl.m4]) +m4_include([m4/alloca.m4]) +m4_include([m4/asm-underscore.m4]) +m4_include([m4/autobuild.m4]) +m4_include([m4/base64.m4]) +m4_include([m4/bison.m4]) +m4_include([m4/btowc.m4]) +m4_include([m4/builtin-expect.m4]) +m4_include([m4/canonicalize.m4]) +m4_include([m4/clock_time.m4]) +m4_include([m4/close-stream.m4]) +m4_include([m4/close.m4]) +m4_include([m4/closeout.m4]) +m4_include([m4/codeset.m4]) +m4_include([m4/dirname.m4]) +m4_include([m4/double-slash-root.m4]) +m4_include([m4/dup2.m4]) +m4_include([m4/eealloc.m4]) +m4_include([m4/environ.m4]) +m4_include([m4/errno_h.m4]) +m4_include([m4/error.m4]) +m4_include([m4/euidaccess.m4]) +m4_include([m4/execute.m4]) +m4_include([m4/exponentd.m4]) +m4_include([m4/exponentf.m4]) +m4_include([m4/exponentl.m4]) +m4_include([m4/extensions.m4]) +m4_include([m4/extern-inline.m4]) +m4_include([m4/fatal-signal.m4]) +m4_include([m4/fcntl-o.m4]) +m4_include([m4/fcntl.m4]) +m4_include([m4/fcntl_h.m4]) +m4_include([m4/flexmember.m4]) +m4_include([m4/float_h.m4]) +m4_include([m4/flock.m4]) +m4_include([m4/floor.m4]) +m4_include([m4/fpending.m4]) +m4_include([m4/fpieee.m4]) +m4_include([m4/fprintf-posix.m4]) +m4_include([m4/frexp.m4]) +m4_include([m4/frexpl.m4]) +m4_include([m4/fseek.m4]) +m4_include([m4/fseeko.m4]) +m4_include([m4/fseterr.m4]) +m4_include([m4/fstat.m4]) +m4_include([m4/ftell.m4]) +m4_include([m4/ftello.m4]) +m4_include([m4/fwriting.m4]) +m4_include([m4/getdelim.m4]) +m4_include([m4/getdtablesize.m4]) +m4_include([m4/getgroups.m4]) +m4_include([m4/getline.m4]) +m4_include([m4/getopt.m4]) +m4_include([m4/getpass.m4]) +m4_include([m4/getprogname.m4]) +m4_include([m4/gettext.m4]) +m4_include([m4/gettime.m4]) +m4_include([m4/gettimeofday.m4]) +m4_include([m4/glibc21.m4]) +m4_include([m4/gnulib-common.m4]) +m4_include([m4/gnulib-comp.m4]) +m4_include([m4/group-member.m4]) +m4_include([m4/host-cpu-c-abi.m4]) +m4_include([m4/iconv.m4]) +m4_include([m4/include_next.m4]) +m4_include([m4/intlmacosx.m4]) +m4_include([m4/intmax_t.m4]) +m4_include([m4/inttypes-pri.m4]) +m4_include([m4/inttypes.m4]) +m4_include([m4/inttypes_h.m4]) +m4_include([m4/isnand.m4]) +m4_include([m4/isnanf.m4]) +m4_include([m4/isnanl.m4]) +m4_include([m4/langinfo_h.m4]) +m4_include([m4/largefile.m4]) +m4_include([m4/ldexpl.m4]) +m4_include([m4/lib-ld.m4]) +m4_include([m4/lib-link.m4]) +m4_include([m4/lib-prefix.m4]) +m4_include([m4/libtool.m4]) +m4_include([m4/limits-h.m4]) +m4_include([m4/localcharset.m4]) +m4_include([m4/locale-fr.m4]) +m4_include([m4/locale-ja.m4]) +m4_include([m4/locale-zh.m4]) +m4_include([m4/locale_h.m4]) +m4_include([m4/localeconv.m4]) +m4_include([m4/localtime-buffer.m4]) +m4_include([m4/lock.m4]) +m4_include([m4/longlong.m4]) +m4_include([m4/lseek.m4]) +m4_include([m4/lstat.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) +m4_include([m4/malloc.m4]) +m4_include([m4/malloca.m4]) +m4_include([m4/math_h.m4]) +m4_include([m4/mbrlen.m4]) +m4_include([m4/mbrtowc.m4]) +m4_include([m4/mbsinit.m4]) +m4_include([m4/mbstate_t.m4]) +m4_include([m4/mbtowc.m4]) +m4_include([m4/memchr.m4]) +m4_include([m4/minmax.m4]) +m4_include([m4/mkdir.m4]) +m4_include([m4/mkostemp.m4]) +m4_include([m4/mkstemp.m4]) +m4_include([m4/mktime.m4]) +m4_include([m4/mmap-anon.m4]) +m4_include([m4/mode_t.m4]) +m4_include([m4/msvc-inval.m4]) +m4_include([m4/msvc-nothrow.m4]) +m4_include([m4/multiarch.m4]) +m4_include([m4/nl_langinfo.m4]) +m4_include([m4/nls.m4]) +m4_include([m4/nocrash.m4]) +m4_include([m4/nstrftime.m4]) +m4_include([m4/obstack.m4]) +m4_include([m4/off_t.m4]) +m4_include([m4/open-cloexec.m4]) +m4_include([m4/open.m4]) +m4_include([m4/parse-datetime.m4]) +m4_include([m4/pathmax.m4]) +m4_include([m4/po.m4]) +m4_include([m4/posix_spawn.m4]) +m4_include([m4/printf-frexp.m4]) +m4_include([m4/printf-frexpl.m4]) +m4_include([m4/printf-posix-rpl.m4]) +m4_include([m4/printf.m4]) +m4_include([m4/progtest.m4]) +m4_include([m4/pthread_rwlock_rdlock.m4]) +m4_include([m4/quote.m4]) +m4_include([m4/quotearg.m4]) +m4_include([m4/raise.m4]) +m4_include([m4/random_r.m4]) +m4_include([m4/rawmemchr.m4]) +m4_include([m4/read-file.m4]) +m4_include([m4/readline.m4]) +m4_include([m4/readlink.m4]) +m4_include([m4/realloc.m4]) +m4_include([m4/regex.m4]) +m4_include([m4/rename.m4]) +m4_include([m4/rmdir.m4]) +m4_include([m4/sched_h.m4]) +m4_include([m4/secure_getenv.m4]) +m4_include([m4/selinux-context-h.m4]) +m4_include([m4/selinux-selinux-h.m4]) +m4_include([m4/setenv.m4]) +m4_include([m4/sh-filename.m4]) +m4_include([m4/sig_atomic_t.m4]) +m4_include([m4/sigaction.m4]) +m4_include([m4/signal_h.m4]) +m4_include([m4/signalblocking.m4]) +m4_include([m4/signbit.m4]) +m4_include([m4/size_max.m4]) +m4_include([m4/spawn_h.m4]) +m4_include([m4/ssize_t.m4]) +m4_include([m4/stat-time.m4]) +m4_include([m4/stat.m4]) +m4_include([m4/stdarg.m4]) +m4_include([m4/stdbool.m4]) +m4_include([m4/stddef_h.m4]) +m4_include([m4/stdint.m4]) +m4_include([m4/stdint_h.m4]) +m4_include([m4/stdio_h.m4]) +m4_include([m4/stdlib_h.m4]) +m4_include([m4/strcase.m4]) +m4_include([m4/strcasestr.m4]) +m4_include([m4/strchrnul.m4]) +m4_include([m4/strdup.m4]) +m4_include([m4/strerror.m4]) +m4_include([m4/string_h.m4]) +m4_include([m4/strings_h.m4]) +m4_include([m4/strsep.m4]) +m4_include([m4/strverscmp.m4]) +m4_include([m4/sys_file_h.m4]) +m4_include([m4/sys_socket_h.m4]) +m4_include([m4/sys_stat_h.m4]) +m4_include([m4/sys_time_h.m4]) +m4_include([m4/sys_types_h.m4]) +m4_include([m4/sys_wait_h.m4]) +m4_include([m4/tempname.m4]) +m4_include([m4/threadlib.m4]) +m4_include([m4/time_h.m4]) +m4_include([m4/time_r.m4]) +m4_include([m4/time_rz.m4]) +m4_include([m4/timegm.m4]) +m4_include([m4/timespec.m4]) +m4_include([m4/tm_gmtoff.m4]) +m4_include([m4/tmpdir.m4]) +m4_include([m4/tzset.m4]) +m4_include([m4/unistd_h.m4]) +m4_include([m4/unlocked-io.m4]) +m4_include([m4/vasnprintf-posix.m4]) +m4_include([m4/vasnprintf.m4]) +m4_include([m4/vasprintf-posix.m4]) +m4_include([m4/vasprintf.m4]) +m4_include([m4/version-etc.m4]) +m4_include([m4/vfprintf-posix.m4]) +m4_include([m4/wait-process.m4]) +m4_include([m4/waitpid.m4]) +m4_include([m4/warn-on-use.m4]) +m4_include([m4/wchar_h.m4]) +m4_include([m4/wchar_t.m4]) +m4_include([m4/wcrtomb.m4]) +m4_include([m4/wctob.m4]) +m4_include([m4/wctomb.m4]) +m4_include([m4/wctype_h.m4]) +m4_include([m4/wint_t.m4]) +m4_include([m4/xalloc.m4]) +m4_include([m4/xsize.m4]) diff --git a/devspec.en_US/project/recutils/algol68/.deps/rec.Po b/devspec.en_US/project/recutils/algol68/.deps/rec.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/algol68/.deps/rec.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/algol68/Makefile b/devspec.en_US/project/recutils/algol68/Makefile new file mode 100755 index 0000000..a15fc4c --- /dev/null +++ b/devspec.en_US/project/recutils/algol68/Makefile @@ -0,0 +1,1955 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# algol68/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# Makefile.am for recutils/algol68 + +# Copyright (C) 2011-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + + +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/recutils +pkgincludedir = $(includedir)/recutils +pkglibdir = $(libdir)/recutils +pkglibexecdir = $(libexecdir)/recutils +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +subdir = algol68 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(usrlibdir)" +LIBRARIES = $(lib_LIBRARIES) +AM_V_AR = $(am__v_AR_$(V)) +am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY)) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = +librec_a68_a_AR = $(AR) $(ARFLAGS) +librec_a68_a_LIBADD = +nodist_librec_a68_a_OBJECTS = rec.$(OBJEXT) +librec_a68_a_OBJECTS = $(nodist_librec_a68_a_OBJECTS) +AM_V_P = $(am__v_P_$(V)) +am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I. -I$(top_builddir)/src +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +am__v_lt_1 = +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(nodist_librec_a68_a_SOURCES) +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +DATA = $(usrlib_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing aclocal-1.15 +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = $${TAR-tar} +AM_DEFAULT_VERBOSITY = 1 +APPLE_UNIVERSAL_BUILD = 0 +AR = ar +ARFLAGS = cr +ASM_SYMBOL_PREFIX = "" +AUTOCONF = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoconf +AUTOHEADER = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoheader +AUTOMAKE = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing automake-1.15 +AWK = gawk +BASH_HEADERS = /usr/include/bash +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CA68 = +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CHECK_CFLAGS = +CHECK_LIBS = +CONFIG_INCLUDE = src/config.h +CPP = gcc -E +CPPFLAGS = +CURLLIBS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = false +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FGREP = /bin/grep -F +FLOAT_H = +FLOOR_LIBM = -lm +GETOPT_CDEFS_H = +GETOPT_H = +GETTEXT_MACRO_VERSION = 0.19 +GLIBC21 = yes +GLIB_CFLAGS = +GLIB_LIBS = +GMSGFMT = /usr/bin/msgfmt +GMSGFMT_015 = /usr/bin/msgfmt +GNULIB_ACOSF = 0 +GNULIB_ACOSL = 0 +GNULIB_ASINF = 0 +GNULIB_ASINL = 0 +GNULIB_ATAN2F = 0 +GNULIB_ATANF = 0 +GNULIB_ATANL = 0 +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CANONICALIZE_FILE_NAME = 1 +GNULIB_CBRT = 0 +GNULIB_CBRTF = 0 +GNULIB_CBRTL = 0 +GNULIB_CEIL = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHDIR = 1 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 1 +GNULIB_COPYSIGN = 0 +GNULIB_COPYSIGNF = 0 +GNULIB_COPYSIGNL = 0 +GNULIB_COSF = 0 +GNULIB_COSHF = 0 +GNULIB_COSL = 0 +GNULIB_CTIME = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP = 0 +GNULIB_DUP2 = 1 +GNULIB_DUP3 = 0 +GNULIB_DUPLOCALE = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 1 +GNULIB_EXP2 = 0 +GNULIB_EXP2F = 0 +GNULIB_EXP2L = 0 +GNULIB_EXPF = 0 +GNULIB_EXPL = 0 +GNULIB_EXPLICIT_BZERO = 0 +GNULIB_EXPM1 = 0 +GNULIB_EXPM1F = 0 +GNULIB_EXPM1L = 0 +GNULIB_FABSF = 0 +GNULIB_FABSL = 0 +GNULIB_FACCESSAT = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCHMODAT = 0 +GNULIB_FCHOWNAT = 0 +GNULIB_FCLOSE = 0 +GNULIB_FCNTL = 1 +GNULIB_FDATASYNC = 0 +GNULIB_FDOPEN = 0 +GNULIB_FFLUSH = 0 +GNULIB_FFS = 0 +GNULIB_FFSL = 0 +GNULIB_FFSLL = 0 +GNULIB_FGETC = 1 +GNULIB_FGETS = 1 +GNULIB_FLOCK = 1 +GNULIB_FLOOR = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FMA = 0 +GNULIB_FMAF = 0 +GNULIB_FMAL = 0 +GNULIB_FMOD = 0 +GNULIB_FMODF = 0 +GNULIB_FMODL = 0 +GNULIB_FOPEN = 0 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 1 +GNULIB_FPURGE = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREAD = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPF = 0 +GNULIB_FREXPL = 1 +GNULIB_FSCANF = 1 +GNULIB_FSEEK = 1 +GNULIB_FSEEKO = 1 +GNULIB_FSTAT = 1 +GNULIB_FSTATAT = 0 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 1 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FUTIMENS = 0 +GNULIB_FWRITE = 1 +GNULIB_GETC = 1 +GNULIB_GETCHAR = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 1 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETGROUPS = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 1 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETPASS = 1 +GNULIB_GETSUBOPT = 0 +GNULIB_GETTIMEOFDAY = 1 +GNULIB_GETUSERSHELL = 0 +GNULIB_GL_UNISTD_H_GETOPT = +GNULIB_GRANTPT = 0 +GNULIB_GROUP_MEMBER = 1 +GNULIB_HYPOT = 0 +GNULIB_HYPOTF = 0 +GNULIB_HYPOTL = 0 +GNULIB_ILOGB = 0 +GNULIB_ILOGBF = 0 +GNULIB_ILOGBL = 0 +GNULIB_IMAXABS = 0 +GNULIB_IMAXDIV = 0 +GNULIB_ISATTY = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_ISWBLANK = 0 +GNULIB_ISWCTYPE = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPF = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LINKAT = 0 +GNULIB_LOCALECONV = 1 +GNULIB_LOCALENAME = 0 +GNULIB_LOCALTIME = 0 +GNULIB_LOG = 0 +GNULIB_LOG10 = 0 +GNULIB_LOG10F = 0 +GNULIB_LOG10L = 0 +GNULIB_LOG1P = 0 +GNULIB_LOG1PF = 0 +GNULIB_LOG1PL = 0 +GNULIB_LOG2 = 0 +GNULIB_LOG2F = 0 +GNULIB_LOG2L = 0 +GNULIB_LOGB = 0 +GNULIB_LOGBF = 0 +GNULIB_LOGBL = 0 +GNULIB_LOGF = 0 +GNULIB_LOGL = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MBRLEN = 1 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MBTOWC = 1 +GNULIB_MEMCHR = 1 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDIRAT = 0 +GNULIB_MKDTEMP = 0 +GNULIB_MKFIFO = 0 +GNULIB_MKFIFOAT = 0 +GNULIB_MKNOD = 0 +GNULIB_MKNODAT = 0 +GNULIB_MKOSTEMP = 1 +GNULIB_MKOSTEMPS = 0 +GNULIB_MKSTEMP = 1 +GNULIB_MKSTEMPS = 0 +GNULIB_MKTIME = 1 +GNULIB_MODF = 0 +GNULIB_MODFF = 0 +GNULIB_MODFL = 0 +GNULIB_NANOSLEEP = 0 +GNULIB_NL_LANGINFO = 1 +GNULIB_NONBLOCKING = 0 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_OPENAT = 0 +GNULIB_OVERRIDES_STRUCT_STAT = 0 +GNULIB_OVERRIDES_WINT_T = 0 +GNULIB_PCLOSE = 0 +GNULIB_PERROR = 0 +GNULIB_PIPE = 0 +GNULIB_PIPE2 = 0 +GNULIB_POPEN = 0 +GNULIB_POSIX_OPENPT = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_POWF = 0 +GNULIB_PREAD = 0 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 1 +GNULIB_PTHREAD_SIGMASK = 0 +GNULIB_PTSNAME = 0 +GNULIB_PTSNAME_R = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_PWRITE = 0 +GNULIB_QSORT_R = 0 +GNULIB_RAISE = 1 +GNULIB_RANDOM = 0 +GNULIB_RANDOM_R = 1 +GNULIB_RAWMEMCHR = 1 +GNULIB_READ = 0 +GNULIB_READLINK = 1 +GNULIB_READLINKAT = 0 +GNULIB_REALLOCARRAY = 0 +GNULIB_REALLOC_POSIX = 1 +GNULIB_REALPATH = 1 +GNULIB_REMAINDER = 0 +GNULIB_REMAINDERF = 0 +GNULIB_REMAINDERL = 0 +GNULIB_REMOVE = 0 +GNULIB_RENAME = 1 +GNULIB_RENAMEAT = 0 +GNULIB_RINT = 0 +GNULIB_RINTF = 0 +GNULIB_RINTL = 0 +GNULIB_RMDIR = 1 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SCANF = 1 +GNULIB_SECURE_GETENV = 1 +GNULIB_SETENV = 1 +GNULIB_SETHOSTNAME = 0 +GNULIB_SETLOCALE = 0 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SINF = 0 +GNULIB_SINHF = 0 +GNULIB_SINL = 0 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 0 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_SQRTF = 0 +GNULIB_SQRTL = 0 +GNULIB_STAT = 1 +GNULIB_STDIO_H_NONBLOCKING = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 1 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 1 +GNULIB_STRERROR = 1 +GNULIB_STRERROR_R = 0 +GNULIB_STRFTIME = 0 +GNULIB_STRNCAT = 0 +GNULIB_STRNDUP = 0 +GNULIB_STRNLEN = 0 +GNULIB_STRPBRK = 0 +GNULIB_STRPTIME = 0 +GNULIB_STRSEP = 1 +GNULIB_STRSIGNAL = 0 +GNULIB_STRSTR = 0 +GNULIB_STRTOD = 0 +GNULIB_STRTOIMAX = 0 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRTOUMAX = 0 +GNULIB_STRVERSCMP = 1 +GNULIB_SYMLINK = 0 +GNULIB_SYMLINKAT = 0 +GNULIB_SYSTEM_POSIX = 0 +GNULIB_TANF = 0 +GNULIB_TANHF = 0 +GNULIB_TANL = 0 +GNULIB_TIMEGM = 1 +GNULIB_TIME_R = 1 +GNULIB_TIME_RZ = 1 +GNULIB_TMPFILE = 0 +GNULIB_TOWCTRANS = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCATE = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_TTYNAME_R = 0 +GNULIB_TZSET = 1 +GNULIB_UNISTD_H_NONBLOCKING = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNLINK = 0 +GNULIB_UNLINKAT = 0 +GNULIB_UNLOCKPT = 0 +GNULIB_UNSETENV = 1 +GNULIB_USLEEP = 0 +GNULIB_UTIMENSAT = 0 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 1 +GNULIB_VFSCANF = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSCANF = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WAITPID = 1 +GNULIB_WCPCPY = 0 +GNULIB_WCPNCPY = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSCASECMP = 0 +GNULIB_WCSCAT = 0 +GNULIB_WCSCHR = 0 +GNULIB_WCSCMP = 0 +GNULIB_WCSCOLL = 0 +GNULIB_WCSCPY = 0 +GNULIB_WCSCSPN = 0 +GNULIB_WCSDUP = 0 +GNULIB_WCSFTIME = 0 +GNULIB_WCSLEN = 0 +GNULIB_WCSNCASECMP = 0 +GNULIB_WCSNCAT = 0 +GNULIB_WCSNCMP = 0 +GNULIB_WCSNCPY = 0 +GNULIB_WCSNLEN = 0 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSPBRK = 0 +GNULIB_WCSRCHR = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCSSPN = 0 +GNULIB_WCSSTR = 0 +GNULIB_WCSTOK = 0 +GNULIB_WCSWIDTH = 0 +GNULIB_WCSXFRM = 0 +GNULIB_WCTOB = 1 +GNULIB_WCTOMB = 1 +GNULIB_WCTRANS = 0 +GNULIB_WCTYPE = 0 +GNULIB_WCWIDTH = 0 +GNULIB_WMEMCHR = 0 +GNULIB_WMEMCMP = 0 +GNULIB_WMEMCPY = 0 +GNULIB_WMEMMOVE = 0 +GNULIB_WMEMSET = 0 +GNULIB_WRITE = 0 +GNULIB__EXIT = 0 +GREP = /bin/grep +HAVE_ACOSF = 1 +HAVE_ACOSL = 1 +HAVE_ASINF = 1 +HAVE_ASINL = 1 +HAVE_ATAN2F = 1 +HAVE_ATANF = 1 +HAVE_ATANL = 1 +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_C99_STDINT_H = 1 +HAVE_CANONICALIZE_FILE_NAME = 1 +HAVE_CBRT = 1 +HAVE_CBRTF = 1 +HAVE_CBRTL = 1 +HAVE_CHOWN = 1 +HAVE_COPYSIGN = 1 +HAVE_COPYSIGNL = 1 +HAVE_COSF = 1 +HAVE_COSHF = 1 +HAVE_COSL = 1 +HAVE_CRTDEFS_H = 0 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_CBRTF = 1 +HAVE_DECL_CBRTL = 1 +HAVE_DECL_CEILF = 1 +HAVE_DECL_CEILL = 1 +HAVE_DECL_COPYSIGNF = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXP2 = 1 +HAVE_DECL_EXP2F = 1 +HAVE_DECL_EXP2L = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_EXPM1L = 1 +HAVE_DECL_FCHDIR = 1 +HAVE_DECL_FDATASYNC = 1 +HAVE_DECL_FLOORF = 1 +HAVE_DECL_FLOORL = 1 +HAVE_DECL_FPURGE = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_FSEEKO = 1 +HAVE_DECL_FTELLO = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETDOMAINNAME = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_GETPAGESIZE = 1 +HAVE_DECL_GETUSERSHELL = 1 +HAVE_DECL_IMAXABS = 1 +HAVE_DECL_IMAXDIV = 1 +HAVE_DECL_INITSTATE = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOCALTIME_R = 1 +HAVE_DECL_LOG10L = 1 +HAVE_DECL_LOG2 = 1 +HAVE_DECL_LOG2F = 1 +HAVE_DECL_LOG2L = 1 +HAVE_DECL_LOGB = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_REMAINDER = 1 +HAVE_DECL_REMAINDERL = 1 +HAVE_DECL_RINTF = 1 +HAVE_DECL_ROUND = 1 +HAVE_DECL_ROUNDF = 1 +HAVE_DECL_ROUNDL = 1 +HAVE_DECL_SETENV = 1 +HAVE_DECL_SETHOSTNAME = 1 +HAVE_DECL_SETSTATE = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR_R = 1 +HAVE_DECL_STRNCASECMP = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOIMAX = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_STRTOUMAX = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCATE = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_TRUNCL = 1 +HAVE_DECL_TTYNAME_R = 1 +HAVE_DECL_UNSETENV = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_DUP3 = 1 +HAVE_DUPLOCALE = 1 +HAVE_EUIDACCESS = 1 +HAVE_EXPF = 1 +HAVE_EXPL = 1 +HAVE_EXPLICIT_BZERO = 1 +HAVE_EXPM1 = 1 +HAVE_EXPM1F = 1 +HAVE_FABSF = 1 +HAVE_FABSL = 1 +HAVE_FACCESSAT = 1 +HAVE_FCHDIR = 1 +HAVE_FCHMODAT = 1 +HAVE_FCHOWNAT = 1 +HAVE_FCNTL = 1 +HAVE_FDATASYNC = 1 +HAVE_FEATURES_H = 1 +HAVE_FFS = 1 +HAVE_FFSL = 1 +HAVE_FFSLL = 1 +HAVE_FLOCK = 1 +HAVE_FMA = 1 +HAVE_FMAF = 1 +HAVE_FMAL = 1 +HAVE_FMODF = 1 +HAVE_FMODL = 1 +HAVE_FREELOCALE = 1 +HAVE_FREXPF = 1 +HAVE_FSEEKO = 1 +HAVE_FSTATAT = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_FUTIMENS = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETGROUPS = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETLOGIN = 1 +HAVE_GETOPT_H = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETPASS = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETTIMEOFDAY = 1 +HAVE_GRANTPT = 1 +HAVE_GROUP_MEMBER = 1 +HAVE_HYPOTF = 1 +HAVE_HYPOTL = 1 +HAVE_ILOGB = 1 +HAVE_ILOGBF = 1 +HAVE_ILOGBL = 1 +HAVE_IMAXDIV_T = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWBLANK = 1 +HAVE_ISWCNTRL = 1 +HAVE_LANGINFO_ALTMON = 0 +HAVE_LANGINFO_CODESET = 1 +HAVE_LANGINFO_ERA = 1 +HAVE_LANGINFO_H = 1 +HAVE_LANGINFO_T_FMT_AMPM = 1 +HAVE_LANGINFO_YESEXPR = 1 +HAVE_LCHMOD = 1 +HAVE_LCHOWN = 1 +HAVE_LDEXPF = 1 +HAVE_LIBGCRYPT = no +HAVE_LINK = 1 +HAVE_LINKAT = 1 +HAVE_LOG10F = 1 +HAVE_LOG10L = 1 +HAVE_LOG1P = 1 +HAVE_LOG1PF = 1 +HAVE_LOG1PL = 1 +HAVE_LOGBF = 1 +HAVE_LOGBL = 1 +HAVE_LOGF = 1 +HAVE_LOGL = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MAX_ALIGN_T = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSLEN = 0 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMCHR = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDIRAT = 1 +HAVE_MKDTEMP = 1 +HAVE_MKFIFO = 1 +HAVE_MKFIFOAT = 1 +HAVE_MKNOD = 1 +HAVE_MKNODAT = 1 +HAVE_MKOSTEMP = 1 +HAVE_MKOSTEMPS = 1 +HAVE_MKSTEMP = 1 +HAVE_MKSTEMPS = 1 +HAVE_MODFF = 1 +HAVE_MODFL = 1 +HAVE_MSVC_INVALID_PARAMETER_HANDLER = 0 +HAVE_NANOSLEEP = 1 +HAVE_NEWLOCALE = 1 +HAVE_NL_LANGINFO = 1 +HAVE_OPENAT = 1 +HAVE_OS_H = 0 +HAVE_PCLOSE = 1 +HAVE_PIPE = 1 +HAVE_PIPE2 = 1 +HAVE_POPEN = 1 +HAVE_POSIX_OPENPT = 1 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_POSIX_SPAWNATTR_T = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = 1 +HAVE_POWF = 1 +HAVE_PREAD = 1 +HAVE_PTHREAD_SIGMASK = 1 +HAVE_PTSNAME = 1 +HAVE_PTSNAME_R = 1 +HAVE_PWRITE = 1 +HAVE_QSORT_R = 1 +HAVE_RAISE = 1 +HAVE_RANDOM = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_READLINKAT = 1 +HAVE_REALLOCARRAY = 1 +HAVE_REALPATH = 1 +HAVE_REMAINDER = 1 +HAVE_REMAINDERF = 1 +HAVE_RENAMEAT = 1 +HAVE_RINT = 1 +HAVE_RINTL = 1 +HAVE_RPMATCH = 1 +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0 +HAVE_SCHED_H = +HAVE_SECURE_GETENV = 1 +HAVE_SETENV = 1 +HAVE_SETHOSTNAME = 1 +HAVE_SIGACTION = 1 +HAVE_SIGHANDLER_T = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SINF = 1 +HAVE_SINHF = 1 +HAVE_SINL = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_SQRTF = 1 +HAVE_SQRTL = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASECMP = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRINGS_H = 1 +HAVE_STRPBRK = 1 +HAVE_STRPTIME = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYMLINK = 1 +HAVE_SYMLINKAT = 1 +HAVE_SYS_BITYPES_H = 0 +HAVE_SYS_CDEFS_H = +HAVE_SYS_FILE_H = 1 +HAVE_SYS_INTTYPES_H = 0 +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TANF = 1 +HAVE_TANHF = 1 +HAVE_TANL = 1 +HAVE_TIMEGM = 1 +HAVE_TIMEZONE_T = 0 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_TZSET = 1 +HAVE_UNISTD_H = 1 +HAVE_UNLINKAT = 1 +HAVE_UNLOCKPT = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_USLEEP = 1 +HAVE_UTIMENSAT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCHAR_T = 1 +HAVE_WCPCPY = 1 +HAVE_WCPNCPY = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSCASECMP = 1 +HAVE_WCSCAT = 1 +HAVE_WCSCHR = 1 +HAVE_WCSCMP = 1 +HAVE_WCSCOLL = 1 +HAVE_WCSCPY = 1 +HAVE_WCSCSPN = 1 +HAVE_WCSDUP = 1 +HAVE_WCSFTIME = 1 +HAVE_WCSLEN = 1 +HAVE_WCSNCASECMP = 1 +HAVE_WCSNCAT = 1 +HAVE_WCSNCMP = 1 +HAVE_WCSNCPY = 1 +HAVE_WCSNLEN = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSPBRK = 1 +HAVE_WCSRCHR = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCSSPN = 1 +HAVE_WCSSTR = 1 +HAVE_WCSTOK = 1 +HAVE_WCSWIDTH = 1 +HAVE_WCSXFRM = 1 +HAVE_WCTRANS_T = 1 +HAVE_WCTYPE_H = 1 +HAVE_WCTYPE_T = 1 +HAVE_WINSOCK2_H = 0 +HAVE_WINT_T = 1 +HAVE_WMEMCHR = 1 +HAVE_WMEMCMP = 1 +HAVE_WMEMCPY = 1 +HAVE_WMEMMOVE = 1 +HAVE_WMEMSET = 1 +HAVE_XLOCALE_H = 1 +HAVE__BOOL = 1 +HAVE__EXIT = 1 +HELP2MAN = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing help2man +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +INT32_MAX_LT_INTMAX_MAX = 1 +INT64_MAX_EQ_LONG_MAX = 0 +INTLLIBS = +INTL_MACOSX_LIBS = +LD = /usr/bin/ld +LDFLAGS = +LEX = flex +LEXLIB = -lfl +LEX_OUTPUT_ROOT = lex.yy +LIBGCRYPT = +LIBGCRYPT_PREFIX = +LIBICONV = -liconv +LIBINTL = +LIBMULTITHREAD = -pthread -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBREADLINE = +LIBS = +LIBTHREAD = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIB_ACL = +LIB_CLOCK_GETTIME = +LIB_EACCESS = +LIB_POSIX_SPAWN = +LIB_SELINUX = +LIMITS_H = limits.h +LIPO = +LN_S = ln -s +LOCALCHARSET_TESTS_ENVIRONMENT = +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTALLOCA = +LTLIBGCRYPT = +LTLIBICONV = -liconv +LTLIBINTL = +LTLIBMULTITHREAD = -pthread +LTLIBOBJS = +LTLIBPTH = +LTLIBREADLINE = +LTLIBTHREAD = +LT_SYS_LIBRARY_PATH = +MAKEINFO = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing makeinfo +MANIFEST_TOOL = : +MDBLIBS = +MDB_DATETIME = +MKDIR_P = /bin/mkdir -p +MSGFMT = /usr/bin/msgfmt +MSGFMT_015 = /usr/bin/msgfmt +MSGMERGE = /usr/bin/msgmerge +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = <fcntl.h> +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = <getopt.h> +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = <inttypes.h> +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = <langinfo.h> +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = <limits.h> +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = <locale.h> +NEXT_AS_FIRST_DIRECTIVE_MATH_H = <math.h> +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = <signal.h> +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = <spawn.h> +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = <stdint.h> +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = <stdio.h> +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = <stdlib.h> +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = <strings.h> +NEXT_AS_FIRST_DIRECTIVE_STRING_H = <string.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = <sys/file.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = <sys/stat.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = <sys/time.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = <sys/types.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = <sys/wait.h> +NEXT_AS_FIRST_DIRECTIVE_TIME_H = <time.h> +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = <unistd.h> +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = <wchar.h> +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = <wctype.h> +NEXT_ERRNO_H = +NEXT_FCNTL_H = <fcntl.h> +NEXT_FLOAT_H = +NEXT_GETOPT_H = <getopt.h> +NEXT_INTTYPES_H = <inttypes.h> +NEXT_LANGINFO_H = <langinfo.h> +NEXT_LIMITS_H = <limits.h> +NEXT_LOCALE_H = <locale.h> +NEXT_MATH_H = <math.h> +NEXT_SCHED_H = +NEXT_SELINUX_SELINUX_H = +NEXT_SIGNAL_H = <signal.h> +NEXT_SPAWN_H = <spawn.h> +NEXT_STDARG_H = <stdarg.h> +NEXT_STDDEF_H = +NEXT_STDINT_H = <stdint.h> +NEXT_STDIO_H = <stdio.h> +NEXT_STDLIB_H = <stdlib.h> +NEXT_STRINGS_H = <strings.h> +NEXT_STRING_H = <string.h> +NEXT_SYS_FILE_H = <sys/file.h> +NEXT_SYS_STAT_H = <sys/stat.h> +NEXT_SYS_TIME_H = <sys/time.h> +NEXT_SYS_TYPES_H = <sys/types.h> +NEXT_SYS_WAIT_H = <sys/wait.h> +NEXT_TIME_H = <time.h> +NEXT_UNISTD_H = <unistd.h> +NEXT_WCHAR_H = <wchar.h> +NEXT_WCTYPE_H = <wctype.h> +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = recutils +PACKAGE_BUGREPORT = bug-recutils@gnu.org +PACKAGE_NAME = GNU recutils +PACKAGE_STRING = GNU recutils 1.8 +PACKAGE_TARNAME = recutils +PACKAGE_URL = http://www.gnu.org/software/recutils/ +PACKAGE_VERSION = 1.8 +PATH_SEPARATOR = : +PKG_CONFIG = /usr/bin/pkg-config +PKG_CONFIG_LIBDIR = +PKG_CONFIG_PATH = +POSUB = po +PRAGMA_COLUMNS = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PRIPTR_PREFIX = "l" +PRI_MACROS_BROKEN = 0 +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = 0 +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_ACOSF = 0 +REPLACE_ASINF = 0 +REPLACE_ATAN2F = 0 +REPLACE_ATANF = 0 +REPLACE_BTOWC = 0 +REPLACE_CALLOC = 0 +REPLACE_CANONICALIZE_FILE_NAME = 0 +REPLACE_CBRTF = 0 +REPLACE_CBRTL = 0 +REPLACE_CEIL = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_COSF = 0 +REPLACE_COSHF = 0 +REPLACE_CTIME = GNULIB_PORTCHECK +REPLACE_DPRINTF = 0 +REPLACE_DUP = 0 +REPLACE_DUP2 = 0 +REPLACE_DUPLOCALE = 0 +REPLACE_EXP2 = 0 +REPLACE_EXP2L = 0 +REPLACE_EXPF = 0 +REPLACE_EXPM1 = 0 +REPLACE_EXPM1F = 0 +REPLACE_FABSL = 0 +REPLACE_FACCESSAT = 0 +REPLACE_FCHOWNAT = 0 +REPLACE_FCLOSE = 0 +REPLACE_FCNTL = 1 +REPLACE_FDOPEN = 0 +REPLACE_FFLUSH = 0 +REPLACE_FLOOR = 0 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FMA = 0 +REPLACE_FMAF = 0 +REPLACE_FMAL = 0 +REPLACE_FMOD = 0 +REPLACE_FMODF = 0 +REPLACE_FMODL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 1 +REPLACE_FPURGE = 0 +REPLACE_FREELOCALE = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPF = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 0 +REPLACE_FSTAT = 0 +REPLACE_FSTATAT = 0 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_FTRUNCATE = 0 +REPLACE_FUTIMENS = 0 +REPLACE_GETCWD = 0 +REPLACE_GETDELIM = 0 +REPLACE_GETDOMAINNAME = 0 +REPLACE_GETDTABLESIZE = 0 +REPLACE_GETGROUPS = 0 +REPLACE_GETLINE = 0 +REPLACE_GETLOGIN_R = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETPASS = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_GMTIME = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_HYPOT = 0 +REPLACE_HYPOTF = 0 +REPLACE_HYPOTL = 0 +REPLACE_ILOGB = 0 +REPLACE_ILOGBF = 0 +REPLACE_ILOGBL = 0 +REPLACE_ISATTY = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWBLANK = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_ITOLD = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LINK = 0 +REPLACE_LINKAT = 0 +REPLACE_LOCALECONV = 0 +REPLACE_LOCALTIME = 0 +REPLACE_LOCALTIME_R = 0 +REPLACE_LOG = 0 +REPLACE_LOG10 = 0 +REPLACE_LOG10F = 0 +REPLACE_LOG10L = 0 +REPLACE_LOG1P = 0 +REPLACE_LOG1PF = 0 +REPLACE_LOG1PL = 0 +REPLACE_LOG2 = 0 +REPLACE_LOG2F = 0 +REPLACE_LOG2L = 0 +REPLACE_LOGB = 0 +REPLACE_LOGBF = 0 +REPLACE_LOGBL = 0 +REPLACE_LOGF = 0 +REPLACE_LOGL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MALLOC = 0 +REPLACE_MBRLEN = 1 +REPLACE_MBRTOWC = 1 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MBTOWC = 0 +REPLACE_MEMCHR = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKFIFO = 0 +REPLACE_MKNOD = 0 +REPLACE_MKSTEMP = 0 +REPLACE_MKTIME = 0 +REPLACE_MODF = 0 +REPLACE_MODFF = 0 +REPLACE_MODFL = 0 +REPLACE_NAN = 0 +REPLACE_NANOSLEEP = GNULIB_PORTCHECK +REPLACE_NEWLOCALE = 0 +REPLACE_NL_LANGINFO = 1 +REPLACE_NULL = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_OPENAT = 0 +REPLACE_PERROR = 0 +REPLACE_POPEN = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 0 +REPLACE_PREAD = 0 +REPLACE_PRINTF = 1 +REPLACE_PTHREAD_SIGMASK = 0 +REPLACE_PTSNAME = 0 +REPLACE_PTSNAME_R = 0 +REPLACE_PUTENV = 0 +REPLACE_PWRITE = 0 +REPLACE_QSORT_R = 0 +REPLACE_RAISE = 0 +REPLACE_RANDOM_R = 0 +REPLACE_READ = 0 +REPLACE_READLINK = 0 +REPLACE_READLINKAT = 0 +REPLACE_REALLOC = 0 +REPLACE_REALPATH = 0 +REPLACE_REMAINDER = 0 +REPLACE_REMAINDERF = 0 +REPLACE_REMAINDERL = 0 +REPLACE_REMOVE = 0 +REPLACE_RENAME = 0 +REPLACE_RENAMEAT = 0 +REPLACE_RMDIR = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SETENV = 0 +REPLACE_SETLOCALE = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SINF = 0 +REPLACE_SINHF = 0 +REPLACE_SLEEP = 0 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_SQRTF = 0 +REPLACE_SQRTL = 0 +REPLACE_STAT = 0 +REPLACE_STDIO_READ_FUNCS = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STPNCPY = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRCHRNUL = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRERROR_R = 0 +REPLACE_STRFTIME = GNULIB_PORTCHECK +REPLACE_STRNCAT = 0 +REPLACE_STRNDUP = 0 +REPLACE_STRNLEN = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 0 +REPLACE_STRTOD = 0 +REPLACE_STRTOIMAX = 0 +REPLACE_STRTOK_R = 0 +REPLACE_STRTOUMAX = 0 +REPLACE_STRUCT_LCONV = 0 +REPLACE_STRUCT_TIMEVAL = 0 +REPLACE_SYMLINK = 0 +REPLACE_SYMLINKAT = 0 +REPLACE_TANF = 0 +REPLACE_TANHF = 0 +REPLACE_TIMEGM = 0 +REPLACE_TMPFILE = 0 +REPLACE_TOWLOWER = 0 +REPLACE_TRUNC = 0 +REPLACE_TRUNCATE = 0 +REPLACE_TRUNCF = 0 +REPLACE_TRUNCL = 0 +REPLACE_TTYNAME_R = 0 +REPLACE_TZSET = 0 +REPLACE_UNLINK = 0 +REPLACE_UNLINKAT = 0 +REPLACE_UNSETENV = 0 +REPLACE_USLEEP = 0 +REPLACE_UTIMENSAT = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 1 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSFTIME = 0 +REPLACE_WCSNRTOMBS = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCSWIDTH = 0 +REPLACE_WCTOB = 0 +REPLACE_WCTOMB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SED = /bin/sed +SELINUX_CONTEXT_H = selinux/context.h +SET_MAKE = +SHELL = /bin/sh +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +STDARG_H = +STDBOOL_H = +STDDEF_H = +STDINT_H = stdint.h +STRIP = strip +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = 0 +TIME_H_DEFINES_STRUCT_TIMESPEC = 1 +UINT32_MAX_LT_UINTMAX_MAX = 1 +UINT64_MAX_EQ_ULONG_MAX = 0 +UNDEFINE_STRTOK_R = 0 +UNISTD_H_DEFINES_STRUCT_TIMESPEC = 0 +UNISTD_H_HAVE_WINSOCK2_H = 0 +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = 0 +USE_ACL = 0 +USE_NLS = yes +UUIDLIBS = +VERSION = 1.8 +WCHAR_T_SUFFIX = +WINDOWS_64_BIT_OFF_T = 0 +WINDOWS_64_BIT_ST_SIZE = 0 +WINDOWS_STAT_INODES = 0 +WINDOWS_STAT_TIMESPEC = 0 +WINT_T_SUFFIX = +XGETTEXT = /usr/bin/xgettext +XGETTEXT_015 = /usr/bin/xgettext +XGETTEXT_EXTRA_OPTIONS = --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format +YACC = bison -o y.tab.c +YFLAGS = +abs_builddir = /mnt/lfs/build/recutils/recutils-1.8/algol68 +abs_srcdir = /mnt/lfs/build/recutils/recutils-1.8/algol68 +abs_top_builddir = /mnt/lfs/build/recutils/recutils-1.8 +abs_top_srcdir = /mnt/lfs/build/recutils/recutils-1.8 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +builddir = . +crypt_support = no +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +gl_LIBOBJS = asnprintf.o asprintf.o fcntl.o fprintf.o fseterr.o localtime-buffer.o mbrlen.o mbrtowc.o mktime.o nl_langinfo.o obstack.o printf.o printf-args.o printf-parse.o readline.o regex.o time_rz.o vasnprintf.o vasprintf.o vfprintf.o +gl_LTLIBOBJS = asnprintf.lo asprintf.lo fcntl.lo fprintf.lo fseterr.lo localtime-buffer.lo mbrlen.lo mbrtowc.lo mktime.lo nl_langinfo.lo obstack.lo printf.lo printf-args.lo printf-parse.lo readline.lo regex.lo time_rz.lo vasnprintf.lo vasprintf.lo vfprintf.lo +gltests_LIBOBJS = +gltests_LTLIBOBJS = +gltests_WITNESS = IN_RECUTILS_GNULIB_TESTS +have_uuid = no +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = $(MKDIR_P) +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +runstatedir = ${localstatedir}/run +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +lib_LIBRARIES = librec-a68.a +nodist_librec_a68_a_SOURCES = rec.c +BUILT_SOURCES = rec.c +usrlibdir = $(libdir) +usrlib_DATA = rec.m +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu algol68/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu algol68/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-libLIBRARIES: $(lib_LIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(INSTALL_DATA) $$list2 "$(DESTDIR)$(libdir)" || exit $$?; } + @$(POST_INSTALL) + @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + if test -f $$p; then \ + $(am__strip_dir) \ + echo " ( cd '$(DESTDIR)$(libdir)' && $(RANLIB) $$f )"; \ + ( cd "$(DESTDIR)$(libdir)" && $(RANLIB) $$f ) || exit $$?; \ + else :; fi; \ + done + +uninstall-libLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libdir)'; $(am__uninstall_files_from_dir) + +clean-libLIBRARIES: + -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) + +librec-a68.a: $(librec_a68_a_OBJECTS) $(librec_a68_a_DEPENDENCIES) $(EXTRA_librec_a68_a_DEPENDENCIES) + $(AM_V_at)-rm -f librec-a68.a + $(AM_V_AR)$(librec_a68_a_AR) librec-a68.a $(librec_a68_a_OBJECTS) $(librec_a68_a_LIBADD) + $(AM_V_at)$(RANLIB) librec-a68.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/rec.Po + +.c.o: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< + +.c.obj: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ + $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Plo +# $(AM_V_CC)source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-usrlibDATA: $(usrlib_DATA) + @$(NORMAL_INSTALL) + @list='$(usrlib_DATA)'; test -n "$(usrlibdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(usrlibdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(usrlibdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(usrlibdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(usrlibdir)" || exit $$?; \ + done + +uninstall-usrlibDATA: + @$(NORMAL_UNINSTALL) + @list='$(usrlib_DATA)'; test -n "$(usrlibdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(usrlibdir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(usrlibdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libLIBRARIES clean-libtool clean-local \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-usrlibDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libLIBRARIES uninstall-usrlibDATA + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libLIBRARIES clean-libtool clean-local cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libLIBRARIES install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + install-usrlibDATA installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-libLIBRARIES uninstall-usrlibDATA + +.PRECIOUS: Makefile + + +rec.c: rec.a68 + $(CA68) -C -m librec-a68.a -d $(builddir) -M $(builddir) -I$(top_srcdir)/src -u AAAAGNU $< + +clean-local: + -rm -f $(builddir)/rec.[ocm] + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/algol68/Makefile.am b/devspec.en_US/project/recutils/algol68/Makefile.am new file mode 100755 index 0000000..0ca64ec --- /dev/null +++ b/devspec.en_US/project/recutils/algol68/Makefile.am @@ -0,0 +1,30 @@ +# Makefile.am for recutils/algol68 + +# Copyright (C) 2011-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +lib_LIBRARIES = librec-a68.a +nodist_librec_a68_a_SOURCES = rec.c +BUILT_SOURCES = rec.c +usrlibdir = $(libdir) +usrlib_DATA = rec.m + +rec.c: rec.a68 + $(CA68) -C -m librec-a68.a -d $(builddir) -M $(builddir) -I$(top_srcdir)/src -u AAAAGNU $< + +clean-local: + -rm -f $(builddir)/rec.[ocm] + +# End of Makefile.am diff --git a/devspec.en_US/project/recutils/algol68/Makefile.in b/devspec.en_US/project/recutils/algol68/Makefile.in new file mode 100755 index 0000000..6be57eb --- /dev/null +++ b/devspec.en_US/project/recutils/algol68/Makefile.in @@ -0,0 +1,1955 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Makefile.am for recutils/algol68 + +# Copyright (C) 2011-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = algol68 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(usrlibdir)" +LIBRARIES = $(lib_LIBRARIES) +AM_V_AR = $(am__v_AR_@AM_V@) +am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) +am__v_AR_0 = @echo " AR " $@; +am__v_AR_1 = +librec_a68_a_AR = $(AR) $(ARFLAGS) +librec_a68_a_LIBADD = +nodist_librec_a68_a_OBJECTS = rec.$(OBJEXT) +librec_a68_a_OBJECTS = $(nodist_librec_a68_a_OBJECTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(nodist_librec_a68_a_SOURCES) +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +DATA = $(usrlib_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BASH_HEADERS = @BASH_HEADERS@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CA68 = @CA68@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CURLLIBS = @CURLLIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +FLOOR_LIBM = @FLOOR_LIBM@ +GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ACOSF = @GNULIB_ACOSF@ +GNULIB_ACOSL = @GNULIB_ACOSL@ +GNULIB_ASINF = @GNULIB_ASINF@ +GNULIB_ASINL = @GNULIB_ASINL@ +GNULIB_ATAN2F = @GNULIB_ATAN2F@ +GNULIB_ATANF = @GNULIB_ATANF@ +GNULIB_ATANL = @GNULIB_ATANL@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CBRT = @GNULIB_CBRT@ +GNULIB_CBRTF = @GNULIB_CBRTF@ +GNULIB_CBRTL = @GNULIB_CBRTL@ +GNULIB_CEIL = @GNULIB_CEIL@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ +GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ +GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ +GNULIB_COSF = @GNULIB_COSF@ +GNULIB_COSHF = @GNULIB_COSHF@ +GNULIB_COSL = @GNULIB_COSL@ +GNULIB_CTIME = @GNULIB_CTIME@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_EXP2 = @GNULIB_EXP2@ +GNULIB_EXP2F = @GNULIB_EXP2F@ +GNULIB_EXP2L = @GNULIB_EXP2L@ +GNULIB_EXPF = @GNULIB_EXPF@ +GNULIB_EXPL = @GNULIB_EXPL@ +GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ +GNULIB_EXPM1 = @GNULIB_EXPM1@ +GNULIB_EXPM1F = @GNULIB_EXPM1F@ +GNULIB_EXPM1L = @GNULIB_EXPM1L@ +GNULIB_FABSF = @GNULIB_FABSF@ +GNULIB_FABSL = @GNULIB_FABSL@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FCNTL = @GNULIB_FCNTL@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FLOCK = @GNULIB_FLOCK@ +GNULIB_FLOOR = @GNULIB_FLOOR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FMA = @GNULIB_FMA@ +GNULIB_FMAF = @GNULIB_FMAF@ +GNULIB_FMAL = @GNULIB_FMAL@ +GNULIB_FMOD = @GNULIB_FMOD@ +GNULIB_FMODF = @GNULIB_FMODF@ +GNULIB_FMODL = @GNULIB_FMODL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPF = @GNULIB_FREXPF@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSTAT = @GNULIB_FSTAT@ +GNULIB_FSTATAT = @GNULIB_FSTATAT@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETPASS = @GNULIB_GETPASS@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_HYPOT = @GNULIB_HYPOT@ +GNULIB_HYPOTF = @GNULIB_HYPOTF@ +GNULIB_HYPOTL = @GNULIB_HYPOTL@ +GNULIB_ILOGB = @GNULIB_ILOGB@ +GNULIB_ILOGBF = @GNULIB_ILOGBF@ +GNULIB_ILOGBL = @GNULIB_ILOGBL@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPF = @GNULIB_LDEXPF@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LOCALENAME = @GNULIB_LOCALENAME@ +GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ +GNULIB_LOG = @GNULIB_LOG@ +GNULIB_LOG10 = @GNULIB_LOG10@ +GNULIB_LOG10F = @GNULIB_LOG10F@ +GNULIB_LOG10L = @GNULIB_LOG10L@ +GNULIB_LOG1P = @GNULIB_LOG1P@ +GNULIB_LOG1PF = @GNULIB_LOG1PF@ +GNULIB_LOG1PL = @GNULIB_LOG1PL@ +GNULIB_LOG2 = @GNULIB_LOG2@ +GNULIB_LOG2F = @GNULIB_LOG2F@ +GNULIB_LOG2L = @GNULIB_LOG2L@ +GNULIB_LOGB = @GNULIB_LOGB@ +GNULIB_LOGBF = @GNULIB_LOGBF@ +GNULIB_LOGBL = @GNULIB_LOGBL@ +GNULIB_LOGF = @GNULIB_LOGF@ +GNULIB_LOGL = @GNULIB_LOGL@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKFIFO = @GNULIB_MKFIFO@ +GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ +GNULIB_MKNOD = @GNULIB_MKNOD@ +GNULIB_MKNODAT = @GNULIB_MKNODAT@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_MKTIME = @GNULIB_MKTIME@ +GNULIB_MODF = @GNULIB_MODF@ +GNULIB_MODFF = @GNULIB_MODFF@ +GNULIB_MODFL = @GNULIB_MODFL@ +GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ +GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_POWF = @GNULIB_POWF@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_QSORT_R = @GNULIB_QSORT_R@ +GNULIB_RAISE = @GNULIB_RAISE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMAINDER = @GNULIB_REMAINDER@ +GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ +GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RINT = @GNULIB_RINT@ +GNULIB_RINTF = @GNULIB_RINTF@ +GNULIB_RINTL = @GNULIB_RINTL@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SINF = @GNULIB_SINF@ +GNULIB_SINHF = @GNULIB_SINHF@ +GNULIB_SINL = @GNULIB_SINL@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_SQRTF = @GNULIB_SQRTF@ +GNULIB_SQRTL = @GNULIB_SQRTL@ +GNULIB_STAT = @GNULIB_STAT@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRFTIME = @GNULIB_STRFTIME@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRPTIME = @GNULIB_STRPTIME@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TANF = @GNULIB_TANF@ +GNULIB_TANHF = @GNULIB_TANHF@ +GNULIB_TANL = @GNULIB_TANL@ +GNULIB_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_TZSET = @GNULIB_TZSET@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WAITPID = @GNULIB_WAITPID@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +HAVE_ACOSF = @HAVE_ACOSF@ +HAVE_ACOSL = @HAVE_ACOSL@ +HAVE_ASINF = @HAVE_ASINF@ +HAVE_ASINL = @HAVE_ASINL@ +HAVE_ATAN2F = @HAVE_ATAN2F@ +HAVE_ATANF = @HAVE_ATANF@ +HAVE_ATANL = @HAVE_ATANL@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CBRT = @HAVE_CBRT@ +HAVE_CBRTF = @HAVE_CBRTF@ +HAVE_CBRTL = @HAVE_CBRTL@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_COPYSIGN = @HAVE_COPYSIGN@ +HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ +HAVE_COSF = @HAVE_COSF@ +HAVE_COSHF = @HAVE_COSHF@ +HAVE_COSL = @HAVE_COSL@ +HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ +HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ +HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ +HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ +HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ +HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ +HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ +HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ +HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ +HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ +HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ +HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ +HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ +HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ +HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ +HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ +HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ +HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ +HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ +HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_EXPF = @HAVE_EXPF@ +HAVE_EXPL = @HAVE_EXPL@ +HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ +HAVE_EXPM1 = @HAVE_EXPM1@ +HAVE_EXPM1F = @HAVE_EXPM1F@ +HAVE_FABSF = @HAVE_FABSF@ +HAVE_FABSL = @HAVE_FABSL@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FLOCK = @HAVE_FLOCK@ +HAVE_FMA = @HAVE_FMA@ +HAVE_FMAF = @HAVE_FMAF@ +HAVE_FMAL = @HAVE_FMAL@ +HAVE_FMODF = @HAVE_FMODF@ +HAVE_FMODL = @HAVE_FMODL@ +HAVE_FREELOCALE = @HAVE_FREELOCALE@ +HAVE_FREXPF = @HAVE_FREXPF@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSTATAT = @HAVE_FSTATAT@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_FUTIMENS = @HAVE_FUTIMENS@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETPASS = @HAVE_GETPASS@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_HYPOTF = @HAVE_HYPOTF@ +HAVE_HYPOTL = @HAVE_HYPOTL@ +HAVE_ILOGB = @HAVE_ILOGB@ +HAVE_ILOGBF = @HAVE_ILOGBF@ +HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LDEXPF = @HAVE_LDEXPF@ +HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOG10F = @HAVE_LOG10F@ +HAVE_LOG10L = @HAVE_LOG10L@ +HAVE_LOG1P = @HAVE_LOG1P@ +HAVE_LOG1PF = @HAVE_LOG1PF@ +HAVE_LOG1PL = @HAVE_LOG1PL@ +HAVE_LOGBF = @HAVE_LOGBF@ +HAVE_LOGBL = @HAVE_LOGBL@ +HAVE_LOGF = @HAVE_LOGF@ +HAVE_LOGL = @HAVE_LOGL@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDIRAT = @HAVE_MKDIRAT@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKFIFO = @HAVE_MKFIFO@ +HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ +HAVE_MKNOD = @HAVE_MKNOD@ +HAVE_MKNODAT = @HAVE_MKNODAT@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MODFF = @HAVE_MODFF@ +HAVE_MODFL = @HAVE_MODFL@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ +HAVE_POWF = @HAVE_POWF@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_QSORT_R = @HAVE_QSORT_R@ +HAVE_RAISE = @HAVE_RAISE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_REMAINDER = @HAVE_REMAINDER@ +HAVE_REMAINDERF = @HAVE_REMAINDERF@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RINT = @HAVE_RINT@ +HAVE_RINTL = @HAVE_RINTL@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SINF = @HAVE_SINF@ +HAVE_SINHF = @HAVE_SINHF@ +HAVE_SINL = @HAVE_SINL@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_SQRTF = @HAVE_SQRTF@ +HAVE_SQRTL = @HAVE_SQRTL@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRPTIME = @HAVE_STRPTIME@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ +HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TANF = @HAVE_TANF@ +HAVE_TANHF = @HAVE_TANHF@ +HAVE_TANL = @HAVE_TANL@ +HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_TZSET = @HAVE_TZSET@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSFTIME = @HAVE_WCSFTIME@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ +INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBGCRYPT = @LIBGCRYPT@ +LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBREADLINE = @LIBREADLINE@ +LIBS = @LIBS@ +LIBTHREAD = @LIBTHREAD@ +LIBTOOL = @LIBTOOL@ +LIB_ACL = @LIB_ACL@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LIB_EACCESS = @LIB_EACCESS@ +LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ +LIB_SELINUX = @LIB_SELINUX@ +LIMITS_H = @LIMITS_H@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTALLOCA = @LTALLOCA@ +LTLIBGCRYPT = @LTLIBGCRYPT@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBREADLINE = @LTLIBREADLINE@ +LTLIBTHREAD = @LTLIBTHREAD@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MDBLIBS = @MDBLIBS@ +MDB_DATETIME = @MDB_DATETIME@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ +NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LIMITS_H = @NEXT_LIMITS_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_ACOSF = @REPLACE_ACOSF@ +REPLACE_ASINF = @REPLACE_ASINF@ +REPLACE_ATAN2F = @REPLACE_ATAN2F@ +REPLACE_ATANF = @REPLACE_ATANF@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CBRTF = @REPLACE_CBRTF@ +REPLACE_CBRTL = @REPLACE_CBRTL@ +REPLACE_CEIL = @REPLACE_CEIL@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_COSF = @REPLACE_COSF@ +REPLACE_COSHF = @REPLACE_COSHF@ +REPLACE_CTIME = @REPLACE_CTIME@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_EXP2 = @REPLACE_EXP2@ +REPLACE_EXP2L = @REPLACE_EXP2L@ +REPLACE_EXPF = @REPLACE_EXPF@ +REPLACE_EXPM1 = @REPLACE_EXPM1@ +REPLACE_EXPM1F = @REPLACE_EXPM1F@ +REPLACE_FABSL = @REPLACE_FABSL@ +REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOOR = @REPLACE_FLOOR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FMA = @REPLACE_FMA@ +REPLACE_FMAF = @REPLACE_FMAF@ +REPLACE_FMAL = @REPLACE_FMAL@ +REPLACE_FMOD = @REPLACE_FMOD@ +REPLACE_FMODF = @REPLACE_FMODF@ +REPLACE_FMODL = @REPLACE_FMODL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPF = @REPLACE_FREXPF@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FSTAT = @REPLACE_FSTAT@ +REPLACE_FSTATAT = @REPLACE_FSTATAT@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETPASS = @REPLACE_GETPASS@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_GMTIME = @REPLACE_GMTIME@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_HYPOT = @REPLACE_HYPOT@ +REPLACE_HYPOTF = @REPLACE_HYPOTF@ +REPLACE_HYPOTL = @REPLACE_HYPOTL@ +REPLACE_ILOGB = @REPLACE_ILOGB@ +REPLACE_ILOGBF = @REPLACE_ILOGBF@ +REPLACE_ILOGBL = @REPLACE_ILOGBL@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LOG = @REPLACE_LOG@ +REPLACE_LOG10 = @REPLACE_LOG10@ +REPLACE_LOG10F = @REPLACE_LOG10F@ +REPLACE_LOG10L = @REPLACE_LOG10L@ +REPLACE_LOG1P = @REPLACE_LOG1P@ +REPLACE_LOG1PF = @REPLACE_LOG1PF@ +REPLACE_LOG1PL = @REPLACE_LOG1PL@ +REPLACE_LOG2 = @REPLACE_LOG2@ +REPLACE_LOG2F = @REPLACE_LOG2F@ +REPLACE_LOG2L = @REPLACE_LOG2L@ +REPLACE_LOGB = @REPLACE_LOGB@ +REPLACE_LOGBF = @REPLACE_LOGBF@ +REPLACE_LOGBL = @REPLACE_LOGBL@ +REPLACE_LOGF = @REPLACE_LOGF@ +REPLACE_LOGL = @REPLACE_LOGL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKFIFO = @REPLACE_MKFIFO@ +REPLACE_MKNOD = @REPLACE_MKNOD@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_MKTIME = @REPLACE_MKTIME@ +REPLACE_MODF = @REPLACE_MODF@ +REPLACE_MODFF = @REPLACE_MODFF@ +REPLACE_MODFL = @REPLACE_MODFL@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_OPENAT = @REPLACE_OPENAT@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_QSORT_R = @REPLACE_QSORT_R@ +REPLACE_RAISE = @REPLACE_RAISE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_READLINKAT = @REPLACE_READLINKAT@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMAINDER = @REPLACE_REMAINDER@ +REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ +REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SINF = @REPLACE_SINF@ +REPLACE_SINHF = @REPLACE_SINHF@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_SQRTF = @REPLACE_SQRTF@ +REPLACE_SQRTL = @REPLACE_SQRTL@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRFTIME = @REPLACE_STRFTIME@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ +REPLACE_TANF = @REPLACE_TANF@ +REPLACE_TANHF = @REPLACE_TANHF@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TRUNC = @REPLACE_TRUNC@ +REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ +REPLACE_TRUNCF = @REPLACE_TRUNCF@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_TZSET = @REPLACE_TZSET@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SED = @SED@ +SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ +UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +USE_ACL = @USE_ACL@ +USE_NLS = @USE_NLS@ +UUIDLIBS = @UUIDLIBS@ +VERSION = @VERSION@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ +WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ +WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +crypt_support = @crypt_support@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +have_uuid = @have_uuid@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +lib_LIBRARIES = librec-a68.a +nodist_librec_a68_a_SOURCES = rec.c +BUILT_SOURCES = rec.c +usrlibdir = $(libdir) +usrlib_DATA = rec.m +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu algol68/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu algol68/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-libLIBRARIES: $(lib_LIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(INSTALL_DATA) $$list2 "$(DESTDIR)$(libdir)" || exit $$?; } + @$(POST_INSTALL) + @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + if test -f $$p; then \ + $(am__strip_dir) \ + echo " ( cd '$(DESTDIR)$(libdir)' && $(RANLIB) $$f )"; \ + ( cd "$(DESTDIR)$(libdir)" && $(RANLIB) $$f ) || exit $$?; \ + else :; fi; \ + done + +uninstall-libLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(libdir)'; $(am__uninstall_files_from_dir) + +clean-libLIBRARIES: + -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES) + +librec-a68.a: $(librec_a68_a_OBJECTS) $(librec_a68_a_DEPENDENCIES) $(EXTRA_librec_a68_a_DEPENDENCIES) + $(AM_V_at)-rm -f librec-a68.a + $(AM_V_AR)$(librec_a68_a_AR) librec-a68.a $(librec_a68_a_OBJECTS) $(librec_a68_a_LIBADD) + $(AM_V_at)$(RANLIB) librec-a68.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-usrlibDATA: $(usrlib_DATA) + @$(NORMAL_INSTALL) + @list='$(usrlib_DATA)'; test -n "$(usrlibdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(usrlibdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(usrlibdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(usrlibdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(usrlibdir)" || exit $$?; \ + done + +uninstall-usrlibDATA: + @$(NORMAL_UNINSTALL) + @list='$(usrlib_DATA)'; test -n "$(usrlibdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(usrlibdir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(usrlibdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libLIBRARIES clean-libtool clean-local \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-usrlibDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libLIBRARIES uninstall-usrlibDATA + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libLIBRARIES clean-libtool clean-local cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libLIBRARIES install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + install-usrlibDATA installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-libLIBRARIES uninstall-usrlibDATA + +.PRECIOUS: Makefile + + +rec.c: rec.a68 + $(CA68) -C -m librec-a68.a -d $(builddir) -M $(builddir) -I$(top_srcdir)/src -u AAAAGNU $< + +clean-local: + -rm -f $(builddir)/rec.[ocm] + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/bash/.deps/readrec.Plo b/devspec.en_US/project/recutils/bash/.deps/readrec.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/bash/.deps/readrec.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/bash/.deps/testrec.Plo b/devspec.en_US/project/recutils/bash/.deps/testrec.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/bash/.deps/testrec.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/bash/Makefile b/devspec.en_US/project/recutils/bash/Makefile new file mode 100755 index 0000000..53e9da3 --- /dev/null +++ b/devspec.en_US/project/recutils/bash/Makefile @@ -0,0 +1,1947 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# bash/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# bash/Makefile.am +# GNU recutils + +# Copyright (C) 2013-2018 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/recutils +pkgincludedir = $(includedir)/recutils +pkglibdir = $(libdir)/recutils +pkglibexecdir = $(libexecdir)/recutils +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +subdir = bash +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +#readrec_la_DEPENDENCIES = \ +# $(top_builddir)/src/librec.la +am__readrec_la_SOURCES_DIST = readrec.c +#am_readrec_la_OBJECTS = readrec.lo +readrec_la_OBJECTS = $(am_readrec_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +am__v_lt_1 = +readrec_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(readrec_la_LDFLAGS) $(LDFLAGS) -o $@ +#am_readrec_la_rpath = -rpath $(libdir) +#testrec_la_DEPENDENCIES = \ +# $(top_builddir)/src/librec.la +am__testrec_la_SOURCES_DIST = testrec.c +#am_testrec_la_OBJECTS = testrec.lo +testrec_la_OBJECTS = $(am_testrec_la_OBJECTS) +testrec_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(testrec_la_LDFLAGS) $(LDFLAGS) -o $@ +#am_testrec_la_rpath = -rpath $(libdir) +AM_V_P = $(am__v_P_$(V)) +am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I. -I$(top_builddir)/src +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(readrec_la_SOURCES) $(testrec_la_SOURCES) +DIST_SOURCES = $(am__readrec_la_SOURCES_DIST) \ + $(am__testrec_la_SOURCES_DIST) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing aclocal-1.15 +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = $${TAR-tar} +AM_DEFAULT_VERBOSITY = 1 +APPLE_UNIVERSAL_BUILD = 0 +AR = ar +ARFLAGS = cr +ASM_SYMBOL_PREFIX = "" +AUTOCONF = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoconf +AUTOHEADER = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoheader +AUTOMAKE = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing automake-1.15 +AWK = gawk +BASH_HEADERS = /usr/include/bash +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CA68 = +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CHECK_CFLAGS = +CHECK_LIBS = +CONFIG_INCLUDE = src/config.h +CPP = gcc -E +CPPFLAGS = +CURLLIBS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = false +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FGREP = /bin/grep -F +FLOAT_H = +FLOOR_LIBM = -lm +GETOPT_CDEFS_H = +GETOPT_H = +GETTEXT_MACRO_VERSION = 0.19 +GLIBC21 = yes +GLIB_CFLAGS = +GLIB_LIBS = +GMSGFMT = /usr/bin/msgfmt +GMSGFMT_015 = /usr/bin/msgfmt +GNULIB_ACOSF = 0 +GNULIB_ACOSL = 0 +GNULIB_ASINF = 0 +GNULIB_ASINL = 0 +GNULIB_ATAN2F = 0 +GNULIB_ATANF = 0 +GNULIB_ATANL = 0 +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CANONICALIZE_FILE_NAME = 1 +GNULIB_CBRT = 0 +GNULIB_CBRTF = 0 +GNULIB_CBRTL = 0 +GNULIB_CEIL = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHDIR = 1 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 1 +GNULIB_COPYSIGN = 0 +GNULIB_COPYSIGNF = 0 +GNULIB_COPYSIGNL = 0 +GNULIB_COSF = 0 +GNULIB_COSHF = 0 +GNULIB_COSL = 0 +GNULIB_CTIME = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP = 0 +GNULIB_DUP2 = 1 +GNULIB_DUP3 = 0 +GNULIB_DUPLOCALE = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 1 +GNULIB_EXP2 = 0 +GNULIB_EXP2F = 0 +GNULIB_EXP2L = 0 +GNULIB_EXPF = 0 +GNULIB_EXPL = 0 +GNULIB_EXPLICIT_BZERO = 0 +GNULIB_EXPM1 = 0 +GNULIB_EXPM1F = 0 +GNULIB_EXPM1L = 0 +GNULIB_FABSF = 0 +GNULIB_FABSL = 0 +GNULIB_FACCESSAT = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCHMODAT = 0 +GNULIB_FCHOWNAT = 0 +GNULIB_FCLOSE = 0 +GNULIB_FCNTL = 1 +GNULIB_FDATASYNC = 0 +GNULIB_FDOPEN = 0 +GNULIB_FFLUSH = 0 +GNULIB_FFS = 0 +GNULIB_FFSL = 0 +GNULIB_FFSLL = 0 +GNULIB_FGETC = 1 +GNULIB_FGETS = 1 +GNULIB_FLOCK = 1 +GNULIB_FLOOR = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FMA = 0 +GNULIB_FMAF = 0 +GNULIB_FMAL = 0 +GNULIB_FMOD = 0 +GNULIB_FMODF = 0 +GNULIB_FMODL = 0 +GNULIB_FOPEN = 0 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 1 +GNULIB_FPURGE = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREAD = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPF = 0 +GNULIB_FREXPL = 1 +GNULIB_FSCANF = 1 +GNULIB_FSEEK = 1 +GNULIB_FSEEKO = 1 +GNULIB_FSTAT = 1 +GNULIB_FSTATAT = 0 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 1 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FUTIMENS = 0 +GNULIB_FWRITE = 1 +GNULIB_GETC = 1 +GNULIB_GETCHAR = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 1 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETGROUPS = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 1 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETPASS = 1 +GNULIB_GETSUBOPT = 0 +GNULIB_GETTIMEOFDAY = 1 +GNULIB_GETUSERSHELL = 0 +GNULIB_GL_UNISTD_H_GETOPT = +GNULIB_GRANTPT = 0 +GNULIB_GROUP_MEMBER = 1 +GNULIB_HYPOT = 0 +GNULIB_HYPOTF = 0 +GNULIB_HYPOTL = 0 +GNULIB_ILOGB = 0 +GNULIB_ILOGBF = 0 +GNULIB_ILOGBL = 0 +GNULIB_IMAXABS = 0 +GNULIB_IMAXDIV = 0 +GNULIB_ISATTY = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_ISWBLANK = 0 +GNULIB_ISWCTYPE = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPF = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LINKAT = 0 +GNULIB_LOCALECONV = 1 +GNULIB_LOCALENAME = 0 +GNULIB_LOCALTIME = 0 +GNULIB_LOG = 0 +GNULIB_LOG10 = 0 +GNULIB_LOG10F = 0 +GNULIB_LOG10L = 0 +GNULIB_LOG1P = 0 +GNULIB_LOG1PF = 0 +GNULIB_LOG1PL = 0 +GNULIB_LOG2 = 0 +GNULIB_LOG2F = 0 +GNULIB_LOG2L = 0 +GNULIB_LOGB = 0 +GNULIB_LOGBF = 0 +GNULIB_LOGBL = 0 +GNULIB_LOGF = 0 +GNULIB_LOGL = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MBRLEN = 1 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MBTOWC = 1 +GNULIB_MEMCHR = 1 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDIRAT = 0 +GNULIB_MKDTEMP = 0 +GNULIB_MKFIFO = 0 +GNULIB_MKFIFOAT = 0 +GNULIB_MKNOD = 0 +GNULIB_MKNODAT = 0 +GNULIB_MKOSTEMP = 1 +GNULIB_MKOSTEMPS = 0 +GNULIB_MKSTEMP = 1 +GNULIB_MKSTEMPS = 0 +GNULIB_MKTIME = 1 +GNULIB_MODF = 0 +GNULIB_MODFF = 0 +GNULIB_MODFL = 0 +GNULIB_NANOSLEEP = 0 +GNULIB_NL_LANGINFO = 1 +GNULIB_NONBLOCKING = 0 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_OPENAT = 0 +GNULIB_OVERRIDES_STRUCT_STAT = 0 +GNULIB_OVERRIDES_WINT_T = 0 +GNULIB_PCLOSE = 0 +GNULIB_PERROR = 0 +GNULIB_PIPE = 0 +GNULIB_PIPE2 = 0 +GNULIB_POPEN = 0 +GNULIB_POSIX_OPENPT = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_POWF = 0 +GNULIB_PREAD = 0 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 1 +GNULIB_PTHREAD_SIGMASK = 0 +GNULIB_PTSNAME = 0 +GNULIB_PTSNAME_R = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_PWRITE = 0 +GNULIB_QSORT_R = 0 +GNULIB_RAISE = 1 +GNULIB_RANDOM = 0 +GNULIB_RANDOM_R = 1 +GNULIB_RAWMEMCHR = 1 +GNULIB_READ = 0 +GNULIB_READLINK = 1 +GNULIB_READLINKAT = 0 +GNULIB_REALLOCARRAY = 0 +GNULIB_REALLOC_POSIX = 1 +GNULIB_REALPATH = 1 +GNULIB_REMAINDER = 0 +GNULIB_REMAINDERF = 0 +GNULIB_REMAINDERL = 0 +GNULIB_REMOVE = 0 +GNULIB_RENAME = 1 +GNULIB_RENAMEAT = 0 +GNULIB_RINT = 0 +GNULIB_RINTF = 0 +GNULIB_RINTL = 0 +GNULIB_RMDIR = 1 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SCANF = 1 +GNULIB_SECURE_GETENV = 1 +GNULIB_SETENV = 1 +GNULIB_SETHOSTNAME = 0 +GNULIB_SETLOCALE = 0 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SINF = 0 +GNULIB_SINHF = 0 +GNULIB_SINL = 0 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 0 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_SQRTF = 0 +GNULIB_SQRTL = 0 +GNULIB_STAT = 1 +GNULIB_STDIO_H_NONBLOCKING = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 1 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 1 +GNULIB_STRERROR = 1 +GNULIB_STRERROR_R = 0 +GNULIB_STRFTIME = 0 +GNULIB_STRNCAT = 0 +GNULIB_STRNDUP = 0 +GNULIB_STRNLEN = 0 +GNULIB_STRPBRK = 0 +GNULIB_STRPTIME = 0 +GNULIB_STRSEP = 1 +GNULIB_STRSIGNAL = 0 +GNULIB_STRSTR = 0 +GNULIB_STRTOD = 0 +GNULIB_STRTOIMAX = 0 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRTOUMAX = 0 +GNULIB_STRVERSCMP = 1 +GNULIB_SYMLINK = 0 +GNULIB_SYMLINKAT = 0 +GNULIB_SYSTEM_POSIX = 0 +GNULIB_TANF = 0 +GNULIB_TANHF = 0 +GNULIB_TANL = 0 +GNULIB_TIMEGM = 1 +GNULIB_TIME_R = 1 +GNULIB_TIME_RZ = 1 +GNULIB_TMPFILE = 0 +GNULIB_TOWCTRANS = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCATE = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_TTYNAME_R = 0 +GNULIB_TZSET = 1 +GNULIB_UNISTD_H_NONBLOCKING = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNLINK = 0 +GNULIB_UNLINKAT = 0 +GNULIB_UNLOCKPT = 0 +GNULIB_UNSETENV = 1 +GNULIB_USLEEP = 0 +GNULIB_UTIMENSAT = 0 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 1 +GNULIB_VFSCANF = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSCANF = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WAITPID = 1 +GNULIB_WCPCPY = 0 +GNULIB_WCPNCPY = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSCASECMP = 0 +GNULIB_WCSCAT = 0 +GNULIB_WCSCHR = 0 +GNULIB_WCSCMP = 0 +GNULIB_WCSCOLL = 0 +GNULIB_WCSCPY = 0 +GNULIB_WCSCSPN = 0 +GNULIB_WCSDUP = 0 +GNULIB_WCSFTIME = 0 +GNULIB_WCSLEN = 0 +GNULIB_WCSNCASECMP = 0 +GNULIB_WCSNCAT = 0 +GNULIB_WCSNCMP = 0 +GNULIB_WCSNCPY = 0 +GNULIB_WCSNLEN = 0 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSPBRK = 0 +GNULIB_WCSRCHR = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCSSPN = 0 +GNULIB_WCSSTR = 0 +GNULIB_WCSTOK = 0 +GNULIB_WCSWIDTH = 0 +GNULIB_WCSXFRM = 0 +GNULIB_WCTOB = 1 +GNULIB_WCTOMB = 1 +GNULIB_WCTRANS = 0 +GNULIB_WCTYPE = 0 +GNULIB_WCWIDTH = 0 +GNULIB_WMEMCHR = 0 +GNULIB_WMEMCMP = 0 +GNULIB_WMEMCPY = 0 +GNULIB_WMEMMOVE = 0 +GNULIB_WMEMSET = 0 +GNULIB_WRITE = 0 +GNULIB__EXIT = 0 +GREP = /bin/grep +HAVE_ACOSF = 1 +HAVE_ACOSL = 1 +HAVE_ASINF = 1 +HAVE_ASINL = 1 +HAVE_ATAN2F = 1 +HAVE_ATANF = 1 +HAVE_ATANL = 1 +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_C99_STDINT_H = 1 +HAVE_CANONICALIZE_FILE_NAME = 1 +HAVE_CBRT = 1 +HAVE_CBRTF = 1 +HAVE_CBRTL = 1 +HAVE_CHOWN = 1 +HAVE_COPYSIGN = 1 +HAVE_COPYSIGNL = 1 +HAVE_COSF = 1 +HAVE_COSHF = 1 +HAVE_COSL = 1 +HAVE_CRTDEFS_H = 0 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_CBRTF = 1 +HAVE_DECL_CBRTL = 1 +HAVE_DECL_CEILF = 1 +HAVE_DECL_CEILL = 1 +HAVE_DECL_COPYSIGNF = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXP2 = 1 +HAVE_DECL_EXP2F = 1 +HAVE_DECL_EXP2L = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_EXPM1L = 1 +HAVE_DECL_FCHDIR = 1 +HAVE_DECL_FDATASYNC = 1 +HAVE_DECL_FLOORF = 1 +HAVE_DECL_FLOORL = 1 +HAVE_DECL_FPURGE = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_FSEEKO = 1 +HAVE_DECL_FTELLO = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETDOMAINNAME = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_GETPAGESIZE = 1 +HAVE_DECL_GETUSERSHELL = 1 +HAVE_DECL_IMAXABS = 1 +HAVE_DECL_IMAXDIV = 1 +HAVE_DECL_INITSTATE = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOCALTIME_R = 1 +HAVE_DECL_LOG10L = 1 +HAVE_DECL_LOG2 = 1 +HAVE_DECL_LOG2F = 1 +HAVE_DECL_LOG2L = 1 +HAVE_DECL_LOGB = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_REMAINDER = 1 +HAVE_DECL_REMAINDERL = 1 +HAVE_DECL_RINTF = 1 +HAVE_DECL_ROUND = 1 +HAVE_DECL_ROUNDF = 1 +HAVE_DECL_ROUNDL = 1 +HAVE_DECL_SETENV = 1 +HAVE_DECL_SETHOSTNAME = 1 +HAVE_DECL_SETSTATE = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR_R = 1 +HAVE_DECL_STRNCASECMP = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOIMAX = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_STRTOUMAX = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCATE = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_TRUNCL = 1 +HAVE_DECL_TTYNAME_R = 1 +HAVE_DECL_UNSETENV = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_DUP3 = 1 +HAVE_DUPLOCALE = 1 +HAVE_EUIDACCESS = 1 +HAVE_EXPF = 1 +HAVE_EXPL = 1 +HAVE_EXPLICIT_BZERO = 1 +HAVE_EXPM1 = 1 +HAVE_EXPM1F = 1 +HAVE_FABSF = 1 +HAVE_FABSL = 1 +HAVE_FACCESSAT = 1 +HAVE_FCHDIR = 1 +HAVE_FCHMODAT = 1 +HAVE_FCHOWNAT = 1 +HAVE_FCNTL = 1 +HAVE_FDATASYNC = 1 +HAVE_FEATURES_H = 1 +HAVE_FFS = 1 +HAVE_FFSL = 1 +HAVE_FFSLL = 1 +HAVE_FLOCK = 1 +HAVE_FMA = 1 +HAVE_FMAF = 1 +HAVE_FMAL = 1 +HAVE_FMODF = 1 +HAVE_FMODL = 1 +HAVE_FREELOCALE = 1 +HAVE_FREXPF = 1 +HAVE_FSEEKO = 1 +HAVE_FSTATAT = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_FUTIMENS = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETGROUPS = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETLOGIN = 1 +HAVE_GETOPT_H = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETPASS = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETTIMEOFDAY = 1 +HAVE_GRANTPT = 1 +HAVE_GROUP_MEMBER = 1 +HAVE_HYPOTF = 1 +HAVE_HYPOTL = 1 +HAVE_ILOGB = 1 +HAVE_ILOGBF = 1 +HAVE_ILOGBL = 1 +HAVE_IMAXDIV_T = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWBLANK = 1 +HAVE_ISWCNTRL = 1 +HAVE_LANGINFO_ALTMON = 0 +HAVE_LANGINFO_CODESET = 1 +HAVE_LANGINFO_ERA = 1 +HAVE_LANGINFO_H = 1 +HAVE_LANGINFO_T_FMT_AMPM = 1 +HAVE_LANGINFO_YESEXPR = 1 +HAVE_LCHMOD = 1 +HAVE_LCHOWN = 1 +HAVE_LDEXPF = 1 +HAVE_LIBGCRYPT = no +HAVE_LINK = 1 +HAVE_LINKAT = 1 +HAVE_LOG10F = 1 +HAVE_LOG10L = 1 +HAVE_LOG1P = 1 +HAVE_LOG1PF = 1 +HAVE_LOG1PL = 1 +HAVE_LOGBF = 1 +HAVE_LOGBL = 1 +HAVE_LOGF = 1 +HAVE_LOGL = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MAX_ALIGN_T = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSLEN = 0 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMCHR = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDIRAT = 1 +HAVE_MKDTEMP = 1 +HAVE_MKFIFO = 1 +HAVE_MKFIFOAT = 1 +HAVE_MKNOD = 1 +HAVE_MKNODAT = 1 +HAVE_MKOSTEMP = 1 +HAVE_MKOSTEMPS = 1 +HAVE_MKSTEMP = 1 +HAVE_MKSTEMPS = 1 +HAVE_MODFF = 1 +HAVE_MODFL = 1 +HAVE_MSVC_INVALID_PARAMETER_HANDLER = 0 +HAVE_NANOSLEEP = 1 +HAVE_NEWLOCALE = 1 +HAVE_NL_LANGINFO = 1 +HAVE_OPENAT = 1 +HAVE_OS_H = 0 +HAVE_PCLOSE = 1 +HAVE_PIPE = 1 +HAVE_PIPE2 = 1 +HAVE_POPEN = 1 +HAVE_POSIX_OPENPT = 1 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_POSIX_SPAWNATTR_T = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = 1 +HAVE_POWF = 1 +HAVE_PREAD = 1 +HAVE_PTHREAD_SIGMASK = 1 +HAVE_PTSNAME = 1 +HAVE_PTSNAME_R = 1 +HAVE_PWRITE = 1 +HAVE_QSORT_R = 1 +HAVE_RAISE = 1 +HAVE_RANDOM = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_READLINKAT = 1 +HAVE_REALLOCARRAY = 1 +HAVE_REALPATH = 1 +HAVE_REMAINDER = 1 +HAVE_REMAINDERF = 1 +HAVE_RENAMEAT = 1 +HAVE_RINT = 1 +HAVE_RINTL = 1 +HAVE_RPMATCH = 1 +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0 +HAVE_SCHED_H = +HAVE_SECURE_GETENV = 1 +HAVE_SETENV = 1 +HAVE_SETHOSTNAME = 1 +HAVE_SIGACTION = 1 +HAVE_SIGHANDLER_T = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SINF = 1 +HAVE_SINHF = 1 +HAVE_SINL = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_SQRTF = 1 +HAVE_SQRTL = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASECMP = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRINGS_H = 1 +HAVE_STRPBRK = 1 +HAVE_STRPTIME = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYMLINK = 1 +HAVE_SYMLINKAT = 1 +HAVE_SYS_BITYPES_H = 0 +HAVE_SYS_CDEFS_H = +HAVE_SYS_FILE_H = 1 +HAVE_SYS_INTTYPES_H = 0 +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TANF = 1 +HAVE_TANHF = 1 +HAVE_TANL = 1 +HAVE_TIMEGM = 1 +HAVE_TIMEZONE_T = 0 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_TZSET = 1 +HAVE_UNISTD_H = 1 +HAVE_UNLINKAT = 1 +HAVE_UNLOCKPT = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_USLEEP = 1 +HAVE_UTIMENSAT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCHAR_T = 1 +HAVE_WCPCPY = 1 +HAVE_WCPNCPY = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSCASECMP = 1 +HAVE_WCSCAT = 1 +HAVE_WCSCHR = 1 +HAVE_WCSCMP = 1 +HAVE_WCSCOLL = 1 +HAVE_WCSCPY = 1 +HAVE_WCSCSPN = 1 +HAVE_WCSDUP = 1 +HAVE_WCSFTIME = 1 +HAVE_WCSLEN = 1 +HAVE_WCSNCASECMP = 1 +HAVE_WCSNCAT = 1 +HAVE_WCSNCMP = 1 +HAVE_WCSNCPY = 1 +HAVE_WCSNLEN = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSPBRK = 1 +HAVE_WCSRCHR = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCSSPN = 1 +HAVE_WCSSTR = 1 +HAVE_WCSTOK = 1 +HAVE_WCSWIDTH = 1 +HAVE_WCSXFRM = 1 +HAVE_WCTRANS_T = 1 +HAVE_WCTYPE_H = 1 +HAVE_WCTYPE_T = 1 +HAVE_WINSOCK2_H = 0 +HAVE_WINT_T = 1 +HAVE_WMEMCHR = 1 +HAVE_WMEMCMP = 1 +HAVE_WMEMCPY = 1 +HAVE_WMEMMOVE = 1 +HAVE_WMEMSET = 1 +HAVE_XLOCALE_H = 1 +HAVE__BOOL = 1 +HAVE__EXIT = 1 +HELP2MAN = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing help2man +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +INT32_MAX_LT_INTMAX_MAX = 1 +INT64_MAX_EQ_LONG_MAX = 0 +INTLLIBS = +INTL_MACOSX_LIBS = +LD = /usr/bin/ld +LDFLAGS = +LEX = flex +LEXLIB = -lfl +LEX_OUTPUT_ROOT = lex.yy +LIBGCRYPT = +LIBGCRYPT_PREFIX = +LIBICONV = -liconv +LIBINTL = +LIBMULTITHREAD = -pthread -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBREADLINE = +LIBS = +LIBTHREAD = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIB_ACL = +LIB_CLOCK_GETTIME = +LIB_EACCESS = +LIB_POSIX_SPAWN = +LIB_SELINUX = +LIMITS_H = limits.h +LIPO = +LN_S = ln -s +LOCALCHARSET_TESTS_ENVIRONMENT = +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTALLOCA = +LTLIBGCRYPT = +LTLIBICONV = -liconv +LTLIBINTL = +LTLIBMULTITHREAD = -pthread +LTLIBOBJS = +LTLIBPTH = +LTLIBREADLINE = +LTLIBTHREAD = +LT_SYS_LIBRARY_PATH = +MAKEINFO = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing makeinfo +MANIFEST_TOOL = : +MDBLIBS = +MDB_DATETIME = +MKDIR_P = /bin/mkdir -p +MSGFMT = /usr/bin/msgfmt +MSGFMT_015 = /usr/bin/msgfmt +MSGMERGE = /usr/bin/msgmerge +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = <fcntl.h> +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = <getopt.h> +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = <inttypes.h> +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = <langinfo.h> +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = <limits.h> +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = <locale.h> +NEXT_AS_FIRST_DIRECTIVE_MATH_H = <math.h> +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = <signal.h> +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = <spawn.h> +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = <stdint.h> +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = <stdio.h> +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = <stdlib.h> +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = <strings.h> +NEXT_AS_FIRST_DIRECTIVE_STRING_H = <string.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = <sys/file.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = <sys/stat.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = <sys/time.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = <sys/types.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = <sys/wait.h> +NEXT_AS_FIRST_DIRECTIVE_TIME_H = <time.h> +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = <unistd.h> +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = <wchar.h> +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = <wctype.h> +NEXT_ERRNO_H = +NEXT_FCNTL_H = <fcntl.h> +NEXT_FLOAT_H = +NEXT_GETOPT_H = <getopt.h> +NEXT_INTTYPES_H = <inttypes.h> +NEXT_LANGINFO_H = <langinfo.h> +NEXT_LIMITS_H = <limits.h> +NEXT_LOCALE_H = <locale.h> +NEXT_MATH_H = <math.h> +NEXT_SCHED_H = +NEXT_SELINUX_SELINUX_H = +NEXT_SIGNAL_H = <signal.h> +NEXT_SPAWN_H = <spawn.h> +NEXT_STDARG_H = <stdarg.h> +NEXT_STDDEF_H = +NEXT_STDINT_H = <stdint.h> +NEXT_STDIO_H = <stdio.h> +NEXT_STDLIB_H = <stdlib.h> +NEXT_STRINGS_H = <strings.h> +NEXT_STRING_H = <string.h> +NEXT_SYS_FILE_H = <sys/file.h> +NEXT_SYS_STAT_H = <sys/stat.h> +NEXT_SYS_TIME_H = <sys/time.h> +NEXT_SYS_TYPES_H = <sys/types.h> +NEXT_SYS_WAIT_H = <sys/wait.h> +NEXT_TIME_H = <time.h> +NEXT_UNISTD_H = <unistd.h> +NEXT_WCHAR_H = <wchar.h> +NEXT_WCTYPE_H = <wctype.h> +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = recutils +PACKAGE_BUGREPORT = bug-recutils@gnu.org +PACKAGE_NAME = GNU recutils +PACKAGE_STRING = GNU recutils 1.8 +PACKAGE_TARNAME = recutils +PACKAGE_URL = http://www.gnu.org/software/recutils/ +PACKAGE_VERSION = 1.8 +PATH_SEPARATOR = : +PKG_CONFIG = /usr/bin/pkg-config +PKG_CONFIG_LIBDIR = +PKG_CONFIG_PATH = +POSUB = po +PRAGMA_COLUMNS = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PRIPTR_PREFIX = "l" +PRI_MACROS_BROKEN = 0 +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = 0 +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_ACOSF = 0 +REPLACE_ASINF = 0 +REPLACE_ATAN2F = 0 +REPLACE_ATANF = 0 +REPLACE_BTOWC = 0 +REPLACE_CALLOC = 0 +REPLACE_CANONICALIZE_FILE_NAME = 0 +REPLACE_CBRTF = 0 +REPLACE_CBRTL = 0 +REPLACE_CEIL = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_COSF = 0 +REPLACE_COSHF = 0 +REPLACE_CTIME = GNULIB_PORTCHECK +REPLACE_DPRINTF = 0 +REPLACE_DUP = 0 +REPLACE_DUP2 = 0 +REPLACE_DUPLOCALE = 0 +REPLACE_EXP2 = 0 +REPLACE_EXP2L = 0 +REPLACE_EXPF = 0 +REPLACE_EXPM1 = 0 +REPLACE_EXPM1F = 0 +REPLACE_FABSL = 0 +REPLACE_FACCESSAT = 0 +REPLACE_FCHOWNAT = 0 +REPLACE_FCLOSE = 0 +REPLACE_FCNTL = 1 +REPLACE_FDOPEN = 0 +REPLACE_FFLUSH = 0 +REPLACE_FLOOR = 0 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FMA = 0 +REPLACE_FMAF = 0 +REPLACE_FMAL = 0 +REPLACE_FMOD = 0 +REPLACE_FMODF = 0 +REPLACE_FMODL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 1 +REPLACE_FPURGE = 0 +REPLACE_FREELOCALE = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPF = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 0 +REPLACE_FSTAT = 0 +REPLACE_FSTATAT = 0 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_FTRUNCATE = 0 +REPLACE_FUTIMENS = 0 +REPLACE_GETCWD = 0 +REPLACE_GETDELIM = 0 +REPLACE_GETDOMAINNAME = 0 +REPLACE_GETDTABLESIZE = 0 +REPLACE_GETGROUPS = 0 +REPLACE_GETLINE = 0 +REPLACE_GETLOGIN_R = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETPASS = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_GMTIME = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_HYPOT = 0 +REPLACE_HYPOTF = 0 +REPLACE_HYPOTL = 0 +REPLACE_ILOGB = 0 +REPLACE_ILOGBF = 0 +REPLACE_ILOGBL = 0 +REPLACE_ISATTY = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWBLANK = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_ITOLD = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LINK = 0 +REPLACE_LINKAT = 0 +REPLACE_LOCALECONV = 0 +REPLACE_LOCALTIME = 0 +REPLACE_LOCALTIME_R = 0 +REPLACE_LOG = 0 +REPLACE_LOG10 = 0 +REPLACE_LOG10F = 0 +REPLACE_LOG10L = 0 +REPLACE_LOG1P = 0 +REPLACE_LOG1PF = 0 +REPLACE_LOG1PL = 0 +REPLACE_LOG2 = 0 +REPLACE_LOG2F = 0 +REPLACE_LOG2L = 0 +REPLACE_LOGB = 0 +REPLACE_LOGBF = 0 +REPLACE_LOGBL = 0 +REPLACE_LOGF = 0 +REPLACE_LOGL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MALLOC = 0 +REPLACE_MBRLEN = 1 +REPLACE_MBRTOWC = 1 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MBTOWC = 0 +REPLACE_MEMCHR = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKFIFO = 0 +REPLACE_MKNOD = 0 +REPLACE_MKSTEMP = 0 +REPLACE_MKTIME = 0 +REPLACE_MODF = 0 +REPLACE_MODFF = 0 +REPLACE_MODFL = 0 +REPLACE_NAN = 0 +REPLACE_NANOSLEEP = GNULIB_PORTCHECK +REPLACE_NEWLOCALE = 0 +REPLACE_NL_LANGINFO = 1 +REPLACE_NULL = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_OPENAT = 0 +REPLACE_PERROR = 0 +REPLACE_POPEN = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 0 +REPLACE_PREAD = 0 +REPLACE_PRINTF = 1 +REPLACE_PTHREAD_SIGMASK = 0 +REPLACE_PTSNAME = 0 +REPLACE_PTSNAME_R = 0 +REPLACE_PUTENV = 0 +REPLACE_PWRITE = 0 +REPLACE_QSORT_R = 0 +REPLACE_RAISE = 0 +REPLACE_RANDOM_R = 0 +REPLACE_READ = 0 +REPLACE_READLINK = 0 +REPLACE_READLINKAT = 0 +REPLACE_REALLOC = 0 +REPLACE_REALPATH = 0 +REPLACE_REMAINDER = 0 +REPLACE_REMAINDERF = 0 +REPLACE_REMAINDERL = 0 +REPLACE_REMOVE = 0 +REPLACE_RENAME = 0 +REPLACE_RENAMEAT = 0 +REPLACE_RMDIR = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SETENV = 0 +REPLACE_SETLOCALE = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SINF = 0 +REPLACE_SINHF = 0 +REPLACE_SLEEP = 0 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_SQRTF = 0 +REPLACE_SQRTL = 0 +REPLACE_STAT = 0 +REPLACE_STDIO_READ_FUNCS = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STPNCPY = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRCHRNUL = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRERROR_R = 0 +REPLACE_STRFTIME = GNULIB_PORTCHECK +REPLACE_STRNCAT = 0 +REPLACE_STRNDUP = 0 +REPLACE_STRNLEN = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 0 +REPLACE_STRTOD = 0 +REPLACE_STRTOIMAX = 0 +REPLACE_STRTOK_R = 0 +REPLACE_STRTOUMAX = 0 +REPLACE_STRUCT_LCONV = 0 +REPLACE_STRUCT_TIMEVAL = 0 +REPLACE_SYMLINK = 0 +REPLACE_SYMLINKAT = 0 +REPLACE_TANF = 0 +REPLACE_TANHF = 0 +REPLACE_TIMEGM = 0 +REPLACE_TMPFILE = 0 +REPLACE_TOWLOWER = 0 +REPLACE_TRUNC = 0 +REPLACE_TRUNCATE = 0 +REPLACE_TRUNCF = 0 +REPLACE_TRUNCL = 0 +REPLACE_TTYNAME_R = 0 +REPLACE_TZSET = 0 +REPLACE_UNLINK = 0 +REPLACE_UNLINKAT = 0 +REPLACE_UNSETENV = 0 +REPLACE_USLEEP = 0 +REPLACE_UTIMENSAT = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 1 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSFTIME = 0 +REPLACE_WCSNRTOMBS = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCSWIDTH = 0 +REPLACE_WCTOB = 0 +REPLACE_WCTOMB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SED = /bin/sed +SELINUX_CONTEXT_H = selinux/context.h +SET_MAKE = +SHELL = /bin/sh +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +STDARG_H = +STDBOOL_H = +STDDEF_H = +STDINT_H = stdint.h +STRIP = strip +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = 0 +TIME_H_DEFINES_STRUCT_TIMESPEC = 1 +UINT32_MAX_LT_UINTMAX_MAX = 1 +UINT64_MAX_EQ_ULONG_MAX = 0 +UNDEFINE_STRTOK_R = 0 +UNISTD_H_DEFINES_STRUCT_TIMESPEC = 0 +UNISTD_H_HAVE_WINSOCK2_H = 0 +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = 0 +USE_ACL = 0 +USE_NLS = yes +UUIDLIBS = +VERSION = 1.8 +WCHAR_T_SUFFIX = +WINDOWS_64_BIT_OFF_T = 0 +WINDOWS_64_BIT_ST_SIZE = 0 +WINDOWS_STAT_INODES = 0 +WINDOWS_STAT_TIMESPEC = 0 +WINT_T_SUFFIX = +XGETTEXT = /usr/bin/xgettext +XGETTEXT_015 = /usr/bin/xgettext +XGETTEXT_EXTRA_OPTIONS = --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format +YACC = bison -o y.tab.c +YFLAGS = +abs_builddir = /mnt/lfs/build/recutils/recutils-1.8/bash +abs_srcdir = /mnt/lfs/build/recutils/recutils-1.8/bash +abs_top_builddir = /mnt/lfs/build/recutils/recutils-1.8 +abs_top_srcdir = /mnt/lfs/build/recutils/recutils-1.8 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +builddir = . +crypt_support = no +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +gl_LIBOBJS = asnprintf.o asprintf.o fcntl.o fprintf.o fseterr.o localtime-buffer.o mbrlen.o mbrtowc.o mktime.o nl_langinfo.o obstack.o printf.o printf-args.o printf-parse.o readline.o regex.o time_rz.o vasnprintf.o vasprintf.o vfprintf.o +gl_LTLIBOBJS = asnprintf.lo asprintf.lo fcntl.lo fprintf.lo fseterr.lo localtime-buffer.lo mbrlen.lo mbrtowc.lo mktime.lo nl_langinfo.lo obstack.lo printf.lo printf-args.lo printf-parse.lo readline.lo regex.lo time_rz.lo vasnprintf.lo vasprintf.lo vfprintf.lo +gltests_LIBOBJS = +gltests_LTLIBOBJS = +gltests_WITNESS = IN_RECUTILS_GNULIB_TESTS +have_uuid = no +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = $(MKDIR_P) +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +runstatedir = ${localstatedir}/run +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +#COMMON_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib \ +# -I$(top_srcdir)/src -DHAVE_CONFIG_H \ +# -I$(BASH_HEADERS) -I$(BASH_HEADERS)/lib -I$(BASH_HEADERS)/builtins \ +# -I$(BASH_HEADERS)/include + +#lib_LTLIBRARIES = readrec.la testrec.la +#AM_CPPFLAGS = $(COMMON_CPPFLAGS) +#readrec_la_LDFLAGS = -module +#readrec_la_LIBADD = $(top_builddir)/src/librec.la +#readrec_la_SOURCES = readrec.c +#testrec_la_LDFLAGS = -module +#testrec_la_LIBADD = $(top_builddir)/src/librec.la +#testrec_la_SOURCES = testrec.c +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bash/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu bash/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +readrec.la: $(readrec_la_OBJECTS) $(readrec_la_DEPENDENCIES) $(EXTRA_readrec_la_DEPENDENCIES) + $(AM_V_CCLD)$(readrec_la_LINK) $(am_readrec_la_rpath) $(readrec_la_OBJECTS) $(readrec_la_LIBADD) $(LIBS) + +testrec.la: $(testrec_la_OBJECTS) $(testrec_la_DEPENDENCIES) $(EXTRA_testrec_la_DEPENDENCIES) + $(AM_V_CCLD)$(testrec_la_LINK) $(am_testrec_la_rpath) $(testrec_la_OBJECTS) $(testrec_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/readrec.Plo +include ./$(DEPDIR)/testrec.Plo + +.c.o: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< + +.c.obj: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ + $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Plo +# $(AM_V_CC)source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(libdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libLTLIBRARIES install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES + +.PRECIOUS: Makefile + + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/bash/Makefile.am b/devspec.en_US/project/recutils/bash/Makefile.am new file mode 100755 index 0000000..c9bdb97 --- /dev/null +++ b/devspec.en_US/project/recutils/bash/Makefile.am @@ -0,0 +1,40 @@ +# bash/Makefile.am +# GNU recutils + +# Copyright (C) 2013-2018 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +if BASH_BUILTINS + +COMMON_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib \ + -I$(top_srcdir)/src -DHAVE_CONFIG_H \ + -I$(BASH_HEADERS) -I$(BASH_HEADERS)/lib -I$(BASH_HEADERS)/builtins \ + -I$(BASH_HEADERS)/include + +lib_LTLIBRARIES = readrec.la testrec.la + +AM_CPPFLAGS = $(COMMON_CPPFLAGS) + +readrec_la_LDFLAGS = -module +readrec_la_LIBADD = $(top_builddir)/src/librec.la +readrec_la_SOURCES = readrec.c + +testrec_la_LDFLAGS = -module +testrec_la_LIBADD = $(top_builddir)/src/librec.la +testrec_la_SOURCES = testrec.c + +endif + +# End of Makefile.am diff --git a/devspec.en_US/project/recutils/bash/Makefile.in b/devspec.en_US/project/recutils/bash/Makefile.in new file mode 100755 index 0000000..737c569 --- /dev/null +++ b/devspec.en_US/project/recutils/bash/Makefile.in @@ -0,0 +1,1947 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# bash/Makefile.am +# GNU recutils + +# Copyright (C) 2013-2018 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = bash +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +@BASH_BUILTINS_TRUE@readrec_la_DEPENDENCIES = \ +@BASH_BUILTINS_TRUE@ $(top_builddir)/src/librec.la +am__readrec_la_SOURCES_DIST = readrec.c +@BASH_BUILTINS_TRUE@am_readrec_la_OBJECTS = readrec.lo +readrec_la_OBJECTS = $(am_readrec_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +readrec_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(readrec_la_LDFLAGS) $(LDFLAGS) -o $@ +@BASH_BUILTINS_TRUE@am_readrec_la_rpath = -rpath $(libdir) +@BASH_BUILTINS_TRUE@testrec_la_DEPENDENCIES = \ +@BASH_BUILTINS_TRUE@ $(top_builddir)/src/librec.la +am__testrec_la_SOURCES_DIST = testrec.c +@BASH_BUILTINS_TRUE@am_testrec_la_OBJECTS = testrec.lo +testrec_la_OBJECTS = $(am_testrec_la_OBJECTS) +testrec_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(testrec_la_LDFLAGS) $(LDFLAGS) -o $@ +@BASH_BUILTINS_TRUE@am_testrec_la_rpath = -rpath $(libdir) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(readrec_la_SOURCES) $(testrec_la_SOURCES) +DIST_SOURCES = $(am__readrec_la_SOURCES_DIST) \ + $(am__testrec_la_SOURCES_DIST) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BASH_HEADERS = @BASH_HEADERS@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CA68 = @CA68@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CURLLIBS = @CURLLIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +FLOOR_LIBM = @FLOOR_LIBM@ +GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ACOSF = @GNULIB_ACOSF@ +GNULIB_ACOSL = @GNULIB_ACOSL@ +GNULIB_ASINF = @GNULIB_ASINF@ +GNULIB_ASINL = @GNULIB_ASINL@ +GNULIB_ATAN2F = @GNULIB_ATAN2F@ +GNULIB_ATANF = @GNULIB_ATANF@ +GNULIB_ATANL = @GNULIB_ATANL@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CBRT = @GNULIB_CBRT@ +GNULIB_CBRTF = @GNULIB_CBRTF@ +GNULIB_CBRTL = @GNULIB_CBRTL@ +GNULIB_CEIL = @GNULIB_CEIL@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ +GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ +GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ +GNULIB_COSF = @GNULIB_COSF@ +GNULIB_COSHF = @GNULIB_COSHF@ +GNULIB_COSL = @GNULIB_COSL@ +GNULIB_CTIME = @GNULIB_CTIME@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_EXP2 = @GNULIB_EXP2@ +GNULIB_EXP2F = @GNULIB_EXP2F@ +GNULIB_EXP2L = @GNULIB_EXP2L@ +GNULIB_EXPF = @GNULIB_EXPF@ +GNULIB_EXPL = @GNULIB_EXPL@ +GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ +GNULIB_EXPM1 = @GNULIB_EXPM1@ +GNULIB_EXPM1F = @GNULIB_EXPM1F@ +GNULIB_EXPM1L = @GNULIB_EXPM1L@ +GNULIB_FABSF = @GNULIB_FABSF@ +GNULIB_FABSL = @GNULIB_FABSL@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FCNTL = @GNULIB_FCNTL@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FLOCK = @GNULIB_FLOCK@ +GNULIB_FLOOR = @GNULIB_FLOOR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FMA = @GNULIB_FMA@ +GNULIB_FMAF = @GNULIB_FMAF@ +GNULIB_FMAL = @GNULIB_FMAL@ +GNULIB_FMOD = @GNULIB_FMOD@ +GNULIB_FMODF = @GNULIB_FMODF@ +GNULIB_FMODL = @GNULIB_FMODL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPF = @GNULIB_FREXPF@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSTAT = @GNULIB_FSTAT@ +GNULIB_FSTATAT = @GNULIB_FSTATAT@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETPASS = @GNULIB_GETPASS@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_HYPOT = @GNULIB_HYPOT@ +GNULIB_HYPOTF = @GNULIB_HYPOTF@ +GNULIB_HYPOTL = @GNULIB_HYPOTL@ +GNULIB_ILOGB = @GNULIB_ILOGB@ +GNULIB_ILOGBF = @GNULIB_ILOGBF@ +GNULIB_ILOGBL = @GNULIB_ILOGBL@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPF = @GNULIB_LDEXPF@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LOCALENAME = @GNULIB_LOCALENAME@ +GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ +GNULIB_LOG = @GNULIB_LOG@ +GNULIB_LOG10 = @GNULIB_LOG10@ +GNULIB_LOG10F = @GNULIB_LOG10F@ +GNULIB_LOG10L = @GNULIB_LOG10L@ +GNULIB_LOG1P = @GNULIB_LOG1P@ +GNULIB_LOG1PF = @GNULIB_LOG1PF@ +GNULIB_LOG1PL = @GNULIB_LOG1PL@ +GNULIB_LOG2 = @GNULIB_LOG2@ +GNULIB_LOG2F = @GNULIB_LOG2F@ +GNULIB_LOG2L = @GNULIB_LOG2L@ +GNULIB_LOGB = @GNULIB_LOGB@ +GNULIB_LOGBF = @GNULIB_LOGBF@ +GNULIB_LOGBL = @GNULIB_LOGBL@ +GNULIB_LOGF = @GNULIB_LOGF@ +GNULIB_LOGL = @GNULIB_LOGL@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKFIFO = @GNULIB_MKFIFO@ +GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ +GNULIB_MKNOD = @GNULIB_MKNOD@ +GNULIB_MKNODAT = @GNULIB_MKNODAT@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_MKTIME = @GNULIB_MKTIME@ +GNULIB_MODF = @GNULIB_MODF@ +GNULIB_MODFF = @GNULIB_MODFF@ +GNULIB_MODFL = @GNULIB_MODFL@ +GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ +GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_POWF = @GNULIB_POWF@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_QSORT_R = @GNULIB_QSORT_R@ +GNULIB_RAISE = @GNULIB_RAISE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMAINDER = @GNULIB_REMAINDER@ +GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ +GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RINT = @GNULIB_RINT@ +GNULIB_RINTF = @GNULIB_RINTF@ +GNULIB_RINTL = @GNULIB_RINTL@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SINF = @GNULIB_SINF@ +GNULIB_SINHF = @GNULIB_SINHF@ +GNULIB_SINL = @GNULIB_SINL@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_SQRTF = @GNULIB_SQRTF@ +GNULIB_SQRTL = @GNULIB_SQRTL@ +GNULIB_STAT = @GNULIB_STAT@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRFTIME = @GNULIB_STRFTIME@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRPTIME = @GNULIB_STRPTIME@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TANF = @GNULIB_TANF@ +GNULIB_TANHF = @GNULIB_TANHF@ +GNULIB_TANL = @GNULIB_TANL@ +GNULIB_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_TZSET = @GNULIB_TZSET@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WAITPID = @GNULIB_WAITPID@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +HAVE_ACOSF = @HAVE_ACOSF@ +HAVE_ACOSL = @HAVE_ACOSL@ +HAVE_ASINF = @HAVE_ASINF@ +HAVE_ASINL = @HAVE_ASINL@ +HAVE_ATAN2F = @HAVE_ATAN2F@ +HAVE_ATANF = @HAVE_ATANF@ +HAVE_ATANL = @HAVE_ATANL@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CBRT = @HAVE_CBRT@ +HAVE_CBRTF = @HAVE_CBRTF@ +HAVE_CBRTL = @HAVE_CBRTL@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_COPYSIGN = @HAVE_COPYSIGN@ +HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ +HAVE_COSF = @HAVE_COSF@ +HAVE_COSHF = @HAVE_COSHF@ +HAVE_COSL = @HAVE_COSL@ +HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ +HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ +HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ +HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ +HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ +HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ +HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ +HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ +HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ +HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ +HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ +HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ +HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ +HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ +HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ +HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ +HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ +HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ +HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ +HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_EXPF = @HAVE_EXPF@ +HAVE_EXPL = @HAVE_EXPL@ +HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ +HAVE_EXPM1 = @HAVE_EXPM1@ +HAVE_EXPM1F = @HAVE_EXPM1F@ +HAVE_FABSF = @HAVE_FABSF@ +HAVE_FABSL = @HAVE_FABSL@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FLOCK = @HAVE_FLOCK@ +HAVE_FMA = @HAVE_FMA@ +HAVE_FMAF = @HAVE_FMAF@ +HAVE_FMAL = @HAVE_FMAL@ +HAVE_FMODF = @HAVE_FMODF@ +HAVE_FMODL = @HAVE_FMODL@ +HAVE_FREELOCALE = @HAVE_FREELOCALE@ +HAVE_FREXPF = @HAVE_FREXPF@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSTATAT = @HAVE_FSTATAT@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_FUTIMENS = @HAVE_FUTIMENS@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETPASS = @HAVE_GETPASS@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_HYPOTF = @HAVE_HYPOTF@ +HAVE_HYPOTL = @HAVE_HYPOTL@ +HAVE_ILOGB = @HAVE_ILOGB@ +HAVE_ILOGBF = @HAVE_ILOGBF@ +HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LDEXPF = @HAVE_LDEXPF@ +HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOG10F = @HAVE_LOG10F@ +HAVE_LOG10L = @HAVE_LOG10L@ +HAVE_LOG1P = @HAVE_LOG1P@ +HAVE_LOG1PF = @HAVE_LOG1PF@ +HAVE_LOG1PL = @HAVE_LOG1PL@ +HAVE_LOGBF = @HAVE_LOGBF@ +HAVE_LOGBL = @HAVE_LOGBL@ +HAVE_LOGF = @HAVE_LOGF@ +HAVE_LOGL = @HAVE_LOGL@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDIRAT = @HAVE_MKDIRAT@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKFIFO = @HAVE_MKFIFO@ +HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ +HAVE_MKNOD = @HAVE_MKNOD@ +HAVE_MKNODAT = @HAVE_MKNODAT@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MODFF = @HAVE_MODFF@ +HAVE_MODFL = @HAVE_MODFL@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ +HAVE_POWF = @HAVE_POWF@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_QSORT_R = @HAVE_QSORT_R@ +HAVE_RAISE = @HAVE_RAISE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_REMAINDER = @HAVE_REMAINDER@ +HAVE_REMAINDERF = @HAVE_REMAINDERF@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RINT = @HAVE_RINT@ +HAVE_RINTL = @HAVE_RINTL@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SINF = @HAVE_SINF@ +HAVE_SINHF = @HAVE_SINHF@ +HAVE_SINL = @HAVE_SINL@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_SQRTF = @HAVE_SQRTF@ +HAVE_SQRTL = @HAVE_SQRTL@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRPTIME = @HAVE_STRPTIME@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ +HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TANF = @HAVE_TANF@ +HAVE_TANHF = @HAVE_TANHF@ +HAVE_TANL = @HAVE_TANL@ +HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_TZSET = @HAVE_TZSET@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSFTIME = @HAVE_WCSFTIME@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ +INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBGCRYPT = @LIBGCRYPT@ +LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBREADLINE = @LIBREADLINE@ +LIBS = @LIBS@ +LIBTHREAD = @LIBTHREAD@ +LIBTOOL = @LIBTOOL@ +LIB_ACL = @LIB_ACL@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LIB_EACCESS = @LIB_EACCESS@ +LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ +LIB_SELINUX = @LIB_SELINUX@ +LIMITS_H = @LIMITS_H@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTALLOCA = @LTALLOCA@ +LTLIBGCRYPT = @LTLIBGCRYPT@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBREADLINE = @LTLIBREADLINE@ +LTLIBTHREAD = @LTLIBTHREAD@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MDBLIBS = @MDBLIBS@ +MDB_DATETIME = @MDB_DATETIME@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ +NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LIMITS_H = @NEXT_LIMITS_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_ACOSF = @REPLACE_ACOSF@ +REPLACE_ASINF = @REPLACE_ASINF@ +REPLACE_ATAN2F = @REPLACE_ATAN2F@ +REPLACE_ATANF = @REPLACE_ATANF@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CBRTF = @REPLACE_CBRTF@ +REPLACE_CBRTL = @REPLACE_CBRTL@ +REPLACE_CEIL = @REPLACE_CEIL@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_COSF = @REPLACE_COSF@ +REPLACE_COSHF = @REPLACE_COSHF@ +REPLACE_CTIME = @REPLACE_CTIME@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_EXP2 = @REPLACE_EXP2@ +REPLACE_EXP2L = @REPLACE_EXP2L@ +REPLACE_EXPF = @REPLACE_EXPF@ +REPLACE_EXPM1 = @REPLACE_EXPM1@ +REPLACE_EXPM1F = @REPLACE_EXPM1F@ +REPLACE_FABSL = @REPLACE_FABSL@ +REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOOR = @REPLACE_FLOOR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FMA = @REPLACE_FMA@ +REPLACE_FMAF = @REPLACE_FMAF@ +REPLACE_FMAL = @REPLACE_FMAL@ +REPLACE_FMOD = @REPLACE_FMOD@ +REPLACE_FMODF = @REPLACE_FMODF@ +REPLACE_FMODL = @REPLACE_FMODL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPF = @REPLACE_FREXPF@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FSTAT = @REPLACE_FSTAT@ +REPLACE_FSTATAT = @REPLACE_FSTATAT@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETPASS = @REPLACE_GETPASS@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_GMTIME = @REPLACE_GMTIME@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_HYPOT = @REPLACE_HYPOT@ +REPLACE_HYPOTF = @REPLACE_HYPOTF@ +REPLACE_HYPOTL = @REPLACE_HYPOTL@ +REPLACE_ILOGB = @REPLACE_ILOGB@ +REPLACE_ILOGBF = @REPLACE_ILOGBF@ +REPLACE_ILOGBL = @REPLACE_ILOGBL@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LOG = @REPLACE_LOG@ +REPLACE_LOG10 = @REPLACE_LOG10@ +REPLACE_LOG10F = @REPLACE_LOG10F@ +REPLACE_LOG10L = @REPLACE_LOG10L@ +REPLACE_LOG1P = @REPLACE_LOG1P@ +REPLACE_LOG1PF = @REPLACE_LOG1PF@ +REPLACE_LOG1PL = @REPLACE_LOG1PL@ +REPLACE_LOG2 = @REPLACE_LOG2@ +REPLACE_LOG2F = @REPLACE_LOG2F@ +REPLACE_LOG2L = @REPLACE_LOG2L@ +REPLACE_LOGB = @REPLACE_LOGB@ +REPLACE_LOGBF = @REPLACE_LOGBF@ +REPLACE_LOGBL = @REPLACE_LOGBL@ +REPLACE_LOGF = @REPLACE_LOGF@ +REPLACE_LOGL = @REPLACE_LOGL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKFIFO = @REPLACE_MKFIFO@ +REPLACE_MKNOD = @REPLACE_MKNOD@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_MKTIME = @REPLACE_MKTIME@ +REPLACE_MODF = @REPLACE_MODF@ +REPLACE_MODFF = @REPLACE_MODFF@ +REPLACE_MODFL = @REPLACE_MODFL@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_OPENAT = @REPLACE_OPENAT@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_QSORT_R = @REPLACE_QSORT_R@ +REPLACE_RAISE = @REPLACE_RAISE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_READLINKAT = @REPLACE_READLINKAT@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMAINDER = @REPLACE_REMAINDER@ +REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ +REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SINF = @REPLACE_SINF@ +REPLACE_SINHF = @REPLACE_SINHF@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_SQRTF = @REPLACE_SQRTF@ +REPLACE_SQRTL = @REPLACE_SQRTL@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRFTIME = @REPLACE_STRFTIME@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ +REPLACE_TANF = @REPLACE_TANF@ +REPLACE_TANHF = @REPLACE_TANHF@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TRUNC = @REPLACE_TRUNC@ +REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ +REPLACE_TRUNCF = @REPLACE_TRUNCF@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_TZSET = @REPLACE_TZSET@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SED = @SED@ +SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ +UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +USE_ACL = @USE_ACL@ +USE_NLS = @USE_NLS@ +UUIDLIBS = @UUIDLIBS@ +VERSION = @VERSION@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ +WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ +WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +crypt_support = @crypt_support@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +have_uuid = @have_uuid@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +@BASH_BUILTINS_TRUE@COMMON_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib \ +@BASH_BUILTINS_TRUE@ -I$(top_srcdir)/src -DHAVE_CONFIG_H \ +@BASH_BUILTINS_TRUE@ -I$(BASH_HEADERS) -I$(BASH_HEADERS)/lib -I$(BASH_HEADERS)/builtins \ +@BASH_BUILTINS_TRUE@ -I$(BASH_HEADERS)/include + +@BASH_BUILTINS_TRUE@lib_LTLIBRARIES = readrec.la testrec.la +@BASH_BUILTINS_TRUE@AM_CPPFLAGS = $(COMMON_CPPFLAGS) +@BASH_BUILTINS_TRUE@readrec_la_LDFLAGS = -module +@BASH_BUILTINS_TRUE@readrec_la_LIBADD = $(top_builddir)/src/librec.la +@BASH_BUILTINS_TRUE@readrec_la_SOURCES = readrec.c +@BASH_BUILTINS_TRUE@testrec_la_LDFLAGS = -module +@BASH_BUILTINS_TRUE@testrec_la_LIBADD = $(top_builddir)/src/librec.la +@BASH_BUILTINS_TRUE@testrec_la_SOURCES = testrec.c +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bash/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu bash/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +readrec.la: $(readrec_la_OBJECTS) $(readrec_la_DEPENDENCIES) $(EXTRA_readrec_la_DEPENDENCIES) + $(AM_V_CCLD)$(readrec_la_LINK) $(am_readrec_la_rpath) $(readrec_la_OBJECTS) $(readrec_la_LIBADD) $(LIBS) + +testrec.la: $(testrec_la_OBJECTS) $(testrec_la_DEPENDENCIES) $(EXTRA_testrec_la_DEPENDENCIES) + $(AM_V_CCLD)$(testrec_la_LINK) $(am_testrec_la_rpath) $(testrec_la_OBJECTS) $(testrec_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readrec.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testrec.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(libdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libLTLIBRARIES install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES + +.PRECIOUS: Makefile + + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/bash/readrec.c b/devspec.en_US/project/recutils/bash/readrec.c new file mode 100755 index 0000000..9b20aa5 --- /dev/null +++ b/devspec.en_US/project/recutils/bash/readrec.c @@ -0,0 +1,157 @@ +/* -*- mode: C -*- + * + * File: readrec.c + * Date: Fri Aug 23 18:38:08 2013 + * + * GNU recutils - readrec bash loadable builtin. + * + */ + +/* Copyright (C) 2013-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <bash/config.h> +#include <unistd.h> + +#include <stdio.h> +#include <rec.h> + +#include "builtins.h" +#include "shell.h" +#include "common.h" +#include "builtins/bashgetopt.h" + +/* The function implementing the builtin. It uses internal_getopt to + parse options. It is the same as getopt(3), but it takes a pointer + to a WORD_LIST. + + If the builtin takes no options, call no_options(list) before doing + anything else. If it returns a non-zero value, your builtin should + immediately return EX_USAGE. + + A builtin command returns EXECUTION_SUCCESS for success and + EXECUTION_FAILURE to indicate failure. */ +int +readrec_builtin (WORD_LIST *list) +{ + SHELL_VAR *var; + rec_parser_t parser; + rec_record_t record; + + if (no_options (list) != 0) + return EX_USAGE; + + /* Create a librec parser to operate on the standard input and try + to read a record. If there is a parse error then report it and + fail. */ + + parser = rec_parser_new (stdin, "stdin"); + if (!parser) + return EXECUTION_FAILURE; + + if (!rec_parse_record (parser, &record)) + { + return EXECUTION_FAILURE; + } + + { + size_t record_str_size = 0; + char *record_str = NULL; + char *record_str_dequoted = NULL; + rec_writer_t writer = rec_writer_new_str (&record_str, &record_str_size); + + if (!writer || !rec_write_record (writer, record)) + return EXIT_FAILURE; + rec_writer_destroy (writer); + + /* Set the REPLY_REC environment variable to the read record. */ + record_str_dequoted = dequote_string (record_str); + var = bind_variable ("REPLY_REC", record_str_dequoted, 0); + VUNSETATTR (var, att_invisible); + xfree (record_str_dequoted); + + /* Set the environment variables for the fields. */ + { + rec_field_t field = NULL; + rec_mset_iterator_t iter = rec_mset_iterator (rec_record_mset (record)); + + // rec_record_reset_marks (record); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) + { + char *var_name = rec_field_name (field); + size_t num_fields = rec_record_get_num_fields_by_name (record, var_name); + + // if (rec_record_field_mark (record, field)) + // continue; + +#if defined ARRAY_VARS + if (num_fields > 1) + { + /* In case several fields share the same field name, create + an array variable containing all the values. */ + + size_t i = 0; + for (; i < num_fields; i++) + { + // rec_record_mark_field (record, field, true); + field = rec_record_get_field_by_name (record, var_name, i); + var = bind_array_variable (var_name, i, rec_field_value (field), 0); + VUNSETATTR (var, att_invisible); + } + } + else + { + /* Bind a normal variable. */ + char *var_value = rec_field_value (field); + var = bind_variable (var_name, var_value, 0); + VUNSETATTR (var, att_invisible); + } +#endif /* ARRAY_VARS */ + } + rec_mset_iterator_free (&iter); + } + } + + return EXECUTION_SUCCESS; +} + +/* An array of strings forming the `long' documentation for the builtin, + which is printed by `help xxx'. It must end with a NULL. By convention, + the first line is a short description. */ +char *readrec_doc[] = { + "Read a recutils record from the standard input.", + "", + "The read record is stored in the REPLY_REC variable. Additional variables", + "are set named after the fields in the record.", + "", + "Exit Status:", + "The return code is zero, unless end-of-file is encountered.", + (char *) NULL +}; + +/* The standard structure describing a builtin command. bash keeps an + array of these structures. The flags must include BUILTIN_ENABLED + so the builtin can be used. */ +struct builtin readrec_struct = { + "readrec", /* builtin name */ + readrec_builtin, /* function implementing the builtin */ + BUILTIN_ENABLED, /* initial flags for builtin */ + readrec_doc, /* array of long documentation strings. */ + "readrec", /* usage synopsis; becomes short_doc */ + 0 /* reserved for internal use */ +}; diff --git a/devspec.en_US/project/recutils/bash/testrec.c b/devspec.en_US/project/recutils/bash/testrec.c new file mode 100755 index 0000000..2e27323 --- /dev/null +++ b/devspec.en_US/project/recutils/bash/testrec.c @@ -0,0 +1,134 @@ +/* -*- mode: C -*- Time-stamp: "2019-01-03 09:44:20 jemarch" + * + * File: testrec.c + * Date: Fri Aug 23 21:41:00 2013 + * + * GNU recutils - testrec bash loadable builtin. + * + */ + +/* Copyright (C) 2013-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <bash/config.h> +#include <unistd.h> + +#include <stdio.h> +#include <rec.h> + +#include "builtins.h" +#include "shell.h" +#include "common.h" +#include "builtins/bashgetopt.h" + +/* The function implementing the builtin. It uses internal_getopt to + parse options. It is the same as getopt(3), but it takes a pointer + to a WORD_LIST. + + If the builtin takes no options, call no_options(list) before doing + anything else. If it returns a non-zero value, your builtin should + immediately return EX_USAGE. + + A builtin command returns EXECUTION_SUCCESS for success and + EXECUTION_FAILURE to indicate failure. */ +int +testrec_builtin (WORD_LIST *list) +{ + int res = EXECUTION_SUCCESS; + const char **argv; + int argc; + SHELL_VAR *var; + rec_record_t record; + rec_parser_t parser; + char *record_str, *sex_str; + + /* Get arguments and verify them. */ + + argv = make_builtin_argv (list, &argc); + if ((argc != 3) + || ((strcmp (argv[0], "[%") == 0) && ((strlen (argv[2]) == 2) && ((argv[2][0] != '%') || (argv[2][1] != ']'))))) + { + fprintf (stderr, "Usage: [%% SEX %%]\n"); + return EXECUTION_FAILURE; + } + + sex_str = argv[1]; + + /* Get the record to operate on from the REPLY_REC environment + variable. */ + var = find_variable ("REPLY_REC"); + if (!var) + return EXECUTION_FAILURE; + + record_str = get_variable_value (var); + parser = rec_parser_new_str (record_str, "REPLY_REC"); + if (!parser || !rec_parse_record (parser, &record)) + { + fprintf (stderr, "testrec: error: invalid record in REPLY_REC\n"); + return EXECUTION_FAILURE; + } + + /* Apply the selection expression. */ + { + bool status = false; + rec_sex_t sex = rec_sex_new (false); + if (!sex) + return EXECUTION_FAILURE; + + if (!rec_sex_compile (sex, sex_str)) + { + fprintf (stderr, "testrec: error: wrong selection expression\n"); + return EXECUTION_FAILURE; + } + + res = rec_sex_eval (sex, record, &status) ? EXECUTION_SUCCESS : EXECUTION_FAILURE; + rec_sex_destroy (sex); + } + + /* Cleanup. */ + rec_record_destroy (record); + + return res; +} + +/* An array of strings forming the `long' documentation for the builtin, + which is printed by `help xxx'. It must end with a NULL. By convention, + the first line is a short description. */ +char *testrec_doc[] = { + "Evaluate a selection expression on the record stored in REPLY_REC.", + "", + "Evaluates a given selection expression on the record stored in the\n\ +REPLY_REC variable, if any.\n\ +\n\ +Exit Status:\n\ +The return code is zero if the selection expression evaluates to\n\ +true, -1 otherwise.\n", + (char *) NULL +}; + +/* The standard structure describing a builtin command. bash keeps an + array of these structures. The flags must include BUILTIN_ENABLED + so the builtin can be used. */ +struct builtin testrec_struct = { + "[%", /* builtin name */ + testrec_builtin, /* function implementing the builtin */ + BUILTIN_ENABLED, /* initial flags for builtin */ + testrec_doc, /* array of long documentation strings. */ + "testrec", /* usage synopsis; becomes short_doc */ + 0 /* reserved for internal use */ +}; diff --git a/devspec.en_US/project/recutils/build-aux/announce-gen b/devspec.en_US/project/recutils/build-aux/announce-gen new file mode 100755 index 0000000..0174f5c --- /dev/null +++ b/devspec.en_US/project/recutils/build-aux/announce-gen @@ -0,0 +1,557 @@ +eval '(exit $?0)' && eval 'exec perl -wS "$0" "$@"' + & eval 'exec perl -wS "$0" $argv:q' + if 0; +# Generate a release announcement message. + +my $VERSION = '2018-03-07 03:46'; # UTC +# The definition above must lie within the first 8 lines in order +# for the Emacs time-stamp write hook (at end) to update it. +# If you change this file with Emacs, please let the write hook +# do its job. Otherwise, update this string manually. + +# Copyright (C) 2002-2019 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +# Written by Jim Meyering + +use strict; + +use Getopt::Long; +use POSIX qw(strftime); + +(my $ME = $0) =~ s|.*/||; + +my %valid_release_types = map {$_ => 1} qw (alpha beta stable); +my @archive_suffixes = ('tar.gz', 'tar.bz2', 'tar.lzma', 'tar.xz'); +my %digest_classes = + ( + 'md5' => (eval { require Digest::MD5; } and 'Digest::MD5'), + 'sha1' => ((eval { require Digest::SHA; } and 'Digest::SHA') + or (eval { require Digest::SHA1; } and 'Digest::SHA1')) + ); +my $srcdir = '.'; + +sub usage ($) +{ + my ($exit_code) = @_; + my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); + if ($exit_code != 0) + { + print $STREAM "Try '$ME --help' for more information.\n"; + } + else + { + my @types = sort keys %valid_release_types; + print $STREAM <<EOF; +Usage: $ME [OPTIONS] +Generate an announcement message. Run this from builddir. + +OPTIONS: + +These options must be specified: + + --release-type=TYPE TYPE must be one of @types + --package-name=PACKAGE_NAME + --previous-version=VER + --current-version=VER + --gpg-key-id=ID The GnuPG ID of the key used to sign the tarballs + --url-directory=URL_DIR + +The following are optional: + + --news=NEWS_FILE include the NEWS section about this release + from this NEWS_FILE; accumulates. + --srcdir=DIR where to find the NEWS_FILEs (default: $srcdir) + --bootstrap-tools=TOOL_LIST a comma-separated list of tools, e.g., + autoconf,automake,bison,gnulib + --gnulib-version=VERSION report VERSION as the gnulib version, where + VERSION is the result of running git describe + in the gnulib source directory. + required if gnulib is in TOOL_LIST. + --no-print-checksums do not emit MD5 or SHA1 checksums + --archive-suffix=SUF add SUF to the list of archive suffixes + --mail-headers=HEADERS a space-separated list of mail headers, e.g., + To: x\@example.com Cc: y-announce\@example.com,... + + --help display this help and exit + --version output version information and exit + +EOF + } + exit $exit_code; +} + + +=item C<%size> = C<sizes (@file)> + +Compute the sizes of the C<@file> and return them as a hash. Return +C<undef> if one of the computation failed. + +=cut + +sub sizes (@) +{ + my (@file) = @_; + + my $fail = 0; + my %res; + foreach my $f (@file) + { + my $cmd = "du -h $f"; + my $t = `$cmd`; + # FIXME-someday: give a better diagnostic, a la $PROCESS_STATUS + $@ + and (warn "command failed: '$cmd'\n"), $fail = 1; + chomp $t; + $t =~ s/^\s*([\d.]+[MkK]).*/${1}B/; + $res{$f} = $t; + } + return $fail ? undef : %res; +} + +=item C<print_locations ($title, \@url, \%size, @file) + +Print a section C<$title> dedicated to the list of <@file>, which +sizes are stored in C<%size>, and which are available from the C<@url>. + +=cut + +sub print_locations ($\@\%@) +{ + my ($title, $url, $size, @file) = @_; + print "Here are the $title:\n"; + foreach my $url (@{$url}) + { + for my $file (@file) + { + print " $url/$file"; + print " (", $$size{$file}, ")" + if exists $$size{$file}; + print "\n"; + } + } + print "\n"; +} + +=item C<print_checksums (@file) + +Print the MD5 and SHA1 signature section for each C<@file>. + +=cut + +sub print_checksums (@) +{ + my (@file) = @_; + + print "Here are the MD5 and SHA1 checksums:\n"; + print "\n"; + + foreach my $meth (qw (md5 sha1)) + { + my $class = $digest_classes{$meth} or next; + foreach my $f (@file) + { + open IN, '<', $f + or die "$ME: $f: cannot open for reading: $!\n"; + binmode IN; + my $dig = $class->new->addfile(*IN)->hexdigest; + close IN; + print "$dig $f\n"; + } + } + print "\n"; +} + +=item C<print_news_deltas ($news_file, $prev_version, $curr_version) + +Print the section of the NEWS file C<$news_file> addressing changes +between versions C<$prev_version> and C<$curr_version>. + +=cut + +sub print_news_deltas ($$$) +{ + my ($news_file, $prev_version, $curr_version) = @_; + + my $news_name = $news_file; + $news_name =~ s|^\Q$srcdir\E/||; + + print "\n$news_name\n\n"; + + # Print all lines from $news_file, starting with the first one + # that mentions $curr_version up to but not including + # the first occurrence of $prev_version. + my $in_items; + + my $re_prefix = qr/(?:\* )?(?:Noteworthy c|Major c|C)(?i:hanges)/; + + my $found_news; + open NEWS, '<', $news_file + or die "$ME: $news_file: cannot open for reading: $!\n"; + while (defined (my $line = <NEWS>)) + { + if ( ! $in_items) + { + # Match lines like these: + # * Major changes in release 5.0.1: + # * Noteworthy changes in release 6.6 (2006-11-22) [stable] + $line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$curr_version\E(?:[^\d.]|$)/o + or next; + $in_items = 1; + print $line; + } + else + { + # This regexp must not match version numbers in NEWS items. + # For example, they might well say "introduced in 4.5.5", + # and we don't want that to match. + $line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$prev_version\E(?:[^\d.]|$)/o + and last; + print $line; + $line =~ /\S/ + and $found_news = 1; + } + } + close NEWS; + + $in_items + or die "$ME: $news_file: no matching lines for '$curr_version'\n"; + $found_news + or die "$ME: $news_file: no news item found for '$curr_version'\n"; +} + +sub print_changelog_deltas ($$) +{ + my ($package_name, $prev_version) = @_; + + # Print new ChangeLog entries. + + # First find all CVS-controlled ChangeLog files. + use File::Find; + my @changelog; + find ({wanted => sub {$_ eq 'ChangeLog' && -d 'CVS' + and push @changelog, $File::Find::name}}, + '.'); + + # If there are no ChangeLog files, we're done. + @changelog + or return; + my %changelog = map {$_ => 1} @changelog; + + # Reorder the list of files so that if there are ChangeLog + # files in the specified directories, they're listed first, + # in this order: + my @dir = qw ( . src lib m4 config doc ); + + # A typical @changelog array might look like this: + # ./ChangeLog + # ./po/ChangeLog + # ./m4/ChangeLog + # ./lib/ChangeLog + # ./doc/ChangeLog + # ./config/ChangeLog + my @reordered; + foreach my $d (@dir) + { + my $dot_slash = $d eq '.' ? $d : "./$d"; + my $target = "$dot_slash/ChangeLog"; + delete $changelog{$target} + and push @reordered, $target; + } + + # Append any remaining ChangeLog files. + push @reordered, sort keys %changelog; + + # Remove leading './'. + @reordered = map { s!^\./!!; $_ } @reordered; + + print "\nChangeLog entries:\n\n"; + # print join ("\n", @reordered), "\n"; + + $prev_version =~ s/\./_/g; + my $prev_cvs_tag = "\U$package_name\E-$prev_version"; + + my $cmd = "cvs -n diff -u -r$prev_cvs_tag -rHEAD @reordered"; + open DIFF, '-|', $cmd + or die "$ME: cannot run '$cmd': $!\n"; + # Print two types of lines, making minor changes: + # Lines starting with '+++ ', e.g., + # +++ ChangeLog 22 Feb 2003 16:52:51 -0000 1.247 + # and those starting with '+'. + # Don't print the others. + my $prev_printed_line_empty = 1; + while (defined (my $line = <DIFF>)) + { + if ($line =~ /^\+\+\+ /) + { + my $separator = "*"x70 ."\n"; + $line =~ s///; + $line =~ s/\s.*//; + $prev_printed_line_empty + or print "\n"; + print $separator, $line, $separator; + } + elsif ($line =~ /^\+/) + { + $line =~ s///; + print $line; + $prev_printed_line_empty = ($line =~ /^$/); + } + } + close DIFF; + + # The exit code should be 1. + # Allow in case there are no modified ChangeLog entries. + $? == 256 || $? == 128 + or warn "warning: '$cmd' had unexpected exit code or signal ($?)\n"; +} + +sub get_tool_versions ($$) +{ + my ($tool_list, $gnulib_version) = @_; + @$tool_list + or return (); + + my $fail; + my @tool_version_pair; + foreach my $t (@$tool_list) + { + if ($t eq 'gnulib') + { + push @tool_version_pair, ucfirst $t . ' ' . $gnulib_version; + next; + } + # Assume that the last "word" on the first line of + # 'tool --version' output is the version string. + my ($first_line, undef) = split ("\n", `$t --version`); + if ($first_line =~ /.* (\d[\w.-]+)$/) + { + $t = ucfirst $t; + push @tool_version_pair, "$t $1"; + } + else + { + defined $first_line + and $first_line = ''; + warn "$t: unexpected --version output\n:$first_line"; + $fail = 1; + } + } + + $fail + and exit 1; + + return @tool_version_pair; +} + +{ + # Neutralize the locale, so that, for instance, "du" does not + # issue "1,2" instead of "1.2", what confuses our regexps. + $ENV{LC_ALL} = "C"; + + my $mail_headers; + my $release_type; + my $package_name; + my $prev_version; + my $curr_version; + my $gpg_key_id; + my @url_dir_list; + my @news_file; + my $bootstrap_tools; + my $gnulib_version; + my $print_checksums_p = 1; + + # Reformat the warnings before displaying them. + local $SIG{__WARN__} = sub + { + my ($msg) = @_; + # Warnings from GetOptions. + $msg =~ s/Option (\w)/option --$1/; + warn "$ME: $msg"; + }; + + GetOptions + ( + 'mail-headers=s' => \$mail_headers, + 'release-type=s' => \$release_type, + 'package-name=s' => \$package_name, + 'previous-version=s' => \$prev_version, + 'current-version=s' => \$curr_version, + 'gpg-key-id=s' => \$gpg_key_id, + 'url-directory=s' => \@url_dir_list, + 'news=s' => \@news_file, + 'srcdir=s' => \$srcdir, + 'bootstrap-tools=s' => \$bootstrap_tools, + 'gnulib-version=s' => \$gnulib_version, + 'print-checksums!' => \$print_checksums_p, + 'archive-suffix=s' => \@archive_suffixes, + + help => sub { usage 0 }, + version => sub { print "$ME version $VERSION\n"; exit }, + ) or usage 1; + + my $fail = 0; + # Ensure that each required option is specified. + $release_type + or (warn "release type not specified\n"), $fail = 1; + $package_name + or (warn "package name not specified\n"), $fail = 1; + $prev_version + or (warn "previous version string not specified\n"), $fail = 1; + $curr_version + or (warn "current version string not specified\n"), $fail = 1; + $gpg_key_id + or (warn "GnuPG key ID not specified\n"), $fail = 1; + @url_dir_list + or (warn "URL directory name(s) not specified\n"), $fail = 1; + + my @tool_list = split ',', $bootstrap_tools + if $bootstrap_tools; + + grep (/^gnulib$/, @tool_list) ^ defined $gnulib_version + and (warn "when specifying gnulib as a tool, you must also specify\n" + . "--gnulib-version=V, where V is the result of running git describe\n" + . "in the gnulib source directory.\n"), $fail = 1; + + !$release_type || exists $valid_release_types{$release_type} + or (warn "'$release_type': invalid release type\n"), $fail = 1; + + @ARGV + and (warn "too many arguments:\n", join ("\n", @ARGV), "\n"), + $fail = 1; + $fail + and usage 1; + + my $my_distdir = "$package_name-$curr_version"; + + my $xd = "$package_name-$prev_version-$curr_version.xdelta"; + + my @candidates = map { "$my_distdir.$_" } @archive_suffixes; + my @tarballs = grep {-f $_} @candidates; + + @tarballs + or die "$ME: none of " . join(', ', @candidates) . " were found\n"; + my @sizable = @tarballs; + -f $xd + and push @sizable, $xd; + my %size = sizes (@sizable); + %size + or exit 1; + + my $headers = ''; + if (defined $mail_headers) + { + ($headers = $mail_headers) =~ s/\s+(\S+:)/\n$1/g; + $headers .= "\n"; + } + + # The markup is escaped as <\# so that when this script is sent by + # mail (or part of a diff), Gnus is not triggered. + print <<EOF; + +${headers}Subject: $my_distdir released [$release_type] + +<\#secure method=pgpmime mode=sign> + +FIXME: put comments here + +EOF + + if (@url_dir_list == 1 && @tarballs == 1) + { + # When there's only one tarball and one URL, use a more concise form. + my $m = "$url_dir_list[0]/$tarballs[0]"; + print "Here are the compressed sources and a GPG detached signature[*]:\n" + . " $m\n" + . " $m.sig\n\n"; + } + else + { + print_locations ("compressed sources", @url_dir_list, %size, @tarballs); + -f $xd + and print_locations ("xdelta diffs (useful? if so, " + . "please tell bug-gnulib\@gnu.org)", + @url_dir_list, %size, $xd); + my @sig_files = map { "$_.sig" } @tarballs; + print_locations ("GPG detached signatures[*]", @url_dir_list, %size, + @sig_files); + } + + if ($url_dir_list[0] =~ "gnu\.org") + { + print "Use a mirror for higher download bandwidth:\n"; + if (@tarballs == 1 && $url_dir_list[0] =~ m!https://ftp\.gnu\.org/gnu/!) + { + (my $m = "$url_dir_list[0]/$tarballs[0]") + =~ s!https://ftp\.gnu\.org/gnu/!https://ftpmirror\.gnu\.org/!; + print " $m\n" + . " $m.sig\n\n"; + + } + else + { + print " https://www.gnu.org/order/ftp.html\n\n"; + } + } + + $print_checksums_p + and print_checksums (@sizable); + + print <<EOF; +[*] Use a .sig file to verify that the corresponding file (without the +.sig suffix) is intact. First, be sure to download both the .sig file +and the corresponding tarball. Then, run a command like this: + + gpg --verify $tarballs[0].sig + +If that command fails because you don't have the required public key, +then run this command to import it: + + gpg --keyserver keys.gnupg.net --recv-keys $gpg_key_id + +and rerun the 'gpg --verify' command. +EOF + + my @tool_versions = get_tool_versions (\@tool_list, $gnulib_version); + @tool_versions + and print "\nThis release was bootstrapped with the following tools:", + join ('', map {"\n $_"} @tool_versions), "\n"; + + print_news_deltas ($_, $prev_version, $curr_version) + foreach @news_file; + + $release_type eq 'stable' + or print_changelog_deltas ($package_name, $prev_version); + + exit 0; +} + +### Setup "GNU" style for perl-mode and cperl-mode. +## Local Variables: +## mode: perl +## perl-indent-level: 2 +## perl-continued-statement-offset: 2 +## perl-continued-brace-offset: 0 +## perl-brace-offset: 0 +## perl-brace-imaginary-offset: 0 +## perl-label-offset: -2 +## perl-extra-newline-before-brace: t +## perl-merge-trailing-else: nil +## eval: (add-hook 'before-save-hook 'time-stamp) +## time-stamp-start: "my $VERSION = '" +## time-stamp-format: "%:y-%02m-%02d %02H:%02M" +## time-stamp-time-zone: "UTC0" +## time-stamp-end: "'; # UTC" +## End: diff --git a/devspec.en_US/project/recutils/build-aux/compile b/devspec.en_US/project/recutils/build-aux/compile new file mode 100755 index 0000000..a85b723 --- /dev/null +++ b/devspec.en_US/project/recutils/build-aux/compile @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Written by Tom Tromey <tromey@cygnus.com>. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to <bug-automake@gnu.org> or send patches to +# <automake-patches@gnu.org>. + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to <bug-automake@gnu.org>. +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/devspec.en_US/project/recutils/build-aux/config.guess b/devspec.en_US/project/recutils/build-aux/config.guess new file mode 100755 index 0000000..0f9b29c --- /dev/null +++ b/devspec.en_US/project/recutils/build-aux/config.guess @@ -0,0 +1,1493 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2019 Free Software Foundation, Inc. + +timestamp='2019-01-01' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see <https://www.gnu.org/licenses/>. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# +# Please send patches to <config-patches@gnu.org>. + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to <config-patches@gnu.org>." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2019 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 + +set_cc_for_build() { + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039 + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) echo "int x;" > "$dummy.c" + for driver in cc gcc c89 c99 ; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD="$driver" + break + fi + done + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; + esac +} + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if test -f /.attbin/uname ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "$UNAME_SYSTEM" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + set_cc_for_build + cat <<-EOF > "$dummy.c" + #include <features.h> + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" + + # If ldd exists, use it to detect musl libc. + if command -v ldd >/dev/null && \ + ldd --version 2>&1 | grep -q ^musl + then + LIBC=musl + fi + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + "/sbin/$sysctl" 2>/dev/null || \ + "/usr/sbin/$sysctl" 2>/dev/null || \ + echo unknown)` + case "$UNAME_MACHINE_ARCH" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` + machine="${arch}${endian}"-unknown + ;; + *) machine="$UNAME_MACHINE_ARCH"-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently (or will in the future) and ABI. + case "$UNAME_MACHINE_ARCH" in + earm*) + os=netbsdelf + ;; + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # Determine ABI tags. + case "$UNAME_MACHINE_ARCH" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "$UNAME_VERSION" in + Debian*) + release='-gnu' + ;; + *) + release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "$machine-${os}${release}${abi-}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" + exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" + exit ;; + *:MidnightBSD:*:*) + echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" + exit ;; + *:ekkoBSD:*:*) + echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" + exit ;; + *:SolidBSD:*:*) + echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:MirBSD:*:*) + echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:Sortix:*:*) + echo "$UNAME_MACHINE"-unknown-sortix + exit ;; + *:Redox:*:*) + echo "$UNAME_MACHINE"-unknown-redox + exit ;; + mips:OSF1:*.*) + echo mips-dec-osf1 + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE=alpha ;; + "EV4.5 (21064)") + UNAME_MACHINE=alpha ;; + "LCA4 (21066/21068)") + UNAME_MACHINE=alpha ;; + "EV5 (21164)") + UNAME_MACHINE=alphaev5 ;; + "EV5.6 (21164A)") + UNAME_MACHINE=alphaev56 ;; + "EV5.6 (21164PC)") + UNAME_MACHINE=alphapca56 ;; + "EV5.7 (21164PC)") + UNAME_MACHINE=alphapca57 ;; + "EV6 (21264)") + UNAME_MACHINE=alphaev6 ;; + "EV6.7 (21264A)") + UNAME_MACHINE=alphaev67 ;; + "EV6.8CB (21264C)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8AL (21264B)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8CX (21264D)") + UNAME_MACHINE=alphaev68 ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE=alphaev69 ;; + "EV7 (21364)") + UNAME_MACHINE=alphaev7 ;; + "EV7.9 (21364A)") + UNAME_MACHINE=alphaev79 ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix"$UNAME_RELEASE" + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux"$UNAME_RELEASE" + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + set_cc_for_build + SUN_ARCH=i386 + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH=x86_64 + fi + fi + echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos"$UNAME_RELEASE" + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos"$UNAME_RELEASE" + ;; + sun4) + echo sparc-sun-sunos"$UNAME_RELEASE" + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos"$UNAME_RELEASE" + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint"$UNAME_RELEASE" + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint"$UNAME_RELEASE" + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint"$UNAME_RELEASE" + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint"$UNAME_RELEASE" + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten"$UNAME_RELEASE" + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten"$UNAME_RELEASE" + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix"$UNAME_RELEASE" + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix"$UNAME_RELEASE" + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix"$UNAME_RELEASE" + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" +#ifdef __cplusplus +#include <stdio.h> /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`"$dummy" "$dummyarg"` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos"$UNAME_RELEASE" + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] + then + if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ + [ "$TARGET_BINARY_INTERFACE"x = x ] + then + echo m88k-dg-dgux"$UNAME_RELEASE" + else + echo m88k-dg-dguxbcs"$UNAME_RELEASE" + fi + else + echo i586-dg-dgux"$UNAME_RELEASE" + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + fi + echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + #include <sys/systemcfg.h> + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` + else + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" + fi + echo "$IBM_ARCH"-ibm-aix"$IBM_REV" + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + case "$UNAME_MACHINE" in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "$sc_cpu_version" in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "$sc_kernel_bits" in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "$HP_ARCH" = "" ]; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + + #define _HPUX_SOURCE + #include <stdlib.h> + #include <unistd.h> + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ "$HP_ARCH" = hppa2.0w ] + then + set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH=hppa2.0w + else + HP_ARCH=hppa64 + fi + fi + echo "$HP_ARCH"-hp-hpux"$HPUX_REV" + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux"$HPUX_REV" + exit ;; + 3050*:HI-UX:*:*) + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + #include <unistd.h> + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo "$UNAME_MACHINE"-unknown-osf1mk + else + echo "$UNAME_MACHINE"-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi"$UNAME_RELEASE" + exit ;; + *:BSD/OS:*:*) + echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" + exit ;; + arm:FreeBSD:*:*) + UNAME_PROCESSOR=`uname -p` + set_cc_for_build + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi + else + echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf + fi + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case "$UNAME_PROCESSOR" in + amd64) + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; + esac + echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" + exit ;; + i*:CYGWIN*:*) + echo "$UNAME_MACHINE"-pc-cygwin + exit ;; + *:MINGW64*:*) + echo "$UNAME_MACHINE"-pc-mingw64 + exit ;; + *:MINGW*:*) + echo "$UNAME_MACHINE"-pc-mingw32 + exit ;; + *:MSYS*:*) + echo "$UNAME_MACHINE"-pc-msys + exit ;; + i*:PW*:*) + echo "$UNAME_MACHINE"-pc-pw32 + exit ;; + *:Interix*:*) + case "$UNAME_MACHINE" in + x86) + echo i586-pc-interix"$UNAME_RELEASE" + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix"$UNAME_RELEASE" + exit ;; + IA64) + echo ia64-unknown-interix"$UNAME_RELEASE" + exit ;; + esac ;; + i*:UWIN*:*) + echo "$UNAME_MACHINE"-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-pc-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + exit ;; + *:GNU:*:*) + # the GNU system + echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" + exit ;; + *:Minix:*:*) + echo "$UNAME_MACHINE"-unknown-minix + exit ;; + aarch64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + arm*:Linux:*:*) + set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi + else + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + cris:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit ;; + crisv32:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit ;; + e2k:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + frv:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + hexagon:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + i*86:Linux:*:*) + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + exit ;; + ia64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + k1om:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + m32r*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + m68*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" + test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } + ;; + mips64el:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-"$LIBC" + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-"$LIBC" + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-"$LIBC" + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; + PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; + *) echo hppa-unknown-linux-"$LIBC" ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-"$LIBC" + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-"$LIBC" + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-"$LIBC" + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-"$LIBC" + exit ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" + exit ;; + sh64*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + sh*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + tile*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + vax:Linux:*:*) + echo "$UNAME_MACHINE"-dec-linux-"$LIBC" + exit ;; + x86_64:Linux:*:*) + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + exit ;; + xtensa*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo "$UNAME_MACHINE"-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo "$UNAME_MACHINE"-unknown-stop + exit ;; + i*86:atheos:*:*) + echo "$UNAME_MACHINE"-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo "$UNAME_MACHINE"-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos"$UNAME_RELEASE" + exit ;; + i*86:*DOS:*:*) + echo "$UNAME_MACHINE"-pc-msdosdjgpp + exit ;; + i*86:*:4.*:*) + UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" + else + echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` + echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL" + elif /bin/uname -X 2>/dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" + else + echo "$UNAME_MACHINE"-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configure will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos"$UNAME_RELEASE" + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos"$UNAME_RELEASE" + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos"$UNAME_RELEASE" + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos"$UNAME_RELEASE" + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv"$UNAME_RELEASE" + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo "$UNAME_MACHINE"-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says <Richard.M.Bartel@ccMail.Census.GOV> + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes <hewes@openmarket.com>. + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo "$UNAME_MACHINE"-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux"$UNAME_RELEASE" + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv"$UNAME_RELEASE" + else + echo mips-unknown-sysv"$UNAME_RELEASE" + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux"$UNAME_RELEASE" + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux"$UNAME_RELEASE" + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux"$UNAME_RELEASE" + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux"$UNAME_RELEASE" + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux"$UNAME_RELEASE" + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux"$UNAME_RELEASE" + exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux"$UNAME_RELEASE" + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody"$UNAME_RELEASE" + exit ;; + *:Rhapsody:*:*) + echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi + echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = x86; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-*:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSR-*:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSV-*:NONSTOP_KERNEL:*:*) + echo nsv-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk"$UNAME_RELEASE" + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + # shellcheck disable=SC2154 + if test "$cputype" = 386; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo "$UNAME_MACHINE"-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux"$UNAME_RELEASE" + exit ;; + *:DragonFly:*:*) + echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "$UNAME_MACHINE" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" + exit ;; + i*86:rdos:*:*) + echo "$UNAME_MACHINE"-pc-rdos + exit ;; + i*86:AROS:*:*) + echo "$UNAME_MACHINE"-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo "$UNAME_MACHINE"-unknown-esx + exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; + *:Unleashed:*:*) + echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" + exit ;; +esac + +echo "$0: unable to guess system type" >&2 + +case "$UNAME_MACHINE:$UNAME_SYSTEM" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <<EOF + +NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize +the system type. Please install a C compiler and try again. +EOF + ;; +esac + +cat >&2 <<EOF + +This script (version $timestamp), has failed to recognize the +operating system you are using. If your script is old, overwrite *all* +copies of config.guess and config.sub with the latest versions from: + + https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +and + https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub + +If $0 has already been updated, send the following data and any +information you think might be pertinent to config-patches@gnu.org to +provide the necessary information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/devspec.en_US/project/recutils/build-aux/config.rpath b/devspec.en_US/project/recutils/build-aux/config.rpath new file mode 100755 index 0000000..be202c1 --- /dev/null +++ b/devspec.en_US/project/recutils/build-aux/config.rpath @@ -0,0 +1,684 @@ +#! /bin/sh +# Output a system dependent set of variables, describing how to set the +# run time search path of shared libraries in an executable. +# +# Copyright 1996-2019 Free Software Foundation, Inc. +# Taken from GNU libtool, 2001 +# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld +# should be set by the caller. +# +# The set of defined variables is at the end of this script. + +# Known limitations: +# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer +# than 256 bytes, otherwise the compiler driver will dump core. The only +# known workaround is to choose shorter directory names for the build +# directory and/or the installation directory. + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +shrext=.so + +host="$1" +host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +# Code taken from libtool.m4's _LT_CC_BASENAME. + +for cc_temp in $CC""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` + +# Code taken from libtool.m4's _LT_COMPILER_PIC. + +wl= +if test "$GCC" = yes; then + wl='-Wl,' +else + case "$host_os" in + aix*) + wl='-Wl,' + ;; + mingw* | cygwin* | pw32* | os2* | cegcc*) + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6* | nonstopux*) + wl='-Wl,' + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + ecc*) + wl='-Wl,' + ;; + icc* | ifort*) + wl='-Wl,' + ;; + lf95*) + wl='-Wl,' + ;; + nagfor*) + wl='-Wl,-Wl,,' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + wl='-Wl,' + ;; + ccc*) + wl='-Wl,' + ;; + xl* | bgxl* | bgf* | mpixl*) + wl='-Wl,' + ;; + como) + wl='-lopt=' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + wl= + ;; + *Sun\ C*) + wl='-Wl,' + ;; + esac + ;; + esac + ;; + newsos6) + ;; + *nto* | *qnx*) + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + rdos*) + ;; + solaris*) + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + wl='-Qoption ld ' + ;; + *) + wl='-Wl,' + ;; + esac + ;; + sunos4*) + wl='-Qoption ld ' + ;; + sysv4 | sysv4.2uw2* | sysv4.3*) + wl='-Wl,' + ;; + sysv4*MP*) + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + wl='-Wl,' + ;; + unicos*) + wl='-Wl,' + ;; + uts4*) + ;; + esac +fi + +# Code taken from libtool.m4's _LT_LINKER_SHLIBS. + +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no + +case "$host_os" in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + # Unlike libtool, we use -rpath here, not --rpath, since the documented + # option of GNU ld is called -rpath, not --rpath. + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + case "$host_os" in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + fi + ;; + amigaos*) + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32* | cegcc*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + haiku*) + ;; + interix[3-9]*) + hardcode_direct=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + netbsd*) + ;; + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + else + ld_shlibs=no + fi + ;; + esac + ;; + sunos4*) + hardcode_direct=yes + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + esac + if test "$ld_shlibs" = no; then + hardcode_libdir_flag_spec= + fi +else + case "$host_os" in + aix3*) + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + else + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + fi + hardcode_direct=yes + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + fi + # Begin _LT_AC_SYS_LIBPATH_AIX. + echo 'int main () { return 0; }' > conftest.c + ${CC} ${LDFLAGS} conftest.c -o conftest + aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + fi + if test -z "$aix_libpath"; then + aix_libpath="/usr/lib:/lib" + fi + rm -f conftest.c conftest + # End _LT_AC_SYS_LIBPATH_AIX. + if test "$aix_use_runtimelinking" = yes; then + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + else + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + fi + fi + ;; + amigaos*) + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + libext=lib + ;; + darwin* | rhapsody*) + hardcode_direct=no + if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then + : + else + ld_shlibs=no + fi + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + freebsd2.[01]*) + hardcode_direct=yes + hardcode_minus_L=yes + ;; + freebsd* | dragonfly*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + hpux9*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + hpux10*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + hpux11*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + ;; + *) + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + irix5* | irix6* | nonstopux*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + netbsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + newsos6) + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + *nto* | *qnx*) + ;; + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + else + case "$host_os" in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + osf3*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + osf4* | osf5*) + if test "$GCC" = yes; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + # Both cc and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + solaris*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + sunos4*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + sysv4) + case $host_vendor in + sni) + hardcode_direct=yes # is this really true??? + ;; + siemens) + hardcode_direct=no + ;; + motorola) + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + ;; + sysv4.3*) + ;; + sysv4*MP*) + if test -d /usr/nec; then + ld_shlibs=yes + fi + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + ;; + sysv5* | sco3.2v5* | sco5v6*) + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator=':' + ;; + uts4*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + *) + ld_shlibs=no + ;; + esac +fi + +# Check dynamic linker characteristics +# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. +# Unlike libtool.m4, here we don't care about _all_ names of the library, but +# only about the one the linker finds when passed -lNAME. This is the last +# element of library_names_spec in libtool.m4, or possibly two of them if the +# linker has special search rules. +library_names_spec= # the last element of library_names_spec in libtool.m4 +libname_spec='lib$name' +case "$host_os" in + aix3*) + library_names_spec='$libname.a' + ;; + aix[4-9]*) + library_names_spec='$libname$shrext' + ;; + amigaos*) + case "$host_cpu" in + powerpc*) + library_names_spec='$libname$shrext' ;; + m68k) + library_names_spec='$libname.a' ;; + esac + ;; + beos*) + library_names_spec='$libname$shrext' + ;; + bsdi[45]*) + library_names_spec='$libname$shrext' + ;; + cygwin* | mingw* | pw32* | cegcc*) + shrext=.dll + library_names_spec='$libname.dll.a $libname.lib' + ;; + darwin* | rhapsody*) + shrext=.dylib + library_names_spec='$libname$shrext' + ;; + dgux*) + library_names_spec='$libname$shrext' + ;; + freebsd[23].*) + library_names_spec='$libname$shrext$versuffix' + ;; + freebsd* | dragonfly*) + library_names_spec='$libname$shrext' + ;; + gnu*) + library_names_spec='$libname$shrext' + ;; + haiku*) + library_names_spec='$libname$shrext' + ;; + hpux9* | hpux10* | hpux11*) + case $host_cpu in + ia64*) + shrext=.so + ;; + hppa*64*) + shrext=.sl + ;; + *) + shrext=.sl + ;; + esac + library_names_spec='$libname$shrext' + ;; + interix[3-9]*) + library_names_spec='$libname$shrext' + ;; + irix5* | irix6* | nonstopux*) + library_names_spec='$libname$shrext' + case "$host_os" in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; + *) libsuff= shlibsuff= ;; + esac + ;; + esac + ;; + linux*oldld* | linux*aout* | linux*coff*) + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + library_names_spec='$libname$shrext' + ;; + knetbsd*-gnu) + library_names_spec='$libname$shrext' + ;; + netbsd*) + library_names_spec='$libname$shrext' + ;; + newsos6) + library_names_spec='$libname$shrext' + ;; + *nto* | *qnx*) + library_names_spec='$libname$shrext' + ;; + openbsd*) + library_names_spec='$libname$shrext$versuffix' + ;; + os2*) + libname_spec='$name' + shrext=.dll + library_names_spec='$libname.a' + ;; + osf3* | osf4* | osf5*) + library_names_spec='$libname$shrext' + ;; + rdos*) + ;; + solaris*) + library_names_spec='$libname$shrext' + ;; + sunos4*) + library_names_spec='$libname$shrext$versuffix' + ;; + sysv4 | sysv4.3*) + library_names_spec='$libname$shrext' + ;; + sysv4*MP*) + library_names_spec='$libname$shrext' + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + library_names_spec='$libname$shrext' + ;; + tpf*) + library_names_spec='$libname$shrext' + ;; + uts4*) + library_names_spec='$libname$shrext' + ;; +esac + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` +shlibext=`echo "$shrext" | sed -e 's,^\.,,'` +escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` + +LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF + +# How to pass a linker flag through the compiler. +wl="$escaped_wl" + +# Static library suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally "so"). +shlibext="$shlibext" + +# Format of library name prefix. +libname_spec="$escaped_libname_spec" + +# Library names that the linker finds when passed -lNAME. +library_names_spec="$escaped_library_names_spec" + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec" + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator="$hardcode_libdir_separator" + +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct="$hardcode_direct" + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L="$hardcode_minus_L" + +EOF diff --git a/devspec.en_US/project/recutils/build-aux/config.sub b/devspec.en_US/project/recutils/build-aux/config.sub new file mode 100755 index 0000000..a8f3f7e --- /dev/null +++ b/devspec.en_US/project/recutils/build-aux/config.sub @@ -0,0 +1,1791 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2019 Free Software Foundation, Inc. + +timestamp='2019-01-01' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see <https://www.gnu.org/licenses/>. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches to <config-patches@gnu.org>. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS + +Canonicalize a configuration name. + +Options: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to <config-patches@gnu.org>." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2019 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo "$1" + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Split fields of configuration type +IFS="-" read field1 field2 field3 field4 <<EOF +$1 +EOF + +# Separate into logical components for further validation +case $1 in + *-*-*-*-*) + echo Invalid configuration \`"$1"\': more than four components >&2 + exit 1 + ;; + *-*-*-*) + basic_machine=$field1-$field2 + os=$field3-$field4 + ;; + *-*-*) + # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two + # parts + maybe_os=$field2-$field3 + case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \ + | linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \ + | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ + | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ + | storm-chaos* | os2-emx* | rtmk-nova*) + basic_machine=$field1 + os=$maybe_os + ;; + android-linux) + basic_machine=$field1-unknown + os=linux-android + ;; + *) + basic_machine=$field1-$field2 + os=$field3 + ;; + esac + ;; + *-*) + # A lone config we happen to match not fitting any pattern + case $field1-$field2 in + decstation-3100) + basic_machine=mips-dec + os= + ;; + *-*) + # Second component is usually, but not always the OS + case $field2 in + # Prevent following clause from handling this valid os + sun*os*) + basic_machine=$field1 + os=$field2 + ;; + # Manufacturers + dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ + | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ + | unicom* | ibm* | next | hp | isi* | apollo | altos* \ + | convergent* | ncr* | news | 32* | 3600* | 3100* \ + | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ + | ultra | tti* | harris | dolphin | highlevel | gould \ + | cbm | ns | masscomp | apple | axis | knuth | cray \ + | microblaze* | sim | cisco \ + | oki | wec | wrs | winbond) + basic_machine=$field1-$field2 + os= + ;; + *) + basic_machine=$field1 + os=$field2 + ;; + esac + ;; + esac + ;; + *) + # Convert single-component short-hands not valid as part of + # multi-component configurations. + case $field1 in + 386bsd) + basic_machine=i386-pc + os=bsd + ;; + a29khif) + basic_machine=a29k-amd + os=udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=scout + ;; + alliant) + basic_machine=fx80-alliant + os= + ;; + altos | altos3068) + basic_machine=m68k-altos + os= + ;; + am29k) + basic_machine=a29k-none + os=bsd + ;; + amdahl) + basic_machine=580-amdahl + os=sysv + ;; + amiga) + basic_machine=m68k-unknown + os= + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=bsd + ;; + aros) + basic_machine=i386-pc + os=aros + ;; + aux) + basic_machine=m68k-apple + os=aux + ;; + balance) + basic_machine=ns32k-sequent + os=dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=linux + ;; + cegcc) + basic_machine=arm-unknown + os=cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=bsd + ;; + convex-c2) + basic_machine=c2-convex + os=bsd + ;; + convex-c32) + basic_machine=c32-convex + os=bsd + ;; + convex-c34) + basic_machine=c34-convex + os=bsd + ;; + convex-c38) + basic_machine=c38-convex + os=bsd + ;; + cray) + basic_machine=j90-cray + os=unicos + ;; + crds | unos) + basic_machine=m68k-crds + os= + ;; + da30) + basic_machine=m68k-da30 + os= + ;; + decstation | pmax | pmin | dec3100 | decstatn) + basic_machine=mips-dec + os= + ;; + delta88) + basic_machine=m88k-motorola + os=sysv3 + ;; + dicos) + basic_machine=i686-pc + os=dicos + ;; + djgpp) + basic_machine=i586-pc + os=msdosdjgpp + ;; + ebmon29k) + basic_machine=a29k-amd + os=ebmon + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=ose + ;; + gmicro) + basic_machine=tron-gmicro + os=sysv + ;; + go32) + basic_machine=i386-pc + os=go32 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=hms + ;; + harris) + basic_machine=m88k-harris + os=sysv3 + ;; + hp300) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=hpux + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=proelf + ;; + i386mach) + basic_machine=i386-mach + os=mach + ;; + vsta) + basic_machine=i386-pc + os=vsta + ;; + isi68 | isi) + basic_machine=m68k-isi + os=sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=linux + ;; + magnum | m3230) + basic_machine=mips-mips + os=sysv + ;; + merlin) + basic_machine=ns32k-utek + os=sysv + ;; + mingw64) + basic_machine=x86_64-pc + os=mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=mingw32ce + ;; + monitor) + basic_machine=m68k-rom68k + os=coff + ;; + morphos) + basic_machine=powerpc-unknown + os=morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=moxiebox + ;; + msdos) + basic_machine=i386-pc + os=msdos + ;; + msys) + basic_machine=i686-pc + os=msys + ;; + mvs) + basic_machine=i370-ibm + os=mvs + ;; + nacl) + basic_machine=le32-unknown + os=nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=sysv4 + ;; + netbsd386) + basic_machine=i386-pc + os=netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=newsos + ;; + news1000) + basic_machine=m68030-sony + os=newsos + ;; + necv70) + basic_machine=v70-nec + os=sysv + ;; + nh3000) + basic_machine=m68k-harris + os=cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=cxux + ;; + nindy960) + basic_machine=i960-intel + os=nindy + ;; + mon960) + basic_machine=i960-intel + os=mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=nonstopux + ;; + os400) + basic_machine=powerpc-ibm + os=os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=ose + ;; + os68k) + basic_machine=m68k-none + os=os68k + ;; + paragon) + basic_machine=i860-intel + os=osf + ;; + parisc) + basic_machine=hppa-unknown + os=linux + ;; + pw32) + basic_machine=i586-unknown + os=pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=rdos + ;; + rdos32) + basic_machine=i386-pc + os=rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=coff + ;; + sa29200) + basic_machine=a29k-amd + os=udi + ;; + sei) + basic_machine=mips-sei + os=seiux + ;; + sequent) + basic_machine=i386-sequent + os= + ;; + sps7) + basic_machine=m68k-bull + os=sysv2 + ;; + st2000) + basic_machine=m68k-tandem + os= + ;; + stratus) + basic_machine=i860-stratus + os=sysv4 + ;; + sun2) + basic_machine=m68000-sun + os= + ;; + sun2os3) + basic_machine=m68000-sun + os=sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=sunos4 + ;; + sun3) + basic_machine=m68k-sun + os= + ;; + sun3os3) + basic_machine=m68k-sun + os=sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=sunos4 + ;; + sun4) + basic_machine=sparc-sun + os= + ;; + sun4os3) + basic_machine=sparc-sun + os=sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=solaris2 + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + os= + ;; + sv1) + basic_machine=sv1-cray + os=unicos + ;; + symmetry) + basic_machine=i386-sequent + os=dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=unicos + ;; + t90) + basic_machine=t90-cray + os=unicos + ;; + toad1) + basic_machine=pdp10-xkl + os=tops20 + ;; + tpf) + basic_machine=s390x-ibm + os=tpf + ;; + udi29k) + basic_machine=a29k-amd + os=udi + ;; + ultra3) + basic_machine=a29k-nyu + os=sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=none + ;; + vaxv) + basic_machine=vax-dec + os=sysv + ;; + vms) + basic_machine=vax-dec + os=vms + ;; + vxworks960) + basic_machine=i960-wrs + os=vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=vxworks + ;; + xbox) + basic_machine=i686-pc + os=mingw32 + ;; + ymp) + basic_machine=ymp-cray + os=unicos + ;; + *) + basic_machine=$1 + os= + ;; + esac + ;; +esac + +# Decode 1-component or ad-hoc basic machines +case $basic_machine in + # Here we handle the default manufacturer of certain CPU types. It is in + # some cases the only manufacturer, in others, it is the most popular. + w89k) + cpu=hppa1.1 + vendor=winbond + ;; + op50n) + cpu=hppa1.1 + vendor=oki + ;; + op60c) + cpu=hppa1.1 + vendor=oki + ;; + ibm*) + cpu=i370 + vendor=ibm + ;; + orion105) + cpu=clipper + vendor=highlevel + ;; + mac | mpw | mac-mpw) + cpu=m68k + vendor=apple + ;; + pmac | pmac-mpw) + cpu=powerpc + vendor=apple + ;; + + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + cpu=m68000 + vendor=att + ;; + 3b*) + cpu=we32k + vendor=att + ;; + bluegene*) + cpu=powerpc + vendor=ibm + os=cnk + ;; + decsystem10* | dec10*) + cpu=pdp10 + vendor=dec + os=tops10 + ;; + decsystem20* | dec20*) + cpu=pdp10 + vendor=dec + os=tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + cpu=m68k + vendor=motorola + ;; + dpx2*) + cpu=m68k + vendor=bull + os=sysv3 + ;; + encore | umax | mmax) + cpu=ns32k + vendor=encore + ;; + elxsi) + cpu=elxsi + vendor=elxsi + os=${os:-bsd} + ;; + fx2800) + cpu=i860 + vendor=alliant + ;; + genix) + cpu=ns32k + vendor=ns + ;; + h3050r* | hiux*) + cpu=hppa1.1 + vendor=hitachi + os=hiuxwe2 + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + cpu=m68000 + vendor=hp + ;; + hp9k3[2-9][0-9]) + cpu=m68k + vendor=hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + cpu=hppa1.1 + vendor=hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + cpu=hppa1.0 + vendor=hp + ;; + i*86v32) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + os=sysv32 + ;; + i*86v4*) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + os=sysv4 + ;; + i*86v) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + os=sysv + ;; + i*86sol2) + cpu=`echo "$1" | sed -e 's/86.*/86/'` + vendor=pc + os=solaris2 + ;; + j90 | j90-cray) + cpu=j90 + vendor=cray + os=${os:-unicos} + ;; + iris | iris4d) + cpu=mips + vendor=sgi + case $os in + irix*) + ;; + *) + os=irix4 + ;; + esac + ;; + miniframe) + cpu=m68000 + vendor=convergent + ;; + *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) + cpu=m68k + vendor=atari + os=mint + ;; + news-3600 | risc-news) + cpu=mips + vendor=sony + os=newsos + ;; + next | m*-next) + cpu=m68k + vendor=next + case $os in + nextstep* ) + ;; + ns2*) + os=nextstep2 + ;; + *) + os=nextstep3 + ;; + esac + ;; + np1) + cpu=np1 + vendor=gould + ;; + op50n-* | op60c-*) + cpu=hppa1.1 + vendor=oki + os=proelf + ;; + pa-hitachi) + cpu=hppa1.1 + vendor=hitachi + os=hiuxwe2 + ;; + pbd) + cpu=sparc + vendor=tti + ;; + pbb) + cpu=m68k + vendor=tti + ;; + pc532) + cpu=ns32k + vendor=pc532 + ;; + pn) + cpu=pn + vendor=gould + ;; + power) + cpu=power + vendor=ibm + ;; + ps2) + cpu=i386 + vendor=ibm + ;; + rm[46]00) + cpu=mips + vendor=siemens + ;; + rtpc | rtpc-*) + cpu=romp + vendor=ibm + ;; + sde) + cpu=mipsisa32 + vendor=sde + os=${os:-elf} + ;; + simso-wrs) + cpu=sparclite + vendor=wrs + os=vxworks + ;; + tower | tower-32) + cpu=m68k + vendor=ncr + ;; + vpp*|vx|vx-*) + cpu=f301 + vendor=fujitsu + ;; + w65) + cpu=w65 + vendor=wdc + ;; + w89k-*) + cpu=hppa1.1 + vendor=winbond + os=proelf + ;; + none) + cpu=none + vendor=none + ;; + leon|leon[3-9]) + cpu=sparc + vendor=$basic_machine + ;; + leon-*|leon[3-9]-*) + cpu=sparc + vendor=`echo "$basic_machine" | sed 's/-.*//'` + ;; + + *-*) + IFS="-" read cpu vendor <<EOF +$basic_machine +EOF + ;; + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + cpu=$basic_machine + vendor=pc + ;; + # These rules are duplicated from below for sake of the special case above; + # i.e. things that normalized to x86 arches should also default to "pc" + pc98) + cpu=i386 + vendor=pc + ;; + x64 | amd64) + cpu=x86_64 + vendor=pc + ;; + # Recognize the basic CPU types without company name. + *) + cpu=$basic_machine + vendor=unknown + ;; +esac + +unset -v basic_machine + +# Decode basic machines in the full and proper CPU-Company form. +case $cpu-$vendor in + # Here we handle the default manufacturer of certain CPU types in canonical form. It is in + # some cases the only manufacturer, in others, it is the most popular. + craynv-unknown) + vendor=cray + os=${os:-unicosmp} + ;; + c90-unknown | c90-cray) + vendor=cray + os=${os:-unicos} + ;; + fx80-unknown) + vendor=alliant + ;; + romp-unknown) + vendor=ibm + ;; + mmix-unknown) + vendor=knuth + ;; + microblaze-unknown | microblazeel-unknown) + vendor=xilinx + ;; + rs6000-unknown) + vendor=ibm + ;; + vax-unknown) + vendor=dec + ;; + pdp11-unknown) + vendor=dec + ;; + we32k-unknown) + vendor=att + ;; + cydra-unknown) + vendor=cydrome + ;; + i370-ibm*) + vendor=ibm + ;; + orion-unknown) + vendor=highlevel + ;; + xps-unknown | xps100-unknown) + cpu=xps100 + vendor=honeywell + ;; + + # Here we normalize CPU types with a missing or matching vendor + dpx20-unknown | dpx20-bull) + cpu=rs6000 + vendor=bull + os=${os:-bosx} + ;; + + # Here we normalize CPU types irrespective of the vendor + amd64-*) + cpu=x86_64 + ;; + blackfin-*) + cpu=bfin + os=linux + ;; + c54x-*) + cpu=tic54x + ;; + c55x-*) + cpu=tic55x + ;; + c6x-*) + cpu=tic6x + ;; + e500v[12]-*) + cpu=powerpc + os=$os"spe" + ;; + mips3*-*) + cpu=mips64 + ;; + ms1-*) + cpu=mt + ;; + m68knommu-*) + cpu=m68k + os=linux + ;; + m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*) + cpu=s12z + ;; + openrisc-*) + cpu=or32 + ;; + parisc-*) + cpu=hppa + os=linux + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + cpu=i586 + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*) + cpu=i686 + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + cpu=i686 + ;; + pentium4-*) + cpu=i786 + ;; + pc98-*) + cpu=i386 + ;; + ppc-* | ppcbe-*) + cpu=powerpc + ;; + ppcle-* | powerpclittle-*) + cpu=powerpcle + ;; + ppc64-*) + cpu=powerpc64 + ;; + ppc64le-* | powerpc64little-*) + cpu=powerpc64le + ;; + sb1-*) + cpu=mipsisa64sb1 + ;; + sb1el-*) + cpu=mipsisa64sb1el + ;; + sh5e[lb]-*) + cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'` + ;; + spur-*) + cpu=spur + ;; + strongarm-* | thumb-*) + cpu=arm + ;; + tx39-*) + cpu=mipstx39 + ;; + tx39el-*) + cpu=mipstx39el + ;; + x64-*) + cpu=x86_64 + ;; + xscale-* | xscalee[bl]-*) + cpu=`echo "$cpu" | sed 's/^xscale/arm/'` + ;; + + # Recognize the canonical CPU Types that limit and/or modify the + # company names they are paired with. + cr16-*) + os=${os:-elf} + ;; + crisv32-* | etraxfs*-*) + cpu=crisv32 + vendor=axis + ;; + cris-* | etrax*-*) + cpu=cris + vendor=axis + ;; + crx-*) + os=${os:-elf} + ;; + neo-tandem) + cpu=neo + vendor=tandem + ;; + nse-tandem) + cpu=nse + vendor=tandem + ;; + nsr-tandem) + cpu=nsr + vendor=tandem + ;; + nsv-tandem) + cpu=nsv + vendor=tandem + ;; + nsx-tandem) + cpu=nsx + vendor=tandem + ;; + s390-*) + cpu=s390 + vendor=ibm + ;; + s390x-*) + cpu=s390x + vendor=ibm + ;; + tile*-*) + os=${os:-linux-gnu} + ;; + + *) + # Recognize the canonical CPU types that are allowed with any + # company name. + case $cpu in + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | abacus \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ + | alphapca5[67] | alpha64pca5[67] \ + | am33_2.0 \ + | amdgcn \ + | arc | arceb \ + | arm | arm[lb]e | arme[lb] | armv* \ + | avr | avr32 \ + | asmjs \ + | ba \ + | be32 | be64 \ + | bfin | bs2000 \ + | c[123]* | c30 | [cjt]90 | c4x \ + | c8051 | clipper | craynv | csky | cydra \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | elxsi | epiphany \ + | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ + | h8300 | h8500 \ + | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i*86 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle \ + | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k | v70 | w65 \ + | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip \ + | m88110 | m88k | maxq | mb | mcore | mep | metag \ + | microblaze | microblazeel \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mmix \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nfp \ + | nios | nios2 | nios2eb | nios2el \ + | none | np1 | ns16k | ns32k \ + | open8 \ + | or1k* \ + | or32 \ + | orion \ + | pdp10 | pdp11 | pj | pjl | pn | power \ + | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ + | pru \ + | pyramid \ + | riscv | riscv32 | riscv64 \ + | rl78 | romp | rs6000 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ + | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ + | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ + | spu \ + | tahoe \ + | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ + | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ + | vax \ + | visium \ + | wasm32 \ + | we32k \ + | x86 | x86_64 | xc16x | xgate | xps100 \ + | xstormy16 | xtensa* \ + | ymp \ + | z8k | z80) + ;; + + *) + echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2 + exit 1 + ;; + esac + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $vendor in + digital*) + vendor=dec + ;; + commodore*) + vendor=cbm + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x$os != x ] +then +case $os in + # First match some system type aliases that might get confused + # with valid system types. + # solaris* is a basic system type, with this one exception. + auroraux) + os=auroraux + ;; + bluegene*) + os=cnk + ;; + solaris1 | solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + solaris) + os=solaris2 + ;; + unixware*) + os=sysv4.2uw + ;; + gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # es1800 is here to avoid being matched by es* (a different OS) + es1800*) + os=ose + ;; + # Some version numbers need modification + chorusos*) + os=chorusos + ;; + isc) + os=isc2.2 + ;; + sco6) + os=sco5v6 + ;; + sco5) + os=sco3.2v5 + ;; + sco4) + os=sco3.2v4 + ;; + sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + ;; + sco3.2v[4-9]* | sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + ;; + scout) + # Don't match below + ;; + sco*) + os=sco3.2v2 + ;; + psos*) + os=psos + ;; + # Now accept the basic system types. + # The portable systems comes first. + # Each alternative MUST end in a * to match a version number. + # sysv* is not here because it comes later, after sysvr4. + gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ + | *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\ + | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ + | sym* | kopensolaris* | plan9* \ + | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ + | aos* | aros* | cloudabi* | sortix* \ + | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ + | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ + | knetbsd* | mirbsd* | netbsd* \ + | bitrig* | openbsd* | solidbsd* | libertybsd* \ + | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \ + | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ + | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ + | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \ + | chorusrdb* | cegcc* | glidix* \ + | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ + | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \ + | linux-newlib* | linux-musl* | linux-uclibc* \ + | uxpv* | beos* | mpeix* | udk* | moxiebox* \ + | interix* | uwin* | mks* | rhapsody* | darwin* \ + | openstep* | oskit* | conix* | pw32* | nonstopux* \ + | storm-chaos* | tops10* | tenex* | tops20* | its* \ + | os2* | vos* | palmos* | uclinux* | nucleus* \ + | morphos* | superux* | rtmk* | windiss* \ + | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ + | skyos* | haiku* | rdos* | toppers* | drops* | es* \ + | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ + | midnightbsd* | amdhsa* | unleashed* | emscripten*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + qnx*) + case $cpu in + x86 | i*86) + ;; + *) + os=nto-$os + ;; + esac + ;; + hiux*) + os=hiuxwe2 + ;; + nto-qnx*) + ;; + nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + sim | xray | os68k* | v88r* \ + | windows* | osx | abug | netware* | os9* \ + | macos* | mpw* | magic* | mmixware* | mon960* | lnews*) + ;; + linux-dietlibc) + os=linux-dietlibc + ;; + linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + lynx*178) + os=lynxos178 + ;; + lynx*5) + os=lynxos5 + ;; + lynx*) + os=lynxos + ;; + mac*) + os=`echo "$os" | sed -e 's|mac|macos|'` + ;; + opened*) + os=openedition + ;; + os400*) + os=os400 + ;; + sunos5*) + os=`echo "$os" | sed -e 's|sunos5|solaris2|'` + ;; + sunos6*) + os=`echo "$os" | sed -e 's|sunos6|solaris3|'` + ;; + wince*) + os=wince + ;; + utek*) + os=bsd + ;; + dynix*) + os=bsd + ;; + acis*) + os=aos + ;; + atheos*) + os=atheos + ;; + syllable*) + os=syllable + ;; + 386bsd) + os=bsd + ;; + ctix* | uts*) + os=sysv + ;; + nova*) + os=rtmk-nova + ;; + ns2) + os=nextstep2 + ;; + nsk*) + os=nsk + ;; + # Preserve the version number of sinix5. + sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + sinix*) + os=sysv4 + ;; + tpf*) + os=tpf + ;; + triton*) + os=sysv3 + ;; + oss*) + os=sysv3 + ;; + svr4*) + os=sysv4 + ;; + svr3) + os=sysv3 + ;; + sysvr4) + os=sysv4 + ;; + # This must come after sysvr4. + sysv*) + ;; + ose*) + os=ose + ;; + *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) + os=mint + ;; + zvmoe) + os=zvmoe + ;; + dicos*) + os=dicos + ;; + pikeos*) + # Until real need of OS specific support for + # particular features comes up, bare metal + # configurations are quite functional. + case $cpu in + arm*) + os=eabi + ;; + *) + os=elf + ;; + esac + ;; + nacl*) + ;; + ios) + ;; + none) + ;; + *-eabi) + ;; + *) + echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $cpu-$vendor in + score-*) + os=elf + ;; + spu-*) + os=elf + ;; + *-acorn) + os=riscix1.2 + ;; + arm*-rebel) + os=linux + ;; + arm*-semi) + os=aout + ;; + c4x-* | tic4x-*) + os=coff + ;; + c8051-*) + os=elf + ;; + clipper-intergraph) + os=clix + ;; + hexagon-*) + os=elf + ;; + tic54x-*) + os=coff + ;; + tic55x-*) + os=coff + ;; + tic6x-*) + os=coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=tops20 + ;; + pdp11-*) + os=none + ;; + *-dec | vax-*) + os=ultrix4.2 + ;; + m68*-apollo) + os=domain + ;; + i386-sun) + os=sunos4.0.2 + ;; + m68000-sun) + os=sunos3 + ;; + m68*-cisco) + os=aout + ;; + mep-*) + os=elf + ;; + mips*-cisco) + os=elf + ;; + mips*-*) + os=elf + ;; + or32-*) + os=coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=sysv3 + ;; + sparc-* | *-sun) + os=sunos4.1.1 + ;; + pru-*) + os=elf + ;; + *-be) + os=beos + ;; + *-ibm) + os=aix + ;; + *-knuth) + os=mmixware + ;; + *-wec) + os=proelf + ;; + *-winbond) + os=proelf + ;; + *-oki) + os=proelf + ;; + *-hp) + os=hpux + ;; + *-hitachi) + os=hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=sysv + ;; + *-cbm) + os=amigaos + ;; + *-dg) + os=dgux + ;; + *-dolphin) + os=sysv3 + ;; + m68k-ccur) + os=rtu + ;; + m88k-omron*) + os=luna + ;; + *-next) + os=nextstep + ;; + *-sequent) + os=ptx + ;; + *-crds) + os=unos + ;; + *-ns) + os=genix + ;; + i370-*) + os=mvs + ;; + *-gould) + os=sysv + ;; + *-highlevel) + os=bsd + ;; + *-encore) + os=bsd + ;; + *-sgi) + os=irix + ;; + *-siemens) + os=sysv4 + ;; + *-masscomp) + os=rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=uxpv + ;; + *-rom68k) + os=coff + ;; + *-*bug) + os=coff + ;; + *-apple) + os=macos + ;; + *-atari*) + os=mint + ;; + *-wrs) + os=vxworks + ;; + *) + os=none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +case $vendor in + unknown) + case $os in + riscix*) + vendor=acorn + ;; + sunos*) + vendor=sun + ;; + cnk*|-aix*) + vendor=ibm + ;; + beos*) + vendor=be + ;; + hpux*) + vendor=hp + ;; + mpeix*) + vendor=hp + ;; + hiux*) + vendor=hitachi + ;; + unos*) + vendor=crds + ;; + dgux*) + vendor=dg + ;; + luna*) + vendor=omron + ;; + genix*) + vendor=ns + ;; + clix*) + vendor=intergraph + ;; + mvs* | opened*) + vendor=ibm + ;; + os400*) + vendor=ibm + ;; + ptx*) + vendor=sequent + ;; + tpf*) + vendor=ibm + ;; + vxsim* | vxworks* | windiss*) + vendor=wrs + ;; + aux*) + vendor=apple + ;; + hms*) + vendor=hitachi + ;; + mpw* | macos*) + vendor=apple + ;; + *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) + vendor=atari + ;; + vos*) + vendor=stratus + ;; + esac + ;; +esac + +echo "$cpu-$vendor-$os" +exit + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/devspec.en_US/project/recutils/build-aux/depcomp b/devspec.en_US/project/recutils/build-aux/depcomp new file mode 100755 index 0000000..65cbf70 --- /dev/null +++ b/devspec.en_US/project/recutils/build-aux/depcomp @@ -0,0 +1,791 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2018-03-07.03; # UTC + +# Copyright (C) 1999-2018 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>. + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to <bug-automake@gnu.org>. +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Avoid interferences from the environment. +gccflag= dashmflag= + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The second -e expression handles DOS-style file names with drive + # letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the "deleted header file" problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. +## Some versions of gcc put a space before the ':'. On the theory +## that the space means something, we add a space to the output as +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like '#:fec' to the end of the + # dependency line. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" + # The second pass generates a dummy entry for each header file. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" + ;; + +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts '$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using '\' : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi + + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for ':' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. + "$@" $dashmflag | + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: diff --git a/devspec.en_US/project/recutils/build-aux/gendocs.sh b/devspec.en_US/project/recutils/build-aux/gendocs.sh new file mode 100755 index 0000000..fd6a4b8 --- /dev/null +++ b/devspec.en_US/project/recutils/build-aux/gendocs.sh @@ -0,0 +1,510 @@ +#!/bin/sh -e +# gendocs.sh -- generate a GNU manual in many formats. This script is +# mentioned in maintain.texi. See the help message below for usage details. + +scriptversion=2019-01-01.00 + +# Copyright 2003-2019 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. +# +# Original author: Mohit Agarwal. +# Send bug reports and any other correspondence to bug-gnulib@gnu.org. +# +# The latest version of this script, and the companion template, is +# available from the Gnulib repository: +# +# https://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh +# https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template + +# TODO: +# - image importing was only implemented for HTML generated by +# makeinfo. But it should be simple enough to adjust. +# - images are not imported in the source tarball. All the needed +# formats (PDF, PNG, etc.) should be included. + +prog=`basename "$0"` +srcdir=`pwd` + +scripturl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/build-aux/gendocs.sh" +templateurl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/doc/gendocs_template" + +: ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="} +: ${MAKEINFO="makeinfo"} +: ${TEXI2DVI="texi2dvi"} +: ${DOCBOOK2HTML="docbook2html"} +: ${DOCBOOK2PDF="docbook2pdf"} +: ${DOCBOOK2TXT="docbook2txt"} +: ${GENDOCS_TEMPLATE_DIR="."} +: ${PERL='perl'} +: ${TEXI2HTML="texi2html"} +unset CDPATH +unset use_texi2html + +MANUAL_TITLE= +PACKAGE= +EMAIL=webmasters@gnu.org # please override with --email +commonarg= # passed to all makeinfo/texi2html invcations. +dirargs= # passed to all tools (-I dir). +dirs= # -I directories. +htmlarg="--css-ref=/software/gnulib/manual.css -c TOP_NODE_UP_URL=/manual" +default_htmlarg=true +infoarg=--no-split +generate_ascii=true +generate_html=true +generate_info=true +generate_tex=true +outdir=manual +source_extra= +split=node +srcfile= +texarg="-t @finalout" + +version="gendocs.sh $scriptversion + +Copyright 2019 Free Software Foundation, Inc. +There is NO warranty. You may redistribute this software +under the terms of the GNU General Public License. +For more information about these matters, see the files named COPYING." + +usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE + +Generate output in various formats from PACKAGE.texinfo (or .texi or +.txi) source. See the GNU Maintainers document for a more extensive +discussion: + https://www.gnu.org/prep/maintain_toc.html + +Options: + --email ADR use ADR as contact in generated web pages; always give this. + + -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi} + -o OUTDIR write files into OUTDIR, instead of manual/. + -I DIR append DIR to the Texinfo search path. + --common ARG pass ARG in all invocations. + --html ARG pass ARG to makeinfo or texi2html for HTML targets, + instead of '$htmlarg'. + --info ARG pass ARG to makeinfo for Info, instead of --no-split. + --no-ascii skip generating the plain text output. + --no-html skip generating the html output. + --no-info skip generating the info output. + --no-tex skip generating the dvi and pdf output. + --source ARG include ARG in tar archive of sources. + --split HOW make split HTML by node, section, chapter; default node. + --tex ARG pass ARG to texi2dvi for DVI and PDF, instead of -t @finalout. + + --texi2html use texi2html to make HTML target, with all split versions. + --docbook convert through DocBook too (xml, txt, html, pdf). + + --help display this help and exit successfully. + --version display version information and exit successfully. + +Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\" + +Typical sequence: + cd PACKAGESOURCE/doc + wget \"$scripturl\" + wget \"$templateurl\" + $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\" + +Output will be in a new subdirectory \"manual\" (by default; +use -o OUTDIR to override). Move all the new files into your web CVS +tree, as explained in the Web Pages node of maintain.texi. + +Please use the --email ADDRESS option so your own bug-reporting +address will be used in the generated HTML pages. + +MANUAL-TITLE is included as part of the HTML <title> of the overall +manual/index.html file. It should include the name of the package being +documented. manual/index.html is created by substitution from the file +$GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the +generic template for your own purposes.) + +If you have several manuals, you'll need to run this script several +times with different MANUAL values, specifying a different output +directory with -o each time. Then write (by hand) an overall index.html +with links to them all. + +If a manual's Texinfo sources are spread across several directories, +first copy or symlink all Texinfo sources into a single directory. +(Part of the script's work is to make a tar.gz of the sources.) + +As implied above, by default monolithic Info files are generated. +If you want split Info, or other Info options, use --info to override. + +You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML, +and PERL to control the programs that get executed, and +GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is +looked for. With --docbook, the environment variables DOCBOOK2HTML, +DOCBOOK2PDF, and DOCBOOK2TXT are also consulted. + +By default, makeinfo and texi2dvi are run in the default (English) +locale, since that's the language of most Texinfo manuals. If you +happen to have a non-English manual and non-English web site, see the +SETLANG setting in the source. + +Email bug reports or enhancement requests to bug-gnulib@gnu.org. +" + +while test $# -gt 0; do + case $1 in + -s) shift; srcfile=$1;; + -o) shift; outdir=$1;; + -I) shift; dirargs="$dirargs -I '$1'"; dirs="$dirs $1";; + --common) shift; commonarg=$1;; + --docbook) docbook=yes;; + --email) shift; EMAIL=$1;; + --html) shift; default_htmlarg=false; htmlarg=$1;; + --info) shift; infoarg=$1;; + --no-ascii) generate_ascii=false;; + --no-html) generate_ascii=false;; + --no-info) generate_info=false;; + --no-tex) generate_tex=false;; + --source) shift; source_extra=$1;; + --split) shift; split=$1;; + --tex) shift; texarg=$1;; + --texi2html) use_texi2html=1;; + + --help) echo "$usage"; exit 0;; + --version) echo "$version"; exit 0;; + -*) + echo "$0: Unknown option \`$1'." >&2 + echo "$0: Try \`--help' for more information." >&2 + exit 1;; + *) + if test -z "$PACKAGE"; then + PACKAGE=$1 + elif test -z "$MANUAL_TITLE"; then + MANUAL_TITLE=$1 + else + echo "$0: extra non-option argument \`$1'." >&2 + exit 1 + fi;; + esac + shift +done + +# makeinfo uses the dirargs, but texi2dvi doesn't. +commonarg=" $dirargs $commonarg" + +# For most of the following, the base name is just $PACKAGE +base=$PACKAGE + +if $default_htmlarg && test -n "$use_texi2html"; then + # The legacy texi2html doesn't support TOP_NODE_UP_URL + htmlarg="--css-ref=/software/gnulib/manual.css" +fi + +if test -n "$srcfile"; then + # but here, we use the basename of $srcfile + base=`basename "$srcfile"` + case $base in + *.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;; + esac + PACKAGE=$base +elif test -s "$srcdir/$PACKAGE.texinfo"; then + srcfile=$srcdir/$PACKAGE.texinfo +elif test -s "$srcdir/$PACKAGE.texi"; then + srcfile=$srcdir/$PACKAGE.texi +elif test -s "$srcdir/$PACKAGE.txi"; then + srcfile=$srcdir/$PACKAGE.txi +else + echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2 + exit 1 +fi + +if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then + echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2 + echo "$0: it is available from $templateurl." >&2 + exit 1 +fi + +# Function to return size of $1 in something resembling kilobytes. +calcsize() +{ + size=`ls -ksl $1 | awk '{print $1}'` + echo $size +} + +# copy_images OUTDIR HTML-FILE... +# ------------------------------- +# Copy all the images needed by the HTML-FILEs into OUTDIR. +# Look for them in . and the -I directories; this is simpler than what +# makeinfo supports with -I, but hopefully it will suffice. +copy_images() +{ + local odir + odir=$1 + shift + $PERL -n -e " +BEGIN { + \$me = '$prog'; + \$odir = '$odir'; + @dirs = qw(. $dirs); +} +" -e ' +/<img src="(.*?)"/g && ++$need{$1}; + +END { + #print "$me: @{[keys %need]}\n"; # for debugging, show images found. + FILE: for my $f (keys %need) { + for my $d (@dirs) { + if (-f "$d/$f") { + use File::Basename; + my $dest = dirname ("$odir/$f"); + # + use File::Path; + -d $dest || mkpath ($dest) + || die "$me: cannot mkdir $dest: $!\n"; + # + use File::Copy; + copy ("$d/$f", $dest) + || die "$me: cannot copy $d/$f to $dest: $!\n"; + next FILE; + } + } + die "$me: $ARGV: cannot find image $f\n"; + } +} +' -- "$@" || exit 1 +} + +case $outdir in + /*) abs_outdir=$outdir;; + *) abs_outdir=$srcdir/$outdir;; +esac + +echo "Making output for $srcfile" +echo " in `pwd`" +mkdir -p "$outdir/" + +# +if $generate_info; then + cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\"" + echo "Generating info... ($cmd)" + rm -f $PACKAGE.info* # get rid of any strays + eval "$cmd" + tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info* + ls -l "$outdir/$PACKAGE.info.tar.gz" + info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"` + # do not mv the info files, there's no point in having them available + # separately on the web. +fi # end info + +# +if $generate_tex; then + cmd="$SETLANG $TEXI2DVI $dirargs $texarg \"$srcfile\"" + printf "\nGenerating dvi... ($cmd)\n" + eval "$cmd" + # compress/finish dvi: + gzip -f -9 $PACKAGE.dvi + dvi_gz_size=`calcsize $PACKAGE.dvi.gz` + mv $PACKAGE.dvi.gz "$outdir/" + ls -l "$outdir/$PACKAGE.dvi.gz" + + cmd="$SETLANG $TEXI2DVI --pdf $dirargs $texarg \"$srcfile\"" + printf "\nGenerating pdf... ($cmd)\n" + eval "$cmd" + pdf_size=`calcsize $PACKAGE.pdf` + mv $PACKAGE.pdf "$outdir/" + ls -l "$outdir/$PACKAGE.pdf" +fi # end tex (dvi + pdf) + +# +if $generate_ascii; then + opt="-o $PACKAGE.txt --no-split --no-headers $commonarg" + cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" + printf "\nGenerating ascii... ($cmd)\n" + eval "$cmd" + ascii_size=`calcsize $PACKAGE.txt` + gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz" + ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"` + mv $PACKAGE.txt "$outdir/" + ls -l "$outdir/$PACKAGE.txt" "$outdir/$PACKAGE.txt.gz" +fi + +# + +if $generate_html; then +# Split HTML at level $1. Used for texi2html. +html_split() +{ + opt="--split=$1 --node-files $commonarg $htmlarg" + cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\"" + printf "\nGenerating html by $1... ($cmd)\n" + eval "$cmd" + split_html_dir=$PACKAGE.html + ( + cd ${split_html_dir} || exit 1 + ln -sf ${PACKAGE}.html index.html + tar -czf "$abs_outdir/${PACKAGE}.html_$1.tar.gz" -- *.html + ) + eval html_$1_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$1.tar.gz"` + rm -f "$outdir"/html_$1/*.html + mkdir -p "$outdir/html_$1/" + mv ${split_html_dir}/*.html "$outdir/html_$1/" + rmdir ${split_html_dir} +} + +if test -z "$use_texi2html"; then + opt="--no-split --html -o $PACKAGE.html $commonarg $htmlarg" + cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" + printf "\nGenerating monolithic html... ($cmd)\n" + rm -rf $PACKAGE.html # in case a directory is left over + eval "$cmd" + html_mono_size=`calcsize $PACKAGE.html` + gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" + html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` + copy_images "$outdir/" $PACKAGE.html + mv $PACKAGE.html "$outdir/" + ls -l "$outdir/$PACKAGE.html" "$outdir/$PACKAGE.html.gz" + + # Before Texinfo 5.0, makeinfo did not accept a --split=HOW option, + # it just always split by node. So if we're splitting by node anyway, + # leave it out. + if test "x$split" = xnode; then + split_arg= + else + split_arg=--split=$split + fi + # + opt="--html -o $PACKAGE.html $split_arg $commonarg $htmlarg" + cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" + printf "\nGenerating html by $split... ($cmd)\n" + eval "$cmd" + split_html_dir=$PACKAGE.html + copy_images $split_html_dir/ $split_html_dir/*.html + ( + cd $split_html_dir || exit 1 + tar -czf "$abs_outdir/$PACKAGE.html_$split.tar.gz" -- * + ) + eval \ + html_${split}_tgz_size=`calcsize "$outdir/$PACKAGE.html_$split.tar.gz"` + rm -rf "$outdir/html_$split/" + mv $split_html_dir "$outdir/html_$split/" + du -s "$outdir/html_$split/" + ls -l "$outdir/$PACKAGE.html_$split.tar.gz" + +else # use texi2html: + opt="--output $PACKAGE.html $commonarg $htmlarg" + cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\"" + printf "\nGenerating monolithic html with texi2html... ($cmd)\n" + rm -rf $PACKAGE.html # in case a directory is left over + eval "$cmd" + html_mono_size=`calcsize $PACKAGE.html` + gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" + html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` + mv $PACKAGE.html "$outdir/" + + html_split node + html_split chapter + html_split section +fi +fi # end html + +# +printf "\nMaking .tar.gz for sources...\n" +d=`dirname $srcfile` +( + cd "$d" + srcfiles=`ls -d *.texinfo *.texi *.txi *.eps $source_extra 2>/dev/null` || true + tar czfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles + ls -l "$abs_outdir/$PACKAGE.texi.tar.gz" +) +texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"` + +# +# Do everything again through docbook. +if test -n "$docbook"; then + opt="-o - --docbook $commonarg" + cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml" + printf "\nGenerating docbook XML... ($cmd)\n" + eval "$cmd" + docbook_xml_size=`calcsize $PACKAGE-db.xml` + gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz" + docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"` + mv $PACKAGE-db.xml "$outdir/" + + split_html_db_dir=html_node_db + opt="$commonarg -o $split_html_db_dir" + cmd="$DOCBOOK2HTML $opt \"${outdir}/$PACKAGE-db.xml\"" + printf "\nGenerating docbook HTML... ($cmd)\n" + eval "$cmd" + ( + cd ${split_html_db_dir} || exit 1 + tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html + ) + html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"` + rm -f "$outdir"/html_node_db/*.html + mkdir -p "$outdir/html_node_db" + mv ${split_html_db_dir}/*.html "$outdir/html_node_db/" + rmdir ${split_html_db_dir} + + cmd="$DOCBOOK2TXT \"${outdir}/$PACKAGE-db.xml\"" + printf "\nGenerating docbook ASCII... ($cmd)\n" + eval "$cmd" + docbook_ascii_size=`calcsize $PACKAGE-db.txt` + mv $PACKAGE-db.txt "$outdir/" + + cmd="$DOCBOOK2PDF \"${outdir}/$PACKAGE-db.xml\"" + printf "\nGenerating docbook PDF... ($cmd)\n" + eval "$cmd" + docbook_pdf_size=`calcsize $PACKAGE-db.pdf` + mv $PACKAGE-db.pdf "$outdir/" +fi + +# +printf "\nMaking index.html for $PACKAGE...\n" +if test -z "$use_texi2html"; then + CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\ + /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d" +else + # should take account of --split here. + CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d" +fi + +curdate=`$SETLANG date '+%B %d, %Y'` +sed \ + -e "s!%%TITLE%%!$MANUAL_TITLE!g" \ + -e "s!%%EMAIL%%!$EMAIL!g" \ + -e "s!%%PACKAGE%%!$PACKAGE!g" \ + -e "s!%%DATE%%!$curdate!g" \ + -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \ + -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \ + -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \ + -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \ + -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \ + -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \ + -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \ + -e "s!%%PDF_SIZE%%!$pdf_size!g" \ + -e "s!%%ASCII_SIZE%%!$ascii_size!g" \ + -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \ + -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \ + -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \ + -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \ + -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \ + -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \ + -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \ + -e "s,%%SCRIPTURL%%,$scripturl,g" \ + -e "s!%%SCRIPTNAME%%!$prog!g" \ + -e "$CONDS" \ +$GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html" + +echo "Done, see $outdir/ subdirectory for new files." + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/devspec.en_US/project/recutils/build-aux/gnupload b/devspec.en_US/project/recutils/build-aux/gnupload new file mode 100755 index 0000000..edff9be --- /dev/null +++ b/devspec.en_US/project/recutils/build-aux/gnupload @@ -0,0 +1,463 @@ +#!/bin/sh +# Sign files and upload them. + +scriptversion=2018-05-19.18; # UTC + +# Copyright (C) 2004-2019 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +# Originally written by Alexandre Duret-Lutz <adl@gnu.org>. +# The master copy of this file is maintained in the gnulib Git repository. +# Please send bug reports and feature requests to bug-gnulib@gnu.org. + +set -e + +GPG=gpg +# Choose the proper version of gpg, so as to avoid a +# "gpg-agent is not available in this session" error +# when gpg-agent is version 3 but gpg is still version 1. +# FIXME-2020: remove, once all major distros ship gpg version 3 as /usr/bin/gpg +gpg_agent_version=`(gpg-agent --version) 2>/dev/null | sed -e '2,$d' -e 's/^[^0-9]*//'` +case "$gpg_agent_version" in + 2.*) + gpg_version=`(gpg --version) 2>/dev/null | sed -e '2,$d' -e 's/^[^0-9]*//'` + case "$gpg_version" in + 1.*) + if (type gpg2) >/dev/null 2>/dev/null; then + # gpg2 is present. + GPG=gpg2 + else + # gpg2 is missing. Ubuntu users should install the package 'gnupg2'. + echo "WARNING: Using 'gpg', which is too old. You should install 'gpg2'." 1>&2 + fi + ;; + esac + ;; +esac + +GPG="${GPG} --batch --no-tty" +conffile=.gnuploadrc +to= +dry_run=false +replace= +symlink_files= +delete_files= +delete_symlinks= +collect_var= +dbg= +nl=' +' + +usage="Usage: $0 [OPTION]... [CMD] FILE... [[CMD] FILE...] + +Sign all FILES, and process them at the destinations specified with --to. +If CMD is not given, it defaults to uploading. See examples below. + +Commands: + --delete delete FILES from destination + --symlink create symbolic links + --rmsymlink remove symbolic links + -- treat the remaining arguments as files to upload + +Options: + --to DEST specify a destination DEST for FILES + (multiple --to options are allowed) + --user NAME sign with key NAME + --replace allow replacements of existing files + --symlink-regex[=EXPR] use sed script EXPR to compute symbolic link names + -n, --dry-run do nothing, show what would have been done + (including the constructed directive file) + --version output version information and exit + -h, --help print this help text and exit + +If --symlink-regex is given without EXPR, then the link target name +is created by replacing the version information with '-latest', e.g.: + foo-1.3.4.tar.gz -> foo-latest.tar.gz + +Recognized destinations are: + alpha.gnu.org:DIRECTORY + savannah.gnu.org:DIRECTORY + savannah.nongnu.org:DIRECTORY + ftp.gnu.org:DIRECTORY + build directive files and upload files by FTP + download.gnu.org.ua:{alpha|ftp}/DIRECTORY + build directive files and upload files by SFTP + [user@]host:DIRECTORY upload files with scp + +Options and commands are applied in order. If the file $conffile exists +in the current working directory, its contents are prepended to the +actual command line options. Use this to keep your defaults. Comments +(#) and empty lines in $conffile are allowed. + +<https://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html> +gives some further background. + +Examples: +1. Upload foobar-1.0.tar.gz to ftp.gnu.org: + gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz + +2. Upload foobar-1.0.tar.gz and foobar-1.0.tar.xz to ftp.gnu.org: + gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz foobar-1.0.tar.xz + +3. Same as above, and also create symbolic links to foobar-latest.tar.*: + gnupload --to ftp.gnu.org:foobar \\ + --symlink-regex \\ + foobar-1.0.tar.gz foobar-1.0.tar.xz + +4. Upload foobar-0.9.90.tar.gz to two sites: + gnupload --to alpha.gnu.org:foobar \\ + --to sources.redhat.com:~ftp/pub/foobar \\ + foobar-0.9.90.tar.gz + +5. Delete oopsbar-0.9.91.tar.gz and upload foobar-0.9.91.tar.gz + (the -- terminates the list of files to delete): + gnupload --to alpha.gnu.org:foobar \\ + --to sources.redhat.com:~ftp/pub/foobar \\ + --delete oopsbar-0.9.91.tar.gz \\ + -- foobar-0.9.91.tar.gz + +gnupload executes a program ncftpput to do the transfers; if you don't +happen to have an ncftp package installed, the ncftpput-ftp script in +the build-aux/ directory of the gnulib package +(https://savannah.gnu.org/projects/gnulib) may serve as a replacement. + +Send patches and bug reports to <bug-gnulib@gnu.org>." + +# Read local configuration file +if test -r "$conffile"; then + echo "$0: Reading configuration file $conffile" + conf=`sed 's/#.*$//;/^$/d' "$conffile" | tr "\015$nl" ' '` + eval set x "$conf \"\$@\"" + shift +fi + +while test -n "$1"; do + case $1 in + -*) + collect_var= + case $1 in + -h | --help) + echo "$usage" + exit $? + ;; + --to) + if test -z "$2"; then + echo "$0: Missing argument for --to" 1>&2 + exit 1 + elif echo "$2" | grep 'ftp-upload\.gnu\.org' >/dev/null; then + echo "$0: Use ftp.gnu.org:PKGNAME or alpha.gnu.org:PKGNAME" >&2 + echo "$0: for the destination, not ftp-upload.gnu.org (which" >&2 + echo "$0: is used for direct ftp uploads, not with gnupload)." >&2 + echo "$0: See --help and its examples if need be." >&2 + exit 1 + else + to="$to $2" + shift + fi + ;; + --user) + if test -z "$2"; then + echo "$0: Missing argument for --user" 1>&2 + exit 1 + else + GPG="$GPG --local-user $2" + shift + fi + ;; + --delete) + collect_var=delete_files + ;; + --replace) + replace="replace: true" + ;; + --rmsymlink) + collect_var=delete_symlinks + ;; + --symlink-regex=*) + symlink_expr=`expr "$1" : '[^=]*=\(.*\)'` + ;; + --symlink-regex) + symlink_expr='s|-[0-9][0-9\.]*\(-[0-9][0-9]*\)\{0,1\}\.|-latest.|' + ;; + --symlink) + collect_var=symlink_files + ;; + -n | --dry-run) + dry_run=: + ;; + --version) + echo "gnupload $scriptversion" + exit $? + ;; + --) + shift + break + ;; + -*) + echo "$0: Unknown option '$1', try '$0 --help'" 1>&2 + exit 1 + ;; + esac + ;; + *) + if test -z "$collect_var"; then + break + else + eval "$collect_var=\"\$$collect_var $1\"" + fi + ;; + esac + shift +done + +dprint() +{ + echo "Running $* ..." +} + +if $dry_run; then + dbg=dprint +fi + +if test -z "$to"; then + echo "$0: Missing destination sites" >&2 + exit 1 +fi + +if test -n "$symlink_files"; then + x=`echo "$symlink_files" | sed 's/[^ ]//g;s/ //g'` + if test -n "$x"; then + echo "$0: Odd number of symlink arguments" >&2 + exit 1 + fi +fi + +if test $# = 0; then + if test -z "${symlink_files}${delete_files}${delete_symlinks}"; then + echo "$0: No file to upload" 1>&2 + exit 1 + fi +else + # Make sure all files exist. We don't want to ask + # for the passphrase if the script will fail. + for file + do + if test ! -f $file; then + echo "$0: Cannot find '$file'" 1>&2 + exit 1 + elif test -n "$symlink_expr"; then + linkname=`echo $file | sed "$symlink_expr"` + if test -z "$linkname"; then + echo "$0: symlink expression produces empty results" >&2 + exit 1 + elif test "$linkname" = $file; then + echo "$0: symlink expression does not alter file name" >&2 + exit 1 + fi + fi + done +fi + +# Make sure passphrase is not exported in the environment. +unset passphrase +unset passphrase_fd_0 +GNUPGHOME=${GNUPGHOME:-$HOME/.gnupg} + +# Reset PATH to be sure that echo is a built-in. We will later use +# 'echo $passphrase' to output the passphrase, so it is important that +# it is a built-in (third-party programs tend to appear in 'ps' +# listings with their arguments...). +# Remember this script runs with 'set -e', so if echo is not built-in +# it will exit now. +if $dry_run || grep -q "^use-agent" $GNUPGHOME/gpg.conf; then :; else + PATH=/empty echo -n "Enter GPG passphrase: " + stty -echo + read -r passphrase + stty echo + echo + passphrase_fd_0="--passphrase-fd 0" +fi + +if test $# -ne 0; then + for file + do + echo "Signing $file ..." + rm -f $file.sig + echo "$passphrase" | $dbg $GPG $passphrase_fd_0 -ba -o $file.sig $file + done +fi + + +# mkdirective DESTDIR BASE FILE STMT +# Arguments: See upload, below +mkdirective () +{ + stmt="$4" + if test -n "$3"; then + stmt=" +filename: $3$stmt" + fi + + cat >${2}.directive<<EOF +version: 1.2 +directory: $1 +comment: gnupload v. $scriptversion$stmt +EOF + if $dry_run; then + echo "File ${2}.directive:" + cat ${2}.directive + echo "File ${2}.directive:" | sed 's/./-/g' + fi +} + +mksymlink () +{ + while test $# -ne 0 + do + echo "symlink: $1 $2" + shift + shift + done +} + +# upload DEST DESTDIR BASE FILE STMT FILES +# Arguments: +# DEST Destination site; +# DESTDIR Destination directory; +# BASE Base name for the directive file; +# FILE Name of the file to distribute (may be empty); +# STMT Additional statements for the directive file; +# FILES List of files to upload. +upload () +{ + dest=$1 + destdir=$2 + base=$3 + file=$4 + stmt=$5 + files=$6 + + rm -f $base.directive $base.directive.asc + case $dest in + alpha.gnu.org:*) + mkdirective "$destdir" "$base" "$file" "$stmt" + echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive + $dbg ncftpput ftp-upload.gnu.org /incoming/alpha $files $base.directive.asc + ;; + ftp.gnu.org:*) + mkdirective "$destdir" "$base" "$file" "$stmt" + echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive + $dbg ncftpput ftp-upload.gnu.org /incoming/ftp $files $base.directive.asc + ;; + savannah.gnu.org:*) + if test -z "$files"; then + echo "$0: warning: standalone directives not applicable for $dest" >&2 + fi + $dbg ncftpput savannah.gnu.org /incoming/savannah/$destdir $files + ;; + savannah.nongnu.org:*) + if test -z "$files"; then + echo "$0: warning: standalone directives not applicable for $dest" >&2 + fi + $dbg ncftpput savannah.nongnu.org /incoming/savannah/$destdir $files + ;; + download.gnu.org.ua:alpha/*|download.gnu.org.ua:ftp/*) + destdir_p1=`echo "$destdir" | sed 's,^[^/]*/,,'` + destdir_topdir=`echo "$destdir" | sed 's,/.*,,'` + mkdirective "$destdir_p1" "$base" "$file" "$stmt" + echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive + for f in $files $base.directive.asc + do + echo put $f + done | $dbg sftp -b - puszcza.gnu.org.ua:/incoming/$destdir_topdir + ;; + /*) + dest_host=`echo "$dest" | sed 's,:.*,,'` + mkdirective "$destdir" "$base" "$file" "$stmt" + echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive + $dbg cp $files $base.directive.asc $dest_host + ;; + *) + if test -z "$files"; then + echo "$0: warning: standalone directives not applicable for $dest" >&2 + fi + $dbg scp $files $dest + ;; + esac + rm -f $base.directive $base.directive.asc +} + +##### +# Process any standalone directives +stmt= +if test -n "$symlink_files"; then + stmt="$stmt +`mksymlink $symlink_files`" +fi + +for file in $delete_files +do + stmt="$stmt +archive: $file" +done + +for file in $delete_symlinks +do + stmt="$stmt +rmsymlink: $file" +done + +if test -n "$stmt"; then + for dest in $to + do + destdir=`echo $dest | sed 's/[^:]*://'` + upload "$dest" "$destdir" "`hostname`-$$" "" "$stmt" + done +fi + +# Process actual uploads +for dest in $to +do + for file + do + echo "Uploading $file to $dest ..." + stmt= + # + # allowing file replacement is all or nothing. + if test -n "$replace"; then stmt="$stmt +$replace" + fi + # + files="$file $file.sig" + destdir=`echo $dest | sed 's/[^:]*://'` + if test -n "$symlink_expr"; then + linkname=`echo $file | sed "$symlink_expr"` + stmt="$stmt +symlink: $file $linkname +symlink: $file.sig $linkname.sig" + fi + upload "$dest" "$destdir" "$file" "$file" "$stmt" "$files" + done +done + +exit 0 + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: diff --git a/devspec.en_US/project/recutils/build-aux/install-sh b/devspec.en_US/project/recutils/build-aux/install-sh new file mode 100755 index 0000000..8175c64 --- /dev/null +++ b/devspec.en_US/project/recutils/build-aux/install-sh @@ -0,0 +1,518 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2018-03-11.20; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# 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 +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# 'make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +tab=' ' +nl=' +' +IFS=" $tab$nl" + +# Set DOITPROG to "echo" to test this script. + +doit=${DOITPROG-} +doit_exec=${doit:-exec} + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +is_target_a_directory=possibly + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) + is_target_a_directory=always + dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) is_target_a_directory=never;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +# We allow the use of options -d and -T together, by making -d +# take the precedence; this is for compatibility with GNU install. + +if test -n "$dir_arg"; then + if test -n "$dst_arg"; then + echo "$0: target directory not allowed when installing a directory." >&2 + exit 1 + fi +fi + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + if test $# -gt 1 || test "$is_target_a_directory" = always; then + if test ! -d "$dst_arg"; then + echo "$0: $dst_arg: Is not a directory." >&2 + exit 1 + fi + fi +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename. + if test -d "$dst"; then + if test "$is_target_a_directory" = never; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dstbase=`basename "$src"` + case $dst in + */) dst=$dst$dstbase;; + *) dst=$dst/$dstbase;; + esac + dstdir_status=0 + else + dstdir=`dirname "$dst"` + test -d "$dstdir" + dstdir_status=$? + fi + fi + + case $dstdir in + */) dstdirslash=$dstdir;; + *) dstdirslash=$dstdir/;; + esac + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + # Note that $RANDOM variable is not portable (e.g. dash); Use it + # here however when possible just to lower collision chance. + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + + trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 + + # Because "mkdir -p" follows existing symlinks and we likely work + # directly in world-writeable /tmp, make sure that the '$tmpdir' + # directory is successfully created first before we actually test + # 'mkdir -p' feature. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + oIFS=$IFS + IFS=/ + set -f + set fnord $dstdir + shift + set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=${dstdirslash}_inst.$$_ + rmtmp=${dstdirslash}_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + set +f && + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: diff --git a/devspec.en_US/project/recutils/build-aux/ltmain.sh b/devspec.en_US/project/recutils/build-aux/ltmain.sh new file mode 100755 index 0000000..a736cf9 --- /dev/null +++ b/devspec.en_US/project/recutils/build-aux/ltmain.sh @@ -0,0 +1,11156 @@ +#! /bin/sh +## DO NOT EDIT - This file generated from ./build-aux/ltmain.in +## by inline-source v2014-01-03.01 + +# libtool (GNU libtool) 2.4.6 +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 + +# Copyright (C) 1996-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +PROGRAM=libtool +PACKAGE=libtool +VERSION="2.4.6 Debian-2.4.6-2" +package_revision=2.4.6 + + +## ------ ## +## Usage. ## +## ------ ## + +# Run './libtool --help' for help with using this script from the +# command line. + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# After configure completes, it has a better idea of some of the +# shell tools we need than the defaults used by the functions shared +# with bootstrap, so set those here where they can still be over- +# ridden by the user, but otherwise take precedence. + +: ${AUTOCONF="autoconf"} +: ${AUTOMAKE="automake"} + + +## -------------------------- ## +## Source external libraries. ## +## -------------------------- ## + +# Much of our low-level functionality needs to be sourced from external +# libraries, which are installed to $pkgauxdir. + +# Set a version string for this script. +scriptversion=2015-01-20.17; # UTC + +# General shell script boiler plate, and helper functions. +# Written by Gary V. Vaughan, 2004 + +# Copyright (C) 2004-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +# As a special exception to the GNU General Public License, if you distribute +# this file as part of a program or library that is built using GNU Libtool, +# you may include this file under the same distribution terms that you use +# for the rest of that program. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# Evaluate this file near the top of your script to gain access to +# the functions and variables defined here: +# +# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh +# +# If you need to override any of the default environment variable +# settings, do that before evaluating this file. + + +## -------------------- ## +## Shell normalisation. ## +## -------------------- ## + +# Some shells need a little help to be as Bourne compatible as possible. +# Before doing anything else, make sure all that help has been provided! + +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac +fi + +# NLS nuisances: We save the old values in case they are required later. +_G_user_locale= +_G_safe_locale= +for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test set = \"\${$_G_var+set}\"; then + save_$_G_var=\$$_G_var + $_G_var=C + export $_G_var + _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" + _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" + fi" +done + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Make sure IFS has a sensible default +sp=' ' +nl=' +' +IFS="$sp $nl" + +# There are apparently some retarded systems that use ';' as a PATH separator! +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + + +## ------------------------- ## +## Locate command utilities. ## +## ------------------------- ## + + +# func_executable_p FILE +# ---------------------- +# Check that FILE is an executable regular file. +func_executable_p () +{ + test -f "$1" && test -x "$1" +} + + +# func_path_progs PROGS_LIST CHECK_FUNC [PATH] +# -------------------------------------------- +# Search for either a program that responds to --version with output +# containing "GNU", or else returned by CHECK_FUNC otherwise, by +# trying all the directories in PATH with each of the elements of +# PROGS_LIST. +# +# CHECK_FUNC should accept the path to a candidate program, and +# set $func_check_prog_result if it truncates its output less than +# $_G_path_prog_max characters. +func_path_progs () +{ + _G_progs_list=$1 + _G_check_func=$2 + _G_PATH=${3-"$PATH"} + + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} + for _G_dir in $_G_PATH; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in $_G_progs_list; do + for _exeext in '' .EXE; do + _G_path_prog=$_G_dir/$_G_prog_name$_exeext + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; + *) $_G_check_func $_G_path_prog + func_path_progs_result=$func_check_prog_result + ;; + esac + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$func_path_progs_result" && { + echo "no acceptable sed could be found in \$PATH" >&2 + exit 1 + } +} + + +# We want to be able to use the functions in this file before configure +# has figured out where the best binaries are kept, which means we have +# to search for them ourselves - except when the results are already set +# where we skip the searches. + +# Unless the user overrides by setting SED, search the path for either GNU +# sed, or the sed that truncates its output the least. +test -z "$SED" && { + _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for _G_i in 1 2 3 4 5 6 7; do + _G_sed_script=$_G_sed_script$nl$_G_sed_script + done + echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed + _G_sed_script= + + func_check_prog_sed () + { + _G_path_prog=$1 + + _G_count=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo '' >> conftest.nl + "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + rm -f conftest.sed + SED=$func_path_progs_result +} + + +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the grep that truncates its output the least. +test -z "$GREP" && { + func_check_prog_grep () + { + _G_path_prog=$1 + + _G_count=0 + _G_path_prog_max=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + GREP=$func_path_progs_result +} + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# All uppercase variable names are used for environment variables. These +# variables can be overridden by the user before calling a script that +# uses them if a suitable command of that name is not already available +# in the command search PATH. + +: ${CP="cp -f"} +: ${ECHO="printf %s\n"} +: ${EGREP="$GREP -E"} +: ${FGREP="$GREP -F"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} + + +## -------------------- ## +## Useful sed snippets. ## +## -------------------- ## + +sed_dirname='s|/[^/]*$||' +sed_basename='s|^.*/||' + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Same as above, but do not quote variable references. +sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' + +# Sed substitution that converts a w32 file name or path +# that contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-'\' parameter expansions in output of sed_double_quote_subst that +# were '\'-ed in input to the same. If an odd number of '\' preceded a +# '$' in input to sed_double_quote_subst, that '$' was protected from +# expansion. Since each input '\' is now two '\'s, look for any number +# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. +_G_bs='\\' +_G_bs2='\\\\' +_G_bs4='\\\\\\\\' +_G_dollar='\$' +sed_double_backslash="\ + s/$_G_bs4/&\\ +/g + s/^$_G_bs2$_G_dollar/$_G_bs&/ + s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g + s/\n//g" + + +## ----------------- ## +## Global variables. ## +## ----------------- ## + +# Except for the global variables explicitly listed below, the following +# functions in the '^func_' namespace, and the '^require_' namespace +# variables initialised in the 'Resource management' section, sourcing +# this file will not pollute your global namespace with anything +# else. There's no portable way to scope variables in Bourne shell +# though, so actually running these functions will sometimes place +# results into a variable named after the function, and often use +# temporary variables in the '^_G_' namespace. If you are careful to +# avoid using those namespaces casually in your sourcing script, things +# should continue to work as you expect. And, of course, you can freely +# overwrite any of the functions or variables defined here before +# calling anything to customize them. + +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +# Allow overriding, eg assuming that you follow the convention of +# putting '$debug_cmd' at the start of all your functions, you can get +# bash to show function call trace with: +# +# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name +debug_cmd=${debug_cmd-":"} +exit_cmd=: + +# By convention, finish your script with: +# +# exit $exit_status +# +# so that you can set exit_status to non-zero if you want to indicate +# something went wrong during execution without actually bailing out at +# the point of failure. +exit_status=$EXIT_SUCCESS + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath=$0 + +# The name of this program. +progname=`$ECHO "$progpath" |$SED "$sed_basename"` + +# Make sure we have an absolute progpath for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` + progdir=`cd "$progdir" && pwd` + progpath=$progdir/$progname + ;; + *) + _G_IFS=$IFS + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS=$_G_IFS + test -x "$progdir/$progname" && break + done + IFS=$_G_IFS + test -n "$progdir" || progdir=`pwd` + progpath=$progdir/$progname + ;; +esac + + +## ----------------- ## +## Standard options. ## +## ----------------- ## + +# The following options affect the operation of the functions defined +# below, and should be set appropriately depending on run-time para- +# meters passed on the command line. + +opt_dry_run=false +opt_quiet=false +opt_verbose=false + +# Categories 'all' and 'none' are always available. Append any others +# you will pass as the first argument to func_warning from your own +# code. +warning_categories= + +# By default, display warnings according to 'opt_warning_types'. Set +# 'warning_func' to ':' to elide all warnings, or func_fatal_error to +# treat the next displayed warning as a fatal error. +warning_func=func_warn_and_continue + +# Set to 'all' to display all warnings, 'none' to suppress all +# warnings, or a space delimited list of some subset of +# 'warning_categories' to display only the listed warnings. +opt_warning_types=all + + +## -------------------- ## +## Resource management. ## +## -------------------- ## + +# This section contains definitions for functions that each ensure a +# particular resource (a file, or a non-empty configuration variable for +# example) is available, and if appropriate to extract default values +# from pertinent package files. Call them using their associated +# 'require_*' variable to ensure that they are executed, at most, once. +# +# It's entirely deliberate that calling these functions can set +# variables that don't obey the namespace limitations obeyed by the rest +# of this file, in order that that they be as useful as possible to +# callers. + + +# require_term_colors +# ------------------- +# Allow display of bold text on terminals that support it. +require_term_colors=func_require_term_colors +func_require_term_colors () +{ + $debug_cmd + + test -t 1 && { + # COLORTERM and USE_ANSI_COLORS environment variables take + # precedence, because most terminfo databases neglect to describe + # whether color sequences are supported. + test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} + + if test 1 = "$USE_ANSI_COLORS"; then + # Standard ANSI escape sequences + tc_reset='' + tc_bold=''; tc_standout='' + tc_red=''; tc_green='' + tc_blue=''; tc_cyan='' + else + # Otherwise trust the terminfo database after all. + test -n "`tput sgr0 2>/dev/null`" && { + tc_reset=`tput sgr0` + test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` + tc_standout=$tc_bold + test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` + test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` + test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` + test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` + test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` + } + fi + } + + require_term_colors=: +} + + +## ----------------- ## +## Function library. ## +## ----------------- ## + +# This section contains a variety of useful functions to call in your +# scripts. Take note of the portable wrappers for features provided by +# some modern shells, which will fall back to slower equivalents on +# less featureful shells. + + +# func_append VAR VALUE +# --------------------- +# Append VALUE onto the existing contents of VAR. + + # We should try to minimise forks, especially on Windows where they are + # unreasonably slow, so skip the feature probes when bash or zsh are + # being used: + if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then + : ${_G_HAVE_ARITH_OP="yes"} + : ${_G_HAVE_XSI_OPS="yes"} + # The += operator was introduced in bash 3.1 + case $BASH_VERSION in + [12].* | 3.0 | 3.0*) ;; + *) + : ${_G_HAVE_PLUSEQ_OP="yes"} + ;; + esac + fi + + # _G_HAVE_PLUSEQ_OP + # Can be empty, in which case the shell is probed, "yes" if += is + # useable or anything else if it does not work. + test -z "$_G_HAVE_PLUSEQ_OP" \ + && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ + && _G_HAVE_PLUSEQ_OP=yes + +if test yes = "$_G_HAVE_PLUSEQ_OP" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_append () + { + $debug_cmd + + eval "$1+=\$2" + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_append () + { + $debug_cmd + + eval "$1=\$$1\$2" + } +fi + + +# func_append_quoted VAR VALUE +# ---------------------------- +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +if test yes = "$_G_HAVE_PLUSEQ_OP"; then + eval 'func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1+=\\ \$func_quote_for_eval_result" + }' +else + func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1=\$$1\\ \$func_quote_for_eval_result" + } +fi + + +# func_append_uniq VAR VALUE +# -------------------------- +# Append unique VALUE onto the existing contents of VAR, assuming +# entries are delimited by the first character of VALUE. For example: +# +# func_append_uniq options " --another-option option-argument" +# +# will only append to $options if " --another-option option-argument " +# is not already present somewhere in $options already (note spaces at +# each end implied by leading space in second argument). +func_append_uniq () +{ + $debug_cmd + + eval _G_current_value='`$ECHO $'$1'`' + _G_delim=`expr "$2" : '\(.\)'` + + case $_G_delim$_G_current_value$_G_delim in + *"$2$_G_delim"*) ;; + *) func_append "$@" ;; + esac +} + + +# func_arith TERM... +# ------------------ +# Set func_arith_result to the result of evaluating TERMs. + test -z "$_G_HAVE_ARITH_OP" \ + && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ + && _G_HAVE_ARITH_OP=yes + +if test yes = "$_G_HAVE_ARITH_OP"; then + eval 'func_arith () + { + $debug_cmd + + func_arith_result=$(( $* )) + }' +else + func_arith () + { + $debug_cmd + + func_arith_result=`expr "$@"` + } +fi + + +# func_basename FILE +# ------------------ +# Set func_basename_result to FILE with everything up to and including +# the last / stripped. +if test yes = "$_G_HAVE_XSI_OPS"; then + # If this shell supports suffix pattern removal, then use it to avoid + # forking. Hide the definitions single quotes in case the shell chokes + # on unsupported syntax... + _b='func_basename_result=${1##*/}' + _d='case $1 in + */*) func_dirname_result=${1%/*}$2 ;; + * ) func_dirname_result=$3 ;; + esac' + +else + # ...otherwise fall back to using sed. + _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' + _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` + if test "X$func_dirname_result" = "X$1"; then + func_dirname_result=$3 + else + func_append func_dirname_result "$2" + fi' +fi + +eval 'func_basename () +{ + $debug_cmd + + '"$_b"' +}' + + +# func_dirname FILE APPEND NONDIR_REPLACEMENT +# ------------------------------------------- +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +eval 'func_dirname () +{ + $debug_cmd + + '"$_d"' +}' + + +# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT +# -------------------------------------------------------- +# Perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# For efficiency, we do not delegate to the functions above but instead +# duplicate the functionality here. +eval 'func_dirname_and_basename () +{ + $debug_cmd + + '"$_b"' + '"$_d"' +}' + + +# func_echo ARG... +# ---------------- +# Echo program name prefixed message. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_echo_all ARG... +# -------------------- +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + + +# func_echo_infix_1 INFIX ARG... +# ------------------------------ +# Echo program name, followed by INFIX on the first line, with any +# additional lines not showing INFIX. +func_echo_infix_1 () +{ + $debug_cmd + + $require_term_colors + + _G_infix=$1; shift + _G_indent=$_G_infix + _G_prefix="$progname: $_G_infix: " + _G_message=$* + + # Strip color escape sequences before counting printable length + for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" + do + test -n "$_G_tc" && { + _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` + _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` + } + done + _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes + + func_echo_infix_1_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_infix_1_IFS + $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 + _G_prefix=$_G_indent + done + IFS=$func_echo_infix_1_IFS +} + + +# func_error ARG... +# ----------------- +# Echo program name prefixed message to standard error. +func_error () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 +} + + +# func_fatal_error ARG... +# ----------------------- +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + $debug_cmd + + func_error "$*" + exit $EXIT_FAILURE +} + + +# func_grep EXPRESSION FILENAME +# ----------------------------- +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $debug_cmd + + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_len STRING +# --------------- +# Set func_len_result to the length of STRING. STRING may not +# start with a hyphen. + test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_len () + { + $debug_cmd + + func_len_result=${#1} + }' +else + func_len () + { + $debug_cmd + + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` + } +fi + + +# func_mkdir_p DIRECTORY-PATH +# --------------------------- +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + $debug_cmd + + _G_directory_path=$1 + _G_dir_list= + + if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then + + # Protect directory names starting with '-' + case $_G_directory_path in + -*) _G_directory_path=./$_G_directory_path ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$_G_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + _G_dir_list=$_G_directory_path:$_G_dir_list + + # If the last portion added has no slash in it, the list is done + case $_G_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` + done + _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` + + func_mkdir_p_IFS=$IFS; IFS=: + for _G_dir in $_G_dir_list; do + IFS=$func_mkdir_p_IFS + # mkdir can fail with a 'File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$_G_dir" 2>/dev/null || : + done + IFS=$func_mkdir_p_IFS + + # Bail out if we (or some other process) failed to create a directory. + test -d "$_G_directory_path" || \ + func_fatal_error "Failed to create '$1'" + fi +} + + +# func_mktempdir [BASENAME] +# ------------------------- +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, BASENAME is the basename for that directory. +func_mktempdir () +{ + $debug_cmd + + _G_template=${TMPDIR-/tmp}/${1-$progname} + + if test : = "$opt_dry_run"; then + # Return a directory name, but don't create it in dry-run mode + _G_tmpdir=$_G_template-$$ + else + + # If mktemp works, use that first and foremost + _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` + + if test ! -d "$_G_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + _G_tmpdir=$_G_template-${RANDOM-0}$$ + + func_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$_G_tmpdir" + umask $func_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$_G_tmpdir" || \ + func_fatal_error "cannot create temporary directory '$_G_tmpdir'" + fi + + $ECHO "$_G_tmpdir" +} + + +# func_normal_abspath PATH +# ------------------------ +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +func_normal_abspath () +{ + $debug_cmd + + # These SED scripts presuppose an absolute path with a trailing slash. + _G_pathcar='s|^/\([^/]*\).*$|\1|' + _G_pathcdr='s|^/[^/]*||' + _G_removedotparts=':dotsl + s|/\./|/|g + t dotsl + s|/\.$|/|' + _G_collapseslashes='s|/\{1,\}|/|g' + _G_finalslash='s|/*$|/|' + + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` + while :; do + # Processed it all yet? + if test / = "$func_normal_abspath_tpath"; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result"; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + + +# func_notquiet ARG... +# -------------------- +# Echo program name prefixed message only when not in quiet mode. +func_notquiet () +{ + $debug_cmd + + $opt_quiet || func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + + +# func_relative_path SRCDIR DSTDIR +# -------------------------------- +# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. +func_relative_path () +{ + $debug_cmd + + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=$func_dirname_result + if test -z "$func_relative_path_tlibdir"; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test -n "$func_stripname_result"; then + func_append func_relative_path_result "/$func_stripname_result" + fi + + # Normalisation. If bindir is libdir, return '.' else relative path. + if test -n "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + fi + + test -n "$func_relative_path_result" || func_relative_path_result=. + + : +} + + +# func_quote_for_eval ARG... +# -------------------------- +# Aesthetically quote ARGs to be evaled later. +# This function returns two values: +# i) func_quote_for_eval_result +# double-quoted, suitable for a subsequent eval +# ii) func_quote_for_eval_unquoted_result +# has all characters that are still active within double +# quotes backslashified. +func_quote_for_eval () +{ + $debug_cmd + + func_quote_for_eval_unquoted_result= + func_quote_for_eval_result= + while test 0 -lt $#; do + case $1 in + *[\\\`\"\$]*) + _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; + *) + _G_unquoted_arg=$1 ;; + esac + if test -n "$func_quote_for_eval_unquoted_result"; then + func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" + else + func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" + fi + + case $_G_unquoted_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_quoted_arg=\"$_G_unquoted_arg\" + ;; + *) + _G_quoted_arg=$_G_unquoted_arg + ;; + esac + + if test -n "$func_quote_for_eval_result"; then + func_append func_quote_for_eval_result " $_G_quoted_arg" + else + func_append func_quote_for_eval_result "$_G_quoted_arg" + fi + shift + done +} + + +# func_quote_for_expand ARG +# ------------------------- +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + $debug_cmd + + case $1 in + *[\\\`\"]*) + _G_arg=`$ECHO "$1" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; + *) + _G_arg=$1 ;; + esac + + case $_G_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_arg=\"$_G_arg\" + ;; + esac + + func_quote_for_expand_result=$_G_arg +} + + +# func_stripname PREFIX SUFFIX NAME +# --------------------------------- +# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_stripname () + { + $debug_cmd + + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary variable first. + func_stripname_result=$3 + func_stripname_result=${func_stripname_result#"$1"} + func_stripname_result=${func_stripname_result%"$2"} + }' +else + func_stripname () + { + $debug_cmd + + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; + esac + } +fi + + +# func_show_eval CMD [FAIL_EXP] +# ----------------------------- +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + func_quote_for_expand "$_G_cmd" + eval "func_notquiet $func_quote_for_expand_result" + + $opt_dry_run || { + eval "$_G_cmd" + _G_status=$? + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_show_eval_locale CMD [FAIL_EXP] +# ------------------------------------ +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + $opt_quiet || { + func_quote_for_expand "$_G_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + $opt_dry_run || { + eval "$_G_user_locale + $_G_cmd" + _G_status=$? + eval "$_G_safe_locale" + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_tr_sh +# ---------- +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + $debug_cmd + + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_verbose ARG... +# ------------------- +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $debug_cmd + + $opt_verbose && func_echo "$*" + + : +} + + +# func_warn_and_continue ARG... +# ----------------------------- +# Echo program name prefixed warning message to standard error. +func_warn_and_continue () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 +} + + +# func_warning CATEGORY ARG... +# ---------------------------- +# Echo program name prefixed warning message to standard error. Warning +# messages can be filtered according to CATEGORY, where this function +# elides messages where CATEGORY is not listed in the global variable +# 'opt_warning_types'. +func_warning () +{ + $debug_cmd + + # CATEGORY must be in the warning_categories list! + case " $warning_categories " in + *" $1 "*) ;; + *) func_internal_error "invalid warning category '$1'" ;; + esac + + _G_category=$1 + shift + + case " $opt_warning_types " in + *" $_G_category "*) $warning_func ${1+"$@"} ;; + esac +} + + +# func_sort_ver VER1 VER2 +# ----------------------- +# 'sort -V' is not generally available. +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +func_sort_ver () +{ + $debug_cmd + + printf '%s\n%s\n' "$1" "$2" \ + | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n +} + +# func_lt_ver PREV CURR +# --------------------- +# Return true if PREV and CURR are in the correct order according to +# func_sort_ver, otherwise false. Use it like this: +# +# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." +func_lt_ver () +{ + $debug_cmd + + test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: +#! /bin/sh + +# Set a version string for this script. +scriptversion=2014-01-07.03; # UTC + +# A portable, pluggable option parser for Bourne shell. +# Written by Gary V. Vaughan, 2010 + +# Copyright (C) 2010-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# This file is a library for parsing options in your shell scripts along +# with assorted other useful supporting features that you can make use +# of too. +# +# For the simplest scripts you might need only: +# +# #!/bin/sh +# . relative/path/to/funclib.sh +# . relative/path/to/options-parser +# scriptversion=1.0 +# func_options ${1+"$@"} +# eval set dummy "$func_options_result"; shift +# ...rest of your script... +# +# In order for the '--version' option to work, you will need to have a +# suitably formatted comment like the one at the top of this file +# starting with '# Written by ' and ending with '# warranty; '. +# +# For '-h' and '--help' to work, you will also need a one line +# description of your script's purpose in a comment directly above the +# '# Written by ' line, like the one at the top of this file. +# +# The default options also support '--debug', which will turn on shell +# execution tracing (see the comment above debug_cmd below for another +# use), and '--verbose' and the func_verbose function to allow your script +# to display verbose messages only when your user has specified +# '--verbose'. +# +# After sourcing this file, you can plug processing for additional +# options by amending the variables from the 'Configuration' section +# below, and following the instructions in the 'Option parsing' +# section further down. + +## -------------- ## +## Configuration. ## +## -------------- ## + +# You should override these variables in your script after sourcing this +# file so that they reflect the customisations you have added to the +# option parser. + +# The usage line for option parsing errors and the start of '-h' and +# '--help' output messages. You can embed shell variables for delayed +# expansion at the time the message is displayed, but you will need to +# quote other shell meta-characters carefully to prevent them being +# expanded when the contents are evaled. +usage='$progpath [OPTION]...' + +# Short help message in response to '-h' and '--help'. Add to this or +# override it after sourcing this library to reflect the full set of +# options your script accepts. +usage_message="\ + --debug enable verbose shell tracing + -W, --warnings=CATEGORY + report the warnings falling in CATEGORY [all] + -v, --verbose verbosely report processing + --version print version information and exit + -h, --help print short or long help message and exit +" + +# Additional text appended to 'usage_message' in response to '--help'. +long_help_message=" +Warning categories include: + 'all' show all warnings + 'none' turn off all the warnings + 'error' warnings are treated as fatal errors" + +# Help message printed before fatal option parsing errors. +fatal_help="Try '\$progname --help' for more information." + + + +## ------------------------- ## +## Hook function management. ## +## ------------------------- ## + +# This section contains functions for adding, removing, and running hooks +# to the main code. A hook is just a named list of of function, that can +# be run in order later on. + +# func_hookable FUNC_NAME +# ----------------------- +# Declare that FUNC_NAME will run hooks added with +# 'func_add_hook FUNC_NAME ...'. +func_hookable () +{ + $debug_cmd + + func_append hookable_fns " $1" +} + + +# func_add_hook FUNC_NAME HOOK_FUNC +# --------------------------------- +# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must +# first have been declared "hookable" by a call to 'func_hookable'. +func_add_hook () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not accept hook functions." ;; + esac + + eval func_append ${1}_hooks '" $2"' +} + + +# func_remove_hook FUNC_NAME HOOK_FUNC +# ------------------------------------ +# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. +func_remove_hook () +{ + $debug_cmd + + eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' +} + + +# func_run_hooks FUNC_NAME [ARG]... +# --------------------------------- +# Run all hook functions registered to FUNC_NAME. +# It is assumed that the list of hook functions contains nothing more +# than a whitespace-delimited list of legal shell function names, and +# no effort is wasted trying to catch shell meta-characters or preserve +# whitespace. +func_run_hooks () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not support hook funcions.n" ;; + esac + + eval _G_hook_fns=\$$1_hooks; shift + + for _G_hook in $_G_hook_fns; do + eval $_G_hook '"$@"' + + # store returned options list back into positional + # parameters for next 'cmd' execution. + eval _G_hook_result=\$${_G_hook}_result + eval set dummy "$_G_hook_result"; shift + done + + func_quote_for_eval ${1+"$@"} + func_run_hooks_result=$func_quote_for_eval_result +} + + + +## --------------- ## +## Option parsing. ## +## --------------- ## + +# In order to add your own option parsing hooks, you must accept the +# full positional parameter list in your hook function, remove any +# options that you action, and then pass back the remaining unprocessed +# options in '<hooked_function_name>_result', escaped suitably for +# 'eval'. Like this: +# +# my_options_prep () +# { +# $debug_cmd +# +# # Extend the existing usage message. +# usage_message=$usage_message' +# -s, --silent don'\''t print informational messages +# ' +# +# func_quote_for_eval ${1+"$@"} +# my_options_prep_result=$func_quote_for_eval_result +# } +# func_add_hook func_options_prep my_options_prep +# +# +# my_silent_option () +# { +# $debug_cmd +# +# # Note that for efficiency, we parse as many options as we can +# # recognise in a loop before passing the remainder back to the +# # caller on the first unrecognised argument we encounter. +# while test $# -gt 0; do +# opt=$1; shift +# case $opt in +# --silent|-s) opt_silent=: ;; +# # Separate non-argument short options: +# -s*) func_split_short_opt "$_G_opt" +# set dummy "$func_split_short_opt_name" \ +# "-$func_split_short_opt_arg" ${1+"$@"} +# shift +# ;; +# *) set dummy "$_G_opt" "$*"; shift; break ;; +# esac +# done +# +# func_quote_for_eval ${1+"$@"} +# my_silent_option_result=$func_quote_for_eval_result +# } +# func_add_hook func_parse_options my_silent_option +# +# +# my_option_validation () +# { +# $debug_cmd +# +# $opt_silent && $opt_verbose && func_fatal_help "\ +# '--silent' and '--verbose' options are mutually exclusive." +# +# func_quote_for_eval ${1+"$@"} +# my_option_validation_result=$func_quote_for_eval_result +# } +# func_add_hook func_validate_options my_option_validation +# +# You'll alse need to manually amend $usage_message to reflect the extra +# options you parse. It's preferable to append if you can, so that +# multiple option parsing hooks can be added safely. + + +# func_options [ARG]... +# --------------------- +# All the functions called inside func_options are hookable. See the +# individual implementations for details. +func_hookable func_options +func_options () +{ + $debug_cmd + + func_options_prep ${1+"$@"} + eval func_parse_options \ + ${func_options_prep_result+"$func_options_prep_result"} + eval func_validate_options \ + ${func_parse_options_result+"$func_parse_options_result"} + + eval func_run_hooks func_options \ + ${func_validate_options_result+"$func_validate_options_result"} + + # save modified positional parameters for caller + func_options_result=$func_run_hooks_result +} + + +# func_options_prep [ARG]... +# -------------------------- +# All initialisations required before starting the option parse loop. +# Note that when calling hook functions, we pass through the list of +# positional parameters. If a hook function modifies that list, and +# needs to propogate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before +# returning. +func_hookable func_options_prep +func_options_prep () +{ + $debug_cmd + + # Option defaults: + opt_verbose=false + opt_warning_types= + + func_run_hooks func_options_prep ${1+"$@"} + + # save modified positional parameters for caller + func_options_prep_result=$func_run_hooks_result +} + + +# func_parse_options [ARG]... +# --------------------------- +# The main option parsing loop. +func_hookable func_parse_options +func_parse_options () +{ + $debug_cmd + + func_parse_options_result= + + # this just eases exit handling + while test $# -gt 0; do + # Defer to hook functions for initial option parsing, so they + # get priority in the event of reusing an option name. + func_run_hooks func_parse_options ${1+"$@"} + + # Adjust func_parse_options positional parameters to match + eval set dummy "$func_run_hooks_result"; shift + + # Break out of the loop if we already parsed every option. + test $# -gt 0 || break + + _G_opt=$1 + shift + case $_G_opt in + --debug|-x) debug_cmd='set -x' + func_echo "enabling shell trace mode" + $debug_cmd + ;; + + --no-warnings|--no-warning|--no-warn) + set dummy --warnings none ${1+"$@"} + shift + ;; + + --warnings|--warning|-W) + test $# = 0 && func_missing_arg $_G_opt && break + case " $warning_categories $1" in + *" $1 "*) + # trailing space prevents matching last $1 above + func_append_uniq opt_warning_types " $1" + ;; + *all) + opt_warning_types=$warning_categories + ;; + *none) + opt_warning_types=none + warning_func=: + ;; + *error) + opt_warning_types=$warning_categories + warning_func=func_fatal_error + ;; + *) + func_fatal_error \ + "unsupported warning category: '$1'" + ;; + esac + shift + ;; + + --verbose|-v) opt_verbose=: ;; + --version) func_version ;; + -\?|-h) func_usage ;; + --help) func_help ;; + + # Separate optargs to long options (plugins may need this): + --*=*) func_split_equals "$_G_opt" + set dummy "$func_split_equals_lhs" \ + "$func_split_equals_rhs" ${1+"$@"} + shift + ;; + + # Separate optargs to short options: + -W*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-v*|-x*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + func_parse_options_result=$func_quote_for_eval_result +} + + +# func_validate_options [ARG]... +# ------------------------------ +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +func_hookable func_validate_options +func_validate_options () +{ + $debug_cmd + + # Display all warnings if -W was not given. + test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" + + func_run_hooks func_validate_options ${1+"$@"} + + # Bail if the options were screwed! + $exit_cmd $EXIT_FAILURE + + # save modified positional parameters for caller + func_validate_options_result=$func_run_hooks_result +} + + + +## ----------------- ## +## Helper functions. ## +## ----------------- ## + +# This section contains the helper functions used by the rest of the +# hookable option parser framework in ascii-betical order. + + +# func_fatal_help ARG... +# ---------------------- +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + eval \$ECHO \""$fatal_help"\" + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + + +# func_help +# --------- +# Echo long help message to standard output and exit. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message" + exit 0 +} + + +# func_missing_arg ARGNAME +# ------------------------ +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $debug_cmd + + func_error "Missing argument for '$1'." + exit_cmd=exit +} + + +# func_split_equals STRING +# ------------------------ +# Set func_split_equals_lhs and func_split_equals_rhs shell variables after +# splitting STRING at the '=' sign. +test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=${1%%=*} + func_split_equals_rhs=${1#*=} + test "x$func_split_equals_lhs" = "x$1" \ + && func_split_equals_rhs= + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` + func_split_equals_rhs= + test "x$func_split_equals_lhs" = "x$1" \ + || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` + } +fi #func_split_equals + + +# func_split_short_opt SHORTOPT +# ----------------------------- +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"} + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` + } +fi #func_split_short_opt + + +# func_usage +# ---------- +# Echo short help message to standard output and exit. +func_usage () +{ + $debug_cmd + + func_usage_message + $ECHO "Run '$progname --help |${PAGER-more}' for full usage" + exit 0 +} + + +# func_usage_message +# ------------------ +# Echo short help message to standard output. +func_usage_message () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + echo + $SED -n 's|^# || + /^Written by/{ + x;p;x + } + h + /^Written by/q' < "$progpath" + echo + eval \$ECHO \""$usage_message"\" +} + + +# func_version +# ------------ +# Echo version message to standard output and exit. +func_version () +{ + $debug_cmd + + printf '%s\n' "$progname $scriptversion" + $SED -n ' + /(C)/!b go + :more + /\./!{ + N + s|\n# | | + b more + } + :go + /^# Written by /,/# warranty; / { + s|^# || + s|^# *$|| + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + p + } + /^# Written by / { + s|^# || + p + } + /^warranty; /q' < "$progpath" + + exit $? +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: + +# Set a version string. +scriptversion='(GNU libtool) 2.4.6' + + +# func_echo ARG... +# ---------------- +# Libtool also displays the current mode in messages, so override +# funclib.sh func_echo with this custom definition. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () +{ + $debug_cmd + + $warning_func ${1+"$@"} +} + + +## ---------------- ## +## Options parsing. ## +## ---------------- ## + +# Hook in the functions to make sure our own options are parsed during +# the option parsing loop. + +usage='$progpath [OPTION]... [MODE-ARG]...' + +# Short help message in response to '-h'. +usage_message="Options: + --config show all configuration variables + --debug enable verbose shell tracing + -n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --mode=MODE use operation mode MODE + --no-warnings equivalent to '-Wnone' + --preserve-dup-deps don't remove duplicate dependency libraries + --quiet, --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + -v, --verbose print more informational messages than default + --version print version information + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] + -h, --help, --help-all print short, long, or detailed help message +" + +# Additional text appended to 'usage_message' in response to '--help'. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. When passed as first option, +'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. +Try '$progname --help --mode=MODE' for a more detailed description of MODE. + +When reporting a bug, please describe a test case to reproduce it and +include the following information: + + host-triplet: $host + shell: $SHELL + compiler: $LTCC + compiler flags: $LTCFLAGS + linker: $LD (gnu? $with_gnu_ld) + version: $progname $scriptversion Debian-2.4.6-2 + automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` + autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` + +Report bugs to <bug-libtool@gnu.org>. +GNU libtool home page: <http://www.gnu.org/s/libtool/>. +General help using GNU software: <http://www.gnu.org/gethelp/>." + exit 0 +} + + +# func_lo2o OBJECT-NAME +# --------------------- +# Transform OBJECT-NAME from a '.lo' suffix to the platform specific +# object suffix. + +lo2o=s/\\.lo\$/.$objext/ +o2lo=s/\\.$objext\$/.lo/ + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_lo2o () + { + case $1 in + *.lo) func_lo2o_result=${1%.lo}.$objext ;; + * ) func_lo2o_result=$1 ;; + esac + }' + + # func_xform LIBOBJ-OR-SOURCE + # --------------------------- + # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) + # suffix to a '.lo' libtool-object suffix. + eval 'func_xform () + { + func_xform_result=${1%.*}.lo + }' +else + # ...otherwise fall back to using sed. + func_lo2o () + { + func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` + } + + func_xform () + { + func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` + } +fi + + +# func_fatal_configuration ARG... +# ------------------------------- +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func__fatal_error ${1+"$@"} \ + "See the $PACKAGE documentation for more information." \ + "Fatal configuration error." +} + + +# func_config +# ----------- +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + + +# func_features +# ------------- +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test yes = "$build_libtool_libs"; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test yes = "$build_old_libs"; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + + +# func_enable_tag TAGNAME +# ----------------------- +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname=$1 + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf=/$re_begincf/,/$re_endcf/p + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + + +# func_check_version_match +# ------------------------ +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# libtool_options_prep [ARG]... +# ----------------------------- +# Preparation for options parsed by libtool. +libtool_options_prep () +{ + $debug_mode + + # Option defaults: + opt_config=false + opt_dlopen= + opt_dry_run=false + opt_help=false + opt_mode= + opt_preserve_dup_deps=false + opt_quiet=false + + nonopt= + preserve_args= + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Pass back the list of options. + func_quote_for_eval ${1+"$@"} + libtool_options_prep_result=$func_quote_for_eval_result +} +func_add_hook func_options_prep libtool_options_prep + + +# libtool_parse_options [ARG]... +# --------------------------------- +# Provide handling for libtool specific options. +libtool_parse_options () +{ + $debug_cmd + + # Perform our own loop to consume as many options as possible in + # each iteration. + while test $# -gt 0; do + _G_opt=$1 + shift + case $_G_opt in + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + + --config) func_config ;; + + --dlopen|-dlopen) + opt_dlopen="${opt_dlopen+$opt_dlopen +}$1" + shift + ;; + + --preserve-dup-deps) + opt_preserve_dup_deps=: ;; + + --features) func_features ;; + + --finish) set dummy --mode finish ${1+"$@"}; shift ;; + + --help) opt_help=: ;; + + --help-all) opt_help=': help-all' ;; + + --mode) test $# = 0 && func_missing_arg $_G_opt && break + opt_mode=$1 + case $1 in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $_G_opt" + exit_cmd=exit + break + ;; + esac + shift + ;; + + --no-silent|--no-quiet) + opt_quiet=false + func_append preserve_args " $_G_opt" + ;; + + --no-warnings|--no-warning|--no-warn) + opt_warning=false + func_append preserve_args " $_G_opt" + ;; + + --no-verbose) + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --silent|--quiet) + opt_quiet=: + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --tag) test $# = 0 && func_missing_arg $_G_opt && break + opt_tag=$1 + func_append preserve_args " $_G_opt $1" + func_enable_tag "$1" + shift + ;; + + --verbose|-v) opt_quiet=false + opt_verbose=: + func_append preserve_args " $_G_opt" + ;; + + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + libtool_parse_options_result=$func_quote_for_eval_result +} +func_add_hook func_parse_options libtool_parse_options + + + +# libtool_validate_options [ARG]... +# --------------------------------- +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +libtool_validate_options () +{ + # save first non-option argument + if test 0 -lt $#; then + nonopt=$1 + shift + fi + + # preserve --debug + test : = "$debug_cmd" || func_append preserve_args " --debug" + + case $host in + # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 + # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 + *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + test yes != "$build_libtool_libs" \ + && test yes != "$build_old_libs" \ + && func_fatal_configuration "not configured to build any kind of library" + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test execute != "$opt_mode"; then + func_error "unrecognized option '-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help=$help + help="Try '$progname --help --mode=$opt_mode' for more information." + } + + # Pass back the unparsed argument list + func_quote_for_eval ${1+"$@"} + libtool_validate_options_result=$func_quote_for_eval_result +} +func_add_hook func_validate_options libtool_validate_options + + +# Process options as early as possible so that --help and --version +# can return quickly. +func_options ${1+"$@"} +eval set dummy "$func_options_result"; shift + + + +## ----------- ## +## Main. ## +## ----------- ## + +magic='%%%MAGIC variable%%%' +magic_exe='%%%MAGIC EXE variable%%%' + +# Global variables. +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# func_generated_by_libtool +# True iff stdin has been generated by Libtool. This function is only +# a basic sanity check; it will hardly flush out determined imposters. +func_generated_by_libtool_p () +{ + $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if 'file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case $lalib_p_line in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test yes = "$lalib_p" +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + test -f "$1" && + $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $debug_cmd + + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# 'FILE.' does not work on cygwin managed mounts. +func_source () +{ + $debug_cmd + + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case $lt_sysroot:$1 in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result='='$func_stripname_result + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $debug_cmd + + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with '--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=$1 + if test yes = "$build_libtool_libs"; then + write_lobj=\'$2\' + else + write_lobj=none + fi + + if test yes = "$build_old_libs"; then + write_oldobj=\'$3\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T <<EOF +# $write_libobj - a libtool object file +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object=$write_lobj + +# Name of the non-PIC object +non_pic_object=$write_oldobj + +EOF + $MV "${write_libobj}T" "$write_libobj" + } +} + + +################################################## +# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # +################################################## + +# func_convert_core_file_wine_to_w32 ARG +# Helper function used by file name conversion functions when $build is *nix, +# and $host is mingw, cygwin, or some other w32 environment. Relies on a +# correctly configured wine environment available, with the winepath program +# in $build's $PATH. +# +# ARG is the $build file name to be converted to w32 format. +# Result is available in $func_convert_core_file_wine_to_w32_result, and will +# be empty on error (or when ARG is empty) +func_convert_core_file_wine_to_w32 () +{ + $debug_cmd + + func_convert_core_file_wine_to_w32_result=$1 + if test -n "$1"; then + # Unfortunately, winepath does not exit with a non-zero error code, so we + # are forced to check the contents of stdout. On the other hand, if the + # command is not found, the shell will set an exit code of 127 and print + # *an error message* to stdout. So we must check for both error code of + # zero AND non-empty stdout, which explains the odd construction: + func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` + if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $debug_cmd + + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result= + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result"; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $debug_cmd + + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $debug_cmd + + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $debug_cmd + + if test -z "$2" && test -n "$1"; then + func_error "Could not determine host file name corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result=$1 + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $debug_cmd + + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " '$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result=$3 + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $debug_cmd + + case $4 in + $1 ) func_to_host_path_result=$3$func_to_host_path_result + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via '$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $debug_cmd + + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $debug_cmd + + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result=$1 +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result=$func_convert_core_msys_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result=$func_convert_core_file_wine_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via '$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $debug_cmd + + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd=func_convert_path_$func_stripname_result + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $debug_cmd + + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result=$1 +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_msys_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_path_wine_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_dll_def_p FILE +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with _LT_DLL_DEF_P in libtool.m4 +func_dll_def_p () +{ + $debug_cmd + + func_dll_def_p_tmp=`$SED -n \ + -e 's/^[ ]*//' \ + -e '/^\(;.*\)*$/d' \ + -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ + -e q \ + "$1"` + test DEF = "$func_dll_def_p_tmp" +} + + +# func_mode_compile arg... +func_mode_compile () +{ + $debug_cmd + + # Get the compilation command and the source file. + base_compile= + srcfile=$nonopt # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg=$arg + arg_mode=normal + ;; + + target ) + libobj=$arg + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify '-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs=$IFS; IFS=, + for arg in $args; do + IFS=$save_ifs + func_append_quoted lastarg "$arg" + done + IFS=$save_ifs + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg=$srcfile + srcfile=$arg + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with '-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj=$func_basename_result + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from '$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test yes = "$build_libtool_libs" \ + || func_fatal_configuration "cannot build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name '$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname=$func_basename_result + xdir=$func_dirname_result + lobj=$xdir$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test yes = "$build_old_libs"; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test no = "$compiler_c_o"; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext + lockfile=$output_obj.lock + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test yes = "$need_locks"; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test warn = "$need_locks"; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test yes = "$build_libtool_libs"; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test no != "$pic_mode"; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test yes = "$suppress_opt"; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test yes = "$build_old_libs"; then + if test yes != "$pic_mode"; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test yes = "$compiler_c_o"; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test no != "$need_locks"; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test compile = "$opt_mode" && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a '.o' file suitable for static linking + -static only build a '.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a 'standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix '.c' with the +library object suffix, '.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to '-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the '--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the 'install' or 'cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE use a list of object files found in FILE to specify objects + -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with '-') are ignored. + +Every other argument is treated as a filename. Files ending in '.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in '.la', then a libtool library is created, +only library objects ('.lo' files) may be specified, and '-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created +using 'ar' and 'ranlib', or on Windows using 'lib'. + +If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode '$opt_mode'" + ;; + esac + + echo + $ECHO "Try '$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test : = "$opt_help"; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | $SED -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + $SED '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $debug_cmd + + # The first argument is the command name. + cmd=$nonopt + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "'$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "'$file' was not linked with '-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir=$func_dirname_result + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir=$func_dirname_result + ;; + + *) + func_warning "'-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir=$absdir + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic=$magic + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file=$progdir/$program + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file=$progdir/$program + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if $opt_dry_run; then + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + else + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd=\$cmd$args + fi +} + +test execute = "$opt_mode" && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $debug_cmd + + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "'$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument '$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and '=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_quiet && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the '-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the '$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the '$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the '$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test finish = "$opt_mode" && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $debug_cmd + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac + then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=false + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=: ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test X-m = "X$prev" && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the '$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=: + if $isdir; then + destdir=$dest + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir=$func_dirname_result + destname=$func_basename_result + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "'$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "'$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir=$func_dirname_result + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking '$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname=$1 + shift + + srcname=$realname + test -n "$relink_command" && srcname=${realname}T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme=$stripme + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme= + ;; + esac + ;; + os2*) + case $realname in + *_dll.a) + tstripme= + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try 'ln -sf' first, because the 'ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib=$destdir/$realname + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name=$func_basename_result + instname=$dir/${name}i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest=$destfile + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to '$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test yes = "$build_old_libs"; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext= + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=.exe + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script '$wrapper'" + + finalize=: + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "'$lib' has not been installed in '$libdir'" + finalize=false + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test no = "$fast_install" && test -n "$relink_command"; then + $opt_dry_run || { + if $finalize; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file=$func_basename_result + outputname=$tmpdir/$file + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_quiet || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink '$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file=$outputname + else + func_warning "cannot relink '$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name=$func_basename_result + + # Set up the ranlib parameters. + oldlib=$destdir/$name + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run '$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test install = "$opt_mode" && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $debug_cmd + + my_outputname=$1 + my_originator=$2 + my_pic_p=${3-false} + my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms=${my_outputname}S.c + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist=$output_objdir/$my_outputname.nm + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* External symbol declarations for the compiler. */\ +" + + if test yes = "$dlself"; then + func_verbose "generating symbol list for '$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from '$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols=$output_objdir/$outputname.exp + $opt_dry_run || { + $RM $export_symbols + eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from '$dlprefile'" + func_basename "$dlprefile" + name=$func_basename_result + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename= + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname"; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename=$func_basename_result + else + # no lafile. user explicitly requested -dlpreopen <import library>. + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename"; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 </dev/null >/dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + func_show_eval '$RM "${nlist}I"' + if test -n "$global_symbol_to_import"; then + eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[];\ +" + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ +static void lt_syminit(void) +{ + LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; + for (; symbol->name; ++symbol) + {" + $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" + echo >> "$output_objdir/$my_dlsyms" "\ + } +}" + fi + echo >> "$output_objdir/$my_dlsyms" "\ +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{ {\"$my_originator\", (void *) 0}," + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ + {\"@INIT@\", (void *) <_syminit}," + fi + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + $my_pic_p && pic_flag_for_symtable=" $pic_flag" + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' + + # Transform the symbol file into the correct name. + symfileobj=$output_objdir/${my_outputname}S.$objext + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for '$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $debug_cmd + + win32_libid_type=unknown + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + case $nm_interface in + "MS dumpbin") + if func_cygming_ms_implib_p "$1" || + func_cygming_gnu_implib_p "$1" + then + win32_nmres=import + else + win32_nmres= + fi + ;; + *) + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s|.*|import| + p + q + } + }'` + ;; + esac + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $debug_cmd + + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $debug_cmd + + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive that possess that section. Heuristic: eliminate + # all those that have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $debug_cmd + + if func_cygming_gnu_implib_p "$1"; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1"; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result= + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $debug_cmd + + f_ex_an_ar_dir=$1; shift + f_ex_an_ar_oldlib=$1 + if test yes = "$lock_old_archive_extraction"; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test yes = "$lock_old_archive_extraction"; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $debug_cmd + + my_gentop=$1; shift + my_oldlibs=${1+"$@"} + my_oldobjs= + my_xlib= + my_xabs= + my_xdir= + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib=$func_basename_result + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir=$my_gentop/$my_xlib_u + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + func_basename "$darwin_archive" + darwin_base_archive=$func_basename_result + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches; do + func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" + $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" + cd "unfat-$$/$darwin_base_archive-$darwin_arch" + func_extract_an_archive "`pwd`" "$darwin_base_archive" + cd "$darwin_curdir" + $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result=$my_oldobjs +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory where it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test yes = "$fast_install"; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + \$ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat <<EOF + +/* $cwrappersource - temporary wrapper executable for $objdir/$outputname + Generated by $PROGRAM (GNU $PACKAGE) $VERSION + + The $output program cannot be directly executed until all the libtool + libraries that it depends on are installed. + + This wrapper executable should never be moved out of the build directory. + If it is, it will not operate correctly. +*/ +EOF + cat <<"EOF" +#ifdef _MSC_VER +# define _CRT_SECURE_NO_DEPRECATE 1 +#endif +#include <stdio.h> +#include <stdlib.h> +#ifdef _MSC_VER +# include <direct.h> +# include <process.h> +# include <io.h> +#else +# include <unistd.h> +# include <stdint.h> +# ifdef __CYGWIN__ +# include <io.h> +# endif +#endif +#include <malloc.h> +#include <stdarg.h> +#include <assert.h> +#include <string.h> +#include <ctype.h> +#include <errno.h> +#include <fcntl.h> +#include <sys/stat.h> + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* declarations of non-ANSI functions */ +#if defined __MINGW32__ +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined __CYGWIN__ +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined other_platform || defined ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined _MSC_VER +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +#elif defined __MINGW32__ +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined __CYGWIN__ +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined other platforms ... */ +#endif + +#if defined PATH_MAX +# define LT_PATHMAX PATH_MAX +#elif defined MAXPATHLEN +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ + defined __OS2__ +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free (stale); stale = 0; } \ +} while (0) + +#if defined LT_DEBUGWRAPPER +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <<EOF +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) +# define externally_visible volatile +#else +# define externally_visible __attribute__((externally_visible)) volatile +#endif +externally_visible const char * MAGIC_EXE = "$magic_exe"; +const char * LIB_PATH_VARNAME = "$shlibpath_var"; +EOF + + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + func_to_host_path "$temp_rpath" + cat <<EOF +const char * LIB_PATH_VALUE = "$func_to_host_path_result"; +EOF + else + cat <<"EOF" +const char * LIB_PATH_VALUE = ""; +EOF + fi + + if test -n "$dllsearchpath"; then + func_to_host_path "$dllsearchpath:" + cat <<EOF +const char * EXE_PATH_VARNAME = "PATH"; +const char * EXE_PATH_VALUE = "$func_to_host_path_result"; +EOF + else + cat <<"EOF" +const char * EXE_PATH_VARNAME = ""; +const char * EXE_PATH_VALUE = ""; +EOF + fi + + if test yes = "$fast_install"; then + cat <<EOF +const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ +EOF + else + cat <<EOF +const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ +EOF + fi + + + cat <<"EOF" + +#define LTWRAPPER_OPTION_PREFIX "--lt-" + +static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; +static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; +static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; + +int +main (int argc, char *argv[]) +{ + char **newargz; + int newargc; + char *tmp_pathspec; + char *actual_cwrapper_path; + char *actual_cwrapper_name; + char *target_name; + char *lt_argv_zero; + int rval = 127; + + int i; + + program_name = (char *) xstrdup (base_name (argv[0])); + newargz = XMALLOC (char *, (size_t) argc + 1); + + /* very simple arg parsing; don't want to rely on getopt + * also, copy all non cwrapper options to newargz, except + * argz[0], which is handled differently + */ + newargc=0; + for (i = 1; i < argc; i++) + { + if (STREQ (argv[i], dumpscript_opt)) + { +EOF + case $host in + *mingw* | *cygwin* ) + # make stdout use "unix" line endings + echo " setmode(1,_O_BINARY);" + ;; + esac + + cat <<"EOF" + lt_dump_script (stdout); + return 0; + } + if (STREQ (argv[i], debug_opt)) + { + lt_debug = 1; + continue; + } + if (STREQ (argv[i], ltwrapper_option_prefix)) + { + /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX + namespace, but it is not one of the ones we know about and + have already dealt with, above (inluding dump-script), then + report an error. Otherwise, targets might begin to believe + they are allowed to use options in the LTWRAPPER_OPTION_PREFIX + namespace. The first time any user complains about this, we'll + need to make LTWRAPPER_OPTION_PREFIX a configure-time option + or a configure.ac-settable value. + */ + lt_fatal (__FILE__, __LINE__, + "unrecognized %s option: '%s'", + ltwrapper_option_prefix, argv[i]); + } + /* otherwise ... */ + newargz[++newargc] = xstrdup (argv[i]); + } + newargz[++newargc] = NULL; + +EOF + cat <<EOF + /* The GNU banner must be the first non-error debug message */ + lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); +EOF + cat <<"EOF" + lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); + lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); + + tmp_pathspec = find_executable (argv[0]); + if (tmp_pathspec == NULL) + lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); + lt_debugprintf (__FILE__, __LINE__, + "(main) found exe (before symlink chase) at: %s\n", + tmp_pathspec); + + actual_cwrapper_path = chase_symlinks (tmp_pathspec); + lt_debugprintf (__FILE__, __LINE__, + "(main) found exe (after symlink chase) at: %s\n", + actual_cwrapper_path); + XFREE (tmp_pathspec); + + actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); + strendzap (actual_cwrapper_path, actual_cwrapper_name); + + /* wrapper name transforms */ + strendzap (actual_cwrapper_name, ".exe"); + tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); + XFREE (actual_cwrapper_name); + actual_cwrapper_name = tmp_pathspec; + tmp_pathspec = 0; + + /* target_name transforms -- use actual target program name; might have lt- prefix */ + target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); + strendzap (target_name, ".exe"); + tmp_pathspec = lt_extend_str (target_name, ".exe", 1); + XFREE (target_name); + target_name = tmp_pathspec; + tmp_pathspec = 0; + + lt_debugprintf (__FILE__, __LINE__, + "(main) libtool target name: %s\n", + target_name); +EOF + + cat <<EOF + newargz[0] = + XMALLOC (char, (strlen (actual_cwrapper_path) + + strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); + strcpy (newargz[0], actual_cwrapper_path); + strcat (newargz[0], "$objdir"); + strcat (newargz[0], "/"); +EOF + + cat <<"EOF" + /* stop here, and copy so we don't have to do this twice */ + tmp_pathspec = xstrdup (newargz[0]); + + /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ + strcat (newargz[0], actual_cwrapper_name); + + /* DO want the lt- prefix here if it exists, so use target_name */ + lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); + XFREE (tmp_pathspec); + tmp_pathspec = NULL; +EOF + + case $host_os in + mingw*) + cat <<"EOF" + { + char* p; + while ((p = strchr (newargz[0], '\\')) != NULL) + { + *p = '/'; + } + while ((p = strchr (lt_argv_zero, '\\')) != NULL) + { + *p = '/'; + } + } +EOF + ;; + esac + + cat <<"EOF" + XFREE (target_name); + XFREE (actual_cwrapper_path); + XFREE (actual_cwrapper_name); + + lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ + lt_setenv ("DUALCASE", "1"); /* for MSK sh */ + /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must + be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) + because on Windows, both *_VARNAMEs are PATH but uninstalled + libraries must come first. */ + lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); + lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); + + lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", + nonnull (lt_argv_zero)); + for (i = 0; i < newargc; i++) + { + lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", + i, nonnull (newargz[i])); + } + +EOF + + case $host_os in + mingw*) + cat <<"EOF" + /* execv doesn't actually work on mingw as expected on unix */ + newargz = prepare_spawn (newargz); + rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); + if (rval == -1) + { + /* failed to start process */ + lt_debugprintf (__FILE__, __LINE__, + "(main) failed to launch target \"%s\": %s\n", + lt_argv_zero, nonnull (strerror (errno))); + return 127; + } + return rval; +EOF + ;; + *) + cat <<"EOF" + execv (lt_argv_zero, newargz); + return rval; /* =127, but avoids unused variable warning */ +EOF + ;; + esac + + cat <<"EOF" +} + +void * +xmalloc (size_t num) +{ + void *p = (void *) malloc (num); + if (!p) + lt_fatal (__FILE__, __LINE__, "memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), + string) : NULL; +} + +const char * +base_name (const char *name) +{ + const char *base; + +#if defined HAVE_DOS_BASED_FILE_SYSTEM + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha ((unsigned char) name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return base; +} + +int +check_executable (const char *path) +{ + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if ((stat (path, &st) >= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + size_t tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined HAVE_DOS_BASED_FILE_SYSTEM + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined HAVE_DOS_BASED_FILE_SYSTEM + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = (size_t) (q - p); + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (STREQ (str, pat)) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + size_t len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + size_t orig_value_len = strlen (orig_value); + size_t add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + size_t len = strlen (new_value); + while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[--len] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $debug_cmd + + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_suncc_cstd_abi +# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! +# Several compiler flags select an ABI that is incompatible with the +# Cstd library. Avoid specifying it if any are in CXXFLAGS. +func_suncc_cstd_abi () +{ + $debug_cmd + + case " $compile_command " in + *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) + suncc_use_cstd_abi=no + ;; + *) + suncc_use_cstd_abi=yes + ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $debug_cmd + + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # what system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll that has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + os2dllname= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=false + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module=$wl-single_module + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test yes != "$build_libtool_libs" \ + && func_fatal_configuration "cannot build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg=$1 + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir=$arg + prev= + continue + ;; + dlfiles|dlprefiles) + $preload || { + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=: + } + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test no = "$dlself"; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test dlprefiles = "$prev"; then + dlself=yes + elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test dlfiles = "$prev"; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols=$arg + test -f "$arg" \ + || func_fatal_error "symbol file '$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex=$arg + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir=$arg + prev= + continue + ;; + mllvm) + # Clang does not use LLVM to link, so we can simply discard any + # '-mllvm $arg' options when doing the link step. + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + if test none != "$pic_object"; then + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + fi + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file '$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + os2dllname) + os2dllname=$arg + prev= + continue + ;; + precious_regex) + precious_files_regex=$arg + prev= + continue + ;; + release) + release=-$arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test rpath = "$prev"; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds=$arg + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg=$arg + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "'-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test X-export-symbols = "X$arg"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between '-L' and '$1'" + else + func_fatal_error "need path for '-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of '$dir'" + dir=$absdir + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test X-lc = "X$arg" || test X-lm = "X$arg"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test X-lc = "X$arg" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc due to us having libc/libc_r. + test X-lc = "X$arg" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test X-lc = "X$arg" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test X-lc = "X$arg" && continue + ;; + esac + elif test X-lc_r = "X$arg"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -mllvm) + prev=mllvm + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module=$wl-multi_module + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "'-no-install' is ignored for $host" + func_warning "assuming '-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -os2dllname) + prev=os2dllname + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # -fstack-protector* stack protector flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -specs=* GCC specs files + # -stdlib=* select c++ std lib with clang + # -fsanitize=* Clang/GCC memory and address sanitizer + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ + -specs=*|-fsanitize=*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + -Z*) + if test os2 = "`expr $host : '.*\(os2\)'`"; then + # OS/2 uses -Zxxx to specify OS/2-specific options + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case $arg in + -Zlinker | -Zstack) + prev=xcompiler + ;; + esac + continue + else + # Otherwise treat like 'Some other compiler flag' below + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + fi + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + test none = "$pic_object" || { + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + } + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test dlfiles = "$prev"; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test dlprefiles = "$prev"; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the '$prevarg' option requires an argument" + + if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname=$func_basename_result + libobjs_save=$libobjs + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + + func_dirname "$output" "/" "" + output_objdir=$func_dirname_result$objdir + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test lib = "$linkmode"; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=false + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test lib,link = "$linkmode,$pass"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs=$tmp_deplibs + fi + + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass"; then + libs=$deplibs + deplibs= + fi + if test prog = "$linkmode"; then + case $pass in + dlopen) libs=$dlfiles ;; + dlpreopen) libs=$dlprefiles ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test lib,dlpreopen = "$linkmode,$pass"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs=$dlprefiles + fi + if test dlopen = "$pass"; then + # Collect dlpreopened libraries + save_deplibs=$deplibs + deplibs= + fi + + for deplib in $libs; do + lib= + found=false + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test lib != "$linkmode" && test prog != "$linkmode"; then + func_warning "'-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test lib = "$linkmode"; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib=$searchdir/lib$name$search_ext + if test -f "$lib"; then + if test .la = "$search_ext"; then + found=: + else + found=false + fi + break 2 + fi + done + done + if $found; then + # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll=$l + done + if test "X$ll" = "X$old_library"; then # only static version available + found=false + func_dirname "$lib" "" "." + ladir=$func_dirname_result + lib=$ladir/$old_library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + else + # deplib doesn't seem to be a libtool library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + ;; # -l + *.ltframework) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test conv = "$pass" && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + if test scan = "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "'-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test link = "$pass"; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=false + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=: + fi + ;; + pass_all) + valid_a_lib=: + ;; + esac + if $valid_a_lib; then + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + else + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + fi + ;; + esac + continue + ;; + prog) + if test link != "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + elif test prog = "$linkmode"; then + if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=: + continue + ;; + esac # case $deplib + + $found || test -f "$lib" \ + || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "'$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir=$func_dirname_result + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass" || + { test prog != "$linkmode" && test lib != "$linkmode"; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test conv = "$pass"; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + elif test prog != "$linkmode" && test lib != "$linkmode"; then + func_fatal_error "'$lib' is not a convenience library" + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test yes = "$prefer_static_libs" || + test built,no = "$prefer_static_libs,$installed"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib=$l + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + + # This library was specified with -dlopen. + if test dlopen = "$pass"; then + test -z "$libdir" \ + && func_fatal_error "cannot -dlopen a convenience library: '$lib'" + if test -z "$dlname" || + test yes != "$dlopen_support" || + test no = "$build_libtool_libs" + then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of '$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir=$ladir + fi + ;; + esac + func_basename "$lib" + laname=$func_basename_result + + # Find the relevant object directory and library name. + if test yes = "$installed"; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library '$lib' was moved." + dir=$ladir + absdir=$abs_ladir + libdir=$abs_ladir + else + dir=$lt_sysroot$libdir + absdir=$lt_sysroot$libdir + fi + test yes = "$hardcode_automatic" && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir=$ladir + absdir=$abs_ladir + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir=$ladir/$objdir + absdir=$abs_ladir/$objdir + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test dlpreopen = "$pass"; then + if test -z "$libdir" && test prog = "$linkmode"; then + func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" + fi + case $host in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test lib = "$linkmode"; then + deplibs="$dir/$old_library $deplibs" + elif test prog,link = "$linkmode,$pass"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test prog = "$linkmode" && test link != "$pass"; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=false + if test no != "$link_all_deplibs" || test -z "$library_names" || + test no = "$build_libtool_libs"; then + linkalldeplibs=: + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if $linkalldeplibs; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test prog,link = "$linkmode,$pass"; then + if test -n "$library_names" && + { { test no = "$prefer_static_libs" || + test built,yes = "$prefer_static_libs,$installed"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then + # Make sure the rpath contains only unique directories. + case $temp_rpath: in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if $alldeplibs && + { test pass_all = "$deplibs_check_method" || + { test yes = "$build_libtool_libs" && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test built = "$use_static_libs" && test yes = "$installed"; then + use_static_libs=no + fi + if test -n "$library_names" && + { test no = "$use_static_libs" || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc* | *os2*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test no = "$installed"; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule= + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule=$dlpremoduletest + break + fi + done + if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then + echo + if test prog = "$linkmode"; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test lib = "$linkmode" && + test yes = "$hardcode_into_libs"; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname=$1 + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname=$dlname + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc* | *os2*) + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + esac + eval soname=\"$soname_spec\" + else + soname=$realname + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot=$soname + func_basename "$soroot" + soname=$func_basename_result + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from '$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for '$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test prog = "$linkmode" || test relink != "$opt_mode"; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test no = "$hardcode_direct"; then + add=$dir/$linklib + case $host in + *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; + *-*-sysv4*uw2*) add_dir=-L$dir ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir=-L$dir ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we cannot + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library"; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add=$dir/$old_library + fi + elif test -n "$old_library"; then + add=$dir/$old_library + fi + fi + esac + elif test no = "$hardcode_minus_L"; then + case $host in + *-*-sunos*) add_shlibpath=$dir ;; + esac + add_dir=-L$dir + add=-l$name + elif test no = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + relink) + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$dir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$absdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test yes != "$lib_linked"; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test prog = "$linkmode"; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test yes != "$hardcode_direct" && + test yes != "$hardcode_minus_L" && + test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test prog = "$linkmode" || test relink = "$opt_mode"; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$libdir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$libdir + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add=-l$name + elif test yes = "$hardcode_automatic"; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib"; then + add=$inst_prefix_dir$libdir/$linklib + else + add=$libdir/$linklib + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir=-L$libdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + fi + + if test prog = "$linkmode"; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test prog = "$linkmode"; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test unsupported != "$hardcode_direct"; then + test -n "$old_library" && linklib=$old_library + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test yes = "$build_libtool_libs"; then + # Not a shared library + if test pass_all != "$deplibs_check_method"; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system cannot link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test yes = "$module"; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test lib = "$linkmode"; then + if test -n "$dependency_libs" && + { test yes != "$hardcode_into_libs" || + test yes = "$build_old_libs" || + test yes = "$link_static"; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs=$temp_deplibs + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test no != "$link_all_deplibs"; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path=$deplib ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of '$dir'" + absdir=$dir + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names"; then + for tmp in $deplibrary_names; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl"; then + depdepl=$absdir/$objdir/$depdepl + darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" + func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" + path= + fi + fi + ;; + *) + path=-L$absdir/$objdir + ;; + esac + else + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "'$deplib' seems to be moved" + + path=-L$absdir + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test link = "$pass"; then + if test prog = "$linkmode"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs=$newdependency_libs + if test dlpreopen = "$pass"; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test dlopen != "$pass"; then + test conv = "$pass" || { + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + } + + if test prog,link = "$linkmode,$pass"; then + vars="compile_deplibs finalize_deplibs" + else + vars=deplibs + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + + # Add Sun CC postdeps if required: + test CXX = "$tagname" && { + case $host_os in + linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C++ 5.9 + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + + solaris*) + func_cc_basename "$CC" + case $func_cc_basename_result in + CC* | sunCC*) + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + esac + } + + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i= + ;; + esac + if test -n "$i"; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test prog = "$linkmode"; then + dlfiles=$newdlfiles + fi + if test prog = "$linkmode" || test lib = "$linkmode"; then + dlprefiles=$newdlprefiles + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "'-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "'-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs=$output + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form 'libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test no = "$module" \ + && func_fatal_help "libtool library '$output' must begin with 'lib'" + + if test no != "$need_lib_prefix"; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test pass_all != "$deplibs_check_method"; then + func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test no = "$dlself" \ + || func_warning "'-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test 1 -lt "$#" \ + && func_warning "ignoring multiple '-rpath's for a libtool library" + + install_libdir=$1 + + oldlibs= + if test -z "$rpath"; then + if test yes = "$build_libtool_libs"; then + # Building a libtool convenience library. + # Some compilers have problems with a '.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "'-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs=$IFS; IFS=: + set dummy $vinfo 0 0 0 + shift + IFS=$save_ifs + + test -n "$7" && \ + func_fatal_help "too many parameters to '-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major=$1 + number_minor=$2 + number_revision=$3 + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # that has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|freebsd-elf|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_revision + ;; + freebsd-aout|qnx|sunos) + current=$number_major + revision=$number_minor + age=0 + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_minor + lt_irix_increment=no + ;; + *) + func_fatal_configuration "$modename: unknown library version type '$version_type'" + ;; + esac + ;; + no) + current=$1 + revision=$2 + age=$3 + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT '$current' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION '$revision' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE '$age' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE '$age' is greater than the current interface number '$current'" + func_fatal_error "'$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + # On Darwin other compilers + case $CC in + nagfor*) + verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + ;; + *) + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + esac + ;; + + freebsd-aout) + major=.$current + versuffix=.$current.$revision + ;; + + freebsd-elf) + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + irix | nonstopux) + if test no = "$lt_irix_increment"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring=$verstring_prefix$major.$revision + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test 0 -ne "$loop"; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring_prefix$major.$iface:$verstring + done + + # Before this point, $major must not contain '.'. + major=.$major + versuffix=$major.$revision + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=.$current.$age.$revision + verstring=$current.$age.$revision + + # Add in all the interfaces that we are compatible with. + loop=$age + while test 0 -ne "$loop"; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring:$iface.0 + done + + # Make executables depend on our current version. + func_append verstring ":$current.0" + ;; + + qnx) + major=.$current + versuffix=.$current + ;; + + sco) + major=.$current + versuffix=.$current + ;; + + sunos) + major=.$current + versuffix=.$current.$revision + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 file systems. + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + + *) + func_fatal_configuration "unknown library version type '$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring=0.0 + ;; + esac + if test no = "$need_version"; then + versuffix= + else + versuffix=.0.0 + fi + fi + + # Remove version info from name if versioning should be avoided + if test yes,no = "$avoid_version,$need_version"; then + major= + versuffix= + verstring= + fi + + # Check to see if the archive will have undefined symbols. + if test yes = "$allow_undefined"; then + if test unsupported = "$allow_undefined_flag"; then + if test yes = "$build_old_libs"; then + func_warning "undefined symbols not allowed in $host shared libraries; building static only" + build_libtool_libs=no + else + func_fatal_error "can't build $host shared library unless -no-undefined is specified" + fi + fi + else + # Don't allow undefined symbols. + allow_undefined_flag=$no_undefined_flag + fi + + fi + + func_generate_dlsyms "$libname" "$libname" : + func_append libobjs " $symfileobj" + test " " = "$libobjs" && libobjs= + + if test relink != "$opt_mode"; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) + if test -n "$precious_files_regex"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles=$dlfiles + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles=$dlprefiles + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test yes = "$build_libtool_libs"; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test yes = "$build_libtool_need_lc"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release= + versuffix= + major= + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c <<EOF + int main() { return 0; } +EOF + $opt_dry_run || $RM conftest + if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then + ldd_output=`ldd conftest` + for i in $deplibs; do + case $i in + -l*) + func_stripname -l '' "$i" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $i "*) + func_append newdeplibs " $i" + i= + ;; + esac + fi + if test -n "$i"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` + set dummy $deplib_matches; shift + deplib_match=$1 + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then + func_append newdeplibs " $i" + else + droppeddeps=yes + echo + $ECHO "*** Warning: dynamic linker does not accept needed library $i." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which I believe you do not have" + echo "*** because a test_compile did reveal that the linker did not use it for" + echo "*** its dynamic dependency list that programs get resolved with at runtime." + fi + fi + ;; + *) + func_append newdeplibs " $i" + ;; + esac + done + else + # Error occurred in the first compile. Let's try to salvage + # the situation: Compile a separate program for each library. + for i in $deplibs; do + case $i in + -l*) + func_stripname -l '' "$i" + name=$func_stripname_result + $opt_dry_run || $RM conftest + if $LTCC $LTCFLAGS -o conftest conftest.c $i; then + ldd_output=`ldd conftest` + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $i "*) + func_append newdeplibs " $i" + i= + ;; + esac + fi + if test -n "$i"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` + set dummy $deplib_matches; shift + deplib_match=$1 + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then + func_append newdeplibs " $i" + else + droppeddeps=yes + echo + $ECHO "*** Warning: dynamic linker does not accept needed library $i." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because a test_compile did reveal that the linker did not use this one" + echo "*** as a dynamic dependency that programs can get resolved with at runtime." + fi + fi + else + droppeddeps=yes + echo + $ECHO "*** Warning! Library $i is needed by this library but I was not able to" + echo "*** make it link in! You will probably need to install it or some" + echo "*** library that it depends on before this library will be fully" + echo "*** functional. Installing it before continuing would be even better." + fi + ;; + *) + func_append newdeplibs " $i" + ;; + esac + done + fi + ;; + file_magic*) + set dummy $deplibs_check_method; shift + file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib= + ;; + esac + fi + if test -n "$a_deplib"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + if test -n "$file_magic_glob"; then + libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` + else + libnameglob=$libname + fi + test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + if test yes = "$want_nocaseglob"; then + shopt -s nocaseglob + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib=$potent_lib + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | $SED 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; + *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib= + ;; + esac + fi + if test -n "$a_deplib"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib=$potent_lib # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs= + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + for i in $predeps $postdeps; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test none = "$deplibs_check_method"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test yes = "$droppeddeps"; then + if test yes = "$module"; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test no = "$allow_undefined"; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs=$new_libs + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test yes = "$build_libtool_libs"; then + # Remove $wl instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test yes = "$hardcode_into_libs"; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath=$finalize_rpath + test relink = "$opt_mode" || rpath=$compile_rpath$rpath + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath=$finalize_shlibpath + test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname=$1 + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname=$realname + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib=$output_objdir/$realname + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols=$output_objdir/$libname.uexp + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + func_dll_def_p "$export_symbols" || { + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols=$export_symbols + export_symbols= + always_export_symbols=yes + } + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs=$IFS; IFS='~' + for cmd1 in $cmds; do + IFS=$save_ifs + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test yes = "$try_normal_branch" \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=$output_objdir/$output_la.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS=$save_ifs + if test -n "$export_symbols_regex" && test : != "$skipped_export"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test : != "$skipped_export" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs=$tmp_deplibs + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test yes = "$compiler_needs_object" && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test : != "$skipped_export" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then + output=$output_objdir/$output_la.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then + output=$output_objdir/$output_la.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test yes = "$compiler_needs_object"; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-$k.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test -z "$objlist" || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test 1 -eq "$k"; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-$k.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-$k.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + ${skipped_export-false} && { + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + } + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs=$IFS; IFS='~' + for cmd in $concat_cmds; do + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + ${skipped_export-false} && { + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + } + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs=$IFS; IFS='~' + for cmd in $cmds; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test yes = "$module" || test yes = "$export_dynamic"; then + # On all known operating systems, these are identical. + dlname=$soname + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "'-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object '$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj=$output + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # if reload_cmds runs $LD directly, get rid of -Wl from + # whole_archive_flag_spec and hope we can get by with turning comma + # into space. + case $reload_cmds in + *\$LD[\ \$]*) wl= ;; + esac + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags + else + gentop=$output_objdir/${obj}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test yes = "$build_libtool_libs" || libobjs=$non_pic_objects + + # Create the old-style object. + reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs + + output=$obj + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + test yes = "$build_libtool_libs" || { + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + } + + if test -n "$pic_flag" || test default != "$pic_mode"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output=$libobj + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "'-release' is ignored for programs" + + $preload \ + && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ + && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test CXX = "$tagname"; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " $wl-bind_at_load" + func_append finalize_command " $wl-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs=$new_libs + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath=$rpath + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath=$rpath + + if test -n "$libobjs" && test yes = "$build_old_libs"; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" false + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=: + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=false + ;; + *cygwin* | *mingw* ) + test yes = "$build_libtool_libs" || wrappers_required=false + ;; + *) + if test no = "$need_relink" || test yes != "$build_libtool_libs"; then + wrappers_required=false + fi + ;; + esac + $wrappers_required || { + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command=$compile_command$compile_rpath + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.$objext"; then + func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' + fi + + exit $exit_status + } + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test yes = "$no_install"; then + # We don't need to create a wrapper script. + link_command=$compile_var$compile_command$compile_rpath + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + case $hardcode_action,$fast_install in + relink,*) + # Fast installation is not supported + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "'$output' will be relinked during installation" + ;; + *,yes) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + ;; + *,no) + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + ;; + *,needless) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command= + ;; + esac + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource=$output_path/$objdir/lt-$output_name.c + cwrapper=$output_path/$output_name.exe + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host"; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + case $build_libtool_libs in + convenience) + oldobjs="$libobjs_save $symfileobj" + addlibs=$convenience + build_libtool_libs=no + ;; + module) + oldobjs=$libobjs_save + addlibs=$old_convenience + build_libtool_libs=no + ;; + *) + oldobjs="$old_deplibs $non_pic_objects" + $preload && test -f "$symfileobj" \ + && func_append oldobjs " $symfileobj" + addlibs=$old_convenience + ;; + esac + + if test -n "$addlibs"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase=$func_basename_result + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj"; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test -z "$oldobjs"; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test yes = "$build_old_libs" && old_library=$libname.$libext + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test yes = "$hardcode_automatic"; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test yes = "$installed"; then + if test -z "$install_libdir"; then + break + fi + output=$output_objdir/${outputname}i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name=$func_basename_result + func_resolve_sysroot "$deplib" + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs=$newdependency_libs + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles=$newdlprefiles + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles=$newdlprefiles + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test -n "$bindir"; then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result/$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test no,yes = "$installed,$need_relink"; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +if test link = "$opt_mode" || test relink = "$opt_mode"; then + func_mode_link ${1+"$@"} +fi + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $debug_cmd + + RM=$nonopt + files= + rmforce=false + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=: ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir=$func_dirname_result + if test . = "$dir"; then + odir=$objdir + else + odir=$dir/$objdir + fi + func_basename "$file" + name=$func_basename_result + test uninstall = "$opt_mode" && odir=$dir + + # Remember odir for removal later, being careful to avoid duplicates + if test clean = "$opt_mode"; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif $rmforce; then + continue + fi + + rmfiles=$file + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case $opt_mode in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && test none != "$pic_object"; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && test none != "$non_pic_object"; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test clean = "$opt_mode"; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.$objext" + if test yes = "$fast_install" && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name"; then + func_append rmfiles " $odir/lt-$noexename.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the $objdir's in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then + func_mode_uninstall ${1+"$@"} +fi + +test -z "$opt_mode" && { + help=$generic_help + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode '$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# where we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/devspec.en_US/project/recutils/build-aux/mdate-sh b/devspec.en_US/project/recutils/build-aux/mdate-sh new file mode 100755 index 0000000..8c7a590 --- /dev/null +++ b/devspec.en_US/project/recutils/build-aux/mdate-sh @@ -0,0 +1,228 @@ +#!/bin/sh +# Get modification time of a file or directory and pretty-print it. + +scriptversion=2018-03-07.03; # UTC + +# Copyright (C) 1995-2018 Free Software Foundation, Inc. +# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to <bug-automake@gnu.org> or send patches to +# <automake-patches@gnu.org>. + +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +fi + +case $1 in + '') + echo "$0: No file. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: mdate-sh [--help] [--version] FILE + +Pretty-print the modification day of FILE, in the format: +1 January 1970 + +Report bugs to <bug-automake@gnu.org>. +EOF + exit $? + ;; + -v | --v*) + echo "mdate-sh $scriptversion" + exit $? + ;; +esac + +error () +{ + echo "$0: $1" >&2 + exit 1 +} + + +# Prevent date giving response in another language. +LANG=C +export LANG +LC_ALL=C +export LC_ALL +LC_TIME=C +export LC_TIME + +# Use UTC to get reproducible result. +TZ=UTC0 +export TZ + +# GNU ls changes its time format in response to the TIME_STYLE +# variable. Since we cannot assume 'unset' works, revert this +# variable to its documented default. +if test "${TIME_STYLE+set}" = set; then + TIME_STYLE=posix-long-iso + export TIME_STYLE +fi + +save_arg1=$1 + +# Find out how to get the extended ls output of a file or directory. +if ls -L /dev/null 1>/dev/null 2>&1; then + ls_command='ls -L -l -d' +else + ls_command='ls -l -d' +fi +# Avoid user/group names that might have spaces, when possible. +if ls -n /dev/null 1>/dev/null 2>&1; then + ls_command="$ls_command -n" +fi + +# A 'ls -l' line looks as follows on OS/2. +# drwxrwx--- 0 Aug 11 2001 foo +# This differs from Unix, which adds ownership information. +# drwxrwx--- 2 root root 4096 Aug 11 2001 foo +# +# To find the date, we split the line on spaces and iterate on words +# until we find a month. This cannot work with files whose owner is a +# user named "Jan", or "Feb", etc. However, it's unlikely that '/' +# will be owned by a user whose name is a month. So we first look at +# the extended ls output of the root directory to decide how many +# words should be skipped to get the date. + +# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. +set x`$ls_command /` + +# Find which argument is the month. +month= +command= +until test $month +do + test $# -gt 0 || error "failed parsing '$ls_command /' output" + shift + # Add another shift to the command. + command="$command shift;" + case $1 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; + esac +done + +test -n "$month" || error "failed parsing '$ls_command /' output" + +# Get the extended ls output of the file or directory. +set dummy x`eval "$ls_command \"\\\$save_arg1\""` + +# Remove all preceding arguments +eval $command + +# Because of the dummy argument above, month is in $2. +# +# On a POSIX system, we should have +# +# $# = 5 +# $1 = file size +# $2 = month +# $3 = day +# $4 = year or time +# $5 = filename +# +# On Darwin 7.7.0 and 7.6.0, we have +# +# $# = 4 +# $1 = day +# $2 = month +# $3 = year or time +# $4 = filename + +# Get the month. +case $2 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; +esac + +case $3 in + ???*) day=$1;; + *) day=$3; shift;; +esac + +# Here we have to deal with the problem that the ls output gives either +# the time of day or the year. +case $3 in + *:*) set `date`; eval year=\$$# + case $2 in + Jan) nummonthtod=1;; + Feb) nummonthtod=2;; + Mar) nummonthtod=3;; + Apr) nummonthtod=4;; + May) nummonthtod=5;; + Jun) nummonthtod=6;; + Jul) nummonthtod=7;; + Aug) nummonthtod=8;; + Sep) nummonthtod=9;; + Oct) nummonthtod=10;; + Nov) nummonthtod=11;; + Dec) nummonthtod=12;; + esac + # For the first six month of the year the time notation can also + # be used for files modified in the last year. + if (expr $nummonth \> $nummonthtod) > /dev/null; + then + year=`expr $year - 1` + fi;; + *) year=$3;; +esac + +# The result. +echo $day $month $year + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: diff --git a/devspec.en_US/project/recutils/build-aux/missing b/devspec.en_US/project/recutils/build-aux/missing new file mode 100755 index 0000000..f62bbae --- /dev/null +++ b/devspec.en_US/project/recutils/build-aux/missing @@ -0,0 +1,215 @@ +#! /bin/sh +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2013-10-28.13; # UTC + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try '$0 --help' for more information" + exit 1 +fi + +case $1 in + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to <bug-automake@gnu.org>." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" + exit 1 + ;; + +esac + +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=http://www.perl.org/ +flex_URL=http://flex.sourceforge.net/ +gnu_software_URL=http://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'autom4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/devspec.en_US/project/recutils/build-aux/test-driver b/devspec.en_US/project/recutils/build-aux/test-driver new file mode 100755 index 0000000..8e575b0 --- /dev/null +++ b/devspec.en_US/project/recutils/build-aux/test-driver @@ -0,0 +1,148 @@ +#! /bin/sh +# test-driver - basic testsuite driver script. + +scriptversion=2013-07-13.22; # UTC + +# Copyright (C) 2011-2014 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to <bug-automake@gnu.org> or send patches to +# <automake-patches@gnu.org>. + +# Make unconditional expansion of undefined variables an error. This +# helps a lot in preventing typo-related bugs. +set -u + +usage_error () +{ + echo "$0: $*" >&2 + print_usage >&2 + exit 2 +} + +print_usage () +{ + cat <<END +Usage: + test-driver --test-name=NAME --log-file=PATH --trs-file=PATH + [--expect-failure={yes|no}] [--color-tests={yes|no}] + [--enable-hard-errors={yes|no}] [--] + TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS] +The '--test-name', '--log-file' and '--trs-file' options are mandatory. +END +} + +test_name= # Used for reporting. +log_file= # Where to save the output of the test script. +trs_file= # Where to save the metadata of the test run. +expect_failure=no +color_tests=no +enable_hard_errors=yes +while test $# -gt 0; do + case $1 in + --help) print_usage; exit $?;; + --version) echo "test-driver $scriptversion"; exit $?;; + --test-name) test_name=$2; shift;; + --log-file) log_file=$2; shift;; + --trs-file) trs_file=$2; shift;; + --color-tests) color_tests=$2; shift;; + --expect-failure) expect_failure=$2; shift;; + --enable-hard-errors) enable_hard_errors=$2; shift;; + --) shift; break;; + -*) usage_error "invalid option: '$1'";; + *) break;; + esac + shift +done + +missing_opts= +test x"$test_name" = x && missing_opts="$missing_opts --test-name" +test x"$log_file" = x && missing_opts="$missing_opts --log-file" +test x"$trs_file" = x && missing_opts="$missing_opts --trs-file" +if test x"$missing_opts" != x; then + usage_error "the following mandatory options are missing:$missing_opts" +fi + +if test $# -eq 0; then + usage_error "missing argument" +fi + +if test $color_tests = yes; then + # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'. + red='' # Red. + grn='' # Green. + lgn='' # Light green. + blu='' # Blue. + mgn='' # Magenta. + std='' # No color. +else + red= grn= lgn= blu= mgn= std= +fi + +do_exit='rm -f $log_file $trs_file; (exit $st); exit $st' +trap "st=129; $do_exit" 1 +trap "st=130; $do_exit" 2 +trap "st=141; $do_exit" 13 +trap "st=143; $do_exit" 15 + +# Test script is run here. +"$@" >$log_file 2>&1 +estatus=$? + +if test $enable_hard_errors = no && test $estatus -eq 99; then + tweaked_estatus=1 +else + tweaked_estatus=$estatus +fi + +case $tweaked_estatus:$expect_failure in + 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; + 0:*) col=$grn res=PASS recheck=no gcopy=no;; + 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; + 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; + *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; + *:*) col=$red res=FAIL recheck=yes gcopy=yes;; +esac + +# Report the test outcome and exit status in the logs, so that one can +# know whether the test passed or failed simply by looking at the '.log' +# file, without the need of also peaking into the corresponding '.trs' +# file (automake bug#11814). +echo "$res $test_name (exit status: $estatus)" >>$log_file + +# Report outcome to console. +echo "${col}${res}${std}: $test_name" + +# Register the test result, and other relevant metadata. +echo ":test-result: $res" > $trs_file +echo ":global-test-result: $res" >> $trs_file +echo ":recheck: $recheck" >> $trs_file +echo ":copy-in-global-log: $gcopy" >> $trs_file + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/devspec.en_US/project/recutils/build-aux/texinfo.tex b/devspec.en_US/project/recutils/build-aux/texinfo.tex new file mode 100755 index 0000000..66a832e --- /dev/null +++ b/devspec.en_US/project/recutils/build-aux/texinfo.tex @@ -0,0 +1,11672 @@ +% texinfo.tex -- TeX macros to handle Texinfo files. +% +% Load plain if necessary, i.e., if running under initex. +\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi +% +\def\texinfoversion{2018-12-28.17} +% +% Copyright 1985, 1986, 1988, 1990-2018 Free Software Foundation, Inc. +% +% This texinfo.tex file is free software: you can redistribute it and/or +% modify it under the terms of the GNU General Public License as +% published by the Free Software Foundation, either version 3 of the +% License, or (at your option) any later version. +% +% This texinfo.tex file is distributed in the hope that it will be +% useful, but WITHOUT ANY WARRANTY; without even the implied warranty +% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +% General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program. If not, see <https://www.gnu.org/licenses/>. +% +% As a special exception, when this file is read by TeX when processing +% a Texinfo source document, you may use the result without +% restriction. This Exception is an additional permission under section 7 +% of the GNU General Public License, version 3 ("GPLv3"). +% +% Please try the latest version of texinfo.tex before submitting bug +% reports; you can get the latest version from: +% https://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or +% https://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or +% https://www.gnu.org/software/texinfo/ (the Texinfo home page) +% The texinfo.tex in any given distribution could well be out +% of date, so if that's what you're using, please check. +% +% Send bug reports to bug-texinfo@gnu.org. Please include including a +% complete document in each bug report with which we can reproduce the +% problem. Patches are, of course, greatly appreciated. +% +% To process a Texinfo manual with TeX, it's most reliable to use the +% texi2dvi shell script that comes with the distribution. For a simple +% manual foo.texi, however, you can get away with this: +% tex foo.texi +% texindex foo.?? +% tex foo.texi +% tex foo.texi +% dvips foo.dvi -o # or whatever; this makes foo.ps. +% The extra TeX runs get the cross-reference information correct. +% Sometimes one run after texindex suffices, and sometimes you need more +% than two; texi2dvi does it as many times as necessary. +% +% It is possible to adapt texinfo.tex for other languages, to some +% extent. You can get the existing language-specific files from the +% full Texinfo distribution. +% +% The GNU Texinfo home page is https://www.gnu.org/software/texinfo. + + +\message{Loading texinfo [version \texinfoversion]:} + +% If in a .fmt file, print the version number +% and turn on active characters that we couldn't do earlier because +% they might have appeared in the input file name. +\everyjob{\message{[Texinfo version \texinfoversion]}% + \catcode`+=\active \catcode`\_=\active} + +% LaTeX's \typeout. This ensures that the messages it is used for +% are identical in format to the corresponding ones from latex/pdflatex. +\def\typeout{\immediate\write17}% + +\chardef\other=12 + +% We never want plain's \outer definition of \+ in Texinfo. +% For @tex, we can use \tabalign. +\let\+ = \relax + +% Save some plain tex macros whose names we will redefine. +\let\ptexb=\b +\let\ptexbullet=\bullet +\let\ptexc=\c +\let\ptexcomma=\, +\let\ptexdot=\. +\let\ptexdots=\dots +\let\ptexend=\end +\let\ptexequiv=\equiv +\let\ptexexclam=\! +\let\ptexfootnote=\footnote +\let\ptexgtr=> +\let\ptexhat=^ +\let\ptexi=\i +\let\ptexindent=\indent +\let\ptexinsert=\insert +\let\ptexlbrace=\{ +\let\ptexless=< +\let\ptexnewwrite\newwrite +\let\ptexnoindent=\noindent +\let\ptexplus=+ +\let\ptexraggedright=\raggedright +\let\ptexrbrace=\} +\let\ptexslash=\/ +\let\ptexsp=\sp +\let\ptexstar=\* +\let\ptexsup=\sup +\let\ptext=\t +\let\ptextop=\top +{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode + +% If this character appears in an error message or help string, it +% starts a new line in the output. +\newlinechar = `^^J + +% Use TeX 3.0's \inputlineno to get the line number, for better error +% messages, but if we're using an old version of TeX, don't do anything. +% +\ifx\inputlineno\thisisundefined + \let\linenumber = \empty % Pre-3.0. +\else + \def\linenumber{l.\the\inputlineno:\space} +\fi + +% Set up fixed words for English if not already set. +\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi +\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi +\ifx\putworderror\undefined \gdef\putworderror{error}\fi +\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi +\ifx\putwordin\undefined \gdef\putwordin{in}\fi +\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi +\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi +\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi +\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi +\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi +\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi +\ifx\putwordof\undefined \gdef\putwordof{of}\fi +\ifx\putwordon\undefined \gdef\putwordon{on}\fi +\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi +\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi +\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi +\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi +\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi +\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi +\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi +% +\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi +\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi +\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi +\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi +\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi +\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi +\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi +\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi +\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi +\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi +\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi +\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi +% +\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi +\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi +\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi +\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi +\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi + +% Give the space character the catcode for a space. +\def\spaceisspace{\catcode`\ =10\relax} + +% Likewise for ^^M, the end of line character. +\def\endlineisspace{\catcode13=10\relax} + +\chardef\dashChar = `\- +\chardef\slashChar = `\/ +\chardef\underChar = `\_ + +% Ignore a token. +% +\def\gobble#1{} + +% The following is used inside several \edef's. +\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} + +% Hyphenation fixes. +\hyphenation{ + Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script + ap-pen-dix bit-map bit-maps + data-base data-bases eshell fall-ing half-way long-est man-u-script + man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm + par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces + spell-ing spell-ings + stand-alone strong-est time-stamp time-stamps which-ever white-space + wide-spread wrap-around +} + +% Sometimes it is convenient to have everything in the transcript file +% and nothing on the terminal. We don't just call \tracingall here, +% since that produces some useless output on the terminal. We also make +% some effort to order the tracing commands to reduce output in the log +% file; cf. trace.sty in LaTeX. +% +\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% +\def\loggingall{% + \tracingstats2 + \tracingpages1 + \tracinglostchars2 % 2 gives us more in etex + \tracingparagraphs1 + \tracingoutput1 + \tracingmacros2 + \tracingrestores1 + \showboxbreadth\maxdimen \showboxdepth\maxdimen + \ifx\eTeXversion\thisisundefined\else % etex gives us more logging + \tracingscantokens1 + \tracingifs1 + \tracinggroups1 + \tracingnesting2 + \tracingassigns1 + \fi + \tracingcommands3 % 3 gives us more in etex + \errorcontextlines16 +}% + +% @errormsg{MSG}. Do the index-like expansions on MSG, but if things +% aren't perfect, it's not the end of the world, being an error message, +% after all. +% +\def\errormsg{\begingroup \indexnofonts \doerrormsg} +\def\doerrormsg#1{\errmessage{#1}} + +% add check for \lastpenalty to plain's definitions. If the last thing +% we did was a \nobreak, we don't want to insert more space. +% +\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount + \removelastskip\penalty-50\smallskip\fi\fi} +\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount + \removelastskip\penalty-100\medskip\fi\fi} +\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount + \removelastskip\penalty-200\bigskip\fi\fi} + +% Output routine +% + +% For a final copy, take out the rectangles +% that mark overfull boxes (in case you have decided +% that the text looks ok even though it passes the margin). +% +\def\finalout{\overfullrule=0pt } + +\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines +\newdimen\topandbottommargin \topandbottommargin=.75in + +% Output a mark which sets \thischapter, \thissection and \thiscolor. +% We dump everything together because we only have one kind of mark. +% This works because we only use \botmark / \topmark, not \firstmark. +% +% A mark contains a subexpression of the \ifcase ... \fi construct. +% \get*marks macros below extract the needed part using \ifcase. +% +% Another complication is to let the user choose whether \thischapter +% (\thissection) refers to the chapter (section) in effect at the top +% of a page, or that at the bottom of a page. + +% \domark is called twice inside \chapmacro, to add one +% mark before the section break, and one after. +% In the second call \prevchapterdefs is the same as \lastchapterdefs, +% and \prevsectiondefs is the same as \lastsectiondefs. +% Then if the page is not broken at the mark, some of the previous +% section appears on the page, and we can get the name of this section +% from \firstmark for @everyheadingmarks top. +% @everyheadingmarks bottom uses \botmark. +% +% See page 260 of The TeXbook. +\def\domark{% + \toks0=\expandafter{\lastchapterdefs}% + \toks2=\expandafter{\lastsectiondefs}% + \toks4=\expandafter{\prevchapterdefs}% + \toks6=\expandafter{\prevsectiondefs}% + \toks8=\expandafter{\lastcolordefs}% + \mark{% + \the\toks0 \the\toks2 % 0: marks for @everyheadingmarks top + \noexpand\or \the\toks4 \the\toks6 % 1: for @everyheadingmarks bottom + \noexpand\else \the\toks8 % 2: color marks + }% +} + +% \gettopheadingmarks, \getbottomheadingmarks, +% \getcolormarks - extract needed part of mark. +% +% \topmark doesn't work for the very first chapter (after the title +% page or the contents), so we use \firstmark there -- this gets us +% the mark with the chapter defs, unless the user sneaks in, e.g., +% @setcolor (or @url, or @link, etc.) between @contents and the very +% first @chapter. +\def\gettopheadingmarks{% + \ifcase0\topmark\fi + \ifx\thischapter\empty \ifcase0\firstmark\fi \fi +} +\def\getbottomheadingmarks{\ifcase1\botmark\fi} +\def\getcolormarks{\ifcase2\topmark\fi} + +% Avoid "undefined control sequence" errors. +\def\lastchapterdefs{} +\def\lastsectiondefs{} +\def\lastsection{} +\def\prevchapterdefs{} +\def\prevsectiondefs{} +\def\lastcolordefs{} + +% Margin to add to right of even pages, to left of odd pages. +\newdimen\bindingoffset +\newdimen\normaloffset +\newdimen\txipagewidth \newdimen\txipageheight + +% Main output routine. +% +\chardef\PAGE = 255 +\output = {\onepageout{\pagecontents\PAGE}} + +\newbox\headlinebox +\newbox\footlinebox + +% \onepageout takes a vbox as an argument. +% \shipout a vbox for a single page, adding an optional header, footer +% and footnote. This also causes index entries for this page to be written +% to the auxiliary files. +% +\def\onepageout#1{% + \hoffset=\normaloffset + % + \ifodd\pageno \advance\hoffset by \bindingoffset + \else \advance\hoffset by -\bindingoffset\fi + % + % Common context changes for both heading and footing. + % Do this outside of the \shipout so @code etc. will be expanded in + % the headline as they should be, not taken literally (outputting ''code). + \def\commmonheadfootline{\let\hsize=\txipagewidth \texinfochars} + % + % Retrieve the information for the headings from the marks in the page, + % and call Plain TeX's \makeheadline and \makefootline, which use the + % values in \headline and \footline. + % + % This is used to check if we are on the first page of a chapter. + \ifcase1\topmark\fi + \let\prevchaptername\thischaptername + \ifcase0\firstmark\fi + \let\curchaptername\thischaptername + % + \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi + \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi + % + \ifx\curchaptername\prevchaptername + \let\thischapterheading\thischapter + \else + % \thischapterheading is the same as \thischapter except it is blank + % for the first page of a chapter. This is to prevent the chapter name + % being shown twice. + \def\thischapterheading{}% + \fi + % + \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}% + \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}% + % + {% + % Set context for writing to auxiliary files like index files. + % Have to do this stuff outside the \shipout because we want it to + % take effect in \write's, yet the group defined by the \vbox ends + % before the \shipout runs. + % + \indexdummies % don't expand commands in the output. + \normalturnoffactive % \ in index entries must not stay \, e.g., if + % the page break happens to be in the middle of an example. + % We don't want .vr (or whatever) entries like this: + % \entry{{\indexbackslash }acronym}{32}{\code {\acronym}} + % "\acronym" won't work when it's read back in; + % it needs to be + % {\code {{\backslashcurfont }acronym} + \shipout\vbox{% + % Do this early so pdf references go to the beginning of the page. + \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi + % + \unvbox\headlinebox + \pagebody{#1}% + \ifdim\ht\footlinebox > 0pt + % Only leave this space if the footline is nonempty. + % (We lessened \vsize for it in \oddfootingyyy.) + % The \baselineskip=24pt in plain's \makefootline has no effect. + \vskip 24pt + \unvbox\footlinebox + \fi + % + }% end of \shipout\vbox + }% end of group with \indexdummies + \advancepageno + \ifnum\outputpenalty>-20000 \else\dosupereject\fi +} + +\newinsert\margin \dimen\margin=\maxdimen + +% Main part of page, including any footnotes +\def\pagebody#1{\vbox to\txipageheight{\boxmaxdepth=\maxdepth #1}} +{\catcode`\@ =11 +\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi +% marginal hacks, juha@viisa.uucp (Juha Takala) +\ifvoid\margin\else % marginal info is present + \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi +\dimen@=\dp#1\relax \unvbox#1\relax +\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi +\ifr@ggedbottom \kern-\dimen@ \vfil \fi} +} + + +% Argument parsing + +% Parse an argument, then pass it to #1. The argument is the rest of +% the input line (except we remove a trailing comment). #1 should be a +% macro which expects an ordinary undelimited TeX argument. +% For example, \def\foo{\parsearg\fooxxx}. +% +\def\parsearg{\parseargusing{}} +\def\parseargusing#1#2{% + \def\argtorun{#2}% + \begingroup + \obeylines + \spaceisspace + #1% + \parseargline\empty% Insert the \empty token, see \finishparsearg below. +} + +{\obeylines % + \gdef\parseargline#1^^M{% + \endgroup % End of the group started in \parsearg. + \argremovecomment #1\comment\ArgTerm% + }% +} + +% First remove any @comment, then any @c comment. Also remove a @texinfoc +% comment (see \scanmacro for details). Pass the result on to \argcheckspaces. +\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} +\def\argremovec#1\c#2\ArgTerm{\argremovetexinfoc #1\texinfoc\ArgTerm} +\def\argremovetexinfoc#1\texinfoc#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} + +% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space. +% +% \argremovec might leave us with trailing space, e.g., +% @end itemize @c foo +% This space token undergoes the same procedure and is eventually removed +% by \finishparsearg. +% +\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} +\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} +\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% + \def\temp{#3}% + \ifx\temp\empty + % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: + \let\temp\finishparsearg + \else + \let\temp\argcheckspaces + \fi + % Put the space token in: + \temp#1 #3\ArgTerm +} + +% If a _delimited_ argument is enclosed in braces, they get stripped; so +% to get _exactly_ the rest of the line, we had to prevent such situation. +% We prepended an \empty token at the very beginning and we expand it now, +% just before passing the control to \argtorun. +% (Similarly, we have to think about #3 of \argcheckspacesY above: it is +% either the null string, or it ends with \^^M---thus there is no danger +% that a pair of braces would be stripped. +% +% But first, we have to remove the trailing space token. +% +\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} + + +% \parseargdef - define a command taking an argument on the line +% +% \parseargdef\foo{...} +% is roughly equivalent to +% \def\foo{\parsearg\Xfoo} +% \def\Xfoo#1{...} +\def\parseargdef#1{% + \expandafter \doparseargdef \csname\string#1\endcsname #1% +} +\def\doparseargdef#1#2{% + \def#2{\parsearg#1}% + \def#1##1% +} + +% Several utility definitions with active space: +{ + \obeyspaces + \gdef\obeyedspace{ } + + % Make each space character in the input produce a normal interword + % space in the output. Don't allow a line break at this space, as this + % is used only in environments like @example, where each line of input + % should produce a line of output anyway. + % + \gdef\sepspaces{\obeyspaces\let =\tie} + + % If an index command is used in an @example environment, any spaces + % therein should become regular spaces in the raw index file, not the + % expansion of \tie (\leavevmode \penalty \@M \ ). + \gdef\unsepspaces{\let =\space} +} + + +\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} + +% Define the framework for environments in texinfo.tex. It's used like this: +% +% \envdef\foo{...} +% \def\Efoo{...} +% +% It's the responsibility of \envdef to insert \begingroup before the +% actual body; @end closes the group after calling \Efoo. \envdef also +% defines \thisenv, so the current environment is known; @end checks +% whether the environment name matches. The \checkenv macro can also be +% used to check whether the current environment is the one expected. +% +% Non-false conditionals (@iftex, @ifset) don't fit into this, so they +% are not treated as environments; they don't open a group. (The +% implementation of @end takes care not to call \endgroup in this +% special case.) + + +% At run-time, environments start with this: +\def\startenvironment#1{\begingroup\def\thisenv{#1}} +% initialize +\let\thisenv\empty + +% ... but they get defined via ``\envdef\foo{...}'': +\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} +\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} + +% Check whether we're in the right environment: +\def\checkenv#1{% + \def\temp{#1}% + \ifx\thisenv\temp + \else + \badenverr + \fi +} + +% Environment mismatch, #1 expected: +\def\badenverr{% + \errhelp = \EMsimple + \errmessage{This command can appear only \inenvironment\temp, + not \inenvironment\thisenv}% +} +\def\inenvironment#1{% + \ifx#1\empty + outside of any environment% + \else + in environment \expandafter\string#1% + \fi +} + +% @end foo executes the definition of \Efoo. +% But first, it executes a specialized version of \checkenv +% +\parseargdef\end{% + \if 1\csname iscond.#1\endcsname + \else + % The general wording of \badenverr may not be ideal. + \expandafter\checkenv\csname#1\endcsname + \csname E#1\endcsname + \endgroup + \fi +} + +\newhelp\EMsimple{Press RETURN to continue.} + + +% Be sure we're in horizontal mode when doing a tie, since we make space +% equivalent to this in @example-like environments. Otherwise, a space +% at the beginning of a line will start with \penalty -- and +% since \penalty is valid in vertical mode, we'd end up putting the +% penalty on the vertical list instead of in the new paragraph. +{\catcode`@ = 11 + % Avoid using \@M directly, because that causes trouble + % if the definition is written into an index file. + \global\let\tiepenalty = \@M + \gdef\tie{\leavevmode\penalty\tiepenalty\ } +} + +% @: forces normal size whitespace following. +\def\:{\spacefactor=1000 } + +% @* forces a line break. +\def\*{\unskip\hfil\break\hbox{}\ignorespaces} + +% @/ allows a line break. +\let\/=\allowbreak + +% @. is an end-of-sentence period. +\def\.{.\spacefactor=\endofsentencespacefactor\space} + +% @! is an end-of-sentence bang. +\def\!{!\spacefactor=\endofsentencespacefactor\space} + +% @? is an end-of-sentence query. +\def\?{?\spacefactor=\endofsentencespacefactor\space} + +% @frenchspacing on|off says whether to put extra space after punctuation. +% +\def\onword{on} +\def\offword{off} +% +\parseargdef\frenchspacing{% + \def\temp{#1}% + \ifx\temp\onword \plainfrenchspacing + \else\ifx\temp\offword \plainnonfrenchspacing + \else + \errhelp = \EMsimple + \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% + \fi\fi +} + +% @w prevents a word break. Without the \leavevmode, @w at the +% beginning of a paragraph, when TeX is still in vertical mode, would +% produce a whole line of output instead of starting the paragraph. +\def\w#1{\leavevmode\hbox{#1}} + +% @group ... @end group forces ... to be all on one page, by enclosing +% it in a TeX vbox. We use \vtop instead of \vbox to construct the box +% to keep its height that of a normal line. According to the rules for +% \topskip (p.114 of the TeXbook), the glue inserted is +% max (\topskip - \ht (first item), 0). If that height is large, +% therefore, no glue is inserted, and the space between the headline and +% the text is small, which looks bad. +% +% Another complication is that the group might be very large. This can +% cause the glue on the previous page to be unduly stretched, because it +% does not have much material. In this case, it's better to add an +% explicit \vfill so that the extra space is at the bottom. The +% threshold for doing this is if the group is more than \vfilllimit +% percent of a page (\vfilllimit can be changed inside of @tex). +% +\newbox\groupbox +\def\vfilllimit{0.7} +% +\envdef\group{% + \ifnum\catcode`\^^M=\active \else + \errhelp = \groupinvalidhelp + \errmessage{@group invalid in context where filling is enabled}% + \fi + \startsavinginserts + % + \setbox\groupbox = \vtop\bgroup + % Do @comment since we are called inside an environment such as + % @example, where each end-of-line in the input causes an + % end-of-line in the output. We don't want the end-of-line after + % the `@group' to put extra space in the output. Since @group + % should appear on a line by itself (according to the Texinfo + % manual), we don't worry about eating any user text. + \comment +} +% +% The \vtop produces a box with normal height and large depth; thus, TeX puts +% \baselineskip glue before it, and (when the next line of text is done) +% \lineskip glue after it. Thus, space below is not quite equal to space +% above. But it's pretty close. +\def\Egroup{% + % To get correct interline space between the last line of the group + % and the first line afterwards, we have to propagate \prevdepth. + \endgraf % Not \par, as it may have been set to \lisppar. + \global\dimen1 = \prevdepth + \egroup % End the \vtop. + \addgroupbox + \prevdepth = \dimen1 + \checkinserts +} + +\def\addgroupbox{ + % \dimen0 is the vertical size of the group's box. + \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox + % \dimen2 is how much space is left on the page (more or less). + \dimen2 = \txipageheight \advance\dimen2 by -\pagetotal + % if the group doesn't fit on the current page, and it's a big big + % group, force a page break. + \ifdim \dimen0 > \dimen2 + \ifdim \pagetotal < \vfilllimit\txipageheight + \page + \fi + \fi + \box\groupbox +} + +% +% TeX puts in an \escapechar (i.e., `@') at the beginning of the help +% message, so this ends up printing `@group can only ...'. +% +\newhelp\groupinvalidhelp{% +group can only be used in environments such as @example,^^J% +where each line of input produces a line of output.} + +% @need space-in-mils +% forces a page break if there is not space-in-mils remaining. + +\newdimen\mil \mil=0.001in + +\parseargdef\need{% + % Ensure vertical mode, so we don't make a big box in the middle of a + % paragraph. + \par + % + % If the @need value is less than one line space, it's useless. + \dimen0 = #1\mil + \dimen2 = \ht\strutbox + \advance\dimen2 by \dp\strutbox + \ifdim\dimen0 > \dimen2 + % + % Do a \strut just to make the height of this box be normal, so the + % normal leading is inserted relative to the preceding line. + % And a page break here is fine. + \vtop to #1\mil{\strut\vfil}% + % + % TeX does not even consider page breaks if a penalty added to the + % main vertical list is 10000 or more. But in order to see if the + % empty box we just added fits on the page, we must make it consider + % page breaks. On the other hand, we don't want to actually break the + % page after the empty box. So we use a penalty of 9999. + % + % There is an extremely small chance that TeX will actually break the + % page at this \penalty, if there are no other feasible breakpoints in + % sight. (If the user is using lots of big @group commands, which + % almost-but-not-quite fill up a page, TeX will have a hard time doing + % good page breaking, for example.) However, I could not construct an + % example where a page broke at this \penalty; if it happens in a real + % document, then we can reconsider our strategy. + \penalty9999 + % + % Back up by the size of the box, whether we did a page break or not. + \kern -#1\mil + % + % Do not allow a page break right after this kern. + \nobreak + \fi +} + +% @br forces paragraph break (and is undocumented). + +\let\br = \par + +% @page forces the start of a new page. +% +\def\page{\par\vfill\supereject} + +% @exdent text.... +% outputs text on separate line in roman font, starting at standard page margin + +% This records the amount of indent in the innermost environment. +% That's how much \exdent should take out. +\newskip\exdentamount + +% This defn is used inside fill environments such as @defun. +\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} + +% This defn is used inside nofill environments such as @example. +\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount + \leftline{\hskip\leftskip{\rm#1}}}} + +% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current +% paragraph. For more general purposes, use the \margin insertion +% class. WHICH is `l' or `r'. Not documented, written for gawk manual. +% +\newskip\inmarginspacing \inmarginspacing=1cm +\def\strutdepth{\dp\strutbox} +% +\def\doinmargin#1#2{\strut\vadjust{% + \nobreak + \kern-\strutdepth + \vtop to \strutdepth{% + \baselineskip=\strutdepth + \vss + % if you have multiple lines of stuff to put here, you'll need to + % make the vbox yourself of the appropriate size. + \ifx#1l% + \llap{\ignorespaces #2\hskip\inmarginspacing}% + \else + \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% + \fi + \null + }% +}} +\def\inleftmargin{\doinmargin l} +\def\inrightmargin{\doinmargin r} +% +% @inmargin{TEXT [, RIGHT-TEXT]} +% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; +% else use TEXT for both). +% +\def\inmargin#1{\parseinmargin #1,,\finish} +\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \def\lefttext{#1}% have both texts + \def\righttext{#2}% + \else + \def\lefttext{#1}% have only one text + \def\righttext{#1}% + \fi + % + \ifodd\pageno + \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin + \else + \def\temp{\inleftmargin\lefttext}% + \fi + \temp +} + +% @include FILE -- \input text of FILE. +% +\def\include{\parseargusing\filenamecatcodes\includezzz} +\def\includezzz#1{% + \pushthisfilestack + \def\thisfile{#1}% + {% + \makevalueexpandable % we want to expand any @value in FILE. + \turnoffactive % and allow special characters in the expansion + \indexnofonts % Allow `@@' and other weird things in file names. + \wlog{texinfo.tex: doing @include of #1^^J}% + \edef\temp{\noexpand\input #1 }% + % + % This trickery is to read FILE outside of a group, in case it makes + % definitions, etc. + \expandafter + }\temp + \popthisfilestack +} +\def\filenamecatcodes{% + \catcode`\\=\other + \catcode`~=\other + \catcode`^=\other + \catcode`_=\other + \catcode`|=\other + \catcode`<=\other + \catcode`>=\other + \catcode`+=\other + \catcode`-=\other + \catcode`\`=\other + \catcode`\'=\other +} + +\def\pushthisfilestack{% + \expandafter\pushthisfilestackX\popthisfilestack\StackTerm +} +\def\pushthisfilestackX{% + \expandafter\pushthisfilestackY\thisfile\StackTerm +} +\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% + \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% +} + +\def\popthisfilestack{\errthisfilestackempty} +\def\errthisfilestackempty{\errmessage{Internal error: + the stack of filenames is empty.}} +% +\def\thisfile{} + +% @center line +% outputs that line, centered. +% +\parseargdef\center{% + \ifhmode + \let\centersub\centerH + \else + \let\centersub\centerV + \fi + \centersub{\hfil \ignorespaces#1\unskip \hfil}% + \let\centersub\relax % don't let the definition persist, just in case +} +\def\centerH#1{{% + \hfil\break + \advance\hsize by -\leftskip + \advance\hsize by -\rightskip + \line{#1}% + \break +}} +% +\newcount\centerpenalty +\def\centerV#1{% + % The idea here is the same as in \startdefun, \cartouche, etc.: if + % @center is the first thing after a section heading, we need to wipe + % out the negative parskip inserted by \sectionheading, but still + % prevent a page break here. + \centerpenalty = \lastpenalty + \ifnum\centerpenalty>10000 \vskip\parskip \fi + \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi + \line{\kern\leftskip #1\kern\rightskip}% +} + +% @sp n outputs n lines of vertical space +% +\parseargdef\sp{\vskip #1\baselineskip} + +% @comment ...line which is ignored... +% @c is the same as @comment +% @ignore ... @end ignore is another way to write a comment + + +\def\c{\begingroup \catcode`\^^M=\active% +\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% +\cxxx} +{\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}} +% +\let\comment\c + +% @paragraphindent NCHARS +% We'll use ems for NCHARS, close enough. +% NCHARS can also be the word `asis' or `none'. +% We cannot feasibly implement @paragraphindent asis, though. +% +\def\asisword{asis} % no translation, these are keywords +\def\noneword{none} +% +\parseargdef\paragraphindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \defaultparindent = 0pt + \else + \defaultparindent = #1em + \fi + \fi + \parindent = \defaultparindent +} + +% @exampleindent NCHARS +% We'll use ems for NCHARS like @paragraphindent. +% It seems @exampleindent asis isn't necessary, but +% I preserve it to make it similar to @paragraphindent. +\parseargdef\exampleindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \lispnarrowing = 0pt + \else + \lispnarrowing = #1em + \fi + \fi +} + +% @firstparagraphindent WORD +% If WORD is `none', then suppress indentation of the first paragraph +% after a section heading. If WORD is `insert', then do indent at such +% paragraphs. +% +% The paragraph indentation is suppressed or not by calling +% \suppressfirstparagraphindent, which the sectioning commands do. +% We switch the definition of this back and forth according to WORD. +% By default, we suppress indentation. +% +\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} +\def\insertword{insert} +% +\parseargdef\firstparagraphindent{% + \def\temp{#1}% + \ifx\temp\noneword + \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent + \else\ifx\temp\insertword + \let\suppressfirstparagraphindent = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @firstparagraphindent option `\temp'}% + \fi\fi +} + +% Here is how we actually suppress indentation. Redefine \everypar to +% \kern backwards by \parindent, and then reset itself to empty. +% +% We also make \indent itself not actually do anything until the next +% paragraph. +% +\gdef\dosuppressfirstparagraphindent{% + \gdef\indent {\restorefirstparagraphindent \indent}% + \gdef\noindent{\restorefirstparagraphindent \noindent}% + \global\everypar = {\kern -\parindent \restorefirstparagraphindent}% +} +% +\gdef\restorefirstparagraphindent{% + \global\let\indent = \ptexindent + \global\let\noindent = \ptexnoindent + \global\everypar = {}% +} + + +% @refill is a no-op. +\let\refill=\relax + +% @setfilename INFO-FILENAME - ignored +\let\setfilename=\comment + +% @bye. +\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} + + +\message{pdf,} +% adobe `portable' document format +\newcount\tempnum +\newcount\lnkcount +\newtoks\filename +\newcount\filenamelength +\newcount\pgn +\newtoks\toksA +\newtoks\toksB +\newtoks\toksC +\newtoks\toksD +\newbox\boxA +\newbox\boxB +\newcount\countA +\newif\ifpdf +\newif\ifpdfmakepagedest + +% +% For LuaTeX +% + +\newif\iftxiuseunicodedestname +\txiuseunicodedestnamefalse % For pdfTeX etc. + +\ifx\luatexversion\thisisundefined +\else + % Use Unicode destination names + \txiuseunicodedestnametrue + % Escape PDF strings with converting UTF-16 from UTF-8 + \begingroup + \catcode`\%=12 + \directlua{ + function UTF16oct(str) + tex.sprint(string.char(0x5c) .. '376' .. string.char(0x5c) .. '377') + for c in string.utfvalues(str) do + if c < 0x10000 then + tex.sprint( + string.format(string.char(0x5c) .. string.char(0x25) .. '03o' .. + string.char(0x5c) .. string.char(0x25) .. '03o', + (c / 256), (c % 256))) + else + c = c - 0x10000 + local c_hi = c / 1024 + 0xd800 + local c_lo = c % 1024 + 0xdc00 + tex.sprint( + string.format(string.char(0x5c) .. string.char(0x25) .. '03o' .. + string.char(0x5c) .. string.char(0x25) .. '03o' .. + string.char(0x5c) .. string.char(0x25) .. '03o' .. + string.char(0x5c) .. string.char(0x25) .. '03o', + (c_hi / 256), (c_hi % 256), + (c_lo / 256), (c_lo % 256))) + end + end + end + } + \endgroup + \def\pdfescapestrutfsixteen#1{\directlua{UTF16oct('\luaescapestring{#1}')}} + % Escape PDF strings without converting + \begingroup + \directlua{ + function PDFescstr(str) + for c in string.bytes(str) do + if c <= 0x20 or c >= 0x80 or c == 0x28 or c == 0x29 or c == 0x5c then + tex.sprint( + string.format(string.char(0x5c) .. string.char(0x25) .. '03o', + c)) + else + tex.sprint(string.char(c)) + end + end + end + } + \endgroup + \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}} + \ifnum\luatexversion>84 + % For LuaTeX >= 0.85 + \def\pdfdest{\pdfextension dest} + \let\pdfoutput\outputmode + \def\pdfliteral{\pdfextension literal} + \def\pdfcatalog{\pdfextension catalog} + \def\pdftexversion{\numexpr\pdffeedback version\relax} + \let\pdfximage\saveimageresource + \let\pdfrefximage\useimageresource + \let\pdflastximage\lastsavedimageresourceindex + \def\pdfendlink{\pdfextension endlink\relax} + \def\pdfoutline{\pdfextension outline} + \def\pdfstartlink{\pdfextension startlink} + \def\pdffontattr{\pdfextension fontattr} + \def\pdfobj{\pdfextension obj} + \def\pdflastobj{\numexpr\pdffeedback lastobj\relax} + \let\pdfpagewidth\pagewidth + \let\pdfpageheight\pageheight + \edef\pdfhorigin{\pdfvariable horigin} + \edef\pdfvorigin{\pdfvariable vorigin} + \fi +\fi + +% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 +% can be set). So we test for \relax and 0 as well as being undefined. +\ifx\pdfoutput\thisisundefined +\else + \ifx\pdfoutput\relax + \else + \ifcase\pdfoutput + \else + \pdftrue + \fi + \fi +\fi + +% PDF uses PostScript string constants for the names of xref targets, +% for display in the outlines, and in other places. Thus, we have to +% double any backslashes. Otherwise, a name like "\node" will be +% interpreted as a newline (\n), followed by o, d, e. Not good. +% +% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and +% related messages. The final outcome is that it is up to the TeX user +% to double the backslashes and otherwise make the string valid, so +% that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to +% do this reliably, so we use it. + +% #1 is a control sequence in which to do the replacements, +% which we \xdef. +\def\txiescapepdf#1{% + \ifx\pdfescapestring\thisisundefined + % No primitive available; should we give a warning or log? + % Many times it won't matter. + \xdef#1{#1}% + \else + % The expandable \pdfescapestring primitive escapes parentheses, + % backslashes, and other special chars. + \xdef#1{\pdfescapestring{#1}}% + \fi +} +\def\txiescapepdfutfsixteen#1{% + \ifx\pdfescapestrutfsixteen\thisisundefined + % No UTF-16 converting macro available. + \txiescapepdf{#1}% + \else + \xdef#1{\pdfescapestrutfsixteen{#1}}% + \fi +} + +\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images +with PDF output, and none of those formats could be found. (.eps cannot +be supported due to the design of the PDF format; use regular TeX (DVI +output) for that.)} + +\ifpdf + % + % Color manipulation macros using ideas from pdfcolor.tex, + % except using rgb instead of cmyk; the latter is said to render as a + % very dark gray on-screen and a very dark halftone in print, instead + % of actual black. The dark red here is dark enough to print on paper as + % nearly black, but still distinguishable for online viewing. We use + % black by default, though. + \def\rgbDarkRed{0.50 0.09 0.12} + \def\rgbBlack{0 0 0} + % + % rg sets the color for filling (usual text, etc.); + % RG sets the color for stroking (thin rules, e.g., normal _'s). + \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} + % + % Set color, and create a mark which defines \thiscolor accordingly, + % so that \makeheadline knows which color to restore. + \def\setcolor#1{% + \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% + \domark + \pdfsetcolor{#1}% + } + % + \def\maincolor{\rgbBlack} + \pdfsetcolor{\maincolor} + \edef\thiscolor{\maincolor} + \def\lastcolordefs{} + % + \def\makefootline{% + \baselineskip24pt + \line{\pdfsetcolor{\maincolor}\the\footline}% + } + % + \def\makeheadline{% + \vbox to 0pt{% + \vskip-22.5pt + \line{% + \vbox to8.5pt{}% + % Extract \thiscolor definition from the marks. + \getcolormarks + % Typeset the headline with \maincolor, then restore the color. + \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% + }% + \vss + }% + \nointerlineskip + } + % + % + \pdfcatalog{/PageMode /UseOutlines} + % + % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). + \def\dopdfimage#1#2#3{% + \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% + \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% + % + % pdftex (and the PDF format) support .pdf, .png, .jpg (among + % others). Let's try in that order, PDF first since if + % someone has a scalable image, presumably better to use that than a + % bitmap. + \let\pdfimgext=\empty + \begingroup + \openin 1 #1.pdf \ifeof 1 + \openin 1 #1.PDF \ifeof 1 + \openin 1 #1.png \ifeof 1 + \openin 1 #1.jpg \ifeof 1 + \openin 1 #1.jpeg \ifeof 1 + \openin 1 #1.JPG \ifeof 1 + \errhelp = \nopdfimagehelp + \errmessage{Could not find image file #1 for pdf}% + \else \gdef\pdfimgext{JPG}% + \fi + \else \gdef\pdfimgext{jpeg}% + \fi + \else \gdef\pdfimgext{jpg}% + \fi + \else \gdef\pdfimgext{png}% + \fi + \else \gdef\pdfimgext{PDF}% + \fi + \else \gdef\pdfimgext{pdf}% + \fi + \closein 1 + \endgroup + % + % without \immediate, ancient pdftex seg faults when the same image is + % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) + \ifnum\pdftexversion < 14 + \immediate\pdfimage + \else + \immediate\pdfximage + \fi + \ifdim \wd0 >0pt width \pdfimagewidth \fi + \ifdim \wd2 >0pt height \pdfimageheight \fi + \ifnum\pdftexversion<13 + #1.\pdfimgext + \else + {#1.\pdfimgext}% + \fi + \ifnum\pdftexversion < 14 \else + \pdfrefximage \pdflastximage + \fi} + % + \def\setpdfdestname#1{{% + % We have to set dummies so commands such as @code, and characters + % such as \, aren't expanded when present in a section title. + \indexnofonts + \makevalueexpandable + \turnoffactive + \iftxiuseunicodedestname + \ifx \declaredencoding \latone + % Pass through Latin-1 characters. + % LuaTeX with byte wise I/O converts Latin-1 characters to Unicode. + \else + \ifx \declaredencoding \utfeight + % Pass through Unicode characters. + \else + % Use ASCII approximations in destination names. + \passthroughcharsfalse + \fi + \fi + \else + % Use ASCII approximations in destination names. + \passthroughcharsfalse + \fi + \def\pdfdestname{#1}% + \txiescapepdf\pdfdestname + }} + % + \def\setpdfoutlinetext#1{{% + \indexnofonts + \makevalueexpandable + \turnoffactive + \ifx \declaredencoding \latone + % The PDF format can use an extended form of Latin-1 in bookmark + % strings. See Appendix D of the PDF Reference, Sixth Edition, for + % the "PDFDocEncoding". + \passthroughcharstrue + % Pass through Latin-1 characters. + % LuaTeX: Convert to Unicode + % pdfTeX: Use Latin-1 as PDFDocEncoding + \def\pdfoutlinetext{#1}% + \else + \ifx \declaredencoding \utfeight + \ifx\luatexversion\thisisundefined + % For pdfTeX with UTF-8. + % TODO: the PDF format can use UTF-16 in bookmark strings, + % but the code for this isn't done yet. + % Use ASCII approximations. + \passthroughcharsfalse + \def\pdfoutlinetext{#1}% + \else + % For LuaTeX with UTF-8. + % Pass through Unicode characters for title texts. + \passthroughcharstrue + \def\pdfoutlinetext{#1}% + \fi + \else + % For non-Latin-1 or non-UTF-8 encodings. + % Use ASCII approximations. + \passthroughcharsfalse + \def\pdfoutlinetext{#1}% + \fi + \fi + % LuaTeX: Convert to UTF-16 + % pdfTeX: Use Latin-1 as PDFDocEncoding + \txiescapepdfutfsixteen\pdfoutlinetext + }} + % + \def\pdfmkdest#1{% + \setpdfdestname{#1}% + \safewhatsit{\pdfdest name{\pdfdestname} xyz}% + } + % + % used to mark target names; must be expandable. + \def\pdfmkpgn#1{#1} + % + % by default, use black for everything. + \def\urlcolor{\rgbBlack} + \def\linkcolor{\rgbBlack} + \def\endlink{\setcolor{\maincolor}\pdfendlink} + % + % Adding outlines to PDF; macros for calculating structure of outlines + % come from Petr Olsak + \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% + \else \csname#1\endcsname \fi} + \def\advancenumber#1{\tempnum=\expnumber{#1}\relax + \advance\tempnum by 1 + \expandafter\xdef\csname#1\endcsname{\the\tempnum}} + % + % #1 is the section text, which is what will be displayed in the + % outline by the pdf viewer. #2 is the pdf expression for the number + % of subentries (or empty, for subsubsections). #3 is the node text, + % which might be empty if this toc entry had no corresponding node. + % #4 is the page number + % + \def\dopdfoutline#1#2#3#4{% + % Generate a link to the node text if that exists; else, use the + % page number. We could generate a destination for the section + % text in the case where a section has no node, but it doesn't + % seem worth the trouble, since most documents are normally structured. + \setpdfoutlinetext{#1} + \setpdfdestname{#3} + \ifx\pdfdestname\empty + \def\pdfdestname{#4}% + \fi + % + \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#2{\pdfoutlinetext}% + } + % + \def\pdfmakeoutlines{% + \begingroup + % Read toc silently, to get counts of subentries for \pdfoutline. + \def\partentry##1##2##3##4{}% ignore parts in the outlines + \def\numchapentry##1##2##3##4{% + \def\thischapnum{##2}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + }% + \def\numsecentry##1##2##3##4{% + \advancenumber{chap\thischapnum}% + \def\thissecnum{##2}% + \def\thissubsecnum{0}% + }% + \def\numsubsecentry##1##2##3##4{% + \advancenumber{sec\thissecnum}% + \def\thissubsecnum{##2}% + }% + \def\numsubsubsecentry##1##2##3##4{% + \advancenumber{subsec\thissubsecnum}% + }% + \def\thischapnum{0}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + % + % use \def rather than \let here because we redefine \chapentry et + % al. a second time, below. + \def\appentry{\numchapentry}% + \def\appsecentry{\numsecentry}% + \def\appsubsecentry{\numsubsecentry}% + \def\appsubsubsecentry{\numsubsubsecentry}% + \def\unnchapentry{\numchapentry}% + \def\unnsecentry{\numsecentry}% + \def\unnsubsecentry{\numsubsecentry}% + \def\unnsubsubsecentry{\numsubsubsecentry}% + \readdatafile{toc}% + % + % Read toc second time, this time actually producing the outlines. + % The `-' means take the \expnumber as the absolute number of + % subentries, which we calculated on our first read of the .toc above. + % + % We use the node names as the destinations. + \def\numchapentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% + \def\numsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% + \def\numsubsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% + \def\numsubsubsecentry##1##2##3##4{% count is always zero + \dopdfoutline{##1}{}{##3}{##4}}% + % + % PDF outlines are displayed using system fonts, instead of + % document fonts. Therefore we cannot use special characters, + % since the encoding is unknown. For example, the eogonek from + % Latin 2 (0xea) gets translated to a | character. Info from + % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. + % + % TODO this right, we have to translate 8-bit characters to + % their "best" equivalent, based on the @documentencoding. Too + % much work for too little return. Just use the ASCII equivalents + % we use for the index sort strings. + % + \indexnofonts + \setupdatafile + % We can have normal brace characters in the PDF outlines, unlike + % Texinfo index files. So set that up. + \def\{{\lbracecharliteral}% + \def\}{\rbracecharliteral}% + \catcode`\\=\active \otherbackslash + \input \tocreadfilename + \endgroup + } + {\catcode`[=1 \catcode`]=2 + \catcode`{=\other \catcode`}=\other + \gdef\lbracecharliteral[{]% + \gdef\rbracecharliteral[}]% + ] + % + \def\skipspaces#1{\def\PP{#1}\def\D{|}% + \ifx\PP\D\let\nextsp\relax + \else\let\nextsp\skipspaces + \addtokens{\filename}{\PP}% + \advance\filenamelength by 1 + \fi + \nextsp} + \def\getfilename#1{% + \filenamelength=0 + % If we don't expand the argument now, \skipspaces will get + % snagged on things like "@value{foo}". + \edef\temp{#1}% + \expandafter\skipspaces\temp|\relax + } + \ifnum\pdftexversion < 14 + \let \startlink \pdfannotlink + \else + \let \startlink \pdfstartlink + \fi + % make a live url in pdf output. + \def\pdfurl#1{% + \begingroup + % it seems we really need yet another set of dummies; have not + % tried to figure out what each command should do in the context + % of @url. for now, just make @/ a no-op, that's the only one + % people have actually reported a problem with. + % + \normalturnoffactive + \def\@{@}% + \let\/=\empty + \makevalueexpandable + % do we want to go so far as to use \indexnofonts instead of just + % special-casing \var here? + \def\var##1{##1}% + % + \leavevmode\setcolor{\urlcolor}% + \startlink attr{/Border [0 0 0]}% + user{/Subtype /Link /A << /S /URI /URI (#1) >>}% + \endgroup} + % \pdfgettoks - Surround page numbers in #1 with @pdflink. #1 may + % be a simple number, or a list of numbers in the case of an index + % entry. + \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} + \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} + \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} + \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} + \def\maketoks{% + \expandafter\poptoks\the\toksA|ENDTOKS|\relax + \ifx\first0\adn0 + \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 + \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 + \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 + \else + \ifnum0=\countA\else\makelink\fi + \ifx\first.\let\next=\done\else + \let\next=\maketoks + \addtokens{\toksB}{\the\toksD} + \ifx\first,\addtokens{\toksB}{\space}\fi + \fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \next} + \def\makelink{\addtokens{\toksB}% + {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} + \def\pdflink#1{% + \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} + \setcolor{\linkcolor}#1\endlink} + \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} +\else + % non-pdf mode + \let\pdfmkdest = \gobble + \let\pdfurl = \gobble + \let\endlink = \relax + \let\setcolor = \gobble + \let\pdfsetcolor = \gobble + \let\pdfmakeoutlines = \relax +\fi % \ifx\pdfoutput + +% +% For XeTeX +% +\ifx\XeTeXrevision\thisisundefined +\else + % + % XeTeX version check + % + \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99996}>-1 + % TeX Live 2016 contains XeTeX 0.99996 and xdvipdfmx 20160307. + % It can use the `dvipdfmx:config' special (from TeX Live SVN r40941). + % For avoiding PDF destination name replacement, we use this special + % instead of xdvipdfmx's command line option `-C 0x0010'. + \special{dvipdfmx:config C 0x0010} + % XeTeX 0.99995+ comes with xdvipdfmx 20160307+. + % It can handle Unicode destination names for PDF. + \txiuseunicodedestnametrue + \else + % XeTeX < 0.99996 (TeX Live < 2016) cannot use the + % `dvipdfmx:config' special. + % So for avoiding PDF destination name replacement, + % xdvipdfmx's command line option `-C 0x0010' is necessary. + % + % XeTeX < 0.99995 can not handle Unicode destination names for PDF + % because xdvipdfmx 20150315 has a UTF-16 conversion issue. + % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753). + \txiuseunicodedestnamefalse + \fi + % + % Color support + % + \def\rgbDarkRed{0.50 0.09 0.12} + \def\rgbBlack{0 0 0} + % + \def\pdfsetcolor#1{\special{pdf:scolor [#1]}} + % + % Set color, and create a mark which defines \thiscolor accordingly, + % so that \makeheadline knows which color to restore. + \def\setcolor#1{% + \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% + \domark + \pdfsetcolor{#1}% + } + % + \def\maincolor{\rgbBlack} + \pdfsetcolor{\maincolor} + \edef\thiscolor{\maincolor} + \def\lastcolordefs{} + % + \def\makefootline{% + \baselineskip24pt + \line{\pdfsetcolor{\maincolor}\the\footline}% + } + % + \def\makeheadline{% + \vbox to 0pt{% + \vskip-22.5pt + \line{% + \vbox to8.5pt{}% + % Extract \thiscolor definition from the marks. + \getcolormarks + % Typeset the headline with \maincolor, then restore the color. + \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% + }% + \vss + }% + \nointerlineskip + } + % + % PDF outline support + % + % Emulate pdfTeX primitive + \def\pdfdest name#1 xyz{% + \special{pdf:dest (#1) [@thispage /XYZ @xpos @ypos null]}% + } + % + \def\setpdfdestname#1{{% + % We have to set dummies so commands such as @code, and characters + % such as \, aren't expanded when present in a section title. + \indexnofonts + \makevalueexpandable + \turnoffactive + \iftxiuseunicodedestname + % Pass through Unicode characters. + \else + % Use ASCII approximations in destination names. + \passthroughcharsfalse + \fi + \def\pdfdestname{#1}% + \txiescapepdf\pdfdestname + }} + % + \def\setpdfoutlinetext#1{{% + \turnoffactive + % Always use Unicode characters in title texts. + \def\pdfoutlinetext{#1}% + % For XeTeX, xdvipdfmx converts to UTF-16. + % So we do not convert. + \txiescapepdf\pdfoutlinetext + }} + % + \def\pdfmkdest#1{% + \setpdfdestname{#1}% + \safewhatsit{\pdfdest name{\pdfdestname} xyz}% + } + % + % by default, use black for everything. + \def\urlcolor{\rgbBlack} + \def\linkcolor{\rgbBlack} + \def\endlink{\setcolor{\maincolor}\pdfendlink} + % + \def\dopdfoutline#1#2#3#4{% + \setpdfoutlinetext{#1} + \setpdfdestname{#3} + \ifx\pdfdestname\empty + \def\pdfdestname{#4}% + \fi + % + \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A + << /S /GoTo /D (\pdfdestname) >> >> }% + } + % + \def\pdfmakeoutlines{% + \begingroup + % + % For XeTeX, counts of subentries are not necessary. + % Therefore, we read toc only once. + % + % We use node names as destinations. + \def\partentry##1##2##3##4{}% ignore parts in the outlines + \def\numchapentry##1##2##3##4{% + \dopdfoutline{##1}{1}{##3}{##4}}% + \def\numsecentry##1##2##3##4{% + \dopdfoutline{##1}{2}{##3}{##4}}% + \def\numsubsecentry##1##2##3##4{% + \dopdfoutline{##1}{3}{##3}{##4}}% + \def\numsubsubsecentry##1##2##3##4{% + \dopdfoutline{##1}{4}{##3}{##4}}% + % + \let\appentry\numchapentry% + \let\appsecentry\numsecentry% + \let\appsubsecentry\numsubsecentry% + \let\appsubsubsecentry\numsubsubsecentry% + \let\unnchapentry\numchapentry% + \let\unnsecentry\numsecentry% + \let\unnsubsecentry\numsubsecentry% + \let\unnsubsubsecentry\numsubsubsecentry% + % + % For XeTeX, xdvipdfmx converts strings to UTF-16. + % Therefore, the encoding and the language may not be considered. + % + \indexnofonts + \setupdatafile + % We can have normal brace characters in the PDF outlines, unlike + % Texinfo index files. So set that up. + \def\{{\lbracecharliteral}% + \def\}{\rbracecharliteral}% + \catcode`\\=\active \otherbackslash + \input \tocreadfilename + \endgroup + } + {\catcode`[=1 \catcode`]=2 + \catcode`{=\other \catcode`}=\other + \gdef\lbracecharliteral[{]% + \gdef\rbracecharliteral[}]% + ] + + \special{pdf:docview << /PageMode /UseOutlines >> } + % ``\special{pdf:tounicode ...}'' is not necessary + % because xdvipdfmx converts strings from UTF-8 to UTF-16 without it. + % However, due to a UTF-16 conversion issue of xdvipdfmx 20150315, + % ``\special{pdf:dest ...}'' cannot handle non-ASCII strings. + % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753). +% + \def\skipspaces#1{\def\PP{#1}\def\D{|}% + \ifx\PP\D\let\nextsp\relax + \else\let\nextsp\skipspaces + \addtokens{\filename}{\PP}% + \advance\filenamelength by 1 + \fi + \nextsp} + \def\getfilename#1{% + \filenamelength=0 + % If we don't expand the argument now, \skipspaces will get + % snagged on things like "@value{foo}". + \edef\temp{#1}% + \expandafter\skipspaces\temp|\relax + } + % make a live url in pdf output. + \def\pdfurl#1{% + \begingroup + % it seems we really need yet another set of dummies; have not + % tried to figure out what each command should do in the context + % of @url. for now, just make @/ a no-op, that's the only one + % people have actually reported a problem with. + % + \normalturnoffactive + \def\@{@}% + \let\/=\empty + \makevalueexpandable + % do we want to go so far as to use \indexnofonts instead of just + % special-casing \var here? + \def\var##1{##1}% + % + \leavevmode\setcolor{\urlcolor}% + \special{pdf:bann << /Border [0 0 0] + /Subtype /Link /A << /S /URI /URI (#1) >> >>}% + \endgroup} + \def\endlink{\setcolor{\maincolor}\special{pdf:eann}} + \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} + \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} + \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} + \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} + \def\maketoks{% + \expandafter\poptoks\the\toksA|ENDTOKS|\relax + \ifx\first0\adn0 + \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 + \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 + \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 + \else + \ifnum0=\countA\else\makelink\fi + \ifx\first.\let\next=\done\else + \let\next=\maketoks + \addtokens{\toksB}{\the\toksD} + \ifx\first,\addtokens{\toksB}{\space}\fi + \fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \next} + \def\makelink{\addtokens{\toksB}% + {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} + \def\pdflink#1{% + \special{pdf:bann << /Border [0 0 0] + /Type /Annot /Subtype /Link /A << /S /GoTo /D (#1) >> >>}% + \setcolor{\linkcolor}#1\endlink} + \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} +% + % + % @image support + % + % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). + \def\doxeteximage#1#2#3{% + \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% + \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% + % + % XeTeX (and the PDF format) supports .pdf, .png, .jpg (among + % others). Let's try in that order, PDF first since if + % someone has a scalable image, presumably better to use that than a + % bitmap. + \let\xeteximgext=\empty + \begingroup + \openin 1 #1.pdf \ifeof 1 + \openin 1 #1.PDF \ifeof 1 + \openin 1 #1.png \ifeof 1 + \openin 1 #1.jpg \ifeof 1 + \openin 1 #1.jpeg \ifeof 1 + \openin 1 #1.JPG \ifeof 1 + \errmessage{Could not find image file #1 for XeTeX}% + \else \gdef\xeteximgext{JPG}% + \fi + \else \gdef\xeteximgext{jpeg}% + \fi + \else \gdef\xeteximgext{jpg}% + \fi + \else \gdef\xeteximgext{png}% + \fi + \else \gdef\xeteximgext{PDF}% + \fi + \else \gdef\xeteximgext{pdf}% + \fi + \closein 1 + \endgroup + % + \def\xetexpdfext{pdf}% + \ifx\xeteximgext\xetexpdfext + \XeTeXpdffile "#1".\xeteximgext "" + \else + \def\xetexpdfext{PDF}% + \ifx\xeteximgext\xetexpdfext + \XeTeXpdffile "#1".\xeteximgext "" + \else + \XeTeXpicfile "#1".\xeteximgext "" + \fi + \fi + \ifdim \wd0 >0pt width \xeteximagewidth \fi + \ifdim \wd2 >0pt height \xeteximageheight \fi \relax + } +\fi + + +% +\message{fonts,} + +% Set the baselineskip to #1, and the lineskip and strut size +% correspondingly. There is no deep meaning behind these magic numbers +% used as factors; they just match (closely enough) what Knuth defined. +% +\def\lineskipfactor{.08333} +\def\strutheightpercent{.70833} +\def\strutdepthpercent {.29167} +% +% can get a sort of poor man's double spacing by redefining this. +\def\baselinefactor{1} +% +\newdimen\textleading +\def\setleading#1{% + \dimen0 = #1\relax + \normalbaselineskip = \baselinefactor\dimen0 + \normallineskip = \lineskipfactor\normalbaselineskip + \normalbaselines + \setbox\strutbox =\hbox{% + \vrule width0pt height\strutheightpercent\baselineskip + depth \strutdepthpercent \baselineskip + }% +} + +% PDF CMaps. See also LaTeX's t1.cmap. +% +% do nothing with this by default. +\expandafter\let\csname cmapOT1\endcsname\gobble +\expandafter\let\csname cmapOT1IT\endcsname\gobble +\expandafter\let\csname cmapOT1TT\endcsname\gobble + +% if we are producing pdf, and we have \pdffontattr, then define cmaps. +% (\pdffontattr was introduced many years ago, but people still run +% older pdftex's; it's easy to conditionalize, so we do.) +\ifpdf \ifx\pdffontattr\thisisundefined \else + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1-0) +%%Title: (TeX-OT1-0 TeX OT1 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1) +/Supplement 0 +>> def +/CMapName /TeX-OT1-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<23> <26> <0023> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +40 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +% +% \cmapOT1IT + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1IT-0) +%%Title: (TeX-OT1IT-0 TeX OT1IT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1IT) +/Supplement 0 +>> def +/CMapName /TeX-OT1IT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<25> <26> <0025> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +42 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<23> <0023> +<24> <00A3> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1IT\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +% +% \cmapOT1TT + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1TT-0) +%%Title: (TeX-OT1TT-0 TeX OT1TT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1TT) +/Supplement 0 +>> def +/CMapName /TeX-OT1TT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +5 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<21> <26> <0021> +<28> <5F> <0028> +<61> <7E> <0061> +endbfrange +32 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <2191> +<0C> <2193> +<0D> <0027> +<0E> <00A1> +<0F> <00BF> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<20> <2423> +<27> <2019> +<60> <2018> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1TT\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +\fi\fi + + +% Set the font macro #1 to the font named \fontprefix#2. +% #3 is the font's design size, #4 is a scale factor, #5 is the CMap +% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). +% Example: +% #1 = \textrm +% #2 = \rmshape +% #3 = 10 +% #4 = \mainmagstep +% #5 = OT1 +% +\def\setfont#1#2#3#4#5{% + \font#1=\fontprefix#2#3 scaled #4 + \csname cmap#5\endcsname#1% +} +% This is what gets called when #5 of \setfont is empty. +\let\cmap\gobble +% +% (end of cmaps) + +% Use cm as the default font prefix. +% To specify the font prefix, you must define \fontprefix +% before you read in texinfo.tex. +\ifx\fontprefix\thisisundefined +\def\fontprefix{cm} +\fi +% Support font families that don't use the same naming scheme as CM. +\def\rmshape{r} +\def\rmbshape{bx} % where the normal face is bold +\def\bfshape{b} +\def\bxshape{bx} +\def\ttshape{tt} +\def\ttbshape{tt} +\def\ttslshape{sltt} +\def\itshape{ti} +\def\itbshape{bxti} +\def\slshape{sl} +\def\slbshape{bxsl} +\def\sfshape{ss} +\def\sfbshape{ss} +\def\scshape{csc} +\def\scbshape{csc} + +% Definitions for a main text size of 11pt. (The default in Texinfo.) +% +\def\definetextfontsizexi{% +% Text fonts (11.2pt, magstep1). +\def\textnominalsize{11pt} +\edef\mainmagstep{\magstephalf} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1095} + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstep1}{OT1} +\setfont\deftt\ttshape{10}{\magstep1}{OT1TT} +\setfont\defsl\slshape{10}{\magstep1}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} +\def\df{\let\ttfont=\deftt \let\bffont = \defbf +\let\ttslfont=\defttsl \let\slfont=\defsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 +\def\smallecsize{0900} + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 +\def\smallerecsize{0800} + +% Fonts for math mode superscripts (7pt). +\def\sevennominalsize{7pt} +\setfont\sevenrm\rmshape{7}{1000}{OT1} +\setfont\seventt\ttshape{10}{700}{OT1TT} +\setfont\sevenbf\bfshape{10}{700}{OT1} +\setfont\sevenit\itshape{7}{1000}{OT1IT} +\setfont\sevensl\slshape{10}{700}{OT1} +\setfont\sevensf\sfshape{10}{700}{OT1} +\setfont\sevensc\scshape{10}{700}{OT1} +\setfont\seventtsl\ttslshape{10}{700}{OT1TT} +\font\seveni=cmmi7 +\font\sevensy=cmsy7 +\def\sevenecsize{0700} + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\titleecsize{2074} + +% Chapter (and unnumbered) fonts (17.28pt). +\def\chapnominalsize{17pt} +\setfont\chaprm\rmbshape{12}{\magstep2}{OT1} +\setfont\chapit\itbshape{10}{\magstep3}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep3}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} +\setfont\chapsf\sfbshape{17}{1000}{OT1} +\let\chapbf=\chaprm +\setfont\chapsc\scbshape{10}{\magstep3}{OT1} +\font\chapi=cmmi12 scaled \magstep2 +\font\chapsy=cmsy10 scaled \magstep3 +\def\chapecsize{1728} + +% Section fonts (14.4pt). +\def\secnominalsize{14pt} +\setfont\secrm\rmbshape{12}{\magstep1}{OT1} +\setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1} +\setfont\secit\itbshape{10}{\magstep2}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep2}{OT1} +\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\secsf\sfbshape{12}{\magstep1}{OT1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep2}{OT1} +\font\seci=cmmi12 scaled \magstep1 +\font\secsy=cmsy10 scaled \magstep2 +\def\sececsize{1440} + +% Subsection fonts (13.15pt). +\def\ssecnominalsize{13pt} +\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} +\setfont\ssecit\itbshape{10}{1315}{OT1IT} +\setfont\ssecsl\slbshape{10}{1315}{OT1} +\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} +\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1315}{OT1} +\font\sseci=cmmi12 scaled \magstephalf +\font\ssecsy=cmsy10 scaled 1315 +\def\ssececsize{1200} + +% Reduced fonts for @acronym in text (10pt). +\def\reducednominalsize{10pt} +\setfont\reducedrm\rmshape{10}{1000}{OT1} +\setfont\reducedtt\ttshape{10}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{1000}{OT1} +\setfont\reducedit\itshape{10}{1000}{OT1IT} +\setfont\reducedsl\slshape{10}{1000}{OT1} +\setfont\reducedsf\sfshape{10}{1000}{OT1} +\setfont\reducedsc\scshape{10}{1000}{OT1} +\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} +\font\reducedi=cmmi10 +\font\reducedsy=cmsy10 +\def\reducedecsize{1000} + +\textleading = 13.2pt % line spacing for 11pt CM +\textfonts % reset the current fonts +\rm +} % end of 11pt text font size definitions, \definetextfontsizexi + + +% Definitions to make the main text be 10pt Computer Modern, with +% section, chapter, etc., sizes following suit. This is for the GNU +% Press printing of the Emacs 22 manual. Maybe other manuals in the +% future. Used with @smallbook, which sets the leading to 12pt. +% +\def\definetextfontsizex{% +% Text fonts (10pt). +\def\textnominalsize{10pt} +\edef\mainmagstep{1000} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1000} + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstephalf}{OT1} +\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} +\setfont\defsl\slshape{10}{\magstephalf}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} +\def\df{\let\ttfont=\deftt \let\bffont = \defbf +\let\slfont=\defsl \let\ttslfont=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 +\def\smallecsize{0900} + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 +\def\smallerecsize{0800} + +% Fonts for math mode superscripts (7pt). +\def\sevennominalsize{7pt} +\setfont\sevenrm\rmshape{7}{1000}{OT1} +\setfont\seventt\ttshape{10}{700}{OT1TT} +\setfont\sevenbf\bfshape{10}{700}{OT1} +\setfont\sevenit\itshape{7}{1000}{OT1IT} +\setfont\sevensl\slshape{10}{700}{OT1} +\setfont\sevensf\sfshape{10}{700}{OT1} +\setfont\sevensc\scshape{10}{700}{OT1} +\setfont\seventtsl\ttslshape{10}{700}{OT1TT} +\font\seveni=cmmi7 +\font\sevensy=cmsy7 +\def\sevenecsize{0700} + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\titleecsize{2074} + +% Chapter fonts (14.4pt). +\def\chapnominalsize{14pt} +\setfont\chaprm\rmbshape{12}{\magstep1}{OT1} +\setfont\chapit\itbshape{10}{\magstep2}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep2}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\chapsf\sfbshape{12}{\magstep1}{OT1} +\let\chapbf\chaprm +\setfont\chapsc\scbshape{10}{\magstep2}{OT1} +\font\chapi=cmmi12 scaled \magstep1 +\font\chapsy=cmsy10 scaled \magstep2 +\def\chapecsize{1440} + +% Section fonts (12pt). +\def\secnominalsize{12pt} +\setfont\secrm\rmbshape{12}{1000}{OT1} +\setfont\secit\itbshape{10}{\magstep1}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep1}{OT1} +\setfont\sectt\ttbshape{12}{1000}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} +\setfont\secsf\sfbshape{12}{1000}{OT1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep1}{OT1} +\font\seci=cmmi12 +\font\secsy=cmsy10 scaled \magstep1 +\def\sececsize{1200} + +% Subsection fonts (10pt). +\def\ssecnominalsize{10pt} +\setfont\ssecrm\rmbshape{10}{1000}{OT1} +\setfont\ssecit\itbshape{10}{1000}{OT1IT} +\setfont\ssecsl\slbshape{10}{1000}{OT1} +\setfont\ssectt\ttbshape{10}{1000}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} +\setfont\ssecsf\sfbshape{10}{1000}{OT1} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1000}{OT1} +\font\sseci=cmmi10 +\font\ssecsy=cmsy10 +\def\ssececsize{1000} + +% Reduced fonts for @acronym in text (9pt). +\def\reducednominalsize{9pt} +\setfont\reducedrm\rmshape{9}{1000}{OT1} +\setfont\reducedtt\ttshape{9}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{900}{OT1} +\setfont\reducedit\itshape{9}{1000}{OT1IT} +\setfont\reducedsl\slshape{9}{1000}{OT1} +\setfont\reducedsf\sfshape{9}{1000}{OT1} +\setfont\reducedsc\scshape{10}{900}{OT1} +\setfont\reducedttsl\ttslshape{10}{900}{OT1TT} +\font\reducedi=cmmi9 +\font\reducedsy=cmsy9 +\def\reducedecsize{0900} + +\divide\parskip by 2 % reduce space between paragraphs +\textleading = 12pt % line spacing for 10pt CM +\textfonts % reset the current fonts +\rm +} % end of 10pt text font size definitions, \definetextfontsizex + +% Fonts for short table of contents. +\setfont\shortcontrm\rmshape{12}{1000}{OT1} +\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 +\setfont\shortcontsl\slshape{12}{1000}{OT1} +\setfont\shortconttt\ttshape{12}{1000}{OT1TT} + + +% We provide the user-level command +% @fonttextsize 10 +% (or 11) to redefine the text font size. pt is assumed. +% +\def\xiword{11} +\def\xword{10} +\def\xwordpt{10pt} +% +\parseargdef\fonttextsize{% + \def\textsizearg{#1}% + %\wlog{doing @fonttextsize \textsizearg}% + % + % Set \globaldefs so that documents can use this inside @tex, since + % makeinfo 4.8 does not support it, but we need it nonetheless. + % + \begingroup \globaldefs=1 + \ifx\textsizearg\xword \definetextfontsizex + \else \ifx\textsizearg\xiword \definetextfontsizexi + \else + \errhelp=\EMsimple + \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} + \fi\fi + \endgroup +} + +% +% Change the current font style to #1, remembering it in \curfontstyle. +% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in +% italics, not bold italics. +% +\def\setfontstyle#1{% + \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. + \csname #1font\endcsname % change the current font +} + +\def\rm{\fam=0 \setfontstyle{rm}} +\def\it{\fam=\itfam \setfontstyle{it}} +\def\sl{\fam=\slfam \setfontstyle{sl}} +\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} +\def\tt{\fam=\ttfam \setfontstyle{tt}} + +% Texinfo sort of supports the sans serif font style, which plain TeX does not. +% So we set up a \sf. +\newfam\sffam +\def\sf{\fam=\sffam \setfontstyle{sf}} + +% We don't need math for this font style. +\def\ttsl{\setfontstyle{ttsl}} + + +% In order for the font changes to affect most math symbols and letters, +% we have to define the \textfont of the standard families. +% We don't bother to reset \scriptscriptfont; awaiting user need. +% +\def\resetmathfonts{% + \textfont0=\rmfont \textfont1=\ifont \textfont2=\syfont + \textfont\itfam=\itfont \textfont\slfam=\slfont \textfont\bffam=\bffont + \textfont\ttfam=\ttfont \textfont\sffam=\sffont + % + % Fonts for superscript. Note that the 7pt fonts are used regardless + % of the current font size. + \scriptfont0=\sevenrm \scriptfont1=\seveni \scriptfont2=\sevensy + \scriptfont\itfam=\sevenit \scriptfont\slfam=\sevensl + \scriptfont\bffam=\sevenbf \scriptfont\ttfam=\seventt + \scriptfont\sffam=\sevensf +} + +% + +% The font-changing commands (all called \...fonts) redefine the meanings +% of \STYLEfont, instead of just \STYLE. We do this because \STYLE needs +% to also set the current \fam for math mode. Our \STYLE (e.g., \rm) +% commands hardwire \STYLEfont to set the current font. +% +% The fonts used for \ifont are for "math italics" (\itfont is for italics +% in regular text). \syfont is also used in math mode only. +% +% Each font-changing command also sets the names \lsize (one size lower) +% and \lllsize (three sizes lower). These relative commands are used +% in, e.g., the LaTeX logo and acronyms. +% +% This all needs generalizing, badly. +% + +\def\assignfonts#1{% + \expandafter\let\expandafter\rmfont\csname #1rm\endcsname + \expandafter\let\expandafter\itfont\csname #1it\endcsname + \expandafter\let\expandafter\slfont\csname #1sl\endcsname + \expandafter\let\expandafter\bffont\csname #1bf\endcsname + \expandafter\let\expandafter\ttfont\csname #1tt\endcsname + \expandafter\let\expandafter\smallcaps\csname #1sc\endcsname + \expandafter\let\expandafter\sffont \csname #1sf\endcsname + \expandafter\let\expandafter\ifont \csname #1i\endcsname + \expandafter\let\expandafter\syfont \csname #1sy\endcsname + \expandafter\let\expandafter\ttslfont\csname #1ttsl\endcsname +} + +\newif\ifrmisbold + +% Select smaller font size with the current style. Used to change font size +% in, e.g., the LaTeX logo and acronyms. If we are using bold fonts for +% normal roman text, also use bold fonts for roman text in the smaller size. +\def\switchtolllsize{% + \expandafter\assignfonts\expandafter{\lllsize}% + \ifrmisbold + \let\rmfont\bffont + \fi + \csname\curfontstyle\endcsname +}% + +\def\switchtolsize{% + \expandafter\assignfonts\expandafter{\lsize}% + \ifrmisbold + \let\rmfont\bffont + \fi + \csname\curfontstyle\endcsname +}% + +\def\definefontsetatsize#1#2#3#4#5{% +\expandafter\def\csname #1fonts\endcsname{% + \def\curfontsize{#1}% + \def\lsize{#2}\def\lllsize{#3}% + \csname rmisbold#5\endcsname + \assignfonts{#1}% + \resetmathfonts + \setleading{#4}% +}} + +\definefontsetatsize{text} {reduced}{smaller}{\textleading}{false} +\definefontsetatsize{title} {chap} {subsec} {27pt} {true} +\definefontsetatsize{chap} {sec} {text} {19pt} {true} +\definefontsetatsize{sec} {subsec} {reduced}{17pt} {true} +\definefontsetatsize{ssec} {text} {small} {15pt} {true} +\definefontsetatsize{reduced}{small} {smaller}{10.5pt}{false} +\definefontsetatsize{small} {smaller}{smaller}{10.5pt}{false} +\definefontsetatsize{smaller}{smaller}{smaller}{9.5pt} {false} + +\def\titlefont#1{{\titlefonts\rm #1}} +\let\subsecfonts = \ssecfonts +\let\subsubsecfonts = \ssecfonts + +% Define these just so they can be easily changed for other fonts. +\def\angleleft{$\langle$} +\def\angleright{$\rangle$} + +% Set the fonts to use with the @small... environments. +\let\smallexamplefonts = \smallfonts + +% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample +% can fit this many characters: +% 8.5x11=86 smallbook=72 a4=90 a5=69 +% If we use \scriptfonts (8pt), then we can fit this many characters: +% 8.5x11=90+ smallbook=80 a4=90+ a5=77 +% For me, subjectively, the few extra characters that fit aren't worth +% the additional smallness of 8pt. So I'm making the default 9pt. +% +% By the way, for comparison, here's what fits with @example (10pt): +% 8.5x11=71 smallbook=60 a4=75 a5=58 +% --karl, 24jan03. + +% Set up the default fonts, so we can use them for creating boxes. +% +\definetextfontsizexi + + +\message{markup,} + +% Check if we are currently using a typewriter font. Since all the +% Computer Modern typewriter fonts have zero interword stretch (and +% shrink), and it is reasonable to expect all typewriter fonts to have +% this property, we can check that font parameter. +% +\def\ifmonospace{\ifdim\fontdimen3\font=0pt } + +% Markup style infrastructure. \defmarkupstylesetup\INITMACRO will +% define and register \INITMACRO to be called on markup style changes. +% \INITMACRO can check \currentmarkupstyle for the innermost +% style. + +\let\currentmarkupstyle\empty + +\def\setupmarkupstyle#1{% + \def\currentmarkupstyle{#1}% + \markupstylesetup +} + +\let\markupstylesetup\empty + +\def\defmarkupstylesetup#1{% + \expandafter\def\expandafter\markupstylesetup + \expandafter{\markupstylesetup #1}% + \def#1% +} + +% Markup style setup for left and right quotes. +\defmarkupstylesetup\markupsetuplq{% + \expandafter\let\expandafter \temp + \csname markupsetuplq\currentmarkupstyle\endcsname + \ifx\temp\relax \markupsetuplqdefault \else \temp \fi +} + +\defmarkupstylesetup\markupsetuprq{% + \expandafter\let\expandafter \temp + \csname markupsetuprq\currentmarkupstyle\endcsname + \ifx\temp\relax \markupsetuprqdefault \else \temp \fi +} + +{ +\catcode`\'=\active +\catcode`\`=\active + +\gdef\markupsetuplqdefault{\let`\lq} +\gdef\markupsetuprqdefault{\let'\rq} + +\gdef\markupsetcodequoteleft{\let`\codequoteleft} +\gdef\markupsetcodequoteright{\let'\codequoteright} +} + +\let\markupsetuplqcode \markupsetcodequoteleft +\let\markupsetuprqcode \markupsetcodequoteright +% +\let\markupsetuplqexample \markupsetcodequoteleft +\let\markupsetuprqexample \markupsetcodequoteright +% +\let\markupsetuplqkbd \markupsetcodequoteleft +\let\markupsetuprqkbd \markupsetcodequoteright +% +\let\markupsetuplqsamp \markupsetcodequoteleft +\let\markupsetuprqsamp \markupsetcodequoteright +% +\let\markupsetuplqverb \markupsetcodequoteleft +\let\markupsetuprqverb \markupsetcodequoteright +% +\let\markupsetuplqverbatim \markupsetcodequoteleft +\let\markupsetuprqverbatim \markupsetcodequoteright + +% Allow an option to not use regular directed right quote/apostrophe +% (char 0x27), but instead the undirected quote from cmtt (char 0x0d). +% The undirected quote is ugly, so don't make it the default, but it +% works for pasting with more pdf viewers (at least evince), the +% lilypond developers report. xpdf does work with the regular 0x27. +% +\def\codequoteright{% + \ifmonospace + \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax + \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax + '% + \else \char'15 \fi + \else \char'15 \fi + \else + '% + \fi +} +% +% and a similar option for the left quote char vs. a grave accent. +% Modern fonts display ASCII 0x60 as a grave accent, so some people like +% the code environments to do likewise. +% +\def\codequoteleft{% + \ifmonospace + \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax + \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax + % [Knuth] pp. 380,381,391 + % \relax disables Spanish ligatures ?` and !` of \tt font. + \relax`% + \else \char'22 \fi + \else \char'22 \fi + \else + \relax`% + \fi +} + +% Commands to set the quote options. +% +\parseargdef\codequoteundirected{% + \def\temp{#1}% + \ifx\temp\onword + \expandafter\let\csname SETtxicodequoteundirected\endcsname + = t% + \else\ifx\temp\offword + \expandafter\let\csname SETtxicodequoteundirected\endcsname + = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% + \fi\fi +} +% +\parseargdef\codequotebacktick{% + \def\temp{#1}% + \ifx\temp\onword + \expandafter\let\csname SETtxicodequotebacktick\endcsname + = t% + \else\ifx\temp\offword + \expandafter\let\csname SETtxicodequotebacktick\endcsname + = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% + \fi\fi +} + +% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. +\def\noligaturesquoteleft{\relax\lq} + +% Count depth in font-changes, for error checks +\newcount\fontdepth \fontdepth=0 + +% Font commands. + +% #1 is the font command (\sl or \it), #2 is the text to slant. +% If we are in a monospaced environment, however, 1) always use \ttsl, +% and 2) do not add an italic correction. +\def\dosmartslant#1#2{% + \ifusingtt + {{\ttsl #2}\let\next=\relax}% + {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% + \next +} +\def\smartslanted{\dosmartslant\sl} +\def\smartitalic{\dosmartslant\it} + +% Output an italic correction unless \next (presumed to be the following +% character) is such as not to need one. +\def\smartitaliccorrection{% + \ifx\next,% + \else\ifx\next-% + \else\ifx\next.% + \else\ifx\next\.% + \else\ifx\next\comma% + \else\ptexslash + \fi\fi\fi\fi\fi + \aftersmartic +} + +% Unconditional use \ttsl, and no ic. @var is set to this for defuns. +\def\ttslanted#1{{\ttsl #1}} + +% @cite is like \smartslanted except unconditionally use \sl. We never want +% ttsl for book titles, do we? +\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} + +\def\aftersmartic{} +\def\var#1{% + \let\saveaftersmartic = \aftersmartic + \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% + \smartslanted{#1}% +} + +\let\i=\smartitalic +\let\slanted=\smartslanted +\let\dfn=\smartslanted +\let\emph=\smartitalic + +% Explicit font changes: @r, @sc, undocumented @ii. +\def\r#1{{\rm #1}} % roman font +\def\sc#1{{\smallcaps#1}} % smallcaps font +\def\ii#1{{\it #1}} % italic font + +% @b, explicit bold. Also @strong. +\def\b#1{{\bf #1}} +\let\strong=\b + +% @sansserif, explicit sans. +\def\sansserif#1{{\sf #1}} + +% We can't just use \exhyphenpenalty, because that only has effect at +% the end of a paragraph. Restore normal hyphenation at the end of the +% group within which \nohyphenation is presumably called. +% +\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} +\def\restorehyphenation{\hyphenchar\font = `- } + +% Set sfcode to normal for the chars that usually have another value. +% Can't use plain's \frenchspacing because it uses the `\x notation, and +% sometimes \x has an active definition that messes things up. +% +\catcode`@=11 + \def\plainfrenchspacing{% + \sfcode`\.=\@m \sfcode`\?=\@m \sfcode`\!=\@m + \sfcode`\:=\@m \sfcode`\;=\@m \sfcode`\,=\@m + \def\endofsentencespacefactor{1000}% for @. and friends + } + \def\plainnonfrenchspacing{% + \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 + \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 + \def\endofsentencespacefactor{3000}% for @. and friends + } +\catcode`@=\other +\def\endofsentencespacefactor{3000}% default + +% @t, explicit typewriter. +\def\t#1{% + {\tt \rawbackslash \plainfrenchspacing #1}% + \null +} + +% @samp. +\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} + +% @indicateurl is \samp, that is, with quotes. +\let\indicateurl=\samp + +% @code (and similar) prints in typewriter, but with spaces the same +% size as normal in the surrounding text, without hyphenation, etc. +% This is a subroutine for that. +\def\tclose#1{% + {% + % Change normal interword space to be same as for the current font. + \spaceskip = \fontdimen2\font + % + % Switch to typewriter. + \tt + % + % But `\ ' produces the large typewriter interword space. + \def\ {{\spaceskip = 0pt{} }}% + % + % Turn off hyphenation. + \nohyphenation + % + \rawbackslash + \plainfrenchspacing + #1% + }% + \null % reset spacefactor to 1000 +} + +% We *must* turn on hyphenation at `-' and `_' in @code. +% (But see \codedashfinish below.) +% Otherwise, it is too hard to avoid overfull hboxes +% in the Emacs manual, the Library manual, etc. +% +% Unfortunately, TeX uses one parameter (\hyphenchar) to control +% both hyphenation at - and hyphenation within words. +% We must therefore turn them both off (\tclose does that) +% and arrange explicitly to hyphenate at a dash. -- rms. +{ + \catcode`\-=\active \catcode`\_=\active + \catcode`\'=\active \catcode`\`=\active + \global\let'=\rq \global\let`=\lq % default definitions + % + \global\def\code{\begingroup + \setupmarkupstyle{code}% + % The following should really be moved into \setupmarkupstyle handlers. + \catcode\dashChar=\active \catcode\underChar=\active + \ifallowcodebreaks + \let-\codedash + \let_\codeunder + \else + \let-\normaldash + \let_\realunder + \fi + % Given -foo (with a single dash), we do not want to allow a break + % after the hyphen. + \global\let\codedashprev=\codedash + % + \codex + } + % + \gdef\codedash{\futurelet\next\codedashfinish} + \gdef\codedashfinish{% + \normaldash % always output the dash character itself. + % + % Now, output a discretionary to allow a line break, unless + % (a) the next character is a -, or + % (b) the preceding character is a -. + % E.g., given --posix, we do not want to allow a break after either -. + % Given --foo-bar, we do want to allow a break between the - and the b. + \ifx\next\codedash \else + \ifx\codedashprev\codedash + \else \discretionary{}{}{}\fi + \fi + % we need the space after the = for the case when \next itself is a + % space token; it would get swallowed otherwise. As in @code{- a}. + \global\let\codedashprev= \next + } +} +\def\normaldash{-} +% +\def\codex #1{\tclose{#1}\endgroup} + +\def\codeunder{% + % this is all so @math{@code{var_name}+1} can work. In math mode, _ + % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) + % will therefore expand the active definition of _, which is us + % (inside @code that is), therefore an endless loop. + \ifusingtt{\ifmmode + \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. + \else\normalunderscore \fi + \discretionary{}{}{}}% + {\_}% +} + +% An additional complication: the above will allow breaks after, e.g., +% each of the four underscores in __typeof__. This is bad. +% @allowcodebreaks provides a document-level way to turn breaking at - +% and _ on and off. +% +\newif\ifallowcodebreaks \allowcodebreakstrue + +\def\keywordtrue{true} +\def\keywordfalse{false} + +\parseargdef\allowcodebreaks{% + \def\txiarg{#1}% + \ifx\txiarg\keywordtrue + \allowcodebreakstrue + \else\ifx\txiarg\keywordfalse + \allowcodebreaksfalse + \else + \errhelp = \EMsimple + \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% + \fi\fi +} + +% For @command, @env, @file, @option quotes seem unnecessary, +% so use \code rather than \samp. +\let\command=\code +\let\env=\code +\let\file=\code +\let\option=\code + +% @uref (abbreviation for `urlref') aka @url takes an optional +% (comma-separated) second argument specifying the text to display and +% an optional third arg as text to display instead of (rather than in +% addition to) the url itself. First (mandatory) arg is the url. + +% TeX-only option to allow changing PDF output to show only the second +% arg (if given), and not the url (which is then just the link target). +\newif\ifurefurlonlylink + +% The main macro is \urefbreak, which allows breaking at expected +% places within the url. (There used to be another version, which +% didn't support automatic breaking.) +\def\urefbreak{\begingroup \urefcatcodes \dourefbreak} +\let\uref=\urefbreak +% +\def\dourefbreak#1{\urefbreakfinish #1,,,\finish} +\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example + \unsepspaces + \pdfurl{#1}% + \setbox0 = \hbox{\ignorespaces #3}% + \ifdim\wd0 > 0pt + \unhbox0 % third arg given, show only that + \else + \setbox0 = \hbox{\ignorespaces #2}% look for second arg + \ifdim\wd0 > 0pt + \ifpdf + % For pdfTeX and LuaTeX + \ifurefurlonlylink + % PDF plus option to not display url, show just arg + \unhbox0 + \else + % PDF, normally display both arg and url for consistency, + % visibility, if the pdf is eventually used to print, etc. + \unhbox0\ (\urefcode{#1})% + \fi + \else + \ifx\XeTeXrevision\thisisundefined + \unhbox0\ (\urefcode{#1})% DVI, always show arg and url + \else + % For XeTeX + \ifurefurlonlylink + % PDF plus option to not display url, show just arg + \unhbox0 + \else + % PDF, normally display both arg and url for consistency, + % visibility, if the pdf is eventually used to print, etc. + \unhbox0\ (\urefcode{#1})% + \fi + \fi + \fi + \else + \urefcode{#1}% only url given, so show it + \fi + \fi + \endlink +\endgroup} + +% Allow line breaks around only a few characters (only). +\def\urefcatcodes{% + \catcode`\&=\active \catcode`\.=\active + \catcode`\#=\active \catcode`\?=\active + \catcode`\/=\active +} +{ + \urefcatcodes + % + \global\def\urefcode{\begingroup + \setupmarkupstyle{code}% + \urefcatcodes + \let&\urefcodeamp + \let.\urefcodedot + \let#\urefcodehash + \let?\urefcodequest + \let/\urefcodeslash + \codex + } + % + % By default, they are just regular characters. + \global\def&{\normalamp} + \global\def.{\normaldot} + \global\def#{\normalhash} + \global\def?{\normalquest} + \global\def/{\normalslash} +} + +% we put a little stretch before and after the breakable chars, to help +% line breaking of long url's. The unequal skips make look better in +% cmtt at least, especially for dots. +\def\urefprestretchamount{.13em} +\def\urefpoststretchamount{.1em} +\def\urefprestretch{\urefprebreak \hskip0pt plus\urefprestretchamount\relax} +\def\urefpoststretch{\urefpostbreak \hskip0pt plus\urefprestretchamount\relax} +% +\def\urefcodeamp{\urefprestretch \&\urefpoststretch} +\def\urefcodedot{\urefprestretch .\urefpoststretch} +\def\urefcodehash{\urefprestretch \#\urefpoststretch} +\def\urefcodequest{\urefprestretch ?\urefpoststretch} +\def\urefcodeslash{\futurelet\next\urefcodeslashfinish} +{ + \catcode`\/=\active + \global\def\urefcodeslashfinish{% + \urefprestretch \slashChar + % Allow line break only after the final / in a sequence of + % slashes, to avoid line break between the slashes in http://. + \ifx\next/\else \urefpoststretch \fi + } +} + +% One more complication: by default we'll break after the special +% characters, but some people like to break before the special chars, so +% allow that. Also allow no breaking at all, for manual control. +% +\parseargdef\urefbreakstyle{% + \def\txiarg{#1}% + \ifx\txiarg\wordnone + \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} + \else\ifx\txiarg\wordbefore + \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} + \else\ifx\txiarg\wordafter + \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} + \else + \errhelp = \EMsimple + \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% + \fi\fi\fi +} +\def\wordafter{after} +\def\wordbefore{before} +\def\wordnone{none} + +\urefbreakstyle after + +% @url synonym for @uref, since that's how everyone uses it. +% +\let\url=\uref + +% rms does not like angle brackets --karl, 17may97. +% So now @email is just like @uref, unless we are pdf. +% +%\def\email#1{\angleleft{\tt #1}\angleright} +\ifpdf + \def\email#1{\doemail#1,,\finish} + \def\doemail#1,#2,#3\finish{\begingroup + \unsepspaces + \pdfurl{mailto:#1}% + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi + \endlink + \endgroup} +\else + \ifx\XeTeXrevision\thisisundefined + \let\email=\uref + \else + \def\email#1{\doemail#1,,\finish} + \def\doemail#1,#2,#3\finish{\begingroup + \unsepspaces + \pdfurl{mailto:#1}% + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi + \endlink + \endgroup} + \fi +\fi + +% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), +% `example' (@kbd uses ttsl only inside of @example and friends), +% or `code' (@kbd uses normal tty font always). +\parseargdef\kbdinputstyle{% + \def\txiarg{#1}% + \ifx\txiarg\worddistinct + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% + \else\ifx\txiarg\wordexample + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% + \else\ifx\txiarg\wordcode + \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% + \else + \errhelp = \EMsimple + \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% + \fi\fi\fi +} +\def\worddistinct{distinct} +\def\wordexample{example} +\def\wordcode{code} + +% Default is `distinct'. +\kbdinputstyle distinct + +% @kbd is like @code, except that if the argument is just one @key command, +% then @kbd has no effect. +\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} + +\def\xkey{\key} +\def\kbdsub#1#2#3\par{% + \def\one{#1}\def\three{#3}\def\threex{??}% + \ifx\one\xkey\ifx\threex\three \key{#2}% + \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi + \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi +} + +% definition of @key that produces a lozenge. Doesn't adjust to text size. +%\setfont\keyrm\rmshape{8}{1000}{OT1} +%\font\keysy=cmsy9 +%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% +% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% +% \vbox{\hrule\kern-0.4pt +% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% +% \kern-0.4pt\hrule}% +% \kern-.06em\raise0.4pt\hbox{\angleright}}}} + +% definition of @key with no lozenge. If the current font is already +% monospace, don't change it; that way, we respect @kbdinputstyle. But +% if it isn't monospace, then use \tt. +% +\def\key#1{{\setupmarkupstyle{key}% + \nohyphenation + \ifmonospace\else\tt\fi + #1}\null} + +% @clicksequence{File @click{} Open ...} +\def\clicksequence#1{\begingroup #1\endgroup} + +% @clickstyle @arrow (by default) +\parseargdef\clickstyle{\def\click{#1}} +\def\click{\arrow} + +% Typeset a dimension, e.g., `in' or `pt'. The only reason for the +% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. +% +\def\dmn#1{\thinspace #1} + +% @acronym for "FBI", "NATO", and the like. +% We print this one point size smaller, since it's intended for +% all-uppercase. +% +\def\acronym#1{\doacronym #1,,\finish} +\def\doacronym#1,#2,#3\finish{% + {\switchtolsize #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi + \null % reset \spacefactor=1000 +} + +% @abbr for "Comput. J." and the like. +% No font change, but don't do end-of-sentence spacing. +% +\def\abbr#1{\doabbr #1,,\finish} +\def\doabbr#1,#2,#3\finish{% + {\plainfrenchspacing #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi + \null % reset \spacefactor=1000 +} + +% @asis just yields its argument. Used with @table, for example. +% +\def\asis#1{#1} + +% @math outputs its argument in math mode. +% +% One complication: _ usually means subscripts, but it could also mean +% an actual _ character, as in @math{@var{some_variable} + 1}. So make +% _ active, and distinguish by seeing if the current family is \slfam, +% which is what @var uses. +{ + \catcode`\_ = \active + \gdef\mathunderscore{% + \catcode`\_=\active + \def_{\ifnum\fam=\slfam \_\else\sb\fi}% + } +} +% Another complication: we want \\ (and @\) to output a math (or tt) \. +% FYI, plain.tex uses \\ as a temporary control sequence (for no +% particular reason), but this is not advertised and we don't care. +% +% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. +\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} +% +\def\math{% + \ifmmode\else % only go into math if not in math mode already + \tex + \mathunderscore + \let\\ = \mathbackslash + \mathactive + % make the texinfo accent commands work in math mode + \let\"=\ddot + \let\'=\acute + \let\==\bar + \let\^=\hat + \let\`=\grave + \let\u=\breve + \let\v=\check + \let\~=\tilde + \let\dotaccent=\dot + % have to provide another name for sup operator + \let\mathopsup=\sup + $\expandafter\finishmath\fi +} +\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. + +% Some active characters (such as <) are spaced differently in math. +% We have to reset their definitions in case the @math was an argument +% to a command which sets the catcodes (such as @item or @section). +% +{ + \catcode`^ = \active + \catcode`< = \active + \catcode`> = \active + \catcode`+ = \active + \catcode`' = \active + \gdef\mathactive{% + \let^ = \ptexhat + \let< = \ptexless + \let> = \ptexgtr + \let+ = \ptexplus + \let' = \ptexquoteright + } +} + +% for @sub and @sup, if in math mode, just do a normal sub/superscript. +% If in text, use math to place as sub/superscript, but switch +% into text mode, with smaller fonts. This is a different font than the +% one used for real math sub/superscripts (8pt vs. 7pt), but let's not +% fix it (significant additions to font machinery) until someone notices. +% +\def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi} +\def\finishsub#1{$\sb{\hbox{\switchtolllsize #1}}$}% +% +\def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi} +\def\finishsup#1{$\ptexsp{\hbox{\switchtolllsize #1}}$}% + +% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. +% Ignore unless FMTNAME == tex; then it is like @iftex and @tex, +% except specified as a normal braced arg, so no newlines to worry about. +% +\def\outfmtnametex{tex} +% +\long\def\inlinefmt#1{\doinlinefmt #1,\finish} +\long\def\doinlinefmt#1,#2,\finish{% + \def\inlinefmtname{#1}% + \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi +} +% +% @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if +% FMTNAME is tex, else ELSE-TEXT. +\long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish} +\long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{% + \def\inlinefmtname{#1}% + \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi +} +% +% For raw, must switch into @tex before parsing the argument, to avoid +% setting catcodes prematurely. Doing it this way means that, for +% example, @inlineraw{html, foo{bar} gets a parse error instead of being +% ignored. But this isn't important because if people want a literal +% *right* brace they would have to use a command anyway, so they may as +% well use a command to get a left brace too. We could re-use the +% delimiter character idea from \verb, but it seems like overkill. +% +\long\def\inlineraw{\tex \doinlineraw} +\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} +\def\doinlinerawtwo#1,#2,\finish{% + \def\inlinerawname{#1}% + \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi + \endgroup % close group opened by \tex. +} + +% @inlineifset{VAR, TEXT} expands TEXT if VAR is @set. +% +\long\def\inlineifset#1{\doinlineifset #1,\finish} +\long\def\doinlineifset#1,#2,\finish{% + \def\inlinevarname{#1}% + \expandafter\ifx\csname SET\inlinevarname\endcsname\relax + \else\ignorespaces#2\fi +} + +% @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set. +% +\long\def\inlineifclear#1{\doinlineifclear #1,\finish} +\long\def\doinlineifclear#1,#2,\finish{% + \def\inlinevarname{#1}% + \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi +} + + +\message{glyphs,} +% and logos. + +% @@ prints an @, as does @atchar{}. +\def\@{\char64 } +\let\atchar=\@ + +% @{ @} @lbracechar{} @rbracechar{} all generate brace characters. +\def\lbracechar{{\ifmonospace\char123\else\ensuremath\lbrace\fi}} +\def\rbracechar{{\ifmonospace\char125\else\ensuremath\rbrace\fi}} +\let\{=\lbracechar +\let\}=\rbracechar + +% @comma{} to avoid , parsing problems. +\let\comma = , + +% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent +% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. +\let\, = \ptexc +\let\dotaccent = \ptexdot +\def\ringaccent#1{{\accent23 #1}} +\let\tieaccent = \ptext +\let\ubaraccent = \ptexb +\let\udotaccent = \d + +% Other special characters: @questiondown @exclamdown @ordf @ordm +% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. +\def\questiondown{?`} +\def\exclamdown{!`} +\def\ordf{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{a}}} +\def\ordm{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{o}}} + +% Dotless i and dotless j, used for accents. +\def\imacro{i} +\def\jmacro{j} +\def\dotless#1{% + \def\temp{#1}% + \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi + \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi + \else \errmessage{@dotless can be used only with i or j}% + \fi\fi +} + +% The \TeX{} logo, as in plain, but resetting the spacing so that a +% period following counts as ending a sentence. (Idea found in latex.) +% +\edef\TeX{\TeX \spacefactor=1000 } + +% @LaTeX{} logo. Not quite the same results as the definition in +% latex.ltx, since we use a different font for the raised A; it's most +% convenient for us to use an explicitly smaller font, rather than using +% the \scriptstyle font (since we don't reset \scriptstyle and +% \scriptscriptstyle). +% +\def\LaTeX{% + L\kern-.36em + {\setbox0=\hbox{T}% + \vbox to \ht0{\hbox{% + \ifx\textnominalsize\xwordpt + % for 10pt running text, lllsize (8pt) is too small for the A in LaTeX. + % Revert to plain's \scriptsize, which is 7pt. + \count255=\the\fam $\fam\count255 \scriptstyle A$% + \else + % For 11pt, we can use our lllsize. + \switchtolllsize A% + \fi + }% + \vss + }}% + \kern-.15em + \TeX +} + +% Some math mode symbols. Define \ensuremath to switch into math mode +% unless we are already there. Expansion tricks may not be needed here, +% but safer, and can't hurt. +\def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi} +\def\ensuredmath#1{$\relax#1$} +% +\def\bullet{\ensuremath\ptexbullet} +\def\geq{\ensuremath\ge} +\def\leq{\ensuremath\le} +\def\minus{\ensuremath-} + +% @dots{} outputs an ellipsis using the current font. +% We do .5em per period so that it has the same spacing in the cm +% typewriter fonts as three actual period characters; on the other hand, +% in other typewriter fonts three periods are wider than 1.5em. So do +% whichever is larger. +% +\def\dots{% + \leavevmode + \setbox0=\hbox{...}% get width of three periods + \ifdim\wd0 > 1.5em + \dimen0 = \wd0 + \else + \dimen0 = 1.5em + \fi + \hbox to \dimen0{% + \hskip 0pt plus.25fil + .\hskip 0pt plus1fil + .\hskip 0pt plus1fil + .\hskip 0pt plus.5fil + }% +} + +% @enddots{} is an end-of-sentence ellipsis. +% +\def\enddots{% + \dots + \spacefactor=\endofsentencespacefactor +} + +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. +% +% Since these characters are used in examples, they should be an even number of +% \tt widths. Each \tt character is 1en, so two makes it 1em. +% +\def\point{$\star$} +\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} +\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} +\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} +\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} +\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} + +% The @error{} command. +% Adapted from the TeXbook's \boxit. +% +\newbox\errorbox +% +{\ttfont \global\dimen0 = 3em}% Width of the box. +\dimen2 = .55pt % Thickness of rules +% The text. (`r' is open on the right, `e' somewhat less so on the left.) +\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} +% +\setbox\errorbox=\hbox to \dimen0{\hfil + \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. + \advance\hsize by -2\dimen2 % Rules. + \vbox{% + \hrule height\dimen2 + \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. + \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. + \kern3pt\vrule width\dimen2}% Space to right. + \hrule height\dimen2} + \hfil} +% +\def\error{\leavevmode\lower.7ex\copy\errorbox} + +% @pounds{} is a sterling sign, which Knuth put in the CM italic font. +% +\def\pounds{{\it\$}} + +% @euro{} comes from a separate font, depending on the current style. +% We use the free feym* fonts from the eurosym package by Henrik +% Theiling, which support regular, slanted, bold and bold slanted (and +% "outlined" (blackboard board, sort of) versions, which we don't need). +% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. +% +% Although only regular is the truly official Euro symbol, we ignore +% that. The Euro is designed to be slightly taller than the regular +% font height. +% +% feymr - regular +% feymo - slanted +% feybr - bold +% feybo - bold slanted +% +% There is no good (free) typewriter version, to my knowledge. +% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. +% Hmm. +% +% Also doesn't work in math. Do we need to do math with euro symbols? +% Hope not. +% +% +\def\euro{{\eurofont e}} +\def\eurofont{% + % We set the font at each command, rather than predefining it in + % \textfonts and the other font-switching commands, so that + % installations which never need the symbol don't have to have the + % font installed. + % + % There is only one designed size (nominal 10pt), so we always scale + % that to the current nominal size. + % + % By the way, simply using "at 1em" works for cmr10 and the like, but + % does not work for cmbx10 and other extended/shrunken fonts. + % + \def\eurosize{\csname\curfontsize nominalsize\endcsname}% + % + \ifx\curfontstyle\bfstylename + % bold: + \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize + \else + % regular: + \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize + \fi + \thiseurofont +} + +% Glyphs from the EC fonts. We don't use \let for the aliases, because +% sometimes we redefine the original macro, and the alias should reflect +% the redefinition. +% +% Use LaTeX names for the Icelandic letters. +\def\DH{{\ecfont \char"D0}} % Eth +\def\dh{{\ecfont \char"F0}} % eth +\def\TH{{\ecfont \char"DE}} % Thorn +\def\th{{\ecfont \char"FE}} % thorn +% +\def\guillemetleft{{\ecfont \char"13}} +\def\guillemotleft{\guillemetleft} +\def\guillemetright{{\ecfont \char"14}} +\def\guillemotright{\guillemetright} +\def\guilsinglleft{{\ecfont \char"0E}} +\def\guilsinglright{{\ecfont \char"0F}} +\def\quotedblbase{{\ecfont \char"12}} +\def\quotesinglbase{{\ecfont \char"0D}} +% +% This positioning is not perfect (see the ogonek LaTeX package), but +% we have the precomposed glyphs for the most common cases. We put the +% tests to use those glyphs in the single \ogonek macro so we have fewer +% dummy definitions to worry about for index entries, etc. +% +% ogonek is also used with other letters in Lithuanian (IOU), but using +% the precomposed glyphs for those is not so easy since they aren't in +% the same EC font. +\def\ogonek#1{{% + \def\temp{#1}% + \ifx\temp\macrocharA\Aogonek + \else\ifx\temp\macrochara\aogonek + \else\ifx\temp\macrocharE\Eogonek + \else\ifx\temp\macrochare\eogonek + \else + \ecfont \setbox0=\hbox{#1}% + \ifdim\ht0=1ex\accent"0C #1% + \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% + \fi + \fi\fi\fi\fi + }% +} +\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} +\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} +\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} +\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} +% +% Use the European Computer Modern fonts (cm-super in outline format) +% for non-CM glyphs. That is ec* for regular text and tc* for the text +% companion symbols (LaTeX TS1 encoding). Both are part of the ec +% package and follow the same conventions. +% +\def\ecfont{\etcfont{e}} +\def\tcfont{\etcfont{t}} +% +\def\etcfont#1{% + % We can't distinguish serif/sans and italic/slanted, but this + % is used for crude hacks anyway (like adding French and German + % quotes to documents typeset with CM, where we lose kerning), so + % hopefully nobody will notice/care. + \edef\ecsize{\csname\curfontsize ecsize\endcsname}% + \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% + \ifmonospace + % typewriter: + \font\thisecfont = #1ctt\ecsize \space at \nominalsize + \else + \ifx\curfontstyle\bfstylename + % bold: + \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize + \else + % regular: + \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize + \fi + \fi + \thisecfont +} + +% @registeredsymbol - R in a circle. The font for the R should really +% be smaller yet, but lllsize is the best we can do for now. +% Adapted from the plain.tex definition of \copyright. +% +\def\registeredsymbol{% + $^{{\ooalign{\hfil\raise.07ex\hbox{\switchtolllsize R}% + \hfil\crcr\Orb}}% + }$% +} + +% @textdegree - the normal degrees sign. +% +\def\textdegree{$^\circ$} + +% Laurent Siebenmann reports \Orb undefined with: +% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 +% so we'll define it if necessary. +% +\ifx\Orb\thisisundefined +\def\Orb{\mathhexbox20D} +\fi + +% Quotes. +\chardef\quotedblleft="5C +\chardef\quotedblright=`\" +\chardef\quoteleft=`\` +\chardef\quoteright=`\' + + +\message{page headings,} + +\newskip\titlepagetopglue \titlepagetopglue = 1.5in +\newskip\titlepagebottomglue \titlepagebottomglue = 2pc + +% First the title page. Must do @settitle before @titlepage. +\newif\ifseenauthor +\newif\iffinishedtitlepage + +% @setcontentsaftertitlepage used to do an implicit @contents or +% @shortcontents after @end titlepage, but it is now obsolete. +\def\setcontentsaftertitlepage{% + \errmessage{@setcontentsaftertitlepage has been removed as a Texinfo + command; move your @contents command if you want the contents + after the title page.}}% +\def\setshortcontentsaftertitlepage{% + \errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo + command; move your @shortcontents and @contents commands if you + want the contents after the title page.}}% + +\parseargdef\shorttitlepage{% + \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% + \endgroup\page\hbox{}\page} + +\envdef\titlepage{% + % Open one extra group, as we want to close it in the middle of \Etitlepage. + \begingroup + \parindent=0pt \textfonts + % Leave some space at the very top of the page. + \vglue\titlepagetopglue + % No rule at page bottom unless we print one at the top with @title. + \finishedtitlepagetrue + % + % Most title ``pages'' are actually two pages long, with space + % at the top of the second. We don't want the ragged left on the second. + \let\oldpage = \page + \def\page{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + \let\page = \oldpage + \page + \null + }% +} + +\def\Etitlepage{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + % It is important to do the page break before ending the group, + % because the headline and footline are only empty inside the group. + % If we use the new definition of \page, we always get a blank page + % after the title page, which we certainly don't want. + \oldpage + \endgroup + % + % Need this before the \...aftertitlepage checks so that if they are + % in effect the toc pages will come out with page numbers. + \HEADINGSon +} + +\def\finishtitlepage{% + \vskip4pt \hrule height 2pt width \hsize + \vskip\titlepagebottomglue + \finishedtitlepagetrue +} + +% Settings used for typesetting titles: no hyphenation, no indentation, +% don't worry much about spacing, ragged right. This should be used +% inside a \vbox, and fonts need to be set appropriately first. \par should +% be specified before the end of the \vbox, since a vbox is a group. +% +\def\raggedtitlesettings{% + \rm + \hyphenpenalty=10000 + \parindent=0pt + \tolerance=5000 + \ptexraggedright +} + +% Macros to be used within @titlepage: + +\let\subtitlerm=\rmfont +\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} + +\parseargdef\title{% + \checkenv\titlepage + \vbox{\titlefonts \raggedtitlesettings #1\par}% + % print a rule at the page bottom also. + \finishedtitlepagefalse + \vskip4pt \hrule height 4pt width \hsize \vskip4pt +} + +\parseargdef\subtitle{% + \checkenv\titlepage + {\subtitlefont \rightline{#1}}% +} + +% @author should come last, but may come many times. +% It can also be used inside @quotation. +% +\parseargdef\author{% + \def\temp{\quotation}% + \ifx\thisenv\temp + \def\quotationauthor{#1}% printed in \Equotation. + \else + \checkenv\titlepage + \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi + {\secfonts\rm \leftline{#1}}% + \fi +} + + +% Set up page headings and footings. + +\let\thispage=\folio + +\newtoks\evenheadline % headline on even pages +\newtoks\oddheadline % headline on odd pages +\newtoks\evenfootline % footline on even pages +\newtoks\oddfootline % footline on odd pages + +% Now make \makeheadline and \makefootline in Plain TeX use those variables +\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline + \else \the\evenheadline \fi}} +\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline + \else \the\evenfootline \fi}\HEADINGShook} +\let\HEADINGShook=\relax + +% Commands to set those variables. +% For example, this is what @headings on does +% @evenheading @thistitle|@thispage|@thischapter +% @oddheading @thischapter|@thispage|@thistitle +% @evenfooting @thisfile|| +% @oddfooting ||@thisfile + + +\def\evenheading{\parsearg\evenheadingxxx} +\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} +\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% +\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddheading{\parsearg\oddheadingxxx} +\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} +\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% +\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% + +\def\evenfooting{\parsearg\evenfootingxxx} +\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} +\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% +\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddfooting{\parsearg\oddfootingxxx} +\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} +\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% + \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% + % + % Leave some space for the footline. Hopefully ok to assume + % @evenfooting will not be used by itself. + \global\advance\txipageheight by -12pt + \global\advance\vsize by -12pt +} + +\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} + +% @evenheadingmarks top \thischapter <- chapter at the top of a page +% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page +% +% The same set of arguments for: +% +% @oddheadingmarks +% @evenfootingmarks +% @oddfootingmarks +% @everyheadingmarks +% @everyfootingmarks + +% These define \getoddheadingmarks, \getevenheadingmarks, +% \getoddfootingmarks, and \getevenfootingmarks, each to one of +% \gettopheadingmarks, \getbottomheadingmarks. +% +\def\evenheadingmarks{\headingmarks{even}{heading}} +\def\oddheadingmarks{\headingmarks{odd}{heading}} +\def\evenfootingmarks{\headingmarks{even}{footing}} +\def\oddfootingmarks{\headingmarks{odd}{footing}} +\parseargdef\everyheadingmarks{\headingmarks{even}{heading}{#1} + \headingmarks{odd}{heading}{#1} } +\parseargdef\everyfootingmarks{\headingmarks{even}{footing}{#1} + \headingmarks{odd}{footing}{#1} } +% #1 = even/odd, #2 = heading/footing, #3 = top/bottom. +\def\headingmarks#1#2#3 {% + \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname + \global\expandafter\let\csname get#1#2marks\endcsname \temp +} + +\everyheadingmarks bottom +\everyfootingmarks bottom + +% @headings double turns headings on for double-sided printing. +% @headings single turns headings on for single-sided printing. +% @headings off turns them off. +% @headings on same as @headings double, retained for compatibility. +% @headings after turns on double-sided headings after this page. +% @headings doubleafter turns on double-sided headings after this page. +% @headings singleafter turns on single-sided headings after this page. +% By default, they are off at the start of a document, +% and turned `on' after @end titlepage. + +\parseargdef\headings{\csname HEADINGS#1\endcsname} + +\def\headingsoff{% non-global headings elimination + \evenheadline={\hfil}\evenfootline={\hfil}% + \oddheadline={\hfil}\oddfootline={\hfil}% +} + +\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting +\HEADINGSoff % it's the default + +% When we turn headings on, set the page number to 1. +% For double-sided printing, put current file name in lower left corner, +% chapter name on inside top of right hand pages, document +% title on inside top of left hand pages, and page numbers on outside top +% edge of all pages. +\def\HEADINGSdouble{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapterheading\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} +\let\contentsalignmacro = \chappager + +% For single-sided printing, chapter title goes across top left of page, +% page number on top right. +\def\HEADINGSsingle{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapterheading\hfil\folio}} +\global\oddheadline={\line{\thischapterheading\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} +\def\HEADINGSon{\HEADINGSdouble} + +\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} +\let\HEADINGSdoubleafter=\HEADINGSafter +\def\HEADINGSdoublex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapterheading\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} + +\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} +\def\HEADINGSsinglex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapterheading\hfil\folio}} +\global\oddheadline={\line{\thischapterheading\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} + +% Subroutines used in generating headings +% This produces Day Month Year style of output. +% Only define if not already defined, in case a txi-??.tex file has set +% up a different format (e.g., txi-cs.tex does this). +\ifx\today\thisisundefined +\def\today{% + \number\day\space + \ifcase\month + \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr + \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug + \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec + \fi + \space\number\year} +\fi + +% @settitle line... specifies the title of the document, for headings. +% It generates no output of its own. +\def\thistitle{\putwordNoTitle} +\def\settitle{\parsearg{\gdef\thistitle}} + + +\message{tables,} +% Tables -- @table, @ftable, @vtable, @item(x). + +% default indentation of table text +\newdimen\tableindent \tableindent=.8in +% default indentation of @itemize and @enumerate text +\newdimen\itemindent \itemindent=.3in +% margin between end of table item and start of table text. +\newdimen\itemmargin \itemmargin=.1in + +% used internally for \itemindent minus \itemmargin +\newdimen\itemmax + +% Note @table, @ftable, and @vtable define @item, @itemx, etc., with +% these defs. +% They also define \itemindex +% to index the item name in whatever manner is desired (perhaps none). + +\newif\ifitemxneedsnegativevskip + +\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} + +\def\internalBitem{\smallbreak \parsearg\itemzzz} +\def\internalBitemx{\itemxpar \parsearg\itemzzz} + +\def\itemzzz #1{\begingroup % + \advance\hsize by -\rightskip + \advance\hsize by -\tableindent + \setbox0=\hbox{\itemindicate{#1}}% + \itemindex{#1}% + \nobreak % This prevents a break before @itemx. + % + % If the item text does not fit in the space we have, put it on a line + % by itself, and do not allow a page break either before or after that + % line. We do not start a paragraph here because then if the next + % command is, e.g., @kindex, the whatsit would get put into the + % horizontal list on a line by itself, resulting in extra blank space. + \ifdim \wd0>\itemmax + % + % Make this a paragraph so we get the \parskip glue and wrapping, + % but leave it ragged-right. + \begingroup + \advance\leftskip by-\tableindent + \advance\hsize by\tableindent + \advance\rightskip by0pt plus1fil\relax + \leavevmode\unhbox0\par + \endgroup + % + % We're going to be starting a paragraph, but we don't want the + % \parskip glue -- logically it's part of the @item we just started. + \nobreak \vskip-\parskip + % + % Stop a page break at the \parskip glue coming up. However, if + % what follows is an environment such as @example, there will be no + % \parskip glue; then the negative vskip we just inserted would + % cause the example and the item to crash together. So we use this + % bizarre value of 10001 as a signal to \aboveenvbreak to insert + % \parskip glue after all. Section titles are handled this way also. + % + \penalty 10001 + \endgroup + \itemxneedsnegativevskipfalse + \else + % The item text fits into the space. Start a paragraph, so that the + % following text (if any) will end up on the same line. + \noindent + % Do this with kerns and \unhbox so that if there is a footnote in + % the item text, it can migrate to the main vertical list and + % eventually be printed. + \nobreak\kern-\tableindent + \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 + \unhbox0 + \nobreak\kern\dimen0 + \endgroup + \itemxneedsnegativevskiptrue + \fi +} + +\def\item{\errmessage{@item while not in a list environment}} +\def\itemx{\errmessage{@itemx while not in a list environment}} + +% @table, @ftable, @vtable. +\envdef\table{% + \let\itemindex\gobble + \tablecheck{table}% +} +\envdef\ftable{% + \def\itemindex ##1{\doind {fn}{\code{##1}}}% + \tablecheck{ftable}% +} +\envdef\vtable{% + \def\itemindex ##1{\doind {vr}{\code{##1}}}% + \tablecheck{vtable}% +} +\def\tablecheck#1{% + \ifnum \the\catcode`\^^M=\active + \endgroup + \errmessage{This command won't work in this context; perhaps the problem is + that we are \inenvironment\thisenv}% + \def\next{\doignore{#1}}% + \else + \let\next\tablex + \fi + \next +} +\def\tablex#1{% + \def\itemindicate{#1}% + \parsearg\tabley +} +\def\tabley#1{% + {% + \makevalueexpandable + \edef\temp{\noexpand\tablez #1\space\space\space}% + \expandafter + }\temp \endtablez +} +\def\tablez #1 #2 #3 #4\endtablez{% + \aboveenvbreak + \ifnum 0#1>0 \advance \leftskip by #1\mil \fi + \ifnum 0#2>0 \tableindent=#2\mil \fi + \ifnum 0#3>0 \advance \rightskip by #3\mil \fi + \itemmax=\tableindent + \advance \itemmax by -\itemmargin + \advance \leftskip by \tableindent + \exdentamount=\tableindent + \parindent = 0pt + \parskip = \smallskipamount + \ifdim \parskip=0pt \parskip=2pt \fi + \let\item = \internalBitem + \let\itemx = \internalBitemx +} +\def\Etable{\endgraf\afterenvbreak} +\let\Eftable\Etable +\let\Evtable\Etable +\let\Eitemize\Etable +\let\Eenumerate\Etable + +% This is the counter used by @enumerate, which is really @itemize + +\newcount \itemno + +\envdef\itemize{\parsearg\doitemize} + +\def\doitemize#1{% + \aboveenvbreak + \itemmax=\itemindent + \advance\itemmax by -\itemmargin + \advance\leftskip by \itemindent + \exdentamount=\itemindent + \parindent=0pt + \parskip=\smallskipamount + \ifdim\parskip=0pt \parskip=2pt \fi + % + % Try typesetting the item mark so that if the document erroneously says + % something like @itemize @samp (intending @table), there's an error + % right away at the @itemize. It's not the best error message in the + % world, but it's better than leaving it to the @item. This means if + % the user wants an empty mark, they have to say @w{} not just @w. + \def\itemcontents{#1}% + \setbox0 = \hbox{\itemcontents}% + % + % @itemize with no arg is equivalent to @itemize @bullet. + \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi + % + \let\item=\itemizeitem +} + +% Definition of @item while inside @itemize and @enumerate. +% +\def\itemizeitem{% + \advance\itemno by 1 % for enumerations + {\let\par=\endgraf \smallbreak}% reasonable place to break + {% + % If the document has an @itemize directly after a section title, a + % \nobreak will be last on the list, and \sectionheading will have + % done a \vskip-\parskip. In that case, we don't want to zero + % parskip, or the item text will crash with the heading. On the + % other hand, when there is normal text preceding the item (as there + % usually is), we do want to zero parskip, or there would be too much + % space. In that case, we won't have a \nobreak before. At least + % that's the theory. + \ifnum\lastpenalty<10000 \parskip=0in \fi + \noindent + \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% + % + \ifinner\else + \vadjust{\penalty 1200}% not good to break after first line of item. + \fi + % We can be in inner vertical mode in a footnote, although an + % @itemize looks awful there. + }% + \flushcr +} + +% \splitoff TOKENS\endmark defines \first to be the first token in +% TOKENS, and \rest to be the remainder. +% +\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% + +% Allow an optional argument of an uppercase letter, lowercase letter, +% or number, to specify the first label in the enumerated list. No +% argument is the same as `1'. +% +\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} +\def\enumeratey #1 #2\endenumeratey{% + % If we were given no argument, pretend we were given `1'. + \def\thearg{#1}% + \ifx\thearg\empty \def\thearg{1}\fi + % + % Detect if the argument is a single token. If so, it might be a + % letter. Otherwise, the only valid thing it can be is a number. + % (We will always have one token, because of the test we just made. + % This is a good thing, since \splitoff doesn't work given nothing at + % all -- the first parameter is undelimited.) + \expandafter\splitoff\thearg\endmark + \ifx\rest\empty + % Only one token in the argument. It could still be anything. + % A ``lowercase letter'' is one whose \lccode is nonzero. + % An ``uppercase letter'' is one whose \lccode is both nonzero, and + % not equal to itself. + % Otherwise, we assume it's a number. + % + % We need the \relax at the end of the \ifnum lines to stop TeX from + % continuing to look for a <number>. + % + \ifnum\lccode\expandafter`\thearg=0\relax + \numericenumerate % a number (we hope) + \else + % It's a letter. + \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax + \lowercaseenumerate % lowercase letter + \else + \uppercaseenumerate % uppercase letter + \fi + \fi + \else + % Multiple tokens in the argument. We hope it's a number. + \numericenumerate + \fi +} + +% An @enumerate whose labels are integers. The starting integer is +% given in \thearg. +% +\def\numericenumerate{% + \itemno = \thearg + \startenumeration{\the\itemno}% +} + +% The starting (lowercase) letter is in \thearg. +\def\lowercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more lowercase letters in @enumerate; get a bigger + alphabet}% + \fi + \char\lccode\itemno + }% +} + +% The starting (uppercase) letter is in \thearg. +\def\uppercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more uppercase letters in @enumerate; get a bigger + alphabet} + \fi + \char\uccode\itemno + }% +} + +% Call \doitemize, adding a period to the first argument and supplying the +% common last two arguments. Also subtract one from the initial value in +% \itemno, since @item increments \itemno. +% +\def\startenumeration#1{% + \advance\itemno by -1 + \doitemize{#1.}\flushcr +} + +% @alphaenumerate and @capsenumerate are abbreviations for giving an arg +% to @enumerate. +% +\def\alphaenumerate{\enumerate{a}} +\def\capsenumerate{\enumerate{A}} +\def\Ealphaenumerate{\Eenumerate} +\def\Ecapsenumerate{\Eenumerate} + + +% @multitable macros +% Amy Hendrickson, 8/18/94, 3/6/96 +% +% @multitable ... @end multitable will make as many columns as desired. +% Contents of each column will wrap at width given in preamble. Width +% can be specified either with sample text given in a template line, +% or in percent of \hsize, the current width of text on page. + +% Table can continue over pages but will only break between lines. + +% To make preamble: +% +% Either define widths of columns in terms of percent of \hsize: +% @multitable @columnfractions .25 .3 .45 +% @item ... +% +% Numbers following @columnfractions are the percent of the total +% current hsize to be used for each column. You may use as many +% columns as desired. + + +% Or use a template: +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item ... +% using the widest term desired in each column. + +% Each new table line starts with @item, each subsequent new column +% starts with @tab. Empty columns may be produced by supplying @tab's +% with nothing between them for as many times as empty columns are needed, +% ie, @tab@tab@tab will produce two empty columns. + +% @item, @tab do not need to be on their own lines, but it will not hurt +% if they are. + +% Sample multitable: + +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item first col stuff @tab second col stuff @tab third col +% @item +% first col stuff +% @tab +% second col stuff +% @tab +% third col +% @item first col stuff @tab second col stuff +% @tab Many paragraphs of text may be used in any column. +% +% They will wrap at the width determined by the template. +% @item@tab@tab This will be in third column. +% @end multitable + +% Default dimensions may be reset by user. +% @multitableparskip is vertical space between paragraphs in table. +% @multitableparindent is paragraph indent in table. +% @multitablecolmargin is horizontal space to be left between columns. +% @multitablelinespace is space to leave between table items, baseline +% to baseline. +% 0pt means it depends on current normal line spacing. +% +\newskip\multitableparskip +\newskip\multitableparindent +\newdimen\multitablecolspace +\newskip\multitablelinespace +\multitableparskip=0pt +\multitableparindent=6pt +\multitablecolspace=12pt +\multitablelinespace=0pt + +% Macros used to set up halign preamble: +% +\let\endsetuptable\relax +\def\xendsetuptable{\endsetuptable} +\let\columnfractions\relax +\def\xcolumnfractions{\columnfractions} +\newif\ifsetpercent + +% #1 is the @columnfraction, usually a decimal number like .5, but might +% be just 1. We just use it, whatever it is. +% +\def\pickupwholefraction#1 {% + \global\advance\colcount by 1 + \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% + \setuptable +} + +\newcount\colcount +\def\setuptable#1{% + \def\firstarg{#1}% + \ifx\firstarg\xendsetuptable + \let\go = \relax + \else + \ifx\firstarg\xcolumnfractions + \global\setpercenttrue + \else + \ifsetpercent + \let\go\pickupwholefraction + \else + \global\advance\colcount by 1 + \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a + % separator; typically that is always in the input, anyway. + \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% + \fi + \fi + \ifx\go\pickupwholefraction + % Put the argument back for the \pickupwholefraction call, so + % we'll always have a period there to be parsed. + \def\go{\pickupwholefraction#1}% + \else + \let\go = \setuptable + \fi% + \fi + \go +} + +% multitable-only commands. +% +% @headitem starts a heading row, which we typeset in bold. Assignments +% have to be global since we are inside the implicit group of an +% alignment entry. \everycr below resets \everytab so we don't have to +% undo it ourselves. +\def\headitemfont{\b}% for people to use in the template row; not changeable +\def\headitem{% + \checkenv\multitable + \crcr + \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings + \global\everytab={\bf}% can't use \headitemfont since the parsing differs + \the\everytab % for the first item +}% +% +% default for tables with no headings. +\let\headitemcrhook=\relax +% +% A \tab used to include \hskip1sp. But then the space in a template +% line is not enough. That is bad. So let's go back to just `&' until +% we again encounter the problem the 1sp was intended to solve. +% --karl, nathan@acm.org, 20apr99. +\def\tab{\checkenv\multitable &\the\everytab}% + +% @multitable ... @end multitable definitions: +% +\newtoks\everytab % insert after every tab. +% +\envdef\multitable{% + \vskip\parskip + \startsavinginserts + % + % @item within a multitable starts a normal row. + % We use \def instead of \let so that if one of the multitable entries + % contains an @itemize, we don't choke on the \item (seen as \crcr aka + % \endtemplate) expanding \doitemize. + \def\item{\crcr}% + % + \tolerance=9500 + \hbadness=9500 + \setmultitablespacing + \parskip=\multitableparskip + \parindent=\multitableparindent + \overfullrule=0pt + \global\colcount=0 + % + \everycr = {% + \noalign{% + \global\everytab={}% Reset from possible headitem. + \global\colcount=0 % Reset the column counter. + % + % Check for saved footnotes, etc.: + \checkinserts + % + % Perhaps a \nobreak, then reset: + \headitemcrhook + \global\let\headitemcrhook=\relax + }% + }% + % + \parsearg\domultitable +} +\def\domultitable#1{% + % To parse everything between @multitable and @item: + \setuptable#1 \endsetuptable + % + % This preamble sets up a generic column definition, which will + % be used as many times as user calls for columns. + % \vtop will set a single line and will also let text wrap and + % continue for many paragraphs if desired. + \halign\bgroup &% + \global\advance\colcount by 1 + \multistrut + \vtop{% + % Use the current \colcount to find the correct column width: + \hsize=\expandafter\csname col\the\colcount\endcsname + % + % In order to keep entries from bumping into each other + % we will add a \leftskip of \multitablecolspace to all columns after + % the first one. + % + % If a template has been used, we will add \multitablecolspace + % to the width of each template entry. + % + % If the user has set preamble in terms of percent of \hsize we will + % use that dimension as the width of the column, and the \leftskip + % will keep entries from bumping into each other. Table will start at + % left margin and final column will justify at right margin. + % + % Make sure we don't inherit \rightskip from the outer environment. + \rightskip=0pt + \ifnum\colcount=1 + % The first column will be indented with the surrounding text. + \advance\hsize by\leftskip + \else + \ifsetpercent \else + % If user has not set preamble in terms of percent of \hsize + % we will advance \hsize by \multitablecolspace. + \advance\hsize by \multitablecolspace + \fi + % In either case we will make \leftskip=\multitablecolspace: + \leftskip=\multitablecolspace + \fi + % Ignoring space at the beginning and end avoids an occasional spurious + % blank line, when TeX decides to break the line at the space before the + % box from the multistrut, so the strut ends up on a line by itself. + % For example: + % @multitable @columnfractions .11 .89 + % @item @code{#} + % @tab Legal holiday which is valid in major parts of the whole country. + % Is automatically provided with highlighting sequences respectively + % marking characters. + \noindent\ignorespaces##\unskip\multistrut + }\cr +} +\def\Emultitable{% + \crcr + \egroup % end the \halign + \global\setpercentfalse +} + +\def\setmultitablespacing{% + \def\multistrut{\strut}% just use the standard line spacing + % + % Compute \multitablelinespace (if not defined by user) for use in + % \multitableparskip calculation. We used define \multistrut based on + % this, but (ironically) that caused the spacing to be off. + % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. +\ifdim\multitablelinespace=0pt +\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip +\global\advance\multitablelinespace by-\ht0 +\fi +% Test to see if parskip is larger than space between lines of +% table. If not, do nothing. +% If so, set to same dimension as multitablelinespace. +\ifdim\multitableparskip>\multitablelinespace +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller + % than skip between lines in the table. +\fi% +\ifdim\multitableparskip=0pt +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller + % than skip between lines in the table. +\fi} + + +\message{conditionals,} + +% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, +% @ifnotxml always succeed. They currently do nothing; we don't +% attempt to check whether the conditionals are properly nested. But we +% have to remember that they are conditionals, so that @end doesn't +% attempt to close an environment group. +% +\def\makecond#1{% + \expandafter\let\csname #1\endcsname = \relax + \expandafter\let\csname iscond.#1\endcsname = 1 +} +\makecond{iftex} +\makecond{ifnotdocbook} +\makecond{ifnothtml} +\makecond{ifnotinfo} +\makecond{ifnotplaintext} +\makecond{ifnotxml} + +% Ignore @ignore, @ifhtml, @ifinfo, and the like. +% +\def\direntry{\doignore{direntry}} +\def\documentdescription{\doignore{documentdescription}} +\def\docbook{\doignore{docbook}} +\def\html{\doignore{html}} +\def\ifdocbook{\doignore{ifdocbook}} +\def\ifhtml{\doignore{ifhtml}} +\def\ifinfo{\doignore{ifinfo}} +\def\ifnottex{\doignore{ifnottex}} +\def\ifplaintext{\doignore{ifplaintext}} +\def\ifxml{\doignore{ifxml}} +\def\ignore{\doignore{ignore}} +\def\menu{\doignore{menu}} +\def\xml{\doignore{xml}} + +% Ignore text until a line `@end #1', keeping track of nested conditionals. +% +% A count to remember the depth of nesting. +\newcount\doignorecount + +\def\doignore#1{\begingroup + % Scan in ``verbatim'' mode: + \obeylines + \catcode`\@ = \other + \catcode`\{ = \other + \catcode`\} = \other + % + % Make sure that spaces turn into tokens that match what \doignoretext wants. + \spaceisspace + % + % Count number of #1's that we've seen. + \doignorecount = 0 + % + % Swallow text until we reach the matching `@end #1'. + \dodoignore{#1}% +} + +{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. + \obeylines % + % + \gdef\dodoignore#1{% + % #1 contains the command name as a string, e.g., `ifinfo'. + % + % Define a command to find the next `@end #1'. + \long\def\doignoretext##1^^M@end #1{% + \doignoretextyyy##1^^M@#1\_STOP_}% + % + % And this command to find another #1 command, at the beginning of a + % line. (Otherwise, we would consider a line `@c @ifset', for + % example, to count as an @ifset for nesting.) + \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% + % + % And now expand that command. + \doignoretext ^^M% + }% +} + +\def\doignoreyyy#1{% + \def\temp{#1}% + \ifx\temp\empty % Nothing found. + \let\next\doignoretextzzz + \else % Found a nested condition, ... + \advance\doignorecount by 1 + \let\next\doignoretextyyy % ..., look for another. + % If we're here, #1 ends with ^^M\ifinfo (for example). + \fi + \next #1% the token \_STOP_ is present just after this macro. +} + +% We have to swallow the remaining "\_STOP_". +% +\def\doignoretextzzz#1{% + \ifnum\doignorecount = 0 % We have just found the outermost @end. + \let\next\enddoignore + \else % Still inside a nested condition. + \advance\doignorecount by -1 + \let\next\doignoretext % Look for the next @end. + \fi + \next +} + +% Finish off ignored text. +{ \obeylines% + % Ignore anything after the last `@end #1'; this matters in verbatim + % environments, where otherwise the newline after an ignored conditional + % would result in a blank line in the output. + \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% +} + + +% @set VAR sets the variable VAR to an empty value. +% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. +% +% Since we want to separate VAR from REST-OF-LINE (which might be +% empty), we can't just use \parsearg; we have to insert a space of our +% own to delimit the rest of the line, and then take it out again if we +% didn't need it. +% We rely on the fact that \parsearg sets \catcode`\ =10. +% +\parseargdef\set{\setyyy#1 \endsetyyy} +\def\setyyy#1 #2\endsetyyy{% + {% + \makevalueexpandable + \def\temp{#2}% + \edef\next{\gdef\makecsname{SET#1}}% + \ifx\temp\empty + \next{}% + \else + \setzzz#2\endsetzzz + \fi + }% +} +% Remove the trailing space \setxxx inserted. +\def\setzzz#1 \endsetzzz{\next{#1}} + +% @clear VAR clears (i.e., unsets) the variable VAR. +% +\parseargdef\clear{% + {% + \makevalueexpandable + \global\expandafter\let\csname SET#1\endcsname=\relax + }% +} + +% @value{foo} gets the text saved in variable foo. +\def\value{\begingroup\makevalueexpandable\valuexxx} +\def\valuexxx#1{\expandablevalue{#1}\endgroup} +{ + \catcode`\-=\active \catcode`\_=\active + % + \gdef\makevalueexpandable{% + \let\value = \expandablevalue + % We don't want these characters active, ... + \catcode`\-=\other \catcode`\_=\other + % ..., but we might end up with active ones in the argument if + % we're called from @code, as @code{@value{foo-bar_}}, though. + % So \let them to their normal equivalents. + \let-\normaldash \let_\normalunderscore + } +} + +% We have this subroutine so that we can handle at least some @value's +% properly in indexes (we call \makevalueexpandable in \indexdummies). +% The command has to be fully expandable (if the variable is set), since +% the result winds up in the index file. This means that if the +% variable's value contains other Texinfo commands, it's almost certain +% it will fail (although perhaps we could fix that with sufficient work +% to do a one-level expansion on the result, instead of complete). +% +% Unfortunately, this has the consequence that when _ is in the *value* +% of an @set, it does not print properly in the roman fonts (get the cmr +% dot accent at position 126 instead). No fix comes to mind, and it's +% been this way since 2003 or earlier, so just ignore it. +% +\def\expandablevalue#1{% + \expandafter\ifx\csname SET#1\endcsname\relax + {[No value for ``#1'']}% + \message{Variable `#1', used in @value, is not set.}% + \else + \csname SET#1\endcsname + \fi +} + +% Like \expandablevalue, but completely expandable (the \message in the +% definition above operates at the execution level of TeX). Used when +% writing to auxiliary files, due to the expansion that \write does. +% If flag is undefined, pass through an unexpanded @value command: maybe it +% will be set by the time it is read back in. +% +% NB flag names containing - or _ may not work here. +\def\dummyvalue#1{% + \expandafter\ifx\csname SET#1\endcsname\relax + \noexpand\value{#1}% + \else + \csname SET#1\endcsname + \fi +} + +% Used for @value's in index entries to form the sort key: expand the @value +% if possible, otherwise sort late. +\def\indexnofontsvalue#1{% + \expandafter\ifx\csname SET#1\endcsname\relax + ZZZZZZZ + \else + \csname SET#1\endcsname + \fi +} + +% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined +% with @set. +% +% To get the special treatment we need for `@end ifset,' we call +% \makecond and then redefine. +% +\makecond{ifset} +\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} +\def\doifset#1#2{% + {% + \makevalueexpandable + \let\next=\empty + \expandafter\ifx\csname SET#2\endcsname\relax + #1% If not set, redefine \next. + \fi + \expandafter + }\next +} +\def\ifsetfail{\doignore{ifset}} + +% @ifclear VAR ... @end executes the `...' iff VAR has never been +% defined with @set, or has been undefined with @clear. +% +% The `\else' inside the `\doifset' parameter is a trick to reuse the +% above code: if the variable is not set, do nothing, if it is set, +% then redefine \next to \ifclearfail. +% +\makecond{ifclear} +\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} +\def\ifclearfail{\doignore{ifclear}} + +% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written +% without the @) is in fact defined. We can only feasibly check at the +% TeX level, so something like `mathcode' is going to considered +% defined even though it is not a Texinfo command. +% +\makecond{ifcommanddefined} +\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} +% +\def\doifcmddefined#1#2{{% + \makevalueexpandable + \let\next=\empty + \expandafter\ifx\csname #2\endcsname\relax + #1% If not defined, \let\next as above. + \fi + \expandafter + }\next +} +\def\ifcmddefinedfail{\doignore{ifcommanddefined}} + +% @ifcommandnotdefined CMD ... handled similar to @ifclear above. +\makecond{ifcommandnotdefined} +\def\ifcommandnotdefined{% + \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} +\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} + +% Set the `txicommandconditionals' variable, so documents have a way to +% test if the @ifcommand...defined conditionals are available. +\set txicommandconditionals + +% @dircategory CATEGORY -- specify a category of the dir file +% which this file should belong to. Ignore this in TeX. +\let\dircategory=\comment + +% @defininfoenclose. +\let\definfoenclose=\comment + + +\message{indexing,} +% Index generation facilities + +% Define \newwrite to be identical to plain tex's \newwrite +% except not \outer, so it can be used within macros and \if's. +\edef\newwrite{\makecsname{ptexnewwrite}} + +% \newindex {foo} defines an index named IX. +% It automatically defines \IXindex such that +% \IXindex ...rest of line... puts an entry in the index IX. +% It also defines \IXindfile to be the number of the output channel for +% the file that accumulates this index. The file's extension is IX. +% The name of an index should be no more than 2 characters long +% for the sake of vms. +% +\def\newindex#1{% + \expandafter\chardef\csname#1indfile\endcsname=0 + \expandafter\xdef\csname#1index\endcsname{% % Define @#1index + \noexpand\doindex{#1}} +} + +% @defindex foo == \newindex{foo} +% +\def\defindex{\parsearg\newindex} + +% Define @defcodeindex, like @defindex except put all entries in @code. +% +\def\defcodeindex{\parsearg\newcodeindex} +% +\def\newcodeindex#1{% + \expandafter\chardef\csname#1indfile\endcsname=0 + \expandafter\xdef\csname#1index\endcsname{% + \noexpand\docodeindex{#1}}% +} + +% The default indices: +\newindex{cp}% concepts, +\newcodeindex{fn}% functions, +\newcodeindex{vr}% variables, +\newcodeindex{tp}% types, +\newcodeindex{ky}% keys +\newcodeindex{pg}% and programs. + + +% @synindex foo bar makes index foo feed into index bar. +% Do this instead of @defindex foo if you don't want it as a separate index. +% +% @syncodeindex foo bar similar, but put all entries made for index foo +% inside @code. +% +\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} +\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} + +% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), +% #3 the target index (bar). +\def\dosynindex#1#2#3{% + \requireopenindexfile{#3}% + % redefine \fooindfile: + \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname + \expandafter\let\csname#2indfile\endcsname=\temp + % redefine \fooindex: + \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% +} + +% Define \doindex, the driver for all index macros. +% Argument #1 is generated by the calling \fooindex macro, +% and it is the two-letter name of the index. + +\def\doindex#1{\edef\indexname{#1}\parsearg\doindexxxx} +\def\doindexxxx #1{\doind{\indexname}{#1}} + +% like the previous two, but they put @code around the argument. +\def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx} +\def\docodeindexxxx #1{\doind{\indexname}{\code{#1}}} + + +% Used when writing an index entry out to an index file to prevent +% expansion of Texinfo commands that can appear in an index entry. +% +\def\indexdummies{% + \escapechar = `\\ % use backslash in output files. + \definedummyletter\@% + \definedummyletter\ % + % + % For texindex which always views { and } as separators. + \def\{{\lbracechar{}}% + \def\}{\rbracechar{}}% + % + % Do the redefinitions. + \definedummies +} + +% Used for the aux and toc files, where @ is the escape character. +% +\def\atdummies{% + \definedummyletter\@% + \definedummyletter\ % + \definedummyletter\{% + \definedummyletter\}% + % + % Do the redefinitions. + \definedummies + \otherbackslash +} + +% \definedummyword defines \#1 as \string\#1\space, thus effectively +% preventing its expansion. This is used only for control words, +% not control letters, because the \space would be incorrect for +% control characters, but is needed to separate the control word +% from whatever follows. +% +% These can be used both for control words that take an argument and +% those that do not. If it is followed by {arg} in the input, then +% that will dutifully get written to the index (or wherever). +% +% For control letters, we have \definedummyletter, which omits the +% space. +% +\def\definedummyword #1{\def#1{\string#1\space}}% +\def\definedummyletter#1{\def#1{\string#1}}% +\let\definedummyaccent\definedummyletter + +% Called from \indexdummies and \atdummies, to effectively prevent +% the expansion of commands. +% +\def\definedummies{% + % + \let\commondummyword\definedummyword + \let\commondummyletter\definedummyletter + \let\commondummyaccent\definedummyaccent + \commondummiesnofonts + % + \definedummyletter\_% + \definedummyletter\-% + % + % Non-English letters. + \definedummyword\AA + \definedummyword\AE + \definedummyword\DH + \definedummyword\L + \definedummyword\O + \definedummyword\OE + \definedummyword\TH + \definedummyword\aa + \definedummyword\ae + \definedummyword\dh + \definedummyword\exclamdown + \definedummyword\l + \definedummyword\o + \definedummyword\oe + \definedummyword\ordf + \definedummyword\ordm + \definedummyword\questiondown + \definedummyword\ss + \definedummyword\th + % + % Although these internal commands shouldn't show up, sometimes they do. + \definedummyword\bf + \definedummyword\gtr + \definedummyword\hat + \definedummyword\less + \definedummyword\sf + \definedummyword\sl + \definedummyword\tclose + \definedummyword\tt + % + \definedummyword\LaTeX + \definedummyword\TeX + % + % Assorted special characters. + \definedummyword\atchar + \definedummyword\arrow + \definedummyword\bullet + \definedummyword\comma + \definedummyword\copyright + \definedummyword\registeredsymbol + \definedummyword\dots + \definedummyword\enddots + \definedummyword\entrybreak + \definedummyword\equiv + \definedummyword\error + \definedummyword\euro + \definedummyword\expansion + \definedummyword\geq + \definedummyword\guillemetleft + \definedummyword\guillemetright + \definedummyword\guilsinglleft + \definedummyword\guilsinglright + \definedummyword\lbracechar + \definedummyword\leq + \definedummyword\mathopsup + \definedummyword\minus + \definedummyword\ogonek + \definedummyword\pounds + \definedummyword\point + \definedummyword\print + \definedummyword\quotedblbase + \definedummyword\quotedblleft + \definedummyword\quotedblright + \definedummyword\quoteleft + \definedummyword\quoteright + \definedummyword\quotesinglbase + \definedummyword\rbracechar + \definedummyword\result + \definedummyword\sub + \definedummyword\sup + \definedummyword\textdegree + % + % We want to disable all macros so that they are not expanded by \write. + \macrolist + \let\value\dummyvalue + % + \normalturnoffactive +} + +% \commondummiesnofonts: common to \definedummies and \indexnofonts. +% Define \commondummyletter, \commondummyaccent and \commondummyword before +% using. Used for accents, font commands, and various control letters. +% +\def\commondummiesnofonts{% + % Control letters and accents. + \commondummyletter\!% + \commondummyaccent\"% + \commondummyaccent\'% + \commondummyletter\*% + \commondummyaccent\,% + \commondummyletter\.% + \commondummyletter\/% + \commondummyletter\:% + \commondummyaccent\=% + \commondummyletter\?% + \commondummyaccent\^% + \commondummyaccent\`% + \commondummyaccent\~% + \commondummyword\u + \commondummyword\v + \commondummyword\H + \commondummyword\dotaccent + \commondummyword\ogonek + \commondummyword\ringaccent + \commondummyword\tieaccent + \commondummyword\ubaraccent + \commondummyword\udotaccent + \commondummyword\dotless + % + % Texinfo font commands. + \commondummyword\b + \commondummyword\i + \commondummyword\r + \commondummyword\sansserif + \commondummyword\sc + \commondummyword\slanted + \commondummyword\t + % + % Commands that take arguments. + \commondummyword\abbr + \commondummyword\acronym + \commondummyword\anchor + \commondummyword\cite + \commondummyword\code + \commondummyword\command + \commondummyword\dfn + \commondummyword\dmn + \commondummyword\email + \commondummyword\emph + \commondummyword\env + \commondummyword\file + \commondummyword\image + \commondummyword\indicateurl + \commondummyword\inforef + \commondummyword\kbd + \commondummyword\key + \commondummyword\math + \commondummyword\option + \commondummyword\pxref + \commondummyword\ref + \commondummyword\samp + \commondummyword\strong + \commondummyword\tie + \commondummyword\U + \commondummyword\uref + \commondummyword\url + \commondummyword\var + \commondummyword\verb + \commondummyword\w + \commondummyword\xref +} + +% For testing: output @{ and @} in index sort strings as \{ and \}. +\newif\ifusebracesinindexes + +\let\indexlbrace\relax +\let\indexrbrace\relax + +{\catcode`\@=0 +\catcode`\\=13 + @gdef@backslashdisappear{@def\{}} +} + +{ +\catcode`\<=13 +\catcode`\-=13 +\catcode`\`=13 + \gdef\indexnonalnumdisappear{% + \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax\else + % @set txiindexlquoteignore makes us ignore left quotes in the sort term. + % (Introduced for FSFS 2nd ed.) + \let`=\empty + \fi + % + \expandafter\ifx\csname SETtxiindexbackslashignore\endcsname\relax\else + \backslashdisappear + \fi + % + \expandafter\ifx\csname SETtxiindexhyphenignore\endcsname\relax\else + \def-{}% + \fi + \expandafter\ifx\csname SETtxiindexlessthanignore\endcsname\relax\else + \def<{}% + \fi + \expandafter\ifx\csname SETtxiindexatsignignore\endcsname\relax\else + \def\@{}% + \fi + } + + \gdef\indexnonalnumreappear{% + \useindexbackslash + \let-\normaldash + \let<\normalless + \def\@{@}% + } +} + + +% \indexnofonts is used when outputting the strings to sort the index +% by, and when constructing control sequence names. It eliminates all +% control sequences and just writes whatever the best ASCII sort string +% would be for a given command (usually its argument). +% +\def\indexnofonts{% + % Accent commands should become @asis. + \def\commondummyaccent##1{\let##1\asis}% + % We can just ignore other control letters. + \def\commondummyletter##1{\let##1\empty}% + % All control words become @asis by default; overrides below. + \let\commondummyword\commondummyaccent + \commondummiesnofonts + % + % Don't no-op \tt, since it isn't a user-level command + % and is used in the definitions of the active chars like <, >, |, etc. + % Likewise with the other plain tex font commands. + %\let\tt=\asis + % + \def\ { }% + \def\@{@}% + \def\_{\normalunderscore}% + \def\-{}% @- shouldn't affect sorting + % + \uccode`\1=`\{ \uppercase{\def\{{1}}% + \uccode`\1=`\} \uppercase{\def\}{1}}% + \let\lbracechar\{% + \let\rbracechar\}% + % + % Non-English letters. + \def\AA{AA}% + \def\AE{AE}% + \def\DH{DZZ}% + \def\L{L}% + \def\OE{OE}% + \def\O{O}% + \def\TH{TH}% + \def\aa{aa}% + \def\ae{ae}% + \def\dh{dzz}% + \def\exclamdown{!}% + \def\l{l}% + \def\oe{oe}% + \def\ordf{a}% + \def\ordm{o}% + \def\o{o}% + \def\questiondown{?}% + \def\ss{ss}% + \def\th{th}% + % + \def\LaTeX{LaTeX}% + \def\TeX{TeX}% + % + % Assorted special characters. \defglyph gives the control sequence a + % definition that removes the {} that follows its use. + \defglyph\atchar{@}% + \defglyph\arrow{->}% + \defglyph\bullet{bullet}% + \defglyph\comma{,}% + \defglyph\copyright{copyright}% + \defglyph\dots{...}% + \defglyph\enddots{...}% + \defglyph\equiv{==}% + \defglyph\error{error}% + \defglyph\euro{euro}% + \defglyph\expansion{==>}% + \defglyph\geq{>=}% + \defglyph\guillemetleft{<<}% + \defglyph\guillemetright{>>}% + \defglyph\guilsinglleft{<}% + \defglyph\guilsinglright{>}% + \defglyph\leq{<=}% + \defglyph\lbracechar{\{}% + \defglyph\minus{-}% + \defglyph\point{.}% + \defglyph\pounds{pounds}% + \defglyph\print{-|}% + \defglyph\quotedblbase{"}% + \defglyph\quotedblleft{"}% + \defglyph\quotedblright{"}% + \defglyph\quoteleft{`}% + \defglyph\quoteright{'}% + \defglyph\quotesinglbase{,}% + \defglyph\rbracechar{\}}% + \defglyph\registeredsymbol{R}% + \defglyph\result{=>}% + \defglyph\textdegree{o}% + % + % We need to get rid of all macros, leaving only the arguments (if present). + % Of course this is not nearly correct, but it is the best we can do for now. + % makeinfo does not expand macros in the argument to @deffn, which ends up + % writing an index entry, and texindex isn't prepared for an index sort entry + % that starts with \. + % + % Since macro invocations are followed by braces, we can just redefine them + % to take a single TeX argument. The case of a macro invocation that + % goes to end-of-line is not handled. + % + \macrolist + \let\value\indexnofontsvalue +} +\def\defglyph#1#2{\def#1##1{#2}} % see above + + + + +\let\SETmarginindex=\relax % put index entries in margin (undocumented)? + +% Most index entries go through here, but \dosubind is the general case. +% #1 is the index name, #2 is the entry text. +\def\doind#1#2{\dosubind{#1}{#2}{}} + +% There is also \dosubind {index}{topic}{subtopic} +% which makes an entry in a two-level index such as the operation index. +% TODO: Two-level index? Operation index? + +% Workhorse for all indexes. +% #1 is name of index, #2 is stuff to put there, #3 is subentry -- +% empty if called from \doind, as we usually are (the main exception +% is with most defuns, which call us directly). +% +\def\dosubind#1#2#3{% + \iflinks + {% + \requireopenindexfile{#1}% + % Store the main index entry text (including the third arg). + \toks0 = {#2}% + % If third arg is present, precede it with a space. + \def\thirdarg{#3}% + \ifx\thirdarg\empty \else + \toks0 = \expandafter{\the\toks0 \space #3}% + \fi + % + \edef\writeto{\csname#1indfile\endcsname}% + % + \safewhatsit\dosubindwrite + }% + \fi +} + +% Check if an index file has been opened, and if not, open it. +\def\requireopenindexfile#1{% +\ifnum\csname #1indfile\endcsname=0 + \expandafter\newwrite \csname#1indfile\endcsname + \edef\suffix{#1}% + % A .fls suffix would conflict with the file extension for the output + % of -recorder, so use .f1s instead. + \ifx\suffix\indexisfl\def\suffix{f1}\fi + % Open the file + \immediate\openout\csname#1indfile\endcsname \jobname.\suffix + % Using \immediate above here prevents an object entering into the current + % box, which could confound checks such as those in \safewhatsit for + % preceding skips. + \typeout{Writing index file \jobname.\suffix}% +\fi} +\def\indexisfl{fl} + +% Output \ as {\indexbackslash}, because \ is an escape character in +% the index files. +\let\indexbackslash=\relax +{\catcode`\@=0 \catcode`\\=\active + @gdef@useindexbackslash{@def\{{@indexbackslash}}} +} + +% Definition for writing index entry text. +\def\sortas#1{\ignorespaces}% + +% Definition for writing index entry sort key. Should occur at the at +% the beginning of the index entry, like +% @cindex @sortas{september} \september +% The \ignorespaces takes care of following space, but there's no way +% to remove space before it. +{ +\catcode`\-=13 +\gdef\indexwritesortas{% + \begingroup + \indexnonalnumreappear + \indexwritesortasxxx} +\gdef\indexwritesortasxxx#1{% + \xdef\indexsortkey{#1}\endgroup} +} + + +% Write the entry in \toks0 to the index file. +% +\def\dosubindwrite{% + % Put the index entry in the margin if desired. + \ifx\SETmarginindex\relax\else + \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% + \fi + % + % Remember, we are within a group. + \indexdummies % Must do this here, since \bf, etc expand at this stage + \useindexbackslash % \indexbackslash isn't defined now so it will be output + % as is; and it will print as backslash. + % The braces around \indexbrace are recognized by texindex. + % + % Get the string to sort by, by processing the index entry with all + % font commands turned off. + {\indexnofonts + \def\lbracechar{{\indexlbrace}}% + \def\rbracechar{{\indexrbrace}}% + \let\{=\lbracechar + \let\}=\rbracechar + \indexnonalnumdisappear + \xdef\indexsortkey{}% + \let\sortas=\indexwritesortas + \edef\temp{\the\toks0}% + \setbox\dummybox = \hbox{\temp}% Make sure to execute any \sortas + \ifx\indexsortkey\empty + \xdef\indexsortkey{\temp}% + \ifx\indexsortkey\empty\xdef\indexsortkey{ }\fi + \fi + }% + % + % Set up the complete index entry, with both the sort key and + % the original text, including any font commands. We write + % three arguments to \entry to the .?? file (four in the + % subentry case), texindex reduces to two when writing the .??s + % sorted result. + \edef\temp{% + \write\writeto{% + \string\entry{\indexsortkey}{\noexpand\folio}{\the\toks0}}% + }% + \temp +} +\newbox\dummybox % used above + +% Take care of unwanted page breaks/skips around a whatsit: +% +% If a skip is the last thing on the list now, preserve it +% by backing up by \lastskip, doing the \write, then inserting +% the skip again. Otherwise, the whatsit generated by the +% \write or \pdfdest will make \lastskip zero. The result is that +% sequences like this: +% @end defun +% @tindex whatever +% @defun ... +% will have extra space inserted, because the \medbreak in the +% start of the @defun won't see the skip inserted by the @end of +% the previous defun. +% +% But don't do any of this if we're not in vertical mode. We +% don't want to do a \vskip and prematurely end a paragraph. +% +% Avoid page breaks due to these extra skips, too. +% +% But wait, there is a catch there: +% We'll have to check whether \lastskip is zero skip. \ifdim is not +% sufficient for this purpose, as it ignores stretch and shrink parts +% of the skip. The only way seems to be to check the textual +% representation of the skip. +% +% The following is almost like \def\zeroskipmacro{0.0pt} except that +% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). +% +\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} +% +\newskip\whatsitskip +\newcount\whatsitpenalty +% +% ..., ready, GO: +% +\def\safewhatsit#1{\ifhmode + #1% + \else + % \lastskip and \lastpenalty cannot both be nonzero simultaneously. + \whatsitskip = \lastskip + \edef\lastskipmacro{\the\lastskip}% + \whatsitpenalty = \lastpenalty + % + % If \lastskip is nonzero, that means the last item was a + % skip. And since a skip is discardable, that means this + % -\whatsitskip glue we're inserting is preceded by a + % non-discardable item, therefore it is not a potential + % breakpoint, therefore no \nobreak needed. + \ifx\lastskipmacro\zeroskipmacro + \else + \vskip-\whatsitskip + \fi + % + #1% + % + \ifx\lastskipmacro\zeroskipmacro + % If \lastskip was zero, perhaps the last item was a penalty, and + % perhaps it was >=10000, e.g., a \nobreak. In that case, we want + % to re-insert the same penalty (values >10000 are used for various + % signals); since we just inserted a non-discardable item, any + % following glue (such as a \parskip) would be a breakpoint. For example: + % @deffn deffn-whatever + % @vindex index-whatever + % Description. + % would allow a break between the index-whatever whatsit + % and the "Description." paragraph. + \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi + \else + % On the other hand, if we had a nonzero \lastskip, + % this make-up glue would be preceded by a non-discardable item + % (the whatsit from the \write), so we must insert a \nobreak. + \nobreak\vskip\whatsitskip + \fi +\fi} + +% The index entry written in the file actually looks like +% \entry {sortstring}{page}{topic} +% or +% \entry {sortstring}{page}{topic}{subtopic} +% The texindex program reads in these files and writes files +% containing these kinds of lines: +% \initial {c} +% before the first topic whose initial is c +% \entry {topic}{pagelist} +% for a topic that is used without subtopics +% \primary {topic} +% for the beginning of a topic that is used with subtopics +% \secondary {subtopic}{pagelist} +% for each subtopic. + +% Define the user-accessible indexing commands +% @findex, @vindex, @kindex, @cindex. + +\def\findex {\fnindex} +\def\kindex {\kyindex} +\def\cindex {\cpindex} +\def\vindex {\vrindex} +\def\tindex {\tpindex} +\def\pindex {\pgindex} + +\def\cindexsub {\begingroup\obeylines\cindexsub} +{\obeylines % +\gdef\cindexsub "#1" #2^^M{\endgroup % +\dosubind{cp}{#2}{#1}}} + +% Define the macros used in formatting output of the sorted index material. + +% @printindex causes a particular index (the ??s file) to get printed. +% It does not print any chapter heading (usually an @unnumbered). +% +\parseargdef\printindex{\begingroup + \dobreak \chapheadingskip{10000}% + % + \smallfonts \rm + \tolerance = 9500 + \plainfrenchspacing + \everypar = {}% don't want the \kern\-parindent from indentation suppression. + % + % See if the index file exists and is nonempty. + % Change catcode of @ here so that if the index file contains + % \initial {@} + % as its first line, TeX doesn't complain about mismatched braces + % (because it thinks @} is a control sequence). + \catcode`\@ = 12 + % See comment in \requireopenindexfile. + \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi + \openin 1 \jobname.\indexname s + \ifeof 1 + % \enddoublecolumns gets confused if there is no text in the index, + % and it loses the chapter title and the aux file entries for the + % index. The easiest way to prevent this problem is to make sure + % there is some text. + \putwordIndexNonexistent + \typeout{No file \jobname.\indexname s.}% + \else + \catcode`\\ = 0 + % + % If the index file exists but is empty, then \openin leaves \ifeof + % false. We have to make TeX try to read something from the file, so + % it can discover if there is anything in it. + \read 1 to \thisline + \ifeof 1 + \putwordIndexIsEmpty + \else + % Index files are almost Texinfo source, but we use \ as the escape + % character. It would be better to use @, but that's too big a change + % to make right now. + \def\indexbackslash{\ttbackslash}% + \let\indexlbrace\{ % Likewise, set these sequences for braces + \let\indexrbrace\} % used in the sort key. + \begindoublecolumns + \let\dotheinsertentrybox\dotheinsertentryboxwithpenalty + % + % Read input from the index file line by line. + \loopdo + \ifeof1 \else + \read 1 to \nextline + \fi + % + \indexinputprocessing + \thisline + % + \ifeof1\else + \let\thisline\nextline + \repeat + %% + \enddoublecolumns + \fi + \fi + \closein 1 +\endgroup} +\def\loopdo#1\repeat{\def\body{#1}\loopdoxxx} +\def\loopdoxxx{\let\next=\relax\body\let\next=\loopdoxxx\fi\next} + +\def\indexinputprocessing{% + \ifeof1 + \let\firsttoken\relax + \else + \edef\act{\gdef\noexpand\firsttoken{\getfirsttoken\nextline}}% + \act + \fi +} +\def\getfirsttoken#1{\expandafter\getfirsttokenx#1\endfirsttoken} +\long\def\getfirsttokenx#1#2\endfirsttoken{\noexpand#1} + + +% These macros are used by the sorted index file itself. +% Change them to control the appearance of the index. + +{\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13 +\catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13 +\catcode`\$=3 +\gdef\initialglyphs{% + % Some changes for non-alphabetic characters. Using the glyphs from the + % math fonts looks more consistent than the typewriter font used elsewhere + % for these characters. + \def\indexbackslash{\math{\backslash}}% + \let\\=\indexbackslash + % + % Can't get bold backslash so don't use bold forward slash + \catcode`\/=13 + \def/{{\secrmnotbold \normalslash}}% + \def-{{\normaldash\normaldash}}% en dash `--' + \def^{{\chapbf \normalcaret}}% + \def~{{\chapbf \normaltilde}}% + \def\_{% + \leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }% + \def|{$\vert$}% + \def<{$\less$}% + \def>{$\gtr$}% + \def+{$\normalplus$}% +}} + +\def\initial{% + \bgroup + \initialglyphs + \initialx +} + +\def\initialx#1{% + % Remove any glue we may have, we'll be inserting our own. + \removelastskip + % + % We like breaks before the index initials, so insert a bonus. + % The glue before the bonus allows a little bit of space at the + % bottom of a column to reduce an increase in inter-line spacing. + \nobreak + \vskip 0pt plus 5\baselineskip + \penalty -300 + \vskip 0pt plus -5\baselineskip + % + % Typeset the initial. Making this add up to a whole number of + % baselineskips increases the chance of the dots lining up from column + % to column. It still won't often be perfect, because of the stretch + % we need before each entry, but it's better. + % + % No shrink because it confuses \balancecolumns. + \vskip 1.67\baselineskip plus 1\baselineskip + \leftline{\secfonts \kern-0.05em \secbf #1}% + % \secfonts is inside the argument of \leftline so that the change of + % \baselineskip will not affect any glue inserted before the vbox that + % \leftline creates. + % Do our best not to break after the initial. + \nobreak + \vskip .33\baselineskip plus .1\baselineskip + \egroup % \initialglyphs +} + +\newdimen\entryrightmargin +\entryrightmargin=0pt + +% \entry typesets a paragraph consisting of the text (#1), dot leaders, and +% then page number (#2) flushed to the right margin. It is used for index +% and table of contents entries. The paragraph is indented by \leftskip. +% +\def\entry{% + \begingroup + % + % For pdfTeX and XeTeX. + % The redefinition of \domark stops marks being added in \pdflink to + % preserve coloured links across page boundaries. Otherwise the marks + % would get in the way of \lastbox in \insertentrybox. + \let\domark\relax + % + % Start a new paragraph if necessary, so our assignments below can't + % affect previous text. + \par + % + % No extra space above this paragraph. + \parskip = 0in + % + % When reading the text of entry, convert explicit line breaks + % from @* into spaces. The user might give these in long section + % titles, for instance. + \def\*{\unskip\space\ignorespaces}% + \def\entrybreak{\hfil\break}% An undocumented command + % + % Swallow the left brace of the text (first parameter): + \afterassignment\doentry + \let\temp = +} +\def\entrybreak{\unskip\space\ignorespaces}% +\def\doentry{% + % Save the text of the entry + \global\setbox\boxA=\hbox\bgroup + \bgroup % Instead of the swallowed brace. + \noindent + \aftergroup\finishentry + % And now comes the text of the entry. + % Not absorbing as a macro argument reduces the chance of problems + % with catcodes occurring. +} +{\catcode`\@=11 +\gdef\finishentry#1{% + \egroup % end box A + \dimen@ = \wd\boxA % Length of text of entry + \global\setbox\boxA=\hbox\bgroup\unhbox\boxA + % #1 is the page number. + % + % Get the width of the page numbers, and only use + % leaders if they are present. + \global\setbox\boxB = \hbox{#1}% + \ifdim\wd\boxB = 0pt + \null\nobreak\hfill\ % + \else + % + \null\nobreak\indexdotfill % Have leaders before the page number. + % + \ifpdf + \pdfgettoks#1.% + \hskip\skip\thinshrinkable\the\toksA + \else + \ifx\XeTeXrevision\thisisundefined + \hskip\skip\thinshrinkable #1% + \else + \pdfgettoks#1.% + \hskip\skip\thinshrinkable\the\toksA + \fi + \fi + \fi + \egroup % end \boxA + \ifdim\wd\boxB = 0pt + \global\setbox\entrybox=\vbox{\unhbox\boxA}% + \else + \global\setbox\entrybox=\vbox\bgroup + % We want the text of the entries to be aligned to the left, and the + % page numbers to be aligned to the right. + % + \parindent = 0pt + \advance\leftskip by 0pt plus 1fil + \advance\leftskip by 0pt plus -1fill + \rightskip = 0pt plus -1fil + \advance\rightskip by 0pt plus 1fill + % Cause last line, which could consist of page numbers on their own + % if the list of page numbers is long, to be aligned to the right. + \parfillskip=0pt plus -1fill + % + \advance\rightskip by \entryrightmargin + % Determine how far we can stretch into the margin. + % This allows, e.g., "Appendix H GNU Free Documentation License" to + % fit on one line in @letterpaper format. + \ifdim\entryrightmargin>2.1em + \dimen@i=2.1em + \else + \dimen@i=0em + \fi + \advance \parfillskip by 0pt minus 1\dimen@i + % + \dimen@ii = \hsize + \advance\dimen@ii by -1\leftskip + \advance\dimen@ii by -1\entryrightmargin + \advance\dimen@ii by 1\dimen@i + \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line + \ifdim\dimen@ > 0.8\dimen@ii % due to long index text + % Try to split the text roughly evenly. \dimen@ will be the length of + % the first line. + \dimen@ = 0.7\dimen@ + \dimen@ii = \hsize + \ifnum\dimen@>\dimen@ii + % If the entry is too long (for example, if it needs more than + % two lines), use all the space in the first line. + \dimen@ = \dimen@ii + \fi + \advance\leftskip by 0pt plus 1fill % ragged right + \advance \dimen@ by 1\rightskip + \parshape = 2 0pt \dimen@ 0em \dimen@ii + % Ideally we'd add a finite glue at the end of the first line only, + % instead of using \parshape with explicit line lengths, but TeX + % doesn't seem to provide a way to do such a thing. + % + % Indent all lines but the first one. + \advance\leftskip by 1em + \advance\parindent by -1em + \fi\fi + \indent % start paragraph + \unhbox\boxA + % + % Do not prefer a separate line ending with a hyphen to fewer lines. + \finalhyphendemerits = 0 + % + % Word spacing - no stretch + \spaceskip=\fontdimen2\font minus \fontdimen4\font + % + \linepenalty=1000 % Discourage line breaks. + \hyphenpenalty=5000 % Discourage hyphenation. + % + \par % format the paragraph + \egroup % The \vbox + \fi + \endgroup + \dotheinsertentrybox +}} + +\newskip\thinshrinkable +\skip\thinshrinkable=.15em minus .15em + +\newbox\entrybox +\def\insertentrybox{% + \ourunvbox\entrybox +} + +% default definition +\let\dotheinsertentrybox\insertentrybox + +% Use \lastbox to take apart vbox box by box, and add each sub-box +% to the current vertical list. +\def\ourunvbox#1{% +\bgroup % for local binding of \delayedbox + % Remove the last box from box #1 + \global\setbox#1=\vbox{% + \unvbox#1% + \unskip % remove any glue + \unpenalty + \global\setbox\interbox=\lastbox + }% + \setbox\delayedbox=\box\interbox + \ifdim\ht#1=0pt\else + \ourunvbox#1 % Repeat on what's left of the box + \nobreak + \fi + \box\delayedbox +\egroup +} +\newbox\delayedbox +\newbox\interbox + +% Used from \printindex. \firsttoken should be the first token +% after the \entry. If it's not another \entry, we are at the last +% line of a group of index entries, so insert a penalty to discourage +% widowed index entries. +\def\dotheinsertentryboxwithpenalty{% + \ifx\firsttoken\isentry + \else + \penalty 9000 + \fi + \insertentrybox +} +\def\isentry{\entry}% + +% Like plain.tex's \dotfill, except uses up at least 1 em. +% The filll stretch here overpowers both the fil and fill stretch to push +% the page number to the right. +\def\indexdotfill{\cleaders + \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1filll} + + +\def\primary #1{\line{#1\hfil}} + +\newskip\secondaryindent \secondaryindent=0.5cm +\def\secondary#1#2{{% + \parfillskip=0in + \parskip=0in + \hangindent=1in + \hangafter=1 + \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill + \ifpdf + \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. + \else + \ifx\XeTeXrevision\thisisundefined + #2 + \else + \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. + \fi + \fi + \par +}} + +% Define two-column mode, which we use to typeset indexes. +% Adapted from the TeXbook, page 416, which is to say, +% the manmac.tex format used to print the TeXbook itself. +\catcode`\@=11 % private names + +\newbox\partialpage +\newdimen\doublecolumnhsize + +% Use inside an output routine to save \topmark and \firstmark +\def\savemarks{% + \global\savedtopmark=\expandafter{\topmark }% + \global\savedfirstmark=\expandafter{\firstmark }% +} +\newtoks\savedtopmark +\newtoks\savedfirstmark + +% Set \topmark and \firstmark for next time \output runs. +% Can't be run from withinside \output (because any material +% added while an output routine is active, including +% penalties, is saved for after it finishes). The page so far +% should be empty, otherwise what's on it will be thrown away. +\def\restoremarks{% + \mark{\the\savedtopmark}% + \bgroup\output = {% + \setbox\dummybox=\box\PAGE + }abc\eject\egroup + % "abc" because output routine doesn't fire for a completely empty page. + \mark{\the\savedfirstmark}% +} + +\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns + % If not much space left on page, start a new page. + \ifdim\pagetotal>0.8\vsize\vfill\eject\fi + % + % Grab any single-column material above us. + \output = {% + % + % Here is a possibility not foreseen in manmac: if we accumulate a + % whole lot of material, we might end up calling this \output + % routine twice in a row (see the doublecol-lose test, which is + % essentially a couple of indexes with @setchapternewpage off). In + % that case we just ship out what is in \partialpage with the normal + % output routine. Generally, \partialpage will be empty when this + % runs and this will be a no-op. See the indexspread.tex test case. + \ifvoid\partialpage \else + \onepageout{\pagecontents\partialpage}% + \fi + % + \global\setbox\partialpage = \vbox{% + % Unvbox the main output page. + \unvbox\PAGE + \kern-\topskip \kern\baselineskip + }% + \savemarks + }% + \eject % run that output routine to set \partialpage + \restoremarks + % + % We recover the two marks that the last output routine saved in order + % to propagate the information in marks added around a chapter heading, + % which could be otherwise be lost by the time the final page is output. + % + % + % Use the double-column output routine for subsequent pages. + \output = {\doublecolumnout}% + % + % Change the page size parameters. We could do this once outside this + % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 + % format, but then we repeat the same computation. Repeating a couple + % of assignments once per index is clearly meaningless for the + % execution time, so we may as well do it in one place. + % + % First we halve the line length, less a little for the gutter between + % the columns. We compute the gutter based on the line length, so it + % changes automatically with the paper format. The magic constant + % below is chosen so that the gutter has the same value (well, +-<1pt) + % as it did when we hard-coded it. + % + % We put the result in a separate register, \doublecolumhsize, so we + % can restore it in \pagesofar, after \hsize itself has (potentially) + % been clobbered. + % + \doublecolumnhsize = \hsize + \advance\doublecolumnhsize by -.04154\hsize + \divide\doublecolumnhsize by 2 + \hsize = \doublecolumnhsize + % + % Double the \vsize as well. + \advance\vsize by -\ht\partialpage + \vsize = 2\vsize + % + % For the benefit of balancing columns + \advance\baselineskip by 0pt plus 0.5pt +} + +% The double-column output routine for all double-column pages except +% the last, which is done by \balancecolumns. +% +\def\doublecolumnout{% + % + \splittopskip=\topskip \splitmaxdepth=\maxdepth + % Get the available space for the double columns -- the normal + % (undoubled) page height minus any material left over from the + % previous page. + \dimen@ = \vsize + \divide\dimen@ by 2 + % + % box0 will be the left-hand column, box2 the right. + \setbox0=\vsplit\PAGE to\dimen@ \setbox2=\vsplit\PAGE to\dimen@ + \global\advance\vsize by 2\ht\partialpage + \onepageout\pagesofar + \unvbox\PAGE + \penalty\outputpenalty +} +% +% Re-output the contents of the output page -- any previous material, +% followed by the two boxes we just split, in box0 and box2. +\def\pagesofar{% + \unvbox\partialpage + % + \hsize = \doublecolumnhsize + \wd0=\hsize \wd2=\hsize + \hbox to\txipagewidth{\box0\hfil\box2}% +} + + +% Finished with with double columns. +\def\enddoublecolumns{% + % The following penalty ensures that the page builder is exercised + % _before_ we change the output routine. This is necessary in the + % following situation: + % + % The last section of the index consists only of a single entry. + % Before this section, \pagetotal is less than \pagegoal, so no + % break occurs before the last section starts. However, the last + % section, consisting of \initial and the single \entry, does not + % fit on the page and has to be broken off. Without the following + % penalty the page builder will not be exercised until \eject + % below, and by that time we'll already have changed the output + % routine to the \balancecolumns version, so the next-to-last + % double-column page will be processed with \balancecolumns, which + % is wrong: The two columns will go to the main vertical list, with + % the broken-off section in the recent contributions. As soon as + % the output routine finishes, TeX starts reconsidering the page + % break. The two columns and the broken-off section both fit on the + % page, because the two columns now take up only half of the page + % goal. When TeX sees \eject from below which follows the final + % section, it invokes the new output routine that we've set after + % \balancecolumns below; \onepageout will try to fit the two columns + % and the final section into the vbox of \txipageheight (see + % \pagebody), causing an overfull box. + % + % Note that glue won't work here, because glue does not exercise the + % page builder, unlike penalties (see The TeXbook, pp. 280-281). + \penalty0 + % + \output = {% + % Split the last of the double-column material. + \savemarks + \balancecolumns + }% + \eject % call the \output just set + \ifdim\pagetotal=0pt + % Having called \balancecolumns once, we do not + % want to call it again. Therefore, reset \output to its normal + % definition right away. + \global\output = {\onepageout{\pagecontents\PAGE}}% + % + \endgroup % started in \begindoublecolumns + \restoremarks + % Leave the double-column material on the current page, no automatic + % page break. + \box\balancedcolumns + % + % \pagegoal was set to the doubled \vsize above, since we restarted + % the current page. We're now back to normal single-column + % typesetting, so reset \pagegoal to the normal \vsize. + \global\vsize = \txipageheight % + \pagegoal = \txipageheight % + \else + % We had some left-over material. This might happen when \doublecolumnout + % is called in \balancecolumns. Try again. + \expandafter\enddoublecolumns + \fi +} +\newbox\balancedcolumns +\setbox\balancedcolumns=\vbox{shouldnt see this}% +% +% Only called for the last of the double column material. \doublecolumnout +% does the others. +\def\balancecolumns{% + \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120. + \dimen@ = \ht0 + \advance\dimen@ by \topskip + \advance\dimen@ by-\baselineskip + \ifdim\dimen@<5\baselineskip + % Don't split a short final column in two. + \setbox2=\vbox{}% + \global\setbox\balancedcolumns=\vbox{\pagesofar}% + \else + \divide\dimen@ by 2 % target to split to + \dimen@ii = \dimen@ + \splittopskip = \topskip + % Loop until left column is at least as high as the right column. + {% + \vbadness = 10000 + \loop + \global\setbox3 = \copy0 + \global\setbox1 = \vsplit3 to \dimen@ + \ifdim\ht1<\ht3 + \global\advance\dimen@ by 1pt + \repeat + }% + % Now the left column is in box 1, and the right column in box 3. + % + % Check whether the left column has come out higher than the page itself. + % (Note that we have doubled \vsize for the double columns, so + % the actual height of the page is 0.5\vsize). + \ifdim2\ht1>\vsize + % It appears that we have been called upon to balance too much material. + % Output some of it with \doublecolumnout, leaving the rest on the page. + \setbox\PAGE=\box0 + \doublecolumnout + \else + % Compare the heights of the two columns. + \ifdim4\ht1>5\ht3 + % Column heights are too different, so don't make their bottoms + % flush with each other. + \setbox2=\vbox to \ht1 {\unvbox3\vfill}% + \setbox0=\vbox to \ht1 {\unvbox1\vfill}% + \else + % Make column bottoms flush with each other. + \setbox2=\vbox to\ht1{\unvbox3\unskip}% + \setbox0=\vbox to\ht1{\unvbox1\unskip}% + \fi + \global\setbox\balancedcolumns=\vbox{\pagesofar}% + \fi + \fi + % +} +\catcode`\@ = \other + + +\message{sectioning,} +% Chapters, sections, etc. + +% Let's start with @part. +\outer\parseargdef\part{\partzzz{#1}} +\def\partzzz#1{% + \chapoddpage + \null + \vskip.3\vsize % move it down on the page a bit + \begingroup + \noindent \titlefonts\rm #1\par % the text + \let\lastnode=\empty % no node to associate with + \writetocentry{part}{#1}{}% but put it in the toc + \headingsoff % no headline or footline on the part page + % This outputs a mark at the end of the page that clears \thischapter + % and \thissection, as is done in \startcontents. + \let\pchapsepmacro\relax + \chapmacro{}{Yomitfromtoc}{}% + \chapoddpage + \endgroup +} + +% \unnumberedno is an oxymoron. But we count the unnumbered +% sections so that we can refer to them unambiguously in the pdf +% outlines by their "section number". We avoid collisions with chapter +% numbers by starting them at 10000. (If a document ever has 10000 +% chapters, we're in trouble anyway, I'm sure.) +\newcount\unnumberedno \unnumberedno = 10000 +\newcount\chapno +\newcount\secno \secno=0 +\newcount\subsecno \subsecno=0 +\newcount\subsubsecno \subsubsecno=0 + +% This counter is funny since it counts through charcodes of letters A, B, ... +\newcount\appendixno \appendixno = `\@ +% +% \def\appendixletter{\char\the\appendixno} +% We do the following ugly conditional instead of the above simple +% construct for the sake of pdftex, which needs the actual +% letter in the expansion, not just typeset. +% +\def\appendixletter{% + \ifnum\appendixno=`A A% + \else\ifnum\appendixno=`B B% + \else\ifnum\appendixno=`C C% + \else\ifnum\appendixno=`D D% + \else\ifnum\appendixno=`E E% + \else\ifnum\appendixno=`F F% + \else\ifnum\appendixno=`G G% + \else\ifnum\appendixno=`H H% + \else\ifnum\appendixno=`I I% + \else\ifnum\appendixno=`J J% + \else\ifnum\appendixno=`K K% + \else\ifnum\appendixno=`L L% + \else\ifnum\appendixno=`M M% + \else\ifnum\appendixno=`N N% + \else\ifnum\appendixno=`O O% + \else\ifnum\appendixno=`P P% + \else\ifnum\appendixno=`Q Q% + \else\ifnum\appendixno=`R R% + \else\ifnum\appendixno=`S S% + \else\ifnum\appendixno=`T T% + \else\ifnum\appendixno=`U U% + \else\ifnum\appendixno=`V V% + \else\ifnum\appendixno=`W W% + \else\ifnum\appendixno=`X X% + \else\ifnum\appendixno=`Y Y% + \else\ifnum\appendixno=`Z Z% + % The \the is necessary, despite appearances, because \appendixletter is + % expanded while writing the .toc file. \char\appendixno is not + % expandable, thus it is written literally, thus all appendixes come out + % with the same letter (or @) in the toc without it. + \else\char\the\appendixno + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} + +% Each @chapter defines these (using marks) as the number+name, number +% and name of the chapter. Page headings and footings can use +% these. @section does likewise. +\def\thischapter{} +\def\thischapternum{} +\def\thischaptername{} +\def\thissection{} +\def\thissectionnum{} +\def\thissectionname{} + +\newcount\absseclevel % used to calculate proper heading level +\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count + +% @raisesections: treat @section as chapter, @subsection as section, etc. +\def\raisesections{\global\advance\secbase by -1} +\let\up=\raisesections % original BFox name + +% @lowersections: treat @chapter as section, @section as subsection, etc. +\def\lowersections{\global\advance\secbase by 1} +\let\down=\lowersections % original BFox name + +% we only have subsub. +\chardef\maxseclevel = 3 +% +% A numbered section within an unnumbered changes to unnumbered too. +% To achieve this, remember the "biggest" unnum. sec. we are currently in: +\chardef\unnlevel = \maxseclevel +% +% Trace whether the current chapter is an appendix or not: +% \chapheadtype is "N" or "A", unnumbered chapters are ignored. +\def\chapheadtype{N} + +% Choose a heading macro +% #1 is heading type +% #2 is heading level +% #3 is text for heading +\def\genhead#1#2#3{% + % Compute the abs. sec. level: + \absseclevel=#2 + \advance\absseclevel by \secbase + % Make sure \absseclevel doesn't fall outside the range: + \ifnum \absseclevel < 0 + \absseclevel = 0 + \else + \ifnum \absseclevel > 3 + \absseclevel = 3 + \fi + \fi + % The heading type: + \def\headtype{#1}% + \if \headtype U% + \ifnum \absseclevel < \unnlevel + \chardef\unnlevel = \absseclevel + \fi + \else + % Check for appendix sections: + \ifnum \absseclevel = 0 + \edef\chapheadtype{\headtype}% + \else + \if \headtype A\if \chapheadtype N% + \errmessage{@appendix... within a non-appendix chapter}% + \fi\fi + \fi + % Check for numbered within unnumbered: + \ifnum \absseclevel > \unnlevel + \def\headtype{U}% + \else + \chardef\unnlevel = 3 + \fi + \fi + % Now print the heading: + \if \headtype U% + \ifcase\absseclevel + \unnumberedzzz{#3}% + \or \unnumberedseczzz{#3}% + \or \unnumberedsubseczzz{#3}% + \or \unnumberedsubsubseczzz{#3}% + \fi + \else + \if \headtype A% + \ifcase\absseclevel + \appendixzzz{#3}% + \or \appendixsectionzzz{#3}% + \or \appendixsubseczzz{#3}% + \or \appendixsubsubseczzz{#3}% + \fi + \else + \ifcase\absseclevel + \chapterzzz{#3}% + \or \seczzz{#3}% + \or \numberedsubseczzz{#3}% + \or \numberedsubsubseczzz{#3}% + \fi + \fi + \fi + \suppressfirstparagraphindent +} + +% an interface: +\def\numhead{\genhead N} +\def\apphead{\genhead A} +\def\unnmhead{\genhead U} + +% @chapter, @appendix, @unnumbered. Increment top-level counter, reset +% all lower-level sectioning counters to zero. +% +% Also set \chaplevelprefix, which we prepend to @float sequence numbers +% (e.g., figures), q.v. By default (before any chapter), that is empty. +\let\chaplevelprefix = \empty +% +\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz +\def\chapterzzz#1{% + % section resetting is \global in case the chapter is in a group, such + % as an @include file. + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\chapno by 1 + % + % Used for \float. + \gdef\chaplevelprefix{\the\chapno.}% + \resetallfloatnos + % + % \putwordChapter can contain complex things in translations. + \toks0=\expandafter{\putwordChapter}% + \message{\the\toks0 \space \the\chapno}% + % + % Write the actual heading. + \chapmacro{#1}{Ynumbered}{\the\chapno}% + % + % So @section and the like are numbered underneath this chapter. + \global\let\section = \numberedsec + \global\let\subsection = \numberedsubsec + \global\let\subsubsection = \numberedsubsubsec +} + +\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz +% +\def\appendixzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\appendixno by 1 + \gdef\chaplevelprefix{\appendixletter.}% + \resetallfloatnos + % + % \putwordAppendix can contain complex things in translations. + \toks0=\expandafter{\putwordAppendix}% + \message{\the\toks0 \space \appendixletter}% + % + \chapmacro{#1}{Yappendix}{\appendixletter}% + % + \global\let\section = \appendixsec + \global\let\subsection = \appendixsubsec + \global\let\subsubsection = \appendixsubsubsec +} + +% normally unnmhead0 calls unnumberedzzz: +\outer\parseargdef\unnumbered{\unnmhead0{#1}} +\def\unnumberedzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\unnumberedno by 1 + % + % Since an unnumbered has no number, no prefix for figures. + \global\let\chaplevelprefix = \empty + \resetallfloatnos + % + % This used to be simply \message{#1}, but TeX fully expands the + % argument to \message. Therefore, if #1 contained @-commands, TeX + % expanded them. For example, in `@unnumbered The @cite{Book}', TeX + % expanded @cite (which turns out to cause errors because \cite is meant + % to be executed, not expanded). + % + % Anyway, we don't want the fully-expanded definition of @cite to appear + % as a result of the \message, we just want `@cite' itself. We use + % \the<toks register> to achieve this: TeX expands \the<toks> only once, + % simply yielding the contents of <toks register>. (We also do this for + % the toc entries.) + \toks0 = {#1}% + \message{(\the\toks0)}% + % + \chapmacro{#1}{Ynothing}{\the\unnumberedno}% + % + \global\let\section = \unnumberedsec + \global\let\subsection = \unnumberedsubsec + \global\let\subsubsection = \unnumberedsubsubsec +} + +% @centerchap is like @unnumbered, but the heading is centered. +\outer\parseargdef\centerchap{% + \let\centerparametersmaybe = \centerparameters + \unnmhead0{#1}% + \let\centerparametersmaybe = \relax +} + +% @top is like @unnumbered. +\let\top\unnumbered + +% Sections. +% +\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz +\def\seczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% +} + +% normally calls appendixsectionzzz: +\outer\parseargdef\appendixsection{\apphead1{#1}} +\def\appendixsectionzzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% +} +\let\appendixsec\appendixsection + +% normally calls unnumberedseczzz: +\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} +\def\unnumberedseczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% +} + +% Subsections. +% +% normally calls numberedsubseczzz: +\outer\parseargdef\numberedsubsec{\numhead2{#1}} +\def\numberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% +} + +% normally calls appendixsubseczzz: +\outer\parseargdef\appendixsubsec{\apphead2{#1}} +\def\appendixsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno}% +} + +% normally calls unnumberedsubseczzz: +\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} +\def\unnumberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno}% +} + +% Subsubsections. +% +% normally numberedsubsubseczzz: +\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} +\def\numberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynumbered}% + {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +% normally appendixsubsubseczzz: +\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} +\def\appendixsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +% normally unnumberedsubsubseczzz: +\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} +\def\unnumberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +% These macros control what the section commands do, according +% to what kind of chapter we are in (ordinary, appendix, or unnumbered). +% Define them by default for a numbered chapter. +\let\section = \numberedsec +\let\subsection = \numberedsubsec +\let\subsubsection = \numberedsubsubsec + +% Define @majorheading, @heading and @subheading + +\def\majorheading{% + {\advance\chapheadingskip by 10pt \chapbreak }% + \parsearg\chapheadingzzz +} + +\def\chapheading{\chapbreak \parsearg\chapheadingzzz} +\def\chapheadingzzz#1{% + \vbox{\chapfonts \raggedtitlesettings #1\par}% + \nobreak\bigskip \nobreak + \suppressfirstparagraphindent +} + +% @heading, @subheading, @subsubheading. +\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} + +% These macros generate a chapter, section, etc. heading only +% (including whitespace, linebreaking, etc. around it), +% given all the information in convenient, parsed form. + +% Args are the skip and penalty (usually negative) +\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} + +% Parameter controlling skip before chapter headings (if needed) +\newskip\chapheadingskip + +% Define plain chapter starts, and page on/off switching for it. +\def\chapbreak{\dobreak \chapheadingskip {-4000}} + +% Start a new page +\def\chappager{\par\vfill\supereject} + +% \chapoddpage - start on an odd page for a new chapter +% Because \domark is called before \chapoddpage, the filler page will +% get the headings for the next chapter, which is wrong. But we don't +% care -- we just disable all headings on the filler page. +\def\chapoddpage{% + \chappager + \ifodd\pageno \else + \begingroup + \headingsoff + \null + \chappager + \endgroup + \fi +} + +\parseargdef\setchapternewpage{\csname CHAPPAG#1\endcsname} + +\def\CHAPPAGoff{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chapbreak +\global\let\pagealignmacro=\chappager} + +\def\CHAPPAGon{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chappager +\global\let\pagealignmacro=\chappager +\global\def\HEADINGSon{\HEADINGSsingle}} + +\def\CHAPPAGodd{% +\global\let\contentsalignmacro = \chapoddpage +\global\let\pchapsepmacro=\chapoddpage +\global\let\pagealignmacro=\chapoddpage +\global\def\HEADINGSon{\HEADINGSdouble}} + +\CHAPPAGon + +% \chapmacro - Chapter opening. +% +% #1 is the text, #2 is the section type (Ynumbered, Ynothing, +% Yappendix, Yomitfromtoc), #3 the chapter number. +% Not used for @heading series. +% +% To test against our argument. +\def\Ynothingkeyword{Ynothing} +\def\Yappendixkeyword{Yappendix} +\def\Yomitfromtockeyword{Yomitfromtoc} +% +\def\chapmacro#1#2#3{% + \expandafter\ifx\thisenv\titlepage\else + \checkenv{}% chapters, etc., should not start inside an environment. + \fi + % FIXME: \chapmacro is currently called from inside \titlepage when + % \setcontentsaftertitlepage to print the "Table of Contents" heading, but + % this should probably be done by \sectionheading with an option to print + % in chapter size. + % + % Insert the first mark before the heading break (see notes for \domark). + \let\prevchapterdefs=\lastchapterdefs + \let\prevsectiondefs=\lastsectiondefs + \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% + \gdef\thissection{}}% + % + \def\temptype{#2}% + \ifx\temptype\Ynothingkeyword + \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\thischapter{\thischaptername}}% + \else\ifx\temptype\Yomitfromtockeyword + \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\thischapter{}}% + \else\ifx\temptype\Yappendixkeyword + \toks0={#1}% + \xdef\lastchapterdefs{% + \gdef\noexpand\thischaptername{\the\toks0}% + \gdef\noexpand\thischapternum{\appendixletter}% + % \noexpand\putwordAppendix avoids expanding indigestible + % commands in some of the translations. + \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} + \noexpand\thischapternum: + \noexpand\thischaptername}% + }% + \else + \toks0={#1}% + \xdef\lastchapterdefs{% + \gdef\noexpand\thischaptername{\the\toks0}% + \gdef\noexpand\thischapternum{\the\chapno}% + % \noexpand\putwordChapter avoids expanding indigestible + % commands in some of the translations. + \gdef\noexpand\thischapter{\noexpand\putwordChapter{} + \noexpand\thischapternum: + \noexpand\thischaptername}% + }% + \fi\fi\fi + % + % Output the mark. Pass it through \safewhatsit, to take care of + % the preceding space. + \safewhatsit\domark + % + % Insert the chapter heading break. + \pchapsepmacro + % + % Now the second mark, after the heading break. No break points + % between here and the heading. + \let\prevchapterdefs=\lastchapterdefs + \let\prevsectiondefs=\lastsectiondefs + \domark + % + {% + \chapfonts \rm + \let\footnote=\errfootnoteheading % give better error message + % + % Have to define \lastsection before calling \donoderef, because the + % xref code eventually uses it. On the other hand, it has to be called + % after \pchapsepmacro, or the headline will change too soon. + \gdef\lastsection{#1}% + % + % Only insert the separating space if we have a chapter/appendix + % number, and don't print the unnumbered ``number''. + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unnchap}% + \else\ifx\temptype\Yomitfromtockeyword + \setbox0 = \hbox{}% contents like unnumbered, but no toc entry + \def\toctype{omit}% + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% + \def\toctype{app}% + \else + \setbox0 = \hbox{#3\enspace}% + \def\toctype{numchap}% + \fi\fi\fi + % + % Write the toc entry for this chapter. Must come before the + % \donoderef, because we include the current node name in the toc + % entry, and \donoderef resets it to empty. + \writetocentry{\toctype}{#1}{#3}% + % + % For pdftex, we have to write out the node definition (aka, make + % the pdfdest) after any page break, but before the actual text has + % been typeset. If the destination for the pdf outline is after the + % text, then jumping from the outline may wind up with the text not + % being visible, for instance under high magnification. + \donoderef{#2}% + % + % Typeset the actual heading. + \nobreak % Avoid page breaks at the interline glue. + \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe + \unhbox0 #1\par}% + }% + \nobreak\bigskip % no page break after a chapter title + \nobreak +} + +% @centerchap -- centered and unnumbered. +\let\centerparametersmaybe = \relax +\def\centerparameters{% + \advance\rightskip by 3\rightskip + \leftskip = \rightskip + \parfillskip = 0pt +} + + +% Section titles. These macros combine the section number parts and +% call the generic \sectionheading to do the printing. +% +\newskip\secheadingskip +\def\secheadingbreak{\dobreak \secheadingskip{-1000}} + +% Subsection titles. +\newskip\subsecheadingskip +\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} + +% Subsubsection titles. +\def\subsubsecheadingskip{\subsecheadingskip} +\def\subsubsecheadingbreak{\subsecheadingbreak} + + +% Print any size, any type, section title. +% +% #1 is the text of the title, +% #2 is the section level (sec/subsec/subsubsec), +% #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc), +% #4 is the section number. +% +\def\seckeyword{sec} +% +\def\sectionheading#1#2#3#4{% + {% + \def\sectionlevel{#2}% + \def\temptype{#3}% + % + % It is ok for the @heading series commands to appear inside an + % environment (it's been historically allowed, though the logic is + % dubious), but not the others. + \ifx\temptype\Yomitfromtockeyword\else + \checkenv{}% non-@*heading should not be in an environment. + \fi + \let\footnote=\errfootnoteheading + % + % Switch to the right set of fonts. + \csname #2fonts\endcsname \rm + % + % Insert first mark before the heading break (see notes for \domark). + \let\prevsectiondefs=\lastsectiondefs + \ifx\temptype\Ynothingkeyword + \ifx\sectionlevel\seckeyword + \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% + \gdef\thissection{\thissectionname}}% + \fi + \else\ifx\temptype\Yomitfromtockeyword + % Don't redefine \thissection. + \else\ifx\temptype\Yappendixkeyword + \ifx\sectionlevel\seckeyword + \toks0={#1}% + \xdef\lastsectiondefs{% + \gdef\noexpand\thissectionname{\the\toks0}% + \gdef\noexpand\thissectionnum{#4}% + % \noexpand\putwordSection avoids expanding indigestible + % commands in some of the translations. + \gdef\noexpand\thissection{\noexpand\putwordSection{} + \noexpand\thissectionnum: + \noexpand\thissectionname}% + }% + \fi + \else + \ifx\sectionlevel\seckeyword + \toks0={#1}% + \xdef\lastsectiondefs{% + \gdef\noexpand\thissectionname{\the\toks0}% + \gdef\noexpand\thissectionnum{#4}% + % \noexpand\putwordSection avoids expanding indigestible + % commands in some of the translations. + \gdef\noexpand\thissection{\noexpand\putwordSection{} + \noexpand\thissectionnum: + \noexpand\thissectionname}% + }% + \fi + \fi\fi\fi + % + % Go into vertical mode. Usually we'll already be there, but we + % don't want the following whatsit to end up in a preceding paragraph + % if the document didn't happen to have a blank line. + \par + % + % Output the mark. Pass it through \safewhatsit, to take care of + % the preceding space. + \safewhatsit\domark + % + % Insert space above the heading. + \csname #2headingbreak\endcsname + % + % Now the second mark, after the heading break. No break points + % between here and the heading. + \global\let\prevsectiondefs=\lastsectiondefs + \domark + % + % Only insert the space after the number if we have a section number. + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unn}% + \gdef\lastsection{#1}% + \else\ifx\temptype\Yomitfromtockeyword + % for @headings -- no section number, don't include in toc, + % and don't redefine \lastsection. + \setbox0 = \hbox{}% + \def\toctype{omit}% + \let\sectionlevel=\empty + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{#4\enspace}% + \def\toctype{app}% + \gdef\lastsection{#1}% + \else + \setbox0 = \hbox{#4\enspace}% + \def\toctype{num}% + \gdef\lastsection{#1}% + \fi\fi\fi + % + % Write the toc entry (before \donoderef). See comments in \chapmacro. + \writetocentry{\toctype\sectionlevel}{#1}{#4}% + % + % Write the node reference (= pdf destination for pdftex). + % Again, see comments in \chapmacro. + \donoderef{#3}% + % + % Interline glue will be inserted when the vbox is completed. + % That glue will be a valid breakpoint for the page, since it'll be + % preceded by a whatsit (usually from the \donoderef, or from the + % \writetocentry if there was no node). We don't want to allow that + % break, since then the whatsits could end up on page n while the + % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. + \nobreak + % + % Output the actual section heading. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright + \hangindent=\wd0 % zero if no section number + \unhbox0 #1}% + }% + % Add extra space after the heading -- half of whatever came above it. + % Don't allow stretch, though. + \kern .5 \csname #2headingskip\endcsname + % + % Do not let the kern be a potential breakpoint, as it would be if it + % was followed by glue. + \nobreak + % + % We'll almost certainly start a paragraph next, so don't let that + % glue accumulate. (Not a breakpoint because it's preceded by a + % discardable item.) However, when a paragraph is not started next + % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out + % or the negative glue will cause weirdly wrong output, typically + % obscuring the section heading with something else. + \vskip-\parskip + % + % This is so the last item on the main vertical list is a known + % \penalty > 10000, so \startdefun, etc., can recognize the situation + % and do the needful. + \penalty 10001 +} + + +\message{toc,} +% Table of contents. +\newwrite\tocfile + +% Write an entry to the toc file, opening it if necessary. +% Called from @chapter, etc. +% +% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} +% We append the current node name (if any) and page number as additional +% arguments for the \{chap,sec,...}entry macros which will eventually +% read this. The node name is used in the pdf outlines as the +% destination to jump to. +% +% We open the .toc file for writing here instead of at @setfilename (or +% any other fixed time) so that @contents can be anywhere in the document. +% But if #1 is `omit', then we don't do anything. This is used for the +% table of contents chapter openings themselves. +% +\newif\iftocfileopened +\def\omitkeyword{omit}% +% +\def\writetocentry#1#2#3{% + \edef\writetoctype{#1}% + \ifx\writetoctype\omitkeyword \else + \iftocfileopened\else + \immediate\openout\tocfile = \jobname.toc + \global\tocfileopenedtrue + \fi + % + \iflinks + {\atdummies + \edef\temp{% + \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% + \temp + }% + \fi + \fi + % + % Tell \shipout to create a pdf destination on each page, if we're + % writing pdf. These are used in the table of contents. We can't + % just write one on every page because the title pages are numbered + % 1 and 2 (the page numbers aren't printed), and so are the first + % two pages of the document. Thus, we'd have two destinations named + % `1', and two named `2'. + \ifpdf + \global\pdfmakepagedesttrue + \else + \ifx\XeTeXrevision\thisisundefined + \else + \global\pdfmakepagedesttrue + \fi + \fi +} + + +% These characters do not print properly in the Computer Modern roman +% fonts, so we must take special care. This is more or less redundant +% with the Texinfo input format setup at the end of this file. +% +\def\activecatcodes{% + \catcode`\"=\active + \catcode`\$=\active + \catcode`\<=\active + \catcode`\>=\active + \catcode`\\=\active + \catcode`\^=\active + \catcode`\_=\active + \catcode`\|=\active + \catcode`\~=\active +} + + +% Read the toc file, which is essentially Texinfo input. +\def\readtocfile{% + \setupdatafile + \activecatcodes + \input \tocreadfilename +} + +\newskip\contentsrightmargin \contentsrightmargin=1in +\newcount\savepageno +\newcount\lastnegativepageno \lastnegativepageno = -1 + +% Prepare to read what we've written to \tocfile. +% +\def\startcontents#1{% + % If @setchapternewpage on, and @headings double, the contents should + % start on an odd page, unlike chapters. Thus, we maintain + % \contentsalignmacro in parallel with \pagealignmacro. + % From: Torbjorn Granlund <tege@matematik.su.se> + \contentsalignmacro + \immediate\closeout\tocfile + % + % Don't need to put `Contents' or `Short Contents' in the headline. + % It is abundantly clear what they are. + \chapmacro{#1}{Yomitfromtoc}{}% + % + \savepageno = \pageno + \begingroup % Set up to handle contents files properly. + \raggedbottom % Worry more about breakpoints than the bottom. + \entryrightmargin=\contentsrightmargin % Don't use the full line length. + % + % Roman numerals for page numbers. + \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi +} + +% redefined for the two-volume lispref. We always output on +% \jobname.toc even if this is redefined. +% +\def\tocreadfilename{\jobname.toc} + +% Normal (long) toc. +% +\def\contents{% + \startcontents{\putwordTOC}% + \openin 1 \tocreadfilename\space + \ifeof 1 \else + \readtocfile + \fi + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \ifeof 1 \else + \pdfmakeoutlines + \fi + \closein 1 + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} + +% And just the chapters. +\def\summarycontents{% + \startcontents{\putwordShortTOC}% + % + \let\partentry = \shortpartentry + \let\numchapentry = \shortchapentry + \let\appentry = \shortchapentry + \let\unnchapentry = \shortunnchapentry + % We want a true roman here for the page numbers. + \secfonts + \let\rm=\shortcontrm \let\bf=\shortcontbf + \let\sl=\shortcontsl \let\tt=\shortconttt + \rm + \hyphenpenalty = 10000 + \advance\baselineskip by 1pt % Open it up a little. + \def\numsecentry##1##2##3##4{} + \let\appsecentry = \numsecentry + \let\unnsecentry = \numsecentry + \let\numsubsecentry = \numsecentry + \let\appsubsecentry = \numsecentry + \let\unnsubsecentry = \numsecentry + \let\numsubsubsecentry = \numsecentry + \let\appsubsubsecentry = \numsecentry + \let\unnsubsubsecentry = \numsecentry + \openin 1 \tocreadfilename\space + \ifeof 1 \else + \readtocfile + \fi + \closein 1 + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} +\let\shortcontents = \summarycontents + +% Typeset the label for a chapter or appendix for the short contents. +% The arg is, e.g., `A' for an appendix, or `3' for a chapter. +% +\def\shortchaplabel#1{% + % This space should be enough, since a single number is .5em, and the + % widest letter (M) is 1em, at least in the Computer Modern fonts. + % But use \hss just in case. + % (This space doesn't include the extra space that gets added after + % the label; that gets put in by \shortchapentry above.) + % + % We'd like to right-justify chapter numbers, but that looks strange + % with appendix letters. And right-justifying numbers and + % left-justifying letters looks strange when there is less than 10 + % chapters. Have to read the whole toc once to know how many chapters + % there are before deciding ... + \hbox to 1em{#1\hss}% +} + +% These macros generate individual entries in the table of contents. +% The first argument is the chapter or section name. +% The last argument is the page number. +% The arguments in between are the chapter number, section number, ... + +% Parts, in the main contents. Replace the part number, which doesn't +% exist, with an empty box. Let's hope all the numbers have the same width. +% Also ignore the page number, which is conventionally not printed. +\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} +\def\partentry#1#2#3#4{% + % Add stretch and a bonus for breaking the page before the part heading. + % This reduces the chance of the page being broken immediately after the + % part heading, before a following chapter heading. + \vskip 0pt plus 5\baselineskip + \penalty-300 + \vskip 0pt plus -5\baselineskip + \dochapentry{\numeralbox\labelspace#1}{}% +} +% +% Parts, in the short toc. +\def\shortpartentry#1#2#3#4{% + \penalty-300 + \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip + \shortchapentry{{\bf #1}}{\numeralbox}{}{}% +} + +% Chapters, in the main contents. +\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} + +% Chapters, in the short toc. +% See comments in \dochapentry re vbox and related settings. +\def\shortchapentry#1#2#3#4{% + \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% +} + +% Appendices, in the main contents. +% Need the word Appendix, and a fixed-size box. +% +\def\appendixbox#1{% + % We use M since it's probably the widest letter. + \setbox0 = \hbox{\putwordAppendix{} M}% + \hbox to \wd0{\putwordAppendix{} #1\hss}} +% +\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\hskip.7em#1}{#4}} + +% Unnumbered chapters. +\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} +\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} + +% Sections. +\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} +\let\appsecentry=\numsecentry +\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} + +% Subsections. +\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} +\let\appsubsecentry=\numsubsecentry +\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} + +% And subsubsections. +\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} +\let\appsubsubsecentry=\numsubsubsecentry +\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} + +% This parameter controls the indentation of the various levels. +% Same as \defaultparindent. +\newdimen\tocindent \tocindent = 15pt + +% Now for the actual typesetting. In all these, #1 is the text and #2 is the +% page number. +% +% If the toc has to be broken over pages, we want it to be at chapters +% if at all possible; hence the \penalty. +\def\dochapentry#1#2{% + \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip + \begingroup + % Move the page numbers slightly to the right + \advance\entryrightmargin by -0.05em + \chapentryfonts + \tocentry{#1}{\dopageno\bgroup#2\egroup}% + \endgroup + \nobreak\vskip .25\baselineskip plus.1\baselineskip +} + +\def\dosecentry#1#2{\begingroup + \secentryfonts \leftskip=\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsecentry#1#2{\begingroup + \subsecentryfonts \leftskip=2\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsubsecentry#1#2{\begingroup + \subsubsecentryfonts \leftskip=3\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +% We use the same \entry macro as for the index entries. +\let\tocentry = \entry + +% Space between chapter (or whatever) number and the title. +\def\labelspace{\hskip1em \relax} + +\def\dopageno#1{{\rm #1}} +\def\doshortpageno#1{{\rm #1}} + +\def\chapentryfonts{\secfonts \rm} +\def\secentryfonts{\textfonts} +\def\subsecentryfonts{\textfonts} +\def\subsubsecentryfonts{\textfonts} + + +\message{environments,} +% @foo ... @end foo. + +% @tex ... @end tex escapes into raw TeX temporarily. +% One exception: @ is still an escape character, so that @end tex works. +% But \@ or @@ will get a plain @ character. + +\envdef\tex{% + \setupmarkupstyle{tex}% + \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 + \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 + \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie + \catcode `\%=14 + \catcode `\+=\other + \catcode `\"=\other + \catcode `\|=\other + \catcode `\<=\other + \catcode `\>=\other + \catcode `\`=\other + \catcode `\'=\other + % + % ' is active in math mode (mathcode"8000). So reset it, and all our + % other math active characters (just in case), to plain's definitions. + \mathactive + % + % Inverse of the list at the beginning of the file. + \let\b=\ptexb + \let\bullet=\ptexbullet + \let\c=\ptexc + \let\,=\ptexcomma + \let\.=\ptexdot + \let\dots=\ptexdots + \let\equiv=\ptexequiv + \let\!=\ptexexclam + \let\i=\ptexi + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \let\{=\ptexlbrace + \let\+=\tabalign + \let\}=\ptexrbrace + \let\/=\ptexslash + \let\sp=\ptexsp + \let\*=\ptexstar + %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode + \let\t=\ptext + \expandafter \let\csname top\endcsname=\ptextop % we've made it outer + \let\frenchspacing=\plainfrenchspacing + % + \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% + \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% + \def\@{@}% +} +% There is no need to define \Etex. + +% Define @lisp ... @end lisp. +% @lisp environment forms a group so it can rebind things, +% including the definition of @end lisp (which normally is erroneous). + +% Amount to narrow the margins by for @lisp. +\newskip\lispnarrowing \lispnarrowing=0.4in + +% This is the definition that ^^M gets inside @lisp, @example, and other +% such environments. \null is better than a space, since it doesn't +% have any width. +\def\lisppar{\null\endgraf} + +% This space is always present above and below environments. +\newskip\envskipamount \envskipamount = 0pt + +% Make spacing and below environment symmetrical. We use \parskip here +% to help in doing that, since in @example-like environments \parskip +% is reset to zero; thus the \afterenvbreak inserts no space -- but the +% start of the next paragraph will insert \parskip. +% +\def\aboveenvbreak{{% + % =10000 instead of <10000 because of a special case in \itemzzz and + % \sectionheading, q.v. + \ifnum \lastpenalty=10000 \else + \advance\envskipamount by \parskip + \endgraf + \ifdim\lastskip<\envskipamount + \removelastskip + \ifnum\lastpenalty<10000 + % Penalize breaking before the environment, because preceding text + % often leads into it. + \penalty100 + \fi + \vskip\envskipamount + \fi + \fi +}} + +\def\afterenvbreak{{% + % =10000 instead of <10000 because of a special case in \itemzzz and + % \sectionheading, q.v. + \ifnum \lastpenalty=10000 \else + \advance\envskipamount by \parskip + \endgraf + \ifdim\lastskip<\envskipamount + \removelastskip + % it's not a good place to break if the last penalty was \nobreak + % or better ... + \ifnum\lastpenalty<10000 \penalty-50 \fi + \vskip\envskipamount + \fi + \fi +}} + +% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will +% also clear it, so that its embedded environments do the narrowing again. +\let\nonarrowing=\relax + +% @cartouche ... @end cartouche: draw rectangle w/rounded corners around +% environment contents. +\font\circle=lcircle10 +\newdimen\circthick +\newdimen\cartouter\newdimen\cartinner +\newskip\normbskip\newskip\normpskip\newskip\normlskip +\circthick=\fontdimen8\circle +% +\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth +\def\ctr{{\hskip 6pt\circle\char'010}} +\def\cbl{{\circle\char'012\hskip -6pt}} +\def\cbr{{\hskip 6pt\circle\char'011}} +\def\carttop{\hbox to \cartouter{\hskip\lskip + \ctl\leaders\hrule height\circthick\hfil\ctr + \hskip\rskip}} +\def\cartbot{\hbox to \cartouter{\hskip\lskip + \cbl\leaders\hrule height\circthick\hfil\cbr + \hskip\rskip}} +% +\newskip\lskip\newskip\rskip + +\envdef\cartouche{% + \ifhmode\par\fi % can't be in the midst of a paragraph. + \startsavinginserts + \lskip=\leftskip \rskip=\rightskip + \leftskip=0pt\rightskip=0pt % we want these *outside*. + \cartinner=\hsize \advance\cartinner by-\lskip + \advance\cartinner by-\rskip + \cartouter=\hsize + \advance\cartouter by 18.4pt % allow for 3pt kerns on either + % side, and for 6pt waste from + % each corner char, and rule thickness + \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip + % + % If this cartouche directly follows a sectioning command, we need the + % \parskip glue (backspaced over by default) or the cartouche can + % collide with the section heading. + \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi + % + \setbox\groupbox=\vbox\bgroup + \baselineskip=0pt\parskip=0pt\lineskip=0pt + \carttop + \hbox\bgroup + \hskip\lskip + \vrule\kern3pt + \vbox\bgroup + \kern3pt + \hsize=\cartinner + \baselineskip=\normbskip + \lineskip=\normlskip + \parskip=\normpskip + \vskip -\parskip + \comment % For explanation, see the end of def\group. +} +\def\Ecartouche{% + \ifhmode\par\fi + \kern3pt + \egroup + \kern3pt\vrule + \hskip\rskip + \egroup + \cartbot + \egroup + \addgroupbox + \checkinserts +} + + +% This macro is called at the beginning of all the @example variants, +% inside a group. +\newdimen\nonfillparindent +\def\nonfillstart{% + \aboveenvbreak + \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy + \sepspaces % Make spaces be word-separators rather than space tokens. + \let\par = \lisppar % don't ignore blank lines + \obeylines % each line of input is a line of output + \parskip = 0pt + % Turn off paragraph indentation but redefine \indent to emulate + % the normal \indent. + \nonfillparindent=\parindent + \parindent = 0pt + \let\indent\nonfillindent + % + \emergencystretch = 0pt % don't try to avoid overfull boxes + \ifx\nonarrowing\relax + \advance \leftskip by \lispnarrowing + \exdentamount=\lispnarrowing + \else + \let\nonarrowing = \relax + \fi + \let\exdent=\nofillexdent +} + +\begingroup +\obeyspaces +% We want to swallow spaces (but not other tokens) after the fake +% @indent in our nonfill-environments, where spaces are normally +% active and set to @tie, resulting in them not being ignored after +% @indent. +\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% +\gdef\nonfillindentcheck{% +\ifx\temp % +\expandafter\nonfillindentgobble% +\else% +\leavevmode\nonfillindentbox% +\fi% +}% +\endgroup +\def\nonfillindentgobble#1{\nonfillindent} +\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} + +% If you want all examples etc. small: @set dispenvsize small. +% If you want even small examples the full size: @set dispenvsize nosmall. +% This affects the following displayed environments: +% @example, @display, @format, @lisp +% +\def\smallword{small} +\def\nosmallword{nosmall} +\let\SETdispenvsize\relax +\def\setnormaldispenv{% + \ifx\SETdispenvsize\smallword + % end paragraph for sake of leading, in case document has no blank + % line. This is redundant with what happens in \aboveenvbreak, but + % we need to do it before changing the fonts, and it's inconvenient + % to change the fonts afterward. + \ifnum \lastpenalty=10000 \else \endgraf \fi + \smallexamplefonts \rm + \fi +} +\def\setsmalldispenv{% + \ifx\SETdispenvsize\nosmallword + \else + \ifnum \lastpenalty=10000 \else \endgraf \fi + \smallexamplefonts \rm + \fi +} + +% We often define two environments, @foo and @smallfoo. +% Let's do it in one command. #1 is the env name, #2 the definition. +\def\makedispenvdef#1#2{% + \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% + \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% + \expandafter\let\csname E#1\endcsname \afterenvbreak + \expandafter\let\csname Esmall#1\endcsname \afterenvbreak +} + +% Define two environment synonyms (#1 and #2) for an environment. +\def\maketwodispenvdef#1#2#3{% + \makedispenvdef{#1}{#3}% + \makedispenvdef{#2}{#3}% +} +% +% @lisp: indented, narrowed, typewriter font; +% @example: same as @lisp. +% +% @smallexample and @smalllisp: use smaller fonts. +% Originally contributed by Pavel@xerox. +% +\maketwodispenvdef{lisp}{example}{% + \nonfillstart + \tt\setupmarkupstyle{example}% + \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. + \gobble % eat return +} +% @display/@smalldisplay: same as @lisp except keep current font. +% +\makedispenvdef{display}{% + \nonfillstart + \gobble +} + +% @format/@smallformat: same as @display except don't narrow margins. +% +\makedispenvdef{format}{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} + +% @flushleft: same as @format, but doesn't obey \SETdispenvsize. +\envdef\flushleft{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} +\let\Eflushleft = \afterenvbreak + +% @flushright. +% +\envdef\flushright{% + \let\nonarrowing = t% + \nonfillstart + \advance\leftskip by 0pt plus 1fill\relax + \gobble +} +\let\Eflushright = \afterenvbreak + + +% @raggedright does more-or-less normal line breaking but no right +% justification. From plain.tex. Don't stretch around special +% characters in urls in this environment, since the stretch at the right +% should be enough. +\envdef\raggedright{% + \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax + \def\urefprestretchamount{0pt}% + \def\urefpoststretchamount{0pt}% +} +\let\Eraggedright\par + +\envdef\raggedleft{% + \parindent=0pt \leftskip0pt plus2em + \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt + \hbadness=10000 % Last line will usually be underfull, so turn off + % badness reporting. +} +\let\Eraggedleft\par + +\envdef\raggedcenter{% + \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em + \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt + \hbadness=10000 % Last line will usually be underfull, so turn off + % badness reporting. +} +\let\Eraggedcenter\par + + +% @quotation does normal linebreaking (hence we can't use \nonfillstart) +% and narrows the margins. We keep \parskip nonzero in general, since +% we're doing normal filling. So, when using \aboveenvbreak and +% \afterenvbreak, temporarily make \parskip 0. +% +\makedispenvdef{quotation}{\quotationstart} +% +\def\quotationstart{% + \indentedblockstart % same as \indentedblock, but increase right margin too. + \ifx\nonarrowing\relax + \advance\rightskip by \lispnarrowing + \fi + \parsearg\quotationlabel +} + +% We have retained a nonzero parskip for the environment, since we're +% doing normal filling. +% +\def\Equotation{% + \par + \ifx\quotationauthor\thisisundefined\else + % indent a bit. + \leftline{\kern 2\leftskip \sl ---\quotationauthor}% + \fi + {\parskip=0pt \afterenvbreak}% +} +\def\Esmallquotation{\Equotation} + +% If we're given an argument, typeset it in bold with a colon after. +\def\quotationlabel#1{% + \def\temp{#1}% + \ifx\temp\empty \else + {\bf #1: }% + \fi +} + +% @indentedblock is like @quotation, but indents only on the left and +% has no optional argument. +% +\makedispenvdef{indentedblock}{\indentedblockstart} +% +\def\indentedblockstart{% + {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip + \parindent=0pt + % + % @cartouche defines \nonarrowing to inhibit narrowing at next level down. + \ifx\nonarrowing\relax + \advance\leftskip by \lispnarrowing + \exdentamount = \lispnarrowing + \else + \let\nonarrowing = \relax + \fi +} + +% Keep a nonzero parskip for the environment, since we're doing normal filling. +% +\def\Eindentedblock{% + \par + {\parskip=0pt \afterenvbreak}% +} +\def\Esmallindentedblock{\Eindentedblock} + + +% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>} +% If we want to allow any <char> as delimiter, +% we need the curly braces so that makeinfo sees the @verb command, eg: +% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org +% +% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. +% +% [Knuth] p.344; only we need to do the other characters Texinfo sets +% active too. Otherwise, they get lost as the first character on a +% verbatim line. +\def\dospecials{% + \do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% + \do\<\do\>\do\|\do\@\do+\do\"% + % Don't do the quotes -- if we do, @set txicodequoteundirected and + % @set txicodequotebacktick will not have effect on @verb and + % @verbatim, and ?` and !` ligatures won't get disabled. + %\do\`\do\'% +} +% +% [Knuth] p. 380 +\def\uncatcodespecials{% + \def\do##1{\catcode`##1=\other}\dospecials} +% +% Setup for the @verb command. +% +% Eight spaces for a tab +\begingroup + \catcode`\^^I=\active + \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} +\endgroup +% +\def\setupverb{% + \tt % easiest (and conventionally used) font for verbatim + \def\par{\leavevmode\endgraf}% + \setupmarkupstyle{verb}% + \tabeightspaces + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces +} + +% Setup for the @verbatim environment +% +% Real tab expansion. +\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount +% +% We typeset each line of the verbatim in an \hbox, so we can handle +% tabs. The \global is in case the verbatim line starts with an accent, +% or some other command that starts with a begin-group. Otherwise, the +% entire \verbbox would disappear at the corresponding end-group, before +% it is typeset. Meanwhile, we can't have nested verbatim commands +% (can we?), so the \global won't be overwriting itself. +\newbox\verbbox +\def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} +% +\begingroup + \catcode`\^^I=\active + \gdef\tabexpand{% + \catcode`\^^I=\active + \def^^I{\leavevmode\egroup + \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab + \divide\dimen\verbbox by\tabw + \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw + \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw + \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox + }% + } +\endgroup + +% start the verbatim environment. +\def\setupverbatim{% + \let\nonarrowing = t% + \nonfillstart + \tt % easiest (and conventionally used) font for verbatim + % The \leavevmode here is for blank lines. Otherwise, we would + % never \starttabox and the \egroup would end verbatim mode. + \def\par{\leavevmode\egroup\box\verbbox\endgraf}% + \tabexpand + \setupmarkupstyle{verbatim}% + % Respect line breaks, + % print special symbols as themselves, and + % make each space count. + % Must do in this order: + \obeylines \uncatcodespecials \sepspaces + \everypar{\starttabbox}% +} + +% Do the @verb magic: verbatim text is quoted by unique +% delimiter characters. Before first delimiter expect a +% right brace, after last delimiter expect closing brace: +% +% \def\doverb'{'<char>#1<char>'}'{#1} +% +% [Knuth] p. 382; only eat outer {} +\begingroup + \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other + \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] +\endgroup +% +\def\verb{\begingroup\setupverb\doverb} +% +% +% Do the @verbatim magic: define the macro \doverbatim so that +% the (first) argument ends when '@end verbatim' is reached, ie: +% +% \def\doverbatim#1@end verbatim{#1} +% +% For Texinfo it's a lot easier than for LaTeX, +% because texinfo's \verbatim doesn't stop at '\end{verbatim}': +% we need not redefine '\', '{' and '}'. +% +% Inspired by LaTeX's verbatim command set [latex.ltx] +% +\begingroup + \catcode`\ =\active + \obeylines % + % ignore everything up to the first ^^M, that's the newline at the end + % of the @verbatim input line itself. Otherwise we get an extra blank + % line in the output. + \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% + % We really want {...\end verbatim} in the body of the macro, but + % without the active space; thus we have to use \xdef and \gobble. +\endgroup +% +\envdef\verbatim{% + \setupverbatim\doverbatim +} +\let\Everbatim = \afterenvbreak + + +% @verbatiminclude FILE - insert text of file in verbatim environment. +% +\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} +% +\def\doverbatiminclude#1{% + {% + \makevalueexpandable + \setupverbatim + \indexnofonts % Allow `@@' and other weird things in file names. + \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% + \input #1 + \afterenvbreak + }% +} + +% @copying ... @end copying. +% Save the text away for @insertcopying later. +% +% We save the uninterpreted tokens, rather than creating a box. +% Saving the text in a box would be much easier, but then all the +% typesetting commands (@smallbook, font changes, etc.) have to be done +% beforehand -- and a) we want @copying to be done first in the source +% file; b) letting users define the frontmatter in as flexible order as +% possible is desirable. +% +\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} +\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} +% +\def\insertcopying{% + \begingroup + \parindent = 0pt % paragraph indentation looks wrong on title page + \scanexp\copyingtext + \endgroup +} + + +\message{defuns,} +% @defun etc. + +\newskip\defbodyindent \defbodyindent=.4in +\newskip\defargsindent \defargsindent=50pt +\newskip\deflastargmargin \deflastargmargin=18pt +\newcount\defunpenalty + +% Start the processing of @deffn: +\def\startdefun{% + \ifnum\lastpenalty<10000 + \medbreak + \defunpenalty=10003 % Will keep this @deffn together with the + % following @def command, see below. + \else + % If there are two @def commands in a row, we'll have a \nobreak, + % which is there to keep the function description together with its + % header. But if there's nothing but headers, we need to allow a + % break somewhere. Check specifically for penalty 10002, inserted + % by \printdefunline, instead of 10000, since the sectioning + % commands also insert a nobreak penalty, and we don't want to allow + % a break between a section heading and a defun. + % + % As a further refinement, we avoid "club" headers by signalling + % with penalty of 10003 after the very first @deffn in the + % sequence (see above), and penalty of 10002 after any following + % @def command. + \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi + % + % Similarly, after a section heading, do not allow a break. + % But do insert the glue. + \medskip % preceded by discardable penalty, so not a breakpoint + \fi + % + \parindent=0in + \advance\leftskip by \defbodyindent + \exdentamount=\defbodyindent +} + +\def\dodefunx#1{% + % First, check whether we are in the right environment: + \checkenv#1% + % + % As above, allow line break if we have multiple x headers in a row. + % It's not a great place, though. + \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi + % + % And now, it's time to reuse the body of the original defun: + \expandafter\gobbledefun#1% +} +\def\gobbledefun#1\startdefun{} + +% \printdefunline \deffnheader{text} +% +\def\printdefunline#1#2{% + \begingroup + % call \deffnheader: + #1#2 \endheader + % common ending: + \interlinepenalty = 10000 + \advance\rightskip by 0pt plus 1fil\relax + \endgraf + \nobreak\vskip -\parskip + \penalty\defunpenalty % signal to \startdefun and \dodefunx + % Some of the @defun-type tags do not enable magic parentheses, + % rendering the following check redundant. But we don't optimize. + \checkparencounts + \endgroup +} + +\def\Edefun{\endgraf\medbreak} + +% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; +% the only thing remaining is to define \deffnheader. +% +\def\makedefun#1{% + \expandafter\let\csname E#1\endcsname = \Edefun + \edef\temp{\noexpand\domakedefun + \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% + \temp +} + +% \domakedefun \deffn \deffnx \deffnheader { (defn. of \deffnheader) } +% +% Define \deffn and \deffnx, without parameters. +% \deffnheader has to be defined explicitly. +% +\def\domakedefun#1#2#3{% + \envdef#1{% + \startdefun + \doingtypefnfalse % distinguish typed functions from all else + \parseargusing\activeparens{\printdefunline#3}% + }% + \def#2{\dodefunx#1}% + \def#3% +} + +\newif\ifdoingtypefn % doing typed function? +\newif\ifrettypeownline % typeset return type on its own line? + +% @deftypefnnewline on|off says whether the return type of typed functions +% are printed on their own line. This affects @deftypefn, @deftypefun, +% @deftypeop, and @deftypemethod. +% +\parseargdef\deftypefnnewline{% + \def\temp{#1}% + \ifx\temp\onword + \expandafter\let\csname SETtxideftypefnnl\endcsname + = \empty + \else\ifx\temp\offword + \expandafter\let\csname SETtxideftypefnnl\endcsname + = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @txideftypefnnl value `\temp', + must be on|off}% + \fi\fi +} + +% Untyped functions: + +% @deffn category name args +\makedefun{deffn}{\deffngeneral{}} + +% @deffn category class name args +\makedefun{defop}#1 {\defopon{#1\ \putwordon}} + +% \defopon {category on}class name args +\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deffngeneral {subind}category name args +% +\def\deffngeneral#1#2 #3 #4\endheader{% + % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. + \dosubind{fn}{\code{#3}}{#1}% + \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% +} + +% Typed functions: + +% @deftypefn category type name args +\makedefun{deftypefn}{\deftypefngeneral{}} + +% @deftypeop category class type name args +\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} + +% \deftypeopon {category on}class type name args +\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deftypefngeneral {subind}category type name args +% +\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% + \dosubind{fn}{\code{#4}}{#1}% + \doingtypefntrue + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +% Typed variables: + +% @deftypevr category type var args +\makedefun{deftypevr}{\deftypecvgeneral{}} + +% @deftypecv category class type var args +\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} + +% \deftypecvof {category of}class type var args +\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } + +% \deftypecvgeneral {subind}category type var args +% +\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% + \dosubind{vr}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +% Untyped variables: + +% @defvr category var args +\makedefun{defvr}#1 {\deftypevrheader{#1} {} } + +% @defcv category class var args +\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} + +% \defcvof {category of}class var args +\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } + +% Types: + +% @deftp category name args +\makedefun{deftp}#1 #2 #3\endheader{% + \doind{tp}{\code{#2}}% + \defname{#1}{}{#2}\defunargs{#3\unskip}% +} + +% Remaining @defun-like shortcuts: +\makedefun{defun}{\deffnheader{\putwordDeffunc} } +\makedefun{defmac}{\deffnheader{\putwordDefmac} } +\makedefun{defspec}{\deffnheader{\putwordDefspec} } +\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } +\makedefun{defvar}{\defvrheader{\putwordDefvar} } +\makedefun{defopt}{\defvrheader{\putwordDefopt} } +\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } +\makedefun{defmethod}{\defopon\putwordMethodon} +\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} +\makedefun{defivar}{\defcvof\putwordInstanceVariableof} +\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} + +% \defname, which formats the name of the @def (not the args). +% #1 is the category, such as "Function". +% #2 is the return type, if any. +% #3 is the function name. +% +% We are followed by (but not passed) the arguments, if any. +% +\def\defname#1#2#3{% + \par + % Get the values of \leftskip and \rightskip as they were outside the @def... + \advance\leftskip by -\defbodyindent + % + % Determine if we are typesetting the return type of a typed function + % on a line by itself. + \rettypeownlinefalse + \ifdoingtypefn % doing a typed function specifically? + % then check user option for putting return type on its own line: + \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else + \rettypeownlinetrue + \fi + \fi + % + % How we'll format the category name. Putting it in brackets helps + % distinguish it from the body text that may end up on the next line + % just below it. + \def\temp{#1}% + \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} + % + % Figure out line sizes for the paragraph shape. We'll always have at + % least two. + \tempnum = 2 + % + % The first line needs space for \box0; but if \rightskip is nonzero, + % we need only space for the part of \box0 which exceeds it: + \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip + % + % If doing a return type on its own line, we'll have another line. + \ifrettypeownline + \advance\tempnum by 1 + \def\maybeshapeline{0in \hsize}% + \else + \def\maybeshapeline{}% + \fi + % + % The continuations: + \dimen2=\hsize \advance\dimen2 by -\defargsindent + % + % The final paragraph shape: + \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 + % + % Put the category name at the right margin. + \noindent + \hbox to 0pt{% + \hfil\box0 \kern-\hsize + % \hsize has to be shortened this way: + \kern\leftskip + % Intentionally do not respect \rightskip, since we need the space. + }% + % + % Allow all lines to be underfull without complaint: + \tolerance=10000 \hbadness=10000 + \exdentamount=\defbodyindent + {% + % defun fonts. We use typewriter by default (used to be bold) because: + % . we're printing identifiers, they should be in tt in principle. + % . in languages with many accents, such as Czech or French, it's + % common to leave accents off identifiers. The result looks ok in + % tt, but exceedingly strange in rm. + % . we don't want -- and --- to be treated as ligatures. + % . this still does not fix the ?` and !` ligatures, but so far no + % one has made identifiers using them :). + \df \tt + \def\temp{#2}% text of the return type + \ifx\temp\empty\else + \tclose{\temp}% typeset the return type + \ifrettypeownline + % put return type on its own line; prohibit line break following: + \hfil\vadjust{\nobreak}\break + \else + \space % type on same line, so just followed by a space + \fi + \fi % no return type + #3% output function name + }% + {\rm\enskip}% hskip 0.5 em of \rmfont + % + \boldbrax + % arguments will be output next, if any. +} + +% Print arguments in slanted roman (not ttsl), inconsistently with using +% tt for the name. This is because literal text is sometimes needed in +% the argument list (groff manual), and ttsl and tt are not very +% distinguishable. Prevent hyphenation at `-' chars. +% +\def\defunargs#1{% + % use sl by default (not ttsl), + % tt for the names. + \df \sl \hyphenchar\font=0 + % + % On the other hand, if an argument has two dashes (for instance), we + % want a way to get ttsl. We used to recommend @var for that, so + % leave the code in, but it's strange for @var to lead to typewriter. + % Nowadays we recommend @code, since the difference between a ttsl hyphen + % and a tt hyphen is pretty tiny. @code also disables ?` !`. + \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% + #1% + \sl\hyphenchar\font=45 +} + +% We want ()&[] to print specially on the defun line. +% +\def\activeparens{% + \catcode`\(=\active \catcode`\)=\active + \catcode`\[=\active \catcode`\]=\active + \catcode`\&=\active +} + +% Make control sequences which act like normal parenthesis chars. +\let\lparen = ( \let\rparen = ) + +% Be sure that we always have a definition for `(', etc. For example, +% if the fn name has parens in it, \boldbrax will not be in effect yet, +% so TeX would otherwise complain about undefined control sequence. +{ + \activeparens + \global\let(=\lparen \global\let)=\rparen + \global\let[=\lbrack \global\let]=\rbrack + \global\let& = \& + + \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} + \gdef\magicamp{\let&=\amprm} +} +\let\ampchar\& + +\newcount\parencount + +% If we encounter &foo, then turn on ()-hacking afterwards +\newif\ifampseen +\def\amprm#1 {\ampseentrue{\bf\ }} + +\def\parenfont{% + \ifampseen + % At the first level, print parens in roman, + % otherwise use the default font. + \ifnum \parencount=1 \rm \fi + \else + % The \sf parens (in \boldbrax) actually are a little bolder than + % the contained text. This is especially needed for [ and ] . + \sf + \fi +} +\def\infirstlevel#1{% + \ifampseen + \ifnum\parencount=1 + #1% + \fi + \fi +} +\def\bfafterword#1 {#1 \bf} + +\def\opnr{% + \global\advance\parencount by 1 + {\parenfont(}% + \infirstlevel \bfafterword +} +\def\clnr{% + {\parenfont)}% + \infirstlevel \sl + \global\advance\parencount by -1 +} + +\newcount\brackcount +\def\lbrb{% + \global\advance\brackcount by 1 + {\bf[}% +} +\def\rbrb{% + {\bf]}% + \global\advance\brackcount by -1 +} + +\def\checkparencounts{% + \ifnum\parencount=0 \else \badparencount \fi + \ifnum\brackcount=0 \else \badbrackcount \fi +} +% these should not use \errmessage; the glibc manual, at least, actually +% has such constructs (when documenting function pointers). +\def\badparencount{% + \message{Warning: unbalanced parentheses in @def...}% + \global\parencount=0 +} +\def\badbrackcount{% + \message{Warning: unbalanced square brackets in @def...}% + \global\brackcount=0 +} + + +\message{macros,} +% @macro. + +% To do this right we need a feature of e-TeX, \scantokens, +% which we arrange to emulate with a temporary file in ordinary TeX. +\ifx\eTeXversion\thisisundefined + \newwrite\macscribble + \def\scantokens#1{% + \toks0={#1}% + \immediate\openout\macscribble=\jobname.tmp + \immediate\write\macscribble{\the\toks0}% + \immediate\closeout\macscribble + \input \jobname.tmp + } +\fi + +% alias because \c means cedilla in @tex or @math +\let\texinfoc=\c + +\newcount\savedcatcodeone +\newcount\savedcatcodetwo + +% Used at the time of macro expansion. +% Argument is macro body with arguments substituted +\def\scanmacro#1{% + \newlinechar`\^^M + \def\xeatspaces{\eatspaces}% + % + % Temporarily undo catcode changes of \printindex. Set catcode of @ to + % 0 so that @-commands in macro expansions aren't printed literally when + % formatting an index file, where \ is used as the escape character. + \savedcatcodeone=\catcode`\@ + \savedcatcodetwo=\catcode`\\ + \catcode`\@=0 + \catcode`\\=\active + % + % Process the macro body under the current catcode regime. + \scantokens{#1@texinfoc}% + % + \catcode`\@=\savedcatcodeone + \catcode`\\=\savedcatcodetwo + % + % The \texinfoc is to remove the \newlinechar added by \scantokens, and + % can be noticed by \parsearg. + % We avoid surrounding the call to \scantokens with \bgroup and \egroup + % to allow macros to open or close groups themselves. +} + +% Used for copying and captions +\def\scanexp#1{% + \expandafter\scanmacro\expandafter{#1}% +} + +\newcount\paramno % Count of parameters +\newtoks\macname % Macro name +\newif\ifrecursive % Is it recursive? + +% List of all defined macros in the form +% \commondummyword\macro1\commondummyword\macro2... +% Currently is also contains all @aliases; the list can be split +% if there is a need. +\def\macrolist{} + +% Add the macro to \macrolist +\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} +\def\addtomacrolistxxx#1{% + \toks0 = \expandafter{\macrolist\commondummyword#1}% + \xdef\macrolist{\the\toks0}% +} + +% Utility routines. +% This does \let #1 = #2, with \csnames; that is, +% \let \csname#1\endcsname = \csname#2\endcsname +% (except of course we have to play expansion games). +% +\def\cslet#1#2{% + \expandafter\let + \csname#1\expandafter\endcsname + \csname#2\endcsname +} + +% Trim leading and trailing spaces off a string. +% Concepts from aro-bend problem 15 (see CTAN). +{\catcode`\@=11 +\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} +\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} +\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} +\def\unbrace#1{#1} +\unbrace{\gdef\trim@@@ #1 } #2@{#1} +} + +% Trim a single trailing ^^M off a string. +{\catcode`\^^M=\other \catcode`\Q=3% +\gdef\eatcr #1{\eatcra #1Q^^MQ}% +\gdef\eatcra#1^^MQ{\eatcrb#1Q}% +\gdef\eatcrb#1Q#2Q{#1}% +} + +% Macro bodies are absorbed as an argument in a context where +% all characters are catcode 10, 11 or 12, except \ which is active +% (as in normal texinfo). It is necessary to change the definition of \ +% to recognize macro arguments; this is the job of \mbodybackslash. +% +% Non-ASCII encodings make 8-bit characters active, so un-activate +% them to avoid their expansion. Must do this non-globally, to +% confine the change to the current group. +% +% It's necessary to have hard CRs when the macro is executed. This is +% done by making ^^M (\endlinechar) catcode 12 when reading the macro +% body, and then making it the \newlinechar in \scanmacro. +% +\def\scanctxt{% used as subroutine + \catcode`\"=\other + \catcode`\+=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\^=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\~=\other + \passthroughcharstrue +} + +\def\scanargctxt{% used for copying and captions, not macros. + \scanctxt + \catcode`\@=\other + \catcode`\\=\other + \catcode`\^^M=\other +} + +\def\macrobodyctxt{% used for @macro definitions + \scanctxt + \catcode`\ =\other + \catcode`\@=\other + \catcode`\{=\other + \catcode`\}=\other + \catcode`\^^M=\other + \usembodybackslash +} + +% Used when scanning braced macro arguments. Note, however, that catcode +% changes here are ineffectual if the macro invocation was nested inside +% an argument to another Texinfo command. +\def\macroargctxt{% + \scanctxt + \catcode`\ =\active + \catcode`\^^M=\other + \catcode`\\=\active +} + +\def\macrolineargctxt{% used for whole-line arguments without braces + \scanctxt + \catcode`\{=\other + \catcode`\}=\other +} + +% \mbodybackslash is the definition of \ in @macro bodies. +% It maps \foo\ => \csname macarg.foo\endcsname => #N +% where N is the macro parameter number. +% We define \csname macarg.\endcsname to be \realbackslash, so +% \\ in macro replacement text gets you a backslash. +% +{\catcode`@=0 @catcode`@\=@active + @gdef@usembodybackslash{@let\=@mbodybackslash} + @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} +} +\expandafter\def\csname macarg.\endcsname{\realbackslash} + +\def\margbackslash#1{\char`\#1 } + +\def\macro{\recursivefalse\parsearg\macroxxx} +\def\rmacro{\recursivetrue\parsearg\macroxxx} + +\def\macroxxx#1{% + \getargs{#1}% now \macname is the macname and \argl the arglist + \ifx\argl\empty % no arguments + \paramno=0\relax + \else + \expandafter\parsemargdef \argl;% + \if\paramno>256\relax + \ifx\eTeXversion\thisisundefined + \errhelp = \EMsimple + \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} + \fi + \fi + \fi + \if1\csname ismacro.\the\macname\endcsname + \message{Warning: redefining \the\macname}% + \else + \expandafter\ifx\csname \the\macname\endcsname \relax + \else \errmessage{Macro name \the\macname\space already defined}\fi + \global\cslet{macsave.\the\macname}{\the\macname}% + \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% + \addtomacrolist{\the\macname}% + \fi + \begingroup \macrobodyctxt + \ifrecursive \expandafter\parsermacbody + \else \expandafter\parsemacbody + \fi} + +\parseargdef\unmacro{% + \if1\csname ismacro.#1\endcsname + \global\cslet{#1}{macsave.#1}% + \global\expandafter\let \csname ismacro.#1\endcsname=0% + % Remove the macro name from \macrolist: + \begingroup + \expandafter\let\csname#1\endcsname \relax + \let\commondummyword\unmacrodo + \xdef\macrolist{\macrolist}% + \endgroup + \else + \errmessage{Macro #1 not defined}% + \fi +} + +% Called by \do from \dounmacro on each macro. The idea is to omit any +% macro definitions that have been changed to \relax. +% +\def\unmacrodo#1{% + \ifx #1\relax + % remove this + \else + \noexpand\commondummyword \noexpand#1% + \fi +} + +% \getargs -- Parse the arguments to a @macro line. Set \macname to +% the name of the macro, and \argl to the braced argument list. +\def\getargs#1{\getargsxxx#1{}} +\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} +\def\getmacname#1 #2\relax{\macname={#1}} +\def\getmacargs#1{\def\argl{#1}} +% This made use of the feature that if the last token of a +% <parameter list> is #, then the preceding argument is delimited by +% an opening brace, and that opening brace is not consumed. + +% Parse the optional {params} list to @macro or @rmacro. +% Set \paramno to the number of arguments, +% and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a +% three-param macro.) Define \macarg.BLAH for each BLAH in the params +% list to some hook where the argument is to be expanded. If there are +% less than 10 arguments that hook is to be replaced by ##N where N +% is the position in that list, that is to say the macro arguments are to be +% defined `a la TeX in the macro body. +% +% That gets used by \mbodybackslash (above). +% +% If there are 10 or more arguments, a different technique is used: see +% \parsemmanyargdef. +% +\def\parsemargdef#1;{% + \paramno=0\def\paramlist{}% + \let\hash\relax + % \hash is redefined to `#' later to get it into definitions + \let\xeatspaces\relax + \parsemargdefxxx#1,;,% + \ifnum\paramno<10\relax\else + \paramno0\relax + \parsemmanyargdef@@#1,;,% 10 or more arguments + \fi +} +\def\parsemargdefxxx#1,{% + \if#1;\let\next=\relax + \else \let\next=\parsemargdefxxx + \advance\paramno by 1 + \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname + {\xeatspaces{\hash\the\paramno}}% + \edef\paramlist{\paramlist\hash\the\paramno,}% + \fi\next} + +% \parsemacbody, \parsermacbody +% +% Read recursive and nonrecursive macro bodies. (They're different since +% rec and nonrec macros end differently.) +% +% We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro +% body to be transformed. +% Set \macrobody to the body of the macro, and call \defmacro. +% +{\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{% +\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}% +{\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{% +\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}% + +% Make @ a letter, so that we can make private-to-Texinfo macro names. +\edef\texiatcatcode{\the\catcode`\@} +\catcode `@=11\relax + +%%%%%%%%%%%%%% Code for > 10 arguments only %%%%%%%%%%%%%%%%%% + +% If there are 10 or more arguments, a different technique is used, where the +% hook remains in the body, and when macro is to be expanded the body is +% processed again to replace the arguments. +% +% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the +% argument N value and then \edef the body (nothing else will expand because of +% the catcode regime under which the body was input). +% +% If you compile with TeX (not eTeX), and you have macros with 10 or more +% arguments, no macro can have more than 256 arguments (else error). +% +% In case that there are 10 or more arguments we parse again the arguments +% list to set new definitions for the \macarg.BLAH macros corresponding to +% each BLAH argument. It was anyhow needed to parse already once this list +% in order to count the arguments, and as macros with at most 9 arguments +% are by far more frequent than macro with 10 or more arguments, defining +% twice the \macarg.BLAH macros does not cost too much processing power. +\def\parsemmanyargdef@@#1,{% + \if#1;\let\next=\relax + \else + \let\next=\parsemmanyargdef@@ + \edef\tempb{\eatspaces{#1}}% + \expandafter\def\expandafter\tempa + \expandafter{\csname macarg.\tempb\endcsname}% + % Note that we need some extra \noexpand\noexpand, this is because we + % don't want \the to be expanded in the \parsermacbody as it uses an + % \xdef . + \expandafter\edef\tempa + {\noexpand\noexpand\noexpand\the\toks\the\paramno}% + \advance\paramno by 1\relax + \fi\next} + + +\let\endargs@\relax +\let\nil@\relax +\def\nilm@{\nil@}% +\long\def\nillm@{\nil@}% + +% This macro is expanded during the Texinfo macro expansion, not during its +% definition. It gets all the arguments' values and assigns them to macros +% macarg.ARGNAME +% +% #1 is the macro name +% #2 is the list of argument names +% #3 is the list of argument values +\def\getargvals@#1#2#3{% + \def\macargdeflist@{}% + \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. + \def\paramlist{#2,\nil@}% + \def\macroname{#1}% + \begingroup + \macroargctxt + \def\argvaluelist{#3,\nil@}% + \def\@tempa{#3}% + \ifx\@tempa\empty + \setemptyargvalues@ + \else + \getargvals@@ + \fi +} +\def\getargvals@@{% + \ifx\paramlist\nilm@ + % Some sanity check needed here that \argvaluelist is also empty. + \ifx\argvaluelist\nillm@ + \else + \errhelp = \EMsimple + \errmessage{Too many arguments in macro `\macroname'!}% + \fi + \let\next\macargexpandinbody@ + \else + \ifx\argvaluelist\nillm@ + % No more arguments values passed to macro. Set remaining named-arg + % macros to empty. + \let\next\setemptyargvalues@ + \else + % pop current arg name into \@tempb + \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% + \expandafter\@tempa\expandafter{\paramlist}% + % pop current argument value into \@tempc + \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% + \expandafter\@tempa\expandafter{\argvaluelist}% + % Here \@tempb is the current arg name and \@tempc is the current arg value. + % First place the new argument macro definition into \@tempd + \expandafter\macname\expandafter{\@tempc}% + \expandafter\let\csname macarg.\@tempb\endcsname\relax + \expandafter\def\expandafter\@tempe\expandafter{% + \csname macarg.\@tempb\endcsname}% + \edef\@tempd{\long\def\@tempe{\the\macname}}% + \push@\@tempd\macargdeflist@ + \let\next\getargvals@@ + \fi + \fi + \next +} + +\def\push@#1#2{% + \expandafter\expandafter\expandafter\def + \expandafter\expandafter\expandafter#2% + \expandafter\expandafter\expandafter{% + \expandafter#1#2}% +} + +% Replace arguments by their values in the macro body, and place the result +% in macro \@tempa. +% +\def\macvalstoargs@{% + % To do this we use the property that token registers that are \the'ed + % within an \edef expand only once. So we are going to place all argument + % values into respective token registers. + % + % First we save the token context, and initialize argument numbering. + \begingroup + \paramno0\relax + % Then, for each argument number #N, we place the corresponding argument + % value into a new token list register \toks#N + \expandafter\putargsintokens@\saveparamlist@,;,% + % Then, we expand the body so that argument are replaced by their + % values. The trick for values not to be expanded themselves is that they + % are within tokens and that tokens expand only once in an \edef . + \edef\@tempc{\csname mac.\macroname .body\endcsname}% + % Now we restore the token stack pointer to free the token list registers + % which we have used, but we make sure that expanded body is saved after + % group. + \expandafter + \endgroup + \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% + } + +% Define the named-macro outside of this group and then close this group. +% +\def\macargexpandinbody@{% + \expandafter + \endgroup + \macargdeflist@ + % First the replace in body the macro arguments by their values, the result + % is in \@tempa . + \macvalstoargs@ + % Then we point at the \norecurse or \gobble (for recursive) macro value + % with \@tempb . + \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname + % Depending on whether it is recursive or not, we need some tailing + % \egroup . + \ifx\@tempb\gobble + \let\@tempc\relax + \else + \let\@tempc\egroup + \fi + % And now we do the real job: + \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% + \@tempd +} + +\def\putargsintokens@#1,{% + \if#1;\let\next\relax + \else + \let\next\putargsintokens@ + % First we allocate the new token list register, and give it a temporary + % alias \@tempb . + \toksdef\@tempb\the\paramno + % Then we place the argument value into that token list register. + \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname + \expandafter\@tempb\expandafter{\@tempa}% + \advance\paramno by 1\relax + \fi + \next +} + +% Trailing missing arguments are set to empty. +% +\def\setemptyargvalues@{% + \ifx\paramlist\nilm@ + \let\next\macargexpandinbody@ + \else + \expandafter\setemptyargvaluesparser@\paramlist\endargs@ + \let\next\setemptyargvalues@ + \fi + \next +} + +\def\setemptyargvaluesparser@#1,#2\endargs@{% + \expandafter\def\expandafter\@tempa\expandafter{% + \expandafter\def\csname macarg.#1\endcsname{}}% + \push@\@tempa\macargdeflist@ + \def\paramlist{#2}% +} + +% #1 is the element target macro +% #2 is the list macro +% #3,#4\endargs@ is the list value +\def\pop@#1#2#3,#4\endargs@{% + \def#1{#3}% + \def#2{#4}% +} +\long\def\longpop@#1#2#3,#4\endargs@{% + \long\def#1{#3}% + \long\def#2{#4}% +} + + +%%%%%%%%%%%%%% End of code for > 10 arguments %%%%%%%%%%%%%%%%%% + + +% This defines a Texinfo @macro or @rmacro, called by \parsemacbody. +% \macrobody has the body of the macro in it, with placeholders for +% its parameters, looking like "\xeatspaces{\hash 1}". +% \paramno is the number of parameters +% \paramlist is a TeX parameter text, e.g. "#1,#2,#3," +% There are four cases: macros of zero, one, up to nine, and many arguments. +% \xdef is used so that macro definitions will survive the file +% they're defined in: @include reads the file inside a group. +% +\def\defmacro{% + \let\hash=##% convert placeholders to macro parameter chars + \ifnum\paramno=1 + \def\xeatspaces##1{##1}% + % This removes the pair of braces around the argument. We don't + % use \eatspaces, because this can cause ends of lines to be lost + % when the argument to \eatspaces is read, leading to line-based + % commands like "@itemize" not being read correctly. + \else + \let\xeatspaces\relax % suppress expansion + \fi + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup + \noexpand\spaceisspace + \noexpand\endlineisspace + \noexpand\expandafter % skip any whitespace after the macro name. + \expandafter\noexpand\csname\the\macname @@@\endcsname}% + \expandafter\xdef\csname\the\macname @@@\endcsname{% + \egroup + \noexpand\scanmacro{\macrobody}}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname @@@\endcsname}% + \expandafter\xdef\csname\the\macname @@@\endcsname##1{% + \egroup + \noexpand\scanmacro{\macrobody}% + }% + \else % at most 9 + \ifnum\paramno<10\relax + % @MACNAME sets the context for reading the macro argument + % @MACNAME@@ gets the argument, processes backslashes and appends a + % comma. + % @MACNAME@@@ removes braces surrounding the argument list. + % @MACNAME@@@@ scans the macro body with arguments substituted. + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup + \noexpand\expandafter % This \expandafter skip any spaces after the + \noexpand\macroargctxt % macro before we change the catcode of space. + \noexpand\expandafter + \expandafter\noexpand\csname\the\macname @@\endcsname}% + \expandafter\xdef\csname\the\macname @@\endcsname##1{% + \noexpand\passargtomacro + \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}% + \expandafter\xdef\csname\the\macname @@@\endcsname##1{% + \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname @@@@\endcsname\paramlist{% + \egroup\noexpand\scanmacro{\macrobody}}% + \else % 10 or more: + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\getargvals@{\the\macname}{\argl}% + }% + \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody + \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble + \fi + \fi} + +\catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes + +\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +{\catcode`\@=0 \catcode`\\=13 % We need to manipulate \ so use @ as escape +@catcode`@_=11 % private names +@catcode`@!=11 % used as argument separator + +% \passargtomacro#1#2 - +% Call #1 with a list of tokens #2, with any doubled backslashes in #2 +% compressed to one. +% +% This implementation works by expansion, and not execution (so we cannot use +% \def or similar). This reduces the risk of this failing in contexts where +% complete expansion is done with no execution (for example, in writing out to +% an auxiliary file for an index entry). +% +% State is kept in the input stream: the argument passed to +% @look_ahead, @gobble_and_check_finish and @add_segment is +% +% THE_MACRO ARG_RESULT ! {PENDING_BS} NEXT_TOKEN (... rest of input) +% +% where: +% THE_MACRO - name of the macro we want to call +% ARG_RESULT - argument list we build to pass to that macro +% PENDING_BS - either a backslash or nothing +% NEXT_TOKEN - used to look ahead in the input stream to see what's coming next + +@gdef@passargtomacro#1#2{% + @add_segment #1!{}@relax#2\@_finish\% +} +@gdef@_finish{@_finishx} @global@let@_finishx@relax + +% #1 - THE_MACRO ARG_RESULT +% #2 - PENDING_BS +% #3 - NEXT_TOKEN +% #4 used to look ahead +% +% If the next token is not a backslash, process the rest of the argument; +% otherwise, remove the next token. +@gdef@look_ahead#1!#2#3#4{% + @ifx#4\% + @expandafter@gobble_and_check_finish + @else + @expandafter@add_segment + @fi#1!{#2}#4#4% +} + +% #1 - THE_MACRO ARG_RESULT +% #2 - PENDING_BS +% #3 - NEXT_TOKEN +% #4 should be a backslash, which is gobbled. +% #5 looks ahead +% +% Double backslash found. Add a single backslash, and look ahead. +@gdef@gobble_and_check_finish#1!#2#3#4#5{% + @add_segment#1\!{}#5#5% +} + +@gdef@is_fi{@fi} + +% #1 - THE_MACRO ARG_RESULT +% #2 - PENDING_BS +% #3 - NEXT_TOKEN +% #4 is input stream until next backslash +% +% Input stream is either at the start of the argument, or just after a +% backslash sequence, either a lone backslash, or a doubled backslash. +% NEXT_TOKEN contains the first token in the input stream: if it is \finish, +% finish; otherwise, append to ARG_RESULT the segment of the argument up until +% the next backslash. PENDING_BACKSLASH contains a backslash to represent +% a backslash just before the start of the input stream that has not been +% added to ARG_RESULT. +@gdef@add_segment#1!#2#3#4\{% +@ifx#3@_finish + @call_the_macro#1!% +@else + % append the pending backslash to the result, followed by the next segment + @expandafter@is_fi@look_ahead#1#2#4!{\}@fi + % this @fi is discarded by @look_ahead. + % we can't get rid of it with \expandafter because we don't know how + % long #4 is. +} + +% #1 - THE_MACRO +% #2 - ARG_RESULT +% #3 discards the res of the conditional in @add_segment, and @is_fi ends the +% conditional. +@gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}} + +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% \braceorline MAC is used for a one-argument macro MAC. It checks +% whether the next non-whitespace character is a {. It sets the context +% for reading the argument (slightly different in the two cases). Then, +% to read the argument, in the whole-line case, it then calls the regular +% \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC. +% +\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} +\def\braceorlinexxx{% + \ifx\nchar\bgroup + \macroargctxt + \expandafter\passargtomacro + \else + \macrolineargctxt\expandafter\parsearg + \fi \macnamexxx} + + +% @alias. +% We need some trickery to remove the optional spaces around the equal +% sign. Make them active and then expand them all to nothing. +% +\def\alias{\parseargusing\obeyspaces\aliasxxx} +\def\aliasxxx #1{\aliasyyy#1\relax} +\def\aliasyyy #1=#2\relax{% + {% + \expandafter\let\obeyedspace=\empty + \addtomacrolist{#1}% + \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% + }% + \next +} + + +\message{cross references,} + +\newwrite\auxfile +\newif\ifhavexrefs % True if xref values are known. +\newif\ifwarnedxrefs % True if we warned once that they aren't known. + +% @inforef is relatively simple. +\def\inforef #1{\inforefzzz #1,,,,**} +\def\inforefzzz #1,#2,#3,#4**{% + \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, + node \samp{\ignorespaces#1{}}} + +% @node's only job in TeX is to define \lastnode, which is used in +% cross-references. The @node line might or might not have commas, and +% might or might not have spaces before the first comma, like: +% @node foo , bar , ... +% We don't want such trailing spaces in the node name. +% +\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} +% +% also remove a trailing comma, in case of something like this: +% @node Help-Cross, , , Cross-refs +\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} +\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} + +\let\nwnode=\node +\let\lastnode=\empty + +% Write a cross-reference definition for the current node. #1 is the +% type (Ynumbered, Yappendix, Ynothing). +% +\def\donoderef#1{% + \ifx\lastnode\empty\else + \setref{\lastnode}{#1}% + \global\let\lastnode=\empty + \fi +} + +% @anchor{NAME} -- define xref target at arbitrary point. +% +\newcount\savesfregister +% +\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} +\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} +\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} + +% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an +% anchor), which consists of three parts: +% 1) NAME-title - the current sectioning name taken from \lastsection, +% or the anchor name. +% 2) NAME-snt - section number and type, passed as the SNT arg, or +% empty for anchors. +% 3) NAME-pg - the page number. +% +% This is called from \donoderef, \anchor, and \dofloat. In the case of +% floats, there is an additional part, which is not written here: +% 4) NAME-lof - the text as it should appear in a @listoffloats. +% +\def\setref#1#2{% + \pdfmkdest{#1}% + \iflinks + {% + \requireauxfile + \atdummies % preserve commands, but don't expand them + % match definition in \xrdef, \refx, \xrefX. + \def\value##1{##1}% + \edef\writexrdef##1##2{% + \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef + ##1}{##2}}% these are parameters of \writexrdef + }% + \toks0 = \expandafter{\lastsection}% + \immediate \writexrdef{title}{\the\toks0 }% + \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. + \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout + }% + \fi +} + +% @xrefautosectiontitle on|off says whether @section(ing) names are used +% automatically in xrefs, if the third arg is not explicitly specified. +% This was provided as a "secret" @set xref-automatic-section-title +% variable, now it's official. +% +\parseargdef\xrefautomaticsectiontitle{% + \def\temp{#1}% + \ifx\temp\onword + \expandafter\let\csname SETxref-automatic-section-title\endcsname + = \empty + \else\ifx\temp\offword + \expandafter\let\csname SETxref-automatic-section-title\endcsname + = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', + must be on|off}% + \fi\fi +} + +% +% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is +% the node name, #2 the name of the Info cross-reference, #3 the printed +% node name, #4 the name of the Info file, #5 the name of the printed +% manual. All but the node name can be omitted. +% +\def\pxref{\putwordsee{} \xrefXX} +\def\xref{\putwordSee{} \xrefXX} +\def\ref{\xrefXX} + +\def\xrefXX#1{\def\xrefXXarg{#1}\futurelet\tokenafterxref\xrefXXX} +\def\xrefXXX{\expandafter\xrefX\expandafter[\xrefXXarg,,,,,,,]} +% +\newbox\toprefbox +\newbox\printedrefnamebox +\newbox\infofilenamebox +\newbox\printedmanualbox +% +\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup + \unsepspaces + % + % Get args without leading/trailing spaces. + \def\printedrefname{\ignorespaces #3}% + \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% + % + \def\infofilename{\ignorespaces #4}% + \setbox\infofilenamebox = \hbox{\infofilename\unskip}% + % + \def\printedmanual{\ignorespaces #5}% + \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% + % + % If the printed reference name (arg #3) was not explicitly given in + % the @xref, figure out what we want to use. + \ifdim \wd\printedrefnamebox = 0pt + % No printed node name was explicitly given. + \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax + % Not auto section-title: use node name inside the square brackets. + \def\printedrefname{\ignorespaces #1}% + \else + % Auto section-title: use chapter/section title inside + % the square brackets if we have it. + \ifdim \wd\printedmanualbox > 0pt + % It is in another manual, so we don't have it; use node name. + \def\printedrefname{\ignorespaces #1}% + \else + \ifhavexrefs + % We (should) know the real title if we have the xref values. + \def\printedrefname{\refx{#1-title}{}}% + \else + % Otherwise just copy the Info node name. + \def\printedrefname{\ignorespaces #1}% + \fi% + \fi + \fi + \fi + % + % Make link in pdf output. + \ifpdf + % For pdfTeX and LuaTeX + {\indexnofonts + \makevalueexpandable + \turnoffactive + % This expands tokens, so do it after making catcode changes, so _ + % etc. don't get their TeX definitions. This ignores all spaces in + % #4, including (wrongly) those in the middle of the filename. + \getfilename{#4}% + % + % This (wrongly) does not take account of leading or trailing + % spaces in #1, which should be ignored. + \setpdfdestname{#1}% + % + \ifx\pdfdestname\empty + \def\pdfdestname{Top}% no empty targets + \fi + % + \leavevmode + \startlink attr{/Border [0 0 0]}% + \ifnum\filenamelength>0 + goto file{\the\filename.pdf} name{\pdfdestname}% + \else + goto name{\pdfmkpgn{\pdfdestname}}% + \fi + }% + \setcolor{\linkcolor}% + \else + \ifx\XeTeXrevision\thisisundefined + \else + % For XeTeX + {\indexnofonts + \makevalueexpandable + \turnoffactive + % This expands tokens, so do it after making catcode changes, so _ + % etc. don't get their TeX definitions. This ignores all spaces in + % #4, including (wrongly) those in the middle of the filename. + \getfilename{#4}% + % + % This (wrongly) does not take account of leading or trailing + % spaces in #1, which should be ignored. + \setpdfdestname{#1}% + % + \ifx\pdfdestname\empty + \def\pdfdestname{Top}% no empty targets + \fi + % + \leavevmode + \ifnum\filenamelength>0 + % With default settings, + % XeTeX (xdvipdfmx) replaces link destination names with integers. + % In this case, the replaced destination names of + % remote PDFs are no longer known. In order to avoid a replacement, + % you can use xdvipdfmx's command line option `-C 0x0010'. + % If you use XeTeX 0.99996+ (TeX Live 2016+), + % this command line option is no longer necessary + % because we can use the `dvipdfmx:config' special. + \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A + << /S /GoToR /F (\the\filename.pdf) /D (\pdfdestname) >> >>}% + \else + \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A + << /S /GoTo /D (\pdfdestname) >> >>}% + \fi + }% + \setcolor{\linkcolor}% + \fi + \fi + {% + % Have to otherify everything special to allow the \csname to + % include an _ in the xref name, etc. + \indexnofonts + \turnoffactive + \def\value##1{##1}% + \expandafter\global\expandafter\let\expandafter\Xthisreftitle + \csname XR#1-title\endcsname + }% + % + % Float references are printed completely differently: "Figure 1.2" + % instead of "[somenode], p.3". \iffloat distinguishes them by + % \Xthisreftitle being set to a magic string. + \iffloat\Xthisreftitle + % If the user specified the print name (third arg) to the ref, + % print it instead of our usual "Figure 1.2". + \ifdim\wd\printedrefnamebox = 0pt + \refx{#1-snt}{}% + \else + \printedrefname + \fi + % + % If the user also gave the printed manual name (fifth arg), append + % "in MANUALNAME". + \ifdim \wd\printedmanualbox > 0pt + \space \putwordin{} \cite{\printedmanual}% + \fi + \else + % node/anchor (non-float) references. + % + % If we use \unhbox to print the node names, TeX does not insert + % empty discretionaries after hyphens, which means that it will not + % find a line break at a hyphen in a node names. Since some manuals + % are best written with fairly long node names, containing hyphens, + % this is a loss. Therefore, we give the text of the node name + % again, so it is as if TeX is seeing it for the first time. + % + \ifdim \wd\printedmanualbox > 0pt + % Cross-manual reference with a printed manual name. + % + \crossmanualxref{\cite{\printedmanual\unskip}}% + % + \else\ifdim \wd\infofilenamebox > 0pt + % Cross-manual reference with only an info filename (arg 4), no + % printed manual name (arg 5). This is essentially the same as + % the case above; we output the filename, since we have nothing else. + % + \crossmanualxref{\code{\infofilename\unskip}}% + % + \else + % Reference within this manual. + % + % _ (for example) has to be the character _ for the purposes of the + % control sequence corresponding to the node, but it has to expand + % into the usual \leavevmode...\vrule stuff for purposes of + % printing. So we \turnoffactive for the \refx-snt, back on for the + % printing, back off for the \refx-pg. + {\turnoffactive + % Only output a following space if the -snt ref is nonempty; for + % @unnumbered and @anchor, it won't be. + \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% + \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi + }% + % output the `[mynode]' via the macro below so it can be overridden. + \xrefprintnodename\printedrefname + % + % But we always want a comma and a space: + ,\space + % + % output the `page 3'. + \turnoffactive \putwordpage\tie\refx{#1-pg}{}% + % Add a , if xref followed by a space + \if\space\noexpand\tokenafterxref ,% + \else\ifx\ \tokenafterxref ,% @TAB + \else\ifx\*\tokenafterxref ,% @* + \else\ifx\ \tokenafterxref ,% @SPACE + \else\ifx\ + \tokenafterxref ,% @NL + \else\ifx\tie\tokenafterxref ,% @tie + \fi\fi\fi\fi\fi\fi + \fi\fi + \fi + \endlink +\endgroup} + +% Output a cross-manual xref to #1. Used just above (twice). +% +% Only include the text "Section ``foo'' in" if the foo is neither +% missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply +% "see The Foo Manual", the idea being to refer to the whole manual. +% +% But, this being TeX, we can't easily compare our node name against the +% string "Top" while ignoring the possible spaces before and after in +% the input. By adding the arbitrary 7sp below, we make it much less +% likely that a real node name would have the same width as "Top" (e.g., +% in a monospaced font). Hopefully it will never happen in practice. +% +% For the same basic reason, we retypeset the "Top" at every +% reference, since the current font is indeterminate. +% +\def\crossmanualxref#1{% + \setbox\toprefbox = \hbox{Top\kern7sp}% + \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% + \ifdim \wd2 > 7sp % nonempty? + \ifdim \wd2 = \wd\toprefbox \else % same as Top? + \putwordSection{} ``\printedrefname'' \putwordin{}\space + \fi + \fi + #1% +} + +% This macro is called from \xrefX for the `[nodename]' part of xref +% output. It's a separate macro only so it can be changed more easily, +% since square brackets don't work well in some documents. Particularly +% one that Bob is working on :). +% +\def\xrefprintnodename#1{[#1]} + +% Things referred to by \setref. +% +\def\Ynothing{} +\def\Yomitfromtoc{} +\def\Ynumbered{% + \ifnum\secno=0 + \putwordChapter@tie \the\chapno + \else \ifnum\subsecno=0 + \putwordSection@tie \the\chapno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno + \else + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} +\def\Yappendix{% + \ifnum\secno=0 + \putwordAppendix@tie @char\the\appendixno{}% + \else \ifnum\subsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno + \else + \putwordSection@tie + @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} + +% \refx{NAME}{SUFFIX} - reference a cross-reference string named NAME. SUFFIX +% is output afterwards if non-empty. +\def\refx#1#2{% + \requireauxfile + {% + \indexnofonts + \otherbackslash + \def\value##1{##1}% + \expandafter\global\expandafter\let\expandafter\thisrefX + \csname XR#1\endcsname + }% + \ifx\thisrefX\relax + % If not defined, say something at least. + \angleleft un\-de\-fined\angleright + \iflinks + \ifhavexrefs + {\toks0 = {#1}% avoid expansion of possibly-complex value + \message{\linenumber Undefined cross reference `\the\toks0'.}}% + \else + \ifwarnedxrefs\else + \global\warnedxrefstrue + \message{Cross reference values unknown; you must run TeX again.}% + \fi + \fi + \fi + \else + % It's defined, so just use it. + \thisrefX + \fi + #2% Output the suffix in any case. +} + +% This is the macro invoked by entries in the aux file. Define a control +% sequence for a cross-reference target (we prepend XR to the control sequence +% name to avoid collisions). The value is the page number. If this is a float +% type, we have more work to do. +% +\def\xrdef#1#2{% + {% Expand the node or anchor name to remove control sequences. + % \turnoffactive stops 8-bit characters being changed to commands + % like @'e. \refx does the same to retrieve the value in the definition. + \indexnofonts + \turnoffactive + \def\value##1{##1}% + \xdef\safexrefname{#1}% + }% + % + \bgroup + \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% + \egroup + % We put the \gdef inside a group to avoid the definitions building up on + % TeX's save stack, which can cause it to run out of space for aux files with + % thousands of lines. \gdef doesn't use the save stack, but \csname does + % when it defines an unknown control sequence as \relax. + % + % Was that xref control sequence that we just defined for a float? + \expandafter\iffloat\csname XR\safexrefname\endcsname + % it was a float, and we have the (safe) float type in \iffloattype. + \expandafter\let\expandafter\floatlist + \csname floatlist\iffloattype\endcsname + % + % Is this the first time we've seen this float type? + \expandafter\ifx\floatlist\relax + \toks0 = {\do}% yes, so just \do + \else + % had it before, so preserve previous elements in list. + \toks0 = \expandafter{\floatlist\do}% + \fi + % + % Remember this xref in the control sequence \floatlistFLOATTYPE, + % for later use in \listoffloats. + \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 + {\safexrefname}}% + \fi +} + +% If working on a large document in chapters, it is convenient to +% be able to disable indexing, cross-referencing, and contents, for test runs. +% This is done with @novalidate at the beginning of the file. +% +\newif\iflinks \linkstrue % by default we want the aux files. +\let\novalidate = \linksfalse + +% Used when writing to the aux file, or when using data from it. +\def\requireauxfile{% + \iflinks + \tryauxfile + % Open the new aux file. TeX will close it automatically at exit. + \immediate\openout\auxfile=\jobname.aux + \fi + \global\let\requireauxfile=\relax % Only do this once. +} + +% Read the last existing aux file, if any. No error if none exists. +% +\def\tryauxfile{% + \openin 1 \jobname.aux + \ifeof 1 \else + \readdatafile{aux}% + \global\havexrefstrue + \fi + \closein 1 +} + +\def\setupdatafile{% + \catcode`\^^@=\other + \catcode`\^^A=\other + \catcode`\^^B=\other + \catcode`\^^C=\other + \catcode`\^^D=\other + \catcode`\^^E=\other + \catcode`\^^F=\other + \catcode`\^^G=\other + \catcode`\^^H=\other + \catcode`\^^K=\other + \catcode`\^^L=\other + \catcode`\^^N=\other + \catcode`\^^P=\other + \catcode`\^^Q=\other + \catcode`\^^R=\other + \catcode`\^^S=\other + \catcode`\^^T=\other + \catcode`\^^U=\other + \catcode`\^^V=\other + \catcode`\^^W=\other + \catcode`\^^X=\other + \catcode`\^^Z=\other + \catcode`\^^[=\other + \catcode`\^^\=\other + \catcode`\^^]=\other + \catcode`\^^^=\other + \catcode`\^^_=\other + % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. + % in xref tags, i.e., node names. But since ^^e4 notation isn't + % supported in the main text, it doesn't seem desirable. Furthermore, + % that is not enough: for node names that actually contain a ^ + % character, we would end up writing a line like this: 'xrdef {'hat + % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first + % argument, and \hat is not an expandable control sequence. It could + % all be worked out, but why? Either we support ^^ or we don't. + % + % The other change necessary for this was to define \auxhat: + % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter + % and then to call \auxhat in \setq. + % + \catcode`\^=\other + % + % Special characters. Should be turned off anyway, but... + \catcode`\~=\other + \catcode`\[=\other + \catcode`\]=\other + \catcode`\"=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\$=\other + \catcode`\#=\other + \catcode`\&=\other + \catcode`\%=\other + \catcode`+=\other % avoid \+ for paranoia even though we've turned it off + % + % This is to support \ in node names and titles, since the \ + % characters end up in a \csname. It's easier than + % leaving it active and making its active definition an actual \ + % character. What I don't understand is why it works in the *value* + % of the xrdef. Seems like it should be a catcode12 \, and that + % should not typeset properly. But it works, so I'm moving on for + % now. --karl, 15jan04. + \catcode`\\=\other + % + % @ is our escape character in .aux files, and we need braces. + \catcode`\{=1 + \catcode`\}=2 + \catcode`\@=0 +} + +\def\readdatafile#1{% +\begingroup + \setupdatafile + \input\jobname.#1 +\endgroup} + + +\message{insertions,} +% including footnotes. + +\newcount \footnoteno + +% The trailing space in the following definition for supereject is +% vital for proper filling; pages come out unaligned when you do a +% pagealignmacro call if that space before the closing brace is +% removed. (Generally, numeric constants should always be followed by a +% space to prevent strange expansion errors.) +\def\supereject{\par\penalty -20000\footnoteno =0 } + +% @footnotestyle is meaningful for Info output only. +\let\footnotestyle=\comment + +{\catcode `\@=11 +% +% Auto-number footnotes. Otherwise like plain. +\gdef\footnote{% + \global\advance\footnoteno by \@ne + \edef\thisfootno{$^{\the\footnoteno}$}% + % + % In case the footnote comes at the end of a sentence, preserve the + % extra spacing after we do the footnote number. + \let\@sf\empty + \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi + % + % Remove inadvertent blank space before typesetting the footnote number. + \unskip + \thisfootno\@sf + \dofootnote +}% + +% Don't bother with the trickery in plain.tex to not require the +% footnote text as a parameter. Our footnotes don't need to be so general. +% +% Oh yes, they do; otherwise, @ifset (and anything else that uses +% \parseargline) fails inside footnotes because the tokens are fixed when +% the footnote is read. --karl, 16nov96. +% +\gdef\dofootnote{% + \insert\footins\bgroup + % + % Nested footnotes are not supported in TeX, that would take a lot + % more work. (\startsavinginserts does not suffice.) + \let\footnote=\errfootnotenest + % + % We want to typeset this text as a normal paragraph, even if the + % footnote reference occurs in (for example) a display environment. + % So reset some parameters. + \hsize=\txipagewidth + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox % top baseline for broken footnotes + \splitmaxdepth\dp\strutbox + \floatingpenalty\@MM + \leftskip\z@skip + \rightskip\z@skip + \spaceskip\z@skip + \xspaceskip\z@skip + \parindent\defaultparindent + % + \smallfonts \rm + % + % Because we use hanging indentation in footnotes, a @noindent appears + % to exdent this text, so make it be a no-op. makeinfo does not use + % hanging indentation so @noindent can still be needed within footnote + % text after an @example or the like (not that this is good style). + \let\noindent = \relax + % + % Hang the footnote text off the number. Use \everypar in case the + % footnote extends for more than one paragraph. + \everypar = {\hang}% + \textindent{\thisfootno}% + % + % Don't crash into the line above the footnote text. Since this + % expands into a box, it must come within the paragraph, lest it + % provide a place where TeX can split the footnote. + \footstrut + % + % Invoke rest of plain TeX footnote routine. + \futurelet\next\fo@t +} +}%end \catcode `\@=11 + +\def\errfootnotenest{% + \errhelp=\EMsimple + \errmessage{Nested footnotes not supported in texinfo.tex, + even though they work in makeinfo; sorry} +} + +\def\errfootnoteheading{% + \errhelp=\EMsimple + \errmessage{Footnotes in chapters, sections, etc., are not supported} +} + +% In case a @footnote appears in a vbox, save the footnote text and create +% the real \insert just after the vbox finished. Otherwise, the insertion +% would be lost. +% Similarly, if a @footnote appears inside an alignment, save the footnote +% text to a box and make the \insert when a row of the table is finished. +% And the same can be done for other insert classes. --kasal, 16nov03. +% +% Replace the \insert primitive by a cheating macro. +% Deeper inside, just make sure that the saved insertions are not spilled +% out prematurely. +% +\def\startsavinginserts{% + \ifx \insert\ptexinsert + \let\insert\saveinsert + \else + \let\checkinserts\relax + \fi +} + +% This \insert replacement works for both \insert\footins{foo} and +% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. +% +\def\saveinsert#1{% + \edef\next{\noexpand\savetobox \makeSAVEname#1}% + \afterassignment\next + % swallow the left brace + \let\temp = +} +\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} +\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} + +\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} + +\def\placesaveins#1{% + \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname + {\box#1}% +} + +% eat @SAVE -- beware, all of them have catcode \other: +{ + \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) + \gdef\gobblesave @SAVE{} +} + +% initialization: +\def\newsaveins #1{% + \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% + \next +} +\def\newsaveinsX #1{% + \csname newbox\endcsname #1% + \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts + \checksaveins #1}% +} + +% initialize: +\let\checkinserts\empty +\newsaveins\footins +\newsaveins\margin + + +% @image. We use the macros from epsf.tex to support this. +% If epsf.tex is not installed and @image is used, we complain. +% +% Check for and read epsf.tex up front. If we read it only at @image +% time, we might be inside a group, and then its definitions would get +% undone and the next image would fail. +\openin 1 = epsf.tex +\ifeof 1 \else + % Do not bother showing banner with epsf.tex v2.7k (available in + % doc/epsf.tex and on ctan). + \def\epsfannounce{\toks0 = }% + \input epsf.tex +\fi +\closein 1 +% +% We will only complain once about lack of epsf.tex. +\newif\ifwarnednoepsf +\newhelp\noepsfhelp{epsf.tex must be installed for images to + work. It is also included in the Texinfo distribution, or you can get + it from https://ctan.org/texarchive/macros/texinfo/texinfo/doc/epsf.tex.} +% +\def\image#1{% + \ifx\epsfbox\thisisundefined + \ifwarnednoepsf \else + \errhelp = \noepsfhelp + \errmessage{epsf.tex not found, images will be ignored}% + \global\warnednoepsftrue + \fi + \else + \imagexxx #1,,,,,\finish + \fi +} +% +% Arguments to @image: +% #1 is (mandatory) image filename; we tack on .eps extension. +% #2 is (optional) width, #3 is (optional) height. +% #4 is (ignored optional) html alt text. +% #5 is (ignored optional) extension. +% #6 is just the usual extra ignored arg for parsing stuff. +\newif\ifimagevmode +\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup + \catcode`\^^M = 5 % in case we're inside an example + \normalturnoffactive % allow _ et al. in names + \def\xprocessmacroarg{\eatspaces}% in case we are being used via a macro + % If the image is by itself, center it. + \ifvmode + \imagevmodetrue + \else \ifx\centersub\centerV + % for @center @image, we need a vbox so we can have our vertical space + \imagevmodetrue + \vbox\bgroup % vbox has better behavior than vtop herev + \fi\fi + % + \ifimagevmode + \nobreak\medskip + % Usually we'll have text after the image which will insert + % \parskip glue, so insert it here too to equalize the space + % above and below. + \nobreak\vskip\parskip + \nobreak + \fi + % + % Leave vertical mode so that indentation from an enclosing + % environment such as @quotation is respected. + % However, if we're at the top level, we don't want the + % normal paragraph indentation. + % On the other hand, if we are in the case of @center @image, we don't + % want to start a paragraph, which will create a hsize-width box and + % eradicate the centering. + \ifx\centersub\centerV\else \noindent \fi + % + % Output the image. + \ifpdf + % For pdfTeX and LuaTeX <= 0.80 + \dopdfimage{#1}{#2}{#3}% + \else + \ifx\XeTeXrevision\thisisundefined + % For epsf.tex + % \epsfbox itself resets \epsf?size at each figure. + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi + \setbox0 = \hbox{\ignorespaces #3}% + \ifdim\wd0 > 0pt \epsfysize=#3\relax \fi + \epsfbox{#1.eps}% + \else + % For XeTeX + \doxeteximage{#1}{#2}{#3}% + \fi + \fi + % + \ifimagevmode + \medskip % space after a standalone image + \fi + \ifx\centersub\centerV \egroup \fi +\endgroup} + + +% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, +% etc. We don't actually implement floating yet, we always include the +% float "here". But it seemed the best name for the future. +% +\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} + +% There may be a space before second and/or third parameter; delete it. +\def\eatcommaspace#1, {#1,} + +% #1 is the optional FLOATTYPE, the text label for this float, typically +% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, +% this float will not be numbered and cannot be referred to. +% +% #2 is the optional xref label. Also must be present for the float to +% be referable. +% +% #3 is the optional positioning argument; for now, it is ignored. It +% will somehow specify the positions allowed to float to (here, top, bottom). +% +% We keep a separate counter for each FLOATTYPE, which we reset at each +% chapter-level command. +\let\resetallfloatnos=\empty +% +\def\dofloat#1,#2,#3,#4\finish{% + \let\thiscaption=\empty + \let\thisshortcaption=\empty + % + % don't lose footnotes inside @float. + % + % BEWARE: when the floats start float, we have to issue warning whenever an + % insert appears inside a float which could possibly float. --kasal, 26may04 + % + \startsavinginserts + % + % We can't be used inside a paragraph. + \par + % + \vtop\bgroup + \def\floattype{#1}% + \def\floatlabel{#2}% + \def\floatloc{#3}% we do nothing with this yet. + % + \ifx\floattype\empty + \let\safefloattype=\empty + \else + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + \fi + % + % If label is given but no type, we handle that as the empty type. + \ifx\floatlabel\empty \else + % We want each FLOATTYPE to be numbered separately (Figure 1, + % Table 1, Figure 2, ...). (And if no label, no number.) + % + \expandafter\getfloatno\csname\safefloattype floatno\endcsname + \global\advance\floatno by 1 + % + {% + % This magic value for \lastsection is output by \setref as the + % XREFLABEL-title value. \xrefX uses it to distinguish float + % labels (which have a completely different output format) from + % node and anchor labels. And \xrdef uses it to construct the + % lists of floats. + % + \edef\lastsection{\floatmagic=\safefloattype}% + \setref{\floatlabel}{Yfloat}% + }% + \fi + % + % start with \parskip glue, I guess. + \vskip\parskip + % + % Don't suppress indentation if a float happens to start a section. + \restorefirstparagraphindent +} + +% we have these possibilities: +% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap +% @float Foo,lbl & no caption: Foo 1.1 +% @float Foo & @caption{Cap}: Foo: Cap +% @float Foo & no caption: Foo +% @float ,lbl & Caption{Cap}: 1.1: Cap +% @float ,lbl & no caption: 1.1 +% @float & @caption{Cap}: Cap +% @float & no caption: +% +\def\Efloat{% + \let\floatident = \empty + % + % In all cases, if we have a float type, it comes first. + \ifx\floattype\empty \else \def\floatident{\floattype}\fi + % + % If we have an xref label, the number comes next. + \ifx\floatlabel\empty \else + \ifx\floattype\empty \else % if also had float type, need tie first. + \appendtomacro\floatident{\tie}% + \fi + % the number. + \appendtomacro\floatident{\chaplevelprefix\the\floatno}% + \fi + % + % Start the printed caption with what we've constructed in + % \floatident, but keep it separate; we need \floatident again. + \let\captionline = \floatident + % + \ifx\thiscaption\empty \else + \ifx\floatident\empty \else + \appendtomacro\captionline{: }% had ident, so need a colon between + \fi + % + % caption text. + \appendtomacro\captionline{\scanexp\thiscaption}% + \fi + % + % If we have anything to print, print it, with space before. + % Eventually this needs to become an \insert. + \ifx\captionline\empty \else + \vskip.5\parskip + \captionline + % + % Space below caption. + \vskip\parskip + \fi + % + % If have an xref label, write the list of floats info. Do this + % after the caption, to avoid chance of it being a breakpoint. + \ifx\floatlabel\empty \else + % Write the text that goes in the lof to the aux file as + % \floatlabel-lof. Besides \floatident, we include the short + % caption if specified, else the full caption if specified, else nothing. + {% + \requireauxfile + \atdummies + % + \ifx\thisshortcaption\empty + \def\gtemp{\thiscaption}% + \else + \def\gtemp{\thisshortcaption}% + \fi + \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident + \ifx\gtemp\empty \else : \gtemp \fi}}% + }% + \fi + \egroup % end of \vtop + % + \checkinserts +} + +% Append the tokens #2 to the definition of macro #1, not expanding either. +% +\def\appendtomacro#1#2{% + \expandafter\def\expandafter#1\expandafter{#1#2}% +} + +% @caption, @shortcaption +% +\def\caption{\docaption\thiscaption} +\def\shortcaption{\docaption\thisshortcaption} +\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} +\def\defcaption#1#2{\egroup \def#1{#2}} + +% The parameter is the control sequence identifying the counter we are +% going to use. Create it if it doesn't exist and assign it to \floatno. +\def\getfloatno#1{% + \ifx#1\relax + % Haven't seen this figure type before. + \csname newcount\endcsname #1% + % + % Remember to reset this floatno at the next chap. + \expandafter\gdef\expandafter\resetallfloatnos + \expandafter{\resetallfloatnos #1=0 }% + \fi + \let\floatno#1% +} + +% \setref calls this to get the XREFLABEL-snt value. We want an @xref +% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we +% first read the @float command. +% +\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% + +% Magic string used for the XREFLABEL-title value, so \xrefX can +% distinguish floats from other xref types. +\def\floatmagic{!!float!!} + +% #1 is the control sequence we are passed; we expand into a conditional +% which is true if #1 represents a float ref. That is, the magic +% \lastsection value which we \setref above. +% +\def\iffloat#1{\expandafter\doiffloat#1==\finish} +% +% #1 is (maybe) the \floatmagic string. If so, #2 will be the +% (safe) float type for this float. We set \iffloattype to #2. +% +\def\doiffloat#1=#2=#3\finish{% + \def\temp{#1}% + \def\iffloattype{#2}% + \ifx\temp\floatmagic +} + +% @listoffloats FLOATTYPE - print a list of floats like a table of contents. +% +\parseargdef\listoffloats{% + \def\floattype{#1}% floattype + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + % + % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. + \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax + \ifhavexrefs + % if the user said @listoffloats foo but never @float foo. + \message{\linenumber No `\safefloattype' floats to list.}% + \fi + \else + \begingroup + \leftskip=\tocindent % indent these entries like a toc + \let\do=\listoffloatsdo + \csname floatlist\safefloattype\endcsname + \endgroup + \fi +} + +% This is called on each entry in a list of floats. We're passed the +% xref label, in the form LABEL-title, which is how we save it in the +% aux file. We strip off the -title and look up \XRLABEL-lof, which +% has the text we're supposed to typeset here. +% +% Figures without xref labels will not be included in the list (since +% they won't appear in the aux file). +% +\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} +\def\listoffloatsdoentry#1-title\finish{{% + % Can't fully expand XR#1-lof because it can contain anything. Just + % pass the control sequence. On the other hand, XR#1-pg is just the + % page number, and we want to fully expand that so we can get a link + % in pdf output. + \toksA = \expandafter{\csname XR#1-lof\endcsname}% + % + % use the same \entry macro we use to generate the TOC and index. + \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% + \writeentry +}} + + +\message{localization,} + +% For single-language documents, @documentlanguage is usually given very +% early, just after @documentencoding. Single argument is the language +% (de) or locale (de_DE) abbreviation. +% +{ + \catcode`\_ = \active + \globaldefs=1 +\parseargdef\documentlanguage{% + \tex % read txi-??.tex file in plain TeX. + % Read the file by the name they passed if it exists. + \let_ = \normalunderscore % normal _ character for filename test + \openin 1 txi-#1.tex + \ifeof 1 + \documentlanguagetrywithoutunderscore #1_\finish + \else + \globaldefs = 1 % everything in the txi-LL files needs to persist + \input txi-#1.tex + \fi + \closein 1 + \endgroup % end raw TeX +} +% +% If they passed de_DE, and txi-de_DE.tex doesn't exist, +% try txi-de.tex. +% +\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% + \openin 1 txi-#1.tex + \ifeof 1 + \errhelp = \nolanghelp + \errmessage{Cannot read language file txi-#1.tex}% + \else + \globaldefs = 1 % everything in the txi-LL files needs to persist + \input txi-#1.tex + \fi + \closein 1 +} +}% end of special _ catcode +% +\newhelp\nolanghelp{The given language definition file cannot be found or +is empty. Maybe you need to install it? Putting it in the current +directory should work if nowhere else does.} + +% This macro is called from txi-??.tex files; the first argument is the +% \language name to set (without the "\lang@" prefix), the second and +% third args are \{left,right}hyphenmin. +% +% The language names to pass are determined when the format is built. +% See the etex.log file created at that time, e.g., +% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. +% +% With TeX Live 2008, etex now includes hyphenation patterns for all +% available languages. This means we can support hyphenation in +% Texinfo, at least to some extent. (This still doesn't solve the +% accented characters problem.) +% +\catcode`@=11 +\def\txisetlanguage#1#2#3{% + % do not set the language if the name is undefined in the current TeX. + \expandafter\ifx\csname lang@#1\endcsname \relax + \message{no patterns for #1}% + \else + \global\language = \csname lang@#1\endcsname + \fi + % but there is no harm in adjusting the hyphenmin values regardless. + \global\lefthyphenmin = #2\relax + \global\righthyphenmin = #3\relax +} + +% XeTeX and LuaTeX can handle Unicode natively. +% Their default I/O uses UTF-8 sequences instead of a byte-wise operation. +% Other TeX engines' I/O (pdfTeX, etc.) is byte-wise. +% +\newif\iftxinativeunicodecapable +\newif\iftxiusebytewiseio + +\ifx\XeTeXrevision\thisisundefined + \ifx\luatexversion\thisisundefined + \txinativeunicodecapablefalse + \txiusebytewiseiotrue + \else + \txinativeunicodecapabletrue + \txiusebytewiseiofalse + \fi +\else + \txinativeunicodecapabletrue + \txiusebytewiseiofalse +\fi + +% Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex +% for non-UTF-8 (byte-wise) encodings. +% +\def\setbytewiseio{% + \ifx\XeTeXrevision\thisisundefined + \else + \XeTeXdefaultencoding "bytes" % For subsequent files to be read + \XeTeXinputencoding "bytes" % For document root file + % Unfortunately, there seems to be no corresponding XeTeX command for + % output encoding. This is a problem for auxiliary index and TOC files. + % The only solution would be perhaps to write out @U{...} sequences in + % place of non-ASCII characters. + \fi + + \ifx\luatexversion\thisisundefined + \else + \directlua{ + local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub + local function convert_char (char) + return utf8_char(byte(char)) + end + + local function convert_line (line) + return gsub(line, ".", convert_char) + end + + callback.register("process_input_buffer", convert_line) + + local function convert_line_out (line) + local line_out = "" + for c in string.utfvalues(line) do + line_out = line_out .. string.char(c) + end + return line_out + end + + callback.register("process_output_buffer", convert_line_out) + } + \fi + + \txiusebytewiseiotrue +} + + +% Helpers for encodings. +% Set the catcode of characters 128 through 255 to the specified number. +% +\def\setnonasciicharscatcode#1{% + \count255=128 + \loop\ifnum\count255<256 + \global\catcode\count255=#1\relax + \advance\count255 by 1 + \repeat +} + +\def\setnonasciicharscatcodenonglobal#1{% + \count255=128 + \loop\ifnum\count255<256 + \catcode\count255=#1\relax + \advance\count255 by 1 + \repeat +} + +% @documentencoding sets the definition of non-ASCII characters +% according to the specified encoding. +% +\def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz} +\def\documentencodingzzz#1{% + % + % Encoding being declared for the document. + \def\declaredencoding{\csname #1.enc\endcsname}% + % + % Supported encodings: names converted to tokens in order to be able + % to compare them with \ifx. + \def\ascii{\csname US-ASCII.enc\endcsname}% + \def\latnine{\csname ISO-8859-15.enc\endcsname}% + \def\latone{\csname ISO-8859-1.enc\endcsname}% + \def\lattwo{\csname ISO-8859-2.enc\endcsname}% + \def\utfeight{\csname UTF-8.enc\endcsname}% + % + \ifx \declaredencoding \ascii + \asciichardefs + % + \else \ifx \declaredencoding \lattwo + \iftxinativeunicodecapable + \setbytewiseio + \fi + \setnonasciicharscatcode\active + \lattwochardefs + % + \else \ifx \declaredencoding \latone + \iftxinativeunicodecapable + \setbytewiseio + \fi + \setnonasciicharscatcode\active + \latonechardefs + % + \else \ifx \declaredencoding \latnine + \iftxinativeunicodecapable + \setbytewiseio + \fi + \setnonasciicharscatcode\active + \latninechardefs + % + \else \ifx \declaredencoding \utfeight + \iftxinativeunicodecapable + % For native Unicode handling (XeTeX and LuaTeX) + \nativeunicodechardefs + \else + % For treating UTF-8 as byte sequences (TeX, eTeX and pdfTeX) + \setnonasciicharscatcode\active + % since we already invoked \utfeightchardefs at the top level + % (below), do not re-invoke it, otherwise our check for duplicated + % definitions gets triggered. Making non-ascii chars active is + % sufficient. + \fi + % + \else + \message{Ignoring unknown document encoding: #1.}% + % + \fi % utfeight + \fi % latnine + \fi % latone + \fi % lattwo + \fi % ascii + % + \ifx\XeTeXrevision\thisisundefined + \else + \ifx \declaredencoding \utfeight + \else + \ifx \declaredencoding \ascii + \else + \message{Warning: XeTeX with non-UTF-8 encodings cannot handle % + non-ASCII characters in auxiliary files.}% + \fi + \fi + \fi +} + +% emacs-page +% A message to be logged when using a character that isn't available +% the default font encoding (OT1). +% +\def\missingcharmsg#1{\message{Character missing, sorry: #1.}} + +% Take account of \c (plain) vs. \, (Texinfo) difference. +\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} + +% First, make active non-ASCII characters in order for them to be +% correctly categorized when TeX reads the replacement text of +% macros containing the character definitions. +\setnonasciicharscatcode\active +% + +\def\gdefchar#1#2{% +\gdef#1{% + \ifpassthroughchars + \string#1% + \else + #2% + \fi +}} + +% Latin1 (ISO-8859-1) character definitions. +\def\latonechardefs{% + \gdefchar^^a0{\tie} + \gdefchar^^a1{\exclamdown} + \gdefchar^^a2{{\tcfont \char162}} % cent + \gdefchar^^a3{\pounds{}} + \gdefchar^^a4{{\tcfont \char164}} % currency + \gdefchar^^a5{{\tcfont \char165}} % yen + \gdefchar^^a6{{\tcfont \char166}} % broken bar + \gdefchar^^a7{\S} + \gdefchar^^a8{\"{}} + \gdefchar^^a9{\copyright{}} + \gdefchar^^aa{\ordf} + \gdefchar^^ab{\guillemetleft{}} + \gdefchar^^ac{\ensuremath\lnot} + \gdefchar^^ad{\-} + \gdefchar^^ae{\registeredsymbol{}} + \gdefchar^^af{\={}} + % + \gdefchar^^b0{\textdegree} + \gdefchar^^b1{$\pm$} + \gdefchar^^b2{$^2$} + \gdefchar^^b3{$^3$} + \gdefchar^^b4{\'{}} + \gdefchar^^b5{$\mu$} + \gdefchar^^b6{\P} + \gdefchar^^b7{\ensuremath\cdot} + \gdefchar^^b8{\cedilla\ } + \gdefchar^^b9{$^1$} + \gdefchar^^ba{\ordm} + \gdefchar^^bb{\guillemetright{}} + \gdefchar^^bc{$1\over4$} + \gdefchar^^bd{$1\over2$} + \gdefchar^^be{$3\over4$} + \gdefchar^^bf{\questiondown} + % + \gdefchar^^c0{\`A} + \gdefchar^^c1{\'A} + \gdefchar^^c2{\^A} + \gdefchar^^c3{\~A} + \gdefchar^^c4{\"A} + \gdefchar^^c5{\ringaccent A} + \gdefchar^^c6{\AE} + \gdefchar^^c7{\cedilla C} + \gdefchar^^c8{\`E} + \gdefchar^^c9{\'E} + \gdefchar^^ca{\^E} + \gdefchar^^cb{\"E} + \gdefchar^^cc{\`I} + \gdefchar^^cd{\'I} + \gdefchar^^ce{\^I} + \gdefchar^^cf{\"I} + % + \gdefchar^^d0{\DH} + \gdefchar^^d1{\~N} + \gdefchar^^d2{\`O} + \gdefchar^^d3{\'O} + \gdefchar^^d4{\^O} + \gdefchar^^d5{\~O} + \gdefchar^^d6{\"O} + \gdefchar^^d7{$\times$} + \gdefchar^^d8{\O} + \gdefchar^^d9{\`U} + \gdefchar^^da{\'U} + \gdefchar^^db{\^U} + \gdefchar^^dc{\"U} + \gdefchar^^dd{\'Y} + \gdefchar^^de{\TH} + \gdefchar^^df{\ss} + % + \gdefchar^^e0{\`a} + \gdefchar^^e1{\'a} + \gdefchar^^e2{\^a} + \gdefchar^^e3{\~a} + \gdefchar^^e4{\"a} + \gdefchar^^e5{\ringaccent a} + \gdefchar^^e6{\ae} + \gdefchar^^e7{\cedilla c} + \gdefchar^^e8{\`e} + \gdefchar^^e9{\'e} + \gdefchar^^ea{\^e} + \gdefchar^^eb{\"e} + \gdefchar^^ec{\`{\dotless i}} + \gdefchar^^ed{\'{\dotless i}} + \gdefchar^^ee{\^{\dotless i}} + \gdefchar^^ef{\"{\dotless i}} + % + \gdefchar^^f0{\dh} + \gdefchar^^f1{\~n} + \gdefchar^^f2{\`o} + \gdefchar^^f3{\'o} + \gdefchar^^f4{\^o} + \gdefchar^^f5{\~o} + \gdefchar^^f6{\"o} + \gdefchar^^f7{$\div$} + \gdefchar^^f8{\o} + \gdefchar^^f9{\`u} + \gdefchar^^fa{\'u} + \gdefchar^^fb{\^u} + \gdefchar^^fc{\"u} + \gdefchar^^fd{\'y} + \gdefchar^^fe{\th} + \gdefchar^^ff{\"y} +} + +% Latin9 (ISO-8859-15) encoding character definitions. +\def\latninechardefs{% + % Encoding is almost identical to Latin1. + \latonechardefs + % + \gdefchar^^a4{\euro{}} + \gdefchar^^a6{\v S} + \gdefchar^^a8{\v s} + \gdefchar^^b4{\v Z} + \gdefchar^^b8{\v z} + \gdefchar^^bc{\OE} + \gdefchar^^bd{\oe} + \gdefchar^^be{\"Y} +} + +% Latin2 (ISO-8859-2) character definitions. +\def\lattwochardefs{% + \gdefchar^^a0{\tie} + \gdefchar^^a1{\ogonek{A}} + \gdefchar^^a2{\u{}} + \gdefchar^^a3{\L} + \gdefchar^^a4{\missingcharmsg{CURRENCY SIGN}} + \gdefchar^^a5{\v L} + \gdefchar^^a6{\'S} + \gdefchar^^a7{\S} + \gdefchar^^a8{\"{}} + \gdefchar^^a9{\v S} + \gdefchar^^aa{\cedilla S} + \gdefchar^^ab{\v T} + \gdefchar^^ac{\'Z} + \gdefchar^^ad{\-} + \gdefchar^^ae{\v Z} + \gdefchar^^af{\dotaccent Z} + % + \gdefchar^^b0{\textdegree{}} + \gdefchar^^b1{\ogonek{a}} + \gdefchar^^b2{\ogonek{ }} + \gdefchar^^b3{\l} + \gdefchar^^b4{\'{}} + \gdefchar^^b5{\v l} + \gdefchar^^b6{\'s} + \gdefchar^^b7{\v{}} + \gdefchar^^b8{\cedilla\ } + \gdefchar^^b9{\v s} + \gdefchar^^ba{\cedilla s} + \gdefchar^^bb{\v t} + \gdefchar^^bc{\'z} + \gdefchar^^bd{\H{}} + \gdefchar^^be{\v z} + \gdefchar^^bf{\dotaccent z} + % + \gdefchar^^c0{\'R} + \gdefchar^^c1{\'A} + \gdefchar^^c2{\^A} + \gdefchar^^c3{\u A} + \gdefchar^^c4{\"A} + \gdefchar^^c5{\'L} + \gdefchar^^c6{\'C} + \gdefchar^^c7{\cedilla C} + \gdefchar^^c8{\v C} + \gdefchar^^c9{\'E} + \gdefchar^^ca{\ogonek{E}} + \gdefchar^^cb{\"E} + \gdefchar^^cc{\v E} + \gdefchar^^cd{\'I} + \gdefchar^^ce{\^I} + \gdefchar^^cf{\v D} + % + \gdefchar^^d0{\DH} + \gdefchar^^d1{\'N} + \gdefchar^^d2{\v N} + \gdefchar^^d3{\'O} + \gdefchar^^d4{\^O} + \gdefchar^^d5{\H O} + \gdefchar^^d6{\"O} + \gdefchar^^d7{$\times$} + \gdefchar^^d8{\v R} + \gdefchar^^d9{\ringaccent U} + \gdefchar^^da{\'U} + \gdefchar^^db{\H U} + \gdefchar^^dc{\"U} + \gdefchar^^dd{\'Y} + \gdefchar^^de{\cedilla T} + \gdefchar^^df{\ss} + % + \gdefchar^^e0{\'r} + \gdefchar^^e1{\'a} + \gdefchar^^e2{\^a} + \gdefchar^^e3{\u a} + \gdefchar^^e4{\"a} + \gdefchar^^e5{\'l} + \gdefchar^^e6{\'c} + \gdefchar^^e7{\cedilla c} + \gdefchar^^e8{\v c} + \gdefchar^^e9{\'e} + \gdefchar^^ea{\ogonek{e}} + \gdefchar^^eb{\"e} + \gdefchar^^ec{\v e} + \gdefchar^^ed{\'{\dotless{i}}} + \gdefchar^^ee{\^{\dotless{i}}} + \gdefchar^^ef{\v d} + % + \gdefchar^^f0{\dh} + \gdefchar^^f1{\'n} + \gdefchar^^f2{\v n} + \gdefchar^^f3{\'o} + \gdefchar^^f4{\^o} + \gdefchar^^f5{\H o} + \gdefchar^^f6{\"o} + \gdefchar^^f7{$\div$} + \gdefchar^^f8{\v r} + \gdefchar^^f9{\ringaccent u} + \gdefchar^^fa{\'u} + \gdefchar^^fb{\H u} + \gdefchar^^fc{\"u} + \gdefchar^^fd{\'y} + \gdefchar^^fe{\cedilla t} + \gdefchar^^ff{\dotaccent{}} +} + +% UTF-8 character definitions. +% +% This code to support UTF-8 is based on LaTeX's utf8.def, with some +% changes for Texinfo conventions. It is included here under the GPL by +% permission from Frank Mittelbach and the LaTeX team. +% +\newcount\countUTFx +\newcount\countUTFy +\newcount\countUTFz + +\gdef\UTFviiiTwoOctets#1#2{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\endcsname} +% +\gdef\UTFviiiThreeOctets#1#2#3{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} +% +\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} + +\gdef\UTFviiiDefined#1{% + \ifx #1\relax + \message{\linenumber Unicode char \string #1 not defined for Texinfo}% + \else + \expandafter #1% + \fi +} + +% Give non-ASCII bytes the active definitions for processing UTF-8 sequences +\begingroup + \catcode`\~13 + \catcode`\$12 + \catcode`\"12 + + % Loop from \countUTFx to \countUTFy, performing \UTFviiiTmp + % substituting ~ and $ with a character token of that value. + \def\UTFviiiLoop{% + \global\catcode\countUTFx\active + \uccode`\~\countUTFx + \uccode`\$\countUTFx + \uppercase\expandafter{\UTFviiiTmp}% + \advance\countUTFx by 1 + \ifnum\countUTFx < \countUTFy + \expandafter\UTFviiiLoop + \fi} + + % For bytes other than the first in a UTF-8 sequence. Not expected to + % be expanded except when writing to auxiliary files. + \countUTFx = "80 + \countUTFy = "C2 + \def\UTFviiiTmp{% + \gdef~{% + \ifpassthroughchars $\fi}}% + \UTFviiiLoop + + \countUTFx = "C2 + \countUTFy = "E0 + \def\UTFviiiTmp{% + \gdef~{% + \ifpassthroughchars $% + \else\expandafter\UTFviiiTwoOctets\expandafter$\fi}}% + \UTFviiiLoop + + \countUTFx = "E0 + \countUTFy = "F0 + \def\UTFviiiTmp{% + \gdef~{% + \ifpassthroughchars $% + \else\expandafter\UTFviiiThreeOctets\expandafter$\fi}}% + \UTFviiiLoop + + \countUTFx = "F0 + \countUTFy = "F4 + \def\UTFviiiTmp{% + \gdef~{% + \ifpassthroughchars $% + \else\expandafter\UTFviiiFourOctets\expandafter$\fi + }}% + \UTFviiiLoop +\endgroup + +\def\globallet{\global\let} % save some \expandafter's below + +% @U{xxxx} to produce U+xxxx, if we support it. +\def\U#1{% + \expandafter\ifx\csname uni:#1\endcsname \relax + \iftxinativeunicodecapable + % All Unicode characters can be used if native Unicode handling is + % active. However, if the font does not have the glyph, + % letters are missing. + \begingroup + \uccode`\.="#1\relax + \uppercase{.} + \endgroup + \else + \errhelp = \EMsimple + \errmessage{Unicode character U+#1 not supported, sorry}% + \fi + \else + \csname uni:#1\endcsname + \fi +} + +% These macros are used here to construct the name of a control +% sequence to be defined. +\def\UTFviiiTwoOctetsName#1#2{% + \csname u8:#1\string #2\endcsname}% +\def\UTFviiiThreeOctetsName#1#2#3{% + \csname u8:#1\string #2\string #3\endcsname}% +\def\UTFviiiFourOctetsName#1#2#3#4{% + \csname u8:#1\string #2\string #3\string #4\endcsname}% + +% For UTF-8 byte sequences (TeX, e-TeX and pdfTeX), +% provide a definition macro to replace a Unicode character; +% this gets used by the @U command +% +\begingroup + \catcode`\"=12 + \catcode`\<=12 + \catcode`\.=12 + \catcode`\,=12 + \catcode`\;=12 + \catcode`\!=12 + \catcode`\~=13 + \gdef\DeclareUnicodeCharacterUTFviii#1#2{% + \countUTFz = "#1\relax + \begingroup + \parseXMLCharref + + % Give \u8:... its definition. The sequence of seven \expandafter's + % expands after the \gdef three times, e.g. + % + % 1. \UTFviiTwoOctetsName B1 B2 + % 2. \csname u8:B1 \string B2 \endcsname + % 3. \u8: B1 B2 (a single control sequence token) + % + \expandafter\expandafter + \expandafter\expandafter + \expandafter\expandafter + \expandafter\gdef \UTFviiiTmp{#2}% + % + \expandafter\ifx\csname uni:#1\endcsname \relax \else + \message{Internal error, already defined: #1}% + \fi + % + % define an additional control sequence for this code point. + \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp + \endgroup} + % + % Given the value in \countUTFz as a Unicode code point, set \UTFviiiTmp + % to the corresponding UTF-8 sequence. + \gdef\parseXMLCharref{% + \ifnum\countUTFz < "A0\relax + \errhelp = \EMsimple + \errmessage{Cannot define Unicode char value < 00A0}% + \else\ifnum\countUTFz < "800\relax + \parseUTFviiiA,% + \parseUTFviiiB C\UTFviiiTwoOctetsName.,% + \else\ifnum\countUTFz < "10000\relax + \parseUTFviiiA;% + \parseUTFviiiA,% + \parseUTFviiiB E\UTFviiiThreeOctetsName.{,;}% + \else + \parseUTFviiiA;% + \parseUTFviiiA,% + \parseUTFviiiA!% + \parseUTFviiiB F\UTFviiiFourOctetsName.{!,;}% + \fi\fi\fi + } + + % Extract a byte from the end of the UTF-8 representation of \countUTFx. + % It must be a non-initial byte in the sequence. + % Change \uccode of #1 for it to be used in \parseUTFviiiB as one + % of the bytes. + \gdef\parseUTFviiiA#1{% + \countUTFx = \countUTFz + \divide\countUTFz by 64 + \countUTFy = \countUTFz % Save to be the future value of \countUTFz. + \multiply\countUTFz by 64 + + % \countUTFz is now \countUTFx with the last 5 bits cleared. Subtract + % in order to get the last five bits. + \advance\countUTFx by -\countUTFz + + % Convert this to the byte in the UTF-8 sequence. + \advance\countUTFx by 128 + \uccode `#1\countUTFx + \countUTFz = \countUTFy} + + % Used to put a UTF-8 byte sequence into \UTFviiiTmp + % #1 is the increment for \countUTFz to yield a the first byte of the UTF-8 + % sequence. + % #2 is one of the \UTFviii*OctetsName macros. + % #3 is always a full stop (.) + % #4 is a template for the other bytes in the sequence. The values for these + % bytes is substituted in here with \uppercase using the \uccode's. + \gdef\parseUTFviiiB#1#2#3#4{% + \advance\countUTFz by "#10\relax + \uccode `#3\countUTFz + \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} +\endgroup + +% For native Unicode handling (XeTeX and LuaTeX), +% provide a definition macro that sets a catcode to `other' non-globally +% +\def\DeclareUnicodeCharacterNativeOther#1#2{% + \catcode"#1=\other +} + +% https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M +% U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block) +% U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block) +% U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A +% U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B +% +% Many of our renditions are less than wonderful, and all the missing +% characters are available somewhere. Loading the necessary fonts +% awaits user request. We can't truly support Unicode without +% reimplementing everything that's been done in LaTeX for many years, +% plus probably using luatex or xetex, and who knows what else. +% We won't be doing that here in this simple file. But we can try to at +% least make most of the characters not bomb out. +% +\def\unicodechardefs{% + \DeclareUnicodeCharacter{00A0}{\tie}% + \DeclareUnicodeCharacter{00A1}{\exclamdown}% + \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent + \DeclareUnicodeCharacter{00A3}{\pounds{}}% + \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency + \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen + \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar + \DeclareUnicodeCharacter{00A7}{\S}% + \DeclareUnicodeCharacter{00A8}{\"{ }}% + \DeclareUnicodeCharacter{00A9}{\copyright{}}% + \DeclareUnicodeCharacter{00AA}{\ordf}% + \DeclareUnicodeCharacter{00AB}{\guillemetleft{}}% + \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}% + \DeclareUnicodeCharacter{00AD}{\-}% + \DeclareUnicodeCharacter{00AE}{\registeredsymbol{}}% + \DeclareUnicodeCharacter{00AF}{\={ }}% + % + \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}% + \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}% + \DeclareUnicodeCharacter{00B2}{$^2$}% + \DeclareUnicodeCharacter{00B3}{$^3$}% + \DeclareUnicodeCharacter{00B4}{\'{ }}% + \DeclareUnicodeCharacter{00B5}{$\mu$}% + \DeclareUnicodeCharacter{00B6}{\P}% + \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}% + \DeclareUnicodeCharacter{00B8}{\cedilla{ }}% + \DeclareUnicodeCharacter{00B9}{$^1$}% + \DeclareUnicodeCharacter{00BA}{\ordm}% + \DeclareUnicodeCharacter{00BB}{\guillemetright{}}% + \DeclareUnicodeCharacter{00BC}{$1\over4$}% + \DeclareUnicodeCharacter{00BD}{$1\over2$}% + \DeclareUnicodeCharacter{00BE}{$3\over4$}% + \DeclareUnicodeCharacter{00BF}{\questiondown}% + % + \DeclareUnicodeCharacter{00C0}{\`A}% + \DeclareUnicodeCharacter{00C1}{\'A}% + \DeclareUnicodeCharacter{00C2}{\^A}% + \DeclareUnicodeCharacter{00C3}{\~A}% + \DeclareUnicodeCharacter{00C4}{\"A}% + \DeclareUnicodeCharacter{00C5}{\AA}% + \DeclareUnicodeCharacter{00C6}{\AE}% + \DeclareUnicodeCharacter{00C7}{\cedilla{C}}% + \DeclareUnicodeCharacter{00C8}{\`E}% + \DeclareUnicodeCharacter{00C9}{\'E}% + \DeclareUnicodeCharacter{00CA}{\^E}% + \DeclareUnicodeCharacter{00CB}{\"E}% + \DeclareUnicodeCharacter{00CC}{\`I}% + \DeclareUnicodeCharacter{00CD}{\'I}% + \DeclareUnicodeCharacter{00CE}{\^I}% + \DeclareUnicodeCharacter{00CF}{\"I}% + % + \DeclareUnicodeCharacter{00D0}{\DH}% + \DeclareUnicodeCharacter{00D1}{\~N}% + \DeclareUnicodeCharacter{00D2}{\`O}% + \DeclareUnicodeCharacter{00D3}{\'O}% + \DeclareUnicodeCharacter{00D4}{\^O}% + \DeclareUnicodeCharacter{00D5}{\~O}% + \DeclareUnicodeCharacter{00D6}{\"O}% + \DeclareUnicodeCharacter{00D7}{\ensuremath\times}% + \DeclareUnicodeCharacter{00D8}{\O}% + \DeclareUnicodeCharacter{00D9}{\`U}% + \DeclareUnicodeCharacter{00DA}{\'U}% + \DeclareUnicodeCharacter{00DB}{\^U}% + \DeclareUnicodeCharacter{00DC}{\"U}% + \DeclareUnicodeCharacter{00DD}{\'Y}% + \DeclareUnicodeCharacter{00DE}{\TH}% + \DeclareUnicodeCharacter{00DF}{\ss}% + % + \DeclareUnicodeCharacter{00E0}{\`a}% + \DeclareUnicodeCharacter{00E1}{\'a}% + \DeclareUnicodeCharacter{00E2}{\^a}% + \DeclareUnicodeCharacter{00E3}{\~a}% + \DeclareUnicodeCharacter{00E4}{\"a}% + \DeclareUnicodeCharacter{00E5}{\aa}% + \DeclareUnicodeCharacter{00E6}{\ae}% + \DeclareUnicodeCharacter{00E7}{\cedilla{c}}% + \DeclareUnicodeCharacter{00E8}{\`e}% + \DeclareUnicodeCharacter{00E9}{\'e}% + \DeclareUnicodeCharacter{00EA}{\^e}% + \DeclareUnicodeCharacter{00EB}{\"e}% + \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}% + \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}% + \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}% + \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}% + % + \DeclareUnicodeCharacter{00F0}{\dh}% + \DeclareUnicodeCharacter{00F1}{\~n}% + \DeclareUnicodeCharacter{00F2}{\`o}% + \DeclareUnicodeCharacter{00F3}{\'o}% + \DeclareUnicodeCharacter{00F4}{\^o}% + \DeclareUnicodeCharacter{00F5}{\~o}% + \DeclareUnicodeCharacter{00F6}{\"o}% + \DeclareUnicodeCharacter{00F7}{\ensuremath\div}% + \DeclareUnicodeCharacter{00F8}{\o}% + \DeclareUnicodeCharacter{00F9}{\`u}% + \DeclareUnicodeCharacter{00FA}{\'u}% + \DeclareUnicodeCharacter{00FB}{\^u}% + \DeclareUnicodeCharacter{00FC}{\"u}% + \DeclareUnicodeCharacter{00FD}{\'y}% + \DeclareUnicodeCharacter{00FE}{\th}% + \DeclareUnicodeCharacter{00FF}{\"y}% + % + \DeclareUnicodeCharacter{0100}{\=A}% + \DeclareUnicodeCharacter{0101}{\=a}% + \DeclareUnicodeCharacter{0102}{\u{A}}% + \DeclareUnicodeCharacter{0103}{\u{a}}% + \DeclareUnicodeCharacter{0104}{\ogonek{A}}% + \DeclareUnicodeCharacter{0105}{\ogonek{a}}% + \DeclareUnicodeCharacter{0106}{\'C}% + \DeclareUnicodeCharacter{0107}{\'c}% + \DeclareUnicodeCharacter{0108}{\^C}% + \DeclareUnicodeCharacter{0109}{\^c}% + \DeclareUnicodeCharacter{010A}{\dotaccent{C}}% + \DeclareUnicodeCharacter{010B}{\dotaccent{c}}% + \DeclareUnicodeCharacter{010C}{\v{C}}% + \DeclareUnicodeCharacter{010D}{\v{c}}% + \DeclareUnicodeCharacter{010E}{\v{D}}% + \DeclareUnicodeCharacter{010F}{d'}% + % + \DeclareUnicodeCharacter{0110}{\DH}% + \DeclareUnicodeCharacter{0111}{\dh}% + \DeclareUnicodeCharacter{0112}{\=E}% + \DeclareUnicodeCharacter{0113}{\=e}% + \DeclareUnicodeCharacter{0114}{\u{E}}% + \DeclareUnicodeCharacter{0115}{\u{e}}% + \DeclareUnicodeCharacter{0116}{\dotaccent{E}}% + \DeclareUnicodeCharacter{0117}{\dotaccent{e}}% + \DeclareUnicodeCharacter{0118}{\ogonek{E}}% + \DeclareUnicodeCharacter{0119}{\ogonek{e}}% + \DeclareUnicodeCharacter{011A}{\v{E}}% + \DeclareUnicodeCharacter{011B}{\v{e}}% + \DeclareUnicodeCharacter{011C}{\^G}% + \DeclareUnicodeCharacter{011D}{\^g}% + \DeclareUnicodeCharacter{011E}{\u{G}}% + \DeclareUnicodeCharacter{011F}{\u{g}}% + % + \DeclareUnicodeCharacter{0120}{\dotaccent{G}}% + \DeclareUnicodeCharacter{0121}{\dotaccent{g}}% + \DeclareUnicodeCharacter{0122}{\cedilla{G}}% + \DeclareUnicodeCharacter{0123}{\cedilla{g}}% + \DeclareUnicodeCharacter{0124}{\^H}% + \DeclareUnicodeCharacter{0125}{\^h}% + \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}% + \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}% + \DeclareUnicodeCharacter{0128}{\~I}% + \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}% + \DeclareUnicodeCharacter{012A}{\=I}% + \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}% + \DeclareUnicodeCharacter{012C}{\u{I}}% + \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}% + \DeclareUnicodeCharacter{012E}{\ogonek{I}}% + \DeclareUnicodeCharacter{012F}{\ogonek{i}}% + % + \DeclareUnicodeCharacter{0130}{\dotaccent{I}}% + \DeclareUnicodeCharacter{0131}{\dotless{i}}% + \DeclareUnicodeCharacter{0132}{IJ}% + \DeclareUnicodeCharacter{0133}{ij}% + \DeclareUnicodeCharacter{0134}{\^J}% + \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}% + \DeclareUnicodeCharacter{0136}{\cedilla{K}}% + \DeclareUnicodeCharacter{0137}{\cedilla{k}}% + \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}% + \DeclareUnicodeCharacter{0139}{\'L}% + \DeclareUnicodeCharacter{013A}{\'l}% + \DeclareUnicodeCharacter{013B}{\cedilla{L}}% + \DeclareUnicodeCharacter{013C}{\cedilla{l}}% + \DeclareUnicodeCharacter{013D}{L'}% should kern + \DeclareUnicodeCharacter{013E}{l'}% should kern + \DeclareUnicodeCharacter{013F}{L\U{00B7}}% + % + \DeclareUnicodeCharacter{0140}{l\U{00B7}}% + \DeclareUnicodeCharacter{0141}{\L}% + \DeclareUnicodeCharacter{0142}{\l}% + \DeclareUnicodeCharacter{0143}{\'N}% + \DeclareUnicodeCharacter{0144}{\'n}% + \DeclareUnicodeCharacter{0145}{\cedilla{N}}% + \DeclareUnicodeCharacter{0146}{\cedilla{n}}% + \DeclareUnicodeCharacter{0147}{\v{N}}% + \DeclareUnicodeCharacter{0148}{\v{n}}% + \DeclareUnicodeCharacter{0149}{'n}% + \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}% + \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}% + \DeclareUnicodeCharacter{014C}{\=O}% + \DeclareUnicodeCharacter{014D}{\=o}% + \DeclareUnicodeCharacter{014E}{\u{O}}% + \DeclareUnicodeCharacter{014F}{\u{o}}% + % + \DeclareUnicodeCharacter{0150}{\H{O}}% + \DeclareUnicodeCharacter{0151}{\H{o}}% + \DeclareUnicodeCharacter{0152}{\OE}% + \DeclareUnicodeCharacter{0153}{\oe}% + \DeclareUnicodeCharacter{0154}{\'R}% + \DeclareUnicodeCharacter{0155}{\'r}% + \DeclareUnicodeCharacter{0156}{\cedilla{R}}% + \DeclareUnicodeCharacter{0157}{\cedilla{r}}% + \DeclareUnicodeCharacter{0158}{\v{R}}% + \DeclareUnicodeCharacter{0159}{\v{r}}% + \DeclareUnicodeCharacter{015A}{\'S}% + \DeclareUnicodeCharacter{015B}{\'s}% + \DeclareUnicodeCharacter{015C}{\^S}% + \DeclareUnicodeCharacter{015D}{\^s}% + \DeclareUnicodeCharacter{015E}{\cedilla{S}}% + \DeclareUnicodeCharacter{015F}{\cedilla{s}}% + % + \DeclareUnicodeCharacter{0160}{\v{S}}% + \DeclareUnicodeCharacter{0161}{\v{s}}% + \DeclareUnicodeCharacter{0162}{\cedilla{T}}% + \DeclareUnicodeCharacter{0163}{\cedilla{t}}% + \DeclareUnicodeCharacter{0164}{\v{T}}% + \DeclareUnicodeCharacter{0165}{\v{t}}% + \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}% + \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}% + \DeclareUnicodeCharacter{0168}{\~U}% + \DeclareUnicodeCharacter{0169}{\~u}% + \DeclareUnicodeCharacter{016A}{\=U}% + \DeclareUnicodeCharacter{016B}{\=u}% + \DeclareUnicodeCharacter{016C}{\u{U}}% + \DeclareUnicodeCharacter{016D}{\u{u}}% + \DeclareUnicodeCharacter{016E}{\ringaccent{U}}% + \DeclareUnicodeCharacter{016F}{\ringaccent{u}}% + % + \DeclareUnicodeCharacter{0170}{\H{U}}% + \DeclareUnicodeCharacter{0171}{\H{u}}% + \DeclareUnicodeCharacter{0172}{\ogonek{U}}% + \DeclareUnicodeCharacter{0173}{\ogonek{u}}% + \DeclareUnicodeCharacter{0174}{\^W}% + \DeclareUnicodeCharacter{0175}{\^w}% + \DeclareUnicodeCharacter{0176}{\^Y}% + \DeclareUnicodeCharacter{0177}{\^y}% + \DeclareUnicodeCharacter{0178}{\"Y}% + \DeclareUnicodeCharacter{0179}{\'Z}% + \DeclareUnicodeCharacter{017A}{\'z}% + \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}% + \DeclareUnicodeCharacter{017C}{\dotaccent{z}}% + \DeclareUnicodeCharacter{017D}{\v{Z}}% + \DeclareUnicodeCharacter{017E}{\v{z}}% + \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}% + % + \DeclareUnicodeCharacter{01C4}{D\v{Z}}% + \DeclareUnicodeCharacter{01C5}{D\v{z}}% + \DeclareUnicodeCharacter{01C6}{d\v{z}}% + \DeclareUnicodeCharacter{01C7}{LJ}% + \DeclareUnicodeCharacter{01C8}{Lj}% + \DeclareUnicodeCharacter{01C9}{lj}% + \DeclareUnicodeCharacter{01CA}{NJ}% + \DeclareUnicodeCharacter{01CB}{Nj}% + \DeclareUnicodeCharacter{01CC}{nj}% + \DeclareUnicodeCharacter{01CD}{\v{A}}% + \DeclareUnicodeCharacter{01CE}{\v{a}}% + \DeclareUnicodeCharacter{01CF}{\v{I}}% + % + \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}% + \DeclareUnicodeCharacter{01D1}{\v{O}}% + \DeclareUnicodeCharacter{01D2}{\v{o}}% + \DeclareUnicodeCharacter{01D3}{\v{U}}% + \DeclareUnicodeCharacter{01D4}{\v{u}}% + % + \DeclareUnicodeCharacter{01E2}{\={\AE}}% + \DeclareUnicodeCharacter{01E3}{\={\ae}}% + \DeclareUnicodeCharacter{01E6}{\v{G}}% + \DeclareUnicodeCharacter{01E7}{\v{g}}% + \DeclareUnicodeCharacter{01E8}{\v{K}}% + \DeclareUnicodeCharacter{01E9}{\v{k}}% + % + \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}% + \DeclareUnicodeCharacter{01F1}{DZ}% + \DeclareUnicodeCharacter{01F2}{Dz}% + \DeclareUnicodeCharacter{01F3}{dz}% + \DeclareUnicodeCharacter{01F4}{\'G}% + \DeclareUnicodeCharacter{01F5}{\'g}% + \DeclareUnicodeCharacter{01F8}{\`N}% + \DeclareUnicodeCharacter{01F9}{\`n}% + \DeclareUnicodeCharacter{01FC}{\'{\AE}}% + \DeclareUnicodeCharacter{01FD}{\'{\ae}}% + \DeclareUnicodeCharacter{01FE}{\'{\O}}% + \DeclareUnicodeCharacter{01FF}{\'{\o}}% + % + \DeclareUnicodeCharacter{021E}{\v{H}}% + \DeclareUnicodeCharacter{021F}{\v{h}}% + % + \DeclareUnicodeCharacter{0226}{\dotaccent{A}}% + \DeclareUnicodeCharacter{0227}{\dotaccent{a}}% + \DeclareUnicodeCharacter{0228}{\cedilla{E}}% + \DeclareUnicodeCharacter{0229}{\cedilla{e}}% + \DeclareUnicodeCharacter{022E}{\dotaccent{O}}% + \DeclareUnicodeCharacter{022F}{\dotaccent{o}}% + % + \DeclareUnicodeCharacter{0232}{\=Y}% + \DeclareUnicodeCharacter{0233}{\=y}% + \DeclareUnicodeCharacter{0237}{\dotless{j}}% + % + \DeclareUnicodeCharacter{02DB}{\ogonek{ }}% + % + % Greek letters upper case + \DeclareUnicodeCharacter{0391}{{\it A}}% + \DeclareUnicodeCharacter{0392}{{\it B}}% + \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}% + \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}% + \DeclareUnicodeCharacter{0395}{{\it E}}% + \DeclareUnicodeCharacter{0396}{{\it Z}}% + \DeclareUnicodeCharacter{0397}{{\it H}}% + \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}% + \DeclareUnicodeCharacter{0399}{{\it I}}% + \DeclareUnicodeCharacter{039A}{{\it K}}% + \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}% + \DeclareUnicodeCharacter{039C}{{\it M}}% + \DeclareUnicodeCharacter{039D}{{\it N}}% + \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}% + \DeclareUnicodeCharacter{039F}{{\it O}}% + \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}% + \DeclareUnicodeCharacter{03A1}{{\it P}}% + %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma + \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}% + \DeclareUnicodeCharacter{03A4}{{\it T}}% + \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}% + \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}% + \DeclareUnicodeCharacter{03A7}{{\it X}}% + \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}% + \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}% + % + % Vowels with accents + \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}% + \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}% + \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}% + \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}% + \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}% + \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}% + % + % Standalone accent + \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}% + % + % Greek letters lower case + \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}% + \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}% + \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}% + \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}% + \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}% + \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}% + \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}% + \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}% + \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}% + \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}% + \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}% + \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}% + \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}% + \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}% + \DeclareUnicodeCharacter{03BF}{{\it o}}% omicron + \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}% + \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}% + \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}% + \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}% + \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}% + \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}% + \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}% + \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}% + \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}% + \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}% + % + % More Greek vowels with accents + \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}% + \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}% + \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}% + \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}% + \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}% + % + % Variant Greek letters + \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}% + \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}% + \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}% + % + \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}% + \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}% + \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}% + \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}% + \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}% + \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}% + \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}% + \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}% + \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}% + \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}% + \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}% + \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}% + % + \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}% + \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}% + % + \DeclareUnicodeCharacter{1E20}{\=G}% + \DeclareUnicodeCharacter{1E21}{\=g}% + \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}% + \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}% + \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}% + \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}% + \DeclareUnicodeCharacter{1E26}{\"H}% + \DeclareUnicodeCharacter{1E27}{\"h}% + % + \DeclareUnicodeCharacter{1E30}{\'K}% + \DeclareUnicodeCharacter{1E31}{\'k}% + \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}% + \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}% + \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}% + \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}% + \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}% + \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}% + \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}% + \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}% + \DeclareUnicodeCharacter{1E3E}{\'M}% + \DeclareUnicodeCharacter{1E3F}{\'m}% + % + \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}% + \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}% + \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}% + \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}% + \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}% + \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}% + \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}% + \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}% + \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}% + \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}% + % + \DeclareUnicodeCharacter{1E54}{\'P}% + \DeclareUnicodeCharacter{1E55}{\'p}% + \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}% + \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}% + \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}% + \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}% + \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}% + \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}% + \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}% + \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}% + % + \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}% + \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}% + \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}% + \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}% + \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}% + \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}% + \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}% + \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}% + \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}% + \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}% + % + \DeclareUnicodeCharacter{1E7C}{\~V}% + \DeclareUnicodeCharacter{1E7D}{\~v}% + \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}% + \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}% + % + \DeclareUnicodeCharacter{1E80}{\`W}% + \DeclareUnicodeCharacter{1E81}{\`w}% + \DeclareUnicodeCharacter{1E82}{\'W}% + \DeclareUnicodeCharacter{1E83}{\'w}% + \DeclareUnicodeCharacter{1E84}{\"W}% + \DeclareUnicodeCharacter{1E85}{\"w}% + \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}% + \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}% + \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}% + \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}% + \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}% + \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}% + \DeclareUnicodeCharacter{1E8C}{\"X}% + \DeclareUnicodeCharacter{1E8D}{\"x}% + \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}% + \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}% + % + \DeclareUnicodeCharacter{1E90}{\^Z}% + \DeclareUnicodeCharacter{1E91}{\^z}% + \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}% + \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}% + \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}% + \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}% + \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}% + \DeclareUnicodeCharacter{1E97}{\"t}% + \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}% + \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}% + % + \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}% + \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}% + % + \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}% + \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}% + \DeclareUnicodeCharacter{1EBC}{\~E}% + \DeclareUnicodeCharacter{1EBD}{\~e}% + % + \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}% + \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}% + \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}% + \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}% + % + \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}% + \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}% + % + \DeclareUnicodeCharacter{1EF2}{\`Y}% + \DeclareUnicodeCharacter{1EF3}{\`y}% + \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}% + % + \DeclareUnicodeCharacter{1EF8}{\~Y}% + \DeclareUnicodeCharacter{1EF9}{\~y}% + % + % Punctuation + \DeclareUnicodeCharacter{2013}{--}% + \DeclareUnicodeCharacter{2014}{---}% + \DeclareUnicodeCharacter{2018}{\quoteleft{}}% + \DeclareUnicodeCharacter{2019}{\quoteright{}}% + \DeclareUnicodeCharacter{201A}{\quotesinglbase{}}% + \DeclareUnicodeCharacter{201C}{\quotedblleft{}}% + \DeclareUnicodeCharacter{201D}{\quotedblright{}}% + \DeclareUnicodeCharacter{201E}{\quotedblbase{}}% + \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}% + \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}% + \DeclareUnicodeCharacter{2022}{\bullet{}}% + \DeclareUnicodeCharacter{202F}{\thinspace}% + \DeclareUnicodeCharacter{2026}{\dots{}}% + \DeclareUnicodeCharacter{2039}{\guilsinglleft{}}% + \DeclareUnicodeCharacter{203A}{\guilsinglright{}}% + % + \DeclareUnicodeCharacter{20AC}{\euro{}}% + % + \DeclareUnicodeCharacter{2192}{\expansion{}}% + \DeclareUnicodeCharacter{21D2}{\result{}}% + % + % Mathematical symbols + \DeclareUnicodeCharacter{2200}{\ensuremath\forall}% + \DeclareUnicodeCharacter{2203}{\ensuremath\exists}% + \DeclareUnicodeCharacter{2208}{\ensuremath\in}% + \DeclareUnicodeCharacter{2212}{\minus{}}% + \DeclareUnicodeCharacter{2217}{\ast}% + \DeclareUnicodeCharacter{221E}{\ensuremath\infty}% + \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}% + \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}% + \DeclareUnicodeCharacter{2229}{\ensuremath\cap}% + \DeclareUnicodeCharacter{2261}{\equiv{}}% + \DeclareUnicodeCharacter{2264}{\ensuremath\leq}% + \DeclareUnicodeCharacter{2265}{\ensuremath\geq}% + \DeclareUnicodeCharacter{2282}{\ensuremath\subset}% + \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}% + % + \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}% + \DeclareUnicodeCharacter{2032}{\ensuremath\prime}% + \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}% + \DeclareUnicodeCharacter{2111}{\ensuremath\Im}% + \DeclareUnicodeCharacter{2113}{\ensuremath\ell}% + \DeclareUnicodeCharacter{2118}{\ensuremath\wp}% + \DeclareUnicodeCharacter{211C}{\ensuremath\Re}% + \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}% + \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}% + \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}% + \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}% + \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}% + \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}% + \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}% + \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}% + \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}% + \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}% + \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}% + \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}% + \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}% + \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}% + \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}% + \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}% + \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}% + \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}% + \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}% + \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}% + \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}% + \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}% + \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}% + \DeclareUnicodeCharacter{2202}{\ensuremath\partial}% + \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}% + \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}% + \DeclareUnicodeCharacter{2209}{\ensuremath\notin}% + \DeclareUnicodeCharacter{220B}{\ensuremath\owns}% + \DeclareUnicodeCharacter{220F}{\ensuremath\prod}% + \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}% + \DeclareUnicodeCharacter{2211}{\ensuremath\sum}% + \DeclareUnicodeCharacter{2213}{\ensuremath\mp}% + \DeclareUnicodeCharacter{2218}{\ensuremath\circ}% + \DeclareUnicodeCharacter{221A}{\ensuremath\surd}% + \DeclareUnicodeCharacter{221D}{\ensuremath\propto}% + \DeclareUnicodeCharacter{2220}{\ensuremath\angle}% + \DeclareUnicodeCharacter{2223}{\ensuremath\mid}% + \DeclareUnicodeCharacter{2228}{\ensuremath\vee}% + \DeclareUnicodeCharacter{222A}{\ensuremath\cup}% + \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}% + \DeclareUnicodeCharacter{222E}{\ensuremath\oint}% + \DeclareUnicodeCharacter{223C}{\ensuremath\sim}% + \DeclareUnicodeCharacter{2240}{\ensuremath\wr}% + \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}% + \DeclareUnicodeCharacter{2245}{\ensuremath\cong}% + \DeclareUnicodeCharacter{2248}{\ensuremath\approx}% + \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}% + \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}% + \DeclareUnicodeCharacter{2260}{\ensuremath\neq}% + \DeclareUnicodeCharacter{226A}{\ensuremath\ll}% + \DeclareUnicodeCharacter{226B}{\ensuremath\gg}% + \DeclareUnicodeCharacter{227A}{\ensuremath\prec}% + \DeclareUnicodeCharacter{227B}{\ensuremath\succ}% + \DeclareUnicodeCharacter{2283}{\ensuremath\supset}% + \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}% + \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}% + \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}% + \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}% + \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}% + \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}% + \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}% + \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}% + \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}% + \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}% + \DeclareUnicodeCharacter{2299}{\ensuremath\odot}% + \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}% + \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}% + \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}% + \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}% + \DeclareUnicodeCharacter{22A8}{\ensuremath\models}% + \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}% + \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}% + \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}% + \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}% + \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}% + \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}% + \DeclareUnicodeCharacter{22C6}{\ensuremath\star}% + \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}% + \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}% + \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}% + \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}% + \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}% + \DeclareUnicodeCharacter{2322}{\ensuremath\frown}% + \DeclareUnicodeCharacter{2323}{\ensuremath\smile}% + % + \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}% + \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}% + \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}% + \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}% + \DeclareUnicodeCharacter{25C7}{\ensuremath\diamond}% + \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}% + \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}% + \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}% + \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}% + \DeclareUnicodeCharacter{266D}{\ensuremath\flat}% + \DeclareUnicodeCharacter{266E}{\ensuremath\natural}% + \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}% + \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}% + \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}% + \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}% + \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}% + \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}% + \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}% + \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}% + \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}% + \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}% + \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}% + \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}% + \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}% + \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}% + \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}% + \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}% + \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}% + \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}% + % + \global\mathchardef\checkmark="1370% actually the square root sign + \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}% +}% end of \unicodechardefs + +% UTF-8 byte sequence (pdfTeX) definitions (replacing and @U command) +% It makes the setting that replace UTF-8 byte sequence. +\def\utfeightchardefs{% + \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterUTFviii + \unicodechardefs +} + +% Whether the active definitions of non-ASCII characters expand to +% non-active tokens with the same character code. This is used to +% write characters literally, instead of using active definitions for +% printing the correct glyphs. +\newif\ifpassthroughchars +\passthroughcharsfalse + +% For native Unicode handling (XeTeX and LuaTeX), +% provide a definition macro to replace/pass-through a Unicode character +% +\def\DeclareUnicodeCharacterNative#1#2{% + \catcode"#1=\active + \def\dodeclareunicodecharacternative##1##2##3{% + \begingroup + \uccode`\~="##2\relax + \uppercase{\gdef~}{% + \ifpassthroughchars + ##1% + \else + ##3% + \fi + } + \endgroup + } + \begingroup + \uccode`\.="#1\relax + \uppercase{\def\UTFNativeTmp{.}}% + \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}% + \endgroup +} + +% Native Unicode handling (XeTeX and LuaTeX) character replacing definition. +% It activates the setting that replaces Unicode characters. +\def\nativeunicodechardefs{% + \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative + \unicodechardefs +} + +% For native Unicode handling (XeTeX and LuaTeX), +% make the character token expand +% to the sequences given in \unicodechardefs for printing. +\def\DeclareUnicodeCharacterNativeAtU#1#2{% + \def\UTFAtUTmp{#2} + \expandafter\globallet\csname uni:#1\endcsname \UTFAtUTmp +} + +% @U command definitions for native Unicode handling (XeTeX and LuaTeX). +\def\nativeunicodechardefsatu{% + \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU + \unicodechardefs +} + +% US-ASCII character definitions. +\def\asciichardefs{% nothing need be done + \relax +} + +% define all Unicode characters we know about, for the sake of @U. +\iftxinativeunicodecapable + \nativeunicodechardefsatu +\else + \utfeightchardefs +\fi + + +% Make non-ASCII characters printable again for compatibility with +% existing Texinfo documents that may use them, even without declaring a +% document encoding. +% +\setnonasciicharscatcode \other + + +\message{formatting,} + +\newdimen\defaultparindent \defaultparindent = 15pt + +\chapheadingskip = 15pt plus 4pt minus 2pt +\secheadingskip = 12pt plus 3pt minus 2pt +\subsecheadingskip = 9pt plus 2pt minus 2pt + +% Prevent underfull vbox error messages. +\vbadness = 10000 + +% Don't be very finicky about underfull hboxes, either. +\hbadness = 6666 + +% Following George Bush, get rid of widows and orphans. +\widowpenalty=10000 +\clubpenalty=10000 + +% Use TeX 3.0's \emergencystretch to help line breaking, but if we're +% using an old version of TeX, don't do anything. We want the amount of +% stretch added to depend on the line length, hence the dependence on +% \hsize. We call this whenever the paper size is set. +% +\def\setemergencystretch{% + \ifx\emergencystretch\thisisundefined + % Allow us to assign to \emergencystretch anyway. + \def\emergencystretch{\dimen0}% + \else + \emergencystretch = .15\hsize + \fi +} + +% Parameters in order: 1) textheight; 2) textwidth; +% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; +% 7) physical page height; 8) physical page width. +% +% We also call \setleading{\textleading}, so the caller should define +% \textleading. The caller should also set \parskip. +% +\def\internalpagesizes#1#2#3#4#5#6#7#8{% + \voffset = #3\relax + \topskip = #6\relax + \splittopskip = \topskip + % + \vsize = #1\relax + \advance\vsize by \topskip + \outervsize = \vsize + \advance\outervsize by 2\topandbottommargin + \txipageheight = \vsize + % + \hsize = #2\relax + \outerhsize = \hsize + \advance\outerhsize by 0.5in + \txipagewidth = \hsize + % + \normaloffset = #4\relax + \bindingoffset = #5\relax + % + \ifpdf + \pdfpageheight #7\relax + \pdfpagewidth #8\relax + % if we don't reset these, they will remain at "1 true in" of + % whatever layout pdftex was dumped with. + \pdfhorigin = 1 true in + \pdfvorigin = 1 true in + \else + \ifx\XeTeXrevision\thisisundefined + \special{papersize=#8,#7}% + \else + \pdfpageheight #7\relax + \pdfpagewidth #8\relax + % XeTeX does not have \pdfhorigin and \pdfvorigin. + \fi + \fi + % + \setleading{\textleading} + % + \parindent = \defaultparindent + \setemergencystretch +} + +% @letterpaper (the default). +\def\letterpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % If page is nothing but text, make it come out even. + \internalpagesizes{607.2pt}{6in}% that's 46 lines + {\voffset}{.25in}% + {\bindingoffset}{36pt}% + {11in}{8.5in}% +}} + +% Use @smallbook to reset parameters for 7x9.25 trim size. +\def\smallbook{{\globaldefs = 1 + \parskip = 2pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.5in}{5in}% + {-.2in}{0in}% + {\bindingoffset}{16pt}% + {9.25in}{7in}% + % + \lispnarrowing = 0.3in + \tolerance = 700 + \contentsrightmargin = 0pt + \defbodyindent = .5cm +}} + +% Use @smallerbook to reset parameters for 6x9 trim size. +% (Just testing, parameters still in flux.) +\def\smallerbook{{\globaldefs = 1 + \parskip = 1.5pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.4in}{4.8in}% + {-.2in}{-.4in}% + {0pt}{14pt}% + {9in}{6in}% + % + \lispnarrowing = 0.25in + \tolerance = 700 + \contentsrightmargin = 0pt + \defbodyindent = .4cm +}} + +% Use @afourpaper to print on European A4 paper. +\def\afourpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % Double-side printing via postscript on Laserjet 4050 + % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. + % To change the settings for a different printer or situation, adjust + % \normaloffset until the front-side and back-side texts align. Then + % do the same for \bindingoffset. You can set these for testing in + % your texinfo source file like this: + % @tex + % \global\normaloffset = -6mm + % \global\bindingoffset = 10mm + % @end tex + \internalpagesizes{673.2pt}{160mm}% that's 51 lines + {\voffset}{\hoffset}% + {\bindingoffset}{44pt}% + {297mm}{210mm}% + % + \tolerance = 700 + \contentsrightmargin = 0pt + \defbodyindent = 5mm +}} + +% Use @afivepaper to print on European A5 paper. +% From romildo@urano.iceb.ufop.br, 2 July 2000. +% He also recommends making @example and @lisp be small. +\def\afivepaper{{\globaldefs = 1 + \parskip = 2pt plus 1pt minus 0.1pt + \textleading = 12.5pt + % + \internalpagesizes{160mm}{120mm}% + {\voffset}{\hoffset}% + {\bindingoffset}{8pt}% + {210mm}{148mm}% + % + \lispnarrowing = 0.2in + \tolerance = 800 + \contentsrightmargin = 0pt + \defbodyindent = 2mm + \tableindent = 12mm +}} + +% A specific text layout, 24x15cm overall, intended for A4 paper. +\def\afourlatex{{\globaldefs = 1 + \afourpaper + \internalpagesizes{237mm}{150mm}% + {\voffset}{4.6mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + % + % Must explicitly reset to 0 because we call \afourpaper. + \globaldefs = 0 +}} + +% Use @afourwide to print on A4 paper in landscape format. +\def\afourwide{{\globaldefs = 1 + \afourpaper + \internalpagesizes{241mm}{165mm}% + {\voffset}{-2.95mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + \globaldefs = 0 +}} + +% @pagesizes TEXTHEIGHT[,TEXTWIDTH] +% Perhaps we should allow setting the margins, \topskip, \parskip, +% and/or leading, also. Or perhaps we should compute them somehow. +% +\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} +\def\pagesizesyyy#1,#2,#3\finish{{% + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi + \globaldefs = 1 + % + \parskip = 3pt plus 2pt minus 1pt + \setleading{\textleading}% + % + \dimen0 = #1\relax + \advance\dimen0 by \voffset + \advance\dimen0 by 1in % reference point for DVI is 1 inch from top of page + % + \dimen2 = \hsize + \advance\dimen2 by \normaloffset + \advance\dimen2 by 1in % reference point is 1 inch from left edge of page + % + \internalpagesizes{#1}{\hsize}% + {\voffset}{\normaloffset}% + {\bindingoffset}{44pt}% + {\dimen0}{\dimen2}% +}} + +% Set default to letter. +% +\letterpaper + +% Default value of \hfuzz, for suppressing warnings about overfull hboxes. +\hfuzz = 1pt + + +\message{and turning on texinfo input format.} + +\def^^L{\par} % remove \outer, so ^L can appear in an @comment + +% DEL is a comment character, in case @c does not suffice. +\catcode`\^^? = 14 + +% Define macros to output various characters with catcode for normal text. +\catcode`\"=\other \def\normaldoublequote{"} +\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix +\catcode`\+=\other \def\normalplus{+} +\catcode`\<=\other \def\normalless{<} +\catcode`\>=\other \def\normalgreater{>} +\catcode`\^=\other \def\normalcaret{^} +\catcode`\_=\other \def\normalunderscore{_} +\catcode`\|=\other \def\normalverticalbar{|} +\catcode`\~=\other \def\normaltilde{~} + +% This macro is used to make a character print one way in \tt +% (where it can probably be output as-is), and another way in other fonts, +% where something hairier probably needs to be done. +% +% #1 is what to print if we are indeed using \tt; #2 is what to print +% otherwise. Since all the Computer Modern typewriter fonts have zero +% interword stretch (and shrink), and it is reasonable to expect all +% typewriter fonts to have this, we can check that font parameter. +% +\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} + +% Same as above, but check for italic font. Actually this also catches +% non-italic slanted fonts since it is impossible to distinguish them from +% italic fonts. But since this is only used by $ and it uses \sl anyway +% this is not a problem. +\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} + +% Set catcodes for Texinfo file + +% Active characters for printing the wanted glyph. +% Most of these we simply print from the \tt font, but for some, we can +% use math or other variants that look better in normal text. +% +\catcode`\"=\active +\def\activedoublequote{{\tt\char34}} +\let"=\activedoublequote +\catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde +\chardef\hatchar=`\^ +\catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat + +\catcode`\_=\active +\def_{\ifusingtt\normalunderscore\_} +\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } +\let\realunder=_ + +\catcode`\|=\active \def|{{\tt\char124}} + +\chardef \less=`\< +\catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless +\chardef \gtr=`\> +\catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr +\catcode`\+=\active \def+{{\tt \char 43}} +\catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix +\catcode`\-=\active \let-=\normaldash + + +% used for headline/footline in the output routine, in case the page +% breaks in the middle of an @tex block. +\def\texinfochars{% + \let< = \activeless + \let> = \activegtr + \let~ = \activetilde + \let^ = \activehat + \markupsetuplqdefault \markupsetuprqdefault + \let\b = \strong + \let\i = \smartitalic + % in principle, all other definitions in \tex have to be undone too. +} + +% Used sometimes to turn off (effectively) the active characters even after +% parsing them. +\def\turnoffactive{% + \normalturnoffactive + \otherbackslash +} + +\catcode`\@=0 + +% \backslashcurfont outputs one backslash character in current font, +% as in \char`\\. +\global\chardef\backslashcurfont=`\\ +\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work + +% \realbackslash is an actual character `\' with catcode other, and +% \doublebackslash is two of them (for the pdf outlines). +{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} + +% In Texinfo, backslash is an active character; it prints the backslash +% in fixed width font. +\catcode`\\=\active % @ for escape char from now on. + +% Print a typewriter backslash. For math mode, we can't simply use +% \backslashcurfont: the story here is that in math mode, the \char +% of \backslashcurfont ends up printing the roman \ from the math symbol +% font (because \char in math mode uses the \mathcode, and plain.tex +% sets \mathcode`\\="026E). Hence we use an explicit \mathchar, +% which is the decimal equivalent of "715c (class 7, e.g., use \fam; +% ignored family value; char position "5C). We can't use " for the +% usual hex value because it has already been made active. + +@def@ttbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} +@let@backslashchar = @ttbackslash % @backslashchar{} is for user documents. + +% \rawbackslash defines an active \ to do \backslashcurfont. +% \otherbackslash defines an active \ to be a literal `\' character with +% catcode other. We switch back and forth between these. +@gdef@rawbackslash{@let\=@backslashcurfont} +@gdef@otherbackslash{@let\=@realbackslash} + +% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of +% the literal character `\'. +% +{@catcode`- = @active + @gdef@normalturnoffactive{% + @passthroughcharstrue + @let-=@normaldash + @let"=@normaldoublequote + @let$=@normaldollar %$ font-lock fix + @let+=@normalplus + @let<=@normalless + @let>=@normalgreater + @let^=@normalcaret + @let_=@normalunderscore + @let|=@normalverticalbar + @let~=@normaltilde + @let\=@ttbackslash + @markupsetuplqdefault + @markupsetuprqdefault + @unsepspaces + } +} + +% If a .fmt file is being used, characters that might appear in a file +% name cannot be active until we have parsed the command line. +% So turn them off again, and have @fixbackslash turn them back on. +@catcode`+=@other @catcode`@_=@other + +% \enablebackslashhack - allow file to begin `\input texinfo' +% +% If a .fmt file is being used, we don't want the `\input texinfo' to show up. +% That is what \eatinput is for; after that, the `\' should revert to printing +% a backslash. +% If the file did not have a `\input texinfo', then it is turned off after +% the first line; otherwise the first `\' in the file would cause an error. +% This is used on the very last line of this file, texinfo.tex. +% We also use @c to call @fixbackslash, in case ends of lines are hidden. +{ +@catcode`@^=7 +@catcode`@^^M=13@gdef@enablebackslashhack{% + @global@let\ = @eatinput% + @catcode`@^^M=13% + @def@c{@fixbackslash@c}% + % Definition for the newline at the end of this file. + @def ^^M{@let^^M@secondlinenl}% + % Definition for a newline in the main Texinfo file. + @gdef @secondlinenl{@fixbackslash}% + % In case the first line has a whole-line command on it + @let@originalparsearg@parsearg + @def@parsearg{@fixbackslash@originalparsearg} +}} + +{@catcode`@^=7 @catcode`@^^M=13% +@gdef@eatinput input texinfo#1^^M{@fixbackslash}} + +% Emergency active definition of newline, in case an active newline token +% appears by mistake. +{@catcode`@^=7 @catcode13=13% +@gdef@enableemergencynewline{% + @gdef^^M{% + @par% + %<warning: active newline>@par% +}}} + + +@gdef@fixbackslash{% + @ifx\@eatinput @let\ = @ttbackslash @fi + @catcode13=5 % regular end of line + @enableemergencynewline + @let@c=@texinfoc + @let@parsearg@originalparsearg + % Also turn back on active characters that might appear in the input + % file name, in case not using a pre-dumped format. + @catcode`+=@active + @catcode`@_=@active + % + % If texinfo.cnf is present on the system, read it. + % Useful for site-wide @afourpaper, etc. This macro, @fixbackslash, gets + % called at the beginning of every Texinfo file. Not opening texinfo.cnf + % directly in this file, texinfo.tex, makes it possible to make a format + % file for Texinfo. + % + @openin 1 texinfo.cnf + @ifeof 1 @else @input texinfo.cnf @fi + @closein 1 +} + + +% Say @foo, not \foo, in error messages. +@escapechar = `@@ + +% These (along with & and #) are made active for url-breaking, so need +% active definitions as the normal characters. +@def@normaldot{.} +@def@normalquest{?} +@def@normalslash{/} + +% These look ok in all fonts, so just make them not special. +% @hashchar{} gets its own user-level command, because of #line. +@catcode`@& = @other @def@normalamp{&} +@catcode`@# = @other @def@normalhash{#} +@catcode`@% = @other @def@normalpercent{%} + +@let @hashchar = @normalhash + +@c Finally, make ` and ' active, so that txicodequoteundirected and +@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we +@c don't make ` and ' active, @code will not get them as active chars. +@c Do this last of all since we use ` in the previous @catcode assignments. +@catcode`@'=@active +@catcode`@`=@active +@markupsetuplqdefault +@markupsetuprqdefault + +@c Local variables: +@c eval: (add-hook 'before-save-hook 'time-stamp) +@c page-delimiter: "^\\\\message\\|emacs-page" +@c time-stamp-start: "def\\\\texinfoversion{" +@c time-stamp-format: "%:y-%02m-%02d.%02H" +@c time-stamp-end: "}" +@c End: + +@c vim:sw=2: + +@enablebackslashhack diff --git a/devspec.en_US/project/recutils/build-aux/useless-if-before-free b/devspec.en_US/project/recutils/build-aux/useless-if-before-free new file mode 100755 index 0000000..6d6b8d4 --- /dev/null +++ b/devspec.en_US/project/recutils/build-aux/useless-if-before-free @@ -0,0 +1,210 @@ +eval '(exit $?0)' && eval 'exec perl -wST "$0" "$@"' + & eval 'exec perl -wST "$0" $argv:q' + if 0; +# Detect instances of "if (p) free (p);". +# Likewise "if (p != 0)", "if (0 != p)", or with NULL; and with braces. + +my $VERSION = '2018-03-07 03:47'; # UTC +# The definition above must lie within the first 8 lines in order +# for the Emacs time-stamp write hook (at end) to update it. +# If you change this file with Emacs, please let the write hook +# do its job. Otherwise, update this string manually. + +# Copyright (C) 2008-2019 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + +# Written by Jim Meyering + +use strict; +use warnings; +use Getopt::Long; + +(my $ME = $0) =~ s|.*/||; + +# use File::Coda; # https://meyering.net/code/Coda/ +END { + defined fileno STDOUT or return; + close STDOUT and return; + warn "$ME: failed to close standard output: $!\n"; + $? ||= 1; +} + +sub usage ($) +{ + my ($exit_code) = @_; + my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); + if ($exit_code != 0) + { + print $STREAM "Try '$ME --help' for more information.\n"; + } + else + { + print $STREAM <<EOF; +Usage: $ME [OPTIONS] FILE... + +Detect any instance in FILE of a useless "if" test before a free call, e.g., +"if (p) free (p);". Any such test may be safely removed without affecting +the semantics of the C code in FILE. Use --name=FOO --name=BAR to also +detect free-like functions named FOO and BAR. + +OPTIONS: + + --list print only the name of each matching FILE (\\0-terminated) + --name=N add name N to the list of \'free\'-like functions to detect; + may be repeated + + --help display this help and exit + --version output version information and exit + +Exit status: + + 0 one or more matches + 1 no match + 2 an error + +EXAMPLE: + +For example, this command prints all removable "if" tests before "free" +and "kfree" calls in the linux kernel sources: + + git ls-files -z |xargs -0 $ME --name=kfree + +EOF + } + exit $exit_code; +} + +sub is_NULL ($) +{ + my ($expr) = @_; + return ($expr eq 'NULL' || $expr eq '0'); +} + +{ + sub EXIT_MATCH {0} + sub EXIT_NO_MATCH {1} + sub EXIT_ERROR {2} + my $err = EXIT_NO_MATCH; + + my $list; + my @name = qw(free); + GetOptions + ( + help => sub { usage 0 }, + version => sub { print "$ME version $VERSION\n"; exit }, + list => \$list, + 'name=s@' => \@name, + ) or usage 1; + + # Make sure we have the right number of non-option arguments. + # Always tell the user why we fail. + @ARGV < 1 + and (warn "$ME: missing FILE argument\n"), usage EXIT_ERROR; + + my $or = join '|', @name; + my $regexp = qr/(?:$or)/; + + # Set the input record separator. + # Note: this makes it impractical to print line numbers. + $/ = '"'; + + my $found_match = 0; + FILE: + foreach my $file (@ARGV) + { + open FH, '<', $file + or (warn "$ME: can't open '$file' for reading: $!\n"), + $err = EXIT_ERROR, next; + while (defined (my $line = <FH>)) + { + # Skip non-matching lines early to save time + $line =~ /\bif\b/ + or next; + while ($line =~ + /\b(if\s*\(\s*([^)]+?)(?:\s*!=\s*([^)]+?))?\s*\) + # 1 2 3 + (?: \s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;| + \s*\{\s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;\s*\}))/sxg) + { + my $all = $1; + my ($lhs, $rhs) = ($2, $3); + my ($free_opnd, $braced_free_opnd) = ($4, $5); + my $non_NULL; + if (!defined $rhs) { $non_NULL = $lhs } + elsif (is_NULL $rhs) { $non_NULL = $lhs } + elsif (is_NULL $lhs) { $non_NULL = $rhs } + else { next } + + # Compare the non-NULL part of the "if" expression and the + # free'd expression, without regard to white space. + $non_NULL =~ tr/ \t//d; + my $e2 = defined $free_opnd ? $free_opnd : $braced_free_opnd; + $e2 =~ tr/ \t//d; + if ($non_NULL eq $e2) + { + $found_match = 1; + $list + and (print "$file\0"), next FILE; + print "$file: $all\n"; + } + } + } + } + continue + { + close FH; + } + + $found_match && $err == EXIT_NO_MATCH + and $err = EXIT_MATCH; + + exit $err; +} + +my $foo = <<'EOF'; +# The above is to *find* them. +# This adjusts them, removing the unnecessary "if (p)" part. + +# FIXME: do something like this as an option (doesn't do braces): +free=xfree +git grep -l -z "$free *(" \ + | xargs -0 useless-if-before-free -l --name="$free" \ + | xargs -0 perl -0x3b -pi -e \ + 's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s+('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\)\s*;)/$2/s' + +# Use the following to remove redundant uses of kfree inside braces. +# Note that -0777 puts perl in slurp-whole-file mode; +# but we have plenty of memory, these days... +free=kfree +git grep -l -z "$free *(" \ + | xargs -0 useless-if-before-free -l --name="$free" \ + | xargs -0 perl -0777 -pi -e \ + 's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s*\{\s*('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\);)\s*\}[^\n]*$/$2/gms' + +Be careful that the result of the above transformation is valid. +If the matched string is followed by "else", then obviously, it won't be. + +When modifying files, refuse to process anything other than a regular file. +EOF + +## Local Variables: +## mode: perl +## indent-tabs-mode: nil +## eval: (add-hook 'before-save-hook 'time-stamp) +## time-stamp-start: "my $VERSION = '" +## time-stamp-format: "%:y-%02m-%02d %02H:%02M" +## time-stamp-time-zone: "UTC0" +## time-stamp-end: "'; # UTC" +## End: diff --git a/devspec.en_US/project/recutils/build-aux/vc-list-files b/devspec.en_US/project/recutils/build-aux/vc-list-files new file mode 100755 index 0000000..af6b1c0 --- /dev/null +++ b/devspec.en_US/project/recutils/build-aux/vc-list-files @@ -0,0 +1,113 @@ +#!/bin/sh +# List version-controlled file names. + +# Print a version string. +scriptversion=2018-03-07.03; # UTC + +# Copyright (C) 2006-2019 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <https://www.gnu.org/licenses/>. + + +# List the specified version-controlled files. +# With no argument, list them all. With a single DIRECTORY argument, +# list the version-controlled files in that directory. + +# If there's an argument, it must be a single, "."-relative directory name. +# cvsu is part of the cvsutils package: http://www.red-bean.com/cvsutils/ + +postprocess= +case $1 in + --help) cat <<EOF +Usage: $0 [-C SRCDIR] [DIR...] + +Output a list of version-controlled files in DIR (default .), relative to +SRCDIR (default .). SRCDIR must be the top directory of a checkout. + +Options: + --help print this help, then exit + --version print version number, then exit + -C SRCDIR change directory to SRCDIR before generating list + +Report bugs and patches to <bug-gnulib@gnu.org>. +EOF + exit ;; + + --version) + year=`echo "$scriptversion" | sed 's/[^0-9].*//'` + cat <<EOF +vc-list-files $scriptversion +Copyright (C) $year Free Software Foundation, Inc, +License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html> +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +EOF + exit ;; + + -C) + test "$2" = . || postprocess="| sed 's|^|$2/|'" + cd "$2" || exit 1 + shift; shift ;; +esac + +test $# = 0 && set . + +for dir +do + if test -d .git || test -f .git; then + test "x$dir" = x. \ + && dir= sed_esc= \ + || { dir="$dir/"; sed_esc=`echo "$dir"|env sed 's,\([\\/]\),\\\\\1,g'`; } + # Ignore git symlinks - either they point into the tree, in which case + # we don't need to visit the target twice, or they point somewhere + # else (often into a submodule), in which case the content does not + # belong to this package. + eval exec git ls-tree -r 'HEAD:"$dir"' \ + \| sed -n '"s/^100[^ ]*./$sed_esc/p"' $postprocess + elif test -d .hg; then + eval exec hg locate '"$dir/*"' $postprocess + elif test -d .bzr; then + test "$postprocess" = '' && postprocess="| sed 's|^\./||'" + eval exec bzr ls -R --versioned '"$dir"' $postprocess + elif test -d CVS; then + test "$postprocess" = '' && postprocess="| sed 's|^\./||'" + if test -x build-aux/cvsu; then + eval build-aux/cvsu --find --types=AFGM '"$dir"' $postprocess + elif (cvsu --help) >/dev/null 2>&1; then + eval cvsu --find --types=AFGM '"$dir"' $postprocess + else + eval awk -F/ \''{ \ + if (!$1 && $3 !~ /^-/) { \ + f=FILENAME; \ + if (f ~ /CVS\/Entries$/) \ + f = substr(f, 1, length(f)-11); \ + print f $2; \ + }}'\'' \ + `find "$dir" -name Entries -print` /dev/null' $postprocess + fi + elif test -d .svn; then + eval exec svn list -R '"$dir"' $postprocess + else + echo "$0: Failed to determine type of version control used in `pwd`" 1>&2 + exit 1 + fi +done + +# Local variables: +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: diff --git a/devspec.en_US/project/recutils/build-aux/ylwrap b/devspec.en_US/project/recutils/build-aux/ylwrap new file mode 100755 index 0000000..7c2d927 --- /dev/null +++ b/devspec.en_US/project/recutils/build-aux/ylwrap @@ -0,0 +1,247 @@ +#! /bin/sh +# ylwrap - wrapper for lex/yacc invocations. + +scriptversion=2013-01-12.17; # UTC + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# +# Written by Tom Tromey <tromey@cygnus.com>. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to <bug-automake@gnu.org> or send patches to +# <automake-patches@gnu.org>. + +get_dirname () +{ + case $1 in + */*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';; + # Otherwise, we want the empty string (not "."). + esac +} + +# guard FILE +# ---------- +# The CPP macro used to guard inclusion of FILE. +guard () +{ + printf '%s\n' "$1" \ + | sed \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ + -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g' \ + -e 's/__*/_/g' +} + +# quote_for_sed [STRING] +# ---------------------- +# Return STRING (or stdin) quoted to be used as a sed pattern. +quote_for_sed () +{ + case $# in + 0) cat;; + 1) printf '%s\n' "$1";; + esac \ + | sed -e 's|[][\\.*]|\\&|g' +} + +case "$1" in + '') + echo "$0: No files given. Try '$0 --help' for more information." 1>&2 + exit 1 + ;; + --basedir) + basedir=$2 + shift 2 + ;; + -h|--h*) + cat <<\EOF +Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]... + +Wrapper for lex/yacc invocations, renaming files as desired. + + INPUT is the input file + OUTPUT is one file PROG generates + DESIRED is the file we actually want instead of OUTPUT + PROGRAM is program to run + ARGS are passed to PROG + +Any number of OUTPUT,DESIRED pairs may be used. + +Report bugs to <bug-automake@gnu.org>. +EOF + exit $? + ;; + -v|--v*) + echo "ylwrap $scriptversion" + exit $? + ;; +esac + + +# The input. +input=$1 +shift +# We'll later need for a correct munging of "#line" directives. +input_sub_rx=`get_dirname "$input" | quote_for_sed` +case $input in + [\\/]* | ?:[\\/]*) + # Absolute path; do nothing. + ;; + *) + # Relative path. Make it absolute. + input=`pwd`/$input + ;; +esac +input_rx=`get_dirname "$input" | quote_for_sed` + +# Since DOS filename conventions don't allow two dots, +# the DOS version of Bison writes out y_tab.c instead of y.tab.c +# and y_tab.h instead of y.tab.h. Test to see if this is the case. +y_tab_nodot=false +if test -f y_tab.c || test -f y_tab.h; then + y_tab_nodot=true +fi + +# The parser itself, the first file, is the destination of the .y.c +# rule in the Makefile. +parser=$1 + +# A sed program to s/FROM/TO/g for all the FROM/TO so that, for +# instance, we rename #include "y.tab.h" into #include "parse.h" +# during the conversion from y.tab.c to parse.c. +sed_fix_filenames= + +# Also rename header guards, as Bison 2.7 for instance uses its header +# guard in its implementation file. +sed_fix_header_guards= + +while test $# -ne 0; do + if test x"$1" = x"--"; then + shift + break + fi + from=$1 + # Handle y_tab.c and y_tab.h output by DOS + if $y_tab_nodot; then + case $from in + "y.tab.c") from=y_tab.c;; + "y.tab.h") from=y_tab.h;; + esac + fi + shift + to=$1 + shift + sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;" + sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;" +done + +# The program to run. +prog=$1 +shift +# Make any relative path in $prog absolute. +case $prog in + [\\/]* | ?:[\\/]*) ;; + *[\\/]*) prog=`pwd`/$prog ;; +esac + +dirname=ylwrap$$ +do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret' +trap "ret=129; $do_exit" 1 +trap "ret=130; $do_exit" 2 +trap "ret=141; $do_exit" 13 +trap "ret=143; $do_exit" 15 +mkdir $dirname || exit 1 + +cd $dirname + +case $# in + 0) "$prog" "$input" ;; + *) "$prog" "$@" "$input" ;; +esac +ret=$? + +if test $ret -eq 0; then + for from in * + do + to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"` + if test -f "$from"; then + # If $2 is an absolute path name, then just use that, + # otherwise prepend '../'. + case $to in + [\\/]* | ?:[\\/]*) target=$to;; + *) target=../$to;; + esac + + # Do not overwrite unchanged header files to avoid useless + # recompilations. Always update the parser itself: it is the + # destination of the .y.c rule in the Makefile. Divert the + # output of all other files to a temporary file so we can + # compare them to existing versions. + if test $from != $parser; then + realtarget=$target + target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'` + fi + + # Munge "#line" or "#" directives. Don't let the resulting + # debug information point at an absolute srcdir. Use the real + # output file name, not yy.lex.c for instance. Adjust the + # include guards too. + sed -e "/^#/!b" \ + -e "s|$input_rx|$input_sub_rx|" \ + -e "$sed_fix_filenames" \ + -e "$sed_fix_header_guards" \ + "$from" >"$target" || ret=$? + + # Check whether files must be updated. + if test "$from" != "$parser"; then + if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then + echo "$to is unchanged" + rm -f "$target" + else + echo "updating $to" + mv -f "$target" "$realtarget" + fi + fi + else + # A missing file is only an error for the parser. This is a + # blatant hack to let us support using "yacc -d". If -d is not + # specified, don't fail when the header file is "missing". + if test "$from" = "$parser"; then + ret=1 + fi + fi + done +fi + +# Remove the directory. +cd .. +rm -rf $dirname + +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/devspec.en_US/project/recutils/config.log b/devspec.en_US/project/recutils/config.log new file mode 100755 index 0000000..5defa9a --- /dev/null +++ b/devspec.en_US/project/recutils/config.log @@ -0,0 +1,22975 @@ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by GNU recutils configure 1.8, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ ./configure + +## --------- ## +## Platform. ## +## --------- ## + +hostname = ubuntu +uname -m = i686 +uname -r = 4.4.0-31-generic +uname -s = Linux +uname -v = #50-Ubuntu SMP Wed Jul 13 00:06:14 UTC 2016 + +/usr/bin/uname -p = unknown +/bin/uname -X = unknown + +/bin/arch = unknown +/usr/bin/arch -k = unknown +/usr/convex/getsysinfo = unknown +/usr/bin/hostinfo = unknown +/bin/machine = unknown +/usr/bin/oslevel = unknown +/bin/universe = unknown + +PATH: /home/devenkong/bin +PATH: /home/devenkong/.local/bin +PATH: /home/devenkong/bin +PATH: /home/devenkong/.local/bin +PATH: /mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/sbin +PATH: /mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/bin +PATH: /mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/sbin +PATH: /mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/bin +PATH: /usr/local/sbin +PATH: /usr/local/bin +PATH: /usr/sbin +PATH: /usr/bin +PATH: /sbin +PATH: /bin +PATH: /mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/ +PATH: /home/devenkong/bin +PATH: /mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/ +PATH: /mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/ + + +## ----------- ## +## Core tests. ## +## ----------- ## + +configure:3960: checking for a BSD-compatible install +configure:4028: result: /usr/bin/install -c +configure:4039: checking whether build environment is sane +configure:4094: result: yes +configure:4245: checking for a thread-safe mkdir -p +configure:4284: result: /bin/mkdir -p +configure:4291: checking for gawk +configure:4307: found /usr/bin/gawk +configure:4318: result: gawk +configure:4329: checking whether make sets $(MAKE) +configure:4351: result: yes +configure:4380: checking whether make supports nested variables +configure:4397: result: yes +configure:4531: checking build system type +configure:4545: result: i686-pc-linux-gnu +configure:4565: checking host system type +configure:4578: result: i686-pc-linux-gnu +configure:4605: autobuild project... GNU recutils +configure:4611: autobuild revision... 1.8 +configure:4616: autobuild hostname... ubuntu +configure:4627: autobuild timestamp... 20221012T092906Z +configure:4680: checking for gcc +configure:4696: found /usr/bin/gcc +configure:4707: result: gcc +configure:4936: checking for C compiler version +configure:4945: gcc --version >&5 +gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609 +Copyright (C) 2015 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +configure:4956: $? = 0 +configure:4945: gcc -v >&5 +Using built-in specs. +COLLECT_GCC=gcc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/5/lto-wrapper +Target: i686-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.12' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-i386/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-i386 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-i386 --with-arch-directory=i386 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-targets=all --enable-multiarch --disable-werror --with-arch-32=i686 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu +Thread model: posix +gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12) +configure:4956: $? = 0 +configure:4945: gcc -V >&5 +gcc: error: unrecognized command line option '-V' +gcc: fatal error: no input files +compilation terminated. +configure:4956: $? = 1 +configure:4945: gcc -qversion >&5 +gcc: error: unrecognized command line option '-qversion' +gcc: fatal error: no input files +compilation terminated. +configure:4956: $? = 1 +configure:4976: checking whether the C compiler works +configure:4998: gcc conftest.c >&5 +configure:5002: $? = 0 +configure:5050: result: yes +configure:5053: checking for C compiler default output file name +configure:5055: result: a.out +configure:5061: checking for suffix of executables +configure:5068: gcc -o conftest conftest.c >&5 +configure:5072: $? = 0 +configure:5094: result: +configure:5116: checking whether we are cross compiling +configure:5124: gcc -o conftest conftest.c >&5 +configure:5128: $? = 0 +configure:5135: ./conftest +configure:5139: $? = 0 +configure:5154: result: no +configure:5159: checking for suffix of object files +configure:5181: gcc -c conftest.c >&5 +configure:5185: $? = 0 +configure:5206: result: o +configure:5210: checking whether we are using the GNU C compiler +configure:5229: gcc -c conftest.c >&5 +configure:5229: $? = 0 +configure:5238: result: yes +configure:5247: checking whether gcc accepts -g +configure:5267: gcc -c -g conftest.c >&5 +configure:5267: $? = 0 +configure:5308: result: yes +configure:5325: checking for gcc option to accept ISO C89 +configure:5388: gcc -c -g -O2 conftest.c >&5 +configure:5388: $? = 0 +configure:5401: result: none needed +configure:5426: checking whether gcc understands -c and -o together +configure:5448: gcc -c conftest.c -o conftest2.o +configure:5451: $? = 0 +configure:5448: gcc -c conftest.c -o conftest2.o +configure:5451: $? = 0 +configure:5463: result: yes +configure:5491: checking for style of include used by make +configure:5519: result: GNU +configure:5545: checking dependency style of gcc +configure:5656: result: gcc3 +configure:5677: checking how to run the C preprocessor +configure:5708: gcc -E conftest.c +configure:5708: $? = 0 +configure:5722: gcc -E conftest.c +conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory +compilation terminated. +configure:5722: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| /* end confdefs.h. */ +| #include <ac_nonexistent.h> +configure:5747: result: gcc -E +configure:5767: gcc -E conftest.c +configure:5767: $? = 0 +configure:5781: gcc -E conftest.c +conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory +compilation terminated. +configure:5781: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| /* end confdefs.h. */ +| #include <ac_nonexistent.h> +configure:5810: checking for grep that handles long lines and -e +configure:5868: result: /bin/grep +configure:5873: checking for egrep +configure:5935: result: /bin/grep -E +configure:5940: checking for ANSI C header files +configure:5960: gcc -c -g -O2 conftest.c >&5 +configure:5960: $? = 0 +configure:6033: gcc -o conftest -g -O2 conftest.c >&5 +configure:6033: $? = 0 +configure:6033: ./conftest +configure:6033: $? = 0 +configure:6044: result: yes +configure:6057: checking for sys/types.h +configure:6057: gcc -c -g -O2 conftest.c >&5 +configure:6057: $? = 0 +configure:6057: result: yes +configure:6057: checking for sys/stat.h +configure:6057: gcc -c -g -O2 conftest.c >&5 +configure:6057: $? = 0 +configure:6057: result: yes +configure:6057: checking for stdlib.h +configure:6057: gcc -c -g -O2 conftest.c >&5 +configure:6057: $? = 0 +configure:6057: result: yes +configure:6057: checking for string.h +configure:6057: gcc -c -g -O2 conftest.c >&5 +configure:6057: $? = 0 +configure:6057: result: yes +configure:6057: checking for memory.h +configure:6057: gcc -c -g -O2 conftest.c >&5 +configure:6057: $? = 0 +configure:6057: result: yes +configure:6057: checking for strings.h +configure:6057: gcc -c -g -O2 conftest.c >&5 +configure:6057: $? = 0 +configure:6057: result: yes +configure:6057: checking for inttypes.h +configure:6057: gcc -c -g -O2 conftest.c >&5 +configure:6057: $? = 0 +configure:6057: result: yes +configure:6057: checking for stdint.h +configure:6057: gcc -c -g -O2 conftest.c >&5 +configure:6057: $? = 0 +configure:6057: result: yes +configure:6057: checking for unistd.h +configure:6057: gcc -c -g -O2 conftest.c >&5 +configure:6057: $? = 0 +configure:6057: result: yes +configure:6070: checking minix/config.h usability +configure:6070: gcc -c -g -O2 conftest.c >&5 +conftest.c:54:26: fatal error: minix/config.h: No such file or directory +compilation terminated. +configure:6070: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| #include <minix/config.h> +configure:6070: result: no +configure:6070: checking minix/config.h presence +configure:6070: gcc -E conftest.c +conftest.c:21:26: fatal error: minix/config.h: No such file or directory +compilation terminated. +configure:6070: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| /* end confdefs.h. */ +| #include <minix/config.h> +configure:6070: result: no +configure:6070: checking for minix/config.h +configure:6070: result: no +configure:6094: checking whether it is safe to define __EXTENSIONS__ +configure:6112: gcc -c -g -O2 conftest.c >&5 +configure:6112: $? = 0 +configure:6119: result: yes +configure:6152: checking whether _XOPEN_SOURCE should be defined +configure:6171: gcc -c -g -O2 conftest.c >&5 +configure:6171: $? = 0 +configure:6195: result: no +configure:6212: checking for Minix Amsterdam compiler +configure:6236: result: no +configure:6293: checking for ar +configure:6309: found /usr/bin/ar +configure:6320: result: ar +configure:6395: checking for ranlib +configure:6411: found /usr/bin/ranlib +configure:6422: result: ranlib +configure:6478: checking for _LARGEFILE_SOURCE value needed for large files +configure:6497: gcc -o conftest -g -O2 conftest.c >&5 +configure:6497: $? = 0 +configure:6525: result: no +configure:6553: checking for special C compiler options needed for large files +configure:6598: result: no +configure:6604: checking for _FILE_OFFSET_BITS value needed for large files +configure:6629: gcc -c -g -O2 conftest.c >&5 +conftest.c:43:33: warning: left shift count >= width of type [-Wshift-count-overflow] + #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + ^ +conftest.c:44:23: note: in expansion of macro 'LARGE_OFF_T' + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + ^ +conftest.c:43:57: warning: left shift count >= width of type [-Wshift-count-overflow] + #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + ^ +conftest.c:44:23: note: in expansion of macro 'LARGE_OFF_T' + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + ^ +conftest.c:43:33: warning: left shift count >= width of type [-Wshift-count-overflow] + #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + ^ +conftest.c:45:27: note: in expansion of macro 'LARGE_OFF_T' + && LARGE_OFF_T % 2147483647 == 1) + ^ +conftest.c:43:57: warning: left shift count >= width of type [-Wshift-count-overflow] + #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + ^ +conftest.c:45:27: note: in expansion of macro 'LARGE_OFF_T' + && LARGE_OFF_T % 2147483647 == 1) + ^ +conftest.c:44:7: error: variably modified 'off_t_is_large' at file scope + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + ^ +configure:6629: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| /* end confdefs.h. */ +| #include <sys/types.h> +| /* Check that off_t can represent 2**63 - 1 correctly. +| We can't simply define LARGE_OFF_T to be 9223372036854775807, +| since some C++ compilers masquerading as C compilers +| incorrectly reject 9223372036854775807. */ +| #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +| int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 +| && LARGE_OFF_T % 2147483647 == 1) +| ? 1 : -1]; +| int +| main () +| { +| +| ; +| return 0; +| } +configure:6653: gcc -c -g -O2 conftest.c >&5 +configure:6653: $? = 0 +configure:6661: result: 64 +configure:6752: checking for gcc option to accept ISO C99 +configure:6901: gcc -c -g -O2 conftest.c >&5 +configure:6901: $? = 0 +configure:6914: result: none needed +configure:7022: checking for gcc option to accept ISO Standard C +configure:7033: result: none needed +configure:7111: autobuild project... GNU recutils +configure:7117: autobuild revision... 1.8 +configure:7122: autobuild hostname... ubuntu +configure:7133: autobuild timestamp... 20221012T092907Z +configure:7413: checking how to print strings +configure:7440: result: printf +configure:7461: checking for a sed that does not truncate output +configure:7525: result: /bin/sed +configure:7543: checking for fgrep +configure:7605: result: /bin/grep -F +configure:7640: checking for ld used by gcc +configure:7707: result: /usr/bin/ld +configure:7714: checking if the linker (/usr/bin/ld) is GNU ld +configure:7729: result: yes +configure:7741: checking for BSD- or MS-compatible name lister (nm) +configure:7795: result: /usr/bin/nm -B +configure:7925: checking the name lister (/usr/bin/nm -B) interface +configure:7932: gcc -c -g -O2 conftest.c >&5 +configure:7935: /usr/bin/nm -B "conftest.o" +configure:7938: output +00000000 B some_variable +configure:7945: result: BSD nm +configure:7948: checking whether ln -s works +configure:7952: result: yes +configure:7960: checking the maximum length of command line arguments +configure:8091: result: 1572864 +configure:8139: checking how to convert i686-pc-linux-gnu file names to i686-pc-linux-gnu format +configure:8179: result: func_convert_file_noop +configure:8186: checking how to convert i686-pc-linux-gnu file names to toolchain format +configure:8206: result: func_convert_file_noop +configure:8213: checking for /usr/bin/ld option to reload object files +configure:8220: result: -r +configure:8294: checking for objdump +configure:8310: found /usr/bin/objdump +configure:8321: result: objdump +configure:8353: checking how to recognize dependent libraries +configure:8553: result: pass_all +configure:8638: checking for dlltool +configure:8668: result: no +configure:8698: checking how to associate runtime and link libraries +configure:8725: result: printf %s\n +configure:8849: checking for archiver @FILE support +configure:8866: gcc -c -g -O2 conftest.c >&5 +configure:8866: $? = 0 +configure:8869: ar cru libconftest.a @conftest.lst >&5 +ar: `u' modifier ignored since `D' is the default (see `U') +configure:8872: $? = 0 +configure:8877: ar cru libconftest.a @conftest.lst >&5 +ar: `u' modifier ignored since `D' is the default (see `U') +ar: conftest.o: No such file or directory +configure:8880: $? = 1 +configure:8892: result: @ +configure:8950: checking for strip +configure:8966: found /usr/bin/strip +configure:8977: result: strip +configure:9049: checking for ranlib +configure:9076: result: ranlib +configure:9178: checking command to parse /usr/bin/nm -B output from gcc object +configure:9331: gcc -c -g -O2 conftest.c >&5 +configure:9334: $? = 0 +configure:9338: /usr/bin/nm -B conftest.o \| sed -n -e 's/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' | sed '/ __gnu_lto/d' \> conftest.nm +configure:9341: $? = 0 +configure:9407: gcc -o conftest -g -O2 conftest.c conftstm.o >&5 +configure:9410: $? = 0 +configure:9448: result: ok +configure:9495: checking for sysroot +configure:9525: result: no +configure:9532: checking for a working dd +configure:9570: result: /bin/dd +configure:9574: checking how to truncate binary pipes +configure:9589: result: /bin/dd bs=4096 count=1 +configure:9918: checking for mt +configure:9934: found /bin/mt +configure:9945: result: mt +configure:9968: checking if mt is a manifest tool +configure:9974: mt '-?' +configure:9982: result: no +configure:10656: checking for dlfcn.h +configure:10656: gcc -c -g -O2 conftest.c >&5 +configure:10656: $? = 0 +configure:10656: result: yes +configure:10912: checking for objdir +configure:10927: result: .libs +configure:11191: checking if gcc supports -fno-rtti -fno-exceptions +configure:11209: gcc -c -g -O2 -fno-rtti -fno-exceptions conftest.c >&5 +cc1: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C +configure:11213: $? = 0 +configure:11226: result: no +configure:11584: checking for gcc option to produce PIC +configure:11591: result: -fPIC -DPIC +configure:11599: checking if gcc PIC flag -fPIC -DPIC works +configure:11617: gcc -c -g -O2 -fPIC -DPIC -DPIC conftest.c >&5 +configure:11621: $? = 0 +configure:11634: result: yes +configure:11663: checking if gcc static flag -static works +configure:11691: result: yes +configure:11706: checking if gcc supports -c -o file.o +configure:11727: gcc -c -g -O2 -o out/conftest2.o conftest.c >&5 +configure:11731: $? = 0 +configure:11753: result: yes +configure:11761: checking if gcc supports -c -o file.o +configure:11808: result: yes +configure:11841: checking whether the gcc linker (/usr/bin/ld) supports shared libraries +configure:13104: result: yes +configure:13141: checking whether -lc should be explicitly linked in +configure:13149: gcc -c -g -O2 conftest.c >&5 +configure:13152: $? = 0 +configure:13167: gcc -shared -fPIC -DPIC conftest.o -v -Wl,-soname -Wl,conftest -o conftest 2\>\&1 \| /bin/grep -lc \>/dev/null 2\>\&1 +configure:13170: $? = 0 +configure:13184: result: no +configure:13344: checking dynamic linker characteristics +configure:13925: gcc -o conftest -g -O2 -Wl,-rpath -Wl,/foo conftest.c >&5 +configure:13925: $? = 0 +configure:14174: result: GNU/Linux ld.so +configure:14296: checking how to hardcode library paths into programs +configure:14321: result: immediate +configure:14869: checking whether stripping libraries is possible +configure:14874: result: yes +configure:14909: checking if libtool supports shared libraries +configure:14911: result: yes +configure:14914: checking whether to build shared libraries +configure:14939: result: yes +configure:14942: checking whether to build static libraries +configure:14946: result: yes +configure:14983: checking for gcc option to accept ISO C99 +configure:15145: result: none needed +configure:15202: checking for fchmod +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for btowc +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for canonicalize_file_name +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for getcwd +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for readlink +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for realpath +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for _set_invalid_parameter_handler +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +/tmp/ccuouSnw.o: In function `main': +/mnt/lfs/build/recutils/recutils-1.8/conftest.c:82: undefined reference to `_set_invalid_parameter_handler' +collect2: error: ld returned 1 exit status +configure:15202: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| /* end confdefs.h. */ +| /* Define _set_invalid_parameter_handler to an innocuous variant, in case <limits.h> declares _set_invalid_parameter_handler. +| For example, HP-UX 11i <limits.h> declares gettimeofday. */ +| #define _set_invalid_parameter_handler innocuous__set_invalid_parameter_handler +| +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char _set_invalid_parameter_handler (); below. +| Prefer <limits.h> to <assert.h> if __STDC__ is defined, since +| <limits.h> exists even on freestanding compilers. */ +| +| #ifdef __STDC__ +| # include <limits.h> +| #else +| # include <assert.h> +| #endif +| +| #undef _set_invalid_parameter_handler +| +| /* Override any GCC internal prototype to avoid an error. +| Use char because int might match the return type of a GCC +| builtin and then its argument prototype would still apply. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| char _set_invalid_parameter_handler (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined __stub__set_invalid_parameter_handler || defined __stub____set_invalid_parameter_handler +| choke me +| #endif +| +| int +| main () +| { +| return _set_invalid_parameter_handler (); +| ; +| return 0; +| } +configure:15202: result: no +configure:15202: checking for faccessat +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for fcntl +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for symlink +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for flock +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for vasnprintf +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +/tmp/cc2xLO8Q.o: In function `main': +/mnt/lfs/build/recutils/recutils-1.8/conftest.c:86: undefined reference to `vasnprintf' +collect2: error: ld returned 1 exit status +configure:15202: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| /* end confdefs.h. */ +| /* Define vasnprintf to an innocuous variant, in case <limits.h> declares vasnprintf. +| For example, HP-UX 11i <limits.h> declares gettimeofday. */ +| #define vasnprintf innocuous_vasnprintf +| +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char vasnprintf (); below. +| Prefer <limits.h> to <assert.h> if __STDC__ is defined, since +| <limits.h> exists even on freestanding compilers. */ +| +| #ifdef __STDC__ +| # include <limits.h> +| #else +| # include <assert.h> +| #endif +| +| #undef vasnprintf +| +| /* Override any GCC internal prototype to avoid an error. +| Use char because int might match the return type of a GCC +| builtin and then its argument prototype would still apply. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| char vasnprintf (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined __stub_vasnprintf || defined __stub___vasnprintf +| choke me +| #endif +| +| int +| main () +| { +| return vasnprintf (); +| ; +| return 0; +| } +configure:15202: result: no +configure:15202: checking for snprintf +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c:75:6: warning: conflicting types for built-in function 'snprintf' + char snprintf (); + ^ +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for __fseterr +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +/tmp/ccPmyvYM.o: In function `main': +/mnt/lfs/build/recutils/recutils-1.8/conftest.c:87: undefined reference to `__fseterr' +collect2: error: ld returned 1 exit status +configure:15202: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| /* end confdefs.h. */ +| /* Define __fseterr to an innocuous variant, in case <limits.h> declares __fseterr. +| For example, HP-UX 11i <limits.h> declares gettimeofday. */ +| #define __fseterr innocuous___fseterr +| +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char __fseterr (); below. +| Prefer <limits.h> to <assert.h> if __STDC__ is defined, since +| <limits.h> exists even on freestanding compilers. */ +| +| #ifdef __STDC__ +| # include <limits.h> +| #else +| # include <assert.h> +| #endif +| +| #undef __fseterr +| +| /* Override any GCC internal prototype to avoid an error. +| Use char because int might match the return type of a GCC +| builtin and then its argument prototype would still apply. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| char __fseterr (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined __stub___fseterr || defined __stub_____fseterr +| choke me +| #endif +| +| int +| main () +| { +| return __fseterr (); +| ; +| return 0; +| } +configure:15202: result: no +configure:15202: checking for __fwriting +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for getdelim +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for getdtablesize +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for getpass +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for __fsetlocking +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for getprogname +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +/tmp/cc1Zs5Cb.o: In function `main': +/mnt/lfs/build/recutils/recutils-1.8/conftest.c:92: undefined reference to `getprogname' +collect2: error: ld returned 1 exit status +configure:15202: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| /* end confdefs.h. */ +| /* Define getprogname to an innocuous variant, in case <limits.h> declares getprogname. +| For example, HP-UX 11i <limits.h> declares gettimeofday. */ +| #define getprogname innocuous_getprogname +| +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char getprogname (); below. +| Prefer <limits.h> to <assert.h> if __STDC__ is defined, since +| <limits.h> exists even on freestanding compilers. */ +| +| #ifdef __STDC__ +| # include <limits.h> +| #else +| # include <assert.h> +| #endif +| +| #undef getprogname +| +| /* Override any GCC internal prototype to avoid an error. +| Use char because int might match the return type of a GCC +| builtin and then its argument prototype would still apply. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| char getprogname (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined __stub_getprogname || defined __stub___getprogname +| choke me +| #endif +| +| int +| main () +| { +| return getprogname (); +| ; +| return 0; +| } +configure:15202: result: no +configure:15202: checking for getexecname +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +/tmp/ccl2U3Ih.o: In function `main': +/mnt/lfs/build/recutils/recutils-1.8/conftest.c:92: undefined reference to `getexecname' +collect2: error: ld returned 1 exit status +configure:15202: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| /* end confdefs.h. */ +| /* Define getexecname to an innocuous variant, in case <limits.h> declares getexecname. +| For example, HP-UX 11i <limits.h> declares gettimeofday. */ +| #define getexecname innocuous_getexecname +| +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char getexecname (); below. +| Prefer <limits.h> to <assert.h> if __STDC__ is defined, since +| <limits.h> exists even on freestanding compilers. */ +| +| #ifdef __STDC__ +| # include <limits.h> +| #else +| # include <assert.h> +| #endif +| +| #undef getexecname +| +| /* Override any GCC internal prototype to avoid an error. +| Use char because int might match the return type of a GCC +| builtin and then its argument prototype would still apply. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| char getexecname (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined __stub_getexecname || defined __stub___getexecname +| choke me +| #endif +| +| int +| main () +| { +| return getexecname (); +| ; +| return 0; +| } +configure:15202: result: no +configure:15202: checking for gettimeofday +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for lstat +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for mbsinit +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for mbrtowc +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for mbrlen +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for mprotect +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for mkostemp +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for mkstemp +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for tzset +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for nl_langinfo +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for isblank +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c:91:6: warning: conflicting types for built-in function 'isblank' + char isblank (); + ^ +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for iswctype +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for link +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for secure_getenv +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for getuid +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for geteuid +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for getgid +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for getegid +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for setenv +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for sigaction +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for sigaltstack +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for siginterrupt +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for strdup +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c:103:6: warning: conflicting types for built-in function 'strdup' + char strdup (); + ^ +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for localtime_r +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for timegm +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for wcrtomb +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for wctob +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +configure:15202: $? = 0 +configure:15202: result: yes +configure:15202: checking for iswcntrl +configure:15202: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c:108:6: warning: conflicting types for built-in function 'iswcntrl' + char iswcntrl (); + ^ +configure:15202: $? = 0 +configure:15202: result: yes +configure:15213: checking for size_t +configure:15213: gcc -c -g -O2 conftest.c >&5 +configure:15213: $? = 0 +configure:15213: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:122:21: error: expected expression before ')' token + if (sizeof ((size_t))) + ^ +configure:15213: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| int +| main () +| { +| if (sizeof ((size_t))) +| return 0; +| ; +| return 0; +| } +configure:15213: result: yes +configure:15226: checking for working alloca.h +configure:15243: gcc -o conftest -g -O2 conftest.c >&5 +configure:15243: $? = 0 +configure:15251: result: yes +configure:15259: checking for alloca +configure:15296: gcc -o conftest -g -O2 conftest.c >&5 +configure:15296: $? = 0 +configure:15304: result: yes +configure:15414: checking for C/C++ restrict keyword +configure:15441: gcc -c -g -O2 conftest.c >&5 +configure:15441: $? = 0 +configure:15449: result: __restrict +configure:15559: checking whether <wchar.h> uses 'inline' correctly +configure:15584: gcc -c -g -O2 conftest1.c >&5 +configure:15587: $? = 0 +configure:15606: gcc -c -g -O2 conftest2.c >&5 +configure:15609: $? = 0 +configure:15622: result: yes +configure:15639: checking for nl_langinfo and CODESET +configure:15655: gcc -o conftest -g -O2 conftest.c >&5 +configure:15655: $? = 0 +configure:15664: result: yes +configure:15675: checking for a traditional french locale +configure:15750: gcc -o conftest -g -O2 conftest.c >&5 +configure:15753: $? = 0 +configure:15809: result: none +configure:15907: checking whether // is distinct from / +configure:15936: result: no +configure:15948: checking whether realpath works +configure:16126: gcc -o conftest -g -O2 conftest.c >&5 +configure:16126: $? = 0 +configure:16126: ./conftest +configure:16126: $? = 0 +configure:16138: result: yes +configure:16154: checking for sys/param.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for sys/socket.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for unistd.h +configure:16154: result: yes +configure:16154: checking for stdio_ext.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for features.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for sys/stat.h +configure:16154: result: yes +configure:16154: checking for getopt.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for sys/cdefs.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for termios.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for sys/time.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for limits.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for wchar.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for stdint.h +configure:16154: result: yes +configure:16154: checking for inttypes.h +configure:16154: result: yes +configure:16154: checking for langinfo.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for xlocale.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for math.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for sys/mman.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for malloc.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for selinux/selinux.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +conftest.c:144:29: fatal error: selinux/selinux.h: No such file or directory +compilation terminated. +configure:16154: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| +| #include <selinux/selinux.h> +configure:16154: result: no +configure:16154: checking for spawn.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for strings.h +configure:16154: result: yes +configure:16154: checking for sys/file.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for sys/wait.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16154: checking for crtdefs.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +conftest.c:148:21: fatal error: crtdefs.h: No such file or directory +compilation terminated. +configure:16154: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| +| #include <crtdefs.h> +configure:16154: result: no +configure:16154: checking for wctype.h +configure:16154: gcc -c -g -O2 conftest.c >&5 +configure:16154: $? = 0 +configure:16154: result: yes +configure:16333: checking if environ is properly declared +configure:16355: gcc -c -g -O2 conftest.c >&5 +conftest.c:121:40: error: conflicting types for 'environ' + extern struct { int foo; } environ; + ^ +In file included from conftest.c:116:0: +/usr/include/unistd.h:548:15: note: previous declaration of 'environ' was here + extern char **environ; + ^ +configure:16355: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| /* end confdefs.h. */ +| #if HAVE_UNISTD_H +| #include <unistd.h> +| #endif +| /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */ +| #include <stdlib.h> +| +| extern struct { int foo; } environ; +| int +| main () +| { +| environ.foo = 1; +| ; +| return 0; +| } +configure:16362: result: yes +configure:16377: checking whether the preprocessor supports include_next +configure:16415: gcc -c -g -O2 -Iconftestd1b -Iconftestd2 conftest.c >&5 +configure:16415: $? = 0 +configure:16436: result: yes +configure:16457: checking whether system header files limit the line length +configure:16480: result: no +configure:16491: checking for complete errno.h +configure:16564: result: yes +configure:16865: checking whether strerror_r is declared +configure:16865: gcc -c -g -O2 conftest.c >&5 +configure:16865: $? = 0 +configure:16865: result: yes +configure:16878: checking for strerror_r +configure:16878: gcc -o conftest -g -O2 conftest.c >&5 +configure:16878: $? = 0 +configure:16878: result: yes +configure:16887: checking whether strerror_r returns char * +configure:16911: gcc -c -g -O2 conftest.c >&5 +configure:16911: $? = 0 +configure:16949: result: yes +configure:16962: checking for uid_t in sys/types.h +configure:16981: result: yes +configure:16992: checking type of array argument to getgroups +configure:17026: gcc -o conftest -g -O2 conftest.c >&5 +configure:17026: $? = 0 +configure:17026: ./conftest +configure:17026: $? = 0 +configure:17051: result: gid_t +configure:17059: checking for mode_t +configure:17059: gcc -c -g -O2 conftest.c >&5 +configure:17059: $? = 0 +configure:17059: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:156:21: error: expected expression before ')' token + if (sizeof ((mode_t))) + ^ +configure:17059: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| int +| main () +| { +| if (sizeof ((mode_t))) +| return 0; +| ; +| return 0; +| } +configure:17059: result: yes +configure:17074: checking for sig_atomic_t +configure:17074: gcc -c -g -O2 conftest.c >&5 +configure:17074: $? = 0 +configure:17074: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:125:27: error: expected expression before ')' token + if (sizeof ((sig_atomic_t))) + ^ +configure:17074: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| /* end confdefs.h. */ +| #include <signal.h> +| +| int +| main () +| { +| if (sizeof ((sig_atomic_t))) +| return 0; +| ; +| return 0; +| } +configure:17074: result: yes +configure:17110: checking for working fcntl.h +configure:17218: gcc -o conftest -g -O2 conftest.c >&5 +configure:17218: $? = 0 +configure:17218: ./conftest +configure:17218: $? = 0 +configure:17234: result: yes +configure:17257: checking for pid_t +configure:17257: gcc -c -g -O2 conftest.c >&5 +configure:17257: $? = 0 +configure:17257: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:159:20: error: expected expression before ')' token + if (sizeof ((pid_t))) + ^ +configure:17257: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| int +| main () +| { +| if (sizeof ((pid_t))) +| return 0; +| ; +| return 0; +| } +configure:17257: result: yes +configure:17546: checking for stdint.h +configure:17563: gcc -c -g -O2 conftest.c >&5 +configure:17563: $? = 0 +configure:17570: result: yes +configure:17581: checking for inttypes.h +configure:17600: gcc -c -g -O2 conftest.c >&5 +configure:17600: $? = 0 +configure:17607: result: yes +configure:17621: checking whether printf supports size specifiers as in C99 +configure:17712: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:142:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0 + ^ +conftest.c:149:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0 + ^ +conftest.c:153:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0 + ^ +conftest.c:157:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0 + ^ +configure:17712: $? = 0 +configure:17712: ./conftest +configure:17712: $? = 0 +configure:17723: result: yes +configure:17728: checking whether printf supports 'long double' arguments +configure:17783: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:133:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0 + ^ +conftest.c:137:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0 + ^ +conftest.c:141:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0 + ^ +configure:17783: $? = 0 +configure:17783: ./conftest +configure:17783: $? = 0 +configure:17794: result: yes +configure:17799: checking whether printf supports infinite 'double' arguments +configure:17918: gcc -o conftest -g -O2 conftest.c >&5 +configure:17918: $? = 0 +configure:17918: ./conftest +configure:17918: $? = 0 +configure:17929: result: yes +configure:17933: checking whether byte ordering is bigendian +configure:17948: gcc -c -g -O2 conftest.c >&5 +conftest.c:126:9: error: unknown type name 'not' + not a universal capable compiler + ^ +conftest.c:126:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'universal' + not a universal capable compiler + ^ +conftest.c:126:15: error: unknown type name 'universal' +configure:17948: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| /* end confdefs.h. */ +| #ifndef __APPLE_CC__ +| not a universal capable compiler +| #endif +| typedef int dummy; +| +configure:17993: gcc -c -g -O2 conftest.c >&5 +configure:17993: $? = 0 +configure:18011: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:132:4: error: unknown type name 'not' + not big endian + ^ +conftest.c:132:12: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'endian' + not big endian + ^ +configure:18011: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| /* end confdefs.h. */ +| #include <sys/types.h> +| #include <sys/param.h> +| +| int +| main () +| { +| #if BYTE_ORDER != BIG_ENDIAN +| not big endian +| #endif +| +| ; +| return 0; +| } +configure:18139: result: no +configure:18159: checking whether long double and double are the same +configure:18180: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:129:13: error: size of array 'check' is negative + typedef int check[sizeof (long double) == sizeof (double) + ^ +configure:18180: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| /* end confdefs.h. */ +| #include <float.h> +| int +| main () +| { +| typedef int check[sizeof (long double) == sizeof (double) +| && LDBL_MANT_DIG == DBL_MANT_DIG +| && LDBL_MAX_EXP == DBL_MAX_EXP +| && LDBL_MIN_EXP == DBL_MIN_EXP +| ? 1 : -1]; +| +| ; +| return 0; +| } +configure:18188: result: no +configure:18212: checking whether printf supports infinite 'long double' arguments +configure:18522: gcc -o conftest -g -O2 conftest.c >&5 +configure:18522: $? = 0 +configure:18522: ./conftest +configure:18522: $? = 0 +configure:18533: result: yes +configure:18543: checking whether printf supports the 'a' and 'A' directives +configure:18640: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:134:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 + ^ +conftest.c:140:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 + ^ +conftest.c:147:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 + ^ +conftest.c:154:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%.0a %d", 1.51, 33, 44, 55) < 0 + ^ +conftest.c:162:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0 + ^ +configure:18640: $? = 0 +configure:18640: ./conftest +configure:18640: $? = 0 +configure:18651: result: yes +configure:18656: checking whether printf supports the 'F' directive +configure:18722: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:134:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0 + ^ +configure:18722: $? = 0 +configure:18722: ./conftest +configure:18722: $? = 0 +configure:18733: result: yes +configure:18738: checking whether printf supports the 'n' directive +configure:18788: gcc -o conftest -g -O2 conftest.c >&5 +configure:18788: $? = 0 +configure:18788: ./conftest +*** %n in writable segment detected *** +./configure: line 2983: 31212 Aborted (core dumped) ./conftest$ac_exeext +configure:18788: $? = 134 +configure: program exited with status 134 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| /* end confdefs.h. */ +| +| #include <stdio.h> +| #include <stdlib.h> +| #include <string.h> +| #ifdef _MSC_VER +| /* See page about "Parameter Validation" on msdn.microsoft.com. */ +| static void cdecl +| invalid_parameter_handler (const wchar_t *expression, +| const wchar_t *function, +| const wchar_t *file, unsigned int line, +| uintptr_t dummy) +| { +| exit (1); +| } +| #endif +| static char fmtstring[10]; +| static char buf[100]; +| int main () +| { +| int count = -1; +| #ifdef _MSC_VER +| _set_invalid_parameter_handler (invalid_parameter_handler); +| #endif +| /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) +| support %n in format strings in read-only memory but not in writable +| memory. */ +| strcpy (fmtstring, "%d %n"); +| if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0 +| || strcmp (buf, "123 ") != 0 +| || count != 4) +| return 1; +| return 0; +| } +configure:18799: result: no +configure:18804: checking whether printf supports the 'ls' directive +configure:18877: gcc -o conftest -g -O2 conftest.c >&5 +configure:18877: $? = 0 +configure:18877: ./conftest +configure:18877: $? = 0 +configure:18888: result: yes +configure:18893: checking whether printf supports POSIX/XSI format strings with positions +configure:18926: gcc -o conftest -g -O2 conftest.c >&5 +configure:18926: $? = 0 +configure:18926: ./conftest +configure:18926: $? = 0 +configure:18937: result: yes +configure:18942: checking whether printf supports the grouping flag +configure:18973: gcc -o conftest -g -O2 conftest.c >&5 +configure:18973: $? = 0 +configure:18973: ./conftest +configure:18973: $? = 0 +configure:18984: result: yes +configure:18989: checking whether printf supports the left-adjust flag correctly +configure:19024: gcc -o conftest -g -O2 conftest.c >&5 +configure:19024: $? = 0 +configure:19024: ./conftest +configure:19024: $? = 0 +configure:19035: result: yes +configure:19040: checking whether printf supports the zero flag correctly +configure:19076: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:133:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%010f", 1.0 / zero, 33, 44, 55) < 0 + ^ +configure:19076: $? = 0 +configure:19076: ./conftest +configure:19076: $? = 0 +configure:19087: result: yes +configure:19092: checking whether printf supports large precisions +configure:19135: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:137:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) + ^ +conftest.c:139:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5) + ^ +conftest.c:141:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5 + ^ +conftest.c:144:21: warning: too many arguments for format [-Wformat-extra-args] + if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5 + ^ +configure:19135: $? = 0 +configure:19135: ./conftest +configure:19135: $? = 0 +configure:19146: result: yes +configure:19159: gcc -c -g -O2 conftest.c >&5 +conftest.c:127:10: error: unknown type name 'not' + not a universal capable compiler + ^ +conftest.c:127:16: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'universal' + not a universal capable compiler + ^ +conftest.c:127:16: error: unknown type name 'universal' +configure:19159: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| /* end confdefs.h. */ +| #ifndef __APPLE_CC__ +| not a universal capable compiler +| #endif +| typedef int dummy; +| +configure:19194: checking whether printf survives out-of-memory conditions +configure:19366: gcc -o conftest -g -O2 conftest.c >&5 +configure:19369: $? = 0 +configure:19373: $? = 0 +configure:19418: result: yes +configure:19436: checking for unsigned long long int +configure:19484: result: yes +configure:19494: checking for long long int +configure:19544: result: yes +configure:19553: checking for wchar_t +configure:19570: gcc -c -g -O2 conftest.c >&5 +configure:19570: $? = 0 +configure:19577: result: yes +configure:19586: checking for wint_t +configure:19611: gcc -c -g -O2 conftest.c >&5 +configure:19611: $? = 0 +configure:19618: result: yes +configure:19625: checking whether wint_t is too small +configure:19653: gcc -c -g -O2 conftest.c >&5 +configure:19653: $? = 0 +configure:19660: result: no +configure:19686: checking for intmax_t +configure:19711: gcc -c -g -O2 conftest.c >&5 +configure:19711: $? = 0 +configure:19718: result: yes +configure:19737: checking where to find the exponent in a 'double' +configure:20051: gcc -o conftest -g -O2 conftest.c >&5 +configure:20051: $? = 0 +configure:20051: ./conftest +configure:20051: $? = 0 +configure:20063: result: word 1 bit 20 +configure:20090: checking whether snprintf returns a byte count as in C99 +configure:20177: gcc -o conftest -g -O2 conftest.c >&5 +configure:20177: $? = 0 +configure:20177: ./conftest +configure:20177: $? = 0 +configure:20188: result: yes +configure:20199: checking for snprintf +configure:20199: result: yes +configure:20199: checking for strnlen +configure:20199: gcc -o conftest -g -O2 conftest.c >&5 +configure:20199: $? = 0 +configure:20199: result: yes +configure:20199: checking for wcslen +configure:20199: gcc -o conftest -g -O2 conftest.c >&5 +configure:20199: $? = 0 +configure:20199: result: yes +configure:20199: checking for wcsnlen +configure:20199: gcc -o conftest -g -O2 conftest.c >&5 +configure:20199: $? = 0 +configure:20199: result: yes +configure:20199: checking for mbrtowc +configure:20199: result: yes +configure:20199: checking for wcrtomb +configure:20199: result: yes +configure:20208: checking whether _snprintf is declared +configure:20208: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:148:10: error: '_snprintf' undeclared (first use in this function) + (void) _snprintf; + ^ +conftest.c:148:10: note: each undeclared identifier is reported only once for each function it appears in +configure:20208: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| +| int +| main () +| { +| #ifndef _snprintf +| #ifdef __cplusplus +| (void) _snprintf; +| #else +| (void) _snprintf; +| #endif +| #endif +| +| ; +| return 0; +| } +configure:20208: result: no +configure:20334: checking whether frexp() can be used without linking with libm +configure:20352: gcc -o conftest -g -O2 conftest.c >&5 +configure:20352: $? = 0 +configure:20361: result: yes +configure:20364: checking whether alarm is declared +configure:20364: gcc -c -g -O2 conftest.c >&5 +configure:20364: $? = 0 +configure:20364: result: yes +configure:20376: checking whether stdin defaults to large file offsets +configure:20400: gcc -o conftest -g -O2 conftest.c >&5 +configure:20400: $? = 0 +configure:20408: result: yes +configure:20586: checking whether fseeko is declared +configure:20586: gcc -c -g -O2 conftest.c >&5 +configure:20586: $? = 0 +configure:20586: result: yes +configure:20605: checking for fseeko +configure:20623: gcc -o conftest -g -O2 conftest.c >&5 +configure:20623: $? = 0 +configure:20632: result: yes +configure:20690: checking whether stat file-mode macros are broken +configure:20717: gcc -c -g -O2 conftest.c >&5 +configure:20717: $? = 0 +configure:20724: result: no +configure:20830: checking for nlink_t +configure:20830: gcc -c -g -O2 conftest.c >&5 +configure:20830: $? = 0 +configure:20830: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:150:22: error: expected expression before ')' token + if (sizeof ((nlink_t))) + ^ +configure:20830: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| /* end confdefs.h. */ +| #include <sys/types.h> +| #include <sys/stat.h> +| +| int +| main () +| { +| if (sizeof ((nlink_t))) +| return 0; +| ; +| return 0; +| } +configure:20830: result: yes +configure:20846: checking whether ftello is declared +configure:20846: gcc -c -g -O2 conftest.c >&5 +configure:20846: $? = 0 +configure:20846: result: yes +configure:20870: checking for ftello +configure:20887: gcc -o conftest -g -O2 conftest.c >&5 +configure:20887: $? = 0 +configure:20896: result: yes +configure:20909: checking whether ftello works +configure:20987: gcc -o conftest -g -O2 conftest.c >&5 +configure:20987: $? = 0 +configure:20987: ./conftest +configure:20987: $? = 0 +configure:20998: result: yes +configure:21014: checking whether getdelim is declared +configure:21014: gcc -c -g -O2 conftest.c >&5 +configure:21014: $? = 0 +configure:21014: result: yes +configure:21029: checking whether getdtablesize is declared +configure:21029: gcc -c -g -O2 conftest.c >&5 +configure:21029: $? = 0 +configure:21029: result: yes +configure:21040: checking whether getline is declared +configure:21040: gcc -c -g -O2 conftest.c >&5 +configure:21040: $? = 0 +configure:21040: result: yes +configure:21147: checking for getopt.h +configure:21147: result: yes +configure:21164: checking for getopt_long_only +configure:21164: gcc -o conftest -g -O2 conftest.c >&5 +configure:21164: $? = 0 +configure:21164: result: yes +configure:21178: checking whether getopt is POSIX compatible +configure:21220: gcc -o conftest -g -O2 conftest.c >&5 +configure:21220: $? = 0 +configure:21220: ./conftest +configure:21220: $? = 0 +configure:21279: gcc -o conftest -g -O2 conftest.c >&5 +configure:21279: $? = 0 +configure:21279: ./conftest +configure:21279: $? = 0 +configure:21321: gcc -o conftest -g -O2 conftest.c >&5 +configure:21321: $? = 0 +configure:21321: ./conftest +program: option requires an argument -- 'b' +configure:21321: $? = 0 +configure:21339: result: yes +configure:21347: checking for working GNU getopt function +configure:21569: gcc -o conftest -g -O2 conftest.c >&5 +configure:21569: $? = 0 +configure:21569: ./conftest +configure:21569: $? = 0 +configure:21585: result: yes +configure:21590: checking for working GNU getopt_long function +configure:21635: gcc -o conftest -g -O2 conftest.c >&5 +configure:21635: $? = 0 +configure:21635: ./conftest +configure:21635: $? = 0 +configure:21646: result: yes +configure:21673: checking whether fflush_unlocked is declared +configure:21673: gcc -c -g -O2 conftest.c >&5 +configure:21673: $? = 0 +configure:21673: result: yes +configure:21684: checking whether flockfile is declared +configure:21684: gcc -c -g -O2 conftest.c >&5 +configure:21684: $? = 0 +configure:21684: result: yes +configure:21695: checking whether fputs_unlocked is declared +configure:21695: gcc -c -g -O2 conftest.c >&5 +configure:21695: $? = 0 +configure:21695: result: yes +configure:21706: checking whether funlockfile is declared +configure:21706: gcc -c -g -O2 conftest.c >&5 +configure:21706: $? = 0 +configure:21706: result: yes +configure:21717: checking whether putc_unlocked is declared +configure:21717: gcc -c -g -O2 conftest.c >&5 +configure:21717: $? = 0 +configure:21717: result: yes +configure:21859: checking for struct timeval +configure:21882: gcc -c -g -O2 conftest.c >&5 +configure:21882: $? = 0 +configure:21890: result: yes +configure:21895: checking for wide-enough struct timeval.tv_sec member +configure:21922: gcc -c -g -O2 conftest.c >&5 +configure:21922: $? = 0 +configure:21930: result: yes +configure:22058: checking whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc. +configure:22081: gcc -c -g -O2 conftest.c >&5 +conftest.c:161:24: error: 'ULLONG_WIDTH' undeclared here (not in a function) + int ullw = ULLONG_WIDTH; + ^ +configure:22081: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| /* end confdefs.h. */ +| #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #endif +| #include <limits.h> +| long long llm = LLONG_MAX; +| int wb = WORD_BIT; +| int ullw = ULLONG_WIDTH; +| +| int +| main () +| { +| +| ; +| return 0; +| } +configure:22088: result: no +configure:22237: checking whether stdint.h conforms to C99 +configure:22417: gcc -c -g -O2 conftest.c >&5 +configure:22417: $? = 0 +configure:22504: gcc -o conftest -g -O2 conftest.c >&5 +configure:22504: $? = 0 +configure:22504: ./conftest +configure:22504: $? = 0 +configure:22516: result: yes +configure:22527: checking whether stdint.h predates C++11 +configure:22563: gcc -c -g -O2 conftest.c >&5 +configure:22563: $? = 0 +configure:22568: result: no +configure:22579: checking whether stdint.h has UINTMAX_WIDTH etc. +configure:22615: gcc -c -g -O2 conftest.c >&5 +conftest.c:173:24: error: 'UINTMAX_WIDTH' undeclared here (not in a function) + int iw = UINTMAX_WIDTH; + ^ +configure:22615: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| /* end confdefs.h. */ +| +| /* Work if build is not clean. */ +| #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 +| #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #endif +| #include <stdint.h> +| +| /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be +| included before <wchar.h>. */ +| #include <stddef.h> +| #include <signal.h> +| #if HAVE_WCHAR_H +| # include <stdio.h> +| # include <time.h> +| # include <wchar.h> +| #endif +| +| int iw = UINTMAX_WIDTH; +| +| int +| main () +| { +| +| ; +| return 0; +| } +configure:22620: result: no +configure:23088: checking for inttypes.h +configure:23088: result: yes +configure:23099: checking whether the inttypes.h PRIxNN macros are broken +configure:23121: gcc -c -g -O2 conftest.c >&5 +configure:23121: $? = 0 +configure:23129: result: no +configure:23145: checking where to find the exponent in a 'float' +configure:23222: gcc -o conftest -g -O2 conftest.c >&5 +configure:23222: $? = 0 +configure:23222: ./conftest +configure:23222: $? = 0 +configure:23234: result: word 0 bit 23 +configure:23285: checking for good max_align_t +configure:23307: gcc -c -g -O2 conftest.c >&5 +configure:23307: $? = 0 +configure:23315: result: yes +configure:23327: checking whether NULL can be used in arbitrary expressions +configure:23345: gcc -c -g -O2 conftest.c >&5 +configure:23345: $? = 0 +configure:23352: result: yes +configure:23483: checking for ld +configure:23611: result: /usr/bin/ld +configure:23618: checking if the linker (/usr/bin/ld) is GNU ld +configure:23633: result: yes +configure:23640: checking for shared library run path origin +configure:23653: result: done +configure:23674: checking 32-bit host C ABI +configure:23899: result: yes +configure:23936: checking for the common suffixes of directories in the library search path +configure:23987: result: lib,lib +configure:24001: checking whether imported symbols can be declared weak +configure:24019: gcc -o conftest -g -O2 conftest.c >&5 +configure:24019: $? = 0 +configure:24053: gcc -o conftest -g -O2 conftest.c >&5 +configure:24053: $? = 0 +configure:24053: ./conftest +configure:24053: $? = 0 +configure:24068: result: yes +configure:24070: checking whether the linker supports --as-needed +configure:24089: gcc -o conftest -g -O2 -Wl,--as-needed -Wl,--no-as-needed conftest.c >&5 +configure:24089: $? = 0 +configure:24102: result: yes +configure:24104: checking whether the linker supports --push-state +configure:24123: gcc -o conftest -g -O2 -Wl,--push-state -Wl,--pop-state conftest.c >&5 +configure:24123: $? = 0 +configure:24136: result: yes +configure:24141: checking pthread.h usability +configure:24141: gcc -c -g -O2 conftest.c >&5 +configure:24141: $? = 0 +configure:24141: result: yes +configure:24141: checking pthread.h presence +configure:24141: gcc -E conftest.c +configure:24141: $? = 0 +configure:24141: result: yes +configure:24141: checking for pthread.h +configure:24141: result: yes +configure:24179: gcc -o conftest -g -O2 conftest.c >&5 +/tmp/cc47bQQF.o: In function `main': +/mnt/lfs/build/recutils/recutils-1.8/conftest.c:166: undefined reference to `pthread_mutexattr_init' +collect2: error: ld returned 1 exit status +configure:24179: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| /* end confdefs.h. */ +| #include <pthread.h> +| pthread_mutex_t m; +| pthread_mutexattr_t ma; +| +| int +| main () +| { +| pthread_mutex_lock (&m); +| pthread_mutexattr_init (&ma); +| ; +| return 0; +| } +configure:24179: gcc -o conftest -g -O2 conftest.c -pthread >&5 +configure:24179: $? = 0 +configure:25010: checking for multithread API to use +configure:25012: result: posix +configure:25026: checking whether lstat correctly handles trailing slash +configure:25068: gcc -o conftest -g -O2 conftest.c >&5 +configure:25068: $? = 0 +configure:25068: ./conftest +configure:25068: $? = 0 +configure:25080: result: yes +configure:25093: checking whether malloc, realloc, calloc are POSIX compliant +configure:25113: gcc -c -g -O2 conftest.c >&5 +configure:25113: $? = 0 +configure:25121: result: yes +configure:25128: checking for stdlib.h +configure:25128: result: yes +configure:25138: checking for GNU libc compatible malloc +configure:25174: gcc -o conftest -g -O2 conftest.c >&5 +configure:25174: $? = 0 +configure:25174: ./conftest +configure:25174: $? = 0 +configure:25185: result: yes +configure:25203: checking for mbstate_t +configure:25227: gcc -c -g -O2 conftest.c >&5 +configure:25227: $? = 0 +configure:25234: result: yes +configure:25253: checking for a traditional japanese locale +configure:25332: gcc -o conftest -g -O2 conftest.c >&5 +configure:25335: $? = 0 +configure:25393: result: none +configure:25401: checking for a transitional chinese locale +configure:25481: gcc -o conftest -g -O2 conftest.c >&5 +configure:25484: $? = 0 +configure:25535: result: none +configure:25542: checking for a french Unicode locale +configure:25614: gcc -o conftest -g -O2 conftest.c >&5 +configure:25617: $? = 0 +configure:25663: result: none +configure:25682: checking whether mbrtowc handles incomplete characters +configure:25739: result: guessing yes +configure:25745: checking whether mbrtowc works as well as mbtowc +configure:25806: result: guessing yes +configure:25857: checking whether mbrtowc handles a NULL pwc argument +configure:25928: result: guessing yes +configure:25934: checking whether mbrtowc handles a NULL string argument +configure:25993: result: guessing yes +configure:26001: checking whether mbrtowc has a correct return value +configure:26131: result: guessing yes +configure:26137: checking whether mbrtowc returns 0 when parsing a NUL character +configure:26193: result: guessing yes +configure:26198: checking whether mbrtowc works on empty input +configure:26226: gcc -o conftest -g -O2 conftest.c >&5 +configure:26226: $? = 0 +configure:26226: ./conftest +configure:26226: $? = 0 +configure:26237: result: yes +configure:26241: checking whether the C locale is free of encoding errors +configure:26285: gcc -o conftest -g -O2 conftest.c >&5 +configure:26285: $? = 0 +configure:26285: ./conftest +configure:26285: $? = 3 +configure: program exited with status 3 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| /* end confdefs.h. */ +| #include <limits.h> +| #include <locale.h> +| #include <wchar.h> +| +| int +| main () +| { +| +| int i; +| char *locale = setlocale (LC_ALL, "C"); +| if (! locale) +| return 2; +| for (i = CHAR_MIN; i <= CHAR_MAX; i++) +| { +| char c = i; +| wchar_t wc; +| mbstate_t mbs = { 0, }; +| size_t ss = mbrtowc (&wc, &c, 1, &mbs); +| if (1 < ss) +| return 3; +| } +| return 0; +| +| ; +| return 0; +| } +configure:26296: result: no +configure:26352: checking for inline +configure:26368: gcc -c -g -O2 conftest.c >&5 +configure:26368: $? = 0 +configure:26376: result: inline +configure:26483: checking for mmap +configure:26483: gcc -o conftest -g -O2 conftest.c >&5 +configure:26483: $? = 0 +configure:26483: result: yes +configure:26494: checking for MAP_ANONYMOUS +configure:26531: result: yes +configure:26553: checking whether memchr works +configure:26622: gcc -o conftest -g -O2 conftest.c >&5 +configure:26622: $? = 0 +configure:26622: ./conftest +configure:26622: $? = 0 +configure:26633: result: yes +configure:26645: checking whether <limits.h> defines MIN and MAX +configure:26662: gcc -c -g -O2 conftest.c >&5 +conftest.c:167:21: warning: implicit declaration of function 'MIN' [-Wimplicit-function-declaration] + int x = MIN (42, 17); + ^ +conftest.c:167:21: error: initializer element is not constant +configure:26662: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| /* end confdefs.h. */ +| #include <limits.h> +| int x = MIN (42, 17); +| int +| main () +| { +| +| ; +| return 0; +| } +configure:26669: result: no +configure:26682: checking whether <sys/param.h> defines MIN and MAX +configure:26699: gcc -c -g -O2 conftest.c >&5 +configure:26699: $? = 0 +configure:26706: result: yes +configure:26722: checking whether time_t is signed +configure:26739: gcc -c -g -O2 conftest.c >&5 +configure:26739: $? = 0 +configure:26746: result: yes +configure:26769: checking for working mktime +configure:26985: gcc -o conftest -g -O2 conftest.c >&5 +configure:26985: $? = 0 +configure:26985: ./conftest +configure:26985: $? = 0 +configure:26996: result: yes +configure:27004: checking whether struct tm is in sys/time.h or time.h +configure:27024: gcc -c -g -O2 conftest.c >&5 +configure:27024: $? = 0 +configure:27031: result: time.h +configure:27039: checking for struct tm.tm_zone +configure:27039: gcc -c -g -O2 conftest.c >&5 +configure:27039: $? = 0 +configure:27039: result: yes +configure:27107: checking for struct tm.tm_gmtoff +configure:27107: gcc -c -g -O2 conftest.c >&5 +configure:27107: $? = 0 +configure:27107: result: yes +configure:27117: checking for O_CLOEXEC +configure:27137: gcc -c -g -O2 conftest.c >&5 +configure:27137: $? = 0 +configure:27144: result: yes +configure:27149: checking for promoted mode_t type +configure:27166: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:175:13: error: size of array 'array' is negative + typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1]; + ^ +configure:27166: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| /* end confdefs.h. */ +| #include <sys/types.h> +| int +| main () +| { +| typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1]; +| ; +| return 0; +| } +configure:27174: result: mode_t +configure:27182: checking for stdbool.h that conforms to C99 +configure:27257: gcc -c -g -O2 conftest.c >&5 +configure:27257: $? = 0 +configure:27264: result: yes +configure:27266: checking for _Bool +configure:27266: gcc -c -g -O2 conftest.c >&5 +configure:27266: $? = 0 +configure:27266: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:208:20: error: expected expression before ')' token + if (sizeof ((_Bool))) + ^ +configure:27266: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| int +| main () +| { +| if (sizeof ((_Bool))) +| return 0; +| ; +| return 0; +| } +configure:27266: result: yes +configure:27305: checking for compound literals +configure:27322: gcc -c -g -O2 conftest.c >&5 +configure:27322: $? = 0 +configure:27329: result: yes +configure:27382: checking for library containing posix_spawn +configure:27413: gcc -o conftest -g -O2 conftest.c >&5 +configure:27413: $? = 0 +configure:27430: result: none required +configure:27441: checking for posix_spawn +configure:27441: gcc -o conftest -g -O2 conftest.c >&5 +configure:27441: $? = 0 +configure:27441: result: yes +configure:27464: checking whether posix_spawn works +configure:27604: gcc -o conftest -g -O2 conftest.c >&5 +configure:27604: $? = 0 +configure:27779: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c: In function 'parent_main': +conftest.c:242:3: warning: ignoring return value of 'freopen', declared with attribute warn_unused_result [-Wunused-result] + freopen ("/dev/null", "rb", stdin); + ^ +configure:27779: $? = 0 +configure:27779: ./conftest +configure:27779: $? = 0 +configure:27797: result: yes +configure:27802: checking whether posix_spawnattr_setschedpolicy is supported +configure:27826: result: yes +configure:27828: checking whether posix_spawnattr_setschedparam is supported +configure:27852: result: yes +configure:28148: checking for ptrdiff_t +configure:28148: gcc -c -g -O2 conftest.c >&5 +configure:28148: $? = 0 +configure:28148: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:211:24: error: expected expression before ')' token + if (sizeof ((ptrdiff_t))) + ^ +configure:28148: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| int +| main () +| { +| if (sizeof ((ptrdiff_t))) +| return 0; +| ; +| return 0; +| } +configure:28148: result: yes +configure:28209: checking whether C symbols are prefixed with underscore at the linker level +configure:28222: gcc -g -O2 -S conftest.c +configure:28225: $? = 0 +configure:28235: result: no +configure:28271: checking for sigset_t +configure:28271: gcc -c -g -O2 conftest.c >&5 +configure:28271: $? = 0 +configure:28271: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:186:23: error: expected expression before ')' token + if (sizeof ((sigset_t))) + ^ +configure:28271: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| /* end confdefs.h. */ +| +| #include <signal.h> +| /* Mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. */ +| #include <sys/types.h> +| +| +| int +| main () +| { +| if (sizeof ((sigset_t))) +| return 0; +| ; +| return 0; +| } +configure:28271: result: yes +configure:28295: checking whether we are using the GNU C Library >= 2.1 or uClibc +configure:28325: result: yes +configure:28363: checking for library containing setfilecon +configure:28394: gcc -o conftest -g -O2 conftest.c >&5 +/tmp/ccdTyYhH.o: In function `main': +/mnt/lfs/build/recutils/recutils-1.8/conftest.c:189: undefined reference to `setfilecon' +collect2: error: ld returned 1 exit status +configure:28394: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| /* end confdefs.h. */ +| +| /* Override any GCC internal prototype to avoid an error. +| Use char because int might match the return type of a GCC +| builtin and then its argument prototype would still apply. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| char setfilecon (); +| int +| main () +| { +| return setfilecon (); +| ; +| return 0; +| } +configure:28394: gcc -o conftest -g -O2 conftest.c -lselinux >&5 +/usr/bin/ld: cannot find -lselinux +collect2: error: ld returned 1 exit status +configure:28394: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| /* end confdefs.h. */ +| +| /* Override any GCC internal prototype to avoid an error. +| Use char because int might match the return type of a GCC +| builtin and then its argument prototype would still apply. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| char setfilecon (); +| int +| main () +| { +| return setfilecon (); +| ; +| return 0; +| } +configure:28411: result: no +configure:28437: checking whether setenv is declared +configure:28437: gcc -c -g -O2 conftest.c >&5 +configure:28437: $? = 0 +configure:28437: result: yes +configure:28463: checking search.h usability +configure:28463: gcc -c -g -O2 conftest.c >&5 +configure:28463: $? = 0 +configure:28463: result: yes +configure:28463: checking search.h presence +configure:28463: gcc -E conftest.c +configure:28463: $? = 0 +configure:28463: result: yes +configure:28463: checking for search.h +configure:28463: result: yes +configure:28475: checking for tsearch +configure:28475: gcc -o conftest -g -O2 conftest.c >&5 +configure:28475: $? = 0 +configure:28475: result: yes +configure:28508: checking for strcasestr +configure:28508: gcc -o conftest -g -O2 conftest.c >&5 +configure:28508: $? = 0 +configure:28508: result: yes +configure:28523: checking whether strcasestr works +configure:28581: gcc -o conftest -g -O2 conftest.c >&5 +configure:28581: $? = 0 +configure:28581: ./conftest +configure:28581: $? = 0 +configure:28592: result: yes +configure:28605: checking whether strdup is declared +configure:28605: gcc -c -g -O2 conftest.c >&5 +configure:28605: $? = 0 +configure:28605: result: yes +configure:28618: checking whether strerror(0) succeeds +configure:28655: gcc -o conftest -g -O2 conftest.c >&5 +configure:28655: $? = 0 +configure:28655: ./conftest +configure:28655: $? = 0 +configure:28666: result: yes +configure:28860: checking for struct timespec in <time.h> +configure:28877: gcc -c -g -O2 conftest.c >&5 +configure:28877: $? = 0 +configure:28884: result: yes +configure:29069: checking whether clearerr_unlocked is declared +configure:29069: gcc -c -g -O2 conftest.c >&5 +configure:29069: $? = 0 +configure:29069: result: yes +configure:29080: checking whether feof_unlocked is declared +configure:29080: gcc -c -g -O2 conftest.c >&5 +configure:29080: $? = 0 +configure:29080: result: yes +configure:29091: checking whether ferror_unlocked is declared +configure:29091: gcc -c -g -O2 conftest.c >&5 +configure:29091: $? = 0 +configure:29091: result: yes +configure:29102: checking whether fgets_unlocked is declared +configure:29102: gcc -c -g -O2 conftest.c >&5 +configure:29102: $? = 0 +configure:29102: result: yes +configure:29113: checking whether fputc_unlocked is declared +configure:29113: gcc -c -g -O2 conftest.c >&5 +configure:29113: $? = 0 +configure:29113: result: yes +configure:29124: checking whether fread_unlocked is declared +configure:29124: gcc -c -g -O2 conftest.c >&5 +configure:29124: $? = 0 +configure:29124: result: yes +configure:29135: checking whether fwrite_unlocked is declared +configure:29135: gcc -c -g -O2 conftest.c >&5 +configure:29135: $? = 0 +configure:29135: result: yes +configure:29146: checking whether getc_unlocked is declared +configure:29146: gcc -c -g -O2 conftest.c >&5 +configure:29146: $? = 0 +configure:29146: result: yes +configure:29157: checking whether getchar_unlocked is declared +configure:29157: gcc -c -g -O2 conftest.c >&5 +configure:29157: $? = 0 +configure:29157: result: yes +configure:29168: checking whether putchar_unlocked is declared +configure:29168: gcc -c -g -O2 conftest.c >&5 +configure:29168: $? = 0 +configure:29168: result: yes +configure:29179: checking whether unsetenv is declared +configure:29179: gcc -c -g -O2 conftest.c >&5 +configure:29179: $? = 0 +configure:29179: result: yes +configure:29249: checking sys/acl.h usability +configure:29249: gcc -c -g -O2 conftest.c >&5 +conftest.c:227:21: fatal error: sys/acl.h: No such file or directory +compilation terminated. +configure:29249: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| #include <sys/acl.h> +configure:29249: result: no +configure:29249: checking sys/acl.h presence +configure:29249: gcc -E conftest.c +conftest.c:194:21: fatal error: sys/acl.h: No such file or directory +compilation terminated. +configure:29249: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| /* end confdefs.h. */ +| #include <sys/acl.h> +configure:29249: result: no +configure:29249: checking for sys/acl.h +configure:29249: result: no +configure:29659: WARNING: libacl development library was not found or not usable. +configure:29661: WARNING: GNU recutils will be built without ACL support. +configure:29685: checking for alloca as a compiler built-in +configure:29709: result: yes +configure:29750: checking whether btowc(0) is correct +configure:29787: gcc -o conftest -g -O2 conftest.c >&5 +configure:29787: $? = 0 +configure:29787: ./conftest +configure:29787: $? = 0 +configure:29798: result: yes +configure:29801: checking whether btowc(EOF) is correct +configure:29854: result: guessing yes +configure:29898: checking for __builtin_expect +configure:29913: gcc -o conftest -g -O2 conftest.c >&5 +configure:29913: $? = 0 +configure:29938: result: yes +configure:30049: checking for library containing clock_gettime +configure:30080: gcc -o conftest -g -O2 conftest.c >&5 +configure:30080: $? = 0 +configure:30097: result: none required +configure:30109: checking for clock_gettime +configure:30109: gcc -o conftest -g -O2 conftest.c >&5 +configure:30109: $? = 0 +configure:30109: result: yes +configure:30109: checking for clock_settime +configure:30109: gcc -o conftest -g -O2 conftest.c >&5 +configure:30109: $? = 0 +configure:30109: result: yes +configure:30213: checking whether // is distinct from / +configure:30242: result: no +configure:30259: checking whether dup2 works +configure:30347: gcc -o conftest -g -O2 conftest.c >&5 +configure:30347: $? = 0 +configure:30347: ./conftest +configure:30347: $? = 0 +configure:30358: result: yes +configure:30426: checking for error_at_line +configure:30442: gcc -o conftest -g -O2 conftest.c >&5 +configure:30442: $? = 0 +configure:30450: result: yes +configure:30484: checking for euidaccess +configure:30484: gcc -o conftest -g -O2 conftest.c >&5 +configure:30484: $? = 0 +configure:30484: result: yes +configure:30749: checking whether fcntl handles F_DUPFD correctly +configure:30807: gcc -o conftest -g -O2 conftest.c >&5 +configure:30807: $? = 0 +configure:30807: ./conftest +configure:30807: $? = 0 +configure:30817: result: yes +configure:30835: checking whether fcntl understands F_DUPFD_CLOEXEC +configure:30856: gcc -c -g -O2 conftest.c >&5 +configure:30856: $? = 0 +configure:30874: gcc -c -g -O2 conftest.c >&5 +conftest.c:216:1: error: unknown type name 'choke' + choke me + ^ +conftest.c:219:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int' + int + ^ +configure:30874: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| /* end confdefs.h. */ +| +| #ifdef __linux__ +| /* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace +| it to support the semantics on older kernels that failed with EINVAL. */ +| choke me +| #endif +| +| int +| main () +| { +| +| ; +| return 0; +| } +configure:30885: result: needs runtime check +configure:31012: checking for flexible array member +configure:31040: gcc -c -g -O2 conftest.c >&5 +configure:31040: $? = 0 +configure:31047: result: yes +configure:31110: checking whether conversion from 'int' to 'long double' works +configure:31154: gcc -o conftest -g -O2 conftest.c >&5 +configure:31154: $? = 0 +configure:31154: ./conftest +configure:31154: $? = 0 +configure:31165: result: yes +configure:31355: gcc -o conftest -g -O2 conftest.c >&5 +/tmp/ccug1W9t.o:(.data+0x0): undefined reference to `floor' +/tmp/ccug1W9t.o: In function `main': +/mnt/lfs/build/recutils/recutils-1.8/conftest.c:223: undefined reference to `floor' +collect2: error: ld returned 1 exit status +configure:31355: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| /* end confdefs.h. */ +| #ifndef __NO_MATH_INLINES +| # define __NO_MATH_INLINES 1 /* for glibc */ +| #endif +| #include <math.h> +| double (*funcptr) (double) = floor; +| double x; +| int +| main () +| { +| x = funcptr(x) + floor(x); +| ; +| return 0; +| } +configure:31379: gcc -o conftest -g -O2 conftest.c -lm >&5 +configure:31379: $? = 0 +configure:31437: checking for __fpending +configure:31454: gcc -o conftest -g -O2 conftest.c >&5 +configure:31454: $? = 0 +configure:31463: result: yes +configure:31466: checking whether __fpending is declared +configure:31466: gcc -c -g -O2 conftest.c >&5 +configure:31466: $? = 0 +configure:31466: result: yes +configure:31775: checking for ptrdiff_t +configure:31775: result: yes +configure:31833: checking whether frexp works +configure:31931: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:277:21: warning: passing argument 2 of 'memcmp' discards 'volatile' qualifier from pointer target type [-Wdiscarded-qualifiers] + if (memcmp (&y, &x, sizeof x)) + ^ +In file included from conftest.c:221:0: +/usr/include/string.h:65:12: note: expected 'const void *' but argument is of type 'volatile double *' + extern int memcmp (const void *__s1, const void *__s2, size_t __n) + ^ +configure:31931: $? = 0 +configure:31931: ./conftest +configure:31931: $? = 0 +configure:31942: result: yes +configure:31989: checking whether frexpl is declared +configure:31989: gcc -c -g -O2 conftest.c >&5 +configure:31989: $? = 0 +configure:31989: result: yes +configure:31999: checking whether frexpl() can be used without linking with libm +configure:32017: gcc -o conftest -g -O2 conftest.c >&5 +configure:32017: $? = 0 +configure:32026: result: yes +configure:32032: checking whether frexpl works +configure:32143: gcc -o conftest -g -O2 conftest.c >&5 +configure:32143: $? = 0 +configure:32143: ./conftest +configure:32143: $? = 0 +configure:32154: result: yes +configure:32241: checking for fseeko +configure:32268: result: yes +configure:32460: checking for ftello +configure:32486: result: yes +configure:32499: checking whether ftello works +configure:32588: result: yes +configure:32667: checking for working getdelim function +configure:32729: gcc -o conftest -g -O2 conftest.c >&5 +configure:32729: $? = 0 +configure:32729: ./conftest +configure:32729: $? = 0 +configure:32739: result: yes +configure:32813: checking whether getdtablesize works +configure:32846: gcc -o conftest -g -O2 conftest.c >&5 +configure:32846: $? = 0 +configure:32846: ./conftest +configure:32846: $? = 0 +configure:32859: result: yes +configure:32902: checking for getgroups +configure:32902: gcc -o conftest -g -O2 conftest.c >&5 +configure:32902: $? = 0 +configure:32902: result: yes +configure:32957: checking for working getgroups +configure:32984: gcc -o conftest -g -O2 conftest.c >&5 +configure:32984: $? = 0 +configure:32984: ./conftest +configure:32984: $? = 0 +configure:32995: result: yes +configure:33023: checking whether getgroups handles negative values +configure:33052: gcc -o conftest -g -O2 conftest.c >&5 +configure:33052: $? = 0 +configure:33052: ./conftest +configure:33052: $? = 0 +configure:33062: result: yes +configure:33107: checking for getline +configure:33107: gcc -o conftest -g -O2 conftest.c >&5 +configure:33107: $? = 0 +configure:33107: result: yes +configure:33115: checking for working getline function +configure:33178: gcc -o conftest -g -O2 conftest.c >&5 +configure:33178: $? = 0 +configure:33178: ./conftest +configure:33178: $? = 0 +configure:33188: result: yes +configure:33429: checking for getpass without length limitations +configure:33455: result: yes +configure:33599: checking whether program_invocation_name is declared +configure:33599: gcc -c -g -O2 conftest.c >&5 +configure:33599: $? = 0 +configure:33599: result: yes +configure:33614: checking whether program_invocation_short_name is declared +configure:33614: gcc -c -g -O2 conftest.c >&5 +configure:33614: $? = 0 +configure:33614: result: yes +configure:33629: checking whether __argv is declared +configure:33629: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:245:10: error: '__argv' undeclared (first use in this function) + (void) __argv; + ^ +conftest.c:245:10: note: each undeclared identifier is reported only once for each function it appears in +configure:33629: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| /* end confdefs.h. */ +| #include <stdlib.h> +| +| int +| main () +| { +| #ifndef __argv +| #ifdef __cplusplus +| (void) __argv; +| #else +| (void) __argv; +| #endif +| #endif +| +| ; +| return 0; +| } +configure:33629: result: no +configure:33708: checking whether gettimeofday clobbers localtime buffer +configure:33749: gcc -o conftest -g -O2 conftest.c >&5 +configure:33749: $? = 0 +configure:33749: ./conftest +configure:33749: $? = 0 +configure:33759: result: no +configure:33778: checking for gettimeofday with POSIX signature +configure:33806: gcc -c -g -O2 conftest.c >&5 +conftest.c:239:19: error: conflicting types for 'gettimeofday' + int gettimeofday (struct timeval *restrict, void *restrict); + ^ +In file included from conftest.c:237:0: +/usr/include/i386-linux-gnu/sys/time.h:71:12: note: previous declaration of 'gettimeofday' was here + extern int gettimeofday (struct timeval *__restrict __tv, + ^ +configure:33806: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| /* end confdefs.h. */ +| #include <sys/time.h> +| struct timeval c; +| int gettimeofday (struct timeval *restrict, void *restrict); +| +| int +| main () +| { +| /* glibc uses struct timezone * rather than the POSIX void * +| if _GNU_SOURCE is defined. However, since the only portable +| use of gettimeofday uses NULL as the second parameter, and +| since the glibc definition is actually more typesafe, it is +| not worth wrapping this to get a compliant signature. */ +| int (*f) (struct timeval *restrict, void *restrict) +| = gettimeofday; +| int x = f (&c, 0); +| return !(x | c.tv_sec | c.tv_usec); +| +| ; +| return 0; +| } +configure:33822: gcc -c -g -O2 conftest.c >&5 +configure:33822: $? = 0 +configure:33831: result: almost +configure:33892: checking for group_member +configure:33892: gcc -o conftest -g -O2 conftest.c >&5 +configure:33892: $? = 0 +configure:33892: result: yes +configure:33971: checking whether INT32_MAX < INTMAX_MAX +configure:34005: gcc -c -g -O2 conftest.c >&5 +configure:34005: $? = 0 +configure:34012: result: yes +configure:34023: checking whether INT64_MAX == LONG_MAX +configure:34057: gcc -c -g -O2 conftest.c >&5 +conftest.c:258:17: error: size of array 'test' is negative + int test[CONDITION ? 1 : -1]; + ^ +configure:34057: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| /* end confdefs.h. */ +| /* Work also in C++ mode. */ +| #define __STDC_LIMIT_MACROS 1 +| +| /* Work if build is not clean. */ +| #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H +| +| #include <limits.h> +| #if HAVE_STDINT_H +| #include <stdint.h> +| #endif +| +| #if defined INT64_MAX +| #define CONDITION (INT64_MAX == LONG_MAX) +| #elif HAVE_LONG_LONG_INT +| #define CONDITION (sizeof (long long int) == sizeof (long int)) +| #else +| #define CONDITION 0 +| #endif +| int test[CONDITION ? 1 : -1]; +| int +| main () +| { +| +| ; +| return 0; +| } +configure:34064: result: no +configure:34077: checking whether UINT32_MAX < UINTMAX_MAX +configure:34111: gcc -c -g -O2 conftest.c >&5 +configure:34111: $? = 0 +configure:34118: result: yes +configure:34129: checking whether UINT64_MAX == ULONG_MAX +configure:34163: gcc -c -g -O2 conftest.c >&5 +conftest.c:258:17: error: size of array 'test' is negative + int test[CONDITION ? 1 : -1]; + ^ +configure:34163: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| /* end confdefs.h. */ +| /* Work also in C++ mode. */ +| #define __STDC_LIMIT_MACROS 1 +| +| /* Work if build is not clean. */ +| #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H +| +| #include <limits.h> +| #if HAVE_STDINT_H +| #include <stdint.h> +| #endif +| +| #if defined UINT64_MAX +| #define CONDITION (UINT64_MAX == ULONG_MAX) +| #elif HAVE_LONG_LONG_INT +| #define CONDITION (sizeof (unsigned long long int) == sizeof (unsigned long int)) +| #else +| #define CONDITION 0 +| #endif +| int test[CONDITION ? 1 : -1]; +| int +| main () +| { +| +| ; +| return 0; +| } +configure:34170: result: no +configure:34187: checking whether isnan(double) can be used without linking with libm +configure:34212: gcc -o conftest -g -O2 conftest.c >&5 +configure:34212: $? = 0 +configure:34221: result: yes +configure:34248: checking whether isnan(float) can be used without linking with libm +configure:34273: gcc -o conftest -g -O2 conftest.c >&5 +configure:34273: $? = 0 +configure:34282: result: yes +configure:34289: checking whether isnan(float) works +configure:34375: gcc -o conftest -g -O2 conftest.c >&5 +configure:34375: $? = 0 +configure:34375: ./conftest +configure:34375: $? = 0 +configure:34386: result: yes +configure:34529: checking whether isnan(long double) can be used without linking with libm +configure:34554: gcc -o conftest -g -O2 conftest.c >&5 +configure:34554: $? = 0 +configure:34563: result: yes +configure:34572: checking whether isnanl works +configure:34715: gcc -o conftest -g -O2 conftest.c >&5 +configure:34715: $? = 0 +configure:34715: ./conftest +configure:34715: $? = 0 +configure:34726: result: yes +configure:34993: checking whether langinfo.h defines CODESET +configure:35011: gcc -c -g -O2 conftest.c >&5 +configure:35011: $? = 0 +configure:35019: result: yes +configure:35024: checking whether langinfo.h defines T_FMT_AMPM +configure:35042: gcc -c -g -O2 conftest.c >&5 +configure:35042: $? = 0 +configure:35050: result: yes +configure:35055: checking whether langinfo.h defines ALTMON_1 +configure:35073: gcc -c -g -O2 conftest.c >&5 +conftest.c:244:9: error: 'ALTMON_1' undeclared here (not in a function) + int a = ALTMON_1; + ^ +configure:35073: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| /* end confdefs.h. */ +| #include <langinfo.h> +| int a = ALTMON_1; +| +| int +| main () +| { +| +| ; +| return 0; +| } +configure:35081: result: no +configure:35086: checking whether langinfo.h defines ERA +configure:35104: gcc -c -g -O2 conftest.c >&5 +configure:35104: $? = 0 +configure:35112: result: yes +configure:35117: checking whether langinfo.h defines YESEXPR +configure:35135: gcc -c -g -O2 conftest.c >&5 +configure:35135: $? = 0 +configure:35143: result: yes +configure:35164: checking whether the compiler supports the __inline keyword +configure:35181: gcc -c -g -O2 conftest.c >&5 +configure:35181: $? = 0 +configure:35188: result: yes +configure:35218: checking whether locale.h conforms to POSIX:2001 +configure:35236: gcc -c -g -O2 conftest.c >&5 +configure:35236: $? = 0 +configure:35243: result: yes +configure:35249: checking whether locale.h defines locale_t +configure:35266: gcc -c -g -O2 conftest.c >&5 +configure:35266: $? = 0 +configure:35274: result: yes +configure:35287: checking whether struct lconv is properly defined +configure:35306: gcc -c -g -O2 conftest.c >&5 +configure:35306: $? = 0 +configure:35314: result: yes +configure:35461: checking for pthread_rwlock_t +configure:35461: gcc -c -g -O2 conftest.c >&5 +configure:35461: $? = 0 +configure:35461: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:250:31: error: expected expression before ')' token + if (sizeof ((pthread_rwlock_t))) + ^ +configure:35461: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| /* end confdefs.h. */ +| #include <pthread.h> +| +| int +| main () +| { +| if (sizeof ((pthread_rwlock_t))) +| return 0; +| ; +| return 0; +| } +configure:35461: result: yes +configure:35473: checking whether pthread_rwlock_rdlock prefers a writer to a reader +configure:35598: gcc -o conftest -g -O2 conftest.c -pthread -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state >&5 +configure:35598: $? = 0 +configure:35598: ./conftest +configure:35598: $? = 1 +configure: program exited with status 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| /* end confdefs.h. */ +| +| #include <errno.h> +| #include <pthread.h> +| #include <stdlib.h> +| #include <unistd.h> +| +| #define SUCCEED() exit (0) +| #define FAILURE() exit (1) +| #define UNEXPECTED(n) (exit (10 + (n))) +| +| /* The main thread creates the waiting writer and the requesting reader threads +| in the default way; this guarantees that they have the same priority. +| We can reuse the main thread as first reader thread. */ +| +| static pthread_rwlock_t lock; +| static pthread_t reader1; +| static pthread_t writer; +| static pthread_t reader2; +| static pthread_t timer; +| /* Used to pass control from writer to reader2 and from reader2 to timer, +| as in a relay race. +| Passing control from one running thread to another running thread +| is most likely faster than to create the second thread. */ +| static pthread_mutex_t baton; +| +| static void * +| timer_func (void *ignored) +| { +| /* Step 13 (can be before or after step 12): +| The timer thread takes the baton, then waits a moment to make sure +| it can tell whether the second reader thread is blocked at step 12. */ +| if (pthread_mutex_lock (&baton)) +| UNEXPECTED (13); +| usleep (100000); +| /* By the time we get here, it's clear that the second reader thread is +| blocked at step 12. This is the desired behaviour. */ +| SUCCEED (); +| } +| +| static void * +| reader2_func (void *ignored) +| { +| int err; +| +| /* Step 8 (can be before or after step 7): +| The second reader thread takes the baton, then waits a moment to make sure +| the writer thread has reached step 7. */ +| if (pthread_mutex_lock (&baton)) +| UNEXPECTED (8); +| usleep (100000); +| /* Step 9: The second reader thread requests the lock. */ +| err = pthread_rwlock_tryrdlock (&lock); +| if (err == 0) +| FAILURE (); +| else if (err != EBUSY) +| UNEXPECTED (9); +| /* Step 10: Launch a timer, to test whether the next call blocks. */ +| if (pthread_create (&timer, NULL, timer_func, NULL)) +| UNEXPECTED (10); +| /* Step 11: Release the baton. */ +| if (pthread_mutex_unlock (&baton)) +| UNEXPECTED (11); +| /* Step 12: The second reader thread requests the lock. */ +| err = pthread_rwlock_rdlock (&lock); +| if (err == 0) +| FAILURE (); +| else +| UNEXPECTED (12); +| } +| +| static void * +| writer_func (void *ignored) +| { +| /* Step 4: Take the baton, so that the second reader thread does not go ahead +| too early. */ +| if (pthread_mutex_lock (&baton)) +| UNEXPECTED (4); +| /* Step 5: Create the second reader thread. */ +| if (pthread_create (&reader2, NULL, reader2_func, NULL)) +| UNEXPECTED (5); +| /* Step 6: Release the baton. */ +| if (pthread_mutex_unlock (&baton)) +| UNEXPECTED (6); +| /* Step 7: The writer thread requests the lock. */ +| if (pthread_rwlock_wrlock (&lock)) +| UNEXPECTED (7); +| return NULL; +| } +| +| int +| main () +| { +| reader1 = pthread_self (); +| +| /* Step 1: The main thread initializes the lock and the baton. */ +| if (pthread_rwlock_init (&lock, NULL)) +| UNEXPECTED (1); +| if (pthread_mutex_init (&baton, NULL)) +| UNEXPECTED (1); +| /* Step 2: The main thread acquires the lock as a reader. */ +| if (pthread_rwlock_rdlock (&lock)) +| UNEXPECTED (2); +| /* Step 3: Create the writer thread. */ +| if (pthread_create (&writer, NULL, writer_func, NULL)) +| UNEXPECTED (3); +| /* Job done. Go to sleep. */ +| for (;;) +| { +| sleep (1); +| } +| } +| +configure:35610: result: no +configure:35644: gcc -c -g -O2 conftest.c >&5 +configure:35644: $? = 0 +configure:35666: checking whether lseek detects pipes +configure:35699: gcc -o conftest -g -O2 conftest.c >&5 +configure:35699: $? = 0 +configure:35734: result: yes +configure:35944: checking whether NAN macro works +configure:35967: gcc -c -g -O2 conftest.c >&5 +configure:35967: $? = 0 +configure:35974: result: yes +configure:35979: checking whether HUGE_VAL works +configure:35997: gcc -c -g -O2 conftest.c >&5 +configure:35997: $? = 0 +configure:36004: result: yes +configure:36096: checking whether mbrtowc handles incomplete characters +configure:36153: result: guessing yes +configure:36159: checking whether mbrtowc works as well as mbtowc +configure:36220: result: guessing yes +configure:36271: checking whether mbrtowc handles a NULL pwc argument +configure:36342: result: guessing yes +configure:36348: checking whether mbrtowc handles a NULL string argument +configure:36407: result: guessing yes +configure:36415: checking whether mbrtowc has a correct return value +configure:36545: result: guessing yes +configure:36551: checking whether mbrtowc returns 0 when parsing a NUL character +configure:36607: result: guessing yes +configure:36612: checking whether mbrtowc works on empty input +configure:36651: result: yes +configure:36655: checking whether the C locale is free of encoding errors +configure:36710: result: no +configure:36810: checking whether mbrtowc handles incomplete characters +configure:36867: result: guessing yes +configure:36873: checking whether mbrtowc works as well as mbtowc +configure:36934: result: guessing yes +configure:37102: checking whether mkdir handles trailing slash +configure:37151: gcc -o conftest -g -O2 conftest.c >&5 +configure:37151: $? = 0 +configure:37151: ./conftest +configure:37151: $? = 0 +configure:37164: result: yes +configure:37173: checking whether mkdir handles trailing dot +configure:37204: gcc -o conftest -g -O2 conftest.c >&5 +configure:37204: $? = 0 +configure:37204: ./conftest +configure:37204: $? = 0 +configure:37217: result: yes +configure:37292: checking for working mkstemp +configure:37347: gcc -o conftest -g -O2 conftest.c >&5 +configure:37347: $? = 0 +configure:37347: ./conftest +configure:37347: $? = 0 +configure:37359: result: yes +configure:37453: checking for __mktime_internal +configure:37453: gcc -o conftest -g -O2 conftest.c >&5 +/tmp/cc11bZB4.o: In function `main': +/mnt/lfs/build/recutils/recutils-1.8/conftest.c:296: undefined reference to `__mktime_internal' +collect2: error: ld returned 1 exit status +configure:37453: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| /* end confdefs.h. */ +| /* Define __mktime_internal to an innocuous variant, in case <limits.h> declares __mktime_internal. +| For example, HP-UX 11i <limits.h> declares gettimeofday. */ +| #define __mktime_internal innocuous___mktime_internal +| +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char __mktime_internal (); below. +| Prefer <limits.h> to <assert.h> if __STDC__ is defined, since +| <limits.h> exists even on freestanding compilers. */ +| +| #ifdef __STDC__ +| # include <limits.h> +| #else +| # include <assert.h> +| #endif +| +| #undef __mktime_internal +| +| /* Override any GCC internal prototype to avoid an error. +| Use char because int might match the return type of a GCC +| builtin and then its argument prototype would still apply. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| char __mktime_internal (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined __stub___mktime_internal || defined __stub_____mktime_internal +| choke me +| #endif +| +| int +| main () +| { +| return __mktime_internal (); +| ; +| return 0; +| } +configure:37453: result: no +configure:37521: checking whether YESEXPR works +configure:37549: gcc -o conftest -g -O2 conftest.c >&5 +configure:37549: $? = 0 +configure:37549: ./conftest +configure:37549: $? = 0 +configure:37560: result: yes +configure:37638: checking for obstacks that work with any size object +configure:37662: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c:272:21: error: conflicting types for '_obstack_memory_used' + size_t _obstack_memory_used (struct obstack *); + ^ +In file included from conftest.c:268:0: +/usr/include/obstack.h:190:12: note: previous declaration of '_obstack_memory_used' was here + extern int _obstack_memory_used (struct obstack *) __attribute_pure__; + ^ +configure:37662: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| /* end confdefs.h. */ +| #include "obstack.h" +| void *obstack_chunk_alloc (size_t n) { return 0; } +| void obstack_chunk_free (void *p) { } +| /* Check that an internal function returns size_t, not int. */ +| size_t _obstack_memory_used (struct obstack *); +| +| int +| main () +| { +| struct obstack mem; +| obstack_init (&mem); +| obstack_free (&mem, 0); +| +| ; +| return 0; +| } +configure:37670: result: no +configure:37701: checking whether open recognizes a trailing slash +configure:37740: gcc -o conftest -g -O2 conftest.c >&5 +configure:37740: $? = 0 +configure:37740: ./conftest +configure:37740: $? = 0 +configure:37752: result: yes +configure:37804: checking for struct tm.tm_zone +configure:37804: result: yes +configure:37886: checking whether posix_spawn_file_actions_addopen works +configure:37917: gcc -o conftest -g -O2 conftest.c >&5 +configure:37917: $? = 0 +configure:37917: ./conftest +configure:37917: $? = 0 +configure:37928: result: yes +configure:38215: checking whether frexp works +configure:38324: result: yes +configure:38336: checking whether ldexp can be used without linking with libm +configure:38355: gcc -o conftest -g -O2 conftest.c >&5 +configure:38355: $? = 0 +configure:38364: result: yes +configure:38377: checking whether frexpl() can be used without linking with libm +configure:38404: result: yes +configure:38410: checking whether frexpl works +configure:38532: result: yes +configure:38547: checking whether frexpl is declared +configure:38547: result: yes +configure:38558: checking whether ldexpl() can be used without linking with libm +configure:38576: gcc -o conftest -g -O2 conftest.c >&5 +configure:38576: $? = 0 +configure:38585: result: yes +configure:38591: checking whether ldexpl works +configure:38634: gcc -o conftest -g -O2 conftest.c >&5 +configure:38634: $? = 0 +configure:38634: ./conftest +configure:38634: $? = 0 +configure:38645: result: yes +configure:38653: checking whether ldexpl is declared +configure:38653: gcc -c -g -O2 conftest.c >&5 +configure:38653: $? = 0 +configure:38653: result: yes +configure:38705: checking whether program_invocation_name is declared +configure:38705: result: yes +configure:38717: checking whether program_invocation_short_name is declared +configure:38717: result: yes +configure:38740: checking for raise +configure:38740: gcc -o conftest -g -O2 conftest.c >&5 +configure:38740: $? = 0 +configure:38740: result: yes +configure:38763: checking for sigprocmask +configure:38763: gcc -o conftest -g -O2 conftest.c >&5 +configure:38763: $? = 0 +configure:38763: result: yes +configure:38813: checking for random.h +configure:38813: gcc -c -g -O2 conftest.c >&5 +conftest.c:323:20: fatal error: random.h: No such file or directory +compilation terminated. +configure:38813: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| +| #include <random.h> +configure:38813: result: no +configure:38828: checking for struct random_data +configure:38828: gcc -c -g -O2 conftest.c >&5 +configure:38828: $? = 0 +configure:38828: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:298:33: error: expected expression before ')' token + if (sizeof ((struct random_data))) + ^ +configure:38828: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| /* end confdefs.h. */ +| #include <stdlib.h> +| #if HAVE_RANDOM_H +| # include <random.h> +| #endif +| +| +| int +| main () +| { +| if (sizeof ((struct random_data))) +| return 0; +| ; +| return 0; +| } +configure:38828: result: yes +configure:38853: checking for random_r +configure:38853: gcc -o conftest -g -O2 conftest.c >&5 +configure:38853: $? = 0 +configure:38853: result: yes +configure:38904: checking for rawmemchr +configure:38904: gcc -o conftest -g -O2 conftest.c >&5 +configure:38904: $? = 0 +configure:38904: result: yes +configure:39435: checking for readline +configure:39460: gcc -o conftest -g -O2 conftest.c -lreadline >&5 +conftest.c:295:31: fatal error: readline/readline.h: No such file or directory +compilation terminated. +configure:39460: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #include <readline/readline.h> +| int +| main () +| { +| readline((char*)0); +| ; +| return 0; +| } +configure:39460: gcc -o conftest -g -O2 conftest.c -lreadline -lncurses >&5 +conftest.c:295:31: fatal error: readline/readline.h: No such file or directory +compilation terminated. +configure:39460: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #include <readline/readline.h> +| int +| main () +| { +| readline((char*)0); +| ; +| return 0; +| } +configure:39460: gcc -o conftest -g -O2 conftest.c -lreadline -ltermcap >&5 +conftest.c:295:31: fatal error: readline/readline.h: No such file or directory +compilation terminated. +configure:39460: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #include <readline/readline.h> +| int +| main () +| { +| readline((char*)0); +| ; +| return 0; +| } +configure:39460: gcc -o conftest -g -O2 conftest.c -lreadline -lcurses >&5 +conftest.c:295:31: fatal error: readline/readline.h: No such file or directory +compilation terminated. +configure:39460: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #include <readline/readline.h> +| int +| main () +| { +| readline((char*)0); +| ; +| return 0; +| } +configure:39477: result: no +configure:39504: checking readline/readline.h usability +configure:39504: gcc -c -g -O2 conftest.c >&5 +conftest.c:327:31: fatal error: readline/readline.h: No such file or directory +compilation terminated. +configure:39504: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| #include <readline/readline.h> +configure:39504: result: no +configure:39504: checking readline/readline.h presence +configure:39504: gcc -E conftest.c +conftest.c:294:31: fatal error: readline/readline.h: No such file or directory +compilation terminated. +configure:39504: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| /* end confdefs.h. */ +| #include <readline/readline.h> +configure:39504: result: no +configure:39504: checking for readline/readline.h +configure:39504: result: no +configure:39504: checking readline/history.h usability +configure:39504: gcc -c -g -O2 conftest.c >&5 +conftest.c:327:30: fatal error: readline/history.h: No such file or directory +compilation terminated. +configure:39504: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| #include <readline/history.h> +configure:39504: result: no +configure:39504: checking readline/history.h presence +configure:39504: gcc -E conftest.c +conftest.c:294:30: fatal error: readline/history.h: No such file or directory +compilation terminated. +configure:39504: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| /* end confdefs.h. */ +| #include <readline/history.h> +configure:39504: result: no +configure:39504: checking for readline/history.h +configure:39504: result: no +configure:39536: checking whether readlink signature is correct +configure:39554: gcc -c -g -O2 conftest.c >&5 +configure:39554: $? = 0 +configure:39561: result: yes +configure:39563: checking whether readlink handles trailing slash correctly +configure:39595: gcc -o conftest -g -O2 conftest.c >&5 +configure:39595: $? = 0 +configure:39595: ./conftest +configure:39595: $? = 0 +configure:39606: result: yes +configure:39709: checking for working re_compile_pattern +configure:39936: gcc -o conftest -g -O2 conftest.c >&5 +configure:39936: $? = 0 +configure:39936: ./conftest +configure:39936: $? = 64 +configure: program exited with status 64 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| /* end confdefs.h. */ +| #include <regex.h> +| +| #include <locale.h> +| #include <limits.h> +| #include <string.h> +| +| #if defined M_CHECK_ACTION || HAVE_DECL_ALARM +| # include <signal.h> +| # include <unistd.h> +| #endif +| +| #if HAVE_MALLOC_H +| # include <malloc.h> +| #endif +| +| #ifdef M_CHECK_ACTION +| /* Exit with distinguishable exit code. */ +| static void sigabrt_no_core (int sig) { raise (SIGTERM); } +| #endif +| +| int +| main () +| { +| int result = 0; +| static struct re_pattern_buffer regex; +| unsigned char folded_chars[UCHAR_MAX + 1]; +| int i; +| const char *s; +| struct re_registers regs; +| +| /* Some builds of glibc go into an infinite loop on this +| test. Use alarm to force death, and mallopt to avoid +| malloc recursion in diagnosing the corrupted heap. */ +| #if HAVE_DECL_ALARM +| signal (SIGALRM, SIG_DFL); +| alarm (2); +| #endif +| #ifdef M_CHECK_ACTION +| signal (SIGABRT, sigabrt_no_core); +| mallopt (M_CHECK_ACTION, 2); +| #endif +| +| if (setlocale (LC_ALL, "en_US.UTF-8")) +| { +| { +| /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html +| This test needs valgrind to catch the bug on Debian +| GNU/Linux 3.1 x86, but it might catch the bug better +| on other platforms and it shouldn't hurt to try the +| test here. */ +| static char const pat[] = "insert into"; +| static char const data[] = +| "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; +| re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE +| | RE_ICASE); +| memset (®ex, 0, sizeof regex); +| s = re_compile_pattern (pat, sizeof pat - 1, ®ex); +| if (s) +| result |= 1; +| else if (re_search (®ex, data, sizeof data - 1, +| 0, sizeof data - 1, ®s) +| != -1) +| result |= 1; +| regfree (®ex); +| } +| +| { +| /* This test is from glibc bug 15078. +| The test case is from Andreas Schwab in +| <https://sourceware.org/ml/libc-alpha/2013-01/msg00967.html>. +| */ +| static char const pat[] = "[^x]x"; +| static char const data[] = +| /* <U1000><U103B><U103D><U1014><U103A><U102F><U1015><U103A> */ +| "\xe1\x80\x80" +| "\xe1\x80\xbb" +| "\xe1\x80\xbd" +| "\xe1\x80\x94" +| "\xe1\x80\xba" +| "\xe1\x80\xaf" +| "\xe1\x80\x95" +| "\xe1\x80\xba" +| "x"; +| re_set_syntax (0); +| memset (®ex, 0, sizeof regex); +| s = re_compile_pattern (pat, sizeof pat - 1, ®ex); +| if (s) +| result |= 1; +| else +| { +| i = re_search (®ex, data, sizeof data - 1, +| 0, sizeof data - 1, 0); +| if (i != 0 && i != 21) +| result |= 1; +| } +| regfree (®ex); +| } +| +| if (! setlocale (LC_ALL, "C")) +| return 1; +| } +| +| /* This test is from glibc bug 3957, reported by Andrew Mackey. */ +| re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); +| memset (®ex, 0, sizeof regex); +| s = re_compile_pattern ("a[^x]b", 6, ®ex); +| if (s) +| result |= 2; +| /* This should fail, but succeeds for glibc-2.5. */ +| else if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) +| result |= 2; +| +| /* This regular expression is from Spencer ere test number 75 +| in grep-2.3. */ +| re_set_syntax (RE_SYNTAX_POSIX_EGREP); +| memset (®ex, 0, sizeof regex); +| for (i = 0; i <= UCHAR_MAX; i++) +| folded_chars[i] = i; +| regex.translate = folded_chars; +| s = re_compile_pattern ("a[[:]:]]b\n", 11, ®ex); +| /* This should fail with _Invalid character class name_ error. */ +| if (!s) +| result |= 4; +| +| /* Ensure that [b-a] is diagnosed as invalid, when +| using RE_NO_EMPTY_RANGES. */ +| re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); +| memset (®ex, 0, sizeof regex); +| s = re_compile_pattern ("a[b-a]", 6, ®ex); +| if (s == 0) +| result |= 8; +| +| /* This should succeed, but does not for glibc-2.1.3. */ +| memset (®ex, 0, sizeof regex); +| s = re_compile_pattern ("{1", 2, ®ex); +| if (s) +| result |= 8; +| +| /* The following example is derived from a problem report +| against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */ +| memset (®ex, 0, sizeof regex); +| s = re_compile_pattern ("[an\371]*n", 7, ®ex); +| if (s) +| result |= 8; +| /* This should match, but does not for glibc-2.2.1. */ +| else if (re_match (®ex, "an", 2, 0, ®s) != 2) +| result |= 8; +| +| memset (®ex, 0, sizeof regex); +| s = re_compile_pattern ("x", 1, ®ex); +| if (s) +| result |= 8; +| /* glibc-2.2.93 does not work with a negative RANGE argument. */ +| else if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) +| result |= 8; +| +| /* The version of regex.c in older versions of gnulib +| ignored RE_ICASE. Detect that problem too. */ +| re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); +| memset (®ex, 0, sizeof regex); +| s = re_compile_pattern ("x", 1, ®ex); +| if (s) +| result |= 16; +| else if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) +| result |= 16; +| +| /* Catch a bug reported by Vin Shelton in +| https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html +| */ +| re_set_syntax (RE_SYNTAX_POSIX_BASIC +| & ~RE_CONTEXT_INVALID_DUP +| & ~RE_NO_EMPTY_RANGES); +| memset (®ex, 0, sizeof regex); +| s = re_compile_pattern ("[[:alnum:]_-]\\+$", 16, ®ex); +| if (s) +| result |= 32; +| +| /* REG_STARTEND was added to glibc on 2004-01-15. +| Reject older versions. */ +| if (! REG_STARTEND) +| result |= 64; +| +| /* Matching with the compiled form of this regexp would provoke +| an assertion failure prior to glibc-2.28: +| regexec.c:1375: pop_fail_stack: Assertion 'num >= 0' failed +| With glibc-2.28, compilation fails and reports the invalid +| back reference. */ +| re_set_syntax (RE_SYNTAX_POSIX_EGREP); +| memset (®ex, 0, sizeof regex); +| s = re_compile_pattern ("0|()0|\1|0", 10, ®ex); +| if (!s || strcmp (s, "Invalid back reference")) +| result |= 64; +| +| #if 0 +| /* It would be nice to reject hosts whose regoff_t values are too +| narrow (including glibc on hosts with 64-bit ptrdiff_t and +| 32-bit int), but we should wait until glibc implements this +| feature. Otherwise, support for equivalence classes and +| multibyte collation symbols would always be broken except +| when compiling --without-included-regex. */ +| if (sizeof (regoff_t) < sizeof (ptrdiff_t) +| || sizeof (regoff_t) < sizeof (ssize_t)) +| result |= 64; +| #endif +| +| return result; +| +| ; +| return 0; +| } +configure:39947: result: no +configure:40032: checking libintl.h usability +configure:40032: gcc -c -g -O2 conftest.c >&5 +configure:40032: $? = 0 +configure:40032: result: yes +configure:40032: checking libintl.h presence +configure:40032: gcc -E conftest.c +configure:40032: $? = 0 +configure:40032: result: yes +configure:40032: checking for libintl.h +configure:40032: result: yes +configure:40043: checking whether isblank is declared +configure:40043: gcc -c -g -O2 conftest.c >&5 +configure:40043: $? = 0 +configure:40043: result: yes +configure:40062: checking whether rename honors trailing slash on destination +configure:40111: gcc -o conftest -g -O2 conftest.c >&5 +configure:40111: $? = 0 +configure:40111: ./conftest +configure:40111: $? = 0 +configure:40123: result: yes +configure:40135: checking whether rename honors trailing slash on source +configure:40184: gcc -o conftest -g -O2 conftest.c >&5 +configure:40184: $? = 0 +configure:40184: ./conftest +configure:40184: $? = 0 +configure:40196: result: yes +configure:40209: checking whether rename manages hard links correctly +configure:40265: gcc -o conftest -g -O2 conftest.c >&5 +configure:40265: $? = 0 +configure:40265: ./conftest +configure:40265: $? = 0 +configure:40283: result: yes +configure:40295: checking whether rename manages existing destinations correctly +configure:40336: gcc -o conftest -g -O2 conftest.c >&5 +configure:40336: $? = 0 +configure:40336: ./conftest +configure:40336: $? = 0 +configure:40348: result: yes +configure:40390: checking whether rmdir works +configure:40436: gcc -o conftest -g -O2 conftest.c >&5 +configure:40436: $? = 0 +configure:40436: ./conftest +configure:40436: $? = 0 +configure:40447: result: yes +configure:40502: gcc -c -g -O2 conftest.c >&5 +configure:40502: $? = 0 +configure:40892: checking whether setenv validates arguments +configure:40936: gcc -o conftest -g -O2 conftest.c >&5 +configure:40936: $? = 0 +configure:40936: ./conftest +configure:40936: $? = 0 +configure:40946: result: yes +configure:40990: checking for struct sigaction.sa_sigaction +configure:40990: gcc -c -g -O2 conftest.c >&5 +configure:40990: $? = 0 +configure:40990: result: yes +configure:41135: checking for volatile sig_atomic_t +configure:41135: gcc -c -g -O2 conftest.c >&5 +configure:41135: $? = 0 +configure:41135: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:330:36: error: expected expression before ')' token + if (sizeof ((volatile sig_atomic_t))) + ^ +configure:41135: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| /* end confdefs.h. */ +| +| #include <signal.h> +| +| +| int +| main () +| { +| if (sizeof ((volatile sig_atomic_t))) +| return 0; +| ; +| return 0; +| } +configure:41135: result: yes +configure:41151: checking for sighandler_t +configure:41151: gcc -c -g -O2 conftest.c >&5 +configure:41151: $? = 0 +configure:41151: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:330:27: error: expected expression before ')' token + if (sizeof ((sighandler_t))) + ^ +configure:41151: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| /* end confdefs.h. */ +| +| #include <signal.h> +| +| +| int +| main () +| { +| if (sizeof ((sighandler_t))) +| return 0; +| ; +| return 0; +| } +configure:41151: result: yes +configure:41168: checking for signbit macro +configure:41275: gcc -o conftest -g -O2 conftest.c >&5 +configure:41275: $? = 0 +configure:41275: ./conftest +configure:41275: $? = 0 +configure:41286: result: yes +configure:41288: checking for signbit compiler built-ins +configure:41397: gcc -o conftest -g -O2 conftest.c >&5 +configure:41397: $? = 0 +configure:41397: ./conftest +configure:41397: $? = 0 +configure:41408: result: yes +configure:41946: checking for sigprocmask +configure:41946: result: yes +configure:41987: checking for stdint.h +configure:41987: result: yes +configure:41997: checking for SIZE_MAX +configure:42068: result: yes +configure:42163: checking for posix_spawnattr_t +configure:42163: gcc -c -g -O2 conftest.c >&5 +configure:42163: $? = 0 +configure:42163: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:333:32: error: expected expression before ')' token + if (sizeof ((posix_spawnattr_t))) + ^ +configure:42163: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| #define GNULIB_TEST_SIGNBIT 1 +| #define GNULIB_TEST_SIGPROCMASK 1 +| #define HAVE_STDINT_H 1 +| /* end confdefs.h. */ +| +| #include <spawn.h> +| +| +| int +| main () +| { +| if (sizeof ((posix_spawnattr_t))) +| return 0; +| ; +| return 0; +| } +configure:42163: result: yes +configure:42178: checking for posix_spawn_file_actions_t +configure:42178: gcc -c -g -O2 conftest.c >&5 +configure:42178: $? = 0 +configure:42178: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:334:41: error: expected expression before ')' token + if (sizeof ((posix_spawn_file_actions_t))) + ^ +configure:42178: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| #define GNULIB_TEST_SIGNBIT 1 +| #define GNULIB_TEST_SIGPROCMASK 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_POSIX_SPAWNATTR_T 1 +| /* end confdefs.h. */ +| +| #include <spawn.h> +| +| +| int +| main () +| { +| if (sizeof ((posix_spawn_file_actions_t))) +| return 0; +| ; +| return 0; +| } +configure:42178: result: yes +configure:42213: checking for ssize_t +configure:42230: gcc -c -g -O2 conftest.c >&5 +configure:42230: $? = 0 +configure:42237: result: yes +configure:42254: checking whether stat handles trailing slashes on files +configure:42296: gcc -o conftest -g -O2 conftest.c >&5 +configure:42296: $? = 0 +configure:42296: ./conftest +configure:42296: $? = 0 +configure:42307: result: yes +configure:42372: checking for struct stat.st_atim.tv_nsec +configure:42372: gcc -c -g -O2 conftest.c >&5 +configure:42372: $? = 0 +configure:42372: result: yes +configure:42381: checking whether struct stat.st_atim is of type struct timespec +configure:42408: gcc -c -g -O2 conftest.c >&5 +configure:42408: $? = 0 +configure:42415: result: yes +configure:42467: checking for struct stat.st_birthtimespec.tv_nsec +configure:42467: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:338:12: error: 'struct stat' has no member named 'st_birthtimespec' + if (ac_aggr.st_birthtimespec.tv_nsec) + ^ +configure:42467: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| #define GNULIB_TEST_SIGNBIT 1 +| #define GNULIB_TEST_SIGPROCMASK 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_POSIX_SPAWNATTR_T 1 +| #define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1 +| #define GNULIB_TEST_STAT 1 +| #define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +| #define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 +| /* end confdefs.h. */ +| #include <sys/types.h> +| #include <sys/stat.h> +| +| int +| main () +| { +| static struct stat ac_aggr; +| if (ac_aggr.st_birthtimespec.tv_nsec) +| return 0; +| ; +| return 0; +| } +configure:42467: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:338:19: error: 'struct stat' has no member named 'st_birthtimespec' + if (sizeof ac_aggr.st_birthtimespec.tv_nsec) + ^ +configure:42467: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| #define GNULIB_TEST_SIGNBIT 1 +| #define GNULIB_TEST_SIGPROCMASK 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_POSIX_SPAWNATTR_T 1 +| #define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1 +| #define GNULIB_TEST_STAT 1 +| #define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +| #define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 +| /* end confdefs.h. */ +| #include <sys/types.h> +| #include <sys/stat.h> +| +| int +| main () +| { +| static struct stat ac_aggr; +| if (sizeof ac_aggr.st_birthtimespec.tv_nsec) +| return 0; +| ; +| return 0; +| } +configure:42467: result: no +configure:42478: checking for struct stat.st_birthtimensec +configure:42478: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:338:12: error: 'struct stat' has no member named 'st_birthtimensec' + if (ac_aggr.st_birthtimensec) + ^ +configure:42478: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| #define GNULIB_TEST_SIGNBIT 1 +| #define GNULIB_TEST_SIGPROCMASK 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_POSIX_SPAWNATTR_T 1 +| #define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1 +| #define GNULIB_TEST_STAT 1 +| #define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +| #define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 +| /* end confdefs.h. */ +| #include <sys/types.h> +| #include <sys/stat.h> +| +| int +| main () +| { +| static struct stat ac_aggr; +| if (ac_aggr.st_birthtimensec) +| return 0; +| ; +| return 0; +| } +configure:42478: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:338:19: error: 'struct stat' has no member named 'st_birthtimensec' + if (sizeof ac_aggr.st_birthtimensec) + ^ +configure:42478: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| #define GNULIB_TEST_SIGNBIT 1 +| #define GNULIB_TEST_SIGPROCMASK 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_POSIX_SPAWNATTR_T 1 +| #define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1 +| #define GNULIB_TEST_STAT 1 +| #define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +| #define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 +| /* end confdefs.h. */ +| #include <sys/types.h> +| #include <sys/stat.h> +| +| int +| main () +| { +| static struct stat ac_aggr; +| if (sizeof ac_aggr.st_birthtimensec) +| return 0; +| ; +| return 0; +| } +configure:42478: result: no +configure:42489: checking for struct stat.st_birthtim.tv_nsec +configure:42489: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:338:12: error: 'struct stat' has no member named 'st_birthtim' + if (ac_aggr.st_birthtim.tv_nsec) + ^ +configure:42489: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| #define GNULIB_TEST_SIGNBIT 1 +| #define GNULIB_TEST_SIGPROCMASK 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_POSIX_SPAWNATTR_T 1 +| #define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1 +| #define GNULIB_TEST_STAT 1 +| #define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +| #define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 +| /* end confdefs.h. */ +| #include <sys/types.h> +| #include <sys/stat.h> +| +| int +| main () +| { +| static struct stat ac_aggr; +| if (ac_aggr.st_birthtim.tv_nsec) +| return 0; +| ; +| return 0; +| } +configure:42489: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:338:19: error: 'struct stat' has no member named 'st_birthtim' + if (sizeof ac_aggr.st_birthtim.tv_nsec) + ^ +configure:42489: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| #define GNULIB_TEST_SIGNBIT 1 +| #define GNULIB_TEST_SIGPROCMASK 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_POSIX_SPAWNATTR_T 1 +| #define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1 +| #define GNULIB_TEST_STAT 1 +| #define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +| #define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 +| /* end confdefs.h. */ +| #include <sys/types.h> +| #include <sys/stat.h> +| +| int +| main () +| { +| static struct stat ac_aggr; +| if (sizeof ac_aggr.st_birthtim.tv_nsec) +| return 0; +| ; +| return 0; +| } +configure:42489: result: no +configure:42509: checking for va_copy +configure:42529: gcc -c -g -O2 conftest.c >&5 +configure:42529: $? = 0 +configure:42537: result: yes +configure:42720: checking for good max_align_t +configure:42750: result: yes +configure:42762: checking whether NULL can be used in arbitrary expressions +configure:42787: result: yes +configure:42955: checking which flavor of printf attribute matches inttypes macros +configure:42982: gcc -c -g -O2 conftest.c >&5 +configure:42982: $? = 0 +configure:42989: result: system +configure:43120: checking for strcasecmp +configure:43120: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c:357:6: warning: conflicting types for built-in function 'strcasecmp' + char strcasecmp (); + ^ +configure:43120: $? = 0 +configure:43120: result: yes +configure:43137: checking for strncasecmp +configure:43137: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c:358:6: warning: conflicting types for built-in function 'strncasecmp' + char strncasecmp (); + ^ +configure:43137: $? = 0 +configure:43137: result: yes +configure:43151: checking whether strncasecmp is declared +configure:43151: gcc -c -g -O2 conftest.c >&5 +configure:43151: $? = 0 +configure:43151: result: yes +configure:43200: checking whether strcasestr works in linear time +configure:43276: gcc -o conftest -g -O2 conftest.c >&5 +configure:43276: $? = 0 +configure:43276: ./conftest +configure:43276: $? = 0 +configure:43287: result: yes +configure:43320: checking for strcasestr +configure:43320: result: yes +configure:43335: checking whether strcasestr works +configure:43404: result: yes +configure:43451: checking for strchrnul +configure:43451: gcc -o conftest -g -O2 conftest.c >&5 +configure:43451: $? = 0 +configure:43451: result: yes +configure:43463: checking whether strchrnul works +configure:43507: gcc -o conftest -g -O2 conftest.c >&5 +configure:43507: $? = 0 +configure:43507: ./conftest +configure:43507: $? = 0 +configure:43518: result: yes +configure:43602: checking for working strerror function +configure:43628: gcc -o conftest -g -O2 conftest.c >&5 +configure:43628: $? = 0 +configure:43628: ./conftest +configure:43628: $? = 0 +configure:43639: result: yes +configure:43741: checking for strsep +configure:43741: gcc -o conftest -g -O2 conftest.c >&5 +configure:43741: $? = 0 +configure:43741: result: yes +configure:43788: checking for strverscmp +configure:43788: gcc -o conftest -g -O2 conftest.c >&5 +configure:43788: $? = 0 +configure:43788: result: yes +configure:44021: checking for nlink_t +configure:44021: result: yes +configure:44151: checking whether localtime_r is declared +configure:44151: gcc -c -g -O2 conftest.c >&5 +configure:44151: $? = 0 +configure:44151: result: yes +configure:44170: checking whether localtime_r is compatible with its POSIX signature +configure:44194: gcc -c -g -O2 conftest.c >&5 +configure:44194: $? = 0 +configure:44202: result: yes +configure:44251: checking whether localtime loops forever near extrema +configure:44285: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:359:24: warning: overflow in implicit constant conversion [-Woverflow] + time_t t = -67768038400666600; + ^ +configure:44285: $? = 0 +configure:44285: ./conftest +configure:44285: $? = 0 +configure:44294: result: no +configure:44302: checking for timezone_t +configure:44302: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:355:13: error: 'timezone_t' undeclared (first use in this function) + if (sizeof (timezone_t)) + ^ +conftest.c:355:13: note: each undeclared identifier is reported only once for each function it appears in +configure:44302: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| #define GNULIB_TEST_SIGNBIT 1 +| #define GNULIB_TEST_SIGPROCMASK 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_POSIX_SPAWNATTR_T 1 +| #define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1 +| #define GNULIB_TEST_STAT 1 +| #define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +| #define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 +| #define __USE_MINGW_ANSI_STDIO 1 +| #define GNULIB_FSCANF 1 +| #define GNULIB_SCANF 1 +| #define HAVE_STRCASECMP 1 +| #define HAVE_STRNCASECMP 1 +| #define HAVE_DECL_STRNCASECMP 1 +| #define HAVE_STRCASESTR 1 +| #define GNULIB_TEST_STRCASESTR 1 +| #define HAVE_STRCHRNUL 1 +| #define GNULIB_TEST_STRCHRNUL 1 +| #define GNULIB_TEST_STRDUP 1 +| #define GNULIB_STRERROR 1 +| #define GNULIB_TEST_STRERROR 1 +| #define HAVE_STRSEP 1 +| #define GNULIB_TEST_STRSEP 1 +| #define HAVE_STRVERSCMP 1 +| #define GNULIB_TEST_STRVERSCMP 1 +| #define HAVE_DECL_LOCALTIME_R 1 +| #define GNULIB_TEST_TIME_R 1 +| /* end confdefs.h. */ +| #include <time.h> +| +| int +| main () +| { +| if (sizeof (timezone_t)) +| return 0; +| ; +| return 0; +| } +configure:44302: result: no +configure:44399: checking whether tzset clobbers localtime buffer +configure:44440: gcc -o conftest -g -O2 conftest.c >&5 +configure:44440: $? = 0 +configure:44440: ./conftest +configure:44440: $? = 0 +configure:44451: result: no +configure:44630: checking for unsetenv +configure:44630: gcc -o conftest -g -O2 conftest.c >&5 +configure:44630: $? = 0 +configure:44630: result: yes +configure:44643: checking for unsetenv() return type +configure:44668: gcc -c -g -O2 conftest.c >&5 +configure:44668: $? = 0 +configure:44675: result: int +configure:44684: checking whether unsetenv obeys POSIX +configure:44729: gcc -o conftest -g -O2 conftest.c >&5 +configure:44729: $? = 0 +configure:44729: ./conftest +configure:44729: $? = 0 +configure:44739: result: yes +configure:44841: checking for ptrdiff_t +configure:44841: result: yes +configure:45145: checking for ptrdiff_t +configure:45145: result: yes +configure:45166: checking for vasprintf +configure:45166: gcc -o conftest -g -O2 conftest.c >&5 +configure:45166: $? = 0 +configure:45166: result: yes +configure:45254: checking for vasprintf +configure:45254: result: yes +configure:45532: checking for ptrdiff_t +configure:45532: result: yes +configure:45919: checking for ptrdiff_t +configure:45919: result: yes +configure:45974: checking for waitid +configure:45974: gcc -o conftest -g -O2 conftest.c >&5 +configure:45974: $? = 0 +configure:45974: result: yes +configure:46136: checking whether mbrtowc handles incomplete characters +configure:46193: result: guessing yes +configure:46199: checking whether mbrtowc works as well as mbtowc +configure:46260: result: guessing yes +configure:46313: checking whether wcrtomb return value is correct +configure:46382: result: guessing yes +configure:46433: checking whether wctob works +configure:46534: result: guessing yes +configure:46542: checking whether wctob is declared +configure:46542: gcc -c -g -O2 conftest.c >&5 +configure:46542: $? = 0 +configure:46542: result: yes +configure:46738: checking whether iswcntrl works +configure:46782: gcc -o conftest -g -O2 conftest.c >&5 +configure:46782: $? = 0 +configure:46782: ./conftest +configure:46782: $? = 0 +configure:46793: result: yes +configure:46817: checking for towlower +configure:46817: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c:391:6: warning: conflicting types for built-in function 'towlower' + char towlower (); + ^ +configure:46817: $? = 0 +configure:46817: result: yes +configure:46865: checking for wctype_t +configure:46893: gcc -c -g -O2 conftest.c >&5 +configure:46893: $? = 0 +configure:46901: result: yes +configure:46907: checking for wctrans_t +configure:46933: gcc -c -g -O2 conftest.c >&5 +configure:46933: $? = 0 +configure:46941: result: yes +configure:46956: checking for stdint.h +configure:46956: result: yes +configure:47019: checking for malloc.h +configure:47019: result: yes +configure:47019: checking for string.h +configure:47019: result: yes +configure:47030: checking for size_t +configure:47030: result: yes +configure:47041: checking for off_t +configure:47041: gcc -c -g -O2 conftest.c >&5 +configure:47041: $? = 0 +configure:47041: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:408:20: error: expected expression before ')' token + if (sizeof ((off_t))) + ^ +configure:47041: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| #define GNULIB_TEST_SIGNBIT 1 +| #define GNULIB_TEST_SIGPROCMASK 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_POSIX_SPAWNATTR_T 1 +| #define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1 +| #define GNULIB_TEST_STAT 1 +| #define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +| #define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 +| #define __USE_MINGW_ANSI_STDIO 1 +| #define GNULIB_FSCANF 1 +| #define GNULIB_SCANF 1 +| #define HAVE_STRCASECMP 1 +| #define HAVE_STRNCASECMP 1 +| #define HAVE_DECL_STRNCASECMP 1 +| #define HAVE_STRCASESTR 1 +| #define GNULIB_TEST_STRCASESTR 1 +| #define HAVE_STRCHRNUL 1 +| #define GNULIB_TEST_STRCHRNUL 1 +| #define GNULIB_TEST_STRDUP 1 +| #define GNULIB_STRERROR 1 +| #define GNULIB_TEST_STRERROR 1 +| #define HAVE_STRSEP 1 +| #define GNULIB_TEST_STRSEP 1 +| #define HAVE_STRVERSCMP 1 +| #define GNULIB_TEST_STRVERSCMP 1 +| #define HAVE_DECL_LOCALTIME_R 1 +| #define GNULIB_TEST_TIME_R 1 +| #define GNULIB_TEST_TIME_RZ 1 +| #define GNULIB_TEST_TIMEGM 1 +| #define HAVE_RUN_TZSET_TEST 1 +| #define GNULIB_TEST_TZSET 1 +| #define USE_UNLOCKED_IO 1 +| #define HAVE_UNSETENV 1 +| #define GNULIB_TEST_UNSETENV 1 +| #define HAVE_VASPRINTF 1 +| #define GNULIB_TEST_VASPRINTF 1 +| #define HAVE_VASPRINTF 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define GNULIB_TEST_VFPRINTF_POSIX 1 +| #define HAVE_WAITID 1 +| #define GNULIB_TEST_WAITPID 1 +| #define GNULIB_TEST_WCRTOMB 1 +| #define HAVE_DECL_WCTOB 1 +| #define GNULIB_TEST_WCTOB 1 +| #define GNULIB_TEST_WCTOMB 1 +| #define HAVE_TOWLOWER 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_STRING_H 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| int +| main () +| { +| if (sizeof ((off_t))) +| return 0; +| ; +| return 0; +| } +configure:47041: result: yes +configure:47053: checking for _LARGEFILE_SOURCE value needed for large files +configure:47100: result: no +configure:47178: checking for pkg-config +configure:47196: found /usr/bin/pkg-config +configure:47208: result: /usr/bin/pkg-config +configure:47233: checking pkg-config is at least version 0.9.0 +configure:47236: result: yes +configure:47246: checking for CHECK +configure:47253: $PKG_CONFIG --exists --print-errors "check" +Package check was not found in the pkg-config search path. +Perhaps you should add the directory containing `check.pc' +to the PKG_CONFIG_PATH environment variable +No package 'check' found +configure:47256: $? = 1 +configure:47270: $PKG_CONFIG --exists --print-errors "check" +Package check was not found in the pkg-config search path. +Perhaps you should add the directory containing `check.pc' +to the PKG_CONFIG_PATH environment variable +No package 'check' found +configure:47273: $? = 1 +configure:47287: result: no +No package 'check' found +configure:47327: checking for curl_global_init in -lcurl +configure:47352: gcc -o conftest -g -O2 conftest.c -lcurl >&5 +/usr/bin/ld: cannot find -lcurl +collect2: error: ld returned 1 exit status +configure:47352: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| #define GNULIB_TEST_SIGNBIT 1 +| #define GNULIB_TEST_SIGPROCMASK 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_POSIX_SPAWNATTR_T 1 +| #define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1 +| #define GNULIB_TEST_STAT 1 +| #define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +| #define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 +| #define __USE_MINGW_ANSI_STDIO 1 +| #define GNULIB_FSCANF 1 +| #define GNULIB_SCANF 1 +| #define HAVE_STRCASECMP 1 +| #define HAVE_STRNCASECMP 1 +| #define HAVE_DECL_STRNCASECMP 1 +| #define HAVE_STRCASESTR 1 +| #define GNULIB_TEST_STRCASESTR 1 +| #define HAVE_STRCHRNUL 1 +| #define GNULIB_TEST_STRCHRNUL 1 +| #define GNULIB_TEST_STRDUP 1 +| #define GNULIB_STRERROR 1 +| #define GNULIB_TEST_STRERROR 1 +| #define HAVE_STRSEP 1 +| #define GNULIB_TEST_STRSEP 1 +| #define HAVE_STRVERSCMP 1 +| #define GNULIB_TEST_STRVERSCMP 1 +| #define HAVE_DECL_LOCALTIME_R 1 +| #define GNULIB_TEST_TIME_R 1 +| #define GNULIB_TEST_TIME_RZ 1 +| #define GNULIB_TEST_TIMEGM 1 +| #define HAVE_RUN_TZSET_TEST 1 +| #define GNULIB_TEST_TZSET 1 +| #define USE_UNLOCKED_IO 1 +| #define HAVE_UNSETENV 1 +| #define GNULIB_TEST_UNSETENV 1 +| #define HAVE_VASPRINTF 1 +| #define GNULIB_TEST_VASPRINTF 1 +| #define HAVE_VASPRINTF 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define GNULIB_TEST_VFPRINTF_POSIX 1 +| #define HAVE_WAITID 1 +| #define GNULIB_TEST_WAITPID 1 +| #define GNULIB_TEST_WCRTOMB 1 +| #define HAVE_DECL_WCTOB 1 +| #define GNULIB_TEST_WCTOB 1 +| #define GNULIB_TEST_WCTOMB 1 +| #define HAVE_TOWLOWER 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_FSEEKO 1 +| /* end confdefs.h. */ +| +| /* Override any GCC internal prototype to avoid an error. +| Use char because int might match the return type of a GCC +| builtin and then its argument prototype would still apply. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| char curl_global_init (); +| int +| main () +| { +| return curl_global_init (); +| ; +| return 0; +| } +configure:47361: result: no +configure:47373: checking for uuid_generate in -luuid +configure:47398: gcc -o conftest -g -O2 conftest.c -luuid >&5 +/usr/bin/ld: cannot find -luuid +collect2: error: ld returned 1 exit status +configure:47398: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| #define GNULIB_TEST_SIGNBIT 1 +| #define GNULIB_TEST_SIGPROCMASK 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_POSIX_SPAWNATTR_T 1 +| #define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1 +| #define GNULIB_TEST_STAT 1 +| #define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +| #define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 +| #define __USE_MINGW_ANSI_STDIO 1 +| #define GNULIB_FSCANF 1 +| #define GNULIB_SCANF 1 +| #define HAVE_STRCASECMP 1 +| #define HAVE_STRNCASECMP 1 +| #define HAVE_DECL_STRNCASECMP 1 +| #define HAVE_STRCASESTR 1 +| #define GNULIB_TEST_STRCASESTR 1 +| #define HAVE_STRCHRNUL 1 +| #define GNULIB_TEST_STRCHRNUL 1 +| #define GNULIB_TEST_STRDUP 1 +| #define GNULIB_STRERROR 1 +| #define GNULIB_TEST_STRERROR 1 +| #define HAVE_STRSEP 1 +| #define GNULIB_TEST_STRSEP 1 +| #define HAVE_STRVERSCMP 1 +| #define GNULIB_TEST_STRVERSCMP 1 +| #define HAVE_DECL_LOCALTIME_R 1 +| #define GNULIB_TEST_TIME_R 1 +| #define GNULIB_TEST_TIME_RZ 1 +| #define GNULIB_TEST_TIMEGM 1 +| #define HAVE_RUN_TZSET_TEST 1 +| #define GNULIB_TEST_TZSET 1 +| #define USE_UNLOCKED_IO 1 +| #define HAVE_UNSETENV 1 +| #define GNULIB_TEST_UNSETENV 1 +| #define HAVE_VASPRINTF 1 +| #define GNULIB_TEST_VASPRINTF 1 +| #define HAVE_VASPRINTF 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define GNULIB_TEST_VFPRINTF_POSIX 1 +| #define HAVE_WAITID 1 +| #define GNULIB_TEST_WAITPID 1 +| #define GNULIB_TEST_WCRTOMB 1 +| #define HAVE_DECL_WCTOB 1 +| #define GNULIB_TEST_WCTOB 1 +| #define GNULIB_TEST_WCTOMB 1 +| #define HAVE_TOWLOWER 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_FSEEKO 1 +| /* end confdefs.h. */ +| +| /* Override any GCC internal prototype to avoid an error. +| Use char because int might match the return type of a GCC +| builtin and then its argument prototype would still apply. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| char uuid_generate (); +| int +| main () +| { +| return uuid_generate (); +| ; +| return 0; +| } +configure:47407: result: no +configure:47921: checking for libgcrypt +configure:47943: gcc -o conftest -g -O2 conftest.c -lgcrypt -lgpg-error >&5 +conftest.c:373:23: fatal error: gpg-error.h: No such file or directory +compilation terminated. +configure:47943: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| #define GNULIB_TEST_SIGNBIT 1 +| #define GNULIB_TEST_SIGPROCMASK 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_POSIX_SPAWNATTR_T 1 +| #define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1 +| #define GNULIB_TEST_STAT 1 +| #define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +| #define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 +| #define __USE_MINGW_ANSI_STDIO 1 +| #define GNULIB_FSCANF 1 +| #define GNULIB_SCANF 1 +| #define HAVE_STRCASECMP 1 +| #define HAVE_STRNCASECMP 1 +| #define HAVE_DECL_STRNCASECMP 1 +| #define HAVE_STRCASESTR 1 +| #define GNULIB_TEST_STRCASESTR 1 +| #define HAVE_STRCHRNUL 1 +| #define GNULIB_TEST_STRCHRNUL 1 +| #define GNULIB_TEST_STRDUP 1 +| #define GNULIB_STRERROR 1 +| #define GNULIB_TEST_STRERROR 1 +| #define HAVE_STRSEP 1 +| #define GNULIB_TEST_STRSEP 1 +| #define HAVE_STRVERSCMP 1 +| #define GNULIB_TEST_STRVERSCMP 1 +| #define HAVE_DECL_LOCALTIME_R 1 +| #define GNULIB_TEST_TIME_R 1 +| #define GNULIB_TEST_TIME_RZ 1 +| #define GNULIB_TEST_TIMEGM 1 +| #define HAVE_RUN_TZSET_TEST 1 +| #define GNULIB_TEST_TZSET 1 +| #define USE_UNLOCKED_IO 1 +| #define HAVE_UNSETENV 1 +| #define GNULIB_TEST_UNSETENV 1 +| #define HAVE_VASPRINTF 1 +| #define GNULIB_TEST_VASPRINTF 1 +| #define HAVE_VASPRINTF 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define GNULIB_TEST_VFPRINTF_POSIX 1 +| #define HAVE_WAITID 1 +| #define GNULIB_TEST_WAITPID 1 +| #define GNULIB_TEST_WCRTOMB 1 +| #define HAVE_DECL_WCTOB 1 +| #define GNULIB_TEST_WCTOB 1 +| #define GNULIB_TEST_WCTOMB 1 +| #define HAVE_TOWLOWER 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_FSEEKO 1 +| /* end confdefs.h. */ +| #include <gpg-error.h> +| int +| main () +| { +| +| ; +| return 0; +| } +configure:47953: result: no +configure:48000: checking for GLIB +configure:48007: $PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.0.0" +Package glib-2.0 was not found in the pkg-config search path. +Perhaps you should add the directory containing `glib-2.0.pc' +to the PKG_CONFIG_PATH environment variable +No package 'glib-2.0' found +configure:48010: $? = 1 +configure:48024: $PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.0.0" +Package glib-2.0 was not found in the pkg-config search path. +Perhaps you should add the directory containing `glib-2.0.pc' +to the PKG_CONFIG_PATH environment variable +No package 'glib-2.0' found +configure:48027: $? = 1 +configure:48041: result: no +No package 'glib-2.0' found +configure:48071: checking for mdb_init in -lmdb +configure:48096: gcc -o conftest -g -O2 conftest.c -lmdb >&5 +/usr/bin/ld: cannot find -lmdb +collect2: error: ld returned 1 exit status +configure:48096: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| #define GNULIB_TEST_SIGNBIT 1 +| #define GNULIB_TEST_SIGPROCMASK 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_POSIX_SPAWNATTR_T 1 +| #define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1 +| #define GNULIB_TEST_STAT 1 +| #define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +| #define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 +| #define __USE_MINGW_ANSI_STDIO 1 +| #define GNULIB_FSCANF 1 +| #define GNULIB_SCANF 1 +| #define HAVE_STRCASECMP 1 +| #define HAVE_STRNCASECMP 1 +| #define HAVE_DECL_STRNCASECMP 1 +| #define HAVE_STRCASESTR 1 +| #define GNULIB_TEST_STRCASESTR 1 +| #define HAVE_STRCHRNUL 1 +| #define GNULIB_TEST_STRCHRNUL 1 +| #define GNULIB_TEST_STRDUP 1 +| #define GNULIB_STRERROR 1 +| #define GNULIB_TEST_STRERROR 1 +| #define HAVE_STRSEP 1 +| #define GNULIB_TEST_STRSEP 1 +| #define HAVE_STRVERSCMP 1 +| #define GNULIB_TEST_STRVERSCMP 1 +| #define HAVE_DECL_LOCALTIME_R 1 +| #define GNULIB_TEST_TIME_R 1 +| #define GNULIB_TEST_TIME_RZ 1 +| #define GNULIB_TEST_TIMEGM 1 +| #define HAVE_RUN_TZSET_TEST 1 +| #define GNULIB_TEST_TZSET 1 +| #define USE_UNLOCKED_IO 1 +| #define HAVE_UNSETENV 1 +| #define GNULIB_TEST_UNSETENV 1 +| #define HAVE_VASPRINTF 1 +| #define GNULIB_TEST_VASPRINTF 1 +| #define HAVE_VASPRINTF 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define GNULIB_TEST_VFPRINTF_POSIX 1 +| #define HAVE_WAITID 1 +| #define GNULIB_TEST_WAITPID 1 +| #define GNULIB_TEST_WCRTOMB 1 +| #define HAVE_DECL_WCTOB 1 +| #define GNULIB_TEST_WCTOB 1 +| #define GNULIB_TEST_WCTOMB 1 +| #define HAVE_TOWLOWER 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_FSEEKO 1 +| /* end confdefs.h. */ +| +| /* Override any GCC internal prototype to avoid an error. +| Use char because int might match the return type of a GCC +| builtin and then its argument prototype would still apply. */ +| #ifdef __cplusplus +| extern "C" +| #endif +| char mdb_init (); +| int +| main () +| { +| return mdb_init (); +| ; +| return 0; +| } +configure:48105: result: no +configure:48270: checking whether NLS is requested +configure:48279: result: yes +configure:48319: checking for msgfmt +configure: trying /usr/bin/msgfmt... +0 translated messages. +configure:48351: result: /usr/bin/msgfmt +configure:48360: checking for gmsgfmt +configure:48391: result: /usr/bin/msgfmt +configure:48441: checking for xgettext +configure: trying /usr/bin/xgettext... +/usr/bin/xgettext: warning: file '/dev/null' extension '' is unknown; will try C +configure:48473: result: /usr/bin/xgettext +configure:48518: checking for msgmerge +configure: trying /usr/bin/msgmerge... +configure:48549: result: /usr/bin/msgmerge +configure:49054: checking for CFPreferencesCopyAppValue +configure:49072: gcc -o conftest -g -O2 conftest.c -Wl,-framework -Wl,CoreFoundation >&5 +conftest.c:373:42: fatal error: CoreFoundation/CFPreferences.h: No such file or directory +compilation terminated. +configure:49072: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| #define GNULIB_TEST_SIGNBIT 1 +| #define GNULIB_TEST_SIGPROCMASK 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_POSIX_SPAWNATTR_T 1 +| #define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1 +| #define GNULIB_TEST_STAT 1 +| #define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +| #define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 +| #define __USE_MINGW_ANSI_STDIO 1 +| #define GNULIB_FSCANF 1 +| #define GNULIB_SCANF 1 +| #define HAVE_STRCASECMP 1 +| #define HAVE_STRNCASECMP 1 +| #define HAVE_DECL_STRNCASECMP 1 +| #define HAVE_STRCASESTR 1 +| #define GNULIB_TEST_STRCASESTR 1 +| #define HAVE_STRCHRNUL 1 +| #define GNULIB_TEST_STRCHRNUL 1 +| #define GNULIB_TEST_STRDUP 1 +| #define GNULIB_STRERROR 1 +| #define GNULIB_TEST_STRERROR 1 +| #define HAVE_STRSEP 1 +| #define GNULIB_TEST_STRSEP 1 +| #define HAVE_STRVERSCMP 1 +| #define GNULIB_TEST_STRVERSCMP 1 +| #define HAVE_DECL_LOCALTIME_R 1 +| #define GNULIB_TEST_TIME_R 1 +| #define GNULIB_TEST_TIME_RZ 1 +| #define GNULIB_TEST_TIMEGM 1 +| #define HAVE_RUN_TZSET_TEST 1 +| #define GNULIB_TEST_TZSET 1 +| #define USE_UNLOCKED_IO 1 +| #define HAVE_UNSETENV 1 +| #define GNULIB_TEST_UNSETENV 1 +| #define HAVE_VASPRINTF 1 +| #define GNULIB_TEST_VASPRINTF 1 +| #define HAVE_VASPRINTF 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define GNULIB_TEST_VFPRINTF_POSIX 1 +| #define HAVE_WAITID 1 +| #define GNULIB_TEST_WAITPID 1 +| #define GNULIB_TEST_WCRTOMB 1 +| #define HAVE_DECL_WCTOB 1 +| #define GNULIB_TEST_WCTOB 1 +| #define GNULIB_TEST_WCTOMB 1 +| #define HAVE_TOWLOWER 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_FSEEKO 1 +| /* end confdefs.h. */ +| #include <CoreFoundation/CFPreferences.h> +| int +| main () +| { +| CFPreferencesCopyAppValue(NULL, NULL) +| ; +| return 0; +| } +configure:49081: result: no +configure:49088: checking for CFLocaleCopyCurrent +configure:49106: gcc -o conftest -g -O2 conftest.c -Wl,-framework -Wl,CoreFoundation >&5 +conftest.c:373:37: fatal error: CoreFoundation/CFLocale.h: No such file or directory +compilation terminated. +configure:49106: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU recutils" +| #define PACKAGE_TARNAME "recutils" +| #define PACKAGE_VERSION "1.8" +| #define PACKAGE_STRING "GNU recutils 1.8" +| #define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/recutils/" +| #define PACKAGE "recutils" +| #define VERSION "1.8" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _DARWIN_C_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _NETBSD_SOURCE 1 +| #define _OPENBSD_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +| #define __STDC_WANT_LIB_EXT2__ 1 +| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +| #define _TANDEM_SOURCE 1 +| #define _HPUX_ALT_XOPEN_SOCKET_API 1 +| #define HAVE_FSEEKO 1 +| #define _FILE_OFFSET_BITS 64 +| #define _DARWIN_USE_64_BIT_INODE 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define HAVE_FCHMOD 1 +| #define HAVE_BTOWC 1 +| #define HAVE_CANONICALIZE_FILE_NAME 1 +| #define HAVE_GETCWD 1 +| #define HAVE_READLINK 1 +| #define HAVE_REALPATH 1 +| #define HAVE_FACCESSAT 1 +| #define HAVE_FCNTL 1 +| #define HAVE_SYMLINK 1 +| #define HAVE_FLOCK 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE___FWRITING 1 +| #define HAVE_GETDELIM 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETPASS 1 +| #define HAVE___FSETLOCKING 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_MBRLEN 1 +| #define HAVE_MPROTECT 1 +| #define HAVE_MKOSTEMP 1 +| #define HAVE_MKSTEMP 1 +| #define HAVE_TZSET 1 +| #define HAVE_NL_LANGINFO 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_LINK 1 +| #define HAVE_SECURE_GETENV 1 +| #define HAVE_GETUID 1 +| #define HAVE_GETEUID 1 +| #define HAVE_GETGID 1 +| #define HAVE_GETEGID 1 +| #define HAVE_SETENV 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_STRDUP 1 +| #define HAVE_LOCALTIME_R 1 +| #define HAVE_TIMEGM 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_WCTOB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define restrict __restrict +| #define HAVE_LANGINFO_CODESET 1 +| #define FUNC_REALPATH_WORKS 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_FEATURES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_SYS_CDEFS_H 1 +| #define HAVE_TERMIOS_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LANGINFO_H 1 +| #define HAVE_XLOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_MMAN_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define GETGROUPS_T gid_t +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTMAX_T 1 +| #define DBL_EXPBIT0_WORD 1 +| #define DBL_EXPBIT0_BIT 20 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_DECL__SNPRINTF 0 +| #define HAVE_SNPRINTF_RETVAL_C99 1 +| #define HAVE_DECL_ALARM 1 +| #define _USE_STD_STAT 1 +| #define HAVE_DECL_FSEEKO 1 +| #define HAVE_DECL_FTELLO 1 +| #define HAVE_DECL_GETDELIM 1 +| #define HAVE_DECL_GETDTABLESIZE 1 +| #define HAVE_DECL_GETLINE 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FLOCKFILE 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FUNLOCKFILE 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_INTTYPES_H 1 +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define USE_POSIX_THREADS 1 +| #define USE_POSIX_THREADS_WEAK 1 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define HAVE_MAP_ANONYMOUS 1 +| #define HAVE_MINMAX_IN_SYS_PARAM_H 1 +| #define TIME_T_IS_SIGNED 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define HAVE_TM_GMTOFF 1 +| #define PROMOTED_MODE_T mode_t +| #define HAVE__BOOL 1 +| #define HAVE_COMPOUND_LITERALS 1 +| #define HAVE_POSIX_SPAWN 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define USER_LABEL_PREFIX +| #define HAVE_SIGSET_T 1 +| #define HAVE_DECL_SETENV 1 +| #define HAVE_SEARCH_H 1 +| #define HAVE_TSEARCH 1 +| #define HAVE_STRCASESTR 1 +| #define HAVE_DECL_STRDUP 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_DECL_UNSETENV 1 +| #define USE_ACL 0 +| #define HAVE_ALLOCA 1 +| #define GNULIB_TEST_BTOWC 1 +| #define HAVE___BUILTIN_EXPECT 1 +| #define GNULIB_CANONICALIZE_LGPL 1 +| #define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +| #define GNULIB_TEST_REALPATH 1 +| #define GNULIB_TEST_CHDIR 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_CLOCK_SETTIME 1 +| #define GNULIB_TEST_CLOEXEC 1 +| #define GNULIB_TEST_CLOSE 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_DUP2 1 +| #define GNULIB_TEST_DUP2 1 +| #define GNULIB_TEST_ENVIRON 1 +| #define HAVE_EUIDACCESS 1 +| #define GNULIB_TEST_EUIDACCESS 1 +| #define GNULIB_TEST_FCNTL 1 +| #define FLEXIBLE_ARRAY_MEMBER /**/ +| #define GNULIB_TEST_FLOOR 1 +| #define HAVE_DECL___FPENDING 1 +| #define REPLACE_FPRINTF_POSIX 1 +| #define GNULIB_TEST_FPRINTF_POSIX 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define GNULIB_TEST_FREXP 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define GNULIB_TEST_FREXPL 1 +| #define GNULIB_TEST_FSEEK 1 +| #define GNULIB_TEST_FSEEKO 1 +| #define GNULIB_TEST_FSTAT 1 +| #define GNULIB_TEST_FTELL 1 +| #define GNULIB_TEST_FTELLO 1 +| #define GNULIB_TEST_GETDELIM 1 +| #define GNULIB_TEST_GETDTABLESIZE 1 +| #define HAVE_GETGROUPS 1 +| #define GNULIB_TEST_GETGROUPS 1 +| #define GNULIB_TEST_GETLINE 1 +| #define GNULIB_TEST_GETPASS 1 +| #define GNULIB_TEST_GETPASS 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_DECL___ARGV 0 +| #define GETTIMEOFDAY_TIMEZONE struct timezone +| #define GNULIB_TEST_GETTIMEOFDAY 1 +| #define GNULIB_TEST_GROUP_MEMBER 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define HAVE_ISNANL_IN_LIBC 1 +| #define HAVE___INLINE 1 +| #define GNULIB_TEST_LOCALECONV 1 +| #define HAVE_PTHREAD_RWLOCK 1 +| #define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +| #define GNULIB_LOCK 1 +| #define GNULIB_TEST_LSEEK 1 +| #define GNULIB_TEST_LSTAT 1 +| #define HAVE_MALLOC_POSIX 1 +| #define GNULIB_TEST_MALLOC_POSIX 1 +| #define GNULIB_TEST_MBRLEN 1 +| #define C_LOCALE_MAYBE_EILSEQ 1 +| #define GNULIB_TEST_MBRTOWC 1 +| #define GNULIB_TEST_MBSINIT 1 +| #define GNULIB_TEST_MBTOWC 1 +| #define GNULIB_TEST_MEMCHR 1 +| #define GNULIB_MKOSTEMP 1 +| #define GNULIB_TEST_MKOSTEMP 1 +| #define GNULIB_TEST_MKSTEMP 1 +| #define GNULIB_TEST_MKTIME 1 +| #define NEED_MKTIME_INTERNAL 1 +| #define GNULIB_MSVC_NOTHROW 1 +| #define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +| #define REPLACE_NL_LANGINFO 1 +| #define GNULIB_TEST_NL_LANGINFO 1 +| #define my_strftime nstrftime +| #define GNULIB_TEST_OPEN 1 +| #define HAVE_STRUCT_TM_TM_ZONE 1 +| #define HAVE_TM_ZONE 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +| #define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +| #define GNULIB_TEST_POSIX_SPAWNP 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define REPLACE_PRINTF_POSIX 1 +| #define GNULIB_TEST_PRINTF_POSIX 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +| #define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +| #define HAVE_RAISE 1 +| #define GNULIB_TEST_RAISE 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_RANDOM_R 1 +| #define GNULIB_TEST_RANDOM_R 1 +| #define HAVE_RAWMEMCHR 1 +| #define GNULIB_TEST_RAWMEMCHR 1 +| #define GNULIB_TEST_READLINK 1 +| #define HAVE_REALLOC_POSIX 1 +| #define GNULIB_TEST_REALLOC_POSIX 1 +| #define _REGEX_INCLUDE_LIMITS_H 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define GNULIB_TEST_RENAME 1 +| #define GNULIB_TEST_RMDIR 1 +| #define GNULIB_TEST_SECURE_GETENV 1 +| #define HAVE_SELINUX_SELINUX_H 0 +| #define GNULIB_TEST_SETENV 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define GNULIB_TEST_SIGACTION 1 +| #define GNULIB_TEST_SIGNBIT 1 +| #define GNULIB_TEST_SIGPROCMASK 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_POSIX_SPAWNATTR_T 1 +| #define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1 +| #define GNULIB_TEST_STAT 1 +| #define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +| #define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 +| #define __USE_MINGW_ANSI_STDIO 1 +| #define GNULIB_FSCANF 1 +| #define GNULIB_SCANF 1 +| #define HAVE_STRCASECMP 1 +| #define HAVE_STRNCASECMP 1 +| #define HAVE_DECL_STRNCASECMP 1 +| #define HAVE_STRCASESTR 1 +| #define GNULIB_TEST_STRCASESTR 1 +| #define HAVE_STRCHRNUL 1 +| #define GNULIB_TEST_STRCHRNUL 1 +| #define GNULIB_TEST_STRDUP 1 +| #define GNULIB_STRERROR 1 +| #define GNULIB_TEST_STRERROR 1 +| #define HAVE_STRSEP 1 +| #define GNULIB_TEST_STRSEP 1 +| #define HAVE_STRVERSCMP 1 +| #define GNULIB_TEST_STRVERSCMP 1 +| #define HAVE_DECL_LOCALTIME_R 1 +| #define GNULIB_TEST_TIME_R 1 +| #define GNULIB_TEST_TIME_RZ 1 +| #define GNULIB_TEST_TIMEGM 1 +| #define HAVE_RUN_TZSET_TEST 1 +| #define GNULIB_TEST_TZSET 1 +| #define USE_UNLOCKED_IO 1 +| #define HAVE_UNSETENV 1 +| #define GNULIB_TEST_UNSETENV 1 +| #define HAVE_VASPRINTF 1 +| #define GNULIB_TEST_VASPRINTF 1 +| #define HAVE_VASPRINTF 1 +| #define REPLACE_VFPRINTF_POSIX 1 +| #define GNULIB_TEST_VFPRINTF_POSIX 1 +| #define HAVE_WAITID 1 +| #define GNULIB_TEST_WAITPID 1 +| #define GNULIB_TEST_WCRTOMB 1 +| #define HAVE_DECL_WCTOB 1 +| #define GNULIB_TEST_WCTOB 1 +| #define GNULIB_TEST_WCTOMB 1 +| #define HAVE_TOWLOWER 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_MALLOC_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_FSEEKO 1 +| /* end confdefs.h. */ +| #include <CoreFoundation/CFLocale.h> +| int +| main () +| { +| CFLocaleCopyCurrent(); +| ; +| return 0; +| } +configure:49115: result: no +configure:49164: checking for GNU gettext in libc +configure:49193: gcc -o conftest -g -O2 conftest.c >&5 +configure:49193: $? = 0 +configure:49202: result: yes +configure:50047: checking whether to use NLS +configure:50049: result: yes +configure:50052: checking where the gettext function comes from +configure:50063: result: libc +configure:50248: checking that generated files are newer than configure +configure:50254: result: done +configure:50401: creating ./config.status + +## ---------------------- ## +## Running config.status. ## +## ---------------------- ## + +This file was extended by GNU recutils config.status 1.8, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = + CONFIG_HEADERS = + CONFIG_LINKS = + CONFIG_COMMANDS = + $ ./config.status + +on ubuntu + +config.status:2645: creating Makefile +config.status:2645: creating lib/Makefile +config.status:2645: creating libcsv/Makefile +config.status:2645: creating src/Makefile +config.status:2645: creating utils/Makefile +config.status:2645: creating bash/Makefile +config.status:2645: creating doc/Makefile +config.status:2645: creating po/Makefile.in +config.status:2645: creating torture/Makefile +config.status:2645: creating torture/utils/Makefile +config.status:2645: creating torture/utils/config.sh +config.status:2645: creating man/Makefile +config.status:2645: creating etc/Makefile +config.status:2645: creating algol68/Makefile +config.status:2645: creating src/config.h +config.status:2905: executing depfiles commands +config.status:2905: executing libtool commands +config.status:2905: executing po-directories commands + +## ---------------- ## +## Cache variables. ## +## ---------------- ## + +ac_cv_build=i686-pc-linux-gnu +ac_cv_c_bigendian=no +ac_cv_c_compiler_gnu=yes +ac_cv_c_flexmember=yes +ac_cv_c_inline=inline +ac_cv_c_restrict=__restrict +ac_cv_env_CC_set= +ac_cv_env_CC_value= +ac_cv_env_CFLAGS_set= +ac_cv_env_CFLAGS_value= +ac_cv_env_CHECK_CFLAGS_set= +ac_cv_env_CHECK_CFLAGS_value= +ac_cv_env_CHECK_LIBS_set= +ac_cv_env_CHECK_LIBS_value= +ac_cv_env_CPPFLAGS_set= +ac_cv_env_CPPFLAGS_value= +ac_cv_env_CPP_set= +ac_cv_env_CPP_value= +ac_cv_env_GLIB_CFLAGS_set= +ac_cv_env_GLIB_CFLAGS_value= +ac_cv_env_GLIB_LIBS_set= +ac_cv_env_GLIB_LIBS_value= +ac_cv_env_LDFLAGS_set= +ac_cv_env_LDFLAGS_value= +ac_cv_env_LEXLIB_set= +ac_cv_env_LEXLIB_value= +ac_cv_env_LEX_OUTPUT_ROOT_set= +ac_cv_env_LEX_OUTPUT_ROOT_value= +ac_cv_env_LEX_set= +ac_cv_env_LEX_value= +ac_cv_env_LIBS_set= +ac_cv_env_LIBS_value= +ac_cv_env_LT_SYS_LIBRARY_PATH_set= +ac_cv_env_LT_SYS_LIBRARY_PATH_value= +ac_cv_env_PKG_CONFIG_LIBDIR_set= +ac_cv_env_PKG_CONFIG_LIBDIR_value= +ac_cv_env_PKG_CONFIG_PATH_set= +ac_cv_env_PKG_CONFIG_PATH_value= +ac_cv_env_PKG_CONFIG_set= +ac_cv_env_PKG_CONFIG_value= +ac_cv_env_YACC_set= +ac_cv_env_YACC_value= +ac_cv_env_YFLAGS_set= +ac_cv_env_YFLAGS_value= +ac_cv_env_build_alias_set= +ac_cv_env_build_alias_value= +ac_cv_env_host_alias_set= +ac_cv_env_host_alias_value= +ac_cv_env_target_alias_set= +ac_cv_env_target_alias_value= +ac_cv_func___fseterr=no +ac_cv_func___fsetlocking=yes +ac_cv_func___fwriting=yes +ac_cv_func___mktime_internal=no +ac_cv_func__set_invalid_parameter_handler=no +ac_cv_func_alloca_works=yes +ac_cv_func_btowc=yes +ac_cv_func_canonicalize_file_name=yes +ac_cv_func_clock_gettime=yes +ac_cv_func_clock_settime=yes +ac_cv_func_euidaccess=yes +ac_cv_func_faccessat=yes +ac_cv_func_fchmod=yes +ac_cv_func_fcntl=yes +ac_cv_func_flock=yes +ac_cv_func_getcwd=yes +ac_cv_func_getdelim=yes +ac_cv_func_getdtablesize=yes +ac_cv_func_getegid=yes +ac_cv_func_geteuid=yes +ac_cv_func_getexecname=no +ac_cv_func_getgid=yes +ac_cv_func_getgroups=yes +ac_cv_func_getgroups_works=yes +ac_cv_func_getline=yes +ac_cv_func_getopt_long_only=yes +ac_cv_func_getpass=yes +ac_cv_func_getprogname=no +ac_cv_func_gettimeofday=yes +ac_cv_func_getuid=yes +ac_cv_func_group_member=yes +ac_cv_func_isblank=yes +ac_cv_func_iswcntrl=yes +ac_cv_func_iswctype=yes +ac_cv_func_link=yes +ac_cv_func_localtime_r=yes +ac_cv_func_lstat=yes +ac_cv_func_malloc_0_nonnull=yes +ac_cv_func_mbrlen=yes +ac_cv_func_mbrtowc=yes +ac_cv_func_mbsinit=yes +ac_cv_func_mkostemp=yes +ac_cv_func_mkstemp=yes +ac_cv_func_mmap=yes +ac_cv_func_mprotect=yes +ac_cv_func_nl_langinfo=yes +ac_cv_func_obstack=no +ac_cv_func_posix_spawn=yes +ac_cv_func_raise=yes +ac_cv_func_random_r=yes +ac_cv_func_rawmemchr=yes +ac_cv_func_readlink=yes +ac_cv_func_realpath=yes +ac_cv_func_secure_getenv=yes +ac_cv_func_setenv=yes +ac_cv_func_sigaction=yes +ac_cv_func_sigaltstack=yes +ac_cv_func_siginterrupt=yes +ac_cv_func_sigprocmask=yes +ac_cv_func_snprintf=yes +ac_cv_func_strcasecmp=yes +ac_cv_func_strcasestr=yes +ac_cv_func_strchrnul=yes +ac_cv_func_strdup=yes +ac_cv_func_strerror_r=yes +ac_cv_func_strerror_r_char_p=yes +ac_cv_func_strncasecmp=yes +ac_cv_func_strnlen=yes +ac_cv_func_strsep=yes +ac_cv_func_strverscmp=yes +ac_cv_func_symlink=yes +ac_cv_func_timegm=yes +ac_cv_func_towlower=yes +ac_cv_func_tsearch=yes +ac_cv_func_tzset=yes +ac_cv_func_unsetenv=yes +ac_cv_func_vasnprintf=no +ac_cv_func_vasprintf=yes +ac_cv_func_waitid=yes +ac_cv_func_wcrtomb=yes +ac_cv_func_wcslen=yes +ac_cv_func_wcsnlen=yes +ac_cv_func_wctob=yes +ac_cv_gnu_library_2_1=yes +ac_cv_have_decl___argv=no +ac_cv_have_decl___fpending=yes +ac_cv_have_decl__snprintf=no +ac_cv_have_decl_alarm=yes +ac_cv_have_decl_clearerr_unlocked=yes +ac_cv_have_decl_feof_unlocked=yes +ac_cv_have_decl_ferror_unlocked=yes +ac_cv_have_decl_fflush_unlocked=yes +ac_cv_have_decl_fgets_unlocked=yes +ac_cv_have_decl_flockfile=yes +ac_cv_have_decl_fputc_unlocked=yes +ac_cv_have_decl_fputs_unlocked=yes +ac_cv_have_decl_fread_unlocked=yes +ac_cv_have_decl_frexpl=yes +ac_cv_have_decl_fseeko=yes +ac_cv_have_decl_ftello=yes +ac_cv_have_decl_funlockfile=yes +ac_cv_have_decl_fwrite_unlocked=yes +ac_cv_have_decl_getc_unlocked=yes +ac_cv_have_decl_getchar_unlocked=yes +ac_cv_have_decl_getdelim=yes +ac_cv_have_decl_getdtablesize=yes +ac_cv_have_decl_getline=yes +ac_cv_have_decl_isblank=yes +ac_cv_have_decl_ldexpl=yes +ac_cv_have_decl_localtime_r=yes +ac_cv_have_decl_program_invocation_name=yes +ac_cv_have_decl_program_invocation_short_name=yes +ac_cv_have_decl_putc_unlocked=yes +ac_cv_have_decl_putchar_unlocked=yes +ac_cv_have_decl_setenv=yes +ac_cv_have_decl_strdup=yes +ac_cv_have_decl_strerror_r=yes +ac_cv_have_decl_strncasecmp=yes +ac_cv_have_decl_unsetenv=yes +ac_cv_have_decl_wctob=yes +ac_cv_header_crtdefs_h=no +ac_cv_header_dlfcn_h=yes +ac_cv_header_features_h=yes +ac_cv_header_getopt_h=yes +ac_cv_header_inttypes_h=yes +ac_cv_header_langinfo_h=yes +ac_cv_header_libintl_h=yes +ac_cv_header_limits_h=yes +ac_cv_header_malloc_h=yes +ac_cv_header_math_h=yes +ac_cv_header_memory_h=yes +ac_cv_header_minix_config_h=no +ac_cv_header_pthread_h=yes +ac_cv_header_random_h=no +ac_cv_header_readline_history_h=no +ac_cv_header_readline_readline_h=no +ac_cv_header_search_h=yes +ac_cv_header_selinux_selinux_h=no +ac_cv_header_spawn_h=yes +ac_cv_header_stat_broken=no +ac_cv_header_stdbool_h=yes +ac_cv_header_stdc=yes +ac_cv_header_stdint_h=yes +ac_cv_header_stdio_ext_h=yes +ac_cv_header_stdlib_h=yes +ac_cv_header_string_h=yes +ac_cv_header_strings_h=yes +ac_cv_header_sys_acl_h=no +ac_cv_header_sys_cdefs_h=yes +ac_cv_header_sys_file_h=yes +ac_cv_header_sys_mman_h=yes +ac_cv_header_sys_param_h=yes +ac_cv_header_sys_socket_h=yes +ac_cv_header_sys_stat_h=yes +ac_cv_header_sys_time_h=yes +ac_cv_header_sys_types_h=yes +ac_cv_header_sys_wait_h=yes +ac_cv_header_termios_h=yes +ac_cv_header_unistd_h=yes +ac_cv_header_wchar_h=yes +ac_cv_header_wctype_h=yes +ac_cv_header_xlocale_h=yes +ac_cv_host=i686-pc-linux-gnu +ac_cv_lib_curl_curl_global_init=no +ac_cv_lib_error_at_line=yes +ac_cv_lib_mdb_mdb_init=no +ac_cv_lib_uuid_uuid_generate=no +ac_cv_libgcrypt=no +ac_cv_member_struct_sigaction_sa_sigaction=yes +ac_cv_member_struct_stat_st_atim_tv_nsec=yes +ac_cv_member_struct_stat_st_birthtim_tv_nsec=no +ac_cv_member_struct_stat_st_birthtimensec=no +ac_cv_member_struct_stat_st_birthtimespec_tv_nsec=no +ac_cv_member_struct_tm_tm_gmtoff=yes +ac_cv_member_struct_tm_tm_zone=yes +ac_cv_objext=o +ac_cv_path_EGREP='/bin/grep -E' +ac_cv_path_FGREP='/bin/grep -F' +ac_cv_path_GMSGFMT=/usr/bin/msgfmt +ac_cv_path_GREP=/bin/grep +ac_cv_path_MSGFMT=/usr/bin/msgfmt +ac_cv_path_MSGMERGE=/usr/bin/msgmerge +ac_cv_path_SED=/bin/sed +ac_cv_path_XGETTEXT=/usr/bin/xgettext +ac_cv_path_ac_pt_PKG_CONFIG=/usr/bin/pkg-config +ac_cv_path_install='/usr/bin/install -c' +ac_cv_path_lt_DD=/bin/dd +ac_cv_path_mkdir=/bin/mkdir +ac_cv_prog_AWK=gawk +ac_cv_prog_CPP='gcc -E' +ac_cv_prog_ac_ct_AR=ar +ac_cv_prog_ac_ct_CC=gcc +ac_cv_prog_ac_ct_MANIFEST_TOOL=mt +ac_cv_prog_ac_ct_OBJDUMP=objdump +ac_cv_prog_ac_ct_RANLIB=ranlib +ac_cv_prog_ac_ct_STRIP=strip +ac_cv_prog_cc_c89= +ac_cv_prog_cc_c99= +ac_cv_prog_cc_g=yes +ac_cv_prog_cc_stdc= +ac_cv_prog_make_make_set=yes +ac_cv_safe_to_define___extensions__=yes +ac_cv_search_clock_gettime='none required' +ac_cv_search_posix_spawn='none required' +ac_cv_search_setfilecon=no +ac_cv_should_define__xopen_source=no +ac_cv_struct_tm=time.h +ac_cv_sys_file_offset_bits=64 +ac_cv_sys_largefile_CC=no +ac_cv_sys_largefile_source=no +ac_cv_type__Bool=yes +ac_cv_type_getgroups=gid_t +ac_cv_type_long_long_int=yes +ac_cv_type_mbstate_t=yes +ac_cv_type_mode_t=yes +ac_cv_type_nlink_t=yes +ac_cv_type_off_t=yes +ac_cv_type_pid_t=yes +ac_cv_type_posix_spawn_file_actions_t=yes +ac_cv_type_posix_spawnattr_t=yes +ac_cv_type_pthread_rwlock_t=yes +ac_cv_type_ptrdiff_t=yes +ac_cv_type_sig_atomic_t=yes +ac_cv_type_sighandler_t=yes +ac_cv_type_sigset_t=yes +ac_cv_type_size_t=yes +ac_cv_type_struct_random_data=yes +ac_cv_type_timezone_t=no +ac_cv_type_uid_t=yes +ac_cv_type_unsigned_long_long_int=yes +ac_cv_type_volatile_sig_atomic_t=yes +ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes +ac_cv_working_alloca_h=yes +acl_cv_hardcode_direct=no +acl_cv_hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' +acl_cv_hardcode_libdir_separator= +acl_cv_hardcode_minus_L=no +acl_cv_libdirstems=lib,lib +acl_cv_libext=a +acl_cv_libname_spec='lib$name' +acl_cv_library_names_spec='$libname$shrext' +acl_cv_prog_gnu_ld=yes +acl_cv_rpath=done +acl_cv_shlibext=so +acl_cv_wl=-Wl, +am_cv_CC_dependencies_compiler_type=gcc3 +am_cv_func_working_getline=yes +am_cv_langinfo_codeset=yes +am_cv_make_support_nested_variables=yes +am_cv_prog_cc_c_o=yes +gl_cv_C_locale_sans_EILSEQ=no +gl_cv___builtin_expect=yes +gl_cv_c___inline=yes +gl_cv_c_amsterdam_compiler=no +gl_cv_c_multiarch=no +gl_cv_cc_double_expbit0='word 1 bit 20' +gl_cv_cc_float_expbit0='word 0 bit 23' +gl_cv_compound_literals=yes +gl_cv_decl_null_works=yes +gl_cv_decl_readlink_works=yes +gl_cv_double_slash_root=no +gl_cv_func___fpending=yes +gl_cv_func_btowc_eof='guessing yes' +gl_cv_func_btowc_nul=yes +gl_cv_func_dup2_works=yes +gl_cv_func_fcntl_f_dupfd_cloexec='needs runtime check' +gl_cv_func_fcntl_f_dupfd_works=yes +gl_cv_func_floor_libm=-lm +gl_cv_func_fprintf_posix=no +gl_cv_func_frexp_no_libm=yes +gl_cv_func_frexp_works=yes +gl_cv_func_frexpl_no_libm=yes +gl_cv_func_frexpl_works=yes +gl_cv_func_fseeko=yes +gl_cv_func_ftello=yes +gl_cv_func_ftello_works=yes +gl_cv_func_getdtablesize_works=yes +gl_cv_func_getgroups_works=yes +gl_cv_func_getopt_gnu=yes +gl_cv_func_getopt_long_gnu=yes +gl_cv_func_getopt_posix=yes +gl_cv_func_getpass_good=yes +gl_cv_func_gettimeofday_clobber=no +gl_cv_func_gettimeofday_posix_signature=almost +gl_cv_func_isnand_no_libm=yes +gl_cv_func_isnanf_no_libm=yes +gl_cv_func_isnanf_works=yes +gl_cv_func_isnanl_no_libm=yes +gl_cv_func_isnanl_works=yes +gl_cv_func_iswcntrl_works=yes +gl_cv_func_itold_works=yes +gl_cv_func_ldexp_no_libm=yes +gl_cv_func_ldexpl_no_libm=yes +gl_cv_func_ldexpl_works=yes +gl_cv_func_localtime_infloop_bug=no +gl_cv_func_lseek_pipe=yes +gl_cv_func_lstat_dereferences_slashed_symlink=yes +gl_cv_func_malloc_0_nonnull=1 +gl_cv_func_malloc_posix=yes +gl_cv_func_mbrtowc_empty_input=yes +gl_cv_func_mbrtowc_incomplete_state='guessing yes' +gl_cv_func_mbrtowc_nul_retval='guessing yes' +gl_cv_func_mbrtowc_null_arg1='guessing yes' +gl_cv_func_mbrtowc_null_arg2='guessing yes' +gl_cv_func_mbrtowc_retval='guessing yes' +gl_cv_func_mbrtowc_sanitycheck='guessing yes' +gl_cv_func_memchr_works=yes +gl_cv_func_mkdir_trailing_dot_works=yes +gl_cv_func_mkdir_trailing_slash_works=yes +gl_cv_func_nl_langinfo_yesexpr_works=yes +gl_cv_func_open_slash=yes +gl_cv_func_posix_spawn_file_actions_addopen_works=yes +gl_cv_func_posix_spawn_works=yes +gl_cv_func_printf_attribute_flavor=system +gl_cv_func_printf_directive_a=yes +gl_cv_func_printf_directive_f=yes +gl_cv_func_printf_directive_ls=yes +gl_cv_func_printf_directive_n=no +gl_cv_func_printf_enomem=yes +gl_cv_func_printf_flag_grouping=yes +gl_cv_func_printf_flag_leftadjust=yes +gl_cv_func_printf_flag_zero=yes +gl_cv_func_printf_infinite=yes +gl_cv_func_printf_infinite_long_double=yes +gl_cv_func_printf_long_double=yes +gl_cv_func_printf_positions=yes +gl_cv_func_printf_precision=yes +gl_cv_func_printf_sizes_c99=yes +gl_cv_func_re_compile_pattern_working=no +gl_cv_func_readlink_works=yes +gl_cv_func_realpath_works=yes +gl_cv_func_rename_dest_works=yes +gl_cv_func_rename_link_works=yes +gl_cv_func_rename_slash_dst_works=yes +gl_cv_func_rename_slash_src_works=yes +gl_cv_func_rmdir_works=yes +gl_cv_func_setenv_works=yes +gl_cv_func_signbit=yes +gl_cv_func_signbit_gcc=yes +gl_cv_func_sigprocmask=1 +gl_cv_func_snprintf_retval_c99=yes +gl_cv_func_spawnattr_setschedparam=yes +gl_cv_func_spawnattr_setschedpolicy=yes +gl_cv_func_stat_file_slash=yes +gl_cv_func_strcasestr_linear=yes +gl_cv_func_strcasestr_works_always=yes +gl_cv_func_strchrnul_works=yes +gl_cv_func_strerror_0_works=yes +gl_cv_func_tzset_clobber=no +gl_cv_func_unsetenv_works=yes +gl_cv_func_va_copy=yes +gl_cv_func_vasnprintf_posix=no +gl_cv_func_vasprintf_posix=no +gl_cv_func_vfprintf_posix=no +gl_cv_func_wcrtomb_retval='guessing yes' +gl_cv_func_wctob_works='guessing yes' +gl_cv_func_working_getdelim=yes +gl_cv_func_working_mkstemp=yes +gl_cv_func_working_mktime=yes +gl_cv_func_working_strerror=yes +gl_cv_have_include_next=yes +gl_cv_have_weak=yes +gl_cv_header_errno_h_complete=yes +gl_cv_header_inttypes_h=yes +gl_cv_header_langinfo_altmon=no +gl_cv_header_langinfo_codeset=yes +gl_cv_header_langinfo_era=yes +gl_cv_header_langinfo_t_fmt_ampm=yes +gl_cv_header_langinfo_yesexpr=yes +gl_cv_header_limits_width=no +gl_cv_header_locale_h_needs_xlocale_h=no +gl_cv_header_locale_h_posix2001=yes +gl_cv_header_locale_has_locale_t=yes +gl_cv_header_math_huge_val_works=yes +gl_cv_header_math_nan_works=yes +gl_cv_header_stdint_h=yes +gl_cv_header_stdint_predates_cxx11_h=no +gl_cv_header_stdint_width=no +gl_cv_header_wchar_h_correct_inline=yes +gl_cv_header_working_fcntl_h=yes +gl_cv_header_working_stdint_h=yes +gl_cv_host_cpu_c_abi_32bit=yes +gl_cv_lib_readline=no +gl_cv_linker_have_as_needed=yes +gl_cv_linker_have_push_state=yes +gl_cv_long_double_equals_double=no +gl_cv_macro_O_CLOEXEC=yes +gl_cv_minmax_in_limits_h=no +gl_cv_minmax_in_sys_param_h=yes +gl_cv_next_fcntl_h='<fcntl.h>' +gl_cv_next_getopt_h='<getopt.h>' +gl_cv_next_inttypes_h='<inttypes.h>' +gl_cv_next_langinfo_h='<langinfo.h>' +gl_cv_next_limits_h='<limits.h>' +gl_cv_next_locale_h='<locale.h>' +gl_cv_next_math_h='<math.h>' +gl_cv_next_signal_h='<signal.h>' +gl_cv_next_spawn_h='<spawn.h>' +gl_cv_next_stdint_h='<stdint.h>' +gl_cv_next_stdio_h='<stdio.h>' +gl_cv_next_stdlib_h='<stdlib.h>' +gl_cv_next_string_h='<string.h>' +gl_cv_next_strings_h='<strings.h>' +gl_cv_next_sys_file_h='<sys/file.h>' +gl_cv_next_sys_stat_h='<sys/stat.h>' +gl_cv_next_sys_time_h='<sys/time.h>' +gl_cv_next_sys_types_h='<sys/types.h>' +gl_cv_next_sys_wait_h='<sys/wait.h>' +gl_cv_next_time_h='<time.h>' +gl_cv_next_unistd_h='<unistd.h>' +gl_cv_next_wchar_h='<wchar.h>' +gl_cv_next_wctype_h='<wctype.h>' +gl_cv_pragma_columns=no +gl_cv_prog_as_underscore=no +gl_cv_promoted_mode_t=mode_t +gl_cv_pthread_rwlock_rdlock_prefer_writer=no +gl_cv_rpl_alloca=yes +gl_cv_size_max=yes +gl_cv_sys_struct_lconv_ok=yes +gl_cv_sys_struct_timespec_in_time_h=yes +gl_cv_sys_struct_timeval=yes +gl_cv_sys_struct_timeval_tv_sec=yes +gl_cv_test_INT32_MAX_LT_INTMAX_MAX=yes +gl_cv_test_INT64_MAX_EQ_LONG_MAX=no +gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=yes +gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=no +gl_cv_time_r_posix=yes +gl_cv_time_t_is_signed=yes +gl_cv_type_max_align_t=yes +gl_cv_type_sigset_t=yes +gl_cv_type_wctrans_t=yes +gl_cv_type_wctype_t=yes +gl_cv_type_wint_t_too_small=no +gl_cv_var_stdin_large_offset=yes +gt_cv_c_intmax_t=yes +gt_cv_c_wchar_t=yes +gt_cv_c_wint_t=yes +gt_cv_func_CFLocaleCopyCurrent=no +gt_cv_func_CFPreferencesCopyAppValue=no +gt_cv_func_gnugettext1_libc=yes +gt_cv_func_unsetenv_ret=int +gt_cv_inttypes_pri_broken=no +gt_cv_locale_fr=none +gt_cv_locale_fr_utf8=none +gt_cv_locale_ja=none +gt_cv_locale_zh_CN=none +gt_cv_ssize_t=yes +gt_cv_var_environ_declaration=yes +lt_cv_ar_at_file=@ +lt_cv_archive_cmds_need_lc=no +lt_cv_deplibs_check_method=pass_all +lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_ld_reload_flag=-r +lt_cv_nm_interface='BSD nm' +lt_cv_objdir=.libs +lt_cv_path_LD=/usr/bin/ld +lt_cv_path_NM='/usr/bin/nm -B' +lt_cv_path_mainfest_tool=no +lt_cv_prog_compiler_c_o=yes +lt_cv_prog_compiler_pic='-fPIC -DPIC' +lt_cv_prog_compiler_pic_works=yes +lt_cv_prog_compiler_rtti_exceptions=no +lt_cv_prog_compiler_static_works=yes +lt_cv_prog_gnu_ld=yes +lt_cv_sharedlib_from_linklib_cmd='printf %s\n' +lt_cv_shlibpath_overrides_runpath=no +lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'' | sed '\''/ __gnu_lto/d'\''' +lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \(.*\) .*$/ {"\1", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/ {"\1", (void *) \&\1},/p'\''' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \(.*\) .*$/ {"\1", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(lib.*\)$/ {"\1", (void *) \&\1},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/ {"lib\1", (void *) \&\1},/p'\''' +lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' +lt_cv_sys_global_symbol_to_import= +lt_cv_sys_max_cmd_len=1572864 +lt_cv_to_host_file_cmd=func_convert_file_noop +lt_cv_to_tool_file_cmd=func_convert_file_noop +lt_cv_truncate_bin='/bin/dd bs=4096 count=1' + +## ----------------- ## +## Output variables. ## +## ----------------- ## + +ACLOCAL='${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing aclocal-1.15' +ALLOCA='' +ALLOCA_H='alloca.h' +AMDEPBACKSLASH='\' +AMDEP_FALSE='#' +AMDEP_TRUE='' +AMTAR='$${TAR-tar}' +AM_BACKSLASH='\' +AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +AM_DEFAULT_VERBOSITY='1' +AM_V='$(V)' +APPLE_UNIVERSAL_BUILD='0' +AR='ar' +ARFLAGS='cr' +ASM_SYMBOL_PREFIX='""' +AUTOCONF='${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoconf' +AUTOHEADER='${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoheader' +AUTOMAKE='${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing automake-1.15' +AWK='gawk' +BASH_BUILTINS_FALSE='' +BASH_BUILTINS_TRUE='#' +BASH_HEADERS='/usr/include/bash' +BITSIZEOF_PTRDIFF_T='' +BITSIZEOF_SIG_ATOMIC_T='' +BITSIZEOF_SIZE_T='' +BITSIZEOF_WCHAR_T='' +BITSIZEOF_WINT_T='' +BUILD_A68_FALSE='' +BUILD_A68_TRUE='#' +CA68='' +CC='gcc' +CCDEPMODE='depmode=gcc3' +CFLAGS='-g -O2' +CHECK_CFLAGS='' +CHECK_FALSE='' +CHECK_LIBS='' +CHECK_TRUE='#' +COMPILE_MDB2REC_FALSE='' +COMPILE_MDB2REC_TRUE='#' +CONFIG_INCLUDE='src/config.h' +CPP='gcc -E' +CPPFLAGS='' +CRYPT_FALSE='' +CRYPT_TRUE='#' +CURLLIBS='' +CYGPATH_W='echo' +DEFS='-DHAVE_CONFIG_H' +DEPDIR='.deps' +DLLTOOL='false' +DSYMUTIL='' +DUMPBIN='' +ECHO_C='' +ECHO_N='-n' +ECHO_T='' +EGREP='/bin/grep -E' +EMULTIHOP_HIDDEN='' +EMULTIHOP_VALUE='' +ENOLINK_HIDDEN='' +ENOLINK_VALUE='' +EOVERFLOW_HIDDEN='' +EOVERFLOW_VALUE='' +ERRNO_H='' +EXEEXT='' +FGREP='/bin/grep -F' +FLOAT_H='' +FLOOR_LIBM='-lm' +GETOPT_CDEFS_H='' +GETOPT_H='' +GETTEXT_MACRO_VERSION='0.19' +GLIBC21='yes' +GLIB_CFLAGS='' +GLIB_LIBS='' +GL_COND_LIBTOOL_FALSE='#' +GL_COND_LIBTOOL_TRUE='' +GL_GENERATE_ALLOCA_H_FALSE='#' +GL_GENERATE_ALLOCA_H_TRUE='' +GL_GENERATE_ERRNO_H_FALSE='' +GL_GENERATE_ERRNO_H_TRUE='#' +GL_GENERATE_FLOAT_H_FALSE='' +GL_GENERATE_FLOAT_H_TRUE='#' +GL_GENERATE_LIMITS_H_FALSE='#' +GL_GENERATE_LIMITS_H_TRUE='' +GL_GENERATE_SCHED_H_FALSE='' +GL_GENERATE_SCHED_H_TRUE='#' +GL_GENERATE_SELINUX_CONTEXT_H_FALSE='#' +GL_GENERATE_SELINUX_CONTEXT_H_TRUE='' +GL_GENERATE_STDARG_H_FALSE='' +GL_GENERATE_STDARG_H_TRUE='#' +GL_GENERATE_STDBOOL_H_FALSE='' +GL_GENERATE_STDBOOL_H_TRUE='#' +GL_GENERATE_STDDEF_H_FALSE='' +GL_GENERATE_STDDEF_H_TRUE='#' +GL_GENERATE_STDINT_H_FALSE='#' +GL_GENERATE_STDINT_H_TRUE='' +GMSGFMT='/usr/bin/msgfmt' +GMSGFMT_015='/usr/bin/msgfmt' +GNULIB_ACOSF='0' +GNULIB_ACOSL='0' +GNULIB_ASINF='0' +GNULIB_ASINL='0' +GNULIB_ATAN2F='0' +GNULIB_ATANF='0' +GNULIB_ATANL='0' +GNULIB_ATOLL='0' +GNULIB_BTOWC='1' +GNULIB_CALLOC_POSIX='0' +GNULIB_CANONICALIZE_FILE_NAME='1' +GNULIB_CBRT='0' +GNULIB_CBRTF='0' +GNULIB_CBRTL='0' +GNULIB_CEIL='0' +GNULIB_CEILF='0' +GNULIB_CEILL='0' +GNULIB_CHDIR='1' +GNULIB_CHOWN='0' +GNULIB_CLOSE='1' +GNULIB_COPYSIGN='0' +GNULIB_COPYSIGNF='0' +GNULIB_COPYSIGNL='0' +GNULIB_COSF='0' +GNULIB_COSHF='0' +GNULIB_COSL='0' +GNULIB_CTIME='0' +GNULIB_DPRINTF='0' +GNULIB_DUP2='1' +GNULIB_DUP3='0' +GNULIB_DUP='0' +GNULIB_DUPLOCALE='0' +GNULIB_ENVIRON='1' +GNULIB_EUIDACCESS='1' +GNULIB_EXP2='0' +GNULIB_EXP2F='0' +GNULIB_EXP2L='0' +GNULIB_EXPF='0' +GNULIB_EXPL='0' +GNULIB_EXPLICIT_BZERO='0' +GNULIB_EXPM1='0' +GNULIB_EXPM1F='0' +GNULIB_EXPM1L='0' +GNULIB_FABSF='0' +GNULIB_FABSL='0' +GNULIB_FACCESSAT='0' +GNULIB_FCHDIR='0' +GNULIB_FCHMODAT='0' +GNULIB_FCHOWNAT='0' +GNULIB_FCLOSE='0' +GNULIB_FCNTL='1' +GNULIB_FDATASYNC='0' +GNULIB_FDOPEN='0' +GNULIB_FFLUSH='0' +GNULIB_FFS='0' +GNULIB_FFSL='0' +GNULIB_FFSLL='0' +GNULIB_FGETC='1' +GNULIB_FGETS='1' +GNULIB_FLOCK='1' +GNULIB_FLOOR='1' +GNULIB_FLOORF='0' +GNULIB_FLOORL='0' +GNULIB_FMA='0' +GNULIB_FMAF='0' +GNULIB_FMAL='0' +GNULIB_FMOD='0' +GNULIB_FMODF='0' +GNULIB_FMODL='0' +GNULIB_FOPEN='0' +GNULIB_FPRINTF='1' +GNULIB_FPRINTF_POSIX='1' +GNULIB_FPURGE='0' +GNULIB_FPUTC='1' +GNULIB_FPUTS='1' +GNULIB_FREAD='1' +GNULIB_FREOPEN='0' +GNULIB_FREXP='1' +GNULIB_FREXPF='0' +GNULIB_FREXPL='1' +GNULIB_FSCANF='1' +GNULIB_FSEEK='1' +GNULIB_FSEEKO='1' +GNULIB_FSTAT='1' +GNULIB_FSTATAT='0' +GNULIB_FSYNC='0' +GNULIB_FTELL='1' +GNULIB_FTELLO='1' +GNULIB_FTRUNCATE='0' +GNULIB_FUTIMENS='0' +GNULIB_FWRITE='1' +GNULIB_GETC='1' +GNULIB_GETCHAR='1' +GNULIB_GETCWD='0' +GNULIB_GETDELIM='1' +GNULIB_GETDOMAINNAME='0' +GNULIB_GETDTABLESIZE='1' +GNULIB_GETGROUPS='1' +GNULIB_GETHOSTNAME='0' +GNULIB_GETLINE='1' +GNULIB_GETLOADAVG='0' +GNULIB_GETLOGIN='0' +GNULIB_GETLOGIN_R='0' +GNULIB_GETPAGESIZE='0' +GNULIB_GETPASS='1' +GNULIB_GETSUBOPT='0' +GNULIB_GETTIMEOFDAY='1' +GNULIB_GETUSERSHELL='0' +GNULIB_GL_UNISTD_H_GETOPT='' +GNULIB_GRANTPT='0' +GNULIB_GROUP_MEMBER='1' +GNULIB_HYPOT='0' +GNULIB_HYPOTF='0' +GNULIB_HYPOTL='0' +GNULIB_ILOGB='0' +GNULIB_ILOGBF='0' +GNULIB_ILOGBL='0' +GNULIB_IMAXABS='0' +GNULIB_IMAXDIV='0' +GNULIB_ISATTY='0' +GNULIB_ISFINITE='0' +GNULIB_ISINF='0' +GNULIB_ISNAN='0' +GNULIB_ISNAND='0' +GNULIB_ISNANF='0' +GNULIB_ISNANL='0' +GNULIB_ISWBLANK='0' +GNULIB_ISWCTYPE='0' +GNULIB_LCHMOD='0' +GNULIB_LCHOWN='0' +GNULIB_LDEXPF='0' +GNULIB_LDEXPL='0' +GNULIB_LINK='0' +GNULIB_LINKAT='0' +GNULIB_LOCALECONV='1' +GNULIB_LOCALENAME='0' +GNULIB_LOCALTIME='0' +GNULIB_LOG10='0' +GNULIB_LOG10F='0' +GNULIB_LOG10L='0' +GNULIB_LOG1P='0' +GNULIB_LOG1PF='0' +GNULIB_LOG1PL='0' +GNULIB_LOG2='0' +GNULIB_LOG2F='0' +GNULIB_LOG2L='0' +GNULIB_LOG='0' +GNULIB_LOGB='0' +GNULIB_LOGBF='0' +GNULIB_LOGBL='0' +GNULIB_LOGF='0' +GNULIB_LOGL='0' +GNULIB_LSEEK='1' +GNULIB_LSTAT='1' +GNULIB_MALLOC_POSIX='1' +GNULIB_MBRLEN='1' +GNULIB_MBRTOWC='1' +GNULIB_MBSCASECMP='0' +GNULIB_MBSCASESTR='0' +GNULIB_MBSCHR='0' +GNULIB_MBSCSPN='0' +GNULIB_MBSINIT='1' +GNULIB_MBSLEN='0' +GNULIB_MBSNCASECMP='0' +GNULIB_MBSNLEN='0' +GNULIB_MBSNRTOWCS='0' +GNULIB_MBSPBRK='0' +GNULIB_MBSPCASECMP='0' +GNULIB_MBSRCHR='0' +GNULIB_MBSRTOWCS='0' +GNULIB_MBSSEP='0' +GNULIB_MBSSPN='0' +GNULIB_MBSSTR='0' +GNULIB_MBSTOK_R='0' +GNULIB_MBTOWC='1' +GNULIB_MEMCHR='1' +GNULIB_MEMMEM='0' +GNULIB_MEMPCPY='0' +GNULIB_MEMRCHR='0' +GNULIB_MKDIRAT='0' +GNULIB_MKDTEMP='0' +GNULIB_MKFIFO='0' +GNULIB_MKFIFOAT='0' +GNULIB_MKNOD='0' +GNULIB_MKNODAT='0' +GNULIB_MKOSTEMP='1' +GNULIB_MKOSTEMPS='0' +GNULIB_MKSTEMP='1' +GNULIB_MKSTEMPS='0' +GNULIB_MKTIME='1' +GNULIB_MODF='0' +GNULIB_MODFF='0' +GNULIB_MODFL='0' +GNULIB_NANOSLEEP='0' +GNULIB_NL_LANGINFO='1' +GNULIB_NONBLOCKING='0' +GNULIB_OBSTACK_PRINTF='0' +GNULIB_OBSTACK_PRINTF_POSIX='0' +GNULIB_OPEN='1' +GNULIB_OPENAT='0' +GNULIB_OVERRIDES_STRUCT_STAT='0' +GNULIB_OVERRIDES_WINT_T='0' +GNULIB_PCLOSE='0' +GNULIB_PERROR='0' +GNULIB_PIPE2='0' +GNULIB_PIPE='0' +GNULIB_POPEN='0' +GNULIB_POSIX_OPENPT='0' +GNULIB_POSIX_SPAWN='0' +GNULIB_POSIX_SPAWNATTR_DESTROY='1' +GNULIB_POSIX_SPAWNATTR_GETFLAGS='0' +GNULIB_POSIX_SPAWNATTR_GETPGROUP='0' +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM='0' +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY='0' +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT='0' +GNULIB_POSIX_SPAWNATTR_GETSIGMASK='0' +GNULIB_POSIX_SPAWNATTR_INIT='1' +GNULIB_POSIX_SPAWNATTR_SETFLAGS='1' +GNULIB_POSIX_SPAWNATTR_SETPGROUP='0' +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM='0' +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY='0' +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT='0' +GNULIB_POSIX_SPAWNATTR_SETSIGMASK='1' +GNULIB_POSIX_SPAWNP='1' +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR='0' +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE='0' +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2='0' +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN='1' +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY='1' +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT='1' +GNULIB_POWF='0' +GNULIB_PREAD='0' +GNULIB_PRINTF='1' +GNULIB_PRINTF_POSIX='1' +GNULIB_PTHREAD_SIGMASK='0' +GNULIB_PTSNAME='0' +GNULIB_PTSNAME_R='0' +GNULIB_PUTC='1' +GNULIB_PUTCHAR='1' +GNULIB_PUTENV='0' +GNULIB_PUTS='1' +GNULIB_PWRITE='0' +GNULIB_QSORT_R='0' +GNULIB_RAISE='1' +GNULIB_RANDOM='0' +GNULIB_RANDOM_R='1' +GNULIB_RAWMEMCHR='1' +GNULIB_READ='0' +GNULIB_READLINK='1' +GNULIB_READLINKAT='0' +GNULIB_REALLOCARRAY='0' +GNULIB_REALLOC_POSIX='1' +GNULIB_REALPATH='1' +GNULIB_REMAINDER='0' +GNULIB_REMAINDERF='0' +GNULIB_REMAINDERL='0' +GNULIB_REMOVE='0' +GNULIB_RENAME='1' +GNULIB_RENAMEAT='0' +GNULIB_RINT='0' +GNULIB_RINTF='0' +GNULIB_RINTL='0' +GNULIB_RMDIR='1' +GNULIB_ROUND='0' +GNULIB_ROUNDF='0' +GNULIB_ROUNDL='0' +GNULIB_RPMATCH='0' +GNULIB_SCANF='1' +GNULIB_SECURE_GETENV='1' +GNULIB_SETENV='1' +GNULIB_SETHOSTNAME='0' +GNULIB_SETLOCALE='0' +GNULIB_SIGACTION='1' +GNULIB_SIGNAL_H_SIGPIPE='0' +GNULIB_SIGNBIT='1' +GNULIB_SIGPROCMASK='1' +GNULIB_SINF='0' +GNULIB_SINHF='0' +GNULIB_SINL='0' +GNULIB_SLEEP='0' +GNULIB_SNPRINTF='0' +GNULIB_SPRINTF_POSIX='0' +GNULIB_SQRTF='0' +GNULIB_SQRTL='0' +GNULIB_STAT='1' +GNULIB_STDIO_H_NONBLOCKING='0' +GNULIB_STDIO_H_SIGPIPE='0' +GNULIB_STPCPY='0' +GNULIB_STPNCPY='0' +GNULIB_STRCASESTR='1' +GNULIB_STRCHRNUL='1' +GNULIB_STRDUP='1' +GNULIB_STRERROR='1' +GNULIB_STRERROR_R='0' +GNULIB_STRFTIME='0' +GNULIB_STRNCAT='0' +GNULIB_STRNDUP='0' +GNULIB_STRNLEN='0' +GNULIB_STRPBRK='0' +GNULIB_STRPTIME='0' +GNULIB_STRSEP='1' +GNULIB_STRSIGNAL='0' +GNULIB_STRSTR='0' +GNULIB_STRTOD='0' +GNULIB_STRTOIMAX='0' +GNULIB_STRTOK_R='0' +GNULIB_STRTOLL='0' +GNULIB_STRTOULL='0' +GNULIB_STRTOUMAX='0' +GNULIB_STRVERSCMP='1' +GNULIB_SYMLINK='0' +GNULIB_SYMLINKAT='0' +GNULIB_SYSTEM_POSIX='0' +GNULIB_TANF='0' +GNULIB_TANHF='0' +GNULIB_TANL='0' +GNULIB_TIMEGM='1' +GNULIB_TIME_R='1' +GNULIB_TIME_RZ='1' +GNULIB_TMPFILE='0' +GNULIB_TOWCTRANS='0' +GNULIB_TRUNC='0' +GNULIB_TRUNCATE='0' +GNULIB_TRUNCF='0' +GNULIB_TRUNCL='0' +GNULIB_TTYNAME_R='0' +GNULIB_TZSET='1' +GNULIB_UNISTD_H_NONBLOCKING='0' +GNULIB_UNISTD_H_SIGPIPE='0' +GNULIB_UNLINK='0' +GNULIB_UNLINKAT='0' +GNULIB_UNLOCKPT='0' +GNULIB_UNSETENV='1' +GNULIB_USLEEP='0' +GNULIB_UTIMENSAT='0' +GNULIB_VASPRINTF='1' +GNULIB_VDPRINTF='0' +GNULIB_VFPRINTF='1' +GNULIB_VFPRINTF_POSIX='1' +GNULIB_VFSCANF='0' +GNULIB_VPRINTF='1' +GNULIB_VPRINTF_POSIX='0' +GNULIB_VSCANF='0' +GNULIB_VSNPRINTF='0' +GNULIB_VSPRINTF_POSIX='0' +GNULIB_WAITPID='1' +GNULIB_WCPCPY='0' +GNULIB_WCPNCPY='0' +GNULIB_WCRTOMB='1' +GNULIB_WCSCASECMP='0' +GNULIB_WCSCAT='0' +GNULIB_WCSCHR='0' +GNULIB_WCSCMP='0' +GNULIB_WCSCOLL='0' +GNULIB_WCSCPY='0' +GNULIB_WCSCSPN='0' +GNULIB_WCSDUP='0' +GNULIB_WCSFTIME='0' +GNULIB_WCSLEN='0' +GNULIB_WCSNCASECMP='0' +GNULIB_WCSNCAT='0' +GNULIB_WCSNCMP='0' +GNULIB_WCSNCPY='0' +GNULIB_WCSNLEN='0' +GNULIB_WCSNRTOMBS='0' +GNULIB_WCSPBRK='0' +GNULIB_WCSRCHR='0' +GNULIB_WCSRTOMBS='0' +GNULIB_WCSSPN='0' +GNULIB_WCSSTR='0' +GNULIB_WCSTOK='0' +GNULIB_WCSWIDTH='0' +GNULIB_WCSXFRM='0' +GNULIB_WCTOB='1' +GNULIB_WCTOMB='1' +GNULIB_WCTRANS='0' +GNULIB_WCTYPE='0' +GNULIB_WCWIDTH='0' +GNULIB_WMEMCHR='0' +GNULIB_WMEMCMP='0' +GNULIB_WMEMCPY='0' +GNULIB_WMEMMOVE='0' +GNULIB_WMEMSET='0' +GNULIB_WRITE='0' +GNULIB__EXIT='0' +GREP='/bin/grep' +HAVE_ACOSF='1' +HAVE_ACOSL='1' +HAVE_ASINF='1' +HAVE_ASINL='1' +HAVE_ATAN2F='1' +HAVE_ATANF='1' +HAVE_ATANL='1' +HAVE_ATOLL='1' +HAVE_BTOWC='1' +HAVE_C99_STDINT_H='1' +HAVE_CANONICALIZE_FILE_NAME='1' +HAVE_CBRT='1' +HAVE_CBRTF='1' +HAVE_CBRTL='1' +HAVE_CHOWN='1' +HAVE_COPYSIGN='1' +HAVE_COPYSIGNL='1' +HAVE_COSF='1' +HAVE_COSHF='1' +HAVE_COSL='1' +HAVE_CRTDEFS_H='0' +HAVE_DECL_ACOSL='1' +HAVE_DECL_ASINL='1' +HAVE_DECL_ATANL='1' +HAVE_DECL_CBRTF='1' +HAVE_DECL_CBRTL='1' +HAVE_DECL_CEILF='1' +HAVE_DECL_CEILL='1' +HAVE_DECL_COPYSIGNF='1' +HAVE_DECL_COSL='1' +HAVE_DECL_ENVIRON='1' +HAVE_DECL_EXP2='1' +HAVE_DECL_EXP2F='1' +HAVE_DECL_EXP2L='1' +HAVE_DECL_EXPL='1' +HAVE_DECL_EXPM1L='1' +HAVE_DECL_FCHDIR='1' +HAVE_DECL_FDATASYNC='1' +HAVE_DECL_FLOORF='1' +HAVE_DECL_FLOORL='1' +HAVE_DECL_FPURGE='1' +HAVE_DECL_FREXPL='1' +HAVE_DECL_FSEEKO='1' +HAVE_DECL_FTELLO='1' +HAVE_DECL_GETDELIM='1' +HAVE_DECL_GETDOMAINNAME='1' +HAVE_DECL_GETLINE='1' +HAVE_DECL_GETLOADAVG='1' +HAVE_DECL_GETLOGIN='1' +HAVE_DECL_GETLOGIN_R='1' +HAVE_DECL_GETPAGESIZE='1' +HAVE_DECL_GETUSERSHELL='1' +HAVE_DECL_IMAXABS='1' +HAVE_DECL_IMAXDIV='1' +HAVE_DECL_INITSTATE='1' +HAVE_DECL_LDEXPL='1' +HAVE_DECL_LOCALTIME_R='1' +HAVE_DECL_LOG10L='1' +HAVE_DECL_LOG2='1' +HAVE_DECL_LOG2F='1' +HAVE_DECL_LOG2L='1' +HAVE_DECL_LOGB='1' +HAVE_DECL_LOGL='1' +HAVE_DECL_MEMMEM='1' +HAVE_DECL_MEMRCHR='1' +HAVE_DECL_OBSTACK_PRINTF='1' +HAVE_DECL_REMAINDER='1' +HAVE_DECL_REMAINDERL='1' +HAVE_DECL_RINTF='1' +HAVE_DECL_ROUND='1' +HAVE_DECL_ROUNDF='1' +HAVE_DECL_ROUNDL='1' +HAVE_DECL_SETENV='1' +HAVE_DECL_SETHOSTNAME='1' +HAVE_DECL_SETSTATE='1' +HAVE_DECL_SINL='1' +HAVE_DECL_SNPRINTF='1' +HAVE_DECL_SQRTL='1' +HAVE_DECL_STRDUP='1' +HAVE_DECL_STRERROR_R='1' +HAVE_DECL_STRNCASECMP='1' +HAVE_DECL_STRNDUP='1' +HAVE_DECL_STRNLEN='1' +HAVE_DECL_STRSIGNAL='1' +HAVE_DECL_STRTOIMAX='1' +HAVE_DECL_STRTOK_R='1' +HAVE_DECL_STRTOUMAX='1' +HAVE_DECL_TANL='1' +HAVE_DECL_TRUNC='1' +HAVE_DECL_TRUNCATE='1' +HAVE_DECL_TRUNCF='1' +HAVE_DECL_TRUNCL='1' +HAVE_DECL_TTYNAME_R='1' +HAVE_DECL_UNSETENV='1' +HAVE_DECL_VSNPRINTF='1' +HAVE_DECL_WCTOB='1' +HAVE_DECL_WCWIDTH='1' +HAVE_DPRINTF='1' +HAVE_DUP2='1' +HAVE_DUP3='1' +HAVE_DUPLOCALE='1' +HAVE_EUIDACCESS='1' +HAVE_EXPF='1' +HAVE_EXPL='1' +HAVE_EXPLICIT_BZERO='1' +HAVE_EXPM1='1' +HAVE_EXPM1F='1' +HAVE_FABSF='1' +HAVE_FABSL='1' +HAVE_FACCESSAT='1' +HAVE_FCHDIR='1' +HAVE_FCHMODAT='1' +HAVE_FCHOWNAT='1' +HAVE_FCNTL='1' +HAVE_FDATASYNC='1' +HAVE_FEATURES_H='1' +HAVE_FFS='1' +HAVE_FFSL='1' +HAVE_FFSLL='1' +HAVE_FLOCK='1' +HAVE_FMA='1' +HAVE_FMAF='1' +HAVE_FMAL='1' +HAVE_FMODF='1' +HAVE_FMODL='1' +HAVE_FREELOCALE='1' +HAVE_FREXPF='1' +HAVE_FSEEKO='1' +HAVE_FSTATAT='1' +HAVE_FSYNC='1' +HAVE_FTELLO='1' +HAVE_FTRUNCATE='1' +HAVE_FUTIMENS='1' +HAVE_GETDTABLESIZE='1' +HAVE_GETGROUPS='1' +HAVE_GETHOSTNAME='1' +HAVE_GETLOGIN='1' +HAVE_GETOPT_H='1' +HAVE_GETPAGESIZE='1' +HAVE_GETPASS='1' +HAVE_GETSUBOPT='1' +HAVE_GETTIMEOFDAY='1' +HAVE_GRANTPT='1' +HAVE_GROUP_MEMBER='1' +HAVE_HYPOTF='1' +HAVE_HYPOTL='1' +HAVE_ILOGB='1' +HAVE_ILOGBF='1' +HAVE_ILOGBL='1' +HAVE_IMAXDIV_T='1' +HAVE_INTTYPES_H='1' +HAVE_ISNAND='1' +HAVE_ISNANF='1' +HAVE_ISNANL='1' +HAVE_ISWBLANK='1' +HAVE_ISWCNTRL='1' +HAVE_LANGINFO_ALTMON='0' +HAVE_LANGINFO_CODESET='1' +HAVE_LANGINFO_ERA='1' +HAVE_LANGINFO_H='1' +HAVE_LANGINFO_T_FMT_AMPM='1' +HAVE_LANGINFO_YESEXPR='1' +HAVE_LCHMOD='1' +HAVE_LCHOWN='1' +HAVE_LDEXPF='1' +HAVE_LIBGCRYPT='no' +HAVE_LINK='1' +HAVE_LINKAT='1' +HAVE_LOG10F='1' +HAVE_LOG10L='1' +HAVE_LOG1P='1' +HAVE_LOG1PF='1' +HAVE_LOG1PL='1' +HAVE_LOGBF='1' +HAVE_LOGBL='1' +HAVE_LOGF='1' +HAVE_LOGL='1' +HAVE_LONG_LONG_INT='1' +HAVE_LSTAT='1' +HAVE_MAX_ALIGN_T='1' +HAVE_MBRLEN='1' +HAVE_MBRTOWC='1' +HAVE_MBSINIT='1' +HAVE_MBSLEN='0' +HAVE_MBSNRTOWCS='1' +HAVE_MBSRTOWCS='1' +HAVE_MEMCHR='1' +HAVE_MEMPCPY='1' +HAVE_MKDIRAT='1' +HAVE_MKDTEMP='1' +HAVE_MKFIFO='1' +HAVE_MKFIFOAT='1' +HAVE_MKNOD='1' +HAVE_MKNODAT='1' +HAVE_MKOSTEMP='1' +HAVE_MKOSTEMPS='1' +HAVE_MKSTEMP='1' +HAVE_MKSTEMPS='1' +HAVE_MODFF='1' +HAVE_MODFL='1' +HAVE_MSVC_INVALID_PARAMETER_HANDLER='0' +HAVE_NANOSLEEP='1' +HAVE_NEWLOCALE='1' +HAVE_NL_LANGINFO='1' +HAVE_OPENAT='1' +HAVE_OS_H='0' +HAVE_PCLOSE='1' +HAVE_PIPE2='1' +HAVE_PIPE='1' +HAVE_POPEN='1' +HAVE_POSIX_OPENPT='1' +HAVE_POSIX_SIGNALBLOCKING='1' +HAVE_POSIX_SPAWN='1' +HAVE_POSIX_SPAWNATTR_T='1' +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR='1' +HAVE_POSIX_SPAWN_FILE_ACTIONS_T='1' +HAVE_POWF='1' +HAVE_PREAD='1' +HAVE_PTHREAD_SIGMASK='1' +HAVE_PTSNAME='1' +HAVE_PTSNAME_R='1' +HAVE_PWRITE='1' +HAVE_QSORT_R='1' +HAVE_RAISE='1' +HAVE_RANDOM='1' +HAVE_RANDOM_H='0' +HAVE_RANDOM_R='1' +HAVE_RAWMEMCHR='1' +HAVE_READLINK='1' +HAVE_READLINKAT='1' +HAVE_REALLOCARRAY='1' +HAVE_REALPATH='1' +HAVE_REMAINDER='1' +HAVE_REMAINDERF='1' +HAVE_RENAMEAT='1' +HAVE_RINT='1' +HAVE_RINTL='1' +HAVE_RPMATCH='1' +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE='0' +HAVE_SCHED_H='' +HAVE_SECURE_GETENV='1' +HAVE_SETENV='1' +HAVE_SETHOSTNAME='1' +HAVE_SIGACTION='1' +HAVE_SIGHANDLER_T='1' +HAVE_SIGINFO_T='1' +HAVE_SIGNED_SIG_ATOMIC_T='' +HAVE_SIGNED_WCHAR_T='' +HAVE_SIGNED_WINT_T='' +HAVE_SIGSET_T='1' +HAVE_SINF='1' +HAVE_SINHF='1' +HAVE_SINL='1' +HAVE_SLEEP='1' +HAVE_SPAWN_H='1' +HAVE_SQRTF='1' +HAVE_SQRTL='1' +HAVE_STDINT_H='1' +HAVE_STPCPY='1' +HAVE_STPNCPY='1' +HAVE_STRCASECMP='1' +HAVE_STRCASESTR='1' +HAVE_STRCHRNUL='1' +HAVE_STRINGS_H='1' +HAVE_STRPBRK='1' +HAVE_STRPTIME='1' +HAVE_STRSEP='1' +HAVE_STRTOD='1' +HAVE_STRTOLL='1' +HAVE_STRTOULL='1' +HAVE_STRUCT_RANDOM_DATA='1' +HAVE_STRUCT_SCHED_PARAM='' +HAVE_STRUCT_SIGACTION_SA_SIGACTION='1' +HAVE_STRUCT_TIMEVAL='1' +HAVE_STRVERSCMP='1' +HAVE_SYMLINK='1' +HAVE_SYMLINKAT='1' +HAVE_SYS_BITYPES_H='0' +HAVE_SYS_CDEFS_H='' +HAVE_SYS_FILE_H='1' +HAVE_SYS_INTTYPES_H='0' +HAVE_SYS_LOADAVG_H='0' +HAVE_SYS_PARAM_H='0' +HAVE_SYS_TIME_H='1' +HAVE_SYS_TYPES_H='1' +HAVE_TANF='1' +HAVE_TANHF='1' +HAVE_TANL='1' +HAVE_TIMEGM='1' +HAVE_TIMEZONE_T='0' +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T='1' +HAVE_TZSET='1' +HAVE_UNISTD_H='1' +HAVE_UNLINKAT='1' +HAVE_UNLOCKPT='1' +HAVE_UNSIGNED_LONG_LONG_INT='1' +HAVE_USLEEP='1' +HAVE_UTIMENSAT='1' +HAVE_VASPRINTF='1' +HAVE_VDPRINTF='1' +HAVE_WCHAR_H='1' +HAVE_WCHAR_T='1' +HAVE_WCPCPY='1' +HAVE_WCPNCPY='1' +HAVE_WCRTOMB='1' +HAVE_WCSCASECMP='1' +HAVE_WCSCAT='1' +HAVE_WCSCHR='1' +HAVE_WCSCMP='1' +HAVE_WCSCOLL='1' +HAVE_WCSCPY='1' +HAVE_WCSCSPN='1' +HAVE_WCSDUP='1' +HAVE_WCSFTIME='1' +HAVE_WCSLEN='1' +HAVE_WCSNCASECMP='1' +HAVE_WCSNCAT='1' +HAVE_WCSNCMP='1' +HAVE_WCSNCPY='1' +HAVE_WCSNLEN='1' +HAVE_WCSNRTOMBS='1' +HAVE_WCSPBRK='1' +HAVE_WCSRCHR='1' +HAVE_WCSRTOMBS='1' +HAVE_WCSSPN='1' +HAVE_WCSSTR='1' +HAVE_WCSTOK='1' +HAVE_WCSWIDTH='1' +HAVE_WCSXFRM='1' +HAVE_WCTRANS_T='1' +HAVE_WCTYPE_H='1' +HAVE_WCTYPE_T='1' +HAVE_WINSOCK2_H='0' +HAVE_WINT_T='1' +HAVE_WMEMCHR='1' +HAVE_WMEMCMP='1' +HAVE_WMEMCPY='1' +HAVE_WMEMMOVE='1' +HAVE_WMEMSET='1' +HAVE_XLOCALE_H='1' +HAVE__BOOL='1' +HAVE__EXIT='1' +HELP2MAN='${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing help2man' +INCLUDE_NEXT='include_next' +INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' +INSTALL_DATA='${INSTALL} -m 644' +INSTALL_PROGRAM='${INSTALL}' +INSTALL_SCRIPT='${INSTALL}' +INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' +INT32_MAX_LT_INTMAX_MAX='1' +INT64_MAX_EQ_LONG_MAX='0' +INTLLIBS='' +INTL_MACOSX_LIBS='' +LD='/usr/bin/ld' +LDFLAGS='' +LEX='flex' +LEXLIB='-lfl' +LEX_OUTPUT_ROOT='lex.yy' +LIBGCRYPT='' +LIBGCRYPT_PREFIX='' +LIBICONV='-liconv' +LIBINTL='' +LIBMULTITHREAD='-pthread -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state' +LIBOBJS='' +LIBPTH='' +LIBPTH_PREFIX='' +LIBREADLINE='' +LIBS='' +LIBTHREAD='' +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +LIB_ACL='' +LIB_CLOCK_GETTIME='' +LIB_EACCESS='' +LIB_POSIX_SPAWN='' +LIB_SELINUX='' +LIMITS_H='limits.h' +LIPO='' +LN_S='ln -s' +LOCALCHARSET_TESTS_ENVIRONMENT='' +LOCALE_FR='none' +LOCALE_FR_UTF8='none' +LOCALE_JA='none' +LOCALE_ZH_CN='none' +LTALLOCA='' +LTLIBGCRYPT='' +LTLIBICONV='-liconv' +LTLIBINTL='' +LTLIBMULTITHREAD='-pthread' +LTLIBOBJS='' +LTLIBPTH='' +LTLIBREADLINE='' +LTLIBTHREAD='' +LT_SYS_LIBRARY_PATH='' +MAKEINFO='${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing makeinfo' +MANIFEST_TOOL=':' +MDBLIBS='' +MDB_DATETIME='' +MKDIR_P='/bin/mkdir -p' +MSGFMT='/usr/bin/msgfmt' +MSGFMT_015='/usr/bin/msgfmt' +MSGMERGE='/usr/bin/msgmerge' +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H='' +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H='<fcntl.h>' +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H='' +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H='<getopt.h>' +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H='<inttypes.h>' +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H='<langinfo.h>' +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H='<limits.h>' +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H='<locale.h>' +NEXT_AS_FIRST_DIRECTIVE_MATH_H='<math.h>' +NEXT_AS_FIRST_DIRECTIVE_SCHED_H='' +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H='' +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H='<signal.h>' +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H='<spawn.h>' +NEXT_AS_FIRST_DIRECTIVE_STDARG_H='' +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H='' +NEXT_AS_FIRST_DIRECTIVE_STDINT_H='<stdint.h>' +NEXT_AS_FIRST_DIRECTIVE_STDIO_H='<stdio.h>' +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H='<stdlib.h>' +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H='<strings.h>' +NEXT_AS_FIRST_DIRECTIVE_STRING_H='<string.h>' +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H='<sys/file.h>' +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H='<sys/stat.h>' +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H='<sys/time.h>' +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H='<sys/types.h>' +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H='<sys/wait.h>' +NEXT_AS_FIRST_DIRECTIVE_TIME_H='<time.h>' +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H='<unistd.h>' +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H='<wchar.h>' +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H='<wctype.h>' +NEXT_ERRNO_H='' +NEXT_FCNTL_H='<fcntl.h>' +NEXT_FLOAT_H='' +NEXT_GETOPT_H='<getopt.h>' +NEXT_INTTYPES_H='<inttypes.h>' +NEXT_LANGINFO_H='<langinfo.h>' +NEXT_LIMITS_H='<limits.h>' +NEXT_LOCALE_H='<locale.h>' +NEXT_MATH_H='<math.h>' +NEXT_SCHED_H='' +NEXT_SELINUX_SELINUX_H='' +NEXT_SIGNAL_H='<signal.h>' +NEXT_SPAWN_H='<spawn.h>' +NEXT_STDARG_H='<stdarg.h>' +NEXT_STDDEF_H='' +NEXT_STDINT_H='<stdint.h>' +NEXT_STDIO_H='<stdio.h>' +NEXT_STDLIB_H='<stdlib.h>' +NEXT_STRINGS_H='<strings.h>' +NEXT_STRING_H='<string.h>' +NEXT_SYS_FILE_H='<sys/file.h>' +NEXT_SYS_STAT_H='<sys/stat.h>' +NEXT_SYS_TIME_H='<sys/time.h>' +NEXT_SYS_TYPES_H='<sys/types.h>' +NEXT_SYS_WAIT_H='<sys/wait.h>' +NEXT_TIME_H='<time.h>' +NEXT_UNISTD_H='<unistd.h>' +NEXT_WCHAR_H='<wchar.h>' +NEXT_WCTYPE_H='<wctype.h>' +NM='/usr/bin/nm -B' +NMEDIT='' +OBJDUMP='objdump' +OBJEXT='o' +OTOOL64='' +OTOOL='' +PACKAGE='recutils' +PACKAGE_BUGREPORT='bug-recutils@gnu.org' +PACKAGE_NAME='GNU recutils' +PACKAGE_STRING='GNU recutils 1.8' +PACKAGE_TARNAME='recutils' +PACKAGE_URL='http://www.gnu.org/software/recutils/' +PACKAGE_VERSION='1.8' +PATH_SEPARATOR=':' +PKG_CONFIG='/usr/bin/pkg-config' +PKG_CONFIG_LIBDIR='' +PKG_CONFIG_PATH='' +POSUB='po' +PRAGMA_COLUMNS='' +PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' +PRIPTR_PREFIX='"l"' +PRI_MACROS_BROKEN='0' +PTHREAD_H_DEFINES_STRUCT_TIMESPEC='0' +PTRDIFF_T_SUFFIX='' +RANLIB='ranlib' +REMOTE_DESCRIPTORS_FALSE='' +REMOTE_DESCRIPTORS_TRUE='#' +REPLACE_ACOSF='0' +REPLACE_ASINF='0' +REPLACE_ATAN2F='0' +REPLACE_ATANF='0' +REPLACE_BTOWC='0' +REPLACE_CALLOC='0' +REPLACE_CANONICALIZE_FILE_NAME='0' +REPLACE_CBRTF='0' +REPLACE_CBRTL='0' +REPLACE_CEIL='0' +REPLACE_CEILF='0' +REPLACE_CEILL='0' +REPLACE_CHOWN='0' +REPLACE_CLOSE='0' +REPLACE_COSF='0' +REPLACE_COSHF='0' +REPLACE_CTIME='GNULIB_PORTCHECK' +REPLACE_DPRINTF='0' +REPLACE_DUP2='0' +REPLACE_DUP='0' +REPLACE_DUPLOCALE='0' +REPLACE_EXP2='0' +REPLACE_EXP2L='0' +REPLACE_EXPF='0' +REPLACE_EXPM1='0' +REPLACE_EXPM1F='0' +REPLACE_FABSL='0' +REPLACE_FACCESSAT='0' +REPLACE_FCHOWNAT='0' +REPLACE_FCLOSE='0' +REPLACE_FCNTL='1' +REPLACE_FDOPEN='0' +REPLACE_FFLUSH='0' +REPLACE_FLOOR='0' +REPLACE_FLOORF='0' +REPLACE_FLOORL='0' +REPLACE_FMA='0' +REPLACE_FMAF='0' +REPLACE_FMAL='0' +REPLACE_FMOD='0' +REPLACE_FMODF='0' +REPLACE_FMODL='0' +REPLACE_FOPEN='0' +REPLACE_FPRINTF='1' +REPLACE_FPURGE='0' +REPLACE_FREELOCALE='0' +REPLACE_FREOPEN='0' +REPLACE_FREXP='0' +REPLACE_FREXPF='0' +REPLACE_FREXPL='0' +REPLACE_FSEEK='0' +REPLACE_FSEEKO='0' +REPLACE_FSTAT='0' +REPLACE_FSTATAT='0' +REPLACE_FTELL='0' +REPLACE_FTELLO='0' +REPLACE_FTRUNCATE='0' +REPLACE_FUTIMENS='0' +REPLACE_GETCWD='0' +REPLACE_GETDELIM='0' +REPLACE_GETDOMAINNAME='0' +REPLACE_GETDTABLESIZE='0' +REPLACE_GETGROUPS='0' +REPLACE_GETLINE='0' +REPLACE_GETLOGIN_R='0' +REPLACE_GETPAGESIZE='0' +REPLACE_GETPASS='0' +REPLACE_GETTIMEOFDAY='0' +REPLACE_GMTIME='0' +REPLACE_HUGE_VAL='0' +REPLACE_HYPOT='0' +REPLACE_HYPOTF='0' +REPLACE_HYPOTL='0' +REPLACE_ILOGB='0' +REPLACE_ILOGBF='0' +REPLACE_ILOGBL='0' +REPLACE_ISATTY='0' +REPLACE_ISFINITE='0' +REPLACE_ISINF='0' +REPLACE_ISNAN='0' +REPLACE_ISWBLANK='0' +REPLACE_ISWCNTRL='0' +REPLACE_ITOLD='0' +REPLACE_LCHOWN='0' +REPLACE_LDEXPL='0' +REPLACE_LINK='0' +REPLACE_LINKAT='0' +REPLACE_LOCALECONV='0' +REPLACE_LOCALTIME='0' +REPLACE_LOCALTIME_R='0' +REPLACE_LOG10='0' +REPLACE_LOG10F='0' +REPLACE_LOG10L='0' +REPLACE_LOG1P='0' +REPLACE_LOG1PF='0' +REPLACE_LOG1PL='0' +REPLACE_LOG2='0' +REPLACE_LOG2F='0' +REPLACE_LOG2L='0' +REPLACE_LOG='0' +REPLACE_LOGB='0' +REPLACE_LOGBF='0' +REPLACE_LOGBL='0' +REPLACE_LOGF='0' +REPLACE_LOGL='0' +REPLACE_LSEEK='0' +REPLACE_LSTAT='0' +REPLACE_MALLOC='0' +REPLACE_MBRLEN='1' +REPLACE_MBRTOWC='1' +REPLACE_MBSINIT='0' +REPLACE_MBSNRTOWCS='0' +REPLACE_MBSRTOWCS='0' +REPLACE_MBSTATE_T='0' +REPLACE_MBTOWC='0' +REPLACE_MEMCHR='0' +REPLACE_MEMMEM='0' +REPLACE_MKDIR='0' +REPLACE_MKFIFO='0' +REPLACE_MKNOD='0' +REPLACE_MKSTEMP='0' +REPLACE_MKTIME='0' +REPLACE_MODF='0' +REPLACE_MODFF='0' +REPLACE_MODFL='0' +REPLACE_NAN='0' +REPLACE_NANOSLEEP='GNULIB_PORTCHECK' +REPLACE_NEWLOCALE='0' +REPLACE_NL_LANGINFO='1' +REPLACE_NULL='0' +REPLACE_OBSTACK_PRINTF='0' +REPLACE_OPEN='0' +REPLACE_OPENAT='0' +REPLACE_PERROR='0' +REPLACE_POPEN='0' +REPLACE_POSIX_SPAWN='0' +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR='0' +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE='0' +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2='0' +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN='0' +REPLACE_PREAD='0' +REPLACE_PRINTF='1' +REPLACE_PTHREAD_SIGMASK='0' +REPLACE_PTSNAME='0' +REPLACE_PTSNAME_R='0' +REPLACE_PUTENV='0' +REPLACE_PWRITE='0' +REPLACE_QSORT_R='0' +REPLACE_RAISE='0' +REPLACE_RANDOM_R='0' +REPLACE_READ='0' +REPLACE_READLINK='0' +REPLACE_READLINKAT='0' +REPLACE_REALLOC='0' +REPLACE_REALPATH='0' +REPLACE_REMAINDER='0' +REPLACE_REMAINDERF='0' +REPLACE_REMAINDERL='0' +REPLACE_REMOVE='0' +REPLACE_RENAME='0' +REPLACE_RENAMEAT='0' +REPLACE_RMDIR='0' +REPLACE_ROUND='0' +REPLACE_ROUNDF='0' +REPLACE_ROUNDL='0' +REPLACE_SETENV='0' +REPLACE_SETLOCALE='0' +REPLACE_SIGNBIT='0' +REPLACE_SIGNBIT_USING_GCC='1' +REPLACE_SINF='0' +REPLACE_SINHF='0' +REPLACE_SLEEP='0' +REPLACE_SNPRINTF='0' +REPLACE_SPRINTF='0' +REPLACE_SQRTF='0' +REPLACE_SQRTL='0' +REPLACE_STAT='0' +REPLACE_STDIO_READ_FUNCS='0' +REPLACE_STDIO_WRITE_FUNCS='0' +REPLACE_STPNCPY='0' +REPLACE_STRCASESTR='0' +REPLACE_STRCHRNUL='0' +REPLACE_STRDUP='0' +REPLACE_STRERROR='0' +REPLACE_STRERROR_R='0' +REPLACE_STRFTIME='GNULIB_PORTCHECK' +REPLACE_STRNCAT='0' +REPLACE_STRNDUP='0' +REPLACE_STRNLEN='0' +REPLACE_STRSIGNAL='0' +REPLACE_STRSTR='0' +REPLACE_STRTOD='0' +REPLACE_STRTOIMAX='0' +REPLACE_STRTOK_R='0' +REPLACE_STRTOUMAX='0' +REPLACE_STRUCT_LCONV='0' +REPLACE_STRUCT_TIMEVAL='0' +REPLACE_SYMLINK='0' +REPLACE_SYMLINKAT='0' +REPLACE_TANF='0' +REPLACE_TANHF='0' +REPLACE_TIMEGM='0' +REPLACE_TMPFILE='0' +REPLACE_TOWLOWER='0' +REPLACE_TRUNC='0' +REPLACE_TRUNCATE='0' +REPLACE_TRUNCF='0' +REPLACE_TRUNCL='0' +REPLACE_TTYNAME_R='0' +REPLACE_TZSET='0' +REPLACE_UNLINK='0' +REPLACE_UNLINKAT='0' +REPLACE_UNSETENV='0' +REPLACE_USLEEP='0' +REPLACE_UTIMENSAT='0' +REPLACE_VASPRINTF='1' +REPLACE_VDPRINTF='0' +REPLACE_VFPRINTF='1' +REPLACE_VPRINTF='0' +REPLACE_VSNPRINTF='0' +REPLACE_VSPRINTF='0' +REPLACE_WCRTOMB='0' +REPLACE_WCSFTIME='0' +REPLACE_WCSNRTOMBS='0' +REPLACE_WCSRTOMBS='0' +REPLACE_WCSWIDTH='0' +REPLACE_WCTOB='0' +REPLACE_WCTOMB='0' +REPLACE_WCWIDTH='0' +REPLACE_WRITE='0' +SCHED_H='' +SED='/bin/sed' +SELINUX_CONTEXT_H='selinux/context.h' +SET_MAKE='' +SHELL='/bin/sh' +SIG_ATOMIC_T_SUFFIX='' +SIZE_T_SUFFIX='' +STDARG_H='' +STDBOOL_H='' +STDDEF_H='' +STDINT_H='stdint.h' +STRIP='strip' +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC='0' +TIME_H_DEFINES_STRUCT_TIMESPEC='1' +UINT32_MAX_LT_UINTMAX_MAX='1' +UINT64_MAX_EQ_ULONG_MAX='0' +UNDEFINE_STRTOK_R='0' +UNISTD_H_DEFINES_STRUCT_TIMESPEC='0' +UNISTD_H_HAVE_WINSOCK2_H='0' +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS='0' +USE_ACL='0' +USE_COVERAGE_FALSE='' +USE_COVERAGE_TRUE='#' +USE_NLS='yes' +UUIDLIBS='' +UUID_TYPE_FALSE='' +UUID_TYPE_TRUE='#' +VERSION='1.8' +WCHAR_T_SUFFIX='' +WINDOWS_64_BIT_OFF_T='0' +WINDOWS_64_BIT_ST_SIZE='0' +WINDOWS_STAT_INODES='0' +WINDOWS_STAT_TIMESPEC='0' +WINT_T_SUFFIX='' +XGETTEXT='/usr/bin/xgettext' +XGETTEXT_015='/usr/bin/xgettext' +XGETTEXT_EXTRA_OPTIONS=' --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format' +YACC='bison -o y.tab.c' +YFLAGS='' +ac_ct_AR='ar' +ac_ct_CC='gcc' +ac_ct_DUMPBIN='' +am__EXEEXT_FALSE='' +am__EXEEXT_TRUE='#' +am__fastdepCC_FALSE='#' +am__fastdepCC_TRUE='' +am__include='include' +am__isrc='' +am__leading_dot='.' +am__nodep='_no' +am__quote='' +am__tar='$${TAR-tar} chof - "$$tardir"' +am__untar='$${TAR-tar} xf -' +bindir='${exec_prefix}/bin' +build='i686-pc-linux-gnu' +build_alias='' +build_cpu='i686' +build_os='linux-gnu' +build_vendor='pc' +crypt_support='no' +datadir='${datarootdir}' +datarootdir='${prefix}/share' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +dvidir='${docdir}' +exec_prefix='${prefix}' +gl_LIBOBJS=' asnprintf.o asprintf.o fcntl.o fprintf.o fseterr.o localtime-buffer.o mbrlen.o mbrtowc.o mktime.o nl_langinfo.o obstack.o printf.o printf-args.o printf-parse.o readline.o regex.o time_rz.o vasnprintf.o vasprintf.o vfprintf.o' +gl_LTLIBOBJS=' asnprintf.lo asprintf.lo fcntl.lo fprintf.lo fseterr.lo localtime-buffer.lo mbrlen.lo mbrtowc.lo mktime.lo nl_langinfo.lo obstack.lo printf.lo printf-args.lo printf-parse.lo readline.lo regex.lo time_rz.lo vasnprintf.lo vasprintf.lo vfprintf.lo' +gltests_LIBOBJS='' +gltests_LTLIBOBJS='' +gltests_WITNESS='IN_RECUTILS_GNULIB_TESTS' +have_uuid='no' +host='i686-pc-linux-gnu' +host_alias='' +host_cpu='i686' +host_os='linux-gnu' +host_vendor='pc' +htmldir='${docdir}' +includedir='${prefix}/include' +infodir='${datarootdir}/info' +install_sh='${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh' +libdir='${exec_prefix}/lib' +libexecdir='${exec_prefix}/libexec' +localedir='${datarootdir}/locale' +localstatedir='${prefix}/var' +mandir='${datarootdir}/man' +mkdir_p='$(MKDIR_P)' +oldincludedir='/usr/include' +pdfdir='${docdir}' +prefix='/usr/local' +program_transform_name='s,x,x,' +psdir='${docdir}' +runstatedir='${localstatedir}/run' +sbindir='${exec_prefix}/sbin' +sharedstatedir='${prefix}/com' +sysconfdir='${prefix}/etc' +target_alias='' + +## ----------- ## +## confdefs.h. ## +## ----------- ## + +/* confdefs.h */ +#define PACKAGE_NAME "GNU recutils" +#define PACKAGE_TARNAME "recutils" +#define PACKAGE_VERSION "1.8" +#define PACKAGE_STRING "GNU recutils 1.8" +#define PACKAGE_BUGREPORT "bug-recutils@gnu.org" +#define PACKAGE_URL "http://www.gnu.org/software/recutils/" +#define PACKAGE "recutils" +#define VERSION "1.8" +#define STDC_HEADERS 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +#define HAVE_MEMORY_H 1 +#define HAVE_STRINGS_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_UNISTD_H 1 +#define __EXTENSIONS__ 1 +#define _ALL_SOURCE 1 +#define _DARWIN_C_SOURCE 1 +#define _GNU_SOURCE 1 +#define _NETBSD_SOURCE 1 +#define _OPENBSD_SOURCE 1 +#define _POSIX_PTHREAD_SEMANTICS 1 +#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +#define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +#define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +#define __STDC_WANT_LIB_EXT2__ 1 +#define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +#define _TANDEM_SOURCE 1 +#define _HPUX_ALT_XOPEN_SOCKET_API 1 +#define HAVE_FSEEKO 1 +#define _FILE_OFFSET_BITS 64 +#define _DARWIN_USE_64_BIT_INODE 1 +#define HAVE_DLFCN_H 1 +#define LT_OBJDIR ".libs/" +#define HAVE_FCHMOD 1 +#define HAVE_BTOWC 1 +#define HAVE_CANONICALIZE_FILE_NAME 1 +#define HAVE_GETCWD 1 +#define HAVE_READLINK 1 +#define HAVE_REALPATH 1 +#define HAVE_FACCESSAT 1 +#define HAVE_FCNTL 1 +#define HAVE_SYMLINK 1 +#define HAVE_FLOCK 1 +#define HAVE_SNPRINTF 1 +#define HAVE___FWRITING 1 +#define HAVE_GETDELIM 1 +#define HAVE_GETDTABLESIZE 1 +#define HAVE_GETPASS 1 +#define HAVE___FSETLOCKING 1 +#define HAVE_GETTIMEOFDAY 1 +#define HAVE_LSTAT 1 +#define HAVE_MBSINIT 1 +#define HAVE_MBRTOWC 1 +#define HAVE_MBRLEN 1 +#define HAVE_MPROTECT 1 +#define HAVE_MKOSTEMP 1 +#define HAVE_MKSTEMP 1 +#define HAVE_TZSET 1 +#define HAVE_NL_LANGINFO 1 +#define HAVE_ISBLANK 1 +#define HAVE_ISWCTYPE 1 +#define HAVE_LINK 1 +#define HAVE_SECURE_GETENV 1 +#define HAVE_GETUID 1 +#define HAVE_GETEUID 1 +#define HAVE_GETGID 1 +#define HAVE_GETEGID 1 +#define HAVE_SETENV 1 +#define HAVE_SIGACTION 1 +#define HAVE_SIGALTSTACK 1 +#define HAVE_SIGINTERRUPT 1 +#define HAVE_STRDUP 1 +#define HAVE_LOCALTIME_R 1 +#define HAVE_TIMEGM 1 +#define HAVE_WCRTOMB 1 +#define HAVE_WCTOB 1 +#define HAVE_ISWCNTRL 1 +#define HAVE_ALLOCA_H 1 +#define HAVE_ALLOCA 1 +#define restrict __restrict +#define HAVE_LANGINFO_CODESET 1 +#define FUNC_REALPATH_WORKS 1 +#define HAVE_SYS_PARAM_H 1 +#define HAVE_SYS_SOCKET_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_STDIO_EXT_H 1 +#define HAVE_FEATURES_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_GETOPT_H 1 +#define HAVE_SYS_CDEFS_H 1 +#define HAVE_TERMIOS_H 1 +#define HAVE_SYS_TIME_H 1 +#define HAVE_LIMITS_H 1 +#define HAVE_WCHAR_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_LANGINFO_H 1 +#define HAVE_XLOCALE_H 1 +#define HAVE_MATH_H 1 +#define HAVE_SYS_MMAN_H 1 +#define HAVE_MALLOC_H 1 +#define HAVE_SPAWN_H 1 +#define HAVE_STRINGS_H 1 +#define HAVE_SYS_FILE_H 1 +#define HAVE_SYS_WAIT_H 1 +#define HAVE_WCTYPE_H 1 +#define HAVE_ENVIRON_DECL 1 +#define HAVE_DECL_STRERROR_R 1 +#define HAVE_STRERROR_R 1 +#define STRERROR_R_CHAR_P 1 +#define GETGROUPS_T gid_t +#define HAVE_SIG_ATOMIC_T 1 +#define HAVE_WORKING_O_NOATIME 1 +#define HAVE_WORKING_O_NOFOLLOW 1 +#define HAVE_STDINT_H_WITH_UINTMAX 1 +#define HAVE_INTTYPES_H_WITH_UINTMAX 1 +#define CHECK_PRINTF_SAFE 1 +#define HAVE_UNSIGNED_LONG_LONG_INT 1 +#define HAVE_LONG_LONG_INT 1 +#define HAVE_WCHAR_T 1 +#define HAVE_WINT_T 1 +#define HAVE_INTMAX_T 1 +#define DBL_EXPBIT0_WORD 1 +#define DBL_EXPBIT0_BIT 20 +#define HAVE_SNPRINTF 1 +#define HAVE_STRNLEN 1 +#define HAVE_WCSLEN 1 +#define HAVE_WCSNLEN 1 +#define HAVE_MBRTOWC 1 +#define HAVE_WCRTOMB 1 +#define HAVE_DECL__SNPRINTF 0 +#define HAVE_SNPRINTF_RETVAL_C99 1 +#define HAVE_DECL_ALARM 1 +#define _USE_STD_STAT 1 +#define HAVE_DECL_FSEEKO 1 +#define HAVE_DECL_FTELLO 1 +#define HAVE_DECL_GETDELIM 1 +#define HAVE_DECL_GETDTABLESIZE 1 +#define HAVE_DECL_GETLINE 1 +#define HAVE_GETOPT_H 1 +#define HAVE_GETOPT_LONG_ONLY 1 +#define HAVE_DECL_FFLUSH_UNLOCKED 1 +#define HAVE_DECL_FLOCKFILE 1 +#define HAVE_DECL_FPUTS_UNLOCKED 1 +#define HAVE_DECL_FUNLOCKFILE 1 +#define HAVE_DECL_PUTC_UNLOCKED 1 +#define HAVE_INTTYPES_H 1 +#define FLT_EXPBIT0_WORD 0 +#define FLT_EXPBIT0_BIT 23 +#define USE_POSIX_THREADS 1 +#define USE_POSIX_THREADS_WEAK 1 +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +#define HAVE_STDLIB_H 1 +#define MALLOC_0_IS_NONNULL 1 +#define HAVE_MBSTATE_T 1 +#define C_LOCALE_MAYBE_EILSEQ 1 +#define HAVE_MAP_ANONYMOUS 1 +#define HAVE_MINMAX_IN_SYS_PARAM_H 1 +#define TIME_T_IS_SIGNED 1 +#define HAVE_STRUCT_TM_TM_ZONE 1 +#define HAVE_TM_ZONE 1 +#define HAVE_TM_GMTOFF 1 +#define PROMOTED_MODE_T mode_t +#define HAVE__BOOL 1 +#define HAVE_COMPOUND_LITERALS 1 +#define HAVE_POSIX_SPAWN 1 +#define REPLACE_VFPRINTF_POSIX 1 +#define USER_LABEL_PREFIX +#define HAVE_SIGSET_T 1 +#define HAVE_DECL_SETENV 1 +#define HAVE_SEARCH_H 1 +#define HAVE_TSEARCH 1 +#define HAVE_STRCASESTR 1 +#define HAVE_DECL_STRDUP 1 +#define HAVE_DECL_CLEARERR_UNLOCKED 1 +#define HAVE_DECL_FEOF_UNLOCKED 1 +#define HAVE_DECL_FERROR_UNLOCKED 1 +#define HAVE_DECL_FGETS_UNLOCKED 1 +#define HAVE_DECL_FPUTC_UNLOCKED 1 +#define HAVE_DECL_FREAD_UNLOCKED 1 +#define HAVE_DECL_FWRITE_UNLOCKED 1 +#define HAVE_DECL_GETC_UNLOCKED 1 +#define HAVE_DECL_GETCHAR_UNLOCKED 1 +#define HAVE_DECL_PUTCHAR_UNLOCKED 1 +#define HAVE_DECL_UNSETENV 1 +#define USE_ACL 0 +#define HAVE_ALLOCA 1 +#define GNULIB_TEST_BTOWC 1 +#define HAVE___BUILTIN_EXPECT 1 +#define GNULIB_CANONICALIZE_LGPL 1 +#define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 +#define GNULIB_TEST_REALPATH 1 +#define GNULIB_TEST_CHDIR 1 +#define HAVE_CLOCK_GETTIME 1 +#define HAVE_CLOCK_SETTIME 1 +#define GNULIB_TEST_CLOEXEC 1 +#define GNULIB_TEST_CLOSE 1 +#define GNULIB_CLOSE_STREAM 1 +#define HAVE_DUP2 1 +#define GNULIB_TEST_DUP2 1 +#define GNULIB_TEST_ENVIRON 1 +#define HAVE_EUIDACCESS 1 +#define GNULIB_TEST_EUIDACCESS 1 +#define GNULIB_TEST_FCNTL 1 +#define FLEXIBLE_ARRAY_MEMBER /**/ +#define GNULIB_TEST_FLOOR 1 +#define HAVE_DECL___FPENDING 1 +#define REPLACE_FPRINTF_POSIX 1 +#define GNULIB_TEST_FPRINTF_POSIX 1 +#define HAVE_FREXP_IN_LIBC 1 +#define GNULIB_TEST_FREXP 1 +#define HAVE_FREXPL_IN_LIBC 1 +#define GNULIB_TEST_FREXPL 1 +#define GNULIB_TEST_FSEEK 1 +#define GNULIB_TEST_FSEEKO 1 +#define GNULIB_TEST_FSTAT 1 +#define GNULIB_TEST_FTELL 1 +#define GNULIB_TEST_FTELLO 1 +#define GNULIB_TEST_GETDELIM 1 +#define GNULIB_TEST_GETDTABLESIZE 1 +#define HAVE_GETGROUPS 1 +#define GNULIB_TEST_GETGROUPS 1 +#define GNULIB_TEST_GETLINE 1 +#define GNULIB_TEST_GETPASS 1 +#define GNULIB_TEST_GETPASS 1 +#define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +#define HAVE_DECL___ARGV 0 +#define GETTIMEOFDAY_TIMEZONE struct timezone +#define GNULIB_TEST_GETTIMEOFDAY 1 +#define GNULIB_TEST_GROUP_MEMBER 1 +#define HAVE_ISNAND_IN_LIBC 1 +#define HAVE_ISNANF_IN_LIBC 1 +#define HAVE_ISNANL_IN_LIBC 1 +#define HAVE___INLINE 1 +#define GNULIB_TEST_LOCALECONV 1 +#define HAVE_PTHREAD_RWLOCK 1 +#define HAVE_PTHREAD_MUTEX_RECURSIVE 1 +#define GNULIB_LOCK 1 +#define GNULIB_TEST_LSEEK 1 +#define GNULIB_TEST_LSTAT 1 +#define HAVE_MALLOC_POSIX 1 +#define GNULIB_TEST_MALLOC_POSIX 1 +#define GNULIB_TEST_MBRLEN 1 +#define C_LOCALE_MAYBE_EILSEQ 1 +#define GNULIB_TEST_MBRTOWC 1 +#define GNULIB_TEST_MBSINIT 1 +#define GNULIB_TEST_MBTOWC 1 +#define GNULIB_TEST_MEMCHR 1 +#define GNULIB_MKOSTEMP 1 +#define GNULIB_TEST_MKOSTEMP 1 +#define GNULIB_TEST_MKSTEMP 1 +#define GNULIB_TEST_MKTIME 1 +#define NEED_MKTIME_INTERNAL 1 +#define GNULIB_MSVC_NOTHROW 1 +#define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 +#define REPLACE_NL_LANGINFO 1 +#define GNULIB_TEST_NL_LANGINFO 1 +#define my_strftime nstrftime +#define GNULIB_TEST_OPEN 1 +#define HAVE_STRUCT_TM_TM_ZONE 1 +#define HAVE_TM_ZONE 1 +#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 +#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 +#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 +#define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 +#define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 +#define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 +#define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 +#define GNULIB_TEST_POSIX_SPAWNP 1 +#define HAVE_FREXP_IN_LIBC 1 +#define HAVE_LDEXP_IN_LIBC 1 +#define HAVE_FREXPL_IN_LIBC 1 +#define HAVE_LDEXPL_IN_LIBC 1 +#define REPLACE_PRINTF_POSIX 1 +#define GNULIB_TEST_PRINTF_POSIX 1 +#define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 +#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 +#define HAVE_RAISE 1 +#define GNULIB_TEST_RAISE 1 +#define HAVE_STRUCT_RANDOM_DATA 1 +#define HAVE_RANDOM_R 1 +#define GNULIB_TEST_RANDOM_R 1 +#define HAVE_RAWMEMCHR 1 +#define GNULIB_TEST_RAWMEMCHR 1 +#define GNULIB_TEST_READLINK 1 +#define HAVE_REALLOC_POSIX 1 +#define GNULIB_TEST_REALLOC_POSIX 1 +#define _REGEX_INCLUDE_LIMITS_H 1 +#define _REGEX_LARGE_OFFSETS 1 +#define re_syntax_options rpl_re_syntax_options +#define re_set_syntax rpl_re_set_syntax +#define re_compile_pattern rpl_re_compile_pattern +#define re_compile_fastmap rpl_re_compile_fastmap +#define re_search rpl_re_search +#define re_search_2 rpl_re_search_2 +#define re_match rpl_re_match +#define re_match_2 rpl_re_match_2 +#define re_set_registers rpl_re_set_registers +#define re_comp rpl_re_comp +#define re_exec rpl_re_exec +#define regcomp rpl_regcomp +#define regexec rpl_regexec +#define regerror rpl_regerror +#define regfree rpl_regfree +#define HAVE_LIBINTL_H 1 +#define HAVE_DECL_ISBLANK 1 +#define GNULIB_TEST_RENAME 1 +#define GNULIB_TEST_RMDIR 1 +#define GNULIB_TEST_SECURE_GETENV 1 +#define HAVE_SELINUX_SELINUX_H 0 +#define GNULIB_TEST_SETENV 1 +#define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +#define GNULIB_TEST_SIGACTION 1 +#define GNULIB_TEST_SIGNBIT 1 +#define GNULIB_TEST_SIGPROCMASK 1 +#define HAVE_STDINT_H 1 +#define HAVE_POSIX_SPAWNATTR_T 1 +#define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1 +#define GNULIB_TEST_STAT 1 +#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 +#define __USE_MINGW_ANSI_STDIO 1 +#define GNULIB_FSCANF 1 +#define GNULIB_SCANF 1 +#define HAVE_STRCASECMP 1 +#define HAVE_STRNCASECMP 1 +#define HAVE_DECL_STRNCASECMP 1 +#define HAVE_STRCASESTR 1 +#define GNULIB_TEST_STRCASESTR 1 +#define HAVE_STRCHRNUL 1 +#define GNULIB_TEST_STRCHRNUL 1 +#define GNULIB_TEST_STRDUP 1 +#define GNULIB_STRERROR 1 +#define GNULIB_TEST_STRERROR 1 +#define HAVE_STRSEP 1 +#define GNULIB_TEST_STRSEP 1 +#define HAVE_STRVERSCMP 1 +#define GNULIB_TEST_STRVERSCMP 1 +#define HAVE_DECL_LOCALTIME_R 1 +#define GNULIB_TEST_TIME_R 1 +#define GNULIB_TEST_TIME_RZ 1 +#define GNULIB_TEST_TIMEGM 1 +#define HAVE_RUN_TZSET_TEST 1 +#define GNULIB_TEST_TZSET 1 +#define USE_UNLOCKED_IO 1 +#define HAVE_UNSETENV 1 +#define GNULIB_TEST_UNSETENV 1 +#define HAVE_VASPRINTF 1 +#define GNULIB_TEST_VASPRINTF 1 +#define HAVE_VASPRINTF 1 +#define REPLACE_VFPRINTF_POSIX 1 +#define GNULIB_TEST_VFPRINTF_POSIX 1 +#define HAVE_WAITID 1 +#define GNULIB_TEST_WAITPID 1 +#define GNULIB_TEST_WCRTOMB 1 +#define HAVE_DECL_WCTOB 1 +#define GNULIB_TEST_WCTOB 1 +#define GNULIB_TEST_WCTOMB 1 +#define HAVE_TOWLOWER 1 +#define HAVE_STDINT_H 1 +#define HAVE_MALLOC_H 1 +#define HAVE_STRING_H 1 +#define HAVE_FSEEKO 1 +#define ENABLE_NLS 1 +#define HAVE_GETTEXT 1 +#define HAVE_DCGETTEXT 1 + +configure: exit 0 diff --git a/devspec.en_US/project/recutils/config.status b/devspec.en_US/project/recutils/config.status new file mode 100755 index 0000000..77fd038 --- /dev/null +++ b/devspec.en_US/project/recutils/config.status @@ -0,0 +1,3666 @@ +#! /bin/sh +# Generated by configure. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by GNU recutils $as_me 1.8, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +# Files that config.status was made for. +config_files=" Makefile lib/Makefile libcsv/Makefile src/Makefile utils/Makefile bash/Makefile doc/Makefile po/Makefile.in torture/Makefile torture/utils/Makefile torture/utils/config.sh man/Makefile etc/Makefile algol68/Makefile" +config_headers=" src/config.h" +config_links=" GNUmakefile:GNUmakefile" +config_commands=" depfiles libtool po-directories" + +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration links: +$config_links + +Configuration commands: +$config_commands + +Report bugs to <bug-recutils@gnu.org>. +GNU recutils home page: <http://www.gnu.org/software/recutils/>. +General help using GNU software: <http://www.gnu.org/gethelp/>." + +ac_cs_config="" +ac_cs_version="\ +GNU recutils config.status 1.8 +configured by ./configure, generated by GNU Autoconf 2.69, + with options \"$ac_cs_config\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='/mnt/lfs/build/recutils/recutils-1.8' +srcdir='.' +INSTALL='/usr/bin/install -c' +MKDIR_P='/bin/mkdir -p' +AWK='gawk' +test -n "$AWK" || AWK=awk +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +if $ac_cs_recheck; then + set X /bin/sh './configure' $ac_configure_extra_args --no-create --no-recursion + shift + $as_echo "running CONFIG_SHELL=/bin/sh $*" >&6 + CONFIG_SHELL='/bin/sh' + export CONFIG_SHELL + exec "$@" +fi + +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +# +# INIT-COMMANDS +# +AMDEP_TRUE="" ac_aux_dir="build-aux" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +double_quote_subst='s/\(["`\\]\)/\\\1/g' +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' +macro_version='2.4.6' +macro_revision='2.4.6' +enable_shared='yes' +enable_static='yes' +pic_mode='default' +enable_fast_install='yes' +shared_archive_member_spec='' +SHELL='/bin/sh' +ECHO='printf %s\n' +PATH_SEPARATOR=':' +host_alias='' +host='i686-pc-linux-gnu' +host_os='linux-gnu' +build_alias='' +build='i686-pc-linux-gnu' +build_os='linux-gnu' +SED='/bin/sed' +Xsed='/bin/sed -e 1s/^X//' +GREP='/bin/grep' +EGREP='/bin/grep -E' +FGREP='/bin/grep -F' +LD='/usr/bin/ld' +NM='/usr/bin/nm -B' +LN_S='ln -s' +max_cmd_len='1572864' +ac_objext='o' +exeext='' +lt_unset='unset' +lt_SP2NL='tr \040 \012' +lt_NL2SP='tr \015\012 \040\040' +lt_cv_to_host_file_cmd='func_convert_file_noop' +lt_cv_to_tool_file_cmd='func_convert_file_noop' +reload_flag=' -r' +reload_cmds='$LD$reload_flag -o $output$reload_objs' +OBJDUMP='objdump' +deplibs_check_method='pass_all' +file_magic_cmd='$MAGIC_CMD' +file_magic_glob='' +want_nocaseglob='no' +DLLTOOL='false' +sharedlib_from_linklib_cmd='printf %s\n' +AR='ar' +AR_FLAGS='cru' +archiver_list_spec='@' +STRIP='strip' +RANLIB='ranlib' +old_postinstall_cmds='chmod 644 $oldlib~$RANLIB $tool_oldlib' +old_postuninstall_cmds='' +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $tool_oldlib' +lock_old_archive_extraction='no' +CC='gcc' +CFLAGS='-g -O2' +compiler='gcc' +GCC='yes' +lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'' | sed '\''/ __gnu_lto/d'\''' +lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' +lt_cv_sys_global_symbol_to_import='' +lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \(.*\) .*$/ {"\1", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/ {"\1", (void *) \&\1},/p'\''' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \(.*\) .*$/ {"\1", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(lib.*\)$/ {"\1", (void *) \&\1},/p'\'' -e '\''s/^[ABCDGIRSTW][ABCDGIRSTW]* .* \(.*\)$/ {"lib\1", (void *) \&\1},/p'\''' +lt_cv_nm_interface='BSD nm' +nm_file_list_spec='@' +lt_sysroot='' +lt_cv_truncate_bin='/bin/dd bs=4096 count=1' +objdir='.libs' +MAGIC_CMD='file' +lt_prog_compiler_no_builtin_flag=' -fno-builtin' +lt_prog_compiler_pic=' -fPIC -DPIC' +lt_prog_compiler_wl='-Wl,' +lt_prog_compiler_static='-static' +lt_cv_prog_compiler_c_o='yes' +need_locks='no' +MANIFEST_TOOL=':' +DSYMUTIL='' +NMEDIT='' +LIPO='' +OTOOL='' +OTOOL64='' +libext='a' +shrext_cmds='.so' +extract_expsyms_cmds='' +archive_cmds_need_lc='no' +enable_shared_with_static_runtimes='no' +export_dynamic_flag_spec='$wl--export-dynamic' +whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' +compiler_needs_object='no' +old_archive_from_new_cmds='' +old_archive_from_expsyms_cmds='' +archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' +archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' +module_cmds='' +module_expsym_cmds='' +with_gnu_ld='yes' +allow_undefined_flag='' +no_undefined_flag='' +hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' +hardcode_libdir_separator='' +hardcode_direct='no' +hardcode_direct_absolute='no' +hardcode_minus_L='no' +hardcode_shlibpath_var='unsupported' +hardcode_automatic='no' +inherit_rpath='no' +link_all_deplibs='no' +always_export_symbols='no' +export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' +exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' +include_expsyms='' +prelink_cmds='' +postlink_cmds='' +file_list_spec='' +variables_saved_for_relink='PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH' +need_lib_prefix='no' +need_version='no' +version_type='linux' +runpath_var='LD_RUN_PATH' +shlibpath_var='LD_LIBRARY_PATH' +shlibpath_overrides_runpath='no' +libname_spec='lib$name' +library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' +soname_spec='$libname$release$shared_ext$major' +install_override_mode='' +postinstall_cmds='' +postuninstall_cmds='' +finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' +finish_eval='' +hardcode_into_libs='yes' +sys_lib_search_path_spec='/usr/lib/gcc/i686-linux-gnu/5 /usr/lib/i386-linux-gnu /usr/lib /lib/i386-linux-gnu /lib ' +configure_time_dlsearch_path='/lib /usr/lib /usr/lib/i386-linux-gnu/libfakeroot /lib/i386-linux-gnu /usr/lib/i386-linux-gnu /lib/i686-linux-gnu /usr/lib/i686-linux-gnu /usr/lib/i386-linux-gnu/mesa-egl /usr/lib/i386-linux-gnu/mesa /usr/local/lib /usr/lib/vmware-tools/lib32/libvmGuestLib.so /usr/lib/vmware-tools/lib64/libvmGuestLib.so /usr/lib/vmware-tools/lib32/libvmGuestLibJava.so /usr/lib/vmware-tools/lib64/libvmGuestLibJava.so /usr/lib/vmware-tools/lib32/libDeployPkg.so /usr/lib/vmware-tools/lib64/libDeployPkg.so ' +configure_time_lt_sys_library_path='' +hardcode_action='immediate' +enable_dlopen='unknown' +enable_dlopen_self='unknown' +enable_dlopen_self_static='unknown' +old_striplib='strip --strip-debug' +striplib='strip --strip-unneeded' + +LTCC='gcc' +LTCFLAGS='-g -O2' +compiler='gcc' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL ECHO PATH_SEPARATOR SED GREP EGREP FGREP LD NM LN_S lt_SP2NL lt_NL2SP reload_flag OBJDUMP deplibs_check_method file_magic_cmd file_magic_glob want_nocaseglob DLLTOOL sharedlib_from_linklib_cmd AR AR_FLAGS archiver_list_spec STRIP RANLIB CC CFLAGS compiler lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl lt_cv_sys_global_symbol_to_import lt_cv_sys_global_symbol_to_c_name_address lt_cv_sys_global_symbol_to_c_name_address_lib_prefix lt_cv_nm_interface nm_file_list_spec lt_cv_truncate_bin lt_prog_compiler_no_builtin_flag lt_prog_compiler_pic lt_prog_compiler_wl lt_prog_compiler_static lt_cv_prog_compiler_c_o need_locks MANIFEST_TOOL DSYMUTIL NMEDIT LIPO OTOOL OTOOL64 shrext_cmds export_dynamic_flag_spec whole_archive_flag_spec compiler_needs_object with_gnu_ld allow_undefined_flag no_undefined_flag hardcode_libdir_flag_spec hardcode_libdir_separator exclude_expsyms include_expsyms file_list_spec variables_saved_for_relink libname_spec library_names_spec soname_spec install_override_mode finish_eval old_striplib striplib; do + case `eval \\$ECHO \\""\\$$var"\\"` in + *[\\\`\"\$]*) + eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED \"\$sed_quote_subst\"\`\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_$var=\\\"\$$var\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds old_postinstall_cmds old_postuninstall_cmds old_archive_cmds extract_expsyms_cmds old_archive_from_new_cmds old_archive_from_expsyms_cmds archive_cmds archive_expsym_cmds module_cmds module_expsym_cmds export_symbols_cmds prelink_cmds postlink_cmds postinstall_cmds postuninstall_cmds finish_cmds sys_lib_search_path_spec configure_time_dlsearch_path configure_time_lt_sys_library_path; do + case `eval \\$ECHO \\""\\$$var"\\"` in + *[\\\`\"\$]*) + eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_$var=\\\"\$$var\\\"" + ;; + esac +done + +ac_aux_dir='build-aux' + +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='recutils' + VERSION='1.8' + RM='rm -f' + ofile='libtool' + + + +GNUmakefile=GNUmakefile +# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''=""' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="%UNSET%" + + + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "$GNUmakefile") CONFIG_LINKS="$CONFIG_LINKS $GNUmakefile:$GNUmakefile" ;; + "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; + "libcsv/Makefile") CONFIG_FILES="$CONFIG_FILES libcsv/Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; + "bash/Makefile") CONFIG_FILES="$CONFIG_FILES bash/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; + "torture/Makefile") CONFIG_FILES="$CONFIG_FILES torture/Makefile" ;; + "torture/utils/Makefile") CONFIG_FILES="$CONFIG_FILES torture/utils/Makefile" ;; + "torture/utils/config.sh") CONFIG_FILES="$CONFIG_FILES torture/utils/config.sh" ;; + "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; + "etc/Makefile") CONFIG_FILES="$CONFIG_FILES etc/Makefile" ;; + "algol68/Makefile") CONFIG_FILES="$CONFIG_FILES algol68/Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +cat >>"$ac_tmp/subs1.awk" <<\_ACAWK && +S["gltests_LTLIBOBJS"]="" +S["gltests_LIBOBJS"]="" +S["gl_LTLIBOBJS"]=" asnprintf.lo asprintf.lo fcntl.lo fprintf.lo fseterr.lo localtime-buffer.lo mbrlen.lo mbrtowc.lo mktime.lo nl_langinfo.lo obstack.lo printf.lo prin"\ +"tf-args.lo printf-parse.lo readline.lo regex.lo time_rz.lo vasnprintf.lo vasprintf.lo vfprintf.lo" +S["gl_LIBOBJS"]=" asnprintf.o asprintf.o fcntl.o fprintf.o fseterr.o localtime-buffer.o mbrlen.o mbrtowc.o mktime.o nl_langinfo.o obstack.o printf.o printf-args.o pr"\ +"intf-parse.o readline.o regex.o time_rz.o vasnprintf.o vasprintf.o vfprintf.o" +S["CONFIG_INCLUDE"]="src/config.h" +S["am__EXEEXT_FALSE"]="" +S["am__EXEEXT_TRUE"]="#" +S["LTLIBOBJS"]="" +S["LIBOBJS"]="" +S["USE_COVERAGE_FALSE"]="" +S["USE_COVERAGE_TRUE"]="#" +S["POSUB"]="po" +S["INTLLIBS"]="" +S["LTLIBICONV"]="-liconv" +S["LIBICONV"]="-liconv" +S["INTL_MACOSX_LIBS"]="" +S["XGETTEXT_EXTRA_OPTIONS"]=" --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format" +S["MSGMERGE"]="/usr/bin/msgmerge" +S["XGETTEXT_015"]="/usr/bin/xgettext" +S["XGETTEXT"]="/usr/bin/xgettext" +S["GMSGFMT_015"]="/usr/bin/msgfmt" +S["MSGFMT_015"]="/usr/bin/msgfmt" +S["GMSGFMT"]="/usr/bin/msgfmt" +S["MSGFMT"]="/usr/bin/msgfmt" +S["GETTEXT_MACRO_VERSION"]="0.19" +S["USE_NLS"]="yes" +S["BUILD_A68_FALSE"]="" +S["BUILD_A68_TRUE"]="#" +S["CA68"]="" +S["BASH_BUILTINS_FALSE"]="" +S["BASH_BUILTINS_TRUE"]="#" +S["BASH_HEADERS"]="/usr/include/bash" +S["UUID_TYPE_FALSE"]="" +S["UUID_TYPE_TRUE"]="#" +S["REMOTE_DESCRIPTORS_FALSE"]="" +S["REMOTE_DESCRIPTORS_TRUE"]="#" +S["COMPILE_MDB2REC_FALSE"]="" +S["COMPILE_MDB2REC_TRUE"]="#" +S["MDBLIBS"]="" +S["MDB_DATETIME"]="" +S["GLIB_LIBS"]="" +S["GLIB_CFLAGS"]="" +S["crypt_support"]="no" +S["CRYPT_FALSE"]="" +S["CRYPT_TRUE"]="#" +S["LIBGCRYPT_PREFIX"]="" +S["LTLIBGCRYPT"]="" +S["LIBGCRYPT"]="" +S["HAVE_LIBGCRYPT"]="no" +S["have_uuid"]="no" +S["UUIDLIBS"]="" +S["CURLLIBS"]="" +S["CHECK_FALSE"]="" +S["CHECK_TRUE"]="#" +S["CHECK_LIBS"]="" +S["CHECK_CFLAGS"]="" +S["PKG_CONFIG_LIBDIR"]="" +S["PKG_CONFIG_PATH"]="" +S["PKG_CONFIG"]="/usr/bin/pkg-config" +S["HELP2MAN"]="${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing help2man" +S["gltests_WITNESS"]="IN_RECUTILS_GNULIB_TESTS" +S["REPLACE_TOWLOWER"]="0" +S["REPLACE_ISWCNTRL"]="0" +S["HAVE_WCTYPE_H"]="1" +S["NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H"]="<wctype.h>" +S["NEXT_WCTYPE_H"]="<wctype.h>" +S["HAVE_ISWCNTRL"]="1" +S["REPLACE_ISWBLANK"]="0" +S["HAVE_WCTRANS_T"]="1" +S["HAVE_WCTYPE_T"]="1" +S["HAVE_ISWBLANK"]="1" +S["GNULIB_TOWCTRANS"]="0" +S["GNULIB_WCTRANS"]="0" +S["GNULIB_ISWCTYPE"]="0" +S["GNULIB_WCTYPE"]="0" +S["GNULIB_ISWBLANK"]="0" +S["HAVE_CRTDEFS_H"]="0" +S["HAVE_WINT_T"]="1" +S["NEXT_AS_FIRST_DIRECTIVE_WCHAR_H"]="<wchar.h>" +S["NEXT_WCHAR_H"]="<wchar.h>" +S["HAVE_UNISTD_H"]="1" +S["NEXT_AS_FIRST_DIRECTIVE_UNISTD_H"]="<unistd.h>" +S["NEXT_UNISTD_H"]="<unistd.h>" +S["UNISTD_H_DEFINES_STRUCT_TIMESPEC"]="0" +S["PTHREAD_H_DEFINES_STRUCT_TIMESPEC"]="0" +S["SYS_TIME_H_DEFINES_STRUCT_TIMESPEC"]="0" +S["TIME_H_DEFINES_STRUCT_TIMESPEC"]="1" +S["NEXT_AS_FIRST_DIRECTIVE_TIME_H"]="<time.h>" +S["NEXT_TIME_H"]="<time.h>" +S["NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H"]="<sys/wait.h>" +S["NEXT_SYS_WAIT_H"]="<sys/wait.h>" +S["GNULIB_WAITPID"]="1" +S["HAVE_SYS_FILE_H"]="1" +S["NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H"]="<sys/file.h>" +S["NEXT_SYS_FILE_H"]="<sys/file.h>" +S["HAVE_STRINGS_H"]="1" +S["NEXT_AS_FIRST_DIRECTIVE_STRINGS_H"]="<strings.h>" +S["NEXT_STRINGS_H"]="<strings.h>" +S["NEXT_AS_FIRST_DIRECTIVE_STRING_H"]="<string.h>" +S["NEXT_STRING_H"]="<string.h>" +S["HAVE_DECL_STRNCASECMP"]="1" +S["HAVE_STRCASECMP"]="1" +S["HAVE_FFS"]="1" +S["GNULIB_FFS"]="0" +S["NEXT_AS_FIRST_DIRECTIVE_STDLIB_H"]="<stdlib.h>" +S["NEXT_STDLIB_H"]="<stdlib.h>" +S["NEXT_AS_FIRST_DIRECTIVE_STDIO_H"]="<stdio.h>" +S["NEXT_STDIO_H"]="<stdio.h>" +S["GL_GENERATE_STDARG_H_FALSE"]="" +S["GL_GENERATE_STDARG_H_TRUE"]="#" +S["STDARG_H"]="" +S["NEXT_AS_FIRST_DIRECTIVE_STDARG_H"]="" +S["NEXT_STDARG_H"]="<stdarg.h>" +S["HAVE_SPAWN_H"]="1" +S["NEXT_AS_FIRST_DIRECTIVE_SPAWN_H"]="<spawn.h>" +S["NEXT_SPAWN_H"]="<spawn.h>" +S["NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H"]="<signal.h>" +S["NEXT_SIGNAL_H"]="<signal.h>" +S["GL_GENERATE_SELINUX_CONTEXT_H_FALSE"]="#" +S["GL_GENERATE_SELINUX_CONTEXT_H_TRUE"]="" +S["SELINUX_CONTEXT_H"]="selinux/context.h" +S["NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H"]="" +S["NEXT_SELINUX_SELINUX_H"]="" +S["LIB_SELINUX"]="" +S["GL_GENERATE_SCHED_H_FALSE"]="" +S["GL_GENERATE_SCHED_H_TRUE"]="#" +S["SCHED_H"]="" +S["HAVE_STRUCT_SCHED_PARAM"]="" +S["HAVE_SCHED_H"]="" +S["NEXT_AS_FIRST_DIRECTIVE_SCHED_H"]="" +S["NEXT_SCHED_H"]="" +S["GLIBC21"]="yes" +S["LTLIBREADLINE"]="" +S["LIBREADLINE"]="" +S["REPLACE_RAISE"]="0" +S["REPLACE_PTHREAD_SIGMASK"]="0" +S["HAVE_SIGHANDLER_T"]="1" +S["HAVE_TYPE_VOLATILE_SIG_ATOMIC_T"]="1" +S["HAVE_STRUCT_SIGACTION_SA_SIGACTION"]="1" +S["HAVE_SIGACTION"]="1" +S["HAVE_SIGINFO_T"]="1" +S["HAVE_SIGSET_T"]="1" +S["HAVE_RAISE"]="1" +S["HAVE_PTHREAD_SIGMASK"]="1" +S["HAVE_POSIX_SIGNALBLOCKING"]="1" +S["GNULIB_SIGACTION"]="1" +S["GNULIB_SIGPROCMASK"]="1" +S["GNULIB_SIGNAL_H_SIGPIPE"]="0" +S["GNULIB_RAISE"]="1" +S["GNULIB_PTHREAD_SIGMASK"]="0" +S["ASM_SYMBOL_PREFIX"]="\"\"" +S["LIB_POSIX_SPAWN"]="" +S["REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN"]="0" +S["REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2"]="0" +S["REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE"]="0" +S["REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR"]="0" +S["REPLACE_POSIX_SPAWN"]="0" +S["HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR"]="1" +S["HAVE_POSIX_SPAWN_FILE_ACTIONS_T"]="1" +S["HAVE_POSIX_SPAWNATTR_T"]="1" +S["HAVE_POSIX_SPAWN"]="1" +S["GNULIB_POSIX_SPAWNATTR_DESTROY"]="1" +S["GNULIB_POSIX_SPAWNATTR_SETSIGMASK"]="1" +S["GNULIB_POSIX_SPAWNATTR_GETSIGMASK"]="0" +S["GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT"]="0" +S["GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT"]="0" +S["GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY"]="0" +S["GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY"]="0" +S["GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM"]="0" +S["GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM"]="0" +S["GNULIB_POSIX_SPAWNATTR_SETPGROUP"]="0" +S["GNULIB_POSIX_SPAWNATTR_GETPGROUP"]="0" +S["GNULIB_POSIX_SPAWNATTR_SETFLAGS"]="1" +S["GNULIB_POSIX_SPAWNATTR_GETFLAGS"]="0" +S["GNULIB_POSIX_SPAWNATTR_INIT"]="1" +S["GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY"]="1" +S["GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN"]="1" +S["GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2"]="0" +S["GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE"]="0" +S["GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR"]="0" +S["GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT"]="1" +S["GNULIB_POSIX_SPAWNP"]="1" +S["GNULIB_POSIX_SPAWN"]="0" +S["HAVE__BOOL"]="1" +S["GL_GENERATE_STDBOOL_H_FALSE"]="" +S["GL_GENERATE_STDBOOL_H_TRUE"]="#" +S["STDBOOL_H"]="" +S["UNDEFINE_STRTOK_R"]="0" +S["REPLACE_STRSIGNAL"]="0" +S["REPLACE_STRERROR_R"]="0" +S["REPLACE_STRERROR"]="0" +S["REPLACE_STRTOK_R"]="0" +S["REPLACE_STRCASESTR"]="0" +S["REPLACE_STRSTR"]="0" +S["REPLACE_STRNLEN"]="0" +S["REPLACE_STRNDUP"]="0" +S["REPLACE_STRNCAT"]="0" +S["REPLACE_STRDUP"]="0" +S["REPLACE_STRCHRNUL"]="0" +S["REPLACE_STPNCPY"]="0" +S["REPLACE_MEMMEM"]="0" +S["REPLACE_MEMCHR"]="0" +S["HAVE_STRVERSCMP"]="1" +S["HAVE_DECL_STRSIGNAL"]="1" +S["HAVE_DECL_STRERROR_R"]="1" +S["HAVE_DECL_STRTOK_R"]="1" +S["HAVE_STRCASESTR"]="1" +S["HAVE_STRSEP"]="1" +S["HAVE_STRPBRK"]="1" +S["HAVE_DECL_STRNLEN"]="1" +S["HAVE_DECL_STRNDUP"]="1" +S["HAVE_DECL_STRDUP"]="1" +S["HAVE_STRCHRNUL"]="1" +S["HAVE_STPNCPY"]="1" +S["HAVE_STPCPY"]="1" +S["HAVE_RAWMEMCHR"]="1" +S["HAVE_DECL_MEMRCHR"]="1" +S["HAVE_MEMPCPY"]="1" +S["HAVE_DECL_MEMMEM"]="1" +S["HAVE_MEMCHR"]="1" +S["HAVE_FFSLL"]="1" +S["HAVE_FFSL"]="1" +S["HAVE_EXPLICIT_BZERO"]="1" +S["HAVE_MBSLEN"]="0" +S["GNULIB_STRVERSCMP"]="1" +S["GNULIB_STRSIGNAL"]="0" +S["GNULIB_STRERROR_R"]="0" +S["GNULIB_STRERROR"]="1" +S["GNULIB_MBSTOK_R"]="0" +S["GNULIB_MBSSEP"]="0" +S["GNULIB_MBSSPN"]="0" +S["GNULIB_MBSPBRK"]="0" +S["GNULIB_MBSCSPN"]="0" +S["GNULIB_MBSCASESTR"]="0" +S["GNULIB_MBSPCASECMP"]="0" +S["GNULIB_MBSNCASECMP"]="0" +S["GNULIB_MBSCASECMP"]="0" +S["GNULIB_MBSSTR"]="0" +S["GNULIB_MBSRCHR"]="0" +S["GNULIB_MBSCHR"]="0" +S["GNULIB_MBSNLEN"]="0" +S["GNULIB_MBSLEN"]="0" +S["GNULIB_STRTOK_R"]="0" +S["GNULIB_STRCASESTR"]="1" +S["GNULIB_STRSTR"]="0" +S["GNULIB_STRSEP"]="1" +S["GNULIB_STRPBRK"]="0" +S["GNULIB_STRNLEN"]="0" +S["GNULIB_STRNDUP"]="0" +S["GNULIB_STRNCAT"]="0" +S["GNULIB_STRDUP"]="1" +S["GNULIB_STRCHRNUL"]="1" +S["GNULIB_STPNCPY"]="0" +S["GNULIB_STPCPY"]="0" +S["GNULIB_RAWMEMCHR"]="1" +S["GNULIB_MEMRCHR"]="0" +S["GNULIB_MEMPCPY"]="0" +S["GNULIB_MEMMEM"]="0" +S["GNULIB_MEMCHR"]="1" +S["GNULIB_FFSLL"]="0" +S["GNULIB_FFSL"]="0" +S["GNULIB_EXPLICIT_BZERO"]="0" +S["LOCALE_FR_UTF8"]="none" +S["LOCALE_ZH_CN"]="none" +S["LOCALE_JA"]="none" +S["NEXT_AS_FIRST_DIRECTIVE_MATH_H"]="<math.h>" +S["NEXT_MATH_H"]="<math.h>" +S["LTLIBMULTITHREAD"]="-pthread" +S["LIBMULTITHREAD"]="-pthread -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state" +S["LTLIBTHREAD"]="" +S["LIBTHREAD"]="" +S["LIBPTH_PREFIX"]="" +S["LTLIBPTH"]="" +S["LIBPTH"]="" +S["NEXT_AS_FIRST_DIRECTIVE_LOCALE_H"]="<locale.h>" +S["NEXT_LOCALE_H"]="<locale.h>" +S["HAVE_XLOCALE_H"]="1" +S["NEXT_AS_FIRST_DIRECTIVE_STDDEF_H"]="" +S["NEXT_STDDEF_H"]="" +S["GL_GENERATE_STDDEF_H_FALSE"]="" +S["GL_GENERATE_STDDEF_H_TRUE"]="#" +S["STDDEF_H"]="" +S["HAVE_WCHAR_T"]="1" +S["HAVE_MAX_ALIGN_T"]="1" +S["REPLACE_NULL"]="0" +S["REPLACE_STRUCT_LCONV"]="0" +S["REPLACE_FREELOCALE"]="0" +S["REPLACE_DUPLOCALE"]="0" +S["REPLACE_NEWLOCALE"]="0" +S["REPLACE_SETLOCALE"]="0" +S["REPLACE_LOCALECONV"]="0" +S["HAVE_FREELOCALE"]="1" +S["HAVE_DUPLOCALE"]="1" +S["HAVE_NEWLOCALE"]="1" +S["GNULIB_LOCALENAME"]="0" +S["GNULIB_DUPLOCALE"]="0" +S["GNULIB_SETLOCALE"]="0" +S["GNULIB_LOCALECONV"]="1" +S["LOCALCHARSET_TESTS_ENVIRONMENT"]="" +S["HAVE_LANGINFO_YESEXPR"]="1" +S["HAVE_LANGINFO_ERA"]="1" +S["HAVE_LANGINFO_ALTMON"]="0" +S["HAVE_LANGINFO_T_FMT_AMPM"]="1" +S["HAVE_LANGINFO_CODESET"]="1" +S["HAVE_LANGINFO_H"]="1" +S["NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H"]="<langinfo.h>" +S["NEXT_LANGINFO_H"]="<langinfo.h>" +S["REPLACE_NL_LANGINFO"]="1" +S["HAVE_NL_LANGINFO"]="1" +S["GNULIB_NL_LANGINFO"]="1" +S["NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H"]="<inttypes.h>" +S["NEXT_INTTYPES_H"]="<inttypes.h>" +S["UINT64_MAX_EQ_ULONG_MAX"]="0" +S["UINT32_MAX_LT_UINTMAX_MAX"]="1" +S["PRIPTR_PREFIX"]="\"l\"" +S["PRI_MACROS_BROKEN"]="0" +S["INT64_MAX_EQ_LONG_MAX"]="0" +S["INT32_MAX_LT_INTMAX_MAX"]="1" +S["REPLACE_STRTOUMAX"]="0" +S["REPLACE_STRTOIMAX"]="0" +S["HAVE_IMAXDIV_T"]="1" +S["HAVE_DECL_STRTOUMAX"]="1" +S["HAVE_DECL_STRTOIMAX"]="1" +S["HAVE_DECL_IMAXDIV"]="1" +S["HAVE_DECL_IMAXABS"]="1" +S["GNULIB_STRTOUMAX"]="0" +S["GNULIB_STRTOIMAX"]="0" +S["GNULIB_IMAXDIV"]="0" +S["GNULIB_IMAXABS"]="0" +S["GL_GENERATE_STDINT_H_FALSE"]="#" +S["GL_GENERATE_STDINT_H_TRUE"]="" +S["STDINT_H"]="stdint.h" +S["HAVE_SYS_INTTYPES_H"]="0" +S["HAVE_SYS_BITYPES_H"]="0" +S["HAVE_C99_STDINT_H"]="1" +S["WINT_T_SUFFIX"]="" +S["WCHAR_T_SUFFIX"]="" +S["SIG_ATOMIC_T_SUFFIX"]="" +S["SIZE_T_SUFFIX"]="" +S["PTRDIFF_T_SUFFIX"]="" +S["HAVE_SIGNED_WINT_T"]="" +S["HAVE_SIGNED_WCHAR_T"]="" +S["HAVE_SIGNED_SIG_ATOMIC_T"]="" +S["BITSIZEOF_WINT_T"]="" +S["BITSIZEOF_WCHAR_T"]="" +S["BITSIZEOF_SIG_ATOMIC_T"]="" +S["BITSIZEOF_SIZE_T"]="" +S["BITSIZEOF_PTRDIFF_T"]="" +S["HAVE_STDINT_H"]="1" +S["NEXT_AS_FIRST_DIRECTIVE_STDINT_H"]="<stdint.h>" +S["NEXT_STDINT_H"]="<stdint.h>" +S["HAVE_SYS_TYPES_H"]="1" +S["HAVE_INTTYPES_H"]="1" +S["HAVE_WCHAR_H"]="1" +S["HAVE_UNSIGNED_LONG_LONG_INT"]="1" +S["HAVE_LONG_LONG_INT"]="1" +S["GL_GENERATE_LIMITS_H_FALSE"]="#" +S["GL_GENERATE_LIMITS_H_TRUE"]="" +S["LIMITS_H"]="limits.h" +S["NEXT_AS_FIRST_DIRECTIVE_LIMITS_H"]="<limits.h>" +S["NEXT_LIMITS_H"]="<limits.h>" +S["REPLACE_LOCALTIME"]="0" +S["REPLACE_GMTIME"]="0" +S["REPLACE_TZSET"]="0" +S["REPLACE_TIMEGM"]="0" +S["REPLACE_STRFTIME"]="GNULIB_PORTCHECK" +S["REPLACE_NANOSLEEP"]="GNULIB_PORTCHECK" +S["REPLACE_MKTIME"]="0" +S["REPLACE_LOCALTIME_R"]="0" +S["REPLACE_CTIME"]="GNULIB_PORTCHECK" +S["HAVE_TIMEZONE_T"]="0" +S["HAVE_TZSET"]="1" +S["HAVE_TIMEGM"]="1" +S["HAVE_STRPTIME"]="1" +S["HAVE_NANOSLEEP"]="1" +S["HAVE_DECL_LOCALTIME_R"]="1" +S["GNULIB_TZSET"]="1" +S["GNULIB_TIME_RZ"]="1" +S["GNULIB_TIME_R"]="1" +S["GNULIB_TIMEGM"]="1" +S["GNULIB_STRPTIME"]="0" +S["GNULIB_STRFTIME"]="0" +S["GNULIB_NANOSLEEP"]="0" +S["GNULIB_LOCALTIME"]="0" +S["GNULIB_MKTIME"]="1" +S["GNULIB_CTIME"]="0" +S["NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H"]="<sys/time.h>" +S["NEXT_SYS_TIME_H"]="<sys/time.h>" +S["REPLACE_STRUCT_TIMEVAL"]="0" +S["REPLACE_GETTIMEOFDAY"]="0" +S["HAVE_SYS_TIME_H"]="1" +S["HAVE_STRUCT_TIMEVAL"]="1" +S["HAVE_GETTIMEOFDAY"]="1" +S["GNULIB_GETTIMEOFDAY"]="1" +S["LTLIBINTL"]="" +S["LIBINTL"]="" +S["GNULIB_GL_UNISTD_H_GETOPT"]="" +S["GETOPT_CDEFS_H"]="" +S["GETOPT_H"]="" +S["HAVE_SYS_CDEFS_H"]="" +S["HAVE_GETOPT_H"]="1" +S["NEXT_AS_FIRST_DIRECTIVE_GETOPT_H"]="<getopt.h>" +S["NEXT_GETOPT_H"]="<getopt.h>" +S["WINDOWS_64_BIT_ST_SIZE"]="0" +S["WINDOWS_STAT_TIMESPEC"]="0" +S["NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H"]="<sys/stat.h>" +S["NEXT_SYS_STAT_H"]="<sys/stat.h>" +S["REPLACE_UTIMENSAT"]="0" +S["REPLACE_STAT"]="0" +S["REPLACE_MKNOD"]="0" +S["REPLACE_MKFIFO"]="0" +S["REPLACE_MKDIR"]="0" +S["REPLACE_LSTAT"]="0" +S["REPLACE_FUTIMENS"]="0" +S["REPLACE_FSTATAT"]="0" +S["REPLACE_FSTAT"]="0" +S["HAVE_UTIMENSAT"]="1" +S["HAVE_MKNODAT"]="1" +S["HAVE_MKNOD"]="1" +S["HAVE_MKFIFOAT"]="1" +S["HAVE_MKFIFO"]="1" +S["HAVE_MKDIRAT"]="1" +S["HAVE_LSTAT"]="1" +S["HAVE_LCHMOD"]="1" +S["HAVE_FUTIMENS"]="1" +S["HAVE_FSTATAT"]="1" +S["HAVE_FCHMODAT"]="1" +S["GNULIB_OVERRIDES_STRUCT_STAT"]="0" +S["GNULIB_UTIMENSAT"]="0" +S["GNULIB_STAT"]="1" +S["GNULIB_MKNODAT"]="0" +S["GNULIB_MKNOD"]="0" +S["GNULIB_MKFIFOAT"]="0" +S["GNULIB_MKFIFO"]="0" +S["GNULIB_MKDIRAT"]="0" +S["GNULIB_LSTAT"]="1" +S["GNULIB_LCHMOD"]="0" +S["GNULIB_FUTIMENS"]="0" +S["GNULIB_FSTATAT"]="0" +S["GNULIB_FSTAT"]="1" +S["GNULIB_FCHMODAT"]="0" +S["WINDOWS_STAT_INODES"]="0" +S["WINDOWS_64_BIT_OFF_T"]="0" +S["NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H"]="<sys/types.h>" +S["NEXT_SYS_TYPES_H"]="<sys/types.h>" +S["REPLACE_VSPRINTF"]="0" +S["REPLACE_VSNPRINTF"]="0" +S["REPLACE_VPRINTF"]="0" +S["REPLACE_VFPRINTF"]="1" +S["REPLACE_VDPRINTF"]="0" +S["REPLACE_VASPRINTF"]="1" +S["REPLACE_TMPFILE"]="0" +S["REPLACE_STDIO_WRITE_FUNCS"]="0" +S["REPLACE_STDIO_READ_FUNCS"]="0" +S["REPLACE_SPRINTF"]="0" +S["REPLACE_SNPRINTF"]="0" +S["REPLACE_RENAMEAT"]="0" +S["REPLACE_RENAME"]="0" +S["REPLACE_REMOVE"]="0" +S["REPLACE_PRINTF"]="1" +S["REPLACE_POPEN"]="0" +S["REPLACE_PERROR"]="0" +S["REPLACE_OBSTACK_PRINTF"]="0" +S["REPLACE_GETLINE"]="0" +S["REPLACE_GETDELIM"]="0" +S["REPLACE_FTELLO"]="0" +S["REPLACE_FTELL"]="0" +S["REPLACE_FSEEKO"]="0" +S["REPLACE_FSEEK"]="0" +S["REPLACE_FREOPEN"]="0" +S["REPLACE_FPURGE"]="0" +S["REPLACE_FPRINTF"]="1" +S["REPLACE_FOPEN"]="0" +S["REPLACE_FFLUSH"]="0" +S["REPLACE_FDOPEN"]="0" +S["REPLACE_FCLOSE"]="0" +S["REPLACE_DPRINTF"]="0" +S["HAVE_VDPRINTF"]="1" +S["HAVE_VASPRINTF"]="1" +S["HAVE_RENAMEAT"]="1" +S["HAVE_POPEN"]="1" +S["HAVE_PCLOSE"]="1" +S["HAVE_FTELLO"]="1" +S["HAVE_FSEEKO"]="1" +S["HAVE_DPRINTF"]="1" +S["HAVE_DECL_VSNPRINTF"]="1" +S["HAVE_DECL_SNPRINTF"]="1" +S["HAVE_DECL_OBSTACK_PRINTF"]="1" +S["HAVE_DECL_GETLINE"]="1" +S["HAVE_DECL_GETDELIM"]="1" +S["HAVE_DECL_FTELLO"]="1" +S["HAVE_DECL_FSEEKO"]="1" +S["HAVE_DECL_FPURGE"]="1" +S["GNULIB_VSPRINTF_POSIX"]="0" +S["GNULIB_VSNPRINTF"]="0" +S["GNULIB_VPRINTF_POSIX"]="0" +S["GNULIB_VPRINTF"]="1" +S["GNULIB_VFPRINTF_POSIX"]="1" +S["GNULIB_VFPRINTF"]="1" +S["GNULIB_VDPRINTF"]="0" +S["GNULIB_VSCANF"]="0" +S["GNULIB_VFSCANF"]="0" +S["GNULIB_VASPRINTF"]="1" +S["GNULIB_TMPFILE"]="0" +S["GNULIB_STDIO_H_SIGPIPE"]="0" +S["GNULIB_STDIO_H_NONBLOCKING"]="0" +S["GNULIB_SPRINTF_POSIX"]="0" +S["GNULIB_SNPRINTF"]="0" +S["GNULIB_SCANF"]="1" +S["GNULIB_RENAMEAT"]="0" +S["GNULIB_RENAME"]="1" +S["GNULIB_REMOVE"]="0" +S["GNULIB_PUTS"]="1" +S["GNULIB_PUTCHAR"]="1" +S["GNULIB_PUTC"]="1" +S["GNULIB_PRINTF_POSIX"]="1" +S["GNULIB_PRINTF"]="1" +S["GNULIB_POPEN"]="0" +S["GNULIB_PERROR"]="0" +S["GNULIB_PCLOSE"]="0" +S["GNULIB_OBSTACK_PRINTF_POSIX"]="0" +S["GNULIB_OBSTACK_PRINTF"]="0" +S["GNULIB_GETLINE"]="1" +S["GNULIB_GETDELIM"]="1" +S["GNULIB_GETCHAR"]="1" +S["GNULIB_GETC"]="1" +S["GNULIB_FWRITE"]="1" +S["GNULIB_FTELLO"]="1" +S["GNULIB_FTELL"]="1" +S["GNULIB_FSEEKO"]="1" +S["GNULIB_FSEEK"]="1" +S["GNULIB_FSCANF"]="1" +S["GNULIB_FREOPEN"]="0" +S["GNULIB_FREAD"]="1" +S["GNULIB_FPUTS"]="1" +S["GNULIB_FPUTC"]="1" +S["GNULIB_FPURGE"]="0" +S["GNULIB_FPRINTF_POSIX"]="1" +S["GNULIB_FPRINTF"]="1" +S["GNULIB_FOPEN"]="0" +S["GNULIB_FGETS"]="1" +S["GNULIB_FGETC"]="1" +S["GNULIB_FFLUSH"]="0" +S["GNULIB_FDOPEN"]="0" +S["GNULIB_FCLOSE"]="0" +S["GNULIB_DPRINTF"]="0" +S["HAVE_FEATURES_H"]="1" +S["GNULIB_OVERRIDES_WINT_T"]="0" +S["APPLE_UNIVERSAL_BUILD"]="0" +S["HAVE_SAME_LONG_DOUBLE_AS_DOUBLE"]="0" +S["FLOOR_LIBM"]="-lm" +S["REPLACE_TRUNCL"]="0" +S["REPLACE_TRUNCF"]="0" +S["REPLACE_TRUNC"]="0" +S["REPLACE_TANHF"]="0" +S["REPLACE_TANF"]="0" +S["REPLACE_SQRTL"]="0" +S["REPLACE_SQRTF"]="0" +S["REPLACE_SINHF"]="0" +S["REPLACE_SINF"]="0" +S["REPLACE_SIGNBIT_USING_GCC"]="1" +S["REPLACE_SIGNBIT"]="0" +S["REPLACE_ROUNDL"]="0" +S["REPLACE_ROUNDF"]="0" +S["REPLACE_ROUND"]="0" +S["REPLACE_REMAINDERL"]="0" +S["REPLACE_REMAINDERF"]="0" +S["REPLACE_REMAINDER"]="0" +S["REPLACE_NAN"]="0" +S["REPLACE_MODFL"]="0" +S["REPLACE_MODFF"]="0" +S["REPLACE_MODF"]="0" +S["REPLACE_LOGBL"]="0" +S["REPLACE_LOGBF"]="0" +S["REPLACE_LOGB"]="0" +S["REPLACE_LOG2L"]="0" +S["REPLACE_LOG2F"]="0" +S["REPLACE_LOG2"]="0" +S["REPLACE_LOG1PL"]="0" +S["REPLACE_LOG1PF"]="0" +S["REPLACE_LOG1P"]="0" +S["REPLACE_LOG10L"]="0" +S["REPLACE_LOG10F"]="0" +S["REPLACE_LOG10"]="0" +S["REPLACE_LOGL"]="0" +S["REPLACE_LOGF"]="0" +S["REPLACE_LOG"]="0" +S["REPLACE_LDEXPL"]="0" +S["REPLACE_ISNAN"]="0" +S["REPLACE_ISINF"]="0" +S["REPLACE_ISFINITE"]="0" +S["REPLACE_ILOGBL"]="0" +S["REPLACE_ILOGBF"]="0" +S["REPLACE_ILOGB"]="0" +S["REPLACE_HYPOTL"]="0" +S["REPLACE_HYPOTF"]="0" +S["REPLACE_HYPOT"]="0" +S["REPLACE_HUGE_VAL"]="0" +S["REPLACE_FREXPL"]="0" +S["REPLACE_FREXP"]="0" +S["REPLACE_FREXPF"]="0" +S["REPLACE_FMODL"]="0" +S["REPLACE_FMODF"]="0" +S["REPLACE_FMOD"]="0" +S["REPLACE_FMAL"]="0" +S["REPLACE_FMAF"]="0" +S["REPLACE_FMA"]="0" +S["REPLACE_FLOORL"]="0" +S["REPLACE_FLOORF"]="0" +S["REPLACE_FLOOR"]="0" +S["REPLACE_FABSL"]="0" +S["REPLACE_EXP2L"]="0" +S["REPLACE_EXP2"]="0" +S["REPLACE_EXPM1F"]="0" +S["REPLACE_EXPM1"]="0" +S["REPLACE_EXPF"]="0" +S["REPLACE_COSHF"]="0" +S["REPLACE_COSF"]="0" +S["REPLACE_CEILL"]="0" +S["REPLACE_CEILF"]="0" +S["REPLACE_CEIL"]="0" +S["REPLACE_CBRTL"]="0" +S["REPLACE_CBRTF"]="0" +S["REPLACE_ATAN2F"]="0" +S["REPLACE_ATANF"]="0" +S["REPLACE_ASINF"]="0" +S["REPLACE_ACOSF"]="0" +S["HAVE_DECL_TRUNCL"]="1" +S["HAVE_DECL_TRUNCF"]="1" +S["HAVE_DECL_TRUNC"]="1" +S["HAVE_DECL_TANL"]="1" +S["HAVE_DECL_SQRTL"]="1" +S["HAVE_DECL_SINL"]="1" +S["HAVE_DECL_ROUNDL"]="1" +S["HAVE_DECL_ROUNDF"]="1" +S["HAVE_DECL_ROUND"]="1" +S["HAVE_DECL_RINTF"]="1" +S["HAVE_DECL_REMAINDERL"]="1" +S["HAVE_DECL_REMAINDER"]="1" +S["HAVE_DECL_LOGB"]="1" +S["HAVE_DECL_LOG2L"]="1" +S["HAVE_DECL_LOG2F"]="1" +S["HAVE_DECL_LOG2"]="1" +S["HAVE_DECL_LOG10L"]="1" +S["HAVE_DECL_LOGL"]="1" +S["HAVE_DECL_LDEXPL"]="1" +S["HAVE_DECL_FREXPL"]="1" +S["HAVE_DECL_FLOORL"]="1" +S["HAVE_DECL_FLOORF"]="1" +S["HAVE_DECL_EXPM1L"]="1" +S["HAVE_DECL_EXP2L"]="1" +S["HAVE_DECL_EXP2F"]="1" +S["HAVE_DECL_EXP2"]="1" +S["HAVE_DECL_EXPL"]="1" +S["HAVE_DECL_COSL"]="1" +S["HAVE_DECL_COPYSIGNF"]="1" +S["HAVE_DECL_CEILL"]="1" +S["HAVE_DECL_CEILF"]="1" +S["HAVE_DECL_CBRTL"]="1" +S["HAVE_DECL_CBRTF"]="1" +S["HAVE_DECL_ATANL"]="1" +S["HAVE_DECL_ASINL"]="1" +S["HAVE_DECL_ACOSL"]="1" +S["HAVE_TANHF"]="1" +S["HAVE_TANL"]="1" +S["HAVE_TANF"]="1" +S["HAVE_SQRTL"]="1" +S["HAVE_SQRTF"]="1" +S["HAVE_SINHF"]="1" +S["HAVE_SINL"]="1" +S["HAVE_SINF"]="1" +S["HAVE_RINTL"]="1" +S["HAVE_RINT"]="1" +S["HAVE_REMAINDERF"]="1" +S["HAVE_REMAINDER"]="1" +S["HAVE_POWF"]="1" +S["HAVE_MODFL"]="1" +S["HAVE_MODFF"]="1" +S["HAVE_LOGBL"]="1" +S["HAVE_LOGBF"]="1" +S["HAVE_LOG1PL"]="1" +S["HAVE_LOG1PF"]="1" +S["HAVE_LOG1P"]="1" +S["HAVE_LOG10L"]="1" +S["HAVE_LOG10F"]="1" +S["HAVE_LOGL"]="1" +S["HAVE_LOGF"]="1" +S["HAVE_LDEXPF"]="1" +S["HAVE_ISNANL"]="1" +S["HAVE_ISNAND"]="1" +S["HAVE_ISNANF"]="1" +S["HAVE_ILOGBL"]="1" +S["HAVE_ILOGBF"]="1" +S["HAVE_ILOGB"]="1" +S["HAVE_HYPOTL"]="1" +S["HAVE_HYPOTF"]="1" +S["HAVE_FREXPF"]="1" +S["HAVE_FMODL"]="1" +S["HAVE_FMODF"]="1" +S["HAVE_FMAL"]="1" +S["HAVE_FMAF"]="1" +S["HAVE_FMA"]="1" +S["HAVE_FABSL"]="1" +S["HAVE_FABSF"]="1" +S["HAVE_EXPM1F"]="1" +S["HAVE_EXPM1"]="1" +S["HAVE_EXPL"]="1" +S["HAVE_EXPF"]="1" +S["HAVE_COSHF"]="1" +S["HAVE_COSL"]="1" +S["HAVE_COSF"]="1" +S["HAVE_COPYSIGNL"]="1" +S["HAVE_COPYSIGN"]="1" +S["HAVE_CBRTL"]="1" +S["HAVE_CBRTF"]="1" +S["HAVE_CBRT"]="1" +S["HAVE_ATAN2F"]="1" +S["HAVE_ATANL"]="1" +S["HAVE_ATANF"]="1" +S["HAVE_ASINL"]="1" +S["HAVE_ASINF"]="1" +S["HAVE_ACOSL"]="1" +S["HAVE_ACOSF"]="1" +S["GNULIB_TRUNCL"]="0" +S["GNULIB_TRUNCF"]="0" +S["GNULIB_TRUNC"]="0" +S["GNULIB_TANHF"]="0" +S["GNULIB_TANL"]="0" +S["GNULIB_TANF"]="0" +S["GNULIB_SQRTL"]="0" +S["GNULIB_SQRTF"]="0" +S["GNULIB_SINHF"]="0" +S["GNULIB_SINL"]="0" +S["GNULIB_SINF"]="0" +S["GNULIB_SIGNBIT"]="1" +S["GNULIB_ROUNDL"]="0" +S["GNULIB_ROUNDF"]="0" +S["GNULIB_ROUND"]="0" +S["GNULIB_RINTL"]="0" +S["GNULIB_RINTF"]="0" +S["GNULIB_RINT"]="0" +S["GNULIB_REMAINDERL"]="0" +S["GNULIB_REMAINDERF"]="0" +S["GNULIB_REMAINDER"]="0" +S["GNULIB_POWF"]="0" +S["GNULIB_MODFL"]="0" +S["GNULIB_MODFF"]="0" +S["GNULIB_MODF"]="0" +S["GNULIB_LOGBL"]="0" +S["GNULIB_LOGBF"]="0" +S["GNULIB_LOGB"]="0" +S["GNULIB_LOG2L"]="0" +S["GNULIB_LOG2F"]="0" +S["GNULIB_LOG2"]="0" +S["GNULIB_LOG1PL"]="0" +S["GNULIB_LOG1PF"]="0" +S["GNULIB_LOG1P"]="0" +S["GNULIB_LOG10L"]="0" +S["GNULIB_LOG10F"]="0" +S["GNULIB_LOG10"]="0" +S["GNULIB_LOGL"]="0" +S["GNULIB_LOGF"]="0" +S["GNULIB_LOG"]="0" +S["GNULIB_LDEXPL"]="0" +S["GNULIB_LDEXPF"]="0" +S["GNULIB_ISNANL"]="0" +S["GNULIB_ISNAND"]="0" +S["GNULIB_ISNANF"]="0" +S["GNULIB_ISNAN"]="0" +S["GNULIB_ISINF"]="0" +S["GNULIB_ISFINITE"]="0" +S["GNULIB_ILOGBL"]="0" +S["GNULIB_ILOGBF"]="0" +S["GNULIB_ILOGB"]="0" +S["GNULIB_HYPOTL"]="0" +S["GNULIB_HYPOTF"]="0" +S["GNULIB_HYPOT"]="0" +S["GNULIB_FREXPL"]="1" +S["GNULIB_FREXP"]="1" +S["GNULIB_FREXPF"]="0" +S["GNULIB_FMODL"]="0" +S["GNULIB_FMODF"]="0" +S["GNULIB_FMOD"]="0" +S["GNULIB_FMAL"]="0" +S["GNULIB_FMAF"]="0" +S["GNULIB_FMA"]="0" +S["GNULIB_FLOORL"]="0" +S["GNULIB_FLOORF"]="0" +S["GNULIB_FLOOR"]="1" +S["GNULIB_FABSL"]="0" +S["GNULIB_FABSF"]="0" +S["GNULIB_EXPM1L"]="0" +S["GNULIB_EXPM1F"]="0" +S["GNULIB_EXPM1"]="0" +S["GNULIB_EXP2L"]="0" +S["GNULIB_EXP2F"]="0" +S["GNULIB_EXP2"]="0" +S["GNULIB_EXPL"]="0" +S["GNULIB_EXPF"]="0" +S["GNULIB_COSHF"]="0" +S["GNULIB_COSL"]="0" +S["GNULIB_COSF"]="0" +S["GNULIB_COPYSIGNL"]="0" +S["GNULIB_COPYSIGNF"]="0" +S["GNULIB_COPYSIGN"]="0" +S["GNULIB_CEILL"]="0" +S["GNULIB_CEILF"]="0" +S["GNULIB_CEIL"]="0" +S["GNULIB_CBRTL"]="0" +S["GNULIB_CBRTF"]="0" +S["GNULIB_CBRT"]="0" +S["GNULIB_ATAN2F"]="0" +S["GNULIB_ATANL"]="0" +S["GNULIB_ATANF"]="0" +S["GNULIB_ASINL"]="0" +S["GNULIB_ASINF"]="0" +S["GNULIB_ACOSL"]="0" +S["GNULIB_ACOSF"]="0" +S["HAVE_FLOCK"]="1" +S["GNULIB_FLOCK"]="1" +S["REPLACE_ITOLD"]="0" +S["GL_GENERATE_FLOAT_H_FALSE"]="" +S["GL_GENERATE_FLOAT_H_TRUE"]="#" +S["FLOAT_H"]="" +S["NEXT_AS_FIRST_DIRECTIVE_FLOAT_H"]="" +S["NEXT_FLOAT_H"]="" +S["NEXT_AS_FIRST_DIRECTIVE_FCNTL_H"]="<fcntl.h>" +S["NEXT_FCNTL_H"]="<fcntl.h>" +S["REPLACE_OPENAT"]="0" +S["REPLACE_OPEN"]="0" +S["REPLACE_FCNTL"]="1" +S["HAVE_OPENAT"]="1" +S["HAVE_FCNTL"]="1" +S["GNULIB_OPENAT"]="0" +S["GNULIB_OPEN"]="1" +S["GNULIB_NONBLOCKING"]="0" +S["GNULIB_FCNTL"]="1" +S["LIB_EACCESS"]="" +S["EOVERFLOW_VALUE"]="" +S["EOVERFLOW_HIDDEN"]="" +S["ENOLINK_VALUE"]="" +S["ENOLINK_HIDDEN"]="" +S["EMULTIHOP_VALUE"]="" +S["EMULTIHOP_HIDDEN"]="" +S["GL_GENERATE_ERRNO_H_FALSE"]="" +S["GL_GENERATE_ERRNO_H_TRUE"]="#" +S["ERRNO_H"]="" +S["NEXT_AS_FIRST_DIRECTIVE_ERRNO_H"]="" +S["NEXT_ERRNO_H"]="" +S["PRAGMA_COLUMNS"]="" +S["PRAGMA_SYSTEM_HEADER"]="#pragma GCC system_header" +S["INCLUDE_NEXT_AS_FIRST_DIRECTIVE"]="include_next" +S["INCLUDE_NEXT"]="include_next" +S["HAVE_WINSOCK2_H"]="0" +S["HAVE_MSVC_INVALID_PARAMETER_HANDLER"]="0" +S["LIB_CLOCK_GETTIME"]="" +S["UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS"]="0" +S["UNISTD_H_HAVE_WINSOCK2_H"]="0" +S["REPLACE_WRITE"]="0" +S["REPLACE_USLEEP"]="0" +S["REPLACE_UNLINKAT"]="0" +S["REPLACE_UNLINK"]="0" +S["REPLACE_TTYNAME_R"]="0" +S["REPLACE_TRUNCATE"]="0" +S["REPLACE_SYMLINKAT"]="0" +S["REPLACE_SYMLINK"]="0" +S["REPLACE_SLEEP"]="0" +S["REPLACE_RMDIR"]="0" +S["REPLACE_READLINKAT"]="0" +S["REPLACE_READLINK"]="0" +S["REPLACE_READ"]="0" +S["REPLACE_PWRITE"]="0" +S["REPLACE_PREAD"]="0" +S["REPLACE_LSEEK"]="0" +S["REPLACE_LINKAT"]="0" +S["REPLACE_LINK"]="0" +S["REPLACE_LCHOWN"]="0" +S["REPLACE_ISATTY"]="0" +S["REPLACE_GETPASS"]="0" +S["REPLACE_GETPAGESIZE"]="0" +S["REPLACE_GETGROUPS"]="0" +S["REPLACE_GETLOGIN_R"]="0" +S["REPLACE_GETDTABLESIZE"]="0" +S["REPLACE_GETDOMAINNAME"]="0" +S["REPLACE_GETCWD"]="0" +S["REPLACE_FTRUNCATE"]="0" +S["REPLACE_FCHOWNAT"]="0" +S["REPLACE_FACCESSAT"]="0" +S["REPLACE_DUP2"]="0" +S["REPLACE_DUP"]="0" +S["REPLACE_CLOSE"]="0" +S["REPLACE_CHOWN"]="0" +S["HAVE_SYS_PARAM_H"]="0" +S["HAVE_OS_H"]="0" +S["HAVE_DECL_TTYNAME_R"]="1" +S["HAVE_DECL_TRUNCATE"]="1" +S["HAVE_DECL_SETHOSTNAME"]="1" +S["HAVE_DECL_GETUSERSHELL"]="1" +S["HAVE_DECL_GETPAGESIZE"]="1" +S["HAVE_DECL_GETLOGIN_R"]="1" +S["HAVE_DECL_GETLOGIN"]="1" +S["HAVE_DECL_GETDOMAINNAME"]="1" +S["HAVE_DECL_FDATASYNC"]="1" +S["HAVE_DECL_FCHDIR"]="1" +S["HAVE_DECL_ENVIRON"]="1" +S["HAVE_USLEEP"]="1" +S["HAVE_UNLINKAT"]="1" +S["HAVE_SYMLINKAT"]="1" +S["HAVE_SYMLINK"]="1" +S["HAVE_SLEEP"]="1" +S["HAVE_SETHOSTNAME"]="1" +S["HAVE_READLINKAT"]="1" +S["HAVE_READLINK"]="1" +S["HAVE_PWRITE"]="1" +S["HAVE_PREAD"]="1" +S["HAVE_PIPE2"]="1" +S["HAVE_PIPE"]="1" +S["HAVE_LINKAT"]="1" +S["HAVE_LINK"]="1" +S["HAVE_LCHOWN"]="1" +S["HAVE_GROUP_MEMBER"]="1" +S["HAVE_GETPASS"]="1" +S["HAVE_GETPAGESIZE"]="1" +S["HAVE_GETLOGIN"]="1" +S["HAVE_GETHOSTNAME"]="1" +S["HAVE_GETGROUPS"]="1" +S["HAVE_GETDTABLESIZE"]="1" +S["HAVE_FTRUNCATE"]="1" +S["HAVE_FSYNC"]="1" +S["HAVE_FDATASYNC"]="1" +S["HAVE_FCHOWNAT"]="1" +S["HAVE_FCHDIR"]="1" +S["HAVE_FACCESSAT"]="1" +S["HAVE_EUIDACCESS"]="1" +S["HAVE_DUP3"]="1" +S["HAVE_DUP2"]="1" +S["HAVE_CHOWN"]="1" +S["GNULIB_WRITE"]="0" +S["GNULIB_USLEEP"]="0" +S["GNULIB_UNLINKAT"]="0" +S["GNULIB_UNLINK"]="0" +S["GNULIB_UNISTD_H_SIGPIPE"]="0" +S["GNULIB_UNISTD_H_NONBLOCKING"]="0" +S["GNULIB_TTYNAME_R"]="0" +S["GNULIB_TRUNCATE"]="0" +S["GNULIB_SYMLINKAT"]="0" +S["GNULIB_SYMLINK"]="0" +S["GNULIB_SLEEP"]="0" +S["GNULIB_SETHOSTNAME"]="0" +S["GNULIB_RMDIR"]="1" +S["GNULIB_READLINKAT"]="0" +S["GNULIB_READLINK"]="1" +S["GNULIB_READ"]="0" +S["GNULIB_PWRITE"]="0" +S["GNULIB_PREAD"]="0" +S["GNULIB_PIPE2"]="0" +S["GNULIB_PIPE"]="0" +S["GNULIB_LSEEK"]="1" +S["GNULIB_LINKAT"]="0" +S["GNULIB_LINK"]="0" +S["GNULIB_LCHOWN"]="0" +S["GNULIB_ISATTY"]="0" +S["GNULIB_GROUP_MEMBER"]="1" +S["GNULIB_GETUSERSHELL"]="0" +S["GNULIB_GETPASS"]="1" +S["GNULIB_GETPAGESIZE"]="0" +S["GNULIB_GETLOGIN_R"]="0" +S["GNULIB_GETLOGIN"]="0" +S["GNULIB_GETHOSTNAME"]="0" +S["GNULIB_GETGROUPS"]="1" +S["GNULIB_GETDTABLESIZE"]="1" +S["GNULIB_GETDOMAINNAME"]="0" +S["GNULIB_GETCWD"]="0" +S["GNULIB_FTRUNCATE"]="0" +S["GNULIB_FSYNC"]="0" +S["GNULIB_FDATASYNC"]="0" +S["GNULIB_FCHOWNAT"]="0" +S["GNULIB_FCHDIR"]="0" +S["GNULIB_FACCESSAT"]="0" +S["GNULIB_EUIDACCESS"]="1" +S["GNULIB_ENVIRON"]="1" +S["GNULIB_DUP3"]="0" +S["GNULIB_DUP2"]="1" +S["GNULIB_DUP"]="0" +S["GNULIB_CLOSE"]="1" +S["GNULIB_CHOWN"]="0" +S["GNULIB_CHDIR"]="1" +S["REPLACE_WCTOMB"]="0" +S["REPLACE_UNSETENV"]="0" +S["REPLACE_STRTOD"]="0" +S["REPLACE_SETENV"]="0" +S["REPLACE_REALPATH"]="0" +S["REPLACE_REALLOC"]="0" +S["REPLACE_RANDOM_R"]="0" +S["REPLACE_QSORT_R"]="0" +S["REPLACE_PUTENV"]="0" +S["REPLACE_PTSNAME_R"]="0" +S["REPLACE_PTSNAME"]="0" +S["REPLACE_MKSTEMP"]="0" +S["REPLACE_MBTOWC"]="0" +S["REPLACE_MALLOC"]="0" +S["REPLACE_CANONICALIZE_FILE_NAME"]="0" +S["REPLACE_CALLOC"]="0" +S["HAVE_DECL_UNSETENV"]="1" +S["HAVE_UNLOCKPT"]="1" +S["HAVE_SYS_LOADAVG_H"]="0" +S["HAVE_STRUCT_RANDOM_DATA"]="1" +S["HAVE_STRTOULL"]="1" +S["HAVE_STRTOLL"]="1" +S["HAVE_STRTOD"]="1" +S["HAVE_DECL_SETSTATE"]="1" +S["HAVE_DECL_SETENV"]="1" +S["HAVE_SETENV"]="1" +S["HAVE_SECURE_GETENV"]="1" +S["HAVE_RPMATCH"]="1" +S["HAVE_REALPATH"]="1" +S["HAVE_REALLOCARRAY"]="1" +S["HAVE_RANDOM_R"]="1" +S["HAVE_RANDOM_H"]="0" +S["HAVE_RANDOM"]="1" +S["HAVE_QSORT_R"]="1" +S["HAVE_PTSNAME_R"]="1" +S["HAVE_PTSNAME"]="1" +S["HAVE_POSIX_OPENPT"]="1" +S["HAVE_MKSTEMPS"]="1" +S["HAVE_MKSTEMP"]="1" +S["HAVE_MKOSTEMPS"]="1" +S["HAVE_MKOSTEMP"]="1" +S["HAVE_MKDTEMP"]="1" +S["HAVE_DECL_INITSTATE"]="1" +S["HAVE_GRANTPT"]="1" +S["HAVE_GETSUBOPT"]="1" +S["HAVE_DECL_GETLOADAVG"]="1" +S["HAVE_CANONICALIZE_FILE_NAME"]="1" +S["HAVE_ATOLL"]="1" +S["HAVE__EXIT"]="1" +S["GNULIB_WCTOMB"]="1" +S["GNULIB_UNSETENV"]="1" +S["GNULIB_UNLOCKPT"]="0" +S["GNULIB_SYSTEM_POSIX"]="0" +S["GNULIB_STRTOULL"]="0" +S["GNULIB_STRTOLL"]="0" +S["GNULIB_STRTOD"]="0" +S["GNULIB_SETENV"]="1" +S["GNULIB_SECURE_GETENV"]="1" +S["GNULIB_RPMATCH"]="0" +S["GNULIB_REALPATH"]="1" +S["GNULIB_REALLOC_POSIX"]="1" +S["GNULIB_REALLOCARRAY"]="0" +S["GNULIB_RANDOM_R"]="1" +S["GNULIB_RANDOM"]="0" +S["GNULIB_QSORT_R"]="0" +S["GNULIB_PUTENV"]="0" +S["GNULIB_PTSNAME_R"]="0" +S["GNULIB_PTSNAME"]="0" +S["GNULIB_POSIX_OPENPT"]="0" +S["GNULIB_MKSTEMPS"]="0" +S["GNULIB_MKSTEMP"]="1" +S["GNULIB_MKOSTEMPS"]="0" +S["GNULIB_MKOSTEMP"]="1" +S["GNULIB_MKDTEMP"]="0" +S["GNULIB_MBTOWC"]="1" +S["GNULIB_MALLOC_POSIX"]="1" +S["GNULIB_GRANTPT"]="0" +S["GNULIB_GETSUBOPT"]="0" +S["GNULIB_GETLOADAVG"]="0" +S["GNULIB_CANONICALIZE_FILE_NAME"]="1" +S["GNULIB_CALLOC_POSIX"]="0" +S["GNULIB_ATOLL"]="0" +S["GNULIB__EXIT"]="0" +S["LOCALE_FR"]="none" +S["REPLACE_WCSFTIME"]="0" +S["REPLACE_WCSWIDTH"]="0" +S["REPLACE_WCWIDTH"]="0" +S["REPLACE_WCSNRTOMBS"]="0" +S["REPLACE_WCSRTOMBS"]="0" +S["REPLACE_WCRTOMB"]="0" +S["REPLACE_MBSNRTOWCS"]="0" +S["REPLACE_MBSRTOWCS"]="0" +S["REPLACE_MBRLEN"]="1" +S["REPLACE_MBRTOWC"]="1" +S["REPLACE_MBSINIT"]="0" +S["REPLACE_WCTOB"]="0" +S["REPLACE_BTOWC"]="0" +S["REPLACE_MBSTATE_T"]="0" +S["HAVE_DECL_WCWIDTH"]="1" +S["HAVE_DECL_WCTOB"]="1" +S["HAVE_WCSFTIME"]="1" +S["HAVE_WCSWIDTH"]="1" +S["HAVE_WCSTOK"]="1" +S["HAVE_WCSSTR"]="1" +S["HAVE_WCSPBRK"]="1" +S["HAVE_WCSSPN"]="1" +S["HAVE_WCSCSPN"]="1" +S["HAVE_WCSRCHR"]="1" +S["HAVE_WCSCHR"]="1" +S["HAVE_WCSDUP"]="1" +S["HAVE_WCSXFRM"]="1" +S["HAVE_WCSCOLL"]="1" +S["HAVE_WCSNCASECMP"]="1" +S["HAVE_WCSCASECMP"]="1" +S["HAVE_WCSNCMP"]="1" +S["HAVE_WCSCMP"]="1" +S["HAVE_WCSNCAT"]="1" +S["HAVE_WCSCAT"]="1" +S["HAVE_WCPNCPY"]="1" +S["HAVE_WCSNCPY"]="1" +S["HAVE_WCPCPY"]="1" +S["HAVE_WCSCPY"]="1" +S["HAVE_WCSNLEN"]="1" +S["HAVE_WCSLEN"]="1" +S["HAVE_WMEMSET"]="1" +S["HAVE_WMEMMOVE"]="1" +S["HAVE_WMEMCPY"]="1" +S["HAVE_WMEMCMP"]="1" +S["HAVE_WMEMCHR"]="1" +S["HAVE_WCSNRTOMBS"]="1" +S["HAVE_WCSRTOMBS"]="1" +S["HAVE_WCRTOMB"]="1" +S["HAVE_MBSNRTOWCS"]="1" +S["HAVE_MBSRTOWCS"]="1" +S["HAVE_MBRLEN"]="1" +S["HAVE_MBRTOWC"]="1" +S["HAVE_MBSINIT"]="1" +S["HAVE_BTOWC"]="1" +S["GNULIB_WCSFTIME"]="0" +S["GNULIB_WCSWIDTH"]="0" +S["GNULIB_WCSTOK"]="0" +S["GNULIB_WCSSTR"]="0" +S["GNULIB_WCSPBRK"]="0" +S["GNULIB_WCSSPN"]="0" +S["GNULIB_WCSCSPN"]="0" +S["GNULIB_WCSRCHR"]="0" +S["GNULIB_WCSCHR"]="0" +S["GNULIB_WCSDUP"]="0" +S["GNULIB_WCSXFRM"]="0" +S["GNULIB_WCSCOLL"]="0" +S["GNULIB_WCSNCASECMP"]="0" +S["GNULIB_WCSCASECMP"]="0" +S["GNULIB_WCSNCMP"]="0" +S["GNULIB_WCSCMP"]="0" +S["GNULIB_WCSNCAT"]="0" +S["GNULIB_WCSCAT"]="0" +S["GNULIB_WCPNCPY"]="0" +S["GNULIB_WCSNCPY"]="0" +S["GNULIB_WCPCPY"]="0" +S["GNULIB_WCSCPY"]="0" +S["GNULIB_WCSNLEN"]="0" +S["GNULIB_WCSLEN"]="0" +S["GNULIB_WMEMSET"]="0" +S["GNULIB_WMEMMOVE"]="0" +S["GNULIB_WMEMCPY"]="0" +S["GNULIB_WMEMCMP"]="0" +S["GNULIB_WMEMCHR"]="0" +S["GNULIB_WCWIDTH"]="0" +S["GNULIB_WCSNRTOMBS"]="0" +S["GNULIB_WCSRTOMBS"]="0" +S["GNULIB_WCRTOMB"]="1" +S["GNULIB_MBSNRTOWCS"]="0" +S["GNULIB_MBSRTOWCS"]="0" +S["GNULIB_MBRLEN"]="1" +S["GNULIB_MBRTOWC"]="1" +S["GNULIB_MBSINIT"]="1" +S["GNULIB_WCTOB"]="1" +S["GNULIB_BTOWC"]="1" +S["GL_GENERATE_ALLOCA_H_FALSE"]="#" +S["GL_GENERATE_ALLOCA_H_TRUE"]="" +S["ALLOCA_H"]="alloca.h" +S["ALLOCA"]="" +S["LTALLOCA"]="" +S["USE_ACL"]="0" +S["LIB_ACL"]="" +S["GL_COND_LIBTOOL_FALSE"]="#" +S["GL_COND_LIBTOOL_TRUE"]="" +S["YFLAGS"]="" +S["YACC"]="bison -o y.tab.c" +S["LEX_OUTPUT_ROOT"]="lex.yy" +S["LEXLIB"]="-lfl" +S["LEX"]="flex" +S["LT_SYS_LIBRARY_PATH"]="" +S["OTOOL64"]="" +S["OTOOL"]="" +S["LIPO"]="" +S["NMEDIT"]="" +S["DSYMUTIL"]="" +S["MANIFEST_TOOL"]=":" +S["ac_ct_AR"]="ar" +S["DLLTOOL"]="false" +S["OBJDUMP"]="objdump" +S["LN_S"]="ln -s" +S["NM"]="/usr/bin/nm -B" +S["ac_ct_DUMPBIN"]="" +S["DUMPBIN"]="" +S["LD"]="/usr/bin/ld" +S["FGREP"]="/bin/grep -F" +S["SED"]="/bin/sed" +S["LIBTOOL"]="$(SHELL) $(top_builddir)/libtool" +S["RANLIB"]="ranlib" +S["ARFLAGS"]="cr" +S["AR"]="ar" +S["EGREP"]="/bin/grep -E" +S["GREP"]="/bin/grep" +S["CPP"]="gcc -E" +S["am__fastdepCC_FALSE"]="#" +S["am__fastdepCC_TRUE"]="" +S["CCDEPMODE"]="depmode=gcc3" +S["am__nodep"]="_no" +S["AMDEPBACKSLASH"]="\\" +S["AMDEP_FALSE"]="#" +S["AMDEP_TRUE"]="" +S["am__quote"]="" +S["am__include"]="include" +S["DEPDIR"]=".deps" +S["OBJEXT"]="o" +S["EXEEXT"]="" +S["ac_ct_CC"]="gcc" +S["CPPFLAGS"]="" +S["LDFLAGS"]="" +S["CFLAGS"]="-g -O2" +S["CC"]="gcc" +S["host_os"]="linux-gnu" +S["host_vendor"]="pc" +S["host_cpu"]="i686" +S["host"]="i686-pc-linux-gnu" +S["build_os"]="linux-gnu" +S["build_vendor"]="pc" +S["build_cpu"]="i686" +S["build"]="i686-pc-linux-gnu" +S["AM_BACKSLASH"]="\\" +S["AM_DEFAULT_VERBOSITY"]="1" +S["AM_DEFAULT_V"]="$(AM_DEFAULT_VERBOSITY)" +S["AM_V"]="$(V)" +S["am__untar"]="$${TAR-tar} xf -" +S["am__tar"]="$${TAR-tar} chof - \"$$tardir\"" +S["AMTAR"]="$${TAR-tar}" +S["am__leading_dot"]="." +S["SET_MAKE"]="" +S["AWK"]="gawk" +S["mkdir_p"]="$(MKDIR_P)" +S["MKDIR_P"]="/bin/mkdir -p" +S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" +S["STRIP"]="strip" +S["install_sh"]="${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh" +S["MAKEINFO"]="${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing makeinfo" +S["AUTOHEADER"]="${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoheader" +S["AUTOMAKE"]="${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing automake-1.15" +S["AUTOCONF"]="${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoconf" +S["ACLOCAL"]="${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing aclocal-1.15" +S["VERSION"]="1.8" +S["PACKAGE"]="recutils" +S["CYGPATH_W"]="echo" +S["am__isrc"]="" +S["INSTALL_DATA"]="${INSTALL} -m 644" +S["INSTALL_SCRIPT"]="${INSTALL}" +S["INSTALL_PROGRAM"]="${INSTALL}" +S["target_alias"]="" +S["host_alias"]="" +S["build_alias"]="" +S["LIBS"]="" +S["ECHO_T"]="" +S["ECHO_N"]="-n" +S["ECHO_C"]="" +S["DEFS"]="-DHAVE_CONFIG_H" +S["mandir"]="${datarootdir}/man" +S["localedir"]="${datarootdir}/locale" +S["libdir"]="${exec_prefix}/lib" +S["psdir"]="${docdir}" +S["pdfdir"]="${docdir}" +S["dvidir"]="${docdir}" +S["htmldir"]="${docdir}" +S["infodir"]="${datarootdir}/info" +S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" +S["oldincludedir"]="/usr/include" +S["includedir"]="${prefix}/include" +S["runstatedir"]="${localstatedir}/run" +S["localstatedir"]="${prefix}/var" +S["sharedstatedir"]="${prefix}/com" +S["sysconfdir"]="${prefix}/etc" +S["datadir"]="${datarootdir}" +S["datarootdir"]="${prefix}/share" +S["libexecdir"]="${exec_prefix}/libexec" +S["sbindir"]="${exec_prefix}/sbin" +S["bindir"]="${exec_prefix}/bin" +S["program_transform_name"]="s,x,x," +S["prefix"]="/usr/local" +S["exec_prefix"]="${prefix}" +S["PACKAGE_URL"]="http://www.gnu.org/software/recutils/" +S["PACKAGE_BUGREPORT"]="bug-recutils@gnu.org" +S["PACKAGE_STRING"]="GNU recutils 1.8" +S["PACKAGE_VERSION"]="1.8" +S["PACKAGE_TARNAME"]="recutils" +S["PACKAGE_NAME"]="GNU recutils" +S["PATH_SEPARATOR"]=":" +S["SHELL"]="/bin/sh" +_ACAWK +cat >>"$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +D["PACKAGE_NAME"]=" \"GNU recutils\"" +D["PACKAGE_TARNAME"]=" \"recutils\"" +D["PACKAGE_VERSION"]=" \"1.8\"" +D["PACKAGE_STRING"]=" \"GNU recutils 1.8\"" +D["PACKAGE_BUGREPORT"]=" \"bug-recutils@gnu.org\"" +D["PACKAGE_URL"]=" \"http://www.gnu.org/software/recutils/\"" +D["PACKAGE"]=" \"recutils\"" +D["VERSION"]=" \"1.8\"" +D["STDC_HEADERS"]=" 1" +D["HAVE_SYS_TYPES_H"]=" 1" +D["HAVE_SYS_STAT_H"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["HAVE_STRING_H"]=" 1" +D["HAVE_MEMORY_H"]=" 1" +D["HAVE_STRINGS_H"]=" 1" +D["HAVE_INTTYPES_H"]=" 1" +D["HAVE_STDINT_H"]=" 1" +D["HAVE_UNISTD_H"]=" 1" +D["__EXTENSIONS__"]=" 1" +D["_ALL_SOURCE"]=" 1" +D["_DARWIN_C_SOURCE"]=" 1" +D["_GNU_SOURCE"]=" 1" +D["_NETBSD_SOURCE"]=" 1" +D["_OPENBSD_SOURCE"]=" 1" +D["_POSIX_PTHREAD_SEMANTICS"]=" 1" +D["__STDC_WANT_IEC_60559_ATTRIBS_EXT__"]=" 1" +D["__STDC_WANT_IEC_60559_BFP_EXT__"]=" 1" +D["__STDC_WANT_IEC_60559_DFP_EXT__"]=" 1" +D["__STDC_WANT_IEC_60559_FUNCS_EXT__"]=" 1" +D["__STDC_WANT_IEC_60559_TYPES_EXT__"]=" 1" +D["__STDC_WANT_LIB_EXT2__"]=" 1" +D["__STDC_WANT_MATH_SPEC_FUNCS__"]=" 1" +D["_TANDEM_SOURCE"]=" 1" +D["_HPUX_ALT_XOPEN_SOCKET_API"]=" 1" +D["HAVE_FSEEKO"]=" 1" +D["_FILE_OFFSET_BITS"]=" 64" +D["_DARWIN_USE_64_BIT_INODE"]=" 1" +D["HAVE_DLFCN_H"]=" 1" +D["LT_OBJDIR"]=" \".libs/\"" +D["HAVE_FCHMOD"]=" 1" +D["HAVE_BTOWC"]=" 1" +D["HAVE_CANONICALIZE_FILE_NAME"]=" 1" +D["HAVE_GETCWD"]=" 1" +D["HAVE_READLINK"]=" 1" +D["HAVE_REALPATH"]=" 1" +D["HAVE_FACCESSAT"]=" 1" +D["HAVE_FCNTL"]=" 1" +D["HAVE_SYMLINK"]=" 1" +D["HAVE_FLOCK"]=" 1" +D["HAVE_SNPRINTF"]=" 1" +D["HAVE___FWRITING"]=" 1" +D["HAVE_GETDELIM"]=" 1" +D["HAVE_GETDTABLESIZE"]=" 1" +D["HAVE_GETPASS"]=" 1" +D["HAVE___FSETLOCKING"]=" 1" +D["HAVE_GETTIMEOFDAY"]=" 1" +D["HAVE_LSTAT"]=" 1" +D["HAVE_MBSINIT"]=" 1" +D["HAVE_MBRTOWC"]=" 1" +D["HAVE_MBRLEN"]=" 1" +D["HAVE_MPROTECT"]=" 1" +D["HAVE_MKOSTEMP"]=" 1" +D["HAVE_MKSTEMP"]=" 1" +D["HAVE_TZSET"]=" 1" +D["HAVE_NL_LANGINFO"]=" 1" +D["HAVE_ISBLANK"]=" 1" +D["HAVE_ISWCTYPE"]=" 1" +D["HAVE_LINK"]=" 1" +D["HAVE_SECURE_GETENV"]=" 1" +D["HAVE_GETUID"]=" 1" +D["HAVE_GETEUID"]=" 1" +D["HAVE_GETGID"]=" 1" +D["HAVE_GETEGID"]=" 1" +D["HAVE_SETENV"]=" 1" +D["HAVE_SIGACTION"]=" 1" +D["HAVE_SIGALTSTACK"]=" 1" +D["HAVE_SIGINTERRUPT"]=" 1" +D["HAVE_STRDUP"]=" 1" +D["HAVE_LOCALTIME_R"]=" 1" +D["HAVE_TIMEGM"]=" 1" +D["HAVE_WCRTOMB"]=" 1" +D["HAVE_WCTOB"]=" 1" +D["HAVE_ISWCNTRL"]=" 1" +D["HAVE_ALLOCA_H"]=" 1" +D["HAVE_ALLOCA"]=" 1" +D["restrict"]=" __restrict" +D["HAVE_LANGINFO_CODESET"]=" 1" +D["FUNC_REALPATH_WORKS"]=" 1" +D["HAVE_SYS_PARAM_H"]=" 1" +D["HAVE_SYS_SOCKET_H"]=" 1" +D["HAVE_UNISTD_H"]=" 1" +D["HAVE_STDIO_EXT_H"]=" 1" +D["HAVE_FEATURES_H"]=" 1" +D["HAVE_SYS_STAT_H"]=" 1" +D["HAVE_GETOPT_H"]=" 1" +D["HAVE_SYS_CDEFS_H"]=" 1" +D["HAVE_TERMIOS_H"]=" 1" +D["HAVE_SYS_TIME_H"]=" 1" +D["HAVE_LIMITS_H"]=" 1" +D["HAVE_WCHAR_H"]=" 1" +D["HAVE_STDINT_H"]=" 1" +D["HAVE_INTTYPES_H"]=" 1" +D["HAVE_LANGINFO_H"]=" 1" +D["HAVE_XLOCALE_H"]=" 1" +D["HAVE_MATH_H"]=" 1" +D["HAVE_SYS_MMAN_H"]=" 1" +D["HAVE_MALLOC_H"]=" 1" +D["HAVE_SPAWN_H"]=" 1" +D["HAVE_STRINGS_H"]=" 1" +D["HAVE_SYS_FILE_H"]=" 1" +D["HAVE_SYS_WAIT_H"]=" 1" +D["HAVE_WCTYPE_H"]=" 1" +D["HAVE_ENVIRON_DECL"]=" 1" +D["HAVE_DECL_STRERROR_R"]=" 1" +D["HAVE_STRERROR_R"]=" 1" +D["STRERROR_R_CHAR_P"]=" 1" +D["GETGROUPS_T"]=" gid_t" +D["HAVE_SIG_ATOMIC_T"]=" 1" +D["HAVE_WORKING_O_NOATIME"]=" 1" +D["HAVE_WORKING_O_NOFOLLOW"]=" 1" +D["HAVE_STDINT_H_WITH_UINTMAX"]=" 1" +D["HAVE_INTTYPES_H_WITH_UINTMAX"]=" 1" +D["CHECK_PRINTF_SAFE"]=" 1" +D["HAVE_UNSIGNED_LONG_LONG_INT"]=" 1" +D["HAVE_LONG_LONG_INT"]=" 1" +D["HAVE_WCHAR_T"]=" 1" +D["HAVE_WINT_T"]=" 1" +D["HAVE_INTMAX_T"]=" 1" +D["DBL_EXPBIT0_WORD"]=" 1" +D["DBL_EXPBIT0_BIT"]=" 20" +D["HAVE_SNPRINTF"]=" 1" +D["HAVE_STRNLEN"]=" 1" +D["HAVE_WCSLEN"]=" 1" +D["HAVE_WCSNLEN"]=" 1" +D["HAVE_MBRTOWC"]=" 1" +D["HAVE_WCRTOMB"]=" 1" +D["HAVE_DECL__SNPRINTF"]=" 0" +D["HAVE_SNPRINTF_RETVAL_C99"]=" 1" +D["HAVE_DECL_ALARM"]=" 1" +D["_USE_STD_STAT"]=" 1" +D["HAVE_DECL_FSEEKO"]=" 1" +D["HAVE_DECL_FTELLO"]=" 1" +D["HAVE_DECL_GETDELIM"]=" 1" +D["HAVE_DECL_GETDTABLESIZE"]=" 1" +D["HAVE_DECL_GETLINE"]=" 1" +D["HAVE_GETOPT_H"]=" 1" +D["HAVE_GETOPT_LONG_ONLY"]=" 1" +D["HAVE_DECL_FFLUSH_UNLOCKED"]=" 1" +D["HAVE_DECL_FLOCKFILE"]=" 1" +D["HAVE_DECL_FPUTS_UNLOCKED"]=" 1" +D["HAVE_DECL_FUNLOCKFILE"]=" 1" +D["HAVE_DECL_PUTC_UNLOCKED"]=" 1" +D["HAVE_INTTYPES_H"]=" 1" +D["FLT_EXPBIT0_WORD"]=" 0" +D["FLT_EXPBIT0_BIT"]=" 23" +D["USE_POSIX_THREADS"]=" 1" +D["USE_POSIX_THREADS_WEAK"]=" 1" +D["LSTAT_FOLLOWS_SLASHED_SYMLINK"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["MALLOC_0_IS_NONNULL"]=" 1" +D["HAVE_MBSTATE_T"]=" 1" +D["C_LOCALE_MAYBE_EILSEQ"]=" 1" +D["HAVE_MAP_ANONYMOUS"]=" 1" +D["HAVE_MINMAX_IN_SYS_PARAM_H"]=" 1" +D["TIME_T_IS_SIGNED"]=" 1" +D["HAVE_STRUCT_TM_TM_ZONE"]=" 1" +D["HAVE_TM_ZONE"]=" 1" +D["HAVE_TM_GMTOFF"]=" 1" +D["PROMOTED_MODE_T"]=" mode_t" +D["HAVE__BOOL"]=" 1" +D["HAVE_COMPOUND_LITERALS"]=" 1" +D["HAVE_POSIX_SPAWN"]=" 1" +D["REPLACE_VFPRINTF_POSIX"]=" 1" +D["USER_LABEL_PREFIX"]=" " +D["HAVE_SIGSET_T"]=" 1" +D["HAVE_DECL_SETENV"]=" 1" +D["HAVE_SEARCH_H"]=" 1" +D["HAVE_TSEARCH"]=" 1" +D["HAVE_STRCASESTR"]=" 1" +D["HAVE_DECL_STRDUP"]=" 1" +D["HAVE_DECL_CLEARERR_UNLOCKED"]=" 1" +D["HAVE_DECL_FEOF_UNLOCKED"]=" 1" +D["HAVE_DECL_FERROR_UNLOCKED"]=" 1" +D["HAVE_DECL_FGETS_UNLOCKED"]=" 1" +D["HAVE_DECL_FPUTC_UNLOCKED"]=" 1" +D["HAVE_DECL_FREAD_UNLOCKED"]=" 1" +D["HAVE_DECL_FWRITE_UNLOCKED"]=" 1" +D["HAVE_DECL_GETC_UNLOCKED"]=" 1" +D["HAVE_DECL_GETCHAR_UNLOCKED"]=" 1" +D["HAVE_DECL_PUTCHAR_UNLOCKED"]=" 1" +D["HAVE_DECL_UNSETENV"]=" 1" +D["USE_ACL"]=" 0" +D["HAVE_ALLOCA"]=" 1" +D["GNULIB_TEST_BTOWC"]=" 1" +D["HAVE___BUILTIN_EXPECT"]=" 1" +D["GNULIB_CANONICALIZE_LGPL"]=" 1" +D["GNULIB_TEST_CANONICALIZE_FILE_NAME"]=" 1" +D["GNULIB_TEST_REALPATH"]=" 1" +D["GNULIB_TEST_CHDIR"]=" 1" +D["HAVE_CLOCK_GETTIME"]=" 1" +D["HAVE_CLOCK_SETTIME"]=" 1" +D["GNULIB_TEST_CLOEXEC"]=" 1" +D["GNULIB_TEST_CLOSE"]=" 1" +D["GNULIB_CLOSE_STREAM"]=" 1" +D["HAVE_DUP2"]=" 1" +D["GNULIB_TEST_DUP2"]=" 1" +D["GNULIB_TEST_ENVIRON"]=" 1" +D["HAVE_EUIDACCESS"]=" 1" +D["GNULIB_TEST_EUIDACCESS"]=" 1" +D["GNULIB_TEST_FCNTL"]=" 1" +D["FLEXIBLE_ARRAY_MEMBER"]=" /**/" +D["GNULIB_TEST_FLOOR"]=" 1" +D["HAVE_DECL___FPENDING"]=" 1" +D["REPLACE_FPRINTF_POSIX"]=" 1" +D["GNULIB_TEST_FPRINTF_POSIX"]=" 1" +D["HAVE_FREXP_IN_LIBC"]=" 1" +D["GNULIB_TEST_FREXP"]=" 1" +D["HAVE_FREXPL_IN_LIBC"]=" 1" +D["GNULIB_TEST_FREXPL"]=" 1" +D["GNULIB_TEST_FSEEK"]=" 1" +D["GNULIB_TEST_FSEEKO"]=" 1" +D["GNULIB_TEST_FSTAT"]=" 1" +D["GNULIB_TEST_FTELL"]=" 1" +D["GNULIB_TEST_FTELLO"]=" 1" +D["GNULIB_TEST_GETDELIM"]=" 1" +D["GNULIB_TEST_GETDTABLESIZE"]=" 1" +D["HAVE_GETGROUPS"]=" 1" +D["GNULIB_TEST_GETGROUPS"]=" 1" +D["GNULIB_TEST_GETLINE"]=" 1" +D["GNULIB_TEST_GETPASS"]=" 1" +D["GNULIB_TEST_GETPASS"]=" 1" +D["HAVE_DECL_PROGRAM_INVOCATION_NAME"]=" 1" +D["HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME"]=" 1" +D["HAVE_DECL___ARGV"]=" 0" +D["GETTIMEOFDAY_TIMEZONE"]=" struct timezone" +D["GNULIB_TEST_GETTIMEOFDAY"]=" 1" +D["GNULIB_TEST_GROUP_MEMBER"]=" 1" +D["HAVE_ISNAND_IN_LIBC"]=" 1" +D["HAVE_ISNANF_IN_LIBC"]=" 1" +D["HAVE_ISNANL_IN_LIBC"]=" 1" +D["HAVE___INLINE"]=" 1" +D["GNULIB_TEST_LOCALECONV"]=" 1" +D["HAVE_PTHREAD_RWLOCK"]=" 1" +D["HAVE_PTHREAD_MUTEX_RECURSIVE"]=" 1" +D["GNULIB_LOCK"]=" 1" +D["GNULIB_TEST_LSEEK"]=" 1" +D["GNULIB_TEST_LSTAT"]=" 1" +D["HAVE_MALLOC_POSIX"]=" 1" +D["GNULIB_TEST_MALLOC_POSIX"]=" 1" +D["GNULIB_TEST_MBRLEN"]=" 1" +D["C_LOCALE_MAYBE_EILSEQ"]=" 1" +D["GNULIB_TEST_MBRTOWC"]=" 1" +D["GNULIB_TEST_MBSINIT"]=" 1" +D["GNULIB_TEST_MBTOWC"]=" 1" +D["GNULIB_TEST_MEMCHR"]=" 1" +D["GNULIB_MKOSTEMP"]=" 1" +D["GNULIB_TEST_MKOSTEMP"]=" 1" +D["GNULIB_TEST_MKSTEMP"]=" 1" +D["GNULIB_TEST_MKTIME"]=" 1" +D["NEED_MKTIME_INTERNAL"]=" 1" +D["GNULIB_MSVC_NOTHROW"]=" 1" +D["FUNC_NL_LANGINFO_YESEXPR_WORKS"]=" 1" +D["REPLACE_NL_LANGINFO"]=" 1" +D["GNULIB_TEST_NL_LANGINFO"]=" 1" +D["my_strftime"]=" nstrftime" +D["GNULIB_TEST_OPEN"]=" 1" +D["HAVE_STRUCT_TM_TM_ZONE"]=" 1" +D["HAVE_TM_ZONE"]=" 1" +D["GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN"]=" 1" +D["GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY"]=" 1" +D["GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT"]=" 1" +D["GNULIB_TEST_POSIX_SPAWNATTR_DESTROY"]=" 1" +D["GNULIB_TEST_POSIX_SPAWNATTR_INIT"]=" 1" +D["GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS"]=" 1" +D["GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK"]=" 1" +D["GNULIB_TEST_POSIX_SPAWNP"]=" 1" +D["HAVE_FREXP_IN_LIBC"]=" 1" +D["HAVE_LDEXP_IN_LIBC"]=" 1" +D["HAVE_FREXPL_IN_LIBC"]=" 1" +D["HAVE_LDEXPL_IN_LIBC"]=" 1" +D["REPLACE_PRINTF_POSIX"]=" 1" +D["GNULIB_TEST_PRINTF_POSIX"]=" 1" +D["HAVE_DECL_PROGRAM_INVOCATION_NAME"]=" 1" +D["HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME"]=" 1" +D["HAVE_RAISE"]=" 1" +D["GNULIB_TEST_RAISE"]=" 1" +D["HAVE_STRUCT_RANDOM_DATA"]=" 1" +D["HAVE_RANDOM_R"]=" 1" +D["GNULIB_TEST_RANDOM_R"]=" 1" +D["HAVE_RAWMEMCHR"]=" 1" +D["GNULIB_TEST_RAWMEMCHR"]=" 1" +D["GNULIB_TEST_READLINK"]=" 1" +D["HAVE_REALLOC_POSIX"]=" 1" +D["GNULIB_TEST_REALLOC_POSIX"]=" 1" +D["_REGEX_INCLUDE_LIMITS_H"]=" 1" +D["_REGEX_LARGE_OFFSETS"]=" 1" +D["re_syntax_options"]=" rpl_re_syntax_options" +D["re_set_syntax"]=" rpl_re_set_syntax" +D["re_compile_pattern"]=" rpl_re_compile_pattern" +D["re_compile_fastmap"]=" rpl_re_compile_fastmap" +D["re_search"]=" rpl_re_search" +D["re_search_2"]=" rpl_re_search_2" +D["re_match"]=" rpl_re_match" +D["re_match_2"]=" rpl_re_match_2" +D["re_set_registers"]=" rpl_re_set_registers" +D["re_comp"]=" rpl_re_comp" +D["re_exec"]=" rpl_re_exec" +D["regcomp"]=" rpl_regcomp" +D["regexec"]=" rpl_regexec" +D["regerror"]=" rpl_regerror" +D["regfree"]=" rpl_regfree" +D["HAVE_LIBINTL_H"]=" 1" +D["HAVE_DECL_ISBLANK"]=" 1" +D["GNULIB_TEST_RENAME"]=" 1" +D["GNULIB_TEST_RMDIR"]=" 1" +D["GNULIB_TEST_SECURE_GETENV"]=" 1" +D["HAVE_SELINUX_SELINUX_H"]=" 0" +D["GNULIB_TEST_SETENV"]=" 1" +D["HAVE_STRUCT_SIGACTION_SA_SIGACTION"]=" 1" +D["GNULIB_TEST_SIGACTION"]=" 1" +D["GNULIB_TEST_SIGNBIT"]=" 1" +D["GNULIB_TEST_SIGPROCMASK"]=" 1" +D["HAVE_STDINT_H"]=" 1" +D["HAVE_POSIX_SPAWNATTR_T"]=" 1" +D["HAVE_POSIX_SPAWN_FILE_ACTIONS_T"]=" 1" +D["GNULIB_TEST_STAT"]=" 1" +D["HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC"]=" 1" +D["TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC"]=" 1" +D["__USE_MINGW_ANSI_STDIO"]=" 1" +D["GNULIB_FSCANF"]=" 1" +D["GNULIB_SCANF"]=" 1" +D["HAVE_STRCASECMP"]=" 1" +D["HAVE_STRNCASECMP"]=" 1" +D["HAVE_DECL_STRNCASECMP"]=" 1" +D["HAVE_STRCASESTR"]=" 1" +D["GNULIB_TEST_STRCASESTR"]=" 1" +D["HAVE_STRCHRNUL"]=" 1" +D["GNULIB_TEST_STRCHRNUL"]=" 1" +D["GNULIB_TEST_STRDUP"]=" 1" +D["GNULIB_STRERROR"]=" 1" +D["GNULIB_TEST_STRERROR"]=" 1" +D["HAVE_STRSEP"]=" 1" +D["GNULIB_TEST_STRSEP"]=" 1" +D["HAVE_STRVERSCMP"]=" 1" +D["GNULIB_TEST_STRVERSCMP"]=" 1" +D["HAVE_DECL_LOCALTIME_R"]=" 1" +D["GNULIB_TEST_TIME_R"]=" 1" +D["GNULIB_TEST_TIME_RZ"]=" 1" +D["GNULIB_TEST_TIMEGM"]=" 1" +D["HAVE_RUN_TZSET_TEST"]=" 1" +D["GNULIB_TEST_TZSET"]=" 1" +D["USE_UNLOCKED_IO"]=" 1" +D["HAVE_UNSETENV"]=" 1" +D["GNULIB_TEST_UNSETENV"]=" 1" +D["HAVE_VASPRINTF"]=" 1" +D["GNULIB_TEST_VASPRINTF"]=" 1" +D["HAVE_VASPRINTF"]=" 1" +D["REPLACE_VFPRINTF_POSIX"]=" 1" +D["GNULIB_TEST_VFPRINTF_POSIX"]=" 1" +D["HAVE_WAITID"]=" 1" +D["GNULIB_TEST_WAITPID"]=" 1" +D["GNULIB_TEST_WCRTOMB"]=" 1" +D["HAVE_DECL_WCTOB"]=" 1" +D["GNULIB_TEST_WCTOB"]=" 1" +D["GNULIB_TEST_WCTOMB"]=" 1" +D["HAVE_TOWLOWER"]=" 1" +D["HAVE_STDINT_H"]=" 1" +D["HAVE_MALLOC_H"]=" 1" +D["HAVE_STRING_H"]=" 1" +D["HAVE_FSEEKO"]=" 1" +D["ENABLE_NLS"]=" 1" +D["HAVE_GETTEXT"]=" 1" +D["HAVE_DCGETTEXT"]=" 1" + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ { + line = $ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + ac_datarootdir_hack=' + s&@datadir@&${datarootdir}&g + s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g + s&@infodir@&${datarootdir}/info&g + s&@localedir@&${datarootdir}/locale&g + s&@mandir@&${datarootdir}/man&g + s&\${datarootdir}&${prefix}/share&g' ;; +esac +ac_sed_extra="/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +} + +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + :L) + # + # CONFIG_LINK + # + + if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then + : + else + # Prefer the file from the source tree if names are identical. + if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then + ac_source=$srcdir/$ac_source + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 +$as_echo "$as_me: linking $ac_source to $ac_file" >&6;} + + if test ! -r "$ac_source"; then + as_fn_error $? "$ac_source: file not found" "$LINENO" 5 + fi + rm -f "$ac_file" + + # Try a relative symlink, then a hard link, then a copy. + case $ac_source in + [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; + *) ac_rel_source=$ac_top_build_prefix$ac_source ;; + esac + ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || + ln "$ac_source" "$ac_file" 2>/dev/null || + cp -p "$ac_source" "$ac_file" || + as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 + fi + ;; + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +# The names of the tagged configurations supported by this script. +available_tags='' + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec=$shared_archive_member_spec + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name lister interface. +nm_interface=$lt_lt_cv_nm_interface + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and where our libraries should be installed. +lt_sysroot=$lt_sysroot + +# Command to truncate a binary pipe. +lt_truncate_bin=$lt_lt_cv_truncate_bin + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain=$ac_aux_dir/ltmain.sh + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; + "po-directories":C) + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + gt_tab=`printf '\t'` + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done ;; + + esac +done # for ac_tag + + +as_fn_exit 0 diff --git a/devspec.en_US/project/recutils/configure b/devspec.en_US/project/recutils/configure new file mode 100755 index 0000000..2be188a --- /dev/null +++ b/devspec.en_US/project/recutils/configure @@ -0,0 +1,52746 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for GNU recutils 1.8. +# +# Report bugs to <bug-recutils@gnu.org>. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: bug-recutils@gnu.org about your system, including any +$0: error possibly output before this message. Then install +$0: a modern shell, or manually run the script under such a +$0: shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 </dev/null +exec 6>&1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='GNU recutils' +PACKAGE_TARNAME='recutils' +PACKAGE_VERSION='1.8' +PACKAGE_STRING='GNU recutils 1.8' +PACKAGE_BUGREPORT='bug-recutils@gnu.org' +PACKAGE_URL='http://www.gnu.org/software/recutils/' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include <stdio.h> +#ifdef HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif +#ifdef STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +#else +# ifdef HAVE_STDLIB_H +# include <stdlib.h> +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include <memory.h> +# endif +# include <string.h> +#endif +#ifdef HAVE_STRINGS_H +# include <strings.h> +#endif +#ifdef HAVE_INTTYPES_H +# include <inttypes.h> +#endif +#ifdef HAVE_STDINT_H +# include <stdint.h> +#endif +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif" + +gl_use_threads_default= +ac_func_list= +ac_header_list= +gl_floor_required=plain +gl_getopt_required=POSIX +gt_needs= +ac_subst_vars='gltests_LTLIBOBJS +gltests_LIBOBJS +gl_LTLIBOBJS +gl_LIBOBJS +CONFIG_INCLUDE +am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +USE_COVERAGE_FALSE +USE_COVERAGE_TRUE +POSUB +INTLLIBS +LTLIBICONV +LIBICONV +INTL_MACOSX_LIBS +XGETTEXT_EXTRA_OPTIONS +MSGMERGE +XGETTEXT_015 +XGETTEXT +GMSGFMT_015 +MSGFMT_015 +GMSGFMT +MSGFMT +GETTEXT_MACRO_VERSION +USE_NLS +BUILD_A68_FALSE +BUILD_A68_TRUE +CA68 +BASH_BUILTINS_FALSE +BASH_BUILTINS_TRUE +BASH_HEADERS +UUID_TYPE_FALSE +UUID_TYPE_TRUE +REMOTE_DESCRIPTORS_FALSE +REMOTE_DESCRIPTORS_TRUE +COMPILE_MDB2REC_FALSE +COMPILE_MDB2REC_TRUE +MDBLIBS +MDB_DATETIME +GLIB_LIBS +GLIB_CFLAGS +crypt_support +CRYPT_FALSE +CRYPT_TRUE +LIBGCRYPT_PREFIX +LTLIBGCRYPT +LIBGCRYPT +HAVE_LIBGCRYPT +have_uuid +UUIDLIBS +CURLLIBS +CHECK_FALSE +CHECK_TRUE +CHECK_LIBS +CHECK_CFLAGS +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG +HELP2MAN +gltests_WITNESS +REPLACE_TOWLOWER +REPLACE_ISWCNTRL +HAVE_WCTYPE_H +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H +NEXT_WCTYPE_H +HAVE_ISWCNTRL +REPLACE_ISWBLANK +HAVE_WCTRANS_T +HAVE_WCTYPE_T +HAVE_ISWBLANK +GNULIB_TOWCTRANS +GNULIB_WCTRANS +GNULIB_ISWCTYPE +GNULIB_WCTYPE +GNULIB_ISWBLANK +HAVE_CRTDEFS_H +HAVE_WINT_T +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H +NEXT_WCHAR_H +HAVE_UNISTD_H +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H +NEXT_UNISTD_H +UNISTD_H_DEFINES_STRUCT_TIMESPEC +PTHREAD_H_DEFINES_STRUCT_TIMESPEC +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC +TIME_H_DEFINES_STRUCT_TIMESPEC +NEXT_AS_FIRST_DIRECTIVE_TIME_H +NEXT_TIME_H +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H +NEXT_SYS_WAIT_H +GNULIB_WAITPID +HAVE_SYS_FILE_H +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H +NEXT_SYS_FILE_H +HAVE_STRINGS_H +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H +NEXT_STRINGS_H +NEXT_AS_FIRST_DIRECTIVE_STRING_H +NEXT_STRING_H +HAVE_DECL_STRNCASECMP +HAVE_STRCASECMP +HAVE_FFS +GNULIB_FFS +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H +NEXT_STDLIB_H +NEXT_AS_FIRST_DIRECTIVE_STDIO_H +NEXT_STDIO_H +GL_GENERATE_STDARG_H_FALSE +GL_GENERATE_STDARG_H_TRUE +STDARG_H +NEXT_AS_FIRST_DIRECTIVE_STDARG_H +NEXT_STDARG_H +HAVE_SPAWN_H +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H +NEXT_SPAWN_H +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H +NEXT_SIGNAL_H +GL_GENERATE_SELINUX_CONTEXT_H_FALSE +GL_GENERATE_SELINUX_CONTEXT_H_TRUE +SELINUX_CONTEXT_H +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H +NEXT_SELINUX_SELINUX_H +LIB_SELINUX +GL_GENERATE_SCHED_H_FALSE +GL_GENERATE_SCHED_H_TRUE +SCHED_H +HAVE_STRUCT_SCHED_PARAM +HAVE_SCHED_H +NEXT_AS_FIRST_DIRECTIVE_SCHED_H +NEXT_SCHED_H +GLIBC21 +LTLIBREADLINE +LIBREADLINE +REPLACE_RAISE +REPLACE_PTHREAD_SIGMASK +HAVE_SIGHANDLER_T +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T +HAVE_STRUCT_SIGACTION_SA_SIGACTION +HAVE_SIGACTION +HAVE_SIGINFO_T +HAVE_SIGSET_T +HAVE_RAISE +HAVE_PTHREAD_SIGMASK +HAVE_POSIX_SIGNALBLOCKING +GNULIB_SIGACTION +GNULIB_SIGPROCMASK +GNULIB_SIGNAL_H_SIGPIPE +GNULIB_RAISE +GNULIB_PTHREAD_SIGMASK +ASM_SYMBOL_PREFIX +LIB_POSIX_SPAWN +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR +REPLACE_POSIX_SPAWN +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR +HAVE_POSIX_SPAWN_FILE_ACTIONS_T +HAVE_POSIX_SPAWNATTR_T +HAVE_POSIX_SPAWN +GNULIB_POSIX_SPAWNATTR_DESTROY +GNULIB_POSIX_SPAWNATTR_SETSIGMASK +GNULIB_POSIX_SPAWNATTR_GETSIGMASK +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM +GNULIB_POSIX_SPAWNATTR_SETPGROUP +GNULIB_POSIX_SPAWNATTR_GETPGROUP +GNULIB_POSIX_SPAWNATTR_SETFLAGS +GNULIB_POSIX_SPAWNATTR_GETFLAGS +GNULIB_POSIX_SPAWNATTR_INIT +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT +GNULIB_POSIX_SPAWNP +GNULIB_POSIX_SPAWN +HAVE__BOOL +GL_GENERATE_STDBOOL_H_FALSE +GL_GENERATE_STDBOOL_H_TRUE +STDBOOL_H +UNDEFINE_STRTOK_R +REPLACE_STRSIGNAL +REPLACE_STRERROR_R +REPLACE_STRERROR +REPLACE_STRTOK_R +REPLACE_STRCASESTR +REPLACE_STRSTR +REPLACE_STRNLEN +REPLACE_STRNDUP +REPLACE_STRNCAT +REPLACE_STRDUP +REPLACE_STRCHRNUL +REPLACE_STPNCPY +REPLACE_MEMMEM +REPLACE_MEMCHR +HAVE_STRVERSCMP +HAVE_DECL_STRSIGNAL +HAVE_DECL_STRERROR_R +HAVE_DECL_STRTOK_R +HAVE_STRCASESTR +HAVE_STRSEP +HAVE_STRPBRK +HAVE_DECL_STRNLEN +HAVE_DECL_STRNDUP +HAVE_DECL_STRDUP +HAVE_STRCHRNUL +HAVE_STPNCPY +HAVE_STPCPY +HAVE_RAWMEMCHR +HAVE_DECL_MEMRCHR +HAVE_MEMPCPY +HAVE_DECL_MEMMEM +HAVE_MEMCHR +HAVE_FFSLL +HAVE_FFSL +HAVE_EXPLICIT_BZERO +HAVE_MBSLEN +GNULIB_STRVERSCMP +GNULIB_STRSIGNAL +GNULIB_STRERROR_R +GNULIB_STRERROR +GNULIB_MBSTOK_R +GNULIB_MBSSEP +GNULIB_MBSSPN +GNULIB_MBSPBRK +GNULIB_MBSCSPN +GNULIB_MBSCASESTR +GNULIB_MBSPCASECMP +GNULIB_MBSNCASECMP +GNULIB_MBSCASECMP +GNULIB_MBSSTR +GNULIB_MBSRCHR +GNULIB_MBSCHR +GNULIB_MBSNLEN +GNULIB_MBSLEN +GNULIB_STRTOK_R +GNULIB_STRCASESTR +GNULIB_STRSTR +GNULIB_STRSEP +GNULIB_STRPBRK +GNULIB_STRNLEN +GNULIB_STRNDUP +GNULIB_STRNCAT +GNULIB_STRDUP +GNULIB_STRCHRNUL +GNULIB_STPNCPY +GNULIB_STPCPY +GNULIB_RAWMEMCHR +GNULIB_MEMRCHR +GNULIB_MEMPCPY +GNULIB_MEMMEM +GNULIB_MEMCHR +GNULIB_FFSLL +GNULIB_FFSL +GNULIB_EXPLICIT_BZERO +LOCALE_FR_UTF8 +LOCALE_ZH_CN +LOCALE_JA +NEXT_AS_FIRST_DIRECTIVE_MATH_H +NEXT_MATH_H +LTLIBMULTITHREAD +LIBMULTITHREAD +LTLIBTHREAD +LIBTHREAD +LIBPTH_PREFIX +LTLIBPTH +LIBPTH +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H +NEXT_LOCALE_H +HAVE_XLOCALE_H +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H +NEXT_STDDEF_H +GL_GENERATE_STDDEF_H_FALSE +GL_GENERATE_STDDEF_H_TRUE +STDDEF_H +HAVE_WCHAR_T +HAVE_MAX_ALIGN_T +REPLACE_NULL +REPLACE_STRUCT_LCONV +REPLACE_FREELOCALE +REPLACE_DUPLOCALE +REPLACE_NEWLOCALE +REPLACE_SETLOCALE +REPLACE_LOCALECONV +HAVE_FREELOCALE +HAVE_DUPLOCALE +HAVE_NEWLOCALE +GNULIB_LOCALENAME +GNULIB_DUPLOCALE +GNULIB_SETLOCALE +GNULIB_LOCALECONV +LOCALCHARSET_TESTS_ENVIRONMENT +HAVE_LANGINFO_YESEXPR +HAVE_LANGINFO_ERA +HAVE_LANGINFO_ALTMON +HAVE_LANGINFO_T_FMT_AMPM +HAVE_LANGINFO_CODESET +HAVE_LANGINFO_H +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H +NEXT_LANGINFO_H +REPLACE_NL_LANGINFO +HAVE_NL_LANGINFO +GNULIB_NL_LANGINFO +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H +NEXT_INTTYPES_H +UINT64_MAX_EQ_ULONG_MAX +UINT32_MAX_LT_UINTMAX_MAX +PRIPTR_PREFIX +PRI_MACROS_BROKEN +INT64_MAX_EQ_LONG_MAX +INT32_MAX_LT_INTMAX_MAX +REPLACE_STRTOUMAX +REPLACE_STRTOIMAX +HAVE_IMAXDIV_T +HAVE_DECL_STRTOUMAX +HAVE_DECL_STRTOIMAX +HAVE_DECL_IMAXDIV +HAVE_DECL_IMAXABS +GNULIB_STRTOUMAX +GNULIB_STRTOIMAX +GNULIB_IMAXDIV +GNULIB_IMAXABS +GL_GENERATE_STDINT_H_FALSE +GL_GENERATE_STDINT_H_TRUE +STDINT_H +HAVE_SYS_INTTYPES_H +HAVE_SYS_BITYPES_H +HAVE_C99_STDINT_H +WINT_T_SUFFIX +WCHAR_T_SUFFIX +SIG_ATOMIC_T_SUFFIX +SIZE_T_SUFFIX +PTRDIFF_T_SUFFIX +HAVE_SIGNED_WINT_T +HAVE_SIGNED_WCHAR_T +HAVE_SIGNED_SIG_ATOMIC_T +BITSIZEOF_WINT_T +BITSIZEOF_WCHAR_T +BITSIZEOF_SIG_ATOMIC_T +BITSIZEOF_SIZE_T +BITSIZEOF_PTRDIFF_T +HAVE_STDINT_H +NEXT_AS_FIRST_DIRECTIVE_STDINT_H +NEXT_STDINT_H +HAVE_SYS_TYPES_H +HAVE_INTTYPES_H +HAVE_WCHAR_H +HAVE_UNSIGNED_LONG_LONG_INT +HAVE_LONG_LONG_INT +GL_GENERATE_LIMITS_H_FALSE +GL_GENERATE_LIMITS_H_TRUE +LIMITS_H +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H +NEXT_LIMITS_H +REPLACE_LOCALTIME +REPLACE_GMTIME +REPLACE_TZSET +REPLACE_TIMEGM +REPLACE_STRFTIME +REPLACE_NANOSLEEP +REPLACE_MKTIME +REPLACE_LOCALTIME_R +REPLACE_CTIME +HAVE_TIMEZONE_T +HAVE_TZSET +HAVE_TIMEGM +HAVE_STRPTIME +HAVE_NANOSLEEP +HAVE_DECL_LOCALTIME_R +GNULIB_TZSET +GNULIB_TIME_RZ +GNULIB_TIME_R +GNULIB_TIMEGM +GNULIB_STRPTIME +GNULIB_STRFTIME +GNULIB_NANOSLEEP +GNULIB_LOCALTIME +GNULIB_MKTIME +GNULIB_CTIME +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H +NEXT_SYS_TIME_H +REPLACE_STRUCT_TIMEVAL +REPLACE_GETTIMEOFDAY +HAVE_SYS_TIME_H +HAVE_STRUCT_TIMEVAL +HAVE_GETTIMEOFDAY +GNULIB_GETTIMEOFDAY +LTLIBINTL +LIBINTL +GNULIB_GL_UNISTD_H_GETOPT +GETOPT_CDEFS_H +GETOPT_H +HAVE_SYS_CDEFS_H +HAVE_GETOPT_H +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H +NEXT_GETOPT_H +WINDOWS_64_BIT_ST_SIZE +WINDOWS_STAT_TIMESPEC +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H +NEXT_SYS_STAT_H +REPLACE_UTIMENSAT +REPLACE_STAT +REPLACE_MKNOD +REPLACE_MKFIFO +REPLACE_MKDIR +REPLACE_LSTAT +REPLACE_FUTIMENS +REPLACE_FSTATAT +REPLACE_FSTAT +HAVE_UTIMENSAT +HAVE_MKNODAT +HAVE_MKNOD +HAVE_MKFIFOAT +HAVE_MKFIFO +HAVE_MKDIRAT +HAVE_LSTAT +HAVE_LCHMOD +HAVE_FUTIMENS +HAVE_FSTATAT +HAVE_FCHMODAT +GNULIB_OVERRIDES_STRUCT_STAT +GNULIB_UTIMENSAT +GNULIB_STAT +GNULIB_MKNODAT +GNULIB_MKNOD +GNULIB_MKFIFOAT +GNULIB_MKFIFO +GNULIB_MKDIRAT +GNULIB_LSTAT +GNULIB_LCHMOD +GNULIB_FUTIMENS +GNULIB_FSTATAT +GNULIB_FSTAT +GNULIB_FCHMODAT +WINDOWS_STAT_INODES +WINDOWS_64_BIT_OFF_T +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H +NEXT_SYS_TYPES_H +REPLACE_VSPRINTF +REPLACE_VSNPRINTF +REPLACE_VPRINTF +REPLACE_VFPRINTF +REPLACE_VDPRINTF +REPLACE_VASPRINTF +REPLACE_TMPFILE +REPLACE_STDIO_WRITE_FUNCS +REPLACE_STDIO_READ_FUNCS +REPLACE_SPRINTF +REPLACE_SNPRINTF +REPLACE_RENAMEAT +REPLACE_RENAME +REPLACE_REMOVE +REPLACE_PRINTF +REPLACE_POPEN +REPLACE_PERROR +REPLACE_OBSTACK_PRINTF +REPLACE_GETLINE +REPLACE_GETDELIM +REPLACE_FTELLO +REPLACE_FTELL +REPLACE_FSEEKO +REPLACE_FSEEK +REPLACE_FREOPEN +REPLACE_FPURGE +REPLACE_FPRINTF +REPLACE_FOPEN +REPLACE_FFLUSH +REPLACE_FDOPEN +REPLACE_FCLOSE +REPLACE_DPRINTF +HAVE_VDPRINTF +HAVE_VASPRINTF +HAVE_RENAMEAT +HAVE_POPEN +HAVE_PCLOSE +HAVE_FTELLO +HAVE_FSEEKO +HAVE_DPRINTF +HAVE_DECL_VSNPRINTF +HAVE_DECL_SNPRINTF +HAVE_DECL_OBSTACK_PRINTF +HAVE_DECL_GETLINE +HAVE_DECL_GETDELIM +HAVE_DECL_FTELLO +HAVE_DECL_FSEEKO +HAVE_DECL_FPURGE +GNULIB_VSPRINTF_POSIX +GNULIB_VSNPRINTF +GNULIB_VPRINTF_POSIX +GNULIB_VPRINTF +GNULIB_VFPRINTF_POSIX +GNULIB_VFPRINTF +GNULIB_VDPRINTF +GNULIB_VSCANF +GNULIB_VFSCANF +GNULIB_VASPRINTF +GNULIB_TMPFILE +GNULIB_STDIO_H_SIGPIPE +GNULIB_STDIO_H_NONBLOCKING +GNULIB_SPRINTF_POSIX +GNULIB_SNPRINTF +GNULIB_SCANF +GNULIB_RENAMEAT +GNULIB_RENAME +GNULIB_REMOVE +GNULIB_PUTS +GNULIB_PUTCHAR +GNULIB_PUTC +GNULIB_PRINTF_POSIX +GNULIB_PRINTF +GNULIB_POPEN +GNULIB_PERROR +GNULIB_PCLOSE +GNULIB_OBSTACK_PRINTF_POSIX +GNULIB_OBSTACK_PRINTF +GNULIB_GETLINE +GNULIB_GETDELIM +GNULIB_GETCHAR +GNULIB_GETC +GNULIB_FWRITE +GNULIB_FTELLO +GNULIB_FTELL +GNULIB_FSEEKO +GNULIB_FSEEK +GNULIB_FSCANF +GNULIB_FREOPEN +GNULIB_FREAD +GNULIB_FPUTS +GNULIB_FPUTC +GNULIB_FPURGE +GNULIB_FPRINTF_POSIX +GNULIB_FPRINTF +GNULIB_FOPEN +GNULIB_FGETS +GNULIB_FGETC +GNULIB_FFLUSH +GNULIB_FDOPEN +GNULIB_FCLOSE +GNULIB_DPRINTF +HAVE_FEATURES_H +GNULIB_OVERRIDES_WINT_T +APPLE_UNIVERSAL_BUILD +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE +FLOOR_LIBM +REPLACE_TRUNCL +REPLACE_TRUNCF +REPLACE_TRUNC +REPLACE_TANHF +REPLACE_TANF +REPLACE_SQRTL +REPLACE_SQRTF +REPLACE_SINHF +REPLACE_SINF +REPLACE_SIGNBIT_USING_GCC +REPLACE_SIGNBIT +REPLACE_ROUNDL +REPLACE_ROUNDF +REPLACE_ROUND +REPLACE_REMAINDERL +REPLACE_REMAINDERF +REPLACE_REMAINDER +REPLACE_NAN +REPLACE_MODFL +REPLACE_MODFF +REPLACE_MODF +REPLACE_LOGBL +REPLACE_LOGBF +REPLACE_LOGB +REPLACE_LOG2L +REPLACE_LOG2F +REPLACE_LOG2 +REPLACE_LOG1PL +REPLACE_LOG1PF +REPLACE_LOG1P +REPLACE_LOG10L +REPLACE_LOG10F +REPLACE_LOG10 +REPLACE_LOGL +REPLACE_LOGF +REPLACE_LOG +REPLACE_LDEXPL +REPLACE_ISNAN +REPLACE_ISINF +REPLACE_ISFINITE +REPLACE_ILOGBL +REPLACE_ILOGBF +REPLACE_ILOGB +REPLACE_HYPOTL +REPLACE_HYPOTF +REPLACE_HYPOT +REPLACE_HUGE_VAL +REPLACE_FREXPL +REPLACE_FREXP +REPLACE_FREXPF +REPLACE_FMODL +REPLACE_FMODF +REPLACE_FMOD +REPLACE_FMAL +REPLACE_FMAF +REPLACE_FMA +REPLACE_FLOORL +REPLACE_FLOORF +REPLACE_FLOOR +REPLACE_FABSL +REPLACE_EXP2L +REPLACE_EXP2 +REPLACE_EXPM1F +REPLACE_EXPM1 +REPLACE_EXPF +REPLACE_COSHF +REPLACE_COSF +REPLACE_CEILL +REPLACE_CEILF +REPLACE_CEIL +REPLACE_CBRTL +REPLACE_CBRTF +REPLACE_ATAN2F +REPLACE_ATANF +REPLACE_ASINF +REPLACE_ACOSF +HAVE_DECL_TRUNCL +HAVE_DECL_TRUNCF +HAVE_DECL_TRUNC +HAVE_DECL_TANL +HAVE_DECL_SQRTL +HAVE_DECL_SINL +HAVE_DECL_ROUNDL +HAVE_DECL_ROUNDF +HAVE_DECL_ROUND +HAVE_DECL_RINTF +HAVE_DECL_REMAINDERL +HAVE_DECL_REMAINDER +HAVE_DECL_LOGB +HAVE_DECL_LOG2L +HAVE_DECL_LOG2F +HAVE_DECL_LOG2 +HAVE_DECL_LOG10L +HAVE_DECL_LOGL +HAVE_DECL_LDEXPL +HAVE_DECL_FREXPL +HAVE_DECL_FLOORL +HAVE_DECL_FLOORF +HAVE_DECL_EXPM1L +HAVE_DECL_EXP2L +HAVE_DECL_EXP2F +HAVE_DECL_EXP2 +HAVE_DECL_EXPL +HAVE_DECL_COSL +HAVE_DECL_COPYSIGNF +HAVE_DECL_CEILL +HAVE_DECL_CEILF +HAVE_DECL_CBRTL +HAVE_DECL_CBRTF +HAVE_DECL_ATANL +HAVE_DECL_ASINL +HAVE_DECL_ACOSL +HAVE_TANHF +HAVE_TANL +HAVE_TANF +HAVE_SQRTL +HAVE_SQRTF +HAVE_SINHF +HAVE_SINL +HAVE_SINF +HAVE_RINTL +HAVE_RINT +HAVE_REMAINDERF +HAVE_REMAINDER +HAVE_POWF +HAVE_MODFL +HAVE_MODFF +HAVE_LOGBL +HAVE_LOGBF +HAVE_LOG1PL +HAVE_LOG1PF +HAVE_LOG1P +HAVE_LOG10L +HAVE_LOG10F +HAVE_LOGL +HAVE_LOGF +HAVE_LDEXPF +HAVE_ISNANL +HAVE_ISNAND +HAVE_ISNANF +HAVE_ILOGBL +HAVE_ILOGBF +HAVE_ILOGB +HAVE_HYPOTL +HAVE_HYPOTF +HAVE_FREXPF +HAVE_FMODL +HAVE_FMODF +HAVE_FMAL +HAVE_FMAF +HAVE_FMA +HAVE_FABSL +HAVE_FABSF +HAVE_EXPM1F +HAVE_EXPM1 +HAVE_EXPL +HAVE_EXPF +HAVE_COSHF +HAVE_COSL +HAVE_COSF +HAVE_COPYSIGNL +HAVE_COPYSIGN +HAVE_CBRTL +HAVE_CBRTF +HAVE_CBRT +HAVE_ATAN2F +HAVE_ATANL +HAVE_ATANF +HAVE_ASINL +HAVE_ASINF +HAVE_ACOSL +HAVE_ACOSF +GNULIB_TRUNCL +GNULIB_TRUNCF +GNULIB_TRUNC +GNULIB_TANHF +GNULIB_TANL +GNULIB_TANF +GNULIB_SQRTL +GNULIB_SQRTF +GNULIB_SINHF +GNULIB_SINL +GNULIB_SINF +GNULIB_SIGNBIT +GNULIB_ROUNDL +GNULIB_ROUNDF +GNULIB_ROUND +GNULIB_RINTL +GNULIB_RINTF +GNULIB_RINT +GNULIB_REMAINDERL +GNULIB_REMAINDERF +GNULIB_REMAINDER +GNULIB_POWF +GNULIB_MODFL +GNULIB_MODFF +GNULIB_MODF +GNULIB_LOGBL +GNULIB_LOGBF +GNULIB_LOGB +GNULIB_LOG2L +GNULIB_LOG2F +GNULIB_LOG2 +GNULIB_LOG1PL +GNULIB_LOG1PF +GNULIB_LOG1P +GNULIB_LOG10L +GNULIB_LOG10F +GNULIB_LOG10 +GNULIB_LOGL +GNULIB_LOGF +GNULIB_LOG +GNULIB_LDEXPL +GNULIB_LDEXPF +GNULIB_ISNANL +GNULIB_ISNAND +GNULIB_ISNANF +GNULIB_ISNAN +GNULIB_ISINF +GNULIB_ISFINITE +GNULIB_ILOGBL +GNULIB_ILOGBF +GNULIB_ILOGB +GNULIB_HYPOTL +GNULIB_HYPOTF +GNULIB_HYPOT +GNULIB_FREXPL +GNULIB_FREXP +GNULIB_FREXPF +GNULIB_FMODL +GNULIB_FMODF +GNULIB_FMOD +GNULIB_FMAL +GNULIB_FMAF +GNULIB_FMA +GNULIB_FLOORL +GNULIB_FLOORF +GNULIB_FLOOR +GNULIB_FABSL +GNULIB_FABSF +GNULIB_EXPM1L +GNULIB_EXPM1F +GNULIB_EXPM1 +GNULIB_EXP2L +GNULIB_EXP2F +GNULIB_EXP2 +GNULIB_EXPL +GNULIB_EXPF +GNULIB_COSHF +GNULIB_COSL +GNULIB_COSF +GNULIB_COPYSIGNL +GNULIB_COPYSIGNF +GNULIB_COPYSIGN +GNULIB_CEILL +GNULIB_CEILF +GNULIB_CEIL +GNULIB_CBRTL +GNULIB_CBRTF +GNULIB_CBRT +GNULIB_ATAN2F +GNULIB_ATANL +GNULIB_ATANF +GNULIB_ASINL +GNULIB_ASINF +GNULIB_ACOSL +GNULIB_ACOSF +HAVE_FLOCK +GNULIB_FLOCK +REPLACE_ITOLD +GL_GENERATE_FLOAT_H_FALSE +GL_GENERATE_FLOAT_H_TRUE +FLOAT_H +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H +NEXT_FLOAT_H +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H +NEXT_FCNTL_H +REPLACE_OPENAT +REPLACE_OPEN +REPLACE_FCNTL +HAVE_OPENAT +HAVE_FCNTL +GNULIB_OPENAT +GNULIB_OPEN +GNULIB_NONBLOCKING +GNULIB_FCNTL +LIB_EACCESS +EOVERFLOW_VALUE +EOVERFLOW_HIDDEN +ENOLINK_VALUE +ENOLINK_HIDDEN +EMULTIHOP_VALUE +EMULTIHOP_HIDDEN +GL_GENERATE_ERRNO_H_FALSE +GL_GENERATE_ERRNO_H_TRUE +ERRNO_H +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H +NEXT_ERRNO_H +PRAGMA_COLUMNS +PRAGMA_SYSTEM_HEADER +INCLUDE_NEXT_AS_FIRST_DIRECTIVE +INCLUDE_NEXT +HAVE_WINSOCK2_H +HAVE_MSVC_INVALID_PARAMETER_HANDLER +LIB_CLOCK_GETTIME +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS +UNISTD_H_HAVE_WINSOCK2_H +REPLACE_WRITE +REPLACE_USLEEP +REPLACE_UNLINKAT +REPLACE_UNLINK +REPLACE_TTYNAME_R +REPLACE_TRUNCATE +REPLACE_SYMLINKAT +REPLACE_SYMLINK +REPLACE_SLEEP +REPLACE_RMDIR +REPLACE_READLINKAT +REPLACE_READLINK +REPLACE_READ +REPLACE_PWRITE +REPLACE_PREAD +REPLACE_LSEEK +REPLACE_LINKAT +REPLACE_LINK +REPLACE_LCHOWN +REPLACE_ISATTY +REPLACE_GETPASS +REPLACE_GETPAGESIZE +REPLACE_GETGROUPS +REPLACE_GETLOGIN_R +REPLACE_GETDTABLESIZE +REPLACE_GETDOMAINNAME +REPLACE_GETCWD +REPLACE_FTRUNCATE +REPLACE_FCHOWNAT +REPLACE_FACCESSAT +REPLACE_DUP2 +REPLACE_DUP +REPLACE_CLOSE +REPLACE_CHOWN +HAVE_SYS_PARAM_H +HAVE_OS_H +HAVE_DECL_TTYNAME_R +HAVE_DECL_TRUNCATE +HAVE_DECL_SETHOSTNAME +HAVE_DECL_GETUSERSHELL +HAVE_DECL_GETPAGESIZE +HAVE_DECL_GETLOGIN_R +HAVE_DECL_GETLOGIN +HAVE_DECL_GETDOMAINNAME +HAVE_DECL_FDATASYNC +HAVE_DECL_FCHDIR +HAVE_DECL_ENVIRON +HAVE_USLEEP +HAVE_UNLINKAT +HAVE_SYMLINKAT +HAVE_SYMLINK +HAVE_SLEEP +HAVE_SETHOSTNAME +HAVE_READLINKAT +HAVE_READLINK +HAVE_PWRITE +HAVE_PREAD +HAVE_PIPE2 +HAVE_PIPE +HAVE_LINKAT +HAVE_LINK +HAVE_LCHOWN +HAVE_GROUP_MEMBER +HAVE_GETPASS +HAVE_GETPAGESIZE +HAVE_GETLOGIN +HAVE_GETHOSTNAME +HAVE_GETGROUPS +HAVE_GETDTABLESIZE +HAVE_FTRUNCATE +HAVE_FSYNC +HAVE_FDATASYNC +HAVE_FCHOWNAT +HAVE_FCHDIR +HAVE_FACCESSAT +HAVE_EUIDACCESS +HAVE_DUP3 +HAVE_DUP2 +HAVE_CHOWN +GNULIB_WRITE +GNULIB_USLEEP +GNULIB_UNLINKAT +GNULIB_UNLINK +GNULIB_UNISTD_H_SIGPIPE +GNULIB_UNISTD_H_NONBLOCKING +GNULIB_TTYNAME_R +GNULIB_TRUNCATE +GNULIB_SYMLINKAT +GNULIB_SYMLINK +GNULIB_SLEEP +GNULIB_SETHOSTNAME +GNULIB_RMDIR +GNULIB_READLINKAT +GNULIB_READLINK +GNULIB_READ +GNULIB_PWRITE +GNULIB_PREAD +GNULIB_PIPE2 +GNULIB_PIPE +GNULIB_LSEEK +GNULIB_LINKAT +GNULIB_LINK +GNULIB_LCHOWN +GNULIB_ISATTY +GNULIB_GROUP_MEMBER +GNULIB_GETUSERSHELL +GNULIB_GETPASS +GNULIB_GETPAGESIZE +GNULIB_GETLOGIN_R +GNULIB_GETLOGIN +GNULIB_GETHOSTNAME +GNULIB_GETGROUPS +GNULIB_GETDTABLESIZE +GNULIB_GETDOMAINNAME +GNULIB_GETCWD +GNULIB_FTRUNCATE +GNULIB_FSYNC +GNULIB_FDATASYNC +GNULIB_FCHOWNAT +GNULIB_FCHDIR +GNULIB_FACCESSAT +GNULIB_EUIDACCESS +GNULIB_ENVIRON +GNULIB_DUP3 +GNULIB_DUP2 +GNULIB_DUP +GNULIB_CLOSE +GNULIB_CHOWN +GNULIB_CHDIR +REPLACE_WCTOMB +REPLACE_UNSETENV +REPLACE_STRTOD +REPLACE_SETENV +REPLACE_REALPATH +REPLACE_REALLOC +REPLACE_RANDOM_R +REPLACE_QSORT_R +REPLACE_PUTENV +REPLACE_PTSNAME_R +REPLACE_PTSNAME +REPLACE_MKSTEMP +REPLACE_MBTOWC +REPLACE_MALLOC +REPLACE_CANONICALIZE_FILE_NAME +REPLACE_CALLOC +HAVE_DECL_UNSETENV +HAVE_UNLOCKPT +HAVE_SYS_LOADAVG_H +HAVE_STRUCT_RANDOM_DATA +HAVE_STRTOULL +HAVE_STRTOLL +HAVE_STRTOD +HAVE_DECL_SETSTATE +HAVE_DECL_SETENV +HAVE_SETENV +HAVE_SECURE_GETENV +HAVE_RPMATCH +HAVE_REALPATH +HAVE_REALLOCARRAY +HAVE_RANDOM_R +HAVE_RANDOM_H +HAVE_RANDOM +HAVE_QSORT_R +HAVE_PTSNAME_R +HAVE_PTSNAME +HAVE_POSIX_OPENPT +HAVE_MKSTEMPS +HAVE_MKSTEMP +HAVE_MKOSTEMPS +HAVE_MKOSTEMP +HAVE_MKDTEMP +HAVE_DECL_INITSTATE +HAVE_GRANTPT +HAVE_GETSUBOPT +HAVE_DECL_GETLOADAVG +HAVE_CANONICALIZE_FILE_NAME +HAVE_ATOLL +HAVE__EXIT +GNULIB_WCTOMB +GNULIB_UNSETENV +GNULIB_UNLOCKPT +GNULIB_SYSTEM_POSIX +GNULIB_STRTOULL +GNULIB_STRTOLL +GNULIB_STRTOD +GNULIB_SETENV +GNULIB_SECURE_GETENV +GNULIB_RPMATCH +GNULIB_REALPATH +GNULIB_REALLOC_POSIX +GNULIB_REALLOCARRAY +GNULIB_RANDOM_R +GNULIB_RANDOM +GNULIB_QSORT_R +GNULIB_PUTENV +GNULIB_PTSNAME_R +GNULIB_PTSNAME +GNULIB_POSIX_OPENPT +GNULIB_MKSTEMPS +GNULIB_MKSTEMP +GNULIB_MKOSTEMPS +GNULIB_MKOSTEMP +GNULIB_MKDTEMP +GNULIB_MBTOWC +GNULIB_MALLOC_POSIX +GNULIB_GRANTPT +GNULIB_GETSUBOPT +GNULIB_GETLOADAVG +GNULIB_CANONICALIZE_FILE_NAME +GNULIB_CALLOC_POSIX +GNULIB_ATOLL +GNULIB__EXIT +LOCALE_FR +REPLACE_WCSFTIME +REPLACE_WCSWIDTH +REPLACE_WCWIDTH +REPLACE_WCSNRTOMBS +REPLACE_WCSRTOMBS +REPLACE_WCRTOMB +REPLACE_MBSNRTOWCS +REPLACE_MBSRTOWCS +REPLACE_MBRLEN +REPLACE_MBRTOWC +REPLACE_MBSINIT +REPLACE_WCTOB +REPLACE_BTOWC +REPLACE_MBSTATE_T +HAVE_DECL_WCWIDTH +HAVE_DECL_WCTOB +HAVE_WCSFTIME +HAVE_WCSWIDTH +HAVE_WCSTOK +HAVE_WCSSTR +HAVE_WCSPBRK +HAVE_WCSSPN +HAVE_WCSCSPN +HAVE_WCSRCHR +HAVE_WCSCHR +HAVE_WCSDUP +HAVE_WCSXFRM +HAVE_WCSCOLL +HAVE_WCSNCASECMP +HAVE_WCSCASECMP +HAVE_WCSNCMP +HAVE_WCSCMP +HAVE_WCSNCAT +HAVE_WCSCAT +HAVE_WCPNCPY +HAVE_WCSNCPY +HAVE_WCPCPY +HAVE_WCSCPY +HAVE_WCSNLEN +HAVE_WCSLEN +HAVE_WMEMSET +HAVE_WMEMMOVE +HAVE_WMEMCPY +HAVE_WMEMCMP +HAVE_WMEMCHR +HAVE_WCSNRTOMBS +HAVE_WCSRTOMBS +HAVE_WCRTOMB +HAVE_MBSNRTOWCS +HAVE_MBSRTOWCS +HAVE_MBRLEN +HAVE_MBRTOWC +HAVE_MBSINIT +HAVE_BTOWC +GNULIB_WCSFTIME +GNULIB_WCSWIDTH +GNULIB_WCSTOK +GNULIB_WCSSTR +GNULIB_WCSPBRK +GNULIB_WCSSPN +GNULIB_WCSCSPN +GNULIB_WCSRCHR +GNULIB_WCSCHR +GNULIB_WCSDUP +GNULIB_WCSXFRM +GNULIB_WCSCOLL +GNULIB_WCSNCASECMP +GNULIB_WCSCASECMP +GNULIB_WCSNCMP +GNULIB_WCSCMP +GNULIB_WCSNCAT +GNULIB_WCSCAT +GNULIB_WCPNCPY +GNULIB_WCSNCPY +GNULIB_WCPCPY +GNULIB_WCSCPY +GNULIB_WCSNLEN +GNULIB_WCSLEN +GNULIB_WMEMSET +GNULIB_WMEMMOVE +GNULIB_WMEMCPY +GNULIB_WMEMCMP +GNULIB_WMEMCHR +GNULIB_WCWIDTH +GNULIB_WCSNRTOMBS +GNULIB_WCSRTOMBS +GNULIB_WCRTOMB +GNULIB_MBSNRTOWCS +GNULIB_MBSRTOWCS +GNULIB_MBRLEN +GNULIB_MBRTOWC +GNULIB_MBSINIT +GNULIB_WCTOB +GNULIB_BTOWC +GL_GENERATE_ALLOCA_H_FALSE +GL_GENERATE_ALLOCA_H_TRUE +ALLOCA_H +ALLOCA +LTALLOCA +USE_ACL +LIB_ACL +GL_COND_LIBTOOL_FALSE +GL_COND_LIBTOOL_TRUE +YFLAGS +YACC +LEX_OUTPUT_ROOT +LEXLIB +LEX +LT_SYS_LIBRARY_PATH +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +ac_ct_AR +DLLTOOL +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +SED +LIBTOOL +RANLIB +ARFLAGS +AR +EGREP +GREP +CPP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +runstatedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_dependency_tracking +enable_largefile +enable_threads +enable_shared +enable_static +with_pic +enable_fast_install +with_aix_soname +with_gnu_ld +with_sysroot +enable_libtool_lock +enable_acl +enable_rpath +with_libpth_prefix +with_libreadline_prefix +with_included_regex +with_selinux +with_packager +with_packager_version +with_packager_bug_reports +enable_encryption +with_libgcrypt_prefix +with_bash_headers +enable_bash_builtins +enable_algol68 +enable_nls +with_libiconv_prefix +with_libintl_prefix +enable_coverage +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +LT_SYS_LIBRARY_PATH +LEX +LEXLIB +LEX_OUTPUT_ROOT +YACC +YFLAGS +PKG_CONFIG +PKG_CONFIG_PATH +PKG_CONFIG_LIBDIR +CHECK_CFLAGS +CHECK_LIBS +GLIB_CFLAGS +GLIB_LIBS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir runstatedir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures GNU recutils 1.8 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/recutils] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of GNU recutils 1.8:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --disable-largefile omit support for large files + --enable-threads={posix|solaris|pth|windows} + specify multithreading API + --disable-threads build without multithread safety + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-acl do not support ACLs + --disable-rpath do not hardcode runtime library paths + --enable-encryption Compile recutils with encryption support (default is + YES) + --enable-bash-builtins Build the recutils bash builtins (default is YES) + --enable-algol68 Build the bindings for Algol 68 (default is NO) + --disable-nls do not use Native Language Support + --enable-coverage Compile the library with code coverage support + (default is NO) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-aix-soname=aix|svr4|both + shared library versioning (aka "SONAME") variant to + provide on AIX, [default=aix]. + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot[=DIR] Search for dependent libraries within DIR (or the + compiler's sysroot if not specified). + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-libpth-prefix[=DIR] search for libpth in DIR/include and DIR/lib + --without-libpth-prefix don't search for libpth in includedir and libdir + --with-libreadline-prefix[=DIR] search for libreadline in DIR/include and DIR/lib + --without-libreadline-prefix don't search for libreadline in includedir and libdir + --without-included-regex + don't compile regex; this is the default on systems + with recent-enough versions of the GNU C Library + (use with caution on other systems). + --without-selinux do not use SELinux, even on systems with SELinux + --with-packager String identifying the packager of this software + --with-packager-version Packager-specific version information + --with-packager-bug-reports + Packager info for bug reports (URL/e-mail/...) + --with-libgcrypt-prefix[=DIR] search for libgcrypt in DIR/include and DIR/lib + --without-libgcrypt-prefix don't search for libgcrypt in includedir and libdir + --with-bash-headers location of the bash header files (default is + /usr/include/bash) + --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib + --without-libiconv-prefix don't search for libiconv in includedir and libdir + --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib + --without-libintl-prefix don't search for libintl in includedir and libdir + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a + nonstandard directory <lib dir> + LIBS libraries to pass to the linker, e.g. -l<library> + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if + you have headers in a nonstandard directory <include dir> + CPP C preprocessor + LT_SYS_LIBRARY_PATH + User-defined run-time library search path. + LEX The flex implementation to use. + LEXLIB Options for linking with the flex runtime library. + LEX_OUTPUT_ROOT + Base of the file name that the lexer generates. + YACC The "Yet Another C Compiler" implementation to use. Defaults to + 'bison -o y.tab.c'. Values other than 'bison -o y.tab.c' will + most likely break on most systems. + YFLAGS YFLAGS contains the list arguments that will be passed by + default to Bison. This script will default YFLAGS to the empty + string to avoid a default value of '-d' given by some make + applications. + PKG_CONFIG path to pkg-config utility + PKG_CONFIG_PATH + directories to add to pkg-config's search path + PKG_CONFIG_LIBDIR + path overriding pkg-config's built-in search path + CHECK_CFLAGS + C compiler flags for CHECK, overriding pkg-config + CHECK_LIBS linker flags for CHECK, overriding pkg-config + GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config + GLIB_LIBS linker flags for GLIB, overriding pkg-config + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to <bug-recutils@gnu.org>. +GNU recutils home page: <http://www.gnu.org/software/recutils/>. +General help using GNU software: <http://www.gnu.org/gethelp/>. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +GNU recutils configure 1.8 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ----------------------------------- ## +## Report this to bug-recutils@gnu.org ## +## ----------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case <limits.h> declares $2. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + <limits.h> exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include <stdio.h> +#include <stdlib.h> +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 <conftest.val; ac_retval=0 +else + ac_retval=1 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f conftest.val + + fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_compute_int + +# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES +# --------------------------------------------- +# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR +# accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + as_decl_name=`echo $2|sed 's/ *(.*//'` + as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +$as_echo_n "checking whether $as_decl_name is declared... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $as_decl_name +#ifdef __cplusplus + (void) $as_decl_use; +#else + (void) $as_decl_name; +#endif +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_decl + +# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES +# ---------------------------------------------------- +# Tries to find if the field MEMBER exists in type AGGR, after including +# INCLUDES, setting cache variable VAR accordingly. +ac_fn_c_check_member () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +$as_echo_n "checking for $2.$3... " >&6; } +if eval \${$4+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (sizeof ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + eval "$4=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$4 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_member +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by GNU recutils $as_me 1.8, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +as_fn_append ac_func_list " fchmod" +as_fn_append ac_func_list " btowc" +as_fn_append ac_func_list " canonicalize_file_name" +as_fn_append ac_func_list " getcwd" +as_fn_append ac_func_list " readlink" +as_fn_append ac_func_list " realpath" +as_fn_append ac_header_list " sys/param.h" +as_fn_append ac_func_list " _set_invalid_parameter_handler" +as_fn_append ac_header_list " sys/socket.h" +as_fn_append ac_header_list " unistd.h" +as_fn_append ac_func_list " faccessat" +as_fn_append ac_func_list " fcntl" +as_fn_append ac_func_list " symlink" +as_fn_append ac_func_list " flock" +as_fn_append ac_header_list " stdio_ext.h" +as_fn_append ac_func_list " vasnprintf" +as_fn_append ac_header_list " features.h" +as_fn_append ac_func_list " snprintf" +as_fn_append ac_func_list " __fseterr" +as_fn_append ac_header_list " sys/stat.h" +as_fn_append ac_func_list " __fwriting" +as_fn_append ac_func_list " getdelim" +as_fn_append ac_func_list " getdtablesize" +gl_getopt_required=GNU +as_fn_append ac_header_list " getopt.h" +as_fn_append ac_header_list " sys/cdefs.h" +as_fn_append ac_func_list " getpass" +as_fn_append ac_header_list " termios.h" +as_fn_append ac_func_list " __fsetlocking" +as_fn_append ac_func_list " getprogname" +as_fn_append ac_func_list " getexecname" +as_fn_append ac_func_list " gettimeofday" +as_fn_append ac_header_list " sys/time.h" +as_fn_append ac_header_list " limits.h" +as_fn_append ac_header_list " wchar.h" +as_fn_append ac_header_list " stdint.h" +as_fn_append ac_header_list " inttypes.h" +as_fn_append ac_header_list " langinfo.h" +as_fn_append ac_header_list " xlocale.h" +as_fn_append ac_func_list " lstat" +as_fn_append ac_header_list " math.h" +as_fn_append ac_func_list " mbsinit" +as_fn_append ac_func_list " mbrtowc" +as_fn_append ac_func_list " mbrlen" +as_fn_append ac_header_list " sys/mman.h" +as_fn_append ac_func_list " mprotect" +as_fn_append ac_func_list " mkostemp" +as_fn_append ac_func_list " mkstemp" +as_fn_append ac_func_list " tzset" +as_fn_append ac_func_list " nl_langinfo" +gl_printf_safe=yes +as_fn_append ac_header_list " malloc.h" +as_fn_append ac_func_list " isblank" +as_fn_append ac_func_list " iswctype" +as_fn_append ac_func_list " link" +as_fn_append ac_func_list " secure_getenv" +as_fn_append ac_func_list " getuid" +as_fn_append ac_func_list " geteuid" +as_fn_append ac_func_list " getgid" +as_fn_append ac_func_list " getegid" +as_fn_append ac_header_list " selinux/selinux.h" +as_fn_append ac_func_list " setenv" +as_fn_append ac_func_list " sigaction" +as_fn_append ac_func_list " sigaltstack" +as_fn_append ac_func_list " siginterrupt" +as_fn_append ac_header_list " spawn.h" +as_fn_append ac_func_list " strdup" +as_fn_append ac_header_list " strings.h" +as_fn_append ac_header_list " sys/file.h" +as_fn_append ac_header_list " sys/wait.h" +as_fn_append ac_func_list " localtime_r" +as_fn_append ac_func_list " timegm" +as_fn_append ac_header_list " crtdefs.h" +as_fn_append ac_func_list " wcrtomb" +as_fn_append ac_func_list " wctob" +as_fn_append ac_func_list " iswcntrl" +as_fn_append ac_header_list " wctype.h" +gt_needs="$gt_needs " +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_aux_dir= +for ac_dir in build-aux "$srcdir"/build-aux; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +am__api_version='1.15' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='recutils' + VERSION='1.8' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> +# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: <http://www.gnu.org/software/coreutils/>. + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + +ac_config_headers="$ac_config_headers src/config.h" + + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + + + + + if test -z "$AB_PACKAGE"; then + AB_PACKAGE=${PACKAGE_NAME:-$PACKAGE} + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild project... $AB_PACKAGE" >&5 +$as_echo "$as_me: autobuild project... $AB_PACKAGE" >&6;} + + if test -z "$AB_VERSION"; then + AB_VERSION=${PACKAGE_VERSION:-$VERSION} + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild revision... $AB_VERSION" >&5 +$as_echo "$as_me: autobuild revision... $AB_VERSION" >&6;} + + hostname=`hostname` + if test "$hostname"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild hostname... $hostname" >&5 +$as_echo "$as_me: autobuild hostname... $hostname" >&6;} + fi + + + + date=`TZ=UTC0 date +%Y%m%dT%H%M%SZ` + if test "$?" != 0; then + date=`date` + fi + if test "$date"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild timestamp... $date" >&5 +$as_echo "$as_me: autobuild timestamp... $date" >&6;} + fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ctype.h> +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" +if test "x$ac_cv_header_minix_config_h" = xyes; then : + MINIX=yes +else + MINIX= +fi + + + if test "$MINIX" = yes; then + +$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h + + +$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h + + +$as_echo "#define _MINIX 1" >>confdefs.h + + +$as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if ${ac_cv_safe_to_define___extensions__+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_safe_to_define___extensions__=yes +else + ac_cv_safe_to_define___extensions__=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h + + $as_echo "#define _ALL_SOURCE 1" >>confdefs.h + + $as_echo "#define _DARWIN_C_SOURCE 1" >>confdefs.h + + $as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + $as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h + + $as_echo "#define _OPENBSD_SOURCE 1" >>confdefs.h + + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + $as_echo "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h + + $as_echo "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h + + $as_echo "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h + + $as_echo "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h + + $as_echo "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h + + $as_echo "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h + + $as_echo "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h + + $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 +$as_echo_n "checking whether _XOPEN_SOURCE should be defined... " >&6; } +if ${ac_cv_should_define__xopen_source+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_should_define__xopen_source=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <wchar.h> + mbstate_t x; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #define _XOPEN_SOURCE 500 + #include <wchar.h> + mbstate_t x; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_should_define__xopen_source=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 +$as_echo "$ac_cv_should_define__xopen_source" >&6; } + test $ac_cv_should_define__xopen_source = yes && + $as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h + + $as_echo "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Minix Amsterdam compiler" >&5 +$as_echo_n "checking for Minix Amsterdam compiler... " >&6; } +if ${gl_cv_c_amsterdam_compiler+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __ACK__ +Amsterdam +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Amsterdam" >/dev/null 2>&1; then : + gl_cv_c_amsterdam_compiler=yes +else + gl_cv_c_amsterdam_compiler=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5 +$as_echo "$gl_cv_c_amsterdam_compiler" >&6; } + + if test $gl_cv_c_amsterdam_compiler = yes; then + if test -z "$AR"; then + AR='cc -c.a' + fi + if test -z "$ARFLAGS"; then + ARFLAGS='-o' + fi + else + : + fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="ar" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + + if test -z "$ARFLAGS"; then + ARFLAGS='cr' + fi + + + + if test -z "$RANLIB"; then + if test $gl_cv_c_amsterdam_compiler = yes; then + RANLIB=':' + else + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + fi + fi + + + + + + + # IEEE behaviour is the default on all CPUs except Alpha and SH + # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4 + # and the GCC 4.1.2 manual). + case "$host_cpu" in + alpha*) + # On Alpha systems, a compiler option provides the behaviour. + # See the ieee(3) manual page, also available at + # <https://backdrift.org/man/tru64/man3/ieee.3.html> + if test -n "$GCC"; then + # GCC has the option -mieee. + # For full IEEE compliance (rarely needed), use option -mieee-with-inexact. + CPPFLAGS="$CPPFLAGS -mieee" + else + # Compaq (ex-DEC) C has the option -ieee, equivalent to -ieee_with_no_inexact. + # For full IEEE compliance (rarely needed), use option -ieee_with_inexact. + CPPFLAGS="$CPPFLAGS -ieee" + fi + ;; + sh*) + if test -n "$GCC"; then + # GCC has the option -mieee. + CPPFLAGS="$CPPFLAGS -mieee" + fi + ;; + esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 +$as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } +if ${ac_cv_sys_largefile_source+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> /* for off_t */ + #include <stdio.h> +int +main () +{ +int (*fp) (FILE *, off_t, int) = fseeko; + return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_sys_largefile_source=no; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGEFILE_SOURCE 1 +#include <sys/types.h> /* for off_t */ + #include <stdio.h> +int +main () +{ +int (*fp) (FILE *, off_t, int) = fseeko; + return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_sys_largefile_source=1; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_cv_sys_largefile_source=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 +$as_echo "$ac_cv_sys_largefile_source" >&6; } +case $ac_cv_sys_largefile_source in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source +_ACEOF +;; +esac +rm -rf conftest* + +# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug +# in glibc 2.1.3, but that breaks too many other things. +# If you want fseeko and ftello with glibc, upgrade to a fixed glibc. +if test $ac_cv_sys_largefile_source != unknown; then + +$as_echo "#define HAVE_FSEEKO 1" >>confdefs.h + +fi + +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if ${ac_cv_sys_largefile_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if ${ac_cv_sys_file_offset_bits+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if ${ac_cv_sys_large_files+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi + + +$as_echo "#define _DARWIN_USE_64_BIT_INODE 1" >>confdefs.h + +fi + + case $ac_cv_prog_cc_stdc in #( + no) : + ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if ${ac_cv_prog_cc_c99+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdbool.h> +#include <stdlib.h> +#include <wchar.h> +#include <stdio.h> + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 +else + ac_cv_prog_cc_stdc=no +fi + +fi + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 +$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } + if ${ac_cv_prog_cc_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +fi + + case $ac_cv_prog_cc_stdc in #( + no) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; #( + '') : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 +$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; +esac + + + + + + + # Check whether --enable-threads was given. +if test "${enable_threads+set}" = set; then : + enableval=$enable_threads; gl_use_threads=$enableval +else + if test -n "$gl_use_threads_default"; then + gl_use_threads="$gl_use_threads_default" + else + case "$host_os" in + osf*) gl_use_threads=no ;; + cygwin*) + case `uname -r` in + 1.[0-5].*) gl_use_threads=no ;; + *) gl_use_threads=yes ;; + esac + ;; + *) gl_use_threads=yes ;; + esac + fi + +fi + + if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then + # For using <pthread.h>: + case "$host_os" in + osf*) + # On OSF/1, the compiler needs the flag -D_REENTRANT so that it + # groks <pthread.h>. cc also understands the flag -pthread, but + # we don't use it because 1. gcc-2.95 doesn't understand -pthread, + # 2. putting a flag into CPPFLAGS that has an effect on the linker + # causes the AC_LINK_IFELSE test below to succeed unexpectedly, + # leading to wrong values of LIBTHREAD and LTLIBTHREAD. + CPPFLAGS="$CPPFLAGS -D_REENTRANT" + ;; + esac + # Some systems optimize for single-threaded programs by default, and + # need special flags to disable these optimizations. For example, the + # definition of 'errno' in <errno.h>. + case "$host_os" in + aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; + solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; + esac + fi + + + + # Pre-early section. + + + + + # Code from module absolute-header: + # Code from module acl: + # Code from module acl-permissions: + # Code from module alignof: + # Code from module alloca: + # Code from module alloca-opt: + # Code from module announce-gen: + # Code from module array-list: + # Code from module autobuild: + + + + + if test -z "$AB_PACKAGE"; then + AB_PACKAGE=${PACKAGE_NAME:-$PACKAGE} + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild project... $AB_PACKAGE" >&5 +$as_echo "$as_me: autobuild project... $AB_PACKAGE" >&6;} + + if test -z "$AB_VERSION"; then + AB_VERSION=${PACKAGE_VERSION:-$VERSION} + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild revision... $AB_VERSION" >&5 +$as_echo "$as_me: autobuild revision... $AB_VERSION" >&6;} + + hostname=`hostname` + if test "$hostname"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild hostname... $hostname" >&5 +$as_echo "$as_me: autobuild hostname... $hostname" >&6;} + fi + + + + date=`TZ=UTC0 date +%Y%m%dT%H%M%SZ` + if test "$?" != 0; then + date=`date` + fi + if test "$date"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild timestamp... $date" >&5 +$as_echo "$as_me: autobuild timestamp... $date" >&6;} + fi + + # Code from module base64: + # Code from module btowc: + # Code from module builtin-expect: + # Code from module c-ctype: + # Code from module c-strcase: + # Code from module c-strcaseeq: + # Code from module canonicalize-lgpl: + # Code from module chdir: + # Code from module clock-time: + # Code from module cloexec: + # Code from module close: + # Code from module close-stream: + # Code from module closeout: + # Code from module crc: + # Code from module dirname-lgpl: + # Code from module dosname: + # Code from module double-slash-root: + # Code from module dup2: + # Code from module environ: + # Code from module errno: + # Code from module error: + # Code from module euidaccess: + # Code from module execute: + # Code from module exitfail: + # Code from module extensions: + # Code from module extern-inline: + # Code from module fatal-signal: + # Code from module fcntl: + # Code from module fcntl-h: + # Code from module fd-hook: + # Code from module filename: + # Code from module flexmember: + # Code from module float: + # Code from module flock: + # Code from module floor: + # Code from module fpending: + # Code from module fpieee: + + # Code from module fprintf-posix: + # Code from module fpucw: + # Code from module frexp-nolibm: + # Code from module frexpl-nolibm: + # Code from module fseek: + # Code from module fseeko: + + # Code from module fseterr: + # Code from module fstat: + # Code from module ftell: + # Code from module ftello: + + # Code from module fwriting: + # Code from module gendocs: + # Code from module getdelim: + # Code from module getdtablesize: + # Code from module getgroups: + # Code from module getline: + # Code from module getopt-gnu: + # Code from module getopt-posix: + # Code from module getpass: + # Code from module getpass-gnu: + # Code from module getprogname: + # Code from module gettext-h: + # Code from module gettime: + # Code from module gettimeofday: + # Code from module gnumakefile: + # Code from module gnupload: + # Code from module group-member: + # Code from module hard-locale: + # Code from module havelib: + # Code from module include_next: + # Code from module intprops: + # Code from module inttypes: + # Code from module inttypes-incomplete: + # Code from module isnand-nolibm: + # Code from module isnanf-nolibm: + # Code from module isnanl-nolibm: + # Code from module langinfo: + # Code from module largefile: + + # Code from module libc-config: + # Code from module limits-h: + # Code from module list: + # Code from module localcharset: + # Code from module locale: + # Code from module localeconv: + # Code from module localtime-buffer: + # Code from module lock: + # Code from module lseek: + # Code from module lstat: + # Code from module maintainer-makefile: + # Code from module malloc-posix: + # Code from module malloca: + # Code from module math: + # Code from module mbrlen: + # Code from module mbrtowc: + # Code from module mbsinit: + # Code from module mbtowc: + # Code from module memchr: + # Code from module minmax: + # Code from module mkdir: + # Code from module mkostemp: + # Code from module mkstemp: + # Code from module mktime: + # Code from module mktime-internal: + # Code from module msvc-inval: + # Code from module msvc-nothrow: + # Code from module multiarch: + # Code from module nl_langinfo: + # Code from module nocrash: + # Code from module nstrftime: + # Code from module obstack: + # Code from module open: + # Code from module parse-datetime: + # Code from module pathmax: + # Code from module posix_spawn-internal: + # Code from module posix_spawn_file_actions_addopen: + # Code from module posix_spawn_file_actions_destroy: + # Code from module posix_spawn_file_actions_init: + # Code from module posix_spawnattr_destroy: + # Code from module posix_spawnattr_init: + # Code from module posix_spawnattr_setflags: + # Code from module posix_spawnattr_setsigmask: + # Code from module posix_spawnp: + # Code from module printf-frexp: + # Code from module printf-frexpl: + # Code from module printf-posix: + # Code from module printf-safe: + # Code from module progname: + # Code from module qcopy-acl: + # Code from module qset-acl: + # Code from module quote: + # Code from module quotearg: + # Code from module quotearg-simple: + # Code from module raise: + # Code from module random_r: + # Code from module rawmemchr: + # Code from module read-file: + # Code from module readline: + # Code from module readlink: + # Code from module realloc-posix: + # Code from module regex: + # Code from module regexprops-generic: + # Code from module rename: + # Code from module rmdir: + # Code from module root-uid: + # Code from module same-inode: + # Code from module sched: + # Code from module secure_getenv: + # Code from module selinux-h: + # Code from module setenv: + # Code from module sh-filename: + # Code from module sigaction: + # Code from module signal-h: + # Code from module signbit: + # Code from module sigprocmask: + # Code from module size_max: + # Code from module snippet/_Noreturn: + # Code from module snippet/arg-nonnull: + # Code from module snippet/c++defs: + # Code from module snippet/unused-parameter: + # Code from module snippet/warn-on-use: + # Code from module spawn: + # Code from module ssize_t: + # Code from module stat: + # Code from module stat-macros: + # Code from module stat-time: + # Code from module stdarg: + + + + # Code from module stdbool: + # Code from module stddef: + # Code from module stdint: + # Code from module stdio: + # Code from module stdlib: + # Code from module strcase: + # Code from module strcasestr: + # Code from module strcasestr-simple: + # Code from module strchrnul: + # Code from module strdup-posix: + # Code from module streq: + # Code from module strerror: + # Code from module strerror-override: + # Code from module string: + # Code from module strings: + # Code from module strsep: + # Code from module strverscmp: + # Code from module sys_file: + # Code from module sys_stat: + # Code from module sys_time: + # Code from module sys_types: + # Code from module sys_wait: + # Code from module tempname: + # Code from module threadlib: + + + + # Code from module time: + # Code from module time_r: + # Code from module time_rz: + # Code from module timegm: + # Code from module timespec: + # Code from module tmpdir: + # Code from module tzset: + # Code from module unistd: + # Code from module unlocked-io: + # Code from module unsetenv: + # Code from module useless-if-before-free: + # Code from module vasnprintf: + # Code from module vasnprintf-posix: + # Code from module vasprintf: + # Code from module vasprintf-posix: + # Code from module vc-list-files: + # Code from module verify: + # Code from module version-etc: + # Code from module version-etc-fsf: + # Code from module vfprintf-posix: + # Code from module wait-process: + # Code from module waitpid: + # Code from module wchar: + # Code from module wcrtomb: + # Code from module wctob: + # Code from module wctomb: + # Code from module wctype-h: + # Code from module xalloc: + # Code from module xalloc-die: + # Code from module xalloc-oversized: + # Code from module xsize: + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.6' +macro_revision='2.4.6' + + + + + + + + + + + + + +ltmain=$ac_aux_dir/ltmain.sh + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case $ECHO in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in + *GNU* | *'with BFD'*) + test no != "$with_gnu_ld" && break + ;; + *) + test yes != "$with_gnu_ld" && break + ;; + esac + fi + done + IFS=$lt_save_ifs +else + lt_cv_path_LD=$LD # Let the user override the test with a path. +fi +fi + +LD=$lt_cv_path_LD +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 </dev/null` in +*GNU* | *'with BFD'*) + lt_cv_prog_gnu_ld=yes + ;; +*) + lt_cv_prog_gnu_ld=no + ;; +esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n "$lt_cv_sys_max_cmd_len"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +$as_echo "$with_sysroot" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +$as_echo_n "checking for a working dd... " >&6; } +if ${ac_cv_path_lt_DD+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +if test -z "$lt_DD"; then + ac_path_lt_DD_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in dd; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_lt_DD" || continue +if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi + $ac_path_lt_DD_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_lt_DD"; then + : + fi +else + ac_cv_path_lt_DD=$lt_DD +fi + +rm -f conftest.i conftest2.i conftest.out +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +$as_echo "$ac_cv_path_lt_DD" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +$as_echo_n "checking how to truncate binary pipes... " >&6; } +if ${lt_cv_truncate_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +$as_echo "$lt_cv_truncate_bin" >&6; } + + + + + + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[012][,.]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + pic_mode=default +fi + + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[5-9]*,yes) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } + +# Check whether --with-aix-soname was given. +if test "${with_aix_soname+set}" = set; then : + withval=$with_aix_soname; case $withval in + aix|svr4|both) + ;; + *) + as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname +else + if ${lt_cv_with_aix_soname+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_with_aix_soname=aix +fi + + with_aix_soname=$lt_cv_with_aix_soname +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +$as_echo "$with_aix_soname" >&6; } + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/${ac_tool_prefix}file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC=$CC +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test yes = "$GCC"; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + lt_prog_compiler_pic='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_pic_works"; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_static_works"; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test no = "$hard_links"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + export_dynamic_flag_spec='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach <jrb3@best.com> says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='$wl--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + export_dynamic_flag_spec='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test no = "$ld_shlibs"; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct=no + hardcode_direct_absolute=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + export_dynamic_flag_spec='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' $wl-bernotok' + allow_undefined_flag=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test yes = "$GCC"; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test yes = "$lt_cv_prog_compiler__b"; then + archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test yes = "$lt_cv_irix_exported_symbol"; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + link_all_deplibs=no + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + ld_shlibs=yes + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + else + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + osf3*) + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='$wl-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='$wl-z,text' + allow_undefined_flag='$wl-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='$wl-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test no = "$ld_shlibs" && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([A-Za-z]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + + + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib<name>.so + # instead of lib<name>.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test yes = "$hardcode_automatic"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && + test no != "$hardcode_minus_L"; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test relink = "$hardcode_action" || + test yes = "$inherit_rpath"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen=shl_load +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen=dlopen +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include <dlfcn.h> +#endif + +#include <stdio.h> + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include <dlfcn.h> +#endif + +#include <stdio.h> + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report what library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC=$lt_save_CC + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if ${ac_cv_prog_cc_c99+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdbool.h> +#include <stdlib.h> +#include <wchar.h> +#include <stdio.h> + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then : + +fi + + + + + +: ${LEX='flex'} +: ${LEXLIB='-lfl'} +: ${LEX_OUTPUT_ROOT='lex.yy'} + + + + + + # parse-datetime.y works with bison only. + : ${YACC='bison -o y.tab.c'} + + + +canonical=$host + + + + + + + LIBC_FATAL_STDERR_=1 + export LIBC_FATAL_STDERR_ + + + gl_need_lib_has_acl= + # Check whether --enable-acl was given. +if test "${enable_acl+set}" = set; then : + enableval=$enable_acl; +else + enable_acl=auto +fi + + + + + + for ac_func in $ac_func_list +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 +$as_echo_n "checking for working alloca.h... " >&6; } +if ${ac_cv_working_alloca_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <alloca.h> +int +main () +{ +char *p = (char *) alloca (2 * sizeof (int)); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_working_alloca_h=yes +else + ac_cv_working_alloca_h=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 +$as_echo "$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then + +$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 +$as_echo_n "checking for alloca... " >&6; } +if ${ac_cv_func_alloca_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include <malloc.h> +# define alloca _alloca +# else +# ifdef HAVE_ALLOCA_H +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +void *alloca (size_t); +# endif +# endif +# endif +# endif +#endif + +int +main () +{ +char *p = (char *) alloca (1); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_func_alloca_works=yes +else + ac_cv_func_alloca_works=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 +$as_echo "$ac_cv_func_alloca_works" >&6; } + +if test $ac_cv_func_alloca_works = yes; then + +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h + +else + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. + + + + + +ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + +$as_echo "#define C_ALLOCA 1" >>confdefs.h + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 +$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } +if ${ac_cv_os_cray+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then : + ac_cv_os_cray=yes +else + ac_cv_os_cray=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 +$as_echo "$ac_cv_os_cray" >&6; } +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + +cat >>confdefs.h <<_ACEOF +#define CRAY_STACKSEG_END $ac_func +_ACEOF + + break +fi + + done +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 +$as_echo_n "checking stack direction for C alloca... " >&6; } +if ${ac_cv_c_stack_direction+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_c_stack_direction=0 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +find_stack_direction (int *addr, int depth) +{ + int dir, dummy = 0; + if (! addr) + addr = &dummy; + *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; + dir = depth ? find_stack_direction (addr, depth - 1) : 0; + return dir + dummy; +} + +int +main (int argc, char **argv) +{ + return find_stack_direction (0, argc + !argv + 20) < 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_stack_direction=1 +else + ac_cv_c_stack_direction=-1 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 +$as_echo "$ac_cv_c_stack_direction" >&6; } +cat >>confdefs.h <<_ACEOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +_ACEOF + + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 +$as_echo_n "checking for C/C++ restrict keyword... " >&6; } +if ${ac_cv_c_restrict+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_restrict=no + # The order here caters to the fact that C++ does not require restrict. + for ac_kw in __restrict __restrict__ _Restrict restrict; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +typedef int *int_ptr; + int foo (int_ptr $ac_kw ip) { return ip[0]; } + int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ + int bar (int ip[$ac_kw]) { return ip[0]; } + +int +main () +{ +int s[1]; + int *$ac_kw t = s; + t[0] = 0; + return foo (t) + bar (t); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_restrict=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_restrict" != no && break + done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 +$as_echo "$ac_cv_c_restrict" >&6; } + + case $ac_cv_c_restrict in + restrict) ;; + no) $as_echo "#define restrict /**/" >>confdefs.h + ;; + *) cat >>confdefs.h <<_ACEOF +#define restrict $ac_cv_c_restrict +_ACEOF + ;; + esac + + + GNULIB_BTOWC=0; + GNULIB_WCTOB=0; + GNULIB_MBSINIT=0; + GNULIB_MBRTOWC=0; + GNULIB_MBRLEN=0; + GNULIB_MBSRTOWCS=0; + GNULIB_MBSNRTOWCS=0; + GNULIB_WCRTOMB=0; + GNULIB_WCSRTOMBS=0; + GNULIB_WCSNRTOMBS=0; + GNULIB_WCWIDTH=0; + GNULIB_WMEMCHR=0; + GNULIB_WMEMCMP=0; + GNULIB_WMEMCPY=0; + GNULIB_WMEMMOVE=0; + GNULIB_WMEMSET=0; + GNULIB_WCSLEN=0; + GNULIB_WCSNLEN=0; + GNULIB_WCSCPY=0; + GNULIB_WCPCPY=0; + GNULIB_WCSNCPY=0; + GNULIB_WCPNCPY=0; + GNULIB_WCSCAT=0; + GNULIB_WCSNCAT=0; + GNULIB_WCSCMP=0; + GNULIB_WCSNCMP=0; + GNULIB_WCSCASECMP=0; + GNULIB_WCSNCASECMP=0; + GNULIB_WCSCOLL=0; + GNULIB_WCSXFRM=0; + GNULIB_WCSDUP=0; + GNULIB_WCSCHR=0; + GNULIB_WCSRCHR=0; + GNULIB_WCSCSPN=0; + GNULIB_WCSSPN=0; + GNULIB_WCSPBRK=0; + GNULIB_WCSSTR=0; + GNULIB_WCSTOK=0; + GNULIB_WCSWIDTH=0; + GNULIB_WCSFTIME=0; + HAVE_BTOWC=1; + HAVE_MBSINIT=1; + HAVE_MBRTOWC=1; + HAVE_MBRLEN=1; + HAVE_MBSRTOWCS=1; + HAVE_MBSNRTOWCS=1; + HAVE_WCRTOMB=1; + HAVE_WCSRTOMBS=1; + HAVE_WCSNRTOMBS=1; + HAVE_WMEMCHR=1; + HAVE_WMEMCMP=1; + HAVE_WMEMCPY=1; + HAVE_WMEMMOVE=1; + HAVE_WMEMSET=1; + HAVE_WCSLEN=1; + HAVE_WCSNLEN=1; + HAVE_WCSCPY=1; + HAVE_WCPCPY=1; + HAVE_WCSNCPY=1; + HAVE_WCPNCPY=1; + HAVE_WCSCAT=1; + HAVE_WCSNCAT=1; + HAVE_WCSCMP=1; + HAVE_WCSNCMP=1; + HAVE_WCSCASECMP=1; + HAVE_WCSNCASECMP=1; + HAVE_WCSCOLL=1; + HAVE_WCSXFRM=1; + HAVE_WCSDUP=1; + HAVE_WCSCHR=1; + HAVE_WCSRCHR=1; + HAVE_WCSCSPN=1; + HAVE_WCSSPN=1; + HAVE_WCSPBRK=1; + HAVE_WCSSTR=1; + HAVE_WCSTOK=1; + HAVE_WCSWIDTH=1; + HAVE_WCSFTIME=1; + HAVE_DECL_WCTOB=1; + HAVE_DECL_WCWIDTH=1; + REPLACE_MBSTATE_T=0; + REPLACE_BTOWC=0; + REPLACE_WCTOB=0; + REPLACE_MBSINIT=0; + REPLACE_MBRTOWC=0; + REPLACE_MBRLEN=0; + REPLACE_MBSRTOWCS=0; + REPLACE_MBSNRTOWCS=0; + REPLACE_WCRTOMB=0; + REPLACE_WCSRTOMBS=0; + REPLACE_WCSNRTOMBS=0; + REPLACE_WCWIDTH=0; + REPLACE_WCSWIDTH=0; + REPLACE_WCSFTIME=0; + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <wchar.h> uses 'inline' correctly" >&5 +$as_echo_n "checking whether <wchar.h> uses 'inline' correctly... " >&6; } +if ${gl_cv_header_wchar_h_correct_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_cv_header_wchar_h_correct_inline=yes + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #define wcstod renamed_wcstod +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +extern int zero (void); +int main () { return zero(); } + +_ACEOF + save_ac_compile="$ac_compile" + ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/` + if echo '#include "conftest.c"' >conftest1.c && + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #define wcstod renamed_wcstod +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int zero (void) { return 0; } + +_ACEOF + ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/` + if echo '#include "conftest.c"' >conftest2.c && + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then + : + else + gl_cv_header_wchar_h_correct_inline=no + fi + fi + fi + ac_compile="$save_ac_compile" + rm -f conftest12.c conftest12.$ac_objext conftest$ac_exeext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5 +$as_echo "$gl_cv_header_wchar_h_correct_inline" >&6; } + if test $gl_cv_header_wchar_h_correct_inline = no; then + as_fn_error $? "<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). +This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in +C99 mode. You have four options: + - Add the flag -fgnu89-inline to CC and reconfigure, or + - Fix your include files, using parts of + <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or + - Use a gcc version older than 4.3, or + - Don't use the flags -std=c99 or -std=gnu99. +Configuration aborted." "$LINENO" 5 + fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 +$as_echo_n "checking for nl_langinfo and CODESET... " >&6; } +if ${am_cv_langinfo_codeset+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <langinfo.h> +int +main () +{ +char* cs = nl_langinfo(CODESET); return !cs; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_langinfo_codeset=yes +else + am_cv_langinfo_codeset=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 +$as_echo "$am_cv_langinfo_codeset" >&6; } + if test $am_cv_langinfo_codeset = yes; then + +$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h + + fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if ${gt_cv_locale_fr+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if defined __BEOS__ || defined __HAIKU__ + return 1; +#else + /* Check whether the given locale name is recognized by the system. */ +# if defined _WIN32 && !defined __CYGWIN__ + /* On native Windows, setlocale(category, "") looks at the system settings, + not at the environment variables. Also, when an encoding suffix such + as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE + category of the locale to "C". */ + if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL + || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + return 1; +# else + if (setlocale (LC_ALL, "") == NULL) return 1; +# endif + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. + On MirBSD 10, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "UTF-8". */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 + || strcmp (cs, "UTF-8") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; +# if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; +# endif + return 0; +#endif +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + case "$host_os" in + # Handle native Windows specially, because there setlocale() interprets + # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", + # "fr" or "fra" as "French" or "French_France.1252", + # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", + # "ja" as "Japanese" or "Japanese_Japan.932", + # and similar. + mingw*) + # Test for the native Windows locale name. + if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=French_France.1252 + else + # None found. + gt_cv_locale_fr=none + fi + ;; + *) + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + ;; + esac + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + + + + GNULIB__EXIT=0; + GNULIB_ATOLL=0; + GNULIB_CALLOC_POSIX=0; + GNULIB_CANONICALIZE_FILE_NAME=0; + GNULIB_GETLOADAVG=0; + GNULIB_GETSUBOPT=0; + GNULIB_GRANTPT=0; + GNULIB_MALLOC_POSIX=0; + GNULIB_MBTOWC=0; + GNULIB_MKDTEMP=0; + GNULIB_MKOSTEMP=0; + GNULIB_MKOSTEMPS=0; + GNULIB_MKSTEMP=0; + GNULIB_MKSTEMPS=0; + GNULIB_POSIX_OPENPT=0; + GNULIB_PTSNAME=0; + GNULIB_PTSNAME_R=0; + GNULIB_PUTENV=0; + GNULIB_QSORT_R=0; + GNULIB_RANDOM=0; + GNULIB_RANDOM_R=0; + GNULIB_REALLOCARRAY=0; + GNULIB_REALLOC_POSIX=0; + GNULIB_REALPATH=0; + GNULIB_RPMATCH=0; + GNULIB_SECURE_GETENV=0; + GNULIB_SETENV=0; + GNULIB_STRTOD=0; + GNULIB_STRTOLL=0; + GNULIB_STRTOULL=0; + GNULIB_SYSTEM_POSIX=0; + GNULIB_UNLOCKPT=0; + GNULIB_UNSETENV=0; + GNULIB_WCTOMB=0; + HAVE__EXIT=1; + HAVE_ATOLL=1; + HAVE_CANONICALIZE_FILE_NAME=1; + HAVE_DECL_GETLOADAVG=1; + HAVE_GETSUBOPT=1; + HAVE_GRANTPT=1; + HAVE_DECL_INITSTATE=1; + HAVE_MKDTEMP=1; + HAVE_MKOSTEMP=1; + HAVE_MKOSTEMPS=1; + HAVE_MKSTEMP=1; + HAVE_MKSTEMPS=1; + HAVE_POSIX_OPENPT=1; + HAVE_PTSNAME=1; + HAVE_PTSNAME_R=1; + HAVE_QSORT_R=1; + HAVE_RANDOM=1; + HAVE_RANDOM_H=1; + HAVE_RANDOM_R=1; + HAVE_REALLOCARRAY=1; + HAVE_REALPATH=1; + HAVE_RPMATCH=1; + HAVE_SECURE_GETENV=1; + HAVE_SETENV=1; + HAVE_DECL_SETENV=1; + HAVE_DECL_SETSTATE=1; + HAVE_STRTOD=1; + HAVE_STRTOLL=1; + HAVE_STRTOULL=1; + HAVE_STRUCT_RANDOM_DATA=1; + HAVE_SYS_LOADAVG_H=0; + HAVE_UNLOCKPT=1; + HAVE_DECL_UNSETENV=1; + REPLACE_CALLOC=0; + REPLACE_CANONICALIZE_FILE_NAME=0; + REPLACE_MALLOC=0; + REPLACE_MBTOWC=0; + REPLACE_MKSTEMP=0; + REPLACE_PTSNAME=0; + REPLACE_PTSNAME_R=0; + REPLACE_PUTENV=0; + REPLACE_QSORT_R=0; + REPLACE_RANDOM_R=0; + REPLACE_REALLOC=0; + REPLACE_REALPATH=0; + REPLACE_SETENV=0; + REPLACE_STRTOD=0; + REPLACE_UNSETENV=0; + REPLACE_WCTOMB=0; + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 +$as_echo_n "checking whether // is distinct from /... " >&6; } +if ${gl_cv_double_slash_root+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test x"$cross_compiling" = xyes ; then + # When cross-compiling, there is no way to tell whether // is special + # short of a list of hosts. However, the only known hosts to date + # that have a distinct // are Apollo DomainOS (too old to port to), + # Cygwin, and z/OS. If anyone knows of another system for which // has + # special semantics and is distinct from /, please report it to + # <bug-gnulib@gnu.org>. + case $host in + *-cygwin | i370-ibm-openedition) + gl_cv_double_slash_root=yes ;; + *) + # Be optimistic and assume that / and // are the same when we + # don't know. + gl_cv_double_slash_root='unknown, assuming no' ;; + esac + else + set x `ls -di / // 2>/dev/null` + if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then + gl_cv_double_slash_root=no + else + gl_cv_double_slash_root=yes + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 +$as_echo "$gl_cv_double_slash_root" >&6; } + if test "$gl_cv_double_slash_root" = yes; then + +$as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h + + fi + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether realpath works" >&5 +$as_echo_n "checking whether realpath works... " >&6; } +if ${gl_cv_func_realpath_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + touch conftest.a + mkdir conftest.d + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_realpath_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_realpath_works="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_realpath_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +#include <stdlib.h> +#if defined __MACH__ && defined __APPLE__ +/* Avoid a crash on Mac OS X. */ +#include <mach/mach.h> +#include <mach/mach_error.h> +#include <mach/thread_status.h> +#include <mach/exception.h> +#include <mach/task.h> +#include <pthread.h> +/* The exception port on which our thread listens. */ +static mach_port_t our_exception_port; +/* The main function of the thread listening for exceptions of type + EXC_BAD_ACCESS. */ +static void * +mach_exception_thread (void *arg) +{ + /* Buffer for a message to be received. */ + struct { + mach_msg_header_t head; + mach_msg_body_t msgh_body; + char data[1024]; + } msg; + mach_msg_return_t retval; + /* Wait for a message on the exception port. */ + retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), + our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); + if (retval != MACH_MSG_SUCCESS) + abort (); + exit (1); +} +static void +nocrash_init (void) +{ + mach_port_t self = mach_task_self (); + /* Allocate a port on which the thread shall listen for exceptions. */ + if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) + == KERN_SUCCESS) { + /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ + if (mach_port_insert_right (self, our_exception_port, our_exception_port, + MACH_MSG_TYPE_MAKE_SEND) + == KERN_SUCCESS) { + /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting + for us. */ + exception_mask_t mask = EXC_MASK_BAD_ACCESS; + /* Create the thread listening on the exception port. */ + pthread_attr_t attr; + pthread_t thread; + if (pthread_attr_init (&attr) == 0 + && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 + && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { + pthread_attr_destroy (&attr); + /* Replace the exception port info for these exceptions with our own. + Note that we replace the exception port for the entire task, not only + for a particular thread. This has the effect that when our exception + port gets the message, the thread specific exception port has already + been asked, and we don't need to bother about it. + See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ + task_set_exception_ports (self, mask, our_exception_port, + EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); + } + } + } +} +#elif defined _WIN32 && ! defined __CYGWIN__ +/* Avoid a crash on native Windows. */ +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#include <winerror.h> +static LONG WINAPI +exception_filter (EXCEPTION_POINTERS *ExceptionInfo) +{ + switch (ExceptionInfo->ExceptionRecord->ExceptionCode) + { + case EXCEPTION_ACCESS_VIOLATION: + case EXCEPTION_IN_PAGE_ERROR: + case EXCEPTION_STACK_OVERFLOW: + case EXCEPTION_GUARD_PAGE: + case EXCEPTION_PRIV_INSTRUCTION: + case EXCEPTION_ILLEGAL_INSTRUCTION: + case EXCEPTION_DATATYPE_MISALIGNMENT: + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: + case EXCEPTION_NONCONTINUABLE_EXCEPTION: + exit (1); + } + return EXCEPTION_CONTINUE_SEARCH; +} +static void +nocrash_init (void) +{ + SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); +} +#else +/* Avoid a crash on POSIX systems. */ +#include <signal.h> +#include <unistd.h> +/* A POSIX signal handler. */ +static void +exception_handler (int sig) +{ + _exit (1); +} +static void +nocrash_init (void) +{ +#ifdef SIGSEGV + signal (SIGSEGV, exception_handler); +#endif +#ifdef SIGBUS + signal (SIGBUS, exception_handler); +#endif +} +#endif + + #include <stdlib.h> + #include <string.h> + +int +main () +{ + + int result = 0; + { + char *name = realpath ("conftest.a", NULL); + if (!(name && *name == '/')) + result |= 1; + free (name); + } + { + char *name = realpath ("conftest.b/../conftest.a", NULL); + if (name != NULL) + result |= 2; + free (name); + } + { + char *name = realpath ("conftest.a/", NULL); + if (name != NULL) + result |= 4; + free (name); + } + { + char *name1 = realpath (".", NULL); + char *name2 = realpath ("conftest.d//./..", NULL); + if (! name1 || ! name2 || strcmp (name1, name2)) + result |= 8; + free (name1); + free (name2); + } + return result; + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_realpath_works=yes +else + gl_cv_func_realpath_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -rf conftest.a conftest.d + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_realpath_works" >&5 +$as_echo "$gl_cv_func_realpath_works" >&6; } + case "$gl_cv_func_realpath_works" in + *yes) + +$as_echo "#define FUNC_REALPATH_WORKS 1" >>confdefs.h + + ;; + esac + + + + + for ac_header in $ac_header_list +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + + + + + + + GNULIB_CHDIR=0; + GNULIB_CHOWN=0; + GNULIB_CLOSE=0; + GNULIB_DUP=0; + GNULIB_DUP2=0; + GNULIB_DUP3=0; + GNULIB_ENVIRON=0; + GNULIB_EUIDACCESS=0; + GNULIB_FACCESSAT=0; + GNULIB_FCHDIR=0; + GNULIB_FCHOWNAT=0; + GNULIB_FDATASYNC=0; + GNULIB_FSYNC=0; + GNULIB_FTRUNCATE=0; + GNULIB_GETCWD=0; + GNULIB_GETDOMAINNAME=0; + GNULIB_GETDTABLESIZE=0; + GNULIB_GETGROUPS=0; + GNULIB_GETHOSTNAME=0; + GNULIB_GETLOGIN=0; + GNULIB_GETLOGIN_R=0; + GNULIB_GETPAGESIZE=0; + GNULIB_GETPASS=0; + GNULIB_GETUSERSHELL=0; + GNULIB_GROUP_MEMBER=0; + GNULIB_ISATTY=0; + GNULIB_LCHOWN=0; + GNULIB_LINK=0; + GNULIB_LINKAT=0; + GNULIB_LSEEK=0; + GNULIB_PIPE=0; + GNULIB_PIPE2=0; + GNULIB_PREAD=0; + GNULIB_PWRITE=0; + GNULIB_READ=0; + GNULIB_READLINK=0; + GNULIB_READLINKAT=0; + GNULIB_RMDIR=0; + GNULIB_SETHOSTNAME=0; + GNULIB_SLEEP=0; + GNULIB_SYMLINK=0; + GNULIB_SYMLINKAT=0; + GNULIB_TRUNCATE=0; + GNULIB_TTYNAME_R=0; + GNULIB_UNISTD_H_NONBLOCKING=0; + GNULIB_UNISTD_H_SIGPIPE=0; + GNULIB_UNLINK=0; + GNULIB_UNLINKAT=0; + GNULIB_USLEEP=0; + GNULIB_WRITE=0; + HAVE_CHOWN=1; + HAVE_DUP2=1; + HAVE_DUP3=1; + HAVE_EUIDACCESS=1; + HAVE_FACCESSAT=1; + HAVE_FCHDIR=1; + HAVE_FCHOWNAT=1; + HAVE_FDATASYNC=1; + HAVE_FSYNC=1; + HAVE_FTRUNCATE=1; + HAVE_GETDTABLESIZE=1; + HAVE_GETGROUPS=1; + HAVE_GETHOSTNAME=1; + HAVE_GETLOGIN=1; + HAVE_GETPAGESIZE=1; + HAVE_GETPASS=1; + HAVE_GROUP_MEMBER=1; + HAVE_LCHOWN=1; + HAVE_LINK=1; + HAVE_LINKAT=1; + HAVE_PIPE=1; + HAVE_PIPE2=1; + HAVE_PREAD=1; + HAVE_PWRITE=1; + HAVE_READLINK=1; + HAVE_READLINKAT=1; + HAVE_SETHOSTNAME=1; + HAVE_SLEEP=1; + HAVE_SYMLINK=1; + HAVE_SYMLINKAT=1; + HAVE_UNLINKAT=1; + HAVE_USLEEP=1; + HAVE_DECL_ENVIRON=1; + HAVE_DECL_FCHDIR=1; + HAVE_DECL_FDATASYNC=1; + HAVE_DECL_GETDOMAINNAME=1; + HAVE_DECL_GETLOGIN=1; + HAVE_DECL_GETLOGIN_R=1; + HAVE_DECL_GETPAGESIZE=1; + HAVE_DECL_GETUSERSHELL=1; + HAVE_DECL_SETHOSTNAME=1; + HAVE_DECL_TRUNCATE=1; + HAVE_DECL_TTYNAME_R=1; + HAVE_OS_H=0; + HAVE_SYS_PARAM_H=0; + REPLACE_CHOWN=0; + REPLACE_CLOSE=0; + REPLACE_DUP=0; + REPLACE_DUP2=0; + REPLACE_FACCESSAT=0; + REPLACE_FCHOWNAT=0; + REPLACE_FTRUNCATE=0; + REPLACE_GETCWD=0; + REPLACE_GETDOMAINNAME=0; + REPLACE_GETDTABLESIZE=0; + REPLACE_GETLOGIN_R=0; + REPLACE_GETGROUPS=0; + REPLACE_GETPAGESIZE=0; + REPLACE_GETPASS=0; + REPLACE_ISATTY=0; + REPLACE_LCHOWN=0; + REPLACE_LINK=0; + REPLACE_LINKAT=0; + REPLACE_LSEEK=0; + REPLACE_PREAD=0; + REPLACE_PWRITE=0; + REPLACE_READ=0; + REPLACE_READLINK=0; + REPLACE_READLINKAT=0; + REPLACE_RMDIR=0; + REPLACE_SLEEP=0; + REPLACE_SYMLINK=0; + REPLACE_SYMLINKAT=0; + REPLACE_TRUNCATE=0; + REPLACE_TTYNAME_R=0; + REPLACE_UNLINK=0; + REPLACE_UNLINKAT=0; + REPLACE_USLEEP=0; + REPLACE_WRITE=0; + UNISTD_H_HAVE_WINSOCK2_H=0; + UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; + + + + + + + if test $ac_cv_func__set_invalid_parameter_handler = yes; then + HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 + +$as_echo "#define HAVE_MSVC_INVALID_PARAMETER_HANDLER 1" >>confdefs.h + + else + HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 + fi + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if environ is properly declared" >&5 +$as_echo_n "checking if environ is properly declared... " >&6; } +if ${gt_cv_var_environ_declaration+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if HAVE_UNISTD_H + #include <unistd.h> + #endif + /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */ + #include <stdlib.h> + + extern struct { int foo; } environ; +int +main () +{ +environ.foo = 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_var_environ_declaration=no +else + gt_cv_var_environ_declaration=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_var_environ_declaration" >&5 +$as_echo "$gt_cv_var_environ_declaration" >&6; } + if test $gt_cv_var_environ_declaration = yes; then + +$as_echo "#define HAVE_ENVIRON_DECL 1" >>confdefs.h + + fi + + + if test $gt_cv_var_environ_declaration != yes; then + HAVE_DECL_ENVIRON=0 + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5 +$as_echo_n "checking whether the preprocessor supports include_next... " >&6; } +if ${gl_cv_have_include_next+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -rf conftestd1a conftestd1b conftestd2 + mkdir conftestd1a conftestd1b conftestd2 + cat <<EOF > conftestd1a/conftest.h +#define DEFINED_IN_CONFTESTD1 +#include_next <conftest.h> +#ifdef DEFINED_IN_CONFTESTD2 +int foo; +#else +#error "include_next doesn't work" +#endif +EOF + cat <<EOF > conftestd1b/conftest.h +#define DEFINED_IN_CONFTESTD1 +#include <stdio.h> +#include_next <conftest.h> +#ifdef DEFINED_IN_CONFTESTD2 +int foo; +#else +#error "include_next doesn't work" +#endif +EOF + cat <<EOF > conftestd2/conftest.h +#ifndef DEFINED_IN_CONFTESTD1 +#error "include_next test doesn't work" +#endif +#define DEFINED_IN_CONFTESTD2 +EOF + gl_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <conftest.h> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_have_include_next=yes +else + CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <conftest.h> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_have_include_next=buggy +else + gl_cv_have_include_next=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CPPFLAGS="$gl_save_CPPFLAGS" + rm -rf conftestd1a conftestd1b conftestd2 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5 +$as_echo "$gl_cv_have_include_next" >&6; } + PRAGMA_SYSTEM_HEADER= + if test $gl_cv_have_include_next = yes; then + INCLUDE_NEXT=include_next + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next + if test -n "$GCC"; then + PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' + fi + else + if test $gl_cv_have_include_next = buggy; then + INCLUDE_NEXT=include + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next + else + INCLUDE_NEXT=include + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include + fi + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system header files limit the line length" >&5 +$as_echo_n "checking whether system header files limit the line length... " >&6; } +if ${gl_cv_pragma_columns+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __TANDEM +choke me +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "choke me" >/dev/null 2>&1; then : + gl_cv_pragma_columns=yes +else + gl_cv_pragma_columns=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pragma_columns" >&5 +$as_echo "$gl_cv_pragma_columns" >&6; } + if test $gl_cv_pragma_columns = yes; then + PRAGMA_COLUMNS="#pragma COLUMNS 10000" + else + PRAGMA_COLUMNS= + fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for complete errno.h" >&5 +$as_echo_n "checking for complete errno.h... " >&6; } +if ${gl_cv_header_errno_h_complete+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <errno.h> +#if !defined ETXTBSY +booboo +#endif +#if !defined ENOMSG +booboo +#endif +#if !defined EIDRM +booboo +#endif +#if !defined ENOLINK +booboo +#endif +#if !defined EPROTO +booboo +#endif +#if !defined EMULTIHOP +booboo +#endif +#if !defined EBADMSG +booboo +#endif +#if !defined EOVERFLOW +booboo +#endif +#if !defined ENOTSUP +booboo +#endif +#if !defined ENETRESET +booboo +#endif +#if !defined ECONNABORTED +booboo +#endif +#if !defined ESTALE +booboo +#endif +#if !defined EDQUOT +booboo +#endif +#if !defined ECANCELED +booboo +#endif +#if !defined EOWNERDEAD +booboo +#endif +#if !defined ENOTRECOVERABLE +booboo +#endif +#if !defined EILSEQ +booboo +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "booboo" >/dev/null 2>&1; then : + gl_cv_header_errno_h_complete=no +else + gl_cv_header_errno_h_complete=yes +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_complete" >&5 +$as_echo "$gl_cv_header_errno_h_complete" >&6; } + if test $gl_cv_header_errno_h_complete = yes; then + ERRNO_H='' + else + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_errno_h='<'errno.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <errno.h>" >&5 +$as_echo_n "checking absolute name of <errno.h>... " >&6; } +if ${gl_cv_next_errno_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <errno.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'errno.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_errno_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_errno_h + gl_cv_next_errno_h='"'$gl_header'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_errno_h" >&5 +$as_echo "$gl_cv_next_errno_h" >&6; } + fi + NEXT_ERRNO_H=$gl_cv_next_errno_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'errno.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_errno_h + fi + NEXT_AS_FIRST_DIRECTIVE_ERRNO_H=$gl_next_as_first_directive + + + + + ERRNO_H='errno.h' + fi + + if test -n "$ERRNO_H"; then + GL_GENERATE_ERRNO_H_TRUE= + GL_GENERATE_ERRNO_H_FALSE='#' +else + GL_GENERATE_ERRNO_H_TRUE='#' + GL_GENERATE_ERRNO_H_FALSE= +fi + + + if test -n "$ERRNO_H"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EMULTIHOP value" >&5 +$as_echo_n "checking for EMULTIHOP value... " >&6; } +if ${gl_cv_header_errno_h_EMULTIHOP+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <errno.h> +#ifdef EMULTIHOP +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + gl_cv_header_errno_h_EMULTIHOP=yes +else + gl_cv_header_errno_h_EMULTIHOP=no +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_EMULTIHOP = no; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include <errno.h> +#ifdef EMULTIHOP +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + gl_cv_header_errno_h_EMULTIHOP=hidden +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_EMULTIHOP = hidden; then + if ac_fn_c_compute_int "$LINENO" "EMULTIHOP" "gl_cv_header_errno_h_EMULTIHOP" " +#define _XOPEN_SOURCE_EXTENDED 1 +#include <errno.h> +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include <stdio.h> +#include <stdlib.h> +"; then : + +fi + + fi + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EMULTIHOP" >&5 +$as_echo "$gl_cv_header_errno_h_EMULTIHOP" >&6; } + case $gl_cv_header_errno_h_EMULTIHOP in + yes | no) + EMULTIHOP_HIDDEN=0; EMULTIHOP_VALUE= + ;; + *) + EMULTIHOP_HIDDEN=1; EMULTIHOP_VALUE="$gl_cv_header_errno_h_EMULTIHOP" + ;; + esac + + + fi + + + if test -n "$ERRNO_H"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ENOLINK value" >&5 +$as_echo_n "checking for ENOLINK value... " >&6; } +if ${gl_cv_header_errno_h_ENOLINK+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <errno.h> +#ifdef ENOLINK +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + gl_cv_header_errno_h_ENOLINK=yes +else + gl_cv_header_errno_h_ENOLINK=no +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_ENOLINK = no; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include <errno.h> +#ifdef ENOLINK +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + gl_cv_header_errno_h_ENOLINK=hidden +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_ENOLINK = hidden; then + if ac_fn_c_compute_int "$LINENO" "ENOLINK" "gl_cv_header_errno_h_ENOLINK" " +#define _XOPEN_SOURCE_EXTENDED 1 +#include <errno.h> +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include <stdio.h> +#include <stdlib.h> +"; then : + +fi + + fi + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_ENOLINK" >&5 +$as_echo "$gl_cv_header_errno_h_ENOLINK" >&6; } + case $gl_cv_header_errno_h_ENOLINK in + yes | no) + ENOLINK_HIDDEN=0; ENOLINK_VALUE= + ;; + *) + ENOLINK_HIDDEN=1; ENOLINK_VALUE="$gl_cv_header_errno_h_ENOLINK" + ;; + esac + + + fi + + + if test -n "$ERRNO_H"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EOVERFLOW value" >&5 +$as_echo_n "checking for EOVERFLOW value... " >&6; } +if ${gl_cv_header_errno_h_EOVERFLOW+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <errno.h> +#ifdef EOVERFLOW +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + gl_cv_header_errno_h_EOVERFLOW=yes +else + gl_cv_header_errno_h_EOVERFLOW=no +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_EOVERFLOW = no; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include <errno.h> +#ifdef EOVERFLOW +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + gl_cv_header_errno_h_EOVERFLOW=hidden +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_EOVERFLOW = hidden; then + if ac_fn_c_compute_int "$LINENO" "EOVERFLOW" "gl_cv_header_errno_h_EOVERFLOW" " +#define _XOPEN_SOURCE_EXTENDED 1 +#include <errno.h> +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include <stdio.h> +#include <stdlib.h> +"; then : + +fi + + fi + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EOVERFLOW" >&5 +$as_echo "$gl_cv_header_errno_h_EOVERFLOW" >&6; } + case $gl_cv_header_errno_h_EOVERFLOW in + yes | no) + EOVERFLOW_HIDDEN=0; EOVERFLOW_VALUE= + ;; + *) + EOVERFLOW_HIDDEN=1; EOVERFLOW_VALUE="$gl_cv_header_errno_h_EOVERFLOW" + ;; + esac + + + fi + + +ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" +if test "x$ac_cv_have_decl_strerror_r" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRERROR_R $ac_have_decl +_ACEOF + +for ac_func in strerror_r +do : + ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r" +if test "x$ac_cv_func_strerror_r" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRERROR_R 1 +_ACEOF + +fi +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5 +$as_echo_n "checking whether strerror_r returns char *... " >&6; } +if ${ac_cv_func_strerror_r_char_p+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ac_cv_func_strerror_r_char_p=no + if test $ac_cv_have_decl_strerror_r = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + char *p = strerror_r (0, buf, sizeof buf); + return !p || x; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_func_strerror_r_char_p=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + else + # strerror_r is not declared. Choose between + # systems that have relatively inaccessible declarations for the + # function. BeOS and DEC UNIX 4.0 fall in this category, but the + # former has a strerror_r that returns char*, while the latter + # has a strerror_r that returns `int'. + # This test should segfault on the DEC system. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default + extern char *strerror_r (); +int +main () +{ +char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + return ! isalpha (x); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_strerror_r_char_p=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5 +$as_echo "$ac_cv_func_strerror_r_char_p" >&6; } +if test $ac_cv_func_strerror_r_char_p = yes; then + +$as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h + +fi + + + XGETTEXT_EXTRA_OPTIONS= + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 +$as_echo_n "checking for uid_t in sys/types.h... " >&6; } +if ${ac_cv_type_uid_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "uid_t" >/dev/null 2>&1; then : + ac_cv_type_uid_t=yes +else + ac_cv_type_uid_t=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 +$as_echo "$ac_cv_type_uid_t" >&6; } +if test $ac_cv_type_uid_t = no; then + +$as_echo "#define uid_t int" >>confdefs.h + + +$as_echo "#define gid_t int" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking type of array argument to getgroups" >&5 +$as_echo_n "checking type of array argument to getgroups... " >&6; } +if ${ac_cv_type_getgroups+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_type_getgroups=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Thanks to Mike Rendell for this test. */ +$ac_includes_default +#define NGID 256 +#undef MAX +#define MAX(x, y) ((x) > (y) ? (x) : (y)) + +int +main () +{ + gid_t gidset[NGID]; + int i, n; + union { gid_t gval; long int lval; } val; + + val.lval = -1; + for (i = 0; i < NGID; i++) + gidset[i] = val.gval; + n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1, + gidset); + /* Exit non-zero if getgroups seems to require an array of ints. This + happens when gid_t is short int but getgroups modifies an array + of ints. */ + return n > 0 && gidset[n] != val.gval; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_type_getgroups=gid_t +else + ac_cv_type_getgroups=int +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +if test $ac_cv_type_getgroups = cross; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <unistd.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1; then : + ac_cv_type_getgroups=gid_t +else + ac_cv_type_getgroups=int +fi +rm -f conftest* + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_getgroups" >&5 +$as_echo "$ac_cv_type_getgroups" >&6; } + +cat >>confdefs.h <<_ACEOF +#define GETGROUPS_T $ac_cv_type_getgroups +_ACEOF + + +ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" +if test "x$ac_cv_type_mode_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define mode_t int +_ACEOF + +fi + + + + + + ac_fn_c_check_type "$LINENO" "sig_atomic_t" "ac_cv_type_sig_atomic_t" "#include <signal.h> +" +if test "x$ac_cv_type_sig_atomic_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_SIG_ATOMIC_T 1 +_ACEOF + + +else + +$as_echo "#define sig_atomic_t int" >>confdefs.h + +fi + + + + GNULIB_FCNTL=0; + GNULIB_NONBLOCKING=0; + GNULIB_OPEN=0; + GNULIB_OPENAT=0; + HAVE_FCNTL=1; + HAVE_OPENAT=1; + REPLACE_FCNTL=0; + REPLACE_OPEN=0; + REPLACE_OPENAT=0; + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5 +$as_echo_n "checking for working fcntl.h... " >&6; } +if ${gl_cv_header_working_fcntl_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess 'no' on native Windows. + mingw*) gl_cv_header_working_fcntl_h='no' ;; + *) gl_cv_header_working_fcntl_h=cross-compiling ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/stat.h> + #if HAVE_UNISTD_H + # include <unistd.h> + #else /* on Windows with MSVC */ + # include <io.h> + # include <stdlib.h> + # defined sleep(n) _sleep ((n) * 1000) + #endif + #include <fcntl.h> + #ifndef O_NOATIME + #define O_NOATIME 0 + #endif + #ifndef O_NOFOLLOW + #define O_NOFOLLOW 0 + #endif + static int const constants[] = + { + O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, + O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY + }; + +int +main () +{ + + int result = !constants; + #if HAVE_SYMLINK + { + static char const sym[] = "conftest.sym"; + if (symlink ("/dev/null", sym) != 0) + result |= 2; + else + { + int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); + if (fd >= 0) + { + close (fd); + result |= 4; + } + } + if (unlink (sym) != 0 || symlink (".", sym) != 0) + result |= 2; + else + { + int fd = open (sym, O_RDONLY | O_NOFOLLOW); + if (fd >= 0) + { + close (fd); + result |= 4; + } + } + unlink (sym); + } + #endif + { + static char const file[] = "confdefs.h"; + int fd = open (file, O_RDONLY | O_NOATIME); + if (fd < 0) + result |= 8; + else + { + struct stat st0; + if (fstat (fd, &st0) != 0) + result |= 16; + else + { + char c; + sleep (1); + if (read (fd, &c, 1) != 1) + result |= 24; + else + { + if (close (fd) != 0) + result |= 32; + else + { + struct stat st1; + if (stat (file, &st1) != 0) + result |= 40; + else + if (st0.st_atime != st1.st_atime) + result |= 64; + } + } + } + } + } + return result; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_header_working_fcntl_h=yes +else + case $? in #( + 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( + 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( + 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( + *) gl_cv_header_working_fcntl_h='no';; + esac +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5 +$as_echo "$gl_cv_header_working_fcntl_h" >&6; } + + case $gl_cv_header_working_fcntl_h in #( + *O_NOATIME* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + +cat >>confdefs.h <<_ACEOF +#define HAVE_WORKING_O_NOATIME $ac_val +_ACEOF + + + case $gl_cv_header_working_fcntl_h in #( + *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + +cat >>confdefs.h <<_ACEOF +#define HAVE_WORKING_O_NOFOLLOW $ac_val +_ACEOF + + +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define pid_t int +_ACEOF + +fi + + + GNULIB_FLOCK=0; + HAVE_FLOCK=1; + + + + + GNULIB_ACOSF=0; + GNULIB_ACOSL=0; + GNULIB_ASINF=0; + GNULIB_ASINL=0; + GNULIB_ATANF=0; + GNULIB_ATANL=0; + GNULIB_ATAN2F=0; + GNULIB_CBRT=0; + GNULIB_CBRTF=0; + GNULIB_CBRTL=0; + GNULIB_CEIL=0; + GNULIB_CEILF=0; + GNULIB_CEILL=0; + GNULIB_COPYSIGN=0; + GNULIB_COPYSIGNF=0; + GNULIB_COPYSIGNL=0; + GNULIB_COSF=0; + GNULIB_COSL=0; + GNULIB_COSHF=0; + GNULIB_EXPF=0; + GNULIB_EXPL=0; + GNULIB_EXP2=0; + GNULIB_EXP2F=0; + GNULIB_EXP2L=0; + GNULIB_EXPM1=0; + GNULIB_EXPM1F=0; + GNULIB_EXPM1L=0; + GNULIB_FABSF=0; + GNULIB_FABSL=0; + GNULIB_FLOOR=0; + GNULIB_FLOORF=0; + GNULIB_FLOORL=0; + GNULIB_FMA=0; + GNULIB_FMAF=0; + GNULIB_FMAL=0; + GNULIB_FMOD=0; + GNULIB_FMODF=0; + GNULIB_FMODL=0; + GNULIB_FREXPF=0; + GNULIB_FREXP=0; + GNULIB_FREXPL=0; + GNULIB_HYPOT=0; + GNULIB_HYPOTF=0; + GNULIB_HYPOTL=0; + GNULIB_ILOGB=0; + GNULIB_ILOGBF=0; + GNULIB_ILOGBL=0; + GNULIB_ISFINITE=0; + GNULIB_ISINF=0; + GNULIB_ISNAN=0; + GNULIB_ISNANF=0; + GNULIB_ISNAND=0; + GNULIB_ISNANL=0; + GNULIB_LDEXPF=0; + GNULIB_LDEXPL=0; + GNULIB_LOG=0; + GNULIB_LOGF=0; + GNULIB_LOGL=0; + GNULIB_LOG10=0; + GNULIB_LOG10F=0; + GNULIB_LOG10L=0; + GNULIB_LOG1P=0; + GNULIB_LOG1PF=0; + GNULIB_LOG1PL=0; + GNULIB_LOG2=0; + GNULIB_LOG2F=0; + GNULIB_LOG2L=0; + GNULIB_LOGB=0; + GNULIB_LOGBF=0; + GNULIB_LOGBL=0; + GNULIB_MODF=0; + GNULIB_MODFF=0; + GNULIB_MODFL=0; + GNULIB_POWF=0; + GNULIB_REMAINDER=0; + GNULIB_REMAINDERF=0; + GNULIB_REMAINDERL=0; + GNULIB_RINT=0; + GNULIB_RINTF=0; + GNULIB_RINTL=0; + GNULIB_ROUND=0; + GNULIB_ROUNDF=0; + GNULIB_ROUNDL=0; + GNULIB_SIGNBIT=0; + GNULIB_SINF=0; + GNULIB_SINL=0; + GNULIB_SINHF=0; + GNULIB_SQRTF=0; + GNULIB_SQRTL=0; + GNULIB_TANF=0; + GNULIB_TANL=0; + GNULIB_TANHF=0; + GNULIB_TRUNC=0; + GNULIB_TRUNCF=0; + GNULIB_TRUNCL=0; + HAVE_ACOSF=1; + HAVE_ACOSL=1; + HAVE_ASINF=1; + HAVE_ASINL=1; + HAVE_ATANF=1; + HAVE_ATANL=1; + HAVE_ATAN2F=1; + HAVE_CBRT=1; + HAVE_CBRTF=1; + HAVE_CBRTL=1; + HAVE_COPYSIGN=1; + HAVE_COPYSIGNL=1; + HAVE_COSF=1; + HAVE_COSL=1; + HAVE_COSHF=1; + HAVE_EXPF=1; + HAVE_EXPL=1; + HAVE_EXPM1=1; + HAVE_EXPM1F=1; + HAVE_FABSF=1; + HAVE_FABSL=1; + HAVE_FMA=1; + HAVE_FMAF=1; + HAVE_FMAL=1; + HAVE_FMODF=1; + HAVE_FMODL=1; + HAVE_FREXPF=1; + HAVE_HYPOTF=1; + HAVE_HYPOTL=1; + HAVE_ILOGB=1; + HAVE_ILOGBF=1; + HAVE_ILOGBL=1; + HAVE_ISNANF=1; + HAVE_ISNAND=1; + HAVE_ISNANL=1; + HAVE_LDEXPF=1; + HAVE_LOGF=1; + HAVE_LOGL=1; + HAVE_LOG10F=1; + HAVE_LOG10L=1; + HAVE_LOG1P=1; + HAVE_LOG1PF=1; + HAVE_LOG1PL=1; + HAVE_LOGBF=1; + HAVE_LOGBL=1; + HAVE_MODFF=1; + HAVE_MODFL=1; + HAVE_POWF=1; + HAVE_REMAINDER=1; + HAVE_REMAINDERF=1; + HAVE_RINT=1; + HAVE_RINTL=1; + HAVE_SINF=1; + HAVE_SINL=1; + HAVE_SINHF=1; + HAVE_SQRTF=1; + HAVE_SQRTL=1; + HAVE_TANF=1; + HAVE_TANL=1; + HAVE_TANHF=1; + HAVE_DECL_ACOSL=1; + HAVE_DECL_ASINL=1; + HAVE_DECL_ATANL=1; + HAVE_DECL_CBRTF=1; + HAVE_DECL_CBRTL=1; + HAVE_DECL_CEILF=1; + HAVE_DECL_CEILL=1; + HAVE_DECL_COPYSIGNF=1; + HAVE_DECL_COSL=1; + HAVE_DECL_EXPL=1; + HAVE_DECL_EXP2=1; + HAVE_DECL_EXP2F=1; + HAVE_DECL_EXP2L=1; + HAVE_DECL_EXPM1L=1; + HAVE_DECL_FLOORF=1; + HAVE_DECL_FLOORL=1; + HAVE_DECL_FREXPL=1; + HAVE_DECL_LDEXPL=1; + HAVE_DECL_LOGL=1; + HAVE_DECL_LOG10L=1; + HAVE_DECL_LOG2=1; + HAVE_DECL_LOG2F=1; + HAVE_DECL_LOG2L=1; + HAVE_DECL_LOGB=1; + HAVE_DECL_REMAINDER=1; + HAVE_DECL_REMAINDERL=1; + HAVE_DECL_RINTF=1; + HAVE_DECL_ROUND=1; + HAVE_DECL_ROUNDF=1; + HAVE_DECL_ROUNDL=1; + HAVE_DECL_SINL=1; + HAVE_DECL_SQRTL=1; + HAVE_DECL_TANL=1; + HAVE_DECL_TRUNC=1; + HAVE_DECL_TRUNCF=1; + HAVE_DECL_TRUNCL=1; + REPLACE_ACOSF=0; + REPLACE_ASINF=0; + REPLACE_ATANF=0; + REPLACE_ATAN2F=0; + REPLACE_CBRTF=0; + REPLACE_CBRTL=0; + REPLACE_CEIL=0; + REPLACE_CEILF=0; + REPLACE_CEILL=0; + REPLACE_COSF=0; + REPLACE_COSHF=0; + REPLACE_EXPF=0; + REPLACE_EXPM1=0; + REPLACE_EXPM1F=0; + REPLACE_EXP2=0; + REPLACE_EXP2L=0; + REPLACE_FABSL=0; + REPLACE_FLOOR=0; + REPLACE_FLOORF=0; + REPLACE_FLOORL=0; + REPLACE_FMA=0; + REPLACE_FMAF=0; + REPLACE_FMAL=0; + REPLACE_FMOD=0; + REPLACE_FMODF=0; + REPLACE_FMODL=0; + REPLACE_FREXPF=0; + REPLACE_FREXP=0; + REPLACE_FREXPL=0; + REPLACE_HUGE_VAL=0; + REPLACE_HYPOT=0; + REPLACE_HYPOTF=0; + REPLACE_HYPOTL=0; + REPLACE_ILOGB=0; + REPLACE_ILOGBF=0; + REPLACE_ILOGBL=0; + REPLACE_ISFINITE=0; + REPLACE_ISINF=0; + REPLACE_ISNAN=0; + REPLACE_LDEXPL=0; + REPLACE_LOG=0; + REPLACE_LOGF=0; + REPLACE_LOGL=0; + REPLACE_LOG10=0; + REPLACE_LOG10F=0; + REPLACE_LOG10L=0; + REPLACE_LOG1P=0; + REPLACE_LOG1PF=0; + REPLACE_LOG1PL=0; + REPLACE_LOG2=0; + REPLACE_LOG2F=0; + REPLACE_LOG2L=0; + REPLACE_LOGB=0; + REPLACE_LOGBF=0; + REPLACE_LOGBL=0; + REPLACE_MODF=0; + REPLACE_MODFF=0; + REPLACE_MODFL=0; + REPLACE_NAN=0; + REPLACE_REMAINDER=0; + REPLACE_REMAINDERF=0; + REPLACE_REMAINDERL=0; + REPLACE_ROUND=0; + REPLACE_ROUNDF=0; + REPLACE_ROUNDL=0; + REPLACE_SIGNBIT=0; + REPLACE_SIGNBIT_USING_GCC=0; + REPLACE_SINF=0; + REPLACE_SINHF=0; + REPLACE_SQRTF=0; + REPLACE_SQRTL=0; + REPLACE_TANF=0; + REPLACE_TANHF=0; + REPLACE_TRUNC=0; + REPLACE_TRUNCF=0; + REPLACE_TRUNCL=0; + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5 +$as_echo_n "checking for stdint.h... " >&6; } +if ${gl_cv_header_stdint_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <stdint.h> +int +main () +{ +uintmax_t i = (uintmax_t) -1; return !i; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_stdint_h=yes +else + gl_cv_header_stdint_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_h" >&5 +$as_echo "$gl_cv_header_stdint_h" >&6; } + if test $gl_cv_header_stdint_h = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STDINT_H_WITH_UINTMAX 1 +_ACEOF + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5 +$as_echo_n "checking for inttypes.h... " >&6; } +if ${gl_cv_header_inttypes_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <sys/types.h> +#include <inttypes.h> + +int +main () +{ +uintmax_t i = (uintmax_t) -1; return !i; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_inttypes_h=yes +else + gl_cv_header_inttypes_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_inttypes_h" >&5 +$as_echo "$gl_cv_header_inttypes_h" >&6; } + if test $gl_cv_header_inttypes_h = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_INTTYPES_H_WITH_UINTMAX 1 +_ACEOF + + fi + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports size specifiers as in C99" >&5 +$as_echo_n "checking whether printf supports size specifiers as in C99... " >&6; } +if ${gl_cv_func_printf_sizes_c99+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4].*) gl_cv_func_printf_sizes_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on Mac OS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_sizes_c99="guessing no";; + darwin*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on OpenBSD >= 3.9. + openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) + gl_cv_func_printf_sizes_c99="guessing no";; + openbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on Solaris >= 2.10. + solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; + solaris*) gl_cv_func_printf_sizes_c99="guessing no";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_printf_sizes_c99="guessing no";; + netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on MSVC, no on mingw. + mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _MSC_VER + Known +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Known" >/dev/null 2>&1; then : + gl_cv_func_printf_sizes_c99="guessing yes" +else + gl_cv_func_printf_sizes_c99="guessing no" +fi +rm -f conftest* + + ;; + # If we don't know, assume the worst. + *) gl_cv_func_printf_sizes_c99="guessing no";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#if HAVE_STDINT_H_WITH_UINTMAX +# include <stdint.h> +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +# include <inttypes.h> +#endif +static char buf[100]; +int main () +{ + int result = 0; +#if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX + buf[0] = '\0'; + if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0 + || strcmp (buf, "12345671 33") != 0) + result |= 1; +#else + result |= 1; +#endif + buf[0] = '\0'; + if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0 + || strcmp (buf, "12345672 33") != 0) + result |= 2; + buf[0] = '\0'; + if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0 + || strcmp (buf, "12345673 33") != 0) + result |= 4; + buf[0] = '\0'; + if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0 + || strcmp (buf, "1.5 33") != 0) + result |= 8; + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_printf_sizes_c99=yes +else + gl_cv_func_printf_sizes_c99=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_sizes_c99" >&5 +$as_echo "$gl_cv_func_printf_sizes_c99" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports 'long double' arguments" >&5 +$as_echo_n "checking whether printf supports 'long double' arguments... " >&6; } +if ${gl_cv_func_printf_long_double+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + case "$host_os" in + beos*) gl_cv_func_printf_long_double="guessing no";; + # Guess yes on MSVC, no on mingw. + mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _MSC_VER + Known +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Known" >/dev/null 2>&1; then : + gl_cv_func_printf_long_double="guessing yes" +else + gl_cv_func_printf_long_double="guessing no" +fi +rm -f conftest* + + ;; + *) gl_cv_func_printf_long_double="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +static char buf[10000]; +int main () +{ + int result = 0; + buf[0] = '\0'; + if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.750000 33") != 0) + result |= 1; + buf[0] = '\0'; + if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.750000e+00 33") != 0) + result |= 2; + buf[0] = '\0'; + if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.75 33") != 0) + result |= 4; + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_printf_long_double=yes +else + gl_cv_func_printf_long_double=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_long_double" >&5 +$as_echo "$gl_cv_func_printf_long_double" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports infinite 'double' arguments" >&5 +$as_echo_n "checking whether printf supports infinite 'double' arguments... " >&6; } +if ${gl_cv_func_printf_infinite+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5].*) gl_cv_func_printf_infinite="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on Mac OS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";; + darwin*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";; + hpux*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_printf_infinite="guessing no";; + netbsd*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on MSVC, no on mingw. + mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _MSC_VER + Known +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Known" >/dev/null 2>&1; then : + gl_cv_func_printf_infinite="guessing yes" +else + gl_cv_func_printf_infinite="guessing no" +fi +rm -f conftest* + + ;; + # If we don't know, assume the worst. + *) gl_cv_func_printf_infinite="guessing no";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +static int +strisnan (const char *string, size_t start_index, size_t end_index) +{ + if (start_index < end_index) + { + if (string[start_index] == '-') + start_index++; + if (start_index + 3 <= end_index + && memcmp (string + start_index, "nan", 3) == 0) + { + start_index += 3; + if (start_index == end_index + || (string[start_index] == '(' && string[end_index - 1] == ')')) + return 1; + } + } + return 0; +} +static int +have_minus_zero () +{ + static double plus_zero = 0.0; + double minus_zero = - plus_zero; + return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; +} +static char buf[10000]; +static double zero = 0.0; +int main () +{ + int result = 0; + if (sprintf (buf, "%f", 1.0 / zero) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 1; + if (sprintf (buf, "%f", -1.0 / zero) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 1; + if (sprintf (buf, "%f", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + if (sprintf (buf, "%e", 1.0 / zero) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 4; + if (sprintf (buf, "%e", -1.0 / zero) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 4; + if (sprintf (buf, "%e", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 8; + if (sprintf (buf, "%g", 1.0 / zero) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 16; + if (sprintf (buf, "%g", -1.0 / zero) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 16; + if (sprintf (buf, "%g", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 32; + /* This test fails on HP-UX 10.20. */ + if (have_minus_zero ()) + if (sprintf (buf, "%g", - zero) < 0 + || strcmp (buf, "-0") != 0) + result |= 64; + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_printf_infinite=yes +else + gl_cv_func_printf_infinite=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_infinite" >&5 +$as_echo "$gl_cv_func_printf_infinite" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + as_fn_error $? "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether long double and double are the same" >&5 +$as_echo_n "checking whether long double and double are the same... " >&6; } +if ${gl_cv_long_double_equals_double+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <float.h> +int +main () +{ +typedef int check[sizeof (long double) == sizeof (double) + && LDBL_MANT_DIG == DBL_MANT_DIG + && LDBL_MAX_EXP == DBL_MAX_EXP + && LDBL_MIN_EXP == DBL_MIN_EXP + ? 1 : -1]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_long_double_equals_double=yes +else + gl_cv_long_double_equals_double=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_long_double_equals_double" >&5 +$as_echo "$gl_cv_long_double_equals_double" >&6; } + if test $gl_cv_long_double_equals_double = yes; then + +$as_echo "#define HAVE_SAME_LONG_DOUBLE_AS_DOUBLE 1" >>confdefs.h + + HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1 + else + HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0 + fi + + + + + + + + if test -n "$gl_printf_safe"; then + +$as_echo "#define CHECK_PRINTF_SAFE 1" >>confdefs.h + + fi + case "$gl_cv_func_printf_long_double" in + *yes) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports infinite 'long double' arguments" >&5 +$as_echo_n "checking whether printf supports infinite 'long double' arguments... " >&6; } +if ${gl_cv_func_printf_infinite_long_double+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + case "$host_cpu" in + # Guess no on ia64, x86_64, i386. + ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";; + *) + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5].*) gl_cv_func_printf_infinite_long_double="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";; + hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on MSVC, no on mingw. + mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _MSC_VER + Known +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Known" >/dev/null 2>&1; then : + gl_cv_func_printf_infinite_long_double="guessing yes" +else + gl_cv_func_printf_infinite_long_double="guessing no" +fi +rm -f conftest* + + ;; + # If we don't know, assume the worst. + *) gl_cv_func_printf_infinite_long_double="guessing no";; + esac + ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#include <stdlib.h> +#if defined __MACH__ && defined __APPLE__ +/* Avoid a crash on Mac OS X. */ +#include <mach/mach.h> +#include <mach/mach_error.h> +#include <mach/thread_status.h> +#include <mach/exception.h> +#include <mach/task.h> +#include <pthread.h> +/* The exception port on which our thread listens. */ +static mach_port_t our_exception_port; +/* The main function of the thread listening for exceptions of type + EXC_BAD_ACCESS. */ +static void * +mach_exception_thread (void *arg) +{ + /* Buffer for a message to be received. */ + struct { + mach_msg_header_t head; + mach_msg_body_t msgh_body; + char data[1024]; + } msg; + mach_msg_return_t retval; + /* Wait for a message on the exception port. */ + retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), + our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); + if (retval != MACH_MSG_SUCCESS) + abort (); + exit (1); +} +static void +nocrash_init (void) +{ + mach_port_t self = mach_task_self (); + /* Allocate a port on which the thread shall listen for exceptions. */ + if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) + == KERN_SUCCESS) { + /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ + if (mach_port_insert_right (self, our_exception_port, our_exception_port, + MACH_MSG_TYPE_MAKE_SEND) + == KERN_SUCCESS) { + /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting + for us. */ + exception_mask_t mask = EXC_MASK_BAD_ACCESS; + /* Create the thread listening on the exception port. */ + pthread_attr_t attr; + pthread_t thread; + if (pthread_attr_init (&attr) == 0 + && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 + && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { + pthread_attr_destroy (&attr); + /* Replace the exception port info for these exceptions with our own. + Note that we replace the exception port for the entire task, not only + for a particular thread. This has the effect that when our exception + port gets the message, the thread specific exception port has already + been asked, and we don't need to bother about it. + See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ + task_set_exception_ports (self, mask, our_exception_port, + EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); + } + } + } +} +#elif defined _WIN32 && ! defined __CYGWIN__ +/* Avoid a crash on native Windows. */ +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#include <winerror.h> +static LONG WINAPI +exception_filter (EXCEPTION_POINTERS *ExceptionInfo) +{ + switch (ExceptionInfo->ExceptionRecord->ExceptionCode) + { + case EXCEPTION_ACCESS_VIOLATION: + case EXCEPTION_IN_PAGE_ERROR: + case EXCEPTION_STACK_OVERFLOW: + case EXCEPTION_GUARD_PAGE: + case EXCEPTION_PRIV_INSTRUCTION: + case EXCEPTION_ILLEGAL_INSTRUCTION: + case EXCEPTION_DATATYPE_MISALIGNMENT: + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: + case EXCEPTION_NONCONTINUABLE_EXCEPTION: + exit (1); + } + return EXCEPTION_CONTINUE_SEARCH; +} +static void +nocrash_init (void) +{ + SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); +} +#else +/* Avoid a crash on POSIX systems. */ +#include <signal.h> +#include <unistd.h> +/* A POSIX signal handler. */ +static void +exception_handler (int sig) +{ + _exit (1); +} +static void +nocrash_init (void) +{ +#ifdef SIGSEGV + signal (SIGSEGV, exception_handler); +#endif +#ifdef SIGBUS + signal (SIGBUS, exception_handler); +#endif +} +#endif + +#include <float.h> +#include <stdio.h> +#include <string.h> +static int +strisnan (const char *string, size_t start_index, size_t end_index) +{ + if (start_index < end_index) + { + if (string[start_index] == '-') + start_index++; + if (start_index + 3 <= end_index + && memcmp (string + start_index, "nan", 3) == 0) + { + start_index += 3; + if (start_index == end_index + || (string[start_index] == '(' && string[end_index - 1] == ')')) + return 1; + } + } + return 0; +} +static char buf[10000]; +static long double zeroL = 0.0L; +int main () +{ + int result = 0; + nocrash_init(); + if (sprintf (buf, "%Lf", 1.0L / zeroL) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Lf", -1.0L / zeroL) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Lf", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 1; + if (sprintf (buf, "%Le", 1.0L / zeroL) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Le", -1.0L / zeroL) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Le", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 1; + if (sprintf (buf, "%Lg", 1.0L / zeroL) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Lg", -1.0L / zeroL) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 1; +#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE +/* Representation of an 80-bit 'long double' as an initializer for a sequence + of 'unsigned int' words. */ +# ifdef WORDS_BIGENDIAN +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ + ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ + (unsigned int) (mantlo) << 16 \ + } +# else +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { mantlo, manthi, exponent } +# endif + { /* Quiet NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + } + { + /* Signalling NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + } + { /* Pseudo-NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) <= 0) + result |= 4; + if (sprintf (buf, "%Le", x.value) <= 0) + result |= 4; + if (sprintf (buf, "%Lg", x.value) <= 0) + result |= 4; + } + { /* Pseudo-Infinity. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) <= 0) + result |= 8; + if (sprintf (buf, "%Le", x.value) <= 0) + result |= 8; + if (sprintf (buf, "%Lg", x.value) <= 0) + result |= 8; + } + { /* Pseudo-Zero. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) <= 0) + result |= 16; + if (sprintf (buf, "%Le", x.value) <= 0) + result |= 16; + if (sprintf (buf, "%Lg", x.value) <= 0) + result |= 16; + } + { /* Unnormalized number. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) <= 0) + result |= 32; + if (sprintf (buf, "%Le", x.value) <= 0) + result |= 32; + if (sprintf (buf, "%Lg", x.value) <= 0) + result |= 32; + } + { /* Pseudo-Denormal. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) <= 0) + result |= 64; + if (sprintf (buf, "%Le", x.value) <= 0) + result |= 64; + if (sprintf (buf, "%Lg", x.value) <= 0) + result |= 64; + } +#endif + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_printf_infinite_long_double=yes +else + gl_cv_func_printf_infinite_long_double=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_infinite_long_double" >&5 +$as_echo "$gl_cv_func_printf_infinite_long_double" >&6; } + ;; + *) + gl_cv_func_printf_infinite_long_double="irrelevant" + ;; + esac + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'a' and 'A' directives" >&5 +$as_echo_n "checking whether printf supports the 'a' and 'A' directives... " >&6; } +if ${gl_cv_func_printf_directive_a+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + # Guess yes on glibc >= 2.5 systems. + *-gnu* | gnu*) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <features.h> + #ifdef __GNU_LIBRARY__ + #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)) && !defined __UCLIBC__ + BZ2908 + #endif + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "BZ2908" >/dev/null 2>&1; then : + gl_cv_func_printf_directive_a="guessing yes" +else + gl_cv_func_printf_directive_a="guessing no" +fi +rm -f conftest* + + ;; + # Guess no on native Windows. + mingw*) gl_cv_func_printf_directive_a="guessing no";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_directive_a="guessing no";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +static char buf[100]; +static double zero = 0.0; +int main () +{ + int result = 0; + if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 + || (strcmp (buf, "0x1.922p+1 33") != 0 + && strcmp (buf, "0x3.244p+0 33") != 0 + && strcmp (buf, "0x6.488p-1 33") != 0 + && strcmp (buf, "0xc.91p-2 33") != 0)) + result |= 1; + if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 + || (strcmp (buf, "-0X1.922P+1 33") != 0 + && strcmp (buf, "-0X3.244P+0 33") != 0 + && strcmp (buf, "-0X6.488P-1 33") != 0 + && strcmp (buf, "-0XC.91P-2 33") != 0)) + result |= 2; + /* This catches a FreeBSD 6.1 bug: it doesn't round. */ + if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 + || (strcmp (buf, "0x1.83p+0 33") != 0 + && strcmp (buf, "0x3.05p-1 33") != 0 + && strcmp (buf, "0x6.0ap-2 33") != 0 + && strcmp (buf, "0xc.14p-3 33") != 0)) + result |= 4; + /* This catches a Mac OS X 10.12.4 (Darwin 16.5) bug: it doesn't round. */ + if (sprintf (buf, "%.0a %d", 1.51, 33, 44, 55) < 0 + || (strcmp (buf, "0x2p+0 33") != 0 + && strcmp (buf, "0x3p-1 33") != 0 + && strcmp (buf, "0x6p-2 33") != 0 + && strcmp (buf, "0xcp-3 33") != 0)) + result |= 4; + /* This catches a FreeBSD 6.1 bug. See + <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ + if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0 + || buf[0] == '0') + result |= 8; + /* This catches a Mac OS X 10.3.9 (Darwin 7.9) bug. */ + if (sprintf (buf, "%.1a", 1.999) < 0 + || (strcmp (buf, "0x1.0p+1") != 0 + && strcmp (buf, "0x2.0p+0") != 0 + && strcmp (buf, "0x4.0p-1") != 0 + && strcmp (buf, "0x8.0p-2") != 0)) + result |= 16; + /* This catches the same Mac OS X 10.3.9 (Darwin 7.9) bug and also a + glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */ + if (sprintf (buf, "%.1La", 1.999L) < 0 + || (strcmp (buf, "0x1.0p+1") != 0 + && strcmp (buf, "0x2.0p+0") != 0 + && strcmp (buf, "0x4.0p-1") != 0 + && strcmp (buf, "0x8.0p-2") != 0)) + result |= 32; + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_printf_directive_a=yes +else + gl_cv_func_printf_directive_a=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_directive_a" >&5 +$as_echo "$gl_cv_func_printf_directive_a" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'F' directive" >&5 +$as_echo_n "checking whether printf supports the 'F' directive... " >&6; } +if ${gl_cv_func_printf_directive_f+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5].*) gl_cv_func_printf_directive_f="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on Mac OS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";; + darwin*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on Solaris >= 2.10. + solaris2.[1-9][0-9]*) gl_cv_func_printf_directive_f="guessing yes";; + solaris*) gl_cv_func_printf_directive_f="guessing no";; + # Guess yes on MSVC, no on mingw. + mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _MSC_VER + Known +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Known" >/dev/null 2>&1; then : + gl_cv_func_printf_directive_f="guessing yes" +else + gl_cv_func_printf_directive_f="guessing no" +fi +rm -f conftest* + + ;; + # If we don't know, assume the worst. + *) gl_cv_func_printf_directive_f="guessing no";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +static char buf[100]; +static double zero = 0.0; +int main () +{ + int result = 0; + if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0 + || strcmp (buf, "1234567.000000 33") != 0) + result |= 1; + if (sprintf (buf, "%F", 1.0 / zero) < 0 + || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0)) + result |= 2; + /* This catches a Cygwin 1.5.x bug. */ + if (sprintf (buf, "%.F", 1234.0) < 0 + || strcmp (buf, "1234") != 0) + result |= 4; + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_printf_directive_f=yes +else + gl_cv_func_printf_directive_f=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_directive_f" >&5 +$as_echo "$gl_cv_func_printf_directive_f" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'n' directive" >&5 +$as_echo_n "checking whether printf supports the 'n' directive... " >&6; } +if ${gl_cv_func_printf_directive_n+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess no on native Windows. + mingw*) gl_cv_func_printf_directive_n="guessing no";; + *) gl_cv_func_printf_directive_n="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#ifdef _MSC_VER +/* See page about "Parameter Validation" on msdn.microsoft.com. */ +static void cdecl +invalid_parameter_handler (const wchar_t *expression, + const wchar_t *function, + const wchar_t *file, unsigned int line, + uintptr_t dummy) +{ + exit (1); +} +#endif +static char fmtstring[10]; +static char buf[100]; +int main () +{ + int count = -1; +#ifdef _MSC_VER + _set_invalid_parameter_handler (invalid_parameter_handler); +#endif + /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) + support %n in format strings in read-only memory but not in writable + memory. */ + strcpy (fmtstring, "%d %n"); + if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0 + || strcmp (buf, "123 ") != 0 + || count != 4) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_printf_directive_n=yes +else + gl_cv_func_printf_directive_n=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_directive_n" >&5 +$as_echo "$gl_cv_func_printf_directive_n" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'ls' directive" >&5 +$as_echo_n "checking whether printf supports the 'ls' directive... " >&6; } +if ${gl_cv_func_printf_directive_ls+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + openbsd*) gl_cv_func_printf_directive_ls="guessing no";; + irix*) gl_cv_func_printf_directive_ls="guessing no";; + solaris*) gl_cv_func_printf_directive_ls="guessing no";; + cygwin*) gl_cv_func_printf_directive_ls="guessing no";; + beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";; + # Guess yes on native Windows. + mingw*) gl_cv_func_printf_directive_ls="guessing yes";; + *) gl_cv_func_printf_directive_ls="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +#include <string.h> +int main () +{ + int result = 0; + char buf[100]; + /* Test whether %ls works at all. + This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on + Cygwin 1.5. */ + { + static const wchar_t wstring[] = { 'a', 'b', 'c', 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%ls", wstring) < 0 + || strcmp (buf, "abc") != 0) + result |= 1; + } + /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an + assertion failure inside libc), but not on OpenBSD 4.0. */ + { + static const wchar_t wstring[] = { 'a', 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%ls", wstring) < 0 + || strcmp (buf, "a") != 0) + result |= 2; + } + /* Test whether precisions in %ls are supported as specified in ISO C 99 + section 7.19.6.1: + "If a precision is specified, no more than that many bytes are written + (including shift sequences, if any), and the array shall contain a + null wide character if, to equal the multibyte character sequence + length given by the precision, the function would need to access a + wide character one past the end of the array." + This test fails on Solaris 10. */ + { + static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%.2ls", wstring) < 0 + || strcmp (buf, "ab") != 0) + result |= 8; + } + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_printf_directive_ls=yes +else + gl_cv_func_printf_directive_ls=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_directive_ls" >&5 +$as_echo "$gl_cv_func_printf_directive_ls" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports POSIX/XSI format strings with positions" >&5 +$as_echo_n "checking whether printf supports POSIX/XSI format strings with positions... " >&6; } +if ${gl_cv_func_printf_positions+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) + gl_cv_func_printf_positions="guessing no";; + beos*) gl_cv_func_printf_positions="guessing no";; + # Guess no on native Windows. + mingw* | pw*) gl_cv_func_printf_positions="guessing no";; + *) gl_cv_func_printf_positions="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +/* The string "%2$d %1$d", with dollar characters protected from the shell's + dollar expansion (possibly an autoconf bug). */ +static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; +static char buf[100]; +int main () +{ + sprintf (buf, format, 33, 55); + return (strcmp (buf, "55 33") != 0); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_printf_positions=yes +else + gl_cv_func_printf_positions=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_positions" >&5 +$as_echo "$gl_cv_func_printf_positions" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the grouping flag" >&5 +$as_echo_n "checking whether printf supports the grouping flag... " >&6; } +if ${gl_cv_func_printf_flag_grouping+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + cygwin*) gl_cv_func_printf_flag_grouping="guessing no";; + netbsd*) gl_cv_func_printf_flag_grouping="guessing no";; + # Guess no on native Windows. + mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";; + *) gl_cv_func_printf_flag_grouping="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +static char buf[100]; +int main () +{ + if (sprintf (buf, "%'d %d", 1234567, 99) < 0 + || buf[strlen (buf) - 1] != '9') + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_printf_flag_grouping=yes +else + gl_cv_func_printf_flag_grouping=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_flag_grouping" >&5 +$as_echo "$gl_cv_func_printf_flag_grouping" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the left-adjust flag correctly" >&5 +$as_echo_n "checking whether printf supports the left-adjust flag correctly... " >&6; } +if ${gl_cv_func_printf_flag_leftadjust+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + # Guess yes on HP-UX 11. + hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";; + # Guess no on HP-UX 10 and older. + hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";; + # Guess yes on native Windows. + mingw*) gl_cv_func_printf_flag_leftadjust="guessing yes";; + # Guess yes otherwise. + *) gl_cv_func_printf_flag_leftadjust="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +static char buf[100]; +int main () +{ + /* Check that a '-' flag is not annihilated by a negative width. */ + if (sprintf (buf, "a%-*sc", -3, "b") < 0 + || strcmp (buf, "ab c") != 0) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_printf_flag_leftadjust=yes +else + gl_cv_func_printf_flag_leftadjust=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_flag_leftadjust" >&5 +$as_echo "$gl_cv_func_printf_flag_leftadjust" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the zero flag correctly" >&5 +$as_echo_n "checking whether printf supports the zero flag correctly... " >&6; } +if ${gl_cv_func_printf_flag_zero+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_printf_flag_zero="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_flag_zero="guessing yes";; + # Guess no on native Windows. + mingw*) gl_cv_func_printf_flag_zero="guessing no";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_flag_zero="guessing no";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +static char buf[100]; +static double zero = 0.0; +int main () +{ + if (sprintf (buf, "%010f", 1.0 / zero, 33, 44, 55) < 0 + || (strcmp (buf, " inf") != 0 + && strcmp (buf, " infinity") != 0)) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_printf_flag_zero=yes +else + gl_cv_func_printf_flag_zero=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_flag_zero" >&5 +$as_echo "$gl_cv_func_printf_flag_zero" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports large precisions" >&5 +$as_echo_n "checking whether printf supports large precisions... " >&6; } +if ${gl_cv_func_printf_precision+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + # Guess no only on Solaris, native Windows, and BeOS systems. + solaris*) gl_cv_func_printf_precision="guessing no" ;; + mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;; + beos*) gl_cv_func_printf_precision="guessing no" ;; + *) gl_cv_func_printf_precision="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +static char buf[5000]; +int main () +{ + int result = 0; +#ifdef __BEOS__ + /* On BeOS, this would crash and show a dialog box. Avoid the crash. */ + return 1; +#endif + if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) + result |= 1; + if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5) + result |= 2; + if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5 + || buf[0] != '1') + result |= 4; + if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5 + || buf[0] != '1') + result |= 4; + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_printf_precision=yes +else + gl_cv_func_printf_precision=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_precision" >&5 +$as_echo "$gl_cv_func_printf_precision" >&6; } + + + gl_cv_c_multiarch=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + arch= + prev= + for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do + if test -n "$prev"; then + case $word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$arch" || test "$arch" = "$word"; then + arch="$word" + else + gl_cv_c_multiarch=yes + fi + ;; + esac + prev= + else + if test "x$word" = "x-arch"; then + prev=arch + fi + fi + done + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $gl_cv_c_multiarch = yes; then + APPLE_UNIVERSAL_BUILD=1 + else + APPLE_UNIVERSAL_BUILD=0 + fi + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf survives out-of-memory conditions" >&5 +$as_echo_n "checking whether printf survives out-of-memory conditions... " >&6; } +if ${gl_cv_func_printf_enomem+:} false; then : + $as_echo_n "(cached) " >&6 +else + + gl_cv_func_printf_enomem="guessing no" + if test "$cross_compiling" = no; then + if test $APPLE_UNIVERSAL_BUILD = 0; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#include <stdlib.h> +#if defined __MACH__ && defined __APPLE__ +/* Avoid a crash on Mac OS X. */ +#include <mach/mach.h> +#include <mach/mach_error.h> +#include <mach/thread_status.h> +#include <mach/exception.h> +#include <mach/task.h> +#include <pthread.h> +/* The exception port on which our thread listens. */ +static mach_port_t our_exception_port; +/* The main function of the thread listening for exceptions of type + EXC_BAD_ACCESS. */ +static void * +mach_exception_thread (void *arg) +{ + /* Buffer for a message to be received. */ + struct { + mach_msg_header_t head; + mach_msg_body_t msgh_body; + char data1024; + } msg; + mach_msg_return_t retval; + /* Wait for a message on the exception port. */ + retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), + our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); + if (retval != MACH_MSG_SUCCESS) + abort (); + exit (1); +} +static void +nocrash_init (void) +{ + mach_port_t self = mach_task_self (); + /* Allocate a port on which the thread shall listen for exceptions. */ + if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) + == KERN_SUCCESS) { + /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ + if (mach_port_insert_right (self, our_exception_port, our_exception_port, + MACH_MSG_TYPE_MAKE_SEND) + == KERN_SUCCESS) { + /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting + for us. */ + exception_mask_t mask = EXC_MASK_BAD_ACCESS; + /* Create the thread listening on the exception port. */ + pthread_attr_t attr; + pthread_t thread; + if (pthread_attr_init (&attr) == 0 + && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 + && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { + pthread_attr_destroy (&attr); + /* Replace the exception port info for these exceptions with our own. + Note that we replace the exception port for the entire task, not only + for a particular thread. This has the effect that when our exception + port gets the message, the thread specific exception port has already + been asked, and we don't need to bother about it. + See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ + task_set_exception_ports (self, mask, our_exception_port, + EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); + } + } + } +} +#elif defined _WIN32 && ! defined __CYGWIN__ +/* Avoid a crash on native Windows. */ +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#include <winerror.h> +static LONG WINAPI +exception_filter (EXCEPTION_POINTERS *ExceptionInfo) +{ + switch (ExceptionInfo->ExceptionRecord->ExceptionCode) + { + case EXCEPTION_ACCESS_VIOLATION: + case EXCEPTION_IN_PAGE_ERROR: + case EXCEPTION_STACK_OVERFLOW: + case EXCEPTION_GUARD_PAGE: + case EXCEPTION_PRIV_INSTRUCTION: + case EXCEPTION_ILLEGAL_INSTRUCTION: + case EXCEPTION_DATATYPE_MISALIGNMENT: + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: + case EXCEPTION_NONCONTINUABLE_EXCEPTION: + exit (1); + } + return EXCEPTION_CONTINUE_SEARCH; +} +static void +nocrash_init (void) +{ + SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); +} +#else +/* Avoid a crash on POSIX systems. */ +#include <signal.h> +#include <unistd.h> +/* A POSIX signal handler. */ +static void +exception_handler (int sig) +{ + _exit (1); +} +static void +nocrash_init (void) +{ +#ifdef SIGSEGV + signal (SIGSEGV, exception_handler); +#endif +#ifdef SIGBUS + signal (SIGBUS, exception_handler); +#endif +} +#endif + +#include <stdio.h> +#include <sys/types.h> +#include <sys/time.h> +#include <sys/resource.h> +#include <errno.h> +int main() +{ + struct rlimit limit; + int ret; + nocrash_init (); + /* Some printf implementations allocate temporary space with malloc. */ + /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ +#ifdef RLIMIT_DATA + if (getrlimit (RLIMIT_DATA, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_DATA, &limit) < 0) + return 77; +#endif + /* On Linux systems, malloc() is limited by RLIMIT_AS. */ +#ifdef RLIMIT_AS + if (getrlimit (RLIMIT_AS, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_AS, &limit) < 0) + return 77; +#endif + /* Some printf implementations allocate temporary space on the stack. */ +#ifdef RLIMIT_STACK + if (getrlimit (RLIMIT_STACK, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_STACK, &limit) < 0) + return 77; +#endif + ret = printf ("%.5000000f", 1.0); + return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + (./conftest 2>&5 + result=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $result" >&5 + if test $result != 0 && test $result != 77; then result=1; fi + exit $result + ) >/dev/null 2>/dev/null + case $? in + 0) gl_cv_func_printf_enomem="yes" ;; + 77) gl_cv_func_printf_enomem="guessing no" ;; + *) gl_cv_func_printf_enomem="no" ;; + esac + else + gl_cv_func_printf_enomem="guessing no" + fi + rm -fr conftest* + else + gl_cv_func_printf_enomem="guessing no" + fi + fi + if test "$gl_cv_func_printf_enomem" = "guessing no"; then + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on Solaris. + solaris*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on AIX. + aix*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on HP-UX/hppa. + hpux*) case "$host_cpu" in + hppa*) gl_cv_func_printf_enomem="guessing yes";; + *) gl_cv_func_printf_enomem="guessing no";; + esac + ;; + # Guess yes on IRIX. + irix*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on OSF/1. + osf*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on Haiku. + haiku*) gl_cv_func_printf_enomem="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_enomem="guessing no";; + esac + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_enomem" >&5 +$as_echo "$gl_cv_func_printf_enomem" >&6; } + + + + case "$gl_cv_func_printf_long_double" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5 +$as_echo_n "checking for unsigned long long int... " >&6; } +if ${ac_cv_type_unsigned_long_long_int+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_type_unsigned_long_long_int=yes + if test "x${ac_cv_prog_cc_c99-no}" = xno; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* For now, do not test the preprocessor; as of 2007 there are too many + implementations with broken preprocessors. Perhaps this can + be revisited in 2012. In the meantime, code should not expect + #if to work with literals wider than 32 bits. */ + /* Test literals. */ + long long int ll = 9223372036854775807ll; + long long int nll = -9223372036854775807LL; + unsigned long long int ull = 18446744073709551615ULL; + /* Test constant expressions. */ + typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) + ? 1 : -1)]; + typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 + ? 1 : -1)]; + int i = 63; +int +main () +{ +/* Test availability of runtime routines for shift and division. */ + long long int llmax = 9223372036854775807ll; + unsigned long long int ullmax = 18446744073709551615ull; + return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) + | (llmax / ll) | (llmax % ll) + | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) + | (ullmax / ull) | (ullmax % ull)); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +else + ac_cv_type_unsigned_long_long_int=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5 +$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; } + if test $ac_cv_type_unsigned_long_long_int = yes; then + +$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h + + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 +$as_echo_n "checking for long long int... " >&6; } +if ${ac_cv_type_long_long_int+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_type_long_long_int=yes + if test "x${ac_cv_prog_cc_c99-no}" = xno; then + ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int + if test $ac_cv_type_long_long_int = yes; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + #ifndef LLONG_MAX + # define HALF \ + (1LL << (sizeof (long long int) * CHAR_BIT - 2)) + # define LLONG_MAX (HALF - 1 + HALF) + #endif +int +main () +{ +long long int n = 1; + int i; + for (i = 0; ; i++) + { + long long int m = n << i; + if (m >> i != n) + return 1; + if (LLONG_MAX / 2 < m) + break; + } + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_type_long_long_int=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 +$as_echo "$ac_cv_type_long_long_int" >&6; } + if test $ac_cv_type_long_long_int = yes; then + +$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 +$as_echo_n "checking for wchar_t... " >&6; } +if ${gt_cv_c_wchar_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stddef.h> + wchar_t foo = (wchar_t)'\0'; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_c_wchar_t=yes +else + gt_cv_c_wchar_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 +$as_echo "$gt_cv_c_wchar_t" >&6; } + if test $gt_cv_c_wchar_t = yes; then + +$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 +$as_echo_n "checking for wint_t... " >&6; } +if ${gt_cv_c_wint_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included + before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> + wint_t foo = (wchar_t)'\0'; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_c_wint_t=yes +else + gt_cv_c_wint_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 +$as_echo "$gt_cv_c_wint_t" >&6; } + if test $gt_cv_c_wint_t = yes; then + +$as_echo "#define HAVE_WINT_T 1" >>confdefs.h + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wint_t is too small" >&5 +$as_echo_n "checking whether wint_t is too small... " >&6; } +if ${gl_cv_type_wint_t_too_small+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include <stddef.h> +# include <stdio.h> +# include <time.h> +#endif +#include <wchar.h> + int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_type_wint_t_too_small=no +else + gl_cv_type_wint_t_too_small=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_too_small" >&5 +$as_echo "$gl_cv_type_wint_t_too_small" >&6; } + if test $gl_cv_type_wint_t_too_small = yes; then + GNULIB_OVERRIDES_WINT_T=1 + else + GNULIB_OVERRIDES_WINT_T=0 + fi + else + GNULIB_OVERRIDES_WINT_T=0 + fi + + + + + + + if test $ac_cv_header_features_h = yes; then + HAVE_FEATURES_H=1 + else + HAVE_FEATURES_H=0 + fi + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5 +$as_echo_n "checking for intmax_t... " >&6; } +if ${gt_cv_c_intmax_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stddef.h> +#include <stdlib.h> +#if HAVE_STDINT_H_WITH_UINTMAX +#include <stdint.h> +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +#include <inttypes.h> +#endif + +int +main () +{ +intmax_t x = -1; return !x; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_c_intmax_t=yes +else + gt_cv_c_intmax_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5 +$as_echo "$gt_cv_c_intmax_t" >&6; } + if test $gt_cv_c_intmax_t = yes; then + +$as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h + + else + + test $ac_cv_type_long_long_int = yes \ + && ac_type='long long' \ + || ac_type='long' + +cat >>confdefs.h <<_ACEOF +#define intmax_t $ac_type +_ACEOF + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'double'" >&5 +$as_echo_n "checking where to find the exponent in a 'double'... " >&6; } +if ${gl_cv_cc_double_expbit0+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if defined arm || defined __arm || defined __arm__ + mixed_endianness +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "mixed_endianness" >/dev/null 2>&1; then : + gl_cv_cc_double_expbit0="unknown" +else + + : +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +: + case $ac_cv_c_bigendian in #( + yes) + gl_cv_cc_double_expbit0="word 0 bit 20";; #( + no) + gl_cv_cc_double_expbit0="word 1 bit 20" ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + gl_cv_cc_double_expbit0="unknown" ;; + esac + + +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { double value; unsigned int word[NWORDS]; } memory_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (double x) +{ + memory_double m; + size_t i; + /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ + memset (&m, 0, sizeof (memory_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25); + add_to_ored_words (0.5); + add_to_ored_words (1.0); + add_to_ored_words (2.0); + add_to_ored_words (4.0); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_cc_double_expbit0=`cat conftest.out` +else + gl_cv_cc_double_expbit0="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_expbit0" >&5 +$as_echo "$gl_cv_cc_double_expbit0" >&6; } + case "$gl_cv_cc_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define DBL_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define DBL_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf returns a byte count as in C99" >&5 +$as_echo_n "checking whether snprintf returns a byte count as in C99... " >&6; } +if ${gl_cv_func_snprintf_retval_c99+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4].*) gl_cv_func_snprintf_retval_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on Mac OS X >= 10.3. + darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; + darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on OpenBSD >= 3.9. + openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) + gl_cv_func_snprintf_retval_c99="guessing no";; + openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on Solaris >= 2.10. + solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; + solaris*) gl_cv_func_printf_sizes_c99="guessing no";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; + aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_snprintf_retval_c99="guessing no";; + netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on MSVC, no on mingw. + mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _MSC_VER + Known +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Known" >/dev/null 2>&1; then : + gl_cv_func_snprintf_retval_c99="guessing yes" +else + gl_cv_func_snprintf_retval_c99="guessing no" +fi +rm -f conftest* + + ;; + # If we don't know, assume the worst. + *) gl_cv_func_snprintf_retval_c99="guessing no";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +#if HAVE_SNPRINTF +# define my_snprintf snprintf +#else +# include <stdarg.h> +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +#endif +static char buf[100]; +int main () +{ + strcpy (buf, "ABCDEF"); + if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7) + return 1; + if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7) + return 2; + if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7) + return 3; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_snprintf_retval_c99=yes +else + gl_cv_func_snprintf_retval_c99=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_retval_c99" >&5 +$as_echo "$gl_cv_func_snprintf_retval_c99" >&6; } + + + + + + + for ac_func in snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + ac_fn_c_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include <stdio.h> +" +if test "x$ac_cv_have_decl__snprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL__SNPRINTF $ac_have_decl +_ACEOF + + + + case "$gl_cv_func_snprintf_retval_c99" in + *yes) + +$as_echo "#define HAVE_SNPRINTF_RETVAL_C99 1" >>confdefs.h + + ;; + esac + + + GNULIB_DPRINTF=0; + GNULIB_FCLOSE=0; + GNULIB_FDOPEN=0; + GNULIB_FFLUSH=0; + GNULIB_FGETC=0; + GNULIB_FGETS=0; + GNULIB_FOPEN=0; + GNULIB_FPRINTF=0; + GNULIB_FPRINTF_POSIX=0; + GNULIB_FPURGE=0; + GNULIB_FPUTC=0; + GNULIB_FPUTS=0; + GNULIB_FREAD=0; + GNULIB_FREOPEN=0; + GNULIB_FSCANF=0; + GNULIB_FSEEK=0; + GNULIB_FSEEKO=0; + GNULIB_FTELL=0; + GNULIB_FTELLO=0; + GNULIB_FWRITE=0; + GNULIB_GETC=0; + GNULIB_GETCHAR=0; + GNULIB_GETDELIM=0; + GNULIB_GETLINE=0; + GNULIB_OBSTACK_PRINTF=0; + GNULIB_OBSTACK_PRINTF_POSIX=0; + GNULIB_PCLOSE=0; + GNULIB_PERROR=0; + GNULIB_POPEN=0; + GNULIB_PRINTF=0; + GNULIB_PRINTF_POSIX=0; + GNULIB_PUTC=0; + GNULIB_PUTCHAR=0; + GNULIB_PUTS=0; + GNULIB_REMOVE=0; + GNULIB_RENAME=0; + GNULIB_RENAMEAT=0; + GNULIB_SCANF=0; + GNULIB_SNPRINTF=0; + GNULIB_SPRINTF_POSIX=0; + GNULIB_STDIO_H_NONBLOCKING=0; + GNULIB_STDIO_H_SIGPIPE=0; + GNULIB_TMPFILE=0; + GNULIB_VASPRINTF=0; + GNULIB_VFSCANF=0; + GNULIB_VSCANF=0; + GNULIB_VDPRINTF=0; + GNULIB_VFPRINTF=0; + GNULIB_VFPRINTF_POSIX=0; + GNULIB_VPRINTF=0; + GNULIB_VPRINTF_POSIX=0; + GNULIB_VSNPRINTF=0; + GNULIB_VSPRINTF_POSIX=0; + HAVE_DECL_FPURGE=1; + HAVE_DECL_FSEEKO=1; + HAVE_DECL_FTELLO=1; + HAVE_DECL_GETDELIM=1; + HAVE_DECL_GETLINE=1; + HAVE_DECL_OBSTACK_PRINTF=1; + HAVE_DECL_SNPRINTF=1; + HAVE_DECL_VSNPRINTF=1; + HAVE_DPRINTF=1; + HAVE_FSEEKO=1; + HAVE_FTELLO=1; + HAVE_PCLOSE=1; + HAVE_POPEN=1; + HAVE_RENAMEAT=1; + HAVE_VASPRINTF=1; + HAVE_VDPRINTF=1; + REPLACE_DPRINTF=0; + REPLACE_FCLOSE=0; + REPLACE_FDOPEN=0; + REPLACE_FFLUSH=0; + REPLACE_FOPEN=0; + REPLACE_FPRINTF=0; + REPLACE_FPURGE=0; + REPLACE_FREOPEN=0; + REPLACE_FSEEK=0; + REPLACE_FSEEKO=0; + REPLACE_FTELL=0; + REPLACE_FTELLO=0; + REPLACE_GETDELIM=0; + REPLACE_GETLINE=0; + REPLACE_OBSTACK_PRINTF=0; + REPLACE_PERROR=0; + REPLACE_POPEN=0; + REPLACE_PRINTF=0; + REPLACE_REMOVE=0; + REPLACE_RENAME=0; + REPLACE_RENAMEAT=0; + REPLACE_SNPRINTF=0; + REPLACE_SPRINTF=0; + REPLACE_STDIO_READ_FUNCS=0; + REPLACE_STDIO_WRITE_FUNCS=0; + REPLACE_TMPFILE=0; + REPLACE_VASPRINTF=0; + REPLACE_VDPRINTF=0; + REPLACE_VFPRINTF=0; + REPLACE_VPRINTF=0; + REPLACE_VSNPRINTF=0; + REPLACE_VSPRINTF=0; + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexp() can be used without linking with libm" >&5 +$as_echo_n "checking whether frexp() can be used without linking with libm... " >&6; } +if ${gl_cv_func_frexp_no_libm+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + double x; +int +main () +{ +int e; return frexp (x, &e) > 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_frexp_no_libm=yes +else + gl_cv_func_frexp_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_no_libm" >&5 +$as_echo "$gl_cv_func_frexp_no_libm" >&6; } + +ac_fn_c_check_decl "$LINENO" "alarm" "ac_cv_have_decl_alarm" "$ac_includes_default" +if test "x$ac_cv_have_decl_alarm" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ALARM $ac_have_decl +_ACEOF + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdin defaults to large file offsets" >&5 +$as_echo_n "checking whether stdin defaults to large file offsets... " >&6; } +if ${gl_cv_var_stdin_large_offset+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> +int +main () +{ +#if defined __SL64 && defined __SCLE /* cygwin */ + /* Cygwin 1.5.24 and earlier fail to put stdin in 64-bit mode, making + fseeko/ftello needlessly fail. This bug was fixed in 1.5.25, and + it is easier to do a version check than building a runtime test. */ +# include <cygwin/version.h> +# if CYGWIN_VERSION_DLL_COMBINED < CYGWIN_VERSION_DLL_MAKE_COMBINED (1005, 25) + choke me +# endif +#endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_var_stdin_large_offset=yes +else + gl_cv_var_stdin_large_offset=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_var_stdin_large_offset" >&5 +$as_echo "$gl_cv_var_stdin_large_offset" >&6; } + + + + + + case "$host_os" in + mingw*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit off_t" >&5 +$as_echo_n "checking for 64-bit off_t... " >&6; } +if ${gl_cv_type_off_t_64+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1]; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_type_off_t_64=yes +else + gl_cv_type_off_t_64=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_off_t_64" >&5 +$as_echo "$gl_cv_type_off_t_64" >&6; } + if test $gl_cv_type_off_t_64 = no; then + WINDOWS_64_BIT_OFF_T=1 + else + WINDOWS_64_BIT_OFF_T=0 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit st_size" >&5 +$as_echo_n "checking for 64-bit st_size... " >&6; } +if ${gl_cv_member_st_size_64+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + struct stat buf; + int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1]; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_member_st_size_64=yes +else + gl_cv_member_st_size_64=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_member_st_size_64" >&5 +$as_echo "$gl_cv_member_st_size_64" >&6; } + if test $gl_cv_member_st_size_64 = no; then + WINDOWS_64_BIT_ST_SIZE=1 + else + WINDOWS_64_BIT_ST_SIZE=0 + fi + ;; + *) + WINDOWS_64_BIT_OFF_T=0 + WINDOWS_64_BIT_ST_SIZE=0 + ;; + esac + + + + + + + + + +$as_echo "#define _USE_STD_STAT 1" >>confdefs.h + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_sys_types_h='<'sys/types.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/types.h>" >&5 +$as_echo_n "checking absolute name of <sys/types.h>... " >&6; } +if ${gl_cv_next_sys_types_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'sys/types.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_sys_types_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_sys_types_h + gl_cv_next_sys_types_h='"'$gl_header'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_types_h" >&5 +$as_echo "$gl_cv_next_sys_types_h" >&6; } + fi + NEXT_SYS_TYPES_H=$gl_cv_next_sys_types_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'sys/types.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_sys_types_h + fi + NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H=$gl_next_as_first_directive + + + + + + + + + + + + + WINDOWS_STAT_INODES=0 + + + +ac_fn_c_check_decl "$LINENO" "fseeko" "ac_cv_have_decl_fseeko" "$ac_includes_default" +if test "x$ac_cv_have_decl_fseeko" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FSEEKO $ac_have_decl +_ACEOF + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fseeko" >&5 +$as_echo_n "checking for fseeko... " >&6; } +if ${gl_cv_func_fseeko+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> + +int +main () +{ +fseeko (stdin, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_fseeko=yes +else + gl_cv_func_fseeko=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fseeko" >&5 +$as_echo "$gl_cv_func_fseeko" >&6; } + + + if test $ac_cv_have_decl_fseeko = no; then + HAVE_DECL_FSEEKO=0 + fi + + if test $gl_cv_func_fseeko = no; then + HAVE_FSEEKO=0 + else + if test $WINDOWS_64_BIT_OFF_T = 1; then + REPLACE_FSEEKO=1 + fi + if test $gl_cv_var_stdin_large_offset = no; then + REPLACE_FSEEKO=1 + fi + + fi + + + + + GNULIB_FCHMODAT=0; + GNULIB_FSTAT=0; + GNULIB_FSTATAT=0; + GNULIB_FUTIMENS=0; + GNULIB_LCHMOD=0; + GNULIB_LSTAT=0; + GNULIB_MKDIRAT=0; + GNULIB_MKFIFO=0; + GNULIB_MKFIFOAT=0; + GNULIB_MKNOD=0; + GNULIB_MKNODAT=0; + GNULIB_STAT=0; + GNULIB_UTIMENSAT=0; + GNULIB_OVERRIDES_STRUCT_STAT=0; + HAVE_FCHMODAT=1; + HAVE_FSTATAT=1; + HAVE_FUTIMENS=1; + HAVE_LCHMOD=1; + HAVE_LSTAT=1; + HAVE_MKDIRAT=1; + HAVE_MKFIFO=1; + HAVE_MKFIFOAT=1; + HAVE_MKNOD=1; + HAVE_MKNODAT=1; + HAVE_UTIMENSAT=1; + REPLACE_FSTAT=0; + REPLACE_FSTATAT=0; + REPLACE_FUTIMENS=0; + REPLACE_LSTAT=0; + REPLACE_MKDIR=0; + REPLACE_MKFIFO=0; + REPLACE_MKNOD=0; + REPLACE_STAT=0; + REPLACE_UTIMENSAT=0; + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5 +$as_echo_n "checking whether stat file-mode macros are broken... " >&6; } +if ${ac_cv_header_stat_broken+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <sys/stat.h> + +#if defined S_ISBLK && defined S_IFDIR +extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1]; +#endif + +#if defined S_ISBLK && defined S_IFCHR +extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1]; +#endif + +#if defined S_ISLNK && defined S_IFREG +extern char c3[S_ISLNK (S_IFREG) ? -1 : 1]; +#endif + +#if defined S_ISSOCK && defined S_IFREG +extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1]; +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stat_broken=no +else + ac_cv_header_stat_broken=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5 +$as_echo "$ac_cv_header_stat_broken" >&6; } +if test $ac_cv_header_stat_broken = yes; then + +$as_echo "#define STAT_MACROS_BROKEN 1" >>confdefs.h + +fi + + + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_sys_stat_h='<'sys/stat.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/stat.h>" >&5 +$as_echo_n "checking absolute name of <sys/stat.h>... " >&6; } +if ${gl_cv_next_sys_stat_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_sys_stat_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/stat.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'sys/stat.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_sys_stat_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_sys_stat_h + gl_cv_next_sys_stat_h='"'$gl_header'"' + else + gl_cv_next_sys_stat_h='<'sys/stat.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_stat_h" >&5 +$as_echo "$gl_cv_next_sys_stat_h" >&6; } + fi + NEXT_SYS_STAT_H=$gl_cv_next_sys_stat_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'sys/stat.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_sys_stat_h + fi + NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H=$gl_next_as_first_directive + + + + + + + + + WINDOWS_STAT_TIMESPEC=0 + + + + + + + + + ac_fn_c_check_type "$LINENO" "nlink_t" "ac_cv_type_nlink_t" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_type_nlink_t" = xyes; then : + +else + +$as_echo "#define nlink_t int" >>confdefs.h + +fi + + + + + + +ac_fn_c_check_decl "$LINENO" "ftello" "ac_cv_have_decl_ftello" "$ac_includes_default" +if test "x$ac_cv_have_decl_ftello" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FTELLO $ac_have_decl +_ACEOF + + + + + + + + + + + if test $ac_cv_have_decl_ftello = no; then + HAVE_DECL_FTELLO=0 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ftello" >&5 +$as_echo_n "checking for ftello... " >&6; } +if ${gl_cv_func_ftello+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> +int +main () +{ +ftello (stdin); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_ftello=yes +else + gl_cv_func_ftello=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ftello" >&5 +$as_echo "$gl_cv_func_ftello" >&6; } + if test $gl_cv_func_ftello = no; then + HAVE_FTELLO=0 + else + if test $WINDOWS_64_BIT_OFF_T = 1; then + REPLACE_FTELLO=1 + fi + if test $gl_cv_var_stdin_large_offset = no; then + REPLACE_FTELLO=1 + fi + if test $REPLACE_FTELLO = 0; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ftello works" >&5 +$as_echo_n "checking whether ftello works... " >&6; } +if ${gl_cv_func_ftello_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris. + solaris*) gl_cv_func_ftello_works="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_ftello_works="guessing yes" ;; + # Guess yes otherwise. + *) gl_cv_func_ftello_works="guessing yes" ;; + esac + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#define TESTFILE "conftest.tmp" +int +main (void) +{ + FILE *fp; + + /* Create a file with some contents. */ + fp = fopen (TESTFILE, "w"); + if (fp == NULL) + return 70; + if (fwrite ("foogarsh", 1, 8, fp) < 8) + { fclose (fp); return 71; } + if (fclose (fp)) + return 72; + + /* The file's contents is now "foogarsh". */ + + /* Try writing after reading to EOF. */ + fp = fopen (TESTFILE, "r+"); + if (fp == NULL) + return 73; + if (fseek (fp, -1, SEEK_END)) + { fclose (fp); return 74; } + if (!(getc (fp) == 'h')) + { fclose (fp); return 1; } + if (!(getc (fp) == EOF)) + { fclose (fp); return 2; } + if (!(ftell (fp) == 8)) + { fclose (fp); return 3; } + if (!(ftell (fp) == 8)) + { fclose (fp); return 4; } + if (!(putc ('!', fp) == '!')) + { fclose (fp); return 5; } + if (!(ftell (fp) == 9)) + { fclose (fp); return 6; } + if (!(fclose (fp) == 0)) + return 7; + fp = fopen (TESTFILE, "r"); + if (fp == NULL) + return 75; + { + char buf[10]; + if (!(fread (buf, 1, 10, fp) == 9)) + { fclose (fp); return 10; } + if (!(memcmp (buf, "foogarsh!", 9) == 0)) + { fclose (fp); return 11; } + } + if (!(fclose (fp) == 0)) + return 12; + + /* The file's contents is now "foogarsh!". */ + + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_ftello_works=yes +else + gl_cv_func_ftello_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ftello_works" >&5 +$as_echo "$gl_cv_func_ftello_works" >&6; } + case "$gl_cv_func_ftello_works" in + *yes) ;; + *) + REPLACE_FTELLO=1 + +$as_echo "#define FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE 1" >>confdefs.h + + ;; + esac + fi + fi + + + +ac_fn_c_check_decl "$LINENO" "getdelim" "ac_cv_have_decl_getdelim" "$ac_includes_default" +if test "x$ac_cv_have_decl_getdelim" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETDELIM $ac_have_decl +_ACEOF + + + + + +ac_fn_c_check_decl "$LINENO" "getdtablesize" "ac_cv_have_decl_getdtablesize" "$ac_includes_default" +if test "x$ac_cv_have_decl_getdtablesize" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETDTABLESIZE $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "getline" "ac_cv_have_decl_getline" "$ac_includes_default" +if test "x$ac_cv_have_decl_getline" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETLINE $ac_have_decl +_ACEOF + + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_getopt_h='<'getopt.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <getopt.h>" >&5 +$as_echo_n "checking absolute name of <getopt.h>... " >&6; } +if ${gl_cv_next_getopt_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_getopt_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <getopt.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'getopt.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_getopt_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_getopt_h + gl_cv_next_getopt_h='"'$gl_header'"' + else + gl_cv_next_getopt_h='<'getopt.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_getopt_h" >&5 +$as_echo "$gl_cv_next_getopt_h" >&6; } + fi + NEXT_GETOPT_H=$gl_cv_next_getopt_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'getopt.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_getopt_h + fi + NEXT_AS_FIRST_DIRECTIVE_GETOPT_H=$gl_next_as_first_directive + + + + + if test $ac_cv_header_getopt_h = yes; then + HAVE_GETOPT_H=1 + else + HAVE_GETOPT_H=0 + fi + + + gl_replace_getopt= + + if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then + for ac_header in getopt.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" +if test "x$ac_cv_header_getopt_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETOPT_H 1 +_ACEOF + +else + gl_replace_getopt=yes +fi + +done + + fi + + if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then + for ac_func in getopt_long_only +do : + ac_fn_c_check_func "$LINENO" "getopt_long_only" "ac_cv_func_getopt_long_only" +if test "x$ac_cv_func_getopt_long_only" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETOPT_LONG_ONLY 1 +_ACEOF + +else + gl_replace_getopt=yes +fi +done + + fi + + if test -z "$gl_replace_getopt"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getopt is POSIX compatible" >&5 +$as_echo_n "checking whether getopt is POSIX compatible... " >&6; } +if ${gl_cv_func_getopt_posix+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $cross_compiling = no; then + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +int +main () +{ + static char program[] = "program"; + static char a[] = "-a"; + static char foo[] = "foo"; + static char bar[] = "bar"; + char *argv[] = { program, a, foo, bar, NULL }; + int c; + + c = getopt (4, argv, "ab"); + if (!(c == 'a')) + return 1; + c = getopt (4, argv, "ab"); + if (!(c == -1)) + return 2; + if (!(optind == 2)) + return 3; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_getopt_posix=maybe +else + gl_cv_func_getopt_posix=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + if test $gl_cv_func_getopt_posix = maybe; then + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +int +main () +{ + static char program[] = "program"; + static char donald[] = "donald"; + static char p[] = "-p"; + static char billy[] = "billy"; + static char duck[] = "duck"; + static char a[] = "-a"; + static char bar[] = "bar"; + char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; + int c; + + c = getopt (7, argv, "+abp:q:"); + if (!(c == -1)) + return 4; + if (!(strcmp (argv[0], "program") == 0)) + return 5; + if (!(strcmp (argv[1], "donald") == 0)) + return 6; + if (!(strcmp (argv[2], "-p") == 0)) + return 7; + if (!(strcmp (argv[3], "billy") == 0)) + return 8; + if (!(strcmp (argv[4], "duck") == 0)) + return 9; + if (!(strcmp (argv[5], "-a") == 0)) + return 10; + if (!(strcmp (argv[6], "bar") == 0)) + return 11; + if (!(optind == 1)) + return 12; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_getopt_posix=maybe +else + gl_cv_func_getopt_posix=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + if test $gl_cv_func_getopt_posix = maybe; then + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +int +main () +{ + static char program[] = "program"; + static char ab[] = "-ab"; + char *argv[3] = { program, ab, NULL }; + if (getopt (2, argv, "ab:") != 'a') + return 13; + if (getopt (2, argv, "ab:") != '?') + return 14; + if (optopt != 'b') + return 15; + if (optind != 2) + return 16; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_getopt_posix=yes +else + gl_cv_func_getopt_posix=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + else + case "$host_os" in + darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";; + *) gl_cv_func_getopt_posix="guessing yes";; + esac + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_posix" >&5 +$as_echo "$gl_cv_func_getopt_posix" >&6; } + case "$gl_cv_func_getopt_posix" in + *no) gl_replace_getopt=yes ;; + esac + fi + + if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt function" >&5 +$as_echo_n "checking for working GNU getopt function... " >&6; } +if ${gl_cv_func_getopt_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the + # optstring is necessary for programs like m4 that have POSIX-mandated + # semantics for supporting options interspersed with files. + # Also, since getopt_long is a GNU extension, we require optind=0. + # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; + # so take care to revert to the correct (non-)export state. + gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' + case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in + xx) gl_had_POSIXLY_CORRECT=exported ;; + x) gl_had_POSIXLY_CORRECT=yes ;; + *) gl_had_POSIXLY_CORRECT= ;; + esac + POSIXLY_CORRECT=1 + export POSIXLY_CORRECT + if test "$cross_compiling" = yes; then : + gl_cv_func_getopt_gnu="guessing no" + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <getopt.h> + #include <stddef.h> + #include <string.h> + +#include <stdlib.h> +#if defined __MACH__ && defined __APPLE__ +/* Avoid a crash on Mac OS X. */ +#include <mach/mach.h> +#include <mach/mach_error.h> +#include <mach/thread_status.h> +#include <mach/exception.h> +#include <mach/task.h> +#include <pthread.h> +/* The exception port on which our thread listens. */ +static mach_port_t our_exception_port; +/* The main function of the thread listening for exceptions of type + EXC_BAD_ACCESS. */ +static void * +mach_exception_thread (void *arg) +{ + /* Buffer for a message to be received. */ + struct { + mach_msg_header_t head; + mach_msg_body_t msgh_body; + char data[1024]; + } msg; + mach_msg_return_t retval; + /* Wait for a message on the exception port. */ + retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), + our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); + if (retval != MACH_MSG_SUCCESS) + abort (); + exit (1); +} +static void +nocrash_init (void) +{ + mach_port_t self = mach_task_self (); + /* Allocate a port on which the thread shall listen for exceptions. */ + if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) + == KERN_SUCCESS) { + /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ + if (mach_port_insert_right (self, our_exception_port, our_exception_port, + MACH_MSG_TYPE_MAKE_SEND) + == KERN_SUCCESS) { + /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting + for us. */ + exception_mask_t mask = EXC_MASK_BAD_ACCESS; + /* Create the thread listening on the exception port. */ + pthread_attr_t attr; + pthread_t thread; + if (pthread_attr_init (&attr) == 0 + && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 + && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { + pthread_attr_destroy (&attr); + /* Replace the exception port info for these exceptions with our own. + Note that we replace the exception port for the entire task, not only + for a particular thread. This has the effect that when our exception + port gets the message, the thread specific exception port has already + been asked, and we don't need to bother about it. + See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ + task_set_exception_ports (self, mask, our_exception_port, + EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); + } + } + } +} +#elif defined _WIN32 && ! defined __CYGWIN__ +/* Avoid a crash on native Windows. */ +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#include <winerror.h> +static LONG WINAPI +exception_filter (EXCEPTION_POINTERS *ExceptionInfo) +{ + switch (ExceptionInfo->ExceptionRecord->ExceptionCode) + { + case EXCEPTION_ACCESS_VIOLATION: + case EXCEPTION_IN_PAGE_ERROR: + case EXCEPTION_STACK_OVERFLOW: + case EXCEPTION_GUARD_PAGE: + case EXCEPTION_PRIV_INSTRUCTION: + case EXCEPTION_ILLEGAL_INSTRUCTION: + case EXCEPTION_DATATYPE_MISALIGNMENT: + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: + case EXCEPTION_NONCONTINUABLE_EXCEPTION: + exit (1); + } + return EXCEPTION_CONTINUE_SEARCH; +} +static void +nocrash_init (void) +{ + SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); +} +#else +/* Avoid a crash on POSIX systems. */ +#include <signal.h> +#include <unistd.h> +/* A POSIX signal handler. */ +static void +exception_handler (int sig) +{ + _exit (1); +} +static void +nocrash_init (void) +{ +#ifdef SIGSEGV + signal (SIGSEGV, exception_handler); +#endif +#ifdef SIGBUS + signal (SIGBUS, exception_handler); +#endif +} +#endif + + +int +main () +{ + + int result = 0; + + nocrash_init(); + + /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, + and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, + OSF/1 5.1, Solaris 10. */ + { + static char conftest[] = "conftest"; + static char plus[] = "-+"; + char *argv[3] = { conftest, plus, NULL }; + opterr = 0; + if (getopt (2, argv, "+a") != '?') + result |= 1; + } + /* This code succeeds on glibc 2.8, mingw, + and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, + IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ + { + static char program[] = "program"; + static char p[] = "-p"; + static char foo[] = "foo"; + static char bar[] = "bar"; + char *argv[] = { program, p, foo, bar, NULL }; + + optind = 1; + if (getopt (4, argv, "p::") != 'p') + result |= 2; + else if (optarg != NULL) + result |= 4; + else if (getopt (4, argv, "p::") != -1) + result |= 6; + else if (optind != 2) + result |= 8; + } + /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ + { + static char program[] = "program"; + static char foo[] = "foo"; + static char p[] = "-p"; + char *argv[] = { program, foo, p, NULL }; + optind = 0; + if (getopt (3, argv, "-p") != 1) + result |= 16; + else if (getopt (3, argv, "-p") != 'p') + result |= 16; + } + /* This code fails on glibc 2.11. */ + { + static char program[] = "program"; + static char b[] = "-b"; + static char a[] = "-a"; + char *argv[] = { program, b, a, NULL }; + optind = opterr = 0; + if (getopt (3, argv, "+:a:b") != 'b') + result |= 32; + else if (getopt (3, argv, "+:a:b") != ':') + result |= 32; + } + /* This code dumps core on glibc 2.14. */ + { + static char program[] = "program"; + static char w[] = "-W"; + static char dummy[] = "dummy"; + char *argv[] = { program, w, dummy, NULL }; + optind = opterr = 1; + if (getopt (3, argv, "W;") != 'W') + result |= 64; + } + return result; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_getopt_gnu=yes +else + gl_cv_func_getopt_gnu=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + case $gl_had_POSIXLY_CORRECT in + exported) ;; + yes) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;}; POSIXLY_CORRECT=1 ;; + *) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;} ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_gnu" >&5 +$as_echo "$gl_cv_func_getopt_gnu" >&6; } + if test "$gl_cv_func_getopt_gnu" != yes; then + gl_replace_getopt=yes + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt_long function" >&5 +$as_echo_n "checking for working GNU getopt_long function... " >&6; } +if ${gl_cv_func_getopt_long_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + openbsd*) gl_cv_func_getopt_long_gnu="guessing no";; + *) gl_cv_func_getopt_long_gnu="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <getopt.h> + #include <stddef.h> + #include <string.h> + +int +main () +{ +static const struct option long_options[] = + { + { "xtremely-",no_argument, NULL, 1003 }, + { "xtra", no_argument, NULL, 1001 }, + { "xtreme", no_argument, NULL, 1002 }, + { "xtremely", no_argument, NULL, 1003 }, + { NULL, 0, NULL, 0 } + }; + /* This code fails on OpenBSD 5.0. */ + { + static char program[] = "program"; + static char xtremel[] = "--xtremel"; + char *argv[] = { program, xtremel, NULL }; + int option_index; + optind = 1; opterr = 0; + if (getopt_long (2, argv, "", long_options, &option_index) != 1003) + return 1; + } + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_getopt_long_gnu=yes +else + gl_cv_func_getopt_long_gnu=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_long_gnu" >&5 +$as_echo "$gl_cv_func_getopt_long_gnu" >&6; } + case "$gl_cv_func_getopt_long_gnu" in + *yes) ;; + *) gl_replace_getopt=yes ;; + esac + fi + fi + + + + + + + + + + + + if test $ac_cv_func_getpass = no; then + HAVE_GETPASS=0 + fi + + + + + +ac_fn_c_check_decl "$LINENO" "fflush_unlocked" "ac_cv_have_decl_fflush_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fflush_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FFLUSH_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "flockfile" "ac_cv_have_decl_flockfile" "$ac_includes_default" +if test "x$ac_cv_have_decl_flockfile" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FLOCKFILE $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fputs_unlocked" "ac_cv_have_decl_fputs_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fputs_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FPUTS_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "funlockfile" "ac_cv_have_decl_funlockfile" "$ac_includes_default" +if test "x$ac_cv_have_decl_funlockfile" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FUNLOCKFILE $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "putc_unlocked" "ac_cv_have_decl_putc_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_putc_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PUTC_UNLOCKED $ac_have_decl +_ACEOF + + + + + +: + + + + GNULIB_GETTIMEOFDAY=0; + HAVE_GETTIMEOFDAY=1; + HAVE_STRUCT_TIMEVAL=1; + HAVE_SYS_TIME_H=1; + REPLACE_GETTIMEOFDAY=0; + REPLACE_STRUCT_TIMEVAL=0; + + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_sys_time_h='<'sys/time.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/time.h>" >&5 +$as_echo_n "checking absolute name of <sys/time.h>... " >&6; } +if ${gl_cv_next_sys_time_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_sys_time_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/time.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'sys/time.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_sys_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_sys_time_h + gl_cv_next_sys_time_h='"'$gl_header'"' + else + gl_cv_next_sys_time_h='<'sys/time.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_time_h" >&5 +$as_echo "$gl_cv_next_sys_time_h" >&6; } + fi + NEXT_SYS_TIME_H=$gl_cv_next_sys_time_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'sys/time.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_sys_time_h + fi + NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H=$gl_next_as_first_directive + + + + + + if test $ac_cv_header_sys_time_h != yes; then + HAVE_SYS_TIME_H=0 + fi + + + + + + if test $ac_cv_header_sys_socket_h != yes; then + for ac_header in winsock2.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" +if test "x$ac_cv_header_winsock2_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_WINSOCK2_H 1 +_ACEOF + +fi + +done + + fi + if test "$ac_cv_header_winsock2_h" = yes; then + HAVE_WINSOCK2_H=1 + UNISTD_H_HAVE_WINSOCK2_H=1 + SYS_IOCTL_H_HAVE_WINSOCK2_H=1 + else + HAVE_WINSOCK2_H=0 + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timeval" >&5 +$as_echo_n "checking for struct timeval... " >&6; } +if ${gl_cv_sys_struct_timeval+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if HAVE_SYS_TIME_H + #include <sys/time.h> + #endif + #include <time.h> + #if HAVE_WINSOCK2_H + # include <winsock2.h> + #endif + +int +main () +{ +static struct timeval x; x.tv_sec = x.tv_usec; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_sys_struct_timeval=yes +else + gl_cv_sys_struct_timeval=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timeval" >&5 +$as_echo "$gl_cv_sys_struct_timeval" >&6; } + if test $gl_cv_sys_struct_timeval != yes; then + HAVE_STRUCT_TIMEVAL=0 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wide-enough struct timeval.tv_sec member" >&5 +$as_echo_n "checking for wide-enough struct timeval.tv_sec member... " >&6; } +if ${gl_cv_sys_struct_timeval_tv_sec+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if HAVE_SYS_TIME_H + #include <sys/time.h> + #endif + #include <time.h> + #if HAVE_WINSOCK2_H + # include <winsock2.h> + #endif + +int +main () +{ +static struct timeval x; + typedef int verify_tv_sec_type[ + sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1 + ]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_sys_struct_timeval_tv_sec=yes +else + gl_cv_sys_struct_timeval_tv_sec=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timeval_tv_sec" >&5 +$as_echo "$gl_cv_sys_struct_timeval_tv_sec" >&6; } + if test $gl_cv_sys_struct_timeval_tv_sec != yes; then + REPLACE_STRUCT_TIMEVAL=1 + fi + fi + + + + + + + + + + NEED_LOCALTIME_BUFFER=0 + + + GNULIB_CTIME=0; + GNULIB_MKTIME=0; + GNULIB_LOCALTIME=0; + GNULIB_NANOSLEEP=0; + GNULIB_STRFTIME=0; + GNULIB_STRPTIME=0; + GNULIB_TIMEGM=0; + GNULIB_TIME_R=0; + GNULIB_TIME_RZ=0; + GNULIB_TZSET=0; + HAVE_DECL_LOCALTIME_R=1; + HAVE_NANOSLEEP=1; + HAVE_STRPTIME=1; + HAVE_TIMEGM=1; + HAVE_TZSET=1; + HAVE_TIMEZONE_T=0; + REPLACE_CTIME=GNULIB_PORTCHECK; + REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; + REPLACE_MKTIME=GNULIB_PORTCHECK; + REPLACE_NANOSLEEP=GNULIB_PORTCHECK; + REPLACE_STRFTIME=GNULIB_PORTCHECK; + REPLACE_TIMEGM=GNULIB_PORTCHECK; + REPLACE_TZSET=GNULIB_PORTCHECK; + + : ${GNULIB_GETTIMEOFDAY=0}; + REPLACE_GMTIME=0; + REPLACE_LOCALTIME=0; + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_limits_h='<'limits.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <limits.h>" >&5 +$as_echo_n "checking absolute name of <limits.h>... " >&6; } +if ${gl_cv_next_limits_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_limits_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'limits.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_limits_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_limits_h + gl_cv_next_limits_h='"'$gl_header'"' + else + gl_cv_next_limits_h='<'limits.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_limits_h" >&5 +$as_echo "$gl_cv_next_limits_h" >&6; } + fi + NEXT_LIMITS_H=$gl_cv_next_limits_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'limits.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_limits_h + fi + NEXT_AS_FIRST_DIRECTIVE_LIMITS_H=$gl_next_as_first_directive + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc." >&5 +$as_echo_n "checking whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc.... " >&6; } +if ${gl_cv_header_limits_width+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ + #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 + #endif + #include <limits.h> + long long llm = LLONG_MAX; + int wb = WORD_BIT; + int ullw = ULLONG_WIDTH; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_limits_width=yes +else + gl_cv_header_limits_width=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_limits_width" >&5 +$as_echo "$gl_cv_header_limits_width" >&6; } + if test "$gl_cv_header_limits_width" = yes; then + LIMITS_H= + else + LIMITS_H=limits.h + fi + + if test -n "$LIMITS_H"; then + GL_GENERATE_LIMITS_H_TRUE= + GL_GENERATE_LIMITS_H_FALSE='#' +else + GL_GENERATE_LIMITS_H_TRUE='#' + GL_GENERATE_LIMITS_H_FALSE= +fi + + + + + + + + + + + + + if test $ac_cv_type_long_long_int = yes; then + HAVE_LONG_LONG_INT=1 + else + HAVE_LONG_LONG_INT=0 + fi + + + if test $ac_cv_type_unsigned_long_long_int = yes; then + HAVE_UNSIGNED_LONG_LONG_INT=1 + else + HAVE_UNSIGNED_LONG_LONG_INT=0 + fi + + + + if test $ac_cv_header_wchar_h = yes; then + HAVE_WCHAR_H=1 + else + HAVE_WCHAR_H=0 + fi + + + if test $ac_cv_header_inttypes_h = yes; then + HAVE_INTTYPES_H=1 + else + HAVE_INTTYPES_H=0 + fi + + + if test $ac_cv_header_sys_types_h = yes; then + HAVE_SYS_TYPES_H=1 + else + HAVE_SYS_TYPES_H=0 + fi + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stdint_h='<'stdint.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdint.h>" >&5 +$as_echo_n "checking absolute name of <stdint.h>... " >&6; } +if ${gl_cv_next_stdint_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_stdint_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdint.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'stdint.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_stdint_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_stdint_h + gl_cv_next_stdint_h='"'$gl_header'"' + else + gl_cv_next_stdint_h='<'stdint.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5 +$as_echo "$gl_cv_next_stdint_h" >&6; } + fi + NEXT_STDINT_H=$gl_cv_next_stdint_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'stdint.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_stdint_h + fi + NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive + + + + + if test $ac_cv_header_stdint_h = yes; then + HAVE_STDINT_H=1 + else + HAVE_STDINT_H=0 + fi + + + if test $ac_cv_header_stdint_h = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5 +$as_echo_n "checking whether stdint.h conforms to C99... " >&6; } +if ${gl_cv_header_working_stdint_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_cv_header_working_stdint_h=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#define __STDC_CONSTANT_MACROS 1 +#define __STDC_LIMIT_MACROS 1 +#include <stdint.h> +/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */ +#if !(defined WCHAR_MIN && defined WCHAR_MAX) +#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>" +#endif + + + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + + +#ifdef INT8_MAX +int8_t a1 = INT8_MAX; +int8_t a1min = INT8_MIN; +#endif +#ifdef INT16_MAX +int16_t a2 = INT16_MAX; +int16_t a2min = INT16_MIN; +#endif +#ifdef INT32_MAX +int32_t a3 = INT32_MAX; +int32_t a3min = INT32_MIN; +#endif +#ifdef INT64_MAX +int64_t a4 = INT64_MAX; +int64_t a4min = INT64_MIN; +#endif +#ifdef UINT8_MAX +uint8_t b1 = UINT8_MAX; +#else +typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; +#endif +#ifdef UINT16_MAX +uint16_t b2 = UINT16_MAX; +#endif +#ifdef UINT32_MAX +uint32_t b3 = UINT32_MAX; +#endif +#ifdef UINT64_MAX +uint64_t b4 = UINT64_MAX; +#endif +int_least8_t c1 = INT8_C (0x7f); +int_least8_t c1max = INT_LEAST8_MAX; +int_least8_t c1min = INT_LEAST8_MIN; +int_least16_t c2 = INT16_C (0x7fff); +int_least16_t c2max = INT_LEAST16_MAX; +int_least16_t c2min = INT_LEAST16_MIN; +int_least32_t c3 = INT32_C (0x7fffffff); +int_least32_t c3max = INT_LEAST32_MAX; +int_least32_t c3min = INT_LEAST32_MIN; +int_least64_t c4 = INT64_C (0x7fffffffffffffff); +int_least64_t c4max = INT_LEAST64_MAX; +int_least64_t c4min = INT_LEAST64_MIN; +uint_least8_t d1 = UINT8_C (0xff); +uint_least8_t d1max = UINT_LEAST8_MAX; +uint_least16_t d2 = UINT16_C (0xffff); +uint_least16_t d2max = UINT_LEAST16_MAX; +uint_least32_t d3 = UINT32_C (0xffffffff); +uint_least32_t d3max = UINT_LEAST32_MAX; +uint_least64_t d4 = UINT64_C (0xffffffffffffffff); +uint_least64_t d4max = UINT_LEAST64_MAX; +int_fast8_t e1 = INT_FAST8_MAX; +int_fast8_t e1min = INT_FAST8_MIN; +int_fast16_t e2 = INT_FAST16_MAX; +int_fast16_t e2min = INT_FAST16_MIN; +int_fast32_t e3 = INT_FAST32_MAX; +int_fast32_t e3min = INT_FAST32_MIN; +int_fast64_t e4 = INT_FAST64_MAX; +int_fast64_t e4min = INT_FAST64_MIN; +uint_fast8_t f1 = UINT_FAST8_MAX; +uint_fast16_t f2 = UINT_FAST16_MAX; +uint_fast32_t f3 = UINT_FAST32_MAX; +uint_fast64_t f4 = UINT_FAST64_MAX; +#ifdef INTPTR_MAX +intptr_t g = INTPTR_MAX; +intptr_t gmin = INTPTR_MIN; +#endif +#ifdef UINTPTR_MAX +uintptr_t h = UINTPTR_MAX; +#endif +intmax_t i = INTMAX_MAX; +uintmax_t j = UINTMAX_MAX; + +/* Check that SIZE_MAX has the correct type, if possible. */ +#if 201112 <= __STDC_VERSION__ +int k = _Generic (SIZE_MAX, size_t: 0); +#elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \ + || (0x5110 <= __SUNPRO_C && !__STDC__)) +extern size_t k; +extern __typeof__ (SIZE_MAX) k; +#endif + +#include <limits.h> /* for CHAR_BIT */ +#define TYPE_MINIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) +#define TYPE_MAXIMUM(t) \ + ((t) ((t) 0 < (t) -1 \ + ? (t) -1 \ + : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) +struct s { + int check_PTRDIFF: + PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) + && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) + ? 1 : -1; + /* Detect bug in FreeBSD 6.0 / ia64. */ + int check_SIG_ATOMIC: + SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) + && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) + ? 1 : -1; + int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; + int check_WCHAR: + WCHAR_MIN == TYPE_MINIMUM (wchar_t) + && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) + ? 1 : -1; + /* Detect bug in mingw. */ + int check_WINT: + WINT_MIN == TYPE_MINIMUM (wint_t) + && WINT_MAX == TYPE_MAXIMUM (wint_t) + ? 1 : -1; + + /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ + int check_UINT8_C: + (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; + int check_UINT16_C: + (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; + + /* Detect bugs in OpenBSD 3.9 stdint.h. */ +#ifdef UINT8_MAX + int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; +#endif +#ifdef UINT16_MAX + int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; +#endif +#ifdef UINT32_MAX + int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; +#endif +#ifdef UINT64_MAX + int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; +#endif + int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; + int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; + int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; + int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; + int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; + int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; + int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; + int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; + int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; + int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; + int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; +}; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on native Windows. + mingw*) gl_cv_header_working_stdint_h="guessing yes" ;; + # In general, assume it works. + *) gl_cv_header_working_stdint_h="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#define __STDC_CONSTANT_MACROS 1 +#define __STDC_LIMIT_MACROS 1 +#include <stdint.h> + + + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + + +#include <stdio.h> +#include <string.h> +#define MVAL(macro) MVAL1(macro) +#define MVAL1(expression) #expression +static const char *macro_values[] = + { +#ifdef INT8_MAX + MVAL (INT8_MAX), +#endif +#ifdef INT16_MAX + MVAL (INT16_MAX), +#endif +#ifdef INT32_MAX + MVAL (INT32_MAX), +#endif +#ifdef INT64_MAX + MVAL (INT64_MAX), +#endif +#ifdef UINT8_MAX + MVAL (UINT8_MAX), +#endif +#ifdef UINT16_MAX + MVAL (UINT16_MAX), +#endif +#ifdef UINT32_MAX + MVAL (UINT32_MAX), +#endif +#ifdef UINT64_MAX + MVAL (UINT64_MAX), +#endif + NULL + }; + +int +main () +{ + + const char **mv; + for (mv = macro_values; *mv != NULL; mv++) + { + const char *value = *mv; + /* Test whether it looks like a cast expression. */ + if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 + || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 + || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 + || strncmp (value, "((int)"/*)*/, 6) == 0 + || strncmp (value, "((signed short)"/*)*/, 15) == 0 + || strncmp (value, "((signed char)"/*)*/, 14) == 0) + return mv - macro_values + 1; + } + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_header_working_stdint_h=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5 +$as_echo "$gl_cv_header_working_stdint_h" >&6; } + fi + + HAVE_C99_STDINT_H=0 + HAVE_SYS_BITYPES_H=0 + HAVE_SYS_INTTYPES_H=0 + STDINT_H=stdint.h + case "$gl_cv_header_working_stdint_h" in + *yes) + HAVE_C99_STDINT_H=1 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h predates C++11" >&5 +$as_echo_n "checking whether stdint.h predates C++11... " >&6; } +if ${gl_cv_header_stdint_predates_cxx11_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_cv_header_stdint_predates_cxx11_h=yes + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#include <stdint.h> + + + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + + +intmax_t im = INTMAX_MAX; +int32_t i32 = INT32_C (0x7fffffff); + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_stdint_predates_cxx11_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_predates_cxx11_h" >&5 +$as_echo "$gl_cv_header_stdint_predates_cxx11_h" >&6; } + + if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then + +$as_echo "#define __STDC_CONSTANT_MACROS 1" >>confdefs.h + + +$as_echo "#define __STDC_LIMIT_MACROS 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h has UINTMAX_WIDTH etc." >&5 +$as_echo_n "checking whether stdint.h has UINTMAX_WIDTH etc.... " >&6; } +if ${gl_cv_header_stdint_width+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_cv_header_stdint_width=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Work if build is not clean. */ + #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 + #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ + #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 + #endif + #include <stdint.h> + + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + + int iw = UINTMAX_WIDTH; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_stdint_width=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_width" >&5 +$as_echo "$gl_cv_header_stdint_width" >&6; } + if test "$gl_cv_header_stdint_width" = yes; then + STDINT_H= + fi + ;; + *) + for ac_header in sys/inttypes.h sys/bitypes.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_sys_inttypes_h = yes; then + HAVE_SYS_INTTYPES_H=1 + fi + if test $ac_cv_header_sys_bitypes_h = yes; then + HAVE_SYS_BITYPES_H=1 + fi + + + if test $APPLE_UNIVERSAL_BUILD = 0; then + + + for gltype in ptrdiff_t size_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 +$as_echo_n "checking for bit size of $gltype... " >&6; } +if eval \${gl_cv_bitsizeof_${gltype}+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + +#include <limits.h>"; then : + +else + result=unknown +fi + + eval gl_cv_bitsizeof_${gltype}=\$result + +fi +eval ac_res=\$gl_cv_bitsizeof_${gltype} + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval result=\$gl_cv_bitsizeof_${gltype} + if test $result = unknown; then + result=0 + fi + GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + cat >>confdefs.h <<_ACEOF +#define BITSIZEOF_${GLTYPE} $result +_ACEOF + + eval BITSIZEOF_${GLTYPE}=\$result + done + + + fi + + + for gltype in sig_atomic_t wchar_t wint_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 +$as_echo_n "checking for bit size of $gltype... " >&6; } +if eval \${gl_cv_bitsizeof_${gltype}+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + +#include <limits.h>"; then : + +else + result=unknown +fi + + eval gl_cv_bitsizeof_${gltype}=\$result + +fi +eval ac_res=\$gl_cv_bitsizeof_${gltype} + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval result=\$gl_cv_bitsizeof_${gltype} + if test $result = unknown; then + result=0 + fi + GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + cat >>confdefs.h <<_ACEOF +#define BITSIZEOF_${GLTYPE} $result +_ACEOF + + eval BITSIZEOF_${GLTYPE}=\$result + done + + + + + for gltype in sig_atomic_t wchar_t wint_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5 +$as_echo_n "checking whether $gltype is signed... " >&6; } +if eval \${gl_cv_type_${gltype}_signed+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + + int verify[2 * (($gltype) -1 < ($gltype) 0) - 1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + result=yes +else + result=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval gl_cv_type_${gltype}_signed=\$result + +fi +eval ac_res=\$gl_cv_type_${gltype}_signed + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval result=\$gl_cv_type_${gltype}_signed + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + if test "$result" = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_SIGNED_${GLTYPE} 1 +_ACEOF + + eval HAVE_SIGNED_${GLTYPE}=1 + else + eval HAVE_SIGNED_${GLTYPE}=0 + fi + done + + + gl_cv_type_ptrdiff_t_signed=yes + gl_cv_type_size_t_signed=no + if test $APPLE_UNIVERSAL_BUILD = 0; then + + + for gltype in ptrdiff_t size_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 +$as_echo_n "checking for $gltype integer literal suffix... " >&6; } +if eval \${gl_cv_type_${gltype}_suffix+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval gl_cv_type_${gltype}_suffix=no + eval result=\$gl_cv_type_${gltype}_signed + if test "$result" = yes; then + glsufu= + else + glsufu=u + fi + for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do + case $glsuf in + '') gltype1='int';; + l) gltype1='long int';; + ll) gltype1='long long int';; + i64) gltype1='__int64';; + u) gltype1='unsigned int';; + ul) gltype1='unsigned long int';; + ull) gltype1='unsigned long long int';; + ui64)gltype1='unsigned __int64';; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + + extern $gltype foo; + extern $gltype1 foo; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval gl_cv_type_${gltype}_suffix=\$glsuf +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" != no && break + done +fi +eval ac_res=\$gl_cv_type_${gltype}_suffix + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" = no && result= + eval ${GLTYPE}_SUFFIX=\$result + cat >>confdefs.h <<_ACEOF +#define ${GLTYPE}_SUFFIX $result +_ACEOF + + done + + + fi + + + for gltype in sig_atomic_t wchar_t wint_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 +$as_echo_n "checking for $gltype integer literal suffix... " >&6; } +if eval \${gl_cv_type_${gltype}_suffix+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval gl_cv_type_${gltype}_suffix=no + eval result=\$gl_cv_type_${gltype}_signed + if test "$result" = yes; then + glsufu= + else + glsufu=u + fi + for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do + case $glsuf in + '') gltype1='int';; + l) gltype1='long int';; + ll) gltype1='long long int';; + i64) gltype1='__int64';; + u) gltype1='unsigned int';; + ul) gltype1='unsigned long int';; + ull) gltype1='unsigned long long int';; + ui64)gltype1='unsigned __int64';; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + + extern $gltype foo; + extern $gltype1 foo; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval gl_cv_type_${gltype}_suffix=\$glsuf +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" != no && break + done +fi +eval ac_res=\$gl_cv_type_${gltype}_suffix + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" = no && result= + eval ${GLTYPE}_SUFFIX=\$result + cat >>confdefs.h <<_ACEOF +#define ${GLTYPE}_SUFFIX $result +_ACEOF + + done + + + + if test $GNULIB_OVERRIDES_WINT_T = 1; then + BITSIZEOF_WINT_T=32 + fi + + ;; + esac + + + + LIMITS_H='limits.h' + if test -n "$LIMITS_H"; then + GL_GENERATE_LIMITS_H_TRUE= + GL_GENERATE_LIMITS_H_FALSE='#' +else + GL_GENERATE_LIMITS_H_TRUE='#' + GL_GENERATE_LIMITS_H_FALSE= +fi + + + + + + + + if test -n "$STDINT_H"; then + GL_GENERATE_STDINT_H_TRUE= + GL_GENERATE_STDINT_H_FALSE='#' +else + GL_GENERATE_STDINT_H_TRUE='#' + GL_GENERATE_STDINT_H_FALSE= +fi + + + + + + GNULIB_IMAXABS=0; + GNULIB_IMAXDIV=0; + GNULIB_STRTOIMAX=0; + GNULIB_STRTOUMAX=0; + HAVE_DECL_IMAXABS=1; + HAVE_DECL_IMAXDIV=1; + HAVE_DECL_STRTOIMAX=1; + HAVE_DECL_STRTOUMAX=1; + HAVE_IMAXDIV_T=1; + REPLACE_STRTOIMAX=0; + REPLACE_STRTOUMAX=0; + INT32_MAX_LT_INTMAX_MAX=1; + INT64_MAX_EQ_LONG_MAX='defined _LP64'; + PRI_MACROS_BROKEN=0; + PRIPTR_PREFIX=__PRIPTR_PREFIX; + UINT32_MAX_LT_UINTMAX_MAX=1; + UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_inttypes_h='<'inttypes.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <inttypes.h>" >&5 +$as_echo_n "checking absolute name of <inttypes.h>... " >&6; } +if ${gl_cv_next_inttypes_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_inttypes_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <inttypes.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'inttypes.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_inttypes_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_inttypes_h + gl_cv_next_inttypes_h='"'$gl_header'"' + else + gl_cv_next_inttypes_h='<'inttypes.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_inttypes_h" >&5 +$as_echo "$gl_cv_next_inttypes_h" >&6; } + fi + NEXT_INTTYPES_H=$gl_cv_next_inttypes_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'inttypes.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_inttypes_h + fi + NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H=$gl_next_as_first_directive + + + + + + + + + + + + + for ac_header in inttypes.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" +if test "x$ac_cv_header_inttypes_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_INTTYPES_H 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_inttypes_h = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5 +$as_echo_n "checking whether the inttypes.h PRIxNN macros are broken... " >&6; } +if ${gt_cv_inttypes_pri_broken+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <inttypes.h> +#ifdef PRId32 +char *p = PRId32; +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_inttypes_pri_broken=no +else + gt_cv_inttypes_pri_broken=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5 +$as_echo "$gt_cv_inttypes_pri_broken" >&6; } + fi + if test "$gt_cv_inttypes_pri_broken" = yes; then + +cat >>confdefs.h <<_ACEOF +#define PRI_MACROS_BROKEN 1 +_ACEOF + + PRI_MACROS_BROKEN=1 + else + PRI_MACROS_BROKEN=0 + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'float'" >&5 +$as_echo_n "checking where to find the exponent in a 'float'... " >&6; } +if ${gl_cv_cc_float_expbit0+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + gl_cv_cc_float_expbit0="word 0 bit 23" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { float value; unsigned int word[NWORDS]; } memory_float; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (float x) +{ + memory_float m; + size_t i; + /* Clear it first, in case + sizeof (float) < sizeof (memory_float). */ + memset (&m, 0, sizeof (memory_float)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25f); + add_to_ored_words (0.5f); + add_to_ored_words (1.0f); + add_to_ored_words (2.0f); + add_to_ored_words (4.0f); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_cc_float_expbit0=`cat conftest.out` +else + gl_cv_cc_float_expbit0="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_expbit0" >&5 +$as_echo "$gl_cv_cc_float_expbit0" >&6; } + case "$gl_cv_cc_float_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define FLT_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define FLT_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + GNULIB_NL_LANGINFO=0; + HAVE_NL_LANGINFO=1; + REPLACE_NL_LANGINFO=0; + + + + + GNULIB_LOCALECONV=0; + GNULIB_SETLOCALE=0; + GNULIB_DUPLOCALE=0; + GNULIB_LOCALENAME=0; + HAVE_NEWLOCALE=1; + HAVE_DUPLOCALE=1; + HAVE_FREELOCALE=1; + REPLACE_LOCALECONV=0; + REPLACE_SETLOCALE=0; + REPLACE_NEWLOCALE=0; + REPLACE_DUPLOCALE=0; + REPLACE_FREELOCALE=0; + REPLACE_STRUCT_LCONV=0; + + + REPLACE_NULL=0; + HAVE_MAX_ALIGN_T=1; + HAVE_WCHAR_T=1; + + + + + STDDEF_H= + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for good max_align_t" >&5 +$as_echo_n "checking for good max_align_t... " >&6; } +if ${gl_cv_type_max_align_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stddef.h> + unsigned int s = sizeof (max_align_t); + #if defined __GNUC__ || defined __IBM__ALIGNOF__ + int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1]; + int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1]; + #endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_type_max_align_t=yes +else + gl_cv_type_max_align_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_max_align_t" >&5 +$as_echo "$gl_cv_type_max_align_t" >&6; } + if test $gl_cv_type_max_align_t = no; then + HAVE_MAX_ALIGN_T=0 + STDDEF_H=stddef.h + fi + + if test $gt_cv_c_wchar_t = no; then + HAVE_WCHAR_T=0 + STDDEF_H=stddef.h + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5 +$as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; } +if ${gl_cv_decl_null_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stddef.h> + int test[2 * (sizeof NULL == sizeof (void *)) -1]; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_decl_null_works=yes +else + gl_cv_decl_null_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5 +$as_echo "$gl_cv_decl_null_works" >&6; } + if test $gl_cv_decl_null_works = no; then + REPLACE_NULL=1 + STDDEF_H=stddef.h + fi + + + if test -n "$STDDEF_H"; then + GL_GENERATE_STDDEF_H_TRUE= + GL_GENERATE_STDDEF_H_FALSE='#' +else + GL_GENERATE_STDDEF_H_TRUE='#' + GL_GENERATE_STDDEF_H_FALSE= +fi + + if test -n "$STDDEF_H"; then + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stddef_h='<'stddef.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stddef.h>" >&5 +$as_echo_n "checking absolute name of <stddef.h>... " >&6; } +if ${gl_cv_next_stddef_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stddef.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'stddef.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_stddef_h + gl_cv_next_stddef_h='"'$gl_header'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5 +$as_echo "$gl_cv_next_stddef_h" >&6; } + fi + NEXT_STDDEF_H=$gl_cv_next_stddef_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'stddef.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_stddef_h + fi + NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive + + + + + fi + + + + + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld" >&5 +$as_echo_n "checking for ld... " >&6; } +elif test "$GCC" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test -n "$LD"; then + # Let the user override the test with a path. + : +else + if ${acl_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + + acl_cv_path_LD= # Final result of this test + ac_prog=ld # Program to search in $PATH + if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + acl_output=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $acl_output in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` + while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do + acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` + done + # Got the pathname. No search in PATH is needed. + acl_cv_path_LD="$acl_output" + ac_prog= + ;; + "") + # If it fails, then pretend we aren't using GCC. + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac + fi + if test -n "$ac_prog"; then + # Search for $ac_prog in $PATH. + acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$acl_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break + ;; + *) + test "$with_gnu_ld" != yes && break + ;; + esac + fi + done + IFS="$acl_save_ifs" + fi + case $host in + *-*-aix*) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __powerpc64__ || defined _ARCH_PPC64 + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # The compiler produces 64-bit code. Add option '-b64' so that the + # linker groks 64-bit object files. + case "$acl_cv_path_LD " in + *" -b64 "*) ;; + *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;; + esac + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + sparc64-*-netbsd*) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __sparcv9 || defined __arch64__ + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + # The compiler produces 32-bit code. Add option '-m elf32_sparc' + # so that the linker groks 32-bit object files. + case "$acl_cv_path_LD " in + *" -m elf32_sparc "*) ;; + *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;; + esac + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + esac + +fi + + LD="$acl_cv_path_LD" +fi +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${acl_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 </dev/null` in +*GNU* | *'with BFD'*) + acl_cv_prog_gnu_ld=yes + ;; +*) + acl_cv_prog_gnu_ld=no + ;; +esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5 +$as_echo "$acl_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$acl_cv_prog_gnu_ld + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 +$as_echo_n "checking for shared library run path origin... " >&6; } +if ${acl_cv_rpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 +$as_echo "$acl_cv_rpath" >&6; } + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + # Check whether --enable-rpath was given. +if test "${enable_rpath+set}" = set; then : + enableval=$enable_rpath; : +else + enable_rpath=yes +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking 32-bit host C ABI" >&5 +$as_echo_n "checking 32-bit host C ABI... " >&6; } +if ${gl_cv_host_cpu_c_abi_32bit+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$gl_cv_host_cpu_c_abi"; then + case "$gl_cv_host_cpu_c_abi" in + i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) + gl_cv_host_cpu_c_abi_32bit=yes ;; + *) + gl_cv_host_cpu_c_abi_32bit=no ;; + esac + else + case "$host_cpu" in + + i[4567]86 ) + gl_cv_host_cpu_c_abi_32bit=yes + ;; + + x86_64 ) + # On x86_64 systems, the C compiler may be generating code in one of + # these ABIs: + # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. + # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 + # with native Windows (mingw, MSVC). + # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. + # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if (defined __x86_64__ || defined __amd64__ \ + || defined _M_X64 || defined _M_AMD64) \ + && !(defined __ILP32__ || defined _ILP32) + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=no +else + gl_cv_host_cpu_c_abi_32bit=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + + arm* | aarch64 ) + # Assume arm with EABI. + # On arm64 systems, the C compiler may be generating code in one of + # these ABIs: + # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. + # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. + # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32) + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=no +else + gl_cv_host_cpu_c_abi_32bit=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + + hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) + # On hppa, the C compiler may be generating 32-bit code or 64-bit + # code. In the latter case, it defines _LP64 and __LP64__. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __LP64__ + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=no +else + gl_cv_host_cpu_c_abi_32bit=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + + ia64* ) + # On ia64 on HP-UX, the C compiler may be generating 64-bit code or + # 32-bit code. In the latter case, it defines _ILP32. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef _ILP32 + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=yes +else + gl_cv_host_cpu_c_abi_32bit=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + + mips* ) + # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this + # at 32. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=no +else + gl_cv_host_cpu_c_abi_32bit=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + + powerpc* ) + # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. + # No need to distinguish them here; the caller may distinguish + # them based on the OS. + # On powerpc64 systems, the C compiler may still be generating + # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may + # be generating 64-bit code. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __powerpc64__ || defined _ARCH_PPC64 + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=no +else + gl_cv_host_cpu_c_abi_32bit=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + + rs6000 ) + gl_cv_host_cpu_c_abi_32bit=yes + ;; + + riscv32 | riscv64 ) + # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. + # Size of 'long' and 'void *': + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __LP64__ + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=no +else + gl_cv_host_cpu_c_abi_32bit=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + + s390* ) + # On s390x, the C compiler may be generating 64-bit (= s390x) code + # or 31-bit (= s390) code. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __LP64__ || defined __s390x__ + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=no +else + gl_cv_host_cpu_c_abi_32bit=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + + sparc | sparc64 ) + # UltraSPARCs running Linux have `uname -m` = "sparc64", but the + # C compiler still generates 32-bit code. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __sparcv9 || defined __arch64__ + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_host_cpu_c_abi_32bit=no +else + gl_cv_host_cpu_c_abi_32bit=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + + *) + gl_cv_host_cpu_c_abi_32bit=no + ;; + esac + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi_32bit" >&5 +$as_echo "$gl_cv_host_cpu_c_abi_32bit" >&6; } + + HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit" + + + + + + case "$host_os" in + solaris*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 +$as_echo_n "checking for 64-bit host... " >&6; } +if ${gl_cv_solaris_64bit+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef _LP64 + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_solaris_64bit=yes +else + gl_cv_solaris_64bit=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 +$as_echo "$gl_cv_solaris_64bit" >&6; };; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5 +$as_echo_n "checking for the common suffixes of directories in the library search path... " >&6; } +if ${acl_cv_libdirstems+:} false; then : + $as_echo_n "(cached) " >&6 +else + acl_libdirstem=lib + acl_libdirstem2= + case "$host_os" in + solaris*) + if test $gl_cv_solaris_64bit = yes; then + acl_libdirstem=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem2=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + esac + fi + ;; + *) + if test "$HOST_CPU_C_ABI_32BIT" != yes; then + searchpath=`(if test -f /usr/bin/gcc \ + && LC_ALL=C /usr/bin/gcc -print-search-dirs >/dev/null 2>/dev/null; then \ + LC_ALL=C /usr/bin/gcc -print-search-dirs; \ + else \ + LC_ALL=C $CC -print-search-dirs; \ + fi) 2>/dev/null \ + | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" + acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5 +$as_echo "$acl_cv_libdirstems" >&6; } + # Decompose acl_cv_libdirstems into acl_libdirstem and acl_libdirstem2. + acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` + acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e '/,/s/.*,//'` + + + + gl_threads_api=none + LIBTHREAD= + LTLIBTHREAD= + LIBMULTITHREAD= + LTLIBMULTITHREAD= + if test "$gl_use_threads" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 +$as_echo_n "checking whether imported symbols can be declared weak... " >&6; } +if ${gl_cv_have_weak+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_cv_have_weak=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +extern void xyzzy (); +#pragma weak xyzzy +int +main () +{ +xyzzy(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_have_weak=maybe +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test $gl_cv_have_weak = maybe; then + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __ELF__ + Extensible Linking Format + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Extensible Linking Format" >/dev/null 2>&1; then : + gl_cv_have_weak="guessing yes" +else + gl_cv_have_weak="guessing no" +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#pragma weak fputs +int main () +{ + return (fputs == NULL); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_have_weak=yes +else + gl_cv_have_weak=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + case " $LDFLAGS " in + *" -static "*) gl_cv_have_weak=no ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 +$as_echo "$gl_cv_have_weak" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the linker supports --as-needed" >&5 +$as_echo_n "checking whether the linker supports --as-needed... " >&6; } +if ${gl_cv_linker_have_as_needed+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$GCC"; then + gl_saved_ldflags="$LDFLAGS" + LDFLAGS="$gl_saved_ldflags -Wl,--as-needed -Wl,--no-as-needed" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_linker_have_as_needed=yes +else + gl_cv_linker_have_as_needed=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$gl_saved_ldflags" + else + gl_cv_linker_have_as_needed=no + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_linker_have_as_needed" >&5 +$as_echo "$gl_cv_linker_have_as_needed" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the linker supports --push-state" >&5 +$as_echo_n "checking whether the linker supports --push-state... " >&6; } +if ${gl_cv_linker_have_push_state+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$GCC"; then + gl_saved_ldflags="$LDFLAGS" + LDFLAGS="$gl_saved_ldflags -Wl,--push-state -Wl,--pop-state" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_linker_have_push_state=yes +else + gl_cv_linker_have_push_state=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$gl_saved_ldflags" + else + gl_cv_linker_have_push_state=no + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_linker_have_push_state" >&5 +$as_echo "$gl_cv_linker_have_push_state" >&6; } + if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then + # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that + # it groks <pthread.h>. It's added above, in gl_THREADLIB_EARLY_BODY. + ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" +if test "x$ac_cv_header_pthread_h" = xyes; then : + gl_have_pthread_h=yes +else + gl_have_pthread_h=no +fi + + + if test "$gl_have_pthread_h" = yes; then + # Other possible tests: + # -lpthreads (FSU threads, PCthreads) + # -lgthreads + gl_have_pthread= + # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist + # in libc. IRIX 6.5 has the first one in both libc and libpthread, but + # the second one only in libpthread, and lock.c needs it. + # + # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 + # needs -pthread for some reason. See: + # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html + save_LIBS=$LIBS + for gl_pthread in '' '-pthread'; do + LIBS="$LIBS $gl_pthread" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <pthread.h> + pthread_mutex_t m; + pthread_mutexattr_t ma; + +int +main () +{ +pthread_mutex_lock (&m); + pthread_mutexattr_init (&ma); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_have_pthread=yes + LIBTHREAD=$gl_pthread LTLIBTHREAD=$gl_pthread + LIBMULTITHREAD=$gl_pthread LTLIBMULTITHREAD=$gl_pthread +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS=$save_LIBS + test -n "$gl_have_pthread" && break + done + + # Test for libpthread by looking for pthread_kill. (Not pthread_self, + # since it is defined as a macro on OSF/1.) + if test -n "$gl_have_pthread" && test -z "$LIBTHREAD"; then + # The program links fine without libpthread. But it may actually + # need to link with libpthread in order to create multiple threads. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +$as_echo_n "checking for pthread_kill in -lpthread... " >&6; } +if ${ac_cv_lib_pthread_pthread_kill+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (); +int +main () +{ +return pthread_kill (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_pthread_kill=yes +else + ac_cv_lib_pthread_pthread_kill=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : + LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread + # On Solaris and HP-UX, most pthread functions exist also in libc. + # Therefore pthread_in_use() needs to actually try to create a + # thread: pthread_create from libc will fail, whereas + # pthread_create will actually create a thread. + # On Solaris 10 or newer, this test is no longer needed, because + # libc contains the fully functional pthread functions. + case "$host_os" in + solaris | solaris2.1-9 | solaris2.1-9.* | hpux*) + +$as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h + + esac + +fi + + elif test -z "$gl_have_pthread"; then + # Some library is needed. Try libpthread and libc_r. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +$as_echo_n "checking for pthread_kill in -lpthread... " >&6; } +if ${ac_cv_lib_pthread_pthread_kill+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (); +int +main () +{ +return pthread_kill (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_pthread_kill=yes +else + ac_cv_lib_pthread_pthread_kill=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : + gl_have_pthread=yes + LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread + LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread +fi + + if test -z "$gl_have_pthread"; then + # For FreeBSD 4. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 +$as_echo_n "checking for pthread_kill in -lc_r... " >&6; } +if ${ac_cv_lib_c_r_pthread_kill+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc_r $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (); +int +main () +{ +return pthread_kill (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_c_r_pthread_kill=yes +else + ac_cv_lib_c_r_pthread_kill=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 +$as_echo "$ac_cv_lib_c_r_pthread_kill" >&6; } +if test "x$ac_cv_lib_c_r_pthread_kill" = xyes; then : + gl_have_pthread=yes + LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r + LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r +fi + + fi + fi + if test -n "$gl_have_pthread"; then + gl_threads_api=posix + +$as_echo "#define USE_POSIX_THREADS 1" >>confdefs.h + + if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + +$as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h + + LIBTHREAD= + LTLIBTHREAD= + case "$LIBMULTITHREAD" in + "") ;; + -pthread) + if test $gl_cv_linker_have_as_needed = yes; then + if test $gl_cv_linker_have_push_state = yes; then + LIBMULTITHREAD="$LIBMULTITHREAD -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state" + else + LIBMULTITHREAD="$LIBMULTITHREAD -Wl,--no-as-needed -lpthread" + fi + fi + ;; + *) + if test $gl_cv_linker_have_as_needed = yes; then + if test $gl_cv_linker_have_push_state = yes; then + LIBMULTITHREAD="-Wl,--push-state -Wl,--no-as-needed $LIBMULTITHREAD -Wl,--pop-state" + else + LIBMULTITHREAD="-Wl,--no-as-needed $LIBMULTITHREAD" + fi + fi + ;; + esac + # TODO: May need to modify LTLIBMULTITHREAD similarly. + fi + fi + fi + fi + fi + if test -z "$gl_have_pthread"; then + if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then + gl_have_solaristhread= + gl_save_LIBS="$LIBS" + LIBS="$LIBS -lthread" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <thread.h> +#include <synch.h> + +int +main () +{ +thr_self(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_have_solaristhread=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gl_save_LIBS" + if test -n "$gl_have_solaristhread"; then + gl_threads_api=solaris + LIBTHREAD=-lthread + LTLIBTHREAD=-lthread + LIBMULTITHREAD="$LIBTHREAD" + LTLIBMULTITHREAD="$LTLIBTHREAD" + +$as_echo "#define USE_SOLARIS_THREADS 1" >>confdefs.h + + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + +$as_echo "#define USE_SOLARIS_THREADS_WEAK 1" >>confdefs.h + + LIBTHREAD= + LTLIBTHREAD= + if test $gl_cv_linker_have_as_needed = yes; then + if test $gl_cv_linker_have_push_state = yes; then + LIBMULTITHREAD="-Wl,--push-state -Wl,--no-as-needed $LIBMULTITHREAD -Wl,--pop-state" + else + LIBMULTITHREAD="-Wl,--no-as-needed $LIBMULTITHREAD" + fi + fi + # TODO: May need to modify LTLIBMULTITHREAD similarly. + fi + fi + fi + fi + if test "$gl_use_threads" = pth; then + gl_save_CPPFLAGS="$CPPFLAGS" + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libpth" >&5 +$as_echo_n "checking how to link with libpth... " >&6; } +if ${ac_cv_libpth_libs+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libpth-prefix was given. +if test "${with_libpth_prefix+set}" = set; then : + withval=$with_libpth_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && test ! -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBPTH= + LTLIBPTH= + INCPTH= + LIBPTH_PREFIX= + HAVE_LIBPTH= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='pth ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBPTH="${LIBPTH}${LIBPTH:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBPTH; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBPTH; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" + else + LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBPTH="${LIBPTH}${LIBPTH:+ }$found_a" + else + LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'pth'; then + LIBPTH_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'pth'; then + LIBPTH_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCPTH; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCPTH="${INCPTH}${INCPTH:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBPTH; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBPTH="${LIBPTH}${LIBPTH:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBPTH; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBPTH="${LIBPTH}${LIBPTH:+ }$dep" + LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$dep" + ;; + esac + done + fi + else + LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" + LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-R$found_dir" + done + fi + + + + + + ac_cv_libpth_libs="$LIBPTH" + ac_cv_libpth_ltlibs="$LTLIBPTH" + ac_cv_libpth_cppflags="$INCPTH" + ac_cv_libpth_prefix="$LIBPTH_PREFIX" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libpth_libs" >&5 +$as_echo "$ac_cv_libpth_libs" >&6; } + LIBPTH="$ac_cv_libpth_libs" + LTLIBPTH="$ac_cv_libpth_ltlibs" + INCPTH="$ac_cv_libpth_cppflags" + LIBPTH_PREFIX="$ac_cv_libpth_prefix" + + for element in $INCPTH; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + + + HAVE_LIBPTH=yes + + + + gl_have_pth= + gl_save_LIBS="$LIBS" + LIBS="$LIBS $LIBPTH" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <pth.h> +int +main () +{ +pth_self(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_have_pth=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gl_save_LIBS" + if test -n "$gl_have_pth"; then + gl_threads_api=pth + LIBTHREAD="$LIBPTH" + LTLIBTHREAD="$LTLIBPTH" + LIBMULTITHREAD="$LIBTHREAD" + LTLIBMULTITHREAD="$LTLIBTHREAD" + +$as_echo "#define USE_PTH_THREADS 1" >>confdefs.h + + if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + +$as_echo "#define USE_PTH_THREADS_WEAK 1" >>confdefs.h + + LIBTHREAD= + LTLIBTHREAD= + if test $gl_cv_linker_have_as_needed = yes; then + if test $gl_cv_linker_have_push_state = yes; then + LIBMULTITHREAD="-Wl,--push-state -Wl,--no-as-needed $LIBMULTITHREAD -Wl,--pop-state" + else + LIBMULTITHREAD="-Wl,--no-as-needed $LIBMULTITHREAD" + fi + fi + # TODO: May need to modify LTLIBMULTITHREAD similarly. + fi + fi + else + CPPFLAGS="$gl_save_CPPFLAGS" + fi + fi + if test -z "$gl_have_pthread"; then + case "$gl_use_threads" in + yes | windows | win32) # The 'win32' is for backward compatibility. + if { case "$host_os" in + mingw*) true;; + *) false;; + esac + }; then + gl_threads_api=windows + +$as_echo "#define USE_WINDOWS_THREADS 1" >>confdefs.h + + fi + ;; + esac + fi + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5 +$as_echo_n "checking for multithread API to use... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5 +$as_echo "$gl_threads_api" >&6; } + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 +$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } +if ${gl_cv_func_lstat_dereferences_slashed_symlink+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f conftest.sym conftest.file + echo >conftest.file + if test "$cross_compiling" = yes; then : + case "$host_os" in + linux-* | linux) + # Guess yes on Linux systems. + gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; + *-gnu* | gnu*) + # Guess yes on glibc systems. + gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; + mingw*) + # Guess no on native Windows. + gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;; + *) + # If we don't know, assume the worst. + gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + if (symlink ("conftest.file", "conftest.sym") != 0) + return 1; + /* Linux will dereference the symlink and fail, as required by + POSIX. That is better in the sense that it means we will not + have to compile and use the lstat wrapper. */ + return lstat ("conftest.sym/", &sbuf) == 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_lstat_dereferences_slashed_symlink=yes +else + gl_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -f conftest.sym conftest.file + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_lstat_dereferences_slashed_symlink" >&5 +$as_echo "$gl_cv_func_lstat_dereferences_slashed_symlink" >&6; } + case "$gl_cv_func_lstat_dereferences_slashed_symlink" in + *yes) + +cat >>confdefs.h <<_ACEOF +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +_ACEOF + + ;; + esac + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc, realloc, calloc are POSIX compliant" >&5 +$as_echo_n "checking whether malloc, realloc, calloc are POSIX compliant... " >&6; } +if ${gl_cv_func_malloc_posix+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#if defined _WIN32 && ! defined __CYGWIN__ + choke me + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_func_malloc_posix=yes +else + gl_cv_func_malloc_posix=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_malloc_posix" >&5 +$as_echo "$gl_cv_func_malloc_posix" >&6; } + + + + for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if ${ac_cv_func_malloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on platforms where we know the result. + *-gnu* | gnu* | freebsd* | netbsd* | openbsd* \ + | hpux* | solaris* | cygwin* | mingw*) + ac_cv_func_malloc_0_nonnull=yes ;; + # If we don't know, assume the worst. + *) ac_cv_func_malloc_0_nonnull=no ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H + # include <stdlib.h> + #else + char *malloc (); + #endif + +int +main () +{ +char *p = malloc (0); + int result = !p; + free (p); + return result; + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_malloc_0_nonnull=yes +else + ac_cv_func_malloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } + if test $ac_cv_func_malloc_0_nonnull = yes; then : + gl_cv_func_malloc_0_nonnull=1 +else + gl_cv_func_malloc_0_nonnull=0 +fi + + +cat >>confdefs.h <<_ACEOF +#define MALLOC_0_IS_NONNULL $gl_cv_func_malloc_0_nonnull +_ACEOF + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5 +$as_echo_n "checking for mbstate_t... " >&6; } +if ${ac_cv_type_mbstate_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int +main () +{ +mbstate_t x; return sizeof x; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_type_mbstate_t=yes +else + ac_cv_type_mbstate_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_mbstate_t" >&5 +$as_echo "$ac_cv_type_mbstate_t" >&6; } + if test $ac_cv_type_mbstate_t = yes; then + +$as_echo "#define HAVE_MBSTATE_T 1" >>confdefs.h + + else + +$as_echo "#define mbstate_t int" >>confdefs.h + + fi + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5 +$as_echo_n "checking for a traditional japanese locale... " >&6; } +if ${gt_cv_locale_ja+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () +{ + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if defined __BEOS__ || defined __HAIKU__ + return 1; +#else + /* Check whether the given locale name is recognized by the system. */ +# if defined _WIN32 && !defined __CYGWIN__ + /* On native Windows, setlocale(category, "") looks at the system settings, + not at the environment variables. Also, when an encoding suffix such + as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE + category of the locale to "C". */ + if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL + || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + return 1; +# else + if (setlocale (LC_ALL, "") == NULL) return 1; +# endif + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. + On MirBSD 10, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "UTF-8". */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 + || strcmp (cs, "UTF-8") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales + on Cygwin 1.5.x. */ + if (MB_CUR_MAX == 1) + return 1; + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding (except on MirBSD). */ + { + const char *p; + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + } + return 0; +#endif +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + case "$host_os" in + # Handle native Windows specially, because there setlocale() interprets + # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", + # "fr" or "fra" as "French" or "French_France.1252", + # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", + # "ja" as "Japanese" or "Japanese_Japan.932", + # and similar. + mingw*) + # Note that on native Windows, the Japanese locale is + # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we + # cannot use it here. + gt_cv_locale_ja=none + ;; + *) + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the AIX locale name. + if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC-JP + else + # Test for the HP-UX, OSF/1, NetBSD locale name. + if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.eucJP + else + # Test for the IRIX, FreeBSD locale name. + if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC + else + # Test for the Solaris 7 locale name. + if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja + else + # Special test for NetBSD 1.6. + if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then + gt_cv_locale_ja=ja_JP.eucJP + else + # None found. + gt_cv_locale_ja=none + fi + fi + fi + fi + fi + fi + ;; + esac + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5 +$as_echo "$gt_cv_locale_ja" >&6; } + LOCALE_JA=$gt_cv_locale_ja + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5 +$as_echo_n "checking for a transitional chinese locale... " >&6; } +if ${gt_cv_locale_zh_CN+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <stdlib.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () +{ + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if defined __BEOS__ || defined __HAIKU__ + return 1; +#else + /* Check whether the given locale name is recognized by the system. */ +# if defined _WIN32 && !defined __CYGWIN__ + /* On native Windows, setlocale(category, "") looks at the system settings, + not at the environment variables. Also, when an encoding suffix such + as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE + category of the locale to "C". */ + if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL + || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + return 1; +# else + if (setlocale (LC_ALL, "") == NULL) return 1; +# endif + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. + On MirBSD 10, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "UTF-8". */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 + || strcmp (cs, "UTF-8") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding (except on MirBSD). */ + { + const char *p; + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + } + /* Check whether a typical GB18030 multibyte sequence is recognized as a + single wide character. This excludes the GB2312 and GBK encodings. */ + if (mblen ("\203\062\332\066", 5) != 4) + return 1; + return 0; +#endif +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + case "$host_os" in + # Handle native Windows specially, because there setlocale() interprets + # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", + # "fr" or "fra" as "French" or "French_France.1252", + # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", + # "ja" as "Japanese" or "Japanese_Japan.932", + # and similar. + mingw*) + # Test for the hypothetical native Windows locale name. + if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=Chinese_China.54936 + else + # None found. + gt_cv_locale_zh_CN=none + fi + ;; + solaris2.8) + # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are + # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. + # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. + gt_cv_locale_zh_CN=none + ;; + *) + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the locale name without encoding suffix. + if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN.GB18030 + else + # None found. + gt_cv_locale_zh_CN=none + fi + fi + ;; + esac + else + # If there was a link error, due to mblen(), the system is so old that + # it certainly doesn't have a chinese locale. + gt_cv_locale_zh_CN=none + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5 +$as_echo "$gt_cv_locale_zh_CN" >&6; } + LOCALE_ZH_CN=$gt_cv_locale_zh_CN + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if ${gt_cv_locale_fr_utf8+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ +# if defined _WIN32 && !defined __CYGWIN__ + /* On native Windows, setlocale(category, "") looks at the system settings, + not at the environment variables. Also, when an encoding suffix such + as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE + category of the locale to "C". */ + if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL + || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + return 1; +# else + if (setlocale (LC_ALL, "") == NULL) return 1; +# endif + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif +#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; +#endif + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + case "$host_os" in + # Handle native Windows specially, because there setlocale() interprets + # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", + # "fr" or "fra" as "French" or "French_France.1252", + # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", + # "ja" as "Japanese" or "Japanese_Japan.932", + # and similar. + mingw*) + # Test for the hypothetical native Windows locale name. + if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=French_France.65001 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + ;; + *) + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + ;; + esac + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + + + + + + + + + + + + if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 +$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; } +if ${gl_cv_func_mbrtowc_incomplete_state+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and OSF/1. + aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; + esac + if test $LOCALE_JA != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 2; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_incomplete_state=yes +else + gl_cv_func_mbrtowc_incomplete_state=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 +$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 +$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; } +if ${gl_cv_func_mbrtowc_sanitycheck+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8. + solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + /* This fails on Solaris 8: + mbrtowc returns 2, and sets wc to 0x00F0. + mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 6, &state) != 4 + && mbtowc (&wc, input + 3, 6) == 4) + return 2; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_sanitycheck=yes +else + gl_cv_func_mbrtowc_sanitycheck=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 +$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; } + + REPLACE_MBSTATE_T=0 + case "$gl_cv_func_mbrtowc_incomplete_state" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + case "$gl_cv_func_mbrtowc_sanitycheck" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + else + REPLACE_MBSTATE_T=1 + fi + + + + if test $ac_cv_func_mbrtowc = no; then + HAVE_MBRTOWC=0 + ac_fn_c_check_decl "$LINENO" "mbrtowc" "ac_cv_have_decl_mbrtowc" " +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> + +" +if test "x$ac_cv_have_decl_mbrtowc" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_MBRTOWC $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_mbrtowc = yes; then + REPLACE_MBRTOWC=1 + fi + else + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBRTOWC=1 + else + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL pwc argument" >&5 +$as_echo_n "checking whether mbrtowc handles a NULL pwc argument... " >&6; } +if ${gl_cv_func_mbrtowc_null_arg1+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris. + solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_null_arg1="guessing yes" ;; + esac + if test $LOCALE_FR_UTF8 != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + int result = 0; + + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + char input[] = "\303\237er"; + mbstate_t state; + wchar_t wc; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 5, &state); + if (ret != 2) + result |= 1; + if (!mbsinit (&state)) + result |= 2; + + memset (&state, '\0', sizeof (mbstate_t)); + ret = mbrtowc (NULL, input, 5, &state); + if (ret != 2) /* Solaris 7 fails here: ret is -1. */ + result |= 4; + if (!mbsinit (&state)) + result |= 8; + } + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_null_arg1=yes +else + gl_cv_func_mbrtowc_null_arg1=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg1" >&5 +$as_echo "$gl_cv_func_mbrtowc_null_arg1" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL string argument" >&5 +$as_echo_n "checking whether mbrtowc handles a NULL string argument... " >&6; } +if ${gl_cv_func_mbrtowc_null_arg2+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on OSF/1. + osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_null_arg2="guessing yes" ;; + esac + if test $LOCALE_FR_UTF8 != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + mbstate_t state; + wchar_t wc; + int ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + mbrtowc (&wc, NULL, 5, &state); + /* Check that wc was not modified. */ + if (wc != (wchar_t) 0xBADFACE) + return 2; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_null_arg2=yes +else + gl_cv_func_mbrtowc_null_arg2=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg2" >&5 +$as_echo "$gl_cv_func_mbrtowc_null_arg2" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc has a correct return value" >&5 +$as_echo_n "checking whether mbrtowc has a correct return value... " >&6; } +if ${gl_cv_func_mbrtowc_retval+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on HP-UX, Solaris, native Windows. + hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_retval="guessing yes" ;; + esac + if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \ + || { case "$host_os" in mingw*) true;; *) false;; esac; }; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + int result = 0; + int found_some_locale = 0; + /* This fails on Solaris. */ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + char input[] = "B\303\274\303\237er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrtowc (&wc, input + 2, 5, &state) != 1) + result |= 1; + } + found_some_locale = 1; + } + /* This fails on HP-UX 11.11. */ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrtowc (&wc, input + 2, 5, &state) != 2) + result |= 2; + } + found_some_locale = 1; + } + /* This fails on native Windows. */ + if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) + { + char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) + { + input[3] = '\0'; + if (mbrtowc (&wc, input + 4, 4, &state) != 1) + result |= 4; + } + found_some_locale = 1; + } + if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) + { + char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) + { + input[3] = '\0'; + if (mbrtowc (&wc, input + 4, 4, &state) != 1) + result |= 8; + } + found_some_locale = 1; + } + if (setlocale (LC_ALL, "Chinese_China.936") != NULL) + { + char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) + { + input[3] = '\0'; + if (mbrtowc (&wc, input + 4, 4, &state) != 1) + result |= 16; + } + found_some_locale = 1; + } + return (found_some_locale ? result : 77); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_retval=yes +else + if test $? != 77; then + gl_cv_func_mbrtowc_retval=no + fi + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_retval" >&5 +$as_echo "$gl_cv_func_mbrtowc_retval" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc returns 0 when parsing a NUL character" >&5 +$as_echo_n "checking whether mbrtowc returns 0 when parsing a NUL character... " >&6; } +if ${gl_cv_func_mbrtowc_nul_retval+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8 and 9. + solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + /* This fails on Solaris 8 and 9. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "", 1, &state) != 0) + return 2; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_nul_retval=yes +else + gl_cv_func_mbrtowc_nul_retval=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_nul_retval" >&5 +$as_echo "$gl_cv_func_mbrtowc_nul_retval" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works on empty input" >&5 +$as_echo_n "checking whether mbrtowc works on empty input... " >&6; } +if ${gl_cv_func_mbrtowc_empty_input+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and glibc systems. + aix* | *-gnu* | gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; + *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; + esac + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <wchar.h> + static wchar_t wc; + static mbstate_t mbs; + int + main (void) + { + return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2; + } +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_empty_input=yes +else + gl_cv_func_mbrtowc_empty_input=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_empty_input" >&5 +$as_echo "$gl_cv_func_mbrtowc_empty_input" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C locale is free of encoding errors" >&5 +$as_echo_n "checking whether the C locale is free of encoding errors... " >&6; } +if ${gl_cv_C_locale_sans_EILSEQ+:} false; then : + $as_echo_n "(cached) " >&6 +else + + gl_cv_C_locale_sans_EILSEQ="guessing no" + + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on native Windows. + mingw*) gl_cv_C_locale_sans_EILSEQ="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + #include <locale.h> + #include <wchar.h> + +int +main () +{ + + int i; + char *locale = setlocale (LC_ALL, "C"); + if (! locale) + return 2; + for (i = CHAR_MIN; i <= CHAR_MAX; i++) + { + char c = i; + wchar_t wc; + mbstate_t mbs = { 0, }; + size_t ss = mbrtowc (&wc, &c, 1, &mbs); + if (1 < ss) + return 3; + } + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_C_locale_sans_EILSEQ=yes +else + gl_cv_C_locale_sans_EILSEQ=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_C_locale_sans_EILSEQ" >&5 +$as_echo "$gl_cv_C_locale_sans_EILSEQ" >&6; } + + case "$gl_cv_func_mbrtowc_null_arg1" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_NULL_ARG1_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_null_arg2" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_NULL_ARG2_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_retval" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_RETVAL_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_nul_retval" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_NUL_RETVAL_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_empty_input" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_EMPTY_INPUT_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case $gl_cv_C_locale_sans_EILSEQ in + *yes) ;; + *) +$as_echo "#define C_LOCALE_MAYBE_EILSEQ 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + fi + fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + + + + + + + GNULIB_EXPLICIT_BZERO=0; + GNULIB_FFSL=0; + GNULIB_FFSLL=0; + GNULIB_MEMCHR=0; + GNULIB_MEMMEM=0; + GNULIB_MEMPCPY=0; + GNULIB_MEMRCHR=0; + GNULIB_RAWMEMCHR=0; + GNULIB_STPCPY=0; + GNULIB_STPNCPY=0; + GNULIB_STRCHRNUL=0; + GNULIB_STRDUP=0; + GNULIB_STRNCAT=0; + GNULIB_STRNDUP=0; + GNULIB_STRNLEN=0; + GNULIB_STRPBRK=0; + GNULIB_STRSEP=0; + GNULIB_STRSTR=0; + GNULIB_STRCASESTR=0; + GNULIB_STRTOK_R=0; + GNULIB_MBSLEN=0; + GNULIB_MBSNLEN=0; + GNULIB_MBSCHR=0; + GNULIB_MBSRCHR=0; + GNULIB_MBSSTR=0; + GNULIB_MBSCASECMP=0; + GNULIB_MBSNCASECMP=0; + GNULIB_MBSPCASECMP=0; + GNULIB_MBSCASESTR=0; + GNULIB_MBSCSPN=0; + GNULIB_MBSPBRK=0; + GNULIB_MBSSPN=0; + GNULIB_MBSSEP=0; + GNULIB_MBSTOK_R=0; + GNULIB_STRERROR=0; + GNULIB_STRERROR_R=0; + GNULIB_STRSIGNAL=0; + GNULIB_STRVERSCMP=0; + HAVE_MBSLEN=0; + HAVE_EXPLICIT_BZERO=1; + HAVE_FFSL=1; + HAVE_FFSLL=1; + HAVE_MEMCHR=1; + HAVE_DECL_MEMMEM=1; + HAVE_MEMPCPY=1; + HAVE_DECL_MEMRCHR=1; + HAVE_RAWMEMCHR=1; + HAVE_STPCPY=1; + HAVE_STPNCPY=1; + HAVE_STRCHRNUL=1; + HAVE_DECL_STRDUP=1; + HAVE_DECL_STRNDUP=1; + HAVE_DECL_STRNLEN=1; + HAVE_STRPBRK=1; + HAVE_STRSEP=1; + HAVE_STRCASESTR=1; + HAVE_DECL_STRTOK_R=1; + HAVE_DECL_STRERROR_R=1; + HAVE_DECL_STRSIGNAL=1; + HAVE_STRVERSCMP=1; + REPLACE_MEMCHR=0; + REPLACE_MEMMEM=0; + REPLACE_STPNCPY=0; + REPLACE_STRCHRNUL=0; + REPLACE_STRDUP=0; + REPLACE_STRNCAT=0; + REPLACE_STRNDUP=0; + REPLACE_STRNLEN=0; + REPLACE_STRSTR=0; + REPLACE_STRCASESTR=0; + REPLACE_STRTOK_R=0; + REPLACE_STRERROR=0; + REPLACE_STRERROR_R=0; + REPLACE_STRSIGNAL=0; + UNDEFINE_STRTOK_R=0; + + + + + + + # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it + # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is + # irrelevant for anonymous mappings. + ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" +if test "x$ac_cv_func_mmap" = xyes; then : + gl_have_mmap=yes +else + gl_have_mmap=no +fi + + + # Try to allow MAP_ANONYMOUS. + gl_have_mmap_anonymous=no + if test $gl_have_mmap = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANONYMOUS" >&5 +$as_echo_n "checking for MAP_ANONYMOUS... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <sys/mman.h> +#ifdef MAP_ANONYMOUS + I cannot identify this map +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "I cannot identify this map" >/dev/null 2>&1; then : + gl_have_mmap_anonymous=yes +fi +rm -f conftest* + + if test $gl_have_mmap_anonymous != yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <sys/mman.h> +#ifdef MAP_ANON + I cannot identify this map +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "I cannot identify this map" >/dev/null 2>&1; then : + +$as_echo "#define MAP_ANONYMOUS MAP_ANON" >>confdefs.h + + gl_have_mmap_anonymous=yes +fi +rm -f conftest* + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_have_mmap_anonymous" >&5 +$as_echo "$gl_have_mmap_anonymous" >&6; } + if test $gl_have_mmap_anonymous = yes; then + +$as_echo "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h + + fi + fi + + + + + + + if test $HAVE_MEMCHR = 1; then + # Detect platform-specific bugs in some versions of glibc: + # memchr should not dereference anything with length 0 + # https://bugzilla.redhat.com/show_bug.cgi?id=499689 + # memchr should not dereference overestimated length after a match + # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 + # https://sourceware.org/bugzilla/show_bug.cgi?id=10162 + # Assume that memchr works on platforms that lack mprotect. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memchr works" >&5 +$as_echo_n "checking whether memchr works... " >&6; } +if ${gl_cv_func_memchr_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on native Windows. + mingw*) gl_cv_func_memchr_works="guessing yes" ;; + # Be pessimistic for now. + *) gl_cv_func_memchr_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <string.h> +#if HAVE_SYS_MMAN_H +# include <fcntl.h> +# include <unistd.h> +# include <sys/types.h> +# include <sys/mman.h> +# ifndef MAP_FILE +# define MAP_FILE 0 +# endif +#endif + +int +main () +{ + + int result = 0; + char *fence = NULL; +#if HAVE_SYS_MMAN_H && HAVE_MPROTECT +# if HAVE_MAP_ANONYMOUS + const int flags = MAP_ANONYMOUS | MAP_PRIVATE; + const int fd = -1; +# else /* !HAVE_MAP_ANONYMOUS */ + const int flags = MAP_FILE | MAP_PRIVATE; + int fd = open ("/dev/zero", O_RDONLY, 0666); + if (fd >= 0) +# endif + { + int pagesize = getpagesize (); + char *two_pages = + (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, + flags, fd, 0); + if (two_pages != (char *)(-1) + && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) + fence = two_pages + pagesize; + } +#endif + if (fence) + { + if (memchr (fence, 0, 0)) + result |= 1; + strcpy (fence - 9, "12345678"); + if (memchr (fence - 9, 0, 79) != fence - 1) + result |= 2; + if (memchr (fence - 1, 0, 3) != fence - 1) + result |= 4; + } + return result; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_memchr_works=yes +else + gl_cv_func_memchr_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_memchr_works" >&5 +$as_echo "$gl_cv_func_memchr_works" >&6; } + case "$gl_cv_func_memchr_works" in + *yes) ;; + *) REPLACE_MEMCHR=1 ;; + esac + fi + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <limits.h> defines MIN and MAX" >&5 +$as_echo_n "checking whether <limits.h> defines MIN and MAX... " >&6; } +if ${gl_cv_minmax_in_limits_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + int x = MIN (42, 17); +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_minmax_in_limits_h=yes +else + gl_cv_minmax_in_limits_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_minmax_in_limits_h" >&5 +$as_echo "$gl_cv_minmax_in_limits_h" >&6; } + if test $gl_cv_minmax_in_limits_h = yes; then + +$as_echo "#define HAVE_MINMAX_IN_LIMITS_H 1" >>confdefs.h + + fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <sys/param.h> defines MIN and MAX" >&5 +$as_echo_n "checking whether <sys/param.h> defines MIN and MAX... " >&6; } +if ${gl_cv_minmax_in_sys_param_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/param.h> + int x = MIN (42, 17); +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_minmax_in_sys_param_h=yes +else + gl_cv_minmax_in_sys_param_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_minmax_in_sys_param_h" >&5 +$as_echo "$gl_cv_minmax_in_sys_param_h" >&6; } + if test $gl_cv_minmax_in_sys_param_h = yes; then + +$as_echo "#define HAVE_MINMAX_IN_SYS_PARAM_H 1" >>confdefs.h + + fi + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time_t is signed" >&5 +$as_echo_n "checking whether time_t is signed... " >&6; } +if ${gl_cv_time_t_is_signed+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <time.h> + char time_t_signed[(time_t) -1 < 0 ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_time_t_is_signed=yes +else + gl_cv_time_t_is_signed=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_time_t_is_signed" >&5 +$as_echo "$gl_cv_time_t_is_signed" >&6; } + if test $gl_cv_time_t_is_signed = yes; then + +$as_echo "#define TIME_T_IS_SIGNED 1" >>confdefs.h + + fi + + + + + + + + + + + if test $APPLE_UNIVERSAL_BUILD = 1; then + # A universal build on Apple Mac OS X platforms. + # The test result would be 'yes' in 32-bit mode and 'no' in 64-bit mode. + # But we need a configuration result that is valid in both modes. + gl_cv_func_working_mktime=no + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mktime" >&5 +$as_echo_n "checking for working mktime... " >&6; } +if ${gl_cv_func_working_mktime+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess no on native Windows. + mingw*) gl_cv_func_working_mktime="guessing no" ;; + *) gl_cv_func_working_mktime="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Test program from Paul Eggert and Tony Leneis. */ +#include <limits.h> +#include <stdlib.h> +#include <time.h> + +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif + +#if HAVE_DECL_ALARM +# include <signal.h> +#endif + +#ifndef TIME_T_IS_SIGNED +# define TIME_T_IS_SIGNED 0 +#endif + +/* Work around redefinition to rpl_putenv by other config tests. */ +#undef putenv + +static time_t time_t_max; +static time_t time_t_min; + +/* Values we'll use to set the TZ environment variable. */ +static char *tz_strings[] = { + (char *) 0, "TZ=GMT0", "TZ=JST-9", + "TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00" +}; +#define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0])) + +/* Return 0 if mktime fails to convert a date in the spring-forward gap. + Based on a problem report from Andreas Jaeger. */ +static int +spring_forward_gap () +{ + /* glibc (up to about 1998-10-07) failed this test. */ + struct tm tm; + + /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" + instead of "TZ=America/Vancouver" in order to detect the bug even + on systems that don't support the Olson extension, or don't have the + full zoneinfo tables installed. */ + putenv ("TZ=PST8PDT,M4.1.0,M10.5.0"); + + tm.tm_year = 98; + tm.tm_mon = 3; + tm.tm_mday = 5; + tm.tm_hour = 2; + tm.tm_min = 0; + tm.tm_sec = 0; + tm.tm_isdst = -1; + return mktime (&tm) != (time_t) -1; +} + +static int +mktime_test1 (time_t now) +{ + struct tm *lt; + return ! (lt = localtime (&now)) || mktime (lt) == now; +} + +static int +mktime_test (time_t now) +{ + return (mktime_test1 (now) + && mktime_test1 ((time_t) (time_t_max - now)) + && mktime_test1 ((time_t) (time_t_min + now))); +} + +static int +irix_6_4_bug () +{ + /* Based on code from Ariel Faigon. */ + struct tm tm; + tm.tm_year = 96; + tm.tm_mon = 3; + tm.tm_mday = 0; + tm.tm_hour = 0; + tm.tm_min = 0; + tm.tm_sec = 0; + tm.tm_isdst = -1; + mktime (&tm); + return tm.tm_mon == 2 && tm.tm_mday == 31; +} + +static int +bigtime_test (int j) +{ + struct tm tm; + time_t now; + tm.tm_year = tm.tm_mon = tm.tm_mday = tm.tm_hour = tm.tm_min = tm.tm_sec = j; + now = mktime (&tm); + if (now != (time_t) -1) + { + struct tm *lt = localtime (&now); + if (! (lt + && lt->tm_year == tm.tm_year + && lt->tm_mon == tm.tm_mon + && lt->tm_mday == tm.tm_mday + && lt->tm_hour == tm.tm_hour + && lt->tm_min == tm.tm_min + && lt->tm_sec == tm.tm_sec + && lt->tm_yday == tm.tm_yday + && lt->tm_wday == tm.tm_wday + && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst) + == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst)))) + return 0; + } + return 1; +} + +static int +year_2050_test () +{ + /* The correct answer for 2050-02-01 00:00:00 in Pacific time, + ignoring leap seconds. */ + unsigned long int answer = 2527315200UL; + + struct tm tm; + time_t t; + tm.tm_year = 2050 - 1900; + tm.tm_mon = 2 - 1; + tm.tm_mday = 1; + tm.tm_hour = tm.tm_min = tm.tm_sec = 0; + tm.tm_isdst = -1; + + /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" + instead of "TZ=America/Vancouver" in order to detect the bug even + on systems that don't support the Olson extension, or don't have the + full zoneinfo tables installed. */ + putenv ("TZ=PST8PDT,M4.1.0,M10.5.0"); + + t = mktime (&tm); + + /* Check that the result is either a failure, or close enough + to the correct answer that we can assume the discrepancy is + due to leap seconds. */ + return (t == (time_t) -1 + || (0 < t && answer - 120 <= t && t <= answer + 120)); +} + +int +main () +{ + int result = 0; + time_t t, delta; + int i, j; + int time_t_signed_magnitude = (time_t) ~ (time_t) 0 < (time_t) -1; + +#if HAVE_DECL_ALARM + /* This test makes some buggy mktime implementations loop. + Give up after 60 seconds; a mktime slower than that + isn't worth using anyway. */ + signal (SIGALRM, SIG_DFL); + alarm (60); +#endif + + time_t_max = (! TIME_T_IS_SIGNED + ? (time_t) -1 + : ((((time_t) 1 << (sizeof (time_t) * CHAR_BIT - 2)) - 1) + * 2 + 1)); + time_t_min = (! TIME_T_IS_SIGNED + ? (time_t) 0 + : time_t_signed_magnitude + ? ~ (time_t) 0 + : ~ time_t_max); + + delta = time_t_max / 997; /* a suitable prime number */ + for (i = 0; i < N_STRINGS; i++) + { + if (tz_strings[i]) + putenv (tz_strings[i]); + + for (t = 0; t <= time_t_max - delta && (result & 1) == 0; t += delta) + if (! mktime_test (t)) + result |= 1; + if ((result & 2) == 0 + && ! (mktime_test ((time_t) 1) + && mktime_test ((time_t) (60 * 60)) + && mktime_test ((time_t) (60 * 60 * 24)))) + result |= 2; + + for (j = 1; (result & 4) == 0; j <<= 1) + { + if (! bigtime_test (j)) + result |= 4; + if (INT_MAX / 2 < j) + break; + } + if ((result & 8) == 0 && ! bigtime_test (INT_MAX)) + result |= 8; + } + if (! irix_6_4_bug ()) + result |= 16; + if (! spring_forward_gap ()) + result |= 32; + if (! year_2050_test ()) + result |= 64; + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_working_mktime=yes +else + gl_cv_func_working_mktime=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_mktime" >&5 +$as_echo "$gl_cv_func_working_mktime" >&6; } + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 +$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } +if ${ac_cv_struct_tm+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <time.h> + +int +main () +{ +struct tm tm; + int *p = &tm.tm_sec; + return !p; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_struct_tm=time.h +else + ac_cv_struct_tm=sys/time.h +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 +$as_echo "$ac_cv_struct_tm" >&6; } +if test $ac_cv_struct_tm = sys/time.h; then + +$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h + +fi + +ac_fn_c_check_member "$LINENO" "struct tm" "tm_zone" "ac_cv_member_struct_tm_tm_zone" "#include <sys/types.h> +#include <$ac_cv_struct_tm> + +" +if test "x$ac_cv_member_struct_tm_tm_zone" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_TM_TM_ZONE 1 +_ACEOF + + +fi + +if test "$ac_cv_member_struct_tm_tm_zone" = yes; then + +$as_echo "#define HAVE_TM_ZONE 1" >>confdefs.h + +else + ac_fn_c_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include <time.h> +" +if test "x$ac_cv_have_decl_tzname" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_TZNAME $ac_have_decl +_ACEOF + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5 +$as_echo_n "checking for tzname... " >&6; } +if ${ac_cv_var_tzname+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <time.h> +#if !HAVE_DECL_TZNAME +extern char *tzname[]; +#endif + +int +main () +{ +return tzname[0][0]; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_var_tzname=yes +else + ac_cv_var_tzname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 +$as_echo "$ac_cv_var_tzname" >&6; } + if test $ac_cv_var_tzname = yes; then + +$as_echo "#define HAVE_TZNAME 1" >>confdefs.h + + fi +fi + + + ac_fn_c_check_member "$LINENO" "struct tm" "tm_gmtoff" "ac_cv_member_struct_tm_tm_gmtoff" "#include <time.h> +" +if test "x$ac_cv_member_struct_tm_tm_gmtoff" = xyes; then : + +$as_echo "#define HAVE_TM_GMTOFF 1" >>confdefs.h + +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for O_CLOEXEC" >&5 +$as_echo_n "checking for O_CLOEXEC... " >&6; } +if ${gl_cv_macro_O_CLOEXEC+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <fcntl.h> + #ifndef O_CLOEXEC + choke me; + #endif + +int +main () +{ +return O_CLOEXEC; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_macro_O_CLOEXEC=yes +else + gl_cv_macro_O_CLOEXEC=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_macro_O_CLOEXEC" >&5 +$as_echo "$gl_cv_macro_O_CLOEXEC" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for promoted mode_t type" >&5 +$as_echo_n "checking for promoted mode_t type... " >&6; } +if ${gl_cv_promoted_mode_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +int +main () +{ +typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1]; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_promoted_mode_t='int' +else + gl_cv_promoted_mode_t='mode_t' +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_promoted_mode_t" >&5 +$as_echo "$gl_cv_promoted_mode_t" >&6; } + +cat >>confdefs.h <<_ACEOF +#define PROMOTED_MODE_T $gl_cv_promoted_mode_t +_ACEOF + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if ${ac_cv_header_stdbool_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <stdbool.h> + + #ifdef __cplusplus + typedef bool Bool; + #else + typedef _Bool Bool; + #ifndef bool + "error: bool is not defined" + #endif + #ifndef false + "error: false is not defined" + #endif + #if false + "error: false is not 0" + #endif + #ifndef true + "error: true is not defined" + #endif + #if true != 1 + "error: true is not 1" + #endif + #endif + + #ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" + #endif + + struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + /* See body of main program for 'e'. */ + char f[(Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ + Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + /* Catch a bug in an HP-UX C compiler. See + https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html + */ + Bool q = true; + Bool *pq = &q; + bool *qq = &q; + +int +main () +{ + + bool e = &s; + *pq |= q; *pq |= ! q; + *qq |= q; *qq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq + !qq); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdbool_h=yes +else + ac_cv_header_stdbool_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } + ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE__BOOL 1 +_ACEOF + + +fi + + + + + + # Define two additional variables used in the Makefile substitution. + + if test "$ac_cv_header_stdbool_h" = yes; then + STDBOOL_H='' + else + STDBOOL_H='stdbool.h' + fi + + if test -n "$STDBOOL_H"; then + GL_GENERATE_STDBOOL_H_TRUE= + GL_GENERATE_STDBOOL_H_FALSE='#' +else + GL_GENERATE_STDBOOL_H_TRUE='#' + GL_GENERATE_STDBOOL_H_FALSE= +fi + + + if test "$ac_cv_type__Bool" = yes; then + HAVE__BOOL=1 + else + HAVE__BOOL=0 + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compound literals" >&5 +$as_echo_n "checking for compound literals... " >&6; } +if ${gl_cv_compound_literals+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +struct s { int i, j; }; +int +main () +{ +struct s t = (struct s) { 3, 4 }; + if (t.i != 0) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_compound_literals=yes +else + gl_cv_compound_literals=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_compound_literals" >&5 +$as_echo "$gl_cv_compound_literals" >&6; } + if test $gl_cv_compound_literals = yes; then + +$as_echo "#define HAVE_COMPOUND_LITERALS 1" >>confdefs.h + + fi + + + GNULIB_POSIX_SPAWN=0; + GNULIB_POSIX_SPAWNP=0; + GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT=0; + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=0; + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0; + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0; + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0; + GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY=0; + GNULIB_POSIX_SPAWNATTR_INIT=0; + GNULIB_POSIX_SPAWNATTR_GETFLAGS=0; + GNULIB_POSIX_SPAWNATTR_SETFLAGS=0; + GNULIB_POSIX_SPAWNATTR_GETPGROUP=0; + GNULIB_POSIX_SPAWNATTR_SETPGROUP=0; + GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM=0; + GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM=0; + GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY=0; + GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY=0; + GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT=0; + GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT=0; + GNULIB_POSIX_SPAWNATTR_GETSIGMASK=0; + GNULIB_POSIX_SPAWNATTR_SETSIGMASK=0; + GNULIB_POSIX_SPAWNATTR_DESTROY=0; + HAVE_POSIX_SPAWN=1; + HAVE_POSIX_SPAWNATTR_T=1; + HAVE_POSIX_SPAWN_FILE_ACTIONS_T=1; + + HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=1; + + REPLACE_POSIX_SPAWN=0; + REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=0; + + REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0; + + REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0; + + REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0; + + + + + + LIB_POSIX_SPAWN= + + gl_saved_libs=$LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing posix_spawn" >&5 +$as_echo_n "checking for library containing posix_spawn... " >&6; } +if ${ac_cv_search_posix_spawn+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char posix_spawn (); +int +main () +{ +return posix_spawn (); + ; + return 0; +} +_ACEOF +for ac_lib in '' rt; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_posix_spawn=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_posix_spawn+:} false; then : + break +fi +done +if ${ac_cv_search_posix_spawn+:} false; then : + +else + ac_cv_search_posix_spawn=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_posix_spawn" >&5 +$as_echo "$ac_cv_search_posix_spawn" >&6; } +ac_res=$ac_cv_search_posix_spawn +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + test "$ac_cv_search_posix_spawn" = "none required" || + LIB_POSIX_SPAWN=$ac_cv_search_posix_spawn +fi + + for ac_func in posix_spawn +do : + ac_fn_c_check_func "$LINENO" "posix_spawn" "ac_cv_func_posix_spawn" +if test "x$ac_cv_func_posix_spawn" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_POSIX_SPAWN 1 +_ACEOF + +fi +done + + LIBS=$gl_saved_libs + + if test $ac_cv_func_posix_spawn != yes; then + HAVE_POSIX_SPAWN=0 + fi + + + + + if test $ac_cv_func_posix_spawn = yes; then + + if test $REPLACE_POSIX_SPAWN = 0; then + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_spawn works" >&5 +$as_echo_n "checking whether posix_spawn works... " >&6; } +if ${gl_cv_func_posix_spawn_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test $cross_compiling = no; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <errno.h> +#include <fcntl.h> +#include <signal.h> +#include <spawn.h> +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/wait.h> + +extern char **environ; + +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +#ifndef WTERMSIG +# define WTERMSIG(x) ((x) & 0x7f) +#endif +#ifndef WIFEXITED +# define WIFEXITED(x) (WTERMSIG (x) == 0) +#endif +#ifndef WEXITSTATUS +# define WEXITSTATUS(x) (((x) >> 8) & 0xff) +#endif + +#define CHILD_PROGRAM_FILENAME "/non/exist/ent" + +static int +fd_safer (int fd) +{ + if (0 <= fd && fd <= 2) + { + int f = fd_safer (dup (fd)); + int e = errno; + close (fd); + errno = e; + fd = f; + } + + return fd; +} + +int +main () +{ + char *argv[2] = { CHILD_PROGRAM_FILENAME, NULL }; + int ofd[2]; + sigset_t blocked_signals; + sigset_t fatal_signal_set; + posix_spawn_file_actions_t actions; + bool actions_allocated; + posix_spawnattr_t attrs; + bool attrs_allocated; + int err; + pid_t child; + int status; + int exitstatus; + + setvbuf (stdout, NULL, _IOFBF, 0); + puts ("This should be seen only once."); + if (pipe (ofd) < 0 || (ofd[1] = fd_safer (ofd[1])) < 0) + { + perror ("cannot create pipe"); + exit (1); + } + sigprocmask (SIG_SETMASK, NULL, &blocked_signals); + sigemptyset (&fatal_signal_set); + sigaddset (&fatal_signal_set, SIGINT); + sigaddset (&fatal_signal_set, SIGTERM); + sigaddset (&fatal_signal_set, SIGHUP); + sigaddset (&fatal_signal_set, SIGPIPE); + sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); + actions_allocated = false; + attrs_allocated = false; + if ((err = posix_spawn_file_actions_init (&actions)) != 0 + || (actions_allocated = true, + (err = posix_spawn_file_actions_adddup2 (&actions, ofd[0], STDIN_FILENO)) != 0 + || (err = posix_spawn_file_actions_addclose (&actions, ofd[0])) != 0 + || (err = posix_spawn_file_actions_addclose (&actions, ofd[1])) != 0 + || (err = posix_spawnattr_init (&attrs)) != 0 + || (attrs_allocated = true, + (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0 + || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0) + || (err = posix_spawnp (&child, CHILD_PROGRAM_FILENAME, &actions, &attrs, argv, environ)) != 0)) + { + if (actions_allocated) + posix_spawn_file_actions_destroy (&actions); + if (attrs_allocated) + posix_spawnattr_destroy (&attrs); + sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); + if (err == ENOENT) + return 0; + else + { + errno = err; + perror ("subprocess failed"); + exit (1); + } + } + posix_spawn_file_actions_destroy (&actions); + posix_spawnattr_destroy (&attrs); + sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); + close (ofd[0]); + close (ofd[1]); + status = 0; + while (waitpid (child, &status, 0) != child) + ; + if (!WIFEXITED (status)) + { + fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); + exit (1); + } + exitstatus = WEXITSTATUS (status); + if (exitstatus != 127) + { + fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); + exit (1); + } + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if test -s conftest$ac_exeext \ + && ./conftest$ac_exeext > conftest.out \ + && echo 'This should be seen only once.' > conftest.ok \ + && cmp conftest.out conftest.ok >/dev/null 2>&1; then + gl_cv_func_posix_spawn_works=yes + else + gl_cv_func_posix_spawn_works=no + fi +else + gl_cv_func_posix_spawn_works=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test $gl_cv_func_posix_spawn_works = yes; then + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Test whether posix_spawn_file_actions_addopen supports filename arguments + that contain special characters such as '*'. */ + +#include <errno.h> +#include <fcntl.h> +#include <signal.h> +#include <spawn.h> +#include <stdbool.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/wait.h> + +extern char **environ; + +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +#ifndef WTERMSIG +# define WTERMSIG(x) ((x) & 0x7f) +#endif +#ifndef WIFEXITED +# define WIFEXITED(x) (WTERMSIG (x) == 0) +#endif +#ifndef WEXITSTATUS +# define WEXITSTATUS(x) (((x) >> 8) & 0xff) +#endif + +#define CHILD_PROGRAM_FILENAME "conftest" +#define DATA_FILENAME "conftest%=*#?" + +static int +parent_main (void) +{ + FILE *fp; + char *argv[3] = { CHILD_PROGRAM_FILENAME, "-child", NULL }; + posix_spawn_file_actions_t actions; + bool actions_allocated; + int err; + pid_t child; + int status; + int exitstatus; + + /* Create a data file with specific contents. */ + fp = fopen (DATA_FILENAME, "wb"); + if (fp == NULL) + { + perror ("cannot create data file"); + return 1; + } + fwrite ("Halle Potta", 1, 11, fp); + if (fflush (fp) || fclose (fp)) + { + perror ("cannot prepare data file"); + return 2; + } + + /* Avoid reading from our stdin, as it could block. */ + freopen ("/dev/null", "rb", stdin); + + /* Test whether posix_spawn_file_actions_addopen with this file name + actually works, but spawning a child that reads from this file. */ + actions_allocated = false; + if ((err = posix_spawn_file_actions_init (&actions)) != 0 + || (actions_allocated = true, + (err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, DATA_FILENAME, O_RDONLY, 0600)) != 0 + || (err = posix_spawn (&child, CHILD_PROGRAM_FILENAME, &actions, NULL, argv, environ)) != 0)) + { + if (actions_allocated) + posix_spawn_file_actions_destroy (&actions); + errno = err; + perror ("subprocess failed"); + return 3; + } + posix_spawn_file_actions_destroy (&actions); + status = 0; + while (waitpid (child, &status, 0) != child) + ; + if (!WIFEXITED (status)) + { + fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); + return 4; + } + exitstatus = WEXITSTATUS (status); + if (exitstatus != 0) + { + fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); + return 5; + } + return 0; +} + +static int +child_main (void) +{ + char buf[1024]; + + /* See if reading from STDIN_FILENO yields the expected contents. */ + if (fread (buf, 1, sizeof (buf), stdin) == 11 + && memcmp (buf, "Halle Potta", 11) == 0) + return 0; + else + return 8; +} + +static void +cleanup_then_die (int sig) +{ + /* Clean up data file. */ + unlink (DATA_FILENAME); + + /* Re-raise the signal and die from it. */ + signal (sig, SIG_DFL); + raise (sig); +} + +int +main (int argc, char *argv[]) +{ + int exitstatus; + + if (!(argc > 1 && strcmp (argv[1], "-child") == 0)) + { + /* This is the parent process. */ + signal (SIGINT, cleanup_then_die); + signal (SIGTERM, cleanup_then_die); + #ifdef SIGHUP + signal (SIGHUP, cleanup_then_die); + #endif + + exitstatus = parent_main (); + } + else + { + /* This is the child process. */ + + exitstatus = child_main (); + } + unlink (DATA_FILENAME); + return exitstatus; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + gl_cv_func_posix_spawn_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + else + case "$host_os" in + aix*) gl_cv_func_posix_spawn_works="guessing no";; + *) gl_cv_func_posix_spawn_works="guessing yes";; + esac + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_posix_spawn_works" >&5 +$as_echo "$gl_cv_func_posix_spawn_works" >&6; } + + case "$gl_cv_func_posix_spawn_works" in + *yes) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_spawnattr_setschedpolicy is supported" >&5 +$as_echo_n "checking whether posix_spawnattr_setschedpolicy is supported... " >&6; } +if ${gl_cv_func_spawnattr_setschedpolicy+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <spawn.h> +#if POSIX_SPAWN_SETSCHEDULER + POSIX scheduling supported +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "POSIX scheduling supported" >/dev/null 2>&1; then : + gl_cv_func_spawnattr_setschedpolicy=yes +else + gl_cv_func_spawnattr_setschedpolicy=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_spawnattr_setschedpolicy" >&5 +$as_echo "$gl_cv_func_spawnattr_setschedpolicy" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_spawnattr_setschedparam is supported" >&5 +$as_echo_n "checking whether posix_spawnattr_setschedparam is supported... " >&6; } +if ${gl_cv_func_spawnattr_setschedparam+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <spawn.h> +#if POSIX_SPAWN_SETSCHEDPARAM + POSIX scheduling supported +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "POSIX scheduling supported" >/dev/null 2>&1; then : + gl_cv_func_spawnattr_setschedparam=yes +else + gl_cv_func_spawnattr_setschedparam=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_spawnattr_setschedparam" >&5 +$as_echo "$gl_cv_func_spawnattr_setschedparam" >&6; } + ;; + *) REPLACE_POSIX_SPAWN=1 ;; + esac + fi + fi + if test $ac_cv_func_posix_spawn != yes || test $REPLACE_POSIX_SPAWN = 1; then + +$as_echo "#define REPLACE_POSIX_SPAWN 1" >>confdefs.h + + fi + + + + + + + + + + + + + + + + + gl_cv_func_vfprintf_posix=no + case "$gl_cv_func_printf_sizes_c99" in + *yes) + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + case "$gl_cv_func_printf_directive_a" in + *yes) + case "$gl_cv_func_printf_directive_f" in + *yes) + case "$gl_cv_func_printf_directive_n" in + *yes) + case "$gl_cv_func_printf_directive_ls" in + *yes) + case "$gl_cv_func_printf_positions" in + *yes) + case "$gl_cv_func_printf_flag_grouping" in + *yes) + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + case "$gl_cv_func_printf_flag_zero" in + *yes) + case "$gl_cv_func_printf_precision" in + *yes) + case "$gl_cv_func_printf_enomem" in + *yes) + # vfprintf exists and is + # already POSIX compliant. + gl_cv_func_vfprintf_posix=yes + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + if test $gl_cv_func_vfprintf_posix = no; then + + + + case "$gl_cv_func_printf_infinite" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + ;; + esac + + + + case "$gl_cv_func_printf_directive_a" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h + + for ac_func in nl_langinfo +do : + ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" +if test "x$ac_cv_func_nl_langinfo" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NL_LANGINFO 1 +_ACEOF + +fi +done + + ;; + esac + + + + case "$gl_cv_func_printf_directive_f" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_directive_ls" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_grouping" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_zero" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_precision" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_enomem" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext" + + if test $ac_cv_func_vasnprintf = yes; then + +$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h + + fi + + + + + + + + + + + + ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" +if test "x$ac_cv_type_ptrdiff_t" = xyes; then : + +else + +$as_echo "#define ptrdiff_t long" >>confdefs.h + + +fi + + + + + + + + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS vfprintf.$ac_objext" + + REPLACE_VFPRINTF=1 + +$as_echo "#define REPLACE_VFPRINTF_POSIX 1" >>confdefs.h + + : + + fi + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _MSC_VER +MicrosoftCompiler +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "MicrosoftCompiler" >/dev/null 2>&1; then : + gl_asmext='asm' + gl_c_asm_opt='-c -Fa' + +else + gl_asmext='s' + gl_c_asm_opt='-S' + +fi +rm -f conftest* + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C symbols are prefixed with underscore at the linker level" >&5 +$as_echo_n "checking whether C symbols are prefixed with underscore at the linker level... " >&6; } +if ${gl_cv_prog_as_underscore+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.c <<EOF +#ifdef __cplusplus +extern "C" int foo (void); +#endif +int foo(void) { return 0; } +EOF + # Look for the assembly language name in the .s file. + { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } >/dev/null 2>&1 + if LC_ALL=C $EGREP '(^|[^a-zA-Z0-9_])_foo([^a-zA-Z0-9_]|$)' conftest.$gl_asmext >/dev/null; then + gl_cv_prog_as_underscore=yes + else + gl_cv_prog_as_underscore=no + fi + rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_prog_as_underscore" >&5 +$as_echo "$gl_cv_prog_as_underscore" >&6; } + if test $gl_cv_prog_as_underscore = yes; then + USER_LABEL_PREFIX=_ + else + USER_LABEL_PREFIX= + fi + +cat >>confdefs.h <<_ACEOF +#define USER_LABEL_PREFIX $USER_LABEL_PREFIX +_ACEOF + + ASM_SYMBOL_PREFIX='"'${USER_LABEL_PREFIX}'"' + + + + GNULIB_PTHREAD_SIGMASK=0; + GNULIB_RAISE=0; + GNULIB_SIGNAL_H_SIGPIPE=0; + GNULIB_SIGPROCMASK=0; + GNULIB_SIGACTION=0; + HAVE_POSIX_SIGNALBLOCKING=1; + HAVE_PTHREAD_SIGMASK=1; + HAVE_RAISE=1; + HAVE_SIGSET_T=1; + HAVE_SIGINFO_T=1; + HAVE_SIGACTION=1; + HAVE_STRUCT_SIGACTION_SA_SIGACTION=1; + + HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1; + + HAVE_SIGHANDLER_T=1; + REPLACE_PTHREAD_SIGMASK=0; + REPLACE_RAISE=0; + + + ac_fn_c_check_type "$LINENO" "sigset_t" "ac_cv_type_sigset_t" " + #include <signal.h> + /* Mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. */ + #include <sys/types.h> + +" +if test "x$ac_cv_type_sigset_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_SIGSET_T 1 +_ACEOF + +gl_cv_type_sigset_t=yes +else + gl_cv_type_sigset_t=no +fi + + if test $gl_cv_type_sigset_t != yes; then + HAVE_SIGSET_T=0 + fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5 +$as_echo_n "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; } +if ${ac_cv_gnu_library_2_1+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <features.h> +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif +#ifdef __UCLIBC__ + Lucky user +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky" >/dev/null 2>&1; then : + ac_cv_gnu_library_2_1=yes +else + ac_cv_gnu_library_2_1=no +fi +rm -f conftest* + + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5 +$as_echo "$ac_cv_gnu_library_2_1" >&6; } + + GLIBC21="$ac_cv_gnu_library_2_1" + + + + + + + + + + + + + + + + + + + + + + + +# Check whether --with-selinux was given. +if test "${with_selinux+set}" = set; then : + withval=$with_selinux; +else + with_selinux=maybe +fi + + + LIB_SELINUX= + if test "$with_selinux" != no; then + gl_save_LIBS=$LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing setfilecon" >&5 +$as_echo_n "checking for library containing setfilecon... " >&6; } +if ${ac_cv_search_setfilecon+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char setfilecon (); +int +main () +{ +return setfilecon (); + ; + return 0; +} +_ACEOF +for ac_lib in '' selinux; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_setfilecon=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_setfilecon+:} false; then : + break +fi +done +if ${ac_cv_search_setfilecon+:} false; then : + +else + ac_cv_search_setfilecon=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_setfilecon" >&5 +$as_echo "$ac_cv_search_setfilecon" >&6; } +ac_res=$ac_cv_search_setfilecon +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + test "$ac_cv_search_setfilecon" = "none required" || + LIB_SELINUX=$ac_cv_search_setfilecon +fi + + LIBS=$gl_save_LIBS + fi + + + # Warn if SELinux is found but libselinux is absent; + if test "$ac_cv_search_setfilecon" = no; then + if test "$host" = "$build" && test -d /selinux; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: This system supports SELinux but libselinux is missing." >&5 +$as_echo "$as_me: WARNING: This system supports SELinux but libselinux is missing." >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: GNU recutils will be compiled without SELinux support." >&5 +$as_echo "$as_me: WARNING: GNU recutils will be compiled without SELinux support." >&2;} + fi + with_selinux=no + fi + + + +ac_fn_c_check_decl "$LINENO" "setenv" "ac_cv_have_decl_setenv" "$ac_includes_default" +if test "x$ac_cv_have_decl_setenv" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SETENV $ac_have_decl +_ACEOF + + + + + + + if test $ac_cv_have_decl_setenv = no; then + HAVE_DECL_SETENV=0 + fi + + + + + + for ac_header in search.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "search.h" "ac_cv_header_search_h" "$ac_includes_default" +if test "x$ac_cv_header_search_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SEARCH_H 1 +_ACEOF + +fi + +done + + for ac_func in tsearch +do : + ac_fn_c_check_func "$LINENO" "tsearch" "ac_cv_func_tsearch" +if test "x$ac_cv_func_tsearch" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_TSEARCH 1 +_ACEOF + +fi +done + + + + + + + + + + + + + GNULIB_FFS=0; + HAVE_FFS=1; + HAVE_STRCASECMP=1; + HAVE_DECL_STRNCASECMP=1; + + + + + + + + for ac_func in strcasestr +do : + ac_fn_c_check_func "$LINENO" "strcasestr" "ac_cv_func_strcasestr" +if test "x$ac_cv_func_strcasestr" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRCASESTR 1 +_ACEOF + +fi +done + + if test $ac_cv_func_strcasestr = no; then + HAVE_STRCASESTR=0 + else + if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then + REPLACE_STRCASESTR=1 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strcasestr works" >&5 +$as_echo_n "checking whether strcasestr works... " >&6; } +if ${gl_cv_func_strcasestr_works_always+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __GNU_LIBRARY__ + #include <features.h> + #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \ + || defined __UCLIBC__ + Lucky user + #endif +#elif defined __CYGWIN__ + #include <cygwin/version.h> + #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) + Lucky user + #endif +#else + Lucky user +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky user" >/dev/null 2>&1; then : + gl_cv_func_strcasestr_works_always="guessing yes" +else + gl_cv_func_strcasestr_works_always="guessing no" +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <string.h> /* for strcasestr */ +#ifdef __GNU_LIBRARY__ + #include <features.h> + #if __GLIBC__ == 2 && __GLIBC_MINOR__ == 28 + Unlucky user + #endif +#endif +#define P "_EF_BF_BD" +#define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P +#define NEEDLE P P P P P + +int +main () +{ +return !!strcasestr (HAYSTACK, NEEDLE); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_strcasestr_works_always=yes +else + gl_cv_func_strcasestr_works_always=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strcasestr_works_always" >&5 +$as_echo "$gl_cv_func_strcasestr_works_always" >&6; } + case "$gl_cv_func_strcasestr_works_always" in + *yes) ;; + *) + REPLACE_STRCASESTR=1 + ;; + esac + fi + fi + + + +ac_fn_c_check_decl "$LINENO" "strdup" "ac_cv_have_decl_strdup" "$ac_includes_default" +if test "x$ac_cv_have_decl_strdup" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRDUP $ac_have_decl +_ACEOF + + + REPLACE_STRERROR_0=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror(0) succeeds" >&5 +$as_echo_n "checking whether strerror(0) succeeds... " >&6; } +if ${gl_cv_func_strerror_0_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_strerror_0_works="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_strerror_0_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + #include <errno.h> + +int +main () +{ +int result = 0; + char *str; + errno = 0; + str = strerror (0); + if (!*str) result |= 1; + if (errno) result |= 2; + if (strstr (str, "nknown") || strstr (str, "ndefined")) + result |= 4; + return result; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_strerror_0_works=yes +else + gl_cv_func_strerror_0_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_0_works" >&5 +$as_echo "$gl_cv_func_strerror_0_works" >&6; } + case "$gl_cv_func_strerror_0_works" in + *yes) ;; + *) + REPLACE_STRERROR_0=1 + +$as_echo "#define REPLACE_STRERROR_0 1" >>confdefs.h + + ;; + esac + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_string_h='<'string.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <string.h>" >&5 +$as_echo_n "checking absolute name of <string.h>... " >&6; } +if ${gl_cv_next_string_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'string.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_string_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_string_h + gl_cv_next_string_h='"'$gl_header'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5 +$as_echo "$gl_cv_next_string_h" >&6; } + fi + NEXT_STRING_H=$gl_cv_next_string_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'string.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_string_h + fi + NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive + + + + + + + + + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_strings_h='<'strings.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <strings.h>" >&5 +$as_echo_n "checking absolute name of <strings.h>... " >&6; } +if ${gl_cv_next_strings_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_strings_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <strings.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'strings.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_strings_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_strings_h + gl_cv_next_strings_h='"'$gl_header'"' + else + gl_cv_next_strings_h='<'strings.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_strings_h" >&5 +$as_echo "$gl_cv_next_strings_h" >&6; } + fi + NEXT_STRINGS_H=$gl_cv_next_strings_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'strings.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_strings_h + fi + NEXT_AS_FIRST_DIRECTIVE_STRINGS_H=$gl_next_as_first_directive + + + + + if test $ac_cv_header_strings_h = yes; then + HAVE_STRINGS_H=1 + else + HAVE_STRINGS_H=0 + fi + + + + + + + + + + GNULIB_WAITPID=0; + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <time.h>" >&5 +$as_echo_n "checking for struct timespec in <time.h>... " >&6; } +if ${gl_cv_sys_struct_timespec_in_time_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <time.h> + +int +main () +{ +static struct timespec x; x.tv_sec = x.tv_nsec; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_sys_struct_timespec_in_time_h=yes +else + gl_cv_sys_struct_timespec_in_time_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_time_h" >&5 +$as_echo "$gl_cv_sys_struct_timespec_in_time_h" >&6; } + + TIME_H_DEFINES_STRUCT_TIMESPEC=0 + SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 + PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 + UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 + if test $gl_cv_sys_struct_timespec_in_time_h = yes; then + TIME_H_DEFINES_STRUCT_TIMESPEC=1 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <sys/time.h>" >&5 +$as_echo_n "checking for struct timespec in <sys/time.h>... " >&6; } +if ${gl_cv_sys_struct_timespec_in_sys_time_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/time.h> + +int +main () +{ +static struct timespec x; x.tv_sec = x.tv_nsec; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_sys_struct_timespec_in_sys_time_h=yes +else + gl_cv_sys_struct_timespec_in_sys_time_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_sys_time_h" >&5 +$as_echo "$gl_cv_sys_struct_timespec_in_sys_time_h" >&6; } + if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then + SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <pthread.h>" >&5 +$as_echo_n "checking for struct timespec in <pthread.h>... " >&6; } +if ${gl_cv_sys_struct_timespec_in_pthread_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <pthread.h> + +int +main () +{ +static struct timespec x; x.tv_sec = x.tv_nsec; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_sys_struct_timespec_in_pthread_h=yes +else + gl_cv_sys_struct_timespec_in_pthread_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_pthread_h" >&5 +$as_echo "$gl_cv_sys_struct_timespec_in_pthread_h" >&6; } + if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then + PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <unistd.h>" >&5 +$as_echo_n "checking for struct timespec in <unistd.h>... " >&6; } +if ${gl_cv_sys_struct_timespec_in_unistd_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <unistd.h> + +int +main () +{ +static struct timespec x; x.tv_sec = x.tv_nsec; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_sys_struct_timespec_in_unistd_h=yes +else + gl_cv_sys_struct_timespec_in_unistd_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_unistd_h" >&5 +$as_echo "$gl_cv_sys_struct_timespec_in_unistd_h" >&6; } + if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then + UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 + fi + fi + fi + fi + + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_time_h='<'time.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <time.h>" >&5 +$as_echo_n "checking absolute name of <time.h>... " >&6; } +if ${gl_cv_next_time_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <time.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'time.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_time_h + gl_cv_next_time_h='"'$gl_header'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_time_h" >&5 +$as_echo "$gl_cv_next_time_h" >&6; } + fi + NEXT_TIME_H=$gl_cv_next_time_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'time.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_time_h + fi + NEXT_AS_FIRST_DIRECTIVE_TIME_H=$gl_next_as_first_directive + + + + + + + + + + +ac_fn_c_check_decl "$LINENO" "clearerr_unlocked" "ac_cv_have_decl_clearerr_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_clearerr_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_CLEARERR_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "feof_unlocked" "ac_cv_have_decl_feof_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_feof_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FEOF_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "ferror_unlocked" "ac_cv_have_decl_ferror_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_ferror_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FERROR_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fgets_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FGETS_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fputc_unlocked" "ac_cv_have_decl_fputc_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fputc_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FPUTC_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fread_unlocked" "ac_cv_have_decl_fread_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fread_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FREAD_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fwrite_unlocked" "ac_cv_have_decl_fwrite_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fwrite_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FWRITE_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "getchar_unlocked" "ac_cv_have_decl_getchar_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_getchar_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETCHAR_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "putchar_unlocked" "ac_cv_have_decl_putchar_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_putchar_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PUTCHAR_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "unsetenv" "ac_cv_have_decl_unsetenv" "$ac_includes_default" +if test "x$ac_cv_have_decl_unsetenv" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_UNSETENV $ac_have_decl +_ACEOF + + + + + + if test $ac_cv_header_crtdefs_h = yes; then + HAVE_CRTDEFS_H=1 + else + HAVE_CRTDEFS_H=0 + fi + + + + + + + + GNULIB_ISWBLANK=0; + GNULIB_WCTYPE=0; + GNULIB_ISWCTYPE=0; + GNULIB_WCTRANS=0; + GNULIB_TOWCTRANS=0; + HAVE_ISWBLANK=1; + HAVE_WCTYPE_T=1; + HAVE_WCTRANS_T=1; + REPLACE_ISWBLANK=0; + + + + + + + if true; then + GL_COND_LIBTOOL_TRUE= + GL_COND_LIBTOOL_FALSE='#' +else + GL_COND_LIBTOOL_TRUE='#' + GL_COND_LIBTOOL_FALSE= +fi + + gl_cond_libtool=true + gl_m4_base='m4' + + + + + + + + + + gl_source_base='lib' + + + + LIB_ACL= + use_acl=0 + if test "$enable_acl" != no; then + for ac_header in sys/acl.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/acl.h" "ac_cv_header_sys_acl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_acl_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_ACL_H 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_sys_acl_h = yes; then + ac_save_LIBS=$LIBS + + if test $use_acl = 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing acl_get_file" >&5 +$as_echo_n "checking for library containing acl_get_file... " >&6; } +if ${ac_cv_search_acl_get_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char acl_get_file (); +int +main () +{ +return acl_get_file (); + ; + return 0; +} +_ACEOF +for ac_lib in '' acl pacl; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_acl_get_file=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_acl_get_file+:} false; then : + break +fi +done +if ${ac_cv_search_acl_get_file+:} false; then : + +else + ac_cv_search_acl_get_file=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_acl_get_file" >&5 +$as_echo "$ac_cv_search_acl_get_file" >&6; } +ac_res=$ac_cv_search_acl_get_file +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + if test "$ac_cv_search_acl_get_file" != "none required"; then + LIB_ACL=$ac_cv_search_acl_get_file + fi + for ac_func in acl_get_file acl_get_fd acl_set_file acl_set_fd \ + acl_free acl_from_mode acl_from_text \ + acl_delete_def_file acl_extended_file \ + acl_delete_fd_np acl_delete_file_np \ + acl_copy_ext_native acl_create_entry_np \ + acl_to_short_text acl_free_text +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + # If the acl_get_file bug is detected, don't enable the ACL support. + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working acl_get_file" >&5 +$as_echo_n "checking for working acl_get_file... " >&6; } +if ${gl_cv_func_working_acl_get_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_cv_func_working_acl_get_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/acl.h> + #include <errno.h> + +int +main () +{ +acl_t acl = acl_get_file (".", ACL_TYPE_ACCESS); + return acl ? acl_free (acl) != 0 : errno == ENOENT; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if test $cross_compiling = yes; then + gl_cv_func_working_acl_get_file="guessing yes" + elif ./conftest$ac_exeext; then + gl_cv_func_working_acl_get_file=yes + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_acl_get_file" >&5 +$as_echo "$gl_cv_func_working_acl_get_file" >&6; } + if test "$gl_cv_func_working_acl_get_file" != no; then : + use_acl=1 +fi + + if test $use_acl = 1; then + for ac_header in acl/libacl.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "acl/libacl.h" "ac_cv_header_acl_libacl_h" "$ac_includes_default" +if test "x$ac_cv_header_acl_libacl_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ACL_LIBACL_H 1 +_ACEOF + +fi + +done + + + + + + + + + + for ac_func in acl_entries +do : + ac_fn_c_check_func "$LINENO" "acl_entries" "ac_cv_func_acl_entries" +if test "x$ac_cv_func_acl_entries" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ACL_ENTRIES 1 +_ACEOF + +else + + gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext" + +fi +done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ACL_FIRST_ENTRY" >&5 +$as_echo_n "checking for ACL_FIRST_ENTRY... " >&6; } +if ${gl_cv_acl_ACL_FIRST_ENTRY+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <sys/acl.h> +int type = ACL_FIRST_ENTRY; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_acl_ACL_FIRST_ENTRY=yes +else + gl_cv_acl_ACL_FIRST_ENTRY=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_acl_ACL_FIRST_ENTRY" >&5 +$as_echo "$gl_cv_acl_ACL_FIRST_ENTRY" >&6; } + if test $gl_cv_acl_ACL_FIRST_ENTRY = yes; then + +$as_echo "#define HAVE_ACL_FIRST_ENTRY 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ACL_TYPE_EXTENDED" >&5 +$as_echo_n "checking for ACL_TYPE_EXTENDED... " >&6; } +if ${gl_cv_acl_ACL_TYPE_EXTENDED+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <sys/acl.h> +int type = ACL_TYPE_EXTENDED; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_acl_ACL_TYPE_EXTENDED=yes +else + gl_cv_acl_ACL_TYPE_EXTENDED=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_acl_ACL_TYPE_EXTENDED" >&5 +$as_echo "$gl_cv_acl_ACL_TYPE_EXTENDED" >&6; } + if test $gl_cv_acl_ACL_TYPE_EXTENDED = yes; then + +$as_echo "#define HAVE_ACL_TYPE_EXTENDED 1" >>confdefs.h + + fi + else + LIB_ACL= + fi + +fi + + fi + + if test $use_acl = 0; then + for ac_func in facl +do : + ac_fn_c_check_func "$LINENO" "facl" "ac_cv_func_facl" +if test "x$ac_cv_func_facl" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_FACL 1 +_ACEOF + +fi +done + + if test $ac_cv_func_facl = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing acl_trivial" >&5 +$as_echo_n "checking for library containing acl_trivial... " >&6; } +if ${ac_cv_search_acl_trivial+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char acl_trivial (); +int +main () +{ +return acl_trivial (); + ; + return 0; +} +_ACEOF +for ac_lib in '' sec; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_acl_trivial=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_acl_trivial+:} false; then : + break +fi +done +if ${ac_cv_search_acl_trivial+:} false; then : + +else + ac_cv_search_acl_trivial=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_acl_trivial" >&5 +$as_echo "$ac_cv_search_acl_trivial" >&6; } +ac_res=$ac_cv_search_acl_trivial +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + if test "$ac_cv_search_acl_trivial" != "none required"; then + LIB_ACL=$ac_cv_search_acl_trivial + fi + +fi + + for ac_func in acl_trivial +do : + ac_fn_c_check_func "$LINENO" "acl_trivial" "ac_cv_func_acl_trivial" +if test "x$ac_cv_func_acl_trivial" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ACL_TRIVIAL 1 +_ACEOF + +fi +done + + use_acl=1 + fi + fi + + if test $use_acl = 0; then + for ac_func in getacl +do : + ac_fn_c_check_func "$LINENO" "getacl" "ac_cv_func_getacl" +if test "x$ac_cv_func_getacl" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETACL 1 +_ACEOF + +fi +done + + if test $ac_cv_func_getacl = yes; then + use_acl=1 + fi + for ac_header in aclv.h +do : + ac_fn_c_check_header_compile "$LINENO" "aclv.h" "ac_cv_header_aclv_h" "#include <sys/types.h> +" +if test "x$ac_cv_header_aclv_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ACLV_H 1 +_ACEOF + +fi + +done + + fi + + if test $use_acl = 0; then + for ac_func in aclx_get +do : + ac_fn_c_check_func "$LINENO" "aclx_get" "ac_cv_func_aclx_get" +if test "x$ac_cv_func_aclx_get" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ACLX_GET 1 +_ACEOF + +fi +done + + if test $ac_cv_func_aclx_get = yes; then + use_acl=1 + fi + fi + + if test $use_acl = 0 || test "$ac_cv_func_aclx_get" = yes; then + for ac_func in statacl +do : + ac_fn_c_check_func "$LINENO" "statacl" "ac_cv_func_statacl" +if test "x$ac_cv_func_statacl" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STATACL 1 +_ACEOF + +fi +done + + if test $ac_cv_func_statacl = yes; then + use_acl=1 + fi + fi + + if test $use_acl = 0; then + for ac_func in aclsort +do : + ac_fn_c_check_func "$LINENO" "aclsort" "ac_cv_func_aclsort" +if test "x$ac_cv_func_aclsort" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ACLSORT 1 +_ACEOF + +fi +done + + if test $ac_cv_func_aclsort = yes; then + use_acl=1 + fi + fi + + LIBS=$ac_save_LIBS + fi + + if test "$enable_acl$use_acl" = yes0; then + as_fn_error $? "ACLs enabled but support not detected" "$LINENO" 5 + elif test "$enable_acl$use_acl" = auto0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libacl development library was not found or not usable." >&5 +$as_echo "$as_me: WARNING: libacl development library was not found or not usable." >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: GNU recutils will be built without ACL support." >&5 +$as_echo "$as_me: WARNING: GNU recutils will be built without ACL support." >&2;} + fi + fi + test $gl_need_lib_has_acl && LIB_HAS_ACL=$LIB_ACL + + +cat >>confdefs.h <<_ACEOF +#define USE_ACL $use_acl +_ACEOF + + USE_ACL=$use_acl + + +LTALLOCA=`echo "$ALLOCA" | sed -e 's/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'` + + + + if test $ac_cv_func_alloca_works = no; then + : + fi + + # Define an additional variable used in the Makefile substitution. + if test $ac_cv_working_alloca_h = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca as a compiler built-in" >&5 +$as_echo_n "checking for alloca as a compiler built-in... " >&6; } +if ${gl_cv_rpl_alloca+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if defined __GNUC__ || defined _AIX || defined _MSC_VER + Need own alloca +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Need own alloca" >/dev/null 2>&1; then : + gl_cv_rpl_alloca=yes +else + gl_cv_rpl_alloca=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_rpl_alloca" >&5 +$as_echo "$gl_cv_rpl_alloca" >&6; } + if test $gl_cv_rpl_alloca = yes; then + +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h + + ALLOCA_H=alloca.h + else + ALLOCA_H= + fi + else + ALLOCA_H=alloca.h + fi + + if test -n "$ALLOCA_H"; then + GL_GENERATE_ALLOCA_H_TRUE= + GL_GENERATE_ALLOCA_H_FALSE='#' +else + GL_GENERATE_ALLOCA_H_TRUE='#' + GL_GENERATE_ALLOCA_H_FALSE= +fi + + + + + + + + + + + + + + if test $ac_cv_func_btowc = no; then + HAVE_BTOWC=0 + else + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether btowc(0) is correct" >&5 +$as_echo_n "checking whether btowc(0) is correct... " >&6; } +if ${gl_cv_func_btowc_nul+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + # Guess no on Cygwin. + cygwin*) gl_cv_func_btowc_nul="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_btowc_nul="guessing yes" ;; + # Guess yes otherwise. + *) gl_cv_func_btowc_nul="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (btowc ('\0') != 0) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_btowc_nul=yes +else + gl_cv_func_btowc_nul=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_nul" >&5 +$as_echo "$gl_cv_func_btowc_nul" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether btowc(EOF) is correct" >&5 +$as_echo_n "checking whether btowc(EOF) is correct... " >&6; } +if ${gl_cv_func_btowc_eof+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on IRIX. + irix*) gl_cv_func_btowc_eof="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_btowc_eof="guessing yes" ;; + # Guess yes otherwise. + *) gl_cv_func_btowc_eof="guessing yes" ;; + esac + if test $LOCALE_FR != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + if (btowc (EOF) != WEOF) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_btowc_eof=yes +else + gl_cv_func_btowc_eof=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_eof" >&5 +$as_echo "$gl_cv_func_btowc_eof" >&6; } + + case "$gl_cv_func_btowc_nul" in + *yes) ;; + *) REPLACE_BTOWC=1 ;; + esac + case "$gl_cv_func_btowc_eof" in + *yes) ;; + *) REPLACE_BTOWC=1 ;; + esac + fi + + if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS btowc.$ac_objext" + + + : + + fi + + + + + + GNULIB_BTOWC=1 + + + + + +$as_echo "#define GNULIB_TEST_BTOWC 1" >>confdefs.h + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_expect" >&5 +$as_echo_n "checking for __builtin_expect... " >&6; } +if ${gl_cv___builtin_expect+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + int + main (int argc, char **argv) + { + argc = __builtin_expect (argc, 100); + return argv[argc != 100][0]; + } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv___builtin_expect=yes +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <builtins.h> + int + main (int argc, char **argv) + { + argc = __builtin_expect (argc, 100); + return argv[argc != 100][0]; + } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv___builtin_expect="in <builtins.h>" +else + gl_cv___builtin_expect=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv___builtin_expect" >&5 +$as_echo "$gl_cv___builtin_expect" >&6; } + if test "$gl_cv___builtin_expect" = yes; then + $as_echo "#define HAVE___BUILTIN_EXPECT 1" >>confdefs.h + + elif test "$gl_cv___builtin_expect" = "in <builtins.h>"; then + $as_echo "#define HAVE___BUILTIN_EXPECT 2" >>confdefs.h + + fi + + + + + + if test $ac_cv_func_canonicalize_file_name = no; then + HAVE_CANONICALIZE_FILE_NAME=0 + if test $ac_cv_func_realpath = no; then + HAVE_REALPATH=0 + else + case "$gl_cv_func_realpath_works" in + *yes) ;; + *) REPLACE_REALPATH=1 ;; + esac + fi + else + case "$gl_cv_func_realpath_works" in + *yes) + ;; + *) + REPLACE_CANONICALIZE_FILE_NAME=1 + REPLACE_REALPATH=1 + ;; + esac + fi + + if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS canonicalize-lgpl.$ac_objext" + + fi + + +cat >>confdefs.h <<_ACEOF +#define GNULIB_CANONICALIZE_LGPL 1 +_ACEOF + + + + + + + + GNULIB_CANONICALIZE_FILE_NAME=1 + + + + + +$as_echo "#define GNULIB_TEST_CANONICALIZE_FILE_NAME 1" >>confdefs.h + + + + + + + + + GNULIB_REALPATH=1 + + + + + +$as_echo "#define GNULIB_TEST_REALPATH 1" >>confdefs.h + + + + + + + + + GNULIB_CHDIR=1 + + + + + +$as_echo "#define GNULIB_TEST_CHDIR 1" >>confdefs.h + + + + + + + # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function. + # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4. + + # Save and restore LIBS so e.g., -lrt, isn't added to it. Otherwise, *all* + # programs in the package would end up linked with that potentially-shared + # library, inducing unnecessary run-time overhead. + LIB_CLOCK_GETTIME= + + gl_saved_libs=$LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 +$as_echo_n "checking for library containing clock_gettime... " >&6; } +if ${ac_cv_search_clock_gettime+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char clock_gettime (); +int +main () +{ +return clock_gettime (); + ; + return 0; +} +_ACEOF +for ac_lib in '' rt posix4; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_clock_gettime=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_clock_gettime+:} false; then : + break +fi +done +if ${ac_cv_search_clock_gettime+:} false; then : + +else + ac_cv_search_clock_gettime=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 +$as_echo "$ac_cv_search_clock_gettime" >&6; } +ac_res=$ac_cv_search_clock_gettime +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + test "$ac_cv_search_clock_gettime" = "none required" || + LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime +fi + + for ac_func in clock_gettime clock_settime +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + LIBS=$gl_saved_libs + + + +$as_echo "#define GNULIB_TEST_CLOEXEC 1" >>confdefs.h + + + + + + + if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then + REPLACE_CLOSE=1 + fi + + + + + + + if test $ac_cv_header_sys_socket_h != yes; then + for ac_header in winsock2.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" +if test "x$ac_cv_header_winsock2_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_WINSOCK2_H 1 +_ACEOF + +fi + +done + + fi + if test "$ac_cv_header_winsock2_h" = yes; then + HAVE_WINSOCK2_H=1 + UNISTD_H_HAVE_WINSOCK2_H=1 + SYS_IOCTL_H_HAVE_WINSOCK2_H=1 + else + HAVE_WINSOCK2_H=0 + fi + + + if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then + REPLACE_CLOSE=1 + fi + + + + if test $REPLACE_CLOSE = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS close.$ac_objext" + + fi + + + + + + GNULIB_CLOSE=1 + + + + + +$as_echo "#define GNULIB_TEST_CLOSE 1" >>confdefs.h + + + + + : + + + +cat >>confdefs.h <<_ACEOF +#define GNULIB_CLOSE_STREAM 1 +_ACEOF + + + + : + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 +$as_echo_n "checking whether // is distinct from /... " >&6; } +if ${gl_cv_double_slash_root+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test x"$cross_compiling" = xyes ; then + # When cross-compiling, there is no way to tell whether // is special + # short of a list of hosts. However, the only known hosts to date + # that have a distinct // are Apollo DomainOS (too old to port to), + # Cygwin, and z/OS. If anyone knows of another system for which // has + # special semantics and is distinct from /, please report it to + # <bug-gnulib@gnu.org>. + case $host in + *-cygwin | i370-ibm-openedition) + gl_cv_double_slash_root=yes ;; + *) + # Be optimistic and assume that / and // are the same when we + # don't know. + gl_cv_double_slash_root='unknown, assuming no' ;; + esac + else + set x `ls -di / // 2>/dev/null` + if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then + gl_cv_double_slash_root=no + else + gl_cv_double_slash_root=yes + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 +$as_echo "$gl_cv_double_slash_root" >&6; } + if test "$gl_cv_double_slash_root" = yes; then + +$as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h + + fi + + + + + + +$as_echo "#define HAVE_DUP2 1" >>confdefs.h + + + if test $HAVE_DUP2 = 1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dup2 works" >&5 +$as_echo_n "checking whether dup2 works... " >&6; } +if ${gl_cv_func_dup2_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + mingw*) # on this platform, dup2 always returns 0 for success + gl_cv_func_dup2_works="guessing no" ;; + cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 + gl_cv_func_dup2_works="guessing no" ;; + aix* | freebsd*) + # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE, + # not EBADF. + gl_cv_func_dup2_works="guessing no" ;; + haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC. + gl_cv_func_dup2_works="guessing no" ;; + *-android*) # implemented using dup3(), which fails if oldfd == newfd + gl_cv_func_dup2_works="guessing no" ;; + os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd. + gl_cv_func_dup2_works="guessing no" ;; + *) gl_cv_func_dup2_works="guessing yes" ;; + esac +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <errno.h> + #include <fcntl.h> + #include <limits.h> + #include <sys/resource.h> + #include <unistd.h> + #ifndef RLIM_SAVED_CUR + # define RLIM_SAVED_CUR RLIM_INFINITY + #endif + #ifndef RLIM_SAVED_MAX + # define RLIM_SAVED_MAX RLIM_INFINITY + #endif + +int +main () +{ +int result = 0; + int bad_fd = INT_MAX; + struct rlimit rlim; + if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 + && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX + && rlim.rlim_cur != RLIM_INFINITY + && rlim.rlim_cur != RLIM_SAVED_MAX + && rlim.rlim_cur != RLIM_SAVED_CUR) + bad_fd = rlim.rlim_cur; + #ifdef FD_CLOEXEC + if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1) + result |= 1; + #endif + if (dup2 (1, 1) != 1) + result |= 2; + #ifdef FD_CLOEXEC + if (fcntl (1, F_GETFD) != FD_CLOEXEC) + result |= 4; + #endif + close (0); + if (dup2 (0, 0) != -1) + result |= 8; + /* Many gnulib modules require POSIX conformance of EBADF. */ + if (dup2 (2, bad_fd) == -1 && errno != EBADF) + result |= 16; + /* Flush out some cygwin core dumps. */ + if (dup2 (2, -1) != -1 || errno != EBADF) + result |= 32; + dup2 (2, 255); + dup2 (2, 256); + /* On OS/2 kLIBC, dup2() does not work on a directory fd. */ + { + int fd = open (".", O_RDONLY); + if (fd == -1) + result |= 64; + else if (dup2 (fd, fd + 1) == -1) + result |= 128; + + close (fd); + } + return result; + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_dup2_works=yes +else + gl_cv_func_dup2_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_dup2_works" >&5 +$as_echo "$gl_cv_func_dup2_works" >&6; } + case "$gl_cv_func_dup2_works" in + *yes) ;; + *) + REPLACE_DUP2=1 + for ac_func in setdtablesize +do : + ac_fn_c_check_func "$LINENO" "setdtablesize" "ac_cv_func_setdtablesize" +if test "x$ac_cv_func_setdtablesize" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SETDTABLESIZE 1 +_ACEOF + +fi +done + + ;; + esac + fi + + + if test $HAVE_DUP2 = 0 || test $REPLACE_DUP2 = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS dup2.$ac_objext" + + + fi + + + + + + GNULIB_DUP2=1 + + + + + +$as_echo "#define GNULIB_TEST_DUP2 1" >>confdefs.h + + + + + + + + + + GNULIB_ENVIRON=1 + + + + + +$as_echo "#define GNULIB_TEST_ENVIRON 1" >>confdefs.h + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 +$as_echo_n "checking for error_at_line... " >&6; } +if ${ac_cv_lib_error_at_line+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <error.h> +int +main () +{ +error_at_line (0, 0, "", 0, "an error occurred"); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_error_at_line=yes +else + ac_cv_lib_error_at_line=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5 +$as_echo "$ac_cv_lib_error_at_line" >&6; } + + if test $ac_cv_lib_error_at_line = no; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS error.$ac_objext" + + + + : + + fi + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error:3:c-format" + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error_at_line:5:c-format" + + + + + + + for ac_func in euidaccess +do : + ac_fn_c_check_func "$LINENO" "euidaccess" "ac_cv_func_euidaccess" +if test "x$ac_cv_func_euidaccess" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_EUIDACCESS 1 +_ACEOF + +fi +done + + if test $ac_cv_func_euidaccess = no; then + HAVE_EUIDACCESS=0 + fi + + if test $HAVE_EUIDACCESS = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS euidaccess.$ac_objext" + + + + for ac_header in libgen.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "libgen.h" "ac_cv_header_libgen_h" "$ac_includes_default" +if test "x$ac_cv_header_libgen_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBGEN_H 1 +_ACEOF + +fi + +done + + + ac_fn_c_check_func "$LINENO" "getgroups" "ac_cv_func_getgroups" +if test "x$ac_cv_func_getgroups" = xyes; then : + +fi + + + # If we don't yet have getgroups, see if it's in -lbsd. + # This is reported to be necessary on an ITOS 3000WS running SEIUX 3.1. + ac_save_LIBS=$LIBS + if test $ac_cv_func_getgroups = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getgroups in -lbsd" >&5 +$as_echo_n "checking for getgroups in -lbsd... " >&6; } +if ${ac_cv_lib_bsd_getgroups+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbsd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char getgroups (); +int +main () +{ +return getgroups (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_bsd_getgroups=yes +else + ac_cv_lib_bsd_getgroups=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_getgroups" >&5 +$as_echo "$ac_cv_lib_bsd_getgroups" >&6; } +if test "x$ac_cv_lib_bsd_getgroups" = xyes; then : + GETGROUPS_LIB=-lbsd +fi + + fi + + # Run the program to test the functionality of the system-supplied + # getgroups function only if there is such a function. + if test $ac_cv_func_getgroups = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working getgroups" >&5 +$as_echo_n "checking for working getgroups... " >&6; } +if ${ac_cv_func_getgroups_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in # (( + # Guess yes on glibc systems. + *-gnu* | gnu*) ac_cv_func_getgroups_works="guessing yes" ;; + # If we don't know, assume the worst. + *) ac_cv_func_getgroups_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +/* On NeXTstep 3.2, getgroups (0, 0) always fails. */ + return getgroups (0, 0) == -1; + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_getgroups_works=yes +else + ac_cv_func_getgroups_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getgroups_works" >&5 +$as_echo "$ac_cv_func_getgroups_works" >&6; } + else + ac_cv_func_getgroups_works=no + fi + case "$ac_cv_func_getgroups_works" in + *yes) + +$as_echo "#define HAVE_GETGROUPS 1" >>confdefs.h + + ;; + esac + LIBS=$ac_save_LIBS + + + # Solaris 9 and 10 need -lgen to get the eaccess function. + # Save and restore LIBS so -lgen isn't added to it. Otherwise, *all* + # programs in the package would end up linked with that potentially-shared + # library, inducing unnecessary run-time overhead. + LIB_EACCESS= + + gl_saved_libs=$LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing eaccess" >&5 +$as_echo_n "checking for library containing eaccess... " >&6; } +if ${ac_cv_search_eaccess+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char eaccess (); +int +main () +{ +return eaccess (); + ; + return 0; +} +_ACEOF +for ac_lib in '' gen; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_eaccess=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_eaccess+:} false; then : + break +fi +done +if ${ac_cv_search_eaccess+:} false; then : + +else + ac_cv_search_eaccess=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_eaccess" >&5 +$as_echo "$ac_cv_search_eaccess" >&6; } +ac_res=$ac_cv_search_eaccess +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + test "$ac_cv_search_eaccess" = "none required" || + LIB_EACCESS=$ac_cv_search_eaccess +fi + + for ac_func in eaccess +do : + ac_fn_c_check_func "$LINENO" "eaccess" "ac_cv_func_eaccess" +if test "x$ac_cv_func_eaccess" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_EACCESS 1 +_ACEOF + +fi +done + + LIBS=$gl_saved_libs + + fi + + + + + + GNULIB_EUIDACCESS=1 + + + + + +$as_echo "#define GNULIB_TEST_EUIDACCESS 1" >>confdefs.h + + + + + + + + + + + : + + + + + + + if test $ac_cv_func_fcntl = no; then + + + + if test $ac_cv_func_fcntl = no; then + HAVE_FCNTL=0 + else + REPLACE_FCNTL=1 + fi + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fcntl handles F_DUPFD correctly" >&5 +$as_echo_n "checking whether fcntl handles F_DUPFD correctly... " >&6; } +if ${gl_cv_func_fcntl_f_dupfd_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case $host_os in + aix* | cygwin* | haiku*) + gl_cv_func_fcntl_f_dupfd_works="guessing no" ;; + *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;; + esac +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <errno.h> + #include <fcntl.h> + #include <limits.h> + #include <sys/resource.h> + #include <unistd.h> + #ifndef RLIM_SAVED_CUR + # define RLIM_SAVED_CUR RLIM_INFINITY + #endif + #ifndef RLIM_SAVED_MAX + # define RLIM_SAVED_MAX RLIM_INFINITY + #endif + +int +main () +{ +int result = 0; + int bad_fd = INT_MAX; + struct rlimit rlim; + if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 + && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX + && rlim.rlim_cur != RLIM_INFINITY + && rlim.rlim_cur != RLIM_SAVED_MAX + && rlim.rlim_cur != RLIM_SAVED_CUR) + bad_fd = rlim.rlim_cur; + if (fcntl (0, F_DUPFD, -1) != -1) result |= 1; + if (errno != EINVAL) result |= 2; + if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4; + if (errno != EINVAL) result |= 8; + /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */ + { + int fd; + fd = open (".", O_RDONLY); + if (fd == -1) + result |= 16; + else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1) + result |= 32; + + close (fd); + } + return result; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_fcntl_f_dupfd_works=yes +else + gl_cv_func_fcntl_f_dupfd_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fcntl_f_dupfd_works" >&5 +$as_echo "$gl_cv_func_fcntl_f_dupfd_works" >&6; } + case $gl_cv_func_fcntl_f_dupfd_works in + *yes) ;; + *) + + + if test $ac_cv_func_fcntl = no; then + HAVE_FCNTL=0 + else + REPLACE_FCNTL=1 + fi + + +$as_echo "#define FCNTL_DUPFD_BUGGY 1" >>confdefs.h + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fcntl understands F_DUPFD_CLOEXEC" >&5 +$as_echo_n "checking whether fcntl understands F_DUPFD_CLOEXEC... " >&6; } +if ${gl_cv_func_fcntl_f_dupfd_cloexec+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <fcntl.h> +#ifndef F_DUPFD_CLOEXEC +choke me +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __linux__ +/* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace + it to support the semantics on older kernels that failed with EINVAL. */ +choke me +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_func_fcntl_f_dupfd_cloexec=yes +else + gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + gl_cv_func_fcntl_f_dupfd_cloexec=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fcntl_f_dupfd_cloexec" >&5 +$as_echo "$gl_cv_func_fcntl_f_dupfd_cloexec" >&6; } + if test "$gl_cv_func_fcntl_f_dupfd_cloexec" != yes; then + + + + if test $ac_cv_func_fcntl = no; then + HAVE_FCNTL=0 + else + REPLACE_FCNTL=1 + fi + + fi + fi + + + if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS fcntl.$ac_objext" + + fi + + + + + + GNULIB_FCNTL=1 + + + + + +$as_echo "#define GNULIB_TEST_FCNTL 1" >>confdefs.h + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_fcntl_h='<'fcntl.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <fcntl.h>" >&5 +$as_echo_n "checking absolute name of <fcntl.h>... " >&6; } +if ${gl_cv_next_fcntl_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <fcntl.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'fcntl.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_fcntl_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_fcntl_h + gl_cv_next_fcntl_h='"'$gl_header'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_fcntl_h" >&5 +$as_echo "$gl_cv_next_fcntl_h" >&6; } + fi + NEXT_FCNTL_H=$gl_cv_next_fcntl_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'fcntl.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_fcntl_h + fi + NEXT_AS_FIRST_DIRECTIVE_FCNTL_H=$gl_next_as_first_directive + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for flexible array member" >&5 +$as_echo_n "checking for flexible array member... " >&6; } +if ${ac_cv_c_flexmember+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> + #include <stdio.h> + #include <stddef.h> + struct m { struct m *next, **list; char name[]; }; + struct s { struct s *p; struct m *m; int n; double d[]; }; +int +main () +{ +int m = getchar (); + size_t nbytes = offsetof (struct s, d) + m * sizeof (double); + nbytes += sizeof (struct s) - 1; + nbytes -= nbytes % sizeof (struct s); + struct s *p = malloc (nbytes); + p->p = p; + p->m = NULL; + p->d[0] = 0.0; + return p->d != (double *) NULL; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_flexmember=yes +else + ac_cv_c_flexmember=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_flexmember" >&5 +$as_echo "$ac_cv_c_flexmember" >&6; } + if test $ac_cv_c_flexmember = yes; then + +$as_echo "#define FLEXIBLE_ARRAY_MEMBER /**/" >>confdefs.h + + else + $as_echo "#define FLEXIBLE_ARRAY_MEMBER 1" >>confdefs.h + + fi + + + + + FLOAT_H= + REPLACE_FLOAT_LDBL=0 + case "$host_os" in + aix* | beos* | openbsd* | mirbsd* | irix*) + FLOAT_H=float.h + ;; + freebsd* | dragonfly*) + case "$host_cpu" in + i[34567]86 ) + FLOAT_H=float.h + ;; + x86_64 ) + # On x86_64 systems, the C compiler may still be generating + # 32-bit code. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __LP64__ || defined __x86_64__ || defined __amd64__ + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + FLOAT_H=float.h +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + esac + ;; + linux*) + case "$host_cpu" in + powerpc*) + FLOAT_H=float.h + ;; + esac + ;; + esac + case "$host_os" in + aix* | freebsd* | dragonfly* | linux*) + if test -n "$FLOAT_H"; then + REPLACE_FLOAT_LDBL=1 + fi + ;; + esac + + REPLACE_ITOLD=0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether conversion from 'int' to 'long double' works" >&5 +$as_echo_n "checking whether conversion from 'int' to 'long double' works... " >&6; } +if ${gl_cv_func_itold_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + case "$host" in + sparc*-*-linux*) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined __LP64__ || defined __arch64__ + int ok; + #else + error fail + #endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_func_itold_works="guessing no" +else + gl_cv_func_itold_works="guessing yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_itold_works="guessing yes" ;; + *) gl_cv_func_itold_works="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int i = -1; +volatile long double ld; +int main () +{ + ld += i * 1.0L; + if (ld > 0) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_itold_works=yes +else + gl_cv_func_itold_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_itold_works" >&5 +$as_echo "$gl_cv_func_itold_works" >&6; } + case "$gl_cv_func_itold_works" in + *no) + REPLACE_ITOLD=1 + FLOAT_H=float.h + ;; + esac + + if test -n "$FLOAT_H"; then + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_float_h='<'float.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <float.h>" >&5 +$as_echo_n "checking absolute name of <float.h>... " >&6; } +if ${gl_cv_next_float_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <float.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'float.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_float_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_float_h + gl_cv_next_float_h='"'$gl_header'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_float_h" >&5 +$as_echo "$gl_cv_next_float_h" >&6; } + fi + NEXT_FLOAT_H=$gl_cv_next_float_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'float.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_float_h + fi + NEXT_AS_FIRST_DIRECTIVE_FLOAT_H=$gl_next_as_first_directive + + + + + fi + + if test -n "$FLOAT_H"; then + GL_GENERATE_FLOAT_H_TRUE= + GL_GENERATE_FLOAT_H_FALSE='#' +else + GL_GENERATE_FLOAT_H_TRUE='#' + GL_GENERATE_FLOAT_H_FALSE= +fi + + + + if test $REPLACE_FLOAT_LDBL = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS float.$ac_objext" + + fi + if test $REPLACE_ITOLD = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS itold.$ac_objext" + + fi + + + + if test $ac_cv_func_flock = no; then + HAVE_FLOCK=0 + fi + + if test $HAVE_FLOCK = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS flock.$ac_objext" + + + + + + ac_fn_c_check_member "$LINENO" "struct flock" "l_type" "ac_cv_member_struct_flock_l_type" "#include <fcntl.h> +" +if test "x$ac_cv_member_struct_flock_l_type" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_FLOCK_L_TYPE 1 +_ACEOF + + +fi + + + fi + + + + + + GNULIB_FLOCK=1 + + + + + + + + + + saved_as_echo_n="$as_echo_n" + as_echo_n=':' + if ${gl_cv_func_floor_libm+:} false; then : + $as_echo_n "(cached) " >&6 +else + + gl_cv_func_floor_libm=? + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __NO_MATH_INLINES + # define __NO_MATH_INLINES 1 /* for glibc */ + #endif + #include <math.h> + double (*funcptr) (double) = floor; + double x; +int +main () +{ +x = funcptr(x) + floor(x); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_floor_libm= +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test "$gl_cv_func_floor_libm" = "?"; then + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __NO_MATH_INLINES + # define __NO_MATH_INLINES 1 /* for glibc */ + #endif + #include <math.h> + double (*funcptr) (double) = floor; + double x; +int +main () +{ +x = funcptr(x) + floor(x); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_floor_libm="-lm" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$save_LIBS" + fi + +fi + + as_echo_n="$saved_as_echo_n" + + FLOOR_LIBM="$gl_cv_func_floor_libm" + + if test "$FLOOR_LIBM" = "?"; then + FLOOR_LIBM= + fi + + if test $REPLACE_FLOOR = 1; then + FLOOR_LIBM= + fi + + + if test $REPLACE_FLOOR = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS floor.$ac_objext" + + fi + + + + + + GNULIB_FLOOR=1 + + + + + +$as_echo "#define GNULIB_TEST_FLOOR 1" >>confdefs.h + + + + + + fp_headers=' + #include <stdio.h> + #if HAVE_STDIO_EXT_H + # include <stdio_ext.h> + #endif + ' + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __fpending" >&5 +$as_echo_n "checking for __fpending... " >&6; } +if ${gl_cv_func___fpending+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$fp_headers +int +main () +{ +return ! __fpending (stdin); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func___fpending=yes +else + gl_cv_func___fpending=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func___fpending" >&5 +$as_echo "$gl_cv_func___fpending" >&6; } + if test $gl_cv_func___fpending = yes; then + ac_fn_c_check_decl "$LINENO" "__fpending" "ac_cv_have_decl___fpending" "$fp_headers +" +if test "x$ac_cv_have_decl___fpending" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL___FPENDING $ac_have_decl +_ACEOF + + fi + + if test $gl_cv_func___fpending = no; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS fpending.$ac_objext" + + fi + + + + + + + + + + + + + + + + gl_cv_func_fprintf_posix=no + case "$gl_cv_func_printf_sizes_c99" in + *yes) + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + case "$gl_cv_func_printf_directive_a" in + *yes) + case "$gl_cv_func_printf_directive_f" in + *yes) + case "$gl_cv_func_printf_directive_n" in + *yes) + case "$gl_cv_func_printf_directive_ls" in + *yes) + case "$gl_cv_func_printf_positions" in + *yes) + case "$gl_cv_func_printf_flag_grouping" in + *yes) + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + case "$gl_cv_func_printf_flag_zero" in + *yes) + case "$gl_cv_func_printf_precision" in + *yes) + case "$gl_cv_func_printf_enomem" in + *yes) + # fprintf exists and is + # already POSIX compliant. + gl_cv_func_fprintf_posix=yes + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + if test $gl_cv_func_fprintf_posix = no; then + + + + case "$gl_cv_func_printf_infinite" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + ;; + esac + + + + case "$gl_cv_func_printf_directive_a" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h + + for ac_func in nl_langinfo +do : + ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" +if test "x$ac_cv_func_nl_langinfo" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NL_LANGINFO 1 +_ACEOF + +fi +done + + ;; + esac + + + + case "$gl_cv_func_printf_directive_f" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_directive_ls" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_grouping" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_zero" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_precision" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_enomem" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext" + + if test $ac_cv_func_vasnprintf = yes; then + +$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h + + fi + + + + + + + + + + + + ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" +if test "x$ac_cv_type_ptrdiff_t" = xyes; then : + +else + +$as_echo "#define ptrdiff_t long" >>confdefs.h + + +fi + + + + + + + + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS fprintf.$ac_objext" + + REPLACE_FPRINTF=1 + +$as_echo "#define REPLACE_FPRINTF_POSIX 1" >>confdefs.h + + : + + fi + + + + + + + GNULIB_FPRINTF_POSIX=1 + + + + + +$as_echo "#define GNULIB_TEST_FPRINTF_POSIX 1" >>confdefs.h + + + + + + + if test $gl_cv_func_frexp_no_libm = yes; then + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexp works" >&5 +$as_echo_n "checking whether frexp works... " >&6; } +if ${gl_cv_func_frexp_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + case "$host_os" in + netbsd* | irix*) gl_cv_func_frexp_works="guessing no" ;; + mingw*) # Guess yes with MSVC, no with mingw. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _MSC_VER + Good +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Good" >/dev/null 2>&1; then : + gl_cv_func_frexp_works="guessing yes" +else + gl_cv_func_frexp_works="guessing no" +fi +rm -f conftest* + + ;; + *) gl_cv_func_frexp_works="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <math.h> +#include <string.h> +#if HAVE_DECL_ALARM +# include <signal.h> +# include <unistd.h> +#endif +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + ICC 10.0 has a bug when optimizing the expression -zero. + The expression -DBL_MIN * DBL_MIN does not work when cross-compiling + to PowerPC on Mac OS X 10.5. */ +#if defined __hpux || defined __sgi || defined __ICC +static double +compute_minus_zero (void) +{ + return -DBL_MIN * DBL_MIN; +} +# define minus_zero compute_minus_zero () +#else +double minus_zero = -0.0; +#endif +int main() +{ + int result = 0; + int i; + volatile double x; + double zero = 0.0; +#if HAVE_DECL_ALARM + /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite + number. Let the test fail in this case. */ + signal (SIGALRM, SIG_DFL); + alarm (5); +#endif + /* Test on denormalized numbers. */ + for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) + ; + if (x > 0.0) + { + int exp; + double y = frexp (x, &exp); + /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022. + On NetBSD: y = 0.75. Correct: y = 0.5. */ + if (y != 0.5) + result |= 1; + } + /* Test on infinite numbers. */ + x = 1.0 / zero; + { + int exp; + double y = frexp (x, &exp); + if (y != x) + result |= 2; + } + /* Test on negative zero. */ + x = minus_zero; + { + int exp; + double y = frexp (x, &exp); + if (memcmp (&y, &x, sizeof x)) + result |= 4; + } + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_frexp_works=yes +else + gl_cv_func_frexp_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_works" >&5 +$as_echo "$gl_cv_func_frexp_works" >&6; } + + case "$gl_cv_func_frexp_works" in + *yes) gl_func_frexp_no_libm=yes ;; + *) gl_func_frexp_no_libm=no; REPLACE_FREXP=1 ;; + esac + else + gl_func_frexp_no_libm=no + REPLACE_FREXP=1 + fi + if test $gl_func_frexp_no_libm = yes; then + +$as_echo "#define HAVE_FREXP_IN_LIBC 1" >>confdefs.h + + fi + + if test $gl_func_frexp_no_libm != yes; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS frexp.$ac_objext" + + fi + + + + + + GNULIB_FREXP=1 + + + + + +$as_echo "#define GNULIB_TEST_FREXP 1" >>confdefs.h + + + + + + + ac_fn_c_check_decl "$LINENO" "frexpl" "ac_cv_have_decl_frexpl" "#include <math.h> +" +if test "x$ac_cv_have_decl_frexpl" = xyes; then : + +else + HAVE_DECL_FREXPL=0 +fi + + if test $HAVE_DECL_FREXPL = 1; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl() can be used without linking with libm" >&5 +$as_echo_n "checking whether frexpl() can be used without linking with libm... " >&6; } +if ${gl_cv_func_frexpl_no_libm+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + long double x; +int +main () +{ +int e; return frexpl (x, &e) > 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_frexpl_no_libm=yes +else + gl_cv_func_frexpl_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_no_libm" >&5 +$as_echo "$gl_cv_func_frexpl_no_libm" >&6; } + + if test $gl_cv_func_frexpl_no_libm = yes; then + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl works" >&5 +$as_echo_n "checking whether frexpl works... " >&6; } +if ${gl_cv_func_frexpl_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + aix | aix[3-6]* | beos* | darwin* | irix* | mingw* | pw*) + gl_cv_func_frexpl_works="guessing no";; + *) gl_cv_func_frexpl_works="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <math.h> +/* Override the values of <float.h>, like done in float.in.h. */ +#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +#endif +#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +#endif +#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP DBL_MIN_EXP +#endif +#if defined __sgi && (LDBL_MANT_DIG >= 106) +# if defined __GNUC__ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP DBL_MIN_EXP +# endif +#endif +extern +#ifdef __cplusplus +"C" +#endif +long double frexpl (long double, int *); +int main() +{ + int result = 0; + volatile long double x; + /* Test on finite numbers that fails on AIX 5.1. */ + x = 16.0L; + { + int exp = -9999; + frexpl (x, &exp); + if (exp != 5) + result |= 1; + } + /* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl + function returns an invalid (incorrectly normalized) value: it returns + y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 } + but the correct result is + 0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */ + x = 1.01L; + { + int exp = -9999; + long double y = frexpl (x, &exp); + if (!(exp == 1 && y == 0.505L)) + result |= 2; + } + /* Test on large finite numbers. This fails on BeOS at i = 16322, while + LDBL_MAX_EXP = 16384. + In the loop end test, we test x against Infinity, rather than comparing + i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP. */ + { + int i; + for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L) + { + int exp = -9999; + frexpl (x, &exp); + if (exp != i) + { + result |= 4; + break; + } + } + } + /* Test on denormalized numbers. */ + { + int i; + for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L) + ; + if (x > 0.0L) + { + int exp; + long double y = frexpl (x, &exp); + /* On machines with IEEE854 arithmetic: x = 1.68105e-4932, + exp = -16382, y = 0.5. On Mac OS X 10.5: exp = -16384, y = 0.5. */ + if (exp != LDBL_MIN_EXP - 1) + result |= 8; + } + } + /* Test on infinite numbers. */ + x = 1.0L / 0.0L; + { + int exp; + long double y = frexpl (x, &exp); + if (y != x) + result |= 16; + } + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_frexpl_works=yes +else + gl_cv_func_frexpl_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_works" >&5 +$as_echo "$gl_cv_func_frexpl_works" >&6; } + + case "$gl_cv_func_frexpl_works" in + *yes) gl_func_frexpl_no_libm=yes ;; + *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; + esac + else + gl_func_frexpl_no_libm=no + REPLACE_FREXPL=1 + fi + if test $gl_func_frexpl_no_libm = yes; then + +$as_echo "#define HAVE_FREXPL_IN_LIBC 1" >>confdefs.h + + fi + fi + + if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl_no_libm = no; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS frexpl.$ac_objext" + + fi + + + + + + GNULIB_FREXPL=1 + + + + + +$as_echo "#define GNULIB_TEST_FREXPL 1" >>confdefs.h + + + + + + + if test $HAVE_FSEEKO = 0 || test $REPLACE_FSEEKO = 1; then + REPLACE_FSEEK=1 + fi + + if test $REPLACE_FSEEK = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS fseek.$ac_objext" + + fi + + + + + + GNULIB_FSEEK=1 + + + + + +$as_echo "#define GNULIB_TEST_FSEEK 1" >>confdefs.h + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fseeko" >&5 +$as_echo_n "checking for fseeko... " >&6; } +if ${gl_cv_func_fseeko+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> + +int +main () +{ +fseeko (stdin, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_fseeko=yes +else + gl_cv_func_fseeko=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fseeko" >&5 +$as_echo "$gl_cv_func_fseeko" >&6; } + + + if test $ac_cv_have_decl_fseeko = no; then + HAVE_DECL_FSEEKO=0 + fi + + if test $gl_cv_func_fseeko = no; then + HAVE_FSEEKO=0 + else + if test $WINDOWS_64_BIT_OFF_T = 1; then + REPLACE_FSEEKO=1 + fi + if test $gl_cv_var_stdin_large_offset = no; then + REPLACE_FSEEKO=1 + fi + + fi + + if test $HAVE_FSEEKO = 0 || test $REPLACE_FSEEKO = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS fseeko.$ac_objext" + + + for ac_func in _fseeki64 +do : + ac_fn_c_check_func "$LINENO" "_fseeki64" "ac_cv_func__fseeki64" +if test "x$ac_cv_func__fseeki64" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE__FSEEKI64 1 +_ACEOF + +fi +done + + if test $ac_cv_func__fseeki64 = yes; then + ac_fn_c_check_decl "$LINENO" "_fseeki64" "ac_cv_have_decl__fseeki64" "$ac_includes_default" +if test "x$ac_cv_have_decl__fseeki64" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL__FSEEKI64 $ac_have_decl +_ACEOF + + fi + + fi + + + + + + GNULIB_FSEEKO=1 + + + + + +$as_echo "#define GNULIB_TEST_FSEEKO 1" >>confdefs.h + + + + + + + if test $ac_cv_func___fseterr = no; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS fseterr.$ac_objext" + + fi + + + + + case "$host_os" in + mingw* | solaris*) + REPLACE_FSTAT=1 + ;; + esac + + + + if test $REPLACE_FSTAT = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS fstat.$ac_objext" + + case "$host_os" in + mingw*) + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS stat-w32.$ac_objext" + + ;; + esac + + + : + + fi + + + + + + GNULIB_FSTAT=1 + + + + + +$as_echo "#define GNULIB_TEST_FSTAT 1" >>confdefs.h + + + + + + + if test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1; then + REPLACE_FTELL=1 + fi + + if test $REPLACE_FTELL = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS ftell.$ac_objext" + + fi + + + + + + GNULIB_FTELL=1 + + + + + +$as_echo "#define GNULIB_TEST_FTELL 1" >>confdefs.h + + + + + + + + + + + + + if test $ac_cv_have_decl_ftello = no; then + HAVE_DECL_FTELLO=0 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ftello" >&5 +$as_echo_n "checking for ftello... " >&6; } +if ${gl_cv_func_ftello+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> +int +main () +{ +ftello (stdin); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_ftello=yes +else + gl_cv_func_ftello=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ftello" >&5 +$as_echo "$gl_cv_func_ftello" >&6; } + if test $gl_cv_func_ftello = no; then + HAVE_FTELLO=0 + else + if test $WINDOWS_64_BIT_OFF_T = 1; then + REPLACE_FTELLO=1 + fi + if test $gl_cv_var_stdin_large_offset = no; then + REPLACE_FTELLO=1 + fi + if test $REPLACE_FTELLO = 0; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ftello works" >&5 +$as_echo_n "checking whether ftello works... " >&6; } +if ${gl_cv_func_ftello_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris. + solaris*) gl_cv_func_ftello_works="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_ftello_works="guessing yes" ;; + # Guess yes otherwise. + *) gl_cv_func_ftello_works="guessing yes" ;; + esac + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#define TESTFILE "conftest.tmp" +int +main (void) +{ + FILE *fp; + + /* Create a file with some contents. */ + fp = fopen (TESTFILE, "w"); + if (fp == NULL) + return 70; + if (fwrite ("foogarsh", 1, 8, fp) < 8) + { fclose (fp); return 71; } + if (fclose (fp)) + return 72; + + /* The file's contents is now "foogarsh". */ + + /* Try writing after reading to EOF. */ + fp = fopen (TESTFILE, "r+"); + if (fp == NULL) + return 73; + if (fseek (fp, -1, SEEK_END)) + { fclose (fp); return 74; } + if (!(getc (fp) == 'h')) + { fclose (fp); return 1; } + if (!(getc (fp) == EOF)) + { fclose (fp); return 2; } + if (!(ftell (fp) == 8)) + { fclose (fp); return 3; } + if (!(ftell (fp) == 8)) + { fclose (fp); return 4; } + if (!(putc ('!', fp) == '!')) + { fclose (fp); return 5; } + if (!(ftell (fp) == 9)) + { fclose (fp); return 6; } + if (!(fclose (fp) == 0)) + return 7; + fp = fopen (TESTFILE, "r"); + if (fp == NULL) + return 75; + { + char buf[10]; + if (!(fread (buf, 1, 10, fp) == 9)) + { fclose (fp); return 10; } + if (!(memcmp (buf, "foogarsh!", 9) == 0)) + { fclose (fp); return 11; } + } + if (!(fclose (fp) == 0)) + return 12; + + /* The file's contents is now "foogarsh!". */ + + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_ftello_works=yes +else + gl_cv_func_ftello_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ftello_works" >&5 +$as_echo "$gl_cv_func_ftello_works" >&6; } + case "$gl_cv_func_ftello_works" in + *yes) ;; + *) + REPLACE_FTELLO=1 + +$as_echo "#define FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE 1" >>confdefs.h + + ;; + esac + fi + fi + + if test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS ftello.$ac_objext" + + + for ac_func in _ftelli64 +do : + ac_fn_c_check_func "$LINENO" "_ftelli64" "ac_cv_func__ftelli64" +if test "x$ac_cv_func__ftelli64" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE__FTELLI64 1 +_ACEOF + +fi +done + + + fi + + + + + + GNULIB_FTELLO=1 + + + + + +$as_echo "#define GNULIB_TEST_FTELLO 1" >>confdefs.h + + + + + + + if test $ac_cv_func___fwriting = no; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS fwriting.$ac_objext" + + fi + + + + + + + + + if test $ac_cv_func_getdelim = yes; then + HAVE_GETDELIM=1 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working getdelim function" >&5 +$as_echo_n "checking for working getdelim function... " >&6; } +if ${gl_cv_func_working_getdelim+:} false; then : + $as_echo_n "(cached) " >&6 +else + echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <features.h> +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ >= 2) && !defined __UCLIBC__ + Lucky GNU user + #endif +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky GNU user" >/dev/null 2>&1; then : + gl_cv_func_working_getdelim="guessing yes" +else + gl_cv_func_working_getdelim="guessing no" +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# include <stdio.h> +# include <stdlib.h> +# include <string.h> + int main () + { + FILE *in = fopen ("./conftest.data", "r"); + if (!in) + return 1; + { + /* Test result for a NULL buffer and a zero size. + Based on a test program from Karl Heuer. */ + char *line = NULL; + size_t siz = 0; + int len = getdelim (&line, &siz, '\n', in); + if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) + { free (line); fclose (in); return 2; } + } + { + /* Test result for a NULL buffer and a non-zero size. + This crashes on FreeBSD 8.0. */ + char *line = NULL; + size_t siz = (size_t)(~0) / 4; + if (getdelim (&line, &siz, '\n', in) == -1) + { fclose (in); return 3; } + free (line); + } + fclose (in); + return 0; + } + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_working_getdelim=yes +else + gl_cv_func_working_getdelim=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_getdelim" >&5 +$as_echo "$gl_cv_func_working_getdelim" >&6; } + case "$gl_cv_func_working_getdelim" in + *no) + REPLACE_GETDELIM=1 + ;; + esac + else + HAVE_GETDELIM=0 + fi + + if test $ac_cv_have_decl_getdelim = no; then + HAVE_DECL_GETDELIM=0 + fi + + if test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getdelim.$ac_objext" + + + for ac_func in flockfile funlockfile +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl +_ACEOF + + + fi + + + + + + GNULIB_GETDELIM=1 + + + + + +$as_echo "#define GNULIB_TEST_GETDELIM 1" >>confdefs.h + + + + + + + + + if test $ac_cv_func_getdtablesize = yes && + test $ac_cv_have_decl_getdtablesize = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getdtablesize works" >&5 +$as_echo_n "checking whether getdtablesize works... " >&6; } +if ${gl_cv_func_getdtablesize_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$host_os" in + vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;; + *) + if test "$cross_compiling" = yes; then : + case "$host_os" in + cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows + gl_cv_func_getdtablesize_works="guessing no" ;; + *) gl_cv_func_getdtablesize_works="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <unistd.h> +int +main () +{ +int size = getdtablesize(); + if (dup2 (0, getdtablesize()) != -1) + return 1; + if (size != getdtablesize()) + return 2; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_getdtablesize_works=yes +else + gl_cv_func_getdtablesize_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getdtablesize_works" >&5 +$as_echo "$gl_cv_func_getdtablesize_works" >&6; } + case "$gl_cv_func_getdtablesize_works" in + *yes | "no (limitation)") ;; + *) REPLACE_GETDTABLESIZE=1 ;; + esac + else + HAVE_GETDTABLESIZE=0 + fi + + if test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getdtablesize.$ac_objext" + + : + fi + + + + + + GNULIB_GETDTABLESIZE=1 + + + + + +$as_echo "#define GNULIB_TEST_GETDTABLESIZE 1" >>confdefs.h + + + + + + + + + ac_fn_c_check_func "$LINENO" "getgroups" "ac_cv_func_getgroups" +if test "x$ac_cv_func_getgroups" = xyes; then : + +fi + + + # If we don't yet have getgroups, see if it's in -lbsd. + # This is reported to be necessary on an ITOS 3000WS running SEIUX 3.1. + ac_save_LIBS=$LIBS + if test $ac_cv_func_getgroups = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getgroups in -lbsd" >&5 +$as_echo_n "checking for getgroups in -lbsd... " >&6; } +if ${ac_cv_lib_bsd_getgroups+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbsd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char getgroups (); +int +main () +{ +return getgroups (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_bsd_getgroups=yes +else + ac_cv_lib_bsd_getgroups=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_getgroups" >&5 +$as_echo "$ac_cv_lib_bsd_getgroups" >&6; } +if test "x$ac_cv_lib_bsd_getgroups" = xyes; then : + GETGROUPS_LIB=-lbsd +fi + + fi + + # Run the program to test the functionality of the system-supplied + # getgroups function only if there is such a function. + if test $ac_cv_func_getgroups = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working getgroups" >&5 +$as_echo_n "checking for working getgroups... " >&6; } +if ${ac_cv_func_getgroups_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in # (( + # Guess yes on glibc systems. + *-gnu* | gnu*) ac_cv_func_getgroups_works="guessing yes" ;; + # If we don't know, assume the worst. + *) ac_cv_func_getgroups_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +/* On NeXTstep 3.2, getgroups (0, 0) always fails. */ + return getgroups (0, 0) == -1; + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_getgroups_works=yes +else + ac_cv_func_getgroups_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getgroups_works" >&5 +$as_echo "$ac_cv_func_getgroups_works" >&6; } + else + ac_cv_func_getgroups_works=no + fi + case "$ac_cv_func_getgroups_works" in + *yes) + +$as_echo "#define HAVE_GETGROUPS 1" >>confdefs.h + + ;; + esac + LIBS=$ac_save_LIBS + + if test $ac_cv_func_getgroups != yes; then + HAVE_GETGROUPS=0 + else + if test "$ac_cv_type_getgroups" != gid_t \ + || { case "$ac_cv_func_getgroups_works" in + *yes) false;; + *) true;; + esac + }; then + REPLACE_GETGROUPS=1 + +$as_echo "#define GETGROUPS_ZERO_BUG 1" >>confdefs.h + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getgroups handles negative values" >&5 +$as_echo_n "checking whether getgroups handles negative values... " >&6; } +if ${gl_cv_func_getgroups_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_getgroups_works="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_getgroups_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +int size = getgroups (0, 0); + gid_t *list = malloc (size * sizeof *list); + int result = getgroups (-1, list) != -1; + free (list); + return result; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_getgroups_works=yes +else + gl_cv_func_getgroups_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getgroups_works" >&5 +$as_echo "$gl_cv_func_getgroups_works" >&6; } + case "$gl_cv_func_getgroups_works" in + *yes) ;; + *) REPLACE_GETGROUPS=1 ;; + esac + fi + fi + test -n "$GETGROUPS_LIB" && LIBS="$GETGROUPS_LIB $LIBS" + + if test $HAVE_GETGROUPS = 0 || test $REPLACE_GETGROUPS = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getgroups.$ac_objext" + + fi + + + + + + GNULIB_GETGROUPS=1 + + + + + +$as_echo "#define GNULIB_TEST_GETGROUPS 1" >>confdefs.h + + + + + + + + + + + gl_getline_needs_run_time_check=no + ac_fn_c_check_func "$LINENO" "getline" "ac_cv_func_getline" +if test "x$ac_cv_func_getline" = xyes; then : + gl_getline_needs_run_time_check=yes +else + am_cv_func_working_getline=no +fi + + if test $gl_getline_needs_run_time_check = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working getline function" >&5 +$as_echo_n "checking for working getline function... " >&6; } +if ${am_cv_func_working_getline+:} false; then : + $as_echo_n "(cached) " >&6 +else + echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <features.h> +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ >= 2) && !defined __UCLIBC__ + Lucky GNU user + #endif +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky GNU user" >/dev/null 2>&1; then : + am_cv_func_working_getline="guessing yes" +else + am_cv_func_working_getline="guessing no" +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# include <stdio.h> +# include <stdlib.h> +# include <string.h> + int main () + { + FILE *in = fopen ("./conftest.data", "r"); + if (!in) + return 1; + { + /* Test result for a NULL buffer and a zero size. + Based on a test program from Karl Heuer. */ + char *line = NULL; + size_t siz = 0; + int len = getline (&line, &siz, in); + if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) + { free (line); fclose (in); return 2; } + free (line); + } + { + /* Test result for a NULL buffer and a non-zero size. + This crashes on FreeBSD 8.0. */ + char *line = NULL; + size_t siz = (size_t)(~0) / 4; + if (getline (&line, &siz, in) == -1) + { fclose (in); return 3; } + free (line); + } + fclose (in); + return 0; + } + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + am_cv_func_working_getline=yes +else + am_cv_func_working_getline=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_working_getline" >&5 +$as_echo "$am_cv_func_working_getline" >&6; } + fi + + if test $ac_cv_have_decl_getline = no; then + HAVE_DECL_GETLINE=0 + fi + + case "$am_cv_func_working_getline" in + *no) + REPLACE_GETLINE=1 + ;; + esac + + if test $REPLACE_GETLINE = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getline.$ac_objext" + + + : + + fi + + + + + + GNULIB_GETLINE=1 + + + + + +$as_echo "#define GNULIB_TEST_GETLINE 1" >>confdefs.h + + + + + + + + + + + + + REPLACE_GETOPT=0 + if test -n "$gl_replace_getopt"; then + REPLACE_GETOPT=1 + fi + + if test $REPLACE_GETOPT = 1; then + + + if test $ac_cv_header_sys_cdefs_h = yes; then + HAVE_SYS_CDEFS_H=1 + else + HAVE_SYS_CDEFS_H=0 + fi + + + +$as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h + + GETOPT_H=getopt.h + GETOPT_CDEFS_H=getopt-cdefs.h + + + + fi + + if test $REPLACE_GETOPT = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getopt.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getopt1.$ac_objext" + + GNULIB_GL_UNISTD_H_GETOPT=1 + fi + + + if test $HAVE_GETPASS = 0 || test $REPLACE_GETPASS = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getpass.$ac_objext" + + + + + ac_fn_c_check_decl "$LINENO" "__fsetlocking" "ac_cv_have_decl___fsetlocking" "#include <stdio.h> + #if HAVE_STDIO_EXT_H + #include <stdio_ext.h> + #endif +" +if test "x$ac_cv_have_decl___fsetlocking" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL___FSETLOCKING $ac_have_decl +_ACEOF + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tcgetattr" >&5 +$as_echo_n "checking for tcgetattr... " >&6; } +if ${gl_cv_func_tcgetattr+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <termios.h> + struct termios x; + +int +main () +{ +return tcgetattr(0,&x); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_tcgetattr=yes +else + gl_cv_func_tcgetattr=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_tcgetattr" >&5 +$as_echo "$gl_cv_func_tcgetattr" >&6; } + if test $gl_cv_func_tcgetattr = yes; then + HAVE_TCGETATTR=1 + else + HAVE_TCGETATTR=0 + fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_TCGETATTR $HAVE_TCGETATTR +_ACEOF + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tcsetattr" >&5 +$as_echo_n "checking for tcsetattr... " >&6; } +if ${gl_cv_func_tcsetattr+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <termios.h> + struct termios x; + +int +main () +{ +return tcsetattr(0,0,&x); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_tcsetattr=yes +else + gl_cv_func_tcsetattr=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_tcsetattr" >&5 +$as_echo "$gl_cv_func_tcsetattr" >&6; } + if test $gl_cv_func_tcsetattr = yes; then + HAVE_TCSETATTR=1 + else + HAVE_TCSETATTR=0 + fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_TCSETATTR $HAVE_TCSETATTR +_ACEOF + + + fi + + + + + + GNULIB_GETPASS=1 + + + + + +$as_echo "#define GNULIB_TEST_GETPASS 1" >>confdefs.h + + + + + + + + if test $ac_cv_func_getpass = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getpass without length limitations" >&5 +$as_echo_n "checking for getpass without length limitations... " >&6; } +if ${gl_cv_func_getpass_good+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <features.h> +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ >= 2) && !defined __UCLIBC__ + Lucky GNU user + #endif +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky GNU user" >/dev/null 2>&1; then : + gl_cv_func_getpass_good=yes +else + gl_cv_func_getpass_good=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getpass_good" >&5 +$as_echo "$gl_cv_func_getpass_good" >&6; } + if test $gl_cv_func_getpass_good != yes; then + REPLACE_GETPASS=1 + fi + fi + + if test $HAVE_GETPASS = 0 || test $REPLACE_GETPASS = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getpass.$ac_objext" + + + + + ac_fn_c_check_decl "$LINENO" "__fsetlocking" "ac_cv_have_decl___fsetlocking" "#include <stdio.h> + #if HAVE_STDIO_EXT_H + #include <stdio_ext.h> + #endif +" +if test "x$ac_cv_have_decl___fsetlocking" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL___FSETLOCKING $ac_have_decl +_ACEOF + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tcgetattr" >&5 +$as_echo_n "checking for tcgetattr... " >&6; } +if ${gl_cv_func_tcgetattr+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <termios.h> + struct termios x; + +int +main () +{ +return tcgetattr(0,&x); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_tcgetattr=yes +else + gl_cv_func_tcgetattr=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_tcgetattr" >&5 +$as_echo "$gl_cv_func_tcgetattr" >&6; } + if test $gl_cv_func_tcgetattr = yes; then + HAVE_TCGETATTR=1 + else + HAVE_TCGETATTR=0 + fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_TCGETATTR $HAVE_TCGETATTR +_ACEOF + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tcsetattr" >&5 +$as_echo_n "checking for tcsetattr... " >&6; } +if ${gl_cv_func_tcsetattr+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <termios.h> + struct termios x; + +int +main () +{ +return tcsetattr(0,0,&x); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_tcsetattr=yes +else + gl_cv_func_tcsetattr=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_tcsetattr" >&5 +$as_echo "$gl_cv_func_tcsetattr" >&6; } + if test $gl_cv_func_tcsetattr = yes; then + HAVE_TCSETATTR=1 + else + HAVE_TCSETATTR=0 + fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_TCSETATTR $HAVE_TCSETATTR +_ACEOF + + + fi + + + + + + GNULIB_GETPASS=1 + + + + + +$as_echo "#define GNULIB_TEST_GETPASS 1" >>confdefs.h + + + + + + + ac_found=0 + ac_fn_c_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include <errno.h> +" +if test "x$ac_cv_have_decl_program_invocation_name" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + ac_found=1 +fi + + ac_fn_c_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include <errno.h> +" +if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + ac_found=1 +fi + + ac_fn_c_check_decl "$LINENO" "__argv" "ac_cv_have_decl___argv" "#include <stdlib.h> +" +if test "x$ac_cv_have_decl___argv" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL___ARGV $ac_have_decl +_ACEOF +if test $ac_have_decl = 1; then : + ac_found=1 +fi + + + # Incur the cost of this test only if none of the above worked. + if test $ac_found = 0; then + # On OpenBSD 5.1, using the global __progname variable appears to be + # the only way to implement getprogname. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether __progname is defined in default libraries" >&5 +$as_echo_n "checking whether __progname is defined in default libraries... " >&6; } +if ${gl_cv_var___progname+:} false; then : + $as_echo_n "(cached) " >&6 +else + + gl_cv_var___progname= + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +extern char *__progname; +int +main () +{ +return *__progname; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_var___progname=yes + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_var___progname" >&5 +$as_echo "$gl_cv_var___progname" >&6; } + if test "$gl_cv_var___progname" = yes; then + +$as_echo "#define HAVE_VAR___PROGNAME 1" >>confdefs.h + + fi + fi + + + + + + + + + + + + + + + + gl_gettimeofday_timezone=void + if test $ac_cv_func_gettimeofday != yes; then + HAVE_GETTIMEOFDAY=0 + else + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gettimeofday clobbers localtime buffer" >&5 +$as_echo_n "checking whether gettimeofday clobbers localtime buffer... " >&6; } +if ${gl_cv_func_gettimeofday_clobber+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + # When cross-compiling: + case "$host_os" in + # Guess all is fine on glibc systems. + *-gnu* | gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_gettimeofday_clobber="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_gettimeofday_clobber="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + #include <sys/time.h> + #include <time.h> + #include <stdlib.h> + +int +main () +{ + + time_t t = 0; + struct tm *lt; + struct tm saved_lt; + struct timeval tv; + lt = localtime (&t); + saved_lt = *lt; + gettimeofday (&tv, NULL); + return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_gettimeofday_clobber=no +else + gl_cv_func_gettimeofday_clobber=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_gettimeofday_clobber" >&5 +$as_echo "$gl_cv_func_gettimeofday_clobber" >&6; } + + case "$gl_cv_func_gettimeofday_clobber" in + *yes) + REPLACE_GETTIMEOFDAY=1 + +$as_echo "#define GETTIMEOFDAY_CLOBBERS_LOCALTIME 1" >>confdefs.h + + + + + NEED_LOCALTIME_BUFFER=1 + REPLACE_GMTIME=1 + REPLACE_LOCALTIME=1 + + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gettimeofday with POSIX signature" >&5 +$as_echo_n "checking for gettimeofday with POSIX signature... " >&6; } +if ${gl_cv_func_gettimeofday_posix_signature+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/time.h> + struct timeval c; + int gettimeofday (struct timeval *restrict, void *restrict); + +int +main () +{ +/* glibc uses struct timezone * rather than the POSIX void * + if _GNU_SOURCE is defined. However, since the only portable + use of gettimeofday uses NULL as the second parameter, and + since the glibc definition is actually more typesafe, it is + not worth wrapping this to get a compliant signature. */ + int (*f) (struct timeval *restrict, void *restrict) + = gettimeofday; + int x = f (&c, 0); + return !(x | c.tv_sec | c.tv_usec); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_func_gettimeofday_posix_signature=yes +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/time.h> +int gettimeofday (struct timeval *restrict, struct timezone *restrict); + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_func_gettimeofday_posix_signature=almost +else + gl_cv_func_gettimeofday_posix_signature=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_gettimeofday_posix_signature" >&5 +$as_echo "$gl_cv_func_gettimeofday_posix_signature" >&6; } + if test $gl_cv_func_gettimeofday_posix_signature = almost; then + gl_gettimeofday_timezone='struct timezone' + elif test $gl_cv_func_gettimeofday_posix_signature != yes; then + REPLACE_GETTIMEOFDAY=1 + fi + if test $REPLACE_STRUCT_TIMEVAL = 1; then + REPLACE_GETTIMEOFDAY=1 + fi + case "$host_os" in + mingw*) REPLACE_GETTIMEOFDAY=1 ;; + esac + fi + +cat >>confdefs.h <<_ACEOF +#define GETTIMEOFDAY_TIMEZONE $gl_gettimeofday_timezone +_ACEOF + + + if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS gettimeofday.$ac_objext" + + : + fi + + + + + + GNULIB_GETTIMEOFDAY=1 + + + + + +$as_echo "#define GNULIB_TEST_GETTIMEOFDAY 1" >>confdefs.h + + + + # Autoconf 2.61a.99 and earlier don't support linking a file only + # in VPATH builds. But since GNUmakefile is for maintainer use + # only, it does not matter if we skip the link with older autoconf. + # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH + # builds, so use a shell variable to bypass this. + GNUmakefile=GNUmakefile + ac_config_links="$ac_config_links $GNUmakefile:$GNUmakefile" + + + + + + + ac_fn_c_check_func "$LINENO" "group_member" "ac_cv_func_group_member" +if test "x$ac_cv_func_group_member" = xyes; then : + +else + + HAVE_GROUP_MEMBER=0 + +fi + + + if test $HAVE_GROUP_MEMBER = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS group-member.$ac_objext" + + + + + fi + + + + + + GNULIB_GROUP_MEMBER=1 + + + + + +$as_echo "#define GNULIB_TEST_GROUP_MEMBER 1" >>confdefs.h + + + + + + + + + PRIPTR_PREFIX= + if test -n "$STDINT_H"; then + PRIPTR_PREFIX='"l"' + else + for glpfx in '' l ll I64; do + case $glpfx in + '') gltype1='int';; + l) gltype1='long int';; + ll) gltype1='long long int';; + I64) gltype1='__int64';; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdint.h> + extern intptr_t foo; + extern $gltype1 foo; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + PRIPTR_PREFIX='"'$glpfx'"' +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test -n "$PRIPTR_PREFIX" && break + done + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether INT32_MAX < INTMAX_MAX" >&5 +$as_echo_n "checking whether INT32_MAX < INTMAX_MAX... " >&6; } +if ${gl_cv_test_INT32_MAX_LT_INTMAX_MAX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Work also in C++ mode. */ + #define __STDC_LIMIT_MACROS 1 + + /* Work if build is not clean. */ + #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H + + #include <limits.h> + #if HAVE_STDINT_H + #include <stdint.h> + #endif + + #if defined INT32_MAX && defined INTMAX_MAX + #define CONDITION (INT32_MAX < INTMAX_MAX) + #elif HAVE_LONG_LONG_INT + #define CONDITION (sizeof (int) < sizeof (long long int)) + #else + #define CONDITION 0 + #endif + int test[CONDITION ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_test_INT32_MAX_LT_INTMAX_MAX=yes +else + gl_cv_test_INT32_MAX_LT_INTMAX_MAX=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&5 +$as_echo "$gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&6; } + if test $gl_cv_test_INT32_MAX_LT_INTMAX_MAX = yes; then + INT32_MAX_LT_INTMAX_MAX=1; + else + INT32_MAX_LT_INTMAX_MAX=0; + fi + + + if test $APPLE_UNIVERSAL_BUILD = 0; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether INT64_MAX == LONG_MAX" >&5 +$as_echo_n "checking whether INT64_MAX == LONG_MAX... " >&6; } +if ${gl_cv_test_INT64_MAX_EQ_LONG_MAX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Work also in C++ mode. */ + #define __STDC_LIMIT_MACROS 1 + + /* Work if build is not clean. */ + #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H + + #include <limits.h> + #if HAVE_STDINT_H + #include <stdint.h> + #endif + + #if defined INT64_MAX + #define CONDITION (INT64_MAX == LONG_MAX) + #elif HAVE_LONG_LONG_INT + #define CONDITION (sizeof (long long int) == sizeof (long int)) + #else + #define CONDITION 0 + #endif + int test[CONDITION ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_test_INT64_MAX_EQ_LONG_MAX=yes +else + gl_cv_test_INT64_MAX_EQ_LONG_MAX=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&5 +$as_echo "$gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&6; } + if test $gl_cv_test_INT64_MAX_EQ_LONG_MAX = yes; then + INT64_MAX_EQ_LONG_MAX=1; + else + INT64_MAX_EQ_LONG_MAX=0; + fi + + + else + INT64_MAX_EQ_LONG_MAX=-1 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UINT32_MAX < UINTMAX_MAX" >&5 +$as_echo_n "checking whether UINT32_MAX < UINTMAX_MAX... " >&6; } +if ${gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Work also in C++ mode. */ + #define __STDC_LIMIT_MACROS 1 + + /* Work if build is not clean. */ + #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H + + #include <limits.h> + #if HAVE_STDINT_H + #include <stdint.h> + #endif + + #if defined UINT32_MAX && defined UINTMAX_MAX + #define CONDITION (UINT32_MAX < UINTMAX_MAX) + #elif HAVE_LONG_LONG_INT + #define CONDITION (sizeof (unsigned int) < sizeof (unsigned long long int)) + #else + #define CONDITION 0 + #endif + int test[CONDITION ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=yes +else + gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&5 +$as_echo "$gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&6; } + if test $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX = yes; then + UINT32_MAX_LT_UINTMAX_MAX=1; + else + UINT32_MAX_LT_UINTMAX_MAX=0; + fi + + + if test $APPLE_UNIVERSAL_BUILD = 0; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UINT64_MAX == ULONG_MAX" >&5 +$as_echo_n "checking whether UINT64_MAX == ULONG_MAX... " >&6; } +if ${gl_cv_test_UINT64_MAX_EQ_ULONG_MAX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Work also in C++ mode. */ + #define __STDC_LIMIT_MACROS 1 + + /* Work if build is not clean. */ + #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H + + #include <limits.h> + #if HAVE_STDINT_H + #include <stdint.h> + #endif + + #if defined UINT64_MAX + #define CONDITION (UINT64_MAX == ULONG_MAX) + #elif HAVE_LONG_LONG_INT + #define CONDITION (sizeof (unsigned long long int) == sizeof (unsigned long int)) + #else + #define CONDITION 0 + #endif + int test[CONDITION ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=yes +else + gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&5 +$as_echo "$gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&6; } + if test $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX = yes; then + UINT64_MAX_EQ_ULONG_MAX=1; + else + UINT64_MAX_EQ_ULONG_MAX=0; + fi + + + else + UINT64_MAX_EQ_ULONG_MAX=-1 + fi + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(double) can be used without linking with libm" >&5 +$as_echo_n "checking whether isnan(double) can be used without linking with libm... " >&6; } +if ${gl_cv_func_isnand_no_libm+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + #if __GNUC__ >= 4 + # undef isnand + # define isnand(x) __builtin_isnan ((double)(x)) + #else + # undef isnand + # define isnand(x) isnan ((double)(x)) + #endif + double x; +int +main () +{ +return isnand (x); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_isnand_no_libm=yes +else + gl_cv_func_isnand_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnand_no_libm" >&5 +$as_echo "$gl_cv_func_isnand_no_libm" >&6; } + + gl_func_isnand_no_libm=$gl_cv_func_isnand_no_libm + if test $gl_cv_func_isnand_no_libm = yes; then + +$as_echo "#define HAVE_ISNAND_IN_LIBC 1" >>confdefs.h + + fi + + if test $gl_func_isnand_no_libm != yes; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS isnand.$ac_objext" + + + + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) can be used without linking with libm" >&5 +$as_echo_n "checking whether isnan(float) can be used without linking with libm... " >&6; } +if ${gl_cv_func_isnanf_no_libm+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + #if __GNUC__ >= 4 + # undef isnanf + # define isnanf(x) __builtin_isnanf ((float)(x)) + #elif defined isnan + # undef isnanf + # define isnanf(x) isnan ((float)(x)) + #endif + float x; +int +main () +{ +return isnanf (x); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_isnanf_no_libm=yes +else + gl_cv_func_isnanf_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_no_libm" >&5 +$as_echo "$gl_cv_func_isnanf_no_libm" >&6; } + + if test $gl_cv_func_isnanf_no_libm = yes; then + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) works" >&5 +$as_echo_n "checking whether isnan(float) works... " >&6; } +if ${gl_cv_func_isnanf_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + case "$host_os" in + irix* | solaris*) gl_cv_func_isnanf_works="guessing no" ;; + mingw*) # Guess yes on mingw, no on MSVC. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __MINGW32__ + Known +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Known" >/dev/null 2>&1; then : + gl_cv_func_isnanf_works="guessing yes" +else + gl_cv_func_isnanf_works="guessing no" +fi +rm -f conftest* + + ;; + *) gl_cv_func_isnanf_works="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <math.h> +#if __GNUC__ >= 4 +# undef isnanf +# define isnanf(x) __builtin_isnanf ((float)(x)) +#elif defined isnan +# undef isnanf +# define isnanf(x) isnan ((float)(x)) +#endif +/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ +#ifdef __DECC +static float +NaN () +{ + static float zero = 0.0f; + return zero / zero; +} +#else +# define NaN() (0.0f / 0.0f) +#endif +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { unsigned int word[NWORDS]; float value; } memory_float; +int main() +{ + int result = 0; + + if (isnanf (1.0f / 0.0f)) + result |= 1; + + if (!isnanf (NaN ())) + result |= 2; + +#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT + /* The isnanf function should be immune against changes in the sign bit and + in the mantissa bits. The xor operation twiddles a bit that can only be + a sign bit or a mantissa bit. */ + if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0) + { + memory_float m; + + m.value = NaN (); + /* Set the bits below the exponent to 01111...111. */ + m.word[0] &= -1U << FLT_EXPBIT0_BIT; + m.word[0] |= 1U << (FLT_EXPBIT0_BIT - 1) - 1; + if (!isnanf (m.value)) + result |= 4; + } +#endif + + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_isnanf_works=yes +else + gl_cv_func_isnanf_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_works" >&5 +$as_echo "$gl_cv_func_isnanf_works" >&6; } + + fi + if test $gl_cv_func_isnanf_no_libm = yes \ + && { case "$gl_cv_func_isnanf_works" in + *yes) true;; + *) false;; + esac + }; then + gl_func_isnanf_no_libm=yes + +$as_echo "#define HAVE_ISNANF_IN_LIBC 1" >>confdefs.h + + else + gl_func_isnanf_no_libm=no + fi + + if test $gl_func_isnanf_no_libm != yes; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS isnanf.$ac_objext" + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'float'" >&5 +$as_echo_n "checking where to find the exponent in a 'float'... " >&6; } +if ${gl_cv_cc_float_expbit0+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + gl_cv_cc_float_expbit0="word 0 bit 23" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { float value; unsigned int word[NWORDS]; } memory_float; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (float x) +{ + memory_float m; + size_t i; + /* Clear it first, in case + sizeof (float) < sizeof (memory_float). */ + memset (&m, 0, sizeof (memory_float)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25f); + add_to_ored_words (0.5f); + add_to_ored_words (1.0f); + add_to_ored_words (2.0f); + add_to_ored_words (4.0f); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_cc_float_expbit0=`cat conftest.out` +else + gl_cv_cc_float_expbit0="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_expbit0" >&5 +$as_echo "$gl_cv_cc_float_expbit0" >&6; } + case "$gl_cv_cc_float_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define FLT_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define FLT_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(long double) can be used without linking with libm" >&5 +$as_echo_n "checking whether isnan(long double) can be used without linking with libm... " >&6; } +if ${gl_cv_func_isnanl_no_libm+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + #if __GNUC__ >= 4 + # undef isnanl + # define isnanl(x) __builtin_isnanl ((long double)(x)) + #elif defined isnan + # undef isnanl + # define isnanl(x) isnan ((long double)(x)) + #endif + long double x; +int +main () +{ +return isnanl (x); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_isnanl_no_libm=yes +else + gl_cv_func_isnanl_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_no_libm" >&5 +$as_echo "$gl_cv_func_isnanl_no_libm" >&6; } + + gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm + if test $gl_func_isnanl_no_libm = yes; then + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnanl works" >&5 +$as_echo_n "checking whether isnanl works... " >&6; } +if ${gl_cv_func_isnanl_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + case "$host_os" in + mingw*) # Guess yes on mingw, no on MSVC. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __MINGW32__ + Known +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Known" >/dev/null 2>&1; then : + gl_cv_func_isnanl_works="guessing yes" +else + gl_cv_func_isnanl_works="guessing no" +fi +rm -f conftest* + + ;; + *) gl_cv_func_isnanl_works="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <limits.h> +#include <math.h> +#if __GNUC__ >= 4 +# undef isnanl +# define isnanl(x) __builtin_isnanl ((long double)(x)) +#elif defined isnan +# undef isnanl +# define isnanl(x) isnan ((long double)(x)) +#endif +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { unsigned int word[NWORDS]; long double value; } + memory_long_double; +/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the + runtime type conversion. */ +#ifdef __sgi +static long double NaNl () +{ + double zero = 0.0; + return zero / zero; +} +#else +# define NaNl() (0.0L / 0.0L) +#endif +int main () +{ + int result = 0; + + if (!isnanl (NaNl ())) + result |= 1; + + { + memory_long_double m; + unsigned int i; + + /* The isnanl function should be immune against changes in the sign bit and + in the mantissa bits. The xor operation twiddles a bit that can only be + a sign bit or a mantissa bit (since the exponent never extends to + bit 31). */ + m.value = NaNl (); + m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); + for (i = 0; i < NWORDS; i++) + m.word[i] |= 1; + if (!isnanl (m.value)) + result |= 1; + } + +#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE +/* Representation of an 80-bit 'long double' as an initializer for a sequence + of 'unsigned int' words. */ +# ifdef WORDS_BIGENDIAN +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ + ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ + (unsigned int) (mantlo) << 16 \ + } +# else +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { mantlo, manthi, exponent } +# endif + { /* Quiet NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + if (!isnanl (x.value)) + result |= 2; + } + { + /* Signalling NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + if (!isnanl (x.value)) + result |= 2; + } + /* isnanl should return something even for noncanonical values. */ + { /* Pseudo-NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + if (isnanl (x.value) && !isnanl (x.value)) + result |= 4; + } + { /* Pseudo-Infinity. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + if (isnanl (x.value) && !isnanl (x.value)) + result |= 8; + } + { /* Pseudo-Zero. */ + static memory_long_double x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + if (isnanl (x.value) && !isnanl (x.value)) + result |= 16; + } + { /* Unnormalized number. */ + static memory_long_double x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + if (isnanl (x.value) && !isnanl (x.value)) + result |= 32; + } + { /* Pseudo-Denormal. */ + static memory_long_double x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + if (isnanl (x.value) && !isnanl (x.value)) + result |= 64; + } +#endif + + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_isnanl_works=yes +else + gl_cv_func_isnanl_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_works" >&5 +$as_echo "$gl_cv_func_isnanl_works" >&6; } + + case "$gl_cv_func_isnanl_works" in + *yes) ;; + *) gl_func_isnanl_no_libm=no ;; + esac + fi + if test $gl_func_isnanl_no_libm = yes; then + +$as_echo "#define HAVE_ISNANL_IN_LIBC 1" >>confdefs.h + + fi + + if test $gl_func_isnanl_no_libm != yes; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS isnanl.$ac_objext" + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'long double'" >&5 +$as_echo_n "checking where to find the exponent in a 'long double'... " >&6; } +if ${gl_cv_cc_long_double_expbit0+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + gl_cv_cc_long_double_expbit0="unknown" + case "$host_os" in + mingw*) # On native Windows (little-endian), we know the result + # in two cases: mingw, MSVC. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __MINGW32__ + Known +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Known" >/dev/null 2>&1; then : + gl_cv_cc_long_double_expbit0="word 2 bit 0" +fi +rm -f conftest* + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _MSC_VER + Known +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Known" >/dev/null 2>&1; then : + gl_cv_cc_long_double_expbit0="word 1 bit 20" +fi +rm -f conftest* + + ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { long double value; unsigned int word[NWORDS]; } + memory_long_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (long double x) +{ + memory_long_double m; + size_t i; + /* Clear it first, in case + sizeof (long double) < sizeof (memory_long_double). */ + memset (&m, 0, sizeof (memory_long_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25L); + add_to_ored_words (0.5L); + add_to_ored_words (1.0L); + add_to_ored_words (2.0L); + add_to_ored_words (4.0L); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_cc_long_double_expbit0=`cat conftest.out` +else + gl_cv_cc_long_double_expbit0="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_long_double_expbit0" >&5 +$as_echo "$gl_cv_cc_long_double_expbit0" >&6; } + case "$gl_cv_cc_long_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define LDBL_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define LDBL_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + + fi + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_langinfo_h='<'langinfo.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <langinfo.h>" >&5 +$as_echo_n "checking absolute name of <langinfo.h>... " >&6; } +if ${gl_cv_next_langinfo_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_langinfo_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <langinfo.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'langinfo.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_langinfo_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_langinfo_h + gl_cv_next_langinfo_h='"'$gl_header'"' + else + gl_cv_next_langinfo_h='<'langinfo.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_langinfo_h" >&5 +$as_echo "$gl_cv_next_langinfo_h" >&6; } + fi + NEXT_LANGINFO_H=$gl_cv_next_langinfo_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'langinfo.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_langinfo_h + fi + NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H=$gl_next_as_first_directive + + + + + + HAVE_LANGINFO_CODESET=0 + HAVE_LANGINFO_T_FMT_AMPM=0 + HAVE_LANGINFO_ALTMON=0 + HAVE_LANGINFO_ERA=0 + HAVE_LANGINFO_YESEXPR=0 + + if test $ac_cv_header_langinfo_h = yes; then + HAVE_LANGINFO_H=1 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines CODESET" >&5 +$as_echo_n "checking whether langinfo.h defines CODESET... " >&6; } +if ${gl_cv_header_langinfo_codeset+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <langinfo.h> +int a = CODESET; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_langinfo_codeset=yes +else + gl_cv_header_langinfo_codeset=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_codeset" >&5 +$as_echo "$gl_cv_header_langinfo_codeset" >&6; } + if test $gl_cv_header_langinfo_codeset = yes; then + HAVE_LANGINFO_CODESET=1 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines T_FMT_AMPM" >&5 +$as_echo_n "checking whether langinfo.h defines T_FMT_AMPM... " >&6; } +if ${gl_cv_header_langinfo_t_fmt_ampm+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <langinfo.h> +int a = T_FMT_AMPM; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_langinfo_t_fmt_ampm=yes +else + gl_cv_header_langinfo_t_fmt_ampm=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_t_fmt_ampm" >&5 +$as_echo "$gl_cv_header_langinfo_t_fmt_ampm" >&6; } + if test $gl_cv_header_langinfo_t_fmt_ampm = yes; then + HAVE_LANGINFO_T_FMT_AMPM=1 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines ALTMON_1" >&5 +$as_echo_n "checking whether langinfo.h defines ALTMON_1... " >&6; } +if ${gl_cv_header_langinfo_altmon+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <langinfo.h> +int a = ALTMON_1; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_langinfo_altmon=yes +else + gl_cv_header_langinfo_altmon=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_altmon" >&5 +$as_echo "$gl_cv_header_langinfo_altmon" >&6; } + if test $gl_cv_header_langinfo_altmon = yes; then + HAVE_LANGINFO_ALTMON=1 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines ERA" >&5 +$as_echo_n "checking whether langinfo.h defines ERA... " >&6; } +if ${gl_cv_header_langinfo_era+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <langinfo.h> +int a = ERA; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_langinfo_era=yes +else + gl_cv_header_langinfo_era=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_era" >&5 +$as_echo "$gl_cv_header_langinfo_era" >&6; } + if test $gl_cv_header_langinfo_era = yes; then + HAVE_LANGINFO_ERA=1 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines YESEXPR" >&5 +$as_echo_n "checking whether langinfo.h defines YESEXPR... " >&6; } +if ${gl_cv_header_langinfo_yesexpr+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <langinfo.h> +int a = YESEXPR; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_langinfo_yesexpr=yes +else + gl_cv_header_langinfo_yesexpr=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_yesexpr" >&5 +$as_echo "$gl_cv_header_langinfo_yesexpr" >&6; } + if test $gl_cv_header_langinfo_yesexpr = yes; then + HAVE_LANGINFO_YESEXPR=1 + fi + else + HAVE_LANGINFO_H=0 + fi + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the __inline keyword" >&5 +$as_echo_n "checking whether the compiler supports the __inline keyword... " >&6; } +if ${gl_cv_c___inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +typedef int foo_t; + static __inline foo_t foo (void) { return 0; } +int +main () +{ +return foo (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_c___inline=yes +else + gl_cv_c___inline=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c___inline" >&5 +$as_echo "$gl_cv_c___inline" >&6; } + if test $gl_cv_c___inline = yes; then + +$as_echo "#define HAVE___INLINE 1" >>confdefs.h + + fi + + + + + + LOCALCHARSET_TESTS_ENVIRONMENT= + + + + + + + + + + case "$host_os" in + solaris*) + +$as_echo "#define _LCONV_C99 1" >>confdefs.h + + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether locale.h conforms to POSIX:2001" >&5 +$as_echo_n "checking whether locale.h conforms to POSIX:2001... " >&6; } +if ${gl_cv_header_locale_h_posix2001+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <locale.h> + int x = LC_MESSAGES; + int y = sizeof (((struct lconv *) 0)->decimal_point); +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_locale_h_posix2001=yes +else + gl_cv_header_locale_h_posix2001=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_locale_h_posix2001" >&5 +$as_echo "$gl_cv_header_locale_h_posix2001" >&6; } + + + if test $ac_cv_header_xlocale_h = yes; then + HAVE_XLOCALE_H=1 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether locale.h defines locale_t" >&5 +$as_echo_n "checking whether locale.h defines locale_t... " >&6; } +if ${gl_cv_header_locale_has_locale_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <locale.h> + locale_t x; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_locale_has_locale_t=yes +else + gl_cv_header_locale_has_locale_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_locale_has_locale_t" >&5 +$as_echo "$gl_cv_header_locale_has_locale_t" >&6; } + if test $gl_cv_header_locale_has_locale_t = yes; then + gl_cv_header_locale_h_needs_xlocale_h=no + else + gl_cv_header_locale_h_needs_xlocale_h=yes + fi + else + HAVE_XLOCALE_H=0 + gl_cv_header_locale_h_needs_xlocale_h=no + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct lconv is properly defined" >&5 +$as_echo_n "checking whether struct lconv is properly defined... " >&6; } +if ${gl_cv_sys_struct_lconv_ok+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <locale.h> + struct lconv l; + int x = sizeof (l.decimal_point); + int y = sizeof (l.int_p_cs_precedes); +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_sys_struct_lconv_ok=yes +else + gl_cv_sys_struct_lconv_ok=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_lconv_ok" >&5 +$as_echo "$gl_cv_sys_struct_lconv_ok" >&6; } + if test $gl_cv_sys_struct_lconv_ok = no; then + REPLACE_STRUCT_LCONV=1 + fi + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_locale_h='<'locale.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <locale.h>" >&5 +$as_echo_n "checking absolute name of <locale.h>... " >&6; } +if ${gl_cv_next_locale_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <locale.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'locale.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_locale_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_locale_h + gl_cv_next_locale_h='"'$gl_header'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_locale_h" >&5 +$as_echo "$gl_cv_next_locale_h" >&6; } + fi + NEXT_LOCALE_H=$gl_cv_next_locale_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'locale.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_locale_h + fi + NEXT_AS_FIRST_DIRECTIVE_LOCALE_H=$gl_next_as_first_directive + + + + + + + + + + + + + + if test $REPLACE_STRUCT_LCONV = 1; then + REPLACE_LOCALECONV=1 + fi + + if test $REPLACE_LOCALECONV = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS localeconv.$ac_objext" + + + ac_fn_c_check_member "$LINENO" "struct lconv" "decimal_point" "ac_cv_member_struct_lconv_decimal_point" "#include <locale.h> +" +if test "x$ac_cv_member_struct_lconv_decimal_point" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_LCONV_DECIMAL_POINT 1 +_ACEOF + + +fi + + + fi + + + + + + GNULIB_LOCALECONV=1 + + + + + +$as_echo "#define GNULIB_TEST_LOCALECONV 1" >>confdefs.h + + + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS localtime-buffer.$ac_objext" + + + + if test "$gl_threads_api" = posix; then + # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the + # pthread_rwlock_* functions. + has_rwlock=false + ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include <pthread.h> +" +if test "x$ac_cv_type_pthread_rwlock_t" = xyes; then : + has_rwlock=true + +$as_echo "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h + +fi + + if $has_rwlock; then + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_rwlock_rdlock prefers a writer to a reader" >&5 +$as_echo_n "checking whether pthread_rwlock_rdlock prefers a writer to a reader... " >&6; } +if ${gl_cv_pthread_rwlock_rdlock_prefer_writer+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LIBS="$LIBS" + LIBS="$LIBS $LIBMULTITHREAD" + if test "$cross_compiling" = yes; then : + gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <errno.h> +#include <pthread.h> +#include <stdlib.h> +#include <unistd.h> + +#define SUCCEED() exit (0) +#define FAILURE() exit (1) +#define UNEXPECTED(n) (exit (10 + (n))) + +/* The main thread creates the waiting writer and the requesting reader threads + in the default way; this guarantees that they have the same priority. + We can reuse the main thread as first reader thread. */ + +static pthread_rwlock_t lock; +static pthread_t reader1; +static pthread_t writer; +static pthread_t reader2; +static pthread_t timer; +/* Used to pass control from writer to reader2 and from reader2 to timer, + as in a relay race. + Passing control from one running thread to another running thread + is most likely faster than to create the second thread. */ +static pthread_mutex_t baton; + +static void * +timer_func (void *ignored) +{ + /* Step 13 (can be before or after step 12): + The timer thread takes the baton, then waits a moment to make sure + it can tell whether the second reader thread is blocked at step 12. */ + if (pthread_mutex_lock (&baton)) + UNEXPECTED (13); + usleep (100000); + /* By the time we get here, it's clear that the second reader thread is + blocked at step 12. This is the desired behaviour. */ + SUCCEED (); +} + +static void * +reader2_func (void *ignored) +{ + int err; + + /* Step 8 (can be before or after step 7): + The second reader thread takes the baton, then waits a moment to make sure + the writer thread has reached step 7. */ + if (pthread_mutex_lock (&baton)) + UNEXPECTED (8); + usleep (100000); + /* Step 9: The second reader thread requests the lock. */ + err = pthread_rwlock_tryrdlock (&lock); + if (err == 0) + FAILURE (); + else if (err != EBUSY) + UNEXPECTED (9); + /* Step 10: Launch a timer, to test whether the next call blocks. */ + if (pthread_create (&timer, NULL, timer_func, NULL)) + UNEXPECTED (10); + /* Step 11: Release the baton. */ + if (pthread_mutex_unlock (&baton)) + UNEXPECTED (11); + /* Step 12: The second reader thread requests the lock. */ + err = pthread_rwlock_rdlock (&lock); + if (err == 0) + FAILURE (); + else + UNEXPECTED (12); +} + +static void * +writer_func (void *ignored) +{ + /* Step 4: Take the baton, so that the second reader thread does not go ahead + too early. */ + if (pthread_mutex_lock (&baton)) + UNEXPECTED (4); + /* Step 5: Create the second reader thread. */ + if (pthread_create (&reader2, NULL, reader2_func, NULL)) + UNEXPECTED (5); + /* Step 6: Release the baton. */ + if (pthread_mutex_unlock (&baton)) + UNEXPECTED (6); + /* Step 7: The writer thread requests the lock. */ + if (pthread_rwlock_wrlock (&lock)) + UNEXPECTED (7); + return NULL; +} + +int +main () +{ + reader1 = pthread_self (); + + /* Step 1: The main thread initializes the lock and the baton. */ + if (pthread_rwlock_init (&lock, NULL)) + UNEXPECTED (1); + if (pthread_mutex_init (&baton, NULL)) + UNEXPECTED (1); + /* Step 2: The main thread acquires the lock as a reader. */ + if (pthread_rwlock_rdlock (&lock)) + UNEXPECTED (2); + /* Step 3: Create the writer thread. */ + if (pthread_create (&writer, NULL, writer_func, NULL)) + UNEXPECTED (3); + /* Job done. Go to sleep. */ + for (;;) + { + sleep (1); + } +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_pthread_rwlock_rdlock_prefer_writer=yes +else + gl_cv_pthread_rwlock_rdlock_prefer_writer=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + LIBS="$save_LIBS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pthread_rwlock_rdlock_prefer_writer" >&5 +$as_echo "$gl_cv_pthread_rwlock_rdlock_prefer_writer" >&6; } + case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in + *yes) + +$as_echo "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h + + ;; + esac + + fi + # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <pthread.h> +int +main () +{ + +#if __FreeBSD__ == 4 +error "No, in FreeBSD 4.0 recursive mutexes actually don't work." +#elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ + && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) +error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." +#else +int x = (int)PTHREAD_MUTEX_RECURSIVE; +return !x; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +$as_echo "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + : + + + +cat >>confdefs.h <<_ACEOF +#define GNULIB_LOCK 1 +_ACEOF + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lseek detects pipes" >&5 +$as_echo_n "checking whether lseek detects pipes... " >&6; } +if ${gl_cv_func_lseek_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$host_os" in + mingw*) + gl_cv_func_lseek_pipe=no + ;; + *) + if test $cross_compiling = no; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <sys/types.h> /* for off_t */ +#include <stdio.h> /* for SEEK_CUR */ +#if HAVE_UNISTD_H +# include <unistd.h> +#else /* on Windows with MSVC */ +# include <io.h> +#endif + +int +main () +{ + + /* Exit with success only if stdin is seekable. */ + return lseek (0, (off_t)0, SEEK_CUR) < 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if test -s conftest$ac_exeext \ + && ./conftest$ac_exeext < conftest.$ac_ext \ + && test 1 = "`echo hi \ + | { ./conftest$ac_exeext; echo $?; cat >/dev/null; }`"; then + gl_cv_func_lseek_pipe=yes + else + gl_cv_func_lseek_pipe=no + fi + +else + gl_cv_func_lseek_pipe=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if defined __BEOS__ +/* BeOS mistakenly return 0 when trying to seek on pipes. */ + Choke me. +#endif +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_func_lseek_pipe=yes +else + gl_cv_func_lseek_pipe=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_lseek_pipe" >&5 +$as_echo "$gl_cv_func_lseek_pipe" >&6; } + if test $gl_cv_func_lseek_pipe = no; then + REPLACE_LSEEK=1 + +$as_echo "#define LSEEK_PIPE_BROKEN 1" >>confdefs.h + + fi + + + if test $WINDOWS_64_BIT_OFF_T = 1; then + REPLACE_LSEEK=1 + fi + + if test $REPLACE_LSEEK = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS lseek.$ac_objext" + + fi + + + + + + GNULIB_LSEEK=1 + + + + + +$as_echo "#define GNULIB_TEST_LSEEK 1" >>confdefs.h + + + + + + + + if test $ac_cv_func_lstat = yes; then + + case $host_os,$gl_cv_func_lstat_dereferences_slashed_symlink in + solaris* | *no) + REPLACE_LSTAT=1 + ;; + esac + else + HAVE_LSTAT=0 + fi + + if test $REPLACE_LSTAT = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS lstat.$ac_objext" + + : + fi + + + + + + GNULIB_LSTAT=1 + + + + + +$as_echo "#define GNULIB_TEST_LSTAT 1" >>confdefs.h + + + + + + + + + + if test $gl_cv_func_malloc_posix = yes; then + +$as_echo "#define HAVE_MALLOC_POSIX 1" >>confdefs.h + + else + REPLACE_MALLOC=1 + fi + + if test $REPLACE_MALLOC = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext" + + fi + + + + + + GNULIB_MALLOC_POSIX=1 + + + + + +$as_echo "#define GNULIB_TEST_MALLOC_POSIX 1" >>confdefs.h + + + + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_math_h='<'math.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <math.h>" >&5 +$as_echo_n "checking absolute name of <math.h>... " >&6; } +if ${gl_cv_next_math_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_math_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'math.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_math_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_math_h + gl_cv_next_math_h='"'$gl_header'"' + else + gl_cv_next_math_h='<'math.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_math_h" >&5 +$as_echo "$gl_cv_next_math_h" >&6; } + fi + NEXT_MATH_H=$gl_cv_next_math_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'math.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_math_h + fi + NEXT_AS_FIRST_DIRECTIVE_MATH_H=$gl_next_as_first_directive + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NAN macro works" >&5 +$as_echo_n "checking whether NAN macro works... " >&6; } +if ${gl_cv_header_math_nan_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> +int +main () +{ +/* Solaris 10 has a broken definition of NAN. Other platforms + fail to provide NAN, or provide it only in C99 mode; this + test only needs to fail when NAN is provided but wrong. */ + float f = 1.0f; +#ifdef NAN + f = NAN; +#endif + return f == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_math_nan_works=yes +else + gl_cv_header_math_nan_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_math_nan_works" >&5 +$as_echo "$gl_cv_header_math_nan_works" >&6; } + if test $gl_cv_header_math_nan_works = no; then + REPLACE_NAN=1 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether HUGE_VAL works" >&5 +$as_echo_n "checking whether HUGE_VAL works... " >&6; } +if ${gl_cv_header_math_huge_val_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> +int +main () +{ +/* Solaris 10 has a broken definition of HUGE_VAL. */ + double d = HUGE_VAL; + return d == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_math_huge_val_works=yes +else + gl_cv_header_math_huge_val_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_math_huge_val_works" >&5 +$as_echo "$gl_cv_header_math_huge_val_works" >&6; } + if test $gl_cv_header_math_huge_val_works = no; then + REPLACE_HUGE_VAL=1 + fi + + + + + + + + + + + + if test $ac_cv_func_mbrlen = no; then + HAVE_MBRLEN=0 + ac_fn_c_check_decl "$LINENO" "mbrlen" "ac_cv_have_decl_mbrlen" " +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> + +" +if test "x$ac_cv_have_decl_mbrlen" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_MBRLEN $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_mbrlen = yes; then + REPLACE_MBRLEN=1 + fi + else + if test $REPLACE_MBRTOWC = 1; then + REPLACE_MBRLEN=1 + fi + fi + + if test $HAVE_MBRLEN = 0 || test $REPLACE_MBRLEN = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbrlen.$ac_objext" + + + : + + fi + + + + + + GNULIB_MBRLEN=1 + + + + + +$as_echo "#define GNULIB_TEST_MBRLEN 1" >>confdefs.h + + + + + + + + + + + + + + if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 +$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; } +if ${gl_cv_func_mbrtowc_incomplete_state+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and OSF/1. + aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; + esac + if test $LOCALE_JA != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 2; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_incomplete_state=yes +else + gl_cv_func_mbrtowc_incomplete_state=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 +$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 +$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; } +if ${gl_cv_func_mbrtowc_sanitycheck+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8. + solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + /* This fails on Solaris 8: + mbrtowc returns 2, and sets wc to 0x00F0. + mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 6, &state) != 4 + && mbtowc (&wc, input + 3, 6) == 4) + return 2; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_sanitycheck=yes +else + gl_cv_func_mbrtowc_sanitycheck=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 +$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; } + + REPLACE_MBSTATE_T=0 + case "$gl_cv_func_mbrtowc_incomplete_state" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + case "$gl_cv_func_mbrtowc_sanitycheck" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + else + REPLACE_MBSTATE_T=1 + fi + + + + if test $ac_cv_func_mbrtowc = no; then + HAVE_MBRTOWC=0 + ac_fn_c_check_decl "$LINENO" "mbrtowc" "ac_cv_have_decl_mbrtowc" " +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> + +" +if test "x$ac_cv_have_decl_mbrtowc" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_MBRTOWC $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_mbrtowc = yes; then + REPLACE_MBRTOWC=1 + fi + else + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBRTOWC=1 + else + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL pwc argument" >&5 +$as_echo_n "checking whether mbrtowc handles a NULL pwc argument... " >&6; } +if ${gl_cv_func_mbrtowc_null_arg1+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris. + solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_null_arg1="guessing yes" ;; + esac + if test $LOCALE_FR_UTF8 != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + int result = 0; + + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + char input[] = "\303\237er"; + mbstate_t state; + wchar_t wc; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 5, &state); + if (ret != 2) + result |= 1; + if (!mbsinit (&state)) + result |= 2; + + memset (&state, '\0', sizeof (mbstate_t)); + ret = mbrtowc (NULL, input, 5, &state); + if (ret != 2) /* Solaris 7 fails here: ret is -1. */ + result |= 4; + if (!mbsinit (&state)) + result |= 8; + } + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_null_arg1=yes +else + gl_cv_func_mbrtowc_null_arg1=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg1" >&5 +$as_echo "$gl_cv_func_mbrtowc_null_arg1" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL string argument" >&5 +$as_echo_n "checking whether mbrtowc handles a NULL string argument... " >&6; } +if ${gl_cv_func_mbrtowc_null_arg2+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on OSF/1. + osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_null_arg2="guessing yes" ;; + esac + if test $LOCALE_FR_UTF8 != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + mbstate_t state; + wchar_t wc; + int ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + mbrtowc (&wc, NULL, 5, &state); + /* Check that wc was not modified. */ + if (wc != (wchar_t) 0xBADFACE) + return 2; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_null_arg2=yes +else + gl_cv_func_mbrtowc_null_arg2=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg2" >&5 +$as_echo "$gl_cv_func_mbrtowc_null_arg2" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc has a correct return value" >&5 +$as_echo_n "checking whether mbrtowc has a correct return value... " >&6; } +if ${gl_cv_func_mbrtowc_retval+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on HP-UX, Solaris, native Windows. + hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_retval="guessing yes" ;; + esac + if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \ + || { case "$host_os" in mingw*) true;; *) false;; esac; }; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + int result = 0; + int found_some_locale = 0; + /* This fails on Solaris. */ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + char input[] = "B\303\274\303\237er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrtowc (&wc, input + 2, 5, &state) != 1) + result |= 1; + } + found_some_locale = 1; + } + /* This fails on HP-UX 11.11. */ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrtowc (&wc, input + 2, 5, &state) != 2) + result |= 2; + } + found_some_locale = 1; + } + /* This fails on native Windows. */ + if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) + { + char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) + { + input[3] = '\0'; + if (mbrtowc (&wc, input + 4, 4, &state) != 1) + result |= 4; + } + found_some_locale = 1; + } + if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) + { + char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) + { + input[3] = '\0'; + if (mbrtowc (&wc, input + 4, 4, &state) != 1) + result |= 8; + } + found_some_locale = 1; + } + if (setlocale (LC_ALL, "Chinese_China.936") != NULL) + { + char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) + { + input[3] = '\0'; + if (mbrtowc (&wc, input + 4, 4, &state) != 1) + result |= 16; + } + found_some_locale = 1; + } + return (found_some_locale ? result : 77); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_retval=yes +else + if test $? != 77; then + gl_cv_func_mbrtowc_retval=no + fi + +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_retval" >&5 +$as_echo "$gl_cv_func_mbrtowc_retval" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc returns 0 when parsing a NUL character" >&5 +$as_echo_n "checking whether mbrtowc returns 0 when parsing a NUL character... " >&6; } +if ${gl_cv_func_mbrtowc_nul_retval+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8 and 9. + solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + /* This fails on Solaris 8 and 9. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "", 1, &state) != 0) + return 2; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_nul_retval=yes +else + gl_cv_func_mbrtowc_nul_retval=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_nul_retval" >&5 +$as_echo "$gl_cv_func_mbrtowc_nul_retval" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works on empty input" >&5 +$as_echo_n "checking whether mbrtowc works on empty input... " >&6; } +if ${gl_cv_func_mbrtowc_empty_input+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and glibc systems. + aix* | *-gnu* | gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; + *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; + esac + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <wchar.h> + static wchar_t wc; + static mbstate_t mbs; + int + main (void) + { + return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2; + } +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_empty_input=yes +else + gl_cv_func_mbrtowc_empty_input=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_empty_input" >&5 +$as_echo "$gl_cv_func_mbrtowc_empty_input" >&6; } + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C locale is free of encoding errors" >&5 +$as_echo_n "checking whether the C locale is free of encoding errors... " >&6; } +if ${gl_cv_C_locale_sans_EILSEQ+:} false; then : + $as_echo_n "(cached) " >&6 +else + + gl_cv_C_locale_sans_EILSEQ="guessing no" + + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on native Windows. + mingw*) gl_cv_C_locale_sans_EILSEQ="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + #include <locale.h> + #include <wchar.h> + +int +main () +{ + + int i; + char *locale = setlocale (LC_ALL, "C"); + if (! locale) + return 2; + for (i = CHAR_MIN; i <= CHAR_MAX; i++) + { + char c = i; + wchar_t wc; + mbstate_t mbs = { 0, }; + size_t ss = mbrtowc (&wc, &c, 1, &mbs); + if (1 < ss) + return 3; + } + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_C_locale_sans_EILSEQ=yes +else + gl_cv_C_locale_sans_EILSEQ=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_C_locale_sans_EILSEQ" >&5 +$as_echo "$gl_cv_C_locale_sans_EILSEQ" >&6; } + + case "$gl_cv_func_mbrtowc_null_arg1" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_NULL_ARG1_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_null_arg2" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_NULL_ARG2_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_retval" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_RETVAL_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_nul_retval" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_NUL_RETVAL_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_empty_input" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_EMPTY_INPUT_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case $gl_cv_C_locale_sans_EILSEQ in + *yes) ;; + *) +$as_echo "#define C_LOCALE_MAYBE_EILSEQ 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + fi + fi + + if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbrtowc.$ac_objext" + + + + : + + fi + + + + + + GNULIB_MBRTOWC=1 + + + + + +$as_echo "#define GNULIB_TEST_MBRTOWC 1" >>confdefs.h + + + + + + + + + + + + + + + if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 +$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; } +if ${gl_cv_func_mbrtowc_incomplete_state+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and OSF/1. + aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; + esac + if test $LOCALE_JA != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 2; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_incomplete_state=yes +else + gl_cv_func_mbrtowc_incomplete_state=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 +$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 +$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; } +if ${gl_cv_func_mbrtowc_sanitycheck+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8. + solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + /* This fails on Solaris 8: + mbrtowc returns 2, and sets wc to 0x00F0. + mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 6, &state) != 4 + && mbtowc (&wc, input + 3, 6) == 4) + return 2; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_sanitycheck=yes +else + gl_cv_func_mbrtowc_sanitycheck=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 +$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; } + + REPLACE_MBSTATE_T=0 + case "$gl_cv_func_mbrtowc_incomplete_state" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + case "$gl_cv_func_mbrtowc_sanitycheck" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + else + REPLACE_MBSTATE_T=1 + fi + + + + if test $ac_cv_func_mbsinit = no; then + HAVE_MBSINIT=0 + ac_fn_c_check_decl "$LINENO" "mbsinit" "ac_cv_have_decl_mbsinit" " +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> + +" +if test "x$ac_cv_have_decl_mbsinit" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_MBSINIT $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_mbsinit = yes; then + REPLACE_MBSINIT=1 + fi + else + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBSINIT=1 + else + case "$host_os" in + mingw*) REPLACE_MBSINIT=1 ;; + esac + fi + fi + + if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbsinit.$ac_objext" + + + : + + fi + + + + + + GNULIB_MBSINIT=1 + + + + + +$as_echo "#define GNULIB_TEST_MBSINIT 1" >>confdefs.h + + + + + + + if false; then + REPLACE_MBTOWC=1 + fi + + if test $REPLACE_MBTOWC = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbtowc.$ac_objext" + + + : + + fi + + + + + + GNULIB_MBTOWC=1 + + + + + +$as_echo "#define GNULIB_TEST_MBTOWC 1" >>confdefs.h + + + + + if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS memchr.$ac_objext" + + + for ac_header in bp-sym.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "bp-sym.h" "ac_cv_header_bp_sym_h" "$ac_includes_default" +if test "x$ac_cv_header_bp_sym_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_BP_SYM_H 1 +_ACEOF + +fi + +done + + + fi + + + + + + GNULIB_MEMCHR=1 + + + + + +$as_echo "#define GNULIB_TEST_MEMCHR 1" >>confdefs.h + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mkdir handles trailing slash" >&5 +$as_echo_n "checking whether mkdir handles trailing slash... " >&6; } +if ${gl_cv_func_mkdir_trailing_slash_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -rf conftest.dir + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; + # Guess yes on MSVC, no on mingw. + mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _MSC_VER + Known +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Known" >/dev/null 2>&1; then : + gl_cv_func_mkdir_trailing_slash_works="guessing yes" +else + gl_cv_func_mkdir_trailing_slash_works="guessing no" +fi +rm -f conftest* + + ;; + # If we don't know, assume the worst. + *) gl_cv_func_mkdir_trailing_slash_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# include <sys/types.h> +# include <sys/stat.h> + +int +main () +{ +return mkdir ("conftest.dir/", 0700); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mkdir_trailing_slash_works=yes +else + gl_cv_func_mkdir_trailing_slash_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -rf conftest.dir + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mkdir_trailing_slash_works" >&5 +$as_echo "$gl_cv_func_mkdir_trailing_slash_works" >&6; } + case "$gl_cv_func_mkdir_trailing_slash_works" in + *yes) ;; + *) + REPLACE_MKDIR=1 + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mkdir handles trailing dot" >&5 +$as_echo_n "checking whether mkdir handles trailing dot... " >&6; } +if ${gl_cv_func_mkdir_trailing_dot_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -rf conftest.dir + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_mkdir_trailing_dot_works="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_mkdir_trailing_dot_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# include <sys/types.h> +# include <sys/stat.h> + +int +main () +{ +return !mkdir ("conftest.dir/./", 0700); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mkdir_trailing_dot_works=yes +else + gl_cv_func_mkdir_trailing_dot_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -rf conftest.dir + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mkdir_trailing_dot_works" >&5 +$as_echo "$gl_cv_func_mkdir_trailing_dot_works" >&6; } + case "$gl_cv_func_mkdir_trailing_dot_works" in + *yes) ;; + *) + REPLACE_MKDIR=1 + +$as_echo "#define FUNC_MKDIR_DOT_BUG 1" >>confdefs.h + + ;; + esac + + if test $REPLACE_MKDIR = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mkdir.$ac_objext" + + fi + + + + + + + if test $ac_cv_func_mkostemp != yes; then + HAVE_MKOSTEMP=0 + fi + + if test $HAVE_MKOSTEMP = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mkostemp.$ac_objext" + + + + fi + + +cat >>confdefs.h <<_ACEOF +#define GNULIB_MKOSTEMP 1 +_ACEOF + + + + + + + + GNULIB_MKOSTEMP=1 + + + + + +$as_echo "#define GNULIB_TEST_MKOSTEMP 1" >>confdefs.h + + + + + + + + if test $ac_cv_func_mkstemp = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mkstemp" >&5 +$as_echo_n "checking for working mkstemp... " >&6; } +if ${gl_cv_func_working_mkstemp+:} false; then : + $as_echo_n "(cached) " >&6 +else + + mkdir conftest.mkstemp + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_working_mkstemp="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_working_mkstemp="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_working_mkstemp="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +int result = 0; + int i; + off_t large = (off_t) 4294967295u; + if (large < 0) + large = 2147483647; + umask (0); + for (i = 0; i < 70; i++) + { + char templ[] = "conftest.mkstemp/coXXXXXX"; + int (*mkstemp_function) (char *) = mkstemp; + int fd = mkstemp_function (templ); + if (fd < 0) + result |= 1; + else + { + struct stat st; + if (lseek (fd, large, SEEK_SET) != large) + result |= 2; + if (fstat (fd, &st) < 0) + result |= 4; + else if (st.st_mode & 0077) + result |= 8; + if (close (fd)) + result |= 16; + } + } + return result; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_working_mkstemp=yes +else + gl_cv_func_working_mkstemp=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -rf conftest.mkstemp + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_mkstemp" >&5 +$as_echo "$gl_cv_func_working_mkstemp" >&6; } + case "$gl_cv_func_working_mkstemp" in + *yes) ;; + *) + REPLACE_MKSTEMP=1 + ;; + esac + else + HAVE_MKSTEMP=0 + fi + + if test $HAVE_MKSTEMP = 0 || test $REPLACE_MKSTEMP = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mkstemp.$ac_objext" + + + + fi + + + + + + GNULIB_MKSTEMP=1 + + + + + +$as_echo "#define GNULIB_TEST_MKSTEMP 1" >>confdefs.h + + + + + + + + + REPLACE_MKTIME=0 + if test "$gl_cv_func_working_mktime" != yes; then + REPLACE_MKTIME=1 + +$as_echo "#define NEED_MKTIME_WORKING 1" >>confdefs.h + + fi + case "$host_os" in + mingw*) + REPLACE_MKTIME=1 + +$as_echo "#define NEED_MKTIME_WINDOWS 1" >>confdefs.h + + ;; + esac + + if test $REPLACE_MKTIME = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mktime.$ac_objext" + + : + fi + + + + + + GNULIB_MKTIME=1 + + + + + +$as_echo "#define GNULIB_TEST_MKTIME 1" >>confdefs.h + + + + + + + WANT_MKTIME_INTERNAL=0 + ac_fn_c_check_func "$LINENO" "__mktime_internal" "ac_cv_func___mktime_internal" +if test "x$ac_cv_func___mktime_internal" = xyes; then : + +$as_echo "#define mktime_internal __mktime_internal" >>confdefs.h + + +else + WANT_MKTIME_INTERNAL=1 + +$as_echo "#define NEED_MKTIME_INTERNAL 1" >>confdefs.h + + +fi + + + if test $WANT_MKTIME_INTERNAL = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mktime.$ac_objext" + + : + fi + + if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS msvc-inval.$ac_objext" + + fi + + if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS msvc-nothrow.$ac_objext" + + fi + + +cat >>confdefs.h <<_ACEOF +#define GNULIB_MSVC_NOTHROW 1 +_ACEOF + + + + + + + + if test $ac_cv_func_nl_langinfo = yes; then + # On Irix 6.5, YESEXPR is defined, but nl_langinfo(YESEXPR) is broken. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether YESEXPR works" >&5 +$as_echo_n "checking whether YESEXPR works... " >&6; } +if ${gl_cv_func_nl_langinfo_yesexpr_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + + case "$host_os" in + # Guess no on irix systems. + irix*) gl_cv_func_nl_langinfo_yesexpr_works="guessing no";; + # Guess yes elsewhere. + *) gl_cv_func_nl_langinfo_yesexpr_works="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <langinfo.h> + +int +main () +{ +return !*nl_langinfo(YESEXPR); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_nl_langinfo_yesexpr_works=yes +else + gl_cv_func_nl_langinfo_yesexpr_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_nl_langinfo_yesexpr_works" >&5 +$as_echo "$gl_cv_func_nl_langinfo_yesexpr_works" >&6; } + case $gl_cv_func_nl_langinfo_yesexpr_works in + *yes) FUNC_NL_LANGINFO_YESEXPR_WORKS=1 ;; + *) FUNC_NL_LANGINFO_YESEXPR_WORKS=0 ;; + esac + +cat >>confdefs.h <<_ACEOF +#define FUNC_NL_LANGINFO_YESEXPR_WORKS $FUNC_NL_LANGINFO_YESEXPR_WORKS +_ACEOF + + if test $HAVE_LANGINFO_CODESET = 1 \ + && test $HAVE_LANGINFO_T_FMT_AMPM = 1 \ + && test $HAVE_LANGINFO_ALTMON = 1 \ + && test $HAVE_LANGINFO_ERA = 1 \ + && test $FUNC_NL_LANGINFO_YESEXPR_WORKS = 1; then + : + else + REPLACE_NL_LANGINFO=1 + +$as_echo "#define REPLACE_NL_LANGINFO 1" >>confdefs.h + + fi + else + HAVE_NL_LANGINFO=0 + fi + + if test $HAVE_NL_LANGINFO = 0 || test $REPLACE_NL_LANGINFO = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS nl_langinfo.$ac_objext" + + fi + + + + + + GNULIB_NL_LANGINFO=1 + + + + + +$as_echo "#define GNULIB_TEST_NL_LANGINFO 1" >>confdefs.h + + + + + # This defines (or not) HAVE_TZNAME and HAVE_TM_ZONE. + + + + + + + +$as_echo "#define my_strftime nstrftime" >>confdefs.h + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for obstacks that work with any size object" >&5 +$as_echo_n "checking for obstacks that work with any size object... " >&6; } +if ${ac_cv_func_obstack+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include "obstack.h" + void *obstack_chunk_alloc (size_t n) { return 0; } + void obstack_chunk_free (void *p) { } + /* Check that an internal function returns size_t, not int. */ + size_t _obstack_memory_used (struct obstack *); + +int +main () +{ +struct obstack mem; + obstack_init (&mem); + obstack_free (&mem, 0); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_func_obstack=yes +else + ac_cv_func_obstack=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_obstack" >&5 +$as_echo "$ac_cv_func_obstack" >&6; } + if test "$ac_cv_func_obstack" = yes; then + +$as_echo "#define HAVE_OBSTACK 1" >>confdefs.h + + else + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS obstack.$ac_objext" + + fi + + + + + case "$host_os" in + mingw* | pw*) + REPLACE_OPEN=1 + ;; + *) + + if test "$gl_cv_macro_O_CLOEXEC" != yes; then + REPLACE_OPEN=1 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether open recognizes a trailing slash" >&5 +$as_echo_n "checking whether open recognizes a trailing slash... " >&6; } +if ${gl_cv_func_open_slash+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Assume that if we have lstat, we can also check symlinks. + if test $ac_cv_func_lstat = yes; then + touch conftest.tmp + ln -s conftest.tmp conftest.lnk + fi + if test "$cross_compiling" = yes; then : + + case "$host_os" in + freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) + gl_cv_func_open_slash="guessing no" ;; + *) + gl_cv_func_open_slash="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <fcntl.h> +#if HAVE_UNISTD_H +# include <unistd.h> +#endif +int main () +{ + int result = 0; +#if HAVE_LSTAT + if (open ("conftest.lnk/", O_RDONLY) != -1) + result |= 1; +#endif + if (open ("conftest.sl/", O_CREAT, 0600) >= 0) + result |= 2; + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_open_slash=yes +else + gl_cv_func_open_slash=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -f conftest.sl conftest.tmp conftest.lnk + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_open_slash" >&5 +$as_echo "$gl_cv_func_open_slash" >&6; } + case "$gl_cv_func_open_slash" in + *no) + +$as_echo "#define OPEN_TRAILING_SLASH_BUG 1" >>confdefs.h + + REPLACE_OPEN=1 + ;; + esac + ;; + esac + + + + if test $REPLACE_OPEN = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS open.$ac_objext" + + + + : + + fi + + + + + + GNULIB_OPEN=1 + + + + + +$as_echo "#define GNULIB_TEST_OPEN 1" >>confdefs.h + + + + + + + + + + ac_fn_c_check_member "$LINENO" "struct tm" "tm_zone" "ac_cv_member_struct_tm_tm_zone" "#include <sys/types.h> +#include <$ac_cv_struct_tm> + +" +if test "x$ac_cv_member_struct_tm_tm_zone" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_TM_TM_ZONE 1 +_ACEOF + + +fi + +if test "$ac_cv_member_struct_tm_tm_zone" = yes; then + +$as_echo "#define HAVE_TM_ZONE 1" >>confdefs.h + +else + ac_fn_c_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include <time.h> +" +if test "x$ac_cv_have_decl_tzname" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_TZNAME $ac_have_decl +_ACEOF + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5 +$as_echo_n "checking for tzname... " >&6; } +if ${ac_cv_var_tzname+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <time.h> +#if !HAVE_DECL_TZNAME +extern char *tzname[]; +#endif + +int +main () +{ +return tzname[0][0]; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_var_tzname=yes +else + ac_cv_var_tzname=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 +$as_echo "$ac_cv_var_tzname" >&6; } + if test $ac_cv_var_tzname = yes; then + +$as_echo "#define HAVE_TZNAME 1" >>confdefs.h + + fi +fi + + + + + + + + + + + + + + if test $REPLACE_POSIX_SPAWN = 1; then + REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_spawn_file_actions_addopen works" >&5 +$as_echo_n "checking whether posix_spawn_file_actions_addopen works... " >&6; } +if ${gl_cv_func_posix_spawn_file_actions_addopen_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + # Guess no on Solaris, yes otherwise. + case "$host_os" in + solaris*) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no";; + # Guess no on native Windows. + mingw*) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no" ;; + *) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <spawn.h> +#include <fcntl.h> +int main () +{ + posix_spawn_file_actions_t actions; + if (posix_spawn_file_actions_init (&actions) != 0) + return 1; + if (posix_spawn_file_actions_addopen (&actions, 10000000, "foo", 0, O_RDONLY) + == 0) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_posix_spawn_file_actions_addopen_works=yes +else + gl_cv_func_posix_spawn_file_actions_addopen_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_posix_spawn_file_actions_addopen_works" >&5 +$as_echo "$gl_cv_func_posix_spawn_file_actions_addopen_works" >&6; } + case "$gl_cv_func_posix_spawn_file_actions_addopen_works" in + *yes) ;; + *) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1 ;; + esac + fi + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS spawn_faction_addopen.$ac_objext" + + fi + + + + + + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1 + + + + + +$as_echo "#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1" >>confdefs.h + + + + + + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS spawn_faction_destroy.$ac_objext" + + fi + + + + + + GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY=1 + + + + + +$as_echo "#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1" >>confdefs.h + + + + + + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS spawn_faction_init.$ac_objext" + + fi + + + + + + GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT=1 + + + + + +$as_echo "#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1" >>confdefs.h + + + + + + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS spawnattr_destroy.$ac_objext" + + fi + + + + + + GNULIB_POSIX_SPAWNATTR_DESTROY=1 + + + + + +$as_echo "#define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1" >>confdefs.h + + + + + + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS spawnattr_init.$ac_objext" + + fi + + + + + + GNULIB_POSIX_SPAWNATTR_INIT=1 + + + + + +$as_echo "#define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1" >>confdefs.h + + + + + + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS spawnattr_setflags.$ac_objext" + + fi + + + + + + GNULIB_POSIX_SPAWNATTR_SETFLAGS=1 + + + + + +$as_echo "#define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1" >>confdefs.h + + + + + + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS spawnattr_setsigmask.$ac_objext" + + fi + + + + + + GNULIB_POSIX_SPAWNATTR_SETSIGMASK=1 + + + + + +$as_echo "#define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1" >>confdefs.h + + + + + + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS spawnp.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS spawni.$ac_objext" + + + for ac_header in paths.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "paths.h" "ac_cv_header_paths_h" "$ac_includes_default" +if test "x$ac_cv_header_paths_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_PATHS_H 1 +_ACEOF + +fi + +done + + for ac_func in confstr sched_setparam sched_setscheduler setegid seteuid vfork +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + fi + + + + + + GNULIB_POSIX_SPAWNP=1 + + + + + +$as_echo "#define GNULIB_TEST_POSIX_SPAWNP 1" >>confdefs.h + + + + + + if test $gl_cv_func_frexp_no_libm = yes; then + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexp works" >&5 +$as_echo_n "checking whether frexp works... " >&6; } +if ${gl_cv_func_frexp_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + case "$host_os" in + netbsd* | irix*) gl_cv_func_frexp_works="guessing no" ;; + mingw*) # Guess yes with MSVC, no with mingw. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _MSC_VER + Good +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Good" >/dev/null 2>&1; then : + gl_cv_func_frexp_works="guessing yes" +else + gl_cv_func_frexp_works="guessing no" +fi +rm -f conftest* + + ;; + *) gl_cv_func_frexp_works="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <math.h> +#include <string.h> +#if HAVE_DECL_ALARM +# include <signal.h> +# include <unistd.h> +#endif +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + ICC 10.0 has a bug when optimizing the expression -zero. + The expression -DBL_MIN * DBL_MIN does not work when cross-compiling + to PowerPC on Mac OS X 10.5. */ +#if defined __hpux || defined __sgi || defined __ICC +static double +compute_minus_zero (void) +{ + return -DBL_MIN * DBL_MIN; +} +# define minus_zero compute_minus_zero () +#else +double minus_zero = -0.0; +#endif +int main() +{ + int result = 0; + int i; + volatile double x; + double zero = 0.0; +#if HAVE_DECL_ALARM + /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite + number. Let the test fail in this case. */ + signal (SIGALRM, SIG_DFL); + alarm (5); +#endif + /* Test on denormalized numbers. */ + for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) + ; + if (x > 0.0) + { + int exp; + double y = frexp (x, &exp); + /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022. + On NetBSD: y = 0.75. Correct: y = 0.5. */ + if (y != 0.5) + result |= 1; + } + /* Test on infinite numbers. */ + x = 1.0 / zero; + { + int exp; + double y = frexp (x, &exp); + if (y != x) + result |= 2; + } + /* Test on negative zero. */ + x = minus_zero; + { + int exp; + double y = frexp (x, &exp); + if (memcmp (&y, &x, sizeof x)) + result |= 4; + } + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_frexp_works=yes +else + gl_cv_func_frexp_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_works" >&5 +$as_echo "$gl_cv_func_frexp_works" >&6; } + + case "$gl_cv_func_frexp_works" in + *yes) + +$as_echo "#define HAVE_FREXP_IN_LIBC 1" >>confdefs.h + + ;; + esac + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexp can be used without linking with libm" >&5 +$as_echo_n "checking whether ldexp can be used without linking with libm... " >&6; } +if ${gl_cv_func_ldexp_no_libm+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + double x; + int y; +int +main () +{ +return ldexp (x, y) < 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_ldexp_no_libm=yes +else + gl_cv_func_ldexp_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexp_no_libm" >&5 +$as_echo "$gl_cv_func_ldexp_no_libm" >&6; } + if test $gl_cv_func_ldexp_no_libm = yes; then + +$as_echo "#define HAVE_LDEXP_IN_LIBC 1" >>confdefs.h + + fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl() can be used without linking with libm" >&5 +$as_echo_n "checking whether frexpl() can be used without linking with libm... " >&6; } +if ${gl_cv_func_frexpl_no_libm+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + long double x; +int +main () +{ +int e; return frexpl (x, &e) > 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_frexpl_no_libm=yes +else + gl_cv_func_frexpl_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_no_libm" >&5 +$as_echo "$gl_cv_func_frexpl_no_libm" >&6; } + + if test $gl_cv_func_frexpl_no_libm = yes; then + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl works" >&5 +$as_echo_n "checking whether frexpl works... " >&6; } +if ${gl_cv_func_frexpl_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + aix | aix[3-6]* | beos* | darwin* | irix* | mingw* | pw*) + gl_cv_func_frexpl_works="guessing no";; + *) gl_cv_func_frexpl_works="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <math.h> +/* Override the values of <float.h>, like done in float.in.h. */ +#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +#endif +#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +#endif +#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP DBL_MIN_EXP +#endif +#if defined __sgi && (LDBL_MANT_DIG >= 106) +# if defined __GNUC__ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP DBL_MIN_EXP +# endif +#endif +extern +#ifdef __cplusplus +"C" +#endif +long double frexpl (long double, int *); +int main() +{ + int result = 0; + volatile long double x; + /* Test on finite numbers that fails on AIX 5.1. */ + x = 16.0L; + { + int exp = -9999; + frexpl (x, &exp); + if (exp != 5) + result |= 1; + } + /* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl + function returns an invalid (incorrectly normalized) value: it returns + y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 } + but the correct result is + 0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */ + x = 1.01L; + { + int exp = -9999; + long double y = frexpl (x, &exp); + if (!(exp == 1 && y == 0.505L)) + result |= 2; + } + /* Test on large finite numbers. This fails on BeOS at i = 16322, while + LDBL_MAX_EXP = 16384. + In the loop end test, we test x against Infinity, rather than comparing + i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP. */ + { + int i; + for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L) + { + int exp = -9999; + frexpl (x, &exp); + if (exp != i) + { + result |= 4; + break; + } + } + } + /* Test on denormalized numbers. */ + { + int i; + for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L) + ; + if (x > 0.0L) + { + int exp; + long double y = frexpl (x, &exp); + /* On machines with IEEE854 arithmetic: x = 1.68105e-4932, + exp = -16382, y = 0.5. On Mac OS X 10.5: exp = -16384, y = 0.5. */ + if (exp != LDBL_MIN_EXP - 1) + result |= 8; + } + } + /* Test on infinite numbers. */ + x = 1.0L / 0.0L; + { + int exp; + long double y = frexpl (x, &exp); + if (y != x) + result |= 16; + } + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_frexpl_works=yes +else + gl_cv_func_frexpl_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_works" >&5 +$as_echo "$gl_cv_func_frexpl_works" >&6; } + + case "$gl_cv_func_frexpl_works" in + *yes) gl_func_frexpl_no_libm=yes ;; + *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; + esac + else + gl_func_frexpl_no_libm=no + REPLACE_FREXPL=1 + fi + if test $gl_func_frexpl_no_libm = yes; then + +$as_echo "#define HAVE_FREXPL_IN_LIBC 1" >>confdefs.h + + ac_fn_c_check_decl "$LINENO" "frexpl" "ac_cv_have_decl_frexpl" "#include <math.h> +" +if test "x$ac_cv_have_decl_frexpl" = xyes; then : + +else + HAVE_DECL_FREXPL=0 +fi + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexpl() can be used without linking with libm" >&5 +$as_echo_n "checking whether ldexpl() can be used without linking with libm... " >&6; } +if ${gl_cv_func_ldexpl_no_libm+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + long double x; +int +main () +{ +return ldexpl (x, -1) > 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_ldexpl_no_libm=yes +else + gl_cv_func_ldexpl_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexpl_no_libm" >&5 +$as_echo "$gl_cv_func_ldexpl_no_libm" >&6; } + + if test $gl_cv_func_ldexpl_no_libm = yes; then + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexpl works" >&5 +$as_echo_n "checking whether ldexpl works... " >&6; } +if ${gl_cv_func_ldexpl_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + case "$host_os" in + aix | aix[3-6]*) gl_cv_func_ldexpl_works="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_ldexpl_works="guessing yes" ;; + *) gl_cv_func_ldexpl_works="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <math.h> +extern +#ifdef __cplusplus +"C" +#endif +long double ldexpl (long double, int); +int main() +{ + int result = 0; + { + volatile long double x = 1.0; + volatile long double y = ldexpl (x, -1); + if (y != 0.5L) + result |= 1; + } + { + volatile long double x = 1.73205L; + volatile long double y = ldexpl (x, 0); + if (y != x) + result |= 2; + } + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_ldexpl_works=yes +else + gl_cv_func_ldexpl_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexpl_works" >&5 +$as_echo "$gl_cv_func_ldexpl_works" >&6; } + + case "$gl_cv_func_ldexpl_works" in + *yes) + +$as_echo "#define HAVE_LDEXPL_IN_LIBC 1" >>confdefs.h + + ac_fn_c_check_decl "$LINENO" "ldexpl" "ac_cv_have_decl_ldexpl" "#include <math.h> +" +if test "x$ac_cv_have_decl_ldexpl" = xyes; then : + +else + HAVE_DECL_LDEXPL=0 +fi + + ;; + esac + fi + + + + if test $gl_cv_func_vfprintf_posix = no; then + + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS printf.$ac_objext" + + REPLACE_PRINTF=1 + +$as_echo "#define REPLACE_PRINTF_POSIX 1" >>confdefs.h + + : + + fi + + + + + + + GNULIB_PRINTF_POSIX=1 + + + + + +$as_echo "#define GNULIB_TEST_PRINTF_POSIX 1" >>confdefs.h + + + + + ac_fn_c_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include <errno.h> +" +if test "x$ac_cv_have_decl_program_invocation_name" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl +_ACEOF + + ac_fn_c_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include <errno.h> +" +if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl +_ACEOF + + + : + + + : + + + + + for ac_func in raise +do : + ac_fn_c_check_func "$LINENO" "raise" "ac_cv_func_raise" +if test "x$ac_cv_func_raise" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_RAISE 1 +_ACEOF + +fi +done + + if test $ac_cv_func_raise = no; then + HAVE_RAISE=0 + else + + + if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then + REPLACE_RAISE=1 + fi + + + + + + if test $gl_cv_type_sigset_t = yes; then + ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask" +if test "x$ac_cv_func_sigprocmask" = xyes; then : + gl_cv_func_sigprocmask=1 +fi + + fi + if test -z "$gl_cv_func_sigprocmask"; then + HAVE_POSIX_SIGNALBLOCKING=0 + fi + + if test $HAVE_POSIX_SIGNALBLOCKING = 0; then + : + fi + + fi + + if test $HAVE_RAISE = 0 || test $REPLACE_RAISE = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS raise.$ac_objext" + + : + fi + + + + + + GNULIB_RAISE=1 + + + + + +$as_echo "#define GNULIB_TEST_RAISE 1" >>confdefs.h + + + + + + + + for ac_header in random.h +do : + ac_fn_c_check_header_compile "$LINENO" "random.h" "ac_cv_header_random_h" "$ac_includes_default +" +if test "x$ac_cv_header_random_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_RANDOM_H 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_random_h = no; then + HAVE_RANDOM_H=0 + fi + + ac_fn_c_check_type "$LINENO" "struct random_data" "ac_cv_type_struct_random_data" "#include <stdlib.h> + #if HAVE_RANDOM_H + # include <random.h> + #endif + +" +if test "x$ac_cv_type_struct_random_data" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_RANDOM_DATA 1 +_ACEOF + + +else + HAVE_STRUCT_RANDOM_DATA=0 +fi + + + case "$host_os" in + aix* | osf*) + REPLACE_RANDOM_R=1 + ;; + *) + for ac_func in random_r +do : + ac_fn_c_check_func "$LINENO" "random_r" "ac_cv_func_random_r" +if test "x$ac_cv_func_random_r" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_RANDOM_R 1 +_ACEOF + +fi +done + + if test $ac_cv_func_random_r = no; then + HAVE_RANDOM_R=0 + fi + ;; + esac + + if test $HAVE_RANDOM_R = 0 || test $REPLACE_RANDOM_R = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS random_r.$ac_objext" + + + : + + fi + + + + + + GNULIB_RANDOM_R=1 + + + + + +$as_echo "#define GNULIB_TEST_RANDOM_R 1" >>confdefs.h + + + + + + + + for ac_func in rawmemchr +do : + ac_fn_c_check_func "$LINENO" "rawmemchr" "ac_cv_func_rawmemchr" +if test "x$ac_cv_func_rawmemchr" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_RAWMEMCHR 1 +_ACEOF + +fi +done + + if test $ac_cv_func_rawmemchr = no; then + HAVE_RAWMEMCHR=0 + fi + + if test $HAVE_RAWMEMCHR = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS rawmemchr.$ac_objext" + + : + fi + + + + + + GNULIB_RAWMEMCHR=1 + + + + + +$as_echo "#define GNULIB_TEST_RAWMEMCHR 1" >>confdefs.h + + + + : + + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libreadline-prefix was given. +if test "${with_libreadline_prefix+set}" = set; then : + withval=$with_libreadline_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && test ! -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBREADLINE= + LTLIBREADLINE= + INCREADLINE= + LIBREADLINE_PREFIX= + HAVE_LIBREADLINE= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='readline ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBREADLINE="${LTLIBREADLINE}${LTLIBREADLINE:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBREADLINE; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBREADLINE="${LTLIBREADLINE}${LTLIBREADLINE:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBREADLINE; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$found_so" + else + LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$found_a" + else + LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'readline'; then + LIBREADLINE_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'readline'; then + LIBREADLINE_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCREADLINE; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCREADLINE="${INCREADLINE}${INCREADLINE:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBREADLINE; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBREADLINE; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBREADLINE="${LTLIBREADLINE}${LTLIBREADLINE:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$dep" + LTLIBREADLINE="${LTLIBREADLINE}${LTLIBREADLINE:+ }$dep" + ;; + esac + done + fi + else + LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }-l$name" + LTLIBREADLINE="${LTLIBREADLINE}${LTLIBREADLINE:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBREADLINE="${LTLIBREADLINE}${LTLIBREADLINE:+ }-R$found_dir" + done + fi + + + + + + + am_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCREADLINE; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline" >&5 +$as_echo_n "checking for readline... " >&6; } +if ${gl_cv_lib_readline+:} false; then : + $as_echo_n "(cached) " >&6 +else + + gl_cv_lib_readline=no + am_save_LIBS="$LIBS" + for extra_lib in "" ncurses termcap curses; do + LIBS="$am_save_LIBS $LIBREADLINE" + if test -n "$extra_lib"; then + LIBS="$LIBS -l$extra_lib" + fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> +#include <readline/readline.h> +int +main () +{ +readline((char*)0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if test -n "$extra_lib"; then + gl_cv_lib_readline="yes, requires -l$extra_lib" + else + gl_cv_lib_readline="yes" + fi + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test "$gl_cv_lib_readline" != no; then + break + fi + done + LIBS="$am_save_LIBS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_lib_readline" >&5 +$as_echo "$gl_cv_lib_readline" >&6; } + + if test "$gl_cv_lib_readline" != no; then + +$as_echo "#define HAVE_READLINE 1" >>confdefs.h + + extra_lib=`echo "$gl_cv_lib_readline" | sed -n -e 's/yes, requires //p'` + if test -n "$extra_lib"; then + LIBREADLINE="$LIBREADLINE $extra_lib" + LTLIBREADLINE="$LTLIBREADLINE $extra_lib" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libreadline" >&5 +$as_echo_n "checking how to link with libreadline... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBREADLINE" >&5 +$as_echo "$LIBREADLINE" >&6; } + else + CPPFLAGS="$am_save_CPPFLAGS" + LIBREADLINE= + LTLIBREADLINE= + fi + + + + for ac_header in readline/readline.h readline/history.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + if test "$gl_cv_lib_readline" = no; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS readline.$ac_objext" + + + : + + fi + + + + if test $ac_cv_func_readlink = no; then + HAVE_READLINK=0 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether readlink signature is correct" >&5 +$as_echo_n "checking whether readlink signature is correct... " >&6; } +if ${gl_cv_decl_readlink_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <unistd.h> + /* Cause compilation failure if original declaration has wrong type. */ + ssize_t readlink (const char *, char *, size_t); +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_decl_readlink_works=yes +else + gl_cv_decl_readlink_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_readlink_works" >&5 +$as_echo "$gl_cv_decl_readlink_works" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether readlink handles trailing slash correctly" >&5 +$as_echo_n "checking whether readlink handles trailing slash correctly... " >&6; } +if ${gl_cv_func_readlink_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + # We have readlink, so assume ln -s works. + ln -s conftest.no-such conftest.link + ln -s conftest.link conftest.lnk2 + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_readlink_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_readlink_works="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_readlink_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <unistd.h> + +int +main () +{ +char buf[20]; + return readlink ("conftest.lnk2/", buf, sizeof buf) != -1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_readlink_works=yes +else + gl_cv_func_readlink_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -f conftest.link conftest.lnk2 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_readlink_works" >&5 +$as_echo "$gl_cv_func_readlink_works" >&6; } + case "$gl_cv_func_readlink_works" in + *yes) + if test "$gl_cv_decl_readlink_works" != yes; then + REPLACE_READLINK=1 + fi + ;; + *) + +$as_echo "#define READLINK_TRAILING_SLASH_BUG 1" >>confdefs.h + + REPLACE_READLINK=1 + ;; + esac + fi + + if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS readlink.$ac_objext" + + + : + + fi + + + + + + GNULIB_READLINK=1 + + + + + +$as_echo "#define GNULIB_TEST_READLINK 1" >>confdefs.h + + + + + + + if test $gl_cv_func_malloc_posix = yes; then + +$as_echo "#define HAVE_REALLOC_POSIX 1" >>confdefs.h + + else + REPLACE_REALLOC=1 + fi + + if test $REPLACE_REALLOC = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS realloc.$ac_objext" + + fi + + + + + + GNULIB_REALLOC_POSIX=1 + + + + + +$as_echo "#define GNULIB_TEST_REALLOC_POSIX 1" >>confdefs.h + + + + + +# Check whether --with-included-regex was given. +if test "${with_included_regex+set}" = set; then : + withval=$with_included_regex; +fi + + + case $with_included_regex in #( + yes|no) ac_use_included_regex=$with_included_regex + ;; + '') + # If the system regex support is good enough that it passes the + # following run test, then default to *not* using the included regex.c. + # If cross compiling, assume the test would fail and use the included + # regex.c. + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working re_compile_pattern" >&5 +$as_echo_n "checking for working re_compile_pattern... " >&6; } +if ${gl_cv_func_re_compile_pattern_working+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess no on native Windows. + mingw*) gl_cv_func_re_compile_pattern_working="guessing no" ;; + # Otherwise, assume it is not working. + *) gl_cv_func_re_compile_pattern_working="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <regex.h> + + #include <locale.h> + #include <limits.h> + #include <string.h> + + #if defined M_CHECK_ACTION || HAVE_DECL_ALARM + # include <signal.h> + # include <unistd.h> + #endif + + #if HAVE_MALLOC_H + # include <malloc.h> + #endif + + #ifdef M_CHECK_ACTION + /* Exit with distinguishable exit code. */ + static void sigabrt_no_core (int sig) { raise (SIGTERM); } + #endif + +int +main () +{ +int result = 0; + static struct re_pattern_buffer regex; + unsigned char folded_chars[UCHAR_MAX + 1]; + int i; + const char *s; + struct re_registers regs; + + /* Some builds of glibc go into an infinite loop on this + test. Use alarm to force death, and mallopt to avoid + malloc recursion in diagnosing the corrupted heap. */ +#if HAVE_DECL_ALARM + signal (SIGALRM, SIG_DFL); + alarm (2); +#endif +#ifdef M_CHECK_ACTION + signal (SIGABRT, sigabrt_no_core); + mallopt (M_CHECK_ACTION, 2); +#endif + + if (setlocale (LC_ALL, "en_US.UTF-8")) + { + { + /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html + This test needs valgrind to catch the bug on Debian + GNU/Linux 3.1 x86, but it might catch the bug better + on other platforms and it shouldn't hurt to try the + test here. */ + static char const pat[] = "insert into"; + static char const data[] = + "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; + re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE + | RE_ICASE); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern (pat, sizeof pat - 1, ®ex); + if (s) + result |= 1; + else if (re_search (®ex, data, sizeof data - 1, + 0, sizeof data - 1, ®s) + != -1) + result |= 1; + regfree (®ex); + } + + { + /* This test is from glibc bug 15078. + The test case is from Andreas Schwab in + <https://sourceware.org/ml/libc-alpha/2013-01/msg00967.html>. + */ + static char const pat[] = "[^x]x"; + static char const data[] = + /* <U1000><U103B><U103D><U1014><U103A><U102F><U1015><U103A> */ + "\xe1\x80\x80" + "\xe1\x80\xbb" + "\xe1\x80\xbd" + "\xe1\x80\x94" + "\xe1\x80\xba" + "\xe1\x80\xaf" + "\xe1\x80\x95" + "\xe1\x80\xba" + "x"; + re_set_syntax (0); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern (pat, sizeof pat - 1, ®ex); + if (s) + result |= 1; + else + { + i = re_search (®ex, data, sizeof data - 1, + 0, sizeof data - 1, 0); + if (i != 0 && i != 21) + result |= 1; + } + regfree (®ex); + } + + if (! setlocale (LC_ALL, "C")) + return 1; + } + + /* This test is from glibc bug 3957, reported by Andrew Mackey. */ + re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("a[^x]b", 6, ®ex); + if (s) + result |= 2; + /* This should fail, but succeeds for glibc-2.5. */ + else if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) + result |= 2; + + /* This regular expression is from Spencer ere test number 75 + in grep-2.3. */ + re_set_syntax (RE_SYNTAX_POSIX_EGREP); + memset (®ex, 0, sizeof regex); + for (i = 0; i <= UCHAR_MAX; i++) + folded_chars[i] = i; + regex.translate = folded_chars; + s = re_compile_pattern ("a[[:]:]]b\n", 11, ®ex); + /* This should fail with _Invalid character class name_ error. */ + if (!s) + result |= 4; + + /* Ensure that [b-a] is diagnosed as invalid, when + using RE_NO_EMPTY_RANGES. */ + re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("a[b-a]", 6, ®ex); + if (s == 0) + result |= 8; + + /* This should succeed, but does not for glibc-2.1.3. */ + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("{1", 2, ®ex); + if (s) + result |= 8; + + /* The following example is derived from a problem report + against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */ + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("[an\371]*n", 7, ®ex); + if (s) + result |= 8; + /* This should match, but does not for glibc-2.2.1. */ + else if (re_match (®ex, "an", 2, 0, ®s) != 2) + result |= 8; + + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("x", 1, ®ex); + if (s) + result |= 8; + /* glibc-2.2.93 does not work with a negative RANGE argument. */ + else if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) + result |= 8; + + /* The version of regex.c in older versions of gnulib + ignored RE_ICASE. Detect that problem too. */ + re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("x", 1, ®ex); + if (s) + result |= 16; + else if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) + result |= 16; + + /* Catch a bug reported by Vin Shelton in + https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html + */ + re_set_syntax (RE_SYNTAX_POSIX_BASIC + & ~RE_CONTEXT_INVALID_DUP + & ~RE_NO_EMPTY_RANGES); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("[[:alnum:]_-]\\\\+$", 16, ®ex); + if (s) + result |= 32; + + /* REG_STARTEND was added to glibc on 2004-01-15. + Reject older versions. */ + if (! REG_STARTEND) + result |= 64; + + /* Matching with the compiled form of this regexp would provoke + an assertion failure prior to glibc-2.28: + regexec.c:1375: pop_fail_stack: Assertion 'num >= 0' failed + With glibc-2.28, compilation fails and reports the invalid + back reference. */ + re_set_syntax (RE_SYNTAX_POSIX_EGREP); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("0|()0|\\1|0", 10, ®ex); + if (!s || strcmp (s, "Invalid back reference")) + result |= 64; + +#if 0 + /* It would be nice to reject hosts whose regoff_t values are too + narrow (including glibc on hosts with 64-bit ptrdiff_t and + 32-bit int), but we should wait until glibc implements this + feature. Otherwise, support for equivalence classes and + multibyte collation symbols would always be broken except + when compiling --without-included-regex. */ + if (sizeof (regoff_t) < sizeof (ptrdiff_t) + || sizeof (regoff_t) < sizeof (ssize_t)) + result |= 64; +#endif + + return result; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_re_compile_pattern_working=yes +else + gl_cv_func_re_compile_pattern_working=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_re_compile_pattern_working" >&5 +$as_echo "$gl_cv_func_re_compile_pattern_working" >&6; } + case "$gl_cv_func_re_compile_pattern_working" in #( + *yes) ac_use_included_regex=no;; #( + *no) ac_use_included_regex=yes;; + esac + ;; + *) as_fn_error $? "Invalid value for --with-included-regex: $with_included_regex" "$LINENO" 5 + ;; + esac + + if test $ac_use_included_regex = yes; then + +$as_echo "#define _REGEX_INCLUDE_LIMITS_H 1" >>confdefs.h + + +$as_echo "#define _REGEX_LARGE_OFFSETS 1" >>confdefs.h + + +$as_echo "#define re_syntax_options rpl_re_syntax_options" >>confdefs.h + + +$as_echo "#define re_set_syntax rpl_re_set_syntax" >>confdefs.h + + +$as_echo "#define re_compile_pattern rpl_re_compile_pattern" >>confdefs.h + + +$as_echo "#define re_compile_fastmap rpl_re_compile_fastmap" >>confdefs.h + + +$as_echo "#define re_search rpl_re_search" >>confdefs.h + + +$as_echo "#define re_search_2 rpl_re_search_2" >>confdefs.h + + +$as_echo "#define re_match rpl_re_match" >>confdefs.h + + +$as_echo "#define re_match_2 rpl_re_match_2" >>confdefs.h + + +$as_echo "#define re_set_registers rpl_re_set_registers" >>confdefs.h + + +$as_echo "#define re_comp rpl_re_comp" >>confdefs.h + + +$as_echo "#define re_exec rpl_re_exec" >>confdefs.h + + +$as_echo "#define regcomp rpl_regcomp" >>confdefs.h + + +$as_echo "#define regexec rpl_regexec" >>confdefs.h + + +$as_echo "#define regerror rpl_regerror" >>confdefs.h + + +$as_echo "#define regfree rpl_regfree" >>confdefs.h + + fi + + if test $ac_use_included_regex = yes; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS regex.$ac_objext" + + + + + + + + + for ac_header in libintl.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" +if test "x$ac_cv_header_libintl_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBINTL_H 1 +_ACEOF + +fi + +done + + + ac_fn_c_check_decl "$LINENO" "isblank" "ac_cv_have_decl_isblank" "#include <ctype.h> +" +if test "x$ac_cv_have_decl_isblank" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ISBLANK $ac_have_decl +_ACEOF + + + fi + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether rename honors trailing slash on destination" >&5 +$as_echo_n "checking whether rename honors trailing slash on destination... " >&6; } +if ${gl_cv_func_rename_slash_dst_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -rf conftest.f conftest.f1 conftest.f2 conftest.d1 conftest.d2 conftest.lnk + touch conftest.f && touch conftest.f1 && mkdir conftest.d1 || + as_fn_error $? "cannot create temporary files" "$LINENO" 5 + # Assume that if we have lstat, we can also check symlinks. + if test $ac_cv_func_lstat = yes; then + ln -s conftest.f conftest.lnk + fi + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rename_slash_dst_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_rename_slash_dst_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_rename_slash_dst_works="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_rename_slash_dst_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# include <stdio.h> +# include <stdlib.h> + +int +main () +{ +int result = 0; + if (rename ("conftest.f1", "conftest.f2/") == 0) + result |= 1; + if (rename ("conftest.d1", "conftest.d2/") != 0) + result |= 2; +#if HAVE_LSTAT + if (rename ("conftest.f", "conftest.lnk/") == 0) + result |= 4; +#endif + return result; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_rename_slash_dst_works=yes +else + gl_cv_func_rename_slash_dst_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -rf conftest.f conftest.f1 conftest.f2 conftest.d1 conftest.d2 conftest.lnk + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rename_slash_dst_works" >&5 +$as_echo "$gl_cv_func_rename_slash_dst_works" >&6; } + case "$gl_cv_func_rename_slash_dst_works" in + *yes) ;; + *) + REPLACE_RENAME=1 + +$as_echo "#define RENAME_TRAILING_SLASH_DEST_BUG 1" >>confdefs.h + + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether rename honors trailing slash on source" >&5 +$as_echo_n "checking whether rename honors trailing slash on source... " >&6; } +if ${gl_cv_func_rename_slash_src_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.d3 conftest.lnk + touch conftest.f && touch conftest.f1 && mkdir conftest.d1 || + as_fn_error $? "cannot create temporary files" "$LINENO" 5 + # Assume that if we have lstat, we can also check symlinks. + if test $ac_cv_func_lstat = yes; then + ln -s conftest.f conftest.lnk + fi + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rename_slash_src_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_rename_slash_src_works="guessing yes" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_rename_slash_src_works="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_rename_slash_src_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# include <stdio.h> +# include <stdlib.h> + +int +main () +{ +int result = 0; + if (rename ("conftest.f1/", "conftest.d3") == 0) + result |= 1; + if (rename ("conftest.d1/", "conftest.d2") != 0) + result |= 2; +#if HAVE_LSTAT + if (rename ("conftest.lnk/", "conftest.f") == 0) + result |= 4; +#endif + return result; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_rename_slash_src_works=yes +else + gl_cv_func_rename_slash_src_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.d3 conftest.lnk + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rename_slash_src_works" >&5 +$as_echo "$gl_cv_func_rename_slash_src_works" >&6; } + case "$gl_cv_func_rename_slash_src_works" in + *yes) ;; + *) + REPLACE_RENAME=1 + +$as_echo "#define RENAME_TRAILING_SLASH_SOURCE_BUG 1" >>confdefs.h + + ;; + esac + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether rename manages hard links correctly" >&5 +$as_echo_n "checking whether rename manages hard links correctly... " >&6; } +if ${gl_cv_func_rename_link_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test $ac_cv_func_link = yes; then + rm -rf conftest.f conftest.f1 conftest.f2 + if touch conftest.f conftest.f2 && ln conftest.f conftest.f1 && + set x `ls -i conftest.f conftest.f1` && test "" = ""; then + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rename_link_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_rename_link_works="guessing yes" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_rename_link_works="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_rename_link_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# include <errno.h> +# include <stdio.h> +# include <stdlib.h> +# include <unistd.h> + +int +main () +{ +int result = 0; + if (rename ("conftest.f", "conftest.f1")) + result |= 1; + if (unlink ("conftest.f1")) + result |= 2; + + /* Allow either the POSIX-required behavior, where the + previous rename kept conftest.f, or the (better) NetBSD + behavior, where it removed conftest.f. */ + if (rename ("conftest.f", "conftest.f") != 0 + && errno != ENOENT) + result |= 4; + + if (rename ("conftest.f1", "conftest.f1") == 0) + result |= 8; + if (rename ("conftest.f2", "conftest.f2") != 0) + result |= 16; + return result; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_rename_link_works=yes +else + gl_cv_func_rename_link_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + else + gl_cv_func_rename_link_works="guessing no" + fi + rm -rf conftest.f conftest.f1 conftest.f2 + else + gl_cv_func_rename_link_works=yes + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rename_link_works" >&5 +$as_echo "$gl_cv_func_rename_link_works" >&6; } + case "$gl_cv_func_rename_link_works" in + *yes) ;; + *) + REPLACE_RENAME=1 + +$as_echo "#define RENAME_HARD_LINK_BUG 1" >>confdefs.h + + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether rename manages existing destinations correctly" >&5 +$as_echo_n "checking whether rename manages existing destinations correctly... " >&6; } +if ${gl_cv_func_rename_dest_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -rf conftest.f conftest.d1 conftest.d2 + touch conftest.f && mkdir conftest.d1 conftest.d2 || + as_fn_error $? "cannot create temporary files" "$LINENO" 5 + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rename_dest_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_rename_dest_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_rename_dest_works="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_rename_dest_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# include <stdio.h> +# include <stdlib.h> + +int +main () +{ +int result = 0; + if (rename ("conftest.d1", "conftest.d2") != 0) + result |= 1; + if (rename ("conftest.d2", "conftest.f") == 0) + result |= 2; + return result; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_rename_dest_works=yes +else + gl_cv_func_rename_dest_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -rf conftest.f conftest.d1 conftest.d2 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rename_dest_works" >&5 +$as_echo "$gl_cv_func_rename_dest_works" >&6; } + case "$gl_cv_func_rename_dest_works" in + *yes) ;; + *) + REPLACE_RENAME=1 + +$as_echo "#define RENAME_DEST_EXISTS_BUG 1" >>confdefs.h + + ;; + esac + + if test $REPLACE_RENAME = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS rename.$ac_objext" + + fi + + + + + + GNULIB_RENAME=1 + + + + + +$as_echo "#define GNULIB_TEST_RENAME 1" >>confdefs.h + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether rmdir works" >&5 +$as_echo_n "checking whether rmdir works... " >&6; } +if ${gl_cv_func_rmdir_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + mkdir conftest.dir + touch conftest.file + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rmdir_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_rmdir_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_rmdir_works="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_rmdir_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> + #include <errno.h> + #if HAVE_UNISTD_H + # include <unistd.h> + #else /* on Windows with MSVC */ + # include <direct.h> + #endif + +int +main () +{ +int result = 0; + if (!rmdir ("conftest.file/")) + result |= 1; + else if (errno != ENOTDIR) + result |= 2; + if (!rmdir ("conftest.dir/./")) + result |= 4; + return result; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_rmdir_works=yes +else + gl_cv_func_rmdir_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -rf conftest.dir conftest.file +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rmdir_works" >&5 +$as_echo "$gl_cv_func_rmdir_works" >&6; } + case "$gl_cv_func_rmdir_works" in + *yes) ;; + *) + REPLACE_RMDIR=1 + ;; + esac + + if test $REPLACE_RMDIR = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS rmdir.$ac_objext" + + fi + + + + + + GNULIB_RMDIR=1 + + + + + +$as_echo "#define GNULIB_TEST_RMDIR 1" >>confdefs.h + + + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <sched.h> + struct sched_param a; + int b[] = { SCHED_FIFO, SCHED_RR, SCHED_OTHER }; + pid_t t1; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + SCHED_H='' +else + SCHED_H='sched.h' + for ac_header in sched.h +do : + ac_fn_c_check_header_compile "$LINENO" "sched.h" "ac_cv_header_sched_h" "#if HAVE_SYS_CDEFS_H + #include <sys/cdefs.h> + #endif + +" +if test "x$ac_cv_header_sched_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SCHED_H 1 +_ACEOF + +fi + +done + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_sched_h='<'sched.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sched.h>" >&5 +$as_echo_n "checking absolute name of <sched.h>... " >&6; } +if ${gl_cv_next_sched_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sched.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'sched.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_sched_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_sched_h + gl_cv_next_sched_h='"'$gl_header'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sched_h" >&5 +$as_echo "$gl_cv_next_sched_h" >&6; } + fi + NEXT_SCHED_H=$gl_cv_next_sched_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'sched.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_sched_h + fi + NEXT_AS_FIRST_DIRECTIVE_SCHED_H=$gl_next_as_first_directive + + + + + + if test "$ac_cv_header_sched_h" = yes; then + HAVE_SCHED_H=1 + else + HAVE_SCHED_H=0 + fi + + + if test "$HAVE_SCHED_H" = 1; then + ac_fn_c_check_type "$LINENO" "struct sched_param" "ac_cv_type_struct_sched_param" "#if HAVE_SYS_CDEFS_H + #include <sys/cdefs.h> + #endif + #include <sched.h> + +" +if test "x$ac_cv_type_struct_sched_param" = xyes; then : + HAVE_STRUCT_SCHED_PARAM=1 +else + HAVE_STRUCT_SCHED_PARAM=0 +fi + + else + HAVE_STRUCT_SCHED_PARAM=0 + case "$host_os" in + os2*) + ac_fn_c_check_type "$LINENO" "struct sched_param" "ac_cv_type_struct_sched_param" "#include <spawn.h> +" +if test "x$ac_cv_type_struct_sched_param" = xyes; then : + HAVE_STRUCT_SCHED_PARAM=1 +fi + + ;; + vms) + ac_fn_c_check_type "$LINENO" "struct sched_param" "ac_cv_type_struct_sched_param" "#include <pthread.h> +" +if test "x$ac_cv_type_struct_sched_param" = xyes; then : + HAVE_STRUCT_SCHED_PARAM=1 +fi + + ;; + esac + fi + + + if test "$ac_cv_header_sys_cdefs_h" = yes; then + HAVE_SYS_CDEFS_H=1 + else + HAVE_SYS_CDEFS_H=0 + fi + + + + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + if test -n "$SCHED_H"; then + GL_GENERATE_SCHED_H_TRUE= + GL_GENERATE_SCHED_H_FALSE='#' +else + GL_GENERATE_SCHED_H_TRUE='#' + GL_GENERATE_SCHED_H_FALSE= +fi + + + + + + + + if test $ac_cv_func_secure_getenv = no; then + HAVE_SECURE_GETENV=0 + fi + + if test $HAVE_SECURE_GETENV = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS secure_getenv.$ac_objext" + + + for ac_func in __secure_getenv +do : + ac_fn_c_check_func "$LINENO" "__secure_getenv" "ac_cv_func___secure_getenv" +if test "x$ac_cv_func___secure_getenv" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE___SECURE_GETENV 1 +_ACEOF + +fi +done + + if test $ac_cv_func___secure_getenv = no; then + for ac_func in issetugid +do : + ac_fn_c_check_func "$LINENO" "issetugid" "ac_cv_func_issetugid" +if test "x$ac_cv_func_issetugid" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ISSETUGID 1 +_ACEOF + +fi +done + + fi + + + fi + + + + + + GNULIB_SECURE_GETENV=1 + + + + + +$as_echo "#define GNULIB_TEST_SECURE_GETENV 1" >>confdefs.h + + + + + + if test "$with_selinux" != no; then + for ac_header in selinux/selinux.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "selinux/selinux.h" "ac_cv_header_selinux_selinux_h" "$ac_includes_default" +if test "x$ac_cv_header_selinux_selinux_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SELINUX_SELINUX_H 1 +_ACEOF + +fi + +done + + + if test "$ac_cv_header_selinux_selinux_h" = yes; then + # We do have <selinux/selinux.h>, so do compile getfilecon.c + # and arrange to use its wrappers. + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_selinux_selinux_h='<'selinux/selinux.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <selinux/selinux.h>" >&5 +$as_echo_n "checking absolute name of <selinux/selinux.h>... " >&6; } +if ${gl_cv_next_selinux_selinux_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_selinux_selinux_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <selinux/selinux.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'selinux/selinux.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_selinux_selinux_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_selinux_selinux_h + gl_cv_next_selinux_selinux_h='"'$gl_header'"' + else + gl_cv_next_selinux_selinux_h='<'selinux/selinux.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_selinux_selinux_h" >&5 +$as_echo "$gl_cv_next_selinux_selinux_h" >&6; } + fi + NEXT_SELINUX_SELINUX_H=$gl_cv_next_selinux_selinux_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'selinux/selinux.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_selinux_selinux_h + fi + NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H=$gl_next_as_first_directive + + + + + +$as_echo "#define getfilecon rpl_getfilecon" >>confdefs.h + + +$as_echo "#define lgetfilecon rpl_lgetfilecon" >>confdefs.h + + +$as_echo "#define fgetfilecon rpl_fgetfilecon" >>confdefs.h + + fi + + case "$ac_cv_search_setfilecon:$ac_cv_header_selinux_selinux_h" in + no:*) # already warned + ;; + *:no) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libselinux was found but selinux/selinux.h is missing." >&5 +$as_echo "$as_me: WARNING: libselinux was found but selinux/selinux.h is missing." >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: GNU recutils will be compiled without SELinux support." >&5 +$as_echo "$as_me: WARNING: GNU recutils will be compiled without SELinux support." >&2;} + esac + else + # Do as if <selinux/selinux.h> does not exist, even if + # AC_CHECK_HEADERS_ONCE has already determined that it exists. + $as_echo "#define HAVE_SELINUX_SELINUX_H 0" >>confdefs.h + + fi + + + + if test "$with_selinux" != no; then + for ac_header in selinux/context.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "selinux/context.h" "ac_cv_header_selinux_context_h" "$ac_includes_default" +if test "x$ac_cv_header_selinux_context_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SELINUX_CONTEXT_H 1 +_ACEOF + SELINUX_CONTEXT_H= +else + SELINUX_CONTEXT_H=selinux/context.h +fi + +done + + else + SELINUX_CONTEXT_H=selinux/context.h + fi + + if test -n "$SELINUX_CONTEXT_H"; then + GL_GENERATE_SELINUX_CONTEXT_H_TRUE= + GL_GENERATE_SELINUX_CONTEXT_H_FALSE='#' +else + GL_GENERATE_SELINUX_CONTEXT_H_TRUE='#' + GL_GENERATE_SELINUX_CONTEXT_H_FALSE= +fi + + + if test "$with_selinux" != no && test "$ac_cv_header_selinux_selinux_h" = yes; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getfilecon.$ac_objext" + + fi + + + if test $ac_cv_func_setenv = no; then + HAVE_SETENV=0 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether setenv validates arguments" >&5 +$as_echo_n "checking whether setenv validates arguments... " >&6; } +if ${gl_cv_func_setenv_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_setenv_works="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_setenv_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <stdlib.h> + #include <errno.h> + #include <string.h> + +int +main () +{ + + int result = 0; + { + if (setenv ("", "", 0) != -1) + result |= 1; + else if (errno != EINVAL) + result |= 2; + } + { + if (setenv ("a", "=", 1) != 0) + result |= 4; + else if (strcmp (getenv ("a"), "=") != 0) + result |= 8; + } + return result; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_setenv_works=yes +else + gl_cv_func_setenv_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setenv_works" >&5 +$as_echo "$gl_cv_func_setenv_works" >&6; } + case "$gl_cv_func_setenv_works" in + *yes) ;; + *) + REPLACE_SETENV=1 + ;; + esac + fi + + if test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS setenv.$ac_objext" + + fi + + + + + + GNULIB_SETENV=1 + + + + + +$as_echo "#define GNULIB_TEST_SETENV 1" >>confdefs.h + + + + + + + + + + if test $ac_cv_func_sigaction = yes; then + ac_fn_c_check_member "$LINENO" "struct sigaction" "sa_sigaction" "ac_cv_member_struct_sigaction_sa_sigaction" "#include <signal.h> +" +if test "x$ac_cv_member_struct_sigaction_sa_sigaction" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +_ACEOF + + +fi + + if test $ac_cv_member_struct_sigaction_sa_sigaction = no; then + HAVE_STRUCT_SIGACTION_SA_SIGACTION=0 + fi + else + HAVE_SIGACTION=0 + fi + + if test $HAVE_SIGACTION = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS sigaction.$ac_objext" + + + + + + + + ac_fn_c_check_type "$LINENO" "siginfo_t" "ac_cv_type_siginfo_t" " +#include <signal.h> + +" +if test "x$ac_cv_type_siginfo_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_SIGINFO_T 1 +_ACEOF + + +fi + + if test $ac_cv_type_siginfo_t = no; then + HAVE_SIGINFO_T=0 + fi + + fi + + + + + + GNULIB_SIGACTION=1 + + + + + +$as_echo "#define GNULIB_TEST_SIGACTION 1" >>confdefs.h + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_signal_h='<'signal.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <signal.h>" >&5 +$as_echo_n "checking absolute name of <signal.h>... " >&6; } +if ${gl_cv_next_signal_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <signal.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'signal.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_signal_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_signal_h + gl_cv_next_signal_h='"'$gl_header'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_signal_h" >&5 +$as_echo "$gl_cv_next_signal_h" >&6; } + fi + NEXT_SIGNAL_H=$gl_cv_next_signal_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'signal.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_signal_h + fi + NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H=$gl_next_as_first_directive + + + + + +# AIX declares sig_atomic_t to already include volatile, and C89 compilers +# then choke on 'volatile sig_atomic_t'. C99 requires that it compile. + ac_fn_c_check_type "$LINENO" "volatile sig_atomic_t" "ac_cv_type_volatile_sig_atomic_t" " +#include <signal.h> + +" +if test "x$ac_cv_type_volatile_sig_atomic_t" = xyes; then : + +else + HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0 +fi + + + + + + + + ac_fn_c_check_type "$LINENO" "sighandler_t" "ac_cv_type_sighandler_t" " +#include <signal.h> + +" +if test "x$ac_cv_type_sighandler_t" = xyes; then : + +else + HAVE_SIGHANDLER_T=0 +fi + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for signbit macro" >&5 +$as_echo_n "checking for signbit macro... " >&6; } +if ${gl_cv_func_signbit+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_signbit="guessing yes" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_signbit="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_signbit="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <math.h> +/* If signbit is defined as a function, don't use it, since calling it for + 'float' or 'long double' arguments would involve conversions. + If signbit is not declared at all but exists as a library function, don't + use it, since the prototype may not match. + If signbit is not declared at all but exists as a compiler built-in, don't + use it, since it's preferable to use __builtin_signbit* (no warnings, + no conversions). */ +#ifndef signbit +# error "signbit should be a macro" +#endif +#include <string.h> + +/* Global variables. + Needed because GCC 4 constant-folds __builtin_signbitl (literal) + but cannot constant-fold __builtin_signbitl (variable). */ +float vf; +double vd; +long double vl; +int main () +{ +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -p0f and -p0d instead. */ +float p0f = 0.0f; +float m0f = -p0f; +double p0d = 0.0; +double m0d = -p0d; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use another constant expression instead. + But that expression does not work on other platforms, such as when + cross-compiling to PowerPC on Mac OS X 10.5. */ +long double p0l = 0.0L; +#if defined __hpux || defined __sgi +long double m0l = -LDBL_MIN * LDBL_MIN; +#else +long double m0l = -p0l; +#endif + int result = 0; + if (signbit (vf)) /* link check */ + vf++; + { + float plus_inf = 1.0f / p0f; + float minus_inf = -1.0f / p0f; + if (!(!signbit (255.0f) + && signbit (-255.0f) + && !signbit (p0f) + && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) + && !signbit (plus_inf) + && signbit (minus_inf))) + result |= 1; + } + if (signbit (vd)) /* link check */ + vd++; + { + double plus_inf = 1.0 / p0d; + double minus_inf = -1.0 / p0d; + if (!(!signbit (255.0) + && signbit (-255.0) + && !signbit (p0d) + && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) + && !signbit (plus_inf) + && signbit (minus_inf))) + result |= 2; + } + if (signbit (vl)) /* link check */ + vl++; + { + long double plus_inf = 1.0L / p0l; + long double minus_inf = -1.0L / p0l; + if (signbit (255.0L)) + result |= 4; + if (!signbit (-255.0L)) + result |= 4; + if (signbit (p0l)) + result |= 8; + if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l))) + result |= 16; + if (signbit (plus_inf)) + result |= 32; + if (!signbit (minus_inf)) + result |= 64; + } + return result; +} + + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_signbit=yes +else + gl_cv_func_signbit=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_signbit" >&5 +$as_echo "$gl_cv_func_signbit" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for signbit compiler built-ins" >&5 +$as_echo_n "checking for signbit compiler built-ins... " >&6; } +if ${gl_cv_func_signbit_gcc+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_signbit_gcc="guessing yes" ;; + # Guess yes on mingw, no on MSVC. + mingw*) if test -n "$GCC"; then + gl_cv_func_signbit_gcc="guessing yes" + else + gl_cv_func_signbit_gcc="guessing no" + fi + ;; + # If we don't know, assume the worst. + *) gl_cv_func_signbit_gcc="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if __GNUC__ >= 4 +# define signbit(x) \ + (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ + sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ + __builtin_signbitf (x)) +#else +# error "signbit should be three compiler built-ins" +#endif +#include <string.h> + +/* Global variables. + Needed because GCC 4 constant-folds __builtin_signbitl (literal) + but cannot constant-fold __builtin_signbitl (variable). */ +float vf; +double vd; +long double vl; +int main () +{ +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -p0f and -p0d instead. */ +float p0f = 0.0f; +float m0f = -p0f; +double p0d = 0.0; +double m0d = -p0d; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use another constant expression instead. + But that expression does not work on other platforms, such as when + cross-compiling to PowerPC on Mac OS X 10.5. */ +long double p0l = 0.0L; +#if defined __hpux || defined __sgi +long double m0l = -LDBL_MIN * LDBL_MIN; +#else +long double m0l = -p0l; +#endif + int result = 0; + if (signbit (vf)) /* link check */ + vf++; + { + float plus_inf = 1.0f / p0f; + float minus_inf = -1.0f / p0f; + if (!(!signbit (255.0f) + && signbit (-255.0f) + && !signbit (p0f) + && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) + && !signbit (plus_inf) + && signbit (minus_inf))) + result |= 1; + } + if (signbit (vd)) /* link check */ + vd++; + { + double plus_inf = 1.0 / p0d; + double minus_inf = -1.0 / p0d; + if (!(!signbit (255.0) + && signbit (-255.0) + && !signbit (p0d) + && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) + && !signbit (plus_inf) + && signbit (minus_inf))) + result |= 2; + } + if (signbit (vl)) /* link check */ + vl++; + { + long double plus_inf = 1.0L / p0l; + long double minus_inf = -1.0L / p0l; + if (signbit (255.0L)) + result |= 4; + if (!signbit (-255.0L)) + result |= 4; + if (signbit (p0l)) + result |= 8; + if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l))) + result |= 16; + if (signbit (plus_inf)) + result |= 32; + if (!signbit (minus_inf)) + result |= 64; + } + return result; +} + + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_signbit_gcc=yes +else + gl_cv_func_signbit_gcc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_signbit_gcc" >&5 +$as_echo "$gl_cv_func_signbit_gcc" >&6; } + case "$gl_cv_func_signbit_gcc" in + *yes) + REPLACE_SIGNBIT_USING_GCC=1 + ;; + *) + case "$gl_cv_func_signbit" in + *yes) ;; + *) + REPLACE_SIGNBIT=1 + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'float'" >&5 +$as_echo_n "checking where to find the sign bit in a 'float'... " >&6; } +if ${gl_cv_cc_float_signbit+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + gl_cv_cc_float_signbit="unknown" + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stddef.h> +#include <stdio.h> +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { float value; unsigned int word[NWORDS]; } + memory_float; +static memory_float plus = { 1.0f }; +static memory_float minus = { -1.0f }; +int main () +{ + size_t j, k, i; + unsigned int m; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + /* Find the different bit. */ + k = 0; m = 0; + for (j = 0; j < NWORDS; j++) + { + unsigned int x = plus.word[j] ^ minus.word[j]; + if ((x & (x - 1)) || (x && m)) + { + /* More than one bit difference. */ + fprintf (fp, "unknown"); + fclose (fp); + return 2; + } + if (x) + { + k = j; + m = x; + } + } + if (m == 0) + { + /* No difference. */ + fprintf (fp, "unknown"); + fclose (fp); + return 3; + } + /* Now m = plus.word[k] ^ ~minus.word[k]. */ + if (plus.word[k] & ~minus.word[k]) + { + /* Oh? The sign bit is set in the positive and cleared in the negative + numbers? */ + fprintf (fp, "unknown"); + fclose (fp); + return 4; + } + for (i = 0; ; i++) + if ((m >> i) & 1) + break; + fprintf (fp, "word %d bit %d", (int) k, (int) i); + if (fclose (fp) != 0) + return 5; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_cc_float_signbit=`cat conftest.out` +else + gl_cv_cc_float_signbit="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_signbit" >&5 +$as_echo "$gl_cv_cc_float_signbit" >&6; } + case "$gl_cv_cc_float_signbit" in + word*bit*) + word=`echo "$gl_cv_cc_float_signbit" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_float_signbit" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define FLT_SIGNBIT_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define FLT_SIGNBIT_BIT $bit +_ACEOF + + ;; + esac + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'double'" >&5 +$as_echo_n "checking where to find the sign bit in a 'double'... " >&6; } +if ${gl_cv_cc_double_signbit+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + gl_cv_cc_double_signbit="unknown" + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stddef.h> +#include <stdio.h> +#define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { double value; unsigned int word[NWORDS]; } + memory_float; +static memory_float plus = { 1.0 }; +static memory_float minus = { -1.0 }; +int main () +{ + size_t j, k, i; + unsigned int m; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + /* Find the different bit. */ + k = 0; m = 0; + for (j = 0; j < NWORDS; j++) + { + unsigned int x = plus.word[j] ^ minus.word[j]; + if ((x & (x - 1)) || (x && m)) + { + /* More than one bit difference. */ + fprintf (fp, "unknown"); + fclose (fp); + return 2; + } + if (x) + { + k = j; + m = x; + } + } + if (m == 0) + { + /* No difference. */ + fprintf (fp, "unknown"); + fclose (fp); + return 3; + } + /* Now m = plus.word[k] ^ ~minus.word[k]. */ + if (plus.word[k] & ~minus.word[k]) + { + /* Oh? The sign bit is set in the positive and cleared in the negative + numbers? */ + fprintf (fp, "unknown"); + fclose (fp); + return 4; + } + for (i = 0; ; i++) + if ((m >> i) & 1) + break; + fprintf (fp, "word %d bit %d", (int) k, (int) i); + if (fclose (fp) != 0) + return 5; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_cc_double_signbit=`cat conftest.out` +else + gl_cv_cc_double_signbit="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_signbit" >&5 +$as_echo "$gl_cv_cc_double_signbit" >&6; } + case "$gl_cv_cc_double_signbit" in + word*bit*) + word=`echo "$gl_cv_cc_double_signbit" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_double_signbit" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define DBL_SIGNBIT_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define DBL_SIGNBIT_BIT $bit +_ACEOF + + ;; + esac + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'long double'" >&5 +$as_echo_n "checking where to find the sign bit in a 'long double'... " >&6; } +if ${gl_cv_cc_long_double_signbit+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + gl_cv_cc_long_double_signbit="unknown" + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stddef.h> +#include <stdio.h> +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { long double value; unsigned int word[NWORDS]; } + memory_float; +static memory_float plus = { 1.0L }; +static memory_float minus = { -1.0L }; +int main () +{ + size_t j, k, i; + unsigned int m; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + /* Find the different bit. */ + k = 0; m = 0; + for (j = 0; j < NWORDS; j++) + { + unsigned int x = plus.word[j] ^ minus.word[j]; + if ((x & (x - 1)) || (x && m)) + { + /* More than one bit difference. */ + fprintf (fp, "unknown"); + fclose (fp); + return 2; + } + if (x) + { + k = j; + m = x; + } + } + if (m == 0) + { + /* No difference. */ + fprintf (fp, "unknown"); + fclose (fp); + return 3; + } + /* Now m = plus.word[k] ^ ~minus.word[k]. */ + if (plus.word[k] & ~minus.word[k]) + { + /* Oh? The sign bit is set in the positive and cleared in the negative + numbers? */ + fprintf (fp, "unknown"); + fclose (fp); + return 4; + } + for (i = 0; ; i++) + if ((m >> i) & 1) + break; + fprintf (fp, "word %d bit %d", (int) k, (int) i); + if (fclose (fp) != 0) + return 5; + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_cc_long_double_signbit=`cat conftest.out` +else + gl_cv_cc_long_double_signbit="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_long_double_signbit" >&5 +$as_echo "$gl_cv_cc_long_double_signbit" >&6; } + case "$gl_cv_cc_long_double_signbit" in + word*bit*) + word=`echo "$gl_cv_cc_long_double_signbit" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_long_double_signbit" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define LDBL_SIGNBIT_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define LDBL_SIGNBIT_BIT $bit +_ACEOF + + ;; + esac + + + if test "$gl_cv_cc_float_signbit" = unknown; then + ac_fn_c_check_decl "$LINENO" "copysignf" "ac_cv_have_decl_copysignf" "#include <math.h> +" +if test "x$ac_cv_have_decl_copysignf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_COPYSIGNF $ac_have_decl +_ACEOF + + if test "$ac_cv_have_decl_copysignf" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether copysignf can be used without linking with libm" >&5 +$as_echo_n "checking whether copysignf can be used without linking with libm... " >&6; } +if ${gl_cv_func_copysignf_no_libm+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + float x, y; +int +main () +{ +return copysignf (x, y) < 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_copysignf_no_libm=yes +else + gl_cv_func_copysignf_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysignf_no_libm" >&5 +$as_echo "$gl_cv_func_copysignf_no_libm" >&6; } + if test $gl_cv_func_copysignf_no_libm = yes; then + +$as_echo "#define HAVE_COPYSIGNF_IN_LIBC 1" >>confdefs.h + + fi + fi + fi + if test "$gl_cv_cc_double_signbit" = unknown; then + ac_fn_c_check_decl "$LINENO" "copysign" "ac_cv_have_decl_copysign" "#include <math.h> +" +if test "x$ac_cv_have_decl_copysign" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_COPYSIGN $ac_have_decl +_ACEOF + + if test "$ac_cv_have_decl_copysign" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether copysign can be used without linking with libm" >&5 +$as_echo_n "checking whether copysign can be used without linking with libm... " >&6; } +if ${gl_cv_func_copysign_no_libm+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + double x, y; +int +main () +{ +return copysign (x, y) < 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_copysign_no_libm=yes +else + gl_cv_func_copysign_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysign_no_libm" >&5 +$as_echo "$gl_cv_func_copysign_no_libm" >&6; } + if test $gl_cv_func_copysign_no_libm = yes; then + +$as_echo "#define HAVE_COPYSIGN_IN_LIBC 1" >>confdefs.h + + fi + fi + fi + if test "$gl_cv_cc_long_double_signbit" = unknown; then + ac_fn_c_check_decl "$LINENO" "copysignl" "ac_cv_have_decl_copysignl" "#include <math.h> +" +if test "x$ac_cv_have_decl_copysignl" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_COPYSIGNL $ac_have_decl +_ACEOF + + if test "$ac_cv_have_decl_copysignl" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether copysignl can be used without linking with libm" >&5 +$as_echo_n "checking whether copysignl can be used without linking with libm... " >&6; } +if ${gl_cv_func_copysignl_no_libm+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + long double x, y; +int +main () +{ +return copysignl (x, y) < 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_func_copysignl_no_libm=yes +else + gl_cv_func_copysignl_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysignl_no_libm" >&5 +$as_echo "$gl_cv_func_copysignl_no_libm" >&6; } + if test $gl_cv_func_copysignl_no_libm = yes; then + +$as_echo "#define HAVE_COPYSIGNL_IN_LIBC 1" >>confdefs.h + + fi + fi + fi + ;; + esac + ;; + esac + + if test $REPLACE_SIGNBIT = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS signbitf.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS signbitd.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS signbitl.$ac_objext" + + fi + + + + + + GNULIB_SIGNBIT=1 + + + + + +$as_echo "#define GNULIB_TEST_SIGNBIT 1" >>confdefs.h + + + + + + + if test $gl_cv_type_sigset_t = yes; then + ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask" +if test "x$ac_cv_func_sigprocmask" = xyes; then : + gl_cv_func_sigprocmask=1 +fi + + fi + if test -z "$gl_cv_func_sigprocmask"; then + HAVE_POSIX_SIGNALBLOCKING=0 + fi + + if test $HAVE_POSIX_SIGNALBLOCKING = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS sigprocmask.$ac_objext" + + : + fi + + + + + + GNULIB_SIGPROCMASK=1 + + + + + +$as_echo "#define GNULIB_TEST_SIGPROCMASK 1" >>confdefs.h + + + + + for ac_header in stdint.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" +if test "x$ac_cv_header_stdint_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDINT_H 1 +_ACEOF + +fi + +done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5 +$as_echo_n "checking for SIZE_MAX... " >&6; } +if ${gl_cv_size_max+:} false; then : + $as_echo_n "(cached) " >&6 +else + + gl_cv_size_max= + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <limits.h> +#if HAVE_STDINT_H +#include <stdint.h> +#endif +#ifdef SIZE_MAX +Found it +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Found it" >/dev/null 2>&1; then : + gl_cv_size_max=yes +fi +rm -f conftest* + + if test -z "$gl_cv_size_max"; then + if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) * CHAR_BIT - 1" "size_t_bits_minus_1" "#include <stddef.h> +#include <limits.h>"; then : + +else + size_t_bits_minus_1= +fi + + if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint" "#include <stddef.h>"; then : + +else + fits_in_uint= +fi + + if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then + if test $fits_in_uint = 1; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stddef.h> + extern size_t foo; + extern unsigned long foo; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + fits_in_uint=0 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $fits_in_uint = 1; then + gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" + else + gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" + fi + else + gl_cv_size_max='((size_t)~(size_t)0)' + fi + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5 +$as_echo "$gl_cv_size_max" >&6; } + if test "$gl_cv_size_max" != yes; then + +cat >>confdefs.h <<_ACEOF +#define SIZE_MAX $gl_cv_size_max +_ACEOF + + fi + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_spawn_h='<'spawn.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <spawn.h>" >&5 +$as_echo_n "checking absolute name of <spawn.h>... " >&6; } +if ${gl_cv_next_spawn_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_spawn_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <spawn.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'spawn.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_spawn_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_spawn_h + gl_cv_next_spawn_h='"'$gl_header'"' + else + gl_cv_next_spawn_h='<'spawn.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_spawn_h" >&5 +$as_echo "$gl_cv_next_spawn_h" >&6; } + fi + NEXT_SPAWN_H=$gl_cv_next_spawn_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'spawn.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_spawn_h + fi + NEXT_AS_FIRST_DIRECTIVE_SPAWN_H=$gl_next_as_first_directive + + + + + + if test $ac_cv_header_spawn_h = yes; then + HAVE_SPAWN_H=1 + ac_fn_c_check_type "$LINENO" "posix_spawnattr_t" "ac_cv_type_posix_spawnattr_t" " +#include <spawn.h> + +" +if test "x$ac_cv_type_posix_spawnattr_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_POSIX_SPAWNATTR_T 1 +_ACEOF + + +else + HAVE_POSIX_SPAWNATTR_T=0 +fi + + ac_fn_c_check_type "$LINENO" "posix_spawn_file_actions_t" "ac_cv_type_posix_spawn_file_actions_t" " +#include <spawn.h> + +" +if test "x$ac_cv_type_posix_spawn_file_actions_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1 +_ACEOF + + +else + HAVE_POSIX_SPAWN_FILE_ACTIONS_T=0 +fi + + else + HAVE_SPAWN_H=0 + HAVE_POSIX_SPAWNATTR_T=0 + HAVE_POSIX_SPAWN_FILE_ACTIONS_T=0 + fi + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5 +$as_echo_n "checking for ssize_t... " >&6; } +if ${gt_cv_ssize_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +int +main () +{ +int x = sizeof (ssize_t *) + sizeof (ssize_t); + return !x; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_ssize_t=yes +else + gt_cv_ssize_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_ssize_t" >&5 +$as_echo "$gt_cv_ssize_t" >&6; } + if test $gt_cv_ssize_t = no; then + +$as_echo "#define ssize_t int" >>confdefs.h + + fi + + + + + + case "$host_os" in + mingw*) + REPLACE_STAT=1 + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat handles trailing slashes on files" >&5 +$as_echo_n "checking whether stat handles trailing slashes on files... " >&6; } +if ${gl_cv_func_stat_file_slash+:} false; then : + $as_echo_n "(cached) " >&6 +else + touch conftest.tmp + # Assume that if we have lstat, we can also check symlinks. + if test $ac_cv_func_lstat = yes; then + ln -s conftest.tmp conftest.lnk + fi + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_stat_file_slash="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_stat_file_slash="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_stat_file_slash="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/stat.h> + +int +main () +{ +int result = 0; + struct stat st; + if (!stat ("conftest.tmp/", &st)) + result |= 1; +#if HAVE_LSTAT + if (!stat ("conftest.lnk/", &st)) + result |= 2; +#endif + return result; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_stat_file_slash=yes +else + gl_cv_func_stat_file_slash=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + rm -f conftest.tmp conftest.lnk +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_stat_file_slash" >&5 +$as_echo "$gl_cv_func_stat_file_slash" >&6; } + case $gl_cv_func_stat_file_slash in + *no) + REPLACE_STAT=1 + +$as_echo "#define REPLACE_FUNC_STAT_FILE 1" >>confdefs.h +;; + esac + case $host_os in + solaris*) + REPLACE_FSTAT=1 ;; + esac + ;; + esac + + if test $REPLACE_STAT = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS stat.$ac_objext" + + case "$host_os" in + mingw*) + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS stat-w32.$ac_objext" + + ;; + esac + + + : + + fi + + + + + + GNULIB_STAT=1 + + + + + +$as_echo "#define GNULIB_TEST_STAT 1" >>confdefs.h + + + + + + + + ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.tv_nsec" "ac_cv_member_struct_stat_st_atim_tv_nsec" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 +_ACEOF + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct stat.st_atim is of type struct timespec" >&5 +$as_echo_n "checking whether struct stat.st_atim is of type struct timespec... " >&6; } +if ${ac_cv_typeof_struct_stat_st_atim_is_struct_timespec+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <sys/types.h> + #include <sys/stat.h> + #if HAVE_SYS_TIME_H + # include <sys/time.h> + #endif + #include <time.h> + struct timespec ts; + struct stat st; + +int +main () +{ + + st.st_atim = ts; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes +else + ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&5 +$as_echo "$ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&6; } + if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then + +$as_echo "#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1" >>confdefs.h + + fi +else + ac_fn_c_check_member "$LINENO" "struct stat" "st_atimespec.tv_nsec" "ac_cv_member_struct_stat_st_atimespec_tv_nsec" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1 +_ACEOF + + +else + ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1 +_ACEOF + + +else + ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.st__tim.tv_nsec" "ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1 +_ACEOF + + +fi + +fi + +fi + +fi + + + + + + ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimespec.tv_nsec" "ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC 1 +_ACEOF + + +else + ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimensec" "ac_cv_member_struct_stat_st_birthtimensec" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_member_struct_stat_st_birthtimensec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC 1 +_ACEOF + + +else + ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtim.tv_nsec" "ac_cv_member_struct_stat_st_birthtim_tv_nsec" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_member_struct_stat_st_birthtim_tv_nsec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC 1 +_ACEOF + + +fi + +fi + +fi + + + + STDARG_H='' + NEXT_STDARG_H='<stdarg.h>' + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for va_copy" >&5 +$as_echo_n "checking for va_copy... " >&6; } +if ${gl_cv_func_va_copy+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +int +main () +{ + +#ifndef va_copy +void (*func) (va_list, va_list) = va_copy; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_func_va_copy=yes +else + gl_cv_func_va_copy=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_va_copy" >&5 +$as_echo "$gl_cv_func_va_copy" >&6; } + if test $gl_cv_func_va_copy = no; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined _AIX && !defined __GNUC__ + AIX vaccine + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "vaccine" >/dev/null 2>&1; then : + gl_aixcc=yes +else + gl_aixcc=no +fi +rm -f conftest* + + if test $gl_aixcc = yes; then + STDARG_H=stdarg.h + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stdarg_h='<'stdarg.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdarg.h>" >&5 +$as_echo_n "checking absolute name of <stdarg.h>... " >&6; } +if ${gl_cv_next_stdarg_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'stdarg.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_stdarg_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_stdarg_h + gl_cv_next_stdarg_h='"'$gl_header'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdarg_h" >&5 +$as_echo "$gl_cv_next_stdarg_h" >&6; } + fi + NEXT_STDARG_H=$gl_cv_next_stdarg_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'stdarg.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_stdarg_h + fi + NEXT_AS_FIRST_DIRECTIVE_STDARG_H=$gl_next_as_first_directive + + + + + if test "$gl_cv_next_stdarg_h" = '""'; then + gl_cv_next_stdarg_h='"///usr/include/stdarg.h"' + NEXT_STDARG_H="$gl_cv_next_stdarg_h" + fi + else + + saved_as_echo_n="$as_echo_n" + as_echo_n=':' + if ${gl_cv_func___va_copy+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +int +main () +{ + +#ifndef __va_copy +error, bail out +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_func___va_copy=yes +else + gl_cv_func___va_copy=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + as_echo_n="$saved_as_echo_n" + + if test $gl_cv_func___va_copy = yes; then + +$as_echo "#define va_copy __va_copy" >>confdefs.h + + else + + +$as_echo "#define va_copy gl_va_copy" >>confdefs.h + + fi + fi + fi + + if test -n "$STDARG_H"; then + GL_GENERATE_STDARG_H_TRUE= + GL_GENERATE_STDARG_H_FALSE='#' +else + GL_GENERATE_STDARG_H_TRUE='#' + GL_GENERATE_STDARG_H_FALSE= +fi + + + + + + + # Define two additional variables used in the Makefile substitution. + + if test "$ac_cv_header_stdbool_h" = yes; then + STDBOOL_H='' + else + STDBOOL_H='stdbool.h' + fi + + if test -n "$STDBOOL_H"; then + GL_GENERATE_STDBOOL_H_TRUE= + GL_GENERATE_STDBOOL_H_FALSE='#' +else + GL_GENERATE_STDBOOL_H_TRUE='#' + GL_GENERATE_STDBOOL_H_FALSE= +fi + + + if test "$ac_cv_type__Bool" = yes; then + HAVE__BOOL=1 + else + HAVE__BOOL=0 + fi + + + + + + STDDEF_H= + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for good max_align_t" >&5 +$as_echo_n "checking for good max_align_t... " >&6; } +if ${gl_cv_type_max_align_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stddef.h> + unsigned int s = sizeof (max_align_t); + #if defined __GNUC__ || defined __IBM__ALIGNOF__ + int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1]; + int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1]; + #endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_type_max_align_t=yes +else + gl_cv_type_max_align_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_max_align_t" >&5 +$as_echo "$gl_cv_type_max_align_t" >&6; } + if test $gl_cv_type_max_align_t = no; then + HAVE_MAX_ALIGN_T=0 + STDDEF_H=stddef.h + fi + + if test $gt_cv_c_wchar_t = no; then + HAVE_WCHAR_T=0 + STDDEF_H=stddef.h + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5 +$as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; } +if ${gl_cv_decl_null_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stddef.h> + int test[2 * (sizeof NULL == sizeof (void *)) -1]; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_decl_null_works=yes +else + gl_cv_decl_null_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5 +$as_echo "$gl_cv_decl_null_works" >&6; } + if test $gl_cv_decl_null_works = no; then + REPLACE_NULL=1 + STDDEF_H=stddef.h + fi + + + if test -n "$STDDEF_H"; then + GL_GENERATE_STDDEF_H_TRUE= + GL_GENERATE_STDDEF_H_FALSE='#' +else + GL_GENERATE_STDDEF_H_TRUE='#' + GL_GENERATE_STDDEF_H_FALSE= +fi + + if test -n "$STDDEF_H"; then + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stddef_h='<'stddef.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stddef.h>" >&5 +$as_echo_n "checking absolute name of <stddef.h>... " >&6; } +if ${gl_cv_next_stddef_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stddef.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'stddef.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_stddef_h + gl_cv_next_stddef_h='"'$gl_header'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5 +$as_echo "$gl_cv_next_stddef_h" >&6; } + fi + NEXT_STDDEF_H=$gl_cv_next_stddef_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'stddef.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_stddef_h + fi + NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive + + + + + fi + + + + + $as_echo "#define __USE_MINGW_ANSI_STDIO 1" >>confdefs.h + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stdio_h='<'stdio.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdio.h>" >&5 +$as_echo_n "checking absolute name of <stdio.h>... " >&6; } +if ${gl_cv_next_stdio_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'stdio.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_stdio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_stdio_h + gl_cv_next_stdio_h='"'$gl_header'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdio_h" >&5 +$as_echo "$gl_cv_next_stdio_h" >&6; } + fi + NEXT_STDIO_H=$gl_cv_next_stdio_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'stdio.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_stdio_h + fi + NEXT_AS_FIRST_DIRECTIVE_STDIO_H=$gl_next_as_first_directive + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which flavor of printf attribute matches inttypes macros" >&5 +$as_echo_n "checking which flavor of printf attribute matches inttypes macros... " >&6; } +if ${gl_cv_func_printf_attribute_flavor+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #define __STDC_FORMAT_MACROS 1 + #include <stdio.h> + #include <inttypes.h> + /* For non-mingw systems, compilation will trivially succeed. + For mingw, compilation will succeed for older mingw (system + printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ + #if (defined _WIN32 && ! defined __CYGWIN__) && \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) + extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; + #endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_func_printf_attribute_flavor=system +else + gl_cv_func_printf_attribute_flavor=gnu +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_attribute_flavor" >&5 +$as_echo "$gl_cv_func_printf_attribute_flavor" >&6; } + if test "$gl_cv_func_printf_attribute_flavor" = gnu; then + +$as_echo "#define GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU 1" >>confdefs.h + + fi + + GNULIB_FSCANF=1 + + +cat >>confdefs.h <<_ACEOF +#define GNULIB_FSCANF 1 +_ACEOF + + + GNULIB_SCANF=1 + + +cat >>confdefs.h <<_ACEOF +#define GNULIB_SCANF 1 +_ACEOF + + + GNULIB_FGETC=1 + GNULIB_GETC=1 + GNULIB_GETCHAR=1 + GNULIB_FGETS=1 + GNULIB_FREAD=1 + + + GNULIB_FPRINTF=1 + GNULIB_PRINTF=1 + GNULIB_VFPRINTF=1 + GNULIB_VPRINTF=1 + GNULIB_FPUTC=1 + GNULIB_PUTC=1 + GNULIB_PUTCHAR=1 + GNULIB_FPUTS=1 + GNULIB_PUTS=1 + GNULIB_FWRITE=1 + + + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stdlib_h='<'stdlib.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdlib.h>" >&5 +$as_echo_n "checking absolute name of <stdlib.h>... " >&6; } +if ${gl_cv_next_stdlib_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'stdlib.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_stdlib_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_stdlib_h + gl_cv_next_stdlib_h='"'$gl_header'"' + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdlib_h" >&5 +$as_echo "$gl_cv_next_stdlib_h" >&6; } + fi + NEXT_STDLIB_H=$gl_cv_next_stdlib_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'stdlib.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_stdlib_h + fi + NEXT_AS_FIRST_DIRECTIVE_STDLIB_H=$gl_next_as_first_directive + + + + + + + + + + + + + for ac_func in strcasecmp +do : + ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp" +if test "x$ac_cv_func_strcasecmp" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRCASECMP 1 +_ACEOF + +fi +done + + if test $ac_cv_func_strcasecmp = no; then + HAVE_STRCASECMP=0 + fi + + + + for ac_func in strncasecmp +do : + ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp" +if test "x$ac_cv_func_strncasecmp" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRNCASECMP 1 +_ACEOF + +fi +done + + if test $ac_cv_func_strncasecmp = yes; then + HAVE_STRNCASECMP=1 + else + HAVE_STRNCASECMP=0 + fi + ac_fn_c_check_decl "$LINENO" "strncasecmp" "ac_cv_have_decl_strncasecmp" "$ac_includes_default" +if test "x$ac_cv_have_decl_strncasecmp" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRNCASECMP $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_strncasecmp = no; then + HAVE_DECL_STRNCASECMP=0 + fi + + + if test $HAVE_STRCASECMP = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strcasecmp.$ac_objext" + + + : + + fi + if test $HAVE_STRNCASECMP = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strncasecmp.$ac_objext" + + + : + + fi + + + if test $HAVE_STRCASESTR = 1 && test $REPLACE_STRCASESTR = 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strcasestr works in linear time" >&5 +$as_echo_n "checking whether strcasestr works in linear time... " >&6; } +if ${gl_cv_func_strcasestr_linear+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <features.h> +#ifdef __GNU_LIBRARY__ + #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \ + && !defined __UCLIBC__ + Lucky user + #endif +#endif +#ifdef __CYGWIN__ + #include <cygwin/version.h> + #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) + Lucky user + #endif +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky user" >/dev/null 2>&1; then : + gl_cv_func_strcasestr_linear="guessing yes" +else + gl_cv_func_strcasestr_linear="guessing no" +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <signal.h> /* for signal */ +#include <string.h> /* for strcasestr */ +#include <stdlib.h> /* for malloc */ +#include <unistd.h> /* for alarm */ +static void quit (int sig) { _exit (sig + 128); } + +int +main () +{ + + int result = 0; + size_t m = 1000000; + char *haystack = (char *) malloc (2 * m + 2); + char *needle = (char *) malloc (m + 2); + /* Failure to compile this test due to missing alarm is okay, + since all such platforms (mingw) also lack strcasestr. */ + signal (SIGALRM, quit); + alarm (5); + /* Check for quadratic performance. */ + if (haystack && needle) + { + memset (haystack, 'A', 2 * m); + haystack[2 * m] = 'B'; + haystack[2 * m + 1] = 0; + memset (needle, 'A', m); + needle[m] = 'B'; + needle[m + 1] = 0; + if (!strcasestr (haystack, needle)) + result |= 1; + } + /* Free allocated memory, in case some sanitizer is watching. */ + free (haystack); + free (needle); + return result; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_strcasestr_linear=yes +else + gl_cv_func_strcasestr_linear=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strcasestr_linear" >&5 +$as_echo "$gl_cv_func_strcasestr_linear" >&6; } + case "$gl_cv_func_strcasestr_linear" in + *yes) ;; + *) + REPLACE_STRCASESTR=1 + ;; + esac + fi + + if test $HAVE_STRCASESTR = 0 || test $REPLACE_STRCASESTR = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strcasestr.$ac_objext" + + + : + + fi + + + + + + + for ac_func in strcasestr +do : + ac_fn_c_check_func "$LINENO" "strcasestr" "ac_cv_func_strcasestr" +if test "x$ac_cv_func_strcasestr" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRCASESTR 1 +_ACEOF + +fi +done + + if test $ac_cv_func_strcasestr = no; then + HAVE_STRCASESTR=0 + else + if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then + REPLACE_STRCASESTR=1 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strcasestr works" >&5 +$as_echo_n "checking whether strcasestr works... " >&6; } +if ${gl_cv_func_strcasestr_works_always+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __GNU_LIBRARY__ + #include <features.h> + #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \ + || defined __UCLIBC__ + Lucky user + #endif +#elif defined __CYGWIN__ + #include <cygwin/version.h> + #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) + Lucky user + #endif +#else + Lucky user +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky user" >/dev/null 2>&1; then : + gl_cv_func_strcasestr_works_always="guessing yes" +else + gl_cv_func_strcasestr_works_always="guessing no" +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <string.h> /* for strcasestr */ +#ifdef __GNU_LIBRARY__ + #include <features.h> + #if __GLIBC__ == 2 && __GLIBC_MINOR__ == 28 + Unlucky user + #endif +#endif +#define P "_EF_BF_BD" +#define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P +#define NEEDLE P P P P P + +int +main () +{ +return !!strcasestr (HAYSTACK, NEEDLE); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_strcasestr_works_always=yes +else + gl_cv_func_strcasestr_works_always=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strcasestr_works_always" >&5 +$as_echo "$gl_cv_func_strcasestr_works_always" >&6; } + case "$gl_cv_func_strcasestr_works_always" in + *yes) ;; + *) + REPLACE_STRCASESTR=1 + ;; + esac + fi + fi + + if test $HAVE_STRCASESTR = 0 || test $REPLACE_STRCASESTR = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strcasestr.$ac_objext" + + + : + + fi + + + + + + GNULIB_STRCASESTR=1 + + + + + +$as_echo "#define GNULIB_TEST_STRCASESTR 1" >>confdefs.h + + + + + + + + for ac_func in strchrnul +do : + ac_fn_c_check_func "$LINENO" "strchrnul" "ac_cv_func_strchrnul" +if test "x$ac_cv_func_strchrnul" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRCHRNUL 1 +_ACEOF + +fi +done + + if test $ac_cv_func_strchrnul = no; then + HAVE_STRCHRNUL=0 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strchrnul works" >&5 +$as_echo_n "checking whether strchrnul works... " >&6; } +if ${gl_cv_func_strchrnul_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if defined __CYGWIN__ + #include <cygwin/version.h> + #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 9) + Lucky user + #endif +#else + Lucky user +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky user" >/dev/null 2>&1; then : + gl_cv_func_strchrnul_works="guessing yes" +else + gl_cv_func_strchrnul_works="guessing no" +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <string.h> /* for strchrnul */ + +int +main () +{ +const char *buf = "a"; + return strchrnul (buf, 'b') != buf + 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_strchrnul_works=yes +else + gl_cv_func_strchrnul_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strchrnul_works" >&5 +$as_echo "$gl_cv_func_strchrnul_works" >&6; } + case "$gl_cv_func_strchrnul_works" in + *yes) ;; + *) REPLACE_STRCHRNUL=1 ;; + esac + fi + + if test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strchrnul.$ac_objext" + + : + fi + + + + + + GNULIB_STRCHRNUL=1 + + + + + +$as_echo "#define GNULIB_TEST_STRCHRNUL 1" >>confdefs.h + + + + + + + + if test $ac_cv_func_strdup = yes; then + if test $gl_cv_func_malloc_posix != yes; then + REPLACE_STRDUP=1 + fi + fi + + if test $ac_cv_have_decl_strdup = no; then + HAVE_DECL_STRDUP=0 + fi + + if test $ac_cv_func_strdup = no || test $REPLACE_STRDUP = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strdup.$ac_objext" + + : + fi + + + + + + GNULIB_STRDUP=1 + + + + + +$as_echo "#define GNULIB_TEST_STRDUP 1" >>confdefs.h + + + + + + + + + if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strerror function" >&5 +$as_echo_n "checking for working strerror function... " >&6; } +if ${gl_cv_func_working_strerror+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_working_strerror="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +int +main () +{ +if (!*strerror (-2)) return 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_working_strerror=yes +else + gl_cv_func_working_strerror=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_strerror" >&5 +$as_echo "$gl_cv_func_working_strerror" >&6; } + case "$gl_cv_func_working_strerror" in + *yes) ;; + *) + REPLACE_STRERROR=1 + ;; + esac + + else + REPLACE_STRERROR=1 + fi + + if test $REPLACE_STRERROR = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strerror.$ac_objext" + + fi + + +cat >>confdefs.h <<_ACEOF +#define GNULIB_STRERROR 1 +_ACEOF + + + + + + + + GNULIB_STRERROR=1 + + + + + +$as_echo "#define GNULIB_TEST_STRERROR 1" >>confdefs.h + + + + + + if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strerror-override.$ac_objext" + + + + + + if test $ac_cv_header_sys_socket_h != yes; then + for ac_header in winsock2.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" +if test "x$ac_cv_header_winsock2_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_WINSOCK2_H 1 +_ACEOF + +fi + +done + + fi + if test "$ac_cv_header_winsock2_h" = yes; then + HAVE_WINSOCK2_H=1 + UNISTD_H_HAVE_WINSOCK2_H=1 + SYS_IOCTL_H_HAVE_WINSOCK2_H=1 + else + HAVE_WINSOCK2_H=0 + fi + + + fi + + + + + + + + + + + + + for ac_func in strsep +do : + ac_fn_c_check_func "$LINENO" "strsep" "ac_cv_func_strsep" +if test "x$ac_cv_func_strsep" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRSEP 1 +_ACEOF + +fi +done + + if test $ac_cv_func_strsep = no; then + HAVE_STRSEP=0 + fi + + if test $HAVE_STRSEP = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strsep.$ac_objext" + + : + fi + + + + + + GNULIB_STRSEP=1 + + + + + +$as_echo "#define GNULIB_TEST_STRSEP 1" >>confdefs.h + + + + + + + + for ac_func in strverscmp +do : + ac_fn_c_check_func "$LINENO" "strverscmp" "ac_cv_func_strverscmp" +if test "x$ac_cv_func_strverscmp" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRVERSCMP 1 +_ACEOF + +fi +done + + if test $ac_cv_func_strverscmp = no; then + HAVE_STRVERSCMP=0 + fi + + if test $HAVE_STRVERSCMP = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS strverscmp.$ac_objext" + + + : + + fi + + + + + + GNULIB_STRVERSCMP=1 + + + + + +$as_echo "#define GNULIB_TEST_STRVERSCMP 1" >>confdefs.h + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_sys_file_h='<'sys/file.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/file.h>" >&5 +$as_echo_n "checking absolute name of <sys/file.h>... " >&6; } +if ${gl_cv_next_sys_file_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_sys_file_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/file.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'sys/file.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_sys_file_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_sys_file_h + gl_cv_next_sys_file_h='"'$gl_header'"' + else + gl_cv_next_sys_file_h='<'sys/file.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_file_h" >&5 +$as_echo "$gl_cv_next_sys_file_h" >&6; } + fi + NEXT_SYS_FILE_H=$gl_cv_next_sys_file_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'sys/file.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_sys_file_h + fi + NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H=$gl_next_as_first_directive + + + + + + if test $ac_cv_header_sys_file_h = yes; then + HAVE_SYS_FILE_H=1 + else + HAVE_SYS_FILE_H=0 + fi + + + + + + + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_sys_stat_h='<'sys/stat.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/stat.h>" >&5 +$as_echo_n "checking absolute name of <sys/stat.h>... " >&6; } +if ${gl_cv_next_sys_stat_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_sys_stat_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/stat.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'sys/stat.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_sys_stat_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_sys_stat_h + gl_cv_next_sys_stat_h='"'$gl_header'"' + else + gl_cv_next_sys_stat_h='<'sys/stat.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_stat_h" >&5 +$as_echo "$gl_cv_next_sys_stat_h" >&6; } + fi + NEXT_SYS_STAT_H=$gl_cv_next_sys_stat_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'sys/stat.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_sys_stat_h + fi + NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H=$gl_next_as_first_directive + + + + + + + + + WINDOWS_STAT_TIMESPEC=0 + + + + + + + + + ac_fn_c_check_type "$LINENO" "nlink_t" "ac_cv_type_nlink_t" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_type_nlink_t" = xyes; then : + +else + +$as_echo "#define nlink_t int" >>confdefs.h + +fi + + + + + + + + + + + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_sys_wait_h='<'sys/wait.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/wait.h>" >&5 +$as_echo_n "checking absolute name of <sys/wait.h>... " >&6; } +if ${gl_cv_next_sys_wait_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_sys_wait_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/wait.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'sys/wait.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_sys_wait_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_sys_wait_h + gl_cv_next_sys_wait_h='"'$gl_header'"' + else + gl_cv_next_sys_wait_h='<'sys/wait.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_wait_h" >&5 +$as_echo "$gl_cv_next_sys_wait_h" >&6; } + fi + NEXT_SYS_WAIT_H=$gl_cv_next_sys_wait_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'sys/wait.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_sys_wait_h + fi + NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H=$gl_next_as_first_directive + + + + + + + + + + + + + + + : + + + + + + + + + + + + + + + + ac_fn_c_check_decl "$LINENO" "localtime_r" "ac_cv_have_decl_localtime_r" "#include <time.h> +" +if test "x$ac_cv_have_decl_localtime_r" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_LOCALTIME_R $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_localtime_r = no; then + HAVE_DECL_LOCALTIME_R=0 + fi + + + if test $ac_cv_func_localtime_r = yes; then + HAVE_LOCALTIME_R=1 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether localtime_r is compatible with its POSIX signature" >&5 +$as_echo_n "checking whether localtime_r is compatible with its POSIX signature... " >&6; } +if ${gl_cv_time_r_posix+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <time.h> +int +main () +{ +/* We don't need to append 'restrict's to the argument types, + even though the POSIX signature has the 'restrict's, + since C99 says they can't affect type compatibility. */ + struct tm * (*ptr) (time_t const *, struct tm *) = localtime_r; + if (ptr) return 0; + /* Check the return type is a pointer. + On HP-UX 10 it is 'int'. */ + *localtime_r (0, 0); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_time_r_posix=yes +else + gl_cv_time_r_posix=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_time_r_posix" >&5 +$as_echo "$gl_cv_time_r_posix" >&6; } + if test $gl_cv_time_r_posix = yes; then + REPLACE_LOCALTIME_R=0 + else + REPLACE_LOCALTIME_R=1 + fi + else + HAVE_LOCALTIME_R=0 + fi + + if test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS time_r.$ac_objext" + + + : + + fi + + + + + + GNULIB_TIME_R=1 + + + + + +$as_echo "#define GNULIB_TEST_TIME_R 1" >>confdefs.h + + + + + + + + + # Mac OS X 10.6 loops forever with some time_t values. + # See Bug#27706, Bug#27736, and + # https://lists.gnu.org/r/bug-gnulib/2017-07/msg00142.html + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether localtime loops forever near extrema" >&5 +$as_echo_n "checking whether localtime loops forever near extrema... " >&6; } +if ${gl_cv_func_localtime_infloop_bug+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_cv_func_localtime_infloop_bug=no + if test "$cross_compiling" = yes; then : + gl_cv_func_localtime_infloop_bug="guessing no" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> + #include <string.h> + #include <unistd.h> + #include <time.h> + +int +main () +{ + + time_t t = -67768038400666600; + struct tm *tm; + char *tz = getenv ("TZ"); + if (! (tz && strcmp (tz, "QQQ0") == 0)) + return 0; + alarm (2); + tm = localtime (&t); + /* Use TM and *TM to suppress over-optimization. */ + return tm && tm->tm_isdst; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + (TZ=QQQ0 ./conftest$EXEEXT) >/dev/null 2>&1 || + gl_cv_func_localtime_infloop_bug=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_localtime_infloop_bug" >&5 +$as_echo "$gl_cv_func_localtime_infloop_bug" >&6; } + if test "$gl_cv_func_localtime_infloop_bug" = yes; then + +$as_echo "#define HAVE_LOCALTIME_INFLOOP_BUG 1" >>confdefs.h + + fi + + ac_fn_c_check_type "$LINENO" "timezone_t" "ac_cv_type_timezone_t" "#include <time.h> +" +if test "x$ac_cv_type_timezone_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_TIMEZONE_T 1 +_ACEOF + + +fi + + if test "$ac_cv_type_timezone_t" = yes; then + HAVE_TIMEZONE_T=1 + fi + + if test $HAVE_TIMEZONE_T = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS time_rz.$ac_objext" + + fi + + + + + + GNULIB_TIME_RZ=1 + + + + + +$as_echo "#define GNULIB_TEST_TIME_RZ 1" >>confdefs.h + + + + + + + REPLACE_TIMEGM=0 + + if test $ac_cv_func_timegm = yes; then + if test "$gl_cv_func_working_mktime" != yes; then + # Assume that timegm is buggy if mktime is. + REPLACE_TIMEGM=1 + fi + else + HAVE_TIMEGM=0 + fi + + if test $HAVE_TIMEGM = 0 || test $REPLACE_TIMEGM = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS timegm.$ac_objext" + + + : + + fi + + + + + + GNULIB_TIMEGM=1 + + + + + +$as_echo "#define GNULIB_TEST_TIMEGM 1" >>confdefs.h + + + + : + : + + + + + + if test $ac_cv_func_tzset = no; then + HAVE_TZSET=0 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether tzset clobbers localtime buffer" >&5 +$as_echo_n "checking whether tzset clobbers localtime buffer... " >&6; } +if ${gl_cv_func_tzset_clobber+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess all is fine on glibc systems. + *-gnu* | gnu*) gl_cv_func_tzset_clobber="guessing no" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_tzset_clobber="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_tzset_clobber="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <time.h> +#include <stdlib.h> + +int +main () +{ + time_t t1 = 853958121; + struct tm *p, s; + putenv ("TZ=GMT0"); + p = localtime (&t1); + s = *p; + putenv ("TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00"); + tzset (); + return (p->tm_year != s.tm_year + || p->tm_mon != s.tm_mon + || p->tm_mday != s.tm_mday + || p->tm_hour != s.tm_hour + || p->tm_min != s.tm_min + || p->tm_sec != s.tm_sec); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_tzset_clobber=no +else + gl_cv_func_tzset_clobber=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_tzset_clobber" >&5 +$as_echo "$gl_cv_func_tzset_clobber" >&6; } + + +$as_echo "#define HAVE_RUN_TZSET_TEST 1" >>confdefs.h + + + REPLACE_TZSET=0 + case "$gl_cv_func_tzset_clobber" in + *yes) + REPLACE_TZSET=1 + +$as_echo "#define TZSET_CLOBBERS_LOCALTIME 1" >>confdefs.h + + + + + NEED_LOCALTIME_BUFFER=1 + REPLACE_GMTIME=1 + REPLACE_LOCALTIME=1 + + ;; + esac + case "$host_os" in + mingw*) REPLACE_TZSET=1 ;; + esac + + if test $HAVE_TZSET = 0 || test $REPLACE_TZSET = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS tzset.$ac_objext" + + fi + + + + + + GNULIB_TZSET=1 + + + + + +$as_echo "#define GNULIB_TEST_TZSET 1" >>confdefs.h + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_unistd_h='<'unistd.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <unistd.h>" >&5 +$as_echo_n "checking absolute name of <unistd.h>... " >&6; } +if ${gl_cv_next_unistd_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_unistd_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <unistd.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'unistd.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_unistd_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_unistd_h + gl_cv_next_unistd_h='"'$gl_header'"' + else + gl_cv_next_unistd_h='<'unistd.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_unistd_h" >&5 +$as_echo "$gl_cv_next_unistd_h" >&6; } + fi + NEXT_UNISTD_H=$gl_cv_next_unistd_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'unistd.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_unistd_h + fi + NEXT_AS_FIRST_DIRECTIVE_UNISTD_H=$gl_next_as_first_directive + + + + + if test $ac_cv_header_unistd_h = yes; then + HAVE_UNISTD_H=1 + else + HAVE_UNISTD_H=0 + fi + + + + + + + + + + + + +$as_echo "#define USE_UNLOCKED_IO 1" >>confdefs.h + + + + + + + + + + + + + + + + + + + + + + if test $ac_cv_have_decl_unsetenv = no; then + HAVE_DECL_UNSETENV=0 + fi + for ac_func in unsetenv +do : + ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv" +if test "x$ac_cv_func_unsetenv" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_UNSETENV 1 +_ACEOF + +fi +done + + if test $ac_cv_func_unsetenv = no; then + HAVE_UNSETENV=0 + else + HAVE_UNSETENV=1 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsetenv() return type" >&5 +$as_echo_n "checking for unsetenv() return type... " >&6; } +if ${gt_cv_func_unsetenv_ret+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#undef _BSD +#define _BSD 1 /* unhide unsetenv declaration in OSF/1 5.1 <stdlib.h> */ +#include <stdlib.h> +extern +#ifdef __cplusplus +"C" +#endif +int unsetenv (const char *name); + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_func_unsetenv_ret='int' +else + gt_cv_func_unsetenv_ret='void' +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_unsetenv_ret" >&5 +$as_echo "$gt_cv_func_unsetenv_ret" >&6; } + if test $gt_cv_func_unsetenv_ret = 'void'; then + +$as_echo "#define VOID_UNSETENV 1" >>confdefs.h + + REPLACE_UNSETENV=1 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether unsetenv obeys POSIX" >&5 +$as_echo_n "checking whether unsetenv obeys POSIX... " >&6; } +if ${gl_cv_func_unsetenv_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_unsetenv_works="guessing no" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <stdlib.h> + #include <errno.h> + extern char **environ; + +int +main () +{ + + char entry1[] = "a=1"; + char entry2[] = "b=2"; + char *env[] = { entry1, entry2, NULL }; + if (putenv ((char *) "a=1")) return 1; + if (putenv (entry2)) return 2; + entry2[0] = 'a'; + unsetenv ("a"); + if (getenv ("a")) return 3; + if (!unsetenv ("") || errno != EINVAL) return 4; + entry2[0] = 'b'; + environ = env; + if (!getenv ("a")) return 5; + entry2[0] = 'a'; + unsetenv ("a"); + if (getenv ("a")) return 6; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_unsetenv_works=yes +else + gl_cv_func_unsetenv_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_unsetenv_works" >&5 +$as_echo "$gl_cv_func_unsetenv_works" >&6; } + case "$gl_cv_func_unsetenv_works" in + *yes) ;; + *) + REPLACE_UNSETENV=1 + ;; + esac + fi + + if test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS unsetenv.$ac_objext" + + + + + + fi + + + + + + GNULIB_UNSETENV=1 + + + + + +$as_echo "#define GNULIB_TEST_UNSETENV 1" >>confdefs.h + + + + + + if test $ac_cv_func_vasnprintf = no; then + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext" + + if test $ac_cv_func_vasnprintf = yes; then + +$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h + + fi + + + + + + + + + + + + ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" +if test "x$ac_cv_type_ptrdiff_t" = xyes; then : + +else + +$as_echo "#define ptrdiff_t long" >>confdefs.h + + +fi + + + + + + + + fi + + + + + + + + + + + + + + + + + gl_cv_func_vasnprintf_posix=no + + case "$gl_cv_func_printf_sizes_c99" in + *yes) + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + case "$gl_cv_func_printf_directive_a" in + *yes) + case "$gl_cv_func_printf_directive_f" in + *yes) + case "$gl_cv_func_printf_directive_n" in + *yes) + case "$gl_cv_func_printf_directive_ls" in + *yes) + case "$gl_cv_func_printf_positions" in + *yes) + case "$gl_cv_func_printf_flag_grouping" in + *yes) + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + case "$gl_cv_func_printf_flag_zero" in + *yes) + case "$gl_cv_func_printf_precision" in + *yes) + case "$gl_cv_func_printf_enomem" in + *yes) + if test $ac_cv_func_vasnprintf = yes; then + # vasnprintf exists and is + # already POSIX compliant. + gl_cv_func_vasnprintf_posix=yes + fi + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + if test $gl_cv_func_vasnprintf_posix = no; then + + + + case "$gl_cv_func_printf_infinite" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + ;; + esac + + + + case "$gl_cv_func_printf_directive_a" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h + + for ac_func in nl_langinfo +do : + ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" +if test "x$ac_cv_func_nl_langinfo" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NL_LANGINFO 1 +_ACEOF + +fi +done + + ;; + esac + + + + case "$gl_cv_func_printf_directive_f" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_directive_ls" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_grouping" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_zero" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_precision" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_enomem" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext" + + if test $ac_cv_func_vasnprintf = yes; then + +$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h + + fi + + + + + + + + + + + + ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" +if test "x$ac_cv_type_ptrdiff_t" = xyes; then : + +else + +$as_echo "#define ptrdiff_t long" >>confdefs.h + + +fi + + + + + + + + fi + + + for ac_func in vasprintf +do : + ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf" +if test "x$ac_cv_func_vasprintf" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_VASPRINTF 1 +_ACEOF + +fi +done + + if test $ac_cv_func_vasprintf = no; then + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS vasprintf.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS asprintf.$ac_objext" + + + if test $ac_cv_func_vasprintf = yes; then + REPLACE_VASPRINTF=1 + else + HAVE_VASPRINTF=0 + fi + + + + + + + + + fi + + + + + + + GNULIB_VASPRINTF=1 + + + + + +$as_echo "#define GNULIB_TEST_VASPRINTF 1" >>confdefs.h + + + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=asprintf:2:c-format" + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=vasprintf:2:c-format" + + + + + + + + + + + + + + + + + gl_cv_func_vasprintf_posix=no + for ac_func in vasprintf +do : + ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf" +if test "x$ac_cv_func_vasprintf" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_VASPRINTF 1 +_ACEOF + +fi +done + + case "$gl_cv_func_printf_sizes_c99" in + *yes) + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + case "$gl_cv_func_printf_directive_a" in + *yes) + case "$gl_cv_func_printf_directive_f" in + *yes) + case "$gl_cv_func_printf_directive_n" in + *yes) + case "$gl_cv_func_printf_directive_ls" in + *yes) + case "$gl_cv_func_printf_positions" in + *yes) + case "$gl_cv_func_printf_flag_grouping" in + *yes) + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + case "$gl_cv_func_printf_flag_zero" in + *yes) + case "$gl_cv_func_printf_precision" in + *yes) + case "$gl_cv_func_printf_enomem" in + *yes) + if test $ac_cv_func_vasprintf = yes; then + # vasprintf exists and is + # already POSIX compliant. + gl_cv_func_vasprintf_posix=yes + fi + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + if test $gl_cv_func_vasprintf_posix = no; then + + + + case "$gl_cv_func_printf_infinite" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + ;; + esac + + + + case "$gl_cv_func_printf_directive_a" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h + + for ac_func in nl_langinfo +do : + ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" +if test "x$ac_cv_func_nl_langinfo" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NL_LANGINFO 1 +_ACEOF + +fi +done + + ;; + esac + + + + case "$gl_cv_func_printf_directive_f" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_directive_ls" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_grouping" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_zero" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_precision" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_enomem" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext" + + if test $ac_cv_func_vasnprintf = yes; then + +$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h + + fi + + + + + + + + + + + + ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" +if test "x$ac_cv_type_ptrdiff_t" = xyes; then : + +else + +$as_echo "#define ptrdiff_t long" >>confdefs.h + + +fi + + + + + + + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS vasprintf.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS asprintf.$ac_objext" + + + if test $ac_cv_func_vasprintf = yes; then + REPLACE_VASPRINTF=1 + else + HAVE_VASPRINTF=0 + fi + + + + + + + + + fi + + +# Check whether --with-packager was given. +if test "${with_packager+set}" = set; then : + withval=$with_packager; case $withval in + yes|no) ;; + *) +cat >>confdefs.h <<_ACEOF +#define PACKAGE_PACKAGER "$withval" +_ACEOF + ;; + esac + +fi + + + +# Check whether --with-packager-version was given. +if test "${with_packager_version+set}" = set; then : + withval=$with_packager_version; case $withval in + yes|no) ;; + *) +cat >>confdefs.h <<_ACEOF +#define PACKAGE_PACKAGER_VERSION "$withval" +_ACEOF + ;; + esac + +fi + + + +# Check whether --with-packager-bug-reports was given. +if test "${with_packager_bug_reports+set}" = set; then : + withval=$with_packager_bug_reports; case $withval in + yes|no) ;; + *) +cat >>confdefs.h <<_ACEOF +#define PACKAGE_PACKAGER_BUG_REPORTS "$withval" +_ACEOF + ;; + esac + +fi + + + if test "X$with_packager" = "X" && \ + test "X$with_packager_version$with_packager_bug_reports" != "X" + then + as_fn_error $? "The --with-packager-{bug-reports,version} options require --with-packager" "$LINENO" 5 + fi + + + + + + + + + + + + + + + + + gl_cv_func_vfprintf_posix=no + case "$gl_cv_func_printf_sizes_c99" in + *yes) + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + case "$gl_cv_func_printf_directive_a" in + *yes) + case "$gl_cv_func_printf_directive_f" in + *yes) + case "$gl_cv_func_printf_directive_n" in + *yes) + case "$gl_cv_func_printf_directive_ls" in + *yes) + case "$gl_cv_func_printf_positions" in + *yes) + case "$gl_cv_func_printf_flag_grouping" in + *yes) + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + case "$gl_cv_func_printf_flag_zero" in + *yes) + case "$gl_cv_func_printf_precision" in + *yes) + case "$gl_cv_func_printf_enomem" in + *yes) + # vfprintf exists and is + # already POSIX compliant. + gl_cv_func_vfprintf_posix=yes + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + if test $gl_cv_func_vfprintf_posix = no; then + + + + case "$gl_cv_func_printf_infinite" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + ;; + esac + + + + case "$gl_cv_func_printf_directive_a" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h + + for ac_func in nl_langinfo +do : + ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" +if test "x$ac_cv_func_nl_langinfo" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NL_LANGINFO 1 +_ACEOF + +fi +done + + ;; + esac + + + + case "$gl_cv_func_printf_directive_f" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_directive_ls" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_grouping" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_zero" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_precision" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_enomem" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext" + + if test $ac_cv_func_vasnprintf = yes; then + +$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h + + fi + + + + + + + + + + + + ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" +if test "x$ac_cv_type_ptrdiff_t" = xyes; then : + +else + +$as_echo "#define ptrdiff_t long" >>confdefs.h + + +fi + + + + + + + + + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS vfprintf.$ac_objext" + + REPLACE_VFPRINTF=1 + +$as_echo "#define REPLACE_VFPRINTF_POSIX 1" >>confdefs.h + + : + + fi + + + + + + + GNULIB_VFPRINTF_POSIX=1 + + + + + +$as_echo "#define GNULIB_TEST_VFPRINTF_POSIX 1" >>confdefs.h + + + + + + for ac_func in waitid +do : + ac_fn_c_check_func "$LINENO" "waitid" "ac_cv_func_waitid" +if test "x$ac_cv_func_waitid" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_WAITID 1 +_ACEOF + +fi +done + + + + + HAVE_WAITPID=1 + case $host_os in + mingw*) HAVE_WAITPID=0 ;; + esac + + if test $HAVE_WAITPID = 0; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS waitpid.$ac_objext" + + fi + + + + + + GNULIB_WAITPID=1 + + + + + +$as_echo "#define GNULIB_TEST_WAITPID 1" >>confdefs.h + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_wchar_h='<'wchar.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wchar.h>" >&5 +$as_echo_n "checking absolute name of <wchar.h>... " >&6; } +if ${gl_cv_next_wchar_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_wchar_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <wchar.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'wchar.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_wchar_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_wchar_h + gl_cv_next_wchar_h='"'$gl_header'"' + else + gl_cv_next_wchar_h='<'wchar.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5 +$as_echo "$gl_cv_next_wchar_h" >&6; } + fi + NEXT_WCHAR_H=$gl_cv_next_wchar_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'wchar.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_wchar_h + fi + NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive + + + + + if test $ac_cv_header_wchar_h = yes; then + HAVE_WCHAR_H=1 + else + HAVE_WCHAR_H=0 + fi + + + + + + if test $gt_cv_c_wint_t = yes; then + HAVE_WINT_T=1 + else + HAVE_WINT_T=0 + fi + + + + + + + + + + + + + + + + + + + if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 +$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; } +if ${gl_cv_func_mbrtowc_incomplete_state+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and OSF/1. + aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; + esac + if test $LOCALE_JA != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 2; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_incomplete_state=yes +else + gl_cv_func_mbrtowc_incomplete_state=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 +$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 +$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; } +if ${gl_cv_func_mbrtowc_sanitycheck+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8. + solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + /* This fails on Solaris 8: + mbrtowc returns 2, and sets wc to 0x00F0. + mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 6, &state) != 4 + && mbtowc (&wc, input + 3, 6) == 4) + return 2; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_mbrtowc_sanitycheck=yes +else + gl_cv_func_mbrtowc_sanitycheck=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 +$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; } + + REPLACE_MBSTATE_T=0 + case "$gl_cv_func_mbrtowc_incomplete_state" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + case "$gl_cv_func_mbrtowc_sanitycheck" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + else + REPLACE_MBSTATE_T=1 + fi + + + + if test $ac_cv_func_wcrtomb = no; then + HAVE_WCRTOMB=0 + ac_fn_c_check_decl "$LINENO" "wcrtomb" "ac_cv_have_decl_wcrtomb" " +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> + +" +if test "x$ac_cv_have_decl_wcrtomb" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_WCRTOMB $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_wcrtomb = yes; then + REPLACE_WCRTOMB=1 + fi + else + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_WCRTOMB=1 + else + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wcrtomb return value is correct" >&5 +$as_echo_n "checking whether wcrtomb return value is correct... " >&6; } +if ${gl_cv_func_wcrtomb_retval+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX 4, OSF/1 and Solaris. + aix4* | osf* | solaris*) gl_cv_func_wcrtomb_retval="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_wcrtomb_retval="guessing yes" ;; + # Guess yes otherwise. + *) gl_cv_func_wcrtomb_retval="guessing yes" ;; + esac + if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + int result = 0; + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + result |= 1; + } + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + result |= 2; + } + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + result |= 4; + } + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + result |= 8; + } + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_wcrtomb_retval=yes +else + gl_cv_func_wcrtomb_retval=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcrtomb_retval" >&5 +$as_echo "$gl_cv_func_wcrtomb_retval" >&6; } + case "$gl_cv_func_wcrtomb_retval" in + *yes) ;; + *) REPLACE_WCRTOMB=1 ;; + esac + fi + fi + + if test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS wcrtomb.$ac_objext" + + + : + + fi + + + + + + GNULIB_WCRTOMB=1 + + + + + +$as_echo "#define GNULIB_TEST_WCRTOMB 1" >>confdefs.h + + + + + + + + if test $ac_cv_func_wctob = no; then + HAVE_WCTOB=0 + HAVE_DECL_WCTOB=0 + else + HAVE_WCTOB=1 + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wctob works" >&5 +$as_echo_n "checking whether wctob works... " >&6; } +if ${gl_cv_func_wctob_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris <= 9 and Cygwin. + solaris2.[1-9] | solaris2.[1-9].* | cygwin*) + gl_cv_func_wctob_works="guessing no" ;; + # Guess no on native Windows. + mingw*) + gl_cv_func_wctob_works="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_wctob_works="guessing yes" ;; + esac + case "$host_os" in + cygwin*) + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> + +register long global __asm__ ("%ebx"); + +int main () +{ + setlocale (LC_ALL, "en_US.UTF-8"); + + global = 0x12345678; + if (wctob (0x00FC) != -1) + return 1; + if (global != 0x12345678) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + : +else + gl_cv_func_wctob_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + ;; + esac + if test "$gl_cv_func_wctob_works" != no && test $LOCALE_FR != none; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + wchar_t wc; + + if (mbtowc (&wc, "\374", 1) == 1) + if (wctob (wc) != (unsigned char) '\374') + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_wctob_works=yes +else + gl_cv_func_wctob_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wctob_works" >&5 +$as_echo "$gl_cv_func_wctob_works" >&6; } + case "$gl_cv_func_wctob_works" in + *yes) ;; + *) REPLACE_WCTOB=1 ;; + esac + if test $REPLACE_WCTOB = 0; then + + ac_fn_c_check_decl "$LINENO" "wctob" "ac_cv_have_decl_wctob" " +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included + before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> + +" +if test "x$ac_cv_have_decl_wctob" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_WCTOB $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_wctob != yes; then + HAVE_DECL_WCTOB=0 + fi + fi + fi + + if test $HAVE_WCTOB = 0 || test $REPLACE_WCTOB = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS wctob.$ac_objext" + + + : + + fi + + + + + + GNULIB_WCTOB=1 + + + + + +$as_echo "#define GNULIB_TEST_WCTOB 1" >>confdefs.h + + + + + + + if false; then + REPLACE_WCTOMB=1 + fi + + if test $REPLACE_WCTOMB = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS wctomb.$ac_objext" + + + : + + fi + + + + + + GNULIB_WCTOMB=1 + + + + + +$as_echo "#define GNULIB_TEST_WCTOMB 1" >>confdefs.h + + + + + + + + + if test $ac_cv_func_iswcntrl = yes; then + HAVE_ISWCNTRL=1 + else + HAVE_ISWCNTRL=0 + fi + + + + if test $gt_cv_c_wint_t = yes; then + HAVE_WINT_T=1 + else + HAVE_WINT_T=0 + fi + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_wctype_h='<'wctype.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wctype.h>" >&5 +$as_echo_n "checking absolute name of <wctype.h>... " >&6; } +if ${gl_cv_next_wctype_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_wctype_h = yes; then + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <wctype.h> +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + + case "$host_os" in + mingw*) + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo 'wctype.h' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' + + gl_cv_absolute_wctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n "$gl_absolute_header_sed"` + + gl_header=$gl_cv_absolute_wctype_h + gl_cv_next_wctype_h='"'$gl_header'"' + else + gl_cv_next_wctype_h='<'wctype.h'>' + fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wctype_h" >&5 +$as_echo "$gl_cv_next_wctype_h" >&6; } + fi + NEXT_WCTYPE_H=$gl_cv_next_wctype_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'wctype.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_wctype_h + fi + NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive + + + + + if test $ac_cv_header_wctype_h = yes; then + if test $ac_cv_func_iswcntrl = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iswcntrl works" >&5 +$as_echo_n "checking whether iswcntrl works... " >&6; } +if ${gl_cv_func_iswcntrl_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> + #if __GNU_LIBRARY__ == 1 + Linux libc5 i18n is broken. + #endif +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_func_iswcntrl_works="guessing yes" +else + gl_cv_func_iswcntrl_works="guessing no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be + included before <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> + must be included before <wchar.h>. */ + #include <stddef.h> + #include <stdio.h> + #include <time.h> + #include <wchar.h> + #include <wctype.h> + int main () { return iswprint ('x') == 0; } + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_func_iswcntrl_works=yes +else + gl_cv_func_iswcntrl_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswcntrl_works" >&5 +$as_echo "$gl_cv_func_iswcntrl_works" >&6; } + fi + HAVE_WCTYPE_H=1 + else + HAVE_WCTYPE_H=0 + fi + + + case "$gl_cv_func_iswcntrl_works" in + *yes) REPLACE_ISWCNTRL=0 ;; + *) REPLACE_ISWCNTRL=1 ;; + esac + + + if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then + : + fi + + if test $REPLACE_ISWCNTRL = 1; then + REPLACE_TOWLOWER=1 + else + for ac_func in towlower +do : + ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower" +if test "x$ac_cv_func_towlower" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_TOWLOWER 1 +_ACEOF + +fi +done + + if test $ac_cv_func_towlower = yes; then + REPLACE_TOWLOWER=0 + else + ac_fn_c_check_decl "$LINENO" "towlower" "ac_cv_have_decl_towlower" "/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be + included before <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> + must be included before <wchar.h>. */ + #include <stddef.h> + #include <stdio.h> + #include <time.h> + #include <wchar.h> + #if HAVE_WCTYPE_H + # include <wctype.h> + #endif + +" +if test "x$ac_cv_have_decl_towlower" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_TOWLOWER $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_towlower = yes; then + REPLACE_TOWLOWER=1 + else + REPLACE_TOWLOWER=0 + fi + fi + fi + + + if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then + : + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctype_t" >&5 +$as_echo_n "checking for wctype_t... " >&6; } +if ${gl_cv_type_wctype_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be + included before <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> + must be included before <wchar.h>. */ + #include <stddef.h> + #include <stdio.h> + #include <time.h> + #include <wchar.h> + #if HAVE_WCTYPE_H + # include <wctype.h> + #endif + wctype_t a; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_type_wctype_t=yes +else + gl_cv_type_wctype_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctype_t" >&5 +$as_echo "$gl_cv_type_wctype_t" >&6; } + if test $gl_cv_type_wctype_t = no; then + HAVE_WCTYPE_T=0 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctrans_t" >&5 +$as_echo_n "checking for wctrans_t... " >&6; } +if ${gl_cv_type_wctrans_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be + included before <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> + must be included before <wchar.h>. */ + #include <stddef.h> + #include <stdio.h> + #include <time.h> + #include <wchar.h> + #include <wctype.h> + wctrans_t a; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_type_wctrans_t=yes +else + gl_cv_type_wctrans_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctrans_t" >&5 +$as_echo "$gl_cv_type_wctrans_t" >&6; } + if test $gl_cv_type_wctrans_t = no; then + HAVE_WCTRANS_T=0 + fi + + + + + + : + + + for ac_header in stdint.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" +if test "x$ac_cv_header_stdint_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDINT_H 1 +_ACEOF + +fi + +done + + + # End of code from modules + + + + + + + + + + gltests_libdeps= + gltests_ltlibdeps= + + + + + + + + + + gl_source_base='tests' + gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS + + gl_module_indicator_condition=$gltests_WITNESS + + + + + + + + + + + +# GNU help2man creates man pages from --help output; in many cases, this +# is sufficient, and obviates the need to maintain man pages separately. +# However, this means invoking executables, which we generally cannot do +# when cross-compiling, so we test to avoid that (the variable +# "cross_compiling" is set by AC_PROG_CC). +if test $cross_compiling = no; then + +HELP2MAN=${HELP2MAN-"${am_missing_run}help2man"} + +else + HELP2MAN=: +fi + +for ac_header in malloc.h string.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" +if test "x$ac_cv_type_off_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define off_t long +_ACEOF + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 +$as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } +if ${ac_cv_sys_largefile_source+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> /* for off_t */ + #include <stdio.h> +int +main () +{ +int (*fp) (FILE *, off_t, int) = fseeko; + return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_sys_largefile_source=no; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGEFILE_SOURCE 1 +#include <sys/types.h> /* for off_t */ + #include <stdio.h> +int +main () +{ +int (*fp) (FILE *, off_t, int) = fseeko; + return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_sys_largefile_source=1; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_cv_sys_largefile_source=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 +$as_echo "$ac_cv_sys_largefile_source" >&6; } +case $ac_cv_sys_largefile_source in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source +_ACEOF +;; +esac +rm -rf conftest* + +# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug +# in glibc 2.1.3, but that breaks too many other things. +# If you want fseeko and ftello with glibc, upgrade to a fixed glibc. +if test $ac_cv_sys_largefile_source != unknown; then + +$as_echo "#define HAVE_FSEEKO 1" >>confdefs.h + +fi + + + +have_check=no + + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CHECK" >&5 +$as_echo_n "checking for CHECK... " >&6; } + +if test -n "$CHECK_CFLAGS"; then + pkg_cv_CHECK_CFLAGS="$CHECK_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"check\""; } >&5 + ($PKG_CONFIG --exists --print-errors "check") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_CHECK_CFLAGS=`$PKG_CONFIG --cflags "check" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$CHECK_LIBS"; then + pkg_cv_CHECK_LIBS="$CHECK_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"check\""; } >&5 + ($PKG_CONFIG --exists --print-errors "check") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_CHECK_LIBS=`$PKG_CONFIG --libs "check" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + CHECK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "check" 2>&1` + else + CHECK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "check" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$CHECK_PKG_ERRORS" >&5 + + have_check=no +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + have_check=no +else + CHECK_CFLAGS=$pkg_cv_CHECK_CFLAGS + CHECK_LIBS=$pkg_cv_CHECK_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + have_check=yes +fi + if test "x$have_check" != "xno"; then + CHECK_TRUE= + CHECK_FALSE='#' +else + CHECK_TRUE='#' + CHECK_FALSE= +fi + + + + +have_curl=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for curl_global_init in -lcurl" >&5 +$as_echo_n "checking for curl_global_init in -lcurl... " >&6; } +if ${ac_cv_lib_curl_curl_global_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcurl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char curl_global_init (); +int +main () +{ +return curl_global_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_curl_curl_global_init=yes +else + ac_cv_lib_curl_curl_global_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curl_curl_global_init" >&5 +$as_echo "$ac_cv_lib_curl_curl_global_init" >&6; } +if test "x$ac_cv_lib_curl_curl_global_init" = xyes; then : + have_curl=yes +fi + +if test "x$have_curl" = "xyes"; then + CURLLIBS=-lcurl +fi + + +have_uuid=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5 +$as_echo_n "checking for uuid_generate in -luuid... " >&6; } +if ${ac_cv_lib_uuid_uuid_generate+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-luuid $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uuid_generate (); +int +main () +{ +return uuid_generate (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_uuid_uuid_generate=yes +else + ac_cv_lib_uuid_uuid_generate=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate" >&5 +$as_echo "$ac_cv_lib_uuid_uuid_generate" >&6; } +if test "x$ac_cv_lib_uuid_uuid_generate" = xyes; then : + have_uuid=yes +fi + +if test "x$have_uuid" = "xyes"; then + UUIDLIBS=-luuid +fi + + + +# Check whether --enable-encryption was given. +if test "${enable_encryption+set}" = set; then : + enableval=$enable_encryption; crypt_enabled=$enableval +else + crypt_enabled=yes +fi + + +crypt_support=no +if test "x$crypt_enabled" = "xyes"; then + + + + + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libgcrypt-prefix was given. +if test "${with_libgcrypt_prefix+set}" = set; then : + withval=$with_libgcrypt_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && test ! -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBGCRYPT= + LTLIBGCRYPT= + INCGCRYPT= + LIBGCRYPT_PREFIX= + HAVE_LIBGCRYPT= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='gcrypt gpg-error' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBGCRYPT="${LTLIBGCRYPT}${LTLIBGCRYPT:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBGCRYPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBGCRYPT="${LTLIBGCRYPT}${LTLIBGCRYPT:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBGCRYPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$found_so" + else + LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$found_a" + else + LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'gcrypt'; then + LIBGCRYPT_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'gcrypt'; then + LIBGCRYPT_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCGCRYPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCGCRYPT="${INCGCRYPT}${INCGCRYPT:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBGCRYPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBGCRYPT; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBGCRYPT="${LTLIBGCRYPT}${LTLIBGCRYPT:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$dep" + LTLIBGCRYPT="${LTLIBGCRYPT}${LTLIBGCRYPT:+ }$dep" + ;; + esac + done + fi + else + LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }-l$name" + LTLIBGCRYPT="${LTLIBGCRYPT}${LTLIBGCRYPT:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBGCRYPT="${LTLIBGCRYPT}${LTLIBGCRYPT:+ }-R$found_dir" + done + fi + + + + + + + ac_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCGCRYPT; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libgcrypt" >&5 +$as_echo_n "checking for libgcrypt... " >&6; } +if ${ac_cv_libgcrypt+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ac_save_LIBS="$LIBS" + case " $LIBGCRYPT" in + *" -l"*) LIBS="$LIBS $LIBGCRYPT" ;; + *) LIBS="$LIBGCRYPT $LIBS" ;; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <gpg-error.h> +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_libgcrypt=yes +else + ac_cv_libgcrypt='no' +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$ac_save_LIBS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libgcrypt" >&5 +$as_echo "$ac_cv_libgcrypt" >&6; } + if test "$ac_cv_libgcrypt" = yes; then + HAVE_LIBGCRYPT=yes + +$as_echo "#define HAVE_LIBGCRYPT 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libgcrypt" >&5 +$as_echo_n "checking how to link with libgcrypt... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBGCRYPT" >&5 +$as_echo "$LIBGCRYPT" >&6; } + else + HAVE_LIBGCRYPT=no + CPPFLAGS="$ac_save_CPPFLAGS" + LIBGCRYPT= + LTLIBGCRYPT= + LIBGCRYPT_PREFIX= + fi + + + + + + + + crypt_support=$HAVE_LIBGCRYPT + + if test "x$crypt_support" = "xyes"; then + +$as_echo "#define REC_CRYPT_SUPPORT 1" >>confdefs.h + + fi +fi + + if test "x$crypt_support" = "xyes"; then + CRYPT_TRUE= + CRYPT_FALSE='#' +else + CRYPT_TRUE='#' + CRYPT_FALSE= +fi + + + +have_glib=no + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5 +$as_echo_n "checking for GLIB... " >&6; } + +if test -n "$GLIB_CFLAGS"; then + pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.0.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$GLIB_LIBS"; then + pkg_cv_GLIB_LIBS="$GLIB_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.0.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.0.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.0.0" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.0.0" 2>&1` + else + GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.0.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$GLIB_PKG_ERRORS" >&5 + + have_glib=no +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + have_glib=no +else + GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS + GLIB_LIBS=$pkg_cv_GLIB_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + have_glib=yes +fi + +have_mdb=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mdb_init in -lmdb" >&5 +$as_echo_n "checking for mdb_init in -lmdb... " >&6; } +if ${ac_cv_lib_mdb_mdb_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lmdb $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char mdb_init (); +int +main () +{ +return mdb_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_mdb_mdb_init=yes +else + ac_cv_lib_mdb_mdb_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mdb_mdb_init" >&5 +$as_echo "$ac_cv_lib_mdb_mdb_init" >&6; } +if test "x$ac_cv_lib_mdb_mdb_init" = xyes; then : + have_mdb=yes +fi + +if test "x$have_mdb" = "xyes"; then + MDBLIBS=-lmdb + + OLD_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS $pkg_cv_GLIB_CFLAGS" + mdb_uses_sdatetime=no + ac_fn_c_check_decl "$LINENO" "MDB_SDATETIME" "ac_cv_have_decl_MDB_SDATETIME" "#include <glib.h> +#include <mdbtools.h> +" +if test "x$ac_cv_have_decl_MDB_SDATETIME" = xyes; then : + mdb_uses_sdatetime=yes +fi + + CFLAGS=$OLD_CFLAGS + + if test "x$mdb_uses_sdatetime" = "xyes"; then + MDB_DATETIME="MDB_SDATETIME" + else + MDB_DATETIME="MDB_DATETIME" + fi + + +fi + + + if test "x$have_glib" = "xyes" && test "x$have_mdb" = "xyes"; then + COMPILE_MDB2REC_TRUE= + COMPILE_MDB2REC_FALSE='#' +else + COMPILE_MDB2REC_TRUE='#' + COMPILE_MDB2REC_FALSE= +fi + + if test "x$have_curl" = "xyes"; then + REMOTE_DESCRIPTORS_TRUE= + REMOTE_DESCRIPTORS_FALSE='#' +else + REMOTE_DESCRIPTORS_TRUE='#' + REMOTE_DESCRIPTORS_FALSE= +fi + + if test "x$have_uuid" = "xyes"; then + UUID_TYPE_TRUE= + UUID_TYPE_FALSE='#' +else + UUID_TYPE_TRUE='#' + UUID_TYPE_FALSE= +fi + + + + +BASH_HEADERS=/usr/include/bash + +# Check whether --with-bash-headers was given. +if test "${with_bash_headers+set}" = set; then : + withval=$with_bash_headers; BASH_HEADERS=$withval +fi + + +if test -f ${BASH_HEADERS}/config.h; then + + bash_headers_available=yes +else + bash_headers_available=no +fi + +# Check whether --enable-bash-builtins was given. +if test "${enable_bash_builtins+set}" = set; then : + enableval=$enable_bash_builtins; bash_builtins_enabled=$enableval +else + bash_builtins_enabled=yes +fi + + + if test "x$bash_headers_available" = "xyes" && test "x$bash_builtins_enabled" = "xyes"; then + BASH_BUILTINS_TRUE= + BASH_BUILTINS_FALSE='#' +else + BASH_BUILTINS_TRUE='#' + BASH_BUILTINS_FALSE= +fi + + + +# Check whether --enable-algol68 was given. +if test "${enable_algol68+set}" = set; then : + enableval=$enable_algol68; algol68_enabled=$enableval +else + algol68_enabled=no +fi + + +if test "x$algol68_enabled" = "xyes"; then + for ac_prog in ca68 +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CA68+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CA68"; then + ac_cv_prog_CA68="$CA68" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CA68="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CA68=$ac_cv_prog_CA68 +if test -n "$CA68"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CA68" >&5 +$as_echo "$CA68" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CA68" && break +done + +fi + + + if test -n "$CA68" && test "x$algol68_enabled" = "xyes"; then + BUILD_A68_TRUE= + BUILD_A68_FALSE='#' +else + BUILD_A68_TRUE='#' + BUILD_A68_FALSE= +fi + + +compile_w32_system=no +case "${host}" in + *-mingw32*) + compile_w32_system=yes + ;; + *) + ;; +esac + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } + # Check whether --enable-nls was given. +if test "${enable_nls+set}" = set; then : + enableval=$enable_nls; USE_NLS=$enableval +else + USE_NLS=yes +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + + + + + GETTEXT_MACRO_VERSION=0.19 + + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGFMT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 +$as_echo "$MSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GMSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT +if test -n "$GMSGFMT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 +$as_echo "$GMSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac + + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XGETTEXT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$XGETTEXT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 +$as_echo "$XGETTEXT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + rm -f messages.po + + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgmerge", so it can be a program name with args. +set dummy msgmerge; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGMERGE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGMERGE" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then + ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" + ;; +esac +fi +MSGMERGE="$ac_cv_path_MSGMERGE" +if test "$MSGMERGE" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 +$as_echo "$MSGMERGE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$localedir" || localedir='${datadir}/locale' + + + test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= + + + ac_config_commands="$ac_config_commands po-directories" + + + + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then : + withval=$with_libiconv_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && test ! -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBICONV= + LTLIBICONV= + INCICONV= + LIBICONV_PREFIX= + HAVE_LIBICONV= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='iconv ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" + ;; + esac + done + fi + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" + done + fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 +$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } +if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <CoreFoundation/CFPreferences.h> +int +main () +{ +CFPreferencesCopyAppValue(NULL, NULL) + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFPreferencesCopyAppValue=yes +else + gt_cv_func_CFPreferencesCopyAppValue=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 +$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + +$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 +$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } +if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <CoreFoundation/CFLocale.h> +int +main () +{ +CFLocaleCopyCurrent(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFLocaleCopyCurrent=yes +else + gt_cv_func_CFLocaleCopyCurrent=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 +$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + +$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h + + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + + + + + + + LIBINTL= + LTLIBINTL= + POSUB= + + case " $gt_needs " in + *" need-formatstring-macros "*) gt_api_version=3 ;; + *" need-ngettext "*) gt_api_version=2 ;; + *) gt_api_version=1 ;; + esac + gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" + gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" + + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + + + if test $gt_api_version -ge 3; then + gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +' + else + gt_revision_test_code= + fi + if test $gt_api_version -ge 2; then + gt_expression_test_code=' + * ngettext ("", "", 0)' + else + gt_expression_test_code= + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 +$as_echo_n "checking for GNU gettext in libc... " >&6; } +if eval \${$gt_func_gnugettext_libc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <libintl.h> +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings; +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + +int +main () +{ + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libc=yes" +else + eval "$gt_func_gnugettext_libc=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$gt_func_gnugettext_libc + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + + + + + + am_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCICONV; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 +$as_echo_n "checking for iconv... " >&6; } +if ${am_cv_func_iconv+:} false; then : + $as_echo_n "(cached) " >&6 +else + + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdlib.h> +#include <iconv.h> + +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_func_iconv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdlib.h> +#include <iconv.h> + +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_lib_iconv=yes + am_cv_func_iconv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$am_save_LIBS" + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 +$as_echo "$am_cv_func_iconv" >&6; } + if test "$am_cv_func_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 +$as_echo_n "checking for working iconv... " >&6; } +if ${am_cv_func_iconv_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + am_cv_func_iconv_works=no + for ac_iconv_const in '' 'const'; do + if test "$cross_compiling" = yes; then : + case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <iconv.h> +#include <string.h> + +#ifndef ICONV_CONST +# define ICONV_CONST $ac_iconv_const +#endif + +int +main () +{ +int result = 0; + /* Test against AIX 5.1 bug: Failures are not distinguishable from successful + returns. */ + { + iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); + if (cd_utf8_to_88591 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 1; + iconv_close (cd_utf8_to_88591); + } + } + /* Test against Solaris 10 bug: Failures are not distinguishable from + successful returns. */ + { + iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); + if (cd_ascii_to_88591 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\263"; + char buf[10]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_ascii_to_88591, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 2; + iconv_close (cd_ascii_to_88591); + } + } + /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\304"; + static char buf[2] = { (char)0xDE, (char)0xAD }; + ICONV_CONST char *inptr = input; + size_t inbytesleft = 1; + char *outptr = buf; + size_t outbytesleft = 1; + size_t res = iconv (cd_88591_to_utf8, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) + result |= 4; + iconv_close (cd_88591_to_utf8); + } + } +#if 0 /* This bug could be worked around by the caller. */ + /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_88591_to_utf8, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + result |= 8; + iconv_close (cd_88591_to_utf8); + } + } +#endif + /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is + provided. */ + if (/* Try standardized names. */ + iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) + /* Try IRIX, OSF/1 names. */ + && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) + /* Try AIX names. */ + && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) + /* Try HP-UX names. */ + && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) + result |= 16; + return result; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + am_cv_func_iconv_works=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + test "$am_cv_func_iconv_works" = no || break + done + LIBS="$am_save_LIBS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 +$as_echo "$am_cv_func_iconv_works" >&6; } + case "$am_cv_func_iconv_works" in + *no) am_func_iconv=no am_cv_lib_iconv=no ;; + *) am_func_iconv=yes ;; + esac + else + am_func_iconv=no am_cv_lib_iconv=no + fi + if test "$am_func_iconv" = yes; then + +$as_echo "#define HAVE_ICONV 1" >>confdefs.h + + fi + if test "$am_cv_lib_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 +$as_echo_n "checking how to link with libiconv... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 +$as_echo "$LIBICONV" >&6; } + else + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libintl-prefix was given. +if test "${with_libintl_prefix+set}" = set; then : + withval=$with_libintl_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && test ! -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBINTL= + LTLIBINTL= + INCINTL= + LIBINTL_PREFIX= + HAVE_LIBINTL= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='intl ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'intl'; then + LIBINTL_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'intl'; then + LIBINTL_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" + ;; + esac + done + fi + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" + done + fi + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 +$as_echo_n "checking for GNU gettext in libintl... " >&6; } +if eval \${$gt_func_gnugettext_libintl+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <libintl.h> +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + +int +main () +{ + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libintl=yes" +else + eval "$gt_func_gnugettext_libintl=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <libintl.h> +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + +int +main () +{ + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS" +fi +eval ac_res=\$$gt_func_gnugettext_libintl + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + fi + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ + || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + +$as_echo "#define ENABLE_NLS 1" >>confdefs.h + + else + USE_NLS=no + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 +$as_echo_n "checking whether to use NLS... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + if test "$USE_NLS" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 +$as_echo_n "checking where the gettext function comes from... " >&6; } + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 +$as_echo "$gt_source" >&6; } + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 +$as_echo_n "checking how to link with libintl... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 +$as_echo "$LIBINTL" >&6; } + + for element in $INCINTL; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + fi + + +$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h + + +$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h + + fi + + POSUB=po + fi + + + + INTLLIBS="$LIBINTL" + + + + + + + +# Check whether --enable-coverage was given. +if test "${enable_coverage+set}" = set; then : + enableval=$enable_coverage; use_gcov=$enableval +else + use_gcov=no +fi + + if test "x$use_gcov" = "xyes"; then + USE_COVERAGE_TRUE= + USE_COVERAGE_FALSE='#' +else + USE_COVERAGE_TRUE='#' + USE_COVERAGE_FALSE= +fi + + +ac_config_files="$ac_config_files Makefile lib/Makefile libcsv/Makefile src/Makefile utils/Makefile bash/Makefile doc/Makefile po/Makefile.in torture/Makefile torture/utils/Makefile torture/utils/config.sh man/Makefile etc/Makefile algol68/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then + as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_ALLOCA_H_TRUE}" && test -z "${GL_GENERATE_ALLOCA_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_ALLOCA_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_ERRNO_H_TRUE}" && test -z "${GL_GENERATE_ERRNO_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_ERRNO_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_FLOAT_H_TRUE}" && test -z "${GL_GENERATE_FLOAT_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_FLOAT_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + + +if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_LIMITS_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_LIMITS_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_STDINT_H_TRUE}" && test -z "${GL_GENERATE_STDINT_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_STDINT_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +CONFIG_INCLUDE=src/config.h + +if test -z "${GL_GENERATE_STDBOOL_H_TRUE}" && test -z "${GL_GENERATE_STDBOOL_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_STDBOOL_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_SCHED_H_TRUE}" && test -z "${GL_GENERATE_SCHED_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_SCHED_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_SELINUX_CONTEXT_H_TRUE}" && test -z "${GL_GENERATE_SELINUX_CONTEXT_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_SELINUX_CONTEXT_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_STDARG_H_TRUE}" && test -z "${GL_GENERATE_STDARG_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_STDARG_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_STDBOOL_H_TRUE}" && test -z "${GL_GENERATE_STDBOOL_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_STDBOOL_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then + as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + + gl_libobjs= + gl_ltlibobjs= + if test -n "$gl_LIBOBJS"; then + # Remove the extension. + sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do + gl_libobjs="$gl_libobjs $i.$ac_objext" + gl_ltlibobjs="$gl_ltlibobjs $i.lo" + done + fi + gl_LIBOBJS=$gl_libobjs + + gl_LTLIBOBJS=$gl_ltlibobjs + + + + gltests_libobjs= + gltests_ltlibobjs= + if test -n "$gltests_LIBOBJS"; then + # Remove the extension. + sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do + gltests_libobjs="$gltests_libobjs $i.$ac_objext" + gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" + done + fi + gltests_LIBOBJS=$gltests_libobjs + + gltests_LTLIBOBJS=$gltests_ltlibobjs + + +if test -z "${CHECK_TRUE}" && test -z "${CHECK_FALSE}"; then + as_fn_error $? "conditional \"CHECK\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CRYPT_TRUE}" && test -z "${CRYPT_FALSE}"; then + as_fn_error $? "conditional \"CRYPT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${COMPILE_MDB2REC_TRUE}" && test -z "${COMPILE_MDB2REC_FALSE}"; then + as_fn_error $? "conditional \"COMPILE_MDB2REC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${REMOTE_DESCRIPTORS_TRUE}" && test -z "${REMOTE_DESCRIPTORS_FALSE}"; then + as_fn_error $? "conditional \"REMOTE_DESCRIPTORS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${UUID_TYPE_TRUE}" && test -z "${UUID_TYPE_FALSE}"; then + as_fn_error $? "conditional \"UUID_TYPE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BASH_BUILTINS_TRUE}" && test -z "${BASH_BUILTINS_FALSE}"; then + as_fn_error $? "conditional \"BASH_BUILTINS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${BUILD_A68_TRUE}" && test -z "${BUILD_A68_FALSE}"; then + as_fn_error $? "conditional \"BUILD_A68\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_COVERAGE_TRUE}" && test -z "${USE_COVERAGE_FALSE}"; then + as_fn_error $? "conditional \"USE_COVERAGE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by GNU recutils $as_me 1.8, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_links="$ac_config_links" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration links: +$config_links + +Configuration commands: +$config_commands + +Report bugs to <bug-recutils@gnu.org>. +GNU recutils home page: <http://www.gnu.org/software/recutils/>. +General help using GNU software: <http://www.gnu.org/gethelp/>." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +GNU recutils config.status 1.8 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' +configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_import \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +lt_cv_nm_interface \ +nm_file_list_spec \ +lt_cv_truncate_bin \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +configure_time_dlsearch_path \ +configure_time_lt_sys_library_path; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' + +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile' + + + +GNUmakefile=$GNUmakefile +# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "$GNUmakefile") CONFIG_LINKS="$CONFIG_LINKS $GNUmakefile:$GNUmakefile" ;; + "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; + "libcsv/Makefile") CONFIG_FILES="$CONFIG_FILES libcsv/Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; + "bash/Makefile") CONFIG_FILES="$CONFIG_FILES bash/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; + "torture/Makefile") CONFIG_FILES="$CONFIG_FILES torture/Makefile" ;; + "torture/utils/Makefile") CONFIG_FILES="$CONFIG_FILES torture/utils/Makefile" ;; + "torture/utils/config.sh") CONFIG_FILES="$CONFIG_FILES torture/utils/config.sh" ;; + "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; + "etc/Makefile") CONFIG_FILES="$CONFIG_FILES etc/Makefile" ;; + "algol68/Makefile") CONFIG_FILES="$CONFIG_FILES algol68/Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' <conf$$subs.awk | sed ' +/^[^""]/{ + N + s/\n// +} +' >>$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' <confdefs.h | sed ' +s/'"$ac_delim"'/"\\\ +"/g' >>$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + :L) + # + # CONFIG_LINK + # + + if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then + : + else + # Prefer the file from the source tree if names are identical. + if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then + ac_source=$srcdir/$ac_source + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 +$as_echo "$as_me: linking $ac_source to $ac_file" >&6;} + + if test ! -r "$ac_source"; then + as_fn_error $? "$ac_source: file not found" "$LINENO" 5 + fi + rm -f "$ac_file" + + # Try a relative symlink, then a hard link, then a copy. + case $ac_source in + [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; + *) ac_rel_source=$ac_top_build_prefix$ac_source ;; + esac + ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || + ln "$ac_source" "$ac_file" 2>/dev/null || + cp -p "$ac_source" "$ac_file" || + as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 + fi + ;; + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +# The names of the tagged configurations supported by this script. +available_tags='' + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec=$shared_archive_member_spec + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name lister interface. +nm_interface=$lt_lt_cv_nm_interface + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and where our libraries should be installed. +lt_sysroot=$lt_sysroot + +# Command to truncate a binary pipe. +lt_truncate_bin=$lt_lt_cv_truncate_bin + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain=$ac_aux_dir/ltmain.sh + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; + "po-directories":C) + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + gt_tab=`printf '\t'` + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + + +if test "x$have_check" = "xno"; then + echo "warning: libcheck was not found in the system." + echo "warning: unit tests wont be compiled and executed upon make check." +fi + +if test "x$have_mdb" = "xno"; then + echo "warning: libmdb was not found in the system." + echo "warning: the mdb2rec utility won't get built." +fi + +if test "x$have_glib" = "xno"; then + echo "warning: glib was not found in the system." + echo "warning: the mdb2rec utility won't get built." +fi + +if test "x$crypt_support" = "xno"; then + echo "warning: building recutils without encryption support." +fi + +if test "x$have_uuid" = "xno"; then + echo "warning: building recutils without support for uuid types." +fi + +if test "x$bash_headers_available" = "xno" || test "x$bash_builtins_enabled" = "xno"; then + echo "warning: not building the recutils bash builtins." +fi + diff --git a/devspec.en_US/project/recutils/configure.ac b/devspec.en_US/project/recutils/configure.ac new file mode 100755 index 0000000..875de0d --- /dev/null +++ b/devspec.en_US/project/recutils/configure.ac @@ -0,0 +1,262 @@ +dnl configure.ac for GNU rec +dnl +dnl Please process this file with autoconf to get a 'configure' +dnl script. + +dnl Copyright (C) 2009-2019 Jose E. Marchesi + +dnl This program is free software: you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation, either version 3 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program. If not, see <http://www.gnu.org/licenses/>. + +AC_INIT([GNU recutils], [1.8], [bug-recutils@gnu.org]) + +dnl Must come before AM_INIT_AUTOMAKE +AC_CONFIG_AUX_DIR([build-aux]) +AM_INIT_AUTOMAKE([subdir-objects]) +AC_CONFIG_HEADERS(src/config.h) +AC_CONFIG_MACRO_DIR([m4]) + +dnl Autobuild +AB_INIT + +AC_PROG_CC +gl_EARLY + +LT_INIT +AC_PROG_CC_C99 +AM_PROG_CC_C_O + +dnl Both lex and yacc are required to generate the lexer/parser source +dnl files. + +: ${LEX='flex'} +: ${LEXLIB='-lfl'} +: ${LEX_OUTPUT_ROOT='lex.yy'} +AC_ARG_VAR([LEX], [The flex implementation to use.]) +AC_ARG_VAR([LEXLIB], [Options for linking with the flex runtime library.]) +AC_ARG_VAR([LEX_OUTPUT_ROOT], [Base of the file name that the lexer generates.]) + +gl_BISON + +dnl System +AC_CANONICAL_HOST +canonical=$host + +gl_INIT + +# GNU help2man creates man pages from --help output; in many cases, this +# is sufficient, and obviates the need to maintain man pages separately. +# However, this means invoking executables, which we generally cannot do +# when cross-compiling, so we test to avoid that (the variable +# "cross_compiling" is set by AC_PROG_CC). +if test $cross_compiling = no; then + AM_MISSING_PROG(HELP2MAN, help2man) +else + HELP2MAN=: +fi + +dnl Seach for headers +AC_CHECK_HEADERS([malloc.h string.h]) + +dnl Search for data types +AC_CHECK_TYPE(size_t, unsigned) +AC_CHECK_TYPE(off_t, long) + +dnl Search for functions +AC_FUNC_FSEEKO + +dnl Search for required libraries + +have_check=no +PKG_CHECK_MODULES([CHECK], [check], + [have_check=yes], [have_check=no]) +AM_CONDITIONAL([CHECK], [test "x$have_check" != "xno"]) +AC_SUBST([CHECK_CFLAGS]) +AC_SUBST([CHECK_LIBS]) + +have_curl=no +AC_CHECK_LIB([curl],[curl_global_init],[have_curl=yes],) +if test "x$have_curl" = "xyes"; then + CURLLIBS=-lcurl +fi +AC_SUBST([CURLLIBS]) + +have_uuid=no +AC_CHECK_LIB([uuid],[uuid_generate],[have_uuid=yes],) +if test "x$have_uuid" = "xyes"; then + UUIDLIBS=-luuid +fi +AC_SUBST([UUIDLIBS]) +AC_SUBST([have_uuid]) + +AC_ARG_ENABLE([encryption], + AS_HELP_STRING([--enable-encryption], + [Compile recutils with encryption support (default is YES)]), + [crypt_enabled=$enableval], [crypt_enabled=yes]) + +crypt_support=no +if test "x$crypt_enabled" = "xyes"; then + + AC_LIB_HAVE_LINKFLAGS([gcrypt],[gpg-error],[#include <gpg-error.h>]) + crypt_support=$HAVE_LIBGCRYPT + + if test "x$crypt_support" = "xyes"; then + AC_DEFINE([REC_CRYPT_SUPPORT],[1],[Compile encryption support]) + fi +fi + +AM_CONDITIONAL([CRYPT], [test "x$crypt_support" = "xyes"]) +AC_SUBST([crypt_support]) + +have_glib=no +PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.0.0], + [have_glib=yes], [have_glib=no]) + +have_mdb=no +AC_CHECK_LIB([mdb],[mdb_init],[have_mdb=yes],) +if test "x$have_mdb" = "xyes"; then + MDBLIBS=-lmdb + + OLD_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS $pkg_cv_GLIB_CFLAGS" + mdb_uses_sdatetime=no + AC_CHECK_DECL([MDB_SDATETIME],[mdb_uses_sdatetime=yes],,[#include <glib.h> +#include <mdbtools.h>]) + CFLAGS=$OLD_CFLAGS + + if test "x$mdb_uses_sdatetime" = "xyes"; then + MDB_DATETIME="MDB_SDATETIME" + else + MDB_DATETIME="MDB_DATETIME" + fi + + AC_SUBST([MDB_DATETIME]) +fi +AC_SUBST([MDBLIBS]) + +AM_CONDITIONAL([COMPILE_MDB2REC], + [test "x$have_glib" = "xyes" && test "x$have_mdb" = "xyes"]) +AM_CONDITIONAL([REMOTE_DESCRIPTORS], [test "x$have_curl" = "xyes"]) +AM_CONDITIONAL([UUID_TYPE], [test "x$have_uuid" = "xyes"]) + +dnl Bash builtins + +dnl It would be much better to use AC_CHECK_HEADER([bash/config.h]) instead +dnl of a fixed value like /usr/include/bash, but then it would be difficult +dnl to set a proper search path for the preprocessor, since the bash +dnl headers which are needed to compile loadable builtins are not +dnl very well designed. + +BASH_HEADERS=/usr/include/bash +AC_ARG_WITH([bash-headers], + AS_HELP_STRING([--with-bash-headers], + [location of the bash header files (default is /usr/include/bash)]), + [BASH_HEADERS=$withval],) + +if test -f ${BASH_HEADERS}/config.h; then + AC_SUBST([BASH_HEADERS]) + bash_headers_available=yes +else + bash_headers_available=no +fi + +AC_ARG_ENABLE([bash-builtins], + AS_HELP_STRING([--enable-bash-builtins], + [Build the recutils bash builtins (default is YES)]), + [bash_builtins_enabled=$enableval], [bash_builtins_enabled=yes]) + +AM_CONDITIONAL([BASH_BUILTINS], + [test "x$bash_headers_available" = "xyes" && test "x$bash_builtins_enabled" = "xyes"]) + +dnl Check for an Algol 68 compiler + +AC_ARG_ENABLE([algol68], + AS_HELP_STRING([--enable-algol68], + [Build the bindings for Algol 68 (default is NO)]), + [algol68_enabled=$enableval], [algol68_enabled=no]) + +if test "x$algol68_enabled" = "xyes"; then + AC_CHECK_PROGS([CA68], [ca68]) +fi + +AC_SUBST([CA68]) +AM_CONDITIONAL([BUILD_A68],[test -n "$CA68" && test "x$algol68_enabled" = "xyes"]) + +dnl Platform-based compilation options +compile_w32_system=no +case "${host}" in + *-mingw32*) + compile_w32_system=yes + ;; + *) + ;; +esac + +dnl i18n with gettext +AM_GNU_GETTEXT_VERSION([0.19.8]) +AM_GNU_GETTEXT([external]) + +dnl gcov compilation +AC_ARG_ENABLE([coverage], + AS_HELP_STRING([--enable-coverage], + [Compile the library with code coverage support (default is NO)]), + [use_gcov=$enableval], [use_gcov=no]) +AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"]) + +dnl Generate output files +AC_CONFIG_FILES(Makefile + lib/Makefile + libcsv/Makefile + src/Makefile + utils/Makefile + bash/Makefile + doc/Makefile + po/Makefile.in + torture/Makefile + torture/utils/Makefile + torture/utils/config.sh + man/Makefile + etc/Makefile + algol68/Makefile) +AC_OUTPUT + +dnl Report warnings + +if test "x$have_check" = "xno"; then + echo "warning: libcheck was not found in the system." + echo "warning: unit tests wont be compiled and executed upon make check." +fi + +if test "x$have_mdb" = "xno"; then + echo "warning: libmdb was not found in the system." + echo "warning: the mdb2rec utility won't get built." +fi + +if test "x$have_glib" = "xno"; then + echo "warning: glib was not found in the system." + echo "warning: the mdb2rec utility won't get built." +fi + +if test "x$crypt_support" = "xno"; then + echo "warning: building recutils without encryption support." +fi + +if test "x$have_uuid" = "xno"; then + echo "warning: building recutils without support for uuid types." +fi + +if test "x$bash_headers_available" = "xno" || test "x$bash_builtins_enabled" = "xno"; then + echo "warning: not building the recutils bash builtins." +fi + +dnl End of configure.ac diff --git a/devspec.en_US/project/recutils/doc/Makefile b/devspec.en_US/project/recutils/doc/Makefile new file mode 100755 index 0000000..e37d6ed --- /dev/null +++ b/devspec.en_US/project/recutils/doc/Makefile @@ -0,0 +1,2077 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# doc/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# doc/Makefile.am + +# Copyright (C) 2009-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/recutils +pkgincludedir = $(includedir)/recutils +pkglibdir = $(libdir)/recutils +pkglibexecdir = $(libexecdir)/recutils +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +subdir = doc +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/version.texi \ + $(srcdir)/stamp-vti $(srcdir)/version-rec-mode.texi \ + $(srcdir)/stamp-1 $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_$(V)) +am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +AM_V_DVIPS = $(am__v_DVIPS_$(V)) +am__v_DVIPS_ = $(am__v_DVIPS_$(AM_DEFAULT_VERBOSITY)) +am__v_DVIPS_0 = @echo " DVIPS " $@; +am__v_DVIPS_1 = +AM_V_MAKEINFO = $(am__v_MAKEINFO_$(V)) +am__v_MAKEINFO_ = $(am__v_MAKEINFO_$(AM_DEFAULT_VERBOSITY)) +am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; +am__v_MAKEINFO_1 = +AM_V_INFOHTML = $(am__v_INFOHTML_$(V)) +am__v_INFOHTML_ = $(am__v_INFOHTML_$(AM_DEFAULT_VERBOSITY)) +am__v_INFOHTML_0 = @echo " INFOHTML" $@; +am__v_INFOHTML_1 = +AM_V_TEXI2DVI = $(am__v_TEXI2DVI_$(V)) +am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_$(AM_DEFAULT_VERBOSITY)) +am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; +am__v_TEXI2DVI_1 = +AM_V_TEXI2PDF = $(am__v_TEXI2PDF_$(V)) +am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_$(AM_DEFAULT_VERBOSITY)) +am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; +am__v_TEXI2PDF_1 = +AM_V_texinfo = $(am__v_texinfo_$(V)) +am__v_texinfo_ = $(am__v_texinfo_$(AM_DEFAULT_VERBOSITY)) +am__v_texinfo_0 = -q +am__v_texinfo_1 = +AM_V_texidevnull = $(am__v_texidevnull_$(V)) +am__v_texidevnull_ = $(am__v_texidevnull_$(AM_DEFAULT_VERBOSITY)) +am__v_texidevnull_0 = > /dev/null +am__v_texidevnull_1 = +INFO_DEPS = $(srcdir)/recutils.info $(srcdir)/rec-mode.info +TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex +am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux +DVIS = recutils.dvi rec-mode.dvi +PDFS = recutils.pdf rec-mode.pdf +PSS = recutils.ps rec-mode.ps +HTMLS = recutils.html rec-mode.html +TEXINFOS = recutils.texi rec-mode.texi +TEXI2DVI = texi2dvi +TEXI2PDF = $(TEXI2DVI) --pdf --batch +MAKEINFOHTML = $(MAKEINFO) --html +AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) +DVIPS = dvips +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__installdirs = "$(DESTDIR)$(infodir)" +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(recutils_TEXINFOS) $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/mdate-sh \ + $(top_srcdir)/build-aux/texinfo.tex texinfo.tex +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing aclocal-1.15 +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = $${TAR-tar} +AM_DEFAULT_VERBOSITY = 1 +APPLE_UNIVERSAL_BUILD = 0 +AR = ar +ARFLAGS = cr +ASM_SYMBOL_PREFIX = "" +AUTOCONF = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoconf +AUTOHEADER = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoheader +AUTOMAKE = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing automake-1.15 +AWK = gawk +BASH_HEADERS = /usr/include/bash +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CA68 = +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CHECK_CFLAGS = +CHECK_LIBS = +CONFIG_INCLUDE = src/config.h +CPP = gcc -E +CPPFLAGS = +CURLLIBS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = false +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FGREP = /bin/grep -F +FLOAT_H = +FLOOR_LIBM = -lm +GETOPT_CDEFS_H = +GETOPT_H = +GETTEXT_MACRO_VERSION = 0.19 +GLIBC21 = yes +GLIB_CFLAGS = +GLIB_LIBS = +GMSGFMT = /usr/bin/msgfmt +GMSGFMT_015 = /usr/bin/msgfmt +GNULIB_ACOSF = 0 +GNULIB_ACOSL = 0 +GNULIB_ASINF = 0 +GNULIB_ASINL = 0 +GNULIB_ATAN2F = 0 +GNULIB_ATANF = 0 +GNULIB_ATANL = 0 +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CANONICALIZE_FILE_NAME = 1 +GNULIB_CBRT = 0 +GNULIB_CBRTF = 0 +GNULIB_CBRTL = 0 +GNULIB_CEIL = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHDIR = 1 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 1 +GNULIB_COPYSIGN = 0 +GNULIB_COPYSIGNF = 0 +GNULIB_COPYSIGNL = 0 +GNULIB_COSF = 0 +GNULIB_COSHF = 0 +GNULIB_COSL = 0 +GNULIB_CTIME = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP = 0 +GNULIB_DUP2 = 1 +GNULIB_DUP3 = 0 +GNULIB_DUPLOCALE = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 1 +GNULIB_EXP2 = 0 +GNULIB_EXP2F = 0 +GNULIB_EXP2L = 0 +GNULIB_EXPF = 0 +GNULIB_EXPL = 0 +GNULIB_EXPLICIT_BZERO = 0 +GNULIB_EXPM1 = 0 +GNULIB_EXPM1F = 0 +GNULIB_EXPM1L = 0 +GNULIB_FABSF = 0 +GNULIB_FABSL = 0 +GNULIB_FACCESSAT = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCHMODAT = 0 +GNULIB_FCHOWNAT = 0 +GNULIB_FCLOSE = 0 +GNULIB_FCNTL = 1 +GNULIB_FDATASYNC = 0 +GNULIB_FDOPEN = 0 +GNULIB_FFLUSH = 0 +GNULIB_FFS = 0 +GNULIB_FFSL = 0 +GNULIB_FFSLL = 0 +GNULIB_FGETC = 1 +GNULIB_FGETS = 1 +GNULIB_FLOCK = 1 +GNULIB_FLOOR = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FMA = 0 +GNULIB_FMAF = 0 +GNULIB_FMAL = 0 +GNULIB_FMOD = 0 +GNULIB_FMODF = 0 +GNULIB_FMODL = 0 +GNULIB_FOPEN = 0 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 1 +GNULIB_FPURGE = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREAD = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPF = 0 +GNULIB_FREXPL = 1 +GNULIB_FSCANF = 1 +GNULIB_FSEEK = 1 +GNULIB_FSEEKO = 1 +GNULIB_FSTAT = 1 +GNULIB_FSTATAT = 0 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 1 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FUTIMENS = 0 +GNULIB_FWRITE = 1 +GNULIB_GETC = 1 +GNULIB_GETCHAR = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 1 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETGROUPS = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 1 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETPASS = 1 +GNULIB_GETSUBOPT = 0 +GNULIB_GETTIMEOFDAY = 1 +GNULIB_GETUSERSHELL = 0 +GNULIB_GL_UNISTD_H_GETOPT = +GNULIB_GRANTPT = 0 +GNULIB_GROUP_MEMBER = 1 +GNULIB_HYPOT = 0 +GNULIB_HYPOTF = 0 +GNULIB_HYPOTL = 0 +GNULIB_ILOGB = 0 +GNULIB_ILOGBF = 0 +GNULIB_ILOGBL = 0 +GNULIB_IMAXABS = 0 +GNULIB_IMAXDIV = 0 +GNULIB_ISATTY = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_ISWBLANK = 0 +GNULIB_ISWCTYPE = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPF = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LINKAT = 0 +GNULIB_LOCALECONV = 1 +GNULIB_LOCALENAME = 0 +GNULIB_LOCALTIME = 0 +GNULIB_LOG = 0 +GNULIB_LOG10 = 0 +GNULIB_LOG10F = 0 +GNULIB_LOG10L = 0 +GNULIB_LOG1P = 0 +GNULIB_LOG1PF = 0 +GNULIB_LOG1PL = 0 +GNULIB_LOG2 = 0 +GNULIB_LOG2F = 0 +GNULIB_LOG2L = 0 +GNULIB_LOGB = 0 +GNULIB_LOGBF = 0 +GNULIB_LOGBL = 0 +GNULIB_LOGF = 0 +GNULIB_LOGL = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MBRLEN = 1 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MBTOWC = 1 +GNULIB_MEMCHR = 1 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDIRAT = 0 +GNULIB_MKDTEMP = 0 +GNULIB_MKFIFO = 0 +GNULIB_MKFIFOAT = 0 +GNULIB_MKNOD = 0 +GNULIB_MKNODAT = 0 +GNULIB_MKOSTEMP = 1 +GNULIB_MKOSTEMPS = 0 +GNULIB_MKSTEMP = 1 +GNULIB_MKSTEMPS = 0 +GNULIB_MKTIME = 1 +GNULIB_MODF = 0 +GNULIB_MODFF = 0 +GNULIB_MODFL = 0 +GNULIB_NANOSLEEP = 0 +GNULIB_NL_LANGINFO = 1 +GNULIB_NONBLOCKING = 0 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_OPENAT = 0 +GNULIB_OVERRIDES_STRUCT_STAT = 0 +GNULIB_OVERRIDES_WINT_T = 0 +GNULIB_PCLOSE = 0 +GNULIB_PERROR = 0 +GNULIB_PIPE = 0 +GNULIB_PIPE2 = 0 +GNULIB_POPEN = 0 +GNULIB_POSIX_OPENPT = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_POWF = 0 +GNULIB_PREAD = 0 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 1 +GNULIB_PTHREAD_SIGMASK = 0 +GNULIB_PTSNAME = 0 +GNULIB_PTSNAME_R = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_PWRITE = 0 +GNULIB_QSORT_R = 0 +GNULIB_RAISE = 1 +GNULIB_RANDOM = 0 +GNULIB_RANDOM_R = 1 +GNULIB_RAWMEMCHR = 1 +GNULIB_READ = 0 +GNULIB_READLINK = 1 +GNULIB_READLINKAT = 0 +GNULIB_REALLOCARRAY = 0 +GNULIB_REALLOC_POSIX = 1 +GNULIB_REALPATH = 1 +GNULIB_REMAINDER = 0 +GNULIB_REMAINDERF = 0 +GNULIB_REMAINDERL = 0 +GNULIB_REMOVE = 0 +GNULIB_RENAME = 1 +GNULIB_RENAMEAT = 0 +GNULIB_RINT = 0 +GNULIB_RINTF = 0 +GNULIB_RINTL = 0 +GNULIB_RMDIR = 1 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SCANF = 1 +GNULIB_SECURE_GETENV = 1 +GNULIB_SETENV = 1 +GNULIB_SETHOSTNAME = 0 +GNULIB_SETLOCALE = 0 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SINF = 0 +GNULIB_SINHF = 0 +GNULIB_SINL = 0 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 0 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_SQRTF = 0 +GNULIB_SQRTL = 0 +GNULIB_STAT = 1 +GNULIB_STDIO_H_NONBLOCKING = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 1 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 1 +GNULIB_STRERROR = 1 +GNULIB_STRERROR_R = 0 +GNULIB_STRFTIME = 0 +GNULIB_STRNCAT = 0 +GNULIB_STRNDUP = 0 +GNULIB_STRNLEN = 0 +GNULIB_STRPBRK = 0 +GNULIB_STRPTIME = 0 +GNULIB_STRSEP = 1 +GNULIB_STRSIGNAL = 0 +GNULIB_STRSTR = 0 +GNULIB_STRTOD = 0 +GNULIB_STRTOIMAX = 0 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRTOUMAX = 0 +GNULIB_STRVERSCMP = 1 +GNULIB_SYMLINK = 0 +GNULIB_SYMLINKAT = 0 +GNULIB_SYSTEM_POSIX = 0 +GNULIB_TANF = 0 +GNULIB_TANHF = 0 +GNULIB_TANL = 0 +GNULIB_TIMEGM = 1 +GNULIB_TIME_R = 1 +GNULIB_TIME_RZ = 1 +GNULIB_TMPFILE = 0 +GNULIB_TOWCTRANS = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCATE = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_TTYNAME_R = 0 +GNULIB_TZSET = 1 +GNULIB_UNISTD_H_NONBLOCKING = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNLINK = 0 +GNULIB_UNLINKAT = 0 +GNULIB_UNLOCKPT = 0 +GNULIB_UNSETENV = 1 +GNULIB_USLEEP = 0 +GNULIB_UTIMENSAT = 0 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 1 +GNULIB_VFSCANF = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSCANF = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WAITPID = 1 +GNULIB_WCPCPY = 0 +GNULIB_WCPNCPY = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSCASECMP = 0 +GNULIB_WCSCAT = 0 +GNULIB_WCSCHR = 0 +GNULIB_WCSCMP = 0 +GNULIB_WCSCOLL = 0 +GNULIB_WCSCPY = 0 +GNULIB_WCSCSPN = 0 +GNULIB_WCSDUP = 0 +GNULIB_WCSFTIME = 0 +GNULIB_WCSLEN = 0 +GNULIB_WCSNCASECMP = 0 +GNULIB_WCSNCAT = 0 +GNULIB_WCSNCMP = 0 +GNULIB_WCSNCPY = 0 +GNULIB_WCSNLEN = 0 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSPBRK = 0 +GNULIB_WCSRCHR = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCSSPN = 0 +GNULIB_WCSSTR = 0 +GNULIB_WCSTOK = 0 +GNULIB_WCSWIDTH = 0 +GNULIB_WCSXFRM = 0 +GNULIB_WCTOB = 1 +GNULIB_WCTOMB = 1 +GNULIB_WCTRANS = 0 +GNULIB_WCTYPE = 0 +GNULIB_WCWIDTH = 0 +GNULIB_WMEMCHR = 0 +GNULIB_WMEMCMP = 0 +GNULIB_WMEMCPY = 0 +GNULIB_WMEMMOVE = 0 +GNULIB_WMEMSET = 0 +GNULIB_WRITE = 0 +GNULIB__EXIT = 0 +GREP = /bin/grep +HAVE_ACOSF = 1 +HAVE_ACOSL = 1 +HAVE_ASINF = 1 +HAVE_ASINL = 1 +HAVE_ATAN2F = 1 +HAVE_ATANF = 1 +HAVE_ATANL = 1 +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_C99_STDINT_H = 1 +HAVE_CANONICALIZE_FILE_NAME = 1 +HAVE_CBRT = 1 +HAVE_CBRTF = 1 +HAVE_CBRTL = 1 +HAVE_CHOWN = 1 +HAVE_COPYSIGN = 1 +HAVE_COPYSIGNL = 1 +HAVE_COSF = 1 +HAVE_COSHF = 1 +HAVE_COSL = 1 +HAVE_CRTDEFS_H = 0 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_CBRTF = 1 +HAVE_DECL_CBRTL = 1 +HAVE_DECL_CEILF = 1 +HAVE_DECL_CEILL = 1 +HAVE_DECL_COPYSIGNF = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXP2 = 1 +HAVE_DECL_EXP2F = 1 +HAVE_DECL_EXP2L = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_EXPM1L = 1 +HAVE_DECL_FCHDIR = 1 +HAVE_DECL_FDATASYNC = 1 +HAVE_DECL_FLOORF = 1 +HAVE_DECL_FLOORL = 1 +HAVE_DECL_FPURGE = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_FSEEKO = 1 +HAVE_DECL_FTELLO = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETDOMAINNAME = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_GETPAGESIZE = 1 +HAVE_DECL_GETUSERSHELL = 1 +HAVE_DECL_IMAXABS = 1 +HAVE_DECL_IMAXDIV = 1 +HAVE_DECL_INITSTATE = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOCALTIME_R = 1 +HAVE_DECL_LOG10L = 1 +HAVE_DECL_LOG2 = 1 +HAVE_DECL_LOG2F = 1 +HAVE_DECL_LOG2L = 1 +HAVE_DECL_LOGB = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_REMAINDER = 1 +HAVE_DECL_REMAINDERL = 1 +HAVE_DECL_RINTF = 1 +HAVE_DECL_ROUND = 1 +HAVE_DECL_ROUNDF = 1 +HAVE_DECL_ROUNDL = 1 +HAVE_DECL_SETENV = 1 +HAVE_DECL_SETHOSTNAME = 1 +HAVE_DECL_SETSTATE = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR_R = 1 +HAVE_DECL_STRNCASECMP = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOIMAX = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_STRTOUMAX = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCATE = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_TRUNCL = 1 +HAVE_DECL_TTYNAME_R = 1 +HAVE_DECL_UNSETENV = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_DUP3 = 1 +HAVE_DUPLOCALE = 1 +HAVE_EUIDACCESS = 1 +HAVE_EXPF = 1 +HAVE_EXPL = 1 +HAVE_EXPLICIT_BZERO = 1 +HAVE_EXPM1 = 1 +HAVE_EXPM1F = 1 +HAVE_FABSF = 1 +HAVE_FABSL = 1 +HAVE_FACCESSAT = 1 +HAVE_FCHDIR = 1 +HAVE_FCHMODAT = 1 +HAVE_FCHOWNAT = 1 +HAVE_FCNTL = 1 +HAVE_FDATASYNC = 1 +HAVE_FEATURES_H = 1 +HAVE_FFS = 1 +HAVE_FFSL = 1 +HAVE_FFSLL = 1 +HAVE_FLOCK = 1 +HAVE_FMA = 1 +HAVE_FMAF = 1 +HAVE_FMAL = 1 +HAVE_FMODF = 1 +HAVE_FMODL = 1 +HAVE_FREELOCALE = 1 +HAVE_FREXPF = 1 +HAVE_FSEEKO = 1 +HAVE_FSTATAT = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_FUTIMENS = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETGROUPS = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETLOGIN = 1 +HAVE_GETOPT_H = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETPASS = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETTIMEOFDAY = 1 +HAVE_GRANTPT = 1 +HAVE_GROUP_MEMBER = 1 +HAVE_HYPOTF = 1 +HAVE_HYPOTL = 1 +HAVE_ILOGB = 1 +HAVE_ILOGBF = 1 +HAVE_ILOGBL = 1 +HAVE_IMAXDIV_T = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWBLANK = 1 +HAVE_ISWCNTRL = 1 +HAVE_LANGINFO_ALTMON = 0 +HAVE_LANGINFO_CODESET = 1 +HAVE_LANGINFO_ERA = 1 +HAVE_LANGINFO_H = 1 +HAVE_LANGINFO_T_FMT_AMPM = 1 +HAVE_LANGINFO_YESEXPR = 1 +HAVE_LCHMOD = 1 +HAVE_LCHOWN = 1 +HAVE_LDEXPF = 1 +HAVE_LIBGCRYPT = no +HAVE_LINK = 1 +HAVE_LINKAT = 1 +HAVE_LOG10F = 1 +HAVE_LOG10L = 1 +HAVE_LOG1P = 1 +HAVE_LOG1PF = 1 +HAVE_LOG1PL = 1 +HAVE_LOGBF = 1 +HAVE_LOGBL = 1 +HAVE_LOGF = 1 +HAVE_LOGL = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MAX_ALIGN_T = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSLEN = 0 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMCHR = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDIRAT = 1 +HAVE_MKDTEMP = 1 +HAVE_MKFIFO = 1 +HAVE_MKFIFOAT = 1 +HAVE_MKNOD = 1 +HAVE_MKNODAT = 1 +HAVE_MKOSTEMP = 1 +HAVE_MKOSTEMPS = 1 +HAVE_MKSTEMP = 1 +HAVE_MKSTEMPS = 1 +HAVE_MODFF = 1 +HAVE_MODFL = 1 +HAVE_MSVC_INVALID_PARAMETER_HANDLER = 0 +HAVE_NANOSLEEP = 1 +HAVE_NEWLOCALE = 1 +HAVE_NL_LANGINFO = 1 +HAVE_OPENAT = 1 +HAVE_OS_H = 0 +HAVE_PCLOSE = 1 +HAVE_PIPE = 1 +HAVE_PIPE2 = 1 +HAVE_POPEN = 1 +HAVE_POSIX_OPENPT = 1 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_POSIX_SPAWNATTR_T = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = 1 +HAVE_POWF = 1 +HAVE_PREAD = 1 +HAVE_PTHREAD_SIGMASK = 1 +HAVE_PTSNAME = 1 +HAVE_PTSNAME_R = 1 +HAVE_PWRITE = 1 +HAVE_QSORT_R = 1 +HAVE_RAISE = 1 +HAVE_RANDOM = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_READLINKAT = 1 +HAVE_REALLOCARRAY = 1 +HAVE_REALPATH = 1 +HAVE_REMAINDER = 1 +HAVE_REMAINDERF = 1 +HAVE_RENAMEAT = 1 +HAVE_RINT = 1 +HAVE_RINTL = 1 +HAVE_RPMATCH = 1 +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0 +HAVE_SCHED_H = +HAVE_SECURE_GETENV = 1 +HAVE_SETENV = 1 +HAVE_SETHOSTNAME = 1 +HAVE_SIGACTION = 1 +HAVE_SIGHANDLER_T = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SINF = 1 +HAVE_SINHF = 1 +HAVE_SINL = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_SQRTF = 1 +HAVE_SQRTL = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASECMP = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRINGS_H = 1 +HAVE_STRPBRK = 1 +HAVE_STRPTIME = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYMLINK = 1 +HAVE_SYMLINKAT = 1 +HAVE_SYS_BITYPES_H = 0 +HAVE_SYS_CDEFS_H = +HAVE_SYS_FILE_H = 1 +HAVE_SYS_INTTYPES_H = 0 +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TANF = 1 +HAVE_TANHF = 1 +HAVE_TANL = 1 +HAVE_TIMEGM = 1 +HAVE_TIMEZONE_T = 0 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_TZSET = 1 +HAVE_UNISTD_H = 1 +HAVE_UNLINKAT = 1 +HAVE_UNLOCKPT = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_USLEEP = 1 +HAVE_UTIMENSAT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCHAR_T = 1 +HAVE_WCPCPY = 1 +HAVE_WCPNCPY = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSCASECMP = 1 +HAVE_WCSCAT = 1 +HAVE_WCSCHR = 1 +HAVE_WCSCMP = 1 +HAVE_WCSCOLL = 1 +HAVE_WCSCPY = 1 +HAVE_WCSCSPN = 1 +HAVE_WCSDUP = 1 +HAVE_WCSFTIME = 1 +HAVE_WCSLEN = 1 +HAVE_WCSNCASECMP = 1 +HAVE_WCSNCAT = 1 +HAVE_WCSNCMP = 1 +HAVE_WCSNCPY = 1 +HAVE_WCSNLEN = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSPBRK = 1 +HAVE_WCSRCHR = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCSSPN = 1 +HAVE_WCSSTR = 1 +HAVE_WCSTOK = 1 +HAVE_WCSWIDTH = 1 +HAVE_WCSXFRM = 1 +HAVE_WCTRANS_T = 1 +HAVE_WCTYPE_H = 1 +HAVE_WCTYPE_T = 1 +HAVE_WINSOCK2_H = 0 +HAVE_WINT_T = 1 +HAVE_WMEMCHR = 1 +HAVE_WMEMCMP = 1 +HAVE_WMEMCPY = 1 +HAVE_WMEMMOVE = 1 +HAVE_WMEMSET = 1 +HAVE_XLOCALE_H = 1 +HAVE__BOOL = 1 +HAVE__EXIT = 1 +HELP2MAN = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing help2man +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +INT32_MAX_LT_INTMAX_MAX = 1 +INT64_MAX_EQ_LONG_MAX = 0 +INTLLIBS = +INTL_MACOSX_LIBS = +LD = /usr/bin/ld +LDFLAGS = +LEX = flex +LEXLIB = -lfl +LEX_OUTPUT_ROOT = lex.yy +LIBGCRYPT = +LIBGCRYPT_PREFIX = +LIBICONV = -liconv +LIBINTL = +LIBMULTITHREAD = -pthread -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBREADLINE = +LIBS = +LIBTHREAD = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIB_ACL = +LIB_CLOCK_GETTIME = +LIB_EACCESS = +LIB_POSIX_SPAWN = +LIB_SELINUX = +LIMITS_H = limits.h +LIPO = +LN_S = ln -s +LOCALCHARSET_TESTS_ENVIRONMENT = +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTALLOCA = +LTLIBGCRYPT = +LTLIBICONV = -liconv +LTLIBINTL = +LTLIBMULTITHREAD = -pthread +LTLIBOBJS = +LTLIBPTH = +LTLIBREADLINE = +LTLIBTHREAD = +LT_SYS_LIBRARY_PATH = +MAKEINFO = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing makeinfo +MANIFEST_TOOL = : +MDBLIBS = +MDB_DATETIME = +MKDIR_P = /bin/mkdir -p +MSGFMT = /usr/bin/msgfmt +MSGFMT_015 = /usr/bin/msgfmt +MSGMERGE = /usr/bin/msgmerge +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = <fcntl.h> +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = <getopt.h> +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = <inttypes.h> +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = <langinfo.h> +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = <limits.h> +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = <locale.h> +NEXT_AS_FIRST_DIRECTIVE_MATH_H = <math.h> +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = <signal.h> +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = <spawn.h> +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = <stdint.h> +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = <stdio.h> +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = <stdlib.h> +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = <strings.h> +NEXT_AS_FIRST_DIRECTIVE_STRING_H = <string.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = <sys/file.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = <sys/stat.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = <sys/time.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = <sys/types.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = <sys/wait.h> +NEXT_AS_FIRST_DIRECTIVE_TIME_H = <time.h> +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = <unistd.h> +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = <wchar.h> +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = <wctype.h> +NEXT_ERRNO_H = +NEXT_FCNTL_H = <fcntl.h> +NEXT_FLOAT_H = +NEXT_GETOPT_H = <getopt.h> +NEXT_INTTYPES_H = <inttypes.h> +NEXT_LANGINFO_H = <langinfo.h> +NEXT_LIMITS_H = <limits.h> +NEXT_LOCALE_H = <locale.h> +NEXT_MATH_H = <math.h> +NEXT_SCHED_H = +NEXT_SELINUX_SELINUX_H = +NEXT_SIGNAL_H = <signal.h> +NEXT_SPAWN_H = <spawn.h> +NEXT_STDARG_H = <stdarg.h> +NEXT_STDDEF_H = +NEXT_STDINT_H = <stdint.h> +NEXT_STDIO_H = <stdio.h> +NEXT_STDLIB_H = <stdlib.h> +NEXT_STRINGS_H = <strings.h> +NEXT_STRING_H = <string.h> +NEXT_SYS_FILE_H = <sys/file.h> +NEXT_SYS_STAT_H = <sys/stat.h> +NEXT_SYS_TIME_H = <sys/time.h> +NEXT_SYS_TYPES_H = <sys/types.h> +NEXT_SYS_WAIT_H = <sys/wait.h> +NEXT_TIME_H = <time.h> +NEXT_UNISTD_H = <unistd.h> +NEXT_WCHAR_H = <wchar.h> +NEXT_WCTYPE_H = <wctype.h> +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = recutils +PACKAGE_BUGREPORT = bug-recutils@gnu.org +PACKAGE_NAME = GNU recutils +PACKAGE_STRING = GNU recutils 1.8 +PACKAGE_TARNAME = recutils +PACKAGE_URL = http://www.gnu.org/software/recutils/ +PACKAGE_VERSION = 1.8 +PATH_SEPARATOR = : +PKG_CONFIG = /usr/bin/pkg-config +PKG_CONFIG_LIBDIR = +PKG_CONFIG_PATH = +POSUB = po +PRAGMA_COLUMNS = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PRIPTR_PREFIX = "l" +PRI_MACROS_BROKEN = 0 +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = 0 +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_ACOSF = 0 +REPLACE_ASINF = 0 +REPLACE_ATAN2F = 0 +REPLACE_ATANF = 0 +REPLACE_BTOWC = 0 +REPLACE_CALLOC = 0 +REPLACE_CANONICALIZE_FILE_NAME = 0 +REPLACE_CBRTF = 0 +REPLACE_CBRTL = 0 +REPLACE_CEIL = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_COSF = 0 +REPLACE_COSHF = 0 +REPLACE_CTIME = GNULIB_PORTCHECK +REPLACE_DPRINTF = 0 +REPLACE_DUP = 0 +REPLACE_DUP2 = 0 +REPLACE_DUPLOCALE = 0 +REPLACE_EXP2 = 0 +REPLACE_EXP2L = 0 +REPLACE_EXPF = 0 +REPLACE_EXPM1 = 0 +REPLACE_EXPM1F = 0 +REPLACE_FABSL = 0 +REPLACE_FACCESSAT = 0 +REPLACE_FCHOWNAT = 0 +REPLACE_FCLOSE = 0 +REPLACE_FCNTL = 1 +REPLACE_FDOPEN = 0 +REPLACE_FFLUSH = 0 +REPLACE_FLOOR = 0 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FMA = 0 +REPLACE_FMAF = 0 +REPLACE_FMAL = 0 +REPLACE_FMOD = 0 +REPLACE_FMODF = 0 +REPLACE_FMODL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 1 +REPLACE_FPURGE = 0 +REPLACE_FREELOCALE = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPF = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 0 +REPLACE_FSTAT = 0 +REPLACE_FSTATAT = 0 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_FTRUNCATE = 0 +REPLACE_FUTIMENS = 0 +REPLACE_GETCWD = 0 +REPLACE_GETDELIM = 0 +REPLACE_GETDOMAINNAME = 0 +REPLACE_GETDTABLESIZE = 0 +REPLACE_GETGROUPS = 0 +REPLACE_GETLINE = 0 +REPLACE_GETLOGIN_R = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETPASS = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_GMTIME = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_HYPOT = 0 +REPLACE_HYPOTF = 0 +REPLACE_HYPOTL = 0 +REPLACE_ILOGB = 0 +REPLACE_ILOGBF = 0 +REPLACE_ILOGBL = 0 +REPLACE_ISATTY = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWBLANK = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_ITOLD = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LINK = 0 +REPLACE_LINKAT = 0 +REPLACE_LOCALECONV = 0 +REPLACE_LOCALTIME = 0 +REPLACE_LOCALTIME_R = 0 +REPLACE_LOG = 0 +REPLACE_LOG10 = 0 +REPLACE_LOG10F = 0 +REPLACE_LOG10L = 0 +REPLACE_LOG1P = 0 +REPLACE_LOG1PF = 0 +REPLACE_LOG1PL = 0 +REPLACE_LOG2 = 0 +REPLACE_LOG2F = 0 +REPLACE_LOG2L = 0 +REPLACE_LOGB = 0 +REPLACE_LOGBF = 0 +REPLACE_LOGBL = 0 +REPLACE_LOGF = 0 +REPLACE_LOGL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MALLOC = 0 +REPLACE_MBRLEN = 1 +REPLACE_MBRTOWC = 1 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MBTOWC = 0 +REPLACE_MEMCHR = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKFIFO = 0 +REPLACE_MKNOD = 0 +REPLACE_MKSTEMP = 0 +REPLACE_MKTIME = 0 +REPLACE_MODF = 0 +REPLACE_MODFF = 0 +REPLACE_MODFL = 0 +REPLACE_NAN = 0 +REPLACE_NANOSLEEP = GNULIB_PORTCHECK +REPLACE_NEWLOCALE = 0 +REPLACE_NL_LANGINFO = 1 +REPLACE_NULL = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_OPENAT = 0 +REPLACE_PERROR = 0 +REPLACE_POPEN = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 0 +REPLACE_PREAD = 0 +REPLACE_PRINTF = 1 +REPLACE_PTHREAD_SIGMASK = 0 +REPLACE_PTSNAME = 0 +REPLACE_PTSNAME_R = 0 +REPLACE_PUTENV = 0 +REPLACE_PWRITE = 0 +REPLACE_QSORT_R = 0 +REPLACE_RAISE = 0 +REPLACE_RANDOM_R = 0 +REPLACE_READ = 0 +REPLACE_READLINK = 0 +REPLACE_READLINKAT = 0 +REPLACE_REALLOC = 0 +REPLACE_REALPATH = 0 +REPLACE_REMAINDER = 0 +REPLACE_REMAINDERF = 0 +REPLACE_REMAINDERL = 0 +REPLACE_REMOVE = 0 +REPLACE_RENAME = 0 +REPLACE_RENAMEAT = 0 +REPLACE_RMDIR = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SETENV = 0 +REPLACE_SETLOCALE = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SINF = 0 +REPLACE_SINHF = 0 +REPLACE_SLEEP = 0 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_SQRTF = 0 +REPLACE_SQRTL = 0 +REPLACE_STAT = 0 +REPLACE_STDIO_READ_FUNCS = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STPNCPY = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRCHRNUL = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRERROR_R = 0 +REPLACE_STRFTIME = GNULIB_PORTCHECK +REPLACE_STRNCAT = 0 +REPLACE_STRNDUP = 0 +REPLACE_STRNLEN = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 0 +REPLACE_STRTOD = 0 +REPLACE_STRTOIMAX = 0 +REPLACE_STRTOK_R = 0 +REPLACE_STRTOUMAX = 0 +REPLACE_STRUCT_LCONV = 0 +REPLACE_STRUCT_TIMEVAL = 0 +REPLACE_SYMLINK = 0 +REPLACE_SYMLINKAT = 0 +REPLACE_TANF = 0 +REPLACE_TANHF = 0 +REPLACE_TIMEGM = 0 +REPLACE_TMPFILE = 0 +REPLACE_TOWLOWER = 0 +REPLACE_TRUNC = 0 +REPLACE_TRUNCATE = 0 +REPLACE_TRUNCF = 0 +REPLACE_TRUNCL = 0 +REPLACE_TTYNAME_R = 0 +REPLACE_TZSET = 0 +REPLACE_UNLINK = 0 +REPLACE_UNLINKAT = 0 +REPLACE_UNSETENV = 0 +REPLACE_USLEEP = 0 +REPLACE_UTIMENSAT = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 1 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSFTIME = 0 +REPLACE_WCSNRTOMBS = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCSWIDTH = 0 +REPLACE_WCTOB = 0 +REPLACE_WCTOMB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SED = /bin/sed +SELINUX_CONTEXT_H = selinux/context.h +SET_MAKE = +SHELL = /bin/sh +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +STDARG_H = +STDBOOL_H = +STDDEF_H = +STDINT_H = stdint.h +STRIP = strip +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = 0 +TIME_H_DEFINES_STRUCT_TIMESPEC = 1 +UINT32_MAX_LT_UINTMAX_MAX = 1 +UINT64_MAX_EQ_ULONG_MAX = 0 +UNDEFINE_STRTOK_R = 0 +UNISTD_H_DEFINES_STRUCT_TIMESPEC = 0 +UNISTD_H_HAVE_WINSOCK2_H = 0 +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = 0 +USE_ACL = 0 +USE_NLS = yes +UUIDLIBS = +VERSION = 1.8 +WCHAR_T_SUFFIX = +WINDOWS_64_BIT_OFF_T = 0 +WINDOWS_64_BIT_ST_SIZE = 0 +WINDOWS_STAT_INODES = 0 +WINDOWS_STAT_TIMESPEC = 0 +WINT_T_SUFFIX = +XGETTEXT = /usr/bin/xgettext +XGETTEXT_015 = /usr/bin/xgettext +XGETTEXT_EXTRA_OPTIONS = --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format +YACC = bison -o y.tab.c +YFLAGS = +abs_builddir = /mnt/lfs/build/recutils/recutils-1.8/doc +abs_srcdir = /mnt/lfs/build/recutils/recutils-1.8/doc +abs_top_builddir = /mnt/lfs/build/recutils/recutils-1.8 +abs_top_srcdir = /mnt/lfs/build/recutils/recutils-1.8 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +builddir = . +crypt_support = no +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +gl_LIBOBJS = asnprintf.o asprintf.o fcntl.o fprintf.o fseterr.o localtime-buffer.o mbrlen.o mbrtowc.o mktime.o nl_langinfo.o obstack.o printf.o printf-args.o printf-parse.o readline.o regex.o time_rz.o vasnprintf.o vasprintf.o vfprintf.o +gl_LTLIBOBJS = asnprintf.lo asprintf.lo fcntl.lo fprintf.lo fseterr.lo localtime-buffer.lo mbrlen.lo mbrtowc.lo mktime.lo nl_langinfo.lo obstack.lo printf.lo printf-args.lo printf-parse.lo readline.lo regex.lo time_rz.lo vasnprintf.lo vasprintf.lo vfprintf.lo +gltests_LIBOBJS = +gltests_LTLIBOBJS = +gltests_WITNESS = IN_RECUTILS_GNULIB_TESTS +have_uuid = no +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = $(MKDIR_P) +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +runstatedir = ${localstatedir}/run +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +info_TEXINFOS = recutils.texi rec-mode.texi +recutils_TEXINFOS = parse-datetime.texi fdl.texi +all: all-am + +.SUFFIXES: +.SUFFIXES: .dvi .html .info .pdf .ps .texi +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +.texi.info: + $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ + am__cwd=`pwd` && $(am__cd) $(srcdir) && \ + rm -rf $$backupdir && mkdir $$backupdir && \ + if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ + for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ + if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ + done; \ + else :; fi && \ + cd "$$am__cwd"; \ + if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $@ $<; \ + then \ + rc=0; \ + $(am__cd) $(srcdir); \ + else \ + rc=$$?; \ + $(am__cd) $(srcdir) && \ + $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ + fi; \ + rm -rf $$backupdir; exit $$rc + +.texi.dvi: + $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ + $< + +.texi.pdf: + $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ + $< + +.texi.html: + $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) + $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $(@:.html=.htp) $<; \ + then \ + rm -rf $@ && mv $(@:.html=.htp) $@; \ + else \ + rm -rf $(@:.html=.htp); exit 1; \ + fi +$(srcdir)/recutils.info: recutils.texi $(srcdir)/version.texi $(recutils_TEXINFOS) +recutils.dvi: recutils.texi $(srcdir)/version.texi $(recutils_TEXINFOS) +recutils.pdf: recutils.texi $(srcdir)/version.texi $(recutils_TEXINFOS) +recutils.html: recutils.texi $(srcdir)/version.texi $(recutils_TEXINFOS) +$(srcdir)/version.texi: $(srcdir)/stamp-vti +$(srcdir)/stamp-vti: recutils.texi $(top_srcdir)/configure + @(dir=.; test -f ./recutils.texi || dir=$(srcdir); \ + set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/recutils.texi`; \ + echo "@set UPDATED $$1 $$2 $$3"; \ + echo "@set UPDATED-MONTH $$2 $$3"; \ + echo "@set EDITION $(VERSION)"; \ + echo "@set VERSION $(VERSION)") > vti.tmp$$$$ && \ + (cmp -s vti.tmp$$$$ $(srcdir)/version.texi \ + || (echo "Updating $(srcdir)/version.texi" && \ + cp vti.tmp$$$$ $(srcdir)/version.texi.tmp$$$$ && \ + mv $(srcdir)/version.texi.tmp$$$$ $(srcdir)/version.texi)) && \ + rm -f vti.tmp$$$$ $(srcdir)/version.texi.$$$$ + @cp $(srcdir)/version.texi $@ + +mostlyclean-vti: + -rm -f vti.tmp* $(srcdir)/version.texi.tmp* + +maintainer-clean-vti: + -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi +$(srcdir)/rec-mode.info: rec-mode.texi $(srcdir)/version-rec-mode.texi +rec-mode.dvi: rec-mode.texi $(srcdir)/version-rec-mode.texi +rec-mode.pdf: rec-mode.texi $(srcdir)/version-rec-mode.texi +rec-mode.html: rec-mode.texi $(srcdir)/version-rec-mode.texi +$(srcdir)/version-rec-mode.texi: $(srcdir)/stamp-1 +$(srcdir)/stamp-1: rec-mode.texi $(top_srcdir)/configure + @(dir=.; test -f ./rec-mode.texi || dir=$(srcdir); \ + set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/rec-mode.texi`; \ + echo "@set UPDATED $$1 $$2 $$3"; \ + echo "@set UPDATED-MONTH $$2 $$3"; \ + echo "@set EDITION $(VERSION)"; \ + echo "@set VERSION $(VERSION)") > 1.tmp$$$$ && \ + (cmp -s 1.tmp$$$$ $(srcdir)/version-rec-mode.texi \ + || (echo "Updating $(srcdir)/version-rec-mode.texi" && \ + cp 1.tmp$$$$ $(srcdir)/version-rec-mode.texi.tmp$$$$ && \ + mv $(srcdir)/version-rec-mode.texi.tmp$$$$ $(srcdir)/version-rec-mode.texi)) && \ + rm -f 1.tmp$$$$ $(srcdir)/version-rec-mode.texi.$$$$ + @cp $(srcdir)/version-rec-mode.texi $@ + +mostlyclean-1: + -rm -f 1.tmp* $(srcdir)/version-rec-mode.texi.tmp* + +maintainer-clean-1: + -rm -f $(srcdir)/stamp-1 $(srcdir)/version-rec-mode.texi +.dvi.ps: + $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + $(DVIPS) $(AM_V_texinfo) -o $@ $< + +uninstall-dvi-am: + @$(NORMAL_UNINSTALL) + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ + rm -f "$(DESTDIR)$(dvidir)/$$f"; \ + done + +uninstall-html-am: + @$(NORMAL_UNINSTALL) + @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ + rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ + done + +uninstall-info-am: + @$(PRE_UNINSTALL) + @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ + if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ + done; \ + else :; fi + @$(NORMAL_UNINSTALL) + @list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ + (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ + echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ + rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ + else :; fi); \ + done + +uninstall-pdf-am: + @$(NORMAL_UNINSTALL) + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ + done + +uninstall-ps-am: + @$(NORMAL_UNINSTALL) + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ + rm -f "$(DESTDIR)$(psdir)/$$f"; \ + done + +dist-info: $(INFO_DEPS) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; \ + for base in $$list; do \ + case $$base in \ + $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$base; then d=.; else d=$(srcdir); fi; \ + base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ + for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ + if test -f $$file; then \ + relfile=`expr "$$file" : "$$d/\(.*\)"`; \ + test -f "$(distdir)/$$relfile" || \ + cp -p $$file "$(distdir)/$$relfile"; \ + else :; fi; \ + done; \ + done + +mostlyclean-aminfo: + -rm -rf recutils.t2d recutils.t2p rec-mode.t2d rec-mode.t2p + +clean-aminfo: + -test -z "recutils.dvi recutils.pdf recutils.ps recutils.html rec-mode.dvi \ + rec-mode.pdf rec-mode.ps rec-mode.html" \ + || rm -rf recutils.dvi recutils.pdf recutils.ps recutils.html rec-mode.dvi \ + rec-mode.pdf rec-mode.ps rec-mode.html + +maintainer-clean-aminfo: + @list='$(INFO_DEPS)'; for i in $$list; do \ + i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ + echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ + rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ + done +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-info +check-am: all-am +check: check-am +all-am: Makefile $(INFO_DEPS) +installdirs: + for dir in "$(DESTDIR)$(infodir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: $(DVIS) + +html: html-am + +html-am: $(HTMLS) + +info: info-am + +info-am: $(INFO_DEPS) + +install-data-am: install-info-am + +install-dvi: install-dvi-am + +install-dvi-am: $(DVIS) + @$(NORMAL_INSTALL) + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ + done +install-exec-am: + +install-html: install-html-am + +install-html-am: $(HTMLS) + @$(NORMAL_INSTALL) + @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ + $(am__strip_dir) \ + d2=$$d$$p; \ + if test -d "$$d2"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ + echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ + else \ + list2="$$list2 $$d2"; \ + fi; \ + done; \ + test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ + done; } +install-info: install-info-am + +install-info-am: $(INFO_DEPS) + @$(NORMAL_INSTALL) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ + fi; \ + for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ + for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ + $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ + if test -f $$ifile; then \ + echo "$$ifile"; \ + else : ; fi; \ + done; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done + @$(POST_INSTALL) + @if $(am__can_run_installinfo); then \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ + install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ + done; \ + else : ; fi +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: $(PDFS) + @$(NORMAL_INSTALL) + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done +install-ps: install-ps-am + +install-ps-am: $(PSS) + @$(NORMAL_INSTALL) + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-1 \ + maintainer-clean-aminfo maintainer-clean-generic \ + maintainer-clean-vti + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-1 mostlyclean-aminfo mostlyclean-generic \ + mostlyclean-libtool mostlyclean-vti + +pdf: pdf-am + +pdf-am: $(PDFS) + +ps: ps-am + +ps-am: $(PSS) + +uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ + uninstall-pdf-am uninstall-ps-am + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-aminfo clean-generic \ + clean-libtool cscopelist-am ctags-am dist-info distclean \ + distclean-generic distclean-libtool distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-1 maintainer-clean-aminfo \ + maintainer-clean-generic maintainer-clean-vti mostlyclean \ + mostlyclean-1 mostlyclean-aminfo mostlyclean-generic \ + mostlyclean-libtool mostlyclean-vti pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am uninstall-dvi-am \ + uninstall-html-am uninstall-info-am uninstall-pdf-am \ + uninstall-ps-am + +.PRECIOUS: Makefile + + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/doc/Makefile.am b/devspec.en_US/project/recutils/doc/Makefile.am new file mode 100755 index 0000000..70537cd --- /dev/null +++ b/devspec.en_US/project/recutils/doc/Makefile.am @@ -0,0 +1,22 @@ +# doc/Makefile.am + +# Copyright (C) 2009-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +info_TEXINFOS = recutils.texi rec-mode.texi +recutils_TEXINFOS = parse-datetime.texi fdl.texi + +# End of Makefile.am diff --git a/devspec.en_US/project/recutils/doc/Makefile.in b/devspec.en_US/project/recutils/doc/Makefile.in new file mode 100755 index 0000000..25d5cb5 --- /dev/null +++ b/devspec.en_US/project/recutils/doc/Makefile.in @@ -0,0 +1,2077 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# doc/Makefile.am + +# Copyright (C) 2009-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = doc +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/version.texi \ + $(srcdir)/stamp-vti $(srcdir)/version-rec-mode.texi \ + $(srcdir)/stamp-1 $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) +am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) +am__v_DVIPS_0 = @echo " DVIPS " $@; +am__v_DVIPS_1 = +AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) +am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) +am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; +am__v_MAKEINFO_1 = +AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) +am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) +am__v_INFOHTML_0 = @echo " INFOHTML" $@; +am__v_INFOHTML_1 = +AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) +am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) +am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; +am__v_TEXI2DVI_1 = +AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) +am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) +am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; +am__v_TEXI2PDF_1 = +AM_V_texinfo = $(am__v_texinfo_@AM_V@) +am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) +am__v_texinfo_0 = -q +am__v_texinfo_1 = +AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) +am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) +am__v_texidevnull_0 = > /dev/null +am__v_texidevnull_1 = +INFO_DEPS = $(srcdir)/recutils.info $(srcdir)/rec-mode.info +TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex +am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux +DVIS = recutils.dvi rec-mode.dvi +PDFS = recutils.pdf rec-mode.pdf +PSS = recutils.ps rec-mode.ps +HTMLS = recutils.html rec-mode.html +TEXINFOS = recutils.texi rec-mode.texi +TEXI2DVI = texi2dvi +TEXI2PDF = $(TEXI2DVI) --pdf --batch +MAKEINFOHTML = $(MAKEINFO) --html +AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) +DVIPS = dvips +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__installdirs = "$(DESTDIR)$(infodir)" +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(recutils_TEXINFOS) $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/mdate-sh \ + $(top_srcdir)/build-aux/texinfo.tex texinfo.tex +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BASH_HEADERS = @BASH_HEADERS@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CA68 = @CA68@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CURLLIBS = @CURLLIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +FLOOR_LIBM = @FLOOR_LIBM@ +GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ACOSF = @GNULIB_ACOSF@ +GNULIB_ACOSL = @GNULIB_ACOSL@ +GNULIB_ASINF = @GNULIB_ASINF@ +GNULIB_ASINL = @GNULIB_ASINL@ +GNULIB_ATAN2F = @GNULIB_ATAN2F@ +GNULIB_ATANF = @GNULIB_ATANF@ +GNULIB_ATANL = @GNULIB_ATANL@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CBRT = @GNULIB_CBRT@ +GNULIB_CBRTF = @GNULIB_CBRTF@ +GNULIB_CBRTL = @GNULIB_CBRTL@ +GNULIB_CEIL = @GNULIB_CEIL@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ +GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ +GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ +GNULIB_COSF = @GNULIB_COSF@ +GNULIB_COSHF = @GNULIB_COSHF@ +GNULIB_COSL = @GNULIB_COSL@ +GNULIB_CTIME = @GNULIB_CTIME@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_EXP2 = @GNULIB_EXP2@ +GNULIB_EXP2F = @GNULIB_EXP2F@ +GNULIB_EXP2L = @GNULIB_EXP2L@ +GNULIB_EXPF = @GNULIB_EXPF@ +GNULIB_EXPL = @GNULIB_EXPL@ +GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ +GNULIB_EXPM1 = @GNULIB_EXPM1@ +GNULIB_EXPM1F = @GNULIB_EXPM1F@ +GNULIB_EXPM1L = @GNULIB_EXPM1L@ +GNULIB_FABSF = @GNULIB_FABSF@ +GNULIB_FABSL = @GNULIB_FABSL@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FCNTL = @GNULIB_FCNTL@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FLOCK = @GNULIB_FLOCK@ +GNULIB_FLOOR = @GNULIB_FLOOR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FMA = @GNULIB_FMA@ +GNULIB_FMAF = @GNULIB_FMAF@ +GNULIB_FMAL = @GNULIB_FMAL@ +GNULIB_FMOD = @GNULIB_FMOD@ +GNULIB_FMODF = @GNULIB_FMODF@ +GNULIB_FMODL = @GNULIB_FMODL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPF = @GNULIB_FREXPF@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSTAT = @GNULIB_FSTAT@ +GNULIB_FSTATAT = @GNULIB_FSTATAT@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETPASS = @GNULIB_GETPASS@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_HYPOT = @GNULIB_HYPOT@ +GNULIB_HYPOTF = @GNULIB_HYPOTF@ +GNULIB_HYPOTL = @GNULIB_HYPOTL@ +GNULIB_ILOGB = @GNULIB_ILOGB@ +GNULIB_ILOGBF = @GNULIB_ILOGBF@ +GNULIB_ILOGBL = @GNULIB_ILOGBL@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPF = @GNULIB_LDEXPF@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LOCALENAME = @GNULIB_LOCALENAME@ +GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ +GNULIB_LOG = @GNULIB_LOG@ +GNULIB_LOG10 = @GNULIB_LOG10@ +GNULIB_LOG10F = @GNULIB_LOG10F@ +GNULIB_LOG10L = @GNULIB_LOG10L@ +GNULIB_LOG1P = @GNULIB_LOG1P@ +GNULIB_LOG1PF = @GNULIB_LOG1PF@ +GNULIB_LOG1PL = @GNULIB_LOG1PL@ +GNULIB_LOG2 = @GNULIB_LOG2@ +GNULIB_LOG2F = @GNULIB_LOG2F@ +GNULIB_LOG2L = @GNULIB_LOG2L@ +GNULIB_LOGB = @GNULIB_LOGB@ +GNULIB_LOGBF = @GNULIB_LOGBF@ +GNULIB_LOGBL = @GNULIB_LOGBL@ +GNULIB_LOGF = @GNULIB_LOGF@ +GNULIB_LOGL = @GNULIB_LOGL@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKFIFO = @GNULIB_MKFIFO@ +GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ +GNULIB_MKNOD = @GNULIB_MKNOD@ +GNULIB_MKNODAT = @GNULIB_MKNODAT@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_MKTIME = @GNULIB_MKTIME@ +GNULIB_MODF = @GNULIB_MODF@ +GNULIB_MODFF = @GNULIB_MODFF@ +GNULIB_MODFL = @GNULIB_MODFL@ +GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ +GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_POWF = @GNULIB_POWF@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_QSORT_R = @GNULIB_QSORT_R@ +GNULIB_RAISE = @GNULIB_RAISE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMAINDER = @GNULIB_REMAINDER@ +GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ +GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RINT = @GNULIB_RINT@ +GNULIB_RINTF = @GNULIB_RINTF@ +GNULIB_RINTL = @GNULIB_RINTL@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SINF = @GNULIB_SINF@ +GNULIB_SINHF = @GNULIB_SINHF@ +GNULIB_SINL = @GNULIB_SINL@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_SQRTF = @GNULIB_SQRTF@ +GNULIB_SQRTL = @GNULIB_SQRTL@ +GNULIB_STAT = @GNULIB_STAT@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRFTIME = @GNULIB_STRFTIME@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRPTIME = @GNULIB_STRPTIME@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TANF = @GNULIB_TANF@ +GNULIB_TANHF = @GNULIB_TANHF@ +GNULIB_TANL = @GNULIB_TANL@ +GNULIB_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_TZSET = @GNULIB_TZSET@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WAITPID = @GNULIB_WAITPID@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +HAVE_ACOSF = @HAVE_ACOSF@ +HAVE_ACOSL = @HAVE_ACOSL@ +HAVE_ASINF = @HAVE_ASINF@ +HAVE_ASINL = @HAVE_ASINL@ +HAVE_ATAN2F = @HAVE_ATAN2F@ +HAVE_ATANF = @HAVE_ATANF@ +HAVE_ATANL = @HAVE_ATANL@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CBRT = @HAVE_CBRT@ +HAVE_CBRTF = @HAVE_CBRTF@ +HAVE_CBRTL = @HAVE_CBRTL@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_COPYSIGN = @HAVE_COPYSIGN@ +HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ +HAVE_COSF = @HAVE_COSF@ +HAVE_COSHF = @HAVE_COSHF@ +HAVE_COSL = @HAVE_COSL@ +HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ +HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ +HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ +HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ +HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ +HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ +HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ +HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ +HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ +HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ +HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ +HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ +HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ +HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ +HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ +HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ +HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ +HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ +HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ +HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_EXPF = @HAVE_EXPF@ +HAVE_EXPL = @HAVE_EXPL@ +HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ +HAVE_EXPM1 = @HAVE_EXPM1@ +HAVE_EXPM1F = @HAVE_EXPM1F@ +HAVE_FABSF = @HAVE_FABSF@ +HAVE_FABSL = @HAVE_FABSL@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FLOCK = @HAVE_FLOCK@ +HAVE_FMA = @HAVE_FMA@ +HAVE_FMAF = @HAVE_FMAF@ +HAVE_FMAL = @HAVE_FMAL@ +HAVE_FMODF = @HAVE_FMODF@ +HAVE_FMODL = @HAVE_FMODL@ +HAVE_FREELOCALE = @HAVE_FREELOCALE@ +HAVE_FREXPF = @HAVE_FREXPF@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSTATAT = @HAVE_FSTATAT@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_FUTIMENS = @HAVE_FUTIMENS@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETPASS = @HAVE_GETPASS@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_HYPOTF = @HAVE_HYPOTF@ +HAVE_HYPOTL = @HAVE_HYPOTL@ +HAVE_ILOGB = @HAVE_ILOGB@ +HAVE_ILOGBF = @HAVE_ILOGBF@ +HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LDEXPF = @HAVE_LDEXPF@ +HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOG10F = @HAVE_LOG10F@ +HAVE_LOG10L = @HAVE_LOG10L@ +HAVE_LOG1P = @HAVE_LOG1P@ +HAVE_LOG1PF = @HAVE_LOG1PF@ +HAVE_LOG1PL = @HAVE_LOG1PL@ +HAVE_LOGBF = @HAVE_LOGBF@ +HAVE_LOGBL = @HAVE_LOGBL@ +HAVE_LOGF = @HAVE_LOGF@ +HAVE_LOGL = @HAVE_LOGL@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDIRAT = @HAVE_MKDIRAT@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKFIFO = @HAVE_MKFIFO@ +HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ +HAVE_MKNOD = @HAVE_MKNOD@ +HAVE_MKNODAT = @HAVE_MKNODAT@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MODFF = @HAVE_MODFF@ +HAVE_MODFL = @HAVE_MODFL@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ +HAVE_POWF = @HAVE_POWF@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_QSORT_R = @HAVE_QSORT_R@ +HAVE_RAISE = @HAVE_RAISE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_REMAINDER = @HAVE_REMAINDER@ +HAVE_REMAINDERF = @HAVE_REMAINDERF@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RINT = @HAVE_RINT@ +HAVE_RINTL = @HAVE_RINTL@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SINF = @HAVE_SINF@ +HAVE_SINHF = @HAVE_SINHF@ +HAVE_SINL = @HAVE_SINL@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_SQRTF = @HAVE_SQRTF@ +HAVE_SQRTL = @HAVE_SQRTL@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRPTIME = @HAVE_STRPTIME@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ +HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TANF = @HAVE_TANF@ +HAVE_TANHF = @HAVE_TANHF@ +HAVE_TANL = @HAVE_TANL@ +HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_TZSET = @HAVE_TZSET@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSFTIME = @HAVE_WCSFTIME@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ +INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBGCRYPT = @LIBGCRYPT@ +LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBREADLINE = @LIBREADLINE@ +LIBS = @LIBS@ +LIBTHREAD = @LIBTHREAD@ +LIBTOOL = @LIBTOOL@ +LIB_ACL = @LIB_ACL@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LIB_EACCESS = @LIB_EACCESS@ +LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ +LIB_SELINUX = @LIB_SELINUX@ +LIMITS_H = @LIMITS_H@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTALLOCA = @LTALLOCA@ +LTLIBGCRYPT = @LTLIBGCRYPT@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBREADLINE = @LTLIBREADLINE@ +LTLIBTHREAD = @LTLIBTHREAD@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MDBLIBS = @MDBLIBS@ +MDB_DATETIME = @MDB_DATETIME@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ +NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LIMITS_H = @NEXT_LIMITS_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_ACOSF = @REPLACE_ACOSF@ +REPLACE_ASINF = @REPLACE_ASINF@ +REPLACE_ATAN2F = @REPLACE_ATAN2F@ +REPLACE_ATANF = @REPLACE_ATANF@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CBRTF = @REPLACE_CBRTF@ +REPLACE_CBRTL = @REPLACE_CBRTL@ +REPLACE_CEIL = @REPLACE_CEIL@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_COSF = @REPLACE_COSF@ +REPLACE_COSHF = @REPLACE_COSHF@ +REPLACE_CTIME = @REPLACE_CTIME@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_EXP2 = @REPLACE_EXP2@ +REPLACE_EXP2L = @REPLACE_EXP2L@ +REPLACE_EXPF = @REPLACE_EXPF@ +REPLACE_EXPM1 = @REPLACE_EXPM1@ +REPLACE_EXPM1F = @REPLACE_EXPM1F@ +REPLACE_FABSL = @REPLACE_FABSL@ +REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOOR = @REPLACE_FLOOR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FMA = @REPLACE_FMA@ +REPLACE_FMAF = @REPLACE_FMAF@ +REPLACE_FMAL = @REPLACE_FMAL@ +REPLACE_FMOD = @REPLACE_FMOD@ +REPLACE_FMODF = @REPLACE_FMODF@ +REPLACE_FMODL = @REPLACE_FMODL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPF = @REPLACE_FREXPF@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FSTAT = @REPLACE_FSTAT@ +REPLACE_FSTATAT = @REPLACE_FSTATAT@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETPASS = @REPLACE_GETPASS@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_GMTIME = @REPLACE_GMTIME@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_HYPOT = @REPLACE_HYPOT@ +REPLACE_HYPOTF = @REPLACE_HYPOTF@ +REPLACE_HYPOTL = @REPLACE_HYPOTL@ +REPLACE_ILOGB = @REPLACE_ILOGB@ +REPLACE_ILOGBF = @REPLACE_ILOGBF@ +REPLACE_ILOGBL = @REPLACE_ILOGBL@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LOG = @REPLACE_LOG@ +REPLACE_LOG10 = @REPLACE_LOG10@ +REPLACE_LOG10F = @REPLACE_LOG10F@ +REPLACE_LOG10L = @REPLACE_LOG10L@ +REPLACE_LOG1P = @REPLACE_LOG1P@ +REPLACE_LOG1PF = @REPLACE_LOG1PF@ +REPLACE_LOG1PL = @REPLACE_LOG1PL@ +REPLACE_LOG2 = @REPLACE_LOG2@ +REPLACE_LOG2F = @REPLACE_LOG2F@ +REPLACE_LOG2L = @REPLACE_LOG2L@ +REPLACE_LOGB = @REPLACE_LOGB@ +REPLACE_LOGBF = @REPLACE_LOGBF@ +REPLACE_LOGBL = @REPLACE_LOGBL@ +REPLACE_LOGF = @REPLACE_LOGF@ +REPLACE_LOGL = @REPLACE_LOGL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKFIFO = @REPLACE_MKFIFO@ +REPLACE_MKNOD = @REPLACE_MKNOD@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_MKTIME = @REPLACE_MKTIME@ +REPLACE_MODF = @REPLACE_MODF@ +REPLACE_MODFF = @REPLACE_MODFF@ +REPLACE_MODFL = @REPLACE_MODFL@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_OPENAT = @REPLACE_OPENAT@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_QSORT_R = @REPLACE_QSORT_R@ +REPLACE_RAISE = @REPLACE_RAISE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_READLINKAT = @REPLACE_READLINKAT@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMAINDER = @REPLACE_REMAINDER@ +REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ +REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SINF = @REPLACE_SINF@ +REPLACE_SINHF = @REPLACE_SINHF@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_SQRTF = @REPLACE_SQRTF@ +REPLACE_SQRTL = @REPLACE_SQRTL@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRFTIME = @REPLACE_STRFTIME@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ +REPLACE_TANF = @REPLACE_TANF@ +REPLACE_TANHF = @REPLACE_TANHF@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TRUNC = @REPLACE_TRUNC@ +REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ +REPLACE_TRUNCF = @REPLACE_TRUNCF@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_TZSET = @REPLACE_TZSET@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SED = @SED@ +SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ +UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +USE_ACL = @USE_ACL@ +USE_NLS = @USE_NLS@ +UUIDLIBS = @UUIDLIBS@ +VERSION = @VERSION@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ +WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ +WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +crypt_support = @crypt_support@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +have_uuid = @have_uuid@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +info_TEXINFOS = recutils.texi rec-mode.texi +recutils_TEXINFOS = parse-datetime.texi fdl.texi +all: all-am + +.SUFFIXES: +.SUFFIXES: .dvi .html .info .pdf .ps .texi +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +.texi.info: + $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ + am__cwd=`pwd` && $(am__cd) $(srcdir) && \ + rm -rf $$backupdir && mkdir $$backupdir && \ + if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ + for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ + if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ + done; \ + else :; fi && \ + cd "$$am__cwd"; \ + if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $@ $<; \ + then \ + rc=0; \ + $(am__cd) $(srcdir); \ + else \ + rc=$$?; \ + $(am__cd) $(srcdir) && \ + $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ + fi; \ + rm -rf $$backupdir; exit $$rc + +.texi.dvi: + $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ + $< + +.texi.pdf: + $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ + $< + +.texi.html: + $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) + $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $(@:.html=.htp) $<; \ + then \ + rm -rf $@ && mv $(@:.html=.htp) $@; \ + else \ + rm -rf $(@:.html=.htp); exit 1; \ + fi +$(srcdir)/recutils.info: recutils.texi $(srcdir)/version.texi $(recutils_TEXINFOS) +recutils.dvi: recutils.texi $(srcdir)/version.texi $(recutils_TEXINFOS) +recutils.pdf: recutils.texi $(srcdir)/version.texi $(recutils_TEXINFOS) +recutils.html: recutils.texi $(srcdir)/version.texi $(recutils_TEXINFOS) +$(srcdir)/version.texi: $(srcdir)/stamp-vti +$(srcdir)/stamp-vti: recutils.texi $(top_srcdir)/configure + @(dir=.; test -f ./recutils.texi || dir=$(srcdir); \ + set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/recutils.texi`; \ + echo "@set UPDATED $$1 $$2 $$3"; \ + echo "@set UPDATED-MONTH $$2 $$3"; \ + echo "@set EDITION $(VERSION)"; \ + echo "@set VERSION $(VERSION)") > vti.tmp$$$$ && \ + (cmp -s vti.tmp$$$$ $(srcdir)/version.texi \ + || (echo "Updating $(srcdir)/version.texi" && \ + cp vti.tmp$$$$ $(srcdir)/version.texi.tmp$$$$ && \ + mv $(srcdir)/version.texi.tmp$$$$ $(srcdir)/version.texi)) && \ + rm -f vti.tmp$$$$ $(srcdir)/version.texi.$$$$ + @cp $(srcdir)/version.texi $@ + +mostlyclean-vti: + -rm -f vti.tmp* $(srcdir)/version.texi.tmp* + +maintainer-clean-vti: + -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi +$(srcdir)/rec-mode.info: rec-mode.texi $(srcdir)/version-rec-mode.texi +rec-mode.dvi: rec-mode.texi $(srcdir)/version-rec-mode.texi +rec-mode.pdf: rec-mode.texi $(srcdir)/version-rec-mode.texi +rec-mode.html: rec-mode.texi $(srcdir)/version-rec-mode.texi +$(srcdir)/version-rec-mode.texi: $(srcdir)/stamp-1 +$(srcdir)/stamp-1: rec-mode.texi $(top_srcdir)/configure + @(dir=.; test -f ./rec-mode.texi || dir=$(srcdir); \ + set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/rec-mode.texi`; \ + echo "@set UPDATED $$1 $$2 $$3"; \ + echo "@set UPDATED-MONTH $$2 $$3"; \ + echo "@set EDITION $(VERSION)"; \ + echo "@set VERSION $(VERSION)") > 1.tmp$$$$ && \ + (cmp -s 1.tmp$$$$ $(srcdir)/version-rec-mode.texi \ + || (echo "Updating $(srcdir)/version-rec-mode.texi" && \ + cp 1.tmp$$$$ $(srcdir)/version-rec-mode.texi.tmp$$$$ && \ + mv $(srcdir)/version-rec-mode.texi.tmp$$$$ $(srcdir)/version-rec-mode.texi)) && \ + rm -f 1.tmp$$$$ $(srcdir)/version-rec-mode.texi.$$$$ + @cp $(srcdir)/version-rec-mode.texi $@ + +mostlyclean-1: + -rm -f 1.tmp* $(srcdir)/version-rec-mode.texi.tmp* + +maintainer-clean-1: + -rm -f $(srcdir)/stamp-1 $(srcdir)/version-rec-mode.texi +.dvi.ps: + $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + $(DVIPS) $(AM_V_texinfo) -o $@ $< + +uninstall-dvi-am: + @$(NORMAL_UNINSTALL) + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ + rm -f "$(DESTDIR)$(dvidir)/$$f"; \ + done + +uninstall-html-am: + @$(NORMAL_UNINSTALL) + @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ + rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ + done + +uninstall-info-am: + @$(PRE_UNINSTALL) + @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ + if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ + done; \ + else :; fi + @$(NORMAL_UNINSTALL) + @list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ + (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ + echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ + rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ + else :; fi); \ + done + +uninstall-pdf-am: + @$(NORMAL_UNINSTALL) + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ + done + +uninstall-ps-am: + @$(NORMAL_UNINSTALL) + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ + rm -f "$(DESTDIR)$(psdir)/$$f"; \ + done + +dist-info: $(INFO_DEPS) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; \ + for base in $$list; do \ + case $$base in \ + $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$base; then d=.; else d=$(srcdir); fi; \ + base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ + for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ + if test -f $$file; then \ + relfile=`expr "$$file" : "$$d/\(.*\)"`; \ + test -f "$(distdir)/$$relfile" || \ + cp -p $$file "$(distdir)/$$relfile"; \ + else :; fi; \ + done; \ + done + +mostlyclean-aminfo: + -rm -rf recutils.t2d recutils.t2p rec-mode.t2d rec-mode.t2p + +clean-aminfo: + -test -z "recutils.dvi recutils.pdf recutils.ps recutils.html rec-mode.dvi \ + rec-mode.pdf rec-mode.ps rec-mode.html" \ + || rm -rf recutils.dvi recutils.pdf recutils.ps recutils.html rec-mode.dvi \ + rec-mode.pdf rec-mode.ps rec-mode.html + +maintainer-clean-aminfo: + @list='$(INFO_DEPS)'; for i in $$list; do \ + i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ + echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ + rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ + done +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-info +check-am: all-am +check: check-am +all-am: Makefile $(INFO_DEPS) +installdirs: + for dir in "$(DESTDIR)$(infodir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: $(DVIS) + +html: html-am + +html-am: $(HTMLS) + +info: info-am + +info-am: $(INFO_DEPS) + +install-data-am: install-info-am + +install-dvi: install-dvi-am + +install-dvi-am: $(DVIS) + @$(NORMAL_INSTALL) + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ + done +install-exec-am: + +install-html: install-html-am + +install-html-am: $(HTMLS) + @$(NORMAL_INSTALL) + @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ + $(am__strip_dir) \ + d2=$$d$$p; \ + if test -d "$$d2"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ + echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ + else \ + list2="$$list2 $$d2"; \ + fi; \ + done; \ + test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ + done; } +install-info: install-info-am + +install-info-am: $(INFO_DEPS) + @$(NORMAL_INSTALL) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ + fi; \ + for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ + for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ + $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ + if test -f $$ifile; then \ + echo "$$ifile"; \ + else : ; fi; \ + done; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done + @$(POST_INSTALL) + @if $(am__can_run_installinfo); then \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ + install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ + done; \ + else : ; fi +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: $(PDFS) + @$(NORMAL_INSTALL) + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done +install-ps: install-ps-am + +install-ps-am: $(PSS) + @$(NORMAL_INSTALL) + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-1 \ + maintainer-clean-aminfo maintainer-clean-generic \ + maintainer-clean-vti + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-1 mostlyclean-aminfo mostlyclean-generic \ + mostlyclean-libtool mostlyclean-vti + +pdf: pdf-am + +pdf-am: $(PDFS) + +ps: ps-am + +ps-am: $(PSS) + +uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ + uninstall-pdf-am uninstall-ps-am + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-aminfo clean-generic \ + clean-libtool cscopelist-am ctags-am dist-info distclean \ + distclean-generic distclean-libtool distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-1 maintainer-clean-aminfo \ + maintainer-clean-generic maintainer-clean-vti mostlyclean \ + mostlyclean-1 mostlyclean-aminfo mostlyclean-generic \ + mostlyclean-libtool mostlyclean-vti pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am uninstall-dvi-am \ + uninstall-html-am uninstall-info-am uninstall-pdf-am \ + uninstall-ps-am + +.PRECIOUS: Makefile + + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/doc/fdl.texi b/devspec.en_US/project/recutils/doc/fdl.texi new file mode 100755 index 0000000..fc19ddd --- /dev/null +++ b/devspec.en_US/project/recutils/doc/fdl.texi @@ -0,0 +1,506 @@ +@c The GNU Free Documentation License. +@center Version 1.3, 3 November 2008 + +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. + +@display +Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +@uref{http://fsf.org/} + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +@end display + +@enumerate 0 +@item +PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document @dfn{free} in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of ``copyleft'', which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + +@item +APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The ``Document'', below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as ``you''. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A ``Modified Version'' of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A ``Secondary Section'' is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The ``Invariant Sections'' are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The ``Cover Texts'' are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A ``Transparent'' copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not ``Transparent'' is called ``Opaque''. + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, La@TeX{} input +format, SGML or XML using a publicly available +DTD, and standard-conforming simple HTML, +PostScript or PDF designed for human modification. Examples +of transparent image formats include PNG, XCF and +JPG. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, SGML or +XML for which the DTD and/or processing tools are +not generally available, and the machine-generated HTML, +PostScript or PDF produced by some word processors for +output purposes only. + +The ``Title Page'' means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, ``Title Page'' means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +The ``publisher'' means any person or entity that distributes copies +of the Document to the public. + +A section ``Entitled XYZ'' means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as ``Acknowledgements'', +``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' +of such a section when you modify the Document means that it remains a +section ``Entitled XYZ'' according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + +@item +VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + +@item +COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + +@item +MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +@enumerate A +@item +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +@item +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +@item +State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +@item +Preserve all the copyright notices of the Document. + +@item +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +@item +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +@item +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. + +@item +Include an unaltered copy of this License. + +@item +Preserve the section Entitled ``History'', Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled ``History'' in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +@item +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the ``History'' section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +@item +For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +@item +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +@item +Delete any section Entitled ``Endorsements''. Such a section +may not be included in the Modified Version. + +@item +Do not retitle any existing section to be Entitled ``Endorsements'' or +to conflict in title with any Invariant Section. + +@item +Preserve any Warranty Disclaimers. +@end enumerate + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled ``Endorsements'', provided it contains +nothing but endorsements of your Modified Version by various +parties---for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + +@item +COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled ``History'' +in the various original documents, forming one section Entitled +``History''; likewise combine any sections Entitled ``Acknowledgements'', +and any sections Entitled ``Dedications''. You must delete all +sections Entitled ``Endorsements.'' + +@item +COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + +@item +AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an ``aggregate'' if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + +@item +TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled ``Acknowledgements'', +``Dedications'', or ``History'', the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + +@item +TERMINATION + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. + +@item +FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +@uref{http://www.gnu.org/copyleft/}. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License ``or any later version'' applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. + +@item +RELICENSING + +``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the +site means any set of copyrightable works thus published on the MMC +site. + +``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. + +``Incorporate'' means to publish or republish a Document, in whole or +in part, as part of another Document. + +An MMC is ``eligible for relicensing'' if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. + +@end enumerate + +@page +@heading ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + +@smallexample +@group + Copyright (C) @var{year} @var{your name}. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. +@end group +@end smallexample + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with@dots{}Texts.'' line with this: + +@smallexample +@group + with the Invariant Sections being @var{list their titles}, with + the Front-Cover Texts being @var{list}, and with the Back-Cover Texts + being @var{list}. +@end group +@end smallexample + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. + +@c Local Variables: +@c ispell-local-pdict: "ispell-dict" +@c End: + diff --git a/devspec.en_US/project/recutils/doc/parse-datetime.texi b/devspec.en_US/project/recutils/doc/parse-datetime.texi new file mode 100755 index 0000000..193575e --- /dev/null +++ b/devspec.en_US/project/recutils/doc/parse-datetime.texi @@ -0,0 +1,594 @@ +@c GNU date syntax documentation + +@c Copyright (C) 1994-2006, 2009-2019 Free Software Foundation, Inc. + +@c Permission is granted to copy, distribute and/or modify this document +@c under the terms of the GNU Free Documentation License, Version 1.3 or +@c any later version published by the Free Software Foundation; with no +@c Invariant Sections, no Front-Cover Texts, and no Back-Cover +@c Texts. A copy of the license is included in the ``GNU Free +@c Documentation License'' file as part of this distribution. + +@node Date input formats +@chapter Date input formats + +@cindex date input formats +@findex parse_datetime + +First, a quote: + +@quotation +Our units of temporal measurement, from seconds on up to months, are so +complicated, asymmetrical and disjunctive so as to make coherent mental +reckoning in time all but impossible. Indeed, had some tyrannical god +contrived to enslave our minds to time, to make it all but impossible +for us to escape subjection to sodden routines and unpleasant surprises, +he could hardly have done better than handing down our present system. +It is like a set of trapezoidal building blocks, with no vertical or +horizontal surfaces, like a language in which the simplest thought +demands ornate constructions, useless particles and lengthy +circumlocutions. Unlike the more successful patterns of language and +science, which enable us to face experience boldly or at least +level-headedly, our system of temporal calculation silently and +persistently encourages our terror of time. + +@dots{} It is as though architects had to measure length in feet, width +in meters and height in ells; as though basic instruction manuals +demanded a knowledge of five different languages. It is no wonder then +that we often look into our own immediate past or future, last Tuesday +or a week from Sunday, with feelings of helpless confusion. @dots{} + +---Robert Grudin, @cite{Time and the Art of Living}. +@end quotation + +This section describes the textual date representations that GNU +programs accept. These are the strings you, as a user, can supply as +arguments to the various programs. The C interface (via the +@code{parse_datetime} function) is not described here. + +@menu +* General date syntax:: Common rules. +* Calendar date items:: 19 Dec 1994. +* Time of day items:: 9:20pm. +* Time zone items:: EST, PDT, UTC, @dots{} +* Combined date and time of day items:: 1972-09-24T20:02:00,000000-0500. +* Day of week items:: Monday and others. +* Relative items in date strings:: next tuesday, 2 years ago. +* Pure numbers in date strings:: 19931219, 1440. +* Seconds since the Epoch:: @@1078100502. +* Specifying time zone rules:: TZ="America/New_York", TZ="UTC0". +* Authors of parse_datetime:: Bellovin, Eggert, Salz, Berets, et al. +@end menu + + +@node General date syntax +@section General date syntax + +@cindex general date syntax + +@cindex items in date strings +A @dfn{date} is a string, possibly empty, containing many items +separated by whitespace. The whitespace may be omitted when no +ambiguity arises. The empty string means the beginning of today (i.e., +midnight). Order of the items is immaterial. A date string may contain +many flavors of items: + +@itemize @bullet +@item calendar date items +@item time of day items +@item time zone items +@item combined date and time of day items +@item day of the week items +@item relative items +@item pure numbers. +@end itemize + +@noindent We describe each of these item types in turn, below. + +@cindex numbers, written-out +@cindex ordinal numbers +@findex first @r{in date strings} +@findex next @r{in date strings} +@findex last @r{in date strings} +A few ordinal numbers may be written out in words in some contexts. This is +most useful for specifying day of the week items or relative items (see +below). Among the most commonly used ordinal numbers, the word +@samp{last} stands for @math{-1}, @samp{this} stands for 0, and +@samp{first} and @samp{next} both stand for 1. Because the word +@samp{second} stands for the unit of time there is no way to write the +ordinal number 2, but for convenience @samp{third} stands for 3, +@samp{fourth} for 4, @samp{fifth} for 5, +@samp{sixth} for 6, @samp{seventh} for 7, @samp{eighth} for 8, +@samp{ninth} for 9, @samp{tenth} for 10, @samp{eleventh} for 11 and +@samp{twelfth} for 12. + +@cindex months, written-out +When a month is written this way, it is still considered to be written +numerically, instead of being ``spelled in full''; this changes the +allowed strings. + +@cindex language, in dates +In the current implementation, only English is supported for words and +abbreviations like @samp{AM}, @samp{DST}, @samp{EST}, @samp{first}, +@samp{January}, @samp{Sunday}, @samp{tomorrow}, and @samp{year}. + +@cindex language, in dates +@cindex time zone item +The output of the @command{date} command +is not always acceptable as a date string, +not only because of the language problem, but also because there is no +standard meaning for time zone items like @samp{IST}@. When using +@command{date} to generate a date string intended to be parsed later, +specify a date format that is independent of language and that does not +use time zone items other than @samp{UTC} and @samp{Z}@. Here are some +ways to do this: + +@example +$ LC_ALL=C TZ=UTC0 date +Mon Mar 1 00:21:42 UTC 2004 +$ TZ=UTC0 date +'%Y-%m-%d %H:%M:%SZ' +2004-03-01 00:21:42Z +$ date --rfc-3339=ns # --rfc-3339 is a GNU extension. +2004-02-29 16:21:42.692722128-08:00 +$ date --rfc-2822 # a GNU extension +Sun, 29 Feb 2004 16:21:42 -0800 +$ date +'%Y-%m-%d %H:%M:%S %z' # %z is a GNU extension. +2004-02-29 16:21:42 -0800 +$ date +'@@%s.%N' # %s and %N are GNU extensions. +@@1078100502.692722128 +@end example + +@cindex case, ignored in dates +@cindex comments, in dates +Alphabetic case is completely ignored in dates. Comments may be introduced +between round parentheses, as long as included parentheses are properly +nested. Hyphens not followed by a digit are currently ignored. Leading +zeros on numbers are ignored. + +@cindex leap seconds +Invalid dates like @samp{2005-02-29} or times like @samp{24:00} are +rejected. In the typical case of a host that does not support leap +seconds, a time like @samp{23:59:60} is rejected even if it +corresponds to a valid leap second. + + +@node Calendar date items +@section Calendar date items + +@cindex calendar date item + +A @dfn{calendar date item} specifies a day of the year. It is +specified differently, depending on whether the month is specified +numerically or literally. All these strings specify the same calendar date: + +@example +1972-09-24 # ISO 8601. +72-9-24 # Assume 19xx for 69 through 99, + # 20xx for 00 through 68. +72-09-24 # Leading zeros are ignored. +9/24/72 # Common U.S. writing. +24 September 1972 +24 Sept 72 # September has a special abbreviation. +24 Sep 72 # Three-letter abbreviations always allowed. +Sep 24, 1972 +24-sep-72 +24sep72 +@end example + +The year can also be omitted. In this case, the last specified year is +used, or the current year if none. For example: + +@example +9/24 +sep 24 +@end example + +Here are the rules. + +@cindex ISO 8601 date format +@cindex date format, ISO 8601 +For numeric months, the ISO 8601 format +@samp{@var{year}-@var{month}-@var{day}} is allowed, where @var{year} is +any positive number, @var{month} is a number between 01 and 12, and +@var{day} is a number between 01 and 31. A leading zero must be present +if a number is less than ten. If @var{year} is 68 or smaller, then 2000 +is added to it; otherwise, if @var{year} is less than 100, +then 1900 is added to it. The construct +@samp{@var{month}/@var{day}/@var{year}}, popular in the United States, +is accepted. Also @samp{@var{month}/@var{day}}, omitting the year. + +@cindex month names in date strings +@cindex abbreviations for months +Literal months may be spelled out in full: @samp{January}, +@samp{February}, @samp{March}, @samp{April}, @samp{May}, @samp{June}, +@samp{July}, @samp{August}, @samp{September}, @samp{October}, +@samp{November} or @samp{December}. Literal months may be abbreviated +to their first three letters, possibly followed by an abbreviating dot. +It is also permitted to write @samp{Sept} instead of @samp{September}. + +When months are written literally, the calendar date may be given as any +of the following: + +@example +@var{day} @var{month} @var{year} +@var{day} @var{month} +@var{month} @var{day} @var{year} +@var{day}-@var{month}-@var{year} +@end example + +Or, omitting the year: + +@example +@var{month} @var{day} +@end example + + +@node Time of day items +@section Time of day items + +@cindex time of day item + +A @dfn{time of day item} in date strings specifies the time on a given +day. Here are some examples, all of which represent the same time: + +@example +20:02:00.000000 +20:02 +8:02pm +20:02-0500 # In EST (U.S. Eastern Standard Time). +@end example + +@cindex leap seconds +More generally, the time of day may be given as +@samp{@var{hour}:@var{minute}:@var{second}}, where @var{hour} is +a number between 0 and 23, @var{minute} is a number between 0 and +59, and @var{second} is a number between 0 and 59 possibly followed by +@samp{.} or @samp{,} and a fraction containing one or more digits. +Alternatively, +@samp{:@var{second}} can be omitted, in which case it is taken to +be zero. On the rare hosts that support leap seconds, @var{second} +may be 60. + +@findex am @r{in date strings} +@findex pm @r{in date strings} +@findex midnight @r{in date strings} +@findex noon @r{in date strings} +If the time is followed by @samp{am} or @samp{pm} (or @samp{a.m.} +or @samp{p.m.}), @var{hour} is restricted to run from 1 to 12, and +@samp{:@var{minute}} may be omitted (taken to be zero). @samp{am} +indicates the first half of the day, @samp{pm} indicates the second +half of the day. In this notation, 12 is the predecessor of 1: +midnight is @samp{12am} while noon is @samp{12pm}. +(This is the zero-oriented interpretation of @samp{12am} and @samp{12pm}, +as opposed to the old tradition derived from Latin +which uses @samp{12m} for noon and @samp{12pm} for midnight.) + +@cindex time zone correction +@cindex minutes, time zone correction by +The time may alternatively be followed by a time zone correction, +expressed as @samp{@var{s}@var{hh}@var{mm}}, where @var{s} is @samp{+} +or @samp{-}, @var{hh} is a number of zone hours and @var{mm} is a number +of zone minutes. +The zone minutes term, @var{mm}, may be omitted, in which case +the one- or two-digit correction is interpreted as a number of hours. +You can also separate @var{hh} from @var{mm} with a colon. +When a time zone correction is given this way, it +forces interpretation of the time relative to +Coordinated Universal Time (UTC), overriding any previous +specification for the time zone or the local time zone. For example, +@samp{+0530} and @samp{+05:30} both stand for the time zone 5.5 hours +ahead of UTC (e.g., India). +This is the best way to +specify a time zone correction by fractional parts of an hour. +The maximum zone correction is 24 hours. + +Either @samp{am}/@samp{pm} or a time zone correction may be specified, +but not both. + + +@node Time zone items +@section Time zone items + +@cindex time zone item + +A @dfn{time zone item} specifies an international time zone, indicated +by a small set of letters, e.g., @samp{UTC} or @samp{Z} +for Coordinated Universal +Time. Any included periods are ignored. By following a +non-daylight-saving time zone by the string @samp{DST} in a separate +word (that is, separated by some white space), the corresponding +daylight saving time zone may be specified. +Alternatively, a non-daylight-saving time zone can be followed by a +time zone correction, to add the two values. This is normally done +only for @samp{UTC}; for example, @samp{UTC+05:30} is equivalent to +@samp{+05:30}. + +Time zone items other than @samp{UTC} and @samp{Z} +are obsolescent and are not recommended, because they +are ambiguous; for example, @samp{EST} has a different meaning in +Australia than in the United States. Instead, it's better to use +unambiguous numeric time zone corrections like @samp{-0500}, as +described in the previous section. + +If neither a time zone item nor a time zone correction is supplied, +timestamps are interpreted using the rules of the default time zone +(@pxref{Specifying time zone rules}). + + +@node Combined date and time of day items +@section Combined date and time of day items + +@cindex combined date and time of day item +@cindex ISO 8601 date and time of day format +@cindex date and time of day format, ISO 8601 + +The ISO 8601 date and time of day extended format consists of an ISO +8601 date, a @samp{T} character separator, and an ISO 8601 time of +day. This format is also recognized if the @samp{T} is replaced by a +space. + +In this format, the time of day should use 24-hour notation. +Fractional seconds are allowed, with either comma or period preceding +the fraction. ISO 8601 fractional minutes and hours are not +supported. Typically, hosts support nanosecond timestamp resolution; +excess precision is silently discarded. + +Here are some examples: + +@example +2012-09-24T20:02:00.052-05:00 +2012-12-31T23:59:59,999999999+11:00 +1970-01-01 00:00Z +@end example + +@node Day of week items +@section Day of week items + +@cindex day of week item + +The explicit mention of a day of the week will forward the date +(only if necessary) to reach that day of the week in the future. + +Days of the week may be spelled out in full: @samp{Sunday}, +@samp{Monday}, @samp{Tuesday}, @samp{Wednesday}, @samp{Thursday}, +@samp{Friday} or @samp{Saturday}. Days may be abbreviated to their +first three letters, optionally followed by a period. The special +abbreviations @samp{Tues} for @samp{Tuesday}, @samp{Wednes} for +@samp{Wednesday} and @samp{Thur} or @samp{Thurs} for @samp{Thursday} are +also allowed. + +@findex next @var{day} +@findex last @var{day} +A number may precede a day of the week item to move forward +supplementary weeks. It is best used in expression like @samp{third +monday}. In this context, @samp{last @var{day}} or @samp{next +@var{day}} is also acceptable; they move one week before or after +the day that @var{day} by itself would represent. + +A comma following a day of the week item is ignored. + + +@node Relative items in date strings +@section Relative items in date strings + +@cindex relative items in date strings +@cindex displacement of dates + +@dfn{Relative items} adjust a date (or the current date if none) forward +or backward. The effects of relative items accumulate. Here are some +examples: + +@example +1 year +1 year ago +3 years +2 days +@end example + +@findex year @r{in date strings} +@findex month @r{in date strings} +@findex fortnight @r{in date strings} +@findex week @r{in date strings} +@findex day @r{in date strings} +@findex hour @r{in date strings} +@findex minute @r{in date strings} +The unit of time displacement may be selected by the string @samp{year} +or @samp{month} for moving by whole years or months. These are fuzzy +units, as years and months are not all of equal duration. More precise +units are @samp{fortnight} which is worth 14 days, @samp{week} worth 7 +days, @samp{day} worth 24 hours, @samp{hour} worth 60 minutes, +@samp{minute} or @samp{min} worth 60 seconds, and @samp{second} or +@samp{sec} worth one second. An @samp{s} suffix on these units is +accepted and ignored. + +@findex ago @r{in date strings} +The unit of time may be preceded by a multiplier, given as an optionally +signed number. Unsigned numbers are taken as positively signed. No +number at all implies 1 for a multiplier. Following a relative item by +the string @samp{ago} is equivalent to preceding the unit by a +multiplier with value @math{-1}. + +@findex day @r{in date strings} +@findex tomorrow @r{in date strings} +@findex yesterday @r{in date strings} +The string @samp{tomorrow} is worth one day in the future (equivalent +to @samp{day}), the string @samp{yesterday} is worth +one day in the past (equivalent to @samp{day ago}). + +@findex now @r{in date strings} +@findex today @r{in date strings} +@findex this @r{in date strings} +The strings @samp{now} or @samp{today} are relative items corresponding +to zero-valued time displacement, these strings come from the fact +a zero-valued time displacement represents the current time when not +otherwise changed by previous items. They may be used to stress other +items, like in @samp{12:00 today}. The string @samp{this} also has +the meaning of a zero-valued time displacement, but is preferred in +date strings like @samp{this thursday}. + +When a relative item causes the resulting date to cross a boundary +where the clocks were adjusted, typically for daylight saving time, +the resulting date and time are adjusted accordingly. + +The fuzz in units can cause problems with relative items. For +example, @samp{2003-07-31 -1 month} might evaluate to 2003-07-01, +because 2003-06-31 is an invalid date. To determine the previous +month more reliably, you can ask for the month before the 15th of the +current month. For example: + +@example +$ date -R +Thu, 31 Jul 2003 13:02:39 -0700 +$ date --date='-1 month' +'Last month was %B?' +Last month was July? +$ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!' +Last month was June! +@end example + +Also, take care when manipulating dates around clock changes such as +daylight saving leaps. In a few cases these have added or subtracted +as much as 24 hours from the clock, so it is often wise to adopt +universal time by setting the @env{TZ} environment variable to +@samp{UTC0} before embarking on calendrical calculations. + +@node Pure numbers in date strings +@section Pure numbers in date strings + +@cindex pure numbers in date strings + +The precise interpretation of a pure decimal number depends +on the context in the date string. + +If the decimal number is of the form @var{yyyy}@var{mm}@var{dd} and no +other calendar date item (@pxref{Calendar date items}) appears before it +in the date string, then @var{yyyy} is read as the year, @var{mm} as the +month number and @var{dd} as the day of the month, for the specified +calendar date. + +If the decimal number is of the form @var{hh}@var{mm} and no other time +of day item appears before it in the date string, then @var{hh} is read +as the hour of the day and @var{mm} as the minute of the hour, for the +specified time of day. @var{mm} can also be omitted. + +If both a calendar date and a time of day appear to the left of a number +in the date string, but no relative item, then the number overrides the +year. + + +@node Seconds since the Epoch +@section Seconds since the Epoch + +If you precede a number with @samp{@@}, it represents an internal +timestamp as a count of seconds. The number can contain an internal +decimal point (either @samp{.} or @samp{,}); any excess precision not +supported by the internal representation is truncated toward minus +infinity. Such a number cannot be combined with any other date +item, as it specifies a complete timestamp. + +@cindex beginning of time, for POSIX +@cindex epoch, for POSIX +Internally, computer times are represented as a count of seconds since +an epoch---a well-defined point of time. On GNU and +POSIX systems, the epoch is 1970-01-01 00:00:00 UTC, so +@samp{@@0} represents this time, @samp{@@1} represents 1970-01-01 +00:00:01 UTC, and so forth. GNU and most other +POSIX-compliant systems support such times as an extension +to POSIX, using negative counts, so that @samp{@@-1} +represents 1969-12-31 23:59:59 UTC. + +Traditional Unix systems count seconds with 32-bit two's-complement +integers and can represent times from 1901-12-13 20:45:52 through +2038-01-19 03:14:07 UTC@. More modern systems use 64-bit counts +of seconds with nanosecond subcounts, and can represent all the times +in the known lifetime of the universe to a resolution of 1 nanosecond. + +@cindex leap seconds +On most hosts, these counts ignore the presence of leap seconds. +For example, on most hosts @samp{@@915148799} represents 1998-12-31 +23:59:59 UTC, @samp{@@915148800} represents 1999-01-01 00:00:00 +UTC, and there is no way to represent the intervening leap second +1998-12-31 23:59:60 UTC. + +@node Specifying time zone rules +@section Specifying time zone rules + +@vindex TZ +Normally, dates are interpreted using the rules of the current time +zone, which in turn are specified by the @env{TZ} environment +variable, or by a system default if @env{TZ} is not set. To specify a +different set of default time zone rules that apply just to one date, +start the date with a string of the form @samp{TZ="@var{rule}"}. The +two quote characters (@samp{"}) must be present in the date, and any +quotes or backslashes within @var{rule} must be escaped by a +backslash. + +For example, with the GNU @command{date} command you can +answer the question ``What time is it in New York when a Paris clock +shows 6:30am on October 31, 2004?'' by using a date beginning with +@samp{TZ="Europe/Paris"} as shown in the following shell transcript: + +@example +$ export TZ="America/New_York" +$ date --date='TZ="Europe/Paris" 2004-10-31 06:30' +Sun Oct 31 01:30:00 EDT 2004 +@end example + +In this example, the @option{--date} operand begins with its own +@env{TZ} setting, so the rest of that operand is processed according +to @samp{Europe/Paris} rules, treating the string @samp{2004-10-31 +06:30} as if it were in Paris. However, since the output of the +@command{date} command is processed according to the overall time zone +rules, it uses New York time. (Paris was normally six hours ahead of +New York in 2004, but this example refers to a brief Halloween period +when the gap was five hours.) + +A @env{TZ} value is a rule that typically names a location in the +@uref{http://www.twinsun.com/tz/tz-link.htm, @samp{tz} database}. +A recent catalog of location names appears in the +@uref{http://twiki.org/cgi-bin/xtra/tzdate, TWiki Date and Time +Gateway}. A few non-GNU hosts require a colon before a +location name in a @env{TZ} setting, e.g., +@samp{TZ=":America/New_York"}. + +The @samp{tz} database includes a wide variety of locations ranging +from @samp{Arctic/Longyearbyen} to @samp{Antarctica/South_Pole}, but +if you are at sea and have your own private time zone, or if you are +using a non-GNU host that does not support the @samp{tz} +database, you may need to use a POSIX rule instead. Simple +POSIX rules like @samp{UTC0} specify a time zone without +daylight saving time; other rules can specify simple daylight saving +regimes. @xref{TZ Variable,, Specifying the Time Zone with @code{TZ}, +libc, The GNU C Library}. + +@node Authors of parse_datetime +@section Authors of @code{parse_datetime} +@c the anchor keeps the old node name, to try to avoid breaking links +@anchor{Authors of get_date} + +@cindex authors of @code{parse_datetime} + +@cindex Bellovin, Steven M. +@cindex Salz, Rich +@cindex Berets, Jim +@cindex MacKenzie, David +@cindex Meyering, Jim +@cindex Eggert, Paul +@code{parse_datetime} started life as @code{getdate}, as originally +implemented by Steven M. Bellovin +(@email{smb@@research.att.com}) while at the University of North Carolina +at Chapel Hill. The code was later tweaked by a couple of people on +Usenet, then completely overhauled by Rich $alz (@email{rsalz@@bbn.com}) +and Jim Berets (@email{jberets@@bbn.com}) in August, 1990. Various +revisions for the GNU system were made by David MacKenzie, Jim Meyering, +Paul Eggert and others, including renaming it to @code{get_date} to +avoid a conflict with the alternative Posix function @code{getdate}, +and a later rename to @code{parse_datetime}. The Posix function +@code{getdate} can parse more locale-specific dates using +@code{strptime}, but relies on an environment variable and external +file, and lacks the thread-safety of @code{parse_datetime}. + +@cindex Pinard, F. +@cindex Berry, K. +This chapter was originally produced by Fran@,{c}ois Pinard +(@email{pinard@@iro.umontreal.ca}) from the @file{parse_datetime.y} source code, +and then edited by K. Berry (@email{kb@@cs.umb.edu}). diff --git a/devspec.en_US/project/recutils/doc/rec-mode.info b/devspec.en_US/project/recutils/doc/rec-mode.info new file mode 100755 index 0000000..f4fc4c3 --- /dev/null +++ b/devspec.en_US/project/recutils/doc/rec-mode.info @@ -0,0 +1,968 @@ +This is rec-mode.info, produced by makeinfo version 6.3 from +rec-mode.texi. + +This manual is for rec-mode for Emacs, which is part of the GNU recutils +suite (version 1.8, 3 January 2019). + + Copyright (C) 2012-2019 Jose E. Marchesi + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.3 or any later version published by the Free Software + Foundation; with no Invariant Sections, no Front-Cover Texts, and + no Back-Cover Texts. A copy of the license is included in the + section entitled "GNU Free Documentation License". +INFO-DIR-SECTION Database +START-INFO-DIR-ENTRY +* rec-mode: (rec-mode). Emacs mode for editing recfiles. +END-INFO-DIR-ENTRY + + +File: rec-mode.info, Node: Top, Next: Introduction, Up: (dir) + +rec-mode: an Emacs mode for editing recfiles +******************************************** + +This manual documents version 1.8 of rec-mode. + + This manual is for rec-mode for Emacs, which is part of the GNU +recutils suite (version 1.8, 3 January 2019). + + Copyright (C) 2012-2019 Jose E. Marchesi + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.3 or any later version published by the Free Software + Foundation; with no Invariant Sections, no Front-Cover Texts, and + no Back-Cover Texts. A copy of the license is included in the + section entitled "GNU Free Documentation License". + +* Menu: + +* Introduction:: Getting started +* Navigation mode:: User-friendly interface for browing recfiles +* Edition modes:: Edit recfiles in rec-format +* Configuration:: Adapting rec-mode to your needs +* GNU Free Documentation License:: Distribution terms for this document + + -- The Detailed Node Listing -- + +Introduction + +* Installation:: How to install rec-mode +* Activation:: How to activate rec-mode for certain buffers +* Feedback:: Bug reports, ideas, patches etc. + +Navigation mode + +* Record navigation:: Moving through records. +* Field navigation:: Moving through fields in a record. +* Field folding:: Hiding and showing the values of fields. +* Field edition:: Changing the values of fields. +* Searches:: Finding records fufilling some criteria. +* Statistics:: Counting records. +* Data integrity:: Verifying the integrity of the recfile. + +Edition modes + +* Edition modes:: Edit recfiles in rec-format + +Configuration + +* Finding the recutils:: Specifying the location of the recutils. +* Records appearance:: Setting the way records are displayed. + + +File: rec-mode.info, Node: Introduction, Next: Navigation mode, Prev: Top, Up: Top + +1 Introduction +************** + +rec-mode is a mode for browsing and editing recfiles, which are text +files containing data structured in fields and records. It is part of +the GNU recutils(1) suite. + + Recfiles are text-based databases which are easy to read and write +manually using a text editor. At the same time they feature enough +structure so they can be read, edited and processed automatically by +programs. + +* Menu: + +* Installation:: How to install rec-mode +* Activation:: How to activate rec-mode for certain buffers +* Feedback:: Bug reports, ideas, patches etc. + + ---------- Footnotes ---------- + + (1) <http://www.gnu.org/software/recutils> + + +File: rec-mode.info, Node: Installation, Next: Activation, Up: Introduction + +1.1 Installation +================ + +rec-mode is implemented in a self-contained elisp file called +'rec-mode.el'. It can be obtained in several ways: + + - As part of a released tarball of recutils. 'rec-mode.el' can be + found in the 'etc/' directory in the tarball contents. + - As part of the source tree cloned from the development git repo. + 'rec-mode.el' can be found in the 'etc/' directory in the recutils + sources tree. + - As a single file downloaded form some other location in internet. + - It may be already installed as part of a binary package in some + distribution. + +In the first three cases you need to tell Emacs where to locate the +'rec-mode.el' file and to load it. Add the following to your '.emacs' +file. + (add-to-list 'load-path "~/path/to/recmode/") + (require 'rec-mode) + +If 'rec-mode.el' was installed as part of a binary package in a +distribution then you usually don't have to touch the 'load-path' +variable. Depending on the specific case you may have to 'require' the +package. + + +File: rec-mode.info, Node: Activation, Next: Feedback, Prev: Installation, Up: Introduction + +1.2 Activation +============== + +To make sure files with extension '.rec' use rec-mode, add the following +line to your '.emacs' file. + (add-to-list 'auto-mode-alist '("\\.rec\\'" . rec-mode)) +rec-mode buffers need font-lock to be turned on - this is the default in +Emacs(1). + + With this setup, all files with extension '.rec' will be put into rec +mode. As an alternative, make the first line of a recfile look like +this: + + # -*- mode: rec -*- + +which will select rec-mode for this buffer no matter what the file's +name is. + + ---------- Footnotes ---------- + + (1) If you don't use font-lock globally, turn it on in the rec buffer +with '(add-hook 'rec-mode-hook 'turn-on-font-lock)' + + +File: rec-mode.info, Node: Feedback, Prev: Activation, Up: Introduction + +1.3 Feedback +============ + +If you find problems with rec-mode, or if you have questions, remarks, +or ideas about it, please mail to the recutils mailing list +<bug-recutils@gnu.org>. If you are not a member of the mailing list, +your mail will be passed to the list after a moderator has approved +it(1). + + ---------- Footnotes ---------- + + (1) Please consider subscribing to the mailing list, in order to +minimize the work the mailing list moderators have to do. The +subscription can be done online at +<http://lists.gnu.org/mailman/listinfo/bug-recutils>. + + +File: rec-mode.info, Node: Navigation mode, Next: Edition modes, Prev: Introduction, Up: Top + +2 Navigation mode +***************** + +When a recfile is visited in Emacs and rec-mode is activated, the +contents of the file are examined and parsed in order to determine if it +is a valid recfile and, in that case, to extract information like the +kind of records stored in the file. + + If the file does not contain valid rec data then the buffer is put in +'fundamental-mode' and a description of the syntax error, along its +location, is notified in the echo area. + + If the file contains valid rec data, the mode sets itself in what is +known as "navigation mode". In this mode the buffer is made read-only +and it is narrowed to the first record present in the file. Also, the +presentation of the record contents is slightly changed in order to +improve the visualization of the data: continuation line marks are +replaced by indentation, big fields are folded, etc. The modeline is +changed in order to reflect the type of the records being navigated. + + At this point the user can navigate through the records and fields +contained in the file, and edit the contents of the fields and the +structure of the records, by using the commands described in the +following subsections. + +* Menu: + +* Record navigation:: Moving through records +* Field navigation:: Moving through fields in a record +* Field folding:: Hiding and showing the values of fields +* Field edition:: Changing the values of fields +* Searches:: Finding records fulfilling some criteria +* Statistics:: Counting records +* Data integrity:: Verifying the integrity of the recfile + + +File: rec-mode.info, Node: Record navigation, Next: Field navigation, Up: Navigation mode + +2.1 Record navigation +===================== + +The following commands jump to other records in the buffer. + +'n' ('rec-cmd-goto-next-rec') + Display the next record of the same type in the buffer. + 'C-u N n' will move next N times. +'p' ('rec-cmd-goto-previous-rec') + Display the previous record of the same type in the buffer. + 'C-u N p' will move backwards N times. +'d' ('rec-cmd-show-descriptor') + Display the record descriptor applicable to the current record. If + the current record is anonymous, i.e. there is not record + descriptor. then this command does nothing. +'b' ('rec-cmd-jump-back') + Display the record previously displayed in the buffer. +'C-c t' ('rec-find-type') + Prompt the user for one of the record types present in the recfile + and display the first record of the selected type. + + +File: rec-mode.info, Node: Field navigation, Next: Field folding, Prev: Record navigation, Up: Navigation mode + +2.2 Field navigation +==================== + +The following commands iterate through the fields in a record, and to +get information about some of the properties of the fields. + +'TAB' ('rec-cmd-goto-next-field') + Move the cursor to the beginning of the name of the next field in + the current record. If the cursor is currently located at the last + field of the record then move it to the beginning of the first + field. +'t' ('rec-cmd-show-type') + Show information about the type of the field under the cursor, if + it is defined. + + +File: rec-mode.info, Node: Field folding, Next: Field edition, Prev: Field navigation, Up: Navigation mode + +2.3 Field folding +================= + +Fields in recfiles can contain data of any size, and sometimes it is +difficult to have an overview of the contents of the record. The +following commands fold and unfold the value of the field under the +cursor. + +'SPC' ('rec-cmd-toggle-field-visibility') + Toggle the visibility of the field under the cursor. When a field + is folded then three dots are displayed in the buffer instead of + the value of the field. + + It is possible to automatically fold any field whose value exceeds + a certain limit which can be configured by the user. *Note Records + appearance::. + + +File: rec-mode.info, Node: Field edition, Next: Searches, Prev: Field folding, Up: Navigation mode + +2.4 Field edition +================= + +The following commands change the value of the field under the cursor. + +'e' ('rec-cmd-edit-field') + Edit the value of the field under the cursor. The specific action + depends on the type of the field in the corresponding record + descriptor: + - For date fields a calendar buffer is opened in another window + and the focus is moved there. The user can then select a date + by moving the cursor there and press 'RET' in order to set + that date as the value for the field. Alternatively the user + can press 't' in order to set the field to "now", or 'q' to + cancel the operation. In the later case the value of the + field is left untouched. + - For enumerated and bool fields a fast-select buffer is opened + in another window, showing a list of labeled options. The + labels are single digits and letters. The user can then + select ony of the options by pressing the corresponding label, + or cancel the operation by pressing 'RET'. In the later case + the value of the field is left untouched. + - For any other kind of fields an edition buffer is opened in + another window, showing the current contents of the field. + The user can then edit the buffer as desired. When she is + done, the user can then press 'C-c C-c' in order to set the + new value of the field, or just kill the buffer to cancel the + operation. +'m' ('rec-cmd-trim-field-value') + Trim the value of the field under the cursor, removing any sequence + of leading and trailing blank characters. + + +File: rec-mode.info, Node: Searches, Next: Statistics, Prev: Field edition, Up: Navigation mode + +2.5 Searches +============ + +The following commands jump to the first record in the buffer satisfying +some criteria. + +'s q' ('rec-cmd-select-fast') + Display the first record having a field whose value matches a given + fixed pattern. This is equivalent of using the command line option + '-q' of 'recsel'. If a prefix argument is specified then the + search is case-insensitive. +'s s' ('rec-cmd-select-sex') + Display the first record in the buffer satisfying a given selection + expression. This is equivalent of using the command line option + '-e' of 'recsel'. If a prefix argument is specified then the + search is case-insensitive. + + +File: rec-mode.info, Node: Statistics, Next: Data integrity, Prev: Searches, Up: Navigation mode + +2.6 Statistics +============== + +The following commands allow to count records in the current buffer +based on some provided criteria. + +'I' ('rec-cmd-show-info') + Show the number of records in the buffer categorized by type. +'#' ('rec-cmd-count') + Count the number of records in the buffer having the same type as + the current record. With a numeric prefix N, ask for a selection + expression and count the number of records in the buffer satisfying + the expression. + + Note that rec-mode tries to guess a reasonable default for the + selection expression, depending on the type of the field and its + value. If the user press 'RET' then the provided default selection + expression is used. +'%' ('rec-cmd-statistics') + If the field under the cursor contains an enumerated value, show + the percentages of records in the current record set having fields + with each of the possible values of the enumerated type. + + +File: rec-mode.info, Node: Data integrity, Prev: Statistics, Up: Navigation mode + +2.7 Data integrity +================== + +The integrity of the rec data stored in the file can be checked using +the following commands. + +'c' ('rec-cmd-compile') + Compile the buffer with 'recfix' and open a compilation window + showing the result of the command. In case some error or warning + is reported, the user can jump to the location triggering the error + by pressing 'RET' in the compilation window. + + +File: rec-mode.info, Node: Edition modes, Next: Configuration, Prev: Navigation mode, Up: Top + +3 Edition modes +*************** + +The navigation mode described in a previous chapter is mainly intended +for browsing recdata and doing changes at the record level: editing the +contents of a field, adding or removing fields, etc. In order to +perform broader changes, such as adding/deleting record descriptors, +records or comment blocks, the user must enter into one of the "edition +modes". + + There are three edition modes, covering different areas of the +recfile: record, record type and buffer. When an edition mode is +entered the buffer is set in read/write mode, it is narrowed to the +desired area and any embellishment used in navigation mode is +removed(1). As a general rule, the commands available in navigation +mode are also available in the edition mode prefixed with 'C-c'. Thus, +'C-c n' would make the cursor to jump to the beginning of the next +record. + + The following commands are used to enter into one of the available +edition modes from the navigation mode. + +'R' ('rec-edit-record') + Edit the record being navigated. +'T' ('rec-edit-type') + Edit the record set being navigated. +'B' ('rec-edit-buffer') + Edit the buffer. + +After doing modifications in the buffer, the user can go back to +navigation mode by using the following command. + +'C-c C-c' ('rec-finish-editing') + Finish the current edition and return to navigation mode. If a + syntactic error was introduced in the edition activity then the + error is reported in the echo area and navigation mode is not + entered. + + ---------- Footnotes ---------- + + (1) Exceptuating font-lock + + +File: rec-mode.info, Node: Configuration, Next: GNU Free Documentation License, Prev: Edition modes, Up: Top + +4 Configuration +*************** + +TBC + +* Menu: + +* Finding the recutils:: Specifying the location of the recutils. +* Records appearance:: Setting the way records are displayed + + +File: rec-mode.info, Node: Finding the recutils, Next: Records appearance, Up: Configuration + +4.1 Finding the recutils +======================== + +'rec-mode' makes use of the several utilities which are part of the +recutils. The following variables tell the mode where to find the +utilities. The default values of these variables must work if the +recutils are installed system-wide in the system. + +'rec-recsel' + Name of the 'recsel' utility from the GNU recutils. +'rec-recinf' + Name of the 'recinf' utility from the GNU recutils. +'rec-recfix' + Name of the 'recfix' utility from the GNU recutils. + + +File: rec-mode.info, Node: Records appearance, Prev: Finding the recutils, Up: Configuration + +4.2 Records appearance +====================== + +The appearance of the records in navigation mode can be customised by +tweaking the value of the following variables. + +'rec-max-lines-in-fields' + Values in fiels having more than the specified number of lines will + be hidden by default in navigation mode. When hidden, an ellipsis + is shown instead of the value of the field. Default is '15'. + + +File: rec-mode.info, Node: GNU Free Documentation License, Prev: Configuration, Up: Top + +Appendix A GNU Free Documentation License +***************************************** + + Version 1.3, 3 November 2008 + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + <http://fsf.org/> + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. We + recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it can + be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You accept + the license if you copy, modify or distribute the work in a way + requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in the + notice that says that the Document is released under this License. + If a section does not fit the above definition of Secondary then it + is not allowed to be designated as Invariant. The Document may + contain zero Invariant Sections. If the Document does not identify + any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed + of pixels) generic paint programs or (for drawings) some widely + available drawing editor, and that is suitable for input to text + formatters or for automatic translation to a variety of formats + suitable for input to text formatters. A copy made in an otherwise + Transparent file format whose markup, or absence of markup, has + been arranged to thwart or discourage subsequent modification by + readers is not Transparent. An image format is not Transparent if + used for any substantial amount of text. A copy that is not + "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and standard-conforming + simple HTML, PostScript or PDF designed for human modification. + Examples of transparent image formats include PNG, XCF and JPG. + Opaque formats include proprietary formats that can be read and + edited only by proprietary word processors, SGML or XML for which + the DTD and/or processing tools are not generally available, and + the machine-generated HTML, PostScript or PDF produced by some word + processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow the + conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the title + equally prominent and visible. You may add other material on the + covers in addition. Copying with changes limited to the covers, as + long as they preserve the title of the Document and satisfy these + conditions, can be treated as verbatim copying in other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a machine-readable + Transparent copy along with each Opaque copy, or state in or with + each Opaque copy a computer-network location from which the general + network-using public has access to download using public-standard + network protocols a complete Transparent copy of the Document, free + of added material. If you use the latter option, you must take + reasonably prudent steps, when you begin distribution of Opaque + copies in quantity, to ensure that this Transparent copy will + remain thus accessible at the stated location until at least one + year after the last time you distribute an Opaque copy (directly or + through your agents or retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of copies, + to give them a chance to provide you with an updated version of the + Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with the + Modified Version filling the role of the Document, thus licensing + distribution and modification of the Modified Version to whoever + possesses a copy of it. In addition, you must do these things in + the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of previous + versions (which should, if there were any, be listed in the + History section of the Document). You may use the same title + as a previous version if the original publisher of that + version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on the + Title Page. If there is no section Entitled "History" in the + Document, create one stating the title, year, authors, and + publisher of the Document as given on its Title Page, then add + an item describing the Modified Version as stated in the + previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in the + "History" section. You may omit a network location for a work + that was published at least four years before the Document + itself, or if the original publisher of the version it refers + to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section + all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, unaltered + in their text and in their titles. Section numbers or the + equivalent are not considered part of the section titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option designate + some or all of these sections as invariant. To do this, add their + titles to the list of Invariant Sections in the Modified Version's + license notice. These titles must be distinct from any other + section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end of + the list of Cover Texts in the Modified Version. Only one passage + of Front-Cover Text and one of Back-Cover Text may be added by (or + through arrangements made by) any one entity. If the Document + already includes a cover text for the same cover, previously added + by you or by arrangement made by the same entity you are acting on + behalf of, you may not add another; but you may replace the old + one, on explicit permission from the previous publisher that added + the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination all + of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the documents + in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow this + License in all other respects regarding verbatim copying of that + document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of a + storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly and + finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from you + under this License. If your rights have been terminated and not + permanently reinstated, receipt of a copy of some or all of the + same material does not give you any rights to use it. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + <http://www.gnu.org/copyleft/>. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If the + Document does not specify a version number of this License, you may + choose any version ever published (not as a draft) by the Free + Software Foundation. If the Document specifies that a proxy can + decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of free +software license, such as the GNU General Public License, to permit +their use in free software. + + + +Tag Table: +Node: Top756 +Node: Introduction2808 +Ref: Introduction-Footnote-13559 +Node: Installation3606 +Node: Activation4723 +Ref: Activation-Footnote-15390 +Node: Feedback5516 +Ref: Feedback-Footnote-15934 +Node: Navigation mode6155 +Node: Record navigation7893 +Node: Field navigation8847 +Node: Field folding9523 +Node: Field edition10269 +Node: Searches12063 +Node: Statistics12839 +Node: Data integrity13908 +Node: Edition modes14420 +Ref: Edition modes-Footnote-116095 +Node: Configuration16126 +Node: Finding the recutils16427 +Node: Records appearance17041 +Node: GNU Free Documentation License17544 + +End Tag Table diff --git a/devspec.en_US/project/recutils/doc/rec-mode.texi b/devspec.en_US/project/recutils/doc/rec-mode.texi new file mode 100755 index 0000000..dd3e983 --- /dev/null +++ b/devspec.en_US/project/recutils/doc/rec-mode.texi @@ -0,0 +1,465 @@ +\input texinfo +@comment %**start of header +@setfilename rec-mode.info +@include version-rec-mode.texi +@settitle rec-mode for Emacs +@afourpaper +@comment %**end of header + +@c Macros used in this file. + +@macro ie +@i{i.e.@:} +@end macro + +@macro reccmd{key,command} +@item @kbd{\key\} @tie{}@tie{}@tie{}@tie{}(@code{\command\}) +@end macro + +@copying +This manual is for rec-mode for Emacs, which is part of the GNU +recutils suite (version @value{VERSION}, @value{UPDATED}). + +Copyright @copyright{} 2012-2019 Jose E. Marchesi + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A +copy of the license is included in the section entitled ``GNU Free +Documentation License''. +@end quotation +@end copying + +@dircategory Database +@direntry +* rec-mode: (rec-mode). Emacs mode for editing recfiles. +@end direntry + +@titlepage +@title rec-mode: an Emacs mode for editing recfiles +@subtitle for version @value{VERSION}, @value{UPDATED} +@author by Jose E. Marchesi +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@contents + +@ifnottex +@node Top +@top rec-mode: an Emacs mode for editing recfiles + +This manual documents version @value{VERSION} of rec-mode. + +@insertcopying +@end ifnottex + +@menu +* Introduction:: Getting started +* Navigation mode:: User-friendly interface for browing recfiles +* Edition modes:: Edit recfiles in rec-format +* Configuration:: Adapting rec-mode to your needs +* GNU Free Documentation License:: Distribution terms for this document + +@detailmenu + --- The Detailed Node Listing --- + +Introduction + +* Installation:: How to install rec-mode +* Activation:: How to activate rec-mode for certain buffers +* Feedback:: Bug reports, ideas, patches etc. + +Navigation mode + +* Record navigation:: Moving through records. +* Field navigation:: Moving through fields in a record. +* Field folding:: Hiding and showing the values of fields. +* Field edition:: Changing the values of fields. +* Searches:: Finding records fufilling some criteria. +* Statistics:: Counting records. +* Data integrity:: Verifying the integrity of the recfile. + +Edition modes + +* Edition modes:: Edit recfiles in rec-format + +Configuration + +* Finding the recutils:: Specifying the location of the recutils. +* Records appearance:: Setting the way records are displayed. +@end detailmenu +@end menu + +@node Introduction +@chapter Introduction + +rec-mode is a mode for browsing and editing recfiles, which are text +files containing data structured in fields and records. It is part of +the GNU recutils@footnote{@url{http://www.gnu.org/software/recutils}} +suite. + + +Recfiles are text-based databases which are easy to read and write +manually using a text editor. At the same time they feature enough +structure so they can be read, edited and processed automatically by +programs. + +@menu +* Installation:: How to install rec-mode +* Activation:: How to activate rec-mode for certain buffers +* Feedback:: Bug reports, ideas, patches etc. +@end menu + +@node Installation +@section Installation + +rec-mode is implemented in a self-contained elisp file called +@file{rec-mode.el}. It can be obtained in several ways: + +@itemize @minus +@item As part of a released tarball of recutils. @file{rec-mode.el} +can be found in the @file{etc/} directory in the tarball contents. +@item As part of the source tree cloned from the development git +repo. @file{rec-mode.el} can be found in the @file{etc/} directory in +the recutils sources tree. +@item As a single file downloaded form some other location in +internet. +@item It may be already installed as part of a binary package in some +distribution. +@end itemize + +@noindent In the first three cases you need to tell Emacs where to locate the +@file{rec-mode.el} file and to load it. Add the following to your +@file{.emacs} file. +@lisp +(add-to-list 'load-path "~/path/to/recmode/") +(require 'rec-mode) +@end lisp + +@noindent If @file{rec-mode.el} was installed as part of a binary +package in a distribution then you usually don't have to touch the +@code{load-path} variable. Depending on the specific case you may +have to @code{require} the package. + +@node Activation +@section Activation +@cindex activation + +To make sure files with extension @file{.rec} use rec-mode, add the +following line to your @file{.emacs} file. +@lisp +(add-to-list 'auto-mode-alist '("\\.rec\\'" . rec-mode)) +@end lisp +@noindent rec-mode buffers need font-lock to be turned on - this is +the default in Emacs@footnote{If you don't use font-lock globally, +turn it on in the rec buffer with @code{(add-hook 'rec-mode-hook +'turn-on-font-lock)}}. + +With this setup, all files with extension @samp{.rec} will be put into +rec mode. As an alternative, make the first line of a recfile look +like this: + +@example +# -*- mode: rec -*- +@end example + +@noindent which will select rec-mode for this buffer no matter what +the file's name is. + +@node Feedback +@section Feedback +@cindex feedback +@cindex bug reports +@cindex maintainer +@cindex author + +If you find problems with rec-mode, or if you have questions, remarks, +or ideas about it, please mail to the recutils mailing list +@email{bug-recutils@@gnu.org}. If you are not a member of the mailing +list, your mail will be passed to the list after a moderator has +approved it@footnote{Please consider subscribing to the mailing list, +in order to minimize the work the mailing list moderators have to do. +The subscription can be done online at +@url{http://lists.gnu.org/mailman/listinfo/bug-recutils}.}. + +@node Navigation mode +@chapter Navigation mode + +When a recfile is visited in Emacs and rec-mode is activated, the +contents of the file are examined and parsed in order to determine if +it is a valid recfile and, in that case, to extract information like +the kind of records stored in the file. + +If the file does not contain valid rec data then the buffer is put in +@code{fundamental-mode} and a description of the syntax error, along +its location, is notified in the echo area. + +If the file contains valid rec data, the mode sets itself in what is +known as ``navigation mode''. In this mode the buffer is made +read-only and it is narrowed to the first record present in the file. +Also, the presentation of the record contents is slightly changed in +order to improve the visualization of the data: continuation line +marks are replaced by indentation, big fields are folded, etc. The +modeline is changed in order to reflect the type of the records being +navigated. + +At this point the user can navigate through the records and fields +contained in the file, and edit the contents of the fields and the +structure of the records, by using the commands described in the +following subsections. + +@menu +* Record navigation:: Moving through records +* Field navigation:: Moving through fields in a record +* Field folding:: Hiding and showing the values of fields +* Field edition:: Changing the values of fields +* Searches:: Finding records fulfilling some criteria +* Statistics:: Counting records +* Data integrity:: Verifying the integrity of the recfile +@end menu + +@node Record navigation +@section Record navigation +@cindex motion, between records +@cindex jumping, to records +@cindex record navigation + +The following commands jump to other records in the buffer. + +@table @asis +@reccmd{n,rec-cmd-goto-next-rec} +Display the next record of the same type in the buffer. +@*`C-u N n' will move next N times. +@reccmd{p,rec-cmd-goto-previous-rec} +Display the previous record of the same type in the buffer. +@*`C-u N p' will move backwards N times. +@reccmd{d, rec-cmd-show-descriptor} +Display the record descriptor applicable to the current record. If +the current record is anonymous, @ie{} there is not record +descriptor. then this command does nothing. +@reccmd{b, rec-cmd-jump-back} +Display the record previously displayed in the buffer. +@reccmd{C-c t, rec-find-type} +Prompt the user for one of the record types present in the recfile and +display the first record of the selected type. +@end table + +@node Field navigation +@section Field navigation + +The following commands iterate through the fields in a record, and to +get information about some of the properties of the fields. + +@table @asis +@reccmd{TAB, rec-cmd-goto-next-field} +Move the cursor to the beginning of the name of the next field in the +current record. If the cursor is currently located at the last field +of the record then move it to the beginning of the first field. +@reccmd{t, rec-cmd-show-type} +Show information about the type of the field under the cursor, if it +is defined. +@end table + +@node Field folding +@section Field folding + +Fields in recfiles can contain data of any size, and sometimes it is +difficult to have an overview of the contents of the record. The +following commands fold and unfold the value of the field under the +cursor. + +@table @asis +@reccmd{SPC, rec-cmd-toggle-field-visibility} +Toggle the visibility of the field under the cursor. When a field is +folded then three dots are displayed in the buffer instead of the +value of the field. + +It is possible to automatically fold any field whose value exceeds a +certain limit which can be configured by the user. @xref{Records +appearance}. +@end table + +@node Field edition +@section Field edition + +The following commands change the value of the field under the cursor. + +@table @asis +@reccmd{e, rec-cmd-edit-field} +Edit the value of the field under the cursor. The specific action +depends on the type of the field in the corresponding record +descriptor: +@itemize @minus +@item For @b{date} fields a calendar buffer is opened in another window +and the focus is moved there. The user can then select a date by +moving the cursor there and press @kbd{RET} in order to set that date +as the value for the field. Alternatively the user can press @kbd{t} +in order to set the field to ``now'', or @kbd{q} to cancel the +operation. In the later case the value of the field is left +untouched. +@item For @b{enumerated} and @b{bool} fields a fast-select buffer is opened in +another window, showing a list of labeled options. The labels are +single digits and letters. The user can then select ony of the +options by pressing the corresponding label, or cancel the operation +by pressing @kbd{RET}. In the later case the value of the field is +left untouched. +@item For any other kind of fields an edition buffer is opened in +another window, showing the current contents of the field. The user +can then edit the buffer as desired. When she is done, the user can +then press @kbd{C-c C-c} in order to set the new value of the field, +or just kill the buffer to cancel the operation. +@end itemize +@reccmd{m, rec-cmd-trim-field-value} +Trim the value of the field under the cursor, removing any sequence of +leading and trailing blank characters. +@end table + +@node Searches +@section Searches + +The following commands jump to the first record in the buffer +satisfying some criteria. + +@table @asis +@reccmd{s q, rec-cmd-select-fast} +Display the first record having a field whose value matches a given +fixed pattern. This is equivalent of using the command line option +@option{-q} of @command{recsel}. If a prefix argument is specified +then the search is case-insensitive. +@reccmd{s s, rec-cmd-select-sex} +Display the first record in the buffer satisfying a given selection +expression. This is equivalent of using the command line option +@option{-e} of @command{recsel}. If a prefix argument is specified +then the search is case-insensitive. +@end table + +@node Statistics +@section Statistics + +The following commands allow to count records in the current buffer +based on some provided criteria. + +@table @asis +@reccmd{I, rec-cmd-show-info} +Show the number of records in the buffer categorized by type. +@reccmd{#, rec-cmd-count} +Count the number of records in the buffer having the same type as the +current record. With a numeric prefix N, ask for a selection +expression and count the number of records in the buffer satisfying +the expression. + +Note that rec-mode tries to guess a reasonable default for the +selection expression, depending on the type of the field and its +value. If the user press @kbd{RET} then the provided default +selection expression is used. +@reccmd{%, rec-cmd-statistics} +If the field under the cursor contains an enumerated value, show the +percentages of records in the current record set having fields with +each of the possible values of the enumerated type. +@end table + +@node Data integrity +@section Data integrity + +The integrity of the rec data stored in the file can be checked using +the following commands. + +@table @asis +@reccmd{c, rec-cmd-compile} +Compile the buffer with @command{recfix} and open a compilation window +showing the result of the command. In case some error or warning is +reported, the user can jump to the location triggering the error by +pressing @kbd{RET} in the compilation window. +@end table + +@node Edition modes +@chapter Edition modes + +The navigation mode described in a previous chapter is mainly intended +for browsing recdata and doing changes at the record level: editing +the contents of a field, adding or removing fields, etc. In order to +perform broader changes, such as adding/deleting record descriptors, +records or comment blocks, the user must enter into one of the +``edition modes''. + +There are three edition modes, covering different areas of the +recfile: record, record type and buffer. When an edition mode is +entered the buffer is set in read/write mode, it is narrowed to the +desired area and any embellishment used in navigation mode is +removed@footnote{Exceptuating font-lock}. As a general rule, the +commands available in navigation mode are also available in the +edition mode prefixed with @kbd{C-c}. Thus, @kbd{C-c n} would make +the cursor to jump to the beginning of the next record. + +The following commands are used to enter into one of the available +edition modes from the navigation mode. + +@table @asis +@reccmd{R, rec-edit-record} +Edit the record being navigated. +@reccmd{T, rec-edit-type} +Edit the record set being navigated. +@reccmd{B, rec-edit-buffer} +Edit the buffer. +@end table + +@noindent After doing modifications in the buffer, the user can go +back to navigation mode by using the following command. + +@table @asis +@reccmd{C-c C-c, rec-finish-editing} +Finish the current edition and return to navigation mode. If a +syntactic error was introduced in the edition activity then the error +is reported in the echo area and navigation mode is not entered. +@end table + +@node Configuration +@chapter Configuration + +TBC + +@menu +* Finding the recutils:: Specifying the location of the recutils. +* Records appearance:: Setting the way records are displayed +@end menu + +@node Finding the recutils +@section Finding the recutils + +@code{rec-mode} makes use of the several utilities which are part of +the recutils. The following variables tell the mode where to find the +utilities. The default values of these variables must work if the +recutils are installed system-wide in the system. + +@table @code +@item rec-recsel +Name of the @command{recsel} utility from the GNU recutils. +@item rec-recinf +Name of the @command{recinf} utility from the GNU recutils. +@item rec-recfix +Name of the @command{recfix} utility from the GNU recutils. +@end table + +@node Records appearance +@section Records appearance + +The appearance of the records in navigation mode can be customised by +tweaking the value of the following variables. + +@table @code +@item rec-max-lines-in-fields +Values in fiels having more than the specified number of lines will be +hidden by default in navigation mode. When hidden, an ellipsis is +shown instead of the value of the field. Default is @code{15}. +@end table + +@node GNU Free Documentation License +@appendix GNU Free Documentation License + +@include fdl.texi + +@bye diff --git a/devspec.en_US/project/recutils/doc/recutils.info b/devspec.en_US/project/recutils/doc/recutils.info new file mode 100755 index 0000000..6f6f640 --- /dev/null +++ b/devspec.en_US/project/recutils/doc/recutils.info @@ -0,0 +1,6204 @@ +This is recutils.info, produced by makeinfo version 6.3 from +recutils.texi. + +This manual is for GNU recutils (version 1.8, 3 January 2019). + + Copyright (C) 2009-2019 Jose E. Marchesi + + Copyright (C) 1994-2014 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.3 or any later version published by the Free Software + Foundation; with no Invariant Sections, no Front-Cover Texts, and + no Back-Cover Texts. A copy of the license is included in the + section entitled "GNU Free Documentation License". +INFO-DIR-SECTION Database +START-INFO-DIR-ENTRY +* recutils: (recutils). The GNU Recutils manual. +END-INFO-DIR-ENTRY + +INFO-DIR-SECTION Individual utilities +START-INFO-DIR-ENTRY +* recinf: (recutils)Invoking recinf. Get info about recfiles. +* recsel: (recutils)Invoking recsel. Read records. +* recins: (recutils)Invoking recins. Insert records. +* recdel: (recutils)Invoking recdel. Delete records. +* recset: (recutils)Invoking recset. Manage fields. +* recfix: (recutils)Invoking recfix. Fix recfiles. +* csv2rec: (recutils)Invoking csv2rec. CSV to recfiles. +* rec2csv: (recutils)Invoking rec2csv. Recfiles to CSV. +* mdb2rec: (recutils)Invoking mdb2rec. MDB to recfiles. +END-INFO-DIR-ENTRY + + +File: recutils.info, Node: Top, Next: Introduction, Up: (dir) + +GNU Recutils +************ + +This manual documents version 1.8 of the GNU recutils. + + This manual is for GNU recutils (version 1.8, 3 January 2019). + + Copyright (C) 2009-2019 Jose E. Marchesi + + Copyright (C) 1994-2014 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.3 or any later version published by the Free Software + Foundation; with no Invariant Sections, no Front-Cover Texts, and + no Back-Cover Texts. A copy of the license is included in the + section entitled "GNU Free Documentation License". + +* Menu: + +The Basics +* Introduction:: Introducing recutils. +* The Rec Format:: Writing recfiles. + +Using the Recutils +* Querying Recfiles:: Extracting data from recfiles. +* Editing Records:: Inserting and deleting records. +* Editing Fields:: Inserting, modifying and deleting fields. + +Data Integrity +* Field Types:: Restrictions on the values of fields. +* Constraints on Record Sets:: Requiring or forbidding specific fields. +* Checking Recfiles:: Making sure the data is ok. + +Advanced Topics +* Remote Descriptors:: Implementing distributed databases. +* Grouping and Aggregates:: Statistics. +* Queries which Join Records:: Crossing record of different types. +* Auto-Generated Fields:: Counters and time-stamps. +* Encryption:: Storing sensitive information. +* Generating Reports:: Formatted output with templates. +* Interoperability:: Importing and exporting to other formats. +* Bash Builtins:: Boosting the recutils in the shell. + +Reference Material +* Invoking the Utilities:: Exhaustive list of command line arguments. +* Regular Expressions:: Flavor of regexps supported in recutils. +* Date input formats:: Specifying dates and times. + +* GNU Free Documentation License:: Distribution terms for this document. + +Indexes +* Concept Index:: + + -- The Detailed Node Listing -- + ---------------------- + +Here are some other nodes which are really subnodes of the ones +already listed, mentioned here so you can get to them in one step: + +Introduction + +* Purpose:: Why recutils. +* A Little Example:: Recutils in action. + +The Rec Format + +* Fields:: The key-value pairs which comprise the data. +* Records:: The main entities of a recfile. +* Comments:: Information for humans' benefit only. +* Record Descriptors:: Describing different types of records. + +Querying Recfiles + +* Simple Selections:: Introducing 'recsel'. +* Selecting by Type:: Get the records of some given type. +* Selecting by Position:: Get the record occupying some position. +* Random Records:: Get a set of random records. +* Selection Expressions:: Get the records satisfying some expression. +* Field Expressions:: Selecting a subset of fields. +* Sorted Output:: Get the records in a given order. + +Editing Records + +* Inserting Records:: Inserting data into recfiles. +* Deleting Records:: Removing entries. +* Sorting Records:: Physical reordering of records. + +Editing Fields + +* Setting Fields:: Editing field values. +* Adding Fields:: Adding new fields to records. +* Deleting Fields:: Removing or commenting-out fields. + +Field Types + +* Declaring Types:: Declaration of types in record descriptors. +* Types and Fields:: Associating fields with types. +* Scalar Field Types:: Numbers and ranges. +* String Field Types:: Lines, limited strings and regular expressions. +* Enumerated Field Types:: Enumerations and boolean values. +* Date and Time Types:: Dates and times. +* Other Field Types:: Emails, fields, UUIDs, ... + +Constraints on Record Sets + +* Mandatory Fields:: Requiring the presence of fields. +* Prohibited Fields:: Forbidding the presence of fields. +* Allowed Fields:: Restricting the presence of fields. +* Keys and Unique Fields:: Fields characterizing records. +* Size Constraints:: Limiting the size of a record set. +* Arbitrary Constraints:: Constraints records must comply with. + +Checking Recfiles + +* Syntactical Errors:: Fixing structure errors in recfiles. +* Semantic Errors:: Fixing semantic errors in recfiles. + +Remote Descriptors + +Grouping and Aggregates + +* Grouping Records:: Combining records by fields. +* Aggregate Functions:: Statistics and more. + +Joins + +* Foreign Keys:: Referring records from another records. +* Joining Records:: Performing cross-joins. + +Auto-Generated Fields + +* Counters:: Generating incremental Ids. +* Unique Identifiers:: Generating universally unique Ids. +* Time-Stamps:: Tracking the creation of records. + +Encryption + +* Confidential Fields:: Declaring fields as sensitive data. +* Encrypting Files:: Encrypt confidential fields. +* Decrypting Data:: Reading encrypted fields. + +Generating Reports + +* Templates:: Formatted output. + +Interoperability + +* CSV Files:: Converting recfiles to/from csv files. +* Importing MDB Files:: Importing MS Access Databases. + +Bash Builtins + +* readrec:: Exporting the contents of records to the shell. + +Invoking the Utilities + +* Invoking recinf:: Printing information about rec files. +* Invoking recsel:: Selecting records. +* Invoking recins:: Inserting records. +* Invoking recdel:: Deleting records. +* Invoking recset:: Managing fields. +* Invoking recfix:: Fixing broken rec files, and diagnostics. +* Invoking recfmt:: Formatting records using templates. +* Invoking csv2rec:: Converting csv data into rec data. +* Invoking rec2csv:: Converting rec data into csv data. +* Invoking mdb2rec:: Converting mdb files into rec files. + + + +File: recutils.info, Node: Introduction, Next: The Rec Format, Prev: Top, Up: Top + +1 Introduction +************** + +* Menu: + +* Purpose:: Why recutils. +* A Little Example:: Recutils in action. + + +File: recutils.info, Node: Purpose, Next: A Little Example, Up: Introduction + +1.1 Purpose +=========== + +GNU recutils is a set of tools and libraries to access human-editable, +text-based databases called _recfiles_. The data is stored as a +sequence of records, each record containing an arbitrary number of named +fields. Advanced capabilities usually found in other data storage +systems are supported: data types, data integrity (keys, mandatory +fields, etc.) as well as the ability of records to refer to other +records (sort of foreign keys). Despite its simplicity, recfiles can be +used to store medium-sized databases. + + So, yet another data storage system? The mere existence of this +package deserves an explanation. There is a rich set of already +available free data storage systems, covering a broad range of +requirements. Big systems having complex data storage requirements will +probably make use of some full-fledged relational system such as MySQL +or PostgreSQL. Less demanding applications, or applications with +special deployment requirements, may find it more convenient to use a +simpler system such as SQLite, where the data is stored in a single +binary file. XML files are often used to store configuration settings +for programs, and to encode data for transmission through networks. + + So it looks like all the needs are covered by the existing solutions +... but consider the following characteristics of the data storage +systems mentioned in the previous paragraph: + + - The stored data is not directly human readable. + - The stored data is definitely not directly writable by humans. + - They are program dependent. + - They are not easily managed by version control systems. + + Regarding the first point (human readability), while it is clearly +true for the binary files, some may argue XML files are indeed human +readable... well... '<bar><foo tag="val">try</foo> to r&iamp;ead +<p>this</p></bar>'. YAML (1) is an example of a hierarchical data +storage format which is much more readable than XML. The problem with +YAML is that it was designed as a "data serialization language" and thus +to map the data constructs usually found in programming languages. That +makes it too complex for the simple task of storing plain lists of +items. + + Recfiles are human-readable, human-writable and still easy to parse +and to manipulate automatically. Obviously they are not suitable for +any task (for example, it can be difficult to manage hierarchies in +recfiles) and performance is somewhat sacrificed in favor of +readability. But they are quite handy to store small to medium simple +databases. + + The GNU recutils suite comprises: + + - This Texinfo manual, describing the Rec format and the accompanying + software. + - A C library (librec) that provides a rich set of functions to + manipulate rec data. + - A set utilities that can be used in shell scripts and in the + command line to operate on rec files. + - An emacs mode, 'rec-mode'. + + ---------- Footnotes ---------- + + (1) Yet Another Markup Language + + +File: recutils.info, Node: A Little Example, Prev: Purpose, Up: Introduction + +1.2 A Little Example +==================== + +Everyone loves to grow a nice book collection at home. Unfortunately, +in most cases the management of our private books gets uncontrolled: +some books get lost, some of them may be loaned to some friend, there +are some duplicated (or even triplicated!) titles because we forgot +about the existence of the previous copy, and many more details. + + In order to improve the management of our little book collection we +could make use of a complex data storage system such as a relational +database. The problem with that approach, as explained in the previous +section, is that the tool is too complicated for the simple task: we do +not need the full power of a relational database system to maintain a +simple collection of books. + + With GNU recutils it is possible to maintain such a little database +in a text file. Let's call it 'books.rec'. The following table resumes +the information items that we want to store for each title, along with +some common-sense restrictions. + + - Every book has a title, even if it is "No Title". + - A book can have several titles. + - A book can have more than one author. + - For some books the author is not known. + - Sometimes we don't care about who the author of a book is. + - We usually store our books at home. + - Sometimes we loan books to friends. + - On occasions we lose track of the physical location of a book. Did + we loan it to anyone? Was it lost in the last move? Is it in some + hidden place at home? + +The contents of the rec file follows: + + # -*- mode: rec -*- + + %rec: Book + %mandatory: Title + %type: Location enum loaned home unknown + %doc: + + A book in my personal collection. + + Title: GNU Emacs Manual + Author: Richard M. Stallman + Publisher: FSF + Location: home + + Title: The Colour of Magic + Author: Terry Pratchett + Location: loaned + + Title: Mio Cid + Author: Anonymous + Location: home + + Title: chapters.gnu.org administration guide + Author: Nacho Gonzalez + Author: Jose E. Marchesi + Location: unknown + + Title: Yeelong User Manual + Location: home + + # End of books.rec + + Simple. The file contains a set of records separated by blank lines. +Each record comprises a set of fields with a name and a value. + + The GNU recutils can then be used to access the contents of the file. +For example, we could get a list of the names of loaned books by +invoking 'recsel' in the following way: + + $ recsel -e "Location = 'loaned'" -P Title books.rec + The Colour of Magic + + +File: recutils.info, Node: The Rec Format, Next: Querying Recfiles, Prev: Introduction, Up: Top + +2 The Rec Format +**************** + +A recfile is nothing but a text file which conforms to a few simple +rules. This chapter shows you how, by observing these rules, recfiles +of arbitrary complexity can be written. + +* Menu: + +* Fields:: The key-value pairs which comprise the data. +* Records:: The main entities of a recfile. +* Comments:: Information for humans' benefit only. +* Record Descriptors:: Describing different types of records. + + +File: recutils.info, Node: Fields, Next: Records, Up: The Rec Format + +2.1 Fields +========== + +A "field" is the written form of an association between a label and a +value. For example, if we wanted to associate the label 'Name' with the +value 'Ada Lovelace' we would write: + + Name: Ada Lovelace + + The separator between the field name and the field value is a colon +followed by a blank character (space and tabs, but not newlines). The +name of the field shall begin in the first column of the line. + + A "field name" is a sequence of alphanumeric characters plus +underscores ('_'), starting with a letter or the character '%'. The +regular expression denoting a field name is: + + [a-zA-Z%][a-zA-Z0-9_]* + + Field names are case-sensitive. 'Foo' and 'foo' are different field +names. + + The following list contains valid field names (the final colon is not +part of the names): + + Foo: + foo: + A23: + ab1: + A_Field: + + The "value of a field" is a sequence of characters terminated by a +single newline character ('\n'). + + Sometimes a value is too long to fit in the usual width of terminals +and screens. In that case, depending on the specific tool used to +access the file, the readability of the data would not be that good. It +is therefore possible to physically split a logical line by escaping a +newline with a backslash character, as in: + + LongLine: This is a quite long value \ + comprising a single unique logical line \ + split in several physical lines. + + The sequence '\n' (newline) '+' (PLUS) and an optional '_' (SPACE) is +interpreted as a newline when found in a field value. For example, the +C string '"bar1\nbar2\n bar3"' would be encoded in the following way in +a field value: + + Foo: bar1 + + bar2 + + bar3 + + +File: recutils.info, Node: Records, Next: Comments, Prev: Fields, Up: The Rec Format + +2.2 Records +=========== + +A "record" is a group of one or more fields written one after the other: + + Name1: Value1 + Name2: Value2 + Name2: Value3 + + It is possible for several fields in a record to share the same name +or/and the field value. The following is a valid record containing +three fields: + + Name: John Smith + Email: john.smith@foomail.com + Email: john@smith.name + + The "size of a record" is defined as the number of fields that it +contains. A record cannot be empty, so the minimum size for a record is +1. The maximum number of fields for a record is only limited by the +available physical resources. The size of the previous record is 3. + + Records are separated by one or more blank lines. For instance, the +following example shows a file named 'personalities.rec' featuring three +records: + + Name: Ada Lovelace + Age: 36 + + Name: Peter the Great + Age: 53 + + Name: Matusalem + Age: 969 + + +File: recutils.info, Node: Comments, Next: Record Descriptors, Prev: Records, Up: The Rec Format + +2.3 Comments +============ + +Any line having an '#' (ASCII 0x23) character in the first column is a +comment line. + + Comments may be used to insert information that is not part of the +database but useful in other ways. They are completely ignored by +processing tools and can only be seen by looking at the recfile itself. + + It is also quite convenient to comment-out information from the +recfile without having to remove it in a definitive way: you may want to +recover the data into the database later! Comment lines can be used to +comment-out both full registers and single fields: + + Name: Jose E. Marchesi + # Occupation: Software Engineer + # Severe lack of brain capacity + # Fired on 02/01/2009 (without compensation) + Occupation: Unoccupied + + Comments are also useful for headers, footers, comment blocks and all +kind of markers: + + # -*- mode: rec -*- + # + # TODO + # + # This file contains the Bugs database of GNU recutils. + # + # Blah blah... + + ... + + # End of TODO + + Unlike some file formats, comments in recfiles must be complete +lines. You cannot start a comment in the middle of a line. For +example, in the following record, the '#' does _not_ start a comment: + Name: Peter the Great # Russian Tsar + Age: 53 + + +File: recutils.info, Node: Record Descriptors, Prev: Comments, Up: The Rec Format + +2.4 Record Descriptors +====================== + +Certain properties of a set of records can be specified by preceding +them with a "record descriptor". A record descriptor is itself a +record, and uses fields with some predefined names to store properties. + +* Menu: + +* Record Sets:: Defining different types of records. +* Naming Record Types:: Some conventions on naming record sets. +* Documenting Records:: Documenting your record sets. +* Record Sets Properties:: Introducing the special fields. + + +File: recutils.info, Node: Record Sets, Next: Naming Record Types, Up: Record Descriptors + +2.4.1 Record Sets +----------------- + +The most basic property that can be specified for a set of records is +their "type". The special field name '%rec' is used for that purpose: + + %rec: Entry + + Id: 1 + Name: Entry 1 + + Id: 2 + Name: Entry 2 + + The records following the descriptors are then identified as having +its type. So in the example above we would say there are two records of +type "Entry". Or in a more colloquial way we would say there are two +"Entries" in the database. + + The effect of a record descriptor ends when another descriptor is +found in the stream of records. This allows you to store different +kinds of records in the same database. For example, suppose you are +maintaining a depot. You will need to keep track of both what items are +available and when they are sold or restocked. + + The following example shows the usage of two record descriptors to +store both kind of records: articles and stock. + + %rec: Article + + Id: 1 + Title: Article 1 + + Id: 2 + Title: Article 2 + + %rec: Stock + + Id: 1 + Type: sell + Date: 20 April 2011 + + Id: 2 + Type: stock + Date: 21 April 2011 + + The collection of records having same types in recfiles are known as +"record sets" in recutils jargon. In the example above two record sets +are defined: one containing articles and the other containing stock +movements. + + Nothing prevents having empty record sets in databases. This is in +fact usually the case when a new recfile is written but no data exists +yet. In our depot example we could write a first version of the +database containing just the record descriptors: + + %rec: Article + + %rec: Stock + + Special records are not required, and many recfiles do not have them. +This is because all the records contained in the file are of the same +type, and their nature can usually be inferred from both the file name +and their contents. For example, 'contacts.rec' could simply contain +records representing contacts without an explicit '%rec: Contact' record +descriptor. In this case we say that the type of the anonymous records +stored in the file is the "default record type". + + Another possible situation, although not usual, is to have a recfile +containing both non-typed (default) and typed record types: + + Id: 1 + Title: Blah + + Id: 2 + Title: Bleh + + %rec: Movement + + Date: 13-Aug-2012 + Concept: 20 + + Date: 24-Sept-2012 + Concept: 12 + +In this case the records preceding the movements are of the "default" +type, whereas the records following the record descriptor are of type +'Movement'. Even though it is supported by the format and the +utilities, it is generally not recommended to mix non-typed and typed +records in a recfile. + + +File: recutils.info, Node: Naming Record Types, Next: Documenting Records, Prev: Record Sets, Up: Record Descriptors + +2.4.2 Naming Record Types +------------------------- + +It is up to you how to name your record sets. Any string comprising +only alphanumeric characters or underscores, and that starts with a +letter will be a legal name. However, it is recommended to use the +singular form of a noun in order to describe the "type" of the records +in the records set. Examples are 'Article', 'Contributor', 'Employee' +and 'Movement'. + + The used noun should be specific enough in order to characterize the +property of the records which matters. For example, in a contributor's +database it would be better to have a record set named 'Contributor' +than 'Person'. + + The reason of using singular nouns instead of their plural forms is +that it works better with the utilities: it is more natural to read +'recsel -t Contributor' ('-t' is for "type") than 'recsel -t +Contributors'. + + +File: recutils.info, Node: Documenting Records, Next: Record Sets Properties, Prev: Naming Record Types, Up: Record Descriptors + +2.4.3 Documenting Records +------------------------- + +As well as a name, it is a good idea to provide a description of the +record set. This is sometimes called the record set's "documentation" +and is specified using the '%doc' field. + + Whereas the name is usually short and can contain only alphanumeric +characters and underscores, no such restriction applies to the +documentation. The documentation is typically more verbose than the +name provided by the '%rec' field and may contain arbitrary characters +such as punctuation and parentheses. It is somewhat similar to a +comment (*note Comments::), but it can be managed more easily in a +programmatic way. Unlike a comment, the '%doc' field is recognized by +tools such as 'recinf' (*note Invoking recinf::) which processes record +descriptors. For example, you might have two record sets with '%rec' +and '%doc' fields as follows: + + %rec: Contact + %doc: Family, friends and acquaintances (other than business). + + Name: Granny + Phone: +12 23456677 + + Name: Edwina + Phone: +55 0923 8765 + + + %rec: Associate + %doc: Colleagues and other business contacts + + Name: Karl Schmidt + Phone: +49 88234566 + + Name: Genevieve Curie + Phone: +33 34 87 65 + + +File: recutils.info, Node: Record Sets Properties, Prev: Documenting Records, Up: Record Descriptors + +2.4.4 Record Sets Properties +---------------------------- + +Besides determining the type of record that follows in the stream, +record descriptors can be used to describe other properties of those +records. This can be done by using "special fields", which have special +names from a predefined set. Consider for example the following +database, where record descriptors are used to specify a (optional) +numeric 'Id' and a mandatory 'Title' field: + + %rec: Item + %type: Id int + %mandatory: Title + + Id: 10 + Title: Notebook (big) + + Id: 11 + Title: Fountain Pen + + Note that the names of special fields always start with the character +'%'. Also note that it is also possible to use non-special fields in a +record descriptor, but such fields will have no effect on the described +record set. + + Every record set must contain one, and only one, field named '%rec'. +It is not mandated that that field must occupy the first position in the +record. However, it is considered a good style to place it as the first +field in the record set, in order for the casual reader to easily +identify the type of the records. + + The following list briefly describes the special fields defined in +the recutils format, along with references to the sections of this +manual describing their usage in depth. + +'%rec' + Naming record types. Also, they allow using external and remote + descriptors. *Note Remote Descriptors::. +'%mandatory, %allowed and %prohibit' + Requiring or forbidding specific fields. *Note Mandatory Fields::. + *Note Prohibited Fields::. *Note Allowed Fields::. +'%unique and %key' + Working with keys. *Note Keys and Unique Fields::. +'%doc' + Documenting your database. *Note Documenting Records::. +'%typedef and %type' + Field types. *Note Field Types::. +'%auto' + Auto-counters and time-stamps. *Note Auto-Generated Fields::. +'%sort' + Keeping your record sets sorted. *Note Sorted Output::. +'%size' + Restricting the size of your database. *Note Size Constraints::. +'%constraint' + Enforcing arbitrary constraints. *Note Arbitrary Constraints::. +'%confidential' + Storing confidential information. *Note Encryption::. + + +File: recutils.info, Node: Querying Recfiles, Next: Editing Records, Prev: The Rec Format, Up: Top + +3 Querying Recfiles +******************* + +Since recfiles are always human readable, you could lookup data simply +by opening an editor and searching for the desired information. Or you +could use a standard tool such as 'grep' to extract strings matching a +pattern. However, recutils provides a more powerful and flexible way to +lookup data. The following sections explore how the recutils can be +used in order to extract data from recfiles, from very basic and simple +queries to quite complex examples. + +* Menu: + +* Simple Selections:: Introducing 'recsel'. +* Selecting by Type:: Get the records of some given type. +* Selecting by Position:: Get the record occupying some position. +* Random Records:: Get a set of random records. +* Selection Expressions:: Get the records satisfying some expression. +* Field Expressions:: Selecting a subset of fields. +* Sorted Output:: Get the records in a given order. + + +File: recutils.info, Node: Simple Selections, Next: Selecting by Type, Up: Querying Recfiles + +3.1 Simple Selections +===================== + +'recsel' is an utility whose primary purpose is to select records from a +recfile and print them on standard output. Consider the following +example record set, which we shall assume is saved in a recfile called +'acquaintances.rec': + + # This database contains a list of both real and fictional people + # along with their age. + + Name: Ada Lovelace + Age: 36 + + Name: Peter the Great + Age: 53 + + # Name: Matusalem + # Age: 969 + + Name: Bart Simpson + Age: 10 + + Name: Adrian Mole + Age: 13.75 + +If we invoke 'recsel acquaintances.rec' we will get a list of all the +records stored in the file in the terminal: + + $ recsel acquaintances.rec + Name: Ada Lovelace + Age: 36 + + Name: Peter the Great + Age: 53 + + Name: Bart Simpson + Age: 10 + + Name: Adrian Mole + Age: 13.75 + +Note that the commented out parts of the file, in this case the +explanatory header and the record corresponding to Matusalem, are not +part of the output produced by 'recsel'. This is because 'recsel' is +concerned only with the data. + + 'recsel' will also "pack" the records so any extra empty lines that +may be between records are not echoed in the output: + + *acquaintances.rec:* $ recsel acquaintances.rec + Name: Peter the Great + Name: Peter the Great Age: 53 + Age: 53 + Name: Bart Simpson + # Note the extra empty lines. Age: 10 + + + Name: Bart Simpson + Age: 10 + +It is common to store data gathered in several recfiles. For example, +we could have a 'contacts.rec' file containing general contact records, +and also a 'work-contacts.rec' file containing business contacts: + + *contacts.rec:* *work-contacts.rec:* + + Name: Granny Name: Yoyodyne Corp. + Phone: +12 23456677 Email: sales@yoyod.com + Phone: +98 43434433 + Name: Doctor + Phone: +12 58999222 Name: Robert Harris + Email: robert.harris@yoyod.com + Note: Sales Department. + + Both files can be passed to 'recsel' in the command line. In that +case 'recsel' will simply process them and output their records in the +same order they were specified: + + $ recsel contacts.rec work-contacts.rec + Name: Granny + Phone: +12 23456677 + + Name: Doctor + Phone: +12 58999222 + + Name: Yoyodyne Corp. + Email: sales@yoyod.com + Phone: +98 43434433 + + Name: Robert Harris + Email: robert.harris@yoyod.com + Note: Sales Department. + +As mentioned above, the output follows the ordering on the command line, +so 'recsel work-contacts.rec contacts.rec' would output the records of +'work-contacts.rec' first and then the ones from 'contacts.rec'. + +Note however that 'recsel' will merge records from several files +specified in the command line only if they are anonyomuse. If the +contacts in our files were typed: + + *contacts.rec:* *work-contacts.rec:* + + %rec: Contact %rec: Contact + + Name: Granny Name: Yoyodyne Corp. + Phone: +12 23456677 Email: sales@yoyod.com + Phone: +98 43434433 + Name: Doctor + Phone: +12 58999222 Name: Robert Harris + Email: robert.harris@yoyod.com + Note: Sales Department. + +Then we would get the following error message: + + $ recsel contacts.rec work-contacts.rec + recsel: error: duplicated record set 'Contact' from work-contacts.rec. + + +File: recutils.info, Node: Selecting by Type, Next: Selecting by Position, Prev: Simple Selections, Up: Querying Recfiles + +3.2 Selecting by Type +===================== + +As we saw in the section discussing record descriptors, it is possible +to have several different types of records in a single recfile. +Consider for example a 'gnu.rec' file containing information about +maintainers and packages in the GNU Project: + + %rec: Maintainer + + Name: Jose E. Marchesi + Email: jemarch@gnu.org + + Name: Luca Saiu + Email: positron@gnu.org + + %rec: Package + + Name: GNU recutils + LastRelease: 12 February 2014 + + Name: GNU epsilon + LastRelease: 10 March 2013 + +If 'recsel' is invoked in that file it will complain: + + $ recsel gnu.rec + recsel: error: several record types found. Please use -t to specify one. + +This is because 'recsel' does not know which records to output: the +maintainers or the packages. This can be resolved by using the '-t' +command line option: + + $ recsel -t Package gnu.rec + Name: GNU recutils + LastRelease: 12 February 2014 + + Name: GNU epsilon + LastRelease: 10 March 2013 + +By default 'recsel' never outputs record descriptors. This is because +most of the time the user is only interested in the data. However, with +the '-d' command line option, the record descriptor of the selected type +is printed preceding the data records: + + $ recsel -d -t Maintainer gnu.rec + %rec: Maintainer + + Name: Jose E. Marchesi + Email: jemarch@gnu.org + + Name: Luca Saiu + Email: positron@gnu.org + +Note that at the moment it is not possible to select non-typed (default) +records when other record sets are stored in the same file. This is one +of the reasons why mixing non-typed records and typed records in a +single recfile is not recommended. + +Note also that if a nonexistent record type is specified in '-t' then +'recsel' does nothing. + + +File: recutils.info, Node: Selecting by Position, Next: Random Records, Prev: Selecting by Type, Up: Querying Recfiles + +3.3 Selecting by Position +========================= + +As was explained in the previous sections, 'recsel' outputs all the +records of some record set. The records are echoed in the same order +they are written in the recfile. However, often it is desirable to +select a subset of the records, determined by the position they occupy +in their record set. + + The '-n' command line option to 'recsel' supports doing this in a +natural way. This is how we would retrieve the first contact listed in +a contacts database using 'recsel': + + $ recsel -n 0 contacts.rec + Name: Granny + Phone: +12 23456677 + +Note that the index is zero-based. If we want to retrieve more records +we can specify several indexes to '-n' separated by commas. If a given +index is too big, it is simply ignored: + + $ recsel -n 0,1,999 contacts.rec + Name: Granny + Phone: +12 23456677 + + Name: Doctor + Phone: +12 58999222 + +With '-n', the order in which the records are echoed does not depend on +the order of the indexes passed to '-n'. For example, the output of +'recsel -n 0,1' will be identical to the output of 'recsel -n 1,0'. + + Ranges of indexes can also be used to select a subset of the records. +For example, the following call would also select the first three +contacts of the database: + + $ recsel -n 0-2 contacts.rec + Name: Granny + Phone: +12 23456677 + + Name: Doctor + Phone: +12 58999222 + + Name: Dad + Phone: +12 88229900 + +It is possible to mix single indexes and index ranges in the same call. +For example, 'recsel -n 0,5-6' would select the first, sixth and seventh +records. + + +File: recutils.info, Node: Random Records, Next: Selection Expressions, Prev: Selecting by Position, Up: Querying Recfiles + +3.4 Random Records +================== + +Consider a database in which each record is a cooking recipe. It is +always difficult to decide what to cook each day, so it would be nice if +we could ask 'recsel' to pick up a random recipe. This can be achieved +using the '-m' ('--random') command line option of 'recsel': + + $ recsel -m 1 recipes.rec + Title: Curry chicken + Ingredient: A whole chicken + Ingredient: Curry + Preparation: ... + +If we need two recipes, because we will be cooking at both lunch and +dinner, we can pass a different number to '-m': + + $ recsel -m 2 recipes.rec + Title: Fabada Asturiana + Ingredient: 300 gr of fabes. + Ingredient: Chorizo + Ingredient: Morcilla + Preparation: ... + + Title: Pasta with ragu + Ingredient: 500 gr of spaghetti. + Ingredient: 2 tomatoes. + Ingredient: Minced meat. + Preparation: ... + +The algorithm used to implement '-m' guarantees that you will never get +multiple instances of the same record. This means that if a record set +has N records and you ask for N random records, you will get all the +records in a random order. + + +File: recutils.info, Node: Selection Expressions, Next: Field Expressions, Prev: Random Records, Up: Querying Recfiles + +3.5 Selection Expressions +========================= + +"Selection expressions", also known as "sexes" in recutils jargon, are +infix expressions that can be applied to a record. A "sex" is a +predicate which selects a subset of records within a recfile. They can +be simple expressions involving just one operator and a pair of +operands, or complex compound expressions with parenthetical +sub-expressions and many operators and operands. One of their most +common uses is to examine records matching a particular set of +conditions. + +* Menu: + +* Selecting by predicate:: Selecting records which satisfy conditions. +* SEX Operands:: Literal values, fields and sub-expressions. +* SEX Operators:: Arithmetic, logical and other operators. +* SEX Evaluation:: Selection expressions are like generators. + + +File: recutils.info, Node: Selecting by predicate, Next: SEX Operands, Up: Selection Expressions + +3.5.1 Selecting by predicate +---------------------------- + +Consider the example recfile 'acquaintances.rec' introduced earlier. It +contains names of people along with their respective ages. Suppose we +want to get a list of the names of all the children. It would not be +easy to do this using 'grep'. Neither would it, for any reasonably +large recfile, be feasible to search manually for the children. +Fortunately the 'recsel' command provides an easy way to do such a +lookup: + $ recsel -e "Age < 18" -P Name acquaintances.rec + Bart Simpson + Adrian Mole + +Let us look at each of the arguments to 'recsel' in turn. Firstly we +have '-e' which tells 'recsel' to lookup records matching the expression +'Age < 18' -- in other words all those people whose ages are less than +18. This is an example of a "selection expression". In this case it is +a simple test, but it can be as complex as needed. + + Next, there is '-P' which tells 'recsel' to print out the value of +the 'Name' field -- because we want just the name, not the entire +record. The final argument is the name of the file from whence the +records are to come: 'acquaintances.rec'. + + Rather than explicitly storing ages in the recfile, a more realistic +example might have the date of birth instead (otherwise it would be +necessary to update the people's ages in the recfile on every birthday). + + # Date of Birth + %type: Dob date + + Name: Alfred Nebel + Dob: 20 April 2010 + Email: alf@example.com + + Name: Bertram Worcester + Dob: 3 January 1966 + Email: bert@example.com + + Name: Charles Spencer + Dob: 4 July 1997 + Email: charlie@example.com + + Name: Dirk Hogart + Dob: 29 June 1945 + Email: dirk@example.com + + Name: Ernest Wright + Dob: 26 April 1978 + Email: ernie@example.com + +Now we can achieve a similar result as before, by looking up the names +of all those people who were born after a particular date: + $ recfix acquaintances.rec + $ recsel -e "Dob >> '31 July 1994'" -p Name acquaintances.rec + Name: Alfred Nebel + Name: Charles Spencer + +The '>>' operator means "later than", and is used here to select a date +of birth after 31st July 1994. Note also that this example uses a lower +case '-p' whereas the preceding example used the upper case '-P'. The +difference is that '-p' prints the field name and field value, whereas +'-P' prints just the value. + + 'recsel' accepts more than one '-e' argument, each introducing a +selection expression, in which case the records which satisfy all +expressions are selected. You can provide more than one field label to +'-P' or '-p' in order to select additional fields to be displayed. For +example, if you wanted to send an email to all children 14 to 18 years +of age, and today's date were 1st August 2012, then you could use the +following command to get the name and email address of all such +children: + + $ recfix acquaintances.rec + $ recsel -e "Dob >> '31 July 1994' && Dob << '01 August 1998'" \ + -p Name,Email acquaintances.rec + Name: Charles Spencer + Email: charlie@example.com + +As you can see, there is only one such child in our record set. + + Note that the example command shown above contains both double quotes +'"' and single quotes '''. The double quotes are interpreted by the +shell (e.g. 'bash') and the single quotes are interpreted by 'recsel', +defining a string. (And the backslash is interpreted by the shell, the +usual continuation character so that this manual doesn't have a too-long +line.) + + +File: recutils.info, Node: SEX Operands, Next: SEX Operators, Prev: Selecting by predicate, Up: Selection Expressions + +3.5.2 SEX Operands +------------------ + +The supported operands are: numbers, strings, field names and +parenthesized expressions. + +3.5.2.1 Numeric Literals +........................ + +The supported numeric literals are integer numbers and real numbers. +The usual sign character '-' is used to denote negative values. Integer +values can be denoted in base 10, base 16 using the '0x' prefix, and +base 8 using the '0' prefix. Examples are: + + 10000 + 0 + 0xFF + -0xa + 012 + -07 + -1342 + .12 + -3.14 + +3.5.2.2 String Literals +....................... + +String values are delimited by either the ''' character or the '"' +character. Whichever delimiter is used, the delimiter closing the +literal must be the same as the delimiter used to open it. + + Newlines and tabs can be part of a string literal. + + Examples are: + + 'Hello.' + 'The following example is the empty string.' + '' + + The ''' and '"' characters can be part of a string if they are +escaped with a backslash, as in: + + 'This string contains an apostrophe: \'.' + "This one a double quote: \"." + +3.5.2.3 Field Values +.................... + +The value of a field value can be included in a selection expression by +writing its name. The field name is replaced by a string containing the +field value, to handle the possibility of records with more than one +field by that name. Examples: + + Name + Email + long_field_name + + It is possible to use the role part of a field if it is not empty. +So, for example, if we are searching for the issues opened by 'John +Smith' in a database of issues we could write: + + $ recsel -e "OpenedBy = 'John Smith'" + +instead of using a full field name: + + $ recsel -e "Hacker:Name:OpenedBy = 'John Smith'" + + When the name of a field appears in an expression, the expression is +applied to all the fields in the record featuring that name. So, for +example, the expression: + + Email ~ "\\.org" + +matches any record in which there is a field named 'Email' whose value +terminates in (the literal string) '.org'. If we are interested in the +value of some specific email, we can specify its relative position in +the containing record by using "subscripts". Consider, for example: + + Email[0] ~ "\\.org" + +Will match for: + + Name: Mr. Foo + Email: foo@foo.org + Email: mr.foo@foo.com + +But not for: + + Name: Mr. Foo + Email: mr.foo@foo.com + Email: foo@foo.org + + The regexp syntax supported in selection expressions is POSIX EREs, +with several GNU extensions. *Note Regular Expressions::. + +3.5.2.4 Parenthesized Expressions +................................. + +Parenthesis characters ('(' and ')') can be used to group sub +expressions in the usual way. + + +File: recutils.info, Node: SEX Operators, Next: SEX Evaluation, Prev: SEX Operands, Up: Selection Expressions + +3.5.3 Operators +--------------- + +The supported operators are arithmetic operators (addition, subtraction, +multiplication, division and modulus), logical operators, string +operators and field operators. + +3.5.3.1 Arithmetic Operators +............................ + +Arithmetic operators for addition ('+'), subtraction ('-'), +multiplication ('*'), integer division ('/') and modulus ('%') are +supported with their usual meanings. + + These operators require either numeric operands or string operands +whose value can be interpreted as numbers (integer or real). + +3.5.3.2 Boolean Operators +......................... + +The boolean operators *and* ('&&'), *or* ('||') and *not* ('!') are +supported with the same semantics as their C counterparts. + + A compound boolean operator '=>' is also supported in order to ease +the elaboration of constraints in records: 'A => B', which can be read +as "A implies B", translates into '!A || (A && B)'. + + The boolean operators expect integer operands, and will try to +convert any string operand to an integer value. + +3.5.3.3 Comparison Operators +............................ + +The compare operators *less than* ('<'), *greater than* ('>'), *less +than or equal* ('<='), *greater than or equal* ('>='), *equal* ('=') and +*unequal* ('!=') are supported with their usual meaning. + + Strings can be compared with the equality operator ('='). + + The match operator ('~') can be used to match a string with a given +regular expression (*note Regular Expressions::). + +3.5.3.4 Date Comparison Operators +................................. + +The compare operators *before* ('<<'), *after* ('>>') and *same time* +('==') can be used with fields and strings containing parseable dates. + + *Note Date input formats::. + +3.5.3.5 Field Operators +....................... + +Field counters are replaced by the number of occurrences of a field with +the given name in the record. For example: + + #Email + + The previous expression is replaced with the number of fields named +'Email' in the record. It can be zero if the record does not have a +field with that name. + +3.5.3.6 String Operators +........................ + +The string concatenation operator ('&') can be used to concatenate any +number of strings and field values. + + 'foo' & Name & 'bar' + +3.5.3.7 Conditional Operator +............................ + +The ternary conditional operator can be used to select alternatives +based on the value of some expression: + + expr1 ? expr2 : expr3 + + If 'expr1' evaluates to true (i.e. it is an integer or the string +representation of an integer and its value is not zero) then the +operator yields 'expr2'. Otherwise it yields 'expr3'. + + +File: recutils.info, Node: SEX Evaluation, Prev: SEX Operators, Up: Selection Expressions + +3.5.4 Evaluation of Selection Expressions +----------------------------------------- + +Given that: + + - It is possible to refer to fields by name in selection expressions. + - Records can have several fields with the same name. + +It is clear that some backtracking mechanism is needed in the evaluation +of the selection expressions. For example, consider the following +expression that is deciding whether a "registration" in a webpage should +be rejected: + + ((Email ~ "foomail\.com") || (Age <= 18)) && !#Fixed + + The previous expression will be evaluated for every possible +permutation of the fields "Email", "Age" and "Fixed" present in the +record, until one of the combinations succeeds. At that point the +computation is interrupted. + + When used to decide whether a record matches some criteria, the goal +of a selection expression is to act as a boolean expression. In that +case the final value of the expression depends on both the type and the +value of the result launched by the top-most subexpression: + + - If the result is an integer, the expression is true if its value is + not zero. + - If the result is a real, or a string, the expression evaluates to + false. + + Sometimes a selection expression is used to compute a result instead +of a boolean. In that case the returned value is converted to a string. +This is used when replacing the slots in templates (*note Templates::). + + +File: recutils.info, Node: Field Expressions, Next: Sorted Output, Prev: Selection Expressions, Up: Querying Recfiles + +3.6 Field Expressions +===================== + +"Field expressions" (also known as "fexes") are a way to select fields +of a record. They also allow you to do certain transformations on the +selected fields, such as changing their names. + + A FEX comprises a sequence of "elements" separated by commas: + + ELEM_1,ELEM_2,...,ELEM_N + + Each element makes a reference to one or more fields in a record +identified by a given name and an optional subscript: + + FIELD_NAME[MIN-MAX] + +MIN and MAX are zero-based indexes. It is possible to refer to a field +occupying a given position. For example, consider the following record: + + Name: Mr. Foo + Email: foo@foo.com + Email: foo@foo.org + Email: mr.foo@foo.org + +We would select all the emails of the record with: + + Email + +The first email with: + + Email[0] + +The third email with: + + Email[2] + +The second and the third email with: + + Email[1-2] + + And so on. It is possible to select the same field (or range of +fields) more than once just by repeating them in a field expression. +Thus, the field expression: + + Email[0],Name,Email + +will print the first email, the name, and then all the email fields +including the first one. + + It is possible to include a "rewrite rule" in an element of a field +expression, which specifies an alias for the selected fields: + + FIELD_NAME[MIN-MAX]:ALIAS + +For example, the following field expression specifies an alias for the +fields named 'Email' in a record: + + Name,Email:ElectronicMail + + Since the rewrite rules only affect the fields selected in a single +element of the field expression, it is possible to define different +aliases to several fields having the same name but occupying different +positions: + + Name,Email[0]:PrimaryEmail,Email[1]:SecondaryEmail + +When that field expression is applied to the following record: + + Name: Mr. Foo + Email: primary@email.com + Email: secondary@email.com + Email: other@email.com + +the result will be: + + Name: Mr. Foo + PrimaryEmail: primary@email.com + SecondaryEmail: secondary@email.com + Email: other@email.com + + It is possible to use the dot notation in order to refer to field and +sub-fields. This is mainly used in the context of joins, where new +fields are created having compound names such as 'Foo_Bar'. A reference +to such a field can be done in the fex using dot notation as follows: + + Foo.Bar + + +File: recutils.info, Node: Sorted Output, Prev: Field Expressions, Up: Querying Recfiles + +3.7 Sorted Output +================= + +This special field sets sorting criteria for the records contained in a +record set. Its usage is: + + %sort: FIELD1 FIELD2 ... + +Meaning that the desired order for the records will be determined by the +contents of the fields named in the '%sort' value. The sorting is +always done in ascending order, and there may be records that lack the +involved fields, i.e. the sorting fields need not be mandatory. + + It is an error to have more than one '%sort' field in the same record +descriptor, as only one field list can be used as sorting criteria. + + Consider for example that we want to keep the records in our +inventory system ordered by entry date. We could achieve that by using +the following record descriptor in the database: + + %rec: Item + %type: Date date + %sort: Date + + Id: 1 + Title: Staplers + Date: 10 February 2011 + + Id: 2 + Title: Ruler Pack 20 + Date: 2 March 2009 + + ... + +As you can see in the example above, the fact we use '%sort' in a +database does not mean that the database will be always physically +ordered. Unsorted record sets are not a data integrity problem, and +thus the diagnosis tools must not declare a recfile as +invalid because +of this. The utility 'recfix' provides a way +to physically order the +fields in the file (*note Invoking recfix::). + + On the other hand any program listing, presenting or processing data +extracted from the recfile must honor the '%sort' entry. For example, +when using the following 'recsel' program in the database above we would +get the output sorted by date: + + $ recsel inventory.rec + Id: 2 + Title: Ruler Pack 20 + Date: 2 March 2009 + + Id: 1 + Title: Staplers + Date: 10 February 2011 + +The sorting of the selected field depends on its type: + + - Numeric fields (integers, ranges, reals) are numerically ordered. + - Boolean fields are ordered considering that "false" values come + first. + - Dates are ordered chronologically. + - Any other kind of field is ordered using a lexicographic order. + + It is possible to specify several fields as the sorting criteria. In +that case the records are sorted using a lexicographic order. Consider +for example the following unsorted database containing marks for several +students: + + %rec: Marks + %type: Class enum A B C + %type: Score real + + Name: Mr. One + Class: C + Score: 6.8 + + Name: Mr. Two + Class: A + Score: 6.8 + + Name: Mr. Three + Class: B + Score: 9.2 + + Name: Mr. Four + Class: A + Score: 2.1 + + Name: Mr. Five + Class: C + Score: 4 + +If we wanted to sort it by 'Class' and by 'Score' we would insert a +'%sort' special field in the descriptor, having: + + %rec: Marks + %type: Class enum A B C + %type: Score real + %sort: Class Score + + Name: Mr. Four + Class: A + Score: 2.1 + + Name: Mr. Two + Class: A + Score: 6.8 + + Name: Mr. Three + Class: B + Score: 9.2 + + Name: Mr. Five + Class: C + Score: 4 + + Name: Mr. One + Class: C + Score: 6.8 + +The order of the fields in the '%sort' field is significant. If we +reverse the order in the example above then we get a different sorted +set: + + %rec: Marks + %type: Class enum A B C + %type: Score real + %sort: Score Class + + Name: Mr. Four + Class: A + Score: 2.1 + + Name: Mr. Five + Class: C + Score: 4 + + Name: Mr. Two + Class: A + Score: 6.8 + + Name: Mr. One + Class: C + Score: 6.8 + + Name: Mr. Three + Class: B + Score: 9.2 + +In this last case, 'Mr. One' comes after 'Mr. Two' because the class 'A' +comes before the class 'B' even though the score is the same ('6.8'). + + +File: recutils.info, Node: Editing Records, Next: Editing Fields, Prev: Querying Recfiles, Up: Top + +4 Editing Records +***************** + +The simplest way of editing a recfile is to start your favourite text +editor and hack the contents of the file as desired. However, the rec +format is structured enough so recfiles can be updated automatically by +programs. This is useful for writing shell scripts or when there are +complex data integrity rules stored in the file that we want to be sure +to preserve. + + The following sections discuss the usage of the recutils for altering +recfiles in the level of record: adding new records, deleting or +commenting them out, sorting them, etc. + +* Menu: + +* Inserting Records:: Inserting data into recfiles. +* Deleting Records:: Removing data. +* Sorting Records:: Physical reordering of records. + + +File: recutils.info, Node: Inserting Records, Next: Deleting Records, Up: Editing Records + +4.1 Inserting Records +===================== + +Adding new records to a recfile is pretty trivial: open it with your +text editor and just write down the fields comprising the records. This +is really the best way to add contents to a recfile containing simple +data. However, complex databases may introduce some difficulties: + +_Multi-line values._ + It can be tedious to manually encode the several lines. +_Data integrity._ + It is difficult to manually maintain the integrity of data stored + in the data base. +_Counters and timestamps._ + Some record sets feature auto-generated fields, which are commonly + used to implement counters and time-stamps. *Note Auto-Generated + Fields::. + + Thus, to facilitate the insertion of new data a command line utility +called 'recins' is included in the recutils. The usage of 'recins' is +very simple, and can be used both in the command line or called from +another program. The following subsections discuss several aspects of +using this utility. + +* Menu: + +* Adding Records With recins:: Basics of the 'recins' utility. +* Replacing Records With recins:: Substituting records in a file. +* Adding Anonymous Records:: Inserting or replacing records with no + type. + + +File: recutils.info, Node: Adding Records With recins, Next: Replacing Records With recins, Up: Inserting Records + +4.1.1 Adding Records With recins +-------------------------------- + +Each invocation of 'recins' adds one record to the targeted database. +The fields comprising the records are specified using pairs of '-f' and +'-v' command line arguments. For example, this is how we would add the +first entry to a previously empty contacts database: + + $ recins -f Name -v "Mr Foo" -f Email -v foo@bar.baz contacts.rec + $ cat contacts.rec + Name: Mr. Foo + Email: foo@bar.baz + +If we invoke 'recins' again on the same database we will be adding a +second record: + + $ recins -f Name -v "Mr Bar" -f Email -v bar@gnu.org contacts.rec + $ cat contacts.rec + Name: Mr. Foo + Email: foo@bar.baz + + name: Mr. Bar + Email: bar@gnu.org + + There is no limit on the number of '-f' '-v' pairs that can be +specified to 'recins', other than any limit on command line arguments +which may be imposed by the shell. + + The field values provided using '-v' are encoded to follow the rec +format conventions, including multi-line field values. Consider the +following example: + + $ recins -f Name -v "Mr. Foo" -f Address -v ' + Foostrs. 19 + Frankfurt am Oder + Germany' contacts.rec + $ cat contacts.rec + Name: Mr. Foo + Address: + + Foostrs. 19 + + Frankfurt am Oder + + Germany + + It is also possible to provide fields already encoded as rec data for +their addition, using the '-r' command line argument. This argument can +be intermixed with '-f' '-v'. + + $ recins -f Name -v "Mr. Foo" -r "Email: foo@bar.baz" contacts.rec + $ cat contacts.rec + Name: Mr. Foo + Email: foo@bar.baz + + If the string passed to '-r' is not valid rec data then 'recins' will +complain with an error and the operation will be aborted. + + At this time, it is not possible to add new records containing +comments. + + +File: recutils.info, Node: Replacing Records With recins, Next: Adding Anonymous Records, Prev: Adding Records With recins, Up: Inserting Records + +4.1.2 Replacing Records With recins +----------------------------------- + +'recins' can also be used to replace existing records in a database with +a provided record. This is done by specifying some criteria selecting +the record (or records) to be replaced. + + Consider for example the following command applied to our contacts +database: + + $ recins -e "Email = 'foo@bar.baz'" -f Name -v "Mr. Foo" \ + -f Email -v "new@bar.baz" contacts.rec + +The contact featuring an email 'foo@bar.baz' gets replaced with the +following record: + + Name: Mr. Foo + Email: new@bar.baz + + The records to be replaced can also be specified by index, or a range +of indexes. For example, the following command replaces the first, +second and third records in a database with dummy records: + + $ recins -n 0,1-2 -f Dummy -v XXX foo.rec + $ cat foo.rec + Dummy: XXX + + Dummy: XXX + + Dummy: XXX + + ... Other records ... + + +File: recutils.info, Node: Adding Anonymous Records, Prev: Replacing Records With recins, Up: Inserting Records + +4.1.3 Adding Anonymous Records +------------------------------ + +In a previous chapter we noted that 'recsel' interprets the absence of a +'-t' argument depending on the actual contents of the file. If the +recfile contains records of just one type the command assumes that the +user is referring to these records. + + 'recins' does not follow this convention, and the absence of an +explicit type always means to insert (or replace) an anonymous record. +Consider for example the following database: + + %rec: Marks + %type: Class enum A B C + + Name: Alfred + Class: A + + Name: Bertram + Class: B + +If we want to insert a new mark we have to specify the type explicitly +using '-t': + + $ cat marks.rec | recins -t Marks -f Name -v Xavier -f Class -v C + %rec: Marks + %type: Class enum A B C + + Name: Alfred + Class: A + + Name: Bertram + Class: B + + Name: Xavier + Class: C + +If we forget to specify the type then an anonymous record is created +instead: + + $ cat marks.rec | recins -f Name -v Xavier -f Class -v C + Name: Xavier + Class: C + + %rec: Marks + %type: Class enum A B C + + Name: Alfred + Class: A + + Name: Bertram + Class: B + + +File: recutils.info, Node: Deleting Records, Next: Sorting Records, Prev: Inserting Records, Up: Editing Records + +4.2 Deleting Records +==================== + +Just as 'recins' inserts records, the utility 'recdel' deletes them. +Consider the following recfile 'stock.rec': + %rec: Item + %type: Expiry date + %sort: Title + + Title: First Aid Kit + Expiry: 2 May 2009 + + Title: Emergency Rations + Expiry: 10 August 2009 + + Title: Life raft + Expiry: 2 March 2009 + + Suppose we wanted to delete all items with an 'Expiry' value before a +certain date, we could do this with the following command: + + $ recdel -t Item -e 'Expiry << "5/12/2009"' stock.rec +After running this command, only one record will remain in the file +(viz: the one titled 'Emergency Rations') because all the others have +expiry dates prior to 12 May 2009. (1) The '-t' option can be omitted +if, and only if, there is no '%rec' field in the recfile. + + 'recdel' tries to warn you if you attempt to perform a delete +operation which it deems to be too pervasive. In such cases, it will +refuse to run, unless you give the '--force' flag. However, you should +not rely upon 'recdel' to protect you, because it cannot always +correctly guess that you might be deleting more records than intended. +For this reason, it may be wise to use the '-c' flag, which causes the +relevant records to be commented out, rather than deleted. (And of +course backups are always wise.) + + The complete options available to the 'recdel' command are explained +later. *Note Invoking recdel::. + + ---------- Footnotes ---------- + + (1) '5/12/2009' means the 12th day of May 2009, _not_ the fifth day +of December, even if your 'LC_TIME' environment variable has been set to +suggest otherwise. + + +File: recutils.info, Node: Sorting Records, Prev: Deleting Records, Up: Editing Records + +4.3 Sorting Records +=================== + +In the example above, note the existence of the '%sort: Title' line. +This field was discussed previously (*note Sorted Output::) and, as +mentioned, does not imply that the records need to be stored in the +recfile in any particular order. + + However, if desired, you can automatically arrange the recfile in +that order using 'recfix' with the '--sort' flag. After running the +command + $ recfix --sort stock.rec +the file 'stock.rec' will have its records sorted in alphabetical order +of the 'Title' fields, thus: + %rec: Item + %type: Expiry date + %sort: Title + + Title: Emergency Rations + Expiry: 10 August 2009 + + Title: First Aid Kit + Expiry: 2 May 2009 + + Title: Liferaft + Expiry: 2 March 2009 + + +File: recutils.info, Node: Editing Fields, Next: Field Types, Prev: Editing Records, Up: Top + +5 Editing Fields +**************** + +Fields of a recfile can, of course, be edited manually using an editor +and this is often the easiest way when only a few fields need to be +changed or when the nature of the changes do not follow any particular +pattern. If, however, a large number of similar changes to several +records are required,the 'recset' command can make the job easier. + + The formal description of 'recset' is presented later (*note Invoking +recset::). In this chapter some typical usage examples are discussed. +As with 'recdel', 'recset' if used erroneously has the potential to make +very pervasive changes, which could result in a large loss of data. It +is prudent therefore to take a copy of a recfile before running such +commands. + +* Menu: + +* Adding Fields:: Adding new fields to records. +* Setting Fields:: Editing field values. +* Deleting Fields:: Removing or commenting-out fields. +* Renaming Fields:: Changing the name of a field. + + +File: recutils.info, Node: Adding Fields, Next: Setting Fields, Up: Editing Fields + +5.1 Adding Fields +================= + +As mentioned above, the command 'recins' adds new records to a recfile, +but it cannot add fields to an existing record. This task can be +achieved automatically using 'recset' with its '-a' flag. + + Suppose that (after a stock inspection) you wanted to add an +'Inspected' field to all the items in the recfile. The following +command could be used. + $ recset -t Item -f Inspected -a 'Yes' stock.rec +Here, because no record selection flag was provided, the command +affected _all_ the records of type 'Item'. We could limit the effect of +the command using the '-e', '-q', '-n' or '-m' flags. For example to +add the 'Inspected' field to only the first item the following command +would work: + $ recset -t Item -n 0 -f Inspected -a 'Yes' stock.rec +Similarly, a selection expression could have been used with the '-e' +flag in order to add the field only to records which satisfy the +expression. + + If you use 'recset' with the '-a' flag on a field that already +exists, a new field (in addition to those already present) will be +appended with the given value. + + +File: recutils.info, Node: Setting Fields, Next: Deleting Fields, Prev: Adding Fields, Up: Editing Fields + +5.2 Setting Fields +================== + +It is also possible to update the value of a field. This is done using +'recset' with its '-s' flag. In the previous example, an 'Inspected' +flag was added to certain records, with the value 'yes'. After +reflection, one might want to record the date of inspection, rather than +a simple yes/no flag. Records which have no such field will remain +unchanged. + $ recset -t Item -f Inspected -s '30 October 2006' stock.rec + Although the above command does not have any selection criteria, it +will only affect those records for which a 'Inspected' field exists. +This is because the '-s' flag only sets values of existing fields. It +will not create any fields. + + If instead the '-S' flag is used, this will create the field (if it +does not already exist) _and_ set its value. + $ recset -t Item -f Inspected -S '30 October 2006' stock.rec + + +File: recutils.info, Node: Deleting Fields, Next: Renaming Fields, Prev: Setting Fields, Up: Editing Fields + +5.3 Deleting Fields +=================== + +You can delete fields using 'recset''s '-d' flag. For example, if we +wanted to delete the 'Inspected' field which we introduced above, we +could do so as follows: + $ recset -t Item -f Inspected -d stock.rec +This would delete _all_ fields named 'Inspected' from _all_ records of +type 'Item'. It may be that, we only wanted to delete the 'Inspected' +fields from records which satisfy a certain condition. The following +would delete the fields only from items whose 'Expiry' date was before 2 +January 2010: + $ recset -t Item -e 'Expiry << "2 January 2010"' -f Inspected -d stock.rec + + +File: recutils.info, Node: Renaming Fields, Prev: Deleting Fields, Up: Editing Fields + +5.4 Renaming Fields +=================== + +Another use of 'recset' is to rename existing fields. This is achieved +using the '-r' flag. To rename all instances of the 'Expiry' field +occurring in any record of type 'Item' to 'UseBy', the following command +suffices: + $ recset -t Item -f Expiry -r 'UseBy' stock.rec +As with most operations, this could be done selectively, using the '-e' +flag and a selection expression. + + +File: recutils.info, Node: Field Types, Next: Constraints on Record Sets, Prev: Editing Fields, Up: Top + +6 Field Types +************* + +Field values are, by default, unrestricted text strings. However, it is +often useful to impose some restrictions on the values of certain +fields. For example, consider the following record: + + Id: 111 + Name: Jose E. Marchesi + Age: 30 + MaritalStatus: single + Phone: +49 666 666 66 + + The values of the fields must clearly follow some structure in order +to make sense. 'Id' is a numeric identifier for a person. 'Name' will +never use several lines. 'Age' will typically be in the range '0..120', +and there are only a few valid values for 'MaritalStatus': single, +married, divorced, and widow(er). Phones may be restricted to some +standard format as well to be valid. All these restrictions (and many +others) can be enforced by using "field types". + + There are two kind of field types: "anonymous" and "named". Those +are described in the following subsections. + +* Menu: + +* Declaring Types:: Declaration of types in record descriptors. +* Types and Fields:: Associating fields with types. +* Scalar Field Types:: Numbers and ranges. +* String Field Types:: Lines, limited strings and regular expressions. +* Enumerated Field Types:: Enumerations and boolean values. +* Date and Time Types:: Dates and times. +* Other Field Types:: Emails, fields, UUIDs, ... + + +File: recutils.info, Node: Declaring Types, Next: Types and Fields, Up: Field Types + +6.1 Declaring Types +=================== + +A type can be declared in a record descriptor by using the '%typedef' +special field. The syntax is: + + %typedef: TYPE_NAME TYPE_DESCRIPTION + +Where TYPE_NAME is the name of the new type, and TYPE_DESCRIPTION a +description which varies depending of the kind of type. For example, +this is how a type 'Age_t' could be defined as numbers in the range +'0..120': + + %typedef: Age_t range 0 120 + +Type names are identifiers having the following syntax: + + [a-zA-Z][a-zA-Z0-9_]* + +Even though any identifier with that syntax could be used for types, it +is a good idea to consistently follow some convention to help +distinguishing type names from field names. For example, the '_t' +suffix could be used for types. + + A type can be declared to be an alias for another type. The syntax +is: + + %typedef: TYPE_NAME OTHER_TYPE_NAME + +Where TYPE_NAME is declared to be a synonym of OTHER_TYPE_NAME. This is +useful to avoid duplicated type descriptions. For example, consider the +following example: + + %typedef: Id_t int + %typedef: Item_t Id_t + %typedef: Transaction_t Id_t + +Both 'Item_t' and 'Transaction_t' are aliases for the type 'Id_t'. +Which is in turn an alias for the type 'int'. So, they are both numeric +identifiers. + + The order of the '%typedef' fields is not relevant. In particular, a +type definition can forward-reference another type that is defined +subsequently. The previous example could have been written as: + + %typedef: Item_t Id_t + %typedef: Transaction_t Id_t + %typedef: Id_t int + +Integrity check will complain if undefined types are referenced. As +well as when any aliases up referencing back (looping back directly or +indirectly) in type declarations. For example, the following set of +declarations contains a loop. Thus, it's invalid: + + %typedef: A_t B_t + %typedef: B_t C_t + %typedef: C_t A_t + +The scope of a type is the record descriptor where it is defined. + + +File: recutils.info, Node: Types and Fields, Next: Scalar Field Types, Prev: Declaring Types, Up: Field Types + +6.2 Types and Fields +==================== + +Fields can be declared to have a given type by using the '%type' special +field in a record descriptor. The synopsis is: + + %type: FIELD_LIST TYPE_NAME_OR_DESCRIPTION + +Where FIELD_LIST is a list of field names separated by commas. +TYPE_NAME_OR_DESCRIPTION can be either a type name which has been +previously declared using '%typedef', or a type description. Type names +are useful when several fields are declared to be of the same type: + + %typedef: Id_t int + %type: Id Id_t + %type: Product Id_t + +Anonymous types can be specified by writing a type description instead +of a type name. They help to avoid superfluous type declarations in the +common case where a type is used by just one field. A record containing +a single 'Id' field, for example, can be defined without having to use a +'%typedef' in the following way: + + %rec: Task + %type: Id int + + +File: recutils.info, Node: Scalar Field Types, Next: String Field Types, Prev: Types and Fields, Up: Field Types + +6.3 Scalar Field Types +====================== + +The rec format supports the declaration of fields of the following +scalar types: integer numbers, ranges and real numbers. + + Signed "integers" are supported by using the 'int' declaration: + + %typedef: Id_t int + +Given the declaration above, fields of type 'Id_t' must contain +integers, and they may be negative. Hexadecimal values can be written +using the '0x' prefix, and octal values using an extra '0'. Valid +examples are: + + %type: Id Id_t + + Id: 100 + Id: -23 + Id: -0xFF + Id: 020 + +Sometimes it is desirable to reduce the "range" of integers allowed in a +field. This can be achieved by using a range type declaration: + + %typedef: Interrupt_t range 0 15 + +Note that it is possible to omit the minimum index in ranges. In that +case it is implicitly zero: + + %typedef: Interrupt_t range 15 + +It is possible to use the keywords 'MIN' and 'MAX' instead of a numeral +literal in one or both of the points conforming the range. They mean +the minimum and the maximum integer value supported by the +implementation respectively. See the following examples: + + %typedef: Negative range MIN -1 + %typedef: Positive range 0 MAX + %typedef: AnyInt range MIN MAX + %typedef: Impossible range MAX MIN + +Hexadecimal and octal numbers can be used to specify the limits in a +range. This helps to define scalar types whose natural base is not ten, +like for example: + + %typedef: Address_t range 0x0000 0xFFFF + %typedef: Perms_t range 755 + +"Real" number fields can be declared with the 'real' type specifier. A +wide range of real numbers can be represented this way, only limited by +the underlying floating point representation. The decimal separator is +always the dot ('.') character regardless of the locale setting. For +example: + + %typedef: Longitude_t real + +Examples of fields of type real: + + %rec: Rectangle + %typedef: Longitude_t real + %type: Width Longitude_t + %type: Height Longitude_t + + Width: 25.01 + Height: 10 + + +File: recutils.info, Node: String Field Types, Next: Enumerated Field Types, Prev: Scalar Field Types, Up: Field Types + +6.4 String Field Types +====================== + +The 'line' field type specifier can be used to restrict the value of a +field to a single line, i.e. no newline characters are allowed. For +example, a type for proper names could be declared as: + + %typedef: Name_t line + +Examples of fields of type line: + + Name: Mr. Foo Bar + Name: Mrs. Bar Baz + Name: This is + + invalid + +Sometimes it is the maximum size of the field value that shall be +restricted. The 'size' field type specifier can be used to define the +maximum number of characters a field value can have. For example, if we +were collecting input that will get written in a paper-based forms +system allowing up to 25 characters width entries, we could declare the +entries as: + + %typedef: Address_t size 25 + +Note that hexadecimal and octal integer constants can also be used to +specify field sizes: + + %typedef: Address_t size 0x18 + +Arbitrary restrictions can be defined by using regular expressions. The +"regexp" field type specifier introduces an ERE (extended regular +expression) that will be matched against fields having that name. The +synopsis is: + + %typedef: TYPE_NAME regexp /RE/ + +where RE is the regular expression to match. + + For example, consider the 'Id_t' type designed to represent the +encoding of the identifier of ID cards in some country: + + %typedef: Id_t regexp /[0-9]{9}[a-zA-Z]/ + +Examples of fields of type 'Id_t' are: + + IDCard: 123456789Z + IDCard: invalid id card + +Note that the slashes delimiting the RE can be replaced with any other +character that is not itself used as part of the regexp. That is useful +in some cases such as: + + %typedef: Path_t regexp |(/[^/]/?)+| + +The regexp flavor supported in recfiles are the POSIX EREs plus several +GNU extensions. *Note Regular Expressions::. + + +File: recutils.info, Node: Enumerated Field Types, Next: Date and Time Types, Prev: String Field Types, Up: Field Types + +6.5 Enumerated Field Types +========================== + +Fields of this type contain symbols taken from an enumeration. + + The type is described by writing the sequence of symbols comprising +the enumeration. Enumeration symbols are strings described by the +following regexp: + + [a-zA-Z0-9][a-zA-Z0-9_-]* + +The symbols are separated by blank characters (including newlines). For +example: + + %typedef: Status_t enum NEW STARTED DONE CLOSED + %typedef: Day_t enum Monday Tuesday Wednesday Thursday Friday + + Saturday Sunday + +It is possible to insert comments when describing an enum type. The +comments are delimited by parenthesis pairs. The contents of the +comments can be any character but parentheses. For example: + + %typedef: TaskStatus_t enum + + NEW (The task was just created) + + IN_PROGRESS (Task started) + + CLOSED (Task closed) + +"Boolean" fields, declared with the type specifier 'bool', can be seen +as special enumerations holding the binary values true and false. + + %typedef: Yesno_t bool + +The literals allowed in boolean fields are 'yes/no', '0/1' and +'true/false'. Examples are: + + SwitchedOn: 1 + SwitchedOn: yes + SwitchedOn: false + + +File: recutils.info, Node: Date and Time Types, Next: Other Field Types, Prev: Enumerated Field Types, Up: Field Types + +6.6 Date and Time Types +======================= + +The "date" field type specifier can be used to declare dates and times. +The synopsis is: + + %typedef: TYPE_NAME date + +There are many permitted date formats, described in detail later in this +manual (*note Date input formats::). Of particular note are the +following: + - Dates and times read from recfiles are not affected by the locale + or the timezone. This means that the 'LC_TIME' and the 'TZ' + environment variables are ignored. If you wish, for example, to + specify a time which must be interpreted as UTC, you must + explicitly append the time zone correction: e.g. '2001-1-10 + 12:09Z'. + - The field value '1/10/2001' means January 10, 2001, *not* October + 1, 2001. + - Relative times and dates (such as '1 day ago') are permitted but + are not particularly useful. + + +File: recutils.info, Node: Other Field Types, Prev: Date and Time Types, Up: Field Types + +6.7 Other Field Types +===================== + +The "Email" field type specifier is used to declare electronic +addresses. The synopsis is: + + %typedef: Email_t email + +Sometimes it is useful to make fields to store field names. For that +purpose the "Field" field type specifier is supported. The synopsis is: + + %typedef: Field_t field + +Universally Unique Identifiers (also known as UUIDs) are a way to assign +a globally unique label to some object. The "uuid" field type specifier +serves that purpose. The synopsis is: + + %typedef: Id_t uuid + +The format of the uuids is specified as 32 hexadecimal digits, displayed +in five groups separated by hyphens. For example: + + 550e8400-e29b-41d4-a716-446655440000 + +There is one other possible field type, viz: a foreign key. The +following example defines the type 'Maintainer_t' to be of type "record +'Hacker'"; in other words, a foreign key referring to a record in the +'Hacker' record set. + %typedef: Maintainer_t rec Hacker +This essentially means that the values to be stored in fields of type +'Maintainer_t' are of whatever type is defined for the primary key of +the 'Hacker' record set. Why this is useful is discussed later. *Note +Queries which Join Records::. + + +File: recutils.info, Node: Constraints on Record Sets, Next: Checking Recfiles, Prev: Field Types, Up: Top + +7 Constraints on Record Sets +**************************** + +The records in a recfile are by default not restricted to any particular +structure except that they must contain one or more fields and optional +comments. This provides the format with huge expressive power; but in +many cases, it is also desirable to impose some restrictions in order to +reflect some of the properties of the data stored in the database. It +is also useful in order to preserve data integrity and thus avoid data +corruption. + + The following sections describe the usage of some predefined special +fields whose purpose is to impose this kind of restriction in the +structure of the records. + +* Menu: + +* Mandatory Fields:: Requiring the presence of fields. +* Prohibited Fields:: Forbidding the presence of fields. +* Allowed Fields:: Restricting the presence of fields. +* Keys and Unique Fields:: Fields characterizing records. +* Size Constraints:: Constraints on the number of records in a set. +* Arbitrary Constraints:: Constraints records must comply with. + + +File: recutils.info, Node: Mandatory Fields, Next: Prohibited Fields, Up: Constraints on Record Sets + +7.1 Mandatory Fields +==================== + +Sometimes, you want to make sure that _every_ record of a particular +type contains certain fields. To do this, use the special field +'%mandatory'. The usage is: + + %mandatory: FIELD1 FIELD2 ... FIELDN +The field names are separated by one or more blank characters. + + The fields listed in a '%mandatory' entry are non-optional; i.e. at +least one field with this name shall be present in any record of this +kind. Records violating this restriction are invalid and a checking +tool will report the situation as a data integrity failure. + + Consider for example an "address book" database where each record +stores the information associated with a contact. The records will be +heterogeneous, in the sense they won't all contain exactly the same +fields: the contact of an Internet shop will probably have a 'URL' +field, while the entry for our grandmother probably won't. We still +want to make sure that every entry has a field with the name of the +contact. In this case, we could use '%mandatory' as follows: + + %rec: Contact + %mandatory: Name + + Name: Granny + Phone: +12 23456677 + + Name: Yoyodyne Corp. + Email: sales@yoyod.com + Phone: +98 43434433 + + A word of caution, however: In many situations, especially in day to +day social interaction, it is common to find that certain information is +simply unavailable. For example, although every person has a date of +birth, some people will refuse to provide that information. + + It is probably wise therefore to avoid stipulating a field as +mandatory, unless it is essential to the enterprise. Otherwise, a data +entry clerk faced with this situation will have to make the choice +between dropping the entry entirely or entering some fake data to keep +the system happy. + + +File: recutils.info, Node: Prohibited Fields, Next: Allowed Fields, Prev: Mandatory Fields, Up: Constraints on Record Sets + +7.2 Prohibited Fields +===================== + +The inverse of '%mandatory' is '%prohibit'. Prohibited fields may not +occur in _any_ record of the given type. The usage is: + + %prohibit: FIELD1 FIELD2 ... FIELDN +The field names are separated by one or more blank characters. + +Fields listed in a '%prohibit' entry are forbidden; i.e. no field with +this name should be present in any record of this kind. Again, records +violating this restriction are invalid. + +Several '%prohibit' fields can appear in the same record descriptor. +The set of prohibited fields is the union of all the entries. For +example, in the following database both 'Id' and 'id' are prohibited: + + %rec: Entry + %prohibit: Id + %prohibit: id + + One possible use case for prohibited fields arises when some field +name is reserved for some future use. For example, if we were +organizing a sports competition, we would want competitors to register +before the event. However a competitor's 'result' should not and cannot +be entered before the competition takes place. Initially then, we would +change the record descriptor as follows: + + %rec: Contact + %mandatory: Name + %prohibit: result +At the start of the event, the '%prohibit' line can be deleted, to allow +results to be entered. + + +File: recutils.info, Node: Allowed Fields, Next: Keys and Unique Fields, Prev: Prohibited Fields, Up: Constraints on Record Sets + +7.3 Allowed Fields +================== + +In some cases we know the set of fields that may appear in the records +of a given type, even if they are not mandatory. The '%allowed' special +field is used to specify this restriction. The usage is: + + %allowed: FIELD1 FIELD2 ... FIELDN +The field names are separated by one or more blank chracters. + +If there are more or one '%allowed' fields in a record descriptor, all +fields of all the records in the record set must be in the union of +'%allowed', '%mandatory' and '%key'. Otherwise an integrity error is +raised. + +Several '%allowed' fields can appear in the same record descriptor. The +set of allowed fields is the union of all the entries. + + +File: recutils.info, Node: Keys and Unique Fields, Next: Size Constraints, Prev: Allowed Fields, Up: Constraints on Record Sets + +7.4 Keys and Unique Fields +========================== + +The '%unique' and '%key' special fields are used to avoid several +instances of the same field in a record, and to implement keys in record +sets. Their usage is: + + %unique: FIELD1 FIELD2 ... FIELDN + %key: FIELD + +The field names are separated by one or more blank characters. + + Normally it is permitted for a record to contain two or more fields +of the same name. The '%unique' special field revokes this +permissiveness. A field declared "unique" cannot appear more than once +in a single record. + + For example, an entry in an address book database could contain an +'Age' field. It does not make sense for a single person to be of +several ages. So, a field could be declared as "unique" in the +corresponding record descriptor as follows: + + %rec: Contact + %mandatory: Name + %unique: Age + +Several '%unique' fields can appear in the same record descriptor. The +set of unique fields is the union of all the entries. + + '%key' makes the referenced field the primary key of the record set. +The primary key behaves as if both '%unique' and '%mandatory' had been +specified for that field. Additionally, there is further restriction, +viz: a given value of a primary key field may appear no more than once +within a record set. + + Consider for example a database of items in stock. Each item is +identified by a numerical 'Id' field. No item may have more than one +'Id', and no items may exist without an associated 'Id'. Additionally, +no two items may share the same 'Id'. This common situation can be +implementing by declaring 'Id' as the key in the record descriptor: + + %rec: Item + %key: Id + %mandatory: Title + + Id: 1 + Title: Box + + Id: 2 + Title: Sticker big + +It would not make sense to have several primary keys in a record set. +Thus, it is not allowed to have several '%key' fields in the same record +descriptor. It is also forbidden for two items to share the same 'Id' +value. Both of these situations would be data integrity violations, and +will be reported by a checking tool. + + Elsewhere, we discuss how primary keys can be used to link one record +set to another using primary keys together with foreign keys. *Note +Queries which Join Records::. + + +File: recutils.info, Node: Size Constraints, Next: Arbitrary Constraints, Prev: Keys and Unique Fields, Up: Constraints on Record Sets + +7.5 Size Constraints +==================== + +Sometimes it is desirable to place constraints on entire records. This +can be done with the '%size' special field which is used to limit the +number of records in a record set. Its usage is: + + %size: [RELATIONAL_OPERATOR] NUMBER + +If no operator is specified then NUMBER is interpreted as the exact +number of records of this type. The number can be any integer literal, +including hexadecimal and octal constants. For example: + + %rec: Day + %size: 7 + %type: Name enum + + Monday Tuesday Wednesday Thursday Friday + + Saturday Sunday + %doc: There should be exactly 7 days. + + The optional RELATIONAL_OPERATOR shall be one of '<', '<=', '>' and +'>='. For example: + + %rec: Item + %key: Id + %size: <= 100 + %doc: We have at most 100 different articles. + + It is valid to specify a size of '0', meaning that no records of this +type shall exist in the file. + + Only one '%size' field shall appear in a record descriptor. + + +File: recutils.info, Node: Arbitrary Constraints, Prev: Size Constraints, Up: Constraints on Record Sets + +7.6 Arbitrary Constraints +========================= + +Occasionally, '%mandatory', '%prohibit' and '%size' are just not +flexible enough. We might, for instance, want to ensure that _if_ a +field is present, then it must have a certain relationship to other +fields. Or we might want to stipulate that under certain conditions +only, a record contains a particular field. + + To this end, recutils provides a way for arbitrary field constraints +to be defined. These permit restrictions on the presence and/or value +of fields, based upon the value or presence of other fields within that +record. This is done using the '%constraint' special field. Its usage +is: + + %constraint: EXPR + +where EXPR is a selection expression (*note Selection Expressions::). +When a constraint is present in a record set it means that all the +records of that type must satisfy the selection expression, i.e. the +evaluation of the expression with the record returns 1. Otherwise an +integrity error is raised. + + Consider for example a record type 'Task' featuring two fields of +type date called 'Start' and 'End'. We can use a constraint in the +record set to specify that the task cannot start after it finishes: + + %rec: Task + %type: Start,End date + %constraint: Start << End + + The "implies" operator '=>' is especially useful when defining +constraints, since it can be used to specify conditional constraints, +i.e. constraints applying only in certain records. For example, we +could specify that if a task is closed then it must have an 'End' date +in the following way: + + %rec: Task + %type: Start,End date + %constraint: Start << End + %constraint: Status = 'CLOSED' => #End + + It is acceptable to declare several constraints in the same record +set. + + +File: recutils.info, Node: Checking Recfiles, Next: Remote Descriptors, Prev: Constraints on Record Sets, Up: Top + +8 Checking Recfiles +******************* + +Sometimes, when creating a recfile by hand, typographical errors or +other mistakes will occur. If a recfile contains such mistakes, then +one cannot rely upon the results of queries or other operations. +Fortunately there is a tool called 'recfix' which can find these errors. +It is a good idea to get into the habit of running 'recfix' on a file +after editing it, and before trying other commands. + +* Menu: + +* Syntactical Errors:: Fixing structure errors in recfiles. +* Semantic Errors:: Fixing semantic errors in recfiles. + + +File: recutils.info, Node: Syntactical Errors, Next: Semantic Errors, Up: Checking Recfiles + +8.1 Syntactical Errors +====================== + +One easy mistake is to forget the colon separating the field name from +its value. + + %rec: Article + %key Id + + Name: Thing + Id: 0 +Running 'recfix' on this file will immediately tell us that there is a +problem: + + $ recfix --check inventory.rec + inventory.rec: 2: error: expected a record +Here, 'recfix' has diagnosed a problem in the file 'inventory.rec' and +the problem lies at line 2. If, as in this case, 'recfix' shows there +is a problem with the recfile, you should attend to that problem before +trying to use any other recutils program on that file, otherwise strange +things could happen. The '--check' flag is optional but in normal +execution not required because that is the default operation. + + +File: recutils.info, Node: Semantic Errors, Prev: Syntactical Errors, Up: Checking Recfiles + +8.2 Semantic Errors +=================== + +However 'recfix' checks more than the syntactical integrity of the +recfile. It also checks certain semantics and that the data is +self-consistent. To do this, it uses the special fields of the record, +some of which were introduced above (*note Constraints on Record +Sets::). It is a good idea to use the special fields to stipulate the +"enterprise rules" of the data. + + Errors will be reported if any of the following special keywords are +present and the data does not match the stipulated conditions +'%mandatory' + The mandated fields are missing from a record. +'%prohibit' + The prohibited fields are present in a record. +'%unique' + There is more than one field in a single record of the given name. +'%key' + Two or more records share the same value of the field which is the + key field. +'%typedef and %type' + A field has a value which does not conform to the specified type. +'%size' + The number of records does not conform to the specified + restriction. +'%constraint' + A field does not conform to the specified constraint. +'%confidential' + An unencrypted value exists for a confidential field. + + +File: recutils.info, Node: Remote Descriptors, Next: Grouping and Aggregates, Prev: Checking Recfiles, Up: Top + +9 Remote Descriptors +******************** + +The '%rec' special field is used for two main purposes: to identify a +record as a record descriptor, and to provide a name for the described +record set. The synopsis of the usage of the field is the following: + + %rec: TYPE [URL_OR_FILE] + +TYPE is the name of the kind of records described by the descriptor. It +is mandatory to specify it, and it follows the same lexical conventions +used by field names. *Note Fields::. There is a non-enforced +convention to use singular nouns, because the name makes reference to +the type of a single entity, even if it applies to all the records +contained in the record set. For example, the following record set +contains transactions, and the type specified in the record descriptor +is 'Transaction'. + + %rec: Transaction + + Id: 10 + Title: House rent + + Id: 11 + Title: Loan + +Only one '%rec' field should be in a record descriptor. If there are +more it is an integrity violation. It is highly recommended (but not +enforced) to place this field in the first position of the record +descriptor. + + Sometimes it is convenient to store records of the same type in +different files. The duplication of record descriptors in this case +would surely lead to consistency problems. A possible solution would be +to keep the record descriptor in a separated file and then include it in +any operation by using pipes. For example: + + $ cat descriptor.rec data.rec | recsel ... + +For those cases it is more convenient to use a "external descriptor". +External descriptors can be built appending a file path to the '%rec' +field value, like: + + %rec: FSD_Entry /path/to/file.rec + + The previous example indicates that a record descriptor describing +the 'FSD_Entry' records shall be read from the file '/path/to/file.rec'. +A record descriptor for 'FSD_Entry' may not exist in the external file. +Both relative and absolute paths can be specified there. + + URLs can be used as sources for external descriptors as well. In +that case we talk about "remote descriptors". For example: + + %rec: Department http://www.myorg.com/Org.rec + +The URL shall point to a text file containing rec data. If there is a +record descriptor in the remote file documenting the 'Department' type, +it will be used. + + Note that the local record descriptor can provide additional fields +to "expand" the record type. For example: + + %rec: FSD_Entry http://www.jemarch.net/downloads/FSD.rec + %mandatory: Rating + +The record descriptor above is including the contents of the 'FSD_Entry' +record descriptor from the URL, and adding them to the local record +descriptor, that in this case contains just the '%mandatory' field. + + If you are using GNU recutils (*note Invoking the Utilities::) to +process your recfiles, any URL schema supported by 'libcurl' will work. + + +File: recutils.info, Node: Grouping and Aggregates, Next: Queries which Join Records, Prev: Remote Descriptors, Up: Top + +10 Grouping and Aggregates +************************** + +Grouping and aggregate functions are two related features which are +useful to extract statistics from a record set, or a subset of that +record set. + +* Menu: + +* Grouping Records:: Combining records by fields. +* Aggregate Functions:: Statistics and more. + + +File: recutils.info, Node: Grouping Records, Next: Aggregate Functions, Up: Grouping and Aggregates + +10.1 Grouping Records +===================== + +Consider a recfile containing a list of items in a shop inventory. For +each item it is stored its type, its category, its price, the date of +the last selling operation of an item of that type, and the amount of +items currently available in stock. A sample of such a database could +be: + + Type: EC Car + Category: Toy + Price: 12.2 + LastSell: 20-April-2012 + Available: 623 + + Type: Terria + Category: Food + Price: 0.60 + LastSell: 22-April-2012 + Available: 8239 + + Type: Typex + Category: Office + Price: 1.20 + LastSell: 22-April-2012 + Available: 10878 + + Type: Notebook + Category: Office + Price: 1.00 + LastSell: 21-April-2012 + Available: 77455 + + Type: Sexy Puzzle + Category: Toy + Price: 6.20 + LastSell: 6.20 + Available: 12 + +Now imagine we are interested in grouping the contents of the 'Items' +record set in groups of items of the same category. We can do it using +the '-G' command line argument for 'recsel'. This argument accepts a +list of fields separated by commas. The argument can be read as "group +by". + + In this case we want to group by 'Category', so we would do: + + $ recsel -G Category + Type: Terria + Category: Food + Price: 0.60 + LastSell: 22-April-2012 + Available: 8239 + + Type: Typex + Category: Office + Price: 1.20 + LastSell: 22-April-2012 + Available: 10878 + Type: Notebook + Price: 1.00 + LastSell: 21-April-2012 + Available: 77455 + + Type: EC Car + Category: Toy + Price: 12.2 + LastSell: 20-April-2012 + Available: 623 + Type: Sexy Puzzle + Price: 6.20 + LastSell: 6.20 + Available: 12 + +We can see that the output is three records, corresponding to the three +different categories of items present in the database. However, we are +only interested in the types of products in each category, so we can +remove unwanted information using '-p': + + $ recsel -G Category -p Category,Type items.rec + Category: Food + Type: Terria + + Category: Office + Type: Typex + Type: Notebook + + Category: Toy + Type: EC Car + Type: Sexy Puzzle + +It is also possible to group by several fields. We could group by both +'Category' and 'LastSell': + + $ recsel -G Category,LastSell -p Category,LastSell,Type items.rec + Category: Food + LastSell: 22-April-2012 + Type: Terria + + Category: Office + LastSell: 21-April-2012 + Type: Notebook + + Category: Office + LastSell: 22-April-2012 + Type: Typex + + Category: Toy + LastSell: 20-April-2012 + Type: EC Car + + Category: Toy + LastSell: 6.20 + Type: Sexy Puzzle + + +File: recutils.info, Node: Aggregate Functions, Prev: Grouping Records, Up: Grouping and Aggregates + +10.2 Aggregate Functions +======================== + +recutils supports "aggregate functions". These are so called because +they accept a record set and a field name as inputs and generate a +single result. Usually this result is numerical. + + The supported aggregate functions are the following: + +'Count(FIELD)' + Counts the number of occurrences of a field. +'Avg(FIELD)' + Calculates the average (mean) of the numerical values of a field. +'Sum(FIELD)' + Calculates the sum of the numerical values of a field. +'Min(FIELD)' + Calculates the minimum numerical value of a field. +'Max(FIELD)' + Calculates the maximum numerical value of a field. + + The aggregate functions are to be invoked in the field expressions in +'recsel'. By default they are applied to the totality of the records in +a record set. For example, using the items database from the previous +section, we can do calculations as in the following examples. + + The SQL aggregate functions can be applied to the totality of the +tuples in the relation. For example, using the 'Count' aggregate +function we can calculate the number of fields named 'Category' present +in the record set as follows: + + $ recsel -p "Count(Category)" items.rec + Count_Category: 5 + +The result is a field whose name is derived from the function name and +the field passed as its parameter, separated by an underline. This name +scheme probably suffices for most purposes, but it is always possible to +use a rewrite rule to obtain something different: + + $ recsel -p "Count(Category):NumCategories" items.rec + NumCategories: 5 + +You can use different letter case in writing the name of the aggregate, +and this will be reflected in the field name: + + $ recsel -p "CoUnT(Category)" items.rec + CoUnT_Category: 5 + +It is possible to use more than one aggregate function in the field +expression. Suppose we are also interested in the average price of the +items we sell. We can use the 'Avg' aggregate: + + $ recsel -p "Count(Category),Avg(Price)" items.rec + Count_Category: 5 + Avg_Price: 4.240000 + +Now let's add a field along with an aggregate function to the field +expression and see what we get: + + $ recsel -p "Type,Avg(Price)" items.rec + Type: EC Car + Avg_Price: 12.200000 + + Type: Terria + Avg_Price: 0.600000 + + Type: Typex + Avg_Price: 1.200000 + + Type: Notebook + Avg_Price: 1 + + Type: Sexy Puzzle + Avg_Price: 6.200000 + +We get five records! The reason is that when _only_ aggregate functions +are part of the field expression, they are applied to the single record +that would result from concatenating all the records in the record set +together. However, when a regular field appears in the field expression +the aggregate functions are applied to the individual records. This is +still useful in some cases, such as a database of maintainers: + + Name: Jose E. Marchesi + Email: jemarch@gnu.org + Email: jemarch@es.gnu.org + + Name: Luca Saiu + Email: positron@gnu.org + +Lets see how many emails each maintainer has: + + $ recsel -p "Name,Count(Email)" maintainers.rec + Name: Jose E. Marchesi + Count_Email: 2 + + Name: Luca Saiu + Count_Email: 1 + +Aggregate functions are most useful when we combine them with grouping. +This is when we are interested in some property of a subset of the +records in the database. For example, the average prices of each item +category stored in the database can be obtained by executing: + + $ recsel -p "Category,Avg(Price)" -G Category items.rec + Category: Food + Avg_Price: 0.600000 + + Category: Office + Avg_Price: 1.100000 + + Category: Toy + Avg_Price: 9.200000 + +If we were interested in the actual prices that result in each average +we can do: + + $ recsel -p "Category,Price,Avg(Price)" -G Category items.rec + Category: Food + Price: 0.60 + Avg_Price: 0.600000 + + Category: Office + Price: 1.20 + Price: 1.00 + Avg_Price: 1.100000 + + Category: Toy + Price: 12.2 + Price: 6.20 + Avg_Price: 9.200000 + + +File: recutils.info, Node: Queries which Join Records, Next: Auto-Generated Fields, Prev: Grouping and Aggregates, Up: Top + +11 Queries which Join Records +***************************** + +Suppose you wanted to add the residential address of the people in the +'acquaintances.rec' file from *note Simple Selections::. + + One way to do this is as follows: + %type: Dob date + + Name: Alfred Nebel + Dob: 20 April 2010 + Email: alf@example.com + Address: 42 Abbeter Way, Inprooving, WORCS + Telephone: 01234 5676789 + + Name: Mandy Nebel + Dob: 21 February 1972 + Email: mandy@example.com + Address: 42 Abbeter Way, Inprooving, WORCS + Telephone: 01234 5676789 + + Name: Bertram Nebel + Dob: 3 January 1966 + Email: bert@example.com + Address: 42 Abbeter Way, Inprooving, WORCS + Telephone: 01234 5676789 + + Name: Charles Spencer + Dob: 4 July 1997 + Email: charlie@example.com + Address: 2 Serpe Rise, Little Worning, SURREY + Telephone: 09876 5432109 + + Name: Dirk Spencer + Dob: 29 June 1945 + Email: dirk@example.com + Address: 2 Serpe Rise, Little Worning, SURREY + Telephone: 09876 5432109 + + Name: Ernest Wright + Dob: 26 April 1978 + Email: ernie@example.com + Address: 1 Wanter Rise, Greater Inncombe, BUCKS + + This will work fine. However you will notice that there are two +addresses where more than one person live (presumably they are members +of the same family). This has a number of disadvantages: + - You have to type (or copy) the same information several times. + - Should a family move house, then you would have to update the + addresses (and telephone number) of all the family members. + - A typing error in one of the addresses would lead an automatic + query to erroneously suggest that the people lived at different + addresses. + - It unnecessarily increases the size of the recfile. + +* Menu: + +* Foreign Keys:: Referring to records from another records. +* Joining Records:: Performing cross-joins. + + +File: recutils.info, Node: Foreign Keys, Next: Joining Records, Up: Queries which Join Records + +11.1 Foreign Keys +================= + +A better way would be to separate the addresses and people into +different record sets. The first record set might look like this: + + %rec: Person + %type: Dob date + %type: Abode rec Residence + + + Name: Alfred Nebel + Dob: 20 April 2010 + Email: alf@example.com + Abode: 42AbbeterWay + + Name: Mandy Nebel + Dob: 21 February 1972 + Email: mandy@example.com + Mobile: 0555 342123 + Abode: 42AbbeterWay + + Name: Bertram Nebel + Dob: 3 January 1966 + Email: bert@example.com + Abode: 42AbbeterWay + + Name: Charles Spencer + Dob: 4 July 1997 + Email: charlie@example.com + Abode: 2SerpeRise + + Name: Dirk Spencer + Dob: 29 June 1945 + Email: dirk@example.com + Mobile: 0555 342123 + Abode: 2SerpeRise + + Name: Ernest Wright + Dob: 26 April 1978 + Abode: ChezGrampa + + +and the second (following in the same file), like this: + + + %rec: Residence + %key: Id + + Address: 42 Abbeter Way, Inprooving, WORCS + Telephone: 01234 5676789 + Id: 42AbbeterWay + + Address: 2 Serpe Rise, Little Worning, SURREY + Telephone: 09876 5432109 + Id: 2SerpeRise + + Address: 1 Wanter Rise, Greater Inncombe, BUCKS + Id: ChezGrampa + + Here you can see that there are two record sets viz: 'Person' and +'Residence'. There are six people, but only three residences, because +some residences accommodate more than one person. Note also that the +'Residence' descriptor has the entry '%key: Id' whilst the 'Person' +descriptor has '%type: Abode rec Residence'. This is because 'Abode' is +the foreign key which identifies the residence where a person lives. + + We could have declared the 'Id' field as '%auto'. This would have +had the advantage that we need not manually update it. However, we +decided that the 'Abode' field values in the 'Person' records are better +as alphanumeric fields, so that they can contain human readable values. +In this way, it is self-evident by reading a 'Person' record where that +person lives. Yet since the 'Id' field is declared using the '%key' +special field name, you can be sure that you don't accidentally reuse an +existing key. + + +File: recutils.info, Node: Joining Records, Prev: Foreign Keys, Up: Queries which Join Records + +11.2 Joining Records +==================== + +The above example has also added a new field to the 'Person' record set +to contain that person's mobile phone number. Note that the 'Telephone' +field belongs to the 'Residence' record set because that contains the +telephone number of the home, whereas 'Mobile' belongs to 'Person' since +mobile telephones are normally used exclusively by one individual. + + If we want to look up the name and address of a person in our +recfile, we can use 'recsel' as before. Because we now have more than +one record set in the 'acquaintances.rec' file, we have to tell 'recsel' +in which record set we want to look up records. We do this with the +'-t' flag as follows: + + $ recsel -t Person -P Name,Abode acquaintances.rec + Alfred Nebel + 42AbbeterWay + + Mandy Nebel + 42AbbeterWay + + Bertram Nebel + 42AbbeterWay + + Charles Spencer + 2SerpeRise + + Dirk Spencer + 2SerpeRise + + Ernest Wright + ChezGrampa + + This result tells us the names of all the people in the recfile, as +well as giving a concise and hopefully effective reminder telling us +where they live. However these results would not be useful to someone +unacquainted with the individuals. They need a list of names and full +addresses. We can use 'recsel' to produce such a list: + + $ recsel -t Person -j Abode acquaintances.rec + Name: Charles Spencer + Dob: 4 July 1997 + Email: charlie@example.com + Abode_Address: 2 Serpe Rise, Little Worning, SURREY + Abode_Telephone: 09876 5432109 + Abode_Id: 2SerpeRise + + Name: Dirk Spencer + Dob: 29 June 1945 + Email: dirk@example.com + Mobile: 0555 342123 + Abode_Address: 2 Serpe Rise, Little Worning, SURREY + Abode_Telephone: 09876 5432109 + Abode_Id: 2SerpeRise + + Name: Ernest Wright + Dob: 26 April 1978 + Abode_Address: 1 Wanter Rise, Greater Inncombe, BUCKS + Abode_Id: ChezGrampa + + The '-t' flag we have seen before. It tells 'recsel' that we want to +extract records of type 'Person'. The '-j' flag is new. It says that +we want to perform a "join". Specifically we want to join the 'Person' +records according to their 'Abode' field. + + In the above example, 'recsel' displays several field names which do +not appear anywhere in the input e.g. 'Abode_Address'. This is the +'Address' field in the record joined by the foreign key 'Abode'. In +this example probably only the name and address are of interest. The +other information such as date of birth is incidental. The foreign key +'Abode_Id' is certainly not wanted in the output since it is redundant. +As usual, you can use the '-P' or '-p' options to limit the fields which +will be displayed. However the full joined field name, if appropriate, +must be specified. So the names and addresses without the other +information can be retrieved thus: + + $ recsel -t Person -j Abode -p Name,Abode_Address acquaintances.rec + Name: Charles Spencer + Abode_Address: 2 Serpe Rise, Little Worning, SURREY + + Name: Dirk Spencer + Abode_Address: 2 Serpe Rise, Little Worning, SURREY + + Name: Ernest Wright + Abode_Address: 1 Wanter Rise, Greater Inncombe, BUCKS + + +File: recutils.info, Node: Auto-Generated Fields, Next: Encryption, Prev: Queries which Join Records, Up: Top + +12 Auto-Generated Fields +************************ + +Consider for example a list of articles in stock in a toy store: + + %rec: Item + %key: Description + + Description: 2cm metal soldier WWII + Amount: 2111 + + Description: Flying Helicopter Indoor Maxi + Amount: 8 + + ... + + It would be natural to identify the items by their descriptions, but +it is also error prone: was it "Flying Helicopter Indoor Maxi" or +"Flying Helicopter Maxi Indoor"? Was "Helicopter" in lower case or +upper case? + + Thus it is quite common in databases to use some kind of numeric "Id" +to uniquely identify items like those ones, because numbers are easy to +increment and manipulate. So we could add a new numeric 'Id' field and +use it as the primary key: + + %rec: Item + %key: Id + %mandatory: Description + + Id: 0 + Description: 2cm metal soldier WWII + Amount: 2111 + + Id: 1 + Description: Flying Helicopter Indoor Maxi + Amount: 8 + + ... + + A problem with this approach is that we must be careful to not assign +already used ids when we introduce more articles in the database. Other +than its uniqueness, it is not important which number is associated with +which article. + + To ease the management of those Ids database systems use to provide a +facility called "auto-counters". Auto-counters can be implemented in +recfiles using the '%auto' directive in the record descriptor. Its +usage is: + + %auto: FIELD1 FIELD2 ... FIELDN + +The list of field names are separated by one or more blank characters. +There can be several '%auto' fields in the same record descriptor, the +effective list of auto-generated fields being the union of all the +entries. + + When 'recins' inserts a new record in the recfile, it looks for any +declared auto field. If any of these fields are not provided explicitly +in the command line then 'recins' generates them along with the +user-provided fields. Such auto fields are generated at the beginning +of the new records, in the same order they are found in the '%auto' +directives. + + For example, consider a 'items.rec' database with an empty record +set: + + %rec: Item + %key: Id + %auto: Id + %mandatory: Description + +If we insert a new record and we do not specify an 'Id' then it will be +generated automatically by 'recins': + + $ recins -t Item -f Description -v 'recutils t-shirts' \ + -f Amount -v 200 \ + items.rec + $ cat items.rec + %rec: Item + %key: Id + %auto: Id + %mandatory: Description + + Id: 0 + Description: recutils t-shirts + Amount: 200 + +The concrete effect of the '%auto' directive depends on the type of the +affected field. The following sections document how. + +* Menu: + +* Counters:: Generating incremental Ids. +* Unique Identifiers:: Generating universally unique Ids. +* Time-Stamps:: Tracking the creation of records. + + +File: recutils.info, Node: Counters, Next: Unique Identifiers, Up: Auto-Generated Fields + +12.1 Counters +============= + +If an auto field is of type 'integer' or 'range' then any newly +generated field will use the "next biggest" unused number in the record +set. + + Consider the toy inventory database introduced above. We could +declare the 'Id' field to be generated automatically: + + %rec: Item + %key: Id + %type: Id int + %mandatory: Description + %auto: Id + + Id: 0 + Description: 2cm metal soldier WWII + Amount: 2111 + +When the next new item is introduced in the database, 'recins' will note +the '%auto', and create a new 'Id' field for the new record with the +next-biggest unused integer, since 'Id' is declared to be of type 'int'. +In this example, the new record would have an Id of '1'. The database +can still provide an explicit Id for the new record. In that case the +field is not generated automatically. + + Note that if no explicit type is defined for an auto generated field +then it is assumed to be an integer. + + +File: recutils.info, Node: Unique Identifiers, Next: Time-Stamps, Prev: Counters, Up: Auto-Generated Fields + +12.2 Unique Identifiers +======================= + +Universally Unique Identifiers, often abbreviated as UUIDs, can also be +auto-generated using recutils. Suppose you maintain a database with +events featuring the following record descriptor: + + %rec: Event + %key: Id + %mandatory: Title Date + +What would be appropriate to identify each event? We could use an +integer and declare it as auto-generated. After adding two events the +database would look like this: + + %rec: Event + %key: Id + %mandatory: Title Date + + Id: 0 + Title: Team meeting + Date: 12-08-2013 + + Id: 1 + Title: Dave's birthday + Date: 20-12-2013 + +However, suppose that we want to share our events with other people, +i.e. to send them event records and to incorporate their records into +our own database. In this case the 'Id's would collide. A good +solution is to use 'uuids' and declare them as 'auto': + + %rec: Event + %key: Id + %type: Id uuid + %mandatory: Title Date + + Id: f81d4fae-7dec-11d0-a765-00a0c91e6bf6 + Title: Team meeting + Date: 12-08-2013 + + Id: f81d4fae-dc18-11d0-a765-a01328400a0c + Title: Dave's birthday + Date: 20-12-2013 + + +File: recutils.info, Node: Time-Stamps, Prev: Unique Identifiers, Up: Auto-Generated Fields + +12.3 Time-Stamps +================ + +Auto generated dates can be used to implement automatic timestamps. +Consider for example a "Transfer" record set registering bank transfers. +We want to save a timestamp every time a transfer is done, so we include +an '%auto' for the date: + + %rec: Transfer + %key: Id + %type: Id int + %type: Date date + %auto: Id Date + + +File: recutils.info, Node: Encryption, Next: Generating Reports, Prev: Auto-Generated Fields, Up: Top + +13 Encryption +************* + +For ethical or security reasons it is sometimes necessary that +information in a recfile should not be readable by unauthorized people. +One way to prevent a recfile from being read is to use the security +features of the operating system. A more secure way would be to encrypt +the entire recfile using a free strong encryption program such as GnuPG +(http://gnu.org/software/gnupg). The disadvantage of both these methods +is that the entire recfile has to be secured when it may well be the +case that only certain data need to be protected. + + Recutils offers a way to encrypt specified fields in a record, whilst +leaving the rest in clear text. + +* Menu: + +* Confidential Fields:: Declaring fields as sensitive data. +* Encrypting Files:: Encrypt confidential fields. +* Decrypting Data:: Reading encrypted fields. + + +File: recutils.info, Node: Confidential Fields, Next: Encrypting Files, Up: Encryption + +13.1 Confidential Fields +======================== + +To specify that a field should be encrypted, use the '%confidential' +special field. This special field declares a set of fields as +"confidential", meaning they contain secret data such as passwords or +personal information. Its usage is: + + %confidential: FIELD1 FIELD2 ... FIELDN + +The field names are separated by one or more blank characters. There +can be several '%confidential' fields in the same record descriptor, the +effective list of confidential fields being the union of all the +entries. + + Declaring a field as confidential indicates that its contents must +not be stored in plain text, but encrypted with a password-based +mechanism. When the information is retrieved from the database the +confidential fields are unencrypted if the correct password is provided. +Likewise, when information is inserted in the database the confidential +fields are encrypted with some given password. + + For example, consider a database of users of some service. For each +user we want to store a name, a login name, an email address and a +password. All this information is public with the obvious exception of +the password. Thus we declare the 'Password' field as confidential in +the corresponding record descriptor: + + %rec: Account + %type: Name line + %type: Login line + %type: Email email + %confidential: Password + + The rec format does not impose the usage of a specific encryption +algorithm, but requires that: + + - The algorithm must be password-based. + - The value of any encrypted field shall begin with the string + 'encrypted-' followed by the encrypted data. + - The encrypted data must be encoded in some ASCII encoding such as + base64. + + The above rules assure that it is possible to determine whether a +given field is encrypted. For example, the following is an excerpt from +the account database described above. It contains an entry with the +password encrypted and another with the password unencrypted: + + Name: Mr. Foo + Login: foo + Email: foo@foo.com + Password: encrypted-AAABBBCCDDDEEEFFF + + Name: Mr. Bar + Login: bar + Email: bar@bar.com + Password: secret + + Unencrypted confidential fields are a data integrity error, and +utilities like 'recfix' will report it. The same utility can be used to +"fix" the database by massively encrypting any unencrypted field. + + Nothing prevents the usage of several passwords in the same database. +This allows the establishment of several level of securities or security +profiles. For example, we may want to store different passwords for +different online services: + + %rec: Account + %confidential: WebPassword ShellPassword + +We could then encrypt WebPassword entries using a password shared among +all the webmasters, and the ShellPassword entries with a more restricted +password available only to the administrator of the machine. + + Note that since the utilities only accept to specify one password at +a time different passwords cannot be specified at decryption time. This +means that in the example above the administrator would need to run +'recsel' twice in order to decrypt all the encrypted data in the +recfile. + + The GNU recutils fully support encrypted fields. See the +documentation for 'recsel', 'recins' and 'recfix' for details on how to +operate on files containing confidential fields. + + +File: recutils.info, Node: Encrypting Files, Next: Decrypting Data, Prev: Confidential Fields, Up: Encryption + +13.2 Encrypting Files +===================== + +'recins' allows the insertion of encrypted fields in a database. When +the '-s' ('--password') command line option is specified in the command +line any field declared as confidential in the record descriptor will +get encrypted using the given passphrase. If the command is executed +interactively and '-s' is not used then the user is asked to provide a +password using the terminal. For example, the invocation: + + $ recins -t Account -s mypassword -f Login -v foo -f Password \ + -v secret accounts.rec + +will encrypt the value of the 'Password' field with 'mypassword' as long +as the field is declared as confidential. (*note Confidential Fields:: +for details on confidential fields). + + 'recins' will issue a warning if a confidential field is inserted in +the database but no password was provided to encrypt it. This is to +avoid having unencrypted sensitive data in the recfiles. + + +File: recutils.info, Node: Decrypting Data, Prev: Encrypting Files, Up: Encryption + +13.3 Decrypting Data +==================== + +The contents of confidential fields can be read using the '-s' +('--password') command line option to 'recsel'. When used, any selected +record containing encrypted fields will try to decrypt them with the +given password. If the operation succeeds then the output will include +the unencrypted data. Otherwise the ASCII-encoded encrypted data will +be emitted. + + If 'recsel' is invoked interactively and no password is specified +with '-s', the user will be asked for a password in case one is needed. +No echo of the password will appear in the screen. The provided +password will be used to decrypt all confidential fields as if it was +specified with '-s'. + + For example, consider the following database storing information +about the user accounts of some online service. Each entry stores a +login, a full name, email and a password. The password is declared as +confidential: + + %rec: Account + %key: Login + %confidential: Password + + Login: foo + Name: Mr. Foo + Email: foo@foo.com + Password: encrypted-AAABBBCCCDDD + + Login: bar + Name: Ms. Bar + Email: bar@bar.org + Password: encrypted-XXXYYYZZZUUU + +If we use 'recsel' to get a list of records of type 'Account' without +specifying a password, or if the wrong password was specified in +interactive mode, then we would get the following output with the +encrypted values: + + $ cat accounts.rec | recsel -t Account -p Login,Password + Login: foo + Password: encrypted-AAABBBCCCDDD + + Login: bar + Password: encrypted-XXXYYYZZZUUU + +If we specify a password and both entries were encrypted using that +password, we would get the unencrypted values: + + $ recsel -t Account -s secret -p Login,Password accounts.rec + Login: foo + Password: foosecret + + Login: bar + Password: barsecret + + As mentioned above, a confidential field may be encrypted with +different passwords in different records (*note Confidential Fields::). +For example, we may have an entry in our database with data about the +account of the administrator of the online service. In that case we +might want to store the password associated with that account using a +different password than that for users. In that case the output of the +last command would have been: + + $ recsel -t Account -s secret -p Login,Password accounts.rec + Login: foo + Password: foosecret + + Login: bar + Password: barsecret + + Login: admin + Password: encrypted-TTTVVVBBBNNN + +We would need to invoke 'recsel' with the password used to encrypt the +admin entry in order to read it back unencrypted. + + +File: recutils.info, Node: Generating Reports, Next: Interoperability, Prev: Encryption, Up: Top + +14 Generating Reports +********************* + +Having a list of names and addresses, one might want to use this list to +address envelopes (say, to send annual greeting cards). Since addresses +are normally written on several lines, it would be appropriate then to +split the 'Address' field values across multiple lines as described in +*note Fields::. Suitable text can now be obtained thus: + + $ recsel -t Person -j Abode -P Name,Abode_Address acquaintances.rec + Charles Spencer + 2 Serpe Rise, + Little Worning, + SURREY + + Dirk Spencer + 2 Serpe Rise, + Little Worning, + SURREY + + Ernest Wright + 1 Wanter Rise, + Greater Inncombe, + BUCKS + + A business enterprise might want to go one step further and generate +letters (such as an advertisement or a recall notice) to customers. +Since 'recsel' merely selects records and fields from record sets, on +its own it cannot do this; so there is another command designed for this +purpose, called 'recfmt'. This command uses a "template" which defines +the general form of the desired output. A letter template might look as +follows: + {{Name}} + {{Abode_Address}} + + Dear {{Name}}, + + Re: Special offer for January + + We are delighted to be able to offer you a 95% discount on all car and + truck hire contracts between 1 January and 2 February. Please call us + to take advantage of this offer. + + Yours sincerely, + + + Karen van Rental (CEO) + ^L + + It is best to place such a template into a file, so that you can edit +it as you wish. Notice the instances of double braces enclosing a field +name, e.g. '{{Name}}'. These are called "spots" and indicate places +where the respective field's value should be placed. Let's assume this +template is in a file called 'offer.templ'. We can then pipe the output +from 'recsel' into 'recfmt' in order as follows: + + $ recsel -t Person -j Abode acquaintances.rec | recfmt -f offer.templ + Charles Spencer + 2 Serpe Rise, + Little Worning, + SURREY + + Dear Charles Spencer, + + Re: Special offer for January + + We are delighted to be able to offer you a 95% discount on all car and + . + . + . + +For each record that 'recsel' selects, one copy of 'offer.templ' will be +generated. Each spot will be replaced with the field value +corresponding to the field name in the spot. + +* Menu: + +* Templates:: Formatted output. + + +File: recutils.info, Node: Templates, Up: Generating Reports + +14.1 Templates +============== + +A recfmt template is a text string that may contain "template spots". +Those spots are substituted in the template using the information of a +given record. Any text that is not within a spot is copied literally to +the output. + + Spots are written surrounded by double curly braces, like: + + {{...}} + + Spots contain selection expressions, that are executed every time the +template is applied to a record. The spot is then replaced by the +string representation of the value returned by the expression. + + For example, consider the following template: + + Task {{Id}}: {{Summary}} + ------------------------ + {{Description}} + -- + Created at {{CreatedAt}} + +When applied to the following record: + + Id: 123 + Summary: Fix recfmt. + CreatedAt: 12 December 2010 + Description: + + The recfmt tool shall be fixed, because right + + now it is leaking 200 megabytes per processed record. + +The result is: + + Task 123: Fix recfmt. + ------------------------ + The recfmt tool shall be fixed, because right + now it is leaking 200 megabytes per processed record. + -- + Created at 12 December 2010 + + You can use any selection expression in the slots, including +conditionals and string concatenation. + + +File: recutils.info, Node: Interoperability, Next: Bash Builtins, Prev: Generating Reports, Up: Top + +15 Interoperability +******************* + +Included in the recutils package are a number of utilities to assist in +the creation of recfiles using data which already exists in other +formats, and for exporting data from recfiles so that it can be used in +other applications. + +* Menu: + +* CSV Files:: Converting recfiles to/from csv files. +* Importing MDB Files:: Importing MS Access Databases. + + +File: recutils.info, Node: CSV Files, Next: Importing MDB Files, Up: Interoperability + +15.1 CSV Files +============== + +Many applications are able to read and write files containing so-called +"comma separated values". Such files generally contain tabular data +where the columns are separated by commas and the rows by line feed +and/or carriage return characters. Although record sets are not tables, +tables can be easily emulated using records having the same fields in +the same order. For example: + + a: value + b: value + c: value + + a: value + b: value + c: value + + ... + + In several respects records are more flexible than tables: + + - Fields can appear in a different order in several records. + - There can be several fields with the same name in a single record. + - Records can differ in the number of fields. + + It is evident that records, such as those in recfiles, are a more +general structure than comma separated values. This means that when +converting from csv files to recfiles, certain decisions need to be +made. The 'rec2csv' utility (*note Invoking rec2csv::) implements an +algorithm to deal with this problem and generate a table that the user +expects. + + The algorithm works as follows: + + 1. The utility first scans the specified record set, building a list + with the names that will become the table header. + + 2. For each field, a header is added with the form: + + FIELDNAME[_N] + + where N is a number in the range '2..inf' and is the "index" of the + field in its containing record plus one. For example, consider the + following record set: + + a: a1 + b: b11 + b: b12 + c: c1 + + a: a2 + b: b2 + d: d2 + + The corresponding list of headers being: + + a b b_2 c a b d + + 3. Then duplicates are removed: + + a b b_2 c d + + 4. The resulting list of headers is then used to build the table in + the generated csv file. + + In the above example the result would be + + "a","b","b_2","c","d" + "a1","b11","b12","c1", + "a2","b2",,,"d2" + + As shown, missing fields are implemented as empty columns in the +generated csv. + + +File: recutils.info, Node: Importing MDB Files, Prev: CSV Files, Up: Interoperability + +15.2 Importing MDB Files +======================== + +Access files ("mdb files") are collections of several relations, also +known as tables. Tables can be either "user tables" storing user data, +or "system tables" storing information such as forms, queries or the +relationships between the tables. + + It is possible to get a listing with the names of all tables stored +in a mdb file by calling 'mdb2rec' in the following way: + + $ mdb2rec -l sales.mdb + Customers + Products + Orders + + So 'sales.mdb' stores user information in the tables Customers, +Products and Orders. If we want to include system tables in the listing +we can use the '-s' command line option: + + $ mdb2rec -s -l sales.mdb + MSysObjects + MSysACEs + MSysQueries + MSysRelationships + Customers + Products + Orders + + The tables with names starting with 'MSys' are system tables. The +data stored in those tables is either not relevant to the recutils user +(used by the Access program to create forms and the like) or is used in +an indirect way by 'mdb2rec' (such as the information from +MSysRelationships). + + Let's read some data from the 'mdb' file. We can get the relation of +Products in rec format: + + $ mdb2rec sales.mdb Products + %rec: Products + %type: ProductID int + %type: ProductName size 80 + %type: Discontinued bool + + ProductID: 1 + ProductName: GNU generation T-shirt + Discontinued: 0 + + ... + + A "record descriptor" is created for the record set containing the +generated records, called Products. As seen in the example, 'mdb2rec' +is able to generate type information for the fields. The list of +customers is similar: + + $ mdb2rec sales.mdb Customers + %rec: Customers + %type: CustomerID size 4 + %type: CompanyName size 80 + %type: ContactName size 60 + + CustomerID: GSOFT + CompanyName: GNU Soft + ContactName: Jose E. Marchesi + + ... + + If no table is specified in the invocation to 'mdb2rec' all the +tables in the file are processed, with the exception of the system +tables, which requires '-s' to be used: + + $ mdb2rec sales.mdb + %rec: Products + ... + + %rec: Customers + ... + + %rec: Orders + ... + + +File: recutils.info, Node: Bash Builtins, Next: Invoking the Utilities, Prev: Interoperability, Up: Top + +16 Bash Builtins +**************** + +The command-line utilities described in *note Invoking the Utilities:: +are designed to be used interactively in the shell. Together, and often +combined with the standard shell utilities, they provide a quite +complete user interface. However, the user's experience can be greatly +improved by a closer integration between the recutils and the shell. +The following sections describe several extensions for 'bash', the GNU +shell (*note (bash)Top::). These extensions make the shell "aware" of +the recutils. + + As with any bash built-in, help is available in the command line +using the 'help' command. For example: + + $ help readrec + + If you installed recutils using a binary package in a GNU/Linux +distribution, odds are that the built-in commands described in this +chapter are already available to you. Otherwise (you get a "command not +found" or similar error) you may have to register the built-in commands +with your bash. This is very easy using the 'enable' bash command. The +registering command for readrec would be: + + $ enable -f readrec.so readrec + + Note however that some systems require the full path to 'readrec.so' +in order for this command to work. + +* Menu: + +* readrec:: Exporting the contents of records to the shell. + + +File: recutils.info, Node: readrec, Up: Bash Builtins + +16.1 readrec +============ + +The bash built-in 'read', when invoked with no options, consumes one +line from standard input and makes it available in the predefined +'REPLY' environment variable, or any other variable whose name is passed +as an argument. This allows processing data structured in lines in a +quite natural way. For example, the following program prints the third +field of each line, with fields separated by commas, until standard +input is exhausted: + + # Process one line at a time. + while read + do + echo "The third field is " `echo $REPLY | cut -d, -f 2` + done + + However, 'read' is not very useful when it comes to processing +recutils records in the shell. Even though it is possible to customize +the character used by 'read' to split the input into records, we would +need to ignore the empty records in the likely case of more than one +empty line separating records. Also, we would need to use 'recsel' to +access to the record fields. Too complicated! + + Thus, the 'readrec' bash built-in is similar to 'read' with the +difference that it reads records instead of lines. It also "exports" +the contents of the record to the user as the values of several +environment variables: + + - 'REPLY_REC' is set to the record read from standard input. + - A set of variables 'FIELD' named after each field found in the + record are set to the (decoded) value of the fields found in the + input record. When several fields with the same name are found in + the input record then a bash array is created. + + Consider for example the following simple database containing +contacts information: + + Name: Mr. Foo + Email: foo@bar.com + Email: bar@baz.net + Checked: no + + Name: Mr. Bar + Email: bar@foo.com + Telephone: 999666000 + Checked: yes + +We would like to write some shell code to send an email to all the +contacts, but only if the contact has not been checked before, i.e. the +'Checked' field contains 'no'. The following code snippet would do the +job nicely using 'readrec': + + recsel contacts.rec | while readrec + do + if [ $Checked = "no" ] + then + mail -s "You are being checked." ${Email[0]} < email.txt + recset -e "Email = '$Email'" -f Checked -S yes contacts.rec + sleep 1 + fi + done + +Note the usage of the bash array when accessing the primary email +address of each contact. Note also that we update each contact to +figure as "checked", using 'recset', so she won't get pestered again the +next time the script is run. + + +File: recutils.info, Node: Invoking the Utilities, Next: Regular Expressions, Prev: Bash Builtins, Up: Top + +17 Invoking the Utilities +************************* + +Certain options are available in all of these programs. Rather than +writing identical descriptions for each of the programs, they are listed +here. + +'--version' + Print the version number, then exit successfully. +'--help' + Print a help message, then exit successfully. +'--' + Delimit the option list. Later arguments, if any, are treated as + operands even if they begin with '-'. For example, 'recsel -- -p' + reads from the file named '-p'. + +* Menu: + +* Invoking recinf:: Printing information about rec files. +* Invoking recsel:: Selecting records. +* Invoking recins:: Inserting records. +* Invoking recdel:: Deleting records. +* Invoking recset:: Managing fields. +* Invoking recfix:: Fixing broken rec files, and diagnostics. +* Invoking recfmt:: Formatting records using templates. +* Invoking csv2rec:: Converting csv data into rec data. +* Invoking rec2csv:: Converting rec data into csv data. +* Invoking mdb2rec:: Converting mdb files into rec files. + + +File: recutils.info, Node: Invoking recinf, Next: Invoking recsel, Up: Invoking the Utilities + +17.1 Invoking recinf +==================== + +'recinf' reads the given rec files (or the data from standard input if +no file is specified) and prints a summary of the record types contained +in the input. + + Synopsis: + + recinf [OPTION]... [FILE]... + + The default behavior is to emit a line per record type in the input +containing its name and the number of records of that type: + + $ recinf hackers.rec tasks.rec + 25 Hacker + 102 Task + + If the input contains anonymous records, i.e. records that are before +the first record descriptor, the corresponding output line won't have a +type name: + + $ recinf data.rec + 10 + + In addition to the common options described earlier the program +accepts the following options. + +'-t TYPE' +'--type=TYPE' + Select records of a given type only. +'-d' +'--descriptor' + Print all the record descriptors present in the file. +'-n' +'--names-only' + Output just the names of the record types found in the input. If + the input contains only anonymous records then output nothing. +'-S' +'--print-sexps' + Print the data in the form of sexps (Lisp expressions) instead of + rec format. This option can be useful for, of course, Lisp + programs. + + +File: recutils.info, Node: Invoking recsel, Next: Invoking recins, Prev: Invoking recinf, Up: Invoking the Utilities + +17.2 Invoking recsel +==================== + +'recsel' reads the given rec files (or the data in the standard input if +no file is specified) and prints out records (or part of records) based +upon some criteria specified by the user. + + 'recsel' searches rec files for records satisfying certain criteria. +Synopsis: + + recsel [OPTION]... \ + [-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM] \ + [-c | (-p|-P|-R) FIELD_EXPR] \ + [FILE]... + + If no FILE is specified then the command acts like a filter, getting +the data from standard input and writing the result to standard output. + + In addition to the common options described earlier (*note Common +Options::) the program accepts the following options. + +The following "global options" are available. + +'-i' +'--case-insensitive' + Make string matching case-insensitive in selection expressions. +'-C' +'--collapse' + Do not section the result in records with newlines. +'-d' +'--include-descriptors' + Print record descriptors along with the matched records. +'-s SECRET' +'--password=SECRET' + Try to decrypt confidential fields with the given password. +'-S' +'--sort=FIELDS' + Sort the output by the comma-separated list of field names, FIELDS. + This option takes precedence over any sorting criteria specified in + the corresponding record descriptor with '%sort'. +'-U' +'--uniq' + Remove duplicated fields in the output records. Fields are + duplicated if they have the same field name and the same value. +'-G' +'--group-by=FIELDS' + Group the output records by the provided comma-separated list of + FIELDS. Grouping is performed before sorting. + + The "selection options" are used to select a subset of the records in +the input. + +'-n INDEXES' +'--number=INDEXES' + Match the records occupying the given positions in its record set. + INDEXES must be a comma-separated list of numbers or ranges, with + ranges being two numbers separated with dashes. For example, the + following list denotes the first, the third, the fourth and all + records up to the tenth: '-n 0,2,4-9'. +'-e EXPR' +'--expression=EXPR' + A record selection expression (*note Selection Expressions::). + Only the records matched by the expression will be taken into + account to compute the output. +'-q STR' +'--quick=STR' + Select records having a field whose value contains the substring + STR. +'-m NUM' +'--random=NUM' + Select NUM random records. If NUM is zero then select all the + records. +'-t TYPE' +'--type=TYPE' + Select records of a given type only. +'-j FIELD' +'--field=FIELD' + Perform an inner join of the record set selected by '-t' and the + record set for which FIELD is a foreign key. FIELD must be a field + declared with type 'rec' and thus must be a foreign key. If a join + is performed then any selection expression and field expression + operate on the joined record sets. + + The "output options" are used to determine what information about the +selected records to display to the user, and how to display it. + +'-p NAME_LIST' +'--print=NAME_LIST' + List of fields to print for each record. NAME_LIST is a list of + field names separated by commas. For example: + -p Name,Email + + means to print the Name and the Email of every matching record, + both the field names and values. + + If this option is not specified then all the fields of the matching + records are printed to standard output. +'-P NAME_LIST' +'--print-values=NAME_LIST' + Same as '-p', but print only the values of the selected fields. +'-R NAME_LIST' +'--print-row=NAME_LIST' + Same as '-P', but print the values separated by single spaces + instead of newlines. +'-c' +'--count' + If this option is specified then 'recsel' will print the number of + matching records instead of the records themselves. This option is + incompatible with '-p', '-P' and '-R'. + + This "special option" is available to ease the communication between +the recutils and other programs, namely Lisp interpreters. This option +is not intended to be used by human operators. + +'--print-sexps' + Print the data using sexps instead of rec format. + + +File: recutils.info, Node: Invoking recins, Next: Invoking recdel, Prev: Invoking recsel, Up: Invoking the Utilities + +17.3 Invoking recins +==================== + +'recins' adds new records to a rec file or to rec data read from +standard input. Synopsis: + + recins [OPTION]... [-t TYPE] \ + [-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM] \ + [( -f STR -v STR]|[-r RECDATA )]... \ + [FILE] + + The new record to be inserted by the command is constructed by using +pairs of '-f' and '-v' options, or '-r'. Each pair defines a field. +The order of the parameters is significant. + + If no FILE is specified then the command acts like a filter, getting +the data from standard input and writing the result to standard output. + + If the specified FILE does not exist, it is created. + + In addition to the common options described earlier (*note Common +Options::) the program accepts the following options. + +'-t' +'--type=EXPR' + The type of the new record. If there is a record set in the input + data matching this type then the new record is added there. + Otherwise a new record set is created. If this parameter is not + specified then the new record is anonymous. +'-f' +'--field=NAME' + Declares the name of a field. This option must be followed by a + '-v'. +'-v' +'--value=VALUE' + The value of the field being defined. +'-r' +'--record=VALUE' + Add the fields of the record in VALUE. This option can be + intermixed with '-f ... -v' pairs. +'-s' +'--password' + Encrypt confidential fields with the given password. +'--no-external' + Don't use external record descriptors. +'--verbose' + Be verbose when reporting integrity problems. +'--no-auto' + Don't generate "auto" fields. *Note Auto-Generated Fields::. + + Record selection arguments are supported too. If they are used then +'recins' uses "replacement mode": instead of appending the new record, +matched records are replaced by copies of the provided record. The +selection arguments are the same as in 'recsel': + +'-n INDEXES' +'--number=INDEXES' + Match the records occupying the given positions in its record set. + INDEXES must be a comma-separated list of numbers or ranges, the + ranges being two numbers separated with dashes. For example, the + following list denotes the first, the third, the fourth and all + records up to the tenth: '-n 0,2,4-9'. +'-e RECORD_EXPR' +'--expression=EXPR' + A record selection expression (*note Selection Expressions::). + Matching records will get replaced. +'-q STR' +'--quick=STR' + Remove records having a field whose value contains the substring + STR. +'-m NUM' +'--random=NUM' + Select NUM random records. If NUM is zero then all records are + selected, i.e. no replace mode is activated. +'-i' +'--case-insensitive' + Make strings case-insensitive in selection expressions. +'--force' + Insert the requested record even in potentially dangerous + situations, such as when the data integrity of the database is + compromised. + + +File: recutils.info, Node: Invoking recdel, Next: Invoking recset, Prev: Invoking recins, Up: Invoking the Utilities + +17.4 Invoking recdel +==================== + +'recdel' removes records from a rec file, or from rec data read from +standard input. Synopsis: + + recdel [OPTIONS]... [-t TYPE] \ + [-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM] \ + [FILE] + + If no FILE is specified then the command acts like a filter, getting +the data from standard input and writing the result to standard output. + + In addition to the common options described earlier (*note Common +Options::) the program accepts the following options. + +'-t' +'--type=EXPR' + Remove records of the given type. If this parameter is not + specified then records of any type will be removed. +'-n INDEXES' +'--number=INDEXES' + Match the records occupying the given positions in its record set. + INDEXES must be a comma-separated list of numbers or ranges, the + ranges being two numbers separated with dashes. For example, the + following list denotes the first, the third, the fourth and all + records up to the tenth: '-n 0,2,4-9'. +'-e RECORD_EXPR' +'--expression=EXPR' + A record selection expression (*note Selection Expressions::). + Only the records matched by the expression will be removed from the + file. +'-q STR' +'--quick=STR' + Remove records having a field whose value contains the substring + STR. +'-m NUM' +'--random=NUM' + Remove NUM random records. If NUM is zero then remove all the + records. +'-c' +'--comment' + Comment the matching records out instead of removing them. +'--force' + Delete even in potentially dangerous situations, such as a request + to delete all the records of some type. +'--no-external' + Don't use external record descriptors. +'-i' +'--case-insensitive' + Make strings case-insensitive in selection expressions. +'--verbose' + Be verbose when reporting integrity problems. + + +File: recutils.info, Node: Invoking recset, Next: Invoking recfix, Prev: Invoking recdel, Up: Invoking the Utilities + +17.5 Invoking recset +==================== + +'recset' manipulates the fields of records in a rec file, or rec data +read from standard input. Synopsis: + + recset [OPTION]... [FILE]... + + If no FILE is specified then the command acts like a filter, getting +the data from standard input and writing the result to standard output. + + In addition to the common options described earlier (*note Common +Options::) the program accepts the following options. + + Record selection options: + +'-i' +'--case-insensitive' + Make strings case-insensitive in selection expressions. +'-t' +'--type=EXPR' + Operate on the records of the given type. If this parameter is not + specified then records of any type will be affected. +'-n INDEXES' +'--number=INDEXES' + Operate on the records occupying the given positions in its record + set. INDEXES must be a comma-separated list of numbers or ranges, + the ranges being two numbers separated with dashes. For example, + the following list denotes the first, the third, the fourth and all + records up to the tenth: '-n 0,2,4-9'. +'-e EXPR' +'--expression=EXPR' + A record selection expression (*note Selection Expressions::). + Only the records matched by the expression will be processed. +'-q STR' +'--quick=STR' + Operate on records having a field whose value contains the + substring STR. +'-m NUM' +'--random=NUM' + Operate on NUM random records. If NUM is zero then operate on all + the records. + + Field selection options: + +'-f' +'--fields=FEX' + Field selection expression (*note Field Expressions::) to select + the fields to operate. + + Actions: + +'-s' +'--set=VALUE' + Set the value of the selected fields to VALUE. +'-a' +'--add=VALUE' + Add a new field to the selected record with value VALUE. +'-S' +'--set-add=VALUE' + Set the value of the selected fields to VALUE. If some of the + fields don't exist in a record, append it with the specified value. +'-r' +'--rename=VALUE' + Rename a field; VALUE must be a valid field name. The field + expression associated with this action must contain a single field + name and an optional subscript. If an entire record set is + selected then the field is renamed in the record descriptor as + well. +'-d' +'--delete' + Delete the selected fields in the selected records. +'-c' +'--comment' + Comment out the selected fields in the selected records. +'--no-external' + Don't use external record descriptors. +'--verbose' + Be verbose when reporting integrity problems. +'--force' + Perform the requested operation even in potentially dangerous + situations, or when the integrity of the data stored in the file is + affected. + + +File: recutils.info, Node: Invoking recfix, Next: Invoking recfmt, Prev: Invoking recset, Up: Invoking the Utilities + +17.6 Invoking recfix +==================== + +'recfix' checks and fixes rec files. Synopsis: + + recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE] + + If no FILE is specified then the command acts like a filter, getting +the data from standard input and writing the result to standard output. + + In addition to the common options described earlier (*note Common +Options::) the program accepts the following global options. + +'--no-external' + Don't use external record descriptors. + + The effect of running 'recfix' depends on the operation it performs. +The operation mode is selected by using one of the following options. + +'--check' + Check the integrity of the database contained in the file, printing + diagnostics messages in case something is not right. This is the + default operation. +'--sort' + Perform a physical sort of all the records contained in the file + (or standard input) after checking for its integrity. The sorting + criteria are provided by the '%sort' special field, if any. If + there is an integrity failure the sorting is not performed. + + This is a destructive operation. +'--decrypt' +'--encrypt' + Decrypt (encrypt) all the (non-)encrypted fields in the database + which are marked as confidential. This operation requires a + password. If no password is specified with '-s' and the program is + run in a terminal, a prompt is given to get the password from the + user. + + If encryption is performed on a file having encrypted fields, the + operation will fail unless '--force' is used. + + These are destructive operations. +'--auto' + Insert auto-generated fields as appropriate in the records which + are missing them. + + This is a destructive operation. + + As described above, some operations make use of these additional +options: + +'-s SECRET' +'--password=SECRET' + Password used to encrypt or decrypt fields. +'--force' + Force potentially dangerous operations. + + +File: recutils.info, Node: Invoking recfmt, Next: Invoking csv2rec, Prev: Invoking recfix, Up: Invoking the Utilities + +17.7 Invoking recfmt +==================== + +'recfmt' formats records using templates. Synopsis: + + recfmt [OPTION]... [TEMPLATE] + + This program always works as a filter, getting the data from the +standard input and writing the result to standard output. + + In addition to the common options described earlier (*note Common +Options::) the program accepts the following options. + +'-f' +'--filename=PATH' + Read the template from the file in PATH instead of the command + line. + + +File: recutils.info, Node: Invoking csv2rec, Next: Invoking rec2csv, Prev: Invoking recfmt, Up: Invoking the Utilities + +17.8 Invoking csv2rec +===================== + +'csv2rec' reads the given comma-separated-values file (or the data from +standard input if no file is specified) and prints out the converted rec +data, if possible. Synopsis: + + csv2rec [OPTION]... [CSV_FILE] + + In addition to the common options described earlier (*note Common +Options::) the program accepts the following options. + +'-t TYPE' +'--type=TYPE' + Type of the converted records. If no type is specified then no + type is used. +'-s' +'--strict' + Be strict parsing the csv file. +'-e' +'--omit-empty' + Omit empty fields. + + +File: recutils.info, Node: Invoking rec2csv, Next: Invoking mdb2rec, Prev: Invoking csv2rec, Up: Invoking the Utilities + +17.9 Invoking rec2csv +===================== + +'rec2csv' reads the given rec files (or the data in the standard input +if no file is specified) and prints out the converted +comma-separated-values. Synopsis: + + rec2csv [OPTION]... [REC_FILE]... + + The rec data can be read from files specified in the command line, or +from standard input. The program writes the converted data to standard +output. + + In addition to the common options described earlier (*note Common +Options::) the program accepts the following options. + +'-t TYPE' +'--type=TYPE' + Type of the records to convert. If no type is specified then the + default records (with no name) are converted. +'-S' +'--sort=FIELDS' + Sort the output by the comma-separated list of field names FIELDS. + This option has precedence to whatever sorting criteria are + specified in the corresponding record descriptor with '%sort'. +'-d' +'--delim=CHAR' + Use CHAR as the delimiter character separating fields in the + output. Defaults to ','. + + +File: recutils.info, Node: Invoking mdb2rec, Prev: Invoking rec2csv, Up: Invoking the Utilities + +17.10 Invoking mdb2rec +====================== + +'mdb2rec' reads the given mdb file and prints out the converted rec +data, if possible. Synopsis: + + mdb2rec [OPTION]... MDB_FILE [TABLE] + + All the tables contained in the mdb file are exported unless a table +is specified in the command line. + + In addition to the common options described earlier (*note Common +Options::) the program accepts the following options. + +'-s' +'--system-tables' + Include system tables in the output. +'-l' +'--list-tables' + Dump a list of the table names contained in the mdb file, one per + line. +'-e' +'--keep-empty-fields' + Don't prune empty fields in the rec output. + + +File: recutils.info, Node: Regular Expressions, Next: Date input formats, Prev: Invoking the Utilities, Up: Top + +18 Regular Expressions +********************** + +The character '.' matches any single character except the null +character. + +'+' + match one or more occurrences of the previous atom or regexp. +'?' + match zero or one occurrences of the previous atom or regexp. +'\+' + matches a '+' +'\?' + matches a '?'. + + Bracket expressions are used to match ranges of characters. Bracket +expressions where the range is backward, for example '[z-a]', are +invalid. Within square brackets, '\' is taken literally. Character +classes are supported; for example '[[:digit:]]' matches a single +decimal digit. + + GNU extensions are supported: +'\w' + matches a character within a word +'\W' + matches a character which is not within a word +'\<' + matches the beginning of a word +'\>' + matches the end of a word +'\b' + matches a word boundary +'\B' + matches characters which are not a word boundary +'\`' + matches the beginning of the whole input +'\'' + matches the end of the whole input + + Grouping is performed with parentheses '()'. An unmatched ')' +matches just itself. A backslash followed by a digit acts as a +back-reference and matches the same thing as the previous grouped +expression indicated by that number. For example, '\2' matches the +second group expression. The order of group expressions is determined +by the position of their opening parenthesis '('. + + The alternation operator is '|'. + + The characters '^' and '$' always represent the beginning and end of +a string respectively, except within square brackets. Within brackets, +an initial '^' inverts the character class being matched. + + '*', '+' and '?' are special at any point in a regular expression +except the following places, where they are not allowed: + 1. At the beginning of a regular expression + 2. After an open-group, '(' + 3. After the alternation operator, '|' + + Intervals are specified by '{' and '}'. Invalid intervals such as +'a{1z' are not accepted. + + The longest possible match is returned; this applies to the regular +expression as a whole and (subject to this constraint) to +sub-expressions within groups. + + +File: recutils.info, Node: Date input formats, Next: GNU Free Documentation License, Prev: Regular Expressions, Up: Top + +19 Date input formats +********************* + +First, a quote: + + Our units of temporal measurement, from seconds on up to months, + are so complicated, asymmetrical and disjunctive so as to make + coherent mental reckoning in time all but impossible. Indeed, had + some tyrannical god contrived to enslave our minds to time, to make + it all but impossible for us to escape subjection to sodden + routines and unpleasant surprises, he could hardly have done better + than handing down our present system. It is like a set of + trapezoidal building blocks, with no vertical or horizontal + surfaces, like a language in which the simplest thought demands + ornate constructions, useless particles and lengthy + circumlocutions. Unlike the more successful patterns of language + and science, which enable us to face experience boldly or at least + level-headedly, our system of temporal calculation silently and + persistently encourages our terror of time. + + ... It is as though architects had to measure length in feet, width + in meters and height in ells; as though basic instruction manuals + demanded a knowledge of five different languages. It is no wonder + then that we often look into our own immediate past or future, last + Tuesday or a week from Sunday, with feelings of helpless confusion. + ... + + --Robert Grudin, 'Time and the Art of Living'. + + This section describes the textual date representations that GNU +programs accept. These are the strings you, as a user, can supply as +arguments to the various programs. The C interface (via the +'parse_datetime' function) is not described here. + +* Menu: + +* General date syntax:: Common rules. +* Calendar date items:: 19 Dec 1994. +* Time of day items:: 9:20pm. +* Time zone items:: EST, PDT, UTC, ... +* Combined date and time of day items:: 1972-09-24T20:02:00,000000-0500. +* Day of week items:: Monday and others. +* Relative items in date strings:: next tuesday, 2 years ago. +* Pure numbers in date strings:: 19931219, 1440. +* Seconds since the Epoch:: @1078100502. +* Specifying time zone rules:: TZ="America/New_York", TZ="UTC0". +* Authors of parse_datetime:: Bellovin, Eggert, Salz, Berets, et al. + + +File: recutils.info, Node: General date syntax, Next: Calendar date items, Up: Date input formats + +19.1 General date syntax +======================== + +A "date" is a string, possibly empty, containing many items separated by +whitespace. The whitespace may be omitted when no ambiguity arises. +The empty string means the beginning of today (i.e., midnight). Order +of the items is immaterial. A date string may contain many flavors of +items: + + * calendar date items + * time of day items + * time zone items + * combined date and time of day items + * day of the week items + * relative items + * pure numbers. + +We describe each of these item types in turn, below. + + A few ordinal numbers may be written out in words in some contexts. +This is most useful for specifying day of the week items or relative +items (see below). Among the most commonly used ordinal numbers, the +word 'last' stands for -1, 'this' stands for 0, and 'first' and 'next' +both stand for 1. Because the word 'second' stands for the unit of time +there is no way to write the ordinal number 2, but for convenience +'third' stands for 3, 'fourth' for 4, 'fifth' for 5, 'sixth' for 6, +'seventh' for 7, 'eighth' for 8, 'ninth' for 9, 'tenth' for 10, +'eleventh' for 11 and 'twelfth' for 12. + + When a month is written this way, it is still considered to be +written numerically, instead of being "spelled in full"; this changes +the allowed strings. + + In the current implementation, only English is supported for words +and abbreviations like 'AM', 'DST', 'EST', 'first', 'January', 'Sunday', +'tomorrow', and 'year'. + + The output of the 'date' command is not always acceptable as a date +string, not only because of the language problem, but also because there +is no standard meaning for time zone items like 'IST'. When using +'date' to generate a date string intended to be parsed later, specify a +date format that is independent of language and that does not use time +zone items other than 'UTC' and 'Z'. Here are some ways to do this: + + $ LC_ALL=C TZ=UTC0 date + Mon Mar 1 00:21:42 UTC 2004 + $ TZ=UTC0 date +'%Y-%m-%d %H:%M:%SZ' + 2004-03-01 00:21:42Z + $ date --rfc-3339=ns # --rfc-3339 is a GNU extension. + 2004-02-29 16:21:42.692722128-08:00 + $ date --rfc-2822 # a GNU extension + Sun, 29 Feb 2004 16:21:42 -0800 + $ date +'%Y-%m-%d %H:%M:%S %z' # %z is a GNU extension. + 2004-02-29 16:21:42 -0800 + $ date +'@%s.%N' # %s and %N are GNU extensions. + @1078100502.692722128 + + Alphabetic case is completely ignored in dates. Comments may be +introduced between round parentheses, as long as included parentheses +are properly nested. Hyphens not followed by a digit are currently +ignored. Leading zeros on numbers are ignored. + + Invalid dates like '2005-02-29' or times like '24:00' are rejected. +In the typical case of a host that does not support leap seconds, a time +like '23:59:60' is rejected even if it corresponds to a valid leap +second. + + +File: recutils.info, Node: Calendar date items, Next: Time of day items, Prev: General date syntax, Up: Date input formats + +19.2 Calendar date items +======================== + +A "calendar date item" specifies a day of the year. It is specified +differently, depending on whether the month is specified numerically or +literally. All these strings specify the same calendar date: + + 1972-09-24 # ISO 8601. + 72-9-24 # Assume 19xx for 69 through 99, + # 20xx for 00 through 68. + 72-09-24 # Leading zeros are ignored. + 9/24/72 # Common U.S. writing. + 24 September 1972 + 24 Sept 72 # September has a special abbreviation. + 24 Sep 72 # Three-letter abbreviations always allowed. + Sep 24, 1972 + 24-sep-72 + 24sep72 + + The year can also be omitted. In this case, the last specified year +is used, or the current year if none. For example: + + 9/24 + sep 24 + + Here are the rules. + + For numeric months, the ISO 8601 format 'YEAR-MONTH-DAY' is allowed, +where YEAR is any positive number, MONTH is a number between 01 and 12, +and DAY is a number between 01 and 31. A leading zero must be present +if a number is less than ten. If YEAR is 68 or smaller, then 2000 is +added to it; otherwise, if YEAR is less than 100, then 1900 is added to +it. The construct 'MONTH/DAY/YEAR', popular in the United States, is +accepted. Also 'MONTH/DAY', omitting the year. + + Literal months may be spelled out in full: 'January', 'February', +'March', 'April', 'May', 'June', 'July', 'August', 'September', +'October', 'November' or 'December'. Literal months may be abbreviated +to their first three letters, possibly followed by an abbreviating dot. +It is also permitted to write 'Sept' instead of 'September'. + + When months are written literally, the calendar date may be given as +any of the following: + + DAY MONTH YEAR + DAY MONTH + MONTH DAY YEAR + DAY-MONTH-YEAR + + Or, omitting the year: + + MONTH DAY + + +File: recutils.info, Node: Time of day items, Next: Time zone items, Prev: Calendar date items, Up: Date input formats + +19.3 Time of day items +====================== + +A "time of day item" in date strings specifies the time on a given day. +Here are some examples, all of which represent the same time: + + 20:02:00.000000 + 20:02 + 8:02pm + 20:02-0500 # In EST (U.S. Eastern Standard Time). + + More generally, the time of day may be given as 'HOUR:MINUTE:SECOND', +where HOUR is a number between 0 and 23, MINUTE is a number between 0 +and 59, and SECOND is a number between 0 and 59 possibly followed by '.' +or ',' and a fraction containing one or more digits. Alternatively, +':SECOND' can be omitted, in which case it is taken to be zero. On the +rare hosts that support leap seconds, SECOND may be 60. + + If the time is followed by 'am' or 'pm' (or 'a.m.' or 'p.m.'), HOUR +is restricted to run from 1 to 12, and ':MINUTE' may be omitted (taken +to be zero). 'am' indicates the first half of the day, 'pm' indicates +the second half of the day. In this notation, 12 is the predecessor of +1: midnight is '12am' while noon is '12pm'. (This is the zero-oriented +interpretation of '12am' and '12pm', as opposed to the old tradition +derived from Latin which uses '12m' for noon and '12pm' for midnight.) + + The time may alternatively be followed by a time zone correction, +expressed as 'SHHMM', where S is '+' or '-', HH is a number of zone +hours and MM is a number of zone minutes. The zone minutes term, MM, +may be omitted, in which case the one- or two-digit correction is +interpreted as a number of hours. You can also separate HH from MM with +a colon. When a time zone correction is given this way, it forces +interpretation of the time relative to Coordinated Universal Time (UTC), +overriding any previous specification for the time zone or the local +time zone. For example, '+0530' and '+05:30' both stand for the time +zone 5.5 hours ahead of UTC (e.g., India). This is the best way to +specify a time zone correction by fractional parts of an hour. The +maximum zone correction is 24 hours. + + Either 'am'/'pm' or a time zone correction may be specified, but not +both. + + +File: recutils.info, Node: Time zone items, Next: Combined date and time of day items, Prev: Time of day items, Up: Date input formats + +19.4 Time zone items +==================== + +A "time zone item" specifies an international time zone, indicated by a +small set of letters, e.g., 'UTC' or 'Z' for Coordinated Universal Time. +Any included periods are ignored. By following a non-daylight-saving +time zone by the string 'DST' in a separate word (that is, separated by +some white space), the corresponding daylight saving time zone may be +specified. Alternatively, a non-daylight-saving time zone can be +followed by a time zone correction, to add the two values. This is +normally done only for 'UTC'; for example, 'UTC+05:30' is equivalent to +'+05:30'. + + Time zone items other than 'UTC' and 'Z' are obsolescent and are not +recommended, because they are ambiguous; for example, 'EST' has a +different meaning in Australia than in the United States. Instead, it's +better to use unambiguous numeric time zone corrections like '-0500', as +described in the previous section. + + If neither a time zone item nor a time zone correction is supplied, +timestamps are interpreted using the rules of the default time zone +(*note Specifying time zone rules::). + + +File: recutils.info, Node: Combined date and time of day items, Next: Day of week items, Prev: Time zone items, Up: Date input formats + +19.5 Combined date and time of day items +======================================== + +The ISO 8601 date and time of day extended format consists of an ISO +8601 date, a 'T' character separator, and an ISO 8601 time of day. This +format is also recognized if the 'T' is replaced by a space. + + In this format, the time of day should use 24-hour notation. +Fractional seconds are allowed, with either comma or period preceding +the fraction. ISO 8601 fractional minutes and hours are not supported. +Typically, hosts support nanosecond timestamp resolution; excess +precision is silently discarded. + + Here are some examples: + + 2012-09-24T20:02:00.052-05:00 + 2012-12-31T23:59:59,999999999+11:00 + 1970-01-01 00:00Z + + +File: recutils.info, Node: Day of week items, Next: Relative items in date strings, Prev: Combined date and time of day items, Up: Date input formats + +19.6 Day of week items +====================== + +The explicit mention of a day of the week will forward the date (only if +necessary) to reach that day of the week in the future. + + Days of the week may be spelled out in full: 'Sunday', 'Monday', +'Tuesday', 'Wednesday', 'Thursday', 'Friday' or 'Saturday'. Days may be +abbreviated to their first three letters, optionally followed by a +period. The special abbreviations 'Tues' for 'Tuesday', 'Wednes' for +'Wednesday' and 'Thur' or 'Thurs' for 'Thursday' are also allowed. + + A number may precede a day of the week item to move forward +supplementary weeks. It is best used in expression like 'third monday'. +In this context, 'last DAY' or 'next DAY' is also acceptable; they move +one week before or after the day that DAY by itself would represent. + + A comma following a day of the week item is ignored. + + +File: recutils.info, Node: Relative items in date strings, Next: Pure numbers in date strings, Prev: Day of week items, Up: Date input formats + +19.7 Relative items in date strings +=================================== + +"Relative items" adjust a date (or the current date if none) forward or +backward. The effects of relative items accumulate. Here are some +examples: + + 1 year + 1 year ago + 3 years + 2 days + + The unit of time displacement may be selected by the string 'year' or +'month' for moving by whole years or months. These are fuzzy units, as +years and months are not all of equal duration. More precise units are +'fortnight' which is worth 14 days, 'week' worth 7 days, 'day' worth 24 +hours, 'hour' worth 60 minutes, 'minute' or 'min' worth 60 seconds, and +'second' or 'sec' worth one second. An 's' suffix on these units is +accepted and ignored. + + The unit of time may be preceded by a multiplier, given as an +optionally signed number. Unsigned numbers are taken as positively +signed. No number at all implies 1 for a multiplier. Following a +relative item by the string 'ago' is equivalent to preceding the unit by +a multiplier with value -1. + + The string 'tomorrow' is worth one day in the future (equivalent to +'day'), the string 'yesterday' is worth one day in the past (equivalent +to 'day ago'). + + The strings 'now' or 'today' are relative items corresponding to +zero-valued time displacement, these strings come from the fact a +zero-valued time displacement represents the current time when not +otherwise changed by previous items. They may be used to stress other +items, like in '12:00 today'. The string 'this' also has the meaning of +a zero-valued time displacement, but is preferred in date strings like +'this thursday'. + + When a relative item causes the resulting date to cross a boundary +where the clocks were adjusted, typically for daylight saving time, the +resulting date and time are adjusted accordingly. + + The fuzz in units can cause problems with relative items. For +example, '2003-07-31 -1 month' might evaluate to 2003-07-01, because +2003-06-31 is an invalid date. To determine the previous month more +reliably, you can ask for the month before the 15th of the current +month. For example: + + $ date -R + Thu, 31 Jul 2003 13:02:39 -0700 + $ date --date='-1 month' +'Last month was %B?' + Last month was July? + $ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!' + Last month was June! + + Also, take care when manipulating dates around clock changes such as +daylight saving leaps. In a few cases these have added or subtracted as +much as 24 hours from the clock, so it is often wise to adopt universal +time by setting the 'TZ' environment variable to 'UTC0' before embarking +on calendrical calculations. + + +File: recutils.info, Node: Pure numbers in date strings, Next: Seconds since the Epoch, Prev: Relative items in date strings, Up: Date input formats + +19.8 Pure numbers in date strings +================================= + +The precise interpretation of a pure decimal number depends on the +context in the date string. + + If the decimal number is of the form YYYYMMDD and no other calendar +date item (*note Calendar date items::) appears before it in the date +string, then YYYY is read as the year, MM as the month number and DD as +the day of the month, for the specified calendar date. + + If the decimal number is of the form HHMM and no other time of day +item appears before it in the date string, then HH is read as the hour +of the day and MM as the minute of the hour, for the specified time of +day. MM can also be omitted. + + If both a calendar date and a time of day appear to the left of a +number in the date string, but no relative item, then the number +overrides the year. + + +File: recutils.info, Node: Seconds since the Epoch, Next: Specifying time zone rules, Prev: Pure numbers in date strings, Up: Date input formats + +19.9 Seconds since the Epoch +============================ + +If you precede a number with '@', it represents an internal timestamp as +a count of seconds. The number can contain an internal decimal point +(either '.' or ','); any excess precision not supported by the internal +representation is truncated toward minus infinity. Such a number cannot +be combined with any other date item, as it specifies a complete +timestamp. + + Internally, computer times are represented as a count of seconds +since an epoch--a well-defined point of time. On GNU and POSIX systems, +the epoch is 1970-01-01 00:00:00 UTC, so '@0' represents this time, '@1' +represents 1970-01-01 00:00:01 UTC, and so forth. GNU and most other +POSIX-compliant systems support such times as an extension to POSIX, +using negative counts, so that '@-1' represents 1969-12-31 23:59:59 UTC. + + Traditional Unix systems count seconds with 32-bit two's-complement +integers and can represent times from 1901-12-13 20:45:52 through +2038-01-19 03:14:07 UTC. More modern systems use 64-bit counts of +seconds with nanosecond subcounts, and can represent all the times in +the known lifetime of the universe to a resolution of 1 nanosecond. + + On most hosts, these counts ignore the presence of leap seconds. For +example, on most hosts '@915148799' represents 1998-12-31 23:59:59 UTC, +'@915148800' represents 1999-01-01 00:00:00 UTC, and there is no way to +represent the intervening leap second 1998-12-31 23:59:60 UTC. + + +File: recutils.info, Node: Specifying time zone rules, Next: Authors of parse_datetime, Prev: Seconds since the Epoch, Up: Date input formats + +19.10 Specifying time zone rules +================================ + +Normally, dates are interpreted using the rules of the current time +zone, which in turn are specified by the 'TZ' environment variable, or +by a system default if 'TZ' is not set. To specify a different set of +default time zone rules that apply just to one date, start the date with +a string of the form 'TZ="RULE"'. The two quote characters ('"') must +be present in the date, and any quotes or backslashes within RULE must +be escaped by a backslash. + + For example, with the GNU 'date' command you can answer the question +"What time is it in New York when a Paris clock shows 6:30am on October +31, 2004?" by using a date beginning with 'TZ="Europe/Paris"' as shown +in the following shell transcript: + + $ export TZ="America/New_York" + $ date --date='TZ="Europe/Paris" 2004-10-31 06:30' + Sun Oct 31 01:30:00 EDT 2004 + + In this example, the '--date' operand begins with its own 'TZ' +setting, so the rest of that operand is processed according to +'Europe/Paris' rules, treating the string '2004-10-31 06:30' as if it +were in Paris. However, since the output of the 'date' command is +processed according to the overall time zone rules, it uses New York +time. (Paris was normally six hours ahead of New York in 2004, but this +example refers to a brief Halloween period when the gap was five hours.) + + A 'TZ' value is a rule that typically names a location in the 'tz' +database (http://www.twinsun.com/tz/tz-link.htm). A recent catalog of +location names appears in the TWiki Date and Time Gateway +(http://twiki.org/cgi-bin/xtra/tzdate). A few non-GNU hosts require a +colon before a location name in a 'TZ' setting, e.g., +'TZ=":America/New_York"'. + + The 'tz' database includes a wide variety of locations ranging from +'Arctic/Longyearbyen' to 'Antarctica/South_Pole', but if you are at sea +and have your own private time zone, or if you are using a non-GNU host +that does not support the 'tz' database, you may need to use a POSIX +rule instead. Simple POSIX rules like 'UTC0' specify a time zone +without daylight saving time; other rules can specify simple daylight +saving regimes. *Note Specifying the Time Zone with 'TZ': (libc)TZ +Variable. + + +File: recutils.info, Node: Authors of parse_datetime, Prev: Specifying time zone rules, Up: Date input formats + +19.11 Authors of 'parse_datetime' +================================= + +'parse_datetime' started life as 'getdate', as originally implemented by +Steven M. Bellovin (<smb@research.att.com>) while at the University of +North Carolina at Chapel Hill. The code was later tweaked by a couple +of people on Usenet, then completely overhauled by Rich $alz +(<rsalz@bbn.com>) and Jim Berets (<jberets@bbn.com>) in August, 1990. +Various revisions for the GNU system were made by David MacKenzie, Jim +Meyering, Paul Eggert and others, including renaming it to 'get_date' to +avoid a conflict with the alternative Posix function 'getdate', and a +later rename to 'parse_datetime'. The Posix function 'getdate' can +parse more locale-specific dates using 'strptime', but relies on an +environment variable and external file, and lacks the thread-safety of +'parse_datetime'. + + This chapter was originally produced by Franc,ois Pinard +(<pinard@iro.umontreal.ca>) from the 'parse_datetime.y' source code, and +then edited by K. Berry (<kb@cs.umb.edu>). + + +File: recutils.info, Node: GNU Free Documentation License, Next: Concept Index, Prev: Date input formats, Up: Top + +Appendix A GNU Free Documentation License +***************************************** + + Version 1.3, 3 November 2008 + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + <http://fsf.org/> + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. We + recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it can + be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You accept + the license if you copy, modify or distribute the work in a way + requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in the + notice that says that the Document is released under this License. + If a section does not fit the above definition of Secondary then it + is not allowed to be designated as Invariant. The Document may + contain zero Invariant Sections. If the Document does not identify + any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed + of pixels) generic paint programs or (for drawings) some widely + available drawing editor, and that is suitable for input to text + formatters or for automatic translation to a variety of formats + suitable for input to text formatters. A copy made in an otherwise + Transparent file format whose markup, or absence of markup, has + been arranged to thwart or discourage subsequent modification by + readers is not Transparent. An image format is not Transparent if + used for any substantial amount of text. A copy that is not + "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and standard-conforming + simple HTML, PostScript or PDF designed for human modification. + Examples of transparent image formats include PNG, XCF and JPG. + Opaque formats include proprietary formats that can be read and + edited only by proprietary word processors, SGML or XML for which + the DTD and/or processing tools are not generally available, and + the machine-generated HTML, PostScript or PDF produced by some word + processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow the + conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the title + equally prominent and visible. You may add other material on the + covers in addition. Copying with changes limited to the covers, as + long as they preserve the title of the Document and satisfy these + conditions, can be treated as verbatim copying in other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a machine-readable + Transparent copy along with each Opaque copy, or state in or with + each Opaque copy a computer-network location from which the general + network-using public has access to download using public-standard + network protocols a complete Transparent copy of the Document, free + of added material. If you use the latter option, you must take + reasonably prudent steps, when you begin distribution of Opaque + copies in quantity, to ensure that this Transparent copy will + remain thus accessible at the stated location until at least one + year after the last time you distribute an Opaque copy (directly or + through your agents or retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of copies, + to give them a chance to provide you with an updated version of the + Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with the + Modified Version filling the role of the Document, thus licensing + distribution and modification of the Modified Version to whoever + possesses a copy of it. In addition, you must do these things in + the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of previous + versions (which should, if there were any, be listed in the + History section of the Document). You may use the same title + as a previous version if the original publisher of that + version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on the + Title Page. If there is no section Entitled "History" in the + Document, create one stating the title, year, authors, and + publisher of the Document as given on its Title Page, then add + an item describing the Modified Version as stated in the + previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in the + "History" section. You may omit a network location for a work + that was published at least four years before the Document + itself, or if the original publisher of the version it refers + to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the section + all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, unaltered + in their text and in their titles. Section numbers or the + equivalent are not considered part of the section titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option designate + some or all of these sections as invariant. To do this, add their + titles to the list of Invariant Sections in the Modified Version's + license notice. These titles must be distinct from any other + section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end of + the list of Cover Texts in the Modified Version. Only one passage + of Front-Cover Text and one of Back-Cover Text may be added by (or + through arrangements made by) any one entity. If the Document + already includes a cover text for the same cover, previously added + by you or by arrangement made by the same entity you are acting on + behalf of, you may not add another; but you may replace the old + one, on explicit permission from the previous publisher that added + the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination all + of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the documents + in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow this + License in all other respects regarding verbatim copying of that + document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of a + storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly and + finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from you + under this License. If your rights have been terminated and not + permanently reinstated, receipt of a copy of some or all of the + same material does not give you any rights to use it. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + <http://www.gnu.org/copyleft/>. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If the + Document does not specify a version number of this License, you may + choose any version ever published (not as a draft) by the Free + Software Foundation. If the Document specifies that a proxy can + decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of free +software license, such as the GNU General Public License, to permit +their use in free software. + + +File: recutils.info, Node: Concept Index, Prev: GNU Free Documentation License, Up: Top + +Concept Index +************* + +�[index�] +* Menu: + +* %allowed: Allowed Fields. (line 6) +* %auto: Auto-Generated Fields. + (line 6) +* %confidential: Confidential Fields. (line 6) +* %constraint: Arbitrary Constraints. + (line 6) +* %doc: Documenting Records. (line 6) +* %key: Keys and Unique Fields. + (line 6) +* %key <1>: Foreign Keys. (line 65) +* %key <2>: Auto-Generated Fields. + (line 24) +* %mandatory: Record Sets Properties. + (line 13) +* %mandatory <1>: Mandatory Fields. (line 6) +* %prohibit: Prohibited Fields. (line 6) +* %rec: Record Sets. (line 9) +* %rec <1>: Remote Descriptors. (line 6) +* %size: Size Constraints. (line 6) +* %sort: Sorted Output. (line 6) +* %type: Types and Fields. (line 6) +* %typedef: Types and Fields. (line 6) +* %unique: Keys and Unique Fields. + (line 6) +* abbreviations for months: Calendar date items. (line 38) +* adding fields: Adding Fields. (line 6) +* aggregate function: Aggregate Functions. (line 6) +* aliasing, field name aliasing: Field Expressions. (line 52) +* allowed fields: Allowed Fields. (line 6) +* anonymous types: Types and Fields. (line 20) +* arithmetic operators: SEX Operators. (line 13) +* authors of parse_datetime: Authors of parse_datetime. + (line 6) +* automatically generated values: Auto-Generated Fields. + (line 6) +* bash: Bash Builtins. (line 6) +* beginning of time, for POSIX: Seconds since the Epoch. + (line 13) +* Bellovin, Steven M.: Authors of parse_datetime. + (line 6) +* Berets, Jim: Authors of parse_datetime. + (line 6) +* Berry, K.: Authors of parse_datetime. + (line 19) +* books: A Little Example. (line 6) +* boolean operators: SEX Operators. (line 23) +* boolean types: Enumerated Field Types. + (line 30) +* calendar date item: Calendar date items. (line 6) +* case, ignored in dates: General date syntax. (line 60) +* case, in field names: Fields. (line 22) +* case, in selection expressions: Invoking recsel. (line 28) +* case, in selection expressions <1>: Invoking recins. (line 79) +* checking recfiles: Invoking recfix. (line 6) +* combined date and time of day item: Combined date and time of day items. + (line 6) +* comma separated values: CSV Files. (line 6) +* comma separated values <1>: Invoking csv2rec. (line 6) +* comma separated values <2>: Invoking rec2csv. (line 6) +* comments: Comments. (line 6) +* comments, in dates: General date syntax. (line 60) +* comments, in enumerated types: Enumerated Field Types. + (line 21) +* comparison: SEX Operators. (line 36) +* compulsory fields: Mandatory Fields. (line 6) +* conditional operator: SEX Operators. (line 76) +* confidential data: Confidential Fields. (line 6) +* constraints: Arbitrary Constraints. + (line 34) +* counters: Counters. (line 6) +* counting occurrences of a field: SEX Operators. (line 56) +* csv: CSV Files. (line 6) +* csv <1>: Invoking csv2rec. (line 6) +* csv <2>: Invoking rec2csv. (line 6) +* csv2rec: Invoking csv2rec. (line 6) +* date and time of day format, ISO 8601: Combined date and time of day items. + (line 6) +* date comparison: Selecting by predicate. + (line 62) +* date comparison <1>: Selecting by predicate. + (line 86) +* date comparison <2>: SEX Operators. (line 48) +* date format, ISO 8601: Calendar date items. (line 30) +* date input formats: Date input formats. (line 6) +* date, fields containing dates: Date and Time Types. (line 6) +* day of week: Enumerated Field Types. + (line 17) +* day of week item: Day of week items. (line 6) +* decimal separator: Scalar Field Types. (line 54) +* default record types: Record Sets. (line 63) +* deleting fields: Deleting Fields. (line 6) +* deleting records: Deleting Records. (line 6) +* deleting records <1>: Invoking recdel. (line 6) +* description of record sets: Documenting Records. (line 6) +* descriptor: Record Descriptors. (line 6) +* descriptor, external descriptor: Remote Descriptors. (line 42) +* displacement of dates: Relative items in date strings. + (line 6) +* documentation fields: Documenting Records. (line 6) +* duplication, avoiding: Foreign Keys. (line 7) +* editing fields: Invoking recset. (line 6) +* Eggert, Paul: Authors of parse_datetime. + (line 6) +* email: Other Field Types. (line 6) +* encrypted fields: Confidential Fields. (line 18) +* encryption: Encryption. (line 6) +* enumerated types: Enumerated Field Types. + (line 6) +* epoch, for POSIX: Seconds since the Epoch. + (line 13) +* evaluation, of selection expressions: SEX Evaluation. (line 6) +* external descriptor: Remote Descriptors. (line 42) +* FEX: Field Expressions. (line 6) +* field: Fields. (line 6) +* field expressions: Field Expressions. (line 6) +* field name: Fields. (line 16) +* field operators: SEX Operators. (line 56) +* field size: String Field Types. (line 19) +* field types,: Types and Fields. (line 6) +* field values: Fields. (line 34) +* field values, in selection expressions: SEX Operands. (line 51) +* field, allowed fields: Allowed Fields. (line 6) +* field, compulsory fields: Mandatory Fields. (line 13) +* field, forbidden fields: Prohibited Fields. (line 6) +* field, mandatory fields: Mandatory Fields. (line 13) +* field, special fields: Record Sets Properties. + (line 6) +* floating point numbers: Scalar Field Types. (line 52) +* foreign key: Other Field Types. (line 27) +* foreign key <1>: Foreign Keys. (line 67) +* formatted output: Invoking recfmt. (line 6) +* fractions: Scalar Field Types. (line 52) +* general date syntax: General date syntax. (line 6) +* grouping: Grouping Records. (line 6) +* grouping, within regular expressions: Regular Expressions. (line 42) +* hexadecimal: Scalar Field Types. (line 13) +* ID numbers: Auto-Generated Fields. + (line 24) +* implies, logical implication: Arbitrary Constraints. + (line 34) +* inserting new records: Invoking recins. (line 6) +* integers: Scalar Field Types. (line 9) +* integrity problems: Declaring Types. (line 52) +* integrity problems <1>: Mandatory Fields. (line 15) +* integrity problems <2>: Keys and Unique Fields. + (line 57) +* integrity problems <3>: Arbitrary Constraints. + (line 24) +* integrity problems <4>: Remote Descriptors. (line 35) +* integrity problems <5>: Confidential Fields. (line 62) +* integrity, checking: Checking Recfiles. (line 6) +* integrity, checking <1>: Invoking recfix. (line 6) +* interactive use: Bash Builtins. (line 6) +* ISO 8601 date and time of day format: Combined date and time of day items. + (line 6) +* ISO 8601 date format: Calendar date items. (line 30) +* items in date strings: General date syntax. (line 6) +* join: Joining Records. (line 65) +* key, foreign key: Foreign Keys. (line 67) +* key, primary key: Auto-Generated Fields. + (line 24) +* language, in dates: General date syntax. (line 36) +* language, in dates <1>: General date syntax. (line 40) +* leap seconds: General date syntax. (line 65) +* leap seconds <1>: Time of day items. (line 14) +* leap seconds <2>: Seconds since the Epoch. + (line 26) +* license, GNU Free Documentation License: GNU Free Documentation License. + (line 6) +* literals, numeric literals: SEX Operands. (line 12) +* literals, string literals: SEX Operands. (line 30) +* locale: Scalar Field Types. (line 54) +* locale <1>: Date and Time Types. (line 11) +* looking up data: Selecting by predicate. + (line 6) +* MacKenzie, David: Authors of parse_datetime. + (line 6) +* mandatory fields: Record Sets Properties. + (line 13) +* mandatory fields <1>: Mandatory Fields. (line 6) +* mdb: Invoking mdb2rec. (line 6) +* mdb2rec: Invoking mdb2rec. (line 6) +* Meyering, Jim: Authors of parse_datetime. + (line 6) +* minutes, time zone correction by: Time of day items. (line 29) +* month names in date strings: Calendar date items. (line 38) +* months, written-out: General date syntax. (line 32) +* MS Access: Invoking mdb2rec. (line 6) +* multiline field values: Fields. (line 37) +* multiline field values <1>: String Field Types. (line 14) +* mutating field values: Setting Fields. (line 6) +* numbers, written-out: General date syntax. (line 22) +* octal: Scalar Field Types. (line 13) +* operands, SEX operands: SEX Operands. (line 6) +* operators: Size Constraints. (line 23) +* operators, arithmetic operators: SEX Operators. (line 13) +* operators, boolean operators: SEX Operators. (line 23) +* operators, comparison operators: SEX Operators. (line 36) +* operators, conditional operator: SEX Operators. (line 76) +* operators, in selection expressions: SEX Operators. (line 6) +* operators, string operators: SEX Operators. (line 68) +* order of fields: Sorted Output. (line 58) +* ordinal numbers: General date syntax. (line 22) +* parentheses, in selection expressions.: SEX Operands. (line 101) +* passwords: Confidential Fields. (line 6) +* Pinard, F.: Authors of parse_datetime. + (line 19) +* primary key: Keys and Unique Fields. + (line 32) +* primary key <1>: Auto-Generated Fields. + (line 24) +* prohibited fields: Prohibited Fields. (line 6) +* pure numbers in date strings: Pure numbers in date strings. + (line 6) +* quotation marks: Selecting by predicate. + (line 85) +* quotation marks <1>: SEX Operands. (line 42) +* range, type description: Declaring Types. (line 12) +* ranges: Scalar Field Types. (line 25) +* readability: Purpose. (line 35) +* readability <1>: Foreign Keys. (line 70) +* reals: Scalar Field Types. (line 52) +* rec, type description: Foreign Keys. (line 67) +* rec2csv: Invoking rec2csv. (line 6) +* recdel: Invoking recdel. (line 6) +* recfix: Syntactical Errors. (line 14) +* recfix <1>: Invoking recfix. (line 6) +* recfmt: Generating Reports. (line 32) +* recfmt <1>: Invoking recfmt. (line 6) +* recinf: Invoking recinf. (line 6) +* recins: Invoking recins. (line 6) +* record: Records. (line 6) +* record sets: Record Sets. (line 6) +* record sets <1>: Foreign Keys. (line 6) +* record size: Records. (line 20) +* record size <1>: Size Constraints. (line 6) +* recsel: Selecting by predicate. + (line 12) +* recsel <1>: Invoking recsel. (line 6) +* recset: Invoking recset. (line 6) +* regexp, type description: String Field Types. (line 33) +* regular expressions: Regular Expressions. (line 6) +* relative items in date strings: Relative items in date strings. + (line 6) +* remote descriptors: Remote Descriptors. (line 53) +* renaming fields: Renaming Fields. (line 6) +* reports: Generating Reports. (line 6) +* requiring certain fields in records: Mandatory Fields. (line 6) +* restricting fields from records: Prohibited Fields. (line 6) +* restricting fields from records <1>: Allowed Fields. (line 6) +* restricting values of fields: String Field Types. (line 33) +* restricting values of fields <1>: Arbitrary Constraints. + (line 6) +* retrieving data: Selecting by predicate. + (line 6) +* Salz, Rich: Authors of parse_datetime. + (line 6) +* selecting records: Selecting by predicate. + (line 6) +* selecting records <1>: Invoking recsel. (line 6) +* selection expressions: Selection Expressions. + (line 6) +* selection expressions <1>: Selecting by predicate. + (line 20) +* shell: Bash Builtins. (line 6) +* size, field size: String Field Types. (line 19) +* size, record size: Records. (line 20) +* size, record size <1>: Size Constraints. (line 6) +* size, type description: String Field Types. (line 19) +* sorting: Sorted Output. (line 6) +* sorting <1>: Sorting Records. (line 6) +* sorting <2>: Invoking recsel. (line 40) +* sorting <3>: Invoking recfix. (line 30) +* sorting, physically: Sorting Records. (line 6) +* special fields: Record Sets Properties. + (line 6) +* special fields <1>: Semantic Errors. (line 6) +* special fields, list of: Record Sets Properties. + (line 38) +* spots: Generating Reports. (line 55) +* string operators: SEX Operators. (line 68) +* strings: String Field Types. (line 6) +* subscripts, in selection expressions: SEX Operands. (line 79) +* templates: Generating Reports. (line 32) +* templates <1>: Templates. (line 6) +* time of day item: Time of day items. (line 6) +* time zone correction: Date and Time Types. (line 11) +* time zone correction <1>: Time of day items. (line 29) +* time zone item: General date syntax. (line 40) +* time zone item <1>: Time zone items. (line 6) +* time, fields containing time values: Date and Time Types. (line 6) +* timestamps: Time-Stamps. (line 6) +* types: Types and Fields. (line 6) +* unique fields: Keys and Unique Fields. + (line 15) +* unique identifiers: Unique Identifiers. (line 6) +* URL: Remote Descriptors. (line 53) +* UUID: Other Field Types. (line 16) +* uuid: Unique Identifiers. (line 6) + + + +Tag Table: +Node: Top1413 +Node: Introduction7569 +Node: Purpose7793 +Ref: Purpose-Footnote-110820 +Node: A Little Example10856 +Node: The Rec Format13522 +Node: Fields14124 +Node: Records15906 +Node: Comments16947 +Node: Record Descriptors18338 +Node: Record Sets18950 +Node: Naming Record Types21795 +Node: Documenting Records22781 +Node: Record Sets Properties24155 +Node: Querying Recfiles26455 +Node: Simple Selections27521 +Node: Selecting by Type31623 +Node: Selecting by Position33547 +Node: Random Records35284 +Node: Selection Expressions36540 +Node: Selecting by predicate37477 +Node: SEX Operands41115 +Node: SEX Operators43958 +Node: SEX Evaluation46725 +Node: Field Expressions48229 +Node: Sorted Output50760 +Node: Editing Records54574 +Node: Inserting Records55439 +Node: Adding Records With recins56790 +Node: Replacing Records With recins58744 +Node: Adding Anonymous Records59826 +Node: Deleting Records61144 +Ref: Deleting Records-Footnote-162755 +Node: Sorting Records62919 +Node: Editing Fields63788 +Node: Adding Fields64881 +Node: Setting Fields66073 +Node: Deleting Fields67072 +Node: Renaming Fields67819 +Node: Field Types68334 +Node: Declaring Types69796 +Node: Types and Fields71887 +Node: Scalar Field Types72933 +Node: String Field Types75088 +Node: Enumerated Field Types77028 +Node: Date and Time Types78378 +Node: Other Field Types79362 +Node: Constraints on Record Sets80689 +Node: Mandatory Fields81876 +Node: Prohibited Fields83778 +Node: Allowed Fields85186 +Node: Keys and Unique Fields86014 +Node: Size Constraints88414 +Node: Arbitrary Constraints89559 +Node: Checking Recfiles91433 +Node: Syntactical Errors92125 +Node: Semantic Errors92999 +Node: Remote Descriptors94278 +Node: Grouping and Aggregates97240 +Node: Grouping Records97689 +Node: Aggregate Functions100499 +Node: Queries which Join Records104649 +Node: Foreign Keys106698 +Node: Joining Records108987 +Node: Auto-Generated Fields112264 +Node: Counters115287 +Node: Unique Identifiers116346 +Node: Time-Stamps117644 +Node: Encryption118113 +Node: Confidential Fields119086 +Node: Encrypting Files122565 +Node: Decrypting Data123624 +Node: Generating Reports126337 +Node: Templates128875 +Node: Interoperability130223 +Node: CSV Files130740 +Node: Importing MDB Files132920 +Node: Bash Builtins135226 +Node: readrec136637 +Node: Invoking the Utilities139254 +Ref: Common Options139570 +Node: Invoking recinf140479 +Node: Invoking recsel141793 +Node: Invoking recins146108 +Node: Invoking recdel149151 +Node: Invoking recset151119 +Node: Invoking recfix153938 +Node: Invoking recfmt156030 +Node: Invoking csv2rec156642 +Node: Invoking rec2csv157360 +Node: Invoking mdb2rec158501 +Node: Regular Expressions159268 +Node: Date input formats161519 +Node: General date syntax163956 +Node: Calendar date items166940 +Node: Time of day items168944 +Node: Time zone items171147 +Node: Combined date and time of day items172404 +Node: Day of week items173266 +Node: Relative items in date strings174281 +Node: Pure numbers in date strings177090 +Node: Seconds since the Epoch178078 +Node: Specifying time zone rules179705 +Node: Authors of parse_datetime182085 +Ref: Authors of get_date182271 +Node: GNU Free Documentation License183234 +Node: Concept Index208397 + +End Tag Table diff --git a/devspec.en_US/project/recutils/doc/recutils.texi b/devspec.en_US/project/recutils/doc/recutils.texi new file mode 100755 index 0000000..38877a3 --- /dev/null +++ b/devspec.en_US/project/recutils/doc/recutils.texi @@ -0,0 +1,5631 @@ +\input texinfo +@comment %**start of header +@setfilename recutils.info +@include version.texi +@settitle GNU Recutils +@afourpaper +@comment %**end of header + + +@comment Latin: videre licet, +@macro viz +@i{viz:@:} +@end macro + +@comment Latin: id est +@macro ie +@i{i.e.@:} +@end macro + +@comment Latin: exempli gratia +@macro eg +@i{e.g.@:} +@end macro + +@comment Latin: et cetera +@macro etc +@i{etc.@:} +@end macro + + +@copying +This manual is for GNU recutils (version @value{VERSION}, +@value{UPDATED}). + +Copyright @copyright{} 2009-2019 Jose E. Marchesi + +Copyright @copyright{} 1994-2014 Free Software Foundation, Inc. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A +copy of the license is included in the section entitled ``GNU Free +Documentation License''. +@end quotation +@end copying + +@dircategory Database +@direntry +* recutils: (recutils). The GNU Recutils manual. +@end direntry + +@dircategory Individual utilities +@direntry +* recinf: (recutils)Invoking recinf. Get info about recfiles. +* recsel: (recutils)Invoking recsel. Read records. +* recins: (recutils)Invoking recins. Insert records. +* recdel: (recutils)Invoking recdel. Delete records. +* recset: (recutils)Invoking recset. Manage fields. +* recfix: (recutils)Invoking recfix. Fix recfiles. +* csv2rec: (recutils)Invoking csv2rec. CSV to recfiles. +* rec2csv: (recutils)Invoking rec2csv. Recfiles to CSV. +* mdb2rec: (recutils)Invoking mdb2rec. MDB to recfiles. +@end direntry + +@titlepage +@title GNU recutils +@subtitle for version @value{VERSION}, @value{UPDATED} +@author by Jose E. Marchesi and John Darrington +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@contents + +@ifnottex +@node Top +@top GNU Recutils + +This manual documents version @value{VERSION} of the GNU recutils. + +@insertcopying +@end ifnottex + +@menu +The Basics +* Introduction:: Introducing recutils. +* The Rec Format:: Writing recfiles. + +Using the Recutils +* Querying Recfiles:: Extracting data from recfiles. +* Editing Records:: Inserting and deleting records. +* Editing Fields:: Inserting, modifying and deleting fields. + +Data Integrity +* Field Types:: Restrictions on the values of fields. +* Constraints on Record Sets:: Requiring or forbidding specific fields. +* Checking Recfiles:: Making sure the data is ok. + +Advanced Topics +* Remote Descriptors:: Implementing distributed databases. +* Grouping and Aggregates:: Statistics. +* Queries which Join Records:: Crossing record of different types. +* Auto-Generated Fields:: Counters and time-stamps. +* Encryption:: Storing sensitive information. +* Generating Reports:: Formatted output with templates. +* Interoperability:: Importing and exporting to other formats. +* Bash Builtins:: Boosting the recutils in the shell. + +Reference Material +* Invoking the Utilities:: Exhaustive list of command line arguments. +* Regular Expressions:: Flavor of regexps supported in recutils. +* Date input formats:: Specifying dates and times. + +* GNU Free Documentation License:: Distribution terms for this document. + +Indexes +* Concept Index:: + +@detailmenu + --- The Detailed Node Listing --- + --------------------------------- + +Here are some other nodes which are really subnodes of the ones +already listed, mentioned here so you can get to them in one step: + +Introduction + +* Purpose:: Why recutils. +* A Little Example:: Recutils in action. + +The Rec Format + +* Fields:: The key--value pairs which comprise the data. +* Records:: The main entities of a recfile. +* Comments:: Information for humans' benefit only. +* Record Descriptors:: Describing different types of records. + +Querying Recfiles + +* Simple Selections:: Introducing @command{recsel}. +* Selecting by Type:: Get the records of some given type. +* Selecting by Position:: Get the record occupying some position. +* Random Records:: Get a set of random records. +* Selection Expressions:: Get the records satisfying some expression. +* Field Expressions:: Selecting a subset of fields. +* Sorted Output:: Get the records in a given order. + +Editing Records + +* Inserting Records:: Inserting data into recfiles. +* Deleting Records:: Removing entries. +* Sorting Records:: Physical reordering of records. + +Editing Fields + +* Setting Fields:: Editing field values. +* Adding Fields:: Adding new fields to records. +* Deleting Fields:: Removing or commenting-out fields. + +Field Types + +* Declaring Types:: Declaration of types in record descriptors. +* Types and Fields:: Associating fields with types. +* Scalar Field Types:: Numbers and ranges. +* String Field Types:: Lines, limited strings and regular expressions. +* Enumerated Field Types:: Enumerations and boolean values. +* Date and Time Types:: Dates and times. +* Other Field Types:: Emails, fields, UUIDs, @dots{} + +Constraints on Record Sets + +* Mandatory Fields:: Requiring the presence of fields. +* Prohibited Fields:: Forbidding the presence of fields. +* Allowed Fields:: Restricting the presence of fields. +* Keys and Unique Fields:: Fields characterizing records. +* Size Constraints:: Limiting the size of a record set. +* Arbitrary Constraints:: Constraints records must comply with. + +Checking Recfiles + +* Syntactical Errors:: Fixing structure errors in recfiles. +* Semantic Errors:: Fixing semantic errors in recfiles. + +Remote Descriptors + +Grouping and Aggregates + +* Grouping Records:: Combining records by fields. +* Aggregate Functions:: Statistics and more. + +Joins + +* Foreign Keys:: Referring records from another records. +* Joining Records:: Performing cross-joins. + +Auto-Generated Fields + +* Counters:: Generating incremental Ids. +* Unique Identifiers:: Generating universally unique Ids. +* Time-Stamps:: Tracking the creation of records. + +Encryption + +* Confidential Fields:: Declaring fields as sensitive data. +* Encrypting Files:: Encrypt confidential fields. +* Decrypting Data:: Reading encrypted fields. + +Generating Reports + +* Templates:: Formatted output. + +Interoperability + +* CSV Files:: Converting recfiles to/from csv files. +* Importing MDB Files:: Importing MS Access Databases. + +Bash Builtins + +* readrec:: Exporting the contents of records to the shell. + +Invoking the Utilities + +* Invoking recinf:: Printing information about rec files. +* Invoking recsel:: Selecting records. +* Invoking recins:: Inserting records. +* Invoking recdel:: Deleting records. +* Invoking recset:: Managing fields. +* Invoking recfix:: Fixing broken rec files, and diagnostics. +* Invoking recfmt:: Formatting records using templates. +* Invoking csv2rec:: Converting csv data into rec data. +* Invoking rec2csv:: Converting rec data into csv data. +* Invoking mdb2rec:: Converting mdb files into rec files. + +@end detailmenu +@end menu + +@node Introduction +@chapter Introduction + +@menu +* Purpose:: Why recutils. +* A Little Example:: Recutils in action. +@end menu + +@node Purpose +@section Purpose + +GNU recutils is a set of tools and libraries to access human-editable, +text-based databases called @emph{recfiles}. The data is stored as a +sequence of records, each record containing an arbitrary number of +named fields. Advanced capabilities usually found in other data +storage systems are supported: data types, data integrity (keys, +mandatory fields, @etc{}) as well as the ability of records to refer to +other records (sort of foreign keys). Despite its simplicity, +recfiles can be used to store medium-sized databases. + +So, yet another data storage system? The mere existence of this +package deserves an explanation. There is a rich set of already +available free data storage systems, covering a broad range of +requirements. Big systems having complex data storage requirements +will probably make use of some full-fledged relational system such as +MySQL or PostgreSQL@. Less demanding applications, or applications +with special deployment requirements, may find it more convenient to +use a simpler system such as SQLite, where the data is stored in a +single binary file. XML files are often used to store configuration +settings for programs, and to encode data for transmission through +networks. + +So it looks like all the needs are covered by the existing +solutions @dots{} but consider the following characteristics of the +data storage systems mentioned in the previous paragraph: + +@itemize @minus +@item The stored data is not directly human readable. +@item The stored data is definitely not directly writable by humans. +@item They are program dependent. +@item They are not easily managed by version control systems. +@end itemize + +@cindex readability +Regarding the first point (human readability), while it is clearly +true for the binary files, some may argue XML files are indeed human +readable@dots{} well@dots{} @code{<bar><foo tag="val">try</foo> to r&iamp;ead +<p>this</p></bar>}. YAML @footnote{Yet Another Markup Language} is an +example of a hierarchical data storage format which is much more +readable than XML@. The problem with YAML is that it was designed as a +``data serialization language'' and thus to map the data constructs +usually found in programming languages. That makes it too complex for +the simple task of storing plain lists of items. + +Recfiles are human-readable, human-writable and still easy to +parse and to manipulate automatically. Obviously they are not +suitable for any task (for example, it can be difficult to manage +hierarchies in recfiles) and performance is somewhat sacrificed in +favor of readability. But they are quite handy to store small to +medium simple databases. + +The GNU recutils suite comprises: + +@itemize @minus +@item This Texinfo manual, describing the Rec format and the accompanying software. +@item A C library (librec) that provides a rich set of functions to manipulate rec data. +@item A set utilities that can be used in shell scripts and in the command line to operate on rec files. +@item An emacs mode, @code{rec-mode}. +@end itemize + +@node A Little Example +@section A Little Example + +@cindex books +Everyone loves to grow a nice book collection at home. Unfortunately, +in most cases the management of our private books gets uncontrolled: +some books get lost, some of them may be loaned to some friend, there +are some duplicated (or even triplicated!) titles because we forgot +about the existence of the previous copy, and many more details. + +In order to improve the management of our little book collection we +could make use of a complex data storage system such as a relational +database. The problem with that approach, as explained in the +previous section, is that the tool is too complicated for the simple +task: we do not need the full power of a relational database system to +maintain a simple collection of books. + +With GNU recutils it is possible to maintain such a little database in +a text file. Let's call it @file{books.rec}. The following table +resumes the information items that we want to store for each title, +along with some common-sense restrictions. + +@itemize @minus +@item +Every book has a title, even if it is ``No Title''. +@item +A book can have several titles. +@item +A book can have more than one author. +@item +For some books the author is not known. +@item +Sometimes we don't care about who the author of a book is. +@item +We usually store our books at home. +@item +Sometimes we loan books to friends. +@item +On occasions we lose track of the physical location of a book. Did +we loan it to anyone? Was it lost in the last move? Is it in some +hidden place at home? +@end itemize + +@noindent +The contents of the rec file follows: + +@example +# -*- mode: rec -*- + +%rec: Book +%mandatory: Title +%type: Location enum loaned home unknown +%doc: ++ A book in my personal collection. + +Title: GNU Emacs Manual +Author: Richard M. Stallman +Publisher: FSF +Location: home + +Title: The Colour of Magic +Author: Terry Pratchett +Location: loaned + +Title: Mio Cid +Author: Anonymous +Location: home + +Title: chapters.gnu.org administration guide +Author: Nacho Gonzalez +Author: Jose E. Marchesi +Location: unknown + +Title: Yeelong User Manual +Location: home + +# End of books.rec +@end example + +Simple. The file contains a set of records separated by blank lines. +Each record comprises a set of fields with a name and a value. + +The GNU recutils can then be used to access the contents of the file. +For example, we could get a list of the names of loaned books by invoking +@command{recsel} in the following way: + +@example +$ recsel -e "Location = 'loaned'" -P Title books.rec +The Colour of Magic +@end example + +@node The Rec Format +@chapter The Rec Format + +A recfile is nothing but a text file which conforms to a few simple +rules. This chapter shows you how, by observing these rules, recfiles +of arbitrary complexity can be written. + +@menu +* Fields:: The key--value pairs which comprise the data. +* Records:: The main entities of a recfile. +* Comments:: Information for humans' benefit only. +* Record Descriptors:: Describing different types of records. +@end menu + +@node Fields +@section Fields + +@cindex field +A @dfn{field} is the written form of an association between a label +and a value. For example, if we wanted to associate the label +@code{Name} with the value @code{Ada Lovelace} we would write: + +@example +Name: Ada Lovelace +@end example + +The separator between the field name and the field value is a colon +followed by a blank character (space and tabs, but not newlines). The +name of the field shall begin in the first column of the line. + +@cindex field name +A @dfn{field name} is a sequence of alphanumeric characters plus +underscores (@code{_}), starting with a letter or the character +@code{%}. The regular expression denoting a field name is: + +@example +[a-zA-Z%][a-zA-Z0-9_]* +@end example + +@cindex case, in field names +Field names are case-sensitive. @code{Foo} and @code{foo} are +different field names. + +The following list contains valid field names (the final colon is not +part of the names): + +@example +Foo: +foo: +A23: +ab1: +A_Field: +@end example + +@cindex field values +The @dfn{value of a field} is a sequence of characters terminated by a +single newline character (@code{\n}). + +@cindex multiline field values +Sometimes a value is too long to fit in the usual width of terminals +and screens. In that case, depending on the specific tool used to +access the file, the readability of the data would not be that good. +It is therefore possible to physically split a logical line by +escaping a newline with a backslash character, as in: + +@example +LongLine: This is a quite long value \ +comprising a single unique logical line \ +split in several physical lines. +@end example + +The sequence @code{\n} (newline) @code{+} (PLUS) and an optional +@code{_} (SPACE) is interpreted as a newline when found in a field +value. For example, the C string @code{"bar1\nbar2\n bar3"} would be +encoded in the following way in a field value: + +@example +Foo: bar1 ++ bar2 ++ bar3 +@end example + +@node Records +@section Records + +@cindex record +A @dfn{record} is a group of one or more fields written one after the +other: + +@example +Name1: Value1 +Name2: Value2 +Name2: Value3 +@end example + +It is possible for several fields in a record to share the same name +or/and the field value. The following is a valid record containing +three fields: + +@example +Name: John Smith +Email: john.smith@@foomail.com +Email: john@@smith.name +@end example + +@cindex record size +@cindex size, record size +The @dfn{size of a record} is defined as the number of fields that it +contains. A record cannot be empty, so the minimum size +for a record is 1. The maximum number of fields for a record is only +limited by the available physical resources. The size of the previous +record is 3. + +Records are separated by one or more blank lines. For instance, the +following example shows a file named @file{personalities.rec} +featuring three records: + +@example +Name: Ada Lovelace +Age: 36 + +Name: Peter the Great +Age: 53 + +Name: Matusalem +Age: 969 +@end example + +@node Comments +@section Comments + +@cindex comments +Any line having an @code{#} (ASCII 0x23) character in the first column +is a comment line. + +Comments may be used to insert information that +is not part of the database but useful in other ways. +They are completely ignored by processing tools and can only be seen by +looking at the recfile itself. + +It is also quite convenient to comment-out information from the +recfile without having to remove it in a definitive way: you may want +to recover the data into the database later! Comment lines can be +used to comment-out both full registers and single fields: + +@example +Name: Jose E. Marchesi +# Occupation: Software Engineer +# Severe lack of brain capacity +# Fired on 02/01/2009 (without compensation) +Occupation: Unoccupied +@end example + +Comments are also useful for headers, footers, comment blocks and all +kind of markers: + +@example +# -*- mode: rec -*- +# +# TODO +# +# This file contains the Bugs database of GNU recutils. +# +# Blah blah@dots{} + +@dots{} + +# End of TODO +@end example + + +Unlike some file formats, comments in recfiles must be complete lines. +You cannot start a comment in the middle of a line. +For example, in the following record, the @code{#} does @emph{not} start a comment: +@example +Name: Peter the Great # Russian Tsar +Age: 53 +@end example + +@node Record Descriptors +@section Record Descriptors + +@cindex descriptor +Certain properties of a set of records can be specified by preceding +them with a @dfn{record descriptor}. A record descriptor is itself a +record, and uses fields with some predefined names to store +properties. + +@menu +* Record Sets:: Defining different types of records. +* Naming Record Types:: Some conventions on naming record sets. +* Documenting Records:: Documenting your record sets. +* Record Sets Properties:: Introducing the special fields. +@end menu + +@node Record Sets +@subsection Record Sets +@cindex record sets + +The most basic property that can be specified for a set of records is +their @dfn{type}. The special field name @code{%rec} is used for that +purpose: + +@cindex @code{%rec} +@example +%rec: Entry + +Id: 1 +Name: Entry 1 + +Id: 2 +Name: Entry 2 +@end example + +The records following the descriptors are then identified as having +its type. So in the example above we would say there are two records +of type ``Entry''. Or in a more colloquial way we would say there are +two ``Entries'' in the database. + +The effect of a record descriptor ends when another descriptor is +found in the stream of records. This allows you to store different kinds +of records in the same database. For example, suppose you are +maintaining a depot. You will need to keep track of both what items +are available and when they are sold or restocked. + +The following example shows the usage of two record descriptors to +store both kind of records: articles and stock. + +@example +%rec: Article + +Id: 1 +Title: Article 1 + +Id: 2 +Title: Article 2 + +%rec: Stock + +Id: 1 +Type: sell +Date: 20 April 2011 + +Id: 2 +Type: stock +Date: 21 April 2011 +@end example + +The collection of records having same types in recfiles are known as +@dfn{record sets} in recutils jargon. In the example above two +record sets are defined: one containing articles and the other +containing stock movements. + +Nothing prevents having empty record sets in databases. This is in fact +usually the case when a new recfile is written but no data exists yet. +In our depot example we could write a first version of the database +containing just the record descriptors: + +@example +%rec: Article + +%rec: Stock +@end example + +@cindex default record types +Special records are not required, and many recfiles do not have them. +This is because +all the records contained in the file are of the same type, and their +nature can usually be inferred from both the file name and their +contents. For example, @file{contacts.rec} could simply contain +records representing contacts without an explicit @code{%rec: Contact} +record descriptor. In this case we say that the type of the anonymous +records stored in the file is the @dfn{default record type}. + +Another possible situation, although not usual, is to have a recfile +containing both non-typed (default) and typed record types: + +@example +Id: 1 +Title: Blah + +Id: 2 +Title: Bleh + +%rec: Movement + +Date: 13-Aug-2012 +Concept: 20 + +Date: 24-Sept-2012 +Concept: 12 +@end example + +@noindent +In this case the records preceding the movements are of the +``default'' type, whereas the records following the record descriptor +are of type @code{Movement}. Even though it is supported by the format +and the utilities, it is generally not recommended to mix non-typed +and typed records in a recfile. + +@node Naming Record Types +@subsection Naming Record Types + +It is up to you how to name your record sets. Any string comprising +only alphanumeric characters or underscores, and that starts with a +letter will be a legal name. However, it is recommended to use the +singular form of a noun in order to describe the ``type'' of the +records in the records set. Examples are @code{Article}, +@code{Contributor}, @code{Employee} and @code{Movement}. + +The used noun should be specific enough in order to characterize the +property of the records which matters. For example, in a +contributor's database it would be better to have a record set named +@code{Contributor} than @code{Person}. + +The reason of using singular nouns instead of their plural forms is +that it works better with the utilities: it is more natural to read +@command{recsel -t Contributor} (@command{-t} is for ``type'') than +@command{recsel -t Contributors}. + +@node Documenting Records +@subsection Documenting Records + +@cindex @code{%doc} +@cindex documentation fields +@cindex description of record sets + +As well as a name, it is a good idea to provide a description of the record set. +This is sometimes called the record set's @dfn{documentation} and is specified +using the @code{%doc} field. + +Whereas the name is usually short and can contain only alphanumeric +characters and underscores, no such restriction applies to the +documentation. The documentation is typically more verbose than the +name provided by the @code{%rec} field and may contain arbitrary +characters such as punctuation and parentheses. It is somewhat +similar to a comment (@pxref{Comments}), but it can be managed more easily +in a programmatic way. Unlike a comment, the @code{%doc} field is +recognized by tools such as @command{recinf} (@pxref{Invoking recinf}) +which processes record descriptors. For example, you might have two +record sets with @code{%rec} and @code{%doc} fields as follows: + +@example +%rec: Contact +%doc: Family, friends and acquaintances (other than business). + +Name: Granny +Phone: +12 23456677 + +Name: Edwina +Phone: +55 0923 8765 + + +%rec: Associate +%doc: Colleagues and other business contacts + +Name: Karl Schmidt +Phone: +49 88234566 + +Name: Genevieve Curie +Phone: +33 34 87 65 +@end example + +@node Record Sets Properties +@subsection Record Sets Properties + +@cindex field, special fields +@cindex special fields +Besides determining the type of record that follows in the +stream, record descriptors can be used to describe other properties of +those records. This can be done by using @dfn{special +fields}, which have special names from a predefined set. +Consider for example the following database, where record descriptors +are used to specify a (optional) numeric `Id' and a mandatory `Title' field: + +@cindex @code{%mandatory} +@cindex mandatory fields +@example +%rec: Item +%type: Id int +%mandatory: Title + +Id: 10 +Title: Notebook (big) + +Id: 11 +Title: Fountain Pen +@end example + +Note that the names of special fields always start with the character +@code{%}. Also note that it is also possible to use non-special +fields in a record descriptor, but such fields will have no effect on +the described record set. + +Every record set must contain one, and only one, field named +@code{%rec}. It is not mandated that that field must occupy the first +position in the record. However, it is considered a good style to +place it as the first field in the record set, in order for the casual +reader to easily identify the type of the records. + +The following list briefly describes the special fields defined in the +recutils format, along with references to the sections of this manual +describing their usage in depth. + +@cindex special fields, list of +@table @code +@item %rec +Naming record types. Also, they allow using external and remote +descriptors. @xref{Remote Descriptors}. +@item %mandatory, %allowed and %prohibit +Requiring or forbidding specific fields. @xref{Mandatory Fields}. +@xref{Prohibited Fields}. @xref{Allowed Fields}. +@item %unique and %key +Working with keys. @xref{Keys and Unique Fields}. +@item %doc +Documenting your database. @xref{Documenting Records}. +@item %typedef and %type +Field types. @xref{Field Types}. +@item %auto +Auto-counters and time-stamps. @xref{Auto-Generated Fields}. +@item %sort +Keeping your record sets sorted. @xref{Sorted Output}. +@item %size +Restricting the size of your database. @xref{Size Constraints}. +@item %constraint +Enforcing arbitrary constraints. @xref{Arbitrary Constraints}. +@item %confidential +Storing confidential information. @xref{Encryption}. +@end table + +@node Querying Recfiles +@chapter Querying Recfiles + +Since recfiles are always human readable, you could lookup data simply +by opening an editor and searching for the desired information. Or +you could use a standard tool such as @command{grep} to extract +strings matching a pattern. However, recutils provides a more powerful +and flexible way to lookup data. The following sections explore how +the recutils can be used in order to extract data from recfiles, from +very basic and simple queries to quite complex examples. + +@menu +* Simple Selections:: Introducing @command{recsel}. +* Selecting by Type:: Get the records of some given type. +* Selecting by Position:: Get the record occupying some position. +* Random Records:: Get a set of random records. +* Selection Expressions:: Get the records satisfying some expression. +* Field Expressions:: Selecting a subset of fields. +* Sorted Output:: Get the records in a given order. +@end menu + +@node Simple Selections +@section Simple Selections + +@command{recsel} is an utility whose primary purpose is to select +records from a recfile and print them on standard output. +Consider the following example record set, which we shall assume is +saved in a recfile called @file{acquaintances.rec}: + +@example +# This database contains a list of both real and fictional people +# along with their age. + +Name: Ada Lovelace +Age: 36 + +Name: Peter the Great +Age: 53 + +# Name: Matusalem +# Age: 969 + +Name: Bart Simpson +Age: 10 + +Name: Adrian Mole +Age: 13.75 +@end example + +@noindent +If we invoke @command{recsel acquaintances.rec} we will get a list of +all the records stored in the file in the terminal: + +@example +$ recsel acquaintances.rec +Name: Ada Lovelace +Age: 36 + +Name: Peter the Great +Age: 53 + +Name: Bart Simpson +Age: 10 + +Name: Adrian Mole +Age: 13.75 +@end example + +@noindent +Note that the commented out parts of the file, in this case the +explanatory header and the record corresponding to Matusalem, are not +part of the output produced by @command{recsel}. This is because +@command{recsel} is concerned only with the data. + +@command{recsel} will also ``pack'' the records so any extra empty +lines that may be between records are not echoed in the output: + +@multitable @columnfractions .5 .5 +@item +@example +@strong{acquaintances.rec:} + +Name: Peter the Great +Age: 53 + +# Note the extra empty lines. + + +Name: Bart Simpson +Age: 10 +@end example +@tab +@example +$ recsel acquaintances.rec +Name: Peter the Great +Age: 53 + +Name: Bart Simpson +Age: 10 +@end example +@end multitable + +@noindent +It is common to store data gathered in several recfiles. +For example, we could have a @file{contacts.rec} file containing +general contact records, and also a @file{work-contacts.rec} file +containing business contacts: + +@multitable @columnfractions .5 .5 +@item +@example +@strong{contacts.rec:} + +Name: Granny +Phone: +12 23456677 + +Name: Doctor +Phone: +12 58999222 +@end example +@tab +@example +@strong{work-contacts.rec:} + +Name: Yoyodyne Corp. +Email: sales@@yoyod.com +Phone: +98 43434433 + +Name: Robert Harris +Email: robert.harris@@yoyod.com +Note: Sales Department. +@end example +@end multitable + +Both files can be passed to @command{recsel} in the command line. In +that case @command{recsel} will simply process them and output their +records in the same order they were specified: + +@example +$ recsel contacts.rec work-contacts.rec +Name: Granny +Phone: +12 23456677 + +Name: Doctor +Phone: +12 58999222 + +Name: Yoyodyne Corp. +Email: sales@@yoyod.com +Phone: +98 43434433 + +Name: Robert Harris +Email: robert.harris@@yoyod.com +Note: Sales Department. +@end example + +@noindent +As mentioned above, the output follows the ordering on the command +line, so @command{recsel work-contacts.rec +contacts.rec} would output the records of @file{work-contacts.rec} first +and then the ones from @file{contacts.rec}. + +@noindent +Note however that @command{recsel} will merge records from several +files specified in the command line only if they are anonyomuse. +If the contacts in our files were typed: + +@multitable @columnfractions .5 .5 +@item +@example +@strong{contacts.rec:} + +%rec: Contact + +Name: Granny +Phone: +12 23456677 + +Name: Doctor +Phone: +12 58999222 +@end example +@tab +@example +@strong{work-contacts.rec:} + +%rec: Contact + +Name: Yoyodyne Corp. +Email: sales@@yoyod.com +Phone: +98 43434433 + +Name: Robert Harris +Email: robert.harris@@yoyod.com +Note: Sales Department. +@end example +@end multitable + +@noindent +Then we would get the following error message: + +@example +$ recsel contacts.rec work-contacts.rec +recsel: error: duplicated record set 'Contact' from work-contacts.rec. +@end example + + +@node Selecting by Type +@section Selecting by Type + +As we saw in the section discussing record descriptors, it is possible +to have several different types of records in a single recfile. +Consider for example a @file{gnu.rec} file containing information +about maintainers and packages in the GNU Project: + +@example +%rec: Maintainer + +Name: Jose E. Marchesi +Email: jemarch@@gnu.org + +Name: Luca Saiu +Email: positron@@gnu.org + +%rec: Package + +Name: GNU recutils +LastRelease: 12 February 2014 + +Name: GNU epsilon +LastRelease: 10 March 2013 +@end example + +@noindent If @command{recsel} is invoked in that file it will complain: + +@example +$ recsel gnu.rec +recsel: error: several record types found. Please use -t to specify one. +@end example + +@noindent +This is because @command{recsel} does not know which records to +output: the maintainers or the packages. This can be resolved by +using the @code{-t} command line option: + +@example +$ recsel -t Package gnu.rec +Name: GNU recutils +LastRelease: 12 February 2014 + +Name: GNU epsilon +LastRelease: 10 March 2013 +@end example + +@noindent +By default @command{recsel} never outputs record descriptors. This is +because most of the time the user is only interested in the data. +However, with the @code{-d} command line option, the record descriptor +of the selected type is printed preceding the data records: + +@example +$ recsel -d -t Maintainer gnu.rec +%rec: Maintainer + +Name: Jose E. Marchesi +Email: jemarch@@gnu.org + +Name: Luca Saiu +Email: positron@@gnu.org +@end example + +@noindent +Note that at the moment it is not possible to select non-typed +(default) records when other record sets are stored in the same file. +This is one of the reasons why mixing non-typed records and typed +records in a single recfile is not recommended. + +@noindent +Note also that if a nonexistent record type is specified in @code{-t} +then @command{recsel} does nothing. + +@node Selecting by Position +@section Selecting by Position + +As was explained in the previous sections, @command{recsel} outputs +all the records of some record set. The records are echoed in the +same order they are written in the recfile. However, often it is +desirable to select a subset of the records, determined by the position +they occupy in their record set. + +The @code{-n} command line option to @command{recsel} supports doing +this in a natural way. This is how we would retrieve the first +contact listed in a contacts database using @command{recsel}: + +@example +$ recsel -n 0 contacts.rec +Name: Granny +Phone: +12 23456677 +@end example + +@noindent +Note that the index is zero-based. If we want to retrieve more +records we can specify several indexes to @code{-n} separated by +commas. If a given index is too big, it is simply ignored: + +@example +$ recsel -n 0,1,999 contacts.rec +Name: Granny +Phone: +12 23456677 + +Name: Doctor +Phone: +12 58999222 +@end example + +@noindent With @code{-n}, the order in which the records are echoed does not +depend on the order of the indexes passed to @code{-n}. +For example, the output of @command{recsel -n 0,1} will be +identical to the output of @command{recsel -n 1,0}. + +Ranges of indexes can also be used to select a subset of the records. +For example, the following call would also select the first three +contacts of the database: + +@example +$ recsel -n 0-2 contacts.rec +Name: Granny +Phone: +12 23456677 + +Name: Doctor +Phone: +12 58999222 + +Name: Dad +Phone: +12 88229900 +@end example + +@noindent It is possible to mix single indexes and index +ranges in the same call. For example, @command{recsel -n 0,5-6} would +select the first, sixth and seventh records. + +@node Random Records +@section Random Records + +Consider a database in which each record is a cooking recipe. It is +always difficult to decide what to cook each day, so it would be nice +if we could ask @command{recsel} to pick up a random recipe. This can +be achieved using the @code{-m} (@code{--random}) command line option +of @command{recsel}: + +@example +$ recsel -m 1 recipes.rec +Title: Curry chicken +Ingredient: A whole chicken +Ingredient: Curry +Preparation: ... +@end example + +@noindent If we need two recipes, because we will be cooking at +both lunch and dinner, we can pass a different number to @code{-m}: + +@example +$ recsel -m 2 recipes.rec +Title: Fabada Asturiana +Ingredient: 300 gr of fabes. +Ingredient: Chorizo +Ingredient: Morcilla +Preparation: ... + +Title: Pasta with ragu +Ingredient: 500 gr of spaghetti. +Ingredient: 2 tomatoes. +Ingredient: Minced meat. +Preparation: ... +@end example + +@noindent +The algorithm used to implement @code{-m} guarantees that +you will never get multiple instances of the same record. This means +that if a record set has @var{n} records and you ask for @var{n} +random records, you will get all the records in a random order. + +@node Selection Expressions +@section Selection Expressions + +@cindex selection expressions +@dfn{Selection expressions}, also known as ``sexes'' in recutils +jargon, are infix expressions that can be applied to a record. +A ``sex'' is a predicate which selects a subset of records within a recfile. +They can be simple expressions involving just one operator and a pair of +operands, or complex compound expressions with parenthetical sub-expressions +and many operators and operands. +One of their most common uses is to examine records matching a particular +set of conditions. + +@menu +* Selecting by predicate:: Selecting records which satisfy conditions. +* SEX Operands:: Literal values, fields and sub-expressions. +* SEX Operators:: Arithmetic, logical and other operators. +* SEX Evaluation:: Selection expressions are like generators. +@end menu + +@node Selecting by predicate +@subsection Selecting by predicate +@cindex selecting records +@cindex looking up data +@cindex retrieving data +Consider the example recfile @file{acquaintances.rec} introduced earlier. +It contains names of people along with their respective ages. +Suppose we want to get a list of the names of all the children. +It would not be easy to do this using @command{grep}. +Neither would it, for any reasonably large recfile, be feasible to search +manually for the children. +Fortunately the @command{recsel} command provides an easy way to do +such a lookup: +@cindex @command{recsel} +@example +$ recsel -e "Age < 18" -P Name acquaintances.rec +Bart Simpson +Adrian Mole +@end example + +@noindent Let us look at each of the arguments to @command{recsel} in turn. +Firstly we have @code{-e} which tells @command{recsel} to lookup records +matching the expression @code{Age < 18} --- in other words all those people +whose ages are less than 18. +@cindex selection expressions +This is an example of a @dfn{selection expression}. +In this case it is a simple test, but it can be as complex as needed. + +Next, there is @code{-P} which tells @command{recsel} to print out the value of +the @code{Name} field --- because we want just the name, not the entire record. +The final argument is the name of the file from whence the records are +to come: @file{acquaintances.rec}. + +Rather than explicitly storing ages in the recfile, a more realistic example +might have the date of birth instead +(otherwise it would be necessary to update the people's ages in the +recfile on every birthday). + +@example +# Date of Birth +%type: Dob date + +Name: Alfred Nebel +Dob: 20 April 2010 +Email: alf@@example.com + +Name: Bertram Worcester +Dob: 3 January 1966 +Email: bert@@example.com + +Name: Charles Spencer +Dob: 4 July 1997 +Email: charlie@@example.com + +Name: Dirk Hogart +Dob: 29 June 1945 +Email: dirk@@example.com + +Name: Ernest Wright +Dob: 26 April 1978 +Email: ernie@@example.com +@end example + +@noindent Now we can achieve a similar result as before, by looking up +the names of all those people who were born after a particular date: +@example +$ recfix acquaintances.rec +$ recsel -e "Dob >> '31 July 1994'" -p Name acquaintances.rec +Name: Alfred Nebel +Name: Charles Spencer +@end example + +@cindex date comparison +@noindent The @code{>>} operator means ``later than'', and is used +here to select a date of birth after 31st July 1994. +Note also that this example uses a lower case @code{-p} whereas the preceding example +used the upper case @code{-P}. The difference is that @code{-p} prints the field name +and field value, whereas @code{-P} prints just the value. + +@command{recsel} accepts more than one @code{-e} argument, +each introducing a selection expression, +in which case the records which satisfy all expressions are selected. +You can provide more than one field label to @code{-P} or @code{-p} in order to select +additional fields to be displayed. +For example, if you wanted to send an email to all children 14 to 18 +years of age, +and today's date were @w{1st August} 2012, then you could use the following command to get +the name and email address of all such children: + +@example +$ recfix acquaintances.rec +$ recsel -e "Dob >> '31 July 1994' && Dob << '01 August 1998'" \ + -p Name,Email acquaintances.rec +Name: Charles Spencer +Email: charlie@@example.com +@end example + +@noindent As you can see, there is only one such child in our record set. + +@cindex quotation marks +Note that the example command shown above contains both double quotes @code{"} and +single quotes @code{'}. +@cindex date comparison +The double quotes are interpreted by the shell (@eg{} @command{bash}) and +the single quotes are interpreted by @command{recsel}, defining a +string. (And the backslash is interpreted by the shell, the usual +continuation character so that this manual doesn't have a too-long line.) + + +@node SEX Operands +@subsection SEX Operands + +@cindex operands, SEX operands +The supported operands are: numbers, strings, field names and +parenthesized expressions. + +@subsubsection Numeric Literals + +@cindex literals, numeric literals +The supported numeric literals are integer numbers and real numbers. +The usual sign character @samp{-} is used to denote negative values. +Integer values can be denoted in base 10, base 16 using the @code{0x} +prefix, and base 8 using the @code{0} prefix. Examples are: + +@example +10000 +0 +0xFF +-0xa +012 +-07 +-1342 +.12 +-3.14 +@end example + +@subsubsection String Literals +@cindex literals, string literals +String values are delimited by either the @code{'} character or the +@code{"} character. Whichever delimiter is used, the delimiter closing +the literal must be the same as the delimiter used to open it. + +Newlines and tabs can be part of a string literal. + +Examples are: + +@example +'Hello.' +'The following example is the empty string.' +'' +@end example + +@cindex quotation marks +The @code{'} and @code{"} characters can be part of a string if they +are escaped with a backslash, as in: + +@example +'This string contains an apostrophe: \'.' +"This one a double quote: \"." +@end example + +@subsubsection Field Values +@cindex field values, in selection expressions +The value of a field value can be included in a selection expression +by writing its name. The field name is replaced by a string +containing the field value, to handle the possibility of records with +more than one field by that name. Examples: + +@example +Name +Email +long_field_name +@end example + +It is possible to use the role part of a field if it is not empty. +So, for example, if we are searching for the issues opened by +@samp{John Smith} in a database of issues we could write: + +@example +$ recsel -e "OpenedBy = 'John Smith'" +@end example + +@noindent +instead of using a full field name: + +@example +$ recsel -e "Hacker:Name:OpenedBy = 'John Smith'" +@end example + +When the name of a field appears in an expression, the expression is +applied to all the fields in the record featuring that name. So, for +example, the expression: + +@example +Email ~ "\\.org" +@end example + +@noindent +matches any record in which there is a field named @samp{Email} +whose value terminates in (the literal string) @samp{.org}. +If we are interested in the value of some specific email, we can specify +its relative position in the containing record by using @dfn{subscripts}. +@cindex subscripts, in selection expressions +Consider, for example: + +@example +Email[0] ~ "\\.org" +@end example + +@noindent +Will match for: + +@example +Name: Mr. Foo +Email: foo@@foo.org +Email: mr.foo@@foo.com +@end example + +@noindent +But not for: + +@example +Name: Mr. Foo +Email: mr.foo@@foo.com +Email: foo@@foo.org +@end example + +The regexp syntax supported in selection expressions is POSIX +EREs, with several GNU extensions. @xref{Regular Expressions}. + +@subsubsection Parenthesized Expressions +@cindex parentheses, in selection expressions. +Parenthesis characters (@code{(} and @code{)}) can be used to group +sub expressions in the usual way. + +@node SEX Operators +@subsection Operators + +@cindex operators, in selection expressions +The supported operators are arithmetic operators (addition, +subtraction, multiplication, division and modulus), logical operators, +string operators and field operators. + +@subsubsection Arithmetic Operators +@cindex arithmetic operators +@cindex operators, arithmetic operators + +Arithmetic operators for addition (@code{+}), subtraction (@code{-}), +multiplication (@code{*}), integer division (@code{/}) and modulus +(@code{%}) are supported with their usual meanings. + +These operators require either numeric operands or string operands +whose value can be interpreted as numbers (integer or real). + +@subsubsection Boolean Operators +@cindex boolean operators +@cindex operators, boolean operators + +The boolean operators @strong{and} (@code{&&}), @strong{or} +(@code{||}) and @strong{not} (@code{!})@: are supported with the same +semantics as their C counterparts. + +A compound boolean operator @code{=>} is also supported in order to +ease the elaboration of constraints in records: @code{A => B}, which +can be read as ``A implies B'', translates into @code{!A || (A && B)}. + +The boolean operators expect integer operands, and will try to convert +any string operand to an integer value. + +@subsubsection Comparison Operators + +@cindex operators, comparison operators +@cindex comparison +The compare operators @strong{less than} (@code{<}), @strong{greater +than} (@code{>}), @strong{less than or equal} (@code{<=}), +@strong{greater than or equal} (@code{>=}), @strong{equal} (@code{=}) +and @strong{unequal} (@code{!=}) are supported with their usual +meaning. + +Strings can be compared with the equality operator (@code{=}). + +The match operator (@code{~}) can be used to match a string with a +given regular expression (@pxref{Regular Expressions}). + +@subsubsection Date Comparison Operators +@cindex date comparison +The compare operators @strong{before} (@code{<<}), @strong{after} +(@code{>>}) and @strong{same time} (@code{==}) can be used with fields +and strings containing parseable dates. + +@xref{Date input formats}. + +@subsubsection Field Operators +@cindex field operators +@cindex counting occurrences of a field +Field counters are replaced by the number of occurrences of a field +with the given name in the record. For example: + +@example +#Email +@end example + +The previous expression is replaced with the number of fields named +@code{Email} in the record. It can be zero if the record does not +have a field with that name. + +@subsubsection String Operators +@cindex string operators +@cindex operators, string operators +The string concatenation operator (@code{&}) can be used to +concatenate any number of strings and field values. + +@example +'foo' & Name & 'bar' +@end example + +@subsubsection Conditional Operator +@cindex conditional operator +@cindex operators, conditional operator +The ternary conditional operator can be used to select alternatives +based on the value of some expression: + +@example +expr1 ? expr2 : expr3 +@end example + +If @code{expr1} evaluates to true (@ie{} it is an integer or the string +representation of an integer and its value is not zero) then the +operator yields @code{expr2}. Otherwise it yields @code{expr3}. + +@node SEX Evaluation +@subsection Evaluation of Selection Expressions +@cindex evaluation, of selection expressions + +Given that: + +@itemize @minus +@item It is possible to refer to fields by name in selection expressions. +@item Records can have several fields with the same name. +@end itemize + +@noindent +It is clear that some backtracking mechanism is needed in the +evaluation of the selection expressions. For example, consider the +following expression that is deciding whether a ``registration'' in a +webpage should be rejected: + +@example +((Email ~ "foomail\.com") || (Age <= 18)) && !#Fixed +@end example + +The previous expression will be evaluated for every possible +permutation of the fields ``Email'', ``Age'' and ``Fixed'' present in +the record, until one of the combinations succeeds. At that point the +computation is interrupted. + +When used to decide whether a record matches some criteria, the goal +of a selection expression is to act as a boolean expression. In that +case the final value of the expression depends on both the type and +the value of the result launched by the top-most subexpression: + +@itemize @minus +@item If the result is an @b{integer}, the expression is true if its +value is not zero. +@item If the result is a @b{real}, or a @b{string}, the expression +evaluates to false. +@end itemize + +Sometimes a selection expression is used to compute a result instead +of a boolean. In that case the returned value is converted to a +string. This is used when replacing the slots in templates +(@pxref{Templates}). + +@node Field Expressions +@section Field Expressions + +@cindex field expressions +@cindex FEX + +@dfn{Field expressions} (also known as ``fexes'') are a way to select +fields of a record. They also allow you to do certain transformations +on the selected fields, such as changing their names. + +A FEX comprises a sequence of @dfn{elements} separated by commas: + +@example +ELEM_1,ELEM_2,@dots{},ELEM_N +@end example + +Each element makes a reference to one or more fields in a record +identified by a given name and an optional subscript: + +@example +@var{Field_Name}[@var{min}-@var{max}] +@end example + +@noindent +@var{min} and @var{max} are zero-based indexes. It is possible to +refer to a field occupying a given position. For example, consider +the following record: + +@example +Name: Mr. Foo +Email: foo@@foo.com +Email: foo@@foo.org +Email: mr.foo@@foo.org +@end example + +@noindent +We would select all the emails of the record with: + +@example +Email +@end example + +@noindent +The first email with: + +@example +Email[0] +@end example + +@noindent +The third email with: + +@example +Email[2] +@end example + +@noindent +The second and the third email with: + +@example +Email[1-2] +@end example + +And so on. It is possible to select the same field (or +range of fields) more than once just by repeating them in a field +expression. Thus, the field expression: + +@example +Email[0],Name,Email +@end example + +@noindent +will print the first email, the name, and then all the email fields +including the first one. + +@cindex aliasing, field name aliasing +It is possible to include a @dfn{rewrite rule} in an element of a +field expression, which specifies an alias for the selected fields: + +@example +@var{Field_Name}[@var{min}-@var{max}]:@var{Alias} +@end example + +@noindent +For example, the following field expression specifies an alias for the +fields named @code{Email} in a record: + +@example +Name,Email:ElectronicMail +@end example + +Since the rewrite rules only affect the fields selected in a single +element of the field expression, it is possible to define different +aliases to several fields having the same name but occupying different +positions: + +@example +Name,Email[0]:PrimaryEmail,Email[1]:SecondaryEmail +@end example + +@noindent +When that field expression is applied to the following record: + +@example +Name: Mr. Foo +Email: primary@@email.com +Email: secondary@@email.com +Email: other@@email.com +@end example + +@noindent +the result will be: + +@example +Name: Mr. Foo +PrimaryEmail: primary@@email.com +SecondaryEmail: secondary@@email.com +Email: other@@email.com +@end example + +It is possible to use the dot notation in order to refer to field and +sub-fields. This is mainly used in the context of joins, where new +fields are created having compound names such as @code{Foo_Bar}. A +reference to such a field can be done in the fex using dot notation +as follows: + +@example +Foo.Bar +@end example + +@node Sorted Output +@section Sorted Output + +@cindex @code{%sort} +@cindex sorting +This special field sets sorting criteria for the records +contained in a record set. Its usage is: + +@example +%sort: @var{field1} @var{field2} ... +@end example + +@noindent +Meaning that the desired order for the records will be determined by +the contents of the fields named in the @code{%sort} value. The +sorting is always done in ascending order, and there may be records +that lack the involved fields, @ie{} the sorting +fields need not be mandatory. + +It is an error to have more than one @code{%sort} field in the same +record descriptor, as only one field list can be used as sorting +criteria. + +Consider for example that we want to keep the records in our inventory +system ordered by entry date. We could achieve that by using the +following record descriptor in the database: + +@example +%rec: Item +%type: Date date +%sort: Date + +Id: 1 +Title: Staplers +Date: 10 February 2011 + +Id: 2 +Title: Ruler Pack 20 +Date: 2 March 2009 + +@dots{} +@end example + +@noindent +As you can see in the example above, the fact we use @code{%sort} in a +database does not mean that the database will be always physically +ordered. Unsorted record sets are not a data integrity +problem, and thus the diagnosis tools must not declare a recfile as ++invalid because of this. The utility @command{recfix} provides a way ++to physically order the fields in the file (@pxref{Invoking recfix}). + +On the other hand any program listing, presenting or processing data +extracted from the recfile must honor the @code{%sort} entry. For +example, when using the following @command{recsel} program in the +database above we would get the output sorted by date: + +@example +$ recsel inventory.rec +Id: 2 +Title: Ruler Pack 20 +Date: 2 March 2009 + +Id: 1 +Title: Staplers +Date: 10 February 2011 +@end example + +@cindex order of fields +@noindent +The sorting of the selected field depends on its type: + +@itemize @minus +@item Numeric fields (integers, ranges, reals) are numerically ordered. +@item Boolean fields are ordered considering that ``false'' values come first. +@item Dates are ordered chronologically. +@item Any other kind of field is ordered using a lexicographic order. +@end itemize + +It is possible to specify several fields as the sorting criteria. In +that case the records are sorted using a lexicographic order. Consider +for example the following unsorted database containing marks for +several students: + +@example +%rec: Marks +%type: Class enum A B C +%type: Score real + +Name: Mr. One +Class: C +Score: 6.8 + +Name: Mr. Two +Class: A +Score: 6.8 + +Name: Mr. Three +Class: B +Score: 9.2 + +Name: Mr. Four +Class: A +Score: 2.1 + +Name: Mr. Five +Class: C +Score: 4 +@end example + +@noindent +If we wanted to sort it by @code{Class} and by @code{Score} we would +insert a @code{%sort} special field in the descriptor, having: + +@example +%rec: Marks +%type: Class enum A B C +%type: Score real +%sort: Class Score + +Name: Mr. Four +Class: A +Score: 2.1 + +Name: Mr. Two +Class: A +Score: 6.8 + +Name: Mr. Three +Class: B +Score: 9.2 + +Name: Mr. Five +Class: C +Score: 4 + +Name: Mr. One +Class: C +Score: 6.8 +@end example + +@noindent +The order of the fields in the @code{%sort} field is +significant. If we reverse the order in the example above then we get +a different sorted set: + +@example +%rec: Marks +%type: Class enum A B C +%type: Score real +%sort: Score Class + +Name: Mr. Four +Class: A +Score: 2.1 + +Name: Mr. Five +Class: C +Score: 4 + +Name: Mr. Two +Class: A +Score: 6.8 + +Name: Mr. One +Class: C +Score: 6.8 + +Name: Mr. Three +Class: B +Score: 9.2 +@end example + +@noindent +In this last case, @code{Mr. One} comes after @code{Mr. Two} because the +class @code{A} +comes before the class @code{B} even though the score is the same (@code{6.8}). + + +@node Editing Records +@chapter Editing Records + +The simplest way of editing a recfile is to start your favourite +text editor and hack the contents of the file as desired. However, +the rec format is structured enough so recfiles can be updated +automatically by programs. This is useful for writing shell scripts +or when there are complex data integrity rules stored in the file that +we want to be sure to preserve. + +The following sections discuss the usage of the recutils for altering +recfiles in the level of record: adding new records, deleting or +commenting them out, sorting them, @etc{} + +@menu +* Inserting Records:: Inserting data into recfiles. +* Deleting Records:: Removing data. +* Sorting Records:: Physical reordering of records. +@end menu + +@node Inserting Records +@section Inserting Records + +Adding new records to a recfile is pretty trivial: open it with your +text editor and just write down the fields comprising the records. +This is really the best way to add contents to a recfile containing +simple data. However, complex databases may introduce some +difficulties: + +@table @emph +@item Multi-line values. +It can be tedious to manually encode the several lines. +@item Data integrity. +It is difficult to manually maintain the integrity of data stored +in the data base. +@item Counters and timestamps. +Some record sets feature auto-generated fields, which are commonly +used to implement counters and time-stamps. @xref{Auto-Generated +Fields}. +@end table + +Thus, to facilitate the insertion of new data a command line utility called +@command{recins} is included in the recutils. The usage of @command{recins} is +very simple, and can be used both in the command line or called from +another program. The following subsections discuss several aspects of +using this utility. + +@menu +* Adding Records With recins:: Basics of the @command{recins} utility. +* Replacing Records With recins:: Substituting records in a file. +* Adding Anonymous Records:: Inserting or replacing records with no + type. +@end menu + +@node Adding Records With recins +@subsection Adding Records With recins + +Each invocation of @command{recins} adds one record to the targeted +database. The fields comprising the records are specified using pairs +of @code{-f} and @code{-v} command line arguments. For example, this +is how we would add the first entry to a previously empty contacts +database: + +@example +$ recins -f Name -v "Mr Foo" -f Email -v foo@@bar.baz contacts.rec +$ cat contacts.rec +Name: Mr. Foo +Email: foo@@bar.baz +@end example + +@noindent +If we invoke @command{recins} again on the same database we will be adding a +second record: + +@example +$ recins -f Name -v "Mr Bar" -f Email -v bar@@gnu.org contacts.rec +$ cat contacts.rec +Name: Mr. Foo +Email: foo@@bar.baz + +name: Mr. Bar +Email: bar@@gnu.org +@end example + +There is no limit on the number of @code{-f} @code{-v} pairs that can +be specified to @command{recins}, other than any limit on command line arguments +which may be imposed by the shell. + +The field values provided using @code{-v} are encoded to follow the +rec format conventions, including multi-line field values. +Consider the following example: + +@example +$ recins -f Name -v "Mr. Foo" -f Address -v ' +Foostrs. 19 +Frankfurt am Oder +Germany' contacts.rec +$ cat contacts.rec +Name: Mr. Foo +Address: ++ Foostrs. 19 ++ Frankfurt am Oder ++ Germany +@end example + +It is also possible to provide fields already encoded as rec data for +their addition, using the @code{-r} command line argument. This +argument can be intermixed with @code{-f} @code{-v}. + +@example +$ recins -f Name -v "Mr. Foo" -r "Email: foo@@bar.baz" contacts.rec +$ cat contacts.rec +Name: Mr. Foo +Email: foo@@bar.baz +@end example + +If the string passed to @code{-r} is not valid rec data then +@command{recins} will complain with an error and the operation will be +aborted. + +At this time, it is not possible to add new records +containing comments. + +@node Replacing Records With recins +@subsection Replacing Records With recins + +@command{recins} can also be used to replace existing records in a +database with a provided record. This is done by specifying some +criteria selecting the record (or records) to be replaced. + +Consider for example the following command applied to our contacts +database: + +@example +$ recins -e "Email = 'foo@@bar.baz'" -f Name -v "Mr. Foo" \ + -f Email -v "new@@bar.baz" contacts.rec +@end example + +@noindent +The contact featuring an email @code{foo@@bar.baz} gets replaced with +the following record: + +@example +Name: Mr. Foo +Email: new@@bar.baz +@end example + +The records to be replaced can also be specified by index, or a +range of indexes. For example, the following command replaces the +first, second and third records in a database with dummy records: + +@example +$ recins -n 0,1-2 -f Dummy -v XXX foo.rec +$ cat foo.rec +Dummy: XXX + +Dummy: XXX + +Dummy: XXX + +... Other records ... +@end example + +@node Adding Anonymous Records +@subsection Adding Anonymous Records + +In a previous chapter we noted that @command{recsel} interprets the +absence of a @command{-t} argument depending on the actual contents of +the file. If the recfile contains records of just one type the +command assumes that the user is referring to these records. + +@command{recins} does not follow this convention, and the absence of +an explicit type always means to insert (or replace) an anonymous +record. Consider for example the following database: + +@example +%rec: Marks +%type: Class enum A B C + +Name: Alfred +Class: A + +Name: Bertram +Class: B +@end example + +@noindent +If we want to insert a new mark we have to specify the type explicitly +using @command{-t}: + +@example +$ cat marks.rec | recins -t Marks -f Name -v Xavier -f Class -v C +%rec: Marks +%type: Class enum A B C + +Name: Alfred +Class: A + +Name: Bertram +Class: B + +Name: Xavier +Class: C +@end example + +@noindent +If we forget to specify the type then an anonymous record is created +instead: + +@example +$ cat marks.rec | recins -f Name -v Xavier -f Class -v C +Name: Xavier +Class: C + +%rec: Marks +%type: Class enum A B C + +Name: Alfred +Class: A + +Name: Bertram +Class: B +@end example + +@node Deleting Records +@section Deleting Records +@cindex deleting records + +Just as @code{recins} inserts records, the utility @code{recdel} deletes them. +Consider the following recfile @file{stock.rec}: +@example +%rec: Item +%type: Expiry date +%sort: Title + +Title: First Aid Kit +Expiry: 2 May 2009 + +Title: Emergency Rations +Expiry: 10 August 2009 + +Title: Life raft +Expiry: 2 March 2009 +@end example + +Suppose we wanted to delete all items +with an @code{Expiry} value before a certain date, we could do this with the following command: + +@example +$ recdel -t Item -e 'Expiry << "5/12/2009"' stock.rec +@end example +@noindent +After running this command, only one record will remain in the file +(@viz{} the one titled `Emergency Rations') because all the others have expiry dates +prior to 12 May 2009. +@footnote{`5/12/2009' means the 12th day of May 2009, @emph{not} the fifth day of December, +even if your @env{LC_TIME} environment variable has been set to suggest otherwise.} +The @command{-t} option can be omitted if, and only if, there is no @code{%rec} field +in the recfile. + +@command{recdel} tries to warn you if you attempt to perform a delete operation +which it deems to be too pervasive. In such cases, it will refuse to run, +unless you give the @command{--force} flag. +However, you should not rely upon @command{recdel} to protect you, because it cannot +always correctly guess that you might be deleting more records than intended. +For this reason, it may be wise to use the @command{-c} flag, which causes +the relevant records to be commented out, rather than deleted. (And +of course backups are always wise.) + +The complete options available to the @command{recdel} command are explained later. +@xref{Invoking recdel}. + +@node Sorting Records +@section Sorting Records +@cindex sorting +@cindex sorting, physically + +In the example above, note the existence of the @code{%sort: Title} line. +This field was discussed previously (@pxref{Sorted Output}) and, as mentioned, does not +imply that the records need to be stored in the recfile in any particular order. + +However, if desired, you can automatically arrange the recfile in that order using +@command{recfix} with the @command{--sort} flag. +After running the command +@example +$ recfix --sort stock.rec +@end example +@noindent +the file @file{stock.rec} will have its records sorted in alphabetical order +of the @code{Title} fields, thus: +@example +%rec: Item +%type: Expiry date +%sort: Title + +Title: Emergency Rations +Expiry: 10 August 2009 + +Title: First Aid Kit +Expiry: 2 May 2009 + +Title: Liferaft +Expiry: 2 March 2009 +@end example + + + +@node Editing Fields +@chapter Editing Fields + +Fields of a recfile can, of course, be edited manually using an editor and this is often +the easiest way when only a few fields need to be changed or when the nature of the changes do +not follow any particular pattern. +If, however, a large number of similar changes to several records are +required,the @command{recset} command can make the job easier. + +The formal description of @command{recset} is presented later +(@pxref{Invoking recset}). In this chapter some typical usage +examples are discussed. As with @command{recdel}, @command{recset} if +used erroneously has the potential to make very pervasive changes, +which could result in a large loss of data. It is prudent therefore +to take a copy of a recfile before running such commands. + + +@menu +* Adding Fields:: Adding new fields to records. +* Setting Fields:: Editing field values. +* Deleting Fields:: Removing or commenting-out fields. +* Renaming Fields:: Changing the name of a field. +@end menu + + +@node Adding Fields +@section Adding Fields +@cindex adding fields + +As mentioned above, the command @command{recins} adds new records to a +recfile, but it cannot +add fields to an existing record. +This task can be achieved automatically using @command{recset} with its @command{-a} flag. + +Suppose that (after a stock inspection) you wanted to add an `Inspected' field to all the items in +the recfile. +The following command could be used. +@example +$ recset -t Item -f Inspected -a 'Yes' stock.rec +@end example +@noindent +Here, because no record selection flag was provided, the command affected @emph{all} the +records of type `Item'. +We could limit the effect of the command using the @command{-e}, @command{-q}, +@command{-n} or @command{-m} flags. +For example to add the `Inspected' field to only the first item the following command +would work: +@example +$ recset -t Item -n 0 -f Inspected -a 'Yes' stock.rec +@end example +@noindent +Similarly, a selection expression could have been used with the @command{-e} flag in order to +add the field only to records which satisfy the expression. + +If you use @command{recset} with the @command{-a} flag on a field that already exists, a +new field (in addition to those already present) will be appended with the given value. + + +@node Setting Fields +@section Setting Fields +@cindex mutating field values + +It is also possible to update the value of a field. +This is done using @command{recset} with its @command{-s} flag. +In the previous example, an `Inspected' flag was added to certain records, +with the value `yes'. +After reflection, one might want to record the date of inspection, rather than +a simple yes/no flag. +Records which have no such field will remain unchanged. +@example +$ recset -t Item -f Inspected -s '30 October 2006' stock.rec +@end example +Although the above command does not have any selection criteria, it will +only affect those records for which a `Inspected' field exists. +This is because the @command{-s} flag only sets values of existing fields. +It will not create any fields. + +If instead the @command{-S} flag is used, this will create the field +(if it does not already exist) @emph{and} set its value. +@example +$ recset -t Item -f Inspected -S '30 October 2006' stock.rec +@end example + +@node Deleting Fields +@section Deleting Fields +@cindex deleting fields + +You can delete fields using @command{recset}'s @command{-d} flag. +For example, if we wanted to delete the @code{Inspected} field which we introduced above, +we could do so as follows: +@example +$ recset -t Item -f Inspected -d stock.rec +@end example +@noindent +This would delete @emph{all} fields named @code{Inspected} from @emph{all} records of type +@code{Item}. +It may be that, we only wanted to delete the @code{Inspected} fields from records which satisfy +a certain condition. +The following would delete the fields only from items whose @code{Expiry} date was before +2 January 2010: +@example +$ recset -t Item -e 'Expiry << "2 January 2010"' -f Inspected -d stock.rec +@end example + + +@node Renaming Fields +@section Renaming Fields +@cindex renaming fields + +Another use of @command{recset} is to rename existing fields. This is achieved using the +@command{-r} flag. +To rename all instances of the @code{Expiry} field occurring in any +record of type @code{Item} to @code{UseBy}, +the following command suffices: +@example +$ recset -t Item -f Expiry -r 'UseBy' stock.rec +@end example +@noindent +As with most operations, this could be done selectively, using the @command{-e} flag and a +selection expression. + + +@node Field Types +@chapter Field Types + +Field values are, by default, unrestricted text strings. However, it +is often useful to impose some restrictions on the values of certain +fields. For example, consider the following record: + +@example +Id: 111 +Name: Jose E. Marchesi +Age: 30 +MaritalStatus: single +Phone: +49 666 666 66 +@end example + +The values of the fields must clearly follow some structure in order +to make sense. @code{Id} is a numeric identifier for a +person. @code{Name} will never use several lines. @code{Age} will +typically be in the range @code{0..120}, and there are only a few +valid values for @code{MaritalStatus}: single, married, divorced, and +widow(er). +Phones may be restricted to some standard format as well to be valid. +All these restrictions (and many others) can be enforced by using +@dfn{field types}. + +There are two kind of field types: @dfn{anonymous} and @dfn{named}. Those are +described in the following subsections. + +@menu +* Declaring Types:: Declaration of types in record descriptors. +* Types and Fields:: Associating fields with types. +* Scalar Field Types:: Numbers and ranges. +* String Field Types:: Lines, limited strings and regular expressions. +* Enumerated Field Types:: Enumerations and boolean values. +* Date and Time Types:: Dates and times. +* Other Field Types:: Emails, fields, UUIDs, @dots{} +@end menu + +@node Declaring Types +@section Declaring Types + +A type can be declared in a record descriptor by using the +@code{%typedef} special field. The syntax is: + +@example +%typedef: @var{type_name} @var{type_description} +@end example + +@noindent +Where @var{type_name} is the name of the new type, and +@var{type_description} a description which varies depending of the +kind of type. +@cindex @code{range}, type description +For example, this is how a type @code{Age_t} could +be defined as numbers in the range @code{0..120}: + +@example +%typedef: Age_t range 0 120 +@end example + +@noindent +Type names are identifiers having the following syntax: + +@example +[a-zA-Z][a-zA-Z0-9_]* +@end example + +@noindent +Even though any identifier with that syntax could be used for types, +it is a good idea to consistently follow some convention to help +distinguishing type names from field names. For example, the +@code{_t} suffix could be used for types. + +A type can be declared to be an alias for another type. The syntax +is: + +@example +%typedef: @var{type_name} @var{other_type_name} +@end example + +@noindent +Where @var{type_name} is declared to be a synonym of +@var{other_type_name}. This is useful to avoid duplicated type +descriptions. For example, consider the following example: + +@example +%typedef: Id_t int +%typedef: Item_t Id_t +%typedef: Transaction_t Id_t +@end example + +@noindent +Both @code{Item_t} and @code{Transaction_t} are aliases for the type +@code{Id_t}. Which is in turn an alias for the type @code{int}. + So, they are both numeric identifiers. + +The order of the @code{%typedef} fields is not relevant. In +particular, a type definition can forward-reference another type that is defined +subsequently. The previous example could have been written as: + +@example +%typedef: Item_t Id_t +%typedef: Transaction_t Id_t +%typedef: Id_t int +@end example + +@noindent +@cindex integrity problems +Integrity check will complain if undefined types are referenced. As well as when any aliases up referencing back (looping back +directly or indirectly) in type declarations. For +example, the following set of declarations contains a loop. +Thus, it's invalid: + +@example +%typedef: A_t B_t +%typedef: B_t C_t +%typedef: C_t A_t +@end example + +@noindent +The scope of a type is the record descriptor where it is defined. + +@node Types and Fields +@section Types and Fields + +@cindex @code{%type} +@cindex @code{%typedef} + +@cindex types +@cindex field types, +Fields can be declared to have a given type by using the @code{%type} +special field in a record descriptor. The synopsis is: + +@example +%type: @var{field_list} @var{type_name_or_description} +@end example + +@noindent +Where @var{field_list} is a list of field names separated by commas. +@var{type_name_or_description} can be either a type name which has +been previously declared using @code{%typedef}, or a type description. +Type names are useful when several fields are declared to be of the +same type: + +@example +%typedef: Id_t int +%type: Id Id_t +%type: Product Id_t +@end example + +@cindex anonymous types +@noindent +Anonymous types can be specified by writing a type description instead +of a type name. They help to avoid superfluous type declarations in +the common case where a type is used by just one field. A record +containing a single @code{Id} field, for example, can be defined +without having to use a @code{%typedef} in the following way: + +@example +%rec: Task +%type: Id int +@end example + +@node Scalar Field Types +@section Scalar Field Types + +The rec format supports the declaration of fields of the following +scalar types: integer numbers, ranges and real numbers. + +@cindex integers +Signed @dfn{integers} are supported by using the @code{int} +declaration: + +@example +%typedef: Id_t int +@end example + +@cindex hexadecimal +@cindex octal +@noindent +Given the declaration above, fields of type @code{Id_t} must +contain integers, and they may be negative. Hexadecimal values can be written +using the @code{0x} prefix, and octal values using an extra +@code{0}. Valid examples are: + +@example +%type: Id Id_t + +Id: 100 +Id: -23 +Id: -0xFF +Id: 020 +@end example + +@cindex ranges +@noindent +Sometimes it is desirable to reduce the @dfn{range} of integers allowed in a +field. This can be achieved by using a range type declaration: + +@example +%typedef: Interrupt_t range 0 15 +@end example + +@noindent +Note that it is possible to omit the minimum index in ranges. In that +case it is implicitly zero: + +@example +%typedef: Interrupt_t range 15 +@end example + +@noindent +It is possible to use the keywords @code{MIN} and @code{MAX} instead +of a numeral literal in one or both of the points conforming the +range. They mean the minimum and the maximum integer value supported +by the implementation respectively. See the following examples: + +@example +%typedef: Negative range MIN -1 +%typedef: Positive range 0 MAX +%typedef: AnyInt range MIN MAX +%typedef: Impossible range MAX MIN +@end example + +@noindent +Hexadecimal and octal numbers can be used to specify the limits in a +range. This helps to define scalar types whose natural base is not +ten, like for example: + +@example +%typedef: Address_t range 0x0000 0xFFFF +%typedef: Perms_t range 755 +@end example + +@cindex reals +@cindex fractions +@cindex floating point numbers +@noindent +@dfn{Real} number fields can be declared with the @code{real} type +specifier. +A wide range of real numbers can be represented this way, only limited +by the underlying floating point representation. +@cindex decimal separator +@cindex locale +The decimal separator is always the dot (@code{.}) character regardless +of the locale setting. +For example: + +@example +%typedef: Longitude_t real +@end example + +@noindent +Examples of fields of type real: + +@example +%rec: Rectangle +%typedef: Longitude_t real +%type: Width Longitude_t +%type: Height Longitude_t + +Width: 25.01 +Height: 10 +@end example + + +@node String Field Types +@section String Field Types + +@cindex strings +The @code{line} field type specifier can be used to restrict the value +of a field to a single line, @ie{} no newline characters are allowed. +For example, a type for proper names could be declared as: + +@example +%typedef: Name_t line +@end example + +@noindent +Examples of fields of type line: + +@cindex multiline field values +@example +Name: Mr. Foo Bar +Name: Mrs. Bar Baz +Name: This is ++ invalid +@end example + +@cindex field size +@cindex size, field size +@cindex @code{size}, type description + +@noindent +Sometimes it is the maximum size of the field value that shall be +restricted. The @code{size} field type specifier can be used to +define the maximum number of characters a field value can have. For +example, if we were collecting input that will get written in a +paper-based forms system allowing up to 25 characters width entries, +we could declare the entries as: + +@example +%typedef: Address_t size 25 +@end example + +@noindent +Note that hexadecimal and octal integer constants can also be used to +specify field sizes: + +@example +%typedef: Address_t size 0x18 +@end example + +@cindex restricting values of fields +@noindent +Arbitrary restrictions can be defined by using regular expressions. +@cindex @code{regexp}, type description +The @dfn{regexp} field type specifier introduces an ERE (extended +regular expression) that will be matched against fields having that +name. The synopsis is: + +@example +%typedef: @var{type_name} regexp /@var{re}/ +@end example + +@noindent +where @var{re} is the regular expression to match. + +For example, consider the @code{Id_t} type designed to represent +the encoding of the identifier of ID cards in some country: + +@example +%typedef: Id_t regexp /[0-9]@{9@}[a-zA-Z]/ +@end example + +@noindent +Examples of fields of type @code{Id_t} are: + +@example +IDCard: 123456789Z +IDCard: invalid id card +@end example + +@noindent +Note that the slashes delimiting the @var{re} can be replaced with +any other character that is not itself used as part of the regexp. +That is useful in some cases such as: + +@example +%typedef: Path_t regexp |(/[^/]/?)+| +@end example + +@noindent +The regexp flavor supported in recfiles are the POSIX EREs plus +several GNU extensions. @xref{Regular Expressions}. + +@node Enumerated Field Types +@section Enumerated Field Types + +@cindex enumerated types +Fields of this type contain symbols taken from an enumeration. + +The type is described by writing the sequence of symbols comprising +the enumeration. Enumeration symbols are strings described by the +following regexp: + +@example +[a-zA-Z0-9][a-zA-Z0-9_-]* +@end example + +@noindent +The symbols are separated by blank characters (including newlines). +For example: + +@cindex day of week +@example +%typedef: Status_t enum NEW STARTED DONE CLOSED +%typedef: Day_t enum Monday Tuesday Wednesday Thursday Friday ++ Saturday Sunday +@end example + +@noindent +@cindex comments, in enumerated types +It is possible to insert comments when describing an enum type. The +comments are delimited by parenthesis pairs. The contents of the +comments can be any character but parentheses. For example: + +@example +%typedef: TaskStatus_t enum ++ NEW (The task was just created) ++ IN_PROGRESS (Task started) ++ CLOSED (Task closed) +@end example + +@noindent +@cindex boolean types +@dfn{Boolean} fields, declared with the type specifier @code{bool}, +can be seen as special enumerations holding the +binary values true and false. + +@example +%typedef: Yesno_t bool +@end example + +@noindent +The literals allowed in boolean fields are @code{yes/no}, @code{0/1} +and @code{true/false}. Examples are: + +@example +SwitchedOn: 1 +SwitchedOn: yes +SwitchedOn: false +@end example + +@node Date and Time Types +@section Date and Time Types + +@cindex date, fields containing dates +@cindex time, fields containing time values +The @dfn{date} field type specifier can be used to declare dates and +times. The synopsis is: + +@example +%typedef: @var{type_name} date +@end example + +@cindex locale +@cindex time zone correction +@noindent +There are many permitted date formats, described in detail later in this manual (@pxref{Date input formats}). +Of particular note are the following: +@itemize @minus +@item Dates and times read from recfiles are not affected by the +locale or the timezone. This means that the @env{LC_TIME} and the +@env{TZ} environment variables are ignored. +If you wish, for example, to specify a time which must be interpreted as UTC, you +must explicitly append the time zone correction: @eg{} @samp{2001-1-10 12:09Z}. +@item The field value `1/10/2001' means January 10, 2001, @strong{not} October 1, 2001. +@item Relative times and dates (such as `1 day ago') are permitted but are not + particularly useful. +@end itemize + +@node Other Field Types +@section Other Field Types + +@cindex email +The @dfn{Email} field type specifier is used to declare electronic +addresses. The synopsis is: + +@example +%typedef: Email_t email +@end example + +@noindent +Sometimes it is useful to make fields to store field names. For that +purpose the @dfn{Field} field type specifier is supported. The +synopsis is: + +@example +%typedef: Field_t field +@end example + +@noindent +@cindex UUID +Universally Unique Identifiers (also known as UUIDs) are a way to +assign a globally unique label to some object. The @dfn{uuid} field +type specifier serves that purpose. The synopsis is: + +@example +%typedef: Id_t uuid +@end example + +@noindent +The format of the uuids is specified as 32 hexadecimal digits, +displayed in five groups separated by hyphens. For example: + +@example +550e8400-e29b-41d4-a716-446655440000 +@end example + +@noindent +@cindex foreign key +There is one other possible field type, @viz{} a foreign key. +The following example +defines the type @code{Maintainer_t} to be of type ``record @code{Hacker}''; +in other words, a foreign key referring to a record in the @code{Hacker} record set. +@example +%typedef: Maintainer_t rec Hacker +@end example +@noindent This essentially means that the values +to be stored in fields of type @code{Maintainer_t} are of whatever +type is defined for the primary key of the @code{Hacker} record set. +Why this is useful is discussed later. @xref{Queries which Join Records}. + +@node Constraints on Record Sets +@chapter Constraints on Record Sets + +The records in a recfile are by default not restricted to any particular +structure +except that they must contain one or more fields and optional comments. +This provides the format with huge expressive power; +but in many cases, it is also desirable to impose some restrictions in +order to reflect some of the properties of the data stored in the +database. It is also useful in order to preserve data integrity and +thus avoid data corruption. + +The following sections describe the usage of some predefined special +fields whose purpose is to impose this kind of restriction in the +structure of the records. + +@menu +* Mandatory Fields:: Requiring the presence of fields. +* Prohibited Fields:: Forbidding the presence of fields. +* Allowed Fields:: Restricting the presence of fields. +* Keys and Unique Fields:: Fields characterizing records. +* Size Constraints:: Constraints on the number of records in a set. +* Arbitrary Constraints:: Constraints records must comply with. +@end menu + + +@node Mandatory Fields +@section Mandatory Fields + +@cindex @code{%mandatory} +@cindex mandatory fields +@cindex requiring certain fields in records +@cindex compulsory fields + +Sometimes, you want to make sure that @emph{every} record of a particular type +contains certain fields. +To do this, use the special field @code{%mandatory}. +The usage is: + +@example +%mandatory: @var{field1} @var{field2} @dots{} @var{fieldN} +@end example +@noindent +The field names are separated by one or more +blank characters. + +@cindex field, compulsory fields +@cindex field, mandatory fields +The fields listed in a @code{%mandatory} entry are +non-optional; @ie{} at least one field with this name shall be present +in any record of this kind. +@cindex integrity problems +Records violating this restriction are +invalid and a checking tool will report the situation as +a data integrity failure. + +Consider for example an ``address book'' database where each record +stores the information associated with a contact. The records will be +heterogeneous, in the sense they won't all contain exactly the same +fields: the contact of an Internet shop will probably have a +@code{URL} field, while the entry for our grandmother probably won't. +We still want to make sure that every entry has a field with the name +of the contact. In this case, we could use @code{%mandatory} as +follows: + +@example +%rec: Contact +%mandatory: Name + +Name: Granny +Phone: +12 23456677 + +Name: Yoyodyne Corp. +Email: sales@@yoyod.com +Phone: +98 43434433 +@end example + +A word of caution, however: In many situations, especially in day to day social +interaction, it is common to find that certain information is simply unavailable. +For example, although every person has a date of birth, some people will refuse +to provide that information. + +It is probably wise therefore to avoid stipulating a field as mandatory, unless it is +essential to the enterprise. +Otherwise, +a data entry clerk faced with this situation will have to make the choice between +dropping the entry entirely or entering some fake data to keep the system happy. + + +@node Prohibited Fields +@section Prohibited Fields + +@cindex @code{%prohibit} +@cindex restricting fields from records +@cindex field, forbidden fields +@cindex prohibited fields + +The inverse of @code{%mandatory} is @code{%prohibit}. +Prohibited fields may not occur in @emph{any} record of the given type. +The usage is: + +@example +%prohibit: @var{field1} @var{field2} @dots{} @var{fieldN} +@end example +@noindent The field names are separated by one or more blank characters. + +@noindent +Fields listed in a @code{%prohibit} entry are +forbidden; @ie{} no field with this name should be present +in any record of this kind. +Again, records violating this restriction +are invalid. + +@noindent +Several @code{%prohibit} fields can appear in +the same record descriptor. +The set of prohibited fields +is the union of all the entries. +For example, in the following +database both @code{Id} and @code{id} are prohibited: + +@example +%rec: Entry +%prohibit: Id +%prohibit: id +@end example + +One possible use case for prohibited fields arises +when some field name is reserved for some future +use. +For example, if we were organizing a sports competition, we would want +competitors to register before the event. +However a competitor's @code{result} should not and cannot be entered +before the competition takes place. +Initially then, we would change the record +descriptor as follows: + +@example +%rec: Contact +%mandatory: Name +%prohibit: result +@end example +@noindent +At the start of the event, the @code{%prohibit} line can be deleted, to +allow results to be entered. + +@node Allowed Fields +@section Allowed Fields + +@cindex @code{%allowed} +@cindex restricting fields from records +@cindex field, allowed fields +@cindex allowed fields + +In some cases we know the set of fields that may appear in the records +of a given type, even if they are not mandatory. The @code{%allowed} +special field is used to specify this restriction. The usage is: + +@example +%allowed: @var{field1} @var{field2} @dots{} @var{fieldN} +@end example +@noindent The field names are separated by one or more blank +chracters. + +@noindent +If there are more or one @code{%allowed} fields in a record +descriptor, all fields of all the records in the record set must be in +the union of @code{%allowed}, @code{%mandatory} and @code{%key}. +Otherwise an integrity error is raised. + +@noindent +Several @code{%allowed} fields can appear in the same record +descriptor. The set of allowed fields is the union of all the +entries. + +@node Keys and Unique Fields +@section Keys and Unique Fields + +@cindex @code{%unique} +@cindex @code{%key} +The @code{%unique} and @code{%key} special fields are +used to avoid several instances of the +same field in a record, and to implement keys in record sets. +Their usage is: + +@example +%unique: @var{field1} @var{field2} @dots{} @var{fieldN} +%key: @var{field} +@end example + +@noindent +The field names are separated by one or more blank characters. + +@cindex unique fields +Normally it is permitted for a record to contain two or more fields of +the same name. +The @code{%unique} special field revokes this permissiveness. +A field declared ``unique'' cannot appear more than once in a single record. + +For example, an entry in an address book database could contain an +@code{Age} field. It does not make sense for a single person to be of +several ages. So, a field could be declared as ``unique'' in the +corresponding record descriptor as follows: + +@example +%rec: Contact +%mandatory: Name +%unique: Age +@end example + +@noindent +Several @code{%unique} fields can appear in the same record +descriptor. The set of unique fields is the union of all the entries. + +@cindex primary key +@code{%key} makes the referenced field the primary key of the record +set. +The primary key behaves as if both @code{%unique} and +@code{%mandatory} had been specified for that field. +Additionally, there is further restriction, @viz{} +a given value of a primary key field may appear no more than once within a +record set. + +Consider for example a database of items in stock. Each item is +identified by a numerical @code{Id} field. No item may have more than +one @code{Id}, and no items may exist without an associated +@code{Id}. Additionally, no two items may share the same @code{Id}. +This common situation can be implementing by declaring @code{Id} as +the key in the record descriptor: + +@example +%rec: Item +%key: Id +%mandatory: Title + +Id: 1 +Title: Box + +Id: 2 +Title: Sticker big +@end example + +@noindent +It would not make sense to have several primary keys in a record set. +Thus, it is not allowed to have several @code{%key} fields in the +same record descriptor. +It is also forbidden for two items to share the same `Id' value. +@cindex integrity problems +Both of these situations would be data integrity +violations, and will be reported by a checking tool. + +Elsewhere, we discuss how primary keys can be used to link one record set to +another using primary keys together with foreign keys. @xref{Queries which Join Records}. + + +@node Size Constraints +@section Size Constraints + +@cindex @code{%size} +@cindex size, record size +@cindex record size +Sometimes it is desirable to place constraints on entire records. +This can be done with the @code{%size} special field which is used to limit the +number of records in a record set. Its usage is: + +@example +%size: [@var{relational_operator}] @var{number} +@end example + +@noindent +If no operator is specified then @var{number} is interpreted as the +exact number of records of this type. The number can be any integer +literal, including hexadecimal and octal constants. For example: + +@example +%rec: Day +%size: 7 +%type: Name enum ++ Monday Tuesday Wednesday Thursday Friday ++ Saturday Sunday +%doc: There should be exactly 7 days. +@end example + +@cindex operators +The optional @var{relational_operator} shall be one of @code{<}, +@code{<=}, @code{>} and @code{>=}@. For example: + +@example +%rec: Item +%key: Id +%size: <= 100 +%doc: We have at most 100 different articles. +@end example + +It is valid to specify a size of @code{0}, meaning that no records of +this type shall exist in the file. + +Only one @code{%size} field shall appear in a record descriptor. + + +@node Arbitrary Constraints +@section Arbitrary Constraints +@cindex @code{%constraint} +@cindex restricting values of fields + +Occasionally, @code{%mandatory}, @code{%prohibit} and @code{%size} are just not flexible enough. +We might, for instance, want to ensure that @emph{if} a field is present, +then it must have a certain relationship to other fields. +Or we might want to stipulate that under certain conditions only, a record contains +a particular field. + +To this end, recutils provides a way for arbitrary field constraints to be defined. +These permit restrictions on the presence and/or value of fields, based upon the value or +presence of other fields within that record. +This is done using the @code{%constraint} special field. +Its usage is: + +@example +%constraint: @var{expr} +@end example + +@noindent +where @var{expr} is a selection expression (@pxref{Selection Expressions}). +When a constraint is +present in a record set it means that all the records of that type +must satisfy the selection expression, @ie{} the evaluation of the +expression with the record returns 1. Otherwise an integrity error is +raised. +@cindex integrity problems + + +Consider for example a record type @code{Task} featuring two fields of +type date called @code{Start} and @code{End}. We can use a constraint +in the record set to specify that the task cannot start after it +finishes: + +@example +%rec: Task +%type: Start,End date +%constraint: Start << End +@end example + +@cindex implies, logical implication +@cindex constraints +The ``implies'' operator @code{=>} is especially useful when defining +constraints, since it can be used to specify conditional constraints, +@ie{} constraints applying only in certain records. For example, we +could specify that if a task is closed then it must have an @code{End} +date in the following way: + +@example +%rec: Task +%type: Start,End date +%constraint: Start << End +%constraint: Status = 'CLOSED' => #End +@end example + +It is acceptable to declare several constraints in the same record +set. + +@node Checking Recfiles +@chapter Checking Recfiles + +@cindex integrity, checking +Sometimes, when creating a recfile by hand, typographical errors or other +mistakes will occur. +If a recfile contains such mistakes, then one cannot rely upon the results +of queries or other operations. +Fortunately +there is a tool called @command{recfix} which can find these errors. +It is a good idea to get into the habit of running @command{recfix} on +a file after editing it, and before trying other commands. + + +@menu +* Syntactical Errors:: Fixing structure errors in recfiles. +* Semantic Errors:: Fixing semantic errors in recfiles. +@end menu + +@node Syntactical Errors +@section Syntactical Errors + +One easy mistake is to forget the colon separating the field name from +its value. + +@example +%rec: Article +%key Id + +Name: Thing +Id: 0 +@end example +@cindex @command{recfix} +@noindent +Running @command{recfix} on this file will immediately tell us that +there is a problem: + +@example +$ recfix --check inventory.rec +inventory.rec: 2: error: expected a record +@end example +@noindent +Here, @command{recfix} has diagnosed a problem in the file @file{inventory.rec} +and the problem lies at line 2. +If, as in this case, @command{recfix} shows there is a problem with +the recfile, you should attend to that problem before trying to use +any other recutils program on that file, otherwise strange things +could happen. +The @code{--check} flag is optional but in normal execution not required because that is the +default operation. + +@node Semantic Errors +@section Semantic Errors + +@cindex special fields +However @command{recfix} checks more than the syntactical integrity of the recfile. +It also checks certain semantics and that the data is self-consistent. +To do this, it uses the special fields of the record, some of which were introduced +above (@pxref{Constraints on Record Sets}). +It is a good idea to use the special fields to stipulate the ``enterprise rules'' +of the data. + +Errors will be reported if any of the following special keywords are present and +the data does not match the stipulated conditions +@table @code +@item %mandatory +The mandated fields are missing from a record. +@item %prohibit +The prohibited fields are present in a record. +@item %unique +There is more than one field in a single record of the given name. +@item %key +Two or more records share the same value of the field which is the key field. +@item %typedef and %type +A field has a value which does not conform to the specified type. +@item %size +The number of records does not conform to the specified restriction. +@item %constraint +A field does not conform to the specified constraint. +@item %confidential +An unencrypted value exists for a confidential field. +@end table + + +@node Remote Descriptors +@chapter Remote Descriptors + +@cindex @code{%rec} +The @code{%rec} special field is used for two main purposes: to +identify a record as a record descriptor, and to provide a name for +the described record set. The synopsis of the usage of the field is +the following: + +@example +%rec: @var{type} [@var{url_or_file}] +@end example + +@noindent +@var{type} is the name of the kind of records described by the +descriptor. It is mandatory to specify it, and it follows the same +lexical conventions used by field names. @xref{Fields}. +There is a non-enforced convention to use singular nouns, because the +name makes reference to the type of a single entity, even if it +applies to all the records contained in the record set. For example, +the following record set contains transactions, and the type specified +in the record descriptor is @code{Transaction}. + +@example +%rec: Transaction + +Id: 10 +Title: House rent + +Id: 11 +Title: Loan +@end example + +@noindent +Only one @code{%rec} field should be in a record descriptor. If +there are more it is an integrity violation. It is highly +recommended (but not enforced) to place this field in the first +position of the record descriptor. + +Sometimes it is convenient to store records of the same type in +different files. +@cindex integrity problems +The duplication of record descriptors in this case would surely lead to +consistency problems. +A possible solution would +be to keep the record descriptor in a separated file and then include +it in any operation by using pipes. For example: + +@example +$ cat descriptor.rec data.rec | recsel @dots{} +@end example + +@cindex external descriptor +@cindex descriptor, external descriptor +@noindent +For those cases it is more convenient to use a @dfn{external +descriptor}. External descriptors can be built appending a file path +to the @code{%rec} field value, like: + +@example +%rec: FSD_Entry /path/to/file.rec +@end example + +The previous example indicates that a record descriptor describing the +@code{FSD_Entry} records shall be read from the file +@file{/path/to/file.rec}. A record descriptor for @code{FSD_Entry} +may not exist in the external file. Both relative and absolute paths +can be specified there. + +@cindex URL +@cindex remote descriptors +URLs can be used as sources for external descriptors as well. In that +case we talk about @dfn{remote descriptors}. For example: + +@example +%rec: Department http://www.myorg.com/Org.rec +@end example + +@noindent +The URL shall point to a text file containing rec data. If there is a +record descriptor in the remote file documenting the @code{Department} +type, it will be used. + +Note that the local record descriptor can provide additional fields to +``expand'' the record type. For example: + +@example +%rec: FSD_Entry http://www.jemarch.net/downloads/FSD.rec +%mandatory: Rating +@end example + +@noindent +The record descriptor above is including the contents of the +@code{FSD_Entry} record descriptor from the URL, and adding them to +the local record descriptor, that in this case contains just the +@code{%mandatory} field. + +If you are using GNU recutils (@pxref{Invoking the Utilities}) to +process your recfiles, any URL +schema supported by @code{libcurl} will work. + +@node Grouping and Aggregates +@chapter Grouping and Aggregates + +Grouping and aggregate functions are two related features which +are useful to extract statistics from a record set, or a +subset of that record set. + +@menu +* Grouping Records:: Combining records by fields. +* Aggregate Functions:: Statistics and more. +@end menu + +@node Grouping Records +@section Grouping Records +@cindex grouping + +Consider a recfile containing a list of items in a shop +inventory. For each item it is stored its type, its category, its +price, the date of the last selling operation of an item of that type, +and the amount of items currently available in stock. A sample of +such a database could be: + +@example +Type: EC Car +Category: Toy +Price: 12.2 +LastSell: 20-April-2012 +Available: 623 + +Type: Terria +Category: Food +Price: 0.60 +LastSell: 22-April-2012 +Available: 8239 + +Type: Typex +Category: Office +Price: 1.20 +LastSell: 22-April-2012 +Available: 10878 + +Type: Notebook +Category: Office +Price: 1.00 +LastSell: 21-April-2012 +Available: 77455 + +Type: Sexy Puzzle +Category: Toy +Price: 6.20 +LastSell: 6.20 +Available: 12 +@end example + +@noindent +Now imagine we are interested in grouping the contents of the +@code{Items} record set in groups of items of the same category. We +can do it using the @command{-G} command line argument for +@command{recsel}. This argument accepts a list of fields separated by +commas. The argument can be read as ``group by''. + +In this case we want to group by @code{Category}, so we would do: + +@example +$ recsel -G Category +Type: Terria +Category: Food +Price: 0.60 +LastSell: 22-April-2012 +Available: 8239 + +Type: Typex +Category: Office +Price: 1.20 +LastSell: 22-April-2012 +Available: 10878 +Type: Notebook +Price: 1.00 +LastSell: 21-April-2012 +Available: 77455 + +Type: EC Car +Category: Toy +Price: 12.2 +LastSell: 20-April-2012 +Available: 623 +Type: Sexy Puzzle +Price: 6.20 +LastSell: 6.20 +Available: 12 +@end example + +@noindent +We can see that the output is three records, corresponding to the three +different categories of items present in the database. +However, we are only interested in the types of products in each category, +so we can remove unwanted information using @code{-p}: + +@example +$ recsel -G Category -p Category,Type items.rec +Category: Food +Type: Terria + +Category: Office +Type: Typex +Type: Notebook + +Category: Toy +Type: EC Car +Type: Sexy Puzzle +@end example + +@noindent +It is also possible to group by several fields. We could group by +both @code{Category} and @code{LastSell}: + +@example +$ recsel -G Category,LastSell -p Category,LastSell,Type items.rec +Category: Food +LastSell: 22-April-2012 +Type: Terria + +Category: Office +LastSell: 21-April-2012 +Type: Notebook + +Category: Office +LastSell: 22-April-2012 +Type: Typex + +Category: Toy +LastSell: 20-April-2012 +Type: EC Car + +Category: Toy +LastSell: 6.20 +Type: Sexy Puzzle +@end example + +@node Aggregate Functions +@section Aggregate Functions +@cindex aggregate function + +recutils supports @dfn{aggregate functions}. These are so called +because they accept a record set and a field name as inputs and +generate a single result. Usually this result is numerical. + +The supported aggregate functions are the following: + +@table @code +@item Count(FIELD) +Counts the number of occurrences of a field. +@item Avg(FIELD) +Calculates the average (mean) of the numerical values of a field. +@item Sum(FIELD) +Calculates the sum of the numerical values of a field. +@item Min(FIELD) +Calculates the minimum numerical value of a field. +@item Max(FIELD) +Calculates the maximum numerical value of a field. +@end table + +The aggregate functions are to be invoked in the field expressions in +@command{recsel}. By default they are applied to the totality of the +records in a record set. For example, using the items database from +the previous section, we can do calculations as in the following examples. + +The SQL aggregate functions can be applied to the totality of the +tuples in the relation. For example, using the @code{Count} aggregate +function we can calculate the number of fields named @code{Category} +present in the record set as follows: + +@example +$ recsel -p "Count(Category)" items.rec +Count_Category: 5 +@end example + +@noindent +The result is a field whose name is derived from the function name and +the field passed as its parameter, separated by an underline. This +name scheme probably suffices for most purposes, but it is always +possible to use a rewrite rule to obtain something different: + +@example +$ recsel -p "Count(Category):NumCategories" items.rec +NumCategories: 5 +@end example + +@noindent +You can use different letter case in writing the name of the aggregate, and +this will be reflected in the field name: + +@example +$ recsel -p "CoUnT(Category)" items.rec +CoUnT_Category: 5 +@end example + +@noindent +It is possible to use more than one aggregate function in the field +expression. Suppose we are also interested in the average price of +the items we sell. We can use the @code{Avg} aggregate: + +@example +$ recsel -p "Count(Category),Avg(Price)" items.rec +Count_Category: 5 +Avg_Price: 4.240000 +@end example + +@noindent +Now let's add a field along with an aggregate function to the field +expression and see what we get: + +@example +$ recsel -p "Type,Avg(Price)" items.rec +Type: EC Car +Avg_Price: 12.200000 + +Type: Terria +Avg_Price: 0.600000 + +Type: Typex +Avg_Price: 1.200000 + +Type: Notebook +Avg_Price: 1 + +Type: Sexy Puzzle +Avg_Price: 6.200000 +@end example + +@noindent +We get five records! The reason is that when @emph{only} aggregate +functions are part of the field expression, they are applied to the single +record that would result from concatenating all the records in the record +set together. However, when a regular field appears in the field +expression the aggregate functions are applied to the individual +records. This is still useful in some cases, such as a database of +maintainers: + +@example +Name: Jose E. Marchesi +Email: jemarch@@gnu.org +Email: jemarch@@es.gnu.org + +Name: Luca Saiu +Email: positron@@gnu.org +@end example + +@noindent +Lets see how many emails each maintainer has: + +@example +$ recsel -p "Name,Count(Email)" maintainers.rec +Name: Jose E. Marchesi +Count_Email: 2 + +Name: Luca Saiu +Count_Email: 1 +@end example + +@noindent +Aggregate functions are most useful when we combine them with +grouping. This is when we are interested in some property of a subset +of the records in the database. For example, the average prices of +each item category stored in the database can be obtained by +executing: + +@example +$ recsel -p "Category,Avg(Price)" -G Category items.rec +Category: Food +Avg_Price: 0.600000 + +Category: Office +Avg_Price: 1.100000 + +Category: Toy +Avg_Price: 9.200000 +@end example + +@noindent +If we were interested in the actual prices that result in each average +we can do: + +@example +$ recsel -p "Category,Price,Avg(Price)" -G Category items.rec +Category: Food +Price: 0.60 +Avg_Price: 0.600000 + +Category: Office +Price: 1.20 +Price: 1.00 +Avg_Price: 1.100000 + +Category: Toy +Price: 12.2 +Price: 6.20 +Avg_Price: 9.200000 +@end example + +@node Queries which Join Records +@chapter Queries which Join Records + +Suppose you wanted to add the residential address of the people in +the @file{acquaintances.rec} file from +@ref{Simple Selections}. + + +One way to do this is as follows: +@example +%type: Dob date + +Name: Alfred Nebel +Dob: 20 April 2010 +Email: alf@@example.com +Address: 42 Abbeter Way, Inprooving, WORCS +Telephone: 01234 5676789 + +Name: Mandy Nebel +Dob: 21 February 1972 +Email: mandy@@example.com +Address: 42 Abbeter Way, Inprooving, WORCS +Telephone: 01234 5676789 + +Name: Bertram Nebel +Dob: 3 January 1966 +Email: bert@@example.com +Address: 42 Abbeter Way, Inprooving, WORCS +Telephone: 01234 5676789 + +Name: Charles Spencer +Dob: 4 July 1997 +Email: charlie@@example.com +Address: 2 Serpe Rise, Little Worning, SURREY +Telephone: 09876 5432109 + + Name: Dirk Spencer +Dob: 29 June 1945 +Email: dirk@@example.com +Address: 2 Serpe Rise, Little Worning, SURREY +Telephone: 09876 5432109 + +Name: Ernest Wright +Dob: 26 April 1978 +Email: ernie@@example.com +Address: 1 Wanter Rise, Greater Inncombe, BUCKS +@end example + + +This will work fine. +However you will notice that there are two addresses where more than one person +live (presumably they are members of the same family). +This has a number of disadvantages: +@itemize @minus +@item You have to type (or copy) the same information several times. +@item Should a family move house, then you would have to update the addresses (and telephone number) of all the family members. +@item A typing error in one of the addresses would lead an automatic query to erroneously suggest that the people lived at different addresses. +@item It unnecessarily increases the size of the recfile. +@end itemize + + +@menu +* Foreign Keys:: Referring to records from another records. +* Joining Records:: Performing cross-joins. +@end menu + + +@node Foreign Keys +@section Foreign Keys + +@cindex record sets +A better way would be to separate the addresses and people into different record sets. +@cindex duplication, avoiding +The first record set might look like this: + +@example +%rec: Person +%type: Dob date +%type: Abode rec Residence + + +Name: Alfred Nebel +Dob: 20 April 2010 +Email: alf@@example.com +Abode: 42AbbeterWay + +Name: Mandy Nebel +Dob: 21 February 1972 +Email: mandy@@example.com +Mobile: 0555 342123 +Abode: 42AbbeterWay + +Name: Bertram Nebel +Dob: 3 January 1966 +Email: bert@@example.com +Abode: 42AbbeterWay + +Name: Charles Spencer +Dob: 4 July 1997 +Email: charlie@@example.com +Abode: 2SerpeRise + +Name: Dirk Spencer +Dob: 29 June 1945 +Email: dirk@@example.com +Mobile: 0555 342123 +Abode: 2SerpeRise + +Name: Ernest Wright +Dob: 26 April 1978 +Abode: ChezGrampa + +@end example + +@noindent and the second (following in the same file), like this: + +@example + +%rec: Residence +%key: Id + +Address: 42 Abbeter Way, Inprooving, WORCS +Telephone: 01234 5676789 +Id: 42AbbeterWay + +Address: 2 Serpe Rise, Little Worning, SURREY +Telephone: 09876 5432109 +Id: 2SerpeRise + +Address: 1 Wanter Rise, Greater Inncombe, BUCKS +Id: ChezGrampa +@end example + +Here you can see that there are two record sets @viz{} @code{Person} +and @code{Residence}. +There are six people, but only three residences, because some residences +accommodate more than one person. +@cindex @code{%key} +Note also that the @code{Residence} descriptor has the entry @code{%key: Id} +whilst the @code{Person} descriptor has @code{%type: Abode rec Residence}. +@cindex foreign key +@cindex key, foreign key +@cindex @code{rec}, type description +This is because @code{Abode} is the foreign key which identifies the residence +where a person lives. + +@cindex readability +We could have declared the @code{Id} field as @code{%auto}. This would have had +the advantage that we need not manually update it. +However, we decided that the @code{Abode} field values in the @code{Person} records +are better as alphanumeric fields, so that they can contain +human readable values. In this way, it is self-evident by reading a @code{Person} +record where that person lives. +Yet since the @code{Id} field is declared using the @code{%key} special field +name, you can be sure that you don't accidentally reuse an existing key. + +@node Joining Records +@section Joining Records + +The above example has also added a new field to the @code{Person} record set +to contain that person's mobile phone number. Note that the @code{Telephone} +field belongs to the @code{Residence} record set because that contains the telephone +number of the home, +whereas @code{Mobile} belongs to @code{Person} since mobile telephones are normally +used exclusively by one individual. + +If we want to look up the name and address of a person in our recfile, we can +use @command{recsel} as before. +Because we now have more than one record set in the @file{acquaintances.rec} +file, we have to tell @command{recsel} in which record set we want to +look up +records. +We do this with the @code{-t} flag as follows: + +@example +$ recsel -t Person -P Name,Abode acquaintances.rec +Alfred Nebel +42AbbeterWay + +Mandy Nebel +42AbbeterWay + +Bertram Nebel +42AbbeterWay + +Charles Spencer +2SerpeRise + +Dirk Spencer +2SerpeRise + +Ernest Wright +ChezGrampa +@end example + +This result tells us the names of all the people in the recfile, as well as +giving a concise and hopefully effective reminder telling us where they live. +However these results would not be useful to someone unacquainted with the +individuals. +They need a list of names and full addresses. +We can use @command{recsel} to produce such a list: + +@example +$ recsel -t Person -j Abode acquaintances.rec +Name: Charles Spencer +Dob: 4 July 1997 +Email: charlie@@example.com +Abode_Address: 2 Serpe Rise, Little Worning, SURREY +Abode_Telephone: 09876 5432109 +Abode_Id: 2SerpeRise + +Name: Dirk Spencer +Dob: 29 June 1945 +Email: dirk@@example.com +Mobile: 0555 342123 +Abode_Address: 2 Serpe Rise, Little Worning, SURREY +Abode_Telephone: 09876 5432109 +Abode_Id: 2SerpeRise + +Name: Ernest Wright +Dob: 26 April 1978 +Abode_Address: 1 Wanter Rise, Greater Inncombe, BUCKS +Abode_Id: ChezGrampa +@end example + +The @code{-t} flag we have seen before. It tells @command{recsel} that we want +to extract records of type @code{Person}. +@cindex join +The @code{-j} flag is new. It says that we want to perform a @dfn{join}. +Specifically we want to join the @code{Person} records according to their +@code{Abode} field. + +In the above example, @command{recsel} displays several field names which +do not appear anywhere in the input @eg{} @code{Abode_Address}. +This is the @code{Address} field in the record joined by the foreign key @code{Abode}. +In this example probably only the name and address are of interest. +The other information such as date of birth is incidental. +The foreign key @code{Abode_Id} is certainly not wanted in the output since it +is redundant. +As usual, you can use the @code{-P} or @code{-p} options to limit the fields +which will be displayed. +However the full joined field name, if appropriate, must be specified. +So the names and addresses without the other information can be retrieved thus: + +@example +$ recsel -t Person -j Abode -p Name,Abode_Address acquaintances.rec +Name: Charles Spencer +Abode_Address: 2 Serpe Rise, Little Worning, SURREY + +Name: Dirk Spencer +Abode_Address: 2 Serpe Rise, Little Worning, SURREY + +Name: Ernest Wright +Abode_Address: 1 Wanter Rise, Greater Inncombe, BUCKS +@end example + +@node Auto-Generated Fields +@chapter Auto-Generated Fields + +@cindex @code{%auto} +@cindex automatically generated values +Consider for example a list of articles in stock in a toy store: + +@example +%rec: Item +%key: Description + +Description: 2cm metal soldier WWII +Amount: 2111 + +Description: Flying Helicopter Indoor Maxi +Amount: 8 + +@dots{} +@end example + +It would be natural to identify the items by their descriptions, but it +is also error prone: was it ``Flying Helicopter Indoor Maxi'' or +``Flying Helicopter Maxi Indoor''? Was ``Helicopter'' in lower case or +upper case? + +@cindex primary key +@cindex key, primary key +@cindex @code{%key} +@cindex ID numbers +Thus it is quite common in databases to use some kind of numeric ``Id'' to +uniquely identify items like those ones, because numbers are +easy to increment and manipulate. So we could add a new +numeric @code{Id} field and use it as the primary key: + +@example +%rec: Item +%key: Id +%mandatory: Description + +Id: 0 +Description: 2cm metal soldier WWII +Amount: 2111 + +Id: 1 +Description: Flying Helicopter Indoor Maxi +Amount: 8 + +@dots{} +@end example + +A problem with this approach is that we must be careful to not assign +already used ids when we introduce more articles in the +database. Other than its uniqueness, it is not important which number +is associated with which article. + +To ease the management of those Ids database systems use to provide a +facility called ``auto-counters''. Auto-counters can be implemented in +recfiles using the @code{%auto} directive in the record descriptor. +Its usage is: + +@example +%auto: @var{field1} @var{field2} @dots{} @var{fieldN} +@end example + +@noindent +The list of field names are separated by one or more blank characters. +There can be several @code{%auto} fields in the same record +descriptor, the effective list of auto-generated fields being the +union of all the entries. + +When @command{recins} inserts a new record in the recfile, it looks +for any declared auto field. If any of these fields are not provided +explicitly in the command line then @command{recins} generates them +along with the user-provided fields. Such auto fields are generated +at the beginning of the new records, in the same order they are found +in the @code{%auto} directives. + +For example, consider a @file{items.rec} database with an empty record +set: + +@example +%rec: Item +%key: Id +%auto: Id +%mandatory: Description +@end example + +@noindent +If we insert a new record and we do not specify an @code{Id} then it +will be generated automatically by @command{recins}: + +@example +$ recins -t Item -f Description -v 'recutils t-shirts' \ + -f Amount -v 200 \ + items.rec +$ cat items.rec +%rec: Item +%key: Id +%auto: Id +%mandatory: Description + +Id: 0 +Description: recutils t-shirts +Amount: 200 +@end example + +@noindent +The concrete effect of the @code{%auto} directive depends on the type +of the affected field. The following sections document how. + +@menu +* Counters:: Generating incremental Ids. +* Unique Identifiers:: Generating universally unique Ids. +* Time-Stamps:: Tracking the creation of records. +@end menu + +@node Counters +@section Counters +@cindex counters + +If an auto field is of type @code{integer} or @code{range} then any +newly generated field will use the ``next biggest'' unused number in the +record set. + +Consider the toy inventory database introduced above. We could +declare the @code{Id} field to be generated automatically: + +@example +%rec: Item +%key: Id +%type: Id int +%mandatory: Description +%auto: Id + +Id: 0 +Description: 2cm metal soldier WWII +Amount: 2111 +@end example + +@noindent +When the next new item is introduced in the database, @command{recins} +will note the @code{%auto}, and create a new @code{Id} field for the +new record with the next-biggest unused integer, since @code{Id} is +declared to be of type @code{int}. In this example, the new record +would have an Id of @code{1}. The database can still provide an +explicit Id for the new record. In that case the field is not +generated automatically. + +Note that if no explicit type is defined for an auto generated field +then it is assumed to be an integer. + +@node Unique Identifiers +@section Unique Identifiers +@cindex unique identifiers +@cindex uuid + +Universally Unique Identifiers, often abbreviated as UUIDs, can also +be auto-generated using recutils. Suppose you maintain a database +with events featuring the following record descriptor: + +@example +%rec: Event +%key: Id +%mandatory: Title Date +@end example + +@noindent +What would be appropriate to identify each event? We could use an +integer and declare it as auto-generated. After adding two events the +database would look like this: + +@example +%rec: Event +%key: Id +%mandatory: Title Date + +Id: 0 +Title: Team meeting +Date: 12-08-2013 + +Id: 1 +Title: Dave's birthday +Date: 20-12-2013 +@end example + +@noindent +However, suppose that we want to share our events with other people, +@ie{} to send them event records and to incorporate their records into +our own database. In this case the @code{Id}s would collide. A good +solution is to use @code{uuids} and declare them as @code{auto}: + +@example +%rec: Event +%key: Id +%type: Id uuid +%mandatory: Title Date + +Id: f81d4fae-7dec-11d0-a765-00a0c91e6bf6 +Title: Team meeting +Date: 12-08-2013 + +Id: f81d4fae-dc18-11d0-a765-a01328400a0c +Title: Dave's birthday +Date: 20-12-2013 +@end example + +@node Time-Stamps +@section Time-Stamps + +@cindex timestamps +Auto generated dates can be used to implement automatic timestamps. +Consider for example a ``Transfer'' record set registering bank +transfers. We want to save a timestamp every time a transfer is done, +so we include an @code{%auto} for the date: + +@example +%rec: Transfer +%key: Id +%type: Id int +%type: Date date +%auto: Id Date +@end example + +@node Encryption +@chapter Encryption + +@cindex encryption + +For ethical or security reasons it is sometimes necessary that information +in a recfile should not be readable by unauthorized people. +One way to prevent a recfile from being read is to use the security features of +the operating system. +A more secure way would be to encrypt the entire recfile using a free strong encryption program +such as @uref{http://gnu.org/software/gnupg,GnuPG}. +The disadvantage of both these methods is that the entire +recfile has to be secured +when it may well be the case that only certain data need to be protected. + +Recutils offers a way to encrypt specified fields in a record, whilst leaving +the rest in clear text. + +@menu +* Confidential Fields:: Declaring fields as sensitive data. +* Encrypting Files:: Encrypt confidential fields. +* Decrypting Data:: Reading encrypted fields. +@end menu + +@node Confidential Fields +@section Confidential Fields + +@cindex @code{%confidential} +@cindex passwords +@cindex confidential data +To specify that a field should be encrypted, use the @code{%confidential} +special field. +This special field declares a set of fields as +@dfn{confidential}, meaning they contain secret data such as +passwords or personal information. +Its usage is: + +@example +%confidential: @var{field1} @var{field2} @dots{} @var{fieldN} +@end example + +@noindent +The field names are separated by one or more blank characters. +There can be several @code{%confidential} fields in the same record +descriptor, the effective list of confidential fields being the union +of all the entries. + +@cindex encrypted fields +Declaring a field as confidential indicates that its contents must not +be stored in plain text, but encrypted with a password-based +mechanism. When the information is retrieved from the database the +confidential fields are unencrypted if the correct password is +provided. Likewise, when information is inserted in the database the +confidential fields are encrypted with some given password. + +For example, consider a database of users of some service. For each +user we want to store a name, a login name, an email address and a +password. All this information is public with the obvious exception +of the password. Thus we declare the @code{Password} field as +confidential in the corresponding record descriptor: + +@example +%rec: Account +%type: Name line +%type: Login line +%type: Email email +%confidential: Password +@end example + +The rec format does not impose the usage of a specific encryption +algorithm, but requires that: + +@itemize @minus +@item The algorithm must be password-based. +@item The value of any encrypted field shall begin with the string +@samp{encrypted-} followed by the encrypted data. +@item The encrypted data must be encoded in some ASCII encoding such +as base64. +@end itemize + +The above rules assure that it is possible to determine whether a +given field is encrypted. For example, the following is an excerpt +from the account database described above. It contains an entry with +the password encrypted and another with the password unencrypted: + +@example +Name: Mr. Foo +Login: foo +Email: foo@@foo.com +Password: encrypted-AAABBBCCDDDEEEFFF + +Name: Mr. Bar +Login: bar +Email: bar@@bar.com +Password: secret +@end example + +Unencrypted confidential fields are a data integrity error, +and utilities like @code{recfix} will report it. +@cindex integrity problems +The same utility can +be used to ``fix'' the database by massively encrypting any +unencrypted field. + +Nothing prevents the usage of several passwords in the same database. +This allows the establishment of several level of securities or +security profiles. For example, we may want to store different +passwords for different online services: + +@example +%rec: Account +%confidential: WebPassword ShellPassword +@end example + +@noindent +We could then encrypt WebPassword entries using a password shared +among all the webmasters, and the ShellPassword entries with a more +restricted password available only to the administrator of the +machine. + +Note that since the utilities only accept to specify one password at a +time different passwords cannot be specified at decryption time. This +means that in the example above the administrator would need to run +@command{recsel} twice in order to decrypt all the encrypted data in +the recfile. + +The GNU recutils fully support encrypted fields. See the documentation +for @command{recsel}, @command{recins} and @command{recfix} for details on how +to operate on files containing confidential fields. + +@node Encrypting Files +@section Encrypting Files + +@command{recins} allows the insertion of encrypted fields in a +database. When the @option{-s} (@option{--password}) command line option is +specified in the command line any field declared as confidential in +the record descriptor will get encrypted using the given passphrase. +If the command is executed interactively and @option{-s} is not used +then the user is asked to provide a password using the terminal. For +example, the invocation: + +@example +$ recins -t Account -s mypassword -f Login -v foo -f Password \ + -v secret accounts.rec +@end example + +@noindent +will encrypt the value of the @code{Password} field with +@code{mypassword} as long as the field is declared as confidential. +(@pxref{Confidential Fields} for details on confidential fields). + +@command{recins} will issue a warning if a confidential field is +inserted in the database but no password was provided to encrypt it. +This is to avoid having unencrypted sensitive data in the recfiles. + +@node Decrypting Data +@section Decrypting Data + +The contents of confidential fields can be read using the +@option{-s} (@option{--password}) command line option to @command{recsel}. When +used, any selected record containing encrypted fields will try to +decrypt them with the given password. If the operation succeeds then +the output will include the unencrypted data. Otherwise the +ASCII-encoded encrypted data will be emitted. + +If @command{recsel} is invoked interactively and no password is +specified with @option{-s}, the user will be asked for a password in +case one is needed. No echo of the password will appear in the screen. +The provided password will be used to decrypt all confidential fields +as if it was specified with @option{-s}. + +For example, consider the following database storing information about +the user accounts of some online service. Each entry stores a login, +a full name, email and a password. The password is declared as +confidential: + +@example +%rec: Account +%key: Login +%confidential: Password + +Login: foo +Name: Mr. Foo +Email: foo@@foo.com +Password: encrypted-AAABBBCCCDDD + +Login: bar +Name: Ms. Bar +Email: bar@@bar.org +Password: encrypted-XXXYYYZZZUUU +@end example + +@noindent +If we use @command{recsel} to get a list of records of type +@code{Account} without specifying a password, or if the wrong password +was specified in interactive mode, then we would get the following +output with the encrypted values: + +@example +$ cat accounts.rec | recsel -t Account -p Login,Password +Login: foo +Password: encrypted-AAABBBCCCDDD + +Login: bar +Password: encrypted-XXXYYYZZZUUU +@end example + +@noindent +If we specify a password and both entries were encrypted using that +password, we would get the unencrypted values: + +@example +$ recsel -t Account -s secret -p Login,Password accounts.rec +Login: foo +Password: foosecret + +Login: bar +Password: barsecret +@end example + +As mentioned above, a confidential field may be encrypted with +different passwords in different records (@pxref{Confidential Fields}). +For example, +we may have an entry in our database with data about the account of +the administrator of the online service. In that case we might want +to store the password associated with that account using a +different password than that for users. In that case the output of +the last command +would have been: + +@example +$ recsel -t Account -s secret -p Login,Password accounts.rec +Login: foo +Password: foosecret + +Login: bar +Password: barsecret + +Login: admin +Password: encrypted-TTTVVVBBBNNN +@end example + +@noindent +We would need to invoke @command{recsel} with the password used to +encrypt the admin entry in order to read it back unencrypted. + +@node Generating Reports +@chapter Generating Reports + +@cindex reports +Having a list of names and addresses, one might want to use this list +to address envelopes +(say, to send annual greeting cards). +Since addresses are normally written on several lines, it would be appropriate +then to split the @code{Address} field values across multiple lines as described in +@ref{Fields}. +Suitable text can now be obtained thus: + +@example +$ recsel -t Person -j Abode -P Name,Abode_Address acquaintances.rec +Charles Spencer +2 Serpe Rise, +Little Worning, +SURREY + +Dirk Spencer +2 Serpe Rise, +Little Worning, +SURREY + +Ernest Wright +1 Wanter Rise, +Greater Inncombe, +BUCKS +@end example + +A business enterprise might want to go one step further and generate letters +(such as an advertisement or a recall notice) to customers. +Since @command{recsel} merely selects records and fields from record sets, on +its own it cannot do this; so +there is another command designed for this purpose, called @command{recfmt}. +@cindex @command{recfmt} +@cindex templates +This command uses a @dfn{template} which defines the general form of the +desired output. +A letter template might look as follows: +@example +@{@{Name@}@} +@{@{Abode_Address@}@} + +Dear @{@{Name@}@}, + + Re: Special offer for January + +We are delighted to be able to offer you a 95% discount on all car and +truck hire contracts between 1 January and 2 February. Please call us +to take advantage of this offer. + +Yours sincerely, + + +Karen van Rental (CEO) +^L +@end example + +It is best to place such a template into a file, so that you can edit it +as you wish. +Notice the instances of double braces enclosing a field name, @eg{} @code{@{@{Name@}@}}. +These are called @dfn{spots} and indicate places where the respective field's +value should be placed. +@cindex spots +Let's assume this template is in a file called @file{offer.templ}. +We can then pipe the output from @command{recsel} into @command{recfmt} in order +as follows: + +@example +$ recsel -t Person -j Abode acquaintances.rec | recfmt -f offer.templ +Charles Spencer +2 Serpe Rise, +Little Worning, +SURREY + +Dear Charles Spencer, + + Re: Special offer for January + +We are delighted to be able to offer you a 95% discount on all car and +. +. +. +@end example + +@noindent For each record that @command{recsel} selects, one copy of +@file{offer.templ} will be generated. Each spot will be replaced +with the field value corresponding to the field name in the spot. + +@menu +* Templates:: Formatted output. +@end menu + +@node Templates +@section Templates + +@cindex templates +A recfmt template is a text string that may contain @dfn{template +spots}. Those spots are substituted in the template using the +information of a given record. Any text that is not within a spot is +copied literally to the output. + +Spots are written surrounded by double curly braces, like: + +@example +@{@{@dots{}@}@} +@end example + +Spots contain selection expressions, that are executed every time the +template is applied to a record. The spot is then replaced by the +string representation of the value returned by the expression. + +For example, consider the following template: + +@example +Task @{@{Id@}@}: @{@{Summary@}@} +------------------------ +@{@{Description@}@} +-- +Created at @{@{CreatedAt@}@} +@end example + +@noindent +When applied to the following record: + +@example +Id: 123 +Summary: Fix recfmt. +CreatedAt: 12 December 2010 +Description: ++ The recfmt tool shall be fixed, because right ++ now it is leaking 200 megabytes per processed record. +@end example + +@noindent +The result is: + +@example +Task 123: Fix recfmt. +------------------------ +The recfmt tool shall be fixed, because right +now it is leaking 200 megabytes per processed record. +-- +Created at 12 December 2010 +@end example + +You can use any selection expression in the slots, including +conditionals and string concatenation. + +@node Interoperability +@chapter Interoperability + +Included in the recutils package are a number of utilities to assist +in the creation +of recfiles using data which already exists in other formats, +and for exporting data from recfiles so that it can be used in other applications. + +@menu +* CSV Files:: Converting recfiles to/from csv files. +* Importing MDB Files:: Importing MS Access Databases. +@end menu + +@node CSV Files +@section CSV Files + +@cindex csv +@cindex comma separated values + +Many applications are able to read and write files containing so-called +``comma separated values''. +Such files generally contain tabular data where the columns are separated +by commas and the rows by line feed and/or carriage return characters. +Although record sets are not tables, tables can be easily emulated +using records having the same fields in the same order. For example: + +@example +a: value +b: value +c: value + +a: value +b: value +c: value + +@dots{} +@end example + +In several respects records are more flexible than tables: + +@itemize @minus +@item Fields can appear in a different order in several records. +@item There can be several fields with the same name in a single record. +@item Records can differ in the number of fields. +@end itemize + +It is evident that records, such as those in recfiles, are a more +general structure than comma separated values. +This means that when converting from csv files to recfiles, certain +decisions need to be made. +The @code{rec2csv} utility (@pxref{Invoking rec2csv}) +implements an algorithm to deal with this problem +and generate a table that the user expects. + +The algorithm works as follows: + +@enumerate +@item +The utility first scans the specified +record set, building a list with the names that will become the table +header. + +@item +For each field, a header is added with the form: + +@example +FIELDNAME[_@var{n}] +@end example + +@noindent +where @var{n} is a number in the range @code{2..inf} and is the ``index'' of +the field in its containing record plus one. +For example, consider +the following record set: + +@example +a: a1 +b: b11 +b: b12 +c: c1 + +a: a2 +b: b2 +d: d2 +@end example + +The corresponding list of headers being: + +@example +a b b_2 c a b d +@end example + +@item +Then duplicates are removed: + +@example +a b b_2 c d +@end example + +@item +The resulting list of headers is then used to build the table in the +generated csv file. +@end enumerate + +In the above example the result would be + +@example +"a","b","b_2","c","d" +"a1","b11","b12","c1", +"a2","b2",,,"d2" +@end example + +As shown, missing fields are implemented as empty columns in the generated +csv. + +@node Importing MDB Files +@section Importing MDB Files + +Access files (@dfn{mdb files}) are collections of several relations, +also known as tables. Tables can be either @dfn{user tables} storing +user data, or @dfn{system tables} storing information such as forms, +queries or the relationships between the tables. + +It is possible to get a listing with the names of all tables stored in +a mdb file by calling @command{mdb2rec} in the following way: + +@example +$ mdb2rec -l sales.mdb +Customers +Products +Orders +@end example + +So @file{sales.mdb} stores user information in the tables Customers, +Products and Orders. If we want to include system tables in the +listing we can use the @samp{-s} command line option: + +@example +$ mdb2rec -s -l sales.mdb +MSysObjects +MSysACEs +MSysQueries +MSysRelationships +Customers +Products +Orders +@end example + +The tables with names starting with @command{MSys} are system tables. +The data stored in those tables is either not relevant to the recutils +user (used by the Access program to create forms and the like) or is +used in an indirect way by @command{mdb2rec} (such as the information +from MSysRelationships). + +Let's read some data from the @file{mdb} file. We can get the +relation of Products in rec format: + +@example +$ mdb2rec sales.mdb Products +%rec: Products +%type: ProductID int +%type: ProductName size 80 +%type: Discontinued bool + +ProductID: 1 +ProductName: GNU generation T-shirt +Discontinued: 0 + +@dots{} +@end example + +A @dfn{record descriptor} is created for the record set containing the +generated records, called Products. As seen in the example, @command{mdb2rec} is +able to generate type information for the fields. The list of +customers is similar: + +@example +$ mdb2rec sales.mdb Customers +%rec: Customers +%type: CustomerID size 4 +%type: CompanyName size 80 +%type: ContactName size 60 + +CustomerID: GSOFT +CompanyName: GNU Soft +ContactName: Jose E. Marchesi + +@dots{} +@end example + +If no table is specified in the invocation to @command{mdb2rec} all +the tables in the file are processed, with the exception of the system +tables, which requires @samp{-s} to be used: + +@example +$ mdb2rec sales.mdb +%rec: Products +@dots{} + +%rec: Customers +@dots{} + +%rec: Orders +@dots{} +@end example + +@node Bash Builtins +@chapter Bash Builtins + +@cindex bash +@cindex interactive use +@cindex shell +The command-line utilities described in @ref{Invoking the Utilities} are +designed to be used interactively in the shell. +Together, and often +combined with the standard shell utilities, they provide a quite +complete user interface. +However, the user's experience can be greatly +improved by a closer integration between the recutils and the shell. +The following sections describe several extensions for @command{bash}, +the GNU shell (@pxref{Top,,, bash, The GNU Bourne-Again SHell}). +These extensions make the shell ``aware'' of the recutils. + +As with any bash built-in, help is available in the command line using +the @command{help} command. For example: + +@example +$ help readrec +@end example + +If you installed recutils using a binary package in a GNU/Linux +distribution, odds are that the built-in commands described in this +chapter are already available to you. Otherwise (you get a ``command +not found'' or similar error) you may have to register the built-in +commands with your bash. This is very easy using the @command{enable} +bash command. The registering command for readrec would be: + +@example +$ enable -f readrec.so readrec +@end example + +Note however that some systems require the full path to +@file{readrec.so} in order for this command to work. + + +@menu +* readrec:: Exporting the contents of records to the shell. +@end menu + +@node readrec +@section readrec + +The bash built-in @command{read}, when invoked with no options, +consumes one line from standard input and makes it available in +the predefined @code{REPLY} environment variable, or any other +variable whose name is passed as an argument. This allows processing +data structured in lines in a quite natural way. For example, the +following program prints the third field of each line, with fields +separated by commas, until standard input is exhausted: + +@example +# Process one line at a time. +while read +do + echo "The third field is " `echo $REPLY | cut -d, -f 2` +done +@end example + +However, @command{read} is not very useful when it comes to +processing recutils records in the shell. Even though it is +possible to customize the character used by @command{read} to split +the input into records, we would need to ignore the empty records in +the likely case of more than one empty line separating records. +Also, we would need to use @command{recsel} to access to the record +fields. Too complicated! + +Thus, the @command{readrec} bash built-in is similar to @command{read} with +the difference that it reads records instead of lines. It also +``exports'' the contents of the record to the user as the values of +several environment variables: + +@itemize @minus +@item @code{REPLY_REC} is set to the record read from standard input. +@item A set of variables @code{FIELD} named after each field found in +the record are set to the (decoded) value of the fields found in the +input record. When several fields with the same name are found in the +input record then a bash array is created. +@end itemize + +Consider for example the following simple database containing +contacts information: + +@example +Name: Mr. Foo +Email: foo@@bar.com +Email: bar@@baz.net +Checked: no + +Name: Mr. Bar +Email: bar@@foo.com +Telephone: 999666000 +Checked: yes +@end example + +@noindent +We would like to write some shell code to send an email to all the +contacts, but only if the contact has not been checked before, +@ie{} the @code{Checked} field contains @code{no}. The following code +snippet would do the job nicely using @command{readrec}: + +@example +recsel contacts.rec | while readrec +do + if [ $Checked = "no" ] + then + mail -s "You are being checked." $@{Email[0]@} < email.txt + recset -e "Email = '$Email'" -f Checked -S yes contacts.rec + sleep 1 + fi +done +@end example + +@noindent +Note the usage of the bash array when accessing the primary email +address of each contact. Note also that we update each contact to +figure as ``checked'', using @command{recset}, so she won't get +pestered again the next time the +script is run. + +@node Invoking the Utilities +@chapter Invoking the Utilities + +Certain options are available in all of these programs. Rather than +writing identical descriptions for each of the programs, they are +listed here. + +@anchor{Common Options} +@table @samp +@item --version +Print the version number, then exit successfully. +@item --help +Print a help message, then exit successfully. +@item -- +Delimit the option list. Later arguments, if any, are treated as +operands even if they begin with @option{-}. For example, +@code{recsel -- -p} reads from the file named @file{-p}. +@end table + +@menu +* Invoking recinf:: Printing information about rec files. +* Invoking recsel:: Selecting records. +* Invoking recins:: Inserting records. +* Invoking recdel:: Deleting records. +* Invoking recset:: Managing fields. +* Invoking recfix:: Fixing broken rec files, and diagnostics. +* Invoking recfmt:: Formatting records using templates. +* Invoking csv2rec:: Converting csv data into rec data. +* Invoking rec2csv:: Converting rec data into csv data. +* Invoking mdb2rec:: Converting mdb files into rec files. +@end menu + +@node Invoking recinf +@section Invoking recinf +@cindex @command{recinf} + +@command{recinf} reads the given rec files (or the data from +standard input if no file is specified) and prints a summary of the +record types contained in the input. + +Synopsis: + +@example +recinf [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +The default behavior is to emit a line per record type in +the input containing its name and the number of records of that type: + +@example +$ recinf hackers.rec tasks.rec +25 Hacker +102 Task +@end example + +If the input contains anonymous records, @ie{} records that are before +the first record descriptor, the corresponding output line won't have +a type name: + +@example +$ recinf data.rec +10 +@end example + +In addition to the common options described earlier the program accepts the following options. + +@table @samp +@item -t @var{type} +@itemx --type=@var{type} +Select records of a given type only. +@item -d +@itemx --descriptor +Print all the record descriptors present in the file. +@item -n +@itemx --names-only +Output just the names of the record types found in the input. If the +input contains only anonymous records then output nothing. +@item -S +@itemx --print-sexps +Print the data in the form of sexps (Lisp expressions) instead of rec +format. This option can be useful for, of course, Lisp programs. +@end table + +@node Invoking recsel +@section Invoking recsel +@cindex @command{recsel} + +@cindex selecting records +@command{recsel} reads the given rec files (or the data in the +standard input if no file is specified) and prints out records (or +part of records) based upon some criteria specified by the user. + +@command{recsel} searches rec files for records satisfying certain +criteria. Synopsis: + +@example +recsel [@var{option}]@dots{} \ + [-n @var{indexes} | -e @var{record_expr} | -q @var{str} | -m @var{num}] \ + [-c | (-p|-P|-R) @var{field_expr}] \ + [@var{file}]@dots{} +@end example + +If no @var{file} is specified then the command acts like a filter, getting +the data from standard input and writing the result to +standard output. + +In addition to the common options described earlier (@pxref{Common +Options}) the program accepts the following options. + +@noindent +The following @dfn{global options} are available. + +@table @samp +@item -i +@itemx --case-insensitive +Make string matching case-insensitive in selection expressions. +@cindex case, in selection expressions +@item -C +@item --collapse +Do not section the result in records with newlines. +@item -d +@itemx --include-descriptors +Print record descriptors along with the matched records. +@item -s @var{secret} +@itemx --password=@var{secret} +Try to decrypt confidential fields with the given password. +@item -S +@itemx --sort=@var{fields} +@cindex sorting +Sort the output by the comma-separated list of field names, +@var{fields}. This option takes precedence over any sorting criteria +specified in the corresponding record descriptor with @code{%sort}. +@item -U +@itemx --uniq +Remove duplicated fields in the output records. Fields are +duplicated if they have the same field name +and the same value. +@item -G +@itemx --group-by=@var{fields} +Group the output records by the provided comma-separated list of +@var{fields}. Grouping is performed before sorting. +@end table + +The @dfn{selection options} are used to select a subset of +the records in the input. + +@table @samp +@item -n @var{indexes} +@item --number=@var{indexes} +Match the records occupying the given positions in its record set. +@var{indexes} must be a comma-separated list of numbers or ranges, with +ranges being two numbers separated with dashes. For example, the +following list denotes the first, the third, the fourth and all +records up to the tenth: @samp{-n 0,2,4-9}. +@item -e @var{expr} +@itemx --expression=@var{expr} +A record selection expression (@pxref{Selection Expressions}). Only +the records matched by the expression will be taken into account to +compute the output. +@item -q @var{str} +@itemx --quick=@var{str} +Select records having a field whose value contains the substring +@var{str}. +@item -m @var{num} +@itemx --random=@var{num} +Select @var{num} random records. If @var{num} is zero then select all +the records. +@item -t @var{type} +@itemx --type=@var{type} +Select records of a given type only. +@item -j @var{field} +@itemx --field=@var{field} +Perform an inner join of the record set selected by @option{-t} and +the record set for which @var{field} is a foreign key. @var{field} +must be a field declared with type @code{rec} and thus must be a +foreign key. If a join is performed then any selection expression and +field expression operate on the joined record sets. +@end table + +The @dfn{output options} are used to determine what information about +the selected records to display to the user, and how to display it. + +@table @samp +@item -p @var{name_list} +@itemx --print=@var{name_list} +List of fields to print for each record. @var{name_list} is a +list of field names separated by commas. For example: +@example +-p Name,Email +@end example + +@noindent +means to print the Name and the Email of every matching record, both +the field names and values. + +If this option is not specified then all the fields of the matching +records are printed to standard output. +@item -P @var{name_list} +@itemx --print-values=@var{name_list} +Same as @samp{-p}, but print only the values of the selected fields. +@item -R @var{name_list} +@itemx --print-row=@var{name_list} +Same as @samp{-P}, but print the values separated by single +spaces instead of newlines. +@item -c +@itemx --count +If this option is specified then @command{recsel} will print the number of +matching records instead of the records themselves. This option is +incompatible with @option{-p}, @option{-P} and @option{-R}. +@end table + +This @dfn{special option} is available to ease the communication +between the recutils and other programs, namely Lisp interpreters. +This option is not intended to be used by human operators. + +@table @samp +@item --print-sexps +Print the data using sexps instead of rec format. +@end table + +@node Invoking recins +@section Invoking recins +@cindex @command{recins} +@cindex inserting new records + +@command{recins} adds new records to a rec file or to rec data read +from standard input. Synopsis: + +@example +recins [@var{option}]@dots{} [-t @var{type}] \ + [-n @var{indexes} | -e @var{record_expr} | -q @var{str} | -m @var{num}] \ + [( -f @var{str} -v @var{str}]|[-r @var{recdata} )]@dots{} \ + [@var{file}] +@end example + +The new record to be inserted by the command is constructed by +using pairs of @samp{-f} and @samp{-v} options, or @samp{-r}. Each pair defines a +field. The order of the parameters is significant. + +If no @var{file} is specified then the command acts like a filter, getting +the data from standard input and writing the result to +standard output. + +If the specified @var{file} does not exist, it is created. + +In addition to the common options described earlier (@pxref{Common +Options}) the program accepts the following options. + +@table @samp +@item -t +@itemx --type=@var{expr} +The type of the new record. If there is a record set in the input +data matching this type then the new record is added there. Otherwise +a new record set is created. If this parameter is not specified then +the new record is anonymous. +@item -f +@itemx --field=@var{name} +Declares the name of a field. This option must be followed by a +@samp{-v}. +@item -v +@itemx --value=@var{value} +The value of the field being defined. +@item -r +@itemx --record=@var{value} +Add the fields of the record in @var{value}. This option can be +intermixed with @samp{-f @dots{} -v} pairs. +@item -s +@itemx --password +Encrypt confidential fields with the given password. +@item --no-external +Don't use external record descriptors. +@item --verbose +Be verbose when reporting integrity problems. +@item --no-auto +Don't generate @dfn{auto} fields. @xref{Auto-Generated Fields}. +@end table + +Record selection arguments are supported too. If they are used +then @command{recins} uses ``replacement mode'': instead of +appending the new record, matched records are replaced by copies of +the provided record. The selection arguments are the same as in +@command{recsel}: + +@table @samp +@item -n @var{indexes} +@item --number=@var{indexes} +Match the records occupying the given positions in its record set. +@var{indexes} must be a comma-separated list of numbers or ranges, the +ranges being two numbers separated with dashes. For example, the +following list denotes the first, the third, the fourth and all +records up to the tenth: @code{-n 0,2,4-9}. +@item -e @var{record_expr} +@itemx --expression=@var{expr} +A record selection expression (@pxref{Selection Expressions}). +Matching records will get replaced. +@item -q @var{str} +@itemx --quick=@var{str} +Remove records having a field whose value contains the substring +@var{str}. +@item -m @var{num} +@itemx --random=@var{num} +Select @var{num} random records. If @var{num} is zero then all +records are selected, @ie{} no replace mode is activated. +@item -i +@itemx --case-insensitive +Make strings case-insensitive in selection expressions. +@cindex case, in selection expressions +@item --force +Insert the requested record even in potentially dangerous situations, +such as when the data integrity of the database is compromised. +@end table + +@node Invoking recdel +@section Invoking recdel +@cindex @command{recdel} +@cindex deleting records + +@command{recdel} removes records from a rec file, or from rec data +read from standard input. Synopsis: + +@example +recdel [OPTIONS]@dots{} [-t @var{type}] \ + [-n @var{indexes} | -e @var{record_expr} | -q @var{str} | -m @var{num}] \ + [@var{file}] +@end example + +If no @var{file} is specified then the command acts like a filter, +getting the data from standard input and writing the result to +standard output. + +In addition to the common options described earlier (@pxref{Common +Options}) the program accepts the following options. + +@table @samp +@item -t +@itemx --type=@var{expr} +Remove records of the given type. If this parameter is not specified +then records of any type will be removed. +@item -n @var{indexes} +@item --number=@var{indexes} +Match the records occupying the given positions in its record set. +@var{indexes} must be a comma-separated list of numbers or ranges, the +ranges being two numbers separated with dashes. For example, the +following list denotes the first, the third, the fourth and all +records up to the tenth: @code{-n 0,2,4-9}. +@item -e @var{record_expr} +@itemx --expression=@var{expr} +A record selection expression (@pxref{Selection Expressions}). Only +the records matched by the expression will be removed from the file. +@item -q @var{str} +@itemx --quick=@var{str} +Remove records having a field whose value contains the substring +@var{str}. +@item -m @var{num} +@itemx --random=@var{num} +Remove @var{num} random records. If @var{num} is zero then remove all +the records. +@item -c +@itemx --comment +Comment the matching records out instead of removing them. +@item --force +Delete even in potentially dangerous situations, such as a request +to delete all the records of some type. +@item --no-external +Don't use external record descriptors. +@item -i +@itemx --case-insensitive +Make strings case-insensitive in selection expressions. +@item --verbose +Be verbose when reporting integrity problems. +@end table + +@node Invoking recset +@section Invoking recset +@cindex @command{recset} +@cindex editing fields + +@command{recset} manipulates the fields of records in a rec file, or +rec data read from standard input. Synopsis: + +@example +recset [@var{option}]@dots{} [@var{file}]@dots{} +@end example + +If no @var{file} is specified then the command acts like a filter, +getting the data from standard input and writing the result to +standard output. + +In addition to the common options described earlier (@pxref{Common +Options}) the program accepts the following options. + +Record selection options: + +@table @samp +@item -i +@itemx --case-insensitive +Make strings case-insensitive in selection expressions. +@item -t +@itemx --type=@var{expr} +Operate on the records of the given type. If this parameter is not +specified then records of any type will be affected. +@item -n @var{indexes} +@item --number=@var{indexes} +Operate on the records occupying the given positions in its record +set. @var{indexes} must be a comma-separated list of numbers or +ranges, the ranges being two numbers separated with dashes. For +example, the following list denotes the first, the third, the fourth +and all records up to the tenth: @code{-n 0,2,4-9}. +@item -e @var{expr} +@itemx --expression=@var{expr} +A record selection expression (@pxref{Selection Expressions}). Only +the records matched by the expression will be processed. +@item -q @var{str} +@itemx --quick=@var{str} +Operate on records having a field whose value contains the substring +@var{str}. +@item -m @var{num} +@itemx --random=@var{num} +Operate on @var{num} random records. If @var{num} is zero then +operate on all the records. +@end table + +Field selection options: + +@table @samp +@item -f +@itemx --fields=@var{FEX} +Field selection expression (@pxref{Field Expressions}) to select the +fields to operate. +@end table + +Actions: + +@table @samp +@item -s +@itemx --set=@var{value} +Set the value of the selected fields to @var{value}. +@item -a +@itemx --add=@var{value} +Add a new field to the selected record with value @var{value}. +@item -S +@itemx --set-add=@var{value} +Set the value of the selected fields to @var{value}. If some of the +fields don't exist in a record, append it with the specified value. +@item -r +@itemx --rename=@var{value} +Rename a field; @var{value} must be a valid field name. The field +expression associated with this action must contain a single field +name and an optional subscript. If an entire record set is selected +then the field is renamed in the record descriptor as well. +@item -d +@itemx --delete +Delete the selected fields in the selected records. +@item -c +@itemx --comment +Comment out the selected fields in the selected records. +@item --no-external +Don't use external record descriptors. +@item --verbose +Be verbose when reporting integrity problems. +@item --force +Perform the requested operation even in potentially dangerous +situations, or when the integrity of the data stored in the file is +affected. +@end table + +@node Invoking recfix +@section Invoking recfix +@cindex @command{recfix} +@cindex checking recfiles +@cindex integrity, checking + +@command{recfix} checks and fixes rec files. Synopsis: + +@example +recfix [@var{option}]@dots{} [@var{operation}] [@var{op_option}]@dots{} [@var{file}] +@end example + +If no @var{file} is specified then the command acts like a filter, +getting the data from standard input and writing the result to +standard output. + +In addition to the common options described earlier (@pxref{Common +Options}) the program accepts the following global options. + +@table @samp +@item --no-external +Don't use external record descriptors. +@end table + +The effect of running @command{recfix} depends on the operation it +performs. The operation mode is selected by using one of the +following options. + +@table @samp +@item --check +Check the integrity of the database contained in the file, printing +diagnostics messages in case something is not right. This is the +default operation. +@item --sort +Perform a physical sort of all the records contained in the file (or +standard input) after checking for its integrity. The sorting +criteria are provided by the @code{%sort} special field, if any. If +there is an integrity failure the sorting is not performed. +@cindex sorting + +This is a destructive operation. +@item --decrypt +@itemx --encrypt +Decrypt (encrypt) all the (non-)encrypted fields in the database which are marked +as confidential. This operation requires a password. If no password +is specified with @option{-s} and the program is run in a terminal, a +prompt is given to get the password from the user. + +If encryption is performed on a file having encrypted fields, the +operation will fail unless @samp{--force} is used. + +These are destructive operations. +@item --auto +Insert auto-generated fields as appropriate in the records which are +missing them. + +This is a destructive operation. +@end table + +As described above, some operations make use of these additional options: + +@table @samp +@item -s @var{secret} +@itemx --password=@var{secret} +Password used to encrypt or decrypt fields. +@item --force +Force potentially dangerous operations. +@end table + +@node Invoking recfmt +@section Invoking recfmt +@cindex @command{recfmt} +@cindex formatted output + +@command{recfmt} formats records using templates. Synopsis: + +@example +recfmt [@var{option}]@dots{} [@var{template}] +@end example + +This program always works as a filter, getting the data from the +standard input and writing the result to standard output. + +In addition to the common options described earlier (@pxref{Common +Options}) the program accepts the following options. + +@table @samp +@item -f +@itemx --filename=@var{PATH} +Read the template from the file in @var{PATH} instead of the command +line. +@end table + +@node Invoking csv2rec +@section Invoking csv2rec +@cindex @command{csv2rec} +@cindex csv +@cindex comma separated values + +@command{csv2rec} reads the given comma-separated-values file (or the +data from standard input if no file is specified) and prints out the +converted rec data, if possible. Synopsis: + +@example +csv2rec [@var{option}]@dots{} [@var{csv_file}] +@end example + +In addition to the common options described earlier (@pxref{Common +Options}) the program accepts the following options. + +@table @samp +@item -t @var{type} +@itemx --type=@var{type} +Type of the converted records. If no type is specified then no type +is used. +@item -s +@itemx --strict +Be strict parsing the csv file. +@item -e +@itemx --omit-empty +Omit empty fields. +@end table + +@node Invoking rec2csv +@section Invoking rec2csv + +@cindex @command{rec2csv} +@cindex csv +@cindex comma separated values + +@command{rec2csv} reads the given rec files (or the data in the +standard input if no file is specified) and prints out the converted +comma-separated-values. Synopsis: + +@example +rec2csv [@var{option}]@dots{} [@var{rec_file}]@dots{} +@end example + +The rec data can be read from files specified in the command line, or +from standard input. The program writes the converted data to +standard output. + +In addition to the common options described earlier (@pxref{Common +Options}) the program accepts the following options. + +@table @samp +@item -t @var{type} +@itemx --type=@var{type} +Type of the records to convert. If no type is specified then the +default records (with no name) are converted. +@item -S +@itemx --sort=@var{fields} +Sort the output by the comma-separated list of field names +@var{fields}. This option has precedence to whatever sorting criteria +are specified in the corresponding record descriptor with +@code{%sort}. +@item -d +@itemx --delim=@var{char} +Use @var{char} as the delimiter character separating fields in the +output. Defaults to @code{,}. +@end table + +@node Invoking mdb2rec +@section Invoking mdb2rec +@cindex @command{mdb2rec} +@cindex mdb +@cindex MS Access + +@command{mdb2rec} reads the given mdb file and prints out the +converted rec data, if possible. Synopsis: + +@example +mdb2rec [@var{option}]@dots{} @var{mdb_file} [@var{table}] +@end example + +All the tables contained in the mdb file are exported unless a table +is specified in the command line. + +In addition to the common options described earlier (@pxref{Common +Options}) the program accepts the following options. + +@table @samp +@item -s +@itemx --system-tables +Include system tables in the output. +@item -l +@itemx --list-tables +Dump a list of the table names contained in the mdb file, one per +line. +@item -e +@itemx --keep-empty-fields +Don't prune empty fields in the rec output. +@end table + + +@node Regular Expressions +@chapter Regular Expressions + +@cindex regular expressions +The character @samp{.} matches any single character except the null character. + +@table @samp + +@item + +match one or more occurrences of the previous atom or regexp. +@item ? +match zero or one occurrences of the previous atom or regexp. +@item \+ +matches a @samp{+} +@item \? +matches a @samp{?}. +@end table + +Bracket expressions are used to match ranges of characters. +Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid. +Within square brackets, @samp{\} is taken literally. +Character classes are supported; for example @samp{[[:digit:]]} matches a single decimal digit. + +GNU extensions are supported: +@table @samp +@item \w +matches a character within a word +@item \W +matches a character which is not within a word +@item \< +matches the beginning of a word +@item \> +matches the end of a word +@item \b +matches a word boundary +@item \B +matches characters which are not a word boundary +@item \` +matches the beginning of the whole input +@item \' +matches the end of the whole input +@end table + +@cindex grouping, within regular expressions +Grouping is performed with parentheses @samp{()}. An unmatched +@samp{)} matches just itself. A backslash followed by a digit acts as +a back-reference and matches the same thing as the previous grouped +expression indicated by that number. For example, @samp{\2} matches +the second group expression. The order of group expressions is +determined by the position of their opening parenthesis @samp{(}. + +The alternation operator is @samp{|}. + +The characters @samp{^} and @samp{$} always represent the beginning +and end of a string respectively, except within square brackets. +Within brackets, an initial @samp{^} inverts the +character class being matched. + +@samp{*}, @samp{+} and @samp{?} are special at any point in a regular +expression except the following places, where they are not allowed: +@enumerate +@item At the beginning of a regular expression +@item After an open-group, @samp{(} +@item After the alternation operator, @samp{|} +@end enumerate + +Intervals are specified by @samp{@{} and @samp{@}}. Invalid intervals +such as @samp{a@{1z} are not accepted. + +The longest possible match is returned; this applies to the regular +expression as a whole and (subject to this constraint) to +sub-expressions within groups. + +@c @lowersections +@include parse-datetime.texi +@c @raisesections + +@node GNU Free Documentation License +@appendix GNU Free Documentation License +@cindex license, GNU Free Documentation License + +@include fdl.texi + + +@node Concept Index +@unnumbered Concept Index + +@printindex cp + + +@bye diff --git a/devspec.en_US/project/recutils/doc/stamp-1 b/devspec.en_US/project/recutils/doc/stamp-1 new file mode 100755 index 0000000..6595f87 --- /dev/null +++ b/devspec.en_US/project/recutils/doc/stamp-1 @@ -0,0 +1,4 @@ +@set UPDATED 3 January 2019 +@set UPDATED-MONTH January 2019 +@set EDITION 1.8 +@set VERSION 1.8 diff --git a/devspec.en_US/project/recutils/doc/stamp-vti b/devspec.en_US/project/recutils/doc/stamp-vti new file mode 100755 index 0000000..6595f87 --- /dev/null +++ b/devspec.en_US/project/recutils/doc/stamp-vti @@ -0,0 +1,4 @@ +@set UPDATED 3 January 2019 +@set UPDATED-MONTH January 2019 +@set EDITION 1.8 +@set VERSION 1.8 diff --git a/devspec.en_US/project/recutils/doc/texinfo.tex b/devspec.en_US/project/recutils/doc/texinfo.tex new file mode 100755 index 0000000..3569bd5 --- /dev/null +++ b/devspec.en_US/project/recutils/doc/texinfo.tex @@ -0,0 +1,9153 @@ +% texinfo.tex -- TeX macros to handle Texinfo files. +% +% Load plain if necessary, i.e., if running under initex. +\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi +% +\def\texinfoversion{2008-11-17.21} +% +% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, +% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, +% 2007, 2008 Free Software Foundation, Inc. +% +% This texinfo.tex file is free software: you can redistribute it and/or +% modify it under the terms of the GNU General Public License as +% published by the Free Software Foundation, either version 3 of the +% License, or (at your option) any later version. +% +% This texinfo.tex file is distributed in the hope that it will be +% useful, but WITHOUT ANY WARRANTY; without even the implied warranty +% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +% General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program. If not, see <http://www.gnu.org/licenses/>. +% +% As a special exception, when this file is read by TeX when processing +% a Texinfo source document, you may use the result without +% restriction. (This has been our intent since Texinfo was invented.) +% +% Please try the latest version of texinfo.tex before submitting bug +% reports; you can get the latest version from: +% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or +% ftp://tug.org/tex/texinfo.tex +% (and all CTAN mirrors, see http://www.ctan.org). +% The texinfo.tex in any given distribution could well be out +% of date, so if that's what you're using, please check. +% +% Send bug reports to bug-texinfo@gnu.org. Please include including a +% complete document in each bug report with which we can reproduce the +% problem. Patches are, of course, greatly appreciated. +% +% To process a Texinfo manual with TeX, it's most reliable to use the +% texi2dvi shell script that comes with the distribution. For a simple +% manual foo.texi, however, you can get away with this: +% tex foo.texi +% texindex foo.?? +% tex foo.texi +% tex foo.texi +% dvips foo.dvi -o # or whatever; this makes foo.ps. +% The extra TeX runs get the cross-reference information correct. +% Sometimes one run after texindex suffices, and sometimes you need more +% than two; texi2dvi does it as many times as necessary. +% +% It is possible to adapt texinfo.tex for other languages, to some +% extent. You can get the existing language-specific files from the +% full Texinfo distribution. +% +% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. + + +\message{Loading texinfo [version \texinfoversion]:} + +% If in a .fmt file, print the version number +% and turn on active characters that we couldn't do earlier because +% they might have appeared in the input file name. +\everyjob{\message{[Texinfo version \texinfoversion]}% + \catcode`+=\active \catcode`\_=\active} + + +\chardef\other=12 + +% We never want plain's \outer definition of \+ in Texinfo. +% For @tex, we can use \tabalign. +\let\+ = \relax + +% Save some plain tex macros whose names we will redefine. +\let\ptexb=\b +\let\ptexbullet=\bullet +\let\ptexc=\c +\let\ptexcomma=\, +\let\ptexdot=\. +\let\ptexdots=\dots +\let\ptexend=\end +\let\ptexequiv=\equiv +\let\ptexexclam=\! +\let\ptexfootnote=\footnote +\let\ptexgtr=> +\let\ptexhat=^ +\let\ptexi=\i +\let\ptexindent=\indent +\let\ptexinsert=\insert +\let\ptexlbrace=\{ +\let\ptexless=< +\let\ptexnewwrite\newwrite +\let\ptexnoindent=\noindent +\let\ptexplus=+ +\let\ptexrbrace=\} +\let\ptexslash=\/ +\let\ptexstar=\* +\let\ptext=\t +\let\ptextop=\top +{\catcode`\'=\active +\global\let\ptexquoteright'}% Math-mode def from plain.tex. + +% If this character appears in an error message or help string, it +% starts a new line in the output. +\newlinechar = `^^J + +% Use TeX 3.0's \inputlineno to get the line number, for better error +% messages, but if we're using an old version of TeX, don't do anything. +% +\ifx\inputlineno\thisisundefined + \let\linenumber = \empty % Pre-3.0. +\else + \def\linenumber{l.\the\inputlineno:\space} +\fi + +% Set up fixed words for English if not already set. +\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi +\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi +\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi +\ifx\putwordin\undefined \gdef\putwordin{in}\fi +\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi +\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi +\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi +\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi +\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi +\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi +\ifx\putwordof\undefined \gdef\putwordof{of}\fi +\ifx\putwordon\undefined \gdef\putwordon{on}\fi +\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi +\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi +\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi +\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi +\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi +\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi +\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi +% +\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi +\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi +\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi +\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi +\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi +\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi +\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi +\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi +\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi +\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi +\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi +\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi +% +\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi +\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi +\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi +\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi +\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi + +% Since the category of space is not known, we have to be careful. +\chardef\spacecat = 10 +\def\spaceisspace{\catcode`\ =\spacecat} + +% sometimes characters are active, so we need control sequences. +\chardef\colonChar = `\: +\chardef\commaChar = `\, +\chardef\dashChar = `\- +\chardef\dotChar = `\. +\chardef\exclamChar= `\! +\chardef\lquoteChar= `\` +\chardef\questChar = `\? +\chardef\rquoteChar= `\' +\chardef\semiChar = `\; +\chardef\underChar = `\_ + +% Ignore a token. +% +\def\gobble#1{} + +% The following is used inside several \edef's. +\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} + +% Hyphenation fixes. +\hyphenation{ + Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script + ap-pen-dix bit-map bit-maps + data-base data-bases eshell fall-ing half-way long-est man-u-script + man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm + par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces + spell-ing spell-ings + stand-alone strong-est time-stamp time-stamps which-ever white-space + wide-spread wrap-around +} + +% Margin to add to right of even pages, to left of odd pages. +\newdimen\bindingoffset +\newdimen\normaloffset +\newdimen\pagewidth \newdimen\pageheight + +% For a final copy, take out the rectangles +% that mark overfull boxes (in case you have decided +% that the text looks ok even though it passes the margin). +% +\def\finalout{\overfullrule=0pt} + +% @| inserts a changebar to the left of the current line. It should +% surround any changed text. This approach does *not* work if the +% change spans more than two lines of output. To handle that, we would +% have adopt a much more difficult approach (putting marks into the main +% vertical list for the beginning and end of each change). +% +\def\|{% + % \vadjust can only be used in horizontal mode. + \leavevmode + % + % Append this vertical mode material after the current line in the output. + \vadjust{% + % We want to insert a rule with the height and depth of the current + % leading; that is exactly what \strutbox is supposed to record. + \vskip-\baselineskip + % + % \vadjust-items are inserted at the left edge of the type. So + % the \llap here moves out into the left-hand margin. + \llap{% + % + % For a thicker or thinner bar, change the `1pt'. + \vrule height\baselineskip width1pt + % + % This is the space between the bar and the text. + \hskip 12pt + }% + }% +} + +% Sometimes it is convenient to have everything in the transcript file +% and nothing on the terminal. We don't just call \tracingall here, +% since that produces some useless output on the terminal. We also make +% some effort to order the tracing commands to reduce output in the log +% file; cf. trace.sty in LaTeX. +% +\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% +\def\loggingall{% + \tracingstats2 + \tracingpages1 + \tracinglostchars2 % 2 gives us more in etex + \tracingparagraphs1 + \tracingoutput1 + \tracingmacros2 + \tracingrestores1 + \showboxbreadth\maxdimen \showboxdepth\maxdimen + \ifx\eTeXversion\undefined\else % etex gives us more logging + \tracingscantokens1 + \tracingifs1 + \tracinggroups1 + \tracingnesting2 + \tracingassigns1 + \fi + \tracingcommands3 % 3 gives us more in etex + \errorcontextlines16 +}% + +% add check for \lastpenalty to plain's definitions. If the last thing +% we did was a \nobreak, we don't want to insert more space. +% +\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount + \removelastskip\penalty-50\smallskip\fi\fi} +\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount + \removelastskip\penalty-100\medskip\fi\fi} +\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount + \removelastskip\penalty-200\bigskip\fi\fi} + +% For @cropmarks command. +% Do @cropmarks to get crop marks. +% +\newif\ifcropmarks +\let\cropmarks = \cropmarkstrue +% +% Dimensions to add cropmarks at corners. +% Added by P. A. MacKay, 12 Nov. 1986 +% +\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines +\newdimen\cornerlong \cornerlong=1pc +\newdimen\cornerthick \cornerthick=.3pt +\newdimen\topandbottommargin \topandbottommargin=.75in + +% Output a mark which sets \thischapter, \thissection and \thiscolor. +% We dump everything together because we only have one kind of mark. +% This works because we only use \botmark / \topmark, not \firstmark. +% +% A mark contains a subexpression of the \ifcase ... \fi construct. +% \get*marks macros below extract the needed part using \ifcase. +% +% Another complication is to let the user choose whether \thischapter +% (\thissection) refers to the chapter (section) in effect at the top +% of a page, or that at the bottom of a page. The solution is +% described on page 260 of The TeXbook. It involves outputting two +% marks for the sectioning macros, one before the section break, and +% one after. I won't pretend I can describe this better than DEK... +\def\domark{% + \toks0=\expandafter{\lastchapterdefs}% + \toks2=\expandafter{\lastsectiondefs}% + \toks4=\expandafter{\prevchapterdefs}% + \toks6=\expandafter{\prevsectiondefs}% + \toks8=\expandafter{\lastcolordefs}% + \mark{% + \the\toks0 \the\toks2 + \noexpand\or \the\toks4 \the\toks6 + \noexpand\else \the\toks8 + }% +} +% \topmark doesn't work for the very first chapter (after the title +% page or the contents), so we use \firstmark there -- this gets us +% the mark with the chapter defs, unless the user sneaks in, e.g., +% @setcolor (or @url, or @link, etc.) between @contents and the very +% first @chapter. +\def\gettopheadingmarks{% + \ifcase0\topmark\fi + \ifx\thischapter\empty \ifcase0\firstmark\fi \fi +} +\def\getbottomheadingmarks{\ifcase1\botmark\fi} +\def\getcolormarks{\ifcase2\topmark\fi} + +% Avoid "undefined control sequence" errors. +\def\lastchapterdefs{} +\def\lastsectiondefs{} +\def\prevchapterdefs{} +\def\prevsectiondefs{} +\def\lastcolordefs{} + +% Main output routine. +\chardef\PAGE = 255 +\output = {\onepageout{\pagecontents\PAGE}} + +\newbox\headlinebox +\newbox\footlinebox + +% \onepageout takes a vbox as an argument. Note that \pagecontents +% does insertions, but you have to call it yourself. +\def\onepageout#1{% + \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi + % + \ifodd\pageno \advance\hoffset by \bindingoffset + \else \advance\hoffset by -\bindingoffset\fi + % + % Do this outside of the \shipout so @code etc. will be expanded in + % the headline as they should be, not taken literally (outputting ''code). + \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi + \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% + \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi + \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% + % + {% + % Have to do this stuff outside the \shipout because we want it to + % take effect in \write's, yet the group defined by the \vbox ends + % before the \shipout runs. + % + \indexdummies % don't expand commands in the output. + \normalturnoffactive % \ in index entries must not stay \, e.g., if + % the page break happens to be in the middle of an example. + % We don't want .vr (or whatever) entries like this: + % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} + % "\acronym" won't work when it's read back in; + % it needs to be + % {\code {{\tt \backslashcurfont }acronym} + \shipout\vbox{% + % Do this early so pdf references go to the beginning of the page. + \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi + % + \ifcropmarks \vbox to \outervsize\bgroup + \hsize = \outerhsize + \vskip-\topandbottommargin + \vtop to0pt{% + \line{\ewtop\hfil\ewtop}% + \nointerlineskip + \line{% + \vbox{\moveleft\cornerthick\nstop}% + \hfill + \vbox{\moveright\cornerthick\nstop}% + }% + \vss}% + \vskip\topandbottommargin + \line\bgroup + \hfil % center the page within the outer (page) hsize. + \ifodd\pageno\hskip\bindingoffset\fi + \vbox\bgroup + \fi + % + \unvbox\headlinebox + \pagebody{#1}% + \ifdim\ht\footlinebox > 0pt + % Only leave this space if the footline is nonempty. + % (We lessened \vsize for it in \oddfootingyyy.) + % The \baselineskip=24pt in plain's \makefootline has no effect. + \vskip 24pt + \unvbox\footlinebox + \fi + % + \ifcropmarks + \egroup % end of \vbox\bgroup + \hfil\egroup % end of (centering) \line\bgroup + \vskip\topandbottommargin plus1fill minus1fill + \boxmaxdepth = \cornerthick + \vbox to0pt{\vss + \line{% + \vbox{\moveleft\cornerthick\nsbot}% + \hfill + \vbox{\moveright\cornerthick\nsbot}% + }% + \nointerlineskip + \line{\ewbot\hfil\ewbot}% + }% + \egroup % \vbox from first cropmarks clause + \fi + }% end of \shipout\vbox + }% end of group with \indexdummies + \advancepageno + \ifnum\outputpenalty>-20000 \else\dosupereject\fi +} + +\newinsert\margin \dimen\margin=\maxdimen + +\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} +{\catcode`\@ =11 +\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi +% marginal hacks, juha@viisa.uucp (Juha Takala) +\ifvoid\margin\else % marginal info is present + \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi +\dimen@=\dp#1\relax \unvbox#1\relax +\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi +\ifr@ggedbottom \kern-\dimen@ \vfil \fi} +} + +% Here are the rules for the cropmarks. Note that they are +% offset so that the space between them is truly \outerhsize or \outervsize +% (P. A. MacKay, 12 November, 1986) +% +\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} +\def\nstop{\vbox + {\hrule height\cornerthick depth\cornerlong width\cornerthick}} +\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} +\def\nsbot{\vbox + {\hrule height\cornerlong depth\cornerthick width\cornerthick}} + +% Parse an argument, then pass it to #1. The argument is the rest of +% the input line (except we remove a trailing comment). #1 should be a +% macro which expects an ordinary undelimited TeX argument. +% +\def\parsearg{\parseargusing{}} +\def\parseargusing#1#2{% + \def\argtorun{#2}% + \begingroup + \obeylines + \spaceisspace + #1% + \parseargline\empty% Insert the \empty token, see \finishparsearg below. +} + +{\obeylines % + \gdef\parseargline#1^^M{% + \endgroup % End of the group started in \parsearg. + \argremovecomment #1\comment\ArgTerm% + }% +} + +% First remove any @comment, then any @c comment. +\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} +\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} + +% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space. +% +% \argremovec might leave us with trailing space, e.g., +% @end itemize @c foo +% This space token undergoes the same procedure and is eventually removed +% by \finishparsearg. +% +\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} +\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} +\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% + \def\temp{#3}% + \ifx\temp\empty + % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: + \let\temp\finishparsearg + \else + \let\temp\argcheckspaces + \fi + % Put the space token in: + \temp#1 #3\ArgTerm +} + +% If a _delimited_ argument is enclosed in braces, they get stripped; so +% to get _exactly_ the rest of the line, we had to prevent such situation. +% We prepended an \empty token at the very beginning and we expand it now, +% just before passing the control to \argtorun. +% (Similarly, we have to think about #3 of \argcheckspacesY above: it is +% either the null string, or it ends with \^^M---thus there is no danger +% that a pair of braces would be stripped. +% +% But first, we have to remove the trailing space token. +% +\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} + +% \parseargdef\foo{...} +% is roughly equivalent to +% \def\foo{\parsearg\Xfoo} +% \def\Xfoo#1{...} +% +% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my +% favourite TeX trick. --kasal, 16nov03 + +\def\parseargdef#1{% + \expandafter \doparseargdef \csname\string#1\endcsname #1% +} +\def\doparseargdef#1#2{% + \def#2{\parsearg#1}% + \def#1##1% +} + +% Several utility definitions with active space: +{ + \obeyspaces + \gdef\obeyedspace{ } + + % Make each space character in the input produce a normal interword + % space in the output. Don't allow a line break at this space, as this + % is used only in environments like @example, where each line of input + % should produce a line of output anyway. + % + \gdef\sepspaces{\obeyspaces\let =\tie} + + % If an index command is used in an @example environment, any spaces + % therein should become regular spaces in the raw index file, not the + % expansion of \tie (\leavevmode \penalty \@M \ ). + \gdef\unsepspaces{\let =\space} +} + + +\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} + +% Define the framework for environments in texinfo.tex. It's used like this: +% +% \envdef\foo{...} +% \def\Efoo{...} +% +% It's the responsibility of \envdef to insert \begingroup before the +% actual body; @end closes the group after calling \Efoo. \envdef also +% defines \thisenv, so the current environment is known; @end checks +% whether the environment name matches. The \checkenv macro can also be +% used to check whether the current environment is the one expected. +% +% Non-false conditionals (@iftex, @ifset) don't fit into this, so they +% are not treated as environments; they don't open a group. (The +% implementation of @end takes care not to call \endgroup in this +% special case.) + + +% At run-time, environments start with this: +\def\startenvironment#1{\begingroup\def\thisenv{#1}} +% initialize +\let\thisenv\empty + +% ... but they get defined via ``\envdef\foo{...}'': +\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} +\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} + +% Check whether we're in the right environment: +\def\checkenv#1{% + \def\temp{#1}% + \ifx\thisenv\temp + \else + \badenverr + \fi +} + +% Environment mismatch, #1 expected: +\def\badenverr{% + \errhelp = \EMsimple + \errmessage{This command can appear only \inenvironment\temp, + not \inenvironment\thisenv}% +} +\def\inenvironment#1{% + \ifx#1\empty + out of any environment% + \else + in environment \expandafter\string#1% + \fi +} + +% @end foo executes the definition of \Efoo. +% But first, it executes a specialized version of \checkenv +% +\parseargdef\end{% + \if 1\csname iscond.#1\endcsname + \else + % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 + \expandafter\checkenv\csname#1\endcsname + \csname E#1\endcsname + \endgroup + \fi +} + +\newhelp\EMsimple{Press RETURN to continue.} + + +%% Simple single-character @ commands + +% @@ prints an @ +% Kludge this until the fonts are right (grr). +\def\@{{\tt\char64}} + +% This is turned off because it was never documented +% and you can use @w{...} around a quote to suppress ligatures. +%% Define @` and @' to be the same as ` and ' +%% but suppressing ligatures. +%\def\`{{`}} +%\def\'{{'}} + +% Used to generate quoted braces. +\def\mylbrace {{\tt\char123}} +\def\myrbrace {{\tt\char125}} +\let\{=\mylbrace +\let\}=\myrbrace +\begingroup + % Definitions to produce \{ and \} commands for indices, + % and @{ and @} for the aux/toc files. + \catcode`\{ = \other \catcode`\} = \other + \catcode`\[ = 1 \catcode`\] = 2 + \catcode`\! = 0 \catcode`\\ = \other + !gdef!lbracecmd[\{]% + !gdef!rbracecmd[\}]% + !gdef!lbraceatcmd[@{]% + !gdef!rbraceatcmd[@}]% +!endgroup + +% @comma{} to avoid , parsing problems. +\let\comma = , + +% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent +% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. +\let\, = \c +\let\dotaccent = \. +\def\ringaccent#1{{\accent23 #1}} +\let\tieaccent = \t +\let\ubaraccent = \b +\let\udotaccent = \d + +% Other special characters: @questiondown @exclamdown @ordf @ordm +% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. +\def\questiondown{?`} +\def\exclamdown{!`} +\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} +\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} + +% Dotless i and dotless j, used for accents. +\def\imacro{i} +\def\jmacro{j} +\def\dotless#1{% + \def\temp{#1}% + \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi + \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi + \else \errmessage{@dotless can be used only with i or j}% + \fi\fi +} + +% The \TeX{} logo, as in plain, but resetting the spacing so that a +% period following counts as ending a sentence. (Idea found in latex.) +% +\edef\TeX{\TeX \spacefactor=1000 } + +% @LaTeX{} logo. Not quite the same results as the definition in +% latex.ltx, since we use a different font for the raised A; it's most +% convenient for us to use an explicitly smaller font, rather than using +% the \scriptstyle font (since we don't reset \scriptstyle and +% \scriptscriptstyle). +% +\def\LaTeX{% + L\kern-.36em + {\setbox0=\hbox{T}% + \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% + \kern-.15em + \TeX +} + +% Be sure we're in horizontal mode when doing a tie, since we make space +% equivalent to this in @example-like environments. Otherwise, a space +% at the beginning of a line will start with \penalty -- and +% since \penalty is valid in vertical mode, we'd end up putting the +% penalty on the vertical list instead of in the new paragraph. +{\catcode`@ = 11 + % Avoid using \@M directly, because that causes trouble + % if the definition is written into an index file. + \global\let\tiepenalty = \@M + \gdef\tie{\leavevmode\penalty\tiepenalty\ } +} + +% @: forces normal size whitespace following. +\def\:{\spacefactor=1000 } + +% @* forces a line break. +\def\*{\hfil\break\hbox{}\ignorespaces} + +% @/ allows a line break. +\let\/=\allowbreak + +% @. is an end-of-sentence period. +\def\.{.\spacefactor=\endofsentencespacefactor\space} + +% @! is an end-of-sentence bang. +\def\!{!\spacefactor=\endofsentencespacefactor\space} + +% @? is an end-of-sentence query. +\def\?{?\spacefactor=\endofsentencespacefactor\space} + +% @frenchspacing on|off says whether to put extra space after punctuation. +% +\def\onword{on} +\def\offword{off} +% +\parseargdef\frenchspacing{% + \def\temp{#1}% + \ifx\temp\onword \plainfrenchspacing + \else\ifx\temp\offword \plainnonfrenchspacing + \else + \errhelp = \EMsimple + \errmessage{Unknown @frenchspacing option `\temp', must be on/off}% + \fi\fi +} + +% @w prevents a word break. Without the \leavevmode, @w at the +% beginning of a paragraph, when TeX is still in vertical mode, would +% produce a whole line of output instead of starting the paragraph. +\def\w#1{\leavevmode\hbox{#1}} + +% @group ... @end group forces ... to be all on one page, by enclosing +% it in a TeX vbox. We use \vtop instead of \vbox to construct the box +% to keep its height that of a normal line. According to the rules for +% \topskip (p.114 of the TeXbook), the glue inserted is +% max (\topskip - \ht (first item), 0). If that height is large, +% therefore, no glue is inserted, and the space between the headline and +% the text is small, which looks bad. +% +% Another complication is that the group might be very large. This can +% cause the glue on the previous page to be unduly stretched, because it +% does not have much material. In this case, it's better to add an +% explicit \vfill so that the extra space is at the bottom. The +% threshold for doing this is if the group is more than \vfilllimit +% percent of a page (\vfilllimit can be changed inside of @tex). +% +\newbox\groupbox +\def\vfilllimit{0.7} +% +\envdef\group{% + \ifnum\catcode`\^^M=\active \else + \errhelp = \groupinvalidhelp + \errmessage{@group invalid in context where filling is enabled}% + \fi + \startsavinginserts + % + \setbox\groupbox = \vtop\bgroup + % Do @comment since we are called inside an environment such as + % @example, where each end-of-line in the input causes an + % end-of-line in the output. We don't want the end-of-line after + % the `@group' to put extra space in the output. Since @group + % should appear on a line by itself (according to the Texinfo + % manual), we don't worry about eating any user text. + \comment +} +% +% The \vtop produces a box with normal height and large depth; thus, TeX puts +% \baselineskip glue before it, and (when the next line of text is done) +% \lineskip glue after it. Thus, space below is not quite equal to space +% above. But it's pretty close. +\def\Egroup{% + % To get correct interline space between the last line of the group + % and the first line afterwards, we have to propagate \prevdepth. + \endgraf % Not \par, as it may have been set to \lisppar. + \global\dimen1 = \prevdepth + \egroup % End the \vtop. + % \dimen0 is the vertical size of the group's box. + \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox + % \dimen2 is how much space is left on the page (more or less). + \dimen2 = \pageheight \advance\dimen2 by -\pagetotal + % if the group doesn't fit on the current page, and it's a big big + % group, force a page break. + \ifdim \dimen0 > \dimen2 + \ifdim \pagetotal < \vfilllimit\pageheight + \page + \fi + \fi + \box\groupbox + \prevdepth = \dimen1 + \checkinserts +} +% +% TeX puts in an \escapechar (i.e., `@') at the beginning of the help +% message, so this ends up printing `@group can only ...'. +% +\newhelp\groupinvalidhelp{% +group can only be used in environments such as @example,^^J% +where each line of input produces a line of output.} + +% @need space-in-mils +% forces a page break if there is not space-in-mils remaining. + +\newdimen\mil \mil=0.001in + +% Old definition--didn't work. +%\parseargdef\need{\par % +%% This method tries to make TeX break the page naturally +%% if the depth of the box does not fit. +%{\baselineskip=0pt% +%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak +%\prevdepth=-1000pt +%}} + +\parseargdef\need{% + % Ensure vertical mode, so we don't make a big box in the middle of a + % paragraph. + \par + % + % If the @need value is less than one line space, it's useless. + \dimen0 = #1\mil + \dimen2 = \ht\strutbox + \advance\dimen2 by \dp\strutbox + \ifdim\dimen0 > \dimen2 + % + % Do a \strut just to make the height of this box be normal, so the + % normal leading is inserted relative to the preceding line. + % And a page break here is fine. + \vtop to #1\mil{\strut\vfil}% + % + % TeX does not even consider page breaks if a penalty added to the + % main vertical list is 10000 or more. But in order to see if the + % empty box we just added fits on the page, we must make it consider + % page breaks. On the other hand, we don't want to actually break the + % page after the empty box. So we use a penalty of 9999. + % + % There is an extremely small chance that TeX will actually break the + % page at this \penalty, if there are no other feasible breakpoints in + % sight. (If the user is using lots of big @group commands, which + % almost-but-not-quite fill up a page, TeX will have a hard time doing + % good page breaking, for example.) However, I could not construct an + % example where a page broke at this \penalty; if it happens in a real + % document, then we can reconsider our strategy. + \penalty9999 + % + % Back up by the size of the box, whether we did a page break or not. + \kern -#1\mil + % + % Do not allow a page break right after this kern. + \nobreak + \fi +} + +% @br forces paragraph break (and is undocumented). + +\let\br = \par + +% @page forces the start of a new page. +% +\def\page{\par\vfill\supereject} + +% @exdent text.... +% outputs text on separate line in roman font, starting at standard page margin + +% This records the amount of indent in the innermost environment. +% That's how much \exdent should take out. +\newskip\exdentamount + +% This defn is used inside fill environments such as @defun. +\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} + +% This defn is used inside nofill environments such as @example. +\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount + \leftline{\hskip\leftskip{\rm#1}}}} + +% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current +% paragraph. For more general purposes, use the \margin insertion +% class. WHICH is `l' or `r'. +% +\newskip\inmarginspacing \inmarginspacing=1cm +\def\strutdepth{\dp\strutbox} +% +\def\doinmargin#1#2{\strut\vadjust{% + \nobreak + \kern-\strutdepth + \vtop to \strutdepth{% + \baselineskip=\strutdepth + \vss + % if you have multiple lines of stuff to put here, you'll need to + % make the vbox yourself of the appropriate size. + \ifx#1l% + \llap{\ignorespaces #2\hskip\inmarginspacing}% + \else + \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% + \fi + \null + }% +}} +\def\inleftmargin{\doinmargin l} +\def\inrightmargin{\doinmargin r} +% +% @inmargin{TEXT [, RIGHT-TEXT]} +% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; +% else use TEXT for both). +% +\def\inmargin#1{\parseinmargin #1,,\finish} +\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \def\lefttext{#1}% have both texts + \def\righttext{#2}% + \else + \def\lefttext{#1}% have only one text + \def\righttext{#1}% + \fi + % + \ifodd\pageno + \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin + \else + \def\temp{\inleftmargin\lefttext}% + \fi + \temp +} + +% @include FILE -- \input text of FILE. +% +\def\include{\parseargusing\filenamecatcodes\includezzz} +\def\includezzz#1{% + \pushthisfilestack + \def\thisfile{#1}% + {% + \makevalueexpandable % we want to expand any @value in FILE. + \turnoffactive % and allow special characters in the expansion + \indexnofonts % Allow `@@' and other weird things in file names. + \edef\temp{\noexpand\input #1 }% + % + % This trickery is to read FILE outside of a group, in case it makes + % definitions, etc. + \expandafter + }\temp + \popthisfilestack +} +\def\filenamecatcodes{% + \catcode`\\=\other + \catcode`~=\other + \catcode`^=\other + \catcode`_=\other + \catcode`|=\other + \catcode`<=\other + \catcode`>=\other + \catcode`+=\other + \catcode`-=\other + \catcode`\`=\other + \catcode`\'=\other +} + +\def\pushthisfilestack{% + \expandafter\pushthisfilestackX\popthisfilestack\StackTerm +} +\def\pushthisfilestackX{% + \expandafter\pushthisfilestackY\thisfile\StackTerm +} +\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% + \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% +} + +\def\popthisfilestack{\errthisfilestackempty} +\def\errthisfilestackempty{\errmessage{Internal error: + the stack of filenames is empty.}} + +\def\thisfile{} + +% @center line +% outputs that line, centered. +% +\parseargdef\center{% + \ifhmode + \let\next\centerH + \else + \let\next\centerV + \fi + \next{\hfil \ignorespaces#1\unskip \hfil}% +} +\def\centerH#1{% + {% + \hfil\break + \advance\hsize by -\leftskip + \advance\hsize by -\rightskip + \line{#1}% + \break + }% +} +\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} + +% @sp n outputs n lines of vertical space + +\parseargdef\sp{\vskip #1\baselineskip} + +% @comment ...line which is ignored... +% @c is the same as @comment +% @ignore ... @end ignore is another way to write a comment + +\def\comment{\begingroup \catcode`\^^M=\other% +\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% +\commentxxx} +{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} + +\let\c=\comment + +% @paragraphindent NCHARS +% We'll use ems for NCHARS, close enough. +% NCHARS can also be the word `asis' or `none'. +% We cannot feasibly implement @paragraphindent asis, though. +% +\def\asisword{asis} % no translation, these are keywords +\def\noneword{none} +% +\parseargdef\paragraphindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \defaultparindent = 0pt + \else + \defaultparindent = #1em + \fi + \fi + \parindent = \defaultparindent +} + +% @exampleindent NCHARS +% We'll use ems for NCHARS like @paragraphindent. +% It seems @exampleindent asis isn't necessary, but +% I preserve it to make it similar to @paragraphindent. +\parseargdef\exampleindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \lispnarrowing = 0pt + \else + \lispnarrowing = #1em + \fi + \fi +} + +% @firstparagraphindent WORD +% If WORD is `none', then suppress indentation of the first paragraph +% after a section heading. If WORD is `insert', then do indent at such +% paragraphs. +% +% The paragraph indentation is suppressed or not by calling +% \suppressfirstparagraphindent, which the sectioning commands do. +% We switch the definition of this back and forth according to WORD. +% By default, we suppress indentation. +% +\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} +\def\insertword{insert} +% +\parseargdef\firstparagraphindent{% + \def\temp{#1}% + \ifx\temp\noneword + \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent + \else\ifx\temp\insertword + \let\suppressfirstparagraphindent = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @firstparagraphindent option `\temp'}% + \fi\fi +} + +% Here is how we actually suppress indentation. Redefine \everypar to +% \kern backwards by \parindent, and then reset itself to empty. +% +% We also make \indent itself not actually do anything until the next +% paragraph. +% +\gdef\dosuppressfirstparagraphindent{% + \gdef\indent{% + \restorefirstparagraphindent + \indent + }% + \gdef\noindent{% + \restorefirstparagraphindent + \noindent + }% + \global\everypar = {% + \kern -\parindent + \restorefirstparagraphindent + }% +} + +\gdef\restorefirstparagraphindent{% + \global \let \indent = \ptexindent + \global \let \noindent = \ptexnoindent + \global \everypar = {}% +} + + +% @asis just yields its argument. Used with @table, for example. +% +\def\asis#1{#1} + +% @math outputs its argument in math mode. +% +% One complication: _ usually means subscripts, but it could also mean +% an actual _ character, as in @math{@var{some_variable} + 1}. So make +% _ active, and distinguish by seeing if the current family is \slfam, +% which is what @var uses. +{ + \catcode`\_ = \active + \gdef\mathunderscore{% + \catcode`\_=\active + \def_{\ifnum\fam=\slfam \_\else\sb\fi}% + } +} +% Another complication: we want \\ (and @\) to output a \ character. +% FYI, plain.tex uses \\ as a temporary control sequence (why?), but +% this is not advertised and we don't care. Texinfo does not +% otherwise define @\. +% +% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. +\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} +% +\def\math{% + \tex + \mathunderscore + \let\\ = \mathbackslash + \mathactive + % make the texinfo accent commands work in math mode + \let\"=\ddot + \let\'=\acute + \let\==\bar + \let\^=\hat + \let\`=\grave + \let\u=\breve + \let\v=\check + \let\~=\tilde + \let\dotaccent=\dot + $\finishmath +} +\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. + +% Some active characters (such as <) are spaced differently in math. +% We have to reset their definitions in case the @math was an argument +% to a command which sets the catcodes (such as @item or @section). +% +{ + \catcode`^ = \active + \catcode`< = \active + \catcode`> = \active + \catcode`+ = \active + \catcode`' = \active + \gdef\mathactive{% + \let^ = \ptexhat + \let< = \ptexless + \let> = \ptexgtr + \let+ = \ptexplus + \let' = \ptexquoteright + } +} + +% Some math mode symbols. +\def\bullet{$\ptexbullet$} +\def\geq{\ifmmode \ge\else $\ge$\fi} +\def\leq{\ifmmode \le\else $\le$\fi} +\def\minus{\ifmmode -\else $-$\fi} + +% @dots{} outputs an ellipsis using the current font. +% We do .5em per period so that it has the same spacing in the cm +% typewriter fonts as three actual period characters; on the other hand, +% in other typewriter fonts three periods are wider than 1.5em. So do +% whichever is larger. +% +\def\dots{% + \leavevmode + \setbox0=\hbox{...}% get width of three periods + \ifdim\wd0 > 1.5em + \dimen0 = \wd0 + \else + \dimen0 = 1.5em + \fi + \hbox to \dimen0{% + \hskip 0pt plus.25fil + .\hskip 0pt plus1fil + .\hskip 0pt plus1fil + .\hskip 0pt plus.5fil + }% +} + +% @enddots{} is an end-of-sentence ellipsis. +% +\def\enddots{% + \dots + \spacefactor=\endofsentencespacefactor +} + +% @comma{} is so commas can be inserted into text without messing up +% Texinfo's parsing. +% +\let\comma = , + +% @refill is a no-op. +\let\refill=\relax + +% If working on a large document in chapters, it is convenient to +% be able to disable indexing, cross-referencing, and contents, for test runs. +% This is done with @novalidate (before @setfilename). +% +\newif\iflinks \linkstrue % by default we want the aux files. +\let\novalidate = \linksfalse + +% @setfilename is done at the beginning of every texinfo file. +% So open here the files we need to have open while reading the input. +% This makes it possible to make a .fmt file for texinfo. +\def\setfilename{% + \fixbackslash % Turn off hack to swallow `\input texinfo'. + \iflinks + \tryauxfile + % Open the new aux file. TeX will close it automatically at exit. + \immediate\openout\auxfile=\jobname.aux + \fi % \openindices needs to do some work in any case. + \openindices + \let\setfilename=\comment % Ignore extra @setfilename cmds. + % + % If texinfo.cnf is present on the system, read it. + % Useful for site-wide @afourpaper, etc. + \openin 1 texinfo.cnf + \ifeof 1 \else \input texinfo.cnf \fi + \closein 1 + % + \comment % Ignore the actual filename. +} + +% Called from \setfilename. +% +\def\openindices{% + \newindex{cp}% + \newcodeindex{fn}% + \newcodeindex{vr}% + \newcodeindex{tp}% + \newcodeindex{ky}% + \newcodeindex{pg}% +} + +% @bye. +\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} + + +\message{pdf,} +% adobe `portable' document format +\newcount\tempnum +\newcount\lnkcount +\newtoks\filename +\newcount\filenamelength +\newcount\pgn +\newtoks\toksA +\newtoks\toksB +\newtoks\toksC +\newtoks\toksD +\newbox\boxA +\newcount\countA +\newif\ifpdf +\newif\ifpdfmakepagedest + +% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 +% can be set). So we test for \relax and 0 as well as \undefined, +% borrowed from ifpdf.sty. +\ifx\pdfoutput\undefined +\else + \ifx\pdfoutput\relax + \else + \ifcase\pdfoutput + \else + \pdftrue + \fi + \fi +\fi + +% PDF uses PostScript string constants for the names of xref targets, +% for display in the outlines, and in other places. Thus, we have to +% double any backslashes. Otherwise, a name like "\node" will be +% interpreted as a newline (\n), followed by o, d, e. Not good. +% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html +% (and related messages, the final outcome is that it is up to the TeX +% user to double the backslashes and otherwise make the string valid, so +% that's what we do). + +% double active backslashes. +% +{\catcode`\@=0 \catcode`\\=\active + @gdef@activebackslashdouble{% + @catcode`@\=@active + @let\=@doublebackslash} +} + +% To handle parens, we must adopt a different approach, since parens are +% not active characters. hyperref.dtx (which has the same problem as +% us) handles it with this amazing macro to replace tokens, with minor +% changes for Texinfo. It is included here under the GPL by permission +% from the author, Heiko Oberdiek. +% +% #1 is the tokens to replace. +% #2 is the replacement. +% #3 is the control sequence with the string. +% +\def\HyPsdSubst#1#2#3{% + \def\HyPsdReplace##1#1##2\END{% + ##1% + \ifx\\##2\\% + \else + #2% + \HyReturnAfterFi{% + \HyPsdReplace##2\END + }% + \fi + }% + \xdef#3{\expandafter\HyPsdReplace#3#1\END}% +} +\long\def\HyReturnAfterFi#1\fi{\fi#1} + +% #1 is a control sequence in which to do the replacements. +\def\backslashparens#1{% + \xdef#1{#1}% redefine it as its expansion; the definition is simply + % \lastnode when called from \setref -> \pdfmkdest. + \HyPsdSubst{(}{\realbackslash(}{#1}% + \HyPsdSubst{)}{\realbackslash)}{#1}% +} + +\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images +with PDF output, and none of those formats could be found. (.eps cannot +be supported due to the design of the PDF format; use regular TeX (DVI +output) for that.)} + +\ifpdf + % + % Color manipulation macros based on pdfcolor.tex. + \def\cmykDarkRed{0.28 1 1 0.35} + \def\cmykBlack{0 0 0 1} + % + \def\pdfsetcolor#1{\pdfliteral{#1 k}} + % Set color, and create a mark which defines \thiscolor accordingly, + % so that \makeheadline knows which color to restore. + \def\setcolor#1{% + \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% + \domark + \pdfsetcolor{#1}% + } + % + \def\maincolor{\cmykBlack} + \pdfsetcolor{\maincolor} + \edef\thiscolor{\maincolor} + \def\lastcolordefs{} + % + \def\makefootline{% + \baselineskip24pt + \line{\pdfsetcolor{\maincolor}\the\footline}% + } + % + \def\makeheadline{% + \vbox to 0pt{% + \vskip-22.5pt + \line{% + \vbox to8.5pt{}% + % Extract \thiscolor definition from the marks. + \getcolormarks + % Typeset the headline with \maincolor, then restore the color. + \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% + }% + \vss + }% + \nointerlineskip + } + % + % + \pdfcatalog{/PageMode /UseOutlines} + % + % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). + \def\dopdfimage#1#2#3{% + \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% + \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% + % + % pdftex (and the PDF format) support .png, .jpg, .pdf (among + % others). Let's try in that order. + \let\pdfimgext=\empty + \begingroup + \openin 1 #1.png \ifeof 1 + \openin 1 #1.jpg \ifeof 1 + \openin 1 #1.jpeg \ifeof 1 + \openin 1 #1.JPG \ifeof 1 + \openin 1 #1.pdf \ifeof 1 + \openin 1 #1.PDF \ifeof 1 + \errhelp = \nopdfimagehelp + \errmessage{Could not find image file #1 for pdf}% + \else \gdef\pdfimgext{PDF}% + \fi + \else \gdef\pdfimgext{pdf}% + \fi + \else \gdef\pdfimgext{JPG}% + \fi + \else \gdef\pdfimgext{jpeg}% + \fi + \else \gdef\pdfimgext{jpg}% + \fi + \else \gdef\pdfimgext{png}% + \fi + \closein 1 + \endgroup + % + % without \immediate, ancient pdftex seg faults when the same image is + % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) + \ifnum\pdftexversion < 14 + \immediate\pdfimage + \else + \immediate\pdfximage + \fi + \ifdim \wd0 >0pt width \imagewidth \fi + \ifdim \wd2 >0pt height \imageheight \fi + \ifnum\pdftexversion<13 + #1.\pdfimgext + \else + {#1.\pdfimgext}% + \fi + \ifnum\pdftexversion < 14 \else + \pdfrefximage \pdflastximage + \fi} + % + \def\pdfmkdest#1{{% + % We have to set dummies so commands such as @code, and characters + % such as \, aren't expanded when present in a section title. + \indexnofonts + \turnoffactive + \activebackslashdouble + \makevalueexpandable + \def\pdfdestname{#1}% + \backslashparens\pdfdestname + \safewhatsit{\pdfdest name{\pdfdestname} xyz}% + }} + % + % used to mark target names; must be expandable. + \def\pdfmkpgn#1{#1} + % + % by default, use a color that is dark enough to print on paper as + % nearly black, but still distinguishable for online viewing. + \def\urlcolor{\cmykDarkRed} + \def\linkcolor{\cmykDarkRed} + \def\endlink{\setcolor{\maincolor}\pdfendlink} + % + % Adding outlines to PDF; macros for calculating structure of outlines + % come from Petr Olsak + \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% + \else \csname#1\endcsname \fi} + \def\advancenumber#1{\tempnum=\expnumber{#1}\relax + \advance\tempnum by 1 + \expandafter\xdef\csname#1\endcsname{\the\tempnum}} + % + % #1 is the section text, which is what will be displayed in the + % outline by the pdf viewer. #2 is the pdf expression for the number + % of subentries (or empty, for subsubsections). #3 is the node text, + % which might be empty if this toc entry had no corresponding node. + % #4 is the page number + % + \def\dopdfoutline#1#2#3#4{% + % Generate a link to the node text if that exists; else, use the + % page number. We could generate a destination for the section + % text in the case where a section has no node, but it doesn't + % seem worth the trouble, since most documents are normally structured. + \def\pdfoutlinedest{#3}% + \ifx\pdfoutlinedest\empty + \def\pdfoutlinedest{#4}% + \else + % Doubled backslashes in the name. + {\activebackslashdouble \xdef\pdfoutlinedest{#3}% + \backslashparens\pdfoutlinedest}% + \fi + % + % Also double the backslashes in the display string. + {\activebackslashdouble \xdef\pdfoutlinetext{#1}% + \backslashparens\pdfoutlinetext}% + % + \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% + } + % + \def\pdfmakeoutlines{% + \begingroup + % Thanh's hack / proper braces in bookmarks + \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace + \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace + % + % Read toc silently, to get counts of subentries for \pdfoutline. + \def\numchapentry##1##2##3##4{% + \def\thischapnum{##2}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + }% + \def\numsecentry##1##2##3##4{% + \advancenumber{chap\thischapnum}% + \def\thissecnum{##2}% + \def\thissubsecnum{0}% + }% + \def\numsubsecentry##1##2##3##4{% + \advancenumber{sec\thissecnum}% + \def\thissubsecnum{##2}% + }% + \def\numsubsubsecentry##1##2##3##4{% + \advancenumber{subsec\thissubsecnum}% + }% + \def\thischapnum{0}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + % + % use \def rather than \let here because we redefine \chapentry et + % al. a second time, below. + \def\appentry{\numchapentry}% + \def\appsecentry{\numsecentry}% + \def\appsubsecentry{\numsubsecentry}% + \def\appsubsubsecentry{\numsubsubsecentry}% + \def\unnchapentry{\numchapentry}% + \def\unnsecentry{\numsecentry}% + \def\unnsubsecentry{\numsubsecentry}% + \def\unnsubsubsecentry{\numsubsubsecentry}% + \readdatafile{toc}% + % + % Read toc second time, this time actually producing the outlines. + % The `-' means take the \expnumber as the absolute number of + % subentries, which we calculated on our first read of the .toc above. + % + % We use the node names as the destinations. + \def\numchapentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% + \def\numsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% + \def\numsubsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% + \def\numsubsubsecentry##1##2##3##4{% count is always zero + \dopdfoutline{##1}{}{##3}{##4}}% + % + % PDF outlines are displayed using system fonts, instead of + % document fonts. Therefore we cannot use special characters, + % since the encoding is unknown. For example, the eogonek from + % Latin 2 (0xea) gets translated to a | character. Info from + % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. + % + % xx to do this right, we have to translate 8-bit characters to + % their "best" equivalent, based on the @documentencoding. Right + % now, I guess we'll just let the pdf reader have its way. + \indexnofonts + \setupdatafile + \catcode`\\=\active \otherbackslash + \input \tocreadfilename + \endgroup + } + % + \def\skipspaces#1{\def\PP{#1}\def\D{|}% + \ifx\PP\D\let\nextsp\relax + \else\let\nextsp\skipspaces + \ifx\p\space\else\addtokens{\filename}{\PP}% + \advance\filenamelength by 1 + \fi + \fi + \nextsp} + \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} + \ifnum\pdftexversion < 14 + \let \startlink \pdfannotlink + \else + \let \startlink \pdfstartlink + \fi + % make a live url in pdf output. + \def\pdfurl#1{% + \begingroup + % it seems we really need yet another set of dummies; have not + % tried to figure out what each command should do in the context + % of @url. for now, just make @/ a no-op, that's the only one + % people have actually reported a problem with. + % + \normalturnoffactive + \def\@{@}% + \let\/=\empty + \makevalueexpandable + \leavevmode\setcolor{\urlcolor}% + \startlink attr{/Border [0 0 0]}% + user{/Subtype /Link /A << /S /URI /URI (#1) >>}% + \endgroup} + \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} + \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} + \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} + \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} + \def\maketoks{% + \expandafter\poptoks\the\toksA|ENDTOKS|\relax + \ifx\first0\adn0 + \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 + \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 + \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 + \else + \ifnum0=\countA\else\makelink\fi + \ifx\first.\let\next=\done\else + \let\next=\maketoks + \addtokens{\toksB}{\the\toksD} + \ifx\first,\addtokens{\toksB}{\space}\fi + \fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \next} + \def\makelink{\addtokens{\toksB}% + {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} + \def\pdflink#1{% + \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} + \setcolor{\linkcolor}#1\endlink} + \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} +\else + \let\pdfmkdest = \gobble + \let\pdfurl = \gobble + \let\endlink = \relax + \let\setcolor = \gobble + \let\pdfsetcolor = \gobble + \let\pdfmakeoutlines = \relax +\fi % \ifx\pdfoutput + + +\message{fonts,} + +% Change the current font style to #1, remembering it in \curfontstyle. +% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in +% italics, not bold italics. +% +\def\setfontstyle#1{% + \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. + \csname ten#1\endcsname % change the current font +} + +% Select #1 fonts with the current style. +% +\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} + +\def\rm{\fam=0 \setfontstyle{rm}} +\def\it{\fam=\itfam \setfontstyle{it}} +\def\sl{\fam=\slfam \setfontstyle{sl}} +\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} +\def\tt{\fam=\ttfam \setfontstyle{tt}} + +% Unfortunately, we have to override this for titles and the like, since +% in those cases "rm" is bold. Sigh. +\def\rmisbold{\rm\def\curfontstyle{bf}} + +% Texinfo sort of supports the sans serif font style, which plain TeX does not. +% So we set up a \sf. +\newfam\sffam +\def\sf{\fam=\sffam \setfontstyle{sf}} +\let\li = \sf % Sometimes we call it \li, not \sf. + +% We don't need math for this font style. +\def\ttsl{\setfontstyle{ttsl}} + + +% Default leading. +\newdimen\textleading \textleading = 13.2pt + +% Set the baselineskip to #1, and the lineskip and strut size +% correspondingly. There is no deep meaning behind these magic numbers +% used as factors; they just match (closely enough) what Knuth defined. +% +\def\lineskipfactor{.08333} +\def\strutheightpercent{.70833} +\def\strutdepthpercent {.29167} +% +% can get a sort of poor man's double spacing by redefining this. +\def\baselinefactor{1} +% +\def\setleading#1{% + \dimen0 = #1\relax + \normalbaselineskip = \baselinefactor\dimen0 + \normallineskip = \lineskipfactor\normalbaselineskip + \normalbaselines + \setbox\strutbox =\hbox{% + \vrule width0pt height\strutheightpercent\baselineskip + depth \strutdepthpercent \baselineskip + }% +} + +% PDF CMaps. See also LaTeX's t1.cmap. +% +% do nothing with this by default. +\expandafter\let\csname cmapOT1\endcsname\gobble +\expandafter\let\csname cmapOT1IT\endcsname\gobble +\expandafter\let\csname cmapOT1TT\endcsname\gobble + +% if we are producing pdf, and we have \pdffontattr, then define cmaps. +% (\pdffontattr was introduced many years ago, but people still run +% older pdftex's; it's easy to conditionalize, so we do.) +\ifpdf \ifx\pdffontattr\undefined \else + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1-0) +%%Title: (TeX-OT1-0 TeX OT1 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1) +/Supplement 0 +>> def +/CMapName /TeX-OT1-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<23> <26> <0023> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +40 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +% +% \cmapOT1IT + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1IT-0) +%%Title: (TeX-OT1IT-0 TeX OT1IT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1IT) +/Supplement 0 +>> def +/CMapName /TeX-OT1IT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<25> <26> <0025> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +42 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<23> <0023> +<24> <00A3> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1IT\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +% +% \cmapOT1TT + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1TT-0) +%%Title: (TeX-OT1TT-0 TeX OT1TT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1TT) +/Supplement 0 +>> def +/CMapName /TeX-OT1TT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +5 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<21> <26> <0021> +<28> <5F> <0028> +<61> <7E> <0061> +endbfrange +32 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <2191> +<0C> <2193> +<0D> <0027> +<0E> <00A1> +<0F> <00BF> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<20> <2423> +<27> <2019> +<60> <2018> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1TT\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +\fi\fi + + +% Set the font macro #1 to the font named #2, adding on the +% specified font prefix (normally `cm'). +% #3 is the font's design size, #4 is a scale factor, #5 is the CMap +% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass +% empty to omit). +\def\setfont#1#2#3#4#5{% + \font#1=\fontprefix#2#3 scaled #4 + \csname cmap#5\endcsname#1% +} +% This is what gets called when #5 of \setfont is empty. +\let\cmap\gobble +% emacs-page end of cmaps + +% Use cm as the default font prefix. +% To specify the font prefix, you must define \fontprefix +% before you read in texinfo.tex. +\ifx\fontprefix\undefined +\def\fontprefix{cm} +\fi +% Support font families that don't use the same naming scheme as CM. +\def\rmshape{r} +\def\rmbshape{bx} %where the normal face is bold +\def\bfshape{b} +\def\bxshape{bx} +\def\ttshape{tt} +\def\ttbshape{tt} +\def\ttslshape{sltt} +\def\itshape{ti} +\def\itbshape{bxti} +\def\slshape{sl} +\def\slbshape{bxsl} +\def\sfshape{ss} +\def\sfbshape{ss} +\def\scshape{csc} +\def\scbshape{csc} + +% Definitions for a main text size of 11pt. This is the default in +% Texinfo. +% +\def\definetextfontsizexi{% +% Text fonts (11.2pt, magstep1). +\def\textnominalsize{11pt} +\edef\mainmagstep{\magstephalf} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1095} + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstep1}{OT1} +\setfont\deftt\ttshape{10}{\magstep1}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 +\def\smallecsize{0900} + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 +\def\smallerecsize{0800} + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\titleecsize{2074} + +% Chapter (and unnumbered) fonts (17.28pt). +\def\chapnominalsize{17pt} +\setfont\chaprm\rmbshape{12}{\magstep2}{OT1} +\setfont\chapit\itbshape{10}{\magstep3}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep3}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} +\setfont\chapsf\sfbshape{17}{1000}{OT1} +\let\chapbf=\chaprm +\setfont\chapsc\scbshape{10}{\magstep3}{OT1} +\font\chapi=cmmi12 scaled \magstep2 +\font\chapsy=cmsy10 scaled \magstep3 +\def\chapecsize{1728} + +% Section fonts (14.4pt). +\def\secnominalsize{14pt} +\setfont\secrm\rmbshape{12}{\magstep1}{OT1} +\setfont\secit\itbshape{10}{\magstep2}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep2}{OT1} +\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\secsf\sfbshape{12}{\magstep1}{OT1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep2}{OT1} +\font\seci=cmmi12 scaled \magstep1 +\font\secsy=cmsy10 scaled \magstep2 +\def\sececsize{1440} + +% Subsection fonts (13.15pt). +\def\ssecnominalsize{13pt} +\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} +\setfont\ssecit\itbshape{10}{1315}{OT1IT} +\setfont\ssecsl\slbshape{10}{1315}{OT1} +\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} +\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1315}{OT1} +\font\sseci=cmmi12 scaled \magstephalf +\font\ssecsy=cmsy10 scaled 1315 +\def\ssececsize{1200} + +% Reduced fonts for @acro in text (10pt). +\def\reducednominalsize{10pt} +\setfont\reducedrm\rmshape{10}{1000}{OT1} +\setfont\reducedtt\ttshape{10}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{1000}{OT1} +\setfont\reducedit\itshape{10}{1000}{OT1IT} +\setfont\reducedsl\slshape{10}{1000}{OT1} +\setfont\reducedsf\sfshape{10}{1000}{OT1} +\setfont\reducedsc\scshape{10}{1000}{OT1} +\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} +\font\reducedi=cmmi10 +\font\reducedsy=cmsy10 +\def\reducedecsize{1000} + +% reset the current fonts +\textfonts +\rm +} % end of 11pt text font size definitions + + +% Definitions to make the main text be 10pt Computer Modern, with +% section, chapter, etc., sizes following suit. This is for the GNU +% Press printing of the Emacs 22 manual. Maybe other manuals in the +% future. Used with @smallbook, which sets the leading to 12pt. +% +\def\definetextfontsizex{% +% Text fonts (10pt). +\def\textnominalsize{10pt} +\edef\mainmagstep{1000} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1000} + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstephalf}{OT1} +\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 +\def\smallecsize{0900} + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 +\def\smallerecsize{0800} + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\titleecsize{2074} + +% Chapter fonts (14.4pt). +\def\chapnominalsize{14pt} +\setfont\chaprm\rmbshape{12}{\magstep1}{OT1} +\setfont\chapit\itbshape{10}{\magstep2}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep2}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\chapsf\sfbshape{12}{\magstep1}{OT1} +\let\chapbf\chaprm +\setfont\chapsc\scbshape{10}{\magstep2}{OT1} +\font\chapi=cmmi12 scaled \magstep1 +\font\chapsy=cmsy10 scaled \magstep2 +\def\chapecsize{1440} + +% Section fonts (12pt). +\def\secnominalsize{12pt} +\setfont\secrm\rmbshape{12}{1000}{OT1} +\setfont\secit\itbshape{10}{\magstep1}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep1}{OT1} +\setfont\sectt\ttbshape{12}{1000}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} +\setfont\secsf\sfbshape{12}{1000}{OT1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep1}{OT1} +\font\seci=cmmi12 +\font\secsy=cmsy10 scaled \magstep1 +\def\sececsize{1200} + +% Subsection fonts (10pt). +\def\ssecnominalsize{10pt} +\setfont\ssecrm\rmbshape{10}{1000}{OT1} +\setfont\ssecit\itbshape{10}{1000}{OT1IT} +\setfont\ssecsl\slbshape{10}{1000}{OT1} +\setfont\ssectt\ttbshape{10}{1000}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} +\setfont\ssecsf\sfbshape{10}{1000}{OT1} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1000}{OT1} +\font\sseci=cmmi10 +\font\ssecsy=cmsy10 +\def\ssececsize{1000} + +% Reduced fonts for @acro in text (9pt). +\def\reducednominalsize{9pt} +\setfont\reducedrm\rmshape{9}{1000}{OT1} +\setfont\reducedtt\ttshape{9}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{900}{OT1} +\setfont\reducedit\itshape{9}{1000}{OT1IT} +\setfont\reducedsl\slshape{9}{1000}{OT1} +\setfont\reducedsf\sfshape{9}{1000}{OT1} +\setfont\reducedsc\scshape{10}{900}{OT1} +\setfont\reducedttsl\ttslshape{10}{900}{OT1TT} +\font\reducedi=cmmi9 +\font\reducedsy=cmsy9 +\def\reducedecsize{0900} + +% reduce space between paragraphs +\divide\parskip by 2 + +% reset the current fonts +\textfonts +\rm +} % end of 10pt text font size definitions + + +% We provide the user-level command +% @fonttextsize 10 +% (or 11) to redefine the text font size. pt is assumed. +% +\def\xword{10} +\def\xiword{11} +% +\parseargdef\fonttextsize{% + \def\textsizearg{#1}% + \wlog{doing @fonttextsize \textsizearg}% + % + % Set \globaldefs so that documents can use this inside @tex, since + % makeinfo 4.8 does not support it, but we need it nonetheless. + % + \begingroup \globaldefs=1 + \ifx\textsizearg\xword \definetextfontsizex + \else \ifx\textsizearg\xiword \definetextfontsizexi + \else + \errhelp=\EMsimple + \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} + \fi\fi + \endgroup +} + + +% In order for the font changes to affect most math symbols and letters, +% we have to define the \textfont of the standard families. Since +% texinfo doesn't allow for producing subscripts and superscripts except +% in the main text, we don't bother to reset \scriptfont and +% \scriptscriptfont (which would also require loading a lot more fonts). +% +\def\resetmathfonts{% + \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy + \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf + \textfont\ttfam=\tentt \textfont\sffam=\tensf +} + +% The font-changing commands redefine the meanings of \tenSTYLE, instead +% of just \STYLE. We do this because \STYLE needs to also set the +% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire +% \tenSTYLE to set the current font. +% +% Each font-changing command also sets the names \lsize (one size lower) +% and \lllsize (three sizes lower). These relative commands are used in +% the LaTeX logo and acronyms. +% +% This all needs generalizing, badly. +% +\def\textfonts{% + \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl + \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc + \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy + \let\tenttsl=\textttsl + \def\curfontsize{text}% + \def\lsize{reduced}\def\lllsize{smaller}% + \resetmathfonts \setleading{\textleading}} +\def\titlefonts{% + \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl + \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc + \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy + \let\tenttsl=\titlettsl + \def\curfontsize{title}% + \def\lsize{chap}\def\lllsize{subsec}% + \resetmathfonts \setleading{25pt}} +\def\titlefont#1{{\titlefonts\rmisbold #1}} +\def\chapfonts{% + \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl + \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc + \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy + \let\tenttsl=\chapttsl + \def\curfontsize{chap}% + \def\lsize{sec}\def\lllsize{text}% + \resetmathfonts \setleading{19pt}} +\def\secfonts{% + \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl + \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc + \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy + \let\tenttsl=\secttsl + \def\curfontsize{sec}% + \def\lsize{subsec}\def\lllsize{reduced}% + \resetmathfonts \setleading{16pt}} +\def\subsecfonts{% + \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl + \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc + \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy + \let\tenttsl=\ssecttsl + \def\curfontsize{ssec}% + \def\lsize{text}\def\lllsize{small}% + \resetmathfonts \setleading{15pt}} +\let\subsubsecfonts = \subsecfonts +\def\reducedfonts{% + \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl + \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc + \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy + \let\tenttsl=\reducedttsl + \def\curfontsize{reduced}% + \def\lsize{small}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallfonts{% + \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl + \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc + \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy + \let\tenttsl=\smallttsl + \def\curfontsize{small}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallerfonts{% + \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl + \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc + \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy + \let\tenttsl=\smallerttsl + \def\curfontsize{smaller}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{9.5pt}} + +% Set the fonts to use with the @small... environments. +\let\smallexamplefonts = \smallfonts + +% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample +% can fit this many characters: +% 8.5x11=86 smallbook=72 a4=90 a5=69 +% If we use \scriptfonts (8pt), then we can fit this many characters: +% 8.5x11=90+ smallbook=80 a4=90+ a5=77 +% For me, subjectively, the few extra characters that fit aren't worth +% the additional smallness of 8pt. So I'm making the default 9pt. +% +% By the way, for comparison, here's what fits with @example (10pt): +% 8.5x11=71 smallbook=60 a4=75 a5=58 +% +% I wish the USA used A4 paper. +% --karl, 24jan03. + + +% Set up the default fonts, so we can use them for creating boxes. +% +\definetextfontsizexi + +% Define these so they can be easily changed for other fonts. +\def\angleleft{$\langle$} +\def\angleright{$\rangle$} + +% Count depth in font-changes, for error checks +\newcount\fontdepth \fontdepth=0 + +% Fonts for short table of contents. +\setfont\shortcontrm\rmshape{12}{1000}{OT1} +\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 +\setfont\shortcontsl\slshape{12}{1000}{OT1} +\setfont\shortconttt\ttshape{12}{1000}{OT1TT} + +%% Add scribe-like font environments, plus @l for inline lisp (usually sans +%% serif) and @ii for TeX italic + +% \smartitalic{ARG} outputs arg in italics, followed by an italic correction +% unless the following character is such as not to need one. +\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else + \ptexslash\fi\fi\fi} +\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} +\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} + +% like \smartslanted except unconditionally uses \ttsl. +% @var is set to this for defun arguments. +\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} + +% like \smartslanted except unconditionally use \sl. We never want +% ttsl for book titles, do we? +\def\cite#1{{\sl #1}\futurelet\next\smartitalicx} + +\let\i=\smartitalic +\let\slanted=\smartslanted +\def\var#1{{\setupmarkupstyle{var}\smartslanted{#1}}} +\let\dfn=\smartslanted +\let\emph=\smartitalic + +% @b, explicit bold. +\def\b#1{{\bf #1}} +\let\strong=\b + +% @sansserif, explicit sans. +\def\sansserif#1{{\sf #1}} + +% We can't just use \exhyphenpenalty, because that only has effect at +% the end of a paragraph. Restore normal hyphenation at the end of the +% group within which \nohyphenation is presumably called. +% +\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} +\def\restorehyphenation{\hyphenchar\font = `- } + +% Set sfcode to normal for the chars that usually have another value. +% Can't use plain's \frenchspacing because it uses the `\x notation, and +% sometimes \x has an active definition that messes things up. +% +\catcode`@=11 + \def\plainfrenchspacing{% + \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m + \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m + \def\endofsentencespacefactor{1000}% for @. and friends + } + \def\plainnonfrenchspacing{% + \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 + \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 + \def\endofsentencespacefactor{3000}% for @. and friends + } +\catcode`@=\other +\def\endofsentencespacefactor{3000}% default + +\def\t#1{% + {\tt \rawbackslash \plainfrenchspacing #1}% + \null +} +\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} +\setfont\keyrm\rmshape{8}{1000}{OT1} +\font\keysy=cmsy9 +\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% + \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% + \vbox{\hrule\kern-0.4pt + \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% + \kern-0.4pt\hrule}% + \kern-.06em\raise0.4pt\hbox{\angleright}}}} +\def\key #1{{\setupmarkupstyle{key}\nohyphenation \uppercase{#1}}\null} +% The old definition, with no lozenge: +%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} +\def\ctrl #1{{\tt \rawbackslash \hat}#1} + +% @file, @option are the same as @samp. +\let\file=\samp +\let\option=\samp + +% @code is a modification of @t, +% which makes spaces the same size as normal in the surrounding text. +\def\tclose#1{% + {% + % Change normal interword space to be same as for the current font. + \spaceskip = \fontdimen2\font + % + % Switch to typewriter. + \tt + % + % But `\ ' produces the large typewriter interword space. + \def\ {{\spaceskip = 0pt{} }}% + % + % Turn off hyphenation. + \nohyphenation + % + \rawbackslash + \plainfrenchspacing + #1% + }% + \null +} + +% We *must* turn on hyphenation at `-' and `_' in @code. +% Otherwise, it is too hard to avoid overfull hboxes +% in the Emacs manual, the Library manual, etc. + +% Unfortunately, TeX uses one parameter (\hyphenchar) to control +% both hyphenation at - and hyphenation within words. +% We must therefore turn them both off (\tclose does that) +% and arrange explicitly to hyphenate at a dash. +% -- rms. +{ + \catcode`\-=\active \catcode`\_=\active + \catcode`\'=\active \catcode`\`=\active + \global\let'=\rq \global\let`=\lq % default definitions + % + \global\def\code{\begingroup + \setupmarkupstyle{code}% + % The following should really be moved into \setupmarkupstyle handlers. + \catcode\dashChar=\active \catcode\underChar=\active + \ifallowcodebreaks + \let-\codedash + \let_\codeunder + \else + \let-\realdash + \let_\realunder + \fi + \codex + } +} + +\def\realdash{-} +\def\codedash{-\discretionary{}{}{}} +\def\codeunder{% + % this is all so @math{@code{var_name}+1} can work. In math mode, _ + % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) + % will therefore expand the active definition of _, which is us + % (inside @code that is), therefore an endless loop. + \ifusingtt{\ifmmode + \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. + \else\normalunderscore \fi + \discretionary{}{}{}}% + {\_}% +} +\def\codex #1{\tclose{#1}\endgroup} + +% An additional complication: the above will allow breaks after, e.g., +% each of the four underscores in __typeof__. This is undesirable in +% some manuals, especially if they don't have long identifiers in +% general. @allowcodebreaks provides a way to control this. +% +\newif\ifallowcodebreaks \allowcodebreakstrue + +\def\keywordtrue{true} +\def\keywordfalse{false} + +\parseargdef\allowcodebreaks{% + \def\txiarg{#1}% + \ifx\txiarg\keywordtrue + \allowcodebreakstrue + \else\ifx\txiarg\keywordfalse + \allowcodebreaksfalse + \else + \errhelp = \EMsimple + \errmessage{Unknown @allowcodebreaks option `\txiarg'}% + \fi\fi +} + +% @kbd is like @code, except that if the argument is just one @key command, +% then @kbd has no effect. + +% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), +% `example' (@kbd uses ttsl only inside of @example and friends), +% or `code' (@kbd uses normal tty font always). +\parseargdef\kbdinputstyle{% + \def\txiarg{#1}% + \ifx\txiarg\worddistinct + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% + \else\ifx\txiarg\wordexample + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% + \else\ifx\txiarg\wordcode + \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% + \else + \errhelp = \EMsimple + \errmessage{Unknown @kbdinputstyle option `\txiarg'}% + \fi\fi\fi +} +\def\worddistinct{distinct} +\def\wordexample{example} +\def\wordcode{code} + +% Default is `distinct.' +\kbdinputstyle distinct + +\def\xkey{\key} +\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% +\ifx\one\xkey\ifx\threex\three \key{#2}% +\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi +\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi} + +% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. +\let\indicateurl=\code +\let\env=\code +\let\command=\code + +% @clicksequence{File @click{} Open ...} +\def\clicksequence#1{\begingroup #1\endgroup} + +% @clickstyle @arrow (by default) +\parseargdef\clickstyle{\def\click{#1}} +\def\click{\arrow} + +% @uref (abbreviation for `urlref') takes an optional (comma-separated) +% second argument specifying the text to display and an optional third +% arg as text to display instead of (rather than in addition to) the url +% itself. First (mandatory) arg is the url. Perhaps eventually put in +% a hypertex \special here. +% +\def\uref#1{\douref #1,,,\finish} +\def\douref#1,#2,#3,#4\finish{\begingroup + \unsepspaces + \pdfurl{#1}% + \setbox0 = \hbox{\ignorespaces #3}% + \ifdim\wd0 > 0pt + \unhbox0 % third arg given, show only that + \else + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \ifpdf + \unhbox0 % PDF: 2nd arg given, show only it + \else + \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url + \fi + \else + \code{#1}% only url given, so show it + \fi + \fi + \endlink +\endgroup} + +% @url synonym for @uref, since that's how everyone uses it. +% +\let\url=\uref + +% rms does not like angle brackets --karl, 17may97. +% So now @email is just like @uref, unless we are pdf. +% +%\def\email#1{\angleleft{\tt #1}\angleright} +\ifpdf + \def\email#1{\doemail#1,,\finish} + \def\doemail#1,#2,#3\finish{\begingroup + \unsepspaces + \pdfurl{mailto:#1}% + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi + \endlink + \endgroup} +\else + \let\email=\uref +\fi + +% Check if we are currently using a typewriter font. Since all the +% Computer Modern typewriter fonts have zero interword stretch (and +% shrink), and it is reasonable to expect all typewriter fonts to have +% this property, we can check that font parameter. +% +\def\ifmonospace{\ifdim\fontdimen3\font=0pt } + +% Typeset a dimension, e.g., `in' or `pt'. The only reason for the +% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. +% +\def\dmn#1{\thinspace #1} + +\def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}} + +% @l was never documented to mean ``switch to the Lisp font'', +% and it is not used as such in any manual I can find. We need it for +% Polish suppressed-l. --karl, 22sep96. +%\def\l#1{{\li #1}\null} + +% Explicit font changes: @r, @sc, undocumented @ii. +\def\r#1{{\rm #1}} % roman font +\def\sc#1{{\smallcaps#1}} % smallcaps font +\def\ii#1{{\it #1}} % italic font + +% @acronym for "FBI", "NATO", and the like. +% We print this one point size smaller, since it's intended for +% all-uppercase. +% +\def\acronym#1{\doacronym #1,,\finish} +\def\doacronym#1,#2,#3\finish{% + {\selectfonts\lsize #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} + +% @abbr for "Comput. J." and the like. +% No font change, but don't do end-of-sentence spacing. +% +\def\abbr#1{\doabbr #1,,\finish} +\def\doabbr#1,#2,#3\finish{% + {\plainfrenchspacing #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} + +% @pounds{} is a sterling sign, which Knuth put in the CM italic font. +% +\def\pounds{{\it\$}} + +% @euro{} comes from a separate font, depending on the current style. +% We use the free feym* fonts from the eurosym package by Henrik +% Theiling, which support regular, slanted, bold and bold slanted (and +% "outlined" (blackboard board, sort of) versions, which we don't need). +% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. +% +% Although only regular is the truly official Euro symbol, we ignore +% that. The Euro is designed to be slightly taller than the regular +% font height. +% +% feymr - regular +% feymo - slanted +% feybr - bold +% feybo - bold slanted +% +% There is no good (free) typewriter version, to my knowledge. +% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. +% Hmm. +% +% Also doesn't work in math. Do we need to do math with euro symbols? +% Hope not. +% +% +\def\euro{{\eurofont e}} +\def\eurofont{% + % We set the font at each command, rather than predefining it in + % \textfonts and the other font-switching commands, so that + % installations which never need the symbol don't have to have the + % font installed. + % + % There is only one designed size (nominal 10pt), so we always scale + % that to the current nominal size. + % + % By the way, simply using "at 1em" works for cmr10 and the like, but + % does not work for cmbx10 and other extended/shrunken fonts. + % + \def\eurosize{\csname\curfontsize nominalsize\endcsname}% + % + \ifx\curfontstyle\bfstylename + % bold: + \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize + \else + % regular: + \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize + \fi + \thiseurofont +} + +% Hacks for glyphs from the EC fonts similar to \euro. We don't +% use \let for the aliases, because sometimes we redefine the original +% macro, and the alias should reflect the redefinition. +\def\guillemetleft{{\ecfont \char"13}} +\def\guillemotleft{\guillemetleft} +\def\guillemetright{{\ecfont \char"14}} +\def\guillemotright{\guillemetright} +\def\guilsinglleft{{\ecfont \char"0E}} +\def\guilsinglright{{\ecfont \char"0F}} +\def\quotedblbase{{\ecfont \char"12}} +\def\quotesinglbase{{\ecfont \char"0D}} +% +% This positioning is not perfect (see the ogonek LaTeX package), but +% we have the precomposed glyphs for the most common cases. We put the +% tests to use those glyphs in the single \ogonek macro so we have fewer +% dummy definitions to worry about for index entries, etc. +% +% ogonek is also used with other letters in Lithuanian (IOU), but using +% the precomposed glyphs for those is not so easy since they aren't in +% the same EC font. +\def\ogonek#1{{% + \def\temp{#1}% + \ifx\temp\macrocharA\Aogonek + \else\ifx\temp\macrochara\aogonek + \else\ifx\temp\macrocharE\Eogonek + \else\ifx\temp\macrochare\eogonek + \else + \ecfont \setbox0=\hbox{#1}% + \ifdim\ht0=1ex\accent"0C #1% + \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% + \fi + \fi\fi\fi\fi + }% +} +\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} +\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} +\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} +\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} +% +\def\ecfont{% + % We can't distinguish serif/sans and italic/slanted, but this + % is used for crude hacks anyway (like adding French and German + % quotes to documents typeset with CM, where we lose kerning), so + % hopefully nobody will notice/care. + \edef\ecsize{\csname\curfontsize ecsize\endcsname}% + \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% + \ifx\curfontstyle\bfstylename + % bold: + \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize + \else + % regular: + \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize + \fi + \thisecfont +} + +% @registeredsymbol - R in a circle. The font for the R should really +% be smaller yet, but lllsize is the best we can do for now. +% Adapted from the plain.tex definition of \copyright. +% +\def\registeredsymbol{% + $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% + \hfil\crcr\Orb}}% + }$% +} + +% @textdegree - the normal degrees sign. +% +\def\textdegree{$^\circ$} + +% Laurent Siebenmann reports \Orb undefined with: +% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 +% so we'll define it if necessary. +% +\ifx\Orb\undefined +\def\Orb{\mathhexbox20D} +\fi + +% Quotes. +\chardef\quotedblleft="5C +\chardef\quotedblright=`\" +\chardef\quoteleft=`\` +\chardef\quoteright=`\' + + +\message{page headings,} + +\newskip\titlepagetopglue \titlepagetopglue = 1.5in +\newskip\titlepagebottomglue \titlepagebottomglue = 2pc + +% First the title page. Must do @settitle before @titlepage. +\newif\ifseenauthor +\newif\iffinishedtitlepage + +% Do an implicit @contents or @shortcontents after @end titlepage if the +% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. +% +\newif\ifsetcontentsaftertitlepage + \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue +\newif\ifsetshortcontentsaftertitlepage + \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue + +\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% + \endgroup\page\hbox{}\page} + +\envdef\titlepage{% + % Open one extra group, as we want to close it in the middle of \Etitlepage. + \begingroup + \parindent=0pt \textfonts + % Leave some space at the very top of the page. + \vglue\titlepagetopglue + % No rule at page bottom unless we print one at the top with @title. + \finishedtitlepagetrue + % + % Most title ``pages'' are actually two pages long, with space + % at the top of the second. We don't want the ragged left on the second. + \let\oldpage = \page + \def\page{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + \let\page = \oldpage + \page + \null + }% +} + +\def\Etitlepage{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + % It is important to do the page break before ending the group, + % because the headline and footline are only empty inside the group. + % If we use the new definition of \page, we always get a blank page + % after the title page, which we certainly don't want. + \oldpage + \endgroup + % + % Need this before the \...aftertitlepage checks so that if they are + % in effect the toc pages will come out with page numbers. + \HEADINGSon + % + % If they want short, they certainly want long too. + \ifsetshortcontentsaftertitlepage + \shortcontents + \contents + \global\let\shortcontents = \relax + \global\let\contents = \relax + \fi + % + \ifsetcontentsaftertitlepage + \contents + \global\let\contents = \relax + \global\let\shortcontents = \relax + \fi +} + +\def\finishtitlepage{% + \vskip4pt \hrule height 2pt width \hsize + \vskip\titlepagebottomglue + \finishedtitlepagetrue +} + +%%% Macros to be used within @titlepage: + +\let\subtitlerm=\tenrm +\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} + +\parseargdef\title{% + \checkenv\titlepage + \leftline{\titlefonts\rmisbold #1} + % print a rule at the page bottom also. + \finishedtitlepagefalse + \vskip4pt \hrule height 4pt width \hsize \vskip4pt +} + +\parseargdef\subtitle{% + \checkenv\titlepage + {\subtitlefont \rightline{#1}}% +} + +% @author should come last, but may come many times. +% It can also be used inside @quotation. +% +\parseargdef\author{% + \def\temp{\quotation}% + \ifx\thisenv\temp + \def\quotationauthor{#1}% printed in \Equotation. + \else + \checkenv\titlepage + \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi + {\secfonts\rmisbold \leftline{#1}}% + \fi +} + + +%%% Set up page headings and footings. + +\let\thispage=\folio + +\newtoks\evenheadline % headline on even pages +\newtoks\oddheadline % headline on odd pages +\newtoks\evenfootline % footline on even pages +\newtoks\oddfootline % footline on odd pages + +% Now make TeX use those variables +\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline + \else \the\evenheadline \fi}} +\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline + \else \the\evenfootline \fi}\HEADINGShook} +\let\HEADINGShook=\relax + +% Commands to set those variables. +% For example, this is what @headings on does +% @evenheading @thistitle|@thispage|@thischapter +% @oddheading @thischapter|@thispage|@thistitle +% @evenfooting @thisfile|| +% @oddfooting ||@thisfile + + +\def\evenheading{\parsearg\evenheadingxxx} +\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} +\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% +\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddheading{\parsearg\oddheadingxxx} +\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} +\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% +\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% + +\def\evenfooting{\parsearg\evenfootingxxx} +\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} +\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% +\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddfooting{\parsearg\oddfootingxxx} +\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} +\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% + \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% + % + % Leave some space for the footline. Hopefully ok to assume + % @evenfooting will not be used by itself. + \global\advance\pageheight by -12pt + \global\advance\vsize by -12pt +} + +\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} + +% @evenheadingmarks top \thischapter <- chapter at the top of a page +% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page +% +% The same set of arguments for: +% +% @oddheadingmarks +% @evenfootingmarks +% @oddfootingmarks +% @everyheadingmarks +% @everyfootingmarks + +\def\evenheadingmarks{\headingmarks{even}{heading}} +\def\oddheadingmarks{\headingmarks{odd}{heading}} +\def\evenfootingmarks{\headingmarks{even}{footing}} +\def\oddfootingmarks{\headingmarks{odd}{footing}} +\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} + \headingmarks{odd}{heading}{#1} } +\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} + \headingmarks{odd}{footing}{#1} } +% #1 = even/odd, #2 = heading/footing, #3 = top/bottom. +\def\headingmarks#1#2#3 {% + \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname + \global\expandafter\let\csname get#1#2marks\endcsname \temp +} + +\everyheadingmarks bottom +\everyfootingmarks bottom + +% @headings double turns headings on for double-sided printing. +% @headings single turns headings on for single-sided printing. +% @headings off turns them off. +% @headings on same as @headings double, retained for compatibility. +% @headings after turns on double-sided headings after this page. +% @headings doubleafter turns on double-sided headings after this page. +% @headings singleafter turns on single-sided headings after this page. +% By default, they are off at the start of a document, +% and turned `on' after @end titlepage. + +\def\headings #1 {\csname HEADINGS#1\endcsname} + +\def\HEADINGSoff{% +\global\evenheadline={\hfil} \global\evenfootline={\hfil} +\global\oddheadline={\hfil} \global\oddfootline={\hfil}} +\HEADINGSoff +% When we turn headings on, set the page number to 1. +% For double-sided printing, put current file name in lower left corner, +% chapter name on inside top of right hand pages, document +% title on inside top of left hand pages, and page numbers on outside top +% edge of all pages. +\def\HEADINGSdouble{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} +\let\contentsalignmacro = \chappager + +% For single-sided printing, chapter title goes across top left of page, +% page number on top right. +\def\HEADINGSsingle{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} +\def\HEADINGSon{\HEADINGSdouble} + +\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} +\let\HEADINGSdoubleafter=\HEADINGSafter +\def\HEADINGSdoublex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} + +\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} +\def\HEADINGSsinglex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} + +% Subroutines used in generating headings +% This produces Day Month Year style of output. +% Only define if not already defined, in case a txi-??.tex file has set +% up a different format (e.g., txi-cs.tex does this). +\ifx\today\undefined +\def\today{% + \number\day\space + \ifcase\month + \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr + \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug + \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec + \fi + \space\number\year} +\fi + +% @settitle line... specifies the title of the document, for headings. +% It generates no output of its own. +\def\thistitle{\putwordNoTitle} +\def\settitle{\parsearg{\gdef\thistitle}} + + +\message{tables,} +% Tables -- @table, @ftable, @vtable, @item(x). + +% default indentation of table text +\newdimen\tableindent \tableindent=.8in +% default indentation of @itemize and @enumerate text +\newdimen\itemindent \itemindent=.3in +% margin between end of table item and start of table text. +\newdimen\itemmargin \itemmargin=.1in + +% used internally for \itemindent minus \itemmargin +\newdimen\itemmax + +% Note @table, @ftable, and @vtable define @item, @itemx, etc., with +% these defs. +% They also define \itemindex +% to index the item name in whatever manner is desired (perhaps none). + +\newif\ifitemxneedsnegativevskip + +\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} + +\def\internalBitem{\smallbreak \parsearg\itemzzz} +\def\internalBitemx{\itemxpar \parsearg\itemzzz} + +\def\itemzzz #1{\begingroup % + \advance\hsize by -\rightskip + \advance\hsize by -\tableindent + \setbox0=\hbox{\itemindicate{#1}}% + \itemindex{#1}% + \nobreak % This prevents a break before @itemx. + % + % If the item text does not fit in the space we have, put it on a line + % by itself, and do not allow a page break either before or after that + % line. We do not start a paragraph here because then if the next + % command is, e.g., @kindex, the whatsit would get put into the + % horizontal list on a line by itself, resulting in extra blank space. + \ifdim \wd0>\itemmax + % + % Make this a paragraph so we get the \parskip glue and wrapping, + % but leave it ragged-right. + \begingroup + \advance\leftskip by-\tableindent + \advance\hsize by\tableindent + \advance\rightskip by0pt plus1fil + \leavevmode\unhbox0\par + \endgroup + % + % We're going to be starting a paragraph, but we don't want the + % \parskip glue -- logically it's part of the @item we just started. + \nobreak \vskip-\parskip + % + % Stop a page break at the \parskip glue coming up. However, if + % what follows is an environment such as @example, there will be no + % \parskip glue; then the negative vskip we just inserted would + % cause the example and the item to crash together. So we use this + % bizarre value of 10001 as a signal to \aboveenvbreak to insert + % \parskip glue after all. Section titles are handled this way also. + % + \penalty 10001 + \endgroup + \itemxneedsnegativevskipfalse + \else + % The item text fits into the space. Start a paragraph, so that the + % following text (if any) will end up on the same line. + \noindent + % Do this with kerns and \unhbox so that if there is a footnote in + % the item text, it can migrate to the main vertical list and + % eventually be printed. + \nobreak\kern-\tableindent + \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 + \unhbox0 + \nobreak\kern\dimen0 + \endgroup + \itemxneedsnegativevskiptrue + \fi +} + +\def\item{\errmessage{@item while not in a list environment}} +\def\itemx{\errmessage{@itemx while not in a list environment}} + +% @table, @ftable, @vtable. +\envdef\table{% + \let\itemindex\gobble + \tablecheck{table}% +} +\envdef\ftable{% + \def\itemindex ##1{\doind {fn}{\code{##1}}}% + \tablecheck{ftable}% +} +\envdef\vtable{% + \def\itemindex ##1{\doind {vr}{\code{##1}}}% + \tablecheck{vtable}% +} +\def\tablecheck#1{% + \ifnum \the\catcode`\^^M=\active + \endgroup + \errmessage{This command won't work in this context; perhaps the problem is + that we are \inenvironment\thisenv}% + \def\next{\doignore{#1}}% + \else + \let\next\tablex + \fi + \next +} +\def\tablex#1{% + \def\itemindicate{#1}% + \parsearg\tabley +} +\def\tabley#1{% + {% + \makevalueexpandable + \edef\temp{\noexpand\tablez #1\space\space\space}% + \expandafter + }\temp \endtablez +} +\def\tablez #1 #2 #3 #4\endtablez{% + \aboveenvbreak + \ifnum 0#1>0 \advance \leftskip by #1\mil \fi + \ifnum 0#2>0 \tableindent=#2\mil \fi + \ifnum 0#3>0 \advance \rightskip by #3\mil \fi + \itemmax=\tableindent + \advance \itemmax by -\itemmargin + \advance \leftskip by \tableindent + \exdentamount=\tableindent + \parindent = 0pt + \parskip = \smallskipamount + \ifdim \parskip=0pt \parskip=2pt \fi + \let\item = \internalBitem + \let\itemx = \internalBitemx +} +\def\Etable{\endgraf\afterenvbreak} +\let\Eftable\Etable +\let\Evtable\Etable +\let\Eitemize\Etable +\let\Eenumerate\Etable + +% This is the counter used by @enumerate, which is really @itemize + +\newcount \itemno + +\envdef\itemize{\parsearg\doitemize} + +\def\doitemize#1{% + \aboveenvbreak + \itemmax=\itemindent + \advance\itemmax by -\itemmargin + \advance\leftskip by \itemindent + \exdentamount=\itemindent + \parindent=0pt + \parskip=\smallskipamount + \ifdim\parskip=0pt \parskip=2pt \fi + \def\itemcontents{#1}% + % @itemize with no arg is equivalent to @itemize @bullet. + \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi + \let\item=\itemizeitem +} + +% Definition of @item while inside @itemize and @enumerate. +% +\def\itemizeitem{% + \advance\itemno by 1 % for enumerations + {\let\par=\endgraf \smallbreak}% reasonable place to break + {% + % If the document has an @itemize directly after a section title, a + % \nobreak will be last on the list, and \sectionheading will have + % done a \vskip-\parskip. In that case, we don't want to zero + % parskip, or the item text will crash with the heading. On the + % other hand, when there is normal text preceding the item (as there + % usually is), we do want to zero parskip, or there would be too much + % space. In that case, we won't have a \nobreak before. At least + % that's the theory. + \ifnum\lastpenalty<10000 \parskip=0in \fi + \noindent + \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% + \vadjust{\penalty 1200}}% not good to break after first line of item. + \flushcr +} + +% \splitoff TOKENS\endmark defines \first to be the first token in +% TOKENS, and \rest to be the remainder. +% +\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% + +% Allow an optional argument of an uppercase letter, lowercase letter, +% or number, to specify the first label in the enumerated list. No +% argument is the same as `1'. +% +\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} +\def\enumeratey #1 #2\endenumeratey{% + % If we were given no argument, pretend we were given `1'. + \def\thearg{#1}% + \ifx\thearg\empty \def\thearg{1}\fi + % + % Detect if the argument is a single token. If so, it might be a + % letter. Otherwise, the only valid thing it can be is a number. + % (We will always have one token, because of the test we just made. + % This is a good thing, since \splitoff doesn't work given nothing at + % all -- the first parameter is undelimited.) + \expandafter\splitoff\thearg\endmark + \ifx\rest\empty + % Only one token in the argument. It could still be anything. + % A ``lowercase letter'' is one whose \lccode is nonzero. + % An ``uppercase letter'' is one whose \lccode is both nonzero, and + % not equal to itself. + % Otherwise, we assume it's a number. + % + % We need the \relax at the end of the \ifnum lines to stop TeX from + % continuing to look for a <number>. + % + \ifnum\lccode\expandafter`\thearg=0\relax + \numericenumerate % a number (we hope) + \else + % It's a letter. + \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax + \lowercaseenumerate % lowercase letter + \else + \uppercaseenumerate % uppercase letter + \fi + \fi + \else + % Multiple tokens in the argument. We hope it's a number. + \numericenumerate + \fi +} + +% An @enumerate whose labels are integers. The starting integer is +% given in \thearg. +% +\def\numericenumerate{% + \itemno = \thearg + \startenumeration{\the\itemno}% +} + +% The starting (lowercase) letter is in \thearg. +\def\lowercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more lowercase letters in @enumerate; get a bigger + alphabet}% + \fi + \char\lccode\itemno + }% +} + +% The starting (uppercase) letter is in \thearg. +\def\uppercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more uppercase letters in @enumerate; get a bigger + alphabet} + \fi + \char\uccode\itemno + }% +} + +% Call \doitemize, adding a period to the first argument and supplying the +% common last two arguments. Also subtract one from the initial value in +% \itemno, since @item increments \itemno. +% +\def\startenumeration#1{% + \advance\itemno by -1 + \doitemize{#1.}\flushcr +} + +% @alphaenumerate and @capsenumerate are abbreviations for giving an arg +% to @enumerate. +% +\def\alphaenumerate{\enumerate{a}} +\def\capsenumerate{\enumerate{A}} +\def\Ealphaenumerate{\Eenumerate} +\def\Ecapsenumerate{\Eenumerate} + + +% @multitable macros +% Amy Hendrickson, 8/18/94, 3/6/96 +% +% @multitable ... @end multitable will make as many columns as desired. +% Contents of each column will wrap at width given in preamble. Width +% can be specified either with sample text given in a template line, +% or in percent of \hsize, the current width of text on page. + +% Table can continue over pages but will only break between lines. + +% To make preamble: +% +% Either define widths of columns in terms of percent of \hsize: +% @multitable @columnfractions .25 .3 .45 +% @item ... +% +% Numbers following @columnfractions are the percent of the total +% current hsize to be used for each column. You may use as many +% columns as desired. + + +% Or use a template: +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item ... +% using the widest term desired in each column. + +% Each new table line starts with @item, each subsequent new column +% starts with @tab. Empty columns may be produced by supplying @tab's +% with nothing between them for as many times as empty columns are needed, +% ie, @tab@tab@tab will produce two empty columns. + +% @item, @tab do not need to be on their own lines, but it will not hurt +% if they are. + +% Sample multitable: + +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item first col stuff @tab second col stuff @tab third col +% @item +% first col stuff +% @tab +% second col stuff +% @tab +% third col +% @item first col stuff @tab second col stuff +% @tab Many paragraphs of text may be used in any column. +% +% They will wrap at the width determined by the template. +% @item@tab@tab This will be in third column. +% @end multitable + +% Default dimensions may be reset by user. +% @multitableparskip is vertical space between paragraphs in table. +% @multitableparindent is paragraph indent in table. +% @multitablecolmargin is horizontal space to be left between columns. +% @multitablelinespace is space to leave between table items, baseline +% to baseline. +% 0pt means it depends on current normal line spacing. +% +\newskip\multitableparskip +\newskip\multitableparindent +\newdimen\multitablecolspace +\newskip\multitablelinespace +\multitableparskip=0pt +\multitableparindent=6pt +\multitablecolspace=12pt +\multitablelinespace=0pt + +% Macros used to set up halign preamble: +% +\let\endsetuptable\relax +\def\xendsetuptable{\endsetuptable} +\let\columnfractions\relax +\def\xcolumnfractions{\columnfractions} +\newif\ifsetpercent + +% #1 is the @columnfraction, usually a decimal number like .5, but might +% be just 1. We just use it, whatever it is. +% +\def\pickupwholefraction#1 {% + \global\advance\colcount by 1 + \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% + \setuptable +} + +\newcount\colcount +\def\setuptable#1{% + \def\firstarg{#1}% + \ifx\firstarg\xendsetuptable + \let\go = \relax + \else + \ifx\firstarg\xcolumnfractions + \global\setpercenttrue + \else + \ifsetpercent + \let\go\pickupwholefraction + \else + \global\advance\colcount by 1 + \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a + % separator; typically that is always in the input, anyway. + \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% + \fi + \fi + \ifx\go\pickupwholefraction + % Put the argument back for the \pickupwholefraction call, so + % we'll always have a period there to be parsed. + \def\go{\pickupwholefraction#1}% + \else + \let\go = \setuptable + \fi% + \fi + \go +} + +% multitable-only commands. +% +% @headitem starts a heading row, which we typeset in bold. +% Assignments have to be global since we are inside the implicit group +% of an alignment entry. Note that \everycr resets \everytab. +\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% +% +% A \tab used to include \hskip1sp. But then the space in a template +% line is not enough. That is bad. So let's go back to just `&' until +% we encounter the problem it was intended to solve again. +% --karl, nathan@acm.org, 20apr99. +\def\tab{\checkenv\multitable &\the\everytab}% + +% @multitable ... @end multitable definitions: +% +\newtoks\everytab % insert after every tab. +% +\envdef\multitable{% + \vskip\parskip + \startsavinginserts + % + % @item within a multitable starts a normal row. + % We use \def instead of \let so that if one of the multitable entries + % contains an @itemize, we don't choke on the \item (seen as \crcr aka + % \endtemplate) expanding \doitemize. + \def\item{\crcr}% + % + \tolerance=9500 + \hbadness=9500 + \setmultitablespacing + \parskip=\multitableparskip + \parindent=\multitableparindent + \overfullrule=0pt + \global\colcount=0 + % + \everycr = {% + \noalign{% + \global\everytab={}% + \global\colcount=0 % Reset the column counter. + % Check for saved footnotes, etc. + \checkinserts + % Keeps underfull box messages off when table breaks over pages. + %\filbreak + % Maybe so, but it also creates really weird page breaks when the + % table breaks over pages. Wouldn't \vfil be better? Wait until the + % problem manifests itself, so it can be fixed for real --karl. + }% + }% + % + \parsearg\domultitable +} +\def\domultitable#1{% + % To parse everything between @multitable and @item: + \setuptable#1 \endsetuptable + % + % This preamble sets up a generic column definition, which will + % be used as many times as user calls for columns. + % \vtop will set a single line and will also let text wrap and + % continue for many paragraphs if desired. + \halign\bgroup &% + \global\advance\colcount by 1 + \multistrut + \vtop{% + % Use the current \colcount to find the correct column width: + \hsize=\expandafter\csname col\the\colcount\endcsname + % + % In order to keep entries from bumping into each other + % we will add a \leftskip of \multitablecolspace to all columns after + % the first one. + % + % If a template has been used, we will add \multitablecolspace + % to the width of each template entry. + % + % If the user has set preamble in terms of percent of \hsize we will + % use that dimension as the width of the column, and the \leftskip + % will keep entries from bumping into each other. Table will start at + % left margin and final column will justify at right margin. + % + % Make sure we don't inherit \rightskip from the outer environment. + \rightskip=0pt + \ifnum\colcount=1 + % The first column will be indented with the surrounding text. + \advance\hsize by\leftskip + \else + \ifsetpercent \else + % If user has not set preamble in terms of percent of \hsize + % we will advance \hsize by \multitablecolspace. + \advance\hsize by \multitablecolspace + \fi + % In either case we will make \leftskip=\multitablecolspace: + \leftskip=\multitablecolspace + \fi + % Ignoring space at the beginning and end avoids an occasional spurious + % blank line, when TeX decides to break the line at the space before the + % box from the multistrut, so the strut ends up on a line by itself. + % For example: + % @multitable @columnfractions .11 .89 + % @item @code{#} + % @tab Legal holiday which is valid in major parts of the whole country. + % Is automatically provided with highlighting sequences respectively + % marking characters. + \noindent\ignorespaces##\unskip\multistrut + }\cr +} +\def\Emultitable{% + \crcr + \egroup % end the \halign + \global\setpercentfalse +} + +\def\setmultitablespacing{% + \def\multistrut{\strut}% just use the standard line spacing + % + % Compute \multitablelinespace (if not defined by user) for use in + % \multitableparskip calculation. We used define \multistrut based on + % this, but (ironically) that caused the spacing to be off. + % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. +\ifdim\multitablelinespace=0pt +\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip +\global\advance\multitablelinespace by-\ht0 +\fi +%% Test to see if parskip is larger than space between lines of +%% table. If not, do nothing. +%% If so, set to same dimension as multitablelinespace. +\ifdim\multitableparskip>\multitablelinespace +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi% +\ifdim\multitableparskip=0pt +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi} + + +\message{conditionals,} + +% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, +% @ifnotxml always succeed. They currently do nothing; we don't +% attempt to check whether the conditionals are properly nested. But we +% have to remember that they are conditionals, so that @end doesn't +% attempt to close an environment group. +% +\def\makecond#1{% + \expandafter\let\csname #1\endcsname = \relax + \expandafter\let\csname iscond.#1\endcsname = 1 +} +\makecond{iftex} +\makecond{ifnotdocbook} +\makecond{ifnothtml} +\makecond{ifnotinfo} +\makecond{ifnotplaintext} +\makecond{ifnotxml} + +% Ignore @ignore, @ifhtml, @ifinfo, and the like. +% +\def\direntry{\doignore{direntry}} +\def\documentdescription{\doignore{documentdescription}} +\def\docbook{\doignore{docbook}} +\def\html{\doignore{html}} +\def\ifdocbook{\doignore{ifdocbook}} +\def\ifhtml{\doignore{ifhtml}} +\def\ifinfo{\doignore{ifinfo}} +\def\ifnottex{\doignore{ifnottex}} +\def\ifplaintext{\doignore{ifplaintext}} +\def\ifxml{\doignore{ifxml}} +\def\ignore{\doignore{ignore}} +\def\menu{\doignore{menu}} +\def\xml{\doignore{xml}} + +% Ignore text until a line `@end #1', keeping track of nested conditionals. +% +% A count to remember the depth of nesting. +\newcount\doignorecount + +\def\doignore#1{\begingroup + % Scan in ``verbatim'' mode: + \obeylines + \catcode`\@ = \other + \catcode`\{ = \other + \catcode`\} = \other + % + % Make sure that spaces turn into tokens that match what \doignoretext wants. + \spaceisspace + % + % Count number of #1's that we've seen. + \doignorecount = 0 + % + % Swallow text until we reach the matching `@end #1'. + \dodoignore{#1}% +} + +{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. + \obeylines % + % + \gdef\dodoignore#1{% + % #1 contains the command name as a string, e.g., `ifinfo'. + % + % Define a command to find the next `@end #1'. + \long\def\doignoretext##1^^M@end #1{% + \doignoretextyyy##1^^M@#1\_STOP_}% + % + % And this command to find another #1 command, at the beginning of a + % line. (Otherwise, we would consider a line `@c @ifset', for + % example, to count as an @ifset for nesting.) + \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% + % + % And now expand that command. + \doignoretext ^^M% + }% +} + +\def\doignoreyyy#1{% + \def\temp{#1}% + \ifx\temp\empty % Nothing found. + \let\next\doignoretextzzz + \else % Found a nested condition, ... + \advance\doignorecount by 1 + \let\next\doignoretextyyy % ..., look for another. + % If we're here, #1 ends with ^^M\ifinfo (for example). + \fi + \next #1% the token \_STOP_ is present just after this macro. +} + +% We have to swallow the remaining "\_STOP_". +% +\def\doignoretextzzz#1{% + \ifnum\doignorecount = 0 % We have just found the outermost @end. + \let\next\enddoignore + \else % Still inside a nested condition. + \advance\doignorecount by -1 + \let\next\doignoretext % Look for the next @end. + \fi + \next +} + +% Finish off ignored text. +{ \obeylines% + % Ignore anything after the last `@end #1'; this matters in verbatim + % environments, where otherwise the newline after an ignored conditional + % would result in a blank line in the output. + \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% +} + + +% @set VAR sets the variable VAR to an empty value. +% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. +% +% Since we want to separate VAR from REST-OF-LINE (which might be +% empty), we can't just use \parsearg; we have to insert a space of our +% own to delimit the rest of the line, and then take it out again if we +% didn't need it. +% We rely on the fact that \parsearg sets \catcode`\ =10. +% +\parseargdef\set{\setyyy#1 \endsetyyy} +\def\setyyy#1 #2\endsetyyy{% + {% + \makevalueexpandable + \def\temp{#2}% + \edef\next{\gdef\makecsname{SET#1}}% + \ifx\temp\empty + \next{}% + \else + \setzzz#2\endsetzzz + \fi + }% +} +% Remove the trailing space \setxxx inserted. +\def\setzzz#1 \endsetzzz{\next{#1}} + +% @clear VAR clears (i.e., unsets) the variable VAR. +% +\parseargdef\clear{% + {% + \makevalueexpandable + \global\expandafter\let\csname SET#1\endcsname=\relax + }% +} + +% @value{foo} gets the text saved in variable foo. +\def\value{\begingroup\makevalueexpandable\valuexxx} +\def\valuexxx#1{\expandablevalue{#1}\endgroup} +{ + \catcode`\- = \active \catcode`\_ = \active + % + \gdef\makevalueexpandable{% + \let\value = \expandablevalue + % We don't want these characters active, ... + \catcode`\-=\other \catcode`\_=\other + % ..., but we might end up with active ones in the argument if + % we're called from @code, as @code{@value{foo-bar_}}, though. + % So \let them to their normal equivalents. + \let-\realdash \let_\normalunderscore + } +} + +% We have this subroutine so that we can handle at least some @value's +% properly in indexes (we call \makevalueexpandable in \indexdummies). +% The command has to be fully expandable (if the variable is set), since +% the result winds up in the index file. This means that if the +% variable's value contains other Texinfo commands, it's almost certain +% it will fail (although perhaps we could fix that with sufficient work +% to do a one-level expansion on the result, instead of complete). +% +\def\expandablevalue#1{% + \expandafter\ifx\csname SET#1\endcsname\relax + {[No value for ``#1'']}% + \message{Variable `#1', used in @value, is not set.}% + \else + \csname SET#1\endcsname + \fi +} + +% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined +% with @set. +% +% To get special treatment of `@end ifset,' call \makeond and the redefine. +% +\makecond{ifset} +\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} +\def\doifset#1#2{% + {% + \makevalueexpandable + \let\next=\empty + \expandafter\ifx\csname SET#2\endcsname\relax + #1% If not set, redefine \next. + \fi + \expandafter + }\next +} +\def\ifsetfail{\doignore{ifset}} + +% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been +% defined with @set, or has been undefined with @clear. +% +% The `\else' inside the `\doifset' parameter is a trick to reuse the +% above code: if the variable is not set, do nothing, if it is set, +% then redefine \next to \ifclearfail. +% +\makecond{ifclear} +\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} +\def\ifclearfail{\doignore{ifclear}} + +% @dircategory CATEGORY -- specify a category of the dir file +% which this file should belong to. Ignore this in TeX. +\let\dircategory=\comment + +% @defininfoenclose. +\let\definfoenclose=\comment + + +\message{indexing,} +% Index generation facilities + +% Define \newwrite to be identical to plain tex's \newwrite +% except not \outer, so it can be used within macros and \if's. +\edef\newwrite{\makecsname{ptexnewwrite}} + +% \newindex {foo} defines an index named foo. +% It automatically defines \fooindex such that +% \fooindex ...rest of line... puts an entry in the index foo. +% It also defines \fooindfile to be the number of the output channel for +% the file that accumulates this index. The file's extension is foo. +% The name of an index should be no more than 2 characters long +% for the sake of vms. +% +\def\newindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 % Open the file + \fi + \expandafter\xdef\csname#1index\endcsname{% % Define @#1index + \noexpand\doindex{#1}} +} + +% @defindex foo == \newindex{foo} +% +\def\defindex{\parsearg\newindex} + +% Define @defcodeindex, like @defindex except put all entries in @code. +% +\def\defcodeindex{\parsearg\newcodeindex} +% +\def\newcodeindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 + \fi + \expandafter\xdef\csname#1index\endcsname{% + \noexpand\docodeindex{#1}}% +} + + +% @synindex foo bar makes index foo feed into index bar. +% Do this instead of @defindex foo if you don't want it as a separate index. +% +% @syncodeindex foo bar similar, but put all entries made for index foo +% inside @code. +% +\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} +\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} + +% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), +% #3 the target index (bar). +\def\dosynindex#1#2#3{% + % Only do \closeout if we haven't already done it, else we'll end up + % closing the target index. + \expandafter \ifx\csname donesynindex#2\endcsname \relax + % The \closeout helps reduce unnecessary open files; the limit on the + % Acorn RISC OS is a mere 16 files. + \expandafter\closeout\csname#2indfile\endcsname + \expandafter\let\csname donesynindex#2\endcsname = 1 + \fi + % redefine \fooindfile: + \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname + \expandafter\let\csname#2indfile\endcsname=\temp + % redefine \fooindex: + \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% +} + +% Define \doindex, the driver for all \fooindex macros. +% Argument #1 is generated by the calling \fooindex macro, +% and it is "foo", the name of the index. + +% \doindex just uses \parsearg; it calls \doind for the actual work. +% This is because \doind is more useful to call from other macros. + +% There is also \dosubind {index}{topic}{subtopic} +% which makes an entry in a two-level index such as the operation index. + +\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} +\def\singleindexer #1{\doind{\indexname}{#1}} + +% like the previous two, but they put @code around the argument. +\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} +\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} + +% Take care of Texinfo commands that can appear in an index entry. +% Since there are some commands we want to expand, and others we don't, +% we have to laboriously prevent expansion for those that we don't. +% +\def\indexdummies{% + \escapechar = `\\ % use backslash in output files. + \def\@{@}% change to @@ when we switch to @ as escape char in index files. + \def\ {\realbackslash\space }% + % + % Need these in case \tex is in effect and \{ is a \delimiter again. + % But can't use \lbracecmd and \rbracecmd because texindex assumes + % braces and backslashes are used only as delimiters. + \let\{ = \mylbrace + \let\} = \myrbrace + % + % I don't entirely understand this, but when an index entry is + % generated from a macro call, the \endinput which \scanmacro inserts + % causes processing to be prematurely terminated. This is, + % apparently, because \indexsorttmp is fully expanded, and \endinput + % is an expandable command. The redefinition below makes \endinput + % disappear altogether for that purpose -- although logging shows that + % processing continues to some further point. On the other hand, it + % seems \endinput does not hurt in the printed index arg, since that + % is still getting written without apparent harm. + % + % Sample source (mac-idx3.tex, reported by Graham Percival to + % help-texinfo, 22may06): + % @macro funindex {WORD} + % @findex xyz + % @end macro + % ... + % @funindex commtest + % + % The above is not enough to reproduce the bug, but it gives the flavor. + % + % Sample whatsit resulting: + % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} + % + % So: + \let\endinput = \empty + % + % Do the redefinitions. + \commondummies +} + +% For the aux and toc files, @ is the escape character. So we want to +% redefine everything using @ as the escape character (instead of +% \realbackslash, still used for index files). When everything uses @, +% this will be simpler. +% +\def\atdummies{% + \def\@{@@}% + \def\ {@ }% + \let\{ = \lbraceatcmd + \let\} = \rbraceatcmd + % + % Do the redefinitions. + \commondummies + \otherbackslash +} + +% Called from \indexdummies and \atdummies. +% +\def\commondummies{% + % + % \definedummyword defines \#1 as \string\#1\space, thus effectively + % preventing its expansion. This is used only for control% words, + % not control letters, because the \space would be incorrect for + % control characters, but is needed to separate the control word + % from whatever follows. + % + % For control letters, we have \definedummyletter, which omits the + % space. + % + % These can be used both for control words that take an argument and + % those that do not. If it is followed by {arg} in the input, then + % that will dutifully get written to the index (or wherever). + % + \def\definedummyword ##1{\def##1{\string##1\space}}% + \def\definedummyletter##1{\def##1{\string##1}}% + \let\definedummyaccent\definedummyletter + % + \commondummiesnofonts + % + \definedummyletter\_% + % + % Non-English letters. + \definedummyword\AA + \definedummyword\AE + \definedummyword\L + \definedummyword\OE + \definedummyword\O + \definedummyword\aa + \definedummyword\ae + \definedummyword\l + \definedummyword\oe + \definedummyword\o + \definedummyword\ss + \definedummyword\exclamdown + \definedummyword\questiondown + \definedummyword\ordf + \definedummyword\ordm + % + % Although these internal commands shouldn't show up, sometimes they do. + \definedummyword\bf + \definedummyword\gtr + \definedummyword\hat + \definedummyword\less + \definedummyword\sf + \definedummyword\sl + \definedummyword\tclose + \definedummyword\tt + % + \definedummyword\LaTeX + \definedummyword\TeX + % + % Assorted special characters. + \definedummyword\bullet + \definedummyword\comma + \definedummyword\copyright + \definedummyword\registeredsymbol + \definedummyword\dots + \definedummyword\enddots + \definedummyword\equiv + \definedummyword\error + \definedummyword\euro + \definedummyword\guillemetleft + \definedummyword\guillemetright + \definedummyword\guilsinglleft + \definedummyword\guilsinglright + \definedummyword\expansion + \definedummyword\minus + \definedummyword\ogonek + \definedummyword\pounds + \definedummyword\point + \definedummyword\print + \definedummyword\quotedblbase + \definedummyword\quotedblleft + \definedummyword\quotedblright + \definedummyword\quoteleft + \definedummyword\quoteright + \definedummyword\quotesinglbase + \definedummyword\result + \definedummyword\textdegree + % + % We want to disable all macros so that they are not expanded by \write. + \macrolist + % + \normalturnoffactive + % + % Handle some cases of @value -- where it does not contain any + % (non-fully-expandable) commands. + \makevalueexpandable +} + +% \commondummiesnofonts: common to \commondummies and \indexnofonts. +% +\def\commondummiesnofonts{% + % Control letters and accents. + \definedummyletter\!% + \definedummyaccent\"% + \definedummyaccent\'% + \definedummyletter\*% + \definedummyaccent\,% + \definedummyletter\.% + \definedummyletter\/% + \definedummyletter\:% + \definedummyaccent\=% + \definedummyletter\?% + \definedummyaccent\^% + \definedummyaccent\`% + \definedummyaccent\~% + \definedummyword\u + \definedummyword\v + \definedummyword\H + \definedummyword\dotaccent + \definedummyword\ogonek + \definedummyword\ringaccent + \definedummyword\tieaccent + \definedummyword\ubaraccent + \definedummyword\udotaccent + \definedummyword\dotless + % + % Texinfo font commands. + \definedummyword\b + \definedummyword\i + \definedummyword\r + \definedummyword\sc + \definedummyword\t + % + % Commands that take arguments. + \definedummyword\acronym + \definedummyword\cite + \definedummyword\code + \definedummyword\command + \definedummyword\dfn + \definedummyword\emph + \definedummyword\env + \definedummyword\file + \definedummyword\kbd + \definedummyword\key + \definedummyword\math + \definedummyword\option + \definedummyword\pxref + \definedummyword\ref + \definedummyword\samp + \definedummyword\strong + \definedummyword\tie + \definedummyword\uref + \definedummyword\url + \definedummyword\var + \definedummyword\verb + \definedummyword\w + \definedummyword\xref +} + +% \indexnofonts is used when outputting the strings to sort the index +% by, and when constructing control sequence names. It eliminates all +% control sequences and just writes whatever the best ASCII sort string +% would be for a given command (usually its argument). +% +\def\indexnofonts{% + % Accent commands should become @asis. + \def\definedummyaccent##1{\let##1\asis}% + % We can just ignore other control letters. + \def\definedummyletter##1{\let##1\empty}% + % Hopefully, all control words can become @asis. + \let\definedummyword\definedummyaccent + % + \commondummiesnofonts + % + % Don't no-op \tt, since it isn't a user-level command + % and is used in the definitions of the active chars like <, >, |, etc. + % Likewise with the other plain tex font commands. + %\let\tt=\asis + % + \def\ { }% + \def\@{@}% + % how to handle braces? + \def\_{\normalunderscore}% + % + % Non-English letters. + \def\AA{AA}% + \def\AE{AE}% + \def\L{L}% + \def\OE{OE}% + \def\O{O}% + \def\aa{aa}% + \def\ae{ae}% + \def\l{l}% + \def\oe{oe}% + \def\o{o}% + \def\ss{ss}% + \def\exclamdown{!}% + \def\questiondown{?}% + \def\ordf{a}% + \def\ordm{o}% + % + \def\LaTeX{LaTeX}% + \def\TeX{TeX}% + % + % Assorted special characters. + % (The following {} will end up in the sort string, but that's ok.) + \def\bullet{bullet}% + \def\comma{,}% + \def\copyright{copyright}% + \def\registeredsymbol{R}% + \def\dots{...}% + \def\enddots{...}% + \def\equiv{==}% + \def\error{error}% + \def\euro{euro}% + \def\guillemetleft{<<}% + \def\guillemetright{>>}% + \def\guilsinglleft{<}% + \def\guilsinglright{>}% + \def\expansion{==>}% + \def\minus{-}% + \def\pounds{pounds}% + \def\point{.}% + \def\print{-|}% + \def\quotedblbase{"}% + \def\quotedblleft{"}% + \def\quotedblright{"}% + \def\quoteleft{`}% + \def\quoteright{'}% + \def\quotesinglbase{,}% + \def\result{=>}% + \def\textdegree{degrees}% + % + % We need to get rid of all macros, leaving only the arguments (if present). + % Of course this is not nearly correct, but it is the best we can do for now. + % makeinfo does not expand macros in the argument to @deffn, which ends up + % writing an index entry, and texindex isn't prepared for an index sort entry + % that starts with \. + % + % Since macro invocations are followed by braces, we can just redefine them + % to take a single TeX argument. The case of a macro invocation that + % goes to end-of-line is not handled. + % + \macrolist +} + +\let\indexbackslash=0 %overridden during \printindex. +\let\SETmarginindex=\relax % put index entries in margin (undocumented)? + +% Most index entries go through here, but \dosubind is the general case. +% #1 is the index name, #2 is the entry text. +\def\doind#1#2{\dosubind{#1}{#2}{}} + +% Workhorse for all \fooindexes. +% #1 is name of index, #2 is stuff to put there, #3 is subentry -- +% empty if called from \doind, as we usually are (the main exception +% is with most defuns, which call us directly). +% +\def\dosubind#1#2#3{% + \iflinks + {% + % Store the main index entry text (including the third arg). + \toks0 = {#2}% + % If third arg is present, precede it with a space. + \def\thirdarg{#3}% + \ifx\thirdarg\empty \else + \toks0 = \expandafter{\the\toks0 \space #3}% + \fi + % + \edef\writeto{\csname#1indfile\endcsname}% + % + \safewhatsit\dosubindwrite + }% + \fi +} + +% Write the entry in \toks0 to the index file: +% +\def\dosubindwrite{% + % Put the index entry in the margin if desired. + \ifx\SETmarginindex\relax\else + \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% + \fi + % + % Remember, we are within a group. + \indexdummies % Must do this here, since \bf, etc expand at this stage + \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now + % so it will be output as is; and it will print as backslash. + % + % Process the index entry with all font commands turned off, to + % get the string to sort by. + {\indexnofonts + \edef\temp{\the\toks0}% need full expansion + \xdef\indexsorttmp{\temp}% + }% + % + % Set up the complete index entry, with both the sort key and + % the original text, including any font commands. We write + % three arguments to \entry to the .?? file (four in the + % subentry case), texindex reduces to two when writing the .??s + % sorted result. + \edef\temp{% + \write\writeto{% + \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% + }% + \temp +} + +% Take care of unwanted page breaks/skips around a whatsit: +% +% If a skip is the last thing on the list now, preserve it +% by backing up by \lastskip, doing the \write, then inserting +% the skip again. Otherwise, the whatsit generated by the +% \write or \pdfdest will make \lastskip zero. The result is that +% sequences like this: +% @end defun +% @tindex whatever +% @defun ... +% will have extra space inserted, because the \medbreak in the +% start of the @defun won't see the skip inserted by the @end of +% the previous defun. +% +% But don't do any of this if we're not in vertical mode. We +% don't want to do a \vskip and prematurely end a paragraph. +% +% Avoid page breaks due to these extra skips, too. +% +% But wait, there is a catch there: +% We'll have to check whether \lastskip is zero skip. \ifdim is not +% sufficient for this purpose, as it ignores stretch and shrink parts +% of the skip. The only way seems to be to check the textual +% representation of the skip. +% +% The following is almost like \def\zeroskipmacro{0.0pt} except that +% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). +% +\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} +% +\newskip\whatsitskip +\newcount\whatsitpenalty +% +% ..., ready, GO: +% +\def\safewhatsit#1{% +\ifhmode + #1% +\else + % \lastskip and \lastpenalty cannot both be nonzero simultaneously. + \whatsitskip = \lastskip + \edef\lastskipmacro{\the\lastskip}% + \whatsitpenalty = \lastpenalty + % + % If \lastskip is nonzero, that means the last item was a + % skip. And since a skip is discardable, that means this + % -\whatsitskip glue we're inserting is preceded by a + % non-discardable item, therefore it is not a potential + % breakpoint, therefore no \nobreak needed. + \ifx\lastskipmacro\zeroskipmacro + \else + \vskip-\whatsitskip + \fi + % + #1% + % + \ifx\lastskipmacro\zeroskipmacro + % If \lastskip was zero, perhaps the last item was a penalty, and + % perhaps it was >=10000, e.g., a \nobreak. In that case, we want + % to re-insert the same penalty (values >10000 are used for various + % signals); since we just inserted a non-discardable item, any + % following glue (such as a \parskip) would be a breakpoint. For example: + % + % @deffn deffn-whatever + % @vindex index-whatever + % Description. + % would allow a break between the index-whatever whatsit + % and the "Description." paragraph. + \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi + \else + % On the other hand, if we had a nonzero \lastskip, + % this make-up glue would be preceded by a non-discardable item + % (the whatsit from the \write), so we must insert a \nobreak. + \nobreak\vskip\whatsitskip + \fi +\fi +} + +% The index entry written in the file actually looks like +% \entry {sortstring}{page}{topic} +% or +% \entry {sortstring}{page}{topic}{subtopic} +% The texindex program reads in these files and writes files +% containing these kinds of lines: +% \initial {c} +% before the first topic whose initial is c +% \entry {topic}{pagelist} +% for a topic that is used without subtopics +% \primary {topic} +% for the beginning of a topic that is used with subtopics +% \secondary {subtopic}{pagelist} +% for each subtopic. + +% Define the user-accessible indexing commands +% @findex, @vindex, @kindex, @cindex. + +\def\findex {\fnindex} +\def\kindex {\kyindex} +\def\cindex {\cpindex} +\def\vindex {\vrindex} +\def\tindex {\tpindex} +\def\pindex {\pgindex} + +\def\cindexsub {\begingroup\obeylines\cindexsub} +{\obeylines % +\gdef\cindexsub "#1" #2^^M{\endgroup % +\dosubind{cp}{#2}{#1}}} + +% Define the macros used in formatting output of the sorted index material. + +% @printindex causes a particular index (the ??s file) to get printed. +% It does not print any chapter heading (usually an @unnumbered). +% +\parseargdef\printindex{\begingroup + \dobreak \chapheadingskip{10000}% + % + \smallfonts \rm + \tolerance = 9500 + \plainfrenchspacing + \everypar = {}% don't want the \kern\-parindent from indentation suppression. + % + % See if the index file exists and is nonempty. + % Change catcode of @ here so that if the index file contains + % \initial {@} + % as its first line, TeX doesn't complain about mismatched braces + % (because it thinks @} is a control sequence). + \catcode`\@ = 11 + \openin 1 \jobname.#1s + \ifeof 1 + % \enddoublecolumns gets confused if there is no text in the index, + % and it loses the chapter title and the aux file entries for the + % index. The easiest way to prevent this problem is to make sure + % there is some text. + \putwordIndexNonexistent + \else + % + % If the index file exists but is empty, then \openin leaves \ifeof + % false. We have to make TeX try to read something from the file, so + % it can discover if there is anything in it. + \read 1 to \temp + \ifeof 1 + \putwordIndexIsEmpty + \else + % Index files are almost Texinfo source, but we use \ as the escape + % character. It would be better to use @, but that's too big a change + % to make right now. + \def\indexbackslash{\backslashcurfont}% + \catcode`\\ = 0 + \escapechar = `\\ + \begindoublecolumns + \input \jobname.#1s + \enddoublecolumns + \fi + \fi + \closein 1 +\endgroup} + +% These macros are used by the sorted index file itself. +% Change them to control the appearance of the index. + +\def\initial#1{{% + % Some minor font changes for the special characters. + \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt + % + % Remove any glue we may have, we'll be inserting our own. + \removelastskip + % + % We like breaks before the index initials, so insert a bonus. + \nobreak + \vskip 0pt plus 3\baselineskip + \penalty 0 + \vskip 0pt plus -3\baselineskip + % + % Typeset the initial. Making this add up to a whole number of + % baselineskips increases the chance of the dots lining up from column + % to column. It still won't often be perfect, because of the stretch + % we need before each entry, but it's better. + % + % No shrink because it confuses \balancecolumns. + \vskip 1.67\baselineskip plus .5\baselineskip + \leftline{\secbf #1}% + % Do our best not to break after the initial. + \nobreak + \vskip .33\baselineskip plus .1\baselineskip +}} + +% \entry typesets a paragraph consisting of the text (#1), dot leaders, and +% then page number (#2) flushed to the right margin. It is used for index +% and table of contents entries. The paragraph is indented by \leftskip. +% +% A straightforward implementation would start like this: +% \def\entry#1#2{... +% But this freezes the catcodes in the argument, and can cause problems to +% @code, which sets - active. This problem was fixed by a kludge--- +% ``-'' was active throughout whole index, but this isn't really right. +% +% The right solution is to prevent \entry from swallowing the whole text. +% --kasal, 21nov03 +\def\entry{% + \begingroup + % + % Start a new paragraph if necessary, so our assignments below can't + % affect previous text. + \par + % + % Do not fill out the last line with white space. + \parfillskip = 0in + % + % No extra space above this paragraph. + \parskip = 0in + % + % Do not prefer a separate line ending with a hyphen to fewer lines. + \finalhyphendemerits = 0 + % + % \hangindent is only relevant when the entry text and page number + % don't both fit on one line. In that case, bob suggests starting the + % dots pretty far over on the line. Unfortunately, a large + % indentation looks wrong when the entry text itself is broken across + % lines. So we use a small indentation and put up with long leaders. + % + % \hangafter is reset to 1 (which is the value we want) at the start + % of each paragraph, so we need not do anything with that. + \hangindent = 2em + % + % When the entry text needs to be broken, just fill out the first line + % with blank space. + \rightskip = 0pt plus1fil + % + % A bit of stretch before each entry for the benefit of balancing + % columns. + \vskip 0pt plus1pt + % + % Swallow the left brace of the text (first parameter): + \afterassignment\doentry + \let\temp = +} +\def\doentry{% + \bgroup % Instead of the swallowed brace. + \noindent + \aftergroup\finishentry + % And now comes the text of the entry. +} +\def\finishentry#1{% + % #1 is the page number. + % + % The following is kludged to not output a line of dots in the index if + % there are no page numbers. The next person who breaks this will be + % cursed by a Unix daemon. + \setbox\boxA = \hbox{#1}% + \ifdim\wd\boxA = 0pt + \ % + \else + % + % If we must, put the page number on a line of its own, and fill out + % this line with blank space. (The \hfil is overwhelmed with the + % fill leaders glue in \indexdotfill if the page number does fit.) + \hfil\penalty50 + \null\nobreak\indexdotfill % Have leaders before the page number. + % + % The `\ ' here is removed by the implicit \unskip that TeX does as + % part of (the primitive) \par. Without it, a spurious underfull + % \hbox ensues. + \ifpdf + \pdfgettoks#1.% + \ \the\toksA + \else + \ #1% + \fi + \fi + \par + \endgroup +} + +% Like plain.tex's \dotfill, except uses up at least 1 em. +\def\indexdotfill{\cleaders + \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} + +\def\primary #1{\line{#1\hfil}} + +\newskip\secondaryindent \secondaryindent=0.5cm +\def\secondary#1#2{{% + \parfillskip=0in + \parskip=0in + \hangindent=1in + \hangafter=1 + \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill + \ifpdf + \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. + \else + #2 + \fi + \par +}} + +% Define two-column mode, which we use to typeset indexes. +% Adapted from the TeXbook, page 416, which is to say, +% the manmac.tex format used to print the TeXbook itself. +\catcode`\@=11 + +\newbox\partialpage +\newdimen\doublecolumnhsize + +\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns + % Grab any single-column material above us. + \output = {% + % + % Here is a possibility not foreseen in manmac: if we accumulate a + % whole lot of material, we might end up calling this \output + % routine twice in a row (see the doublecol-lose test, which is + % essentially a couple of indexes with @setchapternewpage off). In + % that case we just ship out what is in \partialpage with the normal + % output routine. Generally, \partialpage will be empty when this + % runs and this will be a no-op. See the indexspread.tex test case. + \ifvoid\partialpage \else + \onepageout{\pagecontents\partialpage}% + \fi + % + \global\setbox\partialpage = \vbox{% + % Unvbox the main output page. + \unvbox\PAGE + \kern-\topskip \kern\baselineskip + }% + }% + \eject % run that output routine to set \partialpage + % + % Use the double-column output routine for subsequent pages. + \output = {\doublecolumnout}% + % + % Change the page size parameters. We could do this once outside this + % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 + % format, but then we repeat the same computation. Repeating a couple + % of assignments once per index is clearly meaningless for the + % execution time, so we may as well do it in one place. + % + % First we halve the line length, less a little for the gutter between + % the columns. We compute the gutter based on the line length, so it + % changes automatically with the paper format. The magic constant + % below is chosen so that the gutter has the same value (well, +-<1pt) + % as it did when we hard-coded it. + % + % We put the result in a separate register, \doublecolumhsize, so we + % can restore it in \pagesofar, after \hsize itself has (potentially) + % been clobbered. + % + \doublecolumnhsize = \hsize + \advance\doublecolumnhsize by -.04154\hsize + \divide\doublecolumnhsize by 2 + \hsize = \doublecolumnhsize + % + % Double the \vsize as well. (We don't need a separate register here, + % since nobody clobbers \vsize.) + \vsize = 2\vsize +} + +% The double-column output routine for all double-column pages except +% the last. +% +\def\doublecolumnout{% + \splittopskip=\topskip \splitmaxdepth=\maxdepth + % Get the available space for the double columns -- the normal + % (undoubled) page height minus any material left over from the + % previous page. + \dimen@ = \vsize + \divide\dimen@ by 2 + \advance\dimen@ by -\ht\partialpage + % + % box0 will be the left-hand column, box2 the right. + \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ + \onepageout\pagesofar + \unvbox255 + \penalty\outputpenalty +} +% +% Re-output the contents of the output page -- any previous material, +% followed by the two boxes we just split, in box0 and box2. +\def\pagesofar{% + \unvbox\partialpage + % + \hsize = \doublecolumnhsize + \wd0=\hsize \wd2=\hsize + \hbox to\pagewidth{\box0\hfil\box2}% +} +% +% All done with double columns. +\def\enddoublecolumns{% + % The following penalty ensures that the page builder is exercised + % _before_ we change the output routine. This is necessary in the + % following situation: + % + % The last section of the index consists only of a single entry. + % Before this section, \pagetotal is less than \pagegoal, so no + % break occurs before the last section starts. However, the last + % section, consisting of \initial and the single \entry, does not + % fit on the page and has to be broken off. Without the following + % penalty the page builder will not be exercised until \eject + % below, and by that time we'll already have changed the output + % routine to the \balancecolumns version, so the next-to-last + % double-column page will be processed with \balancecolumns, which + % is wrong: The two columns will go to the main vertical list, with + % the broken-off section in the recent contributions. As soon as + % the output routine finishes, TeX starts reconsidering the page + % break. The two columns and the broken-off section both fit on the + % page, because the two columns now take up only half of the page + % goal. When TeX sees \eject from below which follows the final + % section, it invokes the new output routine that we've set after + % \balancecolumns below; \onepageout will try to fit the two columns + % and the final section into the vbox of \pageheight (see + % \pagebody), causing an overfull box. + % + % Note that glue won't work here, because glue does not exercise the + % page builder, unlike penalties (see The TeXbook, pp. 280-281). + \penalty0 + % + \output = {% + % Split the last of the double-column material. Leave it on the + % current page, no automatic page break. + \balancecolumns + % + % If we end up splitting too much material for the current page, + % though, there will be another page break right after this \output + % invocation ends. Having called \balancecolumns once, we do not + % want to call it again. Therefore, reset \output to its normal + % definition right away. (We hope \balancecolumns will never be + % called on to balance too much material, but if it is, this makes + % the output somewhat more palatable.) + \global\output = {\onepageout{\pagecontents\PAGE}}% + }% + \eject + \endgroup % started in \begindoublecolumns + % + % \pagegoal was set to the doubled \vsize above, since we restarted + % the current page. We're now back to normal single-column + % typesetting, so reset \pagegoal to the normal \vsize (after the + % \endgroup where \vsize got restored). + \pagegoal = \vsize +} +% +% Called at the end of the double column material. +\def\balancecolumns{% + \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. + \dimen@ = \ht0 + \advance\dimen@ by \topskip + \advance\dimen@ by-\baselineskip + \divide\dimen@ by 2 % target to split to + %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% + \splittopskip = \topskip + % Loop until we get a decent breakpoint. + {% + \vbadness = 10000 + \loop + \global\setbox3 = \copy0 + \global\setbox1 = \vsplit3 to \dimen@ + \ifdim\ht3>\dimen@ + \global\advance\dimen@ by 1pt + \repeat + }% + %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% + \setbox0=\vbox to\dimen@{\unvbox1}% + \setbox2=\vbox to\dimen@{\unvbox3}% + % + \pagesofar +} +\catcode`\@ = \other + + +\message{sectioning,} +% Chapters, sections, etc. + +% \unnumberedno is an oxymoron, of course. But we count the unnumbered +% sections so that we can refer to them unambiguously in the pdf +% outlines by their "section number". We avoid collisions with chapter +% numbers by starting them at 10000. (If a document ever has 10000 +% chapters, we're in trouble anyway, I'm sure.) +\newcount\unnumberedno \unnumberedno = 10000 +\newcount\chapno +\newcount\secno \secno=0 +\newcount\subsecno \subsecno=0 +\newcount\subsubsecno \subsubsecno=0 + +% This counter is funny since it counts through charcodes of letters A, B, ... +\newcount\appendixno \appendixno = `\@ +% +% \def\appendixletter{\char\the\appendixno} +% We do the following ugly conditional instead of the above simple +% construct for the sake of pdftex, which needs the actual +% letter in the expansion, not just typeset. +% +\def\appendixletter{% + \ifnum\appendixno=`A A% + \else\ifnum\appendixno=`B B% + \else\ifnum\appendixno=`C C% + \else\ifnum\appendixno=`D D% + \else\ifnum\appendixno=`E E% + \else\ifnum\appendixno=`F F% + \else\ifnum\appendixno=`G G% + \else\ifnum\appendixno=`H H% + \else\ifnum\appendixno=`I I% + \else\ifnum\appendixno=`J J% + \else\ifnum\appendixno=`K K% + \else\ifnum\appendixno=`L L% + \else\ifnum\appendixno=`M M% + \else\ifnum\appendixno=`N N% + \else\ifnum\appendixno=`O O% + \else\ifnum\appendixno=`P P% + \else\ifnum\appendixno=`Q Q% + \else\ifnum\appendixno=`R R% + \else\ifnum\appendixno=`S S% + \else\ifnum\appendixno=`T T% + \else\ifnum\appendixno=`U U% + \else\ifnum\appendixno=`V V% + \else\ifnum\appendixno=`W W% + \else\ifnum\appendixno=`X X% + \else\ifnum\appendixno=`Y Y% + \else\ifnum\appendixno=`Z Z% + % The \the is necessary, despite appearances, because \appendixletter is + % expanded while writing the .toc file. \char\appendixno is not + % expandable, thus it is written literally, thus all appendixes come out + % with the same letter (or @) in the toc without it. + \else\char\the\appendixno + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} + +% Each @chapter defines these (using marks) as the number+name, number +% and name of the chapter. Page headings and footings can use +% these. @section does likewise. +\def\thischapter{} +\def\thischapternum{} +\def\thischaptername{} +\def\thissection{} +\def\thissectionnum{} +\def\thissectionname{} + +\newcount\absseclevel % used to calculate proper heading level +\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count + +% @raisesections: treat @section as chapter, @subsection as section, etc. +\def\raisesections{\global\advance\secbase by -1} +\let\up=\raisesections % original BFox name + +% @lowersections: treat @chapter as section, @section as subsection, etc. +\def\lowersections{\global\advance\secbase by 1} +\let\down=\lowersections % original BFox name + +% we only have subsub. +\chardef\maxseclevel = 3 +% +% A numbered section within an unnumbered changes to unnumbered too. +% To achive this, remember the "biggest" unnum. sec. we are currently in: +\chardef\unmlevel = \maxseclevel +% +% Trace whether the current chapter is an appendix or not: +% \chapheadtype is "N" or "A", unnumbered chapters are ignored. +\def\chapheadtype{N} + +% Choose a heading macro +% #1 is heading type +% #2 is heading level +% #3 is text for heading +\def\genhead#1#2#3{% + % Compute the abs. sec. level: + \absseclevel=#2 + \advance\absseclevel by \secbase + % Make sure \absseclevel doesn't fall outside the range: + \ifnum \absseclevel < 0 + \absseclevel = 0 + \else + \ifnum \absseclevel > 3 + \absseclevel = 3 + \fi + \fi + % The heading type: + \def\headtype{#1}% + \if \headtype U% + \ifnum \absseclevel < \unmlevel + \chardef\unmlevel = \absseclevel + \fi + \else + % Check for appendix sections: + \ifnum \absseclevel = 0 + \edef\chapheadtype{\headtype}% + \else + \if \headtype A\if \chapheadtype N% + \errmessage{@appendix... within a non-appendix chapter}% + \fi\fi + \fi + % Check for numbered within unnumbered: + \ifnum \absseclevel > \unmlevel + \def\headtype{U}% + \else + \chardef\unmlevel = 3 + \fi + \fi + % Now print the heading: + \if \headtype U% + \ifcase\absseclevel + \unnumberedzzz{#3}% + \or \unnumberedseczzz{#3}% + \or \unnumberedsubseczzz{#3}% + \or \unnumberedsubsubseczzz{#3}% + \fi + \else + \if \headtype A% + \ifcase\absseclevel + \appendixzzz{#3}% + \or \appendixsectionzzz{#3}% + \or \appendixsubseczzz{#3}% + \or \appendixsubsubseczzz{#3}% + \fi + \else + \ifcase\absseclevel + \chapterzzz{#3}% + \or \seczzz{#3}% + \or \numberedsubseczzz{#3}% + \or \numberedsubsubseczzz{#3}% + \fi + \fi + \fi + \suppressfirstparagraphindent +} + +% an interface: +\def\numhead{\genhead N} +\def\apphead{\genhead A} +\def\unnmhead{\genhead U} + +% @chapter, @appendix, @unnumbered. Increment top-level counter, reset +% all lower-level sectioning counters to zero. +% +% Also set \chaplevelprefix, which we prepend to @float sequence numbers +% (e.g., figures), q.v. By default (before any chapter), that is empty. +\let\chaplevelprefix = \empty +% +\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz +\def\chapterzzz#1{% + % section resetting is \global in case the chapter is in a group, such + % as an @include file. + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\chapno by 1 + % + % Used for \float. + \gdef\chaplevelprefix{\the\chapno.}% + \resetallfloatnos + % + \message{\putwordChapter\space \the\chapno}% + % + % Write the actual heading. + \chapmacro{#1}{Ynumbered}{\the\chapno}% + % + % So @section and the like are numbered underneath this chapter. + \global\let\section = \numberedsec + \global\let\subsection = \numberedsubsec + \global\let\subsubsection = \numberedsubsubsec +} + +\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz +\def\appendixzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\appendixno by 1 + \gdef\chaplevelprefix{\appendixletter.}% + \resetallfloatnos + % + \def\appendixnum{\putwordAppendix\space \appendixletter}% + \message{\appendixnum}% + % + \chapmacro{#1}{Yappendix}{\appendixletter}% + % + \global\let\section = \appendixsec + \global\let\subsection = \appendixsubsec + \global\let\subsubsection = \appendixsubsubsec +} + +\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz +\def\unnumberedzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\unnumberedno by 1 + % + % Since an unnumbered has no number, no prefix for figures. + \global\let\chaplevelprefix = \empty + \resetallfloatnos + % + % This used to be simply \message{#1}, but TeX fully expands the + % argument to \message. Therefore, if #1 contained @-commands, TeX + % expanded them. For example, in `@unnumbered The @cite{Book}', TeX + % expanded @cite (which turns out to cause errors because \cite is meant + % to be executed, not expanded). + % + % Anyway, we don't want the fully-expanded definition of @cite to appear + % as a result of the \message, we just want `@cite' itself. We use + % \the<toks register> to achieve this: TeX expands \the<toks> only once, + % simply yielding the contents of <toks register>. (We also do this for + % the toc entries.) + \toks0 = {#1}% + \message{(\the\toks0)}% + % + \chapmacro{#1}{Ynothing}{\the\unnumberedno}% + % + \global\let\section = \unnumberedsec + \global\let\subsection = \unnumberedsubsec + \global\let\subsubsection = \unnumberedsubsubsec +} + +% @centerchap is like @unnumbered, but the heading is centered. +\outer\parseargdef\centerchap{% + % Well, we could do the following in a group, but that would break + % an assumption that \chapmacro is called at the outermost level. + % Thus we are safer this way: --kasal, 24feb04 + \let\centerparametersmaybe = \centerparameters + \unnmhead0{#1}% + \let\centerparametersmaybe = \relax +} + +% @top is like @unnumbered. +\let\top\unnumbered + +% Sections. +\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz +\def\seczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% +} + +\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz +\def\appendixsectionzzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% +} +\let\appendixsec\appendixsection + +\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz +\def\unnumberedseczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% +} + +% Subsections. +\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz +\def\numberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% +} + +\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz +\def\appendixsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno}% +} + +\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz +\def\unnumberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno}% +} + +% Subsubsections. +\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz +\def\numberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynumbered}% + {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz +\def\appendixsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz +\def\unnumberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +% These macros control what the section commands do, according +% to what kind of chapter we are in (ordinary, appendix, or unnumbered). +% Define them by default for a numbered chapter. +\let\section = \numberedsec +\let\subsection = \numberedsubsec +\let\subsubsection = \numberedsubsubsec + +% Define @majorheading, @heading and @subheading + +% NOTE on use of \vbox for chapter headings, section headings, and such: +% 1) We use \vbox rather than the earlier \line to permit +% overlong headings to fold. +% 2) \hyphenpenalty is set to 10000 because hyphenation in a +% heading is obnoxious; this forbids it. +% 3) Likewise, headings look best if no \parindent is used, and +% if justification is not attempted. Hence \raggedright. + +\def\majorheading{% + {\advance\chapheadingskip by 10pt \chapbreak }% + \parsearg\chapheadingzzz +} + +\def\chapheading{\chapbreak \parsearg\chapheadingzzz} +\def\chapheadingzzz#1{% + {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\raggedright + \rmisbold #1\hfill}}% + \bigskip \par\penalty 200\relax + \suppressfirstparagraphindent +} + +% @heading, @subheading, @subsubheading. +\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} + +% These macros generate a chapter, section, etc. heading only +% (including whitespace, linebreaking, etc. around it), +% given all the information in convenient, parsed form. + +%%% Args are the skip and penalty (usually negative) +\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} + +%%% Define plain chapter starts, and page on/off switching for it +% Parameter controlling skip before chapter headings (if needed) + +\newskip\chapheadingskip + +\def\chapbreak{\dobreak \chapheadingskip {-4000}} +\def\chappager{\par\vfill\supereject} +% Because \domark is called before \chapoddpage, the filler page will +% get the headings for the next chapter, which is wrong. But we don't +% care -- we just disable all headings on the filler page. +\def\chapoddpage{% + \chappager + \ifodd\pageno \else + \begingroup + \evenheadline={\hfil}\evenfootline={\hfil}% + \oddheadline={\hfil}\oddfootline={\hfil}% + \hbox to 0pt{}% + \chappager + \endgroup + \fi +} + +\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} + +\def\CHAPPAGoff{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chapbreak +\global\let\pagealignmacro=\chappager} + +\def\CHAPPAGon{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chappager +\global\let\pagealignmacro=\chappager +\global\def\HEADINGSon{\HEADINGSsingle}} + +\def\CHAPPAGodd{% +\global\let\contentsalignmacro = \chapoddpage +\global\let\pchapsepmacro=\chapoddpage +\global\let\pagealignmacro=\chapoddpage +\global\def\HEADINGSon{\HEADINGSdouble}} + +\CHAPPAGon + +% Chapter opening. +% +% #1 is the text, #2 is the section type (Ynumbered, Ynothing, +% Yappendix, Yomitfromtoc), #3 the chapter number. +% +% To test against our argument. +\def\Ynothingkeyword{Ynothing} +\def\Yomitfromtockeyword{Yomitfromtoc} +\def\Yappendixkeyword{Yappendix} +% +\def\chapmacro#1#2#3{% + % Insert the first mark before the heading break (see notes for \domark). + \let\prevchapterdefs=\lastchapterdefs + \let\prevsectiondefs=\lastsectiondefs + \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% + \gdef\thissection{}}% + % + \def\temptype{#2}% + \ifx\temptype\Ynothingkeyword + \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\thischapter{\thischaptername}}% + \else\ifx\temptype\Yomitfromtockeyword + \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\thischapter{}}% + \else\ifx\temptype\Yappendixkeyword + \toks0={#1}% + \xdef\lastchapterdefs{% + \gdef\noexpand\thischaptername{\the\toks0}% + \gdef\noexpand\thischapternum{\appendixletter}% + \gdef\noexpand\thischapter{\putwordAppendix{} \noexpand\thischapternum: + \noexpand\thischaptername}% + }% + \else + \toks0={#1}% + \xdef\lastchapterdefs{% + \gdef\noexpand\thischaptername{\the\toks0}% + \gdef\noexpand\thischapternum{\the\chapno}% + \gdef\noexpand\thischapter{\putwordChapter{} \noexpand\thischapternum: + \noexpand\thischaptername}% + }% + \fi\fi\fi + % + % Output the mark. Pass it through \safewhatsit, to take care of + % the preceding space. + \safewhatsit\domark + % + % Insert the chapter heading break. + \pchapsepmacro + % + % Now the second mark, after the heading break. No break points + % between here and the heading. + \let\prevchapterdefs=\lastchapterdefs + \let\prevsectiondefs=\lastsectiondefs + \domark + % + {% + \chapfonts \rmisbold + % + % Have to define \lastsection before calling \donoderef, because the + % xref code eventually uses it. On the other hand, it has to be called + % after \pchapsepmacro, or the headline will change too soon. + \gdef\lastsection{#1}% + % + % Only insert the separating space if we have a chapter/appendix + % number, and don't print the unnumbered ``number''. + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unnchap}% + \else\ifx\temptype\Yomitfromtockeyword + \setbox0 = \hbox{}% contents like unnumbered, but no toc entry + \def\toctype{omit}% + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% + \def\toctype{app}% + \else + \setbox0 = \hbox{#3\enspace}% + \def\toctype{numchap}% + \fi\fi\fi + % + % Write the toc entry for this chapter. Must come before the + % \donoderef, because we include the current node name in the toc + % entry, and \donoderef resets it to empty. + \writetocentry{\toctype}{#1}{#3}% + % + % For pdftex, we have to write out the node definition (aka, make + % the pdfdest) after any page break, but before the actual text has + % been typeset. If the destination for the pdf outline is after the + % text, then jumping from the outline may wind up with the text not + % being visible, for instance under high magnification. + \donoderef{#2}% + % + % Typeset the actual heading. + \nobreak % Avoid page breaks at the interline glue. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent=\wd0 \centerparametersmaybe + \unhbox0 #1\par}% + }% + \nobreak\bigskip % no page break after a chapter title + \nobreak +} + +% @centerchap -- centered and unnumbered. +\let\centerparametersmaybe = \relax +\def\centerparameters{% + \advance\rightskip by 3\rightskip + \leftskip = \rightskip + \parfillskip = 0pt +} + + +% I don't think this chapter style is supported any more, so I'm not +% updating it with the new noderef stuff. We'll see. --karl, 11aug03. +% +\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} +% +\def\unnchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\raggedright + \rmisbold #1\hfill}}\bigskip \par\nobreak +} +\def\chfopen #1#2{\chapoddpage {\chapfonts +\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% +\par\penalty 5000 % +} +\def\centerchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt + \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak +} +\def\CHAPFopen{% + \global\let\chapmacro=\chfopen + \global\let\centerchapmacro=\centerchfopen} + + +% Section titles. These macros combine the section number parts and +% call the generic \sectionheading to do the printing. +% +\newskip\secheadingskip +\def\secheadingbreak{\dobreak \secheadingskip{-1000}} + +% Subsection titles. +\newskip\subsecheadingskip +\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} + +% Subsubsection titles. +\def\subsubsecheadingskip{\subsecheadingskip} +\def\subsubsecheadingbreak{\subsecheadingbreak} + + +% Print any size, any type, section title. +% +% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is +% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the +% section number. +% +\def\seckeyword{sec} +% +\def\sectionheading#1#2#3#4{% + {% + % Switch to the right set of fonts. + \csname #2fonts\endcsname \rmisbold + % + \def\sectionlevel{#2}% + \def\temptype{#3}% + % + % Insert first mark before the heading break (see notes for \domark). + \let\prevsectiondefs=\lastsectiondefs + \ifx\temptype\Ynothingkeyword + \ifx\sectionlevel\seckeyword + \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% + \gdef\thissection{\thissectionname}}% + \fi + \else\ifx\temptype\Yomitfromtockeyword + % Don't redefine \thissection. + \else\ifx\temptype\Yappendixkeyword + \ifx\sectionlevel\seckeyword + \toks0={#1}% + \xdef\lastsectiondefs{% + \gdef\noexpand\thissectionname{\the\toks0}% + \gdef\noexpand\thissectionnum{#4}% + \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum: + \noexpand\thissectionname}% + }% + \fi + \else + \ifx\sectionlevel\seckeyword + \toks0={#1}% + \xdef\lastsectiondefs{% + \gdef\noexpand\thissectionname{\the\toks0}% + \gdef\noexpand\thissectionnum{#4}% + \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum: + \noexpand\thissectionname}% + }% + \fi + \fi\fi\fi + % + % Output the mark. Pass it through \safewhatsit, to take care of + % the preceding space. + \safewhatsit\domark + % + % Insert space above the heading. + \csname #2headingbreak\endcsname + % + % Now the second mark, after the heading break. No break points + % between here and the heading. + \let\prevsectiondefs=\lastsectiondefs + \domark + % + % Only insert the space after the number if we have a section number. + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unn}% + \gdef\lastsection{#1}% + \else\ifx\temptype\Yomitfromtockeyword + % for @headings -- no section number, don't include in toc, + % and don't redefine \lastsection. + \setbox0 = \hbox{}% + \def\toctype{omit}% + \let\sectionlevel=\empty + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{#4\enspace}% + \def\toctype{app}% + \gdef\lastsection{#1}% + \else + \setbox0 = \hbox{#4\enspace}% + \def\toctype{num}% + \gdef\lastsection{#1}% + \fi\fi\fi + % + % Write the toc entry (before \donoderef). See comments in \chapmacro. + \writetocentry{\toctype\sectionlevel}{#1}{#4}% + % + % Write the node reference (= pdf destination for pdftex). + % Again, see comments in \chapmacro. + \donoderef{#3}% + % + % Interline glue will be inserted when the vbox is completed. + % That glue will be a valid breakpoint for the page, since it'll be + % preceded by a whatsit (usually from the \donoderef, or from the + % \writetocentry if there was no node). We don't want to allow that + % break, since then the whatsits could end up on page n while the + % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. + \nobreak + % + % Output the actual section heading. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent=\wd0 % zero if no section number + \unhbox0 #1}% + }% + % Add extra space after the heading -- half of whatever came above it. + % Don't allow stretch, though. + \kern .5 \csname #2headingskip\endcsname + % + % Do not let the kern be a potential breakpoint, as it would be if it + % was followed by glue. + \nobreak + % + % We'll almost certainly start a paragraph next, so don't let that + % glue accumulate. (Not a breakpoint because it's preceded by a + % discardable item.) + \vskip-\parskip + % + % This is purely so the last item on the list is a known \penalty > + % 10000. This is so \startdefun can avoid allowing breakpoints after + % section headings. Otherwise, it would insert a valid breakpoint between: + % + % @section sec-whatever + % @deffn def-whatever + \penalty 10001 +} + + +\message{toc,} +% Table of contents. +\newwrite\tocfile + +% Write an entry to the toc file, opening it if necessary. +% Called from @chapter, etc. +% +% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} +% We append the current node name (if any) and page number as additional +% arguments for the \{chap,sec,...}entry macros which will eventually +% read this. The node name is used in the pdf outlines as the +% destination to jump to. +% +% We open the .toc file for writing here instead of at @setfilename (or +% any other fixed time) so that @contents can be anywhere in the document. +% But if #1 is `omit', then we don't do anything. This is used for the +% table of contents chapter openings themselves. +% +\newif\iftocfileopened +\def\omitkeyword{omit}% +% +\def\writetocentry#1#2#3{% + \edef\writetoctype{#1}% + \ifx\writetoctype\omitkeyword \else + \iftocfileopened\else + \immediate\openout\tocfile = \jobname.toc + \global\tocfileopenedtrue + \fi + % + \iflinks + {\atdummies + \edef\temp{% + \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% + \temp + }% + \fi + \fi + % + % Tell \shipout to create a pdf destination on each page, if we're + % writing pdf. These are used in the table of contents. We can't + % just write one on every page because the title pages are numbered + % 1 and 2 (the page numbers aren't printed), and so are the first + % two pages of the document. Thus, we'd have two destinations named + % `1', and two named `2'. + \ifpdf \global\pdfmakepagedesttrue \fi +} + + +% These characters do not print properly in the Computer Modern roman +% fonts, so we must take special care. This is more or less redundant +% with the Texinfo input format setup at the end of this file. +% +\def\activecatcodes{% + \catcode`\"=\active + \catcode`\$=\active + \catcode`\<=\active + \catcode`\>=\active + \catcode`\\=\active + \catcode`\^=\active + \catcode`\_=\active + \catcode`\|=\active + \catcode`\~=\active +} + + +% Read the toc file, which is essentially Texinfo input. +\def\readtocfile{% + \setupdatafile + \activecatcodes + \input \tocreadfilename +} + +\newskip\contentsrightmargin \contentsrightmargin=1in +\newcount\savepageno +\newcount\lastnegativepageno \lastnegativepageno = -1 + +% Prepare to read what we've written to \tocfile. +% +\def\startcontents#1{% + % If @setchapternewpage on, and @headings double, the contents should + % start on an odd page, unlike chapters. Thus, we maintain + % \contentsalignmacro in parallel with \pagealignmacro. + % From: Torbjorn Granlund <tege@matematik.su.se> + \contentsalignmacro + \immediate\closeout\tocfile + % + % Don't need to put `Contents' or `Short Contents' in the headline. + % It is abundantly clear what they are. + \chapmacro{#1}{Yomitfromtoc}{}% + % + \savepageno = \pageno + \begingroup % Set up to handle contents files properly. + \raggedbottom % Worry more about breakpoints than the bottom. + \advance\hsize by -\contentsrightmargin % Don't use the full line length. + % + % Roman numerals for page numbers. + \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi +} + +% redefined for the two-volume lispref. We always output on +% \jobname.toc even if this is redefined. +% +\def\tocreadfilename{\jobname.toc} + +% Normal (long) toc. +% +\def\contents{% + \startcontents{\putwordTOC}% + \openin 1 \tocreadfilename\space + \ifeof 1 \else + \readtocfile + \fi + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \ifeof 1 \else + \pdfmakeoutlines + \fi + \closein 1 + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} + +% And just the chapters. +\def\summarycontents{% + \startcontents{\putwordShortTOC}% + % + \let\numchapentry = \shortchapentry + \let\appentry = \shortchapentry + \let\unnchapentry = \shortunnchapentry + % We want a true roman here for the page numbers. + \secfonts + \let\rm=\shortcontrm \let\bf=\shortcontbf + \let\sl=\shortcontsl \let\tt=\shortconttt + \rm + \hyphenpenalty = 10000 + \advance\baselineskip by 1pt % Open it up a little. + \def\numsecentry##1##2##3##4{} + \let\appsecentry = \numsecentry + \let\unnsecentry = \numsecentry + \let\numsubsecentry = \numsecentry + \let\appsubsecentry = \numsecentry + \let\unnsubsecentry = \numsecentry + \let\numsubsubsecentry = \numsecentry + \let\appsubsubsecentry = \numsecentry + \let\unnsubsubsecentry = \numsecentry + \openin 1 \tocreadfilename\space + \ifeof 1 \else + \readtocfile + \fi + \closein 1 + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} +\let\shortcontents = \summarycontents + +% Typeset the label for a chapter or appendix for the short contents. +% The arg is, e.g., `A' for an appendix, or `3' for a chapter. +% +\def\shortchaplabel#1{% + % This space should be enough, since a single number is .5em, and the + % widest letter (M) is 1em, at least in the Computer Modern fonts. + % But use \hss just in case. + % (This space doesn't include the extra space that gets added after + % the label; that gets put in by \shortchapentry above.) + % + % We'd like to right-justify chapter numbers, but that looks strange + % with appendix letters. And right-justifying numbers and + % left-justifying letters looks strange when there is less than 10 + % chapters. Have to read the whole toc once to know how many chapters + % there are before deciding ... + \hbox to 1em{#1\hss}% +} + +% These macros generate individual entries in the table of contents. +% The first argument is the chapter or section name. +% The last argument is the page number. +% The arguments in between are the chapter number, section number, ... + +% Chapters, in the main contents. +\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} +% +% Chapters, in the short toc. +% See comments in \dochapentry re vbox and related settings. +\def\shortchapentry#1#2#3#4{% + \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% +} + +% Appendices, in the main contents. +% Need the word Appendix, and a fixed-size box. +% +\def\appendixbox#1{% + % We use M since it's probably the widest letter. + \setbox0 = \hbox{\putwordAppendix{} M}% + \hbox to \wd0{\putwordAppendix{} #1\hss}} +% +\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} + +% Unnumbered chapters. +\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} +\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} + +% Sections. +\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} +\let\appsecentry=\numsecentry +\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} + +% Subsections. +\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} +\let\appsubsecentry=\numsubsecentry +\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} + +% And subsubsections. +\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} +\let\appsubsubsecentry=\numsubsubsecentry +\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} + +% This parameter controls the indentation of the various levels. +% Same as \defaultparindent. +\newdimen\tocindent \tocindent = 15pt + +% Now for the actual typesetting. In all these, #1 is the text and #2 is the +% page number. +% +% If the toc has to be broken over pages, we want it to be at chapters +% if at all possible; hence the \penalty. +\def\dochapentry#1#2{% + \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip + \begingroup + \chapentryfonts + \tocentry{#1}{\dopageno\bgroup#2\egroup}% + \endgroup + \nobreak\vskip .25\baselineskip plus.1\baselineskip +} + +\def\dosecentry#1#2{\begingroup + \secentryfonts \leftskip=\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsecentry#1#2{\begingroup + \subsecentryfonts \leftskip=2\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsubsecentry#1#2{\begingroup + \subsubsecentryfonts \leftskip=3\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +% We use the same \entry macro as for the index entries. +\let\tocentry = \entry + +% Space between chapter (or whatever) number and the title. +\def\labelspace{\hskip1em \relax} + +\def\dopageno#1{{\rm #1}} +\def\doshortpageno#1{{\rm #1}} + +\def\chapentryfonts{\secfonts \rm} +\def\secentryfonts{\textfonts} +\def\subsecentryfonts{\textfonts} +\def\subsubsecentryfonts{\textfonts} + + +\message{environments,} +% @foo ... @end foo. + +% Markup style infrastructure. \defmarkupstylesetup\INITMACRO will +% define and register \INITMACRO to be called on markup style changes. +% \INITMACRO can check \currentmarkupstyle for the innermost +% style and the set of \ifmarkupSTYLE switches for all styles +% currently in effect. +\newif\ifmarkupvar +\newif\ifmarkupsamp +\newif\ifmarkupkey +%\newif\ifmarkupfile % @file == @samp. +%\newif\ifmarkupoption % @option == @samp. +\newif\ifmarkupcode +\newif\ifmarkupkbd +%\newif\ifmarkupenv % @env == @code. +%\newif\ifmarkupcommand % @command == @code. +\newif\ifmarkuptex % @tex (and part of @math, for now). +\newif\ifmarkupexample +\newif\ifmarkupverb +\newif\ifmarkupverbatim + +\let\currentmarkupstyle\empty + +\def\setupmarkupstyle#1{% + \csname markup#1true\endcsname + \def\currentmarkupstyle{#1}% + \markupstylesetup +} + +\let\markupstylesetup\empty + +\def\defmarkupstylesetup#1{% + \expandafter\def\expandafter\markupstylesetup + \expandafter{\markupstylesetup #1}% + \def#1% +} + +% Markup style setup for left and right quotes. +\defmarkupstylesetup\markupsetuplq{% + \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname + \ifx\temp\relax \markupsetuplqdefault \else \temp \fi +} + +\defmarkupstylesetup\markupsetuprq{% + \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname + \ifx\temp\relax \markupsetuprqdefault \else \temp \fi +} + +{ +\catcode`\'=\active +\catcode`\`=\active + +\gdef\markupsetuplqdefault{\let`\lq} +\gdef\markupsetuprqdefault{\let'\rq} + +\gdef\markupsetcodequoteleft{\let`\codequoteleft} +\gdef\markupsetcodequoteright{\let'\codequoteright} + +\gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft} +} + +\let\markupsetuplqcode \markupsetcodequoteleft +\let\markupsetuprqcode \markupsetcodequoteright +\let\markupsetuplqexample \markupsetcodequoteleft +\let\markupsetuprqexample \markupsetcodequoteright +\let\markupsetuplqverb \markupsetcodequoteleft +\let\markupsetuprqverb \markupsetcodequoteright +\let\markupsetuplqverbatim \markupsetcodequoteleft +\let\markupsetuprqverbatim \markupsetcodequoteright + +\let\markupsetuplqsamp \markupsetnoligaturesquoteleft +\let\markupsetuplqkbd \markupsetnoligaturesquoteleft + +% Allow an option to not replace quotes with a regular directed right +% quote/apostrophe (char 0x27), but instead use the undirected quote +% from cmtt (char 0x0d). The undirected quote is ugly, so don't make it +% the default, but it works for pasting with more pdf viewers (at least +% evince), the lilypond developers report. xpdf does work with the +% regular 0x27. +% +\def\codequoteright{% + \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax + \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax + '% + \else \char'15 \fi + \else \char'15 \fi +} +% +% and a similar option for the left quote char vs. a grave accent. +% Modern fonts display ASCII 0x60 as a grave accent, so some people like +% the code environments to do likewise. +% +\def\codequoteleft{% + \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax + \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax + % [Knuth] pp. 380,381,391 + % \relax disables Spanish ligatures ?` and !` of \tt font. + \relax`% + \else \char'22 \fi + \else \char'22 \fi +} + +% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. +\def\noligaturesquoteleft{\relax\lq} + +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. +% +% Since these characters are used in examples, they should be an even number of +% \tt widths. Each \tt character is 1en, so two makes it 1em. +% +\def\point{$\star$} +\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} +\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} +\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} +\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} +\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} + +% The @error{} command. +% Adapted from the TeXbook's \boxit. +% +\newbox\errorbox +% +{\tentt \global\dimen0 = 3em}% Width of the box. +\dimen2 = .55pt % Thickness of rules +% The text. (`r' is open on the right, `e' somewhat less so on the left.) +\setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt} +% +\setbox\errorbox=\hbox to \dimen0{\hfil + \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. + \advance\hsize by -2\dimen2 % Rules. + \vbox{% + \hrule height\dimen2 + \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. + \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. + \kern3pt\vrule width\dimen2}% Space to right. + \hrule height\dimen2} + \hfil} +% +\def\error{\leavevmode\lower.7ex\copy\errorbox} + +% @tex ... @end tex escapes into raw Tex temporarily. +% One exception: @ is still an escape character, so that @end tex works. +% But \@ or @@ will get a plain tex @ character. + +\envdef\tex{% + \setupmarkupstyle{tex}% + \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 + \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 + \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie + \catcode `\%=14 + \catcode `\+=\other + \catcode `\"=\other + \catcode `\|=\other + \catcode `\<=\other + \catcode `\>=\other + \catcode`\`=\other + \catcode`\'=\other + \escapechar=`\\ + % + \let\b=\ptexb + \let\bullet=\ptexbullet + \let\c=\ptexc + \let\,=\ptexcomma + \let\.=\ptexdot + \let\dots=\ptexdots + \let\equiv=\ptexequiv + \let\!=\ptexexclam + \let\i=\ptexi + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \let\{=\ptexlbrace + \let\+=\tabalign + \let\}=\ptexrbrace + \let\/=\ptexslash + \let\*=\ptexstar + \let\t=\ptext + \expandafter \let\csname top\endcsname=\ptextop % outer + \let\frenchspacing=\plainfrenchspacing + % + \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% + \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% + \def\@{@}% +} +% There is no need to define \Etex. + +% Define @lisp ... @end lisp. +% @lisp environment forms a group so it can rebind things, +% including the definition of @end lisp (which normally is erroneous). + +% Amount to narrow the margins by for @lisp. +\newskip\lispnarrowing \lispnarrowing=0.4in + +% This is the definition that ^^M gets inside @lisp, @example, and other +% such environments. \null is better than a space, since it doesn't +% have any width. +\def\lisppar{\null\endgraf} + +% This space is always present above and below environments. +\newskip\envskipamount \envskipamount = 0pt + +% Make spacing and below environment symmetrical. We use \parskip here +% to help in doing that, since in @example-like environments \parskip +% is reset to zero; thus the \afterenvbreak inserts no space -- but the +% start of the next paragraph will insert \parskip. +% +\def\aboveenvbreak{{% + % =10000 instead of <10000 because of a special case in \itemzzz and + % \sectionheading, q.v. + \ifnum \lastpenalty=10000 \else + \advance\envskipamount by \parskip + \endgraf + \ifdim\lastskip<\envskipamount + \removelastskip + % it's not a good place to break if the last penalty was \nobreak + % or better ... + \ifnum\lastpenalty<10000 \penalty-50 \fi + \vskip\envskipamount + \fi + \fi +}} + +\let\afterenvbreak = \aboveenvbreak + +% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will +% also clear it, so that its embedded environments do the narrowing again. +\let\nonarrowing=\relax + +% @cartouche ... @end cartouche: draw rectangle w/rounded corners around +% environment contents. +\font\circle=lcircle10 +\newdimen\circthick +\newdimen\cartouter\newdimen\cartinner +\newskip\normbskip\newskip\normpskip\newskip\normlskip +\circthick=\fontdimen8\circle +% +\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth +\def\ctr{{\hskip 6pt\circle\char'010}} +\def\cbl{{\circle\char'012\hskip -6pt}} +\def\cbr{{\hskip 6pt\circle\char'011}} +\def\carttop{\hbox to \cartouter{\hskip\lskip + \ctl\leaders\hrule height\circthick\hfil\ctr + \hskip\rskip}} +\def\cartbot{\hbox to \cartouter{\hskip\lskip + \cbl\leaders\hrule height\circthick\hfil\cbr + \hskip\rskip}} +% +\newskip\lskip\newskip\rskip + +\envdef\cartouche{% + \ifhmode\par\fi % can't be in the midst of a paragraph. + \startsavinginserts + \lskip=\leftskip \rskip=\rightskip + \leftskip=0pt\rightskip=0pt % we want these *outside*. + \cartinner=\hsize \advance\cartinner by-\lskip + \advance\cartinner by-\rskip + \cartouter=\hsize + \advance\cartouter by 18.4pt % allow for 3pt kerns on either + % side, and for 6pt waste from + % each corner char, and rule thickness + \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip + % Flag to tell @lisp, etc., not to narrow margin. + \let\nonarrowing = t% + \vbox\bgroup + \baselineskip=0pt\parskip=0pt\lineskip=0pt + \carttop + \hbox\bgroup + \hskip\lskip + \vrule\kern3pt + \vbox\bgroup + \kern3pt + \hsize=\cartinner + \baselineskip=\normbskip + \lineskip=\normlskip + \parskip=\normpskip + \vskip -\parskip + \comment % For explanation, see the end of \def\group. +} +\def\Ecartouche{% + \ifhmode\par\fi + \kern3pt + \egroup + \kern3pt\vrule + \hskip\rskip + \egroup + \cartbot + \egroup + \checkinserts +} + + +% This macro is called at the beginning of all the @example variants, +% inside a group. +\def\nonfillstart{% + \aboveenvbreak + \hfuzz = 12pt % Don't be fussy + \sepspaces % Make spaces be word-separators rather than space tokens. + \let\par = \lisppar % don't ignore blank lines + \obeylines % each line of input is a line of output + \parskip = 0pt + \parindent = 0pt + \emergencystretch = 0pt % don't try to avoid overfull boxes + \ifx\nonarrowing\relax + \advance \leftskip by \lispnarrowing + \exdentamount=\lispnarrowing + \else + \let\nonarrowing = \relax + \fi + \let\exdent=\nofillexdent +} + +% If you want all examples etc. small: @set dispenvsize small. +% If you want even small examples the full size: @set dispenvsize nosmall. +% This affects the following displayed environments: +% @example, @display, @format, @lisp +% +\def\smallword{small} +\def\nosmallword{nosmall} +\let\SETdispenvsize\relax +\def\setnormaldispenv{% + \ifx\SETdispenvsize\smallword + % end paragraph for sake of leading, in case document has no blank + % line. This is redundant with what happens in \aboveenvbreak, but + % we need to do it before changing the fonts, and it's inconvenient + % to change the fonts afterward. + \ifnum \lastpenalty=10000 \else \endgraf \fi + \smallexamplefonts \rm + \fi +} +\def\setsmalldispenv{% + \ifx\SETdispenvsize\nosmallword + \else + \ifnum \lastpenalty=10000 \else \endgraf \fi + \smallexamplefonts \rm + \fi +} + +% We often define two environments, @foo and @smallfoo. +% Let's do it by one command: +\def\makedispenv #1#2{ + \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} + \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} + \expandafter\let\csname E#1\endcsname \afterenvbreak + \expandafter\let\csname Esmall#1\endcsname \afterenvbreak +} + +% Define two synonyms: +\def\maketwodispenvs #1#2#3{ + \makedispenv{#1}{#3} + \makedispenv{#2}{#3} +} + +% @lisp: indented, narrowed, typewriter font; @example: same as @lisp. +% +% @smallexample and @smalllisp: use smaller fonts. +% Originally contributed by Pavel@xerox. +% +\maketwodispenvs {lisp}{example}{% + \nonfillstart + \tt\setupmarkupstyle{example}% + \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. + \gobble % eat return +} +% @display/@smalldisplay: same as @lisp except keep current font. +% +\makedispenv {display}{% + \nonfillstart + \gobble +} + +% @format/@smallformat: same as @display except don't narrow margins. +% +\makedispenv{format}{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} + +% @flushleft: same as @format, but doesn't obey \SETdispenvsize. +\envdef\flushleft{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} +\let\Eflushleft = \afterenvbreak + +% @flushright. +% +\envdef\flushright{% + \let\nonarrowing = t% + \nonfillstart + \advance\leftskip by 0pt plus 1fill + \gobble +} +\let\Eflushright = \afterenvbreak + + +% @quotation does normal linebreaking (hence we can't use \nonfillstart) +% and narrows the margins. We keep \parskip nonzero in general, since +% we're doing normal filling. So, when using \aboveenvbreak and +% \afterenvbreak, temporarily make \parskip 0. +% +\def\quotationstart{% + {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip + \parindent=0pt + % + % @cartouche defines \nonarrowing to inhibit narrowing at next level down. + \ifx\nonarrowing\relax + \advance\leftskip by \lispnarrowing + \advance\rightskip by \lispnarrowing + \exdentamount = \lispnarrowing + \else + \let\nonarrowing = \relax + \fi + \parsearg\quotationlabel +} + +\envdef\quotation{% + \setnormaldispenv + \quotationstart +} + +\envdef\smallquotation{% + \setsmalldispenv + \quotationstart +} +\let\Esmallquotation = \Equotation + +% We have retained a nonzero parskip for the environment, since we're +% doing normal filling. +% +\def\Equotation{% + \par + \ifx\quotationauthor\undefined\else + % indent a bit. + \leftline{\kern 2\leftskip \sl ---\quotationauthor}% + \fi + {\parskip=0pt \afterenvbreak}% +} + +% If we're given an argument, typeset it in bold with a colon after. +\def\quotationlabel#1{% + \def\temp{#1}% + \ifx\temp\empty \else + {\bf #1: }% + \fi +} + + +% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>} +% If we want to allow any <char> as delimiter, +% we need the curly braces so that makeinfo sees the @verb command, eg: +% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org +% +% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. +% +% [Knuth] p.344; only we need to do the other characters Texinfo sets +% active too. Otherwise, they get lost as the first character on a +% verbatim line. +\def\dospecials{% + \do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% + \do\<\do\>\do\|\do\@\do+\do\"% + % Don't do the quotes -- if we do, @set txicodequoteundirected and + % @set txicodequotebacktick will not have effect on @verb and + % @verbatim, and ?` and !` ligatures won't get disabled. + %\do\`\do\'% +} +% +% [Knuth] p. 380 +\def\uncatcodespecials{% + \def\do##1{\catcode`##1=\other}\dospecials} +% +% Setup for the @verb command. +% +% Eight spaces for a tab +\begingroup + \catcode`\^^I=\active + \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} +\endgroup +% +\def\setupverb{% + \tt % easiest (and conventionally used) font for verbatim + \def\par{\leavevmode\endgraf}% + \setupmarkupstyle{verb}% + \tabeightspaces + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces +} + +% Setup for the @verbatim environment +% +% Real tab expansion +\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount +% +\def\starttabbox{\setbox0=\hbox\bgroup} +% +\begingroup + \catcode`\^^I=\active + \gdef\tabexpand{% + \catcode`\^^I=\active + \def^^I{\leavevmode\egroup + \dimen0=\wd0 % the width so far, or since the previous tab + \divide\dimen0 by\tabw + \multiply\dimen0 by\tabw % compute previous multiple of \tabw + \advance\dimen0 by\tabw % advance to next multiple of \tabw + \wd0=\dimen0 \box0 \starttabbox + }% + } +\endgroup + +% start the verbatim environment. +\def\setupverbatim{% + \let\nonarrowing = t% + \nonfillstart + % Easiest (and conventionally used) font for verbatim + \tt + \def\par{\leavevmode\egroup\box0\endgraf}% + \tabexpand + \setupmarkupstyle{verbatim}% + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces + \everypar{\starttabbox}% +} + +% Do the @verb magic: verbatim text is quoted by unique +% delimiter characters. Before first delimiter expect a +% right brace, after last delimiter expect closing brace: +% +% \def\doverb'{'<char>#1<char>'}'{#1} +% +% [Knuth] p. 382; only eat outer {} +\begingroup + \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other + \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] +\endgroup +% +\def\verb{\begingroup\setupverb\doverb} +% +% +% Do the @verbatim magic: define the macro \doverbatim so that +% the (first) argument ends when '@end verbatim' is reached, ie: +% +% \def\doverbatim#1@end verbatim{#1} +% +% For Texinfo it's a lot easier than for LaTeX, +% because texinfo's \verbatim doesn't stop at '\end{verbatim}': +% we need not redefine '\', '{' and '}'. +% +% Inspired by LaTeX's verbatim command set [latex.ltx] +% +\begingroup + \catcode`\ =\active + \obeylines % + % ignore everything up to the first ^^M, that's the newline at the end + % of the @verbatim input line itself. Otherwise we get an extra blank + % line in the output. + \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% + % We really want {...\end verbatim} in the body of the macro, but + % without the active space; thus we have to use \xdef and \gobble. +\endgroup +% +\envdef\verbatim{% + \setupverbatim\doverbatim +} +\let\Everbatim = \afterenvbreak + + +% @verbatiminclude FILE - insert text of file in verbatim environment. +% +\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} +% +\def\doverbatiminclude#1{% + {% + \makevalueexpandable + \setupverbatim + \indexnofonts % Allow `@@' and other weird things in file names. + \input #1 + \afterenvbreak + }% +} + +% @copying ... @end copying. +% Save the text away for @insertcopying later. +% +% We save the uninterpreted tokens, rather than creating a box. +% Saving the text in a box would be much easier, but then all the +% typesetting commands (@smallbook, font changes, etc.) have to be done +% beforehand -- and a) we want @copying to be done first in the source +% file; b) letting users define the frontmatter in as flexible order as +% possible is very desirable. +% +\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} +\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} +% +\def\insertcopying{% + \begingroup + \parindent = 0pt % paragraph indentation looks wrong on title page + \scanexp\copyingtext + \endgroup +} + + +\message{defuns,} +% @defun etc. + +\newskip\defbodyindent \defbodyindent=.4in +\newskip\defargsindent \defargsindent=50pt +\newskip\deflastargmargin \deflastargmargin=18pt +\newcount\defunpenalty + +% Start the processing of @deffn: +\def\startdefun{% + \ifnum\lastpenalty<10000 + \medbreak + \defunpenalty=10003 % Will keep this @deffn together with the + % following @def command, see below. + \else + % If there are two @def commands in a row, we'll have a \nobreak, + % which is there to keep the function description together with its + % header. But if there's nothing but headers, we need to allow a + % break somewhere. Check specifically for penalty 10002, inserted + % by \printdefunline, instead of 10000, since the sectioning + % commands also insert a nobreak penalty, and we don't want to allow + % a break between a section heading and a defun. + % + % As a minor refinement, we avoid "club" headers by signalling + % with penalty of 10003 after the very first @deffn in the + % sequence (see above), and penalty of 10002 after any following + % @def command. + \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi + % + % Similarly, after a section heading, do not allow a break. + % But do insert the glue. + \medskip % preceded by discardable penalty, so not a breakpoint + \fi + % + \parindent=0in + \advance\leftskip by \defbodyindent + \exdentamount=\defbodyindent +} + +\def\dodefunx#1{% + % First, check whether we are in the right environment: + \checkenv#1% + % + % As above, allow line break if we have multiple x headers in a row. + % It's not a great place, though. + \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi + % + % And now, it's time to reuse the body of the original defun: + \expandafter\gobbledefun#1% +} +\def\gobbledefun#1\startdefun{} + +% \printdefunline \deffnheader{text} +% +\def\printdefunline#1#2{% + \begingroup + % call \deffnheader: + #1#2 \endheader + % common ending: + \interlinepenalty = 10000 + \advance\rightskip by 0pt plus 1fil + \endgraf + \nobreak\vskip -\parskip + \penalty\defunpenalty % signal to \startdefun and \dodefunx + % Some of the @defun-type tags do not enable magic parentheses, + % rendering the following check redundant. But we don't optimize. + \checkparencounts + \endgroup +} + +\def\Edefun{\endgraf\medbreak} + +% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; +% the only thing remaining is to define \deffnheader. +% +\def\makedefun#1{% + \expandafter\let\csname E#1\endcsname = \Edefun + \edef\temp{\noexpand\domakedefun + \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% + \temp +} + +% \domakedefun \deffn \deffnx \deffnheader +% +% Define \deffn and \deffnx, without parameters. +% \deffnheader has to be defined explicitly. +% +\def\domakedefun#1#2#3{% + \envdef#1{% + \startdefun + \parseargusing\activeparens{\printdefunline#3}% + }% + \def#2{\dodefunx#1}% + \def#3% +} + +%%% Untyped functions: + +% @deffn category name args +\makedefun{deffn}{\deffngeneral{}} + +% @deffn category class name args +\makedefun{defop}#1 {\defopon{#1\ \putwordon}} + +% \defopon {category on}class name args +\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deffngeneral {subind}category name args +% +\def\deffngeneral#1#2 #3 #4\endheader{% + % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. + \dosubind{fn}{\code{#3}}{#1}% + \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% +} + +%%% Typed functions: + +% @deftypefn category type name args +\makedefun{deftypefn}{\deftypefngeneral{}} + +% @deftypeop category class type name args +\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} + +% \deftypeopon {category on}class type name args +\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deftypefngeneral {subind}category type name args +% +\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% + \dosubind{fn}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +%%% Typed variables: + +% @deftypevr category type var args +\makedefun{deftypevr}{\deftypecvgeneral{}} + +% @deftypecv category class type var args +\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} + +% \deftypecvof {category of}class type var args +\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } + +% \deftypecvgeneral {subind}category type var args +% +\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% + \dosubind{vr}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +%%% Untyped variables: + +% @defvr category var args +\makedefun{defvr}#1 {\deftypevrheader{#1} {} } + +% @defcv category class var args +\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} + +% \defcvof {category of}class var args +\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } + +%%% Type: +% @deftp category name args +\makedefun{deftp}#1 #2 #3\endheader{% + \doind{tp}{\code{#2}}% + \defname{#1}{}{#2}\defunargs{#3\unskip}% +} + +% Remaining @defun-like shortcuts: +\makedefun{defun}{\deffnheader{\putwordDeffunc} } +\makedefun{defmac}{\deffnheader{\putwordDefmac} } +\makedefun{defspec}{\deffnheader{\putwordDefspec} } +\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } +\makedefun{defvar}{\defvrheader{\putwordDefvar} } +\makedefun{defopt}{\defvrheader{\putwordDefopt} } +\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } +\makedefun{defmethod}{\defopon\putwordMethodon} +\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} +\makedefun{defivar}{\defcvof\putwordInstanceVariableof} +\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} + +% \defname, which formats the name of the @def (not the args). +% #1 is the category, such as "Function". +% #2 is the return type, if any. +% #3 is the function name. +% +% We are followed by (but not passed) the arguments, if any. +% +\def\defname#1#2#3{% + % Get the values of \leftskip and \rightskip as they were outside the @def... + \advance\leftskip by -\defbodyindent + % + % How we'll format the type name. Putting it in brackets helps + % distinguish it from the body text that may end up on the next line + % just below it. + \def\temp{#1}% + \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} + % + % Figure out line sizes for the paragraph shape. + % The first line needs space for \box0; but if \rightskip is nonzero, + % we need only space for the part of \box0 which exceeds it: + \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip + % The continuations: + \dimen2=\hsize \advance\dimen2 by -\defargsindent + % (plain.tex says that \dimen1 should be used only as global.) + \parshape 2 0in \dimen0 \defargsindent \dimen2 + % + % Put the type name to the right margin. + \noindent + \hbox to 0pt{% + \hfil\box0 \kern-\hsize + % \hsize has to be shortened this way: + \kern\leftskip + % Intentionally do not respect \rightskip, since we need the space. + }% + % + % Allow all lines to be underfull without complaint: + \tolerance=10000 \hbadness=10000 + \exdentamount=\defbodyindent + {% + % defun fonts. We use typewriter by default (used to be bold) because: + % . we're printing identifiers, they should be in tt in principle. + % . in languages with many accents, such as Czech or French, it's + % common to leave accents off identifiers. The result looks ok in + % tt, but exceedingly strange in rm. + % . we don't want -- and --- to be treated as ligatures. + % . this still does not fix the ?` and !` ligatures, but so far no + % one has made identifiers using them :). + \df \tt + \def\temp{#2}% return value type + \ifx\temp\empty\else \tclose{\temp} \fi + #3% output function name + }% + {\rm\enskip}% hskip 0.5 em of \tenrm + % + \boldbrax + % arguments will be output next, if any. +} + +% Print arguments in slanted roman (not ttsl), inconsistently with using +% tt for the name. This is because literal text is sometimes needed in +% the argument list (groff manual), and ttsl and tt are not very +% distinguishable. Prevent hyphenation at `-' chars. +% +\def\defunargs#1{% + % use sl by default (not ttsl), + % tt for the names. + \df \sl \hyphenchar\font=0 + % + % On the other hand, if an argument has two dashes (for instance), we + % want a way to get ttsl. Let's try @var for that. + \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% + #1% + \sl\hyphenchar\font=45 +} + +% We want ()&[] to print specially on the defun line. +% +\def\activeparens{% + \catcode`\(=\active \catcode`\)=\active + \catcode`\[=\active \catcode`\]=\active + \catcode`\&=\active +} + +% Make control sequences which act like normal parenthesis chars. +\let\lparen = ( \let\rparen = ) + +% Be sure that we always have a definition for `(', etc. For example, +% if the fn name has parens in it, \boldbrax will not be in effect yet, +% so TeX would otherwise complain about undefined control sequence. +{ + \activeparens + \global\let(=\lparen \global\let)=\rparen + \global\let[=\lbrack \global\let]=\rbrack + \global\let& = \& + + \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} + \gdef\magicamp{\let&=\amprm} +} + +\newcount\parencount + +% If we encounter &foo, then turn on ()-hacking afterwards +\newif\ifampseen +\def\amprm#1 {\ampseentrue{\bf\ }} + +\def\parenfont{% + \ifampseen + % At the first level, print parens in roman, + % otherwise use the default font. + \ifnum \parencount=1 \rm \fi + \else + % The \sf parens (in \boldbrax) actually are a little bolder than + % the contained text. This is especially needed for [ and ] . + \sf + \fi +} +\def\infirstlevel#1{% + \ifampseen + \ifnum\parencount=1 + #1% + \fi + \fi +} +\def\bfafterword#1 {#1 \bf} + +\def\opnr{% + \global\advance\parencount by 1 + {\parenfont(}% + \infirstlevel \bfafterword +} +\def\clnr{% + {\parenfont)}% + \infirstlevel \sl + \global\advance\parencount by -1 +} + +\newcount\brackcount +\def\lbrb{% + \global\advance\brackcount by 1 + {\bf[}% +} +\def\rbrb{% + {\bf]}% + \global\advance\brackcount by -1 +} + +\def\checkparencounts{% + \ifnum\parencount=0 \else \badparencount \fi + \ifnum\brackcount=0 \else \badbrackcount \fi +} +% these should not use \errmessage; the glibc manual, at least, actually +% has such constructs (when documenting function pointers). +\def\badparencount{% + \message{Warning: unbalanced parentheses in @def...}% + \global\parencount=0 +} +\def\badbrackcount{% + \message{Warning: unbalanced square brackets in @def...}% + \global\brackcount=0 +} + + +\message{macros,} +% @macro. + +% To do this right we need a feature of e-TeX, \scantokens, +% which we arrange to emulate with a temporary file in ordinary TeX. +\ifx\eTeXversion\undefined + \newwrite\macscribble + \def\scantokens#1{% + \toks0={#1}% + \immediate\openout\macscribble=\jobname.tmp + \immediate\write\macscribble{\the\toks0}% + \immediate\closeout\macscribble + \input \jobname.tmp + } +\fi + +\def\scanmacro#1{% + \begingroup + \newlinechar`\^^M + \let\xeatspaces\eatspaces + % Undo catcode changes of \startcontents and \doprintindex + % When called from @insertcopying or (short)caption, we need active + % backslash to get it printed correctly. Previously, we had + % \catcode`\\=\other instead. We'll see whether a problem appears + % with macro expansion. --kasal, 19aug04 + \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ + % ... and \example + \spaceisspace + % + % Append \endinput to make sure that TeX does not see the ending newline. + % I've verified that it is necessary both for e-TeX and for ordinary TeX + % --kasal, 29nov03 + \scantokens{#1\endinput}% + \endgroup +} + +\def\scanexp#1{% + \edef\temp{\noexpand\scanmacro{#1}}% + \temp +} + +\newcount\paramno % Count of parameters +\newtoks\macname % Macro name +\newif\ifrecursive % Is it recursive? + +% List of all defined macros in the form +% \definedummyword\macro1\definedummyword\macro2... +% Currently is also contains all @aliases; the list can be split +% if there is a need. +\def\macrolist{} + +% Add the macro to \macrolist +\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} +\def\addtomacrolistxxx#1{% + \toks0 = \expandafter{\macrolist\definedummyword#1}% + \xdef\macrolist{\the\toks0}% +} + +% Utility routines. +% This does \let #1 = #2, with \csnames; that is, +% \let \csname#1\endcsname = \csname#2\endcsname +% (except of course we have to play expansion games). +% +\def\cslet#1#2{% + \expandafter\let + \csname#1\expandafter\endcsname + \csname#2\endcsname +} + +% Trim leading and trailing spaces off a string. +% Concepts from aro-bend problem 15 (see CTAN). +{\catcode`\@=11 +\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} +\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} +\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} +\def\unbrace#1{#1} +\unbrace{\gdef\trim@@@ #1 } #2@{#1} +} + +% Trim a single trailing ^^M off a string. +{\catcode`\^^M=\other \catcode`\Q=3% +\gdef\eatcr #1{\eatcra #1Q^^MQ}% +\gdef\eatcra#1^^MQ{\eatcrb#1Q}% +\gdef\eatcrb#1Q#2Q{#1}% +} + +% Macro bodies are absorbed as an argument in a context where +% all characters are catcode 10, 11 or 12, except \ which is active +% (as in normal texinfo). It is necessary to change the definition of \. + +% Non-ASCII encodings make 8-bit characters active, so un-activate +% them to avoid their expansion. Must do this non-globally, to +% confine the change to the current group. + +% It's necessary to have hard CRs when the macro is executed. This is +% done by making ^^M (\endlinechar) catcode 12 when reading the macro +% body, and then making it the \newlinechar in \scanmacro. + +\def\scanctxt{% + \catcode`\"=\other + \catcode`\+=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\@=\other + \catcode`\^=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\~=\other + \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi +} + +\def\scanargctxt{% + \scanctxt + \catcode`\\=\other + \catcode`\^^M=\other +} + +\def\macrobodyctxt{% + \scanctxt + \catcode`\{=\other + \catcode`\}=\other + \catcode`\^^M=\other + \usembodybackslash +} + +\def\macroargctxt{% + \scanctxt + \catcode`\\=\other +} + +% \mbodybackslash is the definition of \ in @macro bodies. +% It maps \foo\ => \csname macarg.foo\endcsname => #N +% where N is the macro parameter number. +% We define \csname macarg.\endcsname to be \realbackslash, so +% \\ in macro replacement text gets you a backslash. + +{\catcode`@=0 @catcode`@\=@active + @gdef@usembodybackslash{@let\=@mbodybackslash} + @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} +} +\expandafter\def\csname macarg.\endcsname{\realbackslash} + +\def\macro{\recursivefalse\parsearg\macroxxx} +\def\rmacro{\recursivetrue\parsearg\macroxxx} + +\def\macroxxx#1{% + \getargs{#1}% now \macname is the macname and \argl the arglist + \ifx\argl\empty % no arguments + \paramno=0% + \else + \expandafter\parsemargdef \argl;% + \fi + \if1\csname ismacro.\the\macname\endcsname + \message{Warning: redefining \the\macname}% + \else + \expandafter\ifx\csname \the\macname\endcsname \relax + \else \errmessage{Macro name \the\macname\space already defined}\fi + \global\cslet{macsave.\the\macname}{\the\macname}% + \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% + \addtomacrolist{\the\macname}% + \fi + \begingroup \macrobodyctxt + \ifrecursive \expandafter\parsermacbody + \else \expandafter\parsemacbody + \fi} + +\parseargdef\unmacro{% + \if1\csname ismacro.#1\endcsname + \global\cslet{#1}{macsave.#1}% + \global\expandafter\let \csname ismacro.#1\endcsname=0% + % Remove the macro name from \macrolist: + \begingroup + \expandafter\let\csname#1\endcsname \relax + \let\definedummyword\unmacrodo + \xdef\macrolist{\macrolist}% + \endgroup + \else + \errmessage{Macro #1 not defined}% + \fi +} + +% Called by \do from \dounmacro on each macro. The idea is to omit any +% macro definitions that have been changed to \relax. +% +\def\unmacrodo#1{% + \ifx #1\relax + % remove this + \else + \noexpand\definedummyword \noexpand#1% + \fi +} + +% This makes use of the obscure feature that if the last token of a +% <parameter list> is #, then the preceding argument is delimited by +% an opening brace, and that opening brace is not consumed. +\def\getargs#1{\getargsxxx#1{}} +\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} +\def\getmacname #1 #2\relax{\macname={#1}} +\def\getmacargs#1{\def\argl{#1}} + +% Parse the optional {params} list. Set up \paramno and \paramlist +% so \defmacro knows what to do. Define \macarg.blah for each blah +% in the params list, to be ##N where N is the position in that list. +% That gets used by \mbodybackslash (above). + +% We need to get `macro parameter char #' into several definitions. +% The technique used is stolen from LaTeX: let \hash be something +% unexpandable, insert that wherever you need a #, and then redefine +% it to # just before using the token list produced. +% +% The same technique is used to protect \eatspaces till just before +% the macro is used. + +\def\parsemargdef#1;{\paramno=0\def\paramlist{}% + \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} +\def\parsemargdefxxx#1,{% + \if#1;\let\next=\relax + \else \let\next=\parsemargdefxxx + \advance\paramno by 1% + \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname + {\xeatspaces{\hash\the\paramno}}% + \edef\paramlist{\paramlist\hash\the\paramno,}% + \fi\next} + +% These two commands read recursive and nonrecursive macro bodies. +% (They're different since rec and nonrec macros end differently.) + +\long\def\parsemacbody#1@end macro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% +\long\def\parsermacbody#1@end rmacro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% + +% This defines the macro itself. There are six cases: recursive and +% nonrecursive macros of zero, one, and many arguments. +% Much magic with \expandafter here. +% \xdef is used so that macro definitions will survive the file +% they're defined in; @include reads the file inside a group. +\def\defmacro{% + \let\hash=##% convert placeholders to macro parameter chars + \ifrecursive + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\scanmacro{\temp}}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup\noexpand\scanmacro{\temp}}% + \else % many + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{\egroup\noexpand\scanmacro{\temp}}% + \fi + \else + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \else % many + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \expandafter\noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \fi + \fi} + +\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} + +% \braceorline decides whether the next nonwhitespace character is a +% {. If so it reads up to the closing }, if not, it reads the whole +% line. Whatever was read is then fed to the next control sequence +% as an argument (by \parsebrace or \parsearg) +\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} +\def\braceorlinexxx{% + \ifx\nchar\bgroup\else + \expandafter\parsearg + \fi \macnamexxx} + + +% @alias. +% We need some trickery to remove the optional spaces around the equal +% sign. Just make them active and then expand them all to nothing. +\def\alias{\parseargusing\obeyspaces\aliasxxx} +\def\aliasxxx #1{\aliasyyy#1\relax} +\def\aliasyyy #1=#2\relax{% + {% + \expandafter\let\obeyedspace=\empty + \addtomacrolist{#1}% + \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% + }% + \next +} + + +\message{cross references,} + +\newwrite\auxfile +\newif\ifhavexrefs % True if xref values are known. +\newif\ifwarnedxrefs % True if we warned once that they aren't known. + +% @inforef is relatively simple. +\def\inforef #1{\inforefzzz #1,,,,**} +\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, + node \samp{\ignorespaces#1{}}} + +% @node's only job in TeX is to define \lastnode, which is used in +% cross-references. The @node line might or might not have commas, and +% might or might not have spaces before the first comma, like: +% @node foo , bar , ... +% We don't want such trailing spaces in the node name. +% +\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} +% +% also remove a trailing comma, in case of something like this: +% @node Help-Cross, , , Cross-refs +\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} +\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} + +\let\nwnode=\node +\let\lastnode=\empty + +% Write a cross-reference definition for the current node. #1 is the +% type (Ynumbered, Yappendix, Ynothing). +% +\def\donoderef#1{% + \ifx\lastnode\empty\else + \setref{\lastnode}{#1}% + \global\let\lastnode=\empty + \fi +} + +% @anchor{NAME} -- define xref target at arbitrary point. +% +\newcount\savesfregister +% +\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} +\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} +\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} + +% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an +% anchor), which consists of three parts: +% 1) NAME-title - the current sectioning name taken from \lastsection, +% or the anchor name. +% 2) NAME-snt - section number and type, passed as the SNT arg, or +% empty for anchors. +% 3) NAME-pg - the page number. +% +% This is called from \donoderef, \anchor, and \dofloat. In the case of +% floats, there is an additional part, which is not written here: +% 4) NAME-lof - the text as it should appear in a @listoffloats. +% +\def\setref#1#2{% + \pdfmkdest{#1}% + \iflinks + {% + \atdummies % preserve commands, but don't expand them + \edef\writexrdef##1##2{% + \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef + ##1}{##2}}% these are parameters of \writexrdef + }% + \toks0 = \expandafter{\lastsection}% + \immediate \writexrdef{title}{\the\toks0 }% + \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. + \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, during \shipout + }% + \fi +} + +% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is +% the node name, #2 the name of the Info cross-reference, #3 the printed +% node name, #4 the name of the Info file, #5 the name of the printed +% manual. All but the node name can be omitted. +% +\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} +\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} +\def\ref#1{\xrefX[#1,,,,,,,]} +\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup + \unsepspaces + \def\printedmanual{\ignorespaces #5}% + \def\printedrefname{\ignorespaces #3}% + \setbox1=\hbox{\printedmanual\unskip}% + \setbox0=\hbox{\printedrefname\unskip}% + \ifdim \wd0 = 0pt + % No printed node name was explicitly given. + \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax + % Use the node name inside the square brackets. + \def\printedrefname{\ignorespaces #1}% + \else + % Use the actual chapter/section title appear inside + % the square brackets. Use the real section title if we have it. + \ifdim \wd1 > 0pt + % It is in another manual, so we don't have it. + \def\printedrefname{\ignorespaces #1}% + \else + \ifhavexrefs + % We know the real title if we have the xref values. + \def\printedrefname{\refx{#1-title}{}}% + \else + % Otherwise just copy the Info node name. + \def\printedrefname{\ignorespaces #1}% + \fi% + \fi + \fi + \fi + % + % Make link in pdf output. + \ifpdf + {\indexnofonts + \turnoffactive + % This expands tokens, so do it after making catcode changes, so _ + % etc. don't get their TeX definitions. + \getfilename{#4}% + % + % See comments at \activebackslashdouble. + {\activebackslashdouble \xdef\pdfxrefdest{#1}% + \backslashparens\pdfxrefdest}% + % + \leavevmode + \startlink attr{/Border [0 0 0]}% + \ifnum\filenamelength>0 + goto file{\the\filename.pdf} name{\pdfxrefdest}% + \else + goto name{\pdfmkpgn{\pdfxrefdest}}% + \fi + }% + \setcolor{\linkcolor}% + \fi + % + % Float references are printed completely differently: "Figure 1.2" + % instead of "[somenode], p.3". We distinguish them by the + % LABEL-title being set to a magic string. + {% + % Have to otherify everything special to allow the \csname to + % include an _ in the xref name, etc. + \indexnofonts + \turnoffactive + \expandafter\global\expandafter\let\expandafter\Xthisreftitle + \csname XR#1-title\endcsname + }% + \iffloat\Xthisreftitle + % If the user specified the print name (third arg) to the ref, + % print it instead of our usual "Figure 1.2". + \ifdim\wd0 = 0pt + \refx{#1-snt}{}% + \else + \printedrefname + \fi + % + % if the user also gave the printed manual name (fifth arg), append + % "in MANUALNAME". + \ifdim \wd1 > 0pt + \space \putwordin{} \cite{\printedmanual}% + \fi + \else + % node/anchor (non-float) references. + % + % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not + % insert empty discretionaries after hyphens, which means that it will + % not find a line break at a hyphen in a node names. Since some manuals + % are best written with fairly long node names, containing hyphens, this + % is a loss. Therefore, we give the text of the node name again, so it + % is as if TeX is seeing it for the first time. + \ifdim \wd1 > 0pt + \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% + \else + % _ (for example) has to be the character _ for the purposes of the + % control sequence corresponding to the node, but it has to expand + % into the usual \leavevmode...\vrule stuff for purposes of + % printing. So we \turnoffactive for the \refx-snt, back on for the + % printing, back off for the \refx-pg. + {\turnoffactive + % Only output a following space if the -snt ref is nonempty; for + % @unnumbered and @anchor, it won't be. + \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% + \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi + }% + % output the `[mynode]' via a macro so it can be overridden. + \xrefprintnodename\printedrefname + % + % But we always want a comma and a space: + ,\space + % + % output the `page 3'. + \turnoffactive \putwordpage\tie\refx{#1-pg}{}% + \fi + \fi + \endlink +\endgroup} + +% This macro is called from \xrefX for the `[nodename]' part of xref +% output. It's a separate macro only so it can be changed more easily, +% since square brackets don't work well in some documents. Particularly +% one that Bob is working on :). +% +\def\xrefprintnodename#1{[#1]} + +% Things referred to by \setref. +% +\def\Ynothing{} +\def\Yomitfromtoc{} +\def\Ynumbered{% + \ifnum\secno=0 + \putwordChapter@tie \the\chapno + \else \ifnum\subsecno=0 + \putwordSection@tie \the\chapno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno + \else + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} +\def\Yappendix{% + \ifnum\secno=0 + \putwordAppendix@tie @char\the\appendixno{}% + \else \ifnum\subsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno + \else + \putwordSection@tie + @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} + +% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. +% If its value is nonempty, SUFFIX is output afterward. +% +\def\refx#1#2{% + {% + \indexnofonts + \otherbackslash + \expandafter\global\expandafter\let\expandafter\thisrefX + \csname XR#1\endcsname + }% + \ifx\thisrefX\relax + % If not defined, say something at least. + \angleleft un\-de\-fined\angleright + \iflinks + \ifhavexrefs + \message{\linenumber Undefined cross reference `#1'.}% + \else + \ifwarnedxrefs\else + \global\warnedxrefstrue + \message{Cross reference values unknown; you must run TeX again.}% + \fi + \fi + \fi + \else + % It's defined, so just use it. + \thisrefX + \fi + #2% Output the suffix in any case. +} + +% This is the macro invoked by entries in the aux file. Usually it's +% just a \def (we prepend XR to the control sequence name to avoid +% collisions). But if this is a float type, we have more work to do. +% +\def\xrdef#1#2{% + {% The node name might contain 8-bit characters, which in our current + % implementation are changed to commands like @'e. Don't let these + % mess up the control sequence name. + \indexnofonts + \turnoffactive + \xdef\safexrefname{#1}% + }% + % + \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref + % + % Was that xref control sequence that we just defined for a float? + \expandafter\iffloat\csname XR\safexrefname\endcsname + % it was a float, and we have the (safe) float type in \iffloattype. + \expandafter\let\expandafter\floatlist + \csname floatlist\iffloattype\endcsname + % + % Is this the first time we've seen this float type? + \expandafter\ifx\floatlist\relax + \toks0 = {\do}% yes, so just \do + \else + % had it before, so preserve previous elements in list. + \toks0 = \expandafter{\floatlist\do}% + \fi + % + % Remember this xref in the control sequence \floatlistFLOATTYPE, + % for later use in \listoffloats. + \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 + {\safexrefname}}% + \fi +} + +% Read the last existing aux file, if any. No error if none exists. +% +\def\tryauxfile{% + \openin 1 \jobname.aux + \ifeof 1 \else + \readdatafile{aux}% + \global\havexrefstrue + \fi + \closein 1 +} + +\def\setupdatafile{% + \catcode`\^^@=\other + \catcode`\^^A=\other + \catcode`\^^B=\other + \catcode`\^^C=\other + \catcode`\^^D=\other + \catcode`\^^E=\other + \catcode`\^^F=\other + \catcode`\^^G=\other + \catcode`\^^H=\other + \catcode`\^^K=\other + \catcode`\^^L=\other + \catcode`\^^N=\other + \catcode`\^^P=\other + \catcode`\^^Q=\other + \catcode`\^^R=\other + \catcode`\^^S=\other + \catcode`\^^T=\other + \catcode`\^^U=\other + \catcode`\^^V=\other + \catcode`\^^W=\other + \catcode`\^^X=\other + \catcode`\^^Z=\other + \catcode`\^^[=\other + \catcode`\^^\=\other + \catcode`\^^]=\other + \catcode`\^^^=\other + \catcode`\^^_=\other + % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. + % in xref tags, i.e., node names. But since ^^e4 notation isn't + % supported in the main text, it doesn't seem desirable. Furthermore, + % that is not enough: for node names that actually contain a ^ + % character, we would end up writing a line like this: 'xrdef {'hat + % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first + % argument, and \hat is not an expandable control sequence. It could + % all be worked out, but why? Either we support ^^ or we don't. + % + % The other change necessary for this was to define \auxhat: + % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter + % and then to call \auxhat in \setq. + % + \catcode`\^=\other + % + % Special characters. Should be turned off anyway, but... + \catcode`\~=\other + \catcode`\[=\other + \catcode`\]=\other + \catcode`\"=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\$=\other + \catcode`\#=\other + \catcode`\&=\other + \catcode`\%=\other + \catcode`+=\other % avoid \+ for paranoia even though we've turned it off + % + % This is to support \ in node names and titles, since the \ + % characters end up in a \csname. It's easier than + % leaving it active and making its active definition an actual \ + % character. What I don't understand is why it works in the *value* + % of the xrdef. Seems like it should be a catcode12 \, and that + % should not typeset properly. But it works, so I'm moving on for + % now. --karl, 15jan04. + \catcode`\\=\other + % + % Make the characters 128-255 be printing characters. + {% + \count1=128 + \def\loop{% + \catcode\count1=\other + \advance\count1 by 1 + \ifnum \count1<256 \loop \fi + }% + }% + % + % @ is our escape character in .aux files, and we need braces. + \catcode`\{=1 + \catcode`\}=2 + \catcode`\@=0 +} + +\def\readdatafile#1{% +\begingroup + \setupdatafile + \input\jobname.#1 +\endgroup} + + +\message{insertions,} +% including footnotes. + +\newcount \footnoteno + +% The trailing space in the following definition for supereject is +% vital for proper filling; pages come out unaligned when you do a +% pagealignmacro call if that space before the closing brace is +% removed. (Generally, numeric constants should always be followed by a +% space to prevent strange expansion errors.) +\def\supereject{\par\penalty -20000\footnoteno =0 } + +% @footnotestyle is meaningful for info output only. +\let\footnotestyle=\comment + +{\catcode `\@=11 +% +% Auto-number footnotes. Otherwise like plain. +\gdef\footnote{% + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \global\advance\footnoteno by \@ne + \edef\thisfootno{$^{\the\footnoteno}$}% + % + % In case the footnote comes at the end of a sentence, preserve the + % extra spacing after we do the footnote number. + \let\@sf\empty + \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi + % + % Remove inadvertent blank space before typesetting the footnote number. + \unskip + \thisfootno\@sf + \dofootnote +}% + +% Don't bother with the trickery in plain.tex to not require the +% footnote text as a parameter. Our footnotes don't need to be so general. +% +% Oh yes, they do; otherwise, @ifset (and anything else that uses +% \parseargline) fails inside footnotes because the tokens are fixed when +% the footnote is read. --karl, 16nov96. +% +\gdef\dofootnote{% + \insert\footins\bgroup + % We want to typeset this text as a normal paragraph, even if the + % footnote reference occurs in (for example) a display environment. + % So reset some parameters. + \hsize=\pagewidth + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox % top baseline for broken footnotes + \splitmaxdepth\dp\strutbox + \floatingpenalty\@MM + \leftskip\z@skip + \rightskip\z@skip + \spaceskip\z@skip + \xspaceskip\z@skip + \parindent\defaultparindent + % + \smallfonts \rm + % + % Because we use hanging indentation in footnotes, a @noindent appears + % to exdent this text, so make it be a no-op. makeinfo does not use + % hanging indentation so @noindent can still be needed within footnote + % text after an @example or the like (not that this is good style). + \let\noindent = \relax + % + % Hang the footnote text off the number. Use \everypar in case the + % footnote extends for more than one paragraph. + \everypar = {\hang}% + \textindent{\thisfootno}% + % + % Don't crash into the line above the footnote text. Since this + % expands into a box, it must come within the paragraph, lest it + % provide a place where TeX can split the footnote. + \footstrut + \futurelet\next\fo@t +} +}%end \catcode `\@=11 + +% In case a @footnote appears in a vbox, save the footnote text and create +% the real \insert just after the vbox finished. Otherwise, the insertion +% would be lost. +% Similarly, if a @footnote appears inside an alignment, save the footnote +% text to a box and make the \insert when a row of the table is finished. +% And the same can be done for other insert classes. --kasal, 16nov03. + +% Replace the \insert primitive by a cheating macro. +% Deeper inside, just make sure that the saved insertions are not spilled +% out prematurely. +% +\def\startsavinginserts{% + \ifx \insert\ptexinsert + \let\insert\saveinsert + \else + \let\checkinserts\relax + \fi +} + +% This \insert replacement works for both \insert\footins{foo} and +% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. +% +\def\saveinsert#1{% + \edef\next{\noexpand\savetobox \makeSAVEname#1}% + \afterassignment\next + % swallow the left brace + \let\temp = +} +\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} +\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} + +\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} + +\def\placesaveins#1{% + \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname + {\box#1}% +} + +% eat @SAVE -- beware, all of them have catcode \other: +{ + \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) + \gdef\gobblesave @SAVE{} +} + +% initialization: +\def\newsaveins #1{% + \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% + \next +} +\def\newsaveinsX #1{% + \csname newbox\endcsname #1% + \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts + \checksaveins #1}% +} + +% initialize: +\let\checkinserts\empty +\newsaveins\footins +\newsaveins\margin + + +% @image. We use the macros from epsf.tex to support this. +% If epsf.tex is not installed and @image is used, we complain. +% +% Check for and read epsf.tex up front. If we read it only at @image +% time, we might be inside a group, and then its definitions would get +% undone and the next image would fail. +\openin 1 = epsf.tex +\ifeof 1 \else + % Do not bother showing banner with epsf.tex v2.7k (available in + % doc/epsf.tex and on ctan). + \def\epsfannounce{\toks0 = }% + \input epsf.tex +\fi +\closein 1 +% +% We will only complain once about lack of epsf.tex. +\newif\ifwarnednoepsf +\newhelp\noepsfhelp{epsf.tex must be installed for images to + work. It is also included in the Texinfo distribution, or you can get + it from ftp://tug.org/tex/epsf.tex.} +% +\def\image#1{% + \ifx\epsfbox\undefined + \ifwarnednoepsf \else + \errhelp = \noepsfhelp + \errmessage{epsf.tex not found, images will be ignored}% + \global\warnednoepsftrue + \fi + \else + \imagexxx #1,,,,,\finish + \fi +} +% +% Arguments to @image: +% #1 is (mandatory) image filename; we tack on .eps extension. +% #2 is (optional) width, #3 is (optional) height. +% #4 is (ignored optional) html alt text. +% #5 is (ignored optional) extension. +% #6 is just the usual extra ignored arg for parsing this stuff. +\newif\ifimagevmode +\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup + \catcode`\^^M = 5 % in case we're inside an example + \normalturnoffactive % allow _ et al. in names + % If the image is by itself, center it. + \ifvmode + \imagevmodetrue + \nobreak\medskip + % Usually we'll have text after the image which will insert + % \parskip glue, so insert it here too to equalize the space + % above and below. + \nobreak\vskip\parskip + \nobreak + \fi + % + % Leave vertical mode so that indentation from an enclosing + % environment such as @quotation is respected. On the other hand, if + % it's at the top level, we don't want the normal paragraph indentation. + \noindent + % + % Output the image. + \ifpdf + \dopdfimage{#1}{#2}{#3}% + \else + % \epsfbox itself resets \epsf?size at each figure. + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi + \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi + \epsfbox{#1.eps}% + \fi + % + \ifimagevmode \medskip \fi % space after the standalone image +\endgroup} + + +% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, +% etc. We don't actually implement floating yet, we always include the +% float "here". But it seemed the best name for the future. +% +\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} + +% There may be a space before second and/or third parameter; delete it. +\def\eatcommaspace#1, {#1,} + +% #1 is the optional FLOATTYPE, the text label for this float, typically +% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, +% this float will not be numbered and cannot be referred to. +% +% #2 is the optional xref label. Also must be present for the float to +% be referable. +% +% #3 is the optional positioning argument; for now, it is ignored. It +% will somehow specify the positions allowed to float to (here, top, bottom). +% +% We keep a separate counter for each FLOATTYPE, which we reset at each +% chapter-level command. +\let\resetallfloatnos=\empty +% +\def\dofloat#1,#2,#3,#4\finish{% + \let\thiscaption=\empty + \let\thisshortcaption=\empty + % + % don't lose footnotes inside @float. + % + % BEWARE: when the floats start float, we have to issue warning whenever an + % insert appears inside a float which could possibly float. --kasal, 26may04 + % + \startsavinginserts + % + % We can't be used inside a paragraph. + \par + % + \vtop\bgroup + \def\floattype{#1}% + \def\floatlabel{#2}% + \def\floatloc{#3}% we do nothing with this yet. + % + \ifx\floattype\empty + \let\safefloattype=\empty + \else + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + \fi + % + % If label is given but no type, we handle that as the empty type. + \ifx\floatlabel\empty \else + % We want each FLOATTYPE to be numbered separately (Figure 1, + % Table 1, Figure 2, ...). (And if no label, no number.) + % + \expandafter\getfloatno\csname\safefloattype floatno\endcsname + \global\advance\floatno by 1 + % + {% + % This magic value for \lastsection is output by \setref as the + % XREFLABEL-title value. \xrefX uses it to distinguish float + % labels (which have a completely different output format) from + % node and anchor labels. And \xrdef uses it to construct the + % lists of floats. + % + \edef\lastsection{\floatmagic=\safefloattype}% + \setref{\floatlabel}{Yfloat}% + }% + \fi + % + % start with \parskip glue, I guess. + \vskip\parskip + % + % Don't suppress indentation if a float happens to start a section. + \restorefirstparagraphindent +} + +% we have these possibilities: +% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap +% @float Foo,lbl & no caption: Foo 1.1 +% @float Foo & @caption{Cap}: Foo: Cap +% @float Foo & no caption: Foo +% @float ,lbl & Caption{Cap}: 1.1: Cap +% @float ,lbl & no caption: 1.1 +% @float & @caption{Cap}: Cap +% @float & no caption: +% +\def\Efloat{% + \let\floatident = \empty + % + % In all cases, if we have a float type, it comes first. + \ifx\floattype\empty \else \def\floatident{\floattype}\fi + % + % If we have an xref label, the number comes next. + \ifx\floatlabel\empty \else + \ifx\floattype\empty \else % if also had float type, need tie first. + \appendtomacro\floatident{\tie}% + \fi + % the number. + \appendtomacro\floatident{\chaplevelprefix\the\floatno}% + \fi + % + % Start the printed caption with what we've constructed in + % \floatident, but keep it separate; we need \floatident again. + \let\captionline = \floatident + % + \ifx\thiscaption\empty \else + \ifx\floatident\empty \else + \appendtomacro\captionline{: }% had ident, so need a colon between + \fi + % + % caption text. + \appendtomacro\captionline{\scanexp\thiscaption}% + \fi + % + % If we have anything to print, print it, with space before. + % Eventually this needs to become an \insert. + \ifx\captionline\empty \else + \vskip.5\parskip + \captionline + % + % Space below caption. + \vskip\parskip + \fi + % + % If have an xref label, write the list of floats info. Do this + % after the caption, to avoid chance of it being a breakpoint. + \ifx\floatlabel\empty \else + % Write the text that goes in the lof to the aux file as + % \floatlabel-lof. Besides \floatident, we include the short + % caption if specified, else the full caption if specified, else nothing. + {% + \atdummies + % + % since we read the caption text in the macro world, where ^^M + % is turned into a normal character, we have to scan it back, so + % we don't write the literal three characters "^^M" into the aux file. + \scanexp{% + \xdef\noexpand\gtemp{% + \ifx\thisshortcaption\empty + \thiscaption + \else + \thisshortcaption + \fi + }% + }% + \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident + \ifx\gtemp\empty \else : \gtemp \fi}}% + }% + \fi + \egroup % end of \vtop + % + % place the captured inserts + % + % BEWARE: when the floats start floating, we have to issue warning + % whenever an insert appears inside a float which could possibly + % float. --kasal, 26may04 + % + \checkinserts +} + +% Append the tokens #2 to the definition of macro #1, not expanding either. +% +\def\appendtomacro#1#2{% + \expandafter\def\expandafter#1\expandafter{#1#2}% +} + +% @caption, @shortcaption +% +\def\caption{\docaption\thiscaption} +\def\shortcaption{\docaption\thisshortcaption} +\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} +\def\defcaption#1#2{\egroup \def#1{#2}} + +% The parameter is the control sequence identifying the counter we are +% going to use. Create it if it doesn't exist and assign it to \floatno. +\def\getfloatno#1{% + \ifx#1\relax + % Haven't seen this figure type before. + \csname newcount\endcsname #1% + % + % Remember to reset this floatno at the next chap. + \expandafter\gdef\expandafter\resetallfloatnos + \expandafter{\resetallfloatnos #1=0 }% + \fi + \let\floatno#1% +} + +% \setref calls this to get the XREFLABEL-snt value. We want an @xref +% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we +% first read the @float command. +% +\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% + +% Magic string used for the XREFLABEL-title value, so \xrefX can +% distinguish floats from other xref types. +\def\floatmagic{!!float!!} + +% #1 is the control sequence we are passed; we expand into a conditional +% which is true if #1 represents a float ref. That is, the magic +% \lastsection value which we \setref above. +% +\def\iffloat#1{\expandafter\doiffloat#1==\finish} +% +% #1 is (maybe) the \floatmagic string. If so, #2 will be the +% (safe) float type for this float. We set \iffloattype to #2. +% +\def\doiffloat#1=#2=#3\finish{% + \def\temp{#1}% + \def\iffloattype{#2}% + \ifx\temp\floatmagic +} + +% @listoffloats FLOATTYPE - print a list of floats like a table of contents. +% +\parseargdef\listoffloats{% + \def\floattype{#1}% floattype + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + % + % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. + \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax + \ifhavexrefs + % if the user said @listoffloats foo but never @float foo. + \message{\linenumber No `\safefloattype' floats to list.}% + \fi + \else + \begingroup + \leftskip=\tocindent % indent these entries like a toc + \let\do=\listoffloatsdo + \csname floatlist\safefloattype\endcsname + \endgroup + \fi +} + +% This is called on each entry in a list of floats. We're passed the +% xref label, in the form LABEL-title, which is how we save it in the +% aux file. We strip off the -title and look up \XRLABEL-lof, which +% has the text we're supposed to typeset here. +% +% Figures without xref labels will not be included in the list (since +% they won't appear in the aux file). +% +\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} +\def\listoffloatsdoentry#1-title\finish{{% + % Can't fully expand XR#1-lof because it can contain anything. Just + % pass the control sequence. On the other hand, XR#1-pg is just the + % page number, and we want to fully expand that so we can get a link + % in pdf output. + \toksA = \expandafter{\csname XR#1-lof\endcsname}% + % + % use the same \entry macro we use to generate the TOC and index. + \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% + \writeentry +}} + + +\message{localization,} + +% For single-language documents, @documentlanguage is usually given very +% early, just after @documentencoding. Single argument is the language +% (de) or locale (de_DE) abbreviation. +% +{ + \catcode`\_ = \active + \globaldefs=1 +\parseargdef\documentlanguage{\begingroup + \let_=\normalunderscore % normal _ character for filenames + \tex % read txi-??.tex file in plain TeX. + % Read the file by the name they passed if it exists. + \openin 1 txi-#1.tex + \ifeof 1 + \documentlanguagetrywithoutunderscore{#1_\finish}% + \else + \globaldefs = 1 % everything in the txi-LL files needs to persist + \input txi-#1.tex + \fi + \closein 1 + \endgroup % end raw TeX +\endgroup} +} +% +% If they passed de_DE, and txi-de_DE.tex doesn't exist, +% try txi-de.tex. +% +\def\documentlanguagetrywithoutunderscore#1_#2\finish{% + \openin 1 txi-#1.tex + \ifeof 1 + \errhelp = \nolanghelp + \errmessage{Cannot read language file txi-#1.tex}% + \else + \input txi-#1.tex + \fi + \closein 1 +} +% +\newhelp\nolanghelp{The given language definition file cannot be found or +is empty. Maybe you need to install it? Putting it in the current +directory should work if nowhere else does.} + +% This macro is called from txi-??.tex files; the first argument is the +% \language name to set (without the "\lang@" prefix), the second and +% third args are \{left,right}hyphenmin. +% +% The language names to pass are determined when the format is built. +% See the etex.log file created at that time, e.g., +% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. +% +% With TeX Live 2008, etex now includes hyphenation patterns for all +% available languages. This means we can support hyphenation in +% Texinfo, at least to some extent. (This still doesn't solve the +% accented characters problem.) +% +\catcode`@=11 +\def\txisetlanguage#1#2#3{% + % do not set the language if the name is undefined in the current TeX. + \expandafter\ifx\csname lang@#1\endcsname \relax + \message{no patterns for #1}% + \else + \global\language = \csname lang@#1\endcsname + \fi + % but there is no harm in adjusting the hyphenmin values regardless. + \global\lefthyphenmin = #2\relax + \global\righthyphenmin = #3\relax +} + +% Helpers for encodings. +% Set the catcode of characters 128 through 255 to the specified number. +% +\def\setnonasciicharscatcode#1{% + \count255=128 + \loop\ifnum\count255<256 + \global\catcode\count255=#1\relax + \advance\count255 by 1 + \repeat +} + +\def\setnonasciicharscatcodenonglobal#1{% + \count255=128 + \loop\ifnum\count255<256 + \catcode\count255=#1\relax + \advance\count255 by 1 + \repeat +} + +% @documentencoding sets the definition of non-ASCII characters +% according to the specified encoding. +% +\parseargdef\documentencoding{% + % Encoding being declared for the document. + \def\declaredencoding{\csname #1.enc\endcsname}% + % + % Supported encodings: names converted to tokens in order to be able + % to compare them with \ifx. + \def\ascii{\csname US-ASCII.enc\endcsname}% + \def\latnine{\csname ISO-8859-15.enc\endcsname}% + \def\latone{\csname ISO-8859-1.enc\endcsname}% + \def\lattwo{\csname ISO-8859-2.enc\endcsname}% + \def\utfeight{\csname UTF-8.enc\endcsname}% + % + \ifx \declaredencoding \ascii + \asciichardefs + % + \else \ifx \declaredencoding \lattwo + \setnonasciicharscatcode\active + \lattwochardefs + % + \else \ifx \declaredencoding \latone + \setnonasciicharscatcode\active + \latonechardefs + % + \else \ifx \declaredencoding \latnine + \setnonasciicharscatcode\active + \latninechardefs + % + \else \ifx \declaredencoding \utfeight + \setnonasciicharscatcode\active + \utfeightchardefs + % + \else + \message{Unknown document encoding #1, ignoring.}% + % + \fi % utfeight + \fi % latnine + \fi % latone + \fi % lattwo + \fi % ascii +} + +% A message to be logged when using a character that isn't available +% the default font encoding (OT1). +% +\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} + +% Take account of \c (plain) vs. \, (Texinfo) difference. +\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} + +% First, make active non-ASCII characters in order for them to be +% correctly categorized when TeX reads the replacement text of +% macros containing the character definitions. +\setnonasciicharscatcode\active +% +% Latin1 (ISO-8859-1) character definitions. +\def\latonechardefs{% + \gdef^^a0{~} + \gdef^^a1{\exclamdown} + \gdef^^a2{\missingcharmsg{CENT SIGN}} + \gdef^^a3{{\pounds}} + \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} + \gdef^^a5{\missingcharmsg{YEN SIGN}} + \gdef^^a6{\missingcharmsg{BROKEN BAR}} + \gdef^^a7{\S} + \gdef^^a8{\"{}} + \gdef^^a9{\copyright} + \gdef^^aa{\ordf} + \gdef^^ab{\guillemetleft} + \gdef^^ac{$\lnot$} + \gdef^^ad{\-} + \gdef^^ae{\registeredsymbol} + \gdef^^af{\={}} + % + \gdef^^b0{\textdegree} + \gdef^^b1{$\pm$} + \gdef^^b2{$^2$} + \gdef^^b3{$^3$} + \gdef^^b4{\'{}} + \gdef^^b5{$\mu$} + \gdef^^b6{\P} + % + \gdef^^b7{$^.$} + \gdef^^b8{\cedilla\ } + \gdef^^b9{$^1$} + \gdef^^ba{\ordm} + % + \gdef^^bb{\guilletright} + \gdef^^bc{$1\over4$} + \gdef^^bd{$1\over2$} + \gdef^^be{$3\over4$} + \gdef^^bf{\questiondown} + % + \gdef^^c0{\`A} + \gdef^^c1{\'A} + \gdef^^c2{\^A} + \gdef^^c3{\~A} + \gdef^^c4{\"A} + \gdef^^c5{\ringaccent A} + \gdef^^c6{\AE} + \gdef^^c7{\cedilla C} + \gdef^^c8{\`E} + \gdef^^c9{\'E} + \gdef^^ca{\^E} + \gdef^^cb{\"E} + \gdef^^cc{\`I} + \gdef^^cd{\'I} + \gdef^^ce{\^I} + \gdef^^cf{\"I} + % + \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER ETH}} + \gdef^^d1{\~N} + \gdef^^d2{\`O} + \gdef^^d3{\'O} + \gdef^^d4{\^O} + \gdef^^d5{\~O} + \gdef^^d6{\"O} + \gdef^^d7{$\times$} + \gdef^^d8{\O} + \gdef^^d9{\`U} + \gdef^^da{\'U} + \gdef^^db{\^U} + \gdef^^dc{\"U} + \gdef^^dd{\'Y} + \gdef^^de{\missingcharmsg{LATIN CAPITAL LETTER THORN}} + \gdef^^df{\ss} + % + \gdef^^e0{\`a} + \gdef^^e1{\'a} + \gdef^^e2{\^a} + \gdef^^e3{\~a} + \gdef^^e4{\"a} + \gdef^^e5{\ringaccent a} + \gdef^^e6{\ae} + \gdef^^e7{\cedilla c} + \gdef^^e8{\`e} + \gdef^^e9{\'e} + \gdef^^ea{\^e} + \gdef^^eb{\"e} + \gdef^^ec{\`{\dotless i}} + \gdef^^ed{\'{\dotless i}} + \gdef^^ee{\^{\dotless i}} + \gdef^^ef{\"{\dotless i}} + % + \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER ETH}} + \gdef^^f1{\~n} + \gdef^^f2{\`o} + \gdef^^f3{\'o} + \gdef^^f4{\^o} + \gdef^^f5{\~o} + \gdef^^f6{\"o} + \gdef^^f7{$\div$} + \gdef^^f8{\o} + \gdef^^f9{\`u} + \gdef^^fa{\'u} + \gdef^^fb{\^u} + \gdef^^fc{\"u} + \gdef^^fd{\'y} + \gdef^^fe{\missingcharmsg{LATIN SMALL LETTER THORN}} + \gdef^^ff{\"y} +} + +% Latin9 (ISO-8859-15) encoding character definitions. +\def\latninechardefs{% + % Encoding is almost identical to Latin1. + \latonechardefs + % + \gdef^^a4{\euro} + \gdef^^a6{\v S} + \gdef^^a8{\v s} + \gdef^^b4{\v Z} + \gdef^^b8{\v z} + \gdef^^bc{\OE} + \gdef^^bd{\oe} + \gdef^^be{\"Y} +} + +% Latin2 (ISO-8859-2) character definitions. +\def\lattwochardefs{% + \gdef^^a0{~} + \gdef^^a1{\ogonek{A}} + \gdef^^a2{\u{}} + \gdef^^a3{\L} + \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} + \gdef^^a5{\v L} + \gdef^^a6{\'S} + \gdef^^a7{\S} + \gdef^^a8{\"{}} + \gdef^^a9{\v S} + \gdef^^aa{\cedilla S} + \gdef^^ab{\v T} + \gdef^^ac{\'Z} + \gdef^^ad{\-} + \gdef^^ae{\v Z} + \gdef^^af{\dotaccent Z} + % + \gdef^^b0{\textdegree} + \gdef^^b1{\ogonek{a}} + \gdef^^b2{\ogonek{ }} + \gdef^^b3{\l} + \gdef^^b4{\'{}} + \gdef^^b5{\v l} + \gdef^^b6{\'s} + \gdef^^b7{\v{}} + \gdef^^b8{\cedilla\ } + \gdef^^b9{\v s} + \gdef^^ba{\cedilla s} + \gdef^^bb{\v t} + \gdef^^bc{\'z} + \gdef^^bd{\H{}} + \gdef^^be{\v z} + \gdef^^bf{\dotaccent z} + % + \gdef^^c0{\'R} + \gdef^^c1{\'A} + \gdef^^c2{\^A} + \gdef^^c3{\u A} + \gdef^^c4{\"A} + \gdef^^c5{\'L} + \gdef^^c6{\'C} + \gdef^^c7{\cedilla C} + \gdef^^c8{\v C} + \gdef^^c9{\'E} + \gdef^^ca{\ogonek{E}} + \gdef^^cb{\"E} + \gdef^^cc{\v E} + \gdef^^cd{\'I} + \gdef^^ce{\^I} + \gdef^^cf{\v D} + % + \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER D WITH STROKE}} + \gdef^^d1{\'N} + \gdef^^d2{\v N} + \gdef^^d3{\'O} + \gdef^^d4{\^O} + \gdef^^d5{\H O} + \gdef^^d6{\"O} + \gdef^^d7{$\times$} + \gdef^^d8{\v R} + \gdef^^d9{\ringaccent U} + \gdef^^da{\'U} + \gdef^^db{\H U} + \gdef^^dc{\"U} + \gdef^^dd{\'Y} + \gdef^^de{\cedilla T} + \gdef^^df{\ss} + % + \gdef^^e0{\'r} + \gdef^^e1{\'a} + \gdef^^e2{\^a} + \gdef^^e3{\u a} + \gdef^^e4{\"a} + \gdef^^e5{\'l} + \gdef^^e6{\'c} + \gdef^^e7{\cedilla c} + \gdef^^e8{\v c} + \gdef^^e9{\'e} + \gdef^^ea{\ogonek{e}} + \gdef^^eb{\"e} + \gdef^^ec{\v e} + \gdef^^ed{\'\i} + \gdef^^ee{\^\i} + \gdef^^ef{\v d} + % + \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER D WITH STROKE}} + \gdef^^f1{\'n} + \gdef^^f2{\v n} + \gdef^^f3{\'o} + \gdef^^f4{\^o} + \gdef^^f5{\H o} + \gdef^^f6{\"o} + \gdef^^f7{$\div$} + \gdef^^f8{\v r} + \gdef^^f9{\ringaccent u} + \gdef^^fa{\'u} + \gdef^^fb{\H u} + \gdef^^fc{\"u} + \gdef^^fd{\'y} + \gdef^^fe{\cedilla t} + \gdef^^ff{\dotaccent{}} +} + +% UTF-8 character definitions. +% +% This code to support UTF-8 is based on LaTeX's utf8.def, with some +% changes for Texinfo conventions. It is included here under the GPL by +% permission from Frank Mittelbach and the LaTeX team. +% +\newcount\countUTFx +\newcount\countUTFy +\newcount\countUTFz + +\gdef\UTFviiiTwoOctets#1#2{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\endcsname} +% +\gdef\UTFviiiThreeOctets#1#2#3{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} +% +\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} + +\gdef\UTFviiiDefined#1{% + \ifx #1\relax + \message{\linenumber Unicode char \string #1 not defined for Texinfo}% + \else + \expandafter #1% + \fi +} + +\begingroup + \catcode`\~13 + \catcode`\"12 + + \def\UTFviiiLoop{% + \global\catcode\countUTFx\active + \uccode`\~\countUTFx + \uppercase\expandafter{\UTFviiiTmp}% + \advance\countUTFx by 1 + \ifnum\countUTFx < \countUTFy + \expandafter\UTFviiiLoop + \fi} + + \countUTFx = "C2 + \countUTFy = "E0 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiTwoOctets\string~}} + \UTFviiiLoop + + \countUTFx = "E0 + \countUTFy = "F0 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiThreeOctets\string~}} + \UTFviiiLoop + + \countUTFx = "F0 + \countUTFy = "F4 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiFourOctets\string~}} + \UTFviiiLoop +\endgroup + +\begingroup + \catcode`\"=12 + \catcode`\<=12 + \catcode`\.=12 + \catcode`\,=12 + \catcode`\;=12 + \catcode`\!=12 + \catcode`\~=13 + + \gdef\DeclareUnicodeCharacter#1#2{% + \countUTFz = "#1\relax + \wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% + \begingroup + \parseXMLCharref + \def\UTFviiiTwoOctets##1##2{% + \csname u8:##1\string ##2\endcsname}% + \def\UTFviiiThreeOctets##1##2##3{% + \csname u8:##1\string ##2\string ##3\endcsname}% + \def\UTFviiiFourOctets##1##2##3##4{% + \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter + \gdef\UTFviiiTmp{#2}% + \endgroup} + + \gdef\parseXMLCharref{% + \ifnum\countUTFz < "A0\relax + \errhelp = \EMsimple + \errmessage{Cannot define Unicode char value < 00A0}% + \else\ifnum\countUTFz < "800\relax + \parseUTFviiiA,% + \parseUTFviiiB C\UTFviiiTwoOctets.,% + \else\ifnum\countUTFz < "10000\relax + \parseUTFviiiA;% + \parseUTFviiiA,% + \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% + \else + \parseUTFviiiA;% + \parseUTFviiiA,% + \parseUTFviiiA!% + \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% + \fi\fi\fi + } + + \gdef\parseUTFviiiA#1{% + \countUTFx = \countUTFz + \divide\countUTFz by 64 + \countUTFy = \countUTFz + \multiply\countUTFz by 64 + \advance\countUTFx by -\countUTFz + \advance\countUTFx by 128 + \uccode `#1\countUTFx + \countUTFz = \countUTFy} + + \gdef\parseUTFviiiB#1#2#3#4{% + \advance\countUTFz by "#10\relax + \uccode `#3\countUTFz + \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} +\endgroup + +\def\utfeightchardefs{% + \DeclareUnicodeCharacter{00A0}{\tie} + \DeclareUnicodeCharacter{00A1}{\exclamdown} + \DeclareUnicodeCharacter{00A3}{\pounds} + \DeclareUnicodeCharacter{00A8}{\"{ }} + \DeclareUnicodeCharacter{00A9}{\copyright} + \DeclareUnicodeCharacter{00AA}{\ordf} + \DeclareUnicodeCharacter{00AB}{\guillemetleft} + \DeclareUnicodeCharacter{00AD}{\-} + \DeclareUnicodeCharacter{00AE}{\registeredsymbol} + \DeclareUnicodeCharacter{00AF}{\={ }} + + \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} + \DeclareUnicodeCharacter{00B4}{\'{ }} + \DeclareUnicodeCharacter{00B8}{\cedilla{ }} + \DeclareUnicodeCharacter{00BA}{\ordm} + \DeclareUnicodeCharacter{00BB}{\guillemetright} + \DeclareUnicodeCharacter{00BF}{\questiondown} + + \DeclareUnicodeCharacter{00C0}{\`A} + \DeclareUnicodeCharacter{00C1}{\'A} + \DeclareUnicodeCharacter{00C2}{\^A} + \DeclareUnicodeCharacter{00C3}{\~A} + \DeclareUnicodeCharacter{00C4}{\"A} + \DeclareUnicodeCharacter{00C5}{\AA} + \DeclareUnicodeCharacter{00C6}{\AE} + \DeclareUnicodeCharacter{00C7}{\cedilla{C}} + \DeclareUnicodeCharacter{00C8}{\`E} + \DeclareUnicodeCharacter{00C9}{\'E} + \DeclareUnicodeCharacter{00CA}{\^E} + \DeclareUnicodeCharacter{00CB}{\"E} + \DeclareUnicodeCharacter{00CC}{\`I} + \DeclareUnicodeCharacter{00CD}{\'I} + \DeclareUnicodeCharacter{00CE}{\^I} + \DeclareUnicodeCharacter{00CF}{\"I} + + \DeclareUnicodeCharacter{00D1}{\~N} + \DeclareUnicodeCharacter{00D2}{\`O} + \DeclareUnicodeCharacter{00D3}{\'O} + \DeclareUnicodeCharacter{00D4}{\^O} + \DeclareUnicodeCharacter{00D5}{\~O} + \DeclareUnicodeCharacter{00D6}{\"O} + \DeclareUnicodeCharacter{00D8}{\O} + \DeclareUnicodeCharacter{00D9}{\`U} + \DeclareUnicodeCharacter{00DA}{\'U} + \DeclareUnicodeCharacter{00DB}{\^U} + \DeclareUnicodeCharacter{00DC}{\"U} + \DeclareUnicodeCharacter{00DD}{\'Y} + \DeclareUnicodeCharacter{00DF}{\ss} + + \DeclareUnicodeCharacter{00E0}{\`a} + \DeclareUnicodeCharacter{00E1}{\'a} + \DeclareUnicodeCharacter{00E2}{\^a} + \DeclareUnicodeCharacter{00E3}{\~a} + \DeclareUnicodeCharacter{00E4}{\"a} + \DeclareUnicodeCharacter{00E5}{\aa} + \DeclareUnicodeCharacter{00E6}{\ae} + \DeclareUnicodeCharacter{00E7}{\cedilla{c}} + \DeclareUnicodeCharacter{00E8}{\`e} + \DeclareUnicodeCharacter{00E9}{\'e} + \DeclareUnicodeCharacter{00EA}{\^e} + \DeclareUnicodeCharacter{00EB}{\"e} + \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} + \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} + \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} + \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} + + \DeclareUnicodeCharacter{00F1}{\~n} + \DeclareUnicodeCharacter{00F2}{\`o} + \DeclareUnicodeCharacter{00F3}{\'o} + \DeclareUnicodeCharacter{00F4}{\^o} + \DeclareUnicodeCharacter{00F5}{\~o} + \DeclareUnicodeCharacter{00F6}{\"o} + \DeclareUnicodeCharacter{00F8}{\o} + \DeclareUnicodeCharacter{00F9}{\`u} + \DeclareUnicodeCharacter{00FA}{\'u} + \DeclareUnicodeCharacter{00FB}{\^u} + \DeclareUnicodeCharacter{00FC}{\"u} + \DeclareUnicodeCharacter{00FD}{\'y} + \DeclareUnicodeCharacter{00FF}{\"y} + + \DeclareUnicodeCharacter{0100}{\=A} + \DeclareUnicodeCharacter{0101}{\=a} + \DeclareUnicodeCharacter{0102}{\u{A}} + \DeclareUnicodeCharacter{0103}{\u{a}} + \DeclareUnicodeCharacter{0104}{\ogonek{A}} + \DeclareUnicodeCharacter{0105}{\ogonek{a}} + \DeclareUnicodeCharacter{0106}{\'C} + \DeclareUnicodeCharacter{0107}{\'c} + \DeclareUnicodeCharacter{0108}{\^C} + \DeclareUnicodeCharacter{0109}{\^c} + \DeclareUnicodeCharacter{0118}{\ogonek{E}} + \DeclareUnicodeCharacter{0119}{\ogonek{e}} + \DeclareUnicodeCharacter{010A}{\dotaccent{C}} + \DeclareUnicodeCharacter{010B}{\dotaccent{c}} + \DeclareUnicodeCharacter{010C}{\v{C}} + \DeclareUnicodeCharacter{010D}{\v{c}} + \DeclareUnicodeCharacter{010E}{\v{D}} + + \DeclareUnicodeCharacter{0112}{\=E} + \DeclareUnicodeCharacter{0113}{\=e} + \DeclareUnicodeCharacter{0114}{\u{E}} + \DeclareUnicodeCharacter{0115}{\u{e}} + \DeclareUnicodeCharacter{0116}{\dotaccent{E}} + \DeclareUnicodeCharacter{0117}{\dotaccent{e}} + \DeclareUnicodeCharacter{011A}{\v{E}} + \DeclareUnicodeCharacter{011B}{\v{e}} + \DeclareUnicodeCharacter{011C}{\^G} + \DeclareUnicodeCharacter{011D}{\^g} + \DeclareUnicodeCharacter{011E}{\u{G}} + \DeclareUnicodeCharacter{011F}{\u{g}} + + \DeclareUnicodeCharacter{0120}{\dotaccent{G}} + \DeclareUnicodeCharacter{0121}{\dotaccent{g}} + \DeclareUnicodeCharacter{0124}{\^H} + \DeclareUnicodeCharacter{0125}{\^h} + \DeclareUnicodeCharacter{0128}{\~I} + \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} + \DeclareUnicodeCharacter{012A}{\=I} + \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} + \DeclareUnicodeCharacter{012C}{\u{I}} + \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} + + \DeclareUnicodeCharacter{0130}{\dotaccent{I}} + \DeclareUnicodeCharacter{0131}{\dotless{i}} + \DeclareUnicodeCharacter{0132}{IJ} + \DeclareUnicodeCharacter{0133}{ij} + \DeclareUnicodeCharacter{0134}{\^J} + \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} + \DeclareUnicodeCharacter{0139}{\'L} + \DeclareUnicodeCharacter{013A}{\'l} + + \DeclareUnicodeCharacter{0141}{\L} + \DeclareUnicodeCharacter{0142}{\l} + \DeclareUnicodeCharacter{0143}{\'N} + \DeclareUnicodeCharacter{0144}{\'n} + \DeclareUnicodeCharacter{0147}{\v{N}} + \DeclareUnicodeCharacter{0148}{\v{n}} + \DeclareUnicodeCharacter{014C}{\=O} + \DeclareUnicodeCharacter{014D}{\=o} + \DeclareUnicodeCharacter{014E}{\u{O}} + \DeclareUnicodeCharacter{014F}{\u{o}} + + \DeclareUnicodeCharacter{0150}{\H{O}} + \DeclareUnicodeCharacter{0151}{\H{o}} + \DeclareUnicodeCharacter{0152}{\OE} + \DeclareUnicodeCharacter{0153}{\oe} + \DeclareUnicodeCharacter{0154}{\'R} + \DeclareUnicodeCharacter{0155}{\'r} + \DeclareUnicodeCharacter{0158}{\v{R}} + \DeclareUnicodeCharacter{0159}{\v{r}} + \DeclareUnicodeCharacter{015A}{\'S} + \DeclareUnicodeCharacter{015B}{\'s} + \DeclareUnicodeCharacter{015C}{\^S} + \DeclareUnicodeCharacter{015D}{\^s} + \DeclareUnicodeCharacter{015E}{\cedilla{S}} + \DeclareUnicodeCharacter{015F}{\cedilla{s}} + + \DeclareUnicodeCharacter{0160}{\v{S}} + \DeclareUnicodeCharacter{0161}{\v{s}} + \DeclareUnicodeCharacter{0162}{\cedilla{t}} + \DeclareUnicodeCharacter{0163}{\cedilla{T}} + \DeclareUnicodeCharacter{0164}{\v{T}} + + \DeclareUnicodeCharacter{0168}{\~U} + \DeclareUnicodeCharacter{0169}{\~u} + \DeclareUnicodeCharacter{016A}{\=U} + \DeclareUnicodeCharacter{016B}{\=u} + \DeclareUnicodeCharacter{016C}{\u{U}} + \DeclareUnicodeCharacter{016D}{\u{u}} + \DeclareUnicodeCharacter{016E}{\ringaccent{U}} + \DeclareUnicodeCharacter{016F}{\ringaccent{u}} + + \DeclareUnicodeCharacter{0170}{\H{U}} + \DeclareUnicodeCharacter{0171}{\H{u}} + \DeclareUnicodeCharacter{0174}{\^W} + \DeclareUnicodeCharacter{0175}{\^w} + \DeclareUnicodeCharacter{0176}{\^Y} + \DeclareUnicodeCharacter{0177}{\^y} + \DeclareUnicodeCharacter{0178}{\"Y} + \DeclareUnicodeCharacter{0179}{\'Z} + \DeclareUnicodeCharacter{017A}{\'z} + \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} + \DeclareUnicodeCharacter{017C}{\dotaccent{z}} + \DeclareUnicodeCharacter{017D}{\v{Z}} + \DeclareUnicodeCharacter{017E}{\v{z}} + + \DeclareUnicodeCharacter{01C4}{D\v{Z}} + \DeclareUnicodeCharacter{01C5}{D\v{z}} + \DeclareUnicodeCharacter{01C6}{d\v{z}} + \DeclareUnicodeCharacter{01C7}{LJ} + \DeclareUnicodeCharacter{01C8}{Lj} + \DeclareUnicodeCharacter{01C9}{lj} + \DeclareUnicodeCharacter{01CA}{NJ} + \DeclareUnicodeCharacter{01CB}{Nj} + \DeclareUnicodeCharacter{01CC}{nj} + \DeclareUnicodeCharacter{01CD}{\v{A}} + \DeclareUnicodeCharacter{01CE}{\v{a}} + \DeclareUnicodeCharacter{01CF}{\v{I}} + + \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} + \DeclareUnicodeCharacter{01D1}{\v{O}} + \DeclareUnicodeCharacter{01D2}{\v{o}} + \DeclareUnicodeCharacter{01D3}{\v{U}} + \DeclareUnicodeCharacter{01D4}{\v{u}} + + \DeclareUnicodeCharacter{01E2}{\={\AE}} + \DeclareUnicodeCharacter{01E3}{\={\ae}} + \DeclareUnicodeCharacter{01E6}{\v{G}} + \DeclareUnicodeCharacter{01E7}{\v{g}} + \DeclareUnicodeCharacter{01E8}{\v{K}} + \DeclareUnicodeCharacter{01E9}{\v{k}} + + \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} + \DeclareUnicodeCharacter{01F1}{DZ} + \DeclareUnicodeCharacter{01F2}{Dz} + \DeclareUnicodeCharacter{01F3}{dz} + \DeclareUnicodeCharacter{01F4}{\'G} + \DeclareUnicodeCharacter{01F5}{\'g} + \DeclareUnicodeCharacter{01F8}{\`N} + \DeclareUnicodeCharacter{01F9}{\`n} + \DeclareUnicodeCharacter{01FC}{\'{\AE}} + \DeclareUnicodeCharacter{01FD}{\'{\ae}} + \DeclareUnicodeCharacter{01FE}{\'{\O}} + \DeclareUnicodeCharacter{01FF}{\'{\o}} + + \DeclareUnicodeCharacter{021E}{\v{H}} + \DeclareUnicodeCharacter{021F}{\v{h}} + + \DeclareUnicodeCharacter{0226}{\dotaccent{A}} + \DeclareUnicodeCharacter{0227}{\dotaccent{a}} + \DeclareUnicodeCharacter{0228}{\cedilla{E}} + \DeclareUnicodeCharacter{0229}{\cedilla{e}} + \DeclareUnicodeCharacter{022E}{\dotaccent{O}} + \DeclareUnicodeCharacter{022F}{\dotaccent{o}} + + \DeclareUnicodeCharacter{0232}{\=Y} + \DeclareUnicodeCharacter{0233}{\=y} + \DeclareUnicodeCharacter{0237}{\dotless{j}} + + \DeclareUnicodeCharacter{02DB}{\ogonek{ }} + + \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} + \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} + \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} + \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} + \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} + \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} + \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} + \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} + \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} + \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} + \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} + \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} + + \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} + \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} + + \DeclareUnicodeCharacter{1E20}{\=G} + \DeclareUnicodeCharacter{1E21}{\=g} + \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} + \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} + \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} + \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} + \DeclareUnicodeCharacter{1E26}{\"H} + \DeclareUnicodeCharacter{1E27}{\"h} + + \DeclareUnicodeCharacter{1E30}{\'K} + \DeclareUnicodeCharacter{1E31}{\'k} + \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} + \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} + \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} + \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} + \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} + \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} + \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} + \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} + \DeclareUnicodeCharacter{1E3E}{\'M} + \DeclareUnicodeCharacter{1E3F}{\'m} + + \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} + \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} + \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} + \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} + \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} + \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} + \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} + \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} + \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} + \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} + + \DeclareUnicodeCharacter{1E54}{\'P} + \DeclareUnicodeCharacter{1E55}{\'p} + \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} + \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} + \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} + \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} + \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} + \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} + \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} + \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} + + \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} + \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} + \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} + \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} + \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} + \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} + \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} + \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} + \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} + \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} + + \DeclareUnicodeCharacter{1E7C}{\~V} + \DeclareUnicodeCharacter{1E7D}{\~v} + \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} + \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} + + \DeclareUnicodeCharacter{1E80}{\`W} + \DeclareUnicodeCharacter{1E81}{\`w} + \DeclareUnicodeCharacter{1E82}{\'W} + \DeclareUnicodeCharacter{1E83}{\'w} + \DeclareUnicodeCharacter{1E84}{\"W} + \DeclareUnicodeCharacter{1E85}{\"w} + \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} + \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} + \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} + \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} + \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} + \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} + \DeclareUnicodeCharacter{1E8C}{\"X} + \DeclareUnicodeCharacter{1E8D}{\"x} + \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} + \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} + + \DeclareUnicodeCharacter{1E90}{\^Z} + \DeclareUnicodeCharacter{1E91}{\^z} + \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} + \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} + \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} + \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} + \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} + \DeclareUnicodeCharacter{1E97}{\"t} + \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} + \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} + + \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} + \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} + + \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} + \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} + \DeclareUnicodeCharacter{1EBC}{\~E} + \DeclareUnicodeCharacter{1EBD}{\~e} + + \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} + \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} + \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} + \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} + + \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} + \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} + + \DeclareUnicodeCharacter{1EF2}{\`Y} + \DeclareUnicodeCharacter{1EF3}{\`y} + \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} + + \DeclareUnicodeCharacter{1EF8}{\~Y} + \DeclareUnicodeCharacter{1EF9}{\~y} + + \DeclareUnicodeCharacter{2013}{--} + \DeclareUnicodeCharacter{2014}{---} + \DeclareUnicodeCharacter{2018}{\quoteleft} + \DeclareUnicodeCharacter{2019}{\quoteright} + \DeclareUnicodeCharacter{201A}{\quotesinglbase} + \DeclareUnicodeCharacter{201C}{\quotedblleft} + \DeclareUnicodeCharacter{201D}{\quotedblright} + \DeclareUnicodeCharacter{201E}{\quotedblbase} + \DeclareUnicodeCharacter{2022}{\bullet} + \DeclareUnicodeCharacter{2026}{\dots} + \DeclareUnicodeCharacter{2039}{\guilsinglleft} + \DeclareUnicodeCharacter{203A}{\guilsinglright} + \DeclareUnicodeCharacter{20AC}{\euro} + + \DeclareUnicodeCharacter{2192}{\expansion} + \DeclareUnicodeCharacter{21D2}{\result} + + \DeclareUnicodeCharacter{2212}{\minus} + \DeclareUnicodeCharacter{2217}{\point} + \DeclareUnicodeCharacter{2261}{\equiv} +}% end of \utfeightchardefs + + +% US-ASCII character definitions. +\def\asciichardefs{% nothing need be done + \relax +} + +% Make non-ASCII characters printable again for compatibility with +% existing Texinfo documents that may use them, even without declaring a +% document encoding. +% +\setnonasciicharscatcode \other + + +\message{formatting,} + +\newdimen\defaultparindent \defaultparindent = 15pt + +\chapheadingskip = 15pt plus 4pt minus 2pt +\secheadingskip = 12pt plus 3pt minus 2pt +\subsecheadingskip = 9pt plus 2pt minus 2pt + +% Prevent underfull vbox error messages. +\vbadness = 10000 + +% Don't be so finicky about underfull hboxes, either. +\hbadness = 2000 + +% Following George Bush, get rid of widows and orphans. +\widowpenalty=10000 +\clubpenalty=10000 + +% Use TeX 3.0's \emergencystretch to help line breaking, but if we're +% using an old version of TeX, don't do anything. We want the amount of +% stretch added to depend on the line length, hence the dependence on +% \hsize. We call this whenever the paper size is set. +% +\def\setemergencystretch{% + \ifx\emergencystretch\thisisundefined + % Allow us to assign to \emergencystretch anyway. + \def\emergencystretch{\dimen0}% + \else + \emergencystretch = .15\hsize + \fi +} + +% Parameters in order: 1) textheight; 2) textwidth; +% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; +% 7) physical page height; 8) physical page width. +% +% We also call \setleading{\textleading}, so the caller should define +% \textleading. The caller should also set \parskip. +% +\def\internalpagesizes#1#2#3#4#5#6#7#8{% + \voffset = #3\relax + \topskip = #6\relax + \splittopskip = \topskip + % + \vsize = #1\relax + \advance\vsize by \topskip + \outervsize = \vsize + \advance\outervsize by 2\topandbottommargin + \pageheight = \vsize + % + \hsize = #2\relax + \outerhsize = \hsize + \advance\outerhsize by 0.5in + \pagewidth = \hsize + % + \normaloffset = #4\relax + \bindingoffset = #5\relax + % + \ifpdf + \pdfpageheight #7\relax + \pdfpagewidth #8\relax + % if we don't reset these, they will remain at "1 true in" of + % whatever layout pdftex was dumped with. + \pdfhorigin = 1 true in + \pdfvorigin = 1 true in + \fi + % + \setleading{\textleading} + % + \parindent = \defaultparindent + \setemergencystretch +} + +% @letterpaper (the default). +\def\letterpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % If page is nothing but text, make it come out even. + \internalpagesizes{607.2pt}{6in}% that's 46 lines + {\voffset}{.25in}% + {\bindingoffset}{36pt}% + {11in}{8.5in}% +}} + +% Use @smallbook to reset parameters for 7x9.25 trim size. +\def\smallbook{{\globaldefs = 1 + \parskip = 2pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.5in}{5in}% + {-.2in}{0in}% + {\bindingoffset}{16pt}% + {9.25in}{7in}% + % + \lispnarrowing = 0.3in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = .5cm +}} + +% Use @smallerbook to reset parameters for 6x9 trim size. +% (Just testing, parameters still in flux.) +\def\smallerbook{{\globaldefs = 1 + \parskip = 1.5pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.4in}{4.8in}% + {-.2in}{-.4in}% + {0pt}{14pt}% + {9in}{6in}% + % + \lispnarrowing = 0.25in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = .4cm +}} + +% Use @afourpaper to print on European A4 paper. +\def\afourpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % Double-side printing via postscript on Laserjet 4050 + % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. + % To change the settings for a different printer or situation, adjust + % \normaloffset until the front-side and back-side texts align. Then + % do the same for \bindingoffset. You can set these for testing in + % your texinfo source file like this: + % @tex + % \global\normaloffset = -6mm + % \global\bindingoffset = 10mm + % @end tex + \internalpagesizes{673.2pt}{160mm}% that's 51 lines + {\voffset}{\hoffset}% + {\bindingoffset}{44pt}% + {297mm}{210mm}% + % + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = 5mm +}} + +% Use @afivepaper to print on European A5 paper. +% From romildo@urano.iceb.ufop.br, 2 July 2000. +% He also recommends making @example and @lisp be small. +\def\afivepaper{{\globaldefs = 1 + \parskip = 2pt plus 1pt minus 0.1pt + \textleading = 12.5pt + % + \internalpagesizes{160mm}{120mm}% + {\voffset}{\hoffset}% + {\bindingoffset}{8pt}% + {210mm}{148mm}% + % + \lispnarrowing = 0.2in + \tolerance = 800 + \hfuzz = 1.2pt + \contentsrightmargin = 0pt + \defbodyindent = 2mm + \tableindent = 12mm +}} + +% A specific text layout, 24x15cm overall, intended for A4 paper. +\def\afourlatex{{\globaldefs = 1 + \afourpaper + \internalpagesizes{237mm}{150mm}% + {\voffset}{4.6mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + % + % Must explicitly reset to 0 because we call \afourpaper. + \globaldefs = 0 +}} + +% Use @afourwide to print on A4 paper in landscape format. +\def\afourwide{{\globaldefs = 1 + \afourpaper + \internalpagesizes{241mm}{165mm}% + {\voffset}{-2.95mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + \globaldefs = 0 +}} + +% @pagesizes TEXTHEIGHT[,TEXTWIDTH] +% Perhaps we should allow setting the margins, \topskip, \parskip, +% and/or leading, also. Or perhaps we should compute them somehow. +% +\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} +\def\pagesizesyyy#1,#2,#3\finish{{% + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi + \globaldefs = 1 + % + \parskip = 3pt plus 2pt minus 1pt + \setleading{\textleading}% + % + \dimen0 = #1\relax + \advance\dimen0 by \voffset + % + \dimen2 = \hsize + \advance\dimen2 by \normaloffset + % + \internalpagesizes{#1}{\hsize}% + {\voffset}{\normaloffset}% + {\bindingoffset}{44pt}% + {\dimen0}{\dimen2}% +}} + +% Set default to letter. +% +\letterpaper + + +\message{and turning on texinfo input format.} + +% Define macros to output various characters with catcode for normal text. +\catcode`\"=\other +\catcode`\~=\other +\catcode`\^=\other +\catcode`\_=\other +\catcode`\|=\other +\catcode`\<=\other +\catcode`\>=\other +\catcode`\+=\other +\catcode`\$=\other +\def\normaldoublequote{"} +\def\normaltilde{~} +\def\normalcaret{^} +\def\normalunderscore{_} +\def\normalverticalbar{|} +\def\normalless{<} +\def\normalgreater{>} +\def\normalplus{+} +\def\normaldollar{$}%$ font-lock fix + +% This macro is used to make a character print one way in \tt +% (where it can probably be output as-is), and another way in other fonts, +% where something hairier probably needs to be done. +% +% #1 is what to print if we are indeed using \tt; #2 is what to print +% otherwise. Since all the Computer Modern typewriter fonts have zero +% interword stretch (and shrink), and it is reasonable to expect all +% typewriter fonts to have this, we can check that font parameter. +% +\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} + +% Same as above, but check for italic font. Actually this also catches +% non-italic slanted fonts since it is impossible to distinguish them from +% italic fonts. But since this is only used by $ and it uses \sl anyway +% this is not a problem. +\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} + +% Turn off all special characters except @ +% (and those which the user can use as if they were ordinary). +% Most of these we simply print from the \tt font, but for some, we can +% use math or other variants that look better in normal text. + +\catcode`\"=\active +\def\activedoublequote{{\tt\char34}} +\let"=\activedoublequote +\catcode`\~=\active +\def~{{\tt\char126}} +\chardef\hat=`\^ +\catcode`\^=\active +\def^{{\tt \hat}} + +\catcode`\_=\active +\def_{\ifusingtt\normalunderscore\_} +\let\realunder=_ +% Subroutine for the previous macro. +\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } + +\catcode`\|=\active +\def|{{\tt\char124}} +\chardef \less=`\< +\catcode`\<=\active +\def<{{\tt \less}} +\chardef \gtr=`\> +\catcode`\>=\active +\def>{{\tt \gtr}} +\catcode`\+=\active +\def+{{\tt \char 43}} +\catcode`\$=\active +\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix + +% If a .fmt file is being used, characters that might appear in a file +% name cannot be active until we have parsed the command line. +% So turn them off again, and have \everyjob (or @setfilename) turn them on. +% \otherifyactive is called near the end of this file. +\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} + +% Used sometimes to turn off (effectively) the active characters even after +% parsing them. +\def\turnoffactive{% + \normalturnoffactive + \otherbackslash +} + +\catcode`\@=0 + +% \backslashcurfont outputs one backslash character in current font, +% as in \char`\\. +\global\chardef\backslashcurfont=`\\ +\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work + +% \realbackslash is an actual character `\' with catcode other, and +% \doublebackslash is two of them (for the pdf outlines). +{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} + +% In texinfo, backslash is an active character; it prints the backslash +% in fixed width font. +\catcode`\\=\active +@def@normalbackslash{{@tt@backslashcurfont}} +% On startup, @fixbackslash assigns: +% @let \ = @normalbackslash + +% \rawbackslash defines an active \ to do \backslashcurfont. +% \otherbackslash defines an active \ to be a literal `\' character with +% catcode other. +@gdef@rawbackslash{@let\=@backslashcurfont} +@gdef@otherbackslash{@let\=@realbackslash} + +% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of +% the literal character `\'. +% +@def@normalturnoffactive{% + @let\=@normalbackslash + @let"=@normaldoublequote + @let~=@normaltilde + @let^=@normalcaret + @let_=@normalunderscore + @let|=@normalverticalbar + @let<=@normalless + @let>=@normalgreater + @let+=@normalplus + @let$=@normaldollar %$ font-lock fix + @markupsetuplqdefault + @markupsetuprqdefault + @unsepspaces +} + +% Make _ and + \other characters, temporarily. +% This is canceled by @fixbackslash. +@otherifyactive + +% If a .fmt file is being used, we don't want the `\input texinfo' to show up. +% That is what \eatinput is for; after that, the `\' should revert to printing +% a backslash. +% +@gdef@eatinput input texinfo{@fixbackslash} +@global@let\ = @eatinput + +% On the other hand, perhaps the file did not have a `\input texinfo'. Then +% the first `\' in the file would cause an error. This macro tries to fix +% that, assuming it is called before the first `\' could plausibly occur. +% Also turn back on active characters that might appear in the input +% file name, in case not using a pre-dumped format. +% +@gdef@fixbackslash{% + @ifx\@eatinput @let\ = @normalbackslash @fi + @catcode`+=@active + @catcode`@_=@active +} + +% Say @foo, not \foo, in error messages. +@escapechar = `@@ + +% These look ok in all fonts, so just make them not special. +@catcode`@& = @other +@catcode`@# = @other +@catcode`@% = @other + +@c Finally, make ` and ' active, so that txicodequoteundirected and +@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we +@c don't make ` and ' active, @code will not get them as active chars. +@c Do this last of all since we use ` in the previous @catcode assignments. +@catcode`@'=@active +@catcode`@`=@active +@markupsetuplqdefault +@markupsetuprqdefault + +@c Local variables: +@c eval: (add-hook 'write-file-hooks 'time-stamp) +@c page-delimiter: "^\\\\message" +@c time-stamp-start: "def\\\\texinfoversion{" +@c time-stamp-format: "%:y-%02m-%02d.%02H" +@c time-stamp-end: "}" +@c End: + +@c vim:sw=2: + +@ignore + arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 +@end ignore diff --git a/devspec.en_US/project/recutils/doc/version-rec-mode.texi b/devspec.en_US/project/recutils/doc/version-rec-mode.texi new file mode 100755 index 0000000..6595f87 --- /dev/null +++ b/devspec.en_US/project/recutils/doc/version-rec-mode.texi @@ -0,0 +1,4 @@ +@set UPDATED 3 January 2019 +@set UPDATED-MONTH January 2019 +@set EDITION 1.8 +@set VERSION 1.8 diff --git a/devspec.en_US/project/recutils/doc/version.texi b/devspec.en_US/project/recutils/doc/version.texi new file mode 100755 index 0000000..6595f87 --- /dev/null +++ b/devspec.en_US/project/recutils/doc/version.texi @@ -0,0 +1,4 @@ +@set UPDATED 3 January 2019 +@set UPDATED-MONTH January 2019 +@set EDITION 1.8 +@set VERSION 1.8 diff --git a/devspec.en_US/project/recutils/etc/FSD.rec b/devspec.en_US/project/recutils/etc/FSD.rec new file mode 100755 index 0000000..f51314e --- /dev/null +++ b/devspec.en_US/project/recutils/etc/FSD.rec @@ -0,0 +1,37 @@ +# FSD.rec - Record descriptor for FSD entries +# +# This file contains the record descriptor for entries in the Free +# Software Directory. +# +# The canonical location of this file is +# http://www.jemarch.net/downloads/FSD.rec + +# Copyright (C) 2010 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +%rec: FSD_Entry +%mandatory: Title +%type: Title line +%type: GNU bool +%type: MaturityLevel enum ++ Undefined Planning PreAlpha Alpha Beta ++ Production Mature Orphaned +%type: License enum ++ GPLv2 GPLv2PLUS GPLv3 GPLv3PLUS ++ GFDLv21PLUS +%type: InterfaceStyle enum ++ CommandLine Console Daemon XWindow Web Email + +# End of FSD.rec diff --git a/devspec.en_US/project/recutils/etc/Makefile b/devspec.en_US/project/recutils/etc/Makefile new file mode 100755 index 0000000..9d92d67 --- /dev/null +++ b/devspec.en_US/project/recutils/etc/Makefile @@ -0,0 +1,1789 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# etc/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# Makefile.am for etc/ + +# Copyright (C) 2010-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/recutils +pkgincludedir = $(includedir)/recutils +pkglibdir = $(libdir)/recutils +pkglibexecdir = $(libexecdir)/recutils +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +subdir = etc +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(dist_etc_DATA) $(dist_lisp_DATA) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_$(V)) +am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(etcdir)" "$(DESTDIR)$(lispdir)" +DATA = $(dist_etc_DATA) $(dist_lisp_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing aclocal-1.15 +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = $${TAR-tar} +AM_DEFAULT_VERBOSITY = 1 +APPLE_UNIVERSAL_BUILD = 0 +AR = ar +ARFLAGS = cr +ASM_SYMBOL_PREFIX = "" +AUTOCONF = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoconf +AUTOHEADER = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoheader +AUTOMAKE = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing automake-1.15 +AWK = gawk +BASH_HEADERS = /usr/include/bash +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CA68 = +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CHECK_CFLAGS = +CHECK_LIBS = +CONFIG_INCLUDE = src/config.h +CPP = gcc -E +CPPFLAGS = +CURLLIBS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = false +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FGREP = /bin/grep -F +FLOAT_H = +FLOOR_LIBM = -lm +GETOPT_CDEFS_H = +GETOPT_H = +GETTEXT_MACRO_VERSION = 0.19 +GLIBC21 = yes +GLIB_CFLAGS = +GLIB_LIBS = +GMSGFMT = /usr/bin/msgfmt +GMSGFMT_015 = /usr/bin/msgfmt +GNULIB_ACOSF = 0 +GNULIB_ACOSL = 0 +GNULIB_ASINF = 0 +GNULIB_ASINL = 0 +GNULIB_ATAN2F = 0 +GNULIB_ATANF = 0 +GNULIB_ATANL = 0 +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CANONICALIZE_FILE_NAME = 1 +GNULIB_CBRT = 0 +GNULIB_CBRTF = 0 +GNULIB_CBRTL = 0 +GNULIB_CEIL = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHDIR = 1 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 1 +GNULIB_COPYSIGN = 0 +GNULIB_COPYSIGNF = 0 +GNULIB_COPYSIGNL = 0 +GNULIB_COSF = 0 +GNULIB_COSHF = 0 +GNULIB_COSL = 0 +GNULIB_CTIME = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP = 0 +GNULIB_DUP2 = 1 +GNULIB_DUP3 = 0 +GNULIB_DUPLOCALE = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 1 +GNULIB_EXP2 = 0 +GNULIB_EXP2F = 0 +GNULIB_EXP2L = 0 +GNULIB_EXPF = 0 +GNULIB_EXPL = 0 +GNULIB_EXPLICIT_BZERO = 0 +GNULIB_EXPM1 = 0 +GNULIB_EXPM1F = 0 +GNULIB_EXPM1L = 0 +GNULIB_FABSF = 0 +GNULIB_FABSL = 0 +GNULIB_FACCESSAT = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCHMODAT = 0 +GNULIB_FCHOWNAT = 0 +GNULIB_FCLOSE = 0 +GNULIB_FCNTL = 1 +GNULIB_FDATASYNC = 0 +GNULIB_FDOPEN = 0 +GNULIB_FFLUSH = 0 +GNULIB_FFS = 0 +GNULIB_FFSL = 0 +GNULIB_FFSLL = 0 +GNULIB_FGETC = 1 +GNULIB_FGETS = 1 +GNULIB_FLOCK = 1 +GNULIB_FLOOR = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FMA = 0 +GNULIB_FMAF = 0 +GNULIB_FMAL = 0 +GNULIB_FMOD = 0 +GNULIB_FMODF = 0 +GNULIB_FMODL = 0 +GNULIB_FOPEN = 0 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 1 +GNULIB_FPURGE = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREAD = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPF = 0 +GNULIB_FREXPL = 1 +GNULIB_FSCANF = 1 +GNULIB_FSEEK = 1 +GNULIB_FSEEKO = 1 +GNULIB_FSTAT = 1 +GNULIB_FSTATAT = 0 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 1 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FUTIMENS = 0 +GNULIB_FWRITE = 1 +GNULIB_GETC = 1 +GNULIB_GETCHAR = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 1 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETGROUPS = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 1 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETPASS = 1 +GNULIB_GETSUBOPT = 0 +GNULIB_GETTIMEOFDAY = 1 +GNULIB_GETUSERSHELL = 0 +GNULIB_GL_UNISTD_H_GETOPT = +GNULIB_GRANTPT = 0 +GNULIB_GROUP_MEMBER = 1 +GNULIB_HYPOT = 0 +GNULIB_HYPOTF = 0 +GNULIB_HYPOTL = 0 +GNULIB_ILOGB = 0 +GNULIB_ILOGBF = 0 +GNULIB_ILOGBL = 0 +GNULIB_IMAXABS = 0 +GNULIB_IMAXDIV = 0 +GNULIB_ISATTY = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_ISWBLANK = 0 +GNULIB_ISWCTYPE = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPF = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LINKAT = 0 +GNULIB_LOCALECONV = 1 +GNULIB_LOCALENAME = 0 +GNULIB_LOCALTIME = 0 +GNULIB_LOG = 0 +GNULIB_LOG10 = 0 +GNULIB_LOG10F = 0 +GNULIB_LOG10L = 0 +GNULIB_LOG1P = 0 +GNULIB_LOG1PF = 0 +GNULIB_LOG1PL = 0 +GNULIB_LOG2 = 0 +GNULIB_LOG2F = 0 +GNULIB_LOG2L = 0 +GNULIB_LOGB = 0 +GNULIB_LOGBF = 0 +GNULIB_LOGBL = 0 +GNULIB_LOGF = 0 +GNULIB_LOGL = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MBRLEN = 1 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MBTOWC = 1 +GNULIB_MEMCHR = 1 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDIRAT = 0 +GNULIB_MKDTEMP = 0 +GNULIB_MKFIFO = 0 +GNULIB_MKFIFOAT = 0 +GNULIB_MKNOD = 0 +GNULIB_MKNODAT = 0 +GNULIB_MKOSTEMP = 1 +GNULIB_MKOSTEMPS = 0 +GNULIB_MKSTEMP = 1 +GNULIB_MKSTEMPS = 0 +GNULIB_MKTIME = 1 +GNULIB_MODF = 0 +GNULIB_MODFF = 0 +GNULIB_MODFL = 0 +GNULIB_NANOSLEEP = 0 +GNULIB_NL_LANGINFO = 1 +GNULIB_NONBLOCKING = 0 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_OPENAT = 0 +GNULIB_OVERRIDES_STRUCT_STAT = 0 +GNULIB_OVERRIDES_WINT_T = 0 +GNULIB_PCLOSE = 0 +GNULIB_PERROR = 0 +GNULIB_PIPE = 0 +GNULIB_PIPE2 = 0 +GNULIB_POPEN = 0 +GNULIB_POSIX_OPENPT = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_POWF = 0 +GNULIB_PREAD = 0 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 1 +GNULIB_PTHREAD_SIGMASK = 0 +GNULIB_PTSNAME = 0 +GNULIB_PTSNAME_R = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_PWRITE = 0 +GNULIB_QSORT_R = 0 +GNULIB_RAISE = 1 +GNULIB_RANDOM = 0 +GNULIB_RANDOM_R = 1 +GNULIB_RAWMEMCHR = 1 +GNULIB_READ = 0 +GNULIB_READLINK = 1 +GNULIB_READLINKAT = 0 +GNULIB_REALLOCARRAY = 0 +GNULIB_REALLOC_POSIX = 1 +GNULIB_REALPATH = 1 +GNULIB_REMAINDER = 0 +GNULIB_REMAINDERF = 0 +GNULIB_REMAINDERL = 0 +GNULIB_REMOVE = 0 +GNULIB_RENAME = 1 +GNULIB_RENAMEAT = 0 +GNULIB_RINT = 0 +GNULIB_RINTF = 0 +GNULIB_RINTL = 0 +GNULIB_RMDIR = 1 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SCANF = 1 +GNULIB_SECURE_GETENV = 1 +GNULIB_SETENV = 1 +GNULIB_SETHOSTNAME = 0 +GNULIB_SETLOCALE = 0 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SINF = 0 +GNULIB_SINHF = 0 +GNULIB_SINL = 0 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 0 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_SQRTF = 0 +GNULIB_SQRTL = 0 +GNULIB_STAT = 1 +GNULIB_STDIO_H_NONBLOCKING = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 1 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 1 +GNULIB_STRERROR = 1 +GNULIB_STRERROR_R = 0 +GNULIB_STRFTIME = 0 +GNULIB_STRNCAT = 0 +GNULIB_STRNDUP = 0 +GNULIB_STRNLEN = 0 +GNULIB_STRPBRK = 0 +GNULIB_STRPTIME = 0 +GNULIB_STRSEP = 1 +GNULIB_STRSIGNAL = 0 +GNULIB_STRSTR = 0 +GNULIB_STRTOD = 0 +GNULIB_STRTOIMAX = 0 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRTOUMAX = 0 +GNULIB_STRVERSCMP = 1 +GNULIB_SYMLINK = 0 +GNULIB_SYMLINKAT = 0 +GNULIB_SYSTEM_POSIX = 0 +GNULIB_TANF = 0 +GNULIB_TANHF = 0 +GNULIB_TANL = 0 +GNULIB_TIMEGM = 1 +GNULIB_TIME_R = 1 +GNULIB_TIME_RZ = 1 +GNULIB_TMPFILE = 0 +GNULIB_TOWCTRANS = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCATE = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_TTYNAME_R = 0 +GNULIB_TZSET = 1 +GNULIB_UNISTD_H_NONBLOCKING = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNLINK = 0 +GNULIB_UNLINKAT = 0 +GNULIB_UNLOCKPT = 0 +GNULIB_UNSETENV = 1 +GNULIB_USLEEP = 0 +GNULIB_UTIMENSAT = 0 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 1 +GNULIB_VFSCANF = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSCANF = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WAITPID = 1 +GNULIB_WCPCPY = 0 +GNULIB_WCPNCPY = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSCASECMP = 0 +GNULIB_WCSCAT = 0 +GNULIB_WCSCHR = 0 +GNULIB_WCSCMP = 0 +GNULIB_WCSCOLL = 0 +GNULIB_WCSCPY = 0 +GNULIB_WCSCSPN = 0 +GNULIB_WCSDUP = 0 +GNULIB_WCSFTIME = 0 +GNULIB_WCSLEN = 0 +GNULIB_WCSNCASECMP = 0 +GNULIB_WCSNCAT = 0 +GNULIB_WCSNCMP = 0 +GNULIB_WCSNCPY = 0 +GNULIB_WCSNLEN = 0 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSPBRK = 0 +GNULIB_WCSRCHR = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCSSPN = 0 +GNULIB_WCSSTR = 0 +GNULIB_WCSTOK = 0 +GNULIB_WCSWIDTH = 0 +GNULIB_WCSXFRM = 0 +GNULIB_WCTOB = 1 +GNULIB_WCTOMB = 1 +GNULIB_WCTRANS = 0 +GNULIB_WCTYPE = 0 +GNULIB_WCWIDTH = 0 +GNULIB_WMEMCHR = 0 +GNULIB_WMEMCMP = 0 +GNULIB_WMEMCPY = 0 +GNULIB_WMEMMOVE = 0 +GNULIB_WMEMSET = 0 +GNULIB_WRITE = 0 +GNULIB__EXIT = 0 +GREP = /bin/grep +HAVE_ACOSF = 1 +HAVE_ACOSL = 1 +HAVE_ASINF = 1 +HAVE_ASINL = 1 +HAVE_ATAN2F = 1 +HAVE_ATANF = 1 +HAVE_ATANL = 1 +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_C99_STDINT_H = 1 +HAVE_CANONICALIZE_FILE_NAME = 1 +HAVE_CBRT = 1 +HAVE_CBRTF = 1 +HAVE_CBRTL = 1 +HAVE_CHOWN = 1 +HAVE_COPYSIGN = 1 +HAVE_COPYSIGNL = 1 +HAVE_COSF = 1 +HAVE_COSHF = 1 +HAVE_COSL = 1 +HAVE_CRTDEFS_H = 0 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_CBRTF = 1 +HAVE_DECL_CBRTL = 1 +HAVE_DECL_CEILF = 1 +HAVE_DECL_CEILL = 1 +HAVE_DECL_COPYSIGNF = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXP2 = 1 +HAVE_DECL_EXP2F = 1 +HAVE_DECL_EXP2L = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_EXPM1L = 1 +HAVE_DECL_FCHDIR = 1 +HAVE_DECL_FDATASYNC = 1 +HAVE_DECL_FLOORF = 1 +HAVE_DECL_FLOORL = 1 +HAVE_DECL_FPURGE = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_FSEEKO = 1 +HAVE_DECL_FTELLO = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETDOMAINNAME = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_GETPAGESIZE = 1 +HAVE_DECL_GETUSERSHELL = 1 +HAVE_DECL_IMAXABS = 1 +HAVE_DECL_IMAXDIV = 1 +HAVE_DECL_INITSTATE = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOCALTIME_R = 1 +HAVE_DECL_LOG10L = 1 +HAVE_DECL_LOG2 = 1 +HAVE_DECL_LOG2F = 1 +HAVE_DECL_LOG2L = 1 +HAVE_DECL_LOGB = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_REMAINDER = 1 +HAVE_DECL_REMAINDERL = 1 +HAVE_DECL_RINTF = 1 +HAVE_DECL_ROUND = 1 +HAVE_DECL_ROUNDF = 1 +HAVE_DECL_ROUNDL = 1 +HAVE_DECL_SETENV = 1 +HAVE_DECL_SETHOSTNAME = 1 +HAVE_DECL_SETSTATE = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR_R = 1 +HAVE_DECL_STRNCASECMP = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOIMAX = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_STRTOUMAX = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCATE = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_TRUNCL = 1 +HAVE_DECL_TTYNAME_R = 1 +HAVE_DECL_UNSETENV = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_DUP3 = 1 +HAVE_DUPLOCALE = 1 +HAVE_EUIDACCESS = 1 +HAVE_EXPF = 1 +HAVE_EXPL = 1 +HAVE_EXPLICIT_BZERO = 1 +HAVE_EXPM1 = 1 +HAVE_EXPM1F = 1 +HAVE_FABSF = 1 +HAVE_FABSL = 1 +HAVE_FACCESSAT = 1 +HAVE_FCHDIR = 1 +HAVE_FCHMODAT = 1 +HAVE_FCHOWNAT = 1 +HAVE_FCNTL = 1 +HAVE_FDATASYNC = 1 +HAVE_FEATURES_H = 1 +HAVE_FFS = 1 +HAVE_FFSL = 1 +HAVE_FFSLL = 1 +HAVE_FLOCK = 1 +HAVE_FMA = 1 +HAVE_FMAF = 1 +HAVE_FMAL = 1 +HAVE_FMODF = 1 +HAVE_FMODL = 1 +HAVE_FREELOCALE = 1 +HAVE_FREXPF = 1 +HAVE_FSEEKO = 1 +HAVE_FSTATAT = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_FUTIMENS = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETGROUPS = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETLOGIN = 1 +HAVE_GETOPT_H = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETPASS = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETTIMEOFDAY = 1 +HAVE_GRANTPT = 1 +HAVE_GROUP_MEMBER = 1 +HAVE_HYPOTF = 1 +HAVE_HYPOTL = 1 +HAVE_ILOGB = 1 +HAVE_ILOGBF = 1 +HAVE_ILOGBL = 1 +HAVE_IMAXDIV_T = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWBLANK = 1 +HAVE_ISWCNTRL = 1 +HAVE_LANGINFO_ALTMON = 0 +HAVE_LANGINFO_CODESET = 1 +HAVE_LANGINFO_ERA = 1 +HAVE_LANGINFO_H = 1 +HAVE_LANGINFO_T_FMT_AMPM = 1 +HAVE_LANGINFO_YESEXPR = 1 +HAVE_LCHMOD = 1 +HAVE_LCHOWN = 1 +HAVE_LDEXPF = 1 +HAVE_LIBGCRYPT = no +HAVE_LINK = 1 +HAVE_LINKAT = 1 +HAVE_LOG10F = 1 +HAVE_LOG10L = 1 +HAVE_LOG1P = 1 +HAVE_LOG1PF = 1 +HAVE_LOG1PL = 1 +HAVE_LOGBF = 1 +HAVE_LOGBL = 1 +HAVE_LOGF = 1 +HAVE_LOGL = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MAX_ALIGN_T = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSLEN = 0 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMCHR = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDIRAT = 1 +HAVE_MKDTEMP = 1 +HAVE_MKFIFO = 1 +HAVE_MKFIFOAT = 1 +HAVE_MKNOD = 1 +HAVE_MKNODAT = 1 +HAVE_MKOSTEMP = 1 +HAVE_MKOSTEMPS = 1 +HAVE_MKSTEMP = 1 +HAVE_MKSTEMPS = 1 +HAVE_MODFF = 1 +HAVE_MODFL = 1 +HAVE_MSVC_INVALID_PARAMETER_HANDLER = 0 +HAVE_NANOSLEEP = 1 +HAVE_NEWLOCALE = 1 +HAVE_NL_LANGINFO = 1 +HAVE_OPENAT = 1 +HAVE_OS_H = 0 +HAVE_PCLOSE = 1 +HAVE_PIPE = 1 +HAVE_PIPE2 = 1 +HAVE_POPEN = 1 +HAVE_POSIX_OPENPT = 1 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_POSIX_SPAWNATTR_T = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = 1 +HAVE_POWF = 1 +HAVE_PREAD = 1 +HAVE_PTHREAD_SIGMASK = 1 +HAVE_PTSNAME = 1 +HAVE_PTSNAME_R = 1 +HAVE_PWRITE = 1 +HAVE_QSORT_R = 1 +HAVE_RAISE = 1 +HAVE_RANDOM = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_READLINKAT = 1 +HAVE_REALLOCARRAY = 1 +HAVE_REALPATH = 1 +HAVE_REMAINDER = 1 +HAVE_REMAINDERF = 1 +HAVE_RENAMEAT = 1 +HAVE_RINT = 1 +HAVE_RINTL = 1 +HAVE_RPMATCH = 1 +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0 +HAVE_SCHED_H = +HAVE_SECURE_GETENV = 1 +HAVE_SETENV = 1 +HAVE_SETHOSTNAME = 1 +HAVE_SIGACTION = 1 +HAVE_SIGHANDLER_T = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SINF = 1 +HAVE_SINHF = 1 +HAVE_SINL = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_SQRTF = 1 +HAVE_SQRTL = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASECMP = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRINGS_H = 1 +HAVE_STRPBRK = 1 +HAVE_STRPTIME = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYMLINK = 1 +HAVE_SYMLINKAT = 1 +HAVE_SYS_BITYPES_H = 0 +HAVE_SYS_CDEFS_H = +HAVE_SYS_FILE_H = 1 +HAVE_SYS_INTTYPES_H = 0 +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TANF = 1 +HAVE_TANHF = 1 +HAVE_TANL = 1 +HAVE_TIMEGM = 1 +HAVE_TIMEZONE_T = 0 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_TZSET = 1 +HAVE_UNISTD_H = 1 +HAVE_UNLINKAT = 1 +HAVE_UNLOCKPT = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_USLEEP = 1 +HAVE_UTIMENSAT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCHAR_T = 1 +HAVE_WCPCPY = 1 +HAVE_WCPNCPY = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSCASECMP = 1 +HAVE_WCSCAT = 1 +HAVE_WCSCHR = 1 +HAVE_WCSCMP = 1 +HAVE_WCSCOLL = 1 +HAVE_WCSCPY = 1 +HAVE_WCSCSPN = 1 +HAVE_WCSDUP = 1 +HAVE_WCSFTIME = 1 +HAVE_WCSLEN = 1 +HAVE_WCSNCASECMP = 1 +HAVE_WCSNCAT = 1 +HAVE_WCSNCMP = 1 +HAVE_WCSNCPY = 1 +HAVE_WCSNLEN = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSPBRK = 1 +HAVE_WCSRCHR = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCSSPN = 1 +HAVE_WCSSTR = 1 +HAVE_WCSTOK = 1 +HAVE_WCSWIDTH = 1 +HAVE_WCSXFRM = 1 +HAVE_WCTRANS_T = 1 +HAVE_WCTYPE_H = 1 +HAVE_WCTYPE_T = 1 +HAVE_WINSOCK2_H = 0 +HAVE_WINT_T = 1 +HAVE_WMEMCHR = 1 +HAVE_WMEMCMP = 1 +HAVE_WMEMCPY = 1 +HAVE_WMEMMOVE = 1 +HAVE_WMEMSET = 1 +HAVE_XLOCALE_H = 1 +HAVE__BOOL = 1 +HAVE__EXIT = 1 +HELP2MAN = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing help2man +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +INT32_MAX_LT_INTMAX_MAX = 1 +INT64_MAX_EQ_LONG_MAX = 0 +INTLLIBS = +INTL_MACOSX_LIBS = +LD = /usr/bin/ld +LDFLAGS = +LEX = flex +LEXLIB = -lfl +LEX_OUTPUT_ROOT = lex.yy +LIBGCRYPT = +LIBGCRYPT_PREFIX = +LIBICONV = -liconv +LIBINTL = +LIBMULTITHREAD = -pthread -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBREADLINE = +LIBS = +LIBTHREAD = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIB_ACL = +LIB_CLOCK_GETTIME = +LIB_EACCESS = +LIB_POSIX_SPAWN = +LIB_SELINUX = +LIMITS_H = limits.h +LIPO = +LN_S = ln -s +LOCALCHARSET_TESTS_ENVIRONMENT = +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTALLOCA = +LTLIBGCRYPT = +LTLIBICONV = -liconv +LTLIBINTL = +LTLIBMULTITHREAD = -pthread +LTLIBOBJS = +LTLIBPTH = +LTLIBREADLINE = +LTLIBTHREAD = +LT_SYS_LIBRARY_PATH = +MAKEINFO = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing makeinfo +MANIFEST_TOOL = : +MDBLIBS = +MDB_DATETIME = +MKDIR_P = /bin/mkdir -p +MSGFMT = /usr/bin/msgfmt +MSGFMT_015 = /usr/bin/msgfmt +MSGMERGE = /usr/bin/msgmerge +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = <fcntl.h> +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = <getopt.h> +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = <inttypes.h> +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = <langinfo.h> +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = <limits.h> +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = <locale.h> +NEXT_AS_FIRST_DIRECTIVE_MATH_H = <math.h> +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = <signal.h> +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = <spawn.h> +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = <stdint.h> +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = <stdio.h> +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = <stdlib.h> +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = <strings.h> +NEXT_AS_FIRST_DIRECTIVE_STRING_H = <string.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = <sys/file.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = <sys/stat.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = <sys/time.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = <sys/types.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = <sys/wait.h> +NEXT_AS_FIRST_DIRECTIVE_TIME_H = <time.h> +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = <unistd.h> +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = <wchar.h> +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = <wctype.h> +NEXT_ERRNO_H = +NEXT_FCNTL_H = <fcntl.h> +NEXT_FLOAT_H = +NEXT_GETOPT_H = <getopt.h> +NEXT_INTTYPES_H = <inttypes.h> +NEXT_LANGINFO_H = <langinfo.h> +NEXT_LIMITS_H = <limits.h> +NEXT_LOCALE_H = <locale.h> +NEXT_MATH_H = <math.h> +NEXT_SCHED_H = +NEXT_SELINUX_SELINUX_H = +NEXT_SIGNAL_H = <signal.h> +NEXT_SPAWN_H = <spawn.h> +NEXT_STDARG_H = <stdarg.h> +NEXT_STDDEF_H = +NEXT_STDINT_H = <stdint.h> +NEXT_STDIO_H = <stdio.h> +NEXT_STDLIB_H = <stdlib.h> +NEXT_STRINGS_H = <strings.h> +NEXT_STRING_H = <string.h> +NEXT_SYS_FILE_H = <sys/file.h> +NEXT_SYS_STAT_H = <sys/stat.h> +NEXT_SYS_TIME_H = <sys/time.h> +NEXT_SYS_TYPES_H = <sys/types.h> +NEXT_SYS_WAIT_H = <sys/wait.h> +NEXT_TIME_H = <time.h> +NEXT_UNISTD_H = <unistd.h> +NEXT_WCHAR_H = <wchar.h> +NEXT_WCTYPE_H = <wctype.h> +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = recutils +PACKAGE_BUGREPORT = bug-recutils@gnu.org +PACKAGE_NAME = GNU recutils +PACKAGE_STRING = GNU recutils 1.8 +PACKAGE_TARNAME = recutils +PACKAGE_URL = http://www.gnu.org/software/recutils/ +PACKAGE_VERSION = 1.8 +PATH_SEPARATOR = : +PKG_CONFIG = /usr/bin/pkg-config +PKG_CONFIG_LIBDIR = +PKG_CONFIG_PATH = +POSUB = po +PRAGMA_COLUMNS = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PRIPTR_PREFIX = "l" +PRI_MACROS_BROKEN = 0 +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = 0 +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_ACOSF = 0 +REPLACE_ASINF = 0 +REPLACE_ATAN2F = 0 +REPLACE_ATANF = 0 +REPLACE_BTOWC = 0 +REPLACE_CALLOC = 0 +REPLACE_CANONICALIZE_FILE_NAME = 0 +REPLACE_CBRTF = 0 +REPLACE_CBRTL = 0 +REPLACE_CEIL = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_COSF = 0 +REPLACE_COSHF = 0 +REPLACE_CTIME = GNULIB_PORTCHECK +REPLACE_DPRINTF = 0 +REPLACE_DUP = 0 +REPLACE_DUP2 = 0 +REPLACE_DUPLOCALE = 0 +REPLACE_EXP2 = 0 +REPLACE_EXP2L = 0 +REPLACE_EXPF = 0 +REPLACE_EXPM1 = 0 +REPLACE_EXPM1F = 0 +REPLACE_FABSL = 0 +REPLACE_FACCESSAT = 0 +REPLACE_FCHOWNAT = 0 +REPLACE_FCLOSE = 0 +REPLACE_FCNTL = 1 +REPLACE_FDOPEN = 0 +REPLACE_FFLUSH = 0 +REPLACE_FLOOR = 0 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FMA = 0 +REPLACE_FMAF = 0 +REPLACE_FMAL = 0 +REPLACE_FMOD = 0 +REPLACE_FMODF = 0 +REPLACE_FMODL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 1 +REPLACE_FPURGE = 0 +REPLACE_FREELOCALE = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPF = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 0 +REPLACE_FSTAT = 0 +REPLACE_FSTATAT = 0 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_FTRUNCATE = 0 +REPLACE_FUTIMENS = 0 +REPLACE_GETCWD = 0 +REPLACE_GETDELIM = 0 +REPLACE_GETDOMAINNAME = 0 +REPLACE_GETDTABLESIZE = 0 +REPLACE_GETGROUPS = 0 +REPLACE_GETLINE = 0 +REPLACE_GETLOGIN_R = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETPASS = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_GMTIME = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_HYPOT = 0 +REPLACE_HYPOTF = 0 +REPLACE_HYPOTL = 0 +REPLACE_ILOGB = 0 +REPLACE_ILOGBF = 0 +REPLACE_ILOGBL = 0 +REPLACE_ISATTY = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWBLANK = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_ITOLD = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LINK = 0 +REPLACE_LINKAT = 0 +REPLACE_LOCALECONV = 0 +REPLACE_LOCALTIME = 0 +REPLACE_LOCALTIME_R = 0 +REPLACE_LOG = 0 +REPLACE_LOG10 = 0 +REPLACE_LOG10F = 0 +REPLACE_LOG10L = 0 +REPLACE_LOG1P = 0 +REPLACE_LOG1PF = 0 +REPLACE_LOG1PL = 0 +REPLACE_LOG2 = 0 +REPLACE_LOG2F = 0 +REPLACE_LOG2L = 0 +REPLACE_LOGB = 0 +REPLACE_LOGBF = 0 +REPLACE_LOGBL = 0 +REPLACE_LOGF = 0 +REPLACE_LOGL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MALLOC = 0 +REPLACE_MBRLEN = 1 +REPLACE_MBRTOWC = 1 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MBTOWC = 0 +REPLACE_MEMCHR = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKFIFO = 0 +REPLACE_MKNOD = 0 +REPLACE_MKSTEMP = 0 +REPLACE_MKTIME = 0 +REPLACE_MODF = 0 +REPLACE_MODFF = 0 +REPLACE_MODFL = 0 +REPLACE_NAN = 0 +REPLACE_NANOSLEEP = GNULIB_PORTCHECK +REPLACE_NEWLOCALE = 0 +REPLACE_NL_LANGINFO = 1 +REPLACE_NULL = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_OPENAT = 0 +REPLACE_PERROR = 0 +REPLACE_POPEN = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 0 +REPLACE_PREAD = 0 +REPLACE_PRINTF = 1 +REPLACE_PTHREAD_SIGMASK = 0 +REPLACE_PTSNAME = 0 +REPLACE_PTSNAME_R = 0 +REPLACE_PUTENV = 0 +REPLACE_PWRITE = 0 +REPLACE_QSORT_R = 0 +REPLACE_RAISE = 0 +REPLACE_RANDOM_R = 0 +REPLACE_READ = 0 +REPLACE_READLINK = 0 +REPLACE_READLINKAT = 0 +REPLACE_REALLOC = 0 +REPLACE_REALPATH = 0 +REPLACE_REMAINDER = 0 +REPLACE_REMAINDERF = 0 +REPLACE_REMAINDERL = 0 +REPLACE_REMOVE = 0 +REPLACE_RENAME = 0 +REPLACE_RENAMEAT = 0 +REPLACE_RMDIR = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SETENV = 0 +REPLACE_SETLOCALE = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SINF = 0 +REPLACE_SINHF = 0 +REPLACE_SLEEP = 0 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_SQRTF = 0 +REPLACE_SQRTL = 0 +REPLACE_STAT = 0 +REPLACE_STDIO_READ_FUNCS = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STPNCPY = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRCHRNUL = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRERROR_R = 0 +REPLACE_STRFTIME = GNULIB_PORTCHECK +REPLACE_STRNCAT = 0 +REPLACE_STRNDUP = 0 +REPLACE_STRNLEN = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 0 +REPLACE_STRTOD = 0 +REPLACE_STRTOIMAX = 0 +REPLACE_STRTOK_R = 0 +REPLACE_STRTOUMAX = 0 +REPLACE_STRUCT_LCONV = 0 +REPLACE_STRUCT_TIMEVAL = 0 +REPLACE_SYMLINK = 0 +REPLACE_SYMLINKAT = 0 +REPLACE_TANF = 0 +REPLACE_TANHF = 0 +REPLACE_TIMEGM = 0 +REPLACE_TMPFILE = 0 +REPLACE_TOWLOWER = 0 +REPLACE_TRUNC = 0 +REPLACE_TRUNCATE = 0 +REPLACE_TRUNCF = 0 +REPLACE_TRUNCL = 0 +REPLACE_TTYNAME_R = 0 +REPLACE_TZSET = 0 +REPLACE_UNLINK = 0 +REPLACE_UNLINKAT = 0 +REPLACE_UNSETENV = 0 +REPLACE_USLEEP = 0 +REPLACE_UTIMENSAT = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 1 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSFTIME = 0 +REPLACE_WCSNRTOMBS = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCSWIDTH = 0 +REPLACE_WCTOB = 0 +REPLACE_WCTOMB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SED = /bin/sed +SELINUX_CONTEXT_H = selinux/context.h +SET_MAKE = +SHELL = /bin/sh +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +STDARG_H = +STDBOOL_H = +STDDEF_H = +STDINT_H = stdint.h +STRIP = strip +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = 0 +TIME_H_DEFINES_STRUCT_TIMESPEC = 1 +UINT32_MAX_LT_UINTMAX_MAX = 1 +UINT64_MAX_EQ_ULONG_MAX = 0 +UNDEFINE_STRTOK_R = 0 +UNISTD_H_DEFINES_STRUCT_TIMESPEC = 0 +UNISTD_H_HAVE_WINSOCK2_H = 0 +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = 0 +USE_ACL = 0 +USE_NLS = yes +UUIDLIBS = +VERSION = 1.8 +WCHAR_T_SUFFIX = +WINDOWS_64_BIT_OFF_T = 0 +WINDOWS_64_BIT_ST_SIZE = 0 +WINDOWS_STAT_INODES = 0 +WINDOWS_STAT_TIMESPEC = 0 +WINT_T_SUFFIX = +XGETTEXT = /usr/bin/xgettext +XGETTEXT_015 = /usr/bin/xgettext +XGETTEXT_EXTRA_OPTIONS = --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format +YACC = bison -o y.tab.c +YFLAGS = +abs_builddir = /mnt/lfs/build/recutils/recutils-1.8/etc +abs_srcdir = /mnt/lfs/build/recutils/recutils-1.8/etc +abs_top_builddir = /mnt/lfs/build/recutils/recutils-1.8 +abs_top_srcdir = /mnt/lfs/build/recutils/recutils-1.8 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +builddir = . +crypt_support = no +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +gl_LIBOBJS = asnprintf.o asprintf.o fcntl.o fprintf.o fseterr.o localtime-buffer.o mbrlen.o mbrtowc.o mktime.o nl_langinfo.o obstack.o printf.o printf-args.o printf-parse.o readline.o regex.o time_rz.o vasnprintf.o vasprintf.o vfprintf.o +gl_LTLIBOBJS = asnprintf.lo asprintf.lo fcntl.lo fprintf.lo fseterr.lo localtime-buffer.lo mbrlen.lo mbrtowc.lo mktime.lo nl_langinfo.lo obstack.lo printf.lo printf-args.lo printf-parse.lo readline.lo regex.lo time_rz.lo vasnprintf.lo vasprintf.lo vfprintf.lo +gltests_LIBOBJS = +gltests_LTLIBOBJS = +gltests_WITNESS = IN_RECUTILS_GNULIB_TESTS +have_uuid = no +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = $(MKDIR_P) +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +runstatedir = ${localstatedir}/run +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +dist_lisp_DATA = rec-mode.el ob-rec.el +etcdir = $(pkgdatadir)/etc +dist_etc_DATA = FSD.rec +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu etc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu etc/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_etcDATA: $(dist_etc_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_etc_DATA)'; test -n "$(etcdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(etcdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(etcdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(etcdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(etcdir)" || exit $$?; \ + done + +uninstall-dist_etcDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_etc_DATA)'; test -n "$(etcdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(etcdir)'; $(am__uninstall_files_from_dir) +install-dist_lispDATA: $(dist_lisp_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_lisp_DATA)'; test -n "$(lispdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(lispdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(lispdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(lispdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(lispdir)" || exit $$?; \ + done + +uninstall-dist_lispDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_lisp_DATA)'; test -n "$(lispdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(lispdir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(etcdir)" "$(DESTDIR)$(lispdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-dist_etcDATA install-dist_lispDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_etcDATA uninstall-dist_lispDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-dist_etcDATA install-dist_lispDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am uninstall-dist_etcDATA \ + uninstall-dist_lispDATA + +.PRECIOUS: Makefile + + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/etc/Makefile.am b/devspec.en_US/project/recutils/etc/Makefile.am new file mode 100755 index 0000000..8e0f649 --- /dev/null +++ b/devspec.en_US/project/recutils/etc/Makefile.am @@ -0,0 +1,23 @@ +# Makefile.am for etc/ + +# Copyright (C) 2010-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +dist_lisp_DATA = rec-mode.el ob-rec.el + +etcdir=$(pkgdatadir)/etc +dist_etc_DATA = FSD.rec + +# End of Makefile.am diff --git a/devspec.en_US/project/recutils/etc/Makefile.in b/devspec.en_US/project/recutils/etc/Makefile.in new file mode 100755 index 0000000..770936a --- /dev/null +++ b/devspec.en_US/project/recutils/etc/Makefile.in @@ -0,0 +1,1789 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Makefile.am for etc/ + +# Copyright (C) 2010-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = etc +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(dist_etc_DATA) $(dist_lisp_DATA) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(etcdir)" "$(DESTDIR)$(lispdir)" +DATA = $(dist_etc_DATA) $(dist_lisp_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BASH_HEADERS = @BASH_HEADERS@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CA68 = @CA68@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CURLLIBS = @CURLLIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +FLOOR_LIBM = @FLOOR_LIBM@ +GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ACOSF = @GNULIB_ACOSF@ +GNULIB_ACOSL = @GNULIB_ACOSL@ +GNULIB_ASINF = @GNULIB_ASINF@ +GNULIB_ASINL = @GNULIB_ASINL@ +GNULIB_ATAN2F = @GNULIB_ATAN2F@ +GNULIB_ATANF = @GNULIB_ATANF@ +GNULIB_ATANL = @GNULIB_ATANL@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CBRT = @GNULIB_CBRT@ +GNULIB_CBRTF = @GNULIB_CBRTF@ +GNULIB_CBRTL = @GNULIB_CBRTL@ +GNULIB_CEIL = @GNULIB_CEIL@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ +GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ +GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ +GNULIB_COSF = @GNULIB_COSF@ +GNULIB_COSHF = @GNULIB_COSHF@ +GNULIB_COSL = @GNULIB_COSL@ +GNULIB_CTIME = @GNULIB_CTIME@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_EXP2 = @GNULIB_EXP2@ +GNULIB_EXP2F = @GNULIB_EXP2F@ +GNULIB_EXP2L = @GNULIB_EXP2L@ +GNULIB_EXPF = @GNULIB_EXPF@ +GNULIB_EXPL = @GNULIB_EXPL@ +GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ +GNULIB_EXPM1 = @GNULIB_EXPM1@ +GNULIB_EXPM1F = @GNULIB_EXPM1F@ +GNULIB_EXPM1L = @GNULIB_EXPM1L@ +GNULIB_FABSF = @GNULIB_FABSF@ +GNULIB_FABSL = @GNULIB_FABSL@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FCNTL = @GNULIB_FCNTL@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FLOCK = @GNULIB_FLOCK@ +GNULIB_FLOOR = @GNULIB_FLOOR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FMA = @GNULIB_FMA@ +GNULIB_FMAF = @GNULIB_FMAF@ +GNULIB_FMAL = @GNULIB_FMAL@ +GNULIB_FMOD = @GNULIB_FMOD@ +GNULIB_FMODF = @GNULIB_FMODF@ +GNULIB_FMODL = @GNULIB_FMODL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPF = @GNULIB_FREXPF@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSTAT = @GNULIB_FSTAT@ +GNULIB_FSTATAT = @GNULIB_FSTATAT@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETPASS = @GNULIB_GETPASS@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_HYPOT = @GNULIB_HYPOT@ +GNULIB_HYPOTF = @GNULIB_HYPOTF@ +GNULIB_HYPOTL = @GNULIB_HYPOTL@ +GNULIB_ILOGB = @GNULIB_ILOGB@ +GNULIB_ILOGBF = @GNULIB_ILOGBF@ +GNULIB_ILOGBL = @GNULIB_ILOGBL@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPF = @GNULIB_LDEXPF@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LOCALENAME = @GNULIB_LOCALENAME@ +GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ +GNULIB_LOG = @GNULIB_LOG@ +GNULIB_LOG10 = @GNULIB_LOG10@ +GNULIB_LOG10F = @GNULIB_LOG10F@ +GNULIB_LOG10L = @GNULIB_LOG10L@ +GNULIB_LOG1P = @GNULIB_LOG1P@ +GNULIB_LOG1PF = @GNULIB_LOG1PF@ +GNULIB_LOG1PL = @GNULIB_LOG1PL@ +GNULIB_LOG2 = @GNULIB_LOG2@ +GNULIB_LOG2F = @GNULIB_LOG2F@ +GNULIB_LOG2L = @GNULIB_LOG2L@ +GNULIB_LOGB = @GNULIB_LOGB@ +GNULIB_LOGBF = @GNULIB_LOGBF@ +GNULIB_LOGBL = @GNULIB_LOGBL@ +GNULIB_LOGF = @GNULIB_LOGF@ +GNULIB_LOGL = @GNULIB_LOGL@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKFIFO = @GNULIB_MKFIFO@ +GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ +GNULIB_MKNOD = @GNULIB_MKNOD@ +GNULIB_MKNODAT = @GNULIB_MKNODAT@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_MKTIME = @GNULIB_MKTIME@ +GNULIB_MODF = @GNULIB_MODF@ +GNULIB_MODFF = @GNULIB_MODFF@ +GNULIB_MODFL = @GNULIB_MODFL@ +GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ +GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_POWF = @GNULIB_POWF@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_QSORT_R = @GNULIB_QSORT_R@ +GNULIB_RAISE = @GNULIB_RAISE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMAINDER = @GNULIB_REMAINDER@ +GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ +GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RINT = @GNULIB_RINT@ +GNULIB_RINTF = @GNULIB_RINTF@ +GNULIB_RINTL = @GNULIB_RINTL@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SINF = @GNULIB_SINF@ +GNULIB_SINHF = @GNULIB_SINHF@ +GNULIB_SINL = @GNULIB_SINL@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_SQRTF = @GNULIB_SQRTF@ +GNULIB_SQRTL = @GNULIB_SQRTL@ +GNULIB_STAT = @GNULIB_STAT@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRFTIME = @GNULIB_STRFTIME@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRPTIME = @GNULIB_STRPTIME@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TANF = @GNULIB_TANF@ +GNULIB_TANHF = @GNULIB_TANHF@ +GNULIB_TANL = @GNULIB_TANL@ +GNULIB_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_TZSET = @GNULIB_TZSET@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WAITPID = @GNULIB_WAITPID@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +HAVE_ACOSF = @HAVE_ACOSF@ +HAVE_ACOSL = @HAVE_ACOSL@ +HAVE_ASINF = @HAVE_ASINF@ +HAVE_ASINL = @HAVE_ASINL@ +HAVE_ATAN2F = @HAVE_ATAN2F@ +HAVE_ATANF = @HAVE_ATANF@ +HAVE_ATANL = @HAVE_ATANL@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CBRT = @HAVE_CBRT@ +HAVE_CBRTF = @HAVE_CBRTF@ +HAVE_CBRTL = @HAVE_CBRTL@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_COPYSIGN = @HAVE_COPYSIGN@ +HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ +HAVE_COSF = @HAVE_COSF@ +HAVE_COSHF = @HAVE_COSHF@ +HAVE_COSL = @HAVE_COSL@ +HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ +HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ +HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ +HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ +HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ +HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ +HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ +HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ +HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ +HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ +HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ +HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ +HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ +HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ +HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ +HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ +HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ +HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ +HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ +HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_EXPF = @HAVE_EXPF@ +HAVE_EXPL = @HAVE_EXPL@ +HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ +HAVE_EXPM1 = @HAVE_EXPM1@ +HAVE_EXPM1F = @HAVE_EXPM1F@ +HAVE_FABSF = @HAVE_FABSF@ +HAVE_FABSL = @HAVE_FABSL@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FLOCK = @HAVE_FLOCK@ +HAVE_FMA = @HAVE_FMA@ +HAVE_FMAF = @HAVE_FMAF@ +HAVE_FMAL = @HAVE_FMAL@ +HAVE_FMODF = @HAVE_FMODF@ +HAVE_FMODL = @HAVE_FMODL@ +HAVE_FREELOCALE = @HAVE_FREELOCALE@ +HAVE_FREXPF = @HAVE_FREXPF@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSTATAT = @HAVE_FSTATAT@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_FUTIMENS = @HAVE_FUTIMENS@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETPASS = @HAVE_GETPASS@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_HYPOTF = @HAVE_HYPOTF@ +HAVE_HYPOTL = @HAVE_HYPOTL@ +HAVE_ILOGB = @HAVE_ILOGB@ +HAVE_ILOGBF = @HAVE_ILOGBF@ +HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LDEXPF = @HAVE_LDEXPF@ +HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOG10F = @HAVE_LOG10F@ +HAVE_LOG10L = @HAVE_LOG10L@ +HAVE_LOG1P = @HAVE_LOG1P@ +HAVE_LOG1PF = @HAVE_LOG1PF@ +HAVE_LOG1PL = @HAVE_LOG1PL@ +HAVE_LOGBF = @HAVE_LOGBF@ +HAVE_LOGBL = @HAVE_LOGBL@ +HAVE_LOGF = @HAVE_LOGF@ +HAVE_LOGL = @HAVE_LOGL@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDIRAT = @HAVE_MKDIRAT@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKFIFO = @HAVE_MKFIFO@ +HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ +HAVE_MKNOD = @HAVE_MKNOD@ +HAVE_MKNODAT = @HAVE_MKNODAT@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MODFF = @HAVE_MODFF@ +HAVE_MODFL = @HAVE_MODFL@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ +HAVE_POWF = @HAVE_POWF@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_QSORT_R = @HAVE_QSORT_R@ +HAVE_RAISE = @HAVE_RAISE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_REMAINDER = @HAVE_REMAINDER@ +HAVE_REMAINDERF = @HAVE_REMAINDERF@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RINT = @HAVE_RINT@ +HAVE_RINTL = @HAVE_RINTL@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SINF = @HAVE_SINF@ +HAVE_SINHF = @HAVE_SINHF@ +HAVE_SINL = @HAVE_SINL@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_SQRTF = @HAVE_SQRTF@ +HAVE_SQRTL = @HAVE_SQRTL@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRPTIME = @HAVE_STRPTIME@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ +HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TANF = @HAVE_TANF@ +HAVE_TANHF = @HAVE_TANHF@ +HAVE_TANL = @HAVE_TANL@ +HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_TZSET = @HAVE_TZSET@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSFTIME = @HAVE_WCSFTIME@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ +INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBGCRYPT = @LIBGCRYPT@ +LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBREADLINE = @LIBREADLINE@ +LIBS = @LIBS@ +LIBTHREAD = @LIBTHREAD@ +LIBTOOL = @LIBTOOL@ +LIB_ACL = @LIB_ACL@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LIB_EACCESS = @LIB_EACCESS@ +LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ +LIB_SELINUX = @LIB_SELINUX@ +LIMITS_H = @LIMITS_H@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTALLOCA = @LTALLOCA@ +LTLIBGCRYPT = @LTLIBGCRYPT@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBREADLINE = @LTLIBREADLINE@ +LTLIBTHREAD = @LTLIBTHREAD@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MDBLIBS = @MDBLIBS@ +MDB_DATETIME = @MDB_DATETIME@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ +NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LIMITS_H = @NEXT_LIMITS_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_ACOSF = @REPLACE_ACOSF@ +REPLACE_ASINF = @REPLACE_ASINF@ +REPLACE_ATAN2F = @REPLACE_ATAN2F@ +REPLACE_ATANF = @REPLACE_ATANF@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CBRTF = @REPLACE_CBRTF@ +REPLACE_CBRTL = @REPLACE_CBRTL@ +REPLACE_CEIL = @REPLACE_CEIL@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_COSF = @REPLACE_COSF@ +REPLACE_COSHF = @REPLACE_COSHF@ +REPLACE_CTIME = @REPLACE_CTIME@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_EXP2 = @REPLACE_EXP2@ +REPLACE_EXP2L = @REPLACE_EXP2L@ +REPLACE_EXPF = @REPLACE_EXPF@ +REPLACE_EXPM1 = @REPLACE_EXPM1@ +REPLACE_EXPM1F = @REPLACE_EXPM1F@ +REPLACE_FABSL = @REPLACE_FABSL@ +REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOOR = @REPLACE_FLOOR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FMA = @REPLACE_FMA@ +REPLACE_FMAF = @REPLACE_FMAF@ +REPLACE_FMAL = @REPLACE_FMAL@ +REPLACE_FMOD = @REPLACE_FMOD@ +REPLACE_FMODF = @REPLACE_FMODF@ +REPLACE_FMODL = @REPLACE_FMODL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPF = @REPLACE_FREXPF@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FSTAT = @REPLACE_FSTAT@ +REPLACE_FSTATAT = @REPLACE_FSTATAT@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETPASS = @REPLACE_GETPASS@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_GMTIME = @REPLACE_GMTIME@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_HYPOT = @REPLACE_HYPOT@ +REPLACE_HYPOTF = @REPLACE_HYPOTF@ +REPLACE_HYPOTL = @REPLACE_HYPOTL@ +REPLACE_ILOGB = @REPLACE_ILOGB@ +REPLACE_ILOGBF = @REPLACE_ILOGBF@ +REPLACE_ILOGBL = @REPLACE_ILOGBL@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LOG = @REPLACE_LOG@ +REPLACE_LOG10 = @REPLACE_LOG10@ +REPLACE_LOG10F = @REPLACE_LOG10F@ +REPLACE_LOG10L = @REPLACE_LOG10L@ +REPLACE_LOG1P = @REPLACE_LOG1P@ +REPLACE_LOG1PF = @REPLACE_LOG1PF@ +REPLACE_LOG1PL = @REPLACE_LOG1PL@ +REPLACE_LOG2 = @REPLACE_LOG2@ +REPLACE_LOG2F = @REPLACE_LOG2F@ +REPLACE_LOG2L = @REPLACE_LOG2L@ +REPLACE_LOGB = @REPLACE_LOGB@ +REPLACE_LOGBF = @REPLACE_LOGBF@ +REPLACE_LOGBL = @REPLACE_LOGBL@ +REPLACE_LOGF = @REPLACE_LOGF@ +REPLACE_LOGL = @REPLACE_LOGL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKFIFO = @REPLACE_MKFIFO@ +REPLACE_MKNOD = @REPLACE_MKNOD@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_MKTIME = @REPLACE_MKTIME@ +REPLACE_MODF = @REPLACE_MODF@ +REPLACE_MODFF = @REPLACE_MODFF@ +REPLACE_MODFL = @REPLACE_MODFL@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_OPENAT = @REPLACE_OPENAT@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_QSORT_R = @REPLACE_QSORT_R@ +REPLACE_RAISE = @REPLACE_RAISE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_READLINKAT = @REPLACE_READLINKAT@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMAINDER = @REPLACE_REMAINDER@ +REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ +REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SINF = @REPLACE_SINF@ +REPLACE_SINHF = @REPLACE_SINHF@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_SQRTF = @REPLACE_SQRTF@ +REPLACE_SQRTL = @REPLACE_SQRTL@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRFTIME = @REPLACE_STRFTIME@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ +REPLACE_TANF = @REPLACE_TANF@ +REPLACE_TANHF = @REPLACE_TANHF@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TRUNC = @REPLACE_TRUNC@ +REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ +REPLACE_TRUNCF = @REPLACE_TRUNCF@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_TZSET = @REPLACE_TZSET@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SED = @SED@ +SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ +UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +USE_ACL = @USE_ACL@ +USE_NLS = @USE_NLS@ +UUIDLIBS = @UUIDLIBS@ +VERSION = @VERSION@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ +WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ +WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +crypt_support = @crypt_support@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +have_uuid = @have_uuid@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +dist_lisp_DATA = rec-mode.el ob-rec.el +etcdir = $(pkgdatadir)/etc +dist_etc_DATA = FSD.rec +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu etc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu etc/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_etcDATA: $(dist_etc_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_etc_DATA)'; test -n "$(etcdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(etcdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(etcdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(etcdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(etcdir)" || exit $$?; \ + done + +uninstall-dist_etcDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_etc_DATA)'; test -n "$(etcdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(etcdir)'; $(am__uninstall_files_from_dir) +install-dist_lispDATA: $(dist_lisp_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_lisp_DATA)'; test -n "$(lispdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(lispdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(lispdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(lispdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(lispdir)" || exit $$?; \ + done + +uninstall-dist_lispDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_lisp_DATA)'; test -n "$(lispdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(lispdir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(etcdir)" "$(DESTDIR)$(lispdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-dist_etcDATA install-dist_lispDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_etcDATA uninstall-dist_lispDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-dist_etcDATA install-dist_lispDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am uninstall-dist_etcDATA \ + uninstall-dist_lispDATA + +.PRECIOUS: Makefile + + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/etc/ob-rec.el b/devspec.en_US/project/recutils/etc/ob-rec.el new file mode 100755 index 0000000..c4e1fc8 --- /dev/null +++ b/devspec.en_US/project/recutils/etc/ob-rec.el @@ -0,0 +1,79 @@ +;;; ob-rec.el --- org-babel functions for recutils evaluation + +;; Copyright (C) 2011-2019 Free Software Foundation + +;; Author: Jose E. Marchesi +;; Keywords: literate programming, reproducible research +;; Homepage: http://orgmode.org +;; Version: 7.7 + +;; This file is NOT part of GNU Emacs. + +;; This program is free software: you can redistribute it and/or +;; modify it under the terms of the GNU General Public License as +;; published by the Free Software Foundation, either version 3 of the +;; License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. + +;;; Commentary: + +;; Org-Babel support for evaluating recsel queries and substituing the +;; contained template. See http://www.gnu.org/software/recutils/ + +;;; Code: +(require 'ob) + +(defvar org-babel-default-header-args:rec + '((:exports . "results"))) + +(defun org-babel-execute:rec (body params) + "Execute a block containing a recsel query. +This function is called by `org-babel-execute-src-block'." + (let* ((in-file ((lambda (el) + (or el + (error + "rec code block requires :data header argument"))) + (cdr (assoc :data params)))) + (result-params (cdr (assq :result-params params))) + (cmdline (cdr (assoc :cmdline params))) + (rec-type (cdr (assoc :type params))) + (fields (cdr (assoc :fields params))) + (join (cdr (assoc :join params))) + (sort (cdr (assoc :sort params))) + (groupby (cdr (assoc :groupby params))) + (cmd (concat "recsel" + (when rec-type (concat " -t " rec-type " ")) + " " (expand-file-name in-file) + (when (> (length (org-babel-trim body)) 0) + (concat " -e " "\"" + (replace-regexp-in-string "\"" "\\\\\"" body) + "\"")) + (when join (concat " -j " join " ")) + (when sort (concat " -S " sort " ")) + (when groupby (concat " -G " groupby " ")) + (when fields (concat " -p " fields " ")))) + (do-raw (or (member "scalar" result-params) + (member "html" result-params) + (member "code" result-params) + (member "verbatim" result-params) + (equal (point-min) (point-max))))) + (unless do-raw + ;; Get the csv representation, that will be used by + ;; org-table-convert-region below. + (setq cmd (concat cmd " | rec2csv"))) + (with-temp-buffer + (shell-command cmd (current-buffer)) + (if do-raw + (buffer-string) + (org-table-convert-region (point-min) (point-max) '(4)) + (let ((table (org-table-to-lisp))) + ;; The first row always contains the table header. + (cons (car table) (cons 'hline (cdr table)))))))) + +(provide 'ob-rec) + +;; ob-rec.el ends here diff --git a/devspec.en_US/project/recutils/etc/rec-mode.el b/devspec.en_US/project/recutils/etc/rec-mode.el new file mode 100755 index 0000000..f27ab45 --- /dev/null +++ b/devspec.en_US/project/recutils/etc/rec-mode.el @@ -0,0 +1,2210 @@ +;;; rec-mode.el --- Major mode for viewing/editing rec files + +;; Copyright (C) 2009-2019 Jose E. Marchesi + +;; Maintainer: Jose E. Marchesi + +;; This file is NOT part of GNU Emacs. + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; A major mode for editing rec files. +;; +;; To see the structure of this file activate the outline minor mode +;; and execute M-xhide-body + +;;; Code: + +(require 'compile) +(eval-when-compile (require 'cl)) +(require 'calendar) +(require 'hl-line) +(require 'tabulated-list) + +;;;; Customization + +(defgroup rec-mode nil + "rec-mode subsystem" + :group 'applications + :link '(url-link "http://www.gnu.org/software/recutils")) + +(defcustom rec-open-mode 'navigation + "Default mode to use when switching a buffer to rec-mode. +Valid values are `edit' and `navigation'. The default is `navigation'" + :type 'symbol + :group 'rec-mode) + +(defcustom rec-popup-calendar t + "Whether to use a popup calendar to select dates when editing field +values. The default is `t'." + :type 'boolean + :group 'rec-mode) + +(defcustom rec-mode-hook nil + "Hook run when entering rec mode." + :type 'hook + :group 'rec-mode) + +(defvar rec-max-lines-in-fields 15 + "Values of fields having more than the specified lines will be +hidden by default in navigation mode.") + +(defvar rec-recsel "recsel" + "Name of the 'recsel' utility from the GNU recutils.") + +(defvar rec-recinf "recinf" + "Name of the 'recinf' utility from the GNU recutils.") + +(defvar rec-recfix "recfix" + "Name of the 'recfix' utility from the GNU recutils.") + +(defface rec-field-name-face '((t :weight bold)) "" :group 'rec-mode) +(defface rec-keyword-face '((t :weight bold)) "" :group 'rec-mode) +(defface rec-continuation-line-face '((t :weight bold)) "" :group 'rec-mode) + +;;;; Variables and constants that the user does not want to touch (really!) + +(defconst rec-mode-version "1.5" + "Version of rec-mode.el") + +(defconst rec-keyword-prefix "%" + "Prefix used to distinguish special fields.") + +(defconst rec-keyword-rec (concat rec-keyword-prefix "rec") + ;; Remember to update `rec-font-lock-keywords' if you change this + ;; value!! + "Rec keyword.") + +(defconst rec-keyword-key (concat rec-keyword-prefix "key") + "Key keyword.") + +(defconst rec-keyword-mandatory (concat rec-keyword-prefix "mandatory") + "Mandatory keyword.") + +(defconst rec-keyword-summary (concat rec-keyword-prefix "summary") + "Summary keyword.") + +(defconst rec-time-stamp-format "%Y-%m-%d %a %H:%M" + "Format for `format-time-string' which is used for time stamps.") + +(defvar rec-comment-re "^#.*" + "regexp denoting a comment line") + +(defvar rec-comment-field-re "^\\(#.*\n\\)*\\([a-zA-Z0-1_%-]+:\\)+" + "regexp denoting the beginning of a record") + +(defvar rec-field-name-re + "^[a-zA-Z%][a-zA-Z0-9_]*:" + "Regexp matching a field name") + +(defvar rec-field-value-re + (let ((ret-re "\n\\+ ?") + (esc-ret-re "\\\\\n")) + (concat + "\\(" + "\\(" ret-re "\\)*" + "\\(" esc-ret-re "\\)*" + "\\(" "\\\\[^\n]" "\\)*" + "[^\\\n]*" + "\\)*")) + "Regexp matching a field value") + +(defvar rec-field-re + (concat rec-field-name-re + rec-field-value-re + "\n") + "Regexp matching a field") + +(defvar rec-record-re + (concat rec-field-re "\\(" rec-field-re "\\|" rec-comment-re "\\)*") + "Regexp matching a record") + +(defvar rec-mode-syntax-table + (let ((st (make-syntax-table))) + (modify-syntax-entry ?# "<" st) ; Comment start + (modify-syntax-entry ?\n ">" st) ; Comment end + (modify-syntax-entry ?\" "w" st) + (modify-syntax-entry ?\' "w" st) + st) + "Syntax table used in rec-mode") + +(defvar rec-font-lock-keywords +`((,(concat "^" rec-keyword-prefix "[a-zA-Z0-9_]+:") . rec-field-name-face) + (,rec-field-name-re . rec-keyword-face) + ("^\\+" . rec-continuation-line-face)) +"Font lock keywords used in rec-mode") + +(defvar rec-mode-edit-map + (let ((map (make-sparse-keymap))) + (define-key map "\C-cn" 'rec-cmd-goto-next-rec) + (define-key map "\C-cp" 'rec-cmd-goto-previous-rec) + (define-key map "\C-ce" 'rec-cmd-edit-field) + (define-key map "\C-cd" 'rec-cmd-show-descriptor) + (define-key map "\C-ct" 'rec-cmd-show-type) + (define-key map "\C-c#" 'rec-cmd-count) + (define-key map "\C-cm" 'rec-cmd-trim-field-value) + (define-key map "\C-cc" 'rec-cmd-compile) + (define-key map "\C-csq" 'rec-cmd-select-fast) + (define-key map "\C-css" 'rec-cmd-select-sex) + (define-key map "\C-ch" 'rec-cmd-show-summary) + (define-key map "\C-cI" 'rec-cmd-show-info) + (define-key map "\C-cf\C-w" 'rec-cmd-kill-field) + (define-key map "\C-cf\M-w" 'rec-cmd-copy-field) + (define-key map "\C-cr\C-w" 'rec-cmd-kill-record) + (define-key map "\C-cr\M-w" 'rec-cmd-copy-record) + (define-key map (kbd "TAB") 'rec-cmd-goto-next-field) + (define-key map "\C-cb" 'rec-cmd-jump-back) + (define-key map "\C-c\C-c" 'rec-finish-editing) + map) + "Keymap for rec-mode") + +(defvar rec-mode-map + (let ((map (make-sparse-keymap))) + (define-key map "n" 'rec-cmd-goto-next-rec) + (define-key map "p" 'rec-cmd-goto-previous-rec) + (define-key map "e" 'rec-cmd-edit-field) + (define-key map "R" 'rec-edit-record) + (define-key map "T" 'rec-edit-type) + (define-key map "B" 'rec-edit-buffer) + (define-key map "A" 'rec-cmd-append-field) + (define-key map "I" 'rec-cmd-show-info) + (define-key map "d" 'rec-cmd-show-descriptor) + (define-key map "t" 'rec-cmd-show-type) + (define-key map "m" 'rec-cmd-trim-field-value) + (define-key map "c" 'rec-cmd-compile) + (define-key map "f\C-w" 'rec-cmd-kill-field) + (define-key map "f\M-w" 'rec-cmd-copy-field) + (define-key map "r\C-w" 'rec-cmd-kill-record) + (define-key map "r\M-w" 'rec-cmd-copy-record) + (define-key map "f\C-w" 'rec-cmd-kill-field) + (define-key map "f\M-w" 'rec-cmd-copy-field) + (define-key map "sq" 'rec-cmd-select-fast) + (define-key map "ss" 'rec-cmd-select-sex) + (define-key map "h" 'rec-cmd-show-summary) + (define-key map "\C-ct" 'rec-find-type) +;; (define-key map [remap move-beginning-of-line] 'rec-cmd-beginning-of-line) + (define-key map [remap undo] 'rec-cmd-undo) + (define-key map "#" 'rec-cmd-count) + (define-key map "%" 'rec-cmd-statistic) + (define-key map (kbd "RET") 'rec-cmd-jump) + (define-key map (kbd "TAB") 'rec-cmd-goto-next-field) + (define-key map (kbd "SPC") 'rec-cmd-toggle-field-visibility) + (define-key map "b" 'rec-cmd-jump-back) + map) + "Keymap for rec-mode") + +;;;; Parsing functions (rec-parse-*) +;; +;; Those functions read the contents of the buffer (starting at the +;; current position of the pointer) and try to parse field, comment +;; and records structures. + +(defun rec-parse-comment () + "Parse and return a comment starting at point. + +Return a list whose first element is the symbol 'comment and the +second element is the string with the contents of the comment, +including the leading #: + + (comment POSITION \"# foo\") + +If the point is not at the beginning of a comment then return nil" + (let ((there (point)) + comment) + (when (and (equal (current-column) 0) + (looking-at rec-comment-re)) + (setq comment (list 'comment + there + (buffer-substring-no-properties (match-beginning 0) + (match-end 0)))) + (goto-char (match-end 0)) + ;; Skip a newline if needed + (when (looking-at "\n") (goto-char (match-end 0)))) + comment)) + +(defun rec-parse-field-name () + "Parse and return a field name starting at point. +If the point is not at the beginning of a field name return nil" + (when (and (equal (current-column) 0) + (looking-at rec-field-name-re)) + (goto-char (match-end 0)) + (buffer-substring-no-properties (match-beginning 0) + (- (match-end 0) 1)))) + +(defun rec-parse-field-value () + "Return the field value under the pointer. + +Return a string containing the value of the field. + +If the pointer is not at the beginning of a field value, return +nil" + (when (looking-at rec-field-value-re) + (goto-char (match-end 0)) + (let ((val (buffer-substring-no-properties (match-beginning 0) + (match-end 0)))) + ;; Replace escaped newlines + (setq val (replace-regexp-in-string "\\\\\n" "" val)) + ;; Replace continuation lines + (setq val (replace-regexp-in-string "\n\\+ ?" "\n" val)) + ;; Remove the initial blank + (with-temp-buffer + (insert val) + (goto-char (point-min)) + (if (equal (char-after (point)) ? ) + (progn + (delete-char 1))) + (setq val (buffer-substring-no-properties (point-min) + (point-max)))) + val))) + +(defun rec-parse-field () + "Return a structure describing the field starting from the +pointer. + +The returned structure is a list whose first element is the +symbol 'field', the second element is the name of the field and +the second element is the value of the field: + + (field POSITION FIELD-NAME FIELD-VALUE) + +If the pointer is not at the beginning of a field +descriptor then return nil" + (let ((there (point)) + field-name field-value) + (and (setq field-name (rec-parse-field-name)) + (setq field-value (rec-parse-field-value))) + (when (and field-name field-value) + ;; Skip a newline if needed + (when (looking-at "\n") (goto-char (match-end 0))) + (list 'field there field-name field-value)))) + +(defun rec-parse-record () + "Return a structure describing the record starting from the pointer. + +The returned structure is a list of fields preceded by the symbol +'record': + + (record POSITION (FIELD-1 FIELD-2 ... FIELD-N)) + +If the pointer is not at the beginning of a record, then return +nil" + (let ((there (point)) + record field-or-comment) + (while (setq field-or-comment (or (rec-parse-field) + (rec-parse-comment))) + (setq record (cons field-or-comment record))) + (setq record (list 'record there (reverse record))))) + +;;;; Writer functions (rec-insert-*) +;; +;; Those functions dump the written representation of the parser +;; structures (field, comment, record, etc) into the current buffer +;; starting at the current position. + +(defun rec-insert-comment (comment) + "Insert the written form of COMMENT in the current buffer" + (when (rec-comment-p comment) + (insert (rec-comment-string comment)))) + +(defun rec-insert-field-name (field-name) + "Insert the written form of FIELD-NAME in the current buffer" + (when (stringp field-name) + (insert (concat field-name ":")) + t)) + +(defun rec-insert-field-value (field-value) + "Insert the written form of FIELD-VALUE in the current buffer" + (when (stringp field-value) + (let ((val field-value)) + ;; FIXME: Maximum line size + (insert (replace-regexp-in-string "\n" "\n+ " val))) + (insert "\n"))) + +(defun rec-insert-field (field) + "Insert the written form of FIELD in the current buffer" + (when (rec-field-p field) + (when (rec-insert-field-name (rec-field-name field)) + (insert " ") + (rec-insert-field-value (rec-field-value field))))) + +(defun rec-insert-record (record) + "Insert the written form of RECORD in the current buffer." + (when (rec-record-p record) + (mapcar (lambda (elem) + (cond + ((rec-comment-p elem) (rec-insert-comment elem)) + ((rec-field-p elem) (rec-insert-field elem)))) + (rec-record-elems record)))) + +;;;; Operations on record structures +;; +;; Those functions retrieve or set properties of field structures. + +(defun rec-record-p (record) + "Determine if the provided structure is a record." + (and (listp record) + (= (length record) 3) + (equal (car record) 'record))) + +(defun rec-record-position (record) + "Return the start position of the given record." + (when (rec-record-p record) + (nth 1 record))) + +(defun rec-record-elems (record) + "Return a list with the elements of the given record." + (when (rec-record-p record) + (nth 2 record))) + +(defun rec-record-descriptor-p (record) + "Determine if the given record is a descriptor." + (not (null (rec-record-assoc rec-keyword-rec record)))) + +(defun rec-record-assoc (name record) + "Get a list with the values of the fields in RECORD named NAME. + +NAME shall be a field name. +If no such field exists in RECORD then nil is returned." + (when (rec-record-p record) + (let (result) + (mapc (lambda (field) + (when (and (rec-field-p field) + (equal name (rec-field-name field))) + (setq result (cons (rec-field-value field) result)))) + (rec-record-elems record)) + (reverse result)))) + +(defun rec-record-names (record) + "Get a list of the field names in the record" + (when (rec-record-p record) + (let (result) + (mapc (lambda (field) + (when (rec-field-p field) + (setq result (cons (rec-field-name field) result)))) + (rec-record-elems record)) + (reverse result)))) + +(defun rec-record-values (record fields) + "Given a list of field names, return a list of the values." + (when fields + (append (rec-record-assoc (car fields) record) + (rec-record-values record (cdr fields))))) + +;;;; Operations on comment structures +;; +;; Those functions retrieve or set properties of comment structures. + +(defun rec-comment-p (comment) + "Determine if the provided structure is a comment" + (and (listp comment) + (= (length comment) 3) + (equal (car comment) 'comment))) + +(defun rec-comment-position (comment) + "Return the start position of the given comment." + (when (rec-comment-p comment) + (nth 1 comment))) + +(defun rec-comment-string (comment) + "Return the string composig the comment, including the initial '#' character." + (when (rec-comment-p comment) + (nth 2 comment))) + +;;;; Operations on field structures +;; +;; Those functions retrieve or set properties of field structures. + +(defun rec-field-p (field) + "Determine if the provided structure is a field" + (and (listp field) + (= (length field) 4) + (equal (car field) 'field))) + +(defun rec-field-position (field) + "Return the start position of the given field." + (when (rec-field-p field) + (nth 1 field))) + +(defun rec-field-name (field) + "Return the name of the provided field" + (when (rec-field-p field) + (nth 2 field))) + +(defun rec-field-value (field) + "Return the value of the provided field" + (when (rec-field-p field) + (nth 3 field))) + +(defun rec-field-set-value (field value) + "Return FIELD with its value replaced by VALUE." + (list 'field + (rec-field-position field) + (rec-field-name field) + value)) + +(defun rec-field-trim-value (field) + "Return FIELD with its value trimmed." + (when (rec-field-p field) + (let ((value (rec-field-value field)) + c) + (with-temp-buffer + (insert value) + (goto-char (point-min)) + (when (looking-at "[ \t\n][ \t\n]+") + (delete-region (match-beginning 0) + (match-end 0))) + (goto-char (point-max)) + (setq c (char-before)) + (while (and c + (or (equal c ?\n) + (equal c ?\t) + (equal c ? ))) + (backward-char) + (setq c (char-before))) + (delete-region (point) (point-max)) + (setq value (buffer-substring-no-properties (point-min) + (point-max)))) + (rec-field-set-value field value)))) + +;;;; Get entities under pointer +;; +;; Those functions retrieve structures of the entities under pointer +;; like comments, fields and records. If the especified entity is not +;; under the pointer then nil is returned. + +(defun rec-beginning-of-field-pos () + "Return the position of the beginning of the current field, or +nil if the pointer is not on a field." + (save-excursion + (beginning-of-line) + (let (res exit) + (while (not exit) + (cond + ((and (not (= (line-beginning-position) 1)) + (or (looking-at "+") + (looking-back "\\\\\n" 2))) + (forward-line -1)) + ((looking-at rec-field-name-re) + (setq res (point)) + (setq exit t)) + (t + (setq exit t)))) + res))) + +(defun rec-end-of-field-pos () + "Return the position of the end of the current field, or nil if +the pointer is not on a field." + (let ((begin-pos (rec-beginning-of-field-pos))) + (when begin-pos + (save-excursion + (goto-char begin-pos) + ;; The following hack is due to the fact that + ;; the regular expressions search engine is + ;; hanging on rec-field-re + (when (looking-at rec-field-name-re) + (goto-char (match-end 0))) + (when (looking-at rec-field-value-re) + (match-end 0)))))) + +(defun rec-beginning-of-comment-pos () + "Return the position of the beginning of the current comment, +or nil if the pointer is not on a comment." + (save-excursion + (beginning-of-line) + (when (looking-at rec-comment-re) + (point)))) + +(defun rec-end-of-comment-pos () + "Return the position of the end of the current comment, +or nil if the pointer is not on a comment." + (let ((begin-pos (rec-beginning-of-comment-pos))) + (when begin-pos + (save-excursion + (goto-char begin-pos) + (when (looking-at rec-comment-re) + (match-end 0)))))) + +(defun rec-beginning-of-record-pos () + "Return the position of the beginning of the current record, or nil if +the pointer is not on a record." + (save-excursion + (let (field-pos prev-pos) + (setq prev-pos (point)) + (while (and (not (equal (point) (point-min))) + (or (setq field-pos (rec-beginning-of-field-pos)) + (setq field-pos (rec-beginning-of-comment-pos)))) + (goto-char field-pos) + (if (not (equal (point) (point-min))) + (backward-char))) + (unless (or (eobp) + (looking-at rec-comment-field-re)) + (forward-char)) + (when (looking-at rec-comment-field-re) + (point))))) + +(defun rec-end-of-record-pos () + "Return the position of the end of the current record, +or nil if the pointer is not on a record." + (let ((begin-pos (rec-beginning-of-record-pos))) + (when begin-pos + (save-excursion + (goto-char begin-pos) + (while (or (looking-at rec-field-name-re) + (looking-at rec-comment-re)) + (goto-char (match-end 0)) + (when (or (looking-at rec-field-value-re) + (looking-at rec-comment-re)) + (goto-char (+ (match-end 0) 1)))) + (point))))) + +(defun rec-current-field () + "Return a structure with the contents of the current field. +The current field is the field where the pointer is." + (save-excursion + (let ((begin-pos (rec-beginning-of-field-pos))) + (when begin-pos + (goto-char begin-pos) + (rec-parse-field))))) + +(defun rec-current-field-type () + "Return the field type of the field under point, if any." + (let ((current-field (rec-current-field))) + (when current-field + (rec-field-type (rec-field-name current-field))))) + +(defun rec-current-record () + "Return a structure with the contents of the current record. +The current record is the record where the pointer is" + (save-excursion + (let ((begin-pos (rec-beginning-of-record-pos))) + (when begin-pos + (goto-char begin-pos) + (rec-parse-record))))) + +;;;; Visibility +;; +;; These functions manage the visibility in the rec buffer. + +(defun rec-narrow-to-record () + "Narrow to the current record, if any" + (let ((begin-pos (rec-beginning-of-record-pos)) + (end-pos (rec-end-of-record-pos))) + (if (and begin-pos end-pos) + (narrow-to-region begin-pos end-pos)))) + +(defun rec-narrow-to-type (type) + "Narrow to the specified type, if any" + (let ((begin-pos (or (rec-type-pos type) (point-min))) + (end-pos (or (rec-type-pos (rec-type-next type)) (point-max)))) + (narrow-to-region begin-pos end-pos))) + +;;;; Record collection management +;; +;; These functions perform the management of the collection of records +;; in the buffer. + +(defun rec-buffer-valid-p () + "Determine whether the current buffer contains valid rec data." + (equal (call-process-region (point-min) (point-max) + rec-recinf + nil ; delete + nil ; discard output + nil ; display + ) 0)) + +(defun rec-update-buffer-descriptors-and-check (&optional dont-go-fundamental) + "Update buffer descriptors and switch to fundamental mode if +there is a parse error." + (if (rec-buffer-valid-p) + (progn + (rec-update-buffer-descriptors) + t) + (unless dont-go-fundamental + (fundamental-mode)) + (let* ((cur-buf (current-buffer)) + (errmsg (with-temp-buffer + (let ((err-buf (current-buffer))) + (with-current-buffer cur-buf + (call-process-region (point-min) (point-max) + rec-recfix + nil ; delete + (list err-buf t) + nil ; display + "--check"))) + (goto-char (point-min)) + (when (looking-at "stdin: ") + (delete-region (point-min) (match-end 0))) + (goto-char (point-max)) + (when (equal (char-after) ?\n) + (delete-char 1)) + (buffer-substring (point-min) (- (point-max) 1))))) + (message (concat (buffer-name) ": " errmsg)) + nil))) + +(defun rec-update-buffer-descriptors () + "Get a list of the record descriptors in the current buffer. + +If the contents of the current buffer are not valid rec data then +this function returns `nil'." + (setq rec-buffer-descriptors + (let ((buffer (generate-new-buffer "Rec Inf ")) + descriptors records status) + ;; Call 'recinf' to get the list of record descriptors in + ;; sexp format. + (setq status (call-process-region (point-min) (point-max) + rec-recinf + nil ; delete + buffer + nil ; display + "-S" "-d")) + (if (equal status 0) + (progn (with-current-buffer buffer + (goto-char (point-min)) + (insert "(") + (goto-char (point-max)) + (insert ")") + (unwind-protect + (setq descriptors (read (point-min-marker))) + (kill-buffer buffer))) + (when descriptors + (mapc (lambda (descriptor) + (let ((marker (make-marker))) + (set-marker marker (rec-record-position descriptor)) + (setq records (cons (list 'descriptor descriptor marker) + records)))) + descriptors) + (reverse records))) + (kill-buffer buffer) + nil)))) + +(defun rec-buffer-types () + "Return a list with the names of the record types in the +existing buffer." + ;; If a descriptor has more than a %rec field, then the first one is + ;; used. The rest are ignored. + (mapcar + (lambda (elem) + (car (rec-record-assoc rec-keyword-rec (cadr elem)))) + rec-buffer-descriptors)) + +(defun rec-type-p (type) + "Determine if there are records of type TYPE in the current +file." + (member type (rec-buffer-types))) + +(defun rec-goto-type (type) + "Goto the beginning of the descriptor with type TYPE. + +If there are records of type TYPE in the record set then goto the +first record. Otherwise goto to the record descriptor. + +If the type do not exist in the current buffer then +this function returns nil." + (if (or (not type) + (equal type "")) + ;; If there is a regular record in the + ;; beginning of the file, go there. + (if (save-excursion + (goto-char (point-min)) + (unless (looking-at rec-comment-field-re) + (rec-goto-next-rec)) + (rec-regular-p)) + (progn + (goto-char (point-min)) + (unless (looking-at rec-comment-field-re) + (rec-goto-next-rec)) + t) + nil) + (let (found + (descriptors rec-buffer-descriptors)) + (mapc + (lambda (elem) + (when (equal (car (rec-record-assoc rec-keyword-rec + (cadr elem))) + type) + (setq found t) + (goto-char (nth 2 elem)))) + descriptors) + found))) + +(defun rec-type-pos (type) + "Return the position where the records of type TYPE start in +the current file. If no records of type TYPE are defined in the +current file then return nil." + (when (rec-type-p type) + (save-excursion + (rec-goto-type type) + (point)))) + +(defun rec-type-next (type) + "Return the name of the type following TYPE in the file, if +any. If the specified type is the last appearing in the file, +or the specified type does not exist, then return nil." + (let ((types (member type (rec-buffer-types)))) + (nth 1 types))) + +(defun rec-type-previous (type) + "Return the name of the type preceding TYPE in the file, if +any. If the specified type is the first appearing in the file, +or the specified type does not exist, then return nil." + (let ((types (member type (reverse (rec-buffer-types))))) + (nth 1 types))) + +(defun rec-goto-next-field () + "Move the pointer to the beginning of the next field in the +file." + (let ((pos (save-excursion + (rec-end-of-field) + (when (re-search-forward rec-field-name-re nil t) + (match-beginning 0))))) + (when pos + (goto-char pos) + t))) + +(defun rec-goto-next-rec () + "Move the pointer to the beginning of the next record in the +file." + (let ((pos (save-excursion + (rec-end-of-record) + (when (re-search-forward rec-comment-field-re nil t) + (match-beginning 0))))) + (when pos + (goto-char pos) + t))) + +(defun rec-goto-previous-rec () + "Move the pointer to the end of the previous record in the +file." + (let ((pos (save-excursion + (rec-beginning-of-record) + (if (not (= (point) (point-min))) + (backward-char)) + (when (and (re-search-backward rec-record-re nil t) + (rec-beginning-of-record)) + (point))))) + (when pos + (goto-char pos) + t))) + +(defun rec-type-first-rec-pos (type) + "Return the position of the first record of the specified TYPE. + +If TYPE is nil then return the position of the first regular record in the file. +If there are no regular records in the file, return nil." + (save-excursion + (when (or (not type) (rec-type-p type)) + (if type + (rec-goto-type type) + (goto-char (point-min))) + ;; Find the next regular record + (when (and (rec-goto-next-rec) + (rec-regular-p)) + (point))))) + +(defun rec-goto-type-first-rec (type) + "Goto to the first record of type TYPE present in the file. +If TYPE is nil then goto to the first Unknown record on the file. + +If the record is found, return its position. +If no such record exist then don't move and return nil." + (let ((pos (rec-type-first-rec-pos type))) + (when pos + (goto-char pos)))) + +(defun rec-count (&optional type sex) + "If TYPE is a string, return the number of records of the +specified type in the current file." + (let (num + (rec-file-name (if buffer-file-name + buffer-file-name + ""))) + (with-temp-buffer + (if (stringp type) + (if (stringp sex) + (call-process rec-recsel + nil ; infile + t ; output to current buffer. + nil ; display + "-t" type "-e" sex "-c" rec-file-name) + (call-process rec-recsel + nil ; infile + t ; output to current buffer. + nil ; display + "-t" type "-c" rec-file-name)) + (if (stringp sex) + (call-process rec-recsel + nil ; infile + t ; output to current buffer. + nil ; display + "-e" sex "-c" rec-file-name) + (call-process rec-recsel + nil ; infile + t ; output to current buffer. + nil ; display + "-c" rec-file-name))) + (setq num (buffer-substring-no-properties (point-min) (point-max)))) + (string-to-number num))) + +(defun rec-regular-p () + "Return t if the record under point is a regular record. +Return nil otherwise." + (let ((rec (rec-current-record))) + (when rec + (= (length (rec-record-assoc rec-keyword-rec rec)) + 0)))) + +(defun rec-record-type () + "Return the type of the record under point. + +If the record is of no known type, return nil." + (let ((descriptor (rec-record-descriptor))) + (cond + ((listp descriptor) + (car (rec-record-assoc rec-keyword-rec + (cadr descriptor)))) + ((equal descriptor "") + "") + (t + nil)))) + +(defun rec-record-descriptor () + "Return the record descriptor of the record under point. + +Return \"\" if no proper record descriptor is found in the file. +Return nil if the point is not on a record." + (when (rec-current-record) + (let ((descriptors rec-buffer-descriptors) + descriptor type position found + (i 0)) + (while (and (not found) + (< i (length descriptors))) + (setq descriptor (nth i rec-buffer-descriptors)) + (setq position (marker-position (nth 2 descriptor))) + (if (and (>= (point) position) + (or (= i (- (length rec-buffer-descriptors) 1)) + (< (point) (marker-position (nth 2 (nth (+ i 1) rec-buffer-descriptors)))))) + (setq found t) + (setq i (+ i 1)))) + (if found + descriptor + nil)))) + +(defun rec-summary-fields () + "Return a list with the names of the summary fields in the +current record set." + (let ((descriptor (cadr (rec-record-descriptor)))) + (when descriptor + (let ((fields-str (rec-record-assoc rec-keyword-summary descriptor))) + (when fields-str + (split-string (car fields-str))))))) + +(defun rec-mandatory-fields () + "Return a list with the names of the mandatory fields in the +current record set." + (let ((descriptor (cadr (rec-record-descriptor)))) + (when descriptor + (let ((fields-str (rec-record-assoc rec-keyword-mandatory descriptor))) + (when fields-str + (split-string (car fields-str))))))) + +(defun rec-key () + "Return the name of the field declared as the key of the +current record set, if any. Otherwise return `nil'." + (let ((descriptor (cadr (rec-record-descriptor)))) + (when descriptor + (let ((key (rec-record-assoc rec-keyword-key descriptor))) + (when key + (car key)))))) + +;;;; Navigation + +(defun rec-show-type (type &optional show-descriptor) + "Show the records of the given type. If TYPE is nil then the records +of the default type are shown." + (widen) + (unless (rec-goto-type type) + (message "No records of the requested type were found.")) + ;; Show the first data record of this type, if it exists. + (if (and (not show-descriptor) + (save-excursion + (let ((record-type (rec-record-type))) + (and (rec-goto-next-rec) + (equal (rec-record-type) record-type))))) + (rec-goto-next-rec)) + (rec-show-record)) + +(defun rec-show-record () + "Show the record under the point" + (setq buffer-read-only t) + (rec-narrow-to-record) + (use-local-map rec-mode-map) + (rec-set-head-line nil) + (rec-set-mode-line (rec-record-type)) + ;; Hide the contents of big fields. + (rec-hide-record-fields) + ;; Change the appearance of continuation line markers to look like + ;; indentation. + (rec-hide-continuation-line-markers)) + +(defvar rec-continuation-line-markers-width 4 + "Width (in number of characters) used to represent continuation + line markers in navigation mode.") + +(defvar rec-continuation-line-markers-overlays nil + "Continuation line markers overlays.") + +(defun rec-hide-continuation-line-markers () + "Change the appearance of continuation line markers in the +current buffer to look like indentation." + (let ((record (rec-current-record))) + (when (rec-record-p record) + (mapcar + (lambda (field) + (when (rec-field-p field) + (let* ((pos (rec-field-position field)) + (value-begin (+ pos (length (rec-field-name field)) 1)) + (value-end (+ value-begin + (length (with-temp-buffer + (rec-insert-field-value (rec-field-value field)) + (buffer-substring (point-min) (point-max))))))) + (save-excursion + (goto-char value-begin) + (while (re-search-forward "^\\+ ?" (+ value-end 1) t) + (let ((ov (make-overlay (match-beginning 0) (match-end 0)))) + (overlay-put ov 'display '(space . (:width rec-continuation-line-markers-width))) + (push ov rec-continuation-line-markers-overlays))))))) + (rec-record-elems record))))) + +(defun rec-remove-continuation-line-marker-overlays () + "Delete all the continuation line markers overlays." + (mapc 'delete-overlay rec-continuation-line-markers-overlays) + (setq rec-continuation-line-markers-overlays nil)) + +;;;; Field folding + +(defvar rec-hide-field-overlays nil + "Overlays hiding fields.") + +(defun rec-hide-record-fields () + "Hide the contents of fields whose value exceeds +`rec-max-lines-in-fields' lines. TAB can then be used to toggle +the visibility." + (let ((record (rec-current-record))) + (when (rec-record-p record) + (mapcar + (lambda (field) + (when (rec-field-p field) + (let ((lines-in-value (with-temp-buffer + (insert (rec-field-value field)) + (count-lines (point-min) (point-max)))) + ov) + (when (> lines-in-value rec-max-lines-in-fields) + (save-excursion + (goto-char (rec-field-position field)) + (rec-fold-field)) + t)))) + (rec-record-elems record))))) + +(defun rec-field-folded-p () + "Return whether the current field is folded." + (let ((field (rec-current-field))) + (when (rec-field-p field) + (let ((value-start (+ (point) (length (rec-field-name field)) 1))) + (memq t (mapcar (lambda (overlay) + (eq (overlay-get overlay 'invisible) + 'rec-hide-field)) + (overlays-at value-start))))))) + +(defun rec-fold-field () + "Fold the current field." + (let ((field (rec-current-field))) + (when (rec-field-p field) + (save-excursion + (goto-char (rec-field-position field)) + (when (looking-at rec-field-re) + (let ((value-start (+ (point) (length (rec-field-name field)) 1)) + (value-end (- (match-end 0) 1)) + ov) + (setq ov (make-overlay value-start value-end)) + (overlay-put ov 'invisible 'rec-hide-field) + (push ov rec-hide-field-overlays))))))) + +(defun rec-unfold-field () + "Unfold the current field." + (let ((field (rec-current-field))) + (when (rec-field-p field) + (let ((value-start (+ (point) (length (rec-field-name field)) 1))) + (mapcar (lambda (overlay) + (when (eq (overlay-get overlay 'invisible) 'rec-hide-field) + (delete-overlay overlay))) + (overlays-at value-start)))))) + +(defun rec-unfold-all-fields () + "Unfold all folded fields in the buffer." + (mapc 'delete-overlay rec-hide-field-overlays) + (setq rec-hide-field-overlays nil)) + +(defun rec-unfold-record-fields () + "Unfold any folded field in the current record." + (let ((record (rec-current-record))) + (when (rec-record-p record) + (mapcar + (lambda (field) + (when (rec-field-p field) + (save-excursion + (goto-char (rec-field-position field)) + (rec-unfold-field)))) + (rec-record-elems record))))) + +(defun rec-toggle-field-visibility () + "Toggle the visibility of the current field." + (let ((field (rec-current-field))) + (when (rec-field-p field) + (save-excursion + (goto-char (rec-field-position field)) + (when (looking-at rec-field-re) + (let* ((value-start (+ (point) (length (rec-field-name field)) 1)) + (value-end (- (match-end 0) 1)) + ov) + (if (memq t (mapcar (lambda (overlay) + (eq (overlay-get overlay 'invisible) + 'rec-hide-field)) + (overlays-at value-start))) + (mapcar + (lambda (overlay) + (delete-overlay overlay)) + (overlays-at value-start)) + (setq ov (make-overlay value-start value-end)) + (overlay-put ov 'invisible 'rec-hide-field)))))))) + +;;;; Field types +;; +;; This section contains functions and variable implementing field +;; types as described in the recutils manual. +;; +;; Each type is stored in a structure like: +;; +;; (type KIND EXPR DATA) +;; +;; Where EXPR is the type descriptor used to create the type, and NAME +;; is the name of the type. +;; +;; KIND is the class of the type, and is one of: +;; +;; int, bool, range, real, size, line, regexp, date, +;; enum, field, email, uuid, rec +;; +;; DESCR is the data describing the type, and its value depends on the +;; kind: +;; +;; - For sized strings, it is the maximum size of the string. +;; +;; - For ranges, it is a list (MIN MAX) defining the range +;; [MIN,MAX]. Open ranges can be specified by using nil. For +;; example: (0,nil). +;; +;; - For regexps, it is a string containing the regexp. +;; +;; - For record types, it is a string containing the type of +;; the referred records. +;; +;; - For any other type, it is nil. + +(defvar rec-types + '("int" "bool" "range" "real" "size" "line" "regexp" "date" "enum" "field" "email" "uuid" "rec") + "Kind of supported types") + +(defun rec-type-kind-p (kind) + "Determine whether the given symbol or string is a type kind." + (let (kind-symbol) + (cond + ((symbolp kind) + (member (symbol-name kind) rec-types)) + ((stringp kind) + (member kind rec-types)) + (t + nil)))) + +(defun rec-parse-type (str) + "Parse STR into a new type structure and return it. + +STR must contain a type description as defined in the recutils +manual." + (let (type) + (with-temp-buffer + (insert str) + (goto-char (point-min)) + (when (looking-at "[a-z]+") + (let ((kind (match-string 0))) + (goto-char (match-end 0)) + (when (rec-type-kind-p kind) + (cond + ((member kind '("int" "bool" "real" "line" "date" "field" "email" "uuid")) + (when (looking-at "[ \n\t]*$") + (list 'type (intern kind) str nil))) + ((equal kind "size") + (when (looking-at "[ \n\t]*\\([0-9]+\\)[ \n\t]*$") + (list (intern kind) str (string-to-number (match-string 1))))) + ((equal kind "range") + (when (or + (looking-at "[ \n\t]*\\(-?[0-9]+\\)[ \n\t]*$") + (looking-at "[ \n\t]*\\(-?[0-9]+\\)[ \n\t]+\\([0-9]+\\)[ \n\t]*$")) + (let ((min (string-to-number (match-string 1))) + (max (when (stringp (match-string 2)) + (string-to-number (match-string 2))))) + (list 'type (intern kind) str (list min max))))) + ((equal kind "enum") + (let ((str-copy str) + (here (point))) + ;; Remove comments from the enum description. + (delete-region (point-min) (point-max)) + (insert (replace-regexp-in-string "([^)]*)" "" str-copy)) + (goto-char here) + (when (looking-at "\\([ \n\t]*[a-zA-Z0-9][a-zA-Z0-9_-]*\\)+[ \n\t]*$") + (let (names) + ;; Scan the enum literals. + (while (looking-at "[ \n\t]+\\([a-zA-Z0-9][a-zA-Z0-9_-]*\\)") + (setq names (cons (match-string 1) names)) + (goto-char (match-end 0))) + (list 'type (intern kind) str-copy (reverse names)))))) + ((equal kind "rec") + (when (looking-at "[ \n\t]*\\([a-zA-Z%][a-zA-Z0-9_]*\\)[ \n\t]*$") ; Field name without a colon. + (let ((referred-record (match-string 1))) + (list 'type (intern kind) str referred-record)))) + ((equal kind "regexp") + (when (looking-at "[ \n\t]*\\(.*?\\)[ \n\t]*$") + (let ((expr (match-string 1))) + (when (and (>= (length expr) 2) + (equal (elt expr 0) (elt expr (- (length expr) 1)))) + (list 'type (intern kind) str (substring expr 1 -1)))))) + (t + nil)))))))) + +(defun rec-type-kind (type) + "Return the kind of a given type." + (cadr type)) + +(defun rec-type-data (type) + "Return the data associated with a given type." + (cadddr type)) + +(defun rec-type-text (type) + "Return the textual description of a given type." + (caddr type)) + +(defun rec-check-type (type str) + "Check whether STR contains a value conforming to TYPE, which +is a field type structure." + (let* ((kind (cadr type)) + (expr (caddr type)) + (data (cadddr type)) + (value (if (equal kind 'line) + str + str))) + (cond + ((equal kind 'int) + (string-match-p "^-?[0-9]+$" value)) + ((equal kind 'bool) + (string-match-p "^\\(yes\\|no\\|0\\|1\\|true\\|false\\)$" value)) + ((equal kind 'range) + (let ((min (car data)) + (max (cadr data))) + (when (looking-at "-?[0-9]+$") + (let ((number (string-to-number (match-string 0)))) + (and (>= number min) (<= number max)))))) + ((equal kind 'real) + (string-match-p "^-?\\([0-9]*\\.\\)?[0-9]+$" value)) + ((equal kind 'size) + (<= (length str) data)) + ((equal kind 'line) + (string-match-p "^[^\n]*$" value)) + ((equal kind 'regexp) + (string-match-p data value)) + ((equal kind 'date) + ;; TODO. + t) + ((equal kind 'enum) + (member value data)) + ((equal kind 'field) + (string-match-p "^[a-zA-Z%][a-zA-Z0-9_]*$" value)) + ((equal kind 'email) + (string-match-p "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]+$" value)) + ((equal kind 'uuid) + ;; TODO. + t) + ((equal kind 'rec) + ;; TODO. + t) + (t + nil)))) + +(defun rec-field-type (field-name) + "Return the type of the given field, if any, as determined in +the current record set. If the field has no type, i.e. it is an +unrestricted field which can contain any text, then `nil' is +returned." + (let* ((descriptor (rec-record-descriptor)) + (types (rec-record-assoc "%type" (cadr descriptor))) + res-type) + ;; Note that invalid %type entries are simply ignored. + (mapc + (lambda (type-descr) + (with-temp-buffer + (insert type-descr) + (goto-char (point-min)) + (when (looking-at "[ \n\t]*\\([a-zA-Z%][a-zA-Z0-9_-]*\\(,[a-zA-Z%][a-zA-Z0-9_-]*\\)?\\)[ \n\t]*") + (let ((names (match-string 1)) + (begin-description (match-end 0)) + name) + (goto-char (match-beginning 1)) + (while (looking-at "\\([a-zA-Z%][a-zA-Z0-9_]*\\),?") + (if (equal (match-string 1) field-name) + (progn + (goto-char begin-description) + (setq res-type (rec-parse-type (buffer-substring (point) (point-max))))) + (goto-char (match-end 0)))))))) + types) + res-type)) + +;;;; Mode line and Head line + +(defun rec-set-mode-line (str) + "Set the modeline in rec buffers." + (when str + (setq mode-line-buffer-identification + (list 20 + "%b " str)))) + +(defun rec-set-head-line (str) + "Set the headline in rec buffers." + (setq header-line-format str)) + +;;;; Fast selection + +(defun rec-fast-selection (names prompt) + "Fast group tag selection with single keys. + +NAMES is an association list of the form: + + ((\"NAME1\" char1) ...) + +Each character should identify only one name." + ;; Adapted from `org-fast-tag-selection' in org.el by Carsten Dominic + ;; Thanks Carsten! :D + (let* ((maxlen (apply 'max (mapcar (lambda (name) + (string-width (car name))) names))) + (buf (current-buffer)) + (fwidth (+ maxlen 3 1 3)) + (ncol (/ (- (window-width) 4) fwidth)) + name count result char i key-list) + (save-window-excursion + (set-buffer (get-buffer-create " *Rec Fast Selection*")) + (delete-other-windows) +;; (split-window-vertically) + (switch-to-buffer-other-window (get-buffer-create " *Rec Fast Selection*")) + (erase-buffer) + (insert prompt ":") + (insert "\n\n") + (setq count 0) + (while (setq name (pop names)) + (setq key-list (cons (cadr name) key-list)) + (insert "[" (cadr name) "] " + (car name) + (make-string (- fwidth 4 (length (car name))) ?\ )) + (when (= (setq count (+ count 1)) ncol) + (insert "\n") + (setq count 0))) + (goto-char (point-min)) + (if (fboundp 'fit-window-to-buffer) + (fit-window-to-buffer)) + (catch 'exit + (while t + (message "[a-z0-9...]: Select entry [RET]: Exit") + (setq char (let ((inhibit-quit t)) (read-char-exclusive))) + (cond + ((= char ?\r) + (setq result nil) + (throw 'exit t)) + ((member char key-list) + (setq result char) + (throw 'exit t))))) + result))) + +;;;; Summary mode + +(defvar rec-summary-mode-map + (let ((map (make-sparse-keymap))) + (set-keymap-parent map tabulated-list-mode-map) + (define-key map "\C-m" 'rec-summary-cmd-jump-to-record) + map) + "Local keymap for `rec-summary-mode' buffers.") + +(defvar rec-summary-rec-buffer nil + "rec-mode buffer paired with this summary buffer.") +(make-variable-buffer-local 'rec-summary-rec-buffer) + +(define-derived-mode rec-summary-mode tabulated-list-mode "Rec Summary" + "Major mode for summarizing the contents of a recfile. +\\<rec-summary-mode-map> +\\{rec-summary-mode-map}" + (setq tabulated-list-format nil) + (setq tabulated-list-padding 2) + (setq tabulated-list-sort-key nil) + (tabulated-list-init-header)) + +(defun rec-summary-populate (headers entries) + "Populate a rec-mode summary buffer with the data in ENTRIES. + +The data has the same structure than `tabulated-list-entries'." + (setq tabulated-list-format headers) + (setq tabulated-list-padding 2) +;; (setq tabulated-list-sort-key (cons (car (elt headers 0)) nil)) + (tabulated-list-init-header) + (setq tabulated-list-entries entries) + (tabulated-list-print nil)) + +(defun rec-summary-cmd-jump-to-record () + "Jump to the selected record in the rec-mode buffer." + (interactive) +;; (if (buffer-live-p rec-summary-rec-buffer) + (save-excursion + (let ((rec-marker (tabulated-list-get-id))) + (set-buffer (marker-buffer rec-marker)) + (widen) + (goto-char (marker-position rec-marker)) + (rec-show-record)))) +;; (message "The rec buffer paired with this summary is not alive."))) + +;;;; Database access functions +;; +;; The following functions map the high-level API rec_db_* provided by +;; librec, using the command line utilities instead. Note that we are +;; using the support for keyword arguments provided by the cl package +;; in order to ease the usage of the functions. +;; +;; Note that the functions are not checking for the integrity of the +;; arguments: it is the invoked recutil which is in charge of that. + +(defun* rec-query (&rest args + &key (type nil) (join nil) (index nil) (sex nil) + (fast-string nil) (random nil) (fex nil) (password nil) + (group-by nil) (sort-by nil) (icase nil) (uniq nil)) + "Perform a query in the current buffer using recsel. + +ARGS contains the arguments to pass to the program." + (let ((buffer (generate-new-buffer "Rec Sel ")) + args records status) + (save-restriction + (widen) + (unwind-protect + (progn + ;; Prepare the arguments to recsel based on the arguments + ;; passed to this function. + + (when (stringp type) + (setq args (cons "-t" (cons type args)))) + (when (stringp join) + (setq args (cons "-j" (cons join args)))) + (when (integerp index) + (setq args (cons "-n" (cons (number-to-string index) args)))) + (when (stringp sex) + (setq args (cons "-e" (cons sex args)))) + (when (stringp fast-string) + (setq args (cons "-q" (cons fast-string args)))) + (when (integerp random) + (setq args (cons "-m" (cons (number-to-string random) args)))) + (when (stringp fex) + (setq args (cons "-p" (cons fex args)))) + (when (stringp password) + (setq args (cons "-s" (cons password args)))) + (when (stringp group-by) + (setq args (cons "-G" (cons group-by args)))) + (when (stringp sort-by) + (setq args (cons "-S" (cons sort-by args)))) + (when icase + (setq args (cons "-i" args))) + (when uniq + (setq args (cons "-U" args))) + (when (and (not group-by) (not sort-by)) + (setq args (cons "--print-sexps" args))) + ;; Call 'recsel' to perform the query. + (setq status (apply #'call-process-region + (point-min) (point-max) + rec-recsel + nil ; delete + buffer + nil ; display + args)) + (if (/= status 0) + (error "recsel returned error: %d" status)) + (with-current-buffer buffer + (goto-char (point-min)) + (insert "(") + (goto-char (point-max)) + (insert ")") + (setq records (read (point-min-marker))))) + (kill-buffer buffer))) + records)) + +;;;; Selection of records +;; +;; The following functions implement selection of records, which +;; maintains a subset of the records in the current buffer. + +(defvar rec-current-selection nil + "List of records corresponding to the last executed selection, +or `nil' if no selection is active.") +(make-variable-buffer-local 'rec-current-selection) + +(defun rec-navigate-selection () + "Goto the first record of the current selection, if any." + (if (not rec-current-selection) + (message "No current selection") + (widen) + (let* ((first-record (car rec-current-selection)) + (pos (rec-record-position first-record))) + (goto-char pos) + (rec-show-record)))) + +(defun rec-cmd-select () + "Perform a selection on the current buffer using some criteria. + +The result of the selection is stored in `rec-current-selection'." + (interactive) + (setq rec-current-selection (rec-query))) + +(defun rec-cmd-select-fast (prefix str) + "Perform a selection on the current record set using a fast string search. + +A prefix argument means to use a case-insensitive search." + (interactive "P\nsFast string query: ") + (when (not (equal str "")) + (setq rec-current-selection (rec-query :fast-string str + :icase prefix + :type (rec-record-type))) + (rec-navigate-selection))) + +(defun rec-cmd-select-sex (prefix sex) + "Perform a selection on the current record set using a selection expression. + +A prefix argument means to use a case-insensitive search." + (interactive "P\nsSelection expression: ") + (when (not (equal sex "")) + (setq rec-current-selection (rec-query :sex sex + :icase prefix + :type (rec-record-type))) + (rec-navigate-selection))) + +;;;; Commands +;; +;; The following functions implement interactive commands available in +;; the several modes defined in this file. + +(defvar rec-field-name) +(make-variable-buffer-local 'rec-field-name) +(defvar rec-marker) +(make-variable-buffer-local 'rec-marker) +(defvar rec-buffer) +(make-variable-buffer-local 'rec-buffer) + +(defun rec-cmd-edit-field (n) + "Edit the contents of the field under point in a separate +buffer. + +The input method used for getting the field value depends on its +type, unless a prefix argument is used. Then the more general +method, i.e. asking for the new value in an unrestricted buffer, +will be used for fields of any type." + (interactive "P") + (let* (edit-buf + (field (rec-current-field)) + (field-value (rec-field-value field)) + (field-name (rec-field-name field)) + (field-type (rec-field-type field-name)) + (field-type-kind (when field-type (rec-type-kind field-type))) + (pointer (rec-beginning-of-field-pos)) + (prev-buffer (current-buffer))) + (if field-value + (cond + ((and (or (equal field-type-kind 'enum) + (equal field-type-kind 'bool)) + (null n)) + (let* ((data (rec-type-data field-type)) + (fast-selection-data + (cond + ((equal field-type-kind 'enum) + (let (used-letters) + (mapcar + (lambda (elem) + ;; Assign a letter to this enumerated entry. + ;; The letters are chosen using the following + ;; criteria: if the first letter of the entry + ;; is free then use it. Otherwise, if the + ;; second letter of the entry is free then + ;; use it. Otherwise use the first available + ;; symbol in the alphabet. Note that ELEM + ;; cannot be the empty string. + (let ((letter (if (not (member (elt elem 0) used-letters)) + (elt elem 0) + (if (and (> (length elem) 1) + (not (member (elt elem 1) used-letters))) + (elt elem 1) + (let* ((c ?a) (i 0)) + (while (member c used-letters) + (setq c (+ ?a i)) + (setq i (+ i 1))) + c))))) + (setq used-letters (cons letter used-letters)) + (list elem letter))) + data))) + ((equal field-type-kind 'bool) + '(("yes" ?y) ("no" ?n) ("1" ?o) ("0" ?z) ("true" ?t) ("false" ?f))) + (t + (error "Invalid kind of type")))) + (letter (rec-fast-selection fast-selection-data "New value"))) + (when letter + (let ((buffer-read-only nil) + new-value) + (mapc + (lambda (elem) + (when (equal letter (cadr elem)) + (setq new-value (car elem)))) + fast-selection-data) + (rec-delete-field) + (save-excursion + (rec-insert-field (list 'field + 0 + field-name + new-value))))))) + ((and (equal field-type-kind 'date) rec-popup-calendar + (null n)) + (setq rec-field-name field-name) + (setq rec-prev-buffer prev-buffer) + (setq rec-pointer pointer) + (calendar) + (let ((old-map (current-local-map)) + (map (copy-keymap calendar-mode-map))) + (define-key map "q" + `(lambda () (interactive) + (use-local-map (quote ,old-map)) + (calendar-exit))) + (define-key map "t" + `(lambda () (interactive) + (use-local-map (quote ,old-map)) + (calendar-exit) + (set-buffer rec-prev-buffer) + (let ((buffer-read-only nil)) + (rec-delete-field) + (save-excursion + (rec-insert-field (list 'field + 0 + rec-field-name + (format-time-string rec-time-stamp-format))))))) + (define-key map (kbd "RET") + `(lambda () (interactive) + (let* ((date (calendar-cursor-to-date)) + (time (encode-time 0 0 0 (nth 1 date) (nth 0 date) (nth 2 date)))) + (use-local-map (quote ,old-map)) + (calendar-exit) + (set-buffer rec-prev-buffer) + (let ((buffer-read-only nil)) + (rec-delete-field) + (save-excursion + (rec-insert-field (list 'field + 0 + rec-field-name + (format-time-string "%Y-%m-%d" time)))))))) + (use-local-map map) + (message "[RET]: Select date [t]: Time-stamp [q]: Exit"))) + (t + (setq edit-buf (get-buffer-create "Rec Edit")) + (set-buffer edit-buf) + (delete-region (point-min) (point-max)) + (rec-edit-field-mode) + (setq rec-field-name field-name) + (setq rec-marker (make-marker)) + (set-marker rec-marker pointer prev-buffer) + (setq rec-prev-buffer prev-buffer) + (setq rec-pointer pointer) + (insert field-value) + (switch-to-buffer-other-window edit-buf) + (goto-char (point-min)) + (message "Edit the value of the field and use C-c C-c to exit"))) + (message "Not in a field")))) + +(defun rec-finish-editing-field () + "Stop editing the value of a field." + (interactive) + (let ((marker rec-marker) + (prev-pointer rec-pointer) + (edit-buffer (current-buffer)) + (name rec-field-name) + (value (buffer-substring-no-properties (point-min) (point-max)))) + (if (equal (length (window-list)) 1) + (set-window-buffer (selected-window) rec-prev-buffer) + (delete-window)) + (switch-to-buffer rec-prev-buffer) + (let ((buffer-read-only nil)) + (kill-buffer edit-buffer) + (goto-char marker) + (rec-delete-field) + (rec-insert-field (list 'field + 0 + name + value)) + (goto-char prev-pointer) + (unless rec-editing + (rec-hide-continuation-line-markers))))) + +(defun rec-beginning-of-field () + "Goto to the beginning of the current field" + (interactive) + (let ((pos (rec-beginning-of-field-pos))) + (when pos + (goto-char pos)))) + +(defun rec-end-of-field () + "Goto to the end of the current field" + (interactive) + (let ((pos (rec-end-of-field-pos))) + (when pos + (goto-char pos)))) + +(defun rec-beginning-of-record () + "Goto to the beginning of the current record" + (interactive) + (let ((pos (rec-beginning-of-record-pos))) + (when pos + (goto-char pos)))) + +(defun rec-end-of-record () + "Goto to the end of the current record" + (interactive) + (let ((pos (rec-end-of-record-pos))) + (when pos + (goto-char pos)))) + +(defun rec-delete-field () + "Delete the current field" + (interactive) + (let ((begin-pos (rec-beginning-of-field-pos)) + (end-pos (rec-end-of-field-pos))) + (when (and begin-pos end-pos) + (delete-region begin-pos end-pos) + (when (equal (char-after) ?\n) + (delete-char 1))))) + +(defun rec-copy-record () + "Copy the current record" + (interactive)) + +(defun rec-find-type () + "Goto the beginning of the descriptor with a given type." + (interactive) + (let ((type (completing-read "Record type: " + (save-restriction + (widen) + (rec-buffer-types))))) + (if (equal type "") (setq type nil)) + (rec-show-type type))) + +(defun rec-cmd-goto-next-field () + "Move the pointer to the beginning of the next field in the +record. Interactive version." + (interactive) + (if (save-excursion + (not (rec-goto-next-field))) + (if rec-editing + (progn + (goto-char (point-min)) + (unless (looking-at rec-field-name-re) + (rec-goto-next-field))) + (rec-beginning-of-record)) + (rec-goto-next-field))) + +(defun rec-cmd-goto-next-rec (&optional n) + "Move the pointer to the beginning of the next record in the +file. Interactive version." + (interactive "P") + (when (null n) (setq n 1)) + (widen) + (let ((record-type (rec-record-type))) + (dotimes (i n) + (if (save-excursion + (and (rec-goto-next-rec) + (equal (rec-record-type) record-type) + (not (rec-record-descriptor-p (rec-current-record))))) + (progn + (rec-unfold-all-fields) + (rec-remove-continuation-line-marker-overlays) + (rec-goto-next-rec)) + (if (not (rec-record-type)) + (message "No more records") + (message "%s" (concat "No more records of type " + (rec-record-type))))))) + (unless rec-editing + (rec-show-record))) + +(defun rec-cmd-goto-previous-rec (&optional n) + "Move the pointer to the beginning of the previous record in +the file. Interactive version." + (interactive "P") + (when (null n) (setq n 1)) + (widen) + (let ((record-type (rec-record-type))) + (dotimes (i n) + (if (save-excursion + (and (rec-goto-previous-rec) + (equal (rec-record-type) record-type) + (not (rec-record-descriptor-p (rec-current-record))))) + (progn + (rec-unfold-all-fields) + (rec-remove-continuation-line-marker-overlays) + (rec-goto-previous-rec)) + (if (not (rec-record-type)) + (message "No more records") + (message "%s" (concat "No more records of type " + (rec-record-type))))))) + (unless rec-editing + (rec-show-record))) + +(defun rec-cmd-undo () + "Undo a change in the buffer when in navigation mode." + (interactive) + (let ((buffer-read-only nil)) + (undo))) + +(defun rec-cmd-jump-back () + "Undo the previous jump" + (interactive) + (if rec-jump-back + (progn + (widen) + (goto-char (marker-position rec-jump-back)) + (unless rec-editing + (rec-show-record)) + (setq rec-jump-back nil)) + (message "No previous position to jump"))) + +(defun rec-edit-record () + "Go to the record edition mode" + (interactive) + (setq rec-editing t) + (rec-unfold-all-fields) + (rec-remove-continuation-line-marker-overlays) + (setq buffer-read-only nil) + (use-local-map rec-mode-edit-map) + (rec-set-head-line "Editing record - use C-cC-c to return to navigation mode") + (rec-set-mode-line "Edit record") + (setq rec-update-p nil) + (setq rec-preserve-last-newline t)) + +(defun rec-edit-type () + "Go to the type edition mode" + (interactive) + (setq rec-editing t) + (rec-unfold-all-fields) + (rec-remove-continuation-line-marker-overlays) + (setq buffer-read-only nil) + (use-local-map rec-mode-edit-map) + (widen) + (rec-narrow-to-type (rec-record-type)) + (setq rec-update-p t) + (rec-set-head-line (concat "Editing type " + "'" (rec-record-type) "'" + " - use C-cC-c to return to navigation mode")) + (rec-set-mode-line "Edit type")) + +(defun rec-edit-buffer () + "Go to the buffer edition mode" + (interactive) + (setq rec-editing t) + (rec-unfold-all-fields) + (rec-remove-continuation-line-marker-overlays) + (setq buffer-read-only nil) + (use-local-map rec-mode-edit-map) + (widen) + (setq rec-update-p t) + (rec-set-head-line "Editing buffer - use C-cC-c to return to navigation mode") + (rec-set-mode-line "Edit buffer")) + +(defun rec-finish-editing () + "Go back from the record edition mode" + (interactive) + (when (or (not rec-update-p) + (and rec-update-p + (save-restriction (widen) (rec-update-buffer-descriptors-and-check t)))) + (or (rec-current-record) + (rec-goto-next-rec) + (rec-goto-previous-rec)) + (when rec-preserve-last-newline + (save-excursion + (goto-char (point-max)) + (unless (equal (char-before) ?\n) + (insert ?\n)))) + (setq rec-update-p nil) + (rec-show-record) + (rec-set-head-line nil) + (rec-set-mode-line (rec-record-type)) + (setq rec-editing nil) + (message "End of edition"))) + +(defun rec-cmd-show-descriptor () + "Show the descriptor record of the current record. + +This jump sets jump-back." + (interactive) + (let ((type (rec-record-type))) + (when type + (setq rec-jump-back (point-marker)) + (if rec-editing + (rec-goto-type type) + (rec-show-type type t))))) + +(defun rec-cmd-show-type () + "Show the descriptor corresponding to the field under point, in +the modeline." + (interactive) + (let ((type (rec-current-field-type))) + (if type + (display-message-or-buffer (rec-type-text type)) + (message "Unrestricted text")))) + +(defun rec-cmd-count (n) + "Display a message in the minibuffer showing the number of +records of the current type. + +If a numeric argument is used then prompt for a selection +expression." + (interactive "P") + (let* ((default-sex (let ((current-field (rec-current-field))) + (when (and current-field + (not (string-match "\n" (rec-field-value current-field))) + (< (length (rec-field-value current-field)) 20)) + (concat (rec-field-name current-field) " = '" (rec-field-value current-field) "'")))) + (sex (and (not (null n)) (read-from-minibuffer (concat "Selection expression" + (if default-sex + (concat " (default " default-sex ")") + "") + ": "))))) + (when (equal sex "") + (setq sex default-sex)) + (message "Counting records...") + (let ((type (rec-record-type))) + (message "%s" (concat (number-to-string (rec-count type sex)) + (if (or (not type) + (equal type "")) + " records" + (concat " records of type " type)) + (when (and sex (not (equal sex ""))) + (concat " with sex " sex))))))) + +(defun rec-cmd-statistic () + "Display a statistic on the occurrence of the value contained + in the field under point in the minibuffer, if any. + +This command is especially useful with enumerated types." + (interactive) + (let* ((field (rec-current-field)) + (field-name (rec-field-name field)) + (type (rec-field-type field-name)) + (type-kind (when type (rec-type-kind type)))) + (cond ((equal type-kind 'enum) + (let* ((keys (rec-type-data type)) + (total (rec-count (rec-record-type))) + (percentages (mapcar (lambda (key) + (let ((key-count (rec-count (rec-record-type) + (concat field-name " = '" key "'")))) + (list key key-count (/ (* key-count 100) total)))) + keys)) + str) + (mapc (lambda (occurrence) + (setq str (concat str + (number-to-string (nth 1 occurrence)) + " " + (nth 0 occurrence) + " (" + (number-to-string (nth 2 occurrence)) + "%) "))) + percentages) + (message "%s" str)))))) + +(defun rec-cmd-append-field () + "Goto the end of the record and switch to edit record mode." + (interactive) + (unless rec-editing + (rec-edit-record) + (goto-char (point-max)) + (insert "\n") + (backward-char))) + +(defun rec-cmd-trim-field-value () + "Trim the value of the field under point, if any." + (interactive) + (save-excursion + (let ((buffer-read-only nil) + (field (rec-current-field))) + (setq field (rec-field-trim-value field)) + (rec-delete-field) + (rec-insert-field field)))) + +(defun rec-cmd-compile () + "Compile the current file with recfix." + (interactive) + (let ((cur-buf (current-buffer)) + (cmd (concat rec-recfix " ")) + (tmpfile (make-temp-file "rec-mode-"))) + (if buffer-file-name + (setq cmd (concat cmd (shell-quote-argument buffer-file-name))) + (with-temp-file tmpfile + (insert-buffer-substring cur-buf)) + (setq cmd (concat cmd (shell-quote-argument tmpfile)))) + (compilation-start cmd))) + +(defun rec-cmd-show-info () + "Show information about the recfile in the modeline." + (interactive) + (let ((cur-buf (current-buffer)) + (filename (if buffer-file-name + buffer-file-name + (make-temp-file "rec-mode-"))) + (msg "")) + (if (not buffer-file-name) + (with-temp-file filename + (insert-buffer-substring cur-buf))) + (with-temp-buffer + (call-process rec-recinf + nil ; infile + t ; output to current buffer + nil ; display + filename) + (setq msg (buffer-substring-no-properties (point-min) + (point-max)))) + ;; Delete temporary file. + (if (not buffer-file-name) + (delete-file filename)) + ;; Show the message. + (setq msg (replace-regexp-in-string "\n$" "" msg)) + (setq msg (replace-regexp-in-string "\n" ", " msg)) + (message "%s" msg))) + +(defun rec-cmd-toggle-field-visibility () + "Toggle the visibility of the field under point." + (interactive) + (when (rec-field-p (rec-current-field)) + (if (rec-field-folded-p) + (rec-unfold-field) + (rec-fold-field)))) + +(defun rec-cmd-kill-field () + "Kill the current field" + (interactive) + (let ((begin-pos (rec-beginning-of-field-pos)) + (end-pos (rec-end-of-field-pos))) + (if (and begin-pos end-pos) + (kill-region begin-pos end-pos) + (message "Not in a field")))) + +(defun rec-cmd-copy-field () + "Copy the current field" + (interactive) + (let ((begin-pos (rec-beginning-of-field-pos)) + (end-pos (rec-end-of-field-pos))) + (if (and begin-pos end-pos) + (progn + (copy-region-as-kill begin-pos end-pos) + (message "Field copied to kill ring")) + (message "Not in a field")))) + +(defun rec-cmd-kill-record () + "Kill the current record" + (interactive) + (let ((begin-pos (rec-beginning-of-record-pos)) + (end-pos (rec-end-of-record-pos))) + (if (and begin-pos end-pos) + (progn + (when (looking-back "^[ \t]*") + ;; Delete the newline before the record as well, but do + ;; not include it in the kill ring. + (delete-region (match-beginning 0) (+ (match-end 0) 1))) + (kill-region begin-pos end-pos)) + (message "Not in a record")))) + +(defun rec-cmd-copy-record () + "Copy the current record" + (interactive) + (let ((begin-pos (rec-beginning-of-record-pos)) + (end-pos (rec-end-of-record-pos))) + (if (and begin-pos end-pos) + (progn + (copy-region-as-kill begin-pos end-pos) + (message "record copied to kill ring")) + (message "Not in a record")))) + +(defun rec-cmd-show-summary () + "Show a window with a summary of the contents of the current +record set. + +The fields used to build the summary are determined in the +following way: if there is a %summary field in the record +descriptor of the current record set then it must contain a comma +separated list of fields. Otherwise the %key is used. Otherwise +the user is prompted." + (interactive) + (let ((summary-buffer-name (concat (buffer-name (current-buffer)) " Summary"))) + (if (buffer-live-p (get-buffer summary-buffer-name)) + (progn + (delete-other-windows) + (split-window-vertically 10) + (switch-to-buffer summary-buffer-name)) + (let ((summary-fields (rec-summary-fields))) + (unless summary-fields + (setq summary-fields (list (rec-key))) + (unless (car summary-fields) + (setq summary-fields (list (read-from-minibuffer "Fields to use in the summary: "))))) + (if (car summary-fields) + (let* ((query (rec-query :fex (rec-join-string summary-fields ","))) + (summary-list (mapcar (lambda (rec) + (let ((entry-marker (make-marker))) + (set-marker entry-marker (rec-record-position rec)) + (list entry-marker (vconcat (rec-record-values rec summary-fields))))) + query))) + ;; Create the summary window if it does not exist and populate + ;; it. + (let ((rec-buf (current-buffer)) + (buf (get-buffer-create (concat (buffer-name (current-buffer)) " Summary")))) + (delete-other-windows) + (split-window-vertically 10) + (switch-to-buffer buf) + (let ((buffer-read-only nil)) + (delete-region (point-min) (point-max)) + (setq rec-summary-rec-buffer rec-buf) + (rec-summary-mode) + (rec-summary-populate (vconcat (mapcar (lambda (field) (list field 15 nil)) summary-fields)) summary-list) + (hl-line-mode 1)))) + (message "No fields to build the summary.")))))) + +;;;; Interacting with other modes + +(defun rec-log-current-defun () + "Return the value of the key in the current record, if any. If +no key is defined then return the value of the first field in the +record. In case the pointer is not in a record then this +function returns `nil'." + (let ((record (rec-current-record)) + (key (rec-key))) + (when record + (if key + (let ((values (rec-record-assoc key record))) + (if values + (car values) + (rec-field-value (car (rec-record-elems record))))) + (rec-field-value (car (rec-record-elems record))))))) + +;;;; Definition of modes + +(defvar font-lock-defaults) +(make-variable-buffer-local 'font-lock-defaults) +(defvar rec-type) +(make-variable-buffer-local 'rec-type) +(defvar rec-buffer-descriptors) +(make-variable-buffer-local 'rec-buffer-descriptors) +(defvar rec-jump-back) +(make-variable-buffer-local 'rec-jump-back) +(defvar rec-update-p) +(make-variable-buffer-local 'rec-update-p) +(defvar rec-preserve-last-newline) +(make-variable-buffer-local 'rec-preserve-last-newline) +(defvar rec-editing) +(make-variable-buffer-local 'rec-editing) +(defvar add-log-current-defun-section) +(make-variable-buffer-local 'add-log-current-defun-section) + +(defun rec-mode () + "A major mode for editing rec files. + +Commands: +\\{rec-mode-map} + +Turning on rec-mode calls the members of the variable +`rec-mode-hook' with no args, if that value is non-nil." + (interactive) + (kill-all-local-variables) + (widen) + ;; Local variables + (setq add-log-current-defun-section #'rec-log-current-defun) + (setq rec-editing nil) + (setq rec-jump-back nil) + (setq rec-update-p nil) + (setq rec-preserve-last-newline nil) + (setq font-lock-defaults '(rec-font-lock-keywords)) + (add-to-invisibility-spec '(rec-hide-field . "...")) + (use-local-map rec-mode-map) + (set-syntax-table rec-mode-syntax-table) + (setq mode-name "Rec") + (setq major-mode 'rec-mode) + (run-hooks 'rec-mode-hook) + ;; Goto the first record of the first type (including the Unknown). + ;; If there is a problem (i.e. syntax error) then go to fundamental + ;; mode and show the output of recfix in a separated buffer. + (when (rec-update-buffer-descriptors-and-check) + ;; If the configured open-mode is navigation, set up the buffer + ;; accordingly. But don't go into navigation mode if the file is + ;; empty. + (if (and (equal rec-open-mode 'navigation) + (> (buffer-size (current-buffer)) 0)) + (progn + (setq buffer-read-only t) + (setq rec-type (car (rec-buffer-types))) + (rec-show-type rec-type)) + ;; Edit mode + (use-local-map rec-mode-edit-map) + (setq rec-editing t) + (rec-set-mode-line "Edit buffer")))) + +(defvar rec-edit-field-mode-map + (let ((map (make-sparse-keymap))) + (define-key map "\C-c\C-c" 'rec-finish-editing-field) + map) + "Keymap for rec-edit-field-mode") + +(defun rec-edit-field-mode () + "A major mode for editing rec field values. + +Commands: +\\{rec-edit-field-mode-map}" + (interactive) + (kill-all-local-variables) + (use-local-map rec-edit-field-mode-map) + (setq mode-name "Rec Edit") + (setq major-mode 'rec-edit-field-mode)) + +;;;; Miscellaneous utilities + +(defun rec-join-string (l c) + (if (> (length l) 1) + (concat (car l) c (rec-join-string (cdr l) c)) + (car l))) + +(provide 'rec-mode) + +;; Local variables: +;; outline-regexp: ";;;;" +;; End: + +;;; rec-mode.el ends here diff --git a/devspec.en_US/project/recutils/lib/.deps/acl-errno-valid.Plo b/devspec.en_US/project/recutils/lib/.deps/acl-errno-valid.Plo new file mode 100755 index 0000000..3ff1e21 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/acl-errno-valid.Plo @@ -0,0 +1,102 @@ +acl-errno-valid.lo: acl-errno-valid.c /usr/include/stdc-predef.h \ + ../src/config.h acl.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + sys/types.h /usr/include/i386-linux-gnu/sys/types.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h time.h /usr/include/time.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h sys/stat.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/sys/stat.h \ + /usr/include/i386-linux-gnu/bits/stat.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +acl.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +time.h: + +/usr/include/time.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +sys/stat.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/sys/stat.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/acl-internal.Plo b/devspec.en_US/project/recutils/lib/.deps/acl-internal.Plo new file mode 100755 index 0000000..a2f559d --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/acl-internal.Plo @@ -0,0 +1,152 @@ +acl-internal.lo: acl-internal.c /usr/include/stdc-predef.h \ + ../src/config.h acl.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + sys/types.h /usr/include/i386-linux-gnu/sys/types.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h time.h /usr/include/time.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h sys/stat.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/sys/stat.h \ + /usr/include/i386-linux-gnu/bits/stat.h acl-internal.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +acl.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +time.h: + +/usr/include/time.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +sys/stat.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/sys/stat.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +acl-internal.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/acl_entries.Plo b/devspec.en_US/project/recutils/lib/.deps/acl_entries.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/acl_entries.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/alloca.Plo b/devspec.en_US/project/recutils/lib/.deps/alloca.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/alloca.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/asnprintf.Plo b/devspec.en_US/project/recutils/lib/.deps/asnprintf.Plo new file mode 100755 index 0000000..452ec54 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/asnprintf.Plo @@ -0,0 +1,13 @@ +asnprintf.lo: asnprintf.c /usr/include/stdc-predef.h ../src/config.h \ + vasnprintf.h /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +vasnprintf.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/asprintf.Plo b/devspec.en_US/project/recutils/lib/.deps/asprintf.Plo new file mode 100755 index 0000000..d3c85fe --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/asprintf.Plo @@ -0,0 +1,98 @@ +asprintf.lo: asprintf.c /usr/include/stdc-predef.h ../src/config.h \ + stdio.h /usr/include/stdio.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/base64.Plo b/devspec.en_US/project/recutils/lib/.deps/base64.Plo new file mode 100755 index 0000000..f305d4f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/base64.Plo @@ -0,0 +1,138 @@ +base64.lo: base64.c /usr/include/stdc-predef.h ../src/config.h base64.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + sys/types.h /usr/include/i386-linux-gnu/sys/types.h time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +base64.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/basename-lgpl.Plo b/devspec.en_US/project/recutils/lib/.deps/basename-lgpl.Plo new file mode 100755 index 0000000..cd3f81a --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/basename-lgpl.Plo @@ -0,0 +1,67 @@ +basename-lgpl.lo: basename-lgpl.c /usr/include/stdc-predef.h \ + ../src/config.h dirname.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h dosname.h string.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +dirname.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +dosname.h: + +string.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/btowc.Plo b/devspec.en_US/project/recutils/lib/.deps/btowc.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/btowc.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/c-ctype.Plo b/devspec.en_US/project/recutils/lib/.deps/c-ctype.Plo new file mode 100755 index 0000000..e4d4224 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/c-ctype.Plo @@ -0,0 +1,10 @@ +c-ctype.lo: c-ctype.c /usr/include/stdc-predef.h ../src/config.h \ + c-ctype.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +c-ctype.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/c-strcasecmp.Plo b/devspec.en_US/project/recutils/lib/.deps/c-strcasecmp.Plo new file mode 100755 index 0000000..8a40f01 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/c-strcasecmp.Plo @@ -0,0 +1,58 @@ +c-strcasecmp.lo: c-strcasecmp.c /usr/include/stdc-predef.h \ + ../src/config.h c-strcase.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h c-ctype.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +c-strcase.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +c-ctype.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/c-strncasecmp.Plo b/devspec.en_US/project/recutils/lib/.deps/c-strncasecmp.Plo new file mode 100755 index 0000000..cc50da7 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/c-strncasecmp.Plo @@ -0,0 +1,58 @@ +c-strncasecmp.lo: c-strncasecmp.c /usr/include/stdc-predef.h \ + ../src/config.h c-strcase.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h c-ctype.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +c-strcase.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +c-ctype.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/canonicalize-lgpl.Plo b/devspec.en_US/project/recutils/lib/.deps/canonicalize-lgpl.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/canonicalize-lgpl.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/cloexec.Plo b/devspec.en_US/project/recutils/lib/.deps/cloexec.Plo new file mode 100755 index 0000000..b729180 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/cloexec.Plo @@ -0,0 +1,127 @@ +cloexec.lo: cloexec.c /usr/include/stdc-predef.h ../src/config.h \ + cloexec.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + /usr/include/errno.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h fcntl.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h time.h /usr/include/time.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h unistd.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/i386-linux-gnu/bits/unistd.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +cloexec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +fcntl.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +time.h: + +/usr/include/time.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/i386-linux-gnu/bits/unistd.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/close-stream.Plo b/devspec.en_US/project/recutils/lib/.deps/close-stream.Plo new file mode 100755 index 0000000..92499f5 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/close-stream.Plo @@ -0,0 +1,125 @@ +close-stream.lo: close-stream.c /usr/include/stdc-predef.h \ + ../src/config.h close-stream.h stdio.h /usr/include/stdio.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h fpending.h \ + /usr/include/stdio_ext.h unlocked-io.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +close-stream.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +fpending.h: + +/usr/include/stdio_ext.h: + +unlocked-io.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/close.Plo b/devspec.en_US/project/recutils/lib/.deps/close.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/close.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/closeout.Plo b/devspec.en_US/project/recutils/lib/.deps/closeout.Plo new file mode 100755 index 0000000..4e1f17f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/closeout.Plo @@ -0,0 +1,176 @@ +closeout.lo: closeout.c /usr/include/stdc-predef.h ../src/config.h \ + closeout.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + /usr/include/errno.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h stdio.h /usr/include/stdio.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h unistd.h \ + /usr/include/unistd.h /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/i386-linux-gnu/bits/unistd.h gettext.h \ + /usr/include/libintl.h locale.h /usr/include/locale.h \ + /usr/include/i386-linux-gnu/bits/locale.h /usr/include/xlocale.h \ + string.h /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h \ + close-stream.h error.h exitfail.h quotearg.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +closeout.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/i386-linux-gnu/bits/unistd.h: + +gettext.h: + +/usr/include/libintl.h: + +locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +/usr/include/xlocale.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +close-stream.h: + +error.h: + +exitfail.h: + +quotearg.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/copy-acl.Plo b/devspec.en_US/project/recutils/lib/.deps/copy-acl.Plo new file mode 100755 index 0000000..5b19702 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/copy-acl.Plo @@ -0,0 +1,135 @@ +copy-acl.lo: copy-acl.c /usr/include/stdc-predef.h ../src/config.h acl.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h time.h /usr/include/time.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h sys/stat.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/sys/stat.h \ + /usr/include/i386-linux-gnu/bits/stat.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h quote.h error.h gettext.h \ + /usr/include/libintl.h locale.h /usr/include/locale.h \ + /usr/include/i386-linux-gnu/bits/locale.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +acl.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +time.h: + +/usr/include/time.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +sys/stat.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/sys/stat.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +quote.h: + +error.h: + +gettext.h: + +/usr/include/libintl.h: + +locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/crc.Plo b/devspec.en_US/project/recutils/lib/.deps/crc.Plo new file mode 100755 index 0000000..a2b3805 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/crc.Plo @@ -0,0 +1,61 @@ +crc.lo: crc.c /usr/include/stdc-predef.h ../src/config.h crc.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/wchar.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +crc.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/dirname-lgpl.Plo b/devspec.en_US/project/recutils/lib/.deps/dirname-lgpl.Plo new file mode 100755 index 0000000..60d8492 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/dirname-lgpl.Plo @@ -0,0 +1,114 @@ +dirname-lgpl.lo: dirname-lgpl.c /usr/include/stdc-predef.h \ + ../src/config.h dirname.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h dosname.h stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + sys/types.h /usr/include/i386-linux-gnu/sys/types.h time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +dirname.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +dosname.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/dup2.Plo b/devspec.en_US/project/recutils/lib/.deps/dup2.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/dup2.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/error.Plo b/devspec.en_US/project/recutils/lib/.deps/error.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/error.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/euidaccess.Plo b/devspec.en_US/project/recutils/lib/.deps/euidaccess.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/euidaccess.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/execute.Plo b/devspec.en_US/project/recutils/lib/.deps/execute.Plo new file mode 100755 index 0000000..d77e2e7 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/execute.Plo @@ -0,0 +1,215 @@ +execute.lo: execute.c /usr/include/stdc-predef.h ../src/config.h \ + execute.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + /usr/include/errno.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h fcntl.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h time.h /usr/include/time.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h stdlib.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h signal.h /usr/include/signal.h \ + /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h unistd.h \ + /usr/include/unistd.h /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/i386-linux-gnu/bits/unistd.h error.h fatal-signal.h \ + wait-process.h gettext.h /usr/include/libintl.h locale.h \ + /usr/include/locale.h /usr/include/i386-linux-gnu/bits/locale.h string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h spawn.h /usr/include/spawn.h \ + /usr/include/sched.h /usr/include/i386-linux-gnu/bits/sched.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +execute.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +fcntl.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +time.h: + +/usr/include/time.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +signal.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/i386-linux-gnu/bits/unistd.h: + +error.h: + +fatal-signal.h: + +wait-process.h: + +gettext.h: + +/usr/include/libintl.h: + +locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +spawn.h: + +/usr/include/spawn.h: + +/usr/include/sched.h: + +/usr/include/i386-linux-gnu/bits/sched.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/exitfail.Plo b/devspec.en_US/project/recutils/lib/.deps/exitfail.Plo new file mode 100755 index 0000000..ef960b0 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/exitfail.Plo @@ -0,0 +1,95 @@ +exitfail.lo: exitfail.c /usr/include/stdc-predef.h ../src/config.h \ + exitfail.h stdlib.h /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + sys/types.h /usr/include/i386-linux-gnu/sys/types.h time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +exitfail.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/fatal-signal.Plo b/devspec.en_US/project/recutils/lib/.deps/fatal-signal.Plo new file mode 100755 index 0000000..4c6b445 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/fatal-signal.Plo @@ -0,0 +1,185 @@ +fatal-signal.lo: fatal-signal.c /usr/include/stdc-predef.h \ + ../src/config.h fatal-signal.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + sys/types.h /usr/include/i386-linux-gnu/sys/types.h time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h signal.h /usr/include/signal.h \ + /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h unistd.h \ + /usr/include/unistd.h /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/i386-linux-gnu/bits/unistd.h sig-handler.h xalloc.h \ + stdint.h /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h \ + /usr/include/stdint.h /usr/include/i386-linux-gnu/bits/wchar.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h xalloc-oversized.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +fatal-signal.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +signal.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/i386-linux-gnu/bits/unistd.h: + +sig-handler.h: + +xalloc.h: + +stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +xalloc-oversized.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/fcntl.Plo b/devspec.en_US/project/recutils/lib/.deps/fcntl.Plo new file mode 100755 index 0000000..cc65241 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/fcntl.Plo @@ -0,0 +1,151 @@ +fcntl.lo: fcntl.c /usr/include/stdc-predef.h ../src/config.h fcntl.h \ + sys/types.h /usr/include/i386-linux-gnu/sys/types.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h time.h /usr/include/time.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h unistd.h \ + /usr/include/unistd.h /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/i386-linux-gnu/bits/unistd.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +fcntl.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +time.h: + +/usr/include/time.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/i386-linux-gnu/bits/unistd.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/fd-hook.Plo b/devspec.en_US/project/recutils/lib/.deps/fd-hook.Plo new file mode 100755 index 0000000..5d1a09c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/fd-hook.Plo @@ -0,0 +1,95 @@ +fd-hook.lo: fd-hook.c /usr/include/stdc-predef.h ../src/config.h \ + fd-hook.h stdlib.h /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + sys/types.h /usr/include/i386-linux-gnu/sys/types.h time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +fd-hook.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/float.Plo b/devspec.en_US/project/recutils/lib/.deps/float.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/float.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/flock.Plo b/devspec.en_US/project/recutils/lib/.deps/flock.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/flock.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/floor.Plo b/devspec.en_US/project/recutils/lib/.deps/floor.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/floor.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/fpending.Plo b/devspec.en_US/project/recutils/lib/.deps/fpending.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/fpending.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/fprintf.Plo b/devspec.en_US/project/recutils/lib/.deps/fprintf.Plo new file mode 100755 index 0000000..30927d7 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/fprintf.Plo @@ -0,0 +1,164 @@ +fprintf.lo: fprintf.c /usr/include/stdc-predef.h ../src/config.h stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h fseterr.h vasnprintf.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +fseterr.h: + +vasnprintf.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/frexp.Plo b/devspec.en_US/project/recutils/lib/.deps/frexp.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/frexp.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/frexpl.Plo b/devspec.en_US/project/recutils/lib/.deps/frexpl.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/frexpl.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/fseek.Plo b/devspec.en_US/project/recutils/lib/.deps/fseek.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/fseek.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/fseeko.Plo b/devspec.en_US/project/recutils/lib/.deps/fseeko.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/fseeko.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/fseterr.Plo b/devspec.en_US/project/recutils/lib/.deps/fseterr.Plo new file mode 100755 index 0000000..105a29c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/fseterr.Plo @@ -0,0 +1,117 @@ +fseterr.lo: fseterr.c /usr/include/stdc-predef.h ../src/config.h \ + fseterr.h stdio.h /usr/include/stdio.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h stdio-impl.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +fseterr.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +stdio-impl.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/fstat.Plo b/devspec.en_US/project/recutils/lib/.deps/fstat.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/fstat.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/ftell.Plo b/devspec.en_US/project/recutils/lib/.deps/ftell.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/ftell.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/ftello.Plo b/devspec.en_US/project/recutils/lib/.deps/ftello.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/ftello.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/fwriting.Plo b/devspec.en_US/project/recutils/lib/.deps/fwriting.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/fwriting.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/get-permissions.Plo b/devspec.en_US/project/recutils/lib/.deps/get-permissions.Plo new file mode 100755 index 0000000..0ead0ca --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/get-permissions.Plo @@ -0,0 +1,166 @@ +get-permissions.lo: get-permissions.c /usr/include/stdc-predef.h \ + ../src/config.h string.h /usr/include/string.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h acl.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h sys/stat.h \ + /usr/include/i386-linux-gnu/bits/timex.h \ + /usr/include/i386-linux-gnu/sys/stat.h \ + /usr/include/i386-linux-gnu/bits/stat.h acl-internal.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +string.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +acl.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +sys/stat.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/i386-linux-gnu/sys/stat.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +acl-internal.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/getdelim.Plo b/devspec.en_US/project/recutils/lib/.deps/getdelim.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/getdelim.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/getdtablesize.Plo b/devspec.en_US/project/recutils/lib/.deps/getdtablesize.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/getdtablesize.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/getfilecon.Plo b/devspec.en_US/project/recutils/lib/.deps/getfilecon.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/getfilecon.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/getgroups.Plo b/devspec.en_US/project/recutils/lib/.deps/getgroups.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/getgroups.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/getline.Plo b/devspec.en_US/project/recutils/lib/.deps/getline.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/getline.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/getopt.Plo b/devspec.en_US/project/recutils/lib/.deps/getopt.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/getopt.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/getopt1.Plo b/devspec.en_US/project/recutils/lib/.deps/getopt1.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/getopt1.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/getpass.Plo b/devspec.en_US/project/recutils/lib/.deps/getpass.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/getpass.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/getprogname.Plo b/devspec.en_US/project/recutils/lib/.deps/getprogname.Plo new file mode 100755 index 0000000..c2d0172 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/getprogname.Plo @@ -0,0 +1,117 @@ +getprogname.lo: getprogname.c /usr/include/stdc-predef.h ../src/config.h \ + getprogname.h stdlib.h /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + sys/types.h /usr/include/i386-linux-gnu/sys/types.h time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h dirname.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h dosname.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +getprogname.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +dirname.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +dosname.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/gettime.Plo b/devspec.en_US/project/recutils/lib/.deps/gettime.Plo new file mode 100755 index 0000000..c3a853f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/gettime.Plo @@ -0,0 +1,64 @@ +gettime.lo: gettime.c /usr/include/stdc-predef.h ../src/config.h \ + timespec.h time.h /usr/include/time.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/xlocale.h \ + arg-nonnull.h verify.h sys/time.h /usr/include/i386-linux-gnu/sys/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/select2.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +timespec.h: + +time.h: + +/usr/include/time.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/xlocale.h: + +arg-nonnull.h: + +verify.h: + +sys/time.h: + +/usr/include/i386-linux-gnu/sys/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/select2.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/gettimeofday.Plo b/devspec.en_US/project/recutils/lib/.deps/gettimeofday.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/gettimeofday.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/gl_array_list.Plo b/devspec.en_US/project/recutils/lib/.deps/gl_array_list.Plo new file mode 100755 index 0000000..5f730d6 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/gl_array_list.Plo @@ -0,0 +1,153 @@ +gl_array_list.lo: gl_array_list.c /usr/include/stdc-predef.h \ + ../src/config.h gl_array_list.h gl_list.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + sys/types.h /usr/include/i386-linux-gnu/sys/types.h time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h xsize.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +gl_array_list.h: + +gl_list.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +xsize.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/gl_list.Plo b/devspec.en_US/project/recutils/lib/.deps/gl_list.Plo new file mode 100755 index 0000000..1f8c6f2 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/gl_list.Plo @@ -0,0 +1,13 @@ +gl_list.lo: gl_list.c /usr/include/stdc-predef.h ../src/config.h \ + gl_list.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +gl_list.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/group-member.Plo b/devspec.en_US/project/recutils/lib/.deps/group-member.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/group-member.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/hard-locale.Plo b/devspec.en_US/project/recutils/lib/.deps/hard-locale.Plo new file mode 100755 index 0000000..4fe7620 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/hard-locale.Plo @@ -0,0 +1,119 @@ +hard-locale.lo: hard-locale.c /usr/include/stdc-predef.h ../src/config.h \ + hard-locale.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h locale.h \ + /usr/include/locale.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/locale.h /usr/include/xlocale.h \ + stdlib.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +hard-locale.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +locale.h: + +/usr/include/locale.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +/usr/include/xlocale.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/isnan.Plo b/devspec.en_US/project/recutils/lib/.deps/isnan.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/isnan.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/isnand.Plo b/devspec.en_US/project/recutils/lib/.deps/isnand.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/isnand.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/isnanf.Plo b/devspec.en_US/project/recutils/lib/.deps/isnanf.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/isnanf.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/isnanl.Plo b/devspec.en_US/project/recutils/lib/.deps/isnanl.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/isnanl.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/itold.Plo b/devspec.en_US/project/recutils/lib/.deps/itold.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/itold.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/localcharset.Plo b/devspec.en_US/project/recutils/lib/.deps/localcharset.Plo new file mode 100755 index 0000000..383f9d3 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/localcharset.Plo @@ -0,0 +1,148 @@ +localcharset.lo: localcharset.c /usr/include/stdc-predef.h \ + ../src/config.h localcharset.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h string.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h langinfo.h \ + /usr/include/langinfo.h /usr/include/nl_types.h \ + /usr/include/i386-linux-gnu/bits/locale.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +localcharset.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +string.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +langinfo.h: + +/usr/include/langinfo.h: + +/usr/include/nl_types.h: + +/usr/include/i386-linux-gnu/bits/locale.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/localeconv.Plo b/devspec.en_US/project/recutils/lib/.deps/localeconv.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/localeconv.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/localtime-buffer.Plo b/devspec.en_US/project/recutils/lib/.deps/localtime-buffer.Plo new file mode 100755 index 0000000..c656949 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/localtime-buffer.Plo @@ -0,0 +1,43 @@ +localtime-buffer.lo: localtime-buffer.c /usr/include/stdc-predef.h \ + ../src/config.h localtime-buffer.h time.h /usr/include/time.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/xlocale.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +localtime-buffer.h: + +time.h: + +/usr/include/time.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/xlocale.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/lseek.Plo b/devspec.en_US/project/recutils/lib/.deps/lseek.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/lseek.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/lstat.Plo b/devspec.en_US/project/recutils/lib/.deps/lstat.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/lstat.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/malloc.Plo b/devspec.en_US/project/recutils/lib/.deps/malloc.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/malloc.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/malloca.Plo b/devspec.en_US/project/recutils/lib/.deps/malloca.Plo new file mode 100755 index 0000000..7b75d63 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/malloca.Plo @@ -0,0 +1,136 @@ +malloca.lo: malloca.c /usr/include/stdc-predef.h ../src/config.h \ + malloca.h alloca.h /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + stdlib.h /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + sys/types.h /usr/include/i386-linux-gnu/sys/types.h time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h xalloc-oversized.h verify.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +malloca.h: + +alloca.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +xalloc-oversized.h: + +verify.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/math.Plo b/devspec.en_US/project/recutils/lib/.deps/math.Plo new file mode 100755 index 0000000..6410dfe --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/math.Plo @@ -0,0 +1,56 @@ +math.lo: math.c /usr/include/stdc-predef.h ../src/config.h math.h math.h \ + /usr/include/math.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/math-vector.h \ + /usr/include/i386-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/i386-linux-gnu/bits/huge_val.h \ + /usr/include/i386-linux-gnu/bits/huge_valf.h \ + /usr/include/i386-linux-gnu/bits/huge_vall.h \ + /usr/include/i386-linux-gnu/bits/inf.h \ + /usr/include/i386-linux-gnu/bits/nan.h \ + /usr/include/i386-linux-gnu/bits/mathdef.h \ + /usr/include/i386-linux-gnu/bits/mathcalls.h \ + /usr/include/i386-linux-gnu/bits/mathinline.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +math.h: + +math.h: + +/usr/include/math.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/math-vector.h: + +/usr/include/i386-linux-gnu/bits/libm-simd-decl-stubs.h: + +/usr/include/i386-linux-gnu/bits/huge_val.h: + +/usr/include/i386-linux-gnu/bits/huge_valf.h: + +/usr/include/i386-linux-gnu/bits/huge_vall.h: + +/usr/include/i386-linux-gnu/bits/inf.h: + +/usr/include/i386-linux-gnu/bits/nan.h: + +/usr/include/i386-linux-gnu/bits/mathdef.h: + +/usr/include/i386-linux-gnu/bits/mathcalls.h: + +/usr/include/i386-linux-gnu/bits/mathinline.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/mbrlen.Plo b/devspec.en_US/project/recutils/lib/.deps/mbrlen.Plo new file mode 100755 index 0000000..3b1be98 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/mbrlen.Plo @@ -0,0 +1,41 @@ +mbrlen.lo: mbrlen.c /usr/include/stdc-predef.h ../src/config.h wchar.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h /usr/include/wchar.h stdio.h \ + /usr/include/stdio.h /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/wchar2.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +wchar.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/wchar.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/wchar2.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/mbrtowc.Plo b/devspec.en_US/project/recutils/lib/.deps/mbrtowc.Plo new file mode 100755 index 0000000..4332297 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/mbrtowc.Plo @@ -0,0 +1,53 @@ +mbrtowc.lo: mbrtowc.c /usr/include/stdc-predef.h ../src/config.h wchar.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h /usr/include/wchar.h stdio.h \ + /usr/include/stdio.h /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/wchar2.h hard-locale.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h locale.h \ + /usr/include/locale.h /usr/include/i386-linux-gnu/bits/locale.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +wchar.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/wchar.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/wchar2.h: + +hard-locale.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/mbsinit.Plo b/devspec.en_US/project/recutils/lib/.deps/mbsinit.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/mbsinit.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/mbtowc.Plo b/devspec.en_US/project/recutils/lib/.deps/mbtowc.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/mbtowc.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/memchr.Plo b/devspec.en_US/project/recutils/lib/.deps/memchr.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/memchr.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/mkdir.Plo b/devspec.en_US/project/recutils/lib/.deps/mkdir.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/mkdir.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/mkostemp.Plo b/devspec.en_US/project/recutils/lib/.deps/mkostemp.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/mkostemp.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/mkstemp.Plo b/devspec.en_US/project/recutils/lib/.deps/mkstemp.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/mkstemp.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/mktime.Plo b/devspec.en_US/project/recutils/lib/.deps/mktime.Plo new file mode 100755 index 0000000..648370c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/mktime.Plo @@ -0,0 +1,165 @@ +mktime.lo: mktime.c /usr/include/stdc-predef.h libc-config.h \ + ../src/config.h /usr/include/errno.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h cdefs.h time.h /usr/include/time.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/xlocale.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h intprops.h verify.h \ + mktime-internal.h + +/usr/include/stdc-predef.h: + +libc-config.h: + +../src/config.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +cdefs.h: + +time.h: + +/usr/include/time.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/xlocale.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +intprops.h: + +verify.h: + +mktime-internal.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/msvc-inval.Plo b/devspec.en_US/project/recutils/lib/.deps/msvc-inval.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/msvc-inval.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/msvc-nothrow.Plo b/devspec.en_US/project/recutils/lib/.deps/msvc-nothrow.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/msvc-nothrow.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/nl_langinfo.Plo b/devspec.en_US/project/recutils/lib/.deps/nl_langinfo.Plo new file mode 100755 index 0000000..5fabce4 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/nl_langinfo.Plo @@ -0,0 +1,73 @@ +nl_langinfo.lo: nl_langinfo.c /usr/include/stdc-predef.h ../src/config.h \ + langinfo.h /usr/include/langinfo.h /usr/include/nl_types.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/locale.h /usr/include/xlocale.h \ + locale.h /usr/include/locale.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +langinfo.h: + +/usr/include/langinfo.h: + +/usr/include/nl_types.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +/usr/include/xlocale.h: + +locale.h: + +/usr/include/locale.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/nstrftime.Plo b/devspec.en_US/project/recutils/lib/.deps/nstrftime.Plo new file mode 100755 index 0000000..d4b7ca4 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/nstrftime.Plo @@ -0,0 +1,146 @@ +nstrftime.lo: nstrftime.c /usr/include/stdc-predef.h ../src/config.h \ + strftime.h time.h /usr/include/time.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/xlocale.h \ + time-internal.h /usr/include/ctype.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +strftime.h: + +time.h: + +/usr/include/time.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/xlocale.h: + +time-internal.h: + +/usr/include/ctype.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/obstack.Plo b/devspec.en_US/project/recutils/lib/.deps/obstack.Plo new file mode 100755 index 0000000..b23b799 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/obstack.Plo @@ -0,0 +1,187 @@ +obstack.lo: obstack.c /usr/include/stdc-predef.h ../src/config.h \ + obstack.h /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h string.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h \ + /usr/include/gnu-versions.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h exitfail.h gettext.h \ + /usr/include/libintl.h locale.h /usr/include/locale.h \ + /usr/include/i386-linux-gnu/bits/locale.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +obstack.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +string.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/include/gnu-versions.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +exitfail.h: + +gettext.h: + +/usr/include/libintl.h: + +locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/open.Plo b/devspec.en_US/project/recutils/lib/.deps/open.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/open.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/parse-datetime.Plo b/devspec.en_US/project/recutils/lib/.deps/parse-datetime.Plo new file mode 100755 index 0000000..466a1ec --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/parse-datetime.Plo @@ -0,0 +1,207 @@ +parse-datetime.lo: parse-datetime.c /usr/include/stdc-predef.h \ + ../src/config.h parse-datetime.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h time.h \ + /usr/include/time.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/xlocale.h \ + intprops.h limits.h /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h timespec.h arg-nonnull.h \ + verify.h strftime.h inttypes.h /usr/include/inttypes.h stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h c-ctype.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + wchar.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h gettext.h \ + /usr/include/libintl.h locale.h /usr/include/locale.h \ + /usr/include/i386-linux-gnu/bits/locale.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +parse-datetime.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +time.h: + +/usr/include/time.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/xlocale.h: + +intprops.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +timespec.h: + +arg-nonnull.h: + +verify.h: + +strftime.h: + +inttypes.h: + +/usr/include/inttypes.h: + +stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +c-ctype.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +gettext.h: + +/usr/include/libintl.h: + +locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/printf-args.Plo b/devspec.en_US/project/recutils/lib/.deps/printf-args.Plo new file mode 100755 index 0000000..265b6c1 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/printf-args.Plo @@ -0,0 +1,43 @@ +printf-args.lo: printf-args.c /usr/include/stdc-predef.h ../src/config.h \ + printf-args.h /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h wchar.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h /usr/include/wchar.h stdio.h \ + /usr/include/stdio.h /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/wchar.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/wchar2.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +printf-args.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +wchar.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/wchar.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/wchar2.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/printf-frexp.Plo b/devspec.en_US/project/recutils/lib/.deps/printf-frexp.Plo new file mode 100755 index 0000000..af90c87 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/printf-frexp.Plo @@ -0,0 +1,59 @@ +printf-frexp.lo: printf-frexp.c /usr/include/stdc-predef.h \ + ../src/config.h printf-frexp.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/float.h math.h /usr/include/math.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/math-vector.h \ + /usr/include/i386-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/i386-linux-gnu/bits/huge_val.h \ + /usr/include/i386-linux-gnu/bits/huge_valf.h \ + /usr/include/i386-linux-gnu/bits/huge_vall.h \ + /usr/include/i386-linux-gnu/bits/inf.h \ + /usr/include/i386-linux-gnu/bits/nan.h \ + /usr/include/i386-linux-gnu/bits/mathdef.h \ + /usr/include/i386-linux-gnu/bits/mathcalls.h \ + /usr/include/i386-linux-gnu/bits/mathinline.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +printf-frexp.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/float.h: + +math.h: + +/usr/include/math.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/math-vector.h: + +/usr/include/i386-linux-gnu/bits/libm-simd-decl-stubs.h: + +/usr/include/i386-linux-gnu/bits/huge_val.h: + +/usr/include/i386-linux-gnu/bits/huge_valf.h: + +/usr/include/i386-linux-gnu/bits/huge_vall.h: + +/usr/include/i386-linux-gnu/bits/inf.h: + +/usr/include/i386-linux-gnu/bits/nan.h: + +/usr/include/i386-linux-gnu/bits/mathdef.h: + +/usr/include/i386-linux-gnu/bits/mathcalls.h: + +/usr/include/i386-linux-gnu/bits/mathinline.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/printf-frexpl.Plo b/devspec.en_US/project/recutils/lib/.deps/printf-frexpl.Plo new file mode 100755 index 0000000..563261a --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/printf-frexpl.Plo @@ -0,0 +1,63 @@ +printf-frexpl.lo: printf-frexpl.c /usr/include/stdc-predef.h \ + ../src/config.h printf-frexp.c printf-frexpl.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/float.h math.h /usr/include/math.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/math-vector.h \ + /usr/include/i386-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/i386-linux-gnu/bits/huge_val.h \ + /usr/include/i386-linux-gnu/bits/huge_valf.h \ + /usr/include/i386-linux-gnu/bits/huge_vall.h \ + /usr/include/i386-linux-gnu/bits/inf.h \ + /usr/include/i386-linux-gnu/bits/nan.h \ + /usr/include/i386-linux-gnu/bits/mathdef.h \ + /usr/include/i386-linux-gnu/bits/mathcalls.h \ + /usr/include/i386-linux-gnu/bits/mathinline.h fpucw.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +printf-frexp.c: + +printf-frexpl.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/float.h: + +math.h: + +/usr/include/math.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/math-vector.h: + +/usr/include/i386-linux-gnu/bits/libm-simd-decl-stubs.h: + +/usr/include/i386-linux-gnu/bits/huge_val.h: + +/usr/include/i386-linux-gnu/bits/huge_valf.h: + +/usr/include/i386-linux-gnu/bits/huge_vall.h: + +/usr/include/i386-linux-gnu/bits/inf.h: + +/usr/include/i386-linux-gnu/bits/nan.h: + +/usr/include/i386-linux-gnu/bits/mathdef.h: + +/usr/include/i386-linux-gnu/bits/mathcalls.h: + +/usr/include/i386-linux-gnu/bits/mathinline.h: + +fpucw.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/printf-parse.Plo b/devspec.en_US/project/recutils/lib/.deps/printf-parse.Plo new file mode 100755 index 0000000..54e85fa --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/printf-parse.Plo @@ -0,0 +1,179 @@ +printf-parse.lo: printf-parse.c /usr/include/stdc-predef.h \ + ../src/config.h printf-parse.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h printf-args.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h wchar.h \ + /usr/include/wchar.h stdio.h /usr/include/stdio.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/wchar.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/wchar2.h stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + limits.h /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h xsize.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +printf-parse.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +printf-args.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +wchar.h: + +/usr/include/wchar.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/wchar2.h: + +stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +xsize.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/printf.Plo b/devspec.en_US/project/recutils/lib/.deps/printf.Plo new file mode 100755 index 0000000..62906e8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/printf.Plo @@ -0,0 +1,98 @@ +printf.lo: printf.c /usr/include/stdc-predef.h ../src/config.h stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/progname.Plo b/devspec.en_US/project/recutils/lib/.deps/progname.Plo new file mode 100755 index 0000000..384696d --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/progname.Plo @@ -0,0 +1,151 @@ +progname.lo: progname.c /usr/include/stdc-predef.h ../src/config.h \ + progname.h /usr/include/errno.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h stdio.h /usr/include/stdio.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +progname.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/qcopy-acl.Plo b/devspec.en_US/project/recutils/lib/.deps/qcopy-acl.Plo new file mode 100755 index 0000000..6b42d88 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/qcopy-acl.Plo @@ -0,0 +1,152 @@ +qcopy-acl.lo: qcopy-acl.c /usr/include/stdc-predef.h ../src/config.h \ + acl.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h time.h /usr/include/time.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h sys/stat.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/sys/stat.h \ + /usr/include/i386-linux-gnu/bits/stat.h acl-internal.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +acl.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +time.h: + +/usr/include/time.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +sys/stat.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/sys/stat.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +acl-internal.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/qset-acl.Plo b/devspec.en_US/project/recutils/lib/.deps/qset-acl.Plo new file mode 100755 index 0000000..aa0f1db --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/qset-acl.Plo @@ -0,0 +1,166 @@ +qset-acl.lo: qset-acl.c /usr/include/stdc-predef.h ../src/config.h \ + string.h /usr/include/string.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h acl.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h sys/stat.h \ + /usr/include/i386-linux-gnu/bits/timex.h \ + /usr/include/i386-linux-gnu/sys/stat.h \ + /usr/include/i386-linux-gnu/bits/stat.h acl-internal.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +string.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +acl.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +sys/stat.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/i386-linux-gnu/sys/stat.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +acl-internal.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/quotearg.Plo b/devspec.en_US/project/recutils/lib/.deps/quotearg.Plo new file mode 100755 index 0000000..c2a41aa --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/quotearg.Plo @@ -0,0 +1,267 @@ +quotearg.lo: quotearg.c /usr/include/stdc-predef.h ../src/config.h \ + quotearg.h /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h quote.h \ + minmax.h /usr/include/i386-linux-gnu/sys/param.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h signal.h \ + /usr/include/signal.h /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h \ + /usr/include/i386-linux-gnu/bits/param.h /usr/include/linux/param.h \ + /usr/include/i386-linux-gnu/asm/param.h /usr/include/asm-generic/param.h \ + xalloc.h stdint.h /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h \ + /usr/include/stdint.h /usr/include/i386-linux-gnu/bits/wchar.h \ + xalloc-oversized.h c-strcaseeq.h c-strcase.h c-ctype.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h localcharset.h \ + /usr/include/ctype.h /usr/include/xlocale.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h stdlib.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h wchar.h /usr/include/wchar.h \ + stdio.h /usr/include/stdio.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/wchar2.h wctype.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/wctype.h gettext.h \ + /usr/include/libintl.h locale.h /usr/include/locale.h \ + /usr/include/i386-linux-gnu/bits/locale.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +quotearg.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +quote.h: + +minmax.h: + +/usr/include/i386-linux-gnu/sys/param.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +signal.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +/usr/include/i386-linux-gnu/bits/param.h: + +/usr/include/linux/param.h: + +/usr/include/i386-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +xalloc.h: + +stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +xalloc-oversized.h: + +c-strcaseeq.h: + +c-strcase.h: + +c-ctype.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +localcharset.h: + +/usr/include/ctype.h: + +/usr/include/xlocale.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +wchar.h: + +/usr/include/wchar.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/wchar2.h: + +wctype.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/wctype.h: + +gettext.h: + +/usr/include/libintl.h: + +locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/raise.Plo b/devspec.en_US/project/recutils/lib/.deps/raise.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/raise.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/random_r.Plo b/devspec.en_US/project/recutils/lib/.deps/random_r.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/random_r.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/rawmemchr.Plo b/devspec.en_US/project/recutils/lib/.deps/rawmemchr.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/rawmemchr.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/read-file.Plo b/devspec.en_US/project/recutils/lib/.deps/read-file.Plo new file mode 100755 index 0000000..57ea8e3 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/read-file.Plo @@ -0,0 +1,183 @@ +read-file.lo: read-file.c /usr/include/stdc-predef.h ../src/config.h \ + read-file.h /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h sys/stat.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/sys/stat.h \ + /usr/include/i386-linux-gnu/bits/stat.h stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +read-file.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +sys/stat.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/sys/stat.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/readline.Plo b/devspec.en_US/project/recutils/lib/.deps/readline.Plo new file mode 100755 index 0000000..176dd83 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/readline.Plo @@ -0,0 +1,120 @@ +readline.lo: readline.c /usr/include/stdc-predef.h ../src/config.h \ + readline.h stdio.h /usr/include/stdio.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h string.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +readline.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +string.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/readlink.Plo b/devspec.en_US/project/recutils/lib/.deps/readlink.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/readlink.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/realloc.Plo b/devspec.en_US/project/recutils/lib/.deps/realloc.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/realloc.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/regcomp.Plo b/devspec.en_US/project/recutils/lib/.deps/regcomp.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/regcomp.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/regex.Plo b/devspec.en_US/project/recutils/lib/.deps/regex.Plo new file mode 100755 index 0000000..f14ace0 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/regex.Plo @@ -0,0 +1,235 @@ +regex.lo: regex.c /usr/include/stdc-predef.h libc-config.h \ + ../src/config.h /usr/include/errno.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h cdefs.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h regex.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h time.h /usr/include/time.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h regex_internal.h \ + /usr/include/assert.h /usr/include/ctype.h /usr/include/xlocale.h \ + stdio.h /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h stdlib.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h langinfo.h \ + /usr/include/langinfo.h /usr/include/nl_types.h \ + /usr/include/i386-linux-gnu/bits/locale.h locale.h /usr/include/locale.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/include/i386-linux-gnu/bits/wchar2.h wctype.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/wctype.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + intprops.h /usr/include/libintl.h regex_internal.c regcomp.c regexec.c + +/usr/include/stdc-predef.h: + +libc-config.h: + +../src/config.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +cdefs.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +regex.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +time.h: + +/usr/include/time.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +regex_internal.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/include/xlocale.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +langinfo.h: + +/usr/include/langinfo.h: + +/usr/include/nl_types.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/i386-linux-gnu/bits/wchar2.h: + +wctype.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/wctype.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +intprops.h: + +/usr/include/libintl.h: + +regex_internal.c: + +regcomp.c: + +regexec.c: diff --git a/devspec.en_US/project/recutils/lib/.deps/regex_internal.Plo b/devspec.en_US/project/recutils/lib/.deps/regex_internal.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/regex_internal.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/regexec.Plo b/devspec.en_US/project/recutils/lib/.deps/regexec.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/regexec.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/rename.Plo b/devspec.en_US/project/recutils/lib/.deps/rename.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/rename.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/rmdir.Plo b/devspec.en_US/project/recutils/lib/.deps/rmdir.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/rmdir.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/se-context.Plo b/devspec.en_US/project/recutils/lib/.deps/se-context.Plo new file mode 100755 index 0000000..89166dd --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/se-context.Plo @@ -0,0 +1,37 @@ +se-context.lo: se-context.c /usr/include/stdc-predef.h ../src/config.h \ + selinux/context.h /usr/include/errno.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +selinux/context.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/se-selinux.Plo b/devspec.en_US/project/recutils/lib/.deps/se-selinux.Plo new file mode 100755 index 0000000..f4f0483 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/se-selinux.Plo @@ -0,0 +1,86 @@ +se-selinux.lo: se-selinux.c /usr/include/stdc-predef.h ../src/config.h \ + selinux/selinux.h sys/types.h /usr/include/i386-linux-gnu/sys/types.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h time.h /usr/include/time.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +selinux/selinux.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +time.h: + +/usr/include/time.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/secure_getenv.Plo b/devspec.en_US/project/recutils/lib/.deps/secure_getenv.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/secure_getenv.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/set-acl.Plo b/devspec.en_US/project/recutils/lib/.deps/set-acl.Plo new file mode 100755 index 0000000..c77eec4 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/set-acl.Plo @@ -0,0 +1,135 @@ +set-acl.lo: set-acl.c /usr/include/stdc-predef.h ../src/config.h acl.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h time.h /usr/include/time.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h sys/stat.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/sys/stat.h \ + /usr/include/i386-linux-gnu/bits/stat.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h quote.h error.h gettext.h \ + /usr/include/libintl.h locale.h /usr/include/locale.h \ + /usr/include/i386-linux-gnu/bits/locale.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +acl.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +time.h: + +/usr/include/time.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +sys/stat.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/sys/stat.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +quote.h: + +error.h: + +gettext.h: + +/usr/include/libintl.h: + +locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/set-permissions.Plo b/devspec.en_US/project/recutils/lib/.deps/set-permissions.Plo new file mode 100755 index 0000000..da06f83 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/set-permissions.Plo @@ -0,0 +1,152 @@ +set-permissions.lo: set-permissions.c /usr/include/stdc-predef.h \ + ../src/config.h acl.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + sys/types.h /usr/include/i386-linux-gnu/sys/types.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h time.h /usr/include/time.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h sys/stat.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/sys/stat.h \ + /usr/include/i386-linux-gnu/bits/stat.h acl-internal.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +acl.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +time.h: + +/usr/include/time.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +sys/stat.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/sys/stat.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +acl-internal.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/setenv.Plo b/devspec.en_US/project/recutils/lib/.deps/setenv.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/setenv.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/sig-handler.Plo b/devspec.en_US/project/recutils/lib/.deps/sig-handler.Plo new file mode 100755 index 0000000..fafc90e --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/sig-handler.Plo @@ -0,0 +1,97 @@ +sig-handler.lo: sig-handler.c /usr/include/stdc-predef.h ../src/config.h \ + sig-handler.h signal.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h time.h /usr/include/time.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/signal.h \ + /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +sig-handler.h: + +signal.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +time.h: + +/usr/include/time.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/sigaction.Plo b/devspec.en_US/project/recutils/lib/.deps/sigaction.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/sigaction.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/signbitd.Plo b/devspec.en_US/project/recutils/lib/.deps/signbitd.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/signbitd.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/signbitf.Plo b/devspec.en_US/project/recutils/lib/.deps/signbitf.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/signbitf.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/signbitl.Plo b/devspec.en_US/project/recutils/lib/.deps/signbitl.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/signbitl.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/sigprocmask.Plo b/devspec.en_US/project/recutils/lib/.deps/sigprocmask.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/sigprocmask.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/spawn_faction_addopen.Plo b/devspec.en_US/project/recutils/lib/.deps/spawn_faction_addopen.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/spawn_faction_addopen.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/spawn_faction_destroy.Plo b/devspec.en_US/project/recutils/lib/.deps/spawn_faction_destroy.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/spawn_faction_destroy.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/spawn_faction_init.Plo b/devspec.en_US/project/recutils/lib/.deps/spawn_faction_init.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/spawn_faction_init.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/spawnattr_destroy.Plo b/devspec.en_US/project/recutils/lib/.deps/spawnattr_destroy.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/spawnattr_destroy.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/spawnattr_init.Plo b/devspec.en_US/project/recutils/lib/.deps/spawnattr_init.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/spawnattr_init.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/spawnattr_setflags.Plo b/devspec.en_US/project/recutils/lib/.deps/spawnattr_setflags.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/spawnattr_setflags.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/spawnattr_setsigmask.Plo b/devspec.en_US/project/recutils/lib/.deps/spawnattr_setsigmask.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/spawnattr_setsigmask.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/spawni.Plo b/devspec.en_US/project/recutils/lib/.deps/spawni.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/spawni.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/spawnp.Plo b/devspec.en_US/project/recutils/lib/.deps/spawnp.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/spawnp.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/stat-time.Plo b/devspec.en_US/project/recutils/lib/.deps/stat-time.Plo new file mode 100755 index 0000000..dc4f3e2 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/stat-time.Plo @@ -0,0 +1,130 @@ +stat-time.lo: stat-time.c /usr/include/stdc-predef.h ../src/config.h \ + stat-time.h intprops.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h sys/stat.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/sys/stat.h \ + /usr/include/i386-linux-gnu/bits/stat.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +stat-time.h: + +intprops.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +sys/stat.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/sys/stat.h: + +/usr/include/i386-linux-gnu/bits/stat.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/stat-w32.Plo b/devspec.en_US/project/recutils/lib/.deps/stat-w32.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/stat-w32.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/stat.Plo b/devspec.en_US/project/recutils/lib/.deps/stat.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/stat.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/strcasecmp.Plo b/devspec.en_US/project/recutils/lib/.deps/strcasecmp.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/strcasecmp.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/strcasestr.Plo b/devspec.en_US/project/recutils/lib/.deps/strcasestr.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/strcasestr.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/strchrnul.Plo b/devspec.en_US/project/recutils/lib/.deps/strchrnul.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/strchrnul.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/strdup.Plo b/devspec.en_US/project/recutils/lib/.deps/strdup.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/strdup.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/strerror-override.Plo b/devspec.en_US/project/recutils/lib/.deps/strerror-override.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/strerror-override.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/strerror.Plo b/devspec.en_US/project/recutils/lib/.deps/strerror.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/strerror.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/stripslash.Plo b/devspec.en_US/project/recutils/lib/.deps/stripslash.Plo new file mode 100755 index 0000000..d14ddb7 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/stripslash.Plo @@ -0,0 +1,15 @@ +stripslash.lo: stripslash.c /usr/include/stdc-predef.h ../src/config.h \ + dirname.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h dosname.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +dirname.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +dosname.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/strncasecmp.Plo b/devspec.en_US/project/recutils/lib/.deps/strncasecmp.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/strncasecmp.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/strsep.Plo b/devspec.en_US/project/recutils/lib/.deps/strsep.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/strsep.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/strverscmp.Plo b/devspec.en_US/project/recutils/lib/.deps/strverscmp.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/strverscmp.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/tempname.Plo b/devspec.en_US/project/recutils/lib/.deps/tempname.Plo new file mode 100755 index 0000000..be613f2 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/tempname.Plo @@ -0,0 +1,238 @@ +tempname.lo: tempname.c /usr/include/stdc-predef.h ../src/config.h \ + tempname.h stdio.h /usr/include/stdio.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/assert.h \ + /usr/include/errno.h /usr/include/i386-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/i386-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + stdlib.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h fcntl.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h sys/time.h \ + /usr/include/i386-linux-gnu/sys/time.h stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h unistd.h \ + /usr/include/unistd.h /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/i386-linux-gnu/bits/unistd.h sys/stat.h \ + /usr/include/i386-linux-gnu/bits/timex.h \ + /usr/include/i386-linux-gnu/sys/stat.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +tempname.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/assert.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +sys/time.h: + +/usr/include/i386-linux-gnu/sys/time.h: + +stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/i386-linux-gnu/bits/unistd.h: + +sys/stat.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/i386-linux-gnu/sys/stat.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/time_r.Plo b/devspec.en_US/project/recutils/lib/.deps/time_r.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/time_r.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/time_rz.Plo b/devspec.en_US/project/recutils/lib/.deps/time_rz.Plo new file mode 100755 index 0000000..e4702ab --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/time_rz.Plo @@ -0,0 +1,158 @@ +time_rz.lo: time_rz.c /usr/include/stdc-predef.h ../src/config.h time.h \ + /usr/include/time.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/xlocale.h \ + /usr/include/errno.h /usr/include/i386-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/i386-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + limits.h /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h flexmember.h time-internal.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +time.h: + +/usr/include/time.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/xlocale.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +flexmember.h: + +time-internal.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/timegm.Plo b/devspec.en_US/project/recutils/lib/.deps/timegm.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/timegm.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/timespec.Plo b/devspec.en_US/project/recutils/lib/.deps/timespec.Plo new file mode 100755 index 0000000..962073c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/timespec.Plo @@ -0,0 +1,48 @@ +timespec.lo: timespec.c /usr/include/stdc-predef.h ../src/config.h \ + timespec.h time.h /usr/include/time.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/xlocale.h \ + arg-nonnull.h verify.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +timespec.h: + +time.h: + +/usr/include/time.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/xlocale.h: + +arg-nonnull.h: + +verify.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/tmpdir.Plo b/devspec.en_US/project/recutils/lib/.deps/tmpdir.Plo new file mode 100755 index 0000000..b37f25f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/tmpdir.Plo @@ -0,0 +1,209 @@ +tmpdir.lo: tmpdir.c /usr/include/stdc-predef.h ../src/config.h tmpdir.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + sys/types.h /usr/include/i386-linux-gnu/sys/types.h time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h stdio.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h wchar.h \ + /usr/include/wchar.h /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/stat.h \ + /usr/include/i386-linux-gnu/bits/timex.h \ + /usr/include/i386-linux-gnu/sys/stat.h \ + /usr/include/i386-linux-gnu/bits/stat.h pathmax.h unistd.h \ + /usr/include/unistd.h /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/i386-linux-gnu/bits/unistd.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +tmpdir.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/stat.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/i386-linux-gnu/sys/stat.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +pathmax.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/i386-linux-gnu/bits/unistd.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/tzset.Plo b/devspec.en_US/project/recutils/lib/.deps/tzset.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/tzset.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/unistd.Plo b/devspec.en_US/project/recutils/lib/.deps/unistd.Plo new file mode 100755 index 0000000..96bfc66 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/unistd.Plo @@ -0,0 +1,90 @@ +unistd.lo: unistd.c /usr/include/stdc-predef.h ../src/config.h unistd.h \ + unistd.h /usr/include/unistd.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/i386-linux-gnu/bits/unistd.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +unistd.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/i386-linux-gnu/bits/unistd.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/unsetenv.Plo b/devspec.en_US/project/recutils/lib/.deps/unsetenv.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/unsetenv.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/vasnprintf.Plo b/devspec.en_US/project/recutils/lib/.deps/vasnprintf.Plo new file mode 100755 index 0000000..7cc2b71 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/vasnprintf.Plo @@ -0,0 +1,214 @@ +vasnprintf.lo: vasnprintf.c /usr/include/stdc-predef.h ../src/config.h \ + alloca.h vasnprintf.h /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h locale.h \ + /usr/include/locale.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/locale.h /usr/include/xlocale.h stdio.h \ + /usr/include/stdio.h /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/float.h langinfo.h \ + /usr/include/langinfo.h /usr/include/nl_types.h printf-parse.h \ + printf-args.h /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/include/i386-linux-gnu/bits/wchar2.h xsize.h stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + verify.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +alloca.h: + +vasnprintf.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +locale.h: + +/usr/include/locale.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +/usr/include/xlocale.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/float.h: + +langinfo.h: + +/usr/include/langinfo.h: + +/usr/include/nl_types.h: + +printf-parse.h: + +printf-args.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/i386-linux-gnu/bits/wchar2.h: + +xsize.h: + +stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +verify.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/vasprintf.Plo b/devspec.en_US/project/recutils/lib/.deps/vasprintf.Plo new file mode 100755 index 0000000..5eb02ec --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/vasprintf.Plo @@ -0,0 +1,162 @@ +vasprintf.lo: vasprintf.c /usr/include/stdc-predef.h ../src/config.h \ + stdio.h /usr/include/stdio.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h vasnprintf.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +vasnprintf.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/version-etc-fsf.Plo b/devspec.en_US/project/recutils/lib/.deps/version-etc-fsf.Plo new file mode 100755 index 0000000..fbb759a --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/version-etc-fsf.Plo @@ -0,0 +1,101 @@ +version-etc-fsf.lo: version-etc-fsf.c /usr/include/stdc-predef.h \ + ../src/config.h version-etc.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +version-etc.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/version-etc.Plo b/devspec.en_US/project/recutils/lib/.deps/version-etc.Plo new file mode 100755 index 0000000..7c3e953 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/version-etc.Plo @@ -0,0 +1,133 @@ +version-etc.lo: version-etc.c /usr/include/stdc-predef.h ../src/config.h \ + version-etc.h /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h unlocked-io.h gettext.h \ + /usr/include/libintl.h locale.h /usr/include/locale.h \ + /usr/include/i386-linux-gnu/bits/locale.h /usr/include/xlocale.h \ + string.h /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +version-etc.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +unlocked-io.h: + +gettext.h: + +/usr/include/libintl.h: + +locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +/usr/include/xlocale.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/vfprintf.Plo b/devspec.en_US/project/recutils/lib/.deps/vfprintf.Plo new file mode 100755 index 0000000..34731dd --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/vfprintf.Plo @@ -0,0 +1,164 @@ +vfprintf.lo: vfprintf.c /usr/include/stdc-predef.h ../src/config.h \ + stdio.h /usr/include/stdio.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h fseterr.h vasnprintf.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +fseterr.h: + +vasnprintf.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/wait-process.Plo b/devspec.en_US/project/recutils/lib/.deps/wait-process.Plo new file mode 100755 index 0000000..248ae51 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/wait-process.Plo @@ -0,0 +1,231 @@ +wait-process.lo: wait-process.c /usr/include/stdc-predef.h \ + ../src/config.h wait-process.h stdlib.h /usr/include/stdlib.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + sys/types.h /usr/include/i386-linux-gnu/sys/types.h time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h unistd.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/i386-linux-gnu/bits/unistd.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h signal.h \ + /usr/include/signal.h /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h sys/wait.h \ + /usr/include/i386-linux-gnu/sys/wait.h error.h fatal-signal.h xalloc.h \ + stdint.h /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h \ + /usr/include/stdint.h /usr/include/i386-linux-gnu/bits/wchar.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h xalloc-oversized.h \ + gettext.h /usr/include/libintl.h locale.h /usr/include/locale.h \ + /usr/include/i386-linux-gnu/bits/locale.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +wait-process.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/i386-linux-gnu/bits/unistd.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +signal.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +sys/wait.h: + +/usr/include/i386-linux-gnu/sys/wait.h: + +error.h: + +fatal-signal.h: + +xalloc.h: + +stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +xalloc-oversized.h: + +gettext.h: + +/usr/include/libintl.h: + +locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/waitpid.Plo b/devspec.en_US/project/recutils/lib/.deps/waitpid.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/waitpid.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/wcrtomb.Plo b/devspec.en_US/project/recutils/lib/.deps/wcrtomb.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/wcrtomb.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/wctob.Plo b/devspec.en_US/project/recutils/lib/.deps/wctob.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/wctob.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/wctomb.Plo b/devspec.en_US/project/recutils/lib/.deps/wctomb.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/wctomb.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/lib/.deps/wctype-h.Plo b/devspec.en_US/project/recutils/lib/.deps/wctype-h.Plo new file mode 100755 index 0000000..5b26a5a --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/wctype-h.Plo @@ -0,0 +1,115 @@ +wctype-h.lo: wctype-h.c /usr/include/stdc-predef.h ../src/config.h \ + wctype.h /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h time.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/wchar.h \ + /usr/include/i386-linux-gnu/bits/wchar2.h wctype.h /usr/include/wctype.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +wctype.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +/usr/include/i386-linux-gnu/bits/wchar2.h: + +wctype.h: + +/usr/include/wctype.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/xalloc-die.Plo b/devspec.en_US/project/recutils/lib/.deps/xalloc-die.Plo new file mode 100755 index 0000000..fdfb247 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/xalloc-die.Plo @@ -0,0 +1,162 @@ +xalloc-die.lo: xalloc-die.c /usr/include/stdc-predef.h ../src/config.h \ + xalloc.h /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/wchar.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h xalloc-oversized.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + sys/types.h /usr/include/i386-linux-gnu/sys/types.h time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h error.h exitfail.h gettext.h \ + /usr/include/libintl.h locale.h /usr/include/locale.h \ + /usr/include/i386-linux-gnu/bits/locale.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +xalloc.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +xalloc-oversized.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +error.h: + +exitfail.h: + +gettext.h: + +/usr/include/libintl.h: + +locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/xmalloc.Plo b/devspec.en_US/project/recutils/lib/.deps/xmalloc.Plo new file mode 100755 index 0000000..6f81d05 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/xmalloc.Plo @@ -0,0 +1,146 @@ +xmalloc.lo: xmalloc.c /usr/include/stdc-predef.h ../src/config.h xalloc.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/wchar.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h xalloc-oversized.h stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + sys/types.h /usr/include/i386-linux-gnu/sys/types.h time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +xalloc.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +xalloc-oversized.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: diff --git a/devspec.en_US/project/recutils/lib/.deps/xsize.Plo b/devspec.en_US/project/recutils/lib/.deps/xsize.Plo new file mode 100755 index 0000000..2c4b3c3 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/.deps/xsize.Plo @@ -0,0 +1,62 @@ +xsize.lo: xsize.c /usr/include/stdc-predef.h ../src/config.h xsize.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +xsize.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: diff --git a/devspec.en_US/project/recutils/lib/Makefile b/devspec.en_US/project/recutils/lib/Makefile new file mode 100755 index 0000000..c5ec2f9 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/Makefile @@ -0,0 +1,4004 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# lib/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# Copyright (C) 2002-2019 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This file is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this file. If not, see <https://www.gnu.org/licenses/>. +# +# As a special exception to the GNU General Public License, +# this file may be distributed as part of a program that +# contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. +# Reproduce by: +# gnulib-tool --import --local-dir=gl \ +# --lib=librecutils \ +# --source-base=lib \ +# --m4-base=m4 \ +# --doc-base=doc \ +# --tests-base=tests \ +# --aux-dir=build-aux \ +# --no-conditional-dependencies \ +# --libtool \ +# --macro-prefix=gl \ +# acl \ +# alloca \ +# announce-gen \ +# array-list \ +# autobuild \ +# base64 \ +# btowc \ +# c-ctype \ +# closeout \ +# crc \ +# euidaccess \ +# execute \ +# extensions \ +# flock \ +# floor \ +# fprintf-posix \ +# fwriting \ +# gendocs \ +# getdelim \ +# getopt-gnu \ +# getpass-gnu \ +# gettext-h \ +# gnupload \ +# list \ +# localcharset \ +# maintainer-makefile \ +# mbrlen \ +# mbrtowc \ +# mbsinit \ +# memchr \ +# minmax \ +# mkostemp \ +# mkstemp \ +# obstack \ +# parse-datetime \ +# pathmax \ +# printf-posix \ +# progname \ +# random_r \ +# read-file \ +# readline \ +# regex \ +# regexprops-generic \ +# rename \ +# selinux-h \ +# signal-h \ +# ssize_t \ +# stat-macros \ +# stdbool \ +# stdint \ +# strcasestr \ +# strerror \ +# strsep \ +# strverscmp \ +# tempname \ +# threadlib \ +# tmpdir \ +# unlocked-io \ +# vasnprintf-posix \ +# vasprintf \ +# vasprintf-posix \ +# verify \ +# version-etc-fsf \ +# wcrtomb \ +# wctob + + + + +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/recutils +pkgincludedir = $(includedir)/recutils +pkglibdir = $(libdir)/recutils +pkglibexecdir = $(libexecdir)/recutils +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +subdir = lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +LTLIBRARIES = $(noinst_LTLIBRARIES) +am__DEPENDENCIES_1 = +am__dirstamp = $(am__leading_dot)dirstamp +am_librecutils_la_OBJECTS = copy-acl.lo set-acl.lo acl-errno-valid.lo \ + acl-internal.lo get-permissions.lo set-permissions.lo \ + gl_array_list.lo base64.lo c-ctype.lo c-strcasecmp.lo \ + c-strncasecmp.lo cloexec.lo close-stream.lo closeout.lo crc.lo \ + dirname-lgpl.lo basename-lgpl.lo stripslash.lo execute.lo \ + exitfail.lo fatal-signal.lo fd-hook.lo getprogname.lo \ + gettime.lo hard-locale.lo gl_list.lo localcharset.lo \ + glthread/lock.lo malloca.lo math.lo nstrftime.lo \ + parse-datetime.lo printf-frexp.lo printf-frexpl.lo progname.lo \ + qcopy-acl.lo qset-acl.lo quotearg.lo read-file.lo \ + se-context.lo se-selinux.lo sig-handler.lo stat-time.lo \ + tempname.lo glthread/threadlib.lo timespec.lo tmpdir.lo \ + unistd.lo version-etc.lo version-etc-fsf.lo wait-process.lo \ + wctype-h.lo xmalloc.lo xalloc-die.lo xsize.lo +librecutils_la_OBJECTS = $(am_librecutils_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +am__v_lt_1 = +librecutils_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(librecutils_la_LDFLAGS) $(LDFLAGS) -o \ + $@ +AM_V_P = $(am__v_P_$(V)) +am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I. -I$(top_builddir)/src +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ + -e s/c++$$/h++/ -e s/c$$/h/ +YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) +LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS) +AM_V_YACC = $(am__v_YACC_$(V)) +am__v_YACC_ = $(am__v_YACC_$(AM_DEFAULT_VERBOSITY)) +am__v_YACC_0 = @echo " YACC " $@; +am__v_YACC_1 = +YLWRAP = $(top_srcdir)/build-aux/ylwrap +SOURCES = $(librecutils_la_SOURCES) $(EXTRA_librecutils_la_SOURCES) +DIST_SOURCES = $(librecutils_la_SOURCES) \ + $(EXTRA_librecutils_la_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(noinst_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/depcomp $(top_srcdir)/build-aux/ylwrap \ + alloca.c parse-datetime.c +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing aclocal-1.15 +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = $${TAR-tar} +AM_DEFAULT_VERBOSITY = 1 +APPLE_UNIVERSAL_BUILD = 0 +AR = ar +ARFLAGS = cr +ASM_SYMBOL_PREFIX = "" +AUTOCONF = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoconf +AUTOHEADER = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoheader +AUTOMAKE = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing automake-1.15 +AWK = gawk +BASH_HEADERS = /usr/include/bash +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CA68 = +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CHECK_CFLAGS = +CHECK_LIBS = +CONFIG_INCLUDE = src/config.h +CPP = gcc -E +CPPFLAGS = +CURLLIBS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = false +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FGREP = /bin/grep -F +FLOAT_H = +FLOOR_LIBM = -lm +GETOPT_CDEFS_H = +GETOPT_H = +GETTEXT_MACRO_VERSION = 0.19 +GLIBC21 = yes +GLIB_CFLAGS = +GLIB_LIBS = +GMSGFMT = /usr/bin/msgfmt +GMSGFMT_015 = /usr/bin/msgfmt +GNULIB_ACOSF = 0 +GNULIB_ACOSL = 0 +GNULIB_ASINF = 0 +GNULIB_ASINL = 0 +GNULIB_ATAN2F = 0 +GNULIB_ATANF = 0 +GNULIB_ATANL = 0 +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CANONICALIZE_FILE_NAME = 1 +GNULIB_CBRT = 0 +GNULIB_CBRTF = 0 +GNULIB_CBRTL = 0 +GNULIB_CEIL = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHDIR = 1 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 1 +GNULIB_COPYSIGN = 0 +GNULIB_COPYSIGNF = 0 +GNULIB_COPYSIGNL = 0 +GNULIB_COSF = 0 +GNULIB_COSHF = 0 +GNULIB_COSL = 0 +GNULIB_CTIME = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP = 0 +GNULIB_DUP2 = 1 +GNULIB_DUP3 = 0 +GNULIB_DUPLOCALE = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 1 +GNULIB_EXP2 = 0 +GNULIB_EXP2F = 0 +GNULIB_EXP2L = 0 +GNULIB_EXPF = 0 +GNULIB_EXPL = 0 +GNULIB_EXPLICIT_BZERO = 0 +GNULIB_EXPM1 = 0 +GNULIB_EXPM1F = 0 +GNULIB_EXPM1L = 0 +GNULIB_FABSF = 0 +GNULIB_FABSL = 0 +GNULIB_FACCESSAT = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCHMODAT = 0 +GNULIB_FCHOWNAT = 0 +GNULIB_FCLOSE = 0 +GNULIB_FCNTL = 1 +GNULIB_FDATASYNC = 0 +GNULIB_FDOPEN = 0 +GNULIB_FFLUSH = 0 +GNULIB_FFS = 0 +GNULIB_FFSL = 0 +GNULIB_FFSLL = 0 +GNULIB_FGETC = 1 +GNULIB_FGETS = 1 +GNULIB_FLOCK = 1 +GNULIB_FLOOR = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FMA = 0 +GNULIB_FMAF = 0 +GNULIB_FMAL = 0 +GNULIB_FMOD = 0 +GNULIB_FMODF = 0 +GNULIB_FMODL = 0 +GNULIB_FOPEN = 0 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 1 +GNULIB_FPURGE = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREAD = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPF = 0 +GNULIB_FREXPL = 1 +GNULIB_FSCANF = 1 +GNULIB_FSEEK = 1 +GNULIB_FSEEKO = 1 +GNULIB_FSTAT = 1 +GNULIB_FSTATAT = 0 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 1 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FUTIMENS = 0 +GNULIB_FWRITE = 1 +GNULIB_GETC = 1 +GNULIB_GETCHAR = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 1 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETGROUPS = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 1 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETPASS = 1 +GNULIB_GETSUBOPT = 0 +GNULIB_GETTIMEOFDAY = 1 +GNULIB_GETUSERSHELL = 0 +GNULIB_GL_UNISTD_H_GETOPT = +GNULIB_GRANTPT = 0 +GNULIB_GROUP_MEMBER = 1 +GNULIB_HYPOT = 0 +GNULIB_HYPOTF = 0 +GNULIB_HYPOTL = 0 +GNULIB_ILOGB = 0 +GNULIB_ILOGBF = 0 +GNULIB_ILOGBL = 0 +GNULIB_IMAXABS = 0 +GNULIB_IMAXDIV = 0 +GNULIB_ISATTY = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_ISWBLANK = 0 +GNULIB_ISWCTYPE = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPF = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LINKAT = 0 +GNULIB_LOCALECONV = 1 +GNULIB_LOCALENAME = 0 +GNULIB_LOCALTIME = 0 +GNULIB_LOG = 0 +GNULIB_LOG10 = 0 +GNULIB_LOG10F = 0 +GNULIB_LOG10L = 0 +GNULIB_LOG1P = 0 +GNULIB_LOG1PF = 0 +GNULIB_LOG1PL = 0 +GNULIB_LOG2 = 0 +GNULIB_LOG2F = 0 +GNULIB_LOG2L = 0 +GNULIB_LOGB = 0 +GNULIB_LOGBF = 0 +GNULIB_LOGBL = 0 +GNULIB_LOGF = 0 +GNULIB_LOGL = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MBRLEN = 1 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MBTOWC = 1 +GNULIB_MEMCHR = 1 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDIRAT = 0 +GNULIB_MKDTEMP = 0 +GNULIB_MKFIFO = 0 +GNULIB_MKFIFOAT = 0 +GNULIB_MKNOD = 0 +GNULIB_MKNODAT = 0 +GNULIB_MKOSTEMP = 1 +GNULIB_MKOSTEMPS = 0 +GNULIB_MKSTEMP = 1 +GNULIB_MKSTEMPS = 0 +GNULIB_MKTIME = 1 +GNULIB_MODF = 0 +GNULIB_MODFF = 0 +GNULIB_MODFL = 0 +GNULIB_NANOSLEEP = 0 +GNULIB_NL_LANGINFO = 1 +GNULIB_NONBLOCKING = 0 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_OPENAT = 0 +GNULIB_OVERRIDES_STRUCT_STAT = 0 +GNULIB_OVERRIDES_WINT_T = 0 +GNULIB_PCLOSE = 0 +GNULIB_PERROR = 0 +GNULIB_PIPE = 0 +GNULIB_PIPE2 = 0 +GNULIB_POPEN = 0 +GNULIB_POSIX_OPENPT = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_POWF = 0 +GNULIB_PREAD = 0 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 1 +GNULIB_PTHREAD_SIGMASK = 0 +GNULIB_PTSNAME = 0 +GNULIB_PTSNAME_R = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_PWRITE = 0 +GNULIB_QSORT_R = 0 +GNULIB_RAISE = 1 +GNULIB_RANDOM = 0 +GNULIB_RANDOM_R = 1 +GNULIB_RAWMEMCHR = 1 +GNULIB_READ = 0 +GNULIB_READLINK = 1 +GNULIB_READLINKAT = 0 +GNULIB_REALLOCARRAY = 0 +GNULIB_REALLOC_POSIX = 1 +GNULIB_REALPATH = 1 +GNULIB_REMAINDER = 0 +GNULIB_REMAINDERF = 0 +GNULIB_REMAINDERL = 0 +GNULIB_REMOVE = 0 +GNULIB_RENAME = 1 +GNULIB_RENAMEAT = 0 +GNULIB_RINT = 0 +GNULIB_RINTF = 0 +GNULIB_RINTL = 0 +GNULIB_RMDIR = 1 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SCANF = 1 +GNULIB_SECURE_GETENV = 1 +GNULIB_SETENV = 1 +GNULIB_SETHOSTNAME = 0 +GNULIB_SETLOCALE = 0 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SINF = 0 +GNULIB_SINHF = 0 +GNULIB_SINL = 0 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 0 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_SQRTF = 0 +GNULIB_SQRTL = 0 +GNULIB_STAT = 1 +GNULIB_STDIO_H_NONBLOCKING = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 1 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 1 +GNULIB_STRERROR = 1 +GNULIB_STRERROR_R = 0 +GNULIB_STRFTIME = 0 +GNULIB_STRNCAT = 0 +GNULIB_STRNDUP = 0 +GNULIB_STRNLEN = 0 +GNULIB_STRPBRK = 0 +GNULIB_STRPTIME = 0 +GNULIB_STRSEP = 1 +GNULIB_STRSIGNAL = 0 +GNULIB_STRSTR = 0 +GNULIB_STRTOD = 0 +GNULIB_STRTOIMAX = 0 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRTOUMAX = 0 +GNULIB_STRVERSCMP = 1 +GNULIB_SYMLINK = 0 +GNULIB_SYMLINKAT = 0 +GNULIB_SYSTEM_POSIX = 0 +GNULIB_TANF = 0 +GNULIB_TANHF = 0 +GNULIB_TANL = 0 +GNULIB_TIMEGM = 1 +GNULIB_TIME_R = 1 +GNULIB_TIME_RZ = 1 +GNULIB_TMPFILE = 0 +GNULIB_TOWCTRANS = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCATE = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_TTYNAME_R = 0 +GNULIB_TZSET = 1 +GNULIB_UNISTD_H_NONBLOCKING = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNLINK = 0 +GNULIB_UNLINKAT = 0 +GNULIB_UNLOCKPT = 0 +GNULIB_UNSETENV = 1 +GNULIB_USLEEP = 0 +GNULIB_UTIMENSAT = 0 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 1 +GNULIB_VFSCANF = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSCANF = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WAITPID = 1 +GNULIB_WCPCPY = 0 +GNULIB_WCPNCPY = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSCASECMP = 0 +GNULIB_WCSCAT = 0 +GNULIB_WCSCHR = 0 +GNULIB_WCSCMP = 0 +GNULIB_WCSCOLL = 0 +GNULIB_WCSCPY = 0 +GNULIB_WCSCSPN = 0 +GNULIB_WCSDUP = 0 +GNULIB_WCSFTIME = 0 +GNULIB_WCSLEN = 0 +GNULIB_WCSNCASECMP = 0 +GNULIB_WCSNCAT = 0 +GNULIB_WCSNCMP = 0 +GNULIB_WCSNCPY = 0 +GNULIB_WCSNLEN = 0 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSPBRK = 0 +GNULIB_WCSRCHR = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCSSPN = 0 +GNULIB_WCSSTR = 0 +GNULIB_WCSTOK = 0 +GNULIB_WCSWIDTH = 0 +GNULIB_WCSXFRM = 0 +GNULIB_WCTOB = 1 +GNULIB_WCTOMB = 1 +GNULIB_WCTRANS = 0 +GNULIB_WCTYPE = 0 +GNULIB_WCWIDTH = 0 +GNULIB_WMEMCHR = 0 +GNULIB_WMEMCMP = 0 +GNULIB_WMEMCPY = 0 +GNULIB_WMEMMOVE = 0 +GNULIB_WMEMSET = 0 +GNULIB_WRITE = 0 +GNULIB__EXIT = 0 +GREP = /bin/grep +HAVE_ACOSF = 1 +HAVE_ACOSL = 1 +HAVE_ASINF = 1 +HAVE_ASINL = 1 +HAVE_ATAN2F = 1 +HAVE_ATANF = 1 +HAVE_ATANL = 1 +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_C99_STDINT_H = 1 +HAVE_CANONICALIZE_FILE_NAME = 1 +HAVE_CBRT = 1 +HAVE_CBRTF = 1 +HAVE_CBRTL = 1 +HAVE_CHOWN = 1 +HAVE_COPYSIGN = 1 +HAVE_COPYSIGNL = 1 +HAVE_COSF = 1 +HAVE_COSHF = 1 +HAVE_COSL = 1 +HAVE_CRTDEFS_H = 0 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_CBRTF = 1 +HAVE_DECL_CBRTL = 1 +HAVE_DECL_CEILF = 1 +HAVE_DECL_CEILL = 1 +HAVE_DECL_COPYSIGNF = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXP2 = 1 +HAVE_DECL_EXP2F = 1 +HAVE_DECL_EXP2L = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_EXPM1L = 1 +HAVE_DECL_FCHDIR = 1 +HAVE_DECL_FDATASYNC = 1 +HAVE_DECL_FLOORF = 1 +HAVE_DECL_FLOORL = 1 +HAVE_DECL_FPURGE = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_FSEEKO = 1 +HAVE_DECL_FTELLO = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETDOMAINNAME = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_GETPAGESIZE = 1 +HAVE_DECL_GETUSERSHELL = 1 +HAVE_DECL_IMAXABS = 1 +HAVE_DECL_IMAXDIV = 1 +HAVE_DECL_INITSTATE = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOCALTIME_R = 1 +HAVE_DECL_LOG10L = 1 +HAVE_DECL_LOG2 = 1 +HAVE_DECL_LOG2F = 1 +HAVE_DECL_LOG2L = 1 +HAVE_DECL_LOGB = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_REMAINDER = 1 +HAVE_DECL_REMAINDERL = 1 +HAVE_DECL_RINTF = 1 +HAVE_DECL_ROUND = 1 +HAVE_DECL_ROUNDF = 1 +HAVE_DECL_ROUNDL = 1 +HAVE_DECL_SETENV = 1 +HAVE_DECL_SETHOSTNAME = 1 +HAVE_DECL_SETSTATE = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR_R = 1 +HAVE_DECL_STRNCASECMP = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOIMAX = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_STRTOUMAX = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCATE = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_TRUNCL = 1 +HAVE_DECL_TTYNAME_R = 1 +HAVE_DECL_UNSETENV = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_DUP3 = 1 +HAVE_DUPLOCALE = 1 +HAVE_EUIDACCESS = 1 +HAVE_EXPF = 1 +HAVE_EXPL = 1 +HAVE_EXPLICIT_BZERO = 1 +HAVE_EXPM1 = 1 +HAVE_EXPM1F = 1 +HAVE_FABSF = 1 +HAVE_FABSL = 1 +HAVE_FACCESSAT = 1 +HAVE_FCHDIR = 1 +HAVE_FCHMODAT = 1 +HAVE_FCHOWNAT = 1 +HAVE_FCNTL = 1 +HAVE_FDATASYNC = 1 +HAVE_FEATURES_H = 1 +HAVE_FFS = 1 +HAVE_FFSL = 1 +HAVE_FFSLL = 1 +HAVE_FLOCK = 1 +HAVE_FMA = 1 +HAVE_FMAF = 1 +HAVE_FMAL = 1 +HAVE_FMODF = 1 +HAVE_FMODL = 1 +HAVE_FREELOCALE = 1 +HAVE_FREXPF = 1 +HAVE_FSEEKO = 1 +HAVE_FSTATAT = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_FUTIMENS = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETGROUPS = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETLOGIN = 1 +HAVE_GETOPT_H = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETPASS = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETTIMEOFDAY = 1 +HAVE_GRANTPT = 1 +HAVE_GROUP_MEMBER = 1 +HAVE_HYPOTF = 1 +HAVE_HYPOTL = 1 +HAVE_ILOGB = 1 +HAVE_ILOGBF = 1 +HAVE_ILOGBL = 1 +HAVE_IMAXDIV_T = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWBLANK = 1 +HAVE_ISWCNTRL = 1 +HAVE_LANGINFO_ALTMON = 0 +HAVE_LANGINFO_CODESET = 1 +HAVE_LANGINFO_ERA = 1 +HAVE_LANGINFO_H = 1 +HAVE_LANGINFO_T_FMT_AMPM = 1 +HAVE_LANGINFO_YESEXPR = 1 +HAVE_LCHMOD = 1 +HAVE_LCHOWN = 1 +HAVE_LDEXPF = 1 +HAVE_LIBGCRYPT = no +HAVE_LINK = 1 +HAVE_LINKAT = 1 +HAVE_LOG10F = 1 +HAVE_LOG10L = 1 +HAVE_LOG1P = 1 +HAVE_LOG1PF = 1 +HAVE_LOG1PL = 1 +HAVE_LOGBF = 1 +HAVE_LOGBL = 1 +HAVE_LOGF = 1 +HAVE_LOGL = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MAX_ALIGN_T = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSLEN = 0 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMCHR = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDIRAT = 1 +HAVE_MKDTEMP = 1 +HAVE_MKFIFO = 1 +HAVE_MKFIFOAT = 1 +HAVE_MKNOD = 1 +HAVE_MKNODAT = 1 +HAVE_MKOSTEMP = 1 +HAVE_MKOSTEMPS = 1 +HAVE_MKSTEMP = 1 +HAVE_MKSTEMPS = 1 +HAVE_MODFF = 1 +HAVE_MODFL = 1 +HAVE_MSVC_INVALID_PARAMETER_HANDLER = 0 +HAVE_NANOSLEEP = 1 +HAVE_NEWLOCALE = 1 +HAVE_NL_LANGINFO = 1 +HAVE_OPENAT = 1 +HAVE_OS_H = 0 +HAVE_PCLOSE = 1 +HAVE_PIPE = 1 +HAVE_PIPE2 = 1 +HAVE_POPEN = 1 +HAVE_POSIX_OPENPT = 1 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_POSIX_SPAWNATTR_T = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = 1 +HAVE_POWF = 1 +HAVE_PREAD = 1 +HAVE_PTHREAD_SIGMASK = 1 +HAVE_PTSNAME = 1 +HAVE_PTSNAME_R = 1 +HAVE_PWRITE = 1 +HAVE_QSORT_R = 1 +HAVE_RAISE = 1 +HAVE_RANDOM = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_READLINKAT = 1 +HAVE_REALLOCARRAY = 1 +HAVE_REALPATH = 1 +HAVE_REMAINDER = 1 +HAVE_REMAINDERF = 1 +HAVE_RENAMEAT = 1 +HAVE_RINT = 1 +HAVE_RINTL = 1 +HAVE_RPMATCH = 1 +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0 +HAVE_SCHED_H = +HAVE_SECURE_GETENV = 1 +HAVE_SETENV = 1 +HAVE_SETHOSTNAME = 1 +HAVE_SIGACTION = 1 +HAVE_SIGHANDLER_T = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SINF = 1 +HAVE_SINHF = 1 +HAVE_SINL = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_SQRTF = 1 +HAVE_SQRTL = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASECMP = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRINGS_H = 1 +HAVE_STRPBRK = 1 +HAVE_STRPTIME = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYMLINK = 1 +HAVE_SYMLINKAT = 1 +HAVE_SYS_BITYPES_H = 0 +HAVE_SYS_CDEFS_H = +HAVE_SYS_FILE_H = 1 +HAVE_SYS_INTTYPES_H = 0 +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TANF = 1 +HAVE_TANHF = 1 +HAVE_TANL = 1 +HAVE_TIMEGM = 1 +HAVE_TIMEZONE_T = 0 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_TZSET = 1 +HAVE_UNISTD_H = 1 +HAVE_UNLINKAT = 1 +HAVE_UNLOCKPT = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_USLEEP = 1 +HAVE_UTIMENSAT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCHAR_T = 1 +HAVE_WCPCPY = 1 +HAVE_WCPNCPY = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSCASECMP = 1 +HAVE_WCSCAT = 1 +HAVE_WCSCHR = 1 +HAVE_WCSCMP = 1 +HAVE_WCSCOLL = 1 +HAVE_WCSCPY = 1 +HAVE_WCSCSPN = 1 +HAVE_WCSDUP = 1 +HAVE_WCSFTIME = 1 +HAVE_WCSLEN = 1 +HAVE_WCSNCASECMP = 1 +HAVE_WCSNCAT = 1 +HAVE_WCSNCMP = 1 +HAVE_WCSNCPY = 1 +HAVE_WCSNLEN = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSPBRK = 1 +HAVE_WCSRCHR = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCSSPN = 1 +HAVE_WCSSTR = 1 +HAVE_WCSTOK = 1 +HAVE_WCSWIDTH = 1 +HAVE_WCSXFRM = 1 +HAVE_WCTRANS_T = 1 +HAVE_WCTYPE_H = 1 +HAVE_WCTYPE_T = 1 +HAVE_WINSOCK2_H = 0 +HAVE_WINT_T = 1 +HAVE_WMEMCHR = 1 +HAVE_WMEMCMP = 1 +HAVE_WMEMCPY = 1 +HAVE_WMEMMOVE = 1 +HAVE_WMEMSET = 1 +HAVE_XLOCALE_H = 1 +HAVE__BOOL = 1 +HAVE__EXIT = 1 +HELP2MAN = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing help2man +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +INT32_MAX_LT_INTMAX_MAX = 1 +INT64_MAX_EQ_LONG_MAX = 0 +INTLLIBS = +INTL_MACOSX_LIBS = +LD = /usr/bin/ld +LDFLAGS = +LEX = flex +LEXLIB = -lfl +LEX_OUTPUT_ROOT = lex.yy +LIBGCRYPT = +LIBGCRYPT_PREFIX = +LIBICONV = -liconv +LIBINTL = +LIBMULTITHREAD = -pthread -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBREADLINE = +LIBS = +LIBTHREAD = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIB_ACL = +LIB_CLOCK_GETTIME = +LIB_EACCESS = +LIB_POSIX_SPAWN = +LIB_SELINUX = +LIMITS_H = limits.h +LIPO = +LN_S = ln -s +LOCALCHARSET_TESTS_ENVIRONMENT = +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTALLOCA = +LTLIBGCRYPT = +LTLIBICONV = -liconv +LTLIBINTL = +LTLIBMULTITHREAD = -pthread +LTLIBOBJS = +LTLIBPTH = +LTLIBREADLINE = +LTLIBTHREAD = +LT_SYS_LIBRARY_PATH = +MAKEINFO = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing makeinfo +MANIFEST_TOOL = : +MDBLIBS = +MDB_DATETIME = +MKDIR_P = /bin/mkdir -p +MSGFMT = /usr/bin/msgfmt +MSGFMT_015 = /usr/bin/msgfmt +MSGMERGE = /usr/bin/msgmerge +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = <fcntl.h> +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = <getopt.h> +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = <inttypes.h> +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = <langinfo.h> +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = <limits.h> +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = <locale.h> +NEXT_AS_FIRST_DIRECTIVE_MATH_H = <math.h> +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = <signal.h> +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = <spawn.h> +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = <stdint.h> +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = <stdio.h> +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = <stdlib.h> +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = <strings.h> +NEXT_AS_FIRST_DIRECTIVE_STRING_H = <string.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = <sys/file.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = <sys/stat.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = <sys/time.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = <sys/types.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = <sys/wait.h> +NEXT_AS_FIRST_DIRECTIVE_TIME_H = <time.h> +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = <unistd.h> +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = <wchar.h> +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = <wctype.h> +NEXT_ERRNO_H = +NEXT_FCNTL_H = <fcntl.h> +NEXT_FLOAT_H = +NEXT_GETOPT_H = <getopt.h> +NEXT_INTTYPES_H = <inttypes.h> +NEXT_LANGINFO_H = <langinfo.h> +NEXT_LIMITS_H = <limits.h> +NEXT_LOCALE_H = <locale.h> +NEXT_MATH_H = <math.h> +NEXT_SCHED_H = +NEXT_SELINUX_SELINUX_H = +NEXT_SIGNAL_H = <signal.h> +NEXT_SPAWN_H = <spawn.h> +NEXT_STDARG_H = <stdarg.h> +NEXT_STDDEF_H = +NEXT_STDINT_H = <stdint.h> +NEXT_STDIO_H = <stdio.h> +NEXT_STDLIB_H = <stdlib.h> +NEXT_STRINGS_H = <strings.h> +NEXT_STRING_H = <string.h> +NEXT_SYS_FILE_H = <sys/file.h> +NEXT_SYS_STAT_H = <sys/stat.h> +NEXT_SYS_TIME_H = <sys/time.h> +NEXT_SYS_TYPES_H = <sys/types.h> +NEXT_SYS_WAIT_H = <sys/wait.h> +NEXT_TIME_H = <time.h> +NEXT_UNISTD_H = <unistd.h> +NEXT_WCHAR_H = <wchar.h> +NEXT_WCTYPE_H = <wctype.h> +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = recutils +PACKAGE_BUGREPORT = bug-recutils@gnu.org +PACKAGE_NAME = GNU recutils +PACKAGE_STRING = GNU recutils 1.8 +PACKAGE_TARNAME = recutils +PACKAGE_URL = http://www.gnu.org/software/recutils/ +PACKAGE_VERSION = 1.8 +PATH_SEPARATOR = : +PKG_CONFIG = /usr/bin/pkg-config +PKG_CONFIG_LIBDIR = +PKG_CONFIG_PATH = +POSUB = po +PRAGMA_COLUMNS = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PRIPTR_PREFIX = "l" +PRI_MACROS_BROKEN = 0 +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = 0 +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_ACOSF = 0 +REPLACE_ASINF = 0 +REPLACE_ATAN2F = 0 +REPLACE_ATANF = 0 +REPLACE_BTOWC = 0 +REPLACE_CALLOC = 0 +REPLACE_CANONICALIZE_FILE_NAME = 0 +REPLACE_CBRTF = 0 +REPLACE_CBRTL = 0 +REPLACE_CEIL = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_COSF = 0 +REPLACE_COSHF = 0 +REPLACE_CTIME = GNULIB_PORTCHECK +REPLACE_DPRINTF = 0 +REPLACE_DUP = 0 +REPLACE_DUP2 = 0 +REPLACE_DUPLOCALE = 0 +REPLACE_EXP2 = 0 +REPLACE_EXP2L = 0 +REPLACE_EXPF = 0 +REPLACE_EXPM1 = 0 +REPLACE_EXPM1F = 0 +REPLACE_FABSL = 0 +REPLACE_FACCESSAT = 0 +REPLACE_FCHOWNAT = 0 +REPLACE_FCLOSE = 0 +REPLACE_FCNTL = 1 +REPLACE_FDOPEN = 0 +REPLACE_FFLUSH = 0 +REPLACE_FLOOR = 0 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FMA = 0 +REPLACE_FMAF = 0 +REPLACE_FMAL = 0 +REPLACE_FMOD = 0 +REPLACE_FMODF = 0 +REPLACE_FMODL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 1 +REPLACE_FPURGE = 0 +REPLACE_FREELOCALE = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPF = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 0 +REPLACE_FSTAT = 0 +REPLACE_FSTATAT = 0 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_FTRUNCATE = 0 +REPLACE_FUTIMENS = 0 +REPLACE_GETCWD = 0 +REPLACE_GETDELIM = 0 +REPLACE_GETDOMAINNAME = 0 +REPLACE_GETDTABLESIZE = 0 +REPLACE_GETGROUPS = 0 +REPLACE_GETLINE = 0 +REPLACE_GETLOGIN_R = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETPASS = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_GMTIME = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_HYPOT = 0 +REPLACE_HYPOTF = 0 +REPLACE_HYPOTL = 0 +REPLACE_ILOGB = 0 +REPLACE_ILOGBF = 0 +REPLACE_ILOGBL = 0 +REPLACE_ISATTY = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWBLANK = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_ITOLD = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LINK = 0 +REPLACE_LINKAT = 0 +REPLACE_LOCALECONV = 0 +REPLACE_LOCALTIME = 0 +REPLACE_LOCALTIME_R = 0 +REPLACE_LOG = 0 +REPLACE_LOG10 = 0 +REPLACE_LOG10F = 0 +REPLACE_LOG10L = 0 +REPLACE_LOG1P = 0 +REPLACE_LOG1PF = 0 +REPLACE_LOG1PL = 0 +REPLACE_LOG2 = 0 +REPLACE_LOG2F = 0 +REPLACE_LOG2L = 0 +REPLACE_LOGB = 0 +REPLACE_LOGBF = 0 +REPLACE_LOGBL = 0 +REPLACE_LOGF = 0 +REPLACE_LOGL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MALLOC = 0 +REPLACE_MBRLEN = 1 +REPLACE_MBRTOWC = 1 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MBTOWC = 0 +REPLACE_MEMCHR = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKFIFO = 0 +REPLACE_MKNOD = 0 +REPLACE_MKSTEMP = 0 +REPLACE_MKTIME = 0 +REPLACE_MODF = 0 +REPLACE_MODFF = 0 +REPLACE_MODFL = 0 +REPLACE_NAN = 0 +REPLACE_NANOSLEEP = GNULIB_PORTCHECK +REPLACE_NEWLOCALE = 0 +REPLACE_NL_LANGINFO = 1 +REPLACE_NULL = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_OPENAT = 0 +REPLACE_PERROR = 0 +REPLACE_POPEN = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 0 +REPLACE_PREAD = 0 +REPLACE_PRINTF = 1 +REPLACE_PTHREAD_SIGMASK = 0 +REPLACE_PTSNAME = 0 +REPLACE_PTSNAME_R = 0 +REPLACE_PUTENV = 0 +REPLACE_PWRITE = 0 +REPLACE_QSORT_R = 0 +REPLACE_RAISE = 0 +REPLACE_RANDOM_R = 0 +REPLACE_READ = 0 +REPLACE_READLINK = 0 +REPLACE_READLINKAT = 0 +REPLACE_REALLOC = 0 +REPLACE_REALPATH = 0 +REPLACE_REMAINDER = 0 +REPLACE_REMAINDERF = 0 +REPLACE_REMAINDERL = 0 +REPLACE_REMOVE = 0 +REPLACE_RENAME = 0 +REPLACE_RENAMEAT = 0 +REPLACE_RMDIR = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SETENV = 0 +REPLACE_SETLOCALE = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SINF = 0 +REPLACE_SINHF = 0 +REPLACE_SLEEP = 0 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_SQRTF = 0 +REPLACE_SQRTL = 0 +REPLACE_STAT = 0 +REPLACE_STDIO_READ_FUNCS = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STPNCPY = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRCHRNUL = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRERROR_R = 0 +REPLACE_STRFTIME = GNULIB_PORTCHECK +REPLACE_STRNCAT = 0 +REPLACE_STRNDUP = 0 +REPLACE_STRNLEN = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 0 +REPLACE_STRTOD = 0 +REPLACE_STRTOIMAX = 0 +REPLACE_STRTOK_R = 0 +REPLACE_STRTOUMAX = 0 +REPLACE_STRUCT_LCONV = 0 +REPLACE_STRUCT_TIMEVAL = 0 +REPLACE_SYMLINK = 0 +REPLACE_SYMLINKAT = 0 +REPLACE_TANF = 0 +REPLACE_TANHF = 0 +REPLACE_TIMEGM = 0 +REPLACE_TMPFILE = 0 +REPLACE_TOWLOWER = 0 +REPLACE_TRUNC = 0 +REPLACE_TRUNCATE = 0 +REPLACE_TRUNCF = 0 +REPLACE_TRUNCL = 0 +REPLACE_TTYNAME_R = 0 +REPLACE_TZSET = 0 +REPLACE_UNLINK = 0 +REPLACE_UNLINKAT = 0 +REPLACE_UNSETENV = 0 +REPLACE_USLEEP = 0 +REPLACE_UTIMENSAT = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 1 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSFTIME = 0 +REPLACE_WCSNRTOMBS = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCSWIDTH = 0 +REPLACE_WCTOB = 0 +REPLACE_WCTOMB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SED = /bin/sed +SELINUX_CONTEXT_H = selinux/context.h +SET_MAKE = +SHELL = /bin/sh +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +STDARG_H = +STDBOOL_H = +STDDEF_H = +STDINT_H = stdint.h +STRIP = strip +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = 0 +TIME_H_DEFINES_STRUCT_TIMESPEC = 1 +UINT32_MAX_LT_UINTMAX_MAX = 1 +UINT64_MAX_EQ_ULONG_MAX = 0 +UNDEFINE_STRTOK_R = 0 +UNISTD_H_DEFINES_STRUCT_TIMESPEC = 0 +UNISTD_H_HAVE_WINSOCK2_H = 0 +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = 0 +USE_ACL = 0 +USE_NLS = yes +UUIDLIBS = +VERSION = 1.8 +WCHAR_T_SUFFIX = +WINDOWS_64_BIT_OFF_T = 0 +WINDOWS_64_BIT_ST_SIZE = 0 +WINDOWS_STAT_INODES = 0 +WINDOWS_STAT_TIMESPEC = 0 +WINT_T_SUFFIX = +XGETTEXT = /usr/bin/xgettext +XGETTEXT_015 = /usr/bin/xgettext +XGETTEXT_EXTRA_OPTIONS = --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format +YACC = bison -o y.tab.c +YFLAGS = +abs_builddir = /mnt/lfs/build/recutils/recutils-1.8/lib +abs_srcdir = /mnt/lfs/build/recutils/recutils-1.8/lib +abs_top_builddir = /mnt/lfs/build/recutils/recutils-1.8 +abs_top_srcdir = /mnt/lfs/build/recutils/recutils-1.8 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +builddir = . +crypt_support = no +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +gl_LIBOBJS = asnprintf.o asprintf.o fcntl.o fprintf.o fseterr.o localtime-buffer.o mbrlen.o mbrtowc.o mktime.o nl_langinfo.o obstack.o printf.o printf-args.o printf-parse.o readline.o regex.o time_rz.o vasnprintf.o vasprintf.o vfprintf.o +gl_LTLIBOBJS = asnprintf.lo asprintf.lo fcntl.lo fprintf.lo fseterr.lo localtime-buffer.lo mbrlen.lo mbrtowc.lo mktime.lo nl_langinfo.lo obstack.lo printf.lo printf-args.lo printf-parse.lo readline.lo regex.lo time_rz.lo vasnprintf.lo vasprintf.lo vfprintf.lo +gltests_LIBOBJS = +gltests_LTLIBOBJS = +gltests_WITNESS = IN_RECUTILS_GNULIB_TESTS +have_uuid = no +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = $(MKDIR_P) +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +runstatedir = ${localstatedir}/run +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +AUTOMAKE_OPTIONS = 1.11 gnits subdir-objects +SUBDIRS = +noinst_HEADERS = +noinst_LIBRARIES = +noinst_LTLIBRARIES = librecutils.la +EXTRA_DIST = acl-internal.h acl.h acl_entries.c alignof.h alloca.c \ + alloca.in.h $(top_srcdir)/build-aux/announce-gen btowc.c \ + c-strcaseeq.h canonicalize-lgpl.c cloexec.h close.c \ + close-stream.h closeout.h crc.h dirname.h dosname.h dup2.c \ + errno.in.h error.c error.h euidaccess.c exitfail.h fcntl.c \ + fcntl.in.h fd-hook.h filename.h flexmember.h float.c \ + float.in.h itold.c flock.c floor.c fpending.c fpending.h \ + stdio-impl.h fprintf.c fpucw.h frexp.c frexp.c frexpl.c \ + fseek.c fseeko.c stdio-impl.h fseterr.c fseterr.h stdio-impl.h \ + fstat.c stat-w32.c stat-w32.h ftell.c ftello.c stdio-impl.h \ + fwriting.c fwriting.h stdio-impl.h \ + $(top_srcdir)/build-aux/gendocs.sh getdelim.c getdtablesize.c \ + getgroups.c getline.c getopt-cdefs.in.h getopt-core.h \ + getopt-ext.h getopt-pfx-core.h getopt-pfx-ext.h getopt.c \ + getopt.in.h getopt1.c getopt_int.h getpass.c getpass.h \ + getpass.c getpass.h gettimeofday.c $(top_srcdir)/GNUmakefile \ + $(top_srcdir)/build-aux/gnupload group-member.c hard-locale.h \ + $(top_srcdir)/build-aux/config.rpath intprops.h inttypes.in.h \ + float+.h isnan.c isnand-nolibm.h isnand.c float+.h isnan.c \ + isnanf-nolibm.h isnanf.c float+.h isnan.c isnanl-nolibm.h \ + isnanl.c langinfo.in.h cdefs.h libc-config.h limits.in.h \ + localcharset.h locale.in.h localeconv.c localtime-buffer.c \ + localtime-buffer.h lseek.c lstat.c $(top_srcdir)/maint.mk \ + malloc.c malloca.h math.in.h mbrlen.c mbrtowc.c mbsinit.c \ + mbtowc-impl.h mbtowc.c memchr.c memchr.valgrind mkdir.c \ + mkostemp.c mkstemp.c mktime-internal.h mktime.c \ + mktime-internal.h mktime.c msvc-inval.c msvc-inval.h \ + msvc-nothrow.c msvc-nothrow.h nl_langinfo.c strftime.h \ + obstack.c obstack.h open.c parse-datetime.c parse-datetime.h \ + pathmax.h spawn_int.h spawni.c spawn_faction_addopen.c \ + spawn_int.h spawn_faction_destroy.c spawn_faction_init.c \ + spawn_int.h spawnattr_destroy.c spawnattr_init.c \ + spawnattr_setflags.c spawnattr_setsigmask.c spawnp.c \ + printf-frexp.h printf-frexp.c printf-frexpl.h printf.c quote.h \ + quote.h quotearg.h raise.c random_r.c rawmemchr.c \ + rawmemchr.valgrind read-file.h readline.c readline.h \ + readlink.c realloc.c regcomp.c regex.c regex.h \ + regex_internal.c regex_internal.h regexec.c rename.c rmdir.c \ + root-uid.h same-inode.h sched.in.h secure_getenv.c \ + getfilecon.c setenv.c sig-handler.h sigaction.c signal.in.h \ + float+.h signbitd.c signbitf.c signbitl.c sigprocmask.c \ + _Noreturn.h arg-nonnull.h c++defs.h unused-parameter.h \ + warn-on-use.h spawn.in.h stat-w32.c stat-w32.h stat.c \ + stat-macros.h stat-time.h stdarg.in.h stdbool.in.h stddef.in.h \ + stdint.in.h stdio.in.h stdlib.in.h strcasecmp.c strncasecmp.c \ + str-two-way.h strcasestr.c strchrnul.c strchrnul.valgrind \ + strdup.c streq.h strerror.c strerror-override.c \ + strerror-override.h string.in.h strings.in.h strsep.c \ + strverscmp.c sys_file.in.h sys_stat.in.h sys_time.in.h \ + sys_types.in.h sys_wait.in.h tempname.h \ + $(top_srcdir)/build-aux/config.rpath time.in.h time_r.c \ + time-internal.h time_rz.c mktime-internal.h timegm.c \ + timespec.h tzset.c unistd.in.h unlocked-io.h unsetenv.c \ + $(top_srcdir)/build-aux/useless-if-before-free asnprintf.c \ + float+.h printf-args.c printf-args.h printf-parse.c \ + printf-parse.h vasnprintf.c vasnprintf.h asprintf.c \ + vasprintf.c $(top_srcdir)/build-aux/vc-list-files verify.h \ + vfprintf.c waitpid.c wchar.in.h wcrtomb.c wctob.c \ + wctomb-impl.h wctomb.c wctype.in.h xalloc.h xalloc-oversized.h +BUILT_SOURCES = $(ALLOCA_H) $(ERRNO_H) fcntl.h $(FLOAT_H) $(GETOPT_H) \ + $(GETOPT_CDEFS_H) inttypes.h langinfo.h $(LIMITS_H) locale.h \ + math.h parse-datetime.c $(SCHED_H) selinux/selinux.h \ + $(SELINUX_CONTEXT_H) signal.h spawn.h $(STDARG_H) $(STDBOOL_H) \ + $(STDDEF_H) $(STDINT_H) stdio.h stdlib.h string.h strings.h \ + sys/file.h sys/stat.h sys/time.h sys/types.h sys/wait.h time.h \ + unistd.h wchar.h wctype.h +SUFFIXES = +MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t errno.h \ + errno.h-t fcntl.h fcntl.h-t float.h float.h-t getopt.h \ + getopt.h-t getopt-cdefs.h getopt-cdefs.h-t inttypes.h \ + inttypes.h-t langinfo.h langinfo.h-t limits.h limits.h-t \ + locale.h locale.h-t math.h math.h-t parse-datetime.c-t sched.h \ + sched.h-t selinux/selinux.h selinux/selinux.h-t \ + selinux/context.h selinux/context.h-t signal.h signal.h-t \ + spawn.h spawn.h-t stdarg.h stdarg.h-t stdbool.h stdbool.h-t \ + stddef.h stddef.h-t stdint.h stdint.h-t stdio.h stdio.h-t \ + stdlib.h stdlib.h-t string.h string.h-t strings.h strings.h-t \ + sys/file.h sys/file.h-t sys/stat.h sys/stat.h-t sys/time.h \ + sys/time.h-t sys/types.h sys/types.h-t sys/wait.h sys/wait.h-t \ + time.h time.h-t unistd.h unistd.h-t wchar.h wchar.h-t wctype.h \ + wctype.h-t +MOSTLYCLEANDIRS = selinux sys sys sys +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = parse-datetime.c +# No GNU Make output. +AM_CPPFLAGS = +AM_CFLAGS = +librecutils_la_SOURCES = copy-acl.c set-acl.c acl-errno-valid.c \ + acl-internal.c get-permissions.c set-permissions.c \ + gl_array_list.h gl_array_list.c base64.h base64.c c-ctype.h \ + c-ctype.c c-strcase.h c-strcasecmp.c c-strncasecmp.c cloexec.c \ + close-stream.c closeout.c crc.c dirname-lgpl.c basename-lgpl.c \ + stripslash.c execute.h execute.c w32spawn.h exitfail.c \ + fatal-signal.h fatal-signal.c fd-hook.c getprogname.h \ + getprogname.c gettext.h gettime.c hard-locale.c gl_list.h \ + gl_list.c localcharset.c glthread/lock.h glthread/lock.c \ + malloca.c math.c minmax.h nstrftime.c parse-datetime.y \ + printf-frexp.c printf-frexpl.c progname.h progname.c \ + qcopy-acl.c qset-acl.c quotearg.c read-file.c se-context.in.h \ + se-selinux.in.h se-context.c se-selinux.c sig-handler.c \ + size_max.h stat-time.c tempname.c glthread/threadlib.c \ + timespec.c tmpdir.h tmpdir.c unistd.c version-etc.h \ + version-etc.c version-etc-fsf.c wait-process.h wait-process.c \ + wctype-h.c xmalloc.c xalloc-die.c xsize.h xsize.c +librecutils_la_LIBADD = $(gl_LTLIBOBJS) +librecutils_la_DEPENDENCIES = $(gl_LTLIBOBJS) +EXTRA_librecutils_la_SOURCES = acl_entries.c alloca.c btowc.c \ + canonicalize-lgpl.c close.c dup2.c error.c euidaccess.c \ + fcntl.c float.c itold.c flock.c floor.c fpending.c fprintf.c \ + frexp.c frexp.c frexpl.c fseek.c fseeko.c fseterr.c fstat.c \ + stat-w32.c ftell.c ftello.c fwriting.c getdelim.c \ + getdtablesize.c getgroups.c getline.c getopt.c getopt1.c \ + getpass.c getpass.c gettimeofday.c group-member.c isnan.c \ + isnand.c isnan.c isnanf.c isnan.c isnanl.c localeconv.c \ + localtime-buffer.c lseek.c lstat.c malloc.c mbrlen.c mbrtowc.c \ + mbsinit.c mbtowc.c memchr.c mkdir.c mkostemp.c mkstemp.c \ + mktime.c mktime.c msvc-inval.c msvc-nothrow.c nl_langinfo.c \ + obstack.c open.c spawni.c spawn_faction_addopen.c \ + spawn_faction_destroy.c spawn_faction_init.c \ + spawnattr_destroy.c spawnattr_init.c spawnattr_setflags.c \ + spawnattr_setsigmask.c spawnp.c printf-frexp.c printf.c \ + raise.c random_r.c rawmemchr.c readline.c readlink.c realloc.c \ + regcomp.c regex.c regex_internal.c regexec.c rename.c rmdir.c \ + secure_getenv.c getfilecon.c setenv.c sigaction.c signbitd.c \ + signbitf.c signbitl.c sigprocmask.c stat-w32.c stat.c \ + strcasecmp.c strncasecmp.c strcasestr.c strchrnul.c strdup.c \ + strerror.c strerror-override.c strsep.c strverscmp.c time_r.c \ + time_rz.c timegm.c tzset.c unsetenv.c asnprintf.c \ + printf-args.c printf-parse.c vasnprintf.c asprintf.c \ + vasprintf.c vfprintf.c waitpid.c wcrtomb.c wctob.c wctomb.c +librecutils_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(FLOOR_LIBM) \ + $(LIB_ACL) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS) $(LIB_SELINUX) \ + $(LTLIBINTL) $(LTLIBREADLINE) $(LTLIBTHREAD) + +# Use this preprocessor expression to decide whether #include_next works. +# Do not rely on a 'configure'-time test for this, since the expression +# might appear in an installed header, which is used by some other compiler. +HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. +_NORETURN_H = $(srcdir)/_Noreturn.h + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. +ARG_NONNULL_H = $(srcdir)/arg-nonnull.h + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. +CXXDEFS_H = $(srcdir)/c++defs.h + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. +UNUSED_PARAMETER_H = $(srcdir)/unused-parameter.h + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. +WARN_ON_USE_H = $(srcdir)/warn-on-use.h +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj .y +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnits lib/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } +glthread/$(am__dirstamp): + @$(MKDIR_P) glthread + @: > glthread/$(am__dirstamp) +glthread/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) glthread/$(DEPDIR) + @: > glthread/$(DEPDIR)/$(am__dirstamp) +glthread/lock.lo: glthread/$(am__dirstamp) \ + glthread/$(DEPDIR)/$(am__dirstamp) +glthread/threadlib.lo: glthread/$(am__dirstamp) \ + glthread/$(DEPDIR)/$(am__dirstamp) + +librecutils.la: $(librecutils_la_OBJECTS) $(librecutils_la_DEPENDENCIES) $(EXTRA_librecutils_la_DEPENDENCIES) + $(AM_V_CCLD)$(librecutils_la_LINK) $(librecutils_la_OBJECTS) $(librecutils_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f glthread/*.$(OBJEXT) + -rm -f glthread/*.lo + +distclean-compile: + -rm -f *.tab.c + +include $(DEPDIR)/alloca.Plo +include ./$(DEPDIR)/acl-errno-valid.Plo +include ./$(DEPDIR)/acl-internal.Plo +include ./$(DEPDIR)/acl_entries.Plo +include ./$(DEPDIR)/alloca.Plo +include ./$(DEPDIR)/asnprintf.Plo +include ./$(DEPDIR)/asprintf.Plo +include ./$(DEPDIR)/base64.Plo +include ./$(DEPDIR)/basename-lgpl.Plo +include ./$(DEPDIR)/btowc.Plo +include ./$(DEPDIR)/c-ctype.Plo +include ./$(DEPDIR)/c-strcasecmp.Plo +include ./$(DEPDIR)/c-strncasecmp.Plo +include ./$(DEPDIR)/canonicalize-lgpl.Plo +include ./$(DEPDIR)/cloexec.Plo +include ./$(DEPDIR)/close-stream.Plo +include ./$(DEPDIR)/close.Plo +include ./$(DEPDIR)/closeout.Plo +include ./$(DEPDIR)/copy-acl.Plo +include ./$(DEPDIR)/crc.Plo +include ./$(DEPDIR)/dirname-lgpl.Plo +include ./$(DEPDIR)/dup2.Plo +include ./$(DEPDIR)/error.Plo +include ./$(DEPDIR)/euidaccess.Plo +include ./$(DEPDIR)/execute.Plo +include ./$(DEPDIR)/exitfail.Plo +include ./$(DEPDIR)/fatal-signal.Plo +include ./$(DEPDIR)/fcntl.Plo +include ./$(DEPDIR)/fd-hook.Plo +include ./$(DEPDIR)/float.Plo +include ./$(DEPDIR)/flock.Plo +include ./$(DEPDIR)/floor.Plo +include ./$(DEPDIR)/fpending.Plo +include ./$(DEPDIR)/fprintf.Plo +include ./$(DEPDIR)/frexp.Plo +include ./$(DEPDIR)/frexpl.Plo +include ./$(DEPDIR)/fseek.Plo +include ./$(DEPDIR)/fseeko.Plo +include ./$(DEPDIR)/fseterr.Plo +include ./$(DEPDIR)/fstat.Plo +include ./$(DEPDIR)/ftell.Plo +include ./$(DEPDIR)/ftello.Plo +include ./$(DEPDIR)/fwriting.Plo +include ./$(DEPDIR)/get-permissions.Plo +include ./$(DEPDIR)/getdelim.Plo +include ./$(DEPDIR)/getdtablesize.Plo +include ./$(DEPDIR)/getfilecon.Plo +include ./$(DEPDIR)/getgroups.Plo +include ./$(DEPDIR)/getline.Plo +include ./$(DEPDIR)/getopt.Plo +include ./$(DEPDIR)/getopt1.Plo +include ./$(DEPDIR)/getpass.Plo +include ./$(DEPDIR)/getprogname.Plo +include ./$(DEPDIR)/gettime.Plo +include ./$(DEPDIR)/gettimeofday.Plo +include ./$(DEPDIR)/gl_array_list.Plo +include ./$(DEPDIR)/gl_list.Plo +include ./$(DEPDIR)/group-member.Plo +include ./$(DEPDIR)/hard-locale.Plo +include ./$(DEPDIR)/isnan.Plo +include ./$(DEPDIR)/isnand.Plo +include ./$(DEPDIR)/isnanf.Plo +include ./$(DEPDIR)/isnanl.Plo +include ./$(DEPDIR)/itold.Plo +include ./$(DEPDIR)/localcharset.Plo +include ./$(DEPDIR)/localeconv.Plo +include ./$(DEPDIR)/localtime-buffer.Plo +include ./$(DEPDIR)/lseek.Plo +include ./$(DEPDIR)/lstat.Plo +include ./$(DEPDIR)/malloc.Plo +include ./$(DEPDIR)/malloca.Plo +include ./$(DEPDIR)/math.Plo +include ./$(DEPDIR)/mbrlen.Plo +include ./$(DEPDIR)/mbrtowc.Plo +include ./$(DEPDIR)/mbsinit.Plo +include ./$(DEPDIR)/mbtowc.Plo +include ./$(DEPDIR)/memchr.Plo +include ./$(DEPDIR)/mkdir.Plo +include ./$(DEPDIR)/mkostemp.Plo +include ./$(DEPDIR)/mkstemp.Plo +include ./$(DEPDIR)/mktime.Plo +include ./$(DEPDIR)/msvc-inval.Plo +include ./$(DEPDIR)/msvc-nothrow.Plo +include ./$(DEPDIR)/nl_langinfo.Plo +include ./$(DEPDIR)/nstrftime.Plo +include ./$(DEPDIR)/obstack.Plo +include ./$(DEPDIR)/open.Plo +include ./$(DEPDIR)/parse-datetime.Plo +include ./$(DEPDIR)/printf-args.Plo +include ./$(DEPDIR)/printf-frexp.Plo +include ./$(DEPDIR)/printf-frexpl.Plo +include ./$(DEPDIR)/printf-parse.Plo +include ./$(DEPDIR)/printf.Plo +include ./$(DEPDIR)/progname.Plo +include ./$(DEPDIR)/qcopy-acl.Plo +include ./$(DEPDIR)/qset-acl.Plo +include ./$(DEPDIR)/quotearg.Plo +include ./$(DEPDIR)/raise.Plo +include ./$(DEPDIR)/random_r.Plo +include ./$(DEPDIR)/rawmemchr.Plo +include ./$(DEPDIR)/read-file.Plo +include ./$(DEPDIR)/readline.Plo +include ./$(DEPDIR)/readlink.Plo +include ./$(DEPDIR)/realloc.Plo +include ./$(DEPDIR)/regcomp.Plo +include ./$(DEPDIR)/regex.Plo +include ./$(DEPDIR)/regex_internal.Plo +include ./$(DEPDIR)/regexec.Plo +include ./$(DEPDIR)/rename.Plo +include ./$(DEPDIR)/rmdir.Plo +include ./$(DEPDIR)/se-context.Plo +include ./$(DEPDIR)/se-selinux.Plo +include ./$(DEPDIR)/secure_getenv.Plo +include ./$(DEPDIR)/set-acl.Plo +include ./$(DEPDIR)/set-permissions.Plo +include ./$(DEPDIR)/setenv.Plo +include ./$(DEPDIR)/sig-handler.Plo +include ./$(DEPDIR)/sigaction.Plo +include ./$(DEPDIR)/signbitd.Plo +include ./$(DEPDIR)/signbitf.Plo +include ./$(DEPDIR)/signbitl.Plo +include ./$(DEPDIR)/sigprocmask.Plo +include ./$(DEPDIR)/spawn_faction_addopen.Plo +include ./$(DEPDIR)/spawn_faction_destroy.Plo +include ./$(DEPDIR)/spawn_faction_init.Plo +include ./$(DEPDIR)/spawnattr_destroy.Plo +include ./$(DEPDIR)/spawnattr_init.Plo +include ./$(DEPDIR)/spawnattr_setflags.Plo +include ./$(DEPDIR)/spawnattr_setsigmask.Plo +include ./$(DEPDIR)/spawni.Plo +include ./$(DEPDIR)/spawnp.Plo +include ./$(DEPDIR)/stat-time.Plo +include ./$(DEPDIR)/stat-w32.Plo +include ./$(DEPDIR)/stat.Plo +include ./$(DEPDIR)/strcasecmp.Plo +include ./$(DEPDIR)/strcasestr.Plo +include ./$(DEPDIR)/strchrnul.Plo +include ./$(DEPDIR)/strdup.Plo +include ./$(DEPDIR)/strerror-override.Plo +include ./$(DEPDIR)/strerror.Plo +include ./$(DEPDIR)/stripslash.Plo +include ./$(DEPDIR)/strncasecmp.Plo +include ./$(DEPDIR)/strsep.Plo +include ./$(DEPDIR)/strverscmp.Plo +include ./$(DEPDIR)/tempname.Plo +include ./$(DEPDIR)/time_r.Plo +include ./$(DEPDIR)/time_rz.Plo +include ./$(DEPDIR)/timegm.Plo +include ./$(DEPDIR)/timespec.Plo +include ./$(DEPDIR)/tmpdir.Plo +include ./$(DEPDIR)/tzset.Plo +include ./$(DEPDIR)/unistd.Plo +include ./$(DEPDIR)/unsetenv.Plo +include ./$(DEPDIR)/vasnprintf.Plo +include ./$(DEPDIR)/vasprintf.Plo +include ./$(DEPDIR)/version-etc-fsf.Plo +include ./$(DEPDIR)/version-etc.Plo +include ./$(DEPDIR)/vfprintf.Plo +include ./$(DEPDIR)/wait-process.Plo +include ./$(DEPDIR)/waitpid.Plo +include ./$(DEPDIR)/wcrtomb.Plo +include ./$(DEPDIR)/wctob.Plo +include ./$(DEPDIR)/wctomb.Plo +include ./$(DEPDIR)/wctype-h.Plo +include ./$(DEPDIR)/xalloc-die.Plo +include ./$(DEPDIR)/xmalloc.Plo +include ./$(DEPDIR)/xsize.Plo +include glthread/$(DEPDIR)/lock.Plo +include glthread/$(DEPDIR)/threadlib.Plo + +.c.o: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< + +.c.obj: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ + $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Plo +# $(AM_V_CC)source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< + +.y.c: + $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + -rm -rf glthread/.libs glthread/_libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f glthread/$(DEPDIR)/$(am__dirstamp) + -rm -f glthread/$(am__dirstamp) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -rm -f parse-datetime.c + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + clean-noinstLTLIBRARIES mostlyclean-am + +distclean: distclean-recursive + -rm -rf $(DEPDIR) ./$(DEPDIR) glthread/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-local distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf $(DEPDIR) ./$(DEPDIR) glthread/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool mostlyclean-local + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) all check install install-am \ + install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool \ + clean-noinstLIBRARIES clean-noinstLTLIBRARIES cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-local distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + mostlyclean-local pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am + +.PRECIOUS: Makefile + + +# We need the following in order to create <alloca.h> when the system +# doesn't have one that works with the given compiler. +alloca.h: alloca.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/alloca.in.h; \ + } > $@-t && \ + mv -f $@-t $@ +#alloca.h: $(top_builddir)/config.status +# rm -f $@ + +# We need the following in order to create <errno.h> when the system +# doesn't have one that is POSIX compliant. +#errno.h: errno.in.h $(top_builddir)/config.status +# $(AM_V_GEN)rm -f $@-t $@ && \ +# { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ +# sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +# -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +# -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ +# -e 's|@''PRAGMA_COLUMNS''@||g' \ +# -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ +# -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ +# -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ +# -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ +# -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ +# -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ +# -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ +# < $(srcdir)/errno.in.h; \ +# } > $@-t && \ +# mv $@-t $@ +errno.h: $(top_builddir)/config.status + rm -f $@ + +# We need the following in order to create <fcntl.h> when the system +# doesn't have one that works with the given compiler. +fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ + -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \ + -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \ + -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \ + -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \ + -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ + -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ + -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ + -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ + -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/fcntl.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <float.h> when the system +# doesn't have one that works with the given compiler. +#float.h: float.in.h $(top_builddir)/config.status +# $(AM_V_GEN)rm -f $@-t $@ && \ +# { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ +# sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +# -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +# -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ +# -e 's|@''PRAGMA_COLUMNS''@||g' \ +# -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ +# -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ +# < $(srcdir)/float.in.h; \ +# } > $@-t && \ +# mv $@-t $@ +float.h: $(top_builddir)/config.status + rm -f $@ + +# We need the following in order to create <getopt.h> when the system +# doesn't have one that works with the given compiler. +getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + < $(srcdir)/getopt.in.h; \ + } > $@-t && \ + mv -f $@-t $@ + +getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ + < $(srcdir)/getopt-cdefs.in.h; \ + } > $@-t && \ + mv -f $@-t $@ +distclean-local: clean-GNUmakefile +clean-GNUmakefile: + test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile + +# We need the following in order to create <inttypes.h> when the system +# doesn't have one that works with the given compiler. +inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \ + -e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \ + -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ + -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ + -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ + -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \ + -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \ + -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \ + -e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \ + -e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \ + -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \ + -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \ + -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \ + -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \ + -e 's/@''HAVE_IMAXDIV_T''@/$(HAVE_IMAXDIV_T)/g' \ + -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \ + -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/g' \ + -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \ + -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \ + -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \ + -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/inttypes.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create an empty placeholder for +# <langinfo.h> when the system doesn't have one. +langinfo.h: langinfo.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \ + -e 's/@''GNULIB_NL_LANGINFO''@/$(GNULIB_NL_LANGINFO)/g' \ + -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \ + -e 's|@''HAVE_LANGINFO_T_FMT_AMPM''@|$(HAVE_LANGINFO_T_FMT_AMPM)|g' \ + -e 's|@''HAVE_LANGINFO_ALTMON''@|$(HAVE_LANGINFO_ALTMON)|g' \ + -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \ + -e 's|@''HAVE_LANGINFO_YESEXPR''@|$(HAVE_LANGINFO_YESEXPR)|g' \ + -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \ + -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/langinfo.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <limits.h> when the system +# doesn't have one that is compatible with GNU. +limits.h: limits.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ + < $(srcdir)/limits.in.h; \ + } > $@-t && \ + mv $@-t $@ +#limits.h: $(top_builddir)/config.status +# rm -f $@ + +# We need the following in order to create <locale.h> when the system +# doesn't have one that provides all definitions. +locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ + -e 's/@''GNULIB_LOCALECONV''@/$(GNULIB_LOCALECONV)/g' \ + -e 's/@''GNULIB_SETLOCALE''@/$(GNULIB_SETLOCALE)/g' \ + -e 's/@''GNULIB_DUPLOCALE''@/$(GNULIB_DUPLOCALE)/g' \ + -e 's/@''GNULIB_LOCALENAME''@/$(GNULIB_LOCALENAME)/g' \ + -e 's|@''HAVE_NEWLOCALE''@|$(HAVE_NEWLOCALE)|g' \ + -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \ + -e 's|@''HAVE_FREELOCALE''@|$(HAVE_FREELOCALE)|g' \ + -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ + -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \ + -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \ + -e 's|@''REPLACE_NEWLOCALE''@|$(REPLACE_NEWLOCALE)|g' \ + -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \ + -e 's|@''REPLACE_FREELOCALE''@|$(REPLACE_FREELOCALE)|g' \ + -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/locale.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <math.h> when the system +# doesn't have one that works with the given compiler. +math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \ + -e 's/@''GNULIB_ACOSF''@/$(GNULIB_ACOSF)/g' \ + -e 's/@''GNULIB_ACOSL''@/$(GNULIB_ACOSL)/g' \ + -e 's/@''GNULIB_ASINF''@/$(GNULIB_ASINF)/g' \ + -e 's/@''GNULIB_ASINL''@/$(GNULIB_ASINL)/g' \ + -e 's/@''GNULIB_ATANF''@/$(GNULIB_ATANF)/g' \ + -e 's/@''GNULIB_ATANL''@/$(GNULIB_ATANL)/g' \ + -e 's/@''GNULIB_ATAN2F''@/$(GNULIB_ATAN2F)/g' \ + -e 's/@''GNULIB_CBRT''@/$(GNULIB_CBRT)/g' \ + -e 's/@''GNULIB_CBRTF''@/$(GNULIB_CBRTF)/g' \ + -e 's/@''GNULIB_CBRTL''@/$(GNULIB_CBRTL)/g' \ + -e 's/@''GNULIB_CEIL''@/$(GNULIB_CEIL)/g' \ + -e 's/@''GNULIB_CEILF''@/$(GNULIB_CEILF)/g' \ + -e 's/@''GNULIB_CEILL''@/$(GNULIB_CEILL)/g' \ + -e 's/@''GNULIB_COPYSIGN''@/$(GNULIB_COPYSIGN)/g' \ + -e 's/@''GNULIB_COPYSIGNF''@/$(GNULIB_COPYSIGNF)/g' \ + -e 's/@''GNULIB_COPYSIGNL''@/$(GNULIB_COPYSIGNL)/g' \ + -e 's/@''GNULIB_COSF''@/$(GNULIB_COSF)/g' \ + -e 's/@''GNULIB_COSL''@/$(GNULIB_COSL)/g' \ + -e 's/@''GNULIB_COSHF''@/$(GNULIB_COSHF)/g' \ + -e 's/@''GNULIB_EXPF''@/$(GNULIB_EXPF)/g' \ + -e 's/@''GNULIB_EXPL''@/$(GNULIB_EXPL)/g' \ + -e 's/@''GNULIB_EXP2''@/$(GNULIB_EXP2)/g' \ + -e 's/@''GNULIB_EXP2F''@/$(GNULIB_EXP2F)/g' \ + -e 's/@''GNULIB_EXP2L''@/$(GNULIB_EXP2L)/g' \ + -e 's/@''GNULIB_EXPM1''@/$(GNULIB_EXPM1)/g' \ + -e 's/@''GNULIB_EXPM1F''@/$(GNULIB_EXPM1F)/g' \ + -e 's/@''GNULIB_EXPM1L''@/$(GNULIB_EXPM1L)/g' \ + -e 's/@''GNULIB_FABSF''@/$(GNULIB_FABSF)/g' \ + -e 's/@''GNULIB_FABSL''@/$(GNULIB_FABSL)/g' \ + -e 's/@''GNULIB_FLOOR''@/$(GNULIB_FLOOR)/g' \ + -e 's/@''GNULIB_FLOORF''@/$(GNULIB_FLOORF)/g' \ + -e 's/@''GNULIB_FLOORL''@/$(GNULIB_FLOORL)/g' \ + -e 's/@''GNULIB_FMA''@/$(GNULIB_FMA)/g' \ + -e 's/@''GNULIB_FMAF''@/$(GNULIB_FMAF)/g' \ + -e 's/@''GNULIB_FMAL''@/$(GNULIB_FMAL)/g' \ + -e 's/@''GNULIB_FMOD''@/$(GNULIB_FMOD)/g' \ + -e 's/@''GNULIB_FMODF''@/$(GNULIB_FMODF)/g' \ + -e 's/@''GNULIB_FMODL''@/$(GNULIB_FMODL)/g' \ + -e 's/@''GNULIB_FREXPF''@/$(GNULIB_FREXPF)/g' \ + -e 's/@''GNULIB_FREXP''@/$(GNULIB_FREXP)/g' \ + -e 's/@''GNULIB_FREXPL''@/$(GNULIB_FREXPL)/g' \ + -e 's/@''GNULIB_HYPOT''@/$(GNULIB_HYPOT)/g' \ + -e 's/@''GNULIB_HYPOTF''@/$(GNULIB_HYPOTF)/g' \ + -e 's/@''GNULIB_HYPOTL''@/$(GNULIB_HYPOTL)/g' \ + < $(srcdir)/math.in.h | \ + sed -e 's/@''GNULIB_ILOGB''@/$(GNULIB_ILOGB)/g' \ + -e 's/@''GNULIB_ILOGBF''@/$(GNULIB_ILOGBF)/g' \ + -e 's/@''GNULIB_ILOGBL''@/$(GNULIB_ILOGBL)/g' \ + -e 's/@''GNULIB_ISFINITE''@/$(GNULIB_ISFINITE)/g' \ + -e 's/@''GNULIB_ISINF''@/$(GNULIB_ISINF)/g' \ + -e 's/@''GNULIB_ISNAN''@/$(GNULIB_ISNAN)/g' \ + -e 's/@''GNULIB_ISNANF''@/$(GNULIB_ISNANF)/g' \ + -e 's/@''GNULIB_ISNAND''@/$(GNULIB_ISNAND)/g' \ + -e 's/@''GNULIB_ISNANL''@/$(GNULIB_ISNANL)/g' \ + -e 's/@''GNULIB_LDEXPF''@/$(GNULIB_LDEXPF)/g' \ + -e 's/@''GNULIB_LDEXPL''@/$(GNULIB_LDEXPL)/g' \ + -e 's/@''GNULIB_LOG''@/$(GNULIB_LOG)/g' \ + -e 's/@''GNULIB_LOGF''@/$(GNULIB_LOGF)/g' \ + -e 's/@''GNULIB_LOGL''@/$(GNULIB_LOGL)/g' \ + -e 's/@''GNULIB_LOG10''@/$(GNULIB_LOG10)/g' \ + -e 's/@''GNULIB_LOG10F''@/$(GNULIB_LOG10F)/g' \ + -e 's/@''GNULIB_LOG10L''@/$(GNULIB_LOG10L)/g' \ + -e 's/@''GNULIB_LOG1P''@/$(GNULIB_LOG1P)/g' \ + -e 's/@''GNULIB_LOG1PF''@/$(GNULIB_LOG1PF)/g' \ + -e 's/@''GNULIB_LOG1PL''@/$(GNULIB_LOG1PL)/g' \ + -e 's/@''GNULIB_LOG2''@/$(GNULIB_LOG2)/g' \ + -e 's/@''GNULIB_LOG2F''@/$(GNULIB_LOG2F)/g' \ + -e 's/@''GNULIB_LOG2L''@/$(GNULIB_LOG2L)/g' \ + -e 's/@''GNULIB_LOGB''@/$(GNULIB_LOGB)/g' \ + -e 's/@''GNULIB_LOGBF''@/$(GNULIB_LOGBF)/g' \ + -e 's/@''GNULIB_LOGBL''@/$(GNULIB_LOGBL)/g' \ + -e 's/@''GNULIB_MODF''@/$(GNULIB_MODF)/g' \ + -e 's/@''GNULIB_MODFF''@/$(GNULIB_MODFF)/g' \ + -e 's/@''GNULIB_MODFL''@/$(GNULIB_MODFL)/g' \ + -e 's/@''GNULIB_POWF''@/$(GNULIB_POWF)/g' \ + -e 's/@''GNULIB_REMAINDER''@/$(GNULIB_REMAINDER)/g' \ + -e 's/@''GNULIB_REMAINDERF''@/$(GNULIB_REMAINDERF)/g' \ + -e 's/@''GNULIB_REMAINDERL''@/$(GNULIB_REMAINDERL)/g' \ + -e 's/@''GNULIB_RINT''@/$(GNULIB_RINT)/g' \ + -e 's/@''GNULIB_RINTF''@/$(GNULIB_RINTF)/g' \ + -e 's/@''GNULIB_RINTL''@/$(GNULIB_RINTL)/g' \ + -e 's/@''GNULIB_ROUND''@/$(GNULIB_ROUND)/g' \ + -e 's/@''GNULIB_ROUNDF''@/$(GNULIB_ROUNDF)/g' \ + -e 's/@''GNULIB_ROUNDL''@/$(GNULIB_ROUNDL)/g' \ + -e 's/@''GNULIB_SIGNBIT''@/$(GNULIB_SIGNBIT)/g' \ + -e 's/@''GNULIB_SINF''@/$(GNULIB_SINF)/g' \ + -e 's/@''GNULIB_SINL''@/$(GNULIB_SINL)/g' \ + -e 's/@''GNULIB_SINHF''@/$(GNULIB_SINHF)/g' \ + -e 's/@''GNULIB_SQRTF''@/$(GNULIB_SQRTF)/g' \ + -e 's/@''GNULIB_SQRTL''@/$(GNULIB_SQRTL)/g' \ + -e 's/@''GNULIB_TANF''@/$(GNULIB_TANF)/g' \ + -e 's/@''GNULIB_TANL''@/$(GNULIB_TANL)/g' \ + -e 's/@''GNULIB_TANHF''@/$(GNULIB_TANHF)/g' \ + -e 's/@''GNULIB_TRUNC''@/$(GNULIB_TRUNC)/g' \ + -e 's/@''GNULIB_TRUNCF''@/$(GNULIB_TRUNCF)/g' \ + -e 's/@''GNULIB_TRUNCL''@/$(GNULIB_TRUNCL)/g' \ + | \ + sed -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \ + -e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \ + -e 's|@''HAVE_ASINF''@|$(HAVE_ASINF)|g' \ + -e 's|@''HAVE_ASINL''@|$(HAVE_ASINL)|g' \ + -e 's|@''HAVE_ATANF''@|$(HAVE_ATANF)|g' \ + -e 's|@''HAVE_ATANL''@|$(HAVE_ATANL)|g' \ + -e 's|@''HAVE_ATAN2F''@|$(HAVE_ATAN2F)|g' \ + -e 's|@''HAVE_CBRT''@|$(HAVE_CBRT)|g' \ + -e 's|@''HAVE_CBRTF''@|$(HAVE_CBRTF)|g' \ + -e 's|@''HAVE_CBRTL''@|$(HAVE_CBRTL)|g' \ + -e 's|@''HAVE_COPYSIGN''@|$(HAVE_COPYSIGN)|g' \ + -e 's|@''HAVE_COPYSIGNL''@|$(HAVE_COPYSIGNL)|g' \ + -e 's|@''HAVE_COSF''@|$(HAVE_COSF)|g' \ + -e 's|@''HAVE_COSL''@|$(HAVE_COSL)|g' \ + -e 's|@''HAVE_COSHF''@|$(HAVE_COSHF)|g' \ + -e 's|@''HAVE_EXPF''@|$(HAVE_EXPF)|g' \ + -e 's|@''HAVE_EXPL''@|$(HAVE_EXPL)|g' \ + -e 's|@''HAVE_EXPM1''@|$(HAVE_EXPM1)|g' \ + -e 's|@''HAVE_EXPM1F''@|$(HAVE_EXPM1F)|g' \ + -e 's|@''HAVE_FABSF''@|$(HAVE_FABSF)|g' \ + -e 's|@''HAVE_FABSL''@|$(HAVE_FABSL)|g' \ + -e 's|@''HAVE_FMA''@|$(HAVE_FMA)|g' \ + -e 's|@''HAVE_FMAF''@|$(HAVE_FMAF)|g' \ + -e 's|@''HAVE_FMAL''@|$(HAVE_FMAL)|g' \ + -e 's|@''HAVE_FMODF''@|$(HAVE_FMODF)|g' \ + -e 's|@''HAVE_FMODL''@|$(HAVE_FMODL)|g' \ + -e 's|@''HAVE_FREXPF''@|$(HAVE_FREXPF)|g' \ + -e 's|@''HAVE_HYPOTF''@|$(HAVE_HYPOTF)|g' \ + -e 's|@''HAVE_HYPOTL''@|$(HAVE_HYPOTL)|g' \ + -e 's|@''HAVE_ILOGB''@|$(HAVE_ILOGB)|g' \ + -e 's|@''HAVE_ILOGBF''@|$(HAVE_ILOGBF)|g' \ + -e 's|@''HAVE_ILOGBL''@|$(HAVE_ILOGBL)|g' \ + -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \ + -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \ + -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \ + -e 's|@''HAVE_LDEXPF''@|$(HAVE_LDEXPF)|g' \ + -e 's|@''HAVE_LOGF''@|$(HAVE_LOGF)|g' \ + -e 's|@''HAVE_LOGL''@|$(HAVE_LOGL)|g' \ + -e 's|@''HAVE_LOG10F''@|$(HAVE_LOG10F)|g' \ + -e 's|@''HAVE_LOG10L''@|$(HAVE_LOG10L)|g' \ + -e 's|@''HAVE_LOG1P''@|$(HAVE_LOG1P)|g' \ + -e 's|@''HAVE_LOG1PF''@|$(HAVE_LOG1PF)|g' \ + -e 's|@''HAVE_LOG1PL''@|$(HAVE_LOG1PL)|g' \ + -e 's|@''HAVE_LOGBF''@|$(HAVE_LOGBF)|g' \ + -e 's|@''HAVE_LOGBL''@|$(HAVE_LOGBL)|g' \ + -e 's|@''HAVE_MODFF''@|$(HAVE_MODFF)|g' \ + -e 's|@''HAVE_MODFL''@|$(HAVE_MODFL)|g' \ + -e 's|@''HAVE_POWF''@|$(HAVE_POWF)|g' \ + -e 's|@''HAVE_REMAINDER''@|$(HAVE_REMAINDER)|g' \ + -e 's|@''HAVE_REMAINDERF''@|$(HAVE_REMAINDERF)|g' \ + -e 's|@''HAVE_RINT''@|$(HAVE_RINT)|g' \ + -e 's|@''HAVE_RINTL''@|$(HAVE_RINTL)|g' \ + -e 's|@''HAVE_SINF''@|$(HAVE_SINF)|g' \ + -e 's|@''HAVE_SINL''@|$(HAVE_SINL)|g' \ + -e 's|@''HAVE_SINHF''@|$(HAVE_SINHF)|g' \ + -e 's|@''HAVE_SQRTF''@|$(HAVE_SQRTF)|g' \ + -e 's|@''HAVE_SQRTL''@|$(HAVE_SQRTL)|g' \ + -e 's|@''HAVE_TANF''@|$(HAVE_TANF)|g' \ + -e 's|@''HAVE_TANL''@|$(HAVE_TANL)|g' \ + -e 's|@''HAVE_TANHF''@|$(HAVE_TANHF)|g' \ + -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \ + -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \ + -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \ + -e 's|@''HAVE_DECL_CBRTF''@|$(HAVE_DECL_CBRTF)|g' \ + -e 's|@''HAVE_DECL_CBRTL''@|$(HAVE_DECL_CBRTL)|g' \ + -e 's|@''HAVE_DECL_CEILF''@|$(HAVE_DECL_CEILF)|g' \ + -e 's|@''HAVE_DECL_CEILL''@|$(HAVE_DECL_CEILL)|g' \ + -e 's|@''HAVE_DECL_COPYSIGNF''@|$(HAVE_DECL_COPYSIGNF)|g' \ + -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \ + -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \ + -e 's|@''HAVE_DECL_EXP2''@|$(HAVE_DECL_EXP2)|g' \ + -e 's|@''HAVE_DECL_EXP2F''@|$(HAVE_DECL_EXP2F)|g' \ + -e 's|@''HAVE_DECL_EXP2L''@|$(HAVE_DECL_EXP2L)|g' \ + -e 's|@''HAVE_DECL_EXPM1L''@|$(HAVE_DECL_EXPM1L)|g' \ + -e 's|@''HAVE_DECL_FLOORF''@|$(HAVE_DECL_FLOORF)|g' \ + -e 's|@''HAVE_DECL_FLOORL''@|$(HAVE_DECL_FLOORL)|g' \ + -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \ + -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \ + -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \ + -e 's|@''HAVE_DECL_LOG10L''@|$(HAVE_DECL_LOG10L)|g' \ + -e 's|@''HAVE_DECL_LOG2''@|$(HAVE_DECL_LOG2)|g' \ + -e 's|@''HAVE_DECL_LOG2F''@|$(HAVE_DECL_LOG2F)|g' \ + -e 's|@''HAVE_DECL_LOG2L''@|$(HAVE_DECL_LOG2L)|g' \ + -e 's|@''HAVE_DECL_LOGB''@|$(HAVE_DECL_LOGB)|g' \ + -e 's|@''HAVE_DECL_REMAINDER''@|$(HAVE_DECL_REMAINDER)|g' \ + -e 's|@''HAVE_DECL_REMAINDERL''@|$(HAVE_DECL_REMAINDERL)|g' \ + -e 's|@''HAVE_DECL_RINTF''@|$(HAVE_DECL_RINTF)|g' \ + -e 's|@''HAVE_DECL_ROUND''@|$(HAVE_DECL_ROUND)|g' \ + -e 's|@''HAVE_DECL_ROUNDF''@|$(HAVE_DECL_ROUNDF)|g' \ + -e 's|@''HAVE_DECL_ROUNDL''@|$(HAVE_DECL_ROUNDL)|g' \ + -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \ + -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \ + -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \ + -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \ + -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ + -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \ + | \ + sed -e 's|@''REPLACE_ACOSF''@|$(REPLACE_ACOSF)|g' \ + -e 's|@''REPLACE_ASINF''@|$(REPLACE_ASINF)|g' \ + -e 's|@''REPLACE_ATANF''@|$(REPLACE_ATANF)|g' \ + -e 's|@''REPLACE_ATAN2F''@|$(REPLACE_ATAN2F)|g' \ + -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \ + -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \ + -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \ + -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ + -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ + -e 's|@''REPLACE_COSF''@|$(REPLACE_COSF)|g' \ + -e 's|@''REPLACE_COSHF''@|$(REPLACE_COSHF)|g' \ + -e 's|@''REPLACE_EXPF''@|$(REPLACE_EXPF)|g' \ + -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \ + -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \ + -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \ + -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \ + -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \ + -e 's|@''REPLACE_FLOOR''@|$(REPLACE_FLOOR)|g' \ + -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \ + -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \ + -e 's|@''REPLACE_FMA''@|$(REPLACE_FMA)|g' \ + -e 's|@''REPLACE_FMAF''@|$(REPLACE_FMAF)|g' \ + -e 's|@''REPLACE_FMAL''@|$(REPLACE_FMAL)|g' \ + -e 's|@''REPLACE_FMOD''@|$(REPLACE_FMOD)|g' \ + -e 's|@''REPLACE_FMODF''@|$(REPLACE_FMODF)|g' \ + -e 's|@''REPLACE_FMODL''@|$(REPLACE_FMODL)|g' \ + -e 's|@''REPLACE_FREXPF''@|$(REPLACE_FREXPF)|g' \ + -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \ + -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \ + -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \ + -e 's|@''REPLACE_HYPOT''@|$(REPLACE_HYPOT)|g' \ + -e 's|@''REPLACE_HYPOTF''@|$(REPLACE_HYPOTF)|g' \ + -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \ + -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \ + -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \ + -e 's|@''REPLACE_ILOGBL''@|$(REPLACE_ILOGBL)|g' \ + -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ + -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ + -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ + -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ + -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \ + -e 's|@''REPLACE_LOG''@|$(REPLACE_LOG)|g' \ + -e 's|@''REPLACE_LOGF''@|$(REPLACE_LOGF)|g' \ + -e 's|@''REPLACE_LOGL''@|$(REPLACE_LOGL)|g' \ + -e 's|@''REPLACE_LOG10''@|$(REPLACE_LOG10)|g' \ + -e 's|@''REPLACE_LOG10F''@|$(REPLACE_LOG10F)|g' \ + -e 's|@''REPLACE_LOG10L''@|$(REPLACE_LOG10L)|g' \ + -e 's|@''REPLACE_LOG1P''@|$(REPLACE_LOG1P)|g' \ + -e 's|@''REPLACE_LOG1PF''@|$(REPLACE_LOG1PF)|g' \ + -e 's|@''REPLACE_LOG1PL''@|$(REPLACE_LOG1PL)|g' \ + -e 's|@''REPLACE_LOG2''@|$(REPLACE_LOG2)|g' \ + -e 's|@''REPLACE_LOG2F''@|$(REPLACE_LOG2F)|g' \ + -e 's|@''REPLACE_LOG2L''@|$(REPLACE_LOG2L)|g' \ + -e 's|@''REPLACE_LOGB''@|$(REPLACE_LOGB)|g' \ + -e 's|@''REPLACE_LOGBF''@|$(REPLACE_LOGBF)|g' \ + -e 's|@''REPLACE_LOGBL''@|$(REPLACE_LOGBL)|g' \ + -e 's|@''REPLACE_MODF''@|$(REPLACE_MODF)|g' \ + -e 's|@''REPLACE_MODFF''@|$(REPLACE_MODFF)|g' \ + -e 's|@''REPLACE_MODFL''@|$(REPLACE_MODFL)|g' \ + -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \ + -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \ + -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \ + -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \ + -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ + -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ + -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ + -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ + -e 's|@''REPLACE_SIGNBIT_USING_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|g' \ + -e 's|@''REPLACE_SINF''@|$(REPLACE_SINF)|g' \ + -e 's|@''REPLACE_SINHF''@|$(REPLACE_SINHF)|g' \ + -e 's|@''REPLACE_SQRTF''@|$(REPLACE_SQRTF)|g' \ + -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \ + -e 's|@''REPLACE_TANF''@|$(REPLACE_TANF)|g' \ + -e 's|@''REPLACE_TANHF''@|$(REPLACE_TANHF)|g' \ + -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \ + -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \ + -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ + +# This rule overrides the Automake generated .y.c rule, to ensure that the +# parse-datetime.c file gets generated in the source directory, not in the +# build directory. +parse-datetime.c: parse-datetime.y + $(AM_V_GEN)$(SHELL) $(YLWRAP) $(srcdir)/parse-datetime.y \ + y.tab.c parse-datetime.c \ + y.tab.h parse-datetime.h \ + y.output parse-datetime.output \ + -- $(YACC) $(YFLAGS) $(AM_YFLAGS) && \ + sed -e 's|".*/parse-datetime.y"|"parse-datetime.y"|' \ + < parse-datetime.c > parse-datetime.c-t && \ + rm -f parse-datetime.c && \ + mv parse-datetime.c-t $(srcdir)/parse-datetime.c + +# We need the following in order to create a replacement for <sched.h> when +# the system doesn't have one. +#sched.h: sched.in.h $(top_builddir)/config.status +# $(AM_V_GEN)rm -f $@-t $@ && \ +# { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ +# sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +# -e 's|@''HAVE_SCHED_H''@|$(HAVE_SCHED_H)|g' \ +# -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ +# -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +# -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ +# -e 's|@''PRAGMA_COLUMNS''@||g' \ +# -e 's|@''NEXT_SCHED_H''@|$(NEXT_SCHED_H)|g' \ +# -e 's|@''HAVE_STRUCT_SCHED_PARAM''@|$(HAVE_STRUCT_SCHED_PARAM)|g' \ +# < $(srcdir)/sched.in.h; \ +# } > $@-t && \ +# mv $@-t $@ +sched.h: $(top_builddir)/config.status + rm -f $@ +selinux/selinux.h: se-selinux.in.h $(top_builddir)/config.status $(UNUSED_PARAMETER_H) + $(AM_V_at)$(MKDIR_P) selinux + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_SELINUX_SELINUX_H''@|$(NEXT_SELINUX_SELINUX_H)|g' \ + -e '/definition of _GL_UNUSED_PARAMETER/r $(UNUSED_PARAMETER_H)' \ + < $(srcdir)/se-selinux.in.h; \ + } > $@-t && \ + chmod a-x $@-t && \ + mv $@-t $@ +selinux/context.h: se-context.in.h $(top_builddir)/config.status $(UNUSED_PARAMETER_H) + $(AM_V_at)$(MKDIR_P) selinux + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e '/definition of _GL_UNUSED_PARAMETER/r $(UNUSED_PARAMETER_H)' \ + < $(srcdir)/se-context.in.h; \ + } > $@-t && \ + chmod a-x $@-t && \ + mv $@-t $@ +#selinux/context.h: $(top_builddir)/config.status +# rm -f $@ + +# We need the following in order to create <signal.h> when the system +# doesn't have a complete one. +signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \ + -e 's/@''GNULIB_PTHREAD_SIGMASK''@/$(GNULIB_PTHREAD_SIGMASK)/g' \ + -e 's/@''GNULIB_RAISE''@/$(GNULIB_RAISE)/g' \ + -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GNULIB_SIGNAL_H_SIGPIPE)/g' \ + -e 's/@''GNULIB_SIGPROCMASK''@/$(GNULIB_SIGPROCMASK)/g' \ + -e 's/@''GNULIB_SIGACTION''@/$(GNULIB_SIGACTION)/g' \ + -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \ + -e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \ + -e 's|@''HAVE_RAISE''@|$(HAVE_RAISE)|g' \ + -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \ + -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \ + -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \ + -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \ + -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \ + -e 's|@''HAVE_SIGHANDLER_T''@|$(HAVE_SIGHANDLER_T)|g' \ + -e 's|@''REPLACE_PTHREAD_SIGMASK''@|$(REPLACE_PTHREAD_SIGMASK)|g' \ + -e 's|@''REPLACE_RAISE''@|$(REPLACE_RAISE)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/signal.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create a replacement for <spawn.h> when +# the system doesn't have one. +spawn.h: spawn.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_SPAWN_H''@|$(HAVE_SPAWN_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_SPAWN_H''@|$(NEXT_SPAWN_H)|g' \ + -e 's/@''GNULIB_POSIX_SPAWN''@/$(GNULIB_POSIX_SPAWN)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNP''@/$(GNULIB_POSIX_SPAWNP)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_INIT''@/$(GNULIB_POSIX_SPAWNATTR_INIT)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETFLAGS''@/$(GNULIB_POSIX_SPAWNATTR_GETFLAGS)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETFLAGS''@/$(GNULIB_POSIX_SPAWNATTR_SETFLAGS)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETPGROUP''@/$(GNULIB_POSIX_SPAWNATTR_GETPGROUP)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETPGROUP''@/$(GNULIB_POSIX_SPAWNATTR_SETPGROUP)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM''@/$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM''@/$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY''@/$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY''@/$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT''@/$(GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT''@/$(GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSIGMASK''@/$(GNULIB_POSIX_SPAWNATTR_GETSIGMASK)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSIGMASK''@/$(GNULIB_POSIX_SPAWNATTR_SETSIGMASK)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_DESTROY''@/$(GNULIB_POSIX_SPAWNATTR_DESTROY)/g' \ + -e 's|@''HAVE_POSIX_SPAWN''@|$(HAVE_POSIX_SPAWN)|g' \ + -e 's|@''HAVE_POSIX_SPAWNATTR_T''@|$(HAVE_POSIX_SPAWNATTR_T)|g' \ + -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_T''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_T)|g' \ + -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN''@|$(REPLACE_POSIX_SPAWN)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/spawn.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <stdarg.h> when the system +# doesn't have one that works with the given compiler. +#stdarg.h: stdarg.in.h $(top_builddir)/config.status +# $(AM_V_GEN)rm -f $@-t $@ && \ +# { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ +# sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +# -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +# -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ +# -e 's|@''PRAGMA_COLUMNS''@||g' \ +# -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ +# < $(srcdir)/stdarg.in.h; \ +# } > $@-t && \ +# mv $@-t $@ +stdarg.h: $(top_builddir)/config.status + rm -f $@ + +# We need the following in order to create <stdbool.h> when the system +# doesn't have one that works. +#stdbool.h: stdbool.in.h $(top_builddir)/config.status +# $(AM_V_GEN)rm -f $@-t $@ && \ +# { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ +# sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ +# } > $@-t && \ +# mv $@-t $@ +stdbool.h: $(top_builddir)/config.status + rm -f $@ + +# We need the following in order to create <stddef.h> when the system +# doesn't have one that works with the given compiler. +#stddef.h: stddef.in.h $(top_builddir)/config.status +# $(AM_V_GEN)rm -f $@-t $@ && \ +# { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ +# sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +# -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +# -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ +# -e 's|@''PRAGMA_COLUMNS''@||g' \ +# -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ +# -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ +# -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ +# -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ +# < $(srcdir)/stddef.in.h; \ +# } > $@-t && \ +# mv $@-t $@ +stddef.h: $(top_builddir)/config.status + rm -f $@ + +# We need the following in order to create <stdint.h> when the system +# doesn't have one that works with the given compiler. +stdint.h: stdint.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ + -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ + -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ + -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ + -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ + -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ + -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ + -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ + -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ + -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ + -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ + -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ + -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ + -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ + -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ + -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ + -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ + -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ + < $(srcdir)/stdint.in.h; \ + } > $@-t && \ + mv $@-t $@ +#stdint.h: $(top_builddir)/config.status +# rm -f $@ + +# We need the following in order to create <stdio.h> when the system +# doesn't have one that works with the given compiler. +stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ + -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \ + -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \ + -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \ + -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \ + -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \ + -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \ + -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \ + -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \ + -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \ + -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \ + -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \ + -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \ + -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \ + -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \ + -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \ + -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \ + -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \ + -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \ + -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \ + -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \ + -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \ + -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \ + -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \ + -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \ + -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \ + -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \ + -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \ + -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \ + -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \ + -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \ + -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \ + -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \ + -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \ + -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \ + -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \ + -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \ + -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \ + -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \ + -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \ + -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \ + -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \ + -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \ + -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \ + -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \ + -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \ + -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \ + -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \ + -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \ + -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \ + < $(srcdir)/stdio.in.h | \ + sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ + -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ + -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ + -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ + -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ + -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ + -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ + -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ + -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ + -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ + -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ + -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ + -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ + -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ + -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ + -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ + -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ + -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ + -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ + -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ + -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ + -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ + -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ + -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ + -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ + -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ + -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ + -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ + -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ + -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ + -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ + -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ + -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ + -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ + -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ + -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ + -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ + -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ + -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ + -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ + -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ + -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ + -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ + -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ + -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ + -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ + -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ + -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ + -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <stdlib.h> when the system +# doesn't have one that works with the given compiler. +stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ + $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ + -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \ + -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \ + -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \ + -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \ + -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \ + -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \ + -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \ + -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \ + -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \ + -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \ + -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \ + -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \ + -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \ + -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \ + -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \ + -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \ + -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \ + -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \ + -e 's/@''GNULIB_QSORT_R''@/$(GNULIB_QSORT_R)/g' \ + -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \ + -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ + -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ + -e 's/@''GNULIB_REALLOCARRAY''@/$(GNULIB_REALLOCARRAY)/g' \ + -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ + -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ + -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \ + -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ + -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ + -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \ + -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \ + -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \ + -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \ + -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \ + -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \ + < $(srcdir)/stdlib.in.h | \ + sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ + -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ + -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ + -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ + -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ + -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ + -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ + -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ + -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ + -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ + -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ + -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ + -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ + -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ + -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ + -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ + -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ + -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ + -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ + -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ + -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ + -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ + -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ + -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ + -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ + -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ + -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ + -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ + -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ + -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ + -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ + -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ + -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \ + -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ + -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ + -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ + -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ + -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ + -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ + -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ + -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ + -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ + -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ + -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ + -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ + -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ + -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ + -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _Noreturn/r $(_NORETURN_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <string.h> when the system +# doesn't have one that works with the given compiler. +string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ + -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \ + -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ + -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ + -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ + -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ + -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ + -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ + -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ + -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ + -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ + -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ + -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ + -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ + -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ + -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ + -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ + -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ + -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ + -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ + -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ + -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ + -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ + -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ + -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ + -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ + -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ + -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ + -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ + -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ + -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ + -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ + -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ + -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ + -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ + -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ + -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ + -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ + -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ + < $(srcdir)/string.in.h | \ + sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ + -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ + -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ + -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ + -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ + -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ + -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ + -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ + -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ + -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ + -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ + -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ + -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ + -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ + -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ + -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ + -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ + -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ + -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ + -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ + -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ + -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ + -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ + -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ + -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ + -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ + -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ + -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ + -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ + -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ + -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ + -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ + -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ + -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ + -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ + -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ + -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + < $(srcdir)/string.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <strings.h> when the system +# doesn't have one that works with the given compiler. +strings.h: strings.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_STRINGS_H''@|$(HAVE_STRINGS_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \ + -e 's/@''GNULIB_FFS''@/$(GNULIB_FFS)/g' \ + -e 's|@''HAVE_FFS''@|$(HAVE_FFS)|g' \ + -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \ + -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/strings.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <sys/file.h> when the system +# has one that is incomplete. +sys/file.h: sys_file.in.h $(top_builddir)/config.status $(WARN_ON_USE_H) + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's/@''HAVE_SYS_FILE_H''@/$(HAVE_SYS_FILE_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_SYS_FILE_H''@|$(NEXT_SYS_FILE_H)|g' \ + -e 's/@''HAVE_FLOCK''@/$(HAVE_FLOCK)/g' \ + -e 's/@''GNULIB_FLOCK''@/$(GNULIB_FLOCK)/g' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/sys_file.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <sys/stat.h> when the system +# has one that is incomplete. +sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ + -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \ + -e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \ + -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \ + -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \ + -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \ + -e 's/@''GNULIB_FUTIMENS''@/$(GNULIB_FUTIMENS)/g' \ + -e 's/@''GNULIB_LCHMOD''@/$(GNULIB_LCHMOD)/g' \ + -e 's/@''GNULIB_LSTAT''@/$(GNULIB_LSTAT)/g' \ + -e 's/@''GNULIB_MKDIRAT''@/$(GNULIB_MKDIRAT)/g' \ + -e 's/@''GNULIB_MKFIFO''@/$(GNULIB_MKFIFO)/g' \ + -e 's/@''GNULIB_MKFIFOAT''@/$(GNULIB_MKFIFOAT)/g' \ + -e 's/@''GNULIB_MKNOD''@/$(GNULIB_MKNOD)/g' \ + -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \ + -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \ + -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \ + -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GNULIB_OVERRIDES_STRUCT_STAT)/g' \ + -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ + -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ + -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \ + -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ + -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ + -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \ + -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \ + -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \ + -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \ + -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \ + -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \ + -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \ + -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \ + -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \ + -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ + -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ + -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \ + -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \ + -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \ + -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/sys_stat.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <sys/time.h> when the system +# doesn't have one that works with the given compiler. +sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ + -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \ + -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ + -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \ + -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \ + -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \ + -e 's/@''REPLACE_STRUCT_TIMEVAL''@/$(REPLACE_STRUCT_TIMEVAL)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/sys_time.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <sys/types.h> when the system +# doesn't have one that works with the given compiler. +sys/types.h: sys_types.in.h $(top_builddir)/config.status + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ + -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ + -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ + < $(srcdir)/sys_types.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <sys/wait.h> when the system +# has one that is incomplete. +sys/wait.h: sys_wait.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \ + -e 's/@''GNULIB_WAITPID''@/$(GNULIB_WAITPID)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/sys_wait.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <time.h> when the system +# doesn't have one that works with the given compiler. +time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ + -e 's/@''GNULIB_CTIME''@/$(GNULIB_CTIME)/g' \ + -e 's/@''GNULIB_LOCALTIME''@/$(GNULIB_LOCALTIME)/g' \ + -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \ + -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \ + -e 's/@''GNULIB_STRFTIME''@/$(GNULIB_STRFTIME)/g' \ + -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \ + -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \ + -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \ + -e 's/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \ + -e 's/@''GNULIB_TZSET''@/$(GNULIB_TZSET)/g' \ + -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ + -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ + -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ + -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ + -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ + -e 's|@''HAVE_TZSET''@|$(HAVE_TZSET)|g' \ + -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \ + -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ + -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ + -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ + -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ + -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ + -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ + -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ + -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \ + -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ + -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ + -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ + -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/time.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create an empty placeholder for +# <unistd.h> when the system doesn't have one. +unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ + -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ + -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ + -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ + -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ + -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ + -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ + -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ + -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \ + -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \ + -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \ + -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \ + -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \ + -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \ + -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \ + -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \ + -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ + -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ + -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ + -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ + -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ + -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ + -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ + -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ + -e 's/@''GNULIB_GETPASS''@/$(GNULIB_GETPASS)/g' \ + -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ + -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ + -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \ + -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \ + -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \ + -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \ + -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \ + -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \ + -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \ + -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \ + -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \ + -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \ + -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \ + -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \ + -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \ + -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \ + -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ + -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ + -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ + -e 's/@''GNULIB_TRUNCATE''@/$(GNULIB_TRUNCATE)/g' \ + -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ + -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \ + -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ + -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \ + -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \ + -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \ + -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \ + -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ + < $(srcdir)/unistd.in.h | \ + sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ + -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ + -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ + -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ + -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ + -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ + -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ + -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ + -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ + -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ + -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ + -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ + -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ + -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ + -e 's|@''HAVE_GETPASS''@|$(HAVE_GETPASS)|g' \ + -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ + -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ + -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ + -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ + -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ + -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ + -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ + -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ + -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ + -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ + -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ + -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ + -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ + -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ + -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ + -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ + -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ + -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ + -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ + -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ + -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ + -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ + -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ + -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ + -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ + -e 's|@''HAVE_DECL_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|g' \ + -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ + -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ + -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ + | \ + sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ + -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ + -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ + -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ + -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ + -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ + -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ + -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ + -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ + -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ + -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ + -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ + -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ + -e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \ + -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ + -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ + -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ + -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ + -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ + -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ + -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ + -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ + -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ + -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ + -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ + -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ + -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ + -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ + -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ + -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ + -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ + -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ + -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ + -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ + -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ + -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <wchar.h> when the system +# version does not work standalone. +wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ + -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ + -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ + -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ + -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ + -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \ + -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \ + -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \ + -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \ + -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \ + -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \ + -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \ + -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \ + -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \ + -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \ + -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \ + -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \ + -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \ + -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \ + -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \ + -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \ + -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \ + -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \ + -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \ + -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \ + -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \ + -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \ + -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \ + -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \ + -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \ + -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \ + -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \ + -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \ + -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \ + -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \ + -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \ + -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \ + -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \ + -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \ + -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \ + -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \ + -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \ + -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \ + -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \ + -e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \ + < $(srcdir)/wchar.in.h | \ + sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ + -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ + -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ + -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ + -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ + -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ + -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ + -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ + -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ + -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ + -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ + -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ + -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ + -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ + -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ + -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ + -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ + -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ + -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ + -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ + -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ + -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ + -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ + -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ + -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ + -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ + -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ + -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ + -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ + -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ + -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ + -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ + -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ + -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ + -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ + -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ + -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ + -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ + -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \ + -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ + -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ + | \ + sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ + -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ + -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ + -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ + -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ + -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ + -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ + -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ + -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ + -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ + -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ + -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ + -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ + -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <wctype.h> when the system +# doesn't have one that works with the given compiler. +wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ + -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ + -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ + -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \ + -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \ + -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \ + -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \ + -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \ + -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \ + -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ + -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \ + -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \ + -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ + -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \ + -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ + -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/wctype.in.h; \ + } > $@-t && \ + mv $@-t $@ + +mostlyclean-local: mostlyclean-generic + @for dir in '' $(MOSTLYCLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + : + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/lib/Makefile.am b/devspec.en_US/project/recutils/lib/Makefile.am new file mode 100755 index 0000000..a6ec30b --- /dev/null +++ b/devspec.en_US/project/recutils/lib/Makefile.am @@ -0,0 +1,3450 @@ +## DO NOT EDIT! GENERATED AUTOMATICALLY! +## Process this file with automake to produce Makefile.in. +# Copyright (C) 2002-2019 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This file is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this file. If not, see <https://www.gnu.org/licenses/>. +# +# As a special exception to the GNU General Public License, +# this file may be distributed as part of a program that +# contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. +# Reproduce by: +# gnulib-tool --import --local-dir=gl \ +# --lib=librecutils \ +# --source-base=lib \ +# --m4-base=m4 \ +# --doc-base=doc \ +# --tests-base=tests \ +# --aux-dir=build-aux \ +# --no-conditional-dependencies \ +# --libtool \ +# --macro-prefix=gl \ +# acl \ +# alloca \ +# announce-gen \ +# array-list \ +# autobuild \ +# base64 \ +# btowc \ +# c-ctype \ +# closeout \ +# crc \ +# euidaccess \ +# execute \ +# extensions \ +# flock \ +# floor \ +# fprintf-posix \ +# fwriting \ +# gendocs \ +# getdelim \ +# getopt-gnu \ +# getpass-gnu \ +# gettext-h \ +# gnupload \ +# list \ +# localcharset \ +# maintainer-makefile \ +# mbrlen \ +# mbrtowc \ +# mbsinit \ +# memchr \ +# minmax \ +# mkostemp \ +# mkstemp \ +# obstack \ +# parse-datetime \ +# pathmax \ +# printf-posix \ +# progname \ +# random_r \ +# read-file \ +# readline \ +# regex \ +# regexprops-generic \ +# rename \ +# selinux-h \ +# signal-h \ +# ssize_t \ +# stat-macros \ +# stdbool \ +# stdint \ +# strcasestr \ +# strerror \ +# strsep \ +# strverscmp \ +# tempname \ +# threadlib \ +# tmpdir \ +# unlocked-io \ +# vasnprintf-posix \ +# vasprintf \ +# vasprintf-posix \ +# verify \ +# version-etc-fsf \ +# wcrtomb \ +# wctob + +AUTOMAKE_OPTIONS = 1.11 gnits subdir-objects + +SUBDIRS = +noinst_HEADERS = +noinst_LIBRARIES = +noinst_LTLIBRARIES = +EXTRA_DIST = +BUILT_SOURCES = +SUFFIXES = +MOSTLYCLEANFILES = core *.stackdump +MOSTLYCLEANDIRS = +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = +# No GNU Make output. + +AM_CPPFLAGS = +AM_CFLAGS = + +noinst_LTLIBRARIES += librecutils.la + +librecutils_la_SOURCES = +librecutils_la_LIBADD = $(gl_LTLIBOBJS) +librecutils_la_DEPENDENCIES = $(gl_LTLIBOBJS) +EXTRA_librecutils_la_SOURCES = +librecutils_la_LDFLAGS = $(AM_LDFLAGS) +librecutils_la_LDFLAGS += -no-undefined +librecutils_la_LDFLAGS += $(FLOOR_LIBM) +librecutils_la_LDFLAGS += $(LIB_ACL) +librecutils_la_LDFLAGS += $(LIB_CLOCK_GETTIME) +librecutils_la_LDFLAGS += $(LIB_EACCESS) +librecutils_la_LDFLAGS += $(LIB_SELINUX) +librecutils_la_LDFLAGS += $(LTLIBINTL) +librecutils_la_LDFLAGS += $(LTLIBREADLINE) +librecutils_la_LDFLAGS += $(LTLIBTHREAD) + +## begin gnulib module absolute-header + +# Use this preprocessor expression to decide whether #include_next works. +# Do not rely on a 'configure'-time test for this, since the expression +# might appear in an installed header, which is used by some other compiler. +HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) + +## end gnulib module absolute-header + +## begin gnulib module acl + +librecutils_la_SOURCES += copy-acl.c set-acl.c + +## end gnulib module acl + +## begin gnulib module acl-permissions + +librecutils_la_SOURCES += acl-errno-valid.c acl-internal.c get-permissions.c set-permissions.c + +EXTRA_DIST += acl-internal.h acl.h acl_entries.c + +EXTRA_librecutils_la_SOURCES += acl_entries.c + +## end gnulib module acl-permissions + +## begin gnulib module alignof + + +EXTRA_DIST += alignof.h + +## end gnulib module alignof + +## begin gnulib module alloca + + +librecutils_la_LIBADD += @LTALLOCA@ +librecutils_la_DEPENDENCIES += @LTALLOCA@ +EXTRA_DIST += alloca.c + +EXTRA_librecutils_la_SOURCES += alloca.c + +## end gnulib module alloca + +## begin gnulib module alloca-opt + +BUILT_SOURCES += $(ALLOCA_H) + +# We need the following in order to create <alloca.h> when the system +# doesn't have one that works with the given compiler. +if GL_GENERATE_ALLOCA_H +alloca.h: alloca.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/alloca.in.h; \ + } > $@-t && \ + mv -f $@-t $@ +else +alloca.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += alloca.h alloca.h-t + +EXTRA_DIST += alloca.in.h + +## end gnulib module alloca-opt + +## begin gnulib module announce-gen + + +EXTRA_DIST += $(top_srcdir)/build-aux/announce-gen + +## end gnulib module announce-gen + +## begin gnulib module array-list + +librecutils_la_SOURCES += gl_array_list.h gl_array_list.c + +## end gnulib module array-list + +## begin gnulib module base64 + +librecutils_la_SOURCES += base64.h base64.c + +## end gnulib module base64 + +## begin gnulib module btowc + + +EXTRA_DIST += btowc.c + +EXTRA_librecutils_la_SOURCES += btowc.c + +## end gnulib module btowc + +## begin gnulib module c-ctype + +librecutils_la_SOURCES += c-ctype.h c-ctype.c + +## end gnulib module c-ctype + +## begin gnulib module c-strcase + +librecutils_la_SOURCES += c-strcase.h c-strcasecmp.c c-strncasecmp.c + +## end gnulib module c-strcase + +## begin gnulib module c-strcaseeq + + +EXTRA_DIST += c-strcaseeq.h + +## end gnulib module c-strcaseeq + +## begin gnulib module canonicalize-lgpl + + +EXTRA_DIST += canonicalize-lgpl.c + +EXTRA_librecutils_la_SOURCES += canonicalize-lgpl.c + +## end gnulib module canonicalize-lgpl + +## begin gnulib module cloexec + +librecutils_la_SOURCES += cloexec.c + +EXTRA_DIST += cloexec.h + +## end gnulib module cloexec + +## begin gnulib module close + + +EXTRA_DIST += close.c + +EXTRA_librecutils_la_SOURCES += close.c + +## end gnulib module close + +## begin gnulib module close-stream + +librecutils_la_SOURCES += close-stream.c + +EXTRA_DIST += close-stream.h + +## end gnulib module close-stream + +## begin gnulib module closeout + +librecutils_la_SOURCES += closeout.c + +EXTRA_DIST += closeout.h + +## end gnulib module closeout + +## begin gnulib module crc + +librecutils_la_SOURCES += crc.c + +EXTRA_DIST += crc.h + +## end gnulib module crc + +## begin gnulib module dirname-lgpl + +librecutils_la_SOURCES += dirname-lgpl.c basename-lgpl.c stripslash.c + +EXTRA_DIST += dirname.h + +## end gnulib module dirname-lgpl + +## begin gnulib module dosname + + +EXTRA_DIST += dosname.h + +## end gnulib module dosname + +## begin gnulib module dup2 + + +EXTRA_DIST += dup2.c + +EXTRA_librecutils_la_SOURCES += dup2.c + +## end gnulib module dup2 + +## begin gnulib module errno + +BUILT_SOURCES += $(ERRNO_H) + +# We need the following in order to create <errno.h> when the system +# doesn't have one that is POSIX compliant. +if GL_GENERATE_ERRNO_H +errno.h: errno.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ + -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ + -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ + -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ + -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ + -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ + -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ + < $(srcdir)/errno.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +errno.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += errno.h errno.h-t + +EXTRA_DIST += errno.in.h + +## end gnulib module errno + +## begin gnulib module error + + +EXTRA_DIST += error.c error.h + +EXTRA_librecutils_la_SOURCES += error.c + +## end gnulib module error + +## begin gnulib module euidaccess + + +EXTRA_DIST += euidaccess.c + +EXTRA_librecutils_la_SOURCES += euidaccess.c + +## end gnulib module euidaccess + +## begin gnulib module execute + +librecutils_la_SOURCES += execute.h execute.c w32spawn.h + +## end gnulib module execute + +## begin gnulib module exitfail + +librecutils_la_SOURCES += exitfail.c + +EXTRA_DIST += exitfail.h + +## end gnulib module exitfail + +## begin gnulib module fatal-signal + +librecutils_la_SOURCES += fatal-signal.h fatal-signal.c + +## end gnulib module fatal-signal + +## begin gnulib module fcntl + + +EXTRA_DIST += fcntl.c + +EXTRA_librecutils_la_SOURCES += fcntl.c + +## end gnulib module fcntl + +## begin gnulib module fcntl-h + +BUILT_SOURCES += fcntl.h + +# We need the following in order to create <fcntl.h> when the system +# doesn't have one that works with the given compiler. +fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ + -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \ + -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \ + -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \ + -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \ + -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ + -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ + -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ + -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ + -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/fcntl.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += fcntl.h fcntl.h-t + +EXTRA_DIST += fcntl.in.h + +## end gnulib module fcntl-h + +## begin gnulib module fd-hook + +librecutils_la_SOURCES += fd-hook.c + +EXTRA_DIST += fd-hook.h + +## end gnulib module fd-hook + +## begin gnulib module filename + + +EXTRA_DIST += filename.h + +## end gnulib module filename + +## begin gnulib module flexmember + + +EXTRA_DIST += flexmember.h + +## end gnulib module flexmember + +## begin gnulib module float + +BUILT_SOURCES += $(FLOAT_H) + +# We need the following in order to create <float.h> when the system +# doesn't have one that works with the given compiler. +if GL_GENERATE_FLOAT_H +float.h: float.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ + -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ + < $(srcdir)/float.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +float.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += float.h float.h-t + +EXTRA_DIST += float.c float.in.h itold.c + +EXTRA_librecutils_la_SOURCES += float.c itold.c + +## end gnulib module float + +## begin gnulib module flock + + +EXTRA_DIST += flock.c + +EXTRA_librecutils_la_SOURCES += flock.c + +## end gnulib module flock + +## begin gnulib module floor + + +EXTRA_DIST += floor.c + +EXTRA_librecutils_la_SOURCES += floor.c + +## end gnulib module floor + +## begin gnulib module fpending + + +EXTRA_DIST += fpending.c fpending.h stdio-impl.h + +EXTRA_librecutils_la_SOURCES += fpending.c + +## end gnulib module fpending + +## begin gnulib module fprintf-posix + + +EXTRA_DIST += fprintf.c + +EXTRA_librecutils_la_SOURCES += fprintf.c + +## end gnulib module fprintf-posix + +## begin gnulib module fpucw + + +EXTRA_DIST += fpucw.h + +## end gnulib module fpucw + +## begin gnulib module frexp-nolibm + + +EXTRA_DIST += frexp.c + +EXTRA_librecutils_la_SOURCES += frexp.c + +## end gnulib module frexp-nolibm + +## begin gnulib module frexpl-nolibm + + +EXTRA_DIST += frexp.c frexpl.c + +EXTRA_librecutils_la_SOURCES += frexp.c frexpl.c + +## end gnulib module frexpl-nolibm + +## begin gnulib module fseek + + +EXTRA_DIST += fseek.c + +EXTRA_librecutils_la_SOURCES += fseek.c + +## end gnulib module fseek + +## begin gnulib module fseeko + + +EXTRA_DIST += fseeko.c stdio-impl.h + +EXTRA_librecutils_la_SOURCES += fseeko.c + +## end gnulib module fseeko + +## begin gnulib module fseterr + + +EXTRA_DIST += fseterr.c fseterr.h stdio-impl.h + +EXTRA_librecutils_la_SOURCES += fseterr.c + +## end gnulib module fseterr + +## begin gnulib module fstat + + +EXTRA_DIST += fstat.c stat-w32.c stat-w32.h + +EXTRA_librecutils_la_SOURCES += fstat.c stat-w32.c + +## end gnulib module fstat + +## begin gnulib module ftell + + +EXTRA_DIST += ftell.c + +EXTRA_librecutils_la_SOURCES += ftell.c + +## end gnulib module ftell + +## begin gnulib module ftello + + +EXTRA_DIST += ftello.c stdio-impl.h + +EXTRA_librecutils_la_SOURCES += ftello.c + +## end gnulib module ftello + +## begin gnulib module fwriting + + +EXTRA_DIST += fwriting.c fwriting.h stdio-impl.h + +EXTRA_librecutils_la_SOURCES += fwriting.c + +## end gnulib module fwriting + +## begin gnulib module gendocs + + +EXTRA_DIST += $(top_srcdir)/build-aux/gendocs.sh + +## end gnulib module gendocs + +## begin gnulib module getdelim + + +EXTRA_DIST += getdelim.c + +EXTRA_librecutils_la_SOURCES += getdelim.c + +## end gnulib module getdelim + +## begin gnulib module getdtablesize + + +EXTRA_DIST += getdtablesize.c + +EXTRA_librecutils_la_SOURCES += getdtablesize.c + +## end gnulib module getdtablesize + +## begin gnulib module getgroups + + +EXTRA_DIST += getgroups.c + +EXTRA_librecutils_la_SOURCES += getgroups.c + +## end gnulib module getgroups + +## begin gnulib module getline + + +EXTRA_DIST += getline.c + +EXTRA_librecutils_la_SOURCES += getline.c + +## end gnulib module getline + +## begin gnulib module getopt-posix + +BUILT_SOURCES += $(GETOPT_H) $(GETOPT_CDEFS_H) + +# We need the following in order to create <getopt.h> when the system +# doesn't have one that works with the given compiler. +getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + < $(srcdir)/getopt.in.h; \ + } > $@-t && \ + mv -f $@-t $@ + +getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ + < $(srcdir)/getopt-cdefs.in.h; \ + } > $@-t && \ + mv -f $@-t $@ + +MOSTLYCLEANFILES += getopt.h getopt.h-t getopt-cdefs.h getopt-cdefs.h-t + +EXTRA_DIST += getopt-cdefs.in.h getopt-core.h getopt-ext.h getopt-pfx-core.h getopt-pfx-ext.h getopt.c getopt.in.h getopt1.c getopt_int.h + +EXTRA_librecutils_la_SOURCES += getopt.c getopt1.c + +## end gnulib module getopt-posix + +## begin gnulib module getpass + + +EXTRA_DIST += getpass.c getpass.h + +EXTRA_librecutils_la_SOURCES += getpass.c + +## end gnulib module getpass + +## begin gnulib module getpass-gnu + + +EXTRA_DIST += getpass.c getpass.h + +EXTRA_librecutils_la_SOURCES += getpass.c + +## end gnulib module getpass-gnu + +## begin gnulib module getprogname + +librecutils_la_SOURCES += getprogname.h getprogname.c + +## end gnulib module getprogname + +## begin gnulib module gettext-h + +librecutils_la_SOURCES += gettext.h + +## end gnulib module gettext-h + +## begin gnulib module gettime + +librecutils_la_SOURCES += gettime.c + +## end gnulib module gettime + +## begin gnulib module gettimeofday + + +EXTRA_DIST += gettimeofday.c + +EXTRA_librecutils_la_SOURCES += gettimeofday.c + +## end gnulib module gettimeofday + +## begin gnulib module gnumakefile + +EXTRA_DIST += $(top_srcdir)/GNUmakefile +distclean-local: clean-GNUmakefile +clean-GNUmakefile: + test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile + +## end gnulib module gnumakefile + +## begin gnulib module gnupload + + +EXTRA_DIST += $(top_srcdir)/build-aux/gnupload + +## end gnulib module gnupload + +## begin gnulib module group-member + + +EXTRA_DIST += group-member.c + +EXTRA_librecutils_la_SOURCES += group-member.c + +## end gnulib module group-member + +## begin gnulib module hard-locale + +librecutils_la_SOURCES += hard-locale.c + +EXTRA_DIST += hard-locale.h + +## end gnulib module hard-locale + +## begin gnulib module havelib + + +EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath + +## end gnulib module havelib + +## begin gnulib module intprops + + +EXTRA_DIST += intprops.h + +## end gnulib module intprops + +## begin gnulib module inttypes-incomplete + +BUILT_SOURCES += inttypes.h + +# We need the following in order to create <inttypes.h> when the system +# doesn't have one that works with the given compiler. +inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \ + -e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \ + -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ + -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ + -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ + -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \ + -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \ + -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \ + -e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \ + -e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \ + -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \ + -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \ + -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \ + -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \ + -e 's/@''HAVE_IMAXDIV_T''@/$(HAVE_IMAXDIV_T)/g' \ + -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \ + -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/g' \ + -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \ + -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \ + -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \ + -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/inttypes.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += inttypes.h inttypes.h-t + +EXTRA_DIST += inttypes.in.h + +## end gnulib module inttypes-incomplete + +## begin gnulib module isnand-nolibm + + +EXTRA_DIST += float+.h isnan.c isnand-nolibm.h isnand.c + +EXTRA_librecutils_la_SOURCES += isnan.c isnand.c + +## end gnulib module isnand-nolibm + +## begin gnulib module isnanf-nolibm + + +EXTRA_DIST += float+.h isnan.c isnanf-nolibm.h isnanf.c + +EXTRA_librecutils_la_SOURCES += isnan.c isnanf.c + +## end gnulib module isnanf-nolibm + +## begin gnulib module isnanl-nolibm + + +EXTRA_DIST += float+.h isnan.c isnanl-nolibm.h isnanl.c + +EXTRA_librecutils_la_SOURCES += isnan.c isnanl.c + +## end gnulib module isnanl-nolibm + +## begin gnulib module langinfo + +BUILT_SOURCES += langinfo.h + +# We need the following in order to create an empty placeholder for +# <langinfo.h> when the system doesn't have one. +langinfo.h: langinfo.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \ + -e 's/@''GNULIB_NL_LANGINFO''@/$(GNULIB_NL_LANGINFO)/g' \ + -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \ + -e 's|@''HAVE_LANGINFO_T_FMT_AMPM''@|$(HAVE_LANGINFO_T_FMT_AMPM)|g' \ + -e 's|@''HAVE_LANGINFO_ALTMON''@|$(HAVE_LANGINFO_ALTMON)|g' \ + -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \ + -e 's|@''HAVE_LANGINFO_YESEXPR''@|$(HAVE_LANGINFO_YESEXPR)|g' \ + -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \ + -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/langinfo.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += langinfo.h langinfo.h-t + +EXTRA_DIST += langinfo.in.h + +## end gnulib module langinfo + +## begin gnulib module libc-config + + +EXTRA_DIST += cdefs.h libc-config.h + +## end gnulib module libc-config + +## begin gnulib module limits-h + +BUILT_SOURCES += $(LIMITS_H) + +# We need the following in order to create <limits.h> when the system +# doesn't have one that is compatible with GNU. +if GL_GENERATE_LIMITS_H +limits.h: limits.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ + < $(srcdir)/limits.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +limits.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += limits.h limits.h-t + +EXTRA_DIST += limits.in.h + +## end gnulib module limits-h + +## begin gnulib module list + +librecutils_la_SOURCES += gl_list.h gl_list.c + +## end gnulib module list + +## begin gnulib module localcharset + +librecutils_la_SOURCES += localcharset.c + +EXTRA_DIST += localcharset.h + +## end gnulib module localcharset + +## begin gnulib module locale + +BUILT_SOURCES += locale.h + +# We need the following in order to create <locale.h> when the system +# doesn't have one that provides all definitions. +locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ + -e 's/@''GNULIB_LOCALECONV''@/$(GNULIB_LOCALECONV)/g' \ + -e 's/@''GNULIB_SETLOCALE''@/$(GNULIB_SETLOCALE)/g' \ + -e 's/@''GNULIB_DUPLOCALE''@/$(GNULIB_DUPLOCALE)/g' \ + -e 's/@''GNULIB_LOCALENAME''@/$(GNULIB_LOCALENAME)/g' \ + -e 's|@''HAVE_NEWLOCALE''@|$(HAVE_NEWLOCALE)|g' \ + -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \ + -e 's|@''HAVE_FREELOCALE''@|$(HAVE_FREELOCALE)|g' \ + -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ + -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \ + -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \ + -e 's|@''REPLACE_NEWLOCALE''@|$(REPLACE_NEWLOCALE)|g' \ + -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \ + -e 's|@''REPLACE_FREELOCALE''@|$(REPLACE_FREELOCALE)|g' \ + -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/locale.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += locale.h locale.h-t + +EXTRA_DIST += locale.in.h + +## end gnulib module locale + +## begin gnulib module localeconv + + +EXTRA_DIST += localeconv.c + +EXTRA_librecutils_la_SOURCES += localeconv.c + +## end gnulib module localeconv + +## begin gnulib module localtime-buffer + + +EXTRA_DIST += localtime-buffer.c localtime-buffer.h + +EXTRA_librecutils_la_SOURCES += localtime-buffer.c + +## end gnulib module localtime-buffer + +## begin gnulib module lock + +librecutils_la_SOURCES += glthread/lock.h glthread/lock.c + +## end gnulib module lock + +## begin gnulib module lseek + + +EXTRA_DIST += lseek.c + +EXTRA_librecutils_la_SOURCES += lseek.c + +## end gnulib module lseek + +## begin gnulib module lstat + + +EXTRA_DIST += lstat.c + +EXTRA_librecutils_la_SOURCES += lstat.c + +## end gnulib module lstat + +## begin gnulib module maintainer-makefile + +EXTRA_DIST += $(top_srcdir)/maint.mk + +## end gnulib module maintainer-makefile + +## begin gnulib module malloc-posix + + +EXTRA_DIST += malloc.c + +EXTRA_librecutils_la_SOURCES += malloc.c + +## end gnulib module malloc-posix + +## begin gnulib module malloca + +librecutils_la_SOURCES += malloca.c + +EXTRA_DIST += malloca.h + +## end gnulib module malloca + +## begin gnulib module math + +BUILT_SOURCES += math.h +librecutils_la_SOURCES += math.c + +# We need the following in order to create <math.h> when the system +# doesn't have one that works with the given compiler. +math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \ + -e 's/@''GNULIB_ACOSF''@/$(GNULIB_ACOSF)/g' \ + -e 's/@''GNULIB_ACOSL''@/$(GNULIB_ACOSL)/g' \ + -e 's/@''GNULIB_ASINF''@/$(GNULIB_ASINF)/g' \ + -e 's/@''GNULIB_ASINL''@/$(GNULIB_ASINL)/g' \ + -e 's/@''GNULIB_ATANF''@/$(GNULIB_ATANF)/g' \ + -e 's/@''GNULIB_ATANL''@/$(GNULIB_ATANL)/g' \ + -e 's/@''GNULIB_ATAN2F''@/$(GNULIB_ATAN2F)/g' \ + -e 's/@''GNULIB_CBRT''@/$(GNULIB_CBRT)/g' \ + -e 's/@''GNULIB_CBRTF''@/$(GNULIB_CBRTF)/g' \ + -e 's/@''GNULIB_CBRTL''@/$(GNULIB_CBRTL)/g' \ + -e 's/@''GNULIB_CEIL''@/$(GNULIB_CEIL)/g' \ + -e 's/@''GNULIB_CEILF''@/$(GNULIB_CEILF)/g' \ + -e 's/@''GNULIB_CEILL''@/$(GNULIB_CEILL)/g' \ + -e 's/@''GNULIB_COPYSIGN''@/$(GNULIB_COPYSIGN)/g' \ + -e 's/@''GNULIB_COPYSIGNF''@/$(GNULIB_COPYSIGNF)/g' \ + -e 's/@''GNULIB_COPYSIGNL''@/$(GNULIB_COPYSIGNL)/g' \ + -e 's/@''GNULIB_COSF''@/$(GNULIB_COSF)/g' \ + -e 's/@''GNULIB_COSL''@/$(GNULIB_COSL)/g' \ + -e 's/@''GNULIB_COSHF''@/$(GNULIB_COSHF)/g' \ + -e 's/@''GNULIB_EXPF''@/$(GNULIB_EXPF)/g' \ + -e 's/@''GNULIB_EXPL''@/$(GNULIB_EXPL)/g' \ + -e 's/@''GNULIB_EXP2''@/$(GNULIB_EXP2)/g' \ + -e 's/@''GNULIB_EXP2F''@/$(GNULIB_EXP2F)/g' \ + -e 's/@''GNULIB_EXP2L''@/$(GNULIB_EXP2L)/g' \ + -e 's/@''GNULIB_EXPM1''@/$(GNULIB_EXPM1)/g' \ + -e 's/@''GNULIB_EXPM1F''@/$(GNULIB_EXPM1F)/g' \ + -e 's/@''GNULIB_EXPM1L''@/$(GNULIB_EXPM1L)/g' \ + -e 's/@''GNULIB_FABSF''@/$(GNULIB_FABSF)/g' \ + -e 's/@''GNULIB_FABSL''@/$(GNULIB_FABSL)/g' \ + -e 's/@''GNULIB_FLOOR''@/$(GNULIB_FLOOR)/g' \ + -e 's/@''GNULIB_FLOORF''@/$(GNULIB_FLOORF)/g' \ + -e 's/@''GNULIB_FLOORL''@/$(GNULIB_FLOORL)/g' \ + -e 's/@''GNULIB_FMA''@/$(GNULIB_FMA)/g' \ + -e 's/@''GNULIB_FMAF''@/$(GNULIB_FMAF)/g' \ + -e 's/@''GNULIB_FMAL''@/$(GNULIB_FMAL)/g' \ + -e 's/@''GNULIB_FMOD''@/$(GNULIB_FMOD)/g' \ + -e 's/@''GNULIB_FMODF''@/$(GNULIB_FMODF)/g' \ + -e 's/@''GNULIB_FMODL''@/$(GNULIB_FMODL)/g' \ + -e 's/@''GNULIB_FREXPF''@/$(GNULIB_FREXPF)/g' \ + -e 's/@''GNULIB_FREXP''@/$(GNULIB_FREXP)/g' \ + -e 's/@''GNULIB_FREXPL''@/$(GNULIB_FREXPL)/g' \ + -e 's/@''GNULIB_HYPOT''@/$(GNULIB_HYPOT)/g' \ + -e 's/@''GNULIB_HYPOTF''@/$(GNULIB_HYPOTF)/g' \ + -e 's/@''GNULIB_HYPOTL''@/$(GNULIB_HYPOTL)/g' \ + < $(srcdir)/math.in.h | \ + sed -e 's/@''GNULIB_ILOGB''@/$(GNULIB_ILOGB)/g' \ + -e 's/@''GNULIB_ILOGBF''@/$(GNULIB_ILOGBF)/g' \ + -e 's/@''GNULIB_ILOGBL''@/$(GNULIB_ILOGBL)/g' \ + -e 's/@''GNULIB_ISFINITE''@/$(GNULIB_ISFINITE)/g' \ + -e 's/@''GNULIB_ISINF''@/$(GNULIB_ISINF)/g' \ + -e 's/@''GNULIB_ISNAN''@/$(GNULIB_ISNAN)/g' \ + -e 's/@''GNULIB_ISNANF''@/$(GNULIB_ISNANF)/g' \ + -e 's/@''GNULIB_ISNAND''@/$(GNULIB_ISNAND)/g' \ + -e 's/@''GNULIB_ISNANL''@/$(GNULIB_ISNANL)/g' \ + -e 's/@''GNULIB_LDEXPF''@/$(GNULIB_LDEXPF)/g' \ + -e 's/@''GNULIB_LDEXPL''@/$(GNULIB_LDEXPL)/g' \ + -e 's/@''GNULIB_LOG''@/$(GNULIB_LOG)/g' \ + -e 's/@''GNULIB_LOGF''@/$(GNULIB_LOGF)/g' \ + -e 's/@''GNULIB_LOGL''@/$(GNULIB_LOGL)/g' \ + -e 's/@''GNULIB_LOG10''@/$(GNULIB_LOG10)/g' \ + -e 's/@''GNULIB_LOG10F''@/$(GNULIB_LOG10F)/g' \ + -e 's/@''GNULIB_LOG10L''@/$(GNULIB_LOG10L)/g' \ + -e 's/@''GNULIB_LOG1P''@/$(GNULIB_LOG1P)/g' \ + -e 's/@''GNULIB_LOG1PF''@/$(GNULIB_LOG1PF)/g' \ + -e 's/@''GNULIB_LOG1PL''@/$(GNULIB_LOG1PL)/g' \ + -e 's/@''GNULIB_LOG2''@/$(GNULIB_LOG2)/g' \ + -e 's/@''GNULIB_LOG2F''@/$(GNULIB_LOG2F)/g' \ + -e 's/@''GNULIB_LOG2L''@/$(GNULIB_LOG2L)/g' \ + -e 's/@''GNULIB_LOGB''@/$(GNULIB_LOGB)/g' \ + -e 's/@''GNULIB_LOGBF''@/$(GNULIB_LOGBF)/g' \ + -e 's/@''GNULIB_LOGBL''@/$(GNULIB_LOGBL)/g' \ + -e 's/@''GNULIB_MODF''@/$(GNULIB_MODF)/g' \ + -e 's/@''GNULIB_MODFF''@/$(GNULIB_MODFF)/g' \ + -e 's/@''GNULIB_MODFL''@/$(GNULIB_MODFL)/g' \ + -e 's/@''GNULIB_POWF''@/$(GNULIB_POWF)/g' \ + -e 's/@''GNULIB_REMAINDER''@/$(GNULIB_REMAINDER)/g' \ + -e 's/@''GNULIB_REMAINDERF''@/$(GNULIB_REMAINDERF)/g' \ + -e 's/@''GNULIB_REMAINDERL''@/$(GNULIB_REMAINDERL)/g' \ + -e 's/@''GNULIB_RINT''@/$(GNULIB_RINT)/g' \ + -e 's/@''GNULIB_RINTF''@/$(GNULIB_RINTF)/g' \ + -e 's/@''GNULIB_RINTL''@/$(GNULIB_RINTL)/g' \ + -e 's/@''GNULIB_ROUND''@/$(GNULIB_ROUND)/g' \ + -e 's/@''GNULIB_ROUNDF''@/$(GNULIB_ROUNDF)/g' \ + -e 's/@''GNULIB_ROUNDL''@/$(GNULIB_ROUNDL)/g' \ + -e 's/@''GNULIB_SIGNBIT''@/$(GNULIB_SIGNBIT)/g' \ + -e 's/@''GNULIB_SINF''@/$(GNULIB_SINF)/g' \ + -e 's/@''GNULIB_SINL''@/$(GNULIB_SINL)/g' \ + -e 's/@''GNULIB_SINHF''@/$(GNULIB_SINHF)/g' \ + -e 's/@''GNULIB_SQRTF''@/$(GNULIB_SQRTF)/g' \ + -e 's/@''GNULIB_SQRTL''@/$(GNULIB_SQRTL)/g' \ + -e 's/@''GNULIB_TANF''@/$(GNULIB_TANF)/g' \ + -e 's/@''GNULIB_TANL''@/$(GNULIB_TANL)/g' \ + -e 's/@''GNULIB_TANHF''@/$(GNULIB_TANHF)/g' \ + -e 's/@''GNULIB_TRUNC''@/$(GNULIB_TRUNC)/g' \ + -e 's/@''GNULIB_TRUNCF''@/$(GNULIB_TRUNCF)/g' \ + -e 's/@''GNULIB_TRUNCL''@/$(GNULIB_TRUNCL)/g' \ + | \ + sed -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \ + -e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \ + -e 's|@''HAVE_ASINF''@|$(HAVE_ASINF)|g' \ + -e 's|@''HAVE_ASINL''@|$(HAVE_ASINL)|g' \ + -e 's|@''HAVE_ATANF''@|$(HAVE_ATANF)|g' \ + -e 's|@''HAVE_ATANL''@|$(HAVE_ATANL)|g' \ + -e 's|@''HAVE_ATAN2F''@|$(HAVE_ATAN2F)|g' \ + -e 's|@''HAVE_CBRT''@|$(HAVE_CBRT)|g' \ + -e 's|@''HAVE_CBRTF''@|$(HAVE_CBRTF)|g' \ + -e 's|@''HAVE_CBRTL''@|$(HAVE_CBRTL)|g' \ + -e 's|@''HAVE_COPYSIGN''@|$(HAVE_COPYSIGN)|g' \ + -e 's|@''HAVE_COPYSIGNL''@|$(HAVE_COPYSIGNL)|g' \ + -e 's|@''HAVE_COSF''@|$(HAVE_COSF)|g' \ + -e 's|@''HAVE_COSL''@|$(HAVE_COSL)|g' \ + -e 's|@''HAVE_COSHF''@|$(HAVE_COSHF)|g' \ + -e 's|@''HAVE_EXPF''@|$(HAVE_EXPF)|g' \ + -e 's|@''HAVE_EXPL''@|$(HAVE_EXPL)|g' \ + -e 's|@''HAVE_EXPM1''@|$(HAVE_EXPM1)|g' \ + -e 's|@''HAVE_EXPM1F''@|$(HAVE_EXPM1F)|g' \ + -e 's|@''HAVE_FABSF''@|$(HAVE_FABSF)|g' \ + -e 's|@''HAVE_FABSL''@|$(HAVE_FABSL)|g' \ + -e 's|@''HAVE_FMA''@|$(HAVE_FMA)|g' \ + -e 's|@''HAVE_FMAF''@|$(HAVE_FMAF)|g' \ + -e 's|@''HAVE_FMAL''@|$(HAVE_FMAL)|g' \ + -e 's|@''HAVE_FMODF''@|$(HAVE_FMODF)|g' \ + -e 's|@''HAVE_FMODL''@|$(HAVE_FMODL)|g' \ + -e 's|@''HAVE_FREXPF''@|$(HAVE_FREXPF)|g' \ + -e 's|@''HAVE_HYPOTF''@|$(HAVE_HYPOTF)|g' \ + -e 's|@''HAVE_HYPOTL''@|$(HAVE_HYPOTL)|g' \ + -e 's|@''HAVE_ILOGB''@|$(HAVE_ILOGB)|g' \ + -e 's|@''HAVE_ILOGBF''@|$(HAVE_ILOGBF)|g' \ + -e 's|@''HAVE_ILOGBL''@|$(HAVE_ILOGBL)|g' \ + -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \ + -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \ + -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \ + -e 's|@''HAVE_LDEXPF''@|$(HAVE_LDEXPF)|g' \ + -e 's|@''HAVE_LOGF''@|$(HAVE_LOGF)|g' \ + -e 's|@''HAVE_LOGL''@|$(HAVE_LOGL)|g' \ + -e 's|@''HAVE_LOG10F''@|$(HAVE_LOG10F)|g' \ + -e 's|@''HAVE_LOG10L''@|$(HAVE_LOG10L)|g' \ + -e 's|@''HAVE_LOG1P''@|$(HAVE_LOG1P)|g' \ + -e 's|@''HAVE_LOG1PF''@|$(HAVE_LOG1PF)|g' \ + -e 's|@''HAVE_LOG1PL''@|$(HAVE_LOG1PL)|g' \ + -e 's|@''HAVE_LOGBF''@|$(HAVE_LOGBF)|g' \ + -e 's|@''HAVE_LOGBL''@|$(HAVE_LOGBL)|g' \ + -e 's|@''HAVE_MODFF''@|$(HAVE_MODFF)|g' \ + -e 's|@''HAVE_MODFL''@|$(HAVE_MODFL)|g' \ + -e 's|@''HAVE_POWF''@|$(HAVE_POWF)|g' \ + -e 's|@''HAVE_REMAINDER''@|$(HAVE_REMAINDER)|g' \ + -e 's|@''HAVE_REMAINDERF''@|$(HAVE_REMAINDERF)|g' \ + -e 's|@''HAVE_RINT''@|$(HAVE_RINT)|g' \ + -e 's|@''HAVE_RINTL''@|$(HAVE_RINTL)|g' \ + -e 's|@''HAVE_SINF''@|$(HAVE_SINF)|g' \ + -e 's|@''HAVE_SINL''@|$(HAVE_SINL)|g' \ + -e 's|@''HAVE_SINHF''@|$(HAVE_SINHF)|g' \ + -e 's|@''HAVE_SQRTF''@|$(HAVE_SQRTF)|g' \ + -e 's|@''HAVE_SQRTL''@|$(HAVE_SQRTL)|g' \ + -e 's|@''HAVE_TANF''@|$(HAVE_TANF)|g' \ + -e 's|@''HAVE_TANL''@|$(HAVE_TANL)|g' \ + -e 's|@''HAVE_TANHF''@|$(HAVE_TANHF)|g' \ + -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \ + -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \ + -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \ + -e 's|@''HAVE_DECL_CBRTF''@|$(HAVE_DECL_CBRTF)|g' \ + -e 's|@''HAVE_DECL_CBRTL''@|$(HAVE_DECL_CBRTL)|g' \ + -e 's|@''HAVE_DECL_CEILF''@|$(HAVE_DECL_CEILF)|g' \ + -e 's|@''HAVE_DECL_CEILL''@|$(HAVE_DECL_CEILL)|g' \ + -e 's|@''HAVE_DECL_COPYSIGNF''@|$(HAVE_DECL_COPYSIGNF)|g' \ + -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \ + -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \ + -e 's|@''HAVE_DECL_EXP2''@|$(HAVE_DECL_EXP2)|g' \ + -e 's|@''HAVE_DECL_EXP2F''@|$(HAVE_DECL_EXP2F)|g' \ + -e 's|@''HAVE_DECL_EXP2L''@|$(HAVE_DECL_EXP2L)|g' \ + -e 's|@''HAVE_DECL_EXPM1L''@|$(HAVE_DECL_EXPM1L)|g' \ + -e 's|@''HAVE_DECL_FLOORF''@|$(HAVE_DECL_FLOORF)|g' \ + -e 's|@''HAVE_DECL_FLOORL''@|$(HAVE_DECL_FLOORL)|g' \ + -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \ + -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \ + -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \ + -e 's|@''HAVE_DECL_LOG10L''@|$(HAVE_DECL_LOG10L)|g' \ + -e 's|@''HAVE_DECL_LOG2''@|$(HAVE_DECL_LOG2)|g' \ + -e 's|@''HAVE_DECL_LOG2F''@|$(HAVE_DECL_LOG2F)|g' \ + -e 's|@''HAVE_DECL_LOG2L''@|$(HAVE_DECL_LOG2L)|g' \ + -e 's|@''HAVE_DECL_LOGB''@|$(HAVE_DECL_LOGB)|g' \ + -e 's|@''HAVE_DECL_REMAINDER''@|$(HAVE_DECL_REMAINDER)|g' \ + -e 's|@''HAVE_DECL_REMAINDERL''@|$(HAVE_DECL_REMAINDERL)|g' \ + -e 's|@''HAVE_DECL_RINTF''@|$(HAVE_DECL_RINTF)|g' \ + -e 's|@''HAVE_DECL_ROUND''@|$(HAVE_DECL_ROUND)|g' \ + -e 's|@''HAVE_DECL_ROUNDF''@|$(HAVE_DECL_ROUNDF)|g' \ + -e 's|@''HAVE_DECL_ROUNDL''@|$(HAVE_DECL_ROUNDL)|g' \ + -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \ + -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \ + -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \ + -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \ + -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ + -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \ + | \ + sed -e 's|@''REPLACE_ACOSF''@|$(REPLACE_ACOSF)|g' \ + -e 's|@''REPLACE_ASINF''@|$(REPLACE_ASINF)|g' \ + -e 's|@''REPLACE_ATANF''@|$(REPLACE_ATANF)|g' \ + -e 's|@''REPLACE_ATAN2F''@|$(REPLACE_ATAN2F)|g' \ + -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \ + -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \ + -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \ + -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ + -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ + -e 's|@''REPLACE_COSF''@|$(REPLACE_COSF)|g' \ + -e 's|@''REPLACE_COSHF''@|$(REPLACE_COSHF)|g' \ + -e 's|@''REPLACE_EXPF''@|$(REPLACE_EXPF)|g' \ + -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \ + -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \ + -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \ + -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \ + -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \ + -e 's|@''REPLACE_FLOOR''@|$(REPLACE_FLOOR)|g' \ + -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \ + -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \ + -e 's|@''REPLACE_FMA''@|$(REPLACE_FMA)|g' \ + -e 's|@''REPLACE_FMAF''@|$(REPLACE_FMAF)|g' \ + -e 's|@''REPLACE_FMAL''@|$(REPLACE_FMAL)|g' \ + -e 's|@''REPLACE_FMOD''@|$(REPLACE_FMOD)|g' \ + -e 's|@''REPLACE_FMODF''@|$(REPLACE_FMODF)|g' \ + -e 's|@''REPLACE_FMODL''@|$(REPLACE_FMODL)|g' \ + -e 's|@''REPLACE_FREXPF''@|$(REPLACE_FREXPF)|g' \ + -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \ + -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \ + -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \ + -e 's|@''REPLACE_HYPOT''@|$(REPLACE_HYPOT)|g' \ + -e 's|@''REPLACE_HYPOTF''@|$(REPLACE_HYPOTF)|g' \ + -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \ + -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \ + -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \ + -e 's|@''REPLACE_ILOGBL''@|$(REPLACE_ILOGBL)|g' \ + -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ + -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ + -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ + -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ + -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \ + -e 's|@''REPLACE_LOG''@|$(REPLACE_LOG)|g' \ + -e 's|@''REPLACE_LOGF''@|$(REPLACE_LOGF)|g' \ + -e 's|@''REPLACE_LOGL''@|$(REPLACE_LOGL)|g' \ + -e 's|@''REPLACE_LOG10''@|$(REPLACE_LOG10)|g' \ + -e 's|@''REPLACE_LOG10F''@|$(REPLACE_LOG10F)|g' \ + -e 's|@''REPLACE_LOG10L''@|$(REPLACE_LOG10L)|g' \ + -e 's|@''REPLACE_LOG1P''@|$(REPLACE_LOG1P)|g' \ + -e 's|@''REPLACE_LOG1PF''@|$(REPLACE_LOG1PF)|g' \ + -e 's|@''REPLACE_LOG1PL''@|$(REPLACE_LOG1PL)|g' \ + -e 's|@''REPLACE_LOG2''@|$(REPLACE_LOG2)|g' \ + -e 's|@''REPLACE_LOG2F''@|$(REPLACE_LOG2F)|g' \ + -e 's|@''REPLACE_LOG2L''@|$(REPLACE_LOG2L)|g' \ + -e 's|@''REPLACE_LOGB''@|$(REPLACE_LOGB)|g' \ + -e 's|@''REPLACE_LOGBF''@|$(REPLACE_LOGBF)|g' \ + -e 's|@''REPLACE_LOGBL''@|$(REPLACE_LOGBL)|g' \ + -e 's|@''REPLACE_MODF''@|$(REPLACE_MODF)|g' \ + -e 's|@''REPLACE_MODFF''@|$(REPLACE_MODFF)|g' \ + -e 's|@''REPLACE_MODFL''@|$(REPLACE_MODFL)|g' \ + -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \ + -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \ + -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \ + -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \ + -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ + -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ + -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ + -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ + -e 's|@''REPLACE_SIGNBIT_USING_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|g' \ + -e 's|@''REPLACE_SINF''@|$(REPLACE_SINF)|g' \ + -e 's|@''REPLACE_SINHF''@|$(REPLACE_SINHF)|g' \ + -e 's|@''REPLACE_SQRTF''@|$(REPLACE_SQRTF)|g' \ + -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \ + -e 's|@''REPLACE_TANF''@|$(REPLACE_TANF)|g' \ + -e 's|@''REPLACE_TANHF''@|$(REPLACE_TANHF)|g' \ + -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \ + -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \ + -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += math.h math.h-t + +EXTRA_DIST += math.in.h + +## end gnulib module math + +## begin gnulib module mbrlen + + +EXTRA_DIST += mbrlen.c + +EXTRA_librecutils_la_SOURCES += mbrlen.c + +## end gnulib module mbrlen + +## begin gnulib module mbrtowc + + +EXTRA_DIST += mbrtowc.c + +EXTRA_librecutils_la_SOURCES += mbrtowc.c + +## end gnulib module mbrtowc + +## begin gnulib module mbsinit + + +EXTRA_DIST += mbsinit.c + +EXTRA_librecutils_la_SOURCES += mbsinit.c + +## end gnulib module mbsinit + +## begin gnulib module mbtowc + + +EXTRA_DIST += mbtowc-impl.h mbtowc.c + +EXTRA_librecutils_la_SOURCES += mbtowc.c + +## end gnulib module mbtowc + +## begin gnulib module memchr + + +EXTRA_DIST += memchr.c memchr.valgrind + +EXTRA_librecutils_la_SOURCES += memchr.c + +## end gnulib module memchr + +## begin gnulib module minmax + +librecutils_la_SOURCES += minmax.h + +## end gnulib module minmax + +## begin gnulib module mkdir + + +EXTRA_DIST += mkdir.c + +EXTRA_librecutils_la_SOURCES += mkdir.c + +## end gnulib module mkdir + +## begin gnulib module mkostemp + + +EXTRA_DIST += mkostemp.c + +EXTRA_librecutils_la_SOURCES += mkostemp.c + +## end gnulib module mkostemp + +## begin gnulib module mkstemp + + +EXTRA_DIST += mkstemp.c + +EXTRA_librecutils_la_SOURCES += mkstemp.c + +## end gnulib module mkstemp + +## begin gnulib module mktime + + +EXTRA_DIST += mktime-internal.h mktime.c + +EXTRA_librecutils_la_SOURCES += mktime.c + +## end gnulib module mktime + +## begin gnulib module mktime-internal + + +EXTRA_DIST += mktime-internal.h mktime.c + +EXTRA_librecutils_la_SOURCES += mktime.c + +## end gnulib module mktime-internal + +## begin gnulib module msvc-inval + + +EXTRA_DIST += msvc-inval.c msvc-inval.h + +EXTRA_librecutils_la_SOURCES += msvc-inval.c + +## end gnulib module msvc-inval + +## begin gnulib module msvc-nothrow + + +EXTRA_DIST += msvc-nothrow.c msvc-nothrow.h + +EXTRA_librecutils_la_SOURCES += msvc-nothrow.c + +## end gnulib module msvc-nothrow + +## begin gnulib module nl_langinfo + + +EXTRA_DIST += nl_langinfo.c + +EXTRA_librecutils_la_SOURCES += nl_langinfo.c + +## end gnulib module nl_langinfo + +## begin gnulib module nstrftime + +librecutils_la_SOURCES += nstrftime.c + +EXTRA_DIST += strftime.h + +## end gnulib module nstrftime + +## begin gnulib module obstack + + +EXTRA_DIST += obstack.c obstack.h + +EXTRA_librecutils_la_SOURCES += obstack.c + +## end gnulib module obstack + +## begin gnulib module open + + +EXTRA_DIST += open.c + +EXTRA_librecutils_la_SOURCES += open.c + +## end gnulib module open + +## begin gnulib module parse-datetime + +# This rule overrides the Automake generated .y.c rule, to ensure that the +# parse-datetime.c file gets generated in the source directory, not in the +# build directory. +parse-datetime.c: parse-datetime.y + $(AM_V_GEN)$(SHELL) $(YLWRAP) $(srcdir)/parse-datetime.y \ + y.tab.c parse-datetime.c \ + y.tab.h parse-datetime.h \ + y.output parse-datetime.output \ + -- $(YACC) $(YFLAGS) $(AM_YFLAGS) && \ + sed -e 's|".*/parse-datetime.y"|"parse-datetime.y"|' \ + < parse-datetime.c > parse-datetime.c-t && \ + rm -f parse-datetime.c && \ + mv parse-datetime.c-t $(srcdir)/parse-datetime.c +librecutils_la_SOURCES += parse-datetime.y +BUILT_SOURCES += parse-datetime.c +MOSTLYCLEANFILES += parse-datetime.c-t +MAINTAINERCLEANFILES += parse-datetime.c +EXTRA_DIST += parse-datetime.c + +EXTRA_DIST += parse-datetime.h + +## end gnulib module parse-datetime + +## begin gnulib module pathmax + + +EXTRA_DIST += pathmax.h + +## end gnulib module pathmax + +## begin gnulib module posix_spawn-internal + + +EXTRA_DIST += spawn_int.h spawni.c + +EXTRA_librecutils_la_SOURCES += spawni.c + +## end gnulib module posix_spawn-internal + +## begin gnulib module posix_spawn_file_actions_addopen + + +EXTRA_DIST += spawn_faction_addopen.c spawn_int.h + +EXTRA_librecutils_la_SOURCES += spawn_faction_addopen.c + +## end gnulib module posix_spawn_file_actions_addopen + +## begin gnulib module posix_spawn_file_actions_destroy + + +EXTRA_DIST += spawn_faction_destroy.c + +EXTRA_librecutils_la_SOURCES += spawn_faction_destroy.c + +## end gnulib module posix_spawn_file_actions_destroy + +## begin gnulib module posix_spawn_file_actions_init + + +EXTRA_DIST += spawn_faction_init.c spawn_int.h + +EXTRA_librecutils_la_SOURCES += spawn_faction_init.c + +## end gnulib module posix_spawn_file_actions_init + +## begin gnulib module posix_spawnattr_destroy + + +EXTRA_DIST += spawnattr_destroy.c + +EXTRA_librecutils_la_SOURCES += spawnattr_destroy.c + +## end gnulib module posix_spawnattr_destroy + +## begin gnulib module posix_spawnattr_init + + +EXTRA_DIST += spawnattr_init.c + +EXTRA_librecutils_la_SOURCES += spawnattr_init.c + +## end gnulib module posix_spawnattr_init + +## begin gnulib module posix_spawnattr_setflags + + +EXTRA_DIST += spawnattr_setflags.c + +EXTRA_librecutils_la_SOURCES += spawnattr_setflags.c + +## end gnulib module posix_spawnattr_setflags + +## begin gnulib module posix_spawnattr_setsigmask + + +EXTRA_DIST += spawnattr_setsigmask.c + +EXTRA_librecutils_la_SOURCES += spawnattr_setsigmask.c + +## end gnulib module posix_spawnattr_setsigmask + +## begin gnulib module posix_spawnp + + +EXTRA_DIST += spawnp.c + +EXTRA_librecutils_la_SOURCES += spawnp.c + +## end gnulib module posix_spawnp + +## begin gnulib module printf-frexp + +librecutils_la_SOURCES += printf-frexp.c + +EXTRA_DIST += printf-frexp.h + +## end gnulib module printf-frexp + +## begin gnulib module printf-frexpl + +librecutils_la_SOURCES += printf-frexpl.c + +EXTRA_DIST += printf-frexp.c printf-frexpl.h + +EXTRA_librecutils_la_SOURCES += printf-frexp.c + +## end gnulib module printf-frexpl + +## begin gnulib module printf-posix + + +EXTRA_DIST += printf.c + +EXTRA_librecutils_la_SOURCES += printf.c + +## end gnulib module printf-posix + +## begin gnulib module progname + +librecutils_la_SOURCES += progname.h progname.c + +## end gnulib module progname + +## begin gnulib module qcopy-acl + +librecutils_la_SOURCES += qcopy-acl.c + +## end gnulib module qcopy-acl + +## begin gnulib module qset-acl + +librecutils_la_SOURCES += qset-acl.c + +## end gnulib module qset-acl + +## begin gnulib module quote + + +EXTRA_DIST += quote.h + +## end gnulib module quote + +## begin gnulib module quotearg + +librecutils_la_SOURCES += quotearg.c + +EXTRA_DIST += quote.h quotearg.h + +## end gnulib module quotearg + +## begin gnulib module raise + + +EXTRA_DIST += raise.c + +EXTRA_librecutils_la_SOURCES += raise.c + +## end gnulib module raise + +## begin gnulib module random_r + + +EXTRA_DIST += random_r.c + +EXTRA_librecutils_la_SOURCES += random_r.c + +## end gnulib module random_r + +## begin gnulib module rawmemchr + + +EXTRA_DIST += rawmemchr.c rawmemchr.valgrind + +EXTRA_librecutils_la_SOURCES += rawmemchr.c + +## end gnulib module rawmemchr + +## begin gnulib module read-file + +librecutils_la_SOURCES += read-file.c + +EXTRA_DIST += read-file.h + +## end gnulib module read-file + +## begin gnulib module readline + + +EXTRA_DIST += readline.c readline.h + +EXTRA_librecutils_la_SOURCES += readline.c + +## end gnulib module readline + +## begin gnulib module readlink + + +EXTRA_DIST += readlink.c + +EXTRA_librecutils_la_SOURCES += readlink.c + +## end gnulib module readlink + +## begin gnulib module realloc-posix + + +EXTRA_DIST += realloc.c + +EXTRA_librecutils_la_SOURCES += realloc.c + +## end gnulib module realloc-posix + +## begin gnulib module regex + + +EXTRA_DIST += regcomp.c regex.c regex.h regex_internal.c regex_internal.h regexec.c + +EXTRA_librecutils_la_SOURCES += regcomp.c regex.c regex_internal.c regexec.c + +## end gnulib module regex + +## begin gnulib module rename + + +EXTRA_DIST += rename.c + +EXTRA_librecutils_la_SOURCES += rename.c + +## end gnulib module rename + +## begin gnulib module rmdir + + +EXTRA_DIST += rmdir.c + +EXTRA_librecutils_la_SOURCES += rmdir.c + +## end gnulib module rmdir + +## begin gnulib module root-uid + + +EXTRA_DIST += root-uid.h + +## end gnulib module root-uid + +## begin gnulib module same-inode + + +EXTRA_DIST += same-inode.h + +## end gnulib module same-inode + +## begin gnulib module sched + +BUILT_SOURCES += $(SCHED_H) + +# We need the following in order to create a replacement for <sched.h> when +# the system doesn't have one. +if GL_GENERATE_SCHED_H +sched.h: sched.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_SCHED_H''@|$(HAVE_SCHED_H)|g' \ + -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SCHED_H''@|$(NEXT_SCHED_H)|g' \ + -e 's|@''HAVE_STRUCT_SCHED_PARAM''@|$(HAVE_STRUCT_SCHED_PARAM)|g' \ + < $(srcdir)/sched.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +sched.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += sched.h sched.h-t + +EXTRA_DIST += sched.in.h + +## end gnulib module sched + +## begin gnulib module secure_getenv + + +EXTRA_DIST += secure_getenv.c + +EXTRA_librecutils_la_SOURCES += secure_getenv.c + +## end gnulib module secure_getenv + +## begin gnulib module selinux-h + +librecutils_la_SOURCES += se-context.in.h se-selinux.in.h se-context.c se-selinux.c + +BUILT_SOURCES += selinux/selinux.h +selinux/selinux.h: se-selinux.in.h $(top_builddir)/config.status $(UNUSED_PARAMETER_H) + $(AM_V_at)$(MKDIR_P) selinux + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SELINUX_SELINUX_H''@|$(NEXT_SELINUX_SELINUX_H)|g' \ + -e '/definition of _GL_UNUSED_PARAMETER/r $(UNUSED_PARAMETER_H)' \ + < $(srcdir)/se-selinux.in.h; \ + } > $@-t && \ + chmod a-x $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += selinux/selinux.h selinux/selinux.h-t + +BUILT_SOURCES += $(SELINUX_CONTEXT_H) +if GL_GENERATE_SELINUX_CONTEXT_H +selinux/context.h: se-context.in.h $(top_builddir)/config.status $(UNUSED_PARAMETER_H) + $(AM_V_at)$(MKDIR_P) selinux + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e '/definition of _GL_UNUSED_PARAMETER/r $(UNUSED_PARAMETER_H)' \ + < $(srcdir)/se-context.in.h; \ + } > $@-t && \ + chmod a-x $@-t && \ + mv $@-t $@ +else +selinux/context.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += selinux/context.h selinux/context.h-t +MOSTLYCLEANDIRS += selinux + +EXTRA_DIST += getfilecon.c + +EXTRA_librecutils_la_SOURCES += getfilecon.c + +## end gnulib module selinux-h + +## begin gnulib module setenv + + +EXTRA_DIST += setenv.c + +EXTRA_librecutils_la_SOURCES += setenv.c + +## end gnulib module setenv + +## begin gnulib module sigaction + +librecutils_la_SOURCES += sig-handler.c + +EXTRA_DIST += sig-handler.h sigaction.c + +EXTRA_librecutils_la_SOURCES += sigaction.c + +## end gnulib module sigaction + +## begin gnulib module signal-h + +BUILT_SOURCES += signal.h + +# We need the following in order to create <signal.h> when the system +# doesn't have a complete one. +signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \ + -e 's/@''GNULIB_PTHREAD_SIGMASK''@/$(GNULIB_PTHREAD_SIGMASK)/g' \ + -e 's/@''GNULIB_RAISE''@/$(GNULIB_RAISE)/g' \ + -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GNULIB_SIGNAL_H_SIGPIPE)/g' \ + -e 's/@''GNULIB_SIGPROCMASK''@/$(GNULIB_SIGPROCMASK)/g' \ + -e 's/@''GNULIB_SIGACTION''@/$(GNULIB_SIGACTION)/g' \ + -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \ + -e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \ + -e 's|@''HAVE_RAISE''@|$(HAVE_RAISE)|g' \ + -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \ + -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \ + -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \ + -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \ + -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \ + -e 's|@''HAVE_SIGHANDLER_T''@|$(HAVE_SIGHANDLER_T)|g' \ + -e 's|@''REPLACE_PTHREAD_SIGMASK''@|$(REPLACE_PTHREAD_SIGMASK)|g' \ + -e 's|@''REPLACE_RAISE''@|$(REPLACE_RAISE)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/signal.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += signal.h signal.h-t + +EXTRA_DIST += signal.in.h + +## end gnulib module signal-h + +## begin gnulib module signbit + + +EXTRA_DIST += float+.h signbitd.c signbitf.c signbitl.c + +EXTRA_librecutils_la_SOURCES += signbitd.c signbitf.c signbitl.c + +## end gnulib module signbit + +## begin gnulib module sigprocmask + + +EXTRA_DIST += sigprocmask.c + +EXTRA_librecutils_la_SOURCES += sigprocmask.c + +## end gnulib module sigprocmask + +## begin gnulib module size_max + +librecutils_la_SOURCES += size_max.h + +## end gnulib module size_max + +## begin gnulib module snippet/_Noreturn + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. + +_NORETURN_H=$(srcdir)/_Noreturn.h + +EXTRA_DIST += _Noreturn.h + +## end gnulib module snippet/_Noreturn + +## begin gnulib module snippet/arg-nonnull + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. + +ARG_NONNULL_H=$(srcdir)/arg-nonnull.h + +EXTRA_DIST += arg-nonnull.h + +## end gnulib module snippet/arg-nonnull + +## begin gnulib module snippet/c++defs + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. + +CXXDEFS_H=$(srcdir)/c++defs.h + +EXTRA_DIST += c++defs.h + +## end gnulib module snippet/c++defs + +## begin gnulib module snippet/unused-parameter + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. + +UNUSED_PARAMETER_H=$(srcdir)/unused-parameter.h + +EXTRA_DIST += unused-parameter.h + +## end gnulib module snippet/unused-parameter + +## begin gnulib module snippet/warn-on-use + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. + +WARN_ON_USE_H=$(srcdir)/warn-on-use.h + +EXTRA_DIST += warn-on-use.h + +## end gnulib module snippet/warn-on-use + +## begin gnulib module spawn + +BUILT_SOURCES += spawn.h + +# We need the following in order to create a replacement for <spawn.h> when +# the system doesn't have one. +spawn.h: spawn.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_SPAWN_H''@|$(HAVE_SPAWN_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SPAWN_H''@|$(NEXT_SPAWN_H)|g' \ + -e 's/@''GNULIB_POSIX_SPAWN''@/$(GNULIB_POSIX_SPAWN)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNP''@/$(GNULIB_POSIX_SPAWNP)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_INIT''@/$(GNULIB_POSIX_SPAWNATTR_INIT)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETFLAGS''@/$(GNULIB_POSIX_SPAWNATTR_GETFLAGS)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETFLAGS''@/$(GNULIB_POSIX_SPAWNATTR_SETFLAGS)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETPGROUP''@/$(GNULIB_POSIX_SPAWNATTR_GETPGROUP)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETPGROUP''@/$(GNULIB_POSIX_SPAWNATTR_SETPGROUP)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM''@/$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM''@/$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY''@/$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY''@/$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT''@/$(GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT''@/$(GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSIGMASK''@/$(GNULIB_POSIX_SPAWNATTR_GETSIGMASK)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSIGMASK''@/$(GNULIB_POSIX_SPAWNATTR_SETSIGMASK)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_DESTROY''@/$(GNULIB_POSIX_SPAWNATTR_DESTROY)/g' \ + -e 's|@''HAVE_POSIX_SPAWN''@|$(HAVE_POSIX_SPAWN)|g' \ + -e 's|@''HAVE_POSIX_SPAWNATTR_T''@|$(HAVE_POSIX_SPAWNATTR_T)|g' \ + -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_T''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_T)|g' \ + -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN''@|$(REPLACE_POSIX_SPAWN)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/spawn.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += spawn.h spawn.h-t + +EXTRA_DIST += spawn.in.h + +## end gnulib module spawn + +## begin gnulib module stat + + +EXTRA_DIST += stat-w32.c stat-w32.h stat.c + +EXTRA_librecutils_la_SOURCES += stat-w32.c stat.c + +## end gnulib module stat + +## begin gnulib module stat-macros + + +EXTRA_DIST += stat-macros.h + +## end gnulib module stat-macros + +## begin gnulib module stat-time + +librecutils_la_SOURCES += stat-time.c + +EXTRA_DIST += stat-time.h + +## end gnulib module stat-time + +## begin gnulib module stdarg + +BUILT_SOURCES += $(STDARG_H) + +# We need the following in order to create <stdarg.h> when the system +# doesn't have one that works with the given compiler. +if GL_GENERATE_STDARG_H +stdarg.h: stdarg.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ + < $(srcdir)/stdarg.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +stdarg.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += stdarg.h stdarg.h-t + +EXTRA_DIST += stdarg.in.h + +## end gnulib module stdarg + +## begin gnulib module stdbool + +BUILT_SOURCES += $(STDBOOL_H) + +# We need the following in order to create <stdbool.h> when the system +# doesn't have one that works. +if GL_GENERATE_STDBOOL_H +stdbool.h: stdbool.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +stdbool.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += stdbool.h stdbool.h-t + +EXTRA_DIST += stdbool.in.h + +## end gnulib module stdbool + +## begin gnulib module stddef + +BUILT_SOURCES += $(STDDEF_H) + +# We need the following in order to create <stddef.h> when the system +# doesn't have one that works with the given compiler. +if GL_GENERATE_STDDEF_H +stddef.h: stddef.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ + -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ + -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ + -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ + < $(srcdir)/stddef.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +stddef.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += stddef.h stddef.h-t + +EXTRA_DIST += stddef.in.h + +## end gnulib module stddef + +## begin gnulib module stdint + +BUILT_SOURCES += $(STDINT_H) + +# We need the following in order to create <stdint.h> when the system +# doesn't have one that works with the given compiler. +if GL_GENERATE_STDINT_H +stdint.h: stdint.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ + -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ + -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ + -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ + -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ + -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ + -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ + -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ + -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ + -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ + -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ + -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ + -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ + -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ + -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ + -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ + -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ + -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ + < $(srcdir)/stdint.in.h; \ + } > $@-t && \ + mv $@-t $@ +else +stdint.h: $(top_builddir)/config.status + rm -f $@ +endif +MOSTLYCLEANFILES += stdint.h stdint.h-t + +EXTRA_DIST += stdint.in.h + +## end gnulib module stdint + +## begin gnulib module stdio + +BUILT_SOURCES += stdio.h + +# We need the following in order to create <stdio.h> when the system +# doesn't have one that works with the given compiler. +stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ + -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \ + -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \ + -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \ + -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \ + -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \ + -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \ + -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \ + -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \ + -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \ + -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \ + -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \ + -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \ + -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \ + -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \ + -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \ + -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \ + -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \ + -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \ + -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \ + -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \ + -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \ + -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \ + -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \ + -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \ + -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \ + -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \ + -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \ + -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \ + -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \ + -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \ + -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \ + -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \ + -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \ + -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \ + -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \ + -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \ + -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \ + -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \ + -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \ + -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \ + -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \ + -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \ + -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \ + -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \ + -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \ + -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \ + -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \ + -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \ + -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \ + < $(srcdir)/stdio.in.h | \ + sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ + -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ + -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ + -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ + -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ + -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ + -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ + -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ + -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ + -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ + -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ + -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ + -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ + -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ + -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ + -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ + -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ + -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ + -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ + -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ + -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ + -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ + -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ + -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ + -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ + -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ + -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ + -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ + -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ + -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ + -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ + -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ + -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ + -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ + -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ + -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ + -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ + -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ + -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ + -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ + -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ + -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ + -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ + -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ + -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ + -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ + -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ + -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ + -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += stdio.h stdio.h-t + +EXTRA_DIST += stdio.in.h + +## end gnulib module stdio + +## begin gnulib module stdlib + +BUILT_SOURCES += stdlib.h + +# We need the following in order to create <stdlib.h> when the system +# doesn't have one that works with the given compiler. +stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ + $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ + -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \ + -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \ + -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \ + -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \ + -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \ + -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \ + -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \ + -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \ + -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \ + -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \ + -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \ + -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \ + -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \ + -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \ + -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \ + -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \ + -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \ + -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \ + -e 's/@''GNULIB_QSORT_R''@/$(GNULIB_QSORT_R)/g' \ + -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \ + -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ + -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ + -e 's/@''GNULIB_REALLOCARRAY''@/$(GNULIB_REALLOCARRAY)/g' \ + -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ + -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ + -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \ + -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ + -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ + -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \ + -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \ + -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \ + -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \ + -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \ + -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \ + < $(srcdir)/stdlib.in.h | \ + sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ + -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ + -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ + -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ + -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ + -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ + -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ + -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ + -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ + -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ + -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ + -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ + -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ + -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ + -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ + -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ + -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ + -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ + -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ + -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ + -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ + -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ + -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ + -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ + -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ + -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ + -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ + -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ + -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ + -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ + -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ + -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ + -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \ + -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ + -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ + -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ + -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ + -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ + -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ + -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ + -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ + -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ + -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ + -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ + -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ + -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ + -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ + -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _Noreturn/r $(_NORETURN_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += stdlib.h stdlib.h-t + +EXTRA_DIST += stdlib.in.h + +## end gnulib module stdlib + +## begin gnulib module strcase + + +EXTRA_DIST += strcasecmp.c strncasecmp.c + +EXTRA_librecutils_la_SOURCES += strcasecmp.c strncasecmp.c + +## end gnulib module strcase + +## begin gnulib module strcasestr-simple + + +EXTRA_DIST += str-two-way.h strcasestr.c + +EXTRA_librecutils_la_SOURCES += strcasestr.c + +## end gnulib module strcasestr-simple + +## begin gnulib module strchrnul + + +EXTRA_DIST += strchrnul.c strchrnul.valgrind + +EXTRA_librecutils_la_SOURCES += strchrnul.c + +## end gnulib module strchrnul + +## begin gnulib module strdup-posix + + +EXTRA_DIST += strdup.c + +EXTRA_librecutils_la_SOURCES += strdup.c + +## end gnulib module strdup-posix + +## begin gnulib module streq + + +EXTRA_DIST += streq.h + +## end gnulib module streq + +## begin gnulib module strerror + + +EXTRA_DIST += strerror.c + +EXTRA_librecutils_la_SOURCES += strerror.c + +## end gnulib module strerror + +## begin gnulib module strerror-override + + +EXTRA_DIST += strerror-override.c strerror-override.h + +EXTRA_librecutils_la_SOURCES += strerror-override.c + +## end gnulib module strerror-override + +## begin gnulib module string + +BUILT_SOURCES += string.h + +# We need the following in order to create <string.h> when the system +# doesn't have one that works with the given compiler. +string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ + -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \ + -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ + -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ + -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ + -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ + -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ + -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ + -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ + -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ + -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ + -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ + -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ + -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ + -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ + -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ + -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ + -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ + -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ + -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ + -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ + -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ + -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ + -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ + -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ + -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ + -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ + -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ + -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ + -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ + -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ + -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ + -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ + -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ + -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ + -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ + -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ + -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ + -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ + < $(srcdir)/string.in.h | \ + sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ + -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ + -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ + -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ + -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ + -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ + -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ + -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ + -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ + -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ + -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ + -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ + -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ + -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ + -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ + -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ + -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ + -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ + -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ + -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ + -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ + -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ + -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ + -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ + -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ + -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ + -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ + -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ + -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ + -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ + -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ + -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ + -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ + -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ + -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ + -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ + -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + < $(srcdir)/string.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += string.h string.h-t + +EXTRA_DIST += string.in.h + +## end gnulib module string + +## begin gnulib module strings + +BUILT_SOURCES += strings.h + +# We need the following in order to create <strings.h> when the system +# doesn't have one that works with the given compiler. +strings.h: strings.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_STRINGS_H''@|$(HAVE_STRINGS_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \ + -e 's/@''GNULIB_FFS''@/$(GNULIB_FFS)/g' \ + -e 's|@''HAVE_FFS''@|$(HAVE_FFS)|g' \ + -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \ + -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/strings.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += strings.h strings.h-t + +EXTRA_DIST += strings.in.h + +## end gnulib module strings + +## begin gnulib module strsep + + +EXTRA_DIST += strsep.c + +EXTRA_librecutils_la_SOURCES += strsep.c + +## end gnulib module strsep + +## begin gnulib module strverscmp + + +EXTRA_DIST += strverscmp.c + +EXTRA_librecutils_la_SOURCES += strverscmp.c + +## end gnulib module strverscmp + +## begin gnulib module sys_file + +BUILT_SOURCES += sys/file.h + +# We need the following in order to create <sys/file.h> when the system +# has one that is incomplete. +sys/file.h: sys_file.in.h $(top_builddir)/config.status $(WARN_ON_USE_H) + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's/@''HAVE_SYS_FILE_H''@/$(HAVE_SYS_FILE_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SYS_FILE_H''@|$(NEXT_SYS_FILE_H)|g' \ + -e 's/@''HAVE_FLOCK''@/$(HAVE_FLOCK)/g' \ + -e 's/@''GNULIB_FLOCK''@/$(GNULIB_FLOCK)/g' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/sys_file.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += sys/file.h sys/file.h-t +MOSTLYCLEANDIRS += sys + +EXTRA_DIST += sys_file.in.h + +## end gnulib module sys_file + +## begin gnulib module sys_stat + +BUILT_SOURCES += sys/stat.h + +# We need the following in order to create <sys/stat.h> when the system +# has one that is incomplete. +sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ + -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \ + -e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \ + -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \ + -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \ + -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \ + -e 's/@''GNULIB_FUTIMENS''@/$(GNULIB_FUTIMENS)/g' \ + -e 's/@''GNULIB_LCHMOD''@/$(GNULIB_LCHMOD)/g' \ + -e 's/@''GNULIB_LSTAT''@/$(GNULIB_LSTAT)/g' \ + -e 's/@''GNULIB_MKDIRAT''@/$(GNULIB_MKDIRAT)/g' \ + -e 's/@''GNULIB_MKFIFO''@/$(GNULIB_MKFIFO)/g' \ + -e 's/@''GNULIB_MKFIFOAT''@/$(GNULIB_MKFIFOAT)/g' \ + -e 's/@''GNULIB_MKNOD''@/$(GNULIB_MKNOD)/g' \ + -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \ + -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \ + -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \ + -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GNULIB_OVERRIDES_STRUCT_STAT)/g' \ + -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ + -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ + -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \ + -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ + -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ + -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \ + -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \ + -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \ + -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \ + -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \ + -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \ + -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \ + -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \ + -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \ + -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ + -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ + -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \ + -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \ + -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \ + -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/sys_stat.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t +MOSTLYCLEANDIRS += sys + +EXTRA_DIST += sys_stat.in.h + +## end gnulib module sys_stat + +## begin gnulib module sys_time + +BUILT_SOURCES += sys/time.h + +# We need the following in order to create <sys/time.h> when the system +# doesn't have one that works with the given compiler. +sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ + -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \ + -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ + -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \ + -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \ + -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \ + -e 's/@''REPLACE_STRUCT_TIMEVAL''@/$(REPLACE_STRUCT_TIMEVAL)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/sys_time.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += sys/time.h sys/time.h-t + +EXTRA_DIST += sys_time.in.h + +## end gnulib module sys_time + +## begin gnulib module sys_types + +BUILT_SOURCES += sys/types.h + +# We need the following in order to create <sys/types.h> when the system +# doesn't have one that works with the given compiler. +sys/types.h: sys_types.in.h $(top_builddir)/config.status + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ + -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ + -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ + < $(srcdir)/sys_types.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += sys/types.h sys/types.h-t + +EXTRA_DIST += sys_types.in.h + +## end gnulib module sys_types + +## begin gnulib module sys_wait + +BUILT_SOURCES += sys/wait.h + +# We need the following in order to create <sys/wait.h> when the system +# has one that is incomplete. +sys/wait.h: sys_wait.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \ + -e 's/@''GNULIB_WAITPID''@/$(GNULIB_WAITPID)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/sys_wait.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += sys/wait.h sys/wait.h-t +MOSTLYCLEANDIRS += sys + +EXTRA_DIST += sys_wait.in.h + +## end gnulib module sys_wait + +## begin gnulib module tempname + +librecutils_la_SOURCES += tempname.c + +EXTRA_DIST += tempname.h + +## end gnulib module tempname + +## begin gnulib module threadlib + +librecutils_la_SOURCES += glthread/threadlib.c + +EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath + +## end gnulib module threadlib + +## begin gnulib module time + +BUILT_SOURCES += time.h + +# We need the following in order to create <time.h> when the system +# doesn't have one that works with the given compiler. +time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ + -e 's/@''GNULIB_CTIME''@/$(GNULIB_CTIME)/g' \ + -e 's/@''GNULIB_LOCALTIME''@/$(GNULIB_LOCALTIME)/g' \ + -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \ + -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \ + -e 's/@''GNULIB_STRFTIME''@/$(GNULIB_STRFTIME)/g' \ + -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \ + -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \ + -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \ + -e 's/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \ + -e 's/@''GNULIB_TZSET''@/$(GNULIB_TZSET)/g' \ + -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ + -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ + -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ + -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ + -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ + -e 's|@''HAVE_TZSET''@|$(HAVE_TZSET)|g' \ + -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \ + -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ + -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ + -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ + -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ + -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ + -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ + -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ + -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \ + -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ + -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ + -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ + -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/time.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += time.h time.h-t + +EXTRA_DIST += time.in.h + +## end gnulib module time + +## begin gnulib module time_r + + +EXTRA_DIST += time_r.c + +EXTRA_librecutils_la_SOURCES += time_r.c + +## end gnulib module time_r + +## begin gnulib module time_rz + + +EXTRA_DIST += time-internal.h time_rz.c + +EXTRA_librecutils_la_SOURCES += time_rz.c + +## end gnulib module time_rz + +## begin gnulib module timegm + + +EXTRA_DIST += mktime-internal.h timegm.c + +EXTRA_librecutils_la_SOURCES += timegm.c + +## end gnulib module timegm + +## begin gnulib module timespec + +librecutils_la_SOURCES += timespec.c + +EXTRA_DIST += timespec.h + +## end gnulib module timespec + +## begin gnulib module tmpdir + +librecutils_la_SOURCES += tmpdir.h tmpdir.c + +## end gnulib module tmpdir + +## begin gnulib module tzset + + +EXTRA_DIST += tzset.c + +EXTRA_librecutils_la_SOURCES += tzset.c + +## end gnulib module tzset + +## begin gnulib module unistd + +BUILT_SOURCES += unistd.h +librecutils_la_SOURCES += unistd.c + +# We need the following in order to create an empty placeholder for +# <unistd.h> when the system doesn't have one. +unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ + -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ + -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ + -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ + -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ + -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ + -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ + -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ + -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \ + -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \ + -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \ + -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \ + -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \ + -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \ + -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \ + -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \ + -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ + -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ + -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ + -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ + -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ + -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ + -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ + -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ + -e 's/@''GNULIB_GETPASS''@/$(GNULIB_GETPASS)/g' \ + -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ + -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ + -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \ + -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \ + -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \ + -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \ + -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \ + -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \ + -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \ + -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \ + -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \ + -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \ + -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \ + -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \ + -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \ + -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \ + -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ + -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ + -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ + -e 's/@''GNULIB_TRUNCATE''@/$(GNULIB_TRUNCATE)/g' \ + -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ + -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \ + -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ + -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \ + -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \ + -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \ + -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \ + -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ + < $(srcdir)/unistd.in.h | \ + sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ + -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ + -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ + -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ + -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ + -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ + -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ + -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ + -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ + -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ + -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ + -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ + -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ + -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ + -e 's|@''HAVE_GETPASS''@|$(HAVE_GETPASS)|g' \ + -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ + -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ + -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ + -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ + -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ + -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ + -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ + -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ + -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ + -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ + -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ + -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ + -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ + -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ + -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ + -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ + -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ + -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ + -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ + -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ + -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ + -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ + -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ + -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ + -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ + -e 's|@''HAVE_DECL_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|g' \ + -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ + -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ + -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ + | \ + sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ + -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ + -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ + -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ + -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ + -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ + -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ + -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ + -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ + -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ + -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ + -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ + -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ + -e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \ + -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ + -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ + -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ + -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ + -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ + -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ + -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ + -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ + -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ + -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ + -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ + -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ + -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ + -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ + -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ + -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ + -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ + -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ + -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ + -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ + -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ + -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += unistd.h unistd.h-t + +EXTRA_DIST += unistd.in.h + +## end gnulib module unistd + +## begin gnulib module unlocked-io + + +EXTRA_DIST += unlocked-io.h + +## end gnulib module unlocked-io + +## begin gnulib module unsetenv + + +EXTRA_DIST += unsetenv.c + +EXTRA_librecutils_la_SOURCES += unsetenv.c + +## end gnulib module unsetenv + +## begin gnulib module useless-if-before-free + + +EXTRA_DIST += $(top_srcdir)/build-aux/useless-if-before-free + +## end gnulib module useless-if-before-free + +## begin gnulib module vasnprintf + + +EXTRA_DIST += asnprintf.c float+.h printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h + +EXTRA_librecutils_la_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c + +## end gnulib module vasnprintf + +## begin gnulib module vasprintf + + +EXTRA_DIST += asprintf.c vasprintf.c + +EXTRA_librecutils_la_SOURCES += asprintf.c vasprintf.c + +## end gnulib module vasprintf + +## begin gnulib module vc-list-files + + +EXTRA_DIST += $(top_srcdir)/build-aux/vc-list-files + +## end gnulib module vc-list-files + +## begin gnulib module verify + + +EXTRA_DIST += verify.h + +## end gnulib module verify + +## begin gnulib module version-etc + +librecutils_la_SOURCES += version-etc.h version-etc.c + +## end gnulib module version-etc + +## begin gnulib module version-etc-fsf + +librecutils_la_SOURCES += version-etc-fsf.c + +## end gnulib module version-etc-fsf + +## begin gnulib module vfprintf-posix + + +EXTRA_DIST += vfprintf.c + +EXTRA_librecutils_la_SOURCES += vfprintf.c + +## end gnulib module vfprintf-posix + +## begin gnulib module wait-process + +librecutils_la_SOURCES += wait-process.h wait-process.c + +## end gnulib module wait-process + +## begin gnulib module waitpid + + +EXTRA_DIST += waitpid.c + +EXTRA_librecutils_la_SOURCES += waitpid.c + +## end gnulib module waitpid + +## begin gnulib module wchar + +BUILT_SOURCES += wchar.h + +# We need the following in order to create <wchar.h> when the system +# version does not work standalone. +wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ + -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ + -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ + -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ + -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ + -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \ + -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \ + -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \ + -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \ + -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \ + -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \ + -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \ + -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \ + -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \ + -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \ + -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \ + -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \ + -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \ + -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \ + -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \ + -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \ + -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \ + -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \ + -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \ + -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \ + -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \ + -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \ + -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \ + -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \ + -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \ + -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \ + -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \ + -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \ + -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \ + -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \ + -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \ + -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \ + -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \ + -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \ + -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \ + -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \ + -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \ + -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \ + -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \ + -e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \ + < $(srcdir)/wchar.in.h | \ + sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ + -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ + -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ + -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ + -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ + -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ + -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ + -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ + -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ + -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ + -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ + -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ + -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ + -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ + -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ + -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ + -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ + -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ + -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ + -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ + -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ + -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ + -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ + -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ + -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ + -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ + -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ + -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ + -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ + -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ + -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ + -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ + -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ + -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ + -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ + -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ + -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ + -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ + -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \ + -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ + -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ + | \ + sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ + -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ + -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ + -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ + -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ + -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ + -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ + -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ + -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ + -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ + -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ + -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ + -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ + -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += wchar.h wchar.h-t + +EXTRA_DIST += wchar.in.h + +## end gnulib module wchar + +## begin gnulib module wcrtomb + + +EXTRA_DIST += wcrtomb.c + +EXTRA_librecutils_la_SOURCES += wcrtomb.c + +## end gnulib module wcrtomb + +## begin gnulib module wctob + + +EXTRA_DIST += wctob.c + +EXTRA_librecutils_la_SOURCES += wctob.c + +## end gnulib module wctob + +## begin gnulib module wctomb + + +EXTRA_DIST += wctomb-impl.h wctomb.c + +EXTRA_librecutils_la_SOURCES += wctomb.c + +## end gnulib module wctomb + +## begin gnulib module wctype-h + +BUILT_SOURCES += wctype.h +librecutils_la_SOURCES += wctype-h.c + +# We need the following in order to create <wctype.h> when the system +# doesn't have one that works with the given compiler. +wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ + -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ + -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ + -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \ + -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \ + -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \ + -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \ + -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \ + -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \ + -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ + -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \ + -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \ + -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ + -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \ + -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ + -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/wctype.in.h; \ + } > $@-t && \ + mv $@-t $@ +MOSTLYCLEANFILES += wctype.h wctype.h-t + +EXTRA_DIST += wctype.in.h + +## end gnulib module wctype-h + +## begin gnulib module xalloc + +librecutils_la_SOURCES += xmalloc.c + +EXTRA_DIST += xalloc.h + +## end gnulib module xalloc + +## begin gnulib module xalloc-die + +librecutils_la_SOURCES += xalloc-die.c + +## end gnulib module xalloc-die + +## begin gnulib module xalloc-oversized + + +EXTRA_DIST += xalloc-oversized.h + +## end gnulib module xalloc-oversized + +## begin gnulib module xsize + +librecutils_la_SOURCES += xsize.h xsize.c + +## end gnulib module xsize + + +mostlyclean-local: mostlyclean-generic + @for dir in '' $(MOSTLYCLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + : diff --git a/devspec.en_US/project/recutils/lib/Makefile.in b/devspec.en_US/project/recutils/lib/Makefile.in new file mode 100755 index 0000000..09eea43 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/Makefile.in @@ -0,0 +1,4004 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (C) 2002-2019 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This file is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this file. If not, see <https://www.gnu.org/licenses/>. +# +# As a special exception to the GNU General Public License, +# this file may be distributed as part of a program that +# contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. +# Reproduce by: +# gnulib-tool --import --local-dir=gl \ +# --lib=librecutils \ +# --source-base=lib \ +# --m4-base=m4 \ +# --doc-base=doc \ +# --tests-base=tests \ +# --aux-dir=build-aux \ +# --no-conditional-dependencies \ +# --libtool \ +# --macro-prefix=gl \ +# acl \ +# alloca \ +# announce-gen \ +# array-list \ +# autobuild \ +# base64 \ +# btowc \ +# c-ctype \ +# closeout \ +# crc \ +# euidaccess \ +# execute \ +# extensions \ +# flock \ +# floor \ +# fprintf-posix \ +# fwriting \ +# gendocs \ +# getdelim \ +# getopt-gnu \ +# getpass-gnu \ +# gettext-h \ +# gnupload \ +# list \ +# localcharset \ +# maintainer-makefile \ +# mbrlen \ +# mbrtowc \ +# mbsinit \ +# memchr \ +# minmax \ +# mkostemp \ +# mkstemp \ +# obstack \ +# parse-datetime \ +# pathmax \ +# printf-posix \ +# progname \ +# random_r \ +# read-file \ +# readline \ +# regex \ +# regexprops-generic \ +# rename \ +# selinux-h \ +# signal-h \ +# ssize_t \ +# stat-macros \ +# stdbool \ +# stdint \ +# strcasestr \ +# strerror \ +# strsep \ +# strverscmp \ +# tempname \ +# threadlib \ +# tmpdir \ +# unlocked-io \ +# vasnprintf-posix \ +# vasprintf \ +# vasprintf-posix \ +# verify \ +# version-etc-fsf \ +# wcrtomb \ +# wctob + + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +LTLIBRARIES = $(noinst_LTLIBRARIES) +am__DEPENDENCIES_1 = +am__dirstamp = $(am__leading_dot)dirstamp +am_librecutils_la_OBJECTS = copy-acl.lo set-acl.lo acl-errno-valid.lo \ + acl-internal.lo get-permissions.lo set-permissions.lo \ + gl_array_list.lo base64.lo c-ctype.lo c-strcasecmp.lo \ + c-strncasecmp.lo cloexec.lo close-stream.lo closeout.lo crc.lo \ + dirname-lgpl.lo basename-lgpl.lo stripslash.lo execute.lo \ + exitfail.lo fatal-signal.lo fd-hook.lo getprogname.lo \ + gettime.lo hard-locale.lo gl_list.lo localcharset.lo \ + glthread/lock.lo malloca.lo math.lo nstrftime.lo \ + parse-datetime.lo printf-frexp.lo printf-frexpl.lo progname.lo \ + qcopy-acl.lo qset-acl.lo quotearg.lo read-file.lo \ + se-context.lo se-selinux.lo sig-handler.lo stat-time.lo \ + tempname.lo glthread/threadlib.lo timespec.lo tmpdir.lo \ + unistd.lo version-etc.lo version-etc-fsf.lo wait-process.lo \ + wctype-h.lo xmalloc.lo xalloc-die.lo xsize.lo +librecutils_la_OBJECTS = $(am_librecutils_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +librecutils_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(librecutils_la_LDFLAGS) $(LDFLAGS) -o \ + $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ + -e s/c++$$/h++/ -e s/c$$/h/ +YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) +LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS) +AM_V_YACC = $(am__v_YACC_@AM_V@) +am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@) +am__v_YACC_0 = @echo " YACC " $@; +am__v_YACC_1 = +YLWRAP = $(top_srcdir)/build-aux/ylwrap +SOURCES = $(librecutils_la_SOURCES) $(EXTRA_librecutils_la_SOURCES) +DIST_SOURCES = $(librecutils_la_SOURCES) \ + $(EXTRA_librecutils_la_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(noinst_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/depcomp $(top_srcdir)/build-aux/ylwrap \ + alloca.c parse-datetime.c +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BASH_HEADERS = @BASH_HEADERS@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CA68 = @CA68@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CURLLIBS = @CURLLIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +FLOOR_LIBM = @FLOOR_LIBM@ +GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ACOSF = @GNULIB_ACOSF@ +GNULIB_ACOSL = @GNULIB_ACOSL@ +GNULIB_ASINF = @GNULIB_ASINF@ +GNULIB_ASINL = @GNULIB_ASINL@ +GNULIB_ATAN2F = @GNULIB_ATAN2F@ +GNULIB_ATANF = @GNULIB_ATANF@ +GNULIB_ATANL = @GNULIB_ATANL@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CBRT = @GNULIB_CBRT@ +GNULIB_CBRTF = @GNULIB_CBRTF@ +GNULIB_CBRTL = @GNULIB_CBRTL@ +GNULIB_CEIL = @GNULIB_CEIL@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ +GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ +GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ +GNULIB_COSF = @GNULIB_COSF@ +GNULIB_COSHF = @GNULIB_COSHF@ +GNULIB_COSL = @GNULIB_COSL@ +GNULIB_CTIME = @GNULIB_CTIME@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_EXP2 = @GNULIB_EXP2@ +GNULIB_EXP2F = @GNULIB_EXP2F@ +GNULIB_EXP2L = @GNULIB_EXP2L@ +GNULIB_EXPF = @GNULIB_EXPF@ +GNULIB_EXPL = @GNULIB_EXPL@ +GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ +GNULIB_EXPM1 = @GNULIB_EXPM1@ +GNULIB_EXPM1F = @GNULIB_EXPM1F@ +GNULIB_EXPM1L = @GNULIB_EXPM1L@ +GNULIB_FABSF = @GNULIB_FABSF@ +GNULIB_FABSL = @GNULIB_FABSL@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FCNTL = @GNULIB_FCNTL@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FLOCK = @GNULIB_FLOCK@ +GNULIB_FLOOR = @GNULIB_FLOOR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FMA = @GNULIB_FMA@ +GNULIB_FMAF = @GNULIB_FMAF@ +GNULIB_FMAL = @GNULIB_FMAL@ +GNULIB_FMOD = @GNULIB_FMOD@ +GNULIB_FMODF = @GNULIB_FMODF@ +GNULIB_FMODL = @GNULIB_FMODL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPF = @GNULIB_FREXPF@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSTAT = @GNULIB_FSTAT@ +GNULIB_FSTATAT = @GNULIB_FSTATAT@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETPASS = @GNULIB_GETPASS@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_HYPOT = @GNULIB_HYPOT@ +GNULIB_HYPOTF = @GNULIB_HYPOTF@ +GNULIB_HYPOTL = @GNULIB_HYPOTL@ +GNULIB_ILOGB = @GNULIB_ILOGB@ +GNULIB_ILOGBF = @GNULIB_ILOGBF@ +GNULIB_ILOGBL = @GNULIB_ILOGBL@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPF = @GNULIB_LDEXPF@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LOCALENAME = @GNULIB_LOCALENAME@ +GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ +GNULIB_LOG = @GNULIB_LOG@ +GNULIB_LOG10 = @GNULIB_LOG10@ +GNULIB_LOG10F = @GNULIB_LOG10F@ +GNULIB_LOG10L = @GNULIB_LOG10L@ +GNULIB_LOG1P = @GNULIB_LOG1P@ +GNULIB_LOG1PF = @GNULIB_LOG1PF@ +GNULIB_LOG1PL = @GNULIB_LOG1PL@ +GNULIB_LOG2 = @GNULIB_LOG2@ +GNULIB_LOG2F = @GNULIB_LOG2F@ +GNULIB_LOG2L = @GNULIB_LOG2L@ +GNULIB_LOGB = @GNULIB_LOGB@ +GNULIB_LOGBF = @GNULIB_LOGBF@ +GNULIB_LOGBL = @GNULIB_LOGBL@ +GNULIB_LOGF = @GNULIB_LOGF@ +GNULIB_LOGL = @GNULIB_LOGL@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKFIFO = @GNULIB_MKFIFO@ +GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ +GNULIB_MKNOD = @GNULIB_MKNOD@ +GNULIB_MKNODAT = @GNULIB_MKNODAT@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_MKTIME = @GNULIB_MKTIME@ +GNULIB_MODF = @GNULIB_MODF@ +GNULIB_MODFF = @GNULIB_MODFF@ +GNULIB_MODFL = @GNULIB_MODFL@ +GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ +GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_POWF = @GNULIB_POWF@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_QSORT_R = @GNULIB_QSORT_R@ +GNULIB_RAISE = @GNULIB_RAISE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMAINDER = @GNULIB_REMAINDER@ +GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ +GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RINT = @GNULIB_RINT@ +GNULIB_RINTF = @GNULIB_RINTF@ +GNULIB_RINTL = @GNULIB_RINTL@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SINF = @GNULIB_SINF@ +GNULIB_SINHF = @GNULIB_SINHF@ +GNULIB_SINL = @GNULIB_SINL@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_SQRTF = @GNULIB_SQRTF@ +GNULIB_SQRTL = @GNULIB_SQRTL@ +GNULIB_STAT = @GNULIB_STAT@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRFTIME = @GNULIB_STRFTIME@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRPTIME = @GNULIB_STRPTIME@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TANF = @GNULIB_TANF@ +GNULIB_TANHF = @GNULIB_TANHF@ +GNULIB_TANL = @GNULIB_TANL@ +GNULIB_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_TZSET = @GNULIB_TZSET@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WAITPID = @GNULIB_WAITPID@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +HAVE_ACOSF = @HAVE_ACOSF@ +HAVE_ACOSL = @HAVE_ACOSL@ +HAVE_ASINF = @HAVE_ASINF@ +HAVE_ASINL = @HAVE_ASINL@ +HAVE_ATAN2F = @HAVE_ATAN2F@ +HAVE_ATANF = @HAVE_ATANF@ +HAVE_ATANL = @HAVE_ATANL@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CBRT = @HAVE_CBRT@ +HAVE_CBRTF = @HAVE_CBRTF@ +HAVE_CBRTL = @HAVE_CBRTL@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_COPYSIGN = @HAVE_COPYSIGN@ +HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ +HAVE_COSF = @HAVE_COSF@ +HAVE_COSHF = @HAVE_COSHF@ +HAVE_COSL = @HAVE_COSL@ +HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ +HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ +HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ +HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ +HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ +HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ +HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ +HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ +HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ +HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ +HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ +HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ +HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ +HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ +HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ +HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ +HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ +HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ +HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ +HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_EXPF = @HAVE_EXPF@ +HAVE_EXPL = @HAVE_EXPL@ +HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ +HAVE_EXPM1 = @HAVE_EXPM1@ +HAVE_EXPM1F = @HAVE_EXPM1F@ +HAVE_FABSF = @HAVE_FABSF@ +HAVE_FABSL = @HAVE_FABSL@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FLOCK = @HAVE_FLOCK@ +HAVE_FMA = @HAVE_FMA@ +HAVE_FMAF = @HAVE_FMAF@ +HAVE_FMAL = @HAVE_FMAL@ +HAVE_FMODF = @HAVE_FMODF@ +HAVE_FMODL = @HAVE_FMODL@ +HAVE_FREELOCALE = @HAVE_FREELOCALE@ +HAVE_FREXPF = @HAVE_FREXPF@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSTATAT = @HAVE_FSTATAT@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_FUTIMENS = @HAVE_FUTIMENS@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETPASS = @HAVE_GETPASS@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_HYPOTF = @HAVE_HYPOTF@ +HAVE_HYPOTL = @HAVE_HYPOTL@ +HAVE_ILOGB = @HAVE_ILOGB@ +HAVE_ILOGBF = @HAVE_ILOGBF@ +HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LDEXPF = @HAVE_LDEXPF@ +HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOG10F = @HAVE_LOG10F@ +HAVE_LOG10L = @HAVE_LOG10L@ +HAVE_LOG1P = @HAVE_LOG1P@ +HAVE_LOG1PF = @HAVE_LOG1PF@ +HAVE_LOG1PL = @HAVE_LOG1PL@ +HAVE_LOGBF = @HAVE_LOGBF@ +HAVE_LOGBL = @HAVE_LOGBL@ +HAVE_LOGF = @HAVE_LOGF@ +HAVE_LOGL = @HAVE_LOGL@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDIRAT = @HAVE_MKDIRAT@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKFIFO = @HAVE_MKFIFO@ +HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ +HAVE_MKNOD = @HAVE_MKNOD@ +HAVE_MKNODAT = @HAVE_MKNODAT@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MODFF = @HAVE_MODFF@ +HAVE_MODFL = @HAVE_MODFL@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ +HAVE_POWF = @HAVE_POWF@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_QSORT_R = @HAVE_QSORT_R@ +HAVE_RAISE = @HAVE_RAISE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_REMAINDER = @HAVE_REMAINDER@ +HAVE_REMAINDERF = @HAVE_REMAINDERF@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RINT = @HAVE_RINT@ +HAVE_RINTL = @HAVE_RINTL@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SINF = @HAVE_SINF@ +HAVE_SINHF = @HAVE_SINHF@ +HAVE_SINL = @HAVE_SINL@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_SQRTF = @HAVE_SQRTF@ +HAVE_SQRTL = @HAVE_SQRTL@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRPTIME = @HAVE_STRPTIME@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ +HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TANF = @HAVE_TANF@ +HAVE_TANHF = @HAVE_TANHF@ +HAVE_TANL = @HAVE_TANL@ +HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_TZSET = @HAVE_TZSET@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSFTIME = @HAVE_WCSFTIME@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ +INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBGCRYPT = @LIBGCRYPT@ +LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBREADLINE = @LIBREADLINE@ +LIBS = @LIBS@ +LIBTHREAD = @LIBTHREAD@ +LIBTOOL = @LIBTOOL@ +LIB_ACL = @LIB_ACL@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LIB_EACCESS = @LIB_EACCESS@ +LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ +LIB_SELINUX = @LIB_SELINUX@ +LIMITS_H = @LIMITS_H@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTALLOCA = @LTALLOCA@ +LTLIBGCRYPT = @LTLIBGCRYPT@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBREADLINE = @LTLIBREADLINE@ +LTLIBTHREAD = @LTLIBTHREAD@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MDBLIBS = @MDBLIBS@ +MDB_DATETIME = @MDB_DATETIME@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ +NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LIMITS_H = @NEXT_LIMITS_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_ACOSF = @REPLACE_ACOSF@ +REPLACE_ASINF = @REPLACE_ASINF@ +REPLACE_ATAN2F = @REPLACE_ATAN2F@ +REPLACE_ATANF = @REPLACE_ATANF@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CBRTF = @REPLACE_CBRTF@ +REPLACE_CBRTL = @REPLACE_CBRTL@ +REPLACE_CEIL = @REPLACE_CEIL@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_COSF = @REPLACE_COSF@ +REPLACE_COSHF = @REPLACE_COSHF@ +REPLACE_CTIME = @REPLACE_CTIME@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_EXP2 = @REPLACE_EXP2@ +REPLACE_EXP2L = @REPLACE_EXP2L@ +REPLACE_EXPF = @REPLACE_EXPF@ +REPLACE_EXPM1 = @REPLACE_EXPM1@ +REPLACE_EXPM1F = @REPLACE_EXPM1F@ +REPLACE_FABSL = @REPLACE_FABSL@ +REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOOR = @REPLACE_FLOOR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FMA = @REPLACE_FMA@ +REPLACE_FMAF = @REPLACE_FMAF@ +REPLACE_FMAL = @REPLACE_FMAL@ +REPLACE_FMOD = @REPLACE_FMOD@ +REPLACE_FMODF = @REPLACE_FMODF@ +REPLACE_FMODL = @REPLACE_FMODL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPF = @REPLACE_FREXPF@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FSTAT = @REPLACE_FSTAT@ +REPLACE_FSTATAT = @REPLACE_FSTATAT@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETPASS = @REPLACE_GETPASS@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_GMTIME = @REPLACE_GMTIME@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_HYPOT = @REPLACE_HYPOT@ +REPLACE_HYPOTF = @REPLACE_HYPOTF@ +REPLACE_HYPOTL = @REPLACE_HYPOTL@ +REPLACE_ILOGB = @REPLACE_ILOGB@ +REPLACE_ILOGBF = @REPLACE_ILOGBF@ +REPLACE_ILOGBL = @REPLACE_ILOGBL@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LOG = @REPLACE_LOG@ +REPLACE_LOG10 = @REPLACE_LOG10@ +REPLACE_LOG10F = @REPLACE_LOG10F@ +REPLACE_LOG10L = @REPLACE_LOG10L@ +REPLACE_LOG1P = @REPLACE_LOG1P@ +REPLACE_LOG1PF = @REPLACE_LOG1PF@ +REPLACE_LOG1PL = @REPLACE_LOG1PL@ +REPLACE_LOG2 = @REPLACE_LOG2@ +REPLACE_LOG2F = @REPLACE_LOG2F@ +REPLACE_LOG2L = @REPLACE_LOG2L@ +REPLACE_LOGB = @REPLACE_LOGB@ +REPLACE_LOGBF = @REPLACE_LOGBF@ +REPLACE_LOGBL = @REPLACE_LOGBL@ +REPLACE_LOGF = @REPLACE_LOGF@ +REPLACE_LOGL = @REPLACE_LOGL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKFIFO = @REPLACE_MKFIFO@ +REPLACE_MKNOD = @REPLACE_MKNOD@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_MKTIME = @REPLACE_MKTIME@ +REPLACE_MODF = @REPLACE_MODF@ +REPLACE_MODFF = @REPLACE_MODFF@ +REPLACE_MODFL = @REPLACE_MODFL@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_OPENAT = @REPLACE_OPENAT@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_QSORT_R = @REPLACE_QSORT_R@ +REPLACE_RAISE = @REPLACE_RAISE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_READLINKAT = @REPLACE_READLINKAT@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMAINDER = @REPLACE_REMAINDER@ +REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ +REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SINF = @REPLACE_SINF@ +REPLACE_SINHF = @REPLACE_SINHF@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_SQRTF = @REPLACE_SQRTF@ +REPLACE_SQRTL = @REPLACE_SQRTL@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRFTIME = @REPLACE_STRFTIME@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ +REPLACE_TANF = @REPLACE_TANF@ +REPLACE_TANHF = @REPLACE_TANHF@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TRUNC = @REPLACE_TRUNC@ +REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ +REPLACE_TRUNCF = @REPLACE_TRUNCF@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_TZSET = @REPLACE_TZSET@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SED = @SED@ +SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ +UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +USE_ACL = @USE_ACL@ +USE_NLS = @USE_NLS@ +UUIDLIBS = @UUIDLIBS@ +VERSION = @VERSION@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ +WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ +WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +crypt_support = @crypt_support@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +have_uuid = @have_uuid@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = 1.11 gnits subdir-objects +SUBDIRS = +noinst_HEADERS = +noinst_LIBRARIES = +noinst_LTLIBRARIES = librecutils.la +EXTRA_DIST = acl-internal.h acl.h acl_entries.c alignof.h alloca.c \ + alloca.in.h $(top_srcdir)/build-aux/announce-gen btowc.c \ + c-strcaseeq.h canonicalize-lgpl.c cloexec.h close.c \ + close-stream.h closeout.h crc.h dirname.h dosname.h dup2.c \ + errno.in.h error.c error.h euidaccess.c exitfail.h fcntl.c \ + fcntl.in.h fd-hook.h filename.h flexmember.h float.c \ + float.in.h itold.c flock.c floor.c fpending.c fpending.h \ + stdio-impl.h fprintf.c fpucw.h frexp.c frexp.c frexpl.c \ + fseek.c fseeko.c stdio-impl.h fseterr.c fseterr.h stdio-impl.h \ + fstat.c stat-w32.c stat-w32.h ftell.c ftello.c stdio-impl.h \ + fwriting.c fwriting.h stdio-impl.h \ + $(top_srcdir)/build-aux/gendocs.sh getdelim.c getdtablesize.c \ + getgroups.c getline.c getopt-cdefs.in.h getopt-core.h \ + getopt-ext.h getopt-pfx-core.h getopt-pfx-ext.h getopt.c \ + getopt.in.h getopt1.c getopt_int.h getpass.c getpass.h \ + getpass.c getpass.h gettimeofday.c $(top_srcdir)/GNUmakefile \ + $(top_srcdir)/build-aux/gnupload group-member.c hard-locale.h \ + $(top_srcdir)/build-aux/config.rpath intprops.h inttypes.in.h \ + float+.h isnan.c isnand-nolibm.h isnand.c float+.h isnan.c \ + isnanf-nolibm.h isnanf.c float+.h isnan.c isnanl-nolibm.h \ + isnanl.c langinfo.in.h cdefs.h libc-config.h limits.in.h \ + localcharset.h locale.in.h localeconv.c localtime-buffer.c \ + localtime-buffer.h lseek.c lstat.c $(top_srcdir)/maint.mk \ + malloc.c malloca.h math.in.h mbrlen.c mbrtowc.c mbsinit.c \ + mbtowc-impl.h mbtowc.c memchr.c memchr.valgrind mkdir.c \ + mkostemp.c mkstemp.c mktime-internal.h mktime.c \ + mktime-internal.h mktime.c msvc-inval.c msvc-inval.h \ + msvc-nothrow.c msvc-nothrow.h nl_langinfo.c strftime.h \ + obstack.c obstack.h open.c parse-datetime.c parse-datetime.h \ + pathmax.h spawn_int.h spawni.c spawn_faction_addopen.c \ + spawn_int.h spawn_faction_destroy.c spawn_faction_init.c \ + spawn_int.h spawnattr_destroy.c spawnattr_init.c \ + spawnattr_setflags.c spawnattr_setsigmask.c spawnp.c \ + printf-frexp.h printf-frexp.c printf-frexpl.h printf.c quote.h \ + quote.h quotearg.h raise.c random_r.c rawmemchr.c \ + rawmemchr.valgrind read-file.h readline.c readline.h \ + readlink.c realloc.c regcomp.c regex.c regex.h \ + regex_internal.c regex_internal.h regexec.c rename.c rmdir.c \ + root-uid.h same-inode.h sched.in.h secure_getenv.c \ + getfilecon.c setenv.c sig-handler.h sigaction.c signal.in.h \ + float+.h signbitd.c signbitf.c signbitl.c sigprocmask.c \ + _Noreturn.h arg-nonnull.h c++defs.h unused-parameter.h \ + warn-on-use.h spawn.in.h stat-w32.c stat-w32.h stat.c \ + stat-macros.h stat-time.h stdarg.in.h stdbool.in.h stddef.in.h \ + stdint.in.h stdio.in.h stdlib.in.h strcasecmp.c strncasecmp.c \ + str-two-way.h strcasestr.c strchrnul.c strchrnul.valgrind \ + strdup.c streq.h strerror.c strerror-override.c \ + strerror-override.h string.in.h strings.in.h strsep.c \ + strverscmp.c sys_file.in.h sys_stat.in.h sys_time.in.h \ + sys_types.in.h sys_wait.in.h tempname.h \ + $(top_srcdir)/build-aux/config.rpath time.in.h time_r.c \ + time-internal.h time_rz.c mktime-internal.h timegm.c \ + timespec.h tzset.c unistd.in.h unlocked-io.h unsetenv.c \ + $(top_srcdir)/build-aux/useless-if-before-free asnprintf.c \ + float+.h printf-args.c printf-args.h printf-parse.c \ + printf-parse.h vasnprintf.c vasnprintf.h asprintf.c \ + vasprintf.c $(top_srcdir)/build-aux/vc-list-files verify.h \ + vfprintf.c waitpid.c wchar.in.h wcrtomb.c wctob.c \ + wctomb-impl.h wctomb.c wctype.in.h xalloc.h xalloc-oversized.h +BUILT_SOURCES = $(ALLOCA_H) $(ERRNO_H) fcntl.h $(FLOAT_H) $(GETOPT_H) \ + $(GETOPT_CDEFS_H) inttypes.h langinfo.h $(LIMITS_H) locale.h \ + math.h parse-datetime.c $(SCHED_H) selinux/selinux.h \ + $(SELINUX_CONTEXT_H) signal.h spawn.h $(STDARG_H) $(STDBOOL_H) \ + $(STDDEF_H) $(STDINT_H) stdio.h stdlib.h string.h strings.h \ + sys/file.h sys/stat.h sys/time.h sys/types.h sys/wait.h time.h \ + unistd.h wchar.h wctype.h +SUFFIXES = +MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t errno.h \ + errno.h-t fcntl.h fcntl.h-t float.h float.h-t getopt.h \ + getopt.h-t getopt-cdefs.h getopt-cdefs.h-t inttypes.h \ + inttypes.h-t langinfo.h langinfo.h-t limits.h limits.h-t \ + locale.h locale.h-t math.h math.h-t parse-datetime.c-t sched.h \ + sched.h-t selinux/selinux.h selinux/selinux.h-t \ + selinux/context.h selinux/context.h-t signal.h signal.h-t \ + spawn.h spawn.h-t stdarg.h stdarg.h-t stdbool.h stdbool.h-t \ + stddef.h stddef.h-t stdint.h stdint.h-t stdio.h stdio.h-t \ + stdlib.h stdlib.h-t string.h string.h-t strings.h strings.h-t \ + sys/file.h sys/file.h-t sys/stat.h sys/stat.h-t sys/time.h \ + sys/time.h-t sys/types.h sys/types.h-t sys/wait.h sys/wait.h-t \ + time.h time.h-t unistd.h unistd.h-t wchar.h wchar.h-t wctype.h \ + wctype.h-t +MOSTLYCLEANDIRS = selinux sys sys sys +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = parse-datetime.c +# No GNU Make output. +AM_CPPFLAGS = +AM_CFLAGS = +librecutils_la_SOURCES = copy-acl.c set-acl.c acl-errno-valid.c \ + acl-internal.c get-permissions.c set-permissions.c \ + gl_array_list.h gl_array_list.c base64.h base64.c c-ctype.h \ + c-ctype.c c-strcase.h c-strcasecmp.c c-strncasecmp.c cloexec.c \ + close-stream.c closeout.c crc.c dirname-lgpl.c basename-lgpl.c \ + stripslash.c execute.h execute.c w32spawn.h exitfail.c \ + fatal-signal.h fatal-signal.c fd-hook.c getprogname.h \ + getprogname.c gettext.h gettime.c hard-locale.c gl_list.h \ + gl_list.c localcharset.c glthread/lock.h glthread/lock.c \ + malloca.c math.c minmax.h nstrftime.c parse-datetime.y \ + printf-frexp.c printf-frexpl.c progname.h progname.c \ + qcopy-acl.c qset-acl.c quotearg.c read-file.c se-context.in.h \ + se-selinux.in.h se-context.c se-selinux.c sig-handler.c \ + size_max.h stat-time.c tempname.c glthread/threadlib.c \ + timespec.c tmpdir.h tmpdir.c unistd.c version-etc.h \ + version-etc.c version-etc-fsf.c wait-process.h wait-process.c \ + wctype-h.c xmalloc.c xalloc-die.c xsize.h xsize.c +librecutils_la_LIBADD = $(gl_LTLIBOBJS) @LTALLOCA@ +librecutils_la_DEPENDENCIES = $(gl_LTLIBOBJS) @LTALLOCA@ +EXTRA_librecutils_la_SOURCES = acl_entries.c alloca.c btowc.c \ + canonicalize-lgpl.c close.c dup2.c error.c euidaccess.c \ + fcntl.c float.c itold.c flock.c floor.c fpending.c fprintf.c \ + frexp.c frexp.c frexpl.c fseek.c fseeko.c fseterr.c fstat.c \ + stat-w32.c ftell.c ftello.c fwriting.c getdelim.c \ + getdtablesize.c getgroups.c getline.c getopt.c getopt1.c \ + getpass.c getpass.c gettimeofday.c group-member.c isnan.c \ + isnand.c isnan.c isnanf.c isnan.c isnanl.c localeconv.c \ + localtime-buffer.c lseek.c lstat.c malloc.c mbrlen.c mbrtowc.c \ + mbsinit.c mbtowc.c memchr.c mkdir.c mkostemp.c mkstemp.c \ + mktime.c mktime.c msvc-inval.c msvc-nothrow.c nl_langinfo.c \ + obstack.c open.c spawni.c spawn_faction_addopen.c \ + spawn_faction_destroy.c spawn_faction_init.c \ + spawnattr_destroy.c spawnattr_init.c spawnattr_setflags.c \ + spawnattr_setsigmask.c spawnp.c printf-frexp.c printf.c \ + raise.c random_r.c rawmemchr.c readline.c readlink.c realloc.c \ + regcomp.c regex.c regex_internal.c regexec.c rename.c rmdir.c \ + secure_getenv.c getfilecon.c setenv.c sigaction.c signbitd.c \ + signbitf.c signbitl.c sigprocmask.c stat-w32.c stat.c \ + strcasecmp.c strncasecmp.c strcasestr.c strchrnul.c strdup.c \ + strerror.c strerror-override.c strsep.c strverscmp.c time_r.c \ + time_rz.c timegm.c tzset.c unsetenv.c asnprintf.c \ + printf-args.c printf-parse.c vasnprintf.c asprintf.c \ + vasprintf.c vfprintf.c waitpid.c wcrtomb.c wctob.c wctomb.c +librecutils_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(FLOOR_LIBM) \ + $(LIB_ACL) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS) $(LIB_SELINUX) \ + $(LTLIBINTL) $(LTLIBREADLINE) $(LTLIBTHREAD) + +# Use this preprocessor expression to decide whether #include_next works. +# Do not rely on a 'configure'-time test for this, since the expression +# might appear in an installed header, which is used by some other compiler. +HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. +_NORETURN_H = $(srcdir)/_Noreturn.h + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. +ARG_NONNULL_H = $(srcdir)/arg-nonnull.h + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. +CXXDEFS_H = $(srcdir)/c++defs.h + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. +UNUSED_PARAMETER_H = $(srcdir)/unused-parameter.h + +# Because this Makefile snippet defines a variable used by other +# gnulib Makefile snippets, it must be present in all makefiles that +# need it. This is ensured by the applicability 'all' defined above. +WARN_ON_USE_H = $(srcdir)/warn-on-use.h +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj .y +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnits lib/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } +glthread/$(am__dirstamp): + @$(MKDIR_P) glthread + @: > glthread/$(am__dirstamp) +glthread/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) glthread/$(DEPDIR) + @: > glthread/$(DEPDIR)/$(am__dirstamp) +glthread/lock.lo: glthread/$(am__dirstamp) \ + glthread/$(DEPDIR)/$(am__dirstamp) +glthread/threadlib.lo: glthread/$(am__dirstamp) \ + glthread/$(DEPDIR)/$(am__dirstamp) + +librecutils.la: $(librecutils_la_OBJECTS) $(librecutils_la_DEPENDENCIES) $(EXTRA_librecutils_la_DEPENDENCIES) + $(AM_V_CCLD)$(librecutils_la_LINK) $(librecutils_la_OBJECTS) $(librecutils_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f glthread/*.$(OBJEXT) + -rm -f glthread/*.lo + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/alloca.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acl-errno-valid.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acl-internal.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acl_entries.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloca.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asnprintf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asprintf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename-lgpl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btowc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-ctype.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-strcasecmp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-strncasecmp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/canonicalize-lgpl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cloexec.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close-stream.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/closeout.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copy-acl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirname-lgpl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/euidaccess.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/execute.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exitfail.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fatal-signal.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcntl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fd-hook.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/float.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flock.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/floor.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fpending.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fprintf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frexp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frexpl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fseek.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fseeko.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fseterr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstat.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftell.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftello.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fwriting.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get-permissions.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdelim.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdtablesize.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getfilecon.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getgroups.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getline.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpass.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getprogname.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettime.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettimeofday.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_array_list.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_list.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/group-member.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hard-locale.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnan.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnand.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnanf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnanl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/itold.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localcharset.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localeconv.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localtime-buffer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lseek.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lstat.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloca.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/math.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbrlen.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbrtowc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsinit.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbtowc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memchr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkdir.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkostemp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkstemp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mktime.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-inval.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-nothrow.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nl_langinfo.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nstrftime.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obstack.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse-datetime.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-args.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-frexp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-frexpl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-parse.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progname.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qcopy-acl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qset-acl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotearg.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raise.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random_r.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rawmemchr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read-file.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readline.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readlink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/realloc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regcomp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex_internal.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regexec.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rename.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmdir.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/se-context.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/se-selinux.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/secure_getenv.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set-acl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set-permissions.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setenv.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sig-handler.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigaction.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signbitd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signbitf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signbitl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigprocmask.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawn_faction_addopen.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawn_faction_destroy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawn_faction_init.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawnattr_destroy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawnattr_init.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawnattr_setflags.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawnattr_setsigmask.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawni.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawnp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat-time.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat-w32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strcasecmp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strcasestr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strchrnul.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strdup.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror-override.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stripslash.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strncasecmp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strsep.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strverscmp.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tempname.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/time_r.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/time_rz.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timegm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timespec.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tmpdir.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tzset.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unistd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unsetenv.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vasnprintf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vasprintf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version-etc-fsf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version-etc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfprintf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wait-process.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/waitpid.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcrtomb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctob.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctomb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctype-h.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xalloc-die.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsize.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/lock.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/threadlib.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +.y.c: + $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + -rm -rf glthread/.libs glthread/_libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f glthread/$(DEPDIR)/$(am__dirstamp) + -rm -f glthread/$(am__dirstamp) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -rm -f parse-datetime.c + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ + clean-noinstLTLIBRARIES mostlyclean-am + +distclean: distclean-recursive + -rm -rf $(DEPDIR) ./$(DEPDIR) glthread/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-local distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf $(DEPDIR) ./$(DEPDIR) glthread/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool mostlyclean-local + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) all check install install-am \ + install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool \ + clean-noinstLIBRARIES clean-noinstLTLIBRARIES cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-local distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + mostlyclean-local pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am + +.PRECIOUS: Makefile + + +# We need the following in order to create <alloca.h> when the system +# doesn't have one that works with the given compiler. +@GL_GENERATE_ALLOCA_H_TRUE@alloca.h: alloca.in.h $(top_builddir)/config.status +@GL_GENERATE_ALLOCA_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_ALLOCA_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ +@GL_GENERATE_ALLOCA_H_TRUE@ cat $(srcdir)/alloca.in.h; \ +@GL_GENERATE_ALLOCA_H_TRUE@ } > $@-t && \ +@GL_GENERATE_ALLOCA_H_TRUE@ mv -f $@-t $@ +@GL_GENERATE_ALLOCA_H_FALSE@alloca.h: $(top_builddir)/config.status +@GL_GENERATE_ALLOCA_H_FALSE@ rm -f $@ + +# We need the following in order to create <errno.h> when the system +# doesn't have one that is POSIX compliant. +@GL_GENERATE_ERRNO_H_TRUE@errno.h: errno.in.h $(top_builddir)/config.status +@GL_GENERATE_ERRNO_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_ERRNO_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ +@GL_GENERATE_ERRNO_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ +@GL_GENERATE_ERRNO_H_TRUE@ < $(srcdir)/errno.in.h; \ +@GL_GENERATE_ERRNO_H_TRUE@ } > $@-t && \ +@GL_GENERATE_ERRNO_H_TRUE@ mv $@-t $@ +@GL_GENERATE_ERRNO_H_FALSE@errno.h: $(top_builddir)/config.status +@GL_GENERATE_ERRNO_H_FALSE@ rm -f $@ + +# We need the following in order to create <fcntl.h> when the system +# doesn't have one that works with the given compiler. +fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ + -e 's/@''GNULIB_FCNTL''@/$(GNULIB_FCNTL)/g' \ + -e 's/@''GNULIB_NONBLOCKING''@/$(GNULIB_NONBLOCKING)/g' \ + -e 's/@''GNULIB_OPEN''@/$(GNULIB_OPEN)/g' \ + -e 's/@''GNULIB_OPENAT''@/$(GNULIB_OPENAT)/g' \ + -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ + -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ + -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ + -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ + -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/fcntl.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <float.h> when the system +# doesn't have one that works with the given compiler. +@GL_GENERATE_FLOAT_H_TRUE@float.h: float.in.h $(top_builddir)/config.status +@GL_GENERATE_FLOAT_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_FLOAT_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ +@GL_GENERATE_FLOAT_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +@GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +@GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ +@GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ +@GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ +@GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ +@GL_GENERATE_FLOAT_H_TRUE@ < $(srcdir)/float.in.h; \ +@GL_GENERATE_FLOAT_H_TRUE@ } > $@-t && \ +@GL_GENERATE_FLOAT_H_TRUE@ mv $@-t $@ +@GL_GENERATE_FLOAT_H_FALSE@float.h: $(top_builddir)/config.status +@GL_GENERATE_FLOAT_H_FALSE@ rm -f $@ + +# We need the following in order to create <getopt.h> when the system +# doesn't have one that works with the given compiler. +getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + < $(srcdir)/getopt.in.h; \ + } > $@-t && \ + mv -f $@-t $@ + +getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ + < $(srcdir)/getopt-cdefs.in.h; \ + } > $@-t && \ + mv -f $@-t $@ +distclean-local: clean-GNUmakefile +clean-GNUmakefile: + test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile + +# We need the following in order to create <inttypes.h> when the system +# doesn't have one that works with the given compiler. +inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \ + -e 's/@''PRI_MACROS_BROKEN''@/$(PRI_MACROS_BROKEN)/g' \ + -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ + -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ + -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ + -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \ + -e 's/@''GNULIB_IMAXABS''@/$(GNULIB_IMAXABS)/g' \ + -e 's/@''GNULIB_IMAXDIV''@/$(GNULIB_IMAXDIV)/g' \ + -e 's/@''GNULIB_STRTOIMAX''@/$(GNULIB_STRTOIMAX)/g' \ + -e 's/@''GNULIB_STRTOUMAX''@/$(GNULIB_STRTOUMAX)/g' \ + -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \ + -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \ + -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \ + -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \ + -e 's/@''HAVE_IMAXDIV_T''@/$(HAVE_IMAXDIV_T)/g' \ + -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \ + -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/g' \ + -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \ + -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \ + -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \ + -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/inttypes.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create an empty placeholder for +# <langinfo.h> when the system doesn't have one. +langinfo.h: langinfo.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \ + -e 's/@''GNULIB_NL_LANGINFO''@/$(GNULIB_NL_LANGINFO)/g' \ + -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \ + -e 's|@''HAVE_LANGINFO_T_FMT_AMPM''@|$(HAVE_LANGINFO_T_FMT_AMPM)|g' \ + -e 's|@''HAVE_LANGINFO_ALTMON''@|$(HAVE_LANGINFO_ALTMON)|g' \ + -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \ + -e 's|@''HAVE_LANGINFO_YESEXPR''@|$(HAVE_LANGINFO_YESEXPR)|g' \ + -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \ + -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/langinfo.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <limits.h> when the system +# doesn't have one that is compatible with GNU. +@GL_GENERATE_LIMITS_H_TRUE@limits.h: limits.in.h $(top_builddir)/config.status +@GL_GENERATE_LIMITS_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_LIMITS_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ +@GL_GENERATE_LIMITS_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +@GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +@GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ +@GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ +@GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ +@GL_GENERATE_LIMITS_H_TRUE@ < $(srcdir)/limits.in.h; \ +@GL_GENERATE_LIMITS_H_TRUE@ } > $@-t && \ +@GL_GENERATE_LIMITS_H_TRUE@ mv $@-t $@ +@GL_GENERATE_LIMITS_H_FALSE@limits.h: $(top_builddir)/config.status +@GL_GENERATE_LIMITS_H_FALSE@ rm -f $@ + +# We need the following in order to create <locale.h> when the system +# doesn't have one that provides all definitions. +locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ + -e 's/@''GNULIB_LOCALECONV''@/$(GNULIB_LOCALECONV)/g' \ + -e 's/@''GNULIB_SETLOCALE''@/$(GNULIB_SETLOCALE)/g' \ + -e 's/@''GNULIB_DUPLOCALE''@/$(GNULIB_DUPLOCALE)/g' \ + -e 's/@''GNULIB_LOCALENAME''@/$(GNULIB_LOCALENAME)/g' \ + -e 's|@''HAVE_NEWLOCALE''@|$(HAVE_NEWLOCALE)|g' \ + -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \ + -e 's|@''HAVE_FREELOCALE''@|$(HAVE_FREELOCALE)|g' \ + -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ + -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \ + -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \ + -e 's|@''REPLACE_NEWLOCALE''@|$(REPLACE_NEWLOCALE)|g' \ + -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \ + -e 's|@''REPLACE_FREELOCALE''@|$(REPLACE_FREELOCALE)|g' \ + -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/locale.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <math.h> when the system +# doesn't have one that works with the given compiler. +math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \ + -e 's/@''GNULIB_ACOSF''@/$(GNULIB_ACOSF)/g' \ + -e 's/@''GNULIB_ACOSL''@/$(GNULIB_ACOSL)/g' \ + -e 's/@''GNULIB_ASINF''@/$(GNULIB_ASINF)/g' \ + -e 's/@''GNULIB_ASINL''@/$(GNULIB_ASINL)/g' \ + -e 's/@''GNULIB_ATANF''@/$(GNULIB_ATANF)/g' \ + -e 's/@''GNULIB_ATANL''@/$(GNULIB_ATANL)/g' \ + -e 's/@''GNULIB_ATAN2F''@/$(GNULIB_ATAN2F)/g' \ + -e 's/@''GNULIB_CBRT''@/$(GNULIB_CBRT)/g' \ + -e 's/@''GNULIB_CBRTF''@/$(GNULIB_CBRTF)/g' \ + -e 's/@''GNULIB_CBRTL''@/$(GNULIB_CBRTL)/g' \ + -e 's/@''GNULIB_CEIL''@/$(GNULIB_CEIL)/g' \ + -e 's/@''GNULIB_CEILF''@/$(GNULIB_CEILF)/g' \ + -e 's/@''GNULIB_CEILL''@/$(GNULIB_CEILL)/g' \ + -e 's/@''GNULIB_COPYSIGN''@/$(GNULIB_COPYSIGN)/g' \ + -e 's/@''GNULIB_COPYSIGNF''@/$(GNULIB_COPYSIGNF)/g' \ + -e 's/@''GNULIB_COPYSIGNL''@/$(GNULIB_COPYSIGNL)/g' \ + -e 's/@''GNULIB_COSF''@/$(GNULIB_COSF)/g' \ + -e 's/@''GNULIB_COSL''@/$(GNULIB_COSL)/g' \ + -e 's/@''GNULIB_COSHF''@/$(GNULIB_COSHF)/g' \ + -e 's/@''GNULIB_EXPF''@/$(GNULIB_EXPF)/g' \ + -e 's/@''GNULIB_EXPL''@/$(GNULIB_EXPL)/g' \ + -e 's/@''GNULIB_EXP2''@/$(GNULIB_EXP2)/g' \ + -e 's/@''GNULIB_EXP2F''@/$(GNULIB_EXP2F)/g' \ + -e 's/@''GNULIB_EXP2L''@/$(GNULIB_EXP2L)/g' \ + -e 's/@''GNULIB_EXPM1''@/$(GNULIB_EXPM1)/g' \ + -e 's/@''GNULIB_EXPM1F''@/$(GNULIB_EXPM1F)/g' \ + -e 's/@''GNULIB_EXPM1L''@/$(GNULIB_EXPM1L)/g' \ + -e 's/@''GNULIB_FABSF''@/$(GNULIB_FABSF)/g' \ + -e 's/@''GNULIB_FABSL''@/$(GNULIB_FABSL)/g' \ + -e 's/@''GNULIB_FLOOR''@/$(GNULIB_FLOOR)/g' \ + -e 's/@''GNULIB_FLOORF''@/$(GNULIB_FLOORF)/g' \ + -e 's/@''GNULIB_FLOORL''@/$(GNULIB_FLOORL)/g' \ + -e 's/@''GNULIB_FMA''@/$(GNULIB_FMA)/g' \ + -e 's/@''GNULIB_FMAF''@/$(GNULIB_FMAF)/g' \ + -e 's/@''GNULIB_FMAL''@/$(GNULIB_FMAL)/g' \ + -e 's/@''GNULIB_FMOD''@/$(GNULIB_FMOD)/g' \ + -e 's/@''GNULIB_FMODF''@/$(GNULIB_FMODF)/g' \ + -e 's/@''GNULIB_FMODL''@/$(GNULIB_FMODL)/g' \ + -e 's/@''GNULIB_FREXPF''@/$(GNULIB_FREXPF)/g' \ + -e 's/@''GNULIB_FREXP''@/$(GNULIB_FREXP)/g' \ + -e 's/@''GNULIB_FREXPL''@/$(GNULIB_FREXPL)/g' \ + -e 's/@''GNULIB_HYPOT''@/$(GNULIB_HYPOT)/g' \ + -e 's/@''GNULIB_HYPOTF''@/$(GNULIB_HYPOTF)/g' \ + -e 's/@''GNULIB_HYPOTL''@/$(GNULIB_HYPOTL)/g' \ + < $(srcdir)/math.in.h | \ + sed -e 's/@''GNULIB_ILOGB''@/$(GNULIB_ILOGB)/g' \ + -e 's/@''GNULIB_ILOGBF''@/$(GNULIB_ILOGBF)/g' \ + -e 's/@''GNULIB_ILOGBL''@/$(GNULIB_ILOGBL)/g' \ + -e 's/@''GNULIB_ISFINITE''@/$(GNULIB_ISFINITE)/g' \ + -e 's/@''GNULIB_ISINF''@/$(GNULIB_ISINF)/g' \ + -e 's/@''GNULIB_ISNAN''@/$(GNULIB_ISNAN)/g' \ + -e 's/@''GNULIB_ISNANF''@/$(GNULIB_ISNANF)/g' \ + -e 's/@''GNULIB_ISNAND''@/$(GNULIB_ISNAND)/g' \ + -e 's/@''GNULIB_ISNANL''@/$(GNULIB_ISNANL)/g' \ + -e 's/@''GNULIB_LDEXPF''@/$(GNULIB_LDEXPF)/g' \ + -e 's/@''GNULIB_LDEXPL''@/$(GNULIB_LDEXPL)/g' \ + -e 's/@''GNULIB_LOG''@/$(GNULIB_LOG)/g' \ + -e 's/@''GNULIB_LOGF''@/$(GNULIB_LOGF)/g' \ + -e 's/@''GNULIB_LOGL''@/$(GNULIB_LOGL)/g' \ + -e 's/@''GNULIB_LOG10''@/$(GNULIB_LOG10)/g' \ + -e 's/@''GNULIB_LOG10F''@/$(GNULIB_LOG10F)/g' \ + -e 's/@''GNULIB_LOG10L''@/$(GNULIB_LOG10L)/g' \ + -e 's/@''GNULIB_LOG1P''@/$(GNULIB_LOG1P)/g' \ + -e 's/@''GNULIB_LOG1PF''@/$(GNULIB_LOG1PF)/g' \ + -e 's/@''GNULIB_LOG1PL''@/$(GNULIB_LOG1PL)/g' \ + -e 's/@''GNULIB_LOG2''@/$(GNULIB_LOG2)/g' \ + -e 's/@''GNULIB_LOG2F''@/$(GNULIB_LOG2F)/g' \ + -e 's/@''GNULIB_LOG2L''@/$(GNULIB_LOG2L)/g' \ + -e 's/@''GNULIB_LOGB''@/$(GNULIB_LOGB)/g' \ + -e 's/@''GNULIB_LOGBF''@/$(GNULIB_LOGBF)/g' \ + -e 's/@''GNULIB_LOGBL''@/$(GNULIB_LOGBL)/g' \ + -e 's/@''GNULIB_MODF''@/$(GNULIB_MODF)/g' \ + -e 's/@''GNULIB_MODFF''@/$(GNULIB_MODFF)/g' \ + -e 's/@''GNULIB_MODFL''@/$(GNULIB_MODFL)/g' \ + -e 's/@''GNULIB_POWF''@/$(GNULIB_POWF)/g' \ + -e 's/@''GNULIB_REMAINDER''@/$(GNULIB_REMAINDER)/g' \ + -e 's/@''GNULIB_REMAINDERF''@/$(GNULIB_REMAINDERF)/g' \ + -e 's/@''GNULIB_REMAINDERL''@/$(GNULIB_REMAINDERL)/g' \ + -e 's/@''GNULIB_RINT''@/$(GNULIB_RINT)/g' \ + -e 's/@''GNULIB_RINTF''@/$(GNULIB_RINTF)/g' \ + -e 's/@''GNULIB_RINTL''@/$(GNULIB_RINTL)/g' \ + -e 's/@''GNULIB_ROUND''@/$(GNULIB_ROUND)/g' \ + -e 's/@''GNULIB_ROUNDF''@/$(GNULIB_ROUNDF)/g' \ + -e 's/@''GNULIB_ROUNDL''@/$(GNULIB_ROUNDL)/g' \ + -e 's/@''GNULIB_SIGNBIT''@/$(GNULIB_SIGNBIT)/g' \ + -e 's/@''GNULIB_SINF''@/$(GNULIB_SINF)/g' \ + -e 's/@''GNULIB_SINL''@/$(GNULIB_SINL)/g' \ + -e 's/@''GNULIB_SINHF''@/$(GNULIB_SINHF)/g' \ + -e 's/@''GNULIB_SQRTF''@/$(GNULIB_SQRTF)/g' \ + -e 's/@''GNULIB_SQRTL''@/$(GNULIB_SQRTL)/g' \ + -e 's/@''GNULIB_TANF''@/$(GNULIB_TANF)/g' \ + -e 's/@''GNULIB_TANL''@/$(GNULIB_TANL)/g' \ + -e 's/@''GNULIB_TANHF''@/$(GNULIB_TANHF)/g' \ + -e 's/@''GNULIB_TRUNC''@/$(GNULIB_TRUNC)/g' \ + -e 's/@''GNULIB_TRUNCF''@/$(GNULIB_TRUNCF)/g' \ + -e 's/@''GNULIB_TRUNCL''@/$(GNULIB_TRUNCL)/g' \ + | \ + sed -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \ + -e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \ + -e 's|@''HAVE_ASINF''@|$(HAVE_ASINF)|g' \ + -e 's|@''HAVE_ASINL''@|$(HAVE_ASINL)|g' \ + -e 's|@''HAVE_ATANF''@|$(HAVE_ATANF)|g' \ + -e 's|@''HAVE_ATANL''@|$(HAVE_ATANL)|g' \ + -e 's|@''HAVE_ATAN2F''@|$(HAVE_ATAN2F)|g' \ + -e 's|@''HAVE_CBRT''@|$(HAVE_CBRT)|g' \ + -e 's|@''HAVE_CBRTF''@|$(HAVE_CBRTF)|g' \ + -e 's|@''HAVE_CBRTL''@|$(HAVE_CBRTL)|g' \ + -e 's|@''HAVE_COPYSIGN''@|$(HAVE_COPYSIGN)|g' \ + -e 's|@''HAVE_COPYSIGNL''@|$(HAVE_COPYSIGNL)|g' \ + -e 's|@''HAVE_COSF''@|$(HAVE_COSF)|g' \ + -e 's|@''HAVE_COSL''@|$(HAVE_COSL)|g' \ + -e 's|@''HAVE_COSHF''@|$(HAVE_COSHF)|g' \ + -e 's|@''HAVE_EXPF''@|$(HAVE_EXPF)|g' \ + -e 's|@''HAVE_EXPL''@|$(HAVE_EXPL)|g' \ + -e 's|@''HAVE_EXPM1''@|$(HAVE_EXPM1)|g' \ + -e 's|@''HAVE_EXPM1F''@|$(HAVE_EXPM1F)|g' \ + -e 's|@''HAVE_FABSF''@|$(HAVE_FABSF)|g' \ + -e 's|@''HAVE_FABSL''@|$(HAVE_FABSL)|g' \ + -e 's|@''HAVE_FMA''@|$(HAVE_FMA)|g' \ + -e 's|@''HAVE_FMAF''@|$(HAVE_FMAF)|g' \ + -e 's|@''HAVE_FMAL''@|$(HAVE_FMAL)|g' \ + -e 's|@''HAVE_FMODF''@|$(HAVE_FMODF)|g' \ + -e 's|@''HAVE_FMODL''@|$(HAVE_FMODL)|g' \ + -e 's|@''HAVE_FREXPF''@|$(HAVE_FREXPF)|g' \ + -e 's|@''HAVE_HYPOTF''@|$(HAVE_HYPOTF)|g' \ + -e 's|@''HAVE_HYPOTL''@|$(HAVE_HYPOTL)|g' \ + -e 's|@''HAVE_ILOGB''@|$(HAVE_ILOGB)|g' \ + -e 's|@''HAVE_ILOGBF''@|$(HAVE_ILOGBF)|g' \ + -e 's|@''HAVE_ILOGBL''@|$(HAVE_ILOGBL)|g' \ + -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \ + -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \ + -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \ + -e 's|@''HAVE_LDEXPF''@|$(HAVE_LDEXPF)|g' \ + -e 's|@''HAVE_LOGF''@|$(HAVE_LOGF)|g' \ + -e 's|@''HAVE_LOGL''@|$(HAVE_LOGL)|g' \ + -e 's|@''HAVE_LOG10F''@|$(HAVE_LOG10F)|g' \ + -e 's|@''HAVE_LOG10L''@|$(HAVE_LOG10L)|g' \ + -e 's|@''HAVE_LOG1P''@|$(HAVE_LOG1P)|g' \ + -e 's|@''HAVE_LOG1PF''@|$(HAVE_LOG1PF)|g' \ + -e 's|@''HAVE_LOG1PL''@|$(HAVE_LOG1PL)|g' \ + -e 's|@''HAVE_LOGBF''@|$(HAVE_LOGBF)|g' \ + -e 's|@''HAVE_LOGBL''@|$(HAVE_LOGBL)|g' \ + -e 's|@''HAVE_MODFF''@|$(HAVE_MODFF)|g' \ + -e 's|@''HAVE_MODFL''@|$(HAVE_MODFL)|g' \ + -e 's|@''HAVE_POWF''@|$(HAVE_POWF)|g' \ + -e 's|@''HAVE_REMAINDER''@|$(HAVE_REMAINDER)|g' \ + -e 's|@''HAVE_REMAINDERF''@|$(HAVE_REMAINDERF)|g' \ + -e 's|@''HAVE_RINT''@|$(HAVE_RINT)|g' \ + -e 's|@''HAVE_RINTL''@|$(HAVE_RINTL)|g' \ + -e 's|@''HAVE_SINF''@|$(HAVE_SINF)|g' \ + -e 's|@''HAVE_SINL''@|$(HAVE_SINL)|g' \ + -e 's|@''HAVE_SINHF''@|$(HAVE_SINHF)|g' \ + -e 's|@''HAVE_SQRTF''@|$(HAVE_SQRTF)|g' \ + -e 's|@''HAVE_SQRTL''@|$(HAVE_SQRTL)|g' \ + -e 's|@''HAVE_TANF''@|$(HAVE_TANF)|g' \ + -e 's|@''HAVE_TANL''@|$(HAVE_TANL)|g' \ + -e 's|@''HAVE_TANHF''@|$(HAVE_TANHF)|g' \ + -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \ + -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \ + -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \ + -e 's|@''HAVE_DECL_CBRTF''@|$(HAVE_DECL_CBRTF)|g' \ + -e 's|@''HAVE_DECL_CBRTL''@|$(HAVE_DECL_CBRTL)|g' \ + -e 's|@''HAVE_DECL_CEILF''@|$(HAVE_DECL_CEILF)|g' \ + -e 's|@''HAVE_DECL_CEILL''@|$(HAVE_DECL_CEILL)|g' \ + -e 's|@''HAVE_DECL_COPYSIGNF''@|$(HAVE_DECL_COPYSIGNF)|g' \ + -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \ + -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \ + -e 's|@''HAVE_DECL_EXP2''@|$(HAVE_DECL_EXP2)|g' \ + -e 's|@''HAVE_DECL_EXP2F''@|$(HAVE_DECL_EXP2F)|g' \ + -e 's|@''HAVE_DECL_EXP2L''@|$(HAVE_DECL_EXP2L)|g' \ + -e 's|@''HAVE_DECL_EXPM1L''@|$(HAVE_DECL_EXPM1L)|g' \ + -e 's|@''HAVE_DECL_FLOORF''@|$(HAVE_DECL_FLOORF)|g' \ + -e 's|@''HAVE_DECL_FLOORL''@|$(HAVE_DECL_FLOORL)|g' \ + -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \ + -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \ + -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \ + -e 's|@''HAVE_DECL_LOG10L''@|$(HAVE_DECL_LOG10L)|g' \ + -e 's|@''HAVE_DECL_LOG2''@|$(HAVE_DECL_LOG2)|g' \ + -e 's|@''HAVE_DECL_LOG2F''@|$(HAVE_DECL_LOG2F)|g' \ + -e 's|@''HAVE_DECL_LOG2L''@|$(HAVE_DECL_LOG2L)|g' \ + -e 's|@''HAVE_DECL_LOGB''@|$(HAVE_DECL_LOGB)|g' \ + -e 's|@''HAVE_DECL_REMAINDER''@|$(HAVE_DECL_REMAINDER)|g' \ + -e 's|@''HAVE_DECL_REMAINDERL''@|$(HAVE_DECL_REMAINDERL)|g' \ + -e 's|@''HAVE_DECL_RINTF''@|$(HAVE_DECL_RINTF)|g' \ + -e 's|@''HAVE_DECL_ROUND''@|$(HAVE_DECL_ROUND)|g' \ + -e 's|@''HAVE_DECL_ROUNDF''@|$(HAVE_DECL_ROUNDF)|g' \ + -e 's|@''HAVE_DECL_ROUNDL''@|$(HAVE_DECL_ROUNDL)|g' \ + -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \ + -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \ + -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \ + -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \ + -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ + -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \ + | \ + sed -e 's|@''REPLACE_ACOSF''@|$(REPLACE_ACOSF)|g' \ + -e 's|@''REPLACE_ASINF''@|$(REPLACE_ASINF)|g' \ + -e 's|@''REPLACE_ATANF''@|$(REPLACE_ATANF)|g' \ + -e 's|@''REPLACE_ATAN2F''@|$(REPLACE_ATAN2F)|g' \ + -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \ + -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \ + -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \ + -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ + -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ + -e 's|@''REPLACE_COSF''@|$(REPLACE_COSF)|g' \ + -e 's|@''REPLACE_COSHF''@|$(REPLACE_COSHF)|g' \ + -e 's|@''REPLACE_EXPF''@|$(REPLACE_EXPF)|g' \ + -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \ + -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \ + -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \ + -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \ + -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \ + -e 's|@''REPLACE_FLOOR''@|$(REPLACE_FLOOR)|g' \ + -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \ + -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \ + -e 's|@''REPLACE_FMA''@|$(REPLACE_FMA)|g' \ + -e 's|@''REPLACE_FMAF''@|$(REPLACE_FMAF)|g' \ + -e 's|@''REPLACE_FMAL''@|$(REPLACE_FMAL)|g' \ + -e 's|@''REPLACE_FMOD''@|$(REPLACE_FMOD)|g' \ + -e 's|@''REPLACE_FMODF''@|$(REPLACE_FMODF)|g' \ + -e 's|@''REPLACE_FMODL''@|$(REPLACE_FMODL)|g' \ + -e 's|@''REPLACE_FREXPF''@|$(REPLACE_FREXPF)|g' \ + -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \ + -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \ + -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \ + -e 's|@''REPLACE_HYPOT''@|$(REPLACE_HYPOT)|g' \ + -e 's|@''REPLACE_HYPOTF''@|$(REPLACE_HYPOTF)|g' \ + -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \ + -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \ + -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \ + -e 's|@''REPLACE_ILOGBL''@|$(REPLACE_ILOGBL)|g' \ + -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ + -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ + -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ + -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ + -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \ + -e 's|@''REPLACE_LOG''@|$(REPLACE_LOG)|g' \ + -e 's|@''REPLACE_LOGF''@|$(REPLACE_LOGF)|g' \ + -e 's|@''REPLACE_LOGL''@|$(REPLACE_LOGL)|g' \ + -e 's|@''REPLACE_LOG10''@|$(REPLACE_LOG10)|g' \ + -e 's|@''REPLACE_LOG10F''@|$(REPLACE_LOG10F)|g' \ + -e 's|@''REPLACE_LOG10L''@|$(REPLACE_LOG10L)|g' \ + -e 's|@''REPLACE_LOG1P''@|$(REPLACE_LOG1P)|g' \ + -e 's|@''REPLACE_LOG1PF''@|$(REPLACE_LOG1PF)|g' \ + -e 's|@''REPLACE_LOG1PL''@|$(REPLACE_LOG1PL)|g' \ + -e 's|@''REPLACE_LOG2''@|$(REPLACE_LOG2)|g' \ + -e 's|@''REPLACE_LOG2F''@|$(REPLACE_LOG2F)|g' \ + -e 's|@''REPLACE_LOG2L''@|$(REPLACE_LOG2L)|g' \ + -e 's|@''REPLACE_LOGB''@|$(REPLACE_LOGB)|g' \ + -e 's|@''REPLACE_LOGBF''@|$(REPLACE_LOGBF)|g' \ + -e 's|@''REPLACE_LOGBL''@|$(REPLACE_LOGBL)|g' \ + -e 's|@''REPLACE_MODF''@|$(REPLACE_MODF)|g' \ + -e 's|@''REPLACE_MODFF''@|$(REPLACE_MODFF)|g' \ + -e 's|@''REPLACE_MODFL''@|$(REPLACE_MODFL)|g' \ + -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \ + -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \ + -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \ + -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \ + -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ + -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ + -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ + -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ + -e 's|@''REPLACE_SIGNBIT_USING_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|g' \ + -e 's|@''REPLACE_SINF''@|$(REPLACE_SINF)|g' \ + -e 's|@''REPLACE_SINHF''@|$(REPLACE_SINHF)|g' \ + -e 's|@''REPLACE_SQRTF''@|$(REPLACE_SQRTF)|g' \ + -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \ + -e 's|@''REPLACE_TANF''@|$(REPLACE_TANF)|g' \ + -e 's|@''REPLACE_TANHF''@|$(REPLACE_TANHF)|g' \ + -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \ + -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \ + -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ + +# This rule overrides the Automake generated .y.c rule, to ensure that the +# parse-datetime.c file gets generated in the source directory, not in the +# build directory. +parse-datetime.c: parse-datetime.y + $(AM_V_GEN)$(SHELL) $(YLWRAP) $(srcdir)/parse-datetime.y \ + y.tab.c parse-datetime.c \ + y.tab.h parse-datetime.h \ + y.output parse-datetime.output \ + -- $(YACC) $(YFLAGS) $(AM_YFLAGS) && \ + sed -e 's|".*/parse-datetime.y"|"parse-datetime.y"|' \ + < parse-datetime.c > parse-datetime.c-t && \ + rm -f parse-datetime.c && \ + mv parse-datetime.c-t $(srcdir)/parse-datetime.c + +# We need the following in order to create a replacement for <sched.h> when +# the system doesn't have one. +@GL_GENERATE_SCHED_H_TRUE@sched.h: sched.in.h $(top_builddir)/config.status +@GL_GENERATE_SCHED_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_SCHED_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ +@GL_GENERATE_SCHED_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +@GL_GENERATE_SCHED_H_TRUE@ -e 's|@''HAVE_SCHED_H''@|$(HAVE_SCHED_H)|g' \ +@GL_GENERATE_SCHED_H_TRUE@ -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ +@GL_GENERATE_SCHED_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +@GL_GENERATE_SCHED_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ +@GL_GENERATE_SCHED_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ +@GL_GENERATE_SCHED_H_TRUE@ -e 's|@''NEXT_SCHED_H''@|$(NEXT_SCHED_H)|g' \ +@GL_GENERATE_SCHED_H_TRUE@ -e 's|@''HAVE_STRUCT_SCHED_PARAM''@|$(HAVE_STRUCT_SCHED_PARAM)|g' \ +@GL_GENERATE_SCHED_H_TRUE@ < $(srcdir)/sched.in.h; \ +@GL_GENERATE_SCHED_H_TRUE@ } > $@-t && \ +@GL_GENERATE_SCHED_H_TRUE@ mv $@-t $@ +@GL_GENERATE_SCHED_H_FALSE@sched.h: $(top_builddir)/config.status +@GL_GENERATE_SCHED_H_FALSE@ rm -f $@ +selinux/selinux.h: se-selinux.in.h $(top_builddir)/config.status $(UNUSED_PARAMETER_H) + $(AM_V_at)$(MKDIR_P) selinux + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SELINUX_SELINUX_H''@|$(NEXT_SELINUX_SELINUX_H)|g' \ + -e '/definition of _GL_UNUSED_PARAMETER/r $(UNUSED_PARAMETER_H)' \ + < $(srcdir)/se-selinux.in.h; \ + } > $@-t && \ + chmod a-x $@-t && \ + mv $@-t $@ +@GL_GENERATE_SELINUX_CONTEXT_H_TRUE@selinux/context.h: se-context.in.h $(top_builddir)/config.status $(UNUSED_PARAMETER_H) +@GL_GENERATE_SELINUX_CONTEXT_H_TRUE@ $(AM_V_at)$(MKDIR_P) selinux +@GL_GENERATE_SELINUX_CONTEXT_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_SELINUX_CONTEXT_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ +@GL_GENERATE_SELINUX_CONTEXT_H_TRUE@ sed -e '/definition of _GL_UNUSED_PARAMETER/r $(UNUSED_PARAMETER_H)' \ +@GL_GENERATE_SELINUX_CONTEXT_H_TRUE@ < $(srcdir)/se-context.in.h; \ +@GL_GENERATE_SELINUX_CONTEXT_H_TRUE@ } > $@-t && \ +@GL_GENERATE_SELINUX_CONTEXT_H_TRUE@ chmod a-x $@-t && \ +@GL_GENERATE_SELINUX_CONTEXT_H_TRUE@ mv $@-t $@ +@GL_GENERATE_SELINUX_CONTEXT_H_FALSE@selinux/context.h: $(top_builddir)/config.status +@GL_GENERATE_SELINUX_CONTEXT_H_FALSE@ rm -f $@ + +# We need the following in order to create <signal.h> when the system +# doesn't have a complete one. +signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \ + -e 's/@''GNULIB_PTHREAD_SIGMASK''@/$(GNULIB_PTHREAD_SIGMASK)/g' \ + -e 's/@''GNULIB_RAISE''@/$(GNULIB_RAISE)/g' \ + -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GNULIB_SIGNAL_H_SIGPIPE)/g' \ + -e 's/@''GNULIB_SIGPROCMASK''@/$(GNULIB_SIGPROCMASK)/g' \ + -e 's/@''GNULIB_SIGACTION''@/$(GNULIB_SIGACTION)/g' \ + -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \ + -e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \ + -e 's|@''HAVE_RAISE''@|$(HAVE_RAISE)|g' \ + -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \ + -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \ + -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \ + -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \ + -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \ + -e 's|@''HAVE_SIGHANDLER_T''@|$(HAVE_SIGHANDLER_T)|g' \ + -e 's|@''REPLACE_PTHREAD_SIGMASK''@|$(REPLACE_PTHREAD_SIGMASK)|g' \ + -e 's|@''REPLACE_RAISE''@|$(REPLACE_RAISE)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/signal.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create a replacement for <spawn.h> when +# the system doesn't have one. +spawn.h: spawn.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_SPAWN_H''@|$(HAVE_SPAWN_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SPAWN_H''@|$(NEXT_SPAWN_H)|g' \ + -e 's/@''GNULIB_POSIX_SPAWN''@/$(GNULIB_POSIX_SPAWN)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNP''@/$(GNULIB_POSIX_SPAWNP)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)/g' \ + -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY''@/$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_INIT''@/$(GNULIB_POSIX_SPAWNATTR_INIT)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETFLAGS''@/$(GNULIB_POSIX_SPAWNATTR_GETFLAGS)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETFLAGS''@/$(GNULIB_POSIX_SPAWNATTR_SETFLAGS)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETPGROUP''@/$(GNULIB_POSIX_SPAWNATTR_GETPGROUP)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETPGROUP''@/$(GNULIB_POSIX_SPAWNATTR_SETPGROUP)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM''@/$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM''@/$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY''@/$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY''@/$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT''@/$(GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT''@/$(GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSIGMASK''@/$(GNULIB_POSIX_SPAWNATTR_GETSIGMASK)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSIGMASK''@/$(GNULIB_POSIX_SPAWNATTR_SETSIGMASK)/g' \ + -e 's/@''GNULIB_POSIX_SPAWNATTR_DESTROY''@/$(GNULIB_POSIX_SPAWNATTR_DESTROY)/g' \ + -e 's|@''HAVE_POSIX_SPAWN''@|$(HAVE_POSIX_SPAWN)|g' \ + -e 's|@''HAVE_POSIX_SPAWNATTR_T''@|$(HAVE_POSIX_SPAWNATTR_T)|g' \ + -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_T''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_T)|g' \ + -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN''@|$(REPLACE_POSIX_SPAWN)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/spawn.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <stdarg.h> when the system +# doesn't have one that works with the given compiler. +@GL_GENERATE_STDARG_H_TRUE@stdarg.h: stdarg.in.h $(top_builddir)/config.status +@GL_GENERATE_STDARG_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_STDARG_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ +@GL_GENERATE_STDARG_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +@GL_GENERATE_STDARG_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +@GL_GENERATE_STDARG_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ +@GL_GENERATE_STDARG_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ +@GL_GENERATE_STDARG_H_TRUE@ -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ +@GL_GENERATE_STDARG_H_TRUE@ < $(srcdir)/stdarg.in.h; \ +@GL_GENERATE_STDARG_H_TRUE@ } > $@-t && \ +@GL_GENERATE_STDARG_H_TRUE@ mv $@-t $@ +@GL_GENERATE_STDARG_H_FALSE@stdarg.h: $(top_builddir)/config.status +@GL_GENERATE_STDARG_H_FALSE@ rm -f $@ + +# We need the following in order to create <stdbool.h> when the system +# doesn't have one that works. +@GL_GENERATE_STDBOOL_H_TRUE@stdbool.h: stdbool.in.h $(top_builddir)/config.status +@GL_GENERATE_STDBOOL_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_STDBOOL_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ +@GL_GENERATE_STDBOOL_H_TRUE@ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ +@GL_GENERATE_STDBOOL_H_TRUE@ } > $@-t && \ +@GL_GENERATE_STDBOOL_H_TRUE@ mv $@-t $@ +@GL_GENERATE_STDBOOL_H_FALSE@stdbool.h: $(top_builddir)/config.status +@GL_GENERATE_STDBOOL_H_FALSE@ rm -f $@ + +# We need the following in order to create <stddef.h> when the system +# doesn't have one that works with the given compiler. +@GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status +@GL_GENERATE_STDDEF_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_STDDEF_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ +@GL_GENERATE_STDDEF_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ +@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ +@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ +@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ +@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ +@GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ +@GL_GENERATE_STDDEF_H_TRUE@ < $(srcdir)/stddef.in.h; \ +@GL_GENERATE_STDDEF_H_TRUE@ } > $@-t && \ +@GL_GENERATE_STDDEF_H_TRUE@ mv $@-t $@ +@GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status +@GL_GENERATE_STDDEF_H_FALSE@ rm -f $@ + +# We need the following in order to create <stdint.h> when the system +# doesn't have one that works with the given compiler. +@GL_GENERATE_STDINT_H_TRUE@stdint.h: stdint.in.h $(top_builddir)/config.status +@GL_GENERATE_STDINT_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ +@GL_GENERATE_STDINT_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ +@GL_GENERATE_STDINT_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL|g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ +@GL_GENERATE_STDINT_H_TRUE@ < $(srcdir)/stdint.in.h; \ +@GL_GENERATE_STDINT_H_TRUE@ } > $@-t && \ +@GL_GENERATE_STDINT_H_TRUE@ mv $@-t $@ +@GL_GENERATE_STDINT_H_FALSE@stdint.h: $(top_builddir)/config.status +@GL_GENERATE_STDINT_H_FALSE@ rm -f $@ + +# We need the following in order to create <stdio.h> when the system +# doesn't have one that works with the given compiler. +stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ + -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \ + -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \ + -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \ + -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \ + -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \ + -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \ + -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \ + -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \ + -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \ + -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \ + -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \ + -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \ + -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \ + -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \ + -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \ + -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \ + -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \ + -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \ + -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \ + -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \ + -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \ + -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \ + -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \ + -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \ + -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \ + -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \ + -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \ + -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \ + -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \ + -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \ + -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \ + -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \ + -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \ + -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \ + -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \ + -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \ + -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \ + -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \ + -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \ + -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \ + -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \ + -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \ + -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \ + -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \ + -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \ + -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \ + -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \ + -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \ + -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \ + -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \ + < $(srcdir)/stdio.in.h | \ + sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ + -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ + -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ + -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ + -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ + -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ + -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ + -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ + -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ + -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ + -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ + -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ + -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ + -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ + -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ + -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ + -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ + -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ + -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ + -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ + -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ + -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ + -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ + -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ + -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ + -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ + -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ + -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ + -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ + -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ + -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ + -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ + -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ + -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ + -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ + -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ + -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ + -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ + -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ + -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ + -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ + -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ + -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ + -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ + -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ + -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ + -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ + -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ + -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <stdlib.h> when the system +# doesn't have one that works with the given compiler. +stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ + $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ + -e 's/@''GNULIB__EXIT''@/$(GNULIB__EXIT)/g' \ + -e 's/@''GNULIB_ATOLL''@/$(GNULIB_ATOLL)/g' \ + -e 's/@''GNULIB_CALLOC_POSIX''@/$(GNULIB_CALLOC_POSIX)/g' \ + -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GNULIB_CANONICALIZE_FILE_NAME)/g' \ + -e 's/@''GNULIB_GETLOADAVG''@/$(GNULIB_GETLOADAVG)/g' \ + -e 's/@''GNULIB_GETSUBOPT''@/$(GNULIB_GETSUBOPT)/g' \ + -e 's/@''GNULIB_GRANTPT''@/$(GNULIB_GRANTPT)/g' \ + -e 's/@''GNULIB_MALLOC_POSIX''@/$(GNULIB_MALLOC_POSIX)/g' \ + -e 's/@''GNULIB_MBTOWC''@/$(GNULIB_MBTOWC)/g' \ + -e 's/@''GNULIB_MKDTEMP''@/$(GNULIB_MKDTEMP)/g' \ + -e 's/@''GNULIB_MKOSTEMP''@/$(GNULIB_MKOSTEMP)/g' \ + -e 's/@''GNULIB_MKOSTEMPS''@/$(GNULIB_MKOSTEMPS)/g' \ + -e 's/@''GNULIB_MKSTEMP''@/$(GNULIB_MKSTEMP)/g' \ + -e 's/@''GNULIB_MKSTEMPS''@/$(GNULIB_MKSTEMPS)/g' \ + -e 's/@''GNULIB_POSIX_OPENPT''@/$(GNULIB_POSIX_OPENPT)/g' \ + -e 's/@''GNULIB_PTSNAME''@/$(GNULIB_PTSNAME)/g' \ + -e 's/@''GNULIB_PTSNAME_R''@/$(GNULIB_PTSNAME_R)/g' \ + -e 's/@''GNULIB_PUTENV''@/$(GNULIB_PUTENV)/g' \ + -e 's/@''GNULIB_QSORT_R''@/$(GNULIB_QSORT_R)/g' \ + -e 's/@''GNULIB_RANDOM''@/$(GNULIB_RANDOM)/g' \ + -e 's/@''GNULIB_RANDOM_R''@/$(GNULIB_RANDOM_R)/g' \ + -e 's/@''GNULIB_REALLOC_POSIX''@/$(GNULIB_REALLOC_POSIX)/g' \ + -e 's/@''GNULIB_REALLOCARRAY''@/$(GNULIB_REALLOCARRAY)/g' \ + -e 's/@''GNULIB_REALPATH''@/$(GNULIB_REALPATH)/g' \ + -e 's/@''GNULIB_RPMATCH''@/$(GNULIB_RPMATCH)/g' \ + -e 's/@''GNULIB_SECURE_GETENV''@/$(GNULIB_SECURE_GETENV)/g' \ + -e 's/@''GNULIB_SETENV''@/$(GNULIB_SETENV)/g' \ + -e 's/@''GNULIB_STRTOD''@/$(GNULIB_STRTOD)/g' \ + -e 's/@''GNULIB_STRTOLL''@/$(GNULIB_STRTOLL)/g' \ + -e 's/@''GNULIB_STRTOULL''@/$(GNULIB_STRTOULL)/g' \ + -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GNULIB_SYSTEM_POSIX)/g' \ + -e 's/@''GNULIB_UNLOCKPT''@/$(GNULIB_UNLOCKPT)/g' \ + -e 's/@''GNULIB_UNSETENV''@/$(GNULIB_UNSETENV)/g' \ + -e 's/@''GNULIB_WCTOMB''@/$(GNULIB_WCTOMB)/g' \ + < $(srcdir)/stdlib.in.h | \ + sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ + -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ + -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ + -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ + -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ + -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ + -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ + -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ + -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ + -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ + -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ + -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ + -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ + -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ + -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ + -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ + -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ + -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ + -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ + -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ + -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ + -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ + -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ + -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ + -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ + -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ + -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ + -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ + -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ + -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ + -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ + -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ + -e 's|@''REPLACE_CALLOC''@|$(REPLACE_CALLOC)|g' \ + -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ + -e 's|@''REPLACE_MALLOC''@|$(REPLACE_MALLOC)|g' \ + -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ + -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ + -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ + -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ + -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ + -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ + -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ + -e 's|@''REPLACE_REALLOC''@|$(REPLACE_REALLOC)|g' \ + -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ + -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ + -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ + -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ + -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _Noreturn/r $(_NORETURN_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <string.h> when the system +# doesn't have one that works with the given compiler. +string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ + -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \ + -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ + -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \ + -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \ + -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \ + -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \ + -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \ + -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \ + -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \ + -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \ + -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \ + -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \ + -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \ + -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \ + -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \ + -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \ + -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \ + -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \ + -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \ + -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \ + -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \ + -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \ + -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \ + -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \ + -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \ + -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \ + -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \ + -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \ + -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \ + -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \ + -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \ + -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \ + -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \ + -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \ + -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \ + -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ + -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ + -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ + < $(srcdir)/string.in.h | \ + sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ + -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ + -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ + -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ + -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \ + -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ + -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ + -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ + -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ + -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ + -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ + -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ + -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ + -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ + -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ + -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ + -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ + -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ + -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ + -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ + -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ + -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ + -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ + -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ + -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ + -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ + -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ + -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ + -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ + -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ + -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ + -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ + -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ + -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ + -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ + -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ + -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + < $(srcdir)/string.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <strings.h> when the system +# doesn't have one that works with the given compiler. +strings.h: strings.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_STRINGS_H''@|$(HAVE_STRINGS_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \ + -e 's/@''GNULIB_FFS''@/$(GNULIB_FFS)/g' \ + -e 's|@''HAVE_FFS''@|$(HAVE_FFS)|g' \ + -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \ + -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/strings.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <sys/file.h> when the system +# has one that is incomplete. +sys/file.h: sys_file.in.h $(top_builddir)/config.status $(WARN_ON_USE_H) + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's/@''HAVE_SYS_FILE_H''@/$(HAVE_SYS_FILE_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SYS_FILE_H''@|$(NEXT_SYS_FILE_H)|g' \ + -e 's/@''HAVE_FLOCK''@/$(HAVE_FLOCK)/g' \ + -e 's/@''GNULIB_FLOCK''@/$(GNULIB_FLOCK)/g' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/sys_file.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <sys/stat.h> when the system +# has one that is incomplete. +sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ + -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \ + -e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \ + -e 's/@''GNULIB_FCHMODAT''@/$(GNULIB_FCHMODAT)/g' \ + -e 's/@''GNULIB_FSTAT''@/$(GNULIB_FSTAT)/g' \ + -e 's/@''GNULIB_FSTATAT''@/$(GNULIB_FSTATAT)/g' \ + -e 's/@''GNULIB_FUTIMENS''@/$(GNULIB_FUTIMENS)/g' \ + -e 's/@''GNULIB_LCHMOD''@/$(GNULIB_LCHMOD)/g' \ + -e 's/@''GNULIB_LSTAT''@/$(GNULIB_LSTAT)/g' \ + -e 's/@''GNULIB_MKDIRAT''@/$(GNULIB_MKDIRAT)/g' \ + -e 's/@''GNULIB_MKFIFO''@/$(GNULIB_MKFIFO)/g' \ + -e 's/@''GNULIB_MKFIFOAT''@/$(GNULIB_MKFIFOAT)/g' \ + -e 's/@''GNULIB_MKNOD''@/$(GNULIB_MKNOD)/g' \ + -e 's/@''GNULIB_MKNODAT''@/$(GNULIB_MKNODAT)/g' \ + -e 's/@''GNULIB_STAT''@/$(GNULIB_STAT)/g' \ + -e 's/@''GNULIB_UTIMENSAT''@/$(GNULIB_UTIMENSAT)/g' \ + -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GNULIB_OVERRIDES_STRUCT_STAT)/g' \ + -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ + -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ + -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \ + -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ + -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ + -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \ + -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \ + -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \ + -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \ + -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \ + -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \ + -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \ + -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \ + -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \ + -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ + -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ + -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \ + -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \ + -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \ + -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/sys_stat.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <sys/time.h> when the system +# doesn't have one that works with the given compiler. +sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ + -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GNULIB_GETTIMEOFDAY)/g' \ + -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ + -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \ + -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \ + -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \ + -e 's/@''REPLACE_STRUCT_TIMEVAL''@/$(REPLACE_STRUCT_TIMEVAL)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/sys_time.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <sys/types.h> when the system +# doesn't have one that works with the given compiler. +sys/types.h: sys_types.in.h $(top_builddir)/config.status + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ + -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ + -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ + < $(srcdir)/sys_types.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <sys/wait.h> when the system +# has one that is incomplete. +sys/wait.h: sys_wait.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_at)$(MKDIR_P) sys + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \ + -e 's/@''GNULIB_WAITPID''@/$(GNULIB_WAITPID)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/sys_wait.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <time.h> when the system +# doesn't have one that works with the given compiler. +time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ + -e 's/@''GNULIB_CTIME''@/$(GNULIB_CTIME)/g' \ + -e 's/@''GNULIB_LOCALTIME''@/$(GNULIB_LOCALTIME)/g' \ + -e 's/@''GNULIB_MKTIME''@/$(GNULIB_MKTIME)/g' \ + -e 's/@''GNULIB_NANOSLEEP''@/$(GNULIB_NANOSLEEP)/g' \ + -e 's/@''GNULIB_STRFTIME''@/$(GNULIB_STRFTIME)/g' \ + -e 's/@''GNULIB_STRPTIME''@/$(GNULIB_STRPTIME)/g' \ + -e 's/@''GNULIB_TIMEGM''@/$(GNULIB_TIMEGM)/g' \ + -e 's/@''GNULIB_TIME_R''@/$(GNULIB_TIME_R)/g' \ + -e 's/@''GNULIB_TIME_RZ''@/$(GNULIB_TIME_RZ)/g' \ + -e 's/@''GNULIB_TZSET''@/$(GNULIB_TZSET)/g' \ + -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ + -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ + -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ + -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ + -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ + -e 's|@''HAVE_TZSET''@|$(HAVE_TZSET)|g' \ + -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \ + -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ + -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ + -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ + -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ + -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ + -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ + -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ + -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \ + -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ + -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ + -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ + -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/time.in.h; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create an empty placeholder for +# <unistd.h> when the system doesn't have one. +unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ + -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ + -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ + -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ + -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ + -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/g' \ + -e 's/@''GNULIB_DUP2''@/$(GNULIB_DUP2)/g' \ + -e 's/@''GNULIB_DUP3''@/$(GNULIB_DUP3)/g' \ + -e 's/@''GNULIB_ENVIRON''@/$(GNULIB_ENVIRON)/g' \ + -e 's/@''GNULIB_EUIDACCESS''@/$(GNULIB_EUIDACCESS)/g' \ + -e 's/@''GNULIB_FACCESSAT''@/$(GNULIB_FACCESSAT)/g' \ + -e 's/@''GNULIB_FCHDIR''@/$(GNULIB_FCHDIR)/g' \ + -e 's/@''GNULIB_FCHOWNAT''@/$(GNULIB_FCHOWNAT)/g' \ + -e 's/@''GNULIB_FDATASYNC''@/$(GNULIB_FDATASYNC)/g' \ + -e 's/@''GNULIB_FSYNC''@/$(GNULIB_FSYNC)/g' \ + -e 's/@''GNULIB_FTRUNCATE''@/$(GNULIB_FTRUNCATE)/g' \ + -e 's/@''GNULIB_GETCWD''@/$(GNULIB_GETCWD)/g' \ + -e 's/@''GNULIB_GETDOMAINNAME''@/$(GNULIB_GETDOMAINNAME)/g' \ + -e 's/@''GNULIB_GETDTABLESIZE''@/$(GNULIB_GETDTABLESIZE)/g' \ + -e 's/@''GNULIB_GETGROUPS''@/$(GNULIB_GETGROUPS)/g' \ + -e 's/@''GNULIB_GETHOSTNAME''@/$(GNULIB_GETHOSTNAME)/g' \ + -e 's/@''GNULIB_GETLOGIN''@/$(GNULIB_GETLOGIN)/g' \ + -e 's/@''GNULIB_GETLOGIN_R''@/$(GNULIB_GETLOGIN_R)/g' \ + -e 's/@''GNULIB_GETPAGESIZE''@/$(GNULIB_GETPAGESIZE)/g' \ + -e 's/@''GNULIB_GETPASS''@/$(GNULIB_GETPASS)/g' \ + -e 's/@''GNULIB_GETUSERSHELL''@/$(GNULIB_GETUSERSHELL)/g' \ + -e 's/@''GNULIB_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ + -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/g' \ + -e 's/@''GNULIB_LCHOWN''@/$(GNULIB_LCHOWN)/g' \ + -e 's/@''GNULIB_LINK''@/$(GNULIB_LINK)/g' \ + -e 's/@''GNULIB_LINKAT''@/$(GNULIB_LINKAT)/g' \ + -e 's/@''GNULIB_LSEEK''@/$(GNULIB_LSEEK)/g' \ + -e 's/@''GNULIB_PIPE''@/$(GNULIB_PIPE)/g' \ + -e 's/@''GNULIB_PIPE2''@/$(GNULIB_PIPE2)/g' \ + -e 's/@''GNULIB_PREAD''@/$(GNULIB_PREAD)/g' \ + -e 's/@''GNULIB_PWRITE''@/$(GNULIB_PWRITE)/g' \ + -e 's/@''GNULIB_READ''@/$(GNULIB_READ)/g' \ + -e 's/@''GNULIB_READLINK''@/$(GNULIB_READLINK)/g' \ + -e 's/@''GNULIB_READLINKAT''@/$(GNULIB_READLINKAT)/g' \ + -e 's/@''GNULIB_RMDIR''@/$(GNULIB_RMDIR)/g' \ + -e 's/@''GNULIB_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/g' \ + -e 's/@''GNULIB_SLEEP''@/$(GNULIB_SLEEP)/g' \ + -e 's/@''GNULIB_SYMLINK''@/$(GNULIB_SYMLINK)/g' \ + -e 's/@''GNULIB_SYMLINKAT''@/$(GNULIB_SYMLINKAT)/g' \ + -e 's/@''GNULIB_TRUNCATE''@/$(GNULIB_TRUNCATE)/g' \ + -e 's/@''GNULIB_TTYNAME_R''@/$(GNULIB_TTYNAME_R)/g' \ + -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_GL_UNISTD_H_GETOPT)/g' \ + -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/g' \ + -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GNULIB_UNISTD_H_SIGPIPE)/g' \ + -e 's/@''GNULIB_UNLINK''@/$(GNULIB_UNLINK)/g' \ + -e 's/@''GNULIB_UNLINKAT''@/$(GNULIB_UNLINKAT)/g' \ + -e 's/@''GNULIB_USLEEP''@/$(GNULIB_USLEEP)/g' \ + -e 's/@''GNULIB_WRITE''@/$(GNULIB_WRITE)/g' \ + < $(srcdir)/unistd.in.h | \ + sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ + -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ + -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ + -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ + -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ + -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ + -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ + -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ + -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ + -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ + -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ + -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ + -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ + -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ + -e 's|@''HAVE_GETPASS''@|$(HAVE_GETPASS)|g' \ + -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ + -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ + -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ + -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ + -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ + -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ + -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ + -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ + -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ + -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ + -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ + -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ + -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ + -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ + -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ + -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ + -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ + -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ + -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ + -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ + -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ + -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ + -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ + -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ + -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ + -e 's|@''HAVE_DECL_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|g' \ + -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ + -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ + -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ + | \ + sed -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ + -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ + -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ + -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ + -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ + -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ + -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ + -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ + -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ + -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ + -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ + -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ + -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ + -e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \ + -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ + -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ + -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ + -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ + -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ + -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ + -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ + -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ + -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ + -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ + -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ + -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ + -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ + -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ + -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ + -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ + -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ + -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ + -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ + -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ + -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ + -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <wchar.h> when the system +# version does not work standalone. +wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ + -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ + -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ + -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ + -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ + -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \ + -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \ + -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \ + -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \ + -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \ + -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \ + -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \ + -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \ + -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \ + -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \ + -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \ + -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \ + -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \ + -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \ + -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \ + -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \ + -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \ + -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \ + -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \ + -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \ + -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \ + -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \ + -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \ + -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \ + -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \ + -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \ + -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \ + -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \ + -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \ + -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \ + -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \ + -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \ + -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \ + -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \ + -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \ + -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \ + -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \ + -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \ + -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \ + -e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \ + < $(srcdir)/wchar.in.h | \ + sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ + -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ + -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ + -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ + -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ + -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ + -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ + -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ + -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ + -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ + -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ + -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ + -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ + -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ + -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ + -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ + -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ + -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ + -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ + -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ + -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ + -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ + -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ + -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ + -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ + -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ + -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ + -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ + -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ + -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ + -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ + -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ + -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ + -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ + -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ + -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ + -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ + -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ + -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \ + -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ + -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ + | \ + sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ + -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ + -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ + -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ + -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ + -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ + -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ + -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ + -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ + -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ + -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ + -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ + -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ + -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \ + } > $@-t && \ + mv $@-t $@ + +# We need the following in order to create <wctype.h> when the system +# doesn't have one that works with the given compiler. +wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) + $(AM_V_GEN)rm -f $@-t $@ && \ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ + -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ + -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ + -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \ + -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \ + -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \ + -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \ + -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \ + -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \ + -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \ + -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ + -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \ + -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \ + -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ + -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \ + -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ + -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ + -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ + < $(srcdir)/wctype.in.h; \ + } > $@-t && \ + mv $@-t $@ + +mostlyclean-local: mostlyclean-generic + @for dir in '' $(MOSTLYCLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + : + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/lib/_Noreturn.h b/devspec.en_US/project/recutils/lib/_Noreturn.h new file mode 100755 index 0000000..94fdfaf --- /dev/null +++ b/devspec.en_US/project/recutils/lib/_Noreturn.h @@ -0,0 +1,14 @@ +#ifndef _Noreturn +# if 201103 <= (defined __cplusplus ? __cplusplus : 0) +# define _Noreturn [[noreturn]] +# elif (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ + || 4 < __GNUC__ + (7 <= __GNUC_MINOR__)) + /* _Noreturn works as-is. */ +# elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C +# define _Noreturn __attribute__ ((__noreturn__)) +# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn +# endif +#endif diff --git a/devspec.en_US/project/recutils/lib/acl-errno-valid.c b/devspec.en_US/project/recutils/lib/acl-errno-valid.c new file mode 100755 index 0000000..99ddf3b --- /dev/null +++ b/devspec.en_US/project/recutils/lib/acl-errno-valid.c @@ -0,0 +1,52 @@ +/* Test whether ACLs are well supported on this system. + + Copyright 2013-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + + Written by Paul Eggert. */ + +#include <config.h> + +#include <acl.h> + +#include <errno.h> + +/* Return true if errno value ERRNUM indicates that ACLs are well + supported on this system. ERRNUM should be an errno value obtained + after an ACL-related system call fails. */ +bool +acl_errno_valid (int errnum) +{ + /* Recognize some common errors such as from an NFS mount that does + not support ACLs, even when local drives do. */ + switch (errnum) + { + case EBUSY: return false; + case EINVAL: return false; +#if defined __APPLE__ && defined __MACH__ + case ENOENT: return false; +#endif + case ENOSYS: return false; + +#if defined ENOTSUP && ENOTSUP != EOPNOTSUPP +# if ENOTSUP != ENOSYS /* Needed for the MS-Windows port of GNU Emacs. */ + case ENOTSUP: return false; +# endif +#endif + + case EOPNOTSUPP: return false; + default: return true; + } +} diff --git a/devspec.en_US/project/recutils/lib/acl-internal.c b/devspec.en_US/project/recutils/lib/acl-internal.c new file mode 100755 index 0000000..cc42183 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/acl-internal.c @@ -0,0 +1,507 @@ +/* Test whether a file has a nontrivial ACL. -*- coding: utf-8 -*- + + Copyright (C) 2002-2003, 2005-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + + Written by Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ + +#include <config.h> + +#include "acl.h" + +#include "acl-internal.h" + +#if USE_ACL && HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ + +# if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ + +/* ACL is an ACL, from a file, stored as type ACL_TYPE_EXTENDED. + Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial. */ +int +acl_extended_nontrivial (acl_t acl) +{ + /* acl is non-trivial if it is non-empty. */ + return (acl_entries (acl) > 0); +} + +# else /* Linux, FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */ + +/* ACL is an ACL, from a file, stored as type ACL_TYPE_ACCESS. + Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. + Return -1 and set errno upon failure to determine it. */ +int +acl_access_nontrivial (acl_t acl) +{ + /* acl is non-trivial if it has some entries other than for "user::", + "group::", and "other::". Normally these three should be present + at least, allowing us to write + return (3 < acl_entries (acl)); + but the following code is more robust. */ +# if HAVE_ACL_FIRST_ENTRY /* Linux, FreeBSD, Cygwin >= 2.5 */ + + acl_entry_t ace; + int got_one; + + for (got_one = acl_get_entry (acl, ACL_FIRST_ENTRY, &ace); + got_one > 0; + got_one = acl_get_entry (acl, ACL_NEXT_ENTRY, &ace)) + { + acl_tag_t tag; + if (acl_get_tag_type (ace, &tag) < 0) + return -1; + if (!(tag == ACL_USER_OBJ || tag == ACL_GROUP_OBJ || tag == ACL_OTHER)) + return 1; + } + return got_one; + +# elif HAVE_ACL_TO_SHORT_TEXT /* IRIX */ + /* Don't use acl_get_entry: it is undocumented. */ + + int count = acl->acl_cnt; + int i; + + for (i = 0; i < count; i++) + { + acl_entry_t ace = &acl->acl_entry[i]; + acl_tag_t tag = ace->ae_tag; + + if (!(tag == ACL_USER_OBJ || tag == ACL_GROUP_OBJ + || tag == ACL_OTHER_OBJ)) + return 1; + } + return 0; + +# elif HAVE_ACL_FREE_TEXT /* Tru64 */ + /* Don't use acl_get_entry: it takes only one argument and does not work. */ + + int count = acl->acl_num; + acl_entry_t ace; + + for (ace = acl->acl_first; count > 0; ace = ace->next, count--) + { + acl_tag_t tag; + acl_perm_t perm; + + tag = ace->entry->acl_type; + if (!(tag == ACL_USER_OBJ || tag == ACL_GROUP_OBJ || tag == ACL_OTHER)) + return 1; + + perm = ace->entry->acl_perm; + /* On Tru64, perm can also contain non-standard bits such as + PERM_INSERT, PERM_DELETE, PERM_MODIFY, PERM_LOOKUP, ... */ + if ((perm & ~(ACL_READ | ACL_WRITE | ACL_EXECUTE)) != 0) + return 1; + } + return 0; + +# else + + errno = ENOSYS; + return -1; +# endif +} + +int +acl_default_nontrivial (acl_t acl) +{ + /* acl is non-trivial if it is non-empty. */ + return (acl_entries (acl) > 0); +} + +# endif + +#elif USE_ACL && HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */ + +/* Test an ACL retrieved with GETACL. + Return 1 if the given ACL, consisting of COUNT entries, is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +int +acl_nontrivial (int count, aclent_t *entries) +{ + int i; + + for (i = 0; i < count; i++) + { + aclent_t *ace = &entries[i]; + + /* Note: If ace->a_type = USER_OBJ, ace->a_id is the st_uid from stat(). + If ace->a_type = GROUP_OBJ, ace->a_id is the st_gid from stat(). + We don't need to check ace->a_id in these cases. */ + if (!(ace->a_type == USER_OBJ + || ace->a_type == GROUP_OBJ + || ace->a_type == OTHER_OBJ + /* Note: Cygwin does not return a CLASS_OBJ ("mask:") entry + sometimes. */ + || ace->a_type == CLASS_OBJ)) + return 1; + } + return 0; +} + +# ifdef ACE_GETACL + +/* A shortcut for a bitmask. */ +# define NEW_ACE_WRITEA_DATA (NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA) + +/* Test an ACL retrieved with ACE_GETACL. + Return 1 if the given ACL, consisting of COUNT entries, is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +int +acl_ace_nontrivial (int count, ace_t *entries) +{ + int i; + + /* The flags in the ace_t structure changed in a binary incompatible way + when ACL_NO_TRIVIAL etc. were introduced in <sys/acl.h> version 1.15. + How to distinguish the two conventions at runtime? + In the old convention, usually three ACEs have a_flags = ACE_OWNER / + ACE_GROUP / ACE_OTHER, in the range 0x0100..0x0400. In the new + convention, these values are not used. */ + int old_convention = 0; + + for (i = 0; i < count; i++) + if (entries[i].a_flags & (OLD_ACE_OWNER | OLD_ACE_GROUP | OLD_ACE_OTHER)) + { + old_convention = 1; + break; + } + + if (old_convention) + /* Running on Solaris 10. */ + for (i = 0; i < count; i++) + { + ace_t *ace = &entries[i]; + + /* Note: + If ace->a_flags = ACE_OWNER, ace->a_who is the st_uid from stat(). + If ace->a_flags = ACE_GROUP, ace->a_who is the st_gid from stat(). + We don't need to check ace->a_who in these cases. */ + if (!(ace->a_type == OLD_ALLOW + && (ace->a_flags == OLD_ACE_OWNER + || ace->a_flags == OLD_ACE_GROUP + || ace->a_flags == OLD_ACE_OTHER))) + return 1; + } + else + { + /* Running on Solaris 10 (newer version) or Solaris 11. */ + unsigned int access_masks[6] = + { + 0, /* owner@ deny */ + 0, /* owner@ allow */ + 0, /* group@ deny */ + 0, /* group@ allow */ + 0, /* everyone@ deny */ + 0 /* everyone@ allow */ + }; + + for (i = 0; i < count; i++) + { + ace_t *ace = &entries[i]; + unsigned int index1; + unsigned int index2; + + if (ace->a_type == NEW_ACE_ACCESS_ALLOWED_ACE_TYPE) + index1 = 1; + else if (ace->a_type == NEW_ACE_ACCESS_DENIED_ACE_TYPE) + index1 = 0; + else + return 1; + + if (ace->a_flags == NEW_ACE_OWNER) + index2 = 0; + else if (ace->a_flags == (NEW_ACE_GROUP | NEW_ACE_IDENTIFIER_GROUP)) + index2 = 2; + else if (ace->a_flags == NEW_ACE_EVERYONE) + index2 = 4; + else + return 1; + + access_masks[index1 + index2] |= ace->a_access_mask; + } + + /* The same bit shouldn't be both allowed and denied. */ + if (access_masks[0] & access_masks[1]) + return 1; + if (access_masks[2] & access_masks[3]) + return 1; + if (access_masks[4] & access_masks[5]) + return 1; + + /* Check minimum masks. */ + if ((NEW_ACE_WRITE_NAMED_ATTRS + | NEW_ACE_WRITE_ATTRIBUTES + | NEW_ACE_WRITE_ACL + | NEW_ACE_WRITE_OWNER) + & ~ access_masks[1]) + return 1; + access_masks[1] &= ~(NEW_ACE_WRITE_NAMED_ATTRS + | NEW_ACE_WRITE_ATTRIBUTES + | NEW_ACE_WRITE_ACL + | NEW_ACE_WRITE_OWNER); + if ((NEW_ACE_READ_NAMED_ATTRS + | NEW_ACE_READ_ATTRIBUTES + | NEW_ACE_READ_ACL + | NEW_ACE_SYNCHRONIZE) + & ~ access_masks[5]) + return 1; + access_masks[5] &= ~(NEW_ACE_READ_NAMED_ATTRS + | NEW_ACE_READ_ATTRIBUTES + | NEW_ACE_READ_ACL + | NEW_ACE_SYNCHRONIZE); + + /* Check the allowed or denied bits. */ + switch ((access_masks[0] | access_masks[1]) + & ~(NEW_ACE_READ_NAMED_ATTRS + | NEW_ACE_READ_ATTRIBUTES + | NEW_ACE_READ_ACL + | NEW_ACE_SYNCHRONIZE)) + { + case 0: + case NEW_ACE_READ_DATA: + case NEW_ACE_WRITEA_DATA: + case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA: + case NEW_ACE_EXECUTE: + case NEW_ACE_READ_DATA | NEW_ACE_EXECUTE: + case NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: + case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: + break; + default: + return 1; + } + switch ((access_masks[2] | access_masks[3]) + & ~(NEW_ACE_READ_NAMED_ATTRS + | NEW_ACE_READ_ATTRIBUTES + | NEW_ACE_READ_ACL + | NEW_ACE_SYNCHRONIZE)) + { + case 0: + case NEW_ACE_READ_DATA: + case NEW_ACE_WRITEA_DATA: + case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA: + case NEW_ACE_EXECUTE: + case NEW_ACE_READ_DATA | NEW_ACE_EXECUTE: + case NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: + case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: + break; + default: + return 1; + } + switch ((access_masks[4] | access_masks[5]) + & ~(NEW_ACE_WRITE_NAMED_ATTRS + | NEW_ACE_WRITE_ATTRIBUTES + | NEW_ACE_WRITE_ACL + | NEW_ACE_WRITE_OWNER)) + { + case 0: + case NEW_ACE_READ_DATA: + case NEW_ACE_WRITEA_DATA: + case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA: + case NEW_ACE_EXECUTE: + case NEW_ACE_READ_DATA | NEW_ACE_EXECUTE: + case NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: + case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: + break; + default: + return 1; + } + + /* Check that the NEW_ACE_WRITE_DATA and NEW_ACE_APPEND_DATA bits are + either both allowed or both denied. */ + if (((access_masks[0] & NEW_ACE_WRITE_DATA) != 0) + != ((access_masks[0] & NEW_ACE_APPEND_DATA) != 0)) + return 1; + if (((access_masks[2] & NEW_ACE_WRITE_DATA) != 0) + != ((access_masks[2] & NEW_ACE_APPEND_DATA) != 0)) + return 1; + if (((access_masks[4] & NEW_ACE_WRITE_DATA) != 0) + != ((access_masks[4] & NEW_ACE_APPEND_DATA) != 0)) + return 1; + } + + return 0; +} + +# endif + +#elif USE_ACL && HAVE_GETACL /* HP-UX */ + +/* Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +int +acl_nontrivial (int count, struct acl_entry *entries) +{ + int i; + + if (count > 3) + return 1; + + for (i = 0; i < count; i++) + { + struct acl_entry *ace = &entries[i]; + + if (ace->uid != ACL_NSUSER && ace->gid != ACL_NSGROUP) + return 1; + } + return 0; +} + +# if HAVE_ACLV_H /* HP-UX >= 11.11 */ + +/* Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +int +aclv_nontrivial (int count, struct acl *entries) +{ + int i; + + for (i = 0; i < count; i++) + { + struct acl *ace = &entries[i]; + + /* Note: If ace->a_type = USER_OBJ, ace->a_id is the st_uid from stat(). + If ace->a_type = GROUP_OBJ, ace->a_id is the st_gid from stat(). + We don't need to check ace->a_id in these cases. */ + if (!(ace->a_type == USER_OBJ /* no need to check ace->a_id here */ + || ace->a_type == GROUP_OBJ /* no need to check ace->a_id here */ + || ace->a_type == CLASS_OBJ + || ace->a_type == OTHER_OBJ)) + return 1; + } + return 0; +} + +# endif + +#elif USE_ACL && (HAVE_ACLX_GET || HAVE_STATACL) /* AIX */ + +/* Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +int +acl_nontrivial (struct acl *a) +{ + /* The normal way to iterate through an ACL is like this: + struct acl_entry *ace; + for (ace = a->acl_ext; ace != acl_last (a); ace = acl_nxt (ace)) + { + struct ace_id *aei; + switch (ace->ace_type) + { + case ACC_PERMIT: + case ACC_DENY: + case ACC_SPECIFY: + ...; + } + for (aei = ace->ace_id; aei != id_last (ace); aei = id_nxt (aei)) + ... + } + */ + return (acl_last (a) != a->acl_ext ? 1 : 0); +} + +# if HAVE_ACLX_GET && defined ACL_AIX_WIP /* newer AIX */ + +/* Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +int +acl_nfs4_nontrivial (nfs4_acl_int_t *a) +{ +# if 1 /* let's try this first */ + return (a->aclEntryN > 0 ? 1 : 0); +# else + int count = a->aclEntryN; + int i; + + for (i = 0; i < count; i++) + { + nfs4_ace_int_t *ace = &a->aclEntry[i]; + + if (!((ace->flags & ACE4_ID_SPECIAL) != 0 + && (ace->aceWho.special_whoid == ACE4_WHO_OWNER + || ace->aceWho.special_whoid == ACE4_WHO_GROUP + || ace->aceWho.special_whoid == ACE4_WHO_EVERYONE) + && ace->aceType == ACE4_ACCESS_ALLOWED_ACE_TYPE + && ace->aceFlags == 0 + && (ace->aceMask & ~(ACE4_READ_DATA | ACE4_LIST_DIRECTORY + | ACE4_WRITE_DATA | ACE4_ADD_FILE + | ACE4_EXECUTE)) == 0)) + return 1; + } + return 0; +# endif +} + +# endif + +#elif USE_ACL && HAVE_ACLSORT /* NonStop Kernel */ + +/* Test an ACL retrieved with ACL_GET. + Return 1 if the given ACL, consisting of COUNT entries, is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +int +acl_nontrivial (int count, struct acl *entries) +{ + int i; + + for (i = 0; i < count; i++) + { + struct acl *ace = &entries[i]; + + /* Note: If ace->a_type = USER_OBJ, ace->a_id is the st_uid from stat(). + If ace->a_type = GROUP_OBJ, ace->a_id is the st_gid from stat(). + We don't need to check ace->a_id in these cases. */ + if (!(ace->a_type == USER_OBJ /* no need to check ace->a_id here */ + || ace->a_type == GROUP_OBJ /* no need to check ace->a_id here */ + || ace->a_type == CLASS_OBJ + || ace->a_type == OTHER_OBJ)) + return 1; + } + return 0; +} + +#endif + +void +free_permission_context (struct permission_context *ctx) +{ +#if USE_ACL +# if HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ + if (ctx->acl) + acl_free (ctx->acl); +# if !HAVE_ACL_TYPE_EXTENDED + if (ctx->default_acl) + acl_free (ctx->default_acl); +# endif + +# elif defined GETACL /* Solaris, Cygwin < 2.5 */ + free (ctx->entries); +# ifdef ACE_GETACL + free (ctx->ace_entries); +# endif + +# elif HAVE_GETACL /* HP-UX */ + +# if HAVE_ACLV_H +# endif + +# elif HAVE_STATACL /* older AIX */ + +# elif HAVE_ACLSORT /* NonStop Kernel */ + +# endif +#endif +} diff --git a/devspec.en_US/project/recutils/lib/acl-internal.h b/devspec.en_US/project/recutils/lib/acl-internal.h new file mode 100755 index 0000000..05833ef --- /dev/null +++ b/devspec.en_US/project/recutils/lib/acl-internal.h @@ -0,0 +1,302 @@ +/* Internal implementation of access control lists. -*- coding: utf-8 -*- + + Copyright (C) 2002-2003, 2005-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + + Written by Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ + +#include "acl.h" + +#include <stdbool.h> +#include <stdlib.h> + +/* All systems define the ACL related API in <sys/acl.h>. */ +#if HAVE_SYS_ACL_H +# include <sys/acl.h> +#endif +#if defined HAVE_FACL && ! defined GETACLCNT && defined ACL_CNT +# define GETACLCNT ACL_CNT +#endif + +/* On Linux and Cygwin >= 2.5, additional ACL related API is available in + <acl/libacl.h>. */ +#ifdef HAVE_ACL_LIBACL_H +# include <acl/libacl.h> +#endif + +/* On HP-UX >= 11.11, additional ACL API is available in <aclv.h>. */ +#if HAVE_ACLV_H +# include <sys/types.h> +# include <aclv.h> +/* HP-UX 11.11 lacks these declarations. */ +extern int acl (char *, int, int, struct acl *); +extern int aclsort (int, int, struct acl *); +#endif + +#include <errno.h> + +#include <limits.h> +#ifndef MIN +# define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif + +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + +#ifndef HAVE_FCHMOD +# define HAVE_FCHMOD false +# define fchmod(fd, mode) (-1) +#endif + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef ACL_INTERNAL_INLINE +# define ACL_INTERNAL_INLINE _GL_INLINE +#endif + +#if USE_ACL + +# if HAVE_ACL_GET_FILE +/* POSIX 1003.1e (draft 17 -- abandoned) specific version. */ +/* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ + +# ifndef MIN_ACL_ENTRIES +# define MIN_ACL_ENTRIES 4 +# endif + +/* POSIX 1003.1e (draft 17) */ +# ifdef HAVE_ACL_GET_FD +/* Most platforms have a 1-argument acl_get_fd, only OSF/1 has a 2-argument + macro(!). */ +# if HAVE_ACL_FREE_TEXT /* OSF/1 */ +ACL_INTERNAL_INLINE acl_t +rpl_acl_get_fd (int fd) +{ + return acl_get_fd (fd, ACL_TYPE_ACCESS); +} +# undef acl_get_fd +# define acl_get_fd rpl_acl_get_fd +# endif +# else +# define HAVE_ACL_GET_FD false +# undef acl_get_fd +# define acl_get_fd(fd) (NULL) +# endif + +/* POSIX 1003.1e (draft 17) */ +# ifdef HAVE_ACL_SET_FD +/* Most platforms have a 2-argument acl_set_fd, only OSF/1 has a 3-argument + macro(!). */ +# if HAVE_ACL_FREE_TEXT /* OSF/1 */ +ACL_INTERNAL_INLINE int +rpl_acl_set_fd (int fd, acl_t acl) +{ + return acl_set_fd (fd, ACL_TYPE_ACCESS, acl); +} +# undef acl_set_fd +# define acl_set_fd rpl_acl_set_fd +# endif +# else +# define HAVE_ACL_SET_FD false +# undef acl_set_fd +# define acl_set_fd(fd, acl) (-1) +# endif + +/* POSIX 1003.1e (draft 13) */ +# if ! HAVE_ACL_FREE_TEXT +# define acl_free_text(buf) acl_free (buf) +# endif + +/* Linux-specific */ +/* Cygwin >= 2.5 implements this function, but it returns 1 for all + directories, thus is unusable. */ +# if !defined HAVE_ACL_EXTENDED_FILE || defined __CYGWIN__ +# undef HAVE_ACL_EXTENDED_FILE +# define HAVE_ACL_EXTENDED_FILE false +# define acl_extended_file(name) (-1) +# endif + +# if ! defined HAVE_ACL_FROM_MODE && ! defined HAVE_ACL_FROM_TEXT +# define acl_from_mode (NULL) +# endif + +/* Set to 0 if a file's mode is stored independently from the ACL. */ +# if (HAVE_ACL_COPY_EXT_NATIVE && HAVE_ACL_CREATE_ENTRY_NP) || defined __sgi /* Mac OS X, IRIX */ +# define MODE_INSIDE_ACL 0 +# endif + +/* Return the number of entries in ACL. + Return -1 and set errno upon failure to determine it. */ +/* Define a replacement for acl_entries if needed. (Only Linux has it.) */ +# if !HAVE_ACL_ENTRIES +# define acl_entries rpl_acl_entries +extern int acl_entries (acl_t); +# endif + +# if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ +/* ACL is an ACL, from a file, stored as type ACL_TYPE_EXTENDED. + Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial. */ +extern int acl_extended_nontrivial (acl_t); +# else +/* ACL is an ACL, from a file, stored as type ACL_TYPE_ACCESS. + Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. + Return -1 and set errno upon failure to determine it. */ +extern int acl_access_nontrivial (acl_t); + +/* ACL is an ACL, from a file, stored as type ACL_TYPE_DEFAULT. + Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. + Return -1 and set errno upon failure to determine it. */ +extern int acl_default_nontrivial (acl_t); +# endif + +# elif HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */ + +/* Set to 0 if a file's mode is stored independently from the ACL. */ +# if defined __CYGWIN__ /* Cygwin */ +# define MODE_INSIDE_ACL 0 +# endif + +/* Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +extern int acl_nontrivial (int count, aclent_t *entries) _GL_ATTRIBUTE_PURE; + +# ifdef ACE_GETACL /* Solaris 10 */ + +/* Test an ACL retrieved with ACE_GETACL. + Return 1 if the given ACL, consisting of COUNT entries, is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +extern int acl_ace_nontrivial (int count, ace_t *entries) _GL_ATTRIBUTE_PURE; + +/* Definitions for when the built executable is executed on Solaris 10 + (newer version) or Solaris 11. */ +/* For a_type. */ +# define OLD_ALLOW 0 +# define OLD_DENY 1 +# define NEW_ACE_ACCESS_ALLOWED_ACE_TYPE 0 /* replaces ALLOW */ +# define NEW_ACE_ACCESS_DENIED_ACE_TYPE 1 /* replaces DENY */ +/* For a_flags. */ +# define OLD_ACE_OWNER 0x0100 +# define OLD_ACE_GROUP 0x0200 +# define OLD_ACE_OTHER 0x0400 +# define NEW_ACE_OWNER 0x1000 +# define NEW_ACE_GROUP 0x2000 +# define NEW_ACE_IDENTIFIER_GROUP 0x0040 +# define NEW_ACE_EVERYONE 0x4000 +/* For a_access_mask. */ +# define NEW_ACE_READ_DATA 0x001 /* corresponds to 'r' */ +# define NEW_ACE_WRITE_DATA 0x002 /* corresponds to 'w' */ +# define NEW_ACE_APPEND_DATA 0x004 +# define NEW_ACE_READ_NAMED_ATTRS 0x008 +# define NEW_ACE_WRITE_NAMED_ATTRS 0x010 +# define NEW_ACE_EXECUTE 0x020 +# define NEW_ACE_DELETE_CHILD 0x040 +# define NEW_ACE_READ_ATTRIBUTES 0x080 +# define NEW_ACE_WRITE_ATTRIBUTES 0x100 +# define NEW_ACE_DELETE 0x10000 +# define NEW_ACE_READ_ACL 0x20000 +# define NEW_ACE_WRITE_ACL 0x40000 +# define NEW_ACE_WRITE_OWNER 0x80000 +# define NEW_ACE_SYNCHRONIZE 0x100000 + +# endif + +# elif HAVE_GETACL /* HP-UX */ + +/* Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +extern int acl_nontrivial (int count, struct acl_entry *entries); + +# if HAVE_ACLV_H /* HP-UX >= 11.11 */ + +/* Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +extern int aclv_nontrivial (int count, struct acl *entries); + +# endif + +# elif HAVE_ACLX_GET && 0 /* AIX */ + +/* TODO */ + +# elif HAVE_STATACL /* older AIX */ + +/* Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +extern int acl_nontrivial (struct acl *a); + +# elif HAVE_ACLSORT /* NonStop Kernel */ + +/* Return 1 if the given ACL is non-trivial. + Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ +extern int acl_nontrivial (int count, struct acl *entries); + +# endif + +/* Set to 1 if a file's mode is implicit by the ACL. */ +# ifndef MODE_INSIDE_ACL +# define MODE_INSIDE_ACL 1 +# endif + +#endif + +struct permission_context { + mode_t mode; +#if USE_ACL +# if HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ + acl_t acl; +# if !HAVE_ACL_TYPE_EXTENDED + acl_t default_acl; +# endif + bool acls_not_supported; + +# elif defined GETACL /* Solaris, Cygwin < 2.5 */ + int count; + aclent_t *entries; +# ifdef ACE_GETACL + int ace_count; + ace_t *ace_entries; +# endif + +# elif HAVE_GETACL /* HP-UX */ + struct acl_entry entries[NACLENTRIES]; + int count; +# if HAVE_ACLV_H + struct acl aclv_entries[NACLVENTRIES]; + int aclv_count; +# endif + +# elif HAVE_STATACL /* older AIX */ + union { struct acl a; char room[4096]; } u; + bool have_u; + +# elif HAVE_ACLSORT /* NonStop Kernel */ + struct acl entries[NACLENTRIES]; + int count; + +# endif +#endif +}; + +int get_permissions (const char *, int, mode_t, struct permission_context *); +int set_permissions (struct permission_context *, const char *, int); +void free_permission_context (struct permission_context *); + +_GL_INLINE_HEADER_END diff --git a/devspec.en_US/project/recutils/lib/acl.h b/devspec.en_US/project/recutils/lib/acl.h new file mode 100755 index 0000000..904606d --- /dev/null +++ b/devspec.en_US/project/recutils/lib/acl.h @@ -0,0 +1,35 @@ +/* acl.c - access control lists + + Copyright (C) 2002, 2008-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + + Written by Paul Eggert. */ + +#ifndef _GL_ACL_H +#define _GL_ACL_H 1 + +#include <stdbool.h> +#include <sys/types.h> +#include <sys/stat.h> + +bool acl_errno_valid (int) _GL_ATTRIBUTE_CONST; +int file_has_acl (char const *, struct stat const *); +int qset_acl (char const *, int, mode_t); +int set_acl (char const *, int, mode_t); +int qcopy_acl (char const *, int, char const *, int, mode_t); +int copy_acl (char const *, int, char const *, int, mode_t); +int chmod_or_fchmod (char const *, int, mode_t); + +#endif diff --git a/devspec.en_US/project/recutils/lib/acl_entries.c b/devspec.en_US/project/recutils/lib/acl_entries.c new file mode 100755 index 0000000..19ac3c3 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/acl_entries.c @@ -0,0 +1,75 @@ +/* Return the number of entries in an ACL. + + Copyright (C) 2002-2003, 2005-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + + Written by Paul Eggert and Andreas Gruenbacher. */ + +#include <config.h> + +#include "acl-internal.h" + +/* This file assumes POSIX-draft like ACLs + (Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5). */ + +/* Return the number of entries in ACL. + Return -1 and set errno upon failure to determine it. */ + +int +acl_entries (acl_t acl) +{ + int count = 0; + + if (acl != NULL) + { +#if HAVE_ACL_FIRST_ENTRY /* Linux, FreeBSD, Mac OS X, Cygwin >= 2.5 */ +# if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ + /* acl_get_entry returns 0 when it successfully fetches an entry, + and -1/EINVAL at the end. */ + acl_entry_t ace; + int got_one; + + for (got_one = acl_get_entry (acl, ACL_FIRST_ENTRY, &ace); + got_one >= 0; + got_one = acl_get_entry (acl, ACL_NEXT_ENTRY, &ace)) + count++; +# else /* Linux, FreeBSD, Cygwin >= 2.5 */ + /* acl_get_entry returns 1 when it successfully fetches an entry, + and 0 at the end. */ + acl_entry_t ace; + int got_one; + + for (got_one = acl_get_entry (acl, ACL_FIRST_ENTRY, &ace); + got_one > 0; + got_one = acl_get_entry (acl, ACL_NEXT_ENTRY, &ace)) + count++; + if (got_one < 0) + return -1; +# endif +#else /* IRIX, Tru64 */ +# if HAVE_ACL_TO_SHORT_TEXT /* IRIX */ + /* Don't use acl_get_entry: it is undocumented. */ + count = acl->acl_cnt; +# endif +# if HAVE_ACL_FREE_TEXT /* Tru64 */ + /* Don't use acl_get_entry: it takes only one argument and does not + work. */ + count = acl->acl_num; +# endif +#endif + } + + return count; +} diff --git a/devspec.en_US/project/recutils/lib/alignof.h b/devspec.en_US/project/recutils/lib/alignof.h new file mode 100755 index 0000000..46f4ad0 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/alignof.h @@ -0,0 +1,50 @@ +/* Determine alignment of types. + Copyright (C) 2003-2004, 2006, 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _ALIGNOF_H +#define _ALIGNOF_H + +#include <stddef.h> + +/* alignof_slot (TYPE) + Determine the alignment of a structure slot (field) of a given type, + at compile time. Note that the result depends on the ABI. + This is the same as alignof (TYPE) and _Alignof (TYPE), defined in + <stdalign.h> if __alignof_is_defined is 1. + Note: The result cannot be used as a value for an 'enum' constant, + due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc. */ +#if defined __cplusplus + template <class type> struct alignof_helper { char __slot1; type __slot2; }; +# define alignof_slot(type) offsetof (alignof_helper<type>, __slot2) +#else +# define alignof_slot(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) +#endif + +/* alignof_type (TYPE) + Determine the good alignment of an object of the given type at compile time. + Note that this is not necessarily the same as alignof_slot(type). + For example, with GNU C on x86 platforms: alignof_type(double) = 8, but + - when -malign-double is not specified: alignof_slot(double) = 4, + - when -malign-double is specified: alignof_slot(double) = 8. + Note: The result cannot be used as a value for an 'enum' constant, + due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc. */ +#if defined __GNUC__ || defined __IBM__ALIGNOF__ +# define alignof_type __alignof__ +#else +# define alignof_type alignof_slot +#endif + +#endif /* _ALIGNOF_H */ diff --git a/devspec.en_US/project/recutils/lib/alloca.c b/devspec.en_US/project/recutils/lib/alloca.c new file mode 100755 index 0000000..ee0f018 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/alloca.c @@ -0,0 +1,478 @@ +/* alloca.c -- allocate automatically reclaimed memory + (Mostly) portable public-domain implementation -- D A Gwyn + + This implementation of the PWB library alloca function, + which is used to allocate space off the run-time stack so + that it is automatically reclaimed upon procedure exit, + was inspired by discussions with J. Q. Johnson of Cornell. + J.Otto Tennant <jot@cray.com> contributed the Cray support. + + There are some preprocessor constants that can + be defined when compiling for your specific system, for + improved efficiency; however, the defaults should be okay. + + The general concept of this implementation is to keep + track of all alloca-allocated blocks, and reclaim any + that are found to be deeper in the stack than the current + invocation. This heuristic does not reclaim storage as + soon as it becomes invalid, but it will do so eventually. + + As a special case, alloca(0) reclaims storage without + allocating any. It is a good idea to use alloca(0) in + your main control loop, etc. to force garbage collection. */ + +#include <config.h> + +#include <alloca.h> + +#include <string.h> +#include <stdlib.h> + +#ifdef emacs +# include "lisp.h" +# include "blockinput.h" +# ifdef EMACS_FREE +# undef free +# define free EMACS_FREE +# endif +#else +# define memory_full() abort () +#endif + +/* If compiling with GCC 2, this file's not needed. */ +#if !defined (__GNUC__) || __GNUC__ < 2 + +/* If someone has defined alloca as a macro, + there must be some other way alloca is supposed to work. */ +# ifndef alloca + +# ifdef emacs +# ifdef static +/* actually, only want this if static is defined as "" + -- this is for usg, in which emacs must undefine static + in order to make unexec workable + */ +# ifndef STACK_DIRECTION +you +lose +-- must know STACK_DIRECTION at compile-time +/* Using #error here is not wise since this file should work for + old and obscure compilers. */ +# endif /* STACK_DIRECTION undefined */ +# endif /* static */ +# endif /* emacs */ + +/* If your stack is a linked list of frames, you have to + provide an "address metric" ADDRESS_FUNCTION macro. */ + +# if defined (CRAY) && defined (CRAY_STACKSEG_END) +long i00afunc (); +# define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) +# else +# define ADDRESS_FUNCTION(arg) &(arg) +# endif + +/* Define STACK_DIRECTION if you know the direction of stack + growth for your system; otherwise it will be automatically + deduced at run-time. + + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ + +# ifndef STACK_DIRECTION +# define STACK_DIRECTION 0 /* Direction unknown. */ +# endif + +# if STACK_DIRECTION != 0 + +# define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ + +# else /* STACK_DIRECTION == 0; need run-time code. */ + +static int stack_dir; /* 1 or -1 once known. */ +# define STACK_DIR stack_dir + +static int +find_stack_direction (int *addr, int depth) +{ + int dir, dummy = 0; + if (! addr) + addr = &dummy; + *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; + dir = depth ? find_stack_direction (addr, depth - 1) : 0; + return dir + dummy; +} + +# endif /* STACK_DIRECTION == 0 */ + +/* An "alloca header" is used to: + (a) chain together all alloca'ed blocks; + (b) keep track of stack depth. + + It is very important that sizeof(header) agree with malloc + alignment chunk size. The following default should work okay. */ + +# ifndef ALIGN_SIZE +# define ALIGN_SIZE sizeof(double) +# endif + +typedef union hdr +{ + char align[ALIGN_SIZE]; /* To force sizeof(header). */ + struct + { + union hdr *next; /* For chaining headers. */ + char *deep; /* For stack depth measure. */ + } h; +} header; + +static header *last_alloca_header = NULL; /* -> last alloca header. */ + +/* Return a pointer to at least SIZE bytes of storage, + which will be automatically reclaimed upon exit from + the procedure that called alloca. Originally, this space + was supposed to be taken from the current stack frame of the + caller, but that method cannot be made to work for some + implementations of C, for example under Gould's UTX/32. */ + +void * +alloca (size_t size) +{ + auto char probe; /* Probes stack depth: */ + register char *depth = ADDRESS_FUNCTION (probe); + +# if STACK_DIRECTION == 0 + if (STACK_DIR == 0) /* Unknown growth direction. */ + STACK_DIR = find_stack_direction (NULL, (size & 1) + 20); +# endif + + /* Reclaim garbage, defined as all alloca'd storage that + was allocated from deeper in the stack than currently. */ + + { + register header *hp; /* Traverses linked list. */ + +# ifdef emacs + BLOCK_INPUT; +# endif + + for (hp = last_alloca_header; hp != NULL;) + if ((STACK_DIR > 0 && hp->h.deep > depth) + || (STACK_DIR < 0 && hp->h.deep < depth)) + { + register header *np = hp->h.next; + + free (hp); /* Collect garbage. */ + + hp = np; /* -> next header. */ + } + else + break; /* Rest are not deeper. */ + + last_alloca_header = hp; /* -> last valid storage. */ + +# ifdef emacs + UNBLOCK_INPUT; +# endif + } + + if (size == 0) + return NULL; /* No allocation required. */ + + /* Allocate combined header + user data storage. */ + + { + /* Address of header. */ + register header *new; + + size_t combined_size = sizeof (header) + size; + if (combined_size < sizeof (header)) + memory_full (); + + new = malloc (combined_size); + + if (! new) + memory_full (); + + new->h.next = last_alloca_header; + new->h.deep = depth; + + last_alloca_header = new; + + /* User storage begins just after header. */ + + return (void *) (new + 1); + } +} + +# if defined (CRAY) && defined (CRAY_STACKSEG_END) + +# ifdef DEBUG_I00AFUNC +# include <stdio.h> +# endif + +# ifndef CRAY_STACK +# define CRAY_STACK +# ifndef CRAY2 +/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */ +struct stack_control_header + { + long shgrow:32; /* Number of times stack has grown. */ + long shaseg:32; /* Size of increments to stack. */ + long shhwm:32; /* High water mark of stack. */ + long shsize:32; /* Current size of stack (all segments). */ + }; + +/* The stack segment linkage control information occurs at + the high-address end of a stack segment. (The stack + grows from low addresses to high addresses.) The initial + part of the stack segment linkage control information is + 0200 (octal) words. This provides for register storage + for the routine which overflows the stack. */ + +struct stack_segment_linkage + { + long ss[0200]; /* 0200 overflow words. */ + long sssize:32; /* Number of words in this segment. */ + long ssbase:32; /* Offset to stack base. */ + long:32; + long sspseg:32; /* Offset to linkage control of previous + segment of stack. */ + long:32; + long sstcpt:32; /* Pointer to task common address block. */ + long sscsnm; /* Private control structure number for + microtasking. */ + long ssusr1; /* Reserved for user. */ + long ssusr2; /* Reserved for user. */ + long sstpid; /* Process ID for pid based multi-tasking. */ + long ssgvup; /* Pointer to multitasking thread giveup. */ + long sscray[7]; /* Reserved for Cray Research. */ + long ssa0; + long ssa1; + long ssa2; + long ssa3; + long ssa4; + long ssa5; + long ssa6; + long ssa7; + long sss0; + long sss1; + long sss2; + long sss3; + long sss4; + long sss5; + long sss6; + long sss7; + }; + +# else /* CRAY2 */ +/* The following structure defines the vector of words + returned by the STKSTAT library routine. */ +struct stk_stat + { + long now; /* Current total stack size. */ + long maxc; /* Amount of contiguous space which would + be required to satisfy the maximum + stack demand to date. */ + long high_water; /* Stack high-water mark. */ + long overflows; /* Number of stack overflow ($STKOFEN) calls. */ + long hits; /* Number of internal buffer hits. */ + long extends; /* Number of block extensions. */ + long stko_mallocs; /* Block allocations by $STKOFEN. */ + long underflows; /* Number of stack underflow calls ($STKRETN). */ + long stko_free; /* Number of deallocations by $STKRETN. */ + long stkm_free; /* Number of deallocations by $STKMRET. */ + long segments; /* Current number of stack segments. */ + long maxs; /* Maximum number of stack segments so far. */ + long pad_size; /* Stack pad size. */ + long current_address; /* Current stack segment address. */ + long current_size; /* Current stack segment size. This + number is actually corrupted by STKSTAT to + include the fifteen word trailer area. */ + long initial_address; /* Address of initial segment. */ + long initial_size; /* Size of initial segment. */ + }; + +/* The following structure describes the data structure which trails + any stack segment. I think that the description in 'asdef' is + out of date. I only describe the parts that I am sure about. */ + +struct stk_trailer + { + long this_address; /* Address of this block. */ + long this_size; /* Size of this block (does not include + this trailer). */ + long unknown2; + long unknown3; + long link; /* Address of trailer block of previous + segment. */ + long unknown5; + long unknown6; + long unknown7; + long unknown8; + long unknown9; + long unknown10; + long unknown11; + long unknown12; + long unknown13; + long unknown14; + }; + +# endif /* CRAY2 */ +# endif /* not CRAY_STACK */ + +# ifdef CRAY2 +/* Determine a "stack measure" for an arbitrary ADDRESS. + I doubt that "lint" will like this much. */ + +static long +i00afunc (long *address) +{ + struct stk_stat status; + struct stk_trailer *trailer; + long *block, size; + long result = 0; + + /* We want to iterate through all of the segments. The first + step is to get the stack status structure. We could do this + more quickly and more directly, perhaps, by referencing the + $LM00 common block, but I know that this works. */ + + STKSTAT (&status); + + /* Set up the iteration. */ + + trailer = (struct stk_trailer *) (status.current_address + + status.current_size + - 15); + + /* There must be at least one stack segment. Therefore it is + a fatal error if "trailer" is null. */ + + if (trailer == 0) + abort (); + + /* Discard segments that do not contain our argument address. */ + + while (trailer != 0) + { + block = (long *) trailer->this_address; + size = trailer->this_size; + if (block == 0 || size == 0) + abort (); + trailer = (struct stk_trailer *) trailer->link; + if ((block <= address) && (address < (block + size))) + break; + } + + /* Set the result to the offset in this segment and add the sizes + of all predecessor segments. */ + + result = address - block; + + if (trailer == 0) + { + return result; + } + + do + { + if (trailer->this_size <= 0) + abort (); + result += trailer->this_size; + trailer = (struct stk_trailer *) trailer->link; + } + while (trailer != 0); + + /* We are done. Note that if you present a bogus address (one + not in any segment), you will get a different number back, formed + from subtracting the address of the first block. This is probably + not what you want. */ + + return (result); +} + +# else /* not CRAY2 */ +/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP. + Determine the number of the cell within the stack, + given the address of the cell. The purpose of this + routine is to linearize, in some sense, stack addresses + for alloca. */ + +static long +i00afunc (long address) +{ + long stkl = 0; + + long size, pseg, this_segment, stack; + long result = 0; + + struct stack_segment_linkage *ssptr; + + /* Register B67 contains the address of the end of the + current stack segment. If you (as a subprogram) store + your registers on the stack and find that you are past + the contents of B67, you have overflowed the segment. + + B67 also points to the stack segment linkage control + area, which is what we are really interested in. */ + + stkl = CRAY_STACKSEG_END (); + ssptr = (struct stack_segment_linkage *) stkl; + + /* If one subtracts 'size' from the end of the segment, + one has the address of the first word of the segment. + + If this is not the first segment, 'pseg' will be + nonzero. */ + + pseg = ssptr->sspseg; + size = ssptr->sssize; + + this_segment = stkl - size; + + /* It is possible that calling this routine itself caused + a stack overflow. Discard stack segments which do not + contain the target address. */ + + while (!(this_segment <= address && address <= stkl)) + { +# ifdef DEBUG_I00AFUNC + fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl); +# endif + if (pseg == 0) + break; + stkl = stkl - pseg; + ssptr = (struct stack_segment_linkage *) stkl; + size = ssptr->sssize; + pseg = ssptr->sspseg; + this_segment = stkl - size; + } + + result = address - this_segment; + + /* If you subtract pseg from the current end of the stack, + you get the address of the previous stack segment's end. + This seems a little convoluted to me, but I'll bet you save + a cycle somewhere. */ + + while (pseg != 0) + { +# ifdef DEBUG_I00AFUNC + fprintf (stderr, "%011o %011o\n", pseg, size); +# endif + stkl = stkl - pseg; + ssptr = (struct stack_segment_linkage *) stkl; + size = ssptr->sssize; + pseg = ssptr->sspseg; + result += size; + } + return (result); +} + +# endif /* not CRAY2 */ +# endif /* CRAY */ + +# endif /* no alloca */ +#endif /* not GCC 2 */ diff --git a/devspec.en_US/project/recutils/lib/alloca.h b/devspec.en_US/project/recutils/lib/alloca.h new file mode 100755 index 0000000..949017b --- /dev/null +++ b/devspec.en_US/project/recutils/lib/alloca.h @@ -0,0 +1,66 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Memory allocation on the stack. + + Copyright (C) 1995, 1999, 2001-2004, 2006-2019 Free Software Foundation, + Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, see + <https://www.gnu.org/licenses/>. + */ + +/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H + means there is a real alloca function. */ +#ifndef _GL_ALLOCA_H +#define _GL_ALLOCA_H + +/* alloca (N) returns a pointer to N bytes of memory + allocated on the stack, which will last until the function returns. + Use of alloca should be avoided: + - inside arguments of function calls - undefined behaviour, + - in inline functions - the allocation may actually last until the + calling function returns, + - for huge N (say, N >= 65536) - you never know how large (or small) + the stack is, and when the stack cannot fulfill the memory allocation + request, the program just crashes. + */ + +#ifndef alloca +# ifdef __GNUC__ +# define alloca __builtin_alloca +# elif defined _AIX +# define alloca __alloca +# elif defined _MSC_VER +# include <malloc.h> +# define alloca _alloca +# elif defined __DECC && defined __VMS +# define alloca __ALLOCA +# elif defined __TANDEM && defined _TNS_E_TARGET +# ifdef __cplusplus +extern "C" +# endif +void *_alloca (unsigned short); +# pragma intrinsic (_alloca) +# define alloca _alloca +# elif defined __MVS__ +# include <stdlib.h> +# else +# include <stddef.h> +# ifdef __cplusplus +extern "C" +# endif +void *alloca (size_t); +# endif +#endif + +#endif /* _GL_ALLOCA_H */ diff --git a/devspec.en_US/project/recutils/lib/alloca.in.h b/devspec.en_US/project/recutils/lib/alloca.in.h new file mode 100755 index 0000000..ec81e11 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/alloca.in.h @@ -0,0 +1,65 @@ +/* Memory allocation on the stack. + + Copyright (C) 1995, 1999, 2001-2004, 2006-2019 Free Software Foundation, + Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, see + <https://www.gnu.org/licenses/>. + */ + +/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H + means there is a real alloca function. */ +#ifndef _GL_ALLOCA_H +#define _GL_ALLOCA_H + +/* alloca (N) returns a pointer to N bytes of memory + allocated on the stack, which will last until the function returns. + Use of alloca should be avoided: + - inside arguments of function calls - undefined behaviour, + - in inline functions - the allocation may actually last until the + calling function returns, + - for huge N (say, N >= 65536) - you never know how large (or small) + the stack is, and when the stack cannot fulfill the memory allocation + request, the program just crashes. + */ + +#ifndef alloca +# ifdef __GNUC__ +# define alloca __builtin_alloca +# elif defined _AIX +# define alloca __alloca +# elif defined _MSC_VER +# include <malloc.h> +# define alloca _alloca +# elif defined __DECC && defined __VMS +# define alloca __ALLOCA +# elif defined __TANDEM && defined _TNS_E_TARGET +# ifdef __cplusplus +extern "C" +# endif +void *_alloca (unsigned short); +# pragma intrinsic (_alloca) +# define alloca _alloca +# elif defined __MVS__ +# include <stdlib.h> +# else +# include <stddef.h> +# ifdef __cplusplus +extern "C" +# endif +void *alloca (size_t); +# endif +#endif + +#endif /* _GL_ALLOCA_H */ diff --git a/devspec.en_US/project/recutils/lib/arg-nonnull.h b/devspec.en_US/project/recutils/lib/arg-nonnull.h new file mode 100755 index 0000000..ad8c26c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/arg-nonnull.h @@ -0,0 +1,26 @@ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif diff --git a/devspec.en_US/project/recutils/lib/asnprintf.c b/devspec.en_US/project/recutils/lib/asnprintf.c new file mode 100755 index 0000000..d2a8c09 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/asnprintf.c @@ -0,0 +1,34 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006, 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include "vasnprintf.h" + +#include <stdarg.h> + +char * +asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) +{ + va_list args; + char *result; + + va_start (args, format); + result = vasnprintf (resultbuf, lengthp, format, args); + va_end (args); + return result; +} diff --git a/devspec.en_US/project/recutils/lib/asprintf.c b/devspec.en_US/project/recutils/lib/asprintf.c new file mode 100755 index 0000000..6cbd062 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/asprintf.c @@ -0,0 +1,39 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007, 2009-2019 Free Software Foundation, + Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#ifdef IN_LIBASPRINTF +# include "vasprintf.h" +#else +# include <stdio.h> +#endif + +#include <stdarg.h> + +int +asprintf (char **resultp, const char *format, ...) +{ + va_list args; + int result; + + va_start (args, format); + result = vasprintf (resultp, format, args); + va_end (args); + return result; +} diff --git a/devspec.en_US/project/recutils/lib/base64.c b/devspec.en_US/project/recutils/lib/base64.c new file mode 100755 index 0000000..84a4e82 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/base64.c @@ -0,0 +1,605 @@ +/* base64.c -- Encode binary data using printable characters. + Copyright (C) 1999-2001, 2004-2006, 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Simon Josefsson. Partially adapted from GNU MailUtils + * (mailbox/filter_trans.c, as of 2004-11-28). Improved by review + * from Paul Eggert, Bruno Haible, and Stepan Kasal. + * + * See also RFC 4648 <https://www.ietf.org/rfc/rfc4648.txt>. + * + * Be careful with error checking. Here is how you would typically + * use these functions: + * + * bool ok = base64_decode_alloc (in, inlen, &out, &outlen); + * if (!ok) + * FAIL: input was not valid base64 + * if (out == NULL) + * FAIL: memory allocation error + * OK: data in OUT/OUTLEN + * + * size_t outlen = base64_encode_alloc (in, inlen, &out); + * if (out == NULL && outlen == 0 && inlen != 0) + * FAIL: input too long + * if (out == NULL) + * FAIL: memory allocation error + * OK: data in OUT/OUTLEN. + * + */ + +#include <config.h> + +/* Get prototype. */ +#include "base64.h" + +/* Get malloc. */ +#include <stdlib.h> + +/* Get UCHAR_MAX. */ +#include <limits.h> + +#include <string.h> + +/* C89 compliant way to cast 'char' to 'unsigned char'. */ +static unsigned char +to_uchar (char ch) +{ + return ch; +} + +static const char b64c[64] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +/* Base64 encode IN array of size INLEN into OUT array. OUT needs + to be of length >= BASE64_LENGTH(INLEN), and INLEN needs to be + a multiple of 3. */ +static void +base64_encode_fast (const char *restrict in, size_t inlen, char *restrict out) +{ + while (inlen) + { + *out++ = b64c[to_uchar (in[0]) >> 2]; + *out++ = b64c[((to_uchar (in[0]) << 4) + (to_uchar (in[1]) >> 4)) & 0x3f]; + *out++ = b64c[((to_uchar (in[1]) << 2) + (to_uchar (in[2]) >> 6)) & 0x3f]; + *out++ = b64c[to_uchar (in[2]) & 0x3f]; + + inlen -= 3; + in += 3; + } +} + +/* Base64 encode IN array of size INLEN into OUT array of size OUTLEN. + If OUTLEN is less than BASE64_LENGTH(INLEN), write as many bytes as + possible. If OUTLEN is larger than BASE64_LENGTH(INLEN), also zero + terminate the output buffer. */ +void +base64_encode (const char *restrict in, size_t inlen, + char *restrict out, size_t outlen) +{ + /* Note this outlen constraint can be enforced at compile time. + I.E. that the output buffer is exactly large enough to hold + the encoded inlen bytes. The inlen constraints (of corresponding + to outlen, and being a multiple of 3) can change at runtime + at the end of input. However the common case when reading + large inputs is to have both constraints satisfied, so we depend + on both in base_encode_fast(). */ + if (outlen % 4 == 0 && inlen == outlen / 4 * 3) + { + base64_encode_fast (in, inlen, out); + return; + } + + while (inlen && outlen) + { + *out++ = b64c[to_uchar (in[0]) >> 2]; + if (!--outlen) + break; + *out++ = b64c[((to_uchar (in[0]) << 4) + + (--inlen ? to_uchar (in[1]) >> 4 : 0)) + & 0x3f]; + if (!--outlen) + break; + *out++ = + (inlen + ? b64c[((to_uchar (in[1]) << 2) + + (--inlen ? to_uchar (in[2]) >> 6 : 0)) + & 0x3f] + : '='); + if (!--outlen) + break; + *out++ = inlen ? b64c[to_uchar (in[2]) & 0x3f] : '='; + if (!--outlen) + break; + if (inlen) + inlen--; + if (inlen) + in += 3; + } + + if (outlen) + *out = '\0'; +} + +/* Allocate a buffer and store zero terminated base64 encoded data + from array IN of size INLEN, returning BASE64_LENGTH(INLEN), i.e., + the length of the encoded data, excluding the terminating zero. On + return, the OUT variable will hold a pointer to newly allocated + memory that must be deallocated by the caller. If output string + length would overflow, 0 is returned and OUT is set to NULL. If + memory allocation failed, OUT is set to NULL, and the return value + indicates length of the requested memory block, i.e., + BASE64_LENGTH(inlen) + 1. */ +size_t +base64_encode_alloc (const char *in, size_t inlen, char **out) +{ + size_t outlen = 1 + BASE64_LENGTH (inlen); + + /* Check for overflow in outlen computation. + * + * If there is no overflow, outlen >= inlen. + * + * If the operation (inlen + 2) overflows then it yields at most +1, so + * outlen is 0. + * + * If the multiplication overflows, we lose at least half of the + * correct value, so the result is < ((inlen + 2) / 3) * 2, which is + * less than (inlen + 2) * 0.66667, which is less than inlen as soon as + * (inlen > 4). + */ + if (inlen > outlen) + { + *out = NULL; + return 0; + } + + *out = malloc (outlen); + if (!*out) + return outlen; + + base64_encode (in, inlen, *out, outlen); + + return outlen - 1; +} + +/* With this approach this file works independent of the charset used + (think EBCDIC). However, it does assume that the characters in the + Base64 alphabet (A-Za-z0-9+/) are encoded in 0..255. POSIX + 1003.1-2001 require that char and unsigned char are 8-bit + quantities, though, taking care of that problem. But this may be a + potential problem on non-POSIX C99 platforms. + + IBM C V6 for AIX mishandles "#define B64(x) ...'x'...", so use "_" + as the formal parameter rather than "x". */ +#define B64(_) \ + ((_) == 'A' ? 0 \ + : (_) == 'B' ? 1 \ + : (_) == 'C' ? 2 \ + : (_) == 'D' ? 3 \ + : (_) == 'E' ? 4 \ + : (_) == 'F' ? 5 \ + : (_) == 'G' ? 6 \ + : (_) == 'H' ? 7 \ + : (_) == 'I' ? 8 \ + : (_) == 'J' ? 9 \ + : (_) == 'K' ? 10 \ + : (_) == 'L' ? 11 \ + : (_) == 'M' ? 12 \ + : (_) == 'N' ? 13 \ + : (_) == 'O' ? 14 \ + : (_) == 'P' ? 15 \ + : (_) == 'Q' ? 16 \ + : (_) == 'R' ? 17 \ + : (_) == 'S' ? 18 \ + : (_) == 'T' ? 19 \ + : (_) == 'U' ? 20 \ + : (_) == 'V' ? 21 \ + : (_) == 'W' ? 22 \ + : (_) == 'X' ? 23 \ + : (_) == 'Y' ? 24 \ + : (_) == 'Z' ? 25 \ + : (_) == 'a' ? 26 \ + : (_) == 'b' ? 27 \ + : (_) == 'c' ? 28 \ + : (_) == 'd' ? 29 \ + : (_) == 'e' ? 30 \ + : (_) == 'f' ? 31 \ + : (_) == 'g' ? 32 \ + : (_) == 'h' ? 33 \ + : (_) == 'i' ? 34 \ + : (_) == 'j' ? 35 \ + : (_) == 'k' ? 36 \ + : (_) == 'l' ? 37 \ + : (_) == 'm' ? 38 \ + : (_) == 'n' ? 39 \ + : (_) == 'o' ? 40 \ + : (_) == 'p' ? 41 \ + : (_) == 'q' ? 42 \ + : (_) == 'r' ? 43 \ + : (_) == 's' ? 44 \ + : (_) == 't' ? 45 \ + : (_) == 'u' ? 46 \ + : (_) == 'v' ? 47 \ + : (_) == 'w' ? 48 \ + : (_) == 'x' ? 49 \ + : (_) == 'y' ? 50 \ + : (_) == 'z' ? 51 \ + : (_) == '0' ? 52 \ + : (_) == '1' ? 53 \ + : (_) == '2' ? 54 \ + : (_) == '3' ? 55 \ + : (_) == '4' ? 56 \ + : (_) == '5' ? 57 \ + : (_) == '6' ? 58 \ + : (_) == '7' ? 59 \ + : (_) == '8' ? 60 \ + : (_) == '9' ? 61 \ + : (_) == '+' ? 62 \ + : (_) == '/' ? 63 \ + : -1) + +static const signed char b64[0x100] = { + B64 (0), B64 (1), B64 (2), B64 (3), + B64 (4), B64 (5), B64 (6), B64 (7), + B64 (8), B64 (9), B64 (10), B64 (11), + B64 (12), B64 (13), B64 (14), B64 (15), + B64 (16), B64 (17), B64 (18), B64 (19), + B64 (20), B64 (21), B64 (22), B64 (23), + B64 (24), B64 (25), B64 (26), B64 (27), + B64 (28), B64 (29), B64 (30), B64 (31), + B64 (32), B64 (33), B64 (34), B64 (35), + B64 (36), B64 (37), B64 (38), B64 (39), + B64 (40), B64 (41), B64 (42), B64 (43), + B64 (44), B64 (45), B64 (46), B64 (47), + B64 (48), B64 (49), B64 (50), B64 (51), + B64 (52), B64 (53), B64 (54), B64 (55), + B64 (56), B64 (57), B64 (58), B64 (59), + B64 (60), B64 (61), B64 (62), B64 (63), + B64 (64), B64 (65), B64 (66), B64 (67), + B64 (68), B64 (69), B64 (70), B64 (71), + B64 (72), B64 (73), B64 (74), B64 (75), + B64 (76), B64 (77), B64 (78), B64 (79), + B64 (80), B64 (81), B64 (82), B64 (83), + B64 (84), B64 (85), B64 (86), B64 (87), + B64 (88), B64 (89), B64 (90), B64 (91), + B64 (92), B64 (93), B64 (94), B64 (95), + B64 (96), B64 (97), B64 (98), B64 (99), + B64 (100), B64 (101), B64 (102), B64 (103), + B64 (104), B64 (105), B64 (106), B64 (107), + B64 (108), B64 (109), B64 (110), B64 (111), + B64 (112), B64 (113), B64 (114), B64 (115), + B64 (116), B64 (117), B64 (118), B64 (119), + B64 (120), B64 (121), B64 (122), B64 (123), + B64 (124), B64 (125), B64 (126), B64 (127), + B64 (128), B64 (129), B64 (130), B64 (131), + B64 (132), B64 (133), B64 (134), B64 (135), + B64 (136), B64 (137), B64 (138), B64 (139), + B64 (140), B64 (141), B64 (142), B64 (143), + B64 (144), B64 (145), B64 (146), B64 (147), + B64 (148), B64 (149), B64 (150), B64 (151), + B64 (152), B64 (153), B64 (154), B64 (155), + B64 (156), B64 (157), B64 (158), B64 (159), + B64 (160), B64 (161), B64 (162), B64 (163), + B64 (164), B64 (165), B64 (166), B64 (167), + B64 (168), B64 (169), B64 (170), B64 (171), + B64 (172), B64 (173), B64 (174), B64 (175), + B64 (176), B64 (177), B64 (178), B64 (179), + B64 (180), B64 (181), B64 (182), B64 (183), + B64 (184), B64 (185), B64 (186), B64 (187), + B64 (188), B64 (189), B64 (190), B64 (191), + B64 (192), B64 (193), B64 (194), B64 (195), + B64 (196), B64 (197), B64 (198), B64 (199), + B64 (200), B64 (201), B64 (202), B64 (203), + B64 (204), B64 (205), B64 (206), B64 (207), + B64 (208), B64 (209), B64 (210), B64 (211), + B64 (212), B64 (213), B64 (214), B64 (215), + B64 (216), B64 (217), B64 (218), B64 (219), + B64 (220), B64 (221), B64 (222), B64 (223), + B64 (224), B64 (225), B64 (226), B64 (227), + B64 (228), B64 (229), B64 (230), B64 (231), + B64 (232), B64 (233), B64 (234), B64 (235), + B64 (236), B64 (237), B64 (238), B64 (239), + B64 (240), B64 (241), B64 (242), B64 (243), + B64 (244), B64 (245), B64 (246), B64 (247), + B64 (248), B64 (249), B64 (250), B64 (251), + B64 (252), B64 (253), B64 (254), B64 (255) +}; + +#if UCHAR_MAX == 255 +# define uchar_in_range(c) true +#else +# define uchar_in_range(c) ((c) <= 255) +#endif + +/* Return true if CH is a character from the Base64 alphabet, and + false otherwise. Note that '=' is padding and not considered to be + part of the alphabet. */ +bool +isbase64 (char ch) +{ + return uchar_in_range (to_uchar (ch)) && 0 <= b64[to_uchar (ch)]; +} + +/* Initialize decode-context buffer, CTX. */ +void +base64_decode_ctx_init (struct base64_decode_context *ctx) +{ + ctx->i = 0; +} + +/* If CTX->i is 0 or 4, there are four or more bytes in [*IN..IN_END), and + none of those four is a newline, then return *IN. Otherwise, copy up to + 4 - CTX->i non-newline bytes from that range into CTX->buf, starting at + index CTX->i and setting CTX->i to reflect the number of bytes copied, + and return CTX->buf. In either case, advance *IN to point to the byte + after the last one processed, and set *N_NON_NEWLINE to the number of + verified non-newline bytes accessible through the returned pointer. */ +static char * +get_4 (struct base64_decode_context *ctx, + char const *restrict *in, char const *restrict in_end, + size_t *n_non_newline) +{ + if (ctx->i == 4) + ctx->i = 0; + + if (ctx->i == 0) + { + char const *t = *in; + if (4 <= in_end - *in && memchr (t, '\n', 4) == NULL) + { + /* This is the common case: no newline. */ + *in += 4; + *n_non_newline = 4; + return (char *) t; + } + } + + { + /* Copy non-newline bytes into BUF. */ + char const *p = *in; + while (p < in_end) + { + char c = *p++; + if (c != '\n') + { + ctx->buf[ctx->i++] = c; + if (ctx->i == 4) + break; + } + } + + *in = p; + *n_non_newline = ctx->i; + return ctx->buf; + } +} + +#define return_false \ + do \ + { \ + *outp = out; \ + return false; \ + } \ + while (false) + +/* Decode up to four bytes of base64-encoded data, IN, of length INLEN + into the output buffer, *OUT, of size *OUTLEN bytes. Return true if + decoding is successful, false otherwise. If *OUTLEN is too small, + as many bytes as possible are written to *OUT. On return, advance + *OUT to point to the byte after the last one written, and decrement + *OUTLEN to reflect the number of bytes remaining in *OUT. */ +static bool +decode_4 (char const *restrict in, size_t inlen, + char *restrict *outp, size_t *outleft) +{ + char *out = *outp; + if (inlen < 2) + return false; + + if (!isbase64 (in[0]) || !isbase64 (in[1])) + return false; + + if (*outleft) + { + *out++ = ((b64[to_uchar (in[0])] << 2) + | (b64[to_uchar (in[1])] >> 4)); + --*outleft; + } + + if (inlen == 2) + return_false; + + if (in[2] == '=') + { + if (inlen != 4) + return_false; + + if (in[3] != '=') + return_false; + } + else + { + if (!isbase64 (in[2])) + return_false; + + if (*outleft) + { + *out++ = (((b64[to_uchar (in[1])] << 4) & 0xf0) + | (b64[to_uchar (in[2])] >> 2)); + --*outleft; + } + + if (inlen == 3) + return_false; + + if (in[3] == '=') + { + if (inlen != 4) + return_false; + } + else + { + if (!isbase64 (in[3])) + return_false; + + if (*outleft) + { + *out++ = (((b64[to_uchar (in[2])] << 6) & 0xc0) + | b64[to_uchar (in[3])]); + --*outleft; + } + } + } + + *outp = out; + return true; +} + +/* Decode base64-encoded input array IN of length INLEN to output array + OUT that can hold *OUTLEN bytes. The input data may be interspersed + with newlines. Return true if decoding was successful, i.e. if the + input was valid base64 data, false otherwise. If *OUTLEN is too + small, as many bytes as possible will be written to OUT. On return, + *OUTLEN holds the length of decoded bytes in OUT. Note that as soon + as any non-alphabet, non-newline character is encountered, decoding + is stopped and false is returned. If INLEN is zero, then process + only whatever data is stored in CTX. + + Initially, CTX must have been initialized via base64_decode_ctx_init. + Subsequent calls to this function must reuse whatever state is recorded + in that buffer. It is necessary for when a quadruple of base64 input + bytes spans two input buffers. + + If CTX is NULL then newlines are treated as garbage and the input + buffer is processed as a unit. */ + +bool +base64_decode_ctx (struct base64_decode_context *ctx, + const char *restrict in, size_t inlen, + char *restrict out, size_t *outlen) +{ + size_t outleft = *outlen; + bool ignore_newlines = ctx != NULL; + bool flush_ctx = false; + unsigned int ctx_i = 0; + + if (ignore_newlines) + { + ctx_i = ctx->i; + flush_ctx = inlen == 0; + } + + + while (true) + { + size_t outleft_save = outleft; + if (ctx_i == 0 && !flush_ctx) + { + while (true) + { + /* Save a copy of outleft, in case we need to re-parse this + block of four bytes. */ + outleft_save = outleft; + if (!decode_4 (in, inlen, &out, &outleft)) + break; + + in += 4; + inlen -= 4; + } + } + + if (inlen == 0 && !flush_ctx) + break; + + /* Handle the common case of 72-byte wrapped lines. + This also handles any other multiple-of-4-byte wrapping. */ + if (inlen && *in == '\n' && ignore_newlines) + { + ++in; + --inlen; + continue; + } + + /* Restore OUT and OUTLEFT. */ + out -= outleft_save - outleft; + outleft = outleft_save; + + { + char const *in_end = in + inlen; + char const *non_nl; + + if (ignore_newlines) + non_nl = get_4 (ctx, &in, in_end, &inlen); + else + non_nl = in; /* Might have nl in this case. */ + + /* If the input is empty or consists solely of newlines (0 non-newlines), + then we're done. Likewise if there are fewer than 4 bytes when not + flushing context and not treating newlines as garbage. */ + if (inlen == 0 || (inlen < 4 && !flush_ctx && ignore_newlines)) + { + inlen = 0; + break; + } + if (!decode_4 (non_nl, inlen, &out, &outleft)) + break; + + inlen = in_end - in; + } + } + + *outlen -= outleft; + + return inlen == 0; +} + +/* Allocate an output buffer in *OUT, and decode the base64 encoded + data stored in IN of size INLEN to the *OUT buffer. On return, the + size of the decoded data is stored in *OUTLEN. OUTLEN may be NULL, + if the caller is not interested in the decoded length. *OUT may be + NULL to indicate an out of memory error, in which case *OUTLEN + contains the size of the memory block needed. The function returns + true on successful decoding and memory allocation errors. (Use the + *OUT and *OUTLEN parameters to differentiate between successful + decoding and memory error.) The function returns false if the + input was invalid, in which case *OUT is NULL and *OUTLEN is + undefined. */ +bool +base64_decode_alloc_ctx (struct base64_decode_context *ctx, + const char *in, size_t inlen, char **out, + size_t *outlen) +{ + /* This may allocate a few bytes too many, depending on input, + but it's not worth the extra CPU time to compute the exact size. + The exact size is 3 * (inlen + (ctx ? ctx->i : 0)) / 4, minus 1 if the + input ends with "=" and minus another 1 if the input ends with "==". + Dividing before multiplying avoids the possibility of overflow. */ + size_t needlen = 3 * (inlen / 4) + 3; + + *out = malloc (needlen); + if (!*out) + return true; + + if (!base64_decode_ctx (ctx, in, inlen, *out, &needlen)) + { + free (*out); + *out = NULL; + return false; + } + + if (outlen) + *outlen = needlen; + + return true; +} diff --git a/devspec.en_US/project/recutils/lib/base64.h b/devspec.en_US/project/recutils/lib/base64.h new file mode 100755 index 0000000..d4148cb --- /dev/null +++ b/devspec.en_US/project/recutils/lib/base64.h @@ -0,0 +1,68 @@ +/* base64.h -- Encode binary data using printable characters. + Copyright (C) 2004-2006, 2009-2019 Free Software Foundation, Inc. + Written by Simon Josefsson. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef BASE64_H +# define BASE64_H + +/* Get size_t. */ +# include <stddef.h> + +/* Get bool. */ +# include <stdbool.h> + +# ifdef __cplusplus +extern "C" { +# endif + +/* This uses that the expression (n+(k-1))/k means the smallest + integer >= n/k, i.e., the ceiling of n/k. */ +# define BASE64_LENGTH(inlen) ((((inlen) + 2) / 3) * 4) + +struct base64_decode_context +{ + unsigned int i; + char buf[4]; +}; + +extern bool isbase64 (char ch) _GL_ATTRIBUTE_CONST; + +extern void base64_encode (const char *restrict in, size_t inlen, + char *restrict out, size_t outlen); + +extern size_t base64_encode_alloc (const char *in, size_t inlen, char **out); + +extern void base64_decode_ctx_init (struct base64_decode_context *ctx); + +extern bool base64_decode_ctx (struct base64_decode_context *ctx, + const char *restrict in, size_t inlen, + char *restrict out, size_t *outlen); + +extern bool base64_decode_alloc_ctx (struct base64_decode_context *ctx, + const char *in, size_t inlen, + char **out, size_t *outlen); + +#define base64_decode(in, inlen, out, outlen) \ + base64_decode_ctx (NULL, in, inlen, out, outlen) + +#define base64_decode_alloc(in, inlen, out, outlen) \ + base64_decode_alloc_ctx (NULL, in, inlen, out, outlen) + +# ifdef __cplusplus +} +# endif + +#endif /* BASE64_H */ diff --git a/devspec.en_US/project/recutils/lib/basename-lgpl.c b/devspec.en_US/project/recutils/lib/basename-lgpl.c new file mode 100755 index 0000000..0ae04ee --- /dev/null +++ b/devspec.en_US/project/recutils/lib/basename-lgpl.c @@ -0,0 +1,75 @@ +/* basename.c -- return the last element in a file name + + Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2019 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include "dirname.h" + +#include <string.h> + +/* Return the address of the last file name component of NAME. If + NAME has no relative file name components because it is a file + system root, return the empty string. */ + +char * +last_component (char const *name) +{ + char const *base = name + FILE_SYSTEM_PREFIX_LEN (name); + char const *p; + bool saw_slash = false; + + while (ISSLASH (*base)) + base++; + + for (p = base; *p; p++) + { + if (ISSLASH (*p)) + saw_slash = true; + else if (saw_slash) + { + base = p; + saw_slash = false; + } + } + + return (char *) base; +} + +/* Return the length of the basename NAME. Typically NAME is the + value returned by base_name or last_component. Act like strlen + (NAME), except omit all trailing slashes. */ + +size_t +base_len (char const *name) +{ + size_t len; + size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); + + for (len = strlen (name); 1 < len && ISSLASH (name[len - 1]); len--) + continue; + + if (DOUBLE_SLASH_IS_DISTINCT_ROOT && len == 1 + && ISSLASH (name[0]) && ISSLASH (name[1]) && ! name[2]) + return 2; + + if (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && prefix_len + && len == prefix_len && ISSLASH (name[prefix_len])) + return prefix_len + 1; + + return len; +} diff --git a/devspec.en_US/project/recutils/lib/btowc.c b/devspec.en_US/project/recutils/lib/btowc.c new file mode 100755 index 0000000..9e2496d --- /dev/null +++ b/devspec.en_US/project/recutils/lib/btowc.c @@ -0,0 +1,39 @@ +/* Convert unibyte character to wide character. + Copyright (C) 2008, 2010-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <wchar.h> + +#include <stdio.h> +#include <stdlib.h> + +wint_t +btowc (int c) +{ + if (c != EOF) + { + char buf[1]; + wchar_t wc; + + buf[0] = c; + if (mbtowc (&wc, buf, 1) >= 0) + return wc; + } + return WEOF; +} diff --git a/devspec.en_US/project/recutils/lib/c++defs.h b/devspec.en_US/project/recutils/lib/c++defs.h new file mode 100755 index 0000000..87d0716 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/c++defs.h @@ -0,0 +1,316 @@ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ diff --git a/devspec.en_US/project/recutils/lib/c-ctype.c b/devspec.en_US/project/recutils/lib/c-ctype.c new file mode 100755 index 0000000..5d9d4d8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/c-ctype.c @@ -0,0 +1,3 @@ +#include <config.h> +#define C_CTYPE_INLINE _GL_EXTERN_INLINE +#include "c-ctype.h" diff --git a/devspec.en_US/project/recutils/lib/c-ctype.h b/devspec.en_US/project/recutils/lib/c-ctype.h new file mode 100755 index 0000000..4d52176 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/c-ctype.h @@ -0,0 +1,366 @@ +/* Character handling in C locale. + + These functions work like the corresponding functions in <ctype.h>, + except that they have the C (POSIX) locale hardwired, whereas the + <ctype.h> functions' behaviour depends on the current locale set via + setlocale. + + Copyright (C) 2000-2003, 2006, 2008-2019 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef C_CTYPE_H +#define C_CTYPE_H + +#include <stdbool.h> + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef C_CTYPE_INLINE +# define C_CTYPE_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* The functions defined in this file assume the "C" locale and a character + set without diacritics (ASCII-US or EBCDIC-US or something like that). + Even if the "C" locale on a particular system is an extension of the ASCII + character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it + is ISO-8859-1), the functions in this file recognize only the ASCII + characters. */ + + +#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) +/* The character set is ASCII or one of its variants or extensions, not EBCDIC. + Testing the value of '\n' and '\r' is not relevant. */ +# define C_CTYPE_ASCII 1 +#elif ! (' ' == '\x40' && '0' == '\xf0' \ + && 'A' == '\xc1' && 'J' == '\xd1' && 'S' == '\xe2' \ + && 'a' == '\x81' && 'j' == '\x91' && 's' == '\xa2') +# error "Only ASCII and EBCDIC are supported" +#endif + +#if 'A' < 0 +# error "EBCDIC and char is signed -- not supported" +#endif + +/* Cases for control characters. */ + +#define _C_CTYPE_CNTRL \ + case '\a': case '\b': case '\f': case '\n': \ + case '\r': case '\t': case '\v': \ + _C_CTYPE_OTHER_CNTRL + +/* ASCII control characters other than those with \-letter escapes. */ + +#if C_CTYPE_ASCII +# define _C_CTYPE_OTHER_CNTRL \ + case '\x00': case '\x01': case '\x02': case '\x03': \ + case '\x04': case '\x05': case '\x06': case '\x0e': \ + case '\x0f': case '\x10': case '\x11': case '\x12': \ + case '\x13': case '\x14': case '\x15': case '\x16': \ + case '\x17': case '\x18': case '\x19': case '\x1a': \ + case '\x1b': case '\x1c': case '\x1d': case '\x1e': \ + case '\x1f': case '\x7f' +#else + /* Use EBCDIC code page 1047's assignments for ASCII control chars; + assume all EBCDIC code pages agree about these assignments. */ +# define _C_CTYPE_OTHER_CNTRL \ + case '\x00': case '\x01': case '\x02': case '\x03': \ + case '\x07': case '\x0e': case '\x0f': case '\x10': \ + case '\x11': case '\x12': case '\x13': case '\x18': \ + case '\x19': case '\x1c': case '\x1d': case '\x1e': \ + case '\x1f': case '\x26': case '\x27': case '\x2d': \ + case '\x2e': case '\x32': case '\x37': case '\x3c': \ + case '\x3d': case '\x3f' +#endif + +/* Cases for lowercase hex letters, and lowercase letters, all offset by N. */ + +#define _C_CTYPE_LOWER_A_THRU_F_N(N) \ + case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \ + case 'e' + (N): case 'f' + (N) +#define _C_CTYPE_LOWER_N(N) \ + _C_CTYPE_LOWER_A_THRU_F_N(N): \ + case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \ + case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \ + case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \ + case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \ + case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N) + +/* Cases for hex letters, digits, lower, punct, and upper. */ + +#define _C_CTYPE_A_THRU_F \ + _C_CTYPE_LOWER_A_THRU_F_N (0): \ + _C_CTYPE_LOWER_A_THRU_F_N ('A' - 'a') +#define _C_CTYPE_DIGIT \ + case '0': case '1': case '2': case '3': \ + case '4': case '5': case '6': case '7': \ + case '8': case '9' +#define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0) +#define _C_CTYPE_PUNCT \ + case '!': case '"': case '#': case '$': \ + case '%': case '&': case '\'': case '(': \ + case ')': case '*': case '+': case ',': \ + case '-': case '.': case '/': case ':': \ + case ';': case '<': case '=': case '>': \ + case '?': case '@': case '[': case '\\': \ + case ']': case '^': case '_': case '`': \ + case '{': case '|': case '}': case '~' +#define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a') + + +/* Function definitions. */ + +/* Unlike the functions in <ctype.h>, which require an argument in the range + of the 'unsigned char' type, the functions here operate on values that are + in the 'unsigned char' range or in the 'char' range. In other words, + when you have a 'char' value, you need to cast it before using it as + argument to a <ctype.h> function: + + const char *s = ...; + if (isalpha ((unsigned char) *s)) ... + + but you don't need to cast it for the functions defined in this file: + + const char *s = ...; + if (c_isalpha (*s)) ... + */ + +C_CTYPE_INLINE bool +c_isalnum (int c) +{ + switch (c) + { + _C_CTYPE_DIGIT: + _C_CTYPE_LOWER: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isalpha (int c) +{ + switch (c) + { + _C_CTYPE_LOWER: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +/* The function isascii is not locale dependent. + Its use in EBCDIC is questionable. */ +C_CTYPE_INLINE bool +c_isascii (int c) +{ + switch (c) + { + case ' ': + _C_CTYPE_CNTRL: + _C_CTYPE_DIGIT: + _C_CTYPE_LOWER: + _C_CTYPE_PUNCT: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isblank (int c) +{ + return c == ' ' || c == '\t'; +} + +C_CTYPE_INLINE bool +c_iscntrl (int c) +{ + switch (c) + { + _C_CTYPE_CNTRL: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isdigit (int c) +{ + switch (c) + { + _C_CTYPE_DIGIT: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isgraph (int c) +{ + switch (c) + { + _C_CTYPE_DIGIT: + _C_CTYPE_LOWER: + _C_CTYPE_PUNCT: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_islower (int c) +{ + switch (c) + { + _C_CTYPE_LOWER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isprint (int c) +{ + switch (c) + { + case ' ': + _C_CTYPE_DIGIT: + _C_CTYPE_LOWER: + _C_CTYPE_PUNCT: + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_ispunct (int c) +{ + switch (c) + { + _C_CTYPE_PUNCT: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isspace (int c) +{ + switch (c) + { + case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isupper (int c) +{ + switch (c) + { + _C_CTYPE_UPPER: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE bool +c_isxdigit (int c) +{ + switch (c) + { + _C_CTYPE_DIGIT: + _C_CTYPE_A_THRU_F: + return true; + default: + return false; + } +} + +C_CTYPE_INLINE int +c_tolower (int c) +{ + switch (c) + { + _C_CTYPE_UPPER: + return c - 'A' + 'a'; + default: + return c; + } +} + +C_CTYPE_INLINE int +c_toupper (int c) +{ + switch (c) + { + _C_CTYPE_LOWER: + return c - 'a' + 'A'; + default: + return c; + } +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* C_CTYPE_H */ diff --git a/devspec.en_US/project/recutils/lib/c-strcase.h b/devspec.en_US/project/recutils/lib/c-strcase.h new file mode 100755 index 0000000..b67c9b5 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/c-strcase.h @@ -0,0 +1,56 @@ +/* Case-insensitive string comparison functions in C locale. + Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2019 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef C_STRCASE_H +#define C_STRCASE_H + +#include <stddef.h> + + +/* The functions defined in this file assume the "C" locale and a character + set without diacritics (ASCII-US or EBCDIC-US or something like that). + Even if the "C" locale on a particular system is an extension of the ASCII + character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it + is ISO-8859-1), the functions in this file recognize only the ASCII + characters. More precisely, one of the string arguments must be an ASCII + string; the other one can also contain non-ASCII characters (but then + the comparison result will be nonzero). */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Compare strings S1 and S2, ignoring case, returning less than, equal to or + greater than zero if S1 is lexicographically less than, equal to or greater + than S2. */ +extern int c_strcasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE; + +/* Compare no more than N characters of strings S1 and S2, ignoring case, + returning less than, equal to or greater than zero if S1 is + lexicographically less than, equal to or greater than S2. */ +extern int c_strncasecmp (const char *s1, const char *s2, size_t n) + _GL_ATTRIBUTE_PURE; + + +#ifdef __cplusplus +} +#endif + + +#endif /* C_STRCASE_H */ diff --git a/devspec.en_US/project/recutils/lib/c-strcasecmp.c b/devspec.en_US/project/recutils/lib/c-strcasecmp.c new file mode 100755 index 0000000..ec50f1a --- /dev/null +++ b/devspec.en_US/project/recutils/lib/c-strcasecmp.c @@ -0,0 +1,56 @@ +/* c-strcasecmp.c -- case insensitive string comparator in C locale + Copyright (C) 1998-1999, 2005-2006, 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include "c-strcase.h" + +#include <limits.h> + +#include "c-ctype.h" + +int +c_strcasecmp (const char *s1, const char *s2) +{ + register const unsigned char *p1 = (const unsigned char *) s1; + register const unsigned char *p2 = (const unsigned char *) s2; + unsigned char c1, c2; + + if (p1 == p2) + return 0; + + do + { + c1 = c_tolower (*p1); + c2 = c_tolower (*p2); + + if (c1 == '\0') + break; + + ++p1; + ++p2; + } + while (c1 == c2); + + if (UCHAR_MAX <= INT_MAX) + return c1 - c2; + else + /* On machines where 'char' and 'int' are types of the same size, the + difference of two 'unsigned char' values - including the sign bit - + doesn't fit in an 'int'. */ + return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); +} diff --git a/devspec.en_US/project/recutils/lib/c-strcaseeq.h b/devspec.en_US/project/recutils/lib/c-strcaseeq.h new file mode 100755 index 0000000..bcc81fc --- /dev/null +++ b/devspec.en_US/project/recutils/lib/c-strcaseeq.h @@ -0,0 +1,181 @@ +/* Optimized case-insensitive string comparison in C locale. + Copyright (C) 2001-2002, 2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>. */ + +#include "c-strcase.h" +#include "c-ctype.h" + +/* STRCASEEQ allows to optimize string comparison with a small literal string. + STRCASEEQ (s, "UTF-8", 'U','T','F','-','8',0,0,0,0) + is semantically equivalent to + c_strcasecmp (s, "UTF-8") == 0 + just faster. */ + +/* Help GCC to generate good code for string comparisons with + immediate strings. */ +#if defined (__GNUC__) && defined (__OPTIMIZE__) + +/* Case insensitive comparison of ASCII characters. */ +# if C_CTYPE_ASCII +# define CASEEQ(other,upper) \ + (c_isupper (upper) ? ((other) & ~0x20) == (upper) : (other) == (upper)) +# else +# define CASEEQ(other,upper) \ + (c_toupper (other) == (upper)) +# endif + +static inline int +strcaseeq9 (const char *s1, const char *s2) +{ + return c_strcasecmp (s1 + 9, s2 + 9) == 0; +} + +static inline int +strcaseeq8 (const char *s1, const char *s2, char s28) +{ + if (CASEEQ (s1[8], s28)) + { + if (s28 == 0) + return 1; + else + return strcaseeq9 (s1, s2); + } + else + return 0; +} + +static inline int +strcaseeq7 (const char *s1, const char *s2, char s27, char s28) +{ + if (CASEEQ (s1[7], s27)) + { + if (s27 == 0) + return 1; + else + return strcaseeq8 (s1, s2, s28); + } + else + return 0; +} + +static inline int +strcaseeq6 (const char *s1, const char *s2, char s26, char s27, char s28) +{ + if (CASEEQ (s1[6], s26)) + { + if (s26 == 0) + return 1; + else + return strcaseeq7 (s1, s2, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[5], s25)) + { + if (s25 == 0) + return 1; + else + return strcaseeq6 (s1, s2, s26, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[4], s24)) + { + if (s24 == 0) + return 1; + else + return strcaseeq5 (s1, s2, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[3], s23)) + { + if (s23 == 0) + return 1; + else + return strcaseeq4 (s1, s2, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[2], s22)) + { + if (s22 == 0) + return 1; + else + return strcaseeq3 (s1, s2, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[1], s21)) + { + if (s21 == 0) + return 1; + else + return strcaseeq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[0], s20)) + { + if (s20 == 0) + return 1; + else + return strcaseeq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +#define STRCASEEQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + strcaseeq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28) + +#else + +#define STRCASEEQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + (c_strcasecmp (s1, s2) == 0) + +#endif diff --git a/devspec.en_US/project/recutils/lib/c-strncasecmp.c b/devspec.en_US/project/recutils/lib/c-strncasecmp.c new file mode 100755 index 0000000..513c353 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/c-strncasecmp.c @@ -0,0 +1,56 @@ +/* c-strncasecmp.c -- case insensitive string comparator in C locale + Copyright (C) 1998-1999, 2005-2006, 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include "c-strcase.h" + +#include <limits.h> + +#include "c-ctype.h" + +int +c_strncasecmp (const char *s1, const char *s2, size_t n) +{ + register const unsigned char *p1 = (const unsigned char *) s1; + register const unsigned char *p2 = (const unsigned char *) s2; + unsigned char c1, c2; + + if (p1 == p2 || n == 0) + return 0; + + do + { + c1 = c_tolower (*p1); + c2 = c_tolower (*p2); + + if (--n == 0 || c1 == '\0') + break; + + ++p1; + ++p2; + } + while (c1 == c2); + + if (UCHAR_MAX <= INT_MAX) + return c1 - c2; + else + /* On machines where 'char' and 'int' are types of the same size, the + difference of two 'unsigned char' values - including the sign bit - + doesn't fit in an 'int'. */ + return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); +} diff --git a/devspec.en_US/project/recutils/lib/canonicalize-lgpl.c b/devspec.en_US/project/recutils/lib/canonicalize-lgpl.c new file mode 100755 index 0000000..4d1be6d --- /dev/null +++ b/devspec.en_US/project/recutils/lib/canonicalize-lgpl.c @@ -0,0 +1,428 @@ +/* Return the canonical absolute name of a given file. + Copyright (C) 1996-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _LIBC +/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc + optimizes away the name == NULL test below. */ +# define _GL_ARG_NONNULL(params) + +# define _GL_USE_STDLIB_ALLOC 1 +# include <config.h> +#endif + +#if !HAVE_CANONICALIZE_FILE_NAME || !FUNC_REALPATH_WORKS || defined _LIBC + +/* Specification. */ +#include <stdlib.h> + +#include <alloca.h> +#include <string.h> +#include <unistd.h> +#include <limits.h> +#if HAVE_SYS_PARAM_H || defined _LIBC +# include <sys/param.h> +#endif +#include <sys/stat.h> +#include <errno.h> +#include <stddef.h> + +#ifdef _LIBC +# include <shlib-compat.h> +#else +# define SHLIB_COMPAT(lib, introduced, obsoleted) 0 +# define versioned_symbol(lib, local, symbol, version) extern int dummy +# define compat_symbol(lib, local, symbol, version) +# define weak_alias(local, symbol) +# define __canonicalize_file_name canonicalize_file_name +# define __realpath realpath +# include "pathmax.h" +# include "malloca.h" +# include "dosname.h" +# if HAVE_GETCWD +# if IN_RELOCWRAPPER + /* When building the relocatable program wrapper, use the system's getcwd + function, not the gnulib override, otherwise we would get a link error. + */ +# undef getcwd +# endif +# if defined VMS && !defined getcwd + /* We want the directory in Unix syntax, not in VMS syntax. + The gnulib override of 'getcwd' takes 2 arguments; the original VMS + 'getcwd' takes 3 arguments. */ +# define __getcwd(buf, max) getcwd (buf, max, 0) +# else +# define __getcwd getcwd +# endif +# else +# define __getcwd(buf, max) getwd (buf) +# endif +# define __readlink readlink +# define __set_errno(e) errno = (e) +# ifndef MAXSYMLINKS +# ifdef SYMLOOP_MAX +# define MAXSYMLINKS SYMLOOP_MAX +# else +# define MAXSYMLINKS 20 +# endif +# endif +#endif + +#ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT +# define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 +#endif + +/* Define this independently so that stdint.h is not a prerequisite. */ +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + +#if !FUNC_REALPATH_WORKS || defined _LIBC + +static void +alloc_failed (void) +{ +#if defined _WIN32 && ! defined __CYGWIN__ + /* Avoid errno problem without using the malloc or realloc modules; see: + https://lists.gnu.org/r/bug-gnulib/2016-08/msg00025.html */ + errno = ENOMEM; +#endif +} + +/* Return the canonical absolute name of file NAME. A canonical name + does not contain any ".", ".." components nor any repeated path + separators ('/') or symlinks. All path components must exist. If + RESOLVED is null, the result is malloc'd; otherwise, if the + canonical name is PATH_MAX chars or more, returns null with 'errno' + set to ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars, + returns the name in RESOLVED. If the name cannot be resolved and + RESOLVED is non-NULL, it contains the path of the first component + that cannot be resolved. If the path can be resolved, RESOLVED + holds the same value as the value returned. */ + +char * +__realpath (const char *name, char *resolved) +{ + char *rpath, *dest, *extra_buf = NULL; + const char *start, *end, *rpath_limit; + long int path_max; + int num_links = 0; + size_t prefix_len; + + if (name == NULL) + { + /* As per Single Unix Specification V2 we must return an error if + either parameter is a null pointer. We extend this to allow + the RESOLVED parameter to be NULL in case the we are expected to + allocate the room for the return value. */ + __set_errno (EINVAL); + return NULL; + } + + if (name[0] == '\0') + { + /* As per Single Unix Specification V2 we must return an error if + the name argument points to an empty string. */ + __set_errno (ENOENT); + return NULL; + } + +#ifdef PATH_MAX + path_max = PATH_MAX; +#else + path_max = pathconf (name, _PC_PATH_MAX); + if (path_max <= 0) + path_max = 8192; +#endif + + if (resolved == NULL) + { + rpath = malloc (path_max); + if (rpath == NULL) + { + alloc_failed (); + return NULL; + } + } + else + rpath = resolved; + rpath_limit = rpath + path_max; + + /* This is always zero for Posix hosts, but can be 2 for MS-Windows + and MS-DOS X:/foo/bar file names. */ + prefix_len = FILE_SYSTEM_PREFIX_LEN (name); + + if (!IS_ABSOLUTE_FILE_NAME (name)) + { + if (!__getcwd (rpath, path_max)) + { + rpath[0] = '\0'; + goto error; + } + dest = strchr (rpath, '\0'); + start = name; + prefix_len = FILE_SYSTEM_PREFIX_LEN (rpath); + } + else + { + dest = rpath; + if (prefix_len) + { + memcpy (rpath, name, prefix_len); + dest += prefix_len; + } + *dest++ = '/'; + if (DOUBLE_SLASH_IS_DISTINCT_ROOT) + { + if (ISSLASH (name[1]) && !ISSLASH (name[2]) && !prefix_len) + *dest++ = '/'; + *dest = '\0'; + } + start = name + prefix_len; + } + + for (end = start; *start; start = end) + { +#ifdef _LIBC + struct stat64 st; +#else + struct stat st; +#endif + + /* Skip sequence of multiple path-separators. */ + while (ISSLASH (*start)) + ++start; + + /* Find end of path component. */ + for (end = start; *end && !ISSLASH (*end); ++end) + /* Nothing. */; + + if (end - start == 0) + break; + else if (end - start == 1 && start[0] == '.') + /* nothing */; + else if (end - start == 2 && start[0] == '.' && start[1] == '.') + { + /* Back up to previous component, ignore if at root already. */ + if (dest > rpath + prefix_len + 1) + for (--dest; dest > rpath && !ISSLASH (dest[-1]); --dest) + continue; + if (DOUBLE_SLASH_IS_DISTINCT_ROOT + && dest == rpath + 1 && !prefix_len + && ISSLASH (*dest) && !ISSLASH (dest[1])) + dest++; + } + else + { + size_t new_size; + + if (!ISSLASH (dest[-1])) + *dest++ = '/'; + + if (dest + (end - start) >= rpath_limit) + { + ptrdiff_t dest_offset = dest - rpath; + char *new_rpath; + + if (resolved) + { + __set_errno (ENAMETOOLONG); + if (dest > rpath + prefix_len + 1) + dest--; + *dest = '\0'; + goto error; + } + new_size = rpath_limit - rpath; + if (end - start + 1 > path_max) + new_size += end - start + 1; + else + new_size += path_max; + new_rpath = (char *) realloc (rpath, new_size); + if (new_rpath == NULL) + { + alloc_failed (); + goto error; + } + rpath = new_rpath; + rpath_limit = rpath + new_size; + + dest = rpath + dest_offset; + } + +#ifdef _LIBC + dest = __mempcpy (dest, start, end - start); +#else + memcpy (dest, start, end - start); + dest += end - start; +#endif + *dest = '\0'; + + /* FIXME: if lstat fails with errno == EOVERFLOW, + the entry exists. */ +#ifdef _LIBC + if (__lxstat64 (_STAT_VER, rpath, &st) < 0) +#else + if (lstat (rpath, &st) < 0) +#endif + goto error; + + if (S_ISLNK (st.st_mode)) + { + char *buf; + size_t len; + ssize_t n; + + if (++num_links > MAXSYMLINKS) + { + __set_errno (ELOOP); + goto error; + } + + buf = malloca (path_max); + if (!buf) + { + __set_errno (ENOMEM); + goto error; + } + + n = __readlink (rpath, buf, path_max - 1); + if (n < 0) + { + int saved_errno = errno; + freea (buf); + __set_errno (saved_errno); + goto error; + } + buf[n] = '\0'; + + if (!extra_buf) + { + extra_buf = malloca (path_max); + if (!extra_buf) + { + freea (buf); + __set_errno (ENOMEM); + goto error; + } + } + + len = strlen (end); + /* Check that n + len + 1 doesn't overflow and is <= path_max. */ + if (n >= SIZE_MAX - len || n + len >= path_max) + { + freea (buf); + __set_errno (ENAMETOOLONG); + goto error; + } + + /* Careful here, end may be a pointer into extra_buf... */ + memmove (&extra_buf[n], end, len + 1); + name = end = memcpy (extra_buf, buf, n); + + if (IS_ABSOLUTE_FILE_NAME (buf)) + { + size_t pfxlen = FILE_SYSTEM_PREFIX_LEN (buf); + + if (pfxlen) + memcpy (rpath, buf, pfxlen); + dest = rpath + pfxlen; + *dest++ = '/'; /* It's an absolute symlink */ + if (DOUBLE_SLASH_IS_DISTINCT_ROOT) + { + if (ISSLASH (buf[1]) && !ISSLASH (buf[2]) && !pfxlen) + *dest++ = '/'; + *dest = '\0'; + } + /* Install the new prefix to be in effect hereafter. */ + prefix_len = pfxlen; + } + else + { + /* Back up to previous component, ignore if at root + already: */ + if (dest > rpath + prefix_len + 1) + for (--dest; dest > rpath && !ISSLASH (dest[-1]); --dest) + continue; + if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rpath + 1 + && ISSLASH (*dest) && !ISSLASH (dest[1]) && !prefix_len) + dest++; + } + } + else if (!S_ISDIR (st.st_mode) && *end != '\0') + { + __set_errno (ENOTDIR); + goto error; + } + } + } + if (dest > rpath + prefix_len + 1 && ISSLASH (dest[-1])) + --dest; + if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rpath + 1 && !prefix_len + && ISSLASH (*dest) && !ISSLASH (dest[1])) + dest++; + *dest = '\0'; + + if (extra_buf) + freea (extra_buf); + + return rpath; + +error: + { + int saved_errno = errno; + if (extra_buf) + freea (extra_buf); + if (resolved == NULL) + free (rpath); + __set_errno (saved_errno); + } + return NULL; +} +versioned_symbol (libc, __realpath, realpath, GLIBC_2_3); +#endif /* !FUNC_REALPATH_WORKS || defined _LIBC */ + + +#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3) +char * +attribute_compat_text_section +__old_realpath (const char *name, char *resolved) +{ + if (resolved == NULL) + { + __set_errno (EINVAL); + return NULL; + } + + return __realpath (name, resolved); +} +compat_symbol (libc, __old_realpath, realpath, GLIBC_2_0); +#endif + + +char * +__canonicalize_file_name (const char *name) +{ + return __realpath (name, NULL); +} +weak_alias (__canonicalize_file_name, canonicalize_file_name) + +#else + +/* This declaration is solely to ensure that after preprocessing + this file is never empty. */ +typedef int dummy; + +#endif diff --git a/devspec.en_US/project/recutils/lib/cdefs.h b/devspec.en_US/project/recutils/lib/cdefs.h new file mode 100755 index 0000000..f7a1064 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/cdefs.h @@ -0,0 +1,514 @@ +/* Copyright (C) 1992-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _SYS_CDEFS_H +#define _SYS_CDEFS_H 1 + +/* We are almost always included from features.h. */ +#ifndef _FEATURES_H +# include <features.h> +#endif + +/* The GNU libc does not support any K&R compilers or the traditional mode + of ISO C compilers anymore. Check for some of the combinations not + anymore supported. */ +#if defined __GNUC__ && !defined __STDC__ +# error "You need a ISO C conforming compiler to use the glibc headers" +#endif + +/* Some user header file might have defined this before. */ +#undef __P +#undef __PMT + +#ifdef __GNUC__ + +/* All functions, except those with callbacks or those that + synchronize memory, are leaf functions. */ +# if __GNUC_PREREQ (4, 6) && !defined _LIBC +# define __LEAF , __leaf__ +# define __LEAF_ATTR __attribute__ ((__leaf__)) +# else +# define __LEAF +# define __LEAF_ATTR +# endif + +/* GCC can always grok prototypes. For C++ programs we add throw() + to help it optimize the function calls. But this works only with + gcc 2.8.x and egcs. For gcc 3.2 and up we even mark C functions + as non-throwing using a function attribute since programs can use + the -fexceptions options for C code as well. */ +# if !defined __cplusplus && __GNUC_PREREQ (3, 3) +# define __THROW __attribute__ ((__nothrow__ __LEAF)) +# define __THROWNL __attribute__ ((__nothrow__)) +# define __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct +# define __NTHNL(fct) __attribute__ ((__nothrow__)) fct +# else +# if defined __cplusplus && __GNUC_PREREQ (2,8) +# define __THROW throw () +# define __THROWNL throw () +# define __NTH(fct) __LEAF_ATTR fct throw () +# define __NTHNL(fct) fct throw () +# else +# define __THROW +# define __THROWNL +# define __NTH(fct) fct +# define __NTHNL(fct) fct +# endif +# endif + +#else /* Not GCC. */ + +# if (defined __cplusplus \ + || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) +# define __inline inline +# else +# define __inline /* No inline functions. */ +# endif + +# define __THROW +# define __THROWNL +# define __NTH(fct) fct + +#endif /* GCC. */ + +/* Compilers that are not clang may object to + #if defined __clang__ && __has_extension(...) + even though they do not need to evaluate the right-hand side of the &&. */ +#if defined __clang__ && defined __has_extension +# define __glibc_clang_has_extension(ext) __has_extension (ext) +#else +# define __glibc_clang_has_extension(ext) 0 +#endif + +/* These two macros are not used in glibc anymore. They are kept here + only because some other projects expect the macros to be defined. */ +#define __P(args) args +#define __PMT(args) args + +/* For these things, GCC behaves the ANSI way normally, + and the non-ANSI way under -traditional. */ + +#define __CONCAT(x,y) x ## y +#define __STRING(x) #x + +/* This is not a typedef so `const __ptr_t' does the right thing. */ +#define __ptr_t void * + + +/* C++ needs to know that types and declarations are C, not C++. */ +#ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# define __END_DECLS } +#else +# define __BEGIN_DECLS +# define __END_DECLS +#endif + + +/* Fortify support. */ +#define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) +#define __bos0(ptr) __builtin_object_size (ptr, 0) + +#if __GNUC_PREREQ (4,3) +# define __warndecl(name, msg) \ + extern void name (void) __attribute__((__warning__ (msg))) +# define __warnattr(msg) __attribute__((__warning__ (msg))) +# define __errordecl(name, msg) \ + extern void name (void) __attribute__((__error__ (msg))) +#else +# define __warndecl(name, msg) extern void name (void) +# define __warnattr(msg) +# define __errordecl(name, msg) extern void name (void) +#endif + +/* Support for flexible arrays. + Headers that should use flexible arrays only if they're "real" + (e.g. only if they won't affect sizeof()) should test + #if __glibc_c99_flexarr_available. */ +#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc +# define __flexarr [] +# define __glibc_c99_flexarr_available 1 +#elif __GNUC_PREREQ (2,97) +/* GCC 2.97 supports C99 flexible array members as an extension, + even when in C89 mode or compiling C++ (any version). */ +# define __flexarr [] +# define __glibc_c99_flexarr_available 1 +#elif defined __GNUC__ +/* Pre-2.97 GCC did not support C99 flexible arrays but did have + an equivalent extension with slightly different notation. */ +# define __flexarr [0] +# define __glibc_c99_flexarr_available 1 +#else +/* Some other non-C99 compiler. Approximate with [1]. */ +# define __flexarr [1] +# define __glibc_c99_flexarr_available 0 +#endif + + +/* __asm__ ("xyz") is used throughout the headers to rename functions + at the assembly language level. This is wrapped by the __REDIRECT + macro, in order to support compilers that can do this some other + way. When compilers don't support asm-names at all, we have to do + preprocessor tricks instead (which don't have exactly the right + semantics, but it's the best we can do). + + Example: + int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */ + +#if defined __GNUC__ && __GNUC__ >= 2 + +# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias)) +# ifdef __cplusplus +# define __REDIRECT_NTH(name, proto, alias) \ + name proto __THROW __asm__ (__ASMNAME (#alias)) +# define __REDIRECT_NTHNL(name, proto, alias) \ + name proto __THROWNL __asm__ (__ASMNAME (#alias)) +# else +# define __REDIRECT_NTH(name, proto, alias) \ + name proto __asm__ (__ASMNAME (#alias)) __THROW +# define __REDIRECT_NTHNL(name, proto, alias) \ + name proto __asm__ (__ASMNAME (#alias)) __THROWNL +# endif +# define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname) +# define __ASMNAME2(prefix, cname) __STRING (prefix) cname + +/* +#elif __SOME_OTHER_COMPILER__ + +# define __REDIRECT(name, proto, alias) name proto; \ + _Pragma("let " #name " = " #alias) +*/ +#endif + +/* GCC has various useful declarations that can be made with the + `__attribute__' syntax. All of the ways we use this do fine if + they are omitted for compilers that don't understand it. */ +#if !defined __GNUC__ || __GNUC__ < 2 +# define __attribute__(xyz) /* Ignore */ +#endif + +/* At some point during the gcc 2.96 development the `malloc' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (2,96) +# define __attribute_malloc__ __attribute__ ((__malloc__)) +#else +# define __attribute_malloc__ /* Ignore */ +#endif + +/* Tell the compiler which arguments to an allocation function + indicate the size of the allocation. */ +#if __GNUC_PREREQ (4, 3) +# define __attribute_alloc_size__(params) \ + __attribute__ ((__alloc_size__ params)) +#else +# define __attribute_alloc_size__(params) /* Ignore. */ +#endif + +/* At some point during the gcc 2.96 development the `pure' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (2,96) +# define __attribute_pure__ __attribute__ ((__pure__)) +#else +# define __attribute_pure__ /* Ignore */ +#endif + +/* This declaration tells the compiler that the value is constant. */ +#if __GNUC_PREREQ (2,5) +# define __attribute_const__ __attribute__ ((__const__)) +#else +# define __attribute_const__ /* Ignore */ +#endif + +/* At some point during the gcc 3.1 development the `used' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. */ +#if __GNUC_PREREQ (3,1) +# define __attribute_used__ __attribute__ ((__used__)) +# define __attribute_noinline__ __attribute__ ((__noinline__)) +#else +# define __attribute_used__ __attribute__ ((__unused__)) +# define __attribute_noinline__ /* Ignore */ +#endif + +/* Since version 3.2, gcc allows marking deprecated functions. */ +#if __GNUC_PREREQ (3,2) +# define __attribute_deprecated__ __attribute__ ((__deprecated__)) +#else +# define __attribute_deprecated__ /* Ignore */ +#endif + +/* Since version 4.5, gcc also allows one to specify the message printed + when a deprecated function is used. clang claims to be gcc 4.2, but + may also support this feature. */ +#if __GNUC_PREREQ (4,5) || \ + __glibc_clang_has_extension (__attribute_deprecated_with_message__) +# define __attribute_deprecated_msg__(msg) \ + __attribute__ ((__deprecated__ (msg))) +#else +# define __attribute_deprecated_msg__(msg) __attribute_deprecated__ +#endif + +/* At some point during the gcc 2.8 development the `format_arg' attribute + for functions was introduced. We don't want to use it unconditionally + (although this would be possible) since it generates warnings. + If several `format_arg' attributes are given for the same function, in + gcc-3.0 and older, all but the last one are ignored. In newer gccs, + all designated arguments are considered. */ +#if __GNUC_PREREQ (2,8) +# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x))) +#else +# define __attribute_format_arg__(x) /* Ignore */ +#endif + +/* At some point during the gcc 2.97 development the `strfmon' format + attribute for functions was introduced. We don't want to use it + unconditionally (although this would be possible) since it + generates warnings. */ +#if __GNUC_PREREQ (2,97) +# define __attribute_format_strfmon__(a,b) \ + __attribute__ ((__format__ (__strfmon__, a, b))) +#else +# define __attribute_format_strfmon__(a,b) /* Ignore */ +#endif + +/* The nonnull function attribute marks pointer parameters that + must not be NULL. Do not define __nonnull if it is already defined, + for portability when this file is used in Gnulib. */ +#ifndef __nonnull +# if __GNUC_PREREQ (3,3) +# define __nonnull(params) __attribute__ ((__nonnull__ params)) +# else +# define __nonnull(params) +# endif +#endif + +/* If fortification mode, we warn about unused results of certain + function calls which can lead to problems. */ +#if __GNUC_PREREQ (3,4) +# define __attribute_warn_unused_result__ \ + __attribute__ ((__warn_unused_result__)) +# if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0 +# define __wur __attribute_warn_unused_result__ +# endif +#else +# define __attribute_warn_unused_result__ /* empty */ +#endif +#ifndef __wur +# define __wur /* Ignore */ +#endif + +/* Forces a function to be always inlined. */ +#if __GNUC_PREREQ (3,2) +/* The Linux kernel defines __always_inline in stddef.h (283d7573), and + it conflicts with this definition. Therefore undefine it first to + allow either header to be included first. */ +# undef __always_inline +# define __always_inline __inline __attribute__ ((__always_inline__)) +#else +# undef __always_inline +# define __always_inline __inline +#endif + +/* Associate error messages with the source location of the call site rather + than with the source location inside the function. */ +#if __GNUC_PREREQ (4,3) +# define __attribute_artificial__ __attribute__ ((__artificial__)) +#else +# define __attribute_artificial__ /* Ignore */ +#endif + +/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. Using __GNUC_STDC_INLINE__ + or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions + older than 4.3 may define these macros and still not guarantee GNU inlining + semantics. + + clang++ identifies itself as gcc-4.2, but has support for GNU inlining + semantics, that can be checked fot by using the __GNUC_STDC_INLINE_ and + __GNUC_GNU_INLINE__ macro definitions. */ +#if (!defined __cplusplus || __GNUC_PREREQ (4,3) \ + || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \ + || defined __GNUC_GNU_INLINE__))) +# if defined __GNUC_STDC_INLINE__ || defined __cplusplus +# define __extern_inline extern __inline __attribute__ ((__gnu_inline__)) +# define __extern_always_inline \ + extern __always_inline __attribute__ ((__gnu_inline__)) +# else +# define __extern_inline extern __inline +# define __extern_always_inline extern __always_inline +# endif +#endif + +#ifdef __extern_always_inline +# define __fortify_function __extern_always_inline __attribute_artificial__ +#endif + +/* GCC 4.3 and above allow passing all anonymous arguments of an + __extern_always_inline function to some other vararg function. */ +#if __GNUC_PREREQ (4,3) +# define __va_arg_pack() __builtin_va_arg_pack () +# define __va_arg_pack_len() __builtin_va_arg_pack_len () +#endif + +/* It is possible to compile containing GCC extensions even if GCC is + run in pedantic mode if the uses are carefully marked using the + `__extension__' keyword. But this is not generally available before + version 2.8. */ +#if !__GNUC_PREREQ (2,8) +# define __extension__ /* Ignore */ +#endif + +/* __restrict is known in EGCS 1.2 and above. */ +#if !__GNUC_PREREQ (2,92) +# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +# define __restrict restrict +# else +# define __restrict /* Ignore */ +# endif +#endif + +/* ISO C99 also allows to declare arrays as non-overlapping. The syntax is + array_name[restrict] + GCC 3.1 supports this. */ +#if __GNUC_PREREQ (3,1) && !defined __GNUG__ +# define __restrict_arr __restrict +#else +# ifdef __GNUC__ +# define __restrict_arr /* Not supported in old GCC. */ +# else +# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +# define __restrict_arr restrict +# else +/* Some other non-C99 compiler. */ +# define __restrict_arr /* Not supported. */ +# endif +# endif +#endif + +#if __GNUC__ >= 3 +# define __glibc_unlikely(cond) __builtin_expect ((cond), 0) +# define __glibc_likely(cond) __builtin_expect ((cond), 1) +#else +# define __glibc_unlikely(cond) (cond) +# define __glibc_likely(cond) (cond) +#endif + +#ifdef __has_attribute +# define __glibc_has_attribute(attr) __has_attribute (attr) +#else +# define __glibc_has_attribute(attr) 0 +#endif + +#if (!defined _Noreturn \ + && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ + && !__GNUC_PREREQ (4,7)) +# if __GNUC_PREREQ (2,8) +# define _Noreturn __attribute__ ((__noreturn__)) +# else +# define _Noreturn +# endif +#endif + +#if __GNUC_PREREQ (8, 0) +/* Describes a char array whose address can safely be passed as the first + argument to strncpy and strncat, as the char array is not necessarily + a NUL-terminated string. */ +# define __attribute_nonstring__ __attribute__ ((__nonstring__)) +#else +# define __attribute_nonstring__ +#endif + +#if (!defined _Static_assert && !defined __cplusplus \ + && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ + && (!__GNUC_PREREQ (4, 6) || defined __STRICT_ANSI__)) +# define _Static_assert(expr, diagnostic) \ + extern int (*__Static_assert_function (void)) \ + [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })] +#endif + +/* The #ifndef lets Gnulib avoid including these on non-glibc + platforms, where the includes typically do not exist. */ +#ifndef __WORDSIZE +# include <bits/wordsize.h> +# include <bits/long-double.h> +#endif + +#if defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH +# define __LDBL_COMPAT 1 +# ifdef __REDIRECT +# define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias) +# define __LDBL_REDIR(name, proto) \ + __LDBL_REDIR1 (name, proto, __nldbl_##name) +# define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias) +# define __LDBL_REDIR_NTH(name, proto) \ + __LDBL_REDIR1_NTH (name, proto, __nldbl_##name) +# define __LDBL_REDIR1_DECL(name, alias) \ + extern __typeof (name) name __asm (__ASMNAME (#alias)); +# define __LDBL_REDIR_DECL(name) \ + extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name)); +# define __REDIRECT_LDBL(name, proto, alias) \ + __LDBL_REDIR1 (name, proto, __nldbl_##alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias) +# endif +#endif +#if !defined __LDBL_COMPAT || !defined __REDIRECT +# define __LDBL_REDIR1(name, proto, alias) name proto +# define __LDBL_REDIR(name, proto) name proto +# define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW +# define __LDBL_REDIR_NTH(name, proto) name proto __THROW +# define __LDBL_REDIR_DECL(name) +# ifdef __REDIRECT +# define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias) +# define __REDIRECT_NTH_LDBL(name, proto, alias) \ + __REDIRECT_NTH (name, proto, alias) +# endif +#endif + +/* __glibc_macro_warning (MESSAGE) issues warning MESSAGE. This is + intended for use in preprocessor macros. + + Note: MESSAGE must be a _single_ string; concatenation of string + literals is not supported. */ +#if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5) +# define __glibc_macro_warning1(message) _Pragma (#message) +# define __glibc_macro_warning(message) \ + __glibc_macro_warning1 (GCC warning message) +#else +# define __glibc_macro_warning(msg) +#endif + +/* Generic selection (ISO C11) is a C-only feature, available in GCC + since version 4.9. Previous versions do not provide generic + selection, even though they might set __STDC_VERSION__ to 201112L, + when in -std=c11 mode. Thus, we must check for !defined __GNUC__ + when testing __STDC_VERSION__ for generic selection support. + On the other hand, Clang also defines __GNUC__, so a clang-specific + check is required to enable the use of generic selection. */ +#if !defined __cplusplus \ + && (__GNUC_PREREQ (4, 9) \ + || __glibc_clang_has_extension (c_generic_selections) \ + || (!defined __GNUC__ && defined __STDC_VERSION__ \ + && __STDC_VERSION__ >= 201112L)) +# define __HAVE_GENERIC_SELECTION 1 +#else +# define __HAVE_GENERIC_SELECTION 0 +#endif + +#endif /* sys/cdefs.h */ diff --git a/devspec.en_US/project/recutils/lib/cloexec.c b/devspec.en_US/project/recutils/lib/cloexec.c new file mode 100755 index 0000000..db42576 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/cloexec.c @@ -0,0 +1,83 @@ +/* cloexec.c - set or clear the close-on-exec descriptor flag + + Copyright (C) 1991, 2004-2006, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + + The code is taken from glibc/manual/llio.texi */ + +#include <config.h> + +#include "cloexec.h" + +#include <errno.h> +#include <fcntl.h> +#include <unistd.h> + +/* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true, + or clear the flag if VALUE is false. + Return 0 on success, or -1 on error with 'errno' set. + + Note that on MingW, this function does NOT protect DESC from being + inherited into spawned children. Instead, either use dup_cloexec + followed by closing the original DESC, or use interfaces such as + open or pipe2 that accept flags like O_CLOEXEC to create DESC + non-inheritable in the first place. */ + +int +set_cloexec_flag (int desc, bool value) +{ +#ifdef F_SETFD + + int flags = fcntl (desc, F_GETFD, 0); + + if (0 <= flags) + { + int newflags = (value ? flags | FD_CLOEXEC : flags & ~FD_CLOEXEC); + + if (flags == newflags + || fcntl (desc, F_SETFD, newflags) != -1) + return 0; + } + + return -1; + +#else /* !F_SETFD */ + + /* Use dup2 to reject invalid file descriptors; the cloexec flag + will be unaffected. */ + if (desc < 0) + { + errno = EBADF; + return -1; + } + if (dup2 (desc, desc) < 0) + /* errno is EBADF here. */ + return -1; + + /* There is nothing we can do on this kind of platform. Punt. */ + return 0; +#endif /* !F_SETFD */ +} + + +/* Duplicates a file handle FD, while marking the copy to be closed + prior to exec or spawn. Returns -1 and sets errno if FD could not + be duplicated. */ + +int +dup_cloexec (int fd) +{ + return fcntl (fd, F_DUPFD_CLOEXEC, 0); +} diff --git a/devspec.en_US/project/recutils/lib/cloexec.h b/devspec.en_US/project/recutils/lib/cloexec.h new file mode 100755 index 0000000..06ad945 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/cloexec.h @@ -0,0 +1,38 @@ +/* cloexec.c - set or clear the close-on-exec descriptor flag + + Copyright (C) 2004, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +*/ + +#include <stdbool.h> + +/* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true, + or clear the flag if VALUE is false. + Return 0 on success, or -1 on error with 'errno' set. + + Note that on MingW, this function does NOT protect DESC from being + inherited into spawned children. Instead, either use dup_cloexec + followed by closing the original DESC, or use interfaces such as + open or pipe2 that accept flags like O_CLOEXEC to create DESC + non-inheritable in the first place. */ + +int set_cloexec_flag (int desc, bool value); + +/* Duplicates a file handle FD, while marking the copy to be closed + prior to exec or spawn. Returns -1 and sets errno if FD could not + be duplicated. */ + +int dup_cloexec (int fd); diff --git a/devspec.en_US/project/recutils/lib/close-stream.c b/devspec.en_US/project/recutils/lib/close-stream.c new file mode 100755 index 0000000..5458c4f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/close-stream.c @@ -0,0 +1,78 @@ +/* Close a stream, with nicer error checking than fclose's. + + Copyright (C) 1998-2002, 2004, 2006-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include "close-stream.h" + +#include <errno.h> +#include <stdbool.h> + +#include "fpending.h" + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + +/* Close STREAM. Return 0 if successful, EOF (setting errno) + otherwise. A failure might set errno to 0 if the error number + cannot be determined. + + A failure with errno set to EPIPE may or may not indicate an error + situation worth signaling to the user. See the documentation of the + close_stdout_set_ignore_EPIPE function for details. + + If a program writes *anything* to STREAM, that program should close + STREAM and make sure that it succeeds before exiting. Otherwise, + suppose that you go to the extreme of checking the return status + of every function that does an explicit write to STREAM. The last + printf can succeed in writing to the internal stream buffer, and yet + the fclose(STREAM) could still fail (due e.g., to a disk full error) + when it tries to write out that buffered data. Thus, you would be + left with an incomplete output file and the offending program would + exit successfully. Even calling fflush is not always sufficient, + since some file systems (NFS and CODA) buffer written/flushed data + until an actual close call. + + Besides, it's wasteful to check the return value from every call + that writes to STREAM -- just let the internal stream state record + the failure. That's what the ferror test is checking below. */ + +int +close_stream (FILE *stream) +{ + const bool some_pending = (__fpending (stream) != 0); + const bool prev_fail = (ferror (stream) != 0); + const bool fclose_fail = (fclose (stream) != 0); + + /* Return an error indication if there was a previous failure or if + fclose failed, with one exception: ignore an fclose failure if + there was no previous error, no data remains to be flushed, and + fclose failed with EBADF. That can happen when a program like cp + is invoked like this 'cp a b >&-' (i.e., with standard output + closed) and doesn't generate any output (hence no previous error + and nothing to be flushed). */ + + if (prev_fail || (fclose_fail && (some_pending || errno != EBADF))) + { + if (! fclose_fail) + errno = 0; + return EOF; + } + + return 0; +} diff --git a/devspec.en_US/project/recutils/lib/close-stream.h b/devspec.en_US/project/recutils/lib/close-stream.h new file mode 100755 index 0000000..be3d419 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/close-stream.h @@ -0,0 +1,2 @@ +#include <stdio.h> +int close_stream (FILE *stream); diff --git a/devspec.en_US/project/recutils/lib/close.c b/devspec.en_US/project/recutils/lib/close.c new file mode 100755 index 0000000..40ce845 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/close.c @@ -0,0 +1,71 @@ +/* close replacement. + Copyright (C) 2008-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <unistd.h> + +#include <errno.h> + +#include "fd-hook.h" +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +#endif + +#undef close + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +static int +close_nothrow (int fd) +{ + int result; + + TRY_MSVC_INVAL + { + result = close (fd); + } + CATCH_MSVC_INVAL + { + result = -1; + errno = EBADF; + } + DONE_MSVC_INVAL; + + return result; +} +#else +# define close_nothrow close +#endif + +/* Override close() to call into other gnulib modules. */ + +int +rpl_close (int fd) +{ +#if WINDOWS_SOCKETS + int retval = execute_all_close_hooks (close_nothrow, fd); +#else + int retval = close_nothrow (fd); +#endif + +#if REPLACE_FCHDIR + if (retval >= 0) + _gl_unregister_fd (fd); +#endif + + return retval; +} diff --git a/devspec.en_US/project/recutils/lib/closeout.c b/devspec.en_US/project/recutils/lib/closeout.c new file mode 100755 index 0000000..4a604ec --- /dev/null +++ b/devspec.en_US/project/recutils/lib/closeout.c @@ -0,0 +1,136 @@ +/* Close standard output and standard error, exiting with a diagnostic on error. + + Copyright (C) 1998-2002, 2004, 2006, 2008-2019 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include "closeout.h" + +#include <errno.h> +#include <stdbool.h> +#include <stdio.h> +#include <unistd.h> + +#include "gettext.h" +#define _(msgid) gettext (msgid) + +#include "close-stream.h" +#include "error.h" +#include "exitfail.h" +#include "quotearg.h" + +#ifndef __has_feature +# define __has_feature(a) false +#endif + +#if defined __SANITIZE_ADDRESS__ || __has_feature (address_sanitizer) +enum { SANITIZE_ADDRESS = true }; +#else +enum { SANITIZE_ADDRESS = false }; +#endif + +static const char *file_name; + +/* Set the file name to be reported in the event an error is detected + by close_stdout. */ +void +close_stdout_set_file_name (const char *file) +{ + file_name = file; +} + +static bool ignore_EPIPE /* = false */; + +/* Specify the reaction to an EPIPE error during the closing of stdout: + - If ignore = true, it shall be ignored. + - If ignore = false, it shall evoke a diagnostic, along with a nonzero + exit status. + The default is ignore = false. + + This setting matters only if the SIGPIPE signal is ignored (i.e. its + handler set to SIG_IGN) or blocked. Only particular programs need to + temporarily ignore SIGPIPE. If SIGPIPE is ignored or blocked because + it was ignored or blocked in the parent process when it created the + child process, it usually is a bug in the parent process: It is bad + practice to have SIGPIPE ignored or blocked while creating a child + process. + + EPIPE occurs when writing to a pipe or socket that has no readers now, + when SIGPIPE is ignored or blocked. + + The ignore = false setting is suitable for a scenario where it is normally + guaranteed that the pipe writer terminates before the pipe reader. In + this case, an EPIPE is an indication of a premature termination of the + pipe reader and should lead to a diagnostic and a nonzero exit status. + + The ignore = true setting is suitable for a scenario where you don't know + ahead of time whether the pipe writer or the pipe reader will terminate + first. In this case, an EPIPE is an indication that the pipe writer can + stop doing useless write() calls; this is what close_stdout does anyway. + EPIPE is part of the normal pipe/socket shutdown protocol in this case, + and should not lead to a diagnostic message. */ + +void +close_stdout_set_ignore_EPIPE (bool ignore) +{ + ignore_EPIPE = ignore; +} + +/* Close standard output. On error, issue a diagnostic and _exit + with status 'exit_failure'. + + Also close standard error. On error, _exit with status 'exit_failure'. + + Since close_stdout is commonly registered via 'atexit', POSIX + and the C standard both say that it should not call 'exit', + because the behavior is undefined if 'exit' is called more than + once. So it calls '_exit' instead of 'exit'. If close_stdout + is registered via atexit before other functions are registered, + the other functions can act before this _exit is invoked. + + Applications that use close_stdout should flush any streams + other than stdout and stderr before exiting, since the call to + _exit will bypass other buffer flushing. Applications should + be flushing and closing other streams anyway, to check for I/O + errors. Also, applications should not use tmpfile, since _exit + can bypass the removal of these files. + + It's important to detect such failures and exit nonzero because many + tools (most notably 'make' and other build-management systems) depend + on being able to detect failure in other tools via their exit status. */ + +void +close_stdout (void) +{ + if (close_stream (stdout) != 0 + && !(ignore_EPIPE && errno == EPIPE)) + { + char const *write_error = _("write error"); + if (file_name) + error (0, errno, "%s: %s", quotearg_colon (file_name), + write_error); + else + error (0, errno, "%s", write_error); + + _exit (exit_failure); + } + + /* Close stderr only if not sanitizing, as sanitizers may report to + stderr after this function returns. */ + if (!SANITIZE_ADDRESS && close_stream (stderr) != 0) + _exit (exit_failure); +} diff --git a/devspec.en_US/project/recutils/lib/closeout.h b/devspec.en_US/project/recutils/lib/closeout.h new file mode 100755 index 0000000..ac89f76 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/closeout.h @@ -0,0 +1,36 @@ +/* Close standard output and standard error. + + Copyright (C) 1998, 2000, 2003-2004, 2006, 2008-2019 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef CLOSEOUT_H +# define CLOSEOUT_H 1 + +# include <stdbool.h> + +# ifdef __cplusplus +extern "C" { +# endif + +void close_stdout_set_file_name (const char *file); +void close_stdout_set_ignore_EPIPE (bool ignore); +void close_stdout (void); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/devspec.en_US/project/recutils/lib/copy-acl.c b/devspec.en_US/project/recutils/lib/copy-acl.c new file mode 100755 index 0000000..e7d68f4 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/copy-acl.c @@ -0,0 +1,61 @@ +/* Copy access control list from one file to file. -*- coding: utf-8 -*- + + Copyright (C) 2002-2003, 2005-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + + Written by Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ + +#include <config.h> + +#include "acl.h" + +#include <errno.h> + +#include "quote.h" +#include "error.h" +#include "gettext.h" +#define _(msgid) gettext (msgid) + + +/* Copy access control lists from one file to another. If SOURCE_DESC is + a valid file descriptor, use file descriptor operations, else use + filename based operations on SRC_NAME. Likewise for DEST_DESC and + DST_NAME. + If access control lists are not available, fchmod the target file to + MODE. Also sets the non-permission bits of the destination file + (S_ISUID, S_ISGID, S_ISVTX) to those from MODE if any are set. + Return 0 if successful, otherwise output a diagnostic and return a + negative error code. */ + +int +copy_acl (const char *src_name, int source_desc, const char *dst_name, + int dest_desc, mode_t mode) +{ + int ret = qcopy_acl (src_name, source_desc, dst_name, dest_desc, mode); + switch (ret) + { + case -2: + error (0, errno, "%s", quote (src_name)); + break; + + case -1: + error (0, errno, _("preserving permissions for %s"), quote (dst_name)); + break; + + default: + break; + } + return ret; +} diff --git a/devspec.en_US/project/recutils/lib/crc.c b/devspec.en_US/project/recutils/lib/crc.c new file mode 100755 index 0000000..29c6afb --- /dev/null +++ b/devspec.en_US/project/recutils/lib/crc.c @@ -0,0 +1,103 @@ +/* crc.c -- cyclic redundancy checks + Copyright (C) 2005-2006, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Simon Josefsson. */ + +#include <config.h> + +#include "crc.h" + +/* Table of CRCs of all 8-bit messages. Generated by running code + from RFC 1952 modified to print out the table. */ +static const uint32_t crc32_table[256] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, + 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, + 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, + 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, + 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, + 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, + 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, + 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, + 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, + 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, + 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, + 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, + 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, + 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, + 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, + 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, + 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d +}; + +/* + * The following function was extracted from RFC 1952 by Simon + * Josefsson. It was modified to avoid initial and final XOR, to use + * size_t for the buffer length, and to use the const keyword. + */ +uint32_t +crc32_update_no_xor (uint32_t crc, const char *buf, size_t len) +{ + size_t n; + + for (n = 0; n < len; n++) + crc = crc32_table[(crc ^ buf[n]) & 0xff] ^ (crc >> 8); + + return crc; +} + +uint32_t +crc32_no_xor (const char *buf, size_t len) +{ + return crc32_update_no_xor (0L, buf, len); +} + +uint32_t +crc32_update (uint32_t crc, const char *buf, size_t len) +{ + return crc32_update_no_xor (crc ^ 0xffffffff, buf, len) ^ 0xffffffff; +} + +uint32_t +crc32 (const char *buf, size_t len) +{ + return crc32_update (0L, buf, len); +} diff --git a/devspec.en_US/project/recutils/lib/crc.h b/devspec.en_US/project/recutils/lib/crc.h new file mode 100755 index 0000000..c842f25 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/crc.h @@ -0,0 +1,47 @@ +/* crc.h -- cyclic redundancy checks + Copyright (C) 2005, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Simon Josefsson. */ + +#ifndef CRC_H +# define CRC_H 1 + +#include <stddef.h> +#include <stdint.h> + +/* Compute CRC-32 value of LEN bytes long BUF, and return it. */ +extern uint32_t crc32 (const char *buf, size_t len); + +/* Incrementally update CRC-32 value CRC using LEN bytes long BUF. In + the first call, use 0 as the value for CRC. Return the updated + CRC-32 value. */ +extern uint32_t crc32_update (uint32_t crc, const char *buf, size_t len); + +/* Compute modified-CRC-32 value of LEN bytes long BUF, and return it. + The "modification" is to avoid the initial and final XOR operation. + Due to historic implementation errors, this variant is sometimes + used (i.e., in RFC 3961). */ +extern uint32_t crc32_no_xor (const char *buf, size_t len); + +/* Incrementally update modified-CRC-32 value CRC using LEN bytes long + BUF. In the first call, use 0 as the value for CRC. Return the + updated modified-CRC-32 value. The "modification" is to avoid the + initial and final XOR operation. Due to historic implementation + errors, this variant is sometimes used (i.e., in RFC 3961). */ +extern uint32_t +crc32_update_no_xor (uint32_t crc, const char *buf, size_t len); + +#endif /* CRC_H */ diff --git a/devspec.en_US/project/recutils/lib/dirname-lgpl.c b/devspec.en_US/project/recutils/lib/dirname-lgpl.c new file mode 100755 index 0000000..7cf89d8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/dirname-lgpl.c @@ -0,0 +1,86 @@ +/* dirname.c -- return all but the last element in a file name + + Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2019 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include "dirname.h" + +#include <stdlib.h> +#include <string.h> + +/* Return the length of the prefix of FILE that will be used by + dir_name. If FILE is in the working directory, this returns zero + even though 'dir_name (FILE)' will return ".". Works properly even + if there are trailing slashes (by effectively ignoring them). */ + +size_t +dir_len (char const *file) +{ + size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file); + size_t length; + + /* Advance prefix_length beyond important leading slashes. */ + prefix_length += (prefix_length != 0 + ? (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE + && ISSLASH (file[prefix_length])) + : (ISSLASH (file[0]) + ? ((DOUBLE_SLASH_IS_DISTINCT_ROOT + && ISSLASH (file[1]) && ! ISSLASH (file[2]) + ? 2 : 1)) + : 0)); + + /* Strip the basename and any redundant slashes before it. */ + for (length = last_component (file) - file; + prefix_length < length; length--) + if (! ISSLASH (file[length - 1])) + break; + return length; +} + + +/* In general, we can't use the builtin 'dirname' function if available, + since it has different meanings in different environments. + In some environments the builtin 'dirname' modifies its argument. + + Return the leading directories part of FILE, allocated with malloc. + Works properly even if there are trailing slashes (by effectively + ignoring them). Return NULL on failure. + + If lstat (FILE) would succeed, then { chdir (dir_name (FILE)); + lstat (base_name (FILE)); } will access the same file. Likewise, + if the sequence { chdir (dir_name (FILE)); + rename (base_name (FILE), "foo"); } succeeds, you have renamed FILE + to "foo" in the same directory FILE was in. */ + +char * +mdir_name (char const *file) +{ + size_t length = dir_len (file); + bool append_dot = (length == 0 + || (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE + && length == FILE_SYSTEM_PREFIX_LEN (file) + && file[2] != '\0' && ! ISSLASH (file[2]))); + char *dir = malloc (length + append_dot + 1); + if (!dir) + return NULL; + memcpy (dir, file, length); + if (append_dot) + dir[length++] = '.'; + dir[length] = '\0'; + return dir; +} diff --git a/devspec.en_US/project/recutils/lib/dirname.h b/devspec.en_US/project/recutils/lib/dirname.h new file mode 100755 index 0000000..5791659 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/dirname.h @@ -0,0 +1,54 @@ +/* Take file names apart into directory and base names. + + Copyright (C) 1998, 2001, 2003-2006, 2009-2019 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef DIRNAME_H_ +# define DIRNAME_H_ 1 + +# include <stdbool.h> +# include <stddef.h> +# include "dosname.h" + +# ifndef DIRECTORY_SEPARATOR +# define DIRECTORY_SEPARATOR '/' +# endif + +# ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT +# define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# if GNULIB_DIRNAME +char *base_name (char const *file) _GL_ATTRIBUTE_MALLOC; +char *dir_name (char const *file); +# endif + +char *mdir_name (char const *file); +size_t base_len (char const *file) _GL_ATTRIBUTE_PURE; +size_t dir_len (char const *file) _GL_ATTRIBUTE_PURE; +char *last_component (char const *file) _GL_ATTRIBUTE_PURE; + +bool strip_trailing_slashes (char *file); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* not DIRNAME_H_ */ diff --git a/devspec.en_US/project/recutils/lib/dosname.h b/devspec.en_US/project/recutils/lib/dosname.h new file mode 100755 index 0000000..c0ab684 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/dosname.h @@ -0,0 +1,52 @@ +/* File names on MS-DOS/Windows systems. + + Copyright (C) 2000-2001, 2004-2006, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + + From Paul Eggert and Jim Meyering. */ + +#ifndef _DOSNAME_H +#define _DOSNAME_H + +#if (defined _WIN32 || defined __CYGWIN__ \ + || defined __EMX__ || defined __MSDOS__ || defined __DJGPP__) + /* This internal macro assumes ASCII, but all hosts that support drive + letters use ASCII. */ +# define _IS_DRIVE_LETTER(C) (((unsigned int) (C) | ('a' - 'A')) - 'a' \ + <= 'z' - 'a') +# define FILE_SYSTEM_PREFIX_LEN(Filename) \ + (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':' ? 2 : 0) +# ifndef __CYGWIN__ +# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 +# endif +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +#else +# define FILE_SYSTEM_PREFIX_LEN(Filename) 0 +# define ISSLASH(C) ((C) == '/') +#endif + +#ifndef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE +# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +#endif + +#if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE +# define IS_ABSOLUTE_FILE_NAME(F) ISSLASH ((F)[FILE_SYSTEM_PREFIX_LEN (F)]) +# else +# define IS_ABSOLUTE_FILE_NAME(F) \ + (ISSLASH ((F)[0]) || FILE_SYSTEM_PREFIX_LEN (F) != 0) +#endif +#define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F)) + +#endif /* DOSNAME_H_ */ diff --git a/devspec.en_US/project/recutils/lib/dup2.c b/devspec.en_US/project/recutils/lib/dup2.c new file mode 100755 index 0000000..d3aafa4 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/dup2.c @@ -0,0 +1,235 @@ +/* Duplicate an open file descriptor to a specified file descriptor. + + Copyright (C) 1999, 2004-2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* written by Paul Eggert */ + +#include <config.h> + +/* Specification. */ +#include <unistd.h> + +#include <errno.h> +#include <fcntl.h> + +#if HAVE_DUP2 + +# undef dup2 + +# if defined _WIN32 && ! defined __CYGWIN__ + +/* Get declarations of the native Windows API functions. */ +# define WIN32_LEAN_AND_MEAN +# include <windows.h> + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +# endif + +/* Get _get_osfhandle. */ +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include <io.h> +# endif + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +static int +dup2_nothrow (int fd, int desired_fd) +{ + int result; + + TRY_MSVC_INVAL + { + result = dup2 (fd, desired_fd); + } + CATCH_MSVC_INVAL + { + errno = EBADF; + result = -1; + } + DONE_MSVC_INVAL; + + return result; +} +# else +# define dup2_nothrow dup2 +# endif + +static int +ms_windows_dup2 (int fd, int desired_fd) +{ + int result; + + /* If fd is closed, mingw hangs on dup2 (fd, fd). If fd is open, + dup2 (fd, fd) returns 0, but all further attempts to use fd in + future dup2 calls will hang. */ + if (fd == desired_fd) + { + if ((HANDLE) _get_osfhandle (fd) == INVALID_HANDLE_VALUE) + { + errno = EBADF; + return -1; + } + return fd; + } + + /* Wine 1.0.1 return 0 when desired_fd is negative but not -1: + https://bugs.winehq.org/show_bug.cgi?id=21289 */ + if (desired_fd < 0) + { + errno = EBADF; + return -1; + } + + result = dup2_nothrow (fd, desired_fd); + + if (result == 0) + result = desired_fd; + + return result; +} + +# define dup2 ms_windows_dup2 + +# elif defined __KLIBC__ + +# include <InnoTekLIBC/backend.h> + +static int +klibc_dup2dirfd (int fd, int desired_fd) +{ + int tempfd; + int dupfd; + + tempfd = open ("NUL", O_RDONLY); + if (tempfd == -1) + return -1; + + if (tempfd == desired_fd) + { + close (tempfd); + + char path[_MAX_PATH]; + if (__libc_Back_ioFHToPath (fd, path, sizeof (path))) + return -1; + + return open(path, O_RDONLY); + } + + dupfd = klibc_dup2dirfd (fd, desired_fd); + + close (tempfd); + + return dupfd; +} + +static int +klibc_dup2 (int fd, int desired_fd) +{ + int dupfd; + struct stat sbuf; + + dupfd = dup2 (fd, desired_fd); + if (dupfd == -1 && errno == ENOTSUP \ + && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) + { + close (desired_fd); + + return klibc_dup2dirfd (fd, desired_fd); + } + + return dupfd; +} + +# define dup2 klibc_dup2 +# endif + +int +rpl_dup2 (int fd, int desired_fd) +{ + int result; + +# ifdef F_GETFL + /* On Linux kernels 2.6.26-2.6.29, dup2 (fd, fd) returns -EBADF. + On Cygwin 1.5.x, dup2 (1, 1) returns 0. + On Cygwin 1.7.17, dup2 (1, -1) dumps core. + On Cygwin 1.7.25, dup2 (1, 256) can dump core. + On Haiku, dup2 (fd, fd) mistakenly clears FD_CLOEXEC. */ +# if HAVE_SETDTABLESIZE + setdtablesize (desired_fd + 1); +# endif + if (desired_fd < 0) + fd = desired_fd; + if (fd == desired_fd) + return fcntl (fd, F_GETFL) == -1 ? -1 : fd; +# endif + + result = dup2 (fd, desired_fd); + + /* Correct an errno value on FreeBSD 6.1 and Cygwin 1.5.x. */ + if (result == -1 && errno == EMFILE) + errno = EBADF; +# if REPLACE_FCHDIR + if (fd != desired_fd && result != -1) + result = _gl_register_dup (fd, result); +# endif + return result; +} + +#else /* !HAVE_DUP2 */ + +/* On older platforms, dup2 did not exist. */ + +# ifndef F_DUPFD +static int +dupfd (int fd, int desired_fd) +{ + int duplicated_fd = dup (fd); + if (duplicated_fd < 0 || duplicated_fd == desired_fd) + return duplicated_fd; + else + { + int r = dupfd (fd, desired_fd); + int e = errno; + close (duplicated_fd); + errno = e; + return r; + } +} +# endif + +int +dup2 (int fd, int desired_fd) +{ + int result = fcntl (fd, F_GETFL) < 0 ? -1 : fd; + if (result == -1 || fd == desired_fd) + return result; + close (desired_fd); +# ifdef F_DUPFD + result = fcntl (fd, F_DUPFD, desired_fd); +# if REPLACE_FCHDIR + if (0 <= result) + result = _gl_register_dup (fd, result); +# endif +# else + result = dupfd (fd, desired_fd); +# endif + if (result == -1 && (errno == EMFILE || errno == EINVAL)) + errno = EBADF; + return result; +} +#endif /* !HAVE_DUP2 */ diff --git a/devspec.en_US/project/recutils/lib/errno.in.h b/devspec.en_US/project/recutils/lib/errno.in.h new file mode 100755 index 0000000..3bd27f1 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/errno.in.h @@ -0,0 +1,279 @@ +/* A POSIX-like <errno.h>. + + Copyright (C) 2008-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _@GUARD_PREFIX@_ERRNO_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_ERRNO_H@ + +#ifndef _@GUARD_PREFIX@_ERRNO_H +#define _@GUARD_PREFIX@_ERRNO_H + + +/* On native Windows platforms, many macros are not defined. */ +# if defined _WIN32 && ! defined __CYGWIN__ + +/* These are the same values as defined by MSVC 10, for interoperability. */ + +# ifndef ENOMSG +# define ENOMSG 122 +# define GNULIB_defined_ENOMSG 1 +# endif + +# ifndef EIDRM +# define EIDRM 111 +# define GNULIB_defined_EIDRM 1 +# endif + +# ifndef ENOLINK +# define ENOLINK 121 +# define GNULIB_defined_ENOLINK 1 +# endif + +# ifndef EPROTO +# define EPROTO 134 +# define GNULIB_defined_EPROTO 1 +# endif + +# ifndef EBADMSG +# define EBADMSG 104 +# define GNULIB_defined_EBADMSG 1 +# endif + +# ifndef EOVERFLOW +# define EOVERFLOW 132 +# define GNULIB_defined_EOVERFLOW 1 +# endif + +# ifndef ENOTSUP +# define ENOTSUP 129 +# define GNULIB_defined_ENOTSUP 1 +# endif + +# ifndef ENETRESET +# define ENETRESET 117 +# define GNULIB_defined_ENETRESET 1 +# endif + +# ifndef ECONNABORTED +# define ECONNABORTED 106 +# define GNULIB_defined_ECONNABORTED 1 +# endif + +# ifndef ECANCELED +# define ECANCELED 105 +# define GNULIB_defined_ECANCELED 1 +# endif + +# ifndef EOWNERDEAD +# define EOWNERDEAD 133 +# define GNULIB_defined_EOWNERDEAD 1 +# endif + +# ifndef ENOTRECOVERABLE +# define ENOTRECOVERABLE 127 +# define GNULIB_defined_ENOTRECOVERABLE 1 +# endif + +# ifndef EINPROGRESS +# define EINPROGRESS 112 +# define EALREADY 103 +# define ENOTSOCK 128 +# define EDESTADDRREQ 109 +# define EMSGSIZE 115 +# define EPROTOTYPE 136 +# define ENOPROTOOPT 123 +# define EPROTONOSUPPORT 135 +# define EOPNOTSUPP 130 +# define EAFNOSUPPORT 102 +# define EADDRINUSE 100 +# define EADDRNOTAVAIL 101 +# define ENETDOWN 116 +# define ENETUNREACH 118 +# define ECONNRESET 108 +# define ENOBUFS 119 +# define EISCONN 113 +# define ENOTCONN 126 +# define ETIMEDOUT 138 +# define ECONNREFUSED 107 +# define ELOOP 114 +# define EHOSTUNREACH 110 +# define EWOULDBLOCK 140 +# define GNULIB_defined_ESOCK 1 +# endif + +# ifndef ETXTBSY +# define ETXTBSY 139 +# define ENODATA 120 /* not required by POSIX */ +# define ENOSR 124 /* not required by POSIX */ +# define ENOSTR 125 /* not required by POSIX */ +# define ETIME 137 /* not required by POSIX */ +# define EOTHER 131 /* not required by POSIX */ +# define GNULIB_defined_ESTREAMS 1 +# endif + +/* These are intentionally the same values as the WSA* error numbers, defined + in <winsock2.h>. */ +# define ESOCKTNOSUPPORT 10044 /* not required by POSIX */ +# define EPFNOSUPPORT 10046 /* not required by POSIX */ +# define ESHUTDOWN 10058 /* not required by POSIX */ +# define ETOOMANYREFS 10059 /* not required by POSIX */ +# define EHOSTDOWN 10064 /* not required by POSIX */ +# define EPROCLIM 10067 /* not required by POSIX */ +# define EUSERS 10068 /* not required by POSIX */ +# define EDQUOT 10069 +# define ESTALE 10070 +# define EREMOTE 10071 /* not required by POSIX */ +# define GNULIB_defined_EWINSOCK 1 + +# endif + + +/* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros + EMULTIHOP, ENOLINK, EOVERFLOW are not defined. */ +# if @EMULTIHOP_HIDDEN@ +# define EMULTIHOP @EMULTIHOP_VALUE@ +# define GNULIB_defined_EMULTIHOP 1 +# endif +# if @ENOLINK_HIDDEN@ +# define ENOLINK @ENOLINK_VALUE@ +# define GNULIB_defined_ENOLINK 1 +# endif +# if @EOVERFLOW_HIDDEN@ +# define EOVERFLOW @EOVERFLOW_VALUE@ +# define GNULIB_defined_EOVERFLOW 1 +# endif + + +/* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK, + EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined. + Likewise, on NonStop Kernel, EDQUOT is not defined. + Define them here. Values >= 2000 seem safe to use: Solaris ESTALE = 151, + HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133. + + Note: When one of these systems defines some of these macros some day, + binaries will have to be recompiled so that they recognizes the new + errno values from the system. */ + +# ifndef ENOMSG +# define ENOMSG 2000 +# define GNULIB_defined_ENOMSG 1 +# endif + +# ifndef EIDRM +# define EIDRM 2001 +# define GNULIB_defined_EIDRM 1 +# endif + +# ifndef ENOLINK +# define ENOLINK 2002 +# define GNULIB_defined_ENOLINK 1 +# endif + +# ifndef EPROTO +# define EPROTO 2003 +# define GNULIB_defined_EPROTO 1 +# endif + +# ifndef EMULTIHOP +# define EMULTIHOP 2004 +# define GNULIB_defined_EMULTIHOP 1 +# endif + +# ifndef EBADMSG +# define EBADMSG 2005 +# define GNULIB_defined_EBADMSG 1 +# endif + +# ifndef EOVERFLOW +# define EOVERFLOW 2006 +# define GNULIB_defined_EOVERFLOW 1 +# endif + +# ifndef ENOTSUP +# define ENOTSUP 2007 +# define GNULIB_defined_ENOTSUP 1 +# endif + +# ifndef ENETRESET +# define ENETRESET 2011 +# define GNULIB_defined_ENETRESET 1 +# endif + +# ifndef ECONNABORTED +# define ECONNABORTED 2012 +# define GNULIB_defined_ECONNABORTED 1 +# endif + +# ifndef ESTALE +# define ESTALE 2009 +# define GNULIB_defined_ESTALE 1 +# endif + +# ifndef EDQUOT +# define EDQUOT 2010 +# define GNULIB_defined_EDQUOT 1 +# endif + +# ifndef ECANCELED +# define ECANCELED 2008 +# define GNULIB_defined_ECANCELED 1 +# endif + +/* On many platforms, the macros EOWNERDEAD and ENOTRECOVERABLE are not + defined. */ + +# ifndef EOWNERDEAD +# if defined __sun + /* Use the same values as defined for Solaris >= 8, for + interoperability. */ +# define EOWNERDEAD 58 +# define ENOTRECOVERABLE 59 +# elif defined _WIN32 && ! defined __CYGWIN__ + /* We have a conflict here: pthreads-win32 defines these values + differently than MSVC 10. It's hairy to decide which one to use. */ +# if defined __MINGW32__ && !defined USE_WINDOWS_THREADS + /* Use the same values as defined by pthreads-win32, for + interoperability. */ +# define EOWNERDEAD 43 +# define ENOTRECOVERABLE 44 +# else + /* Use the same values as defined by MSVC 10, for + interoperability. */ +# define EOWNERDEAD 133 +# define ENOTRECOVERABLE 127 +# endif +# else +# define EOWNERDEAD 2013 +# define ENOTRECOVERABLE 2014 +# endif +# define GNULIB_defined_EOWNERDEAD 1 +# define GNULIB_defined_ENOTRECOVERABLE 1 +# endif + +# ifndef EILSEQ +# define EILSEQ 2015 +# define GNULIB_defined_EILSEQ 1 +# endif + +#endif /* _@GUARD_PREFIX@_ERRNO_H */ +#endif /* _@GUARD_PREFIX@_ERRNO_H */ diff --git a/devspec.en_US/project/recutils/lib/error.c b/devspec.en_US/project/recutils/lib/error.c new file mode 100755 index 0000000..7e532f0 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/error.c @@ -0,0 +1,411 @@ +/* Error handler for noninteractive utilities + Copyright (C) 1990-1998, 2000-2007, 2009-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */ + +#if !_LIBC +# include <config.h> +#endif + +#include "error.h" + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#if !_LIBC && ENABLE_NLS +# include "gettext.h" +# define _(msgid) gettext (msgid) +#endif + +#ifdef _LIBC +# include <libintl.h> +# include <stdbool.h> +# include <stdint.h> +# include <wchar.h> +# define mbsrtowcs __mbsrtowcs +# define USE_UNLOCKED_IO 0 +# define _GL_ATTRIBUTE_FORMAT_PRINTF(a, b) +# define _GL_ARG_NONNULL(a) +#else +# include "getprogname.h" +#endif + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + +#ifndef _ +# define _(String) String +#endif + +/* If NULL, error will flush stdout, then print on stderr the program + name, a colon and a space. Otherwise, error will call this + function without parameters instead. */ +void (*error_print_progname) (void); + +/* This variable is incremented each time 'error' is called. */ +unsigned int error_message_count; + +#ifdef _LIBC +/* In the GNU C library, there is a predefined variable for this. */ + +# define program_name program_invocation_name +# include <errno.h> +# include <limits.h> +# include <libio/libioP.h> + +/* In GNU libc we want do not want to use the common name 'error' directly. + Instead make it a weak alias. */ +extern void __error (int status, int errnum, const char *message, ...) + __attribute__ ((__format__ (__printf__, 3, 4))); +extern void __error_at_line (int status, int errnum, const char *file_name, + unsigned int line_number, const char *message, + ...) + __attribute__ ((__format__ (__printf__, 5, 6))); +# define error __error +# define error_at_line __error_at_line + +# include <libio/iolibio.h> +# define fflush(s) _IO_fflush (s) +# undef putc +# define putc(c, fp) _IO_putc (c, fp) + +# include <bits/libc-lock.h> + +#else /* not _LIBC */ + +# include <fcntl.h> +# include <unistd.h> + +# if defined _WIN32 && ! defined __CYGWIN__ +/* Get declarations of the native Windows API functions. */ +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +/* Get _get_osfhandle. */ +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include <io.h> +# endif +# endif + +/* The gnulib override of fcntl is not needed in this file. */ +# undef fcntl + +# if !(GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R) +# ifndef HAVE_DECL_STRERROR_R +"this configure-time declaration test was not run" +# endif +# if STRERROR_R_CHAR_P +char *strerror_r (int errnum, char *buf, size_t buflen); +# else +int strerror_r (int errnum, char *buf, size_t buflen); +# endif +# endif + +#define program_name getprogname () + +# if GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r +# define __strerror_r strerror_r +# endif /* GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r */ +#endif /* not _LIBC */ + +#if !_LIBC +/* Return non-zero if FD is open. */ +static int +is_open (int fd) +{ +# if defined _WIN32 && ! defined __CYGWIN__ + /* On native Windows: The initial state of unassigned standard file + descriptors is that they are open but point to an INVALID_HANDLE_VALUE. + There is no fcntl, and the gnulib replacement fcntl does not support + F_GETFL. */ + return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; +# else +# ifndef F_GETFL +# error Please port fcntl to your platform +# endif + return 0 <= fcntl (fd, F_GETFL); +# endif +} +#endif + +static void +flush_stdout (void) +{ +#if !_LIBC + int stdout_fd; + +# if GNULIB_FREOPEN_SAFER + /* Use of gnulib's freopen-safer module normally ensures that + fileno (stdout) == 1 + whenever stdout is open. */ + stdout_fd = STDOUT_FILENO; +# else + /* POSIX states that fileno (stdout) after fclose is unspecified. But in + practice it is not a problem, because stdout is statically allocated and + the fd of a FILE stream is stored as a field in its allocated memory. */ + stdout_fd = fileno (stdout); +# endif + /* POSIX states that fflush (stdout) after fclose is unspecified; it + is safe in glibc, but not on all other platforms. fflush (NULL) + is always defined, but too draconian. */ + if (0 <= stdout_fd && is_open (stdout_fd)) +#endif + fflush (stdout); +} + +static void +print_errno_message (int errnum) +{ + char const *s; + +#if _LIBC || GNULIB_STRERROR_R_POSIX || defined HAVE_STRERROR_R + char errbuf[1024]; +# if _LIBC || (!GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P) + s = __strerror_r (errnum, errbuf, sizeof errbuf); +# else + if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) + s = errbuf; + else + s = 0; +# endif +#else + s = strerror (errnum); +#endif + +#if !_LIBC + if (! s) + s = _("Unknown system error"); +#endif + +#if _LIBC + __fxprintf (NULL, ": %s", s); +#else + fprintf (stderr, ": %s", s); +#endif +} + +static void _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3)) +error_tail (int status, int errnum, const char *message, va_list args) +{ +#if _LIBC + if (_IO_fwide (stderr, 0) > 0) + { + size_t len = strlen (message) + 1; + wchar_t *wmessage = NULL; + mbstate_t st; + size_t res; + const char *tmp; + bool use_malloc = false; + + while (1) + { + if (__libc_use_alloca (len * sizeof (wchar_t))) + wmessage = (wchar_t *) alloca (len * sizeof (wchar_t)); + else + { + if (!use_malloc) + wmessage = NULL; + + wchar_t *p = (wchar_t *) realloc (wmessage, + len * sizeof (wchar_t)); + if (p == NULL) + { + free (wmessage); + fputws_unlocked (L"out of memory\n", stderr); + return; + } + wmessage = p; + use_malloc = true; + } + + memset (&st, '\0', sizeof (st)); + tmp = message; + + res = mbsrtowcs (wmessage, &tmp, len, &st); + if (res != len) + break; + + if (__builtin_expect (len >= SIZE_MAX / sizeof (wchar_t) / 2, 0)) + { + /* This really should not happen if everything is fine. */ + res = (size_t) -1; + break; + } + + len *= 2; + } + + if (res == (size_t) -1) + { + /* The string cannot be converted. */ + if (use_malloc) + { + free (wmessage); + use_malloc = false; + } + wmessage = (wchar_t *) L"???"; + } + + __vfwprintf (stderr, wmessage, args); + + if (use_malloc) + free (wmessage); + } + else +#endif + vfprintf (stderr, message, args); + + ++error_message_count; + if (errnum) + print_errno_message (errnum); +#if _LIBC + __fxprintf (NULL, "\n"); +#else + putc ('\n', stderr); +#endif + fflush (stderr); + if (status) + exit (status); +} + + +/* Print the program name and error message MESSAGE, which is a printf-style + format string with optional args. + If ERRNUM is nonzero, print its corresponding system error message. + Exit with status STATUS if it is nonzero. */ +void +error (int status, int errnum, const char *message, ...) +{ + va_list args; + +#if defined _LIBC && defined __libc_ptf_call + /* We do not want this call to be cut short by a thread + cancellation. Therefore disable cancellation for now. */ + int state = PTHREAD_CANCEL_ENABLE; + __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), + 0); +#endif + + flush_stdout (); +#ifdef _LIBC + _IO_flockfile (stderr); +#endif + if (error_print_progname) + (*error_print_progname) (); + else + { +#if _LIBC + __fxprintf (NULL, "%s: ", program_name); +#else + fprintf (stderr, "%s: ", program_name); +#endif + } + + va_start (args, message); + error_tail (status, errnum, message, args); + va_end (args); + +#ifdef _LIBC + _IO_funlockfile (stderr); +# ifdef __libc_ptf_call + __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); +# endif +#endif +} + +/* Sometimes we want to have at most one error per line. This + variable controls whether this mode is selected or not. */ +int error_one_per_line; + +void +error_at_line (int status, int errnum, const char *file_name, + unsigned int line_number, const char *message, ...) +{ + va_list args; + + if (error_one_per_line) + { + static const char *old_file_name; + static unsigned int old_line_number; + + if (old_line_number == line_number + && (file_name == old_file_name + || (old_file_name != NULL + && file_name != NULL + && strcmp (old_file_name, file_name) == 0))) + + /* Simply return and print nothing. */ + return; + + old_file_name = file_name; + old_line_number = line_number; + } + +#if defined _LIBC && defined __libc_ptf_call + /* We do not want this call to be cut short by a thread + cancellation. Therefore disable cancellation for now. */ + int state = PTHREAD_CANCEL_ENABLE; + __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), + 0); +#endif + + flush_stdout (); +#ifdef _LIBC + _IO_flockfile (stderr); +#endif + if (error_print_progname) + (*error_print_progname) (); + else + { +#if _LIBC + __fxprintf (NULL, "%s:", program_name); +#else + fprintf (stderr, "%s:", program_name); +#endif + } + +#if _LIBC + __fxprintf (NULL, file_name != NULL ? "%s:%u: " : " ", + file_name, line_number); +#else + fprintf (stderr, file_name != NULL ? "%s:%u: " : " ", + file_name, line_number); +#endif + + va_start (args, message); + error_tail (status, errnum, message, args); + va_end (args); + +#ifdef _LIBC + _IO_funlockfile (stderr); +# ifdef __libc_ptf_call + __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); +# endif +#endif +} + +#ifdef _LIBC +/* Make the weak alias. */ +# undef error +# undef error_at_line +weak_alias (__error, error) +weak_alias (__error_at_line, error_at_line) +#endif diff --git a/devspec.en_US/project/recutils/lib/error.h b/devspec.en_US/project/recutils/lib/error.h new file mode 100755 index 0000000..3759f8a --- /dev/null +++ b/devspec.en_US/project/recutils/lib/error.h @@ -0,0 +1,75 @@ +/* Declaration for error-reporting function + Copyright (C) 1995-1997, 2003, 2006, 2008-2019 Free Software Foundation, + Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _ERROR_H +#define _ERROR_H 1 + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. + We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because + gnulib and libintl do '#define printf __printf__' when they override + the 'printf' function. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +#endif + +/* On mingw, the flavor of printf depends on whether the extensions module + * is in use; the check for <stdio.h> determines the witness macro. */ +#ifndef _GL_ATTRIBUTE_SPEC_PRINTF +# if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU +# define _GL_ATTRIBUTE_SPEC_PRINTF __gnu_printf__ +# else +# define _GL_ATTRIBUTE_SPEC_PRINTF __printf__ +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Print a message with 'fprintf (stderr, FORMAT, ...)'; + if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). + If STATUS is nonzero, terminate the program with 'exit (STATUS)'. */ + +extern void error (int __status, int __errnum, const char *__format, ...) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF, 3, 4)); + +extern void error_at_line (int __status, int __errnum, const char *__fname, + unsigned int __lineno, const char *__format, ...) + _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF, 5, 6)); + +/* If NULL, error will flush stdout, then print on stderr the program + name, a colon and a space. Otherwise, error will call this + function without parameters instead. */ +extern void (*error_print_progname) (void); + +/* This variable is incremented each time 'error' is called. */ +extern unsigned int error_message_count; + +/* Sometimes we want to have at most one error per line. This + variable controls whether this mode is selected or not. */ +extern int error_one_per_line; + +#ifdef __cplusplus +} +#endif + +#endif /* error.h */ diff --git a/devspec.en_US/project/recutils/lib/euidaccess.c b/devspec.en_US/project/recutils/lib/euidaccess.c new file mode 100755 index 0000000..fece4cf --- /dev/null +++ b/devspec.en_US/project/recutils/lib/euidaccess.c @@ -0,0 +1,223 @@ +/* euidaccess -- check if effective user id can access file + + Copyright (C) 1990-1991, 1995, 1998, 2000, 2003-2006, 2008-2019 Free + Software Foundation, Inc. + + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by David MacKenzie and Torbjorn Granlund. + Adapted for GNU C library by Roland McGrath. */ + +#ifndef _LIBC +# include <config.h> +#endif + +#include <fcntl.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#if defined _WIN32 && ! defined __CYGWIN__ +# include <io.h> +#else +# include "root-uid.h" +#endif + +#if HAVE_LIBGEN_H +# include <libgen.h> +#endif + +#include <errno.h> +#ifndef __set_errno +# define __set_errno(val) errno = (val) +#endif + +#if defined EACCES && !defined EACCESS +# define EACCESS EACCES +#endif + +#ifndef F_OK +# define F_OK 0 +# define X_OK 1 +# define W_OK 2 +# define R_OK 4 +#endif + + +#ifdef _LIBC + +# define access __access +# define getuid __getuid +# define getgid __getgid +# define geteuid __geteuid +# define getegid __getegid +# define group_member __group_member +# define euidaccess __euidaccess +# undef stat +# define stat stat64 + +#endif + +/* Return 0 if the user has permission of type MODE on FILE; + otherwise, return -1 and set 'errno'. + Like access, except that it uses the effective user and group + id's instead of the real ones, and it does not always check for read-only + file system, text busy, etc. */ + +int +euidaccess (const char *file, int mode) +{ +#if HAVE_FACCESSAT /* glibc, AIX 7, Solaris 11, Cygwin 1.7 */ + return faccessat (AT_FDCWD, file, mode, AT_EACCESS); +#elif defined EFF_ONLY_OK /* IRIX, OSF/1, Interix */ + return access (file, mode | EFF_ONLY_OK); +#elif defined ACC_SELF /* AIX */ + return accessx (file, mode, ACC_SELF); +#elif HAVE_EACCESS /* FreeBSD */ + return eaccess (file, mode); +#elif defined _WIN32 && ! defined __CYGWIN__ /* mingw */ + return _access (file, mode); +#else /* Mac OS X, NetBSD, OpenBSD, HP-UX, Solaris, Cygwin, BeOS */ + + uid_t uid = getuid (); + gid_t gid = getgid (); + uid_t euid = geteuid (); + gid_t egid = getegid (); + struct stat stats; + +# if HAVE_DECL_SETREGID && PREFER_NONREENTRANT_EUIDACCESS + + /* Define PREFER_NONREENTRANT_EUIDACCESS if you prefer euidaccess to + return the correct result even if this would make it + nonreentrant. Define this only if your entire application is + safe even if the uid or gid might temporarily change. If your + application uses signal handlers or threads it is probably not + safe. */ + + if (mode == F_OK) + return stat (file, &stats); + else + { + int result; + int saved_errno; + + if (uid != euid) + setreuid (euid, uid); + if (gid != egid) + setregid (egid, gid); + + result = access (file, mode); + saved_errno = errno; + + /* Restore them. */ + if (uid != euid) + setreuid (uid, euid); + if (gid != egid) + setregid (gid, egid); + + errno = saved_errno; + return result; + } + +# else + + /* The following code assumes the traditional Unix model, and is not + correct on systems that have ACLs or the like. However, it's + better than nothing, and it is reentrant. */ + + unsigned int granted; + if (uid == euid && gid == egid) + /* If we are not set-uid or set-gid, access does the same. */ + return access (file, mode); + + if (stat (file, &stats) != 0) + return -1; + + /* The super-user can read and write any file, and execute any file + that anyone can execute. */ + if (euid == ROOT_UID + && ((mode & X_OK) == 0 + || (stats.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))) + return 0; + + /* Convert the mode to traditional form, clearing any bogus bits. */ + if (R_OK == 4 && W_OK == 2 && X_OK == 1 && F_OK == 0) + mode &= 7; + else + mode = ((mode & R_OK ? 4 : 0) + + (mode & W_OK ? 2 : 0) + + (mode & X_OK ? 1 : 0)); + + if (mode == 0) + return 0; /* The file exists. */ + + /* Convert the file's permission bits to traditional form. */ + if (S_IRUSR == (4 << 6) && S_IWUSR == (2 << 6) && S_IXUSR == (1 << 6) + && S_IRGRP == (4 << 3) && S_IWGRP == (2 << 3) && S_IXGRP == (1 << 3) + && S_IROTH == (4 << 0) && S_IWOTH == (2 << 0) && S_IXOTH == (1 << 0)) + granted = stats.st_mode; + else + granted = ((stats.st_mode & S_IRUSR ? 4 << 6 : 0) + + (stats.st_mode & S_IWUSR ? 2 << 6 : 0) + + (stats.st_mode & S_IXUSR ? 1 << 6 : 0) + + (stats.st_mode & S_IRGRP ? 4 << 3 : 0) + + (stats.st_mode & S_IWGRP ? 2 << 3 : 0) + + (stats.st_mode & S_IXGRP ? 1 << 3 : 0) + + (stats.st_mode & S_IROTH ? 4 << 0 : 0) + + (stats.st_mode & S_IWOTH ? 2 << 0 : 0) + + (stats.st_mode & S_IXOTH ? 1 << 0 : 0)); + + if (euid == stats.st_uid) + granted >>= 6; + else if (egid == stats.st_gid || group_member (stats.st_gid)) + granted >>= 3; + + if ((mode & ~granted) == 0) + return 0; + __set_errno (EACCESS); + return -1; + +# endif +#endif +} +#undef euidaccess +#ifdef weak_alias +weak_alias (__euidaccess, euidaccess) +#endif + +#ifdef TEST +# include <error.h> +# include <stdio.h> +# include <stdlib.h> + +int +main (int argc, char **argv) +{ + char *file; + int mode; + int err; + + if (argc < 3) + abort (); + file = argv[1]; + mode = atoi (argv[2]); + + err = euidaccess (file, mode); + printf ("%d\n", err); + if (err != 0) + error (0, errno, "%s", file); + exit (0); +} +#endif diff --git a/devspec.en_US/project/recutils/lib/execute.c b/devspec.en_US/project/recutils/lib/execute.c new file mode 100755 index 0000000..50cff3c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/execute.c @@ -0,0 +1,274 @@ +/* Creation of autonomous subprocesses. + Copyright (C) 2001-2004, 2006-2019 Free Software Foundation, Inc. + Written by Bruno Haible <haible@clisp.cons.org>, 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + + +#include <config.h> + +/* Specification. */ +#include "execute.h" + +#include <errno.h> +#include <fcntl.h> +#include <stdbool.h> +#include <stdlib.h> +#include <signal.h> +#include <unistd.h> + +#include "error.h" +#include "fatal-signal.h" +#include "wait-process.h" +#include "gettext.h" + +#define _(str) gettext (str) + +#if defined _WIN32 && ! defined __CYGWIN__ + +/* Native Windows API. */ +# include <process.h> +# include "w32spawn.h" + +#else + +/* Unix API. */ +# include <spawn.h> + +#endif + + +#if defined EINTR && (defined _WIN32 && ! defined __CYGWIN__) + +/* EINTR handling for close(), open(). + These functions can return -1/EINTR even though we don't have any + signal handlers set up, namely when we get interrupted via SIGSTOP. */ + +static int +nonintr_close (int fd) +{ + int retval; + + do + retval = close (fd); + while (retval < 0 && errno == EINTR); + + return retval; +} +#undef close /* avoid warning related to gnulib module unistd */ +#define close nonintr_close + +static int +nonintr_open (const char *pathname, int oflag, mode_t mode) +{ + int retval; + + do + retval = open (pathname, oflag, mode); + while (retval < 0 && errno == EINTR); + + return retval; +} +#undef open /* avoid warning on VMS */ +#define open nonintr_open + +#endif + + +/* Execute a command, optionally redirecting any of the three standard file + descriptors to /dev/null. Return its exit code. + If it didn't terminate correctly, exit if exit_on_error is true, otherwise + return 127. + If slave_process is true, the child process will be terminated when its + creator receives a catchable fatal signal. */ +int +execute (const char *progname, + const char *prog_path, char **prog_argv, + bool ignore_sigpipe, + bool null_stdin, bool null_stdout, bool null_stderr, + bool slave_process, bool exit_on_error, + int *termsigp) +{ +#if defined _WIN32 && ! defined __CYGWIN__ + + /* Native Windows API. */ + int orig_stdin; + int orig_stdout; + int orig_stderr; + int exitcode; + int nullinfd; + int nulloutfd; + + /* FIXME: Need to free memory allocated by prepare_spawn. */ + prog_argv = prepare_spawn (prog_argv); + + /* Save standard file handles of parent process. */ + if (null_stdin) + orig_stdin = dup_safer_noinherit (STDIN_FILENO); + if (null_stdout) + orig_stdout = dup_safer_noinherit (STDOUT_FILENO); + if (null_stderr) + orig_stderr = dup_safer_noinherit (STDERR_FILENO); + exitcode = -1; + + /* Create standard file handles of child process. */ + nullinfd = -1; + nulloutfd = -1; + if ((!null_stdin + || ((nullinfd = open ("NUL", O_RDONLY, 0)) >= 0 + && (nullinfd == STDIN_FILENO + || (dup2 (nullinfd, STDIN_FILENO) >= 0 + && close (nullinfd) >= 0)))) + && (!(null_stdout || null_stderr) + || ((nulloutfd = open ("NUL", O_RDWR, 0)) >= 0 + && (!null_stdout + || nulloutfd == STDOUT_FILENO + || dup2 (nulloutfd, STDOUT_FILENO) >= 0) + && (!null_stderr + || nulloutfd == STDERR_FILENO + || dup2 (nulloutfd, STDERR_FILENO) >= 0) + && ((null_stdout && nulloutfd == STDOUT_FILENO) + || (null_stderr && nulloutfd == STDERR_FILENO) + || close (nulloutfd) >= 0)))) + /* Use spawnvpe and pass the environment explicitly. This is needed if + the program has modified the environment using putenv() or [un]setenv(). + On Windows, programs have two environments, one in the "environment + block" of the process and managed through SetEnvironmentVariable(), and + one inside the process, in the location retrieved by the 'environ' + macro. When using spawnvp() without 'e', the child process inherits a + copy of the environment block - ignoring the effects of putenv() and + [un]setenv(). */ + { + exitcode = spawnvpe (P_WAIT, prog_path, (const char **) prog_argv, + (const char **) environ); + if (exitcode < 0 && errno == ENOEXEC) + { + /* prog is not a native executable. Try to execute it as a + shell script. Note that prepare_spawn() has already prepended + a hidden element "sh.exe" to prog_argv. */ + --prog_argv; + exitcode = spawnvpe (P_WAIT, prog_argv[0], (const char **) prog_argv, + (const char **) environ); + } + } + if (nulloutfd >= 0) + close (nulloutfd); + if (nullinfd >= 0) + close (nullinfd); + + /* Restore standard file handles of parent process. */ + if (null_stderr) + undup_safer_noinherit (orig_stderr, STDERR_FILENO); + if (null_stdout) + undup_safer_noinherit (orig_stdout, STDOUT_FILENO); + if (null_stdin) + undup_safer_noinherit (orig_stdin, STDIN_FILENO); + + if (termsigp != NULL) + *termsigp = 0; + + if (exitcode == -1) + { + if (exit_on_error || !null_stderr) + error (exit_on_error ? EXIT_FAILURE : 0, errno, + _("%s subprocess failed"), progname); + return 127; + } + + return exitcode; + +#else + + /* Unix API. */ + /* Note about 127: Some errors during posix_spawnp() cause the function + posix_spawnp() to return an error code; some other errors cause the + subprocess to exit with return code 127. It is implementation + dependent which error is reported which way. We treat both cases as + equivalent. */ + sigset_t blocked_signals; + posix_spawn_file_actions_t actions; + bool actions_allocated; + posix_spawnattr_t attrs; + bool attrs_allocated; + int err; + pid_t child; + + if (slave_process) + { + sigprocmask (SIG_SETMASK, NULL, &blocked_signals); + block_fatal_signals (); + } + actions_allocated = false; + attrs_allocated = false; + if ((err = posix_spawn_file_actions_init (&actions)) != 0 + || (actions_allocated = true, + (null_stdin + && (err = posix_spawn_file_actions_addopen (&actions, + STDIN_FILENO, + "/dev/null", O_RDONLY, + 0)) + != 0) + || (null_stdout + && (err = posix_spawn_file_actions_addopen (&actions, + STDOUT_FILENO, + "/dev/null", O_RDWR, + 0)) + != 0) + || (null_stderr + && (err = posix_spawn_file_actions_addopen (&actions, + STDERR_FILENO, + "/dev/null", O_RDWR, + 0)) + != 0) + || (slave_process + && ((err = posix_spawnattr_init (&attrs)) != 0 + || (attrs_allocated = true, + (err = posix_spawnattr_setsigmask (&attrs, + &blocked_signals)) + != 0 + || (err = posix_spawnattr_setflags (&attrs, + POSIX_SPAWN_SETSIGMASK)) + != 0))) + || (err = posix_spawnp (&child, prog_path, &actions, + attrs_allocated ? &attrs : NULL, prog_argv, + environ)) + != 0)) + { + if (actions_allocated) + posix_spawn_file_actions_destroy (&actions); + if (attrs_allocated) + posix_spawnattr_destroy (&attrs); + if (slave_process) + unblock_fatal_signals (); + if (termsigp != NULL) + *termsigp = 0; + if (exit_on_error || !null_stderr) + error (exit_on_error ? EXIT_FAILURE : 0, err, + _("%s subprocess failed"), progname); + return 127; + } + posix_spawn_file_actions_destroy (&actions); + if (attrs_allocated) + posix_spawnattr_destroy (&attrs); + if (slave_process) + { + register_slave_subprocess (child); + unblock_fatal_signals (); + } + + return wait_subprocess (child, progname, ignore_sigpipe, null_stderr, + slave_process, exit_on_error, termsigp); + +#endif +} diff --git a/devspec.en_US/project/recutils/lib/execute.h b/devspec.en_US/project/recutils/lib/execute.h new file mode 100755 index 0000000..b980134 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/execute.h @@ -0,0 +1,44 @@ +/* Creation of autonomous subprocesses. + Copyright (C) 2001-2003, 2008-2019 Free Software Foundation, Inc. + Written by Bruno Haible <haible@clisp.cons.org>, 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _EXECUTE_H +#define _EXECUTE_H + +#include <stdbool.h> + +/* Execute a command, optionally redirecting any of the three standard file + descriptors to /dev/null. Return its exit code. + If it didn't terminate correctly, exit if exit_on_error is true, otherwise + return 127. + If ignore_sigpipe is true, consider a subprocess termination due to SIGPIPE + as equivalent to a success. This is suitable for processes whose only + purpose is to write to standard output. + If slave_process is true, the child process will be terminated when its + creator receives a catchable fatal signal. + If termsigp is not NULL, *termsig will be set to the signal that terminated + the subprocess (if supported by the platform: not on native Windows + platforms), otherwise 0. + It is recommended that no signal is blocked or ignored while execute() + is called. See spawn-pipe.h for the reason. */ +extern int execute (const char *progname, + const char *prog_path, char **prog_argv, + bool ignore_sigpipe, + bool null_stdin, bool null_stdout, bool null_stderr, + bool slave_process, bool exit_on_error, + int *termsigp); + +#endif /* _EXECUTE_H */ diff --git a/devspec.en_US/project/recutils/lib/exitfail.c b/devspec.en_US/project/recutils/lib/exitfail.c new file mode 100755 index 0000000..69b3513 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/exitfail.c @@ -0,0 +1,24 @@ +/* Failure exit status + + Copyright (C) 2002-2003, 2005-2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include "exitfail.h" + +#include <stdlib.h> + +int volatile exit_failure = EXIT_FAILURE; diff --git a/devspec.en_US/project/recutils/lib/exitfail.h b/devspec.en_US/project/recutils/lib/exitfail.h new file mode 100755 index 0000000..480ad1a --- /dev/null +++ b/devspec.en_US/project/recutils/lib/exitfail.h @@ -0,0 +1,18 @@ +/* Failure exit status + + Copyright (C) 2002, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +extern int volatile exit_failure; diff --git a/devspec.en_US/project/recutils/lib/fatal-signal.c b/devspec.en_US/project/recutils/lib/fatal-signal.c new file mode 100755 index 0000000..1fe31d1 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fatal-signal.c @@ -0,0 +1,286 @@ +/* Emergency actions in case of a fatal signal. + Copyright (C) 2003-2004, 2006-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2003. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + + +#include <config.h> + +/* Specification. */ +#include "fatal-signal.h" + +#include <stdbool.h> +#include <stdlib.h> +#include <signal.h> +#include <unistd.h> + +#include "sig-handler.h" +#include "xalloc.h" + +#define SIZEOF(a) (sizeof(a) / sizeof(a[0])) + +/* ========================================================================= */ + + +/* The list of fatal signals. + These are those signals whose default action is to terminate the process + without a core dump, except + SIGKILL - because it cannot be caught, + SIGALRM SIGUSR1 SIGUSR2 SIGPOLL SIGIO SIGLOST - because applications + often use them for their own purpose, + SIGPROF SIGVTALRM - because they are used for profiling, + SIGSTKFLT - because it is more similar to SIGFPE, SIGSEGV, SIGBUS, + SIGSYS - because it is more similar to SIGABRT, SIGSEGV, + SIGPWR - because it of too special use, + SIGRTMIN...SIGRTMAX - because they are reserved for application use. + plus + SIGXCPU, SIGXFSZ - because they are quite similar to SIGTERM. */ + +static int fatal_signals[] = + { + /* ISO C 99 signals. */ +#ifdef SIGINT + SIGINT, +#endif +#ifdef SIGTERM + SIGTERM, +#endif + /* POSIX:2001 signals. */ +#ifdef SIGHUP + SIGHUP, +#endif +#ifdef SIGPIPE + SIGPIPE, +#endif + /* BSD signals. */ +#ifdef SIGXCPU + SIGXCPU, +#endif +#ifdef SIGXFSZ + SIGXFSZ, +#endif + /* Native Windows signals. */ +#ifdef SIGBREAK + SIGBREAK, +#endif + 0 + }; + +#define num_fatal_signals (SIZEOF (fatal_signals) - 1) + +/* Eliminate signals whose signal handler is SIG_IGN. */ + +static void +init_fatal_signals (void) +{ + static bool fatal_signals_initialized = false; + if (!fatal_signals_initialized) + { + size_t i; + + for (i = 0; i < num_fatal_signals; i++) + { + struct sigaction action; + + if (sigaction (fatal_signals[i], NULL, &action) >= 0 + && get_handler (&action) == SIG_IGN) + fatal_signals[i] = -1; + } + + fatal_signals_initialized = true; + } +} + + +/* ========================================================================= */ + + +typedef void (*action_t) (void); + +/* Type of an entry in the actions array. + The 'action' field is accessed from within the fatal_signal_handler(), + therefore we mark it as 'volatile'. */ +typedef struct +{ + volatile action_t action; +} +actions_entry_t; + +/* The registered cleanup actions. */ +static actions_entry_t static_actions[32]; +static actions_entry_t * volatile actions = static_actions; +static sig_atomic_t volatile actions_count = 0; +static size_t actions_allocated = SIZEOF (static_actions); + + +/* The saved signal handlers. + Size 32 would not be sufficient: On HP-UX, SIGXCPU = 33, SIGXFSZ = 34. */ +static struct sigaction saved_sigactions[64]; + + +/* Uninstall the handlers. */ +static void +uninstall_handlers (void) +{ + size_t i; + + for (i = 0; i < num_fatal_signals; i++) + if (fatal_signals[i] >= 0) + { + int sig = fatal_signals[i]; + if (saved_sigactions[sig].sa_handler == SIG_IGN) + saved_sigactions[sig].sa_handler = SIG_DFL; + sigaction (sig, &saved_sigactions[sig], NULL); + } +} + + +/* The signal handler. It gets called asynchronously. */ +static void +fatal_signal_handler (int sig) +{ + for (;;) + { + /* Get the last registered cleanup action, in a reentrant way. */ + action_t action; + size_t n = actions_count; + if (n == 0) + break; + n--; + actions_count = n; + action = actions[n].action; + /* Execute the action. */ + action (); + } + + /* Now execute the signal's default action. + If the signal being delivered was blocked, the re-raised signal would be + delivered when this handler returns. But the way we install this handler, + no signal is blocked, and the re-raised signal is delivered already + during raise(). */ + uninstall_handlers (); + raise (sig); +} + + +/* Install the handlers. */ +static void +install_handlers (void) +{ + size_t i; + struct sigaction action; + + action.sa_handler = &fatal_signal_handler; + /* If we get a fatal signal while executing fatal_signal_handler, enter + fatal_signal_handler recursively, since it is reentrant. Hence no + SA_RESETHAND. */ + action.sa_flags = SA_NODEFER; + sigemptyset (&action.sa_mask); + for (i = 0; i < num_fatal_signals; i++) + if (fatal_signals[i] >= 0) + { + int sig = fatal_signals[i]; + + if (!(sig < sizeof (saved_sigactions) / sizeof (saved_sigactions[0]))) + abort (); + sigaction (sig, &action, &saved_sigactions[sig]); + } +} + + +/* Register a cleanup function to be executed when a catchable fatal signal + occurs. */ +void +at_fatal_signal (action_t action) +{ + static bool cleanup_initialized = false; + if (!cleanup_initialized) + { + init_fatal_signals (); + install_handlers (); + cleanup_initialized = true; + } + + if (actions_count == actions_allocated) + { + /* Extend the actions array. Note that we cannot use xrealloc(), + because then the cleanup() function could access an already + deallocated array. */ + actions_entry_t *old_actions = actions; + size_t old_actions_allocated = actions_allocated; + size_t new_actions_allocated = 2 * actions_allocated; + actions_entry_t *new_actions = + XNMALLOC (new_actions_allocated, actions_entry_t); + size_t k; + + /* Don't use memcpy() here, because memcpy takes non-volatile arguments + and is therefore not guaranteed to complete all memory stores before + the next statement. */ + for (k = 0; k < old_actions_allocated; k++) + new_actions[k] = old_actions[k]; + actions = new_actions; + actions_allocated = new_actions_allocated; + /* Now we can free the old actions array. */ + if (old_actions != static_actions) + free (old_actions); + } + /* The two uses of 'volatile' in the types above (and ISO C 99 section + 5.1.2.3.(5)) ensure that we increment the actions_count only after + the new action has been written to the memory location + actions[actions_count]. */ + actions[actions_count].action = action; + actions_count++; +} + + +/* ========================================================================= */ + + +static sigset_t fatal_signal_set; + +static void +init_fatal_signal_set (void) +{ + static bool fatal_signal_set_initialized = false; + if (!fatal_signal_set_initialized) + { + size_t i; + + init_fatal_signals (); + + sigemptyset (&fatal_signal_set); + for (i = 0; i < num_fatal_signals; i++) + if (fatal_signals[i] >= 0) + sigaddset (&fatal_signal_set, fatal_signals[i]); + + fatal_signal_set_initialized = true; + } +} + +/* Temporarily delay the catchable fatal signals. */ +void +block_fatal_signals (void) +{ + init_fatal_signal_set (); + sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); +} + +/* Stop delaying the catchable fatal signals. */ +void +unblock_fatal_signals (void) +{ + init_fatal_signal_set (); + sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); +} diff --git a/devspec.en_US/project/recutils/lib/fatal-signal.h b/devspec.en_US/project/recutils/lib/fatal-signal.h new file mode 100755 index 0000000..a2e60d3 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fatal-signal.h @@ -0,0 +1,76 @@ +/* Emergency actions in case of a fatal signal. + Copyright (C) 2003-2004, 2009-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2003. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* It is often useful to do some cleanup action when a usually fatal signal + terminates the process, like removing a temporary file or killing a + subprocess that may be stuck waiting for a device, pipe or network input. + Such signals are SIGHUP, SIGINT, SIGPIPE, SIGTERM, and possibly others. + The limitation of this facility is that it cannot work for SIGKILL. + + Signals with a SIG_IGN handler are considered to be non-fatal. The + functions in this file assume that when a SIG_IGN handler is installed + for a signal, it was installed before any functions in this file were + called and it stays so for the whole lifetime of the process. */ + +/* Register a cleanup function to be executed when a catchable fatal signal + occurs. + + Restrictions for the cleanup function: + - The cleanup function can do all kinds of system calls. + - It can also access application dependent memory locations and data + structures provided they are in a consistent state. One way to ensure + this is through block_fatal_signals()/unblock_fatal_signals(), see + below. Another - more tricky - way to ensure this is the careful use + of 'volatile'. + However, + - malloc() and similarly complex facilities are not safe to be called + because they are not guaranteed to be in a consistent state. + - Also, the cleanup function must not block the catchable fatal signals + and leave them blocked upon return. + + The cleanup function is executed asynchronously. It is unspecified + whether during its execution the catchable fatal signals are blocked + or not. */ +extern void at_fatal_signal (void (*function) (void)); + + +/* Sometimes it is necessary to block the usually fatal signals while the + data structures being accessed by the cleanup action are being built or + reorganized. This is the case, for example, when a temporary file or + directory is created through mkstemp() or mkdtemp(), because these + functions create the temporary file or directory _before_ returning its + name to the application. */ + +/* Temporarily delay the catchable fatal signals. + The signals will be blocked (= delayed) until the next call to + unblock_fatal_signals(). If the signals are already blocked, a further + call to block_fatal_signals() has no effect. */ +extern void block_fatal_signals (void); + +/* Stop delaying the catchable fatal signals. */ +extern void unblock_fatal_signals (void); + + +#ifdef __cplusplus +} +#endif diff --git a/devspec.en_US/project/recutils/lib/fcntl.c b/devspec.en_US/project/recutils/lib/fcntl.c new file mode 100755 index 0000000..f602fad --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fcntl.c @@ -0,0 +1,626 @@ +/* Provide file descriptor control. + + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Eric Blake <ebb9@byu.net>. */ + +#include <config.h> + +/* Specification. */ +#include <fcntl.h> + +#include <errno.h> +#include <limits.h> +#include <stdarg.h> +#include <unistd.h> + +#ifdef __KLIBC__ +# define INCL_DOS +# include <os2.h> +#endif + +#if defined _WIN32 && ! defined __CYGWIN__ +/* Get declarations of the native Windows API functions. */ +# define WIN32_LEAN_AND_MEAN +# include <windows.h> + +/* Get _get_osfhandle. */ +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include <io.h> +# endif + +/* Upper bound on getdtablesize(). See lib/getdtablesize.c. */ +# define OPEN_MAX_MAX 0x10000 + +/* Duplicate OLDFD into the first available slot of at least NEWFD, + which must be positive, with FLAGS determining whether the duplicate + will be inheritable. */ +static int +dupfd (int oldfd, int newfd, int flags) +{ + /* Mingw has no way to create an arbitrary fd. Iterate until all + file descriptors less than newfd are filled up. */ + HANDLE curr_process = GetCurrentProcess (); + HANDLE old_handle = (HANDLE) _get_osfhandle (oldfd); + unsigned char fds_to_close[OPEN_MAX_MAX / CHAR_BIT]; + unsigned int fds_to_close_bound = 0; + int result; + BOOL inherit = flags & O_CLOEXEC ? FALSE : TRUE; + int mode; + + if (newfd < 0 || getdtablesize () <= newfd) + { + errno = EINVAL; + return -1; + } + if (old_handle == INVALID_HANDLE_VALUE + || (mode = setmode (oldfd, O_BINARY)) == -1) + { + /* oldfd is not open, or is an unassigned standard file + descriptor. */ + errno = EBADF; + return -1; + } + setmode (oldfd, mode); + flags |= mode; + + for (;;) + { + HANDLE new_handle; + int duplicated_fd; + unsigned int index; + + if (!DuplicateHandle (curr_process, /* SourceProcessHandle */ + old_handle, /* SourceHandle */ + curr_process, /* TargetProcessHandle */ + (PHANDLE) &new_handle, /* TargetHandle */ + (DWORD) 0, /* DesiredAccess */ + inherit, /* InheritHandle */ + DUPLICATE_SAME_ACCESS)) /* Options */ + { + switch (GetLastError ()) + { + case ERROR_TOO_MANY_OPEN_FILES: + errno = EMFILE; + break; + case ERROR_INVALID_HANDLE: + case ERROR_INVALID_TARGET_HANDLE: + case ERROR_DIRECT_ACCESS_HANDLE: + errno = EBADF; + break; + case ERROR_INVALID_PARAMETER: + case ERROR_INVALID_FUNCTION: + case ERROR_INVALID_ACCESS: + errno = EINVAL; + break; + default: + errno = EACCES; + break; + } + result = -1; + break; + } + duplicated_fd = _open_osfhandle ((intptr_t) new_handle, flags); + if (duplicated_fd < 0) + { + CloseHandle (new_handle); + result = -1; + break; + } + if (newfd <= duplicated_fd) + { + result = duplicated_fd; + break; + } + + /* Set the bit duplicated_fd in fds_to_close[]. */ + index = (unsigned int) duplicated_fd / CHAR_BIT; + if (fds_to_close_bound <= index) + { + if (sizeof fds_to_close <= index) + /* Need to increase OPEN_MAX_MAX. */ + abort (); + memset (fds_to_close + fds_to_close_bound, '\0', + index + 1 - fds_to_close_bound); + fds_to_close_bound = index + 1; + } + fds_to_close[index] |= 1 << ((unsigned int) duplicated_fd % CHAR_BIT); + } + + /* Close the previous fds that turned out to be too small. */ + { + int saved_errno = errno; + unsigned int duplicated_fd; + + for (duplicated_fd = 0; + duplicated_fd < fds_to_close_bound * CHAR_BIT; + duplicated_fd++) + if ((fds_to_close[duplicated_fd / CHAR_BIT] + >> (duplicated_fd % CHAR_BIT)) + & 1) + close (duplicated_fd); + + errno = saved_errno; + } + +# if REPLACE_FCHDIR + if (0 <= result) + result = _gl_register_dup (oldfd, result); +# endif + return result; +} +#endif /* W32 */ + +/* Forward declarations, because we '#undef fcntl' in the middle of this + compilation unit. */ +/* Our implementation of fcntl (fd, F_DUPFD, target). */ +static int rpl_fcntl_DUPFD (int fd, int target); +/* Our implementation of fcntl (fd, F_DUPFD_CLOEXEC, target). */ +static int rpl_fcntl_DUPFD_CLOEXEC (int fd, int target); +#ifdef __KLIBC__ +/* Adds support for fcntl on directories. */ +static int klibc_fcntl (int fd, int action, /* arg */...); +#endif + + +/* Perform the specified ACTION on the file descriptor FD, possibly + using the argument ARG further described below. This replacement + handles the following actions, and forwards all others on to the + native fcntl. An unrecognized ACTION returns -1 with errno set to + EINVAL. + + F_DUPFD - duplicate FD, with int ARG being the minimum target fd. + If successful, return the duplicate, which will be inheritable; + otherwise return -1 and set errno. + + F_DUPFD_CLOEXEC - duplicate FD, with int ARG being the minimum + target fd. If successful, return the duplicate, which will not be + inheritable; otherwise return -1 and set errno. + + F_GETFD - ARG need not be present. If successful, return a + non-negative value containing the descriptor flags of FD (only + FD_CLOEXEC is portable, but other flags may be present); otherwise + return -1 and set errno. */ + +int +fcntl (int fd, int action, /* arg */...) +#undef fcntl +#ifdef __KLIBC__ +# define fcntl klibc_fcntl +#endif +{ + va_list arg; + int result = -1; + va_start (arg, action); + switch (action) + { + case F_DUPFD: + { + int target = va_arg (arg, int); + result = rpl_fcntl_DUPFD (fd, target); + break; + } + + case F_DUPFD_CLOEXEC: + { + int target = va_arg (arg, int); + result = rpl_fcntl_DUPFD_CLOEXEC (fd, target); + break; + } + +#if !HAVE_FCNTL + case F_GETFD: + { +# if defined _WIN32 && ! defined __CYGWIN__ + HANDLE handle = (HANDLE) _get_osfhandle (fd); + DWORD flags; + if (handle == INVALID_HANDLE_VALUE + || GetHandleInformation (handle, &flags) == 0) + errno = EBADF; + else + result = (flags & HANDLE_FLAG_INHERIT) ? 0 : FD_CLOEXEC; +# else /* !W32 */ + /* Use dup2 to reject invalid file descriptors. No way to + access this information, so punt. */ + if (0 <= dup2 (fd, fd)) + result = 0; +# endif /* !W32 */ + break; + } /* F_GETFD */ +#endif /* !HAVE_FCNTL */ + + /* Implementing F_SETFD on mingw is not trivial - there is no + API for changing the O_NOINHERIT bit on an fd, and merely + changing the HANDLE_FLAG_INHERIT bit on the underlying handle + can lead to odd state. It may be possible by duplicating the + handle, using _open_osfhandle with the right flags, then + using dup2 to move the duplicate onto the original, but that + is not supported for now. */ + + default: + { +#if HAVE_FCNTL + switch (action) + { + #ifdef F_BARRIERFSYNC /* macOS */ + case F_BARRIERFSYNC: + #endif + #ifdef F_CHKCLEAN /* macOS */ + case F_CHKCLEAN: + #endif + #ifdef F_CLOSEM /* NetBSD, HP-UX */ + case F_CLOSEM: + #endif + #ifdef F_FLUSH_DATA /* macOS */ + case F_FLUSH_DATA: + #endif + #ifdef F_FREEZE_FS /* macOS */ + case F_FREEZE_FS: + #endif + #ifdef F_FULLFSYNC /* macOS */ + case F_FULLFSYNC: + #endif + #ifdef F_GETCONFINED /* macOS */ + case F_GETCONFINED: + #endif + #ifdef F_GETDEFAULTPROTLEVEL /* macOS */ + case F_GETDEFAULTPROTLEVEL: + #endif + #ifdef F_GETFD /* POSIX */ + case F_GETFD: + #endif + #ifdef F_GETFL /* POSIX */ + case F_GETFL: + #endif + #ifdef F_GETLEASE /* Linux */ + case F_GETLEASE: + #endif + #ifdef F_GETNOSIGPIPE /* macOS */ + case F_GETNOSIGPIPE: + #endif + #ifdef F_GETOWN /* POSIX */ + case F_GETOWN: + #endif + #ifdef F_GETPIPE_SZ /* Linux */ + case F_GETPIPE_SZ: + #endif + #ifdef F_GETPROTECTIONCLASS /* macOS */ + case F_GETPROTECTIONCLASS: + #endif + #ifdef F_GETPROTECTIONLEVEL /* macOS */ + case F_GETPROTECTIONLEVEL: + #endif + #ifdef F_GET_SEALS /* Linux */ + case F_GET_SEALS: + #endif + #ifdef F_GETSIG /* Linux */ + case F_GETSIG: + #endif + #ifdef F_MAXFD /* NetBSD */ + case F_MAXFD: + #endif + #ifdef F_RECYCLE /* macOS */ + case F_RECYCLE: + #endif + #ifdef F_SETFIFOENH /* HP-UX */ + case F_SETFIFOENH: + #endif + #ifdef F_THAW_FS /* macOS */ + case F_THAW_FS: + #endif + /* These actions take no argument. */ + result = fcntl (fd, action); + break; + + #ifdef F_ADD_SEALS /* Linux */ + case F_ADD_SEALS: + #endif + #ifdef F_BADFD /* Solaris */ + case F_BADFD: + #endif + #ifdef F_CHECK_OPENEVT /* macOS */ + case F_CHECK_OPENEVT: + #endif + #ifdef F_DUP2FD /* FreeBSD, AIX, Solaris */ + case F_DUP2FD: + #endif + #ifdef F_DUP2FD_CLOEXEC /* FreeBSD, Solaris */ + case F_DUP2FD_CLOEXEC: + #endif + #ifdef F_DUP2FD_CLOFORK /* Solaris */ + case F_DUP2FD_CLOFORK: + #endif + #ifdef F_DUPFD /* POSIX */ + case F_DUPFD: + #endif + #ifdef F_DUPFD_CLOEXEC /* POSIX */ + case F_DUPFD_CLOEXEC: + #endif + #ifdef F_DUPFD_CLOFORK /* Solaris */ + case F_DUPFD_CLOFORK: + #endif + #ifdef F_GETXFL /* Solaris */ + case F_GETXFL: + #endif + #ifdef F_GLOBAL_NOCACHE /* macOS */ + case F_GLOBAL_NOCACHE: + #endif + #ifdef F_MAKECOMPRESSED /* macOS */ + case F_MAKECOMPRESSED: + #endif + #ifdef F_MOVEDATAEXTENTS /* macOS */ + case F_MOVEDATAEXTENTS: + #endif + #ifdef F_NOCACHE /* macOS */ + case F_NOCACHE: + #endif + #ifdef F_NODIRECT /* macOS */ + case F_NODIRECT: + #endif + #ifdef F_NOTIFY /* Linux */ + case F_NOTIFY: + #endif + #ifdef F_OPLKACK /* IRIX */ + case F_OPLKACK: + #endif + #ifdef F_OPLKREG /* IRIX */ + case F_OPLKREG: + #endif + #ifdef F_RDAHEAD /* macOS */ + case F_RDAHEAD: + #endif + #ifdef F_SETBACKINGSTORE /* macOS */ + case F_SETBACKINGSTORE: + #endif + #ifdef F_SETCONFINED /* macOS */ + case F_SETCONFINED: + #endif + #ifdef F_SETFD /* POSIX */ + case F_SETFD: + #endif + #ifdef F_SETFL /* POSIX */ + case F_SETFL: + #endif + #ifdef F_SETLEASE /* Linux */ + case F_SETLEASE: + #endif + #ifdef F_SETNOSIGPIPE /* macOS */ + case F_SETNOSIGPIPE: + #endif + #ifdef F_SETOWN /* POSIX */ + case F_SETOWN: + #endif + #ifdef F_SETPIPE_SZ /* Linux */ + case F_SETPIPE_SZ: + #endif + #ifdef F_SETPROTECTIONCLASS /* macOS */ + case F_SETPROTECTIONCLASS: + #endif + #ifdef F_SETSIG /* Linux */ + case F_SETSIG: + #endif + #ifdef F_SINGLE_WRITER /* macOS */ + case F_SINGLE_WRITER: + #endif + /* These actions take an 'int' argument. */ + { + int x = va_arg (arg, int); + result = fcntl (fd, action, x); + } + break; + + default: + /* Other actions take a pointer argument. */ + { + void *p = va_arg (arg, void *); + result = fcntl (fd, action, p); + } + break; + } +#else + errno = EINVAL; +#endif + break; + } + } + va_end (arg); + return result; +} + +static int +rpl_fcntl_DUPFD (int fd, int target) +{ + int result; +#if !HAVE_FCNTL + result = dupfd (fd, target, 0); +#elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR + /* Detect invalid target; needed for cygwin 1.5.x. */ + if (target < 0 || getdtablesize () <= target) + { + result = -1; + errno = EINVAL; + } + else + { + /* Haiku alpha 2 loses fd flags on original. */ + int flags = fcntl (fd, F_GETFD); + if (flags < 0) + result = -1; + else + { + result = fcntl (fd, F_DUPFD, target); + if (0 <= result && fcntl (fd, F_SETFD, flags) == -1) + { + int saved_errno = errno; + close (result); + result = -1; + errno = saved_errno; + } +# if REPLACE_FCHDIR + if (0 <= result) + result = _gl_register_dup (fd, result); +# endif + } + } +#else + result = fcntl (fd, F_DUPFD, target); +#endif + return result; +} + +static int +rpl_fcntl_DUPFD_CLOEXEC (int fd, int target) +{ + int result; +#if !HAVE_FCNTL + result = dupfd (fd, target, O_CLOEXEC); +#else /* HAVE_FCNTL */ +# if defined __HAIKU__ + /* On Haiku, the system fcntl (fd, F_DUPFD_CLOEXEC, target) sets + the FD_CLOEXEC flag on fd, not on target. Therefore avoid the + system fcntl in this case. */ +# define have_dupfd_cloexec -1 +# else + /* Try the system call first, if the headers claim it exists + (that is, if GNULIB_defined_F_DUPFD_CLOEXEC is 0), since we + may be running with a glibc that has the macro but with an + older kernel that does not support it. Cache the + information on whether the system call really works, but + avoid caching failure if the corresponding F_DUPFD fails + for any reason. 0 = unknown, 1 = yes, -1 = no. */ + static int have_dupfd_cloexec = GNULIB_defined_F_DUPFD_CLOEXEC ? -1 : 0; + if (0 <= have_dupfd_cloexec) + { + result = fcntl (fd, F_DUPFD_CLOEXEC, target); + if (0 <= result || errno != EINVAL) + { + have_dupfd_cloexec = 1; +# if REPLACE_FCHDIR + if (0 <= result) + result = _gl_register_dup (fd, result); +# endif + } + else + { + result = rpl_fcntl_DUPFD (fd, target); + if (result >= 0) + have_dupfd_cloexec = -1; + } + } + else +# endif + result = rpl_fcntl_DUPFD (fd, target); + if (0 <= result && have_dupfd_cloexec == -1) + { + int flags = fcntl (result, F_GETFD); + if (flags < 0 || fcntl (result, F_SETFD, flags | FD_CLOEXEC) == -1) + { + int saved_errno = errno; + close (result); + errno = saved_errno; + result = -1; + } + } +#endif /* HAVE_FCNTL */ + return result; +} + +#undef fcntl + +#ifdef __KLIBC__ + +static int +klibc_fcntl (int fd, int action, /* arg */...); +{ + va_list arg_ptr; + int arg; + struct stat sbuf; + int result; + + va_start (arg_ptr, action); + arg = va_arg (arg_ptr, int); + result = fcntl (fd, action, arg); + /* EPERM for F_DUPFD, ENOTSUP for others */ + if (result == -1 && (errno == EPERM || errno == ENOTSUP) + && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) + { + ULONG ulMode; + + switch (action) + { + case F_DUPFD: + /* Find available fd */ + while (fcntl (arg, F_GETFL) != -1 || errno != EBADF) + arg++; + + result = dup2 (fd, arg); + break; + + /* Using underlying APIs is right ? */ + case F_GETFD: + if (DosQueryFHState (fd, &ulMode)) + break; + + result = (ulMode & OPEN_FLAGS_NOINHERIT) ? FD_CLOEXEC : 0; + break; + + case F_SETFD: + if (arg & ~FD_CLOEXEC) + break; + + if (DosQueryFHState (fd, &ulMode)) + break; + + if (arg & FD_CLOEXEC) + ulMode |= OPEN_FLAGS_NOINHERIT; + else + ulMode &= ~OPEN_FLAGS_NOINHERIT; + + /* Filter supported flags. */ + ulMode &= (OPEN_FLAGS_WRITE_THROUGH | OPEN_FLAGS_FAIL_ON_ERROR + | OPEN_FLAGS_NO_CACHE | OPEN_FLAGS_NOINHERIT); + + if (DosSetFHState (fd, ulMode)) + break; + + result = 0; + break; + + case F_GETFL: + result = 0; + break; + + case F_SETFL: + if (arg != 0) + break; + + result = 0; + break; + + default: + errno = EINVAL; + break; + } + } + + va_end (arg_ptr); + + return result; +} + +#endif diff --git a/devspec.en_US/project/recutils/lib/fcntl.h b/devspec.en_US/project/recutils/lib/fcntl.h new file mode 100755 index 0000000..43df251 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fcntl.h @@ -0,0 +1,840 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Like <fcntl.h>, but with non-working flags defined to 0. + + Copyright (C) 2006-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* written by Paul Eggert */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined __need_system_fcntl_h +/* Special invocation convention. */ + +/* Needed before <sys/stat.h>. + May also define off_t to a 64-bit type on native Windows. */ +#include <sys/types.h> +/* On some systems other than glibc, <sys/stat.h> is a prerequisite of + <fcntl.h>. On glibc systems, we would like to avoid namespace pollution. + But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an + extern "C" { ... } block, which leads to errors in C++ mode with the + overridden <sys/stat.h> from gnulib. These errors are known to be gone + with g++ version >= 4.3. */ +#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) +# include <sys/stat.h> +#endif +#include_next <fcntl.h> + +#else +/* Normal invocation convention. */ + +#ifndef _GL_FCNTL_H + +/* Needed before <sys/stat.h>. + May also define off_t to a 64-bit type on native Windows. */ +#include <sys/types.h> +/* On some systems other than glibc, <sys/stat.h> is a prerequisite of + <fcntl.h>. On glibc systems, we would like to avoid namespace pollution. + But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an + extern "C" { ... } block, which leads to errors in C++ mode with the + overridden <sys/stat.h> from gnulib. These errors are known to be gone + with g++ version >= 4.3. */ +#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) +# include <sys/stat.h> +#endif +/* The include_next requires a split double-inclusion guard. */ +#include_next <fcntl.h> + +#ifndef _GL_FCNTL_H +#define _GL_FCNTL_H + +#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ +# include <unistd.h> +#endif + +/* Native Windows platforms declare open(), creat() in <io.h>. */ +#if (1 || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) +# include <io.h> +#endif + + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +/* Declare overridden functions. */ + +#if 1 +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fcntl +# define fcntl rpl_fcntl +# endif +_GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...)); +_GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...)); +# else +# if !1 +_GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...)); +# endif +_GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...)); +# endif +_GL_CXXALIASWARN (fcntl); +#elif defined GNULIB_POSIXCHECK +# undef fcntl +# if HAVE_RAW_DECL_FCNTL +_GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - " + "use gnulib module fcntl for portability"); +# endif +#endif + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef open +# define open rpl_open +# endif +_GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); +# else +_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); +# endif +/* On HP-UX 11, in C++ mode, open() is defined as an inline function with a + default argument. _GL_CXXALIASWARN does not work in this case. */ +# if !defined __hpux +_GL_CXXALIASWARN (open); +# endif +#elif defined GNULIB_POSIXCHECK +# undef open +/* Assume open is always declared. */ +_GL_WARN_ON_USE (open, "open is not always POSIX compliant - " + "use gnulib module open for portability"); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef openat +# define openat rpl_openat +# endif +_GL_FUNCDECL_RPL (openat, int, + (int fd, char const *file, int flags, /* mode_t mode */ ...) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (openat, int, + (int fd, char const *file, int flags, /* mode_t mode */ ...)); +# else +# if !1 +_GL_FUNCDECL_SYS (openat, int, + (int fd, char const *file, int flags, /* mode_t mode */ ...) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (openat, int, + (int fd, char const *file, int flags, /* mode_t mode */ ...)); +# endif +_GL_CXXALIASWARN (openat); +#elif defined GNULIB_POSIXCHECK +# undef openat +# if HAVE_RAW_DECL_OPENAT +_GL_WARN_ON_USE (openat, "openat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +/* Fix up the FD_* macros, only known to be missing on mingw. */ + +#ifndef FD_CLOEXEC +# define FD_CLOEXEC 1 +#endif + +/* Fix up the supported F_* macros. Intentionally leave other F_* + macros undefined. Only known to be missing on mingw. */ + +#ifndef F_DUPFD_CLOEXEC +# define F_DUPFD_CLOEXEC 0x40000000 +/* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */ +# define GNULIB_defined_F_DUPFD_CLOEXEC 1 +#else +# define GNULIB_defined_F_DUPFD_CLOEXEC 0 +#endif + +#ifndef F_DUPFD +# define F_DUPFD 1 +#endif + +#ifndef F_GETFD +# define F_GETFD 2 +#endif + +/* Fix up the O_* macros. */ + +/* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT + to values outside 'int' range, so omit these misdefinitions. + But avoid namespace pollution on non-AIX systems. */ +#ifdef _AIX +# include <limits.h> +# if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX) +# undef O_CLOEXEC +# endif +# if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX) +# undef O_NOFOLLOW +# endif +# if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX) +# undef O_TTY_INIT +# endif +#endif + +#if !defined O_DIRECT && defined O_DIRECTIO +/* Tru64 spells it 'O_DIRECTIO'. */ +# define O_DIRECT O_DIRECTIO +#endif + +#if !defined O_CLOEXEC && defined O_NOINHERIT +/* Mingw spells it 'O_NOINHERIT'. */ +# define O_CLOEXEC O_NOINHERIT +#endif + +#ifndef O_CLOEXEC +# define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags. */ +# define GNULIB_defined_O_CLOEXEC 1 +#else +# define GNULIB_defined_O_CLOEXEC 0 +#endif + +#ifndef O_DIRECT +# define O_DIRECT 0 +#endif + +#ifndef O_DIRECTORY +# define O_DIRECTORY 0 +#endif + +#ifndef O_DSYNC +# define O_DSYNC 0 +#endif + +#ifndef O_EXEC +# define O_EXEC O_RDONLY /* This is often close enough in older systems. */ +#endif + +#ifndef O_IGNORE_CTTY +# define O_IGNORE_CTTY 0 +#endif + +#ifndef O_NDELAY +# define O_NDELAY 0 +#endif + +#ifndef O_NOATIME +# define O_NOATIME 0 +#endif + +#ifndef O_NONBLOCK +# define O_NONBLOCK O_NDELAY +#endif + +/* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero + value of O_NONBLOCK. Otherwise, O_NONBLOCK is defined (above) to O_NDELAY + or to 0 as fallback. */ +#if 0 +# if O_NONBLOCK +# define GNULIB_defined_O_NONBLOCK 0 +# else +# define GNULIB_defined_O_NONBLOCK 1 +# undef O_NONBLOCK +# define O_NONBLOCK 0x40000000 +# endif +#endif + +#ifndef O_NOCTTY +# define O_NOCTTY 0 +#endif + +#ifndef O_NOFOLLOW +# define O_NOFOLLOW 0 +#endif + +#ifndef O_NOLINK +# define O_NOLINK 0 +#endif + +#ifndef O_NOLINKS +# define O_NOLINKS 0 +#endif + +#ifndef O_NOTRANS +# define O_NOTRANS 0 +#endif + +#ifndef O_RSYNC +# define O_RSYNC 0 +#endif + +#ifndef O_SEARCH +# define O_SEARCH O_RDONLY /* This is often close enough in older systems. */ +#endif + +#ifndef O_SYNC +# define O_SYNC 0 +#endif + +#ifndef O_TTY_INIT +# define O_TTY_INIT 0 +#endif + +#if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) +# undef O_ACCMODE +# define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) +#endif + +/* For systems that distinguish between text and binary I/O. + O_BINARY is usually declared in fcntl.h */ +#if !defined O_BINARY && defined _O_BINARY + /* For MSC-compatible compilers. */ +# define O_BINARY _O_BINARY +# define O_TEXT _O_TEXT +#endif + +#if defined __BEOS__ || defined __HAIKU__ + /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */ +# undef O_BINARY +# undef O_TEXT +#endif + +#ifndef O_BINARY +# define O_BINARY 0 +# define O_TEXT 0 +#endif + +/* Fix up the AT_* macros. */ + +/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its + value exceeds INT_MAX, so its use as an int doesn't conform to the + C standard, and GCC and Sun C complain in some cases. If the bug + is present, undef AT_FDCWD here, so it can be redefined below. */ +#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553 +# undef AT_FDCWD +#endif + +/* Use the same bit pattern as Solaris 9, but with the proper + signedness. The bit pattern is important, in case this actually is + Solaris with the above workaround. */ +#ifndef AT_FDCWD +# define AT_FDCWD (-3041965) +#endif + +/* Use the same values as Solaris 9. This shouldn't matter, but + there's no real reason to differ. */ +#ifndef AT_SYMLINK_NOFOLLOW +# define AT_SYMLINK_NOFOLLOW 4096 +#endif + +#ifndef AT_REMOVEDIR +# define AT_REMOVEDIR 1 +#endif + +/* Solaris 9 lacks these two, so just pick unique values. */ +#ifndef AT_SYMLINK_FOLLOW +# define AT_SYMLINK_FOLLOW 2 +#endif + +#ifndef AT_EACCESS +# define AT_EACCESS 4 +#endif + + +#endif /* _GL_FCNTL_H */ +#endif /* _GL_FCNTL_H */ +#endif diff --git a/devspec.en_US/project/recutils/lib/fcntl.in.h b/devspec.en_US/project/recutils/lib/fcntl.in.h new file mode 100755 index 0000000..eb70dc6 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fcntl.in.h @@ -0,0 +1,366 @@ +/* Like <fcntl.h>, but with non-working flags defined to 0. + + Copyright (C) 2006-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* written by Paul Eggert */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if defined __need_system_fcntl_h +/* Special invocation convention. */ + +/* Needed before <sys/stat.h>. + May also define off_t to a 64-bit type on native Windows. */ +#include <sys/types.h> +/* On some systems other than glibc, <sys/stat.h> is a prerequisite of + <fcntl.h>. On glibc systems, we would like to avoid namespace pollution. + But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an + extern "C" { ... } block, which leads to errors in C++ mode with the + overridden <sys/stat.h> from gnulib. These errors are known to be gone + with g++ version >= 4.3. */ +#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) +# include <sys/stat.h> +#endif +#@INCLUDE_NEXT@ @NEXT_FCNTL_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_FCNTL_H + +/* Needed before <sys/stat.h>. + May also define off_t to a 64-bit type on native Windows. */ +#include <sys/types.h> +/* On some systems other than glibc, <sys/stat.h> is a prerequisite of + <fcntl.h>. On glibc systems, we would like to avoid namespace pollution. + But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an + extern "C" { ... } block, which leads to errors in C++ mode with the + overridden <sys/stat.h> from gnulib. These errors are known to be gone + with g++ version >= 4.3. */ +#if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) +# include <sys/stat.h> +#endif +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_FCNTL_H@ + +#ifndef _@GUARD_PREFIX@_FCNTL_H +#define _@GUARD_PREFIX@_FCNTL_H + +#ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ +# include <unistd.h> +#endif + +/* Native Windows platforms declare open(), creat() in <io.h>. */ +#if (@GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) +# include <io.h> +#endif + + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + + +/* Declare overridden functions. */ + +#if @GNULIB_FCNTL@ +# if @REPLACE_FCNTL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fcntl +# define fcntl rpl_fcntl +# endif +_GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...)); +_GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...)); +# else +# if !@HAVE_FCNTL@ +_GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...)); +# endif +_GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...)); +# endif +_GL_CXXALIASWARN (fcntl); +#elif defined GNULIB_POSIXCHECK +# undef fcntl +# if HAVE_RAW_DECL_FCNTL +_GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - " + "use gnulib module fcntl for portability"); +# endif +#endif + +#if @GNULIB_OPEN@ +# if @REPLACE_OPEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef open +# define open rpl_open +# endif +_GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); +# else +_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); +# endif +/* On HP-UX 11, in C++ mode, open() is defined as an inline function with a + default argument. _GL_CXXALIASWARN does not work in this case. */ +# if !defined __hpux +_GL_CXXALIASWARN (open); +# endif +#elif defined GNULIB_POSIXCHECK +# undef open +/* Assume open is always declared. */ +_GL_WARN_ON_USE (open, "open is not always POSIX compliant - " + "use gnulib module open for portability"); +#endif + +#if @GNULIB_OPENAT@ +# if @REPLACE_OPENAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef openat +# define openat rpl_openat +# endif +_GL_FUNCDECL_RPL (openat, int, + (int fd, char const *file, int flags, /* mode_t mode */ ...) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (openat, int, + (int fd, char const *file, int flags, /* mode_t mode */ ...)); +# else +# if !@HAVE_OPENAT@ +_GL_FUNCDECL_SYS (openat, int, + (int fd, char const *file, int flags, /* mode_t mode */ ...) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (openat, int, + (int fd, char const *file, int flags, /* mode_t mode */ ...)); +# endif +_GL_CXXALIASWARN (openat); +#elif defined GNULIB_POSIXCHECK +# undef openat +# if HAVE_RAW_DECL_OPENAT +_GL_WARN_ON_USE (openat, "openat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +/* Fix up the FD_* macros, only known to be missing on mingw. */ + +#ifndef FD_CLOEXEC +# define FD_CLOEXEC 1 +#endif + +/* Fix up the supported F_* macros. Intentionally leave other F_* + macros undefined. Only known to be missing on mingw. */ + +#ifndef F_DUPFD_CLOEXEC +# define F_DUPFD_CLOEXEC 0x40000000 +/* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */ +# define GNULIB_defined_F_DUPFD_CLOEXEC 1 +#else +# define GNULIB_defined_F_DUPFD_CLOEXEC 0 +#endif + +#ifndef F_DUPFD +# define F_DUPFD 1 +#endif + +#ifndef F_GETFD +# define F_GETFD 2 +#endif + +/* Fix up the O_* macros. */ + +/* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT + to values outside 'int' range, so omit these misdefinitions. + But avoid namespace pollution on non-AIX systems. */ +#ifdef _AIX +# include <limits.h> +# if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX) +# undef O_CLOEXEC +# endif +# if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX) +# undef O_NOFOLLOW +# endif +# if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX) +# undef O_TTY_INIT +# endif +#endif + +#if !defined O_DIRECT && defined O_DIRECTIO +/* Tru64 spells it 'O_DIRECTIO'. */ +# define O_DIRECT O_DIRECTIO +#endif + +#if !defined O_CLOEXEC && defined O_NOINHERIT +/* Mingw spells it 'O_NOINHERIT'. */ +# define O_CLOEXEC O_NOINHERIT +#endif + +#ifndef O_CLOEXEC +# define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags. */ +# define GNULIB_defined_O_CLOEXEC 1 +#else +# define GNULIB_defined_O_CLOEXEC 0 +#endif + +#ifndef O_DIRECT +# define O_DIRECT 0 +#endif + +#ifndef O_DIRECTORY +# define O_DIRECTORY 0 +#endif + +#ifndef O_DSYNC +# define O_DSYNC 0 +#endif + +#ifndef O_EXEC +# define O_EXEC O_RDONLY /* This is often close enough in older systems. */ +#endif + +#ifndef O_IGNORE_CTTY +# define O_IGNORE_CTTY 0 +#endif + +#ifndef O_NDELAY +# define O_NDELAY 0 +#endif + +#ifndef O_NOATIME +# define O_NOATIME 0 +#endif + +#ifndef O_NONBLOCK +# define O_NONBLOCK O_NDELAY +#endif + +/* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero + value of O_NONBLOCK. Otherwise, O_NONBLOCK is defined (above) to O_NDELAY + or to 0 as fallback. */ +#if @GNULIB_NONBLOCKING@ +# if O_NONBLOCK +# define GNULIB_defined_O_NONBLOCK 0 +# else +# define GNULIB_defined_O_NONBLOCK 1 +# undef O_NONBLOCK +# define O_NONBLOCK 0x40000000 +# endif +#endif + +#ifndef O_NOCTTY +# define O_NOCTTY 0 +#endif + +#ifndef O_NOFOLLOW +# define O_NOFOLLOW 0 +#endif + +#ifndef O_NOLINK +# define O_NOLINK 0 +#endif + +#ifndef O_NOLINKS +# define O_NOLINKS 0 +#endif + +#ifndef O_NOTRANS +# define O_NOTRANS 0 +#endif + +#ifndef O_RSYNC +# define O_RSYNC 0 +#endif + +#ifndef O_SEARCH +# define O_SEARCH O_RDONLY /* This is often close enough in older systems. */ +#endif + +#ifndef O_SYNC +# define O_SYNC 0 +#endif + +#ifndef O_TTY_INIT +# define O_TTY_INIT 0 +#endif + +#if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) +# undef O_ACCMODE +# define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) +#endif + +/* For systems that distinguish between text and binary I/O. + O_BINARY is usually declared in fcntl.h */ +#if !defined O_BINARY && defined _O_BINARY + /* For MSC-compatible compilers. */ +# define O_BINARY _O_BINARY +# define O_TEXT _O_TEXT +#endif + +#if defined __BEOS__ || defined __HAIKU__ + /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */ +# undef O_BINARY +# undef O_TEXT +#endif + +#ifndef O_BINARY +# define O_BINARY 0 +# define O_TEXT 0 +#endif + +/* Fix up the AT_* macros. */ + +/* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its + value exceeds INT_MAX, so its use as an int doesn't conform to the + C standard, and GCC and Sun C complain in some cases. If the bug + is present, undef AT_FDCWD here, so it can be redefined below. */ +#if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553 +# undef AT_FDCWD +#endif + +/* Use the same bit pattern as Solaris 9, but with the proper + signedness. The bit pattern is important, in case this actually is + Solaris with the above workaround. */ +#ifndef AT_FDCWD +# define AT_FDCWD (-3041965) +#endif + +/* Use the same values as Solaris 9. This shouldn't matter, but + there's no real reason to differ. */ +#ifndef AT_SYMLINK_NOFOLLOW +# define AT_SYMLINK_NOFOLLOW 4096 +#endif + +#ifndef AT_REMOVEDIR +# define AT_REMOVEDIR 1 +#endif + +/* Solaris 9 lacks these two, so just pick unique values. */ +#ifndef AT_SYMLINK_FOLLOW +# define AT_SYMLINK_FOLLOW 2 +#endif + +#ifndef AT_EACCESS +# define AT_EACCESS 4 +#endif + + +#endif /* _@GUARD_PREFIX@_FCNTL_H */ +#endif /* _@GUARD_PREFIX@_FCNTL_H */ +#endif diff --git a/devspec.en_US/project/recutils/lib/fd-hook.c b/devspec.en_US/project/recutils/lib/fd-hook.c new file mode 100755 index 0000000..7879119 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fd-hook.c @@ -0,0 +1,116 @@ +/* Hook for making file descriptor functions close(), ioctl() extensible. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include "fd-hook.h" + +#include <stdlib.h> + +/* Currently, this entire code is only needed for the handling of sockets + on native Windows platforms. */ +#if WINDOWS_SOCKETS + +/* The first and last link in the doubly linked list. + Initially the list is empty. */ +static struct fd_hook anchor = { &anchor, &anchor, NULL, NULL }; + +int +execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary, + int fd) +{ + if (remaining_list == &anchor) + /* End of list reached. */ + return primary (fd); + else + return remaining_list->private_close_fn (remaining_list->private_next, + primary, fd); +} + +int +execute_all_close_hooks (gl_close_fn primary, int fd) +{ + return execute_close_hooks (anchor.private_next, primary, fd); +} + +int +execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary, + int fd, int request, void *arg) +{ + if (remaining_list == &anchor) + /* End of list reached. */ + return primary (fd, request, arg); + else + return remaining_list->private_ioctl_fn (remaining_list->private_next, + primary, fd, request, arg); +} + +int +execute_all_ioctl_hooks (gl_ioctl_fn primary, + int fd, int request, void *arg) +{ + return execute_ioctl_hooks (anchor.private_next, primary, fd, request, arg); +} + +void +register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link) +{ + if (close_hook == NULL) + close_hook = execute_close_hooks; + if (ioctl_hook == NULL) + ioctl_hook = execute_ioctl_hooks; + + if (link->private_next == NULL && link->private_prev == NULL) + { + /* Add the link to the doubly linked list. */ + link->private_next = anchor.private_next; + link->private_prev = &anchor; + link->private_close_fn = close_hook; + link->private_ioctl_fn = ioctl_hook; + anchor.private_next->private_prev = link; + anchor.private_next = link; + } + else + { + /* The link is already in use. */ + if (link->private_close_fn != close_hook + || link->private_ioctl_fn != ioctl_hook) + abort (); + } +} + +void +unregister_fd_hook (struct fd_hook *link) +{ + struct fd_hook *next = link->private_next; + struct fd_hook *prev = link->private_prev; + + if (next != NULL && prev != NULL) + { + /* The link is in use. Remove it from the doubly linked list. */ + prev->private_next = next; + next->private_prev = prev; + /* Clear the link, to mark it unused. */ + link->private_next = NULL; + link->private_prev = NULL; + link->private_close_fn = NULL; + link->private_ioctl_fn = NULL; + } +} + +#endif diff --git a/devspec.en_US/project/recutils/lib/fd-hook.h b/devspec.en_US/project/recutils/lib/fd-hook.h new file mode 100755 index 0000000..bf07f00 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fd-hook.h @@ -0,0 +1,119 @@ +/* Hook for making file descriptor functions close(), ioctl() extensible. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + + +#ifndef FD_HOOK_H +#define FD_HOOK_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Currently, this entire code is only needed for the handling of sockets + on native Windows platforms. */ +#if WINDOWS_SOCKETS + + +/* Type of function that closes FD. */ +typedef int (*gl_close_fn) (int fd); + +/* Type of function that applies a control request to FD. */ +typedef int (*gl_ioctl_fn) (int fd, int request, void *arg); + +/* An element of the list of file descriptor hooks. + In CLOS (Common Lisp Object System) speak, it consists of an "around" + method for the close() function and an "around" method for the ioctl() + function. + The fields of this structure are considered private. */ +struct fd_hook +{ + /* Doubly linked list. */ + struct fd_hook *private_next; + struct fd_hook *private_prev; + /* Function that treats the types of FD that it knows about and calls + execute_close_hooks (REMAINING_LIST, PRIMARY, FD) as a fallback. */ + int (*private_close_fn) (const struct fd_hook *remaining_list, + gl_close_fn primary, + int fd); + /* Function that treats the types of FD that it knows about and calls + execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) as a + fallback. */ + int (*private_ioctl_fn) (const struct fd_hook *remaining_list, + gl_ioctl_fn primary, + int fd, int request, void *arg); +}; + +/* This type of function closes FD, applying special knowledge for the FD + types it knows about, and calls + execute_close_hooks (REMAINING_LIST, PRIMARY, FD) + for the other FD types. + In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, + and PRIMARY is the "primary" method for close(). */ +typedef int (*close_hook_fn) (const struct fd_hook *remaining_list, + gl_close_fn primary, + int fd); + +/* Execute the close hooks in REMAINING_LIST, with PRIMARY as "primary" method. + Return 0 or -1, like close() would do. */ +extern int execute_close_hooks (const struct fd_hook *remaining_list, + gl_close_fn primary, + int fd); + +/* Execute all close hooks, with PRIMARY as "primary" method. + Return 0 or -1, like close() would do. */ +extern int execute_all_close_hooks (gl_close_fn primary, int fd); + +/* This type of function applies a control request to FD, applying special + knowledge for the FD types it knows about, and calls + execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) + for the other FD types. + In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, + and PRIMARY is the "primary" method for ioctl(). */ +typedef int (*ioctl_hook_fn) (const struct fd_hook *remaining_list, + gl_ioctl_fn primary, + int fd, int request, void *arg); + +/* Execute the ioctl hooks in REMAINING_LIST, with PRIMARY as "primary" method. + Return 0 or -1, like ioctl() would do. */ +extern int execute_ioctl_hooks (const struct fd_hook *remaining_list, + gl_ioctl_fn primary, + int fd, int request, void *arg); + +/* Execute all ioctl hooks, with PRIMARY as "primary" method. + Return 0 or -1, like ioctl() would do. */ +extern int execute_all_ioctl_hooks (gl_ioctl_fn primary, + int fd, int request, void *arg); + +/* Add a function pair to the list of file descriptor hooks. + CLOSE_HOOK and IOCTL_HOOK may be NULL, indicating no change. + The LINK variable points to a piece of memory which is guaranteed to be + accessible until the corresponding call to unregister_fd_hook. */ +extern void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, + struct fd_hook *link); + +/* Removes a hook from the list of file descriptor hooks. */ +extern void unregister_fd_hook (struct fd_hook *link); + + +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* FD_HOOK_H */ diff --git a/devspec.en_US/project/recutils/lib/filename.h b/devspec.en_US/project/recutils/lib/filename.h new file mode 100755 index 0000000..3ba3105 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/filename.h @@ -0,0 +1,54 @@ +/* Basic filename support macros. + Copyright (C) 2001-2004, 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _FILENAME_H +#define _FILENAME_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Pathname support. + ISSLASH(C) tests whether C is a directory separator character. + IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, + it may be concatenated to a directory pathname. + IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. + */ +#if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ + /* Native Windows, Cygwin, OS/2, DOS */ +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +# define HAS_DEVICE(P) \ + ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ + && (P)[1] == ':') +# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) +# define IS_PATH_WITH_DIR(P) \ + (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) +# define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0) +#else + /* Unix */ +# define ISSLASH(C) ((C) == '/') +# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) +# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) +# define FILE_SYSTEM_PREFIX_LEN(P) 0 +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _FILENAME_H */ diff --git a/devspec.en_US/project/recutils/lib/flexmember.h b/devspec.en_US/project/recutils/lib/flexmember.h new file mode 100755 index 0000000..0d65f6d --- /dev/null +++ b/devspec.en_US/project/recutils/lib/flexmember.h @@ -0,0 +1,45 @@ +/* Sizes of structs with flexible array members. + + Copyright 2016-2019 Free Software Foundation, Inc. + + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. + + Written by Paul Eggert. */ + +#include <stddef.h> + +/* Nonzero multiple of alignment of TYPE, suitable for FLEXSIZEOF below. + On older platforms without _Alignof, use a pessimistic bound that is + safe in practice even if FLEXIBLE_ARRAY_MEMBER is 1. + On newer platforms, use _Alignof to get a tighter bound. */ + +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 +# define FLEXALIGNOF(type) (sizeof (type) & ~ (sizeof (type) - 1)) +#else +# define FLEXALIGNOF(type) _Alignof (type) +#endif + +/* Upper bound on the size of a struct of type TYPE with a flexible + array member named MEMBER that is followed by N bytes of other data. + This is not simply sizeof (TYPE) + N, since it may require + alignment on unusually picky C11 platforms, and + FLEXIBLE_ARRAY_MEMBER may be 1 on pre-C11 platforms. + Yield a value less than N if and only if arithmetic overflow occurs. */ + +#define FLEXSIZEOF(type, member, n) \ + ((offsetof (type, member) + FLEXALIGNOF (type) - 1 + (n)) \ + & ~ (FLEXALIGNOF (type) - 1)) diff --git a/devspec.en_US/project/recutils/lib/float+.h b/devspec.en_US/project/recutils/lib/float+.h new file mode 100755 index 0000000..5af861f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/float+.h @@ -0,0 +1,147 @@ +/* Supplemental information about the floating-point formats. + Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2007. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _FLOATPLUS_H +#define _FLOATPLUS_H + +#include <float.h> +#include <limits.h> + +/* Number of bits in the mantissa of a floating-point number, including the + "hidden bit". */ +#if FLT_RADIX == 2 +# define FLT_MANT_BIT FLT_MANT_DIG +# define DBL_MANT_BIT DBL_MANT_DIG +# define LDBL_MANT_BIT LDBL_MANT_DIG +#elif FLT_RADIX == 4 +# define FLT_MANT_BIT (FLT_MANT_DIG * 2) +# define DBL_MANT_BIT (DBL_MANT_DIG * 2) +# define LDBL_MANT_BIT (LDBL_MANT_DIG * 2) +#elif FLT_RADIX == 16 +# define FLT_MANT_BIT (FLT_MANT_DIG * 4) +# define DBL_MANT_BIT (DBL_MANT_DIG * 4) +# define LDBL_MANT_BIT (LDBL_MANT_DIG * 4) +#endif + +/* Bit mask that can be used to mask the exponent, as an unsigned number. */ +#define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7) +#define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) +#define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7) + +/* Number of bits used for the exponent of a floating-point number, including + the exponent's sign. */ +#define FLT_EXP_BIT \ + (FLT_EXP_MASK < 0x100 ? 8 : \ + FLT_EXP_MASK < 0x200 ? 9 : \ + FLT_EXP_MASK < 0x400 ? 10 : \ + FLT_EXP_MASK < 0x800 ? 11 : \ + FLT_EXP_MASK < 0x1000 ? 12 : \ + FLT_EXP_MASK < 0x2000 ? 13 : \ + FLT_EXP_MASK < 0x4000 ? 14 : \ + FLT_EXP_MASK < 0x8000 ? 15 : \ + FLT_EXP_MASK < 0x10000 ? 16 : \ + FLT_EXP_MASK < 0x20000 ? 17 : \ + FLT_EXP_MASK < 0x40000 ? 18 : \ + FLT_EXP_MASK < 0x80000 ? 19 : \ + FLT_EXP_MASK < 0x100000 ? 20 : \ + FLT_EXP_MASK < 0x200000 ? 21 : \ + FLT_EXP_MASK < 0x400000 ? 22 : \ + FLT_EXP_MASK < 0x800000 ? 23 : \ + FLT_EXP_MASK < 0x1000000 ? 24 : \ + FLT_EXP_MASK < 0x2000000 ? 25 : \ + FLT_EXP_MASK < 0x4000000 ? 26 : \ + FLT_EXP_MASK < 0x8000000 ? 27 : \ + FLT_EXP_MASK < 0x10000000 ? 28 : \ + FLT_EXP_MASK < 0x20000000 ? 29 : \ + FLT_EXP_MASK < 0x40000000 ? 30 : \ + FLT_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) +#define DBL_EXP_BIT \ + (DBL_EXP_MASK < 0x100 ? 8 : \ + DBL_EXP_MASK < 0x200 ? 9 : \ + DBL_EXP_MASK < 0x400 ? 10 : \ + DBL_EXP_MASK < 0x800 ? 11 : \ + DBL_EXP_MASK < 0x1000 ? 12 : \ + DBL_EXP_MASK < 0x2000 ? 13 : \ + DBL_EXP_MASK < 0x4000 ? 14 : \ + DBL_EXP_MASK < 0x8000 ? 15 : \ + DBL_EXP_MASK < 0x10000 ? 16 : \ + DBL_EXP_MASK < 0x20000 ? 17 : \ + DBL_EXP_MASK < 0x40000 ? 18 : \ + DBL_EXP_MASK < 0x80000 ? 19 : \ + DBL_EXP_MASK < 0x100000 ? 20 : \ + DBL_EXP_MASK < 0x200000 ? 21 : \ + DBL_EXP_MASK < 0x400000 ? 22 : \ + DBL_EXP_MASK < 0x800000 ? 23 : \ + DBL_EXP_MASK < 0x1000000 ? 24 : \ + DBL_EXP_MASK < 0x2000000 ? 25 : \ + DBL_EXP_MASK < 0x4000000 ? 26 : \ + DBL_EXP_MASK < 0x8000000 ? 27 : \ + DBL_EXP_MASK < 0x10000000 ? 28 : \ + DBL_EXP_MASK < 0x20000000 ? 29 : \ + DBL_EXP_MASK < 0x40000000 ? 30 : \ + DBL_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) +#define LDBL_EXP_BIT \ + (LDBL_EXP_MASK < 0x100 ? 8 : \ + LDBL_EXP_MASK < 0x200 ? 9 : \ + LDBL_EXP_MASK < 0x400 ? 10 : \ + LDBL_EXP_MASK < 0x800 ? 11 : \ + LDBL_EXP_MASK < 0x1000 ? 12 : \ + LDBL_EXP_MASK < 0x2000 ? 13 : \ + LDBL_EXP_MASK < 0x4000 ? 14 : \ + LDBL_EXP_MASK < 0x8000 ? 15 : \ + LDBL_EXP_MASK < 0x10000 ? 16 : \ + LDBL_EXP_MASK < 0x20000 ? 17 : \ + LDBL_EXP_MASK < 0x40000 ? 18 : \ + LDBL_EXP_MASK < 0x80000 ? 19 : \ + LDBL_EXP_MASK < 0x100000 ? 20 : \ + LDBL_EXP_MASK < 0x200000 ? 21 : \ + LDBL_EXP_MASK < 0x400000 ? 22 : \ + LDBL_EXP_MASK < 0x800000 ? 23 : \ + LDBL_EXP_MASK < 0x1000000 ? 24 : \ + LDBL_EXP_MASK < 0x2000000 ? 25 : \ + LDBL_EXP_MASK < 0x4000000 ? 26 : \ + LDBL_EXP_MASK < 0x8000000 ? 27 : \ + LDBL_EXP_MASK < 0x10000000 ? 28 : \ + LDBL_EXP_MASK < 0x20000000 ? 29 : \ + LDBL_EXP_MASK < 0x40000000 ? 30 : \ + LDBL_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) + +/* Number of bits used for a floating-point number: the mantissa (not + counting the "hidden bit", since it may or may not be explicit), the + exponent, and the sign. */ +#define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1) +#define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1) +#define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1) + +/* Number of bytes used for a floating-point number. + This can be smaller than the 'sizeof'. For example, on i386 systems, + 'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence + LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but + sizeof (long double) = 12 or = 16. */ +#define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) +#define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) +#define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) + +/* Verify that SIZEOF_FLT <= sizeof (float) etc. */ +typedef int verify_sizeof_flt[SIZEOF_FLT <= sizeof (float) ? 1 : -1]; +typedef int verify_sizeof_dbl[SIZEOF_DBL <= sizeof (double) ? 1 : - 1]; +typedef int verify_sizeof_ldbl[SIZEOF_LDBL <= sizeof (long double) ? 1 : - 1]; + +#endif /* _FLOATPLUS_H */ diff --git a/devspec.en_US/project/recutils/lib/float.c b/devspec.en_US/project/recutils/lib/float.c new file mode 100755 index 0000000..8872deb --- /dev/null +++ b/devspec.en_US/project/recutils/lib/float.c @@ -0,0 +1,33 @@ +/* Auxiliary definitions for <float.h>. + Copyright (C) 2011-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2011. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <float.h> + +#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ +const union gl_long_double_union gl_LDBL_MAX = + { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } }; +#elif defined __i386__ +const union gl_long_double_union gl_LDBL_MAX = + { { 0xFFFFFFFF, 0xFFFFFFFF, 32766 } }; +#else +/* This declaration is solely to ensure that after preprocessing + this file is never empty. */ +typedef int dummy; +#endif diff --git a/devspec.en_US/project/recutils/lib/float.in.h b/devspec.en_US/project/recutils/lib/float.in.h new file mode 100755 index 0000000..ba094a8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/float.in.h @@ -0,0 +1,188 @@ +/* A correct <float.h>. + + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _@GUARD_PREFIX@_FLOAT_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_FLOAT_H@ + +#ifndef _@GUARD_PREFIX@_FLOAT_H +#define _@GUARD_PREFIX@_FLOAT_H + +/* 'long double' properties. */ + +#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) +/* Number of mantissa units, in base FLT_RADIX. */ +# undef LDBL_MANT_DIG +# define LDBL_MANT_DIG 64 +/* Number of decimal digits that is sufficient for representing a number. */ +# undef LDBL_DIG +# define LDBL_DIG 18 +/* x-1 where x is the smallest representable number > 1. */ +# undef LDBL_EPSILON +# define LDBL_EPSILON 1.0842021724855044340E-19L +/* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ +# undef LDBL_MAX_EXP +# define LDBL_MAX_EXP 16384 +/* Minimum positive normalized number. */ +# undef LDBL_MIN +# define LDBL_MIN 3.3621031431120935063E-4932L +/* Maximum representable finite number. */ +# undef LDBL_MAX +# define LDBL_MAX 1.1897314953572317650E+4932L +/* Minimum e such that 10^e is in the range of normalized numbers. */ +# undef LDBL_MIN_10_EXP +# define LDBL_MIN_10_EXP (-4931) +/* Maximum e such that 10^e is in the range of representable finite numbers. */ +# undef LDBL_MAX_10_EXP +# define LDBL_MAX_10_EXP 4932 +#endif + +/* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of + precision in the compiler but 64 bits of precision at runtime. See + <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>. */ +#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) +/* Number of mantissa units, in base FLT_RADIX. */ +# undef LDBL_MANT_DIG +# define LDBL_MANT_DIG 64 +/* Number of decimal digits that is sufficient for representing a number. */ +# undef LDBL_DIG +# define LDBL_DIG 18 +/* x-1 where x is the smallest representable number > 1. */ +# undef LDBL_EPSILON +# define LDBL_EPSILON 1.084202172485504434007452800869941711426e-19L /* 2^-63 */ +/* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ +# undef LDBL_MAX_EXP +# define LDBL_MAX_EXP 16384 +/* Minimum positive normalized number. */ +# undef LDBL_MIN +# define LDBL_MIN 3.362103143112093506262677817321752E-4932L /* = 0x1p-16382L */ +/* Maximum representable finite number. */ +# undef LDBL_MAX +/* LDBL_MAX is represented as { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }. + But the largest literal that GCC allows us to write is + 0x0.fffffffffffff8p16384L = { 0xFFFFF800, 0xFFFFFFFF, 32766 }. + So, define it like this through a reference to an external variable + + const unsigned int LDBL_MAX[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }; + extern const long double LDBL_MAX; + + Unfortunately, this is not a constant expression. */ +union gl_long_double_union + { + struct { unsigned int lo; unsigned int hi; unsigned int exponent; } xd; + long double ld; + }; +extern const union gl_long_double_union gl_LDBL_MAX; +# define LDBL_MAX (gl_LDBL_MAX.ld) +/* Minimum e such that 10^e is in the range of normalized numbers. */ +# undef LDBL_MIN_10_EXP +# define LDBL_MIN_10_EXP (-4931) +/* Maximum e such that 10^e is in the range of representable finite numbers. */ +# undef LDBL_MAX_10_EXP +# define LDBL_MAX_10_EXP 4932 +#endif + +/* On AIX 7.1 with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX are + wrong. + On Linux/PowerPC with gcc 4.4, the value of LDBL_MAX is wrong. */ +#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP DBL_MIN_EXP +# undef LDBL_MIN_10_EXP +# define LDBL_MIN_10_EXP DBL_MIN_10_EXP +# undef LDBL_MIN +# define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ +#endif +#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ +# undef LDBL_MAX +/* LDBL_MAX is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xFFFFFFFF }. + It is not easy to define: + #define LDBL_MAX 1.79769313486231580793728971405302307166e308L + is too small, whereas + #define LDBL_MAX 1.79769313486231580793728971405302307167e308L + is too large. Apparently a bug in GCC decimal-to-binary conversion. + Also, I can't get values larger than + #define LDBL63 ((long double) (1ULL << 63)) + #define LDBL882 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) + #define LDBL945 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) + #define LDBL1008 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) + #define LDBL_MAX (LDBL1008 * 65535.0L + LDBL945 * (long double) 9223372036821221375ULL + LDBL882 * (long double) 4611686018427387904ULL) + which is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xF8000000 }. + So, define it like this through a reference to an external variable + + const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }; + extern const long double LDBL_MAX; + + or through a pointer cast + + #define LDBL_MAX \ + (*(const long double *) (double[]) { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }) + + Unfortunately, this is not a constant expression, and the latter expression + does not work well when GCC is optimizing.. */ +union gl_long_double_union + { + struct { double hi; double lo; } dd; + long double ld; + }; +extern const union gl_long_double_union gl_LDBL_MAX; +# define LDBL_MAX (gl_LDBL_MAX.ld) +#endif + +/* On IRIX 6.5, with cc, the value of LDBL_MANT_DIG is wrong. + On IRIX 6.5, with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_EPSILON + are wrong. */ +#if defined __sgi && (LDBL_MANT_DIG >= 106) +# undef LDBL_MANT_DIG +# define LDBL_MANT_DIG 106 +# if defined __GNUC__ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP DBL_MIN_EXP +# undef LDBL_MIN_10_EXP +# define LDBL_MIN_10_EXP DBL_MIN_10_EXP +# undef LDBL_MIN +# define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ +# undef LDBL_EPSILON +# define LDBL_EPSILON 2.46519032881566189191165176650870696773e-32L /* 2^-105 */ +# endif +#endif + +#if @REPLACE_ITOLD@ +/* Pull in a function that fixes the 'int' to 'long double' conversion + of glibc 2.7. */ +extern +# ifdef __cplusplus +"C" +# endif +void _Qp_itoq (long double *, int); +static void (*_gl_float_fix_itold) (long double *, int) = _Qp_itoq; +#endif + +#endif /* _@GUARD_PREFIX@_FLOAT_H */ +#endif /* _@GUARD_PREFIX@_FLOAT_H */ diff --git a/devspec.en_US/project/recutils/lib/flock.c b/devspec.en_US/project/recutils/lib/flock.c new file mode 100755 index 0000000..d804e57 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/flock.c @@ -0,0 +1,224 @@ +/* Emulate flock on platforms that lack it, primarily Windows and MinGW. + + This is derived from sqlite3 sources. + https://www.sqlite.org/src/finfo?name=src/os_win.c + https://www.sqlite.org/copyright.html + + Written by Richard W.M. Jones <rjones.at.redhat.com> + + Copyright (C) 2008-2019 Free Software Foundation, Inc. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> +#include <sys/file.h> + +#if defined _WIN32 && ! defined __CYGWIN__ + +/* LockFileEx */ +# define WIN32_LEAN_AND_MEAN +# include <windows.h> + +# include <errno.h> + +/* _get_osfhandle */ +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include <io.h> +# endif + +/* Determine the current size of a file. Because the other braindead + * APIs we'll call need lower/upper 32 bit pairs, keep the file size + * like that too. + */ +static BOOL +file_size (HANDLE h, DWORD * lower, DWORD * upper) +{ + *lower = GetFileSize (h, upper); + return 1; +} + +/* LOCKFILE_FAIL_IMMEDIATELY is undefined on some Windows systems. */ +# ifndef LOCKFILE_FAIL_IMMEDIATELY +# define LOCKFILE_FAIL_IMMEDIATELY 1 +# endif + +/* Acquire a lock. */ +static BOOL +do_lock (HANDLE h, int non_blocking, int exclusive) +{ + BOOL res; + DWORD size_lower, size_upper; + OVERLAPPED ovlp; + int flags = 0; + + /* We're going to lock the whole file, so get the file size. */ + res = file_size (h, &size_lower, &size_upper); + if (!res) + return 0; + + /* Start offset is 0, and also zero the remaining members of this struct. */ + memset (&ovlp, 0, sizeof ovlp); + + if (non_blocking) + flags |= LOCKFILE_FAIL_IMMEDIATELY; + if (exclusive) + flags |= LOCKFILE_EXCLUSIVE_LOCK; + + return LockFileEx (h, flags, 0, size_lower, size_upper, &ovlp); +} + +/* Unlock reader or exclusive lock. */ +static BOOL +do_unlock (HANDLE h) +{ + int res; + DWORD size_lower, size_upper; + + res = file_size (h, &size_lower, &size_upper); + if (!res) + return 0; + + return UnlockFile (h, 0, 0, size_lower, size_upper); +} + +/* Now our BSD-like flock operation. */ +int +flock (int fd, int operation) +{ + HANDLE h = (HANDLE) _get_osfhandle (fd); + DWORD res; + int non_blocking; + + if (h == INVALID_HANDLE_VALUE) + { + errno = EBADF; + return -1; + } + + non_blocking = operation & LOCK_NB; + operation &= ~LOCK_NB; + + switch (operation) + { + case LOCK_SH: + res = do_lock (h, non_blocking, 0); + break; + case LOCK_EX: + res = do_lock (h, non_blocking, 1); + break; + case LOCK_UN: + res = do_unlock (h); + break; + default: + errno = EINVAL; + return -1; + } + + /* Map Windows errors into Unix errnos. As usual MSDN fails to + * document the permissible error codes. + */ + if (!res) + { + DWORD err = GetLastError (); + switch (err) + { + /* This means someone else is holding a lock. */ + case ERROR_LOCK_VIOLATION: + errno = EAGAIN; + break; + + /* Out of memory. */ + case ERROR_NOT_ENOUGH_MEMORY: + errno = ENOMEM; + break; + + case ERROR_BAD_COMMAND: + errno = EINVAL; + break; + + /* Unlikely to be other errors, but at least don't lose the + * error code. + */ + default: + errno = err; + } + + return -1; + } + + return 0; +} + +#else /* !Windows */ + +# ifdef HAVE_STRUCT_FLOCK_L_TYPE +/* We know how to implement flock in terms of fcntl. */ + +# include <fcntl.h> + +# ifdef HAVE_UNISTD_H +# include <unistd.h> +# endif + +# include <errno.h> +# include <string.h> + +int +flock (int fd, int operation) +{ + int cmd, r; + struct flock fl; + + if (operation & LOCK_NB) + cmd = F_SETLK; + else + cmd = F_SETLKW; + operation &= ~LOCK_NB; + + memset (&fl, 0, sizeof fl); + fl.l_whence = SEEK_SET; + /* l_start & l_len are 0, which as a special case means "whole file". */ + + switch (operation) + { + case LOCK_SH: + fl.l_type = F_RDLCK; + break; + case LOCK_EX: + fl.l_type = F_WRLCK; + break; + case LOCK_UN: + fl.l_type = F_UNLCK; + break; + default: + errno = EINVAL; + return -1; + } + + r = fcntl (fd, cmd, &fl); + if (r == -1 && errno == EACCES) + errno = EAGAIN; + + return r; +} + +# else /* !HAVE_STRUCT_FLOCK_L_TYPE */ + +# error "This platform lacks flock function, and Gnulib doesn't provide a replacement. This is a bug in Gnulib." + +# endif /* !HAVE_STRUCT_FLOCK_L_TYPE */ + +#endif /* !Windows */ diff --git a/devspec.en_US/project/recutils/lib/floor.c b/devspec.en_US/project/recutils/lib/floor.c new file mode 100755 index 0000000..5ea0c56 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/floor.c @@ -0,0 +1,105 @@ +/* Round towards negative infinity. + Copyright (C) 2007, 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#if ! defined USE_LONG_DOUBLE +# include <config.h> +#endif + +/* Specification. */ +#include <math.h> + +#include <float.h> + +#ifdef USE_LONG_DOUBLE +# define FUNC floorl +# define DOUBLE long double +# define MANT_DIG LDBL_MANT_DIG +# define L_(literal) literal##L +#elif ! defined USE_FLOAT +# define FUNC floor +# define DOUBLE double +# define MANT_DIG DBL_MANT_DIG +# define L_(literal) literal +#else /* defined USE_FLOAT */ +# define FUNC floorf +# define DOUBLE float +# define MANT_DIG FLT_MANT_DIG +# define L_(literal) literal##f +#endif + +/* MSVC with option -fp:strict refuses to compile constant initializers that + contain floating-point operations. Pacify this compiler. */ +#ifdef _MSC_VER +# pragma fenv_access (off) +#endif + +/* 2^(MANT_DIG-1). */ +static const DOUBLE TWO_MANT_DIG = + /* Assume MANT_DIG <= 5 * 31. + Use the identity + n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ + (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) + * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) + * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) + * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) + * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); + +DOUBLE +FUNC (DOUBLE x) +{ + /* The use of 'volatile' guarantees that excess precision bits are dropped + at each addition step and before the following comparison at the caller's + site. It is necessary on x86 systems where double-floats are not IEEE + compliant by default, to avoid that the results become platform and compiler + option dependent. 'volatile' is a portable alternative to gcc's + -ffloat-store option. */ + volatile DOUBLE y = x; + volatile DOUBLE z = y; + + if (z > L_(0.0)) + { + /* For 0 < x < 1, return +0.0 even if the current rounding mode is + FE_DOWNWARD. */ + if (z < L_(1.0)) + z = L_(0.0); + /* Avoid rounding errors for values near 2^k, where k >= MANT_DIG-1. */ + else if (z < TWO_MANT_DIG) + { + /* Round to the next integer (nearest or up or down, doesn't matter). */ + z += TWO_MANT_DIG; + z -= TWO_MANT_DIG; + /* Enforce rounding down. */ + if (z > y) + z -= L_(1.0); + } + } + else if (z < L_(0.0)) + { + /* Avoid rounding errors for values near -2^k, where k >= MANT_DIG-1. */ + if (z > - TWO_MANT_DIG) + { + /* Round to the next integer (nearest or up or down, doesn't matter). */ + z -= TWO_MANT_DIG; + z += TWO_MANT_DIG; + /* Enforce rounding down. */ + if (z > y) + z -= L_(1.0); + } + } + return z; +} diff --git a/devspec.en_US/project/recutils/lib/fpending.c b/devspec.en_US/project/recutils/lib/fpending.c new file mode 100755 index 0000000..3c01285 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fpending.c @@ -0,0 +1,62 @@ +/* fpending.c -- return the number of pending output bytes on a stream + Copyright (C) 2000, 2004, 2006-2007, 2009-2019 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Jim Meyering. */ + +#include <config.h> + +/* Specification. */ +#include "fpending.h" + +#include "stdio-impl.h" + +/* This file is not used on systems that already have the __fpending function, + namely glibc >= 2.2, Solaris >= 7, Android API >= 23. */ + +/* Return the number of pending (aka buffered, unflushed) + bytes on the stream, FP, that is open for writing. */ +size_t +__fpending (FILE *fp) +{ + /* Most systems provide FILE as a struct and the necessary bitmask in + <stdio.h>, because they need it for implementing getc() and putc() as + fast macros. */ +#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 + /* GNU libc, BeOS, Haiku, Linux libc5 */ + return fp->_IO_write_ptr - fp->_IO_write_base; +#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ + return fp->_p - fp->_bf._base; +#elif defined __EMX__ /* emx+gcc */ + return fp->_ptr - fp->_buffer; +#elif defined __minix /* Minix */ + return fp_->_ptr - fp_->_buf; +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel, OpenVMS */ + return (fp_->_ptr ? fp_->_ptr - fp_->_base : 0); +#elif defined __UCLIBC__ /* uClibc */ + return (fp->__modeflags & __FLAG_WRITING ? fp->__bufpos - fp->__bufstart : 0); +#elif defined __QNX__ /* QNX */ + return (fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0); +#elif defined __MINT__ /* Atari FreeMiNT */ + return fp->__bufp - fp->__buffer; +#elif defined EPLAN9 /* Plan9 */ + return fp->wp - fp->buf; +#else +# error "Please port gnulib fpending.c to your platform!" + return 1; +#endif +} diff --git a/devspec.en_US/project/recutils/lib/fpending.h b/devspec.en_US/project/recutils/lib/fpending.h new file mode 100755 index 0000000..097a3ef --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fpending.h @@ -0,0 +1,29 @@ +/* Declare __fpending. + + Copyright (C) 2000, 2003, 2005-2006, 2009-2019 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + + Written by Jim Meyering. */ + +#include <stddef.h> +#include <stdio.h> +#if HAVE_STDIO_EXT_H +# include <stdio_ext.h> +#endif + +#if !HAVE_DECL___FPENDING +size_t __fpending (FILE *) _GL_ATTRIBUTE_PURE; +#endif diff --git a/devspec.en_US/project/recutils/lib/fprintf.c b/devspec.en_US/project/recutils/lib/fprintf.c new file mode 100755 index 0000000..749e0ea --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fprintf.c @@ -0,0 +1,77 @@ +/* Formatted output to a stream. + Copyright (C) 2004, 2006-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +/* Specification. */ +#include <stdio.h> + +#include <errno.h> +#include <limits.h> +#include <stdarg.h> +#include <stdlib.h> + +#include "fseterr.h" +#include "vasnprintf.h" + +/* Print formatted output to the stream FP. + Return string length of formatted string. On error, return a negative + value. */ +int +fprintf (FILE *fp, const char *format, ...) +{ + char buf[2000]; + char *output; + size_t len; + size_t lenbuf = sizeof (buf); + va_list args; + + va_start (args, format); + output = vasnprintf (buf, &lenbuf, format, args); + len = lenbuf; + va_end (args); + + if (!output) + { + fseterr (fp); + return -1; + } + + if (fwrite (output, 1, len, fp) < len) + { + if (output != buf) + { + int saved_errno = errno; + free (output); + errno = saved_errno; + } + return -1; + } + + if (output != buf) + free (output); + + if (len > INT_MAX) + { + errno = EOVERFLOW; + fseterr (fp); + return -1; + } + + return len; +} diff --git a/devspec.en_US/project/recutils/lib/fpucw.h b/devspec.en_US/project/recutils/lib/fpucw.h new file mode 100755 index 0000000..caa51fe --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fpucw.h @@ -0,0 +1,108 @@ +/* Manipulating the FPU control word. -*- coding: utf-8 -*- + Copyright (C) 2007-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2007. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _FPUCW_H +#define _FPUCW_H + +/* The i386 floating point hardware (the 387 compatible FPU, not the modern + SSE/SSE2 hardware) has a controllable rounding precision. It is specified + through the 'PC' bits in the FPU control word ('fctrl' register). (See + the GNU libc i386 <fpu_control.h> header for details.) + + On some platforms, such as Linux or Solaris, the default precision setting + is set to "extended precision". This means that 'long double' instructions + operate correctly, but 'double' computations often produce slightly + different results as on strictly IEEE 754 conforming systems. + + On some platforms, such as NetBSD, the default precision is set to + "double precision". This means that 'long double' instructions will operate + only as 'double', i.e. lead to wrong results. Similarly on FreeBSD 6.4, at + least for the division of 'long double' numbers. + + The FPU control word is under control of the application, i.e. it is + not required to be set either way by the ABI. (In fact, the i386 ABI + https://www.linux-mips.org/pub/linux/mips/doc/ABI/abi386-4.pdf page 3-12 = page 38 + is not clear about it. But in any case, gcc treats the control word + like a "preserved" register: it emits code that assumes that the control + word is preserved across calls, and it restores the control word at the + end of functions that modify it.) + + See Vincent Lefèvre's page https://www.vinc17.net/research/extended.en.html + for a good explanation. + See http://www.uwsg.iu.edu/hypermail/linux/kernel/0103.0/0453.html for + some argumentation which setting should be the default. */ + +/* This header file provides the following facilities: + fpucw_t integral type holding the value of 'fctrl' + FPU_PC_MASK bit mask denoting the precision control + FPU_PC_DOUBLE precision control for 53 bits mantissa + FPU_PC_EXTENDED precision control for 64 bits mantissa + GET_FPUCW () yields the current FPU control word + SET_FPUCW (word) sets the FPU control word + DECL_LONG_DOUBLE_ROUNDING variable declaration for + BEGIN/END_LONG_DOUBLE_ROUNDING + BEGIN_LONG_DOUBLE_ROUNDING () starts a sequence of instructions with + 'long double' safe operation precision + END_LONG_DOUBLE_ROUNDING () ends a sequence of instructions with + 'long double' safe operation precision + */ + +/* Inline assembler like this works only with GNU C. */ +#if (defined __i386__ || defined __x86_64__) && defined __GNUC__ + +typedef unsigned short fpucw_t; /* glibc calls this fpu_control_t */ + +# define FPU_PC_MASK 0x0300 +# define FPU_PC_DOUBLE 0x200 /* glibc calls this _FPU_DOUBLE */ +# define FPU_PC_EXTENDED 0x300 /* glibc calls this _FPU_EXTENDED */ + +# define GET_FPUCW() \ + ({ fpucw_t _cw; \ + __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_cw)); \ + _cw; \ + }) +# define SET_FPUCW(word) \ + (void)({ fpucw_t _ncw = (word); \ + __asm__ __volatile__ ("fldcw %0" : : "m" (*&_ncw)); \ + }) + +# define DECL_LONG_DOUBLE_ROUNDING \ + fpucw_t oldcw; +# define BEGIN_LONG_DOUBLE_ROUNDING() \ + (void)(oldcw = GET_FPUCW (), \ + SET_FPUCW ((oldcw & ~FPU_PC_MASK) | FPU_PC_EXTENDED)) +# define END_LONG_DOUBLE_ROUNDING() \ + SET_FPUCW (oldcw) + +#else + +typedef unsigned int fpucw_t; + +# define FPU_PC_MASK 0 +# define FPU_PC_DOUBLE 0 +# define FPU_PC_EXTENDED 0 + +# define GET_FPUCW() 0 +# define SET_FPUCW(word) (void)(word) + +# define DECL_LONG_DOUBLE_ROUNDING +# define BEGIN_LONG_DOUBLE_ROUNDING() +# define END_LONG_DOUBLE_ROUNDING() + +#endif + +#endif /* _FPUCW_H */ diff --git a/devspec.en_US/project/recutils/lib/frexp.c b/devspec.en_US/project/recutils/lib/frexp.c new file mode 100755 index 0000000..d3f1199 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/frexp.c @@ -0,0 +1,168 @@ +/* Split a double into fraction and mantissa. + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Paolo Bonzini <bonzini@gnu.org>, 2003, and + Bruno Haible <bruno@clisp.org>, 2007. */ + +#if ! defined USE_LONG_DOUBLE +# include <config.h> +#endif + +/* Specification. */ +#include <math.h> + +#include <float.h> +#ifdef USE_LONG_DOUBLE +# include "isnanl-nolibm.h" +# include "fpucw.h" +#else +# include "isnand-nolibm.h" +#endif + +/* This file assumes FLT_RADIX = 2. If FLT_RADIX is a power of 2 greater + than 2, or not even a power of 2, some rounding errors can occur, so that + then the returned mantissa is only guaranteed to be <= 1.0, not < 1.0. */ + +#ifdef USE_LONG_DOUBLE +# define FUNC frexpl +# define DOUBLE long double +# define ISNAN isnanl +# define DECL_ROUNDING DECL_LONG_DOUBLE_ROUNDING +# define BEGIN_ROUNDING() BEGIN_LONG_DOUBLE_ROUNDING () +# define END_ROUNDING() END_LONG_DOUBLE_ROUNDING () +# define L_(literal) literal##L +#else +# define FUNC frexp +# define DOUBLE double +# define ISNAN isnand +# define DECL_ROUNDING +# define BEGIN_ROUNDING() +# define END_ROUNDING() +# define L_(literal) literal +#endif + +DOUBLE +FUNC (DOUBLE x, int *expptr) +{ + int sign; + int exponent; + DECL_ROUNDING + + /* Test for NaN, infinity, and zero. */ + if (ISNAN (x) || x + x == x) + { + *expptr = 0; + return x; + } + + sign = 0; + if (x < 0) + { + x = - x; + sign = -1; + } + + BEGIN_ROUNDING (); + + { + /* Since the exponent is an 'int', it fits in 64 bits. Therefore the + loops are executed no more than 64 times. */ + DOUBLE pow2[64]; /* pow2[i] = 2^2^i */ + DOUBLE powh[64]; /* powh[i] = 2^-2^i */ + int i; + + exponent = 0; + if (x >= L_(1.0)) + { + /* A positive exponent. */ + DOUBLE pow2_i; /* = pow2[i] */ + DOUBLE powh_i; /* = powh[i] */ + + /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, + x * 2^exponent = argument, x >= 1.0. */ + for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); + ; + i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) + { + if (x >= pow2_i) + { + exponent += (1 << i); + x *= powh_i; + } + else + break; + + pow2[i] = pow2_i; + powh[i] = powh_i; + } + /* Avoid making x too small, as it could become a denormalized + number and thus lose precision. */ + while (i > 0 && x < pow2[i - 1]) + { + i--; + powh_i = powh[i]; + } + exponent += (1 << i); + x *= powh_i; + /* Here 2^-2^i <= x < 1.0. */ + } + else + { + /* A negative or zero exponent. */ + DOUBLE pow2_i; /* = pow2[i] */ + DOUBLE powh_i; /* = powh[i] */ + + /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, + x * 2^exponent = argument, x < 1.0. */ + for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); + ; + i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) + { + if (x < powh_i) + { + exponent -= (1 << i); + x *= pow2_i; + } + else + break; + + pow2[i] = pow2_i; + powh[i] = powh_i; + } + /* Here 2^-2^i <= x < 1.0. */ + } + + /* Invariants: x * 2^exponent = argument, and 2^-2^i <= x < 1.0. */ + while (i > 0) + { + i--; + if (x < powh[i]) + { + exponent -= (1 << i); + x *= pow2[i]; + } + } + /* Here 0.5 <= x < 1.0. */ + } + + if (sign < 0) + x = - x; + + END_ROUNDING (); + + *expptr = exponent; + return x; +} diff --git a/devspec.en_US/project/recutils/lib/frexpl.c b/devspec.en_US/project/recutils/lib/frexpl.c new file mode 100755 index 0000000..820cb2d --- /dev/null +++ b/devspec.en_US/project/recutils/lib/frexpl.c @@ -0,0 +1,35 @@ +/* Split a 'long double' into fraction and mantissa. + Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE + +/* Specification. */ +# include <math.h> + +long double +frexpl (long double x, int *expptr) +{ + return frexp (x, expptr); +} + +#else + +# define USE_LONG_DOUBLE +# include "frexp.c" + +#endif diff --git a/devspec.en_US/project/recutils/lib/fseek.c b/devspec.en_US/project/recutils/lib/fseek.c new file mode 100755 index 0000000..bb22fe0 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fseek.c @@ -0,0 +1,30 @@ +/* An fseek() function that, together with fflush(), is POSIX compliant. + Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <stdio.h> + +/* Get off_t. */ +#include <unistd.h> + +int +fseek (FILE *fp, long offset, int whence) +{ + /* Use the replacement fseeko function with all its workarounds. */ + return fseeko (fp, (off_t)offset, whence); +} diff --git a/devspec.en_US/project/recutils/lib/fseeko.c b/devspec.en_US/project/recutils/lib/fseeko.c new file mode 100755 index 0000000..859d212 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fseeko.c @@ -0,0 +1,164 @@ +/* An fseeko() function that, together with fflush(), is POSIX compliant. + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <stdio.h> + +/* Get off_t, lseek, _POSIX_VERSION. */ +#include <unistd.h> + +#include "stdio-impl.h" + +int +fseeko (FILE *fp, off_t offset, int whence) +#undef fseeko +#if !HAVE_FSEEKO +# undef fseek +# define fseeko fseek +#endif +#if _GL_WINDOWS_64_BIT_OFF_T +# undef fseeko +# if HAVE__FSEEKI64 && HAVE_DECL__FSEEKI64 /* msvc, mingw since msvcrt8.0, mingw64 */ +# define fseeko _fseeki64 +# else /* mingw before msvcrt8.0 */ +# define fseeko fseeko64 +# endif +#endif +{ +#if LSEEK_PIPE_BROKEN + /* mingw gives bogus answers rather than failure on non-seekable files. */ + if (lseek (fileno (fp), 0, SEEK_CUR) == -1) + return EOF; +#endif + + /* These tests are based on fpurge.c. */ +#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 + /* GNU libc, BeOS, Haiku, Linux libc5 */ + if (fp->_IO_read_end == fp->_IO_read_ptr + && fp->_IO_write_ptr == fp->_IO_write_base + && fp->_IO_save_base == NULL) +#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +# if defined __SL64 && defined __SCLE /* Cygwin */ + if ((fp->_flags & __SL64) == 0) + { + /* Cygwin 1.5.0 through 1.5.24 failed to open stdin in 64-bit + mode; but has an fseeko that requires 64-bit mode. */ + FILE *tmp = fopen ("/dev/null", "r"); + if (!tmp) + return -1; + fp->_flags |= __SL64; + fp->_seek64 = tmp->_seek64; + fclose (tmp); + } +# endif + if (fp_->_p == fp_->_bf._base + && fp_->_r == 0 + && fp_->_w == ((fp_->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully buffered and not currently reading? */ + ? fp_->_bf._size + : 0) + && fp_ub._base == NULL) +#elif defined __EMX__ /* emx+gcc */ + if (fp->_ptr == fp->_buffer + && fp->_rcount == 0 + && fp->_wcount == 0 + && fp->_ungetc_count == 0) +#elif defined __minix /* Minix */ + if (fp_->_ptr == fp_->_buf + && (fp_->_ptr == NULL || fp_->_count == 0)) +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel, OpenVMS */ + if (fp_->_ptr == fp_->_base + && (fp_->_ptr == NULL || fp_->_cnt == 0)) +#elif defined __UCLIBC__ /* uClibc */ + if (((fp->__modeflags & __FLAG_WRITING) == 0 + || fp->__bufpos == fp->__bufstart) + && ((fp->__modeflags & (__FLAG_READONLY | __FLAG_READING)) == 0 + || fp->__bufpos == fp->__bufread)) +#elif defined __QNX__ /* QNX */ + if ((fp->_Mode & 0x2000 /* _MWRITE */ ? fp->_Next == fp->_Buf : fp->_Next == fp->_Rend) + && fp->_Rback == fp->_Back + sizeof (fp->_Back) + && fp->_Rsave == NULL) +#elif defined __MINT__ /* Atari FreeMiNT */ + if (fp->__bufp == fp->__buffer + && fp->__get_limit == fp->__bufp + && fp->__put_limit == fp->__bufp + && !fp->__pushed_back) +#elif defined EPLAN9 /* Plan9 */ + if (fp->rp == fp->buf + && fp->wp == fp->buf) +#elif FUNC_FFLUSH_STDIN < 0 && 200809 <= _POSIX_VERSION + /* Cross-compiling to some other system advertising conformance to + POSIX.1-2008 or later. Assume fseeko and fflush work as advertised. + If this assumption is incorrect, please report the bug to + bug-gnulib. */ + if (0) +#else + #error "Please port gnulib fseeko.c to your platform! Look at the code in fseeko.c, then report this to bug-gnulib." +#endif + { + /* We get here when an fflush() call immediately preceded this one (or + if ftell() has created buffers but no I/O has occurred on a + newly-opened stream). We know there are no buffers. */ + off_t pos = lseek (fileno (fp), offset, whence); + if (pos == -1) + { +#if defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ + fp_->_flags &= ~__SOFF; +#endif + return -1; + } + +#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 + /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_flags &= ~_IO_EOF_SEEN; + fp->_offset = pos; +#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ +# if defined __CYGWIN__ || (defined __NetBSD__ && __NetBSD_Version__ >= 600000000) || defined __minix + /* fp_->_offset is typed as an integer. */ + fp_->_offset = pos; +# else + /* fp_->_offset is an fpos_t. */ + { + /* Use a union, since on NetBSD, the compilation flags + determine whether fpos_t is typedef'd to off_t or a struct + containing a single off_t member. */ + union + { + fpos_t f; + off_t o; + } u; + u.o = pos; + fp_->_offset = u.f; + } +# endif + fp_->_flags |= __SOFF; + fp_->_flags &= ~__SEOF; +#elif defined __EMX__ /* emx+gcc */ + fp->_flags &= ~_IOEOF; +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel, OpenVMS */ + fp_->_flag &= ~_IOEOF; +#elif defined __MINT__ /* Atari FreeMiNT */ + fp->__offset = pos; + fp->__eof = 0; +#endif + return 0; + } + return fseeko (fp, offset, whence); +} diff --git a/devspec.en_US/project/recutils/lib/fseterr.c b/devspec.en_US/project/recutils/lib/fseterr.c new file mode 100755 index 0000000..8cd68e8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fseterr.c @@ -0,0 +1,84 @@ +/* Set the error indicator of a stream. + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include "fseterr.h" + +#include <errno.h> + +#include "stdio-impl.h" + +/* This file is not used on systems that have the __fseterr function, + namely musl libc. */ + +void +fseterr (FILE *fp) +{ + /* Most systems provide FILE as a struct and the necessary bitmask in + <stdio.h>, because they need it for implementing getc() and putc() as + fast macros. */ +#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 + /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_flags |= _IO_ERR_SEEN; +#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ + fp_->_flags |= __SERR; +#elif defined __EMX__ /* emx+gcc */ + fp->_flags |= _IOERR; +#elif defined __minix /* Minix */ + fp->_flags |= _IOERR; +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel, OpenVMS */ + fp_->_flag |= _IOERR; +#elif defined __UCLIBC__ /* uClibc */ + fp->__modeflags |= __FLAG_ERROR; +#elif defined __QNX__ /* QNX */ + fp->_Mode |= 0x200 /* _MERR */; +#elif defined __MINT__ /* Atari FreeMiNT */ + fp->__error = 1; +#elif defined EPLAN9 /* Plan9 */ + if (fp->state != 0 /* CLOSED */) + fp->state = 5 /* ERR */; +#elif 0 /* unknown */ + /* Portable fallback, based on an idea by Rich Felker. + Wow! 6 system calls for something that is just a bit operation! + Not activated on any system, because there is no way to repair FP when + the sequence of system calls fails, and library code should not call + abort(). */ + int saved_errno; + int fd; + int fd2; + + saved_errno = errno; + fflush (fp); + fd = fileno (fp); + fd2 = dup (fd); + if (fd2 >= 0) + { + close (fd); + fputc ('\0', fp); /* This should set the error indicator. */ + fflush (fp); /* Or this. */ + if (dup2 (fd2, fd) < 0) + /* Whee... we botched the stream and now cannot restore it! */ + abort (); + close (fd2); + } + errno = saved_errno; +#else + #error "Please port gnulib fseterr.c to your platform! Look at the definitions of ferror and clearerr on your system, then report this to bug-gnulib." +#endif +} diff --git a/devspec.en_US/project/recutils/lib/fseterr.h b/devspec.en_US/project/recutils/lib/fseterr.h new file mode 100755 index 0000000..7b57faa --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fseterr.h @@ -0,0 +1,45 @@ +/* Set the error indicator of a stream. + Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _FSETERR_H +#define _FSETERR_H + +#include <stdio.h> + +/* Set the error indicator of the stream FP. + The "error indicator" is set when an I/O operation on the stream fails, and + is cleared (together with the "end-of-file" indicator) by clearerr (FP). */ + +#if HAVE___FSETERR /* musl libc */ + +# include <stdio_ext.h> +# define fseterr(fp) __fseterr (fp) + +#else + +# ifdef __cplusplus +extern "C" { +# endif + +extern void fseterr (FILE *fp); + +# ifdef __cplusplus +} +# endif + +#endif + +#endif /* _FSETERR_H */ diff --git a/devspec.en_US/project/recutils/lib/fstat.c b/devspec.en_US/project/recutils/lib/fstat.c new file mode 100755 index 0000000..4f0e618 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fstat.c @@ -0,0 +1,90 @@ +/* fstat() replacement. + Copyright (C) 2011-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* If the user's config.h happens to include <sys/stat.h>, let it include only + the system's <sys/stat.h> here, so that orig_fstat doesn't recurse to + rpl_fstat. */ +#define __need_system_sys_stat_h +#include <config.h> + +/* Get the original definition of fstat. It might be defined as a macro. */ +#include <sys/types.h> +#include <sys/stat.h> +#undef __need_system_sys_stat_h + +#if defined _WIN32 && ! defined __CYGWIN__ +# define WINDOWS_NATIVE +#endif + +#if !defined WINDOWS_NATIVE + +static int +orig_fstat (int fd, struct stat *buf) +{ + return fstat (fd, buf); +} + +#endif + +/* Specification. */ +/* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc + eliminates this include because of the preliminary #include <sys/stat.h> + above. */ +#include "sys/stat.h" + +#include "stat-time.h" + +#include <errno.h> +#include <unistd.h> +#ifdef WINDOWS_NATIVE +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include <io.h> +# endif +# include "stat-w32.h" +#endif + +int +rpl_fstat (int fd, struct stat *buf) +{ +#if REPLACE_FCHDIR && REPLACE_OPEN_DIRECTORY + /* Handle the case when rpl_open() used a dummy file descriptor to work + around an open() that can't normally visit directories. */ + const char *name = _gl_directory_name (fd); + if (name != NULL) + return stat (name, buf); +#endif + +#ifdef WINDOWS_NATIVE + /* Fill the fields ourselves, because the original fstat function returns + values for st_atime, st_mtime, st_ctime that depend on the current time + zone. See + <https://lists.gnu.org/r/bug-gnulib/2017-04/msg00134.html> */ + HANDLE h = (HANDLE) _get_osfhandle (fd); + + if (h == INVALID_HANDLE_VALUE) + { + errno = EBADF; + return -1; + } + return _gl_fstat_by_handle (h, NULL, buf); +#else + return stat_time_normalize (orig_fstat (fd, buf), buf); +#endif +} diff --git a/devspec.en_US/project/recutils/lib/ftell.c b/devspec.en_US/project/recutils/lib/ftell.c new file mode 100755 index 0000000..fabaa35 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/ftell.c @@ -0,0 +1,37 @@ +/* An ftell() function that works around platform bugs. + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <stdio.h> + +#include <errno.h> +#include <limits.h> + +long +ftell (FILE *fp) +{ + /* Use the replacement ftello function with all its workarounds. */ + off_t offset = ftello (fp); + if (LONG_MIN <= offset && offset <= LONG_MAX) + return /* (long) */ offset; + else + { + errno = EOVERFLOW; + return -1; + } +} diff --git a/devspec.en_US/project/recutils/lib/ftello.c b/devspec.en_US/project/recutils/lib/ftello.c new file mode 100755 index 0000000..31fa046 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/ftello.c @@ -0,0 +1,85 @@ +/* An ftello() function that works around platform bugs. + Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <stdio.h> + +/* Get lseek. */ +#include <unistd.h> + +#include "stdio-impl.h" + +off_t +ftello (FILE *fp) +#undef ftello +#if !HAVE_FTELLO +# undef ftell +# define ftello ftell +#endif +#if _GL_WINDOWS_64_BIT_OFF_T +# undef ftello +# if HAVE__FTELLI64 /* msvc, mingw64 */ +# define ftello _ftelli64 +# else /* mingw */ +# define ftello ftello64 +# endif +#endif +{ +#if LSEEK_PIPE_BROKEN + /* mingw gives bogus answers rather than failure on non-seekable files. */ + if (lseek (fileno (fp), 0, SEEK_CUR) == -1) + return -1; +#endif + +#if FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE /* Solaris */ + /* The Solaris stdio leaves the _IOREAD flag set after reading from a file + reaches EOF and the program then starts writing to the file. ftello + gets confused by this. */ + if (fp_->_flag & _IOWRT) + { + off_t pos; + + /* Call ftello nevertheless, for the side effects that it does on fp. */ + ftello (fp); + + /* Compute the file position ourselves. */ + pos = lseek (fileno (fp), (off_t) 0, SEEK_CUR); + if (pos >= 0) + { + if ((fp_->_flag & _IONBF) == 0 && fp_->_base != NULL) + pos += fp_->_ptr - fp_->_base; + } + return pos; + } +#endif + +#if defined __SL64 && defined __SCLE /* Cygwin */ + if ((fp->_flags & __SL64) == 0) + { + /* Cygwin 1.5.0 through 1.5.24 failed to open stdin in 64-bit + mode; but has an ftello that requires 64-bit mode. */ + FILE *tmp = fopen ("/dev/null", "r"); + if (!tmp) + return -1; + fp->_flags |= __SL64; + fp->_seek64 = tmp->_seek64; + fclose (tmp); + } +#endif + return ftello (fp); +} diff --git a/devspec.en_US/project/recutils/lib/fwriting.c b/devspec.en_US/project/recutils/lib/fwriting.c new file mode 100755 index 0000000..1ac55f0 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fwriting.c @@ -0,0 +1,67 @@ +/* Retrieve information about a FILE stream. + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include "fwriting.h" + +#include "stdio-impl.h" + +/* This file is not used on systems that have the __fwritable function, + namely glibc >= 2.2, Solaris >= 7, Android API >= 29, musl libc. */ + +bool +fwriting (FILE *fp) +{ + /* Most systems provide FILE as a struct and the necessary bitmask in + <stdio.h>, because they need it for implementing getc() and putc() as + fast macros. */ +#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 + /* GNU libc, BeOS, Haiku, Linux libc5 */ + return (fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) != 0; +#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ + return (fp_->_flags & __SWR) != 0; +#elif defined __EMX__ /* emx+gcc */ + return (fp->_flags & _IOWRT) != 0; +#elif defined __minix /* Minix */ + return (fp->_flags & _IOWRITING) != 0; +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel, OpenVMS */ + return (fp_->_flag & _IOWRT) != 0; +#elif defined __UCLIBC__ /* uClibc */ + return (fp->__modeflags & __FLAG_WRITING) != 0; +#elif defined __QNX__ /* QNX */ + return ((fp->_Mode & 0x1 /* _MOPENR */) == 0 + || (fp->_Mode & 0x2000 /* _MWRITE */) != 0); +#elif defined __MINT__ /* Atari FreeMiNT */ + if (!fp->__mode.__read) + return 1; + if (!fp->__mode.__write) + return 0; +# ifdef _IO_CURRENTLY_PUTTING /* Flag added on 2009-02-28 */ + return (fp->__flags & _IO_CURRENTLY_PUTTING) != 0; +# else + return (fp->__buffer < fp->__put_limit /*|| fp->__bufp == fp->__get_limit ??*/); +# endif +#elif defined EPLAN9 /* Plan9 */ + if (fp->state == 0 /* CLOSED */ || fp->state == 3 /* RD */) + return 0; + return (fp->state == 4 /* WR */ && (fp->bufl == 0 || fp->wp < fp->rp)); +#else +# error "Please port gnulib fwriting.c to your platform!" +#endif +} diff --git a/devspec.en_US/project/recutils/lib/fwriting.h b/devspec.en_US/project/recutils/lib/fwriting.h new file mode 100755 index 0000000..6cf5fb4 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/fwriting.h @@ -0,0 +1,53 @@ +/* Retrieve information about a FILE stream. + Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <stdbool.h> +#include <stdio.h> + +/* Return true if the stream STREAM is opened write-only or + append-only, or if the last operation on the stream was a write + operation. Return false if the stream is opened read-only, or if + it supports reading and there is no current write operation (such + as fputc). + + freading and fwriting will never both be true. If STREAM supports + both reads and writes, then: + - both freading and fwriting might be false when the stream is first + opened, after read encounters EOF, or after fflush, + - freading might be false or true and fwriting might be false + after repositioning (such as fseek, fsetpos, or rewind), + depending on the underlying implementation. + + STREAM must not be wide-character oriented. */ + +#if HAVE___FWRITING /* glibc >= 2.2, Solaris >= 7, Android API >= 29, musl libc */ + +# include <stdio_ext.h> +# define fwriting(stream) (__fwriting (stream) != 0) + +#else + +# ifdef __cplusplus +extern "C" { +# endif + +extern bool fwriting (FILE *stream) _GL_ATTRIBUTE_PURE; + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/devspec.en_US/project/recutils/lib/get-permissions.c b/devspec.en_US/project/recutils/lib/get-permissions.c new file mode 100755 index 0000000..99b4664 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/get-permissions.c @@ -0,0 +1,291 @@ +/* Get permissions of a file. -*- coding: utf-8 -*- + + Copyright (C) 2002-2003, 2005-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + + Written by Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ + +#include <config.h> + +#include <string.h> +#include "acl.h" + +#include "acl-internal.h" + +/* Read the permissions of a file into CTX. If DESC is a valid file descriptor, + use file descriptor operations, else use filename based operations on NAME. + MODE is the file mode obtained from a previous stat call. + Return 0 if successful. Return -1 and set errno upon failure. */ + +int +get_permissions (const char *name, int desc, mode_t mode, + struct permission_context *ctx) +{ + memset (ctx, 0, sizeof *ctx); + ctx->mode = mode; + +#if USE_ACL && HAVE_ACL_GET_FILE + /* POSIX 1003.1e (draft 17 -- abandoned) specific version. */ + /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ +# if !HAVE_ACL_TYPE_EXTENDED + /* Linux, FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */ + + if (HAVE_ACL_GET_FD && desc != -1) + ctx->acl = acl_get_fd (desc); + else + ctx->acl = acl_get_file (name, ACL_TYPE_ACCESS); + if (ctx->acl == NULL) + return acl_errno_valid (errno) ? -1 : 0; + + /* With POSIX ACLs, a file cannot have "no" acl; a file without + extended permissions has a "minimal" acl which is equivalent to the + file mode. */ + + if (S_ISDIR (mode)) + { + ctx->default_acl = acl_get_file (name, ACL_TYPE_DEFAULT); + if (ctx->default_acl == NULL) + return -1; + } + +# if HAVE_ACL_TYPE_NFS4 /* FreeBSD */ + + /* TODO (see set_permissions). */ + +# endif + +# else /* HAVE_ACL_TYPE_EXTENDED */ + /* Mac OS X */ + + /* On Mac OS X, acl_get_file (name, ACL_TYPE_ACCESS) + and acl_get_file (name, ACL_TYPE_DEFAULT) + always return NULL / EINVAL. You have to use + acl_get_file (name, ACL_TYPE_EXTENDED) + or acl_get_fd (open (name, ...)) + to retrieve an ACL. + On the other hand, + acl_set_file (name, ACL_TYPE_ACCESS, acl) + and acl_set_file (name, ACL_TYPE_DEFAULT, acl) + have the same effect as + acl_set_file (name, ACL_TYPE_EXTENDED, acl): + Each of these calls sets the file's ACL. */ + + if (HAVE_ACL_GET_FD && desc != -1) + ctx->acl = acl_get_fd (desc); + else + ctx->acl = acl_get_file (name, ACL_TYPE_EXTENDED); + if (ctx->acl == NULL) + return acl_errno_valid (errno) ? -1 : 0; + +# endif + +#elif USE_ACL && defined GETACL /* Solaris, Cygwin, not HP-UX */ + + /* Solaris 2.5 through Solaris 10, Cygwin, and contemporaneous versions + of Unixware. The acl() call returns the access and default ACL both + at once. */ +# ifdef ACE_GETACL + /* Solaris also has a different variant of ACLs, used in ZFS and NFSv4 + file systems (whereas the other ones are used in UFS file systems). + There is an API + pathconf (name, _PC_ACL_ENABLED) + fpathconf (desc, _PC_ACL_ENABLED) + that allows us to determine which of the two kinds of ACLs is supported + for the given file. But some file systems may implement this call + incorrectly, so better not use it. + When fetching the source ACL, we simply fetch both ACL types. + When setting the destination ACL, we try either ACL types, assuming + that the kernel will translate the ACL from one form to the other. + (See in <http://docs.sun.com/app/docs/doc/819-2241/6n4huc7ia?l=en&a=view> + the description of ENOTSUP.) */ + for (;;) + { + int ret; + + if (desc != -1) + ret = facl (desc, ACE_GETACLCNT, 0, NULL); + else + ret = acl (name, ACE_GETACLCNT, 0, NULL); + if (ret < 0) + { + if (errno == ENOSYS || errno == EINVAL) + ret = 0; + else + return -1; + } + ctx->ace_count = ret; + + if (ctx->ace_count == 0) + break; + + ctx->ace_entries = (ace_t *) malloc (ctx->ace_count * sizeof (ace_t)); + if (ctx->ace_entries == NULL) + { + errno = ENOMEM; + return -1; + } + + if (desc != -1) + ret = facl (desc, ACE_GETACL, ctx->ace_count, ctx->ace_entries); + else + ret = acl (name, ACE_GETACL, ctx->ace_count, ctx->ace_entries); + if (ret < 0) + { + if (errno == ENOSYS || errno == EINVAL) + { + free (ctx->ace_entries); + ctx->ace_entries = NULL; + ctx->ace_count = 0; + break; + } + else + return -1; + } + if (ret <= ctx->ace_count) + { + ctx->ace_count = ret; + break; + } + /* Huh? The number of ACL entries has increased since the last call. + Repeat. */ + free (ctx->ace_entries); + ctx->ace_entries = NULL; + } +# endif + + for (;;) + { + int ret; + + if (desc != -1) + ret = facl (desc, GETACLCNT, 0, NULL); + else + ret = acl (name, GETACLCNT, 0, NULL); + if (ret < 0) + { + if (errno == ENOSYS || errno == ENOTSUP || errno == EOPNOTSUPP) + ret = 0; + else + return -1; + } + ctx->count = ret; + + if (ctx->count == 0) + break; + + ctx->entries = (aclent_t *) malloc (ctx->count * sizeof (aclent_t)); + if (ctx->entries == NULL) + { + errno = ENOMEM; + return -1; + } + + if (desc != -1) + ret = facl (desc, GETACL, ctx->count, ctx->entries); + else + ret = acl (name, GETACL, ctx->count, ctx->entries); + if (ret < 0) + { + if (errno == ENOSYS || errno == ENOTSUP || errno == EOPNOTSUPP) + { + free (ctx->entries); + ctx->entries = NULL; + ctx->count = 0; + break; + } + else + return -1; + } + if (ret <= ctx->count) + { + ctx->count = ret; + break; + } + /* Huh? The number of ACL entries has increased since the last call. + Repeat. */ + free (ctx->entries); + ctx->entries = NULL; + } + +#elif USE_ACL && HAVE_GETACL /* HP-UX */ + + { + int ret; + + if (desc != -1) + ret = fgetacl (desc, NACLENTRIES, ctx->entries); + else + ret = getacl (name, NACLENTRIES, ctx->entries); + if (ret < 0) + { + if (errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP) + ret = 0; + else + return -1; + } + else if (ret > NACLENTRIES) + /* If NACLENTRIES cannot be trusted, use dynamic memory allocation. */ + abort (); + ctx->count = ret; + +# if HAVE_ACLV_H + ret = acl ((char *) name, ACL_GET, NACLVENTRIES, ctx->aclv_entries); + if (ret < 0) + { + if (errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL) + ret = 0; + else + return -2; + } + else if (ret > NACLVENTRIES) + /* If NACLVENTRIES cannot be trusted, use dynamic memory allocation. */ + abort (); + ctx->aclv_count = ret; +# endif + } + +#elif USE_ACL && HAVE_ACLX_GET && ACL_AIX_WIP /* AIX */ + + /* TODO (see set_permissions). */ + +#elif USE_ACL && HAVE_STATACL /* older AIX */ + + { + int ret; + if (desc != -1) + ret = fstatacl (desc, STX_NORMAL, &ctx->u.a, sizeof ctx->u); + else + ret = statacl ((char *) name, STX_NORMAL, &ctx->u.a, sizeof ctx->u); + if (ret == 0) + ctx->have_u = true; + } + +#elif USE_ACL && HAVE_ACLSORT /* NonStop Kernel */ + + { + int ret = acl ((char *) name, ACL_GET, NACLENTRIES, ctx->entries); + if (ret < 0) + return -1; + else if (ret > NACLENTRIES) + /* If NACLENTRIES cannot be trusted, use dynamic memory allocation. */ + abort (); + ctx->count = ret; + } + +#endif + + return 0; + +} diff --git a/devspec.en_US/project/recutils/lib/getdelim.c b/devspec.en_US/project/recutils/lib/getdelim.c new file mode 100755 index 0000000..528678c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getdelim.c @@ -0,0 +1,147 @@ +/* getdelim.c --- Implementation of replacement getdelim function. + Copyright (C) 1994, 1996-1998, 2001, 2003, 2005-2019 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 3, or (at + your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Ported from glibc by Simon Josefsson. */ + +/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc + optimizes away the lineptr == NULL || n == NULL || fp == NULL tests below. */ +#define _GL_ARG_NONNULL(params) + +#include <config.h> + +#include <stdio.h> + +#include <limits.h> +#include <stdint.h> +#include <stdlib.h> +#include <errno.h> + +#ifndef SSIZE_MAX +# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) +#endif + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +# define getc_maybe_unlocked(fp) getc(fp) +#elif !HAVE_FLOCKFILE || !HAVE_FUNLOCKFILE || !HAVE_DECL_GETC_UNLOCKED +# undef flockfile +# undef funlockfile +# define flockfile(x) ((void) 0) +# define funlockfile(x) ((void) 0) +# define getc_maybe_unlocked(fp) getc(fp) +#else +# define getc_maybe_unlocked(fp) getc_unlocked(fp) +#endif + +static void +alloc_failed (void) +{ +#if defined _WIN32 && ! defined __CYGWIN__ + /* Avoid errno problem without using the realloc module; see: + https://lists.gnu.org/r/bug-gnulib/2016-08/msg00025.html */ + errno = ENOMEM; +#endif +} + +/* Read up to (and including) a DELIMITER from FP into *LINEPTR (and + NUL-terminate it). *LINEPTR is a pointer returned from malloc (or + NULL), pointing to *N characters of space. It is realloc'ed as + necessary. Returns the number of characters read (not including + the null terminator), or -1 on error or EOF. */ + +ssize_t +getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp) +{ + ssize_t result; + size_t cur_len = 0; + + if (lineptr == NULL || n == NULL || fp == NULL) + { + errno = EINVAL; + return -1; + } + + flockfile (fp); + + if (*lineptr == NULL || *n == 0) + { + char *new_lineptr; + *n = 120; + new_lineptr = (char *) realloc (*lineptr, *n); + if (new_lineptr == NULL) + { + alloc_failed (); + result = -1; + goto unlock_return; + } + *lineptr = new_lineptr; + } + + for (;;) + { + int i; + + i = getc_maybe_unlocked (fp); + if (i == EOF) + { + result = -1; + break; + } + + /* Make enough space for len+1 (for final NUL) bytes. */ + if (cur_len + 1 >= *n) + { + size_t needed_max = + SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX; + size_t needed = 2 * *n + 1; /* Be generous. */ + char *new_lineptr; + + if (needed_max < needed) + needed = needed_max; + if (cur_len + 1 >= needed) + { + result = -1; + errno = EOVERFLOW; + goto unlock_return; + } + + new_lineptr = (char *) realloc (*lineptr, needed); + if (new_lineptr == NULL) + { + alloc_failed (); + result = -1; + goto unlock_return; + } + + *lineptr = new_lineptr; + *n = needed; + } + + (*lineptr)[cur_len] = i; + cur_len++; + + if (i == delimiter) + break; + } + (*lineptr)[cur_len] = '\0'; + result = cur_len ? cur_len : result; + + unlock_return: + funlockfile (fp); /* doesn't set errno */ + + return result; +} diff --git a/devspec.en_US/project/recutils/lib/getdtablesize.c b/devspec.en_US/project/recutils/lib/getdtablesize.c new file mode 100755 index 0000000..03a9243 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getdtablesize.c @@ -0,0 +1,124 @@ +/* getdtablesize() function: Return maximum possible file descriptor value + 1. + Copyright (C) 2008-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <unistd.h> + +#if defined _WIN32 && ! defined __CYGWIN__ + +# include <stdio.h> + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +# endif + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +static int +_setmaxstdio_nothrow (int newmax) +{ + int result; + + TRY_MSVC_INVAL + { + result = _setmaxstdio (newmax); + } + CATCH_MSVC_INVAL + { + result = -1; + } + DONE_MSVC_INVAL; + + return result; +} +# else +# define _setmaxstdio_nothrow _setmaxstdio +# endif + +/* Cache for the previous getdtablesize () result. Safe to cache because + Windows also lacks setrlimit. */ +static int dtablesize; + +int +getdtablesize (void) +{ + if (dtablesize == 0) + { + /* We are looking for the number N such that the valid file descriptors + are 0..N-1. It can be obtained through a loop as follows: + { + int fd; + for (fd = 3; fd < 65536; fd++) + if (dup2 (0, fd) == -1) + break; + return fd; + } + On Windows XP, the result is 2048. + The drawback of this loop is that it allocates memory for a libc + internal array that is never freed. + + The number N can also be obtained as the upper bound for + _getmaxstdio (). _getmaxstdio () returns the maximum number of open + FILE objects. The sanity check in _setmaxstdio reveals the maximum + number of file descriptors. This too allocates memory, but it is + freed when we call _setmaxstdio with the original value. */ + int orig_max_stdio = _getmaxstdio (); + unsigned int bound; + for (bound = 0x10000; _setmaxstdio_nothrow (bound) < 0; bound = bound / 2) + ; + _setmaxstdio_nothrow (orig_max_stdio); + dtablesize = bound; + } + return dtablesize; +} + +#else + +# include <limits.h> +# include <sys/resource.h> + +# ifndef RLIM_SAVED_CUR +# define RLIM_SAVED_CUR RLIM_INFINITY +# endif +# ifndef RLIM_SAVED_MAX +# define RLIM_SAVED_MAX RLIM_INFINITY +# endif + +# ifdef __CYGWIN__ + /* Cygwin 1.7.25 auto-increases the RLIMIT_NOFILE soft limit until it + hits the compile-time constant hard limit of 3200. We might as + well just report the hard limit. */ +# define rlim_cur rlim_max +# endif + +int +getdtablesize (void) +{ + struct rlimit lim; + + if (getrlimit (RLIMIT_NOFILE, &lim) == 0 + && 0 <= lim.rlim_cur && lim.rlim_cur <= INT_MAX + && lim.rlim_cur != RLIM_INFINITY + && lim.rlim_cur != RLIM_SAVED_CUR + && lim.rlim_cur != RLIM_SAVED_MAX) + return lim.rlim_cur; + + return INT_MAX; +} + +#endif diff --git a/devspec.en_US/project/recutils/lib/getfilecon.c b/devspec.en_US/project/recutils/lib/getfilecon.c new file mode 100755 index 0000000..713896d --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getfilecon.c @@ -0,0 +1,87 @@ +/* wrap getfilecon, lgetfilecon, and fgetfilecon + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* written by Jim Meyering */ + +#include <config.h> + +#include <selinux/selinux.h> + +#include <sys/types.h> +#include <errno.h> +#include <string.h> + +/* FIXME: remove this once there is an errno-gnu module + that guarantees the definition of ENODATA. */ +#ifndef ENODATA +# define ENODATA ENOTSUP +#endif + +#undef getfilecon +#undef lgetfilecon +#undef fgetfilecon +int getfilecon (char const *file, security_context_t *con); +int lgetfilecon (char const *file, security_context_t *con); +int fgetfilecon (int fd, security_context_t *con); + +/* getfilecon, lgetfilecon, and fgetfilecon can all misbehave, be it + via an old version of libselinux where these would return 0 and set the + result context to NULL, or via a modern kernel+lib operating on a file + from a disk whose attributes were set by a kernel from around 2006. + In that latter case, the functions return a length of 10 for the + "unlabeled" context. Map both failures to a return value of -1, and + set errno to ENOTSUP in the first case, and ENODATA in the latter. */ + +static int +map_to_failure (int ret, security_context_t *con) +{ + if (ret == 0) + { + errno = ENOTSUP; + return -1; + } + + if (ret == 10 && strcmp (*con, "unlabeled") == 0) + { + freecon (*con); + *con = NULL; + errno = ENODATA; + return -1; + } + + return ret; +} + +int +rpl_getfilecon (char const *file, security_context_t *con) +{ + int ret = getfilecon (file, con); + return map_to_failure (ret, con); +} + +int +rpl_lgetfilecon (char const *file, security_context_t *con) +{ + int ret = lgetfilecon (file, con); + return map_to_failure (ret, con); +} + +int +rpl_fgetfilecon (int fd, security_context_t *con) +{ + int ret = fgetfilecon (fd, con); + return map_to_failure (ret, con); +} diff --git a/devspec.en_US/project/recutils/lib/getgroups.c b/devspec.en_US/project/recutils/lib/getgroups.c new file mode 100755 index 0000000..d8c77e9 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getgroups.c @@ -0,0 +1,131 @@ +/* provide consistent interface to getgroups for systems that don't allow N==0 + + Copyright (C) 1996, 1999, 2003, 2006-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* written by Jim Meyering */ + +#include <config.h> + +#include <unistd.h> + +#include <errno.h> +#include <stdlib.h> +#include <stdint.h> + +#if !HAVE_GETGROUPS + +/* Provide a stub that fails with ENOSYS, since there is no group + information available on mingw. */ +int +getgroups (int n _GL_UNUSED, GETGROUPS_T *groups _GL_UNUSED) +{ + errno = ENOSYS; + return -1; +} + +#else /* HAVE_GETGROUPS */ + +# undef getgroups +# ifndef GETGROUPS_ZERO_BUG +# define GETGROUPS_ZERO_BUG 0 +# endif + +/* On OS X 10.6 and later, use the usual getgroups, not the one + supplied when _DARWIN_C_SOURCE is defined. _DARWIN_C_SOURCE is + normally defined, since it means "conform to POSIX, but add + non-POSIX extensions even if that violates the POSIX namespace + rules", which is what we normally want. But with getgroups there + is an inconsistency, and _DARWIN_C_SOURCE means "change getgroups() + so that it no longer works right". The BUGS section of compat(5) + says that the behavior is dubious if you compile different sections + of a program with different _DARWIN_C_SOURCE settings, so fix only + the offending symbol. */ +# ifdef __APPLE__ +int posix_getgroups (int, gid_t []) __asm ("_getgroups"); +# define getgroups posix_getgroups +# endif + +/* On at least NeXTstep 3.2, getgroups (0, NULL) always fails. + On other systems, it returns the number of supplemental + groups for the process. This function handles that special case + and lets the system-provided function handle all others. However, + it can fail with ENOMEM if memory is tight. It is unspecified + whether the effective group id is included in the list. */ + +int +rpl_getgroups (int n, gid_t *group) +{ + int n_groups; + GETGROUPS_T *gbuf; + int saved_errno; + + if (n < 0) + { + errno = EINVAL; + return -1; + } + + if (n != 0 || !GETGROUPS_ZERO_BUG) + { + int result; + if (sizeof *group == sizeof *gbuf) + return getgroups (n, (GETGROUPS_T *) group); + + if (SIZE_MAX / sizeof *gbuf <= n) + { + errno = ENOMEM; + return -1; + } + gbuf = malloc (n * sizeof *gbuf); + if (!gbuf) + return -1; + result = getgroups (n, gbuf); + if (0 <= result) + { + n = result; + while (n--) + group[n] = gbuf[n]; + } + saved_errno = errno; + free (gbuf); + errno = saved_errno; + return result; + } + + n = 20; + while (1) + { + /* No need to worry about address arithmetic overflow here, + since the ancient systems that we're running on have low + limits on the number of secondary groups. */ + gbuf = malloc (n * sizeof *gbuf); + if (!gbuf) + return -1; + n_groups = getgroups (n, gbuf); + if (n_groups == -1 ? errno != EINVAL : n_groups < n) + break; + free (gbuf); + n *= 2; + } + + saved_errno = errno; + free (gbuf); + errno = saved_errno; + + return n_groups; +} + +#endif /* HAVE_GETGROUPS */ diff --git a/devspec.en_US/project/recutils/lib/getline.c b/devspec.en_US/project/recutils/lib/getline.c new file mode 100755 index 0000000..40882fb --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getline.c @@ -0,0 +1,27 @@ +/* getline.c --- Implementation of replacement getline function. + Copyright (C) 2005-2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 3, or (at + your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Simon Josefsson. */ + +#include <config.h> + +#include <stdio.h> + +ssize_t +getline (char **lineptr, size_t *n, FILE *stream) +{ + return getdelim (lineptr, n, '\n', stream); +} diff --git a/devspec.en_US/project/recutils/lib/getopt-cdefs.in.h b/devspec.en_US/project/recutils/lib/getopt-cdefs.in.h new file mode 100755 index 0000000..049145b --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getopt-cdefs.in.h @@ -0,0 +1,67 @@ +/* getopt-on-non-glibc compatibility macros. + Copyright (C) 1989-2019 Free Software Foundation, Inc. + This file is part of gnulib. + Unlike most of the getopt implementation, it is NOT shared + with the GNU C Library. + + This file is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This file is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with gnulib; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _GETOPT_CDEFS_H +#define _GETOPT_CDEFS_H 1 + +/* This header should not be used directly; include getopt.h or + unistd.h instead. It does not have a protective #error, because + the guard macro for getopt.h in gnulib is not fixed. */ + +/* getopt-core.h and getopt-ext.h are shared with GNU libc, and expect + a number of the internal macros supplied to GNU libc's headers by + sys/cdefs.h. Provide fallback definitions for all of them. */ +#if @HAVE_SYS_CDEFS_H@ +# include <sys/cdefs.h> +#endif + +#ifndef __BEGIN_DECLS +# ifdef __cplusplus +# define __BEGIN_DECLS extern "C" { +# else +# define __BEGIN_DECLS /* nothing */ +# endif +#endif +#ifndef __END_DECLS +# ifdef __cplusplus +# define __END_DECLS } +# else +# define __END_DECLS /* nothing */ +# endif +#endif + +#ifndef __GNUC_PREREQ +# if defined __GNUC__ && defined __GNUC_VERSION__ +# define __GNUC_PREREQ(maj, min) \ + ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) +# else +# define __GNUC_PREREQ(maj, min) 0 +# endif +#endif + +#ifndef __THROW +# if defined __cplusplus && __GNUC_PREREQ (2,8) +# define __THROW throw () +# else +# define __THROW +# endif +#endif + +#endif /* _GETOPT_CDEFS_H */ diff --git a/devspec.en_US/project/recutils/lib/getopt-core.h b/devspec.en_US/project/recutils/lib/getopt-core.h new file mode 100755 index 0000000..6360ad6 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getopt-core.h @@ -0,0 +1,96 @@ +/* Declarations for getopt (basic, portable features only). + Copyright (C) 1989-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library and is also part of gnulib. + Patches to this file should be submitted to both projects. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _GETOPT_CORE_H +#define _GETOPT_CORE_H 1 + +/* This header should not be used directly; include getopt.h or + unistd.h instead. Unlike most bits headers, it does not have + a protective #error, because the guard macro for getopt.h in + gnulib is not fixed. */ + +__BEGIN_DECLS + +/* For communication from 'getopt' to the caller. + When 'getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when 'ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +extern char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to 'getopt'. + + On entry to 'getopt', zero means this is the first call; initialize. + + When 'getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, 'optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +extern int optind; + +/* Callers store zero here to inhibit the error message 'getopt' prints + for unrecognized options. */ + +extern int opterr; + +/* Set to an option character which was unrecognized. */ + +extern int optopt; + +/* Get definitions and prototypes for functions to process the + arguments in ARGV (ARGC of them, minus the program name) for + options given in OPTS. + + Return the option character from OPTS just read. Return -1 when + there are no more options. For unrecognized options, or options + missing arguments, 'optopt' is set to the option letter, and '?' is + returned. + + The OPTS string is a list of characters which are recognized option + letters, optionally followed by colons, specifying that that letter + takes an argument, to be placed in 'optarg'. + + If a letter in OPTS is followed by two colons, its argument is + optional. This behavior is specific to the GNU 'getopt'. + + The argument '--' causes premature termination of argument + scanning, explicitly telling 'getopt' that there are no more + options. + + If OPTS begins with '-', then non-option arguments are treated as + arguments to the option '\1'. This behavior is specific to the GNU + 'getopt'. If OPTS begins with '+', or POSIXLY_CORRECT is set in + the environment, then do not permute arguments. + + For standards compliance, the 'argv' argument has the type + char *const *, but this is inaccurate; if argument permutation is + enabled, the argv array (not the strings it points to) must be + writable. */ + +extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) + __THROW _GL_ARG_NONNULL ((2, 3)); + +__END_DECLS + +#endif /* _GETOPT_CORE_H */ diff --git a/devspec.en_US/project/recutils/lib/getopt-ext.h b/devspec.en_US/project/recutils/lib/getopt-ext.h new file mode 100755 index 0000000..13cb007 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getopt-ext.h @@ -0,0 +1,77 @@ +/* Declarations for getopt (GNU extensions). + Copyright (C) 1989-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library and is also part of gnulib. + Patches to this file should be submitted to both projects. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _GETOPT_EXT_H +#define _GETOPT_EXT_H 1 + +/* This header should not be used directly; include getopt.h instead. + Unlike most bits headers, it does not have a protective #error, + because the guard macro for getopt.h in gnulib is not fixed. */ + +__BEGIN_DECLS + +/* Describe the long-named options requested by the application. + The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector + of 'struct option' terminated by an element containing a name which is + zero. + + The field 'has_arg' is: + no_argument (or 0) if the option does not take an argument, + required_argument (or 1) if the option requires an argument, + optional_argument (or 2) if the option takes an optional argument. + + If the field 'flag' is not NULL, it points to a variable that is set + to the value given in the field 'val' when the option is found, but + left unchanged if the option is not found. + + To have a long-named option do something other than set an 'int' to + a compiled-in constant, such as set a value from 'optarg', set the + option's 'flag' field to zero and its 'val' field to a nonzero + value (the equivalent single-letter option character, if there is + one). For long options that have a zero 'flag' field, 'getopt' + returns the contents of the 'val' field. */ + +struct option +{ + const char *name; + /* has_arg can't be an enum because some compilers complain about + type mismatches in all the code that assumes it is an int. */ + int has_arg; + int *flag; + int val; +}; + +/* Names for the values of the 'has_arg' field of 'struct option'. */ + +#define no_argument 0 +#define required_argument 1 +#define optional_argument 2 + +extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind) + __THROW _GL_ARG_NONNULL ((2, 3)); +extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind) + __THROW _GL_ARG_NONNULL ((2, 3)); + +__END_DECLS + +#endif /* _GETOPT_EXT_H */ diff --git a/devspec.en_US/project/recutils/lib/getopt-pfx-core.h b/devspec.en_US/project/recutils/lib/getopt-pfx-core.h new file mode 100755 index 0000000..8fac269 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getopt-pfx-core.h @@ -0,0 +1,59 @@ +/* getopt (basic, portable features) gnulib wrapper header. + Copyright (C) 1989-2019 Free Software Foundation, Inc. + This file is part of gnulib. + Unlike most of the getopt implementation, it is NOT shared + with the GNU C Library. + + This file is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This file is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with gnulib; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _GETOPT_PFX_CORE_H +#define _GETOPT_PFX_CORE_H 1 + +/* This header should not be used directly; include getopt.h or + unistd.h instead. It does not have a protective #error, because + the guard macro for getopt.h in gnulib is not fixed. */ + +/* Standalone applications should #define __GETOPT_PREFIX to an + identifier that prefixes the external functions and variables + defined in getopt-core.h and getopt-ext.h. Systematically + rename identifiers so that they do not collide with the system + functions and variables. Renaming avoids problems with some + compilers and linkers. */ +#ifdef __GETOPT_PREFIX +# ifndef __GETOPT_ID +# define __GETOPT_CONCAT(x, y) x ## y +# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) +# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) +# endif +# undef getopt +# undef optarg +# undef opterr +# undef optind +# undef optopt +# define getopt __GETOPT_ID (getopt) +# define optarg __GETOPT_ID (optarg) +# define opterr __GETOPT_ID (opterr) +# define optind __GETOPT_ID (optind) +# define optopt __GETOPT_ID (optopt) + +/* The system's getopt.h may have already included getopt-core.h to + declare the unprefixed identifiers. Undef _GETOPT_CORE_H so that + getopt-core.h declares them with prefixes. */ +# undef _GETOPT_CORE_H +#endif + +#include <getopt-core.h> + +#endif /* _GETOPT_PFX_CORE_H */ diff --git a/devspec.en_US/project/recutils/lib/getopt-pfx-ext.h b/devspec.en_US/project/recutils/lib/getopt-pfx-ext.h new file mode 100755 index 0000000..0e21aef --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getopt-pfx-ext.h @@ -0,0 +1,71 @@ +/* getopt (GNU extensions) gnulib wrapper header. + Copyright (C) 1989-2019 Free Software Foundation, Inc. + This file is part of gnulib. + Unlike most of the getopt implementation, it is NOT shared + with the GNU C Library. + + This file is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This file is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with gnulib; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _GETOPT_PFX_EXT_H +#define _GETOPT_PFX_EXT_H 1 + +/* This header should not be used directly; include getopt.h instead. + It does not have a protective #error, because the guard macro for + getopt.h in gnulib is not fixed. */ + +/* Standalone applications should #define __GETOPT_PREFIX to an + identifier that prefixes the external functions and variables + defined in getopt-core.h and getopt-ext.h. Systematically + rename identifiers so that they do not collide with the system + functions and variables. Renaming avoids problems with some + compilers and linkers. */ +#ifdef __GETOPT_PREFIX +# ifndef __GETOPT_ID +# define __GETOPT_CONCAT(x, y) x ## y +# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) +# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) +# endif +# undef getopt_long +# undef getopt_long_only +# undef option +# undef _getopt_internal +# define getopt_long __GETOPT_ID (getopt_long) +# define getopt_long_only __GETOPT_ID (getopt_long_only) +# define option __GETOPT_ID (option) +# define _getopt_internal __GETOPT_ID (getopt_internal) + +/* The system's getopt.h may have already included getopt-ext.h to + declare the unprefixed identifiers. Undef _GETOPT_EXT_H so that + getopt-ext.h declares them with prefixes. */ +# undef _GETOPT_EXT_H +#endif + +/* Standalone applications get correct prototypes for getopt_long and + getopt_long_only; they declare "char **argv". For backward + compatibility with old applications, if __GETOPT_PREFIX is not + defined, we supply GNU-libc-compatible, but incorrect, prototypes + using "char *const *argv". (GNU libc is stuck with the incorrect + prototypes, as they are baked into older versions of LSB.) */ +#ifndef __getopt_argv_const +# if defined __GETOPT_PREFIX +# define __getopt_argv_const /* empty */ +# else +# define __getopt_argv_const const +# endif +#endif + +#include <getopt-ext.h> + +#endif /* _GETOPT_PFX_EXT_H */ diff --git a/devspec.en_US/project/recutils/lib/getopt.c b/devspec.en_US/project/recutils/lib/getopt.c new file mode 100755 index 0000000..8ee075a --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getopt.c @@ -0,0 +1,811 @@ +/* Getopt for GNU. + Copyright (C) 1987-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library and is also part of gnulib. + Patches to this file should be submitted to both projects. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _LIBC +# include <config.h> +#endif + +#include "getopt.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#ifdef _LIBC +/* When used as part of glibc, error printing must be done differently + for standards compliance. getopt is not a cancellation point, so + it must not call functions that are, and it is specified by an + older standard than stdio locking, so it must not refer to + functions in the "user namespace" related to stdio locking. + Finally, it must use glibc's internal message translation so that + the messages are looked up in the proper text domain. */ +# include <libintl.h> +# define fprintf __fxprintf_nocancel +# define flockfile(fp) _IO_flockfile (fp) +# define funlockfile(fp) _IO_funlockfile (fp) +#else +# include "gettext.h" +# define _(msgid) gettext (msgid) +/* When used standalone, flockfile and funlockfile might not be + available. */ +# if (!defined _POSIX_THREAD_SAFE_FUNCTIONS \ + || (defined _WIN32 && ! defined __CYGWIN__)) +# define flockfile(fp) /* nop */ +# define funlockfile(fp) /* nop */ +# endif +/* When used standalone, do not attempt to use alloca. */ +# define __libc_use_alloca(size) 0 +# undef alloca +# define alloca(size) (abort (), (void *)0) +#endif + +/* This implementation of 'getopt' has three modes for handling + options interspersed with non-option arguments. It can stop + scanning for options at the first non-option argument encountered, + as POSIX specifies. It can continue scanning for options after the + first non-option argument, but permute 'argv' as it goes so that, + after 'getopt' is done, all the options precede all the non-option + arguments and 'optind' points to the first non-option argument. + Or, it can report non-option arguments as if they were arguments to + the option character '\x01'. + + The default behavior of 'getopt_long' is to permute the argument list. + When this implementation is used standalone, the default behavior of + 'getopt' is to stop at the first non-option argument, but when it is + used as part of GNU libc it also permutes the argument list. In both + cases, setting the environment variable POSIXLY_CORRECT to any value + disables permutation. + + If the first character of the OPTSTRING argument to 'getopt' or + 'getopt_long' is '+', both functions will stop at the first + non-option argument. If it is '-', both functions will report + non-option arguments as arguments to the option character '\x01'. */ + +#include "getopt_int.h" + +/* For communication from 'getopt' to the caller. + When 'getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when 'ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to 'getopt'. + + On entry to 'getopt', zero means this is the first call; initialize. + + When 'getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, 'optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +/* 1003.2 says this must be 1 before any call. */ +int optind = 1; + +/* Callers store zero here to inhibit the error message + for unrecognized options. */ + +int opterr = 1; + +/* Set to an option character which was unrecognized. + This must be initialized on some systems to avoid linking in the + system's own getopt implementation. */ + +int optopt = '?'; + +/* Keep a global copy of all internal members of getopt_data. */ + +static struct _getopt_data getopt_data; + +/* Exchange two adjacent subsequences of ARGV. + One subsequence is elements [first_nonopt,last_nonopt) + which contains all the non-options that have been skipped so far. + The other is elements [last_nonopt,optind), which contains all + the options processed since those non-options were skipped. + + 'first_nonopt' and 'last_nonopt' are relocated so that they describe + the new indices of the non-options in ARGV after they are moved. */ + +static void +exchange (char **argv, struct _getopt_data *d) +{ + int bottom = d->__first_nonopt; + int middle = d->__last_nonopt; + int top = d->optind; + char *tem; + + /* Exchange the shorter segment with the far end of the longer segment. + That puts the shorter segment into the right place. + It leaves the longer segment in the right place overall, + but it consists of two parts that need to be swapped next. */ + + while (top > middle && middle > bottom) + { + if (top - middle > middle - bottom) + { + /* Bottom segment is the short one. */ + int len = middle - bottom; + int i; + + /* Swap it with the top part of the top segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[top - (middle - bottom) + i]; + argv[top - (middle - bottom) + i] = tem; + } + /* Exclude the moved bottom segment from further swapping. */ + top -= len; + } + else + { + /* Top segment is the short one. */ + int len = top - middle; + int i; + + /* Swap it with the bottom part of the bottom segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[middle + i]; + argv[middle + i] = tem; + } + /* Exclude the moved top segment from further swapping. */ + bottom += len; + } + } + + /* Update records for the slots the non-options now occupy. */ + + d->__first_nonopt += (d->optind - d->__last_nonopt); + d->__last_nonopt = d->optind; +} + +/* Process the argument starting with d->__nextchar as a long option. + d->optind should *not* have been advanced over this argument. + + If the value returned is -1, it was not actually a long option, the + state is unchanged, and the argument should be processed as a set + of short options (this can only happen when long_only is true). + Otherwise, the option (and its argument, if any) have been consumed + and the return value is the value to return from _getopt_internal_r. */ +static int +process_long_option (int argc, char **argv, const char *optstring, + const struct option *longopts, int *longind, + int long_only, struct _getopt_data *d, + int print_errors, const char *prefix) +{ + char *nameend; + size_t namelen; + const struct option *p; + const struct option *pfound = NULL; + int n_options; + int option_index; + + for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + namelen = nameend - d->__nextchar; + + /* First look for an exact match, counting the options as a side + effect. */ + for (p = longopts, n_options = 0; p->name; p++, n_options++) + if (!strncmp (p->name, d->__nextchar, namelen) + && namelen == strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + option_index = n_options; + break; + } + + if (pfound == NULL) + { + /* Didn't find an exact match, so look for abbreviations. */ + unsigned char *ambig_set = NULL; + int ambig_malloced = 0; + int ambig_fallback = 0; + int indfound = -1; + + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, d->__nextchar, namelen)) + { + if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else if (long_only + || pfound->has_arg != p->has_arg + || pfound->flag != p->flag + || pfound->val != p->val) + { + /* Second or later nonexact match found. */ + if (!ambig_fallback) + { + if (!print_errors) + /* Don't waste effort tracking the ambig set if + we're not going to print it anyway. */ + ambig_fallback = 1; + else if (!ambig_set) + { + if (__libc_use_alloca (n_options)) + ambig_set = alloca (n_options); + else if ((ambig_set = malloc (n_options)) == NULL) + /* Fall back to simpler error message. */ + ambig_fallback = 1; + else + ambig_malloced = 1; + + if (ambig_set) + { + memset (ambig_set, 0, n_options); + ambig_set[indfound] = 1; + } + } + if (ambig_set) + ambig_set[option_index] = 1; + } + } + } + + if (ambig_set || ambig_fallback) + { + if (print_errors) + { + if (ambig_fallback) + fprintf (stderr, _("%s: option '%s%s' is ambiguous\n"), + argv[0], prefix, d->__nextchar); + else + { + flockfile (stderr); + fprintf (stderr, + _("%s: option '%s%s' is ambiguous; possibilities:"), + argv[0], prefix, d->__nextchar); + + for (option_index = 0; option_index < n_options; option_index++) + if (ambig_set[option_index]) + fprintf (stderr, " '%s%s'", + prefix, longopts[option_index].name); + + /* This must use 'fprintf' even though it's only + printing a single character, so that it goes through + __fxprintf_nocancel when compiled as part of glibc. */ + fprintf (stderr, "\n"); + funlockfile (stderr); + } + } + if (ambig_malloced) + free (ambig_set); + d->__nextchar += strlen (d->__nextchar); + d->optind++; + d->optopt = 0; + return '?'; + } + + option_index = indfound; + } + + if (pfound == NULL) + { + /* Can't find it as a long option. If this is not getopt_long_only, + or the option starts with '--' or is not a valid short option, + then it's an error. */ + if (!long_only || argv[d->optind][1] == '-' + || strchr (optstring, *d->__nextchar) == NULL) + { + if (print_errors) + fprintf (stderr, _("%s: unrecognized option '%s%s'\n"), + argv[0], prefix, d->__nextchar); + + d->__nextchar = NULL; + d->optind++; + d->optopt = 0; + return '?'; + } + + /* Otherwise interpret it as a short option. */ + return -1; + } + + /* We have found a matching long option. Consume it. */ + d->optind++; + d->__nextchar = NULL; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + d->optarg = nameend + 1; + else + { + if (print_errors) + fprintf (stderr, + _("%s: option '%s%s' doesn't allow an argument\n"), + argv[0], prefix, pfound->name); + + d->optopt = pfound->val; + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (d->optind < argc) + d->optarg = argv[d->optind++]; + else + { + if (print_errors) + fprintf (stderr, + _("%s: option '%s%s' requires an argument\n"), + argv[0], prefix, pfound->name); + + d->optopt = pfound->val; + return optstring[0] == ':' ? ':' : '?'; + } + } + + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; +} + +/* Initialize internal data upon the first call to getopt. */ + +static const char * +_getopt_initialize (int argc _GL_UNUSED, + char **argv _GL_UNUSED, const char *optstring, + struct _getopt_data *d, int posixly_correct) +{ + /* Start processing options with ARGV-element 1 (since ARGV-element 0 + is the program name); the sequence of previously skipped + non-option ARGV-elements is empty. */ + if (d->optind == 0) + d->optind = 1; + + d->__first_nonopt = d->__last_nonopt = d->optind; + d->__nextchar = NULL; + + /* Determine how to handle the ordering of options and nonoptions. */ + if (optstring[0] == '-') + { + d->__ordering = RETURN_IN_ORDER; + ++optstring; + } + else if (optstring[0] == '+') + { + d->__ordering = REQUIRE_ORDER; + ++optstring; + } + else if (posixly_correct || !!getenv ("POSIXLY_CORRECT")) + d->__ordering = REQUIRE_ORDER; + else + d->__ordering = PERMUTE; + + d->__initialized = 1; + return optstring; +} + +/* Scan elements of ARGV (whose length is ARGC) for option characters + given in OPTSTRING. + + If an element of ARGV starts with '-', and is not exactly "-" or "--", + then it is an option element. The characters of this element + (aside from the initial '-') are option characters. If 'getopt' + is called repeatedly, it returns successively each of the option characters + from each of the option elements. + + If 'getopt' finds another option character, it returns that character, + updating 'optind' and 'nextchar' so that the next call to 'getopt' can + resume the scan with the following option character or ARGV-element. + + If there are no more option characters, 'getopt' returns -1. + Then 'optind' is the index in ARGV of the first ARGV-element + that is not an option. (The ARGV-elements have been permuted + so that those that are not options now come last.) + + OPTSTRING is a string containing the legitimate option characters. + If an option character is seen that is not listed in OPTSTRING, + return '?' after printing an error message. If you set 'opterr' to + zero, the error message is suppressed but we still return '?'. + + If a char in OPTSTRING is followed by a colon, that means it wants an arg, + so the following text in the same ARGV-element, or the text of the following + ARGV-element, is returned in 'optarg'. Two colons mean an option that + wants an optional arg; if there is text in the current ARGV-element, + it is returned in 'optarg', otherwise 'optarg' is set to zero. + + If OPTSTRING starts with '-' or '+', it requests different methods of + handling the non-option ARGV-elements. + See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. + + Long-named options begin with '--' instead of '-'. + Their names may be abbreviated as long as the abbreviation is unique + or is an exact match for some defined option. If they have an + argument, it follows the option name in the same ARGV-element, separated + from the option name by a '=', or else the in next ARGV-element. + When 'getopt' finds a long-named option, it returns 0 if that option's + 'flag' field is nonzero, the value of the option's 'val' field + if the 'flag' field is zero. + + The elements of ARGV aren't really const, because we permute them. + But we pretend they're const in the prototype to be compatible + with other systems. + + LONGOPTS is a vector of 'struct option' terminated by an + element containing a name which is zero. + + LONGIND returns the index in LONGOPT of the long-named option found. + It is only valid when a long-named option has been found by the most + recent call. + + If LONG_ONLY is nonzero, '-' as well as '--' can introduce + long-named options. */ + +int +_getopt_internal_r (int argc, char **argv, const char *optstring, + const struct option *longopts, int *longind, + int long_only, struct _getopt_data *d, int posixly_correct) +{ + int print_errors = d->opterr; + + if (argc < 1) + return -1; + + d->optarg = NULL; + + if (d->optind == 0 || !d->__initialized) + optstring = _getopt_initialize (argc, argv, optstring, d, posixly_correct); + else if (optstring[0] == '-' || optstring[0] == '+') + optstring++; + + if (optstring[0] == ':') + print_errors = 0; + + /* Test whether ARGV[optind] points to a non-option argument. */ +#define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0') + + if (d->__nextchar == NULL || *d->__nextchar == '\0') + { + /* Advance to the next ARGV-element. */ + + /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been + moved back by the user (who may also have changed the arguments). */ + if (d->__last_nonopt > d->optind) + d->__last_nonopt = d->optind; + if (d->__first_nonopt > d->optind) + d->__first_nonopt = d->optind; + + if (d->__ordering == PERMUTE) + { + /* If we have just processed some options following some non-options, + exchange them so that the options come first. */ + + if (d->__first_nonopt != d->__last_nonopt + && d->__last_nonopt != d->optind) + exchange (argv, d); + else if (d->__last_nonopt != d->optind) + d->__first_nonopt = d->optind; + + /* Skip any additional non-options + and extend the range of non-options previously skipped. */ + + while (d->optind < argc && NONOPTION_P) + d->optind++; + d->__last_nonopt = d->optind; + } + + /* The special ARGV-element '--' means premature end of options. + Skip it like a null option, + then exchange with previous non-options as if it were an option, + then skip everything else like a non-option. */ + + if (d->optind != argc && !strcmp (argv[d->optind], "--")) + { + d->optind++; + + if (d->__first_nonopt != d->__last_nonopt + && d->__last_nonopt != d->optind) + exchange (argv, d); + else if (d->__first_nonopt == d->__last_nonopt) + d->__first_nonopt = d->optind; + d->__last_nonopt = argc; + + d->optind = argc; + } + + /* If we have done all the ARGV-elements, stop the scan + and back over any non-options that we skipped and permuted. */ + + if (d->optind == argc) + { + /* Set the next-arg-index to point at the non-options + that we previously skipped, so the caller will digest them. */ + if (d->__first_nonopt != d->__last_nonopt) + d->optind = d->__first_nonopt; + return -1; + } + + /* If we have come to a non-option and did not permute it, + either stop the scan or describe it to the caller and pass it by. */ + + if (NONOPTION_P) + { + if (d->__ordering == REQUIRE_ORDER) + return -1; + d->optarg = argv[d->optind++]; + return 1; + } + + /* We have found another option-ARGV-element. + Check whether it might be a long option. */ + if (longopts) + { + if (argv[d->optind][1] == '-') + { + /* "--foo" is always a long option. The special option + "--" was handled above. */ + d->__nextchar = argv[d->optind] + 2; + return process_long_option (argc, argv, optstring, longopts, + longind, long_only, d, + print_errors, "--"); + } + + /* If long_only and the ARGV-element has the form "-f", + where f is a valid short option, don't consider it an + abbreviated form of a long option that starts with f. + Otherwise there would be no way to give the -f short + option. + + On the other hand, if there's a long option "fubar" and + the ARGV-element is "-fu", do consider that an + abbreviation of the long option, just like "--fu", and + not "-f" with arg "u". + + This distinction seems to be the most useful approach. */ + if (long_only && (argv[d->optind][2] + || !strchr (optstring, argv[d->optind][1]))) + { + int code; + d->__nextchar = argv[d->optind] + 1; + code = process_long_option (argc, argv, optstring, longopts, + longind, long_only, d, + print_errors, "-"); + if (code != -1) + return code; + } + } + + /* It is not a long option. Skip the initial punctuation. */ + d->__nextchar = argv[d->optind] + 1; + } + + /* Look at and handle the next short option-character. */ + + { + char c = *d->__nextchar++; + const char *temp = strchr (optstring, c); + + /* Increment 'optind' when we start to process its last character. */ + if (*d->__nextchar == '\0') + ++d->optind; + + if (temp == NULL || c == ':' || c == ';') + { + if (print_errors) + fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0], c); + d->optopt = c; + return '?'; + } + + /* Convenience. Treat POSIX -W foo same as long option --foo */ + if (temp[0] == 'W' && temp[1] == ';' && longopts != NULL) + { + /* This is an option that requires an argument. */ + if (*d->__nextchar != '\0') + d->optarg = d->__nextchar; + else if (d->optind == argc) + { + if (print_errors) + fprintf (stderr, + _("%s: option requires an argument -- '%c'\n"), + argv[0], c); + + d->optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + return c; + } + else + d->optarg = argv[d->optind]; + + d->__nextchar = d->optarg; + d->optarg = NULL; + return process_long_option (argc, argv, optstring, longopts, longind, + 0 /* long_only */, d, print_errors, "-W "); + } + if (temp[1] == ':') + { + if (temp[2] == ':') + { + /* This is an option that accepts an argument optionally. */ + if (*d->__nextchar != '\0') + { + d->optarg = d->__nextchar; + d->optind++; + } + else + d->optarg = NULL; + d->__nextchar = NULL; + } + else + { + /* This is an option that requires an argument. */ + if (*d->__nextchar != '\0') + { + d->optarg = d->__nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + d->optind++; + } + else if (d->optind == argc) + { + if (print_errors) + fprintf (stderr, + _("%s: option requires an argument -- '%c'\n"), + argv[0], c); + + d->optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + } + else + /* We already incremented 'optind' once; + increment it again when taking next ARGV-elt as argument. */ + d->optarg = argv[d->optind++]; + d->__nextchar = NULL; + } + } + return c; + } +} + +int +_getopt_internal (int argc, char **argv, const char *optstring, + const struct option *longopts, int *longind, int long_only, + int posixly_correct) +{ + int result; + + getopt_data.optind = optind; + getopt_data.opterr = opterr; + + result = _getopt_internal_r (argc, argv, optstring, longopts, + longind, long_only, &getopt_data, + posixly_correct); + + optind = getopt_data.optind; + optarg = getopt_data.optarg; + optopt = getopt_data.optopt; + + return result; +} + +/* glibc gets a LSB-compliant getopt and a POSIX-complaint __posix_getopt. + Standalone applications just get a POSIX-compliant getopt. + POSIX and LSB both require these functions to take 'char *const *argv' + even though this is incorrect (because of the permutation). */ +#define GETOPT_ENTRY(NAME, POSIXLY_CORRECT) \ + int \ + NAME (int argc, char *const *argv, const char *optstring) \ + { \ + return _getopt_internal (argc, (char **)argv, optstring, \ + 0, 0, 0, POSIXLY_CORRECT); \ + } + +#ifdef _LIBC +GETOPT_ENTRY(getopt, 0) +GETOPT_ENTRY(__posix_getopt, 1) +#else +GETOPT_ENTRY(getopt, 1) +#endif + + +#ifdef TEST + +/* Compile with -DTEST to make an executable for use in testing + the above definition of 'getopt'. */ + +int +main (int argc, char **argv) +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + + c = getopt (argc, argv, "abc:d:0123456789"); + if (c == -1) + break; + + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value '%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/devspec.en_US/project/recutils/lib/getopt.in.h b/devspec.en_US/project/recutils/lib/getopt.in.h new file mode 100755 index 0000000..c77f34c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getopt.in.h @@ -0,0 +1,61 @@ +/* Declarations for getopt. + Copyright (C) 1989-2019 Free Software Foundation, Inc. + This file is part of gnulib. + Unlike most of the getopt implementation, it is NOT shared + with the GNU C Library, which supplies a different version of + this file. + + This file is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + This file is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with gnulib; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _@GUARD_PREFIX@_GETOPT_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. We must + also inform the replacement unistd.h to not recursively use + <getopt.h>; our definitions will be present soon enough. */ +#if @HAVE_GETOPT_H@ +# define _GL_SYSTEM_GETOPT +# @INCLUDE_NEXT@ @NEXT_GETOPT_H@ +# undef _GL_SYSTEM_GETOPT +#endif + +#define _@GUARD_PREFIX@_GETOPT_H 1 + +/* Standalone applications should #define __GETOPT_PREFIX to an + identifier that prefixes the external functions and variables + defined in getopt-core.h and getopt-ext.h. When this happens, + include the headers that might declare getopt so that they will not + cause confusion if included after this file (if the system had + <getopt.h>, we have already included it). */ +#if defined __GETOPT_PREFIX +# if !@HAVE_GETOPT_H@ +# define __need_system_stdlib_h +# include <stdlib.h> +# undef __need_system_stdlib_h +# include <stdio.h> +# include <unistd.h> +# endif +#endif + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +#include <getopt-cdefs.h> +#include <getopt-pfx-core.h> +#include <getopt-pfx-ext.h> + +#endif /* _@GUARD_PREFIX@_GETOPT_H */ diff --git a/devspec.en_US/project/recutils/lib/getopt1.c b/devspec.en_US/project/recutils/lib/getopt1.c new file mode 100755 index 0000000..883aa6b --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getopt1.c @@ -0,0 +1,159 @@ +/* getopt_long and getopt_long_only entry points for GNU getopt. + Copyright (C) 1987-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library and is also part of gnulib. + Patches to this file should be submitted to both projects. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _LIBC +# include <config.h> +#endif + +#include "getopt.h" +#include "getopt_int.h" + +int +getopt_long (int argc, char *__getopt_argv_const *argv, const char *options, + const struct option *long_options, int *opt_index) +{ + return _getopt_internal (argc, (char **) argv, options, long_options, + opt_index, 0, 0); +} + +int +_getopt_long_r (int argc, char **argv, const char *options, + const struct option *long_options, int *opt_index, + struct _getopt_data *d) +{ + return _getopt_internal_r (argc, argv, options, long_options, opt_index, + 0, d, 0); +} + +/* Like getopt_long, but '-' as well as '--' can indicate a long option. + If an option that starts with '-' (not '--') doesn't match a long option, + but does match a short option, it is parsed as a short option + instead. */ + +int +getopt_long_only (int argc, char *__getopt_argv_const *argv, + const char *options, + const struct option *long_options, int *opt_index) +{ + return _getopt_internal (argc, (char **) argv, options, long_options, + opt_index, 1, 0); +} + +int +_getopt_long_only_r (int argc, char **argv, const char *options, + const struct option *long_options, int *opt_index, + struct _getopt_data *d) +{ + return _getopt_internal_r (argc, argv, options, long_options, opt_index, + 1, d, 0); +} + + +#ifdef TEST + +#include <stdio.h> +#include <stdlib.h> + +int +main (int argc, char **argv) +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + int option_index = 0; + static const struct option long_options[] = + { + {"add", 1, 0, 0}, + {"append", 0, 0, 0}, + {"delete", 1, 0, 0}, + {"verbose", 0, 0, 0}, + {"create", 0, 0, 0}, + {"file", 1, 0, 0}, + {0, 0, 0, 0} + }; + + c = getopt_long (argc, argv, "abc:d:0123456789", + long_options, &option_index); + if (c == -1) + break; + + switch (c) + { + case 0: + printf ("option %s", long_options[option_index].name); + if (optarg) + printf (" with arg %s", optarg); + printf ("\n"); + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value '%s'\n", optarg); + break; + + case 'd': + printf ("option d with value '%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/devspec.en_US/project/recutils/lib/getopt_int.h b/devspec.en_US/project/recutils/lib/getopt_int.h new file mode 100755 index 0000000..e63706f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getopt_int.h @@ -0,0 +1,118 @@ +/* Internal declarations for getopt. + Copyright (C) 1989-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library and is also part of gnulib. + Patches to this file should be submitted to both projects. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _GETOPT_INT_H +#define _GETOPT_INT_H 1 + +#include <getopt.h> + +extern int _getopt_internal (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + int __long_only, int __posixly_correct); + + +/* Reentrant versions which can handle parsing multiple argument + vectors at the same time. */ + +/* Describe how to deal with options that follow non-option ARGV-elements. + + REQUIRE_ORDER means don't recognize them as options; stop option + processing when the first non-option is seen. This is what POSIX + specifies should happen. + + PERMUTE means permute the contents of ARGV as we scan, so that + eventually all the non-options are at the end. This allows options + to be given in any order, even with programs that were not written + to expect this. + + RETURN_IN_ORDER is an option available to programs that were + written to expect options and other ARGV-elements in any order + and that care about the ordering of the two. We describe each + non-option ARGV-element as if it were the argument of an option + with character code 1. + + The special argument '--' forces an end of option-scanning regardless + of the value of 'ordering'. In the case of RETURN_IN_ORDER, only + '--' can cause 'getopt' to return -1 with 'optind' != ARGC. */ + +enum __ord + { + REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER + }; + +/* Data type for reentrant functions. */ +struct _getopt_data +{ + /* These have exactly the same meaning as the corresponding global + variables, except that they are used for the reentrant + versions of getopt. */ + int optind; + int opterr; + int optopt; + char *optarg; + + /* Internal members. */ + + /* True if the internal members have been initialized. */ + int __initialized; + + /* The next char to be scanned in the option-element + in which the last option character we returned was found. + This allows us to pick up the scan where we left off. + + If this is zero, or a null string, it means resume the scan + by advancing to the next ARGV-element. */ + char *__nextchar; + + /* See __ord above. */ + enum __ord __ordering; + + /* Handle permutation of arguments. */ + + /* Describe the part of ARGV that contains non-options that have + been skipped. 'first_nonopt' is the index in ARGV of the first + of them; 'last_nonopt' is the index after the last of them. */ + + int __first_nonopt; + int __last_nonopt; +}; + +/* The initializer is necessary to set OPTIND and OPTERR to their + default values and to clear the initialization flag. */ +#define _GETOPT_DATA_INITIALIZER { 1, 1 } + +extern int _getopt_internal_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + int __long_only, struct _getopt_data *__data, + int __posixly_correct); + +extern int _getopt_long_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + struct _getopt_data *__data); + +extern int _getopt_long_only_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, + int *__longind, + struct _getopt_data *__data); + +#endif /* getopt_int.h */ diff --git a/devspec.en_US/project/recutils/lib/getpass.c b/devspec.en_US/project/recutils/lib/getpass.c new file mode 100755 index 0000000..4bd5bfe --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getpass.c @@ -0,0 +1,231 @@ +/* Copyright (C) 1992-2001, 2003-2007, 2009-2019 Free Software Foundation, Inc. + + This file is part of the GNU C Library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _LIBC +# include <config.h> +#endif + +#include "getpass.h" + +#include <stdio.h> + +#if !(defined _WIN32 && !defined __CYGWIN__) + +# include <stdbool.h> + +# if HAVE_DECL___FSETLOCKING && HAVE___FSETLOCKING +# if HAVE_STDIO_EXT_H +# include <stdio_ext.h> +# endif +# else +# define __fsetlocking(stream, type) /* empty */ +# endif + +# if HAVE_TERMIOS_H +# include <termios.h> +# endif + +# if USE_UNLOCKED_IO +# include "unlocked-io.h" +# else +# if !HAVE_DECL_FFLUSH_UNLOCKED +# undef fflush_unlocked +# define fflush_unlocked(x) fflush (x) +# endif +# if !HAVE_DECL_FLOCKFILE +# undef flockfile +# define flockfile(x) ((void) 0) +# endif +# if !HAVE_DECL_FUNLOCKFILE +# undef funlockfile +# define funlockfile(x) ((void) 0) +# endif +# if !HAVE_DECL_FPUTS_UNLOCKED +# undef fputs_unlocked +# define fputs_unlocked(str,stream) fputs (str, stream) +# endif +# if !HAVE_DECL_PUTC_UNLOCKED +# undef putc_unlocked +# define putc_unlocked(c,stream) putc (c, stream) +# endif +# endif + +/* It is desirable to use this bit on systems that have it. + The only bit of terminal state we want to twiddle is echoing, which is + done in software; there is no need to change the state of the terminal + hardware. */ + +# ifndef TCSASOFT +# define TCSASOFT 0 +# endif + +static void +call_fclose (void *arg) +{ + if (arg != NULL) + fclose (arg); +} + +char * +getpass (const char *prompt) +{ + FILE *tty; + FILE *in, *out; +# if HAVE_TCGETATTR + struct termios s, t; +# endif + bool tty_changed = false; + static char *buf; + static size_t bufsize; + ssize_t nread; + + /* Try to write to and read from the terminal if we can. + If we can't open the terminal, use stderr and stdin. */ + + tty = fopen ("/dev/tty", "w+"); + if (tty == NULL) + { + in = stdin; + out = stderr; + } + else + { + /* We do the locking ourselves. */ + __fsetlocking (tty, FSETLOCKING_BYCALLER); + + out = in = tty; + } + + flockfile (out); + + /* Turn echoing off if it is on now. */ +# if HAVE_TCGETATTR + if (tcgetattr (fileno (in), &t) == 0) + { + /* Save the old one. */ + s = t; + /* Tricky, tricky. */ + t.c_lflag &= ~(ECHO | ISIG); + tty_changed = (tcsetattr (fileno (in), TCSAFLUSH | TCSASOFT, &t) == 0); + } +# endif + + /* Write the prompt. */ + fputs_unlocked (prompt, out); + fflush_unlocked (out); + + /* Read the password. */ + nread = getline (&buf, &bufsize, in); + + /* According to the C standard, input may not be followed by output + on the same stream without an intervening call to a file + positioning function. Suppose in == out; then without this fseek + call, on Solaris, HP-UX, AIX, OSF/1, the previous input gets + echoed, whereas on IRIX, the following newline is not output as + it should be. POSIX imposes similar restrictions if fileno (in) + == fileno (out). The POSIX restrictions are tricky and change + from POSIX version to POSIX version, so play it safe and invoke + fseek even if in != out. */ + fseeko (out, 0, SEEK_CUR); + + if (buf != NULL) + { + if (nread < 0) + buf[0] = '\0'; + else if (buf[nread - 1] == '\n') + { + /* Remove the newline. */ + buf[nread - 1] = '\0'; + if (tty_changed) + { + /* Write the newline that was not echoed. */ + putc_unlocked ('\n', out); + } + } + } + + /* Restore the original setting. */ +# if HAVE_TCSETATTR + if (tty_changed) + tcsetattr (fileno (in), TCSAFLUSH | TCSASOFT, &s); +# endif + + funlockfile (out); + + call_fclose (tty); + + return buf; +} + +#else /* W32 native */ + +/* Windows implementation by Martin Lambers <marlam@marlam.de>, + improved by Simon Josefsson. */ + +/* For PASS_MAX. */ +# include <limits.h> +/* For _getch(). */ +# include <conio.h> +/* For strdup(). */ +# include <string.h> + +# ifndef PASS_MAX +# define PASS_MAX 512 +# endif + +char * +getpass (const char *prompt) +{ + char getpassbuf[PASS_MAX + 1]; + size_t i = 0; + int c; + + if (prompt) + { + fputs (prompt, stderr); + fflush (stderr); + } + + for (;;) + { + c = _getch (); + if (c == '\r') + { + getpassbuf[i] = '\0'; + break; + } + else if (i < PASS_MAX) + { + getpassbuf[i++] = c; + } + + if (i >= PASS_MAX) + { + getpassbuf[i] = '\0'; + break; + } + } + + if (prompt) + { + fputs ("\r\n", stderr); + fflush (stderr); + } + + return strdup (getpassbuf); +} +#endif diff --git a/devspec.en_US/project/recutils/lib/getpass.h b/devspec.en_US/project/recutils/lib/getpass.h new file mode 100755 index 0000000..3daa1b6 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getpass.h @@ -0,0 +1,4 @@ +/* Obsolete; consider using unistd.h instead. */ + +/* Get getpass declaration, if available. */ +#include <unistd.h> diff --git a/devspec.en_US/project/recutils/lib/getprogname.c b/devspec.en_US/project/recutils/lib/getprogname.c new file mode 100755 index 0000000..96fa759 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getprogname.c @@ -0,0 +1,255 @@ +/* Program name management. + Copyright (C) 2016-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include "getprogname.h" + +#include <errno.h> /* get program_invocation_name declaration */ +#include <stdlib.h> /* get __argv declaration */ + +#ifdef _AIX +# include <unistd.h> +# include <procinfo.h> +# include <string.h> +#endif + +#ifdef __MVS__ +# ifndef _OPEN_SYS +# define _OPEN_SYS +# endif +# include <string.h> +# include <sys/ps.h> +#endif + +#ifdef __hpux +# include <unistd.h> +# include <sys/param.h> +# include <sys/pstat.h> +# include <string.h> +#endif + +#ifdef __sgi +# include <string.h> +# include <unistd.h> +# include <stdio.h> +# include <fcntl.h> +# include <sys/procfs.h> +#endif + +#include "dirname.h" + +#ifndef HAVE_GETPROGNAME /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Cygwin */ +char const * +getprogname (void) +{ +# if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* glibc, BeOS */ + /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ + return program_invocation_short_name; +# elif HAVE_DECL_PROGRAM_INVOCATION_NAME /* glibc, BeOS */ + /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ + return last_component (program_invocation_name); +# elif HAVE_GETEXECNAME /* Solaris */ + /* https://docs.oracle.com/cd/E19253-01/816-5168/6mbb3hrb1/index.html */ + const char *p = getexecname (); + if (!p) + p = "?"; + return last_component (p); +# elif HAVE_DECL___ARGV /* mingw, MSVC */ + /* https://msdn.microsoft.com/en-us/library/dn727674.aspx */ + const char *p = __argv && __argv[0] ? __argv[0] : "?"; + return last_component (p); +# elif HAVE_VAR___PROGNAME /* OpenBSD, QNX */ + /* https://man.openbsd.org/style.9 */ + /* http://www.qnx.de/developers/docs/6.5.0/index.jsp?topic=%2Fcom.qnx.doc.neutrino_lib_ref%2Fp%2F__progname.html */ + /* Be careful to declare this only when we absolutely need it + (OpenBSD 5.1), rather than when it's available. Otherwise, + its mere declaration makes program_invocation_short_name + malfunction (have zero length) with Fedora 25's glibc. */ + extern char *__progname; + const char *p = __progname; + return p && p[0] ? p : "?"; +# elif _AIX /* AIX */ + /* Idea by Bastien ROUCARIÈS, + https://lists.gnu.org/r/bug-gnulib/2010-12/msg00095.html + Reference: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_61/com.ibm.aix.basetrf1/getprocs.htm + */ + static char *p; + static int first = 1; + if (first) + { + first = 0; + pid_t pid = getpid (); + struct procentry64 procs; + p = (0 < getprocs64 (&procs, sizeof procs, NULL, 0, &pid, 1) + ? strdup (procs.pi_comm) + : NULL); + if (!p) + p = "?"; + } + return p; +# elif defined __hpux + static char *p; + static int first = 1; + if (first) + { + first = 0; + pid_t pid = getpid (); + struct pst_status status; + if (pstat_getproc (&status, sizeof status, 0, pid) > 0) + { + char *ucomm = status.pst_ucomm; + char *cmd = status.pst_cmd; + if (strlen (ucomm) < PST_UCOMMLEN - 1) + p = ucomm; + else + { + /* ucomm is truncated to length PST_UCOMMLEN - 1. + Look at cmd instead. */ + char *space = strchr (cmd, ' '); + if (space != NULL) + *space = '\0'; + p = strrchr (cmd, '/'); + if (p != NULL) + p++; + else + p = cmd; + if (strlen (p) > PST_UCOMMLEN - 1 + && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) + /* p is less truncated than ucomm. */ + ; + else + p = ucomm; + } + p = strdup (p); + } + else + { +# if !defined __LP64__ + /* Support for 32-bit programs running in 64-bit HP-UX. + The documented way to do this is to use the same source code + as above, but in a compilation unit where '#define _PSTAT64 1' + is in effect. I prefer a single compilation unit; the struct + size and the offsets are not going to change. */ + char status64[1216]; + if (__pstat_getproc64 (status64, sizeof status64, 0, pid) > 0) + { + char *ucomm = status64 + 288; + char *cmd = status64 + 168; + if (strlen (ucomm) < PST_UCOMMLEN - 1) + p = ucomm; + else + { + /* ucomm is truncated to length PST_UCOMMLEN - 1. + Look at cmd instead. */ + char *space = strchr (cmd, ' '); + if (space != NULL) + *space = '\0'; + p = strrchr (cmd, '/'); + if (p != NULL) + p++; + else + p = cmd; + if (strlen (p) > PST_UCOMMLEN - 1 + && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) + /* p is less truncated than ucomm. */ + ; + else + p = ucomm; + } + p = strdup (p); + } + else +# endif + p = NULL; + } + if (!p) + p = "?"; + } + return p; +# elif __MVS__ /* z/OS */ + /* https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxbd00/rtwgetp.htm */ + static char *p = "?"; + static int first = 1; + if (first) + { + pid_t pid = getpid (); + int token; + W_PSPROC buf; + first = 0; + memset (&buf, 0, sizeof(buf)); + buf.ps_cmdptr = (char *) malloc (buf.ps_cmdlen = PS_CMDBLEN_LONG); + buf.ps_conttyptr = (char *) malloc (buf.ps_conttylen = PS_CONTTYBLEN); + buf.ps_pathptr = (char *) malloc (buf.ps_pathlen = PS_PATHBLEN); + if (buf.ps_cmdptr && buf.ps_conttyptr && buf.ps_pathptr) + { + for (token = 0; token >= 0; + token = w_getpsent (token, &buf, sizeof(buf))) + { + if (token > 0 && buf.ps_pid == pid) + { + char *s = strdup (last_component (buf.ps_pathptr)); + if (s) + p = s; + break; + } + } + } + free (buf.ps_cmdptr); + free (buf.ps_conttyptr); + free (buf.ps_pathptr); + } + return p; +# elif defined __sgi /* IRIX */ + char filename[50]; + int fd; + + sprintf (filename, "/proc/pinfo/%d", (int) getpid ()); + fd = open (filename, O_RDONLY); + if (0 <= fd) + { + prpsinfo_t buf; + int ioctl_ok = 0 <= ioctl (fd, PIOCPSINFO, &buf); + close (fd); + if (ioctl_ok) + { + char *name = buf.pr_fname; + size_t namesize = sizeof buf.pr_fname; + char *namenul = memchr (name, '\0', namesize); + size_t namelen = namenul ? namenul - name : namesize; + char *namecopy = malloc (namelen + 1); + if (namecopy) + { + namecopy[namelen] = 0; + return memcpy (namecopy, name, namelen); + } + } + } + return NULL; +# else +# error "getprogname module not ported to this OS" +# endif +} + +#endif + +/* + * Hey Emacs! + * Local Variables: + * coding: utf-8 + * End: + */ diff --git a/devspec.en_US/project/recutils/lib/getprogname.h b/devspec.en_US/project/recutils/lib/getprogname.h new file mode 100755 index 0000000..1590b38 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/getprogname.h @@ -0,0 +1,40 @@ +/* Program name management. + Copyright (C) 2016-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_GETPROGNAME_H +#define _GL_GETPROGNAME_H + +#include <stdlib.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* Return the base name of the executing program. + On native Windows this will usually end in ".exe" or ".EXE". */ +#ifndef HAVE_GETPROGNAME +extern char const *getprogname (void) +# ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME + _GL_ATTRIBUTE_PURE +# endif + ; +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/devspec.en_US/project/recutils/lib/gettext.h b/devspec.en_US/project/recutils/lib/gettext.h new file mode 100755 index 0000000..89f53d9 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/gettext.h @@ -0,0 +1,294 @@ +/* Convenience header for conditional use of GNU <libintl.h>. + Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2019 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _LIBGETTEXT_H +#define _LIBGETTEXT_H 1 + +/* NLS can be disabled through the configure --disable-nls option + or through "#define ENABLE NLS 0" before including this file. */ +#if defined ENABLE_NLS && ENABLE_NLS + +/* Get declarations of GNU message catalog functions. */ +# include <libintl.h> + +/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by + the gettext() and ngettext() macros. This is an alternative to calling + textdomain(), and is useful for libraries. */ +# ifdef DEFAULT_TEXT_DOMAIN +# undef gettext +# define gettext(Msgid) \ + dgettext (DEFAULT_TEXT_DOMAIN, Msgid) +# undef ngettext +# define ngettext(Msgid1, Msgid2, N) \ + dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) +# endif + +#else + +/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which + chokes if dcgettext is defined as a macro. So include it now, to make + later inclusions of <locale.h> a NOP. We don't include <libintl.h> + as well because people using "gettext.h" will not include <libintl.h>, + and also including <libintl.h> would fail on SunOS 4, whereas <locale.h> + is OK. */ +#if defined(__sun) +# include <locale.h> +#endif + +/* Many header files from the libstdc++ coming with g++ 3.3 or newer include + <libintl.h>, which chokes if dcgettext is defined as a macro. So include + it now, to make later inclusions of <libintl.h> a NOP. */ +#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) +# include <cstdlib> +# if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H +# include <libintl.h> +# endif +#endif + +/* Disabled NLS. + The casts to 'const char *' serve the purpose of producing warnings + for invalid uses of the value returned from these functions. + On pre-ANSI systems without 'const', the config.h file is supposed to + contain "#define const". */ +# undef gettext +# define gettext(Msgid) ((const char *) (Msgid)) +# undef dgettext +# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) +# undef dcgettext +# define dcgettext(Domainname, Msgid, Category) \ + ((void) (Category), dgettext (Domainname, Msgid)) +# undef ngettext +# define ngettext(Msgid1, Msgid2, N) \ + ((N) == 1 \ + ? ((void) (Msgid2), (const char *) (Msgid1)) \ + : ((void) (Msgid1), (const char *) (Msgid2))) +# undef dngettext +# define dngettext(Domainname, Msgid1, Msgid2, N) \ + ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) +# undef dcngettext +# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ + ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N)) +# undef textdomain +# define textdomain(Domainname) ((const char *) (Domainname)) +# undef bindtextdomain +# define bindtextdomain(Domainname, Dirname) \ + ((void) (Domainname), (const char *) (Dirname)) +# undef bind_textdomain_codeset +# define bind_textdomain_codeset(Domainname, Codeset) \ + ((void) (Domainname), (const char *) (Codeset)) + +#endif + +/* Prefer gnulib's setlocale override over libintl's setlocale override. */ +#ifdef GNULIB_defined_setlocale +# undef setlocale +# define setlocale rpl_setlocale +#endif + +/* A pseudo function call that serves as a marker for the automated + extraction of messages, but does not call gettext(). The run-time + translation is done at a different place in the code. + The argument, String, should be a literal string. Concatenated strings + and other string expressions won't work. + The macro's expansion is not parenthesized, so that it is suitable as + initializer for static 'char[]' or 'const char[]' variables. */ +#define gettext_noop(String) String + +/* The separator between msgctxt and msgid in a .mo file. */ +#define GETTEXT_CONTEXT_GLUE "\004" + +/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a + MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be + short and rarely need to change. + The letter 'p' stands for 'particular' or 'special'. */ +#ifdef DEFAULT_TEXT_DOMAIN +# define pgettext(Msgctxt, Msgid) \ + pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#else +# define pgettext(Msgctxt, Msgid) \ + pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#endif +#define dpgettext(Domainname, Msgctxt, Msgid) \ + pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ + pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) +#ifdef DEFAULT_TEXT_DOMAIN +# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#else +# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#endif +#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ + npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +pgettext_aux (const char *domain, + const char *msg_ctxt_id, const char *msgid, + int category) +{ + const char *translation = dcgettext (domain, msg_ctxt_id, category); + if (translation == msg_ctxt_id) + return msgid; + else + return translation; +} + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +npgettext_aux (const char *domain, + const char *msg_ctxt_id, const char *msgid, + const char *msgid_plural, unsigned long int n, + int category) +{ + const char *translation = + dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); + if (translation == msg_ctxt_id || translation == msgid_plural) + return (n == 1 ? msgid : msgid_plural); + else + return translation; +} + +/* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID + can be arbitrary expressions. But for string literals these macros are + less efficient than those above. */ + +#include <string.h> + +#if (((__GNUC__ >= 3 || __GNUG__ >= 2) && !defined __STRICT_ANSI__) \ + /* || (__STDC_VERSION__ == 199901L && !defined __HP_cc) + || (__STDC_VERSION__ >= 201112L && !defined __STDC_NO_VLA__) */ ) +# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1 +#else +# define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0 +#endif + +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS +#include <stdlib.h> +#endif + +#define pgettext_expr(Msgctxt, Msgid) \ + dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) +#define dpgettext_expr(Domainname, Msgctxt, Msgid) \ + dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +dcpgettext_expr (const char *domain, + const char *msgctxt, const char *msgid, + int category) +{ + size_t msgctxt_len = strlen (msgctxt) + 1; + size_t msgid_len = strlen (msgid) + 1; + const char *translation; +#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + char msg_ctxt_id[msgctxt_len + msgid_len]; +#else + char buf[1024]; + char *msg_ctxt_id = + (msgctxt_len + msgid_len <= sizeof (buf) + ? buf + : (char *) malloc (msgctxt_len + msgid_len)); + if (msg_ctxt_id != NULL) +#endif + { + int found_translation; + memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); + msg_ctxt_id[msgctxt_len - 1] = '\004'; + memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); + translation = dcgettext (domain, msg_ctxt_id, category); + found_translation = (translation != msg_ctxt_id); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free (msg_ctxt_id); +#endif + if (found_translation) + return translation; + } + return msgid; +} + +#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ + dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) +#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ + dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +dcnpgettext_expr (const char *domain, + const char *msgctxt, const char *msgid, + const char *msgid_plural, unsigned long int n, + int category) +{ + size_t msgctxt_len = strlen (msgctxt) + 1; + size_t msgid_len = strlen (msgid) + 1; + const char *translation; +#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + char msg_ctxt_id[msgctxt_len + msgid_len]; +#else + char buf[1024]; + char *msg_ctxt_id = + (msgctxt_len + msgid_len <= sizeof (buf) + ? buf + : (char *) malloc (msgctxt_len + msgid_len)); + if (msg_ctxt_id != NULL) +#endif + { + int found_translation; + memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); + msg_ctxt_id[msgctxt_len - 1] = '\004'; + memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); + translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); + found_translation = !(translation == msg_ctxt_id || translation == msgid_plural); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free (msg_ctxt_id); +#endif + if (found_translation) + return translation; + } + return (n == 1 ? msgid : msgid_plural); +} + +#endif /* _LIBGETTEXT_H */ diff --git a/devspec.en_US/project/recutils/lib/gettime.c b/devspec.en_US/project/recutils/lib/gettime.c new file mode 100755 index 0000000..1fd153f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/gettime.c @@ -0,0 +1,49 @@ +/* gettime -- get the system clock + + Copyright (C) 2002, 2004-2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert. */ + +#include <config.h> + +#include "timespec.h" + +#include <sys/time.h> + +/* Get the system time into *TS. */ + +void +gettime (struct timespec *ts) +{ +#if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME + clock_gettime (CLOCK_REALTIME, ts); +#else + struct timeval tv; + gettimeofday (&tv, NULL); + ts->tv_sec = tv.tv_sec; + ts->tv_nsec = tv.tv_usec * 1000; +#endif +} + +/* Return the current system time as a struct timespec. */ + +struct timespec +current_timespec (void) +{ + struct timespec ts; + gettime (&ts); + return ts; +} diff --git a/devspec.en_US/project/recutils/lib/gettimeofday.c b/devspec.en_US/project/recutils/lib/gettimeofday.c new file mode 100755 index 0000000..360cdc4 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/gettimeofday.c @@ -0,0 +1,150 @@ +/* Provide gettimeofday for systems that don't have it or for which it's broken. + + Copyright (C) 2001-2003, 2005-2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* written by Jim Meyering */ + +#include <config.h> + +/* Specification. */ +#include <sys/time.h> + +#include <time.h> + +#if defined _WIN32 && ! defined __CYGWIN__ +# define WINDOWS_NATIVE +# include <windows.h> +#endif + +#include "localtime-buffer.h" + +#ifdef WINDOWS_NATIVE + +/* Avoid warnings from gcc -Wcast-function-type. */ +# define GetProcAddress \ + (void *) GetProcAddress + +/* GetSystemTimePreciseAsFileTime was introduced only in Windows 8. */ +typedef void (WINAPI * GetSystemTimePreciseAsFileTimeFuncType) (FILETIME *lpTime); +static GetSystemTimePreciseAsFileTimeFuncType GetSystemTimePreciseAsFileTimeFunc = NULL; +static BOOL initialized = FALSE; + +static void +initialize (void) +{ + HMODULE kernel32 = LoadLibrary ("kernel32.dll"); + if (kernel32 != NULL) + { + GetSystemTimePreciseAsFileTimeFunc = + (GetSystemTimePreciseAsFileTimeFuncType) GetProcAddress (kernel32, "GetSystemTimePreciseAsFileTime"); + } + initialized = TRUE; +} + +#endif + +/* This is a wrapper for gettimeofday. It is used only on systems + that lack this function, or whose implementation of this function + causes problems. + Work around the bug in some systems whereby gettimeofday clobbers + the static buffer that localtime uses for its return value. The + gettimeofday function from Mac OS X 10.0.4 (i.e., Darwin 1.3.7) has + this problem. */ + +int +gettimeofday (struct timeval *restrict tv, void *restrict tz) +{ +#undef gettimeofday +#ifdef WINDOWS_NATIVE + + /* On native Windows, there are two ways to get the current time: + GetSystemTimeAsFileTime + <https://msdn.microsoft.com/en-us/library/ms724397.aspx> + or + GetSystemTimePreciseAsFileTime + <https://msdn.microsoft.com/en-us/library/hh706895.aspx>. + GetSystemTimeAsFileTime produces values that jump by increments of + 15.627 milliseconds (!) on average. + Whereas GetSystemTimePreciseAsFileTime values usually jump by 1 or 2 + microseconds. + More discussion on this topic: + <http://www.windowstimestamp.com/description>. */ + FILETIME current_time; + + if (!initialized) + initialize (); + if (GetSystemTimePreciseAsFileTimeFunc != NULL) + GetSystemTimePreciseAsFileTimeFunc (¤t_time); + else + GetSystemTimeAsFileTime (¤t_time); + + /* Convert from FILETIME to 'struct timeval'. */ + /* FILETIME: <https://msdn.microsoft.com/en-us/library/ms724284.aspx> */ + ULONGLONG since_1601 = + ((ULONGLONG) current_time.dwHighDateTime << 32) + | (ULONGLONG) current_time.dwLowDateTime; + /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap + years, in total 134774 days. */ + ULONGLONG since_1970 = + since_1601 - (ULONGLONG) 134774 * (ULONGLONG) 86400 * (ULONGLONG) 10000000; + ULONGLONG microseconds_since_1970 = since_1970 / (ULONGLONG) 10; + tv->tv_sec = microseconds_since_1970 / (ULONGLONG) 1000000; + tv->tv_usec = microseconds_since_1970 % (ULONGLONG) 1000000; + + return 0; + +#else + +# if HAVE_GETTIMEOFDAY +# if GETTIMEOFDAY_CLOBBERS_LOCALTIME + /* Save and restore the contents of the buffer used for localtime's + result around the call to gettimeofday. */ + struct tm save = *localtime_buffer_addr; +# endif + +# if defined timeval /* 'struct timeval' overridden by gnulib? */ +# undef timeval + struct timeval otv; + int result = gettimeofday (&otv, (struct timezone *) tz); + if (result == 0) + { + tv->tv_sec = otv.tv_sec; + tv->tv_usec = otv.tv_usec; + } +# else + int result = gettimeofday (tv, (struct timezone *) tz); +# endif + +# if GETTIMEOFDAY_CLOBBERS_LOCALTIME + *localtime_buffer_addr = save; +# endif + + return result; + +# else + +# if !defined OK_TO_USE_1S_CLOCK +# error "Only 1-second nominal clock resolution found. Is that intended?" \ + "If so, compile with the -DOK_TO_USE_1S_CLOCK option." +# endif + tv->tv_sec = time (NULL); + tv->tv_usec = 0; + + return 0; + +# endif +#endif +} diff --git a/devspec.en_US/project/recutils/lib/gl_array_list.c b/devspec.en_US/project/recutils/lib/gl_array_list.c new file mode 100755 index 0000000..812c502 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/gl_array_list.c @@ -0,0 +1,680 @@ +/* Sequential list data type implemented by an array. + Copyright (C) 2006-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include "gl_array_list.h" + +#include <stdlib.h> +/* Get memcpy. */ +#include <string.h> + +/* Checked size_t computations. */ +#include "xsize.h" + +#ifndef uintptr_t +# define uintptr_t unsigned long +#endif + +/* -------------------------- gl_list_t Data Type -------------------------- */ + +/* Concrete gl_list_impl type, valid for this file only. */ +struct gl_list_impl +{ + struct gl_list_impl_base base; + /* An array of ALLOCATED elements, of which the first COUNT are used. + 0 <= COUNT <= ALLOCATED. */ + const void **elements; + size_t count; + size_t allocated; +}; + +/* struct gl_list_node_impl doesn't exist here. The pointers are actually + indices + 1. */ +#define INDEX_TO_NODE(index) (gl_list_node_t)(uintptr_t)(size_t)((index) + 1) +#define NODE_TO_INDEX(node) ((uintptr_t)(node) - 1) + +static gl_list_t +gl_array_nx_create_empty (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates) +{ + struct gl_list_impl *list = + (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); + + if (list == NULL) + return NULL; + + list->base.vtable = implementation; + list->base.equals_fn = equals_fn; + list->base.hashcode_fn = hashcode_fn; + list->base.dispose_fn = dispose_fn; + list->base.allow_duplicates = allow_duplicates; + list->elements = NULL; + list->count = 0; + list->allocated = 0; + + return list; +} + +static gl_list_t +gl_array_nx_create (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents) +{ + struct gl_list_impl *list = + (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); + + if (list == NULL) + return NULL; + + list->base.vtable = implementation; + list->base.equals_fn = equals_fn; + list->base.hashcode_fn = hashcode_fn; + list->base.dispose_fn = dispose_fn; + list->base.allow_duplicates = allow_duplicates; + if (count > 0) + { + if (size_overflow_p (xtimes (count, sizeof (const void *)))) + goto fail; + list->elements = (const void **) malloc (count * sizeof (const void *)); + if (list->elements == NULL) + goto fail; + memcpy (list->elements, contents, count * sizeof (const void *)); + } + else + list->elements = NULL; + list->count = count; + list->allocated = count; + + return list; + + fail: + free (list); + return NULL; +} + +static size_t +gl_array_size (gl_list_t list) +{ + return list->count; +} + +static const void * _GL_ATTRIBUTE_PURE +gl_array_node_value (gl_list_t list, gl_list_node_t node) +{ + uintptr_t index = NODE_TO_INDEX (node); + if (!(index < list->count)) + /* Invalid argument. */ + abort (); + return list->elements[index]; +} + +static int +gl_array_node_nx_set_value (gl_list_t list, gl_list_node_t node, + const void *elt) +{ + uintptr_t index = NODE_TO_INDEX (node); + if (!(index < list->count)) + /* Invalid argument. */ + abort (); + list->elements[index] = elt; + return 0; +} + +static gl_list_node_t _GL_ATTRIBUTE_PURE +gl_array_next_node (gl_list_t list, gl_list_node_t node) +{ + uintptr_t index = NODE_TO_INDEX (node); + if (!(index < list->count)) + /* Invalid argument. */ + abort (); + index++; + if (index < list->count) + return INDEX_TO_NODE (index); + else + return NULL; +} + +static gl_list_node_t _GL_ATTRIBUTE_PURE +gl_array_previous_node (gl_list_t list, gl_list_node_t node) +{ + uintptr_t index = NODE_TO_INDEX (node); + if (!(index < list->count)) + /* Invalid argument. */ + abort (); + if (index > 0) + return INDEX_TO_NODE (index - 1); + else + return NULL; +} + +static const void * _GL_ATTRIBUTE_PURE +gl_array_get_at (gl_list_t list, size_t position) +{ + size_t count = list->count; + + if (!(position < count)) + /* Invalid argument. */ + abort (); + return list->elements[position]; +} + +static gl_list_node_t +gl_array_nx_set_at (gl_list_t list, size_t position, const void *elt) +{ + size_t count = list->count; + + if (!(position < count)) + /* Invalid argument. */ + abort (); + list->elements[position] = elt; + return INDEX_TO_NODE (position); +} + +static size_t +gl_array_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + size_t count = list->count; + + if (!(start_index <= end_index && end_index <= count)) + /* Invalid arguments. */ + abort (); + + if (start_index < end_index) + { + gl_listelement_equals_fn equals = list->base.equals_fn; + if (equals != NULL) + { + size_t i; + + for (i = start_index;;) + { + if (equals (elt, list->elements[i])) + return i; + i++; + if (i == end_index) + break; + } + } + else + { + size_t i; + + for (i = start_index;;) + { + if (elt == list->elements[i]) + return i; + i++; + if (i == end_index) + break; + } + } + } + return (size_t)(-1); +} + +static gl_list_node_t +gl_array_search_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + size_t index = gl_array_indexof_from_to (list, start_index, end_index, elt); + return INDEX_TO_NODE (index); +} + +/* Ensure that list->allocated > list->count. + Return 0 upon success, -1 upon out-of-memory. */ +static int +grow (gl_list_t list) +{ + size_t new_allocated; + size_t memory_size; + const void **memory; + + new_allocated = xtimes (list->allocated, 2); + new_allocated = xsum (new_allocated, 1); + memory_size = xtimes (new_allocated, sizeof (const void *)); + if (size_overflow_p (memory_size)) + /* Overflow, would lead to out of memory. */ + return -1; + memory = (const void **) realloc (list->elements, memory_size); + if (memory == NULL) + /* Out of memory. */ + return -1; + list->elements = memory; + list->allocated = new_allocated; + return 0; +} + +static gl_list_node_t +gl_array_nx_add_first (gl_list_t list, const void *elt) +{ + size_t count = list->count; + const void **elements; + size_t i; + + if (count == list->allocated) + if (grow (list) < 0) + return NULL; + elements = list->elements; + for (i = count; i > 0; i--) + elements[i] = elements[i - 1]; + elements[0] = elt; + list->count = count + 1; + return INDEX_TO_NODE (0); +} + +static gl_list_node_t +gl_array_nx_add_last (gl_list_t list, const void *elt) +{ + size_t count = list->count; + + if (count == list->allocated) + if (grow (list) < 0) + return NULL; + list->elements[count] = elt; + list->count = count + 1; + return INDEX_TO_NODE (count); +} + +static gl_list_node_t +gl_array_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt) +{ + size_t count = list->count; + uintptr_t index = NODE_TO_INDEX (node); + size_t position; + const void **elements; + size_t i; + + if (!(index < count)) + /* Invalid argument. */ + abort (); + position = index; + if (count == list->allocated) + if (grow (list) < 0) + return NULL; + elements = list->elements; + for (i = count; i > position; i--) + elements[i] = elements[i - 1]; + elements[position] = elt; + list->count = count + 1; + return INDEX_TO_NODE (position); +} + +static gl_list_node_t +gl_array_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt) +{ + size_t count = list->count; + uintptr_t index = NODE_TO_INDEX (node); + size_t position; + const void **elements; + size_t i; + + if (!(index < count)) + /* Invalid argument. */ + abort (); + position = index + 1; + if (count == list->allocated) + if (grow (list) < 0) + return NULL; + elements = list->elements; + for (i = count; i > position; i--) + elements[i] = elements[i - 1]; + elements[position] = elt; + list->count = count + 1; + return INDEX_TO_NODE (position); +} + +static gl_list_node_t +gl_array_nx_add_at (gl_list_t list, size_t position, const void *elt) +{ + size_t count = list->count; + const void **elements; + size_t i; + + if (!(position <= count)) + /* Invalid argument. */ + abort (); + if (count == list->allocated) + if (grow (list) < 0) + return NULL; + elements = list->elements; + for (i = count; i > position; i--) + elements[i] = elements[i - 1]; + elements[position] = elt; + list->count = count + 1; + return INDEX_TO_NODE (position); +} + +static bool +gl_array_remove_node (gl_list_t list, gl_list_node_t node) +{ + size_t count = list->count; + uintptr_t index = NODE_TO_INDEX (node); + size_t position; + const void **elements; + size_t i; + + if (!(index < count)) + /* Invalid argument. */ + abort (); + position = index; + elements = list->elements; + if (list->base.dispose_fn != NULL) + list->base.dispose_fn (elements[position]); + for (i = position + 1; i < count; i++) + elements[i - 1] = elements[i]; + list->count = count - 1; + return true; +} + +static bool +gl_array_remove_at (gl_list_t list, size_t position) +{ + size_t count = list->count; + const void **elements; + size_t i; + + if (!(position < count)) + /* Invalid argument. */ + abort (); + elements = list->elements; + if (list->base.dispose_fn != NULL) + list->base.dispose_fn (elements[position]); + for (i = position + 1; i < count; i++) + elements[i - 1] = elements[i]; + list->count = count - 1; + return true; +} + +static bool +gl_array_remove (gl_list_t list, const void *elt) +{ + size_t position = gl_array_indexof_from_to (list, 0, list->count, elt); + if (position == (size_t)(-1)) + return false; + else + return gl_array_remove_at (list, position); +} + +static void +gl_array_list_free (gl_list_t list) +{ + if (list->elements != NULL) + { + if (list->base.dispose_fn != NULL) + { + size_t count = list->count; + + if (count > 0) + { + gl_listelement_dispose_fn dispose = list->base.dispose_fn; + const void **elements = list->elements; + + do + dispose (*elements++); + while (--count > 0); + } + } + free (list->elements); + } + free (list); +} + +/* --------------------- gl_list_iterator_t Data Type --------------------- */ + +static gl_list_iterator_t +gl_array_iterator (gl_list_t list) +{ + gl_list_iterator_t result; + + result.vtable = list->base.vtable; + result.list = list; + result.count = list->count; + result.p = list->elements + 0; + result.q = list->elements + list->count; +#if defined GCC_LINT || defined lint + result.i = 0; + result.j = 0; +#endif + + return result; +} + +static gl_list_iterator_t +gl_array_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index) +{ + gl_list_iterator_t result; + + if (!(start_index <= end_index && end_index <= list->count)) + /* Invalid arguments. */ + abort (); + result.vtable = list->base.vtable; + result.list = list; + result.count = list->count; + result.p = list->elements + start_index; + result.q = list->elements + end_index; +#if defined GCC_LINT || defined lint + result.i = 0; + result.j = 0; +#endif + + return result; +} + +static bool +gl_array_iterator_next (gl_list_iterator_t *iterator, + const void **eltp, gl_list_node_t *nodep) +{ + gl_list_t list = iterator->list; + if (iterator->count != list->count) + { + if (iterator->count != list->count + 1) + /* Concurrent modifications were done on the list. */ + abort (); + /* The last returned element was removed. */ + iterator->count--; + iterator->p = (const void **) iterator->p - 1; + iterator->q = (const void **) iterator->q - 1; + } + if (iterator->p < iterator->q) + { + const void **p = (const void **) iterator->p; + *eltp = *p; + if (nodep != NULL) + *nodep = INDEX_TO_NODE (p - list->elements); + iterator->p = p + 1; + return true; + } + else + return false; +} + +static void +gl_array_iterator_free (gl_list_iterator_t *iterator) +{ +} + +/* ---------------------- Sorted gl_list_t Data Type ---------------------- */ + +static size_t +gl_array_sortedlist_indexof_from_to (gl_list_t list, + gl_listelement_compar_fn compar, + size_t low, size_t high, + const void *elt) +{ + if (!(low <= high && high <= list->count)) + /* Invalid arguments. */ + abort (); + if (low < high) + { + /* At each loop iteration, low < high; for indices < low the values + are smaller than ELT; for indices >= high the values are greater + than ELT. So, if the element occurs in the list, it is at + low <= position < high. */ + do + { + size_t mid = low + (high - low) / 2; /* low <= mid < high */ + int cmp = compar (list->elements[mid], elt); + + if (cmp < 0) + low = mid + 1; + else if (cmp > 0) + high = mid; + else /* cmp == 0 */ + { + /* We have an element equal to ELT at index MID. But we need + the minimal such index. */ + high = mid; + /* At each loop iteration, low <= high and + compar (list->elements[high], elt) == 0, + and we know that the first occurrence of the element is at + low <= position <= high. */ + while (low < high) + { + size_t mid2 = low + (high - low) / 2; /* low <= mid2 < high */ + int cmp2 = compar (list->elements[mid2], elt); + + if (cmp2 < 0) + low = mid2 + 1; + else if (cmp2 > 0) + /* The list was not sorted. */ + abort (); + else /* cmp2 == 0 */ + { + if (mid2 == low) + break; + high = mid2 - 1; + } + } + return low; + } + } + while (low < high); + /* Here low == high. */ + } + return (size_t)(-1); +} + +static size_t +gl_array_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + return gl_array_sortedlist_indexof_from_to (list, compar, 0, list->count, + elt); +} + +static gl_list_node_t +gl_array_sortedlist_search_from_to (gl_list_t list, + gl_listelement_compar_fn compar, + size_t low, size_t high, + const void *elt) +{ + size_t index = + gl_array_sortedlist_indexof_from_to (list, compar, low, high, elt); + return INDEX_TO_NODE (index); +} + +static gl_list_node_t +gl_array_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + size_t index = + gl_array_sortedlist_indexof_from_to (list, compar, 0, list->count, elt); + return INDEX_TO_NODE (index); +} + +static gl_list_node_t +gl_array_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + size_t count = list->count; + size_t low = 0; + size_t high = count; + + /* At each loop iteration, low <= high; for indices < low the values are + smaller than ELT; for indices >= high the values are greater than ELT. */ + while (low < high) + { + size_t mid = low + (high - low) / 2; /* low <= mid < high */ + int cmp = compar (list->elements[mid], elt); + + if (cmp < 0) + low = mid + 1; + else if (cmp > 0) + high = mid; + else /* cmp == 0 */ + { + low = mid; + break; + } + } + return gl_array_nx_add_at (list, low, elt); +} + +static bool +gl_array_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + size_t index = gl_array_sortedlist_indexof (list, compar, elt); + if (index == (size_t)(-1)) + return false; + else + return gl_array_remove_at (list, index); +} + + +const struct gl_list_implementation gl_array_list_implementation = + { + gl_array_nx_create_empty, + gl_array_nx_create, + gl_array_size, + gl_array_node_value, + gl_array_node_nx_set_value, + gl_array_next_node, + gl_array_previous_node, + gl_array_get_at, + gl_array_nx_set_at, + gl_array_search_from_to, + gl_array_indexof_from_to, + gl_array_nx_add_first, + gl_array_nx_add_last, + gl_array_nx_add_before, + gl_array_nx_add_after, + gl_array_nx_add_at, + gl_array_remove_node, + gl_array_remove_at, + gl_array_remove, + gl_array_list_free, + gl_array_iterator, + gl_array_iterator_from_to, + gl_array_iterator_next, + gl_array_iterator_free, + gl_array_sortedlist_search, + gl_array_sortedlist_search_from_to, + gl_array_sortedlist_indexof, + gl_array_sortedlist_indexof_from_to, + gl_array_sortedlist_nx_add, + gl_array_sortedlist_remove + }; diff --git a/devspec.en_US/project/recutils/lib/gl_array_list.h b/devspec.en_US/project/recutils/lib/gl_array_list.h new file mode 100755 index 0000000..98158fe --- /dev/null +++ b/devspec.en_US/project/recutils/lib/gl_array_list.h @@ -0,0 +1,34 @@ +/* Sequential list data type implemented by an array. + Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_ARRAY_LIST_H +#define _GL_ARRAY_LIST_H + +#include "gl_list.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_list_implementation gl_array_list_implementation; +#define GL_ARRAY_LIST &gl_array_list_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_ARRAY_LIST_H */ diff --git a/devspec.en_US/project/recutils/lib/gl_list.c b/devspec.en_US/project/recutils/lib/gl_list.c new file mode 100755 index 0000000..8793298 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/gl_list.c @@ -0,0 +1,3 @@ +#include <config.h> +#define GL_LIST_INLINE _GL_EXTERN_INLINE +#include "gl_list.h" diff --git a/devspec.en_US/project/recutils/lib/gl_list.h b/devspec.en_US/project/recutils/lib/gl_list.h new file mode 100755 index 0000000..5f2cade --- /dev/null +++ b/devspec.en_US/project/recutils/lib/gl_list.h @@ -0,0 +1,843 @@ +/* Abstract sequential list data type. -*- coding: utf-8 -*- + Copyright (C) 2006-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_LIST_H +#define _GL_LIST_H + +#include <stdbool.h> +#include <stddef.h> + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef GL_LIST_INLINE +# define GL_LIST_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/* gl_list is an abstract list data type. It can contain any number of + objects ('void *' or 'const void *' pointers) in any given order. + Duplicates are allowed, but can optionally be forbidden. + + There are several implementations of this list datatype, optimized for + different operations or for memory. You can start using the simplest list + implementation, GL_ARRAY_LIST, and switch to a different implementation + later, when you realize which operations are performed the most frequently. + The API of the different implementations is exactly the same; when + switching to a different implementation, you only have to change the + gl_list_create call. + + The implementations are: + GL_ARRAY_LIST a growable array + GL_CARRAY_LIST a growable circular array + GL_LINKED_LIST a linked list + GL_AVLTREE_LIST a binary tree (AVL tree) + GL_RBTREE_LIST a binary tree (red-black tree) + GL_LINKEDHASH_LIST a hash table with a linked list + GL_AVLTREEHASH_LIST a hash table with a binary tree (AVL tree) + GL_RBTREEHASH_LIST a hash table with a binary tree (red-black tree) + + The memory consumption is asymptotically the same: O(1) for every object + in the list. When looking more closely at the average memory consumed + for an object, GL_ARRAY_LIST is the most compact representation, and + GL_LINKEDHASH_LIST and GL_TREEHASH_LIST need more memory. + + The guaranteed average performance of the operations is, for a list of + n elements: + + Operation ARRAY LINKED TREE LINKEDHASH TREEHASH + CARRAY with|without with|without + duplicates duplicates + + gl_list_size O(1) O(1) O(1) O(1) O(1) + gl_list_node_value O(1) O(1) O(1) O(1) O(1) + gl_list_node_set_value O(1) O(1) O(1) O(1) O((log n)²)/O(1) + gl_list_next_node O(1) O(1) O(log n) O(1) O(log n) + gl_list_previous_node O(1) O(1) O(log n) O(1) O(log n) + gl_list_get_at O(1) O(n) O(log n) O(n) O(log n) + gl_list_set_at O(1) O(n) O(log n) O(n) O((log n)²)/O(log n) + gl_list_search O(n) O(n) O(n) O(n)/O(1) O(log n)/O(1) + gl_list_search_from O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n) + gl_list_search_from_to O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n) + gl_list_indexof O(n) O(n) O(n) O(n) O(log n) + gl_list_indexof_from O(n) O(n) O(n) O(n) O((log n)²)/O(log n) + gl_list_indexof_from_to O(n) O(n) O(n) O(n) O((log n)²)/O(log n) + gl_list_add_first O(n)/O(1) O(1) O(log n) O(1) O((log n)²)/O(log n) + gl_list_add_last O(1) O(1) O(log n) O(1) O((log n)²)/O(log n) + gl_list_add_before O(n) O(1) O(log n) O(1) O((log n)²)/O(log n) + gl_list_add_after O(n) O(1) O(log n) O(1) O((log n)²)/O(log n) + gl_list_add_at O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) + gl_list_remove_node O(n) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n) + gl_list_remove_at O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) + gl_list_remove O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n) + gl_list_iterator O(1) O(1) O(log n) O(1) O(log n) + gl_list_iterator_from_to O(1) O(n) O(log n) O(n) O(log n) + gl_list_iterator_next O(1) O(1) O(log n) O(1) O(log n) + gl_sortedlist_search O(log n) O(n) O(log n) O(n) O(log n) + gl_sortedlist_search_from O(log n) O(n) O(log n) O(n) O(log n) + gl_sortedlist_indexof O(log n) O(n) O(log n) O(n) O(log n) + gl_sortedlist_indexof_fro O(log n) O(n) O(log n) O(n) O(log n) + gl_sortedlist_add O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) + gl_sortedlist_remove O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) + */ + +/* -------------------------- gl_list_t Data Type -------------------------- */ + +/* Type of function used to compare two elements. + NULL denotes pointer comparison. */ +typedef bool (*gl_listelement_equals_fn) (const void *elt1, const void *elt2); + +/* Type of function used to compute a hash code. + NULL denotes a function that depends only on the pointer itself. */ +typedef size_t (*gl_listelement_hashcode_fn) (const void *elt); + +/* Type of function used to dispose an element once it's removed from a list. + NULL denotes a no-op. */ +typedef void (*gl_listelement_dispose_fn) (const void *elt); + +struct gl_list_impl; +/* Type representing an entire list. */ +typedef struct gl_list_impl * gl_list_t; + +struct gl_list_node_impl; +/* Type representing the position of an element in the list, in a way that + is more adapted to the list implementation than a plain index. + Note: It is invalidated by insertions and removals! */ +typedef struct gl_list_node_impl * gl_list_node_t; + +struct gl_list_implementation; +/* Type representing a list datatype implementation. */ +typedef const struct gl_list_implementation * gl_list_implementation_t; + +#if 0 /* Unless otherwise specified, these are defined inline below. */ + +/* Create an empty list. + IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST, + GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST, + GL_RBTREEHASH_LIST. + EQUALS_FN is an element comparison function or NULL. + HASHCODE_FN is an element hash code function or NULL. + DISPOSE_FN is an element disposal function or NULL. + ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in + the list. The implementation may verify this at runtime. */ +/* declared in gl_xlist.h */ +extern gl_list_t gl_list_create_empty (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates); +/* Likewise. Return NULL upon out-of-memory. */ +extern gl_list_t gl_list_nx_create_empty (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates); + +/* Create a list with given contents. + IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST, + GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST, + GL_RBTREEHASH_LIST. + EQUALS_FN is an element comparison function or NULL. + HASHCODE_FN is an element hash code function or NULL. + DISPOSE_FN is an element disposal function or NULL. + ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in + the list. The implementation may verify this at runtime. + COUNT is the number of initial elements. + CONTENTS[0..COUNT-1] is the initial contents. */ +/* declared in gl_xlist.h */ +extern gl_list_t gl_list_create (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents); +/* Likewise. Return NULL upon out-of-memory. */ +extern gl_list_t gl_list_nx_create (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents); + +/* Return the current number of elements in a list. */ +extern size_t gl_list_size (gl_list_t list); + +/* Return the element value represented by a list node. */ +extern const void * gl_list_node_value (gl_list_t list, gl_list_node_t node); + +/* Replace the element value represented by a list node. */ +/* declared in gl_xlist.h */ +extern void gl_list_node_set_value (gl_list_t list, gl_list_node_t node, + const void *elt); +/* Likewise. Return 0 upon success, -1 upon out-of-memory. */ +extern int gl_list_node_nx_set_value (gl_list_t list, gl_list_node_t node, + const void *elt) +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + __attribute__ ((__warn_unused_result__)) +#endif + ; + +/* Return the node immediately after the given node in the list, or NULL + if the given node is the last (rightmost) one in the list. */ +extern gl_list_node_t gl_list_next_node (gl_list_t list, gl_list_node_t node); + +/* Return the node immediately before the given node in the list, or NULL + if the given node is the first (leftmost) one in the list. */ +extern gl_list_node_t gl_list_previous_node (gl_list_t list, gl_list_node_t node); + +/* Return the element at a given position in the list. + POSITION must be >= 0 and < gl_list_size (list). */ +extern const void * gl_list_get_at (gl_list_t list, size_t position); + +/* Replace the element at a given position in the list. + POSITION must be >= 0 and < gl_list_size (list). + Return its node. */ +/* declared in gl_xlist.h */ +extern gl_list_node_t gl_list_set_at (gl_list_t list, size_t position, + const void *elt); +/* Likewise. Return NULL upon out-of-memory. */ +extern gl_list_node_t gl_list_nx_set_at (gl_list_t list, size_t position, + const void *elt) +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + __attribute__ ((__warn_unused_result__)) +#endif + ; + +/* Search whether an element is already in the list. + Return its node if found, or NULL if not present in the list. */ +extern gl_list_node_t gl_list_search (gl_list_t list, const void *elt); + +/* Search whether an element is already in the list, + at a position >= START_INDEX. + Return its node if found, or NULL if not present in the list. */ +extern gl_list_node_t gl_list_search_from (gl_list_t list, size_t start_index, + const void *elt); + +/* Search whether an element is already in the list, + at a position >= START_INDEX and < END_INDEX. + Return its node if found, or NULL if not present in the list. */ +extern gl_list_node_t gl_list_search_from_to (gl_list_t list, + size_t start_index, + size_t end_index, + const void *elt); + +/* Search whether an element is already in the list. + Return its position if found, or (size_t)(-1) if not present in the list. */ +extern size_t gl_list_indexof (gl_list_t list, const void *elt); + +/* Search whether an element is already in the list, + at a position >= START_INDEX. + Return its position if found, or (size_t)(-1) if not present in the list. */ +extern size_t gl_list_indexof_from (gl_list_t list, size_t start_index, + const void *elt); + +/* Search whether an element is already in the list, + at a position >= START_INDEX and < END_INDEX. + Return its position if found, or (size_t)(-1) if not present in the list. */ +extern size_t gl_list_indexof_from_to (gl_list_t list, + size_t start_index, size_t end_index, + const void *elt); + +/* Add an element as the first element of the list. + Return its node. */ +/* declared in gl_xlist.h */ +extern gl_list_node_t gl_list_add_first (gl_list_t list, const void *elt); +/* Likewise. Return NULL upon out-of-memory. */ +extern gl_list_node_t gl_list_nx_add_first (gl_list_t list, const void *elt) +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + __attribute__ ((__warn_unused_result__)) +#endif + ; + +/* Add an element as the last element of the list. + Return its node. */ +/* declared in gl_xlist.h */ +extern gl_list_node_t gl_list_add_last (gl_list_t list, const void *elt); +/* Likewise. Return NULL upon out-of-memory. */ +extern gl_list_node_t gl_list_nx_add_last (gl_list_t list, const void *elt) +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + __attribute__ ((__warn_unused_result__)) +#endif + ; + +/* Add an element before a given element node of the list. + Return its node. */ +/* declared in gl_xlist.h */ +extern gl_list_node_t gl_list_add_before (gl_list_t list, gl_list_node_t node, + const void *elt); +/* Likewise. Return NULL upon out-of-memory. */ +extern gl_list_node_t gl_list_nx_add_before (gl_list_t list, + gl_list_node_t node, + const void *elt) +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + __attribute__ ((__warn_unused_result__)) +#endif + ; + +/* Add an element after a given element node of the list. + Return its node. */ +/* declared in gl_xlist.h */ +extern gl_list_node_t gl_list_add_after (gl_list_t list, gl_list_node_t node, + const void *elt); +/* Likewise. Return NULL upon out-of-memory. */ +extern gl_list_node_t gl_list_nx_add_after (gl_list_t list, gl_list_node_t node, + const void *elt) +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + __attribute__ ((__warn_unused_result__)) +#endif + ; + +/* Add an element at a given position in the list. + POSITION must be >= 0 and <= gl_list_size (list). */ +/* declared in gl_xlist.h */ +extern gl_list_node_t gl_list_add_at (gl_list_t list, size_t position, + const void *elt); +/* Likewise. Return NULL upon out-of-memory. */ +extern gl_list_node_t gl_list_nx_add_at (gl_list_t list, size_t position, + const void *elt) +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + __attribute__ ((__warn_unused_result__)) +#endif + ; + +/* Remove an element from the list. + Return true. */ +extern bool gl_list_remove_node (gl_list_t list, gl_list_node_t node); + +/* Remove an element at a given position from the list. + POSITION must be >= 0 and < gl_list_size (list). + Return true. */ +extern bool gl_list_remove_at (gl_list_t list, size_t position); + +/* Search and remove an element from the list. + Return true if it was found and removed. */ +extern bool gl_list_remove (gl_list_t list, const void *elt); + +/* Free an entire list. + (But this call does not free the elements of the list. It only invokes + the DISPOSE_FN on each of the elements of the list, and only if the list + is not a sublist.) */ +extern void gl_list_free (gl_list_t list); + +#endif /* End of inline and gl_xlist.h-defined functions. */ + +/* --------------------- gl_list_iterator_t Data Type --------------------- */ + +/* Functions for iterating through a list. */ + +/* Type of an iterator that traverses a list. + This is a fixed-size struct, so that creation of an iterator doesn't need + memory allocation on the heap. */ +typedef struct +{ + /* For fast dispatch of gl_list_iterator_next. */ + const struct gl_list_implementation *vtable; + /* For detecting whether the last returned element was removed. */ + gl_list_t list; + size_t count; + /* Other, implementation-private fields. */ + void *p; void *q; + size_t i; size_t j; +} gl_list_iterator_t; + +#if 0 /* These are defined inline below. */ + +/* Create an iterator traversing a list. + The list contents must not be modified while the iterator is in use, + except for replacing or removing the last returned element. */ +extern gl_list_iterator_t gl_list_iterator (gl_list_t list); + +/* Create an iterator traversing the element with indices i, + start_index <= i < end_index, of a list. + The list contents must not be modified while the iterator is in use, + except for replacing or removing the last returned element. */ +extern gl_list_iterator_t gl_list_iterator_from_to (gl_list_t list, + size_t start_index, + size_t end_index); + +/* If there is a next element, store the next element in *ELTP, store its + node in *NODEP if NODEP is non-NULL, advance the iterator and return true. + Otherwise, return false. */ +extern bool gl_list_iterator_next (gl_list_iterator_t *iterator, + const void **eltp, gl_list_node_t *nodep); + +/* Free an iterator. */ +extern void gl_list_iterator_free (gl_list_iterator_t *iterator); + +#endif /* End of inline functions. */ + +/* ---------------------- Sorted gl_list_t Data Type ---------------------- */ + +/* The following functions are for lists without duplicates where the + order is given by a sort criterion. */ + +/* Type of function used to compare two elements. Same as for qsort(). + NULL denotes pointer comparison. */ +typedef int (*gl_listelement_compar_fn) (const void *elt1, const void *elt2); + +#if 0 /* Unless otherwise specified, these are defined inline below. */ + +/* Search whether an element is already in the list. + The list is assumed to be sorted with COMPAR. + Return its node if found, or NULL if not present in the list. + If the list contains several copies of ELT, the node of the leftmost one is + returned. */ +extern gl_list_node_t gl_sortedlist_search (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + +/* Search whether an element is already in the list. + The list is assumed to be sorted with COMPAR. + Only list elements with indices >= START_INDEX and < END_INDEX are + considered; the implementation uses these bounds to minimize the number + of COMPAR invocations. + Return its node if found, or NULL if not present in the list. + If the list contains several copies of ELT, the node of the leftmost one is + returned. */ +extern gl_list_node_t gl_sortedlist_search_from_to (gl_list_t list, + gl_listelement_compar_fn compar, + size_t start_index, + size_t end_index, + const void *elt); + +/* Search whether an element is already in the list. + The list is assumed to be sorted with COMPAR. + Return its position if found, or (size_t)(-1) if not present in the list. + If the list contains several copies of ELT, the position of the leftmost one + is returned. */ +extern size_t gl_sortedlist_indexof (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + +/* Search whether an element is already in the list. + The list is assumed to be sorted with COMPAR. + Only list elements with indices >= START_INDEX and < END_INDEX are + considered; the implementation uses these bounds to minimize the number + of COMPAR invocations. + Return its position if found, or (size_t)(-1) if not present in the list. + If the list contains several copies of ELT, the position of the leftmost one + is returned. */ +extern size_t gl_sortedlist_indexof_from_to (gl_list_t list, + gl_listelement_compar_fn compar, + size_t start_index, + size_t end_index, + const void *elt); + +/* Add an element at the appropriate position in the list. + The list is assumed to be sorted with COMPAR. + Return its node. */ +/* declared in gl_xlist.h */ +extern gl_list_node_t gl_sortedlist_add (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); +/* Likewise. Return NULL upon out-of-memory. */ +extern gl_list_node_t gl_sortedlist_nx_add (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt) +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + __attribute__ ((__warn_unused_result__)) +#endif + ; + +/* Search and remove an element from the list. + The list is assumed to be sorted with COMPAR. + Return true if it was found and removed. + If the list contains several copies of ELT, only the leftmost one is + removed. */ +extern bool gl_sortedlist_remove (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + +#endif /* End of inline and gl_xlist.h-defined functions. */ + +/* ------------------------ Implementation Details ------------------------ */ + +struct gl_list_implementation +{ + /* gl_list_t functions. */ + gl_list_t (*nx_create_empty) (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates); + gl_list_t (*nx_create) (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents); + size_t (*size) (gl_list_t list); + const void * (*node_value) (gl_list_t list, gl_list_node_t node); + int (*node_nx_set_value) (gl_list_t list, gl_list_node_t node, + const void *elt); + gl_list_node_t (*next_node) (gl_list_t list, gl_list_node_t node); + gl_list_node_t (*previous_node) (gl_list_t list, gl_list_node_t node); + const void * (*get_at) (gl_list_t list, size_t position); + gl_list_node_t (*nx_set_at) (gl_list_t list, size_t position, + const void *elt); + gl_list_node_t (*search_from_to) (gl_list_t list, size_t start_index, + size_t end_index, const void *elt); + size_t (*indexof_from_to) (gl_list_t list, size_t start_index, + size_t end_index, const void *elt); + gl_list_node_t (*nx_add_first) (gl_list_t list, const void *elt); + gl_list_node_t (*nx_add_last) (gl_list_t list, const void *elt); + gl_list_node_t (*nx_add_before) (gl_list_t list, gl_list_node_t node, + const void *elt); + gl_list_node_t (*nx_add_after) (gl_list_t list, gl_list_node_t node, + const void *elt); + gl_list_node_t (*nx_add_at) (gl_list_t list, size_t position, + const void *elt); + bool (*remove_node) (gl_list_t list, gl_list_node_t node); + bool (*remove_at) (gl_list_t list, size_t position); + bool (*remove_elt) (gl_list_t list, const void *elt); + void (*list_free) (gl_list_t list); + /* gl_list_iterator_t functions. */ + gl_list_iterator_t (*iterator) (gl_list_t list); + gl_list_iterator_t (*iterator_from_to) (gl_list_t list, + size_t start_index, + size_t end_index); + bool (*iterator_next) (gl_list_iterator_t *iterator, + const void **eltp, gl_list_node_t *nodep); + void (*iterator_free) (gl_list_iterator_t *iterator); + /* Sorted gl_list_t functions. */ + gl_list_node_t (*sortedlist_search) (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + gl_list_node_t (*sortedlist_search_from_to) (gl_list_t list, + gl_listelement_compar_fn compar, + size_t start_index, + size_t end_index, + const void *elt); + size_t (*sortedlist_indexof) (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + size_t (*sortedlist_indexof_from_to) (gl_list_t list, + gl_listelement_compar_fn compar, + size_t start_index, size_t end_index, + const void *elt); + gl_list_node_t (*sortedlist_nx_add) (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + bool (*sortedlist_remove) (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); +}; + +struct gl_list_impl_base +{ + const struct gl_list_implementation *vtable; + gl_listelement_equals_fn equals_fn; + gl_listelement_hashcode_fn hashcode_fn; + gl_listelement_dispose_fn dispose_fn; + bool allow_duplicates; +}; + +/* Define all functions of this file as accesses to the + struct gl_list_implementation. */ + +GL_LIST_INLINE gl_list_t +gl_list_nx_create_empty (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates) +{ + return implementation->nx_create_empty (implementation, equals_fn, + hashcode_fn, dispose_fn, + allow_duplicates); +} + +GL_LIST_INLINE gl_list_t +gl_list_nx_create (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents) +{ + return implementation->nx_create (implementation, equals_fn, hashcode_fn, + dispose_fn, allow_duplicates, count, + contents); +} + +GL_LIST_INLINE size_t +gl_list_size (gl_list_t list) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->size (list); +} + +GL_LIST_INLINE const void * +gl_list_node_value (gl_list_t list, gl_list_node_t node) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->node_value (list, node); +} + +GL_LIST_INLINE int +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + __attribute__ ((__warn_unused_result__)) +#endif +gl_list_node_nx_set_value (gl_list_t list, gl_list_node_t node, + const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->node_nx_set_value (list, node, elt); +} + +GL_LIST_INLINE gl_list_node_t +gl_list_next_node (gl_list_t list, gl_list_node_t node) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->next_node (list, node); +} + +GL_LIST_INLINE gl_list_node_t +gl_list_previous_node (gl_list_t list, gl_list_node_t node) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->previous_node (list, node); +} + +GL_LIST_INLINE const void * +gl_list_get_at (gl_list_t list, size_t position) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->get_at (list, position); +} + +GL_LIST_INLINE gl_list_node_t +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + __attribute__ ((__warn_unused_result__)) +#endif +gl_list_nx_set_at (gl_list_t list, size_t position, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->nx_set_at (list, position, elt); +} + +GL_LIST_INLINE gl_list_node_t +gl_list_search (gl_list_t list, const void *elt) +{ + size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); + return ((const struct gl_list_impl_base *) list)->vtable + ->search_from_to (list, 0, size, elt); +} + +GL_LIST_INLINE gl_list_node_t +gl_list_search_from (gl_list_t list, size_t start_index, const void *elt) +{ + size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); + return ((const struct gl_list_impl_base *) list)->vtable + ->search_from_to (list, start_index, size, elt); +} + +GL_LIST_INLINE gl_list_node_t +gl_list_search_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->search_from_to (list, start_index, end_index, elt); +} + +GL_LIST_INLINE size_t +gl_list_indexof (gl_list_t list, const void *elt) +{ + size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); + return ((const struct gl_list_impl_base *) list)->vtable + ->indexof_from_to (list, 0, size, elt); +} + +GL_LIST_INLINE size_t +gl_list_indexof_from (gl_list_t list, size_t start_index, const void *elt) +{ + size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); + return ((const struct gl_list_impl_base *) list)->vtable + ->indexof_from_to (list, start_index, size, elt); +} + +GL_LIST_INLINE size_t +gl_list_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->indexof_from_to (list, start_index, end_index, elt); +} + +GL_LIST_INLINE gl_list_node_t +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + __attribute__ ((__warn_unused_result__)) +#endif +gl_list_nx_add_first (gl_list_t list, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->nx_add_first (list, elt); +} + +GL_LIST_INLINE gl_list_node_t +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + __attribute__ ((__warn_unused_result__)) +#endif +gl_list_nx_add_last (gl_list_t list, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->nx_add_last (list, elt); +} + +GL_LIST_INLINE gl_list_node_t +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + __attribute__ ((__warn_unused_result__)) +#endif +gl_list_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->nx_add_before (list, node, elt); +} + +GL_LIST_INLINE gl_list_node_t +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + __attribute__ ((__warn_unused_result__)) +#endif +gl_list_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->nx_add_after (list, node, elt); +} + +GL_LIST_INLINE gl_list_node_t +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + __attribute__ ((__warn_unused_result__)) +#endif +gl_list_nx_add_at (gl_list_t list, size_t position, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->nx_add_at (list, position, elt); +} + +GL_LIST_INLINE bool +gl_list_remove_node (gl_list_t list, gl_list_node_t node) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->remove_node (list, node); +} + +GL_LIST_INLINE bool +gl_list_remove_at (gl_list_t list, size_t position) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->remove_at (list, position); +} + +GL_LIST_INLINE bool +gl_list_remove (gl_list_t list, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->remove_elt (list, elt); +} + +GL_LIST_INLINE void +gl_list_free (gl_list_t list) +{ + ((const struct gl_list_impl_base *) list)->vtable->list_free (list); +} + +GL_LIST_INLINE gl_list_iterator_t +gl_list_iterator (gl_list_t list) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->iterator (list); +} + +GL_LIST_INLINE gl_list_iterator_t +gl_list_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->iterator_from_to (list, start_index, end_index); +} + +GL_LIST_INLINE bool +gl_list_iterator_next (gl_list_iterator_t *iterator, + const void **eltp, gl_list_node_t *nodep) +{ + return iterator->vtable->iterator_next (iterator, eltp, nodep); +} + +GL_LIST_INLINE void +gl_list_iterator_free (gl_list_iterator_t *iterator) +{ + iterator->vtable->iterator_free (iterator); +} + +GL_LIST_INLINE gl_list_node_t +gl_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_search (list, compar, elt); +} + +GL_LIST_INLINE gl_list_node_t +gl_sortedlist_search_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_search_from_to (list, compar, start_index, end_index, + elt); +} + +GL_LIST_INLINE size_t +gl_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_indexof (list, compar, elt); +} + +GL_LIST_INLINE size_t +gl_sortedlist_indexof_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_indexof_from_to (list, compar, start_index, end_index, + elt); +} + +GL_LIST_INLINE gl_list_node_t +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + __attribute__ ((__warn_unused_result__)) +#endif +gl_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_nx_add (list, compar, elt); +} + +GL_LIST_INLINE bool +gl_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_remove (list, compar, elt); +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_LIST_H */ diff --git a/devspec.en_US/file b/devspec.en_US/project/recutils/lib/glthread/.deps/.dirstamp old mode 100644 new mode 100755 similarity index 100% copy from devspec.en_US/file copy to devspec.en_US/project/recutils/lib/glthread/.deps/.dirstamp diff --git a/devspec.en_US/project/recutils/lib/glthread/.deps/lock.Plo b/devspec.en_US/project/recutils/lib/glthread/.deps/lock.Plo new file mode 100755 index 0000000..07e0e05 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/glthread/.deps/lock.Plo @@ -0,0 +1,123 @@ +glthread/lock.lo: glthread/lock.c /usr/include/stdc-predef.h \ + ../src/config.h glthread/lock.h /usr/include/errno.h \ + /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h stdlib.h /usr/include/stdlib.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + sys/types.h /usr/include/i386-linux-gnu/sys/types.h time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h /usr/include/pthread.h \ + /usr/include/sched.h /usr/include/i386-linux-gnu/bits/sched.h \ + /usr/include/i386-linux-gnu/bits/timex.h \ + /usr/include/i386-linux-gnu/bits/setjmp.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +glthread/lock.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/i386-linux-gnu/bits/sched.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/i386-linux-gnu/bits/setjmp.h: diff --git a/devspec.en_US/project/recutils/lib/glthread/.deps/threadlib.Plo b/devspec.en_US/project/recutils/lib/glthread/.deps/threadlib.Plo new file mode 100755 index 0000000..71658a3 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/glthread/.deps/threadlib.Plo @@ -0,0 +1,106 @@ +glthread/threadlib.lo: glthread/threadlib.c /usr/include/stdc-predef.h \ + ../src/config.h /usr/include/pthread.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/sched.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/bits/sched.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/timex.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h \ + /usr/include/i386-linux-gnu/bits/setjmp.h stdlib.h /usr/include/stdlib.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +/usr/include/pthread.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/sched.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/bits/sched.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/i386-linux-gnu/bits/setjmp.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: diff --git a/devspec.en_US/file b/devspec.en_US/project/recutils/lib/glthread/.dirstamp old mode 100644 new mode 100755 similarity index 100% rename from devspec.en_US/file rename to devspec.en_US/project/recutils/lib/glthread/.dirstamp diff --git a/devspec.en_US/project/recutils/lib/glthread/lock.c b/devspec.en_US/project/recutils/lib/glthread/lock.c new file mode 100755 index 0000000..a4498cb --- /dev/null +++ b/devspec.en_US/project/recutils/lib/glthread/lock.c @@ -0,0 +1,1221 @@ +/* Locking in multithreaded situations. + Copyright (C) 2005-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. + Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, + gthr-win32.h. */ + +#include <config.h> + +#include "glthread/lock.h" + +/* ========================================================================= */ + +#if USE_POSIX_THREADS + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +# if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1))) + +# ifdef PTHREAD_RWLOCK_INITIALIZER + +# if !HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER + /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */ + +int +glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock) +{ + pthread_rwlockattr_t attributes; + int err; + + err = pthread_rwlockattr_init (&attributes); + if (err != 0) + return err; + /* Note: PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP is the only value that + causes the writer to be preferred. PTHREAD_RWLOCK_PREFER_WRITER_NP does not + do this; see + http://man7.org/linux/man-pages/man3/pthread_rwlockattr_setkind_np.3.html */ + err = pthread_rwlockattr_setkind_np (&attributes, + PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP); + if (err == 0) + err = pthread_rwlock_init(lock, &attributes); + /* pthread_rwlockattr_destroy always returns 0. It cannot influence the + return value. */ + pthread_rwlockattr_destroy (&attributes); + return err; +} + +# endif +# else + +int +glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) +{ + int err; + + err = pthread_rwlock_init (&lock->rwlock, NULL); + if (err != 0) + return err; + lock->initialized = 1; + return 0; +} + +int +glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) +{ + if (!lock->initialized) + { + int err; + + err = pthread_mutex_lock (&lock->guard); + if (err != 0) + return err; + if (!lock->initialized) + { + err = glthread_rwlock_init_multithreaded (lock); + if (err != 0) + { + pthread_mutex_unlock (&lock->guard); + return err; + } + } + err = pthread_mutex_unlock (&lock->guard); + if (err != 0) + return err; + } + return pthread_rwlock_rdlock (&lock->rwlock); +} + +int +glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) +{ + if (!lock->initialized) + { + int err; + + err = pthread_mutex_lock (&lock->guard); + if (err != 0) + return err; + if (!lock->initialized) + { + err = glthread_rwlock_init_multithreaded (lock); + if (err != 0) + { + pthread_mutex_unlock (&lock->guard); + return err; + } + } + err = pthread_mutex_unlock (&lock->guard); + if (err != 0) + return err; + } + return pthread_rwlock_wrlock (&lock->rwlock); +} + +int +glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) +{ + if (!lock->initialized) + return EINVAL; + return pthread_rwlock_unlock (&lock->rwlock); +} + +int +glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) +{ + int err; + + if (!lock->initialized) + return EINVAL; + err = pthread_rwlock_destroy (&lock->rwlock); + if (err != 0) + return err; + lock->initialized = 0; + return 0; +} + +# endif + +# else + +int +glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) +{ + int err; + + err = pthread_mutex_init (&lock->lock, NULL); + if (err != 0) + return err; + err = pthread_cond_init (&lock->waiting_readers, NULL); + if (err != 0) + return err; + err = pthread_cond_init (&lock->waiting_writers, NULL); + if (err != 0) + return err; + lock->waiting_writers_count = 0; + lock->runcount = 0; + return 0; +} + +int +glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) +{ + int err; + + err = pthread_mutex_lock (&lock->lock); + if (err != 0) + return err; + /* Test whether only readers are currently running, and whether the runcount + field will not overflow, and whether no writer is waiting. The latter + condition is because POSIX recommends that "write locks shall take + precedence over read locks", to avoid "writer starvation". */ + while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) + { + /* This thread has to wait for a while. Enqueue it among the + waiting_readers. */ + err = pthread_cond_wait (&lock->waiting_readers, &lock->lock); + if (err != 0) + { + pthread_mutex_unlock (&lock->lock); + return err; + } + } + lock->runcount++; + return pthread_mutex_unlock (&lock->lock); +} + +int +glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) +{ + int err; + + err = pthread_mutex_lock (&lock->lock); + if (err != 0) + return err; + /* Test whether no readers or writers are currently running. */ + while (!(lock->runcount == 0)) + { + /* This thread has to wait for a while. Enqueue it among the + waiting_writers. */ + lock->waiting_writers_count++; + err = pthread_cond_wait (&lock->waiting_writers, &lock->lock); + if (err != 0) + { + lock->waiting_writers_count--; + pthread_mutex_unlock (&lock->lock); + return err; + } + lock->waiting_writers_count--; + } + lock->runcount--; /* runcount becomes -1 */ + return pthread_mutex_unlock (&lock->lock); +} + +int +glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) +{ + int err; + + err = pthread_mutex_lock (&lock->lock); + if (err != 0) + return err; + if (lock->runcount < 0) + { + /* Drop a writer lock. */ + if (!(lock->runcount == -1)) + { + pthread_mutex_unlock (&lock->lock); + return EINVAL; + } + lock->runcount = 0; + } + else + { + /* Drop a reader lock. */ + if (!(lock->runcount > 0)) + { + pthread_mutex_unlock (&lock->lock); + return EINVAL; + } + lock->runcount--; + } + if (lock->runcount == 0) + { + /* POSIX recommends that "write locks shall take precedence over read + locks", to avoid "writer starvation". */ + if (lock->waiting_writers_count > 0) + { + /* Wake up one of the waiting writers. */ + err = pthread_cond_signal (&lock->waiting_writers); + if (err != 0) + { + pthread_mutex_unlock (&lock->lock); + return err; + } + } + else + { + /* Wake up all waiting readers. */ + err = pthread_cond_broadcast (&lock->waiting_readers); + if (err != 0) + { + pthread_mutex_unlock (&lock->lock); + return err; + } + } + } + return pthread_mutex_unlock (&lock->lock); +} + +int +glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) +{ + int err; + + err = pthread_mutex_destroy (&lock->lock); + if (err != 0) + return err; + err = pthread_cond_destroy (&lock->waiting_readers); + if (err != 0) + return err; + err = pthread_cond_destroy (&lock->waiting_writers); + if (err != 0) + return err; + return 0; +} + +# endif + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +# if HAVE_PTHREAD_MUTEX_RECURSIVE + +# if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP + +int +glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) +{ + pthread_mutexattr_t attributes; + int err; + + err = pthread_mutexattr_init (&attributes); + if (err != 0) + return err; + err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); + if (err != 0) + { + pthread_mutexattr_destroy (&attributes); + return err; + } + err = pthread_mutex_init (lock, &attributes); + if (err != 0) + { + pthread_mutexattr_destroy (&attributes); + return err; + } + err = pthread_mutexattr_destroy (&attributes); + if (err != 0) + return err; + return 0; +} + +# else + +int +glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) +{ + pthread_mutexattr_t attributes; + int err; + + err = pthread_mutexattr_init (&attributes); + if (err != 0) + return err; + err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); + if (err != 0) + { + pthread_mutexattr_destroy (&attributes); + return err; + } + err = pthread_mutex_init (&lock->recmutex, &attributes); + if (err != 0) + { + pthread_mutexattr_destroy (&attributes); + return err; + } + err = pthread_mutexattr_destroy (&attributes); + if (err != 0) + return err; + lock->initialized = 1; + return 0; +} + +int +glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) +{ + if (!lock->initialized) + { + int err; + + err = pthread_mutex_lock (&lock->guard); + if (err != 0) + return err; + if (!lock->initialized) + { + err = glthread_recursive_lock_init_multithreaded (lock); + if (err != 0) + { + pthread_mutex_unlock (&lock->guard); + return err; + } + } + err = pthread_mutex_unlock (&lock->guard); + if (err != 0) + return err; + } + return pthread_mutex_lock (&lock->recmutex); +} + +int +glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) +{ + if (!lock->initialized) + return EINVAL; + return pthread_mutex_unlock (&lock->recmutex); +} + +int +glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) +{ + int err; + + if (!lock->initialized) + return EINVAL; + err = pthread_mutex_destroy (&lock->recmutex); + if (err != 0) + return err; + lock->initialized = 0; + return 0; +} + +# endif + +# else + +int +glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) +{ + int err; + + err = pthread_mutex_init (&lock->mutex, NULL); + if (err != 0) + return err; + lock->owner = (pthread_t) 0; + lock->depth = 0; + return 0; +} + +int +glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) +{ + pthread_t self = pthread_self (); + if (lock->owner != self) + { + int err; + + err = pthread_mutex_lock (&lock->mutex); + if (err != 0) + return err; + lock->owner = self; + } + if (++(lock->depth) == 0) /* wraparound? */ + { + lock->depth--; + return EAGAIN; + } + return 0; +} + +int +glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) +{ + if (lock->owner != pthread_self ()) + return EPERM; + if (lock->depth == 0) + return EINVAL; + if (--(lock->depth) == 0) + { + lock->owner = (pthread_t) 0; + return pthread_mutex_unlock (&lock->mutex); + } + else + return 0; +} + +int +glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) +{ + if (lock->owner != (pthread_t) 0) + return EBUSY; + return pthread_mutex_destroy (&lock->mutex); +} + +# endif + +/* -------------------------- gl_once_t datatype -------------------------- */ + +static const pthread_once_t fresh_once = PTHREAD_ONCE_INIT; + +int +glthread_once_singlethreaded (pthread_once_t *once_control) +{ + /* We don't know whether pthread_once_t is an integer type, a floating-point + type, a pointer type, or a structure type. */ + char *firstbyte = (char *)once_control; + if (*firstbyte == *(const char *)&fresh_once) + { + /* First time use of once_control. Invert the first byte. */ + *firstbyte = ~ *(const char *)&fresh_once; + return 1; + } + else + return 0; +} + +#endif + +/* ========================================================================= */ + +#if USE_PTH_THREADS + +/* Use the GNU Pth threads library. */ + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +# if !HAVE_PTH_RWLOCK_ACQUIRE_PREFER_WRITER + +int +glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) +{ + if (!pth_mutex_init (&lock->lock)) + return errno; + if (!pth_cond_init (&lock->waiting_readers)) + return errno; + if (!pth_cond_init (&lock->waiting_writers)) + return errno; + lock->waiting_writers_count = 0; + lock->runcount = 0; + lock->initialized = 1; + return 0; +} + +int +glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) +{ + if (!lock->initialized) + glthread_rwlock_init_multithreaded (lock); + if (!pth_mutex_acquire (&lock->lock, 0, NULL)) + return errno; + /* Test whether only readers are currently running, and whether the runcount + field will not overflow, and whether no writer is waiting. The latter + condition is because POSIX recommends that "write locks shall take + precedence over read locks", to avoid "writer starvation". */ + while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) + { + /* This thread has to wait for a while. Enqueue it among the + waiting_readers. */ + if (!pth_cond_await (&lock->waiting_readers, &lock->lock, NULL)) + { + int err = errno; + pth_mutex_release (&lock->lock); + return err; + } + } + lock->runcount++; + return (!pth_mutex_release (&lock->lock) ? errno : 0); +} + +int +glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) +{ + if (!lock->initialized) + glthread_rwlock_init_multithreaded (lock); + if (!pth_mutex_acquire (&lock->lock, 0, NULL)) + return errno; + /* Test whether no readers or writers are currently running. */ + while (!(lock->runcount == 0)) + { + /* This thread has to wait for a while. Enqueue it among the + waiting_writers. */ + lock->waiting_writers_count++; + if (!pth_cond_await (&lock->waiting_writers, &lock->lock, NULL)) + { + int err = errno; + lock->waiting_writers_count--; + pth_mutex_release (&lock->lock); + return err; + } + lock->waiting_writers_count--; + } + lock->runcount--; /* runcount becomes -1 */ + return (!pth_mutex_release (&lock->lock) ? errno : 0); +} + +int +glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) +{ + int err; + + if (!lock->initialized) + return EINVAL; + if (!pth_mutex_acquire (&lock->lock, 0, NULL)) + return errno; + if (lock->runcount < 0) + { + /* Drop a writer lock. */ + if (!(lock->runcount == -1)) + { + pth_mutex_release (&lock->lock); + return EINVAL; + } + lock->runcount = 0; + } + else + { + /* Drop a reader lock. */ + if (!(lock->runcount > 0)) + { + pth_mutex_release (&lock->lock); + return EINVAL; + } + lock->runcount--; + } + if (lock->runcount == 0) + { + /* POSIX recommends that "write locks shall take precedence over read + locks", to avoid "writer starvation". */ + if (lock->waiting_writers_count > 0) + { + /* Wake up one of the waiting writers. */ + if (!pth_cond_notify (&lock->waiting_writers, FALSE)) + { + int err = errno; + pth_mutex_release (&lock->lock); + return err; + } + } + else + { + /* Wake up all waiting readers. */ + if (!pth_cond_notify (&lock->waiting_readers, TRUE)) + { + int err = errno; + pth_mutex_release (&lock->lock); + return err; + } + } + } + return (!pth_mutex_release (&lock->lock) ? errno : 0); +} + +int +glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) +{ + lock->initialized = 0; + return 0; +} + +# endif + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +/* -------------------------- gl_once_t datatype -------------------------- */ + +static void +glthread_once_call (void *arg) +{ + void (**gl_once_temp_addr) (void) = (void (**) (void)) arg; + void (*initfunction) (void) = *gl_once_temp_addr; + initfunction (); +} + +int +glthread_once_multithreaded (pth_once_t *once_control, void (*initfunction) (void)) +{ + void (*temp) (void) = initfunction; + return (!pth_once (once_control, glthread_once_call, &temp) ? errno : 0); +} + +int +glthread_once_singlethreaded (pth_once_t *once_control) +{ + /* We know that pth_once_t is an integer type. */ + if (*once_control == PTH_ONCE_INIT) + { + /* First time use of once_control. Invert the marker. */ + *once_control = ~ PTH_ONCE_INIT; + return 1; + } + else + return 0; +} + +#endif + +/* ========================================================================= */ + +#if USE_SOLARIS_THREADS + +/* Use the old Solaris threads library. */ + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +int +glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) +{ + int err; + + err = mutex_init (&lock->mutex, USYNC_THREAD, NULL); + if (err != 0) + return err; + lock->owner = (thread_t) 0; + lock->depth = 0; + return 0; +} + +int +glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) +{ + thread_t self = thr_self (); + if (lock->owner != self) + { + int err; + + err = mutex_lock (&lock->mutex); + if (err != 0) + return err; + lock->owner = self; + } + if (++(lock->depth) == 0) /* wraparound? */ + { + lock->depth--; + return EAGAIN; + } + return 0; +} + +int +glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) +{ + if (lock->owner != thr_self ()) + return EPERM; + if (lock->depth == 0) + return EINVAL; + if (--(lock->depth) == 0) + { + lock->owner = (thread_t) 0; + return mutex_unlock (&lock->mutex); + } + else + return 0; +} + +int +glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) +{ + if (lock->owner != (thread_t) 0) + return EBUSY; + return mutex_destroy (&lock->mutex); +} + +/* -------------------------- gl_once_t datatype -------------------------- */ + +int +glthread_once_multithreaded (gl_once_t *once_control, void (*initfunction) (void)) +{ + if (!once_control->inited) + { + int err; + + /* Use the mutex to guarantee that if another thread is already calling + the initfunction, this thread waits until it's finished. */ + err = mutex_lock (&once_control->mutex); + if (err != 0) + return err; + if (!once_control->inited) + { + once_control->inited = 1; + initfunction (); + } + return mutex_unlock (&once_control->mutex); + } + else + return 0; +} + +int +glthread_once_singlethreaded (gl_once_t *once_control) +{ + /* We know that gl_once_t contains an integer type. */ + if (!once_control->inited) + { + /* First time use of once_control. Invert the marker. */ + once_control->inited = ~ 0; + return 1; + } + else + return 0; +} + +#endif + +/* ========================================================================= */ + +#if USE_WINDOWS_THREADS + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +void +glthread_lock_init_func (gl_lock_t *lock) +{ + InitializeCriticalSection (&lock->lock); + lock->guard.done = 1; +} + +int +glthread_lock_lock_func (gl_lock_t *lock) +{ + if (!lock->guard.done) + { + if (InterlockedIncrement (&lock->guard.started) == 0) + /* This thread is the first one to need this lock. Initialize it. */ + glthread_lock_init (lock); + else + /* Yield the CPU while waiting for another thread to finish + initializing this lock. */ + while (!lock->guard.done) + Sleep (0); + } + EnterCriticalSection (&lock->lock); + return 0; +} + +int +glthread_lock_unlock_func (gl_lock_t *lock) +{ + if (!lock->guard.done) + return EINVAL; + LeaveCriticalSection (&lock->lock); + return 0; +} + +int +glthread_lock_destroy_func (gl_lock_t *lock) +{ + if (!lock->guard.done) + return EINVAL; + DeleteCriticalSection (&lock->lock); + lock->guard.done = 0; + return 0; +} + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +/* In this file, the waitqueues are implemented as circular arrays. */ +#define gl_waitqueue_t gl_carray_waitqueue_t + +static void +gl_waitqueue_init (gl_waitqueue_t *wq) +{ + wq->array = NULL; + wq->count = 0; + wq->alloc = 0; + wq->offset = 0; +} + +/* Enqueues the current thread, represented by an event, in a wait queue. + Returns INVALID_HANDLE_VALUE if an allocation failure occurs. */ +static HANDLE +gl_waitqueue_add (gl_waitqueue_t *wq) +{ + HANDLE event; + unsigned int index; + + if (wq->count == wq->alloc) + { + unsigned int new_alloc = 2 * wq->alloc + 1; + HANDLE *new_array = + (HANDLE *) realloc (wq->array, new_alloc * sizeof (HANDLE)); + if (new_array == NULL) + /* No more memory. */ + return INVALID_HANDLE_VALUE; + /* Now is a good opportunity to rotate the array so that its contents + starts at offset 0. */ + if (wq->offset > 0) + { + unsigned int old_count = wq->count; + unsigned int old_alloc = wq->alloc; + unsigned int old_offset = wq->offset; + unsigned int i; + if (old_offset + old_count > old_alloc) + { + unsigned int limit = old_offset + old_count - old_alloc; + for (i = 0; i < limit; i++) + new_array[old_alloc + i] = new_array[i]; + } + for (i = 0; i < old_count; i++) + new_array[i] = new_array[old_offset + i]; + wq->offset = 0; + } + wq->array = new_array; + wq->alloc = new_alloc; + } + /* Whether the created event is a manual-reset one or an auto-reset one, + does not matter, since we will wait on it only once. */ + event = CreateEvent (NULL, TRUE, FALSE, NULL); + if (event == INVALID_HANDLE_VALUE) + /* No way to allocate an event. */ + return INVALID_HANDLE_VALUE; + index = wq->offset + wq->count; + if (index >= wq->alloc) + index -= wq->alloc; + wq->array[index] = event; + wq->count++; + return event; +} + +/* Notifies the first thread from a wait queue and dequeues it. */ +static void +gl_waitqueue_notify_first (gl_waitqueue_t *wq) +{ + SetEvent (wq->array[wq->offset + 0]); + wq->offset++; + wq->count--; + if (wq->count == 0 || wq->offset == wq->alloc) + wq->offset = 0; +} + +/* Notifies all threads from a wait queue and dequeues them all. */ +static void +gl_waitqueue_notify_all (gl_waitqueue_t *wq) +{ + unsigned int i; + + for (i = 0; i < wq->count; i++) + { + unsigned int index = wq->offset + i; + if (index >= wq->alloc) + index -= wq->alloc; + SetEvent (wq->array[index]); + } + wq->count = 0; + wq->offset = 0; +} + +void +glthread_rwlock_init_func (gl_rwlock_t *lock) +{ + InitializeCriticalSection (&lock->lock); + gl_waitqueue_init (&lock->waiting_readers); + gl_waitqueue_init (&lock->waiting_writers); + lock->runcount = 0; + lock->guard.done = 1; +} + +int +glthread_rwlock_rdlock_func (gl_rwlock_t *lock) +{ + if (!lock->guard.done) + { + if (InterlockedIncrement (&lock->guard.started) == 0) + /* This thread is the first one to need this lock. Initialize it. */ + glthread_rwlock_init (lock); + else + /* Yield the CPU while waiting for another thread to finish + initializing this lock. */ + while (!lock->guard.done) + Sleep (0); + } + EnterCriticalSection (&lock->lock); + /* Test whether only readers are currently running, and whether the runcount + field will not overflow, and whether no writer is waiting. The latter + condition is because POSIX recommends that "write locks shall take + precedence over read locks", to avoid "writer starvation". */ + if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0)) + { + /* This thread has to wait for a while. Enqueue it among the + waiting_readers. */ + HANDLE event = gl_waitqueue_add (&lock->waiting_readers); + if (event != INVALID_HANDLE_VALUE) + { + DWORD result; + LeaveCriticalSection (&lock->lock); + /* Wait until another thread signals this event. */ + result = WaitForSingleObject (event, INFINITE); + if (result == WAIT_FAILED || result == WAIT_TIMEOUT) + abort (); + CloseHandle (event); + /* The thread which signalled the event already did the bookkeeping: + removed us from the waiting_readers, incremented lock->runcount. */ + if (!(lock->runcount > 0)) + abort (); + return 0; + } + else + { + /* Allocation failure. Weird. */ + do + { + LeaveCriticalSection (&lock->lock); + Sleep (1); + EnterCriticalSection (&lock->lock); + } + while (!(lock->runcount + 1 > 0)); + } + } + lock->runcount++; + LeaveCriticalSection (&lock->lock); + return 0; +} + +int +glthread_rwlock_wrlock_func (gl_rwlock_t *lock) +{ + if (!lock->guard.done) + { + if (InterlockedIncrement (&lock->guard.started) == 0) + /* This thread is the first one to need this lock. Initialize it. */ + glthread_rwlock_init (lock); + else + /* Yield the CPU while waiting for another thread to finish + initializing this lock. */ + while (!lock->guard.done) + Sleep (0); + } + EnterCriticalSection (&lock->lock); + /* Test whether no readers or writers are currently running. */ + if (!(lock->runcount == 0)) + { + /* This thread has to wait for a while. Enqueue it among the + waiting_writers. */ + HANDLE event = gl_waitqueue_add (&lock->waiting_writers); + if (event != INVALID_HANDLE_VALUE) + { + DWORD result; + LeaveCriticalSection (&lock->lock); + /* Wait until another thread signals this event. */ + result = WaitForSingleObject (event, INFINITE); + if (result == WAIT_FAILED || result == WAIT_TIMEOUT) + abort (); + CloseHandle (event); + /* The thread which signalled the event already did the bookkeeping: + removed us from the waiting_writers, set lock->runcount = -1. */ + if (!(lock->runcount == -1)) + abort (); + return 0; + } + else + { + /* Allocation failure. Weird. */ + do + { + LeaveCriticalSection (&lock->lock); + Sleep (1); + EnterCriticalSection (&lock->lock); + } + while (!(lock->runcount == 0)); + } + } + lock->runcount--; /* runcount becomes -1 */ + LeaveCriticalSection (&lock->lock); + return 0; +} + +int +glthread_rwlock_unlock_func (gl_rwlock_t *lock) +{ + if (!lock->guard.done) + return EINVAL; + EnterCriticalSection (&lock->lock); + if (lock->runcount < 0) + { + /* Drop a writer lock. */ + if (!(lock->runcount == -1)) + abort (); + lock->runcount = 0; + } + else + { + /* Drop a reader lock. */ + if (!(lock->runcount > 0)) + { + LeaveCriticalSection (&lock->lock); + return EPERM; + } + lock->runcount--; + } + if (lock->runcount == 0) + { + /* POSIX recommends that "write locks shall take precedence over read + locks", to avoid "writer starvation". */ + if (lock->waiting_writers.count > 0) + { + /* Wake up one of the waiting writers. */ + lock->runcount--; + gl_waitqueue_notify_first (&lock->waiting_writers); + } + else + { + /* Wake up all waiting readers. */ + lock->runcount += lock->waiting_readers.count; + gl_waitqueue_notify_all (&lock->waiting_readers); + } + } + LeaveCriticalSection (&lock->lock); + return 0; +} + +int +glthread_rwlock_destroy_func (gl_rwlock_t *lock) +{ + if (!lock->guard.done) + return EINVAL; + if (lock->runcount != 0) + return EBUSY; + DeleteCriticalSection (&lock->lock); + if (lock->waiting_readers.array != NULL) + free (lock->waiting_readers.array); + if (lock->waiting_writers.array != NULL) + free (lock->waiting_writers.array); + lock->guard.done = 0; + return 0; +} + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +void +glthread_recursive_lock_init_func (gl_recursive_lock_t *lock) +{ + lock->owner = 0; + lock->depth = 0; + InitializeCriticalSection (&lock->lock); + lock->guard.done = 1; +} + +int +glthread_recursive_lock_lock_func (gl_recursive_lock_t *lock) +{ + if (!lock->guard.done) + { + if (InterlockedIncrement (&lock->guard.started) == 0) + /* This thread is the first one to need this lock. Initialize it. */ + glthread_recursive_lock_init (lock); + else + /* Yield the CPU while waiting for another thread to finish + initializing this lock. */ + while (!lock->guard.done) + Sleep (0); + } + { + DWORD self = GetCurrentThreadId (); + if (lock->owner != self) + { + EnterCriticalSection (&lock->lock); + lock->owner = self; + } + if (++(lock->depth) == 0) /* wraparound? */ + { + lock->depth--; + return EAGAIN; + } + } + return 0; +} + +int +glthread_recursive_lock_unlock_func (gl_recursive_lock_t *lock) +{ + if (lock->owner != GetCurrentThreadId ()) + return EPERM; + if (lock->depth == 0) + return EINVAL; + if (--(lock->depth) == 0) + { + lock->owner = 0; + LeaveCriticalSection (&lock->lock); + } + return 0; +} + +int +glthread_recursive_lock_destroy_func (gl_recursive_lock_t *lock) +{ + if (lock->owner != 0) + return EBUSY; + DeleteCriticalSection (&lock->lock); + lock->guard.done = 0; + return 0; +} + +/* -------------------------- gl_once_t datatype -------------------------- */ + +void +glthread_once_func (gl_once_t *once_control, void (*initfunction) (void)) +{ + if (once_control->inited <= 0) + { + if (InterlockedIncrement (&once_control->started) == 0) + { + /* This thread is the first one to come to this once_control. */ + InitializeCriticalSection (&once_control->lock); + EnterCriticalSection (&once_control->lock); + once_control->inited = 0; + initfunction (); + once_control->inited = 1; + LeaveCriticalSection (&once_control->lock); + } + else + { + /* Undo last operation. */ + InterlockedDecrement (&once_control->started); + /* Some other thread has already started the initialization. + Yield the CPU while waiting for the other thread to finish + initializing and taking the lock. */ + while (once_control->inited < 0) + Sleep (0); + if (once_control->inited <= 0) + { + /* Take the lock. This blocks until the other thread has + finished calling the initfunction. */ + EnterCriticalSection (&once_control->lock); + LeaveCriticalSection (&once_control->lock); + if (!(once_control->inited > 0)) + abort (); + } + } + } +} + +#endif + +/* ========================================================================= */ diff --git a/devspec.en_US/project/recutils/lib/glthread/lock.h b/devspec.en_US/project/recutils/lib/glthread/lock.h new file mode 100755 index 0000000..22580aa --- /dev/null +++ b/devspec.en_US/project/recutils/lib/glthread/lock.h @@ -0,0 +1,985 @@ +/* Locking in multithreaded situations. + Copyright (C) 2005-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. + Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, + gthr-win32.h. */ + +/* This file contains locking primitives for use with a given thread library. + It does not contain primitives for creating threads or for other + synchronization primitives. + + Normal (non-recursive) locks: + Type: gl_lock_t + Declaration: gl_lock_define(extern, name) + Initializer: gl_lock_define_initialized(, name) + Initialization: gl_lock_init (name); + Taking the lock: gl_lock_lock (name); + Releasing the lock: gl_lock_unlock (name); + De-initialization: gl_lock_destroy (name); + Equivalent functions with control of error handling: + Initialization: err = glthread_lock_init (&name); + Taking the lock: err = glthread_lock_lock (&name); + Releasing the lock: err = glthread_lock_unlock (&name); + De-initialization: err = glthread_lock_destroy (&name); + + Read-Write (non-recursive) locks: + Type: gl_rwlock_t + Declaration: gl_rwlock_define(extern, name) + Initializer: gl_rwlock_define_initialized(, name) + Initialization: gl_rwlock_init (name); + Taking the lock: gl_rwlock_rdlock (name); + gl_rwlock_wrlock (name); + Releasing the lock: gl_rwlock_unlock (name); + De-initialization: gl_rwlock_destroy (name); + Equivalent functions with control of error handling: + Initialization: err = glthread_rwlock_init (&name); + Taking the lock: err = glthread_rwlock_rdlock (&name); + err = glthread_rwlock_wrlock (&name); + Releasing the lock: err = glthread_rwlock_unlock (&name); + De-initialization: err = glthread_rwlock_destroy (&name); + + Recursive locks: + Type: gl_recursive_lock_t + Declaration: gl_recursive_lock_define(extern, name) + Initializer: gl_recursive_lock_define_initialized(, name) + Initialization: gl_recursive_lock_init (name); + Taking the lock: gl_recursive_lock_lock (name); + Releasing the lock: gl_recursive_lock_unlock (name); + De-initialization: gl_recursive_lock_destroy (name); + Equivalent functions with control of error handling: + Initialization: err = glthread_recursive_lock_init (&name); + Taking the lock: err = glthread_recursive_lock_lock (&name); + Releasing the lock: err = glthread_recursive_lock_unlock (&name); + De-initialization: err = glthread_recursive_lock_destroy (&name); + + Once-only execution: + Type: gl_once_t + Initializer: gl_once_define(extern, name) + Execution: gl_once (name, initfunction); + Equivalent functions with control of error handling: + Execution: err = glthread_once (&name, initfunction); +*/ + + +#ifndef _LOCK_H +#define _LOCK_H + +#include <errno.h> +#include <stdlib.h> + +/* ========================================================================= */ + +#if USE_POSIX_THREADS + +/* Use the POSIX threads library. */ + +# include <pthread.h> + +# ifdef __cplusplus +extern "C" { +# endif + +# if PTHREAD_IN_USE_DETECTION_HARD + +/* The pthread_in_use() detection needs to be done at runtime. */ +# define pthread_in_use() \ + glthread_in_use () +extern int glthread_in_use (void); + +# endif + +# if USE_POSIX_THREADS_WEAK + +/* Use weak references to the POSIX threads library. */ + +/* Weak references avoid dragging in external libraries if the other parts + of the program don't use them. Here we use them, because we don't want + every program that uses libintl to depend on libpthread. This assumes + that libpthread would not be loaded after libintl; i.e. if libintl is + loaded first, by an executable that does not depend on libpthread, and + then a module is dynamically loaded that depends on libpthread, libintl + will not be multithread-safe. */ + +/* The way to test at runtime whether libpthread is present is to test + whether a function pointer's value, such as &pthread_mutex_init, is + non-NULL. However, some versions of GCC have a bug through which, in + PIC mode, &foo != NULL always evaluates to true if there is a direct + call to foo(...) in the same function. To avoid this, we test the + address of a function in libpthread that we don't use. */ + +# pragma weak pthread_mutex_init +# pragma weak pthread_mutex_lock +# pragma weak pthread_mutex_unlock +# pragma weak pthread_mutex_destroy +# pragma weak pthread_rwlock_init +# pragma weak pthread_rwlock_rdlock +# pragma weak pthread_rwlock_wrlock +# pragma weak pthread_rwlock_unlock +# pragma weak pthread_rwlock_destroy +# pragma weak pthread_once +# pragma weak pthread_cond_init +# pragma weak pthread_cond_wait +# pragma weak pthread_cond_signal +# pragma weak pthread_cond_broadcast +# pragma weak pthread_cond_destroy +# pragma weak pthread_mutexattr_init +# pragma weak pthread_mutexattr_settype +# pragma weak pthread_mutexattr_destroy +# pragma weak pthread_rwlockattr_init +# if __GNU_LIBRARY__ > 1 +# pragma weak pthread_rwlockattr_setkind_np +# endif +# pragma weak pthread_rwlockattr_destroy +# ifndef pthread_self +# pragma weak pthread_self +# endif + +# if !PTHREAD_IN_USE_DETECTION_HARD + /* Considering all platforms with USE_POSIX_THREADS_WEAK, only few symbols + can be used to determine whether libpthread is in use. These are: + pthread_mutexattr_gettype + pthread_rwlockattr_destroy + pthread_rwlockattr_init + */ +# pragma weak pthread_mutexattr_gettype +# define pthread_in_use() (pthread_mutexattr_gettype != NULL) +# endif + +# else + +# if !PTHREAD_IN_USE_DETECTION_HARD +# define pthread_in_use() 1 +# endif + +# endif + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +typedef pthread_mutex_t gl_lock_t; +# define gl_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS pthread_mutex_t NAME; +# define gl_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS pthread_mutex_t NAME = gl_lock_initializer; +# define gl_lock_initializer \ + PTHREAD_MUTEX_INITIALIZER +# define glthread_lock_init(LOCK) \ + (pthread_in_use () ? pthread_mutex_init (LOCK, NULL) : 0) +# define glthread_lock_lock(LOCK) \ + (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) +# define glthread_lock_unlock(LOCK) \ + (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) +# define glthread_lock_destroy(LOCK) \ + (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +# if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1))) + +# ifdef PTHREAD_RWLOCK_INITIALIZER + +typedef pthread_rwlock_t gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS pthread_rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS pthread_rwlock_t NAME = gl_rwlock_initializer; +# if HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER +# define gl_rwlock_initializer \ + PTHREAD_RWLOCK_INITIALIZER +# define glthread_rwlock_init(LOCK) \ + (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0) +# else /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */ +# define gl_rwlock_initializer \ + PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP +# define glthread_rwlock_init(LOCK) \ + (pthread_in_use () ? glthread_rwlock_init_for_glibc (LOCK) : 0) +extern int glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock); +# endif +# define glthread_rwlock_rdlock(LOCK) \ + (pthread_in_use () ? pthread_rwlock_rdlock (LOCK) : 0) +# define glthread_rwlock_wrlock(LOCK) \ + (pthread_in_use () ? pthread_rwlock_wrlock (LOCK) : 0) +# define glthread_rwlock_unlock(LOCK) \ + (pthread_in_use () ? pthread_rwlock_unlock (LOCK) : 0) +# define glthread_rwlock_destroy(LOCK) \ + (pthread_in_use () ? pthread_rwlock_destroy (LOCK) : 0) + +# else + +typedef struct + { + int initialized; + pthread_mutex_t guard; /* protects the initialization */ + pthread_rwlock_t rwlock; /* read-write lock */ + } + gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; +# define gl_rwlock_initializer \ + { 0, PTHREAD_MUTEX_INITIALIZER } +# define glthread_rwlock_init(LOCK) \ + (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) +# define glthread_rwlock_rdlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_wrlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_unlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_destroy(LOCK) \ + (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) +extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); + +# endif + +# else + +typedef struct + { + pthread_mutex_t lock; /* protects the remaining fields */ + pthread_cond_t waiting_readers; /* waiting readers */ + pthread_cond_t waiting_writers; /* waiting writers */ + unsigned int waiting_writers_count; /* number of waiting writers */ + int runcount; /* number of readers running, or -1 when a writer runs */ + } + gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; +# define gl_rwlock_initializer \ + { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 } +# define glthread_rwlock_init(LOCK) \ + (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) +# define glthread_rwlock_rdlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_wrlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_unlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_destroy(LOCK) \ + (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) +extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); + +# endif + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +# if HAVE_PTHREAD_MUTEX_RECURSIVE + +# if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP + +typedef pthread_mutex_t gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS pthread_mutex_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS pthread_mutex_t NAME = gl_recursive_lock_initializer; +# ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER +# define gl_recursive_lock_initializer \ + PTHREAD_RECURSIVE_MUTEX_INITIALIZER +# else +# define gl_recursive_lock_initializer \ + PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP +# endif +# define glthread_recursive_lock_init(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_lock(LOCK) \ + (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) +# define glthread_recursive_lock_unlock(LOCK) \ + (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) +# define glthread_recursive_lock_destroy(LOCK) \ + (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) +extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); + +# else + +typedef struct + { + pthread_mutex_t recmutex; /* recursive mutex */ + pthread_mutex_t guard; /* protects the initialization */ + int initialized; + } + gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; +# define gl_recursive_lock_initializer \ + { PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, 0 } +# define glthread_recursive_lock_init(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_lock(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_unlock(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_destroy(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) +extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); + +# endif + +# else + +/* Old versions of POSIX threads on Solaris did not have recursive locks. + We have to implement them ourselves. */ + +typedef struct + { + pthread_mutex_t mutex; + pthread_t owner; + unsigned long depth; + } + gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; +# define gl_recursive_lock_initializer \ + { PTHREAD_MUTEX_INITIALIZER, (pthread_t) 0, 0 } +# define glthread_recursive_lock_init(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_lock(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_unlock(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_destroy(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) +extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); + +# endif + +/* -------------------------- gl_once_t datatype -------------------------- */ + +typedef pthread_once_t gl_once_t; +# define gl_once_define(STORAGECLASS, NAME) \ + STORAGECLASS pthread_once_t NAME = PTHREAD_ONCE_INIT; +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (pthread_in_use () \ + ? pthread_once (ONCE_CONTROL, INITFUNCTION) \ + : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) +extern int glthread_once_singlethreaded (pthread_once_t *once_control); + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_PTH_THREADS + +/* Use the GNU Pth threads library. */ + +# include <pth.h> + +# ifdef __cplusplus +extern "C" { +# endif + +# if USE_PTH_THREADS_WEAK + +/* Use weak references to the GNU Pth threads library. */ + +# pragma weak pth_mutex_init +# pragma weak pth_mutex_acquire +# pragma weak pth_mutex_release +# pragma weak pth_rwlock_init +# pragma weak pth_rwlock_acquire +# pragma weak pth_rwlock_release +# pragma weak pth_once + +# pragma weak pth_cancel +# define pth_in_use() (pth_cancel != NULL) + +# else + +# define pth_in_use() 1 + +# endif + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +typedef pth_mutex_t gl_lock_t; +# define gl_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS pth_mutex_t NAME; +# define gl_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS pth_mutex_t NAME = gl_lock_initializer; +# define gl_lock_initializer \ + PTH_MUTEX_INIT +# define glthread_lock_init(LOCK) \ + (pth_in_use () && !pth_mutex_init (LOCK) ? errno : 0) +# define glthread_lock_lock(LOCK) \ + (pth_in_use () && !pth_mutex_acquire (LOCK, 0, NULL) ? errno : 0) +# define glthread_lock_unlock(LOCK) \ + (pth_in_use () && !pth_mutex_release (LOCK) ? errno : 0) +# define glthread_lock_destroy(LOCK) \ + ((void)(LOCK), 0) + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +/* Pth pth_rwlock_acquire always prefers readers. No autoconf test so far. */ +# if HAVE_PTH_RWLOCK_ACQUIRE_PREFER_WRITER + +typedef pth_rwlock_t gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS pth_rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS pth_rwlock_t NAME = gl_rwlock_initializer; +# define gl_rwlock_initializer \ + PTH_RWLOCK_INIT +# define glthread_rwlock_init(LOCK) \ + (pth_in_use () && !pth_rwlock_init (LOCK) ? errno : 0) +# define glthread_rwlock_rdlock(LOCK) \ + (pth_in_use () && !pth_rwlock_acquire (LOCK, PTH_RWLOCK_RD, 0, NULL) ? errno : 0) +# define glthread_rwlock_wrlock(LOCK) \ + (pth_in_use () && !pth_rwlock_acquire (LOCK, PTH_RWLOCK_RW, 0, NULL) ? errno : 0) +# define glthread_rwlock_unlock(LOCK) \ + (pth_in_use () && !pth_rwlock_release (LOCK) ? errno : 0) +# define glthread_rwlock_destroy(LOCK) \ + ((void)(LOCK), 0) + +# else + +typedef struct + { + int initialized; + pth_mutex_t lock; /* protects the remaining fields */ + pth_cond_t waiting_readers; /* waiting readers */ + pth_cond_t waiting_writers; /* waiting writers */ + unsigned int waiting_writers_count; /* number of waiting writers */ + int runcount; /* number of readers running, or -1 when a writer runs */ + } + gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; +# define gl_rwlock_initializer \ + { 0 } +# define glthread_rwlock_init(LOCK) \ + (pth_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) +# define glthread_rwlock_rdlock(LOCK) \ + (pth_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_wrlock(LOCK) \ + (pth_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_unlock(LOCK) \ + (pth_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_destroy(LOCK) \ + (pth_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) +extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); + +# endif + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +/* In Pth, mutexes are recursive by default. */ +typedef pth_mutex_t gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS pth_mutex_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS pth_mutex_t NAME = gl_recursive_lock_initializer; +# define gl_recursive_lock_initializer \ + PTH_MUTEX_INIT +# define glthread_recursive_lock_init(LOCK) \ + (pth_in_use () && !pth_mutex_init (LOCK) ? errno : 0) +# define glthread_recursive_lock_lock(LOCK) \ + (pth_in_use () && !pth_mutex_acquire (LOCK, 0, NULL) ? errno : 0) +# define glthread_recursive_lock_unlock(LOCK) \ + (pth_in_use () && !pth_mutex_release (LOCK) ? errno : 0) +# define glthread_recursive_lock_destroy(LOCK) \ + ((void)(LOCK), 0) + +/* -------------------------- gl_once_t datatype -------------------------- */ + +typedef pth_once_t gl_once_t; +# define gl_once_define(STORAGECLASS, NAME) \ + STORAGECLASS pth_once_t NAME = PTH_ONCE_INIT; +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (pth_in_use () \ + ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ + : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) +extern int glthread_once_multithreaded (pth_once_t *once_control, void (*initfunction) (void)); +extern int glthread_once_singlethreaded (pth_once_t *once_control); + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_SOLARIS_THREADS + +/* Use the old Solaris threads library. */ + +# include <thread.h> +# include <synch.h> + +# ifdef __cplusplus +extern "C" { +# endif + +# if USE_SOLARIS_THREADS_WEAK + +/* Use weak references to the old Solaris threads library. */ + +# pragma weak mutex_init +# pragma weak mutex_lock +# pragma weak mutex_unlock +# pragma weak mutex_destroy +# pragma weak rwlock_init +# pragma weak rw_rdlock +# pragma weak rw_wrlock +# pragma weak rw_unlock +# pragma weak rwlock_destroy +# pragma weak thr_self + +# pragma weak thr_suspend +# define thread_in_use() (thr_suspend != NULL) + +# else + +# define thread_in_use() 1 + +# endif + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +typedef mutex_t gl_lock_t; +# define gl_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS mutex_t NAME; +# define gl_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS mutex_t NAME = gl_lock_initializer; +# define gl_lock_initializer \ + DEFAULTMUTEX +# define glthread_lock_init(LOCK) \ + (thread_in_use () ? mutex_init (LOCK, USYNC_THREAD, NULL) : 0) +# define glthread_lock_lock(LOCK) \ + (thread_in_use () ? mutex_lock (LOCK) : 0) +# define glthread_lock_unlock(LOCK) \ + (thread_in_use () ? mutex_unlock (LOCK) : 0) +# define glthread_lock_destroy(LOCK) \ + (thread_in_use () ? mutex_destroy (LOCK) : 0) + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +typedef rwlock_t gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS rwlock_t NAME = gl_rwlock_initializer; +# define gl_rwlock_initializer \ + DEFAULTRWLOCK +# define glthread_rwlock_init(LOCK) \ + (thread_in_use () ? rwlock_init (LOCK, USYNC_THREAD, NULL) : 0) +# define glthread_rwlock_rdlock(LOCK) \ + (thread_in_use () ? rw_rdlock (LOCK) : 0) +# define glthread_rwlock_wrlock(LOCK) \ + (thread_in_use () ? rw_wrlock (LOCK) : 0) +# define glthread_rwlock_unlock(LOCK) \ + (thread_in_use () ? rw_unlock (LOCK) : 0) +# define glthread_rwlock_destroy(LOCK) \ + (thread_in_use () ? rwlock_destroy (LOCK) : 0) + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +/* Old Solaris threads did not have recursive locks. + We have to implement them ourselves. */ + +typedef struct + { + mutex_t mutex; + thread_t owner; + unsigned long depth; + } + gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; +# define gl_recursive_lock_initializer \ + { DEFAULTMUTEX, (thread_t) 0, 0 } +# define glthread_recursive_lock_init(LOCK) \ + (thread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_lock(LOCK) \ + (thread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_unlock(LOCK) \ + (thread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_destroy(LOCK) \ + (thread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) +extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); + +/* -------------------------- gl_once_t datatype -------------------------- */ + +typedef struct + { + volatile int inited; + mutex_t mutex; + } + gl_once_t; +# define gl_once_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_once_t NAME = { 0, DEFAULTMUTEX }; +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (thread_in_use () \ + ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ + : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) +extern int glthread_once_multithreaded (gl_once_t *once_control, void (*initfunction) (void)); +extern int glthread_once_singlethreaded (gl_once_t *once_control); + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_WINDOWS_THREADS + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include <windows.h> + +# ifdef __cplusplus +extern "C" { +# endif + +/* We can use CRITICAL_SECTION directly, rather than the native Windows Event, + Mutex, Semaphore types, because + - we need only to synchronize inside a single process (address space), + not inter-process locking, + - we don't need to support trylock operations. (TryEnterCriticalSection + does not work on Windows 95/98/ME. Packages that need trylock usually + define their own mutex type.) */ + +/* There is no way to statically initialize a CRITICAL_SECTION. It needs + to be done lazily, once only. For this we need spinlocks. */ + +typedef struct { volatile int done; volatile long started; } gl_spinlock_t; + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +typedef struct + { + gl_spinlock_t guard; /* protects the initialization */ + CRITICAL_SECTION lock; + } + gl_lock_t; +# define gl_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_lock_t NAME; +# define gl_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_lock_t NAME = gl_lock_initializer; +# define gl_lock_initializer \ + { { 0, -1 } } +# define glthread_lock_init(LOCK) \ + (glthread_lock_init_func (LOCK), 0) +# define glthread_lock_lock(LOCK) \ + glthread_lock_lock_func (LOCK) +# define glthread_lock_unlock(LOCK) \ + glthread_lock_unlock_func (LOCK) +# define glthread_lock_destroy(LOCK) \ + glthread_lock_destroy_func (LOCK) +extern void glthread_lock_init_func (gl_lock_t *lock); +extern int glthread_lock_lock_func (gl_lock_t *lock); +extern int glthread_lock_unlock_func (gl_lock_t *lock); +extern int glthread_lock_destroy_func (gl_lock_t *lock); + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +/* It is impossible to implement read-write locks using plain locks, without + introducing an extra thread dedicated to managing read-write locks. + Therefore here we need to use the low-level Event type. */ + +typedef struct + { + HANDLE *array; /* array of waiting threads, each represented by an event */ + unsigned int count; /* number of waiting threads */ + unsigned int alloc; /* length of allocated array */ + unsigned int offset; /* index of first waiting thread in array */ + } + gl_carray_waitqueue_t; +typedef struct + { + gl_spinlock_t guard; /* protects the initialization */ + CRITICAL_SECTION lock; /* protects the remaining fields */ + gl_carray_waitqueue_t waiting_readers; /* waiting readers */ + gl_carray_waitqueue_t waiting_writers; /* waiting writers */ + int runcount; /* number of readers running, or -1 when a writer runs */ + } + gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; +# define gl_rwlock_initializer \ + { { 0, -1 } } +# define glthread_rwlock_init(LOCK) \ + (glthread_rwlock_init_func (LOCK), 0) +# define glthread_rwlock_rdlock(LOCK) \ + glthread_rwlock_rdlock_func (LOCK) +# define glthread_rwlock_wrlock(LOCK) \ + glthread_rwlock_wrlock_func (LOCK) +# define glthread_rwlock_unlock(LOCK) \ + glthread_rwlock_unlock_func (LOCK) +# define glthread_rwlock_destroy(LOCK) \ + glthread_rwlock_destroy_func (LOCK) +extern void glthread_rwlock_init_func (gl_rwlock_t *lock); +extern int glthread_rwlock_rdlock_func (gl_rwlock_t *lock); +extern int glthread_rwlock_wrlock_func (gl_rwlock_t *lock); +extern int glthread_rwlock_unlock_func (gl_rwlock_t *lock); +extern int glthread_rwlock_destroy_func (gl_rwlock_t *lock); + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +/* The native Windows documentation says that CRITICAL_SECTION already + implements a recursive lock. But we need not rely on it: It's easy to + implement a recursive lock without this assumption. */ + +typedef struct + { + gl_spinlock_t guard; /* protects the initialization */ + DWORD owner; + unsigned long depth; + CRITICAL_SECTION lock; + } + gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; +# define gl_recursive_lock_initializer \ + { { 0, -1 }, 0, 0 } +# define glthread_recursive_lock_init(LOCK) \ + (glthread_recursive_lock_init_func (LOCK), 0) +# define glthread_recursive_lock_lock(LOCK) \ + glthread_recursive_lock_lock_func (LOCK) +# define glthread_recursive_lock_unlock(LOCK) \ + glthread_recursive_lock_unlock_func (LOCK) +# define glthread_recursive_lock_destroy(LOCK) \ + glthread_recursive_lock_destroy_func (LOCK) +extern void glthread_recursive_lock_init_func (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_lock_func (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_unlock_func (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_destroy_func (gl_recursive_lock_t *lock); + +/* -------------------------- gl_once_t datatype -------------------------- */ + +typedef struct + { + volatile int inited; + volatile long started; + CRITICAL_SECTION lock; + } + gl_once_t; +# define gl_once_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_once_t NAME = { -1, -1 }; +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (glthread_once_func (ONCE_CONTROL, INITFUNCTION), 0) +extern void glthread_once_func (gl_once_t *once_control, void (*initfunction) (void)); + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WINDOWS_THREADS) + +/* Provide dummy implementation if threads are not supported. */ + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +typedef int gl_lock_t; +# define gl_lock_define(STORAGECLASS, NAME) +# define gl_lock_define_initialized(STORAGECLASS, NAME) +# define glthread_lock_init(NAME) 0 +# define glthread_lock_lock(NAME) 0 +# define glthread_lock_unlock(NAME) 0 +# define glthread_lock_destroy(NAME) 0 + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +typedef int gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) +# define glthread_rwlock_init(NAME) 0 +# define glthread_rwlock_rdlock(NAME) 0 +# define glthread_rwlock_wrlock(NAME) 0 +# define glthread_rwlock_unlock(NAME) 0 +# define glthread_rwlock_destroy(NAME) 0 + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +typedef int gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) +# define glthread_recursive_lock_init(NAME) 0 +# define glthread_recursive_lock_lock(NAME) 0 +# define glthread_recursive_lock_unlock(NAME) 0 +# define glthread_recursive_lock_destroy(NAME) 0 + +/* -------------------------- gl_once_t datatype -------------------------- */ + +typedef int gl_once_t; +# define gl_once_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_once_t NAME = 0; +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (*(ONCE_CONTROL) == 0 ? (*(ONCE_CONTROL) = ~ 0, INITFUNCTION (), 0) : 0) + +#endif + +/* ========================================================================= */ + +/* Macros with built-in error handling. */ + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +#define gl_lock_init(NAME) \ + do \ + { \ + if (glthread_lock_init (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_lock_lock(NAME) \ + do \ + { \ + if (glthread_lock_lock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_lock_unlock(NAME) \ + do \ + { \ + if (glthread_lock_unlock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_lock_destroy(NAME) \ + do \ + { \ + if (glthread_lock_destroy (&NAME)) \ + abort (); \ + } \ + while (0) + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +#define gl_rwlock_init(NAME) \ + do \ + { \ + if (glthread_rwlock_init (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_rwlock_rdlock(NAME) \ + do \ + { \ + if (glthread_rwlock_rdlock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_rwlock_wrlock(NAME) \ + do \ + { \ + if (glthread_rwlock_wrlock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_rwlock_unlock(NAME) \ + do \ + { \ + if (glthread_rwlock_unlock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_rwlock_destroy(NAME) \ + do \ + { \ + if (glthread_rwlock_destroy (&NAME)) \ + abort (); \ + } \ + while (0) + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +#define gl_recursive_lock_init(NAME) \ + do \ + { \ + if (glthread_recursive_lock_init (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_recursive_lock_lock(NAME) \ + do \ + { \ + if (glthread_recursive_lock_lock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_recursive_lock_unlock(NAME) \ + do \ + { \ + if (glthread_recursive_lock_unlock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_recursive_lock_destroy(NAME) \ + do \ + { \ + if (glthread_recursive_lock_destroy (&NAME)) \ + abort (); \ + } \ + while (0) + +/* -------------------------- gl_once_t datatype -------------------------- */ + +#define gl_once(NAME, INITFUNCTION) \ + do \ + { \ + if (glthread_once (&NAME, INITFUNCTION)) \ + abort (); \ + } \ + while (0) + +/* ========================================================================= */ + +#endif /* _LOCK_H */ diff --git a/devspec.en_US/project/recutils/lib/glthread/threadlib.c b/devspec.en_US/project/recutils/lib/glthread/threadlib.c new file mode 100755 index 0000000..a5ebd9b --- /dev/null +++ b/devspec.en_US/project/recutils/lib/glthread/threadlib.c @@ -0,0 +1,73 @@ +/* Multithreading primitives. + Copyright (C) 2005-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. */ + +#include <config.h> + +/* ========================================================================= */ + +#if USE_POSIX_THREADS + +/* Use the POSIX threads library. */ + +# include <pthread.h> +# include <stdlib.h> + +# if PTHREAD_IN_USE_DETECTION_HARD + +/* The function to be executed by a dummy thread. */ +static void * +dummy_thread_func (void *arg) +{ + return arg; +} + +int +glthread_in_use (void) +{ + static int tested; + static int result; /* 1: linked with -lpthread, 0: only with libc */ + + if (!tested) + { + pthread_t thread; + + if (pthread_create (&thread, NULL, dummy_thread_func, NULL) != 0) + /* Thread creation failed. */ + result = 0; + else + { + /* Thread creation works. */ + void *retval; + if (pthread_join (thread, &retval) != 0) + abort (); + result = 1; + } + tested = 1; + } + return result; +} + +# endif + +#endif + +/* ========================================================================= */ + +/* This declaration is solely to ensure that after preprocessing + this file is never empty. */ +typedef int dummy; diff --git a/devspec.en_US/project/recutils/lib/group-member.c b/devspec.en_US/project/recutils/lib/group-member.c new file mode 100755 index 0000000..ad61cf0 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/group-member.c @@ -0,0 +1,115 @@ +/* group-member.c -- determine whether group id is in calling user's group list + + Copyright (C) 1994, 1997-1998, 2003, 2005-2006, 2009-2019 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <unistd.h> + +#include <stdio.h> +#include <sys/types.h> +#include <stdlib.h> + +#include "xalloc-oversized.h" + +/* Most processes have no more than this many groups, and for these + processes we can avoid using malloc. */ +enum { GROUPBUF_SIZE = 100 }; + +struct group_info + { + gid_t *group; + gid_t groupbuf[GROUPBUF_SIZE]; + }; + +static void +free_group_info (struct group_info const *g) +{ + if (g->group != g->groupbuf) + free (g->group); +} + +static int +get_group_info (struct group_info *gi) +{ + int n_groups = getgroups (GROUPBUF_SIZE, gi->groupbuf); + gi->group = gi->groupbuf; + + if (n_groups < 0) + { + int n_group_slots = getgroups (0, NULL); + if (0 <= n_group_slots + && ! xalloc_oversized (n_group_slots, sizeof *gi->group)) + { + gi->group = malloc (n_group_slots * sizeof *gi->group); + if (gi->group) + n_groups = getgroups (n_group_slots, gi->group); + } + } + + /* In case of error, the user loses. */ + return n_groups; +} + +/* Return non-zero if GID is one that we have in our groups list. + Note that the groups list is not guaranteed to contain the current + or effective group ID, so they should generally be checked + separately. */ + +int +group_member (gid_t gid) +{ + int i; + int found; + struct group_info gi; + int n_groups = get_group_info (&gi); + + /* Search through the list looking for GID. */ + found = 0; + for (i = 0; i < n_groups; i++) + { + if (gid == gi.group[i]) + { + found = 1; + break; + } + } + + free_group_info (&gi); + + return found; +} + +#ifdef TEST + +int +main (int argc, char **argv) +{ + int i; + + for (i = 1; i < argc; i++) + { + gid_t gid; + + gid = atoi (argv[i]); + printf ("%d: %s\n", gid, group_member (gid) ? "yes" : "no"); + } + exit (0); +} + +#endif /* TEST */ diff --git a/devspec.en_US/project/recutils/lib/hard-locale.c b/devspec.en_US/project/recutils/lib/hard-locale.c new file mode 100755 index 0000000..dcfcad6 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/hard-locale.c @@ -0,0 +1,72 @@ +/* hard-locale.c -- Determine whether a locale is hard. + + Copyright (C) 1997-1999, 2002-2004, 2006-2007, 2009-2019 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include "hard-locale.h" + +#include <locale.h> +#include <stdlib.h> +#include <string.h> + +#ifdef __GLIBC__ +# define GLIBC_VERSION __GLIBC__ +#elif defined __UCLIBC__ +# define GLIBC_VERSION 2 +#else +# define GLIBC_VERSION 0 +#endif + +/* Return true if the current CATEGORY locale is hard, i.e. if you + can't get away with assuming traditional C or POSIX behavior. */ +bool +hard_locale (int category) +{ + bool hard = true; + char const *p = setlocale (category, NULL); + + if (p) + { + if (2 <= GLIBC_VERSION) + { + if (strcmp (p, "C") == 0 || strcmp (p, "POSIX") == 0) + hard = false; + } + else + { + char *locale = strdup (p); + if (locale) + { + /* Temporarily set the locale to the "C" and "POSIX" locales + to find their names, so that we can determine whether one + or the other is the caller's locale. */ + if (((p = setlocale (category, "C")) + && strcmp (p, locale) == 0) + || ((p = setlocale (category, "POSIX")) + && strcmp (p, locale) == 0)) + hard = false; + + /* Restore the caller's locale. */ + setlocale (category, locale); + free (locale); + } + } + } + + return hard; +} diff --git a/devspec.en_US/project/recutils/lib/hard-locale.h b/devspec.en_US/project/recutils/lib/hard-locale.h new file mode 100755 index 0000000..8f1da96 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/hard-locale.h @@ -0,0 +1,25 @@ +/* Determine whether a locale is hard. + + Copyright (C) 1999, 2003-2004, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef HARD_LOCALE_H_ +# define HARD_LOCALE_H_ 1 + +# include <stdbool.h> + +bool hard_locale (int); + +#endif /* HARD_LOCALE_H_ */ diff --git a/devspec.en_US/project/recutils/lib/intprops.h b/devspec.en_US/project/recutils/lib/intprops.h new file mode 100755 index 0000000..1a44ae5 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/intprops.h @@ -0,0 +1,455 @@ +/* intprops.h -- properties of integer types + + Copyright (C) 2001-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert. */ + +#ifndef _GL_INTPROPS_H +#define _GL_INTPROPS_H + +#include <limits.h> + +/* Return a value with the common real type of E and V and the value of V. + Do not evaluate E. */ +#define _GL_INT_CONVERT(e, v) ((1 ? 0 : (e)) + (v)) + +/* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see + <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00406.html>. */ +#define _GL_INT_NEGATE_CONVERT(e, v) ((1 ? 0 : (e)) - (v)) + +/* The extra casts in the following macros work around compiler bugs, + e.g., in Cray C 5.0.3.0. */ + +/* True if the arithmetic type T is an integer type. bool counts as + an integer. */ +#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) + +/* True if the real type T is signed. */ +#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) + +/* Return 1 if the real expression E, after promotion, has a + signed or floating type. Do not evaluate E. */ +#define EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) + + +/* Minimum and maximum values for integer types and expressions. */ + +/* The width in bits of the integer type or expression T. + Do not evaluate T. + Padding bits are not supported; this is checked at compile-time below. */ +#define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) + +/* The maximum and minimum values for the integer type T. */ +#define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) +#define TYPE_MAXIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) -1 \ + : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) + +/* The maximum and minimum values for the type of the expression E, + after integer promotion. E is not evaluated. */ +#define _GL_INT_MINIMUM(e) \ + (EXPR_SIGNED (e) \ + ? ~ _GL_SIGNED_INT_MAXIMUM (e) \ + : _GL_INT_CONVERT (e, 0)) +#define _GL_INT_MAXIMUM(e) \ + (EXPR_SIGNED (e) \ + ? _GL_SIGNED_INT_MAXIMUM (e) \ + : _GL_INT_NEGATE_CONVERT (e, 1)) +#define _GL_SIGNED_INT_MAXIMUM(e) \ + (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH ((e) + 0) - 2)) - 1) * 2 + 1) + +/* Work around OpenVMS incompatibility with C99. */ +#if !defined LLONG_MAX && defined __INT64_MAX +# define LLONG_MAX __INT64_MAX +# define LLONG_MIN __INT64_MIN +#endif + +/* This include file assumes that signed types are two's complement without + padding bits; the above macros have undefined behavior otherwise. + If this is a problem for you, please let us know how to fix it for your host. + This assumption is tested by the intprops-tests module. */ + +/* Does the __typeof__ keyword work? This could be done by + 'configure', but for now it's easier to do it by hand. */ +#if (2 <= __GNUC__ \ + || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \ + || (0x5110 <= __SUNPRO_C && !__STDC__)) +# define _GL_HAVE___TYPEOF__ 1 +#else +# define _GL_HAVE___TYPEOF__ 0 +#endif + +/* Return 1 if the integer type or expression T might be signed. Return 0 + if it is definitely unsigned. This macro does not evaluate its argument, + and expands to an integer constant expression. */ +#if _GL_HAVE___TYPEOF__ +# define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t)) +#else +# define _GL_SIGNED_TYPE_OR_EXPR(t) 1 +#endif + +/* Bound on length of the string representing an unsigned integer + value representable in B bits. log10 (2.0) < 146/485. The + smallest value of B where this bound is not tight is 2621. */ +#define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485) + +/* Bound on length of the string representing an integer type or expression T. + Subtract 1 for the sign bit if T is signed, and then add 1 more for + a minus sign if needed. + + Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 0 when its argument is + signed, this macro may overestimate the true bound by one byte when + applied to unsigned types of size 2, 4, 16, ... bytes. */ +#define INT_STRLEN_BOUND(t) \ + (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \ + + _GL_SIGNED_TYPE_OR_EXPR (t)) + +/* Bound on buffer size needed to represent an integer type or expression T, + including the terminating null. */ +#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) + + +/* Range overflow checks. + + The INT_<op>_RANGE_OVERFLOW macros return 1 if the corresponding C + operators might not yield numerically correct answers due to + arithmetic overflow. They do not rely on undefined or + implementation-defined behavior. Their implementations are simple + and straightforward, but they are a bit harder to use than the + INT_<op>_OVERFLOW macros described below. + + Example usage: + + long int i = ...; + long int j = ...; + if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX)) + printf ("multiply would overflow"); + else + printf ("product is %ld", i * j); + + Restrictions on *_RANGE_OVERFLOW macros: + + These macros do not check for all possible numerical problems or + undefined or unspecified behavior: they do not check for division + by zero, for bad shift counts, or for shifting negative numbers. + + These macros may evaluate their arguments zero or multiple times, + so the arguments should not have side effects. The arithmetic + arguments (including the MIN and MAX arguments) must be of the same + integer type after the usual arithmetic conversions, and the type + must have minimum value MIN and maximum MAX. Unsigned types should + use a zero MIN of the proper type. + + These macros are tuned for constant MIN and MAX. For commutative + operations such as A + B, they are also tuned for constant B. */ + +/* Return 1 if A + B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. */ +#define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \ + ((b) < 0 \ + ? (a) < (min) - (b) \ + : (max) - (b) < (a)) + +/* Return 1 if A - B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. */ +#define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \ + ((b) < 0 \ + ? (max) + (b) < (a) \ + : (a) < (min) + (b)) + +/* Return 1 if - A would overflow in [MIN,MAX] arithmetic. + See above for restrictions. */ +#define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ + ((min) < 0 \ + ? (a) < - (max) \ + : 0 < (a)) + +/* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Avoid && and || as they tickle + bugs in Sun C 5.11 2010/08/13 and other compilers; see + <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00401.html>. */ +#define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ + ((b) < 0 \ + ? ((a) < 0 \ + ? (a) < (max) / (b) \ + : (b) == -1 \ + ? 0 \ + : (min) / (b) < (a)) \ + : (b) == 0 \ + ? 0 \ + : ((a) < 0 \ + ? (a) < (min) / (b) \ + : (max) / (b) < (a))) + +/* Return 1 if A / B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Do not check for division by zero. */ +#define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \ + ((min) < 0 && (b) == -1 && (a) < - (max)) + +/* Return 1 if A % B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Do not check for division by zero. + Mathematically, % should never overflow, but on x86-like hosts + INT_MIN % -1 traps, and the C standard permits this, so treat this + as an overflow too. */ +#define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \ + INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max) + +/* Return 1 if A << B would overflow in [MIN,MAX] arithmetic. + See above for restrictions. Here, MIN and MAX are for A only, and B need + not be of the same type as the other arguments. The C standard says that + behavior is undefined for shifts unless 0 <= B < wordwidth, and that when + A is negative then A << B has undefined behavior and A >> B has + implementation-defined behavior, but do not check these other + restrictions. */ +#define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \ + ((a) < 0 \ + ? (a) < (min) >> (b) \ + : (max) >> (b) < (a)) + +/* True if __builtin_add_overflow (A, B, P) works when P is non-null. */ +#if 5 <= __GNUC__ && !defined __ICC +# define _GL_HAS_BUILTIN_OVERFLOW 1 +#else +# define _GL_HAS_BUILTIN_OVERFLOW 0 +#endif + +/* True if __builtin_add_overflow_p (A, B, C) works. */ +#define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__) + +/* The _GL*_OVERFLOW macros have the same restrictions as the + *_RANGE_OVERFLOW macros, except that they do not assume that operands + (e.g., A and B) have the same type as MIN and MAX. Instead, they assume + that the result (e.g., A + B) has that type. */ +#if _GL_HAS_BUILTIN_OVERFLOW_P +# define _GL_ADD_OVERFLOW(a, b, min, max) \ + __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0) +# define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ + __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0) +# define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ + __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0) +#else +# define _GL_ADD_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ + : (a) < 0 ? (b) <= (a) + (b) \ + : (b) < 0 ? (a) <= (a) + (b) \ + : (a) + (b) < (b)) +# define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ + : (a) < 0 ? 1 \ + : (b) < 0 ? (a) - (b) <= (a) \ + : (a) < (b)) +# define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ + (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ + || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) +#endif +#define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ + : (a) < 0 ? (b) <= (a) + (b) - 1 \ + : (b) < 0 && (a) + (b) <= (a)) +#define _GL_REMAINDER_OVERFLOW(a, b, min, max) \ + ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ + : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \ + : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max)) + +/* Return a nonzero value if A is a mathematical multiple of B, where + A is unsigned, B is negative, and MAX is the maximum value of A's + type. A's type must be the same as (A % B)'s type. Normally (A % + -B == 0) suffices, but things get tricky if -B would overflow. */ +#define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \ + (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \ + ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \ + ? (a) \ + : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \ + : (a) % - (b)) \ + == 0) + +/* Check for integer overflow, and report low order bits of answer. + + The INT_<op>_OVERFLOW macros return 1 if the corresponding C operators + might not yield numerically correct answers due to arithmetic overflow. + The INT_<op>_WRAPV macros also store the low-order bits of the answer. + These macros work correctly on all known practical hosts, and do not rely + on undefined behavior due to signed arithmetic overflow. + + Example usage, assuming A and B are long int: + + if (INT_MULTIPLY_OVERFLOW (a, b)) + printf ("result would overflow\n"); + else + printf ("result is %ld (no overflow)\n", a * b); + + Example usage with WRAPV flavor: + + long int result; + bool overflow = INT_MULTIPLY_WRAPV (a, b, &result); + printf ("result is %ld (%s)\n", result, + overflow ? "after overflow" : "no overflow"); + + Restrictions on these macros: + + These macros do not check for all possible numerical problems or + undefined or unspecified behavior: they do not check for division + by zero, for bad shift counts, or for shifting negative numbers. + + These macros may evaluate their arguments zero or multiple times, so the + arguments should not have side effects. + + The WRAPV macros are not constant expressions. They support only + +, binary -, and *. The result type must be signed. + + These macros are tuned for their last argument being a constant. + + Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, + A % B, and A << B would overflow, respectively. */ + +#define INT_ADD_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) +#define INT_SUBTRACT_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) +#if _GL_HAS_BUILTIN_OVERFLOW_P +# define INT_NEGATE_OVERFLOW(a) INT_SUBTRACT_OVERFLOW (0, a) +#else +# define INT_NEGATE_OVERFLOW(a) \ + INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) +#endif +#define INT_MULTIPLY_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) +#define INT_DIVIDE_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW) +#define INT_REMAINDER_OVERFLOW(a, b) \ + _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW) +#define INT_LEFT_SHIFT_OVERFLOW(a, b) \ + INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \ + _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) + +/* Return 1 if the expression A <op> B would overflow, + where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test, + assuming MIN and MAX are the minimum and maximum for the result type. + Arguments should be free of side effects. */ +#define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ + op_result_overflow (a, b, \ + _GL_INT_MINIMUM (_GL_INT_CONVERT (a, b)), \ + _GL_INT_MAXIMUM (_GL_INT_CONVERT (a, b))) + +/* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. + Return 1 if the result overflows. See above for restrictions. */ +#define INT_ADD_WRAPV(a, b, r) \ + _GL_INT_OP_WRAPV (a, b, r, +, __builtin_add_overflow, INT_ADD_OVERFLOW) +#define INT_SUBTRACT_WRAPV(a, b, r) \ + _GL_INT_OP_WRAPV (a, b, r, -, __builtin_sub_overflow, INT_SUBTRACT_OVERFLOW) +#define INT_MULTIPLY_WRAPV(a, b, r) \ + _GL_INT_OP_WRAPV (a, b, r, *, __builtin_mul_overflow, INT_MULTIPLY_OVERFLOW) + +/* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See: + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193 + https://llvm.org/bugs/show_bug.cgi?id=25390 + For now, assume all versions of GCC-like compilers generate bogus + warnings for _Generic. This matters only for older compilers that + lack __builtin_add_overflow. */ +#if __GNUC__ +# define _GL__GENERIC_BOGUS 1 +#else +# define _GL__GENERIC_BOGUS 0 +#endif + +/* Store the low-order bits of A <op> B into *R, where OP specifies + the operation. BUILTIN is the builtin operation, and OVERFLOW the + overflow predicate. Return 1 if the result overflows. See above + for restrictions. */ +#if _GL_HAS_BUILTIN_OVERFLOW +# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) builtin (a, b, r) +#elif 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS +# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \ + (_Generic \ + (*(r), \ + signed char: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + signed char, SCHAR_MIN, SCHAR_MAX), \ + short int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + short int, SHRT_MIN, SHRT_MAX), \ + int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + int, INT_MIN, INT_MAX), \ + long int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + long int, LONG_MIN, LONG_MAX), \ + long long int: \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ + long long int, LLONG_MIN, LLONG_MAX))) +#else +# define _GL_INT_OP_WRAPV(a, b, r, op, builtin, overflow) \ + (sizeof *(r) == sizeof (signed char) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + signed char, SCHAR_MIN, SCHAR_MAX) \ + : sizeof *(r) == sizeof (short int) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + short int, SHRT_MIN, SHRT_MAX) \ + : sizeof *(r) == sizeof (int) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ + int, INT_MIN, INT_MAX) \ + : _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow)) +# ifdef LLONG_MAX +# define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ + (sizeof *(r) == sizeof (long int) \ + ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + long int, LONG_MIN, LONG_MAX) \ + : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ + long long int, LLONG_MIN, LLONG_MAX)) +# else +# define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ + _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ + long int, LONG_MIN, LONG_MAX) +# endif +#endif + +/* Store the low-order bits of A <op> B into *R, where the operation + is given by OP. Use the unsigned type UT for calculation to avoid + overflow problems. *R's type is T, with extrema TMIN and TMAX. + T must be a signed integer type. Return 1 if the result overflows. */ +#define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \ + (sizeof ((a) op (b)) < sizeof (t) \ + ? _GL_INT_OP_CALC1 ((t) (a), (t) (b), r, op, overflow, ut, t, tmin, tmax) \ + : _GL_INT_OP_CALC1 (a, b, r, op, overflow, ut, t, tmin, tmax)) +#define _GL_INT_OP_CALC1(a, b, r, op, overflow, ut, t, tmin, tmax) \ + ((overflow (a, b) \ + || (EXPR_SIGNED ((a) op (b)) && ((a) op (b)) < (tmin)) \ + || (tmax) < ((a) op (b))) \ + ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \ + : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0)) + +/* Return the low-order bits of A <op> B, where the operation is given + by OP. Use the unsigned type UT for calculation to avoid undefined + behavior on signed integer overflow, and convert the result to type T. + UT is at least as wide as T and is no narrower than unsigned int, + T is two's complement, and there is no padding or trap representations. + Assume that converting UT to T yields the low-order bits, as is + done in all known two's-complement C compilers. E.g., see: + https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html + + According to the C standard, converting UT to T yields an + implementation-defined result or signal for values outside T's + range. However, code that works around this theoretical problem + runs afoul of a compiler bug in Oracle Studio 12.3 x86. See: + https://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html + As the compiler bug is real, don't try to work around the + theoretical problem. */ + +#define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \ + ((t) ((ut) (a) op (ut) (b))) + +#endif /* _GL_INTPROPS_H */ diff --git a/devspec.en_US/project/recutils/lib/inttypes.h b/devspec.en_US/project/recutils/lib/inttypes.h new file mode 100755 index 0000000..02ee671 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/inttypes.h @@ -0,0 +1,1620 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Copyright (C) 2006-2019 Free Software Foundation, Inc. + Written by Paul Eggert, Bruno Haible, Derek Price. + This file is part of gnulib. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* + * ISO C 99 <inttypes.h> for platforms that lack it. + * <http://www.opengroup.org/susv3xbd/inttypes.h.html> + */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* Include the original <inttypes.h> if it exists, and if this file + has not been included yet or if this file includes gnulib stdint.h + which in turn includes this file. + The include_next requires a split double-inclusion guard. */ +#if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H +# if 1 + + /* Some pre-C++11 <stdint.h> implementations need this. */ +# if defined __cplusplus && ! defined __STDC_FORMAT_MACROS +# define __STDC_FORMAT_MACROS 1 +# endif + +# include_next <inttypes.h> +# endif +#endif + +#if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H +#define INTTYPES_H + +/* Include <stdint.h> or the gnulib replacement. + But avoid namespace pollution on glibc systems. */ +#ifndef __GLIBC__ +# include <stdint.h> +#endif +/* Get CHAR_BIT. */ +#include <limits.h> +/* On mingw, __USE_MINGW_ANSI_STDIO only works if <stdio.h> is also included */ +#if defined _WIN32 && ! defined __CYGWIN__ +# include <stdio.h> +#endif + +#if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX) +# error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>." +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* 7.8.1 Macros for format specifiers */ + +#if defined _TNS_R_TARGET + /* Tandem NonStop R series and compatible platforms released before + July 2005 support %Ld but not %lld. */ +# define _LONG_LONG_FORMAT_PREFIX "L" +#else +# define _LONG_LONG_FORMAT_PREFIX "ll" +#endif + +#if !defined PRId8 || 0 +# undef PRId8 +# ifdef INT8_MAX +# define PRId8 "d" +# endif +#endif +#if !defined PRIi8 || 0 +# undef PRIi8 +# ifdef INT8_MAX +# define PRIi8 "i" +# endif +#endif +#if !defined PRIo8 || 0 +# undef PRIo8 +# ifdef UINT8_MAX +# define PRIo8 "o" +# endif +#endif +#if !defined PRIu8 || 0 +# undef PRIu8 +# ifdef UINT8_MAX +# define PRIu8 "u" +# endif +#endif +#if !defined PRIx8 || 0 +# undef PRIx8 +# ifdef UINT8_MAX +# define PRIx8 "x" +# endif +#endif +#if !defined PRIX8 || 0 +# undef PRIX8 +# ifdef UINT8_MAX +# define PRIX8 "X" +# endif +#endif +#if !defined PRId16 || 0 +# undef PRId16 +# ifdef INT16_MAX +# define PRId16 "d" +# endif +#endif +#if !defined PRIi16 || 0 +# undef PRIi16 +# ifdef INT16_MAX +# define PRIi16 "i" +# endif +#endif +#if !defined PRIo16 || 0 +# undef PRIo16 +# ifdef UINT16_MAX +# define PRIo16 "o" +# endif +#endif +#if !defined PRIu16 || 0 +# undef PRIu16 +# ifdef UINT16_MAX +# define PRIu16 "u" +# endif +#endif +#if !defined PRIx16 || 0 +# undef PRIx16 +# ifdef UINT16_MAX +# define PRIx16 "x" +# endif +#endif +#if !defined PRIX16 || 0 +# undef PRIX16 +# ifdef UINT16_MAX +# define PRIX16 "X" +# endif +#endif +#if !defined PRId32 || 0 +# undef PRId32 +# ifdef INT32_MAX +# define PRId32 "d" +# endif +#endif +#if !defined PRIi32 || 0 +# undef PRIi32 +# ifdef INT32_MAX +# define PRIi32 "i" +# endif +#endif +#if !defined PRIo32 || 0 +# undef PRIo32 +# ifdef UINT32_MAX +# define PRIo32 "o" +# endif +#endif +#if !defined PRIu32 || 0 +# undef PRIu32 +# ifdef UINT32_MAX +# define PRIu32 "u" +# endif +#endif +#if !defined PRIx32 || 0 +# undef PRIx32 +# ifdef UINT32_MAX +# define PRIx32 "x" +# endif +#endif +#if !defined PRIX32 || 0 +# undef PRIX32 +# ifdef UINT32_MAX +# define PRIX32 "X" +# endif +#endif +#ifdef INT64_MAX +# if (0 ? defined _LP64 : 0) +# define _PRI64_PREFIX "l" +# elif defined _MSC_VER || defined __MINGW32__ +# define _PRI64_PREFIX "I64" +# elif 1 && LONG_MAX >> 30 == 1 +# define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX +# endif +# if !defined PRId64 || 0 +# undef PRId64 +# define PRId64 _PRI64_PREFIX "d" +# endif +# if !defined PRIi64 || 0 +# undef PRIi64 +# define PRIi64 _PRI64_PREFIX "i" +# endif +#endif +#ifdef UINT64_MAX +# if (0 ? defined _LP64 : 0) +# define _PRIu64_PREFIX "l" +# elif defined _MSC_VER || defined __MINGW32__ +# define _PRIu64_PREFIX "I64" +# elif 1 && ULONG_MAX >> 31 == 1 +# define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX +# endif +# if !defined PRIo64 || 0 +# undef PRIo64 +# define PRIo64 _PRIu64_PREFIX "o" +# endif +# if !defined PRIu64 || 0 +# undef PRIu64 +# define PRIu64 _PRIu64_PREFIX "u" +# endif +# if !defined PRIx64 || 0 +# undef PRIx64 +# define PRIx64 _PRIu64_PREFIX "x" +# endif +# if !defined PRIX64 || 0 +# undef PRIX64 +# define PRIX64 _PRIu64_PREFIX "X" +# endif +#endif + +#if !defined PRIdLEAST8 || 0 +# undef PRIdLEAST8 +# define PRIdLEAST8 "d" +#endif +#if !defined PRIiLEAST8 || 0 +# undef PRIiLEAST8 +# define PRIiLEAST8 "i" +#endif +#if !defined PRIoLEAST8 || 0 +# undef PRIoLEAST8 +# define PRIoLEAST8 "o" +#endif +#if !defined PRIuLEAST8 || 0 +# undef PRIuLEAST8 +# define PRIuLEAST8 "u" +#endif +#if !defined PRIxLEAST8 || 0 +# undef PRIxLEAST8 +# define PRIxLEAST8 "x" +#endif +#if !defined PRIXLEAST8 || 0 +# undef PRIXLEAST8 +# define PRIXLEAST8 "X" +#endif +#if !defined PRIdLEAST16 || 0 +# undef PRIdLEAST16 +# define PRIdLEAST16 "d" +#endif +#if !defined PRIiLEAST16 || 0 +# undef PRIiLEAST16 +# define PRIiLEAST16 "i" +#endif +#if !defined PRIoLEAST16 || 0 +# undef PRIoLEAST16 +# define PRIoLEAST16 "o" +#endif +#if !defined PRIuLEAST16 || 0 +# undef PRIuLEAST16 +# define PRIuLEAST16 "u" +#endif +#if !defined PRIxLEAST16 || 0 +# undef PRIxLEAST16 +# define PRIxLEAST16 "x" +#endif +#if !defined PRIXLEAST16 || 0 +# undef PRIXLEAST16 +# define PRIXLEAST16 "X" +#endif +#if !defined PRIdLEAST32 || 0 +# undef PRIdLEAST32 +# define PRIdLEAST32 "d" +#endif +#if !defined PRIiLEAST32 || 0 +# undef PRIiLEAST32 +# define PRIiLEAST32 "i" +#endif +#if !defined PRIoLEAST32 || 0 +# undef PRIoLEAST32 +# define PRIoLEAST32 "o" +#endif +#if !defined PRIuLEAST32 || 0 +# undef PRIuLEAST32 +# define PRIuLEAST32 "u" +#endif +#if !defined PRIxLEAST32 || 0 +# undef PRIxLEAST32 +# define PRIxLEAST32 "x" +#endif +#if !defined PRIXLEAST32 || 0 +# undef PRIXLEAST32 +# define PRIXLEAST32 "X" +#endif +#ifdef INT64_MAX +# if !defined PRIdLEAST64 || 0 +# undef PRIdLEAST64 +# define PRIdLEAST64 PRId64 +# endif +# if !defined PRIiLEAST64 || 0 +# undef PRIiLEAST64 +# define PRIiLEAST64 PRIi64 +# endif +#endif +#ifdef UINT64_MAX +# if !defined PRIoLEAST64 || 0 +# undef PRIoLEAST64 +# define PRIoLEAST64 PRIo64 +# endif +# if !defined PRIuLEAST64 || 0 +# undef PRIuLEAST64 +# define PRIuLEAST64 PRIu64 +# endif +# if !defined PRIxLEAST64 || 0 +# undef PRIxLEAST64 +# define PRIxLEAST64 PRIx64 +# endif +# if !defined PRIXLEAST64 || 0 +# undef PRIXLEAST64 +# define PRIXLEAST64 PRIX64 +# endif +#endif + +#if !defined PRIdFAST8 || 0 +# undef PRIdFAST8 +# if INT_FAST8_MAX > INT32_MAX +# define PRIdFAST8 PRId64 +# else +# define PRIdFAST8 "d" +# endif +#endif +#if !defined PRIiFAST8 || 0 +# undef PRIiFAST8 +# if INT_FAST8_MAX > INT32_MAX +# define PRIiFAST8 PRIi64 +# else +# define PRIiFAST8 "i" +# endif +#endif +#if !defined PRIoFAST8 || 0 +# undef PRIoFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define PRIoFAST8 PRIo64 +# else +# define PRIoFAST8 "o" +# endif +#endif +#if !defined PRIuFAST8 || 0 +# undef PRIuFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define PRIuFAST8 PRIu64 +# else +# define PRIuFAST8 "u" +# endif +#endif +#if !defined PRIxFAST8 || 0 +# undef PRIxFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define PRIxFAST8 PRIx64 +# else +# define PRIxFAST8 "x" +# endif +#endif +#if !defined PRIXFAST8 || 0 +# undef PRIXFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define PRIXFAST8 PRIX64 +# else +# define PRIXFAST8 "X" +# endif +#endif +#if !defined PRIdFAST16 || 0 +# undef PRIdFAST16 +# if INT_FAST16_MAX > INT32_MAX +# define PRIdFAST16 PRId64 +# else +# define PRIdFAST16 "d" +# endif +#endif +#if !defined PRIiFAST16 || 0 +# undef PRIiFAST16 +# if INT_FAST16_MAX > INT32_MAX +# define PRIiFAST16 PRIi64 +# else +# define PRIiFAST16 "i" +# endif +#endif +#if !defined PRIoFAST16 || 0 +# undef PRIoFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define PRIoFAST16 PRIo64 +# else +# define PRIoFAST16 "o" +# endif +#endif +#if !defined PRIuFAST16 || 0 +# undef PRIuFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define PRIuFAST16 PRIu64 +# else +# define PRIuFAST16 "u" +# endif +#endif +#if !defined PRIxFAST16 || 0 +# undef PRIxFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define PRIxFAST16 PRIx64 +# else +# define PRIxFAST16 "x" +# endif +#endif +#if !defined PRIXFAST16 || 0 +# undef PRIXFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define PRIXFAST16 PRIX64 +# else +# define PRIXFAST16 "X" +# endif +#endif +#if !defined PRIdFAST32 || 0 +# undef PRIdFAST32 +# if INT_FAST32_MAX > INT32_MAX +# define PRIdFAST32 PRId64 +# else +# define PRIdFAST32 "d" +# endif +#endif +#if !defined PRIiFAST32 || 0 +# undef PRIiFAST32 +# if INT_FAST32_MAX > INT32_MAX +# define PRIiFAST32 PRIi64 +# else +# define PRIiFAST32 "i" +# endif +#endif +#if !defined PRIoFAST32 || 0 +# undef PRIoFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define PRIoFAST32 PRIo64 +# else +# define PRIoFAST32 "o" +# endif +#endif +#if !defined PRIuFAST32 || 0 +# undef PRIuFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define PRIuFAST32 PRIu64 +# else +# define PRIuFAST32 "u" +# endif +#endif +#if !defined PRIxFAST32 || 0 +# undef PRIxFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define PRIxFAST32 PRIx64 +# else +# define PRIxFAST32 "x" +# endif +#endif +#if !defined PRIXFAST32 || 0 +# undef PRIXFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define PRIXFAST32 PRIX64 +# else +# define PRIXFAST32 "X" +# endif +#endif +#ifdef INT64_MAX +# if !defined PRIdFAST64 || 0 +# undef PRIdFAST64 +# define PRIdFAST64 PRId64 +# endif +# if !defined PRIiFAST64 || 0 +# undef PRIiFAST64 +# define PRIiFAST64 PRIi64 +# endif +#endif +#ifdef UINT64_MAX +# if !defined PRIoFAST64 || 0 +# undef PRIoFAST64 +# define PRIoFAST64 PRIo64 +# endif +# if !defined PRIuFAST64 || 0 +# undef PRIuFAST64 +# define PRIuFAST64 PRIu64 +# endif +# if !defined PRIxFAST64 || 0 +# undef PRIxFAST64 +# define PRIxFAST64 PRIx64 +# endif +# if !defined PRIXFAST64 || 0 +# undef PRIXFAST64 +# define PRIXFAST64 PRIX64 +# endif +#endif + +#if !defined PRIdMAX || 0 +# undef PRIdMAX +# if 1 +# define PRIdMAX PRId64 +# else +# define PRIdMAX "ld" +# endif +#endif +#if !defined PRIiMAX || 0 +# undef PRIiMAX +# if 1 +# define PRIiMAX PRIi64 +# else +# define PRIiMAX "li" +# endif +#endif +#if !defined PRIoMAX || 0 +# undef PRIoMAX +# if 1 +# define PRIoMAX PRIo64 +# else +# define PRIoMAX "lo" +# endif +#endif +#if !defined PRIuMAX || 0 +# undef PRIuMAX +# if 1 +# define PRIuMAX PRIu64 +# else +# define PRIuMAX "lu" +# endif +#endif +#if !defined PRIxMAX || 0 +# undef PRIxMAX +# if 1 +# define PRIxMAX PRIx64 +# else +# define PRIxMAX "lx" +# endif +#endif +#if !defined PRIXMAX || 0 +# undef PRIXMAX +# if 1 +# define PRIXMAX PRIX64 +# else +# define PRIXMAX "lX" +# endif +#endif + +#if !defined PRIdPTR || 0 +# undef PRIdPTR +# ifdef INTPTR_MAX +# define PRIdPTR "l" "d" +# endif +#endif +#if !defined PRIiPTR || 0 +# undef PRIiPTR +# ifdef INTPTR_MAX +# define PRIiPTR "l" "i" +# endif +#endif +#if !defined PRIoPTR || 0 +# undef PRIoPTR +# ifdef UINTPTR_MAX +# define PRIoPTR "l" "o" +# endif +#endif +#if !defined PRIuPTR || 0 +# undef PRIuPTR +# ifdef UINTPTR_MAX +# define PRIuPTR "l" "u" +# endif +#endif +#if !defined PRIxPTR || 0 +# undef PRIxPTR +# ifdef UINTPTR_MAX +# define PRIxPTR "l" "x" +# endif +#endif +#if !defined PRIXPTR || 0 +# undef PRIXPTR +# ifdef UINTPTR_MAX +# define PRIXPTR "l" "X" +# endif +#endif + +#if !defined SCNd8 || 0 +# undef SCNd8 +# ifdef INT8_MAX +# define SCNd8 "hhd" +# endif +#endif +#if !defined SCNi8 || 0 +# undef SCNi8 +# ifdef INT8_MAX +# define SCNi8 "hhi" +# endif +#endif +#if !defined SCNo8 || 0 +# undef SCNo8 +# ifdef UINT8_MAX +# define SCNo8 "hho" +# endif +#endif +#if !defined SCNu8 || 0 +# undef SCNu8 +# ifdef UINT8_MAX +# define SCNu8 "hhu" +# endif +#endif +#if !defined SCNx8 || 0 +# undef SCNx8 +# ifdef UINT8_MAX +# define SCNx8 "hhx" +# endif +#endif +#if !defined SCNd16 || 0 +# undef SCNd16 +# ifdef INT16_MAX +# define SCNd16 "hd" +# endif +#endif +#if !defined SCNi16 || 0 +# undef SCNi16 +# ifdef INT16_MAX +# define SCNi16 "hi" +# endif +#endif +#if !defined SCNo16 || 0 +# undef SCNo16 +# ifdef UINT16_MAX +# define SCNo16 "ho" +# endif +#endif +#if !defined SCNu16 || 0 +# undef SCNu16 +# ifdef UINT16_MAX +# define SCNu16 "hu" +# endif +#endif +#if !defined SCNx16 || 0 +# undef SCNx16 +# ifdef UINT16_MAX +# define SCNx16 "hx" +# endif +#endif +#if !defined SCNd32 || 0 +# undef SCNd32 +# ifdef INT32_MAX +# define SCNd32 "d" +# endif +#endif +#if !defined SCNi32 || 0 +# undef SCNi32 +# ifdef INT32_MAX +# define SCNi32 "i" +# endif +#endif +#if !defined SCNo32 || 0 +# undef SCNo32 +# ifdef UINT32_MAX +# define SCNo32 "o" +# endif +#endif +#if !defined SCNu32 || 0 +# undef SCNu32 +# ifdef UINT32_MAX +# define SCNu32 "u" +# endif +#endif +#if !defined SCNx32 || 0 +# undef SCNx32 +# ifdef UINT32_MAX +# define SCNx32 "x" +# endif +#endif +#ifdef INT64_MAX +# if (0 ? defined _LP64 : 0) +# define _SCN64_PREFIX "l" +# elif defined _MSC_VER || defined __MINGW32__ +# define _SCN64_PREFIX "I64" +# elif 1 && LONG_MAX >> 30 == 1 +# define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX +# endif +# if !defined SCNd64 || 0 +# undef SCNd64 +# define SCNd64 _SCN64_PREFIX "d" +# endif +# if !defined SCNi64 || 0 +# undef SCNi64 +# define SCNi64 _SCN64_PREFIX "i" +# endif +#endif +#ifdef UINT64_MAX +# if (0 ? defined _LP64 : 0) +# define _SCNu64_PREFIX "l" +# elif defined _MSC_VER || defined __MINGW32__ +# define _SCNu64_PREFIX "I64" +# elif 1 && ULONG_MAX >> 31 == 1 +# define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX +# endif +# if !defined SCNo64 || 0 +# undef SCNo64 +# define SCNo64 _SCNu64_PREFIX "o" +# endif +# if !defined SCNu64 || 0 +# undef SCNu64 +# define SCNu64 _SCNu64_PREFIX "u" +# endif +# if !defined SCNx64 || 0 +# undef SCNx64 +# define SCNx64 _SCNu64_PREFIX "x" +# endif +#endif + +#if !defined SCNdLEAST8 || 0 +# undef SCNdLEAST8 +# define SCNdLEAST8 "hhd" +#endif +#if !defined SCNiLEAST8 || 0 +# undef SCNiLEAST8 +# define SCNiLEAST8 "hhi" +#endif +#if !defined SCNoLEAST8 || 0 +# undef SCNoLEAST8 +# define SCNoLEAST8 "hho" +#endif +#if !defined SCNuLEAST8 || 0 +# undef SCNuLEAST8 +# define SCNuLEAST8 "hhu" +#endif +#if !defined SCNxLEAST8 || 0 +# undef SCNxLEAST8 +# define SCNxLEAST8 "hhx" +#endif +#if !defined SCNdLEAST16 || 0 +# undef SCNdLEAST16 +# define SCNdLEAST16 "hd" +#endif +#if !defined SCNiLEAST16 || 0 +# undef SCNiLEAST16 +# define SCNiLEAST16 "hi" +#endif +#if !defined SCNoLEAST16 || 0 +# undef SCNoLEAST16 +# define SCNoLEAST16 "ho" +#endif +#if !defined SCNuLEAST16 || 0 +# undef SCNuLEAST16 +# define SCNuLEAST16 "hu" +#endif +#if !defined SCNxLEAST16 || 0 +# undef SCNxLEAST16 +# define SCNxLEAST16 "hx" +#endif +#if !defined SCNdLEAST32 || 0 +# undef SCNdLEAST32 +# define SCNdLEAST32 "d" +#endif +#if !defined SCNiLEAST32 || 0 +# undef SCNiLEAST32 +# define SCNiLEAST32 "i" +#endif +#if !defined SCNoLEAST32 || 0 +# undef SCNoLEAST32 +# define SCNoLEAST32 "o" +#endif +#if !defined SCNuLEAST32 || 0 +# undef SCNuLEAST32 +# define SCNuLEAST32 "u" +#endif +#if !defined SCNxLEAST32 || 0 +# undef SCNxLEAST32 +# define SCNxLEAST32 "x" +#endif +#ifdef INT64_MAX +# if !defined SCNdLEAST64 || 0 +# undef SCNdLEAST64 +# define SCNdLEAST64 SCNd64 +# endif +# if !defined SCNiLEAST64 || 0 +# undef SCNiLEAST64 +# define SCNiLEAST64 SCNi64 +# endif +#endif +#ifdef UINT64_MAX +# if !defined SCNoLEAST64 || 0 +# undef SCNoLEAST64 +# define SCNoLEAST64 SCNo64 +# endif +# if !defined SCNuLEAST64 || 0 +# undef SCNuLEAST64 +# define SCNuLEAST64 SCNu64 +# endif +# if !defined SCNxLEAST64 || 0 +# undef SCNxLEAST64 +# define SCNxLEAST64 SCNx64 +# endif +#endif + +#if !defined SCNdFAST8 || 0 +# undef SCNdFAST8 +# if INT_FAST8_MAX > INT32_MAX +# define SCNdFAST8 SCNd64 +# elif INT_FAST8_MAX == 0x7fff +# define SCNdFAST8 "hd" +# elif INT_FAST8_MAX == 0x7f +# define SCNdFAST8 "hhd" +# else +# define SCNdFAST8 "d" +# endif +#endif +#if !defined SCNiFAST8 || 0 +# undef SCNiFAST8 +# if INT_FAST8_MAX > INT32_MAX +# define SCNiFAST8 SCNi64 +# elif INT_FAST8_MAX == 0x7fff +# define SCNiFAST8 "hi" +# elif INT_FAST8_MAX == 0x7f +# define SCNiFAST8 "hhi" +# else +# define SCNiFAST8 "i" +# endif +#endif +#if !defined SCNoFAST8 || 0 +# undef SCNoFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define SCNoFAST8 SCNo64 +# elif UINT_FAST8_MAX == 0xffff +# define SCNoFAST8 "ho" +# elif UINT_FAST8_MAX == 0xff +# define SCNoFAST8 "hho" +# else +# define SCNoFAST8 "o" +# endif +#endif +#if !defined SCNuFAST8 || 0 +# undef SCNuFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define SCNuFAST8 SCNu64 +# elif UINT_FAST8_MAX == 0xffff +# define SCNuFAST8 "hu" +# elif UINT_FAST8_MAX == 0xff +# define SCNuFAST8 "hhu" +# else +# define SCNuFAST8 "u" +# endif +#endif +#if !defined SCNxFAST8 || 0 +# undef SCNxFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define SCNxFAST8 SCNx64 +# elif UINT_FAST8_MAX == 0xffff +# define SCNxFAST8 "hx" +# elif UINT_FAST8_MAX == 0xff +# define SCNxFAST8 "hhx" +# else +# define SCNxFAST8 "x" +# endif +#endif +#if !defined SCNdFAST16 || 0 +# undef SCNdFAST16 +# if INT_FAST16_MAX > INT32_MAX +# define SCNdFAST16 SCNd64 +# elif INT_FAST16_MAX == 0x7fff +# define SCNdFAST16 "hd" +# else +# define SCNdFAST16 "d" +# endif +#endif +#if !defined SCNiFAST16 || 0 +# undef SCNiFAST16 +# if INT_FAST16_MAX > INT32_MAX +# define SCNiFAST16 SCNi64 +# elif INT_FAST16_MAX == 0x7fff +# define SCNiFAST16 "hi" +# else +# define SCNiFAST16 "i" +# endif +#endif +#if !defined SCNoFAST16 || 0 +# undef SCNoFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define SCNoFAST16 SCNo64 +# elif UINT_FAST16_MAX == 0xffff +# define SCNoFAST16 "ho" +# else +# define SCNoFAST16 "o" +# endif +#endif +#if !defined SCNuFAST16 || 0 +# undef SCNuFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define SCNuFAST16 SCNu64 +# elif UINT_FAST16_MAX == 0xffff +# define SCNuFAST16 "hu" +# else +# define SCNuFAST16 "u" +# endif +#endif +#if !defined SCNxFAST16 || 0 +# undef SCNxFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define SCNxFAST16 SCNx64 +# elif UINT_FAST16_MAX == 0xffff +# define SCNxFAST16 "hx" +# else +# define SCNxFAST16 "x" +# endif +#endif +#if !defined SCNdFAST32 || 0 +# undef SCNdFAST32 +# if INT_FAST32_MAX > INT32_MAX +# define SCNdFAST32 SCNd64 +# else +# define SCNdFAST32 "d" +# endif +#endif +#if !defined SCNiFAST32 || 0 +# undef SCNiFAST32 +# if INT_FAST32_MAX > INT32_MAX +# define SCNiFAST32 SCNi64 +# else +# define SCNiFAST32 "i" +# endif +#endif +#if !defined SCNoFAST32 || 0 +# undef SCNoFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define SCNoFAST32 SCNo64 +# else +# define SCNoFAST32 "o" +# endif +#endif +#if !defined SCNuFAST32 || 0 +# undef SCNuFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define SCNuFAST32 SCNu64 +# else +# define SCNuFAST32 "u" +# endif +#endif +#if !defined SCNxFAST32 || 0 +# undef SCNxFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define SCNxFAST32 SCNx64 +# else +# define SCNxFAST32 "x" +# endif +#endif +#ifdef INT64_MAX +# if !defined SCNdFAST64 || 0 +# undef SCNdFAST64 +# define SCNdFAST64 SCNd64 +# endif +# if !defined SCNiFAST64 || 0 +# undef SCNiFAST64 +# define SCNiFAST64 SCNi64 +# endif +#endif +#ifdef UINT64_MAX +# if !defined SCNoFAST64 || 0 +# undef SCNoFAST64 +# define SCNoFAST64 SCNo64 +# endif +# if !defined SCNuFAST64 || 0 +# undef SCNuFAST64 +# define SCNuFAST64 SCNu64 +# endif +# if !defined SCNxFAST64 || 0 +# undef SCNxFAST64 +# define SCNxFAST64 SCNx64 +# endif +#endif + +#if !defined SCNdMAX || 0 +# undef SCNdMAX +# if 1 +# define SCNdMAX SCNd64 +# else +# define SCNdMAX "ld" +# endif +#endif +#if !defined SCNiMAX || 0 +# undef SCNiMAX +# if 1 +# define SCNiMAX SCNi64 +# else +# define SCNiMAX "li" +# endif +#endif +#if !defined SCNoMAX || 0 +# undef SCNoMAX +# if 1 +# define SCNoMAX SCNo64 +# else +# define SCNoMAX "lo" +# endif +#endif +#if !defined SCNuMAX || 0 +# undef SCNuMAX +# if 1 +# define SCNuMAX SCNu64 +# else +# define SCNuMAX "lu" +# endif +#endif +#if !defined SCNxMAX || 0 +# undef SCNxMAX +# if 1 +# define SCNxMAX SCNx64 +# else +# define SCNxMAX "lx" +# endif +#endif + +#if !defined SCNdPTR || 0 +# undef SCNdPTR +# ifdef INTPTR_MAX +# define SCNdPTR "l" "d" +# endif +#endif +#if !defined SCNiPTR || 0 +# undef SCNiPTR +# ifdef INTPTR_MAX +# define SCNiPTR "l" "i" +# endif +#endif +#if !defined SCNoPTR || 0 +# undef SCNoPTR +# ifdef UINTPTR_MAX +# define SCNoPTR "l" "o" +# endif +#endif +#if !defined SCNuPTR || 0 +# undef SCNuPTR +# ifdef UINTPTR_MAX +# define SCNuPTR "l" "u" +# endif +#endif +#if !defined SCNxPTR || 0 +# undef SCNxPTR +# ifdef UINTPTR_MAX +# define SCNxPTR "l" "x" +# endif +#endif + +/* 7.8.2 Functions for greatest-width integer types */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if 0 +# if !1 +extern intmax_t imaxabs (intmax_t); +# endif +#elif defined GNULIB_POSIXCHECK +# undef imaxabs +# if HAVE_RAW_DECL_IMAXABS +_GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - " + "use gnulib module imaxabs for portability"); +# endif +#endif + +#if 0 +# if !1 +# if !GNULIB_defined_imaxdiv_t +typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t; +# define GNULIB_defined_imaxdiv_t 1 +# endif +# endif +# if !1 +extern imaxdiv_t imaxdiv (intmax_t, intmax_t); +# endif +#elif defined GNULIB_POSIXCHECK +# undef imaxdiv +# if HAVE_RAW_DECL_IMAXDIV +_GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - " + "use gnulib module imaxdiv for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strtoimax +# define strtoimax rpl_strtoimax +# endif +_GL_FUNCDECL_RPL (strtoimax, intmax_t, + (const char *, char **, int) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoimax, intmax_t, (const char *, char **, int)); +# else +# if !1 +# undef strtoimax +_GL_FUNCDECL_SYS (strtoimax, intmax_t, + (const char *, char **, int) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoimax, intmax_t, (const char *, char **, int)); +# endif +_GL_CXXALIASWARN (strtoimax); +#elif defined GNULIB_POSIXCHECK +# undef strtoimax +# if HAVE_RAW_DECL_STRTOIMAX +_GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - " + "use gnulib module strtoimax for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strtoumax +# define strtoumax rpl_strtoumax +# endif +_GL_FUNCDECL_RPL (strtoumax, uintmax_t, + (const char *, char **, int) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoumax, uintmax_t, (const char *, char **, int)); +# else +# if !1 +# undef strtoumax +_GL_FUNCDECL_SYS (strtoumax, uintmax_t, + (const char *, char **, int) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoumax, uintmax_t, (const char *, char **, int)); +# endif +_GL_CXXALIASWARN (strtoumax); +#elif defined GNULIB_POSIXCHECK +# undef strtoumax +# if HAVE_RAW_DECL_STRTOUMAX +_GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - " + "use gnulib module strtoumax for portability"); +# endif +#endif + +/* Don't bother defining or declaring wcstoimax and wcstoumax, since + wide-character functions like this are hardly ever useful. */ + +#ifdef __cplusplus +} +#endif + +#endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */ diff --git a/devspec.en_US/project/recutils/lib/inttypes.in.h b/devspec.en_US/project/recutils/lib/inttypes.in.h new file mode 100755 index 0000000..d3c735c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/inttypes.in.h @@ -0,0 +1,1146 @@ +/* Copyright (C) 2006-2019 Free Software Foundation, Inc. + Written by Paul Eggert, Bruno Haible, Derek Price. + This file is part of gnulib. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* + * ISO C 99 <inttypes.h> for platforms that lack it. + * <http://www.opengroup.org/susv3xbd/inttypes.h.html> + */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* Include the original <inttypes.h> if it exists, and if this file + has not been included yet or if this file includes gnulib stdint.h + which in turn includes this file. + The include_next requires a split double-inclusion guard. */ +#if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H +# if @HAVE_INTTYPES_H@ + + /* Some pre-C++11 <stdint.h> implementations need this. */ +# if defined __cplusplus && ! defined __STDC_FORMAT_MACROS +# define __STDC_FORMAT_MACROS 1 +# endif + +# @INCLUDE_NEXT@ @NEXT_INTTYPES_H@ +# endif +#endif + +#if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H +#define INTTYPES_H + +/* Include <stdint.h> or the gnulib replacement. + But avoid namespace pollution on glibc systems. */ +#ifndef __GLIBC__ +# include <stdint.h> +#endif +/* Get CHAR_BIT. */ +#include <limits.h> +/* On mingw, __USE_MINGW_ANSI_STDIO only works if <stdio.h> is also included */ +#if defined _WIN32 && ! defined __CYGWIN__ +# include <stdio.h> +#endif + +#if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX) +# error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>." +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +/* 7.8.1 Macros for format specifiers */ + +#if defined _TNS_R_TARGET + /* Tandem NonStop R series and compatible platforms released before + July 2005 support %Ld but not %lld. */ +# define _LONG_LONG_FORMAT_PREFIX "L" +#else +# define _LONG_LONG_FORMAT_PREFIX "ll" +#endif + +#if !defined PRId8 || @PRI_MACROS_BROKEN@ +# undef PRId8 +# ifdef INT8_MAX +# define PRId8 "d" +# endif +#endif +#if !defined PRIi8 || @PRI_MACROS_BROKEN@ +# undef PRIi8 +# ifdef INT8_MAX +# define PRIi8 "i" +# endif +#endif +#if !defined PRIo8 || @PRI_MACROS_BROKEN@ +# undef PRIo8 +# ifdef UINT8_MAX +# define PRIo8 "o" +# endif +#endif +#if !defined PRIu8 || @PRI_MACROS_BROKEN@ +# undef PRIu8 +# ifdef UINT8_MAX +# define PRIu8 "u" +# endif +#endif +#if !defined PRIx8 || @PRI_MACROS_BROKEN@ +# undef PRIx8 +# ifdef UINT8_MAX +# define PRIx8 "x" +# endif +#endif +#if !defined PRIX8 || @PRI_MACROS_BROKEN@ +# undef PRIX8 +# ifdef UINT8_MAX +# define PRIX8 "X" +# endif +#endif +#if !defined PRId16 || @PRI_MACROS_BROKEN@ +# undef PRId16 +# ifdef INT16_MAX +# define PRId16 "d" +# endif +#endif +#if !defined PRIi16 || @PRI_MACROS_BROKEN@ +# undef PRIi16 +# ifdef INT16_MAX +# define PRIi16 "i" +# endif +#endif +#if !defined PRIo16 || @PRI_MACROS_BROKEN@ +# undef PRIo16 +# ifdef UINT16_MAX +# define PRIo16 "o" +# endif +#endif +#if !defined PRIu16 || @PRI_MACROS_BROKEN@ +# undef PRIu16 +# ifdef UINT16_MAX +# define PRIu16 "u" +# endif +#endif +#if !defined PRIx16 || @PRI_MACROS_BROKEN@ +# undef PRIx16 +# ifdef UINT16_MAX +# define PRIx16 "x" +# endif +#endif +#if !defined PRIX16 || @PRI_MACROS_BROKEN@ +# undef PRIX16 +# ifdef UINT16_MAX +# define PRIX16 "X" +# endif +#endif +#if !defined PRId32 || @PRI_MACROS_BROKEN@ +# undef PRId32 +# ifdef INT32_MAX +# define PRId32 "d" +# endif +#endif +#if !defined PRIi32 || @PRI_MACROS_BROKEN@ +# undef PRIi32 +# ifdef INT32_MAX +# define PRIi32 "i" +# endif +#endif +#if !defined PRIo32 || @PRI_MACROS_BROKEN@ +# undef PRIo32 +# ifdef UINT32_MAX +# define PRIo32 "o" +# endif +#endif +#if !defined PRIu32 || @PRI_MACROS_BROKEN@ +# undef PRIu32 +# ifdef UINT32_MAX +# define PRIu32 "u" +# endif +#endif +#if !defined PRIx32 || @PRI_MACROS_BROKEN@ +# undef PRIx32 +# ifdef UINT32_MAX +# define PRIx32 "x" +# endif +#endif +#if !defined PRIX32 || @PRI_MACROS_BROKEN@ +# undef PRIX32 +# ifdef UINT32_MAX +# define PRIX32 "X" +# endif +#endif +#ifdef INT64_MAX +# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@) +# define _PRI64_PREFIX "l" +# elif defined _MSC_VER || defined __MINGW32__ +# define _PRI64_PREFIX "I64" +# elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +# define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX +# endif +# if !defined PRId64 || @PRI_MACROS_BROKEN@ +# undef PRId64 +# define PRId64 _PRI64_PREFIX "d" +# endif +# if !defined PRIi64 || @PRI_MACROS_BROKEN@ +# undef PRIi64 +# define PRIi64 _PRI64_PREFIX "i" +# endif +#endif +#ifdef UINT64_MAX +# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@) +# define _PRIu64_PREFIX "l" +# elif defined _MSC_VER || defined __MINGW32__ +# define _PRIu64_PREFIX "I64" +# elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +# define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX +# endif +# if !defined PRIo64 || @PRI_MACROS_BROKEN@ +# undef PRIo64 +# define PRIo64 _PRIu64_PREFIX "o" +# endif +# if !defined PRIu64 || @PRI_MACROS_BROKEN@ +# undef PRIu64 +# define PRIu64 _PRIu64_PREFIX "u" +# endif +# if !defined PRIx64 || @PRI_MACROS_BROKEN@ +# undef PRIx64 +# define PRIx64 _PRIu64_PREFIX "x" +# endif +# if !defined PRIX64 || @PRI_MACROS_BROKEN@ +# undef PRIX64 +# define PRIX64 _PRIu64_PREFIX "X" +# endif +#endif + +#if !defined PRIdLEAST8 || @PRI_MACROS_BROKEN@ +# undef PRIdLEAST8 +# define PRIdLEAST8 "d" +#endif +#if !defined PRIiLEAST8 || @PRI_MACROS_BROKEN@ +# undef PRIiLEAST8 +# define PRIiLEAST8 "i" +#endif +#if !defined PRIoLEAST8 || @PRI_MACROS_BROKEN@ +# undef PRIoLEAST8 +# define PRIoLEAST8 "o" +#endif +#if !defined PRIuLEAST8 || @PRI_MACROS_BROKEN@ +# undef PRIuLEAST8 +# define PRIuLEAST8 "u" +#endif +#if !defined PRIxLEAST8 || @PRI_MACROS_BROKEN@ +# undef PRIxLEAST8 +# define PRIxLEAST8 "x" +#endif +#if !defined PRIXLEAST8 || @PRI_MACROS_BROKEN@ +# undef PRIXLEAST8 +# define PRIXLEAST8 "X" +#endif +#if !defined PRIdLEAST16 || @PRI_MACROS_BROKEN@ +# undef PRIdLEAST16 +# define PRIdLEAST16 "d" +#endif +#if !defined PRIiLEAST16 || @PRI_MACROS_BROKEN@ +# undef PRIiLEAST16 +# define PRIiLEAST16 "i" +#endif +#if !defined PRIoLEAST16 || @PRI_MACROS_BROKEN@ +# undef PRIoLEAST16 +# define PRIoLEAST16 "o" +#endif +#if !defined PRIuLEAST16 || @PRI_MACROS_BROKEN@ +# undef PRIuLEAST16 +# define PRIuLEAST16 "u" +#endif +#if !defined PRIxLEAST16 || @PRI_MACROS_BROKEN@ +# undef PRIxLEAST16 +# define PRIxLEAST16 "x" +#endif +#if !defined PRIXLEAST16 || @PRI_MACROS_BROKEN@ +# undef PRIXLEAST16 +# define PRIXLEAST16 "X" +#endif +#if !defined PRIdLEAST32 || @PRI_MACROS_BROKEN@ +# undef PRIdLEAST32 +# define PRIdLEAST32 "d" +#endif +#if !defined PRIiLEAST32 || @PRI_MACROS_BROKEN@ +# undef PRIiLEAST32 +# define PRIiLEAST32 "i" +#endif +#if !defined PRIoLEAST32 || @PRI_MACROS_BROKEN@ +# undef PRIoLEAST32 +# define PRIoLEAST32 "o" +#endif +#if !defined PRIuLEAST32 || @PRI_MACROS_BROKEN@ +# undef PRIuLEAST32 +# define PRIuLEAST32 "u" +#endif +#if !defined PRIxLEAST32 || @PRI_MACROS_BROKEN@ +# undef PRIxLEAST32 +# define PRIxLEAST32 "x" +#endif +#if !defined PRIXLEAST32 || @PRI_MACROS_BROKEN@ +# undef PRIXLEAST32 +# define PRIXLEAST32 "X" +#endif +#ifdef INT64_MAX +# if !defined PRIdLEAST64 || @PRI_MACROS_BROKEN@ +# undef PRIdLEAST64 +# define PRIdLEAST64 PRId64 +# endif +# if !defined PRIiLEAST64 || @PRI_MACROS_BROKEN@ +# undef PRIiLEAST64 +# define PRIiLEAST64 PRIi64 +# endif +#endif +#ifdef UINT64_MAX +# if !defined PRIoLEAST64 || @PRI_MACROS_BROKEN@ +# undef PRIoLEAST64 +# define PRIoLEAST64 PRIo64 +# endif +# if !defined PRIuLEAST64 || @PRI_MACROS_BROKEN@ +# undef PRIuLEAST64 +# define PRIuLEAST64 PRIu64 +# endif +# if !defined PRIxLEAST64 || @PRI_MACROS_BROKEN@ +# undef PRIxLEAST64 +# define PRIxLEAST64 PRIx64 +# endif +# if !defined PRIXLEAST64 || @PRI_MACROS_BROKEN@ +# undef PRIXLEAST64 +# define PRIXLEAST64 PRIX64 +# endif +#endif + +#if !defined PRIdFAST8 || @PRI_MACROS_BROKEN@ +# undef PRIdFAST8 +# if INT_FAST8_MAX > INT32_MAX +# define PRIdFAST8 PRId64 +# else +# define PRIdFAST8 "d" +# endif +#endif +#if !defined PRIiFAST8 || @PRI_MACROS_BROKEN@ +# undef PRIiFAST8 +# if INT_FAST8_MAX > INT32_MAX +# define PRIiFAST8 PRIi64 +# else +# define PRIiFAST8 "i" +# endif +#endif +#if !defined PRIoFAST8 || @PRI_MACROS_BROKEN@ +# undef PRIoFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define PRIoFAST8 PRIo64 +# else +# define PRIoFAST8 "o" +# endif +#endif +#if !defined PRIuFAST8 || @PRI_MACROS_BROKEN@ +# undef PRIuFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define PRIuFAST8 PRIu64 +# else +# define PRIuFAST8 "u" +# endif +#endif +#if !defined PRIxFAST8 || @PRI_MACROS_BROKEN@ +# undef PRIxFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define PRIxFAST8 PRIx64 +# else +# define PRIxFAST8 "x" +# endif +#endif +#if !defined PRIXFAST8 || @PRI_MACROS_BROKEN@ +# undef PRIXFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define PRIXFAST8 PRIX64 +# else +# define PRIXFAST8 "X" +# endif +#endif +#if !defined PRIdFAST16 || @PRI_MACROS_BROKEN@ +# undef PRIdFAST16 +# if INT_FAST16_MAX > INT32_MAX +# define PRIdFAST16 PRId64 +# else +# define PRIdFAST16 "d" +# endif +#endif +#if !defined PRIiFAST16 || @PRI_MACROS_BROKEN@ +# undef PRIiFAST16 +# if INT_FAST16_MAX > INT32_MAX +# define PRIiFAST16 PRIi64 +# else +# define PRIiFAST16 "i" +# endif +#endif +#if !defined PRIoFAST16 || @PRI_MACROS_BROKEN@ +# undef PRIoFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define PRIoFAST16 PRIo64 +# else +# define PRIoFAST16 "o" +# endif +#endif +#if !defined PRIuFAST16 || @PRI_MACROS_BROKEN@ +# undef PRIuFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define PRIuFAST16 PRIu64 +# else +# define PRIuFAST16 "u" +# endif +#endif +#if !defined PRIxFAST16 || @PRI_MACROS_BROKEN@ +# undef PRIxFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define PRIxFAST16 PRIx64 +# else +# define PRIxFAST16 "x" +# endif +#endif +#if !defined PRIXFAST16 || @PRI_MACROS_BROKEN@ +# undef PRIXFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define PRIXFAST16 PRIX64 +# else +# define PRIXFAST16 "X" +# endif +#endif +#if !defined PRIdFAST32 || @PRI_MACROS_BROKEN@ +# undef PRIdFAST32 +# if INT_FAST32_MAX > INT32_MAX +# define PRIdFAST32 PRId64 +# else +# define PRIdFAST32 "d" +# endif +#endif +#if !defined PRIiFAST32 || @PRI_MACROS_BROKEN@ +# undef PRIiFAST32 +# if INT_FAST32_MAX > INT32_MAX +# define PRIiFAST32 PRIi64 +# else +# define PRIiFAST32 "i" +# endif +#endif +#if !defined PRIoFAST32 || @PRI_MACROS_BROKEN@ +# undef PRIoFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define PRIoFAST32 PRIo64 +# else +# define PRIoFAST32 "o" +# endif +#endif +#if !defined PRIuFAST32 || @PRI_MACROS_BROKEN@ +# undef PRIuFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define PRIuFAST32 PRIu64 +# else +# define PRIuFAST32 "u" +# endif +#endif +#if !defined PRIxFAST32 || @PRI_MACROS_BROKEN@ +# undef PRIxFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define PRIxFAST32 PRIx64 +# else +# define PRIxFAST32 "x" +# endif +#endif +#if !defined PRIXFAST32 || @PRI_MACROS_BROKEN@ +# undef PRIXFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define PRIXFAST32 PRIX64 +# else +# define PRIXFAST32 "X" +# endif +#endif +#ifdef INT64_MAX +# if !defined PRIdFAST64 || @PRI_MACROS_BROKEN@ +# undef PRIdFAST64 +# define PRIdFAST64 PRId64 +# endif +# if !defined PRIiFAST64 || @PRI_MACROS_BROKEN@ +# undef PRIiFAST64 +# define PRIiFAST64 PRIi64 +# endif +#endif +#ifdef UINT64_MAX +# if !defined PRIoFAST64 || @PRI_MACROS_BROKEN@ +# undef PRIoFAST64 +# define PRIoFAST64 PRIo64 +# endif +# if !defined PRIuFAST64 || @PRI_MACROS_BROKEN@ +# undef PRIuFAST64 +# define PRIuFAST64 PRIu64 +# endif +# if !defined PRIxFAST64 || @PRI_MACROS_BROKEN@ +# undef PRIxFAST64 +# define PRIxFAST64 PRIx64 +# endif +# if !defined PRIXFAST64 || @PRI_MACROS_BROKEN@ +# undef PRIXFAST64 +# define PRIXFAST64 PRIX64 +# endif +#endif + +#if !defined PRIdMAX || @PRI_MACROS_BROKEN@ +# undef PRIdMAX +# if @INT32_MAX_LT_INTMAX_MAX@ +# define PRIdMAX PRId64 +# else +# define PRIdMAX "ld" +# endif +#endif +#if !defined PRIiMAX || @PRI_MACROS_BROKEN@ +# undef PRIiMAX +# if @INT32_MAX_LT_INTMAX_MAX@ +# define PRIiMAX PRIi64 +# else +# define PRIiMAX "li" +# endif +#endif +#if !defined PRIoMAX || @PRI_MACROS_BROKEN@ +# undef PRIoMAX +# if @UINT32_MAX_LT_UINTMAX_MAX@ +# define PRIoMAX PRIo64 +# else +# define PRIoMAX "lo" +# endif +#endif +#if !defined PRIuMAX || @PRI_MACROS_BROKEN@ +# undef PRIuMAX +# if @UINT32_MAX_LT_UINTMAX_MAX@ +# define PRIuMAX PRIu64 +# else +# define PRIuMAX "lu" +# endif +#endif +#if !defined PRIxMAX || @PRI_MACROS_BROKEN@ +# undef PRIxMAX +# if @UINT32_MAX_LT_UINTMAX_MAX@ +# define PRIxMAX PRIx64 +# else +# define PRIxMAX "lx" +# endif +#endif +#if !defined PRIXMAX || @PRI_MACROS_BROKEN@ +# undef PRIXMAX +# if @UINT32_MAX_LT_UINTMAX_MAX@ +# define PRIXMAX PRIX64 +# else +# define PRIXMAX "lX" +# endif +#endif + +#if !defined PRIdPTR || @PRI_MACROS_BROKEN@ +# undef PRIdPTR +# ifdef INTPTR_MAX +# define PRIdPTR @PRIPTR_PREFIX@ "d" +# endif +#endif +#if !defined PRIiPTR || @PRI_MACROS_BROKEN@ +# undef PRIiPTR +# ifdef INTPTR_MAX +# define PRIiPTR @PRIPTR_PREFIX@ "i" +# endif +#endif +#if !defined PRIoPTR || @PRI_MACROS_BROKEN@ +# undef PRIoPTR +# ifdef UINTPTR_MAX +# define PRIoPTR @PRIPTR_PREFIX@ "o" +# endif +#endif +#if !defined PRIuPTR || @PRI_MACROS_BROKEN@ +# undef PRIuPTR +# ifdef UINTPTR_MAX +# define PRIuPTR @PRIPTR_PREFIX@ "u" +# endif +#endif +#if !defined PRIxPTR || @PRI_MACROS_BROKEN@ +# undef PRIxPTR +# ifdef UINTPTR_MAX +# define PRIxPTR @PRIPTR_PREFIX@ "x" +# endif +#endif +#if !defined PRIXPTR || @PRI_MACROS_BROKEN@ +# undef PRIXPTR +# ifdef UINTPTR_MAX +# define PRIXPTR @PRIPTR_PREFIX@ "X" +# endif +#endif + +#if !defined SCNd8 || @PRI_MACROS_BROKEN@ +# undef SCNd8 +# ifdef INT8_MAX +# define SCNd8 "hhd" +# endif +#endif +#if !defined SCNi8 || @PRI_MACROS_BROKEN@ +# undef SCNi8 +# ifdef INT8_MAX +# define SCNi8 "hhi" +# endif +#endif +#if !defined SCNo8 || @PRI_MACROS_BROKEN@ +# undef SCNo8 +# ifdef UINT8_MAX +# define SCNo8 "hho" +# endif +#endif +#if !defined SCNu8 || @PRI_MACROS_BROKEN@ +# undef SCNu8 +# ifdef UINT8_MAX +# define SCNu8 "hhu" +# endif +#endif +#if !defined SCNx8 || @PRI_MACROS_BROKEN@ +# undef SCNx8 +# ifdef UINT8_MAX +# define SCNx8 "hhx" +# endif +#endif +#if !defined SCNd16 || @PRI_MACROS_BROKEN@ +# undef SCNd16 +# ifdef INT16_MAX +# define SCNd16 "hd" +# endif +#endif +#if !defined SCNi16 || @PRI_MACROS_BROKEN@ +# undef SCNi16 +# ifdef INT16_MAX +# define SCNi16 "hi" +# endif +#endif +#if !defined SCNo16 || @PRI_MACROS_BROKEN@ +# undef SCNo16 +# ifdef UINT16_MAX +# define SCNo16 "ho" +# endif +#endif +#if !defined SCNu16 || @PRI_MACROS_BROKEN@ +# undef SCNu16 +# ifdef UINT16_MAX +# define SCNu16 "hu" +# endif +#endif +#if !defined SCNx16 || @PRI_MACROS_BROKEN@ +# undef SCNx16 +# ifdef UINT16_MAX +# define SCNx16 "hx" +# endif +#endif +#if !defined SCNd32 || @PRI_MACROS_BROKEN@ +# undef SCNd32 +# ifdef INT32_MAX +# define SCNd32 "d" +# endif +#endif +#if !defined SCNi32 || @PRI_MACROS_BROKEN@ +# undef SCNi32 +# ifdef INT32_MAX +# define SCNi32 "i" +# endif +#endif +#if !defined SCNo32 || @PRI_MACROS_BROKEN@ +# undef SCNo32 +# ifdef UINT32_MAX +# define SCNo32 "o" +# endif +#endif +#if !defined SCNu32 || @PRI_MACROS_BROKEN@ +# undef SCNu32 +# ifdef UINT32_MAX +# define SCNu32 "u" +# endif +#endif +#if !defined SCNx32 || @PRI_MACROS_BROKEN@ +# undef SCNx32 +# ifdef UINT32_MAX +# define SCNx32 "x" +# endif +#endif +#ifdef INT64_MAX +# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@) +# define _SCN64_PREFIX "l" +# elif defined _MSC_VER || defined __MINGW32__ +# define _SCN64_PREFIX "I64" +# elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +# define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX +# endif +# if !defined SCNd64 || @PRI_MACROS_BROKEN@ +# undef SCNd64 +# define SCNd64 _SCN64_PREFIX "d" +# endif +# if !defined SCNi64 || @PRI_MACROS_BROKEN@ +# undef SCNi64 +# define SCNi64 _SCN64_PREFIX "i" +# endif +#endif +#ifdef UINT64_MAX +# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@) +# define _SCNu64_PREFIX "l" +# elif defined _MSC_VER || defined __MINGW32__ +# define _SCNu64_PREFIX "I64" +# elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +# define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX +# endif +# if !defined SCNo64 || @PRI_MACROS_BROKEN@ +# undef SCNo64 +# define SCNo64 _SCNu64_PREFIX "o" +# endif +# if !defined SCNu64 || @PRI_MACROS_BROKEN@ +# undef SCNu64 +# define SCNu64 _SCNu64_PREFIX "u" +# endif +# if !defined SCNx64 || @PRI_MACROS_BROKEN@ +# undef SCNx64 +# define SCNx64 _SCNu64_PREFIX "x" +# endif +#endif + +#if !defined SCNdLEAST8 || @PRI_MACROS_BROKEN@ +# undef SCNdLEAST8 +# define SCNdLEAST8 "hhd" +#endif +#if !defined SCNiLEAST8 || @PRI_MACROS_BROKEN@ +# undef SCNiLEAST8 +# define SCNiLEAST8 "hhi" +#endif +#if !defined SCNoLEAST8 || @PRI_MACROS_BROKEN@ +# undef SCNoLEAST8 +# define SCNoLEAST8 "hho" +#endif +#if !defined SCNuLEAST8 || @PRI_MACROS_BROKEN@ +# undef SCNuLEAST8 +# define SCNuLEAST8 "hhu" +#endif +#if !defined SCNxLEAST8 || @PRI_MACROS_BROKEN@ +# undef SCNxLEAST8 +# define SCNxLEAST8 "hhx" +#endif +#if !defined SCNdLEAST16 || @PRI_MACROS_BROKEN@ +# undef SCNdLEAST16 +# define SCNdLEAST16 "hd" +#endif +#if !defined SCNiLEAST16 || @PRI_MACROS_BROKEN@ +# undef SCNiLEAST16 +# define SCNiLEAST16 "hi" +#endif +#if !defined SCNoLEAST16 || @PRI_MACROS_BROKEN@ +# undef SCNoLEAST16 +# define SCNoLEAST16 "ho" +#endif +#if !defined SCNuLEAST16 || @PRI_MACROS_BROKEN@ +# undef SCNuLEAST16 +# define SCNuLEAST16 "hu" +#endif +#if !defined SCNxLEAST16 || @PRI_MACROS_BROKEN@ +# undef SCNxLEAST16 +# define SCNxLEAST16 "hx" +#endif +#if !defined SCNdLEAST32 || @PRI_MACROS_BROKEN@ +# undef SCNdLEAST32 +# define SCNdLEAST32 "d" +#endif +#if !defined SCNiLEAST32 || @PRI_MACROS_BROKEN@ +# undef SCNiLEAST32 +# define SCNiLEAST32 "i" +#endif +#if !defined SCNoLEAST32 || @PRI_MACROS_BROKEN@ +# undef SCNoLEAST32 +# define SCNoLEAST32 "o" +#endif +#if !defined SCNuLEAST32 || @PRI_MACROS_BROKEN@ +# undef SCNuLEAST32 +# define SCNuLEAST32 "u" +#endif +#if !defined SCNxLEAST32 || @PRI_MACROS_BROKEN@ +# undef SCNxLEAST32 +# define SCNxLEAST32 "x" +#endif +#ifdef INT64_MAX +# if !defined SCNdLEAST64 || @PRI_MACROS_BROKEN@ +# undef SCNdLEAST64 +# define SCNdLEAST64 SCNd64 +# endif +# if !defined SCNiLEAST64 || @PRI_MACROS_BROKEN@ +# undef SCNiLEAST64 +# define SCNiLEAST64 SCNi64 +# endif +#endif +#ifdef UINT64_MAX +# if !defined SCNoLEAST64 || @PRI_MACROS_BROKEN@ +# undef SCNoLEAST64 +# define SCNoLEAST64 SCNo64 +# endif +# if !defined SCNuLEAST64 || @PRI_MACROS_BROKEN@ +# undef SCNuLEAST64 +# define SCNuLEAST64 SCNu64 +# endif +# if !defined SCNxLEAST64 || @PRI_MACROS_BROKEN@ +# undef SCNxLEAST64 +# define SCNxLEAST64 SCNx64 +# endif +#endif + +#if !defined SCNdFAST8 || @PRI_MACROS_BROKEN@ +# undef SCNdFAST8 +# if INT_FAST8_MAX > INT32_MAX +# define SCNdFAST8 SCNd64 +# elif INT_FAST8_MAX == 0x7fff +# define SCNdFAST8 "hd" +# elif INT_FAST8_MAX == 0x7f +# define SCNdFAST8 "hhd" +# else +# define SCNdFAST8 "d" +# endif +#endif +#if !defined SCNiFAST8 || @PRI_MACROS_BROKEN@ +# undef SCNiFAST8 +# if INT_FAST8_MAX > INT32_MAX +# define SCNiFAST8 SCNi64 +# elif INT_FAST8_MAX == 0x7fff +# define SCNiFAST8 "hi" +# elif INT_FAST8_MAX == 0x7f +# define SCNiFAST8 "hhi" +# else +# define SCNiFAST8 "i" +# endif +#endif +#if !defined SCNoFAST8 || @PRI_MACROS_BROKEN@ +# undef SCNoFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define SCNoFAST8 SCNo64 +# elif UINT_FAST8_MAX == 0xffff +# define SCNoFAST8 "ho" +# elif UINT_FAST8_MAX == 0xff +# define SCNoFAST8 "hho" +# else +# define SCNoFAST8 "o" +# endif +#endif +#if !defined SCNuFAST8 || @PRI_MACROS_BROKEN@ +# undef SCNuFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define SCNuFAST8 SCNu64 +# elif UINT_FAST8_MAX == 0xffff +# define SCNuFAST8 "hu" +# elif UINT_FAST8_MAX == 0xff +# define SCNuFAST8 "hhu" +# else +# define SCNuFAST8 "u" +# endif +#endif +#if !defined SCNxFAST8 || @PRI_MACROS_BROKEN@ +# undef SCNxFAST8 +# if UINT_FAST8_MAX > UINT32_MAX +# define SCNxFAST8 SCNx64 +# elif UINT_FAST8_MAX == 0xffff +# define SCNxFAST8 "hx" +# elif UINT_FAST8_MAX == 0xff +# define SCNxFAST8 "hhx" +# else +# define SCNxFAST8 "x" +# endif +#endif +#if !defined SCNdFAST16 || @PRI_MACROS_BROKEN@ +# undef SCNdFAST16 +# if INT_FAST16_MAX > INT32_MAX +# define SCNdFAST16 SCNd64 +# elif INT_FAST16_MAX == 0x7fff +# define SCNdFAST16 "hd" +# else +# define SCNdFAST16 "d" +# endif +#endif +#if !defined SCNiFAST16 || @PRI_MACROS_BROKEN@ +# undef SCNiFAST16 +# if INT_FAST16_MAX > INT32_MAX +# define SCNiFAST16 SCNi64 +# elif INT_FAST16_MAX == 0x7fff +# define SCNiFAST16 "hi" +# else +# define SCNiFAST16 "i" +# endif +#endif +#if !defined SCNoFAST16 || @PRI_MACROS_BROKEN@ +# undef SCNoFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define SCNoFAST16 SCNo64 +# elif UINT_FAST16_MAX == 0xffff +# define SCNoFAST16 "ho" +# else +# define SCNoFAST16 "o" +# endif +#endif +#if !defined SCNuFAST16 || @PRI_MACROS_BROKEN@ +# undef SCNuFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define SCNuFAST16 SCNu64 +# elif UINT_FAST16_MAX == 0xffff +# define SCNuFAST16 "hu" +# else +# define SCNuFAST16 "u" +# endif +#endif +#if !defined SCNxFAST16 || @PRI_MACROS_BROKEN@ +# undef SCNxFAST16 +# if UINT_FAST16_MAX > UINT32_MAX +# define SCNxFAST16 SCNx64 +# elif UINT_FAST16_MAX == 0xffff +# define SCNxFAST16 "hx" +# else +# define SCNxFAST16 "x" +# endif +#endif +#if !defined SCNdFAST32 || @PRI_MACROS_BROKEN@ +# undef SCNdFAST32 +# if INT_FAST32_MAX > INT32_MAX +# define SCNdFAST32 SCNd64 +# else +# define SCNdFAST32 "d" +# endif +#endif +#if !defined SCNiFAST32 || @PRI_MACROS_BROKEN@ +# undef SCNiFAST32 +# if INT_FAST32_MAX > INT32_MAX +# define SCNiFAST32 SCNi64 +# else +# define SCNiFAST32 "i" +# endif +#endif +#if !defined SCNoFAST32 || @PRI_MACROS_BROKEN@ +# undef SCNoFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define SCNoFAST32 SCNo64 +# else +# define SCNoFAST32 "o" +# endif +#endif +#if !defined SCNuFAST32 || @PRI_MACROS_BROKEN@ +# undef SCNuFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define SCNuFAST32 SCNu64 +# else +# define SCNuFAST32 "u" +# endif +#endif +#if !defined SCNxFAST32 || @PRI_MACROS_BROKEN@ +# undef SCNxFAST32 +# if UINT_FAST32_MAX > UINT32_MAX +# define SCNxFAST32 SCNx64 +# else +# define SCNxFAST32 "x" +# endif +#endif +#ifdef INT64_MAX +# if !defined SCNdFAST64 || @PRI_MACROS_BROKEN@ +# undef SCNdFAST64 +# define SCNdFAST64 SCNd64 +# endif +# if !defined SCNiFAST64 || @PRI_MACROS_BROKEN@ +# undef SCNiFAST64 +# define SCNiFAST64 SCNi64 +# endif +#endif +#ifdef UINT64_MAX +# if !defined SCNoFAST64 || @PRI_MACROS_BROKEN@ +# undef SCNoFAST64 +# define SCNoFAST64 SCNo64 +# endif +# if !defined SCNuFAST64 || @PRI_MACROS_BROKEN@ +# undef SCNuFAST64 +# define SCNuFAST64 SCNu64 +# endif +# if !defined SCNxFAST64 || @PRI_MACROS_BROKEN@ +# undef SCNxFAST64 +# define SCNxFAST64 SCNx64 +# endif +#endif + +#if !defined SCNdMAX || @PRI_MACROS_BROKEN@ +# undef SCNdMAX +# if @INT32_MAX_LT_INTMAX_MAX@ +# define SCNdMAX SCNd64 +# else +# define SCNdMAX "ld" +# endif +#endif +#if !defined SCNiMAX || @PRI_MACROS_BROKEN@ +# undef SCNiMAX +# if @INT32_MAX_LT_INTMAX_MAX@ +# define SCNiMAX SCNi64 +# else +# define SCNiMAX "li" +# endif +#endif +#if !defined SCNoMAX || @PRI_MACROS_BROKEN@ +# undef SCNoMAX +# if @UINT32_MAX_LT_UINTMAX_MAX@ +# define SCNoMAX SCNo64 +# else +# define SCNoMAX "lo" +# endif +#endif +#if !defined SCNuMAX || @PRI_MACROS_BROKEN@ +# undef SCNuMAX +# if @UINT32_MAX_LT_UINTMAX_MAX@ +# define SCNuMAX SCNu64 +# else +# define SCNuMAX "lu" +# endif +#endif +#if !defined SCNxMAX || @PRI_MACROS_BROKEN@ +# undef SCNxMAX +# if @UINT32_MAX_LT_UINTMAX_MAX@ +# define SCNxMAX SCNx64 +# else +# define SCNxMAX "lx" +# endif +#endif + +#if !defined SCNdPTR || @PRI_MACROS_BROKEN@ +# undef SCNdPTR +# ifdef INTPTR_MAX +# define SCNdPTR @PRIPTR_PREFIX@ "d" +# endif +#endif +#if !defined SCNiPTR || @PRI_MACROS_BROKEN@ +# undef SCNiPTR +# ifdef INTPTR_MAX +# define SCNiPTR @PRIPTR_PREFIX@ "i" +# endif +#endif +#if !defined SCNoPTR || @PRI_MACROS_BROKEN@ +# undef SCNoPTR +# ifdef UINTPTR_MAX +# define SCNoPTR @PRIPTR_PREFIX@ "o" +# endif +#endif +#if !defined SCNuPTR || @PRI_MACROS_BROKEN@ +# undef SCNuPTR +# ifdef UINTPTR_MAX +# define SCNuPTR @PRIPTR_PREFIX@ "u" +# endif +#endif +#if !defined SCNxPTR || @PRI_MACROS_BROKEN@ +# undef SCNxPTR +# ifdef UINTPTR_MAX +# define SCNxPTR @PRIPTR_PREFIX@ "x" +# endif +#endif + +/* 7.8.2 Functions for greatest-width integer types */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if @GNULIB_IMAXABS@ +# if !@HAVE_DECL_IMAXABS@ +extern intmax_t imaxabs (intmax_t); +# endif +#elif defined GNULIB_POSIXCHECK +# undef imaxabs +# if HAVE_RAW_DECL_IMAXABS +_GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - " + "use gnulib module imaxabs for portability"); +# endif +#endif + +#if @GNULIB_IMAXDIV@ +# if !@HAVE_IMAXDIV_T@ +# if !GNULIB_defined_imaxdiv_t +typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t; +# define GNULIB_defined_imaxdiv_t 1 +# endif +# endif +# if !@HAVE_DECL_IMAXDIV@ +extern imaxdiv_t imaxdiv (intmax_t, intmax_t); +# endif +#elif defined GNULIB_POSIXCHECK +# undef imaxdiv +# if HAVE_RAW_DECL_IMAXDIV +_GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - " + "use gnulib module imaxdiv for portability"); +# endif +#endif + +#if @GNULIB_STRTOIMAX@ +# if @REPLACE_STRTOIMAX@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strtoimax +# define strtoimax rpl_strtoimax +# endif +_GL_FUNCDECL_RPL (strtoimax, intmax_t, + (const char *, char **, int) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoimax, intmax_t, (const char *, char **, int)); +# else +# if !@HAVE_DECL_STRTOIMAX@ +# undef strtoimax +_GL_FUNCDECL_SYS (strtoimax, intmax_t, + (const char *, char **, int) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoimax, intmax_t, (const char *, char **, int)); +# endif +_GL_CXXALIASWARN (strtoimax); +#elif defined GNULIB_POSIXCHECK +# undef strtoimax +# if HAVE_RAW_DECL_STRTOIMAX +_GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - " + "use gnulib module strtoimax for portability"); +# endif +#endif + +#if @GNULIB_STRTOUMAX@ +# if @REPLACE_STRTOUMAX@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strtoumax +# define strtoumax rpl_strtoumax +# endif +_GL_FUNCDECL_RPL (strtoumax, uintmax_t, + (const char *, char **, int) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtoumax, uintmax_t, (const char *, char **, int)); +# else +# if !@HAVE_DECL_STRTOUMAX@ +# undef strtoumax +_GL_FUNCDECL_SYS (strtoumax, uintmax_t, + (const char *, char **, int) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoumax, uintmax_t, (const char *, char **, int)); +# endif +_GL_CXXALIASWARN (strtoumax); +#elif defined GNULIB_POSIXCHECK +# undef strtoumax +# if HAVE_RAW_DECL_STRTOUMAX +_GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - " + "use gnulib module strtoumax for portability"); +# endif +#endif + +/* Don't bother defining or declaring wcstoimax and wcstoumax, since + wide-character functions like this are hardly ever useful. */ + +#ifdef __cplusplus +} +#endif + +#endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */ diff --git a/devspec.en_US/project/recutils/lib/isnan.c b/devspec.en_US/project/recutils/lib/isnan.c new file mode 100755 index 0000000..c399c18 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/isnan.c @@ -0,0 +1,189 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#include <config.h> + +/* Specification. */ +#ifdef USE_LONG_DOUBLE +/* Specification found in math.h or isnanl-nolibm.h. */ +extern int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST; +#elif ! defined USE_FLOAT +/* Specification found in math.h or isnand-nolibm.h. */ +extern int rpl_isnand (double x); +#else /* defined USE_FLOAT */ +/* Specification found in math.h or isnanf-nolibm.h. */ +extern int rpl_isnanf (float x); +#endif + +#include <float.h> +#include <string.h> + +#include "float+.h" + +#ifdef USE_LONG_DOUBLE +# define FUNC rpl_isnanl +# define DOUBLE long double +# define MAX_EXP LDBL_MAX_EXP +# define MIN_EXP LDBL_MIN_EXP +# if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT +# define KNOWN_EXPBIT0_LOCATION +# define EXPBIT0_WORD LDBL_EXPBIT0_WORD +# define EXPBIT0_BIT LDBL_EXPBIT0_BIT +# endif +# define SIZE SIZEOF_LDBL +# define L_(literal) literal##L +#elif ! defined USE_FLOAT +# define FUNC rpl_isnand +# define DOUBLE double +# define MAX_EXP DBL_MAX_EXP +# define MIN_EXP DBL_MIN_EXP +# if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT +# define KNOWN_EXPBIT0_LOCATION +# define EXPBIT0_WORD DBL_EXPBIT0_WORD +# define EXPBIT0_BIT DBL_EXPBIT0_BIT +# endif +# define SIZE SIZEOF_DBL +# define L_(literal) literal +#else /* defined USE_FLOAT */ +# define FUNC rpl_isnanf +# define DOUBLE float +# define MAX_EXP FLT_MAX_EXP +# define MIN_EXP FLT_MIN_EXP +# if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT +# define KNOWN_EXPBIT0_LOCATION +# define EXPBIT0_WORD FLT_EXPBIT0_WORD +# define EXPBIT0_BIT FLT_EXPBIT0_BIT +# endif +# define SIZE SIZEOF_FLT +# define L_(literal) literal##f +#endif + +#define EXP_MASK ((MAX_EXP - MIN_EXP) | 7) + +#define NWORDS \ + ((sizeof (DOUBLE) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { DOUBLE value; unsigned int word[NWORDS]; } memory_double; + +/* Most hosts nowadays use IEEE floating point, so they use IEC 60559 + representations, have infinities and NaNs, and do not trap on + exceptions. Define IEEE_FLOATING_POINT if this host is one of the + typical ones. The C11 macro __STDC_IEC_559__ is close to what is + wanted here, but is not quite right because this file does not require + all the features of C11 Annex F (and does not require C11 at all, + for that matter). */ + +#define IEEE_FLOATING_POINT (FLT_RADIX == 2 && FLT_MANT_DIG == 24 \ + && FLT_MIN_EXP == -125 && FLT_MAX_EXP == 128) + +int +FUNC (DOUBLE x) +{ +#if defined KNOWN_EXPBIT0_LOCATION && IEEE_FLOATING_POINT +# if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE + /* Special CPU dependent code is needed to treat bit patterns outside the + IEEE 754 specification (such as Pseudo-NaNs, Pseudo-Infinities, + Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals) as NaNs. + These bit patterns are: + - exponent = 0x0001..0x7FFF, mantissa bit 63 = 0, + - exponent = 0x0000, mantissa bit 63 = 1. + The NaN bit pattern is: + - exponent = 0x7FFF, mantissa >= 0x8000000000000001. */ + memory_double m; + unsigned int exponent; + + m.value = x; + exponent = (m.word[EXPBIT0_WORD] >> EXPBIT0_BIT) & EXP_MASK; +# ifdef WORDS_BIGENDIAN + /* Big endian: EXPBIT0_WORD = 0, EXPBIT0_BIT = 16. */ + if (exponent == 0) + return 1 & (m.word[0] >> 15); + else if (exponent == EXP_MASK) + return (((m.word[0] ^ 0x8000U) << 16) | m.word[1] | (m.word[2] >> 16)) != 0; + else + return 1 & ~(m.word[0] >> 15); +# else + /* Little endian: EXPBIT0_WORD = 2, EXPBIT0_BIT = 0. */ + if (exponent == 0) + return (m.word[1] >> 31); + else if (exponent == EXP_MASK) + return ((m.word[1] ^ 0x80000000U) | m.word[0]) != 0; + else + return (m.word[1] >> 31) ^ 1; +# endif +# else + /* Be careful to not do any floating-point operation on x, such as x == x, + because x may be a signaling NaN. */ +# if defined __SUNPRO_C || defined __ICC || defined _MSC_VER \ + || defined __DECC || defined __TINYC__ \ + || (defined __sgi && !defined __GNUC__) + /* The Sun C 5.0, Intel ICC 10.0, Microsoft Visual C/C++ 9.0, Compaq (ex-DEC) + 6.4, and TinyCC compilers don't recognize the initializers as constant + expressions. The Compaq compiler also fails when constant-folding + 0.0 / 0.0 even when constant-folding is not required. The Microsoft + Visual C/C++ compiler also fails when constant-folding 1.0 / 0.0 even + when constant-folding is not required. The SGI MIPSpro C compiler + complains about "floating-point operation result is out of range". */ + static DOUBLE zero = L_(0.0); + memory_double nan; + DOUBLE plus_inf = L_(1.0) / zero; + DOUBLE minus_inf = -L_(1.0) / zero; + nan.value = zero / zero; +# else + static memory_double nan = { L_(0.0) / L_(0.0) }; + static DOUBLE plus_inf = L_(1.0) / L_(0.0); + static DOUBLE minus_inf = -L_(1.0) / L_(0.0); +# endif + { + memory_double m; + + /* A NaN can be recognized through its exponent. But exclude +Infinity and + -Infinity, which have the same exponent. */ + m.value = x; + if (((m.word[EXPBIT0_WORD] ^ nan.word[EXPBIT0_WORD]) + & (EXP_MASK << EXPBIT0_BIT)) + == 0) + return (memcmp (&m.value, &plus_inf, SIZE) != 0 + && memcmp (&m.value, &minus_inf, SIZE) != 0); + else + return 0; + } +# endif +#else + /* The configuration did not find sufficient information, or does + not use IEEE floating point. Give up about the signaling NaNs; + handle only the quiet NaNs. */ + if (x == x) + { +# if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE + /* Detect any special bit patterns that pass ==; see comment above. */ + memory_double m1; + memory_double m2; + + memset (&m1.value, 0, SIZE); + memset (&m2.value, 0, SIZE); + m1.value = x; + m2.value = x + (x ? 0.0L : -0.0L); + if (memcmp (&m1.value, &m2.value, SIZE) != 0) + return 1; +# endif + return 0; + } + else + return 1; +#endif +} diff --git a/devspec.en_US/project/recutils/lib/isnand-nolibm.h b/devspec.en_US/project/recutils/lib/isnand-nolibm.h new file mode 100755 index 0000000..174c61e --- /dev/null +++ b/devspec.en_US/project/recutils/lib/isnand-nolibm.h @@ -0,0 +1,33 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#if HAVE_ISNAND_IN_LIBC +/* Get declaration of isnan macro. */ +# include <math.h> +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnand +# define isnand(x) __builtin_isnan ((double)(x)) +# else +# undef isnand +# define isnand(x) isnan ((double)(x)) +# endif +#else +/* Test whether X is a NaN. */ +# undef isnand +# define isnand rpl_isnand +extern int isnand (double x); +#endif diff --git a/devspec.en_US/project/recutils/lib/isnand.c b/devspec.en_US/project/recutils/lib/isnand.c new file mode 100755 index 0000000..c3cd315 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/isnand.c @@ -0,0 +1,19 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2008-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008. */ + +#include "isnan.c" diff --git a/devspec.en_US/project/recutils/lib/isnanf-nolibm.h b/devspec.en_US/project/recutils/lib/isnanf-nolibm.h new file mode 100755 index 0000000..73937a2 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/isnanf-nolibm.h @@ -0,0 +1,40 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#if HAVE_ISNANF_IN_LIBC +/* Get declaration of isnan macro or (older) isnanf function. */ +# include <math.h> +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnanf +# define isnanf(x) __builtin_isnanf ((float)(x)) +# elif defined isnan +# undef isnanf +# define isnanf(x) isnan ((float)(x)) +# else + /* Get declaration of isnanf(), if not declared in <math.h>. */ +# if defined __sgi + /* We can't include <ieeefp.h>, because it conflicts with our definition of + isnand. Therefore declare isnanf separately. */ +extern int isnanf (float x); +# endif +# endif +#else +/* Test whether X is a NaN. */ +# undef isnanf +# define isnanf rpl_isnanf +extern int isnanf (float x); +#endif diff --git a/devspec.en_US/project/recutils/lib/isnanf.c b/devspec.en_US/project/recutils/lib/isnanf.c new file mode 100755 index 0000000..8bc58eb --- /dev/null +++ b/devspec.en_US/project/recutils/lib/isnanf.c @@ -0,0 +1,20 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#define USE_FLOAT +#include "isnan.c" diff --git a/devspec.en_US/project/recutils/lib/isnanl-nolibm.h b/devspec.en_US/project/recutils/lib/isnanl-nolibm.h new file mode 100755 index 0000000..fdedf56 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/isnanl-nolibm.h @@ -0,0 +1,33 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#if HAVE_ISNANL_IN_LIBC +/* Get declaration of isnan macro or (older) isnanl function. */ +# include <math.h> +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnanl +# define isnanl(x) __builtin_isnanl ((long double)(x)) +# elif defined isnan +# undef isnanl +# define isnanl(x) isnan ((long double)(x)) +# endif +#else +/* Test whether X is a NaN. */ +# undef isnanl +# define isnanl rpl_isnanl +extern int isnanl (long double x); +#endif diff --git a/devspec.en_US/project/recutils/lib/isnanl.c b/devspec.en_US/project/recutils/lib/isnanl.c new file mode 100755 index 0000000..99afd29 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/isnanl.c @@ -0,0 +1,20 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +#define USE_LONG_DOUBLE +#include "isnan.c" diff --git a/devspec.en_US/project/recutils/lib/itold.c b/devspec.en_US/project/recutils/lib/itold.c new file mode 100755 index 0000000..bca01eb --- /dev/null +++ b/devspec.en_US/project/recutils/lib/itold.c @@ -0,0 +1,28 @@ +/* Replacement for 'int' to 'long double' conversion routine. + Copyright (C) 2011-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2011. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <float.h> + +void +_Qp_itoq (long double *result, int a) +{ + /* Convert from 'int' to 'double', then from 'double' to 'long double'. */ + *result = (double) a; +} diff --git a/devspec.en_US/project/recutils/lib/langinfo.h b/devspec.en_US/project/recutils/lib/langinfo.h new file mode 100755 index 0000000..0de90c7 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/langinfo.h @@ -0,0 +1,670 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Substitute for and wrapper around <langinfo.h>. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* + * POSIX <langinfo.h> for platforms that lack it or have an incomplete one. + * <http://www.opengroup.org/onlinepubs/9699919799/basedefs/langinfo.h.html> + */ + +#ifndef _GL_LANGINFO_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* The include_next requires a split double-inclusion guard. */ +#if 1 +# include_next <langinfo.h> +#endif + +#ifndef _GL_LANGINFO_H +#define _GL_LANGINFO_H + + +#if !1 + +/* A platform that lacks <langinfo.h>. */ + +/* Assume that it also lacks <nl_types.h> and the nl_item type. */ +# if !GNULIB_defined_nl_item +typedef int nl_item; +# define GNULIB_defined_nl_item 1 +# endif + +/* nl_langinfo items of the LC_CTYPE category */ +# define CODESET 10000 +/* nl_langinfo items of the LC_NUMERIC category */ +# define RADIXCHAR 10001 +# define DECIMAL_POINT RADIXCHAR +# define THOUSEP 10002 +# define THOUSANDS_SEP THOUSEP +# define GROUPING 10114 +/* nl_langinfo items of the LC_TIME category */ +# define D_T_FMT 10003 +# define D_FMT 10004 +# define T_FMT 10005 +# define T_FMT_AMPM 10006 +# define AM_STR 10007 +# define PM_STR 10008 +# define DAY_1 10009 +# define DAY_2 (DAY_1 + 1) +# define DAY_3 (DAY_1 + 2) +# define DAY_4 (DAY_1 + 3) +# define DAY_5 (DAY_1 + 4) +# define DAY_6 (DAY_1 + 5) +# define DAY_7 (DAY_1 + 6) +# define ABDAY_1 10016 +# define ABDAY_2 (ABDAY_1 + 1) +# define ABDAY_3 (ABDAY_1 + 2) +# define ABDAY_4 (ABDAY_1 + 3) +# define ABDAY_5 (ABDAY_1 + 4) +# define ABDAY_6 (ABDAY_1 + 5) +# define ABDAY_7 (ABDAY_1 + 6) +# define MON_1 10023 +# define MON_2 (MON_1 + 1) +# define MON_3 (MON_1 + 2) +# define MON_4 (MON_1 + 3) +# define MON_5 (MON_1 + 4) +# define MON_6 (MON_1 + 5) +# define MON_7 (MON_1 + 6) +# define MON_8 (MON_1 + 7) +# define MON_9 (MON_1 + 8) +# define MON_10 (MON_1 + 9) +# define MON_11 (MON_1 + 10) +# define MON_12 (MON_1 + 11) +# define ALTMON_1 10200 +# define ALTMON_2 (ALTMON_1 + 1) +# define ALTMON_3 (ALTMON_1 + 2) +# define ALTMON_4 (ALTMON_1 + 3) +# define ALTMON_5 (ALTMON_1 + 4) +# define ALTMON_6 (ALTMON_1 + 5) +# define ALTMON_7 (ALTMON_1 + 6) +# define ALTMON_8 (ALTMON_1 + 7) +# define ALTMON_9 (ALTMON_1 + 8) +# define ALTMON_10 (ALTMON_1 + 9) +# define ALTMON_11 (ALTMON_1 + 10) +# define ALTMON_12 (ALTMON_1 + 11) +# define ABMON_1 10035 +# define ABMON_2 (ABMON_1 + 1) +# define ABMON_3 (ABMON_1 + 2) +# define ABMON_4 (ABMON_1 + 3) +# define ABMON_5 (ABMON_1 + 4) +# define ABMON_6 (ABMON_1 + 5) +# define ABMON_7 (ABMON_1 + 6) +# define ABMON_8 (ABMON_1 + 7) +# define ABMON_9 (ABMON_1 + 8) +# define ABMON_10 (ABMON_1 + 9) +# define ABMON_11 (ABMON_1 + 10) +# define ABMON_12 (ABMON_1 + 11) +# define ERA 10047 +# define ERA_D_FMT 10048 +# define ERA_D_T_FMT 10049 +# define ERA_T_FMT 10050 +# define ALT_DIGITS 10051 +/* nl_langinfo items of the LC_MONETARY category */ +# define CRNCYSTR 10052 +# define CURRENCY_SYMBOL CRNCYSTR +# define INT_CURR_SYMBOL 10100 +# define MON_DECIMAL_POINT 10101 +# define MON_THOUSANDS_SEP 10102 +# define MON_GROUPING 10103 +# define POSITIVE_SIGN 10104 +# define NEGATIVE_SIGN 10105 +# define FRAC_DIGITS 10106 +# define INT_FRAC_DIGITS 10107 +# define P_CS_PRECEDES 10108 +# define N_CS_PRECEDES 10109 +# define P_SEP_BY_SPACE 10110 +# define N_SEP_BY_SPACE 10111 +# define P_SIGN_POSN 10112 +# define N_SIGN_POSN 10113 +/* nl_langinfo items of the LC_MESSAGES category */ +# define YESEXPR 10053 +# define NOEXPR 10054 + +#else + +/* A platform that has <langinfo.h>. */ + +# if !1 +# define CODESET 10000 +# define GNULIB_defined_CODESET 1 +# endif + +# if !1 +# define T_FMT_AMPM 10006 +# define GNULIB_defined_T_FMT_AMPM 1 +# endif + +# if !0 +# define ALTMON_1 10200 +# define ALTMON_2 (ALTMON_1 + 1) +# define ALTMON_3 (ALTMON_1 + 2) +# define ALTMON_4 (ALTMON_1 + 3) +# define ALTMON_5 (ALTMON_1 + 4) +# define ALTMON_6 (ALTMON_1 + 5) +# define ALTMON_7 (ALTMON_1 + 6) +# define ALTMON_8 (ALTMON_1 + 7) +# define ALTMON_9 (ALTMON_1 + 8) +# define ALTMON_10 (ALTMON_1 + 9) +# define ALTMON_11 (ALTMON_1 + 10) +# define ALTMON_12 (ALTMON_1 + 11) +# define GNULIB_defined_ALTMON 1 +# endif + +# if !1 +# define ERA 10047 +# define ERA_D_FMT 10048 +# define ERA_D_T_FMT 10049 +# define ERA_T_FMT 10050 +# define ALT_DIGITS 10051 +# define GNULIB_defined_ERA 1 +# endif + +# if !1 +# define YESEXPR 10053 +# define NOEXPR 10054 +# define GNULIB_defined_YESEXPR 1 +# endif + +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* Declare overridden functions. */ + + +/* Return a piece of locale dependent information. + Note: The difference between nl_langinfo (CODESET) and locale_charset () + is that the latter normalizes the encoding names to GNU conventions. */ + +#if 1 +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef nl_langinfo +# define nl_langinfo rpl_nl_langinfo +# endif +_GL_FUNCDECL_RPL (nl_langinfo, char *, (nl_item item)); +_GL_CXXALIAS_RPL (nl_langinfo, char *, (nl_item item)); +# else +# if !1 +_GL_FUNCDECL_SYS (nl_langinfo, char *, (nl_item item)); +# endif +_GL_CXXALIAS_SYS (nl_langinfo, char *, (nl_item item)); +# endif +_GL_CXXALIASWARN (nl_langinfo); +#elif defined GNULIB_POSIXCHECK +# undef nl_langinfo +# if HAVE_RAW_DECL_NL_LANGINFO +_GL_WARN_ON_USE (nl_langinfo, "nl_langinfo is not portable - " + "use gnulib module nl_langinfo for portability"); +# endif +#endif + + +#endif /* _GL_LANGINFO_H */ +#endif /* _GL_LANGINFO_H */ diff --git a/devspec.en_US/project/recutils/lib/langinfo.in.h b/devspec.en_US/project/recutils/lib/langinfo.in.h new file mode 100755 index 0000000..6d40635 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/langinfo.in.h @@ -0,0 +1,222 @@ +/* Substitute for and wrapper around <langinfo.h>. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* + * POSIX <langinfo.h> for platforms that lack it or have an incomplete one. + * <http://www.opengroup.org/onlinepubs/9699919799/basedefs/langinfo.h.html> + */ + +#ifndef _@GUARD_PREFIX@_LANGINFO_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_LANGINFO_H@ +# @INCLUDE_NEXT@ @NEXT_LANGINFO_H@ +#endif + +#ifndef _@GUARD_PREFIX@_LANGINFO_H +#define _@GUARD_PREFIX@_LANGINFO_H + + +#if !@HAVE_LANGINFO_H@ + +/* A platform that lacks <langinfo.h>. */ + +/* Assume that it also lacks <nl_types.h> and the nl_item type. */ +# if !GNULIB_defined_nl_item +typedef int nl_item; +# define GNULIB_defined_nl_item 1 +# endif + +/* nl_langinfo items of the LC_CTYPE category */ +# define CODESET 10000 +/* nl_langinfo items of the LC_NUMERIC category */ +# define RADIXCHAR 10001 +# define DECIMAL_POINT RADIXCHAR +# define THOUSEP 10002 +# define THOUSANDS_SEP THOUSEP +# define GROUPING 10114 +/* nl_langinfo items of the LC_TIME category */ +# define D_T_FMT 10003 +# define D_FMT 10004 +# define T_FMT 10005 +# define T_FMT_AMPM 10006 +# define AM_STR 10007 +# define PM_STR 10008 +# define DAY_1 10009 +# define DAY_2 (DAY_1 + 1) +# define DAY_3 (DAY_1 + 2) +# define DAY_4 (DAY_1 + 3) +# define DAY_5 (DAY_1 + 4) +# define DAY_6 (DAY_1 + 5) +# define DAY_7 (DAY_1 + 6) +# define ABDAY_1 10016 +# define ABDAY_2 (ABDAY_1 + 1) +# define ABDAY_3 (ABDAY_1 + 2) +# define ABDAY_4 (ABDAY_1 + 3) +# define ABDAY_5 (ABDAY_1 + 4) +# define ABDAY_6 (ABDAY_1 + 5) +# define ABDAY_7 (ABDAY_1 + 6) +# define MON_1 10023 +# define MON_2 (MON_1 + 1) +# define MON_3 (MON_1 + 2) +# define MON_4 (MON_1 + 3) +# define MON_5 (MON_1 + 4) +# define MON_6 (MON_1 + 5) +# define MON_7 (MON_1 + 6) +# define MON_8 (MON_1 + 7) +# define MON_9 (MON_1 + 8) +# define MON_10 (MON_1 + 9) +# define MON_11 (MON_1 + 10) +# define MON_12 (MON_1 + 11) +# define ALTMON_1 10200 +# define ALTMON_2 (ALTMON_1 + 1) +# define ALTMON_3 (ALTMON_1 + 2) +# define ALTMON_4 (ALTMON_1 + 3) +# define ALTMON_5 (ALTMON_1 + 4) +# define ALTMON_6 (ALTMON_1 + 5) +# define ALTMON_7 (ALTMON_1 + 6) +# define ALTMON_8 (ALTMON_1 + 7) +# define ALTMON_9 (ALTMON_1 + 8) +# define ALTMON_10 (ALTMON_1 + 9) +# define ALTMON_11 (ALTMON_1 + 10) +# define ALTMON_12 (ALTMON_1 + 11) +# define ABMON_1 10035 +# define ABMON_2 (ABMON_1 + 1) +# define ABMON_3 (ABMON_1 + 2) +# define ABMON_4 (ABMON_1 + 3) +# define ABMON_5 (ABMON_1 + 4) +# define ABMON_6 (ABMON_1 + 5) +# define ABMON_7 (ABMON_1 + 6) +# define ABMON_8 (ABMON_1 + 7) +# define ABMON_9 (ABMON_1 + 8) +# define ABMON_10 (ABMON_1 + 9) +# define ABMON_11 (ABMON_1 + 10) +# define ABMON_12 (ABMON_1 + 11) +# define ERA 10047 +# define ERA_D_FMT 10048 +# define ERA_D_T_FMT 10049 +# define ERA_T_FMT 10050 +# define ALT_DIGITS 10051 +/* nl_langinfo items of the LC_MONETARY category */ +# define CRNCYSTR 10052 +# define CURRENCY_SYMBOL CRNCYSTR +# define INT_CURR_SYMBOL 10100 +# define MON_DECIMAL_POINT 10101 +# define MON_THOUSANDS_SEP 10102 +# define MON_GROUPING 10103 +# define POSITIVE_SIGN 10104 +# define NEGATIVE_SIGN 10105 +# define FRAC_DIGITS 10106 +# define INT_FRAC_DIGITS 10107 +# define P_CS_PRECEDES 10108 +# define N_CS_PRECEDES 10109 +# define P_SEP_BY_SPACE 10110 +# define N_SEP_BY_SPACE 10111 +# define P_SIGN_POSN 10112 +# define N_SIGN_POSN 10113 +/* nl_langinfo items of the LC_MESSAGES category */ +# define YESEXPR 10053 +# define NOEXPR 10054 + +#else + +/* A platform that has <langinfo.h>. */ + +# if !@HAVE_LANGINFO_CODESET@ +# define CODESET 10000 +# define GNULIB_defined_CODESET 1 +# endif + +# if !@HAVE_LANGINFO_T_FMT_AMPM@ +# define T_FMT_AMPM 10006 +# define GNULIB_defined_T_FMT_AMPM 1 +# endif + +# if !@HAVE_LANGINFO_ALTMON@ +# define ALTMON_1 10200 +# define ALTMON_2 (ALTMON_1 + 1) +# define ALTMON_3 (ALTMON_1 + 2) +# define ALTMON_4 (ALTMON_1 + 3) +# define ALTMON_5 (ALTMON_1 + 4) +# define ALTMON_6 (ALTMON_1 + 5) +# define ALTMON_7 (ALTMON_1 + 6) +# define ALTMON_8 (ALTMON_1 + 7) +# define ALTMON_9 (ALTMON_1 + 8) +# define ALTMON_10 (ALTMON_1 + 9) +# define ALTMON_11 (ALTMON_1 + 10) +# define ALTMON_12 (ALTMON_1 + 11) +# define GNULIB_defined_ALTMON 1 +# endif + +# if !@HAVE_LANGINFO_ERA@ +# define ERA 10047 +# define ERA_D_FMT 10048 +# define ERA_D_T_FMT 10049 +# define ERA_T_FMT 10050 +# define ALT_DIGITS 10051 +# define GNULIB_defined_ERA 1 +# endif + +# if !@HAVE_LANGINFO_YESEXPR@ +# define YESEXPR 10053 +# define NOEXPR 10054 +# define GNULIB_defined_YESEXPR 1 +# endif + +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +/* Declare overridden functions. */ + + +/* Return a piece of locale dependent information. + Note: The difference between nl_langinfo (CODESET) and locale_charset () + is that the latter normalizes the encoding names to GNU conventions. */ + +#if @GNULIB_NL_LANGINFO@ +# if @REPLACE_NL_LANGINFO@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef nl_langinfo +# define nl_langinfo rpl_nl_langinfo +# endif +_GL_FUNCDECL_RPL (nl_langinfo, char *, (nl_item item)); +_GL_CXXALIAS_RPL (nl_langinfo, char *, (nl_item item)); +# else +# if !@HAVE_NL_LANGINFO@ +_GL_FUNCDECL_SYS (nl_langinfo, char *, (nl_item item)); +# endif +_GL_CXXALIAS_SYS (nl_langinfo, char *, (nl_item item)); +# endif +_GL_CXXALIASWARN (nl_langinfo); +#elif defined GNULIB_POSIXCHECK +# undef nl_langinfo +# if HAVE_RAW_DECL_NL_LANGINFO +_GL_WARN_ON_USE (nl_langinfo, "nl_langinfo is not portable - " + "use gnulib module nl_langinfo for portability"); +# endif +#endif + + +#endif /* _@GUARD_PREFIX@_LANGINFO_H */ +#endif /* _@GUARD_PREFIX@_LANGINFO_H */ diff --git a/devspec.en_US/project/recutils/lib/libc-config.h b/devspec.en_US/project/recutils/lib/libc-config.h new file mode 100755 index 0000000..57c6966 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/libc-config.h @@ -0,0 +1,174 @@ +/* System definitions for code taken from the GNU C Library + + Copyright 2017-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, see + <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert. */ + +/* This is intended to be a good-enough substitute for glibc system + macros like those defined in <sys/cdefs.h>, so that Gnulib code + shared with glibc can do this as the first #include: + + #ifndef _LIBC + # include <libc-config.h> + #endif + + When compiled as part of glibc this is a no-op; when compiled as + part of Gnulib this includes Gnulib's <config.h> and defines macros + that glibc library code would normally assume. */ + +#include <config.h> + +/* On glibc this includes <features.h> and <sys/cdefs.h> and #defines + _FEATURES_H, __WORDSIZE, and __set_errno. On FreeBSD 11 it + includes <sys/cdefs.h> which defines __nonnull. Elsewhere it + is harmless. */ +#include <errno.h> + +/* From glibc <errno.h>. */ +#ifndef __set_errno +# define __set_errno(val) (errno = (val)) +#endif + +/* From glibc <features.h>. */ + +#ifndef __GNUC_PREREQ +# if defined __GNUC__ && defined __GNUC_MINOR__ +# define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= __GNUC_MINOR__)) +# else +# define __GNUC_PREREQ(maj, min) 0 +# endif +#endif + +#ifndef __glibc_clang_prereq +# if defined __clang_major__ && defined __clang_minor__ +# define __glibc_clang_prereq(maj, min) \ + ((maj) < __clang_major__ + ((min) <= __clang_minor__)) +# else +# define __glibc_clang_prereq(maj, min) 0 +# endif +#endif + + +/* Prepare to include <cdefs.h>, which is our copy of glibc + <sys/cdefs.h>. */ + +/* Define _FEATURES_H so that <cdefs.h> does not include <features.h>. */ +#ifndef _FEATURES_H +# define _FEATURES_H 1 +#endif +/* Define __WORDSIZE so that <cdefs.h> does not attempt to include + nonexistent files. Make it a syntax error, since Gnulib does not + use __WORDSIZE now, and if Gnulib uses it later the syntax error + will let us know that __WORDSIZE needs configuring. */ +#ifndef __WORDSIZE +# define __WORDSIZE %%% +#endif +/* Undef the macros unconditionally defined by our copy of glibc + <sys/cdefs.h>, so that they do not clash with any system-defined + versions. */ +#undef _SYS_CDEFS_H +#undef __ASMNAME +#undef __ASMNAME2 +#undef __BEGIN_DECLS +#undef __CONCAT +#undef __END_DECLS +#undef __HAVE_GENERIC_SELECTION +#undef __LDBL_COMPAT +#undef __LDBL_REDIR +#undef __LDBL_REDIR1 +#undef __LDBL_REDIR1_DECL +#undef __LDBL_REDIR1_NTH +#undef __LDBL_REDIR_DECL +#undef __LDBL_REDIR_NTH +#undef __LEAF +#undef __LEAF_ATTR +#undef __NTH +#undef __NTHNL +#undef __P +#undef __PMT +#undef __REDIRECT +#undef __REDIRECT_LDBL +#undef __REDIRECT_NTH +#undef __REDIRECT_NTHNL +#undef __REDIRECT_NTH_LDBL +#undef __STRING +#undef __THROW +#undef __THROWNL +#undef __always_inline +#undef __attribute__ +#undef __attribute_alloc_size__ +#undef __attribute_artificial__ +#undef __attribute_const__ +#undef __attribute_deprecated__ +#undef __attribute_deprecated_msg__ +#undef __attribute_format_arg__ +#undef __attribute_format_strfmon__ +#undef __attribute_malloc__ +#undef __attribute_noinline__ +#undef __attribute_nonstring__ +#undef __attribute_pure__ +#undef __attribute_used__ +#undef __attribute_warn_unused_result__ +#undef __bos +#undef __bos0 +#undef __errordecl +#undef __extension__ +#undef __extern_always_inline +#undef __extern_inline +#undef __flexarr +#undef __fortify_function +#undef __glibc_c99_flexarr_available +#undef __glibc_clang_has_extension +#undef __glibc_likely +#undef __glibc_macro_warning +#undef __glibc_macro_warning1 +#undef __glibc_unlikely +#undef __inline +#undef __ptr_t +#undef __restrict +#undef __restrict_arr +#undef __va_arg_pack +#undef __va_arg_pack_len +#undef __warnattr +#undef __warndecl + +/* Include our copy of glibc <sys/cdefs.h>. */ +#include <cdefs.h> + +/* <cdefs.h> __inline is too pessimistic for non-GCC. */ +#undef __inline +#ifndef HAVE___INLINE +# if 199901 <= __STDC_VERSION__ || defined inline +# define __inline inline +# else +# define __inline +# endif +#endif + + +/* A substitute for glibc <libc-symbols.h>, good enough for Gnulib. */ +#define attribute_hidden +#define libc_hidden_proto(name, ...) +#define libc_hidden_def(name) +#define libc_hidden_weak(name) +#define libc_hidden_ver(local, name) +#define strong_alias(name, aliasname) +#define weak_alias(name, aliasname) + +/* A substitute for glibc <shlib-compat.h>, good enough for Gnulib. */ +#define SHLIB_COMPAT(lib, introduced, obsoleted) 0 +#define versioned_symbol(lib, local, symbol, version) diff --git a/devspec.en_US/project/recutils/lib/limits.h b/devspec.en_US/project/recutils/lib/limits.h new file mode 100755 index 0000000..6fea064 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/limits.h @@ -0,0 +1,105 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like <limits.h>. + + Copyright 2016-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_LIMITS_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* The include_next requires a split double-inclusion guard. */ +#include_next <limits.h> + +#ifndef _GL_LIMITS_H +#define _GL_LIMITS_H + +#ifndef LLONG_MIN +# if defined LONG_LONG_MIN /* HP-UX 11.31 */ +# define LLONG_MIN LONG_LONG_MIN +# elif defined LONGLONG_MIN /* IRIX 6.5 */ +# define LLONG_MIN LONGLONG_MIN +# elif defined __GNUC__ +# define LLONG_MIN (- __LONG_LONG_MAX__ - 1LL) +# endif +#endif +#ifndef LLONG_MAX +# if defined LONG_LONG_MAX /* HP-UX 11.31 */ +# define LLONG_MAX LONG_LONG_MAX +# elif defined LONGLONG_MAX /* IRIX 6.5 */ +# define LLONG_MAX LONGLONG_MAX +# elif defined __GNUC__ +# define LLONG_MAX __LONG_LONG_MAX__ +# endif +#endif +#ifndef ULLONG_MAX +# if defined ULONG_LONG_MAX /* HP-UX 11.31 */ +# define ULLONG_MAX ULONG_LONG_MAX +# elif defined ULONGLONG_MAX /* IRIX 6.5 */ +# define ULLONG_MAX ULONGLONG_MAX +# elif defined __GNUC__ +# define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL) +# endif +#endif + +/* The number of usable bits in an unsigned or signed integer type + with minimum value MIN and maximum value MAX, as an int expression + suitable in #if. Cover all known practical hosts. This + implementation exploits the fact that MAX is 1 less than a power of + 2, and merely counts the number of 1 bits in MAX; "COBn" means + "count the number of 1 bits in the low-order n bits"). */ +#define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max)) +#define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n)) +#define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n)) +#define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n)) +#define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n)) +#define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n)) +#define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1)) + +#ifndef WORD_BIT +/* Assume 'int' is 32 bits wide. */ +# define WORD_BIT 32 +#endif +#ifndef LONG_BIT +/* Assume 'long' is 32 or 64 bits wide. */ +# if LONG_MAX == INT_MAX +# define LONG_BIT 32 +# else +# define LONG_BIT 64 +# endif +#endif + +/* Macros specified by ISO/IEC TS 18661-1:2014. */ + +#if (! defined ULLONG_WIDTH \ + && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) +# define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX) +# define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX) +# define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX) +# define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX) +# define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX) +# define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX) +# define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX) +# define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX) +# define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX) +# define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX) +# define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX) +#endif /* !ULLONG_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ + +#endif /* _GL_LIMITS_H */ +#endif /* _GL_LIMITS_H */ diff --git a/devspec.en_US/project/recutils/lib/limits.in.h b/devspec.en_US/project/recutils/lib/limits.in.h new file mode 100755 index 0000000..39750b3 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/limits.in.h @@ -0,0 +1,104 @@ +/* A GNU-like <limits.h>. + + Copyright 2016-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 3, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _@GUARD_PREFIX@_LIMITS_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_LIMITS_H@ + +#ifndef _@GUARD_PREFIX@_LIMITS_H +#define _@GUARD_PREFIX@_LIMITS_H + +#ifndef LLONG_MIN +# if defined LONG_LONG_MIN /* HP-UX 11.31 */ +# define LLONG_MIN LONG_LONG_MIN +# elif defined LONGLONG_MIN /* IRIX 6.5 */ +# define LLONG_MIN LONGLONG_MIN +# elif defined __GNUC__ +# define LLONG_MIN (- __LONG_LONG_MAX__ - 1LL) +# endif +#endif +#ifndef LLONG_MAX +# if defined LONG_LONG_MAX /* HP-UX 11.31 */ +# define LLONG_MAX LONG_LONG_MAX +# elif defined LONGLONG_MAX /* IRIX 6.5 */ +# define LLONG_MAX LONGLONG_MAX +# elif defined __GNUC__ +# define LLONG_MAX __LONG_LONG_MAX__ +# endif +#endif +#ifndef ULLONG_MAX +# if defined ULONG_LONG_MAX /* HP-UX 11.31 */ +# define ULLONG_MAX ULONG_LONG_MAX +# elif defined ULONGLONG_MAX /* IRIX 6.5 */ +# define ULLONG_MAX ULONGLONG_MAX +# elif defined __GNUC__ +# define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL) +# endif +#endif + +/* The number of usable bits in an unsigned or signed integer type + with minimum value MIN and maximum value MAX, as an int expression + suitable in #if. Cover all known practical hosts. This + implementation exploits the fact that MAX is 1 less than a power of + 2, and merely counts the number of 1 bits in MAX; "COBn" means + "count the number of 1 bits in the low-order n bits"). */ +#define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max)) +#define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n)) +#define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n)) +#define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n)) +#define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n)) +#define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n)) +#define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1)) + +#ifndef WORD_BIT +/* Assume 'int' is 32 bits wide. */ +# define WORD_BIT 32 +#endif +#ifndef LONG_BIT +/* Assume 'long' is 32 or 64 bits wide. */ +# if LONG_MAX == INT_MAX +# define LONG_BIT 32 +# else +# define LONG_BIT 64 +# endif +#endif + +/* Macros specified by ISO/IEC TS 18661-1:2014. */ + +#if (! defined ULLONG_WIDTH \ + && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) +# define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX) +# define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX) +# define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX) +# define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX) +# define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX) +# define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX) +# define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX) +# define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX) +# define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX) +# define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX) +# define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX) +#endif /* !ULLONG_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ + +#endif /* _@GUARD_PREFIX@_LIMITS_H */ +#endif /* _@GUARD_PREFIX@_LIMITS_H */ diff --git a/devspec.en_US/project/recutils/lib/localcharset.c b/devspec.en_US/project/recutils/lib/localcharset.c new file mode 100755 index 0000000..38e27e6 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/localcharset.c @@ -0,0 +1,996 @@ +/* Determine a canonical name for the current locale's character encoding. + + Copyright (C) 2000-2006, 2008-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>. */ + +#include <config.h> + +/* Specification. */ +#include "localcharset.h" + +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +#if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET +# define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */ +#endif + +#if defined _WIN32 && !defined __CYGWIN__ +# define WINDOWS_NATIVE +# include <locale.h> +#endif + +#if defined __EMX__ +/* Assume EMX program runs on OS/2, even if compiled under DOS. */ +# ifndef OS2 +# define OS2 +# endif +#endif + +#if !defined WINDOWS_NATIVE +# if HAVE_LANGINFO_CODESET +# include <langinfo.h> +# else +# if 0 /* see comment regarding use of setlocale(), below */ +# include <locale.h> +# endif +# endif +# ifdef __CYGWIN__ +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +# endif +#elif defined WINDOWS_NATIVE +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +#endif +#if defined OS2 +# define INCL_DOS +# include <os2.h> +#endif + +/* For MB_CUR_MAX_L */ +#if defined DARWIN7 +# include <xlocale.h> +#endif + + +#if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 + +/* On these platforms, we use a mapping from non-canonical encoding name + to GNU canonical encoding name. */ + +/* With glibc-2.1 or newer, we don't need any canonicalization, + because glibc has iconv and both glibc and libiconv support all + GNU canonical names directly. */ +# if !((defined __GNU_LIBRARY__ && __GLIBC__ >= 2) || defined __UCLIBC__) + +struct table_entry +{ + const char alias[11+1]; + const char canonical[11+1]; +}; + +/* Table of platform-dependent mappings, sorted in ascending order. */ +static const struct table_entry alias_table[] = + { +# if defined __FreeBSD__ /* FreeBSD */ + /*{ "ARMSCII-8", "ARMSCII-8" },*/ + { "Big5", "BIG5" }, + { "C", "ASCII" }, + /*{ "CP1131", "CP1131" },*/ + /*{ "CP1251", "CP1251" },*/ + /*{ "CP866", "CP866" },*/ + /*{ "GB18030", "GB18030" },*/ + /*{ "GB2312", "GB2312" },*/ + /*{ "GBK", "GBK" },*/ + /*{ "ISCII-DEV", "?" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-9", "ISO-8859-9" }, + /*{ "KOI8-R", "KOI8-R" },*/ + /*{ "KOI8-U", "KOI8-U" },*/ + { "SJIS", "SHIFT_JIS" }, + { "US-ASCII", "ASCII" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" } +# define alias_table_defined +# endif +# if defined __NetBSD__ /* NetBSD */ + { "646", "ASCII" }, + /*{ "ARMSCII-8", "ARMSCII-8" },*/ + /*{ "BIG5", "BIG5" },*/ + { "Big5-HKSCS", "BIG5-HKSCS" }, + /*{ "CP1251", "CP1251" },*/ + /*{ "CP866", "CP866" },*/ + /*{ "GB18030", "GB18030" },*/ + /*{ "GB2312", "GB2312" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + /*{ "KOI8-R", "KOI8-R" },*/ + /*{ "KOI8-U", "KOI8-U" },*/ + /*{ "PT154", "PT154" },*/ + { "SJIS", "SHIFT_JIS" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" } +# define alias_table_defined +# endif +# if defined __OpenBSD__ /* OpenBSD */ + { "646", "ASCII" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" } +# define alias_table_defined +# endif +# if defined __APPLE__ && defined __MACH__ /* Mac OS X */ + /* Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is + useless: + - It returns the empty string when LANG is set to a locale of the + form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 + LC_CTYPE file. + - The environment variables LANG, LC_CTYPE, LC_ALL are not set by + the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. + - The documentation says: + "... all code that calls BSD system routines should ensure + that the const *char parameters of these routines are in UTF-8 + encoding. All BSD system functions expect their string + parameters to be in UTF-8 encoding and nothing else." + It also says + "An additional caveat is that string parameters for files, + paths, and other file-system entities must be in canonical + UTF-8. In a canonical UTF-8 Unicode string, all decomposable + characters are decomposed ..." + but this is not true: You can pass non-decomposed UTF-8 strings + to file system functions, and it is the OS which will convert + them to decomposed UTF-8 before accessing the file system. + - The Apple Terminal application displays UTF-8 by default. + - However, other applications are free to use different encodings: + - xterm uses ISO-8859-1 by default. + - TextEdit uses MacRoman by default. + We prefer UTF-8 over decomposed UTF-8-MAC because one should + minimize the use of decomposed Unicode. Unfortunately, through the + Darwin file system, decomposed UTF-8 strings are leaked into user + space nevertheless. + Then there are also the locales with encodings other than US-ASCII + and UTF-8. These locales can be occasionally useful to users (e.g. + when grepping through ISO-8859-1 encoded text files), when all their + file names are in US-ASCII. + */ + { "ARMSCII-8", "ARMSCII-8" }, + { "Big5", "BIG5" }, + { "Big5HKSCS", "BIG5-HKSCS" }, + { "CP1131", "CP1131" }, + { "CP1251", "CP1251" }, + { "CP866", "CP866" }, + { "CP949", "CP949" }, + { "GB18030", "GB18030" }, + { "GB2312", "GB2312" }, + { "GBK", "GBK" }, + /*{ "ISCII-DEV", "?" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-9", "ISO-8859-9" }, + { "KOI8-R", "KOI8-R" }, + { "KOI8-U", "KOI8-U" }, + { "PT154", "PT154" }, + { "SJIS", "SHIFT_JIS" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" } +# define alias_table_defined +# endif +# if defined _AIX /* AIX */ + /*{ "GBK", "GBK" },*/ + { "IBM-1046", "CP1046" }, + { "IBM-1124", "CP1124" }, + { "IBM-1129", "CP1129" }, + { "IBM-1252", "CP1252" }, + { "IBM-850", "CP850" }, + { "IBM-856", "CP856" }, + { "IBM-921", "ISO-8859-13" }, + { "IBM-922", "CP922" }, + { "IBM-932", "CP932" }, + { "IBM-943", "CP943" }, + { "IBM-eucCN", "GB2312" }, + { "IBM-eucJP", "EUC-JP" }, + { "IBM-eucKR", "EUC-KR" }, + { "IBM-eucTW", "EUC-TW" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-6", "ISO-8859-6" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "TIS-620", "TIS-620" }, + /*{ "UTF-8", "UTF-8" },*/ + { "big5", "BIG5" } +# define alias_table_defined +# endif +# if defined __hpux /* HP-UX */ + { "SJIS", "SHIFT_JIS" }, + { "arabic8", "HP-ARABIC8" }, + { "big5", "BIG5" }, + { "cp1251", "CP1251" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" }, + { "gb18030", "GB18030" }, + { "greek8", "HP-GREEK8" }, + { "hebrew8", "HP-HEBREW8" }, + { "hkbig5", "BIG5-HKSCS" }, + { "hp15CN", "GB2312" }, + { "iso88591", "ISO-8859-1" }, + { "iso885913", "ISO-8859-13" }, + { "iso885915", "ISO-8859-15" }, + { "iso88592", "ISO-8859-2" }, + { "iso88594", "ISO-8859-4" }, + { "iso88595", "ISO-8859-5" }, + { "iso88596", "ISO-8859-6" }, + { "iso88597", "ISO-8859-7" }, + { "iso88598", "ISO-8859-8" }, + { "iso88599", "ISO-8859-9" }, + { "kana8", "HP-KANA8" }, + { "koi8r", "KOI8-R" }, + { "roman8", "HP-ROMAN8" }, + { "tis620", "TIS-620" }, + { "turkish8", "HP-TURKISH8" }, + { "utf8", "UTF-8" } +# define alias_table_defined +# endif +# if defined __sgi /* IRIX */ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-9", "ISO-8859-9" }, + { "eucCN", "GB2312" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" } +# define alias_table_defined +# endif +# if defined __osf__ /* OSF/1 */ + /*{ "GBK", "GBK" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "KSC5601", "CP949" }, + { "SJIS", "SHIFT_JIS" }, + { "TACTIS", "TIS-620" }, + /*{ "UTF-8", "UTF-8" },*/ + { "big5", "BIG5" }, + { "cp850", "CP850" }, + { "dechanyu", "DEC-HANYU" }, + { "dechanzi", "GB2312" }, + { "deckanji", "DEC-KANJI" }, + { "deckorean", "EUC-KR" }, + { "eucJP", "EUC-JP" }, + { "eucKR", "EUC-KR" }, + { "eucTW", "EUC-TW" }, + { "sdeckanji", "EUC-JP" } +# define alias_table_defined +# endif +# if defined __sun /* Solaris */ + { "5601", "EUC-KR" }, + { "646", "ASCII" }, + /*{ "BIG5", "BIG5" },*/ + { "Big5-HKSCS", "BIG5-HKSCS" }, + { "GB18030", "GB18030" }, + /*{ "GBK", "GBK" },*/ + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-11", "TIS-620" }, + { "ISO8859-13", "ISO-8859-13" }, + { "ISO8859-15", "ISO-8859-15" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-3", "ISO-8859-3" }, + { "ISO8859-4", "ISO-8859-4" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-6", "ISO-8859-6" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "PCK", "SHIFT_JIS" }, + { "TIS620.2533", "TIS-620" }, + /*{ "UTF-8", "UTF-8" },*/ + { "ansi-1251", "CP1251" }, + { "cns11643", "EUC-TW" }, + { "eucJP", "EUC-JP" }, + { "gb2312", "GB2312" }, + { "koi8-r", "KOI8-R" } +# define alias_table_defined +# endif +# if defined __minix /* Minix */ + { "646", "ASCII" } +# define alias_table_defined +# endif +# if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Windows */ + { "CP1361", "JOHAB" }, + { "CP20127", "ASCII" }, + { "CP20866", "KOI8-R" }, + { "CP20936", "GB2312" }, + { "CP21866", "KOI8-RU" }, + { "CP28591", "ISO-8859-1" }, + { "CP28592", "ISO-8859-2" }, + { "CP28593", "ISO-8859-3" }, + { "CP28594", "ISO-8859-4" }, + { "CP28595", "ISO-8859-5" }, + { "CP28596", "ISO-8859-6" }, + { "CP28597", "ISO-8859-7" }, + { "CP28598", "ISO-8859-8" }, + { "CP28599", "ISO-8859-9" }, + { "CP28605", "ISO-8859-15" }, + { "CP38598", "ISO-8859-8" }, + { "CP51932", "EUC-JP" }, + { "CP51936", "GB2312" }, + { "CP51949", "EUC-KR" }, + { "CP51950", "EUC-TW" }, + { "CP54936", "GB18030" }, + { "CP65001", "UTF-8" }, + { "CP936", "GBK" } +# define alias_table_defined +# endif +# if defined OS2 /* OS/2 */ + /* The list of encodings is taken from "List of OS/2 Codepages" + by Alex Taylor: + <http://altsan.org/os2/toolkits/uls/index.html#codepages>. + See also "IBM Globalization - Code page identifiers": + <https://www-01.ibm.com/software/globalization/cp/cp_cpgid.html>. */ + { "CP1089", "ISO-8859-6" }, + { "CP1208", "UTF-8" }, + { "CP1381", "GB2312" }, + { "CP1386", "GBK" }, + { "CP3372", "EUC-JP" }, + { "CP813", "ISO-8859-7" }, + { "CP819", "ISO-8859-1" }, + { "CP878", "KOI8-R" }, + { "CP912", "ISO-8859-2" }, + { "CP913", "ISO-8859-3" }, + { "CP914", "ISO-8859-4" }, + { "CP915", "ISO-8859-5" }, + { "CP916", "ISO-8859-8" }, + { "CP920", "ISO-8859-9" }, + { "CP921", "ISO-8859-13" }, + { "CP923", "ISO-8859-15" }, + { "CP954", "EUC-JP" }, + { "CP964", "EUC-TW" }, + { "CP970", "EUC-KR" } +# define alias_table_defined +# endif +# if defined VMS /* OpenVMS */ + /* The list of encodings is taken from the OpenVMS 7.3-1 documentation + "Compaq C Run-Time Library Reference Manual for OpenVMS systems" + section 10.7 "Handling Different Character Sets". */ + { "DECHANYU", "DEC-HANYU" }, + { "DECHANZI", "GB2312" }, + { "DECKANJI", "DEC-KANJI" }, + { "DECKOREAN", "EUC-KR" }, + { "ISO8859-1", "ISO-8859-1" }, + { "ISO8859-2", "ISO-8859-2" }, + { "ISO8859-5", "ISO-8859-5" }, + { "ISO8859-7", "ISO-8859-7" }, + { "ISO8859-8", "ISO-8859-8" }, + { "ISO8859-9", "ISO-8859-9" }, + { "SDECKANJI", "EUC-JP" }, + { "SJIS", "SHIFT_JIS" }, + { "eucJP", "EUC-JP" }, + { "eucTW", "EUC-TW" } +# define alias_table_defined +# endif +# ifndef alias_table_defined + /* Just a dummy entry, to avoid a C syntax error. */ + { "", "" } +# endif + }; + +# endif + +#else + +/* On these platforms, we use a mapping from locale name to GNU canonical + encoding name. */ + +struct table_entry +{ + const char locale[17+1]; + const char canonical[11+1]; +}; + +/* Table of platform-dependent mappings, sorted in ascending order. */ +static const struct table_entry locale_table[] = + { +# if defined __FreeBSD__ /* FreeBSD 4.2 */ + { "cs_CZ.ISO_8859-2", "ISO-8859-2" }, + { "da_DK.DIS_8859-15", "ISO-8859-15" }, + { "da_DK.ISO_8859-1", "ISO-8859-1" }, + { "de_AT.DIS_8859-15", "ISO-8859-15" }, + { "de_AT.ISO_8859-1", "ISO-8859-1" }, + { "de_CH.DIS_8859-15", "ISO-8859-15" }, + { "de_CH.ISO_8859-1", "ISO-8859-1" }, + { "de_DE.DIS_8859-15", "ISO-8859-15" }, + { "de_DE.ISO_8859-1", "ISO-8859-1" }, + { "en_AU.DIS_8859-15", "ISO-8859-15" }, + { "en_AU.ISO_8859-1", "ISO-8859-1" }, + { "en_CA.DIS_8859-15", "ISO-8859-15" }, + { "en_CA.ISO_8859-1", "ISO-8859-1" }, + { "en_GB.DIS_8859-15", "ISO-8859-15" }, + { "en_GB.ISO_8859-1", "ISO-8859-1" }, + { "en_US.DIS_8859-15", "ISO-8859-15" }, + { "en_US.ISO_8859-1", "ISO-8859-1" }, + { "es_ES.DIS_8859-15", "ISO-8859-15" }, + { "es_ES.ISO_8859-1", "ISO-8859-1" }, + { "fi_FI.DIS_8859-15", "ISO-8859-15" }, + { "fi_FI.ISO_8859-1", "ISO-8859-1" }, + { "fr_BE.DIS_8859-15", "ISO-8859-15" }, + { "fr_BE.ISO_8859-1", "ISO-8859-1" }, + { "fr_CA.DIS_8859-15", "ISO-8859-15" }, + { "fr_CA.ISO_8859-1", "ISO-8859-1" }, + { "fr_CH.DIS_8859-15", "ISO-8859-15" }, + { "fr_CH.ISO_8859-1", "ISO-8859-1" }, + { "fr_FR.DIS_8859-15", "ISO-8859-15" }, + { "fr_FR.ISO_8859-1", "ISO-8859-1" }, + { "hr_HR.ISO_8859-2", "ISO-8859-2" }, + { "hu_HU.ISO_8859-2", "ISO-8859-2" }, + { "is_IS.DIS_8859-15", "ISO-8859-15" }, + { "is_IS.ISO_8859-1", "ISO-8859-1" }, + { "it_CH.DIS_8859-15", "ISO-8859-15" }, + { "it_CH.ISO_8859-1", "ISO-8859-1" }, + { "it_IT.DIS_8859-15", "ISO-8859-15" }, + { "it_IT.ISO_8859-1", "ISO-8859-1" }, + { "ja_JP.EUC", "EUC-JP" }, + { "ja_JP.SJIS", "SHIFT_JIS" }, + { "ja_JP.Shift_JIS", "SHIFT_JIS" }, + { "ko_KR.EUC", "EUC-KR" }, + { "la_LN.ASCII", "ASCII" }, + { "la_LN.DIS_8859-15", "ISO-8859-15" }, + { "la_LN.ISO_8859-1", "ISO-8859-1" }, + { "la_LN.ISO_8859-2", "ISO-8859-2" }, + { "la_LN.ISO_8859-4", "ISO-8859-4" }, + { "lt_LN.ASCII", "ASCII" }, + { "lt_LN.DIS_8859-15", "ISO-8859-15" }, + { "lt_LN.ISO_8859-1", "ISO-8859-1" }, + { "lt_LN.ISO_8859-2", "ISO-8859-2" }, + { "lt_LT.ISO_8859-4", "ISO-8859-4" }, + { "nl_BE.DIS_8859-15", "ISO-8859-15" }, + { "nl_BE.ISO_8859-1", "ISO-8859-1" }, + { "nl_NL.DIS_8859-15", "ISO-8859-15" }, + { "nl_NL.ISO_8859-1", "ISO-8859-1" }, + { "no_NO.DIS_8859-15", "ISO-8859-15" }, + { "no_NO.ISO_8859-1", "ISO-8859-1" }, + { "pl_PL.ISO_8859-2", "ISO-8859-2" }, + { "pt_PT.DIS_8859-15", "ISO-8859-15" }, + { "pt_PT.ISO_8859-1", "ISO-8859-1" }, + { "ru_RU.CP866", "CP866" }, + { "ru_RU.ISO_8859-5", "ISO-8859-5" }, + { "ru_RU.KOI8-R", "KOI8-R" }, + { "ru_SU.CP866", "CP866" }, + { "ru_SU.ISO_8859-5", "ISO-8859-5" }, + { "ru_SU.KOI8-R", "KOI8-R" }, + { "sl_SI.ISO_8859-2", "ISO-8859-2" }, + { "sv_SE.DIS_8859-15", "ISO-8859-15" }, + { "sv_SE.ISO_8859-1", "ISO-8859-1" }, + { "uk_UA.KOI8-U", "KOI8-U" }, + { "zh_CN.EUC", "GB2312" }, + { "zh_TW.BIG5", "BIG5" }, + { "zh_TW.Big5", "BIG5" } +# define locale_table_defined +# endif +# if defined __DJGPP__ /* DOS / DJGPP 2.03 */ + /* The encodings given here may not all be correct. + If you find that the encoding given for your language and + country is not the one your DOS machine actually uses, just + correct it in this file, and send a mail to + Juan Manuel Guerrero <juan.guerrero@gmx.de> + and <bug-gnulib@gnu.org>. */ + { "C", "ASCII" }, + { "ar", "CP864" }, + { "ar_AE", "CP864" }, + { "ar_DZ", "CP864" }, + { "ar_EG", "CP864" }, + { "ar_IQ", "CP864" }, + { "ar_IR", "CP864" }, + { "ar_JO", "CP864" }, + { "ar_KW", "CP864" }, + { "ar_MA", "CP864" }, + { "ar_OM", "CP864" }, + { "ar_QA", "CP864" }, + { "ar_SA", "CP864" }, + { "ar_SY", "CP864" }, + { "be", "CP866" }, + { "be_BE", "CP866" }, + { "bg", "CP866" }, /* not CP855 ?? */ + { "bg_BG", "CP866" }, /* not CP855 ?? */ + { "ca", "CP850" }, + { "ca_ES", "CP850" }, + { "cs", "CP852" }, + { "cs_CZ", "CP852" }, + { "da", "CP865" }, /* not CP850 ?? */ + { "da_DK", "CP865" }, /* not CP850 ?? */ + { "de", "CP850" }, + { "de_AT", "CP850" }, + { "de_CH", "CP850" }, + { "de_DE", "CP850" }, + { "el", "CP869" }, + { "el_GR", "CP869" }, + { "en", "CP850" }, + { "en_AU", "CP850" }, /* not CP437 ?? */ + { "en_CA", "CP850" }, + { "en_GB", "CP850" }, + { "en_NZ", "CP437" }, + { "en_US", "CP437" }, + { "en_ZA", "CP850" }, /* not CP437 ?? */ + { "eo", "CP850" }, + { "eo_EO", "CP850" }, + { "es", "CP850" }, + { "es_AR", "CP850" }, + { "es_BO", "CP850" }, + { "es_CL", "CP850" }, + { "es_CO", "CP850" }, + { "es_CR", "CP850" }, + { "es_CU", "CP850" }, + { "es_DO", "CP850" }, + { "es_EC", "CP850" }, + { "es_ES", "CP850" }, + { "es_GT", "CP850" }, + { "es_HN", "CP850" }, + { "es_MX", "CP850" }, + { "es_NI", "CP850" }, + { "es_PA", "CP850" }, + { "es_PE", "CP850" }, + { "es_PY", "CP850" }, + { "es_SV", "CP850" }, + { "es_UY", "CP850" }, + { "es_VE", "CP850" }, + { "et", "CP850" }, + { "et_EE", "CP850" }, + { "eu", "CP850" }, + { "eu_ES", "CP850" }, + { "fi", "CP850" }, + { "fi_FI", "CP850" }, + { "fr", "CP850" }, + { "fr_BE", "CP850" }, + { "fr_CA", "CP850" }, + { "fr_CH", "CP850" }, + { "fr_FR", "CP850" }, + { "ga", "CP850" }, + { "ga_IE", "CP850" }, + { "gd", "CP850" }, + { "gd_GB", "CP850" }, + { "gl", "CP850" }, + { "gl_ES", "CP850" }, + { "he", "CP862" }, + { "he_IL", "CP862" }, + { "hr", "CP852" }, + { "hr_HR", "CP852" }, + { "hu", "CP852" }, + { "hu_HU", "CP852" }, + { "id", "CP850" }, /* not CP437 ?? */ + { "id_ID", "CP850" }, /* not CP437 ?? */ + { "is", "CP861" }, /* not CP850 ?? */ + { "is_IS", "CP861" }, /* not CP850 ?? */ + { "it", "CP850" }, + { "it_CH", "CP850" }, + { "it_IT", "CP850" }, + { "ja", "CP932" }, + { "ja_JP", "CP932" }, + { "kr", "CP949" }, /* not CP934 ?? */ + { "kr_KR", "CP949" }, /* not CP934 ?? */ + { "lt", "CP775" }, + { "lt_LT", "CP775" }, + { "lv", "CP775" }, + { "lv_LV", "CP775" }, + { "mk", "CP866" }, /* not CP855 ?? */ + { "mk_MK", "CP866" }, /* not CP855 ?? */ + { "mt", "CP850" }, + { "mt_MT", "CP850" }, + { "nb", "CP865" }, /* not CP850 ?? */ + { "nb_NO", "CP865" }, /* not CP850 ?? */ + { "nl", "CP850" }, + { "nl_BE", "CP850" }, + { "nl_NL", "CP850" }, + { "nn", "CP865" }, /* not CP850 ?? */ + { "nn_NO", "CP865" }, /* not CP850 ?? */ + { "no", "CP865" }, /* not CP850 ?? */ + { "no_NO", "CP865" }, /* not CP850 ?? */ + { "pl", "CP852" }, + { "pl_PL", "CP852" }, + { "pt", "CP850" }, + { "pt_BR", "CP850" }, + { "pt_PT", "CP850" }, + { "ro", "CP852" }, + { "ro_RO", "CP852" }, + { "ru", "CP866" }, + { "ru_RU", "CP866" }, + { "sk", "CP852" }, + { "sk_SK", "CP852" }, + { "sl", "CP852" }, + { "sl_SI", "CP852" }, + { "sq", "CP852" }, + { "sq_AL", "CP852" }, + { "sr", "CP852" }, /* CP852 or CP866 or CP855 ?? */ + { "sr_CS", "CP852" }, /* CP852 or CP866 or CP855 ?? */ + { "sr_YU", "CP852" }, /* CP852 or CP866 or CP855 ?? */ + { "sv", "CP850" }, + { "sv_SE", "CP850" }, + { "th", "CP874" }, + { "th_TH", "CP874" }, + { "tr", "CP857" }, + { "tr_TR", "CP857" }, + { "uk", "CP1125" }, + { "uk_UA", "CP1125" }, + { "zh_CN", "GBK" }, + { "zh_TW", "CP950" } /* not CP938 ?? */ +# define locale_table_defined +# endif +# ifndef locale_table_defined + /* Just a dummy entry, to avoid a C syntax error. */ + { "", "" } +# endif + }; + +#endif + + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed in localcharset.h. + The result must not be freed; it is statically allocated. + If the canonical name cannot be determined, the result is a non-canonical + name. */ + +#ifdef STATIC +STATIC +#endif +const char * +locale_charset (void) +{ + const char *codeset; + +#if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 + +# if HAVE_LANGINFO_CODESET + + /* Most systems support nl_langinfo (CODESET) nowadays. */ + codeset = nl_langinfo (CODESET); + +# ifdef __CYGWIN__ + /* Cygwin < 1.7 does not have locales. nl_langinfo (CODESET) always + returns "US-ASCII". Return the suffix of the locale name from the + environment variables (if present) or the codepage as a number. */ + if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0) + { + const char *locale; + static char buf[2 + 10 + 1]; + + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + if (locale != NULL && locale[0] != '\0') + { + /* If the locale name contains an encoding after the dot, return + it. */ + const char *dot = strchr (locale, '.'); + + if (dot != NULL) + { + const char *modifier; + + dot++; + /* Look for the possible @... trailer and remove it, if any. */ + modifier = strchr (dot, '@'); + if (modifier == NULL) + return dot; + if (modifier - dot < sizeof (buf)) + { + memcpy (buf, dot, modifier - dot); + buf [modifier - dot] = '\0'; + return buf; + } + } + } + + /* The Windows API has a function returning the locale's codepage as a + number: GetACP(). This encoding is used by Cygwin, unless the user + has set the environment variable CYGWIN=codepage:oem (which very few + people do). + Output directed to console windows needs to be converted (to + GetOEMCP() if the console is using a raster font, or to + GetConsoleOutputCP() if it is using a TrueType font). Cygwin does + this conversion transparently (see winsup/cygwin/fhandler_console.cc), + converting to GetConsoleOutputCP(). This leads to correct results, + except when SetConsoleOutputCP has been called and a raster font is + in use. */ + sprintf (buf, "CP%u", GetACP ()); + codeset = buf; + } +# endif + + if (codeset == NULL) + /* The canonical name cannot be determined. */ + codeset = ""; + +# elif defined WINDOWS_NATIVE + + static char buf[2 + 10 + 1]; + + /* The Windows API has a function returning the locale's codepage as + a number, but the value doesn't change according to what the + 'setlocale' call specified. So we use it as a last resort, in + case the string returned by 'setlocale' doesn't specify the + codepage. */ + char *current_locale = setlocale (LC_ALL, NULL); + char *pdot; + + /* If they set different locales for different categories, + 'setlocale' will return a semi-colon separated list of locale + values. To make sure we use the correct one, we choose LC_CTYPE. */ + if (strchr (current_locale, ';')) + current_locale = setlocale (LC_CTYPE, NULL); + + pdot = strrchr (current_locale, '.'); + if (pdot && 2 + strlen (pdot + 1) + 1 <= sizeof (buf)) + sprintf (buf, "CP%s", pdot + 1); + else + { + /* The Windows API has a function returning the locale's codepage as a + number: GetACP(). + When the output goes to a console window, it needs to be provided in + GetOEMCP() encoding if the console is using a raster font, or in + GetConsoleOutputCP() encoding if it is using a TrueType font. + But in GUI programs and for output sent to files and pipes, GetACP() + encoding is the best bet. */ + sprintf (buf, "CP%u", GetACP ()); + } + codeset = buf; + +# elif defined OS2 + + const char *locale; + static char buf[2 + 10 + 1]; + ULONG cp[3]; + ULONG cplen; + + codeset = NULL; + + /* Allow user to override the codeset, as set in the operating system, + with standard language environment variables. */ + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + if (locale != NULL && locale[0] != '\0') + { + /* If the locale name contains an encoding after the dot, return it. */ + const char *dot = strchr (locale, '.'); + + if (dot != NULL) + { + const char *modifier; + + dot++; + /* Look for the possible @... trailer and remove it, if any. */ + modifier = strchr (dot, '@'); + if (modifier == NULL) + return dot; + if (modifier - dot < sizeof (buf)) + { + memcpy (buf, dot, modifier - dot); + buf [modifier - dot] = '\0'; + return buf; + } + } + + /* For the POSIX locale, don't use the system's codepage. */ + if (strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0) + codeset = ""; + } + + if (codeset == NULL) + { + /* OS/2 has a function returning the locale's codepage as a number. */ + if (DosQueryCp (sizeof (cp), cp, &cplen)) + codeset = ""; + else + { + sprintf (buf, "CP%u", cp[0]); + codeset = buf; + } + } + +# else + +# error "Add code for other platforms here." + +# endif + + /* Resolve alias. */ + { +# ifdef alias_table_defined + /* On some platforms, UTF-8 locales are the most frequently used ones. + Speed up the common case and slow down the less common cases by + testing for this case first. */ +# if defined __OpenBSD__ || (defined __APPLE__ && defined __MACH__) || defined __sun || defined __CYGWIN__ + if (strcmp (codeset, "UTF-8") == 0) + goto done_table_lookup; + else +# endif + { + const struct table_entry * const table = alias_table; + size_t const table_size = + sizeof (alias_table) / sizeof (struct table_entry); + /* The table is sorted. Perform a binary search. */ + size_t hi = table_size; + size_t lo = 0; + while (lo < hi) + { + /* Invariant: + for i < lo, strcmp (table[i].alias, codeset) < 0, + for i >= hi, strcmp (table[i].alias, codeset) > 0. */ + size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ + int cmp = strcmp (table[mid].alias, codeset); + if (cmp < 0) + lo = mid + 1; + else if (cmp > 0) + hi = mid; + else + { + /* Found an i with + strcmp (table[i].alias, codeset) == 0. */ + codeset = table[mid].canonical; + goto done_table_lookup; + } + } + } + if (0) + done_table_lookup: ; + else +# endif + { + /* Did not find it in the table. */ + /* On Mac OS X, all modern locales use the UTF-8 encoding. + BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ +# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ + codeset = "UTF-8"; +# else + /* Don't return an empty string. GNU libc and GNU libiconv interpret + the empty string as denoting "the locale's character encoding", + thus GNU libiconv would call this function a second time. */ + if (codeset[0] == '\0') + codeset = "ASCII"; +# endif + } + } + +#else + + /* On old systems which lack it, use setlocale or getenv. */ + const char *locale = NULL; + + /* But most old systems don't have a complete set of locales. Some + (like DJGPP) have only the C locale. Therefore we don't use setlocale + here; it would return "C" when it doesn't support the locale name the + user has set. */ +# if 0 + locale = setlocale (LC_CTYPE, NULL); +# endif + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + if (locale == NULL) + locale = ""; + } + } + + /* Map locale name to canonical encoding name. */ + { +# ifdef locale_table_defined + const struct table_entry * const table = locale_table; + size_t const table_size = + sizeof (locale_table) / sizeof (struct table_entry); + /* The table is sorted. Perform a binary search. */ + size_t hi = table_size; + size_t lo = 0; + while (lo < hi) + { + /* Invariant: + for i < lo, strcmp (table[i].locale, locale) < 0, + for i >= hi, strcmp (table[i].locale, locale) > 0. */ + size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ + int cmp = strcmp (table[mid].locale, locale); + if (cmp < 0) + lo = mid + 1; + else if (cmp > 0) + hi = mid; + else + { + /* Found an i with + strcmp (table[i].locale, locale) == 0. */ + codeset = table[mid].canonical; + goto done_table_lookup; + } + } + if (0) + done_table_lookup: ; + else +# endif + { + /* Did not find it in the table. */ + /* On Mac OS X, all modern locales use the UTF-8 encoding. + BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ +# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ + codeset = "UTF-8"; +# else + /* The canonical name cannot be determined. */ + /* Don't return an empty string. GNU libc and GNU libiconv interpret + the empty string as denoting "the locale's character encoding", + thus GNU libiconv would call this function a second time. */ + codeset = "ASCII"; +# endif + } + } + +#endif + +#ifdef DARWIN7 + /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8" + (the default codeset) does not work when MB_CUR_MAX is 1. */ + if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX_L (uselocale (NULL)) <= 1) + codeset = "ASCII"; +#endif + + return codeset; +} diff --git a/devspec.en_US/project/recutils/lib/localcharset.h b/devspec.en_US/project/recutils/lib/localcharset.h new file mode 100755 index 0000000..7d0d771 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/localcharset.h @@ -0,0 +1,134 @@ +/* Determine a canonical name for the current locale's character encoding. + Copyright (C) 2000-2003, 2009-2019 Free Software Foundation, Inc. + This file is part of the GNU CHARSET Library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _LOCALCHARSET_H +#define _LOCALCHARSET_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed below. + The result must not be freed; it is statically allocated. + If the canonical name cannot be determined, the result is a non-canonical + name. */ +extern const char * locale_charset (void); + +/* About GNU canonical names for character encodings: + + Every canonical name must be supported by GNU libiconv. Support by GNU libc + is also desirable. + + The name is case insensitive. Usually an upper case MIME charset name is + preferred. + + The current list of these GNU canonical names is: + + name MIME? used by which systems + (darwin = Mac OS X, windows = native Windows) + + ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin minix cygwin + ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin + ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin + ISO-8859-3 Y glibc solaris cygwin + ISO-8859-4 Y hpux osf solaris freebsd netbsd openbsd darwin + ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin + ISO-8859-6 Y glibc aix hpux solaris cygwin + ISO-8859-7 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin + ISO-8859-8 Y glibc aix hpux osf solaris cygwin + ISO-8859-9 Y glibc aix hpux irix osf solaris freebsd darwin cygwin + ISO-8859-13 glibc hpux solaris freebsd netbsd openbsd darwin cygwin + ISO-8859-14 glibc cygwin + ISO-8859-15 glibc aix irix osf solaris freebsd netbsd openbsd darwin cygwin + KOI8-R Y glibc hpux solaris freebsd netbsd openbsd darwin + KOI8-U Y glibc freebsd netbsd openbsd darwin cygwin + KOI8-T glibc + CP437 dos + CP775 dos + CP850 aix osf dos + CP852 dos + CP855 dos + CP856 aix + CP857 dos + CP861 dos + CP862 dos + CP864 dos + CP865 dos + CP866 freebsd netbsd openbsd darwin dos + CP869 dos + CP874 windows dos + CP922 aix + CP932 aix cygwin windows dos + CP943 aix + CP949 osf darwin windows dos + CP950 windows dos + CP1046 aix + CP1124 aix + CP1125 dos + CP1129 aix + CP1131 freebsd darwin + CP1250 windows + CP1251 glibc hpux solaris freebsd netbsd openbsd darwin cygwin windows + CP1252 aix windows + CP1253 windows + CP1254 windows + CP1255 glibc windows + CP1256 windows + CP1257 windows + GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin cygwin + EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin + EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin + EUC-TW glibc aix hpux irix osf solaris netbsd + BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin + BIG5-HKSCS glibc hpux solaris netbsd darwin + GBK glibc aix osf solaris freebsd darwin cygwin windows dos + GB18030 glibc hpux solaris freebsd netbsd darwin + SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin + JOHAB glibc solaris windows + TIS-620 glibc aix hpux osf solaris cygwin + VISCII Y glibc + TCVN5712-1 glibc + ARMSCII-8 glibc freebsd netbsd darwin + GEORGIAN-PS glibc cygwin + PT154 glibc netbsd cygwin + HP-ROMAN8 hpux + HP-ARABIC8 hpux + HP-GREEK8 hpux + HP-HEBREW8 hpux + HP-TURKISH8 hpux + HP-KANA8 hpux + DEC-KANJI osf + DEC-HANYU osf + UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin + + Note: Names which are not marked as being a MIME name should not be used in + Internet protocols for information interchange (mail, news, etc.). + + Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications + must understand both names and treat them as equivalent. + */ + + +#ifdef __cplusplus +} +#endif + + +#endif /* _LOCALCHARSET_H */ diff --git a/devspec.en_US/project/recutils/lib/locale.h b/devspec.en_US/project/recutils/lib/locale.h new file mode 100755 index 0000000..cef617a --- /dev/null +++ b/devspec.en_US/project/recutils/lib/locale.h @@ -0,0 +1,746 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A POSIX <locale.h>. + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if (defined _WIN32 && !defined __CYGWIN__ && defined __need_locale_t) \ + || defined _GL_ALREADY_INCLUDING_LOCALE_H + +/* Special invocation convention: + - Inside mingw header files, + - To handle Solaris header files (through Solaris 10) when combined + with gettext's libintl.h. */ + +#include_next <locale.h> + +#else +/* Normal invocation convention. */ + +#ifndef _GL_LOCALE_H + +#define _GL_ALREADY_INCLUDING_LOCALE_H + +/* The include_next requires a split double-inclusion guard. */ +#include_next <locale.h> + +#undef _GL_ALREADY_INCLUDING_LOCALE_H + +#ifndef _GL_LOCALE_H +#define _GL_LOCALE_H + +/* NetBSD 5.0 mis-defines NULL. */ +#include <stddef.h> + +/* Mac OS X 10.5 defines the locale_t type in <xlocale.h>. */ +#if 1 +# include <xlocale.h> +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* The LC_MESSAGES locale category is specified in POSIX, but not in ISO C. + On systems that don't define it, use the same value as GNU libintl. */ +#if !defined LC_MESSAGES +# define LC_MESSAGES 1729 +#endif + +/* Bionic libc's 'struct lconv' is just a dummy. */ +#if 0 +# define lconv rpl_lconv +struct lconv +{ + /* All 'char *' are actually 'const char *'. */ + + /* Members that depend on the LC_NUMERIC category of the locale. See + <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_04> */ + + /* Symbol used as decimal point. */ + char *decimal_point; + /* Symbol used to separate groups of digits to the left of the decimal + point. */ + char *thousands_sep; + /* Definition of the size of groups of digits to the left of the decimal + point. */ + char *grouping; + + /* Members that depend on the LC_MONETARY category of the locale. See + <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_03> */ + + /* Symbol used as decimal point. */ + char *mon_decimal_point; + /* Symbol used to separate groups of digits to the left of the decimal + point. */ + char *mon_thousands_sep; + /* Definition of the size of groups of digits to the left of the decimal + point. */ + char *mon_grouping; + /* Sign used to indicate a value >= 0. */ + char *positive_sign; + /* Sign used to indicate a value < 0. */ + char *negative_sign; + + /* For formatting local currency. */ + /* Currency symbol (3 characters) followed by separator (1 character). */ + char *currency_symbol; + /* Number of digits after the decimal point. */ + char frac_digits; + /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char p_cs_precedes; + /* For values >= 0: Position of the sign. */ + char p_sign_posn; + /* For values >= 0: Placement of spaces between currency symbol, sign, and + number. */ + char p_sep_by_space; + /* For values < 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char n_cs_precedes; + /* For values < 0: Position of the sign. */ + char n_sign_posn; + /* For values < 0: Placement of spaces between currency symbol, sign, and + number. */ + char n_sep_by_space; + + /* For formatting international currency. */ + /* Currency symbol (3 characters) followed by separator (1 character). */ + char *int_curr_symbol; + /* Number of digits after the decimal point. */ + char int_frac_digits; + /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char int_p_cs_precedes; + /* For values >= 0: Position of the sign. */ + char int_p_sign_posn; + /* For values >= 0: Placement of spaces between currency symbol, sign, and + number. */ + char int_p_sep_by_space; + /* For values < 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char int_n_cs_precedes; + /* For values < 0: Position of the sign. */ + char int_n_sign_posn; + /* For values < 0: Placement of spaces between currency symbol, sign, and + number. */ + char int_n_sep_by_space; +}; +#endif + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef localeconv +# define localeconv rpl_localeconv +# endif +_GL_FUNCDECL_RPL (localeconv, struct lconv *, (void)); +_GL_CXXALIAS_RPL (localeconv, struct lconv *, (void)); +# else +_GL_CXXALIAS_SYS (localeconv, struct lconv *, (void)); +# endif +_GL_CXXALIASWARN (localeconv); +#elif 0 +# undef localeconv +# define localeconv localeconv_used_without_requesting_gnulib_module_localeconv +#elif defined GNULIB_POSIXCHECK +# undef localeconv +# if HAVE_RAW_DECL_LOCALECONV +_GL_WARN_ON_USE (localeconv, + "localeconv returns too few information on some platforms - " + "use gnulib module localeconv for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setlocale +# define setlocale rpl_setlocale +# define GNULIB_defined_setlocale 1 +# endif +_GL_FUNCDECL_RPL (setlocale, char *, (int category, const char *locale)); +_GL_CXXALIAS_RPL (setlocale, char *, (int category, const char *locale)); +# else +_GL_CXXALIAS_SYS (setlocale, char *, (int category, const char *locale)); +# endif +_GL_CXXALIASWARN (setlocale); +#elif defined GNULIB_POSIXCHECK +# undef setlocale +# if HAVE_RAW_DECL_SETLOCALE +_GL_WARN_ON_USE (setlocale, "setlocale works differently on native Windows - " + "use gnulib module setlocale for portability"); +# endif +#endif + +#if /*@GNULIB_NEWLOCALE@ ||*/ (0 && 1) +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef newlocale +# define newlocale rpl_newlocale +# define GNULIB_defined_newlocale 1 +# endif +_GL_FUNCDECL_RPL (newlocale, locale_t, + (int category_mask, const char *name, locale_t base) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (newlocale, locale_t, + (int category_mask, const char *name, locale_t base)); +# else +# if 1 +_GL_CXXALIAS_SYS (newlocale, locale_t, + (int category_mask, const char *name, locale_t base)); +# endif +# endif +# if 1 +_GL_CXXALIASWARN (newlocale); +# endif +#elif defined GNULIB_POSIXCHECK +# undef newlocale +# if HAVE_RAW_DECL_NEWLOCALE +_GL_WARN_ON_USE (newlocale, "newlocale is not portable"); +# endif +#endif + +#if 0 || (0 && 1) +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef duplocale +# define duplocale rpl_duplocale +# define GNULIB_defined_duplocale 1 +# endif +_GL_FUNCDECL_RPL (duplocale, locale_t, (locale_t locale) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (duplocale, locale_t, (locale_t locale)); +# else +# if 1 +_GL_CXXALIAS_SYS (duplocale, locale_t, (locale_t locale)); +# endif +# endif +# if 1 +_GL_CXXALIASWARN (duplocale); +# endif +#elif defined GNULIB_POSIXCHECK +# undef duplocale +# if HAVE_RAW_DECL_DUPLOCALE +_GL_WARN_ON_USE (duplocale, "duplocale is buggy on some glibc systems - " + "use gnulib module duplocale for portability"); +# endif +#endif + +#if /*@GNULIB_FREELOCALE@ ||*/ (0 && 1) +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef freelocale +# define freelocale rpl_freelocale +# define GNULIB_defined_freelocale 1 +# endif +_GL_FUNCDECL_RPL (freelocale, void, (locale_t locale) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (freelocale, void, (locale_t locale)); +# else +# if 1 +_GL_CXXALIAS_SYS (freelocale, void, (locale_t locale)); +# endif +# endif +# if 1 +_GL_CXXALIASWARN (freelocale); +# endif +#elif defined GNULIB_POSIXCHECK +# undef freelocale +# if HAVE_RAW_DECL_FREELOCALE +_GL_WARN_ON_USE (freelocale, "freelocale is not portable"); +# endif +#endif + +#endif /* _GL_LOCALE_H */ +#endif /* _GL_LOCALE_H */ +#endif /* !(__need_locale_t || _GL_ALREADY_INCLUDING_LOCALE_H) */ diff --git a/devspec.en_US/project/recutils/lib/locale.in.h b/devspec.en_US/project/recutils/lib/locale.in.h new file mode 100755 index 0000000..5f33ed1 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/locale.in.h @@ -0,0 +1,272 @@ +/* A POSIX <locale.h>. + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if (defined _WIN32 && !defined __CYGWIN__ && defined __need_locale_t) \ + || defined _GL_ALREADY_INCLUDING_LOCALE_H + +/* Special invocation convention: + - Inside mingw header files, + - To handle Solaris header files (through Solaris 10) when combined + with gettext's libintl.h. */ + +#@INCLUDE_NEXT@ @NEXT_LOCALE_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_LOCALE_H + +#define _GL_ALREADY_INCLUDING_LOCALE_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_LOCALE_H@ + +#undef _GL_ALREADY_INCLUDING_LOCALE_H + +#ifndef _@GUARD_PREFIX@_LOCALE_H +#define _@GUARD_PREFIX@_LOCALE_H + +/* NetBSD 5.0 mis-defines NULL. */ +#include <stddef.h> + +/* Mac OS X 10.5 defines the locale_t type in <xlocale.h>. */ +#if @HAVE_XLOCALE_H@ +# include <xlocale.h> +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +/* The LC_MESSAGES locale category is specified in POSIX, but not in ISO C. + On systems that don't define it, use the same value as GNU libintl. */ +#if !defined LC_MESSAGES +# define LC_MESSAGES 1729 +#endif + +/* Bionic libc's 'struct lconv' is just a dummy. */ +#if @REPLACE_STRUCT_LCONV@ +# define lconv rpl_lconv +struct lconv +{ + /* All 'char *' are actually 'const char *'. */ + + /* Members that depend on the LC_NUMERIC category of the locale. See + <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_04> */ + + /* Symbol used as decimal point. */ + char *decimal_point; + /* Symbol used to separate groups of digits to the left of the decimal + point. */ + char *thousands_sep; + /* Definition of the size of groups of digits to the left of the decimal + point. */ + char *grouping; + + /* Members that depend on the LC_MONETARY category of the locale. See + <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_03> */ + + /* Symbol used as decimal point. */ + char *mon_decimal_point; + /* Symbol used to separate groups of digits to the left of the decimal + point. */ + char *mon_thousands_sep; + /* Definition of the size of groups of digits to the left of the decimal + point. */ + char *mon_grouping; + /* Sign used to indicate a value >= 0. */ + char *positive_sign; + /* Sign used to indicate a value < 0. */ + char *negative_sign; + + /* For formatting local currency. */ + /* Currency symbol (3 characters) followed by separator (1 character). */ + char *currency_symbol; + /* Number of digits after the decimal point. */ + char frac_digits; + /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char p_cs_precedes; + /* For values >= 0: Position of the sign. */ + char p_sign_posn; + /* For values >= 0: Placement of spaces between currency symbol, sign, and + number. */ + char p_sep_by_space; + /* For values < 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char n_cs_precedes; + /* For values < 0: Position of the sign. */ + char n_sign_posn; + /* For values < 0: Placement of spaces between currency symbol, sign, and + number. */ + char n_sep_by_space; + + /* For formatting international currency. */ + /* Currency symbol (3 characters) followed by separator (1 character). */ + char *int_curr_symbol; + /* Number of digits after the decimal point. */ + char int_frac_digits; + /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char int_p_cs_precedes; + /* For values >= 0: Position of the sign. */ + char int_p_sign_posn; + /* For values >= 0: Placement of spaces between currency symbol, sign, and + number. */ + char int_p_sep_by_space; + /* For values < 0: 1 if the currency symbol precedes the number, 0 if it + comes after the number. */ + char int_n_cs_precedes; + /* For values < 0: Position of the sign. */ + char int_n_sign_posn; + /* For values < 0: Placement of spaces between currency symbol, sign, and + number. */ + char int_n_sep_by_space; +}; +#endif + +#if @GNULIB_LOCALECONV@ +# if @REPLACE_LOCALECONV@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef localeconv +# define localeconv rpl_localeconv +# endif +_GL_FUNCDECL_RPL (localeconv, struct lconv *, (void)); +_GL_CXXALIAS_RPL (localeconv, struct lconv *, (void)); +# else +_GL_CXXALIAS_SYS (localeconv, struct lconv *, (void)); +# endif +_GL_CXXALIASWARN (localeconv); +#elif @REPLACE_STRUCT_LCONV@ +# undef localeconv +# define localeconv localeconv_used_without_requesting_gnulib_module_localeconv +#elif defined GNULIB_POSIXCHECK +# undef localeconv +# if HAVE_RAW_DECL_LOCALECONV +_GL_WARN_ON_USE (localeconv, + "localeconv returns too few information on some platforms - " + "use gnulib module localeconv for portability"); +# endif +#endif + +#if @GNULIB_SETLOCALE@ +# if @REPLACE_SETLOCALE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setlocale +# define setlocale rpl_setlocale +# define GNULIB_defined_setlocale 1 +# endif +_GL_FUNCDECL_RPL (setlocale, char *, (int category, const char *locale)); +_GL_CXXALIAS_RPL (setlocale, char *, (int category, const char *locale)); +# else +_GL_CXXALIAS_SYS (setlocale, char *, (int category, const char *locale)); +# endif +_GL_CXXALIASWARN (setlocale); +#elif defined GNULIB_POSIXCHECK +# undef setlocale +# if HAVE_RAW_DECL_SETLOCALE +_GL_WARN_ON_USE (setlocale, "setlocale works differently on native Windows - " + "use gnulib module setlocale for portability"); +# endif +#endif + +#if /*@GNULIB_NEWLOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @HAVE_NEWLOCALE@) +# if @REPLACE_NEWLOCALE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef newlocale +# define newlocale rpl_newlocale +# define GNULIB_defined_newlocale 1 +# endif +_GL_FUNCDECL_RPL (newlocale, locale_t, + (int category_mask, const char *name, locale_t base) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (newlocale, locale_t, + (int category_mask, const char *name, locale_t base)); +# else +# if @HAVE_NEWLOCALE@ +_GL_CXXALIAS_SYS (newlocale, locale_t, + (int category_mask, const char *name, locale_t base)); +# endif +# endif +# if @HAVE_NEWLOCALE@ +_GL_CXXALIASWARN (newlocale); +# endif +#elif defined GNULIB_POSIXCHECK +# undef newlocale +# if HAVE_RAW_DECL_NEWLOCALE +_GL_WARN_ON_USE (newlocale, "newlocale is not portable"); +# endif +#endif + +#if @GNULIB_DUPLOCALE@ || (@GNULIB_LOCALENAME@ && @HAVE_DUPLOCALE@) +# if @REPLACE_DUPLOCALE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef duplocale +# define duplocale rpl_duplocale +# define GNULIB_defined_duplocale 1 +# endif +_GL_FUNCDECL_RPL (duplocale, locale_t, (locale_t locale) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (duplocale, locale_t, (locale_t locale)); +# else +# if @HAVE_DUPLOCALE@ +_GL_CXXALIAS_SYS (duplocale, locale_t, (locale_t locale)); +# endif +# endif +# if @HAVE_DUPLOCALE@ +_GL_CXXALIASWARN (duplocale); +# endif +#elif defined GNULIB_POSIXCHECK +# undef duplocale +# if HAVE_RAW_DECL_DUPLOCALE +_GL_WARN_ON_USE (duplocale, "duplocale is buggy on some glibc systems - " + "use gnulib module duplocale for portability"); +# endif +#endif + +#if /*@GNULIB_FREELOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @HAVE_FREELOCALE@) +# if @REPLACE_FREELOCALE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef freelocale +# define freelocale rpl_freelocale +# define GNULIB_defined_freelocale 1 +# endif +_GL_FUNCDECL_RPL (freelocale, void, (locale_t locale) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (freelocale, void, (locale_t locale)); +# else +# if @HAVE_FREELOCALE@ +_GL_CXXALIAS_SYS (freelocale, void, (locale_t locale)); +# endif +# endif +# if @HAVE_FREELOCALE@ +_GL_CXXALIASWARN (freelocale); +# endif +#elif defined GNULIB_POSIXCHECK +# undef freelocale +# if HAVE_RAW_DECL_FREELOCALE +_GL_WARN_ON_USE (freelocale, "freelocale is not portable"); +# endif +#endif + +#endif /* _@GUARD_PREFIX@_LOCALE_H */ +#endif /* _@GUARD_PREFIX@_LOCALE_H */ +#endif /* !(__need_locale_t || _GL_ALREADY_INCLUDING_LOCALE_H) */ diff --git a/devspec.en_US/project/recutils/lib/localeconv.c b/devspec.en_US/project/recutils/lib/localeconv.c new file mode 100755 index 0000000..b5a965f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/localeconv.c @@ -0,0 +1,103 @@ +/* Query locale dependent information for formatting numbers. + Copyright (C) 2012-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <locale.h> + +#if HAVE_STRUCT_LCONV_DECIMAL_POINT + +/* Override for platforms where 'struct lconv' lacks the int_p_*, int_n_* + members. */ + +struct lconv * +localeconv (void) +{ + static struct lconv result; +# undef lconv +# undef localeconv + struct lconv *sys_result = localeconv (); + + result.decimal_point = sys_result->decimal_point; + result.thousands_sep = sys_result->thousands_sep; + result.grouping = sys_result->grouping; + result.mon_decimal_point = sys_result->mon_decimal_point; + result.mon_thousands_sep = sys_result->mon_thousands_sep; + result.mon_grouping = sys_result->mon_grouping; + result.positive_sign = sys_result->positive_sign; + result.negative_sign = sys_result->negative_sign; + result.currency_symbol = sys_result->currency_symbol; + result.frac_digits = sys_result->frac_digits; + result.p_cs_precedes = sys_result->p_cs_precedes; + result.p_sign_posn = sys_result->p_sign_posn; + result.p_sep_by_space = sys_result->p_sep_by_space; + result.n_cs_precedes = sys_result->n_cs_precedes; + result.n_sign_posn = sys_result->n_sign_posn; + result.n_sep_by_space = sys_result->n_sep_by_space; + result.int_curr_symbol = sys_result->int_curr_symbol; + result.int_frac_digits = sys_result->int_frac_digits; + result.int_p_cs_precedes = sys_result->p_cs_precedes; + result.int_p_sign_posn = sys_result->p_sign_posn; + result.int_p_sep_by_space = sys_result->p_sep_by_space; + result.int_n_cs_precedes = sys_result->n_cs_precedes; + result.int_n_sign_posn = sys_result->n_sign_posn; + result.int_n_sep_by_space = sys_result->n_sep_by_space; + + return &result; +} + +#else + +/* Override for platforms where 'struct lconv' is a dummy. */ + +# include <limits.h> + +struct lconv * +localeconv (void) +{ + static /*const*/ struct lconv result = + { + /* decimal_point */ ".", + /* thousands_sep */ "", + /* grouping */ "", + /* mon_decimal_point */ "", + /* mon_thousands_sep */ "", + /* mon_grouping */ "", + /* positive_sign */ "", + /* negative_sign */ "", + /* currency_symbol */ "", + /* frac_digits */ CHAR_MAX, + /* p_cs_precedes */ CHAR_MAX, + /* p_sign_posn */ CHAR_MAX, + /* p_sep_by_space */ CHAR_MAX, + /* n_cs_precedes */ CHAR_MAX, + /* n_sign_posn */ CHAR_MAX, + /* n_sep_by_space */ CHAR_MAX, + /* int_curr_symbol */ "", + /* int_frac_digits */ CHAR_MAX, + /* int_p_cs_precedes */ CHAR_MAX, + /* int_p_sign_posn */ CHAR_MAX, + /* int_p_sep_by_space */ CHAR_MAX, + /* int_n_cs_precedes */ CHAR_MAX, + /* int_n_sign_posn */ CHAR_MAX, + /* int_n_sep_by_space */ CHAR_MAX + }; + + return &result; +} + +#endif diff --git a/devspec.en_US/project/recutils/lib/localtime-buffer.c b/devspec.en_US/project/recutils/lib/localtime-buffer.c new file mode 100755 index 0000000..b65ea45 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/localtime-buffer.c @@ -0,0 +1,60 @@ +/* Provide access to the last buffer returned by localtime() or gmtime(). + + Copyright (C) 2001-2003, 2005-2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* written by Jim Meyering */ + +#include <config.h> + +/* Specification. */ +#include "localtime-buffer.h" + +#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME + +static struct tm tm_zero_buffer; +struct tm *localtime_buffer_addr = &tm_zero_buffer; + +/* This is a wrapper for localtime. + + On the first call, record the address of the static buffer that + localtime uses for its result. */ + +struct tm * +rpl_localtime (time_t const *timep) +#undef localtime +{ + struct tm *tm = localtime (timep); + + if (localtime_buffer_addr == &tm_zero_buffer) + localtime_buffer_addr = tm; + + return tm; +} + +/* Same as above, since gmtime and localtime use the same buffer. */ +struct tm * +rpl_gmtime (time_t const *timep) +#undef gmtime +{ + struct tm *tm = gmtime (timep); + + if (localtime_buffer_addr == &tm_zero_buffer) + localtime_buffer_addr = tm; + + return tm; +} + +#endif diff --git a/devspec.en_US/project/recutils/lib/localtime-buffer.h b/devspec.en_US/project/recutils/lib/localtime-buffer.h new file mode 100755 index 0000000..031111a --- /dev/null +++ b/devspec.en_US/project/recutils/lib/localtime-buffer.h @@ -0,0 +1,27 @@ +/* Provide access to the last buffer returned by localtime() or gmtime(). + + Copyright (C) 2001-2003, 2005-2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* written by Jim Meyering */ + +#include <time.h> + +#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME + +/* The address of the last buffer returned by localtime() or gmtime(). */ +extern struct tm *localtime_buffer_addr; + +#endif diff --git a/devspec.en_US/project/recutils/lib/lseek.c b/devspec.en_US/project/recutils/lib/lseek.c new file mode 100755 index 0000000..46f7a3f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/lseek.c @@ -0,0 +1,71 @@ +/* An lseek() function that detects pipes. + Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <unistd.h> + +#if defined _WIN32 && ! defined __CYGWIN__ +/* Windows platforms. */ +/* Get GetFileType. */ +# include <windows.h> +/* Get _get_osfhandle. */ +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include <io.h> +# endif +#else +# include <sys/stat.h> +#endif +#include <errno.h> + +#undef lseek + +off_t +rpl_lseek (int fd, off_t offset, int whence) +{ +#if defined _WIN32 && ! defined __CYGWIN__ + /* mingw lseek mistakenly succeeds on pipes, sockets, and terminals. */ + HANDLE h = (HANDLE) _get_osfhandle (fd); + if (h == INVALID_HANDLE_VALUE) + { + errno = EBADF; + return -1; + } + if (GetFileType (h) != FILE_TYPE_DISK) + { + errno = ESPIPE; + return -1; + } +#else + /* BeOS lseek mistakenly succeeds on pipes... */ + struct stat statbuf; + if (fstat (fd, &statbuf) < 0) + return -1; + if (!S_ISREG (statbuf.st_mode)) + { + errno = ESPIPE; + return -1; + } +#endif +#if _GL_WINDOWS_64_BIT_OFF_T + return _lseeki64 (fd, offset, whence); +#else + return lseek (fd, offset, whence); +#endif +} diff --git a/devspec.en_US/project/recutils/lib/lstat.c b/devspec.en_US/project/recutils/lib/lstat.c new file mode 100755 index 0000000..d57ca10 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/lstat.c @@ -0,0 +1,100 @@ +/* Work around a bug of lstat on some systems + + Copyright (C) 1997-2006, 2008-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* written by Jim Meyering */ + +/* If the user's config.h happens to include <sys/stat.h>, let it include only + the system's <sys/stat.h> here, so that orig_lstat doesn't recurse to + rpl_lstat. */ +#define __need_system_sys_stat_h +#include <config.h> + +#if !HAVE_LSTAT +/* On systems that lack symlinks, our replacement <sys/stat.h> already + defined lstat as stat, so there is nothing further to do other than + avoid an empty file. */ +typedef int dummy; +#else /* HAVE_LSTAT */ + +/* Get the original definition of lstat. It might be defined as a macro. */ +# include <sys/types.h> +# include <sys/stat.h> +# undef __need_system_sys_stat_h + +static int +orig_lstat (const char *filename, struct stat *buf) +{ + return lstat (filename, buf); +} + +/* Specification. */ +/* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc + eliminates this include because of the preliminary #include <sys/stat.h> + above. */ +# include "sys/stat.h" + +# include "stat-time.h" + +# include <string.h> +# include <errno.h> + +/* lstat works differently on Linux and Solaris systems. POSIX (see + "pathname resolution" in the glossary) requires that programs like + 'ls' take into consideration the fact that FILE has a trailing slash + when FILE is a symbolic link. On Linux and Solaris 10 systems, the + lstat function already has the desired semantics (in treating + 'lstat ("symlink/", sbuf)' just like 'lstat ("symlink/.", sbuf)', + but on Solaris 9 and earlier it does not. + + If FILE has a trailing slash and specifies a symbolic link, + then use stat() to get more info on the referent of FILE. + If the referent is a non-directory, then set errno to ENOTDIR + and return -1. Otherwise, return stat's result. */ + +int +rpl_lstat (const char *file, struct stat *sbuf) +{ + int result = orig_lstat (file, sbuf); + + /* This replacement file can blindly check against '/' rather than + using the ISSLASH macro, because all platforms with '\\' either + lack symlinks (mingw) or have working lstat (cygwin) and thus do + not compile this file. 0 len should have already been filtered + out above, with a failure return of ENOENT. */ + if (result == 0) + { + if (S_ISDIR (sbuf->st_mode) || file[strlen (file) - 1] != '/') + result = stat_time_normalize (result, sbuf); + else + { + /* At this point, a trailing slash is permitted only on + symlink-to-dir; but it should have found information on the + directory, not the symlink. Call 'stat' to get info about the + link's referent. Our replacement stat guarantees valid results, + even if the symlink is not pointing to a directory. */ + if (!S_ISLNK (sbuf->st_mode)) + { + errno = ENOTDIR; + return -1; + } + result = stat (file, sbuf); + } + } + return result; +} + +#endif /* HAVE_LSTAT */ diff --git a/devspec.en_US/project/recutils/lib/malloc.c b/devspec.en_US/project/recutils/lib/malloc.c new file mode 100755 index 0000000..76e6ff7 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/malloc.c @@ -0,0 +1,56 @@ +/* malloc() function that is glibc compatible. + + Copyright (C) 1997-1998, 2006-2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* written by Jim Meyering and Bruno Haible */ + +#define _GL_USE_STDLIB_ALLOC 1 +#include <config.h> +/* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h. */ +#ifdef malloc +# define NEED_MALLOC_GNU 1 +# undef malloc +/* Whereas the gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU. */ +#elif GNULIB_MALLOC_GNU && !HAVE_MALLOC_GNU +# define NEED_MALLOC_GNU 1 +#endif + +#include <stdlib.h> + +#include <errno.h> + +/* Allocate an N-byte block of memory from the heap. + If N is zero, allocate a 1-byte block. */ + +void * +rpl_malloc (size_t n) +{ + void *result; + +#if NEED_MALLOC_GNU + if (n == 0) + n = 1; +#endif + + result = malloc (n); + +#if !HAVE_MALLOC_POSIX + if (result == NULL) + errno = ENOMEM; +#endif + + return result; +} diff --git a/devspec.en_US/project/recutils/lib/malloca.c b/devspec.en_US/project/recutils/lib/malloca.c new file mode 100755 index 0000000..f60c5fb --- /dev/null +++ b/devspec.en_US/project/recutils/lib/malloca.c @@ -0,0 +1,105 @@ +/* Safe automatic memory allocation. + Copyright (C) 2003, 2006-2007, 2009-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2003, 2018. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#define _GL_USE_STDLIB_ALLOC 1 +#include <config.h> + +/* Specification. */ +#include "malloca.h" + +#include "verify.h" + +/* The speed critical point in this file is freea() applied to an alloca() + result: it must be fast, to match the speed of alloca(). The speed of + mmalloca() and freea() in the other case are not critical, because they + are only invoked for big memory sizes. + Here we use a bit in the address as an indicator, an idea by Ondřej Bílka. + malloca() can return three types of pointers: + - Pointers ≡ 0 mod 2*sa_alignment_max come from stack allocation. + - Pointers ≡ sa_alignment_max mod 2*sa_alignment_max come from heap + allocation. + - NULL comes from a failed heap allocation. */ + +/* Type for holding very small pointer differences. */ +typedef unsigned char small_t; +/* Verify that it is wide enough. */ +verify (2 * sa_alignment_max - 1 <= (small_t) -1); + +void * +mmalloca (size_t n) +{ +#if HAVE_ALLOCA + /* Allocate one more word, used to determine the address to pass to freea(), + and room for the alignment ≡ sa_alignment_max mod 2*sa_alignment_max. */ + size_t nplus = n + sizeof (small_t) + 2 * sa_alignment_max - 1; + + if (nplus >= n) + { + char *mem = (char *) malloc (nplus); + + if (mem != NULL) + { + char *p = + (char *)((((uintptr_t)mem + sizeof (small_t) + sa_alignment_max - 1) + & ~(uintptr_t)(2 * sa_alignment_max - 1)) + + sa_alignment_max); + /* Here p >= mem + sizeof (small_t), + and p <= mem + sizeof (small_t) + 2 * sa_alignment_max - 1 + hence p + n <= mem + nplus. + So, the memory range [p, p+n) lies in the allocated memory range + [mem, mem + nplus). */ + ((small_t *) p)[-1] = p - mem; + /* p ≡ sa_alignment_max mod 2*sa_alignment_max. */ + return p; + } + } + /* Out of memory. */ + return NULL; +#else +# if !MALLOC_0_IS_NONNULL + if (n == 0) + n = 1; +# endif + return malloc (n); +#endif +} + +#if HAVE_ALLOCA +void +freea (void *p) +{ + /* Check argument. */ + if ((uintptr_t) p & (sa_alignment_max - 1)) + { + /* p was not the result of a malloca() call. Invalid argument. */ + abort (); + } + /* Determine whether p was a non-NULL pointer returned by mmalloca(). */ + if ((uintptr_t) p & sa_alignment_max) + { + void *mem = (char *) p - ((small_t *) p)[-1]; + free (mem); + } +} +#endif + +/* + * Hey Emacs! + * Local Variables: + * coding: utf-8 + * End: + */ diff --git a/devspec.en_US/project/recutils/lib/malloca.h b/devspec.en_US/project/recutils/lib/malloca.h new file mode 100755 index 0000000..d80c316 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/malloca.h @@ -0,0 +1,127 @@ +/* Safe automatic memory allocation. + Copyright (C) 2003-2007, 2009-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2003. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _MALLOCA_H +#define _MALLOCA_H + +#include <alloca.h> +#include <stddef.h> +#include <stdlib.h> +#include <stdint.h> + +#include "xalloc-oversized.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* safe_alloca(N) is equivalent to alloca(N) when it is safe to call + alloca(N); otherwise it returns NULL. It either returns N bytes of + memory allocated on the stack, that lasts until the function returns, + or NULL. + Use of safe_alloca should be avoided: + - inside arguments of function calls - undefined behaviour, + - in inline functions - the allocation may actually last until the + calling function returns. +*/ +#if HAVE_ALLOCA +/* The OS usually guarantees only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + allocate anything larger than 4096 bytes. Also care for the possibility + of a few compiler-allocated temporary stack slots. + This must be a macro, not a function. */ +# define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL) +#else +# define safe_alloca(N) ((void) (N), NULL) +#endif + +/* malloca(N) is a safe variant of alloca(N). It allocates N bytes of + memory allocated on the stack, that must be freed using freea() before + the function returns. Upon failure, it returns NULL. */ +#if HAVE_ALLOCA +# define malloca(N) \ + ((N) < 4032 - (2 * sa_alignment_max - 1) \ + ? (void *) (((uintptr_t) (char *) alloca ((N) + 2 * sa_alignment_max - 1) \ + + (2 * sa_alignment_max - 1)) \ + & ~(uintptr_t)(2 * sa_alignment_max - 1)) \ + : mmalloca (N)) +#else +# define malloca(N) \ + mmalloca (N) +#endif +extern void * mmalloca (size_t n); + +/* Free a block of memory allocated through malloca(). */ +#if HAVE_ALLOCA +extern void freea (void *p); +#else +# define freea free +#endif + +/* nmalloca(N,S) is an overflow-safe variant of malloca (N * S). + It allocates an array of N objects, each with S bytes of memory, + on the stack. S must be positive and N must be nonnegative. + The array must be freed using freea() before the function returns. */ +#define nmalloca(n, s) (xalloc_oversized (n, s) ? NULL : malloca ((n) * (s))) + + +#ifdef __cplusplus +} +#endif + + +/* ------------------- Auxiliary, non-public definitions ------------------- */ + +/* Determine the alignment of a type at compile time. */ +#if defined __GNUC__ || defined __IBM__ALIGNOF__ +# define sa_alignof __alignof__ +#elif defined __cplusplus + template <class type> struct sa_alignof_helper { char __slot1; type __slot2; }; +# define sa_alignof(type) offsetof (sa_alignof_helper<type>, __slot2) +#elif defined __hpux + /* Work around a HP-UX 10.20 cc bug with enums constants defined as offsetof + values. */ +# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) +#elif defined _AIX + /* Work around an AIX 3.2.5 xlc bug with enums constants defined as offsetof + values. */ +# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) +#else +# define sa_alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) +#endif + +enum +{ +/* The desired alignment of memory allocations is the maximum alignment + among all elementary types. */ + sa_alignment_long = sa_alignof (long), + sa_alignment_double = sa_alignof (double), +#if HAVE_LONG_LONG_INT + sa_alignment_longlong = sa_alignof (long long), +#endif + sa_alignment_longdouble = sa_alignof (long double), + sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1) +#if HAVE_LONG_LONG_INT + | (sa_alignment_longlong - 1) +#endif + | (sa_alignment_longdouble - 1) + ) + 1 +}; + +#endif /* _MALLOCA_H */ diff --git a/devspec.en_US/project/recutils/lib/math.c b/devspec.en_US/project/recutils/lib/math.c new file mode 100755 index 0000000..ba2a6ab --- /dev/null +++ b/devspec.en_US/project/recutils/lib/math.c @@ -0,0 +1,4 @@ +#include <config.h> +#define _GL_MATH_INLINE _GL_EXTERN_INLINE +#include "math.h" +typedef int dummy; diff --git a/devspec.en_US/project/recutils/lib/math.h b/devspec.en_US/project/recutils/lib/math.h new file mode 100755 index 0000000..b57a7e9 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/math.h @@ -0,0 +1,2891 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like <math.h>. + + Copyright (C) 2002-2003, 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_MATH_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* The include_next requires a split double-inclusion guard. */ +#include_next <math.h> + +#ifndef _GL_MATH_H +#define _GL_MATH_H + +/* On OpenVMS, NAN, INFINITY, and HUGEVAL macros are defined in <fp.h>. */ +#if defined __VMS && ! defined NAN +# include <fp.h> +#endif + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_MATH_INLINE +# define _GL_MATH_INLINE _GL_INLINE +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +#ifdef __cplusplus +/* Helper macros to define type-generic function FUNC as overloaded functions, + rather than as macros like in C. POSIX declares these with an argument of + real-floating (that is, one of float, double, or long double). */ +# define _GL_MATH_CXX_REAL_FLOATING_DECL_1(func) \ +static inline int \ +_gl_cxx_ ## func ## f (float f) \ +{ \ + return func (f); \ +} \ +static inline int \ +_gl_cxx_ ## func ## d (double d) \ +{ \ + return func (d); \ +} \ +static inline int \ +_gl_cxx_ ## func ## l (long double l) \ +{ \ + return func (l); \ +} +# define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func) \ +_GL_BEGIN_NAMESPACE \ +inline int \ +func (float f) \ +{ \ + return _gl_cxx_ ## func ## f (f); \ +} \ +inline int \ +func (double d) \ +{ \ + return _gl_cxx_ ## func ## d (d); \ +} \ +inline int \ +func (long double l) \ +{ \ + return _gl_cxx_ ## func ## l (l); \ +} \ +_GL_END_NAMESPACE +#endif + +/* Helper macros to define a portability warning for the + classification macro FUNC called with VALUE. POSIX declares the + classification macros with an argument of real-floating (that is, + one of float, double, or long double). */ +#define _GL_WARN_REAL_FLOATING_DECL(func) \ +_GL_MATH_INLINE int \ +_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ + "use gnulib module " #func " for portability") \ +rpl_ ## func ## f (float f) \ +{ \ + return func (f); \ +} \ +_GL_MATH_INLINE int \ +_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ + "use gnulib module " #func " for portability") \ +rpl_ ## func ## d (double d) \ +{ \ + return func (d); \ +} \ +_GL_MATH_INLINE int \ +_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ + "use gnulib module " #func " for portability") \ +rpl_ ## func ## l (long double l) \ +{ \ + return func (l); \ +} +#define _GL_WARN_REAL_FLOATING_IMPL(func, value) \ + (sizeof (value) == sizeof (float) ? rpl_ ## func ## f (value) \ + : sizeof (value) == sizeof (double) ? rpl_ ## func ## d (value) \ + : rpl_ ## func ## l (value)) + + +#if 0 +/* Pull in a function that fixes the 'int' to 'long double' conversion + of glibc 2.7. */ +_GL_EXTERN_C void _Qp_itoq (long double *, int); +static void (*_gl_math_fix_itold) (long double *, int) = _Qp_itoq; +#endif + + +/* POSIX allows platforms that don't support NAN. But all major + machines in the past 15 years have supported something close to + IEEE NaN, so we define this unconditionally. We also must define + it on platforms like Solaris 10, where NAN is present but defined + as a function pointer rather than a floating point constant. */ +#if !defined NAN || 0 +# if !GNULIB_defined_NAN +# undef NAN + /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler + choke on the expression 0.0 / 0.0. */ +# if defined __DECC || defined _MSC_VER +_GL_MATH_INLINE float +_NaN () +{ + static float zero = 0.0f; + return zero / zero; +} +# define NAN (_NaN()) +# else +# define NAN (0.0f / 0.0f) +# endif +# define GNULIB_defined_NAN 1 +# endif +#endif + +/* Solaris 10 defines HUGE_VAL, but as a function pointer rather + than a floating point constant. */ +#if 0 +# undef HUGE_VALF +# define HUGE_VALF (1.0f / 0.0f) +# undef HUGE_VAL +# define HUGE_VAL (1.0 / 0.0) +# undef HUGE_VALL +# define HUGE_VALL (1.0L / 0.0L) +#endif + +/* HUGE_VALF is a 'float' Infinity. */ +#ifndef HUGE_VALF +# if defined _MSC_VER +/* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f. */ +# define HUGE_VALF (1e25f * 1e25f) +# else +# define HUGE_VALF (1.0f / 0.0f) +# endif +#endif + +/* HUGE_VAL is a 'double' Infinity. */ +#ifndef HUGE_VAL +# if defined _MSC_VER +/* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0. */ +# define HUGE_VAL (1e250 * 1e250) +# else +# define HUGE_VAL (1.0 / 0.0) +# endif +#endif + +/* HUGE_VALL is a 'long double' Infinity. */ +#ifndef HUGE_VALL +# if defined _MSC_VER +/* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L. */ +# define HUGE_VALL (1e250L * 1e250L) +# else +# define HUGE_VALL (1.0L / 0.0L) +# endif +#endif + + +#if defined FP_ILOGB0 && defined FP_ILOGBNAN + /* Ensure FP_ILOGB0 and FP_ILOGBNAN are correct. */ +# if defined __HAIKU__ + /* Haiku: match what ilogb() does */ +# undef FP_ILOGB0 +# undef FP_ILOGBNAN +# define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ +# define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ +# endif +#else + /* Ensure FP_ILOGB0 and FP_ILOGBNAN are defined. */ +# if defined __NetBSD__ || defined __sgi + /* NetBSD, IRIX 6.5: match what ilogb() does */ +# define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ +# define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ +# elif defined _AIX + /* AIX 5.1: match what ilogb() does in AIX >= 5.2 */ +# define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ +# define FP_ILOGBNAN 2147483647 /* INT_MAX */ +# elif defined __sun + /* Solaris 9: match what ilogb() does */ +# define FP_ILOGB0 (- 2147483647) /* - INT_MAX */ +# define FP_ILOGBNAN 2147483647 /* INT_MAX */ +# else + /* Gnulib defined values. */ +# define FP_ILOGB0 (- 2147483647) /* - INT_MAX */ +# define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef acosf +# define acosf rpl_acosf +# endif +_GL_FUNCDECL_RPL (acosf, float, (float x)); +_GL_CXXALIAS_RPL (acosf, float, (float x)); +# else +# if !1 +# undef acosf +_GL_FUNCDECL_SYS (acosf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (acosf, float, (float x)); +# endif +_GL_CXXALIASWARN (acosf); +#elif defined GNULIB_POSIXCHECK +# undef acosf +# if HAVE_RAW_DECL_ACOSF +_GL_WARN_ON_USE (acosf, "acosf is unportable - " + "use gnulib module acosf for portability"); +# endif +#endif + +#if 0 +# if !1 || !1 +# undef acosl +_GL_FUNCDECL_SYS (acosl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (acosl, long double, (long double x)); +_GL_CXXALIASWARN (acosl); +#elif defined GNULIB_POSIXCHECK +# undef acosl +# if HAVE_RAW_DECL_ACOSL +_GL_WARN_ON_USE (acosl, "acosl is unportable - " + "use gnulib module acosl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef asinf +# define asinf rpl_asinf +# endif +_GL_FUNCDECL_RPL (asinf, float, (float x)); +_GL_CXXALIAS_RPL (asinf, float, (float x)); +# else +# if !1 +# undef asinf +_GL_FUNCDECL_SYS (asinf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (asinf, float, (float x)); +# endif +_GL_CXXALIASWARN (asinf); +#elif defined GNULIB_POSIXCHECK +# undef asinf +# if HAVE_RAW_DECL_ASINF +_GL_WARN_ON_USE (asinf, "asinf is unportable - " + "use gnulib module asinf for portability"); +# endif +#endif + +#if 0 +# if !1 || !1 +# undef asinl +_GL_FUNCDECL_SYS (asinl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (asinl, long double, (long double x)); +_GL_CXXALIASWARN (asinl); +#elif defined GNULIB_POSIXCHECK +# undef asinl +# if HAVE_RAW_DECL_ASINL +_GL_WARN_ON_USE (asinl, "asinl is unportable - " + "use gnulib module asinl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef atanf +# define atanf rpl_atanf +# endif +_GL_FUNCDECL_RPL (atanf, float, (float x)); +_GL_CXXALIAS_RPL (atanf, float, (float x)); +# else +# if !1 +# undef atanf +_GL_FUNCDECL_SYS (atanf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (atanf, float, (float x)); +# endif +_GL_CXXALIASWARN (atanf); +#elif defined GNULIB_POSIXCHECK +# undef atanf +# if HAVE_RAW_DECL_ATANF +_GL_WARN_ON_USE (atanf, "atanf is unportable - " + "use gnulib module atanf for portability"); +# endif +#endif + +#if 0 +# if !1 || !1 +# undef atanl +_GL_FUNCDECL_SYS (atanl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (atanl, long double, (long double x)); +_GL_CXXALIASWARN (atanl); +#elif defined GNULIB_POSIXCHECK +# undef atanl +# if HAVE_RAW_DECL_ATANL +_GL_WARN_ON_USE (atanl, "atanl is unportable - " + "use gnulib module atanl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef atan2f +# define atan2f rpl_atan2f +# endif +_GL_FUNCDECL_RPL (atan2f, float, (float y, float x)); +_GL_CXXALIAS_RPL (atan2f, float, (float y, float x)); +# else +# if !1 +# undef atan2f +_GL_FUNCDECL_SYS (atan2f, float, (float y, float x)); +# endif +_GL_CXXALIAS_SYS (atan2f, float, (float y, float x)); +# endif +_GL_CXXALIASWARN (atan2f); +#elif defined GNULIB_POSIXCHECK +# undef atan2f +# if HAVE_RAW_DECL_ATAN2F +_GL_WARN_ON_USE (atan2f, "atan2f is unportable - " + "use gnulib module atan2f for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef cbrtf +# define cbrtf rpl_cbrtf +# endif +_GL_FUNCDECL_RPL (cbrtf, float, (float x)); +_GL_CXXALIAS_RPL (cbrtf, float, (float x)); +# else +# if !1 +_GL_FUNCDECL_SYS (cbrtf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (cbrtf, float, (float x)); +# endif +_GL_CXXALIASWARN (cbrtf); +#elif defined GNULIB_POSIXCHECK +# undef cbrtf +# if HAVE_RAW_DECL_CBRTF +_GL_WARN_ON_USE (cbrtf, "cbrtf is unportable - " + "use gnulib module cbrtf for portability"); +# endif +#endif + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (cbrt, double, (double x)); +# endif +_GL_CXXALIAS_SYS (cbrt, double, (double x)); +_GL_CXXALIASWARN (cbrt); +#elif defined GNULIB_POSIXCHECK +# undef cbrt +# if HAVE_RAW_DECL_CBRT +_GL_WARN_ON_USE (cbrt, "cbrt is unportable - " + "use gnulib module cbrt for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef cbrtl +# define cbrtl rpl_cbrtl +# endif +_GL_FUNCDECL_RPL (cbrtl, long double, (long double x)); +_GL_CXXALIAS_RPL (cbrtl, long double, (long double x)); +# else +# if !1 +_GL_FUNCDECL_SYS (cbrtl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (cbrtl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (cbrtl); +#elif defined GNULIB_POSIXCHECK +# undef cbrtl +# if HAVE_RAW_DECL_CBRTL +_GL_WARN_ON_USE (cbrtl, "cbrtl is unportable - " + "use gnulib module cbrtl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ceilf +# define ceilf rpl_ceilf +# endif +_GL_FUNCDECL_RPL (ceilf, float, (float x)); +_GL_CXXALIAS_RPL (ceilf, float, (float x)); +# else +# if !1 +# undef ceilf +_GL_FUNCDECL_SYS (ceilf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (ceilf, float, (float x)); +# endif +_GL_CXXALIASWARN (ceilf); +#elif defined GNULIB_POSIXCHECK +# undef ceilf +# if HAVE_RAW_DECL_CEILF +_GL_WARN_ON_USE (ceilf, "ceilf is unportable - " + "use gnulib module ceilf for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ceil +# define ceil rpl_ceil +# endif +_GL_FUNCDECL_RPL (ceil, double, (double x)); +_GL_CXXALIAS_RPL (ceil, double, (double x)); +# else +_GL_CXXALIAS_SYS (ceil, double, (double x)); +# endif +_GL_CXXALIASWARN (ceil); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ceill +# define ceill rpl_ceill +# endif +_GL_FUNCDECL_RPL (ceill, long double, (long double x)); +_GL_CXXALIAS_RPL (ceill, long double, (long double x)); +# else +# if !1 +# undef ceill +_GL_FUNCDECL_SYS (ceill, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (ceill, long double, (long double x)); +# endif +_GL_CXXALIASWARN (ceill); +#elif defined GNULIB_POSIXCHECK +# undef ceill +# if HAVE_RAW_DECL_CEILL +_GL_WARN_ON_USE (ceill, "ceill is unportable - " + "use gnulib module ceill for portability"); +# endif +#endif + + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (copysignf, float, (float x, float y)); +# endif +_GL_CXXALIAS_SYS (copysignf, float, (float x, float y)); +_GL_CXXALIASWARN (copysignf); +#elif defined GNULIB_POSIXCHECK +# undef copysignf +# if HAVE_RAW_DECL_COPYSIGNF +_GL_WARN_ON_USE (copysignf, "copysignf is unportable - " + "use gnulib module copysignf for portability"); +# endif +#endif + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (copysign, double, (double x, double y)); +# endif +_GL_CXXALIAS_SYS (copysign, double, (double x, double y)); +_GL_CXXALIASWARN (copysign); +#elif defined GNULIB_POSIXCHECK +# undef copysign +# if HAVE_RAW_DECL_COPYSIGN +_GL_WARN_ON_USE (copysign, "copysign is unportable - " + "use gnulib module copysign for portability"); +# endif +#endif + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (copysignl, long double, (long double x, long double y)); +# endif +_GL_CXXALIAS_SYS (copysignl, long double, (long double x, long double y)); +_GL_CXXALIASWARN (copysignl); +#elif defined GNULIB_POSIXCHECK +# undef copysignl +# if HAVE_RAW_DECL_COPYSIGNL +_GL_WARN_ON_USE (copysign, "copysignl is unportable - " + "use gnulib module copysignl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef cosf +# define cosf rpl_cosf +# endif +_GL_FUNCDECL_RPL (cosf, float, (float x)); +_GL_CXXALIAS_RPL (cosf, float, (float x)); +# else +# if !1 +# undef cosf +_GL_FUNCDECL_SYS (cosf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (cosf, float, (float x)); +# endif +_GL_CXXALIASWARN (cosf); +#elif defined GNULIB_POSIXCHECK +# undef cosf +# if HAVE_RAW_DECL_COSF +_GL_WARN_ON_USE (cosf, "cosf is unportable - " + "use gnulib module cosf for portability"); +# endif +#endif + +#if 0 +# if !1 || !1 +# undef cosl +_GL_FUNCDECL_SYS (cosl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (cosl, long double, (long double x)); +_GL_CXXALIASWARN (cosl); +#elif defined GNULIB_POSIXCHECK +# undef cosl +# if HAVE_RAW_DECL_COSL +_GL_WARN_ON_USE (cosl, "cosl is unportable - " + "use gnulib module cosl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef coshf +# define coshf rpl_coshf +# endif +_GL_FUNCDECL_RPL (coshf, float, (float x)); +_GL_CXXALIAS_RPL (coshf, float, (float x)); +# else +# if !1 +# undef coshf +_GL_FUNCDECL_SYS (coshf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (coshf, float, (float x)); +# endif +_GL_CXXALIASWARN (coshf); +#elif defined GNULIB_POSIXCHECK +# undef coshf +# if HAVE_RAW_DECL_COSHF +_GL_WARN_ON_USE (coshf, "coshf is unportable - " + "use gnulib module coshf for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef expf +# define expf rpl_expf +# endif +_GL_FUNCDECL_RPL (expf, float, (float x)); +_GL_CXXALIAS_RPL (expf, float, (float x)); +# else +# if !1 +# undef expf +_GL_FUNCDECL_SYS (expf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (expf, float, (float x)); +# endif +_GL_CXXALIASWARN (expf); +#elif defined GNULIB_POSIXCHECK +# undef expf +# if HAVE_RAW_DECL_EXPF +_GL_WARN_ON_USE (expf, "expf is unportable - " + "use gnulib module expf for portability"); +# endif +#endif + +#if 0 +# if !1 || !1 +# undef expl +_GL_FUNCDECL_SYS (expl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (expl, long double, (long double x)); +_GL_CXXALIASWARN (expl); +#elif defined GNULIB_POSIXCHECK +# undef expl +# if HAVE_RAW_DECL_EXPL +_GL_WARN_ON_USE (expl, "expl is unportable - " + "use gnulib module expl for portability"); +# endif +#endif + + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (exp2f, float, (float x)); +# endif +_GL_CXXALIAS_SYS (exp2f, float, (float x)); +_GL_CXXALIASWARN (exp2f); +#elif defined GNULIB_POSIXCHECK +# undef exp2f +# if HAVE_RAW_DECL_EXP2F +_GL_WARN_ON_USE (exp2f, "exp2f is unportable - " + "use gnulib module exp2f for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef exp2 +# define exp2 rpl_exp2 +# endif +_GL_FUNCDECL_RPL (exp2, double, (double x)); +_GL_CXXALIAS_RPL (exp2, double, (double x)); +# else +# if !1 +_GL_FUNCDECL_SYS (exp2, double, (double x)); +# endif +_GL_CXXALIAS_SYS (exp2, double, (double x)); +# endif +_GL_CXXALIASWARN (exp2); +#elif defined GNULIB_POSIXCHECK +# undef exp2 +# if HAVE_RAW_DECL_EXP2 +_GL_WARN_ON_USE (exp2, "exp2 is unportable - " + "use gnulib module exp2 for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef exp2l +# define exp2l rpl_exp2l +# endif +_GL_FUNCDECL_RPL (exp2l, long double, (long double x)); +_GL_CXXALIAS_RPL (exp2l, long double, (long double x)); +# else +# if !1 +# undef exp2l +_GL_FUNCDECL_SYS (exp2l, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (exp2l, long double, (long double x)); +# endif +_GL_CXXALIASWARN (exp2l); +#elif defined GNULIB_POSIXCHECK +# undef exp2l +# if HAVE_RAW_DECL_EXP2L +_GL_WARN_ON_USE (exp2l, "exp2l is unportable - " + "use gnulib module exp2l for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef expm1f +# define expm1f rpl_expm1f +# endif +_GL_FUNCDECL_RPL (expm1f, float, (float x)); +_GL_CXXALIAS_RPL (expm1f, float, (float x)); +# else +# if !1 +_GL_FUNCDECL_SYS (expm1f, float, (float x)); +# endif +_GL_CXXALIAS_SYS (expm1f, float, (float x)); +# endif +_GL_CXXALIASWARN (expm1f); +#elif defined GNULIB_POSIXCHECK +# undef expm1f +# if HAVE_RAW_DECL_EXPM1F +_GL_WARN_ON_USE (expm1f, "expm1f is unportable - " + "use gnulib module expm1f for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef expm1 +# define expm1 rpl_expm1 +# endif +_GL_FUNCDECL_RPL (expm1, double, (double x)); +_GL_CXXALIAS_RPL (expm1, double, (double x)); +# else +# if !1 +_GL_FUNCDECL_SYS (expm1, double, (double x)); +# endif +_GL_CXXALIAS_SYS (expm1, double, (double x)); +# endif +_GL_CXXALIASWARN (expm1); +#elif defined GNULIB_POSIXCHECK +# undef expm1 +# if HAVE_RAW_DECL_EXPM1 +_GL_WARN_ON_USE (expm1, "expm1 is unportable - " + "use gnulib module expm1 for portability"); +# endif +#endif + +#if 0 +# if !1 +# undef expm1l +_GL_FUNCDECL_SYS (expm1l, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (expm1l, long double, (long double x)); +_GL_CXXALIASWARN (expm1l); +#elif defined GNULIB_POSIXCHECK +# undef expm1l +# if HAVE_RAW_DECL_EXPM1L +_GL_WARN_ON_USE (expm1l, "expm1l is unportable - " + "use gnulib module expm1l for portability"); +# endif +#endif + + +#if 0 +# if !1 +# undef fabsf +_GL_FUNCDECL_SYS (fabsf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (fabsf, float, (float x)); +_GL_CXXALIASWARN (fabsf); +#elif defined GNULIB_POSIXCHECK +# undef fabsf +# if HAVE_RAW_DECL_FABSF +_GL_WARN_ON_USE (fabsf, "fabsf is unportable - " + "use gnulib module fabsf for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fabsl +# define fabsl rpl_fabsl +# endif +_GL_FUNCDECL_RPL (fabsl, long double, (long double x)); +_GL_CXXALIAS_RPL (fabsl, long double, (long double x)); +# else +# if !1 +# undef fabsl +_GL_FUNCDECL_SYS (fabsl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (fabsl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (fabsl); +#elif defined GNULIB_POSIXCHECK +# undef fabsl +# if HAVE_RAW_DECL_FABSL +_GL_WARN_ON_USE (fabsl, "fabsl is unportable - " + "use gnulib module fabsl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef floorf +# define floorf rpl_floorf +# endif +_GL_FUNCDECL_RPL (floorf, float, (float x)); +_GL_CXXALIAS_RPL (floorf, float, (float x)); +# else +# if !1 +# undef floorf +_GL_FUNCDECL_SYS (floorf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (floorf, float, (float x)); +# endif +_GL_CXXALIASWARN (floorf); +#elif defined GNULIB_POSIXCHECK +# undef floorf +# if HAVE_RAW_DECL_FLOORF +_GL_WARN_ON_USE (floorf, "floorf is unportable - " + "use gnulib module floorf for portability"); +# endif +#endif + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef floor +# define floor rpl_floor +# endif +_GL_FUNCDECL_RPL (floor, double, (double x)); +_GL_CXXALIAS_RPL (floor, double, (double x)); +# else +_GL_CXXALIAS_SYS (floor, double, (double x)); +# endif +_GL_CXXALIASWARN (floor); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef floorl +# define floorl rpl_floorl +# endif +_GL_FUNCDECL_RPL (floorl, long double, (long double x)); +_GL_CXXALIAS_RPL (floorl, long double, (long double x)); +# else +# if !1 +# undef floorl +_GL_FUNCDECL_SYS (floorl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (floorl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (floorl); +#elif defined GNULIB_POSIXCHECK +# undef floorl +# if HAVE_RAW_DECL_FLOORL +_GL_WARN_ON_USE (floorl, "floorl is unportable - " + "use gnulib module floorl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fmaf +# define fmaf rpl_fmaf +# endif +_GL_FUNCDECL_RPL (fmaf, float, (float x, float y, float z)); +_GL_CXXALIAS_RPL (fmaf, float, (float x, float y, float z)); +# else +# if !1 +_GL_FUNCDECL_SYS (fmaf, float, (float x, float y, float z)); +# endif +_GL_CXXALIAS_SYS (fmaf, float, (float x, float y, float z)); +# endif +_GL_CXXALIASWARN (fmaf); +#elif defined GNULIB_POSIXCHECK +# undef fmaf +# if HAVE_RAW_DECL_FMAF +_GL_WARN_ON_USE (fmaf, "fmaf is unportable - " + "use gnulib module fmaf for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fma +# define fma rpl_fma +# endif +_GL_FUNCDECL_RPL (fma, double, (double x, double y, double z)); +_GL_CXXALIAS_RPL (fma, double, (double x, double y, double z)); +# else +# if !1 +_GL_FUNCDECL_SYS (fma, double, (double x, double y, double z)); +# endif +_GL_CXXALIAS_SYS (fma, double, (double x, double y, double z)); +# endif +_GL_CXXALIASWARN (fma); +#elif defined GNULIB_POSIXCHECK +# undef fma +# if HAVE_RAW_DECL_FMA +_GL_WARN_ON_USE (fma, "fma is unportable - " + "use gnulib module fma for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fmal +# define fmal rpl_fmal +# endif +_GL_FUNCDECL_RPL (fmal, long double, + (long double x, long double y, long double z)); +_GL_CXXALIAS_RPL (fmal, long double, + (long double x, long double y, long double z)); +# else +# if !1 +# undef fmal +_GL_FUNCDECL_SYS (fmal, long double, + (long double x, long double y, long double z)); +# endif +_GL_CXXALIAS_SYS (fmal, long double, + (long double x, long double y, long double z)); +# endif +_GL_CXXALIASWARN (fmal); +#elif defined GNULIB_POSIXCHECK +# undef fmal +# if HAVE_RAW_DECL_FMAL +_GL_WARN_ON_USE (fmal, "fmal is unportable - " + "use gnulib module fmal for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fmodf +# define fmodf rpl_fmodf +# endif +_GL_FUNCDECL_RPL (fmodf, float, (float x, float y)); +_GL_CXXALIAS_RPL (fmodf, float, (float x, float y)); +# else +# if !1 +# undef fmodf +_GL_FUNCDECL_SYS (fmodf, float, (float x, float y)); +# endif +_GL_CXXALIAS_SYS (fmodf, float, (float x, float y)); +# endif +_GL_CXXALIASWARN (fmodf); +#elif defined GNULIB_POSIXCHECK +# undef fmodf +# if HAVE_RAW_DECL_FMODF +_GL_WARN_ON_USE (fmodf, "fmodf is unportable - " + "use gnulib module fmodf for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fmod +# define fmod rpl_fmod +# endif +_GL_FUNCDECL_RPL (fmod, double, (double x, double y)); +_GL_CXXALIAS_RPL (fmod, double, (double x, double y)); +# else +_GL_CXXALIAS_SYS (fmod, double, (double x, double y)); +# endif +_GL_CXXALIASWARN (fmod); +#elif defined GNULIB_POSIXCHECK +# undef fmod +# if HAVE_RAW_DECL_FMOD +_GL_WARN_ON_USE (fmod, "fmod has portability problems - " + "use gnulib module fmod for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fmodl +# define fmodl rpl_fmodl +# endif +_GL_FUNCDECL_RPL (fmodl, long double, (long double x, long double y)); +_GL_CXXALIAS_RPL (fmodl, long double, (long double x, long double y)); +# else +# if !1 +# undef fmodl +_GL_FUNCDECL_SYS (fmodl, long double, (long double x, long double y)); +# endif +_GL_CXXALIAS_SYS (fmodl, long double, (long double x, long double y)); +# endif +_GL_CXXALIASWARN (fmodl); +#elif defined GNULIB_POSIXCHECK +# undef fmodl +# if HAVE_RAW_DECL_FMODL +_GL_WARN_ON_USE (fmodl, "fmodl is unportable - " + "use gnulib module fmodl for portability"); +# endif +#endif + + +/* Write x as + x = mantissa * 2^exp + where + If x finite and nonzero: 0.5 <= |mantissa| < 1.0. + If x is zero: mantissa = x, exp = 0. + If x is infinite or NaN: mantissa = x, exp unspecified. + Store exp in *EXPPTR and return mantissa. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef frexpf +# define frexpf rpl_frexpf +# endif +_GL_FUNCDECL_RPL (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (frexpf, float, (float x, int *expptr)); +# else +# if !1 +# undef frexpf +_GL_FUNCDECL_SYS (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (frexpf, float, (float x, int *expptr)); +# endif +_GL_CXXALIASWARN (frexpf); +#elif defined GNULIB_POSIXCHECK +# undef frexpf +# if HAVE_RAW_DECL_FREXPF +_GL_WARN_ON_USE (frexpf, "frexpf is unportable - " + "use gnulib module frexpf for portability"); +# endif +#endif + +/* Write x as + x = mantissa * 2^exp + where + If x finite and nonzero: 0.5 <= |mantissa| < 1.0. + If x is zero: mantissa = x, exp = 0. + If x is infinite or NaN: mantissa = x, exp unspecified. + Store exp in *EXPPTR and return mantissa. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef frexp +# define frexp rpl_frexp +# endif +_GL_FUNCDECL_RPL (frexp, double, (double x, int *expptr) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (frexp, double, (double x, int *expptr)); +# else +_GL_CXXALIAS_SYS (frexp, double, (double x, int *expptr)); +# endif +_GL_CXXALIASWARN1 (frexp, double, (double x, int *expptr)); +#elif defined GNULIB_POSIXCHECK +# undef frexp +/* Assume frexp is always declared. */ +_GL_WARN_ON_USE (frexp, "frexp is unportable - " + "use gnulib module frexp for portability"); +#endif + +/* Write x as + x = mantissa * 2^exp + where + If x finite and nonzero: 0.5 <= |mantissa| < 1.0. + If x is zero: mantissa = x, exp = 0. + If x is infinite or NaN: mantissa = x, exp unspecified. + Store exp in *EXPPTR and return mantissa. */ +#if 1 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef frexpl +# define frexpl rpl_frexpl +# endif +_GL_FUNCDECL_RPL (frexpl, long double, + (long double x, int *expptr) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (frexpl, long double, (long double x, int *expptr)); +#else +# if !1 +_GL_FUNCDECL_SYS (frexpl, long double, + (long double x, int *expptr) _GL_ARG_NONNULL ((2))); +# endif +# if 1 +_GL_CXXALIAS_SYS (frexpl, long double, (long double x, int *expptr)); +# endif +#endif +#if 1 && !(0 && !1) +_GL_CXXALIASWARN (frexpl); +#endif +#if !1 && defined GNULIB_POSIXCHECK +# undef frexpl +# if HAVE_RAW_DECL_FREXPL +_GL_WARN_ON_USE (frexpl, "frexpl is unportable - " + "use gnulib module frexpl for portability"); +# endif +#endif + + +/* Return sqrt(x^2+y^2). */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef hypotf +# define hypotf rpl_hypotf +# endif +_GL_FUNCDECL_RPL (hypotf, float, (float x, float y)); +_GL_CXXALIAS_RPL (hypotf, float, (float x, float y)); +# else +# if !1 +_GL_FUNCDECL_SYS (hypotf, float, (float x, float y)); +# endif +_GL_CXXALIAS_SYS (hypotf, float, (float x, float y)); +# endif +_GL_CXXALIASWARN (hypotf); +#elif defined GNULIB_POSIXCHECK +# undef hypotf +# if HAVE_RAW_DECL_HYPOTF +_GL_WARN_ON_USE (hypotf, "hypotf is unportable - " + "use gnulib module hypotf for portability"); +# endif +#endif + +/* Return sqrt(x^2+y^2). */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef hypot +# define hypot rpl_hypot +# endif +_GL_FUNCDECL_RPL (hypot, double, (double x, double y)); +_GL_CXXALIAS_RPL (hypot, double, (double x, double y)); +# else +_GL_CXXALIAS_SYS (hypot, double, (double x, double y)); +# endif +_GL_CXXALIASWARN (hypot); +#elif defined GNULIB_POSIXCHECK +# undef hypot +# if HAVE_RAW_DECL_HYPOT +_GL_WARN_ON_USE (hypotf, "hypot has portability problems - " + "use gnulib module hypot for portability"); +# endif +#endif + +/* Return sqrt(x^2+y^2). */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef hypotl +# define hypotl rpl_hypotl +# endif +_GL_FUNCDECL_RPL (hypotl, long double, (long double x, long double y)); +_GL_CXXALIAS_RPL (hypotl, long double, (long double x, long double y)); +# else +# if !1 +_GL_FUNCDECL_SYS (hypotl, long double, (long double x, long double y)); +# endif +_GL_CXXALIAS_SYS (hypotl, long double, (long double x, long double y)); +# endif +_GL_CXXALIASWARN (hypotl); +#elif defined GNULIB_POSIXCHECK +# undef hypotl +# if HAVE_RAW_DECL_HYPOTL +_GL_WARN_ON_USE (hypotl, "hypotl is unportable - " + "use gnulib module hypotl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ilogbf +# define ilogbf rpl_ilogbf +# endif +_GL_FUNCDECL_RPL (ilogbf, int, (float x)); +_GL_CXXALIAS_RPL (ilogbf, int, (float x)); +# else +# if !1 +_GL_FUNCDECL_SYS (ilogbf, int, (float x)); +# endif +_GL_CXXALIAS_SYS (ilogbf, int, (float x)); +# endif +_GL_CXXALIASWARN (ilogbf); +#elif defined GNULIB_POSIXCHECK +# undef ilogbf +# if HAVE_RAW_DECL_ILOGBF +_GL_WARN_ON_USE (ilogbf, "ilogbf is unportable - " + "use gnulib module ilogbf for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ilogb +# define ilogb rpl_ilogb +# endif +_GL_FUNCDECL_RPL (ilogb, int, (double x)); +_GL_CXXALIAS_RPL (ilogb, int, (double x)); +# else +# if !1 +_GL_FUNCDECL_SYS (ilogb, int, (double x)); +# endif +_GL_CXXALIAS_SYS (ilogb, int, (double x)); +# endif +_GL_CXXALIASWARN (ilogb); +#elif defined GNULIB_POSIXCHECK +# undef ilogb +# if HAVE_RAW_DECL_ILOGB +_GL_WARN_ON_USE (ilogb, "ilogb is unportable - " + "use gnulib module ilogb for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ilogbl +# define ilogbl rpl_ilogbl +# endif +_GL_FUNCDECL_RPL (ilogbl, int, (long double x)); +_GL_CXXALIAS_RPL (ilogbl, int, (long double x)); +# else +# if !1 +_GL_FUNCDECL_SYS (ilogbl, int, (long double x)); +# endif +_GL_CXXALIAS_SYS (ilogbl, int, (long double x)); +# endif +_GL_CXXALIASWARN (ilogbl); +#elif defined GNULIB_POSIXCHECK +# undef ilogbl +# if HAVE_RAW_DECL_ILOGBL +_GL_WARN_ON_USE (ilogbl, "ilogbl is unportable - " + "use gnulib module ilogbl for portability"); +# endif +#endif + + +/* Return x * 2^exp. */ +#if 0 +# if !1 +# undef ldexpf +_GL_FUNCDECL_SYS (ldexpf, float, (float x, int exp)); +# endif +_GL_CXXALIAS_SYS (ldexpf, float, (float x, int exp)); +_GL_CXXALIASWARN (ldexpf); +#elif defined GNULIB_POSIXCHECK +# undef ldexpf +# if HAVE_RAW_DECL_LDEXPF +_GL_WARN_ON_USE (ldexpf, "ldexpf is unportable - " + "use gnulib module ldexpf for portability"); +# endif +#endif + +/* Return x * 2^exp. */ +#if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ldexpl +# define ldexpl rpl_ldexpl +# endif +_GL_FUNCDECL_RPL (ldexpl, long double, (long double x, int exp)); +_GL_CXXALIAS_RPL (ldexpl, long double, (long double x, int exp)); +#else +# if !1 +_GL_FUNCDECL_SYS (ldexpl, long double, (long double x, int exp)); +# endif +# if 0 +_GL_CXXALIAS_SYS (ldexpl, long double, (long double x, int exp)); +# endif +#endif +#if 0 +_GL_CXXALIASWARN (ldexpl); +#endif +#if !0 && defined GNULIB_POSIXCHECK +# undef ldexpl +# if HAVE_RAW_DECL_LDEXPL +_GL_WARN_ON_USE (ldexpl, "ldexpl is unportable - " + "use gnulib module ldexpl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef logf +# define logf rpl_logf +# endif +_GL_FUNCDECL_RPL (logf, float, (float x)); +_GL_CXXALIAS_RPL (logf, float, (float x)); +# else +# if !1 +# undef logf +_GL_FUNCDECL_SYS (logf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (logf, float, (float x)); +# endif +_GL_CXXALIASWARN (logf); +#elif defined GNULIB_POSIXCHECK +# undef logf +# if HAVE_RAW_DECL_LOGF +_GL_WARN_ON_USE (logf, "logf is unportable - " + "use gnulib module logf for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log +# define log rpl_log +# endif +_GL_FUNCDECL_RPL (log, double, (double x)); +_GL_CXXALIAS_RPL (log, double, (double x)); +# else +_GL_CXXALIAS_SYS (log, double, (double x)); +# endif +_GL_CXXALIASWARN (log); +#elif defined GNULIB_POSIXCHECK +# undef log +# if HAVE_RAW_DECL_LOG +_GL_WARN_ON_USE (log, "log has portability problems - " + "use gnulib module log for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef logl +# define logl rpl_logl +# endif +_GL_FUNCDECL_RPL (logl, long double, (long double x)); +_GL_CXXALIAS_RPL (logl, long double, (long double x)); +# else +# if !1 || !1 +# undef logl +_GL_FUNCDECL_SYS (logl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (logl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (logl); +#elif defined GNULIB_POSIXCHECK +# undef logl +# if HAVE_RAW_DECL_LOGL +_GL_WARN_ON_USE (logl, "logl is unportable - " + "use gnulib module logl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log10f +# define log10f rpl_log10f +# endif +_GL_FUNCDECL_RPL (log10f, float, (float x)); +_GL_CXXALIAS_RPL (log10f, float, (float x)); +# else +# if !1 +# undef log10f +_GL_FUNCDECL_SYS (log10f, float, (float x)); +# endif +_GL_CXXALIAS_SYS (log10f, float, (float x)); +# endif +_GL_CXXALIASWARN (log10f); +#elif defined GNULIB_POSIXCHECK +# undef log10f +# if HAVE_RAW_DECL_LOG10F +_GL_WARN_ON_USE (log10f, "log10f is unportable - " + "use gnulib module log10f for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log10 +# define log10 rpl_log10 +# endif +_GL_FUNCDECL_RPL (log10, double, (double x)); +_GL_CXXALIAS_RPL (log10, double, (double x)); +# else +_GL_CXXALIAS_SYS (log10, double, (double x)); +# endif +_GL_CXXALIASWARN (log10); +#elif defined GNULIB_POSIXCHECK +# undef log10 +# if HAVE_RAW_DECL_LOG10 +_GL_WARN_ON_USE (log10, "log10 has portability problems - " + "use gnulib module log10 for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log10l +# define log10l rpl_log10l +# endif +_GL_FUNCDECL_RPL (log10l, long double, (long double x)); +_GL_CXXALIAS_RPL (log10l, long double, (long double x)); +# else +# if !1 || !1 +# undef log10l +_GL_FUNCDECL_SYS (log10l, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (log10l, long double, (long double x)); +# endif +_GL_CXXALIASWARN (log10l); +#elif defined GNULIB_POSIXCHECK +# undef log10l +# if HAVE_RAW_DECL_LOG10L +_GL_WARN_ON_USE (log10l, "log10l is unportable - " + "use gnulib module log10l for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log1pf +# define log1pf rpl_log1pf +# endif +_GL_FUNCDECL_RPL (log1pf, float, (float x)); +_GL_CXXALIAS_RPL (log1pf, float, (float x)); +# else +# if !1 +_GL_FUNCDECL_SYS (log1pf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (log1pf, float, (float x)); +# endif +_GL_CXXALIASWARN (log1pf); +#elif defined GNULIB_POSIXCHECK +# undef log1pf +# if HAVE_RAW_DECL_LOG1PF +_GL_WARN_ON_USE (log1pf, "log1pf is unportable - " + "use gnulib module log1pf for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log1p +# define log1p rpl_log1p +# endif +_GL_FUNCDECL_RPL (log1p, double, (double x)); +_GL_CXXALIAS_RPL (log1p, double, (double x)); +# else +# if !1 +_GL_FUNCDECL_SYS (log1p, double, (double x)); +# endif +_GL_CXXALIAS_SYS (log1p, double, (double x)); +# endif +_GL_CXXALIASWARN (log1p); +#elif defined GNULIB_POSIXCHECK +# undef log1p +# if HAVE_RAW_DECL_LOG1P +_GL_WARN_ON_USE (log1p, "log1p has portability problems - " + "use gnulib module log1p for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log1pl +# define log1pl rpl_log1pl +# endif +_GL_FUNCDECL_RPL (log1pl, long double, (long double x)); +_GL_CXXALIAS_RPL (log1pl, long double, (long double x)); +# else +# if !1 +_GL_FUNCDECL_SYS (log1pl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (log1pl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (log1pl); +#elif defined GNULIB_POSIXCHECK +# undef log1pl +# if HAVE_RAW_DECL_LOG1PL +_GL_WARN_ON_USE (log1pl, "log1pl has portability problems - " + "use gnulib module log1pl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log2f +# define log2f rpl_log2f +# endif +_GL_FUNCDECL_RPL (log2f, float, (float x)); +_GL_CXXALIAS_RPL (log2f, float, (float x)); +# else +# if !1 +# undef log2f +_GL_FUNCDECL_SYS (log2f, float, (float x)); +# endif +_GL_CXXALIAS_SYS (log2f, float, (float x)); +# endif +_GL_CXXALIASWARN (log2f); +#elif defined GNULIB_POSIXCHECK +# undef log2f +# if HAVE_RAW_DECL_LOG2F +_GL_WARN_ON_USE (log2f, "log2f is unportable - " + "use gnulib module log2f for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log2 +# define log2 rpl_log2 +# endif +_GL_FUNCDECL_RPL (log2, double, (double x)); +_GL_CXXALIAS_RPL (log2, double, (double x)); +# else +# if !1 +# undef log2 +_GL_FUNCDECL_SYS (log2, double, (double x)); +# endif +_GL_CXXALIAS_SYS (log2, double, (double x)); +# endif +_GL_CXXALIASWARN (log2); +#elif defined GNULIB_POSIXCHECK +# undef log2 +# if HAVE_RAW_DECL_LOG2 +_GL_WARN_ON_USE (log2, "log2 is unportable - " + "use gnulib module log2 for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log2l +# define log2l rpl_log2l +# endif +_GL_FUNCDECL_RPL (log2l, long double, (long double x)); +_GL_CXXALIAS_RPL (log2l, long double, (long double x)); +# else +# if !1 +_GL_FUNCDECL_SYS (log2l, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (log2l, long double, (long double x)); +# endif +_GL_CXXALIASWARN (log2l); +#elif defined GNULIB_POSIXCHECK +# undef log2l +# if HAVE_RAW_DECL_LOG2L +_GL_WARN_ON_USE (log2l, "log2l is unportable - " + "use gnulib module log2l for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef logbf +# define logbf rpl_logbf +# endif +_GL_FUNCDECL_RPL (logbf, float, (float x)); +_GL_CXXALIAS_RPL (logbf, float, (float x)); +# else +# if !1 +_GL_FUNCDECL_SYS (logbf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (logbf, float, (float x)); +# endif +_GL_CXXALIASWARN (logbf); +#elif defined GNULIB_POSIXCHECK +# undef logbf +# if HAVE_RAW_DECL_LOGBF +_GL_WARN_ON_USE (logbf, "logbf is unportable - " + "use gnulib module logbf for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef logb +# define logb rpl_logb +# endif +_GL_FUNCDECL_RPL (logb, double, (double x)); +_GL_CXXALIAS_RPL (logb, double, (double x)); +# else +# if !1 +_GL_FUNCDECL_SYS (logb, double, (double x)); +# endif +_GL_CXXALIAS_SYS (logb, double, (double x)); +# endif +_GL_CXXALIASWARN (logb); +#elif defined GNULIB_POSIXCHECK +# undef logb +# if HAVE_RAW_DECL_LOGB +_GL_WARN_ON_USE (logb, "logb is unportable - " + "use gnulib module logb for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef logbl +# define logbl rpl_logbl +# endif +_GL_FUNCDECL_RPL (logbl, long double, (long double x)); +_GL_CXXALIAS_RPL (logbl, long double, (long double x)); +# else +# if !1 +_GL_FUNCDECL_SYS (logbl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (logbl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (logbl); +#elif defined GNULIB_POSIXCHECK +# undef logbl +# if HAVE_RAW_DECL_LOGBL +_GL_WARN_ON_USE (logbl, "logbl is unportable - " + "use gnulib module logbl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef modff +# define modff rpl_modff +# endif +_GL_FUNCDECL_RPL (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (modff, float, (float x, float *iptr)); +# else +# if !1 +# undef modff +_GL_FUNCDECL_SYS (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (modff, float, (float x, float *iptr)); +# endif +_GL_CXXALIASWARN (modff); +#elif defined GNULIB_POSIXCHECK +# undef modff +# if HAVE_RAW_DECL_MODFF +_GL_WARN_ON_USE (modff, "modff is unportable - " + "use gnulib module modff for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef modf +# define modf rpl_modf +# endif +_GL_FUNCDECL_RPL (modf, double, (double x, double *iptr) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (modf, double, (double x, double *iptr)); +# else +_GL_CXXALIAS_SYS (modf, double, (double x, double *iptr)); +# endif +_GL_CXXALIASWARN (modf); +#elif defined GNULIB_POSIXCHECK +# undef modf +# if HAVE_RAW_DECL_MODF +_GL_WARN_ON_USE (modf, "modf has portability problems - " + "use gnulib module modf for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef modfl +# define modfl rpl_modfl +# endif +_GL_FUNCDECL_RPL (modfl, long double, (long double x, long double *iptr) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (modfl, long double, (long double x, long double *iptr)); +# else +# if !1 +# undef modfl +_GL_FUNCDECL_SYS (modfl, long double, (long double x, long double *iptr) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (modfl, long double, (long double x, long double *iptr)); +# endif +_GL_CXXALIASWARN (modfl); +#elif defined GNULIB_POSIXCHECK +# undef modfl +# if HAVE_RAW_DECL_MODFL +_GL_WARN_ON_USE (modfl, "modfl is unportable - " + "use gnulib module modfl for portability"); +# endif +#endif + + +#if 0 +# if !1 +# undef powf +_GL_FUNCDECL_SYS (powf, float, (float x, float y)); +# endif +_GL_CXXALIAS_SYS (powf, float, (float x, float y)); +_GL_CXXALIASWARN (powf); +#elif defined GNULIB_POSIXCHECK +# undef powf +# if HAVE_RAW_DECL_POWF +_GL_WARN_ON_USE (powf, "powf is unportable - " + "use gnulib module powf for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef remainderf +# define remainderf rpl_remainderf +# endif +_GL_FUNCDECL_RPL (remainderf, float, (float x, float y)); +_GL_CXXALIAS_RPL (remainderf, float, (float x, float y)); +# else +# if !1 +_GL_FUNCDECL_SYS (remainderf, float, (float x, float y)); +# endif +_GL_CXXALIAS_SYS (remainderf, float, (float x, float y)); +# endif +_GL_CXXALIASWARN (remainderf); +#elif defined GNULIB_POSIXCHECK +# undef remainderf +# if HAVE_RAW_DECL_REMAINDERF +_GL_WARN_ON_USE (remainderf, "remainderf is unportable - " + "use gnulib module remainderf for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef remainder +# define remainder rpl_remainder +# endif +_GL_FUNCDECL_RPL (remainder, double, (double x, double y)); +_GL_CXXALIAS_RPL (remainder, double, (double x, double y)); +# else +# if !1 || !1 +_GL_FUNCDECL_SYS (remainder, double, (double x, double y)); +# endif +_GL_CXXALIAS_SYS (remainder, double, (double x, double y)); +# endif +_GL_CXXALIASWARN (remainder); +#elif defined GNULIB_POSIXCHECK +# undef remainder +# if HAVE_RAW_DECL_REMAINDER +_GL_WARN_ON_USE (remainder, "remainder is unportable - " + "use gnulib module remainder for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef remainderl +# define remainderl rpl_remainderl +# endif +_GL_FUNCDECL_RPL (remainderl, long double, (long double x, long double y)); +_GL_CXXALIAS_RPL (remainderl, long double, (long double x, long double y)); +# else +# if !1 +# undef remainderl +_GL_FUNCDECL_SYS (remainderl, long double, (long double x, long double y)); +# endif +_GL_CXXALIAS_SYS (remainderl, long double, (long double x, long double y)); +# endif +_GL_CXXALIASWARN (remainderl); +#elif defined GNULIB_POSIXCHECK +# undef remainderl +# if HAVE_RAW_DECL_REMAINDERL +_GL_WARN_ON_USE (remainderl, "remainderl is unportable - " + "use gnulib module remainderl for portability"); +# endif +#endif + + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (rintf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (rintf, float, (float x)); +_GL_CXXALIASWARN (rintf); +#elif defined GNULIB_POSIXCHECK +# undef rintf +# if HAVE_RAW_DECL_RINTF +_GL_WARN_ON_USE (rintf, "rintf is unportable - " + "use gnulib module rintf for portability"); +# endif +#endif + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (rint, double, (double x)); +# endif +_GL_CXXALIAS_SYS (rint, double, (double x)); +_GL_CXXALIASWARN (rint); +#elif defined GNULIB_POSIXCHECK +# undef rint +# if HAVE_RAW_DECL_RINT +_GL_WARN_ON_USE (rint, "rint is unportable - " + "use gnulib module rint for portability"); +# endif +#endif + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (rintl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (rintl, long double, (long double x)); +_GL_CXXALIASWARN (rintl); +#elif defined GNULIB_POSIXCHECK +# undef rintl +# if HAVE_RAW_DECL_RINTL +_GL_WARN_ON_USE (rintl, "rintl is unportable - " + "use gnulib module rintl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef roundf +# define roundf rpl_roundf +# endif +_GL_FUNCDECL_RPL (roundf, float, (float x)); +_GL_CXXALIAS_RPL (roundf, float, (float x)); +# else +# if !1 +_GL_FUNCDECL_SYS (roundf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (roundf, float, (float x)); +# endif +_GL_CXXALIASWARN (roundf); +#elif defined GNULIB_POSIXCHECK +# undef roundf +# if HAVE_RAW_DECL_ROUNDF +_GL_WARN_ON_USE (roundf, "roundf is unportable - " + "use gnulib module roundf for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef round +# define round rpl_round +# endif +_GL_FUNCDECL_RPL (round, double, (double x)); +_GL_CXXALIAS_RPL (round, double, (double x)); +# else +# if !1 +_GL_FUNCDECL_SYS (round, double, (double x)); +# endif +_GL_CXXALIAS_SYS (round, double, (double x)); +# endif +_GL_CXXALIASWARN (round); +#elif defined GNULIB_POSIXCHECK +# undef round +# if HAVE_RAW_DECL_ROUND +_GL_WARN_ON_USE (round, "round is unportable - " + "use gnulib module round for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef roundl +# define roundl rpl_roundl +# endif +_GL_FUNCDECL_RPL (roundl, long double, (long double x)); +_GL_CXXALIAS_RPL (roundl, long double, (long double x)); +# else +# if !1 +# undef roundl +_GL_FUNCDECL_SYS (roundl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (roundl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (roundl); +#elif defined GNULIB_POSIXCHECK +# undef roundl +# if HAVE_RAW_DECL_ROUNDL +_GL_WARN_ON_USE (roundl, "roundl is unportable - " + "use gnulib module roundl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sinf +# define sinf rpl_sinf +# endif +_GL_FUNCDECL_RPL (sinf, float, (float x)); +_GL_CXXALIAS_RPL (sinf, float, (float x)); +# else +# if !1 + # undef sinf +_GL_FUNCDECL_SYS (sinf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (sinf, float, (float x)); +# endif +_GL_CXXALIASWARN (sinf); +#elif defined GNULIB_POSIXCHECK +# undef sinf +# if HAVE_RAW_DECL_SINF +_GL_WARN_ON_USE (sinf, "sinf is unportable - " + "use gnulib module sinf for portability"); +# endif +#endif + +#if 0 +# if !1 || !1 +# undef sinl +_GL_FUNCDECL_SYS (sinl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (sinl, long double, (long double x)); +_GL_CXXALIASWARN (sinl); +#elif defined GNULIB_POSIXCHECK +# undef sinl +# if HAVE_RAW_DECL_SINL +_GL_WARN_ON_USE (sinl, "sinl is unportable - " + "use gnulib module sinl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sinhf +# define sinhf rpl_sinhf +# endif +_GL_FUNCDECL_RPL (sinhf, float, (float x)); +_GL_CXXALIAS_RPL (sinhf, float, (float x)); +# else +# if !1 +# undef sinhf +_GL_FUNCDECL_SYS (sinhf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (sinhf, float, (float x)); +# endif +_GL_CXXALIASWARN (sinhf); +#elif defined GNULIB_POSIXCHECK +# undef sinhf +# if HAVE_RAW_DECL_SINHF +_GL_WARN_ON_USE (sinhf, "sinhf is unportable - " + "use gnulib module sinhf for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sqrtf +# define sqrtf rpl_sqrtf +# endif +_GL_FUNCDECL_RPL (sqrtf, float, (float x)); +_GL_CXXALIAS_RPL (sqrtf, float, (float x)); +# else +# if !1 +# undef sqrtf +_GL_FUNCDECL_SYS (sqrtf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (sqrtf, float, (float x)); +# endif +_GL_CXXALIASWARN (sqrtf); +#elif defined GNULIB_POSIXCHECK +# undef sqrtf +# if HAVE_RAW_DECL_SQRTF +_GL_WARN_ON_USE (sqrtf, "sqrtf is unportable - " + "use gnulib module sqrtf for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sqrtl +# define sqrtl rpl_sqrtl +# endif +_GL_FUNCDECL_RPL (sqrtl, long double, (long double x)); +_GL_CXXALIAS_RPL (sqrtl, long double, (long double x)); +# else +# if !1 || !1 +# undef sqrtl +_GL_FUNCDECL_SYS (sqrtl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (sqrtl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (sqrtl); +#elif defined GNULIB_POSIXCHECK +# undef sqrtl +# if HAVE_RAW_DECL_SQRTL +_GL_WARN_ON_USE (sqrtl, "sqrtl is unportable - " + "use gnulib module sqrtl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef tanf +# define tanf rpl_tanf +# endif +_GL_FUNCDECL_RPL (tanf, float, (float x)); +_GL_CXXALIAS_RPL (tanf, float, (float x)); +# else +# if !1 +# undef tanf +_GL_FUNCDECL_SYS (tanf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (tanf, float, (float x)); +# endif +_GL_CXXALIASWARN (tanf); +#elif defined GNULIB_POSIXCHECK +# undef tanf +# if HAVE_RAW_DECL_TANF +_GL_WARN_ON_USE (tanf, "tanf is unportable - " + "use gnulib module tanf for portability"); +# endif +#endif + +#if 0 +# if !1 || !1 +# undef tanl +_GL_FUNCDECL_SYS (tanl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (tanl, long double, (long double x)); +_GL_CXXALIASWARN (tanl); +#elif defined GNULIB_POSIXCHECK +# undef tanl +# if HAVE_RAW_DECL_TANL +_GL_WARN_ON_USE (tanl, "tanl is unportable - " + "use gnulib module tanl for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef tanhf +# define tanhf rpl_tanhf +# endif +_GL_FUNCDECL_RPL (tanhf, float, (float x)); +_GL_CXXALIAS_RPL (tanhf, float, (float x)); +# else +# if !1 +# undef tanhf +_GL_FUNCDECL_SYS (tanhf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (tanhf, float, (float x)); +# endif +_GL_CXXALIASWARN (tanhf); +#elif defined GNULIB_POSIXCHECK +# undef tanhf +# if HAVE_RAW_DECL_TANHF +_GL_WARN_ON_USE (tanhf, "tanhf is unportable - " + "use gnulib module tanhf for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef truncf +# define truncf rpl_truncf +# endif +_GL_FUNCDECL_RPL (truncf, float, (float x)); +_GL_CXXALIAS_RPL (truncf, float, (float x)); +# else +# if !1 +_GL_FUNCDECL_SYS (truncf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (truncf, float, (float x)); +# endif +_GL_CXXALIASWARN (truncf); +#elif defined GNULIB_POSIXCHECK +# undef truncf +# if HAVE_RAW_DECL_TRUNCF +_GL_WARN_ON_USE (truncf, "truncf is unportable - " + "use gnulib module truncf for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef trunc +# define trunc rpl_trunc +# endif +_GL_FUNCDECL_RPL (trunc, double, (double x)); +_GL_CXXALIAS_RPL (trunc, double, (double x)); +# else +# if !1 +_GL_FUNCDECL_SYS (trunc, double, (double x)); +# endif +_GL_CXXALIAS_SYS (trunc, double, (double x)); +# endif +_GL_CXXALIASWARN (trunc); +#elif defined GNULIB_POSIXCHECK +# undef trunc +# if HAVE_RAW_DECL_TRUNC +_GL_WARN_ON_USE (trunc, "trunc is unportable - " + "use gnulib module trunc for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef truncl +# define truncl rpl_truncl +# endif +_GL_FUNCDECL_RPL (truncl, long double, (long double x)); +_GL_CXXALIAS_RPL (truncl, long double, (long double x)); +# else +# if !1 +_GL_FUNCDECL_SYS (truncl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (truncl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (truncl); +#elif defined GNULIB_POSIXCHECK +# undef truncl +# if HAVE_RAW_DECL_TRUNCL +_GL_WARN_ON_USE (truncl, "truncl is unportable - " + "use gnulib module truncl for portability"); +# endif +#endif + + +/* Definitions of function-like macros come here, after the function + declarations. */ + + +#if 0 +# if 0 +_GL_EXTERN_C int gl_isfinitef (float x); +_GL_EXTERN_C int gl_isfinited (double x); +_GL_EXTERN_C int gl_isfinitel (long double x); +# undef isfinite +# define isfinite(x) \ + (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \ + sizeof (x) == sizeof (double) ? gl_isfinited (x) : \ + gl_isfinitef (x)) +# endif +# ifdef __cplusplus +# if defined isfinite || defined GNULIB_NAMESPACE +_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite) +# undef isfinite +_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite) +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# if defined isfinite +_GL_WARN_REAL_FLOATING_DECL (isfinite); +# undef isfinite +# define isfinite(x) _GL_WARN_REAL_FLOATING_IMPL (isfinite, x) +# endif +#endif + + +#if 0 +# if 0 +_GL_EXTERN_C int gl_isinff (float x); +_GL_EXTERN_C int gl_isinfd (double x); +_GL_EXTERN_C int gl_isinfl (long double x); +# undef isinf +# define isinf(x) \ + (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \ + sizeof (x) == sizeof (double) ? gl_isinfd (x) : \ + gl_isinff (x)) +# endif +# ifdef __cplusplus +# if defined isinf || defined GNULIB_NAMESPACE +_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf) +# undef isinf +_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf) +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# if defined isinf +_GL_WARN_REAL_FLOATING_DECL (isinf); +# undef isinf +# define isinf(x) _GL_WARN_REAL_FLOATING_IMPL (isinf, x) +# endif +#endif + + +#if 0 +/* Test for NaN for 'float' numbers. */ +# if 1 +/* The original <math.h> included above provides a declaration of isnan macro + or (older) isnanf function. */ +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnanf +# define isnanf(x) __builtin_isnanf ((float)(x)) +# elif defined isnan +# undef isnanf +# define isnanf(x) isnan ((float)(x)) +# endif +# else +/* Test whether X is a NaN. */ +# undef isnanf +# define isnanf rpl_isnanf +_GL_EXTERN_C int isnanf (float x); +# endif +#endif + +#if 0 +/* Test for NaN for 'double' numbers. + This function is a gnulib extension, unlike isnan() which applied only + to 'double' numbers earlier but now is a type-generic macro. */ +# if 1 +/* The original <math.h> included above provides a declaration of isnan + macro. */ +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnand +# define isnand(x) __builtin_isnan ((double)(x)) +# else +# undef isnand +# define isnand(x) isnan ((double)(x)) +# endif +# else +/* Test whether X is a NaN. */ +# undef isnand +# define isnand rpl_isnand +_GL_EXTERN_C int isnand (double x); +# endif +#endif + +#if 0 +/* Test for NaN for 'long double' numbers. */ +# if 1 +/* The original <math.h> included above provides a declaration of isnan + macro or (older) isnanl function. */ +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnanl +# define isnanl(x) __builtin_isnanl ((long double)(x)) +# elif defined isnan +# undef isnanl +# define isnanl(x) isnan ((long double)(x)) +# endif +# else +/* Test whether X is a NaN. */ +# undef isnanl +# define isnanl rpl_isnanl +_GL_EXTERN_C int isnanl (long double x) _GL_ATTRIBUTE_CONST; +# endif +#endif + +/* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL! */ +#if 0 +# if 0 +/* We can't just use the isnanf macro (e.g.) as exposed by + isnanf.h (e.g.) here, because those may end up being macros + that recursively expand back to isnan. So use the gnulib + replacements for them directly. */ +# if 1 && __GNUC__ >= 4 +# define gl_isnan_f(x) __builtin_isnanf ((float)(x)) +# else +_GL_EXTERN_C int rpl_isnanf (float x); +# define gl_isnan_f(x) rpl_isnanf (x) +# endif +# if 1 && __GNUC__ >= 4 +# define gl_isnan_d(x) __builtin_isnan ((double)(x)) +# else +_GL_EXTERN_C int rpl_isnand (double x); +# define gl_isnan_d(x) rpl_isnand (x) +# endif +# if 1 && __GNUC__ >= 4 +# define gl_isnan_l(x) __builtin_isnanl ((long double)(x)) +# else +_GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST; +# define gl_isnan_l(x) rpl_isnanl (x) +# endif +# undef isnan +# define isnan(x) \ + (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \ + sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \ + gl_isnan_f (x)) +# elif __GNUC__ >= 4 +# undef isnan +# define isnan(x) \ + (sizeof (x) == sizeof (long double) ? __builtin_isnanl ((long double)(x)) : \ + sizeof (x) == sizeof (double) ? __builtin_isnan ((double)(x)) : \ + __builtin_isnanf ((float)(x))) +# endif +# ifdef __cplusplus +# if defined isnan || defined GNULIB_NAMESPACE +_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan) +# undef isnan +_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan) +# endif +# else +/* Ensure isnan is a macro. */ +# ifndef isnan +# define isnan isnan +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# if defined isnan +_GL_WARN_REAL_FLOATING_DECL (isnan); +# undef isnan +# define isnan(x) _GL_WARN_REAL_FLOATING_IMPL (isnan, x) +# endif +#endif + + +#if 1 +# if (1 \ + && (!defined __cplusplus || __cplusplus < 201103)) +# undef signbit + /* GCC 4.0 and newer provides three built-ins for signbit. */ +# define signbit(x) \ + (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ + sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ + __builtin_signbitf (x)) +# endif +# if 0 +# undef signbit +_GL_EXTERN_C int gl_signbitf (float arg); +_GL_EXTERN_C int gl_signbitd (double arg); +_GL_EXTERN_C int gl_signbitl (long double arg); +# if __GNUC__ >= 2 && !defined __STRICT_ANSI__ +# define _GL_NUM_UINT_WORDS(type) \ + ((sizeof (type) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +# if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf +# define gl_signbitf_OPTIMIZED_MACRO +# define gl_signbitf(arg) \ + ({ union { float _value; \ + unsigned int _word[_GL_NUM_UINT_WORDS (float)]; \ + } _m; \ + _m._value = (arg); \ + (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; \ + }) +# endif +# if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd +# define gl_signbitd_OPTIMIZED_MACRO +# define gl_signbitd(arg) \ + ({ union { double _value; \ + unsigned int _word[_GL_NUM_UINT_WORDS (double)]; \ + } _m; \ + _m._value = (arg); \ + (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; \ + }) +# endif +# if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl +# define gl_signbitl_OPTIMIZED_MACRO +# define gl_signbitl(arg) \ + ({ union { long double _value; \ + unsigned int _word[_GL_NUM_UINT_WORDS (long double)]; \ + } _m; \ + _m._value = (arg); \ + (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; \ + }) +# endif +# endif +# define signbit(x) \ + (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \ + sizeof (x) == sizeof (double) ? gl_signbitd (x) : \ + gl_signbitf (x)) +# endif +# ifdef __cplusplus +# if defined signbit || defined GNULIB_NAMESPACE +_GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit) +# undef signbit +_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit) +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# if defined signbit +_GL_WARN_REAL_FLOATING_DECL (signbit); +# undef signbit +# define signbit(x) _GL_WARN_REAL_FLOATING_IMPL (signbit, x) +# endif +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_MATH_H */ +#endif /* _GL_MATH_H */ diff --git a/devspec.en_US/project/recutils/lib/math.in.h b/devspec.en_US/project/recutils/lib/math.in.h new file mode 100755 index 0000000..d395552 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/math.in.h @@ -0,0 +1,2417 @@ +/* A GNU-like <math.h>. + + Copyright (C) 2002-2003, 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _@GUARD_PREFIX@_MATH_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ + +#ifndef _@GUARD_PREFIX@_MATH_H +#define _@GUARD_PREFIX@_MATH_H + +/* On OpenVMS, NAN, INFINITY, and HUGEVAL macros are defined in <fp.h>. */ +#if defined __VMS && ! defined NAN +# include <fp.h> +#endif + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_MATH_INLINE +# define _GL_MATH_INLINE _GL_INLINE +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +#ifdef __cplusplus +/* Helper macros to define type-generic function FUNC as overloaded functions, + rather than as macros like in C. POSIX declares these with an argument of + real-floating (that is, one of float, double, or long double). */ +# define _GL_MATH_CXX_REAL_FLOATING_DECL_1(func) \ +static inline int \ +_gl_cxx_ ## func ## f (float f) \ +{ \ + return func (f); \ +} \ +static inline int \ +_gl_cxx_ ## func ## d (double d) \ +{ \ + return func (d); \ +} \ +static inline int \ +_gl_cxx_ ## func ## l (long double l) \ +{ \ + return func (l); \ +} +# define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func) \ +_GL_BEGIN_NAMESPACE \ +inline int \ +func (float f) \ +{ \ + return _gl_cxx_ ## func ## f (f); \ +} \ +inline int \ +func (double d) \ +{ \ + return _gl_cxx_ ## func ## d (d); \ +} \ +inline int \ +func (long double l) \ +{ \ + return _gl_cxx_ ## func ## l (l); \ +} \ +_GL_END_NAMESPACE +#endif + +/* Helper macros to define a portability warning for the + classification macro FUNC called with VALUE. POSIX declares the + classification macros with an argument of real-floating (that is, + one of float, double, or long double). */ +#define _GL_WARN_REAL_FLOATING_DECL(func) \ +_GL_MATH_INLINE int \ +_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ + "use gnulib module " #func " for portability") \ +rpl_ ## func ## f (float f) \ +{ \ + return func (f); \ +} \ +_GL_MATH_INLINE int \ +_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ + "use gnulib module " #func " for portability") \ +rpl_ ## func ## d (double d) \ +{ \ + return func (d); \ +} \ +_GL_MATH_INLINE int \ +_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ + "use gnulib module " #func " for portability") \ +rpl_ ## func ## l (long double l) \ +{ \ + return func (l); \ +} +#define _GL_WARN_REAL_FLOATING_IMPL(func, value) \ + (sizeof (value) == sizeof (float) ? rpl_ ## func ## f (value) \ + : sizeof (value) == sizeof (double) ? rpl_ ## func ## d (value) \ + : rpl_ ## func ## l (value)) + + +#if @REPLACE_ITOLD@ +/* Pull in a function that fixes the 'int' to 'long double' conversion + of glibc 2.7. */ +_GL_EXTERN_C void _Qp_itoq (long double *, int); +static void (*_gl_math_fix_itold) (long double *, int) = _Qp_itoq; +#endif + + +/* POSIX allows platforms that don't support NAN. But all major + machines in the past 15 years have supported something close to + IEEE NaN, so we define this unconditionally. We also must define + it on platforms like Solaris 10, where NAN is present but defined + as a function pointer rather than a floating point constant. */ +#if !defined NAN || @REPLACE_NAN@ +# if !GNULIB_defined_NAN +# undef NAN + /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler + choke on the expression 0.0 / 0.0. */ +# if defined __DECC || defined _MSC_VER +_GL_MATH_INLINE float +_NaN () +{ + static float zero = 0.0f; + return zero / zero; +} +# define NAN (_NaN()) +# else +# define NAN (0.0f / 0.0f) +# endif +# define GNULIB_defined_NAN 1 +# endif +#endif + +/* Solaris 10 defines HUGE_VAL, but as a function pointer rather + than a floating point constant. */ +#if @REPLACE_HUGE_VAL@ +# undef HUGE_VALF +# define HUGE_VALF (1.0f / 0.0f) +# undef HUGE_VAL +# define HUGE_VAL (1.0 / 0.0) +# undef HUGE_VALL +# define HUGE_VALL (1.0L / 0.0L) +#endif + +/* HUGE_VALF is a 'float' Infinity. */ +#ifndef HUGE_VALF +# if defined _MSC_VER +/* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f. */ +# define HUGE_VALF (1e25f * 1e25f) +# else +# define HUGE_VALF (1.0f / 0.0f) +# endif +#endif + +/* HUGE_VAL is a 'double' Infinity. */ +#ifndef HUGE_VAL +# if defined _MSC_VER +/* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0. */ +# define HUGE_VAL (1e250 * 1e250) +# else +# define HUGE_VAL (1.0 / 0.0) +# endif +#endif + +/* HUGE_VALL is a 'long double' Infinity. */ +#ifndef HUGE_VALL +# if defined _MSC_VER +/* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L. */ +# define HUGE_VALL (1e250L * 1e250L) +# else +# define HUGE_VALL (1.0L / 0.0L) +# endif +#endif + + +#if defined FP_ILOGB0 && defined FP_ILOGBNAN + /* Ensure FP_ILOGB0 and FP_ILOGBNAN are correct. */ +# if defined __HAIKU__ + /* Haiku: match what ilogb() does */ +# undef FP_ILOGB0 +# undef FP_ILOGBNAN +# define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ +# define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ +# endif +#else + /* Ensure FP_ILOGB0 and FP_ILOGBNAN are defined. */ +# if defined __NetBSD__ || defined __sgi + /* NetBSD, IRIX 6.5: match what ilogb() does */ +# define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ +# define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ +# elif defined _AIX + /* AIX 5.1: match what ilogb() does in AIX >= 5.2 */ +# define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ +# define FP_ILOGBNAN 2147483647 /* INT_MAX */ +# elif defined __sun + /* Solaris 9: match what ilogb() does */ +# define FP_ILOGB0 (- 2147483647) /* - INT_MAX */ +# define FP_ILOGBNAN 2147483647 /* INT_MAX */ +# else + /* Gnulib defined values. */ +# define FP_ILOGB0 (- 2147483647) /* - INT_MAX */ +# define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ +# endif +#endif + + +#if @GNULIB_ACOSF@ +# if @REPLACE_ACOSF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef acosf +# define acosf rpl_acosf +# endif +_GL_FUNCDECL_RPL (acosf, float, (float x)); +_GL_CXXALIAS_RPL (acosf, float, (float x)); +# else +# if !@HAVE_ACOSF@ +# undef acosf +_GL_FUNCDECL_SYS (acosf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (acosf, float, (float x)); +# endif +_GL_CXXALIASWARN (acosf); +#elif defined GNULIB_POSIXCHECK +# undef acosf +# if HAVE_RAW_DECL_ACOSF +_GL_WARN_ON_USE (acosf, "acosf is unportable - " + "use gnulib module acosf for portability"); +# endif +#endif + +#if @GNULIB_ACOSL@ +# if !@HAVE_ACOSL@ || !@HAVE_DECL_ACOSL@ +# undef acosl +_GL_FUNCDECL_SYS (acosl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (acosl, long double, (long double x)); +_GL_CXXALIASWARN (acosl); +#elif defined GNULIB_POSIXCHECK +# undef acosl +# if HAVE_RAW_DECL_ACOSL +_GL_WARN_ON_USE (acosl, "acosl is unportable - " + "use gnulib module acosl for portability"); +# endif +#endif + + +#if @GNULIB_ASINF@ +# if @REPLACE_ASINF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef asinf +# define asinf rpl_asinf +# endif +_GL_FUNCDECL_RPL (asinf, float, (float x)); +_GL_CXXALIAS_RPL (asinf, float, (float x)); +# else +# if !@HAVE_ASINF@ +# undef asinf +_GL_FUNCDECL_SYS (asinf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (asinf, float, (float x)); +# endif +_GL_CXXALIASWARN (asinf); +#elif defined GNULIB_POSIXCHECK +# undef asinf +# if HAVE_RAW_DECL_ASINF +_GL_WARN_ON_USE (asinf, "asinf is unportable - " + "use gnulib module asinf for portability"); +# endif +#endif + +#if @GNULIB_ASINL@ +# if !@HAVE_ASINL@ || !@HAVE_DECL_ASINL@ +# undef asinl +_GL_FUNCDECL_SYS (asinl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (asinl, long double, (long double x)); +_GL_CXXALIASWARN (asinl); +#elif defined GNULIB_POSIXCHECK +# undef asinl +# if HAVE_RAW_DECL_ASINL +_GL_WARN_ON_USE (asinl, "asinl is unportable - " + "use gnulib module asinl for portability"); +# endif +#endif + + +#if @GNULIB_ATANF@ +# if @REPLACE_ATANF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef atanf +# define atanf rpl_atanf +# endif +_GL_FUNCDECL_RPL (atanf, float, (float x)); +_GL_CXXALIAS_RPL (atanf, float, (float x)); +# else +# if !@HAVE_ATANF@ +# undef atanf +_GL_FUNCDECL_SYS (atanf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (atanf, float, (float x)); +# endif +_GL_CXXALIASWARN (atanf); +#elif defined GNULIB_POSIXCHECK +# undef atanf +# if HAVE_RAW_DECL_ATANF +_GL_WARN_ON_USE (atanf, "atanf is unportable - " + "use gnulib module atanf for portability"); +# endif +#endif + +#if @GNULIB_ATANL@ +# if !@HAVE_ATANL@ || !@HAVE_DECL_ATANL@ +# undef atanl +_GL_FUNCDECL_SYS (atanl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (atanl, long double, (long double x)); +_GL_CXXALIASWARN (atanl); +#elif defined GNULIB_POSIXCHECK +# undef atanl +# if HAVE_RAW_DECL_ATANL +_GL_WARN_ON_USE (atanl, "atanl is unportable - " + "use gnulib module atanl for portability"); +# endif +#endif + + +#if @GNULIB_ATAN2F@ +# if @REPLACE_ATAN2F@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef atan2f +# define atan2f rpl_atan2f +# endif +_GL_FUNCDECL_RPL (atan2f, float, (float y, float x)); +_GL_CXXALIAS_RPL (atan2f, float, (float y, float x)); +# else +# if !@HAVE_ATAN2F@ +# undef atan2f +_GL_FUNCDECL_SYS (atan2f, float, (float y, float x)); +# endif +_GL_CXXALIAS_SYS (atan2f, float, (float y, float x)); +# endif +_GL_CXXALIASWARN (atan2f); +#elif defined GNULIB_POSIXCHECK +# undef atan2f +# if HAVE_RAW_DECL_ATAN2F +_GL_WARN_ON_USE (atan2f, "atan2f is unportable - " + "use gnulib module atan2f for portability"); +# endif +#endif + + +#if @GNULIB_CBRTF@ +# if @REPLACE_CBRTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef cbrtf +# define cbrtf rpl_cbrtf +# endif +_GL_FUNCDECL_RPL (cbrtf, float, (float x)); +_GL_CXXALIAS_RPL (cbrtf, float, (float x)); +# else +# if !@HAVE_DECL_CBRTF@ +_GL_FUNCDECL_SYS (cbrtf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (cbrtf, float, (float x)); +# endif +_GL_CXXALIASWARN (cbrtf); +#elif defined GNULIB_POSIXCHECK +# undef cbrtf +# if HAVE_RAW_DECL_CBRTF +_GL_WARN_ON_USE (cbrtf, "cbrtf is unportable - " + "use gnulib module cbrtf for portability"); +# endif +#endif + +#if @GNULIB_CBRT@ +# if !@HAVE_CBRT@ +_GL_FUNCDECL_SYS (cbrt, double, (double x)); +# endif +_GL_CXXALIAS_SYS (cbrt, double, (double x)); +_GL_CXXALIASWARN (cbrt); +#elif defined GNULIB_POSIXCHECK +# undef cbrt +# if HAVE_RAW_DECL_CBRT +_GL_WARN_ON_USE (cbrt, "cbrt is unportable - " + "use gnulib module cbrt for portability"); +# endif +#endif + +#if @GNULIB_CBRTL@ +# if @REPLACE_CBRTL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef cbrtl +# define cbrtl rpl_cbrtl +# endif +_GL_FUNCDECL_RPL (cbrtl, long double, (long double x)); +_GL_CXXALIAS_RPL (cbrtl, long double, (long double x)); +# else +# if !@HAVE_DECL_CBRTL@ +_GL_FUNCDECL_SYS (cbrtl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (cbrtl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (cbrtl); +#elif defined GNULIB_POSIXCHECK +# undef cbrtl +# if HAVE_RAW_DECL_CBRTL +_GL_WARN_ON_USE (cbrtl, "cbrtl is unportable - " + "use gnulib module cbrtl for portability"); +# endif +#endif + + +#if @GNULIB_CEILF@ +# if @REPLACE_CEILF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ceilf +# define ceilf rpl_ceilf +# endif +_GL_FUNCDECL_RPL (ceilf, float, (float x)); +_GL_CXXALIAS_RPL (ceilf, float, (float x)); +# else +# if !@HAVE_DECL_CEILF@ +# undef ceilf +_GL_FUNCDECL_SYS (ceilf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (ceilf, float, (float x)); +# endif +_GL_CXXALIASWARN (ceilf); +#elif defined GNULIB_POSIXCHECK +# undef ceilf +# if HAVE_RAW_DECL_CEILF +_GL_WARN_ON_USE (ceilf, "ceilf is unportable - " + "use gnulib module ceilf for portability"); +# endif +#endif + +#if @GNULIB_CEIL@ +# if @REPLACE_CEIL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ceil +# define ceil rpl_ceil +# endif +_GL_FUNCDECL_RPL (ceil, double, (double x)); +_GL_CXXALIAS_RPL (ceil, double, (double x)); +# else +_GL_CXXALIAS_SYS (ceil, double, (double x)); +# endif +_GL_CXXALIASWARN (ceil); +#endif + +#if @GNULIB_CEILL@ +# if @REPLACE_CEILL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ceill +# define ceill rpl_ceill +# endif +_GL_FUNCDECL_RPL (ceill, long double, (long double x)); +_GL_CXXALIAS_RPL (ceill, long double, (long double x)); +# else +# if !@HAVE_DECL_CEILL@ +# undef ceill +_GL_FUNCDECL_SYS (ceill, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (ceill, long double, (long double x)); +# endif +_GL_CXXALIASWARN (ceill); +#elif defined GNULIB_POSIXCHECK +# undef ceill +# if HAVE_RAW_DECL_CEILL +_GL_WARN_ON_USE (ceill, "ceill is unportable - " + "use gnulib module ceill for portability"); +# endif +#endif + + +#if @GNULIB_COPYSIGNF@ +# if !@HAVE_DECL_COPYSIGNF@ +_GL_FUNCDECL_SYS (copysignf, float, (float x, float y)); +# endif +_GL_CXXALIAS_SYS (copysignf, float, (float x, float y)); +_GL_CXXALIASWARN (copysignf); +#elif defined GNULIB_POSIXCHECK +# undef copysignf +# if HAVE_RAW_DECL_COPYSIGNF +_GL_WARN_ON_USE (copysignf, "copysignf is unportable - " + "use gnulib module copysignf for portability"); +# endif +#endif + +#if @GNULIB_COPYSIGN@ +# if !@HAVE_COPYSIGN@ +_GL_FUNCDECL_SYS (copysign, double, (double x, double y)); +# endif +_GL_CXXALIAS_SYS (copysign, double, (double x, double y)); +_GL_CXXALIASWARN (copysign); +#elif defined GNULIB_POSIXCHECK +# undef copysign +# if HAVE_RAW_DECL_COPYSIGN +_GL_WARN_ON_USE (copysign, "copysign is unportable - " + "use gnulib module copysign for portability"); +# endif +#endif + +#if @GNULIB_COPYSIGNL@ +# if !@HAVE_COPYSIGNL@ +_GL_FUNCDECL_SYS (copysignl, long double, (long double x, long double y)); +# endif +_GL_CXXALIAS_SYS (copysignl, long double, (long double x, long double y)); +_GL_CXXALIASWARN (copysignl); +#elif defined GNULIB_POSIXCHECK +# undef copysignl +# if HAVE_RAW_DECL_COPYSIGNL +_GL_WARN_ON_USE (copysign, "copysignl is unportable - " + "use gnulib module copysignl for portability"); +# endif +#endif + + +#if @GNULIB_COSF@ +# if @REPLACE_COSF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef cosf +# define cosf rpl_cosf +# endif +_GL_FUNCDECL_RPL (cosf, float, (float x)); +_GL_CXXALIAS_RPL (cosf, float, (float x)); +# else +# if !@HAVE_COSF@ +# undef cosf +_GL_FUNCDECL_SYS (cosf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (cosf, float, (float x)); +# endif +_GL_CXXALIASWARN (cosf); +#elif defined GNULIB_POSIXCHECK +# undef cosf +# if HAVE_RAW_DECL_COSF +_GL_WARN_ON_USE (cosf, "cosf is unportable - " + "use gnulib module cosf for portability"); +# endif +#endif + +#if @GNULIB_COSL@ +# if !@HAVE_COSL@ || !@HAVE_DECL_COSL@ +# undef cosl +_GL_FUNCDECL_SYS (cosl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (cosl, long double, (long double x)); +_GL_CXXALIASWARN (cosl); +#elif defined GNULIB_POSIXCHECK +# undef cosl +# if HAVE_RAW_DECL_COSL +_GL_WARN_ON_USE (cosl, "cosl is unportable - " + "use gnulib module cosl for portability"); +# endif +#endif + + +#if @GNULIB_COSHF@ +# if @REPLACE_COSHF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef coshf +# define coshf rpl_coshf +# endif +_GL_FUNCDECL_RPL (coshf, float, (float x)); +_GL_CXXALIAS_RPL (coshf, float, (float x)); +# else +# if !@HAVE_COSHF@ +# undef coshf +_GL_FUNCDECL_SYS (coshf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (coshf, float, (float x)); +# endif +_GL_CXXALIASWARN (coshf); +#elif defined GNULIB_POSIXCHECK +# undef coshf +# if HAVE_RAW_DECL_COSHF +_GL_WARN_ON_USE (coshf, "coshf is unportable - " + "use gnulib module coshf for portability"); +# endif +#endif + + +#if @GNULIB_EXPF@ +# if @REPLACE_EXPF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef expf +# define expf rpl_expf +# endif +_GL_FUNCDECL_RPL (expf, float, (float x)); +_GL_CXXALIAS_RPL (expf, float, (float x)); +# else +# if !@HAVE_EXPF@ +# undef expf +_GL_FUNCDECL_SYS (expf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (expf, float, (float x)); +# endif +_GL_CXXALIASWARN (expf); +#elif defined GNULIB_POSIXCHECK +# undef expf +# if HAVE_RAW_DECL_EXPF +_GL_WARN_ON_USE (expf, "expf is unportable - " + "use gnulib module expf for portability"); +# endif +#endif + +#if @GNULIB_EXPL@ +# if !@HAVE_EXPL@ || !@HAVE_DECL_EXPL@ +# undef expl +_GL_FUNCDECL_SYS (expl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (expl, long double, (long double x)); +_GL_CXXALIASWARN (expl); +#elif defined GNULIB_POSIXCHECK +# undef expl +# if HAVE_RAW_DECL_EXPL +_GL_WARN_ON_USE (expl, "expl is unportable - " + "use gnulib module expl for portability"); +# endif +#endif + + +#if @GNULIB_EXP2F@ +# if !@HAVE_DECL_EXP2F@ +_GL_FUNCDECL_SYS (exp2f, float, (float x)); +# endif +_GL_CXXALIAS_SYS (exp2f, float, (float x)); +_GL_CXXALIASWARN (exp2f); +#elif defined GNULIB_POSIXCHECK +# undef exp2f +# if HAVE_RAW_DECL_EXP2F +_GL_WARN_ON_USE (exp2f, "exp2f is unportable - " + "use gnulib module exp2f for portability"); +# endif +#endif + +#if @GNULIB_EXP2@ +# if @REPLACE_EXP2@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef exp2 +# define exp2 rpl_exp2 +# endif +_GL_FUNCDECL_RPL (exp2, double, (double x)); +_GL_CXXALIAS_RPL (exp2, double, (double x)); +# else +# if !@HAVE_DECL_EXP2@ +_GL_FUNCDECL_SYS (exp2, double, (double x)); +# endif +_GL_CXXALIAS_SYS (exp2, double, (double x)); +# endif +_GL_CXXALIASWARN (exp2); +#elif defined GNULIB_POSIXCHECK +# undef exp2 +# if HAVE_RAW_DECL_EXP2 +_GL_WARN_ON_USE (exp2, "exp2 is unportable - " + "use gnulib module exp2 for portability"); +# endif +#endif + +#if @GNULIB_EXP2L@ +# if @REPLACE_EXP2L@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef exp2l +# define exp2l rpl_exp2l +# endif +_GL_FUNCDECL_RPL (exp2l, long double, (long double x)); +_GL_CXXALIAS_RPL (exp2l, long double, (long double x)); +# else +# if !@HAVE_DECL_EXP2L@ +# undef exp2l +_GL_FUNCDECL_SYS (exp2l, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (exp2l, long double, (long double x)); +# endif +_GL_CXXALIASWARN (exp2l); +#elif defined GNULIB_POSIXCHECK +# undef exp2l +# if HAVE_RAW_DECL_EXP2L +_GL_WARN_ON_USE (exp2l, "exp2l is unportable - " + "use gnulib module exp2l for portability"); +# endif +#endif + + +#if @GNULIB_EXPM1F@ +# if @REPLACE_EXPM1F@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef expm1f +# define expm1f rpl_expm1f +# endif +_GL_FUNCDECL_RPL (expm1f, float, (float x)); +_GL_CXXALIAS_RPL (expm1f, float, (float x)); +# else +# if !@HAVE_EXPM1F@ +_GL_FUNCDECL_SYS (expm1f, float, (float x)); +# endif +_GL_CXXALIAS_SYS (expm1f, float, (float x)); +# endif +_GL_CXXALIASWARN (expm1f); +#elif defined GNULIB_POSIXCHECK +# undef expm1f +# if HAVE_RAW_DECL_EXPM1F +_GL_WARN_ON_USE (expm1f, "expm1f is unportable - " + "use gnulib module expm1f for portability"); +# endif +#endif + +#if @GNULIB_EXPM1@ +# if @REPLACE_EXPM1@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef expm1 +# define expm1 rpl_expm1 +# endif +_GL_FUNCDECL_RPL (expm1, double, (double x)); +_GL_CXXALIAS_RPL (expm1, double, (double x)); +# else +# if !@HAVE_EXPM1@ +_GL_FUNCDECL_SYS (expm1, double, (double x)); +# endif +_GL_CXXALIAS_SYS (expm1, double, (double x)); +# endif +_GL_CXXALIASWARN (expm1); +#elif defined GNULIB_POSIXCHECK +# undef expm1 +# if HAVE_RAW_DECL_EXPM1 +_GL_WARN_ON_USE (expm1, "expm1 is unportable - " + "use gnulib module expm1 for portability"); +# endif +#endif + +#if @GNULIB_EXPM1L@ +# if !@HAVE_DECL_EXPM1L@ +# undef expm1l +_GL_FUNCDECL_SYS (expm1l, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (expm1l, long double, (long double x)); +_GL_CXXALIASWARN (expm1l); +#elif defined GNULIB_POSIXCHECK +# undef expm1l +# if HAVE_RAW_DECL_EXPM1L +_GL_WARN_ON_USE (expm1l, "expm1l is unportable - " + "use gnulib module expm1l for portability"); +# endif +#endif + + +#if @GNULIB_FABSF@ +# if !@HAVE_FABSF@ +# undef fabsf +_GL_FUNCDECL_SYS (fabsf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (fabsf, float, (float x)); +_GL_CXXALIASWARN (fabsf); +#elif defined GNULIB_POSIXCHECK +# undef fabsf +# if HAVE_RAW_DECL_FABSF +_GL_WARN_ON_USE (fabsf, "fabsf is unportable - " + "use gnulib module fabsf for portability"); +# endif +#endif + +#if @GNULIB_FABSL@ +# if @REPLACE_FABSL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fabsl +# define fabsl rpl_fabsl +# endif +_GL_FUNCDECL_RPL (fabsl, long double, (long double x)); +_GL_CXXALIAS_RPL (fabsl, long double, (long double x)); +# else +# if !@HAVE_FABSL@ +# undef fabsl +_GL_FUNCDECL_SYS (fabsl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (fabsl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (fabsl); +#elif defined GNULIB_POSIXCHECK +# undef fabsl +# if HAVE_RAW_DECL_FABSL +_GL_WARN_ON_USE (fabsl, "fabsl is unportable - " + "use gnulib module fabsl for portability"); +# endif +#endif + + +#if @GNULIB_FLOORF@ +# if @REPLACE_FLOORF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef floorf +# define floorf rpl_floorf +# endif +_GL_FUNCDECL_RPL (floorf, float, (float x)); +_GL_CXXALIAS_RPL (floorf, float, (float x)); +# else +# if !@HAVE_DECL_FLOORF@ +# undef floorf +_GL_FUNCDECL_SYS (floorf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (floorf, float, (float x)); +# endif +_GL_CXXALIASWARN (floorf); +#elif defined GNULIB_POSIXCHECK +# undef floorf +# if HAVE_RAW_DECL_FLOORF +_GL_WARN_ON_USE (floorf, "floorf is unportable - " + "use gnulib module floorf for portability"); +# endif +#endif + +#if @GNULIB_FLOOR@ +# if @REPLACE_FLOOR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef floor +# define floor rpl_floor +# endif +_GL_FUNCDECL_RPL (floor, double, (double x)); +_GL_CXXALIAS_RPL (floor, double, (double x)); +# else +_GL_CXXALIAS_SYS (floor, double, (double x)); +# endif +_GL_CXXALIASWARN (floor); +#endif + +#if @GNULIB_FLOORL@ +# if @REPLACE_FLOORL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef floorl +# define floorl rpl_floorl +# endif +_GL_FUNCDECL_RPL (floorl, long double, (long double x)); +_GL_CXXALIAS_RPL (floorl, long double, (long double x)); +# else +# if !@HAVE_DECL_FLOORL@ +# undef floorl +_GL_FUNCDECL_SYS (floorl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (floorl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (floorl); +#elif defined GNULIB_POSIXCHECK +# undef floorl +# if HAVE_RAW_DECL_FLOORL +_GL_WARN_ON_USE (floorl, "floorl is unportable - " + "use gnulib module floorl for portability"); +# endif +#endif + + +#if @GNULIB_FMAF@ +# if @REPLACE_FMAF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fmaf +# define fmaf rpl_fmaf +# endif +_GL_FUNCDECL_RPL (fmaf, float, (float x, float y, float z)); +_GL_CXXALIAS_RPL (fmaf, float, (float x, float y, float z)); +# else +# if !@HAVE_FMAF@ +_GL_FUNCDECL_SYS (fmaf, float, (float x, float y, float z)); +# endif +_GL_CXXALIAS_SYS (fmaf, float, (float x, float y, float z)); +# endif +_GL_CXXALIASWARN (fmaf); +#elif defined GNULIB_POSIXCHECK +# undef fmaf +# if HAVE_RAW_DECL_FMAF +_GL_WARN_ON_USE (fmaf, "fmaf is unportable - " + "use gnulib module fmaf for portability"); +# endif +#endif + +#if @GNULIB_FMA@ +# if @REPLACE_FMA@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fma +# define fma rpl_fma +# endif +_GL_FUNCDECL_RPL (fma, double, (double x, double y, double z)); +_GL_CXXALIAS_RPL (fma, double, (double x, double y, double z)); +# else +# if !@HAVE_FMA@ +_GL_FUNCDECL_SYS (fma, double, (double x, double y, double z)); +# endif +_GL_CXXALIAS_SYS (fma, double, (double x, double y, double z)); +# endif +_GL_CXXALIASWARN (fma); +#elif defined GNULIB_POSIXCHECK +# undef fma +# if HAVE_RAW_DECL_FMA +_GL_WARN_ON_USE (fma, "fma is unportable - " + "use gnulib module fma for portability"); +# endif +#endif + +#if @GNULIB_FMAL@ +# if @REPLACE_FMAL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fmal +# define fmal rpl_fmal +# endif +_GL_FUNCDECL_RPL (fmal, long double, + (long double x, long double y, long double z)); +_GL_CXXALIAS_RPL (fmal, long double, + (long double x, long double y, long double z)); +# else +# if !@HAVE_FMAL@ +# undef fmal +_GL_FUNCDECL_SYS (fmal, long double, + (long double x, long double y, long double z)); +# endif +_GL_CXXALIAS_SYS (fmal, long double, + (long double x, long double y, long double z)); +# endif +_GL_CXXALIASWARN (fmal); +#elif defined GNULIB_POSIXCHECK +# undef fmal +# if HAVE_RAW_DECL_FMAL +_GL_WARN_ON_USE (fmal, "fmal is unportable - " + "use gnulib module fmal for portability"); +# endif +#endif + + +#if @GNULIB_FMODF@ +# if @REPLACE_FMODF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fmodf +# define fmodf rpl_fmodf +# endif +_GL_FUNCDECL_RPL (fmodf, float, (float x, float y)); +_GL_CXXALIAS_RPL (fmodf, float, (float x, float y)); +# else +# if !@HAVE_FMODF@ +# undef fmodf +_GL_FUNCDECL_SYS (fmodf, float, (float x, float y)); +# endif +_GL_CXXALIAS_SYS (fmodf, float, (float x, float y)); +# endif +_GL_CXXALIASWARN (fmodf); +#elif defined GNULIB_POSIXCHECK +# undef fmodf +# if HAVE_RAW_DECL_FMODF +_GL_WARN_ON_USE (fmodf, "fmodf is unportable - " + "use gnulib module fmodf for portability"); +# endif +#endif + +#if @GNULIB_FMOD@ +# if @REPLACE_FMOD@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fmod +# define fmod rpl_fmod +# endif +_GL_FUNCDECL_RPL (fmod, double, (double x, double y)); +_GL_CXXALIAS_RPL (fmod, double, (double x, double y)); +# else +_GL_CXXALIAS_SYS (fmod, double, (double x, double y)); +# endif +_GL_CXXALIASWARN (fmod); +#elif defined GNULIB_POSIXCHECK +# undef fmod +# if HAVE_RAW_DECL_FMOD +_GL_WARN_ON_USE (fmod, "fmod has portability problems - " + "use gnulib module fmod for portability"); +# endif +#endif + +#if @GNULIB_FMODL@ +# if @REPLACE_FMODL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fmodl +# define fmodl rpl_fmodl +# endif +_GL_FUNCDECL_RPL (fmodl, long double, (long double x, long double y)); +_GL_CXXALIAS_RPL (fmodl, long double, (long double x, long double y)); +# else +# if !@HAVE_FMODL@ +# undef fmodl +_GL_FUNCDECL_SYS (fmodl, long double, (long double x, long double y)); +# endif +_GL_CXXALIAS_SYS (fmodl, long double, (long double x, long double y)); +# endif +_GL_CXXALIASWARN (fmodl); +#elif defined GNULIB_POSIXCHECK +# undef fmodl +# if HAVE_RAW_DECL_FMODL +_GL_WARN_ON_USE (fmodl, "fmodl is unportable - " + "use gnulib module fmodl for portability"); +# endif +#endif + + +/* Write x as + x = mantissa * 2^exp + where + If x finite and nonzero: 0.5 <= |mantissa| < 1.0. + If x is zero: mantissa = x, exp = 0. + If x is infinite or NaN: mantissa = x, exp unspecified. + Store exp in *EXPPTR and return mantissa. */ +#if @GNULIB_FREXPF@ +# if @REPLACE_FREXPF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef frexpf +# define frexpf rpl_frexpf +# endif +_GL_FUNCDECL_RPL (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (frexpf, float, (float x, int *expptr)); +# else +# if !@HAVE_FREXPF@ +# undef frexpf +_GL_FUNCDECL_SYS (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (frexpf, float, (float x, int *expptr)); +# endif +_GL_CXXALIASWARN (frexpf); +#elif defined GNULIB_POSIXCHECK +# undef frexpf +# if HAVE_RAW_DECL_FREXPF +_GL_WARN_ON_USE (frexpf, "frexpf is unportable - " + "use gnulib module frexpf for portability"); +# endif +#endif + +/* Write x as + x = mantissa * 2^exp + where + If x finite and nonzero: 0.5 <= |mantissa| < 1.0. + If x is zero: mantissa = x, exp = 0. + If x is infinite or NaN: mantissa = x, exp unspecified. + Store exp in *EXPPTR and return mantissa. */ +#if @GNULIB_FREXP@ +# if @REPLACE_FREXP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef frexp +# define frexp rpl_frexp +# endif +_GL_FUNCDECL_RPL (frexp, double, (double x, int *expptr) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (frexp, double, (double x, int *expptr)); +# else +_GL_CXXALIAS_SYS (frexp, double, (double x, int *expptr)); +# endif +_GL_CXXALIASWARN1 (frexp, double, (double x, int *expptr)); +#elif defined GNULIB_POSIXCHECK +# undef frexp +/* Assume frexp is always declared. */ +_GL_WARN_ON_USE (frexp, "frexp is unportable - " + "use gnulib module frexp for portability"); +#endif + +/* Write x as + x = mantissa * 2^exp + where + If x finite and nonzero: 0.5 <= |mantissa| < 1.0. + If x is zero: mantissa = x, exp = 0. + If x is infinite or NaN: mantissa = x, exp unspecified. + Store exp in *EXPPTR and return mantissa. */ +#if @GNULIB_FREXPL@ && @REPLACE_FREXPL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef frexpl +# define frexpl rpl_frexpl +# endif +_GL_FUNCDECL_RPL (frexpl, long double, + (long double x, int *expptr) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (frexpl, long double, (long double x, int *expptr)); +#else +# if !@HAVE_DECL_FREXPL@ +_GL_FUNCDECL_SYS (frexpl, long double, + (long double x, int *expptr) _GL_ARG_NONNULL ((2))); +# endif +# if @GNULIB_FREXPL@ +_GL_CXXALIAS_SYS (frexpl, long double, (long double x, int *expptr)); +# endif +#endif +#if @GNULIB_FREXPL@ && !(@REPLACE_FREXPL@ && !@HAVE_DECL_FREXPL@) +_GL_CXXALIASWARN (frexpl); +#endif +#if !@GNULIB_FREXPL@ && defined GNULIB_POSIXCHECK +# undef frexpl +# if HAVE_RAW_DECL_FREXPL +_GL_WARN_ON_USE (frexpl, "frexpl is unportable - " + "use gnulib module frexpl for portability"); +# endif +#endif + + +/* Return sqrt(x^2+y^2). */ +#if @GNULIB_HYPOTF@ +# if @REPLACE_HYPOTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef hypotf +# define hypotf rpl_hypotf +# endif +_GL_FUNCDECL_RPL (hypotf, float, (float x, float y)); +_GL_CXXALIAS_RPL (hypotf, float, (float x, float y)); +# else +# if !@HAVE_HYPOTF@ +_GL_FUNCDECL_SYS (hypotf, float, (float x, float y)); +# endif +_GL_CXXALIAS_SYS (hypotf, float, (float x, float y)); +# endif +_GL_CXXALIASWARN (hypotf); +#elif defined GNULIB_POSIXCHECK +# undef hypotf +# if HAVE_RAW_DECL_HYPOTF +_GL_WARN_ON_USE (hypotf, "hypotf is unportable - " + "use gnulib module hypotf for portability"); +# endif +#endif + +/* Return sqrt(x^2+y^2). */ +#if @GNULIB_HYPOT@ +# if @REPLACE_HYPOT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef hypot +# define hypot rpl_hypot +# endif +_GL_FUNCDECL_RPL (hypot, double, (double x, double y)); +_GL_CXXALIAS_RPL (hypot, double, (double x, double y)); +# else +_GL_CXXALIAS_SYS (hypot, double, (double x, double y)); +# endif +_GL_CXXALIASWARN (hypot); +#elif defined GNULIB_POSIXCHECK +# undef hypot +# if HAVE_RAW_DECL_HYPOT +_GL_WARN_ON_USE (hypotf, "hypot has portability problems - " + "use gnulib module hypot for portability"); +# endif +#endif + +/* Return sqrt(x^2+y^2). */ +#if @GNULIB_HYPOTL@ +# if @REPLACE_HYPOTL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef hypotl +# define hypotl rpl_hypotl +# endif +_GL_FUNCDECL_RPL (hypotl, long double, (long double x, long double y)); +_GL_CXXALIAS_RPL (hypotl, long double, (long double x, long double y)); +# else +# if !@HAVE_HYPOTL@ +_GL_FUNCDECL_SYS (hypotl, long double, (long double x, long double y)); +# endif +_GL_CXXALIAS_SYS (hypotl, long double, (long double x, long double y)); +# endif +_GL_CXXALIASWARN (hypotl); +#elif defined GNULIB_POSIXCHECK +# undef hypotl +# if HAVE_RAW_DECL_HYPOTL +_GL_WARN_ON_USE (hypotl, "hypotl is unportable - " + "use gnulib module hypotl for portability"); +# endif +#endif + + +#if @GNULIB_ILOGBF@ +# if @REPLACE_ILOGBF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ilogbf +# define ilogbf rpl_ilogbf +# endif +_GL_FUNCDECL_RPL (ilogbf, int, (float x)); +_GL_CXXALIAS_RPL (ilogbf, int, (float x)); +# else +# if !@HAVE_ILOGBF@ +_GL_FUNCDECL_SYS (ilogbf, int, (float x)); +# endif +_GL_CXXALIAS_SYS (ilogbf, int, (float x)); +# endif +_GL_CXXALIASWARN (ilogbf); +#elif defined GNULIB_POSIXCHECK +# undef ilogbf +# if HAVE_RAW_DECL_ILOGBF +_GL_WARN_ON_USE (ilogbf, "ilogbf is unportable - " + "use gnulib module ilogbf for portability"); +# endif +#endif + +#if @GNULIB_ILOGB@ +# if @REPLACE_ILOGB@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ilogb +# define ilogb rpl_ilogb +# endif +_GL_FUNCDECL_RPL (ilogb, int, (double x)); +_GL_CXXALIAS_RPL (ilogb, int, (double x)); +# else +# if !@HAVE_ILOGB@ +_GL_FUNCDECL_SYS (ilogb, int, (double x)); +# endif +_GL_CXXALIAS_SYS (ilogb, int, (double x)); +# endif +_GL_CXXALIASWARN (ilogb); +#elif defined GNULIB_POSIXCHECK +# undef ilogb +# if HAVE_RAW_DECL_ILOGB +_GL_WARN_ON_USE (ilogb, "ilogb is unportable - " + "use gnulib module ilogb for portability"); +# endif +#endif + +#if @GNULIB_ILOGBL@ +# if @REPLACE_ILOGBL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ilogbl +# define ilogbl rpl_ilogbl +# endif +_GL_FUNCDECL_RPL (ilogbl, int, (long double x)); +_GL_CXXALIAS_RPL (ilogbl, int, (long double x)); +# else +# if !@HAVE_ILOGBL@ +_GL_FUNCDECL_SYS (ilogbl, int, (long double x)); +# endif +_GL_CXXALIAS_SYS (ilogbl, int, (long double x)); +# endif +_GL_CXXALIASWARN (ilogbl); +#elif defined GNULIB_POSIXCHECK +# undef ilogbl +# if HAVE_RAW_DECL_ILOGBL +_GL_WARN_ON_USE (ilogbl, "ilogbl is unportable - " + "use gnulib module ilogbl for portability"); +# endif +#endif + + +/* Return x * 2^exp. */ +#if @GNULIB_LDEXPF@ +# if !@HAVE_LDEXPF@ +# undef ldexpf +_GL_FUNCDECL_SYS (ldexpf, float, (float x, int exp)); +# endif +_GL_CXXALIAS_SYS (ldexpf, float, (float x, int exp)); +_GL_CXXALIASWARN (ldexpf); +#elif defined GNULIB_POSIXCHECK +# undef ldexpf +# if HAVE_RAW_DECL_LDEXPF +_GL_WARN_ON_USE (ldexpf, "ldexpf is unportable - " + "use gnulib module ldexpf for portability"); +# endif +#endif + +/* Return x * 2^exp. */ +#if @GNULIB_LDEXPL@ && @REPLACE_LDEXPL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ldexpl +# define ldexpl rpl_ldexpl +# endif +_GL_FUNCDECL_RPL (ldexpl, long double, (long double x, int exp)); +_GL_CXXALIAS_RPL (ldexpl, long double, (long double x, int exp)); +#else +# if !@HAVE_DECL_LDEXPL@ +_GL_FUNCDECL_SYS (ldexpl, long double, (long double x, int exp)); +# endif +# if @GNULIB_LDEXPL@ +_GL_CXXALIAS_SYS (ldexpl, long double, (long double x, int exp)); +# endif +#endif +#if @GNULIB_LDEXPL@ +_GL_CXXALIASWARN (ldexpl); +#endif +#if !@GNULIB_LDEXPL@ && defined GNULIB_POSIXCHECK +# undef ldexpl +# if HAVE_RAW_DECL_LDEXPL +_GL_WARN_ON_USE (ldexpl, "ldexpl is unportable - " + "use gnulib module ldexpl for portability"); +# endif +#endif + + +#if @GNULIB_LOGF@ +# if @REPLACE_LOGF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef logf +# define logf rpl_logf +# endif +_GL_FUNCDECL_RPL (logf, float, (float x)); +_GL_CXXALIAS_RPL (logf, float, (float x)); +# else +# if !@HAVE_LOGF@ +# undef logf +_GL_FUNCDECL_SYS (logf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (logf, float, (float x)); +# endif +_GL_CXXALIASWARN (logf); +#elif defined GNULIB_POSIXCHECK +# undef logf +# if HAVE_RAW_DECL_LOGF +_GL_WARN_ON_USE (logf, "logf is unportable - " + "use gnulib module logf for portability"); +# endif +#endif + +#if @GNULIB_LOG@ +# if @REPLACE_LOG@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log +# define log rpl_log +# endif +_GL_FUNCDECL_RPL (log, double, (double x)); +_GL_CXXALIAS_RPL (log, double, (double x)); +# else +_GL_CXXALIAS_SYS (log, double, (double x)); +# endif +_GL_CXXALIASWARN (log); +#elif defined GNULIB_POSIXCHECK +# undef log +# if HAVE_RAW_DECL_LOG +_GL_WARN_ON_USE (log, "log has portability problems - " + "use gnulib module log for portability"); +# endif +#endif + +#if @GNULIB_LOGL@ +# if @REPLACE_LOGL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef logl +# define logl rpl_logl +# endif +_GL_FUNCDECL_RPL (logl, long double, (long double x)); +_GL_CXXALIAS_RPL (logl, long double, (long double x)); +# else +# if !@HAVE_LOGL@ || !@HAVE_DECL_LOGL@ +# undef logl +_GL_FUNCDECL_SYS (logl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (logl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (logl); +#elif defined GNULIB_POSIXCHECK +# undef logl +# if HAVE_RAW_DECL_LOGL +_GL_WARN_ON_USE (logl, "logl is unportable - " + "use gnulib module logl for portability"); +# endif +#endif + + +#if @GNULIB_LOG10F@ +# if @REPLACE_LOG10F@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log10f +# define log10f rpl_log10f +# endif +_GL_FUNCDECL_RPL (log10f, float, (float x)); +_GL_CXXALIAS_RPL (log10f, float, (float x)); +# else +# if !@HAVE_LOG10F@ +# undef log10f +_GL_FUNCDECL_SYS (log10f, float, (float x)); +# endif +_GL_CXXALIAS_SYS (log10f, float, (float x)); +# endif +_GL_CXXALIASWARN (log10f); +#elif defined GNULIB_POSIXCHECK +# undef log10f +# if HAVE_RAW_DECL_LOG10F +_GL_WARN_ON_USE (log10f, "log10f is unportable - " + "use gnulib module log10f for portability"); +# endif +#endif + +#if @GNULIB_LOG10@ +# if @REPLACE_LOG10@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log10 +# define log10 rpl_log10 +# endif +_GL_FUNCDECL_RPL (log10, double, (double x)); +_GL_CXXALIAS_RPL (log10, double, (double x)); +# else +_GL_CXXALIAS_SYS (log10, double, (double x)); +# endif +_GL_CXXALIASWARN (log10); +#elif defined GNULIB_POSIXCHECK +# undef log10 +# if HAVE_RAW_DECL_LOG10 +_GL_WARN_ON_USE (log10, "log10 has portability problems - " + "use gnulib module log10 for portability"); +# endif +#endif + +#if @GNULIB_LOG10L@ +# if @REPLACE_LOG10L@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log10l +# define log10l rpl_log10l +# endif +_GL_FUNCDECL_RPL (log10l, long double, (long double x)); +_GL_CXXALIAS_RPL (log10l, long double, (long double x)); +# else +# if !@HAVE_LOG10L@ || !@HAVE_DECL_LOG10L@ +# undef log10l +_GL_FUNCDECL_SYS (log10l, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (log10l, long double, (long double x)); +# endif +_GL_CXXALIASWARN (log10l); +#elif defined GNULIB_POSIXCHECK +# undef log10l +# if HAVE_RAW_DECL_LOG10L +_GL_WARN_ON_USE (log10l, "log10l is unportable - " + "use gnulib module log10l for portability"); +# endif +#endif + + +#if @GNULIB_LOG1PF@ +# if @REPLACE_LOG1PF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log1pf +# define log1pf rpl_log1pf +# endif +_GL_FUNCDECL_RPL (log1pf, float, (float x)); +_GL_CXXALIAS_RPL (log1pf, float, (float x)); +# else +# if !@HAVE_LOG1PF@ +_GL_FUNCDECL_SYS (log1pf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (log1pf, float, (float x)); +# endif +_GL_CXXALIASWARN (log1pf); +#elif defined GNULIB_POSIXCHECK +# undef log1pf +# if HAVE_RAW_DECL_LOG1PF +_GL_WARN_ON_USE (log1pf, "log1pf is unportable - " + "use gnulib module log1pf for portability"); +# endif +#endif + +#if @GNULIB_LOG1P@ +# if @REPLACE_LOG1P@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log1p +# define log1p rpl_log1p +# endif +_GL_FUNCDECL_RPL (log1p, double, (double x)); +_GL_CXXALIAS_RPL (log1p, double, (double x)); +# else +# if !@HAVE_LOG1P@ +_GL_FUNCDECL_SYS (log1p, double, (double x)); +# endif +_GL_CXXALIAS_SYS (log1p, double, (double x)); +# endif +_GL_CXXALIASWARN (log1p); +#elif defined GNULIB_POSIXCHECK +# undef log1p +# if HAVE_RAW_DECL_LOG1P +_GL_WARN_ON_USE (log1p, "log1p has portability problems - " + "use gnulib module log1p for portability"); +# endif +#endif + +#if @GNULIB_LOG1PL@ +# if @REPLACE_LOG1PL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log1pl +# define log1pl rpl_log1pl +# endif +_GL_FUNCDECL_RPL (log1pl, long double, (long double x)); +_GL_CXXALIAS_RPL (log1pl, long double, (long double x)); +# else +# if !@HAVE_LOG1PL@ +_GL_FUNCDECL_SYS (log1pl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (log1pl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (log1pl); +#elif defined GNULIB_POSIXCHECK +# undef log1pl +# if HAVE_RAW_DECL_LOG1PL +_GL_WARN_ON_USE (log1pl, "log1pl has portability problems - " + "use gnulib module log1pl for portability"); +# endif +#endif + + +#if @GNULIB_LOG2F@ +# if @REPLACE_LOG2F@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log2f +# define log2f rpl_log2f +# endif +_GL_FUNCDECL_RPL (log2f, float, (float x)); +_GL_CXXALIAS_RPL (log2f, float, (float x)); +# else +# if !@HAVE_DECL_LOG2F@ +# undef log2f +_GL_FUNCDECL_SYS (log2f, float, (float x)); +# endif +_GL_CXXALIAS_SYS (log2f, float, (float x)); +# endif +_GL_CXXALIASWARN (log2f); +#elif defined GNULIB_POSIXCHECK +# undef log2f +# if HAVE_RAW_DECL_LOG2F +_GL_WARN_ON_USE (log2f, "log2f is unportable - " + "use gnulib module log2f for portability"); +# endif +#endif + +#if @GNULIB_LOG2@ +# if @REPLACE_LOG2@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log2 +# define log2 rpl_log2 +# endif +_GL_FUNCDECL_RPL (log2, double, (double x)); +_GL_CXXALIAS_RPL (log2, double, (double x)); +# else +# if !@HAVE_DECL_LOG2@ +# undef log2 +_GL_FUNCDECL_SYS (log2, double, (double x)); +# endif +_GL_CXXALIAS_SYS (log2, double, (double x)); +# endif +_GL_CXXALIASWARN (log2); +#elif defined GNULIB_POSIXCHECK +# undef log2 +# if HAVE_RAW_DECL_LOG2 +_GL_WARN_ON_USE (log2, "log2 is unportable - " + "use gnulib module log2 for portability"); +# endif +#endif + +#if @GNULIB_LOG2L@ +# if @REPLACE_LOG2L@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef log2l +# define log2l rpl_log2l +# endif +_GL_FUNCDECL_RPL (log2l, long double, (long double x)); +_GL_CXXALIAS_RPL (log2l, long double, (long double x)); +# else +# if !@HAVE_DECL_LOG2L@ +_GL_FUNCDECL_SYS (log2l, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (log2l, long double, (long double x)); +# endif +_GL_CXXALIASWARN (log2l); +#elif defined GNULIB_POSIXCHECK +# undef log2l +# if HAVE_RAW_DECL_LOG2L +_GL_WARN_ON_USE (log2l, "log2l is unportable - " + "use gnulib module log2l for portability"); +# endif +#endif + + +#if @GNULIB_LOGBF@ +# if @REPLACE_LOGBF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef logbf +# define logbf rpl_logbf +# endif +_GL_FUNCDECL_RPL (logbf, float, (float x)); +_GL_CXXALIAS_RPL (logbf, float, (float x)); +# else +# if !@HAVE_LOGBF@ +_GL_FUNCDECL_SYS (logbf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (logbf, float, (float x)); +# endif +_GL_CXXALIASWARN (logbf); +#elif defined GNULIB_POSIXCHECK +# undef logbf +# if HAVE_RAW_DECL_LOGBF +_GL_WARN_ON_USE (logbf, "logbf is unportable - " + "use gnulib module logbf for portability"); +# endif +#endif + +#if @GNULIB_LOGB@ +# if @REPLACE_LOGB@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef logb +# define logb rpl_logb +# endif +_GL_FUNCDECL_RPL (logb, double, (double x)); +_GL_CXXALIAS_RPL (logb, double, (double x)); +# else +# if !@HAVE_DECL_LOGB@ +_GL_FUNCDECL_SYS (logb, double, (double x)); +# endif +_GL_CXXALIAS_SYS (logb, double, (double x)); +# endif +_GL_CXXALIASWARN (logb); +#elif defined GNULIB_POSIXCHECK +# undef logb +# if HAVE_RAW_DECL_LOGB +_GL_WARN_ON_USE (logb, "logb is unportable - " + "use gnulib module logb for portability"); +# endif +#endif + +#if @GNULIB_LOGBL@ +# if @REPLACE_LOGBL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef logbl +# define logbl rpl_logbl +# endif +_GL_FUNCDECL_RPL (logbl, long double, (long double x)); +_GL_CXXALIAS_RPL (logbl, long double, (long double x)); +# else +# if !@HAVE_LOGBL@ +_GL_FUNCDECL_SYS (logbl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (logbl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (logbl); +#elif defined GNULIB_POSIXCHECK +# undef logbl +# if HAVE_RAW_DECL_LOGBL +_GL_WARN_ON_USE (logbl, "logbl is unportable - " + "use gnulib module logbl for portability"); +# endif +#endif + + +#if @GNULIB_MODFF@ +# if @REPLACE_MODFF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef modff +# define modff rpl_modff +# endif +_GL_FUNCDECL_RPL (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (modff, float, (float x, float *iptr)); +# else +# if !@HAVE_MODFF@ +# undef modff +_GL_FUNCDECL_SYS (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (modff, float, (float x, float *iptr)); +# endif +_GL_CXXALIASWARN (modff); +#elif defined GNULIB_POSIXCHECK +# undef modff +# if HAVE_RAW_DECL_MODFF +_GL_WARN_ON_USE (modff, "modff is unportable - " + "use gnulib module modff for portability"); +# endif +#endif + +#if @GNULIB_MODF@ +# if @REPLACE_MODF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef modf +# define modf rpl_modf +# endif +_GL_FUNCDECL_RPL (modf, double, (double x, double *iptr) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (modf, double, (double x, double *iptr)); +# else +_GL_CXXALIAS_SYS (modf, double, (double x, double *iptr)); +# endif +_GL_CXXALIASWARN (modf); +#elif defined GNULIB_POSIXCHECK +# undef modf +# if HAVE_RAW_DECL_MODF +_GL_WARN_ON_USE (modf, "modf has portability problems - " + "use gnulib module modf for portability"); +# endif +#endif + +#if @GNULIB_MODFL@ +# if @REPLACE_MODFL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef modfl +# define modfl rpl_modfl +# endif +_GL_FUNCDECL_RPL (modfl, long double, (long double x, long double *iptr) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (modfl, long double, (long double x, long double *iptr)); +# else +# if !@HAVE_MODFL@ +# undef modfl +_GL_FUNCDECL_SYS (modfl, long double, (long double x, long double *iptr) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (modfl, long double, (long double x, long double *iptr)); +# endif +_GL_CXXALIASWARN (modfl); +#elif defined GNULIB_POSIXCHECK +# undef modfl +# if HAVE_RAW_DECL_MODFL +_GL_WARN_ON_USE (modfl, "modfl is unportable - " + "use gnulib module modfl for portability"); +# endif +#endif + + +#if @GNULIB_POWF@ +# if !@HAVE_POWF@ +# undef powf +_GL_FUNCDECL_SYS (powf, float, (float x, float y)); +# endif +_GL_CXXALIAS_SYS (powf, float, (float x, float y)); +_GL_CXXALIASWARN (powf); +#elif defined GNULIB_POSIXCHECK +# undef powf +# if HAVE_RAW_DECL_POWF +_GL_WARN_ON_USE (powf, "powf is unportable - " + "use gnulib module powf for portability"); +# endif +#endif + + +#if @GNULIB_REMAINDERF@ +# if @REPLACE_REMAINDERF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef remainderf +# define remainderf rpl_remainderf +# endif +_GL_FUNCDECL_RPL (remainderf, float, (float x, float y)); +_GL_CXXALIAS_RPL (remainderf, float, (float x, float y)); +# else +# if !@HAVE_REMAINDERF@ +_GL_FUNCDECL_SYS (remainderf, float, (float x, float y)); +# endif +_GL_CXXALIAS_SYS (remainderf, float, (float x, float y)); +# endif +_GL_CXXALIASWARN (remainderf); +#elif defined GNULIB_POSIXCHECK +# undef remainderf +# if HAVE_RAW_DECL_REMAINDERF +_GL_WARN_ON_USE (remainderf, "remainderf is unportable - " + "use gnulib module remainderf for portability"); +# endif +#endif + +#if @GNULIB_REMAINDER@ +# if @REPLACE_REMAINDER@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef remainder +# define remainder rpl_remainder +# endif +_GL_FUNCDECL_RPL (remainder, double, (double x, double y)); +_GL_CXXALIAS_RPL (remainder, double, (double x, double y)); +# else +# if !@HAVE_REMAINDER@ || !@HAVE_DECL_REMAINDER@ +_GL_FUNCDECL_SYS (remainder, double, (double x, double y)); +# endif +_GL_CXXALIAS_SYS (remainder, double, (double x, double y)); +# endif +_GL_CXXALIASWARN (remainder); +#elif defined GNULIB_POSIXCHECK +# undef remainder +# if HAVE_RAW_DECL_REMAINDER +_GL_WARN_ON_USE (remainder, "remainder is unportable - " + "use gnulib module remainder for portability"); +# endif +#endif + +#if @GNULIB_REMAINDERL@ +# if @REPLACE_REMAINDERL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef remainderl +# define remainderl rpl_remainderl +# endif +_GL_FUNCDECL_RPL (remainderl, long double, (long double x, long double y)); +_GL_CXXALIAS_RPL (remainderl, long double, (long double x, long double y)); +# else +# if !@HAVE_DECL_REMAINDERL@ +# undef remainderl +_GL_FUNCDECL_SYS (remainderl, long double, (long double x, long double y)); +# endif +_GL_CXXALIAS_SYS (remainderl, long double, (long double x, long double y)); +# endif +_GL_CXXALIASWARN (remainderl); +#elif defined GNULIB_POSIXCHECK +# undef remainderl +# if HAVE_RAW_DECL_REMAINDERL +_GL_WARN_ON_USE (remainderl, "remainderl is unportable - " + "use gnulib module remainderl for portability"); +# endif +#endif + + +#if @GNULIB_RINTF@ +# if !@HAVE_DECL_RINTF@ +_GL_FUNCDECL_SYS (rintf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (rintf, float, (float x)); +_GL_CXXALIASWARN (rintf); +#elif defined GNULIB_POSIXCHECK +# undef rintf +# if HAVE_RAW_DECL_RINTF +_GL_WARN_ON_USE (rintf, "rintf is unportable - " + "use gnulib module rintf for portability"); +# endif +#endif + +#if @GNULIB_RINT@ +# if !@HAVE_RINT@ +_GL_FUNCDECL_SYS (rint, double, (double x)); +# endif +_GL_CXXALIAS_SYS (rint, double, (double x)); +_GL_CXXALIASWARN (rint); +#elif defined GNULIB_POSIXCHECK +# undef rint +# if HAVE_RAW_DECL_RINT +_GL_WARN_ON_USE (rint, "rint is unportable - " + "use gnulib module rint for portability"); +# endif +#endif + +#if @GNULIB_RINTL@ +# if !@HAVE_RINTL@ +_GL_FUNCDECL_SYS (rintl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (rintl, long double, (long double x)); +_GL_CXXALIASWARN (rintl); +#elif defined GNULIB_POSIXCHECK +# undef rintl +# if HAVE_RAW_DECL_RINTL +_GL_WARN_ON_USE (rintl, "rintl is unportable - " + "use gnulib module rintl for portability"); +# endif +#endif + + +#if @GNULIB_ROUNDF@ +# if @REPLACE_ROUNDF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef roundf +# define roundf rpl_roundf +# endif +_GL_FUNCDECL_RPL (roundf, float, (float x)); +_GL_CXXALIAS_RPL (roundf, float, (float x)); +# else +# if !@HAVE_DECL_ROUNDF@ +_GL_FUNCDECL_SYS (roundf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (roundf, float, (float x)); +# endif +_GL_CXXALIASWARN (roundf); +#elif defined GNULIB_POSIXCHECK +# undef roundf +# if HAVE_RAW_DECL_ROUNDF +_GL_WARN_ON_USE (roundf, "roundf is unportable - " + "use gnulib module roundf for portability"); +# endif +#endif + +#if @GNULIB_ROUND@ +# if @REPLACE_ROUND@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef round +# define round rpl_round +# endif +_GL_FUNCDECL_RPL (round, double, (double x)); +_GL_CXXALIAS_RPL (round, double, (double x)); +# else +# if !@HAVE_DECL_ROUND@ +_GL_FUNCDECL_SYS (round, double, (double x)); +# endif +_GL_CXXALIAS_SYS (round, double, (double x)); +# endif +_GL_CXXALIASWARN (round); +#elif defined GNULIB_POSIXCHECK +# undef round +# if HAVE_RAW_DECL_ROUND +_GL_WARN_ON_USE (round, "round is unportable - " + "use gnulib module round for portability"); +# endif +#endif + +#if @GNULIB_ROUNDL@ +# if @REPLACE_ROUNDL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef roundl +# define roundl rpl_roundl +# endif +_GL_FUNCDECL_RPL (roundl, long double, (long double x)); +_GL_CXXALIAS_RPL (roundl, long double, (long double x)); +# else +# if !@HAVE_DECL_ROUNDL@ +# undef roundl +_GL_FUNCDECL_SYS (roundl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (roundl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (roundl); +#elif defined GNULIB_POSIXCHECK +# undef roundl +# if HAVE_RAW_DECL_ROUNDL +_GL_WARN_ON_USE (roundl, "roundl is unportable - " + "use gnulib module roundl for portability"); +# endif +#endif + + +#if @GNULIB_SINF@ +# if @REPLACE_SINF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sinf +# define sinf rpl_sinf +# endif +_GL_FUNCDECL_RPL (sinf, float, (float x)); +_GL_CXXALIAS_RPL (sinf, float, (float x)); +# else +# if !@HAVE_SINF@ + # undef sinf +_GL_FUNCDECL_SYS (sinf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (sinf, float, (float x)); +# endif +_GL_CXXALIASWARN (sinf); +#elif defined GNULIB_POSIXCHECK +# undef sinf +# if HAVE_RAW_DECL_SINF +_GL_WARN_ON_USE (sinf, "sinf is unportable - " + "use gnulib module sinf for portability"); +# endif +#endif + +#if @GNULIB_SINL@ +# if !@HAVE_SINL@ || !@HAVE_DECL_SINL@ +# undef sinl +_GL_FUNCDECL_SYS (sinl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (sinl, long double, (long double x)); +_GL_CXXALIASWARN (sinl); +#elif defined GNULIB_POSIXCHECK +# undef sinl +# if HAVE_RAW_DECL_SINL +_GL_WARN_ON_USE (sinl, "sinl is unportable - " + "use gnulib module sinl for portability"); +# endif +#endif + + +#if @GNULIB_SINHF@ +# if @REPLACE_SINHF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sinhf +# define sinhf rpl_sinhf +# endif +_GL_FUNCDECL_RPL (sinhf, float, (float x)); +_GL_CXXALIAS_RPL (sinhf, float, (float x)); +# else +# if !@HAVE_SINHF@ +# undef sinhf +_GL_FUNCDECL_SYS (sinhf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (sinhf, float, (float x)); +# endif +_GL_CXXALIASWARN (sinhf); +#elif defined GNULIB_POSIXCHECK +# undef sinhf +# if HAVE_RAW_DECL_SINHF +_GL_WARN_ON_USE (sinhf, "sinhf is unportable - " + "use gnulib module sinhf for portability"); +# endif +#endif + + +#if @GNULIB_SQRTF@ +# if @REPLACE_SQRTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sqrtf +# define sqrtf rpl_sqrtf +# endif +_GL_FUNCDECL_RPL (sqrtf, float, (float x)); +_GL_CXXALIAS_RPL (sqrtf, float, (float x)); +# else +# if !@HAVE_SQRTF@ +# undef sqrtf +_GL_FUNCDECL_SYS (sqrtf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (sqrtf, float, (float x)); +# endif +_GL_CXXALIASWARN (sqrtf); +#elif defined GNULIB_POSIXCHECK +# undef sqrtf +# if HAVE_RAW_DECL_SQRTF +_GL_WARN_ON_USE (sqrtf, "sqrtf is unportable - " + "use gnulib module sqrtf for portability"); +# endif +#endif + +#if @GNULIB_SQRTL@ +# if @REPLACE_SQRTL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sqrtl +# define sqrtl rpl_sqrtl +# endif +_GL_FUNCDECL_RPL (sqrtl, long double, (long double x)); +_GL_CXXALIAS_RPL (sqrtl, long double, (long double x)); +# else +# if !@HAVE_SQRTL@ || !@HAVE_DECL_SQRTL@ +# undef sqrtl +_GL_FUNCDECL_SYS (sqrtl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (sqrtl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (sqrtl); +#elif defined GNULIB_POSIXCHECK +# undef sqrtl +# if HAVE_RAW_DECL_SQRTL +_GL_WARN_ON_USE (sqrtl, "sqrtl is unportable - " + "use gnulib module sqrtl for portability"); +# endif +#endif + + +#if @GNULIB_TANF@ +# if @REPLACE_TANF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef tanf +# define tanf rpl_tanf +# endif +_GL_FUNCDECL_RPL (tanf, float, (float x)); +_GL_CXXALIAS_RPL (tanf, float, (float x)); +# else +# if !@HAVE_TANF@ +# undef tanf +_GL_FUNCDECL_SYS (tanf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (tanf, float, (float x)); +# endif +_GL_CXXALIASWARN (tanf); +#elif defined GNULIB_POSIXCHECK +# undef tanf +# if HAVE_RAW_DECL_TANF +_GL_WARN_ON_USE (tanf, "tanf is unportable - " + "use gnulib module tanf for portability"); +# endif +#endif + +#if @GNULIB_TANL@ +# if !@HAVE_TANL@ || !@HAVE_DECL_TANL@ +# undef tanl +_GL_FUNCDECL_SYS (tanl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (tanl, long double, (long double x)); +_GL_CXXALIASWARN (tanl); +#elif defined GNULIB_POSIXCHECK +# undef tanl +# if HAVE_RAW_DECL_TANL +_GL_WARN_ON_USE (tanl, "tanl is unportable - " + "use gnulib module tanl for portability"); +# endif +#endif + + +#if @GNULIB_TANHF@ +# if @REPLACE_TANHF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef tanhf +# define tanhf rpl_tanhf +# endif +_GL_FUNCDECL_RPL (tanhf, float, (float x)); +_GL_CXXALIAS_RPL (tanhf, float, (float x)); +# else +# if !@HAVE_TANHF@ +# undef tanhf +_GL_FUNCDECL_SYS (tanhf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (tanhf, float, (float x)); +# endif +_GL_CXXALIASWARN (tanhf); +#elif defined GNULIB_POSIXCHECK +# undef tanhf +# if HAVE_RAW_DECL_TANHF +_GL_WARN_ON_USE (tanhf, "tanhf is unportable - " + "use gnulib module tanhf for portability"); +# endif +#endif + + +#if @GNULIB_TRUNCF@ +# if @REPLACE_TRUNCF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef truncf +# define truncf rpl_truncf +# endif +_GL_FUNCDECL_RPL (truncf, float, (float x)); +_GL_CXXALIAS_RPL (truncf, float, (float x)); +# else +# if !@HAVE_DECL_TRUNCF@ +_GL_FUNCDECL_SYS (truncf, float, (float x)); +# endif +_GL_CXXALIAS_SYS (truncf, float, (float x)); +# endif +_GL_CXXALIASWARN (truncf); +#elif defined GNULIB_POSIXCHECK +# undef truncf +# if HAVE_RAW_DECL_TRUNCF +_GL_WARN_ON_USE (truncf, "truncf is unportable - " + "use gnulib module truncf for portability"); +# endif +#endif + +#if @GNULIB_TRUNC@ +# if @REPLACE_TRUNC@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef trunc +# define trunc rpl_trunc +# endif +_GL_FUNCDECL_RPL (trunc, double, (double x)); +_GL_CXXALIAS_RPL (trunc, double, (double x)); +# else +# if !@HAVE_DECL_TRUNC@ +_GL_FUNCDECL_SYS (trunc, double, (double x)); +# endif +_GL_CXXALIAS_SYS (trunc, double, (double x)); +# endif +_GL_CXXALIASWARN (trunc); +#elif defined GNULIB_POSIXCHECK +# undef trunc +# if HAVE_RAW_DECL_TRUNC +_GL_WARN_ON_USE (trunc, "trunc is unportable - " + "use gnulib module trunc for portability"); +# endif +#endif + +#if @GNULIB_TRUNCL@ +# if @REPLACE_TRUNCL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef truncl +# define truncl rpl_truncl +# endif +_GL_FUNCDECL_RPL (truncl, long double, (long double x)); +_GL_CXXALIAS_RPL (truncl, long double, (long double x)); +# else +# if !@HAVE_DECL_TRUNCL@ +_GL_FUNCDECL_SYS (truncl, long double, (long double x)); +# endif +_GL_CXXALIAS_SYS (truncl, long double, (long double x)); +# endif +_GL_CXXALIASWARN (truncl); +#elif defined GNULIB_POSIXCHECK +# undef truncl +# if HAVE_RAW_DECL_TRUNCL +_GL_WARN_ON_USE (truncl, "truncl is unportable - " + "use gnulib module truncl for portability"); +# endif +#endif + + +/* Definitions of function-like macros come here, after the function + declarations. */ + + +#if @GNULIB_ISFINITE@ +# if @REPLACE_ISFINITE@ +_GL_EXTERN_C int gl_isfinitef (float x); +_GL_EXTERN_C int gl_isfinited (double x); +_GL_EXTERN_C int gl_isfinitel (long double x); +# undef isfinite +# define isfinite(x) \ + (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \ + sizeof (x) == sizeof (double) ? gl_isfinited (x) : \ + gl_isfinitef (x)) +# endif +# ifdef __cplusplus +# if defined isfinite || defined GNULIB_NAMESPACE +_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite) +# undef isfinite +_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite) +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# if defined isfinite +_GL_WARN_REAL_FLOATING_DECL (isfinite); +# undef isfinite +# define isfinite(x) _GL_WARN_REAL_FLOATING_IMPL (isfinite, x) +# endif +#endif + + +#if @GNULIB_ISINF@ +# if @REPLACE_ISINF@ +_GL_EXTERN_C int gl_isinff (float x); +_GL_EXTERN_C int gl_isinfd (double x); +_GL_EXTERN_C int gl_isinfl (long double x); +# undef isinf +# define isinf(x) \ + (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \ + sizeof (x) == sizeof (double) ? gl_isinfd (x) : \ + gl_isinff (x)) +# endif +# ifdef __cplusplus +# if defined isinf || defined GNULIB_NAMESPACE +_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf) +# undef isinf +_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf) +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# if defined isinf +_GL_WARN_REAL_FLOATING_DECL (isinf); +# undef isinf +# define isinf(x) _GL_WARN_REAL_FLOATING_IMPL (isinf, x) +# endif +#endif + + +#if @GNULIB_ISNANF@ +/* Test for NaN for 'float' numbers. */ +# if @HAVE_ISNANF@ +/* The original <math.h> included above provides a declaration of isnan macro + or (older) isnanf function. */ +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnanf +# define isnanf(x) __builtin_isnanf ((float)(x)) +# elif defined isnan +# undef isnanf +# define isnanf(x) isnan ((float)(x)) +# endif +# else +/* Test whether X is a NaN. */ +# undef isnanf +# define isnanf rpl_isnanf +_GL_EXTERN_C int isnanf (float x); +# endif +#endif + +#if @GNULIB_ISNAND@ +/* Test for NaN for 'double' numbers. + This function is a gnulib extension, unlike isnan() which applied only + to 'double' numbers earlier but now is a type-generic macro. */ +# if @HAVE_ISNAND@ +/* The original <math.h> included above provides a declaration of isnan + macro. */ +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnand +# define isnand(x) __builtin_isnan ((double)(x)) +# else +# undef isnand +# define isnand(x) isnan ((double)(x)) +# endif +# else +/* Test whether X is a NaN. */ +# undef isnand +# define isnand rpl_isnand +_GL_EXTERN_C int isnand (double x); +# endif +#endif + +#if @GNULIB_ISNANL@ +/* Test for NaN for 'long double' numbers. */ +# if @HAVE_ISNANL@ +/* The original <math.h> included above provides a declaration of isnan + macro or (older) isnanl function. */ +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnanl +# define isnanl(x) __builtin_isnanl ((long double)(x)) +# elif defined isnan +# undef isnanl +# define isnanl(x) isnan ((long double)(x)) +# endif +# else +/* Test whether X is a NaN. */ +# undef isnanl +# define isnanl rpl_isnanl +_GL_EXTERN_C int isnanl (long double x) _GL_ATTRIBUTE_CONST; +# endif +#endif + +/* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL! */ +#if @GNULIB_ISNAN@ +# if @REPLACE_ISNAN@ +/* We can't just use the isnanf macro (e.g.) as exposed by + isnanf.h (e.g.) here, because those may end up being macros + that recursively expand back to isnan. So use the gnulib + replacements for them directly. */ +# if @HAVE_ISNANF@ && __GNUC__ >= 4 +# define gl_isnan_f(x) __builtin_isnanf ((float)(x)) +# else +_GL_EXTERN_C int rpl_isnanf (float x); +# define gl_isnan_f(x) rpl_isnanf (x) +# endif +# if @HAVE_ISNAND@ && __GNUC__ >= 4 +# define gl_isnan_d(x) __builtin_isnan ((double)(x)) +# else +_GL_EXTERN_C int rpl_isnand (double x); +# define gl_isnan_d(x) rpl_isnand (x) +# endif +# if @HAVE_ISNANL@ && __GNUC__ >= 4 +# define gl_isnan_l(x) __builtin_isnanl ((long double)(x)) +# else +_GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST; +# define gl_isnan_l(x) rpl_isnanl (x) +# endif +# undef isnan +# define isnan(x) \ + (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \ + sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \ + gl_isnan_f (x)) +# elif __GNUC__ >= 4 +# undef isnan +# define isnan(x) \ + (sizeof (x) == sizeof (long double) ? __builtin_isnanl ((long double)(x)) : \ + sizeof (x) == sizeof (double) ? __builtin_isnan ((double)(x)) : \ + __builtin_isnanf ((float)(x))) +# endif +# ifdef __cplusplus +# if defined isnan || defined GNULIB_NAMESPACE +_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan) +# undef isnan +_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan) +# endif +# else +/* Ensure isnan is a macro. */ +# ifndef isnan +# define isnan isnan +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# if defined isnan +_GL_WARN_REAL_FLOATING_DECL (isnan); +# undef isnan +# define isnan(x) _GL_WARN_REAL_FLOATING_IMPL (isnan, x) +# endif +#endif + + +#if @GNULIB_SIGNBIT@ +# if (@REPLACE_SIGNBIT_USING_GCC@ \ + && (!defined __cplusplus || __cplusplus < 201103)) +# undef signbit + /* GCC 4.0 and newer provides three built-ins for signbit. */ +# define signbit(x) \ + (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ + sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ + __builtin_signbitf (x)) +# endif +# if @REPLACE_SIGNBIT@ +# undef signbit +_GL_EXTERN_C int gl_signbitf (float arg); +_GL_EXTERN_C int gl_signbitd (double arg); +_GL_EXTERN_C int gl_signbitl (long double arg); +# if __GNUC__ >= 2 && !defined __STRICT_ANSI__ +# define _GL_NUM_UINT_WORDS(type) \ + ((sizeof (type) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +# if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf +# define gl_signbitf_OPTIMIZED_MACRO +# define gl_signbitf(arg) \ + ({ union { float _value; \ + unsigned int _word[_GL_NUM_UINT_WORDS (float)]; \ + } _m; \ + _m._value = (arg); \ + (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; \ + }) +# endif +# if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd +# define gl_signbitd_OPTIMIZED_MACRO +# define gl_signbitd(arg) \ + ({ union { double _value; \ + unsigned int _word[_GL_NUM_UINT_WORDS (double)]; \ + } _m; \ + _m._value = (arg); \ + (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; \ + }) +# endif +# if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl +# define gl_signbitl_OPTIMIZED_MACRO +# define gl_signbitl(arg) \ + ({ union { long double _value; \ + unsigned int _word[_GL_NUM_UINT_WORDS (long double)]; \ + } _m; \ + _m._value = (arg); \ + (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; \ + }) +# endif +# endif +# define signbit(x) \ + (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \ + sizeof (x) == sizeof (double) ? gl_signbitd (x) : \ + gl_signbitf (x)) +# endif +# ifdef __cplusplus +# if defined signbit || defined GNULIB_NAMESPACE +_GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit) +# undef signbit +_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit) +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# if defined signbit +_GL_WARN_REAL_FLOATING_DECL (signbit); +# undef signbit +# define signbit(x) _GL_WARN_REAL_FLOATING_IMPL (signbit, x) +# endif +#endif + +_GL_INLINE_HEADER_END + +#endif /* _@GUARD_PREFIX@_MATH_H */ +#endif /* _@GUARD_PREFIX@_MATH_H */ diff --git a/devspec.en_US/project/recutils/lib/mbrlen.c b/devspec.en_US/project/recutils/lib/mbrlen.c new file mode 100755 index 0000000..b772c58 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/mbrlen.c @@ -0,0 +1,32 @@ +/* Recognize multibyte character. + Copyright (C) 1999-2000, 2008-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <wchar.h> + + +static mbstate_t internal_state; + +size_t +mbrlen (const char *s, size_t n, mbstate_t *ps) +{ + if (ps == NULL) + ps = &internal_state; + return mbrtowc (NULL, s, n, ps); +} diff --git a/devspec.en_US/project/recutils/lib/mbrtowc.c b/devspec.en_US/project/recutils/lib/mbrtowc.c new file mode 100755 index 0000000..bbe3f7a --- /dev/null +++ b/devspec.en_US/project/recutils/lib/mbrtowc.c @@ -0,0 +1,458 @@ +/* Convert multibyte character to wide character. + Copyright (C) 1999-2002, 2005-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <wchar.h> + +#if C_LOCALE_MAYBE_EILSEQ +# include "hard-locale.h" +# include <locale.h> +#endif + +#if GNULIB_defined_mbstate_t +/* Implement mbrtowc() on top of mbtowc(). */ + +# include <errno.h> +# include <stdlib.h> + +# include "localcharset.h" +# include "streq.h" +# include "verify.h" + +# ifndef FALLTHROUGH +# if __GNUC__ < 7 +# define FALLTHROUGH ((void) 0) +# else +# define FALLTHROUGH __attribute__ ((__fallthrough__)) +# endif +# endif + +/* Returns a classification of special values of the encoding of the current + locale. */ +typedef enum { + enc_other, /* other */ + enc_utf8, /* UTF-8 */ + enc_eucjp, /* EUC-JP */ + enc_94, /* EUC-KR, GB2312, BIG5 */ + enc_euctw, /* EUC-TW */ + enc_gb18030, /* GB18030 */ + enc_sjis /* SJIS */ +} enc_t; +static inline enc_t +locale_enc (void) +{ + const char *encoding = locale_charset (); + if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) + return enc_utf8; + if (STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)) + return enc_eucjp; + if (STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) + || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) + || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)) + return enc_94; + if (STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)) + return enc_euctw; + if (STREQ_OPT (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0)) + return enc_gb18030; + if (STREQ_OPT (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0)) + return enc_sjis; + return enc_other; +} + +#if GNULIB_WCHAR_SINGLE +/* When we know that the locale does not change, provide a speedup by + caching the value of locale_enc. */ +static int cached_locale_enc = -1; +static inline enc_t +locale_enc_cached (void) +{ + if (cached_locale_enc < 0) + cached_locale_enc = locale_enc (); + return cached_locale_enc; +} +#else +/* By default, don't make assumptions, hence no caching. */ +# define locale_enc_cached locale_enc +#endif + +verify (sizeof (mbstate_t) >= 4); + +static char internal_state[4]; + +size_t +mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) +{ + char *pstate = (char *)ps; + + if (s == NULL) + { + pwc = NULL; + s = ""; + n = 1; + } + + if (n == 0) + return (size_t)(-2); + + /* Here n > 0. */ + + if (pstate == NULL) + pstate = internal_state; + + { + size_t nstate = pstate[0]; + char buf[4]; + const char *p; + size_t m; + + switch (nstate) + { + case 0: + p = s; + m = n; + break; + case 3: + buf[2] = pstate[3]; + FALLTHROUGH; + case 2: + buf[1] = pstate[2]; + FALLTHROUGH; + case 1: + buf[0] = pstate[1]; + p = buf; + m = nstate; + buf[m++] = s[0]; + if (n >= 2 && m < 4) + { + buf[m++] = s[1]; + if (n >= 3 && m < 4) + buf[m++] = s[2]; + } + break; + default: + errno = EINVAL; + return (size_t)(-1); + } + + /* Here m > 0. */ + +# if __GLIBC__ || defined __UCLIBC__ + /* Work around bug <https://sourceware.org/bugzilla/show_bug.cgi?id=9674> */ + mbtowc (NULL, NULL, 0); +# endif + { + int res = mbtowc (pwc, p, m); + + if (res >= 0) + { + if (pwc != NULL && ((*pwc == 0) != (res == 0))) + abort (); + if (nstate >= (res > 0 ? res : 1)) + abort (); + res -= nstate; + pstate[0] = 0; + return res; + } + + /* mbtowc does not distinguish between invalid and incomplete multibyte + sequences. But mbrtowc needs to make this distinction. + There are two possible approaches: + - Use iconv() and its return value. + - Use built-in knowledge about the possible encodings. + Given the low quality of implementation of iconv() on the systems that + lack mbrtowc(), we use the second approach. + The possible encodings are: + - 8-bit encodings, + - EUC-JP, EUC-KR, GB2312, EUC-TW, BIG5, GB18030, SJIS, + - UTF-8. + Use specialized code for each. */ + if (m >= 4 || m >= MB_CUR_MAX) + goto invalid; + /* Here MB_CUR_MAX > 1 and 0 < m < 4. */ + switch (locale_enc_cached ()) + { + case enc_utf8: /* UTF-8 */ + { + /* Cf. unistr/u8-mblen.c. */ + unsigned char c = (unsigned char) p[0]; + + if (c >= 0xc2) + { + if (c < 0xe0) + { + if (m == 1) + goto incomplete; + } + else if (c < 0xf0) + { + if (m == 1) + goto incomplete; + if (m == 2) + { + unsigned char c2 = (unsigned char) p[1]; + + if ((c2 ^ 0x80) < 0x40 + && (c >= 0xe1 || c2 >= 0xa0) + && (c != 0xed || c2 < 0xa0)) + goto incomplete; + } + } + else if (c <= 0xf4) + { + if (m == 1) + goto incomplete; + else /* m == 2 || m == 3 */ + { + unsigned char c2 = (unsigned char) p[1]; + + if ((c2 ^ 0x80) < 0x40 + && (c >= 0xf1 || c2 >= 0x90) + && (c < 0xf4 || (c == 0xf4 && c2 < 0x90))) + { + if (m == 2) + goto incomplete; + else /* m == 3 */ + { + unsigned char c3 = (unsigned char) p[2]; + + if ((c3 ^ 0x80) < 0x40) + goto incomplete; + } + } + } + } + } + goto invalid; + } + + /* As a reference for this code, you can use the GNU libiconv + implementation. Look for uses of the RET_TOOFEW macro. */ + + case enc_eucjp: /* EUC-JP */ + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f) + goto incomplete; + } + if (m == 2) + { + unsigned char c = (unsigned char) p[0]; + + if (c == 0x8f) + { + unsigned char c2 = (unsigned char) p[1]; + + if (c2 >= 0xa1 && c2 < 0xff) + goto incomplete; + } + } + goto invalid; + } + + case enc_94: /* EUC-KR, GB2312, BIG5 */ + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if (c >= 0xa1 && c < 0xff) + goto incomplete; + } + goto invalid; + } + + case enc_euctw: /* EUC-TW */ + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0xa1 && c < 0xff) || c == 0x8e) + goto incomplete; + } + else /* m == 2 || m == 3 */ + { + unsigned char c = (unsigned char) p[0]; + + if (c == 0x8e) + goto incomplete; + } + goto invalid; + } + + case enc_gb18030: /* GB18030 */ + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0x90 && c <= 0xe3) || (c >= 0xf8 && c <= 0xfe)) + goto incomplete; + } + else /* m == 2 || m == 3 */ + { + unsigned char c = (unsigned char) p[0]; + + if (c >= 0x90 && c <= 0xe3) + { + unsigned char c2 = (unsigned char) p[1]; + + if (c2 >= 0x30 && c2 <= 0x39) + { + if (m == 2) + goto incomplete; + else /* m == 3 */ + { + unsigned char c3 = (unsigned char) p[2]; + + if (c3 >= 0x81 && c3 <= 0xfe) + goto incomplete; + } + } + } + } + goto invalid; + } + + case enc_sjis: /* SJIS */ + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea) + || (c >= 0xf0 && c <= 0xf9)) + goto incomplete; + } + goto invalid; + } + + default: + /* An unknown multibyte encoding. */ + goto incomplete; + } + + incomplete: + { + size_t k = nstate; + /* Here 0 <= k < m < 4. */ + pstate[++k] = s[0]; + if (k < m) + { + pstate[++k] = s[1]; + if (k < m) + pstate[++k] = s[2]; + } + if (k != m) + abort (); + } + pstate[0] = m; + return (size_t)(-2); + + invalid: + errno = EILSEQ; + /* The conversion state is undefined, says POSIX. */ + return (size_t)(-1); + } + } +} + +#else +/* Override the system's mbrtowc() function. */ + +# undef mbrtowc + +size_t +rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) +{ + size_t ret; + wchar_t wc; + +# if MBRTOWC_NULL_ARG2_BUG || MBRTOWC_RETVAL_BUG || MBRTOWC_EMPTY_INPUT_BUG + if (s == NULL) + { + pwc = NULL; + s = ""; + n = 1; + } +# endif + +# if MBRTOWC_EMPTY_INPUT_BUG + if (n == 0) + return (size_t) -2; +# endif + + if (! pwc) + pwc = &wc; + +# if MBRTOWC_RETVAL_BUG + { + static mbstate_t internal_state; + + /* Override mbrtowc's internal state. We cannot call mbsinit() on the + hidden internal state, but we can call it on our variable. */ + if (ps == NULL) + ps = &internal_state; + + if (!mbsinit (ps)) + { + /* Parse the rest of the multibyte character byte for byte. */ + size_t count = 0; + for (; n > 0; s++, n--) + { + ret = mbrtowc (&wc, s, 1, ps); + + if (ret == (size_t)(-1)) + return (size_t)(-1); + count++; + if (ret != (size_t)(-2)) + { + /* The multibyte character has been completed. */ + *pwc = wc; + return (wc == 0 ? 0 : count); + } + } + return (size_t)(-2); + } + } +# endif + + ret = mbrtowc (pwc, s, n, ps); + +# if MBRTOWC_NUL_RETVAL_BUG + if (ret < (size_t) -2 && !*pwc) + return 0; +# endif + +# if C_LOCALE_MAYBE_EILSEQ + if ((size_t) -2 <= ret && n != 0 && ! hard_locale (LC_CTYPE)) + { + unsigned char uc = *s; + *pwc = uc; + return 1; + } +# endif + + return ret; +} + +#endif diff --git a/devspec.en_US/project/recutils/lib/mbsinit.c b/devspec.en_US/project/recutils/lib/mbsinit.c new file mode 100755 index 0000000..5ecaef7 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/mbsinit.c @@ -0,0 +1,73 @@ +/* Test for initial conversion state. + Copyright (C) 2008-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <wchar.h> + +#include "verify.h" + +#if GNULIB_defined_mbstate_t + +/* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs() + and wcrtomb(), wcsrtombs(). + We assume that + - sizeof (mbstate_t) >= 4, + - only stateless encodings are supported (such as UTF-8 and EUC-JP, but + not ISO-2022 variants), + - for each encoding, the number of bytes for a wide character is <= 4. + (This maximum is attained for UTF-8, GB18030, EUC-TW.) + We define the meaning of mbstate_t as follows: + - In mb -> wc direction, mbstate_t's first byte contains the number of + buffered bytes (in the range 0..3), followed by up to 3 buffered bytes. + See mbrtowc.c. + - In wc -> mb direction, mbstate_t contains no information. In other + words, it is always in the initial state. */ + +verify (sizeof (mbstate_t) >= 4); + +int +mbsinit (const mbstate_t *ps) +{ + const char *pstate = (const char *)ps; + + return pstate == NULL || pstate[0] == 0; +} + +#else + +int +mbsinit (const mbstate_t *ps) +{ +# if defined _WIN32 && !defined __CYGWIN__ + /* Native Windows. */ +# ifdef __MINGW32__ + /* On mingw, 'mbstate_t' is defined as 'int'. */ + return ps == NULL || *ps == 0; +# else + /* MSVC defines 'mbstate_t' as an 8-byte struct; the first 4-bytes matter. */ + return ps == NULL || *(const unsigned int *)ps == 0; +# endif +# else + /* Minix, HP-UX 11.00, Solaris 2.6, Interix, ... */ + /* Maybe this definition works, maybe not... */ + return ps == NULL || *(const char *)ps == 0; +# endif +} + +#endif diff --git a/devspec.en_US/project/recutils/lib/mbtowc-impl.h b/devspec.en_US/project/recutils/lib/mbtowc-impl.h new file mode 100755 index 0000000..f4ab981 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/mbtowc-impl.h @@ -0,0 +1,44 @@ +/* Convert multibyte character to wide character. + Copyright (C) 2011-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2011. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* We don't need a static internal state, because the encoding is not state + dependent, and when mbrtowc returns (size_t)(-2). we throw the result + away. */ + +int +mbtowc (wchar_t *pwc, const char *s, size_t n) +{ + if (s == NULL) + return 0; + else + { + mbstate_t state; + wchar_t wc; + size_t result; + + memset (&state, 0, sizeof (mbstate_t)); + result = mbrtowc (&wc, s, n, &state); + if (result == (size_t)-1 || result == (size_t)-2) + { + errno = EILSEQ; + return -1; + } + if (pwc != NULL) + *pwc = wc; + return (wc == 0 ? 0 : result); + } +} diff --git a/devspec.en_US/project/recutils/lib/mbtowc.c b/devspec.en_US/project/recutils/lib/mbtowc.c new file mode 100755 index 0000000..77a8472 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/mbtowc.c @@ -0,0 +1,26 @@ +/* Convert multibyte character to wide character. + Copyright (C) 2011-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2011. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <stdlib.h> + +#include <errno.h> +#include <string.h> +#include <wchar.h> + +#include "mbtowc-impl.h" diff --git a/devspec.en_US/project/recutils/lib/memchr.c b/devspec.en_US/project/recutils/lib/memchr.c new file mode 100755 index 0000000..4e0c5f9 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/memchr.c @@ -0,0 +1,172 @@ +/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2019 + Free Software Foundation, Inc. + + Based on strlen implementation by Torbjorn Granlund (tege@sics.se), + with help from Dan Sahlin (dan@sics.se) and + commentary by Jim Blandy (jimb@ai.mit.edu); + adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), + and implemented by Roland McGrath (roland@ai.mit.edu). + +NOTE: The canonical source of this file is maintained with the GNU C Library. +Bugs can be reported to bug-glibc@prep.ai.mit.edu. + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 3 of the License, or any +later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _LIBC +# include <config.h> +#endif + +#include <string.h> + +#include <stddef.h> + +#if defined _LIBC +# include <memcopy.h> +#else +# define reg_char char +#endif + +#include <limits.h> + +#if HAVE_BP_SYM_H || defined _LIBC +# include <bp-sym.h> +#else +# define BP_SYM(sym) sym +#endif + +#undef __memchr +#ifdef _LIBC +# undef memchr +#endif + +#ifndef weak_alias +# define __memchr memchr +#endif + +/* Search no more than N bytes of S for C. */ +void * +__memchr (void const *s, int c_in, size_t n) +{ + /* On 32-bit hardware, choosing longword to be a 32-bit unsigned + long instead of a 64-bit uintmax_t tends to give better + performance. On 64-bit hardware, unsigned long is generally 64 + bits already. Change this typedef to experiment with + performance. */ + typedef unsigned long int longword; + + const unsigned char *char_ptr; + const longword *longword_ptr; + longword repeated_one; + longword repeated_c; + unsigned reg_char c; + + c = (unsigned char) c_in; + + /* Handle the first few bytes by reading one byte at a time. + Do this until CHAR_PTR is aligned on a longword boundary. */ + for (char_ptr = (const unsigned char *) s; + n > 0 && (size_t) char_ptr % sizeof (longword) != 0; + --n, ++char_ptr) + if (*char_ptr == c) + return (void *) char_ptr; + + longword_ptr = (const longword *) char_ptr; + + /* All these elucidatory comments refer to 4-byte longwords, + but the theory applies equally well to any size longwords. */ + + /* Compute auxiliary longword values: + repeated_one is a value which has a 1 in every byte. + repeated_c has c in every byte. */ + repeated_one = 0x01010101; + repeated_c = c | (c << 8); + repeated_c |= repeated_c << 16; + if (0xffffffffU < (longword) -1) + { + repeated_one |= repeated_one << 31 << 1; + repeated_c |= repeated_c << 31 << 1; + if (8 < sizeof (longword)) + { + size_t i; + + for (i = 64; i < sizeof (longword) * 8; i *= 2) + { + repeated_one |= repeated_one << i; + repeated_c |= repeated_c << i; + } + } + } + + /* Instead of the traditional loop which tests each byte, we will test a + longword at a time. The tricky part is testing if *any of the four* + bytes in the longword in question are equal to c. We first use an xor + with repeated_c. This reduces the task to testing whether *any of the + four* bytes in longword1 is zero. + + We compute tmp = + ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). + That is, we perform the following operations: + 1. Subtract repeated_one. + 2. & ~longword1. + 3. & a mask consisting of 0x80 in every byte. + Consider what happens in each byte: + - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, + and step 3 transforms it into 0x80. A carry can also be propagated + to more significant bytes. + - If a byte of longword1 is nonzero, let its lowest 1 bit be at + position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, + the byte ends in a single bit of value 0 and k bits of value 1. + After step 2, the result is just k bits of value 1: 2^k - 1. After + step 3, the result is 0. And no carry is produced. + So, if longword1 has only non-zero bytes, tmp is zero. + Whereas if longword1 has a zero byte, call j the position of the least + significant zero byte. Then the result has a zero at positions 0, ..., + j-1 and a 0x80 at position j. We cannot predict the result at the more + significant bytes (positions j+1..3), but it does not matter since we + already have a non-zero bit at position 8*j+7. + + So, the test whether any byte in longword1 is zero is equivalent to + testing whether tmp is nonzero. */ + + while (n >= sizeof (longword)) + { + longword longword1 = *longword_ptr ^ repeated_c; + + if ((((longword1 - repeated_one) & ~longword1) + & (repeated_one << 7)) != 0) + break; + longword_ptr++; + n -= sizeof (longword); + } + + char_ptr = (const unsigned char *) longword_ptr; + + /* At this point, we know that either n < sizeof (longword), or one of the + sizeof (longword) bytes starting at char_ptr is == c. On little-endian + machines, we could determine the first such byte without any further + memory accesses, just by looking at the tmp result from the last loop + iteration. But this does not work on big-endian machines. Choose code + that works in both cases. */ + + for (; n > 0; --n, ++char_ptr) + { + if (*char_ptr == c) + return (void *) char_ptr; + } + + return NULL; +} +#ifdef weak_alias +weak_alias (__memchr, BP_SYM (memchr)) +#endif diff --git a/devspec.en_US/project/recutils/lib/memchr.valgrind b/devspec.en_US/project/recutils/lib/memchr.valgrind new file mode 100755 index 0000000..60f247e --- /dev/null +++ b/devspec.en_US/project/recutils/lib/memchr.valgrind @@ -0,0 +1,14 @@ +# Suppress a valgrind message about use of uninitialized memory in memchr(). +# POSIX states that when the character is found, memchr must not read extra +# bytes in an overestimated length (for example, where memchr is used to +# implement strnlen). However, we use a safe word read to provide a speedup. +{ + memchr-value4 + Memcheck:Value4 + fun:rpl_memchr +} +{ + memchr-value8 + Memcheck:Value8 + fun:rpl_memchr +} diff --git a/devspec.en_US/project/recutils/lib/minmax.h b/devspec.en_US/project/recutils/lib/minmax.h new file mode 100755 index 0000000..d7f6bea --- /dev/null +++ b/devspec.en_US/project/recutils/lib/minmax.h @@ -0,0 +1,60 @@ +/* MIN, MAX macros. + Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2019 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _MINMAX_H +#define _MINMAX_H + +/* Note: MIN, MAX are also defined in <sys/param.h> on some systems + (glibc, IRIX, HP-UX, OSF/1). Therefore you might get warnings about + MIN, MAX macro redefinitions on some systems; the workaround is to + #include this file as the last one among the #include list. */ + +/* Before we define the following symbols we get the <limits.h> file + since otherwise we get redefinitions on some systems if <limits.h> is + included after this file. Likewise for <sys/param.h>. + If more than one of these system headers define MIN and MAX, pick just + one of the headers (because the definitions most likely are the same). */ +#if HAVE_MINMAX_IN_LIMITS_H +# include <limits.h> +#elif HAVE_MINMAX_IN_SYS_PARAM_H +# include <sys/param.h> +#endif + +/* Note: MIN and MAX should be used with two arguments of the + same type. They might not return the minimum and maximum of their two + arguments, if the arguments have different types or have unusual + floating-point values. For example, on a typical host with 32-bit 'int', + 64-bit 'long long', and 64-bit IEEE 754 'double' types: + + MAX (-1, 2147483648) returns 4294967295. + MAX (9007199254740992.0, 9007199254740993) returns 9007199254740992.0. + MAX (NaN, 0.0) returns 0.0. + MAX (+0.0, -0.0) returns -0.0. + + and in each case the answer is in some sense bogus. */ + +/* MAX(a,b) returns the maximum of A and B. */ +#ifndef MAX +# define MAX(a,b) ((a) > (b) ? (a) : (b)) +#endif + +/* MIN(a,b) returns the minimum of A and B. */ +#ifndef MIN +# define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif + +#endif /* _MINMAX_H */ diff --git a/devspec.en_US/project/recutils/lib/mkdir.c b/devspec.en_US/project/recutils/lib/mkdir.c new file mode 100755 index 0000000..b8320d0 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/mkdir.c @@ -0,0 +1,93 @@ +/* On some systems, mkdir ("foo/", 0700) fails because of the trailing + slash. On those systems, this wrapper removes the trailing slash. + + Copyright (C) 2001, 2003, 2006, 2008-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* written by Jim Meyering */ + +#include <config.h> + +/* Specification. */ +#include <sys/stat.h> + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "dirname.h" + +/* Disable the definition of mkdir to rpl_mkdir (from the <sys/stat.h> + substitute) in this file. Otherwise, we'd get an endless recursion. */ +#undef mkdir + +/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. + Additionally, it declares _mkdir (and depending on compile flags, an + alias mkdir), only in the nonstandard includes <direct.h> and <io.h>, + which are included in the <sys/stat.h> override. */ +#if defined _WIN32 && ! defined __CYGWIN__ +# define mkdir(name,mode) _mkdir (name) +# define maybe_unused _GL_UNUSED +#else +# define maybe_unused /* empty */ +#endif + +/* This function is required at least for NetBSD 1.5.2. */ + +int +rpl_mkdir (char const *dir, mode_t mode maybe_unused) +{ + int ret_val; + char *tmp_dir; + size_t len = strlen (dir); + + if (len && dir[len - 1] == '/') + { + tmp_dir = strdup (dir); + if (!tmp_dir) + { + /* Rather than rely on strdup-posix, we set errno ourselves. */ + errno = ENOMEM; + return -1; + } + strip_trailing_slashes (tmp_dir); + } + else + { + tmp_dir = (char *) dir; + } +#if FUNC_MKDIR_DOT_BUG + /* Additionally, cygwin 1.5 mistakenly creates a directory "d/./". */ + { + char *last = last_component (tmp_dir); + if (*last == '.' && (last[1] == '\0' + || (last[1] == '.' && last[2] == '\0'))) + { + struct stat st; + if (stat (tmp_dir, &st) == 0) + errno = EEXIST; + return -1; + } + } +#endif /* FUNC_MKDIR_DOT_BUG */ + + ret_val = mkdir (tmp_dir, mode); + + if (tmp_dir != dir) + free (tmp_dir); + + return ret_val; +} diff --git a/devspec.en_US/project/recutils/lib/mkostemp.c b/devspec.en_US/project/recutils/lib/mkostemp.c new file mode 100755 index 0000000..bbfe9db --- /dev/null +++ b/devspec.en_US/project/recutils/lib/mkostemp.c @@ -0,0 +1,46 @@ +/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2019 Free Software + Foundation, Inc. + This file is derived from the one in the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#if !_LIBC +# include <config.h> +#endif + +#include <stdlib.h> + +#if !_LIBC +# include "tempname.h" +# define __gen_tempname gen_tempname +# ifndef __GTFILE +# define __GT_FILE GT_FILE +# endif +#endif + +#include <stdio.h> + +#ifndef __GT_FILE +# define __GT_FILE 0 +#endif + +/* Generate a unique temporary file name from XTEMPLATE. + The last six characters of XTEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + Then open the file and return a fd. */ +int +mkostemp (char *xtemplate, int flags) +{ + return __gen_tempname (xtemplate, 0, flags, __GT_FILE); +} diff --git a/devspec.en_US/project/recutils/lib/mkstemp.c b/devspec.en_US/project/recutils/lib/mkstemp.c new file mode 100755 index 0000000..7ef0420 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/mkstemp.c @@ -0,0 +1,50 @@ +/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2019 Free Software + Foundation, Inc. + This file is derived from the one in the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#if !_LIBC +# include <config.h> +#endif + +#include <stdlib.h> + +#if !_LIBC +# include "tempname.h" +# define __gen_tempname gen_tempname +# ifndef __GT_FILE +# define __GT_FILE GT_FILE +# endif +#endif + +#include <stdio.h> + +#ifndef __GT_FILE +# define __GT_FILE 0 +#endif + +/* Generate a unique temporary file name from XTEMPLATE. + The last six characters of XTEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + Then open the file and return a fd. + + If you are creating temporary files which will later be removed, + consider using the clean-temp module, which avoids several pitfalls + of using mkstemp directly. */ +int +mkstemp (char *xtemplate) +{ + return __gen_tempname (xtemplate, 0, 0, __GT_FILE); +} diff --git a/devspec.en_US/project/recutils/lib/mktime-internal.h b/devspec.en_US/project/recutils/lib/mktime-internal.h new file mode 100755 index 0000000..d13d89c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/mktime-internal.h @@ -0,0 +1,53 @@ +/* mktime variant that also uses an offset guess + + Copyright 2016-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, see + <https://www.gnu.org/licenses/>. */ + +#include <time.h> + +/* mktime_offset_t is a signed type wide enough to hold a UTC offset + in seconds, and used as part of the type of the offset-guess + argument to mktime_internal. Use time_t on platforms where time_t + is signed, to be compatible with platforms like BeOS that export + this implementation detail of mktime. On platforms where time_t is + unsigned, GNU and POSIX code can assume 'int' is at least 32 bits + which is wide enough for a UTC offset. */ + +#if TIME_T_IS_SIGNED +typedef time_t mktime_offset_t; +#else +typedef int mktime_offset_t; +#endif + +time_t mktime_internal (struct tm *, + struct tm * (*) (time_t const *, struct tm *), + mktime_offset_t *); + +/* Although glibc source code uses leading underscores, Gnulib wants + ordinary names. + + Portable standalone applications should supply a <time.h> that + declares a POSIX-compliant localtime_r, for the benefit of older + implementations that lack localtime_r or have a nonstandard one. + Similarly for gmtime_r. See the gnulib time_r module for one way + to implement this. */ + +#undef __gmtime_r +#undef __localtime_r +#define __gmtime_r gmtime_r +#define __localtime_r localtime_r + +#define __mktime_internal mktime_internal diff --git a/devspec.en_US/project/recutils/lib/mktime.c b/devspec.en_US/project/recutils/lib/mktime.c new file mode 100755 index 0000000..d411aa7 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/mktime.c @@ -0,0 +1,549 @@ +/* Convert a 'struct tm' to a time_t value. + Copyright (C) 1993-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Paul Eggert <eggert@twinsun.com>. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* The following macros influence what gets defined when this file is compiled: + + Macro/expression Which gnulib module This compilation unit + should define + + _LIBC (glibc proper) mktime + + NEED_MKTIME_WORKING mktime rpl_mktime + || NEED_MKTIME_WINDOWS + + NEED_MKTIME_INTERNAL mktime-internal mktime_internal + */ + +#ifndef _LIBC +# include <libc-config.h> +#endif + +/* Assume that leap seconds are possible, unless told otherwise. + If the host has a 'zic' command with a '-L leapsecondfilename' option, + then it supports leap seconds; otherwise it probably doesn't. */ +#ifndef LEAP_SECONDS_POSSIBLE +# define LEAP_SECONDS_POSSIBLE 1 +#endif + +#include <time.h> + +#include <errno.h> +#include <limits.h> +#include <stdbool.h> +#include <stdlib.h> +#include <string.h> + +#include <intprops.h> +#include <verify.h> + +#ifndef NEED_MKTIME_INTERNAL +# define NEED_MKTIME_INTERNAL 0 +#endif +#ifndef NEED_MKTIME_WINDOWS +# define NEED_MKTIME_WINDOWS 0 +#endif +#ifndef NEED_MKTIME_WORKING +# define NEED_MKTIME_WORKING 0 +#endif + +#include "mktime-internal.h" + +#if !defined _LIBC && (NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS) +static void +my_tzset (void) +{ +# if NEED_MKTIME_WINDOWS + /* Rectify the value of the environment variable TZ. + There are four possible kinds of such values: + - Traditional US time zone names, e.g. "PST8PDT". Syntax: see + <https://msdn.microsoft.com/en-us/library/90s5c885.aspx> + - Time zone names based on geography, that contain one or more + slashes, e.g. "Europe/Moscow". + - Time zone names based on geography, without slashes, e.g. + "Singapore". + - Time zone names that contain explicit DST rules. Syntax: see + <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03> + The Microsoft CRT understands only the first kind. It produces incorrect + results if the value of TZ is of the other kinds. + But in a Cygwin environment, /etc/profile.d/tzset.sh sets TZ to a value + of the second kind for most geographies, or of the first kind in a few + other geographies. If it is of the second kind, neutralize it. For the + Microsoft CRT, an absent or empty TZ means the time zone that the user + has set in the Windows Control Panel. + If the value of TZ is of the third or fourth kind -- Cygwin programs + understand these syntaxes as well --, it does not matter whether we + neutralize it or not, since these values occur only when a Cygwin user + has set TZ explicitly; this case is 1. rare and 2. under the user's + responsibility. */ + const char *tz = getenv ("TZ"); + if (tz != NULL && strchr (tz, '/') != NULL) + _putenv ("TZ="); +# elif HAVE_TZSET + tzset (); +# endif +} +# undef __tzset +# define __tzset() my_tzset () +#endif + +#if defined _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_INTERNAL + +/* A signed type that can represent an integer number of years + multiplied by four times the number of seconds in a year. It is + needed when converting a tm_year value times the number of seconds + in a year. The factor of four comes because these products need + to be subtracted from each other, and sometimes with an offset + added to them, and then with another timestamp added, without + worrying about overflow. + + Much of the code uses long_int to represent time_t values, to + lessen the hassle of dealing with platforms where time_t is + unsigned, and because long_int should suffice to represent all + time_t values that mktime can generate even on platforms where + time_t is excessively wide. */ + +#if INT_MAX <= LONG_MAX / 4 / 366 / 24 / 60 / 60 +typedef long int long_int; +#else +typedef long long int long_int; +#endif +verify (INT_MAX <= TYPE_MAXIMUM (long_int) / 4 / 366 / 24 / 60 / 60); + +/* Shift A right by B bits portably, by dividing A by 2**B and + truncating towards minus infinity. B should be in the range 0 <= B + <= LONG_INT_BITS - 2, where LONG_INT_BITS is the number of useful + bits in a long_int. LONG_INT_BITS is at least 32. + + ISO C99 says that A >> B is implementation-defined if A < 0. Some + implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift + right in the usual way when A < 0, so SHR falls back on division if + ordinary A >> B doesn't seem to be the usual signed shift. */ + +static long_int +shr (long_int a, int b) +{ + long_int one = 1; + return (-one >> 1 == -1 + ? a >> b + : a / (one << b) - (a % (one << b) < 0)); +} + +/* Bounds for the intersection of time_t and long_int. */ + +static long_int const mktime_min + = ((TYPE_SIGNED (time_t) && TYPE_MINIMUM (time_t) < TYPE_MINIMUM (long_int)) + ? TYPE_MINIMUM (long_int) : TYPE_MINIMUM (time_t)); +static long_int const mktime_max + = (TYPE_MAXIMUM (long_int) < TYPE_MAXIMUM (time_t) + ? TYPE_MAXIMUM (long_int) : TYPE_MAXIMUM (time_t)); + +verify (TYPE_IS_INTEGER (time_t)); + +#define EPOCH_YEAR 1970 +#define TM_YEAR_BASE 1900 +verify (TM_YEAR_BASE % 100 == 0); + +/* Is YEAR + TM_YEAR_BASE a leap year? */ +static bool +leapyear (long_int year) +{ + /* Don't add YEAR to TM_YEAR_BASE, as that might overflow. + Also, work even if YEAR is negative. */ + return + ((year & 3) == 0 + && (year % 100 != 0 + || ((year / 100) & 3) == (- (TM_YEAR_BASE / 100) & 3))); +} + +/* How many days come before each month (0-12). */ +#ifndef _LIBC +static +#endif +const unsigned short int __mon_yday[2][13] = + { + /* Normal years. */ + { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, + /* Leap years. */ + { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } + }; + + +/* Do the values A and B differ according to the rules for tm_isdst? + A and B differ if one is zero and the other positive. */ +static bool +isdst_differ (int a, int b) +{ + return (!a != !b) && (0 <= a) && (0 <= b); +} + +/* Return an integer value measuring (YEAR1-YDAY1 HOUR1:MIN1:SEC1) - + (YEAR0-YDAY0 HOUR0:MIN0:SEC0) in seconds, assuming that the clocks + were not adjusted between the timestamps. + + The YEAR values uses the same numbering as TP->tm_year. Values + need not be in the usual range. However, YEAR1 - YEAR0 must not + overflow even when multiplied by three times the number of seconds + in a year, and likewise for YDAY1 - YDAY0 and three times the + number of seconds in a day. */ + +static long_int +ydhms_diff (long_int year1, long_int yday1, int hour1, int min1, int sec1, + int year0, int yday0, int hour0, int min0, int sec0) +{ + verify (-1 / 2 == 0); + + /* Compute intervening leap days correctly even if year is negative. + Take care to avoid integer overflow here. */ + int a4 = shr (year1, 2) + shr (TM_YEAR_BASE, 2) - ! (year1 & 3); + int b4 = shr (year0, 2) + shr (TM_YEAR_BASE, 2) - ! (year0 & 3); + int a100 = a4 / 25 - (a4 % 25 < 0); + int b100 = b4 / 25 - (b4 % 25 < 0); + int a400 = shr (a100, 2); + int b400 = shr (b100, 2); + int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); + + /* Compute the desired time without overflowing. */ + long_int years = year1 - year0; + long_int days = 365 * years + yday1 - yday0 + intervening_leap_days; + long_int hours = 24 * days + hour1 - hour0; + long_int minutes = 60 * hours + min1 - min0; + long_int seconds = 60 * minutes + sec1 - sec0; + return seconds; +} + +/* Return the average of A and B, even if A + B would overflow. + Round toward positive infinity. */ +static long_int +long_int_avg (long_int a, long_int b) +{ + return shr (a, 1) + shr (b, 1) + ((a | b) & 1); +} + +/* Return a long_int value corresponding to (YEAR-YDAY HOUR:MIN:SEC) + minus *TP seconds, assuming no clock adjustments occurred between + the two timestamps. + + YEAR and YDAY must not be so large that multiplying them by three times the + number of seconds in a year (or day, respectively) would overflow long_int. + *TP should be in the usual range. */ +static long_int +tm_diff (long_int year, long_int yday, int hour, int min, int sec, + struct tm const *tp) +{ + return ydhms_diff (year, yday, hour, min, sec, + tp->tm_year, tp->tm_yday, + tp->tm_hour, tp->tm_min, tp->tm_sec); +} + +/* Use CONVERT to convert T to a struct tm value in *TM. T must be in + range for time_t. Return TM if successful, NULL (setting errno) on + failure. */ +static struct tm * +convert_time (struct tm *(*convert) (const time_t *, struct tm *), + long_int t, struct tm *tm) +{ + time_t x = t; + return convert (&x, tm); +} + +/* Use CONVERT to convert *T to a broken down time in *TP. + If *T is out of range for conversion, adjust it so that + it is the nearest in-range value and then convert that. + A value is in range if it fits in both time_t and long_int. + Return TP on success, NULL (setting errno) on failure. */ +static struct tm * +ranged_convert (struct tm *(*convert) (const time_t *, struct tm *), + long_int *t, struct tm *tp) +{ + long_int t1 = (*t < mktime_min ? mktime_min + : *t <= mktime_max ? *t : mktime_max); + struct tm *r = convert_time (convert, t1, tp); + if (r) + { + *t = t1; + return r; + } + if (errno != EOVERFLOW) + return NULL; + + long_int bad = t1; + long_int ok = 0; + struct tm oktm; oktm.tm_sec = -1; + + /* BAD is a known out-of-range value, and OK is a known in-range one. + Use binary search to narrow the range between BAD and OK until + they differ by 1. */ + while (true) + { + long_int mid = long_int_avg (ok, bad); + if (mid == ok || mid == bad) + break; + if (convert_time (convert, mid, tp)) + ok = mid, oktm = *tp; + else if (errno != EOVERFLOW) + return NULL; + else + bad = mid; + } + + if (oktm.tm_sec < 0) + return NULL; + *t = ok; + *tp = oktm; + return tp; +} + + +/* Convert *TP to a time_t value, inverting + the monotonic and mostly-unit-linear conversion function CONVERT. + Use *OFFSET to keep track of a guess at the offset of the result, + compared to what the result would be for UTC without leap seconds. + If *OFFSET's guess is correct, only one CONVERT call is needed. + If successful, set *TP to the canonicalized struct tm; + otherwise leave *TP alone, return ((time_t) -1) and set errno. + This function is external because it is used also by timegm.c. */ +time_t +__mktime_internal (struct tm *tp, + struct tm *(*convert) (const time_t *, struct tm *), + mktime_offset_t *offset) +{ + struct tm tm; + + /* The maximum number of probes (calls to CONVERT) should be enough + to handle any combinations of time zone rule changes, solar time, + leap seconds, and oscillations around a spring-forward gap. + POSIX.1 prohibits leap seconds, but some hosts have them anyway. */ + int remaining_probes = 6; + + /* Time requested. Copy it in case CONVERT modifies *TP; this can + occur if TP is localtime's returned value and CONVERT is localtime. */ + int sec = tp->tm_sec; + int min = tp->tm_min; + int hour = tp->tm_hour; + int mday = tp->tm_mday; + int mon = tp->tm_mon; + int year_requested = tp->tm_year; + int isdst = tp->tm_isdst; + + /* 1 if the previous probe was DST. */ + int dst2 = 0; + + /* Ensure that mon is in range, and set year accordingly. */ + int mon_remainder = mon % 12; + int negative_mon_remainder = mon_remainder < 0; + int mon_years = mon / 12 - negative_mon_remainder; + long_int lyear_requested = year_requested; + long_int year = lyear_requested + mon_years; + + /* The other values need not be in range: + the remaining code handles overflows correctly. */ + + /* Calculate day of year from year, month, and day of month. + The result need not be in range. */ + int mon_yday = ((__mon_yday[leapyear (year)] + [mon_remainder + 12 * negative_mon_remainder]) + - 1); + long_int lmday = mday; + long_int yday = mon_yday + lmday; + + mktime_offset_t off = *offset; + int negative_offset_guess; + + int sec_requested = sec; + + if (LEAP_SECONDS_POSSIBLE) + { + /* Handle out-of-range seconds specially, + since ydhms_diff assumes every minute has 60 seconds. */ + if (sec < 0) + sec = 0; + if (59 < sec) + sec = 59; + } + + /* Invert CONVERT by probing. First assume the same offset as last + time. */ + + INT_SUBTRACT_WRAPV (0, off, &negative_offset_guess); + long_int t0 = ydhms_diff (year, yday, hour, min, sec, + EPOCH_YEAR - TM_YEAR_BASE, 0, 0, 0, + negative_offset_guess); + long_int t = t0, t1 = t0, t2 = t0; + + /* Repeatedly use the error to improve the guess. */ + + while (true) + { + if (! ranged_convert (convert, &t, &tm)) + return -1; + long_int dt = tm_diff (year, yday, hour, min, sec, &tm); + if (dt == 0) + break; + + if (t == t1 && t != t2 + && (tm.tm_isdst < 0 + || (isdst < 0 + ? dst2 <= (tm.tm_isdst != 0) + : (isdst != 0) != (tm.tm_isdst != 0)))) + /* We can't possibly find a match, as we are oscillating + between two values. The requested time probably falls + within a spring-forward gap of size DT. Follow the common + practice in this case, which is to return a time that is DT + away from the requested time, preferring a time whose + tm_isdst differs from the requested value. (If no tm_isdst + was requested and only one of the two values has a nonzero + tm_isdst, prefer that value.) In practice, this is more + useful than returning -1. */ + goto offset_found; + + remaining_probes--; + if (remaining_probes == 0) + { + __set_errno (EOVERFLOW); + return -1; + } + + t1 = t2, t2 = t, t += dt, dst2 = tm.tm_isdst != 0; + } + + /* We have a match. Check whether tm.tm_isdst has the requested + value, if any. */ + if (isdst_differ (isdst, tm.tm_isdst)) + { + /* tm.tm_isdst has the wrong value. Look for a neighboring + time with the right value, and use its UTC offset. + + Heuristic: probe the adjacent timestamps in both directions, + looking for the desired isdst. This should work for all real + time zone histories in the tz database. */ + + /* Distance between probes when looking for a DST boundary. In + tzdata2003a, the shortest period of DST is 601200 seconds + (e.g., America/Recife starting 2000-10-08 01:00), and the + shortest period of non-DST surrounded by DST is 694800 + seconds (Africa/Tunis starting 1943-04-17 01:00). Use the + minimum of these two values, so we don't miss these short + periods when probing. */ + int stride = 601200; + + /* The longest period of DST in tzdata2003a is 536454000 seconds + (e.g., America/Jujuy starting 1946-10-01 01:00). The longest + period of non-DST is much longer, but it makes no real sense + to search for more than a year of non-DST, so use the DST + max. */ + int duration_max = 536454000; + + /* Search in both directions, so the maximum distance is half + the duration; add the stride to avoid off-by-1 problems. */ + int delta_bound = duration_max / 2 + stride; + + int delta, direction; + + for (delta = stride; delta < delta_bound; delta += stride) + for (direction = -1; direction <= 1; direction += 2) + { + long_int ot; + if (! INT_ADD_WRAPV (t, delta * direction, &ot)) + { + struct tm otm; + if (! ranged_convert (convert, &ot, &otm)) + return -1; + if (! isdst_differ (isdst, otm.tm_isdst)) + { + /* We found the desired tm_isdst. + Extrapolate back to the desired time. */ + long_int gt = ot + tm_diff (year, yday, hour, min, sec, + &otm); + if (mktime_min <= gt && gt <= mktime_max) + { + if (convert_time (convert, gt, &tm)) + { + t = gt; + goto offset_found; + } + if (errno != EOVERFLOW) + return -1; + } + } + } + } + + __set_errno (EOVERFLOW); + return -1; + } + + offset_found: + /* Set *OFFSET to the low-order bits of T - T0 - NEGATIVE_OFFSET_GUESS. + This is just a heuristic to speed up the next mktime call, and + correctness is unaffected if integer overflow occurs here. */ + INT_SUBTRACT_WRAPV (t, t0, offset); + INT_SUBTRACT_WRAPV (*offset, negative_offset_guess, offset); + + if (LEAP_SECONDS_POSSIBLE && sec_requested != tm.tm_sec) + { + /* Adjust time to reflect the tm_sec requested, not the normalized value. + Also, repair any damage from a false match due to a leap second. */ + long_int sec_adjustment = sec == 0 && tm.tm_sec == 60; + sec_adjustment -= sec; + sec_adjustment += sec_requested; + if (INT_ADD_WRAPV (t, sec_adjustment, &t) + || ! (mktime_min <= t && t <= mktime_max)) + { + __set_errno (EOVERFLOW); + return -1; + } + if (! convert_time (convert, t, &tm)) + return -1; + } + + *tp = tm; + return t; +} + +#endif /* _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_INTERNAL */ + +#if defined _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS + +/* Convert *TP to a time_t value. */ +time_t +mktime (struct tm *tp) +{ + /* POSIX.1 8.1.1 requires that whenever mktime() is called, the + time zone names contained in the external variable 'tzname' shall + be set as if the tzset() function had been called. */ + __tzset (); + +# if defined _LIBC || NEED_MKTIME_WORKING + static mktime_offset_t localtime_offset; + return __mktime_internal (tp, __localtime_r, &localtime_offset); +# else +# undef mktime + return mktime (tp); +# endif +} +#endif /* _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS */ + +#ifdef weak_alias +weak_alias (mktime, timelocal) +#endif + +#ifdef _LIBC +libc_hidden_def (mktime) +libc_hidden_weak (timelocal) +#endif diff --git a/devspec.en_US/project/recutils/lib/msvc-inval.c b/devspec.en_US/project/recutils/lib/msvc-inval.c new file mode 100755 index 0000000..75b5a07 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/msvc-inval.c @@ -0,0 +1,129 @@ +/* Invalid parameter handler for MSVC runtime libraries. + Copyright (C) 2011-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include "msvc-inval.h" + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ + && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) + +/* Get _invalid_parameter_handler type and _set_invalid_parameter_handler + declaration. */ +# include <stdlib.h> + +# if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING + +static void __cdecl +gl_msvc_invalid_parameter_handler (const wchar_t *expression, + const wchar_t *function, + const wchar_t *file, + unsigned int line, + uintptr_t dummy) +{ +} + +# else + +/* Get declarations of the native Windows API functions. */ +# define WIN32_LEAN_AND_MEAN +# include <windows.h> + +# if defined _MSC_VER + +static void __cdecl +gl_msvc_invalid_parameter_handler (const wchar_t *expression, + const wchar_t *function, + const wchar_t *file, + unsigned int line, + uintptr_t dummy) +{ + RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); +} + +# else + +/* An index to thread-local storage. */ +static DWORD tls_index; +static int tls_initialized /* = 0 */; + +/* Used as a fallback only. */ +static struct gl_msvc_inval_per_thread not_per_thread; + +struct gl_msvc_inval_per_thread * +gl_msvc_inval_current (void) +{ + if (!tls_initialized) + { + tls_index = TlsAlloc (); + tls_initialized = 1; + } + if (tls_index == TLS_OUT_OF_INDEXES) + /* TlsAlloc had failed. */ + return ¬_per_thread; + else + { + struct gl_msvc_inval_per_thread *pointer = + (struct gl_msvc_inval_per_thread *) TlsGetValue (tls_index); + if (pointer == NULL) + { + /* First call. Allocate a new 'struct gl_msvc_inval_per_thread'. */ + pointer = + (struct gl_msvc_inval_per_thread *) + malloc (sizeof (struct gl_msvc_inval_per_thread)); + if (pointer == NULL) + /* Could not allocate memory. Use the global storage. */ + pointer = ¬_per_thread; + TlsSetValue (tls_index, pointer); + } + return pointer; + } +} + +static void __cdecl +gl_msvc_invalid_parameter_handler (const wchar_t *expression, + const wchar_t *function, + const wchar_t *file, + unsigned int line, + uintptr_t dummy) +{ + struct gl_msvc_inval_per_thread *current = gl_msvc_inval_current (); + if (current->restart_valid) + longjmp (current->restart, 1); + else + /* An invalid parameter notification from outside the gnulib code. + Give the caller a chance to intervene. */ + RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); +} + +# endif + +# endif + +static int gl_msvc_inval_initialized /* = 0 */; + +void +gl_msvc_inval_ensure_handler (void) +{ + if (gl_msvc_inval_initialized == 0) + { + _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler); + gl_msvc_inval_initialized = 1; + } +} + +#endif diff --git a/devspec.en_US/project/recutils/lib/msvc-inval.h b/devspec.en_US/project/recutils/lib/msvc-inval.h new file mode 100755 index 0000000..e31cf65 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/msvc-inval.h @@ -0,0 +1,222 @@ +/* Invalid parameter handler for MSVC runtime libraries. + Copyright (C) 2011-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _MSVC_INVAL_H +#define _MSVC_INVAL_H + +/* With MSVC runtime libraries with the "invalid parameter handler" concept, + functions like fprintf(), dup2(), or close() crash when the caller passes + an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) + instead. + This file defines macros that turn such an invalid parameter notification + into a non-local exit. An error code can then be produced at the target + of this exit. You can thus write code like + + TRY_MSVC_INVAL + { + <Code that can trigger an invalid parameter notification + but does not do 'return', 'break', 'continue', nor 'goto'.> + } + CATCH_MSVC_INVAL + { + <Code that handles an invalid parameter notification + but does not do 'return', 'break', 'continue', nor 'goto'.> + } + DONE_MSVC_INVAL; + + This entire block expands to a single statement. + + The handling of invalid parameters can be done in three ways: + + * The default way, which is reasonable for programs (not libraries): + AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [DEFAULT_HANDLING]) + + * The way for libraries that make "hairy" calls (like close(-1), or + fclose(fp) where fileno(fp) is closed, or simply getdtablesize()): + AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [HAIRY_LIBRARY_HANDLING]) + + * The way for libraries that make no "hairy" calls: + AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING]) + */ + +#define DEFAULT_HANDLING 0 +#define HAIRY_LIBRARY_HANDLING 1 +#define SANE_LIBRARY_HANDLING 2 + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ + && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) +/* A native Windows platform with the "invalid parameter handler" concept, + and either DEFAULT_HANDLING or HAIRY_LIBRARY_HANDLING. */ + +# if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING +/* Default handling. */ + +# ifdef __cplusplus +extern "C" { +# endif + +/* Ensure that the invalid parameter handler in installed that just returns. + Because we assume no other part of the program installs a different + invalid parameter handler, this solution is multithread-safe. */ +extern void gl_msvc_inval_ensure_handler (void); + +# ifdef __cplusplus +} +# endif + +# define TRY_MSVC_INVAL \ + do \ + { \ + gl_msvc_inval_ensure_handler (); \ + if (1) +# define CATCH_MSVC_INVAL \ + else +# define DONE_MSVC_INVAL \ + } \ + while (0) + +# else +/* Handling for hairy libraries. */ + +# include <excpt.h> + +/* Gnulib can define its own status codes, as described in the page + "Raising Software Exceptions" on microsoft.com + <https://msdn.microsoft.com/en-us/library/het71c37.aspx>. + Our status codes are composed of + - 0xE0000000, mandatory for all user-defined status codes, + - 0x474E550, a API identifier ("GNU"), + - 0, 1, 2, ..., used to distinguish different status codes from the + same API. */ +# define STATUS_GNULIB_INVALID_PARAMETER (0xE0000000 + 0x474E550 + 0) + +# if defined _MSC_VER +/* A compiler that supports __try/__except, as described in the page + "try-except statement" on microsoft.com + <https://msdn.microsoft.com/en-us/library/s58ftw19.aspx>. + With __try/__except, we can use the multithread-safe exception handling. */ + +# ifdef __cplusplus +extern "C" { +# endif + +/* Ensure that the invalid parameter handler in installed that raises a + software exception with code STATUS_GNULIB_INVALID_PARAMETER. + Because we assume no other part of the program installs a different + invalid parameter handler, this solution is multithread-safe. */ +extern void gl_msvc_inval_ensure_handler (void); + +# ifdef __cplusplus +} +# endif + +# define TRY_MSVC_INVAL \ + do \ + { \ + gl_msvc_inval_ensure_handler (); \ + __try +# define CATCH_MSVC_INVAL \ + __except (GetExceptionCode () == STATUS_GNULIB_INVALID_PARAMETER \ + ? EXCEPTION_EXECUTE_HANDLER \ + : EXCEPTION_CONTINUE_SEARCH) +# define DONE_MSVC_INVAL \ + } \ + while (0) + +# else +/* Any compiler. + We can only use setjmp/longjmp. */ + +# include <setjmp.h> + +# ifdef __cplusplus +extern "C" { +# endif + +struct gl_msvc_inval_per_thread +{ + /* The restart that will resume execution at the code between + CATCH_MSVC_INVAL and DONE_MSVC_INVAL. It is enabled only between + TRY_MSVC_INVAL and CATCH_MSVC_INVAL. */ + jmp_buf restart; + + /* Tells whether the contents of restart is valid. */ + int restart_valid; +}; + +/* Ensure that the invalid parameter handler in installed that passes + control to the gl_msvc_inval_restart if it is valid, or raises a + software exception with code STATUS_GNULIB_INVALID_PARAMETER otherwise. + Because we assume no other part of the program installs a different + invalid parameter handler, this solution is multithread-safe. */ +extern void gl_msvc_inval_ensure_handler (void); + +/* Return a pointer to the per-thread data for the current thread. */ +extern struct gl_msvc_inval_per_thread *gl_msvc_inval_current (void); + +# ifdef __cplusplus +} +# endif + +# define TRY_MSVC_INVAL \ + do \ + { \ + struct gl_msvc_inval_per_thread *msvc_inval_current; \ + gl_msvc_inval_ensure_handler (); \ + msvc_inval_current = gl_msvc_inval_current (); \ + /* First, initialize gl_msvc_inval_restart. */ \ + if (setjmp (msvc_inval_current->restart) == 0) \ + { \ + /* Then, mark it as valid. */ \ + msvc_inval_current->restart_valid = 1; +# define CATCH_MSVC_INVAL \ + /* Execution completed. \ + Mark gl_msvc_inval_restart as invalid. */ \ + msvc_inval_current->restart_valid = 0; \ + } \ + else \ + { \ + /* Execution triggered an invalid parameter notification. \ + Mark gl_msvc_inval_restart as invalid. */ \ + msvc_inval_current->restart_valid = 0; +# define DONE_MSVC_INVAL \ + } \ + } \ + while (0) + +# endif + +# endif + +#else +/* A platform that does not need to the invalid parameter handler, + or when SANE_LIBRARY_HANDLING is desired. */ + +/* The braces here avoid GCC warnings like + "warning: suggest explicit braces to avoid ambiguous 'else'". */ +# define TRY_MSVC_INVAL \ + do \ + { \ + if (1) +# define CATCH_MSVC_INVAL \ + else +# define DONE_MSVC_INVAL \ + } \ + while (0) + +#endif + +#endif /* _MSVC_INVAL_H */ diff --git a/devspec.en_US/project/recutils/lib/msvc-nothrow.c b/devspec.en_US/project/recutils/lib/msvc-nothrow.c new file mode 100755 index 0000000..49b709c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/msvc-nothrow.c @@ -0,0 +1,51 @@ +/* Wrappers that don't throw invalid parameter notifications + with MSVC runtime libraries. + Copyright (C) 2011-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include "msvc-nothrow.h" + +/* Get declarations of the native Windows API functions. */ +#define WIN32_LEAN_AND_MEAN +#include <windows.h> + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +#endif + +#undef _get_osfhandle + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +intptr_t +_gl_nothrow_get_osfhandle (int fd) +{ + intptr_t result; + + TRY_MSVC_INVAL + { + result = _get_osfhandle (fd); + } + CATCH_MSVC_INVAL + { + result = (intptr_t) INVALID_HANDLE_VALUE; + } + DONE_MSVC_INVAL; + + return result; +} +#endif diff --git a/devspec.en_US/project/recutils/lib/msvc-nothrow.h b/devspec.en_US/project/recutils/lib/msvc-nothrow.h new file mode 100755 index 0000000..8d3ca78 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/msvc-nothrow.h @@ -0,0 +1,43 @@ +/* Wrappers that don't throw invalid parameter notifications + with MSVC runtime libraries. + Copyright (C) 2011-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _MSVC_NOTHROW_H +#define _MSVC_NOTHROW_H + +/* With MSVC runtime libraries with the "invalid parameter handler" concept, + functions like fprintf(), dup2(), or close() crash when the caller passes + an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) + instead. + This file defines wrappers that turn such an invalid parameter notification + into an error code. */ + +#if defined _WIN32 && ! defined __CYGWIN__ + +/* Get original declaration of _get_osfhandle. */ +# include <io.h> + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER + +/* Override _get_osfhandle. */ +extern intptr_t _gl_nothrow_get_osfhandle (int fd); +# define _get_osfhandle _gl_nothrow_get_osfhandle + +# endif + +#endif + +#endif /* _MSVC_NOTHROW_H */ diff --git a/devspec.en_US/project/recutils/lib/nl_langinfo.c b/devspec.en_US/project/recutils/lib/nl_langinfo.c new file mode 100755 index 0000000..e8a5595 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/nl_langinfo.c @@ -0,0 +1,366 @@ +/* nl_langinfo() replacement: query locale dependent information. + + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <langinfo.h> + +#include <locale.h> +#include <string.h> +#if defined _WIN32 && ! defined __CYGWIN__ +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include <windows.h> +# include <stdio.h> +#endif + +#if !REPLACE_NL_LANGINFO || GNULIB_defined_CODESET +/* Return the codeset of the current locale, if this is easily deducible. + Otherwise, return "". */ +static char * +ctype_codeset (void) +{ + static char buf[2 + 10 + 1]; + char const *locale = setlocale (LC_CTYPE, NULL); + char *codeset = buf; + size_t codesetlen; + codeset[0] = '\0'; + + if (locale && locale[0]) + { + /* If the locale name contains an encoding after the dot, return it. */ + char *dot = strchr (locale, '.'); + + if (dot) + { + /* Look for the possible @... trailer and remove it, if any. */ + char *codeset_start = dot + 1; + char const *modifier = strchr (codeset_start, '@'); + + if (! modifier) + codeset = codeset_start; + else + { + codesetlen = modifier - codeset_start; + if (codesetlen < sizeof buf) + { + codeset = memcpy (buf, codeset_start, codesetlen); + codeset[codesetlen] = '\0'; + } + } + } + } + +# if defined _WIN32 && ! defined __CYGWIN__ + /* If setlocale is successful, it returns the number of the + codepage, as a string. Otherwise, fall back on Windows API + GetACP, which returns the locale's codepage as a number (although + this doesn't change according to what the 'setlocale' call specified). + Either way, prepend "CP" to make it a valid codeset name. */ + codesetlen = strlen (codeset); + if (0 < codesetlen && codesetlen < sizeof buf - 2) + memmove (buf + 2, codeset, codesetlen + 1); + else + sprintf (buf + 2, "%u", GetACP ()); + codeset = memcpy (buf, "CP", 2); +# endif + return codeset; +} +#endif + + +#if REPLACE_NL_LANGINFO + +/* Override nl_langinfo with support for added nl_item values. */ + +# undef nl_langinfo + +char * +rpl_nl_langinfo (nl_item item) +{ + switch (item) + { +# if GNULIB_defined_CODESET + case CODESET: + return ctype_codeset (); +# endif +# if GNULIB_defined_T_FMT_AMPM + case T_FMT_AMPM: + return (char *) "%I:%M:%S %p"; +# endif +# if GNULIB_defined_ALTMON + case ALTMON_1: + case ALTMON_2: + case ALTMON_3: + case ALTMON_4: + case ALTMON_5: + case ALTMON_6: + case ALTMON_7: + case ALTMON_8: + case ALTMON_9: + case ALTMON_10: + case ALTMON_11: + case ALTMON_12: + /* We don't ship the appropriate localizations with gnulib. Therefore, + treat ALTMON_i like MON_i. */ + item = item - ALTMON_1 + MON_1; + break; +# endif +# if GNULIB_defined_ERA + case ERA: + /* The format is not standardized. In glibc it is a sequence of strings + of the form "direction:offset:start_date:end_date:era_name:era_format" + with an empty string at the end. */ + return (char *) ""; + case ERA_D_FMT: + /* The %Ex conversion in strftime behaves like %x if the locale does not + have an alternative time format. */ + item = D_FMT; + break; + case ERA_D_T_FMT: + /* The %Ec conversion in strftime behaves like %c if the locale does not + have an alternative time format. */ + item = D_T_FMT; + break; + case ERA_T_FMT: + /* The %EX conversion in strftime behaves like %X if the locale does not + have an alternative time format. */ + item = T_FMT; + break; + case ALT_DIGITS: + /* The format is not standardized. In glibc it is a sequence of 10 + strings, appended in memory. */ + return (char *) "\0\0\0\0\0\0\0\0\0\0"; +# endif +# if GNULIB_defined_YESEXPR || !FUNC_NL_LANGINFO_YESEXPR_WORKS + case YESEXPR: + return (char *) "^[yY]"; + case NOEXPR: + return (char *) "^[nN]"; +# endif + default: + break; + } + return nl_langinfo (item); +} + +#else + +/* Provide nl_langinfo from scratch, either for native MS-Windows, or + for old Unix platforms without locales, such as Linux libc5 or + BeOS. */ + +# include <time.h> + +char * +nl_langinfo (nl_item item) +{ + static char nlbuf[100]; + struct tm tmm = { 0 }; + + switch (item) + { + /* nl_langinfo items of the LC_CTYPE category */ + case CODESET: + { + char *codeset = ctype_codeset (); + if (*codeset) + return codeset; + } +# ifdef __BEOS__ + return (char *) "UTF-8"; +# else + return (char *) "ISO-8859-1"; +# endif + /* nl_langinfo items of the LC_NUMERIC category */ + case RADIXCHAR: + return localeconv () ->decimal_point; + case THOUSEP: + return localeconv () ->thousands_sep; +# ifdef GROUPING + case GROUPING: + return localeconv () ->grouping; +# endif + /* nl_langinfo items of the LC_TIME category. + TODO: Really use the locale. */ + case D_T_FMT: + case ERA_D_T_FMT: + return (char *) "%a %b %e %H:%M:%S %Y"; + case D_FMT: + case ERA_D_FMT: + return (char *) "%m/%d/%y"; + case T_FMT: + case ERA_T_FMT: + return (char *) "%H:%M:%S"; + case T_FMT_AMPM: + return (char *) "%I:%M:%S %p"; + case AM_STR: + if (!strftime (nlbuf, sizeof nlbuf, "%p", &tmm)) + return (char *) "AM"; + return nlbuf; + case PM_STR: + tmm.tm_hour = 12; + if (!strftime (nlbuf, sizeof nlbuf, "%p", &tmm)) + return (char *) "PM"; + return nlbuf; + case DAY_1: + case DAY_2: + case DAY_3: + case DAY_4: + case DAY_5: + case DAY_6: + case DAY_7: + { + static char const days[][sizeof "Wednesday"] = { + "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", + "Friday", "Saturday" + }; + tmm.tm_wday = item - DAY_1; + if (!strftime (nlbuf, sizeof nlbuf, "%A", &tmm)) + return (char *) days[item - DAY_1]; + return nlbuf; + } + case ABDAY_1: + case ABDAY_2: + case ABDAY_3: + case ABDAY_4: + case ABDAY_5: + case ABDAY_6: + case ABDAY_7: + { + static char const abdays[][sizeof "Sun"] = { + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + }; + tmm.tm_wday = item - ABDAY_1; + if (!strftime (nlbuf, sizeof nlbuf, "%a", &tmm)) + return (char *) abdays[item - ABDAY_1]; + return nlbuf; + } + { + static char const months[][sizeof "September"] = { + "January", "February", "March", "April", "May", "June", "July", + "September", "October", "November", "December" + }; + case MON_1: + case MON_2: + case MON_3: + case MON_4: + case MON_5: + case MON_6: + case MON_7: + case MON_8: + case MON_9: + case MON_10: + case MON_11: + case MON_12: + tmm.tm_mon = item - MON_1; + if (!strftime (nlbuf, sizeof nlbuf, "%B", &tmm)) + return (char *) months[item - MON_1]; + return nlbuf; + case ALTMON_1: + case ALTMON_2: + case ALTMON_3: + case ALTMON_4: + case ALTMON_5: + case ALTMON_6: + case ALTMON_7: + case ALTMON_8: + case ALTMON_9: + case ALTMON_10: + case ALTMON_11: + case ALTMON_12: + tmm.tm_mon = item - ALTMON_1; + /* The platforms without nl_langinfo() don't support strftime with %OB. + We don't even need to try. */ + #if 0 + if (!strftime (nlbuf, sizeof nlbuf, "%OB", &tmm)) + #endif + if (!strftime (nlbuf, sizeof nlbuf, "%B", &tmm)) + return (char *) months[item - ALTMON_1]; + return nlbuf; + } + case ABMON_1: + case ABMON_2: + case ABMON_3: + case ABMON_4: + case ABMON_5: + case ABMON_6: + case ABMON_7: + case ABMON_8: + case ABMON_9: + case ABMON_10: + case ABMON_11: + case ABMON_12: + { + static char const abmonths[][sizeof "Jan"] = { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", + "Sep", "Oct", "Nov", "Dec" + }; + tmm.tm_mon = item - ABMON_1; + if (!strftime (nlbuf, sizeof nlbuf, "%b", &tmm)) + return (char *) abmonths[item - ABMON_1]; + return nlbuf; + } + case ERA: + return (char *) ""; + case ALT_DIGITS: + return (char *) "\0\0\0\0\0\0\0\0\0\0"; + /* nl_langinfo items of the LC_MONETARY category. */ + case CRNCYSTR: + return localeconv () ->currency_symbol; +# ifdef INT_CURR_SYMBOL + case INT_CURR_SYMBOL: + return localeconv () ->int_curr_symbol; + case MON_DECIMAL_POINT: + return localeconv () ->mon_decimal_point; + case MON_THOUSANDS_SEP: + return localeconv () ->mon_thousands_sep; + case MON_GROUPING: + return localeconv () ->mon_grouping; + case POSITIVE_SIGN: + return localeconv () ->positive_sign; + case NEGATIVE_SIGN: + return localeconv () ->negative_sign; + case FRAC_DIGITS: + return & localeconv () ->frac_digits; + case INT_FRAC_DIGITS: + return & localeconv () ->int_frac_digits; + case P_CS_PRECEDES: + return & localeconv () ->p_cs_precedes; + case N_CS_PRECEDES: + return & localeconv () ->n_cs_precedes; + case P_SEP_BY_SPACE: + return & localeconv () ->p_sep_by_space; + case N_SEP_BY_SPACE: + return & localeconv () ->n_sep_by_space; + case P_SIGN_POSN: + return & localeconv () ->p_sign_posn; + case N_SIGN_POSN: + return & localeconv () ->n_sign_posn; +# endif + /* nl_langinfo items of the LC_MESSAGES category + TODO: Really use the locale. */ + case YESEXPR: + return (char *) "^[yY]"; + case NOEXPR: + return (char *) "^[nN]"; + default: + return (char *) ""; + } +} + +#endif diff --git a/devspec.en_US/project/recutils/lib/nstrftime.c b/devspec.en_US/project/recutils/lib/nstrftime.c new file mode 100755 index 0000000..71f778a --- /dev/null +++ b/devspec.en_US/project/recutils/lib/nstrftime.c @@ -0,0 +1,1502 @@ +/* Copyright (C) 1991-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifdef _LIBC +# define USE_IN_EXTENDED_LOCALE_MODEL 1 +# define HAVE_STRUCT_ERA_ENTRY 1 +# define HAVE_TM_GMTOFF 1 +# define HAVE_TM_ZONE 1 +# define HAVE_TZNAME 1 +# define HAVE_TZSET 1 +# include "../locale/localeinfo.h" +#else +# include <config.h> +# if FPRINTFTIME +# include "fprintftime.h" +# else +# include "strftime.h" +# endif +# include "time-internal.h" +#endif + +#include <ctype.h> +#include <time.h> + +#if HAVE_TZNAME && !HAVE_DECL_TZNAME +extern char *tzname[]; +#endif + +/* Do multibyte processing if multibyte encodings are supported, unless + multibyte sequences are safe in formats. Multibyte sequences are + safe if they cannot contain byte sequences that look like format + conversion specifications. The multibyte encodings used by the + C library on the various platforms (UTF-8, GB2312, GBK, CP936, + GB18030, EUC-TW, BIG5, BIG5-HKSCS, CP950, EUC-JP, EUC-KR, CP949, + SHIFT_JIS, CP932, JOHAB) are safe for formats, because the byte '%' + cannot occur in a multibyte character except in the first byte. + + The DEC-HANYU encoding used on OSF/1 is not safe for formats, but + this encoding has never been seen in real-life use, so we ignore + it. */ +#if !(defined __osf__ && 0) +# define MULTIBYTE_IS_FORMAT_SAFE 1 +#endif +#define DO_MULTIBYTE (! MULTIBYTE_IS_FORMAT_SAFE) + +#if DO_MULTIBYTE +# include <wchar.h> + static const mbstate_t mbstate_zero; +#endif + +#include <limits.h> +#include <stddef.h> +#include <stdlib.h> +#include <string.h> +#include <stdbool.h> + +#ifndef FALLTHROUGH +# if __GNUC__ < 7 +# define FALLTHROUGH ((void) 0) +# else +# define FALLTHROUGH __attribute__ ((__fallthrough__)) +# endif +#endif + +#ifdef COMPILE_WIDE +# include <endian.h> +# define CHAR_T wchar_t +# define UCHAR_T unsigned int +# define L_(Str) L##Str +# define NLW(Sym) _NL_W##Sym + +# define MEMCPY(d, s, n) __wmemcpy (d, s, n) +# define STRLEN(s) __wcslen (s) + +#else +# define CHAR_T char +# define UCHAR_T unsigned char +# define L_(Str) Str +# define NLW(Sym) Sym +# define ABALTMON_1 _NL_ABALTMON_1 + +# define MEMCPY(d, s, n) memcpy (d, s, n) +# define STRLEN(s) strlen (s) + +#endif + +/* Shift A right by B bits portably, by dividing A by 2**B and + truncating towards minus infinity. A and B should be free of side + effects, and B should be in the range 0 <= B <= INT_BITS - 2, where + INT_BITS is the number of useful bits in an int. GNU code can + assume that INT_BITS is at least 32. + + ISO C99 says that A >> B is implementation-defined if A < 0. Some + implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift + right in the usual way when A < 0, so SHR falls back on division if + ordinary A >> B doesn't seem to be the usual signed shift. */ +#define SHR(a, b) \ + (-1 >> 1 == -1 \ + ? (a) >> (b) \ + : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0)) + +/* Bound on length of the string representing an integer type or expression T. + Subtract 1 for the sign bit if t is signed; log10 (2.0) < 146/485; + add 1 for integer division truncation; add 1 more for a minus sign + if needed. */ +#define INT_STRLEN_BOUND(t) \ + ((sizeof (t) * CHAR_BIT - 1) * 146 / 485 + 2) + +#define TM_YEAR_BASE 1900 + +#ifndef __isleap +/* Nonzero if YEAR is a leap year (every 4 years, + except every 100th isn't, and every 400th is). */ +# define __isleap(year) \ + ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) +#endif + + +#ifdef _LIBC +# define mktime_z(tz, tm) mktime (tm) +# define tzname __tzname +# define tzset __tzset +#endif + +#ifndef FPRINTFTIME +# define FPRINTFTIME 0 +#endif + +#if FPRINTFTIME +# define STREAM_OR_CHAR_T FILE +# define STRFTIME_ARG(x) /* empty */ +#else +# define STREAM_OR_CHAR_T CHAR_T +# define STRFTIME_ARG(x) x, +#endif + +#if FPRINTFTIME +# define memset_byte(P, Len, Byte) \ + do { size_t _i; for (_i = 0; _i < Len; _i++) fputc (Byte, P); } while (0) +# define memset_space(P, Len) memset_byte (P, Len, ' ') +# define memset_zero(P, Len) memset_byte (P, Len, '0') +#elif defined COMPILE_WIDE +# define memset_space(P, Len) (wmemset (P, L' ', Len), (P) += (Len)) +# define memset_zero(P, Len) (wmemset (P, L'0', Len), (P) += (Len)) +#else +# define memset_space(P, Len) (memset (P, ' ', Len), (P) += (Len)) +# define memset_zero(P, Len) (memset (P, '0', Len), (P) += (Len)) +#endif + +#if FPRINTFTIME +# define advance(P, N) +#else +# define advance(P, N) ((P) += (N)) +#endif + +#define add(n, f) \ + do \ + { \ + size_t _n = (n); \ + size_t _w = (width < 0 ? 0 : width); \ + size_t _incr = _n < _w ? _w : _n; \ + if (_incr >= maxsize - i) \ + return 0; \ + if (p) \ + { \ + if (digits == 0 && _n < _w) \ + { \ + size_t _delta = width - _n; \ + if (pad == L_('0')) \ + memset_zero (p, _delta); \ + else \ + memset_space (p, _delta); \ + } \ + f; \ + advance (p, _n); \ + } \ + i += _incr; \ + } while (0) + +#if FPRINTFTIME +# define add1(C) add (1, fputc (C, p)) +#else +# define add1(C) add (1, *p = C) +#endif + +#if FPRINTFTIME +# define cpy(n, s) \ + add ((n), \ + do \ + { \ + if (to_lowcase) \ + fwrite_lowcase (p, (s), _n); \ + else if (to_uppcase) \ + fwrite_uppcase (p, (s), _n); \ + else \ + { \ + /* Ignore the value of fwrite. The caller can determine whether \ + an error occurred by inspecting ferror (P). All known fwrite \ + implementations set the stream's error indicator when they \ + fail due to ENOMEM etc., even though C11 and POSIX.1-2008 do \ + not require this. */ \ + fwrite (s, _n, 1, p); \ + } \ + } \ + while (0) \ + ) +#else +# define cpy(n, s) \ + add ((n), \ + if (to_lowcase) \ + memcpy_lowcase (p, (s), _n LOCALE_ARG); \ + else if (to_uppcase) \ + memcpy_uppcase (p, (s), _n LOCALE_ARG); \ + else \ + MEMCPY ((void *) p, (void const *) (s), _n)) +#endif + +#ifdef COMPILE_WIDE +# ifndef USE_IN_EXTENDED_LOCALE_MODEL +# undef __mbsrtowcs_l +# define __mbsrtowcs_l(d, s, l, st, loc) __mbsrtowcs (d, s, l, st) +# endif +# define widen(os, ws, l) \ + { \ + mbstate_t __st; \ + const char *__s = os; \ + memset (&__st, '\0', sizeof (__st)); \ + l = __mbsrtowcs_l (NULL, &__s, 0, &__st, loc); \ + ws = (wchar_t *) alloca ((l + 1) * sizeof (wchar_t)); \ + (void) __mbsrtowcs_l (ws, &__s, l, &__st, loc); \ + } +#endif + + +#if defined _LIBC && defined USE_IN_EXTENDED_LOCALE_MODEL +/* We use this code also for the extended locale handling where the + function gets as an additional argument the locale which has to be + used. To access the values we have to redefine the _NL_CURRENT + macro. */ +# define strftime __strftime_l +# define wcsftime __wcsftime_l +# undef _NL_CURRENT +# define _NL_CURRENT(category, item) \ + (current->values[_NL_ITEM_INDEX (item)].string) +# define LOCALE_PARAM , locale_t loc +# define LOCALE_ARG , loc +# define HELPER_LOCALE_ARG , current +#else +# define LOCALE_PARAM +# define LOCALE_ARG +# ifdef _LIBC +# define HELPER_LOCALE_ARG , _NL_CURRENT_DATA (LC_TIME) +# else +# define HELPER_LOCALE_ARG +# endif +#endif + +#ifdef COMPILE_WIDE +# ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define TOUPPER(Ch, L) __towupper_l (Ch, L) +# define TOLOWER(Ch, L) __towlower_l (Ch, L) +# else +# define TOUPPER(Ch, L) towupper (Ch) +# define TOLOWER(Ch, L) towlower (Ch) +# endif +#else +# ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define TOUPPER(Ch, L) __toupper_l (Ch, L) +# define TOLOWER(Ch, L) __tolower_l (Ch, L) +# else +# define TOUPPER(Ch, L) toupper (Ch) +# define TOLOWER(Ch, L) tolower (Ch) +# endif +#endif +/* We don't use 'isdigit' here since the locale dependent + interpretation is not what we want here. We only need to accept + the arabic digits in the ASCII range. One day there is perhaps a + more reliable way to accept other sets of digits. */ +#define ISDIGIT(Ch) ((unsigned int) (Ch) - L_('0') <= 9) + +#if FPRINTFTIME +static void +fwrite_lowcase (FILE *fp, const CHAR_T *src, size_t len) +{ + while (len-- > 0) + { + fputc (TOLOWER ((UCHAR_T) *src, loc), fp); + ++src; + } +} + +static void +fwrite_uppcase (FILE *fp, const CHAR_T *src, size_t len) +{ + while (len-- > 0) + { + fputc (TOUPPER ((UCHAR_T) *src, loc), fp); + ++src; + } +} +#else +static CHAR_T *memcpy_lowcase (CHAR_T *dest, const CHAR_T *src, + size_t len LOCALE_PARAM); + +static CHAR_T * +memcpy_lowcase (CHAR_T *dest, const CHAR_T *src, size_t len LOCALE_PARAM) +{ + while (len-- > 0) + dest[len] = TOLOWER ((UCHAR_T) src[len], loc); + return dest; +} + +static CHAR_T *memcpy_uppcase (CHAR_T *dest, const CHAR_T *src, + size_t len LOCALE_PARAM); + +static CHAR_T * +memcpy_uppcase (CHAR_T *dest, const CHAR_T *src, size_t len LOCALE_PARAM) +{ + while (len-- > 0) + dest[len] = TOUPPER ((UCHAR_T) src[len], loc); + return dest; +} +#endif + + +#if ! HAVE_TM_GMTOFF +/* Yield the difference between *A and *B, + measured in seconds, ignoring leap seconds. */ +# define tm_diff ftime_tm_diff +static int tm_diff (const struct tm *, const struct tm *); +static int +tm_diff (const struct tm *a, const struct tm *b) +{ + /* Compute intervening leap days correctly even if year is negative. + Take care to avoid int overflow in leap day calculations, + but it's OK to assume that A and B are close to each other. */ + int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3); + int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3); + int a100 = a4 / 25 - (a4 % 25 < 0); + int b100 = b4 / 25 - (b4 % 25 < 0); + int a400 = SHR (a100, 2); + int b400 = SHR (b100, 2); + int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); + int years = a->tm_year - b->tm_year; + int days = (365 * years + intervening_leap_days + + (a->tm_yday - b->tm_yday)); + return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour)) + + (a->tm_min - b->tm_min)) + + (a->tm_sec - b->tm_sec)); +} +#endif /* ! HAVE_TM_GMTOFF */ + + + +/* The number of days from the first day of the first ISO week of this + year to the year day YDAY with week day WDAY. ISO weeks start on + Monday; the first ISO week has the year's first Thursday. YDAY may + be as small as YDAY_MINIMUM. */ +#define ISO_WEEK_START_WDAY 1 /* Monday */ +#define ISO_WEEK1_WDAY 4 /* Thursday */ +#define YDAY_MINIMUM (-366) +static int iso_week_days (int, int); +#ifdef __GNUC__ +__inline__ +#endif +static int +iso_week_days (int yday, int wday) +{ + /* Add enough to the first operand of % to make it nonnegative. */ + int big_enough_multiple_of_7 = (-YDAY_MINIMUM / 7 + 2) * 7; + return (yday + - (yday - wday + ISO_WEEK1_WDAY + big_enough_multiple_of_7) % 7 + + ISO_WEEK1_WDAY - ISO_WEEK_START_WDAY); +} + + +/* When compiling this file, GNU applications can #define my_strftime + to a symbol (typically nstrftime) to get an extended strftime with + extra arguments TZ and NS. */ + +#if FPRINTFTIME +# undef my_strftime +# define my_strftime fprintftime +#endif + +#ifdef my_strftime +# undef HAVE_TZSET +# define extra_args , tz, ns +# define extra_args_spec , timezone_t tz, int ns +#else +# if defined COMPILE_WIDE +# define my_strftime wcsftime +# define nl_get_alt_digit _nl_get_walt_digit +# else +# define my_strftime strftime +# define nl_get_alt_digit _nl_get_alt_digit +# endif +# define extra_args +# define extra_args_spec +/* We don't have this information in general. */ +# define tz 1 +# define ns 0 +#endif + +static size_t __strftime_internal (STREAM_OR_CHAR_T *, STRFTIME_ARG (size_t) + const CHAR_T *, const struct tm *, + bool, bool * + extra_args_spec LOCALE_PARAM); + +/* Write information from TP into S according to the format + string FORMAT, writing no more that MAXSIZE characters + (including the terminating '\0') and returning number of + characters written. If S is NULL, nothing will be written + anywhere, so to determine how many characters would be + written, use NULL for S and (size_t) -1 for MAXSIZE. */ +size_t +my_strftime (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize) + const CHAR_T *format, + const struct tm *tp extra_args_spec LOCALE_PARAM) +{ + bool tzset_called = false; + return __strftime_internal (s, STRFTIME_ARG (maxsize) format, tp, + false, &tzset_called extra_args LOCALE_ARG); +} +#if defined _LIBC && ! FPRINTFTIME +libc_hidden_def (my_strftime) +#endif + +/* Just like my_strftime, above, but with two more parameters. + UPCASE indicate that the result should be converted to upper case, + and *TZSET_CALLED indicates whether tzset has been called here. */ +static size_t +__strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize) + const CHAR_T *format, + const struct tm *tp, bool upcase, bool *tzset_called + extra_args_spec LOCALE_PARAM) +{ +#if defined _LIBC && defined USE_IN_EXTENDED_LOCALE_MODEL + struct __locale_data *const current = loc->__locales[LC_TIME]; +#endif +#if FPRINTFTIME + size_t maxsize = (size_t) -1; +#endif + + int hour12 = tp->tm_hour; +#ifdef _NL_CURRENT + /* We cannot make the following values variables since we must delay + the evaluation of these values until really needed since some + expressions might not be valid in every situation. The 'struct tm' + might be generated by a strptime() call that initialized + only a few elements. Dereference the pointers only if the format + requires this. Then it is ok to fail if the pointers are invalid. */ +# define a_wkday \ + ((const CHAR_T *) (tp->tm_wday < 0 || tp->tm_wday > 6 \ + ? "?" : _NL_CURRENT (LC_TIME, NLW(ABDAY_1) + tp->tm_wday))) +# define f_wkday \ + ((const CHAR_T *) (tp->tm_wday < 0 || tp->tm_wday > 6 \ + ? "?" : _NL_CURRENT (LC_TIME, NLW(DAY_1) + tp->tm_wday))) +# define a_month \ + ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ + ? "?" : _NL_CURRENT (LC_TIME, NLW(ABMON_1) + tp->tm_mon))) +# define f_month \ + ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ + ? "?" : _NL_CURRENT (LC_TIME, NLW(MON_1) + tp->tm_mon))) +# define a_altmonth \ + ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ + ? "?" : _NL_CURRENT (LC_TIME, NLW(ABALTMON_1) + tp->tm_mon))) +# define f_altmonth \ + ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ + ? "?" : _NL_CURRENT (LC_TIME, NLW(ALTMON_1) + tp->tm_mon))) +# define ampm \ + ((const CHAR_T *) _NL_CURRENT (LC_TIME, tp->tm_hour > 11 \ + ? NLW(PM_STR) : NLW(AM_STR))) + +# define aw_len STRLEN (a_wkday) +# define am_len STRLEN (a_month) +# define aam_len STRLEN (a_altmonth) +# define ap_len STRLEN (ampm) +#endif +#if HAVE_TZNAME + char **tzname_vec = tzname; +#endif + const char *zone; + size_t i = 0; + STREAM_OR_CHAR_T *p = s; + const CHAR_T *f; +#if DO_MULTIBYTE && !defined COMPILE_WIDE + const char *format_end = NULL; +#endif + +#if ! defined _LIBC && ! HAVE_RUN_TZSET_TEST + /* Solaris 2.5.x and 2.6 tzset sometimes modify the storage returned + by localtime. On such systems, we must either use the tzset and + localtime wrappers to work around the bug (which sets + HAVE_RUN_TZSET_TEST) or make a copy of the structure. */ + struct tm copy = *tp; + tp = © +#endif + + zone = NULL; +#if HAVE_TM_ZONE + /* The POSIX test suite assumes that setting + the environment variable TZ to a new value before calling strftime() + will influence the result (the %Z format) even if the information in + TP is computed with a totally different time zone. + This is bogus: though POSIX allows bad behavior like this, + POSIX does not require it. Do the right thing instead. */ + zone = (const char *) tp->tm_zone; +#endif +#if HAVE_TZNAME + if (!tz) + { + if (! (zone && *zone)) + zone = "GMT"; + } + else + { +# if !HAVE_TM_ZONE + /* Infer the zone name from *TZ instead of from TZNAME. */ + tzname_vec = tz->tzname_copy; +# endif + } + /* The tzset() call might have changed the value. */ + if (!(zone && *zone) && tp->tm_isdst >= 0) + { + /* POSIX.1 requires that local time zone information be used as + though strftime called tzset. */ +# if HAVE_TZSET + if (!*tzset_called) + { + tzset (); + *tzset_called = true; + } +# endif + zone = tzname_vec[tp->tm_isdst != 0]; + } +#endif + if (! zone) + zone = ""; + + if (hour12 > 12) + hour12 -= 12; + else + if (hour12 == 0) + hour12 = 12; + + for (f = format; *f != '\0'; ++f) + { + int pad = 0; /* Padding for number ('-', '_', or 0). */ + int modifier; /* Field modifier ('E', 'O', or 0). */ + int digits = 0; /* Max digits for numeric format. */ + int number_value; /* Numeric value to be printed. */ + unsigned int u_number_value; /* (unsigned int) number_value. */ + bool negative_number; /* The number is negative. */ + bool always_output_a_sign; /* +/- should always be output. */ + int tz_colon_mask; /* Bitmask of where ':' should appear. */ + const CHAR_T *subfmt; + CHAR_T sign_char; + CHAR_T *bufp; + CHAR_T buf[1 + + 2 /* for the two colons in a %::z or %:::z time zone */ + + (sizeof (int) < sizeof (time_t) + ? INT_STRLEN_BOUND (time_t) + : INT_STRLEN_BOUND (int))]; + int width = -1; + bool to_lowcase = false; + bool to_uppcase = upcase; + size_t colons; + bool change_case = false; + int format_char; + +#if DO_MULTIBYTE && !defined COMPILE_WIDE + switch (*f) + { + case L_('%'): + break; + + case L_('\b'): case L_('\t'): case L_('\n'): + case L_('\v'): case L_('\f'): case L_('\r'): + case L_(' '): case L_('!'): case L_('"'): case L_('#'): case L_('&'): + case L_('\''): case L_('('): case L_(')'): case L_('*'): case L_('+'): + case L_(','): case L_('-'): case L_('.'): case L_('/'): case L_('0'): + case L_('1'): case L_('2'): case L_('3'): case L_('4'): case L_('5'): + case L_('6'): case L_('7'): case L_('8'): case L_('9'): case L_(':'): + case L_(';'): case L_('<'): case L_('='): case L_('>'): case L_('?'): + case L_('A'): case L_('B'): case L_('C'): case L_('D'): case L_('E'): + case L_('F'): case L_('G'): case L_('H'): case L_('I'): case L_('J'): + case L_('K'): case L_('L'): case L_('M'): case L_('N'): case L_('O'): + case L_('P'): case L_('Q'): case L_('R'): case L_('S'): case L_('T'): + case L_('U'): case L_('V'): case L_('W'): case L_('X'): case L_('Y'): + case L_('Z'): case L_('['): case L_('\\'): case L_(']'): case L_('^'): + case L_('_'): case L_('a'): case L_('b'): case L_('c'): case L_('d'): + case L_('e'): case L_('f'): case L_('g'): case L_('h'): case L_('i'): + case L_('j'): case L_('k'): case L_('l'): case L_('m'): case L_('n'): + case L_('o'): case L_('p'): case L_('q'): case L_('r'): case L_('s'): + case L_('t'): case L_('u'): case L_('v'): case L_('w'): case L_('x'): + case L_('y'): case L_('z'): case L_('{'): case L_('|'): case L_('}'): + case L_('~'): + /* The C Standard requires these 98 characters (plus '%') to + be in the basic execution character set. None of these + characters can start a multibyte sequence, so they need + not be analyzed further. */ + add1 (*f); + continue; + + default: + /* Copy this multibyte sequence until we reach its end, find + an error, or come back to the initial shift state. */ + { + mbstate_t mbstate = mbstate_zero; + size_t len = 0; + size_t fsize; + + if (! format_end) + format_end = f + strlen (f) + 1; + fsize = format_end - f; + + do + { + size_t bytes = mbrlen (f + len, fsize - len, &mbstate); + + if (bytes == 0) + break; + + if (bytes == (size_t) -2) + { + len += strlen (f + len); + break; + } + + if (bytes == (size_t) -1) + { + len++; + break; + } + + len += bytes; + } + while (! mbsinit (&mbstate)); + + cpy (len, f); + f += len - 1; + continue; + } + } + +#else /* ! DO_MULTIBYTE */ + + /* Either multibyte encodings are not supported, they are + safe for formats, so any non-'%' byte can be copied through, + or this is the wide character version. */ + if (*f != L_('%')) + { + add1 (*f); + continue; + } + +#endif /* ! DO_MULTIBYTE */ + + /* Check for flags that can modify a format. */ + while (1) + { + switch (*++f) + { + /* This influences the number formats. */ + case L_('_'): + case L_('-'): + case L_('0'): + pad = *f; + continue; + + /* This changes textual output. */ + case L_('^'): + to_uppcase = true; + continue; + case L_('#'): + change_case = true; + continue; + + default: + break; + } + break; + } + + /* As a GNU extension we allow the field width to be specified. */ + if (ISDIGIT (*f)) + { + width = 0; + do + { + if (width > INT_MAX / 10 + || (width == INT_MAX / 10 && *f - L_('0') > INT_MAX % 10)) + /* Avoid overflow. */ + width = INT_MAX; + else + { + width *= 10; + width += *f - L_('0'); + } + ++f; + } + while (ISDIGIT (*f)); + } + + /* Check for modifiers. */ + switch (*f) + { + case L_('E'): + case L_('O'): + modifier = *f++; + break; + + default: + modifier = 0; + break; + } + + /* Now do the specified format. */ + format_char = *f; + switch (format_char) + { +#define DO_NUMBER(d, v) \ + do \ + { \ + digits = d; \ + number_value = v; \ + goto do_number; \ + } \ + while (0) +#define DO_SIGNED_NUMBER(d, negative, v) \ + do \ + { \ + digits = d; \ + negative_number = negative; \ + u_number_value = v; \ + goto do_signed_number; \ + } \ + while (0) + + /* The mask is not what you might think. + When the ordinal i'th bit is set, insert a colon + before the i'th digit of the time zone representation. */ +#define DO_TZ_OFFSET(d, mask, v) \ + do \ + { \ + digits = d; \ + tz_colon_mask = mask; \ + u_number_value = v; \ + goto do_tz_offset; \ + } \ + while (0) +#define DO_NUMBER_SPACEPAD(d, v) \ + do \ + { \ + digits = d; \ + number_value = v; \ + goto do_number_spacepad; \ + } \ + while (0) + + case L_('%'): + if (modifier != 0) + goto bad_format; + add1 (*f); + break; + + case L_('a'): + if (modifier != 0) + goto bad_format; + if (change_case) + { + to_uppcase = true; + to_lowcase = false; + } +#ifdef _NL_CURRENT + cpy (aw_len, a_wkday); + break; +#else + goto underlying_strftime; +#endif + + case 'A': + if (modifier != 0) + goto bad_format; + if (change_case) + { + to_uppcase = true; + to_lowcase = false; + } +#ifdef _NL_CURRENT + cpy (STRLEN (f_wkday), f_wkday); + break; +#else + goto underlying_strftime; +#endif + + case L_('b'): + case L_('h'): + if (change_case) + { + to_uppcase = true; + to_lowcase = false; + } + if (modifier == L_('E')) + goto bad_format; +#ifdef _NL_CURRENT + if (modifier == L_('O')) + cpy (aam_len, a_altmonth); + else + cpy (am_len, a_month); + break; +#else + goto underlying_strftime; +#endif + + case L_('B'): + if (modifier == L_('E')) + goto bad_format; + if (change_case) + { + to_uppcase = true; + to_lowcase = false; + } +#ifdef _NL_CURRENT + if (modifier == L_('O')) + cpy (STRLEN (f_altmonth), f_altmonth); + else + cpy (STRLEN (f_month), f_month); + break; +#else + goto underlying_strftime; +#endif + + case L_('c'): + if (modifier == L_('O')) + goto bad_format; +#ifdef _NL_CURRENT + if (! (modifier == 'E' + && (*(subfmt = + (const CHAR_T *) _NL_CURRENT (LC_TIME, + NLW(ERA_D_T_FMT))) + != '\0'))) + subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(D_T_FMT)); +#else + goto underlying_strftime; +#endif + + subformat: + { + size_t len = __strftime_internal (NULL, STRFTIME_ARG ((size_t) -1) + subfmt, + tp, to_uppcase, tzset_called + extra_args LOCALE_ARG); + add (len, __strftime_internal (p, + STRFTIME_ARG (maxsize - i) + subfmt, + tp, to_uppcase, tzset_called + extra_args LOCALE_ARG)); + } + break; + +#if !(defined _NL_CURRENT && HAVE_STRUCT_ERA_ENTRY) + underlying_strftime: + { + /* The relevant information is available only via the + underlying strftime implementation, so use that. */ + char ufmt[5]; + char *u = ufmt; + char ubuf[1024]; /* enough for any single format in practice */ + size_t len; + /* Make sure we're calling the actual underlying strftime. + In some cases, config.h contains something like + "#define strftime rpl_strftime". */ +# ifdef strftime +# undef strftime + size_t strftime (); +# endif + + /* The space helps distinguish strftime failure from empty + output. */ + *u++ = ' '; + *u++ = '%'; + if (modifier != 0) + *u++ = modifier; + *u++ = format_char; + *u = '\0'; + len = strftime (ubuf, sizeof ubuf, ufmt, tp); + if (len != 0) + cpy (len - 1, ubuf + 1); + } + break; +#endif + + case L_('C'): + if (modifier == L_('E')) + { +#if HAVE_STRUCT_ERA_ENTRY + struct era_entry *era = _nl_get_era_entry (tp HELPER_LOCALE_ARG); + if (era) + { +# ifdef COMPILE_WIDE + size_t len = __wcslen (era->era_wname); + cpy (len, era->era_wname); +# else + size_t len = strlen (era->era_name); + cpy (len, era->era_name); +# endif + break; + } +#else + goto underlying_strftime; +#endif + } + + { + int century = tp->tm_year / 100 + TM_YEAR_BASE / 100; + century -= tp->tm_year % 100 < 0 && 0 < century; + DO_SIGNED_NUMBER (2, tp->tm_year < - TM_YEAR_BASE, century); + } + + case L_('x'): + if (modifier == L_('O')) + goto bad_format; +#ifdef _NL_CURRENT + if (! (modifier == L_('E') + && (*(subfmt = + (const CHAR_T *)_NL_CURRENT (LC_TIME, NLW(ERA_D_FMT))) + != L_('\0')))) + subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(D_FMT)); + goto subformat; +#else + goto underlying_strftime; +#endif + case L_('D'): + if (modifier != 0) + goto bad_format; + subfmt = L_("%m/%d/%y"); + goto subformat; + + case L_('d'): + if (modifier == L_('E')) + goto bad_format; + + DO_NUMBER (2, tp->tm_mday); + + case L_('e'): + if (modifier == L_('E')) + goto bad_format; + + DO_NUMBER_SPACEPAD (2, tp->tm_mday); + + /* All numeric formats set DIGITS and NUMBER_VALUE (or U_NUMBER_VALUE) + and then jump to one of these labels. */ + + do_tz_offset: + always_output_a_sign = true; + goto do_number_body; + + do_number_spacepad: + /* Force '_' flag unless overridden by '0' or '-' flag. */ + if (pad != L_('0') && pad != L_('-')) + pad = L_('_'); + + do_number: + /* Format NUMBER_VALUE according to the MODIFIER flag. */ + negative_number = number_value < 0; + u_number_value = number_value; + + do_signed_number: + always_output_a_sign = false; + tz_colon_mask = 0; + + do_number_body: + /* Format U_NUMBER_VALUE according to the MODIFIER flag. + NEGATIVE_NUMBER is nonzero if the original number was + negative; in this case it was converted directly to + unsigned int (i.e., modulo (UINT_MAX + 1)) without + negating it. */ + if (modifier == L_('O') && !negative_number) + { +#ifdef _NL_CURRENT + /* Get the locale specific alternate representation of + the number. If none exist NULL is returned. */ + const CHAR_T *cp = nl_get_alt_digit (u_number_value + HELPER_LOCALE_ARG); + + if (cp != NULL) + { + size_t digitlen = STRLEN (cp); + if (digitlen != 0) + { + cpy (digitlen, cp); + break; + } + } +#else + goto underlying_strftime; +#endif + } + + bufp = buf + sizeof (buf) / sizeof (buf[0]); + + if (negative_number) + u_number_value = - u_number_value; + + do + { + if (tz_colon_mask & 1) + *--bufp = ':'; + tz_colon_mask >>= 1; + *--bufp = u_number_value % 10 + L_('0'); + u_number_value /= 10; + } + while (u_number_value != 0 || tz_colon_mask != 0); + + do_number_sign_and_padding: + if (digits < width) + digits = width; + + sign_char = (negative_number ? L_('-') + : always_output_a_sign ? L_('+') + : 0); + + if (pad == L_('-')) + { + if (sign_char) + add1 (sign_char); + } + else + { + int padding = digits - (buf + (sizeof (buf) / sizeof (buf[0])) + - bufp) - !!sign_char; + + if (padding > 0) + { + if (pad == L_('_')) + { + if ((size_t) padding >= maxsize - i) + return 0; + + if (p) + memset_space (p, padding); + i += padding; + width = width > padding ? width - padding : 0; + if (sign_char) + add1 (sign_char); + } + else + { + if ((size_t) digits >= maxsize - i) + return 0; + + if (sign_char) + add1 (sign_char); + + if (p) + memset_zero (p, padding); + i += padding; + width = 0; + } + } + else + { + if (sign_char) + add1 (sign_char); + } + } + + cpy (buf + sizeof (buf) / sizeof (buf[0]) - bufp, bufp); + break; + + case L_('F'): + if (modifier != 0) + goto bad_format; + subfmt = L_("%Y-%m-%d"); + goto subformat; + + case L_('H'): + if (modifier == L_('E')) + goto bad_format; + + DO_NUMBER (2, tp->tm_hour); + + case L_('I'): + if (modifier == L_('E')) + goto bad_format; + + DO_NUMBER (2, hour12); + + case L_('k'): /* GNU extension. */ + if (modifier == L_('E')) + goto bad_format; + + DO_NUMBER_SPACEPAD (2, tp->tm_hour); + + case L_('l'): /* GNU extension. */ + if (modifier == L_('E')) + goto bad_format; + + DO_NUMBER_SPACEPAD (2, hour12); + + case L_('j'): + if (modifier == L_('E')) + goto bad_format; + + DO_SIGNED_NUMBER (3, tp->tm_yday < -1, tp->tm_yday + 1U); + + case L_('M'): + if (modifier == L_('E')) + goto bad_format; + + DO_NUMBER (2, tp->tm_min); + + case L_('m'): + if (modifier == L_('E')) + goto bad_format; + + DO_SIGNED_NUMBER (2, tp->tm_mon < -1, tp->tm_mon + 1U); + +#ifndef _LIBC + case L_('N'): /* GNU extension. */ + if (modifier == L_('E')) + goto bad_format; + + number_value = ns; + if (width == -1) + width = 9; + else + { + /* Take an explicit width less than 9 as a precision. */ + int j; + for (j = width; j < 9; j++) + number_value /= 10; + } + + DO_NUMBER (width, number_value); +#endif + + case L_('n'): + add1 (L_('\n')); + break; + + case L_('P'): + to_lowcase = true; +#ifndef _NL_CURRENT + format_char = L_('p'); +#endif + FALLTHROUGH; + case L_('p'): + if (change_case) + { + to_uppcase = false; + to_lowcase = true; + } +#ifdef _NL_CURRENT + cpy (ap_len, ampm); + break; +#else + goto underlying_strftime; +#endif + + case L_('q'): /* GNU extension. */ + DO_SIGNED_NUMBER (1, false, ((tp->tm_mon * 11) >> 5) + 1); + break; + + case L_('R'): + subfmt = L_("%H:%M"); + goto subformat; + + case L_('r'): +#ifdef _NL_CURRENT + if (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, + NLW(T_FMT_AMPM))) + == L_('\0')) + subfmt = L_("%I:%M:%S %p"); + goto subformat; +#else + goto underlying_strftime; +#endif + + case L_('S'): + if (modifier == L_('E')) + goto bad_format; + + DO_NUMBER (2, tp->tm_sec); + + case L_('s'): /* GNU extension. */ + { + struct tm ltm; + time_t t; + + ltm = *tp; + t = mktime_z (tz, <m); + + /* Generate string value for T using time_t arithmetic; + this works even if sizeof (long) < sizeof (time_t). */ + + bufp = buf + sizeof (buf) / sizeof (buf[0]); + negative_number = t < 0; + + do + { + int d = t % 10; + t /= 10; + *--bufp = (negative_number ? -d : d) + L_('0'); + } + while (t != 0); + + digits = 1; + always_output_a_sign = false; + goto do_number_sign_and_padding; + } + + case L_('X'): + if (modifier == L_('O')) + goto bad_format; +#ifdef _NL_CURRENT + if (! (modifier == L_('E') + && (*(subfmt = + (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ERA_T_FMT))) + != L_('\0')))) + subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(T_FMT)); + goto subformat; +#else + goto underlying_strftime; +#endif + case L_('T'): + subfmt = L_("%H:%M:%S"); + goto subformat; + + case L_('t'): + add1 (L_('\t')); + break; + + case L_('u'): + DO_NUMBER (1, (tp->tm_wday - 1 + 7) % 7 + 1); + + case L_('U'): + if (modifier == L_('E')) + goto bad_format; + + DO_NUMBER (2, (tp->tm_yday - tp->tm_wday + 7) / 7); + + case L_('V'): + case L_('g'): + case L_('G'): + if (modifier == L_('E')) + goto bad_format; + { + /* YEAR is a leap year if and only if (tp->tm_year + TM_YEAR_BASE) + is a leap year, except that YEAR and YEAR - 1 both work + correctly even when (tp->tm_year + TM_YEAR_BASE) would + overflow. */ + int year = (tp->tm_year + + (tp->tm_year < 0 + ? TM_YEAR_BASE % 400 + : TM_YEAR_BASE % 400 - 400)); + int year_adjust = 0; + int days = iso_week_days (tp->tm_yday, tp->tm_wday); + + if (days < 0) + { + /* This ISO week belongs to the previous year. */ + year_adjust = -1; + days = iso_week_days (tp->tm_yday + (365 + __isleap (year - 1)), + tp->tm_wday); + } + else + { + int d = iso_week_days (tp->tm_yday - (365 + __isleap (year)), + tp->tm_wday); + if (0 <= d) + { + /* This ISO week belongs to the next year. */ + year_adjust = 1; + days = d; + } + } + + switch (*f) + { + case L_('g'): + { + int yy = (tp->tm_year % 100 + year_adjust) % 100; + DO_NUMBER (2, (0 <= yy + ? yy + : tp->tm_year < -TM_YEAR_BASE - year_adjust + ? -yy + : yy + 100)); + } + + case L_('G'): + DO_SIGNED_NUMBER (4, tp->tm_year < -TM_YEAR_BASE - year_adjust, + (tp->tm_year + (unsigned int) TM_YEAR_BASE + + year_adjust)); + + default: + DO_NUMBER (2, days / 7 + 1); + } + } + + case L_('W'): + if (modifier == L_('E')) + goto bad_format; + + DO_NUMBER (2, (tp->tm_yday - (tp->tm_wday - 1 + 7) % 7 + 7) / 7); + + case L_('w'): + if (modifier == L_('E')) + goto bad_format; + + DO_NUMBER (1, tp->tm_wday); + + case L_('Y'): + if (modifier == 'E') + { +#if HAVE_STRUCT_ERA_ENTRY + struct era_entry *era = _nl_get_era_entry (tp HELPER_LOCALE_ARG); + if (era) + { +# ifdef COMPILE_WIDE + subfmt = era->era_wformat; +# else + subfmt = era->era_format; +# endif + goto subformat; + } +#else + goto underlying_strftime; +#endif + } + if (modifier == L_('O')) + goto bad_format; + + DO_SIGNED_NUMBER (4, tp->tm_year < -TM_YEAR_BASE, + tp->tm_year + (unsigned int) TM_YEAR_BASE); + + case L_('y'): + if (modifier == L_('E')) + { +#if HAVE_STRUCT_ERA_ENTRY + struct era_entry *era = _nl_get_era_entry (tp HELPER_LOCALE_ARG); + if (era) + { + int delta = tp->tm_year - era->start_date[0]; + DO_NUMBER (1, (era->offset + + delta * era->absolute_direction)); + } +#else + goto underlying_strftime; +#endif + } + + { + int yy = tp->tm_year % 100; + if (yy < 0) + yy = tp->tm_year < - TM_YEAR_BASE ? -yy : yy + 100; + DO_NUMBER (2, yy); + } + + case L_('Z'): + if (change_case) + { + to_uppcase = false; + to_lowcase = true; + } + +#ifdef COMPILE_WIDE + { + /* The zone string is always given in multibyte form. We have + to transform it first. */ + wchar_t *wczone; + size_t len; + widen (zone, wczone, len); + cpy (len, wczone); + } +#else + cpy (strlen (zone), zone); +#endif + break; + + case L_(':'): + /* :, ::, and ::: are valid only just before 'z'. + :::: etc. are rejected later. */ + for (colons = 1; f[colons] == L_(':'); colons++) + continue; + if (f[colons] != L_('z')) + goto bad_format; + f += colons; + goto do_z_conversion; + + case L_('z'): + colons = 0; + + do_z_conversion: + if (tp->tm_isdst < 0) + break; + + { + int diff; + int hour_diff; + int min_diff; + int sec_diff; +#if HAVE_TM_GMTOFF + diff = tp->tm_gmtoff; +#else + if (!tz) + diff = 0; + else + { + struct tm gtm; + struct tm ltm; + time_t lt; + + /* POSIX.1 requires that local time zone information be used as + though strftime called tzset. */ +# if HAVE_TZSET + if (!*tzset_called) + { + tzset (); + *tzset_called = true; + } +# endif + + ltm = *tp; + ltm.tm_wday = -1; + lt = mktime_z (tz, <m); + if (ltm.tm_wday < 0 || ! localtime_rz (0, <, >m)) + break; + diff = tm_diff (<m, >m); + } +#endif + + negative_number = diff < 0 || (diff == 0 && *zone == '-'); + hour_diff = diff / 60 / 60; + min_diff = diff / 60 % 60; + sec_diff = diff % 60; + + switch (colons) + { + case 0: /* +hhmm */ + DO_TZ_OFFSET (5, 0, hour_diff * 100 + min_diff); + + case 1: tz_hh_mm: /* +hh:mm */ + DO_TZ_OFFSET (6, 04, hour_diff * 100 + min_diff); + + case 2: tz_hh_mm_ss: /* +hh:mm:ss */ + DO_TZ_OFFSET (9, 024, + hour_diff * 10000 + min_diff * 100 + sec_diff); + + case 3: /* +hh if possible, else +hh:mm, else +hh:mm:ss */ + if (sec_diff != 0) + goto tz_hh_mm_ss; + if (min_diff != 0) + goto tz_hh_mm; + DO_TZ_OFFSET (3, 0, hour_diff); + + default: + goto bad_format; + } + } + + case L_('\0'): /* GNU extension: % at end of format. */ + --f; + FALLTHROUGH; + default: + /* Unknown format; output the format, including the '%', + since this is most likely the right thing to do if a + multibyte string has been misparsed. */ + bad_format: + { + int flen; + for (flen = 1; f[1 - flen] != L_('%'); flen++) + continue; + cpy (flen, &f[1 - flen]); + } + break; + } + } + +#if ! FPRINTFTIME + if (p && maxsize != 0) + *p = L_('\0'); +#endif + + return i; +} diff --git a/devspec.en_US/project/recutils/lib/obstack.c b/devspec.en_US/project/recutils/lib/obstack.c new file mode 100755 index 0000000..abdd713 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/obstack.c @@ -0,0 +1,354 @@ +/* obstack.c - subroutines used implicitly by object stack macros + Copyright (C) 1988-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + + +#ifdef _LIBC +# include <obstack.h> +#else +# include <config.h> +# include "obstack.h" +#endif + +/* NOTE BEFORE MODIFYING THIS FILE: _OBSTACK_INTERFACE_VERSION in + obstack.h must be incremented whenever callers compiled using an old + obstack.h can no longer properly call the functions in this file. */ + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself, and the installed library + supports the same library interface we do. This code is part of the GNU + C Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand 'configure --with-gnu-libc' and omit the object + files, it is simpler to just do this in the source for each such file. */ +#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1 +# include <gnu-versions.h> +# if (_GNU_OBSTACK_INTERFACE_VERSION == _OBSTACK_INTERFACE_VERSION \ + || (_GNU_OBSTACK_INTERFACE_VERSION == 1 \ + && _OBSTACK_INTERFACE_VERSION == 2 \ + && defined SIZEOF_INT && defined SIZEOF_SIZE_T \ + && SIZEOF_INT == SIZEOF_SIZE_T)) +# define _OBSTACK_ELIDE_CODE +# endif +#endif + +#ifndef _OBSTACK_ELIDE_CODE +/* If GCC, or if an oddball (testing?) host that #defines __alignof__, + use the already-supplied __alignof__. Otherwise, this must be Gnulib + (as glibc assumes GCC); defer to Gnulib's alignof_type. */ +# if !defined __GNUC__ && !defined __alignof__ +# include <alignof.h> +# define __alignof__(type) alignof_type (type) +# endif +# include <stdlib.h> +# include <stdint.h> + +# ifndef MAX +# define MAX(a,b) ((a) > (b) ? (a) : (b)) +# endif + +/* Determine default alignment. */ + +/* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT. + But in fact it might be less smart and round addresses to as much as + DEFAULT_ROUNDING. So we prepare for it to do that. + + DEFAULT_ALIGNMENT cannot be an enum constant; see gnulib's alignof.h. */ +#define DEFAULT_ALIGNMENT MAX (__alignof__ (long double), \ + MAX (__alignof__ (uintmax_t), \ + __alignof__ (void *))) +#define DEFAULT_ROUNDING MAX (sizeof (long double), \ + MAX (sizeof (uintmax_t), \ + sizeof (void *))) + +/* Call functions with either the traditional malloc/free calling + interface, or the mmalloc/mfree interface (that adds an extra first + argument), based on the value of use_extra_arg. */ + +static void * +call_chunkfun (struct obstack *h, size_t size) +{ + if (h->use_extra_arg) + return h->chunkfun.extra (h->extra_arg, size); + else + return h->chunkfun.plain (size); +} + +static void +call_freefun (struct obstack *h, void *old_chunk) +{ + if (h->use_extra_arg) + h->freefun.extra (h->extra_arg, old_chunk); + else + h->freefun.plain (old_chunk); +} + + +/* Initialize an obstack H for use. Specify chunk size SIZE (0 means default). + Objects start on multiples of ALIGNMENT (0 means use default). + + Return nonzero if successful, calls obstack_alloc_failed_handler if + allocation fails. */ + +static int +_obstack_begin_worker (struct obstack *h, + _OBSTACK_SIZE_T size, _OBSTACK_SIZE_T alignment) +{ + struct _obstack_chunk *chunk; /* points to new chunk */ + + if (alignment == 0) + alignment = DEFAULT_ALIGNMENT; + if (size == 0) + /* Default size is what GNU malloc can fit in a 4096-byte block. */ + { + /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc. + Use the values for range checking, because if range checking is off, + the extra bytes won't be missed terribly, but if range checking is on + and we used a larger request, a whole extra 4096 bytes would be + allocated. + + These number are irrelevant to the new GNU malloc. I suspect it is + less sensitive to the size of the request. */ + int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)) + + 4 + DEFAULT_ROUNDING - 1) + & ~(DEFAULT_ROUNDING - 1)); + size = 4096 - extra; + } + + h->chunk_size = size; + h->alignment_mask = alignment - 1; + + chunk = h->chunk = call_chunkfun (h, h->chunk_size); + if (!chunk) + (*obstack_alloc_failed_handler) (); + h->next_free = h->object_base = __PTR_ALIGN ((char *) chunk, chunk->contents, + alignment - 1); + h->chunk_limit = chunk->limit = (char *) chunk + h->chunk_size; + chunk->prev = 0; + /* The initial chunk now contains no empty object. */ + h->maybe_empty_object = 0; + h->alloc_failed = 0; + return 1; +} + +int +_obstack_begin (struct obstack *h, + _OBSTACK_SIZE_T size, _OBSTACK_SIZE_T alignment, + void *(*chunkfun) (size_t), + void (*freefun) (void *)) +{ + h->chunkfun.plain = chunkfun; + h->freefun.plain = freefun; + h->use_extra_arg = 0; + return _obstack_begin_worker (h, size, alignment); +} + +int +_obstack_begin_1 (struct obstack *h, + _OBSTACK_SIZE_T size, _OBSTACK_SIZE_T alignment, + void *(*chunkfun) (void *, size_t), + void (*freefun) (void *, void *), + void *arg) +{ + h->chunkfun.extra = chunkfun; + h->freefun.extra = freefun; + h->extra_arg = arg; + h->use_extra_arg = 1; + return _obstack_begin_worker (h, size, alignment); +} + +/* Allocate a new current chunk for the obstack *H + on the assumption that LENGTH bytes need to be added + to the current object, or a new object of length LENGTH allocated. + Copies any partial object from the end of the old chunk + to the beginning of the new one. */ + +void +_obstack_newchunk (struct obstack *h, _OBSTACK_SIZE_T length) +{ + struct _obstack_chunk *old_chunk = h->chunk; + struct _obstack_chunk *new_chunk = 0; + size_t obj_size = h->next_free - h->object_base; + char *object_base; + + /* Compute size for new chunk. */ + size_t sum1 = obj_size + length; + size_t sum2 = sum1 + h->alignment_mask; + size_t new_size = sum2 + (obj_size >> 3) + 100; + if (new_size < sum2) + new_size = sum2; + if (new_size < h->chunk_size) + new_size = h->chunk_size; + + /* Allocate and initialize the new chunk. */ + if (obj_size <= sum1 && sum1 <= sum2) + new_chunk = call_chunkfun (h, new_size); + if (!new_chunk) + (*obstack_alloc_failed_handler)(); + h->chunk = new_chunk; + new_chunk->prev = old_chunk; + new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size; + + /* Compute an aligned object_base in the new chunk */ + object_base = + __PTR_ALIGN ((char *) new_chunk, new_chunk->contents, h->alignment_mask); + + /* Move the existing object to the new chunk. */ + memcpy (object_base, h->object_base, obj_size); + + /* If the object just copied was the only data in OLD_CHUNK, + free that chunk and remove it from the chain. + But not if that chunk might contain an empty object. */ + if (!h->maybe_empty_object + && (h->object_base + == __PTR_ALIGN ((char *) old_chunk, old_chunk->contents, + h->alignment_mask))) + { + new_chunk->prev = old_chunk->prev; + call_freefun (h, old_chunk); + } + + h->object_base = object_base; + h->next_free = h->object_base + obj_size; + /* The new chunk certainly contains no empty object yet. */ + h->maybe_empty_object = 0; +} + +/* Return nonzero if object OBJ has been allocated from obstack H. + This is here for debugging. + If you use it in a program, you are probably losing. */ + +/* Suppress -Wmissing-prototypes warning. We don't want to declare this in + obstack.h because it is just for debugging. */ +int _obstack_allocated_p (struct obstack *h, void *obj) __attribute_pure__; + +int +_obstack_allocated_p (struct obstack *h, void *obj) +{ + struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ + struct _obstack_chunk *plp; /* point to previous chunk if any */ + + lp = (h)->chunk; + /* We use >= rather than > since the object cannot be exactly at + the beginning of the chunk but might be an empty object exactly + at the end of an adjacent chunk. */ + while (lp != 0 && ((void *) lp >= obj || (void *) (lp)->limit < obj)) + { + plp = lp->prev; + lp = plp; + } + return lp != 0; +} + +/* Free objects in obstack H, including OBJ and everything allocate + more recently than OBJ. If OBJ is zero, free everything in H. */ + +void +_obstack_free (struct obstack *h, void *obj) +{ + struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ + struct _obstack_chunk *plp; /* point to previous chunk if any */ + + lp = h->chunk; + /* We use >= because there cannot be an object at the beginning of a chunk. + But there can be an empty object at that address + at the end of another chunk. */ + while (lp != 0 && ((void *) lp >= obj || (void *) (lp)->limit < obj)) + { + plp = lp->prev; + call_freefun (h, lp); + lp = plp; + /* If we switch chunks, we can't tell whether the new current + chunk contains an empty object, so assume that it may. */ + h->maybe_empty_object = 1; + } + if (lp) + { + h->object_base = h->next_free = (char *) (obj); + h->chunk_limit = lp->limit; + h->chunk = lp; + } + else if (obj != 0) + /* obj is not in any of the chunks! */ + abort (); +} + +_OBSTACK_SIZE_T +_obstack_memory_used (struct obstack *h) +{ + struct _obstack_chunk *lp; + _OBSTACK_SIZE_T nbytes = 0; + + for (lp = h->chunk; lp != 0; lp = lp->prev) + { + nbytes += lp->limit - (char *) lp; + } + return nbytes; +} + +# ifndef _OBSTACK_NO_ERROR_HANDLER +/* Define the error handler. */ +# include <stdio.h> + +/* Exit value used when 'print_and_abort' is used. */ +# ifdef _LIBC +int obstack_exit_failure = EXIT_FAILURE; +# else +# include "exitfail.h" +# define obstack_exit_failure exit_failure +# endif + +# ifdef _LIBC +# include <libintl.h> +# else +# include "gettext.h" +# endif +# ifndef _ +# define _(msgid) gettext (msgid) +# endif + +# ifdef _LIBC +# include <libio/iolibio.h> +# endif + +static _Noreturn void +print_and_abort (void) +{ + /* Don't change any of these strings. Yes, it would be possible to add + the newline to the string and use fputs or so. But this must not + happen because the "memory exhausted" message appears in other places + like this and the translation should be reused instead of creating + a very similar string which requires a separate translation. */ +# ifdef _LIBC + (void) __fxprintf (NULL, "%s\n", _("memory exhausted")); +# else + fprintf (stderr, "%s\n", _("memory exhausted")); +# endif + exit (obstack_exit_failure); +} + +/* The functions allocating more room by calling 'obstack_chunk_alloc' + jump to the handler pointed to by 'obstack_alloc_failed_handler'. + This can be set to a user defined function which should either + abort gracefully or use longjump - but shouldn't return. This + variable by default points to the internal function + 'print_and_abort'. */ +__attribute_noreturn__ void (*obstack_alloc_failed_handler) (void) + = print_and_abort; +# endif /* !_OBSTACK_NO_ERROR_HANDLER */ +#endif /* !_OBSTACK_ELIDE_CODE */ diff --git a/devspec.en_US/project/recutils/lib/obstack.h b/devspec.en_US/project/recutils/lib/obstack.h new file mode 100755 index 0000000..9fc6455 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/obstack.h @@ -0,0 +1,546 @@ +/* obstack.h - object stack macros + Copyright (C) 1988-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +/* Summary: + + All the apparent functions defined here are macros. The idea + is that you would use these pre-tested macros to solve a + very specific set of problems, and they would run fast. + Caution: no side-effects in arguments please!! They may be + evaluated MANY times!! + + These macros operate a stack of objects. Each object starts life + small, and may grow to maturity. (Consider building a word syllable + by syllable.) An object can move while it is growing. Once it has + been "finished" it never changes address again. So the "top of the + stack" is typically an immature growing object, while the rest of the + stack is of mature, fixed size and fixed address objects. + + These routines grab large chunks of memory, using a function you + supply, called 'obstack_chunk_alloc'. On occasion, they free chunks, + by calling 'obstack_chunk_free'. You must define them and declare + them before using any obstack macros. + + Each independent stack is represented by a 'struct obstack'. + Each of the obstack macros expects a pointer to such a structure + as the first argument. + + One motivation for this package is the problem of growing char strings + in symbol tables. Unless you are "fascist pig with a read-only mind" + --Gosper's immortal quote from HAKMEM item 154, out of context--you + would not like to put any arbitrary upper limit on the length of your + symbols. + + In practice this often means you will build many short symbols and a + few long symbols. At the time you are reading a symbol you don't know + how long it is. One traditional method is to read a symbol into a + buffer, realloc()ating the buffer every time you try to read a symbol + that is longer than the buffer. This is beaut, but you still will + want to copy the symbol from the buffer to a more permanent + symbol-table entry say about half the time. + + With obstacks, you can work differently. Use one obstack for all symbol + names. As you read a symbol, grow the name in the obstack gradually. + When the name is complete, finalize it. Then, if the symbol exists already, + free the newly read name. + + The way we do this is to take a large chunk, allocating memory from + low addresses. When you want to build a symbol in the chunk you just + add chars above the current "high water mark" in the chunk. When you + have finished adding chars, because you got to the end of the symbol, + you know how long the chars are, and you can create a new object. + Mostly the chars will not burst over the highest address of the chunk, + because you would typically expect a chunk to be (say) 100 times as + long as an average object. + + In case that isn't clear, when we have enough chars to make up + the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed) + so we just point to it where it lies. No moving of chars is + needed and this is the second win: potentially long strings need + never be explicitly shuffled. Once an object is formed, it does not + change its address during its lifetime. + + When the chars burst over a chunk boundary, we allocate a larger + chunk, and then copy the partly formed object from the end of the old + chunk to the beginning of the new larger chunk. We then carry on + accreting characters to the end of the object as we normally would. + + A special macro is provided to add a single char at a time to a + growing object. This allows the use of register variables, which + break the ordinary 'growth' macro. + + Summary: + We allocate large chunks. + We carve out one object at a time from the current chunk. + Once carved, an object never moves. + We are free to append data of any size to the currently + growing object. + Exactly one object is growing in an obstack at any one time. + You can run one obstack per control block. + You may have as many control blocks as you dare. + Because of the way we do it, you can "unwind" an obstack + back to a previous state. (You may remove objects much + as you would with a stack.) + */ + + +/* Don't do the contents of this file more than once. */ + +#ifndef _OBSTACK_H +#define _OBSTACK_H 1 + +#ifndef _OBSTACK_INTERFACE_VERSION +# define _OBSTACK_INTERFACE_VERSION 2 +#endif + +#include <stddef.h> /* For size_t and ptrdiff_t. */ +#include <string.h> /* For __GNU_LIBRARY__, and memcpy. */ + +#if __STDC_VERSION__ < 199901L || defined __HP_cc +# define __FLEXIBLE_ARRAY_MEMBER 1 +#else +# define __FLEXIBLE_ARRAY_MEMBER +#endif + +#if _OBSTACK_INTERFACE_VERSION == 1 +/* For binary compatibility with obstack version 1, which used "int" + and "long" for these two types. */ +# define _OBSTACK_SIZE_T unsigned int +# define _CHUNK_SIZE_T unsigned long +# define _OBSTACK_CAST(type, expr) ((type) (expr)) +#else +/* Version 2 with sane types, especially for 64-bit hosts. */ +# define _OBSTACK_SIZE_T size_t +# define _CHUNK_SIZE_T size_t +# define _OBSTACK_CAST(type, expr) (expr) +#endif + +/* If B is the base of an object addressed by P, return the result of + aligning P to the next multiple of A + 1. B and P must be of type + char *. A + 1 must be a power of 2. */ + +#define __BPTR_ALIGN(B, P, A) ((B) + (((P) - (B) + (A)) & ~(A))) + +/* Similar to __BPTR_ALIGN (B, P, A), except optimize the common case + where pointers can be converted to integers, aligned as integers, + and converted back again. If ptrdiff_t is narrower than a + pointer (e.g., the AS/400), play it safe and compute the alignment + relative to B. Otherwise, use the faster strategy of computing the + alignment relative to 0. */ + +#define __PTR_ALIGN(B, P, A) \ + __BPTR_ALIGN (sizeof (ptrdiff_t) < sizeof (void *) ? (B) : (char *) 0, \ + P, A) + +#ifndef __attribute_pure__ +# define __attribute_pure__ _GL_ATTRIBUTE_PURE +#endif + +/* Not the same as _Noreturn, since it also works with function pointers. */ +#ifndef __attribute_noreturn__ +# if 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C +# define __attribute_noreturn__ __attribute__ ((__noreturn__)) +# else +# define __attribute_noreturn__ +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +struct _obstack_chunk /* Lives at front of each chunk. */ +{ + char *limit; /* 1 past end of this chunk */ + struct _obstack_chunk *prev; /* address of prior chunk or NULL */ + char contents[__FLEXIBLE_ARRAY_MEMBER]; /* objects begin here */ +}; + +struct obstack /* control current object in current chunk */ +{ + _CHUNK_SIZE_T chunk_size; /* preferred size to allocate chunks in */ + struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */ + char *object_base; /* address of object we are building */ + char *next_free; /* where to add next char to current object */ + char *chunk_limit; /* address of char after current chunk */ + union + { + _OBSTACK_SIZE_T i; + void *p; + } temp; /* Temporary for some macros. */ + _OBSTACK_SIZE_T alignment_mask; /* Mask of alignment for each object. */ + + /* These prototypes vary based on 'use_extra_arg'. */ + union + { + void *(*plain) (size_t); + void *(*extra) (void *, size_t); + } chunkfun; + union + { + void (*plain) (void *); + void (*extra) (void *, void *); + } freefun; + + void *extra_arg; /* first arg for chunk alloc/dealloc funcs */ + unsigned use_extra_arg : 1; /* chunk alloc/dealloc funcs take extra arg */ + unsigned maybe_empty_object : 1; /* There is a possibility that the current + chunk contains a zero-length object. This + prevents freeing the chunk if we allocate + a bigger chunk to replace it. */ + unsigned alloc_failed : 1; /* No longer used, as we now call the failed + handler on error, but retained for binary + compatibility. */ +}; + +/* Declare the external functions we use; they are in obstack.c. */ + +extern void _obstack_newchunk (struct obstack *, _OBSTACK_SIZE_T); +extern void _obstack_free (struct obstack *, void *); +extern int _obstack_begin (struct obstack *, + _OBSTACK_SIZE_T, _OBSTACK_SIZE_T, + void *(*) (size_t), void (*) (void *)); +extern int _obstack_begin_1 (struct obstack *, + _OBSTACK_SIZE_T, _OBSTACK_SIZE_T, + void *(*) (void *, size_t), + void (*) (void *, void *), void *); +extern _OBSTACK_SIZE_T _obstack_memory_used (struct obstack *) + __attribute_pure__; + + +/* Error handler called when 'obstack_chunk_alloc' failed to allocate + more memory. This can be set to a user defined function which + should either abort gracefully or use longjump - but shouldn't + return. The default action is to print a message and abort. */ +extern __attribute_noreturn__ void (*obstack_alloc_failed_handler) (void); + +/* Exit value used when 'print_and_abort' is used. */ +extern int obstack_exit_failure; + +/* Pointer to beginning of object being allocated or to be allocated next. + Note that this might not be the final address of the object + because a new chunk might be needed to hold the final size. */ + +#define obstack_base(h) ((void *) (h)->object_base) + +/* Size for allocating ordinary chunks. */ + +#define obstack_chunk_size(h) ((h)->chunk_size) + +/* Pointer to next byte not yet allocated in current chunk. */ + +#define obstack_next_free(h) ((void *) (h)->next_free) + +/* Mask specifying low bits that should be clear in address of an object. */ + +#define obstack_alignment_mask(h) ((h)->alignment_mask) + +/* To prevent prototype warnings provide complete argument list. */ +#define obstack_init(h) \ + _obstack_begin ((h), 0, 0, \ + _OBSTACK_CAST (void *(*) (size_t), obstack_chunk_alloc), \ + _OBSTACK_CAST (void (*) (void *), obstack_chunk_free)) + +#define obstack_begin(h, size) \ + _obstack_begin ((h), (size), 0, \ + _OBSTACK_CAST (void *(*) (size_t), obstack_chunk_alloc), \ + _OBSTACK_CAST (void (*) (void *), obstack_chunk_free)) + +#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ + _obstack_begin ((h), (size), (alignment), \ + _OBSTACK_CAST (void *(*) (size_t), chunkfun), \ + _OBSTACK_CAST (void (*) (void *), freefun)) + +#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ + _obstack_begin_1 ((h), (size), (alignment), \ + _OBSTACK_CAST (void *(*) (void *, size_t), chunkfun), \ + _OBSTACK_CAST (void (*) (void *, void *), freefun), arg) + +#define obstack_chunkfun(h, newchunkfun) \ + ((void) ((h)->chunkfun.extra = (void *(*) (void *, size_t)) (newchunkfun))) + +#define obstack_freefun(h, newfreefun) \ + ((void) ((h)->freefun.extra = (void *(*) (void *, void *)) (newfreefun))) + +#define obstack_1grow_fast(h, achar) ((void) (*((h)->next_free)++ = (achar))) + +#define obstack_blank_fast(h, n) ((void) ((h)->next_free += (n))) + +#define obstack_memory_used(h) _obstack_memory_used (h) + +#if defined __GNUC__ +# if !defined __GNUC_MINOR__ || __GNUC__ * 1000 + __GNUC_MINOR__ < 2008 +# define __extension__ +# endif + +/* For GNU C, if not -traditional, + we can define these macros to compute all args only once + without using a global variable. + Also, we can avoid using the 'temp' slot, to make faster code. */ + +# define obstack_object_size(OBSTACK) \ + __extension__ \ + ({ struct obstack const *__o = (OBSTACK); \ + (_OBSTACK_SIZE_T) (__o->next_free - __o->object_base); }) + +/* The local variable is named __o1 to avoid a shadowed variable + warning when invoked from other obstack macros. */ +# define obstack_room(OBSTACK) \ + __extension__ \ + ({ struct obstack const *__o1 = (OBSTACK); \ + (_OBSTACK_SIZE_T) (__o1->chunk_limit - __o1->next_free); }) + +# define obstack_make_room(OBSTACK, length) \ + __extension__ \ + ({ struct obstack *__o = (OBSTACK); \ + _OBSTACK_SIZE_T __len = (length); \ + if (obstack_room (__o) < __len) \ + _obstack_newchunk (__o, __len); \ + (void) 0; }) + +# define obstack_empty_p(OBSTACK) \ + __extension__ \ + ({ struct obstack const *__o = (OBSTACK); \ + (__o->chunk->prev == 0 \ + && __o->next_free == __PTR_ALIGN ((char *) __o->chunk, \ + __o->chunk->contents, \ + __o->alignment_mask)); }) + +# define obstack_grow(OBSTACK, where, length) \ + __extension__ \ + ({ struct obstack *__o = (OBSTACK); \ + _OBSTACK_SIZE_T __len = (length); \ + if (obstack_room (__o) < __len) \ + _obstack_newchunk (__o, __len); \ + memcpy (__o->next_free, where, __len); \ + __o->next_free += __len; \ + (void) 0; }) + +# define obstack_grow0(OBSTACK, where, length) \ + __extension__ \ + ({ struct obstack *__o = (OBSTACK); \ + _OBSTACK_SIZE_T __len = (length); \ + if (obstack_room (__o) < __len + 1) \ + _obstack_newchunk (__o, __len + 1); \ + memcpy (__o->next_free, where, __len); \ + __o->next_free += __len; \ + *(__o->next_free)++ = 0; \ + (void) 0; }) + +# define obstack_1grow(OBSTACK, datum) \ + __extension__ \ + ({ struct obstack *__o = (OBSTACK); \ + if (obstack_room (__o) < 1) \ + _obstack_newchunk (__o, 1); \ + obstack_1grow_fast (__o, datum); }) + +/* These assume that the obstack alignment is good enough for pointers + or ints, and that the data added so far to the current object + shares that much alignment. */ + +# define obstack_ptr_grow(OBSTACK, datum) \ + __extension__ \ + ({ struct obstack *__o = (OBSTACK); \ + if (obstack_room (__o) < sizeof (void *)) \ + _obstack_newchunk (__o, sizeof (void *)); \ + obstack_ptr_grow_fast (__o, datum); }) + +# define obstack_int_grow(OBSTACK, datum) \ + __extension__ \ + ({ struct obstack *__o = (OBSTACK); \ + if (obstack_room (__o) < sizeof (int)) \ + _obstack_newchunk (__o, sizeof (int)); \ + obstack_int_grow_fast (__o, datum); }) + +# define obstack_ptr_grow_fast(OBSTACK, aptr) \ + __extension__ \ + ({ struct obstack *__o1 = (OBSTACK); \ + void *__p1 = __o1->next_free; \ + *(const void **) __p1 = (aptr); \ + __o1->next_free += sizeof (const void *); \ + (void) 0; }) + +# define obstack_int_grow_fast(OBSTACK, aint) \ + __extension__ \ + ({ struct obstack *__o1 = (OBSTACK); \ + void *__p1 = __o1->next_free; \ + *(int *) __p1 = (aint); \ + __o1->next_free += sizeof (int); \ + (void) 0; }) + +# define obstack_blank(OBSTACK, length) \ + __extension__ \ + ({ struct obstack *__o = (OBSTACK); \ + _OBSTACK_SIZE_T __len = (length); \ + if (obstack_room (__o) < __len) \ + _obstack_newchunk (__o, __len); \ + obstack_blank_fast (__o, __len); }) + +# define obstack_alloc(OBSTACK, length) \ + __extension__ \ + ({ struct obstack *__h = (OBSTACK); \ + obstack_blank (__h, (length)); \ + obstack_finish (__h); }) + +# define obstack_copy(OBSTACK, where, length) \ + __extension__ \ + ({ struct obstack *__h = (OBSTACK); \ + obstack_grow (__h, (where), (length)); \ + obstack_finish (__h); }) + +# define obstack_copy0(OBSTACK, where, length) \ + __extension__ \ + ({ struct obstack *__h = (OBSTACK); \ + obstack_grow0 (__h, (where), (length)); \ + obstack_finish (__h); }) + +/* The local variable is named __o1 to avoid a shadowed variable + warning when invoked from other obstack macros, typically obstack_free. */ +# define obstack_finish(OBSTACK) \ + __extension__ \ + ({ struct obstack *__o1 = (OBSTACK); \ + void *__value = (void *) __o1->object_base; \ + if (__o1->next_free == __value) \ + __o1->maybe_empty_object = 1; \ + __o1->next_free \ + = __PTR_ALIGN (__o1->object_base, __o1->next_free, \ + __o1->alignment_mask); \ + if ((size_t) (__o1->next_free - (char *) __o1->chunk) \ + > (size_t) (__o1->chunk_limit - (char *) __o1->chunk)) \ + __o1->next_free = __o1->chunk_limit; \ + __o1->object_base = __o1->next_free; \ + __value; }) + +# define obstack_free(OBSTACK, OBJ) \ + __extension__ \ + ({ struct obstack *__o = (OBSTACK); \ + void *__obj = (void *) (OBJ); \ + if (__obj > (void *) __o->chunk && __obj < (void *) __o->chunk_limit) \ + __o->next_free = __o->object_base = (char *) __obj; \ + else \ + _obstack_free (__o, __obj); }) + +#else /* not __GNUC__ */ + +# define obstack_object_size(h) \ + ((_OBSTACK_SIZE_T) ((h)->next_free - (h)->object_base)) + +# define obstack_room(h) \ + ((_OBSTACK_SIZE_T) ((h)->chunk_limit - (h)->next_free)) + +# define obstack_empty_p(h) \ + ((h)->chunk->prev == 0 \ + && (h)->next_free == __PTR_ALIGN ((char *) (h)->chunk, \ + (h)->chunk->contents, \ + (h)->alignment_mask)) + +/* Note that the call to _obstack_newchunk is enclosed in (..., 0) + so that we can avoid having void expressions + in the arms of the conditional expression. + Casting the third operand to void was tried before, + but some compilers won't accept it. */ + +# define obstack_make_room(h, length) \ + ((h)->temp.i = (length), \ + ((obstack_room (h) < (h)->temp.i) \ + ? (_obstack_newchunk (h, (h)->temp.i), 0) : 0), \ + (void) 0) + +# define obstack_grow(h, where, length) \ + ((h)->temp.i = (length), \ + ((obstack_room (h) < (h)->temp.i) \ + ? (_obstack_newchunk ((h), (h)->temp.i), 0) : 0), \ + memcpy ((h)->next_free, where, (h)->temp.i), \ + (h)->next_free += (h)->temp.i, \ + (void) 0) + +# define obstack_grow0(h, where, length) \ + ((h)->temp.i = (length), \ + ((obstack_room (h) < (h)->temp.i + 1) \ + ? (_obstack_newchunk ((h), (h)->temp.i + 1), 0) : 0), \ + memcpy ((h)->next_free, where, (h)->temp.i), \ + (h)->next_free += (h)->temp.i, \ + *((h)->next_free)++ = 0, \ + (void) 0) + +# define obstack_1grow(h, datum) \ + (((obstack_room (h) < 1) \ + ? (_obstack_newchunk ((h), 1), 0) : 0), \ + obstack_1grow_fast (h, datum)) + +# define obstack_ptr_grow(h, datum) \ + (((obstack_room (h) < sizeof (char *)) \ + ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \ + obstack_ptr_grow_fast (h, datum)) + +# define obstack_int_grow(h, datum) \ + (((obstack_room (h) < sizeof (int)) \ + ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \ + obstack_int_grow_fast (h, datum)) + +# define obstack_ptr_grow_fast(h, aptr) \ + (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr), \ + (void) 0) + +# define obstack_int_grow_fast(h, aint) \ + (((int *) ((h)->next_free += sizeof (int)))[-1] = (aint), \ + (void) 0) + +# define obstack_blank(h, length) \ + ((h)->temp.i = (length), \ + ((obstack_room (h) < (h)->temp.i) \ + ? (_obstack_newchunk ((h), (h)->temp.i), 0) : 0), \ + obstack_blank_fast (h, (h)->temp.i)) + +# define obstack_alloc(h, length) \ + (obstack_blank ((h), (length)), obstack_finish ((h))) + +# define obstack_copy(h, where, length) \ + (obstack_grow ((h), (where), (length)), obstack_finish ((h))) + +# define obstack_copy0(h, where, length) \ + (obstack_grow0 ((h), (where), (length)), obstack_finish ((h))) + +# define obstack_finish(h) \ + (((h)->next_free == (h)->object_base \ + ? (((h)->maybe_empty_object = 1), 0) \ + : 0), \ + (h)->temp.p = (h)->object_base, \ + (h)->next_free \ + = __PTR_ALIGN ((h)->object_base, (h)->next_free, \ + (h)->alignment_mask), \ + (((size_t) ((h)->next_free - (char *) (h)->chunk) \ + > (size_t) ((h)->chunk_limit - (char *) (h)->chunk)) \ + ? ((h)->next_free = (h)->chunk_limit) : 0), \ + (h)->object_base = (h)->next_free, \ + (h)->temp.p) + +# define obstack_free(h, obj) \ + ((h)->temp.p = (void *) (obj), \ + (((h)->temp.p > (void *) (h)->chunk \ + && (h)->temp.p < (void *) (h)->chunk_limit) \ + ? (void) ((h)->next_free = (h)->object_base = (char *) (h)->temp.p) \ + : _obstack_free ((h), (h)->temp.p))) + +#endif /* not __GNUC__ */ + +#ifdef __cplusplus +} /* C++ */ +#endif + +#endif /* _OBSTACK_H */ diff --git a/devspec.en_US/project/recutils/lib/open.c b/devspec.en_US/project/recutils/lib/open.c new file mode 100755 index 0000000..6552605 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/open.c @@ -0,0 +1,208 @@ +/* Open a descriptor to a file. + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ + +/* If the user's config.h happens to include <fcntl.h>, let it include only + the system's <fcntl.h> here, so that orig_open doesn't recurse to + rpl_open. */ +#define __need_system_fcntl_h +#include <config.h> + +/* Get the original definition of open. It might be defined as a macro. */ +#include <fcntl.h> +#include <sys/types.h> +#undef __need_system_fcntl_h + +static int +orig_open (const char *filename, int flags, mode_t mode) +{ + return open (filename, flags, mode); +} + +/* Specification. */ +/* Write "fcntl.h" here, not <fcntl.h>, otherwise OSF/1 5.1 DTK cc eliminates + this include because of the preliminary #include <fcntl.h> above. */ +#include "fcntl.h" + +#include "cloexec.h" + +#include <errno.h> +#include <stdarg.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> + +#ifndef REPLACE_OPEN_DIRECTORY +# define REPLACE_OPEN_DIRECTORY 0 +#endif + +int +open (const char *filename, int flags, ...) +{ + /* 0 = unknown, 1 = yes, -1 = no. */ +#if GNULIB_defined_O_CLOEXEC + int have_cloexec = -1; +#else + static int have_cloexec; +#endif + + mode_t mode; + int fd; + + mode = 0; + if (flags & O_CREAT) + { + va_list arg; + va_start (arg, flags); + + /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 + creates crashing code when 'mode_t' is smaller than 'int'. */ + mode = va_arg (arg, PROMOTED_MODE_T); + + va_end (arg); + } + +#if GNULIB_defined_O_NONBLOCK + /* The only known platform that lacks O_NONBLOCK is mingw, but it + also lacks named pipes and Unix sockets, which are the only two + file types that require non-blocking handling in open(). + Therefore, it is safe to ignore O_NONBLOCK here. It is handy + that mingw also lacks openat(), so that is also covered here. */ + flags &= ~O_NONBLOCK; +#endif + +#if defined _WIN32 && ! defined __CYGWIN__ + if (strcmp (filename, "/dev/null") == 0) + filename = "NUL"; +#endif + +#if OPEN_TRAILING_SLASH_BUG + /* If the filename ends in a slash and one of O_CREAT, O_WRONLY, O_RDWR + is specified, then fail. + Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html> + says that + "A pathname that contains at least one non-slash character and that + ends with one or more trailing slashes shall be resolved as if a + single dot character ( '.' ) were appended to the pathname." + and + "The special filename dot shall refer to the directory specified by + its predecessor." + If the named file already exists as a directory, then + - if O_CREAT is specified, open() must fail because of the semantics + of O_CREAT, + - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX + <http://www.opengroup.org/susv3/functions/open.html> says that it + fails with errno = EISDIR in this case. + If the named file does not exist or does not name a directory, then + - if O_CREAT is specified, open() must fail since open() cannot create + directories, + - if O_WRONLY or O_RDWR is specified, open() must fail because the + file does not contain a '.' directory. */ + if (flags & (O_CREAT | O_WRONLY | O_RDWR)) + { + size_t len = strlen (filename); + if (len > 0 && filename[len - 1] == '/') + { + errno = EISDIR; + return -1; + } + } +#endif + + fd = orig_open (filename, + flags & ~(have_cloexec <= 0 ? O_CLOEXEC : 0), mode); + + if (flags & O_CLOEXEC) + { + if (! have_cloexec) + { + if (0 <= fd) + have_cloexec = 1; + else if (errno == EINVAL) + { + fd = orig_open (filename, flags & ~O_CLOEXEC, mode); + have_cloexec = -1; + } + } + if (have_cloexec < 0 && 0 <= fd) + set_cloexec_flag (fd, true); + } + + +#if REPLACE_FCHDIR + /* Implementing fchdir and fdopendir requires the ability to open a + directory file descriptor. If open doesn't support that (as on + mingw), we use a dummy file that behaves the same as directories + on Linux (ie. always reports EOF on attempts to read()), and + override fstat() in fchdir.c to hide the fact that we have a + dummy. */ + if (REPLACE_OPEN_DIRECTORY && fd < 0 && errno == EACCES + && ((flags & O_ACCMODE) == O_RDONLY + || (O_SEARCH != O_RDONLY && (flags & O_ACCMODE) == O_SEARCH))) + { + struct stat statbuf; + if (stat (filename, &statbuf) == 0 && S_ISDIR (statbuf.st_mode)) + { + /* Maximum recursion depth of 1. */ + fd = open ("/dev/null", flags, mode); + if (0 <= fd) + fd = _gl_register_fd (fd, filename); + } + else + errno = EACCES; + } +#endif + +#if OPEN_TRAILING_SLASH_BUG + /* If the filename ends in a slash and fd does not refer to a directory, + then fail. + Rationale: POSIX <http://www.opengroup.org/susv3/basedefs/xbd_chap04.html> + says that + "A pathname that contains at least one non-slash character and that + ends with one or more trailing slashes shall be resolved as if a + single dot character ( '.' ) were appended to the pathname." + and + "The special filename dot shall refer to the directory specified by + its predecessor." + If the named file without the slash is not a directory, open() must fail + with ENOTDIR. */ + if (fd >= 0) + { + /* We know len is positive, since open did not fail with ENOENT. */ + size_t len = strlen (filename); + if (filename[len - 1] == '/') + { + struct stat statbuf; + + if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) + { + close (fd); + errno = ENOTDIR; + return -1; + } + } + } +#endif + +#if REPLACE_FCHDIR + if (!REPLACE_OPEN_DIRECTORY && 0 <= fd) + fd = _gl_register_fd (fd, filename); +#endif + + return fd; +} diff --git a/devspec.en_US/project/recutils/lib/parse-datetime.c b/devspec.en_US/project/recutils/lib/parse-datetime.c new file mode 100755 index 0000000..790bd69 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/parse-datetime.c @@ -0,0 +1,4129 @@ +/* A Bison parser, made by GNU Bison 3.0.4. */ + +/* Bison implementation for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "3.0.4" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + + + + +/* Copy the first part of user declarations. */ +#line 1 "parse-datetime.y" /* yacc.c:339 */ + +/* Parse a string into an internal timestamp. + + Copyright (C) 1999-2000, 2002-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Originally written by Steven M. Bellovin <smb@research.att.com> while + at the University of North Carolina at Chapel Hill. Later tweaked by + a couple of people on Usenet. Completely overhauled by Rich $alz + <rsalz@bbn.com> and Jim Berets <jberets@bbn.com> in August, 1990. + + Modified by Assaf Gordon <assafgordon@gmail.com> in 2016 to add + debug output. + + Modified by Paul Eggert <eggert@twinsun.com> in 1999 to do the + right thing about local DST. Also modified by Paul Eggert + <eggert@cs.ucla.edu> in 2004 to support nanosecond-resolution + timestamps, in 2004 to support TZ strings in dates, and in 2017 to + check for integer overflow and to support longer-than-'long' + 'time_t' and 'tv_nsec'. */ + +#include <config.h> + +#include "parse-datetime.h" + +#include "intprops.h" +#include "timespec.h" +#include "verify.h" +#include "strftime.h" + +/* There's no need to extend the stack, so there's no need to involve + alloca. */ +#define YYSTACK_USE_ALLOCA 0 + +/* Tell Bison how much stack space is needed. 20 should be plenty for + this grammar, which is not right recursive. Beware setting it too + high, since that might cause problems on machines whose + implementations have lame stack-overflow checking. */ +#define YYMAXDEPTH 20 +#define YYINITDEPTH YYMAXDEPTH + +/* Since the code of parse-datetime.y is not included in the Emacs executable + itself, there is no need to #define static in this file. Even if + the code were included in the Emacs executable, it probably + wouldn't do any harm to #undef it here; this will only cause + problems if we try to write to a static variable, which I don't + think this code needs to do. */ +#ifdef emacs +# undef static +#endif + +#include <inttypes.h> +#include <c-ctype.h> +#include <limits.h> +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "gettext.h" + +#define _(str) gettext (str) + +/* Bison's skeleton tests _STDLIB_H, while some stdlib.h headers + use _STDLIB_H_ as witness. Map the latter to the one bison uses. */ +/* FIXME: this is temporary. Remove when we have a mechanism to ensure + that the version we're using is fixed, too. */ +#ifdef _STDLIB_H_ +# undef _STDLIB_H +# define _STDLIB_H 1 +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. + Enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because + gnulib and libintl do '#define printf __printf__' when they override + the 'printf' function. */ +#if 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +#endif + +/* Shift A right by B bits portably, by dividing A by 2**B and + truncating towards minus infinity. A and B should be free of side + effects, and B should be in the range 0 <= B <= INT_BITS - 2, where + INT_BITS is the number of useful bits in an int. GNU code can + assume that INT_BITS is at least 32. + + ISO C99 says that A >> B is implementation-defined if A < 0. Some + implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift + right in the usual way when A < 0, so SHR falls back on division if + ordinary A >> B doesn't seem to be the usual signed shift. */ +#define SHR(a, b) \ + (-1 >> 1 == -1 \ + ? (a) >> (b) \ + : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0)) + +#define HOUR(x) (60 * 60 * (x)) + +#define STREQ(a, b) (strcmp (a, b) == 0) + +/* Verify that time_t is an integer as POSIX requires, and that every + time_t value fits in intmax_t. Please file a bug report if these + assumptions are false on your platform. */ +verify (TYPE_IS_INTEGER (time_t)); +verify (!TYPE_SIGNED (time_t) || INTMAX_MIN <= TYPE_MINIMUM (time_t)); +verify (TYPE_MAXIMUM (time_t) <= INTMAX_MAX); + +/* True if N is out of range for time_t. */ +static bool +time_overflow (intmax_t n) +{ + return ! ((TYPE_SIGNED (time_t) ? TYPE_MINIMUM (time_t) <= n : 0 <= n) + && n <= TYPE_MAXIMUM (time_t)); +} + +/* Convert a possibly-signed character to an unsigned character. This is + a bit safer than casting to unsigned char, since it catches some type + errors that the cast doesn't. */ +static unsigned char to_uchar (char ch) { return ch; } + +static void _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 2)) +dbg_printf (char const *msg, ...) +{ + va_list args; + /* TODO: use gnulib's 'program_name' instead? */ + fputs ("date: ", stderr); + + va_start (args, msg); + vfprintf (stderr, msg, args); + va_end (args); +} + + +/* An integer value, and the number of digits in its textual + representation. */ +typedef struct +{ + bool negative; + intmax_t value; + ptrdiff_t digits; +} textint; + +/* An entry in the lexical lookup table. */ +typedef struct +{ + char const *name; + int type; + int value; +} table; + +/* Meridian: am, pm, or 24-hour style. */ +enum { MERam, MERpm, MER24 }; + +/* A reasonable upper bound for the buffer used in debug output. */ +enum { DBGBUFSIZE = 100 }; + +enum { BILLION = 1000000000, LOG10_BILLION = 9 }; + +/* Relative times. */ +typedef struct +{ + /* Relative year, month, day, hour, minutes, seconds, and nanoseconds. */ + intmax_t year; + intmax_t month; + intmax_t day; + intmax_t hour; + intmax_t minutes; + intmax_t seconds; + int ns; +} relative_time; + +#if HAVE_COMPOUND_LITERALS +# define RELATIVE_TIME_0 ((relative_time) { 0, 0, 0, 0, 0, 0, 0 }) +#else +static relative_time const RELATIVE_TIME_0; +#endif + +/* Information passed to and from the parser. */ +typedef struct +{ + /* The input string remaining to be parsed. */ + const char *input; + + /* N, if this is the Nth Tuesday. */ + intmax_t day_ordinal; + + /* Day of week; Sunday is 0. */ + int day_number; + + /* tm_isdst flag for the local zone. */ + int local_isdst; + + /* Time zone, in seconds east of UT. */ + int time_zone; + + /* Style used for time. */ + int meridian; + + /* Gregorian year, month, day, hour, minutes, seconds, and nanoseconds. */ + textint year; + intmax_t month; + intmax_t day; + intmax_t hour; + intmax_t minutes; + struct timespec seconds; /* includes nanoseconds */ + + /* Relative year, month, day, hour, minutes, seconds, and nanoseconds. */ + relative_time rel; + + /* Presence or counts of nonterminals of various flavors parsed so far. */ + bool timespec_seen; + bool rels_seen; + ptrdiff_t dates_seen; + ptrdiff_t days_seen; + ptrdiff_t local_zones_seen; + ptrdiff_t dsts_seen; + ptrdiff_t times_seen; + ptrdiff_t zones_seen; + bool year_seen; + + /* Print debugging output to stderr. */ + bool parse_datetime_debug; + + /* Which of the 'seen' parts have been printed when debugging. */ + bool debug_dates_seen; + bool debug_days_seen; + bool debug_local_zones_seen; + bool debug_times_seen; + bool debug_zones_seen; + bool debug_year_seen; + + /* The user specified explicit ordinal day value. */ + bool debug_ordinal_day_seen; + + /* Table of local time zone abbreviations, terminated by a null entry. */ + table local_time_zone_table[3]; +} parser_control; + +union YYSTYPE; +static int yylex (union YYSTYPE *, parser_control *); +static int yyerror (parser_control const *, char const *); +static bool time_zone_hhmm (parser_control *, textint, intmax_t); + +/* Extract into *PC any date and time info from a string of digits + of the form e.g., YYYYMMDD, YYMMDD, HHMM, HH (and sometimes YYY, + YYYY, ...). */ +static void +digits_to_date_time (parser_control *pc, textint text_int) +{ + if (pc->dates_seen && ! pc->year.digits + && ! pc->rels_seen && (pc->times_seen || 2 < text_int.digits)) + { + pc->year_seen = true; + pc->year = text_int; + } + else + { + if (4 < text_int.digits) + { + pc->dates_seen++; + pc->day = text_int.value % 100; + pc->month = (text_int.value / 100) % 100; + pc->year.value = text_int.value / 10000; + pc->year.digits = text_int.digits - 4; + } + else + { + pc->times_seen++; + if (text_int.digits <= 2) + { + pc->hour = text_int.value; + pc->minutes = 0; + } + else + { + pc->hour = text_int.value / 100; + pc->minutes = text_int.value % 100; + } + pc->seconds.tv_sec = 0; + pc->seconds.tv_nsec = 0; + pc->meridian = MER24; + } + } +} + +/* Increment PC->rel by FACTOR * REL (FACTOR is 1 or -1). Return true + if successful, false if an overflow occurred. */ +static bool +apply_relative_time (parser_control *pc, relative_time rel, int factor) +{ + if (factor < 0 + ? (INT_SUBTRACT_WRAPV (pc->rel.ns, rel.ns, &pc->rel.ns) + | INT_SUBTRACT_WRAPV (pc->rel.seconds, rel.seconds, &pc->rel.seconds) + | INT_SUBTRACT_WRAPV (pc->rel.minutes, rel.minutes, &pc->rel.minutes) + | INT_SUBTRACT_WRAPV (pc->rel.hour, rel.hour, &pc->rel.hour) + | INT_SUBTRACT_WRAPV (pc->rel.day, rel.day, &pc->rel.day) + | INT_SUBTRACT_WRAPV (pc->rel.month, rel.month, &pc->rel.month) + | INT_SUBTRACT_WRAPV (pc->rel.year, rel.year, &pc->rel.year)) + : (INT_ADD_WRAPV (pc->rel.ns, rel.ns, &pc->rel.ns) + | INT_ADD_WRAPV (pc->rel.seconds, rel.seconds, &pc->rel.seconds) + | INT_ADD_WRAPV (pc->rel.minutes, rel.minutes, &pc->rel.minutes) + | INT_ADD_WRAPV (pc->rel.hour, rel.hour, &pc->rel.hour) + | INT_ADD_WRAPV (pc->rel.day, rel.day, &pc->rel.day) + | INT_ADD_WRAPV (pc->rel.month, rel.month, &pc->rel.month) + | INT_ADD_WRAPV (pc->rel.year, rel.year, &pc->rel.year))) + return false; + pc->rels_seen = true; + return true; +} + +/* Set PC-> hour, minutes, seconds and nanoseconds members from arguments. */ +static void +set_hhmmss (parser_control *pc, intmax_t hour, intmax_t minutes, + time_t sec, int nsec) +{ + pc->hour = hour; + pc->minutes = minutes; + pc->seconds.tv_sec = sec; + pc->seconds.tv_nsec = nsec; +} + +/* Return a textual representation of the day ordinal/number values + in the parser_control struct (e.g., "last wed", "this tues", "thu"). */ +static const char * +str_days (parser_control *pc, char *buffer, int n) +{ + /* TODO: use relative_time_table for reverse lookup. */ + static char const ordinal_values[][11] = { + "last", + "this", + "next/first", + "(SECOND)", /* SECOND is commented out in relative_time_table. */ + "third", + "fourth", + "fifth", + "sixth", + "seventh", + "eight", + "ninth", + "tenth", + "eleventh", + "twelfth" + }; + + static char const days_values[][4] = { + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + }; + + int len; + + /* Don't add an ordinal prefix if the user didn't specify it + (e.g., "this wed" vs "wed"). */ + if (pc->debug_ordinal_day_seen) + { + /* Use word description if possible (e.g., -1 = last, 3 = third). */ + len = (-1 <= pc->day_ordinal && pc->day_ordinal <= 12 + ? snprintf (buffer, n, "%s", ordinal_values[pc->day_ordinal + 1]) + : snprintf (buffer, n, "%"PRIdMAX, pc->day_ordinal)); + } + else + { + buffer[0] = '\0'; + len = 0; + } + + /* Add the day name */ + if (0 <= pc->day_number && pc->day_number <= 6 && 0 <= len && len < n) + snprintf (buffer + len, n - len, &" %s"[len == 0], + days_values[pc->day_number]); + else + { + /* invalid day_number value - should never happen */ + } + return buffer; +} + +/* Convert a time zone to its string representation. */ + +enum { TIME_ZONE_BUFSIZE = INT_STRLEN_BOUND (intmax_t) + sizeof ":MM:SS" } ; + +static char const * +time_zone_str (int time_zone, char time_zone_buf[TIME_ZONE_BUFSIZE]) +{ + char *p = time_zone_buf; + char sign = time_zone < 0 ? '-' : '+'; + int hour = abs (time_zone / (60 * 60)); + p += sprintf (time_zone_buf, "%c%02d", sign, hour); + int offset_from_hour = abs (time_zone % (60 * 60)); + if (offset_from_hour != 0) + { + int mm = offset_from_hour / 60; + int ss = offset_from_hour % 60; + *p++ = ':'; + *p++ = '0' + mm / 10; + *p++ = '0' + mm % 10; + if (ss) + { + *p++ = ':'; + *p++ = '0' + ss / 10; + *p++ = '0' + ss % 10; + } + *p = '\0'; + } + return time_zone_buf; +} + +/* debugging: print the current time in the parser_control structure. + The parser will increment "*_seen" members for those which were parsed. + This function will print only newly seen parts. */ +static void +debug_print_current_time (char const *item, parser_control *pc) +{ + bool space = false; + + if (!pc->parse_datetime_debug) + return; + + /* no newline, more items printed below */ + dbg_printf (_("parsed %s part: "), item); + + if (pc->dates_seen && !pc->debug_dates_seen) + { + /*TODO: use pc->year.negative? */ + fprintf (stderr, "(Y-M-D) %04"PRIdMAX"-%02"PRIdMAX"-%02"PRIdMAX, + pc->year.value, pc->month, pc->day); + pc->debug_dates_seen = true; + space = true; + } + + if (pc->year_seen != pc->debug_year_seen) + { + if (space) + fputc (' ', stderr); + fprintf (stderr, _("year: %04"PRIdMAX), pc->year.value); + + pc->debug_year_seen = pc->year_seen; + space = true; + } + + if (pc->times_seen && !pc->debug_times_seen) + { + intmax_t sec = pc->seconds.tv_sec; + fprintf (stderr, &" %02"PRIdMAX":%02"PRIdMAX":%02"PRIdMAX[!space], + pc->hour, pc->minutes, sec); + if (pc->seconds.tv_nsec != 0) + { + int nsec = pc->seconds.tv_nsec; + fprintf (stderr, ".%09d", nsec); + } + if (pc->meridian == MERpm) + fputs ("pm", stderr); + + pc->debug_times_seen = true; + space = true; + } + + if (pc->days_seen && !pc->debug_days_seen) + { + if (space) + fputc (' ', stderr); + char tmp[DBGBUFSIZE]; + fprintf (stderr, _("%s (day ordinal=%"PRIdMAX" number=%d)"), + str_days (pc, tmp, sizeof tmp), + pc->day_ordinal, pc->day_number); + pc->debug_days_seen = true; + space = true; + } + + /* local zone strings only change the DST settings, + not the timezone value. If seen, inform about the DST. */ + if (pc->local_zones_seen && !pc->debug_local_zones_seen) + { + fprintf (stderr, &" isdst=%d%s"[!space], + pc->local_isdst, pc->dsts_seen ? " DST" : ""); + pc->debug_local_zones_seen = true; + space = true; + } + + if (pc->zones_seen && !pc->debug_zones_seen) + { + char time_zone_buf[TIME_ZONE_BUFSIZE]; + fprintf (stderr, &" UTC%s"[!space], + time_zone_str (pc->time_zone, time_zone_buf)); + pc->debug_zones_seen = true; + space = true; + } + + if (pc->timespec_seen) + { + intmax_t sec = pc->seconds.tv_sec; + if (space) + fputc (' ', stderr); + fprintf (stderr, _("number of seconds: %"PRIdMAX), sec); + } + + fputc ('\n', stderr); +} + +/* Debugging: print the current relative values. */ + +static bool +print_rel_part (bool space, intmax_t val, char const *name) +{ + if (val == 0) + return space; + fprintf (stderr, &" %+"PRIdMAX" %s"[!space], val, name); + return true; +} + +static void +debug_print_relative_time (char const *item, parser_control const *pc) +{ + bool space = false; + + if (!pc->parse_datetime_debug) + return; + + /* no newline, more items printed below */ + dbg_printf (_("parsed %s part: "), item); + + if (pc->rel.year == 0 && pc->rel.month == 0 && pc->rel.day == 0 + && pc->rel.hour == 0 && pc->rel.minutes == 0 && pc->rel.seconds == 0 + && pc->rel.ns == 0) + { + /* Special case: relative time of this/today/now */ + fputs (_("today/this/now\n"), stderr); + return; + } + + space = print_rel_part (space, pc->rel.year, "year(s)"); + space = print_rel_part (space, pc->rel.month, "month(s)"); + space = print_rel_part (space, pc->rel.day, "day(s)"); + space = print_rel_part (space, pc->rel.hour, "hour(s)"); + space = print_rel_part (space, pc->rel.minutes, "minutes"); + space = print_rel_part (space, pc->rel.seconds, "seconds"); + print_rel_part (space, pc->rel.ns, "nanoseconds"); + + fputc ('\n', stderr); +} + + + + +#line 631 "parse-datetime.c" /* yacc.c:339 */ + +# ifndef YY_NULLPTR +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif +# endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + + +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int yydebug; +#endif + +/* Token type. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { + tAGO = 258, + tDST = 259, + tYEAR_UNIT = 260, + tMONTH_UNIT = 261, + tHOUR_UNIT = 262, + tMINUTE_UNIT = 263, + tSEC_UNIT = 264, + tDAY_UNIT = 265, + tDAY_SHIFT = 266, + tDAY = 267, + tDAYZONE = 268, + tLOCAL_ZONE = 269, + tMERIDIAN = 270, + tMONTH = 271, + tORDINAL = 272, + tZONE = 273, + tSNUMBER = 274, + tUNUMBER = 275, + tSDECIMAL_NUMBER = 276, + tUDECIMAL_NUMBER = 277 + }; +#endif + +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED + +union YYSTYPE +{ +#line 576 "parse-datetime.y" /* yacc.c:355 */ + + intmax_t intval; + textint textintval; + struct timespec timespec; + relative_time rel; + +#line 698 "parse-datetime.c" /* yacc.c:355 */ +}; + +typedef union YYSTYPE YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 +#endif + + + +int yyparse (parser_control *pc); + + + +/* Copy the second part of user declarations. */ + +#line 714 "parse-datetime.c" /* yacc.c:358 */ + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#else +typedef signed char yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T +# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include <libintl.h> /* INFRINGES ON USER NAME SPACE */ +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) +# endif +# endif +# ifndef YY_ +# define YY_(Msgid) Msgid +# endif +#endif + +#ifndef YY_ATTRIBUTE +# if (defined __GNUC__ \ + && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ + || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C +# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +# else +# define YY_ATTRIBUTE(Spec) /* empty */ +# endif +#endif + +#ifndef YY_ATTRIBUTE_PURE +# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) +#endif + +#if !defined _Noreturn \ + && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) +# if defined _MSC_VER && 1200 <= _MSC_VER +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(E) ((void) (E)) +#else +# define YYUSE(E) /* empty */ +#endif + +#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") +#else +# define YY_INITIAL_VALUE(Value) Value +#endif +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include <alloca.h> /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include <malloc.h> /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS +# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's 'empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined EXIT_SUCCESS +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined EXIT_SUCCESS +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +# define YYCOPY_NEEDED 1 + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) + +#endif + +#if defined YYCOPY_NEEDED && YYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) +# else +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ + while (0) +# endif +# endif +#endif /* !YYCOPY_NEEDED */ + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 12 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 112 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 28 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 26 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 91 +/* YYNSTATES -- Number of states. */ +#define YYNSTATES 114 + +/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned + by yylex, with out-of-bounds checking. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 277 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, without out-of-bounds checking. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 26, 2, 2, 27, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 25, 2, + 2, 2, 2, 2, 23, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 24, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22 +}; + +#if YYDEBUG + /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 603, 603, 604, 608, 616, 618, 622, 627, 632, + 637, 642, 647, 652, 656, 660, 667, 671, 675, 680, + 685, 690, 694, 699, 704, 711, 713, 717, 742, 744, + 754, 756, 758, 763, 768, 771, 773, 778, 783, 788, + 794, 803, 808, 841, 849, 857, 862, 868, 873, 879, + 883, 893, 895, 897, 902, 904, 906, 908, 910, 912, + 914, 917, 920, 922, 924, 926, 928, 930, 932, 934, + 936, 938, 940, 942, 944, 948, 950, 952, 955, 957, + 959, 964, 968, 968, 971, 972, 978, 979, 985, 990, + 1001, 1002 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || 0 +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "tAGO", "tDST", "tYEAR_UNIT", + "tMONTH_UNIT", "tHOUR_UNIT", "tMINUTE_UNIT", "tSEC_UNIT", "tDAY_UNIT", + "tDAY_SHIFT", "tDAY", "tDAYZONE", "tLOCAL_ZONE", "tMERIDIAN", "tMONTH", + "tORDINAL", "tZONE", "tSNUMBER", "tUNUMBER", "tSDECIMAL_NUMBER", + "tUDECIMAL_NUMBER", "'@'", "'T'", "':'", "','", "'/'", "$accept", "spec", + "timespec", "items", "item", "datetime", "iso_8601_datetime", "time", + "iso_8601_time", "o_zone_offset", "zone_offset", "local_zone", "zone", + "day", "date", "iso_8601_date", "rel", "relunit", "relunit_snumber", + "dayshift", "seconds", "signed_seconds", "unsigned_seconds", "number", + "hybrid", "o_colon_minutes", YY_NULLPTR +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[NUM] -- (External) token number corresponding to the + (internal) symbol number NUM (which must be that of a token). */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 64, 84, 58, 44, 47 +}; +# endif + +#define YYPACT_NINF -93 + +#define yypact_value_is_default(Yystate) \ + (!!((Yystate) == (-93))) + +#define YYTABLE_NINF -1 + +#define yytable_value_is_error(Yytable_value) \ + 0 + + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +static const yytype_int8 yypact[] = +{ + 38, 27, 77, -93, 46, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + 62, -93, 82, -3, 66, 3, 74, -4, 83, 84, + 75, -93, -93, -93, -93, -93, -93, -93, -93, -93, + 71, -93, 93, -93, -93, -93, -93, -93, -93, 78, + 72, -93, -93, -93, -93, -93, -93, -93, -93, 25, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, 21, 19, 79, 80, -93, + -93, -93, -93, -93, 81, -93, -93, 85, 86, -93, + -93, -93, -93, -93, -6, 76, 17, -93, -93, -93, + -93, 87, 69, -93, -93, 88, 89, -1, -93, 18, + -93, -93, 69, 91 +}; + + /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE does not specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = +{ + 5, 0, 0, 2, 3, 85, 87, 84, 86, 4, + 82, 83, 1, 56, 59, 65, 68, 73, 62, 81, + 37, 35, 28, 0, 0, 30, 0, 88, 0, 0, + 31, 6, 7, 16, 8, 21, 9, 10, 12, 11, + 49, 13, 52, 74, 53, 14, 15, 38, 29, 0, + 45, 54, 57, 63, 66, 69, 60, 39, 36, 90, + 32, 75, 76, 78, 79, 80, 77, 55, 58, 64, + 67, 70, 61, 40, 18, 47, 90, 0, 0, 22, + 89, 71, 72, 33, 0, 51, 44, 0, 0, 34, + 43, 48, 50, 27, 25, 41, 0, 17, 46, 91, + 19, 90, 0, 23, 26, 0, 0, 25, 42, 25, + 20, 24, 0, 25 +}; + + /* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = +{ + -93, -93, -93, -93, -93, -93, -93, -93, 20, -68, + -27, -93, -93, -93, -93, -93, -93, -93, 60, -93, + -93, -93, -92, -93, -93, 43 +}; + + /* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int8 yydefgoto[] = +{ + -1, 2, 3, 4, 31, 32, 33, 34, 35, 103, + 104, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 9, 10, 11, 45, 46, 93 +}; + + /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ +static const yytype_uint8 yytable[] = +{ + 79, 67, 68, 69, 70, 71, 72, 58, 73, 100, + 107, 74, 75, 101, 110, 76, 49, 50, 101, 102, + 113, 77, 59, 78, 61, 62, 63, 64, 65, 66, + 61, 62, 63, 64, 65, 66, 101, 101, 92, 111, + 90, 91, 106, 112, 88, 111, 5, 6, 7, 8, + 88, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 1, 23, 24, 25, 26, 27, 28, 29, 79, + 30, 51, 52, 53, 54, 55, 56, 12, 57, 61, + 62, 63, 64, 65, 66, 60, 48, 80, 47, 6, + 83, 8, 81, 82, 26, 84, 85, 86, 87, 94, + 95, 96, 89, 105, 97, 98, 99, 0, 108, 109, + 101, 0, 88 +}; + +static const yytype_int8 yycheck[] = +{ + 27, 5, 6, 7, 8, 9, 10, 4, 12, 15, + 102, 15, 16, 19, 15, 19, 19, 20, 19, 25, + 112, 25, 19, 27, 5, 6, 7, 8, 9, 10, + 5, 6, 7, 8, 9, 10, 19, 19, 19, 107, + 19, 20, 25, 25, 25, 113, 19, 20, 21, 22, + 25, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 23, 16, 17, 18, 19, 20, 21, 22, 96, + 24, 5, 6, 7, 8, 9, 10, 0, 12, 5, + 6, 7, 8, 9, 10, 25, 4, 27, 26, 20, + 30, 22, 9, 9, 19, 24, 3, 19, 26, 20, + 20, 20, 59, 27, 84, 20, 20, -1, 20, 20, + 19, -1, 25 +}; + + /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 23, 29, 30, 31, 19, 20, 21, 22, 48, + 49, 50, 0, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, + 24, 32, 33, 34, 35, 36, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 51, 52, 26, 4, 19, + 20, 5, 6, 7, 8, 9, 10, 12, 4, 19, + 46, 5, 6, 7, 8, 9, 10, 5, 6, 7, + 8, 9, 10, 12, 15, 16, 19, 25, 27, 38, + 46, 9, 9, 46, 24, 3, 19, 26, 25, 53, + 19, 20, 19, 53, 20, 20, 20, 36, 20, 20, + 15, 19, 25, 37, 38, 27, 25, 50, 20, 20, + 15, 37, 25, 50 +}; + + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 28, 29, 29, 30, 31, 31, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 33, 34, 35, 35, + 35, 35, 36, 36, 36, 37, 37, 38, 39, 39, + 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, + 41, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 43, 44, 44, 44, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, + 46, 47, 48, 48, 49, 49, 50, 50, 51, 52, + 53, 53 +}; + + /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 1, 1, 2, 0, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 3, 2, 4, + 6, 1, 2, 4, 6, 0, 1, 2, 1, 2, + 1, 1, 2, 2, 3, 1, 2, 1, 2, 2, + 2, 3, 5, 3, 3, 2, 4, 2, 3, 1, + 3, 2, 1, 1, 2, 2, 1, 2, 2, 1, + 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, + 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 0, 2 +}; + + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (pc, YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (0) + +/* Error token number */ +#define YYTERROR 1 +#define YYERRCODE 256 + + + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include <stdio.h> /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + +/* This macro is provided for backward compatibility. */ +#ifndef YY_LOCATION_PRINT +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +#endif + + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value, pc); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + + +/*----------------------------------------. +| Print this symbol's value on YYOUTPUT. | +`----------------------------------------*/ + +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, parser_control *pc) +{ + FILE *yyo = yyoutput; + YYUSE (yyo); + YYUSE (pc); + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# endif + YYUSE (yytype); +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, parser_control *pc) +{ + YYFPRINTF (yyoutput, "%s %s (", + yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep, pc); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +static void +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +{ + YYFPRINTF (stderr, "Stack now"); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +static void +yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, parser_control *pc) +{ + unsigned long int yylno = yyrline[yyrule]; + int yynrhs = yyr2[yyrule]; + int yyi; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + YYFPRINTF (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, + yystos[yyssp[yyi + 1 - yynrhs]], + &(yyvsp[(yyi + 1) - (yynrhs)]) + , pc); + YYFPRINTF (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, Rule, pc); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +static YYSIZE_T +yystrlen (const char *yystr) +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +static char * +yystpcpy (char *yydest, const char *yysrc) +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message + about the unexpected token YYTOKEN for the state stack whose top is + YYSSP. + + Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is + not large enough to hold the message. In that case, also set + *YYMSG_ALLOC to the required number of bytes. Return 2 if the + required number of bytes is too large to store. */ +static int +yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, + yytype_int16 *yyssp, int yytoken) +{ + YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); + YYSIZE_T yysize = yysize0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + /* Internationalized format string. */ + const char *yyformat = YY_NULLPTR; + /* Arguments of yyformat. */ + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + /* Number of reported tokens (one for the "unexpected", one per + "expected"). */ + int yycount = 0; + + /* There are many possibilities here to consider: + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in yychar) is if + this state is a consistent state with a default action. Thus, + detecting the absence of a lookahead is sufficient to determine + that there is no unexpected or expected token to report. In that + case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is a + consistent state with a default action. There might have been a + previous inconsistent state, consistent state with a non-default + action, or user semantic action that manipulated yychar. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state merging + (from LALR or IELR) and default reductions corrupt the expected + token list. However, the list is correct for canonical LR with + one exception: it will still contain any token that will not be + accepted due to an error action in a later state. + */ + if (yytoken != YYEMPTY) + { + int yyn = yypact[*yyssp]; + yyarg[yycount++] = yytname[yytoken]; + if (!yypact_value_is_default (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yyx; + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR + && !yytable_value_is_error (yytable[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + break; + } + yyarg[yycount++] = yytname[yyx]; + { + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); + if (! (yysize <= yysize1 + && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } + } + } + } + + switch (yycount) + { +# define YYCASE_(N, S) \ + case N: \ + yyformat = S; \ + break + YYCASE_(0, YY_("syntax error")); + YYCASE_(1, YY_("syntax error, unexpected %s")); + YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); + YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); + YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); + YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +# undef YYCASE_ + } + + { + YYSIZE_T yysize1 = yysize + yystrlen (yyformat); + if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } + + if (*yymsg_alloc < yysize) + { + *yymsg_alloc = 2 * yysize; + if (! (yysize <= *yymsg_alloc + && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) + *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; + return 1; + } + + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + { + char *yyp = *yymsg; + int yyi = 0; + while ((*yyp = *yyformat) != '\0') + if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyformat += 2; + } + else + { + yyp++; + yyformat++; + } + } + return 0; +} +#endif /* YYERROR_VERBOSE */ + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, parser_control *pc) +{ + YYUSE (yyvaluep); + YYUSE (pc); + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + + + +/*----------. +| yyparse. | +`----------*/ + +int +yyparse (parser_control *pc) +{ +/* The lookahead symbol. */ +int yychar; + + +/* The semantic value of the lookahead symbol. */ +/* Default value used for initialization, for pacifying older GCCs + or non-GCC compilers. */ +YY_INITIAL_VALUE (static YYSTYPE yyval_default;) +YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); + + /* Number of syntax errors so far. */ + int yynerrs; + + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + + /* The stacks and their tools: + 'yyss': related to states. + 'yyvs': related to semantic values. + + Refer to the stacks through separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; + + YYSIZE_T yystacksize; + + int yyn; + int yyresult; + /* Lookahead token as an internal (translated) token number. */ + int yytoken = 0; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + yyssp = yyss = yyssa; + yyvsp = yyvs = yyvsa; + yystacksize = YYINITDEPTH; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + if (yystate == YYFINAL) + YYACCEPT; + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to lookahead token. */ + yyn = yypact[yystate]; + if (yypact_value_is_default (yyn)) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = yylex (&yylval, pc); + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yytable_value_is_error (yyn)) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token. */ + yychar = YYEMPTY; + + yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + '$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 4: +#line 609 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->seconds = (yyvsp[0].timespec); + pc->timespec_seen = true; + debug_print_current_time (_("number of seconds"), pc); + } +#line 1887 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 7: +#line 623 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->times_seen++; pc->dates_seen++; + debug_print_current_time (_("datetime"), pc); + } +#line 1896 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 8: +#line 628 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->times_seen++; + debug_print_current_time (_("time"), pc); + } +#line 1905 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 9: +#line 633 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->local_zones_seen++; + debug_print_current_time (_("local_zone"), pc); + } +#line 1914 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 10: +#line 638 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->zones_seen++; + debug_print_current_time (_("zone"), pc); + } +#line 1923 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 11: +#line 643 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->dates_seen++; + debug_print_current_time (_("date"), pc); + } +#line 1932 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 12: +#line 648 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->days_seen++; + debug_print_current_time (_("day"), pc); + } +#line 1941 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 13: +#line 653 "parse-datetime.y" /* yacc.c:1646 */ + { + debug_print_relative_time (_("relative"), pc); + } +#line 1949 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 14: +#line 657 "parse-datetime.y" /* yacc.c:1646 */ + { + debug_print_current_time (_("number"), pc); + } +#line 1957 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 15: +#line 661 "parse-datetime.y" /* yacc.c:1646 */ + { + debug_print_relative_time (_("hybrid"), pc); + } +#line 1965 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 18: +#line 676 "parse-datetime.y" /* yacc.c:1646 */ + { + set_hhmmss (pc, (yyvsp[-1].textintval).value, 0, 0, 0); + pc->meridian = (yyvsp[0].intval); + } +#line 1974 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 19: +#line 681 "parse-datetime.y" /* yacc.c:1646 */ + { + set_hhmmss (pc, (yyvsp[-3].textintval).value, (yyvsp[-1].textintval).value, 0, 0); + pc->meridian = (yyvsp[0].intval); + } +#line 1983 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 20: +#line 686 "parse-datetime.y" /* yacc.c:1646 */ + { + set_hhmmss (pc, (yyvsp[-5].textintval).value, (yyvsp[-3].textintval).value, (yyvsp[-1].timespec).tv_sec, (yyvsp[-1].timespec).tv_nsec); + pc->meridian = (yyvsp[0].intval); + } +#line 1992 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 22: +#line 695 "parse-datetime.y" /* yacc.c:1646 */ + { + set_hhmmss (pc, (yyvsp[-1].textintval).value, 0, 0, 0); + pc->meridian = MER24; + } +#line 2001 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 23: +#line 700 "parse-datetime.y" /* yacc.c:1646 */ + { + set_hhmmss (pc, (yyvsp[-3].textintval).value, (yyvsp[-1].textintval).value, 0, 0); + pc->meridian = MER24; + } +#line 2010 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 24: +#line 705 "parse-datetime.y" /* yacc.c:1646 */ + { + set_hhmmss (pc, (yyvsp[-5].textintval).value, (yyvsp[-3].textintval).value, (yyvsp[-1].timespec).tv_sec, (yyvsp[-1].timespec).tv_nsec); + pc->meridian = MER24; + } +#line 2019 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 27: +#line 718 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->zones_seen++; + if (! time_zone_hhmm (pc, (yyvsp[-1].textintval), (yyvsp[0].intval))) YYABORT; + } +#line 2028 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 28: +#line 743 "parse-datetime.y" /* yacc.c:1646 */ + { pc->local_isdst = (yyvsp[0].intval); } +#line 2034 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 29: +#line 745 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->local_isdst = 1; + pc->dsts_seen++; + } +#line 2043 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 30: +#line 755 "parse-datetime.y" /* yacc.c:1646 */ + { pc->time_zone = (yyvsp[0].intval); } +#line 2049 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 31: +#line 757 "parse-datetime.y" /* yacc.c:1646 */ + { pc->time_zone = HOUR (7); } +#line 2055 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 32: +#line 759 "parse-datetime.y" /* yacc.c:1646 */ + { pc->time_zone = (yyvsp[-1].intval); + if (! apply_relative_time (pc, (yyvsp[0].rel), 1)) YYABORT; + debug_print_relative_time (_("relative"), pc); + } +#line 2064 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 33: +#line 764 "parse-datetime.y" /* yacc.c:1646 */ + { pc->time_zone = HOUR (7); + if (! apply_relative_time (pc, (yyvsp[0].rel), 1)) YYABORT; + debug_print_relative_time (_("relative"), pc); + } +#line 2073 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 34: +#line 769 "parse-datetime.y" /* yacc.c:1646 */ + { if (! time_zone_hhmm (pc, (yyvsp[-1].textintval), (yyvsp[0].intval))) YYABORT; + if (INT_ADD_WRAPV (pc->time_zone, (yyvsp[-2].intval), &pc->time_zone)) YYABORT; } +#line 2080 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 35: +#line 772 "parse-datetime.y" /* yacc.c:1646 */ + { pc->time_zone = (yyvsp[0].intval) + 60 * 60; } +#line 2086 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 36: +#line 774 "parse-datetime.y" /* yacc.c:1646 */ + { pc->time_zone = (yyvsp[-1].intval) + 60 * 60; } +#line 2092 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 37: +#line 779 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->day_ordinal = 0; + pc->day_number = (yyvsp[0].intval); + } +#line 2101 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 38: +#line 784 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->day_ordinal = 0; + pc->day_number = (yyvsp[-1].intval); + } +#line 2110 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 39: +#line 789 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->day_ordinal = (yyvsp[-1].intval); + pc->day_number = (yyvsp[0].intval); + pc->debug_ordinal_day_seen = true; + } +#line 2120 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 40: +#line 795 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->day_ordinal = (yyvsp[-1].textintval).value; + pc->day_number = (yyvsp[0].intval); + pc->debug_ordinal_day_seen = true; + } +#line 2130 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 41: +#line 804 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->month = (yyvsp[-2].textintval).value; + pc->day = (yyvsp[0].textintval).value; + } +#line 2139 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 42: +#line 809 "parse-datetime.y" /* yacc.c:1646 */ + { + /* Interpret as YYYY/MM/DD if the first value has 4 or more digits, + otherwise as MM/DD/YY. + The goal in recognizing YYYY/MM/DD is solely to support legacy + machine-generated dates like those in an RCS log listing. If + you want portability, use the ISO 8601 format. */ + if (4 <= (yyvsp[-4].textintval).digits) + { + if (pc->parse_datetime_debug) + { + intmax_t digits = (yyvsp[-4].textintval).digits; + dbg_printf (_("warning: value %"PRIdMAX" has %"PRIdMAX" digits. " + "Assuming YYYY/MM/DD\n"), + (yyvsp[-4].textintval).value, digits); + } + + pc->year = (yyvsp[-4].textintval); + pc->month = (yyvsp[-2].textintval).value; + pc->day = (yyvsp[0].textintval).value; + } + else + { + if (pc->parse_datetime_debug) + dbg_printf (_("warning: value %"PRIdMAX" has less than 4 digits. " + "Assuming MM/DD/YY[YY]\n"), + (yyvsp[-4].textintval).value); + + pc->month = (yyvsp[-4].textintval).value; + pc->day = (yyvsp[-2].textintval).value; + pc->year = (yyvsp[0].textintval); + } + } +#line 2176 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 43: +#line 842 "parse-datetime.y" /* yacc.c:1646 */ + { + /* E.g., 17-JUN-1992. */ + pc->day = (yyvsp[-2].textintval).value; + pc->month = (yyvsp[-1].intval); + if (INT_SUBTRACT_WRAPV (0, (yyvsp[0].textintval).value, &pc->year.value)) YYABORT; + pc->year.digits = (yyvsp[0].textintval).digits; + } +#line 2188 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 44: +#line 850 "parse-datetime.y" /* yacc.c:1646 */ + { + /* E.g., JUN-17-1992. */ + pc->month = (yyvsp[-2].intval); + if (INT_SUBTRACT_WRAPV (0, (yyvsp[-1].textintval).value, &pc->day)) YYABORT; + if (INT_SUBTRACT_WRAPV (0, (yyvsp[0].textintval).value, &pc->year.value)) YYABORT; + pc->year.digits = (yyvsp[0].textintval).digits; + } +#line 2200 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 45: +#line 858 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->month = (yyvsp[-1].intval); + pc->day = (yyvsp[0].textintval).value; + } +#line 2209 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 46: +#line 863 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->month = (yyvsp[-3].intval); + pc->day = (yyvsp[-2].textintval).value; + pc->year = (yyvsp[0].textintval); + } +#line 2219 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 47: +#line 869 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->day = (yyvsp[-1].textintval).value; + pc->month = (yyvsp[0].intval); + } +#line 2228 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 48: +#line 874 "parse-datetime.y" /* yacc.c:1646 */ + { + pc->day = (yyvsp[-2].textintval).value; + pc->month = (yyvsp[-1].intval); + pc->year = (yyvsp[0].textintval); + } +#line 2238 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 50: +#line 884 "parse-datetime.y" /* yacc.c:1646 */ + { + /* ISO 8601 format. YYYY-MM-DD. */ + pc->year = (yyvsp[-2].textintval); + if (INT_SUBTRACT_WRAPV (0, (yyvsp[-1].textintval).value, &pc->month)) YYABORT; + if (INT_SUBTRACT_WRAPV (0, (yyvsp[0].textintval).value, &pc->day)) YYABORT; + } +#line 2249 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 51: +#line 894 "parse-datetime.y" /* yacc.c:1646 */ + { if (! apply_relative_time (pc, (yyvsp[-1].rel), (yyvsp[0].intval))) YYABORT; } +#line 2255 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 52: +#line 896 "parse-datetime.y" /* yacc.c:1646 */ + { if (! apply_relative_time (pc, (yyvsp[0].rel), 1)) YYABORT; } +#line 2261 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 53: +#line 898 "parse-datetime.y" /* yacc.c:1646 */ + { if (! apply_relative_time (pc, (yyvsp[0].rel), 1)) YYABORT; } +#line 2267 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 54: +#line 903 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).year = (yyvsp[-1].intval); } +#line 2273 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 55: +#line 905 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).year = (yyvsp[-1].textintval).value; } +#line 2279 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 56: +#line 907 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).year = 1; } +#line 2285 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 57: +#line 909 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).month = (yyvsp[-1].intval); } +#line 2291 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 58: +#line 911 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).month = (yyvsp[-1].textintval).value; } +#line 2297 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 59: +#line 913 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).month = 1; } +#line 2303 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 60: +#line 915 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; + if (INT_MULTIPLY_WRAPV ((yyvsp[-1].intval), (yyvsp[0].intval), &(yyval.rel).day)) YYABORT; } +#line 2310 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 61: +#line 918 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; + if (INT_MULTIPLY_WRAPV ((yyvsp[-1].textintval).value, (yyvsp[0].intval), &(yyval.rel).day)) YYABORT; } +#line 2317 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 62: +#line 921 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).day = (yyvsp[0].intval); } +#line 2323 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 63: +#line 923 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).hour = (yyvsp[-1].intval); } +#line 2329 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 64: +#line 925 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).hour = (yyvsp[-1].textintval).value; } +#line 2335 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 65: +#line 927 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).hour = 1; } +#line 2341 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 66: +#line 929 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).minutes = (yyvsp[-1].intval); } +#line 2347 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 67: +#line 931 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).minutes = (yyvsp[-1].textintval).value; } +#line 2353 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 68: +#line 933 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).minutes = 1; } +#line 2359 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 69: +#line 935 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[-1].intval); } +#line 2365 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 70: +#line 937 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[-1].textintval).value; } +#line 2371 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 71: +#line 939 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[-1].timespec).tv_sec; (yyval.rel).ns = (yyvsp[-1].timespec).tv_nsec; } +#line 2377 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 72: +#line 941 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[-1].timespec).tv_sec; (yyval.rel).ns = (yyvsp[-1].timespec).tv_nsec; } +#line 2383 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 73: +#line 943 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = 1; } +#line 2389 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 75: +#line 949 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).year = (yyvsp[-1].textintval).value; } +#line 2395 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 76: +#line 951 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).month = (yyvsp[-1].textintval).value; } +#line 2401 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 77: +#line 953 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; + if (INT_MULTIPLY_WRAPV ((yyvsp[-1].textintval).value, (yyvsp[0].intval), &(yyval.rel).day)) YYABORT; } +#line 2408 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 78: +#line 956 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).hour = (yyvsp[-1].textintval).value; } +#line 2414 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 79: +#line 958 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).minutes = (yyvsp[-1].textintval).value; } +#line 2420 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 80: +#line 960 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[-1].textintval).value; } +#line 2426 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 81: +#line 965 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).day = (yyvsp[0].intval); } +#line 2432 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 85: +#line 973 "parse-datetime.y" /* yacc.c:1646 */ + { if (time_overflow ((yyvsp[0].textintval).value)) YYABORT; + (yyval.timespec).tv_sec = (yyvsp[0].textintval).value; (yyval.timespec).tv_nsec = 0; } +#line 2439 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 87: +#line 980 "parse-datetime.y" /* yacc.c:1646 */ + { if (time_overflow ((yyvsp[0].textintval).value)) YYABORT; + (yyval.timespec).tv_sec = (yyvsp[0].textintval).value; (yyval.timespec).tv_nsec = 0; } +#line 2446 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 88: +#line 986 "parse-datetime.y" /* yacc.c:1646 */ + { digits_to_date_time (pc, (yyvsp[0].textintval)); } +#line 2452 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 89: +#line 991 "parse-datetime.y" /* yacc.c:1646 */ + { + /* Hybrid all-digit and relative offset, so that we accept e.g., + "YYYYMMDD +N days" as well as "YYYYMMDD N days". */ + digits_to_date_time (pc, (yyvsp[-1].textintval)); + if (! apply_relative_time (pc, (yyvsp[0].rel), 1)) YYABORT; + } +#line 2463 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 90: +#line 1001 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.intval) = -1; } +#line 2469 "parse-datetime.c" /* yacc.c:1646 */ + break; + + case 91: +#line 1003 "parse-datetime.y" /* yacc.c:1646 */ + { (yyval.intval) = (yyvsp[0].textintval).value; } +#line 2475 "parse-datetime.c" /* yacc.c:1646 */ + break; + + +#line 2479 "parse-datetime.c" /* yacc.c:1646 */ + default: break; + } + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action invokes + YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or + if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an + incorrect destructor might then be invoked immediately. In the + case of YYERROR or YYBACKUP, subsequent parser actions might lead + to an incorrect destructor call or verbose syntax error message + before the lookahead is translated. */ + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + /* Now 'shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*--------------------------------------. +| yyerrlab -- here on detecting error. | +`--------------------------------------*/ +yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); + + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (pc, YY_("syntax error")); +#else +# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ + yyssp, yytoken) + { + char const *yymsgp = YY_("syntax error"); + int yysyntax_error_status; + yysyntax_error_status = YYSYNTAX_ERROR; + if (yysyntax_error_status == 0) + yymsgp = yymsg; + else if (yysyntax_error_status == 1) + { + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + if (!yymsg) + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + yysyntax_error_status = 2; + } + else + { + yysyntax_error_status = YYSYNTAX_ERROR; + yymsgp = yymsg; + } + } + yyerror (pc, yymsgp); + if (yysyntax_error_status == 2) + goto yyexhaustedlab; + } +# undef YYSYNTAX_ERROR +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval, pc); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule whose action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (!yypact_value_is_default (yyn)) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp, pc); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#if !defined yyoverflow || YYERROR_VERBOSE +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (pc, YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEMPTY) + { + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = YYTRANSLATE (yychar); + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval, pc); + } + /* Do not reclaim the symbols of the rule whose action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp, pc); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + return yyresult; +} +#line 1006 "parse-datetime.y" /* yacc.c:1906 */ + + +static table const meridian_table[] = +{ + { "AM", tMERIDIAN, MERam }, + { "A.M.", tMERIDIAN, MERam }, + { "PM", tMERIDIAN, MERpm }, + { "P.M.", tMERIDIAN, MERpm }, + { NULL, 0, 0 } +}; + +static table const dst_table[] = +{ + { "DST", tDST, 0 } +}; + +static table const month_and_day_table[] = +{ + { "JANUARY", tMONTH, 1 }, + { "FEBRUARY", tMONTH, 2 }, + { "MARCH", tMONTH, 3 }, + { "APRIL", tMONTH, 4 }, + { "MAY", tMONTH, 5 }, + { "JUNE", tMONTH, 6 }, + { "JULY", tMONTH, 7 }, + { "AUGUST", tMONTH, 8 }, + { "SEPTEMBER",tMONTH, 9 }, + { "SEPT", tMONTH, 9 }, + { "OCTOBER", tMONTH, 10 }, + { "NOVEMBER", tMONTH, 11 }, + { "DECEMBER", tMONTH, 12 }, + { "SUNDAY", tDAY, 0 }, + { "MONDAY", tDAY, 1 }, + { "TUESDAY", tDAY, 2 }, + { "TUES", tDAY, 2 }, + { "WEDNESDAY",tDAY, 3 }, + { "WEDNES", tDAY, 3 }, + { "THURSDAY", tDAY, 4 }, + { "THUR", tDAY, 4 }, + { "THURS", tDAY, 4 }, + { "FRIDAY", tDAY, 5 }, + { "SATURDAY", tDAY, 6 }, + { NULL, 0, 0 } +}; + +static table const time_units_table[] = +{ + { "YEAR", tYEAR_UNIT, 1 }, + { "MONTH", tMONTH_UNIT, 1 }, + { "FORTNIGHT",tDAY_UNIT, 14 }, + { "WEEK", tDAY_UNIT, 7 }, + { "DAY", tDAY_UNIT, 1 }, + { "HOUR", tHOUR_UNIT, 1 }, + { "MINUTE", tMINUTE_UNIT, 1 }, + { "MIN", tMINUTE_UNIT, 1 }, + { "SECOND", tSEC_UNIT, 1 }, + { "SEC", tSEC_UNIT, 1 }, + { NULL, 0, 0 } +}; + +/* Assorted relative-time words. */ +static table const relative_time_table[] = +{ + { "TOMORROW", tDAY_SHIFT, 1 }, + { "YESTERDAY",tDAY_SHIFT, -1 }, + { "TODAY", tDAY_SHIFT, 0 }, + { "NOW", tDAY_SHIFT, 0 }, + { "LAST", tORDINAL, -1 }, + { "THIS", tORDINAL, 0 }, + { "NEXT", tORDINAL, 1 }, + { "FIRST", tORDINAL, 1 }, +/*{ "SECOND", tORDINAL, 2 }, */ + { "THIRD", tORDINAL, 3 }, + { "FOURTH", tORDINAL, 4 }, + { "FIFTH", tORDINAL, 5 }, + { "SIXTH", tORDINAL, 6 }, + { "SEVENTH", tORDINAL, 7 }, + { "EIGHTH", tORDINAL, 8 }, + { "NINTH", tORDINAL, 9 }, + { "TENTH", tORDINAL, 10 }, + { "ELEVENTH", tORDINAL, 11 }, + { "TWELFTH", tORDINAL, 12 }, + { "AGO", tAGO, -1 }, + { "HENCE", tAGO, 1 }, + { NULL, 0, 0 } +}; + +/* The universal time zone table. These labels can be used even for + timestamps that would not otherwise be valid, e.g., GMT timestamps + oin London during summer. */ +static table const universal_time_zone_table[] = +{ + { "GMT", tZONE, HOUR ( 0) }, /* Greenwich Mean */ + { "UT", tZONE, HOUR ( 0) }, /* Universal (Coordinated) */ + { "UTC", tZONE, HOUR ( 0) }, + { NULL, 0, 0 } +}; + +/* The time zone table. This table is necessarily incomplete, as time + zone abbreviations are ambiguous; e.g., Australians interpret "EST" + as Eastern time in Australia, not as US Eastern Standard Time. + You cannot rely on parse_datetime to handle arbitrary time zone + abbreviations; use numeric abbreviations like "-0500" instead. */ +static table const time_zone_table[] = +{ + { "WET", tZONE, HOUR ( 0) }, /* Western European */ + { "WEST", tDAYZONE, HOUR ( 0) }, /* Western European Summer */ + { "BST", tDAYZONE, HOUR ( 0) }, /* British Summer */ + { "ART", tZONE, -HOUR ( 3) }, /* Argentina */ + { "BRT", tZONE, -HOUR ( 3) }, /* Brazil */ + { "BRST", tDAYZONE, -HOUR ( 3) }, /* Brazil Summer */ + { "NST", tZONE, -(HOUR ( 3) + 30 * 60) }, /* Newfoundland Standard */ + { "NDT", tDAYZONE,-(HOUR ( 3) + 30 * 60) }, /* Newfoundland Daylight */ + { "AST", tZONE, -HOUR ( 4) }, /* Atlantic Standard */ + { "ADT", tDAYZONE, -HOUR ( 4) }, /* Atlantic Daylight */ + { "CLT", tZONE, -HOUR ( 4) }, /* Chile */ + { "CLST", tDAYZONE, -HOUR ( 4) }, /* Chile Summer */ + { "EST", tZONE, -HOUR ( 5) }, /* Eastern Standard */ + { "EDT", tDAYZONE, -HOUR ( 5) }, /* Eastern Daylight */ + { "CST", tZONE, -HOUR ( 6) }, /* Central Standard */ + { "CDT", tDAYZONE, -HOUR ( 6) }, /* Central Daylight */ + { "MST", tZONE, -HOUR ( 7) }, /* Mountain Standard */ + { "MDT", tDAYZONE, -HOUR ( 7) }, /* Mountain Daylight */ + { "PST", tZONE, -HOUR ( 8) }, /* Pacific Standard */ + { "PDT", tDAYZONE, -HOUR ( 8) }, /* Pacific Daylight */ + { "AKST", tZONE, -HOUR ( 9) }, /* Alaska Standard */ + { "AKDT", tDAYZONE, -HOUR ( 9) }, /* Alaska Daylight */ + { "HST", tZONE, -HOUR (10) }, /* Hawaii Standard */ + { "HAST", tZONE, -HOUR (10) }, /* Hawaii-Aleutian Standard */ + { "HADT", tDAYZONE, -HOUR (10) }, /* Hawaii-Aleutian Daylight */ + { "SST", tZONE, -HOUR (12) }, /* Samoa Standard */ + { "WAT", tZONE, HOUR ( 1) }, /* West Africa */ + { "CET", tZONE, HOUR ( 1) }, /* Central European */ + { "CEST", tDAYZONE, HOUR ( 1) }, /* Central European Summer */ + { "MET", tZONE, HOUR ( 1) }, /* Middle European */ + { "MEZ", tZONE, HOUR ( 1) }, /* Middle European */ + { "MEST", tDAYZONE, HOUR ( 1) }, /* Middle European Summer */ + { "MESZ", tDAYZONE, HOUR ( 1) }, /* Middle European Summer */ + { "EET", tZONE, HOUR ( 2) }, /* Eastern European */ + { "EEST", tDAYZONE, HOUR ( 2) }, /* Eastern European Summer */ + { "CAT", tZONE, HOUR ( 2) }, /* Central Africa */ + { "SAST", tZONE, HOUR ( 2) }, /* South Africa Standard */ + { "EAT", tZONE, HOUR ( 3) }, /* East Africa */ + { "MSK", tZONE, HOUR ( 3) }, /* Moscow */ + { "MSD", tDAYZONE, HOUR ( 3) }, /* Moscow Daylight */ + { "IST", tZONE, (HOUR ( 5) + 30 * 60) }, /* India Standard */ + { "SGT", tZONE, HOUR ( 8) }, /* Singapore */ + { "KST", tZONE, HOUR ( 9) }, /* Korea Standard */ + { "JST", tZONE, HOUR ( 9) }, /* Japan Standard */ + { "GST", tZONE, HOUR (10) }, /* Guam Standard */ + { "NZST", tZONE, HOUR (12) }, /* New Zealand Standard */ + { "NZDT", tDAYZONE, HOUR (12) }, /* New Zealand Daylight */ + { NULL, 0, 0 } +}; + +/* Military time zone table. + + Note 'T' is a special case, as it is used as the separator in ISO + 8601 date and time of day representation. */ +static table const military_table[] = +{ + { "A", tZONE, -HOUR ( 1) }, + { "B", tZONE, -HOUR ( 2) }, + { "C", tZONE, -HOUR ( 3) }, + { "D", tZONE, -HOUR ( 4) }, + { "E", tZONE, -HOUR ( 5) }, + { "F", tZONE, -HOUR ( 6) }, + { "G", tZONE, -HOUR ( 7) }, + { "H", tZONE, -HOUR ( 8) }, + { "I", tZONE, -HOUR ( 9) }, + { "K", tZONE, -HOUR (10) }, + { "L", tZONE, -HOUR (11) }, + { "M", tZONE, -HOUR (12) }, + { "N", tZONE, HOUR ( 1) }, + { "O", tZONE, HOUR ( 2) }, + { "P", tZONE, HOUR ( 3) }, + { "Q", tZONE, HOUR ( 4) }, + { "R", tZONE, HOUR ( 5) }, + { "S", tZONE, HOUR ( 6) }, + { "T", 'T', 0 }, + { "U", tZONE, HOUR ( 8) }, + { "V", tZONE, HOUR ( 9) }, + { "W", tZONE, HOUR (10) }, + { "X", tZONE, HOUR (11) }, + { "Y", tZONE, HOUR (12) }, + { "Z", tZONE, HOUR ( 0) }, + { NULL, 0, 0 } +}; + + + +/* Convert a time zone expressed as HH:MM into an integer count of + seconds. If MM is negative, then S is of the form HHMM and needs + to be picked apart; otherwise, S is of the form HH. As specified in + http://www.opengroup.org/susv3xbd/xbd_chap08.html#tag_08_03, allow + only valid TZ range, and consider first two digits as hours, if no + minutes specified. Return true if successful. */ + +static bool +time_zone_hhmm (parser_control *pc, textint s, intmax_t mm) +{ + intmax_t n_minutes; + bool overflow = false; + + /* If the length of S is 1 or 2 and no minutes are specified, + interpret it as a number of hours. */ + if (s.digits <= 2 && mm < 0) + s.value *= 100; + + if (mm < 0) + n_minutes = (s.value / 100) * 60 + s.value % 100; + else + { + overflow |= INT_MULTIPLY_WRAPV (s.value, 60, &n_minutes); + overflow |= (s.negative + ? INT_SUBTRACT_WRAPV (n_minutes, mm, &n_minutes) + : INT_ADD_WRAPV (n_minutes, mm, &n_minutes)); + } + + if (overflow || ! (-24 * 60 <= n_minutes && n_minutes <= 24 * 60)) + return false; + pc->time_zone = n_minutes * 60; + return true; +} + +static int +to_hour (intmax_t hours, int meridian) +{ + switch (meridian) + { + default: /* Pacify GCC. */ + case MER24: + return 0 <= hours && hours < 24 ? hours : -1; + case MERam: + return 0 < hours && hours < 12 ? hours : hours == 12 ? 0 : -1; + case MERpm: + return 0 < hours && hours < 12 ? hours + 12 : hours == 12 ? 12 : -1; + } +} + +enum { TM_YEAR_BASE = 1900 }; +enum { TM_YEAR_BUFSIZE = INT_BUFSIZE_BOUND (int) + 1 }; + +/* Convert TM_YEAR, a year minus 1900, to a string that is numerically + correct even if subtracting 1900 would overflow. */ + +static char const * +tm_year_str (int tm_year, char buf[TM_YEAR_BUFSIZE]) +{ + verify (TM_YEAR_BASE % 100 == 0); + sprintf (buf, &"-%02d%02d"[-TM_YEAR_BASE <= tm_year], + abs (tm_year / 100 + TM_YEAR_BASE / 100), + abs (tm_year % 100)); + return buf; +} + +/* Convert a text year number to a year minus 1900, working correctly + even if the input is in the range INT_MAX .. INT_MAX + 1900 - 1. */ + +static bool +to_tm_year (textint textyear, bool debug, int *tm_year) +{ + intmax_t year = textyear.value; + + /* XPG4 suggests that years 00-68 map to 2000-2068, and + years 69-99 map to 1969-1999. */ + if (0 <= year && textyear.digits == 2) + { + year += year < 69 ? 2000 : 1900; + if (debug) + dbg_printf (_("warning: adjusting year value %"PRIdMAX + " to %"PRIdMAX"\n"), + textyear.value, year); + } + + if (year < 0 + ? INT_SUBTRACT_WRAPV (-TM_YEAR_BASE, year, tm_year) + : INT_SUBTRACT_WRAPV (year, TM_YEAR_BASE, tm_year)) + { + if (debug) + dbg_printf (_("error: out-of-range year %"PRIdMAX"\n"), year); + return false; + } + + return true; +} + +static table const * _GL_ATTRIBUTE_PURE +lookup_zone (parser_control const *pc, char const *name) +{ + table const *tp; + + for (tp = universal_time_zone_table; tp->name; tp++) + if (strcmp (name, tp->name) == 0) + return tp; + + /* Try local zone abbreviations before those in time_zone_table, as + the local ones are more likely to be right. */ + for (tp = pc->local_time_zone_table; tp->name; tp++) + if (strcmp (name, tp->name) == 0) + return tp; + + for (tp = time_zone_table; tp->name; tp++) + if (strcmp (name, tp->name) == 0) + return tp; + + return NULL; +} + +#if ! HAVE_TM_GMTOFF +/* Yield the difference between *A and *B, + measured in seconds, ignoring leap seconds. + The body of this function is taken directly from the GNU C Library; + see strftime.c. */ +static int +tm_diff (const struct tm *a, const struct tm *b) +{ + /* Compute intervening leap days correctly even if year is negative. + Take care to avoid int overflow in leap day calculations, + but it's OK to assume that A and B are close to each other. */ + int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3); + int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3); + int a100 = a4 / 25 - (a4 % 25 < 0); + int b100 = b4 / 25 - (b4 % 25 < 0); + int a400 = SHR (a100, 2); + int b400 = SHR (b100, 2); + int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); + int years = a->tm_year - b->tm_year; + int days = (365 * years + intervening_leap_days + + (a->tm_yday - b->tm_yday)); + return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour)) + + (a->tm_min - b->tm_min)) + + (a->tm_sec - b->tm_sec)); +} +#endif /* ! HAVE_TM_GMTOFF */ + +static table const * +lookup_word (parser_control const *pc, char *word) +{ + char *p; + char *q; + ptrdiff_t wordlen; + table const *tp; + bool period_found; + bool abbrev; + + /* Make it uppercase. */ + for (p = word; *p; p++) + *p = c_toupper (to_uchar (*p)); + + for (tp = meridian_table; tp->name; tp++) + if (strcmp (word, tp->name) == 0) + return tp; + + /* See if we have an abbreviation for a month. */ + wordlen = strlen (word); + abbrev = wordlen == 3 || (wordlen == 4 && word[3] == '.'); + + for (tp = month_and_day_table; tp->name; tp++) + if ((abbrev ? strncmp (word, tp->name, 3) : strcmp (word, tp->name)) == 0) + return tp; + + if ((tp = lookup_zone (pc, word))) + return tp; + + if (strcmp (word, dst_table[0].name) == 0) + return dst_table; + + for (tp = time_units_table; tp->name; tp++) + if (strcmp (word, tp->name) == 0) + return tp; + + /* Strip off any plural and try the units table again. */ + if (word[wordlen - 1] == 'S') + { + word[wordlen - 1] = '\0'; + for (tp = time_units_table; tp->name; tp++) + if (strcmp (word, tp->name) == 0) + return tp; + word[wordlen - 1] = 'S'; /* For "this" in relative_time_table. */ + } + + for (tp = relative_time_table; tp->name; tp++) + if (strcmp (word, tp->name) == 0) + return tp; + + /* Military time zones. */ + if (wordlen == 1) + for (tp = military_table; tp->name; tp++) + if (word[0] == tp->name[0]) + return tp; + + /* Drop out any periods and try the time zone table again. */ + for (period_found = false, p = q = word; (*p = *q); q++) + if (*q == '.') + period_found = true; + else + p++; + if (period_found && (tp = lookup_zone (pc, word))) + return tp; + + return NULL; +} + +static int +yylex (union YYSTYPE *lvalp, parser_control *pc) +{ + unsigned char c; + + for (;;) + { + while (c = *pc->input, c_isspace (c)) + pc->input++; + + if (c_isdigit (c) || c == '-' || c == '+') + { + char const *p; + int sign; + intmax_t value = 0; + if (c == '-' || c == '+') + { + sign = c == '-' ? -1 : 1; + while (c = *++pc->input, c_isspace (c)) + continue; + if (! c_isdigit (c)) + /* skip the '-' sign */ + continue; + } + else + sign = 0; + p = pc->input; + + do + { + if (INT_MULTIPLY_WRAPV (value, 10, &value)) + return '?'; + if (INT_ADD_WRAPV (value, sign < 0 ? '0' - c : c - '0', &value)) + return '?'; + c = *++p; + } + while (c_isdigit (c)); + + if ((c == '.' || c == ',') && c_isdigit (p[1])) + { + time_t s; + int ns; + int digits; + + if (time_overflow (value)) + return '?'; + s = value; + + /* Accumulate fraction, to ns precision. */ + p++; + ns = *p++ - '0'; + for (digits = 2; digits <= LOG10_BILLION; digits++) + { + ns *= 10; + if (c_isdigit (*p)) + ns += *p++ - '0'; + } + + /* Skip excess digits, truncating toward -Infinity. */ + if (sign < 0) + for (; c_isdigit (*p); p++) + if (*p != '0') + { + ns++; + break; + } + while (c_isdigit (*p)) + p++; + + /* Adjust to the timespec convention, which is that + tv_nsec is always a positive offset even if tv_sec is + negative. */ + if (sign < 0 && ns) + { + if (s == TYPE_MINIMUM (time_t)) + return '?'; + s--; + ns = BILLION - ns; + } + + lvalp->timespec.tv_sec = s; + lvalp->timespec.tv_nsec = ns; + pc->input = p; + return sign ? tSDECIMAL_NUMBER : tUDECIMAL_NUMBER; + } + else + { + lvalp->textintval.negative = sign < 0; + lvalp->textintval.value = value; + lvalp->textintval.digits = p - pc->input; + pc->input = p; + return sign ? tSNUMBER : tUNUMBER; + } + } + + if (c_isalpha (c)) + { + char buff[20]; + char *p = buff; + table const *tp; + + do + { + if (p < buff + sizeof buff - 1) + *p++ = c; + c = *++pc->input; + } + while (c_isalpha (c) || c == '.'); + + *p = '\0'; + tp = lookup_word (pc, buff); + if (! tp) + { + if (pc->parse_datetime_debug) + dbg_printf (_("error: unknown word '%s'\n"), buff); + return '?'; + } + lvalp->intval = tp->value; + return tp->type; + } + + if (c != '(') + return to_uchar (*pc->input++); + + ptrdiff_t count = 0; + do + { + c = *pc->input++; + if (c == '\0') + return c; + if (c == '(') + count++; + else if (c == ')') + count--; + } + while (count != 0); + } +} + +/* Do nothing if the parser reports an error. */ +static int +yyerror (parser_control const *pc _GL_UNUSED, + char const *s _GL_UNUSED) +{ + return 0; +} + +/* If *TM0 is the old and *TM1 is the new value of a struct tm after + passing it to mktime_z, return true if it's OK. It's not OK if + mktime failed or if *TM0 has out-of-range mainline members. + The caller should set TM1->tm_wday to -1 before calling mktime, + as a negative tm_wday is how mktime failure is inferred. */ + +static bool +mktime_ok (struct tm const *tm0, struct tm const *tm1) +{ + if (tm1->tm_wday < 0) + return false; + + return ! ((tm0->tm_sec ^ tm1->tm_sec) + | (tm0->tm_min ^ tm1->tm_min) + | (tm0->tm_hour ^ tm1->tm_hour) + | (tm0->tm_mday ^ tm1->tm_mday) + | (tm0->tm_mon ^ tm1->tm_mon) + | (tm0->tm_year ^ tm1->tm_year)); +} + +/* Debugging: format a 'struct tm' into a buffer, taking the parser's + timezone information into account (if pc != NULL). */ +static char const * +debug_strfdatetime (struct tm const *tm, parser_control const *pc, + char *buf, int n) +{ + /* TODO: + 1. find an optimal way to print date string in a clear and unambiguous + format. Currently, always add '(Y-M-D)' prefix. + Consider '2016y01m10d' or 'year(2016) month(01) day(10)'. + + If the user needs debug printing, it means he/she already having + issues with the parsing - better to avoid formats that could + be mis-interpreted (e.g., just YYYY-MM-DD). + + 2. Can strftime be used instead? + depends if it is portable and can print invalid dates on all systems. + + 3. Print timezone information ? + + 4. Print DST information ? + + 5. Print nanosecond information ? + + NOTE: + Printed date/time values might not be valid, e.g., '2016-02-31' + or '2016-19-2016' . These are the values as parsed from the user + string, before validation. + */ + int m = nstrftime (buf, n, "(Y-M-D) %Y-%m-%d %H:%M:%S", tm, 0, 0); + + /* If parser_control information was provided (for timezone), + and there's enough space in the buffer, add timezone info. */ + if (pc && m < n && pc->zones_seen) + { + int tz = pc->time_zone; + + /* Account for DST if tLOCAL_ZONE was seen. */ + if (pc->local_zones_seen && !pc->zones_seen && 0 < pc->local_isdst) + tz += 60 * 60; + + char time_zone_buf[TIME_ZONE_BUFSIZE]; + snprintf (&buf[m], n - m, " TZ=%s", time_zone_str (tz, time_zone_buf)); + } + return buf; +} + +static char const * +debug_strfdate (struct tm const *tm, char *buf, int n) +{ + char tm_year_buf[TM_YEAR_BUFSIZE]; + snprintf (buf, n, "(Y-M-D) %s-%02d-%02d", + tm_year_str (tm->tm_year, tm_year_buf), + tm->tm_mon + 1, tm->tm_mday); + return buf; +} + +static char const * +debug_strftime (struct tm const *tm, char *buf, int n) +{ + snprintf (buf, n, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec); + return buf; +} + +/* If mktime_ok failed, display the failed time values, + and provide possible hints. Example output: + + date: error: invalid date/time value: + date: user provided time: '(Y-M-D) 2006-04-02 02:45:00' + date: normalized time: '(Y-M-D) 2006-04-02 03:45:00' + date: __ + date: possible reasons: + date: non-existing due to daylight-saving time; + date: numeric values overflow; + date: missing timezone; + */ +static void +debug_mktime_not_ok (struct tm const *tm0, struct tm const *tm1, + parser_control const *pc, bool time_zone_seen) +{ + /* TODO: handle t == -1 (as in 'mktime_ok'). */ + char tmp[DBGBUFSIZE]; + int i; + const bool eq_sec = (tm0->tm_sec == tm1->tm_sec); + const bool eq_min = (tm0->tm_min == tm1->tm_min); + const bool eq_hour = (tm0->tm_hour == tm1->tm_hour); + const bool eq_mday = (tm0->tm_mday == tm1->tm_mday); + const bool eq_month = (tm0->tm_mon == tm1->tm_mon); + const bool eq_year = (tm0->tm_year == tm1->tm_year); + + const bool dst_shift = eq_sec && eq_min && !eq_hour + && eq_mday && eq_month && eq_year; + + if (!pc->parse_datetime_debug) + return; + + dbg_printf (_("error: invalid date/time value:\n")); + dbg_printf (_(" user provided time: '%s'\n"), + debug_strfdatetime (tm0, pc, tmp, sizeof tmp)); + dbg_printf (_(" normalized time: '%s'\n"), + debug_strfdatetime (tm1, pc, tmp, sizeof tmp)); + /* The format must be aligned with debug_strfdatetime and the two + DEBUG statements above. This string is not translated. */ + i = snprintf (tmp, sizeof tmp, + " %4s %2s %2s %2s %2s %2s", + eq_year ? "" : "----", + eq_month ? "" : "--", + eq_mday ? "" : "--", + eq_hour ? "" : "--", + eq_min ? "" : "--", + eq_sec ? "" : "--"); + /* Trim trailing whitespace. */ + if (0 <= i) + { + if (sizeof tmp - 1 < i) + i = sizeof tmp - 1; + while (0 < i && tmp[i - 1] == ' ') + --i; + tmp[i] = '\0'; + } + dbg_printf ("%s\n", tmp); + + dbg_printf (_(" possible reasons:\n")); + if (dst_shift) + dbg_printf (_(" non-existing due to daylight-saving time;\n")); + if (!eq_mday && !eq_month) + dbg_printf (_(" invalid day/month combination;\n")); + dbg_printf (_(" numeric values overflow;\n")); + dbg_printf (" %s\n", (time_zone_seen ? _("incorrect timezone") + : _("missing timezone"))); +} + +/* The original interface: run with debug=false and the default timezone. */ +bool +parse_datetime (struct timespec *result, char const *p, + struct timespec const *now) +{ + char const *tzstring = getenv ("TZ"); + timezone_t tz = tzalloc (tzstring); + if (!tz) + return false; + bool ok = parse_datetime2 (result, p, now, 0, tz, tzstring); + tzfree (tz); + return ok; +} + +/* Parse a date/time string, storing the resulting time value into *RESULT. + The string itself is pointed to by P. Return true if successful. + P can be an incomplete or relative time specification; if so, use + *NOW as the basis for the returned time. Default to timezone + TZDEFAULT, which corresponds to tzalloc (TZSTRING). */ +bool +parse_datetime2 (struct timespec *result, char const *p, + struct timespec const *now, unsigned int flags, + timezone_t tzdefault, char const *tzstring) +{ + struct tm tm; + struct tm tm0; + char time_zone_buf[TIME_ZONE_BUFSIZE]; + char dbg_tm[DBGBUFSIZE]; + bool ok = false; + char const *input_sentinel = p + strlen (p); + char *tz1alloc = NULL; + + /* A reasonable upper bound for the size of ordinary TZ strings. + Use heap allocation if TZ's length exceeds this. */ + enum { TZBUFSIZE = 100 }; + char tz1buf[TZBUFSIZE]; + + struct timespec gettime_buffer; + if (! now) + { + gettime (&gettime_buffer); + now = &gettime_buffer; + } + + time_t Start = now->tv_sec; + int Start_ns = now->tv_nsec; + + unsigned char c; + while (c = *p, c_isspace (c)) + p++; + + timezone_t tz = tzdefault; + + /* Store a local copy prior to first "goto". Without this, a prior use + below of RELATIVE_TIME_0 on the RHS might translate to an assignment- + to-temporary, which would trigger a -Wjump-misses-init warning. */ + const relative_time rel_time_0 = RELATIVE_TIME_0; + + if (strncmp (p, "TZ=\"", 4) == 0) + { + char const *tzbase = p + 4; + ptrdiff_t tzsize = 1; + char const *s; + + for (s = tzbase; *s; s++, tzsize++) + if (*s == '\\') + { + s++; + if (! (*s == '\\' || *s == '"')) + break; + } + else if (*s == '"') + { + timezone_t tz1; + char *tz1string = tz1buf; + char *z; + if (TZBUFSIZE < tzsize) + { + tz1alloc = malloc (tzsize); + if (!tz1alloc) + goto fail; + tz1string = tz1alloc; + } + z = tz1string; + for (s = tzbase; *s != '"'; s++) + *z++ = *(s += *s == '\\'); + *z = '\0'; + tz1 = tzalloc (tz1string); + if (!tz1) + goto fail; + tz = tz1; + tzstring = tz1string; + + p = s + 1; + while (c = *p, c_isspace (c)) + p++; + + break; + } + } + + struct tm tmp; + if (! localtime_rz (tz, &now->tv_sec, &tmp)) + goto fail; + + /* As documented, be careful to treat the empty string just like + a date string of "0". Without this, an empty string would be + declared invalid when parsed during a DST transition. */ + if (*p == '\0') + p = "0"; + + parser_control pc; + pc.input = p; + pc.parse_datetime_debug = (flags & PARSE_DATETIME_DEBUG) != 0; + if (INT_ADD_WRAPV (tmp.tm_year, TM_YEAR_BASE, &pc.year.value)) + { + if (pc.parse_datetime_debug) + dbg_printf (_("error: initial year out of range\n")); + goto fail; + } + pc.year.digits = 0; + pc.month = tmp.tm_mon + 1; + pc.day = tmp.tm_mday; + pc.hour = tmp.tm_hour; + pc.minutes = tmp.tm_min; + pc.seconds.tv_sec = tmp.tm_sec; + pc.seconds.tv_nsec = Start_ns; + tm.tm_isdst = tmp.tm_isdst; + + pc.meridian = MER24; + pc.rel = rel_time_0; + pc.timespec_seen = false; + pc.rels_seen = false; + pc.dates_seen = 0; + pc.days_seen = 0; + pc.times_seen = 0; + pc.local_zones_seen = 0; + pc.dsts_seen = 0; + pc.zones_seen = 0; + pc.year_seen = false; + pc.debug_dates_seen = false; + pc.debug_days_seen = false; + pc.debug_times_seen = false; + pc.debug_local_zones_seen = false; + pc.debug_zones_seen = false; + pc.debug_year_seen = false; + pc.debug_ordinal_day_seen = false; + +#if HAVE_STRUCT_TM_TM_ZONE + pc.local_time_zone_table[0].name = tmp.tm_zone; + pc.local_time_zone_table[0].type = tLOCAL_ZONE; + pc.local_time_zone_table[0].value = tmp.tm_isdst; + pc.local_time_zone_table[1].name = NULL; + + /* Probe the names used in the next three calendar quarters, looking + for a tm_isdst different from the one we already have. */ + { + int quarter; + for (quarter = 1; quarter <= 3; quarter++) + { + intmax_t iprobe; + if (INT_ADD_WRAPV (Start, quarter * (90 * 24 * 60 * 60), &iprobe) + || time_overflow (iprobe)) + break; + time_t probe = iprobe; + struct tm probe_tm; + if (localtime_rz (tz, &probe, &probe_tm) && probe_tm.tm_zone + && probe_tm.tm_isdst != pc.local_time_zone_table[0].value) + { + { + pc.local_time_zone_table[1].name = probe_tm.tm_zone; + pc.local_time_zone_table[1].type = tLOCAL_ZONE; + pc.local_time_zone_table[1].value = probe_tm.tm_isdst; + pc.local_time_zone_table[2].name = NULL; + } + break; + } + } + } +#else +#if HAVE_TZNAME + { +# if !HAVE_DECL_TZNAME + extern char *tzname[]; +# endif + int i; + for (i = 0; i < 2; i++) + { + pc.local_time_zone_table[i].name = tzname[i]; + pc.local_time_zone_table[i].type = tLOCAL_ZONE; + pc.local_time_zone_table[i].value = i; + } + pc.local_time_zone_table[i].name = NULL; + } +#else + pc.local_time_zone_table[0].name = NULL; +#endif +#endif + + if (pc.local_time_zone_table[0].name && pc.local_time_zone_table[1].name + && ! strcmp (pc.local_time_zone_table[0].name, + pc.local_time_zone_table[1].name)) + { + /* This locale uses the same abbreviation for standard and + daylight times. So if we see that abbreviation, we don't + know whether it's daylight time. */ + pc.local_time_zone_table[0].value = -1; + pc.local_time_zone_table[1].name = NULL; + } + + if (yyparse (&pc) != 0) + { + if (pc.parse_datetime_debug) + dbg_printf ((input_sentinel <= pc.input + ? _("error: parsing failed\n") + : _("error: parsing failed, stopped at '%s'\n")), + pc.input); + goto fail; + } + + + /* Determine effective timezone source. */ + + if (pc.parse_datetime_debug) + { + dbg_printf (_("input timezone: ")); + + if (pc.timespec_seen) + fprintf (stderr, _("'@timespec' - always UTC")); + else if (pc.zones_seen) + fprintf (stderr, _("parsed date/time string")); + else if (tzstring) + { + if (tz != tzdefault) + fprintf (stderr, _("TZ=\"%s\" in date string"), tzstring); + else if (STREQ (tzstring, "UTC0")) + { + /* Special case: 'date -u' sets TZ="UTC0". */ + fprintf (stderr, _("TZ=\"UTC0\" environment value or -u")); + } + else + fprintf (stderr, _("TZ=\"%s\" environment value"), tzstring); + } + else + fprintf (stderr, _("system default")); + + /* Account for DST changes if tLOCAL_ZONE was seen. + local timezone only changes DST and is relative to the + default timezone.*/ + if (pc.local_zones_seen && !pc.zones_seen && 0 < pc.local_isdst) + fprintf (stderr, ", dst"); + + if (pc.zones_seen) + fprintf (stderr, " (%s)", time_zone_str (pc.time_zone, time_zone_buf)); + + fputc ('\n', stderr); + } + + if (pc.timespec_seen) + *result = pc.seconds; + else + { + if (1 < (pc.times_seen | pc.dates_seen | pc.days_seen | pc.dsts_seen + | (pc.local_zones_seen + pc.zones_seen))) + { + if (pc.parse_datetime_debug) + { + if (pc.times_seen > 1) + dbg_printf ("error: seen multiple time parts\n"); + if (pc.dates_seen > 1) + dbg_printf ("error: seen multiple date parts\n"); + if (pc.days_seen > 1) + dbg_printf ("error: seen multiple days parts\n"); + if (pc.dsts_seen > 1) + dbg_printf ("error: seen multiple daylight-saving parts\n"); + if ((pc.local_zones_seen + pc.zones_seen) > 1) + dbg_printf ("error: seen multiple time-zone parts\n"); + } + goto fail; + } + + if (! to_tm_year (pc.year, pc.parse_datetime_debug, &tm.tm_year) + || INT_ADD_WRAPV (pc.month, -1, &tm.tm_mon) + || INT_ADD_WRAPV (pc.day, 0, &tm.tm_mday)) + { + if (pc.parse_datetime_debug) + dbg_printf (_("error: year, month, or day overflow\n")); + goto fail; + } + if (pc.times_seen || (pc.rels_seen && ! pc.dates_seen && ! pc.days_seen)) + { + tm.tm_hour = to_hour (pc.hour, pc.meridian); + if (tm.tm_hour < 0) + { + char const *mrd = (pc.meridian == MERam ? "am" + : pc.meridian == MERpm ?"pm" : ""); + if (pc.parse_datetime_debug) + dbg_printf (_("error: invalid hour %"PRIdMAX"%s\n"), + pc.hour, mrd); + goto fail; + } + tm.tm_min = pc.minutes; + tm.tm_sec = pc.seconds.tv_sec; + if (pc.parse_datetime_debug) + dbg_printf ((pc.times_seen + ? _("using specified time as starting value: '%s'\n") + : _("using current time as starting value: '%s'\n")), + debug_strftime (&tm, dbg_tm, sizeof dbg_tm)); + } + else + { + tm.tm_hour = tm.tm_min = tm.tm_sec = 0; + pc.seconds.tv_nsec = 0; + if (pc.parse_datetime_debug) + dbg_printf ("warning: using midnight as starting time: 00:00:00\n"); + } + + /* Let mktime deduce tm_isdst if we have an absolute timestamp. */ + if (pc.dates_seen | pc.days_seen | pc.times_seen) + tm.tm_isdst = -1; + + /* But if the input explicitly specifies local time with or without + DST, give mktime that information. */ + if (pc.local_zones_seen) + tm.tm_isdst = pc.local_isdst; + + tm0.tm_sec = tm.tm_sec; + tm0.tm_min = tm.tm_min; + tm0.tm_hour = tm.tm_hour; + tm0.tm_mday = tm.tm_mday; + tm0.tm_mon = tm.tm_mon; + tm0.tm_year = tm.tm_year; + tm0.tm_isdst = tm.tm_isdst; + tm.tm_wday = -1; + + Start = mktime_z (tz, &tm); + + if (! mktime_ok (&tm0, &tm)) + { + bool repaired = false; + bool time_zone_seen = pc.zones_seen != 0; + if (time_zone_seen) + { + /* Guard against falsely reporting errors near the time_t + boundaries when parsing times in other time zones. For + example, suppose the input string "1969-12-31 23:00:00 -0100", + the current time zone is 8 hours ahead of UTC, and the min + time_t value is 1970-01-01 00:00:00 UTC. Then the min + localtime value is 1970-01-01 08:00:00, and mktime will + therefore fail on 1969-12-31 23:00:00. To work around the + problem, set the time zone to 1 hour behind UTC temporarily + by setting TZ="XXX1:00" and try mktime again. */ + + char tz2buf[sizeof "XXX" - 1 + TIME_ZONE_BUFSIZE]; + tz2buf[0] = tz2buf[1] = tz2buf[2] = 'X'; + time_zone_str (pc.time_zone, &tz2buf[3]); + timezone_t tz2 = tzalloc (tz2buf); + if (!tz2) + { + if (pc.parse_datetime_debug) + dbg_printf (_("error: tzalloc (\"%s\") failed\n"), tz2buf); + goto fail; + } + tm.tm_sec = tm0.tm_sec; + tm.tm_min = tm0.tm_min; + tm.tm_hour = tm0.tm_hour; + tm.tm_mday = tm0.tm_mday; + tm.tm_mon = tm0.tm_mon; + tm.tm_year = tm0.tm_year; + tm.tm_isdst = tm0.tm_isdst; + tm.tm_wday = -1; + Start = mktime_z (tz2, &tm); + repaired = mktime_ok (&tm0, &tm); + tzfree (tz2); + } + + if (! repaired) + { + debug_mktime_not_ok (&tm0, &tm, &pc, time_zone_seen); + goto fail; + } + } + + char dbg_ord[DBGBUFSIZE]; + + if (pc.days_seen && ! pc.dates_seen) + { + intmax_t dayincr; + if (INT_MULTIPLY_WRAPV ((pc.day_ordinal + - (0 < pc.day_ordinal + && tm.tm_wday != pc.day_number)), + 7, &dayincr) + || INT_ADD_WRAPV ((pc.day_number - tm.tm_wday + 7) % 7, + dayincr, &dayincr) + || INT_ADD_WRAPV (dayincr, tm.tm_mday, &tm.tm_mday)) + Start = -1; + else + { + tm.tm_isdst = -1; + Start = mktime_z (tz, &tm); + } + + if (Start == (time_t) -1) + { + if (pc.parse_datetime_debug) + dbg_printf (_("error: day '%s' " + "(day ordinal=%"PRIdMAX" number=%d) " + "resulted in an invalid date: '%s'\n"), + str_days (&pc, dbg_ord, sizeof dbg_ord), + pc.day_ordinal, pc.day_number, + debug_strfdatetime (&tm, &pc, dbg_tm, + sizeof dbg_tm)); + goto fail; + } + + if (pc.parse_datetime_debug) + dbg_printf (_("new start date: '%s' is '%s'\n"), + str_days (&pc, dbg_ord, sizeof dbg_ord), + debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); + + } + + if (pc.parse_datetime_debug) + { + if (!pc.dates_seen && !pc.days_seen) + dbg_printf (_("using current date as starting value: '%s'\n"), + debug_strfdate (&tm, dbg_tm, sizeof dbg_tm)); + + if (pc.days_seen && pc.dates_seen) + dbg_printf (_("warning: day (%s) ignored when explicit dates " + "are given\n"), + str_days (&pc, dbg_ord, sizeof dbg_ord)); + + dbg_printf (_("starting date/time: '%s'\n"), + debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); + } + + /* Add relative date. */ + if (pc.rel.year | pc.rel.month | pc.rel.day) + { + if (pc.parse_datetime_debug) + { + if ((pc.rel.year != 0 || pc.rel.month != 0) && tm.tm_mday != 15) + dbg_printf (_("warning: when adding relative months/years, " + "it is recommended to specify the 15th of the " + "months\n")); + + if (pc.rel.day != 0 && tm.tm_hour != 12) + dbg_printf (_("warning: when adding relative days, " + "it is recommended to specify noon\n")); + } + + int year, month, day; + if (INT_ADD_WRAPV (tm.tm_year, pc.rel.year, &year) + || INT_ADD_WRAPV (tm.tm_mon, pc.rel.month, &month) + || INT_ADD_WRAPV (tm.tm_mday, pc.rel.day, &day)) + { + if (pc.parse_datetime_debug) + dbg_printf (_("error: %s:%d\n"), __FILE__, __LINE__); + goto fail; + } + tm.tm_year = year; + tm.tm_mon = month; + tm.tm_mday = day; + tm.tm_hour = tm0.tm_hour; + tm.tm_min = tm0.tm_min; + tm.tm_sec = tm0.tm_sec; + tm.tm_isdst = tm0.tm_isdst; + Start = mktime_z (tz, &tm); + if (Start == (time_t) -1) + { + if (pc.parse_datetime_debug) + dbg_printf (_("error: adding relative date resulted " + "in an invalid date: '%s'\n"), + debug_strfdatetime (&tm, &pc, dbg_tm, + sizeof dbg_tm)); + goto fail; + } + + if (pc.parse_datetime_debug) + { + dbg_printf (_("after date adjustment " + "(%+"PRIdMAX" years, %+"PRIdMAX" months, " + "%+"PRIdMAX" days),\n"), + pc.rel.year, pc.rel.month, pc.rel.day); + dbg_printf (_(" new date/time = '%s'\n"), + debug_strfdatetime (&tm, &pc, dbg_tm, + sizeof dbg_tm)); + + /* Warn about crossing DST due to time adjustment. + Example: https://bugs.gnu.org/8357 + env TZ=Europe/Helsinki \ + date --debug \ + -d 'Mon Mar 28 00:36:07 2011 EEST 1 day ago' + + This case is different than DST changes due to time adjustment, + i.e., "1 day ago" vs "24 hours ago" are calculated in different + places. + + 'tm0.tm_isdst' contains the DST of the input date, + 'tm.tm_isdst' is the normalized result after calling + mktime (&tm). + */ + if (tm0.tm_isdst != -1 && tm.tm_isdst != tm0.tm_isdst) + dbg_printf (_("warning: daylight saving time changed after " + "date adjustment\n")); + + /* Warn if the user did not ask to adjust days but mday changed, + or + user did not ask to adjust months/days but the month changed. + + Example for first case: + 2016-05-31 + 1 month => 2016-06-31 => 2016-07-01. + User asked to adjust month, but the day changed from 31 to 01. + + Example for second case: + 2016-02-29 + 1 year => 2017-02-29 => 2017-03-01. + User asked to adjust year, but the month changed from 02 to 03. + */ + if (pc.rel.day == 0 + && (tm.tm_mday != day + || (pc.rel.month == 0 && tm.tm_mon != month))) + { + dbg_printf (_("warning: month/year adjustment resulted in " + "shifted dates:\n")); + char tm_year_buf[TM_YEAR_BUFSIZE]; + dbg_printf (_(" adjusted Y M D: %s %02d %02d\n"), + tm_year_str (year, tm_year_buf), month + 1, day); + dbg_printf (_(" normalized Y M D: %s %02d %02d\n"), + tm_year_str (tm.tm_year, tm_year_buf), + tm.tm_mon + 1, tm.tm_mday); + } + } + + } + + /* The only "output" of this if-block is an updated Start value, + so this block must follow others that clobber Start. */ + if (pc.zones_seen) + { + intmax_t delta = pc.time_zone, t1; + bool overflow = false; +#ifdef HAVE_TM_GMTOFF + long int utcoff = tm.tm_gmtoff; +#else + time_t t = Start; + struct tm gmt; + int utcoff = (gmtime_r (&t, &gmt) + ? tm_diff (&tm, &gmt) + : (overflow = true, 0)); +#endif + overflow |= INT_SUBTRACT_WRAPV (delta, utcoff, &delta); + overflow |= INT_SUBTRACT_WRAPV (Start, delta, &t1); + if (overflow || time_overflow (t1)) + { + if (pc.parse_datetime_debug) + dbg_printf (_("error: timezone %d caused time_t overflow\n"), + pc.time_zone); + goto fail; + } + Start = t1; + } + + if (pc.parse_datetime_debug) + { + intmax_t Starti = Start; + dbg_printf (_("'%s' = %"PRIdMAX" epoch-seconds\n"), + debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm), + Starti); + } + + + /* Add relative hours, minutes, and seconds. On hosts that support + leap seconds, ignore the possibility of leap seconds; e.g., + "+ 10 minutes" adds 600 seconds, even if one of them is a + leap second. Typically this is not what the user wants, but it's + too hard to do it the other way, because the time zone indicator + must be applied before relative times, and if mktime is applied + again the time zone will be lost. */ + { + intmax_t orig_ns = pc.seconds.tv_nsec; + intmax_t sum_ns = orig_ns + pc.rel.ns; + int normalized_ns = (sum_ns % BILLION + BILLION) % BILLION; + int d4 = (sum_ns - normalized_ns) / BILLION; + intmax_t d1, t1, d2, t2, t3, t4; + if (INT_MULTIPLY_WRAPV (pc.rel.hour, 60 * 60, &d1) + || INT_ADD_WRAPV (Start, d1, &t1) + || INT_MULTIPLY_WRAPV (pc.rel.minutes, 60, &d2) + || INT_ADD_WRAPV (t1, d2, &t2) + || INT_ADD_WRAPV (t2, pc.rel.seconds, &t3) + || INT_ADD_WRAPV (t3, d4, &t4) + || time_overflow (t4)) + { + if (pc.parse_datetime_debug) + dbg_printf (_("error: adding relative time caused an " + "overflow\n")); + goto fail; + } + + result->tv_sec = t4; + result->tv_nsec = normalized_ns; + + if (pc.parse_datetime_debug + && (pc.rel.hour | pc.rel.minutes | pc.rel.seconds | pc.rel.ns)) + { + dbg_printf (_("after time adjustment (%+"PRIdMAX" hours, " + "%+"PRIdMAX" minutes, " + "%+"PRIdMAX" seconds, %+d ns),\n"), + pc.rel.hour, pc.rel.minutes, pc.rel.seconds, + pc.rel.ns); + dbg_printf (_(" new time = %"PRIdMAX" epoch-seconds\n"), t4); + + /* Warn about crossing DST due to time adjustment. + Example: https://bugs.gnu.org/8357 + env TZ=Europe/Helsinki \ + date --debug \ + -d 'Mon Mar 28 00:36:07 2011 EEST 24 hours ago' + + This case is different than DST changes due to days adjustment, + i.e., "1 day ago" vs "24 hours ago" are calculated in different + places. + + 'tm.tm_isdst' contains the date after date adjustment. */ + struct tm lmt; + if (tm.tm_isdst != -1 && localtime_rz (tz, &result->tv_sec, &lmt) + && tm.tm_isdst != lmt.tm_isdst) + dbg_printf (_("warning: daylight saving time changed after " + "time adjustment\n")); + } + } + } + + if (pc.parse_datetime_debug) + { + /* Special case: using 'date -u' simply set TZ=UTC0 */ + if (! tzstring) + dbg_printf (_("timezone: system default\n")); + else if (STREQ (tzstring, "UTC0")) + dbg_printf (_("timezone: Universal Time\n")); + else + dbg_printf (_("timezone: TZ=\"%s\" environment value\n"), tzstring); + + intmax_t sec = result->tv_sec; + int nsec = result->tv_nsec; + dbg_printf (_("final: %"PRIdMAX".%09d (epoch-seconds)\n"), + sec, nsec); + + struct tm gmt, lmt; + bool got_utc = !!gmtime_r (&result->tv_sec, &gmt); + if (got_utc) + dbg_printf (_("final: %s (UTC)\n"), + debug_strfdatetime (&gmt, NULL, + dbg_tm, sizeof dbg_tm)); + if (localtime_rz (tz, &result->tv_sec, &lmt)) + { +#ifdef HAVE_TM_GMTOFF + bool got_utcoff = true; + long int utcoff = lmt.tm_gmtoff; +#else + bool got_utcoff = got_utc; + int utcoff; + if (got_utcoff) + utcoff = tm_diff (&lmt, &gmt); +#endif + if (got_utcoff) + dbg_printf (_("final: %s (UTC%s)\n"), + debug_strfdatetime (&lmt, NULL, dbg_tm, sizeof dbg_tm), + time_zone_str (utcoff, time_zone_buf)); + else + dbg_printf (_("final: %s (unknown time zone offset)\n"), + debug_strfdatetime (&lmt, NULL, dbg_tm, sizeof dbg_tm)); + } + } + + ok = true; + + fail: + if (tz != tzdefault) + tzfree (tz); + free (tz1alloc); + return ok; +} + +#if TEST + +int +main (int ac, char **av) +{ + char buff[BUFSIZ]; + + printf ("Enter date, or blank line to exit.\n\t> "); + fflush (stdout); + + buff[BUFSIZ - 1] = '\0'; + while (fgets (buff, BUFSIZ - 1, stdin) && buff[0]) + { + struct timespec d; + struct tm const *tm; + if (! parse_datetime (&d, buff, NULL)) + printf ("Bad format - couldn't convert.\n"); + else if (! (tm = localtime (&d.tv_sec))) + { + intmax_t sec = d.tv_sec; + printf ("localtime (%"PRIdMAX") failed\n", sec); + } + else + { + int ns = d.tv_nsec; + char tm_year_buf[TM_YEAR_BUFSIZE]; + printf ("%s-%02d-%02d %02d:%02d:%02d.%09d\n", + tm_year_str (tm->tm_year, tm_year_buf), + tm->tm_mon + 1, tm->tm_mday, + tm->tm_hour, tm->tm_min, tm->tm_sec, ns); + } + printf ("\t> "); + fflush (stdout); + } + return 0; +} +#endif /* TEST */ diff --git a/devspec.en_US/project/recutils/lib/parse-datetime.h b/devspec.en_US/project/recutils/lib/parse-datetime.h new file mode 100755 index 0000000..9f7aebd --- /dev/null +++ b/devspec.en_US/project/recutils/lib/parse-datetime.h @@ -0,0 +1,29 @@ +/* Parse a string into an internal timestamp. + + Copyright (C) 1995, 1997-1998, 2003-2004, 2007, 2009-2019 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <stdbool.h> +#include <time.h> + +bool parse_datetime (struct timespec *, char const *, struct timespec const *); + +/* parse_datetime2 flag: if set, print debug/progress information to STDERR */ +#define PARSE_DATETIME_DEBUG 1 + +/* same as above, supporting additional flags */ +bool parse_datetime2 (struct timespec *, char const *, struct timespec const *, + unsigned int flags, timezone_t, char const *); diff --git a/devspec.en_US/project/recutils/lib/parse-datetime.y b/devspec.en_US/project/recutils/lib/parse-datetime.y new file mode 100755 index 0000000..b264bb7 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/parse-datetime.y @@ -0,0 +1,2428 @@ +%{ +/* Parse a string into an internal timestamp. + + Copyright (C) 1999-2000, 2002-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Originally written by Steven M. Bellovin <smb@research.att.com> while + at the University of North Carolina at Chapel Hill. Later tweaked by + a couple of people on Usenet. Completely overhauled by Rich $alz + <rsalz@bbn.com> and Jim Berets <jberets@bbn.com> in August, 1990. + + Modified by Assaf Gordon <assafgordon@gmail.com> in 2016 to add + debug output. + + Modified by Paul Eggert <eggert@twinsun.com> in 1999 to do the + right thing about local DST. Also modified by Paul Eggert + <eggert@cs.ucla.edu> in 2004 to support nanosecond-resolution + timestamps, in 2004 to support TZ strings in dates, and in 2017 to + check for integer overflow and to support longer-than-'long' + 'time_t' and 'tv_nsec'. */ + +#include <config.h> + +#include "parse-datetime.h" + +#include "intprops.h" +#include "timespec.h" +#include "verify.h" +#include "strftime.h" + +/* There's no need to extend the stack, so there's no need to involve + alloca. */ +#define YYSTACK_USE_ALLOCA 0 + +/* Tell Bison how much stack space is needed. 20 should be plenty for + this grammar, which is not right recursive. Beware setting it too + high, since that might cause problems on machines whose + implementations have lame stack-overflow checking. */ +#define YYMAXDEPTH 20 +#define YYINITDEPTH YYMAXDEPTH + +/* Since the code of parse-datetime.y is not included in the Emacs executable + itself, there is no need to #define static in this file. Even if + the code were included in the Emacs executable, it probably + wouldn't do any harm to #undef it here; this will only cause + problems if we try to write to a static variable, which I don't + think this code needs to do. */ +#ifdef emacs +# undef static +#endif + +#include <inttypes.h> +#include <c-ctype.h> +#include <limits.h> +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "gettext.h" + +#define _(str) gettext (str) + +/* Bison's skeleton tests _STDLIB_H, while some stdlib.h headers + use _STDLIB_H_ as witness. Map the latter to the one bison uses. */ +/* FIXME: this is temporary. Remove when we have a mechanism to ensure + that the version we're using is fixed, too. */ +#ifdef _STDLIB_H_ +# undef _STDLIB_H +# define _STDLIB_H 1 +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. + Enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because + gnulib and libintl do '#define printf __printf__' when they override + the 'printf' function. */ +#if 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +#endif + +/* Shift A right by B bits portably, by dividing A by 2**B and + truncating towards minus infinity. A and B should be free of side + effects, and B should be in the range 0 <= B <= INT_BITS - 2, where + INT_BITS is the number of useful bits in an int. GNU code can + assume that INT_BITS is at least 32. + + ISO C99 says that A >> B is implementation-defined if A < 0. Some + implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift + right in the usual way when A < 0, so SHR falls back on division if + ordinary A >> B doesn't seem to be the usual signed shift. */ +#define SHR(a, b) \ + (-1 >> 1 == -1 \ + ? (a) >> (b) \ + : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0)) + +#define HOUR(x) (60 * 60 * (x)) + +#define STREQ(a, b) (strcmp (a, b) == 0) + +/* Verify that time_t is an integer as POSIX requires, and that every + time_t value fits in intmax_t. Please file a bug report if these + assumptions are false on your platform. */ +verify (TYPE_IS_INTEGER (time_t)); +verify (!TYPE_SIGNED (time_t) || INTMAX_MIN <= TYPE_MINIMUM (time_t)); +verify (TYPE_MAXIMUM (time_t) <= INTMAX_MAX); + +/* True if N is out of range for time_t. */ +static bool +time_overflow (intmax_t n) +{ + return ! ((TYPE_SIGNED (time_t) ? TYPE_MINIMUM (time_t) <= n : 0 <= n) + && n <= TYPE_MAXIMUM (time_t)); +} + +/* Convert a possibly-signed character to an unsigned character. This is + a bit safer than casting to unsigned char, since it catches some type + errors that the cast doesn't. */ +static unsigned char to_uchar (char ch) { return ch; } + +static void _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 2)) +dbg_printf (char const *msg, ...) +{ + va_list args; + /* TODO: use gnulib's 'program_name' instead? */ + fputs ("date: ", stderr); + + va_start (args, msg); + vfprintf (stderr, msg, args); + va_end (args); +} + + +/* An integer value, and the number of digits in its textual + representation. */ +typedef struct +{ + bool negative; + intmax_t value; + ptrdiff_t digits; +} textint; + +/* An entry in the lexical lookup table. */ +typedef struct +{ + char const *name; + int type; + int value; +} table; + +/* Meridian: am, pm, or 24-hour style. */ +enum { MERam, MERpm, MER24 }; + +/* A reasonable upper bound for the buffer used in debug output. */ +enum { DBGBUFSIZE = 100 }; + +enum { BILLION = 1000000000, LOG10_BILLION = 9 }; + +/* Relative times. */ +typedef struct +{ + /* Relative year, month, day, hour, minutes, seconds, and nanoseconds. */ + intmax_t year; + intmax_t month; + intmax_t day; + intmax_t hour; + intmax_t minutes; + intmax_t seconds; + int ns; +} relative_time; + +#if HAVE_COMPOUND_LITERALS +# define RELATIVE_TIME_0 ((relative_time) { 0, 0, 0, 0, 0, 0, 0 }) +#else +static relative_time const RELATIVE_TIME_0; +#endif + +/* Information passed to and from the parser. */ +typedef struct +{ + /* The input string remaining to be parsed. */ + const char *input; + + /* N, if this is the Nth Tuesday. */ + intmax_t day_ordinal; + + /* Day of week; Sunday is 0. */ + int day_number; + + /* tm_isdst flag for the local zone. */ + int local_isdst; + + /* Time zone, in seconds east of UT. */ + int time_zone; + + /* Style used for time. */ + int meridian; + + /* Gregorian year, month, day, hour, minutes, seconds, and nanoseconds. */ + textint year; + intmax_t month; + intmax_t day; + intmax_t hour; + intmax_t minutes; + struct timespec seconds; /* includes nanoseconds */ + + /* Relative year, month, day, hour, minutes, seconds, and nanoseconds. */ + relative_time rel; + + /* Presence or counts of nonterminals of various flavors parsed so far. */ + bool timespec_seen; + bool rels_seen; + ptrdiff_t dates_seen; + ptrdiff_t days_seen; + ptrdiff_t local_zones_seen; + ptrdiff_t dsts_seen; + ptrdiff_t times_seen; + ptrdiff_t zones_seen; + bool year_seen; + + /* Print debugging output to stderr. */ + bool parse_datetime_debug; + + /* Which of the 'seen' parts have been printed when debugging. */ + bool debug_dates_seen; + bool debug_days_seen; + bool debug_local_zones_seen; + bool debug_times_seen; + bool debug_zones_seen; + bool debug_year_seen; + + /* The user specified explicit ordinal day value. */ + bool debug_ordinal_day_seen; + + /* Table of local time zone abbreviations, terminated by a null entry. */ + table local_time_zone_table[3]; +} parser_control; + +union YYSTYPE; +static int yylex (union YYSTYPE *, parser_control *); +static int yyerror (parser_control const *, char const *); +static bool time_zone_hhmm (parser_control *, textint, intmax_t); + +/* Extract into *PC any date and time info from a string of digits + of the form e.g., YYYYMMDD, YYMMDD, HHMM, HH (and sometimes YYY, + YYYY, ...). */ +static void +digits_to_date_time (parser_control *pc, textint text_int) +{ + if (pc->dates_seen && ! pc->year.digits + && ! pc->rels_seen && (pc->times_seen || 2 < text_int.digits)) + { + pc->year_seen = true; + pc->year = text_int; + } + else + { + if (4 < text_int.digits) + { + pc->dates_seen++; + pc->day = text_int.value % 100; + pc->month = (text_int.value / 100) % 100; + pc->year.value = text_int.value / 10000; + pc->year.digits = text_int.digits - 4; + } + else + { + pc->times_seen++; + if (text_int.digits <= 2) + { + pc->hour = text_int.value; + pc->minutes = 0; + } + else + { + pc->hour = text_int.value / 100; + pc->minutes = text_int.value % 100; + } + pc->seconds.tv_sec = 0; + pc->seconds.tv_nsec = 0; + pc->meridian = MER24; + } + } +} + +/* Increment PC->rel by FACTOR * REL (FACTOR is 1 or -1). Return true + if successful, false if an overflow occurred. */ +static bool +apply_relative_time (parser_control *pc, relative_time rel, int factor) +{ + if (factor < 0 + ? (INT_SUBTRACT_WRAPV (pc->rel.ns, rel.ns, &pc->rel.ns) + | INT_SUBTRACT_WRAPV (pc->rel.seconds, rel.seconds, &pc->rel.seconds) + | INT_SUBTRACT_WRAPV (pc->rel.minutes, rel.minutes, &pc->rel.minutes) + | INT_SUBTRACT_WRAPV (pc->rel.hour, rel.hour, &pc->rel.hour) + | INT_SUBTRACT_WRAPV (pc->rel.day, rel.day, &pc->rel.day) + | INT_SUBTRACT_WRAPV (pc->rel.month, rel.month, &pc->rel.month) + | INT_SUBTRACT_WRAPV (pc->rel.year, rel.year, &pc->rel.year)) + : (INT_ADD_WRAPV (pc->rel.ns, rel.ns, &pc->rel.ns) + | INT_ADD_WRAPV (pc->rel.seconds, rel.seconds, &pc->rel.seconds) + | INT_ADD_WRAPV (pc->rel.minutes, rel.minutes, &pc->rel.minutes) + | INT_ADD_WRAPV (pc->rel.hour, rel.hour, &pc->rel.hour) + | INT_ADD_WRAPV (pc->rel.day, rel.day, &pc->rel.day) + | INT_ADD_WRAPV (pc->rel.month, rel.month, &pc->rel.month) + | INT_ADD_WRAPV (pc->rel.year, rel.year, &pc->rel.year))) + return false; + pc->rels_seen = true; + return true; +} + +/* Set PC-> hour, minutes, seconds and nanoseconds members from arguments. */ +static void +set_hhmmss (parser_control *pc, intmax_t hour, intmax_t minutes, + time_t sec, int nsec) +{ + pc->hour = hour; + pc->minutes = minutes; + pc->seconds.tv_sec = sec; + pc->seconds.tv_nsec = nsec; +} + +/* Return a textual representation of the day ordinal/number values + in the parser_control struct (e.g., "last wed", "this tues", "thu"). */ +static const char * +str_days (parser_control *pc, char *buffer, int n) +{ + /* TODO: use relative_time_table for reverse lookup. */ + static char const ordinal_values[][11] = { + "last", + "this", + "next/first", + "(SECOND)", /* SECOND is commented out in relative_time_table. */ + "third", + "fourth", + "fifth", + "sixth", + "seventh", + "eight", + "ninth", + "tenth", + "eleventh", + "twelfth" + }; + + static char const days_values[][4] = { + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + }; + + int len; + + /* Don't add an ordinal prefix if the user didn't specify it + (e.g., "this wed" vs "wed"). */ + if (pc->debug_ordinal_day_seen) + { + /* Use word description if possible (e.g., -1 = last, 3 = third). */ + len = (-1 <= pc->day_ordinal && pc->day_ordinal <= 12 + ? snprintf (buffer, n, "%s", ordinal_values[pc->day_ordinal + 1]) + : snprintf (buffer, n, "%"PRIdMAX, pc->day_ordinal)); + } + else + { + buffer[0] = '\0'; + len = 0; + } + + /* Add the day name */ + if (0 <= pc->day_number && pc->day_number <= 6 && 0 <= len && len < n) + snprintf (buffer + len, n - len, &" %s"[len == 0], + days_values[pc->day_number]); + else + { + /* invalid day_number value - should never happen */ + } + return buffer; +} + +/* Convert a time zone to its string representation. */ + +enum { TIME_ZONE_BUFSIZE = INT_STRLEN_BOUND (intmax_t) + sizeof ":MM:SS" } ; + +static char const * +time_zone_str (int time_zone, char time_zone_buf[TIME_ZONE_BUFSIZE]) +{ + char *p = time_zone_buf; + char sign = time_zone < 0 ? '-' : '+'; + int hour = abs (time_zone / (60 * 60)); + p += sprintf (time_zone_buf, "%c%02d", sign, hour); + int offset_from_hour = abs (time_zone % (60 * 60)); + if (offset_from_hour != 0) + { + int mm = offset_from_hour / 60; + int ss = offset_from_hour % 60; + *p++ = ':'; + *p++ = '0' + mm / 10; + *p++ = '0' + mm % 10; + if (ss) + { + *p++ = ':'; + *p++ = '0' + ss / 10; + *p++ = '0' + ss % 10; + } + *p = '\0'; + } + return time_zone_buf; +} + +/* debugging: print the current time in the parser_control structure. + The parser will increment "*_seen" members for those which were parsed. + This function will print only newly seen parts. */ +static void +debug_print_current_time (char const *item, parser_control *pc) +{ + bool space = false; + + if (!pc->parse_datetime_debug) + return; + + /* no newline, more items printed below */ + dbg_printf (_("parsed %s part: "), item); + + if (pc->dates_seen && !pc->debug_dates_seen) + { + /*TODO: use pc->year.negative? */ + fprintf (stderr, "(Y-M-D) %04"PRIdMAX"-%02"PRIdMAX"-%02"PRIdMAX, + pc->year.value, pc->month, pc->day); + pc->debug_dates_seen = true; + space = true; + } + + if (pc->year_seen != pc->debug_year_seen) + { + if (space) + fputc (' ', stderr); + fprintf (stderr, _("year: %04"PRIdMAX), pc->year.value); + + pc->debug_year_seen = pc->year_seen; + space = true; + } + + if (pc->times_seen && !pc->debug_times_seen) + { + intmax_t sec = pc->seconds.tv_sec; + fprintf (stderr, &" %02"PRIdMAX":%02"PRIdMAX":%02"PRIdMAX[!space], + pc->hour, pc->minutes, sec); + if (pc->seconds.tv_nsec != 0) + { + int nsec = pc->seconds.tv_nsec; + fprintf (stderr, ".%09d", nsec); + } + if (pc->meridian == MERpm) + fputs ("pm", stderr); + + pc->debug_times_seen = true; + space = true; + } + + if (pc->days_seen && !pc->debug_days_seen) + { + if (space) + fputc (' ', stderr); + char tmp[DBGBUFSIZE]; + fprintf (stderr, _("%s (day ordinal=%"PRIdMAX" number=%d)"), + str_days (pc, tmp, sizeof tmp), + pc->day_ordinal, pc->day_number); + pc->debug_days_seen = true; + space = true; + } + + /* local zone strings only change the DST settings, + not the timezone value. If seen, inform about the DST. */ + if (pc->local_zones_seen && !pc->debug_local_zones_seen) + { + fprintf (stderr, &" isdst=%d%s"[!space], + pc->local_isdst, pc->dsts_seen ? " DST" : ""); + pc->debug_local_zones_seen = true; + space = true; + } + + if (pc->zones_seen && !pc->debug_zones_seen) + { + char time_zone_buf[TIME_ZONE_BUFSIZE]; + fprintf (stderr, &" UTC%s"[!space], + time_zone_str (pc->time_zone, time_zone_buf)); + pc->debug_zones_seen = true; + space = true; + } + + if (pc->timespec_seen) + { + intmax_t sec = pc->seconds.tv_sec; + if (space) + fputc (' ', stderr); + fprintf (stderr, _("number of seconds: %"PRIdMAX), sec); + } + + fputc ('\n', stderr); +} + +/* Debugging: print the current relative values. */ + +static bool +print_rel_part (bool space, intmax_t val, char const *name) +{ + if (val == 0) + return space; + fprintf (stderr, &" %+"PRIdMAX" %s"[!space], val, name); + return true; +} + +static void +debug_print_relative_time (char const *item, parser_control const *pc) +{ + bool space = false; + + if (!pc->parse_datetime_debug) + return; + + /* no newline, more items printed below */ + dbg_printf (_("parsed %s part: "), item); + + if (pc->rel.year == 0 && pc->rel.month == 0 && pc->rel.day == 0 + && pc->rel.hour == 0 && pc->rel.minutes == 0 && pc->rel.seconds == 0 + && pc->rel.ns == 0) + { + /* Special case: relative time of this/today/now */ + fputs (_("today/this/now\n"), stderr); + return; + } + + space = print_rel_part (space, pc->rel.year, "year(s)"); + space = print_rel_part (space, pc->rel.month, "month(s)"); + space = print_rel_part (space, pc->rel.day, "day(s)"); + space = print_rel_part (space, pc->rel.hour, "hour(s)"); + space = print_rel_part (space, pc->rel.minutes, "minutes"); + space = print_rel_part (space, pc->rel.seconds, "seconds"); + print_rel_part (space, pc->rel.ns, "nanoseconds"); + + fputc ('\n', stderr); +} + + + +%} + +/* We want a reentrant parser, even if the TZ manipulation and the calls to + localtime and gmtime are not reentrant. */ +%pure-parser +%parse-param { parser_control *pc } +%lex-param { parser_control *pc } + +/* This grammar has 31 shift/reduce conflicts. */ +%expect 31 + +%union +{ + intmax_t intval; + textint textintval; + struct timespec timespec; + relative_time rel; +} + +%token <intval> tAGO +%token tDST + +%token tYEAR_UNIT tMONTH_UNIT tHOUR_UNIT tMINUTE_UNIT tSEC_UNIT +%token <intval> tDAY_UNIT tDAY_SHIFT + +%token <intval> tDAY tDAYZONE tLOCAL_ZONE tMERIDIAN +%token <intval> tMONTH tORDINAL tZONE + +%token <textintval> tSNUMBER tUNUMBER +%token <timespec> tSDECIMAL_NUMBER tUDECIMAL_NUMBER + +%type <intval> o_colon_minutes +%type <timespec> seconds signed_seconds unsigned_seconds + +%type <rel> relunit relunit_snumber dayshift + +%% + +spec: + timespec + | items + ; + +timespec: + '@' seconds + { + pc->seconds = $2; + pc->timespec_seen = true; + debug_print_current_time (_("number of seconds"), pc); + } + ; + +items: + /* empty */ + | items item + ; + +item: + datetime + { + pc->times_seen++; pc->dates_seen++; + debug_print_current_time (_("datetime"), pc); + } + | time + { + pc->times_seen++; + debug_print_current_time (_("time"), pc); + } + | local_zone + { + pc->local_zones_seen++; + debug_print_current_time (_("local_zone"), pc); + } + | zone + { + pc->zones_seen++; + debug_print_current_time (_("zone"), pc); + } + | date + { + pc->dates_seen++; + debug_print_current_time (_("date"), pc); + } + | day + { + pc->days_seen++; + debug_print_current_time (_("day"), pc); + } + | rel + { + debug_print_relative_time (_("relative"), pc); + } + | number + { + debug_print_current_time (_("number"), pc); + } + | hybrid + { + debug_print_relative_time (_("hybrid"), pc); + } + ; + +datetime: + iso_8601_datetime + ; + +iso_8601_datetime: + iso_8601_date 'T' iso_8601_time + ; + +time: + tUNUMBER tMERIDIAN + { + set_hhmmss (pc, $1.value, 0, 0, 0); + pc->meridian = $2; + } + | tUNUMBER ':' tUNUMBER tMERIDIAN + { + set_hhmmss (pc, $1.value, $3.value, 0, 0); + pc->meridian = $4; + } + | tUNUMBER ':' tUNUMBER ':' unsigned_seconds tMERIDIAN + { + set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec); + pc->meridian = $6; + } + | iso_8601_time + ; + +iso_8601_time: + tUNUMBER zone_offset + { + set_hhmmss (pc, $1.value, 0, 0, 0); + pc->meridian = MER24; + } + | tUNUMBER ':' tUNUMBER o_zone_offset + { + set_hhmmss (pc, $1.value, $3.value, 0, 0); + pc->meridian = MER24; + } + | tUNUMBER ':' tUNUMBER ':' unsigned_seconds o_zone_offset + { + set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec); + pc->meridian = MER24; + } + ; + +o_zone_offset: + /* empty */ + | zone_offset + ; + +zone_offset: + tSNUMBER o_colon_minutes + { + pc->zones_seen++; + if (! time_zone_hhmm (pc, $1, $2)) YYABORT; + } + ; + +/* Local zone strings affect only the DST setting, and take effect + only if the current TZ setting is relevant. + + Example 1: + 'EEST' is parsed as tLOCAL_ZONE, as it relates to the effective TZ: + TZ='Europe/Helsinki' date -d '2016-06-30 EEST' + + Example 2: + 'EEST' is parsed as tDAYZONE: + TZ='Asia/Tokyo' date -d '2016-06-30 EEST' + + This is implemented by probing the next three calendar quarters + of the effective timezone and looking for DST changes - + if found, the timezone name (EEST) is inserted into + the lexical lookup table with type tLOCAL_ZONE. + (Search for 'quarter' comment in 'parse_datetime2'.) +*/ +local_zone: + tLOCAL_ZONE + { pc->local_isdst = $1; } + | tLOCAL_ZONE tDST + { + pc->local_isdst = 1; + pc->dsts_seen++; + } + ; + +/* Note 'T' is a special case, as it is used as the separator in ISO + 8601 date and time of day representation. */ +zone: + tZONE + { pc->time_zone = $1; } + | 'T' + { pc->time_zone = HOUR (7); } + | tZONE relunit_snumber + { pc->time_zone = $1; + if (! apply_relative_time (pc, $2, 1)) YYABORT; + debug_print_relative_time (_("relative"), pc); + } + | 'T' relunit_snumber + { pc->time_zone = HOUR (7); + if (! apply_relative_time (pc, $2, 1)) YYABORT; + debug_print_relative_time (_("relative"), pc); + } + | tZONE tSNUMBER o_colon_minutes + { if (! time_zone_hhmm (pc, $2, $3)) YYABORT; + if (INT_ADD_WRAPV (pc->time_zone, $1, &pc->time_zone)) YYABORT; } + | tDAYZONE + { pc->time_zone = $1 + 60 * 60; } + | tZONE tDST + { pc->time_zone = $1 + 60 * 60; } + ; + +day: + tDAY + { + pc->day_ordinal = 0; + pc->day_number = $1; + } + | tDAY ',' + { + pc->day_ordinal = 0; + pc->day_number = $1; + } + | tORDINAL tDAY + { + pc->day_ordinal = $1; + pc->day_number = $2; + pc->debug_ordinal_day_seen = true; + } + | tUNUMBER tDAY + { + pc->day_ordinal = $1.value; + pc->day_number = $2; + pc->debug_ordinal_day_seen = true; + } + ; + +date: + tUNUMBER '/' tUNUMBER + { + pc->month = $1.value; + pc->day = $3.value; + } + | tUNUMBER '/' tUNUMBER '/' tUNUMBER + { + /* Interpret as YYYY/MM/DD if the first value has 4 or more digits, + otherwise as MM/DD/YY. + The goal in recognizing YYYY/MM/DD is solely to support legacy + machine-generated dates like those in an RCS log listing. If + you want portability, use the ISO 8601 format. */ + if (4 <= $1.digits) + { + if (pc->parse_datetime_debug) + { + intmax_t digits = $1.digits; + dbg_printf (_("warning: value %"PRIdMAX" has %"PRIdMAX" digits. " + "Assuming YYYY/MM/DD\n"), + $1.value, digits); + } + + pc->year = $1; + pc->month = $3.value; + pc->day = $5.value; + } + else + { + if (pc->parse_datetime_debug) + dbg_printf (_("warning: value %"PRIdMAX" has less than 4 digits. " + "Assuming MM/DD/YY[YY]\n"), + $1.value); + + pc->month = $1.value; + pc->day = $3.value; + pc->year = $5; + } + } + | tUNUMBER tMONTH tSNUMBER + { + /* E.g., 17-JUN-1992. */ + pc->day = $1.value; + pc->month = $2; + if (INT_SUBTRACT_WRAPV (0, $3.value, &pc->year.value)) YYABORT; + pc->year.digits = $3.digits; + } + | tMONTH tSNUMBER tSNUMBER + { + /* E.g., JUN-17-1992. */ + pc->month = $1; + if (INT_SUBTRACT_WRAPV (0, $2.value, &pc->day)) YYABORT; + if (INT_SUBTRACT_WRAPV (0, $3.value, &pc->year.value)) YYABORT; + pc->year.digits = $3.digits; + } + | tMONTH tUNUMBER + { + pc->month = $1; + pc->day = $2.value; + } + | tMONTH tUNUMBER ',' tUNUMBER + { + pc->month = $1; + pc->day = $2.value; + pc->year = $4; + } + | tUNUMBER tMONTH + { + pc->day = $1.value; + pc->month = $2; + } + | tUNUMBER tMONTH tUNUMBER + { + pc->day = $1.value; + pc->month = $2; + pc->year = $3; + } + | iso_8601_date + ; + +iso_8601_date: + tUNUMBER tSNUMBER tSNUMBER + { + /* ISO 8601 format. YYYY-MM-DD. */ + pc->year = $1; + if (INT_SUBTRACT_WRAPV (0, $2.value, &pc->month)) YYABORT; + if (INT_SUBTRACT_WRAPV (0, $3.value, &pc->day)) YYABORT; + } + ; + +rel: + relunit tAGO + { if (! apply_relative_time (pc, $1, $2)) YYABORT; } + | relunit + { if (! apply_relative_time (pc, $1, 1)) YYABORT; } + | dayshift + { if (! apply_relative_time (pc, $1, 1)) YYABORT; } + ; + +relunit: + tORDINAL tYEAR_UNIT + { $$ = RELATIVE_TIME_0; $$.year = $1; } + | tUNUMBER tYEAR_UNIT + { $$ = RELATIVE_TIME_0; $$.year = $1.value; } + | tYEAR_UNIT + { $$ = RELATIVE_TIME_0; $$.year = 1; } + | tORDINAL tMONTH_UNIT + { $$ = RELATIVE_TIME_0; $$.month = $1; } + | tUNUMBER tMONTH_UNIT + { $$ = RELATIVE_TIME_0; $$.month = $1.value; } + | tMONTH_UNIT + { $$ = RELATIVE_TIME_0; $$.month = 1; } + | tORDINAL tDAY_UNIT + { $$ = RELATIVE_TIME_0; + if (INT_MULTIPLY_WRAPV ($1, $2, &$$.day)) YYABORT; } + | tUNUMBER tDAY_UNIT + { $$ = RELATIVE_TIME_0; + if (INT_MULTIPLY_WRAPV ($1.value, $2, &$$.day)) YYABORT; } + | tDAY_UNIT + { $$ = RELATIVE_TIME_0; $$.day = $1; } + | tORDINAL tHOUR_UNIT + { $$ = RELATIVE_TIME_0; $$.hour = $1; } + | tUNUMBER tHOUR_UNIT + { $$ = RELATIVE_TIME_0; $$.hour = $1.value; } + | tHOUR_UNIT + { $$ = RELATIVE_TIME_0; $$.hour = 1; } + | tORDINAL tMINUTE_UNIT + { $$ = RELATIVE_TIME_0; $$.minutes = $1; } + | tUNUMBER tMINUTE_UNIT + { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; } + | tMINUTE_UNIT + { $$ = RELATIVE_TIME_0; $$.minutes = 1; } + | tORDINAL tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = $1; } + | tUNUMBER tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; } + | tSDECIMAL_NUMBER tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; } + | tUDECIMAL_NUMBER tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; } + | tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = 1; } + | relunit_snumber + ; + +relunit_snumber: + tSNUMBER tYEAR_UNIT + { $$ = RELATIVE_TIME_0; $$.year = $1.value; } + | tSNUMBER tMONTH_UNIT + { $$ = RELATIVE_TIME_0; $$.month = $1.value; } + | tSNUMBER tDAY_UNIT + { $$ = RELATIVE_TIME_0; + if (INT_MULTIPLY_WRAPV ($1.value, $2, &$$.day)) YYABORT; } + | tSNUMBER tHOUR_UNIT + { $$ = RELATIVE_TIME_0; $$.hour = $1.value; } + | tSNUMBER tMINUTE_UNIT + { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; } + | tSNUMBER tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; } + ; + +dayshift: + tDAY_SHIFT + { $$ = RELATIVE_TIME_0; $$.day = $1; } + ; + +seconds: signed_seconds | unsigned_seconds; + +signed_seconds: + tSDECIMAL_NUMBER + | tSNUMBER + { if (time_overflow ($1.value)) YYABORT; + $$.tv_sec = $1.value; $$.tv_nsec = 0; } + ; + +unsigned_seconds: + tUDECIMAL_NUMBER + | tUNUMBER + { if (time_overflow ($1.value)) YYABORT; + $$.tv_sec = $1.value; $$.tv_nsec = 0; } + ; + +number: + tUNUMBER + { digits_to_date_time (pc, $1); } + ; + +hybrid: + tUNUMBER relunit_snumber + { + /* Hybrid all-digit and relative offset, so that we accept e.g., + "YYYYMMDD +N days" as well as "YYYYMMDD N days". */ + digits_to_date_time (pc, $1); + if (! apply_relative_time (pc, $2, 1)) YYABORT; + } + ; + +o_colon_minutes: + /* empty */ + { $$ = -1; } + | ':' tUNUMBER + { $$ = $2.value; } + ; + +%% + +static table const meridian_table[] = +{ + { "AM", tMERIDIAN, MERam }, + { "A.M.", tMERIDIAN, MERam }, + { "PM", tMERIDIAN, MERpm }, + { "P.M.", tMERIDIAN, MERpm }, + { NULL, 0, 0 } +}; + +static table const dst_table[] = +{ + { "DST", tDST, 0 } +}; + +static table const month_and_day_table[] = +{ + { "JANUARY", tMONTH, 1 }, + { "FEBRUARY", tMONTH, 2 }, + { "MARCH", tMONTH, 3 }, + { "APRIL", tMONTH, 4 }, + { "MAY", tMONTH, 5 }, + { "JUNE", tMONTH, 6 }, + { "JULY", tMONTH, 7 }, + { "AUGUST", tMONTH, 8 }, + { "SEPTEMBER",tMONTH, 9 }, + { "SEPT", tMONTH, 9 }, + { "OCTOBER", tMONTH, 10 }, + { "NOVEMBER", tMONTH, 11 }, + { "DECEMBER", tMONTH, 12 }, + { "SUNDAY", tDAY, 0 }, + { "MONDAY", tDAY, 1 }, + { "TUESDAY", tDAY, 2 }, + { "TUES", tDAY, 2 }, + { "WEDNESDAY",tDAY, 3 }, + { "WEDNES", tDAY, 3 }, + { "THURSDAY", tDAY, 4 }, + { "THUR", tDAY, 4 }, + { "THURS", tDAY, 4 }, + { "FRIDAY", tDAY, 5 }, + { "SATURDAY", tDAY, 6 }, + { NULL, 0, 0 } +}; + +static table const time_units_table[] = +{ + { "YEAR", tYEAR_UNIT, 1 }, + { "MONTH", tMONTH_UNIT, 1 }, + { "FORTNIGHT",tDAY_UNIT, 14 }, + { "WEEK", tDAY_UNIT, 7 }, + { "DAY", tDAY_UNIT, 1 }, + { "HOUR", tHOUR_UNIT, 1 }, + { "MINUTE", tMINUTE_UNIT, 1 }, + { "MIN", tMINUTE_UNIT, 1 }, + { "SECOND", tSEC_UNIT, 1 }, + { "SEC", tSEC_UNIT, 1 }, + { NULL, 0, 0 } +}; + +/* Assorted relative-time words. */ +static table const relative_time_table[] = +{ + { "TOMORROW", tDAY_SHIFT, 1 }, + { "YESTERDAY",tDAY_SHIFT, -1 }, + { "TODAY", tDAY_SHIFT, 0 }, + { "NOW", tDAY_SHIFT, 0 }, + { "LAST", tORDINAL, -1 }, + { "THIS", tORDINAL, 0 }, + { "NEXT", tORDINAL, 1 }, + { "FIRST", tORDINAL, 1 }, +/*{ "SECOND", tORDINAL, 2 }, */ + { "THIRD", tORDINAL, 3 }, + { "FOURTH", tORDINAL, 4 }, + { "FIFTH", tORDINAL, 5 }, + { "SIXTH", tORDINAL, 6 }, + { "SEVENTH", tORDINAL, 7 }, + { "EIGHTH", tORDINAL, 8 }, + { "NINTH", tORDINAL, 9 }, + { "TENTH", tORDINAL, 10 }, + { "ELEVENTH", tORDINAL, 11 }, + { "TWELFTH", tORDINAL, 12 }, + { "AGO", tAGO, -1 }, + { "HENCE", tAGO, 1 }, + { NULL, 0, 0 } +}; + +/* The universal time zone table. These labels can be used even for + timestamps that would not otherwise be valid, e.g., GMT timestamps + oin London during summer. */ +static table const universal_time_zone_table[] = +{ + { "GMT", tZONE, HOUR ( 0) }, /* Greenwich Mean */ + { "UT", tZONE, HOUR ( 0) }, /* Universal (Coordinated) */ + { "UTC", tZONE, HOUR ( 0) }, + { NULL, 0, 0 } +}; + +/* The time zone table. This table is necessarily incomplete, as time + zone abbreviations are ambiguous; e.g., Australians interpret "EST" + as Eastern time in Australia, not as US Eastern Standard Time. + You cannot rely on parse_datetime to handle arbitrary time zone + abbreviations; use numeric abbreviations like "-0500" instead. */ +static table const time_zone_table[] = +{ + { "WET", tZONE, HOUR ( 0) }, /* Western European */ + { "WEST", tDAYZONE, HOUR ( 0) }, /* Western European Summer */ + { "BST", tDAYZONE, HOUR ( 0) }, /* British Summer */ + { "ART", tZONE, -HOUR ( 3) }, /* Argentina */ + { "BRT", tZONE, -HOUR ( 3) }, /* Brazil */ + { "BRST", tDAYZONE, -HOUR ( 3) }, /* Brazil Summer */ + { "NST", tZONE, -(HOUR ( 3) + 30 * 60) }, /* Newfoundland Standard */ + { "NDT", tDAYZONE,-(HOUR ( 3) + 30 * 60) }, /* Newfoundland Daylight */ + { "AST", tZONE, -HOUR ( 4) }, /* Atlantic Standard */ + { "ADT", tDAYZONE, -HOUR ( 4) }, /* Atlantic Daylight */ + { "CLT", tZONE, -HOUR ( 4) }, /* Chile */ + { "CLST", tDAYZONE, -HOUR ( 4) }, /* Chile Summer */ + { "EST", tZONE, -HOUR ( 5) }, /* Eastern Standard */ + { "EDT", tDAYZONE, -HOUR ( 5) }, /* Eastern Daylight */ + { "CST", tZONE, -HOUR ( 6) }, /* Central Standard */ + { "CDT", tDAYZONE, -HOUR ( 6) }, /* Central Daylight */ + { "MST", tZONE, -HOUR ( 7) }, /* Mountain Standard */ + { "MDT", tDAYZONE, -HOUR ( 7) }, /* Mountain Daylight */ + { "PST", tZONE, -HOUR ( 8) }, /* Pacific Standard */ + { "PDT", tDAYZONE, -HOUR ( 8) }, /* Pacific Daylight */ + { "AKST", tZONE, -HOUR ( 9) }, /* Alaska Standard */ + { "AKDT", tDAYZONE, -HOUR ( 9) }, /* Alaska Daylight */ + { "HST", tZONE, -HOUR (10) }, /* Hawaii Standard */ + { "HAST", tZONE, -HOUR (10) }, /* Hawaii-Aleutian Standard */ + { "HADT", tDAYZONE, -HOUR (10) }, /* Hawaii-Aleutian Daylight */ + { "SST", tZONE, -HOUR (12) }, /* Samoa Standard */ + { "WAT", tZONE, HOUR ( 1) }, /* West Africa */ + { "CET", tZONE, HOUR ( 1) }, /* Central European */ + { "CEST", tDAYZONE, HOUR ( 1) }, /* Central European Summer */ + { "MET", tZONE, HOUR ( 1) }, /* Middle European */ + { "MEZ", tZONE, HOUR ( 1) }, /* Middle European */ + { "MEST", tDAYZONE, HOUR ( 1) }, /* Middle European Summer */ + { "MESZ", tDAYZONE, HOUR ( 1) }, /* Middle European Summer */ + { "EET", tZONE, HOUR ( 2) }, /* Eastern European */ + { "EEST", tDAYZONE, HOUR ( 2) }, /* Eastern European Summer */ + { "CAT", tZONE, HOUR ( 2) }, /* Central Africa */ + { "SAST", tZONE, HOUR ( 2) }, /* South Africa Standard */ + { "EAT", tZONE, HOUR ( 3) }, /* East Africa */ + { "MSK", tZONE, HOUR ( 3) }, /* Moscow */ + { "MSD", tDAYZONE, HOUR ( 3) }, /* Moscow Daylight */ + { "IST", tZONE, (HOUR ( 5) + 30 * 60) }, /* India Standard */ + { "SGT", tZONE, HOUR ( 8) }, /* Singapore */ + { "KST", tZONE, HOUR ( 9) }, /* Korea Standard */ + { "JST", tZONE, HOUR ( 9) }, /* Japan Standard */ + { "GST", tZONE, HOUR (10) }, /* Guam Standard */ + { "NZST", tZONE, HOUR (12) }, /* New Zealand Standard */ + { "NZDT", tDAYZONE, HOUR (12) }, /* New Zealand Daylight */ + { NULL, 0, 0 } +}; + +/* Military time zone table. + + Note 'T' is a special case, as it is used as the separator in ISO + 8601 date and time of day representation. */ +static table const military_table[] = +{ + { "A", tZONE, -HOUR ( 1) }, + { "B", tZONE, -HOUR ( 2) }, + { "C", tZONE, -HOUR ( 3) }, + { "D", tZONE, -HOUR ( 4) }, + { "E", tZONE, -HOUR ( 5) }, + { "F", tZONE, -HOUR ( 6) }, + { "G", tZONE, -HOUR ( 7) }, + { "H", tZONE, -HOUR ( 8) }, + { "I", tZONE, -HOUR ( 9) }, + { "K", tZONE, -HOUR (10) }, + { "L", tZONE, -HOUR (11) }, + { "M", tZONE, -HOUR (12) }, + { "N", tZONE, HOUR ( 1) }, + { "O", tZONE, HOUR ( 2) }, + { "P", tZONE, HOUR ( 3) }, + { "Q", tZONE, HOUR ( 4) }, + { "R", tZONE, HOUR ( 5) }, + { "S", tZONE, HOUR ( 6) }, + { "T", 'T', 0 }, + { "U", tZONE, HOUR ( 8) }, + { "V", tZONE, HOUR ( 9) }, + { "W", tZONE, HOUR (10) }, + { "X", tZONE, HOUR (11) }, + { "Y", tZONE, HOUR (12) }, + { "Z", tZONE, HOUR ( 0) }, + { NULL, 0, 0 } +}; + + + +/* Convert a time zone expressed as HH:MM into an integer count of + seconds. If MM is negative, then S is of the form HHMM and needs + to be picked apart; otherwise, S is of the form HH. As specified in + http://www.opengroup.org/susv3xbd/xbd_chap08.html#tag_08_03, allow + only valid TZ range, and consider first two digits as hours, if no + minutes specified. Return true if successful. */ + +static bool +time_zone_hhmm (parser_control *pc, textint s, intmax_t mm) +{ + intmax_t n_minutes; + bool overflow = false; + + /* If the length of S is 1 or 2 and no minutes are specified, + interpret it as a number of hours. */ + if (s.digits <= 2 && mm < 0) + s.value *= 100; + + if (mm < 0) + n_minutes = (s.value / 100) * 60 + s.value % 100; + else + { + overflow |= INT_MULTIPLY_WRAPV (s.value, 60, &n_minutes); + overflow |= (s.negative + ? INT_SUBTRACT_WRAPV (n_minutes, mm, &n_minutes) + : INT_ADD_WRAPV (n_minutes, mm, &n_minutes)); + } + + if (overflow || ! (-24 * 60 <= n_minutes && n_minutes <= 24 * 60)) + return false; + pc->time_zone = n_minutes * 60; + return true; +} + +static int +to_hour (intmax_t hours, int meridian) +{ + switch (meridian) + { + default: /* Pacify GCC. */ + case MER24: + return 0 <= hours && hours < 24 ? hours : -1; + case MERam: + return 0 < hours && hours < 12 ? hours : hours == 12 ? 0 : -1; + case MERpm: + return 0 < hours && hours < 12 ? hours + 12 : hours == 12 ? 12 : -1; + } +} + +enum { TM_YEAR_BASE = 1900 }; +enum { TM_YEAR_BUFSIZE = INT_BUFSIZE_BOUND (int) + 1 }; + +/* Convert TM_YEAR, a year minus 1900, to a string that is numerically + correct even if subtracting 1900 would overflow. */ + +static char const * +tm_year_str (int tm_year, char buf[TM_YEAR_BUFSIZE]) +{ + verify (TM_YEAR_BASE % 100 == 0); + sprintf (buf, &"-%02d%02d"[-TM_YEAR_BASE <= tm_year], + abs (tm_year / 100 + TM_YEAR_BASE / 100), + abs (tm_year % 100)); + return buf; +} + +/* Convert a text year number to a year minus 1900, working correctly + even if the input is in the range INT_MAX .. INT_MAX + 1900 - 1. */ + +static bool +to_tm_year (textint textyear, bool debug, int *tm_year) +{ + intmax_t year = textyear.value; + + /* XPG4 suggests that years 00-68 map to 2000-2068, and + years 69-99 map to 1969-1999. */ + if (0 <= year && textyear.digits == 2) + { + year += year < 69 ? 2000 : 1900; + if (debug) + dbg_printf (_("warning: adjusting year value %"PRIdMAX + " to %"PRIdMAX"\n"), + textyear.value, year); + } + + if (year < 0 + ? INT_SUBTRACT_WRAPV (-TM_YEAR_BASE, year, tm_year) + : INT_SUBTRACT_WRAPV (year, TM_YEAR_BASE, tm_year)) + { + if (debug) + dbg_printf (_("error: out-of-range year %"PRIdMAX"\n"), year); + return false; + } + + return true; +} + +static table const * _GL_ATTRIBUTE_PURE +lookup_zone (parser_control const *pc, char const *name) +{ + table const *tp; + + for (tp = universal_time_zone_table; tp->name; tp++) + if (strcmp (name, tp->name) == 0) + return tp; + + /* Try local zone abbreviations before those in time_zone_table, as + the local ones are more likely to be right. */ + for (tp = pc->local_time_zone_table; tp->name; tp++) + if (strcmp (name, tp->name) == 0) + return tp; + + for (tp = time_zone_table; tp->name; tp++) + if (strcmp (name, tp->name) == 0) + return tp; + + return NULL; +} + +#if ! HAVE_TM_GMTOFF +/* Yield the difference between *A and *B, + measured in seconds, ignoring leap seconds. + The body of this function is taken directly from the GNU C Library; + see strftime.c. */ +static int +tm_diff (const struct tm *a, const struct tm *b) +{ + /* Compute intervening leap days correctly even if year is negative. + Take care to avoid int overflow in leap day calculations, + but it's OK to assume that A and B are close to each other. */ + int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3); + int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3); + int a100 = a4 / 25 - (a4 % 25 < 0); + int b100 = b4 / 25 - (b4 % 25 < 0); + int a400 = SHR (a100, 2); + int b400 = SHR (b100, 2); + int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); + int years = a->tm_year - b->tm_year; + int days = (365 * years + intervening_leap_days + + (a->tm_yday - b->tm_yday)); + return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour)) + + (a->tm_min - b->tm_min)) + + (a->tm_sec - b->tm_sec)); +} +#endif /* ! HAVE_TM_GMTOFF */ + +static table const * +lookup_word (parser_control const *pc, char *word) +{ + char *p; + char *q; + ptrdiff_t wordlen; + table const *tp; + bool period_found; + bool abbrev; + + /* Make it uppercase. */ + for (p = word; *p; p++) + *p = c_toupper (to_uchar (*p)); + + for (tp = meridian_table; tp->name; tp++) + if (strcmp (word, tp->name) == 0) + return tp; + + /* See if we have an abbreviation for a month. */ + wordlen = strlen (word); + abbrev = wordlen == 3 || (wordlen == 4 && word[3] == '.'); + + for (tp = month_and_day_table; tp->name; tp++) + if ((abbrev ? strncmp (word, tp->name, 3) : strcmp (word, tp->name)) == 0) + return tp; + + if ((tp = lookup_zone (pc, word))) + return tp; + + if (strcmp (word, dst_table[0].name) == 0) + return dst_table; + + for (tp = time_units_table; tp->name; tp++) + if (strcmp (word, tp->name) == 0) + return tp; + + /* Strip off any plural and try the units table again. */ + if (word[wordlen - 1] == 'S') + { + word[wordlen - 1] = '\0'; + for (tp = time_units_table; tp->name; tp++) + if (strcmp (word, tp->name) == 0) + return tp; + word[wordlen - 1] = 'S'; /* For "this" in relative_time_table. */ + } + + for (tp = relative_time_table; tp->name; tp++) + if (strcmp (word, tp->name) == 0) + return tp; + + /* Military time zones. */ + if (wordlen == 1) + for (tp = military_table; tp->name; tp++) + if (word[0] == tp->name[0]) + return tp; + + /* Drop out any periods and try the time zone table again. */ + for (period_found = false, p = q = word; (*p = *q); q++) + if (*q == '.') + period_found = true; + else + p++; + if (period_found && (tp = lookup_zone (pc, word))) + return tp; + + return NULL; +} + +static int +yylex (union YYSTYPE *lvalp, parser_control *pc) +{ + unsigned char c; + + for (;;) + { + while (c = *pc->input, c_isspace (c)) + pc->input++; + + if (c_isdigit (c) || c == '-' || c == '+') + { + char const *p; + int sign; + intmax_t value = 0; + if (c == '-' || c == '+') + { + sign = c == '-' ? -1 : 1; + while (c = *++pc->input, c_isspace (c)) + continue; + if (! c_isdigit (c)) + /* skip the '-' sign */ + continue; + } + else + sign = 0; + p = pc->input; + + do + { + if (INT_MULTIPLY_WRAPV (value, 10, &value)) + return '?'; + if (INT_ADD_WRAPV (value, sign < 0 ? '0' - c : c - '0', &value)) + return '?'; + c = *++p; + } + while (c_isdigit (c)); + + if ((c == '.' || c == ',') && c_isdigit (p[1])) + { + time_t s; + int ns; + int digits; + + if (time_overflow (value)) + return '?'; + s = value; + + /* Accumulate fraction, to ns precision. */ + p++; + ns = *p++ - '0'; + for (digits = 2; digits <= LOG10_BILLION; digits++) + { + ns *= 10; + if (c_isdigit (*p)) + ns += *p++ - '0'; + } + + /* Skip excess digits, truncating toward -Infinity. */ + if (sign < 0) + for (; c_isdigit (*p); p++) + if (*p != '0') + { + ns++; + break; + } + while (c_isdigit (*p)) + p++; + + /* Adjust to the timespec convention, which is that + tv_nsec is always a positive offset even if tv_sec is + negative. */ + if (sign < 0 && ns) + { + if (s == TYPE_MINIMUM (time_t)) + return '?'; + s--; + ns = BILLION - ns; + } + + lvalp->timespec.tv_sec = s; + lvalp->timespec.tv_nsec = ns; + pc->input = p; + return sign ? tSDECIMAL_NUMBER : tUDECIMAL_NUMBER; + } + else + { + lvalp->textintval.negative = sign < 0; + lvalp->textintval.value = value; + lvalp->textintval.digits = p - pc->input; + pc->input = p; + return sign ? tSNUMBER : tUNUMBER; + } + } + + if (c_isalpha (c)) + { + char buff[20]; + char *p = buff; + table const *tp; + + do + { + if (p < buff + sizeof buff - 1) + *p++ = c; + c = *++pc->input; + } + while (c_isalpha (c) || c == '.'); + + *p = '\0'; + tp = lookup_word (pc, buff); + if (! tp) + { + if (pc->parse_datetime_debug) + dbg_printf (_("error: unknown word '%s'\n"), buff); + return '?'; + } + lvalp->intval = tp->value; + return tp->type; + } + + if (c != '(') + return to_uchar (*pc->input++); + + ptrdiff_t count = 0; + do + { + c = *pc->input++; + if (c == '\0') + return c; + if (c == '(') + count++; + else if (c == ')') + count--; + } + while (count != 0); + } +} + +/* Do nothing if the parser reports an error. */ +static int +yyerror (parser_control const *pc _GL_UNUSED, + char const *s _GL_UNUSED) +{ + return 0; +} + +/* If *TM0 is the old and *TM1 is the new value of a struct tm after + passing it to mktime_z, return true if it's OK. It's not OK if + mktime failed or if *TM0 has out-of-range mainline members. + The caller should set TM1->tm_wday to -1 before calling mktime, + as a negative tm_wday is how mktime failure is inferred. */ + +static bool +mktime_ok (struct tm const *tm0, struct tm const *tm1) +{ + if (tm1->tm_wday < 0) + return false; + + return ! ((tm0->tm_sec ^ tm1->tm_sec) + | (tm0->tm_min ^ tm1->tm_min) + | (tm0->tm_hour ^ tm1->tm_hour) + | (tm0->tm_mday ^ tm1->tm_mday) + | (tm0->tm_mon ^ tm1->tm_mon) + | (tm0->tm_year ^ tm1->tm_year)); +} + +/* Debugging: format a 'struct tm' into a buffer, taking the parser's + timezone information into account (if pc != NULL). */ +static char const * +debug_strfdatetime (struct tm const *tm, parser_control const *pc, + char *buf, int n) +{ + /* TODO: + 1. find an optimal way to print date string in a clear and unambiguous + format. Currently, always add '(Y-M-D)' prefix. + Consider '2016y01m10d' or 'year(2016) month(01) day(10)'. + + If the user needs debug printing, it means he/she already having + issues with the parsing - better to avoid formats that could + be mis-interpreted (e.g., just YYYY-MM-DD). + + 2. Can strftime be used instead? + depends if it is portable and can print invalid dates on all systems. + + 3. Print timezone information ? + + 4. Print DST information ? + + 5. Print nanosecond information ? + + NOTE: + Printed date/time values might not be valid, e.g., '2016-02-31' + or '2016-19-2016' . These are the values as parsed from the user + string, before validation. + */ + int m = nstrftime (buf, n, "(Y-M-D) %Y-%m-%d %H:%M:%S", tm, 0, 0); + + /* If parser_control information was provided (for timezone), + and there's enough space in the buffer, add timezone info. */ + if (pc && m < n && pc->zones_seen) + { + int tz = pc->time_zone; + + /* Account for DST if tLOCAL_ZONE was seen. */ + if (pc->local_zones_seen && !pc->zones_seen && 0 < pc->local_isdst) + tz += 60 * 60; + + char time_zone_buf[TIME_ZONE_BUFSIZE]; + snprintf (&buf[m], n - m, " TZ=%s", time_zone_str (tz, time_zone_buf)); + } + return buf; +} + +static char const * +debug_strfdate (struct tm const *tm, char *buf, int n) +{ + char tm_year_buf[TM_YEAR_BUFSIZE]; + snprintf (buf, n, "(Y-M-D) %s-%02d-%02d", + tm_year_str (tm->tm_year, tm_year_buf), + tm->tm_mon + 1, tm->tm_mday); + return buf; +} + +static char const * +debug_strftime (struct tm const *tm, char *buf, int n) +{ + snprintf (buf, n, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec); + return buf; +} + +/* If mktime_ok failed, display the failed time values, + and provide possible hints. Example output: + + date: error: invalid date/time value: + date: user provided time: '(Y-M-D) 2006-04-02 02:45:00' + date: normalized time: '(Y-M-D) 2006-04-02 03:45:00' + date: __ + date: possible reasons: + date: non-existing due to daylight-saving time; + date: numeric values overflow; + date: missing timezone; + */ +static void +debug_mktime_not_ok (struct tm const *tm0, struct tm const *tm1, + parser_control const *pc, bool time_zone_seen) +{ + /* TODO: handle t == -1 (as in 'mktime_ok'). */ + char tmp[DBGBUFSIZE]; + int i; + const bool eq_sec = (tm0->tm_sec == tm1->tm_sec); + const bool eq_min = (tm0->tm_min == tm1->tm_min); + const bool eq_hour = (tm0->tm_hour == tm1->tm_hour); + const bool eq_mday = (tm0->tm_mday == tm1->tm_mday); + const bool eq_month = (tm0->tm_mon == tm1->tm_mon); + const bool eq_year = (tm0->tm_year == tm1->tm_year); + + const bool dst_shift = eq_sec && eq_min && !eq_hour + && eq_mday && eq_month && eq_year; + + if (!pc->parse_datetime_debug) + return; + + dbg_printf (_("error: invalid date/time value:\n")); + dbg_printf (_(" user provided time: '%s'\n"), + debug_strfdatetime (tm0, pc, tmp, sizeof tmp)); + dbg_printf (_(" normalized time: '%s'\n"), + debug_strfdatetime (tm1, pc, tmp, sizeof tmp)); + /* The format must be aligned with debug_strfdatetime and the two + DEBUG statements above. This string is not translated. */ + i = snprintf (tmp, sizeof tmp, + " %4s %2s %2s %2s %2s %2s", + eq_year ? "" : "----", + eq_month ? "" : "--", + eq_mday ? "" : "--", + eq_hour ? "" : "--", + eq_min ? "" : "--", + eq_sec ? "" : "--"); + /* Trim trailing whitespace. */ + if (0 <= i) + { + if (sizeof tmp - 1 < i) + i = sizeof tmp - 1; + while (0 < i && tmp[i - 1] == ' ') + --i; + tmp[i] = '\0'; + } + dbg_printf ("%s\n", tmp); + + dbg_printf (_(" possible reasons:\n")); + if (dst_shift) + dbg_printf (_(" non-existing due to daylight-saving time;\n")); + if (!eq_mday && !eq_month) + dbg_printf (_(" invalid day/month combination;\n")); + dbg_printf (_(" numeric values overflow;\n")); + dbg_printf (" %s\n", (time_zone_seen ? _("incorrect timezone") + : _("missing timezone"))); +} + +/* The original interface: run with debug=false and the default timezone. */ +bool +parse_datetime (struct timespec *result, char const *p, + struct timespec const *now) +{ + char const *tzstring = getenv ("TZ"); + timezone_t tz = tzalloc (tzstring); + if (!tz) + return false; + bool ok = parse_datetime2 (result, p, now, 0, tz, tzstring); + tzfree (tz); + return ok; +} + +/* Parse a date/time string, storing the resulting time value into *RESULT. + The string itself is pointed to by P. Return true if successful. + P can be an incomplete or relative time specification; if so, use + *NOW as the basis for the returned time. Default to timezone + TZDEFAULT, which corresponds to tzalloc (TZSTRING). */ +bool +parse_datetime2 (struct timespec *result, char const *p, + struct timespec const *now, unsigned int flags, + timezone_t tzdefault, char const *tzstring) +{ + struct tm tm; + struct tm tm0; + char time_zone_buf[TIME_ZONE_BUFSIZE]; + char dbg_tm[DBGBUFSIZE]; + bool ok = false; + char const *input_sentinel = p + strlen (p); + char *tz1alloc = NULL; + + /* A reasonable upper bound for the size of ordinary TZ strings. + Use heap allocation if TZ's length exceeds this. */ + enum { TZBUFSIZE = 100 }; + char tz1buf[TZBUFSIZE]; + + struct timespec gettime_buffer; + if (! now) + { + gettime (&gettime_buffer); + now = &gettime_buffer; + } + + time_t Start = now->tv_sec; + int Start_ns = now->tv_nsec; + + unsigned char c; + while (c = *p, c_isspace (c)) + p++; + + timezone_t tz = tzdefault; + + /* Store a local copy prior to first "goto". Without this, a prior use + below of RELATIVE_TIME_0 on the RHS might translate to an assignment- + to-temporary, which would trigger a -Wjump-misses-init warning. */ + const relative_time rel_time_0 = RELATIVE_TIME_0; + + if (strncmp (p, "TZ=\"", 4) == 0) + { + char const *tzbase = p + 4; + ptrdiff_t tzsize = 1; + char const *s; + + for (s = tzbase; *s; s++, tzsize++) + if (*s == '\\') + { + s++; + if (! (*s == '\\' || *s == '"')) + break; + } + else if (*s == '"') + { + timezone_t tz1; + char *tz1string = tz1buf; + char *z; + if (TZBUFSIZE < tzsize) + { + tz1alloc = malloc (tzsize); + if (!tz1alloc) + goto fail; + tz1string = tz1alloc; + } + z = tz1string; + for (s = tzbase; *s != '"'; s++) + *z++ = *(s += *s == '\\'); + *z = '\0'; + tz1 = tzalloc (tz1string); + if (!tz1) + goto fail; + tz = tz1; + tzstring = tz1string; + + p = s + 1; + while (c = *p, c_isspace (c)) + p++; + + break; + } + } + + struct tm tmp; + if (! localtime_rz (tz, &now->tv_sec, &tmp)) + goto fail; + + /* As documented, be careful to treat the empty string just like + a date string of "0". Without this, an empty string would be + declared invalid when parsed during a DST transition. */ + if (*p == '\0') + p = "0"; + + parser_control pc; + pc.input = p; + pc.parse_datetime_debug = (flags & PARSE_DATETIME_DEBUG) != 0; + if (INT_ADD_WRAPV (tmp.tm_year, TM_YEAR_BASE, &pc.year.value)) + { + if (pc.parse_datetime_debug) + dbg_printf (_("error: initial year out of range\n")); + goto fail; + } + pc.year.digits = 0; + pc.month = tmp.tm_mon + 1; + pc.day = tmp.tm_mday; + pc.hour = tmp.tm_hour; + pc.minutes = tmp.tm_min; + pc.seconds.tv_sec = tmp.tm_sec; + pc.seconds.tv_nsec = Start_ns; + tm.tm_isdst = tmp.tm_isdst; + + pc.meridian = MER24; + pc.rel = rel_time_0; + pc.timespec_seen = false; + pc.rels_seen = false; + pc.dates_seen = 0; + pc.days_seen = 0; + pc.times_seen = 0; + pc.local_zones_seen = 0; + pc.dsts_seen = 0; + pc.zones_seen = 0; + pc.year_seen = false; + pc.debug_dates_seen = false; + pc.debug_days_seen = false; + pc.debug_times_seen = false; + pc.debug_local_zones_seen = false; + pc.debug_zones_seen = false; + pc.debug_year_seen = false; + pc.debug_ordinal_day_seen = false; + +#if HAVE_STRUCT_TM_TM_ZONE + pc.local_time_zone_table[0].name = tmp.tm_zone; + pc.local_time_zone_table[0].type = tLOCAL_ZONE; + pc.local_time_zone_table[0].value = tmp.tm_isdst; + pc.local_time_zone_table[1].name = NULL; + + /* Probe the names used in the next three calendar quarters, looking + for a tm_isdst different from the one we already have. */ + { + int quarter; + for (quarter = 1; quarter <= 3; quarter++) + { + intmax_t iprobe; + if (INT_ADD_WRAPV (Start, quarter * (90 * 24 * 60 * 60), &iprobe) + || time_overflow (iprobe)) + break; + time_t probe = iprobe; + struct tm probe_tm; + if (localtime_rz (tz, &probe, &probe_tm) && probe_tm.tm_zone + && probe_tm.tm_isdst != pc.local_time_zone_table[0].value) + { + { + pc.local_time_zone_table[1].name = probe_tm.tm_zone; + pc.local_time_zone_table[1].type = tLOCAL_ZONE; + pc.local_time_zone_table[1].value = probe_tm.tm_isdst; + pc.local_time_zone_table[2].name = NULL; + } + break; + } + } + } +#else +#if HAVE_TZNAME + { +# if !HAVE_DECL_TZNAME + extern char *tzname[]; +# endif + int i; + for (i = 0; i < 2; i++) + { + pc.local_time_zone_table[i].name = tzname[i]; + pc.local_time_zone_table[i].type = tLOCAL_ZONE; + pc.local_time_zone_table[i].value = i; + } + pc.local_time_zone_table[i].name = NULL; + } +#else + pc.local_time_zone_table[0].name = NULL; +#endif +#endif + + if (pc.local_time_zone_table[0].name && pc.local_time_zone_table[1].name + && ! strcmp (pc.local_time_zone_table[0].name, + pc.local_time_zone_table[1].name)) + { + /* This locale uses the same abbreviation for standard and + daylight times. So if we see that abbreviation, we don't + know whether it's daylight time. */ + pc.local_time_zone_table[0].value = -1; + pc.local_time_zone_table[1].name = NULL; + } + + if (yyparse (&pc) != 0) + { + if (pc.parse_datetime_debug) + dbg_printf ((input_sentinel <= pc.input + ? _("error: parsing failed\n") + : _("error: parsing failed, stopped at '%s'\n")), + pc.input); + goto fail; + } + + + /* Determine effective timezone source. */ + + if (pc.parse_datetime_debug) + { + dbg_printf (_("input timezone: ")); + + if (pc.timespec_seen) + fprintf (stderr, _("'@timespec' - always UTC")); + else if (pc.zones_seen) + fprintf (stderr, _("parsed date/time string")); + else if (tzstring) + { + if (tz != tzdefault) + fprintf (stderr, _("TZ=\"%s\" in date string"), tzstring); + else if (STREQ (tzstring, "UTC0")) + { + /* Special case: 'date -u' sets TZ="UTC0". */ + fprintf (stderr, _("TZ=\"UTC0\" environment value or -u")); + } + else + fprintf (stderr, _("TZ=\"%s\" environment value"), tzstring); + } + else + fprintf (stderr, _("system default")); + + /* Account for DST changes if tLOCAL_ZONE was seen. + local timezone only changes DST and is relative to the + default timezone.*/ + if (pc.local_zones_seen && !pc.zones_seen && 0 < pc.local_isdst) + fprintf (stderr, ", dst"); + + if (pc.zones_seen) + fprintf (stderr, " (%s)", time_zone_str (pc.time_zone, time_zone_buf)); + + fputc ('\n', stderr); + } + + if (pc.timespec_seen) + *result = pc.seconds; + else + { + if (1 < (pc.times_seen | pc.dates_seen | pc.days_seen | pc.dsts_seen + | (pc.local_zones_seen + pc.zones_seen))) + { + if (pc.parse_datetime_debug) + { + if (pc.times_seen > 1) + dbg_printf ("error: seen multiple time parts\n"); + if (pc.dates_seen > 1) + dbg_printf ("error: seen multiple date parts\n"); + if (pc.days_seen > 1) + dbg_printf ("error: seen multiple days parts\n"); + if (pc.dsts_seen > 1) + dbg_printf ("error: seen multiple daylight-saving parts\n"); + if ((pc.local_zones_seen + pc.zones_seen) > 1) + dbg_printf ("error: seen multiple time-zone parts\n"); + } + goto fail; + } + + if (! to_tm_year (pc.year, pc.parse_datetime_debug, &tm.tm_year) + || INT_ADD_WRAPV (pc.month, -1, &tm.tm_mon) + || INT_ADD_WRAPV (pc.day, 0, &tm.tm_mday)) + { + if (pc.parse_datetime_debug) + dbg_printf (_("error: year, month, or day overflow\n")); + goto fail; + } + if (pc.times_seen || (pc.rels_seen && ! pc.dates_seen && ! pc.days_seen)) + { + tm.tm_hour = to_hour (pc.hour, pc.meridian); + if (tm.tm_hour < 0) + { + char const *mrd = (pc.meridian == MERam ? "am" + : pc.meridian == MERpm ?"pm" : ""); + if (pc.parse_datetime_debug) + dbg_printf (_("error: invalid hour %"PRIdMAX"%s\n"), + pc.hour, mrd); + goto fail; + } + tm.tm_min = pc.minutes; + tm.tm_sec = pc.seconds.tv_sec; + if (pc.parse_datetime_debug) + dbg_printf ((pc.times_seen + ? _("using specified time as starting value: '%s'\n") + : _("using current time as starting value: '%s'\n")), + debug_strftime (&tm, dbg_tm, sizeof dbg_tm)); + } + else + { + tm.tm_hour = tm.tm_min = tm.tm_sec = 0; + pc.seconds.tv_nsec = 0; + if (pc.parse_datetime_debug) + dbg_printf ("warning: using midnight as starting time: 00:00:00\n"); + } + + /* Let mktime deduce tm_isdst if we have an absolute timestamp. */ + if (pc.dates_seen | pc.days_seen | pc.times_seen) + tm.tm_isdst = -1; + + /* But if the input explicitly specifies local time with or without + DST, give mktime that information. */ + if (pc.local_zones_seen) + tm.tm_isdst = pc.local_isdst; + + tm0.tm_sec = tm.tm_sec; + tm0.tm_min = tm.tm_min; + tm0.tm_hour = tm.tm_hour; + tm0.tm_mday = tm.tm_mday; + tm0.tm_mon = tm.tm_mon; + tm0.tm_year = tm.tm_year; + tm0.tm_isdst = tm.tm_isdst; + tm.tm_wday = -1; + + Start = mktime_z (tz, &tm); + + if (! mktime_ok (&tm0, &tm)) + { + bool repaired = false; + bool time_zone_seen = pc.zones_seen != 0; + if (time_zone_seen) + { + /* Guard against falsely reporting errors near the time_t + boundaries when parsing times in other time zones. For + example, suppose the input string "1969-12-31 23:00:00 -0100", + the current time zone is 8 hours ahead of UTC, and the min + time_t value is 1970-01-01 00:00:00 UTC. Then the min + localtime value is 1970-01-01 08:00:00, and mktime will + therefore fail on 1969-12-31 23:00:00. To work around the + problem, set the time zone to 1 hour behind UTC temporarily + by setting TZ="XXX1:00" and try mktime again. */ + + char tz2buf[sizeof "XXX" - 1 + TIME_ZONE_BUFSIZE]; + tz2buf[0] = tz2buf[1] = tz2buf[2] = 'X'; + time_zone_str (pc.time_zone, &tz2buf[3]); + timezone_t tz2 = tzalloc (tz2buf); + if (!tz2) + { + if (pc.parse_datetime_debug) + dbg_printf (_("error: tzalloc (\"%s\") failed\n"), tz2buf); + goto fail; + } + tm.tm_sec = tm0.tm_sec; + tm.tm_min = tm0.tm_min; + tm.tm_hour = tm0.tm_hour; + tm.tm_mday = tm0.tm_mday; + tm.tm_mon = tm0.tm_mon; + tm.tm_year = tm0.tm_year; + tm.tm_isdst = tm0.tm_isdst; + tm.tm_wday = -1; + Start = mktime_z (tz2, &tm); + repaired = mktime_ok (&tm0, &tm); + tzfree (tz2); + } + + if (! repaired) + { + debug_mktime_not_ok (&tm0, &tm, &pc, time_zone_seen); + goto fail; + } + } + + char dbg_ord[DBGBUFSIZE]; + + if (pc.days_seen && ! pc.dates_seen) + { + intmax_t dayincr; + if (INT_MULTIPLY_WRAPV ((pc.day_ordinal + - (0 < pc.day_ordinal + && tm.tm_wday != pc.day_number)), + 7, &dayincr) + || INT_ADD_WRAPV ((pc.day_number - tm.tm_wday + 7) % 7, + dayincr, &dayincr) + || INT_ADD_WRAPV (dayincr, tm.tm_mday, &tm.tm_mday)) + Start = -1; + else + { + tm.tm_isdst = -1; + Start = mktime_z (tz, &tm); + } + + if (Start == (time_t) -1) + { + if (pc.parse_datetime_debug) + dbg_printf (_("error: day '%s' " + "(day ordinal=%"PRIdMAX" number=%d) " + "resulted in an invalid date: '%s'\n"), + str_days (&pc, dbg_ord, sizeof dbg_ord), + pc.day_ordinal, pc.day_number, + debug_strfdatetime (&tm, &pc, dbg_tm, + sizeof dbg_tm)); + goto fail; + } + + if (pc.parse_datetime_debug) + dbg_printf (_("new start date: '%s' is '%s'\n"), + str_days (&pc, dbg_ord, sizeof dbg_ord), + debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); + + } + + if (pc.parse_datetime_debug) + { + if (!pc.dates_seen && !pc.days_seen) + dbg_printf (_("using current date as starting value: '%s'\n"), + debug_strfdate (&tm, dbg_tm, sizeof dbg_tm)); + + if (pc.days_seen && pc.dates_seen) + dbg_printf (_("warning: day (%s) ignored when explicit dates " + "are given\n"), + str_days (&pc, dbg_ord, sizeof dbg_ord)); + + dbg_printf (_("starting date/time: '%s'\n"), + debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); + } + + /* Add relative date. */ + if (pc.rel.year | pc.rel.month | pc.rel.day) + { + if (pc.parse_datetime_debug) + { + if ((pc.rel.year != 0 || pc.rel.month != 0) && tm.tm_mday != 15) + dbg_printf (_("warning: when adding relative months/years, " + "it is recommended to specify the 15th of the " + "months\n")); + + if (pc.rel.day != 0 && tm.tm_hour != 12) + dbg_printf (_("warning: when adding relative days, " + "it is recommended to specify noon\n")); + } + + int year, month, day; + if (INT_ADD_WRAPV (tm.tm_year, pc.rel.year, &year) + || INT_ADD_WRAPV (tm.tm_mon, pc.rel.month, &month) + || INT_ADD_WRAPV (tm.tm_mday, pc.rel.day, &day)) + { + if (pc.parse_datetime_debug) + dbg_printf (_("error: %s:%d\n"), __FILE__, __LINE__); + goto fail; + } + tm.tm_year = year; + tm.tm_mon = month; + tm.tm_mday = day; + tm.tm_hour = tm0.tm_hour; + tm.tm_min = tm0.tm_min; + tm.tm_sec = tm0.tm_sec; + tm.tm_isdst = tm0.tm_isdst; + Start = mktime_z (tz, &tm); + if (Start == (time_t) -1) + { + if (pc.parse_datetime_debug) + dbg_printf (_("error: adding relative date resulted " + "in an invalid date: '%s'\n"), + debug_strfdatetime (&tm, &pc, dbg_tm, + sizeof dbg_tm)); + goto fail; + } + + if (pc.parse_datetime_debug) + { + dbg_printf (_("after date adjustment " + "(%+"PRIdMAX" years, %+"PRIdMAX" months, " + "%+"PRIdMAX" days),\n"), + pc.rel.year, pc.rel.month, pc.rel.day); + dbg_printf (_(" new date/time = '%s'\n"), + debug_strfdatetime (&tm, &pc, dbg_tm, + sizeof dbg_tm)); + + /* Warn about crossing DST due to time adjustment. + Example: https://bugs.gnu.org/8357 + env TZ=Europe/Helsinki \ + date --debug \ + -d 'Mon Mar 28 00:36:07 2011 EEST 1 day ago' + + This case is different than DST changes due to time adjustment, + i.e., "1 day ago" vs "24 hours ago" are calculated in different + places. + + 'tm0.tm_isdst' contains the DST of the input date, + 'tm.tm_isdst' is the normalized result after calling + mktime (&tm). + */ + if (tm0.tm_isdst != -1 && tm.tm_isdst != tm0.tm_isdst) + dbg_printf (_("warning: daylight saving time changed after " + "date adjustment\n")); + + /* Warn if the user did not ask to adjust days but mday changed, + or + user did not ask to adjust months/days but the month changed. + + Example for first case: + 2016-05-31 + 1 month => 2016-06-31 => 2016-07-01. + User asked to adjust month, but the day changed from 31 to 01. + + Example for second case: + 2016-02-29 + 1 year => 2017-02-29 => 2017-03-01. + User asked to adjust year, but the month changed from 02 to 03. + */ + if (pc.rel.day == 0 + && (tm.tm_mday != day + || (pc.rel.month == 0 && tm.tm_mon != month))) + { + dbg_printf (_("warning: month/year adjustment resulted in " + "shifted dates:\n")); + char tm_year_buf[TM_YEAR_BUFSIZE]; + dbg_printf (_(" adjusted Y M D: %s %02d %02d\n"), + tm_year_str (year, tm_year_buf), month + 1, day); + dbg_printf (_(" normalized Y M D: %s %02d %02d\n"), + tm_year_str (tm.tm_year, tm_year_buf), + tm.tm_mon + 1, tm.tm_mday); + } + } + + } + + /* The only "output" of this if-block is an updated Start value, + so this block must follow others that clobber Start. */ + if (pc.zones_seen) + { + intmax_t delta = pc.time_zone, t1; + bool overflow = false; +#ifdef HAVE_TM_GMTOFF + long int utcoff = tm.tm_gmtoff; +#else + time_t t = Start; + struct tm gmt; + int utcoff = (gmtime_r (&t, &gmt) + ? tm_diff (&tm, &gmt) + : (overflow = true, 0)); +#endif + overflow |= INT_SUBTRACT_WRAPV (delta, utcoff, &delta); + overflow |= INT_SUBTRACT_WRAPV (Start, delta, &t1); + if (overflow || time_overflow (t1)) + { + if (pc.parse_datetime_debug) + dbg_printf (_("error: timezone %d caused time_t overflow\n"), + pc.time_zone); + goto fail; + } + Start = t1; + } + + if (pc.parse_datetime_debug) + { + intmax_t Starti = Start; + dbg_printf (_("'%s' = %"PRIdMAX" epoch-seconds\n"), + debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm), + Starti); + } + + + /* Add relative hours, minutes, and seconds. On hosts that support + leap seconds, ignore the possibility of leap seconds; e.g., + "+ 10 minutes" adds 600 seconds, even if one of them is a + leap second. Typically this is not what the user wants, but it's + too hard to do it the other way, because the time zone indicator + must be applied before relative times, and if mktime is applied + again the time zone will be lost. */ + { + intmax_t orig_ns = pc.seconds.tv_nsec; + intmax_t sum_ns = orig_ns + pc.rel.ns; + int normalized_ns = (sum_ns % BILLION + BILLION) % BILLION; + int d4 = (sum_ns - normalized_ns) / BILLION; + intmax_t d1, t1, d2, t2, t3, t4; + if (INT_MULTIPLY_WRAPV (pc.rel.hour, 60 * 60, &d1) + || INT_ADD_WRAPV (Start, d1, &t1) + || INT_MULTIPLY_WRAPV (pc.rel.minutes, 60, &d2) + || INT_ADD_WRAPV (t1, d2, &t2) + || INT_ADD_WRAPV (t2, pc.rel.seconds, &t3) + || INT_ADD_WRAPV (t3, d4, &t4) + || time_overflow (t4)) + { + if (pc.parse_datetime_debug) + dbg_printf (_("error: adding relative time caused an " + "overflow\n")); + goto fail; + } + + result->tv_sec = t4; + result->tv_nsec = normalized_ns; + + if (pc.parse_datetime_debug + && (pc.rel.hour | pc.rel.minutes | pc.rel.seconds | pc.rel.ns)) + { + dbg_printf (_("after time adjustment (%+"PRIdMAX" hours, " + "%+"PRIdMAX" minutes, " + "%+"PRIdMAX" seconds, %+d ns),\n"), + pc.rel.hour, pc.rel.minutes, pc.rel.seconds, + pc.rel.ns); + dbg_printf (_(" new time = %"PRIdMAX" epoch-seconds\n"), t4); + + /* Warn about crossing DST due to time adjustment. + Example: https://bugs.gnu.org/8357 + env TZ=Europe/Helsinki \ + date --debug \ + -d 'Mon Mar 28 00:36:07 2011 EEST 24 hours ago' + + This case is different than DST changes due to days adjustment, + i.e., "1 day ago" vs "24 hours ago" are calculated in different + places. + + 'tm.tm_isdst' contains the date after date adjustment. */ + struct tm lmt; + if (tm.tm_isdst != -1 && localtime_rz (tz, &result->tv_sec, &lmt) + && tm.tm_isdst != lmt.tm_isdst) + dbg_printf (_("warning: daylight saving time changed after " + "time adjustment\n")); + } + } + } + + if (pc.parse_datetime_debug) + { + /* Special case: using 'date -u' simply set TZ=UTC0 */ + if (! tzstring) + dbg_printf (_("timezone: system default\n")); + else if (STREQ (tzstring, "UTC0")) + dbg_printf (_("timezone: Universal Time\n")); + else + dbg_printf (_("timezone: TZ=\"%s\" environment value\n"), tzstring); + + intmax_t sec = result->tv_sec; + int nsec = result->tv_nsec; + dbg_printf (_("final: %"PRIdMAX".%09d (epoch-seconds)\n"), + sec, nsec); + + struct tm gmt, lmt; + bool got_utc = !!gmtime_r (&result->tv_sec, &gmt); + if (got_utc) + dbg_printf (_("final: %s (UTC)\n"), + debug_strfdatetime (&gmt, NULL, + dbg_tm, sizeof dbg_tm)); + if (localtime_rz (tz, &result->tv_sec, &lmt)) + { +#ifdef HAVE_TM_GMTOFF + bool got_utcoff = true; + long int utcoff = lmt.tm_gmtoff; +#else + bool got_utcoff = got_utc; + int utcoff; + if (got_utcoff) + utcoff = tm_diff (&lmt, &gmt); +#endif + if (got_utcoff) + dbg_printf (_("final: %s (UTC%s)\n"), + debug_strfdatetime (&lmt, NULL, dbg_tm, sizeof dbg_tm), + time_zone_str (utcoff, time_zone_buf)); + else + dbg_printf (_("final: %s (unknown time zone offset)\n"), + debug_strfdatetime (&lmt, NULL, dbg_tm, sizeof dbg_tm)); + } + } + + ok = true; + + fail: + if (tz != tzdefault) + tzfree (tz); + free (tz1alloc); + return ok; +} + +#if TEST + +int +main (int ac, char **av) +{ + char buff[BUFSIZ]; + + printf ("Enter date, or blank line to exit.\n\t> "); + fflush (stdout); + + buff[BUFSIZ - 1] = '\0'; + while (fgets (buff, BUFSIZ - 1, stdin) && buff[0]) + { + struct timespec d; + struct tm const *tm; + if (! parse_datetime (&d, buff, NULL)) + printf ("Bad format - couldn't convert.\n"); + else if (! (tm = localtime (&d.tv_sec))) + { + intmax_t sec = d.tv_sec; + printf ("localtime (%"PRIdMAX") failed\n", sec); + } + else + { + int ns = d.tv_nsec; + char tm_year_buf[TM_YEAR_BUFSIZE]; + printf ("%s-%02d-%02d %02d:%02d:%02d.%09d\n", + tm_year_str (tm->tm_year, tm_year_buf), + tm->tm_mon + 1, tm->tm_mday, + tm->tm_hour, tm->tm_min, tm->tm_sec, ns); + } + printf ("\t> "); + fflush (stdout); + } + return 0; +} +#endif /* TEST */ diff --git a/devspec.en_US/project/recutils/lib/pathmax.h b/devspec.en_US/project/recutils/lib/pathmax.h new file mode 100755 index 0000000..83b9491 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/pathmax.h @@ -0,0 +1,83 @@ +/* Define PATH_MAX somehow. Requires sys/types.h. + Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2019 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _PATHMAX_H +# define _PATHMAX_H + +/* POSIX:2008 defines PATH_MAX to be the maximum number of bytes in a filename, + including the terminating NUL byte. + <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html> + PATH_MAX is not defined on systems which have no limit on filename length, + such as GNU/Hurd. + + This file does *not* define PATH_MAX always. Programs that use this file + can handle the GNU/Hurd case in several ways: + - Either with a package-wide handling, or with a per-file handling, + - Either through a + #ifdef PATH_MAX + or through a fallback like + #ifndef PATH_MAX + # define PATH_MAX 8192 + #endif + or through a fallback like + #ifndef PATH_MAX + # define PATH_MAX pathconf ("/", _PC_PATH_MAX) + #endif + */ + +# include <unistd.h> + +# include <limits.h> + +# ifndef _POSIX_PATH_MAX +# define _POSIX_PATH_MAX 256 +# endif + +/* Don't include sys/param.h if it already has been. */ +# if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN +# include <sys/param.h> +# endif + +# if !defined PATH_MAX && defined MAXPATHLEN +# define PATH_MAX MAXPATHLEN +# endif + +# ifdef __hpux +/* On HP-UX, PATH_MAX designates the maximum number of bytes in a filename, + *not* including the terminating NUL byte, and is set to 1023. + Additionally, when _XOPEN_SOURCE is defined to 500 or more, PATH_MAX is + not defined at all any more. */ +# undef PATH_MAX +# define PATH_MAX 1024 +# endif + +# if defined _WIN32 && ! defined __CYGWIN__ +/* The page "Naming Files, Paths, and Namespaces" on msdn.microsoft.com, + section "Maximum Path Length Limitation", + <https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath> + explains that the maximum size of a filename, including the terminating + NUL byte, is 260 = 3 + 256 + 1. + This is the same value as + - FILENAME_MAX in <stdio.h>, + - _MAX_PATH in <stdlib.h>, + - MAX_PATH in <windef.h>. + Undefine the original value, because mingw's <limits.h> gets it wrong. */ +# undef PATH_MAX +# define PATH_MAX 260 +# endif + +#endif /* _PATHMAX_H */ diff --git a/devspec.en_US/project/recutils/lib/printf-args.c b/devspec.en_US/project/recutils/lib/printf-args.c new file mode 100755 index 0000000..e45cfbe --- /dev/null +++ b/devspec.en_US/project/recutils/lib/printf-args.c @@ -0,0 +1,187 @@ +/* Decomposed printf argument list. + Copyright (C) 1999, 2002-2003, 2005-2007, 2009-2019 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* This file can be parametrized with the following macros: + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. + PRINTF_FETCHARGS Name of the function to be defined. + STATIC Set to 'static' to declare the function static. */ + +#ifndef PRINTF_FETCHARGS +# include <config.h> +#endif + +/* Specification. */ +#ifndef PRINTF_FETCHARGS +# include "printf-args.h" +#endif + +#ifdef STATIC +STATIC +#endif +int +PRINTF_FETCHARGS (va_list args, arguments *a) +{ + size_t i; + argument *ap; + + for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++) + switch (ap->type) + { + case TYPE_SCHAR: + ap->a.a_schar = va_arg (args, /*signed char*/ int); + break; + case TYPE_UCHAR: + ap->a.a_uchar = va_arg (args, /*unsigned char*/ int); + break; + case TYPE_SHORT: + ap->a.a_short = va_arg (args, /*short*/ int); + break; + case TYPE_USHORT: + ap->a.a_ushort = va_arg (args, /*unsigned short*/ int); + break; + case TYPE_INT: + ap->a.a_int = va_arg (args, int); + break; + case TYPE_UINT: + ap->a.a_uint = va_arg (args, unsigned int); + break; + case TYPE_LONGINT: + ap->a.a_longint = va_arg (args, long int); + break; + case TYPE_ULONGINT: + ap->a.a_ulongint = va_arg (args, unsigned long int); + break; +#if HAVE_LONG_LONG_INT + case TYPE_LONGLONGINT: + ap->a.a_longlongint = va_arg (args, long long int); + break; + case TYPE_ULONGLONGINT: + ap->a.a_ulonglongint = va_arg (args, unsigned long long int); + break; +#endif + case TYPE_DOUBLE: + ap->a.a_double = va_arg (args, double); + break; + case TYPE_LONGDOUBLE: + ap->a.a_longdouble = va_arg (args, long double); + break; + case TYPE_CHAR: + ap->a.a_char = va_arg (args, int); + break; +#if HAVE_WINT_T + case TYPE_WIDE_CHAR: + /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by + default argument promotions", this is not the case in mingw32, + where wint_t is 'unsigned short'. */ + ap->a.a_wide_char = + (sizeof (wint_t) < sizeof (int) + ? (wint_t) va_arg (args, int) + : va_arg (args, wint_t)); + break; +#endif + case TYPE_STRING: + ap->a.a_string = va_arg (args, const char *); + /* A null pointer is an invalid argument for "%s", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_string == NULL) + ap->a.a_string = "(NULL)"; + break; +#if HAVE_WCHAR_T + case TYPE_WIDE_STRING: + ap->a.a_wide_string = va_arg (args, const wchar_t *); + /* A null pointer is an invalid argument for "%ls", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_wide_string == NULL) + { + static const wchar_t wide_null_string[] = + { + (wchar_t)'(', + (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L', + (wchar_t)')', + (wchar_t)0 + }; + ap->a.a_wide_string = wide_null_string; + } + break; +#endif + case TYPE_POINTER: + ap->a.a_pointer = va_arg (args, void *); + break; + case TYPE_COUNT_SCHAR_POINTER: + ap->a.a_count_schar_pointer = va_arg (args, signed char *); + break; + case TYPE_COUNT_SHORT_POINTER: + ap->a.a_count_short_pointer = va_arg (args, short *); + break; + case TYPE_COUNT_INT_POINTER: + ap->a.a_count_int_pointer = va_arg (args, int *); + break; + case TYPE_COUNT_LONGINT_POINTER: + ap->a.a_count_longint_pointer = va_arg (args, long int *); + break; +#if HAVE_LONG_LONG_INT + case TYPE_COUNT_LONGLONGINT_POINTER: + ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); + break; +#endif +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + case TYPE_U8_STRING: + ap->a.a_u8_string = va_arg (args, const uint8_t *); + /* A null pointer is an invalid argument for "%U", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_u8_string == NULL) + { + static const uint8_t u8_null_string[] = + { '(', 'N', 'U', 'L', 'L', ')', 0 }; + ap->a.a_u8_string = u8_null_string; + } + break; + case TYPE_U16_STRING: + ap->a.a_u16_string = va_arg (args, const uint16_t *); + /* A null pointer is an invalid argument for "%lU", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_u16_string == NULL) + { + static const uint16_t u16_null_string[] = + { '(', 'N', 'U', 'L', 'L', ')', 0 }; + ap->a.a_u16_string = u16_null_string; + } + break; + case TYPE_U32_STRING: + ap->a.a_u32_string = va_arg (args, const uint32_t *); + /* A null pointer is an invalid argument for "%llU", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_u32_string == NULL) + { + static const uint32_t u32_null_string[] = + { '(', 'N', 'U', 'L', 'L', ')', 0 }; + ap->a.a_u32_string = u32_null_string; + } + break; +#endif + default: + /* Unknown type. */ + return -1; + } + return 0; +} diff --git a/devspec.en_US/project/recutils/lib/printf-args.h b/devspec.en_US/project/recutils/lib/printf-args.h new file mode 100755 index 0000000..866cba0 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/printf-args.h @@ -0,0 +1,158 @@ +/* Decomposed printf argument list. + Copyright (C) 1999, 2002-2003, 2006-2007, 2011-2019 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _PRINTF_ARGS_H +#define _PRINTF_ARGS_H + +/* This file can be parametrized with the following macros: + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. + PRINTF_FETCHARGS Name of the function to be declared. + STATIC Set to 'static' to declare the function static. */ + +/* Default parameters. */ +#ifndef PRINTF_FETCHARGS +# define PRINTF_FETCHARGS printf_fetchargs +#endif + +/* Get size_t. */ +#include <stddef.h> + +/* Get wchar_t. */ +#if HAVE_WCHAR_T +# include <stddef.h> +#endif + +/* Get wint_t. */ +#if HAVE_WINT_T +# include <wchar.h> +#endif + +/* Get va_list. */ +#include <stdarg.h> + + +/* Argument types */ +typedef enum +{ + TYPE_NONE, + TYPE_SCHAR, + TYPE_UCHAR, + TYPE_SHORT, + TYPE_USHORT, + TYPE_INT, + TYPE_UINT, + TYPE_LONGINT, + TYPE_ULONGINT, +#if HAVE_LONG_LONG_INT + TYPE_LONGLONGINT, + TYPE_ULONGLONGINT, +#endif + TYPE_DOUBLE, + TYPE_LONGDOUBLE, + TYPE_CHAR, +#if HAVE_WINT_T + TYPE_WIDE_CHAR, +#endif + TYPE_STRING, +#if HAVE_WCHAR_T + TYPE_WIDE_STRING, +#endif + TYPE_POINTER, + TYPE_COUNT_SCHAR_POINTER, + TYPE_COUNT_SHORT_POINTER, + TYPE_COUNT_INT_POINTER, + TYPE_COUNT_LONGINT_POINTER +#if HAVE_LONG_LONG_INT +, TYPE_COUNT_LONGLONGINT_POINTER +#endif +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ +, TYPE_U8_STRING +, TYPE_U16_STRING +, TYPE_U32_STRING +#endif +} arg_type; + +/* Polymorphic argument */ +typedef struct +{ + arg_type type; + union + { + signed char a_schar; + unsigned char a_uchar; + short a_short; + unsigned short a_ushort; + int a_int; + unsigned int a_uint; + long int a_longint; + unsigned long int a_ulongint; +#if HAVE_LONG_LONG_INT + long long int a_longlongint; + unsigned long long int a_ulonglongint; +#endif + float a_float; + double a_double; + long double a_longdouble; + int a_char; +#if HAVE_WINT_T + wint_t a_wide_char; +#endif + const char* a_string; +#if HAVE_WCHAR_T + const wchar_t* a_wide_string; +#endif + void* a_pointer; + signed char * a_count_schar_pointer; + short * a_count_short_pointer; + int * a_count_int_pointer; + long int * a_count_longint_pointer; +#if HAVE_LONG_LONG_INT + long long int * a_count_longlongint_pointer; +#endif +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + const uint8_t * a_u8_string; + const uint16_t * a_u16_string; + const uint32_t * a_u32_string; +#endif + } + a; +} +argument; + +/* Number of directly allocated arguments (no malloc() needed). */ +#define N_DIRECT_ALLOC_ARGUMENTS 7 + +typedef struct +{ + size_t count; + argument *arg; + argument direct_alloc_arg[N_DIRECT_ALLOC_ARGUMENTS]; +} +arguments; + + +/* Fetch the arguments, putting them into a. */ +#ifdef STATIC +STATIC +#else +extern +#endif +int PRINTF_FETCHARGS (va_list args, arguments *a); + +#endif /* _PRINTF_ARGS_H */ diff --git a/devspec.en_US/project/recutils/lib/printf-frexp.c b/devspec.en_US/project/recutils/lib/printf-frexp.c new file mode 100755 index 0000000..77eafab --- /dev/null +++ b/devspec.en_US/project/recutils/lib/printf-frexp.c @@ -0,0 +1,190 @@ +/* Split a double into fraction and mantissa, for hexadecimal printf. + Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#if ! defined USE_LONG_DOUBLE +# include <config.h> +#endif + +/* Specification. */ +#ifdef USE_LONG_DOUBLE +# include "printf-frexpl.h" +#else +# include "printf-frexp.h" +#endif + +#include <float.h> +#include <math.h> +#ifdef USE_LONG_DOUBLE +# include "fpucw.h" +#endif + +/* This file assumes FLT_RADIX = 2. If FLT_RADIX is a power of 2 greater + than 2, or not even a power of 2, some rounding errors can occur, so that + then the returned mantissa is only guaranteed to be <= 2.0, not < 2.0. */ + +#ifdef USE_LONG_DOUBLE +# define FUNC printf_frexpl +# define DOUBLE long double +# define MIN_EXP LDBL_MIN_EXP +# if HAVE_FREXPL_IN_LIBC && HAVE_LDEXPL_IN_LIBC +# define USE_FREXP_LDEXP +# define FREXP frexpl +# define LDEXP ldexpl +# endif +# define DECL_ROUNDING DECL_LONG_DOUBLE_ROUNDING +# define BEGIN_ROUNDING() BEGIN_LONG_DOUBLE_ROUNDING () +# define END_ROUNDING() END_LONG_DOUBLE_ROUNDING () +# define L_(literal) literal##L +#else +# define FUNC printf_frexp +# define DOUBLE double +# define MIN_EXP DBL_MIN_EXP +# if HAVE_FREXP_IN_LIBC && HAVE_LDEXP_IN_LIBC +# define USE_FREXP_LDEXP +# define FREXP frexp +# define LDEXP ldexp +# endif +# define DECL_ROUNDING +# define BEGIN_ROUNDING() +# define END_ROUNDING() +# define L_(literal) literal +#endif + +DOUBLE +FUNC (DOUBLE x, int *expptr) +{ + int exponent; + DECL_ROUNDING + + BEGIN_ROUNDING (); + +#ifdef USE_FREXP_LDEXP + /* frexp and ldexp are usually faster than the loop below. */ + x = FREXP (x, &exponent); + + x = x + x; + exponent -= 1; + + if (exponent < MIN_EXP - 1) + { + x = LDEXP (x, exponent - (MIN_EXP - 1)); + exponent = MIN_EXP - 1; + } +#else + { + /* Since the exponent is an 'int', it fits in 64 bits. Therefore the + loops are executed no more than 64 times. */ + DOUBLE pow2[64]; /* pow2[i] = 2^2^i */ + DOUBLE powh[64]; /* powh[i] = 2^-2^i */ + int i; + + exponent = 0; + if (x >= L_(1.0)) + { + /* A nonnegative exponent. */ + { + DOUBLE pow2_i; /* = pow2[i] */ + DOUBLE powh_i; /* = powh[i] */ + + /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, + x * 2^exponent = argument, x >= 1.0. */ + for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); + ; + i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) + { + if (x >= pow2_i) + { + exponent += (1 << i); + x *= powh_i; + } + else + break; + + pow2[i] = pow2_i; + powh[i] = powh_i; + } + } + /* Here 1.0 <= x < 2^2^i. */ + } + else + { + /* A negative exponent. */ + { + DOUBLE pow2_i; /* = pow2[i] */ + DOUBLE powh_i; /* = powh[i] */ + + /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, + x * 2^exponent = argument, x < 1.0, exponent >= MIN_EXP - 1. */ + for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); + ; + i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) + { + if (exponent - (1 << i) < MIN_EXP - 1) + break; + + exponent -= (1 << i); + x *= pow2_i; + if (x >= L_(1.0)) + break; + + pow2[i] = pow2_i; + powh[i] = powh_i; + } + } + /* Here either x < 1.0 and exponent - 2^i < MIN_EXP - 1 <= exponent, + or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ + + if (x < L_(1.0)) + /* Invariants: x * 2^exponent = argument, x < 1.0 and + exponent - 2^i < MIN_EXP - 1 <= exponent. */ + while (i > 0) + { + i--; + if (exponent - (1 << i) >= MIN_EXP - 1) + { + exponent -= (1 << i); + x *= pow2[i]; + if (x >= L_(1.0)) + break; + } + } + + /* Here either x < 1.0 and exponent = MIN_EXP - 1, + or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ + } + + /* Invariants: x * 2^exponent = argument, and + either x < 1.0 and exponent = MIN_EXP - 1, + or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ + while (i > 0) + { + i--; + if (x >= pow2[i]) + { + exponent += (1 << i); + x *= powh[i]; + } + } + /* Here either x < 1.0 and exponent = MIN_EXP - 1, + or 1.0 <= x < 2.0 and exponent >= MIN_EXP - 1. */ + } +#endif + + END_ROUNDING (); + + *expptr = exponent; + return x; +} diff --git a/devspec.en_US/project/recutils/lib/printf-frexp.h b/devspec.en_US/project/recutils/lib/printf-frexp.h new file mode 100755 index 0000000..9310734 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/printf-frexp.h @@ -0,0 +1,23 @@ +/* Split a double into fraction and mantissa, for hexadecimal printf. + Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Write a finite, positive number x as + x = mantissa * 2^exp + where exp >= DBL_MIN_EXP - 1, + mantissa < 2.0, + if x is not a denormalized number then mantissa >= 1.0. + Store exp in *EXPPTR and return mantissa. */ +extern double printf_frexp (double x, int *expptr); diff --git a/devspec.en_US/project/recutils/lib/printf-frexpl.c b/devspec.en_US/project/recutils/lib/printf-frexpl.c new file mode 100755 index 0000000..693b889 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/printf-frexpl.c @@ -0,0 +1,37 @@ +/* Split a 'long double' into fraction and mantissa, for hexadecimal printf. + Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE + +/* Specification. */ +# include "printf-frexpl.h" + +# include "printf-frexp.h" + +long double +printf_frexpl (long double x, int *expptr) +{ + return printf_frexp (x, expptr); +} + +#else + +# define USE_LONG_DOUBLE +# include "printf-frexp.c" + +#endif diff --git a/devspec.en_US/project/recutils/lib/printf-frexpl.h b/devspec.en_US/project/recutils/lib/printf-frexpl.h new file mode 100755 index 0000000..2760769 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/printf-frexpl.h @@ -0,0 +1,23 @@ +/* Split a 'long double' into fraction and mantissa, for hexadecimal printf. + Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Write a finite, positive number x as + x = mantissa * 2^exp + where exp >= LDBL_MIN_EXP - 1, + mantissa < 2.0, + if x is not a denormalized number then mantissa >= 1.0. + Store exp in *EXPPTR and return mantissa. */ +extern long double printf_frexpl (long double x, int *expptr); diff --git a/devspec.en_US/project/recutils/lib/printf-parse.c b/devspec.en_US/project/recutils/lib/printf-parse.c new file mode 100755 index 0000000..8596fd5 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/printf-parse.c @@ -0,0 +1,638 @@ +/* Formatted output to strings. + Copyright (C) 1999-2000, 2002-2003, 2006-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* This file can be parametrized with the following macros: + CHAR_T The element type of the format string. + CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters + in the format string are ASCII. + DIRECTIVE Structure denoting a format directive. + Depends on CHAR_T. + DIRECTIVES Structure denoting the set of format directives of a + format string. Depends on CHAR_T. + PRINTF_PARSE Function that parses a format string. + Depends on CHAR_T. + STATIC Set to 'static' to declare the function static. + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */ + +#ifndef PRINTF_PARSE +# include <config.h> +#endif + +/* Specification. */ +#ifndef PRINTF_PARSE +# include "printf-parse.h" +#endif + +/* Default parameters. */ +#ifndef PRINTF_PARSE +# define PRINTF_PARSE printf_parse +# define CHAR_T char +# define DIRECTIVE char_directive +# define DIRECTIVES char_directives +#endif + +/* Get size_t, NULL. */ +#include <stddef.h> + +/* Get intmax_t. */ +#if defined IN_LIBINTL || defined IN_LIBASPRINTF +# if HAVE_STDINT_H_WITH_UINTMAX +# include <stdint.h> +# endif +# if HAVE_INTTYPES_H_WITH_UINTMAX +# include <inttypes.h> +# endif +#else +# include <stdint.h> +#endif + +/* malloc(), realloc(), free(). */ +#include <stdlib.h> + +/* memcpy(). */ +#include <string.h> + +/* errno. */ +#include <errno.h> + +/* Checked size_t computations. */ +#include "xsize.h" + +#if CHAR_T_ONLY_ASCII +/* c_isascii(). */ +# include "c-ctype.h" +#endif + +#ifdef STATIC +STATIC +#endif +int +PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) +{ + const CHAR_T *cp = format; /* pointer into format */ + size_t arg_posn = 0; /* number of regular arguments consumed */ + size_t d_allocated; /* allocated elements of d->dir */ + size_t a_allocated; /* allocated elements of a->arg */ + size_t max_width_length = 0; + size_t max_precision_length = 0; + + d->count = 0; + d_allocated = N_DIRECT_ALLOC_DIRECTIVES; + d->dir = d->direct_alloc_dir; + + a->count = 0; + a_allocated = N_DIRECT_ALLOC_ARGUMENTS; + a->arg = a->direct_alloc_arg; + +#define REGISTER_ARG(_index_,_type_) \ + { \ + size_t n = (_index_); \ + if (n >= a_allocated) \ + { \ + size_t memory_size; \ + argument *memory; \ + \ + a_allocated = xtimes (a_allocated, 2); \ + if (a_allocated <= n) \ + a_allocated = xsum (n, 1); \ + memory_size = xtimes (a_allocated, sizeof (argument)); \ + if (size_overflow_p (memory_size)) \ + /* Overflow, would lead to out of memory. */ \ + goto out_of_memory; \ + memory = (argument *) (a->arg != a->direct_alloc_arg \ + ? realloc (a->arg, memory_size) \ + : malloc (memory_size)); \ + if (memory == NULL) \ + /* Out of memory. */ \ + goto out_of_memory; \ + if (a->arg == a->direct_alloc_arg) \ + memcpy (memory, a->arg, a->count * sizeof (argument)); \ + a->arg = memory; \ + } \ + while (a->count <= n) \ + a->arg[a->count++].type = TYPE_NONE; \ + if (a->arg[n].type == TYPE_NONE) \ + a->arg[n].type = (_type_); \ + else if (a->arg[n].type != (_type_)) \ + /* Ambiguous type for positional argument. */ \ + goto error; \ + } + + while (*cp != '\0') + { + CHAR_T c = *cp++; + if (c == '%') + { + size_t arg_index = ARG_NONE; + DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */ + + /* Initialize the next directive. */ + dp->dir_start = cp - 1; + dp->flags = 0; + dp->width_start = NULL; + dp->width_end = NULL; + dp->width_arg_index = ARG_NONE; + dp->precision_start = NULL; + dp->precision_end = NULL; + dp->precision_arg_index = ARG_NONE; + dp->arg_index = ARG_NONE; + + /* Test for positional argument. */ + if (*cp >= '0' && *cp <= '9') + { + const CHAR_T *np; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + ; + if (*np == '$') + { + size_t n = 0; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + n = xsum (xtimes (n, 10), *np - '0'); + if (n == 0) + /* Positional argument 0. */ + goto error; + if (size_overflow_p (n)) + /* n too large, would lead to out of memory later. */ + goto error; + arg_index = n - 1; + cp = np + 1; + } + } + + /* Read the flags. */ + for (;;) + { + if (*cp == '\'') + { + dp->flags |= FLAG_GROUP; + cp++; + } + else if (*cp == '-') + { + dp->flags |= FLAG_LEFT; + cp++; + } + else if (*cp == '+') + { + dp->flags |= FLAG_SHOWSIGN; + cp++; + } + else if (*cp == ' ') + { + dp->flags |= FLAG_SPACE; + cp++; + } + else if (*cp == '#') + { + dp->flags |= FLAG_ALT; + cp++; + } + else if (*cp == '0') + { + dp->flags |= FLAG_ZERO; + cp++; + } +#if __GLIBC__ >= 2 && !defined __UCLIBC__ + else if (*cp == 'I') + { + dp->flags |= FLAG_LOCALIZED; + cp++; + } +#endif + else + break; + } + + /* Parse the field width. */ + if (*cp == '*') + { + dp->width_start = cp; + cp++; + dp->width_end = cp; + if (max_width_length < 1) + max_width_length = 1; + + /* Test for positional argument. */ + if (*cp >= '0' && *cp <= '9') + { + const CHAR_T *np; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + ; + if (*np == '$') + { + size_t n = 0; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + n = xsum (xtimes (n, 10), *np - '0'); + if (n == 0) + /* Positional argument 0. */ + goto error; + if (size_overflow_p (n)) + /* n too large, would lead to out of memory later. */ + goto error; + dp->width_arg_index = n - 1; + cp = np + 1; + } + } + if (dp->width_arg_index == ARG_NONE) + { + dp->width_arg_index = arg_posn++; + if (dp->width_arg_index == ARG_NONE) + /* arg_posn wrapped around. */ + goto error; + } + REGISTER_ARG (dp->width_arg_index, TYPE_INT); + } + else if (*cp >= '0' && *cp <= '9') + { + size_t width_length; + + dp->width_start = cp; + for (; *cp >= '0' && *cp <= '9'; cp++) + ; + dp->width_end = cp; + width_length = dp->width_end - dp->width_start; + if (max_width_length < width_length) + max_width_length = width_length; + } + + /* Parse the precision. */ + if (*cp == '.') + { + cp++; + if (*cp == '*') + { + dp->precision_start = cp - 1; + cp++; + dp->precision_end = cp; + if (max_precision_length < 2) + max_precision_length = 2; + + /* Test for positional argument. */ + if (*cp >= '0' && *cp <= '9') + { + const CHAR_T *np; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + ; + if (*np == '$') + { + size_t n = 0; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + n = xsum (xtimes (n, 10), *np - '0'); + if (n == 0) + /* Positional argument 0. */ + goto error; + if (size_overflow_p (n)) + /* n too large, would lead to out of memory + later. */ + goto error; + dp->precision_arg_index = n - 1; + cp = np + 1; + } + } + if (dp->precision_arg_index == ARG_NONE) + { + dp->precision_arg_index = arg_posn++; + if (dp->precision_arg_index == ARG_NONE) + /* arg_posn wrapped around. */ + goto error; + } + REGISTER_ARG (dp->precision_arg_index, TYPE_INT); + } + else + { + size_t precision_length; + + dp->precision_start = cp - 1; + for (; *cp >= '0' && *cp <= '9'; cp++) + ; + dp->precision_end = cp; + precision_length = dp->precision_end - dp->precision_start; + if (max_precision_length < precision_length) + max_precision_length = precision_length; + } + } + + { + arg_type type; + + /* Parse argument type/size specifiers. */ + { + int flags = 0; + + for (;;) + { + if (*cp == 'h') + { + flags |= (1 << (flags & 1)); + cp++; + } + else if (*cp == 'L') + { + flags |= 4; + cp++; + } + else if (*cp == 'l') + { + flags += 8; + cp++; + } + else if (*cp == 'j') + { + if (sizeof (intmax_t) > sizeof (long)) + { + /* intmax_t = long long */ + flags += 16; + } + else if (sizeof (intmax_t) > sizeof (int)) + { + /* intmax_t = long */ + flags += 8; + } + cp++; + } + else if (*cp == 'z' || *cp == 'Z') + { + /* 'z' is standardized in ISO C 99, but glibc uses 'Z' + because the warning facility in gcc-2.95.2 understands + only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */ + if (sizeof (size_t) > sizeof (long)) + { + /* size_t = long long */ + flags += 16; + } + else if (sizeof (size_t) > sizeof (int)) + { + /* size_t = long */ + flags += 8; + } + cp++; + } + else if (*cp == 't') + { + if (sizeof (ptrdiff_t) > sizeof (long)) + { + /* ptrdiff_t = long long */ + flags += 16; + } + else if (sizeof (ptrdiff_t) > sizeof (int)) + { + /* ptrdiff_t = long */ + flags += 8; + } + cp++; + } +#if defined __APPLE__ && defined __MACH__ + /* On Mac OS X 10.3, PRIdMAX is defined as "qd". + We cannot change it to "lld" because PRIdMAX must also + be understood by the system's printf routines. */ + else if (*cp == 'q') + { + if (64 / 8 > sizeof (long)) + { + /* int64_t = long long */ + flags += 16; + } + else + { + /* int64_t = long */ + flags += 8; + } + cp++; + } +#endif +#if defined _WIN32 && ! defined __CYGWIN__ + /* On native Windows, PRIdMAX is defined as "I64d". + We cannot change it to "lld" because PRIdMAX must also + be understood by the system's printf routines. */ + else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4') + { + if (64 / 8 > sizeof (long)) + { + /* __int64 = long long */ + flags += 16; + } + else + { + /* __int64 = long */ + flags += 8; + } + cp += 3; + } +#endif + else + break; + } + + /* Read the conversion character. */ + c = *cp++; + switch (c) + { + case 'd': case 'i': +#if HAVE_LONG_LONG_INT + /* If 'long long' exists and is larger than 'long': */ + if (flags >= 16 || (flags & 4)) + type = TYPE_LONGLONGINT; + else +#endif + /* If 'long long' exists and is the same as 'long', we parse + "lld" into TYPE_LONGINT. */ + if (flags >= 8) + type = TYPE_LONGINT; + else if (flags & 2) + type = TYPE_SCHAR; + else if (flags & 1) + type = TYPE_SHORT; + else + type = TYPE_INT; + break; + case 'o': case 'u': case 'x': case 'X': +#if HAVE_LONG_LONG_INT + /* If 'long long' exists and is larger than 'long': */ + if (flags >= 16 || (flags & 4)) + type = TYPE_ULONGLONGINT; + else +#endif + /* If 'unsigned long long' exists and is the same as + 'unsigned long', we parse "llu" into TYPE_ULONGINT. */ + if (flags >= 8) + type = TYPE_ULONGINT; + else if (flags & 2) + type = TYPE_UCHAR; + else if (flags & 1) + type = TYPE_USHORT; + else + type = TYPE_UINT; + break; + case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': + case 'a': case 'A': + if (flags >= 16 || (flags & 4)) + type = TYPE_LONGDOUBLE; + else + type = TYPE_DOUBLE; + break; + case 'c': + if (flags >= 8) +#if HAVE_WINT_T + type = TYPE_WIDE_CHAR; +#else + goto error; +#endif + else + type = TYPE_CHAR; + break; +#if HAVE_WINT_T + case 'C': + type = TYPE_WIDE_CHAR; + c = 'c'; + break; +#endif + case 's': + if (flags >= 8) +#if HAVE_WCHAR_T + type = TYPE_WIDE_STRING; +#else + goto error; +#endif + else + type = TYPE_STRING; + break; +#if HAVE_WCHAR_T + case 'S': + type = TYPE_WIDE_STRING; + c = 's'; + break; +#endif + case 'p': + type = TYPE_POINTER; + break; + case 'n': +#if HAVE_LONG_LONG_INT + /* If 'long long' exists and is larger than 'long': */ + if (flags >= 16 || (flags & 4)) + type = TYPE_COUNT_LONGLONGINT_POINTER; + else +#endif + /* If 'long long' exists and is the same as 'long', we parse + "lln" into TYPE_COUNT_LONGINT_POINTER. */ + if (flags >= 8) + type = TYPE_COUNT_LONGINT_POINTER; + else if (flags & 2) + type = TYPE_COUNT_SCHAR_POINTER; + else if (flags & 1) + type = TYPE_COUNT_SHORT_POINTER; + else + type = TYPE_COUNT_INT_POINTER; + break; +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + case 'U': + if (flags >= 16) + type = TYPE_U32_STRING; + else if (flags >= 8) + type = TYPE_U16_STRING; + else + type = TYPE_U8_STRING; + break; +#endif + case '%': + type = TYPE_NONE; + break; + default: + /* Unknown conversion character. */ + goto error; + } + } + + if (type != TYPE_NONE) + { + dp->arg_index = arg_index; + if (dp->arg_index == ARG_NONE) + { + dp->arg_index = arg_posn++; + if (dp->arg_index == ARG_NONE) + /* arg_posn wrapped around. */ + goto error; + } + REGISTER_ARG (dp->arg_index, type); + } + dp->conversion = c; + dp->dir_end = cp; + } + + d->count++; + if (d->count >= d_allocated) + { + size_t memory_size; + DIRECTIVE *memory; + + d_allocated = xtimes (d_allocated, 2); + memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); + if (size_overflow_p (memory_size)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + memory = (DIRECTIVE *) (d->dir != d->direct_alloc_dir + ? realloc (d->dir, memory_size) + : malloc (memory_size)); + if (memory == NULL) + /* Out of memory. */ + goto out_of_memory; + if (d->dir == d->direct_alloc_dir) + memcpy (memory, d->dir, d->count * sizeof (DIRECTIVE)); + d->dir = memory; + } + } +#if CHAR_T_ONLY_ASCII + else if (!c_isascii (c)) + { + /* Non-ASCII character. Not supported. */ + goto error; + } +#endif + } + d->dir[d->count].dir_start = cp; + + d->max_width_length = max_width_length; + d->max_precision_length = max_precision_length; + return 0; + +error: + if (a->arg != a->direct_alloc_arg) + free (a->arg); + if (d->dir != d->direct_alloc_dir) + free (d->dir); + errno = EINVAL; + return -1; + +out_of_memory: + if (a->arg != a->direct_alloc_arg) + free (a->arg); + if (d->dir != d->direct_alloc_dir) + free (d->dir); + errno = ENOMEM; + return -1; +} + +#undef PRINTF_PARSE +#undef DIRECTIVES +#undef DIRECTIVE +#undef CHAR_T_ONLY_ASCII +#undef CHAR_T diff --git a/devspec.en_US/project/recutils/lib/printf-parse.h b/devspec.en_US/project/recutils/lib/printf-parse.h new file mode 100755 index 0000000..746bb3f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/printf-parse.h @@ -0,0 +1,193 @@ +/* Parse printf format string. + Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2019 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _PRINTF_PARSE_H +#define _PRINTF_PARSE_H + +/* This file can be parametrized with the following macros: + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. + STATIC Set to 'static' to declare the function static. */ + +#if HAVE_FEATURES_H +# include <features.h> /* for __GLIBC__, __UCLIBC__ */ +#endif + +#include "printf-args.h" + + +/* Flags */ +#define FLAG_GROUP 1 /* ' flag */ +#define FLAG_LEFT 2 /* - flag */ +#define FLAG_SHOWSIGN 4 /* + flag */ +#define FLAG_SPACE 8 /* space flag */ +#define FLAG_ALT 16 /* # flag */ +#define FLAG_ZERO 32 +#if __GLIBC__ >= 2 && !defined __UCLIBC__ +# define FLAG_LOCALIZED 64 /* I flag, uses localized digits */ +#endif + +/* arg_index value indicating that no argument is consumed. */ +#define ARG_NONE (~(size_t)0) + +/* xxx_directive: A parsed directive. + xxx_directives: A parsed format string. */ + +/* Number of directly allocated directives (no malloc() needed). */ +#define N_DIRECT_ALLOC_DIRECTIVES 7 + +/* A parsed directive. */ +typedef struct +{ + const char* dir_start; + const char* dir_end; + int flags; + const char* width_start; + const char* width_end; + size_t width_arg_index; + const char* precision_start; + const char* precision_end; + size_t precision_arg_index; + char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +char_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + char_directive *dir; + size_t max_width_length; + size_t max_precision_length; + char_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; +} +char_directives; + +#if ENABLE_UNISTDIO + +/* A parsed directive. */ +typedef struct +{ + const uint8_t* dir_start; + const uint8_t* dir_end; + int flags; + const uint8_t* width_start; + const uint8_t* width_end; + size_t width_arg_index; + const uint8_t* precision_start; + const uint8_t* precision_end; + size_t precision_arg_index; + uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u8_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u8_directive *dir; + size_t max_width_length; + size_t max_precision_length; + u8_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; +} +u8_directives; + +/* A parsed directive. */ +typedef struct +{ + const uint16_t* dir_start; + const uint16_t* dir_end; + int flags; + const uint16_t* width_start; + const uint16_t* width_end; + size_t width_arg_index; + const uint16_t* precision_start; + const uint16_t* precision_end; + size_t precision_arg_index; + uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u16_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u16_directive *dir; + size_t max_width_length; + size_t max_precision_length; + u16_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; +} +u16_directives; + +/* A parsed directive. */ +typedef struct +{ + const uint32_t* dir_start; + const uint32_t* dir_end; + int flags; + const uint32_t* width_start; + const uint32_t* width_end; + size_t width_arg_index; + const uint32_t* precision_start; + const uint32_t* precision_end; + size_t precision_arg_index; + uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u32_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u32_directive *dir; + size_t max_width_length; + size_t max_precision_length; + u32_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; +} +u32_directives; + +#endif + + +/* Parses the format string. Fills in the number N of directives, and fills + in directives[0], ..., directives[N-1], and sets directives[N].dir_start + to the end of the format string. Also fills in the arg_type fields of the + arguments and the needed count of arguments. */ +#if ENABLE_UNISTDIO +extern int + ulc_printf_parse (const char *format, char_directives *d, arguments *a); +extern int + u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a); +extern int + u16_printf_parse (const uint16_t *format, u16_directives *d, + arguments *a); +extern int + u32_printf_parse (const uint32_t *format, u32_directives *d, + arguments *a); +#else +# ifdef STATIC +STATIC +# else +extern +# endif +int printf_parse (const char *format, char_directives *d, arguments *a); +#endif + +#endif /* _PRINTF_PARSE_H */ diff --git a/devspec.en_US/project/recutils/lib/printf.c b/devspec.en_US/project/recutils/lib/printf.c new file mode 100755 index 0000000..e09442c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/printf.c @@ -0,0 +1,40 @@ +/* Formatted output to a stream. + Copyright (C) 2007, 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +/* Specification. */ +#include <stdio.h> + +#include <stdarg.h> + +/* Print formatted output to standard output. + Return string length of formatted string. On error, return a negative + value. */ +int +printf (const char *format, ...) +{ + int retval; + va_list args; + + va_start (args, format); + retval = vfprintf (stdout, format, args); + va_end (args); + + return retval; +} diff --git a/devspec.en_US/project/recutils/lib/progname.c b/devspec.en_US/project/recutils/lib/progname.c new file mode 100755 index 0000000..a42b7fa --- /dev/null +++ b/devspec.en_US/project/recutils/lib/progname.c @@ -0,0 +1,92 @@ +/* Program name management. + Copyright (C) 2001-2003, 2005-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + + +#include <config.h> + +/* Specification. */ +#undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */ +#include "progname.h" + +#include <errno.h> /* get program_invocation_name declaration */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + + +/* String containing name the program is called with. + To be initialized by main(). */ +const char *program_name = NULL; + +/* Set program_name, based on argv[0]. + argv0 must be a string allocated with indefinite extent, and must not be + modified after this call. */ +void +set_program_name (const char *argv0) +{ + /* libtool creates a temporary executable whose name is sometimes prefixed + with "lt-" (depends on the platform). It also makes argv[0] absolute. + But the name of the temporary executable is a detail that should not be + visible to the end user and to the test suite. + Remove this "<dirname>/.libs/" or "<dirname>/.libs/lt-" prefix here. */ + const char *slash; + const char *base; + + /* Sanity check. POSIX requires the invoking process to pass a non-NULL + argv[0]. */ + if (argv0 == NULL) + { + /* It's a bug in the invoking program. Help diagnosing it. */ + fputs ("A NULL argv[0] was passed through an exec system call.\n", + stderr); + abort (); + } + + slash = strrchr (argv0, '/'); + base = (slash != NULL ? slash + 1 : argv0); + if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0) + { + argv0 = base; + if (strncmp (base, "lt-", 3) == 0) + { + argv0 = base + 3; + /* On glibc systems, remove the "lt-" prefix from the variable + program_invocation_short_name. */ +#if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME + program_invocation_short_name = (char *) argv0; +#endif + } + } + + /* But don't strip off a leading <dirname>/ in general, because when the user + runs + /some/hidden/place/bin/cp foo foo + he should get the error message + /some/hidden/place/bin/cp: `foo' and `foo' are the same file + not + cp: `foo' and `foo' are the same file + */ + + program_name = argv0; + + /* On glibc systems, the error() function comes from libc and uses the + variable program_invocation_name, not program_name. So set this variable + as well. */ +#if HAVE_DECL_PROGRAM_INVOCATION_NAME + program_invocation_name = (char *) argv0; +#endif +} diff --git a/devspec.en_US/project/recutils/lib/progname.h b/devspec.en_US/project/recutils/lib/progname.h new file mode 100755 index 0000000..c726e97 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/progname.h @@ -0,0 +1,62 @@ +/* Program name management. + Copyright (C) 2001-2004, 2006, 2009-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _PROGNAME_H +#define _PROGNAME_H + +/* Programs using this file should do the following in main(): + set_program_name (argv[0]); + */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* String containing name the program is called with. */ +extern const char *program_name; + +/* Set program_name, based on argv[0]. + argv0 must be a string allocated with indefinite extent, and must not be + modified after this call. */ +extern void set_program_name (const char *argv0); + +#if ENABLE_RELOCATABLE + +/* Set program_name, based on argv[0], and original installation prefix and + directory, for relocatability. */ +extern void set_program_name_and_installdir (const char *argv0, + const char *orig_installprefix, + const char *orig_installdir); +#undef set_program_name +#define set_program_name(ARG0) \ + set_program_name_and_installdir (ARG0, INSTALLPREFIX, INSTALLDIR) + +/* Return the full pathname of the current executable, based on the earlier + call to set_program_name_and_installdir. Return NULL if unknown. */ +extern char *get_full_program_name (void); + +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _PROGNAME_H */ diff --git a/devspec.en_US/project/recutils/lib/qcopy-acl.c b/devspec.en_US/project/recutils/lib/qcopy-acl.c new file mode 100755 index 0000000..cf75080 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/qcopy-acl.c @@ -0,0 +1,51 @@ +/* Copy access control list from one file to another. -*- coding: utf-8 -*- + + Copyright (C) 2002-2003, 2005-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + + Written by Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ + +#include <config.h> + +#include "acl.h" + +#include "acl-internal.h" + + +/* Copy access control lists from one file to another. If SOURCE_DESC is + a valid file descriptor, use file descriptor operations, else use + filename based operations on SRC_NAME. Likewise for DEST_DESC and + DST_NAME. + If access control lists are not available, fchmod the target file to + MODE. Also sets the non-permission bits of the destination file + (S_ISUID, S_ISGID, S_ISVTX) to those from MODE if any are set. + Return 0 if successful. + Return -2 and set errno for an error relating to the source file. + Return -1 and set errno for an error relating to the destination file. */ + +int +qcopy_acl (const char *src_name, int source_desc, const char *dst_name, + int dest_desc, mode_t mode) +{ + struct permission_context ctx; + int ret; + + ret = get_permissions (src_name, source_desc, mode, &ctx); + if (ret != 0) + return -2; + ret = set_permissions (&ctx, dst_name, dest_desc); + free_permission_context (&ctx); + return ret; +} diff --git a/devspec.en_US/project/recutils/lib/qset-acl.c b/devspec.en_US/project/recutils/lib/qset-acl.c new file mode 100755 index 0000000..f88f3ee --- /dev/null +++ b/devspec.en_US/project/recutils/lib/qset-acl.c @@ -0,0 +1,49 @@ +/* qset-acl.c - set access control list equivalent to a mode + + Copyright (C) 2002-2003, 2005-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + + Written by Paul Eggert and Andreas Gruenbacher, and Bruno Haible. */ + +#include <config.h> + +#define ACL_INTERNAL_INLINE _GL_EXTERN_INLINE + +#include <string.h> +#include "acl.h" + +#include "acl-internal.h" + + +/* Set the access control lists of a file. If DESC is a valid file + descriptor, use file descriptor operations where available, else use + filename based operations on NAME. If access control lists are not + available, fchmod the target file to MODE. Also sets the + non-permission bits of the destination file (S_ISUID, S_ISGID, S_ISVTX) + to those from MODE if any are set. + Return 0 if successful. Return -1 and set errno upon failure. */ + +int +qset_acl (char const *name, int desc, mode_t mode) +{ + struct permission_context ctx; + int ret; + + memset (&ctx, 0, sizeof ctx); + ctx.mode = mode; + ret = set_permissions (&ctx, name, desc); + free_permission_context (&ctx); + return ret; +} diff --git a/devspec.en_US/project/recutils/lib/quote.h b/devspec.en_US/project/recutils/lib/quote.h new file mode 100755 index 0000000..5cef8ff --- /dev/null +++ b/devspec.en_US/project/recutils/lib/quote.h @@ -0,0 +1,46 @@ +/* quote.h - prototypes for quote.c + + Copyright (C) 1998-2001, 2003, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef QUOTE_H_ +# define QUOTE_H_ 1 + +# include <stddef.h> + +/* The quoting options used by quote_n and quote. Its type is incomplete, + so it's useful only in expressions like '"e_quoting_options'. */ +extern struct quoting_options quote_quoting_options; + +/* Return an unambiguous printable representation of ARG (of size + ARGSIZE), allocated in slot N, suitable for diagnostics. If + ARGSIZE is SIZE_MAX, use the string length of the argument for + ARGSIZE. */ +char const *quote_n_mem (int n, char const *arg, size_t argsize); + +/* Return an unambiguous printable representation of ARG (of size + ARGSIZE), suitable for diagnostics. If ARGSIZE is SIZE_MAX, use + the string length of the argument for ARGSIZE. */ +char const *quote_mem (char const *arg, size_t argsize); + +/* Return an unambiguous printable representation of ARG, allocated in + slot N, suitable for diagnostics. */ +char const *quote_n (int n, char const *arg); + +/* Return an unambiguous printable representation of ARG, suitable for + diagnostics. */ +char const *quote (char const *arg); + +#endif /* !QUOTE_H_ */ diff --git a/devspec.en_US/project/recutils/lib/quotearg.c b/devspec.en_US/project/recutils/lib/quotearg.c new file mode 100755 index 0000000..773d53f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/quotearg.c @@ -0,0 +1,1089 @@ +/* quotearg.c - quote arguments for output + + Copyright (C) 1998-2002, 2004-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert <eggert@twinsun.com> */ + +/* Without this pragma, gcc 4.7.0 20111124 mistakenly suggests that + the quoting_options_from_style function might be candidate for + attribute 'pure' */ +#if (__GNUC__ == 4 && 6 <= __GNUC_MINOR__) || 4 < __GNUC__ +# pragma GCC diagnostic ignored "-Wsuggest-attribute=pure" +#endif + +#include <config.h> + +#include "quotearg.h" +#include "quote.h" + +#include "minmax.h" +#include "xalloc.h" +#include "c-strcaseeq.h" +#include "localcharset.h" + +#include <ctype.h> +#include <errno.h> +#include <limits.h> +#include <stdbool.h> +#include <stdint.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> +#include <wctype.h> + +#include "gettext.h" +#define _(msgid) gettext (msgid) +#define N_(msgid) msgid + +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + +#define INT_BITS (sizeof (int) * CHAR_BIT) + +#ifndef FALLTHROUGH +# if __GNUC__ < 7 +# define FALLTHROUGH ((void) 0) +# else +# define FALLTHROUGH __attribute__ ((__fallthrough__)) +# endif +#endif + +struct quoting_options +{ + /* Basic quoting style. */ + enum quoting_style style; + + /* Additional flags. Bitwise combination of enum quoting_flags. */ + int flags; + + /* Quote the characters indicated by this bit vector even if the + quoting style would not normally require them to be quoted. */ + unsigned int quote_these_too[(UCHAR_MAX / INT_BITS) + 1]; + + /* The left quote for custom_quoting_style. */ + char const *left_quote; + + /* The right quote for custom_quoting_style. */ + char const *right_quote; +}; + +/* Names of quoting styles. */ +char const *const quoting_style_args[] = +{ + "literal", + "shell", + "shell-always", + "shell-escape", + "shell-escape-always", + "c", + "c-maybe", + "escape", + "locale", + "clocale", + 0 +}; + +/* Correspondences to quoting style names. */ +enum quoting_style const quoting_style_vals[] = +{ + literal_quoting_style, + shell_quoting_style, + shell_always_quoting_style, + shell_escape_quoting_style, + shell_escape_always_quoting_style, + c_quoting_style, + c_maybe_quoting_style, + escape_quoting_style, + locale_quoting_style, + clocale_quoting_style +}; + +/* The default quoting options. */ +static struct quoting_options default_quoting_options; + +/* Allocate a new set of quoting options, with contents initially identical + to O if O is not null, or to the default if O is null. + It is the caller's responsibility to free the result. */ +struct quoting_options * +clone_quoting_options (struct quoting_options *o) +{ + int e = errno; + struct quoting_options *p = xmemdup (o ? o : &default_quoting_options, + sizeof *o); + errno = e; + return p; +} + +/* Get the value of O's quoting style. If O is null, use the default. */ +enum quoting_style +get_quoting_style (struct quoting_options const *o) +{ + return (o ? o : &default_quoting_options)->style; +} + +/* In O (or in the default if O is null), + set the value of the quoting style to S. */ +void +set_quoting_style (struct quoting_options *o, enum quoting_style s) +{ + (o ? o : &default_quoting_options)->style = s; +} + +/* In O (or in the default if O is null), + set the value of the quoting options for character C to I. + Return the old value. Currently, the only values defined for I are + 0 (the default) and 1 (which means to quote the character even if + it would not otherwise be quoted). */ +int +set_char_quoting (struct quoting_options *o, char c, int i) +{ + unsigned char uc = c; + unsigned int *p = + (o ? o : &default_quoting_options)->quote_these_too + uc / INT_BITS; + int shift = uc % INT_BITS; + int r = (*p >> shift) & 1; + *p ^= ((i & 1) ^ r) << shift; + return r; +} + +/* In O (or in the default if O is null), + set the value of the quoting options flag to I, which can be a + bitwise combination of enum quoting_flags, or 0 for default + behavior. Return the old value. */ +int +set_quoting_flags (struct quoting_options *o, int i) +{ + int r; + if (!o) + o = &default_quoting_options; + r = o->flags; + o->flags = i; + return r; +} + +void +set_custom_quoting (struct quoting_options *o, + char const *left_quote, char const *right_quote) +{ + if (!o) + o = &default_quoting_options; + o->style = custom_quoting_style; + if (!left_quote || !right_quote) + abort (); + o->left_quote = left_quote; + o->right_quote = right_quote; +} + +/* Return quoting options for STYLE, with no extra quoting. */ +static struct quoting_options /* NOT PURE!! */ +quoting_options_from_style (enum quoting_style style) +{ + struct quoting_options o = { literal_quoting_style, 0, { 0 }, NULL, NULL }; + if (style == custom_quoting_style) + abort (); + o.style = style; + return o; +} + +/* MSGID approximates a quotation mark. Return its translation if it + has one; otherwise, return either it or "\"", depending on S. + + S is either clocale_quoting_style or locale_quoting_style. */ +static char const * +gettext_quote (char const *msgid, enum quoting_style s) +{ + char const *translation = _(msgid); + char const *locale_code; + + if (translation != msgid) + return translation; + + /* For UTF-8 and GB-18030, use single quotes U+2018 and U+2019. + Here is a list of other locales that include U+2018 and U+2019: + + ISO-8859-7 0xA1 KOI8-T 0x91 + CP869 0x8B CP874 0x91 + CP932 0x81 0x65 CP936 0xA1 0xAE + CP949 0xA1 0xAE CP950 0xA1 0xA5 + CP1250 0x91 CP1251 0x91 + CP1252 0x91 CP1253 0x91 + CP1254 0x91 CP1255 0x91 + CP1256 0x91 CP1257 0x91 + EUC-JP 0xA1 0xC6 EUC-KR 0xA1 0xAE + EUC-TW 0xA1 0xE4 BIG5 0xA1 0xA5 + BIG5-HKSCS 0xA1 0xA5 EUC-CN 0xA1 0xAE + GBK 0xA1 0xAE Georgian-PS 0x91 + PT154 0x91 + + None of these is still in wide use; using iconv is overkill. */ + locale_code = locale_charset (); + if (STRCASEEQ (locale_code, "UTF-8", 'U','T','F','-','8',0,0,0,0)) + return msgid[0] == '`' ? "\xe2\x80\x98": "\xe2\x80\x99"; + if (STRCASEEQ (locale_code, "GB18030", 'G','B','1','8','0','3','0',0,0)) + return msgid[0] == '`' ? "\xa1\ae": "\xa1\xaf"; + + return (s == clocale_quoting_style ? "\"" : "'"); +} + +/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of + argument ARG (of size ARGSIZE), using QUOTING_STYLE, FLAGS, and + QUOTE_THESE_TOO to control quoting. + Terminate the output with a null character, and return the written + size of the output, not counting the terminating null. + If BUFFERSIZE is too small to store the output string, return the + value that would have been returned had BUFFERSIZE been large enough. + If ARGSIZE is SIZE_MAX, use the string length of the argument for ARGSIZE. + + This function acts like quotearg_buffer (BUFFER, BUFFERSIZE, ARG, + ARGSIZE, O), except it breaks O into its component pieces and is + not careful about errno. */ + +static size_t +quotearg_buffer_restyled (char *buffer, size_t buffersize, + char const *arg, size_t argsize, + enum quoting_style quoting_style, int flags, + unsigned int const *quote_these_too, + char const *left_quote, + char const *right_quote) +{ + size_t i; + size_t len = 0; + size_t orig_buffersize = 0; + char const *quote_string = 0; + size_t quote_string_len = 0; + bool backslash_escapes = false; + bool unibyte_locale = MB_CUR_MAX == 1; + bool elide_outer_quotes = (flags & QA_ELIDE_OUTER_QUOTES) != 0; + bool pending_shell_escape_end = false; + bool encountered_single_quote = false; + bool all_c_and_shell_quote_compat = true; + +#define STORE(c) \ + do \ + { \ + if (len < buffersize) \ + buffer[len] = (c); \ + len++; \ + } \ + while (0) + +#define START_ESC() \ + do \ + { \ + if (elide_outer_quotes) \ + goto force_outer_quoting_style; \ + escaping = true; \ + if (quoting_style == shell_always_quoting_style \ + && ! pending_shell_escape_end) \ + { \ + STORE ('\''); \ + STORE ('$'); \ + STORE ('\''); \ + pending_shell_escape_end = true; \ + } \ + STORE ('\\'); \ + } \ + while (0) + +#define END_ESC() \ + do \ + { \ + if (pending_shell_escape_end && ! escaping) \ + { \ + STORE ('\''); \ + STORE ('\''); \ + pending_shell_escape_end = false; \ + } \ + } \ + while (0) + + process_input: + + switch (quoting_style) + { + case c_maybe_quoting_style: + quoting_style = c_quoting_style; + elide_outer_quotes = true; + FALLTHROUGH; + case c_quoting_style: + if (!elide_outer_quotes) + STORE ('"'); + backslash_escapes = true; + quote_string = "\""; + quote_string_len = 1; + break; + + case escape_quoting_style: + backslash_escapes = true; + elide_outer_quotes = false; + break; + + case locale_quoting_style: + case clocale_quoting_style: + case custom_quoting_style: + { + if (quoting_style != custom_quoting_style) + { + /* TRANSLATORS: + Get translations for open and closing quotation marks. + The message catalog should translate "`" to a left + quotation mark suitable for the locale, and similarly for + "'". For example, a French Unicode local should translate + these to U+00AB (LEFT-POINTING DOUBLE ANGLE + QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE + QUOTATION MARK), respectively. + + If the catalog has no translation, we will try to + use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and + Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the + current locale is not Unicode, locale_quoting_style + will quote 'like this', and clocale_quoting_style will + quote "like this". You should always include translations + for "`" and "'" even if U+2018 and U+2019 are appropriate + for your locale. + + If you don't know what to put here, please see + <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> + and use glyphs suitable for your language. */ + left_quote = gettext_quote (N_("`"), quoting_style); + right_quote = gettext_quote (N_("'"), quoting_style); + } + if (!elide_outer_quotes) + for (quote_string = left_quote; *quote_string; quote_string++) + STORE (*quote_string); + backslash_escapes = true; + quote_string = right_quote; + quote_string_len = strlen (quote_string); + } + break; + + case shell_escape_quoting_style: + backslash_escapes = true; + FALLTHROUGH; + case shell_quoting_style: + elide_outer_quotes = true; + FALLTHROUGH; + case shell_escape_always_quoting_style: + if (!elide_outer_quotes) + backslash_escapes = true; + FALLTHROUGH; + case shell_always_quoting_style: + quoting_style = shell_always_quoting_style; + if (!elide_outer_quotes) + STORE ('\''); + quote_string = "'"; + quote_string_len = 1; + break; + + case literal_quoting_style: + elide_outer_quotes = false; + break; + + default: + abort (); + } + + for (i = 0; ! (argsize == SIZE_MAX ? arg[i] == '\0' : i == argsize); i++) + { + unsigned char c; + unsigned char esc; + bool is_right_quote = false; + bool escaping = false; + bool c_and_shell_quote_compat = false; + + if (backslash_escapes + && quoting_style != shell_always_quoting_style + && quote_string_len + && (i + quote_string_len + <= (argsize == SIZE_MAX && 1 < quote_string_len + /* Use strlen only if we must: when argsize is SIZE_MAX, + and when the quote string is more than 1 byte long. + If we do call strlen, save the result. */ + ? (argsize = strlen (arg)) : argsize)) + && memcmp (arg + i, quote_string, quote_string_len) == 0) + { + if (elide_outer_quotes) + goto force_outer_quoting_style; + is_right_quote = true; + } + + c = arg[i]; + switch (c) + { + case '\0': + if (backslash_escapes) + { + START_ESC (); + /* If quote_string were to begin with digits, we'd need to + test for the end of the arg as well. However, it's + hard to imagine any locale that would use digits in + quotes, and set_custom_quoting is documented not to + accept them. Use only a single \0 with shell-escape + as currently digits are not printed within $'...' */ + if (quoting_style != shell_always_quoting_style + && i + 1 < argsize && '0' <= arg[i + 1] && arg[i + 1] <= '9') + { + STORE ('0'); + STORE ('0'); + } + c = '0'; + /* We don't have to worry that this last '0' will be + backslash-escaped because, again, quote_string should + not start with it and because quote_these_too is + documented as not accepting it. */ + } + else if (flags & QA_ELIDE_NULL_BYTES) + continue; + break; + + case '?': + switch (quoting_style) + { + case shell_always_quoting_style: + if (elide_outer_quotes) + goto force_outer_quoting_style; + break; + + case c_quoting_style: + if ((flags & QA_SPLIT_TRIGRAPHS) + && i + 2 < argsize && arg[i + 1] == '?') + switch (arg[i + 2]) + { + case '!': case '\'': + case '(': case ')': case '-': case '/': + case '<': case '=': case '>': + /* Escape the second '?' in what would otherwise be + a trigraph. */ + if (elide_outer_quotes) + goto force_outer_quoting_style; + c = arg[i + 2]; + i += 2; + STORE ('?'); + STORE ('"'); + STORE ('"'); + STORE ('?'); + break; + + default: + break; + } + break; + + default: + break; + } + break; + + case '\a': esc = 'a'; goto c_escape; + case '\b': esc = 'b'; goto c_escape; + case '\f': esc = 'f'; goto c_escape; + case '\n': esc = 'n'; goto c_and_shell_escape; + case '\r': esc = 'r'; goto c_and_shell_escape; + case '\t': esc = 't'; goto c_and_shell_escape; + case '\v': esc = 'v'; goto c_escape; + case '\\': esc = c; + /* Never need to escape '\' in shell case. */ + if (quoting_style == shell_always_quoting_style) + { + if (elide_outer_quotes) + goto force_outer_quoting_style; + goto store_c; + } + + /* No need to escape the escape if we are trying to elide + outer quotes and nothing else is problematic. */ + if (backslash_escapes && elide_outer_quotes && quote_string_len) + goto store_c; + + c_and_shell_escape: + if (quoting_style == shell_always_quoting_style + && elide_outer_quotes) + goto force_outer_quoting_style; + /* fall through */ + c_escape: + if (backslash_escapes) + { + c = esc; + goto store_escape; + } + break; + + case '{': case '}': /* sometimes special if isolated */ + if (! (argsize == SIZE_MAX ? arg[1] == '\0' : argsize == 1)) + break; + FALLTHROUGH; + case '#': case '~': + if (i != 0) + break; + FALLTHROUGH; + case ' ': + c_and_shell_quote_compat = true; + FALLTHROUGH; + case '!': /* special in bash */ + case '"': case '$': case '&': + case '(': case ')': case '*': case ';': + case '<': + case '=': /* sometimes special in 0th or (with "set -k") later args */ + case '>': case '[': + case '^': /* special in old /bin/sh, e.g. SunOS 4.1.4 */ + case '`': case '|': + /* A shell special character. In theory, '$' and '`' could + be the first bytes of multibyte characters, which means + we should check them with mbrtowc, but in practice this + doesn't happen so it's not worth worrying about. */ + if (quoting_style == shell_always_quoting_style + && elide_outer_quotes) + goto force_outer_quoting_style; + break; + + case '\'': + encountered_single_quote = true; + c_and_shell_quote_compat = true; + if (quoting_style == shell_always_quoting_style) + { + if (elide_outer_quotes) + goto force_outer_quoting_style; + + if (buffersize && ! orig_buffersize) + { + /* Just scan string to see if supports a more concise + representation, rather than writing a longer string + but returning the length of the more concise form. */ + orig_buffersize = buffersize; + buffersize = 0; + } + + STORE ('\''); + STORE ('\\'); + STORE ('\''); + pending_shell_escape_end = false; + } + break; + + case '%': case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': case ':': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': case ']': case '_': case 'a': case 'b': + case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': + case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': + case 'o': case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': + /* These characters don't cause problems, no matter what the + quoting style is. They cannot start multibyte sequences. + A digit or a special letter would cause trouble if it + appeared at the beginning of quote_string because we'd then + escape by prepending a backslash. However, it's hard to + imagine any locale that would use digits or letters as + quotes, and set_custom_quoting is documented not to accept + them. Also, a digit or a special letter would cause + trouble if it appeared in quote_these_too, but that's also + documented as not accepting them. */ + c_and_shell_quote_compat = true; + break; + + default: + /* If we have a multibyte sequence, copy it until we reach + its end, find an error, or come back to the initial shift + state. For C-like styles, if the sequence has + unprintable characters, escape the whole sequence, since + we can't easily escape single characters within it. */ + { + /* Length of multibyte sequence found so far. */ + size_t m; + + bool printable; + + if (unibyte_locale) + { + m = 1; + printable = isprint (c) != 0; + } + else + { + mbstate_t mbstate; + memset (&mbstate, 0, sizeof mbstate); + + m = 0; + printable = true; + if (argsize == SIZE_MAX) + argsize = strlen (arg); + + do + { + wchar_t w; + size_t bytes = mbrtowc (&w, &arg[i + m], + argsize - (i + m), &mbstate); + if (bytes == 0) + break; + else if (bytes == (size_t) -1) + { + printable = false; + break; + } + else if (bytes == (size_t) -2) + { + printable = false; + while (i + m < argsize && arg[i + m]) + m++; + break; + } + else + { + /* Work around a bug with older shells that "see" a '\' + that is really the 2nd byte of a multibyte character. + In practice the problem is limited to ASCII + chars >= '@' that are shell special chars. */ + if ('[' == 0x5b && elide_outer_quotes + && quoting_style == shell_always_quoting_style) + { + size_t j; + for (j = 1; j < bytes; j++) + switch (arg[i + m + j]) + { + case '[': case '\\': case '^': + case '`': case '|': + goto force_outer_quoting_style; + + default: + break; + } + } + + if (! iswprint (w)) + printable = false; + m += bytes; + } + } + while (! mbsinit (&mbstate)); + } + + c_and_shell_quote_compat = printable; + + if (1 < m || (backslash_escapes && ! printable)) + { + /* Output a multibyte sequence, or an escaped + unprintable unibyte character. */ + size_t ilim = i + m; + + for (;;) + { + if (backslash_escapes && ! printable) + { + START_ESC (); + STORE ('0' + (c >> 6)); + STORE ('0' + ((c >> 3) & 7)); + c = '0' + (c & 7); + } + else if (is_right_quote) + { + STORE ('\\'); + is_right_quote = false; + } + if (ilim <= i + 1) + break; + END_ESC (); + STORE (c); + c = arg[++i]; + } + + goto store_c; + } + } + } + + if (! (((backslash_escapes && quoting_style != shell_always_quoting_style) + || elide_outer_quotes) + && quote_these_too + && quote_these_too[c / INT_BITS] >> (c % INT_BITS) & 1) + && !is_right_quote) + goto store_c; + + store_escape: + START_ESC (); + + store_c: + END_ESC (); + STORE (c); + + if (! c_and_shell_quote_compat) + all_c_and_shell_quote_compat = false; + } + + if (len == 0 && quoting_style == shell_always_quoting_style + && elide_outer_quotes) + goto force_outer_quoting_style; + + /* Single shell quotes (') are commonly enough used as an apostrophe, + that we attempt to minimize the quoting in this case. Note itʼs + better to use the apostrophe modifier "\u02BC" if possible, as that + renders better and works with the word match regex \W+ etc. */ + if (quoting_style == shell_always_quoting_style && ! elide_outer_quotes + && encountered_single_quote) + { + if (all_c_and_shell_quote_compat) + return quotearg_buffer_restyled (buffer, orig_buffersize, arg, argsize, + c_quoting_style, + flags, quote_these_too, + left_quote, right_quote); + else if (! buffersize && orig_buffersize) + { + /* Disable read-only scan, and reprocess to write quoted string. */ + buffersize = orig_buffersize; + len = 0; + goto process_input; + } + } + + if (quote_string && !elide_outer_quotes) + for (; *quote_string; quote_string++) + STORE (*quote_string); + + if (len < buffersize) + buffer[len] = '\0'; + return len; + + force_outer_quoting_style: + /* Don't reuse quote_these_too, since the addition of outer quotes + sufficiently quotes the specified characters. */ + if (quoting_style == shell_always_quoting_style && backslash_escapes) + quoting_style = shell_escape_always_quoting_style; + return quotearg_buffer_restyled (buffer, buffersize, arg, argsize, + quoting_style, + flags & ~QA_ELIDE_OUTER_QUOTES, NULL, + left_quote, right_quote); +} + +/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of + argument ARG (of size ARGSIZE), using O to control quoting. + If O is null, use the default. + Terminate the output with a null character, and return the written + size of the output, not counting the terminating null. + If BUFFERSIZE is too small to store the output string, return the + value that would have been returned had BUFFERSIZE been large enough. + If ARGSIZE is SIZE_MAX, use the string length of the argument for + ARGSIZE. */ +size_t +quotearg_buffer (char *buffer, size_t buffersize, + char const *arg, size_t argsize, + struct quoting_options const *o) +{ + struct quoting_options const *p = o ? o : &default_quoting_options; + int e = errno; + size_t r = quotearg_buffer_restyled (buffer, buffersize, arg, argsize, + p->style, p->flags, p->quote_these_too, + p->left_quote, p->right_quote); + errno = e; + return r; +} + +/* Equivalent to quotearg_alloc (ARG, ARGSIZE, NULL, O). */ +char * +quotearg_alloc (char const *arg, size_t argsize, + struct quoting_options const *o) +{ + return quotearg_alloc_mem (arg, argsize, NULL, o); +} + +/* Like quotearg_buffer (..., ARG, ARGSIZE, O), except return newly + allocated storage containing the quoted string, and store the + resulting size into *SIZE, if non-NULL. The result can contain + embedded null bytes only if ARGSIZE is not SIZE_MAX, SIZE is not + NULL, and set_quoting_flags has not set the null byte elision + flag. */ +char * +quotearg_alloc_mem (char const *arg, size_t argsize, size_t *size, + struct quoting_options const *o) +{ + struct quoting_options const *p = o ? o : &default_quoting_options; + int e = errno; + /* Elide embedded null bytes if we can't return a size. */ + int flags = p->flags | (size ? 0 : QA_ELIDE_NULL_BYTES); + size_t bufsize = quotearg_buffer_restyled (0, 0, arg, argsize, p->style, + flags, p->quote_these_too, + p->left_quote, + p->right_quote) + 1; + char *buf = xcharalloc (bufsize); + quotearg_buffer_restyled (buf, bufsize, arg, argsize, p->style, flags, + p->quote_these_too, + p->left_quote, p->right_quote); + errno = e; + if (size) + *size = bufsize - 1; + return buf; +} + +/* A storage slot with size and pointer to a value. */ +struct slotvec +{ + size_t size; + char *val; +}; + +/* Preallocate a slot 0 buffer, so that the caller can always quote + one small component of a "memory exhausted" message in slot 0. */ +static char slot0[256]; +static int nslots = 1; +static struct slotvec slotvec0 = {sizeof slot0, slot0}; +static struct slotvec *slotvec = &slotvec0; + +void +quotearg_free (void) +{ + struct slotvec *sv = slotvec; + int i; + for (i = 1; i < nslots; i++) + free (sv[i].val); + if (sv[0].val != slot0) + { + free (sv[0].val); + slotvec0.size = sizeof slot0; + slotvec0.val = slot0; + } + if (sv != &slotvec0) + { + free (sv); + slotvec = &slotvec0; + } + nslots = 1; +} + +/* Use storage slot N to return a quoted version of argument ARG. + ARG is of size ARGSIZE, but if that is SIZE_MAX, ARG is a + null-terminated string. + OPTIONS specifies the quoting options. + The returned value points to static storage that can be + reused by the next call to this function with the same value of N. + N must be nonnegative. N is deliberately declared with type "int" + to allow for future extensions (using negative values). */ +static char * +quotearg_n_options (int n, char const *arg, size_t argsize, + struct quoting_options const *options) +{ + int e = errno; + + struct slotvec *sv = slotvec; + + if (n < 0) + abort (); + + if (nslots <= n) + { + bool preallocated = (sv == &slotvec0); + int nmax = MIN (INT_MAX, MIN (PTRDIFF_MAX, SIZE_MAX) / sizeof *sv) - 1; + + if (nmax < n) + xalloc_die (); + + slotvec = sv = xrealloc (preallocated ? NULL : sv, (n + 1) * sizeof *sv); + if (preallocated) + *sv = slotvec0; + memset (sv + nslots, 0, (n + 1 - nslots) * sizeof *sv); + nslots = n + 1; + } + + { + size_t size = sv[n].size; + char *val = sv[n].val; + /* Elide embedded null bytes since we don't return a size. */ + int flags = options->flags | QA_ELIDE_NULL_BYTES; + size_t qsize = quotearg_buffer_restyled (val, size, arg, argsize, + options->style, flags, + options->quote_these_too, + options->left_quote, + options->right_quote); + + if (size <= qsize) + { + sv[n].size = size = qsize + 1; + if (val != slot0) + free (val); + sv[n].val = val = xcharalloc (size); + quotearg_buffer_restyled (val, size, arg, argsize, options->style, + flags, options->quote_these_too, + options->left_quote, + options->right_quote); + } + + errno = e; + return val; + } +} + +char * +quotearg_n (int n, char const *arg) +{ + return quotearg_n_options (n, arg, SIZE_MAX, &default_quoting_options); +} + +char * +quotearg_n_mem (int n, char const *arg, size_t argsize) +{ + return quotearg_n_options (n, arg, argsize, &default_quoting_options); +} + +char * +quotearg (char const *arg) +{ + return quotearg_n (0, arg); +} + +char * +quotearg_mem (char const *arg, size_t argsize) +{ + return quotearg_n_mem (0, arg, argsize); +} + +char * +quotearg_n_style (int n, enum quoting_style s, char const *arg) +{ + struct quoting_options const o = quoting_options_from_style (s); + return quotearg_n_options (n, arg, SIZE_MAX, &o); +} + +char * +quotearg_n_style_mem (int n, enum quoting_style s, + char const *arg, size_t argsize) +{ + struct quoting_options const o = quoting_options_from_style (s); + return quotearg_n_options (n, arg, argsize, &o); +} + +char * +quotearg_style (enum quoting_style s, char const *arg) +{ + return quotearg_n_style (0, s, arg); +} + +char * +quotearg_style_mem (enum quoting_style s, char const *arg, size_t argsize) +{ + return quotearg_n_style_mem (0, s, arg, argsize); +} + +char * +quotearg_char_mem (char const *arg, size_t argsize, char ch) +{ + struct quoting_options options; + options = default_quoting_options; + set_char_quoting (&options, ch, 1); + return quotearg_n_options (0, arg, argsize, &options); +} + +char * +quotearg_char (char const *arg, char ch) +{ + return quotearg_char_mem (arg, SIZE_MAX, ch); +} + +char * +quotearg_colon (char const *arg) +{ + return quotearg_char (arg, ':'); +} + +char * +quotearg_colon_mem (char const *arg, size_t argsize) +{ + return quotearg_char_mem (arg, argsize, ':'); +} + +char * +quotearg_n_style_colon (int n, enum quoting_style s, char const *arg) +{ + struct quoting_options options; + options = quoting_options_from_style (s); + set_char_quoting (&options, ':', 1); + return quotearg_n_options (n, arg, SIZE_MAX, &options); +} + +char * +quotearg_n_custom (int n, char const *left_quote, + char const *right_quote, char const *arg) +{ + return quotearg_n_custom_mem (n, left_quote, right_quote, arg, + SIZE_MAX); +} + +char * +quotearg_n_custom_mem (int n, char const *left_quote, + char const *right_quote, + char const *arg, size_t argsize) +{ + struct quoting_options o = default_quoting_options; + set_custom_quoting (&o, left_quote, right_quote); + return quotearg_n_options (n, arg, argsize, &o); +} + +char * +quotearg_custom (char const *left_quote, char const *right_quote, + char const *arg) +{ + return quotearg_n_custom (0, left_quote, right_quote, arg); +} + +char * +quotearg_custom_mem (char const *left_quote, char const *right_quote, + char const *arg, size_t argsize) +{ + return quotearg_n_custom_mem (0, left_quote, right_quote, arg, + argsize); +} + + +/* The quoting option used by the functions of quote.h. */ +struct quoting_options quote_quoting_options = + { + locale_quoting_style, + 0, + { 0 }, + NULL, NULL + }; + +char const * +quote_n_mem (int n, char const *arg, size_t argsize) +{ + return quotearg_n_options (n, arg, argsize, "e_quoting_options); +} + +char const * +quote_mem (char const *arg, size_t argsize) +{ + return quote_n_mem (0, arg, argsize); +} + +char const * +quote_n (int n, char const *arg) +{ + return quote_n_mem (n, arg, SIZE_MAX); +} + +char const * +quote (char const *arg) +{ + return quote_n (0, arg); +} + +/* + * Hey Emacs! + * Local Variables: + * coding: utf-8 + * End: + */ diff --git a/devspec.en_US/project/recutils/lib/quotearg.h b/devspec.en_US/project/recutils/lib/quotearg.h new file mode 100755 index 0000000..0f07e02 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/quotearg.h @@ -0,0 +1,425 @@ +/* quotearg.h - quote arguments for output + + Copyright (C) 1998-2002, 2004, 2006, 2008-2019 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert <eggert@twinsun.com> */ + +#ifndef QUOTEARG_H_ +# define QUOTEARG_H_ 1 + +# include <stddef.h> + +/* Basic quoting styles. For each style, an example is given on the + input strings "simple", "\0 \t\n'\"\033?""?/\\", and "a:b", using + quotearg_buffer, quotearg_mem, and quotearg_colon_mem with that + style and the default flags and quoted characters. Note that the + examples are shown here as valid C strings rather than what + displays on a terminal (with "??/" as a trigraph for "\\"). */ +enum quoting_style + { + /* Output names as-is (ls --quoting-style=literal). Can result in + embedded null bytes if QA_ELIDE_NULL_BYTES is not in + effect. + + quotearg_buffer: + "simple", "\0 \t\n'\"\033??/\\", "a:b" + quotearg: + "simple", " \t\n'\"\033??/\\", "a:b" + quotearg_colon: + "simple", " \t\n'\"\033??/\\", "a:b" + */ + literal_quoting_style, + + /* Quote names for the shell if they contain shell metacharacters + or would cause ambiguous output (ls --quoting-style=shell). + Can result in embedded null bytes if QA_ELIDE_NULL_BYTES is not + in effect. + + quotearg_buffer: + "simple", "'\0 \t\n'\\''\"\033??/\\'", "a:b" + quotearg: + "simple", "' \t\n'\\''\"\033??/\\'", "a:b" + quotearg_colon: + "simple", "' \t\n'\\''\"\033??/\\'", "'a:b'" + */ + shell_quoting_style, + + /* Quote names for the shell, even if they would normally not + require quoting (ls --quoting-style=shell-always). Can result + in embedded null bytes if QA_ELIDE_NULL_BYTES is not in effect. + Behaves like shell_quoting_style if QA_ELIDE_OUTER_QUOTES is in + effect. + + quotearg_buffer: + "'simple'", "'\0 \t\n'\\''\"\033??/\\'", "'a:b'" + quotearg: + "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'" + quotearg_colon: + "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'" + */ + shell_always_quoting_style, + + /* Quote names for the shell if they contain shell metacharacters + or other problematic characters (ls --quoting-style=shell-escape). + Non printable characters are quoted using the $'...' syntax, + which originated in ksh93 and is widely supported by most shells, + and proposed for inclusion in POSIX. + + quotearg_buffer: + "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\\'", "a:b" + quotearg: + "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\\'", "a:b" + quotearg_colon: + "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\\'", "'a:b'" + */ + shell_escape_quoting_style, + + /* Quote names for the shell even if they would normally not + require quoting (ls --quoting-style=shell-escape). + Non printable characters are quoted using the $'...' syntax, + which originated in ksh93 and is widely supported by most shells, + and proposed for inclusion in POSIX. Behaves like + shell_escape_quoting_style if QA_ELIDE_OUTER_QUOTES is in effect. + + quotearg_buffer: + "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\'", "a:b" + quotearg: + "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\'", "a:b" + quotearg_colon: + "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\'", "'a:b'" + */ + shell_escape_always_quoting_style, + + /* Quote names as for a C language string (ls --quoting-style=c). + Behaves like c_maybe_quoting_style if QA_ELIDE_OUTER_QUOTES is + in effect. Split into consecutive strings if + QA_SPLIT_TRIGRAPHS. + + quotearg_buffer: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" + quotearg: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" + quotearg_colon: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\"" + */ + c_quoting_style, + + /* Like c_quoting_style except omit the surrounding double-quote + characters if no quoted characters are encountered. + + quotearg_buffer: + "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b" + quotearg: + "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b" + quotearg_colon: + "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" + */ + c_maybe_quoting_style, + + /* Like c_quoting_style except always omit the surrounding + double-quote characters and ignore QA_SPLIT_TRIGRAPHS + (ls --quoting-style=escape). + + quotearg_buffer: + "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b" + quotearg: + "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b" + quotearg_colon: + "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a\\:b" + */ + escape_quoting_style, + + /* Like clocale_quoting_style, but use single quotes in the + default C locale or if the program does not use gettext + (ls --quoting-style=locale). For UTF-8 locales, quote + characters will use Unicode. + + LC_MESSAGES=C + quotearg_buffer: + "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a:b'" + quotearg: + "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a:b'" + quotearg_colon: + "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a\\:b'" + + LC_MESSAGES=pt_PT.utf8 + quotearg_buffer: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" + quotearg: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" + quotearg_colon: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273" + */ + locale_quoting_style, + + /* Like c_quoting_style except use quotation marks appropriate for + the locale and ignore QA_SPLIT_TRIGRAPHS + (ls --quoting-style=clocale). + + LC_MESSAGES=C + quotearg_buffer: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" + quotearg: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" + quotearg_colon: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\"" + + LC_MESSAGES=pt_PT.utf8 + quotearg_buffer: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" + quotearg: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" + quotearg_colon: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273" + */ + clocale_quoting_style, + + /* Like clocale_quoting_style except use the custom quotation marks + set by set_custom_quoting. If custom quotation marks are not + set, the behavior is undefined. + + left_quote = right_quote = "'" + quotearg_buffer: + "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a:b'" + quotearg: + "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a:b'" + quotearg_colon: + "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a\\:b'" + + left_quote = "(" and right_quote = ")" + quotearg_buffer: + "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a:b)" + quotearg: + "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a:b)" + quotearg_colon: + "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a\\:b)" + + left_quote = ":" and right_quote = " " + quotearg_buffer: + ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a:b " + quotearg: + ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a:b " + quotearg_colon: + ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a\\:b " + + left_quote = "\"'" and right_quote = "'\"" + Notice that this is treated as a single level of quotes or two + levels where the outer quote need not be escaped within the inner + quotes. For two levels where the outer quote must be escaped + within the inner quotes, you must use separate quotearg + invocations. + quotearg_buffer: + "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a:b'\"" + quotearg: + "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a:b'\"" + quotearg_colon: + "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a\\:b'\"" + */ + custom_quoting_style + }; + +/* Flags for use in set_quoting_flags. */ +enum quoting_flags + { + /* Always elide null bytes from styles that do not quote them, + even when the length of the result is available to the + caller. */ + QA_ELIDE_NULL_BYTES = 0x01, + + /* Omit the surrounding quote characters if no escaped characters + are encountered. Note that if no other character needs + escaping, then neither does the escape character. */ + QA_ELIDE_OUTER_QUOTES = 0x02, + + /* In the c_quoting_style and c_maybe_quoting_style, split ANSI + trigraph sequences into concatenated strings (for example, + "?""?/" rather than "??/", which could be confused with + "\\"). */ + QA_SPLIT_TRIGRAPHS = 0x04 + }; + +/* For now, --quoting-style=literal is the default, but this may change. */ +# ifndef DEFAULT_QUOTING_STYLE +# define DEFAULT_QUOTING_STYLE literal_quoting_style +# endif + +/* Names of quoting styles and their corresponding values. */ +extern char const *const quoting_style_args[]; +extern enum quoting_style const quoting_style_vals[]; + +struct quoting_options; + +/* The functions listed below set and use a hidden variable + that contains the default quoting style options. */ + +/* Allocate a new set of quoting options, with contents initially identical + to O if O is not null, or to the default if O is null. + It is the caller's responsibility to free the result. */ +struct quoting_options *clone_quoting_options (struct quoting_options *o); + +/* Get the value of O's quoting style. If O is null, use the default. */ +enum quoting_style get_quoting_style (struct quoting_options const *o); + +/* In O (or in the default if O is null), + set the value of the quoting style to S. */ +void set_quoting_style (struct quoting_options *o, enum quoting_style s); + +/* In O (or in the default if O is null), + set the value of the quoting options for character C to I. + Return the old value. Currently, the only values defined for I are + 0 (the default) and 1 (which means to quote the character even if + it would not otherwise be quoted). C must never be a digit or a + letter that has special meaning after a backslash (for example, "\t" + for tab). */ +int set_char_quoting (struct quoting_options *o, char c, int i); + +/* In O (or in the default if O is null), + set the value of the quoting options flag to I, which can be a + bitwise combination of enum quoting_flags, or 0 for default + behavior. Return the old value. */ +int set_quoting_flags (struct quoting_options *o, int i); + +/* In O (or in the default if O is null), + set the value of the quoting style to custom_quoting_style, + set the left quote to LEFT_QUOTE, and set the right quote to + RIGHT_QUOTE. Each of LEFT_QUOTE and RIGHT_QUOTE must be + null-terminated and can be the empty string. Because backslashes are + used for escaping, it does not make sense for RIGHT_QUOTE to contain + a backslash. RIGHT_QUOTE must not begin with a digit or a letter + that has special meaning after a backslash (for example, "\t" for + tab). */ +void set_custom_quoting (struct quoting_options *o, + char const *left_quote, + char const *right_quote); + +/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of + argument ARG (of size ARGSIZE), using O to control quoting. + If O is null, use the default. + Terminate the output with a null character, and return the written + size of the output, not counting the terminating null. + If BUFFERSIZE is too small to store the output string, return the + value that would have been returned had BUFFERSIZE been large enough. + If ARGSIZE is -1, use the string length of the argument for ARGSIZE. + On output, BUFFER might contain embedded null bytes if ARGSIZE was + not -1, the style of O does not use backslash escapes, and the + flags of O do not request elision of null bytes.*/ +size_t quotearg_buffer (char *buffer, size_t buffersize, + char const *arg, size_t argsize, + struct quoting_options const *o); + +/* Like quotearg_buffer, except return the result in a newly allocated + buffer. It is the caller's responsibility to free the result. The + result will not contain embedded null bytes. */ +char *quotearg_alloc (char const *arg, size_t argsize, + struct quoting_options const *o); + +/* Like quotearg_alloc, except that the length of the result, + excluding the terminating null byte, is stored into SIZE if it is + non-NULL. The result might contain embedded null bytes if ARGSIZE + was not -1, SIZE was not NULL, the style of O does not use + backslash escapes, and the flags of O do not request elision of + null bytes.*/ +char *quotearg_alloc_mem (char const *arg, size_t argsize, + size_t *size, struct quoting_options const *o); + +/* Use storage slot N to return a quoted version of the string ARG. + Use the default quoting options. + The returned value points to static storage that can be + reused by the next call to this function with the same value of N. + N must be nonnegative. The output of all functions in the + quotearg_n family are guaranteed to not contain embedded null + bytes.*/ +char *quotearg_n (int n, char const *arg); + +/* Equivalent to quotearg_n (0, ARG). */ +char *quotearg (char const *arg); + +/* Use storage slot N to return a quoted version of the argument ARG + of size ARGSIZE. This is like quotearg_n (N, ARG), except it can + quote null bytes. */ +char *quotearg_n_mem (int n, char const *arg, size_t argsize); + +/* Equivalent to quotearg_n_mem (0, ARG, ARGSIZE). */ +char *quotearg_mem (char const *arg, size_t argsize); + +/* Use style S and storage slot N to return a quoted version of the string ARG. + This is like quotearg_n (N, ARG), except that it uses S with no other + options to specify the quoting method. */ +char *quotearg_n_style (int n, enum quoting_style s, char const *arg); + +/* Use style S and storage slot N to return a quoted version of the + argument ARG of size ARGSIZE. This is like quotearg_n_style + (N, S, ARG), except it can quote null bytes. */ +char *quotearg_n_style_mem (int n, enum quoting_style s, + char const *arg, size_t argsize); + +/* Equivalent to quotearg_n_style (0, S, ARG). */ +char *quotearg_style (enum quoting_style s, char const *arg); + +/* Equivalent to quotearg_n_style_mem (0, S, ARG, ARGSIZE). */ +char *quotearg_style_mem (enum quoting_style s, + char const *arg, size_t argsize); + +/* Like quotearg (ARG), except also quote any instances of CH. + See set_char_quoting for a description of acceptable CH values. */ +char *quotearg_char (char const *arg, char ch); + +/* Like quotearg_char (ARG, CH), except it can quote null bytes. */ +char *quotearg_char_mem (char const *arg, size_t argsize, char ch); + +/* Equivalent to quotearg_char (ARG, ':'). */ +char *quotearg_colon (char const *arg); + +/* Like quotearg_colon (ARG), except it can quote null bytes. */ +char *quotearg_colon_mem (char const *arg, size_t argsize); + +/* Like quotearg_n_style, except with ':' quoting enabled. */ +char *quotearg_n_style_colon (int n, enum quoting_style s, char const *arg); + +/* Like quotearg_n_style (N, S, ARG) but with S as custom_quoting_style + with left quote as LEFT_QUOTE and right quote as RIGHT_QUOTE. See + set_custom_quoting for a description of acceptable LEFT_QUOTE and + RIGHT_QUOTE values. */ +char *quotearg_n_custom (int n, char const *left_quote, + char const *right_quote, char const *arg); + +/* Like quotearg_n_custom (N, LEFT_QUOTE, RIGHT_QUOTE, ARG) except it + can quote null bytes. */ +char *quotearg_n_custom_mem (int n, char const *left_quote, + char const *right_quote, + char const *arg, size_t argsize); + +/* Equivalent to quotearg_n_custom (0, LEFT_QUOTE, RIGHT_QUOTE, ARG). */ +char *quotearg_custom (char const *left_quote, char const *right_quote, + char const *arg); + +/* Equivalent to quotearg_n_custom_mem (0, LEFT_QUOTE, RIGHT_QUOTE, ARG, + ARGSIZE). */ +char *quotearg_custom_mem (char const *left_quote, + char const *right_quote, + char const *arg, size_t argsize); + +/* Free any dynamically allocated memory. */ +void quotearg_free (void); + +#endif /* !QUOTEARG_H_ */ diff --git a/devspec.en_US/project/recutils/lib/raise.c b/devspec.en_US/project/recutils/lib/raise.c new file mode 100755 index 0000000..e750b7a --- /dev/null +++ b/devspec.en_US/project/recutils/lib/raise.c @@ -0,0 +1,83 @@ +/* Provide a non-threads replacement for the POSIX raise function. + + Copyright (C) 2002-2003, 2005-2006, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* written by Jim Meyering and Bruno Haible */ + +#include <config.h> + +/* Specification. */ +#include <signal.h> + +#if HAVE_RAISE +/* Native Windows platform. */ + +# include <errno.h> + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +# endif + +# if HAVE_MSVC_INVALID_PARAMETER_HANDLER +/* Forward declaration. */ +static int raise_nothrow (int sig); +# else +# define raise_nothrow raise +# endif + +#else +/* An old Unix platform. */ + +# include <unistd.h> + +#endif + +int +raise (int sig) +#undef raise +{ +#if GNULIB_defined_signal_blocking && GNULIB_defined_SIGPIPE + if (sig == SIGPIPE) + return _gl_raise_SIGPIPE (); +#endif + +#if HAVE_RAISE + return raise_nothrow (sig); +#else + return kill (getpid (), sig); +#endif +} + +#if HAVE_RAISE && HAVE_MSVC_INVALID_PARAMETER_HANDLER +static int +raise_nothrow (int sig) +{ + int result; + + TRY_MSVC_INVAL + { + result = raise (sig); + } + CATCH_MSVC_INVAL + { + result = -1; + errno = EINVAL; + } + DONE_MSVC_INVAL; + + return result; +} +#endif diff --git a/devspec.en_US/project/recutils/lib/random_r.c b/devspec.en_US/project/recutils/lib/random_r.c new file mode 100755 index 0000000..5f91064 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/random_r.c @@ -0,0 +1,430 @@ +/* + Copyright (C) 1995-2019 Free Software Foundation, Inc. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +/* + Copyright (C) 1983 Regents of the University of California. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE.*/ + +/* + * This is derived from the Berkeley source: + * @(#)random.c 5.5 (Berkeley) 7/6/88 + * It was reworked for the GNU C Library by Roland McGrath. + * Rewritten to be reentrant by Ulrich Drepper, 1995 + */ + +#ifndef _LIBC +/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc + optimizes away the buf == NULL, arg_state == NULL, result == NULL tests + below. */ +# define _GL_ARG_NONNULL(params) + +# include <libc-config.h> +# define __srandom_r srandom_r +# define __initstate_r initstate_r +# define __setstate_r setstate_r +# define __random_r random_r +#endif + +/* Specification. */ +#include <stdlib.h> + +#include <errno.h> +#include <stddef.h> +#include <string.h> + + +/* An improved random number generation package. In addition to the standard + rand()/srand() like interface, this package also has a special state info + interface. The initstate() routine is called with a seed, an array of + bytes, and a count of how many bytes are being passed in; this array is + then initialized to contain information for random number generation with + that much state information. Good sizes for the amount of state + information are 32, 64, 128, and 256 bytes. The state can be switched by + calling the setstate() function with the same array as was initialized + with initstate(). By default, the package runs with 128 bytes of state + information and generates far better random numbers than a linear + congruential generator. If the amount of state information is less than + 32 bytes, a simple linear congruential R.N.G. is used. Internally, the + state information is treated as an array of longs; the zeroth element of + the array is the type of R.N.G. being used (small integer); the remainder + of the array is the state information for the R.N.G. Thus, 32 bytes of + state information will give 7 longs worth of state information, which will + allow a degree seven polynomial. (Note: The zeroth word of state + information also has some other information stored in it; see setstate + for details). The random number generation technique is a linear feedback + shift register approach, employing trinomials (since there are fewer terms + to sum up that way). In this approach, the least significant bit of all + the numbers in the state table will act as a linear feedback shift register, + and will have period 2^deg - 1 (where deg is the degree of the polynomial + being used, assuming that the polynomial is irreducible and primitive). + The higher order bits will have longer periods, since their values are + also influenced by pseudo-random carries out of the lower bits. The + total period of the generator is approximately deg*(2**deg - 1); thus + doubling the amount of state information has a vast influence on the + period of the generator. Note: The deg*(2**deg - 1) is an approximation + only good for large deg, when the period of the shift register is the + dominant factor. With deg equal to seven, the period is actually much + longer than the 7*(2**7 - 1) predicted by this formula. */ + + + +/* For each of the currently supported random number generators, we have a + break value on the amount of state information (you need at least this many + bytes of state info to support this random number generator), a degree for + the polynomial (actually a trinomial) that the R.N.G. is based on, and + separation between the two lower order coefficients of the trinomial. */ + +/* Linear congruential. */ +#define TYPE_0 0 +#define BREAK_0 8 +#define DEG_0 0 +#define SEP_0 0 + +/* x**7 + x**3 + 1. */ +#define TYPE_1 1 +#define BREAK_1 32 +#define DEG_1 7 +#define SEP_1 3 + +/* x**15 + x + 1. */ +#define TYPE_2 2 +#define BREAK_2 64 +#define DEG_2 15 +#define SEP_2 1 + +/* x**31 + x**3 + 1. */ +#define TYPE_3 3 +#define BREAK_3 128 +#define DEG_3 31 +#define SEP_3 3 + +/* x**63 + x + 1. */ +#define TYPE_4 4 +#define BREAK_4 256 +#define DEG_4 63 +#define SEP_4 1 + + +/* Array versions of the above information to make code run faster. + Relies on fact that TYPE_i == i. */ + +#define MAX_TYPES 5 /* Max number of types above. */ + +struct random_poly_info +{ + int seps[MAX_TYPES]; + int degrees[MAX_TYPES]; +}; + +static const struct random_poly_info random_poly_info = +{ + { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 }, + { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 } +}; + +static int32_t +get_int32 (void *p) +{ + int32_t v; + memcpy (&v, p, sizeof v); + return v; +} + +static void +set_int32 (void *p, int32_t v) +{ + memcpy (p, &v, sizeof v); +} + + +/* Initialize the random number generator based on the given seed. If the + type is the trivial no-state-information type, just remember the seed. + Otherwise, initializes state[] based on the given "seed" via a linear + congruential generator. Then, the pointers are set to known locations + that are exactly rand_sep places apart. Lastly, it cycles the state + information a given number of times to get rid of any initial dependencies + introduced by the L.C.R.N.G. Note that the initialization of randtbl[] + for default usage relies on values produced by this routine. */ +int +__srandom_r (unsigned int seed, struct random_data *buf) +{ + int type; + int32_t *state; + long int i; + int32_t word; + int32_t *dst; + int kc; + + if (buf == NULL) + goto fail; + type = buf->rand_type; + if ((unsigned int) type >= MAX_TYPES) + goto fail; + + state = buf->state; + /* We must make sure the seed is not 0. Take arbitrarily 1 in this case. */ + if (seed == 0) + seed = 1; + set_int32 (&state[0], seed); + if (type == TYPE_0) + goto done; + + dst = state; + word = seed; + kc = buf->rand_deg; + for (i = 1; i < kc; ++i) + { + /* This does: + state[i] = (16807 * state[i - 1]) % 2147483647; + but avoids overflowing 31 bits. */ + long int hi = word / 127773; + long int lo = word % 127773; + word = 16807 * lo - 2836 * hi; + if (word < 0) + word += 2147483647; + set_int32 (++dst, word); + } + + buf->fptr = &state[buf->rand_sep]; + buf->rptr = &state[0]; + kc *= 10; + while (--kc >= 0) + { + int32_t discard; + (void) __random_r (buf, &discard); + } + + done: + return 0; + + fail: + return -1; +} + +weak_alias (__srandom_r, srandom_r) + +/* Initialize the state information in the given array of N bytes for + future random number generation. Based on the number of bytes we + are given, and the break values for the different R.N.G.'s, we choose + the best (largest) one we can and set things up for it. srandom is + then called to initialize the state information. Note that on return + from srandom, we set state[-1] to be the type multiplexed with the current + value of the rear pointer; this is so successive calls to initstate won't + lose this information and will be able to restart with setstate. + Note: The first thing we do is save the current state, if any, just like + setstate so that it doesn't matter when initstate is called. + Returns 0 on success, non-zero on failure. */ +int +__initstate_r (unsigned int seed, char *arg_state, size_t n, + struct random_data *buf) +{ + if (buf == NULL) + goto fail; + + int32_t *old_state = buf->state; + if (old_state != NULL) + { + int old_type = buf->rand_type; + set_int32 (&old_state[-1], + (old_type == TYPE_0 + ? TYPE_0 + : (MAX_TYPES * (buf->rptr - old_state)) + old_type)); + } + + int type; + if (n >= BREAK_3) + type = n < BREAK_4 ? TYPE_3 : TYPE_4; + else if (n < BREAK_1) + { + if (n < BREAK_0) + goto fail; + + type = TYPE_0; + } + else + type = n < BREAK_2 ? TYPE_1 : TYPE_2; + + int degree = random_poly_info.degrees[type]; + int separation = random_poly_info.seps[type]; + + buf->rand_type = type; + buf->rand_sep = separation; + buf->rand_deg = degree; + int32_t *state = &((int32_t *) arg_state)[1]; /* First location. */ + /* Must set END_PTR before srandom. */ + buf->end_ptr = &state[degree]; + + buf->state = state; + + __srandom_r (seed, buf); + + set_int32 (&state[-1], + type == TYPE_0 ? TYPE_0 : (buf->rptr - state) * MAX_TYPES + type); + + return 0; + + fail: + __set_errno (EINVAL); + return -1; +} + +weak_alias (__initstate_r, initstate_r) + +/* Restore the state from the given state array. + Note: It is important that we also remember the locations of the pointers + in the current state information, and restore the locations of the pointers + from the old state information. This is done by multiplexing the pointer + location into the zeroth word of the state information. Note that due + to the order in which things are done, it is OK to call setstate with the + same state as the current state + Returns 0 on success, non-zero on failure. */ +int +__setstate_r (char *arg_state, struct random_data *buf) +{ + int32_t *new_state = 1 + (int32_t *) arg_state; + int type; + int old_type; + int32_t *old_state; + int degree; + int separation; + + if (arg_state == NULL || buf == NULL) + goto fail; + + old_type = buf->rand_type; + old_state = buf->state; + set_int32 (&old_state[-1], + (old_type == TYPE_0 + ? TYPE_0 + : (MAX_TYPES * (buf->rptr - old_state)) + old_type)); + + type = get_int32 (&new_state[-1]) % MAX_TYPES; + if (type < TYPE_0 || type > TYPE_4) + goto fail; + + buf->rand_deg = degree = random_poly_info.degrees[type]; + buf->rand_sep = separation = random_poly_info.seps[type]; + buf->rand_type = type; + + if (type != TYPE_0) + { + int rear = get_int32 (&new_state[-1]) / MAX_TYPES; + buf->rptr = &new_state[rear]; + buf->fptr = &new_state[(rear + separation) % degree]; + } + buf->state = new_state; + /* Set end_ptr too. */ + buf->end_ptr = &new_state[degree]; + + return 0; + + fail: + __set_errno (EINVAL); + return -1; +} + +weak_alias (__setstate_r, setstate_r) + +/* If we are using the trivial TYPE_0 R.N.G., just do the old linear + congruential bit. Otherwise, we do our fancy trinomial stuff, which is the + same in all the other cases due to all the global variables that have been + set up. The basic operation is to add the number at the rear pointer into + the one at the front pointer. Then both pointers are advanced to the next + location cyclically in the table. The value returned is the sum generated, + reduced to 31 bits by throwing away the "least random" low bit. + Note: The code takes advantage of the fact that both the front and + rear pointers can't wrap on the same call by not testing the rear + pointer if the front one has wrapped. Returns a 31-bit random number. */ + +int +__random_r (struct random_data *buf, int32_t *result) +{ + int32_t *state; + + if (buf == NULL || result == NULL) + goto fail; + + state = buf->state; + + if (buf->rand_type == TYPE_0) + { + int32_t val = (((get_int32 (&state[0]) * 1103515245U) + 12345U) + & 0x7fffffff); + set_int32 (&state[0], val); + *result = val; + } + else + { + int32_t *fptr = buf->fptr; + int32_t *rptr = buf->rptr; + int32_t *end_ptr = buf->end_ptr; + /* F and R are unsigned int, not uint32_t, to avoid undefined + overflow behavior on platforms where INT_MAX == UINT32_MAX. */ + unsigned int f = get_int32 (fptr); + unsigned int r = get_int32 (rptr); + uint32_t val = f + r; + set_int32 (fptr, val); + /* Chucking least random bit. */ + *result = val >> 1; + ++fptr; + if (fptr >= end_ptr) + { + fptr = state; + ++rptr; + } + else + { + ++rptr; + if (rptr >= end_ptr) + rptr = state; + } + buf->fptr = fptr; + buf->rptr = rptr; + } + return 0; + + fail: + __set_errno (EINVAL); + return -1; +} + +weak_alias (__random_r, random_r) diff --git a/devspec.en_US/project/recutils/lib/rawmemchr.c b/devspec.en_US/project/recutils/lib/rawmemchr.c new file mode 100755 index 0000000..7df6151 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/rawmemchr.c @@ -0,0 +1,136 @@ +/* Searching in a string. + Copyright (C) 2008-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <string.h> + +/* Find the first occurrence of C in S. */ +void * +rawmemchr (const void *s, int c_in) +{ + /* On 32-bit hardware, choosing longword to be a 32-bit unsigned + long instead of a 64-bit uintmax_t tends to give better + performance. On 64-bit hardware, unsigned long is generally 64 + bits already. Change this typedef to experiment with + performance. */ + typedef unsigned long int longword; + + const unsigned char *char_ptr; + const longword *longword_ptr; + longword repeated_one; + longword repeated_c; + unsigned char c; + + c = (unsigned char) c_in; + + /* Handle the first few bytes by reading one byte at a time. + Do this until CHAR_PTR is aligned on a longword boundary. */ + for (char_ptr = (const unsigned char *) s; + (size_t) char_ptr % sizeof (longword) != 0; + ++char_ptr) + if (*char_ptr == c) + return (void *) char_ptr; + + longword_ptr = (const longword *) char_ptr; + + /* All these elucidatory comments refer to 4-byte longwords, + but the theory applies equally well to any size longwords. */ + + /* Compute auxiliary longword values: + repeated_one is a value which has a 1 in every byte. + repeated_c has c in every byte. */ + repeated_one = 0x01010101; + repeated_c = c | (c << 8); + repeated_c |= repeated_c << 16; + if (0xffffffffU < (longword) -1) + { + repeated_one |= repeated_one << 31 << 1; + repeated_c |= repeated_c << 31 << 1; + if (8 < sizeof (longword)) + { + size_t i; + + for (i = 64; i < sizeof (longword) * 8; i *= 2) + { + repeated_one |= repeated_one << i; + repeated_c |= repeated_c << i; + } + } + } + + /* Instead of the traditional loop which tests each byte, we will + test a longword at a time. The tricky part is testing if *any of + the four* bytes in the longword in question are equal to NUL or + c. We first use an xor with repeated_c. This reduces the task + to testing whether *any of the four* bytes in longword1 is zero. + + We compute tmp = + ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). + That is, we perform the following operations: + 1. Subtract repeated_one. + 2. & ~longword1. + 3. & a mask consisting of 0x80 in every byte. + Consider what happens in each byte: + - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, + and step 3 transforms it into 0x80. A carry can also be propagated + to more significant bytes. + - If a byte of longword1 is nonzero, let its lowest 1 bit be at + position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, + the byte ends in a single bit of value 0 and k bits of value 1. + After step 2, the result is just k bits of value 1: 2^k - 1. After + step 3, the result is 0. And no carry is produced. + So, if longword1 has only non-zero bytes, tmp is zero. + Whereas if longword1 has a zero byte, call j the position of the least + significant zero byte. Then the result has a zero at positions 0, ..., + j-1 and a 0x80 at position j. We cannot predict the result at the more + significant bytes (positions j+1..3), but it does not matter since we + already have a non-zero bit at position 8*j+7. + + The test whether any byte in longword1 is zero is equivalent + to testing whether tmp is nonzero. + + This test can read beyond the end of a string, depending on where + C_IN is encountered. However, this is considered safe since the + initialization phase ensured that the read will be aligned, + therefore, the read will not cross page boundaries and will not + cause a fault. */ + + while (1) + { + longword longword1 = *longword_ptr ^ repeated_c; + + if ((((longword1 - repeated_one) & ~longword1) + & (repeated_one << 7)) != 0) + break; + longword_ptr++; + } + + char_ptr = (const unsigned char *) longword_ptr; + + /* At this point, we know that one of the sizeof (longword) bytes + starting at char_ptr is == c. On little-endian machines, we + could determine the first such byte without any further memory + accesses, just by looking at the tmp result from the last loop + iteration. But this does not work on big-endian machines. + Choose code that works in both cases. */ + + char_ptr = (unsigned char *) longword_ptr; + while (*char_ptr != c) + char_ptr++; + return (void *) char_ptr; +} diff --git a/devspec.en_US/project/recutils/lib/rawmemchr.valgrind b/devspec.en_US/project/recutils/lib/rawmemchr.valgrind new file mode 100755 index 0000000..6363923 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/rawmemchr.valgrind @@ -0,0 +1,12 @@ +# Suppress a valgrind message about use of uninitialized memory in rawmemchr(). +# This use is OK because it provides only a speedup. +{ + rawmemchr-value4 + Memcheck:Value4 + fun:rawmemchr +} +{ + rawmemchr-value8 + Memcheck:Value8 + fun:rawmemchr +} diff --git a/devspec.en_US/project/recutils/lib/read-file.c b/devspec.en_US/project/recutils/lib/read-file.c new file mode 100755 index 0000000..7608c3d --- /dev/null +++ b/devspec.en_US/project/recutils/lib/read-file.c @@ -0,0 +1,188 @@ +/* read-file.c -- read file contents into a string + Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc. + Written by Simon Josefsson and Bruno Haible. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include "read-file.h" + +/* Get fstat. */ +#include <sys/stat.h> + +/* Get ftello. */ +#include <stdio.h> + +/* Get SIZE_MAX. */ +#include <stdint.h> + +/* Get malloc, realloc, free. */ +#include <stdlib.h> + +/* Get errno. */ +#include <errno.h> + +/* Read a STREAM and return a newly allocated string with the content, + and set *LENGTH to the length of the string. The string is + zero-terminated, but the terminating zero byte is not counted in + *LENGTH. On errors, *LENGTH is undefined, errno preserves the + values set by system functions (if any), and NULL is returned. */ +char * +fread_file (FILE *stream, size_t *length) +{ + char *buf = NULL; + size_t alloc = BUFSIZ; + + /* For a regular file, allocate a buffer that has exactly the right + size. This avoids the need to do dynamic reallocations later. */ + { + struct stat st; + + if (fstat (fileno (stream), &st) >= 0 && S_ISREG (st.st_mode)) + { + off_t pos = ftello (stream); + + if (pos >= 0 && pos < st.st_size) + { + off_t alloc_off = st.st_size - pos; + + /* '1' below, accounts for the trailing NUL. */ + if (SIZE_MAX - 1 < alloc_off) + { + errno = ENOMEM; + return NULL; + } + + alloc = alloc_off + 1; + } + } + } + + if (!(buf = malloc (alloc))) + return NULL; /* errno is ENOMEM. */ + + { + size_t size = 0; /* number of bytes read so far */ + int save_errno; + + for (;;) + { + /* This reads 1 more than the size of a regular file + so that we get eof immediately. */ + size_t requested = alloc - size; + size_t count = fread (buf + size, 1, requested, stream); + size += count; + + if (count != requested) + { + save_errno = errno; + if (ferror (stream)) + break; + + /* Shrink the allocated memory if possible. */ + if (size < alloc - 1) + { + char *smaller_buf = realloc (buf, size + 1); + if (smaller_buf != NULL) + buf = smaller_buf; + } + + buf[size] = '\0'; + *length = size; + return buf; + } + + { + char *new_buf; + + if (alloc == SIZE_MAX) + { + save_errno = ENOMEM; + break; + } + + if (alloc < SIZE_MAX - alloc / 2) + alloc = alloc + alloc / 2; + else + alloc = SIZE_MAX; + + if (!(new_buf = realloc (buf, alloc))) + { + save_errno = errno; + break; + } + + buf = new_buf; + } + } + + free (buf); + errno = save_errno; + return NULL; + } +} + +static char * +internal_read_file (const char *filename, size_t *length, const char *mode) +{ + FILE *stream = fopen (filename, mode); + char *out; + int save_errno; + + if (!stream) + return NULL; + + out = fread_file (stream, length); + + save_errno = errno; + + if (fclose (stream) != 0) + { + if (out) + { + save_errno = errno; + free (out); + } + errno = save_errno; + return NULL; + } + + return out; +} + +/* Open and read the contents of FILENAME, and return a newly + allocated string with the content, and set *LENGTH to the length of + the string. The string is zero-terminated, but the terminating + zero byte is not counted in *LENGTH. On errors, *LENGTH is + undefined, errno preserves the values set by system functions (if + any), and NULL is returned. */ +char * +read_file (const char *filename, size_t *length) +{ + return internal_read_file (filename, length, "r"); +} + +/* Open (on non-POSIX systems, in binary mode) and read the contents + of FILENAME, and return a newly allocated string with the content, + and set LENGTH to the length of the string. The string is + zero-terminated, but the terminating zero byte is not counted in + the LENGTH variable. On errors, *LENGTH is undefined, errno + preserves the values set by system functions (if any), and NULL is + returned. */ +char * +read_binary_file (const char *filename, size_t *length) +{ + return internal_read_file (filename, length, "rb"); +} diff --git a/devspec.en_US/project/recutils/lib/read-file.h b/devspec.en_US/project/recutils/lib/read-file.h new file mode 100755 index 0000000..77ef206 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/read-file.h @@ -0,0 +1,33 @@ +/* read-file.h -- read file contents into a string + Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc. + Written by Simon Josefsson. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef READ_FILE_H +#define READ_FILE_H + +/* Get size_t. */ +#include <stddef.h> + +/* Get FILE. */ +#include <stdio.h> + +extern char *fread_file (FILE * stream, size_t * length); + +extern char *read_file (const char *filename, size_t * length); + +extern char *read_binary_file (const char *filename, size_t * length); + +#endif /* READ_FILE_H */ diff --git a/devspec.en_US/project/recutils/lib/readline.c b/devspec.en_US/project/recutils/lib/readline.c new file mode 100755 index 0000000..5c07b74 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/readline.c @@ -0,0 +1,55 @@ +/* readline.c --- Simple implementation of readline. + Copyright (C) 2005-2007, 2009-2019 Free Software Foundation, Inc. + Written by Simon Josefsson + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* This module is intended to be used when the application only needs + the readline interface. If you need more functions from the + readline library, it is recommended to require the readline library + (or improve this module) rather than #if-protect part of your + application (doing so would add assumptions of this module into + your application). The application should use #include + "readline.h", that header file will include <readline/readline.h> + if the real library is present on the system. */ + +/* Get specification. */ +#include "readline.h" + +#include <stdio.h> +#include <string.h> + +char * +readline (const char *prompt) +{ + char *out = NULL; + size_t size = 0; + + if (prompt) + { + fputs (prompt, stdout); + fflush (stdout); + } + + if (getline (&out, &size, stdin) < 0) + return NULL; + + while (*out && (out[strlen (out) - 1] == '\r' + || out[strlen (out) - 1] == '\n')) + out[strlen (out) - 1] = '\0'; + + return out; +} diff --git a/devspec.en_US/project/recutils/lib/readline.h b/devspec.en_US/project/recutils/lib/readline.h new file mode 100755 index 0000000..01d5c19 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/readline.h @@ -0,0 +1,34 @@ +/* readline.h --- Simple implementation of readline. + Copyright (C) 2005, 2009-2019 Free Software Foundation, Inc. + Written by Simon Josefsson + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef GL_READLINE_H +#define GL_READLINE_H + +#if HAVE_READLINE_READLINE_H +/* <readline/readline.h> makes use of the FILE type without including + <stdio.h> itself. */ +# include <stdio.h> +# include <readline/readline.h> +#else +/* Prints a prompt PROMPT and then reads and returns a single line of + text from the user. If PROMPT is NULL or the empty string, no + prompt is displayed. The returned line is allocated with malloc; + the caller should free the line when it has finished with it. */ +extern char *readline (const char *prompt); +#endif + +#endif /* GL_READLINE_H */ diff --git a/devspec.en_US/project/recutils/lib/readlink.c b/devspec.en_US/project/recutils/lib/readlink.c new file mode 100755 index 0000000..bf71109 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/readlink.c @@ -0,0 +1,74 @@ +/* Stub for readlink(). + Copyright (C) 2003-2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <unistd.h> + +#include <errno.h> +#include <string.h> +#include <sys/stat.h> + +#if !HAVE_READLINK + +/* readlink() substitute for systems that don't have a readlink() function, + such as DJGPP 2.03 and mingw32. */ + +ssize_t +readlink (const char *name, char *buf _GL_UNUSED, + size_t bufsize _GL_UNUSED) +{ + struct stat statbuf; + + /* In general we should use lstat() here, not stat(). But on platforms + without symbolic links, lstat() - if it exists - would be equivalent to + stat(), therefore we can use stat(). This saves us a configure check. */ + if (stat (name, &statbuf) >= 0) + errno = EINVAL; + return -1; +} + +#else /* HAVE_READLINK */ + +# undef readlink + +/* readlink() wrapper that uses correct types, for systems like cygwin + 1.5.x where readlink returns int, and which rejects trailing slash, + for Solaris 9. */ + +ssize_t +rpl_readlink (const char *name, char *buf, size_t bufsize) +{ +# if READLINK_TRAILING_SLASH_BUG + size_t len = strlen (name); + if (len && name[len - 1] == '/') + { + /* Even if name without the slash is a symlink to a directory, + both lstat() and stat() must resolve the trailing slash to + the directory rather than the symlink. We can therefore + safely use stat() to distinguish between EINVAL and + ENOTDIR/ENOENT, avoiding extra overhead of rpl_lstat(). */ + struct stat st; + if (stat (name, &st) == 0) + errno = EINVAL; + return -1; + } +# endif /* READLINK_TRAILING_SLASH_BUG */ + return readlink (name, buf, bufsize); +} + +#endif /* HAVE_READLINK */ diff --git a/devspec.en_US/project/recutils/lib/realloc.c b/devspec.en_US/project/recutils/lib/realloc.c new file mode 100755 index 0000000..a81ce3b --- /dev/null +++ b/devspec.en_US/project/recutils/lib/realloc.c @@ -0,0 +1,79 @@ +/* realloc() function that is glibc compatible. + + Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2019 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* written by Jim Meyering and Bruno Haible */ + +#define _GL_USE_STDLIB_ALLOC 1 +#include <config.h> + +/* Only the AC_FUNC_REALLOC macro defines 'realloc' already in config.h. */ +#ifdef realloc +# define NEED_REALLOC_GNU 1 +/* Whereas the gnulib module 'realloc-gnu' defines HAVE_REALLOC_GNU. */ +#elif GNULIB_REALLOC_GNU && !HAVE_REALLOC_GNU +# define NEED_REALLOC_GNU 1 +#endif + +/* Infer the properties of the system's malloc function. + The gnulib module 'malloc-gnu' defines HAVE_MALLOC_GNU. */ +#if GNULIB_MALLOC_GNU && HAVE_MALLOC_GNU +# define SYSTEM_MALLOC_GLIBC_COMPATIBLE 1 +#endif + +#include <stdlib.h> + +#include <errno.h> + +/* Change the size of an allocated block of memory P to N bytes, + with error checking. If N is zero, change it to 1. If P is NULL, + use malloc. */ + +void * +rpl_realloc (void *p, size_t n) +{ + void *result; + +#if NEED_REALLOC_GNU + if (n == 0) + { + n = 1; + + /* In theory realloc might fail, so don't rely on it to free. */ + free (p); + p = NULL; + } +#endif + + if (p == NULL) + { +#if GNULIB_REALLOC_GNU && !NEED_REALLOC_GNU && !SYSTEM_MALLOC_GLIBC_COMPATIBLE + if (n == 0) + n = 1; +#endif + result = malloc (n); + } + else + result = realloc (p, n); + +#if !HAVE_REALLOC_POSIX + if (result == NULL) + errno = ENOMEM; +#endif + + return result; +} diff --git a/devspec.en_US/project/recutils/lib/regcomp.c b/devspec.en_US/project/recutils/lib/regcomp.c new file mode 100755 index 0000000..10a0a49 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/regcomp.c @@ -0,0 +1,3934 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifdef _LIBC +# include <locale/weight.h> +#endif + +static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, + size_t length, reg_syntax_t syntax); +static void re_compile_fastmap_iter (regex_t *bufp, + const re_dfastate_t *init_state, + char *fastmap); +static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len); +#ifdef RE_ENABLE_I18N +static void free_charset (re_charset_t *cset); +#endif /* RE_ENABLE_I18N */ +static void free_workarea_compile (regex_t *preg); +static reg_errcode_t create_initial_state (re_dfa_t *dfa); +#ifdef RE_ENABLE_I18N +static void optimize_utf8 (re_dfa_t *dfa); +#endif +static reg_errcode_t analyze (regex_t *preg); +static reg_errcode_t preorder (bin_tree_t *root, + reg_errcode_t (fn (void *, bin_tree_t *)), + void *extra); +static reg_errcode_t postorder (bin_tree_t *root, + reg_errcode_t (fn (void *, bin_tree_t *)), + void *extra); +static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node); +static reg_errcode_t lower_subexps (void *extra, bin_tree_t *node); +static bin_tree_t *lower_subexp (reg_errcode_t *err, regex_t *preg, + bin_tree_t *node); +static reg_errcode_t calc_first (void *extra, bin_tree_t *node); +static reg_errcode_t calc_next (void *extra, bin_tree_t *node); +static reg_errcode_t link_nfa_nodes (void *extra, bin_tree_t *node); +static Idx duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint); +static Idx search_duplicated_node (const re_dfa_t *dfa, Idx org_node, + unsigned int constraint); +static reg_errcode_t calc_eclosure (re_dfa_t *dfa); +static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, + Idx node, bool root); +static reg_errcode_t calc_inveclosure (re_dfa_t *dfa); +static Idx fetch_number (re_string_t *input, re_token_t *token, + reg_syntax_t syntax); +static int peek_token (re_token_t *token, re_string_t *input, + reg_syntax_t syntax); +static bin_tree_t *parse (re_string_t *regexp, regex_t *preg, + reg_syntax_t syntax, reg_errcode_t *err); +static bin_tree_t *parse_reg_exp (re_string_t *regexp, regex_t *preg, + re_token_t *token, reg_syntax_t syntax, + Idx nest, reg_errcode_t *err); +static bin_tree_t *parse_branch (re_string_t *regexp, regex_t *preg, + re_token_t *token, reg_syntax_t syntax, + Idx nest, reg_errcode_t *err); +static bin_tree_t *parse_expression (re_string_t *regexp, regex_t *preg, + re_token_t *token, reg_syntax_t syntax, + Idx nest, reg_errcode_t *err); +static bin_tree_t *parse_sub_exp (re_string_t *regexp, regex_t *preg, + re_token_t *token, reg_syntax_t syntax, + Idx nest, reg_errcode_t *err); +static bin_tree_t *parse_dup_op (bin_tree_t *dup_elem, re_string_t *regexp, + re_dfa_t *dfa, re_token_t *token, + reg_syntax_t syntax, reg_errcode_t *err); +static bin_tree_t *parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, + re_token_t *token, reg_syntax_t syntax, + reg_errcode_t *err); +static reg_errcode_t parse_bracket_element (bracket_elem_t *elem, + re_string_t *regexp, + re_token_t *token, int token_len, + re_dfa_t *dfa, + reg_syntax_t syntax, + bool accept_hyphen); +static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem, + re_string_t *regexp, + re_token_t *token); +#ifdef RE_ENABLE_I18N +static reg_errcode_t build_equiv_class (bitset_t sbcset, + re_charset_t *mbcset, + Idx *equiv_class_alloc, + const unsigned char *name); +static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans, + bitset_t sbcset, + re_charset_t *mbcset, + Idx *char_class_alloc, + const char *class_name, + reg_syntax_t syntax); +#else /* not RE_ENABLE_I18N */ +static reg_errcode_t build_equiv_class (bitset_t sbcset, + const unsigned char *name); +static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans, + bitset_t sbcset, + const char *class_name, + reg_syntax_t syntax); +#endif /* not RE_ENABLE_I18N */ +static bin_tree_t *build_charclass_op (re_dfa_t *dfa, + RE_TRANSLATE_TYPE trans, + const char *class_name, + const char *extra, + bool non_match, reg_errcode_t *err); +static bin_tree_t *create_tree (re_dfa_t *dfa, + bin_tree_t *left, bin_tree_t *right, + re_token_type_t type); +static bin_tree_t *create_token_tree (re_dfa_t *dfa, + bin_tree_t *left, bin_tree_t *right, + const re_token_t *token); +static bin_tree_t *duplicate_tree (const bin_tree_t *src, re_dfa_t *dfa); +static void free_token (re_token_t *node); +static reg_errcode_t free_tree (void *extra, bin_tree_t *node); +static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node); + +/* This table gives an error message for each of the error codes listed + in regex.h. Obviously the order here has to be same as there. + POSIX doesn't require that we do anything for REG_NOERROR, + but why not be nice? */ + +static const char __re_error_msgid[] = + { +#define REG_NOERROR_IDX 0 + gettext_noop ("Success") /* REG_NOERROR */ + "\0" +#define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success") + gettext_noop ("No match") /* REG_NOMATCH */ + "\0" +#define REG_BADPAT_IDX (REG_NOMATCH_IDX + sizeof "No match") + gettext_noop ("Invalid regular expression") /* REG_BADPAT */ + "\0" +#define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression") + gettext_noop ("Invalid collation character") /* REG_ECOLLATE */ + "\0" +#define REG_ECTYPE_IDX (REG_ECOLLATE_IDX + sizeof "Invalid collation character") + gettext_noop ("Invalid character class name") /* REG_ECTYPE */ + "\0" +#define REG_EESCAPE_IDX (REG_ECTYPE_IDX + sizeof "Invalid character class name") + gettext_noop ("Trailing backslash") /* REG_EESCAPE */ + "\0" +#define REG_ESUBREG_IDX (REG_EESCAPE_IDX + sizeof "Trailing backslash") + gettext_noop ("Invalid back reference") /* REG_ESUBREG */ + "\0" +#define REG_EBRACK_IDX (REG_ESUBREG_IDX + sizeof "Invalid back reference") + gettext_noop ("Unmatched [, [^, [:, [., or [=") /* REG_EBRACK */ + "\0" +#define REG_EPAREN_IDX (REG_EBRACK_IDX + sizeof "Unmatched [, [^, [:, [., or [=") + gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */ + "\0" +#define REG_EBRACE_IDX (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(") + gettext_noop ("Unmatched \\{") /* REG_EBRACE */ + "\0" +#define REG_BADBR_IDX (REG_EBRACE_IDX + sizeof "Unmatched \\{") + gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */ + "\0" +#define REG_ERANGE_IDX (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}") + gettext_noop ("Invalid range end") /* REG_ERANGE */ + "\0" +#define REG_ESPACE_IDX (REG_ERANGE_IDX + sizeof "Invalid range end") + gettext_noop ("Memory exhausted") /* REG_ESPACE */ + "\0" +#define REG_BADRPT_IDX (REG_ESPACE_IDX + sizeof "Memory exhausted") + gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */ + "\0" +#define REG_EEND_IDX (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression") + gettext_noop ("Premature end of regular expression") /* REG_EEND */ + "\0" +#define REG_ESIZE_IDX (REG_EEND_IDX + sizeof "Premature end of regular expression") + gettext_noop ("Regular expression too big") /* REG_ESIZE */ + "\0" +#define REG_ERPAREN_IDX (REG_ESIZE_IDX + sizeof "Regular expression too big") + gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */ + }; + +static const size_t __re_error_msgid_idx[] = + { + REG_NOERROR_IDX, + REG_NOMATCH_IDX, + REG_BADPAT_IDX, + REG_ECOLLATE_IDX, + REG_ECTYPE_IDX, + REG_EESCAPE_IDX, + REG_ESUBREG_IDX, + REG_EBRACK_IDX, + REG_EPAREN_IDX, + REG_EBRACE_IDX, + REG_BADBR_IDX, + REG_ERANGE_IDX, + REG_ESPACE_IDX, + REG_BADRPT_IDX, + REG_EEND_IDX, + REG_ESIZE_IDX, + REG_ERPAREN_IDX + }; + +/* Entry points for GNU code. */ + +/* re_compile_pattern is the GNU regular expression compiler: it + compiles PATTERN (of length LENGTH) and puts the result in BUFP. + Returns 0 if the pattern was valid, otherwise an error string. + + Assumes the 'allocated' (and perhaps 'buffer') and 'translate' fields + are set in BUFP on entry. */ + +const char * +re_compile_pattern (const char *pattern, size_t length, + struct re_pattern_buffer *bufp) +{ + reg_errcode_t ret; + + /* And GNU code determines whether or not to get register information + by passing null for the REGS argument to re_match, etc., not by + setting no_sub, unless RE_NO_SUB is set. */ + bufp->no_sub = !!(re_syntax_options & RE_NO_SUB); + + /* Match anchors at newline. */ + bufp->newline_anchor = 1; + + ret = re_compile_internal (bufp, pattern, length, re_syntax_options); + + if (!ret) + return NULL; + return gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); +} +weak_alias (__re_compile_pattern, re_compile_pattern) + +/* Set by 're_set_syntax' to the current regexp syntax to recognize. Can + also be assigned to arbitrarily: each pattern buffer stores its own + syntax, so it can be changed between regex compilations. */ +/* This has no initializer because initialized variables in Emacs + become read-only after dumping. */ +reg_syntax_t re_syntax_options; + + +/* Specify the precise syntax of regexps for compilation. This provides + for compatibility for various utilities which historically have + different, incompatible syntaxes. + + The argument SYNTAX is a bit mask comprised of the various bits + defined in regex.h. We return the old syntax. */ + +reg_syntax_t +re_set_syntax (reg_syntax_t syntax) +{ + reg_syntax_t ret = re_syntax_options; + + re_syntax_options = syntax; + return ret; +} +weak_alias (__re_set_syntax, re_set_syntax) + +int +re_compile_fastmap (struct re_pattern_buffer *bufp) +{ + re_dfa_t *dfa = bufp->buffer; + char *fastmap = bufp->fastmap; + + memset (fastmap, '\0', sizeof (char) * SBC_MAX); + re_compile_fastmap_iter (bufp, dfa->init_state, fastmap); + if (dfa->init_state != dfa->init_state_word) + re_compile_fastmap_iter (bufp, dfa->init_state_word, fastmap); + if (dfa->init_state != dfa->init_state_nl) + re_compile_fastmap_iter (bufp, dfa->init_state_nl, fastmap); + if (dfa->init_state != dfa->init_state_begbuf) + re_compile_fastmap_iter (bufp, dfa->init_state_begbuf, fastmap); + bufp->fastmap_accurate = 1; + return 0; +} +weak_alias (__re_compile_fastmap, re_compile_fastmap) + +static inline void +__attribute__ ((always_inline)) +re_set_fastmap (char *fastmap, bool icase, int ch) +{ + fastmap[ch] = 1; + if (icase) + fastmap[tolower (ch)] = 1; +} + +/* Helper function for re_compile_fastmap. + Compile fastmap for the initial_state INIT_STATE. */ + +static void +re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, + char *fastmap) +{ + re_dfa_t *dfa = bufp->buffer; + Idx node_cnt; + bool icase = (dfa->mb_cur_max == 1 && (bufp->syntax & RE_ICASE)); + for (node_cnt = 0; node_cnt < init_state->nodes.nelem; ++node_cnt) + { + Idx node = init_state->nodes.elems[node_cnt]; + re_token_type_t type = dfa->nodes[node].type; + + if (type == CHARACTER) + { + re_set_fastmap (fastmap, icase, dfa->nodes[node].opr.c); +#ifdef RE_ENABLE_I18N + if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) + { + unsigned char buf[MB_LEN_MAX]; + unsigned char *p; + wchar_t wc; + mbstate_t state; + + p = buf; + *p++ = dfa->nodes[node].opr.c; + while (++node < dfa->nodes_len + && dfa->nodes[node].type == CHARACTER + && dfa->nodes[node].mb_partial) + *p++ = dfa->nodes[node].opr.c; + memset (&state, '\0', sizeof (state)); + if (__mbrtowc (&wc, (const char *) buf, p - buf, + &state) == p - buf + && (__wcrtomb ((char *) buf, __towlower (wc), &state) + != (size_t) -1)) + re_set_fastmap (fastmap, false, buf[0]); + } +#endif + } + else if (type == SIMPLE_BRACKET) + { + int i, ch; + for (i = 0, ch = 0; i < BITSET_WORDS; ++i) + { + int j; + bitset_word_t w = dfa->nodes[node].opr.sbcset[i]; + for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) + if (w & ((bitset_word_t) 1 << j)) + re_set_fastmap (fastmap, icase, ch); + } + } +#ifdef RE_ENABLE_I18N + else if (type == COMPLEX_BRACKET) + { + re_charset_t *cset = dfa->nodes[node].opr.mbcset; + Idx i; + +# ifdef _LIBC + /* See if we have to try all bytes which start multiple collation + elements. + e.g. In da_DK, we want to catch 'a' since "aa" is a valid + collation element, and don't catch 'b' since 'b' is + the only collation element which starts from 'b' (and + it is caught by SIMPLE_BRACKET). */ + if (_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES) != 0 + && (cset->ncoll_syms || cset->nranges)) + { + const int32_t *table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + for (i = 0; i < SBC_MAX; ++i) + if (table[i] < 0) + re_set_fastmap (fastmap, icase, i); + } +# endif /* _LIBC */ + + /* See if we have to start the match at all multibyte characters, + i.e. where we would not find an invalid sequence. This only + applies to multibyte character sets; for single byte character + sets, the SIMPLE_BRACKET again suffices. */ + if (dfa->mb_cur_max > 1 + && (cset->nchar_classes || cset->non_match || cset->nranges +# ifdef _LIBC + || cset->nequiv_classes +# endif /* _LIBC */ + )) + { + unsigned char c = 0; + do + { + mbstate_t mbs; + memset (&mbs, 0, sizeof (mbs)); + if (__mbrtowc (NULL, (char *) &c, 1, &mbs) == (size_t) -2) + re_set_fastmap (fastmap, false, (int) c); + } + while (++c != 0); + } + + else + { + /* ... Else catch all bytes which can start the mbchars. */ + for (i = 0; i < cset->nmbchars; ++i) + { + char buf[256]; + mbstate_t state; + memset (&state, '\0', sizeof (state)); + if (__wcrtomb (buf, cset->mbchars[i], &state) != (size_t) -1) + re_set_fastmap (fastmap, icase, *(unsigned char *) buf); + if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) + { + if (__wcrtomb (buf, __towlower (cset->mbchars[i]), &state) + != (size_t) -1) + re_set_fastmap (fastmap, false, *(unsigned char *) buf); + } + } + } + } +#endif /* RE_ENABLE_I18N */ + else if (type == OP_PERIOD +#ifdef RE_ENABLE_I18N + || type == OP_UTF8_PERIOD +#endif /* RE_ENABLE_I18N */ + || type == END_OF_RE) + { + memset (fastmap, '\1', sizeof (char) * SBC_MAX); + if (type == END_OF_RE) + bufp->can_be_null = 1; + return; + } + } +} + +/* Entry point for POSIX code. */ +/* regcomp takes a regular expression as a string and compiles it. + + PREG is a regex_t *. We do not expect any fields to be initialized, + since POSIX says we shouldn't. Thus, we set + + 'buffer' to the compiled pattern; + 'used' to the length of the compiled pattern; + 'syntax' to RE_SYNTAX_POSIX_EXTENDED if the + REG_EXTENDED bit in CFLAGS is set; otherwise, to + RE_SYNTAX_POSIX_BASIC; + 'newline_anchor' to REG_NEWLINE being set in CFLAGS; + 'fastmap' to an allocated space for the fastmap; + 'fastmap_accurate' to zero; + 're_nsub' to the number of subexpressions in PATTERN. + + PATTERN is the address of the pattern string. + + CFLAGS is a series of bits which affect compilation. + + If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we + use POSIX basic syntax. + + If REG_NEWLINE is set, then . and [^...] don't match newline. + Also, regexec will try a match beginning after every newline. + + If REG_ICASE is set, then we considers upper- and lowercase + versions of letters to be equivalent when matching. + + If REG_NOSUB is set, then when PREG is passed to regexec, that + routine will report only success or failure, and nothing about the + registers. + + It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for + the return codes and their meanings.) */ + +int +regcomp (regex_t *__restrict preg, const char *__restrict pattern, int cflags) +{ + reg_errcode_t ret; + reg_syntax_t syntax = ((cflags & REG_EXTENDED) ? RE_SYNTAX_POSIX_EXTENDED + : RE_SYNTAX_POSIX_BASIC); + + preg->buffer = NULL; + preg->allocated = 0; + preg->used = 0; + + /* Try to allocate space for the fastmap. */ + preg->fastmap = re_malloc (char, SBC_MAX); + if (__glibc_unlikely (preg->fastmap == NULL)) + return REG_ESPACE; + + syntax |= (cflags & REG_ICASE) ? RE_ICASE : 0; + + /* If REG_NEWLINE is set, newlines are treated differently. */ + if (cflags & REG_NEWLINE) + { /* REG_NEWLINE implies neither . nor [^...] match newline. */ + syntax &= ~RE_DOT_NEWLINE; + syntax |= RE_HAT_LISTS_NOT_NEWLINE; + /* It also changes the matching behavior. */ + preg->newline_anchor = 1; + } + else + preg->newline_anchor = 0; + preg->no_sub = !!(cflags & REG_NOSUB); + preg->translate = NULL; + + ret = re_compile_internal (preg, pattern, strlen (pattern), syntax); + + /* POSIX doesn't distinguish between an unmatched open-group and an + unmatched close-group: both are REG_EPAREN. */ + if (ret == REG_ERPAREN) + ret = REG_EPAREN; + + /* We have already checked preg->fastmap != NULL. */ + if (__glibc_likely (ret == REG_NOERROR)) + /* Compute the fastmap now, since regexec cannot modify the pattern + buffer. This function never fails in this implementation. */ + (void) re_compile_fastmap (preg); + else + { + /* Some error occurred while compiling the expression. */ + re_free (preg->fastmap); + preg->fastmap = NULL; + } + + return (int) ret; +} +libc_hidden_def (__regcomp) +weak_alias (__regcomp, regcomp) + +/* Returns a message corresponding to an error code, ERRCODE, returned + from either regcomp or regexec. We don't use PREG here. */ + +size_t +regerror (int errcode, const regex_t *__restrict preg, char *__restrict errbuf, + size_t errbuf_size) +{ + const char *msg; + size_t msg_size; + int nerrcodes = sizeof __re_error_msgid_idx / sizeof __re_error_msgid_idx[0]; + + if (__glibc_unlikely (errcode < 0 || errcode >= nerrcodes)) + /* Only error codes returned by the rest of the code should be passed + to this routine. If we are given anything else, or if other regex + code generates an invalid error code, then the program has a bug. + Dump core so we can fix it. */ + abort (); + + msg = gettext (__re_error_msgid + __re_error_msgid_idx[errcode]); + + msg_size = strlen (msg) + 1; /* Includes the null. */ + + if (__glibc_likely (errbuf_size != 0)) + { + size_t cpy_size = msg_size; + if (__glibc_unlikely (msg_size > errbuf_size)) + { + cpy_size = errbuf_size - 1; + errbuf[cpy_size] = '\0'; + } + memcpy (errbuf, msg, cpy_size); + } + + return msg_size; +} +weak_alias (__regerror, regerror) + + +#ifdef RE_ENABLE_I18N +/* This static array is used for the map to single-byte characters when + UTF-8 is used. Otherwise we would allocate memory just to initialize + it the same all the time. UTF-8 is the preferred encoding so this is + a worthwhile optimization. */ +static const bitset_t utf8_sb_map = +{ + /* Set the first 128 bits. */ +# if defined __GNUC__ && !defined __STRICT_ANSI__ + [0 ... 0x80 / BITSET_WORD_BITS - 1] = BITSET_WORD_MAX +# else +# if 4 * BITSET_WORD_BITS < ASCII_CHARS +# error "bitset_word_t is narrower than 32 bits" +# elif 3 * BITSET_WORD_BITS < ASCII_CHARS + BITSET_WORD_MAX, BITSET_WORD_MAX, BITSET_WORD_MAX, +# elif 2 * BITSET_WORD_BITS < ASCII_CHARS + BITSET_WORD_MAX, BITSET_WORD_MAX, +# elif 1 * BITSET_WORD_BITS < ASCII_CHARS + BITSET_WORD_MAX, +# endif + (BITSET_WORD_MAX + >> (SBC_MAX % BITSET_WORD_BITS == 0 + ? 0 + : BITSET_WORD_BITS - SBC_MAX % BITSET_WORD_BITS)) +# endif +}; +#endif + + +static void +free_dfa_content (re_dfa_t *dfa) +{ + Idx i, j; + + if (dfa->nodes) + for (i = 0; i < dfa->nodes_len; ++i) + free_token (dfa->nodes + i); + re_free (dfa->nexts); + for (i = 0; i < dfa->nodes_len; ++i) + { + if (dfa->eclosures != NULL) + re_node_set_free (dfa->eclosures + i); + if (dfa->inveclosures != NULL) + re_node_set_free (dfa->inveclosures + i); + if (dfa->edests != NULL) + re_node_set_free (dfa->edests + i); + } + re_free (dfa->edests); + re_free (dfa->eclosures); + re_free (dfa->inveclosures); + re_free (dfa->nodes); + + if (dfa->state_table) + for (i = 0; i <= dfa->state_hash_mask; ++i) + { + struct re_state_table_entry *entry = dfa->state_table + i; + for (j = 0; j < entry->num; ++j) + { + re_dfastate_t *state = entry->array[j]; + free_state (state); + } + re_free (entry->array); + } + re_free (dfa->state_table); +#ifdef RE_ENABLE_I18N + if (dfa->sb_char != utf8_sb_map) + re_free (dfa->sb_char); +#endif + re_free (dfa->subexp_map); +#ifdef DEBUG + re_free (dfa->re_str); +#endif + + re_free (dfa); +} + + +/* Free dynamically allocated space used by PREG. */ + +void +regfree (regex_t *preg) +{ + re_dfa_t *dfa = preg->buffer; + if (__glibc_likely (dfa != NULL)) + { + lock_fini (dfa->lock); + free_dfa_content (dfa); + } + preg->buffer = NULL; + preg->allocated = 0; + + re_free (preg->fastmap); + preg->fastmap = NULL; + + re_free (preg->translate); + preg->translate = NULL; +} +libc_hidden_def (__regfree) +weak_alias (__regfree, regfree) + +/* Entry points compatible with 4.2 BSD regex library. We don't define + them unless specifically requested. */ + +#if defined _REGEX_RE_COMP || defined _LIBC + +/* BSD has one and only one pattern buffer. */ +static struct re_pattern_buffer re_comp_buf; + +char * +# ifdef _LIBC +/* Make these definitions weak in libc, so POSIX programs can redefine + these names if they don't use our functions, and still use + regcomp/regexec above without link errors. */ +weak_function +# endif +re_comp (const char *s) +{ + reg_errcode_t ret; + char *fastmap; + + if (!s) + { + if (!re_comp_buf.buffer) + return gettext ("No previous regular expression"); + return 0; + } + + if (re_comp_buf.buffer) + { + fastmap = re_comp_buf.fastmap; + re_comp_buf.fastmap = NULL; + __regfree (&re_comp_buf); + memset (&re_comp_buf, '\0', sizeof (re_comp_buf)); + re_comp_buf.fastmap = fastmap; + } + + if (re_comp_buf.fastmap == NULL) + { + re_comp_buf.fastmap = re_malloc (char, SBC_MAX); + if (re_comp_buf.fastmap == NULL) + return (char *) gettext (__re_error_msgid + + __re_error_msgid_idx[(int) REG_ESPACE]); + } + + /* Since 're_exec' always passes NULL for the 'regs' argument, we + don't need to initialize the pattern buffer fields which affect it. */ + + /* Match anchors at newlines. */ + re_comp_buf.newline_anchor = 1; + + ret = re_compile_internal (&re_comp_buf, s, strlen (s), re_syntax_options); + + if (!ret) + return NULL; + + /* Yes, we're discarding 'const' here if !HAVE_LIBINTL. */ + return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); +} + +#ifdef _LIBC +libc_freeres_fn (free_mem) +{ + __regfree (&re_comp_buf); +} +#endif + +#endif /* _REGEX_RE_COMP */ + +/* Internal entry point. + Compile the regular expression PATTERN, whose length is LENGTH. + SYNTAX indicate regular expression's syntax. */ + +static reg_errcode_t +re_compile_internal (regex_t *preg, const char * pattern, size_t length, + reg_syntax_t syntax) +{ + reg_errcode_t err = REG_NOERROR; + re_dfa_t *dfa; + re_string_t regexp; + + /* Initialize the pattern buffer. */ + preg->fastmap_accurate = 0; + preg->syntax = syntax; + preg->not_bol = preg->not_eol = 0; + preg->used = 0; + preg->re_nsub = 0; + preg->can_be_null = 0; + preg->regs_allocated = REGS_UNALLOCATED; + + /* Initialize the dfa. */ + dfa = preg->buffer; + if (__glibc_unlikely (preg->allocated < sizeof (re_dfa_t))) + { + /* If zero allocated, but buffer is non-null, try to realloc + enough space. This loses if buffer's address is bogus, but + that is the user's responsibility. If ->buffer is NULL this + is a simple allocation. */ + dfa = re_realloc (preg->buffer, re_dfa_t, 1); + if (dfa == NULL) + return REG_ESPACE; + preg->allocated = sizeof (re_dfa_t); + preg->buffer = dfa; + } + preg->used = sizeof (re_dfa_t); + + err = init_dfa (dfa, length); + if (__glibc_unlikely (err == REG_NOERROR && lock_init (dfa->lock) != 0)) + err = REG_ESPACE; + if (__glibc_unlikely (err != REG_NOERROR)) + { + free_dfa_content (dfa); + preg->buffer = NULL; + preg->allocated = 0; + return err; + } +#ifdef DEBUG + /* Note: length+1 will not overflow since it is checked in init_dfa. */ + dfa->re_str = re_malloc (char, length + 1); + strncpy (dfa->re_str, pattern, length + 1); +#endif + + err = re_string_construct (®exp, pattern, length, preg->translate, + (syntax & RE_ICASE) != 0, dfa); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_compile_internal_free_return: + free_workarea_compile (preg); + re_string_destruct (®exp); + lock_fini (dfa->lock); + free_dfa_content (dfa); + preg->buffer = NULL; + preg->allocated = 0; + return err; + } + + /* Parse the regular expression, and build a structure tree. */ + preg->re_nsub = 0; + dfa->str_tree = parse (®exp, preg, syntax, &err); + if (__glibc_unlikely (dfa->str_tree == NULL)) + goto re_compile_internal_free_return; + + /* Analyze the tree and create the nfa. */ + err = analyze (preg); + if (__glibc_unlikely (err != REG_NOERROR)) + goto re_compile_internal_free_return; + +#ifdef RE_ENABLE_I18N + /* If possible, do searching in single byte encoding to speed things up. */ + if (dfa->is_utf8 && !(syntax & RE_ICASE) && preg->translate == NULL) + optimize_utf8 (dfa); +#endif + + /* Then create the initial state of the dfa. */ + err = create_initial_state (dfa); + + /* Release work areas. */ + free_workarea_compile (preg); + re_string_destruct (®exp); + + if (__glibc_unlikely (err != REG_NOERROR)) + { + lock_fini (dfa->lock); + free_dfa_content (dfa); + preg->buffer = NULL; + preg->allocated = 0; + } + + return err; +} + +/* Initialize DFA. We use the length of the regular expression PAT_LEN + as the initial length of some arrays. */ + +static reg_errcode_t +init_dfa (re_dfa_t *dfa, size_t pat_len) +{ + __re_size_t table_size; +#ifndef _LIBC + const char *codeset_name; +#endif +#ifdef RE_ENABLE_I18N + size_t max_i18n_object_size = MAX (sizeof (wchar_t), sizeof (wctype_t)); +#else + size_t max_i18n_object_size = 0; +#endif + size_t max_object_size = + MAX (sizeof (struct re_state_table_entry), + MAX (sizeof (re_token_t), + MAX (sizeof (re_node_set), + MAX (sizeof (regmatch_t), + max_i18n_object_size)))); + + memset (dfa, '\0', sizeof (re_dfa_t)); + + /* Force allocation of str_tree_storage the first time. */ + dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; + + /* Avoid overflows. The extra "/ 2" is for the table_size doubling + calculation below, and for similar doubling calculations + elsewhere. And it's <= rather than <, because some of the + doubling calculations add 1 afterwards. */ + if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) / 2 + <= pat_len)) + return REG_ESPACE; + + dfa->nodes_alloc = pat_len + 1; + dfa->nodes = re_malloc (re_token_t, dfa->nodes_alloc); + + /* table_size = 2 ^ ceil(log pat_len) */ + for (table_size = 1; ; table_size <<= 1) + if (table_size > pat_len) + break; + + dfa->state_table = calloc (sizeof (struct re_state_table_entry), table_size); + dfa->state_hash_mask = table_size - 1; + + dfa->mb_cur_max = MB_CUR_MAX; +#ifdef _LIBC + if (dfa->mb_cur_max == 6 + && strcmp (_NL_CURRENT (LC_CTYPE, _NL_CTYPE_CODESET_NAME), "UTF-8") == 0) + dfa->is_utf8 = 1; + dfa->map_notascii = (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_TO_NONASCII) + != 0); +#else + codeset_name = nl_langinfo (CODESET); + if ((codeset_name[0] == 'U' || codeset_name[0] == 'u') + && (codeset_name[1] == 'T' || codeset_name[1] == 't') + && (codeset_name[2] == 'F' || codeset_name[2] == 'f') + && strcmp (codeset_name + 3 + (codeset_name[3] == '-'), "8") == 0) + dfa->is_utf8 = 1; + + /* We check exhaustively in the loop below if this charset is a + superset of ASCII. */ + dfa->map_notascii = 0; +#endif + +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + { + if (dfa->is_utf8) + dfa->sb_char = (re_bitset_ptr_t) utf8_sb_map; + else + { + int i, j, ch; + + dfa->sb_char = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); + if (__glibc_unlikely (dfa->sb_char == NULL)) + return REG_ESPACE; + + /* Set the bits corresponding to single byte chars. */ + for (i = 0, ch = 0; i < BITSET_WORDS; ++i) + for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) + { + wint_t wch = __btowc (ch); + if (wch != WEOF) + dfa->sb_char[i] |= (bitset_word_t) 1 << j; +# ifndef _LIBC + if (isascii (ch) && wch != ch) + dfa->map_notascii = 1; +# endif + } + } + } +#endif + + if (__glibc_unlikely (dfa->nodes == NULL || dfa->state_table == NULL)) + return REG_ESPACE; + return REG_NOERROR; +} + +/* Initialize WORD_CHAR table, which indicate which character is + "word". In this case "word" means that it is the word construction + character used by some operators like "\<", "\>", etc. */ + +static void +init_word_char (re_dfa_t *dfa) +{ + int i = 0; + int j; + int ch = 0; + dfa->word_ops_used = 1; + if (__glibc_likely (dfa->map_notascii == 0)) + { + /* Avoid uint32_t and uint64_t as some non-GCC platforms lack + them, an issue when this code is used in Gnulib. */ + bitset_word_t bits0 = 0x00000000; + bitset_word_t bits1 = 0x03ff0000; + bitset_word_t bits2 = 0x87fffffe; + bitset_word_t bits3 = 0x07fffffe; + if (BITSET_WORD_BITS == 64) + { + /* Pacify gcc -Woverflow on 32-bit platformns. */ + dfa->word_char[0] = bits1 << 31 << 1 | bits0; + dfa->word_char[1] = bits3 << 31 << 1 | bits2; + i = 2; + } + else if (BITSET_WORD_BITS == 32) + { + dfa->word_char[0] = bits0; + dfa->word_char[1] = bits1; + dfa->word_char[2] = bits2; + dfa->word_char[3] = bits3; + i = 4; + } + else + goto general_case; + ch = 128; + + if (__glibc_likely (dfa->is_utf8)) + { + memset (&dfa->word_char[i], '\0', (SBC_MAX - ch) / 8); + return; + } + } + + general_case: + for (; i < BITSET_WORDS; ++i) + for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) + if (isalnum (ch) || ch == '_') + dfa->word_char[i] |= (bitset_word_t) 1 << j; +} + +/* Free the work area which are only used while compiling. */ + +static void +free_workarea_compile (regex_t *preg) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_storage_t *storage, *next; + for (storage = dfa->str_tree_storage; storage; storage = next) + { + next = storage->next; + re_free (storage); + } + dfa->str_tree_storage = NULL; + dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; + dfa->str_tree = NULL; + re_free (dfa->org_indices); + dfa->org_indices = NULL; +} + +/* Create initial states for all contexts. */ + +static reg_errcode_t +create_initial_state (re_dfa_t *dfa) +{ + Idx first, i; + reg_errcode_t err; + re_node_set init_nodes; + + /* Initial states have the epsilon closure of the node which is + the first node of the regular expression. */ + first = dfa->str_tree->first->node_idx; + dfa->init_node = first; + err = re_node_set_init_copy (&init_nodes, dfa->eclosures + first); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + + /* The back-references which are in initial states can epsilon transit, + since in this case all of the subexpressions can be null. + Then we add epsilon closures of the nodes which are the next nodes of + the back-references. */ + if (dfa->nbackref > 0) + for (i = 0; i < init_nodes.nelem; ++i) + { + Idx node_idx = init_nodes.elems[i]; + re_token_type_t type = dfa->nodes[node_idx].type; + + Idx clexp_idx; + if (type != OP_BACK_REF) + continue; + for (clexp_idx = 0; clexp_idx < init_nodes.nelem; ++clexp_idx) + { + re_token_t *clexp_node; + clexp_node = dfa->nodes + init_nodes.elems[clexp_idx]; + if (clexp_node->type == OP_CLOSE_SUBEXP + && clexp_node->opr.idx == dfa->nodes[node_idx].opr.idx) + break; + } + if (clexp_idx == init_nodes.nelem) + continue; + + if (type == OP_BACK_REF) + { + Idx dest_idx = dfa->edests[node_idx].elems[0]; + if (!re_node_set_contains (&init_nodes, dest_idx)) + { + reg_errcode_t merge_err + = re_node_set_merge (&init_nodes, dfa->eclosures + dest_idx); + if (merge_err != REG_NOERROR) + return merge_err; + i = 0; + } + } + } + + /* It must be the first time to invoke acquire_state. */ + dfa->init_state = re_acquire_state_context (&err, dfa, &init_nodes, 0); + /* We don't check ERR here, since the initial state must not be NULL. */ + if (__glibc_unlikely (dfa->init_state == NULL)) + return err; + if (dfa->init_state->has_constraint) + { + dfa->init_state_word = re_acquire_state_context (&err, dfa, &init_nodes, + CONTEXT_WORD); + dfa->init_state_nl = re_acquire_state_context (&err, dfa, &init_nodes, + CONTEXT_NEWLINE); + dfa->init_state_begbuf = re_acquire_state_context (&err, dfa, + &init_nodes, + CONTEXT_NEWLINE + | CONTEXT_BEGBUF); + if (__glibc_unlikely (dfa->init_state_word == NULL + || dfa->init_state_nl == NULL + || dfa->init_state_begbuf == NULL)) + return err; + } + else + dfa->init_state_word = dfa->init_state_nl + = dfa->init_state_begbuf = dfa->init_state; + + re_node_set_free (&init_nodes); + return REG_NOERROR; +} + +#ifdef RE_ENABLE_I18N +/* If it is possible to do searching in single byte encoding instead of UTF-8 + to speed things up, set dfa->mb_cur_max to 1, clear is_utf8 and change + DFA nodes where needed. */ + +static void +optimize_utf8 (re_dfa_t *dfa) +{ + Idx node; + int i; + bool mb_chars = false; + bool has_period = false; + + for (node = 0; node < dfa->nodes_len; ++node) + switch (dfa->nodes[node].type) + { + case CHARACTER: + if (dfa->nodes[node].opr.c >= ASCII_CHARS) + mb_chars = true; + break; + case ANCHOR: + switch (dfa->nodes[node].opr.ctx_type) + { + case LINE_FIRST: + case LINE_LAST: + case BUF_FIRST: + case BUF_LAST: + break; + default: + /* Word anchors etc. cannot be handled. It's okay to test + opr.ctx_type since constraints (for all DFA nodes) are + created by ORing one or more opr.ctx_type values. */ + return; + } + break; + case OP_PERIOD: + has_period = true; + break; + case OP_BACK_REF: + case OP_ALT: + case END_OF_RE: + case OP_DUP_ASTERISK: + case OP_OPEN_SUBEXP: + case OP_CLOSE_SUBEXP: + break; + case COMPLEX_BRACKET: + return; + case SIMPLE_BRACKET: + /* Just double check. */ + { + int rshift = (ASCII_CHARS % BITSET_WORD_BITS == 0 + ? 0 + : BITSET_WORD_BITS - ASCII_CHARS % BITSET_WORD_BITS); + for (i = ASCII_CHARS / BITSET_WORD_BITS; i < BITSET_WORDS; ++i) + { + if (dfa->nodes[node].opr.sbcset[i] >> rshift != 0) + return; + rshift = 0; + } + } + break; + default: + abort (); + } + + if (mb_chars || has_period) + for (node = 0; node < dfa->nodes_len; ++node) + { + if (dfa->nodes[node].type == CHARACTER + && dfa->nodes[node].opr.c >= ASCII_CHARS) + dfa->nodes[node].mb_partial = 0; + else if (dfa->nodes[node].type == OP_PERIOD) + dfa->nodes[node].type = OP_UTF8_PERIOD; + } + + /* The search can be in single byte locale. */ + dfa->mb_cur_max = 1; + dfa->is_utf8 = 0; + dfa->has_mb_node = dfa->nbackref > 0 || has_period; +} +#endif + +/* Analyze the structure tree, and calculate "first", "next", "edest", + "eclosure", and "inveclosure". */ + +static reg_errcode_t +analyze (regex_t *preg) +{ + re_dfa_t *dfa = preg->buffer; + reg_errcode_t ret; + + /* Allocate arrays. */ + dfa->nexts = re_malloc (Idx, dfa->nodes_alloc); + dfa->org_indices = re_malloc (Idx, dfa->nodes_alloc); + dfa->edests = re_malloc (re_node_set, dfa->nodes_alloc); + dfa->eclosures = re_malloc (re_node_set, dfa->nodes_alloc); + if (__glibc_unlikely (dfa->nexts == NULL || dfa->org_indices == NULL + || dfa->edests == NULL || dfa->eclosures == NULL)) + return REG_ESPACE; + + dfa->subexp_map = re_malloc (Idx, preg->re_nsub); + if (dfa->subexp_map != NULL) + { + Idx i; + for (i = 0; i < preg->re_nsub; i++) + dfa->subexp_map[i] = i; + preorder (dfa->str_tree, optimize_subexps, dfa); + for (i = 0; i < preg->re_nsub; i++) + if (dfa->subexp_map[i] != i) + break; + if (i == preg->re_nsub) + { + re_free (dfa->subexp_map); + dfa->subexp_map = NULL; + } + } + + ret = postorder (dfa->str_tree, lower_subexps, preg); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + ret = postorder (dfa->str_tree, calc_first, dfa); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + preorder (dfa->str_tree, calc_next, dfa); + ret = preorder (dfa->str_tree, link_nfa_nodes, dfa); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + ret = calc_eclosure (dfa); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + + /* We only need this during the prune_impossible_nodes pass in regexec.c; + skip it if p_i_n will not run, as calc_inveclosure can be quadratic. */ + if ((!preg->no_sub && preg->re_nsub > 0 && dfa->has_plural_match) + || dfa->nbackref) + { + dfa->inveclosures = re_malloc (re_node_set, dfa->nodes_len); + if (__glibc_unlikely (dfa->inveclosures == NULL)) + return REG_ESPACE; + ret = calc_inveclosure (dfa); + } + + return ret; +} + +/* Our parse trees are very unbalanced, so we cannot use a stack to + implement parse tree visits. Instead, we use parent pointers and + some hairy code in these two functions. */ +static reg_errcode_t +postorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), + void *extra) +{ + bin_tree_t *node, *prev; + + for (node = root; ; ) + { + /* Descend down the tree, preferably to the left (or to the right + if that's the only child). */ + while (node->left || node->right) + if (node->left) + node = node->left; + else + node = node->right; + + do + { + reg_errcode_t err = fn (extra, node); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + if (node->parent == NULL) + return REG_NOERROR; + prev = node; + node = node->parent; + } + /* Go up while we have a node that is reached from the right. */ + while (node->right == prev || node->right == NULL); + node = node->right; + } +} + +static reg_errcode_t +preorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), + void *extra) +{ + bin_tree_t *node; + + for (node = root; ; ) + { + reg_errcode_t err = fn (extra, node); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + + /* Go to the left node, or up and to the right. */ + if (node->left) + node = node->left; + else + { + bin_tree_t *prev = NULL; + while (node->right == prev || node->right == NULL) + { + prev = node; + node = node->parent; + if (!node) + return REG_NOERROR; + } + node = node->right; + } + } +} + +/* Optimization pass: if a SUBEXP is entirely contained, strip it and tell + re_search_internal to map the inner one's opr.idx to this one's. Adjust + backreferences as well. Requires a preorder visit. */ +static reg_errcode_t +optimize_subexps (void *extra, bin_tree_t *node) +{ + re_dfa_t *dfa = (re_dfa_t *) extra; + + if (node->token.type == OP_BACK_REF && dfa->subexp_map) + { + int idx = node->token.opr.idx; + node->token.opr.idx = dfa->subexp_map[idx]; + dfa->used_bkref_map |= 1 << node->token.opr.idx; + } + + else if (node->token.type == SUBEXP + && node->left && node->left->token.type == SUBEXP) + { + Idx other_idx = node->left->token.opr.idx; + + node->left = node->left->left; + if (node->left) + node->left->parent = node; + + dfa->subexp_map[other_idx] = dfa->subexp_map[node->token.opr.idx]; + if (other_idx < BITSET_WORD_BITS) + dfa->used_bkref_map &= ~((bitset_word_t) 1 << other_idx); + } + + return REG_NOERROR; +} + +/* Lowering pass: Turn each SUBEXP node into the appropriate concatenation + of OP_OPEN_SUBEXP, the body of the SUBEXP (if any) and OP_CLOSE_SUBEXP. */ +static reg_errcode_t +lower_subexps (void *extra, bin_tree_t *node) +{ + regex_t *preg = (regex_t *) extra; + reg_errcode_t err = REG_NOERROR; + + if (node->left && node->left->token.type == SUBEXP) + { + node->left = lower_subexp (&err, preg, node->left); + if (node->left) + node->left->parent = node; + } + if (node->right && node->right->token.type == SUBEXP) + { + node->right = lower_subexp (&err, preg, node->right); + if (node->right) + node->right->parent = node; + } + + return err; +} + +static bin_tree_t * +lower_subexp (reg_errcode_t *err, regex_t *preg, bin_tree_t *node) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_t *body = node->left; + bin_tree_t *op, *cls, *tree1, *tree; + + if (preg->no_sub + /* We do not optimize empty subexpressions, because otherwise we may + have bad CONCAT nodes with NULL children. This is obviously not + very common, so we do not lose much. An example that triggers + this case is the sed "script" /\(\)/x. */ + && node->left != NULL + && (node->token.opr.idx >= BITSET_WORD_BITS + || !(dfa->used_bkref_map + & ((bitset_word_t) 1 << node->token.opr.idx)))) + return node->left; + + /* Convert the SUBEXP node to the concatenation of an + OP_OPEN_SUBEXP, the contents, and an OP_CLOSE_SUBEXP. */ + op = create_tree (dfa, NULL, NULL, OP_OPEN_SUBEXP); + cls = create_tree (dfa, NULL, NULL, OP_CLOSE_SUBEXP); + tree1 = body ? create_tree (dfa, body, cls, CONCAT) : cls; + tree = create_tree (dfa, op, tree1, CONCAT); + if (__glibc_unlikely (tree == NULL || tree1 == NULL + || op == NULL || cls == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + + op->token.opr.idx = cls->token.opr.idx = node->token.opr.idx; + op->token.opt_subexp = cls->token.opt_subexp = node->token.opt_subexp; + return tree; +} + +/* Pass 1 in building the NFA: compute FIRST and create unlinked automaton + nodes. Requires a postorder visit. */ +static reg_errcode_t +calc_first (void *extra, bin_tree_t *node) +{ + re_dfa_t *dfa = (re_dfa_t *) extra; + if (node->token.type == CONCAT) + { + node->first = node->left->first; + node->node_idx = node->left->node_idx; + } + else + { + node->first = node; + node->node_idx = re_dfa_add_node (dfa, node->token); + if (__glibc_unlikely (node->node_idx == -1)) + return REG_ESPACE; + if (node->token.type == ANCHOR) + dfa->nodes[node->node_idx].constraint = node->token.opr.ctx_type; + } + return REG_NOERROR; +} + +/* Pass 2: compute NEXT on the tree. Preorder visit. */ +static reg_errcode_t +calc_next (void *extra, bin_tree_t *node) +{ + switch (node->token.type) + { + case OP_DUP_ASTERISK: + node->left->next = node; + break; + case CONCAT: + node->left->next = node->right->first; + node->right->next = node->next; + break; + default: + if (node->left) + node->left->next = node->next; + if (node->right) + node->right->next = node->next; + break; + } + return REG_NOERROR; +} + +/* Pass 3: link all DFA nodes to their NEXT node (any order will do). */ +static reg_errcode_t +link_nfa_nodes (void *extra, bin_tree_t *node) +{ + re_dfa_t *dfa = (re_dfa_t *) extra; + Idx idx = node->node_idx; + reg_errcode_t err = REG_NOERROR; + + switch (node->token.type) + { + case CONCAT: + break; + + case END_OF_RE: + assert (node->next == NULL); + break; + + case OP_DUP_ASTERISK: + case OP_ALT: + { + Idx left, right; + dfa->has_plural_match = 1; + if (node->left != NULL) + left = node->left->first->node_idx; + else + left = node->next->node_idx; + if (node->right != NULL) + right = node->right->first->node_idx; + else + right = node->next->node_idx; + assert (left > -1); + assert (right > -1); + err = re_node_set_init_2 (dfa->edests + idx, left, right); + } + break; + + case ANCHOR: + case OP_OPEN_SUBEXP: + case OP_CLOSE_SUBEXP: + err = re_node_set_init_1 (dfa->edests + idx, node->next->node_idx); + break; + + case OP_BACK_REF: + dfa->nexts[idx] = node->next->node_idx; + if (node->token.type == OP_BACK_REF) + err = re_node_set_init_1 (dfa->edests + idx, dfa->nexts[idx]); + break; + + default: + assert (!IS_EPSILON_NODE (node->token.type)); + dfa->nexts[idx] = node->next->node_idx; + break; + } + + return err; +} + +/* Duplicate the epsilon closure of the node ROOT_NODE. + Note that duplicated nodes have constraint INIT_CONSTRAINT in addition + to their own constraint. */ + +static reg_errcode_t +duplicate_node_closure (re_dfa_t *dfa, Idx top_org_node, Idx top_clone_node, + Idx root_node, unsigned int init_constraint) +{ + Idx org_node, clone_node; + bool ok; + unsigned int constraint = init_constraint; + for (org_node = top_org_node, clone_node = top_clone_node;;) + { + Idx org_dest, clone_dest; + if (dfa->nodes[org_node].type == OP_BACK_REF) + { + /* If the back reference epsilon-transit, its destination must + also have the constraint. Then duplicate the epsilon closure + of the destination of the back reference, and store it in + edests of the back reference. */ + org_dest = dfa->nexts[org_node]; + re_node_set_empty (dfa->edests + clone_node); + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (__glibc_unlikely (clone_dest == -1)) + return REG_ESPACE; + dfa->nexts[clone_node] = dfa->nexts[org_node]; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + } + else if (dfa->edests[org_node].nelem == 0) + { + /* In case of the node can't epsilon-transit, don't duplicate the + destination and store the original destination as the + destination of the node. */ + dfa->nexts[clone_node] = dfa->nexts[org_node]; + break; + } + else if (dfa->edests[org_node].nelem == 1) + { + /* In case of the node can epsilon-transit, and it has only one + destination. */ + org_dest = dfa->edests[org_node].elems[0]; + re_node_set_empty (dfa->edests + clone_node); + /* If the node is root_node itself, it means the epsilon closure + has a loop. Then tie it to the destination of the root_node. */ + if (org_node == root_node && clone_node != org_node) + { + ok = re_node_set_insert (dfa->edests + clone_node, org_dest); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + break; + } + /* In case the node has another constraint, append it. */ + constraint |= dfa->nodes[org_node].constraint; + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (__glibc_unlikely (clone_dest == -1)) + return REG_ESPACE; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + } + else /* dfa->edests[org_node].nelem == 2 */ + { + /* In case of the node can epsilon-transit, and it has two + destinations. In the bin_tree_t and DFA, that's '|' and '*'. */ + org_dest = dfa->edests[org_node].elems[0]; + re_node_set_empty (dfa->edests + clone_node); + /* Search for a duplicated node which satisfies the constraint. */ + clone_dest = search_duplicated_node (dfa, org_dest, constraint); + if (clone_dest == -1) + { + /* There is no such duplicated node, create a new one. */ + reg_errcode_t err; + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (__glibc_unlikely (clone_dest == -1)) + return REG_ESPACE; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + err = duplicate_node_closure (dfa, org_dest, clone_dest, + root_node, constraint); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + else + { + /* There is a duplicated node which satisfies the constraint, + use it to avoid infinite loop. */ + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + } + + org_dest = dfa->edests[org_node].elems[1]; + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (__glibc_unlikely (clone_dest == -1)) + return REG_ESPACE; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + } + org_node = org_dest; + clone_node = clone_dest; + } + return REG_NOERROR; +} + +/* Search for a node which is duplicated from the node ORG_NODE, and + satisfies the constraint CONSTRAINT. */ + +static Idx +search_duplicated_node (const re_dfa_t *dfa, Idx org_node, + unsigned int constraint) +{ + Idx idx; + for (idx = dfa->nodes_len - 1; dfa->nodes[idx].duplicated && idx > 0; --idx) + { + if (org_node == dfa->org_indices[idx] + && constraint == dfa->nodes[idx].constraint) + return idx; /* Found. */ + } + return -1; /* Not found. */ +} + +/* Duplicate the node whose index is ORG_IDX and set the constraint CONSTRAINT. + Return the index of the new node, or -1 if insufficient storage is + available. */ + +static Idx +duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint) +{ + Idx dup_idx = re_dfa_add_node (dfa, dfa->nodes[org_idx]); + if (__glibc_likely (dup_idx != -1)) + { + dfa->nodes[dup_idx].constraint = constraint; + dfa->nodes[dup_idx].constraint |= dfa->nodes[org_idx].constraint; + dfa->nodes[dup_idx].duplicated = 1; + + /* Store the index of the original node. */ + dfa->org_indices[dup_idx] = org_idx; + } + return dup_idx; +} + +static reg_errcode_t +calc_inveclosure (re_dfa_t *dfa) +{ + Idx src, idx; + bool ok; + for (idx = 0; idx < dfa->nodes_len; ++idx) + re_node_set_init_empty (dfa->inveclosures + idx); + + for (src = 0; src < dfa->nodes_len; ++src) + { + Idx *elems = dfa->eclosures[src].elems; + for (idx = 0; idx < dfa->eclosures[src].nelem; ++idx) + { + ok = re_node_set_insert_last (dfa->inveclosures + elems[idx], src); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + } + } + + return REG_NOERROR; +} + +/* Calculate "eclosure" for all the node in DFA. */ + +static reg_errcode_t +calc_eclosure (re_dfa_t *dfa) +{ + Idx node_idx; + bool incomplete; +#ifdef DEBUG + assert (dfa->nodes_len > 0); +#endif + incomplete = false; + /* For each nodes, calculate epsilon closure. */ + for (node_idx = 0; ; ++node_idx) + { + reg_errcode_t err; + re_node_set eclosure_elem; + if (node_idx == dfa->nodes_len) + { + if (!incomplete) + break; + incomplete = false; + node_idx = 0; + } + +#ifdef DEBUG + assert (dfa->eclosures[node_idx].nelem != -1); +#endif + + /* If we have already calculated, skip it. */ + if (dfa->eclosures[node_idx].nelem != 0) + continue; + /* Calculate epsilon closure of 'node_idx'. */ + err = calc_eclosure_iter (&eclosure_elem, dfa, node_idx, true); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + + if (dfa->eclosures[node_idx].nelem == 0) + { + incomplete = true; + re_node_set_free (&eclosure_elem); + } + } + return REG_NOERROR; +} + +/* Calculate epsilon closure of NODE. */ + +static reg_errcode_t +calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, Idx node, bool root) +{ + reg_errcode_t err; + Idx i; + re_node_set eclosure; + bool ok; + bool incomplete = false; + err = re_node_set_alloc (&eclosure, dfa->edests[node].nelem + 1); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + + /* This indicates that we are calculating this node now. + We reference this value to avoid infinite loop. */ + dfa->eclosures[node].nelem = -1; + + /* If the current node has constraints, duplicate all nodes + since they must inherit the constraints. */ + if (dfa->nodes[node].constraint + && dfa->edests[node].nelem + && !dfa->nodes[dfa->edests[node].elems[0]].duplicated) + { + err = duplicate_node_closure (dfa, node, node, node, + dfa->nodes[node].constraint); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + + /* Expand each epsilon destination nodes. */ + if (IS_EPSILON_NODE(dfa->nodes[node].type)) + for (i = 0; i < dfa->edests[node].nelem; ++i) + { + re_node_set eclosure_elem; + Idx edest = dfa->edests[node].elems[i]; + /* If calculating the epsilon closure of 'edest' is in progress, + return intermediate result. */ + if (dfa->eclosures[edest].nelem == -1) + { + incomplete = true; + continue; + } + /* If we haven't calculated the epsilon closure of 'edest' yet, + calculate now. Otherwise use calculated epsilon closure. */ + if (dfa->eclosures[edest].nelem == 0) + { + err = calc_eclosure_iter (&eclosure_elem, dfa, edest, false); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + else + eclosure_elem = dfa->eclosures[edest]; + /* Merge the epsilon closure of 'edest'. */ + err = re_node_set_merge (&eclosure, &eclosure_elem); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + /* If the epsilon closure of 'edest' is incomplete, + the epsilon closure of this node is also incomplete. */ + if (dfa->eclosures[edest].nelem == 0) + { + incomplete = true; + re_node_set_free (&eclosure_elem); + } + } + + /* An epsilon closure includes itself. */ + ok = re_node_set_insert (&eclosure, node); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + if (incomplete && !root) + dfa->eclosures[node].nelem = 0; + else + dfa->eclosures[node] = eclosure; + *new_set = eclosure; + return REG_NOERROR; +} + +/* Functions for token which are used in the parser. */ + +/* Fetch a token from INPUT. + We must not use this function inside bracket expressions. */ + +static void +fetch_token (re_token_t *result, re_string_t *input, reg_syntax_t syntax) +{ + re_string_skip_bytes (input, peek_token (result, input, syntax)); +} + +/* Peek a token from INPUT, and return the length of the token. + We must not use this function inside bracket expressions. */ + +static int +peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax) +{ + unsigned char c; + + if (re_string_eoi (input)) + { + token->type = END_OF_RE; + return 0; + } + + c = re_string_peek_byte (input, 0); + token->opr.c = c; + + token->word_char = 0; +#ifdef RE_ENABLE_I18N + token->mb_partial = 0; + if (input->mb_cur_max > 1 && + !re_string_first_byte (input, re_string_cur_idx (input))) + { + token->type = CHARACTER; + token->mb_partial = 1; + return 1; + } +#endif + if (c == '\\') + { + unsigned char c2; + if (re_string_cur_idx (input) + 1 >= re_string_length (input)) + { + token->type = BACK_SLASH; + return 1; + } + + c2 = re_string_peek_byte_case (input, 1); + token->opr.c = c2; + token->type = CHARACTER; +#ifdef RE_ENABLE_I18N + if (input->mb_cur_max > 1) + { + wint_t wc = re_string_wchar_at (input, + re_string_cur_idx (input) + 1); + token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; + } + else +#endif + token->word_char = IS_WORD_CHAR (c2) != 0; + + switch (c2) + { + case '|': + if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_NO_BK_VBAR)) + token->type = OP_ALT; + break; + case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + if (!(syntax & RE_NO_BK_REFS)) + { + token->type = OP_BACK_REF; + token->opr.idx = c2 - '1'; + } + break; + case '<': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = WORD_FIRST; + } + break; + case '>': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = WORD_LAST; + } + break; + case 'b': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = WORD_DELIM; + } + break; + case 'B': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = NOT_WORD_DELIM; + } + break; + case 'w': + if (!(syntax & RE_NO_GNU_OPS)) + token->type = OP_WORD; + break; + case 'W': + if (!(syntax & RE_NO_GNU_OPS)) + token->type = OP_NOTWORD; + break; + case 's': + if (!(syntax & RE_NO_GNU_OPS)) + token->type = OP_SPACE; + break; + case 'S': + if (!(syntax & RE_NO_GNU_OPS)) + token->type = OP_NOTSPACE; + break; + case '`': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = BUF_FIRST; + } + break; + case '\'': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = BUF_LAST; + } + break; + case '(': + if (!(syntax & RE_NO_BK_PARENS)) + token->type = OP_OPEN_SUBEXP; + break; + case ')': + if (!(syntax & RE_NO_BK_PARENS)) + token->type = OP_CLOSE_SUBEXP; + break; + case '+': + if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) + token->type = OP_DUP_PLUS; + break; + case '?': + if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) + token->type = OP_DUP_QUESTION; + break; + case '{': + if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) + token->type = OP_OPEN_DUP_NUM; + break; + case '}': + if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) + token->type = OP_CLOSE_DUP_NUM; + break; + default: + break; + } + return 2; + } + + token->type = CHARACTER; +#ifdef RE_ENABLE_I18N + if (input->mb_cur_max > 1) + { + wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input)); + token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; + } + else +#endif + token->word_char = IS_WORD_CHAR (token->opr.c); + + switch (c) + { + case '\n': + if (syntax & RE_NEWLINE_ALT) + token->type = OP_ALT; + break; + case '|': + if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_NO_BK_VBAR)) + token->type = OP_ALT; + break; + case '*': + token->type = OP_DUP_ASTERISK; + break; + case '+': + if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) + token->type = OP_DUP_PLUS; + break; + case '?': + if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) + token->type = OP_DUP_QUESTION; + break; + case '{': + if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) + token->type = OP_OPEN_DUP_NUM; + break; + case '}': + if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) + token->type = OP_CLOSE_DUP_NUM; + break; + case '(': + if (syntax & RE_NO_BK_PARENS) + token->type = OP_OPEN_SUBEXP; + break; + case ')': + if (syntax & RE_NO_BK_PARENS) + token->type = OP_CLOSE_SUBEXP; + break; + case '[': + token->type = OP_OPEN_BRACKET; + break; + case '.': + token->type = OP_PERIOD; + break; + case '^': + if (!(syntax & (RE_CONTEXT_INDEP_ANCHORS | RE_CARET_ANCHORS_HERE)) && + re_string_cur_idx (input) != 0) + { + char prev = re_string_peek_byte (input, -1); + if (!(syntax & RE_NEWLINE_ALT) || prev != '\n') + break; + } + token->type = ANCHOR; + token->opr.ctx_type = LINE_FIRST; + break; + case '$': + if (!(syntax & RE_CONTEXT_INDEP_ANCHORS) && + re_string_cur_idx (input) + 1 != re_string_length (input)) + { + re_token_t next; + re_string_skip_bytes (input, 1); + peek_token (&next, input, syntax); + re_string_skip_bytes (input, -1); + if (next.type != OP_ALT && next.type != OP_CLOSE_SUBEXP) + break; + } + token->type = ANCHOR; + token->opr.ctx_type = LINE_LAST; + break; + default: + break; + } + return 1; +} + +/* Peek a token from INPUT, and return the length of the token. + We must not use this function out of bracket expressions. */ + +static int +peek_token_bracket (re_token_t *token, re_string_t *input, reg_syntax_t syntax) +{ + unsigned char c; + if (re_string_eoi (input)) + { + token->type = END_OF_RE; + return 0; + } + c = re_string_peek_byte (input, 0); + token->opr.c = c; + +#ifdef RE_ENABLE_I18N + if (input->mb_cur_max > 1 && + !re_string_first_byte (input, re_string_cur_idx (input))) + { + token->type = CHARACTER; + return 1; + } +#endif /* RE_ENABLE_I18N */ + + if (c == '\\' && (syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) + && re_string_cur_idx (input) + 1 < re_string_length (input)) + { + /* In this case, '\' escape a character. */ + unsigned char c2; + re_string_skip_bytes (input, 1); + c2 = re_string_peek_byte (input, 0); + token->opr.c = c2; + token->type = CHARACTER; + return 1; + } + if (c == '[') /* '[' is a special char in a bracket exps. */ + { + unsigned char c2; + int token_len; + if (re_string_cur_idx (input) + 1 < re_string_length (input)) + c2 = re_string_peek_byte (input, 1); + else + c2 = 0; + token->opr.c = c2; + token_len = 2; + switch (c2) + { + case '.': + token->type = OP_OPEN_COLL_ELEM; + break; + + case '=': + token->type = OP_OPEN_EQUIV_CLASS; + break; + + case ':': + if (syntax & RE_CHAR_CLASSES) + { + token->type = OP_OPEN_CHAR_CLASS; + break; + } + FALLTHROUGH; + default: + token->type = CHARACTER; + token->opr.c = c; + token_len = 1; + break; + } + return token_len; + } + switch (c) + { + case '-': + token->type = OP_CHARSET_RANGE; + break; + case ']': + token->type = OP_CLOSE_BRACKET; + break; + case '^': + token->type = OP_NON_MATCH_LIST; + break; + default: + token->type = CHARACTER; + } + return 1; +} + +/* Functions for parser. */ + +/* Entry point of the parser. + Parse the regular expression REGEXP and return the structure tree. + If an error occurs, ERR is set by error code, and return NULL. + This function build the following tree, from regular expression <reg_exp>: + CAT + / \ + / \ + <reg_exp> EOR + + CAT means concatenation. + EOR means end of regular expression. */ + +static bin_tree_t * +parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax, + reg_errcode_t *err) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_t *tree, *eor, *root; + re_token_t current_token; + dfa->syntax = syntax; + fetch_token (¤t_token, regexp, syntax | RE_CARET_ANCHORS_HERE); + tree = parse_reg_exp (regexp, preg, ¤t_token, syntax, 0, err); + if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) + return NULL; + eor = create_tree (dfa, NULL, NULL, END_OF_RE); + if (tree != NULL) + root = create_tree (dfa, tree, eor, CONCAT); + else + root = eor; + if (__glibc_unlikely (eor == NULL || root == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + return root; +} + +/* This function build the following tree, from regular expression + <branch1>|<branch2>: + ALT + / \ + / \ + <branch1> <branch2> + + ALT means alternative, which represents the operator '|'. */ + +static bin_tree_t * +parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, + reg_syntax_t syntax, Idx nest, reg_errcode_t *err) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_t *tree, *branch = NULL; + bitset_word_t initial_bkref_map = dfa->completed_bkref_map; + tree = parse_branch (regexp, preg, token, syntax, nest, err); + if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) + return NULL; + + while (token->type == OP_ALT) + { + fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); + if (token->type != OP_ALT && token->type != END_OF_RE + && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) + { + bitset_word_t accumulated_bkref_map = dfa->completed_bkref_map; + dfa->completed_bkref_map = initial_bkref_map; + branch = parse_branch (regexp, preg, token, syntax, nest, err); + if (__glibc_unlikely (*err != REG_NOERROR && branch == NULL)) + { + if (tree != NULL) + postorder (tree, free_tree, NULL); + return NULL; + } + dfa->completed_bkref_map |= accumulated_bkref_map; + } + else + branch = NULL; + tree = create_tree (dfa, tree, branch, OP_ALT); + if (__glibc_unlikely (tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + } + return tree; +} + +/* This function build the following tree, from regular expression + <exp1><exp2>: + CAT + / \ + / \ + <exp1> <exp2> + + CAT means concatenation. */ + +static bin_tree_t * +parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token, + reg_syntax_t syntax, Idx nest, reg_errcode_t *err) +{ + bin_tree_t *tree, *expr; + re_dfa_t *dfa = preg->buffer; + tree = parse_expression (regexp, preg, token, syntax, nest, err); + if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) + return NULL; + + while (token->type != OP_ALT && token->type != END_OF_RE + && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) + { + expr = parse_expression (regexp, preg, token, syntax, nest, err); + if (__glibc_unlikely (*err != REG_NOERROR && expr == NULL)) + { + if (tree != NULL) + postorder (tree, free_tree, NULL); + return NULL; + } + if (tree != NULL && expr != NULL) + { + bin_tree_t *newtree = create_tree (dfa, tree, expr, CONCAT); + if (newtree == NULL) + { + postorder (expr, free_tree, NULL); + postorder (tree, free_tree, NULL); + *err = REG_ESPACE; + return NULL; + } + tree = newtree; + } + else if (tree == NULL) + tree = expr; + /* Otherwise expr == NULL, we don't need to create new tree. */ + } + return tree; +} + +/* This function build the following tree, from regular expression a*: + * + | + a +*/ + +static bin_tree_t * +parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token, + reg_syntax_t syntax, Idx nest, reg_errcode_t *err) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_t *tree; + switch (token->type) + { + case CHARACTER: + tree = create_token_tree (dfa, NULL, NULL, token); + if (__glibc_unlikely (tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + { + while (!re_string_eoi (regexp) + && !re_string_first_byte (regexp, re_string_cur_idx (regexp))) + { + bin_tree_t *mbc_remain; + fetch_token (token, regexp, syntax); + mbc_remain = create_token_tree (dfa, NULL, NULL, token); + tree = create_tree (dfa, tree, mbc_remain, CONCAT); + if (__glibc_unlikely (mbc_remain == NULL || tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + } + } +#endif + break; + + case OP_OPEN_SUBEXP: + tree = parse_sub_exp (regexp, preg, token, syntax, nest + 1, err); + if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) + return NULL; + break; + + case OP_OPEN_BRACKET: + tree = parse_bracket_exp (regexp, dfa, token, syntax, err); + if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) + return NULL; + break; + + case OP_BACK_REF: + if (!__glibc_likely (dfa->completed_bkref_map & (1 << token->opr.idx))) + { + *err = REG_ESUBREG; + return NULL; + } + dfa->used_bkref_map |= 1 << token->opr.idx; + tree = create_token_tree (dfa, NULL, NULL, token); + if (__glibc_unlikely (tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + ++dfa->nbackref; + dfa->has_mb_node = 1; + break; + + case OP_OPEN_DUP_NUM: + if (syntax & RE_CONTEXT_INVALID_DUP) + { + *err = REG_BADRPT; + return NULL; + } + FALLTHROUGH; + case OP_DUP_ASTERISK: + case OP_DUP_PLUS: + case OP_DUP_QUESTION: + if (syntax & RE_CONTEXT_INVALID_OPS) + { + *err = REG_BADRPT; + return NULL; + } + else if (syntax & RE_CONTEXT_INDEP_OPS) + { + fetch_token (token, regexp, syntax); + return parse_expression (regexp, preg, token, syntax, nest, err); + } + FALLTHROUGH; + case OP_CLOSE_SUBEXP: + if ((token->type == OP_CLOSE_SUBEXP) && + !(syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)) + { + *err = REG_ERPAREN; + return NULL; + } + FALLTHROUGH; + case OP_CLOSE_DUP_NUM: + /* We treat it as a normal character. */ + + /* Then we can these characters as normal characters. */ + token->type = CHARACTER; + /* mb_partial and word_char bits should be initialized already + by peek_token. */ + tree = create_token_tree (dfa, NULL, NULL, token); + if (__glibc_unlikely (tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + break; + + case ANCHOR: + if ((token->opr.ctx_type + & (WORD_DELIM | NOT_WORD_DELIM | WORD_FIRST | WORD_LAST)) + && dfa->word_ops_used == 0) + init_word_char (dfa); + if (token->opr.ctx_type == WORD_DELIM + || token->opr.ctx_type == NOT_WORD_DELIM) + { + bin_tree_t *tree_first, *tree_last; + if (token->opr.ctx_type == WORD_DELIM) + { + token->opr.ctx_type = WORD_FIRST; + tree_first = create_token_tree (dfa, NULL, NULL, token); + token->opr.ctx_type = WORD_LAST; + } + else + { + token->opr.ctx_type = INSIDE_WORD; + tree_first = create_token_tree (dfa, NULL, NULL, token); + token->opr.ctx_type = INSIDE_NOTWORD; + } + tree_last = create_token_tree (dfa, NULL, NULL, token); + tree = create_tree (dfa, tree_first, tree_last, OP_ALT); + if (__glibc_unlikely (tree_first == NULL || tree_last == NULL + || tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + } + else + { + tree = create_token_tree (dfa, NULL, NULL, token); + if (__glibc_unlikely (tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + } + /* We must return here, since ANCHORs can't be followed + by repetition operators. + eg. RE"^*" is invalid or "<ANCHOR(^)><CHAR(*)>", + it must not be "<ANCHOR(^)><REPEAT(*)>". */ + fetch_token (token, regexp, syntax); + return tree; + + case OP_PERIOD: + tree = create_token_tree (dfa, NULL, NULL, token); + if (__glibc_unlikely (tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + if (dfa->mb_cur_max > 1) + dfa->has_mb_node = 1; + break; + + case OP_WORD: + case OP_NOTWORD: + tree = build_charclass_op (dfa, regexp->trans, + "alnum", + "_", + token->type == OP_NOTWORD, err); + if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) + return NULL; + break; + + case OP_SPACE: + case OP_NOTSPACE: + tree = build_charclass_op (dfa, regexp->trans, + "space", + "", + token->type == OP_NOTSPACE, err); + if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) + return NULL; + break; + + case OP_ALT: + case END_OF_RE: + return NULL; + + case BACK_SLASH: + *err = REG_EESCAPE; + return NULL; + + default: + /* Must not happen? */ +#ifdef DEBUG + assert (0); +#endif + return NULL; + } + fetch_token (token, regexp, syntax); + + while (token->type == OP_DUP_ASTERISK || token->type == OP_DUP_PLUS + || token->type == OP_DUP_QUESTION || token->type == OP_OPEN_DUP_NUM) + { + bin_tree_t *dup_tree = parse_dup_op (tree, regexp, dfa, token, + syntax, err); + if (__glibc_unlikely (*err != REG_NOERROR && dup_tree == NULL)) + { + if (tree != NULL) + postorder (tree, free_tree, NULL); + return NULL; + } + tree = dup_tree; + /* In BRE consecutive duplications are not allowed. */ + if ((syntax & RE_CONTEXT_INVALID_DUP) + && (token->type == OP_DUP_ASTERISK + || token->type == OP_OPEN_DUP_NUM)) + { + if (tree != NULL) + postorder (tree, free_tree, NULL); + *err = REG_BADRPT; + return NULL; + } + } + + return tree; +} + +/* This function build the following tree, from regular expression + (<reg_exp>): + SUBEXP + | + <reg_exp> +*/ + +static bin_tree_t * +parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, + reg_syntax_t syntax, Idx nest, reg_errcode_t *err) +{ + re_dfa_t *dfa = preg->buffer; + bin_tree_t *tree; + size_t cur_nsub; + cur_nsub = preg->re_nsub++; + + fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); + + /* The subexpression may be a null string. */ + if (token->type == OP_CLOSE_SUBEXP) + tree = NULL; + else + { + tree = parse_reg_exp (regexp, preg, token, syntax, nest, err); + if (__glibc_unlikely (*err == REG_NOERROR + && token->type != OP_CLOSE_SUBEXP)) + { + if (tree != NULL) + postorder (tree, free_tree, NULL); + *err = REG_EPAREN; + } + if (__glibc_unlikely (*err != REG_NOERROR)) + return NULL; + } + + if (cur_nsub <= '9' - '1') + dfa->completed_bkref_map |= 1 << cur_nsub; + + tree = create_tree (dfa, tree, NULL, SUBEXP); + if (__glibc_unlikely (tree == NULL)) + { + *err = REG_ESPACE; + return NULL; + } + tree->token.opr.idx = cur_nsub; + return tree; +} + +/* This function parse repetition operators like "*", "+", "{1,3}" etc. */ + +static bin_tree_t * +parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa, + re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err) +{ + bin_tree_t *tree = NULL, *old_tree = NULL; + Idx i, start, end, start_idx = re_string_cur_idx (regexp); + re_token_t start_token = *token; + + if (token->type == OP_OPEN_DUP_NUM) + { + end = 0; + start = fetch_number (regexp, token, syntax); + if (start == -1) + { + if (token->type == CHARACTER && token->opr.c == ',') + start = 0; /* We treat "{,m}" as "{0,m}". */ + else + { + *err = REG_BADBR; /* <re>{} is invalid. */ + return NULL; + } + } + if (__glibc_likely (start != -2)) + { + /* We treat "{n}" as "{n,n}". */ + end = ((token->type == OP_CLOSE_DUP_NUM) ? start + : ((token->type == CHARACTER && token->opr.c == ',') + ? fetch_number (regexp, token, syntax) : -2)); + } + if (__glibc_unlikely (start == -2 || end == -2)) + { + /* Invalid sequence. */ + if (__glibc_unlikely (!(syntax & RE_INVALID_INTERVAL_ORD))) + { + if (token->type == END_OF_RE) + *err = REG_EBRACE; + else + *err = REG_BADBR; + + return NULL; + } + + /* If the syntax bit is set, rollback. */ + re_string_set_index (regexp, start_idx); + *token = start_token; + token->type = CHARACTER; + /* mb_partial and word_char bits should be already initialized by + peek_token. */ + return elem; + } + + if (__glibc_unlikely ((end != -1 && start > end) + || token->type != OP_CLOSE_DUP_NUM)) + { + /* First number greater than second. */ + *err = REG_BADBR; + return NULL; + } + + if (__glibc_unlikely (RE_DUP_MAX < (end == -1 ? start : end))) + { + *err = REG_ESIZE; + return NULL; + } + } + else + { + start = (token->type == OP_DUP_PLUS) ? 1 : 0; + end = (token->type == OP_DUP_QUESTION) ? 1 : -1; + } + + fetch_token (token, regexp, syntax); + + if (__glibc_unlikely (elem == NULL)) + return NULL; + if (__glibc_unlikely (start == 0 && end == 0)) + { + postorder (elem, free_tree, NULL); + return NULL; + } + + /* Extract "<re>{n,m}" to "<re><re>...<re><re>{0,<m-n>}". */ + if (__glibc_unlikely (start > 0)) + { + tree = elem; + for (i = 2; i <= start; ++i) + { + elem = duplicate_tree (elem, dfa); + tree = create_tree (dfa, tree, elem, CONCAT); + if (__glibc_unlikely (elem == NULL || tree == NULL)) + goto parse_dup_op_espace; + } + + if (start == end) + return tree; + + /* Duplicate ELEM before it is marked optional. */ + elem = duplicate_tree (elem, dfa); + if (__glibc_unlikely (elem == NULL)) + goto parse_dup_op_espace; + old_tree = tree; + } + else + old_tree = NULL; + + if (elem->token.type == SUBEXP) + { + uintptr_t subidx = elem->token.opr.idx; + postorder (elem, mark_opt_subexp, (void *) subidx); + } + + tree = create_tree (dfa, elem, NULL, + (end == -1 ? OP_DUP_ASTERISK : OP_ALT)); + if (__glibc_unlikely (tree == NULL)) + goto parse_dup_op_espace; + + /* This loop is actually executed only when end != -1, + to rewrite <re>{0,n} as (<re>(<re>...<re>?)?)?... We have + already created the start+1-th copy. */ + if (TYPE_SIGNED (Idx) || end != -1) + for (i = start + 2; i <= end; ++i) + { + elem = duplicate_tree (elem, dfa); + tree = create_tree (dfa, tree, elem, CONCAT); + if (__glibc_unlikely (elem == NULL || tree == NULL)) + goto parse_dup_op_espace; + + tree = create_tree (dfa, tree, NULL, OP_ALT); + if (__glibc_unlikely (tree == NULL)) + goto parse_dup_op_espace; + } + + if (old_tree) + tree = create_tree (dfa, old_tree, tree, CONCAT); + + return tree; + + parse_dup_op_espace: + *err = REG_ESPACE; + return NULL; +} + +/* Size of the names for collating symbol/equivalence_class/character_class. + I'm not sure, but maybe enough. */ +#define BRACKET_NAME_BUF_SIZE 32 + +#ifndef _LIBC + +# ifdef RE_ENABLE_I18N +/* Convert the byte B to the corresponding wide character. In a + unibyte locale, treat B as itself. In a multibyte locale, return + WEOF if B is an encoding error. */ +static wint_t +parse_byte (unsigned char b, re_charset_t *mbcset) +{ + return mbcset == NULL ? b : __btowc (b); +} +# endif + + /* Local function for parse_bracket_exp only used in case of NOT _LIBC. + Build the range expression which starts from START_ELEM, and ends + at END_ELEM. The result are written to MBCSET and SBCSET. + RANGE_ALLOC is the allocated size of mbcset->range_starts, and + mbcset->range_ends, is a pointer argument since we may + update it. */ + +static reg_errcode_t +# ifdef RE_ENABLE_I18N +build_range_exp (const reg_syntax_t syntax, + bitset_t sbcset, + re_charset_t *mbcset, + Idx *range_alloc, + const bracket_elem_t *start_elem, + const bracket_elem_t *end_elem) +# else /* not RE_ENABLE_I18N */ +build_range_exp (const reg_syntax_t syntax, + bitset_t sbcset, + const bracket_elem_t *start_elem, + const bracket_elem_t *end_elem) +# endif /* not RE_ENABLE_I18N */ +{ + unsigned int start_ch, end_ch; + /* Equivalence Classes and Character Classes can't be a range start/end. */ + if (__glibc_unlikely (start_elem->type == EQUIV_CLASS + || start_elem->type == CHAR_CLASS + || end_elem->type == EQUIV_CLASS + || end_elem->type == CHAR_CLASS)) + return REG_ERANGE; + + /* We can handle no multi character collating elements without libc + support. */ + if (__glibc_unlikely ((start_elem->type == COLL_SYM + && strlen ((char *) start_elem->opr.name) > 1) + || (end_elem->type == COLL_SYM + && strlen ((char *) end_elem->opr.name) > 1))) + return REG_ECOLLATE; + +# ifdef RE_ENABLE_I18N + { + wchar_t wc; + wint_t start_wc; + wint_t end_wc; + + start_ch = ((start_elem->type == SB_CHAR) ? start_elem->opr.ch + : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0] + : 0)); + end_ch = ((end_elem->type == SB_CHAR) ? end_elem->opr.ch + : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0] + : 0)); + start_wc = ((start_elem->type == SB_CHAR || start_elem->type == COLL_SYM) + ? parse_byte (start_ch, mbcset) : start_elem->opr.wch); + end_wc = ((end_elem->type == SB_CHAR || end_elem->type == COLL_SYM) + ? parse_byte (end_ch, mbcset) : end_elem->opr.wch); + if (start_wc == WEOF || end_wc == WEOF) + return REG_ECOLLATE; + else if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES) + && start_wc > end_wc)) + return REG_ERANGE; + + /* Got valid collation sequence values, add them as a new entry. + However, for !_LIBC we have no collation elements: if the + character set is single byte, the single byte character set + that we build below suffices. parse_bracket_exp passes + no MBCSET if dfa->mb_cur_max == 1. */ + if (mbcset) + { + /* Check the space of the arrays. */ + if (__glibc_unlikely (*range_alloc == mbcset->nranges)) + { + /* There is not enough space, need realloc. */ + wchar_t *new_array_start, *new_array_end; + Idx new_nranges; + + /* +1 in case of mbcset->nranges is 0. */ + new_nranges = 2 * mbcset->nranges + 1; + /* Use realloc since mbcset->range_starts and mbcset->range_ends + are NULL if *range_alloc == 0. */ + new_array_start = re_realloc (mbcset->range_starts, wchar_t, + new_nranges); + new_array_end = re_realloc (mbcset->range_ends, wchar_t, + new_nranges); + + if (__glibc_unlikely (new_array_start == NULL + || new_array_end == NULL)) + { + re_free (new_array_start); + re_free (new_array_end); + return REG_ESPACE; + } + + mbcset->range_starts = new_array_start; + mbcset->range_ends = new_array_end; + *range_alloc = new_nranges; + } + + mbcset->range_starts[mbcset->nranges] = start_wc; + mbcset->range_ends[mbcset->nranges++] = end_wc; + } + + /* Build the table for single byte characters. */ + for (wc = 0; wc < SBC_MAX; ++wc) + { + if (start_wc <= wc && wc <= end_wc) + bitset_set (sbcset, wc); + } + } +# else /* not RE_ENABLE_I18N */ + { + unsigned int ch; + start_ch = ((start_elem->type == SB_CHAR ) ? start_elem->opr.ch + : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0] + : 0)); + end_ch = ((end_elem->type == SB_CHAR ) ? end_elem->opr.ch + : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0] + : 0)); + if (start_ch > end_ch) + return REG_ERANGE; + /* Build the table for single byte characters. */ + for (ch = 0; ch < SBC_MAX; ++ch) + if (start_ch <= ch && ch <= end_ch) + bitset_set (sbcset, ch); + } +# endif /* not RE_ENABLE_I18N */ + return REG_NOERROR; +} +#endif /* not _LIBC */ + +#ifndef _LIBC +/* Helper function for parse_bracket_exp only used in case of NOT _LIBC.. + Build the collating element which is represented by NAME. + The result are written to MBCSET and SBCSET. + COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a + pointer argument since we may update it. */ + +static reg_errcode_t +# ifdef RE_ENABLE_I18N +build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset, + Idx *coll_sym_alloc, const unsigned char *name) +# else /* not RE_ENABLE_I18N */ +build_collating_symbol (bitset_t sbcset, const unsigned char *name) +# endif /* not RE_ENABLE_I18N */ +{ + size_t name_len = strlen ((const char *) name); + if (__glibc_unlikely (name_len != 1)) + return REG_ECOLLATE; + else + { + bitset_set (sbcset, name[0]); + return REG_NOERROR; + } +} +#endif /* not _LIBC */ + +/* This function parse bracket expression like "[abc]", "[a-c]", + "[[.a-a.]]" etc. */ + +static bin_tree_t * +parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, + reg_syntax_t syntax, reg_errcode_t *err) +{ +#ifdef _LIBC + const unsigned char *collseqmb; + const char *collseqwc; + uint32_t nrules; + int32_t table_size; + const int32_t *symb_table; + const unsigned char *extra; + + /* Local function for parse_bracket_exp used in _LIBC environment. + Seek the collating symbol entry corresponding to NAME. + Return the index of the symbol in the SYMB_TABLE, + or -1 if not found. */ + + auto inline int32_t + __attribute__ ((always_inline)) + seek_collating_symbol_entry (const unsigned char *name, size_t name_len) + { + int32_t elem; + + for (elem = 0; elem < table_size; elem++) + if (symb_table[2 * elem] != 0) + { + int32_t idx = symb_table[2 * elem + 1]; + /* Skip the name of collating element name. */ + idx += 1 + extra[idx]; + if (/* Compare the length of the name. */ + name_len == extra[idx] + /* Compare the name. */ + && memcmp (name, &extra[idx + 1], name_len) == 0) + /* Yep, this is the entry. */ + return elem; + } + return -1; + } + + /* Local function for parse_bracket_exp used in _LIBC environment. + Look up the collation sequence value of BR_ELEM. + Return the value if succeeded, UINT_MAX otherwise. */ + + auto inline unsigned int + __attribute__ ((always_inline)) + lookup_collation_sequence_value (bracket_elem_t *br_elem) + { + if (br_elem->type == SB_CHAR) + { + /* + if (MB_CUR_MAX == 1) + */ + if (nrules == 0) + return collseqmb[br_elem->opr.ch]; + else + { + wint_t wc = __btowc (br_elem->opr.ch); + return __collseq_table_lookup (collseqwc, wc); + } + } + else if (br_elem->type == MB_CHAR) + { + if (nrules != 0) + return __collseq_table_lookup (collseqwc, br_elem->opr.wch); + } + else if (br_elem->type == COLL_SYM) + { + size_t sym_name_len = strlen ((char *) br_elem->opr.name); + if (nrules != 0) + { + int32_t elem, idx; + elem = seek_collating_symbol_entry (br_elem->opr.name, + sym_name_len); + if (elem != -1) + { + /* We found the entry. */ + idx = symb_table[2 * elem + 1]; + /* Skip the name of collating element name. */ + idx += 1 + extra[idx]; + /* Skip the byte sequence of the collating element. */ + idx += 1 + extra[idx]; + /* Adjust for the alignment. */ + idx = (idx + 3) & ~3; + /* Skip the multibyte collation sequence value. */ + idx += sizeof (unsigned int); + /* Skip the wide char sequence of the collating element. */ + idx += sizeof (unsigned int) * + (1 + *(unsigned int *) (extra + idx)); + /* Return the collation sequence value. */ + return *(unsigned int *) (extra + idx); + } + else if (sym_name_len == 1) + { + /* No valid character. Match it as a single byte + character. */ + return collseqmb[br_elem->opr.name[0]]; + } + } + else if (sym_name_len == 1) + return collseqmb[br_elem->opr.name[0]]; + } + return UINT_MAX; + } + + /* Local function for parse_bracket_exp used in _LIBC environment. + Build the range expression which starts from START_ELEM, and ends + at END_ELEM. The result are written to MBCSET and SBCSET. + RANGE_ALLOC is the allocated size of mbcset->range_starts, and + mbcset->range_ends, is a pointer argument since we may + update it. */ + + auto inline reg_errcode_t + __attribute__ ((always_inline)) + build_range_exp (bitset_t sbcset, re_charset_t *mbcset, int *range_alloc, + bracket_elem_t *start_elem, bracket_elem_t *end_elem) + { + unsigned int ch; + uint32_t start_collseq; + uint32_t end_collseq; + + /* Equivalence Classes and Character Classes can't be a range + start/end. */ + if (__glibc_unlikely (start_elem->type == EQUIV_CLASS + || start_elem->type == CHAR_CLASS + || end_elem->type == EQUIV_CLASS + || end_elem->type == CHAR_CLASS)) + return REG_ERANGE; + + /* FIXME: Implement rational ranges here, too. */ + start_collseq = lookup_collation_sequence_value (start_elem); + end_collseq = lookup_collation_sequence_value (end_elem); + /* Check start/end collation sequence values. */ + if (__glibc_unlikely (start_collseq == UINT_MAX + || end_collseq == UINT_MAX)) + return REG_ECOLLATE; + if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES) + && start_collseq > end_collseq)) + return REG_ERANGE; + + /* Got valid collation sequence values, add them as a new entry. + However, if we have no collation elements, and the character set + is single byte, the single byte character set that we + build below suffices. */ + if (nrules > 0 || dfa->mb_cur_max > 1) + { + /* Check the space of the arrays. */ + if (__glibc_unlikely (*range_alloc == mbcset->nranges)) + { + /* There is not enough space, need realloc. */ + uint32_t *new_array_start; + uint32_t *new_array_end; + Idx new_nranges; + + /* +1 in case of mbcset->nranges is 0. */ + new_nranges = 2 * mbcset->nranges + 1; + new_array_start = re_realloc (mbcset->range_starts, uint32_t, + new_nranges); + new_array_end = re_realloc (mbcset->range_ends, uint32_t, + new_nranges); + + if (__glibc_unlikely (new_array_start == NULL + || new_array_end == NULL)) + return REG_ESPACE; + + mbcset->range_starts = new_array_start; + mbcset->range_ends = new_array_end; + *range_alloc = new_nranges; + } + + mbcset->range_starts[mbcset->nranges] = start_collseq; + mbcset->range_ends[mbcset->nranges++] = end_collseq; + } + + /* Build the table for single byte characters. */ + for (ch = 0; ch < SBC_MAX; ch++) + { + uint32_t ch_collseq; + /* + if (MB_CUR_MAX == 1) + */ + if (nrules == 0) + ch_collseq = collseqmb[ch]; + else + ch_collseq = __collseq_table_lookup (collseqwc, __btowc (ch)); + if (start_collseq <= ch_collseq && ch_collseq <= end_collseq) + bitset_set (sbcset, ch); + } + return REG_NOERROR; + } + + /* Local function for parse_bracket_exp used in _LIBC environment. + Build the collating element which is represented by NAME. + The result are written to MBCSET and SBCSET. + COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a + pointer argument since we may update it. */ + + auto inline reg_errcode_t + __attribute__ ((always_inline)) + build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset, + Idx *coll_sym_alloc, const unsigned char *name) + { + int32_t elem, idx; + size_t name_len = strlen ((const char *) name); + if (nrules != 0) + { + elem = seek_collating_symbol_entry (name, name_len); + if (elem != -1) + { + /* We found the entry. */ + idx = symb_table[2 * elem + 1]; + /* Skip the name of collating element name. */ + idx += 1 + extra[idx]; + } + else if (name_len == 1) + { + /* No valid character, treat it as a normal + character. */ + bitset_set (sbcset, name[0]); + return REG_NOERROR; + } + else + return REG_ECOLLATE; + + /* Got valid collation sequence, add it as a new entry. */ + /* Check the space of the arrays. */ + if (__glibc_unlikely (*coll_sym_alloc == mbcset->ncoll_syms)) + { + /* Not enough, realloc it. */ + /* +1 in case of mbcset->ncoll_syms is 0. */ + Idx new_coll_sym_alloc = 2 * mbcset->ncoll_syms + 1; + /* Use realloc since mbcset->coll_syms is NULL + if *alloc == 0. */ + int32_t *new_coll_syms = re_realloc (mbcset->coll_syms, int32_t, + new_coll_sym_alloc); + if (__glibc_unlikely (new_coll_syms == NULL)) + return REG_ESPACE; + mbcset->coll_syms = new_coll_syms; + *coll_sym_alloc = new_coll_sym_alloc; + } + mbcset->coll_syms[mbcset->ncoll_syms++] = idx; + return REG_NOERROR; + } + else + { + if (__glibc_unlikely (name_len != 1)) + return REG_ECOLLATE; + else + { + bitset_set (sbcset, name[0]); + return REG_NOERROR; + } + } + } +#endif + + re_token_t br_token; + re_bitset_ptr_t sbcset; +#ifdef RE_ENABLE_I18N + re_charset_t *mbcset; + Idx coll_sym_alloc = 0, range_alloc = 0, mbchar_alloc = 0; + Idx equiv_class_alloc = 0, char_class_alloc = 0; +#endif /* not RE_ENABLE_I18N */ + bool non_match = false; + bin_tree_t *work_tree; + int token_len; + bool first_round = true; +#ifdef _LIBC + collseqmb = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); + nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + if (nrules) + { + /* + if (MB_CUR_MAX > 1) + */ + collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); + table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB); + symb_table = (const int32_t *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_SYMB_TABLEMB); + extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_SYMB_EXTRAMB); + } +#endif + sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); +#ifdef RE_ENABLE_I18N + mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); +#endif /* RE_ENABLE_I18N */ +#ifdef RE_ENABLE_I18N + if (__glibc_unlikely (sbcset == NULL || mbcset == NULL)) +#else + if (__glibc_unlikely (sbcset == NULL)) +#endif /* RE_ENABLE_I18N */ + { + re_free (sbcset); +#ifdef RE_ENABLE_I18N + re_free (mbcset); +#endif + *err = REG_ESPACE; + return NULL; + } + + token_len = peek_token_bracket (token, regexp, syntax); + if (__glibc_unlikely (token->type == END_OF_RE)) + { + *err = REG_BADPAT; + goto parse_bracket_exp_free_return; + } + if (token->type == OP_NON_MATCH_LIST) + { +#ifdef RE_ENABLE_I18N + mbcset->non_match = 1; +#endif /* not RE_ENABLE_I18N */ + non_match = true; + if (syntax & RE_HAT_LISTS_NOT_NEWLINE) + bitset_set (sbcset, '\n'); + re_string_skip_bytes (regexp, token_len); /* Skip a token. */ + token_len = peek_token_bracket (token, regexp, syntax); + if (__glibc_unlikely (token->type == END_OF_RE)) + { + *err = REG_BADPAT; + goto parse_bracket_exp_free_return; + } + } + + /* We treat the first ']' as a normal character. */ + if (token->type == OP_CLOSE_BRACKET) + token->type = CHARACTER; + + while (1) + { + bracket_elem_t start_elem, end_elem; + unsigned char start_name_buf[BRACKET_NAME_BUF_SIZE]; + unsigned char end_name_buf[BRACKET_NAME_BUF_SIZE]; + reg_errcode_t ret; + int token_len2 = 0; + bool is_range_exp = false; + re_token_t token2; + + start_elem.opr.name = start_name_buf; + start_elem.type = COLL_SYM; + ret = parse_bracket_element (&start_elem, regexp, token, token_len, dfa, + syntax, first_round); + if (__glibc_unlikely (ret != REG_NOERROR)) + { + *err = ret; + goto parse_bracket_exp_free_return; + } + first_round = false; + + /* Get information about the next token. We need it in any case. */ + token_len = peek_token_bracket (token, regexp, syntax); + + /* Do not check for ranges if we know they are not allowed. */ + if (start_elem.type != CHAR_CLASS && start_elem.type != EQUIV_CLASS) + { + if (__glibc_unlikely (token->type == END_OF_RE)) + { + *err = REG_EBRACK; + goto parse_bracket_exp_free_return; + } + if (token->type == OP_CHARSET_RANGE) + { + re_string_skip_bytes (regexp, token_len); /* Skip '-'. */ + token_len2 = peek_token_bracket (&token2, regexp, syntax); + if (__glibc_unlikely (token2.type == END_OF_RE)) + { + *err = REG_EBRACK; + goto parse_bracket_exp_free_return; + } + if (token2.type == OP_CLOSE_BRACKET) + { + /* We treat the last '-' as a normal character. */ + re_string_skip_bytes (regexp, -token_len); + token->type = CHARACTER; + } + else + is_range_exp = true; + } + } + + if (is_range_exp == true) + { + end_elem.opr.name = end_name_buf; + end_elem.type = COLL_SYM; + ret = parse_bracket_element (&end_elem, regexp, &token2, token_len2, + dfa, syntax, true); + if (__glibc_unlikely (ret != REG_NOERROR)) + { + *err = ret; + goto parse_bracket_exp_free_return; + } + + token_len = peek_token_bracket (token, regexp, syntax); + +#ifdef _LIBC + *err = build_range_exp (sbcset, mbcset, &range_alloc, + &start_elem, &end_elem); +#else +# ifdef RE_ENABLE_I18N + *err = build_range_exp (syntax, sbcset, + dfa->mb_cur_max > 1 ? mbcset : NULL, + &range_alloc, &start_elem, &end_elem); +# else + *err = build_range_exp (syntax, sbcset, &start_elem, &end_elem); +# endif +#endif /* RE_ENABLE_I18N */ + if (__glibc_unlikely (*err != REG_NOERROR)) + goto parse_bracket_exp_free_return; + } + else + { + switch (start_elem.type) + { + case SB_CHAR: + bitset_set (sbcset, start_elem.opr.ch); + break; +#ifdef RE_ENABLE_I18N + case MB_CHAR: + /* Check whether the array has enough space. */ + if (__glibc_unlikely (mbchar_alloc == mbcset->nmbchars)) + { + wchar_t *new_mbchars; + /* Not enough, realloc it. */ + /* +1 in case of mbcset->nmbchars is 0. */ + mbchar_alloc = 2 * mbcset->nmbchars + 1; + /* Use realloc since array is NULL if *alloc == 0. */ + new_mbchars = re_realloc (mbcset->mbchars, wchar_t, + mbchar_alloc); + if (__glibc_unlikely (new_mbchars == NULL)) + goto parse_bracket_exp_espace; + mbcset->mbchars = new_mbchars; + } + mbcset->mbchars[mbcset->nmbchars++] = start_elem.opr.wch; + break; +#endif /* RE_ENABLE_I18N */ + case EQUIV_CLASS: + *err = build_equiv_class (sbcset, +#ifdef RE_ENABLE_I18N + mbcset, &equiv_class_alloc, +#endif /* RE_ENABLE_I18N */ + start_elem.opr.name); + if (__glibc_unlikely (*err != REG_NOERROR)) + goto parse_bracket_exp_free_return; + break; + case COLL_SYM: + *err = build_collating_symbol (sbcset, +#ifdef RE_ENABLE_I18N + mbcset, &coll_sym_alloc, +#endif /* RE_ENABLE_I18N */ + start_elem.opr.name); + if (__glibc_unlikely (*err != REG_NOERROR)) + goto parse_bracket_exp_free_return; + break; + case CHAR_CLASS: + *err = build_charclass (regexp->trans, sbcset, +#ifdef RE_ENABLE_I18N + mbcset, &char_class_alloc, +#endif /* RE_ENABLE_I18N */ + (const char *) start_elem.opr.name, + syntax); + if (__glibc_unlikely (*err != REG_NOERROR)) + goto parse_bracket_exp_free_return; + break; + default: + assert (0); + break; + } + } + if (__glibc_unlikely (token->type == END_OF_RE)) + { + *err = REG_EBRACK; + goto parse_bracket_exp_free_return; + } + if (token->type == OP_CLOSE_BRACKET) + break; + } + + re_string_skip_bytes (regexp, token_len); /* Skip a token. */ + + /* If it is non-matching list. */ + if (non_match) + bitset_not (sbcset); + +#ifdef RE_ENABLE_I18N + /* Ensure only single byte characters are set. */ + if (dfa->mb_cur_max > 1) + bitset_mask (sbcset, dfa->sb_char); + + if (mbcset->nmbchars || mbcset->ncoll_syms || mbcset->nequiv_classes + || mbcset->nranges || (dfa->mb_cur_max > 1 && (mbcset->nchar_classes + || mbcset->non_match))) + { + bin_tree_t *mbc_tree; + int sbc_idx; + /* Build a tree for complex bracket. */ + dfa->has_mb_node = 1; + br_token.type = COMPLEX_BRACKET; + br_token.opr.mbcset = mbcset; + mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (__glibc_unlikely (mbc_tree == NULL)) + goto parse_bracket_exp_espace; + for (sbc_idx = 0; sbc_idx < BITSET_WORDS; ++sbc_idx) + if (sbcset[sbc_idx]) + break; + /* If there are no bits set in sbcset, there is no point + of having both SIMPLE_BRACKET and COMPLEX_BRACKET. */ + if (sbc_idx < BITSET_WORDS) + { + /* Build a tree for simple bracket. */ + br_token.type = SIMPLE_BRACKET; + br_token.opr.sbcset = sbcset; + work_tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (__glibc_unlikely (work_tree == NULL)) + goto parse_bracket_exp_espace; + + /* Then join them by ALT node. */ + work_tree = create_tree (dfa, work_tree, mbc_tree, OP_ALT); + if (__glibc_unlikely (work_tree == NULL)) + goto parse_bracket_exp_espace; + } + else + { + re_free (sbcset); + work_tree = mbc_tree; + } + } + else +#endif /* not RE_ENABLE_I18N */ + { +#ifdef RE_ENABLE_I18N + free_charset (mbcset); +#endif + /* Build a tree for simple bracket. */ + br_token.type = SIMPLE_BRACKET; + br_token.opr.sbcset = sbcset; + work_tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (__glibc_unlikely (work_tree == NULL)) + goto parse_bracket_exp_espace; + } + return work_tree; + + parse_bracket_exp_espace: + *err = REG_ESPACE; + parse_bracket_exp_free_return: + re_free (sbcset); +#ifdef RE_ENABLE_I18N + free_charset (mbcset); +#endif /* RE_ENABLE_I18N */ + return NULL; +} + +/* Parse an element in the bracket expression. */ + +static reg_errcode_t +parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp, + re_token_t *token, int token_len, re_dfa_t *dfa, + reg_syntax_t syntax, bool accept_hyphen) +{ +#ifdef RE_ENABLE_I18N + int cur_char_size; + cur_char_size = re_string_char_size_at (regexp, re_string_cur_idx (regexp)); + if (cur_char_size > 1) + { + elem->type = MB_CHAR; + elem->opr.wch = re_string_wchar_at (regexp, re_string_cur_idx (regexp)); + re_string_skip_bytes (regexp, cur_char_size); + return REG_NOERROR; + } +#endif /* RE_ENABLE_I18N */ + re_string_skip_bytes (regexp, token_len); /* Skip a token. */ + if (token->type == OP_OPEN_COLL_ELEM || token->type == OP_OPEN_CHAR_CLASS + || token->type == OP_OPEN_EQUIV_CLASS) + return parse_bracket_symbol (elem, regexp, token); + if (__glibc_unlikely (token->type == OP_CHARSET_RANGE) && !accept_hyphen) + { + /* A '-' must only appear as anything but a range indicator before + the closing bracket. Everything else is an error. */ + re_token_t token2; + (void) peek_token_bracket (&token2, regexp, syntax); + if (token2.type != OP_CLOSE_BRACKET) + /* The actual error value is not standardized since this whole + case is undefined. But ERANGE makes good sense. */ + return REG_ERANGE; + } + elem->type = SB_CHAR; + elem->opr.ch = token->opr.c; + return REG_NOERROR; +} + +/* Parse a bracket symbol in the bracket expression. Bracket symbols are + such as [:<character_class>:], [.<collating_element>.], and + [=<equivalent_class>=]. */ + +static reg_errcode_t +parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp, + re_token_t *token) +{ + unsigned char ch, delim = token->opr.c; + int i = 0; + if (re_string_eoi(regexp)) + return REG_EBRACK; + for (;; ++i) + { + if (i >= BRACKET_NAME_BUF_SIZE) + return REG_EBRACK; + if (token->type == OP_OPEN_CHAR_CLASS) + ch = re_string_fetch_byte_case (regexp); + else + ch = re_string_fetch_byte (regexp); + if (re_string_eoi(regexp)) + return REG_EBRACK; + if (ch == delim && re_string_peek_byte (regexp, 0) == ']') + break; + elem->opr.name[i] = ch; + } + re_string_skip_bytes (regexp, 1); + elem->opr.name[i] = '\0'; + switch (token->type) + { + case OP_OPEN_COLL_ELEM: + elem->type = COLL_SYM; + break; + case OP_OPEN_EQUIV_CLASS: + elem->type = EQUIV_CLASS; + break; + case OP_OPEN_CHAR_CLASS: + elem->type = CHAR_CLASS; + break; + default: + break; + } + return REG_NOERROR; +} + + /* Helper function for parse_bracket_exp. + Build the equivalence class which is represented by NAME. + The result are written to MBCSET and SBCSET. + EQUIV_CLASS_ALLOC is the allocated size of mbcset->equiv_classes, + is a pointer argument since we may update it. */ + +static reg_errcode_t +#ifdef RE_ENABLE_I18N +build_equiv_class (bitset_t sbcset, re_charset_t *mbcset, + Idx *equiv_class_alloc, const unsigned char *name) +#else /* not RE_ENABLE_I18N */ +build_equiv_class (bitset_t sbcset, const unsigned char *name) +#endif /* not RE_ENABLE_I18N */ +{ +#ifdef _LIBC + uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + if (nrules != 0) + { + const int32_t *table, *indirect; + const unsigned char *weights, *extra, *cp; + unsigned char char_buf[2]; + int32_t idx1, idx2; + unsigned int ch; + size_t len; + /* Calculate the index for equivalence class. */ + cp = name; + table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_WEIGHTMB); + extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_EXTRAMB); + indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_INDIRECTMB); + idx1 = findidx (table, indirect, extra, &cp, -1); + if (__glibc_unlikely (idx1 == 0 || *cp != '\0')) + /* This isn't a valid character. */ + return REG_ECOLLATE; + + /* Build single byte matching table for this equivalence class. */ + len = weights[idx1 & 0xffffff]; + for (ch = 0; ch < SBC_MAX; ++ch) + { + char_buf[0] = ch; + cp = char_buf; + idx2 = findidx (table, indirect, extra, &cp, 1); +/* + idx2 = table[ch]; +*/ + if (idx2 == 0) + /* This isn't a valid character. */ + continue; + /* Compare only if the length matches and the collation rule + index is the same. */ + if (len == weights[idx2 & 0xffffff] && (idx1 >> 24) == (idx2 >> 24) + && memcmp (weights + (idx1 & 0xffffff) + 1, + weights + (idx2 & 0xffffff) + 1, len) == 0) + bitset_set (sbcset, ch); + } + /* Check whether the array has enough space. */ + if (__glibc_unlikely (*equiv_class_alloc == mbcset->nequiv_classes)) + { + /* Not enough, realloc it. */ + /* +1 in case of mbcset->nequiv_classes is 0. */ + Idx new_equiv_class_alloc = 2 * mbcset->nequiv_classes + 1; + /* Use realloc since the array is NULL if *alloc == 0. */ + int32_t *new_equiv_classes = re_realloc (mbcset->equiv_classes, + int32_t, + new_equiv_class_alloc); + if (__glibc_unlikely (new_equiv_classes == NULL)) + return REG_ESPACE; + mbcset->equiv_classes = new_equiv_classes; + *equiv_class_alloc = new_equiv_class_alloc; + } + mbcset->equiv_classes[mbcset->nequiv_classes++] = idx1; + } + else +#endif /* _LIBC */ + { + if (__glibc_unlikely (strlen ((const char *) name) != 1)) + return REG_ECOLLATE; + bitset_set (sbcset, *name); + } + return REG_NOERROR; +} + + /* Helper function for parse_bracket_exp. + Build the character class which is represented by NAME. + The result are written to MBCSET and SBCSET. + CHAR_CLASS_ALLOC is the allocated size of mbcset->char_classes, + is a pointer argument since we may update it. */ + +static reg_errcode_t +#ifdef RE_ENABLE_I18N +build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, + re_charset_t *mbcset, Idx *char_class_alloc, + const char *class_name, reg_syntax_t syntax) +#else /* not RE_ENABLE_I18N */ +build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, + const char *class_name, reg_syntax_t syntax) +#endif /* not RE_ENABLE_I18N */ +{ + int i; + const char *name = class_name; + + /* In case of REG_ICASE "upper" and "lower" match the both of + upper and lower cases. */ + if ((syntax & RE_ICASE) + && (strcmp (name, "upper") == 0 || strcmp (name, "lower") == 0)) + name = "alpha"; + +#ifdef RE_ENABLE_I18N + /* Check the space of the arrays. */ + if (__glibc_unlikely (*char_class_alloc == mbcset->nchar_classes)) + { + /* Not enough, realloc it. */ + /* +1 in case of mbcset->nchar_classes is 0. */ + Idx new_char_class_alloc = 2 * mbcset->nchar_classes + 1; + /* Use realloc since array is NULL if *alloc == 0. */ + wctype_t *new_char_classes = re_realloc (mbcset->char_classes, wctype_t, + new_char_class_alloc); + if (__glibc_unlikely (new_char_classes == NULL)) + return REG_ESPACE; + mbcset->char_classes = new_char_classes; + *char_class_alloc = new_char_class_alloc; + } + mbcset->char_classes[mbcset->nchar_classes++] = __wctype (name); +#endif /* RE_ENABLE_I18N */ + +#define BUILD_CHARCLASS_LOOP(ctype_func) \ + do { \ + if (__glibc_unlikely (trans != NULL)) \ + { \ + for (i = 0; i < SBC_MAX; ++i) \ + if (ctype_func (i)) \ + bitset_set (sbcset, trans[i]); \ + } \ + else \ + { \ + for (i = 0; i < SBC_MAX; ++i) \ + if (ctype_func (i)) \ + bitset_set (sbcset, i); \ + } \ + } while (0) + + if (strcmp (name, "alnum") == 0) + BUILD_CHARCLASS_LOOP (isalnum); + else if (strcmp (name, "cntrl") == 0) + BUILD_CHARCLASS_LOOP (iscntrl); + else if (strcmp (name, "lower") == 0) + BUILD_CHARCLASS_LOOP (islower); + else if (strcmp (name, "space") == 0) + BUILD_CHARCLASS_LOOP (isspace); + else if (strcmp (name, "alpha") == 0) + BUILD_CHARCLASS_LOOP (isalpha); + else if (strcmp (name, "digit") == 0) + BUILD_CHARCLASS_LOOP (isdigit); + else if (strcmp (name, "print") == 0) + BUILD_CHARCLASS_LOOP (isprint); + else if (strcmp (name, "upper") == 0) + BUILD_CHARCLASS_LOOP (isupper); + else if (strcmp (name, "blank") == 0) + BUILD_CHARCLASS_LOOP (isblank); + else if (strcmp (name, "graph") == 0) + BUILD_CHARCLASS_LOOP (isgraph); + else if (strcmp (name, "punct") == 0) + BUILD_CHARCLASS_LOOP (ispunct); + else if (strcmp (name, "xdigit") == 0) + BUILD_CHARCLASS_LOOP (isxdigit); + else + return REG_ECTYPE; + + return REG_NOERROR; +} + +static bin_tree_t * +build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans, + const char *class_name, + const char *extra, bool non_match, + reg_errcode_t *err) +{ + re_bitset_ptr_t sbcset; +#ifdef RE_ENABLE_I18N + re_charset_t *mbcset; + Idx alloc = 0; +#endif /* not RE_ENABLE_I18N */ + reg_errcode_t ret; + re_token_t br_token; + bin_tree_t *tree; + + sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); + if (__glibc_unlikely (sbcset == NULL)) + { + *err = REG_ESPACE; + return NULL; + } +#ifdef RE_ENABLE_I18N + mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); + if (__glibc_unlikely (mbcset == NULL)) + { + re_free (sbcset); + *err = REG_ESPACE; + return NULL; + } + mbcset->non_match = non_match; +#endif /* RE_ENABLE_I18N */ + + /* We don't care the syntax in this case. */ + ret = build_charclass (trans, sbcset, +#ifdef RE_ENABLE_I18N + mbcset, &alloc, +#endif /* RE_ENABLE_I18N */ + class_name, 0); + + if (__glibc_unlikely (ret != REG_NOERROR)) + { + re_free (sbcset); +#ifdef RE_ENABLE_I18N + free_charset (mbcset); +#endif /* RE_ENABLE_I18N */ + *err = ret; + return NULL; + } + /* \w match '_' also. */ + for (; *extra; extra++) + bitset_set (sbcset, *extra); + + /* If it is non-matching list. */ + if (non_match) + bitset_not (sbcset); + +#ifdef RE_ENABLE_I18N + /* Ensure only single byte characters are set. */ + if (dfa->mb_cur_max > 1) + bitset_mask (sbcset, dfa->sb_char); +#endif + + /* Build a tree for simple bracket. */ +#if defined GCC_LINT || defined lint + memset (&br_token, 0, sizeof br_token); +#endif + br_token.type = SIMPLE_BRACKET; + br_token.opr.sbcset = sbcset; + tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (__glibc_unlikely (tree == NULL)) + goto build_word_op_espace; + +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + { + bin_tree_t *mbc_tree; + /* Build a tree for complex bracket. */ + br_token.type = COMPLEX_BRACKET; + br_token.opr.mbcset = mbcset; + dfa->has_mb_node = 1; + mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (__glibc_unlikely (mbc_tree == NULL)) + goto build_word_op_espace; + /* Then join them by ALT node. */ + tree = create_tree (dfa, tree, mbc_tree, OP_ALT); + if (__glibc_likely (mbc_tree != NULL)) + return tree; + } + else + { + free_charset (mbcset); + return tree; + } +#else /* not RE_ENABLE_I18N */ + return tree; +#endif /* not RE_ENABLE_I18N */ + + build_word_op_espace: + re_free (sbcset); +#ifdef RE_ENABLE_I18N + free_charset (mbcset); +#endif /* RE_ENABLE_I18N */ + *err = REG_ESPACE; + return NULL; +} + +/* This is intended for the expressions like "a{1,3}". + Fetch a number from 'input', and return the number. + Return -1 if the number field is empty like "{,1}". + Return RE_DUP_MAX + 1 if the number field is too large. + Return -2 if an error occurred. */ + +static Idx +fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax) +{ + Idx num = -1; + unsigned char c; + while (1) + { + fetch_token (token, input, syntax); + c = token->opr.c; + if (__glibc_unlikely (token->type == END_OF_RE)) + return -2; + if (token->type == OP_CLOSE_DUP_NUM || c == ',') + break; + num = ((token->type != CHARACTER || c < '0' || '9' < c || num == -2) + ? -2 + : num == -1 + ? c - '0' + : MIN (RE_DUP_MAX + 1, num * 10 + c - '0')); + } + return num; +} + +#ifdef RE_ENABLE_I18N +static void +free_charset (re_charset_t *cset) +{ + re_free (cset->mbchars); +# ifdef _LIBC + re_free (cset->coll_syms); + re_free (cset->equiv_classes); +# endif + re_free (cset->range_starts); + re_free (cset->range_ends); + re_free (cset->char_classes); + re_free (cset); +} +#endif /* RE_ENABLE_I18N */ + +/* Functions for binary tree operation. */ + +/* Create a tree node. */ + +static bin_tree_t * +create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, + re_token_type_t type) +{ + re_token_t t; +#if defined GCC_LINT || defined lint + memset (&t, 0, sizeof t); +#endif + t.type = type; + return create_token_tree (dfa, left, right, &t); +} + +static bin_tree_t * +create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, + const re_token_t *token) +{ + bin_tree_t *tree; + if (__glibc_unlikely (dfa->str_tree_storage_idx == BIN_TREE_STORAGE_SIZE)) + { + bin_tree_storage_t *storage = re_malloc (bin_tree_storage_t, 1); + + if (storage == NULL) + return NULL; + storage->next = dfa->str_tree_storage; + dfa->str_tree_storage = storage; + dfa->str_tree_storage_idx = 0; + } + tree = &dfa->str_tree_storage->data[dfa->str_tree_storage_idx++]; + + tree->parent = NULL; + tree->left = left; + tree->right = right; + tree->token = *token; + tree->token.duplicated = 0; + tree->token.opt_subexp = 0; + tree->first = NULL; + tree->next = NULL; + tree->node_idx = -1; + + if (left != NULL) + left->parent = tree; + if (right != NULL) + right->parent = tree; + return tree; +} + +/* Mark the tree SRC as an optional subexpression. + To be called from preorder or postorder. */ + +static reg_errcode_t +mark_opt_subexp (void *extra, bin_tree_t *node) +{ + Idx idx = (uintptr_t) extra; + if (node->token.type == SUBEXP && node->token.opr.idx == idx) + node->token.opt_subexp = 1; + + return REG_NOERROR; +} + +/* Free the allocated memory inside NODE. */ + +static void +free_token (re_token_t *node) +{ +#ifdef RE_ENABLE_I18N + if (node->type == COMPLEX_BRACKET && node->duplicated == 0) + free_charset (node->opr.mbcset); + else +#endif /* RE_ENABLE_I18N */ + if (node->type == SIMPLE_BRACKET && node->duplicated == 0) + re_free (node->opr.sbcset); +} + +/* Worker function for tree walking. Free the allocated memory inside NODE + and its children. */ + +static reg_errcode_t +free_tree (void *extra, bin_tree_t *node) +{ + free_token (&node->token); + return REG_NOERROR; +} + + +/* Duplicate the node SRC, and return new node. This is a preorder + visit similar to the one implemented by the generic visitor, but + we need more infrastructure to maintain two parallel trees --- so, + it's easier to duplicate. */ + +static bin_tree_t * +duplicate_tree (const bin_tree_t *root, re_dfa_t *dfa) +{ + const bin_tree_t *node; + bin_tree_t *dup_root; + bin_tree_t **p_new = &dup_root, *dup_node = root->parent; + + for (node = root; ; ) + { + /* Create a new tree and link it back to the current parent. */ + *p_new = create_token_tree (dfa, NULL, NULL, &node->token); + if (*p_new == NULL) + return NULL; + (*p_new)->parent = dup_node; + (*p_new)->token.duplicated = 1; + dup_node = *p_new; + + /* Go to the left node, or up and to the right. */ + if (node->left) + { + node = node->left; + p_new = &dup_node->left; + } + else + { + const bin_tree_t *prev = NULL; + while (node->right == prev || node->right == NULL) + { + prev = node; + node = node->parent; + dup_node = dup_node->parent; + if (!node) + return dup_root; + } + node = node->right; + p_new = &dup_node->right; + } + } +} diff --git a/devspec.en_US/project/recutils/lib/regex.c b/devspec.en_US/project/recutils/lib/regex.c new file mode 100755 index 0000000..eab7a48 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/regex.c @@ -0,0 +1,81 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _LIBC +# include <libc-config.h> + +# if __GNUC_PREREQ (4, 6) +# pragma GCC diagnostic ignored "-Wsuggest-attribute=pure" +# endif +# if __GNUC_PREREQ (4, 3) +# pragma GCC diagnostic ignored "-Wold-style-definition" +# pragma GCC diagnostic ignored "-Wtype-limits" +# endif +#endif + +/* Make sure no one compiles this code with a C++ compiler. */ +#if defined __cplusplus && defined _LIBC +# error "This is C code, use a C compiler" +#endif + +#ifdef _LIBC +/* We have to keep the namespace clean. */ +# define regfree(preg) __regfree (preg) +# define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef) +# define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags) +# define regerror(errcode, preg, errbuf, errbuf_size) \ + __regerror(errcode, preg, errbuf, errbuf_size) +# define re_set_registers(bu, re, nu, st, en) \ + __re_set_registers (bu, re, nu, st, en) +# define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \ + __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) +# define re_match(bufp, string, size, pos, regs) \ + __re_match (bufp, string, size, pos, regs) +# define re_search(bufp, string, size, startpos, range, regs) \ + __re_search (bufp, string, size, startpos, range, regs) +# define re_compile_pattern(pattern, length, bufp) \ + __re_compile_pattern (pattern, length, bufp) +# define re_set_syntax(syntax) __re_set_syntax (syntax) +# define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \ + __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop) +# define re_compile_fastmap(bufp) __re_compile_fastmap (bufp) + +# include "../locale/localeinfo.h" +#endif + +/* On some systems, limits.h sets RE_DUP_MAX to a lower value than + GNU regex allows. Include it before <regex.h>, which correctly + #undefs RE_DUP_MAX and sets it to the right value. */ +#include <limits.h> + +#include <regex.h> +#include "regex_internal.h" + +#include "regex_internal.c" +#include "regcomp.c" +#include "regexec.c" + +/* Binary backward compatibility. */ +#if _LIBC +# include <shlib-compat.h> +# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3) +link_warning (re_max_failures, "the 're_max_failures' variable is obsolete and will go away.") +int re_max_failures = 2000; +# endif +#endif diff --git a/devspec.en_US/project/recutils/lib/regex.h b/devspec.en_US/project/recutils/lib/regex.h new file mode 100755 index 0000000..77ac1a5 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/regex.h @@ -0,0 +1,658 @@ +/* Definitions for data structures and routines for the regular + expression library. + Copyright (C) 1985, 1989-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _REGEX_H +#define _REGEX_H 1 + +#include <sys/types.h> + +/* Allow the use in C++ code. */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Define __USE_GNU to declare GNU extensions that violate the + POSIX name space rules. */ +#ifdef _GNU_SOURCE +# define __USE_GNU 1 +#endif + +#ifdef _REGEX_LARGE_OFFSETS + +/* Use types and values that are wide enough to represent signed and + unsigned byte offsets in memory. This currently works only when + the regex code is used outside of the GNU C library; it is not yet + supported within glibc itself, and glibc users should not define + _REGEX_LARGE_OFFSETS. */ + +/* The type of object sizes. */ +typedef size_t __re_size_t; + +/* The type of object sizes, in places where the traditional code + uses unsigned long int. */ +typedef size_t __re_long_size_t; + +#else + +/* The traditional GNU regex implementation mishandles strings longer + than INT_MAX. */ +typedef unsigned int __re_size_t; +typedef unsigned long int __re_long_size_t; + +#endif + +/* The following two types have to be signed and unsigned integer type + wide enough to hold a value of a pointer. For most ANSI compilers + ptrdiff_t and size_t should be likely OK. Still size of these two + types is 2 for Microsoft C. Ugh... */ +typedef long int s_reg_t; +typedef unsigned long int active_reg_t; + +/* The following bits are used to determine the regexp syntax we + recognize. The set/not-set meanings are chosen so that Emacs syntax + remains the value 0. The bits are given in alphabetical order, and + the definitions shifted by one from the previous bit; thus, when we + add or remove a bit, only one other definition need change. */ +typedef unsigned long int reg_syntax_t; + +#ifdef __USE_GNU +/* If this bit is not set, then \ inside a bracket expression is literal. + If set, then such a \ quotes the following character. */ +# define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) + +/* If this bit is not set, then + and ? are operators, and \+ and \? are + literals. + If set, then \+ and \? are operators and + and ? are literals. */ +# define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) + +/* If this bit is set, then character classes are supported. They are: + [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], + [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. + If not set, then character classes are not supported. */ +# define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) + +/* If this bit is set, then ^ and $ are always anchors (outside bracket + expressions, of course). + If this bit is not set, then it depends: + ^ is an anchor if it is at the beginning of a regular + expression or after an open-group or an alternation operator; + $ is an anchor if it is at the end of a regular expression, or + before a close-group or an alternation operator. + + This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because + POSIX draft 11.2 says that * etc. in leading positions is undefined. + We already implemented a previous draft which made those constructs + invalid, though, so we haven't changed the code back. */ +# define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) + +/* If this bit is set, then special characters are always special + regardless of where they are in the pattern. + If this bit is not set, then special characters are special only in + some contexts; otherwise they are ordinary. Specifically, + * + ? and intervals are only special when not after the beginning, + open-group, or alternation operator. */ +# define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) + +/* If this bit is set, then *, +, ?, and { cannot be first in an re or + immediately after an alternation or begin-group operator. */ +# define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) + +/* If this bit is set, then . matches newline. + If not set, then it doesn't. */ +# define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) + +/* If this bit is set, then . doesn't match NUL. + If not set, then it does. */ +# define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) + +/* If this bit is set, nonmatching lists [^...] do not match newline. + If not set, they do. */ +# define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) + +/* If this bit is set, either \{...\} or {...} defines an + interval, depending on RE_NO_BK_BRACES. + If not set, \{, \}, {, and } are literals. */ +# define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) + +/* If this bit is set, +, ? and | aren't recognized as operators. + If not set, they are. */ +# define RE_LIMITED_OPS (RE_INTERVALS << 1) + +/* If this bit is set, newline is an alternation operator. + If not set, newline is literal. */ +# define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) + +/* If this bit is set, then '{...}' defines an interval, and \{ and \} + are literals. + If not set, then '\{...\}' defines an interval. */ +# define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) + +/* If this bit is set, (...) defines a group, and \( and \) are literals. + If not set, \(...\) defines a group, and ( and ) are literals. */ +# define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) + +/* If this bit is set, then \<digit> matches <digit>. + If not set, then \<digit> is a back-reference. */ +# define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) + +/* If this bit is set, then | is an alternation operator, and \| is literal. + If not set, then \| is an alternation operator, and | is literal. */ +# define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) + +/* If this bit is set, then an ending range point collating higher + than the starting range point, as in [z-a], is invalid. + If not set, then when ending range point collates higher than the + starting range point, the range is ignored. */ +# define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) + +/* If this bit is set, then an unmatched ) is ordinary. + If not set, then an unmatched ) is invalid. */ +# define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) + +/* If this bit is set, succeed as soon as we match the whole pattern, + without further backtracking. */ +# define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1) + +/* If this bit is set, do not process the GNU regex operators. + If not set, then the GNU regex operators are recognized. */ +# define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1) + +/* If this bit is set, turn on internal regex debugging. + If not set, and debugging was on, turn it off. + This only works if regex.c is compiled -DDEBUG. + We define this bit always, so that all that's needed to turn on + debugging is to recompile regex.c; the calling code can always have + this bit set, and it won't affect anything in the normal case. */ +# define RE_DEBUG (RE_NO_GNU_OPS << 1) + +/* If this bit is set, a syntactically invalid interval is treated as + a string of ordinary characters. For example, the ERE 'a{1' is + treated as 'a\{1'. */ +# define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1) + +/* If this bit is set, then ignore case when matching. + If not set, then case is significant. */ +# define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1) + +/* This bit is used internally like RE_CONTEXT_INDEP_ANCHORS but only + for ^, because it is difficult to scan the regex backwards to find + whether ^ should be special. */ +# define RE_CARET_ANCHORS_HERE (RE_ICASE << 1) + +/* If this bit is set, then \{ cannot be first in a regex or + immediately after an alternation, open-group or \} operator. */ +# define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1) + +/* If this bit is set, then no_sub will be set to 1 during + re_compile_pattern. */ +# define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1) +#endif + +/* This global variable defines the particular regexp syntax to use (for + some interfaces). When a regexp is compiled, the syntax used is + stored in the pattern buffer, so changing this does not affect + already-compiled regexps. */ +extern reg_syntax_t re_syntax_options; + +#ifdef __USE_GNU +/* Define combinations of the above bits for the standard possibilities. + (The [[[ comments delimit what gets put into the Texinfo file, so + don't delete them!) */ +/* [[[begin syntaxes]]] */ +# define RE_SYNTAX_EMACS 0 + +# define RE_SYNTAX_AWK \ + (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ + | RE_NO_BK_PARENS | RE_NO_BK_REFS \ + | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ + | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CHAR_CLASSES \ + | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) + +# define RE_SYNTAX_GNU_AWK \ + ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ + | RE_INVALID_INTERVAL_ORD) \ + & ~(RE_DOT_NOT_NULL | RE_CONTEXT_INDEP_OPS \ + | RE_CONTEXT_INVALID_OPS )) + +# define RE_SYNTAX_POSIX_AWK \ + (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ + | RE_INTERVALS | RE_NO_GNU_OPS \ + | RE_INVALID_INTERVAL_ORD) + +# define RE_SYNTAX_GREP \ + ((RE_SYNTAX_POSIX_BASIC | RE_NEWLINE_ALT) \ + & ~(RE_CONTEXT_INVALID_DUP | RE_DOT_NOT_NULL)) + +# define RE_SYNTAX_EGREP \ + ((RE_SYNTAX_POSIX_EXTENDED | RE_INVALID_INTERVAL_ORD | RE_NEWLINE_ALT) \ + & ~(RE_CONTEXT_INVALID_OPS | RE_DOT_NOT_NULL)) + +/* POSIX grep -E behavior is no longer incompatible with GNU. */ +# define RE_SYNTAX_POSIX_EGREP \ + RE_SYNTAX_EGREP + +/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ +# define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC + +# define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC + +/* Syntax bits common to both basic and extended POSIX regex syntax. */ +# define _RE_SYNTAX_POSIX_COMMON \ + (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ + | RE_INTERVALS | RE_NO_EMPTY_RANGES) + +# define RE_SYNTAX_POSIX_BASIC \ + (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM | RE_CONTEXT_INVALID_DUP) + +/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes + RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this + isn't minimal, since other operators, such as \`, aren't disabled. */ +# define RE_SYNTAX_POSIX_MINIMAL_BASIC \ + (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) + +# define RE_SYNTAX_POSIX_EXTENDED \ + (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ + | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ + | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD) + +/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is + removed and RE_NO_BK_REFS is added. */ +# define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ + (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ + | RE_NO_BK_PARENS | RE_NO_BK_REFS \ + | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) +/* [[[end syntaxes]]] */ + +/* Maximum number of duplicates an interval can allow. POSIX-conforming + systems might define this in <limits.h>, but we want our + value, so remove any previous define. */ +# ifdef _REGEX_INCLUDE_LIMITS_H +# include <limits.h> +# endif +# ifdef RE_DUP_MAX +# undef RE_DUP_MAX +# endif + +/* RE_DUP_MAX is 2**15 - 1 because an earlier implementation stored + the counter as a 2-byte signed integer. This is no longer true, so + RE_DUP_MAX could be increased to (INT_MAX / 10 - 1), or to + ((SIZE_MAX - 9) / 10) if _REGEX_LARGE_OFFSETS is defined. + However, there would be a huge performance problem if someone + actually used a pattern like a\{214748363\}, so RE_DUP_MAX retains + its historical value. */ +# define RE_DUP_MAX (0x7fff) +#endif + + +/* POSIX 'cflags' bits (i.e., information for 'regcomp'). */ + +/* If this bit is set, then use extended regular expression syntax. + If not set, then use basic regular expression syntax. */ +#define REG_EXTENDED 1 + +/* If this bit is set, then ignore case when matching. + If not set, then case is significant. */ +#define REG_ICASE (1 << 1) + +/* If this bit is set, then anchors do not match at newline + characters in the string. + If not set, then anchors do match at newlines. */ +#define REG_NEWLINE (1 << 2) + +/* If this bit is set, then report only success or fail in regexec. + If not set, then returns differ between not matching and errors. */ +#define REG_NOSUB (1 << 3) + + +/* POSIX 'eflags' bits (i.e., information for regexec). */ + +/* If this bit is set, then the beginning-of-line operator doesn't match + the beginning of the string (presumably because it's not the + beginning of a line). + If not set, then the beginning-of-line operator does match the + beginning of the string. */ +#define REG_NOTBOL 1 + +/* Like REG_NOTBOL, except for the end-of-line. */ +#define REG_NOTEOL (1 << 1) + +/* Use PMATCH[0] to delimit the start and end of the search in the + buffer. */ +#define REG_STARTEND (1 << 2) + + +/* If any error codes are removed, changed, or added, update the + '__re_error_msgid' table in regcomp.c. */ + +typedef enum +{ + _REG_ENOSYS = -1, /* This will never happen for this implementation. */ + _REG_NOERROR = 0, /* Success. */ + _REG_NOMATCH, /* Didn't find a match (for regexec). */ + + /* POSIX regcomp return error codes. (In the order listed in the + standard.) */ + _REG_BADPAT, /* Invalid pattern. */ + _REG_ECOLLATE, /* Invalid collating element. */ + _REG_ECTYPE, /* Invalid character class name. */ + _REG_EESCAPE, /* Trailing backslash. */ + _REG_ESUBREG, /* Invalid back reference. */ + _REG_EBRACK, /* Unmatched left bracket. */ + _REG_EPAREN, /* Parenthesis imbalance. */ + _REG_EBRACE, /* Unmatched \{. */ + _REG_BADBR, /* Invalid contents of \{\}. */ + _REG_ERANGE, /* Invalid range end. */ + _REG_ESPACE, /* Ran out of memory. */ + _REG_BADRPT, /* No preceding re for repetition op. */ + + /* Error codes we've added. */ + _REG_EEND, /* Premature end. */ + _REG_ESIZE, /* Too large (e.g., repeat count too large). */ + _REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ +} reg_errcode_t; + +#if defined _XOPEN_SOURCE || defined __USE_XOPEN2K +# define REG_ENOSYS _REG_ENOSYS +#endif +#define REG_NOERROR _REG_NOERROR +#define REG_NOMATCH _REG_NOMATCH +#define REG_BADPAT _REG_BADPAT +#define REG_ECOLLATE _REG_ECOLLATE +#define REG_ECTYPE _REG_ECTYPE +#define REG_EESCAPE _REG_EESCAPE +#define REG_ESUBREG _REG_ESUBREG +#define REG_EBRACK _REG_EBRACK +#define REG_EPAREN _REG_EPAREN +#define REG_EBRACE _REG_EBRACE +#define REG_BADBR _REG_BADBR +#define REG_ERANGE _REG_ERANGE +#define REG_ESPACE _REG_ESPACE +#define REG_BADRPT _REG_BADRPT +#define REG_EEND _REG_EEND +#define REG_ESIZE _REG_ESIZE +#define REG_ERPAREN _REG_ERPAREN + +/* This data structure represents a compiled pattern. Before calling + the pattern compiler, the fields 'buffer', 'allocated', 'fastmap', + and 'translate' can be set. After the pattern has been compiled, + the fields 're_nsub', 'not_bol' and 'not_eol' are available. All + other fields are private to the regex routines. */ + +#ifndef RE_TRANSLATE_TYPE +# define __RE_TRANSLATE_TYPE unsigned char * +# ifdef __USE_GNU +# define RE_TRANSLATE_TYPE __RE_TRANSLATE_TYPE +# endif +#endif + +#ifdef __USE_GNU +# define __REPB_PREFIX(name) name +#else +# define __REPB_PREFIX(name) __##name +#endif + +struct re_pattern_buffer +{ + /* Space that holds the compiled pattern. The type + 'struct re_dfa_t' is private and is not declared here. */ + struct re_dfa_t *__REPB_PREFIX(buffer); + + /* Number of bytes to which 'buffer' points. */ + __re_long_size_t __REPB_PREFIX(allocated); + + /* Number of bytes actually used in 'buffer'. */ + __re_long_size_t __REPB_PREFIX(used); + + /* Syntax setting with which the pattern was compiled. */ + reg_syntax_t __REPB_PREFIX(syntax); + + /* Pointer to a fastmap, if any, otherwise zero. re_search uses the + fastmap, if there is one, to skip over impossible starting points + for matches. */ + char *__REPB_PREFIX(fastmap); + + /* Either a translate table to apply to all characters before + comparing them, or zero for no translation. The translation is + applied to a pattern when it is compiled and to a string when it + is matched. */ + __RE_TRANSLATE_TYPE __REPB_PREFIX(translate); + + /* Number of subexpressions found by the compiler. */ + size_t re_nsub; + + /* Zero if this pattern cannot match the empty string, one else. + Well, in truth it's used only in 're_search_2', to see whether or + not we should use the fastmap, so we don't set this absolutely + perfectly; see 're_compile_fastmap' (the "duplicate" case). */ + unsigned __REPB_PREFIX(can_be_null) : 1; + + /* If REGS_UNALLOCATED, allocate space in the 'regs' structure + for 'max (RE_NREGS, re_nsub + 1)' groups. + If REGS_REALLOCATE, reallocate space if necessary. + If REGS_FIXED, use what's there. */ +#ifdef __USE_GNU +# define REGS_UNALLOCATED 0 +# define REGS_REALLOCATE 1 +# define REGS_FIXED 2 +#endif + unsigned __REPB_PREFIX(regs_allocated) : 2; + + /* Set to zero when 're_compile_pattern' compiles a pattern; set to + one by 're_compile_fastmap' if it updates the fastmap. */ + unsigned __REPB_PREFIX(fastmap_accurate) : 1; + + /* If set, 're_match_2' does not return information about + subexpressions. */ + unsigned __REPB_PREFIX(no_sub) : 1; + + /* If set, a beginning-of-line anchor doesn't match at the beginning + of the string. */ + unsigned __REPB_PREFIX(not_bol) : 1; + + /* Similarly for an end-of-line anchor. */ + unsigned __REPB_PREFIX(not_eol) : 1; + + /* If true, an anchor at a newline matches. */ + unsigned __REPB_PREFIX(newline_anchor) : 1; +}; + +typedef struct re_pattern_buffer regex_t; + +/* Type for byte offsets within the string. POSIX mandates this. */ +#ifdef _REGEX_LARGE_OFFSETS +/* POSIX 1003.1-2008 requires that regoff_t be at least as wide as + ptrdiff_t and ssize_t. We don't know of any hosts where ptrdiff_t + is wider than ssize_t, so ssize_t is safe. ptrdiff_t is not + visible here, so use ssize_t. */ +typedef ssize_t regoff_t; +#else +/* The traditional GNU regex implementation mishandles strings longer + than INT_MAX. */ +typedef int regoff_t; +#endif + + +#ifdef __USE_GNU +/* This is the structure we store register match data in. See + regex.texinfo for a full description of what registers match. */ +struct re_registers +{ + __re_size_t num_regs; + regoff_t *start; + regoff_t *end; +}; + + +/* If 'regs_allocated' is REGS_UNALLOCATED in the pattern buffer, + 're_match_2' returns information about at least this many registers + the first time a 'regs' structure is passed. */ +# ifndef RE_NREGS +# define RE_NREGS 30 +# endif +#endif + + +/* POSIX specification for registers. Aside from the different names than + 're_registers', POSIX uses an array of structures, instead of a + structure of arrays. */ +typedef struct +{ + regoff_t rm_so; /* Byte offset from string's start to substring's start. */ + regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ +} regmatch_t; + +/* Declarations for routines. */ + +#ifdef __USE_GNU +/* Sets the current default syntax to SYNTAX, and return the old syntax. + You can also simply assign to the 're_syntax_options' variable. */ +extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax); + +/* Compile the regular expression PATTERN, with length LENGTH + and syntax given by the global 're_syntax_options', into the buffer + BUFFER. Return NULL if successful, and an error string if not. + + To free the allocated storage, you must call 'regfree' on BUFFER. + Note that the translate table must either have been initialized by + 'regcomp', with a malloc'ed value, or set to NULL before calling + 'regfree'. */ +extern const char *re_compile_pattern (const char *__pattern, size_t __length, + struct re_pattern_buffer *__buffer); + + +/* Compile a fastmap for the compiled pattern in BUFFER; used to + accelerate searches. Return 0 if successful and -2 if was an + internal error. */ +extern int re_compile_fastmap (struct re_pattern_buffer *__buffer); + + +/* Search in the string STRING (with length LENGTH) for the pattern + compiled into BUFFER. Start searching at position START, for RANGE + characters. Return the starting position of the match, -1 for no + match, or -2 for an internal error. Also return register + information in REGS (if REGS and BUFFER->no_sub are nonzero). */ +extern regoff_t re_search (struct re_pattern_buffer *__buffer, + const char *__String, regoff_t __length, + regoff_t __start, regoff_t __range, + struct re_registers *__regs); + + +/* Like 're_search', but search in the concatenation of STRING1 and + STRING2. Also, stop searching at index START + STOP. */ +extern regoff_t re_search_2 (struct re_pattern_buffer *__buffer, + const char *__string1, regoff_t __length1, + const char *__string2, regoff_t __length2, + regoff_t __start, regoff_t __range, + struct re_registers *__regs, + regoff_t __stop); + + +/* Like 're_search', but return how many characters in STRING the regexp + in BUFFER matched, starting at position START. */ +extern regoff_t re_match (struct re_pattern_buffer *__buffer, + const char *__String, regoff_t __length, + regoff_t __start, struct re_registers *__regs); + + +/* Relates to 're_match' as 're_search_2' relates to 're_search'. */ +extern regoff_t re_match_2 (struct re_pattern_buffer *__buffer, + const char *__string1, regoff_t __length1, + const char *__string2, regoff_t __length2, + regoff_t __start, struct re_registers *__regs, + regoff_t __stop); + + +/* Set REGS to hold NUM_REGS registers, storing them in STARTS and + ENDS. Subsequent matches using BUFFER and REGS will use this memory + for recording register information. STARTS and ENDS must be + allocated with malloc, and must each be at least 'NUM_REGS * sizeof + (regoff_t)' bytes long. + + If NUM_REGS == 0, then subsequent matches should allocate their own + register data. + + Unless this function is called, the first search or match using + BUFFER will allocate its own register data, without + freeing the old data. */ +extern void re_set_registers (struct re_pattern_buffer *__buffer, + struct re_registers *__regs, + __re_size_t __num_regs, + regoff_t *__starts, regoff_t *__ends); +#endif /* Use GNU */ + +#if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_MISC) +# ifndef _CRAY +/* 4.2 bsd compatibility. */ +extern char *re_comp (const char *); +extern int re_exec (const char *); +# endif +#endif + +/* For plain 'restrict', use glibc's __restrict if defined. + Otherwise, GCC 2.95 and later have "__restrict"; C99 compilers have + "restrict", and "configure" may have defined "restrict". + Other compilers use __restrict, __restrict__, and _Restrict, and + 'configure' might #define 'restrict' to those words, so pick a + different name. */ +#ifndef _Restrict_ +# if defined __restrict || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) +# define _Restrict_ __restrict +# elif 199901L <= __STDC_VERSION__ || defined restrict +# define _Restrict_ restrict +# else +# define _Restrict_ +# endif +#endif +/* For [restrict], use glibc's __restrict_arr if available. + Otherwise, GCC 3.1 (not in C++ mode) and C99 support [restrict]. */ +#ifndef _Restrict_arr_ +# ifdef __restrict_arr +# define _Restrict_arr_ __restrict_arr +# elif ((199901L <= __STDC_VERSION__ || 3 < __GNUC__ + (1 <= __GNUC_MINOR__)) \ + && !defined __GNUG__) +# define _Restrict_arr_ _Restrict_ +# else +# define _Restrict_arr_ +# endif +#endif + +/* POSIX compatibility. */ +extern int regcomp (regex_t *_Restrict_ __preg, + const char *_Restrict_ __pattern, + int __cflags); + +extern int regexec (const regex_t *_Restrict_ __preg, + const char *_Restrict_ __String, size_t __nmatch, + regmatch_t __pmatch[_Restrict_arr_], + int __eflags); + +extern size_t regerror (int __errcode, const regex_t *_Restrict_ __preg, + char *_Restrict_ __errbuf, size_t __errbuf_size); + +extern void regfree (regex_t *__preg); + + +#ifdef __cplusplus +} +#endif /* C++ */ + +#endif /* regex.h */ diff --git a/devspec.en_US/project/recutils/lib/regex_internal.c b/devspec.en_US/project/recutils/lib/regex_internal.c new file mode 100755 index 0000000..b592f06 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/regex_internal.c @@ -0,0 +1,1746 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +static void re_string_construct_common (const char *str, Idx len, + re_string_t *pstr, + RE_TRANSLATE_TYPE trans, bool icase, + const re_dfa_t *dfa); +static re_dfastate_t *create_ci_newstate (const re_dfa_t *dfa, + const re_node_set *nodes, + re_hashval_t hash); +static re_dfastate_t *create_cd_newstate (const re_dfa_t *dfa, + const re_node_set *nodes, + unsigned int context, + re_hashval_t hash); +static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr, + Idx new_buf_len); +#ifdef RE_ENABLE_I18N +static void build_wcs_buffer (re_string_t *pstr); +static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr); +#endif /* RE_ENABLE_I18N */ +static void build_upper_buffer (re_string_t *pstr); +static void re_string_translate_buffer (re_string_t *pstr); +static unsigned int re_string_context_at (const re_string_t *input, Idx idx, + int eflags) __attribute__ ((pure)); + +/* Functions for string operation. */ + +/* This function allocate the buffers. It is necessary to call + re_string_reconstruct before using the object. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_string_allocate (re_string_t *pstr, const char *str, Idx len, Idx init_len, + RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) +{ + reg_errcode_t ret; + Idx init_buf_len; + + /* Ensure at least one character fits into the buffers. */ + if (init_len < dfa->mb_cur_max) + init_len = dfa->mb_cur_max; + init_buf_len = (len + 1 < init_len) ? len + 1: init_len; + re_string_construct_common (str, len, pstr, trans, icase, dfa); + + ret = re_string_realloc_buffers (pstr, init_buf_len); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + + pstr->word_char = dfa->word_char; + pstr->word_ops_used = dfa->word_ops_used; + pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; + pstr->valid_len = (pstr->mbs_allocated || dfa->mb_cur_max > 1) ? 0 : len; + pstr->valid_raw_len = pstr->valid_len; + return REG_NOERROR; +} + +/* This function allocate the buffers, and initialize them. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_string_construct (re_string_t *pstr, const char *str, Idx len, + RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) +{ + reg_errcode_t ret; + memset (pstr, '\0', sizeof (re_string_t)); + re_string_construct_common (str, len, pstr, trans, icase, dfa); + + if (len > 0) + { + ret = re_string_realloc_buffers (pstr, len + 1); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + } + pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; + + if (icase) + { +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + { + while (1) + { + ret = build_wcs_upper_buffer (pstr); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + if (pstr->valid_raw_len >= len) + break; + if (pstr->bufs_len > pstr->valid_len + dfa->mb_cur_max) + break; + ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + } + } + else +#endif /* RE_ENABLE_I18N */ + build_upper_buffer (pstr); + } + else + { +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + build_wcs_buffer (pstr); + else +#endif /* RE_ENABLE_I18N */ + { + if (trans != NULL) + re_string_translate_buffer (pstr); + else + { + pstr->valid_len = pstr->bufs_len; + pstr->valid_raw_len = pstr->bufs_len; + } + } + } + + return REG_NOERROR; +} + +/* Helper functions for re_string_allocate, and re_string_construct. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len) +{ +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + { + wint_t *new_wcs; + + /* Avoid overflow in realloc. */ + const size_t max_object_size = MAX (sizeof (wint_t), sizeof (Idx)); + if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) + < new_buf_len)) + return REG_ESPACE; + + new_wcs = re_realloc (pstr->wcs, wint_t, new_buf_len); + if (__glibc_unlikely (new_wcs == NULL)) + return REG_ESPACE; + pstr->wcs = new_wcs; + if (pstr->offsets != NULL) + { + Idx *new_offsets = re_realloc (pstr->offsets, Idx, new_buf_len); + if (__glibc_unlikely (new_offsets == NULL)) + return REG_ESPACE; + pstr->offsets = new_offsets; + } + } +#endif /* RE_ENABLE_I18N */ + if (pstr->mbs_allocated) + { + unsigned char *new_mbs = re_realloc (pstr->mbs, unsigned char, + new_buf_len); + if (__glibc_unlikely (new_mbs == NULL)) + return REG_ESPACE; + pstr->mbs = new_mbs; + } + pstr->bufs_len = new_buf_len; + return REG_NOERROR; +} + + +static void +re_string_construct_common (const char *str, Idx len, re_string_t *pstr, + RE_TRANSLATE_TYPE trans, bool icase, + const re_dfa_t *dfa) +{ + pstr->raw_mbs = (const unsigned char *) str; + pstr->len = len; + pstr->raw_len = len; + pstr->trans = trans; + pstr->icase = icase; + pstr->mbs_allocated = (trans != NULL || icase); + pstr->mb_cur_max = dfa->mb_cur_max; + pstr->is_utf8 = dfa->is_utf8; + pstr->map_notascii = dfa->map_notascii; + pstr->stop = pstr->len; + pstr->raw_stop = pstr->stop; +} + +#ifdef RE_ENABLE_I18N + +/* Build wide character buffer PSTR->WCS. + If the byte sequence of the string are: + <mb1>(0), <mb1>(1), <mb2>(0), <mb2>(1), <sb3> + Then wide character buffer will be: + <wc1> , WEOF , <wc2> , WEOF , <wc3> + We use WEOF for padding, they indicate that the position isn't + a first byte of a multibyte character. + + Note that this function assumes PSTR->VALID_LEN elements are already + built and starts from PSTR->VALID_LEN. */ + +static void +build_wcs_buffer (re_string_t *pstr) +{ +#ifdef _LIBC + unsigned char buf[MB_LEN_MAX]; + assert (MB_LEN_MAX >= pstr->mb_cur_max); +#else + unsigned char buf[64]; +#endif + mbstate_t prev_st; + Idx byte_idx, end_idx, remain_len; + size_t mbclen; + + /* Build the buffers from pstr->valid_len to either pstr->len or + pstr->bufs_len. */ + end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; + for (byte_idx = pstr->valid_len; byte_idx < end_idx;) + { + wchar_t wc; + const char *p; + + remain_len = end_idx - byte_idx; + prev_st = pstr->cur_state; + /* Apply the translation if we need. */ + if (__glibc_unlikely (pstr->trans != NULL)) + { + int i, ch; + + for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) + { + ch = pstr->raw_mbs [pstr->raw_mbs_idx + byte_idx + i]; + buf[i] = pstr->mbs[byte_idx + i] = pstr->trans[ch]; + } + p = (const char *) buf; + } + else + p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx; + mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); + if (__glibc_unlikely (mbclen == (size_t) -1 || mbclen == 0 + || (mbclen == (size_t) -2 + && pstr->bufs_len >= pstr->len))) + { + /* We treat these cases as a singlebyte character. */ + mbclen = 1; + wc = (wchar_t) pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; + if (__glibc_unlikely (pstr->trans != NULL)) + wc = pstr->trans[wc]; + pstr->cur_state = prev_st; + } + else if (__glibc_unlikely (mbclen == (size_t) -2)) + { + /* The buffer doesn't have enough space, finish to build. */ + pstr->cur_state = prev_st; + break; + } + + /* Write wide character and padding. */ + pstr->wcs[byte_idx++] = wc; + /* Write paddings. */ + for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) + pstr->wcs[byte_idx++] = WEOF; + } + pstr->valid_len = byte_idx; + pstr->valid_raw_len = byte_idx; +} + +/* Build wide character buffer PSTR->WCS like build_wcs_buffer, + but for REG_ICASE. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +build_wcs_upper_buffer (re_string_t *pstr) +{ + mbstate_t prev_st; + Idx src_idx, byte_idx, end_idx, remain_len; + size_t mbclen; +#ifdef _LIBC + char buf[MB_LEN_MAX]; + assert (MB_LEN_MAX >= pstr->mb_cur_max); +#else + char buf[64]; +#endif + + byte_idx = pstr->valid_len; + end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; + + /* The following optimization assumes that ASCII characters can be + mapped to wide characters with a simple cast. */ + if (! pstr->map_notascii && pstr->trans == NULL && !pstr->offsets_needed) + { + while (byte_idx < end_idx) + { + wchar_t wc; + + if (isascii (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]) + && mbsinit (&pstr->cur_state)) + { + /* In case of a singlebyte character. */ + pstr->mbs[byte_idx] + = toupper (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]); + /* The next step uses the assumption that wchar_t is encoded + ASCII-safe: all ASCII values can be converted like this. */ + pstr->wcs[byte_idx] = (wchar_t) pstr->mbs[byte_idx]; + ++byte_idx; + continue; + } + + remain_len = end_idx - byte_idx; + prev_st = pstr->cur_state; + mbclen = __mbrtowc (&wc, + ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx + + byte_idx), remain_len, &pstr->cur_state); + if (__glibc_likely (0 < mbclen && mbclen < (size_t) -2)) + { + wchar_t wcu = __towupper (wc); + if (wcu != wc) + { + size_t mbcdlen; + + mbcdlen = __wcrtomb (buf, wcu, &prev_st); + if (__glibc_likely (mbclen == mbcdlen)) + memcpy (pstr->mbs + byte_idx, buf, mbclen); + else + { + src_idx = byte_idx; + goto offsets_needed; + } + } + else + memcpy (pstr->mbs + byte_idx, + pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx, mbclen); + pstr->wcs[byte_idx++] = wcu; + /* Write paddings. */ + for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) + pstr->wcs[byte_idx++] = WEOF; + } + else if (mbclen == (size_t) -1 || mbclen == 0 + || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len)) + { + /* It is an invalid character, an incomplete character + at the end of the string, or '\0'. Just use the byte. */ + int ch = pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; + pstr->mbs[byte_idx] = ch; + /* And also cast it to wide char. */ + pstr->wcs[byte_idx++] = (wchar_t) ch; + if (__glibc_unlikely (mbclen == (size_t) -1)) + pstr->cur_state = prev_st; + } + else + { + /* The buffer doesn't have enough space, finish to build. */ + pstr->cur_state = prev_st; + break; + } + } + pstr->valid_len = byte_idx; + pstr->valid_raw_len = byte_idx; + return REG_NOERROR; + } + else + for (src_idx = pstr->valid_raw_len; byte_idx < end_idx;) + { + wchar_t wc; + const char *p; + offsets_needed: + remain_len = end_idx - byte_idx; + prev_st = pstr->cur_state; + if (__glibc_unlikely (pstr->trans != NULL)) + { + int i, ch; + + for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) + { + ch = pstr->raw_mbs [pstr->raw_mbs_idx + src_idx + i]; + buf[i] = pstr->trans[ch]; + } + p = (const char *) buf; + } + else + p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + src_idx; + mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); + if (__glibc_likely (0 < mbclen && mbclen < (size_t) -2)) + { + wchar_t wcu = __towupper (wc); + if (wcu != wc) + { + size_t mbcdlen; + + mbcdlen = __wcrtomb ((char *) buf, wcu, &prev_st); + if (__glibc_likely (mbclen == mbcdlen)) + memcpy (pstr->mbs + byte_idx, buf, mbclen); + else if (mbcdlen != (size_t) -1) + { + size_t i; + + if (byte_idx + mbcdlen > pstr->bufs_len) + { + pstr->cur_state = prev_st; + break; + } + + if (pstr->offsets == NULL) + { + pstr->offsets = re_malloc (Idx, pstr->bufs_len); + + if (pstr->offsets == NULL) + return REG_ESPACE; + } + if (!pstr->offsets_needed) + { + for (i = 0; i < (size_t) byte_idx; ++i) + pstr->offsets[i] = i; + pstr->offsets_needed = 1; + } + + memcpy (pstr->mbs + byte_idx, buf, mbcdlen); + pstr->wcs[byte_idx] = wcu; + pstr->offsets[byte_idx] = src_idx; + for (i = 1; i < mbcdlen; ++i) + { + pstr->offsets[byte_idx + i] + = src_idx + (i < mbclen ? i : mbclen - 1); + pstr->wcs[byte_idx + i] = WEOF; + } + pstr->len += mbcdlen - mbclen; + if (pstr->raw_stop > src_idx) + pstr->stop += mbcdlen - mbclen; + end_idx = (pstr->bufs_len > pstr->len) + ? pstr->len : pstr->bufs_len; + byte_idx += mbcdlen; + src_idx += mbclen; + continue; + } + else + memcpy (pstr->mbs + byte_idx, p, mbclen); + } + else + memcpy (pstr->mbs + byte_idx, p, mbclen); + + if (__glibc_unlikely (pstr->offsets_needed != 0)) + { + size_t i; + for (i = 0; i < mbclen; ++i) + pstr->offsets[byte_idx + i] = src_idx + i; + } + src_idx += mbclen; + + pstr->wcs[byte_idx++] = wcu; + /* Write paddings. */ + for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) + pstr->wcs[byte_idx++] = WEOF; + } + else if (mbclen == (size_t) -1 || mbclen == 0 + || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len)) + { + /* It is an invalid character or '\0'. Just use the byte. */ + int ch = pstr->raw_mbs[pstr->raw_mbs_idx + src_idx]; + + if (__glibc_unlikely (pstr->trans != NULL)) + ch = pstr->trans [ch]; + pstr->mbs[byte_idx] = ch; + + if (__glibc_unlikely (pstr->offsets_needed != 0)) + pstr->offsets[byte_idx] = src_idx; + ++src_idx; + + /* And also cast it to wide char. */ + pstr->wcs[byte_idx++] = (wchar_t) ch; + if (__glibc_unlikely (mbclen == (size_t) -1)) + pstr->cur_state = prev_st; + } + else + { + /* The buffer doesn't have enough space, finish to build. */ + pstr->cur_state = prev_st; + break; + } + } + pstr->valid_len = byte_idx; + pstr->valid_raw_len = src_idx; + return REG_NOERROR; +} + +/* Skip characters until the index becomes greater than NEW_RAW_IDX. + Return the index. */ + +static Idx +re_string_skip_chars (re_string_t *pstr, Idx new_raw_idx, wint_t *last_wc) +{ + mbstate_t prev_st; + Idx rawbuf_idx; + size_t mbclen; + wint_t wc = WEOF; + + /* Skip the characters which are not necessary to check. */ + for (rawbuf_idx = pstr->raw_mbs_idx + pstr->valid_raw_len; + rawbuf_idx < new_raw_idx;) + { + wchar_t wc2; + Idx remain_len = pstr->raw_len - rawbuf_idx; + prev_st = pstr->cur_state; + mbclen = __mbrtowc (&wc2, (const char *) pstr->raw_mbs + rawbuf_idx, + remain_len, &pstr->cur_state); + if (__glibc_unlikely (mbclen == (size_t) -2 || mbclen == (size_t) -1 + || mbclen == 0)) + { + /* We treat these cases as a single byte character. */ + if (mbclen == 0 || remain_len == 0) + wc = L'\0'; + else + wc = *(unsigned char *) (pstr->raw_mbs + rawbuf_idx); + mbclen = 1; + pstr->cur_state = prev_st; + } + else + wc = wc2; + /* Then proceed the next character. */ + rawbuf_idx += mbclen; + } + *last_wc = wc; + return rawbuf_idx; +} +#endif /* RE_ENABLE_I18N */ + +/* Build the buffer PSTR->MBS, and apply the translation if we need. + This function is used in case of REG_ICASE. */ + +static void +build_upper_buffer (re_string_t *pstr) +{ + Idx char_idx, end_idx; + end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; + + for (char_idx = pstr->valid_len; char_idx < end_idx; ++char_idx) + { + int ch = pstr->raw_mbs[pstr->raw_mbs_idx + char_idx]; + if (__glibc_unlikely (pstr->trans != NULL)) + ch = pstr->trans[ch]; + pstr->mbs[char_idx] = toupper (ch); + } + pstr->valid_len = char_idx; + pstr->valid_raw_len = char_idx; +} + +/* Apply TRANS to the buffer in PSTR. */ + +static void +re_string_translate_buffer (re_string_t *pstr) +{ + Idx buf_idx, end_idx; + end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; + + for (buf_idx = pstr->valid_len; buf_idx < end_idx; ++buf_idx) + { + int ch = pstr->raw_mbs[pstr->raw_mbs_idx + buf_idx]; + pstr->mbs[buf_idx] = pstr->trans[ch]; + } + + pstr->valid_len = buf_idx; + pstr->valid_raw_len = buf_idx; +} + +/* This function re-construct the buffers. + Concretely, convert to wide character in case of pstr->mb_cur_max > 1, + convert to upper case in case of REG_ICASE, apply translation. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags) +{ + Idx offset; + + if (__glibc_unlikely (pstr->raw_mbs_idx <= idx)) + offset = idx - pstr->raw_mbs_idx; + else + { + /* Reset buffer. */ +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); +#endif /* RE_ENABLE_I18N */ + pstr->len = pstr->raw_len; + pstr->stop = pstr->raw_stop; + pstr->valid_len = 0; + pstr->raw_mbs_idx = 0; + pstr->valid_raw_len = 0; + pstr->offsets_needed = 0; + pstr->tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF + : CONTEXT_NEWLINE | CONTEXT_BEGBUF); + if (!pstr->mbs_allocated) + pstr->mbs = (unsigned char *) pstr->raw_mbs; + offset = idx; + } + + if (__glibc_likely (offset != 0)) + { + /* Should the already checked characters be kept? */ + if (__glibc_likely (offset < pstr->valid_raw_len)) + { + /* Yes, move them to the front of the buffer. */ +#ifdef RE_ENABLE_I18N + if (__glibc_unlikely (pstr->offsets_needed)) + { + Idx low = 0, high = pstr->valid_len, mid; + do + { + mid = (high + low) / 2; + if (pstr->offsets[mid] > offset) + high = mid; + else if (pstr->offsets[mid] < offset) + low = mid + 1; + else + break; + } + while (low < high); + if (pstr->offsets[mid] < offset) + ++mid; + pstr->tip_context = re_string_context_at (pstr, mid - 1, + eflags); + /* This can be quite complicated, so handle specially + only the common and easy case where the character with + different length representation of lower and upper + case is present at or after offset. */ + if (pstr->valid_len > offset + && mid == offset && pstr->offsets[mid] == offset) + { + memmove (pstr->wcs, pstr->wcs + offset, + (pstr->valid_len - offset) * sizeof (wint_t)); + memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset); + pstr->valid_len -= offset; + pstr->valid_raw_len -= offset; + for (low = 0; low < pstr->valid_len; low++) + pstr->offsets[low] = pstr->offsets[low + offset] - offset; + } + else + { + /* Otherwise, just find out how long the partial multibyte + character at offset is and fill it with WEOF/255. */ + pstr->len = pstr->raw_len - idx + offset; + pstr->stop = pstr->raw_stop - idx + offset; + pstr->offsets_needed = 0; + while (mid > 0 && pstr->offsets[mid - 1] == offset) + --mid; + while (mid < pstr->valid_len) + if (pstr->wcs[mid] != WEOF) + break; + else + ++mid; + if (mid == pstr->valid_len) + pstr->valid_len = 0; + else + { + pstr->valid_len = pstr->offsets[mid] - offset; + if (pstr->valid_len) + { + for (low = 0; low < pstr->valid_len; ++low) + pstr->wcs[low] = WEOF; + memset (pstr->mbs, 255, pstr->valid_len); + } + } + pstr->valid_raw_len = pstr->valid_len; + } + } + else +#endif + { + pstr->tip_context = re_string_context_at (pstr, offset - 1, + eflags); +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + memmove (pstr->wcs, pstr->wcs + offset, + (pstr->valid_len - offset) * sizeof (wint_t)); +#endif /* RE_ENABLE_I18N */ + if (__glibc_unlikely (pstr->mbs_allocated)) + memmove (pstr->mbs, pstr->mbs + offset, + pstr->valid_len - offset); + pstr->valid_len -= offset; + pstr->valid_raw_len -= offset; +#if defined DEBUG && DEBUG + assert (pstr->valid_len > 0); +#endif + } + } + else + { +#ifdef RE_ENABLE_I18N + /* No, skip all characters until IDX. */ + Idx prev_valid_len = pstr->valid_len; + + if (__glibc_unlikely (pstr->offsets_needed)) + { + pstr->len = pstr->raw_len - idx + offset; + pstr->stop = pstr->raw_stop - idx + offset; + pstr->offsets_needed = 0; + } +#endif + pstr->valid_len = 0; +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + { + Idx wcs_idx; + wint_t wc = WEOF; + + if (pstr->is_utf8) + { + const unsigned char *raw, *p, *end; + + /* Special case UTF-8. Multi-byte chars start with any + byte other than 0x80 - 0xbf. */ + raw = pstr->raw_mbs + pstr->raw_mbs_idx; + end = raw + (offset - pstr->mb_cur_max); + if (end < pstr->raw_mbs) + end = pstr->raw_mbs; + p = raw + offset - 1; +#ifdef _LIBC + /* We know the wchar_t encoding is UCS4, so for the simple + case, ASCII characters, skip the conversion step. */ + if (isascii (*p) && __glibc_likely (pstr->trans == NULL)) + { + memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); + /* pstr->valid_len = 0; */ + wc = (wchar_t) *p; + } + else +#endif + for (; p >= end; --p) + if ((*p & 0xc0) != 0x80) + { + mbstate_t cur_state; + wchar_t wc2; + Idx mlen = raw + pstr->len - p; + unsigned char buf[6]; + size_t mbclen; + + const unsigned char *pp = p; + if (__glibc_unlikely (pstr->trans != NULL)) + { + int i = mlen < 6 ? mlen : 6; + while (--i >= 0) + buf[i] = pstr->trans[p[i]]; + pp = buf; + } + /* XXX Don't use mbrtowc, we know which conversion + to use (UTF-8 -> UCS4). */ + memset (&cur_state, 0, sizeof (cur_state)); + mbclen = __mbrtowc (&wc2, (const char *) pp, mlen, + &cur_state); + if (raw + offset - p <= mbclen + && mbclen < (size_t) -2) + { + memset (&pstr->cur_state, '\0', + sizeof (mbstate_t)); + pstr->valid_len = mbclen - (raw + offset - p); + wc = wc2; + } + break; + } + } + + if (wc == WEOF) + pstr->valid_len = re_string_skip_chars (pstr, idx, &wc) - idx; + if (wc == WEOF) + pstr->tip_context + = re_string_context_at (pstr, prev_valid_len - 1, eflags); + else + pstr->tip_context = ((__glibc_unlikely (pstr->word_ops_used != 0) + && IS_WIDE_WORD_CHAR (wc)) + ? CONTEXT_WORD + : ((IS_WIDE_NEWLINE (wc) + && pstr->newline_anchor) + ? CONTEXT_NEWLINE : 0)); + if (__glibc_unlikely (pstr->valid_len)) + { + for (wcs_idx = 0; wcs_idx < pstr->valid_len; ++wcs_idx) + pstr->wcs[wcs_idx] = WEOF; + if (pstr->mbs_allocated) + memset (pstr->mbs, 255, pstr->valid_len); + } + pstr->valid_raw_len = pstr->valid_len; + } + else +#endif /* RE_ENABLE_I18N */ + { + int c = pstr->raw_mbs[pstr->raw_mbs_idx + offset - 1]; + pstr->valid_raw_len = 0; + if (pstr->trans) + c = pstr->trans[c]; + pstr->tip_context = (bitset_contain (pstr->word_char, c) + ? CONTEXT_WORD + : ((IS_NEWLINE (c) && pstr->newline_anchor) + ? CONTEXT_NEWLINE : 0)); + } + } + if (!__glibc_unlikely (pstr->mbs_allocated)) + pstr->mbs += offset; + } + pstr->raw_mbs_idx = idx; + pstr->len -= offset; + pstr->stop -= offset; + + /* Then build the buffers. */ +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + { + if (pstr->icase) + { + reg_errcode_t ret = build_wcs_upper_buffer (pstr); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + } + else + build_wcs_buffer (pstr); + } + else +#endif /* RE_ENABLE_I18N */ + if (__glibc_unlikely (pstr->mbs_allocated)) + { + if (pstr->icase) + build_upper_buffer (pstr); + else if (pstr->trans != NULL) + re_string_translate_buffer (pstr); + } + else + pstr->valid_len = pstr->len; + + pstr->cur_idx = 0; + return REG_NOERROR; +} + +static unsigned char +__attribute__ ((pure)) +re_string_peek_byte_case (const re_string_t *pstr, Idx idx) +{ + int ch; + Idx off; + + /* Handle the common (easiest) cases first. */ + if (__glibc_likely (!pstr->mbs_allocated)) + return re_string_peek_byte (pstr, idx); + +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1 + && ! re_string_is_single_byte_char (pstr, pstr->cur_idx + idx)) + return re_string_peek_byte (pstr, idx); +#endif + + off = pstr->cur_idx + idx; +#ifdef RE_ENABLE_I18N + if (pstr->offsets_needed) + off = pstr->offsets[off]; +#endif + + ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; + +#ifdef RE_ENABLE_I18N + /* Ensure that e.g. for tr_TR.UTF-8 BACKSLASH DOTLESS SMALL LETTER I + this function returns CAPITAL LETTER I instead of first byte of + DOTLESS SMALL LETTER I. The latter would confuse the parser, + since peek_byte_case doesn't advance cur_idx in any way. */ + if (pstr->offsets_needed && !isascii (ch)) + return re_string_peek_byte (pstr, idx); +#endif + + return ch; +} + +static unsigned char +re_string_fetch_byte_case (re_string_t *pstr) +{ + if (__glibc_likely (!pstr->mbs_allocated)) + return re_string_fetch_byte (pstr); + +#ifdef RE_ENABLE_I18N + if (pstr->offsets_needed) + { + Idx off; + int ch; + + /* For tr_TR.UTF-8 [[:islower:]] there is + [[: CAPITAL LETTER I WITH DOT lower:]] in mbs. Skip + in that case the whole multi-byte character and return + the original letter. On the other side, with + [[: DOTLESS SMALL LETTER I return [[:I, as doing + anything else would complicate things too much. */ + + if (!re_string_first_byte (pstr, pstr->cur_idx)) + return re_string_fetch_byte (pstr); + + off = pstr->offsets[pstr->cur_idx]; + ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; + + if (! isascii (ch)) + return re_string_fetch_byte (pstr); + + re_string_skip_bytes (pstr, + re_string_char_size_at (pstr, pstr->cur_idx)); + return ch; + } +#endif + + return pstr->raw_mbs[pstr->raw_mbs_idx + pstr->cur_idx++]; +} + +static void +re_string_destruct (re_string_t *pstr) +{ +#ifdef RE_ENABLE_I18N + re_free (pstr->wcs); + re_free (pstr->offsets); +#endif /* RE_ENABLE_I18N */ + if (pstr->mbs_allocated) + re_free (pstr->mbs); +} + +/* Return the context at IDX in INPUT. */ + +static unsigned int +re_string_context_at (const re_string_t *input, Idx idx, int eflags) +{ + int c; + if (__glibc_unlikely (idx < 0)) + /* In this case, we use the value stored in input->tip_context, + since we can't know the character in input->mbs[-1] here. */ + return input->tip_context; + if (__glibc_unlikely (idx == input->len)) + return ((eflags & REG_NOTEOL) ? CONTEXT_ENDBUF + : CONTEXT_NEWLINE | CONTEXT_ENDBUF); +#ifdef RE_ENABLE_I18N + if (input->mb_cur_max > 1) + { + wint_t wc; + Idx wc_idx = idx; + while(input->wcs[wc_idx] == WEOF) + { +#if defined DEBUG && DEBUG + /* It must not happen. */ + assert (wc_idx >= 0); +#endif + --wc_idx; + if (wc_idx < 0) + return input->tip_context; + } + wc = input->wcs[wc_idx]; + if (__glibc_unlikely (input->word_ops_used != 0) + && IS_WIDE_WORD_CHAR (wc)) + return CONTEXT_WORD; + return (IS_WIDE_NEWLINE (wc) && input->newline_anchor + ? CONTEXT_NEWLINE : 0); + } + else +#endif + { + c = re_string_byte_at (input, idx); + if (bitset_contain (input->word_char, c)) + return CONTEXT_WORD; + return IS_NEWLINE (c) && input->newline_anchor ? CONTEXT_NEWLINE : 0; + } +} + +/* Functions for set operation. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_node_set_alloc (re_node_set *set, Idx size) +{ + set->alloc = size; + set->nelem = 0; + set->elems = re_malloc (Idx, size); + if (__glibc_unlikely (set->elems == NULL) + && (MALLOC_0_IS_NONNULL || size != 0)) + return REG_ESPACE; + return REG_NOERROR; +} + +static reg_errcode_t +__attribute_warn_unused_result__ +re_node_set_init_1 (re_node_set *set, Idx elem) +{ + set->alloc = 1; + set->nelem = 1; + set->elems = re_malloc (Idx, 1); + if (__glibc_unlikely (set->elems == NULL)) + { + set->alloc = set->nelem = 0; + return REG_ESPACE; + } + set->elems[0] = elem; + return REG_NOERROR; +} + +static reg_errcode_t +__attribute_warn_unused_result__ +re_node_set_init_2 (re_node_set *set, Idx elem1, Idx elem2) +{ + set->alloc = 2; + set->elems = re_malloc (Idx, 2); + if (__glibc_unlikely (set->elems == NULL)) + return REG_ESPACE; + if (elem1 == elem2) + { + set->nelem = 1; + set->elems[0] = elem1; + } + else + { + set->nelem = 2; + if (elem1 < elem2) + { + set->elems[0] = elem1; + set->elems[1] = elem2; + } + else + { + set->elems[0] = elem2; + set->elems[1] = elem1; + } + } + return REG_NOERROR; +} + +static reg_errcode_t +__attribute_warn_unused_result__ +re_node_set_init_copy (re_node_set *dest, const re_node_set *src) +{ + dest->nelem = src->nelem; + if (src->nelem > 0) + { + dest->alloc = dest->nelem; + dest->elems = re_malloc (Idx, dest->alloc); + if (__glibc_unlikely (dest->elems == NULL)) + { + dest->alloc = dest->nelem = 0; + return REG_ESPACE; + } + memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); + } + else + re_node_set_init_empty (dest); + return REG_NOERROR; +} + +/* Calculate the intersection of the sets SRC1 and SRC2. And merge it to + DEST. Return value indicate the error code or REG_NOERROR if succeeded. + Note: We assume dest->elems is NULL, when dest->alloc is 0. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1, + const re_node_set *src2) +{ + Idx i1, i2, is, id, delta, sbase; + if (src1->nelem == 0 || src2->nelem == 0) + return REG_NOERROR; + + /* We need dest->nelem + 2 * elems_in_intersection; this is a + conservative estimate. */ + if (src1->nelem + src2->nelem + dest->nelem > dest->alloc) + { + Idx new_alloc = src1->nelem + src2->nelem + dest->alloc; + Idx *new_elems = re_realloc (dest->elems, Idx, new_alloc); + if (__glibc_unlikely (new_elems == NULL)) + return REG_ESPACE; + dest->elems = new_elems; + dest->alloc = new_alloc; + } + + /* Find the items in the intersection of SRC1 and SRC2, and copy + into the top of DEST those that are not already in DEST itself. */ + sbase = dest->nelem + src1->nelem + src2->nelem; + i1 = src1->nelem - 1; + i2 = src2->nelem - 1; + id = dest->nelem - 1; + for (;;) + { + if (src1->elems[i1] == src2->elems[i2]) + { + /* Try to find the item in DEST. Maybe we could binary search? */ + while (id >= 0 && dest->elems[id] > src1->elems[i1]) + --id; + + if (id < 0 || dest->elems[id] != src1->elems[i1]) + dest->elems[--sbase] = src1->elems[i1]; + + if (--i1 < 0 || --i2 < 0) + break; + } + + /* Lower the highest of the two items. */ + else if (src1->elems[i1] < src2->elems[i2]) + { + if (--i2 < 0) + break; + } + else + { + if (--i1 < 0) + break; + } + } + + id = dest->nelem - 1; + is = dest->nelem + src1->nelem + src2->nelem - 1; + delta = is - sbase + 1; + + /* Now copy. When DELTA becomes zero, the remaining + DEST elements are already in place; this is more or + less the same loop that is in re_node_set_merge. */ + dest->nelem += delta; + if (delta > 0 && id >= 0) + for (;;) + { + if (dest->elems[is] > dest->elems[id]) + { + /* Copy from the top. */ + dest->elems[id + delta--] = dest->elems[is--]; + if (delta == 0) + break; + } + else + { + /* Slide from the bottom. */ + dest->elems[id + delta] = dest->elems[id]; + if (--id < 0) + break; + } + } + + /* Copy remaining SRC elements. */ + memcpy (dest->elems, dest->elems + sbase, delta * sizeof (Idx)); + + return REG_NOERROR; +} + +/* Calculate the union set of the sets SRC1 and SRC2. And store it to + DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_node_set_init_union (re_node_set *dest, const re_node_set *src1, + const re_node_set *src2) +{ + Idx i1, i2, id; + if (src1 != NULL && src1->nelem > 0 && src2 != NULL && src2->nelem > 0) + { + dest->alloc = src1->nelem + src2->nelem; + dest->elems = re_malloc (Idx, dest->alloc); + if (__glibc_unlikely (dest->elems == NULL)) + return REG_ESPACE; + } + else + { + if (src1 != NULL && src1->nelem > 0) + return re_node_set_init_copy (dest, src1); + else if (src2 != NULL && src2->nelem > 0) + return re_node_set_init_copy (dest, src2); + else + re_node_set_init_empty (dest); + return REG_NOERROR; + } + for (i1 = i2 = id = 0 ; i1 < src1->nelem && i2 < src2->nelem ;) + { + if (src1->elems[i1] > src2->elems[i2]) + { + dest->elems[id++] = src2->elems[i2++]; + continue; + } + if (src1->elems[i1] == src2->elems[i2]) + ++i2; + dest->elems[id++] = src1->elems[i1++]; + } + if (i1 < src1->nelem) + { + memcpy (dest->elems + id, src1->elems + i1, + (src1->nelem - i1) * sizeof (Idx)); + id += src1->nelem - i1; + } + else if (i2 < src2->nelem) + { + memcpy (dest->elems + id, src2->elems + i2, + (src2->nelem - i2) * sizeof (Idx)); + id += src2->nelem - i2; + } + dest->nelem = id; + return REG_NOERROR; +} + +/* Calculate the union set of the sets DEST and SRC. And store it to + DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_node_set_merge (re_node_set *dest, const re_node_set *src) +{ + Idx is, id, sbase, delta; + if (src == NULL || src->nelem == 0) + return REG_NOERROR; + if (dest->alloc < 2 * src->nelem + dest->nelem) + { + Idx new_alloc = 2 * (src->nelem + dest->alloc); + Idx *new_buffer = re_realloc (dest->elems, Idx, new_alloc); + if (__glibc_unlikely (new_buffer == NULL)) + return REG_ESPACE; + dest->elems = new_buffer; + dest->alloc = new_alloc; + } + + if (__glibc_unlikely (dest->nelem == 0)) + { + dest->nelem = src->nelem; + memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); + return REG_NOERROR; + } + + /* Copy into the top of DEST the items of SRC that are not + found in DEST. Maybe we could binary search in DEST? */ + for (sbase = dest->nelem + 2 * src->nelem, + is = src->nelem - 1, id = dest->nelem - 1; is >= 0 && id >= 0; ) + { + if (dest->elems[id] == src->elems[is]) + is--, id--; + else if (dest->elems[id] < src->elems[is]) + dest->elems[--sbase] = src->elems[is--]; + else /* if (dest->elems[id] > src->elems[is]) */ + --id; + } + + if (is >= 0) + { + /* If DEST is exhausted, the remaining items of SRC must be unique. */ + sbase -= is + 1; + memcpy (dest->elems + sbase, src->elems, (is + 1) * sizeof (Idx)); + } + + id = dest->nelem - 1; + is = dest->nelem + 2 * src->nelem - 1; + delta = is - sbase + 1; + if (delta == 0) + return REG_NOERROR; + + /* Now copy. When DELTA becomes zero, the remaining + DEST elements are already in place. */ + dest->nelem += delta; + for (;;) + { + if (dest->elems[is] > dest->elems[id]) + { + /* Copy from the top. */ + dest->elems[id + delta--] = dest->elems[is--]; + if (delta == 0) + break; + } + else + { + /* Slide from the bottom. */ + dest->elems[id + delta] = dest->elems[id]; + if (--id < 0) + { + /* Copy remaining SRC elements. */ + memcpy (dest->elems, dest->elems + sbase, + delta * sizeof (Idx)); + break; + } + } + } + + return REG_NOERROR; +} + +/* Insert the new element ELEM to the re_node_set* SET. + SET should not already have ELEM. + Return true if successful. */ + +static bool +__attribute_warn_unused_result__ +re_node_set_insert (re_node_set *set, Idx elem) +{ + Idx idx; + /* In case the set is empty. */ + if (set->alloc == 0) + return __glibc_likely (re_node_set_init_1 (set, elem) == REG_NOERROR); + + if (__glibc_unlikely (set->nelem) == 0) + { + /* We already guaranteed above that set->alloc != 0. */ + set->elems[0] = elem; + ++set->nelem; + return true; + } + + /* Realloc if we need. */ + if (set->alloc == set->nelem) + { + Idx *new_elems; + set->alloc = set->alloc * 2; + new_elems = re_realloc (set->elems, Idx, set->alloc); + if (__glibc_unlikely (new_elems == NULL)) + return false; + set->elems = new_elems; + } + + /* Move the elements which follows the new element. Test the + first element separately to skip a check in the inner loop. */ + if (elem < set->elems[0]) + { + idx = 0; + for (idx = set->nelem; idx > 0; idx--) + set->elems[idx] = set->elems[idx - 1]; + } + else + { + for (idx = set->nelem; set->elems[idx - 1] > elem; idx--) + set->elems[idx] = set->elems[idx - 1]; + } + + /* Insert the new element. */ + set->elems[idx] = elem; + ++set->nelem; + return true; +} + +/* Insert the new element ELEM to the re_node_set* SET. + SET should not already have any element greater than or equal to ELEM. + Return true if successful. */ + +static bool +__attribute_warn_unused_result__ +re_node_set_insert_last (re_node_set *set, Idx elem) +{ + /* Realloc if we need. */ + if (set->alloc == set->nelem) + { + Idx *new_elems; + set->alloc = (set->alloc + 1) * 2; + new_elems = re_realloc (set->elems, Idx, set->alloc); + if (__glibc_unlikely (new_elems == NULL)) + return false; + set->elems = new_elems; + } + + /* Insert the new element. */ + set->elems[set->nelem++] = elem; + return true; +} + +/* Compare two node sets SET1 and SET2. + Return true if SET1 and SET2 are equivalent. */ + +static bool +__attribute__ ((pure)) +re_node_set_compare (const re_node_set *set1, const re_node_set *set2) +{ + Idx i; + if (set1 == NULL || set2 == NULL || set1->nelem != set2->nelem) + return false; + for (i = set1->nelem ; --i >= 0 ; ) + if (set1->elems[i] != set2->elems[i]) + return false; + return true; +} + +/* Return (idx + 1) if SET contains the element ELEM, return 0 otherwise. */ + +static Idx +__attribute__ ((pure)) +re_node_set_contains (const re_node_set *set, Idx elem) +{ + __re_size_t idx, right, mid; + if (set->nelem <= 0) + return 0; + + /* Binary search the element. */ + idx = 0; + right = set->nelem - 1; + while (idx < right) + { + mid = (idx + right) / 2; + if (set->elems[mid] < elem) + idx = mid + 1; + else + right = mid; + } + return set->elems[idx] == elem ? idx + 1 : 0; +} + +static void +re_node_set_remove_at (re_node_set *set, Idx idx) +{ + if (idx < 0 || idx >= set->nelem) + return; + --set->nelem; + for (; idx < set->nelem; idx++) + set->elems[idx] = set->elems[idx + 1]; +} + + +/* Add the token TOKEN to dfa->nodes, and return the index of the token. + Or return -1 if an error occurred. */ + +static Idx +re_dfa_add_node (re_dfa_t *dfa, re_token_t token) +{ + if (__glibc_unlikely (dfa->nodes_len >= dfa->nodes_alloc)) + { + size_t new_nodes_alloc = dfa->nodes_alloc * 2; + Idx *new_nexts, *new_indices; + re_node_set *new_edests, *new_eclosures; + re_token_t *new_nodes; + + /* Avoid overflows in realloc. */ + const size_t max_object_size = MAX (sizeof (re_token_t), + MAX (sizeof (re_node_set), + sizeof (Idx))); + if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) + < new_nodes_alloc)) + return -1; + + new_nodes = re_realloc (dfa->nodes, re_token_t, new_nodes_alloc); + if (__glibc_unlikely (new_nodes == NULL)) + return -1; + dfa->nodes = new_nodes; + new_nexts = re_realloc (dfa->nexts, Idx, new_nodes_alloc); + new_indices = re_realloc (dfa->org_indices, Idx, new_nodes_alloc); + new_edests = re_realloc (dfa->edests, re_node_set, new_nodes_alloc); + new_eclosures = re_realloc (dfa->eclosures, re_node_set, new_nodes_alloc); + if (__glibc_unlikely (new_nexts == NULL || new_indices == NULL + || new_edests == NULL || new_eclosures == NULL)) + { + re_free (new_nexts); + re_free (new_indices); + re_free (new_edests); + re_free (new_eclosures); + return -1; + } + dfa->nexts = new_nexts; + dfa->org_indices = new_indices; + dfa->edests = new_edests; + dfa->eclosures = new_eclosures; + dfa->nodes_alloc = new_nodes_alloc; + } + dfa->nodes[dfa->nodes_len] = token; + dfa->nodes[dfa->nodes_len].constraint = 0; +#ifdef RE_ENABLE_I18N + dfa->nodes[dfa->nodes_len].accept_mb = + ((token.type == OP_PERIOD && dfa->mb_cur_max > 1) + || token.type == COMPLEX_BRACKET); +#endif + dfa->nexts[dfa->nodes_len] = -1; + re_node_set_init_empty (dfa->edests + dfa->nodes_len); + re_node_set_init_empty (dfa->eclosures + dfa->nodes_len); + return dfa->nodes_len++; +} + +static re_hashval_t +calc_state_hash (const re_node_set *nodes, unsigned int context) +{ + re_hashval_t hash = nodes->nelem + context; + Idx i; + for (i = 0 ; i < nodes->nelem ; i++) + hash += nodes->elems[i]; + return hash; +} + +/* Search for the state whose node_set is equivalent to NODES. + Return the pointer to the state, if we found it in the DFA. + Otherwise create the new one and return it. In case of an error + return NULL and set the error code in ERR. + Note: - We assume NULL as the invalid state, then it is possible that + return value is NULL and ERR is REG_NOERROR. + - We never return non-NULL value in case of any errors, it is for + optimization. */ + +static re_dfastate_t * +__attribute_warn_unused_result__ +re_acquire_state (reg_errcode_t *err, const re_dfa_t *dfa, + const re_node_set *nodes) +{ + re_hashval_t hash; + re_dfastate_t *new_state; + struct re_state_table_entry *spot; + Idx i; +#if defined GCC_LINT || defined lint + /* Suppress bogus uninitialized-variable warnings. */ + *err = REG_NOERROR; +#endif + if (__glibc_unlikely (nodes->nelem == 0)) + { + *err = REG_NOERROR; + return NULL; + } + hash = calc_state_hash (nodes, 0); + spot = dfa->state_table + (hash & dfa->state_hash_mask); + + for (i = 0 ; i < spot->num ; i++) + { + re_dfastate_t *state = spot->array[i]; + if (hash != state->hash) + continue; + if (re_node_set_compare (&state->nodes, nodes)) + return state; + } + + /* There are no appropriate state in the dfa, create the new one. */ + new_state = create_ci_newstate (dfa, nodes, hash); + if (__glibc_unlikely (new_state == NULL)) + *err = REG_ESPACE; + + return new_state; +} + +/* Search for the state whose node_set is equivalent to NODES and + whose context is equivalent to CONTEXT. + Return the pointer to the state, if we found it in the DFA. + Otherwise create the new one and return it. In case of an error + return NULL and set the error code in ERR. + Note: - We assume NULL as the invalid state, then it is possible that + return value is NULL and ERR is REG_NOERROR. + - We never return non-NULL value in case of any errors, it is for + optimization. */ + +static re_dfastate_t * +__attribute_warn_unused_result__ +re_acquire_state_context (reg_errcode_t *err, const re_dfa_t *dfa, + const re_node_set *nodes, unsigned int context) +{ + re_hashval_t hash; + re_dfastate_t *new_state; + struct re_state_table_entry *spot; + Idx i; +#if defined GCC_LINT || defined lint + /* Suppress bogus uninitialized-variable warnings. */ + *err = REG_NOERROR; +#endif + if (nodes->nelem == 0) + { + *err = REG_NOERROR; + return NULL; + } + hash = calc_state_hash (nodes, context); + spot = dfa->state_table + (hash & dfa->state_hash_mask); + + for (i = 0 ; i < spot->num ; i++) + { + re_dfastate_t *state = spot->array[i]; + if (state->hash == hash + && state->context == context + && re_node_set_compare (state->entrance_nodes, nodes)) + return state; + } + /* There are no appropriate state in 'dfa', create the new one. */ + new_state = create_cd_newstate (dfa, nodes, context, hash); + if (__glibc_unlikely (new_state == NULL)) + *err = REG_ESPACE; + + return new_state; +} + +/* Finish initialization of the new state NEWSTATE, and using its hash value + HASH put in the appropriate bucket of DFA's state table. Return value + indicates the error code if failed. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +register_state (const re_dfa_t *dfa, re_dfastate_t *newstate, + re_hashval_t hash) +{ + struct re_state_table_entry *spot; + reg_errcode_t err; + Idx i; + + newstate->hash = hash; + err = re_node_set_alloc (&newstate->non_eps_nodes, newstate->nodes.nelem); + if (__glibc_unlikely (err != REG_NOERROR)) + return REG_ESPACE; + for (i = 0; i < newstate->nodes.nelem; i++) + { + Idx elem = newstate->nodes.elems[i]; + if (!IS_EPSILON_NODE (dfa->nodes[elem].type)) + if (! re_node_set_insert_last (&newstate->non_eps_nodes, elem)) + return REG_ESPACE; + } + + spot = dfa->state_table + (hash & dfa->state_hash_mask); + if (__glibc_unlikely (spot->alloc <= spot->num)) + { + Idx new_alloc = 2 * spot->num + 2; + re_dfastate_t **new_array = re_realloc (spot->array, re_dfastate_t *, + new_alloc); + if (__glibc_unlikely (new_array == NULL)) + return REG_ESPACE; + spot->array = new_array; + spot->alloc = new_alloc; + } + spot->array[spot->num++] = newstate; + return REG_NOERROR; +} + +static void +free_state (re_dfastate_t *state) +{ + re_node_set_free (&state->non_eps_nodes); + re_node_set_free (&state->inveclosure); + if (state->entrance_nodes != &state->nodes) + { + re_node_set_free (state->entrance_nodes); + re_free (state->entrance_nodes); + } + re_node_set_free (&state->nodes); + re_free (state->word_trtable); + re_free (state->trtable); + re_free (state); +} + +/* Create the new state which is independent of contexts. + Return the new state if succeeded, otherwise return NULL. */ + +static re_dfastate_t * +__attribute_warn_unused_result__ +create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes, + re_hashval_t hash) +{ + Idx i; + reg_errcode_t err; + re_dfastate_t *newstate; + + newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); + if (__glibc_unlikely (newstate == NULL)) + return NULL; + err = re_node_set_init_copy (&newstate->nodes, nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_free (newstate); + return NULL; + } + + newstate->entrance_nodes = &newstate->nodes; + for (i = 0 ; i < nodes->nelem ; i++) + { + re_token_t *node = dfa->nodes + nodes->elems[i]; + re_token_type_t type = node->type; + if (type == CHARACTER && !node->constraint) + continue; +#ifdef RE_ENABLE_I18N + newstate->accept_mb |= node->accept_mb; +#endif /* RE_ENABLE_I18N */ + + /* If the state has the halt node, the state is a halt state. */ + if (type == END_OF_RE) + newstate->halt = 1; + else if (type == OP_BACK_REF) + newstate->has_backref = 1; + else if (type == ANCHOR || node->constraint) + newstate->has_constraint = 1; + } + err = register_state (dfa, newstate, hash); + if (__glibc_unlikely (err != REG_NOERROR)) + { + free_state (newstate); + newstate = NULL; + } + return newstate; +} + +/* Create the new state which is depend on the context CONTEXT. + Return the new state if succeeded, otherwise return NULL. */ + +static re_dfastate_t * +__attribute_warn_unused_result__ +create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, + unsigned int context, re_hashval_t hash) +{ + Idx i, nctx_nodes = 0; + reg_errcode_t err; + re_dfastate_t *newstate; + + newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); + if (__glibc_unlikely (newstate == NULL)) + return NULL; + err = re_node_set_init_copy (&newstate->nodes, nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_free (newstate); + return NULL; + } + + newstate->context = context; + newstate->entrance_nodes = &newstate->nodes; + + for (i = 0 ; i < nodes->nelem ; i++) + { + re_token_t *node = dfa->nodes + nodes->elems[i]; + re_token_type_t type = node->type; + unsigned int constraint = node->constraint; + + if (type == CHARACTER && !constraint) + continue; +#ifdef RE_ENABLE_I18N + newstate->accept_mb |= node->accept_mb; +#endif /* RE_ENABLE_I18N */ + + /* If the state has the halt node, the state is a halt state. */ + if (type == END_OF_RE) + newstate->halt = 1; + else if (type == OP_BACK_REF) + newstate->has_backref = 1; + + if (constraint) + { + if (newstate->entrance_nodes == &newstate->nodes) + { + newstate->entrance_nodes = re_malloc (re_node_set, 1); + if (__glibc_unlikely (newstate->entrance_nodes == NULL)) + { + free_state (newstate); + return NULL; + } + if (re_node_set_init_copy (newstate->entrance_nodes, nodes) + != REG_NOERROR) + return NULL; + nctx_nodes = 0; + newstate->has_constraint = 1; + } + + if (NOT_SATISFY_PREV_CONSTRAINT (constraint,context)) + { + re_node_set_remove_at (&newstate->nodes, i - nctx_nodes); + ++nctx_nodes; + } + } + } + err = register_state (dfa, newstate, hash); + if (__glibc_unlikely (err != REG_NOERROR)) + { + free_state (newstate); + newstate = NULL; + } + return newstate; +} diff --git a/devspec.en_US/project/recutils/lib/regex_internal.h b/devspec.en_US/project/recutils/lib/regex_internal.h new file mode 100755 index 0000000..a3aedda --- /dev/null +++ b/devspec.en_US/project/recutils/lib/regex_internal.h @@ -0,0 +1,874 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#ifndef _REGEX_INTERNAL_H +#define _REGEX_INTERNAL_H 1 + +#include <assert.h> +#include <ctype.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <langinfo.h> +#include <locale.h> +#include <wchar.h> +#include <wctype.h> +#include <stdbool.h> +#include <stdint.h> + +#include <intprops.h> + +#ifdef _LIBC +# include <libc-lock.h> +# define lock_define(name) __libc_lock_define (, name) +# define lock_init(lock) (__libc_lock_init (lock), 0) +# define lock_fini(lock) ((void) 0) +# define lock_lock(lock) __libc_lock_lock (lock) +# define lock_unlock(lock) __libc_lock_unlock (lock) +#elif defined GNULIB_LOCK && !defined USE_UNLOCKED_IO +# include "glthread/lock.h" + /* Use gl_lock_define if empty macro arguments are known to work. + Otherwise, fall back on less-portable substitutes. */ +# if ((defined __GNUC__ && !defined __STRICT_ANSI__) \ + || (defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__)) +# define lock_define(name) gl_lock_define (, name) +# elif USE_POSIX_THREADS +# define lock_define(name) pthread_mutex_t name; +# elif USE_PTH_THREADS +# define lock_define(name) pth_mutex_t name; +# elif USE_SOLARIS_THREADS +# define lock_define(name) mutex_t name; +# elif USE_WINDOWS_THREADS +# define lock_define(name) gl_lock_t name; +# else +# define lock_define(name) +# endif +# define lock_init(lock) glthread_lock_init (&(lock)) +# define lock_fini(lock) glthread_lock_destroy (&(lock)) +# define lock_lock(lock) glthread_lock_lock (&(lock)) +# define lock_unlock(lock) glthread_lock_unlock (&(lock)) +#elif defined GNULIB_PTHREAD && !defined USE_UNLOCKED_IO +# include <pthread.h> +# define lock_define(name) pthread_mutex_t name; +# define lock_init(lock) pthread_mutex_init (&(lock), 0) +# define lock_fini(lock) pthread_mutex_destroy (&(lock)) +# define lock_lock(lock) pthread_mutex_lock (&(lock)) +# define lock_unlock(lock) pthread_mutex_unlock (&(lock)) +#else +# define lock_define(name) +# define lock_init(lock) 0 +# define lock_fini(lock) ((void) 0) + /* The 'dfa' avoids an "unused variable 'dfa'" warning from GCC. */ +# define lock_lock(lock) ((void) dfa) +# define lock_unlock(lock) ((void) 0) +#endif + +/* In case that the system doesn't have isblank(). */ +#if !defined _LIBC && ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK)) +# define isblank(ch) ((ch) == ' ' || (ch) == '\t') +#endif + +#ifdef _LIBC +# ifndef _RE_DEFINE_LOCALE_FUNCTIONS +# define _RE_DEFINE_LOCALE_FUNCTIONS 1 +# include <locale/localeinfo.h> +# include <locale/coll-lookup.h> +# endif +#endif + +/* This is for other GNU distributions with internationalized messages. */ +#if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC +# include <libintl.h> +# ifdef _LIBC +# undef gettext +# define gettext(msgid) \ + __dcgettext (_libc_intl_domainname, msgid, LC_MESSAGES) +# endif +#else +# undef gettext +# define gettext(msgid) (msgid) +#endif + +#ifndef gettext_noop +/* This define is so xgettext can find the internationalizable + strings. */ +# define gettext_noop(String) String +#endif + +#if (defined MB_CUR_MAX && HAVE_WCTYPE_H && HAVE_ISWCTYPE) || _LIBC +# define RE_ENABLE_I18N +#endif + +/* Number of ASCII characters. */ +#define ASCII_CHARS 0x80 + +/* Number of single byte characters. */ +#define SBC_MAX (UCHAR_MAX + 1) + +#define COLL_ELEM_LEN_MAX 8 + +/* The character which represents newline. */ +#define NEWLINE_CHAR '\n' +#define WIDE_NEWLINE_CHAR L'\n' + +/* Rename to standard API for using out of glibc. */ +#ifndef _LIBC +# undef __wctype +# undef __iswalnum +# undef __iswctype +# undef __towlower +# undef __towupper +# define __wctype wctype +# define __iswalnum iswalnum +# define __iswctype iswctype +# define __towlower towlower +# define __towupper towupper +# define __btowc btowc +# define __mbrtowc mbrtowc +# define __wcrtomb wcrtomb +# define __regfree regfree +#endif /* not _LIBC */ + +#ifndef SSIZE_MAX +# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) +#endif + +/* The type of indexes into strings. This is signed, not size_t, + since the API requires indexes to fit in regoff_t anyway, and using + signed integers makes the code a bit smaller and presumably faster. + The traditional GNU regex implementation uses int for indexes. + The POSIX-compatible implementation uses a possibly-wider type. + The name 'Idx' is three letters to minimize the hassle of + reindenting a lot of regex code that formerly used 'int'. */ +typedef regoff_t Idx; +#ifdef _REGEX_LARGE_OFFSETS +# define IDX_MAX SSIZE_MAX +#else +# define IDX_MAX INT_MAX +#endif + +/* A hash value, suitable for computing hash tables. */ +typedef __re_size_t re_hashval_t; + +/* An integer used to represent a set of bits. It must be unsigned, + and must be at least as wide as unsigned int. */ +typedef unsigned long int bitset_word_t; +/* All bits set in a bitset_word_t. */ +#define BITSET_WORD_MAX ULONG_MAX + +/* Number of bits in a bitset_word_t. For portability to hosts with + padding bits, do not use '(sizeof (bitset_word_t) * CHAR_BIT)'; + instead, deduce it directly from BITSET_WORD_MAX. Avoid + greater-than-32-bit integers and unconditional shifts by more than + 31 bits, as they're not portable. */ +#if BITSET_WORD_MAX == 0xffffffffUL +# define BITSET_WORD_BITS 32 +#elif BITSET_WORD_MAX >> 31 >> 4 == 1 +# define BITSET_WORD_BITS 36 +#elif BITSET_WORD_MAX >> 31 >> 16 == 1 +# define BITSET_WORD_BITS 48 +#elif BITSET_WORD_MAX >> 31 >> 28 == 1 +# define BITSET_WORD_BITS 60 +#elif BITSET_WORD_MAX >> 31 >> 31 >> 1 == 1 +# define BITSET_WORD_BITS 64 +#elif BITSET_WORD_MAX >> 31 >> 31 >> 9 == 1 +# define BITSET_WORD_BITS 72 +#elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 3 == 1 +# define BITSET_WORD_BITS 128 +#elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 7 == 1 +# define BITSET_WORD_BITS 256 +#elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 7 > 1 +# define BITSET_WORD_BITS 257 /* any value > SBC_MAX will do here */ +# if BITSET_WORD_BITS <= SBC_MAX +# error "Invalid SBC_MAX" +# endif +#else +# error "Add case for new bitset_word_t size" +#endif + +/* Number of bitset_word_t values in a bitset_t. */ +#define BITSET_WORDS ((SBC_MAX + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS) + +typedef bitset_word_t bitset_t[BITSET_WORDS]; +typedef bitset_word_t *re_bitset_ptr_t; +typedef const bitset_word_t *re_const_bitset_ptr_t; + +#define PREV_WORD_CONSTRAINT 0x0001 +#define PREV_NOTWORD_CONSTRAINT 0x0002 +#define NEXT_WORD_CONSTRAINT 0x0004 +#define NEXT_NOTWORD_CONSTRAINT 0x0008 +#define PREV_NEWLINE_CONSTRAINT 0x0010 +#define NEXT_NEWLINE_CONSTRAINT 0x0020 +#define PREV_BEGBUF_CONSTRAINT 0x0040 +#define NEXT_ENDBUF_CONSTRAINT 0x0080 +#define WORD_DELIM_CONSTRAINT 0x0100 +#define NOT_WORD_DELIM_CONSTRAINT 0x0200 + +typedef enum +{ + INSIDE_WORD = PREV_WORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, + WORD_FIRST = PREV_NOTWORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, + WORD_LAST = PREV_WORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, + INSIDE_NOTWORD = PREV_NOTWORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, + LINE_FIRST = PREV_NEWLINE_CONSTRAINT, + LINE_LAST = NEXT_NEWLINE_CONSTRAINT, + BUF_FIRST = PREV_BEGBUF_CONSTRAINT, + BUF_LAST = NEXT_ENDBUF_CONSTRAINT, + WORD_DELIM = WORD_DELIM_CONSTRAINT, + NOT_WORD_DELIM = NOT_WORD_DELIM_CONSTRAINT +} re_context_type; + +typedef struct +{ + Idx alloc; + Idx nelem; + Idx *elems; +} re_node_set; + +typedef enum +{ + NON_TYPE = 0, + + /* Node type, These are used by token, node, tree. */ + CHARACTER = 1, + END_OF_RE = 2, + SIMPLE_BRACKET = 3, + OP_BACK_REF = 4, + OP_PERIOD = 5, +#ifdef RE_ENABLE_I18N + COMPLEX_BRACKET = 6, + OP_UTF8_PERIOD = 7, +#endif /* RE_ENABLE_I18N */ + + /* We define EPSILON_BIT as a macro so that OP_OPEN_SUBEXP is used + when the debugger shows values of this enum type. */ +#define EPSILON_BIT 8 + OP_OPEN_SUBEXP = EPSILON_BIT | 0, + OP_CLOSE_SUBEXP = EPSILON_BIT | 1, + OP_ALT = EPSILON_BIT | 2, + OP_DUP_ASTERISK = EPSILON_BIT | 3, + ANCHOR = EPSILON_BIT | 4, + + /* Tree type, these are used only by tree. */ + CONCAT = 16, + SUBEXP = 17, + + /* Token type, these are used only by token. */ + OP_DUP_PLUS = 18, + OP_DUP_QUESTION, + OP_OPEN_BRACKET, + OP_CLOSE_BRACKET, + OP_CHARSET_RANGE, + OP_OPEN_DUP_NUM, + OP_CLOSE_DUP_NUM, + OP_NON_MATCH_LIST, + OP_OPEN_COLL_ELEM, + OP_CLOSE_COLL_ELEM, + OP_OPEN_EQUIV_CLASS, + OP_CLOSE_EQUIV_CLASS, + OP_OPEN_CHAR_CLASS, + OP_CLOSE_CHAR_CLASS, + OP_WORD, + OP_NOTWORD, + OP_SPACE, + OP_NOTSPACE, + BACK_SLASH + +} re_token_type_t; + +#ifdef RE_ENABLE_I18N +typedef struct +{ + /* Multibyte characters. */ + wchar_t *mbchars; + + /* Collating symbols. */ +# ifdef _LIBC + int32_t *coll_syms; +# endif + + /* Equivalence classes. */ +# ifdef _LIBC + int32_t *equiv_classes; +# endif + + /* Range expressions. */ +# ifdef _LIBC + uint32_t *range_starts; + uint32_t *range_ends; +# else /* not _LIBC */ + wchar_t *range_starts; + wchar_t *range_ends; +# endif /* not _LIBC */ + + /* Character classes. */ + wctype_t *char_classes; + + /* If this character set is the non-matching list. */ + unsigned int non_match : 1; + + /* # of multibyte characters. */ + Idx nmbchars; + + /* # of collating symbols. */ + Idx ncoll_syms; + + /* # of equivalence classes. */ + Idx nequiv_classes; + + /* # of range expressions. */ + Idx nranges; + + /* # of character classes. */ + Idx nchar_classes; +} re_charset_t; +#endif /* RE_ENABLE_I18N */ + +typedef struct +{ + union + { + unsigned char c; /* for CHARACTER */ + re_bitset_ptr_t sbcset; /* for SIMPLE_BRACKET */ +#ifdef RE_ENABLE_I18N + re_charset_t *mbcset; /* for COMPLEX_BRACKET */ +#endif /* RE_ENABLE_I18N */ + Idx idx; /* for BACK_REF */ + re_context_type ctx_type; /* for ANCHOR */ + } opr; +#if __GNUC__ >= 2 && !defined __STRICT_ANSI__ + re_token_type_t type : 8; +#else + re_token_type_t type; +#endif + unsigned int constraint : 10; /* context constraint */ + unsigned int duplicated : 1; + unsigned int opt_subexp : 1; +#ifdef RE_ENABLE_I18N + unsigned int accept_mb : 1; + /* These 2 bits can be moved into the union if needed (e.g. if running out + of bits; move opr.c to opr.c.c and move the flags to opr.c.flags). */ + unsigned int mb_partial : 1; +#endif + unsigned int word_char : 1; +} re_token_t; + +#define IS_EPSILON_NODE(type) ((type) & EPSILON_BIT) + +struct re_string_t +{ + /* Indicate the raw buffer which is the original string passed as an + argument of regexec(), re_search(), etc.. */ + const unsigned char *raw_mbs; + /* Store the multibyte string. In case of "case insensitive mode" like + REG_ICASE, upper cases of the string are stored, otherwise MBS points + the same address that RAW_MBS points. */ + unsigned char *mbs; +#ifdef RE_ENABLE_I18N + /* Store the wide character string which is corresponding to MBS. */ + wint_t *wcs; + Idx *offsets; + mbstate_t cur_state; +#endif + /* Index in RAW_MBS. Each character mbs[i] corresponds to + raw_mbs[raw_mbs_idx + i]. */ + Idx raw_mbs_idx; + /* The length of the valid characters in the buffers. */ + Idx valid_len; + /* The corresponding number of bytes in raw_mbs array. */ + Idx valid_raw_len; + /* The length of the buffers MBS and WCS. */ + Idx bufs_len; + /* The index in MBS, which is updated by re_string_fetch_byte. */ + Idx cur_idx; + /* length of RAW_MBS array. */ + Idx raw_len; + /* This is RAW_LEN - RAW_MBS_IDX + VALID_LEN - VALID_RAW_LEN. */ + Idx len; + /* End of the buffer may be shorter than its length in the cases such + as re_match_2, re_search_2. Then, we use STOP for end of the buffer + instead of LEN. */ + Idx raw_stop; + /* This is RAW_STOP - RAW_MBS_IDX adjusted through OFFSETS. */ + Idx stop; + + /* The context of mbs[0]. We store the context independently, since + the context of mbs[0] may be different from raw_mbs[0], which is + the beginning of the input string. */ + unsigned int tip_context; + /* The translation passed as a part of an argument of re_compile_pattern. */ + RE_TRANSLATE_TYPE trans; + /* Copy of re_dfa_t's word_char. */ + re_const_bitset_ptr_t word_char; + /* true if REG_ICASE. */ + unsigned char icase; + unsigned char is_utf8; + unsigned char map_notascii; + unsigned char mbs_allocated; + unsigned char offsets_needed; + unsigned char newline_anchor; + unsigned char word_ops_used; + int mb_cur_max; +}; +typedef struct re_string_t re_string_t; + + +struct re_dfa_t; +typedef struct re_dfa_t re_dfa_t; + +#ifndef _LIBC +# define IS_IN(libc) false +#endif + +#define re_string_peek_byte(pstr, offset) \ + ((pstr)->mbs[(pstr)->cur_idx + offset]) +#define re_string_fetch_byte(pstr) \ + ((pstr)->mbs[(pstr)->cur_idx++]) +#define re_string_first_byte(pstr, idx) \ + ((idx) == (pstr)->valid_len || (pstr)->wcs[idx] != WEOF) +#define re_string_is_single_byte_char(pstr, idx) \ + ((pstr)->wcs[idx] != WEOF && ((pstr)->valid_len == (idx) + 1 \ + || (pstr)->wcs[(idx) + 1] != WEOF)) +#define re_string_eoi(pstr) ((pstr)->stop <= (pstr)->cur_idx) +#define re_string_cur_idx(pstr) ((pstr)->cur_idx) +#define re_string_get_buffer(pstr) ((pstr)->mbs) +#define re_string_length(pstr) ((pstr)->len) +#define re_string_byte_at(pstr,idx) ((pstr)->mbs[idx]) +#define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx)) +#define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx)) + +#if defined _LIBC || HAVE_ALLOCA +# include <alloca.h> +#endif + +#ifndef _LIBC +# if HAVE_ALLOCA +/* The OS usually guarantees only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + allocate anything larger than 4096 bytes. Also care for the possibility + of a few compiler-allocated temporary stack slots. */ +# define __libc_use_alloca(n) ((n) < 4032) +# else +/* alloca is implemented with malloc, so just use malloc. */ +# define __libc_use_alloca(n) 0 +# undef alloca +# define alloca(n) malloc (n) +# endif +#endif + +#ifdef _LIBC +# define MALLOC_0_IS_NONNULL 1 +#elif !defined MALLOC_0_IS_NONNULL +# define MALLOC_0_IS_NONNULL 0 +#endif + +#ifndef MAX +# define MAX(a,b) ((a) < (b) ? (b) : (a)) +#endif +#ifndef MIN +# define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif + +#define re_malloc(t,n) ((t *) malloc ((n) * sizeof (t))) +#define re_realloc(p,t,n) ((t *) realloc (p, (n) * sizeof (t))) +#define re_free(p) free (p) + +struct bin_tree_t +{ + struct bin_tree_t *parent; + struct bin_tree_t *left; + struct bin_tree_t *right; + struct bin_tree_t *first; + struct bin_tree_t *next; + + re_token_t token; + + /* 'node_idx' is the index in dfa->nodes, if 'type' == 0. + Otherwise 'type' indicate the type of this node. */ + Idx node_idx; +}; +typedef struct bin_tree_t bin_tree_t; + +#define BIN_TREE_STORAGE_SIZE \ + ((1024 - sizeof (void *)) / sizeof (bin_tree_t)) + +struct bin_tree_storage_t +{ + struct bin_tree_storage_t *next; + bin_tree_t data[BIN_TREE_STORAGE_SIZE]; +}; +typedef struct bin_tree_storage_t bin_tree_storage_t; + +#define CONTEXT_WORD 1 +#define CONTEXT_NEWLINE (CONTEXT_WORD << 1) +#define CONTEXT_BEGBUF (CONTEXT_NEWLINE << 1) +#define CONTEXT_ENDBUF (CONTEXT_BEGBUF << 1) + +#define IS_WORD_CONTEXT(c) ((c) & CONTEXT_WORD) +#define IS_NEWLINE_CONTEXT(c) ((c) & CONTEXT_NEWLINE) +#define IS_BEGBUF_CONTEXT(c) ((c) & CONTEXT_BEGBUF) +#define IS_ENDBUF_CONTEXT(c) ((c) & CONTEXT_ENDBUF) +#define IS_ORDINARY_CONTEXT(c) ((c) == 0) + +#define IS_WORD_CHAR(ch) (isalnum (ch) || (ch) == '_') +#define IS_NEWLINE(ch) ((ch) == NEWLINE_CHAR) +#define IS_WIDE_WORD_CHAR(ch) (__iswalnum (ch) || (ch) == L'_') +#define IS_WIDE_NEWLINE(ch) ((ch) == WIDE_NEWLINE_CHAR) + +#define NOT_SATISFY_PREV_CONSTRAINT(constraint,context) \ + ((((constraint) & PREV_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ + || ((constraint & PREV_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ + || ((constraint & PREV_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context))\ + || ((constraint & PREV_BEGBUF_CONSTRAINT) && !IS_BEGBUF_CONTEXT (context))) + +#define NOT_SATISFY_NEXT_CONSTRAINT(constraint,context) \ + ((((constraint) & NEXT_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ + || (((constraint) & NEXT_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ + || (((constraint) & NEXT_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context)) \ + || (((constraint) & NEXT_ENDBUF_CONSTRAINT) && !IS_ENDBUF_CONTEXT (context))) + +struct re_dfastate_t +{ + re_hashval_t hash; + re_node_set nodes; + re_node_set non_eps_nodes; + re_node_set inveclosure; + re_node_set *entrance_nodes; + struct re_dfastate_t **trtable, **word_trtable; + unsigned int context : 4; + unsigned int halt : 1; + /* If this state can accept "multi byte". + Note that we refer to multibyte characters, and multi character + collating elements as "multi byte". */ + unsigned int accept_mb : 1; + /* If this state has backreference node(s). */ + unsigned int has_backref : 1; + unsigned int has_constraint : 1; +}; +typedef struct re_dfastate_t re_dfastate_t; + +struct re_state_table_entry +{ + Idx num; + Idx alloc; + re_dfastate_t **array; +}; + +/* Array type used in re_sub_match_last_t and re_sub_match_top_t. */ + +typedef struct +{ + Idx next_idx; + Idx alloc; + re_dfastate_t **array; +} state_array_t; + +/* Store information about the node NODE whose type is OP_CLOSE_SUBEXP. */ + +typedef struct +{ + Idx node; + Idx str_idx; /* The position NODE match at. */ + state_array_t path; +} re_sub_match_last_t; + +/* Store information about the node NODE whose type is OP_OPEN_SUBEXP. + And information about the node, whose type is OP_CLOSE_SUBEXP, + corresponding to NODE is stored in LASTS. */ + +typedef struct +{ + Idx str_idx; + Idx node; + state_array_t *path; + Idx alasts; /* Allocation size of LASTS. */ + Idx nlasts; /* The number of LASTS. */ + re_sub_match_last_t **lasts; +} re_sub_match_top_t; + +struct re_backref_cache_entry +{ + Idx node; + Idx str_idx; + Idx subexp_from; + Idx subexp_to; + char more; + char unused; + unsigned short int eps_reachable_subexps_map; +}; + +typedef struct +{ + /* The string object corresponding to the input string. */ + re_string_t input; +#if defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) + const re_dfa_t *const dfa; +#else + const re_dfa_t *dfa; +#endif + /* EFLAGS of the argument of regexec. */ + int eflags; + /* Where the matching ends. */ + Idx match_last; + Idx last_node; + /* The state log used by the matcher. */ + re_dfastate_t **state_log; + Idx state_log_top; + /* Back reference cache. */ + Idx nbkref_ents; + Idx abkref_ents; + struct re_backref_cache_entry *bkref_ents; + int max_mb_elem_len; + Idx nsub_tops; + Idx asub_tops; + re_sub_match_top_t **sub_tops; +} re_match_context_t; + +typedef struct +{ + re_dfastate_t **sifted_states; + re_dfastate_t **limited_states; + Idx last_node; + Idx last_str_idx; + re_node_set limits; +} re_sift_context_t; + +struct re_fail_stack_ent_t +{ + Idx idx; + Idx node; + regmatch_t *regs; + re_node_set eps_via_nodes; +}; + +struct re_fail_stack_t +{ + Idx num; + Idx alloc; + struct re_fail_stack_ent_t *stack; +}; + +struct re_dfa_t +{ + re_token_t *nodes; + size_t nodes_alloc; + size_t nodes_len; + Idx *nexts; + Idx *org_indices; + re_node_set *edests; + re_node_set *eclosures; + re_node_set *inveclosures; + struct re_state_table_entry *state_table; + re_dfastate_t *init_state; + re_dfastate_t *init_state_word; + re_dfastate_t *init_state_nl; + re_dfastate_t *init_state_begbuf; + bin_tree_t *str_tree; + bin_tree_storage_t *str_tree_storage; + re_bitset_ptr_t sb_char; + int str_tree_storage_idx; + + /* number of subexpressions 're_nsub' is in regex_t. */ + re_hashval_t state_hash_mask; + Idx init_node; + Idx nbackref; /* The number of backreference in this dfa. */ + + /* Bitmap expressing which backreference is used. */ + bitset_word_t used_bkref_map; + bitset_word_t completed_bkref_map; + + unsigned int has_plural_match : 1; + /* If this dfa has "multibyte node", which is a backreference or + a node which can accept multibyte character or multi character + collating element. */ + unsigned int has_mb_node : 1; + unsigned int is_utf8 : 1; + unsigned int map_notascii : 1; + unsigned int word_ops_used : 1; + int mb_cur_max; + bitset_t word_char; + reg_syntax_t syntax; + Idx *subexp_map; +#ifdef DEBUG + char* re_str; +#endif + lock_define (lock) +}; + +#define re_node_set_init_empty(set) memset (set, '\0', sizeof (re_node_set)) +#define re_node_set_remove(set,id) \ + (re_node_set_remove_at (set, re_node_set_contains (set, id) - 1)) +#define re_node_set_empty(p) ((p)->nelem = 0) +#define re_node_set_free(set) re_free ((set)->elems) + + +typedef enum +{ + SB_CHAR, + MB_CHAR, + EQUIV_CLASS, + COLL_SYM, + CHAR_CLASS +} bracket_elem_type; + +typedef struct +{ + bracket_elem_type type; + union + { + unsigned char ch; + unsigned char *name; + wchar_t wch; + } opr; +} bracket_elem_t; + + +/* Functions for bitset_t operation. */ + +static inline void +bitset_set (bitset_t set, Idx i) +{ + set[i / BITSET_WORD_BITS] |= (bitset_word_t) 1 << i % BITSET_WORD_BITS; +} + +static inline void +bitset_clear (bitset_t set, Idx i) +{ + set[i / BITSET_WORD_BITS] &= ~ ((bitset_word_t) 1 << i % BITSET_WORD_BITS); +} + +static inline bool +bitset_contain (const bitset_t set, Idx i) +{ + return (set[i / BITSET_WORD_BITS] >> i % BITSET_WORD_BITS) & 1; +} + +static inline void +bitset_empty (bitset_t set) +{ + memset (set, '\0', sizeof (bitset_t)); +} + +static inline void +bitset_set_all (bitset_t set) +{ + memset (set, -1, sizeof (bitset_word_t) * (SBC_MAX / BITSET_WORD_BITS)); + if (SBC_MAX % BITSET_WORD_BITS != 0) + set[BITSET_WORDS - 1] = + ((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1; +} + +static inline void +bitset_copy (bitset_t dest, const bitset_t src) +{ + memcpy (dest, src, sizeof (bitset_t)); +} + +static inline void +bitset_not (bitset_t set) +{ + int bitset_i; + for (bitset_i = 0; bitset_i < SBC_MAX / BITSET_WORD_BITS; ++bitset_i) + set[bitset_i] = ~set[bitset_i]; + if (SBC_MAX % BITSET_WORD_BITS != 0) + set[BITSET_WORDS - 1] = + ((((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1) + & ~set[BITSET_WORDS - 1]); +} + +static inline void +bitset_merge (bitset_t dest, const bitset_t src) +{ + int bitset_i; + for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) + dest[bitset_i] |= src[bitset_i]; +} + +static inline void +bitset_mask (bitset_t dest, const bitset_t src) +{ + int bitset_i; + for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) + dest[bitset_i] &= src[bitset_i]; +} + +#ifdef RE_ENABLE_I18N +/* Functions for re_string. */ +static int +__attribute__ ((pure, unused)) +re_string_char_size_at (const re_string_t *pstr, Idx idx) +{ + int byte_idx; + if (pstr->mb_cur_max == 1) + return 1; + for (byte_idx = 1; idx + byte_idx < pstr->valid_len; ++byte_idx) + if (pstr->wcs[idx + byte_idx] != WEOF) + break; + return byte_idx; +} + +static wint_t +__attribute__ ((pure, unused)) +re_string_wchar_at (const re_string_t *pstr, Idx idx) +{ + if (pstr->mb_cur_max == 1) + return (wint_t) pstr->mbs[idx]; + return (wint_t) pstr->wcs[idx]; +} + +# ifdef _LIBC +# include <locale/weight.h> +# endif + +static int +__attribute__ ((pure, unused)) +re_string_elem_size_at (const re_string_t *pstr, Idx idx) +{ +# ifdef _LIBC + const unsigned char *p, *extra; + const int32_t *table, *indirect; + uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + + if (nrules != 0) + { + table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); + indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_INDIRECTMB); + p = pstr->mbs + idx; + findidx (table, indirect, extra, &p, pstr->len - idx); + return p - pstr->mbs - idx; + } + else +# endif /* _LIBC */ + return 1; +} +#endif /* RE_ENABLE_I18N */ + +#ifndef FALLTHROUGH +# if __GNUC__ < 7 +# define FALLTHROUGH ((void) 0) +# else +# define FALLTHROUGH __attribute__ ((__fallthrough__)) +# endif +#endif + +#endif /* _REGEX_INTERNAL_H */ diff --git a/devspec.en_US/project/recutils/lib/regexec.c b/devspec.en_US/project/recutils/lib/regexec.c new file mode 100755 index 0000000..21cf791 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/regexec.c @@ -0,0 +1,4334 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags, + Idx n); +static void match_ctx_clean (re_match_context_t *mctx); +static void match_ctx_free (re_match_context_t *cache); +static reg_errcode_t match_ctx_add_entry (re_match_context_t *cache, Idx node, + Idx str_idx, Idx from, Idx to); +static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx); +static reg_errcode_t match_ctx_add_subtop (re_match_context_t *mctx, Idx node, + Idx str_idx); +static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop, + Idx node, Idx str_idx); +static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, + re_dfastate_t **limited_sts, Idx last_node, + Idx last_str_idx); +static reg_errcode_t re_search_internal (const regex_t *preg, + const char *string, Idx length, + Idx start, Idx last_start, Idx stop, + size_t nmatch, regmatch_t pmatch[], + int eflags); +static regoff_t re_search_2_stub (struct re_pattern_buffer *bufp, + const char *string1, Idx length1, + const char *string2, Idx length2, + Idx start, regoff_t range, + struct re_registers *regs, + Idx stop, bool ret_len); +static regoff_t re_search_stub (struct re_pattern_buffer *bufp, + const char *string, Idx length, Idx start, + regoff_t range, Idx stop, + struct re_registers *regs, + bool ret_len); +static unsigned re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, + Idx nregs, int regs_allocated); +static reg_errcode_t prune_impossible_nodes (re_match_context_t *mctx); +static Idx check_matching (re_match_context_t *mctx, bool fl_longest_match, + Idx *p_match_first); +static Idx check_halt_state_context (const re_match_context_t *mctx, + const re_dfastate_t *state, Idx idx); +static void update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, + regmatch_t *prev_idx_match, Idx cur_node, + Idx cur_idx, Idx nmatch); +static reg_errcode_t push_fail_stack (struct re_fail_stack_t *fs, + Idx str_idx, Idx dest_node, Idx nregs, + regmatch_t *regs, + re_node_set *eps_via_nodes); +static reg_errcode_t set_regs (const regex_t *preg, + const re_match_context_t *mctx, + size_t nmatch, regmatch_t *pmatch, + bool fl_backtrack); +static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs); + +#ifdef RE_ENABLE_I18N +static int sift_states_iter_mb (const re_match_context_t *mctx, + re_sift_context_t *sctx, + Idx node_idx, Idx str_idx, Idx max_str_idx); +#endif /* RE_ENABLE_I18N */ +static reg_errcode_t sift_states_backward (const re_match_context_t *mctx, + re_sift_context_t *sctx); +static reg_errcode_t build_sifted_states (const re_match_context_t *mctx, + re_sift_context_t *sctx, Idx str_idx, + re_node_set *cur_dest); +static reg_errcode_t update_cur_sifted_state (const re_match_context_t *mctx, + re_sift_context_t *sctx, + Idx str_idx, + re_node_set *dest_nodes); +static reg_errcode_t add_epsilon_src_nodes (const re_dfa_t *dfa, + re_node_set *dest_nodes, + const re_node_set *candidates); +static bool check_dst_limits (const re_match_context_t *mctx, + const re_node_set *limits, + Idx dst_node, Idx dst_idx, Idx src_node, + Idx src_idx); +static int check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, + int boundaries, Idx subexp_idx, + Idx from_node, Idx bkref_idx); +static int check_dst_limits_calc_pos (const re_match_context_t *mctx, + Idx limit, Idx subexp_idx, + Idx node, Idx str_idx, + Idx bkref_idx); +static reg_errcode_t check_subexp_limits (const re_dfa_t *dfa, + re_node_set *dest_nodes, + const re_node_set *candidates, + re_node_set *limits, + struct re_backref_cache_entry *bkref_ents, + Idx str_idx); +static reg_errcode_t sift_states_bkref (const re_match_context_t *mctx, + re_sift_context_t *sctx, + Idx str_idx, const re_node_set *candidates); +static reg_errcode_t merge_state_array (const re_dfa_t *dfa, + re_dfastate_t **dst, + re_dfastate_t **src, Idx num); +static re_dfastate_t *find_recover_state (reg_errcode_t *err, + re_match_context_t *mctx); +static re_dfastate_t *transit_state (reg_errcode_t *err, + re_match_context_t *mctx, + re_dfastate_t *state); +static re_dfastate_t *merge_state_with_log (reg_errcode_t *err, + re_match_context_t *mctx, + re_dfastate_t *next_state); +static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx, + re_node_set *cur_nodes, + Idx str_idx); +#if 0 +static re_dfastate_t *transit_state_sb (reg_errcode_t *err, + re_match_context_t *mctx, + re_dfastate_t *pstate); +#endif +#ifdef RE_ENABLE_I18N +static reg_errcode_t transit_state_mb (re_match_context_t *mctx, + re_dfastate_t *pstate); +#endif /* RE_ENABLE_I18N */ +static reg_errcode_t transit_state_bkref (re_match_context_t *mctx, + const re_node_set *nodes); +static reg_errcode_t get_subexp (re_match_context_t *mctx, + Idx bkref_node, Idx bkref_str_idx); +static reg_errcode_t get_subexp_sub (re_match_context_t *mctx, + const re_sub_match_top_t *sub_top, + re_sub_match_last_t *sub_last, + Idx bkref_node, Idx bkref_str); +static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, + Idx subexp_idx, int type); +static reg_errcode_t check_arrival (re_match_context_t *mctx, + state_array_t *path, Idx top_node, + Idx top_str, Idx last_node, Idx last_str, + int type); +static reg_errcode_t check_arrival_add_next_nodes (re_match_context_t *mctx, + Idx str_idx, + re_node_set *cur_nodes, + re_node_set *next_nodes); +static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa, + re_node_set *cur_nodes, + Idx ex_subexp, int type); +static reg_errcode_t check_arrival_expand_ecl_sub (const re_dfa_t *dfa, + re_node_set *dst_nodes, + Idx target, Idx ex_subexp, + int type); +static reg_errcode_t expand_bkref_cache (re_match_context_t *mctx, + re_node_set *cur_nodes, Idx cur_str, + Idx subexp_num, int type); +static bool build_trtable (const re_dfa_t *dfa, re_dfastate_t *state); +#ifdef RE_ENABLE_I18N +static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, + const re_string_t *input, Idx idx); +# ifdef _LIBC +static unsigned int find_collation_sequence_value (const unsigned char *mbs, + size_t name_len); +# endif /* _LIBC */ +#endif /* RE_ENABLE_I18N */ +static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa, + const re_dfastate_t *state, + re_node_set *states_node, + bitset_t *states_ch); +static bool check_node_accept (const re_match_context_t *mctx, + const re_token_t *node, Idx idx); +static reg_errcode_t extend_buffers (re_match_context_t *mctx, int min_len); + +/* Entry point for POSIX code. */ + +/* regexec searches for a given pattern, specified by PREG, in the + string STRING. + + If NMATCH is zero or REG_NOSUB was set in the cflags argument to + 'regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at + least NMATCH elements, and we set them to the offsets of the + corresponding matched substrings. + + EFLAGS specifies "execution flags" which affect matching: if + REG_NOTBOL is set, then ^ does not match at the beginning of the + string; if REG_NOTEOL is set, then $ does not match at the end. + + We return 0 if we find a match and REG_NOMATCH if not. */ + +int +regexec (const regex_t *__restrict preg, const char *__restrict string, + size_t nmatch, regmatch_t pmatch[], int eflags) +{ + reg_errcode_t err; + Idx start, length; + re_dfa_t *dfa = preg->buffer; + + if (eflags & ~(REG_NOTBOL | REG_NOTEOL | REG_STARTEND)) + return REG_BADPAT; + + if (eflags & REG_STARTEND) + { + start = pmatch[0].rm_so; + length = pmatch[0].rm_eo; + } + else + { + start = 0; + length = strlen (string); + } + + lock_lock (dfa->lock); + if (preg->no_sub) + err = re_search_internal (preg, string, length, start, length, + length, 0, NULL, eflags); + else + err = re_search_internal (preg, string, length, start, length, + length, nmatch, pmatch, eflags); + lock_unlock (dfa->lock); + return err != REG_NOERROR; +} + +#ifdef _LIBC +libc_hidden_def (__regexec) + +# include <shlib-compat.h> +versioned_symbol (libc, __regexec, regexec, GLIBC_2_3_4); + +# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) +__typeof__ (__regexec) __compat_regexec; + +int +attribute_compat_text_section +__compat_regexec (const regex_t *__restrict preg, + const char *__restrict string, size_t nmatch, + regmatch_t pmatch[], int eflags) +{ + return regexec (preg, string, nmatch, pmatch, + eflags & (REG_NOTBOL | REG_NOTEOL)); +} +compat_symbol (libc, __compat_regexec, regexec, GLIBC_2_0); +# endif +#endif + +/* Entry points for GNU code. */ + +/* re_match, re_search, re_match_2, re_search_2 + + The former two functions operate on STRING with length LENGTH, + while the later two operate on concatenation of STRING1 and STRING2 + with lengths LENGTH1 and LENGTH2, respectively. + + re_match() matches the compiled pattern in BUFP against the string, + starting at index START. + + re_search() first tries matching at index START, then it tries to match + starting from index START + 1, and so on. The last start position tried + is START + RANGE. (Thus RANGE = 0 forces re_search to operate the same + way as re_match().) + + The parameter STOP of re_{match,search}_2 specifies that no match exceeding + the first STOP characters of the concatenation of the strings should be + concerned. + + If REGS is not NULL, and BUFP->no_sub is not set, the offsets of the match + and all groups is stored in REGS. (For the "_2" variants, the offsets are + computed relative to the concatenation, not relative to the individual + strings.) + + On success, re_match* functions return the length of the match, re_search* + return the position of the start of the match. Return value -1 means no + match was found and -2 indicates an internal error. */ + +regoff_t +re_match (struct re_pattern_buffer *bufp, const char *string, Idx length, + Idx start, struct re_registers *regs) +{ + return re_search_stub (bufp, string, length, start, 0, length, regs, true); +} +#ifdef _LIBC +weak_alias (__re_match, re_match) +#endif + +regoff_t +re_search (struct re_pattern_buffer *bufp, const char *string, Idx length, + Idx start, regoff_t range, struct re_registers *regs) +{ + return re_search_stub (bufp, string, length, start, range, length, regs, + false); +} +#ifdef _LIBC +weak_alias (__re_search, re_search) +#endif + +regoff_t +re_match_2 (struct re_pattern_buffer *bufp, const char *string1, Idx length1, + const char *string2, Idx length2, Idx start, + struct re_registers *regs, Idx stop) +{ + return re_search_2_stub (bufp, string1, length1, string2, length2, + start, 0, regs, stop, true); +} +#ifdef _LIBC +weak_alias (__re_match_2, re_match_2) +#endif + +regoff_t +re_search_2 (struct re_pattern_buffer *bufp, const char *string1, Idx length1, + const char *string2, Idx length2, Idx start, regoff_t range, + struct re_registers *regs, Idx stop) +{ + return re_search_2_stub (bufp, string1, length1, string2, length2, + start, range, regs, stop, false); +} +#ifdef _LIBC +weak_alias (__re_search_2, re_search_2) +#endif + +static regoff_t +re_search_2_stub (struct re_pattern_buffer *bufp, const char *string1, + Idx length1, const char *string2, Idx length2, Idx start, + regoff_t range, struct re_registers *regs, + Idx stop, bool ret_len) +{ + const char *str; + regoff_t rval; + Idx len; + char *s = NULL; + + if (__glibc_unlikely ((length1 < 0 || length2 < 0 || stop < 0 + || INT_ADD_WRAPV (length1, length2, &len)))) + return -2; + + /* Concatenate the strings. */ + if (length2 > 0) + if (length1 > 0) + { + s = re_malloc (char, len); + + if (__glibc_unlikely (s == NULL)) + return -2; +#ifdef _LIBC + memcpy (__mempcpy (s, string1, length1), string2, length2); +#else + memcpy (s, string1, length1); + memcpy (s + length1, string2, length2); +#endif + str = s; + } + else + str = string2; + else + str = string1; + + rval = re_search_stub (bufp, str, len, start, range, stop, regs, + ret_len); + re_free (s); + return rval; +} + +/* The parameters have the same meaning as those of re_search. + Additional parameters: + If RET_LEN is true the length of the match is returned (re_match style); + otherwise the position of the match is returned. */ + +static regoff_t +re_search_stub (struct re_pattern_buffer *bufp, const char *string, Idx length, + Idx start, regoff_t range, Idx stop, struct re_registers *regs, + bool ret_len) +{ + reg_errcode_t result; + regmatch_t *pmatch; + Idx nregs; + regoff_t rval; + int eflags = 0; + re_dfa_t *dfa = bufp->buffer; + Idx last_start = start + range; + + /* Check for out-of-range. */ + if (__glibc_unlikely (start < 0 || start > length)) + return -1; + if (__glibc_unlikely (length < last_start + || (0 <= range && last_start < start))) + last_start = length; + else if (__glibc_unlikely (last_start < 0 + || (range < 0 && start <= last_start))) + last_start = 0; + + lock_lock (dfa->lock); + + eflags |= (bufp->not_bol) ? REG_NOTBOL : 0; + eflags |= (bufp->not_eol) ? REG_NOTEOL : 0; + + /* Compile fastmap if we haven't yet. */ + if (start < last_start && bufp->fastmap != NULL && !bufp->fastmap_accurate) + re_compile_fastmap (bufp); + + if (__glibc_unlikely (bufp->no_sub)) + regs = NULL; + + /* We need at least 1 register. */ + if (regs == NULL) + nregs = 1; + else if (__glibc_unlikely (bufp->regs_allocated == REGS_FIXED + && regs->num_regs <= bufp->re_nsub)) + { + nregs = regs->num_regs; + if (__glibc_unlikely (nregs < 1)) + { + /* Nothing can be copied to regs. */ + regs = NULL; + nregs = 1; + } + } + else + nregs = bufp->re_nsub + 1; + pmatch = re_malloc (regmatch_t, nregs); + if (__glibc_unlikely (pmatch == NULL)) + { + rval = -2; + goto out; + } + + result = re_search_internal (bufp, string, length, start, last_start, stop, + nregs, pmatch, eflags); + + rval = 0; + + /* I hope we needn't fill their regs with -1's when no match was found. */ + if (result != REG_NOERROR) + rval = result == REG_NOMATCH ? -1 : -2; + else if (regs != NULL) + { + /* If caller wants register contents data back, copy them. */ + bufp->regs_allocated = re_copy_regs (regs, pmatch, nregs, + bufp->regs_allocated); + if (__glibc_unlikely (bufp->regs_allocated == REGS_UNALLOCATED)) + rval = -2; + } + + if (__glibc_likely (rval == 0)) + { + if (ret_len) + { + assert (pmatch[0].rm_so == start); + rval = pmatch[0].rm_eo - start; + } + else + rval = pmatch[0].rm_so; + } + re_free (pmatch); + out: + lock_unlock (dfa->lock); + return rval; +} + +static unsigned +re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs, + int regs_allocated) +{ + int rval = REGS_REALLOCATE; + Idx i; + Idx need_regs = nregs + 1; + /* We need one extra element beyond 'num_regs' for the '-1' marker GNU code + uses. */ + + /* Have the register data arrays been allocated? */ + if (regs_allocated == REGS_UNALLOCATED) + { /* No. So allocate them with malloc. */ + regs->start = re_malloc (regoff_t, need_regs); + if (__glibc_unlikely (regs->start == NULL)) + return REGS_UNALLOCATED; + regs->end = re_malloc (regoff_t, need_regs); + if (__glibc_unlikely (regs->end == NULL)) + { + re_free (regs->start); + return REGS_UNALLOCATED; + } + regs->num_regs = need_regs; + } + else if (regs_allocated == REGS_REALLOCATE) + { /* Yes. If we need more elements than were already + allocated, reallocate them. If we need fewer, just + leave it alone. */ + if (__glibc_unlikely (need_regs > regs->num_regs)) + { + regoff_t *new_start = re_realloc (regs->start, regoff_t, need_regs); + regoff_t *new_end; + if (__glibc_unlikely (new_start == NULL)) + return REGS_UNALLOCATED; + new_end = re_realloc (regs->end, regoff_t, need_regs); + if (__glibc_unlikely (new_end == NULL)) + { + re_free (new_start); + return REGS_UNALLOCATED; + } + regs->start = new_start; + regs->end = new_end; + regs->num_regs = need_regs; + } + } + else + { + assert (regs_allocated == REGS_FIXED); + /* This function may not be called with REGS_FIXED and nregs too big. */ + assert (regs->num_regs >= nregs); + rval = REGS_FIXED; + } + + /* Copy the regs. */ + for (i = 0; i < nregs; ++i) + { + regs->start[i] = pmatch[i].rm_so; + regs->end[i] = pmatch[i].rm_eo; + } + for ( ; i < regs->num_regs; ++i) + regs->start[i] = regs->end[i] = -1; + + return rval; +} + +/* Set REGS to hold NUM_REGS registers, storing them in STARTS and + ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use + this memory for recording register information. STARTS and ENDS + must be allocated using the malloc library routine, and must each + be at least NUM_REGS * sizeof (regoff_t) bytes long. + + If NUM_REGS == 0, then subsequent matches should allocate their own + register data. + + Unless this function is called, the first search or match using + PATTERN_BUFFER will allocate its own register data, without + freeing the old data. */ + +void +re_set_registers (struct re_pattern_buffer *bufp, struct re_registers *regs, + __re_size_t num_regs, regoff_t *starts, regoff_t *ends) +{ + if (num_regs) + { + bufp->regs_allocated = REGS_REALLOCATE; + regs->num_regs = num_regs; + regs->start = starts; + regs->end = ends; + } + else + { + bufp->regs_allocated = REGS_UNALLOCATED; + regs->num_regs = 0; + regs->start = regs->end = NULL; + } +} +#ifdef _LIBC +weak_alias (__re_set_registers, re_set_registers) +#endif + +/* Entry points compatible with 4.2 BSD regex library. We don't define + them unless specifically requested. */ + +#if defined _REGEX_RE_COMP || defined _LIBC +int +# ifdef _LIBC +weak_function +# endif +re_exec (const char *s) +{ + return 0 == regexec (&re_comp_buf, s, 0, NULL, 0); +} +#endif /* _REGEX_RE_COMP */ + +/* Internal entry point. */ + +/* Searches for a compiled pattern PREG in the string STRING, whose + length is LENGTH. NMATCH, PMATCH, and EFLAGS have the same + meaning as with regexec. LAST_START is START + RANGE, where + START and RANGE have the same meaning as with re_search. + Return REG_NOERROR if we find a match, and REG_NOMATCH if not, + otherwise return the error code. + Note: We assume front end functions already check ranges. + (0 <= LAST_START && LAST_START <= LENGTH) */ + +static reg_errcode_t +__attribute_warn_unused_result__ +re_search_internal (const regex_t *preg, const char *string, Idx length, + Idx start, Idx last_start, Idx stop, size_t nmatch, + regmatch_t pmatch[], int eflags) +{ + reg_errcode_t err; + const re_dfa_t *dfa = preg->buffer; + Idx left_lim, right_lim; + int incr; + bool fl_longest_match; + int match_kind; + Idx match_first; + Idx match_last = -1; + Idx extra_nmatch; + bool sb; + int ch; +#if defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) + re_match_context_t mctx = { .dfa = dfa }; +#else + re_match_context_t mctx; +#endif + char *fastmap = ((preg->fastmap != NULL && preg->fastmap_accurate + && start != last_start && !preg->can_be_null) + ? preg->fastmap : NULL); + RE_TRANSLATE_TYPE t = preg->translate; + +#if !(defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) + memset (&mctx, '\0', sizeof (re_match_context_t)); + mctx.dfa = dfa; +#endif + + extra_nmatch = (nmatch > preg->re_nsub) ? nmatch - (preg->re_nsub + 1) : 0; + nmatch -= extra_nmatch; + + /* Check if the DFA haven't been compiled. */ + if (__glibc_unlikely (preg->used == 0 || dfa->init_state == NULL + || dfa->init_state_word == NULL + || dfa->init_state_nl == NULL + || dfa->init_state_begbuf == NULL)) + return REG_NOMATCH; + +#ifdef DEBUG + /* We assume front-end functions already check them. */ + assert (0 <= last_start && last_start <= length); +#endif + + /* If initial states with non-begbuf contexts have no elements, + the regex must be anchored. If preg->newline_anchor is set, + we'll never use init_state_nl, so do not check it. */ + if (dfa->init_state->nodes.nelem == 0 + && dfa->init_state_word->nodes.nelem == 0 + && (dfa->init_state_nl->nodes.nelem == 0 + || !preg->newline_anchor)) + { + if (start != 0 && last_start != 0) + return REG_NOMATCH; + start = last_start = 0; + } + + /* We must check the longest matching, if nmatch > 0. */ + fl_longest_match = (nmatch != 0 || dfa->nbackref); + + err = re_string_allocate (&mctx.input, string, length, dfa->nodes_len + 1, + preg->translate, (preg->syntax & RE_ICASE) != 0, + dfa); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + mctx.input.stop = stop; + mctx.input.raw_stop = stop; + mctx.input.newline_anchor = preg->newline_anchor; + + err = match_ctx_init (&mctx, eflags, dfa->nbackref * 2); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + + /* We will log all the DFA states through which the dfa pass, + if nmatch > 1, or this dfa has "multibyte node", which is a + back-reference or a node which can accept multibyte character or + multi character collating element. */ + if (nmatch > 1 || dfa->has_mb_node) + { + /* Avoid overflow. */ + if (__glibc_unlikely ((MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) + <= mctx.input.bufs_len))) + { + err = REG_ESPACE; + goto free_return; + } + + mctx.state_log = re_malloc (re_dfastate_t *, mctx.input.bufs_len + 1); + if (__glibc_unlikely (mctx.state_log == NULL)) + { + err = REG_ESPACE; + goto free_return; + } + } + else + mctx.state_log = NULL; + + match_first = start; + mctx.input.tip_context = (eflags & REG_NOTBOL) ? CONTEXT_BEGBUF + : CONTEXT_NEWLINE | CONTEXT_BEGBUF; + + /* Check incrementally whether the input string matches. */ + incr = (last_start < start) ? -1 : 1; + left_lim = (last_start < start) ? last_start : start; + right_lim = (last_start < start) ? start : last_start; + sb = dfa->mb_cur_max == 1; + match_kind = + (fastmap + ? ((sb || !(preg->syntax & RE_ICASE || t) ? 4 : 0) + | (start <= last_start ? 2 : 0) + | (t != NULL ? 1 : 0)) + : 8); + + for (;; match_first += incr) + { + err = REG_NOMATCH; + if (match_first < left_lim || right_lim < match_first) + goto free_return; + + /* Advance as rapidly as possible through the string, until we + find a plausible place to start matching. This may be done + with varying efficiency, so there are various possibilities: + only the most common of them are specialized, in order to + save on code size. We use a switch statement for speed. */ + switch (match_kind) + { + case 8: + /* No fastmap. */ + break; + + case 7: + /* Fastmap with single-byte translation, match forward. */ + while (__glibc_likely (match_first < right_lim) + && !fastmap[t[(unsigned char) string[match_first]]]) + ++match_first; + goto forward_match_found_start_or_reached_end; + + case 6: + /* Fastmap without translation, match forward. */ + while (__glibc_likely (match_first < right_lim) + && !fastmap[(unsigned char) string[match_first]]) + ++match_first; + + forward_match_found_start_or_reached_end: + if (__glibc_unlikely (match_first == right_lim)) + { + ch = match_first >= length + ? 0 : (unsigned char) string[match_first]; + if (!fastmap[t ? t[ch] : ch]) + goto free_return; + } + break; + + case 4: + case 5: + /* Fastmap without multi-byte translation, match backwards. */ + while (match_first >= left_lim) + { + ch = match_first >= length + ? 0 : (unsigned char) string[match_first]; + if (fastmap[t ? t[ch] : ch]) + break; + --match_first; + } + if (match_first < left_lim) + goto free_return; + break; + + default: + /* In this case, we can't determine easily the current byte, + since it might be a component byte of a multibyte + character. Then we use the constructed buffer instead. */ + for (;;) + { + /* If MATCH_FIRST is out of the valid range, reconstruct the + buffers. */ + __re_size_t offset = match_first - mctx.input.raw_mbs_idx; + if (__glibc_unlikely (offset + >= (__re_size_t) mctx.input.valid_raw_len)) + { + err = re_string_reconstruct (&mctx.input, match_first, + eflags); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + + offset = match_first - mctx.input.raw_mbs_idx; + } + /* If MATCH_FIRST is out of the buffer, leave it as '\0'. + Note that MATCH_FIRST must not be smaller than 0. */ + ch = (match_first >= length + ? 0 : re_string_byte_at (&mctx.input, offset)); + if (fastmap[ch]) + break; + match_first += incr; + if (match_first < left_lim || match_first > right_lim) + { + err = REG_NOMATCH; + goto free_return; + } + } + break; + } + + /* Reconstruct the buffers so that the matcher can assume that + the matching starts from the beginning of the buffer. */ + err = re_string_reconstruct (&mctx.input, match_first, eflags); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + +#ifdef RE_ENABLE_I18N + /* Don't consider this char as a possible match start if it part, + yet isn't the head, of a multibyte character. */ + if (!sb && !re_string_first_byte (&mctx.input, 0)) + continue; +#endif + + /* It seems to be appropriate one, then use the matcher. */ + /* We assume that the matching starts from 0. */ + mctx.state_log_top = mctx.nbkref_ents = mctx.max_mb_elem_len = 0; + match_last = check_matching (&mctx, fl_longest_match, + start <= last_start ? &match_first : NULL); + if (match_last != -1) + { + if (__glibc_unlikely (match_last == -2)) + { + err = REG_ESPACE; + goto free_return; + } + else + { + mctx.match_last = match_last; + if ((!preg->no_sub && nmatch > 1) || dfa->nbackref) + { + re_dfastate_t *pstate = mctx.state_log[match_last]; + mctx.last_node = check_halt_state_context (&mctx, pstate, + match_last); + } + if ((!preg->no_sub && nmatch > 1 && dfa->has_plural_match) + || dfa->nbackref) + { + err = prune_impossible_nodes (&mctx); + if (err == REG_NOERROR) + break; + if (__glibc_unlikely (err != REG_NOMATCH)) + goto free_return; + match_last = -1; + } + else + break; /* We found a match. */ + } + } + + match_ctx_clean (&mctx); + } + +#ifdef DEBUG + assert (match_last != -1); + assert (err == REG_NOERROR); +#endif + + /* Set pmatch[] if we need. */ + if (nmatch > 0) + { + Idx reg_idx; + + /* Initialize registers. */ + for (reg_idx = 1; reg_idx < nmatch; ++reg_idx) + pmatch[reg_idx].rm_so = pmatch[reg_idx].rm_eo = -1; + + /* Set the points where matching start/end. */ + pmatch[0].rm_so = 0; + pmatch[0].rm_eo = mctx.match_last; + /* FIXME: This function should fail if mctx.match_last exceeds + the maximum possible regoff_t value. We need a new error + code REG_OVERFLOW. */ + + if (!preg->no_sub && nmatch > 1) + { + err = set_regs (preg, &mctx, nmatch, pmatch, + dfa->has_plural_match && dfa->nbackref > 0); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + } + + /* At last, add the offset to each register, since we slid + the buffers so that we could assume that the matching starts + from 0. */ + for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) + if (pmatch[reg_idx].rm_so != -1) + { +#ifdef RE_ENABLE_I18N + if (__glibc_unlikely (mctx.input.offsets_needed != 0)) + { + pmatch[reg_idx].rm_so = + (pmatch[reg_idx].rm_so == mctx.input.valid_len + ? mctx.input.valid_raw_len + : mctx.input.offsets[pmatch[reg_idx].rm_so]); + pmatch[reg_idx].rm_eo = + (pmatch[reg_idx].rm_eo == mctx.input.valid_len + ? mctx.input.valid_raw_len + : mctx.input.offsets[pmatch[reg_idx].rm_eo]); + } +#else + assert (mctx.input.offsets_needed == 0); +#endif + pmatch[reg_idx].rm_so += match_first; + pmatch[reg_idx].rm_eo += match_first; + } + for (reg_idx = 0; reg_idx < extra_nmatch; ++reg_idx) + { + pmatch[nmatch + reg_idx].rm_so = -1; + pmatch[nmatch + reg_idx].rm_eo = -1; + } + + if (dfa->subexp_map) + for (reg_idx = 0; reg_idx + 1 < nmatch; reg_idx++) + if (dfa->subexp_map[reg_idx] != reg_idx) + { + pmatch[reg_idx + 1].rm_so + = pmatch[dfa->subexp_map[reg_idx] + 1].rm_so; + pmatch[reg_idx + 1].rm_eo + = pmatch[dfa->subexp_map[reg_idx] + 1].rm_eo; + } + } + + free_return: + re_free (mctx.state_log); + if (dfa->nbackref) + match_ctx_free (&mctx); + re_string_destruct (&mctx.input); + return err; +} + +static reg_errcode_t +__attribute_warn_unused_result__ +prune_impossible_nodes (re_match_context_t *mctx) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx halt_node, match_last; + reg_errcode_t ret; + re_dfastate_t **sifted_states; + re_dfastate_t **lim_states = NULL; + re_sift_context_t sctx; +#ifdef DEBUG + assert (mctx->state_log != NULL); +#endif + match_last = mctx->match_last; + halt_node = mctx->last_node; + + /* Avoid overflow. */ + if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) + <= match_last)) + return REG_ESPACE; + + sifted_states = re_malloc (re_dfastate_t *, match_last + 1); + if (__glibc_unlikely (sifted_states == NULL)) + { + ret = REG_ESPACE; + goto free_return; + } + if (dfa->nbackref) + { + lim_states = re_malloc (re_dfastate_t *, match_last + 1); + if (__glibc_unlikely (lim_states == NULL)) + { + ret = REG_ESPACE; + goto free_return; + } + while (1) + { + memset (lim_states, '\0', + sizeof (re_dfastate_t *) * (match_last + 1)); + sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, + match_last); + ret = sift_states_backward (mctx, &sctx); + re_node_set_free (&sctx.limits); + if (__glibc_unlikely (ret != REG_NOERROR)) + goto free_return; + if (sifted_states[0] != NULL || lim_states[0] != NULL) + break; + do + { + --match_last; + if (match_last < 0) + { + ret = REG_NOMATCH; + goto free_return; + } + } while (mctx->state_log[match_last] == NULL + || !mctx->state_log[match_last]->halt); + halt_node = check_halt_state_context (mctx, + mctx->state_log[match_last], + match_last); + } + ret = merge_state_array (dfa, sifted_states, lim_states, + match_last + 1); + re_free (lim_states); + lim_states = NULL; + if (__glibc_unlikely (ret != REG_NOERROR)) + goto free_return; + } + else + { + sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last); + ret = sift_states_backward (mctx, &sctx); + re_node_set_free (&sctx.limits); + if (__glibc_unlikely (ret != REG_NOERROR)) + goto free_return; + if (sifted_states[0] == NULL) + { + ret = REG_NOMATCH; + goto free_return; + } + } + re_free (mctx->state_log); + mctx->state_log = sifted_states; + sifted_states = NULL; + mctx->last_node = halt_node; + mctx->match_last = match_last; + ret = REG_NOERROR; + free_return: + re_free (sifted_states); + re_free (lim_states); + return ret; +} + +/* Acquire an initial state and return it. + We must select appropriate initial state depending on the context, + since initial states may have constraints like "\<", "^", etc.. */ + +static inline re_dfastate_t * +__attribute__ ((always_inline)) +acquire_init_state_context (reg_errcode_t *err, const re_match_context_t *mctx, + Idx idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + if (dfa->init_state->has_constraint) + { + unsigned int context; + context = re_string_context_at (&mctx->input, idx - 1, mctx->eflags); + if (IS_WORD_CONTEXT (context)) + return dfa->init_state_word; + else if (IS_ORDINARY_CONTEXT (context)) + return dfa->init_state; + else if (IS_BEGBUF_CONTEXT (context) && IS_NEWLINE_CONTEXT (context)) + return dfa->init_state_begbuf; + else if (IS_NEWLINE_CONTEXT (context)) + return dfa->init_state_nl; + else if (IS_BEGBUF_CONTEXT (context)) + { + /* It is relatively rare case, then calculate on demand. */ + return re_acquire_state_context (err, dfa, + dfa->init_state->entrance_nodes, + context); + } + else + /* Must not happen? */ + return dfa->init_state; + } + else + return dfa->init_state; +} + +/* Check whether the regular expression match input string INPUT or not, + and return the index where the matching end. Return -1 if + there is no match, and return -2 in case of an error. + FL_LONGEST_MATCH means we want the POSIX longest matching. + If P_MATCH_FIRST is not NULL, and the match fails, it is set to the + next place where we may want to try matching. + Note that the matcher assumes that the matching starts from the current + index of the buffer. */ + +static Idx +__attribute_warn_unused_result__ +check_matching (re_match_context_t *mctx, bool fl_longest_match, + Idx *p_match_first) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx match = 0; + Idx match_last = -1; + Idx cur_str_idx = re_string_cur_idx (&mctx->input); + re_dfastate_t *cur_state; + bool at_init_state = p_match_first != NULL; + Idx next_start_idx = cur_str_idx; + + err = REG_NOERROR; + cur_state = acquire_init_state_context (&err, mctx, cur_str_idx); + /* An initial state must not be NULL (invalid). */ + if (__glibc_unlikely (cur_state == NULL)) + { + assert (err == REG_ESPACE); + return -2; + } + + if (mctx->state_log != NULL) + { + mctx->state_log[cur_str_idx] = cur_state; + + /* Check OP_OPEN_SUBEXP in the initial state in case that we use them + later. E.g. Processing back references. */ + if (__glibc_unlikely (dfa->nbackref)) + { + at_init_state = false; + err = check_subexp_matching_top (mctx, &cur_state->nodes, 0); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + + if (cur_state->has_backref) + { + err = transit_state_bkref (mctx, &cur_state->nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + } + } + + /* If the RE accepts NULL string. */ + if (__glibc_unlikely (cur_state->halt)) + { + if (!cur_state->has_constraint + || check_halt_state_context (mctx, cur_state, cur_str_idx)) + { + if (!fl_longest_match) + return cur_str_idx; + else + { + match_last = cur_str_idx; + match = 1; + } + } + } + + while (!re_string_eoi (&mctx->input)) + { + re_dfastate_t *old_state = cur_state; + Idx next_char_idx = re_string_cur_idx (&mctx->input) + 1; + + if ((__glibc_unlikely (next_char_idx >= mctx->input.bufs_len) + && mctx->input.bufs_len < mctx->input.len) + || (__glibc_unlikely (next_char_idx >= mctx->input.valid_len) + && mctx->input.valid_len < mctx->input.len)) + { + err = extend_buffers (mctx, next_char_idx + 1); + if (__glibc_unlikely (err != REG_NOERROR)) + { + assert (err == REG_ESPACE); + return -2; + } + } + + cur_state = transit_state (&err, mctx, cur_state); + if (mctx->state_log != NULL) + cur_state = merge_state_with_log (&err, mctx, cur_state); + + if (cur_state == NULL) + { + /* Reached the invalid state or an error. Try to recover a valid + state using the state log, if available and if we have not + already found a valid (even if not the longest) match. */ + if (__glibc_unlikely (err != REG_NOERROR)) + return -2; + + if (mctx->state_log == NULL + || (match && !fl_longest_match) + || (cur_state = find_recover_state (&err, mctx)) == NULL) + break; + } + + if (__glibc_unlikely (at_init_state)) + { + if (old_state == cur_state) + next_start_idx = next_char_idx; + else + at_init_state = false; + } + + if (cur_state->halt) + { + /* Reached a halt state. + Check the halt state can satisfy the current context. */ + if (!cur_state->has_constraint + || check_halt_state_context (mctx, cur_state, + re_string_cur_idx (&mctx->input))) + { + /* We found an appropriate halt state. */ + match_last = re_string_cur_idx (&mctx->input); + match = 1; + + /* We found a match, do not modify match_first below. */ + p_match_first = NULL; + if (!fl_longest_match) + break; + } + } + } + + if (p_match_first) + *p_match_first += next_start_idx; + + return match_last; +} + +/* Check NODE match the current context. */ + +static bool +check_halt_node_context (const re_dfa_t *dfa, Idx node, unsigned int context) +{ + re_token_type_t type = dfa->nodes[node].type; + unsigned int constraint = dfa->nodes[node].constraint; + if (type != END_OF_RE) + return false; + if (!constraint) + return true; + if (NOT_SATISFY_NEXT_CONSTRAINT (constraint, context)) + return false; + return true; +} + +/* Check the halt state STATE match the current context. + Return 0 if not match, if the node, STATE has, is a halt node and + match the context, return the node. */ + +static Idx +check_halt_state_context (const re_match_context_t *mctx, + const re_dfastate_t *state, Idx idx) +{ + Idx i; + unsigned int context; +#ifdef DEBUG + assert (state->halt); +#endif + context = re_string_context_at (&mctx->input, idx, mctx->eflags); + for (i = 0; i < state->nodes.nelem; ++i) + if (check_halt_node_context (mctx->dfa, state->nodes.elems[i], context)) + return state->nodes.elems[i]; + return 0; +} + +/* Compute the next node to which "NFA" transit from NODE("NFA" is a NFA + corresponding to the DFA). + Return the destination node, and update EPS_VIA_NODES; + return -1 in case of errors. */ + +static Idx +proceed_next_node (const re_match_context_t *mctx, Idx nregs, regmatch_t *regs, + Idx *pidx, Idx node, re_node_set *eps_via_nodes, + struct re_fail_stack_t *fs) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx i; + bool ok; + if (IS_EPSILON_NODE (dfa->nodes[node].type)) + { + re_node_set *cur_nodes = &mctx->state_log[*pidx]->nodes; + re_node_set *edests = &dfa->edests[node]; + Idx dest_node; + ok = re_node_set_insert (eps_via_nodes, node); + if (__glibc_unlikely (! ok)) + return -2; + /* Pick up a valid destination, or return -1 if none + is found. */ + for (dest_node = -1, i = 0; i < edests->nelem; ++i) + { + Idx candidate = edests->elems[i]; + if (!re_node_set_contains (cur_nodes, candidate)) + continue; + if (dest_node == -1) + dest_node = candidate; + + else + { + /* In order to avoid infinite loop like "(a*)*", return the second + epsilon-transition if the first was already considered. */ + if (re_node_set_contains (eps_via_nodes, dest_node)) + return candidate; + + /* Otherwise, push the second epsilon-transition on the fail stack. */ + else if (fs != NULL + && push_fail_stack (fs, *pidx, candidate, nregs, regs, + eps_via_nodes)) + return -2; + + /* We know we are going to exit. */ + break; + } + } + return dest_node; + } + else + { + Idx naccepted = 0; + re_token_type_t type = dfa->nodes[node].type; + +#ifdef RE_ENABLE_I18N + if (dfa->nodes[node].accept_mb) + naccepted = check_node_accept_bytes (dfa, node, &mctx->input, *pidx); + else +#endif /* RE_ENABLE_I18N */ + if (type == OP_BACK_REF) + { + Idx subexp_idx = dfa->nodes[node].opr.idx + 1; + naccepted = regs[subexp_idx].rm_eo - regs[subexp_idx].rm_so; + if (fs != NULL) + { + if (regs[subexp_idx].rm_so == -1 || regs[subexp_idx].rm_eo == -1) + return -1; + else if (naccepted) + { + char *buf = (char *) re_string_get_buffer (&mctx->input); + if (memcmp (buf + regs[subexp_idx].rm_so, buf + *pidx, + naccepted) != 0) + return -1; + } + } + + if (naccepted == 0) + { + Idx dest_node; + ok = re_node_set_insert (eps_via_nodes, node); + if (__glibc_unlikely (! ok)) + return -2; + dest_node = dfa->edests[node].elems[0]; + if (re_node_set_contains (&mctx->state_log[*pidx]->nodes, + dest_node)) + return dest_node; + } + } + + if (naccepted != 0 + || check_node_accept (mctx, dfa->nodes + node, *pidx)) + { + Idx dest_node = dfa->nexts[node]; + *pidx = (naccepted == 0) ? *pidx + 1 : *pidx + naccepted; + if (fs && (*pidx > mctx->match_last || mctx->state_log[*pidx] == NULL + || !re_node_set_contains (&mctx->state_log[*pidx]->nodes, + dest_node))) + return -1; + re_node_set_empty (eps_via_nodes); + return dest_node; + } + } + return -1; +} + +static reg_errcode_t +__attribute_warn_unused_result__ +push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node, + Idx nregs, regmatch_t *regs, re_node_set *eps_via_nodes) +{ + reg_errcode_t err; + Idx num = fs->num++; + if (fs->num == fs->alloc) + { + struct re_fail_stack_ent_t *new_array; + new_array = re_realloc (fs->stack, struct re_fail_stack_ent_t, + fs->alloc * 2); + if (new_array == NULL) + return REG_ESPACE; + fs->alloc *= 2; + fs->stack = new_array; + } + fs->stack[num].idx = str_idx; + fs->stack[num].node = dest_node; + fs->stack[num].regs = re_malloc (regmatch_t, nregs); + if (fs->stack[num].regs == NULL) + return REG_ESPACE; + memcpy (fs->stack[num].regs, regs, sizeof (regmatch_t) * nregs); + err = re_node_set_init_copy (&fs->stack[num].eps_via_nodes, eps_via_nodes); + return err; +} + +static Idx +pop_fail_stack (struct re_fail_stack_t *fs, Idx *pidx, Idx nregs, + regmatch_t *regs, re_node_set *eps_via_nodes) +{ + Idx num = --fs->num; + assert (num >= 0); + *pidx = fs->stack[num].idx; + memcpy (regs, fs->stack[num].regs, sizeof (regmatch_t) * nregs); + re_node_set_free (eps_via_nodes); + re_free (fs->stack[num].regs); + *eps_via_nodes = fs->stack[num].eps_via_nodes; + return fs->stack[num].node; +} + +/* Set the positions where the subexpressions are starts/ends to registers + PMATCH. + Note: We assume that pmatch[0] is already set, and + pmatch[i].rm_so == pmatch[i].rm_eo == -1 for 0 < i < nmatch. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch, + regmatch_t *pmatch, bool fl_backtrack) +{ + const re_dfa_t *dfa = preg->buffer; + Idx idx, cur_node; + re_node_set eps_via_nodes; + struct re_fail_stack_t *fs; + struct re_fail_stack_t fs_body = { 0, 2, NULL }; + regmatch_t *prev_idx_match; + bool prev_idx_match_malloced = false; + +#ifdef DEBUG + assert (nmatch > 1); + assert (mctx->state_log != NULL); +#endif + if (fl_backtrack) + { + fs = &fs_body; + fs->stack = re_malloc (struct re_fail_stack_ent_t, fs->alloc); + if (fs->stack == NULL) + return REG_ESPACE; + } + else + fs = NULL; + + cur_node = dfa->init_node; + re_node_set_init_empty (&eps_via_nodes); + + if (__libc_use_alloca (nmatch * sizeof (regmatch_t))) + prev_idx_match = (regmatch_t *) alloca (nmatch * sizeof (regmatch_t)); + else + { + prev_idx_match = re_malloc (regmatch_t, nmatch); + if (prev_idx_match == NULL) + { + free_fail_stack_return (fs); + return REG_ESPACE; + } + prev_idx_match_malloced = true; + } + memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); + + for (idx = pmatch[0].rm_so; idx <= pmatch[0].rm_eo ;) + { + update_regs (dfa, pmatch, prev_idx_match, cur_node, idx, nmatch); + + if (idx == pmatch[0].rm_eo && cur_node == mctx->last_node) + { + Idx reg_idx; + if (fs) + { + for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) + if (pmatch[reg_idx].rm_so > -1 && pmatch[reg_idx].rm_eo == -1) + break; + if (reg_idx == nmatch) + { + re_node_set_free (&eps_via_nodes); + if (prev_idx_match_malloced) + re_free (prev_idx_match); + return free_fail_stack_return (fs); + } + cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, + &eps_via_nodes); + } + else + { + re_node_set_free (&eps_via_nodes); + if (prev_idx_match_malloced) + re_free (prev_idx_match); + return REG_NOERROR; + } + } + + /* Proceed to next node. */ + cur_node = proceed_next_node (mctx, nmatch, pmatch, &idx, cur_node, + &eps_via_nodes, fs); + + if (__glibc_unlikely (cur_node < 0)) + { + if (__glibc_unlikely (cur_node == -2)) + { + re_node_set_free (&eps_via_nodes); + if (prev_idx_match_malloced) + re_free (prev_idx_match); + free_fail_stack_return (fs); + return REG_ESPACE; + } + if (fs) + cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, + &eps_via_nodes); + else + { + re_node_set_free (&eps_via_nodes); + if (prev_idx_match_malloced) + re_free (prev_idx_match); + return REG_NOMATCH; + } + } + } + re_node_set_free (&eps_via_nodes); + if (prev_idx_match_malloced) + re_free (prev_idx_match); + return free_fail_stack_return (fs); +} + +static reg_errcode_t +free_fail_stack_return (struct re_fail_stack_t *fs) +{ + if (fs) + { + Idx fs_idx; + for (fs_idx = 0; fs_idx < fs->num; ++fs_idx) + { + re_node_set_free (&fs->stack[fs_idx].eps_via_nodes); + re_free (fs->stack[fs_idx].regs); + } + re_free (fs->stack); + } + return REG_NOERROR; +} + +static void +update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, + regmatch_t *prev_idx_match, Idx cur_node, Idx cur_idx, Idx nmatch) +{ + int type = dfa->nodes[cur_node].type; + if (type == OP_OPEN_SUBEXP) + { + Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; + + /* We are at the first node of this sub expression. */ + if (reg_num < nmatch) + { + pmatch[reg_num].rm_so = cur_idx; + pmatch[reg_num].rm_eo = -1; + } + } + else if (type == OP_CLOSE_SUBEXP) + { + Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; + if (reg_num < nmatch) + { + /* We are at the last node of this sub expression. */ + if (pmatch[reg_num].rm_so < cur_idx) + { + pmatch[reg_num].rm_eo = cur_idx; + /* This is a non-empty match or we are not inside an optional + subexpression. Accept this right away. */ + memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); + } + else + { + if (dfa->nodes[cur_node].opt_subexp + && prev_idx_match[reg_num].rm_so != -1) + /* We transited through an empty match for an optional + subexpression, like (a?)*, and this is not the subexp's + first match. Copy back the old content of the registers + so that matches of an inner subexpression are undone as + well, like in ((a?))*. */ + memcpy (pmatch, prev_idx_match, sizeof (regmatch_t) * nmatch); + else + /* We completed a subexpression, but it may be part of + an optional one, so do not update PREV_IDX_MATCH. */ + pmatch[reg_num].rm_eo = cur_idx; + } + } + } +} + +/* This function checks the STATE_LOG from the SCTX->last_str_idx to 0 + and sift the nodes in each states according to the following rules. + Updated state_log will be wrote to STATE_LOG. + + Rules: We throw away the Node 'a' in the STATE_LOG[STR_IDX] if... + 1. When STR_IDX == MATCH_LAST(the last index in the state_log): + If 'a' isn't the LAST_NODE and 'a' can't epsilon transit to + the LAST_NODE, we throw away the node 'a'. + 2. When 0 <= STR_IDX < MATCH_LAST and 'a' accepts + string 's' and transit to 'b': + i. If 'b' isn't in the STATE_LOG[STR_IDX+strlen('s')], we throw + away the node 'a'. + ii. If 'b' is in the STATE_LOG[STR_IDX+strlen('s')] but 'b' is + thrown away, we throw away the node 'a'. + 3. When 0 <= STR_IDX < MATCH_LAST and 'a' epsilon transit to 'b': + i. If 'b' isn't in the STATE_LOG[STR_IDX], we throw away the + node 'a'. + ii. If 'b' is in the STATE_LOG[STR_IDX] but 'b' is thrown away, + we throw away the node 'a'. */ + +#define STATE_NODE_CONTAINS(state,node) \ + ((state) != NULL && re_node_set_contains (&(state)->nodes, node)) + +static reg_errcode_t +sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx) +{ + reg_errcode_t err; + int null_cnt = 0; + Idx str_idx = sctx->last_str_idx; + re_node_set cur_dest; + +#ifdef DEBUG + assert (mctx->state_log != NULL && mctx->state_log[str_idx] != NULL); +#endif + + /* Build sifted state_log[str_idx]. It has the nodes which can epsilon + transit to the last_node and the last_node itself. */ + err = re_node_set_init_1 (&cur_dest, sctx->last_node); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + + /* Then check each states in the state_log. */ + while (str_idx > 0) + { + /* Update counters. */ + null_cnt = (sctx->sifted_states[str_idx] == NULL) ? null_cnt + 1 : 0; + if (null_cnt > mctx->max_mb_elem_len) + { + memset (sctx->sifted_states, '\0', + sizeof (re_dfastate_t *) * str_idx); + re_node_set_free (&cur_dest); + return REG_NOERROR; + } + re_node_set_empty (&cur_dest); + --str_idx; + + if (mctx->state_log[str_idx]) + { + err = build_sifted_states (mctx, sctx, str_idx, &cur_dest); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + } + + /* Add all the nodes which satisfy the following conditions: + - It can epsilon transit to a node in CUR_DEST. + - It is in CUR_SRC. + And update state_log. */ + err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + } + err = REG_NOERROR; + free_return: + re_node_set_free (&cur_dest); + return err; +} + +static reg_errcode_t +__attribute_warn_unused_result__ +build_sifted_states (const re_match_context_t *mctx, re_sift_context_t *sctx, + Idx str_idx, re_node_set *cur_dest) +{ + const re_dfa_t *const dfa = mctx->dfa; + const re_node_set *cur_src = &mctx->state_log[str_idx]->non_eps_nodes; + Idx i; + + /* Then build the next sifted state. + We build the next sifted state on 'cur_dest', and update + 'sifted_states[str_idx]' with 'cur_dest'. + Note: + 'cur_dest' is the sifted state from 'state_log[str_idx + 1]'. + 'cur_src' points the node_set of the old 'state_log[str_idx]' + (with the epsilon nodes pre-filtered out). */ + for (i = 0; i < cur_src->nelem; i++) + { + Idx prev_node = cur_src->elems[i]; + int naccepted = 0; + bool ok; + +#ifdef DEBUG + re_token_type_t type = dfa->nodes[prev_node].type; + assert (!IS_EPSILON_NODE (type)); +#endif +#ifdef RE_ENABLE_I18N + /* If the node may accept "multi byte". */ + if (dfa->nodes[prev_node].accept_mb) + naccepted = sift_states_iter_mb (mctx, sctx, prev_node, + str_idx, sctx->last_str_idx); +#endif /* RE_ENABLE_I18N */ + + /* We don't check backreferences here. + See update_cur_sifted_state(). */ + if (!naccepted + && check_node_accept (mctx, dfa->nodes + prev_node, str_idx) + && STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + 1], + dfa->nexts[prev_node])) + naccepted = 1; + + if (naccepted == 0) + continue; + + if (sctx->limits.nelem) + { + Idx to_idx = str_idx + naccepted; + if (check_dst_limits (mctx, &sctx->limits, + dfa->nexts[prev_node], to_idx, + prev_node, str_idx)) + continue; + } + ok = re_node_set_insert (cur_dest, prev_node); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + } + + return REG_NOERROR; +} + +/* Helper functions. */ + +static reg_errcode_t +clean_state_log_if_needed (re_match_context_t *mctx, Idx next_state_log_idx) +{ + Idx top = mctx->state_log_top; + + if ((next_state_log_idx >= mctx->input.bufs_len + && mctx->input.bufs_len < mctx->input.len) + || (next_state_log_idx >= mctx->input.valid_len + && mctx->input.valid_len < mctx->input.len)) + { + reg_errcode_t err; + err = extend_buffers (mctx, next_state_log_idx + 1); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + + if (top < next_state_log_idx) + { + memset (mctx->state_log + top + 1, '\0', + sizeof (re_dfastate_t *) * (next_state_log_idx - top)); + mctx->state_log_top = next_state_log_idx; + } + return REG_NOERROR; +} + +static reg_errcode_t +merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst, + re_dfastate_t **src, Idx num) +{ + Idx st_idx; + reg_errcode_t err; + for (st_idx = 0; st_idx < num; ++st_idx) + { + if (dst[st_idx] == NULL) + dst[st_idx] = src[st_idx]; + else if (src[st_idx] != NULL) + { + re_node_set merged_set; + err = re_node_set_init_union (&merged_set, &dst[st_idx]->nodes, + &src[st_idx]->nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + dst[st_idx] = re_acquire_state (&err, dfa, &merged_set); + re_node_set_free (&merged_set); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + } + return REG_NOERROR; +} + +static reg_errcode_t +update_cur_sifted_state (const re_match_context_t *mctx, + re_sift_context_t *sctx, Idx str_idx, + re_node_set *dest_nodes) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err = REG_NOERROR; + const re_node_set *candidates; + candidates = ((mctx->state_log[str_idx] == NULL) ? NULL + : &mctx->state_log[str_idx]->nodes); + + if (dest_nodes->nelem == 0) + sctx->sifted_states[str_idx] = NULL; + else + { + if (candidates) + { + /* At first, add the nodes which can epsilon transit to a node in + DEST_NODE. */ + err = add_epsilon_src_nodes (dfa, dest_nodes, candidates); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + + /* Then, check the limitations in the current sift_context. */ + if (sctx->limits.nelem) + { + err = check_subexp_limits (dfa, dest_nodes, candidates, &sctx->limits, + mctx->bkref_ents, str_idx); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + } + + sctx->sifted_states[str_idx] = re_acquire_state (&err, dfa, dest_nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + + if (candidates && mctx->state_log[str_idx]->has_backref) + { + err = sift_states_bkref (mctx, sctx, str_idx, candidates); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + return REG_NOERROR; +} + +static reg_errcode_t +__attribute_warn_unused_result__ +add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes, + const re_node_set *candidates) +{ + reg_errcode_t err = REG_NOERROR; + Idx i; + + re_dfastate_t *state = re_acquire_state (&err, dfa, dest_nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + + if (!state->inveclosure.alloc) + { + err = re_node_set_alloc (&state->inveclosure, dest_nodes->nelem); + if (__glibc_unlikely (err != REG_NOERROR)) + return REG_ESPACE; + for (i = 0; i < dest_nodes->nelem; i++) + { + err = re_node_set_merge (&state->inveclosure, + dfa->inveclosures + dest_nodes->elems[i]); + if (__glibc_unlikely (err != REG_NOERROR)) + return REG_ESPACE; + } + } + return re_node_set_add_intersect (dest_nodes, candidates, + &state->inveclosure); +} + +static reg_errcode_t +sub_epsilon_src_nodes (const re_dfa_t *dfa, Idx node, re_node_set *dest_nodes, + const re_node_set *candidates) +{ + Idx ecl_idx; + reg_errcode_t err; + re_node_set *inv_eclosure = dfa->inveclosures + node; + re_node_set except_nodes; + re_node_set_init_empty (&except_nodes); + for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) + { + Idx cur_node = inv_eclosure->elems[ecl_idx]; + if (cur_node == node) + continue; + if (IS_EPSILON_NODE (dfa->nodes[cur_node].type)) + { + Idx edst1 = dfa->edests[cur_node].elems[0]; + Idx edst2 = ((dfa->edests[cur_node].nelem > 1) + ? dfa->edests[cur_node].elems[1] : -1); + if ((!re_node_set_contains (inv_eclosure, edst1) + && re_node_set_contains (dest_nodes, edst1)) + || (edst2 > 0 + && !re_node_set_contains (inv_eclosure, edst2) + && re_node_set_contains (dest_nodes, edst2))) + { + err = re_node_set_add_intersect (&except_nodes, candidates, + dfa->inveclosures + cur_node); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&except_nodes); + return err; + } + } + } + } + for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) + { + Idx cur_node = inv_eclosure->elems[ecl_idx]; + if (!re_node_set_contains (&except_nodes, cur_node)) + { + Idx idx = re_node_set_contains (dest_nodes, cur_node) - 1; + re_node_set_remove_at (dest_nodes, idx); + } + } + re_node_set_free (&except_nodes); + return REG_NOERROR; +} + +static bool +check_dst_limits (const re_match_context_t *mctx, const re_node_set *limits, + Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx lim_idx, src_pos, dst_pos; + + Idx dst_bkref_idx = search_cur_bkref_entry (mctx, dst_idx); + Idx src_bkref_idx = search_cur_bkref_entry (mctx, src_idx); + for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) + { + Idx subexp_idx; + struct re_backref_cache_entry *ent; + ent = mctx->bkref_ents + limits->elems[lim_idx]; + subexp_idx = dfa->nodes[ent->node].opr.idx; + + dst_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], + subexp_idx, dst_node, dst_idx, + dst_bkref_idx); + src_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], + subexp_idx, src_node, src_idx, + src_bkref_idx); + + /* In case of: + <src> <dst> ( <subexp> ) + ( <subexp> ) <src> <dst> + ( <subexp1> <src> <subexp2> <dst> <subexp3> ) */ + if (src_pos == dst_pos) + continue; /* This is unrelated limitation. */ + else + return true; + } + return false; +} + +static int +check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, int boundaries, + Idx subexp_idx, Idx from_node, Idx bkref_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + const re_node_set *eclosures = dfa->eclosures + from_node; + Idx node_idx; + + /* Else, we are on the boundary: examine the nodes on the epsilon + closure. */ + for (node_idx = 0; node_idx < eclosures->nelem; ++node_idx) + { + Idx node = eclosures->elems[node_idx]; + switch (dfa->nodes[node].type) + { + case OP_BACK_REF: + if (bkref_idx != -1) + { + struct re_backref_cache_entry *ent = mctx->bkref_ents + bkref_idx; + do + { + Idx dst; + int cpos; + + if (ent->node != node) + continue; + + if (subexp_idx < BITSET_WORD_BITS + && !(ent->eps_reachable_subexps_map + & ((bitset_word_t) 1 << subexp_idx))) + continue; + + /* Recurse trying to reach the OP_OPEN_SUBEXP and + OP_CLOSE_SUBEXP cases below. But, if the + destination node is the same node as the source + node, don't recurse because it would cause an + infinite loop: a regex that exhibits this behavior + is ()\1*\1* */ + dst = dfa->edests[node].elems[0]; + if (dst == from_node) + { + if (boundaries & 1) + return -1; + else /* if (boundaries & 2) */ + return 0; + } + + cpos = + check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, + dst, bkref_idx); + if (cpos == -1 /* && (boundaries & 1) */) + return -1; + if (cpos == 0 && (boundaries & 2)) + return 0; + + if (subexp_idx < BITSET_WORD_BITS) + ent->eps_reachable_subexps_map + &= ~((bitset_word_t) 1 << subexp_idx); + } + while (ent++->more); + } + break; + + case OP_OPEN_SUBEXP: + if ((boundaries & 1) && subexp_idx == dfa->nodes[node].opr.idx) + return -1; + break; + + case OP_CLOSE_SUBEXP: + if ((boundaries & 2) && subexp_idx == dfa->nodes[node].opr.idx) + return 0; + break; + + default: + break; + } + } + + return (boundaries & 2) ? 1 : 0; +} + +static int +check_dst_limits_calc_pos (const re_match_context_t *mctx, Idx limit, + Idx subexp_idx, Idx from_node, Idx str_idx, + Idx bkref_idx) +{ + struct re_backref_cache_entry *lim = mctx->bkref_ents + limit; + int boundaries; + + /* If we are outside the range of the subexpression, return -1 or 1. */ + if (str_idx < lim->subexp_from) + return -1; + + if (lim->subexp_to < str_idx) + return 1; + + /* If we are within the subexpression, return 0. */ + boundaries = (str_idx == lim->subexp_from); + boundaries |= (str_idx == lim->subexp_to) << 1; + if (boundaries == 0) + return 0; + + /* Else, examine epsilon closure. */ + return check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, + from_node, bkref_idx); +} + +/* Check the limitations of sub expressions LIMITS, and remove the nodes + which are against limitations from DEST_NODES. */ + +static reg_errcode_t +check_subexp_limits (const re_dfa_t *dfa, re_node_set *dest_nodes, + const re_node_set *candidates, re_node_set *limits, + struct re_backref_cache_entry *bkref_ents, Idx str_idx) +{ + reg_errcode_t err; + Idx node_idx, lim_idx; + + for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) + { + Idx subexp_idx; + struct re_backref_cache_entry *ent; + ent = bkref_ents + limits->elems[lim_idx]; + + if (str_idx <= ent->subexp_from || ent->str_idx < str_idx) + continue; /* This is unrelated limitation. */ + + subexp_idx = dfa->nodes[ent->node].opr.idx; + if (ent->subexp_to == str_idx) + { + Idx ops_node = -1; + Idx cls_node = -1; + for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) + { + Idx node = dest_nodes->elems[node_idx]; + re_token_type_t type = dfa->nodes[node].type; + if (type == OP_OPEN_SUBEXP + && subexp_idx == dfa->nodes[node].opr.idx) + ops_node = node; + else if (type == OP_CLOSE_SUBEXP + && subexp_idx == dfa->nodes[node].opr.idx) + cls_node = node; + } + + /* Check the limitation of the open subexpression. */ + /* Note that (ent->subexp_to = str_idx != ent->subexp_from). */ + if (ops_node >= 0) + { + err = sub_epsilon_src_nodes (dfa, ops_node, dest_nodes, + candidates); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + + /* Check the limitation of the close subexpression. */ + if (cls_node >= 0) + for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) + { + Idx node = dest_nodes->elems[node_idx]; + if (!re_node_set_contains (dfa->inveclosures + node, + cls_node) + && !re_node_set_contains (dfa->eclosures + node, + cls_node)) + { + /* It is against this limitation. + Remove it form the current sifted state. */ + err = sub_epsilon_src_nodes (dfa, node, dest_nodes, + candidates); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + --node_idx; + } + } + } + else /* (ent->subexp_to != str_idx) */ + { + for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) + { + Idx node = dest_nodes->elems[node_idx]; + re_token_type_t type = dfa->nodes[node].type; + if (type == OP_CLOSE_SUBEXP || type == OP_OPEN_SUBEXP) + { + if (subexp_idx != dfa->nodes[node].opr.idx) + continue; + /* It is against this limitation. + Remove it form the current sifted state. */ + err = sub_epsilon_src_nodes (dfa, node, dest_nodes, + candidates); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + } + } + } + return REG_NOERROR; +} + +static reg_errcode_t +__attribute_warn_unused_result__ +sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx, + Idx str_idx, const re_node_set *candidates) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx node_idx, node; + re_sift_context_t local_sctx; + Idx first_idx = search_cur_bkref_entry (mctx, str_idx); + + if (first_idx == -1) + return REG_NOERROR; + + local_sctx.sifted_states = NULL; /* Mark that it hasn't been initialized. */ + + for (node_idx = 0; node_idx < candidates->nelem; ++node_idx) + { + Idx enabled_idx; + re_token_type_t type; + struct re_backref_cache_entry *entry; + node = candidates->elems[node_idx]; + type = dfa->nodes[node].type; + /* Avoid infinite loop for the REs like "()\1+". */ + if (node == sctx->last_node && str_idx == sctx->last_str_idx) + continue; + if (type != OP_BACK_REF) + continue; + + entry = mctx->bkref_ents + first_idx; + enabled_idx = first_idx; + do + { + Idx subexp_len; + Idx to_idx; + Idx dst_node; + bool ok; + re_dfastate_t *cur_state; + + if (entry->node != node) + continue; + subexp_len = entry->subexp_to - entry->subexp_from; + to_idx = str_idx + subexp_len; + dst_node = (subexp_len ? dfa->nexts[node] + : dfa->edests[node].elems[0]); + + if (to_idx > sctx->last_str_idx + || sctx->sifted_states[to_idx] == NULL + || !STATE_NODE_CONTAINS (sctx->sifted_states[to_idx], dst_node) + || check_dst_limits (mctx, &sctx->limits, node, + str_idx, dst_node, to_idx)) + continue; + + if (local_sctx.sifted_states == NULL) + { + local_sctx = *sctx; + err = re_node_set_init_copy (&local_sctx.limits, &sctx->limits); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + } + local_sctx.last_node = node; + local_sctx.last_str_idx = str_idx; + ok = re_node_set_insert (&local_sctx.limits, enabled_idx); + if (__glibc_unlikely (! ok)) + { + err = REG_ESPACE; + goto free_return; + } + cur_state = local_sctx.sifted_states[str_idx]; + err = sift_states_backward (mctx, &local_sctx); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + if (sctx->limited_states != NULL) + { + err = merge_state_array (dfa, sctx->limited_states, + local_sctx.sifted_states, + str_idx + 1); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + } + local_sctx.sifted_states[str_idx] = cur_state; + re_node_set_remove (&local_sctx.limits, enabled_idx); + + /* mctx->bkref_ents may have changed, reload the pointer. */ + entry = mctx->bkref_ents + enabled_idx; + } + while (enabled_idx++, entry++->more); + } + err = REG_NOERROR; + free_return: + if (local_sctx.sifted_states != NULL) + { + re_node_set_free (&local_sctx.limits); + } + + return err; +} + + +#ifdef RE_ENABLE_I18N +static int +sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx, + Idx node_idx, Idx str_idx, Idx max_str_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + int naccepted; + /* Check the node can accept "multi byte". */ + naccepted = check_node_accept_bytes (dfa, node_idx, &mctx->input, str_idx); + if (naccepted > 0 && str_idx + naccepted <= max_str_idx && + !STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + naccepted], + dfa->nexts[node_idx])) + /* The node can't accept the "multi byte", or the + destination was already thrown away, then the node + could't accept the current input "multi byte". */ + naccepted = 0; + /* Otherwise, it is sure that the node could accept + 'naccepted' bytes input. */ + return naccepted; +} +#endif /* RE_ENABLE_I18N */ + + +/* Functions for state transition. */ + +/* Return the next state to which the current state STATE will transit by + accepting the current input byte, and update STATE_LOG if necessary. + If STATE can accept a multibyte char/collating element/back reference + update the destination of STATE_LOG. */ + +static re_dfastate_t * +__attribute_warn_unused_result__ +transit_state (reg_errcode_t *err, re_match_context_t *mctx, + re_dfastate_t *state) +{ + re_dfastate_t **trtable; + unsigned char ch; + +#ifdef RE_ENABLE_I18N + /* If the current state can accept multibyte. */ + if (__glibc_unlikely (state->accept_mb)) + { + *err = transit_state_mb (mctx, state); + if (__glibc_unlikely (*err != REG_NOERROR)) + return NULL; + } +#endif /* RE_ENABLE_I18N */ + + /* Then decide the next state with the single byte. */ +#if 0 + if (0) + /* don't use transition table */ + return transit_state_sb (err, mctx, state); +#endif + + /* Use transition table */ + ch = re_string_fetch_byte (&mctx->input); + for (;;) + { + trtable = state->trtable; + if (__glibc_likely (trtable != NULL)) + return trtable[ch]; + + trtable = state->word_trtable; + if (__glibc_likely (trtable != NULL)) + { + unsigned int context; + context + = re_string_context_at (&mctx->input, + re_string_cur_idx (&mctx->input) - 1, + mctx->eflags); + if (IS_WORD_CONTEXT (context)) + return trtable[ch + SBC_MAX]; + else + return trtable[ch]; + } + + if (!build_trtable (mctx->dfa, state)) + { + *err = REG_ESPACE; + return NULL; + } + + /* Retry, we now have a transition table. */ + } +} + +/* Update the state_log if we need */ +static re_dfastate_t * +merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx, + re_dfastate_t *next_state) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx cur_idx = re_string_cur_idx (&mctx->input); + + if (cur_idx > mctx->state_log_top) + { + mctx->state_log[cur_idx] = next_state; + mctx->state_log_top = cur_idx; + } + else if (mctx->state_log[cur_idx] == 0) + { + mctx->state_log[cur_idx] = next_state; + } + else + { + re_dfastate_t *pstate; + unsigned int context; + re_node_set next_nodes, *log_nodes, *table_nodes = NULL; + /* If (state_log[cur_idx] != 0), it implies that cur_idx is + the destination of a multibyte char/collating element/ + back reference. Then the next state is the union set of + these destinations and the results of the transition table. */ + pstate = mctx->state_log[cur_idx]; + log_nodes = pstate->entrance_nodes; + if (next_state != NULL) + { + table_nodes = next_state->entrance_nodes; + *err = re_node_set_init_union (&next_nodes, table_nodes, + log_nodes); + if (__glibc_unlikely (*err != REG_NOERROR)) + return NULL; + } + else + next_nodes = *log_nodes; + /* Note: We already add the nodes of the initial state, + then we don't need to add them here. */ + + context = re_string_context_at (&mctx->input, + re_string_cur_idx (&mctx->input) - 1, + mctx->eflags); + next_state = mctx->state_log[cur_idx] + = re_acquire_state_context (err, dfa, &next_nodes, context); + /* We don't need to check errors here, since the return value of + this function is next_state and ERR is already set. */ + + if (table_nodes != NULL) + re_node_set_free (&next_nodes); + } + + if (__glibc_unlikely (dfa->nbackref) && next_state != NULL) + { + /* Check OP_OPEN_SUBEXP in the current state in case that we use them + later. We must check them here, since the back references in the + next state might use them. */ + *err = check_subexp_matching_top (mctx, &next_state->nodes, + cur_idx); + if (__glibc_unlikely (*err != REG_NOERROR)) + return NULL; + + /* If the next state has back references. */ + if (next_state->has_backref) + { + *err = transit_state_bkref (mctx, &next_state->nodes); + if (__glibc_unlikely (*err != REG_NOERROR)) + return NULL; + next_state = mctx->state_log[cur_idx]; + } + } + + return next_state; +} + +/* Skip bytes in the input that correspond to part of a + multi-byte match, then look in the log for a state + from which to restart matching. */ +static re_dfastate_t * +find_recover_state (reg_errcode_t *err, re_match_context_t *mctx) +{ + re_dfastate_t *cur_state; + do + { + Idx max = mctx->state_log_top; + Idx cur_str_idx = re_string_cur_idx (&mctx->input); + + do + { + if (++cur_str_idx > max) + return NULL; + re_string_skip_bytes (&mctx->input, 1); + } + while (mctx->state_log[cur_str_idx] == NULL); + + cur_state = merge_state_with_log (err, mctx, NULL); + } + while (*err == REG_NOERROR && cur_state == NULL); + return cur_state; +} + +/* Helper functions for transit_state. */ + +/* From the node set CUR_NODES, pick up the nodes whose types are + OP_OPEN_SUBEXP and which have corresponding back references in the regular + expression. And register them to use them later for evaluating the + corresponding back references. */ + +static reg_errcode_t +check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes, + Idx str_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx node_idx; + reg_errcode_t err; + + /* TODO: This isn't efficient. + Because there might be more than one nodes whose types are + OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all + nodes. + E.g. RE: (a){2} */ + for (node_idx = 0; node_idx < cur_nodes->nelem; ++node_idx) + { + Idx node = cur_nodes->elems[node_idx]; + if (dfa->nodes[node].type == OP_OPEN_SUBEXP + && dfa->nodes[node].opr.idx < BITSET_WORD_BITS + && (dfa->used_bkref_map + & ((bitset_word_t) 1 << dfa->nodes[node].opr.idx))) + { + err = match_ctx_add_subtop (mctx, node, str_idx); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + } + return REG_NOERROR; +} + +#if 0 +/* Return the next state to which the current state STATE will transit by + accepting the current input byte. */ + +static re_dfastate_t * +transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx, + re_dfastate_t *state) +{ + const re_dfa_t *const dfa = mctx->dfa; + re_node_set next_nodes; + re_dfastate_t *next_state; + Idx node_cnt, cur_str_idx = re_string_cur_idx (&mctx->input); + unsigned int context; + + *err = re_node_set_alloc (&next_nodes, state->nodes.nelem + 1); + if (__glibc_unlikely (*err != REG_NOERROR)) + return NULL; + for (node_cnt = 0; node_cnt < state->nodes.nelem; ++node_cnt) + { + Idx cur_node = state->nodes.elems[node_cnt]; + if (check_node_accept (mctx, dfa->nodes + cur_node, cur_str_idx)) + { + *err = re_node_set_merge (&next_nodes, + dfa->eclosures + dfa->nexts[cur_node]); + if (__glibc_unlikely (*err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return NULL; + } + } + } + context = re_string_context_at (&mctx->input, cur_str_idx, mctx->eflags); + next_state = re_acquire_state_context (err, dfa, &next_nodes, context); + /* We don't need to check errors here, since the return value of + this function is next_state and ERR is already set. */ + + re_node_set_free (&next_nodes); + re_string_skip_bytes (&mctx->input, 1); + return next_state; +} +#endif + +#ifdef RE_ENABLE_I18N +static reg_errcode_t +transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx i; + + for (i = 0; i < pstate->nodes.nelem; ++i) + { + re_node_set dest_nodes, *new_nodes; + Idx cur_node_idx = pstate->nodes.elems[i]; + int naccepted; + Idx dest_idx; + unsigned int context; + re_dfastate_t *dest_state; + + if (!dfa->nodes[cur_node_idx].accept_mb) + continue; + + if (dfa->nodes[cur_node_idx].constraint) + { + context = re_string_context_at (&mctx->input, + re_string_cur_idx (&mctx->input), + mctx->eflags); + if (NOT_SATISFY_NEXT_CONSTRAINT (dfa->nodes[cur_node_idx].constraint, + context)) + continue; + } + + /* How many bytes the node can accept? */ + naccepted = check_node_accept_bytes (dfa, cur_node_idx, &mctx->input, + re_string_cur_idx (&mctx->input)); + if (naccepted == 0) + continue; + + /* The node can accepts 'naccepted' bytes. */ + dest_idx = re_string_cur_idx (&mctx->input) + naccepted; + mctx->max_mb_elem_len = ((mctx->max_mb_elem_len < naccepted) ? naccepted + : mctx->max_mb_elem_len); + err = clean_state_log_if_needed (mctx, dest_idx); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; +#ifdef DEBUG + assert (dfa->nexts[cur_node_idx] != -1); +#endif + new_nodes = dfa->eclosures + dfa->nexts[cur_node_idx]; + + dest_state = mctx->state_log[dest_idx]; + if (dest_state == NULL) + dest_nodes = *new_nodes; + else + { + err = re_node_set_init_union (&dest_nodes, + dest_state->entrance_nodes, new_nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + context = re_string_context_at (&mctx->input, dest_idx - 1, + mctx->eflags); + mctx->state_log[dest_idx] + = re_acquire_state_context (&err, dfa, &dest_nodes, context); + if (dest_state != NULL) + re_node_set_free (&dest_nodes); + if (__glibc_unlikely (mctx->state_log[dest_idx] == NULL + && err != REG_NOERROR)) + return err; + } + return REG_NOERROR; +} +#endif /* RE_ENABLE_I18N */ + +static reg_errcode_t +transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx i; + Idx cur_str_idx = re_string_cur_idx (&mctx->input); + + for (i = 0; i < nodes->nelem; ++i) + { + Idx dest_str_idx, prev_nelem, bkc_idx; + Idx node_idx = nodes->elems[i]; + unsigned int context; + const re_token_t *node = dfa->nodes + node_idx; + re_node_set *new_dest_nodes; + + /* Check whether 'node' is a backreference or not. */ + if (node->type != OP_BACK_REF) + continue; + + if (node->constraint) + { + context = re_string_context_at (&mctx->input, cur_str_idx, + mctx->eflags); + if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) + continue; + } + + /* 'node' is a backreference. + Check the substring which the substring matched. */ + bkc_idx = mctx->nbkref_ents; + err = get_subexp (mctx, node_idx, cur_str_idx); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + + /* And add the epsilon closures (which is 'new_dest_nodes') of + the backreference to appropriate state_log. */ +#ifdef DEBUG + assert (dfa->nexts[node_idx] != -1); +#endif + for (; bkc_idx < mctx->nbkref_ents; ++bkc_idx) + { + Idx subexp_len; + re_dfastate_t *dest_state; + struct re_backref_cache_entry *bkref_ent; + bkref_ent = mctx->bkref_ents + bkc_idx; + if (bkref_ent->node != node_idx || bkref_ent->str_idx != cur_str_idx) + continue; + subexp_len = bkref_ent->subexp_to - bkref_ent->subexp_from; + new_dest_nodes = (subexp_len == 0 + ? dfa->eclosures + dfa->edests[node_idx].elems[0] + : dfa->eclosures + dfa->nexts[node_idx]); + dest_str_idx = (cur_str_idx + bkref_ent->subexp_to + - bkref_ent->subexp_from); + context = re_string_context_at (&mctx->input, dest_str_idx - 1, + mctx->eflags); + dest_state = mctx->state_log[dest_str_idx]; + prev_nelem = ((mctx->state_log[cur_str_idx] == NULL) ? 0 + : mctx->state_log[cur_str_idx]->nodes.nelem); + /* Add 'new_dest_node' to state_log. */ + if (dest_state == NULL) + { + mctx->state_log[dest_str_idx] + = re_acquire_state_context (&err, dfa, new_dest_nodes, + context); + if (__glibc_unlikely (mctx->state_log[dest_str_idx] == NULL + && err != REG_NOERROR)) + goto free_return; + } + else + { + re_node_set dest_nodes; + err = re_node_set_init_union (&dest_nodes, + dest_state->entrance_nodes, + new_dest_nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&dest_nodes); + goto free_return; + } + mctx->state_log[dest_str_idx] + = re_acquire_state_context (&err, dfa, &dest_nodes, context); + re_node_set_free (&dest_nodes); + if (__glibc_unlikely (mctx->state_log[dest_str_idx] == NULL + && err != REG_NOERROR)) + goto free_return; + } + /* We need to check recursively if the backreference can epsilon + transit. */ + if (subexp_len == 0 + && mctx->state_log[cur_str_idx]->nodes.nelem > prev_nelem) + { + err = check_subexp_matching_top (mctx, new_dest_nodes, + cur_str_idx); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + err = transit_state_bkref (mctx, new_dest_nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + goto free_return; + } + } + } + err = REG_NOERROR; + free_return: + return err; +} + +/* Enumerate all the candidates which the backreference BKREF_NODE can match + at BKREF_STR_IDX, and register them by match_ctx_add_entry(). + Note that we might collect inappropriate candidates here. + However, the cost of checking them strictly here is too high, then we + delay these checking for prune_impossible_nodes(). */ + +static reg_errcode_t +__attribute_warn_unused_result__ +get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx subexp_num, sub_top_idx; + const char *buf = (const char *) re_string_get_buffer (&mctx->input); + /* Return if we have already checked BKREF_NODE at BKREF_STR_IDX. */ + Idx cache_idx = search_cur_bkref_entry (mctx, bkref_str_idx); + if (cache_idx != -1) + { + const struct re_backref_cache_entry *entry + = mctx->bkref_ents + cache_idx; + do + if (entry->node == bkref_node) + return REG_NOERROR; /* We already checked it. */ + while (entry++->more); + } + + subexp_num = dfa->nodes[bkref_node].opr.idx; + + /* For each sub expression */ + for (sub_top_idx = 0; sub_top_idx < mctx->nsub_tops; ++sub_top_idx) + { + reg_errcode_t err; + re_sub_match_top_t *sub_top = mctx->sub_tops[sub_top_idx]; + re_sub_match_last_t *sub_last; + Idx sub_last_idx, sl_str, bkref_str_off; + + if (dfa->nodes[sub_top->node].opr.idx != subexp_num) + continue; /* It isn't related. */ + + sl_str = sub_top->str_idx; + bkref_str_off = bkref_str_idx; + /* At first, check the last node of sub expressions we already + evaluated. */ + for (sub_last_idx = 0; sub_last_idx < sub_top->nlasts; ++sub_last_idx) + { + regoff_t sl_str_diff; + sub_last = sub_top->lasts[sub_last_idx]; + sl_str_diff = sub_last->str_idx - sl_str; + /* The matched string by the sub expression match with the substring + at the back reference? */ + if (sl_str_diff > 0) + { + if (__glibc_unlikely (bkref_str_off + sl_str_diff + > mctx->input.valid_len)) + { + /* Not enough chars for a successful match. */ + if (bkref_str_off + sl_str_diff > mctx->input.len) + break; + + err = clean_state_log_if_needed (mctx, + bkref_str_off + + sl_str_diff); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + buf = (const char *) re_string_get_buffer (&mctx->input); + } + if (memcmp (buf + bkref_str_off, buf + sl_str, sl_str_diff) != 0) + /* We don't need to search this sub expression any more. */ + break; + } + bkref_str_off += sl_str_diff; + sl_str += sl_str_diff; + err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, + bkref_str_idx); + + /* Reload buf, since the preceding call might have reallocated + the buffer. */ + buf = (const char *) re_string_get_buffer (&mctx->input); + + if (err == REG_NOMATCH) + continue; + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + + if (sub_last_idx < sub_top->nlasts) + continue; + if (sub_last_idx > 0) + ++sl_str; + /* Then, search for the other last nodes of the sub expression. */ + for (; sl_str <= bkref_str_idx; ++sl_str) + { + Idx cls_node; + regoff_t sl_str_off; + const re_node_set *nodes; + sl_str_off = sl_str - sub_top->str_idx; + /* The matched string by the sub expression match with the substring + at the back reference? */ + if (sl_str_off > 0) + { + if (__glibc_unlikely (bkref_str_off >= mctx->input.valid_len)) + { + /* If we are at the end of the input, we cannot match. */ + if (bkref_str_off >= mctx->input.len) + break; + + err = extend_buffers (mctx, bkref_str_off + 1); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + + buf = (const char *) re_string_get_buffer (&mctx->input); + } + if (buf [bkref_str_off++] != buf[sl_str - 1]) + break; /* We don't need to search this sub expression + any more. */ + } + if (mctx->state_log[sl_str] == NULL) + continue; + /* Does this state have a ')' of the sub expression? */ + nodes = &mctx->state_log[sl_str]->nodes; + cls_node = find_subexp_node (dfa, nodes, subexp_num, + OP_CLOSE_SUBEXP); + if (cls_node == -1) + continue; /* No. */ + if (sub_top->path == NULL) + { + sub_top->path = calloc (sizeof (state_array_t), + sl_str - sub_top->str_idx + 1); + if (sub_top->path == NULL) + return REG_ESPACE; + } + /* Can the OP_OPEN_SUBEXP node arrive the OP_CLOSE_SUBEXP node + in the current context? */ + err = check_arrival (mctx, sub_top->path, sub_top->node, + sub_top->str_idx, cls_node, sl_str, + OP_CLOSE_SUBEXP); + if (err == REG_NOMATCH) + continue; + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + sub_last = match_ctx_add_sublast (sub_top, cls_node, sl_str); + if (__glibc_unlikely (sub_last == NULL)) + return REG_ESPACE; + err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, + bkref_str_idx); + buf = (const char *) re_string_get_buffer (&mctx->input); + if (err == REG_NOMATCH) + continue; + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + } + return REG_NOERROR; +} + +/* Helper functions for get_subexp(). */ + +/* Check SUB_LAST can arrive to the back reference BKREF_NODE at BKREF_STR. + If it can arrive, register the sub expression expressed with SUB_TOP + and SUB_LAST. */ + +static reg_errcode_t +get_subexp_sub (re_match_context_t *mctx, const re_sub_match_top_t *sub_top, + re_sub_match_last_t *sub_last, Idx bkref_node, Idx bkref_str) +{ + reg_errcode_t err; + Idx to_idx; + /* Can the subexpression arrive the back reference? */ + err = check_arrival (mctx, &sub_last->path, sub_last->node, + sub_last->str_idx, bkref_node, bkref_str, + OP_OPEN_SUBEXP); + if (err != REG_NOERROR) + return err; + err = match_ctx_add_entry (mctx, bkref_node, bkref_str, sub_top->str_idx, + sub_last->str_idx); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + to_idx = bkref_str + sub_last->str_idx - sub_top->str_idx; + return clean_state_log_if_needed (mctx, to_idx); +} + +/* Find the first node which is '(' or ')' and whose index is SUBEXP_IDX. + Search '(' if FL_OPEN, or search ')' otherwise. + TODO: This function isn't efficient... + Because there might be more than one nodes whose types are + OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all + nodes. + E.g. RE: (a){2} */ + +static Idx +find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, + Idx subexp_idx, int type) +{ + Idx cls_idx; + for (cls_idx = 0; cls_idx < nodes->nelem; ++cls_idx) + { + Idx cls_node = nodes->elems[cls_idx]; + const re_token_t *node = dfa->nodes + cls_node; + if (node->type == type + && node->opr.idx == subexp_idx) + return cls_node; + } + return -1; +} + +/* Check whether the node TOP_NODE at TOP_STR can arrive to the node + LAST_NODE at LAST_STR. We record the path onto PATH since it will be + heavily reused. + Return REG_NOERROR if it can arrive, or REG_NOMATCH otherwise. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +check_arrival (re_match_context_t *mctx, state_array_t *path, Idx top_node, + Idx top_str, Idx last_node, Idx last_str, int type) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err = REG_NOERROR; + Idx subexp_num, backup_cur_idx, str_idx, null_cnt; + re_dfastate_t *cur_state = NULL; + re_node_set *cur_nodes, next_nodes; + re_dfastate_t **backup_state_log; + unsigned int context; + + subexp_num = dfa->nodes[top_node].opr.idx; + /* Extend the buffer if we need. */ + if (__glibc_unlikely (path->alloc < last_str + mctx->max_mb_elem_len + 1)) + { + re_dfastate_t **new_array; + Idx old_alloc = path->alloc; + Idx incr_alloc = last_str + mctx->max_mb_elem_len + 1; + Idx new_alloc; + if (__glibc_unlikely (IDX_MAX - old_alloc < incr_alloc)) + return REG_ESPACE; + new_alloc = old_alloc + incr_alloc; + if (__glibc_unlikely (SIZE_MAX / sizeof (re_dfastate_t *) < new_alloc)) + return REG_ESPACE; + new_array = re_realloc (path->array, re_dfastate_t *, new_alloc); + if (__glibc_unlikely (new_array == NULL)) + return REG_ESPACE; + path->array = new_array; + path->alloc = new_alloc; + memset (new_array + old_alloc, '\0', + sizeof (re_dfastate_t *) * (path->alloc - old_alloc)); + } + + str_idx = path->next_idx ? path->next_idx : top_str; + + /* Temporary modify MCTX. */ + backup_state_log = mctx->state_log; + backup_cur_idx = mctx->input.cur_idx; + mctx->state_log = path->array; + mctx->input.cur_idx = str_idx; + + /* Setup initial node set. */ + context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); + if (str_idx == top_str) + { + err = re_node_set_init_1 (&next_nodes, top_node); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return err; + } + } + else + { + cur_state = mctx->state_log[str_idx]; + if (cur_state && cur_state->has_backref) + { + err = re_node_set_init_copy (&next_nodes, &cur_state->nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + else + re_node_set_init_empty (&next_nodes); + } + if (str_idx == top_str || (cur_state && cur_state->has_backref)) + { + if (next_nodes.nelem) + { + err = expand_bkref_cache (mctx, &next_nodes, str_idx, + subexp_num, type); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return err; + } + } + cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); + if (__glibc_unlikely (cur_state == NULL && err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return err; + } + mctx->state_log[str_idx] = cur_state; + } + + for (null_cnt = 0; str_idx < last_str && null_cnt <= mctx->max_mb_elem_len;) + { + re_node_set_empty (&next_nodes); + if (mctx->state_log[str_idx + 1]) + { + err = re_node_set_merge (&next_nodes, + &mctx->state_log[str_idx + 1]->nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return err; + } + } + if (cur_state) + { + err = check_arrival_add_next_nodes (mctx, str_idx, + &cur_state->non_eps_nodes, + &next_nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return err; + } + } + ++str_idx; + if (next_nodes.nelem) + { + err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return err; + } + err = expand_bkref_cache (mctx, &next_nodes, str_idx, + subexp_num, type); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return err; + } + } + context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); + cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); + if (__glibc_unlikely (cur_state == NULL && err != REG_NOERROR)) + { + re_node_set_free (&next_nodes); + return err; + } + mctx->state_log[str_idx] = cur_state; + null_cnt = cur_state == NULL ? null_cnt + 1 : 0; + } + re_node_set_free (&next_nodes); + cur_nodes = (mctx->state_log[last_str] == NULL ? NULL + : &mctx->state_log[last_str]->nodes); + path->next_idx = str_idx; + + /* Fix MCTX. */ + mctx->state_log = backup_state_log; + mctx->input.cur_idx = backup_cur_idx; + + /* Then check the current node set has the node LAST_NODE. */ + if (cur_nodes != NULL && re_node_set_contains (cur_nodes, last_node)) + return REG_NOERROR; + + return REG_NOMATCH; +} + +/* Helper functions for check_arrival. */ + +/* Calculate the destination nodes of CUR_NODES at STR_IDX, and append them + to NEXT_NODES. + TODO: This function is similar to the functions transit_state*(), + however this function has many additional works. + Can't we unify them? */ + +static reg_errcode_t +__attribute_warn_unused_result__ +check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx, + re_node_set *cur_nodes, re_node_set *next_nodes) +{ + const re_dfa_t *const dfa = mctx->dfa; + bool ok; + Idx cur_idx; +#ifdef RE_ENABLE_I18N + reg_errcode_t err = REG_NOERROR; +#endif + re_node_set union_set; + re_node_set_init_empty (&union_set); + for (cur_idx = 0; cur_idx < cur_nodes->nelem; ++cur_idx) + { + int naccepted = 0; + Idx cur_node = cur_nodes->elems[cur_idx]; +#ifdef DEBUG + re_token_type_t type = dfa->nodes[cur_node].type; + assert (!IS_EPSILON_NODE (type)); +#endif +#ifdef RE_ENABLE_I18N + /* If the node may accept "multi byte". */ + if (dfa->nodes[cur_node].accept_mb) + { + naccepted = check_node_accept_bytes (dfa, cur_node, &mctx->input, + str_idx); + if (naccepted > 1) + { + re_dfastate_t *dest_state; + Idx next_node = dfa->nexts[cur_node]; + Idx next_idx = str_idx + naccepted; + dest_state = mctx->state_log[next_idx]; + re_node_set_empty (&union_set); + if (dest_state) + { + err = re_node_set_merge (&union_set, &dest_state->nodes); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&union_set); + return err; + } + } + ok = re_node_set_insert (&union_set, next_node); + if (__glibc_unlikely (! ok)) + { + re_node_set_free (&union_set); + return REG_ESPACE; + } + mctx->state_log[next_idx] = re_acquire_state (&err, dfa, + &union_set); + if (__glibc_unlikely (mctx->state_log[next_idx] == NULL + && err != REG_NOERROR)) + { + re_node_set_free (&union_set); + return err; + } + } + } +#endif /* RE_ENABLE_I18N */ + if (naccepted + || check_node_accept (mctx, dfa->nodes + cur_node, str_idx)) + { + ok = re_node_set_insert (next_nodes, dfa->nexts[cur_node]); + if (__glibc_unlikely (! ok)) + { + re_node_set_free (&union_set); + return REG_ESPACE; + } + } + } + re_node_set_free (&union_set); + return REG_NOERROR; +} + +/* For all the nodes in CUR_NODES, add the epsilon closures of them to + CUR_NODES, however exclude the nodes which are: + - inside the sub expression whose number is EX_SUBEXP, if FL_OPEN. + - out of the sub expression whose number is EX_SUBEXP, if !FL_OPEN. +*/ + +static reg_errcode_t +check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes, + Idx ex_subexp, int type) +{ + reg_errcode_t err; + Idx idx, outside_node; + re_node_set new_nodes; +#ifdef DEBUG + assert (cur_nodes->nelem); +#endif + err = re_node_set_alloc (&new_nodes, cur_nodes->nelem); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + /* Create a new node set NEW_NODES with the nodes which are epsilon + closures of the node in CUR_NODES. */ + + for (idx = 0; idx < cur_nodes->nelem; ++idx) + { + Idx cur_node = cur_nodes->elems[idx]; + const re_node_set *eclosure = dfa->eclosures + cur_node; + outside_node = find_subexp_node (dfa, eclosure, ex_subexp, type); + if (outside_node == -1) + { + /* There are no problematic nodes, just merge them. */ + err = re_node_set_merge (&new_nodes, eclosure); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&new_nodes); + return err; + } + } + else + { + /* There are problematic nodes, re-calculate incrementally. */ + err = check_arrival_expand_ecl_sub (dfa, &new_nodes, cur_node, + ex_subexp, type); + if (__glibc_unlikely (err != REG_NOERROR)) + { + re_node_set_free (&new_nodes); + return err; + } + } + } + re_node_set_free (cur_nodes); + *cur_nodes = new_nodes; + return REG_NOERROR; +} + +/* Helper function for check_arrival_expand_ecl. + Check incrementally the epsilon closure of TARGET, and if it isn't + problematic append it to DST_NODES. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +check_arrival_expand_ecl_sub (const re_dfa_t *dfa, re_node_set *dst_nodes, + Idx target, Idx ex_subexp, int type) +{ + Idx cur_node; + for (cur_node = target; !re_node_set_contains (dst_nodes, cur_node);) + { + bool ok; + + if (dfa->nodes[cur_node].type == type + && dfa->nodes[cur_node].opr.idx == ex_subexp) + { + if (type == OP_CLOSE_SUBEXP) + { + ok = re_node_set_insert (dst_nodes, cur_node); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + } + break; + } + ok = re_node_set_insert (dst_nodes, cur_node); + if (__glibc_unlikely (! ok)) + return REG_ESPACE; + if (dfa->edests[cur_node].nelem == 0) + break; + if (dfa->edests[cur_node].nelem == 2) + { + reg_errcode_t err; + err = check_arrival_expand_ecl_sub (dfa, dst_nodes, + dfa->edests[cur_node].elems[1], + ex_subexp, type); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + cur_node = dfa->edests[cur_node].elems[0]; + } + return REG_NOERROR; +} + + +/* For all the back references in the current state, calculate the + destination of the back references by the appropriate entry + in MCTX->BKREF_ENTS. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +expand_bkref_cache (re_match_context_t *mctx, re_node_set *cur_nodes, + Idx cur_str, Idx subexp_num, int type) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx cache_idx_start = search_cur_bkref_entry (mctx, cur_str); + struct re_backref_cache_entry *ent; + + if (cache_idx_start == -1) + return REG_NOERROR; + + restart: + ent = mctx->bkref_ents + cache_idx_start; + do + { + Idx to_idx, next_node; + + /* Is this entry ENT is appropriate? */ + if (!re_node_set_contains (cur_nodes, ent->node)) + continue; /* No. */ + + to_idx = cur_str + ent->subexp_to - ent->subexp_from; + /* Calculate the destination of the back reference, and append it + to MCTX->STATE_LOG. */ + if (to_idx == cur_str) + { + /* The backreference did epsilon transit, we must re-check all the + node in the current state. */ + re_node_set new_dests; + reg_errcode_t err2, err3; + next_node = dfa->edests[ent->node].elems[0]; + if (re_node_set_contains (cur_nodes, next_node)) + continue; + err = re_node_set_init_1 (&new_dests, next_node); + err2 = check_arrival_expand_ecl (dfa, &new_dests, subexp_num, type); + err3 = re_node_set_merge (cur_nodes, &new_dests); + re_node_set_free (&new_dests); + if (__glibc_unlikely (err != REG_NOERROR || err2 != REG_NOERROR + || err3 != REG_NOERROR)) + { + err = (err != REG_NOERROR ? err + : (err2 != REG_NOERROR ? err2 : err3)); + return err; + } + /* TODO: It is still inefficient... */ + goto restart; + } + else + { + re_node_set union_set; + next_node = dfa->nexts[ent->node]; + if (mctx->state_log[to_idx]) + { + bool ok; + if (re_node_set_contains (&mctx->state_log[to_idx]->nodes, + next_node)) + continue; + err = re_node_set_init_copy (&union_set, + &mctx->state_log[to_idx]->nodes); + ok = re_node_set_insert (&union_set, next_node); + if (__glibc_unlikely (err != REG_NOERROR || ! ok)) + { + re_node_set_free (&union_set); + err = err != REG_NOERROR ? err : REG_ESPACE; + return err; + } + } + else + { + err = re_node_set_init_1 (&union_set, next_node); + if (__glibc_unlikely (err != REG_NOERROR)) + return err; + } + mctx->state_log[to_idx] = re_acquire_state (&err, dfa, &union_set); + re_node_set_free (&union_set); + if (__glibc_unlikely (mctx->state_log[to_idx] == NULL + && err != REG_NOERROR)) + return err; + } + } + while (ent++->more); + return REG_NOERROR; +} + +/* Build transition table for the state. + Return true if successful. */ + +static bool +build_trtable (const re_dfa_t *dfa, re_dfastate_t *state) +{ + reg_errcode_t err; + Idx i, j; + int ch; + bool need_word_trtable = false; + bitset_word_t elem, mask; + bool dests_node_malloced = false; + bool dest_states_malloced = false; + Idx ndests; /* Number of the destination states from 'state'. */ + re_dfastate_t **trtable; + re_dfastate_t **dest_states = NULL, **dest_states_word, **dest_states_nl; + re_node_set follows, *dests_node; + bitset_t *dests_ch; + bitset_t acceptable; + + struct dests_alloc + { + re_node_set dests_node[SBC_MAX]; + bitset_t dests_ch[SBC_MAX]; + } *dests_alloc; + + /* We build DFA states which corresponds to the destination nodes + from 'state'. 'dests_node[i]' represents the nodes which i-th + destination state contains, and 'dests_ch[i]' represents the + characters which i-th destination state accepts. */ + if (__libc_use_alloca (sizeof (struct dests_alloc))) + dests_alloc = (struct dests_alloc *) alloca (sizeof (struct dests_alloc)); + else + { + dests_alloc = re_malloc (struct dests_alloc, 1); + if (__glibc_unlikely (dests_alloc == NULL)) + return false; + dests_node_malloced = true; + } + dests_node = dests_alloc->dests_node; + dests_ch = dests_alloc->dests_ch; + + /* Initialize transition table. */ + state->word_trtable = state->trtable = NULL; + + /* At first, group all nodes belonging to 'state' into several + destinations. */ + ndests = group_nodes_into_DFAstates (dfa, state, dests_node, dests_ch); + if (__glibc_unlikely (ndests <= 0)) + { + if (dests_node_malloced) + re_free (dests_alloc); + /* Return false in case of an error, true otherwise. */ + if (ndests == 0) + { + state->trtable = (re_dfastate_t **) + calloc (sizeof (re_dfastate_t *), SBC_MAX); + if (__glibc_unlikely (state->trtable == NULL)) + return false; + return true; + } + return false; + } + + err = re_node_set_alloc (&follows, ndests + 1); + if (__glibc_unlikely (err != REG_NOERROR)) + goto out_free; + + /* Avoid arithmetic overflow in size calculation. */ + size_t ndests_max + = ((SIZE_MAX - (sizeof (re_node_set) + sizeof (bitset_t)) * SBC_MAX) + / (3 * sizeof (re_dfastate_t *))); + if (__glibc_unlikely (ndests_max < ndests)) + goto out_free; + + if (__libc_use_alloca ((sizeof (re_node_set) + sizeof (bitset_t)) * SBC_MAX + + ndests * 3 * sizeof (re_dfastate_t *))) + dest_states = (re_dfastate_t **) + alloca (ndests * 3 * sizeof (re_dfastate_t *)); + else + { + dest_states = re_malloc (re_dfastate_t *, ndests * 3); + if (__glibc_unlikely (dest_states == NULL)) + { +out_free: + if (dest_states_malloced) + re_free (dest_states); + re_node_set_free (&follows); + for (i = 0; i < ndests; ++i) + re_node_set_free (dests_node + i); + if (dests_node_malloced) + re_free (dests_alloc); + return false; + } + dest_states_malloced = true; + } + dest_states_word = dest_states + ndests; + dest_states_nl = dest_states_word + ndests; + bitset_empty (acceptable); + + /* Then build the states for all destinations. */ + for (i = 0; i < ndests; ++i) + { + Idx next_node; + re_node_set_empty (&follows); + /* Merge the follows of this destination states. */ + for (j = 0; j < dests_node[i].nelem; ++j) + { + next_node = dfa->nexts[dests_node[i].elems[j]]; + if (next_node != -1) + { + err = re_node_set_merge (&follows, dfa->eclosures + next_node); + if (__glibc_unlikely (err != REG_NOERROR)) + goto out_free; + } + } + dest_states[i] = re_acquire_state_context (&err, dfa, &follows, 0); + if (__glibc_unlikely (dest_states[i] == NULL && err != REG_NOERROR)) + goto out_free; + /* If the new state has context constraint, + build appropriate states for these contexts. */ + if (dest_states[i]->has_constraint) + { + dest_states_word[i] = re_acquire_state_context (&err, dfa, &follows, + CONTEXT_WORD); + if (__glibc_unlikely (dest_states_word[i] == NULL + && err != REG_NOERROR)) + goto out_free; + + if (dest_states[i] != dest_states_word[i] && dfa->mb_cur_max > 1) + need_word_trtable = true; + + dest_states_nl[i] = re_acquire_state_context (&err, dfa, &follows, + CONTEXT_NEWLINE); + if (__glibc_unlikely (dest_states_nl[i] == NULL && err != REG_NOERROR)) + goto out_free; + } + else + { + dest_states_word[i] = dest_states[i]; + dest_states_nl[i] = dest_states[i]; + } + bitset_merge (acceptable, dests_ch[i]); + } + + if (!__glibc_unlikely (need_word_trtable)) + { + /* We don't care about whether the following character is a word + character, or we are in a single-byte character set so we can + discern by looking at the character code: allocate a + 256-entry transition table. */ + trtable = state->trtable = + (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX); + if (__glibc_unlikely (trtable == NULL)) + goto out_free; + + /* For all characters ch...: */ + for (i = 0; i < BITSET_WORDS; ++i) + for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; + elem; + mask <<= 1, elem >>= 1, ++ch) + if (__glibc_unlikely (elem & 1)) + { + /* There must be exactly one destination which accepts + character ch. See group_nodes_into_DFAstates. */ + for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) + ; + + /* j-th destination accepts the word character ch. */ + if (dfa->word_char[i] & mask) + trtable[ch] = dest_states_word[j]; + else + trtable[ch] = dest_states[j]; + } + } + else + { + /* We care about whether the following character is a word + character, and we are in a multi-byte character set: discern + by looking at the character code: build two 256-entry + transition tables, one starting at trtable[0] and one + starting at trtable[SBC_MAX]. */ + trtable = state->word_trtable = + (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), 2 * SBC_MAX); + if (__glibc_unlikely (trtable == NULL)) + goto out_free; + + /* For all characters ch...: */ + for (i = 0; i < BITSET_WORDS; ++i) + for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; + elem; + mask <<= 1, elem >>= 1, ++ch) + if (__glibc_unlikely (elem & 1)) + { + /* There must be exactly one destination which accepts + character ch. See group_nodes_into_DFAstates. */ + for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) + ; + + /* j-th destination accepts the word character ch. */ + trtable[ch] = dest_states[j]; + trtable[ch + SBC_MAX] = dest_states_word[j]; + } + } + + /* new line */ + if (bitset_contain (acceptable, NEWLINE_CHAR)) + { + /* The current state accepts newline character. */ + for (j = 0; j < ndests; ++j) + if (bitset_contain (dests_ch[j], NEWLINE_CHAR)) + { + /* k-th destination accepts newline character. */ + trtable[NEWLINE_CHAR] = dest_states_nl[j]; + if (need_word_trtable) + trtable[NEWLINE_CHAR + SBC_MAX] = dest_states_nl[j]; + /* There must be only one destination which accepts + newline. See group_nodes_into_DFAstates. */ + break; + } + } + + if (dest_states_malloced) + re_free (dest_states); + + re_node_set_free (&follows); + for (i = 0; i < ndests; ++i) + re_node_set_free (dests_node + i); + + if (dests_node_malloced) + re_free (dests_alloc); + + return true; +} + +/* Group all nodes belonging to STATE into several destinations. + Then for all destinations, set the nodes belonging to the destination + to DESTS_NODE[i] and set the characters accepted by the destination + to DEST_CH[i]. This function return the number of destinations. */ + +static Idx +group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state, + re_node_set *dests_node, bitset_t *dests_ch) +{ + reg_errcode_t err; + bool ok; + Idx i, j, k; + Idx ndests; /* Number of the destinations from 'state'. */ + bitset_t accepts; /* Characters a node can accept. */ + const re_node_set *cur_nodes = &state->nodes; + bitset_empty (accepts); + ndests = 0; + + /* For all the nodes belonging to 'state', */ + for (i = 0; i < cur_nodes->nelem; ++i) + { + re_token_t *node = &dfa->nodes[cur_nodes->elems[i]]; + re_token_type_t type = node->type; + unsigned int constraint = node->constraint; + + /* Enumerate all single byte character this node can accept. */ + if (type == CHARACTER) + bitset_set (accepts, node->opr.c); + else if (type == SIMPLE_BRACKET) + { + bitset_merge (accepts, node->opr.sbcset); + } + else if (type == OP_PERIOD) + { +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + bitset_merge (accepts, dfa->sb_char); + else +#endif + bitset_set_all (accepts); + if (!(dfa->syntax & RE_DOT_NEWLINE)) + bitset_clear (accepts, '\n'); + if (dfa->syntax & RE_DOT_NOT_NULL) + bitset_clear (accepts, '\0'); + } +#ifdef RE_ENABLE_I18N + else if (type == OP_UTF8_PERIOD) + { + if (ASCII_CHARS % BITSET_WORD_BITS == 0) + memset (accepts, -1, ASCII_CHARS / CHAR_BIT); + else + bitset_merge (accepts, utf8_sb_map); + if (!(dfa->syntax & RE_DOT_NEWLINE)) + bitset_clear (accepts, '\n'); + if (dfa->syntax & RE_DOT_NOT_NULL) + bitset_clear (accepts, '\0'); + } +#endif + else + continue; + + /* Check the 'accepts' and sift the characters which are not + match it the context. */ + if (constraint) + { + if (constraint & NEXT_NEWLINE_CONSTRAINT) + { + bool accepts_newline = bitset_contain (accepts, NEWLINE_CHAR); + bitset_empty (accepts); + if (accepts_newline) + bitset_set (accepts, NEWLINE_CHAR); + else + continue; + } + if (constraint & NEXT_ENDBUF_CONSTRAINT) + { + bitset_empty (accepts); + continue; + } + + if (constraint & NEXT_WORD_CONSTRAINT) + { + bitset_word_t any_set = 0; + if (type == CHARACTER && !node->word_char) + { + bitset_empty (accepts); + continue; + } +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + for (j = 0; j < BITSET_WORDS; ++j) + any_set |= (accepts[j] &= (dfa->word_char[j] | ~dfa->sb_char[j])); + else +#endif + for (j = 0; j < BITSET_WORDS; ++j) + any_set |= (accepts[j] &= dfa->word_char[j]); + if (!any_set) + continue; + } + if (constraint & NEXT_NOTWORD_CONSTRAINT) + { + bitset_word_t any_set = 0; + if (type == CHARACTER && node->word_char) + { + bitset_empty (accepts); + continue; + } +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + for (j = 0; j < BITSET_WORDS; ++j) + any_set |= (accepts[j] &= ~(dfa->word_char[j] & dfa->sb_char[j])); + else +#endif + for (j = 0; j < BITSET_WORDS; ++j) + any_set |= (accepts[j] &= ~dfa->word_char[j]); + if (!any_set) + continue; + } + } + + /* Then divide 'accepts' into DFA states, or create a new + state. Above, we make sure that accepts is not empty. */ + for (j = 0; j < ndests; ++j) + { + bitset_t intersec; /* Intersection sets, see below. */ + bitset_t remains; + /* Flags, see below. */ + bitset_word_t has_intersec, not_subset, not_consumed; + + /* Optimization, skip if this state doesn't accept the character. */ + if (type == CHARACTER && !bitset_contain (dests_ch[j], node->opr.c)) + continue; + + /* Enumerate the intersection set of this state and 'accepts'. */ + has_intersec = 0; + for (k = 0; k < BITSET_WORDS; ++k) + has_intersec |= intersec[k] = accepts[k] & dests_ch[j][k]; + /* And skip if the intersection set is empty. */ + if (!has_intersec) + continue; + + /* Then check if this state is a subset of 'accepts'. */ + not_subset = not_consumed = 0; + for (k = 0; k < BITSET_WORDS; ++k) + { + not_subset |= remains[k] = ~accepts[k] & dests_ch[j][k]; + not_consumed |= accepts[k] = accepts[k] & ~dests_ch[j][k]; + } + + /* If this state isn't a subset of 'accepts', create a + new group state, which has the 'remains'. */ + if (not_subset) + { + bitset_copy (dests_ch[ndests], remains); + bitset_copy (dests_ch[j], intersec); + err = re_node_set_init_copy (dests_node + ndests, &dests_node[j]); + if (__glibc_unlikely (err != REG_NOERROR)) + goto error_return; + ++ndests; + } + + /* Put the position in the current group. */ + ok = re_node_set_insert (&dests_node[j], cur_nodes->elems[i]); + if (__glibc_unlikely (! ok)) + goto error_return; + + /* If all characters are consumed, go to next node. */ + if (!not_consumed) + break; + } + /* Some characters remain, create a new group. */ + if (j == ndests) + { + bitset_copy (dests_ch[ndests], accepts); + err = re_node_set_init_1 (dests_node + ndests, cur_nodes->elems[i]); + if (__glibc_unlikely (err != REG_NOERROR)) + goto error_return; + ++ndests; + bitset_empty (accepts); + } + } + return ndests; + error_return: + for (j = 0; j < ndests; ++j) + re_node_set_free (dests_node + j); + return -1; +} + +#ifdef RE_ENABLE_I18N +/* Check how many bytes the node 'dfa->nodes[node_idx]' accepts. + Return the number of the bytes the node accepts. + STR_IDX is the current index of the input string. + + This function handles the nodes which can accept one character, or + one collating element like '.', '[a-z]', opposite to the other nodes + can only accept one byte. */ + +# ifdef _LIBC +# include <locale/weight.h> +# endif + +static int +check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, + const re_string_t *input, Idx str_idx) +{ + const re_token_t *node = dfa->nodes + node_idx; + int char_len, elem_len; + Idx i; + + if (__glibc_unlikely (node->type == OP_UTF8_PERIOD)) + { + unsigned char c = re_string_byte_at (input, str_idx), d; + if (__glibc_likely (c < 0xc2)) + return 0; + + if (str_idx + 2 > input->len) + return 0; + + d = re_string_byte_at (input, str_idx + 1); + if (c < 0xe0) + return (d < 0x80 || d > 0xbf) ? 0 : 2; + else if (c < 0xf0) + { + char_len = 3; + if (c == 0xe0 && d < 0xa0) + return 0; + } + else if (c < 0xf8) + { + char_len = 4; + if (c == 0xf0 && d < 0x90) + return 0; + } + else if (c < 0xfc) + { + char_len = 5; + if (c == 0xf8 && d < 0x88) + return 0; + } + else if (c < 0xfe) + { + char_len = 6; + if (c == 0xfc && d < 0x84) + return 0; + } + else + return 0; + + if (str_idx + char_len > input->len) + return 0; + + for (i = 1; i < char_len; ++i) + { + d = re_string_byte_at (input, str_idx + i); + if (d < 0x80 || d > 0xbf) + return 0; + } + return char_len; + } + + char_len = re_string_char_size_at (input, str_idx); + if (node->type == OP_PERIOD) + { + if (char_len <= 1) + return 0; + /* FIXME: I don't think this if is needed, as both '\n' + and '\0' are char_len == 1. */ + /* '.' accepts any one character except the following two cases. */ + if ((!(dfa->syntax & RE_DOT_NEWLINE) && + re_string_byte_at (input, str_idx) == '\n') || + ((dfa->syntax & RE_DOT_NOT_NULL) && + re_string_byte_at (input, str_idx) == '\0')) + return 0; + return char_len; + } + + elem_len = re_string_elem_size_at (input, str_idx); + if ((elem_len <= 1 && char_len <= 1) || char_len == 0) + return 0; + + if (node->type == COMPLEX_BRACKET) + { + const re_charset_t *cset = node->opr.mbcset; +# ifdef _LIBC + const unsigned char *pin + = ((const unsigned char *) re_string_get_buffer (input) + str_idx); + Idx j; + uint32_t nrules; +# endif /* _LIBC */ + int match_len = 0; + wchar_t wc = ((cset->nranges || cset->nchar_classes || cset->nmbchars) + ? re_string_wchar_at (input, str_idx) : 0); + + /* match with multibyte character? */ + for (i = 0; i < cset->nmbchars; ++i) + if (wc == cset->mbchars[i]) + { + match_len = char_len; + goto check_node_accept_bytes_match; + } + /* match with character_class? */ + for (i = 0; i < cset->nchar_classes; ++i) + { + wctype_t wt = cset->char_classes[i]; + if (__iswctype (wc, wt)) + { + match_len = char_len; + goto check_node_accept_bytes_match; + } + } + +# ifdef _LIBC + nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + if (nrules != 0) + { + unsigned int in_collseq = 0; + const int32_t *table, *indirect; + const unsigned char *weights, *extra; + const char *collseqwc; + + /* match with collating_symbol? */ + if (cset->ncoll_syms) + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); + for (i = 0; i < cset->ncoll_syms; ++i) + { + const unsigned char *coll_sym = extra + cset->coll_syms[i]; + /* Compare the length of input collating element and + the length of current collating element. */ + if (*coll_sym != elem_len) + continue; + /* Compare each bytes. */ + for (j = 0; j < *coll_sym; j++) + if (pin[j] != coll_sym[1 + j]) + break; + if (j == *coll_sym) + { + /* Match if every bytes is equal. */ + match_len = j; + goto check_node_accept_bytes_match; + } + } + + if (cset->nranges) + { + if (elem_len <= char_len) + { + collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); + in_collseq = __collseq_table_lookup (collseqwc, wc); + } + else + in_collseq = find_collation_sequence_value (pin, elem_len); + } + /* match with range expression? */ + /* FIXME: Implement rational ranges here, too. */ + for (i = 0; i < cset->nranges; ++i) + if (cset->range_starts[i] <= in_collseq + && in_collseq <= cset->range_ends[i]) + { + match_len = elem_len; + goto check_node_accept_bytes_match; + } + + /* match with equivalence_class? */ + if (cset->nequiv_classes) + { + const unsigned char *cp = pin; + table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + weights = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); + indirect = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); + int32_t idx = findidx (table, indirect, extra, &cp, elem_len); + int32_t rule = idx >> 24; + idx &= 0xffffff; + if (idx > 0) + { + size_t weight_len = weights[idx]; + for (i = 0; i < cset->nequiv_classes; ++i) + { + int32_t equiv_class_idx = cset->equiv_classes[i]; + int32_t equiv_class_rule = equiv_class_idx >> 24; + equiv_class_idx &= 0xffffff; + if (weights[equiv_class_idx] == weight_len + && equiv_class_rule == rule + && memcmp (weights + idx + 1, + weights + equiv_class_idx + 1, + weight_len) == 0) + { + match_len = elem_len; + goto check_node_accept_bytes_match; + } + } + } + } + } + else +# endif /* _LIBC */ + { + /* match with range expression? */ + for (i = 0; i < cset->nranges; ++i) + { + if (cset->range_starts[i] <= wc && wc <= cset->range_ends[i]) + { + match_len = char_len; + goto check_node_accept_bytes_match; + } + } + } + check_node_accept_bytes_match: + if (!cset->non_match) + return match_len; + else + { + if (match_len > 0) + return 0; + else + return (elem_len > char_len) ? elem_len : char_len; + } + } + return 0; +} + +# ifdef _LIBC +static unsigned int +find_collation_sequence_value (const unsigned char *mbs, size_t mbs_len) +{ + uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + if (nrules == 0) + { + if (mbs_len == 1) + { + /* No valid character. Match it as a single byte character. */ + const unsigned char *collseq = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); + return collseq[mbs[0]]; + } + return UINT_MAX; + } + else + { + int32_t idx; + const unsigned char *extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); + int32_t extrasize = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB + 1) - extra; + + for (idx = 0; idx < extrasize;) + { + int mbs_cnt; + bool found = false; + int32_t elem_mbs_len; + /* Skip the name of collating element name. */ + idx = idx + extra[idx] + 1; + elem_mbs_len = extra[idx++]; + if (mbs_len == elem_mbs_len) + { + for (mbs_cnt = 0; mbs_cnt < elem_mbs_len; ++mbs_cnt) + if (extra[idx + mbs_cnt] != mbs[mbs_cnt]) + break; + if (mbs_cnt == elem_mbs_len) + /* Found the entry. */ + found = true; + } + /* Skip the byte sequence of the collating element. */ + idx += elem_mbs_len; + /* Adjust for the alignment. */ + idx = (idx + 3) & ~3; + /* Skip the collation sequence value. */ + idx += sizeof (uint32_t); + /* Skip the wide char sequence of the collating element. */ + idx = idx + sizeof (uint32_t) * (*(int32_t *) (extra + idx) + 1); + /* If we found the entry, return the sequence value. */ + if (found) + return *(uint32_t *) (extra + idx); + /* Skip the collation sequence value. */ + idx += sizeof (uint32_t); + } + return UINT_MAX; + } +} +# endif /* _LIBC */ +#endif /* RE_ENABLE_I18N */ + +/* Check whether the node accepts the byte which is IDX-th + byte of the INPUT. */ + +static bool +check_node_accept (const re_match_context_t *mctx, const re_token_t *node, + Idx idx) +{ + unsigned char ch; + ch = re_string_byte_at (&mctx->input, idx); + switch (node->type) + { + case CHARACTER: + if (node->opr.c != ch) + return false; + break; + + case SIMPLE_BRACKET: + if (!bitset_contain (node->opr.sbcset, ch)) + return false; + break; + +#ifdef RE_ENABLE_I18N + case OP_UTF8_PERIOD: + if (ch >= ASCII_CHARS) + return false; + FALLTHROUGH; +#endif + case OP_PERIOD: + if ((ch == '\n' && !(mctx->dfa->syntax & RE_DOT_NEWLINE)) + || (ch == '\0' && (mctx->dfa->syntax & RE_DOT_NOT_NULL))) + return false; + break; + + default: + return false; + } + + if (node->constraint) + { + /* The node has constraints. Check whether the current context + satisfies the constraints. */ + unsigned int context = re_string_context_at (&mctx->input, idx, + mctx->eflags); + if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) + return false; + } + + return true; +} + +/* Extend the buffers, if the buffers have run out. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +extend_buffers (re_match_context_t *mctx, int min_len) +{ + reg_errcode_t ret; + re_string_t *pstr = &mctx->input; + + /* Avoid overflow. */ + if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) / 2 + <= pstr->bufs_len)) + return REG_ESPACE; + + /* Double the lengths of the buffers, but allocate at least MIN_LEN. */ + ret = re_string_realloc_buffers (pstr, + MAX (min_len, + MIN (pstr->len, pstr->bufs_len * 2))); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + + if (mctx->state_log != NULL) + { + /* And double the length of state_log. */ + /* XXX We have no indication of the size of this buffer. If this + allocation fail we have no indication that the state_log array + does not have the right size. */ + re_dfastate_t **new_array = re_realloc (mctx->state_log, re_dfastate_t *, + pstr->bufs_len + 1); + if (__glibc_unlikely (new_array == NULL)) + return REG_ESPACE; + mctx->state_log = new_array; + } + + /* Then reconstruct the buffers. */ + if (pstr->icase) + { +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + { + ret = build_wcs_upper_buffer (pstr); + if (__glibc_unlikely (ret != REG_NOERROR)) + return ret; + } + else +#endif /* RE_ENABLE_I18N */ + build_upper_buffer (pstr); + } + else + { +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + build_wcs_buffer (pstr); + else +#endif /* RE_ENABLE_I18N */ + { + if (pstr->trans != NULL) + re_string_translate_buffer (pstr); + } + } + return REG_NOERROR; +} + + +/* Functions for matching context. */ + +/* Initialize MCTX. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +match_ctx_init (re_match_context_t *mctx, int eflags, Idx n) +{ + mctx->eflags = eflags; + mctx->match_last = -1; + if (n > 0) + { + /* Avoid overflow. */ + size_t max_object_size = + MAX (sizeof (struct re_backref_cache_entry), + sizeof (re_sub_match_top_t *)); + if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) < n)) + return REG_ESPACE; + + mctx->bkref_ents = re_malloc (struct re_backref_cache_entry, n); + mctx->sub_tops = re_malloc (re_sub_match_top_t *, n); + if (__glibc_unlikely (mctx->bkref_ents == NULL || mctx->sub_tops == NULL)) + return REG_ESPACE; + } + /* Already zero-ed by the caller. + else + mctx->bkref_ents = NULL; + mctx->nbkref_ents = 0; + mctx->nsub_tops = 0; */ + mctx->abkref_ents = n; + mctx->max_mb_elem_len = 1; + mctx->asub_tops = n; + return REG_NOERROR; +} + +/* Clean the entries which depend on the current input in MCTX. + This function must be invoked when the matcher changes the start index + of the input, or changes the input string. */ + +static void +match_ctx_clean (re_match_context_t *mctx) +{ + Idx st_idx; + for (st_idx = 0; st_idx < mctx->nsub_tops; ++st_idx) + { + Idx sl_idx; + re_sub_match_top_t *top = mctx->sub_tops[st_idx]; + for (sl_idx = 0; sl_idx < top->nlasts; ++sl_idx) + { + re_sub_match_last_t *last = top->lasts[sl_idx]; + re_free (last->path.array); + re_free (last); + } + re_free (top->lasts); + if (top->path) + { + re_free (top->path->array); + re_free (top->path); + } + re_free (top); + } + + mctx->nsub_tops = 0; + mctx->nbkref_ents = 0; +} + +/* Free all the memory associated with MCTX. */ + +static void +match_ctx_free (re_match_context_t *mctx) +{ + /* First, free all the memory associated with MCTX->SUB_TOPS. */ + match_ctx_clean (mctx); + re_free (mctx->sub_tops); + re_free (mctx->bkref_ents); +} + +/* Add a new backreference entry to MCTX. + Note that we assume that caller never call this function with duplicate + entry, and call with STR_IDX which isn't smaller than any existing entry. +*/ + +static reg_errcode_t +__attribute_warn_unused_result__ +match_ctx_add_entry (re_match_context_t *mctx, Idx node, Idx str_idx, Idx from, + Idx to) +{ + if (mctx->nbkref_ents >= mctx->abkref_ents) + { + struct re_backref_cache_entry* new_entry; + new_entry = re_realloc (mctx->bkref_ents, struct re_backref_cache_entry, + mctx->abkref_ents * 2); + if (__glibc_unlikely (new_entry == NULL)) + { + re_free (mctx->bkref_ents); + return REG_ESPACE; + } + mctx->bkref_ents = new_entry; + memset (mctx->bkref_ents + mctx->nbkref_ents, '\0', + sizeof (struct re_backref_cache_entry) * mctx->abkref_ents); + mctx->abkref_ents *= 2; + } + if (mctx->nbkref_ents > 0 + && mctx->bkref_ents[mctx->nbkref_ents - 1].str_idx == str_idx) + mctx->bkref_ents[mctx->nbkref_ents - 1].more = 1; + + mctx->bkref_ents[mctx->nbkref_ents].node = node; + mctx->bkref_ents[mctx->nbkref_ents].str_idx = str_idx; + mctx->bkref_ents[mctx->nbkref_ents].subexp_from = from; + mctx->bkref_ents[mctx->nbkref_ents].subexp_to = to; + + /* This is a cache that saves negative results of check_dst_limits_calc_pos. + If bit N is clear, means that this entry won't epsilon-transition to + an OP_OPEN_SUBEXP or OP_CLOSE_SUBEXP for the N+1-th subexpression. If + it is set, check_dst_limits_calc_pos_1 will recurse and try to find one + such node. + + A backreference does not epsilon-transition unless it is empty, so set + to all zeros if FROM != TO. */ + mctx->bkref_ents[mctx->nbkref_ents].eps_reachable_subexps_map + = (from == to ? -1 : 0); + + mctx->bkref_ents[mctx->nbkref_ents++].more = 0; + if (mctx->max_mb_elem_len < to - from) + mctx->max_mb_elem_len = to - from; + return REG_NOERROR; +} + +/* Return the first entry with the same str_idx, or -1 if none is + found. Note that MCTX->BKREF_ENTS is already sorted by MCTX->STR_IDX. */ + +static Idx +search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx) +{ + Idx left, right, mid, last; + last = right = mctx->nbkref_ents; + for (left = 0; left < right;) + { + mid = (left + right) / 2; + if (mctx->bkref_ents[mid].str_idx < str_idx) + left = mid + 1; + else + right = mid; + } + if (left < last && mctx->bkref_ents[left].str_idx == str_idx) + return left; + else + return -1; +} + +/* Register the node NODE, whose type is OP_OPEN_SUBEXP, and which matches + at STR_IDX. */ + +static reg_errcode_t +__attribute_warn_unused_result__ +match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx) +{ +#ifdef DEBUG + assert (mctx->sub_tops != NULL); + assert (mctx->asub_tops > 0); +#endif + if (__glibc_unlikely (mctx->nsub_tops == mctx->asub_tops)) + { + Idx new_asub_tops = mctx->asub_tops * 2; + re_sub_match_top_t **new_array = re_realloc (mctx->sub_tops, + re_sub_match_top_t *, + new_asub_tops); + if (__glibc_unlikely (new_array == NULL)) + return REG_ESPACE; + mctx->sub_tops = new_array; + mctx->asub_tops = new_asub_tops; + } + mctx->sub_tops[mctx->nsub_tops] = calloc (1, sizeof (re_sub_match_top_t)); + if (__glibc_unlikely (mctx->sub_tops[mctx->nsub_tops] == NULL)) + return REG_ESPACE; + mctx->sub_tops[mctx->nsub_tops]->node = node; + mctx->sub_tops[mctx->nsub_tops++]->str_idx = str_idx; + return REG_NOERROR; +} + +/* Register the node NODE, whose type is OP_CLOSE_SUBEXP, and which matches + at STR_IDX, whose corresponding OP_OPEN_SUBEXP is SUB_TOP. */ + +static re_sub_match_last_t * +match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx) +{ + re_sub_match_last_t *new_entry; + if (__glibc_unlikely (subtop->nlasts == subtop->alasts)) + { + Idx new_alasts = 2 * subtop->alasts + 1; + re_sub_match_last_t **new_array = re_realloc (subtop->lasts, + re_sub_match_last_t *, + new_alasts); + if (__glibc_unlikely (new_array == NULL)) + return NULL; + subtop->lasts = new_array; + subtop->alasts = new_alasts; + } + new_entry = calloc (1, sizeof (re_sub_match_last_t)); + if (__glibc_likely (new_entry != NULL)) + { + subtop->lasts[subtop->nlasts] = new_entry; + new_entry->node = node; + new_entry->str_idx = str_idx; + ++subtop->nlasts; + } + return new_entry; +} + +static void +sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, + re_dfastate_t **limited_sts, Idx last_node, Idx last_str_idx) +{ + sctx->sifted_states = sifted_sts; + sctx->limited_states = limited_sts; + sctx->last_node = last_node; + sctx->last_str_idx = last_str_idx; + re_node_set_init_empty (&sctx->limits); +} diff --git a/devspec.en_US/project/recutils/lib/rename.c b/devspec.en_US/project/recutils/lib/rename.c new file mode 100755 index 0000000..9d88e5c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/rename.c @@ -0,0 +1,475 @@ +/* Work around rename bugs in some systems. + + Copyright (C) 2001-2003, 2005-2006, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Volker Borchert, Eric Blake. */ + +#include <config.h> + +#include <stdio.h> + +#undef rename + +#if defined _WIN32 && ! defined __CYGWIN__ +/* The mingw rename has problems with trailing slashes; it also + requires use of native Windows calls to allow atomic renames over + existing files. */ + +# include <errno.h> +# include <stdbool.h> +# include <stdlib.h> +# include <sys/stat.h> +# include <unistd.h> + +# define WIN32_LEAN_AND_MEAN +# include <windows.h> + +# include "dirname.h" + +/* Rename the file SRC to DST. This replacement is necessary on + Windows, on which the system rename function will not replace + an existing DST. */ +int +rpl_rename (char const *src, char const *dst) +{ + int error; + size_t src_len = strlen (src); + size_t dst_len = strlen (dst); + char *src_base = last_component (src); + char *dst_base = last_component (dst); + bool src_slash; + bool dst_slash; + bool dst_exists; + struct stat src_st; + struct stat dst_st; + + /* Filter out dot as last component. */ + if (!src_len || !dst_len) + { + errno = ENOENT; + return -1; + } + if (*src_base == '.') + { + size_t len = base_len (src_base); + if (len == 1 || (len == 2 && src_base[1] == '.')) + { + errno = EINVAL; + return -1; + } + } + if (*dst_base == '.') + { + size_t len = base_len (dst_base); + if (len == 1 || (len == 2 && dst_base[1] == '.')) + { + errno = EINVAL; + return -1; + } + } + + /* Presence of a trailing slash requires directory semantics. If + the source does not exist, or if the destination cannot be turned + into a directory, give up now. Otherwise, strip trailing slashes + before calling rename. There are no symlinks on mingw, so stat + works instead of lstat. */ + src_slash = ISSLASH (src[src_len - 1]); + dst_slash = ISSLASH (dst[dst_len - 1]); + if (stat (src, &src_st)) + return -1; + if (stat (dst, &dst_st)) + { + if (errno != ENOENT || (!S_ISDIR (src_st.st_mode) && dst_slash)) + return -1; + dst_exists = false; + } + else + { + if (S_ISDIR (dst_st.st_mode) != S_ISDIR (src_st.st_mode)) + { + errno = S_ISDIR (dst_st.st_mode) ? EISDIR : ENOTDIR; + return -1; + } + dst_exists = true; + } + + /* There are no symlinks, so if a file existed with a trailing + slash, it must be a directory, and we don't have to worry about + stripping strip trailing slash. However, mingw refuses to + replace an existing empty directory, so we have to help it out. + And canonicalize_file_name is not yet ported to mingw; however, + for directories, getcwd works as a viable alternative. Ensure + that we can get back to where we started before using it; later + attempts to return are fatal. Note that we can end up losing a + directory if rename then fails, but it was empty, so not much + damage was done. */ + if (dst_exists && S_ISDIR (dst_st.st_mode)) + { + char *cwd = getcwd (NULL, 0); + char *src_temp; + char *dst_temp; + if (!cwd || chdir (cwd)) + return -1; + if (IS_ABSOLUTE_FILE_NAME (src)) + { + dst_temp = chdir (dst) ? NULL : getcwd (NULL, 0); + src_temp = chdir (src) ? NULL : getcwd (NULL, 0); + } + else + { + src_temp = chdir (src) ? NULL : getcwd (NULL, 0); + if (!IS_ABSOLUTE_FILE_NAME (dst) && chdir (cwd)) + abort (); + dst_temp = chdir (dst) ? NULL : getcwd (NULL, 0); + } + if (chdir (cwd)) + abort (); + free (cwd); + if (!src_temp || !dst_temp) + { + free (src_temp); + free (dst_temp); + errno = ENOMEM; + return -1; + } + src_len = strlen (src_temp); + if (strncmp (src_temp, dst_temp, src_len) == 0 + && (ISSLASH (dst_temp[src_len]) || dst_temp[src_len] == '\0')) + { + error = dst_temp[src_len]; + free (src_temp); + free (dst_temp); + if (error) + { + errno = EINVAL; + return -1; + } + return 0; + } + if (rmdir (dst)) + { + error = errno; + free (src_temp); + free (dst_temp); + errno = error; + return -1; + } + free (src_temp); + free (dst_temp); + } + + /* MoveFileEx works if SRC is a directory without any flags, but + fails with MOVEFILE_REPLACE_EXISTING, so try without flags first. + Thankfully, MoveFileEx handles hard links correctly, even though + rename() does not. */ + if (MoveFileEx (src, dst, 0)) + return 0; + + /* Retry with MOVEFILE_REPLACE_EXISTING if the move failed + due to the destination already existing. */ + error = GetLastError (); + if (error == ERROR_FILE_EXISTS || error == ERROR_ALREADY_EXISTS) + { + if (MoveFileEx (src, dst, MOVEFILE_REPLACE_EXISTING)) + return 0; + + error = GetLastError (); + } + + switch (error) + { + case ERROR_FILE_NOT_FOUND: + case ERROR_PATH_NOT_FOUND: + case ERROR_BAD_PATHNAME: + case ERROR_DIRECTORY: + errno = ENOENT; + break; + + case ERROR_ACCESS_DENIED: + case ERROR_SHARING_VIOLATION: + errno = EACCES; + break; + + case ERROR_OUTOFMEMORY: + errno = ENOMEM; + break; + + case ERROR_CURRENT_DIRECTORY: + errno = EBUSY; + break; + + case ERROR_NOT_SAME_DEVICE: + errno = EXDEV; + break; + + case ERROR_WRITE_PROTECT: + errno = EROFS; + break; + + case ERROR_WRITE_FAULT: + case ERROR_READ_FAULT: + case ERROR_GEN_FAILURE: + errno = EIO; + break; + + case ERROR_HANDLE_DISK_FULL: + case ERROR_DISK_FULL: + case ERROR_DISK_TOO_FRAGMENTED: + errno = ENOSPC; + break; + + case ERROR_FILE_EXISTS: + case ERROR_ALREADY_EXISTS: + errno = EEXIST; + break; + + case ERROR_BUFFER_OVERFLOW: + case ERROR_FILENAME_EXCED_RANGE: + errno = ENAMETOOLONG; + break; + + case ERROR_INVALID_NAME: + case ERROR_DELETE_PENDING: + errno = EPERM; /* ? */ + break; + +# ifndef ERROR_FILE_TOO_LARGE +/* This value is documented but not defined in all versions of windows.h. */ +# define ERROR_FILE_TOO_LARGE 223 +# endif + case ERROR_FILE_TOO_LARGE: + errno = EFBIG; + break; + + default: + errno = EINVAL; + break; + } + + return -1; +} + +#else /* ! W32 platform */ + +# include <errno.h> +# include <stdio.h> +# include <stdlib.h> +# include <string.h> +# include <sys/stat.h> +# include <unistd.h> + +# include "dirname.h" +# include "same-inode.h" + +/* Rename the file SRC to DST, fixing any trailing slash bugs. */ + +int +rpl_rename (char const *src, char const *dst) +{ + size_t src_len = strlen (src); + size_t dst_len = strlen (dst); + char *src_temp = (char *) src; + char *dst_temp = (char *) dst; + bool src_slash; + bool dst_slash; + bool dst_exists _GL_UNUSED; + int ret_val = -1; + int rename_errno = ENOTDIR; + struct stat src_st; + struct stat dst_st; + + if (!src_len || !dst_len) + return rename (src, dst); /* Let strace see the ENOENT failure. */ + +# if RENAME_DEST_EXISTS_BUG + { + char *src_base = last_component (src); + char *dst_base = last_component (dst); + if (*src_base == '.') + { + size_t len = base_len (src_base); + if (len == 1 || (len == 2 && src_base[1] == '.')) + { + errno = EINVAL; + return -1; + } + } + if (*dst_base == '.') + { + size_t len = base_len (dst_base); + if (len == 1 || (len == 2 && dst_base[1] == '.')) + { + errno = EINVAL; + return -1; + } + } + } +# endif /* RENAME_DEST_EXISTS_BUG */ + + src_slash = src[src_len - 1] == '/'; + dst_slash = dst[dst_len - 1] == '/'; + +# if !RENAME_HARD_LINK_BUG && !RENAME_DEST_EXISTS_BUG + /* If there are no trailing slashes, then trust the native + implementation unless we also suspect issues with hard link + detection or file/directory conflicts. */ + if (!src_slash && !dst_slash) + return rename (src, dst); +# endif /* !RENAME_HARD_LINK_BUG && !RENAME_DEST_EXISTS_BUG */ + + /* Presence of a trailing slash requires directory semantics. If + the source does not exist, or if the destination cannot be turned + into a directory, give up now. Otherwise, strip trailing slashes + before calling rename. */ + if (lstat (src, &src_st)) + return -1; + if (lstat (dst, &dst_st)) + { + if (errno != ENOENT || (!S_ISDIR (src_st.st_mode) && dst_slash)) + return -1; + dst_exists = false; + } + else + { + if (S_ISDIR (dst_st.st_mode) != S_ISDIR (src_st.st_mode)) + { + errno = S_ISDIR (dst_st.st_mode) ? EISDIR : ENOTDIR; + return -1; + } +# if RENAME_HARD_LINK_BUG + if (SAME_INODE (src_st, dst_st)) + return 0; +# endif /* RENAME_HARD_LINK_BUG */ + dst_exists = true; + } + +# if (RENAME_TRAILING_SLASH_SOURCE_BUG || RENAME_DEST_EXISTS_BUG \ + || RENAME_HARD_LINK_BUG) + /* If the only bug was that a trailing slash was allowed on a + non-existing file destination, as in Solaris 10, then we've + already covered that situation. But if there is any problem with + a trailing slash on an existing source or destination, as in + Solaris 9, or if a directory can overwrite a symlink, as on + Cygwin 1.5, or if directories cannot be created with trailing + slash, as on NetBSD 1.6, then we must strip the offending slash + and check that we have not encountered a symlink instead of a + directory. + + Stripping a trailing slash interferes with POSIX semantics, where + rename behavior on a symlink with a trailing slash operates on + the corresponding target directory. We prefer the GNU semantics + of rejecting any use of a symlink with trailing slash, but do not + enforce them, since Solaris 10 is able to obey POSIX semantics + and there might be clients expecting it, as counter-intuitive as + those semantics are. + + Technically, we could also follow the POSIX behavior by chasing a + readlink trail, but that is harder to implement. */ + if (src_slash) + { + src_temp = strdup (src); + if (!src_temp) + { + /* Rather than rely on strdup-posix, we set errno ourselves. */ + rename_errno = ENOMEM; + goto out; + } + strip_trailing_slashes (src_temp); + if (lstat (src_temp, &src_st)) + { + rename_errno = errno; + goto out; + } + if (S_ISLNK (src_st.st_mode)) + goto out; + } + if (dst_slash) + { + dst_temp = strdup (dst); + if (!dst_temp) + { + rename_errno = ENOMEM; + goto out; + } + strip_trailing_slashes (dst_temp); + if (lstat (dst_temp, &dst_st)) + { + if (errno != ENOENT) + { + rename_errno = errno; + goto out; + } + } + else if (S_ISLNK (dst_st.st_mode)) + goto out; + } +# endif /* RENAME_TRAILING_SLASH_SOURCE_BUG || RENAME_DEST_EXISTS_BUG + || RENAME_HARD_LINK_BUG */ + +# if RENAME_DEST_EXISTS_BUG + /* Cygwin 1.5 sometimes behaves oddly when moving a non-empty + directory on top of an empty one (the old directory name can + reappear if the new directory tree is removed). Work around this + by removing the target first, but don't remove the target if it + is a subdirectory of the source. Note that we can end up losing + a directory if rename then fails, but it was empty, so not much + damage was done. */ + if (dst_exists && S_ISDIR (dst_st.st_mode)) + { + if (src_st.st_dev != dst_st.st_dev) + { + rename_errno = EXDEV; + goto out; + } + if (src_temp != src) + free (src_temp); + src_temp = canonicalize_file_name (src); + if (dst_temp != dst) + free (dst_temp); + dst_temp = canonicalize_file_name (dst); + if (!src_temp || !dst_temp) + { + rename_errno = ENOMEM; + goto out; + } + src_len = strlen (src_temp); + if (strncmp (src_temp, dst_temp, src_len) == 0 + && dst_temp[src_len] == '/') + { + rename_errno = EINVAL; + goto out; + } + if (rmdir (dst)) + { + rename_errno = errno; + goto out; + } + } +# endif /* RENAME_DEST_EXISTS_BUG */ + + ret_val = rename (src_temp, dst_temp); + rename_errno = errno; + + out: _GL_UNUSED_LABEL; + + if (src_temp != src) + free (src_temp); + if (dst_temp != dst) + free (dst_temp); + errno = rename_errno; + return ret_val; +} +#endif /* ! W32 platform */ diff --git a/devspec.en_US/project/recutils/lib/rmdir.c b/devspec.en_US/project/recutils/lib/rmdir.c new file mode 100755 index 0000000..1d08822 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/rmdir.c @@ -0,0 +1,53 @@ +/* Work around rmdir bugs. + + Copyright (C) 1988, 1990, 1999, 2003-2006, 2009-2019 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <unistd.h> + +#include <errno.h> +#include <string.h> + +#include "dosname.h" + +#undef rmdir + +/* Remove directory DIR. + Return 0 if successful, -1 if not. */ + +int +rpl_rmdir (char const *dir) +{ + /* Work around cygwin 1.5.x bug where rmdir("dir/./") succeeds. */ + size_t len = strlen (dir); + int result; + while (len && ISSLASH (dir[len - 1])) + len--; + if (len && dir[len - 1] == '.' && (1 == len || ISSLASH (dir[len - 2]))) + { + errno = EINVAL; + return -1; + } + result = rmdir (dir); + /* Work around mingw bug, where rmdir("file/") fails with EINVAL + instead of ENOTDIR. We've already filtered out trailing ., the + only reason allowed by POSIX for EINVAL. */ + if (result == -1 && errno == EINVAL) + errno = ENOTDIR; + return result; +} diff --git a/devspec.en_US/project/recutils/lib/root-uid.h b/devspec.en_US/project/recutils/lib/root-uid.h new file mode 100755 index 0000000..eebfa94 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/root-uid.h @@ -0,0 +1,30 @@ +/* The user ID that always has appropriate privileges in the POSIX sense. + + Copyright 2012-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + + Written by Paul Eggert. */ + +#ifndef ROOT_UID_H_ +#define ROOT_UID_H_ + +/* The user ID that always has appropriate privileges in the POSIX sense. */ +#ifdef __TANDEM +# define ROOT_UID 65535 +#else +# define ROOT_UID 0 +#endif + +#endif diff --git a/devspec.en_US/project/recutils/lib/same-inode.h b/devspec.en_US/project/recutils/lib/same-inode.h new file mode 100755 index 0000000..06655b6 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/same-inode.h @@ -0,0 +1,47 @@ +/* Determine whether two stat buffers are known to refer to the same file. + + Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef SAME_INODE_H +# define SAME_INODE_H 1 + +# include <sys/types.h> + +# if defined __VMS && __CRTL_VER < 80200000 +# define SAME_INODE(a, b) \ + ((a).st_ino[0] == (b).st_ino[0] \ + && (a).st_ino[1] == (b).st_ino[1] \ + && (a).st_ino[2] == (b).st_ino[2] \ + && (a).st_dev == (b).st_dev) +# elif defined _WIN32 && ! defined __CYGWIN__ + /* Native Windows. */ +# if _GL_WINDOWS_STAT_INODES + /* stat() and fstat() set st_dev and st_ino to 0 if information about + the inode is not available. */ +# define SAME_INODE(a, b) \ + (!((a).st_ino == 0 && (a).st_dev == 0) \ + && (a).st_ino == (b).st_ino && (a).st_dev == (b).st_dev) +# else + /* stat() and fstat() set st_ino to 0 always. */ +# define SAME_INODE(a, b) 0 +# endif +# else +# define SAME_INODE(a, b) \ + ((a).st_ino == (b).st_ino \ + && (a).st_dev == (b).st_dev) +# endif + +#endif diff --git a/devspec.en_US/project/recutils/lib/sched.in.h b/devspec.en_US/project/recutils/lib/sched.in.h new file mode 100755 index 0000000..1fd64b9 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/sched.in.h @@ -0,0 +1,70 @@ +/* A GNU-like <sched.h>. + Copyright (C) 2008-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _@GUARD_PREFIX@_SCHED_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_SCHED_H@ +# if @HAVE_SYS_CDEFS_H@ +# include <sys/cdefs.h> +# endif +# @INCLUDE_NEXT@ @NEXT_SCHED_H@ +#endif + +#ifndef _@GUARD_PREFIX@_SCHED_H +#define _@GUARD_PREFIX@_SCHED_H + +/* Get pid_t. + This is needed on glibc 2.11 (see + glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=13198>) + and Mac OS X 10.5. */ +#include <sys/types.h> + +#ifdef __KLIBC__ +/* On OS/2 kLIBC, struct sched_param is in spawn.h. */ +# include <spawn.h> +#endif + +#ifdef __VMS +/* On OpenVMS, struct sched_param is in <pthread.h>. */ +# include <pthread.h> +#endif + +#if !@HAVE_STRUCT_SCHED_PARAM@ + +# if !GNULIB_defined_struct_sched_param +struct sched_param +{ + int sched_priority; +}; +# define GNULIB_defined_struct_sched_param 1 +# endif + +#endif + +#if !(defined SCHED_FIFO && defined SCHED_RR && defined SCHED_OTHER) +# define SCHED_FIFO 1 +# define SCHED_RR 2 +# define SCHED_OTHER 0 +#endif + +#endif /* _@GUARD_PREFIX@_SCHED_H */ +#endif /* _@GUARD_PREFIX@_SCHED_H */ diff --git a/devspec.en_US/project/recutils/lib/se-context.c b/devspec.en_US/project/recutils/lib/se-context.c new file mode 100755 index 0000000..2e5aa13 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/se-context.c @@ -0,0 +1,3 @@ +#include <config.h> +#define SE_CONTEXT_INLINE _GL_EXTERN_INLINE +#include <selinux/context.h> diff --git a/devspec.en_US/project/recutils/lib/se-context.in.h b/devspec.en_US/project/recutils/lib/se-context.in.h new file mode 100755 index 0000000..c3890a2 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/se-context.in.h @@ -0,0 +1,46 @@ +#ifndef SELINUX_CONTEXT_H +# define SELINUX_CONTEXT_H + +# include <errno.h> + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef SE_CONTEXT_INLINE +# define SE_CONTEXT_INLINE _GL_INLINE +#endif + +/* The definition of _GL_UNUSED_PARAMETER is copied here. */ + +typedef int context_t; +SE_CONTEXT_INLINE context_t context_new (char const *s _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return 0; } +SE_CONTEXT_INLINE char *context_str (context_t con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return (void *) 0; } +SE_CONTEXT_INLINE void context_free (context_t c _GL_UNUSED_PARAMETER) {} + +SE_CONTEXT_INLINE int context_user_set (context_t sc _GL_UNUSED_PARAMETER, + char const *s _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_CONTEXT_INLINE int context_role_set (context_t sc _GL_UNUSED_PARAMETER, + char const *s _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_CONTEXT_INLINE int context_range_set (context_t sc _GL_UNUSED_PARAMETER, + char const *s _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_CONTEXT_INLINE int context_type_set (context_t sc _GL_UNUSED_PARAMETER, + char const *s _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_CONTEXT_INLINE char *context_type_get (context_t sc _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return (void *) 0; } +SE_CONTEXT_INLINE char *context_range_get (context_t sc _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return (void *) 0; } +SE_CONTEXT_INLINE char *context_role_get (context_t sc _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return (void *) 0; } +SE_CONTEXT_INLINE char *context_user_get (context_t sc _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return (void *) 0; } + +_GL_INLINE_HEADER_END + +#endif diff --git a/devspec.en_US/project/recutils/lib/se-selinux.c b/devspec.en_US/project/recutils/lib/se-selinux.c new file mode 100755 index 0000000..ee4e57f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/se-selinux.c @@ -0,0 +1,3 @@ +#include <config.h> +#define SE_SELINUX_INLINE _GL_EXTERN_INLINE +#include <selinux/selinux.h> diff --git a/devspec.en_US/project/recutils/lib/se-selinux.in.h b/devspec.en_US/project/recutils/lib/se-selinux.in.h new file mode 100755 index 0000000..b68e2c7 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/se-selinux.in.h @@ -0,0 +1,119 @@ +/* Replacement <selinux/selinux.h> for platforms that lack it. + Copyright (C) 2008-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if HAVE_SELINUX_SELINUX_H + +#@INCLUDE_NEXT@ @NEXT_SELINUX_SELINUX_H@ + +#else +# if !defined _@GUARD_PREFIX@_SELINUX_SELINUX_H +# define _@GUARD_PREFIX@_SELINUX_SELINUX_H + +# include <sys/types.h> +# include <errno.h> + +# ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +# endif +_GL_INLINE_HEADER_BEGIN +# ifndef SE_SELINUX_INLINE +# define SE_SELINUX_INLINE _GL_INLINE +# endif + +/* The definition of _GL_UNUSED_PARAMETER is copied here. */ + +# if !GNULIB_defined_security_types + +typedef unsigned short security_class_t; +typedef char *security_context_t; +# define is_selinux_enabled() 0 + +SE_SELINUX_INLINE int +getcon (security_context_t *con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE void +freecon (security_context_t con _GL_UNUSED_PARAMETER) {} + +SE_SELINUX_INLINE int +getfscreatecon (security_context_t *con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +setfscreatecon (security_context_t con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +matchpathcon (char const *file _GL_UNUSED_PARAMETER, + mode_t m _GL_UNUSED_PARAMETER, + security_context_t *con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +getfilecon (char const *file _GL_UNUSED_PARAMETER, + security_context_t *con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +lgetfilecon (char const *file _GL_UNUSED_PARAMETER, + security_context_t *con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +fgetfilecon (int fd, security_context_t *con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +setfilecon (char const *file _GL_UNUSED_PARAMETER, + security_context_t con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +lsetfilecon (char const *file _GL_UNUSED_PARAMETER, + security_context_t con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +fsetfilecon (int fd _GL_UNUSED_PARAMETER, + security_context_t con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } + +SE_SELINUX_INLINE int +security_check_context (security_context_t con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +security_check_context_raw (security_context_t con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +setexeccon (security_context_t con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +security_compute_create (security_context_t scon _GL_UNUSED_PARAMETER, + security_context_t tcon _GL_UNUSED_PARAMETER, + security_class_t tclass _GL_UNUSED_PARAMETER, + security_context_t *newcon _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE security_class_t +string_to_security_class (char const *name) + { errno = ENOTSUP; return 0; } +SE_SELINUX_INLINE int +matchpathcon_init_prefix (char const *path _GL_UNUSED_PARAMETER, + char const *prefix _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } + +# define GNULIB_defined_security_types 1 +# endif + +_GL_INLINE_HEADER_END + +# endif +#endif diff --git a/devspec.en_US/project/recutils/lib/secure_getenv.c b/devspec.en_US/project/recutils/lib/secure_getenv.c new file mode 100755 index 0000000..fee7a20 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/secure_getenv.c @@ -0,0 +1,54 @@ +/* Look up an environment variable, returning NULL in insecure situations. + + Copyright 2013-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <stdlib.h> + +#if !HAVE___SECURE_GETENV +# if HAVE_ISSETUGID || (HAVE_GETUID && HAVE_GETEUID && HAVE_GETGID && HAVE_GETEGID) +# include <unistd.h> +# endif +#endif + +char * +secure_getenv (char const *name) +{ +#if HAVE___SECURE_GETENV /* glibc */ + return __secure_getenv (name); +#elif HAVE_ISSETUGID /* OS X, FreeBSD, NetBSD, OpenBSD */ + if (issetugid ()) + return NULL; + return getenv (name); +#elif HAVE_GETUID && HAVE_GETEUID && HAVE_GETGID && HAVE_GETEGID /* other Unix */ + if (geteuid () != getuid () || getegid () != getgid ()) + return NULL; + return getenv (name); +#elif defined _WIN32 && ! defined __CYGWIN__ /* native Windows */ + /* On native Windows, there is no such concept as setuid or setgid binaries. + - Programs launched as system services have high privileges, but they don't + inherit environment variables from a user. + - Programs launched by a user with "Run as Administrator" have high + privileges and use the environment variables, but the user has been asked + whether he agrees. + - Programs launched by a user without "Run as Administrator" cannot gain + high privileges, therefore there is no risk. */ + return getenv (name); +#else + return NULL; +#endif +} diff --git a/devspec.en_US/project/recutils/lib/selinux/context.h b/devspec.en_US/project/recutils/lib/selinux/context.h new file mode 100755 index 0000000..4b083e6 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/selinux/context.h @@ -0,0 +1,83 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +#ifndef SELINUX_CONTEXT_H +# define SELINUX_CONTEXT_H + +# include <errno.h> + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef SE_CONTEXT_INLINE +# define SE_CONTEXT_INLINE _GL_INLINE +#endif + +/* The definition of _GL_UNUSED_PARAMETER is copied here. */ +/* A C macro for declaring that specific function parameters are not used. + Copyright (C) 2008-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_UNUSED_PARAMETER is a marker that can be appended to function parameter + declarations for parameters that are not used. This helps to reduce + warnings, such as from GCC -Wunused-parameter. The syntax is as follows: + type param _GL_UNUSED_PARAMETER + or more generally + param_decl _GL_UNUSED_PARAMETER + For example: + int param _GL_UNUSED_PARAMETER + int *(*param)(void) _GL_UNUSED_PARAMETER + Other possible, but obscure and discouraged syntaxes: + int _GL_UNUSED_PARAMETER *(*param)(void) + _GL_UNUSED_PARAMETER int *(*param)(void) + */ +#ifndef _GL_UNUSED_PARAMETER +# if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_UNUSED_PARAMETER __attribute__ ((__unused__)) +# else +# define _GL_UNUSED_PARAMETER +# endif +#endif + +typedef int context_t; +SE_CONTEXT_INLINE context_t context_new (char const *s _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return 0; } +SE_CONTEXT_INLINE char *context_str (context_t con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return (void *) 0; } +SE_CONTEXT_INLINE void context_free (context_t c _GL_UNUSED_PARAMETER) {} + +SE_CONTEXT_INLINE int context_user_set (context_t sc _GL_UNUSED_PARAMETER, + char const *s _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_CONTEXT_INLINE int context_role_set (context_t sc _GL_UNUSED_PARAMETER, + char const *s _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_CONTEXT_INLINE int context_range_set (context_t sc _GL_UNUSED_PARAMETER, + char const *s _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_CONTEXT_INLINE int context_type_set (context_t sc _GL_UNUSED_PARAMETER, + char const *s _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_CONTEXT_INLINE char *context_type_get (context_t sc _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return (void *) 0; } +SE_CONTEXT_INLINE char *context_range_get (context_t sc _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return (void *) 0; } +SE_CONTEXT_INLINE char *context_role_get (context_t sc _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return (void *) 0; } +SE_CONTEXT_INLINE char *context_user_get (context_t sc _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return (void *) 0; } + +_GL_INLINE_HEADER_END + +#endif diff --git a/devspec.en_US/project/recutils/lib/selinux/selinux.h b/devspec.en_US/project/recutils/lib/selinux/selinux.h new file mode 100755 index 0000000..2091bb8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/selinux/selinux.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Replacement <selinux/selinux.h> for platforms that lack it. + Copyright (C) 2008-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if HAVE_SELINUX_SELINUX_H + +#include_next + +#else +# if !defined _GL_SELINUX_SELINUX_H +# define _GL_SELINUX_SELINUX_H + +# include <sys/types.h> +# include <errno.h> + +# ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +# endif +_GL_INLINE_HEADER_BEGIN +# ifndef SE_SELINUX_INLINE +# define SE_SELINUX_INLINE _GL_INLINE +# endif + +/* The definition of _GL_UNUSED_PARAMETER is copied here. */ +/* A C macro for declaring that specific function parameters are not used. + Copyright (C) 2008-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_UNUSED_PARAMETER is a marker that can be appended to function parameter + declarations for parameters that are not used. This helps to reduce + warnings, such as from GCC -Wunused-parameter. The syntax is as follows: + type param _GL_UNUSED_PARAMETER + or more generally + param_decl _GL_UNUSED_PARAMETER + For example: + int param _GL_UNUSED_PARAMETER + int *(*param)(void) _GL_UNUSED_PARAMETER + Other possible, but obscure and discouraged syntaxes: + int _GL_UNUSED_PARAMETER *(*param)(void) + _GL_UNUSED_PARAMETER int *(*param)(void) + */ +#ifndef _GL_UNUSED_PARAMETER +# if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_UNUSED_PARAMETER __attribute__ ((__unused__)) +# else +# define _GL_UNUSED_PARAMETER +# endif +#endif + +# if !GNULIB_defined_security_types + +typedef unsigned short security_class_t; +typedef char *security_context_t; +# define is_selinux_enabled() 0 + +SE_SELINUX_INLINE int +getcon (security_context_t *con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE void +freecon (security_context_t con _GL_UNUSED_PARAMETER) {} + +SE_SELINUX_INLINE int +getfscreatecon (security_context_t *con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +setfscreatecon (security_context_t con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +matchpathcon (char const *file _GL_UNUSED_PARAMETER, + mode_t m _GL_UNUSED_PARAMETER, + security_context_t *con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +getfilecon (char const *file _GL_UNUSED_PARAMETER, + security_context_t *con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +lgetfilecon (char const *file _GL_UNUSED_PARAMETER, + security_context_t *con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +fgetfilecon (int fd, security_context_t *con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +setfilecon (char const *file _GL_UNUSED_PARAMETER, + security_context_t con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +lsetfilecon (char const *file _GL_UNUSED_PARAMETER, + security_context_t con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +fsetfilecon (int fd _GL_UNUSED_PARAMETER, + security_context_t con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } + +SE_SELINUX_INLINE int +security_check_context (security_context_t con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +security_check_context_raw (security_context_t con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +setexeccon (security_context_t con _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE int +security_compute_create (security_context_t scon _GL_UNUSED_PARAMETER, + security_context_t tcon _GL_UNUSED_PARAMETER, + security_class_t tclass _GL_UNUSED_PARAMETER, + security_context_t *newcon _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } +SE_SELINUX_INLINE security_class_t +string_to_security_class (char const *name) + { errno = ENOTSUP; return 0; } +SE_SELINUX_INLINE int +matchpathcon_init_prefix (char const *path _GL_UNUSED_PARAMETER, + char const *prefix _GL_UNUSED_PARAMETER) + { errno = ENOTSUP; return -1; } + +# define GNULIB_defined_security_types 1 +# endif + +_GL_INLINE_HEADER_END + +# endif +#endif diff --git a/devspec.en_US/project/recutils/lib/set-acl.c b/devspec.en_US/project/recutils/lib/set-acl.c new file mode 100755 index 0000000..53a6cd7 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/set-acl.c @@ -0,0 +1,48 @@ +/* set-acl.c - set access control list equivalent to a mode + + Copyright (C) 2002-2003, 2005-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + + Written by Paul Eggert and Andreas Gruenbacher, and Bruno Haible. */ + +#include <config.h> + +#include "acl.h" + +#include <errno.h> + +#include "quote.h" +#include "error.h" +#include "gettext.h" +#define _(msgid) gettext (msgid) + + +/* Set the access control lists of a file. If DESC is a valid file + descriptor, use file descriptor operations where available, else use + filename based operations on NAME. If access control lists are not + available, fchmod the target file to MODE. Also sets the + non-permission bits of the destination file (S_ISUID, S_ISGID, S_ISVTX) + to those from MODE if any are set. + Return 0 if successful. On failure, output a diagnostic, set errno and + return -1. */ + +int +set_acl (char const *name, int desc, mode_t mode) +{ + int ret = qset_acl (name, desc, mode); + if (ret != 0) + error (0, errno, _("setting permissions for %s"), quote (name)); + return ret; +} diff --git a/devspec.en_US/project/recutils/lib/set-permissions.c b/devspec.en_US/project/recutils/lib/set-permissions.c new file mode 100755 index 0000000..38cd30a --- /dev/null +++ b/devspec.en_US/project/recutils/lib/set-permissions.c @@ -0,0 +1,847 @@ +/* Set permissions of a file. -*- coding: utf-8 -*- + + Copyright (C) 2002-2003, 2005-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + + Written by Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ + +#include <config.h> + +#include "acl.h" + +#include "acl-internal.h" + +#if USE_ACL +# if ! defined HAVE_ACL_FROM_MODE && defined HAVE_ACL_FROM_TEXT /* FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */ +# if HAVE_ACL_GET_FILE && !HAVE_ACL_TYPE_EXTENDED + +static acl_t +acl_from_mode (mode_t mode) +{ +# if HAVE_ACL_FREE_TEXT /* Tru64 */ + char acl_text[] = "u::---,g::---,o::---,"; +# else /* FreeBSD, IRIX, Cygwin >= 2.5 */ + char acl_text[] = "u::---,g::---,o::---"; +# endif + + if (mode & S_IRUSR) acl_text[ 3] = 'r'; + if (mode & S_IWUSR) acl_text[ 4] = 'w'; + if (mode & S_IXUSR) acl_text[ 5] = 'x'; + if (mode & S_IRGRP) acl_text[10] = 'r'; + if (mode & S_IWGRP) acl_text[11] = 'w'; + if (mode & S_IXGRP) acl_text[12] = 'x'; + if (mode & S_IROTH) acl_text[17] = 'r'; + if (mode & S_IWOTH) acl_text[18] = 'w'; + if (mode & S_IXOTH) acl_text[19] = 'x'; + + return acl_from_text (acl_text); +} +# endif +# endif + +# if HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */ +static int +set_acls_from_mode (const char *name, int desc, mode_t mode, bool *must_chmod) +{ +# ifdef ACE_GETACL + /* Solaris also has a different variant of ACLs, used in ZFS and NFSv4 + file systems (whereas the other ones are used in UFS file systems). */ + + /* The flags in the ace_t structure changed in a binary incompatible way + when ACL_NO_TRIVIAL etc. were introduced in <sys/acl.h> version 1.15. + How to distinguish the two conventions at runtime? + We fetch the existing ACL. In the old convention, usually three ACEs have + a_flags = ACE_OWNER / ACE_GROUP / ACE_OTHER, in the range 0x0100..0x0400. + In the new convention, these values are not used. */ + int convention; + + { + /* Initially, try to read the entries into a stack-allocated buffer. + Use malloc if it does not fit. */ + enum + { + alloc_init = 4000 / sizeof (ace_t), /* >= 3 */ + alloc_max = MIN (INT_MAX, SIZE_MAX / sizeof (ace_t)) + }; + ace_t buf[alloc_init]; + size_t alloc = alloc_init; + ace_t *entries = buf; + ace_t *malloced = NULL; + int count; + + for (;;) + { + count = (desc != -1 + ? facl (desc, ACE_GETACL, alloc, entries) + : acl (name, ACE_GETACL, alloc, entries)); + if (count < 0 && errno == ENOSPC) + { + /* Increase the size of the buffer. */ + free (malloced); + if (alloc > alloc_max / 2) + { + errno = ENOMEM; + return -1; + } + alloc = 2 * alloc; /* <= alloc_max */ + entries = malloced = (ace_t *) malloc (alloc * sizeof (ace_t)); + if (entries == NULL) + { + errno = ENOMEM; + return -1; + } + continue; + } + break; + } + + if (count <= 0) + convention = -1; + else + { + int i; + + convention = 0; + for (i = 0; i < count; i++) + if (entries[i].a_flags & (OLD_ACE_OWNER | OLD_ACE_GROUP | OLD_ACE_OTHER)) + { + convention = 1; + break; + } + } + free (malloced); + } + + if (convention >= 0) + { + ace_t entries[6]; + int count; + int ret; + + if (convention) + { + /* Running on Solaris 10. */ + entries[0].a_type = OLD_ALLOW; + entries[0].a_flags = OLD_ACE_OWNER; + entries[0].a_who = 0; /* irrelevant */ + entries[0].a_access_mask = (mode >> 6) & 7; + entries[1].a_type = OLD_ALLOW; + entries[1].a_flags = OLD_ACE_GROUP; + entries[1].a_who = 0; /* irrelevant */ + entries[1].a_access_mask = (mode >> 3) & 7; + entries[2].a_type = OLD_ALLOW; + entries[2].a_flags = OLD_ACE_OTHER; + entries[2].a_who = 0; + entries[2].a_access_mask = mode & 7; + count = 3; + } + else + { + /* Running on Solaris 10 (newer version) or Solaris 11. + The details here were found through "/bin/ls -lvd somefiles". */ + entries[0].a_type = NEW_ACE_ACCESS_DENIED_ACE_TYPE; + entries[0].a_flags = NEW_ACE_OWNER; + entries[0].a_who = 0; /* irrelevant */ + entries[0].a_access_mask = 0; + entries[1].a_type = NEW_ACE_ACCESS_ALLOWED_ACE_TYPE; + entries[1].a_flags = NEW_ACE_OWNER; + entries[1].a_who = 0; /* irrelevant */ + entries[1].a_access_mask = NEW_ACE_WRITE_NAMED_ATTRS + | NEW_ACE_WRITE_ATTRIBUTES + | NEW_ACE_WRITE_ACL + | NEW_ACE_WRITE_OWNER; + if (mode & 0400) + entries[1].a_access_mask |= NEW_ACE_READ_DATA; + else + entries[0].a_access_mask |= NEW_ACE_READ_DATA; + if (mode & 0200) + entries[1].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; + else + entries[0].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; + if (mode & 0100) + entries[1].a_access_mask |= NEW_ACE_EXECUTE; + else + entries[0].a_access_mask |= NEW_ACE_EXECUTE; + entries[2].a_type = NEW_ACE_ACCESS_DENIED_ACE_TYPE; + entries[2].a_flags = NEW_ACE_GROUP | NEW_ACE_IDENTIFIER_GROUP; + entries[2].a_who = 0; /* irrelevant */ + entries[2].a_access_mask = 0; + entries[3].a_type = NEW_ACE_ACCESS_ALLOWED_ACE_TYPE; + entries[3].a_flags = NEW_ACE_GROUP | NEW_ACE_IDENTIFIER_GROUP; + entries[3].a_who = 0; /* irrelevant */ + entries[3].a_access_mask = 0; + if (mode & 0040) + entries[3].a_access_mask |= NEW_ACE_READ_DATA; + else + entries[2].a_access_mask |= NEW_ACE_READ_DATA; + if (mode & 0020) + entries[3].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; + else + entries[2].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; + if (mode & 0010) + entries[3].a_access_mask |= NEW_ACE_EXECUTE; + else + entries[2].a_access_mask |= NEW_ACE_EXECUTE; + entries[4].a_type = NEW_ACE_ACCESS_DENIED_ACE_TYPE; + entries[4].a_flags = NEW_ACE_EVERYONE; + entries[4].a_who = 0; + entries[4].a_access_mask = NEW_ACE_WRITE_NAMED_ATTRS + | NEW_ACE_WRITE_ATTRIBUTES + | NEW_ACE_WRITE_ACL + | NEW_ACE_WRITE_OWNER; + entries[5].a_type = NEW_ACE_ACCESS_ALLOWED_ACE_TYPE; + entries[5].a_flags = NEW_ACE_EVERYONE; + entries[5].a_who = 0; + entries[5].a_access_mask = NEW_ACE_READ_NAMED_ATTRS + | NEW_ACE_READ_ATTRIBUTES + | NEW_ACE_READ_ACL + | NEW_ACE_SYNCHRONIZE; + if (mode & 0004) + entries[5].a_access_mask |= NEW_ACE_READ_DATA; + else + entries[4].a_access_mask |= NEW_ACE_READ_DATA; + if (mode & 0002) + entries[5].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; + else + entries[4].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; + if (mode & 0001) + entries[5].a_access_mask |= NEW_ACE_EXECUTE; + else + entries[4].a_access_mask |= NEW_ACE_EXECUTE; + count = 6; + } + if (desc != -1) + ret = facl (desc, ACE_SETACL, count, entries); + else + ret = acl (name, ACE_SETACL, count, entries); + if (ret < 0 && errno != EINVAL && errno != ENOTSUP) + { + if (errno == ENOSYS) + { + *must_chmod = true; + return 0; + } + return -1; + } + if (ret == 0) + return 0; + } +# endif + + { + aclent_t entries[3]; + int ret; + + entries[0].a_type = USER_OBJ; + entries[0].a_id = 0; /* irrelevant */ + entries[0].a_perm = (mode >> 6) & 7; + entries[1].a_type = GROUP_OBJ; + entries[1].a_id = 0; /* irrelevant */ + entries[1].a_perm = (mode >> 3) & 7; + entries[2].a_type = OTHER_OBJ; + entries[2].a_id = 0; + entries[2].a_perm = mode & 7; + + if (desc != -1) + ret = facl (desc, SETACL, + sizeof (entries) / sizeof (aclent_t), entries); + else + ret = acl (name, SETACL, + sizeof (entries) / sizeof (aclent_t), entries); + if (ret < 0) + { + if (errno == ENOSYS || errno == EOPNOTSUPP) + { + *must_chmod = true; + return 0; + } + return -1; + } + return 0; + } +} + +# elif HAVE_GETACL /* HP-UX */ +static int +context_acl_from_mode (struct permission_context *ctx, const char *name, int desc) +{ + struct stat statbuf; + int ret; + + if (desc != -1) + ret = fstat (desc, &statbuf); + else + ret = stat (name, &statbuf); + if (ret < 0) + return -1; + + ctx->entries[0].uid = statbuf.st_uid; + ctx->entries[0].gid = ACL_NSGROUP; + ctx->entries[0].mode = (ctx->mode >> 6) & 7; + ctx->entries[1].uid = ACL_NSUSER; + ctx->entries[1].gid = statbuf.st_gid; + ctx->entries[1].mode = (ctx->mode >> 3) & 7; + ctx->entries[2].uid = ACL_NSUSER; + ctx->entries[2].gid = ACL_NSGROUP; + ctx->entries[2].mode = ctx->mode & 7; + ctx->count = 3; + return 0; +} + +# if HAVE_ACLV_H /* HP-UX >= 11.11 */ +static int +context_aclv_from_mode (struct permission_context *ctx) +{ + int ret; + + ctx->aclv_entries[0].a_type = USER_OBJ; + ctx->aclv_entries[0].a_id = 0; /* irrelevant */ + ctx->aclv_entries[0].a_perm = (ctx->mode >> 6) & 7; + ctx->aclv_entries[1].a_type = GROUP_OBJ; + ctx->aclv_entries[1].a_id = 0; /* irrelevant */ + ctx->aclv_entries[1].a_perm = (ctx->mode >> 3) & 7; + ctx->aclv_entries[2].a_type = CLASS_OBJ; + ctx->aclv_entries[2].a_id = 0; + ctx->aclv_entries[2].a_perm = (ctx->mode >> 3) & 7; + ctx->aclv_entries[3].a_type = OTHER_OBJ; + ctx->aclv_entries[3].a_id = 0; + ctx->aclv_entries[3].a_perm = ctx->mode & 7; + ctx->aclv_count = 4; + + ret = aclsort (ctx->aclv_count, 1, ctx->aclv_entries); + if (ret > 0) + abort (); + return ret; +} +# endif + +# elif HAVE_ACLX_GET && defined ACL_AIX_WIP /* AIX */ +static int +set_acls_from_mode (const char *name, int desc, mode_t mode, bool *must_chmod) +{ + acl_type_list_t types; + size_t types_size = sizeof (types); + acl_type_t type; + + if (aclx_gettypes (name, &types, &types_size) < 0 + || types.num_entries == 0) + { + *must_chmod = true; + return 0; + } + + /* XXX Do we need to clear all types of ACLs for the given file, or is it + sufficient to clear the first one? */ + type = types.entries[0]; + if (type.u64 == ACL_AIXC) + { + union { struct acl a; char room[128]; } u; + int ret; + + u.a.acl_len = (char *) &u.a.acl_ext[0] - (char *) &u.a; /* no entries */ + u.a.acl_mode = mode & ~(S_IXACL | 0777); + u.a.u_access = (mode >> 6) & 7; + u.a.g_access = (mode >> 3) & 7; + u.a.o_access = mode & 7; + + if (desc != -1) + ret = aclx_fput (desc, SET_ACL | SET_MODE_S_BITS, + type, &u.a, u.a.acl_len, mode); + else + ret = aclx_put (name, SET_ACL | SET_MODE_S_BITS, + type, &u.a, u.a.acl_len, mode); + if (!(ret < 0 && errno == ENOSYS)) + return ret; + } + else if (type.u64 == ACL_NFS4) + { + union { nfs4_acl_int_t a; char room[128]; } u; + nfs4_ace_int_t *ace; + int ret; + + u.a.aclVersion = NFS4_ACL_INT_STRUCT_VERSION; + u.a.aclEntryN = 0; + ace = &u.a.aclEntry[0]; + { + ace->flags = ACE4_ID_SPECIAL; + ace->aceWho.special_whoid = ACE4_WHO_OWNER; + ace->aceType = ACE4_ACCESS_ALLOWED_ACE_TYPE; + ace->aceFlags = 0; + ace->aceMask = + (mode & 0400 ? ACE4_READ_DATA | ACE4_LIST_DIRECTORY : 0) + | (mode & 0200 + ? ACE4_WRITE_DATA | ACE4_ADD_FILE | ACE4_APPEND_DATA + | ACE4_ADD_SUBDIRECTORY + : 0) + | (mode & 0100 ? ACE4_EXECUTE : 0); + ace->aceWhoString[0] = '\0'; + ace->entryLen = (char *) &ace->aceWhoString[4] - (char *) ace; + ace = (nfs4_ace_int_t *) (char *) &ace->aceWhoString[4]; + u.a.aclEntryN++; + } + { + ace->flags = ACE4_ID_SPECIAL; + ace->aceWho.special_whoid = ACE4_WHO_GROUP; + ace->aceType = ACE4_ACCESS_ALLOWED_ACE_TYPE; + ace->aceFlags = 0; + ace->aceMask = + (mode & 0040 ? ACE4_READ_DATA | ACE4_LIST_DIRECTORY : 0) + | (mode & 0020 + ? ACE4_WRITE_DATA | ACE4_ADD_FILE | ACE4_APPEND_DATA + | ACE4_ADD_SUBDIRECTORY + : 0) + | (mode & 0010 ? ACE4_EXECUTE : 0); + ace->aceWhoString[0] = '\0'; + ace->entryLen = (char *) &ace->aceWhoString[4] - (char *) ace; + ace = (nfs4_ace_int_t *) (char *) &ace->aceWhoString[4]; + u.a.aclEntryN++; + } + { + ace->flags = ACE4_ID_SPECIAL; + ace->aceWho.special_whoid = ACE4_WHO_EVERYONE; + ace->aceType = ACE4_ACCESS_ALLOWED_ACE_TYPE; + ace->aceFlags = 0; + ace->aceMask = + (mode & 0004 ? ACE4_READ_DATA | ACE4_LIST_DIRECTORY : 0) + | (mode & 0002 + ? ACE4_WRITE_DATA | ACE4_ADD_FILE | ACE4_APPEND_DATA + | ACE4_ADD_SUBDIRECTORY + : 0) + | (mode & 0001 ? ACE4_EXECUTE : 0); + ace->aceWhoString[0] = '\0'; + ace->entryLen = (char *) &ace->aceWhoString[4] - (char *) ace; + ace = (nfs4_ace_int_t *) (char *) &ace->aceWhoString[4]; + u.a.aclEntryN++; + } + u.a.aclLength = (char *) ace - (char *) &u.a; + + if (desc != -1) + ret = aclx_fput (desc, SET_ACL | SET_MODE_S_BITS, + type, &u.a, u.a.aclLength, mode); + else + ret = aclx_put (name, SET_ACL | SET_MODE_S_BITS, + type, &u.a, u.a.aclLength, mode); + if (!(ret < 0 && errno == ENOSYS)) + return ret; + } + + *must_chmod = true; + return 0; +} + +# elif HAVE_STATACL /* older AIX */ +static int +context_acl_from_mode (struct permission_context *ctx) +{ + ctx->u.a.acl_len = (char *) &ctx->u.a.acl_ext[0] - (char *) &ctx->u.a; /* no entries */ + ctx->u.a.acl_mode = ctx->mode & ~(S_IXACL | 0777); + ctx->u.a.u_access = (ctx->mode >> 6) & 7; + ctx->u.a.g_access = (ctx->mode >> 3) & 7; + ctx->u.a.o_access = ctx->mode & 7; + ctx->have_u = true; + return 0; +} + +# elif HAVE_ACLSORT /* NonStop Kernel */ +static int +context_acl_from_mode (struct permission_context *ctx) +{ + int ret; + + ctx->entries[0].a_type = USER_OBJ; + ctx->entries[0].a_id = 0; /* irrelevant */ + ctx->entries[0].a_perm = (ctx->mode >> 6) & 7; + ctx->entries[1].a_type = GROUP_OBJ; + ctx->entries[1].a_id = 0; /* irrelevant */ + ctx->entries[1].a_perm = (ctx->mode >> 3) & 7; + ctx->entries[2].a_type = CLASS_OBJ; + ctx->entries[2].a_id = 0; + ctx->entries[2].a_perm = (ctx->mode >> 3) & 7; + ctx->entries[3].a_type = OTHER_OBJ; + ctx->entries[3].a_id = 0; + ctx->entries[3].a_perm = ctx->mode & 7; + ctx->count = 4; + + ret = aclsort (ctx->count, 1, entries); + if (ret > 0) + abort (); + return ret; +} +# endif + +static int +set_acls (struct permission_context *ctx, const char *name, int desc, + int from_mode, bool *must_chmod, bool *acls_set) +{ + int ret = 0; + +# if HAVE_ACL_GET_FILE + /* POSIX 1003.1e (draft 17 -- abandoned) specific version. */ + /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ +# if !HAVE_ACL_TYPE_EXTENDED + /* Linux, FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */ + +# ifndef HAVE_ACL_FROM_TEXT +# error Must have acl_from_text (see POSIX 1003.1e draft 17). +# endif +# ifndef HAVE_ACL_DELETE_DEF_FILE +# error Must have acl_delete_def_file (see POSIX 1003.1e draft 17). +# endif + + if (! ctx->acls_not_supported) + { + if (ret == 0 && from_mode) + { + if (ctx->acl) + acl_free (ctx->acl); + ctx->acl = acl_from_mode (ctx->mode); + if (ctx->acl == NULL) + ret = -1; + } + + if (ret == 0 && ctx->acl) + { + if (HAVE_ACL_SET_FD && desc != -1) + ret = acl_set_fd (desc, ctx->acl); + else + ret = acl_set_file (name, ACL_TYPE_ACCESS, ctx->acl); + if (ret != 0) + { + if (! acl_errno_valid (errno)) + { + ctx->acls_not_supported = true; + if (from_mode || acl_access_nontrivial (ctx->acl) == 0) + ret = 0; + } + } + else + { + *acls_set = true; + if (S_ISDIR(ctx->mode)) + { + if (! from_mode && ctx->default_acl && + acl_default_nontrivial (ctx->default_acl)) + ret = acl_set_file (name, ACL_TYPE_DEFAULT, + ctx->default_acl); + else + ret = acl_delete_def_file (name); + } + } + } + } + +# if HAVE_ACL_TYPE_NFS4 /* FreeBSD */ + + /* File systems either support POSIX ACLs (for example, ufs) or NFS4 ACLs + (for example, zfs). */ + + /* TODO: Implement setting ACLs once get_permissions() reads them. */ + +# endif + +# else /* HAVE_ACL_TYPE_EXTENDED */ + /* Mac OS X */ + + /* On Mac OS X, acl_get_file (name, ACL_TYPE_ACCESS) + and acl_get_file (name, ACL_TYPE_DEFAULT) + always return NULL / EINVAL. You have to use + acl_get_file (name, ACL_TYPE_EXTENDED) + or acl_get_fd (open (name, ...)) + to retrieve an ACL. + On the other hand, + acl_set_file (name, ACL_TYPE_ACCESS, acl) + and acl_set_file (name, ACL_TYPE_DEFAULT, acl) + have the same effect as + acl_set_file (name, ACL_TYPE_EXTENDED, acl): + Each of these calls sets the file's ACL. */ + + if (ctx->acl == NULL) + { + acl_t acl; + + /* Remove ACLs if the file has ACLs. */ + if (HAVE_ACL_GET_FD && desc != -1) + acl = acl_get_fd (desc); + else + acl = acl_get_file (name, ACL_TYPE_EXTENDED); + if (acl) + { + acl_free (acl); + + acl = acl_init (0); + if (acl) + { + if (HAVE_ACL_SET_FD && desc != -1) + ret = acl_set_fd (desc, acl); + else + ret = acl_set_file (name, ACL_TYPE_EXTENDED, acl); + acl_free (acl); + } + else + ret = -1; + } + } + else + { + if (HAVE_ACL_SET_FD && desc != -1) + ret = acl_set_fd (desc, ctx->acl); + else + ret = acl_set_file (name, ACL_TYPE_EXTENDED, ctx->acl); + if (ret != 0) + { + if (! acl_errno_valid (errno) + && ! acl_extended_nontrivial (ctx->acl)) + ret = 0; + } + } + *acls_set = true; + +# endif + +# elif defined GETACL /* Solaris, Cygwin, not HP-UX */ + + /* Solaris 2.5 through Solaris 10, Cygwin, and contemporaneous versions + of Unixware. The acl() call returns the access and default ACL both + at once. */ + + /* If both ace_entries and entries are available, try SETACL before + ACE_SETACL, because SETACL cannot fail with ENOTSUP whereas ACE_SETACL + can. */ + + if (from_mode) + return set_acls_from_mode (name, desc, ctx->mode, must_chmod); + + if (ret == 0 && ctx->count) + { + if (desc != -1) + ret = facl (desc, SETACL, ctx->count, ctx->entries); + else + ret = acl (name, SETACL, ctx->count, ctx->entries); + if (ret < 0) + { + if ((errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL) + && acl_nontrivial (ctx->count, ctx->entries) == 0) + ret = 0; + } + else + *acls_set = true; + } + +# ifdef ACE_GETACL + if (ret == 0 && ctx->ace_count) + { + if (desc != -1) + ret = facl (desc, ACE_SETACL, ctx->ace_count, ctx->ace_entries); + else + ret = acl (name, ACE_SETACL, ctx->ace_count, ctx->ace_entries); + if (ret < 0) + { + if ((errno == ENOSYS || errno == EINVAL || errno == ENOTSUP) + && acl_ace_nontrivial (ctx->ace_count, ctx->ace_entries) == 0) + ret = 0; + } + else + *acls_set = true; + } +# endif + +# elif HAVE_GETACL /* HP-UX */ + + if (from_mode) + ret = context_acl_from_mode (ctx, name, desc); + + if (ret == 0 && ctx->count > 0) + { + if (desc != -1) + ret = fsetacl (desc, ctx->count, ctx->entries); + else + ret = setacl (name, ctx->count, ctx->entries); + if (ret < 0) + { + if ((errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP) + && (from_mode || !acl_nontrivial (ctx->count, ctx->entries))) + ret = 0; + } + else + *acls_set = true; + } + +# if HAVE_ACLV_H + if (from_mode) + ret = context_aclv_from_mode (ctx); + + if (ret == 0 && ctx->aclv_count > 0) + { + ret = acl ((char *) name, ACL_SET, ctx->aclv_count, ctx->aclv_entries); + if (ret < 0) + { + if ((errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL) + && (from_mode || !aclv_nontrivial (ctx->aclv_count, ctx->aclv_entries))) + ret = 0; + } + else + *acls_set = true; + } +# endif + +# elif HAVE_ACLX_GET && ACL_AIX_WIP /* AIX */ + + /* TODO: Implement setting ACLs once get_permissions() reads them. */ + + if (from_mode) + ret = set_acls_from_mode (name, desc, mode, must_chmod); + +# elif HAVE_STATACL /* older AIX */ + + if (from_mode) + ret = context_acl_from_mode (ctx); + + if (ret == 0 && ctx->have_u) + { + if (desc != -1) + ret = fchacl (desc, &ctx->u.a, ctx->u.a.acl_len); + else + ret = chacl ((char *) name, &ctx->u.a, ctx->u.a.acl_len); + if (ret < 0) + { + if (errno == ENOSYS && from_mode) + ret = 0; + } + else + *acls_set = true; + } + +# elif HAVE_ACLSORT /* NonStop Kernel */ + + if (from_mode) + ret = context_acl_from_mode (ctx); + + if (ret == 0 && ctx->count) + { + ret = acl ((char *) name, ACL_SET, ctx->count, ctx->entries); + if (ret != 0) + { + if (!acl_nontrivial (ctx->count, ctx->entries)) + ret = 0; + } + else + *acls_set = true; + } + +# else /* No ACLs */ + + /* Nothing to do. */ + +# endif + + return ret; +} +#endif + +/* If DESC is a valid file descriptor use fchmod to change the + file's mode to MODE on systems that have fchmod. On systems + that don't have fchmod and if DESC is invalid, use chmod on + NAME instead. + Return 0 if successful. Return -1 and set errno upon failure. */ + +int +chmod_or_fchmod (const char *name, int desc, mode_t mode) +{ + if (HAVE_FCHMOD && desc != -1) + return fchmod (desc, mode); + else + return chmod (name, mode); +} + +/* Set the permissions in CTX on a file. If DESC is a valid file descriptor, + use file descriptor operations, else use filename based operations on NAME. + If access control lists are not available, fchmod the target file to the + mode in CTX. Also sets the non-permission bits of the destination file + (S_ISUID, S_ISGID, S_ISVTX) to those from the mode in CTX if any are set. + Return 0 if successful. Return -1 and set errno upon failure. */ + +int +set_permissions (struct permission_context *ctx, const char *name, int desc) +{ + bool acls_set _GL_UNUSED = false; + bool early_chmod; + bool must_chmod = false; + int ret = 0; + +#if USE_ACL +# if HAVE_STATACL + /* older AIX */ + /* There is no need to call chmod_or_fchmod, since the mode + bits S_ISUID, S_ISGID, S_ISVTX are also stored in the ACL. */ + + early_chmod = false; +# else + /* All other platforms */ + /* On Cygwin, it is necessary to call chmod before acl, because + chmod can change the contents of the ACL (in ways that don't + change the allowed accesses, but still visible). */ + + early_chmod = (! MODE_INSIDE_ACL || (ctx->mode & (S_ISUID | S_ISGID | S_ISVTX))); +# endif +#else + /* No ACLs */ + + early_chmod = true; +#endif + + if (early_chmod) + { + ret = chmod_or_fchmod (name, desc, ctx->mode); + if (ret != 0) + return -1; + } + +#if USE_ACL + ret = set_acls (ctx, name, desc, false, &must_chmod, &acls_set); + if (! acls_set) + { + int saved_errno = ret ? errno : 0; + + /* If we can't set an acl which we expect to be able to set, try setting + the permissions to ctx->mode. Due to possible inherited permissions, + we cannot simply chmod. */ + + ret = set_acls (ctx, name, desc, true, &must_chmod, &acls_set); + if (! acls_set) + must_chmod = true; + + if (saved_errno) + { + errno = saved_errno; + ret = -1; + } + } +#endif + + if (must_chmod && ! early_chmod) + { + int saved_errno = ret ? errno : 0; + + ret = chmod_or_fchmod (name, desc, ctx->mode); + + if (saved_errno) + { + errno = saved_errno; + ret = -1; + } + } + + return ret; +} diff --git a/devspec.en_US/project/recutils/lib/setenv.c b/devspec.en_US/project/recutils/lib/setenv.c new file mode 100755 index 0000000..733b257 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/setenv.c @@ -0,0 +1,390 @@ +/* Copyright (C) 1992, 1995-2003, 2005-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#if !_LIBC +/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc + optimizes away the name == NULL test below. */ +# define _GL_ARG_NONNULL(params) + +# define _GL_USE_STDLIB_ALLOC 1 +# include <config.h> +#endif + +#include <alloca.h> + +/* Specification. */ +#include <stdlib.h> + +#include <errno.h> +#ifndef __set_errno +# define __set_errno(ev) ((errno) = (ev)) +#endif + +#include <string.h> +#if _LIBC || HAVE_UNISTD_H +# include <unistd.h> +#endif + +#if !_LIBC +# include "malloca.h" +#endif + +#if _LIBC || !HAVE_SETENV + +#if !_LIBC +# define __environ environ +#endif + +#if _LIBC +/* This lock protects against simultaneous modifications of 'environ'. */ +# include <bits/libc-lock.h> +__libc_lock_define_initialized (static, envlock) +# define LOCK __libc_lock_lock (envlock) +# define UNLOCK __libc_lock_unlock (envlock) +#else +# define LOCK +# define UNLOCK +#endif + +/* In the GNU C library we must keep the namespace clean. */ +#ifdef _LIBC +# define setenv __setenv +# define clearenv __clearenv +# define tfind __tfind +# define tsearch __tsearch +#endif + +/* In the GNU C library implementation we try to be more clever and + allow arbitrarily many changes of the environment given that the used + values are from a small set. Outside glibc this will eat up all + memory after a while. */ +#if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \ + && defined __GNUC__) +# define USE_TSEARCH 1 +# include <search.h> +typedef int (*compar_fn_t) (const void *, const void *); + +/* This is a pointer to the root of the search tree with the known + values. */ +static void *known_values; + +# define KNOWN_VALUE(Str) \ + ({ \ + void *value = tfind (Str, &known_values, (compar_fn_t) strcmp); \ + value != NULL ? *(char **) value : NULL; \ + }) +# define STORE_VALUE(Str) \ + tsearch (Str, &known_values, (compar_fn_t) strcmp) + +#else +# undef USE_TSEARCH + +# define KNOWN_VALUE(Str) NULL +# define STORE_VALUE(Str) do { } while (0) + +#endif + + +/* If this variable is not a null pointer we allocated the current + environment. */ +static char **last_environ; + + +/* This function is used by 'setenv' and 'putenv'. The difference between + the two functions is that for the former must create a new string which + is then placed in the environment, while the argument of 'putenv' + must be used directly. This is all complicated by the fact that we try + to reuse values once generated for a 'setenv' call since we can never + free the strings. */ +int +__add_to_environ (const char *name, const char *value, const char *combined, + int replace) +{ + char **ep; + size_t size; + const size_t namelen = strlen (name); + const size_t vallen = value != NULL ? strlen (value) + 1 : 0; + + LOCK; + + /* We have to get the pointer now that we have the lock and not earlier + since another thread might have created a new environment. */ + ep = __environ; + + size = 0; + if (ep != NULL) + { + for (; *ep != NULL; ++ep) + if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=') + break; + else + ++size; + } + + if (ep == NULL || *ep == NULL) + { + char **new_environ; +#ifdef USE_TSEARCH + char *new_value; +#endif + + /* We allocated this space; we can extend it. */ + new_environ = + (char **) (last_environ == NULL + ? malloc ((size + 2) * sizeof (char *)) + : realloc (last_environ, (size + 2) * sizeof (char *))); + if (new_environ == NULL) + { + /* It's easier to set errno to ENOMEM than to rely on the + 'malloc-posix' and 'realloc-posix' gnulib modules. */ + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + + /* If the whole entry is given add it. */ + if (combined != NULL) + /* We must not add the string to the search tree since it belongs + to the user. */ + new_environ[size] = (char *) combined; + else + { + /* See whether the value is already known. */ +#ifdef USE_TSEARCH +# ifdef _LIBC + new_value = (char *) alloca (namelen + 1 + vallen); + __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), + value, vallen); +# else + new_value = (char *) malloca (namelen + 1 + vallen); + if (new_value == NULL) + { + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + memcpy (new_value, name, namelen); + new_value[namelen] = '='; + memcpy (&new_value[namelen + 1], value, vallen); +# endif + + new_environ[size] = KNOWN_VALUE (new_value); + if (new_environ[size] == NULL) +#endif + { + new_environ[size] = (char *) malloc (namelen + 1 + vallen); + if (new_environ[size] == NULL) + { +#if defined USE_TSEARCH && !defined _LIBC + freea (new_value); +#endif + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + +#ifdef USE_TSEARCH + memcpy (new_environ[size], new_value, namelen + 1 + vallen); +#else + memcpy (new_environ[size], name, namelen); + new_environ[size][namelen] = '='; + memcpy (&new_environ[size][namelen + 1], value, vallen); +#endif + /* And save the value now. We cannot do this when we remove + the string since then we cannot decide whether it is a + user string or not. */ + STORE_VALUE (new_environ[size]); + } +#if defined USE_TSEARCH && !defined _LIBC + freea (new_value); +#endif + } + + if (__environ != last_environ) + memcpy ((char *) new_environ, (char *) __environ, + size * sizeof (char *)); + + new_environ[size + 1] = NULL; + + last_environ = __environ = new_environ; + } + else if (replace) + { + char *np; + + /* Use the user string if given. */ + if (combined != NULL) + np = (char *) combined; + else + { +#ifdef USE_TSEARCH + char *new_value; +# ifdef _LIBC + new_value = alloca (namelen + 1 + vallen); + __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), + value, vallen); +# else + new_value = malloca (namelen + 1 + vallen); + if (new_value == NULL) + { + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + memcpy (new_value, name, namelen); + new_value[namelen] = '='; + memcpy (&new_value[namelen + 1], value, vallen); +# endif + + np = KNOWN_VALUE (new_value); + if (np == NULL) +#endif + { + np = (char *) malloc (namelen + 1 + vallen); + if (np == NULL) + { +#if defined USE_TSEARCH && !defined _LIBC + freea (new_value); +#endif + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + +#ifdef USE_TSEARCH + memcpy (np, new_value, namelen + 1 + vallen); +#else + memcpy (np, name, namelen); + np[namelen] = '='; + memcpy (&np[namelen + 1], value, vallen); +#endif + /* And remember the value. */ + STORE_VALUE (np); + } +#if defined USE_TSEARCH && !defined _LIBC + freea (new_value); +#endif + } + + *ep = np; + } + + UNLOCK; + + return 0; +} + +int +setenv (const char *name, const char *value, int replace) +{ + if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) + { + __set_errno (EINVAL); + return -1; + } + + return __add_to_environ (name, value, NULL, replace); +} + +/* The 'clearenv' was planned to be added to POSIX.1 but probably + never made it. Nevertheless the POSIX.9 standard (POSIX bindings + for Fortran 77) requires this function. */ +int +clearenv (void) +{ + LOCK; + + if (__environ == last_environ && __environ != NULL) + { + /* We allocated this environment so we can free it. */ + free (__environ); + last_environ = NULL; + } + + /* Clear the environment pointer removes the whole environment. */ + __environ = NULL; + + UNLOCK; + + return 0; +} + +#ifdef _LIBC +static void +free_mem (void) +{ + /* Remove all traces. */ + clearenv (); + + /* Now remove the search tree. */ + __tdestroy (known_values, free); + known_values = NULL; +} +text_set_element (__libc_subfreeres, free_mem); + + +# undef setenv +# undef clearenv +weak_alias (__setenv, setenv) +weak_alias (__clearenv, clearenv) +#endif + +#endif /* _LIBC || !HAVE_SETENV */ + +/* The rest of this file is called into use when replacing an existing + but buggy setenv. Known bugs include failure to diagnose invalid + name, and consuming a leading '=' from value. */ +#if HAVE_SETENV + +# undef setenv +# if !HAVE_DECL_SETENV +extern int setenv (const char *, const char *, int); +# endif +# define STREQ(a, b) (strcmp (a, b) == 0) + +int +rpl_setenv (const char *name, const char *value, int replace) +{ + int result; + if (!name || !*name || strchr (name, '=')) + { + errno = EINVAL; + return -1; + } + /* Call the real setenv even if replace is 0, in case implementation + has underlying data to update, such as when environ changes. */ + result = setenv (name, value, replace); + if (result == 0 && replace && *value == '=') + { + char *tmp = getenv (name); + if (!STREQ (tmp, value)) + { + int saved_errno; + size_t len = strlen (value); + tmp = malloca (len + 2); + /* Since leading '=' is eaten, double it up. */ + *tmp = '='; + memcpy (tmp + 1, value, len + 1); + result = setenv (name, tmp, replace); + saved_errno = errno; + freea (tmp); + errno = saved_errno; + } + } + return result; +} + +#endif /* HAVE_SETENV */ diff --git a/devspec.en_US/project/recutils/lib/sig-handler.c b/devspec.en_US/project/recutils/lib/sig-handler.c new file mode 100755 index 0000000..52c3621 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/sig-handler.c @@ -0,0 +1,3 @@ +#include <config.h> +#define SIG_HANDLER_INLINE _GL_EXTERN_INLINE +#include "sig-handler.h" diff --git a/devspec.en_US/project/recutils/lib/sig-handler.h b/devspec.en_US/project/recutils/lib/sig-handler.h new file mode 100755 index 0000000..b289473 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/sig-handler.h @@ -0,0 +1,51 @@ +/* Convenience declarations when working with <signal.h>. + + Copyright (C) 2008-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_SIG_HANDLER_H +#define _GL_SIG_HANDLER_H + +#include <signal.h> + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef SIG_HANDLER_INLINE +# define SIG_HANDLER_INLINE _GL_INLINE +#endif + +/* Convenience type when working with signal handlers. */ +typedef void (*sa_handler_t) (int); + +/* Return the handler of a signal, as a sa_handler_t value regardless + of its true type. The resulting function can be compared to + special values like SIG_IGN but it is not portable to call it. */ +SIG_HANDLER_INLINE sa_handler_t _GL_ATTRIBUTE_PURE +get_handler (struct sigaction const *a) +{ + /* POSIX says that special values like SIG_IGN can only occur when + action.sa_flags does not contain SA_SIGINFO. But in Linux 2.4, + for example, sa_sigaction and sa_handler are aliases and a signal + is ignored if sa_sigaction (after casting) equals SIG_IGN. In + this case, this implementation relies on the fact that the two + are aliases, and simply returns sa_handler. */ + return a->sa_handler; +} + +_GL_INLINE_HEADER_END + +#endif /* _GL_SIG_HANDLER_H */ diff --git a/devspec.en_US/project/recutils/lib/sigaction.c b/devspec.en_US/project/recutils/lib/sigaction.c new file mode 100755 index 0000000..abedfdc --- /dev/null +++ b/devspec.en_US/project/recutils/lib/sigaction.c @@ -0,0 +1,204 @@ +/* POSIX compatible signal blocking. + Copyright (C) 2008-2019 Free Software Foundation, Inc. + Written by Eric Blake <ebb9@byu.net>, 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <signal.h> + +#include <errno.h> +#include <stdint.h> +#include <stdlib.h> + +/* This implementation of sigaction is tailored to native Windows behavior: + signal() has SysV semantics (ie. the handler is uninstalled before + it is invoked). This is an inherent data race if an asynchronous + signal is sent twice in a row before we can reinstall our handler, + but there's nothing we can do about it. Meanwhile, sigprocmask() + is not present, and while we can use the gnulib replacement to + provide critical sections, it too suffers from potential data races + in the face of an ill-timed asynchronous signal. And we compound + the situation by reading static storage in a signal handler, which + POSIX warns is not generically async-signal-safe. Oh well. + + Additionally: + - We don't implement SA_NOCLDSTOP or SA_NOCLDWAIT, because SIGCHLD + is not defined. + - We don't implement SA_ONSTACK, because sigaltstack() is not present. + - We ignore SA_RESTART, because blocking native Windows API calls are + not interrupted anyway when an asynchronous signal occurs, and the + MSVCRT runtime never sets errno to EINTR. + - We don't implement SA_SIGINFO because it is impossible to do so + portably. + + POSIX states that an application should not mix signal() and + sigaction(). We support the use of signal() within the gnulib + sigprocmask() substitute, but all other application code linked + with this module should stick with only sigaction(). */ + +/* Check some of our assumptions. */ +#if defined SIGCHLD || defined HAVE_SIGALTSTACK || defined HAVE_SIGINTERRUPT +# error "Revisit the assumptions made in the sigaction module" +#endif + +/* Out-of-range substitutes make a good fallback for uncatchable + signals. */ +#ifndef SIGKILL +# define SIGKILL (-1) +#endif +#ifndef SIGSTOP +# define SIGSTOP (-1) +#endif + +/* On native Windows, as of 2008, the signal SIGABRT_COMPAT is an alias + for the signal SIGABRT. Only one signal handler is stored for both + SIGABRT and SIGABRT_COMPAT. SIGABRT_COMPAT is not a signal of its own. */ +#if defined _WIN32 && ! defined __CYGWIN__ +# undef SIGABRT_COMPAT +# define SIGABRT_COMPAT 6 +#endif + +/* A signal handler. */ +typedef void (*handler_t) (int signal); + +/* Set of current actions. If sa_handler for an entry is NULL, then + that signal is not currently handled by the sigaction handler. */ +static struct sigaction volatile action_array[NSIG] /* = 0 */; + +/* Signal handler that is installed for signals. */ +static void +sigaction_handler (int sig) +{ + handler_t handler; + sigset_t mask; + sigset_t oldmask; + int saved_errno = errno; + if (sig < 0 || NSIG <= sig || !action_array[sig].sa_handler) + { + /* Unexpected situation; be careful to avoid recursive abort. */ + if (sig == SIGABRT) + signal (SIGABRT, SIG_DFL); + abort (); + } + + /* Reinstall the signal handler when required; otherwise update the + bookkeeping so that the user's handler may call sigaction and get + accurate results. We know the signal isn't currently blocked, or + we wouldn't be in its handler, therefore we know that we are not + interrupting a sigaction() call. There is a race where any + asynchronous instance of the same signal occurring before we + reinstall the handler will trigger the default handler; oh + well. */ + handler = action_array[sig].sa_handler; + if ((action_array[sig].sa_flags & SA_RESETHAND) == 0) + signal (sig, sigaction_handler); + else + action_array[sig].sa_handler = NULL; + + /* Block appropriate signals. */ + mask = action_array[sig].sa_mask; + if ((action_array[sig].sa_flags & SA_NODEFER) == 0) + sigaddset (&mask, sig); + sigprocmask (SIG_BLOCK, &mask, &oldmask); + + /* Invoke the user's handler, then restore prior mask. */ + errno = saved_errno; + handler (sig); + saved_errno = errno; + sigprocmask (SIG_SETMASK, &oldmask, NULL); + errno = saved_errno; +} + +/* Change and/or query the action that will be taken on delivery of + signal SIG. If not NULL, ACT describes the new behavior. If not + NULL, OACT is set to the prior behavior. Return 0 on success, or + set errno and return -1 on failure. */ +int +sigaction (int sig, const struct sigaction *restrict act, + struct sigaction *restrict oact) +{ + sigset_t mask; + sigset_t oldmask; + int saved_errno; + + if (sig < 0 || NSIG <= sig || sig == SIGKILL || sig == SIGSTOP + || (act && act->sa_handler == SIG_ERR)) + { + errno = EINVAL; + return -1; + } + +#ifdef SIGABRT_COMPAT + if (sig == SIGABRT_COMPAT) + sig = SIGABRT; +#endif + + /* POSIX requires sigaction() to be async-signal-safe. In other + words, if an asynchronous signal can occur while we are anywhere + inside this function, the user's handler could then call + sigaction() recursively and expect consistent results. We meet + this rule by using sigprocmask to block all signals before + modifying any data structure that could be read from a signal + handler; this works since we know that the gnulib sigprocmask + replacement does not try to use sigaction() from its handler. */ + if (!act && !oact) + return 0; + sigfillset (&mask); + sigprocmask (SIG_BLOCK, &mask, &oldmask); + if (oact) + { + if (action_array[sig].sa_handler) + *oact = action_array[sig]; + else + { + /* Safe to change the handler at will here, since all + signals are currently blocked. */ + oact->sa_handler = signal (sig, SIG_DFL); + if (oact->sa_handler == SIG_ERR) + goto failure; + signal (sig, oact->sa_handler); + oact->sa_flags = SA_RESETHAND | SA_NODEFER; + sigemptyset (&oact->sa_mask); + } + } + + if (act) + { + /* Safe to install the handler before updating action_array, + since all signals are currently blocked. */ + if (act->sa_handler == SIG_DFL || act->sa_handler == SIG_IGN) + { + if (signal (sig, act->sa_handler) == SIG_ERR) + goto failure; + action_array[sig].sa_handler = NULL; + } + else + { + if (signal (sig, sigaction_handler) == SIG_ERR) + goto failure; + action_array[sig] = *act; + } + } + sigprocmask (SIG_SETMASK, &oldmask, NULL); + return 0; + + failure: + saved_errno = errno; + sigprocmask (SIG_SETMASK, &oldmask, NULL); + errno = saved_errno; + return -1; +} diff --git a/devspec.en_US/project/recutils/lib/signal.h b/devspec.en_US/project/recutils/lib/signal.h new file mode 100755 index 0000000..bc5a327 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/signal.h @@ -0,0 +1,937 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like <signal.h>. + + Copyright (C) 2006-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T) +/* Special invocation convention: + - Inside glibc header files. + - On glibc systems we have a sequence of nested includes + <signal.h> -> <ucontext.h> -> <signal.h>. + In this situation, the functions are not yet declared, therefore we cannot + provide the C++ aliases. + - On glibc systems with GCC 4.3 we have a sequence of nested includes + <csignal> -> </usr/include/signal.h> -> <sys/ucontext.h> -> <signal.h>. + In this situation, some of the functions are not yet declared, therefore + we cannot provide the C++ aliases. */ + +# include_next <signal.h> + +#else +/* Normal invocation convention. */ + +#ifndef _GL_SIGNAL_H + +#define _GL_ALREADY_INCLUDING_SIGNAL_H + +/* Define pid_t, uid_t. + Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. + On Solaris 10, <signal.h> includes <sys/types.h>, which eventually includes + us; so include <sys/types.h> now, before the second inclusion guard. */ +#include <sys/types.h> + +/* The include_next requires a split double-inclusion guard. */ +#include_next <signal.h> + +#undef _GL_ALREADY_INCLUDING_SIGNAL_H + +#ifndef _GL_SIGNAL_H +#define _GL_SIGNAL_H + +/* Mac OS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6, Android + declare pthread_sigmask in <pthread.h>, not in <signal.h>. + But avoid namespace pollution on glibc systems.*/ +#if (0 || defined GNULIB_POSIXCHECK) \ + && ((defined __APPLE__ && defined __MACH__) \ + || defined __FreeBSD__ || defined __OpenBSD__ || defined __osf__ \ + || defined __sun || defined __ANDROID__) \ + && ! defined __GLIBC__ +# include <pthread.h> +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* On AIX, sig_atomic_t already includes volatile. C99 requires that + 'volatile sig_atomic_t' ignore the extra modifier, but C89 did not. + Hence, redefine this to a non-volatile type as needed. */ +#if ! 1 +# if !GNULIB_defined_sig_atomic_t +typedef int rpl_sig_atomic_t; +# undef sig_atomic_t +# define sig_atomic_t rpl_sig_atomic_t +# define GNULIB_defined_sig_atomic_t 1 +# endif +#endif + +/* A set or mask of signals. */ +#if !1 +# if !GNULIB_defined_sigset_t +typedef unsigned int sigset_t; +# define GNULIB_defined_sigset_t 1 +# endif +#endif + +/* Define sighandler_t, the type of signal handlers. A GNU extension. */ +#if !1 +# ifdef __cplusplus +extern "C" { +# endif +# if !GNULIB_defined_sighandler_t +typedef void (*sighandler_t) (int); +# define GNULIB_defined_sighandler_t 1 +# endif +# ifdef __cplusplus +} +# endif +#endif + + +#if 0 +# ifndef SIGPIPE +/* Define SIGPIPE to a value that does not overlap with other signals. */ +# define SIGPIPE 13 +# define GNULIB_defined_SIGPIPE 1 +/* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask', + 'write', 'stdio'. */ +# endif +#endif + + +/* Maximum signal number + 1. */ +#ifndef NSIG +# if defined __TANDEM +# define NSIG 32 +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_sigmask +# define pthread_sigmask rpl_pthread_sigmask +# endif +_GL_FUNCDECL_RPL (pthread_sigmask, int, + (int how, const sigset_t *new_mask, sigset_t *old_mask)); +_GL_CXXALIAS_RPL (pthread_sigmask, int, + (int how, const sigset_t *new_mask, sigset_t *old_mask)); +# else +# if !(1 || defined pthread_sigmask) +_GL_FUNCDECL_SYS (pthread_sigmask, int, + (int how, const sigset_t *new_mask, sigset_t *old_mask)); +# endif +_GL_CXXALIAS_SYS (pthread_sigmask, int, + (int how, const sigset_t *new_mask, sigset_t *old_mask)); +# endif +_GL_CXXALIASWARN (pthread_sigmask); +#elif defined GNULIB_POSIXCHECK +# undef pthread_sigmask +# if HAVE_RAW_DECL_PTHREAD_SIGMASK +_GL_WARN_ON_USE (pthread_sigmask, "pthread_sigmask is not portable - " + "use gnulib module pthread_sigmask for portability"); +# endif +#endif + + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef raise +# define raise rpl_raise +# endif +_GL_FUNCDECL_RPL (raise, int, (int sig)); +_GL_CXXALIAS_RPL (raise, int, (int sig)); +# else +# if !1 +_GL_FUNCDECL_SYS (raise, int, (int sig)); +# endif +_GL_CXXALIAS_SYS (raise, int, (int sig)); +# endif +_GL_CXXALIASWARN (raise); +#elif defined GNULIB_POSIXCHECK +# undef raise +/* Assume raise is always declared. */ +_GL_WARN_ON_USE (raise, "raise can crash on native Windows - " + "use gnulib module raise for portability"); +#endif + + +#if 1 +# if !1 + +# ifndef GNULIB_defined_signal_blocking +# define GNULIB_defined_signal_blocking 1 +# endif + +/* Maximum signal number + 1. */ +# ifndef NSIG +# define NSIG 32 +# endif + +/* This code supports only 32 signals. */ +# if !GNULIB_defined_verify_NSIG_constraint +typedef int verify_NSIG_constraint[NSIG <= 32 ? 1 : -1]; +# define GNULIB_defined_verify_NSIG_constraint 1 +# endif + +# endif + +/* When also using extern inline, suppress the use of static inline in + standard headers of problematic Apple configurations, as Libc at + least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., + <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>. + Perhaps Apple will fix this some day. */ +#if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ + && (defined __i386__ || defined __x86_64__)) +# undef sigaddset +# undef sigdelset +# undef sigemptyset +# undef sigfillset +# undef sigismember +#endif + +/* Test whether a given signal is contained in a signal set. */ +# if 1 +/* This function is defined as a macro on Mac OS X. */ +# if defined __cplusplus && defined GNULIB_NAMESPACE +# undef sigismember +# endif +# else +_GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigismember, int, (const sigset_t *set, int sig)); +_GL_CXXALIASWARN (sigismember); + +/* Initialize a signal set to the empty set. */ +# if 1 +/* This function is defined as a macro on Mac OS X. */ +# if defined __cplusplus && defined GNULIB_NAMESPACE +# undef sigemptyset +# endif +# else +_GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigemptyset, int, (sigset_t *set)); +_GL_CXXALIASWARN (sigemptyset); + +/* Add a signal to a signal set. */ +# if 1 +/* This function is defined as a macro on Mac OS X. */ +# if defined __cplusplus && defined GNULIB_NAMESPACE +# undef sigaddset +# endif +# else +_GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigaddset, int, (sigset_t *set, int sig)); +_GL_CXXALIASWARN (sigaddset); + +/* Remove a signal from a signal set. */ +# if 1 +/* This function is defined as a macro on Mac OS X. */ +# if defined __cplusplus && defined GNULIB_NAMESPACE +# undef sigdelset +# endif +# else +_GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigdelset, int, (sigset_t *set, int sig)); +_GL_CXXALIASWARN (sigdelset); + +/* Fill a signal set with all possible signals. */ +# if 1 +/* This function is defined as a macro on Mac OS X. */ +# if defined __cplusplus && defined GNULIB_NAMESPACE +# undef sigfillset +# endif +# else +_GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigfillset, int, (sigset_t *set)); +_GL_CXXALIASWARN (sigfillset); + +/* Return the set of those blocked signals that are pending. */ +# if !1 +_GL_FUNCDECL_SYS (sigpending, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigpending, int, (sigset_t *set)); +_GL_CXXALIASWARN (sigpending); + +/* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET. + Then, if SET is not NULL, affect the current set of blocked signals by + combining it with *SET as indicated in OPERATION. + In this implementation, you are not allowed to change a signal handler + while the signal is blocked. */ +# if !1 +# define SIG_BLOCK 0 /* blocked_set = blocked_set | *set; */ +# define SIG_SETMASK 1 /* blocked_set = *set; */ +# define SIG_UNBLOCK 2 /* blocked_set = blocked_set & ~*set; */ +_GL_FUNCDECL_SYS (sigprocmask, int, + (int operation, const sigset_t *set, sigset_t *old_set)); +# endif +_GL_CXXALIAS_SYS (sigprocmask, int, + (int operation, const sigset_t *set, sigset_t *old_set)); +_GL_CXXALIASWARN (sigprocmask); + +/* Install the handler FUNC for signal SIG, and return the previous + handler. */ +# ifdef __cplusplus +extern "C" { +# endif +# if !GNULIB_defined_function_taking_int_returning_void_t +typedef void (*_gl_function_taking_int_returning_void_t) (int); +# define GNULIB_defined_function_taking_int_returning_void_t 1 +# endif +# ifdef __cplusplus +} +# endif +# if !1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define signal rpl_signal +# endif +_GL_FUNCDECL_RPL (signal, _gl_function_taking_int_returning_void_t, + (int sig, _gl_function_taking_int_returning_void_t func)); +_GL_CXXALIAS_RPL (signal, _gl_function_taking_int_returning_void_t, + (int sig, _gl_function_taking_int_returning_void_t func)); +# else +_GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t, + (int sig, _gl_function_taking_int_returning_void_t func)); +# endif +_GL_CXXALIASWARN (signal); + +# if !1 && GNULIB_defined_SIGPIPE +/* Raise signal SIGPIPE. */ +_GL_EXTERN_C int _gl_raise_SIGPIPE (void); +# endif + +#elif defined GNULIB_POSIXCHECK +# undef sigaddset +# if HAVE_RAW_DECL_SIGADDSET +_GL_WARN_ON_USE (sigaddset, "sigaddset is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigdelset +# if HAVE_RAW_DECL_SIGDELSET +_GL_WARN_ON_USE (sigdelset, "sigdelset is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigemptyset +# if HAVE_RAW_DECL_SIGEMPTYSET +_GL_WARN_ON_USE (sigemptyset, "sigemptyset is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigfillset +# if HAVE_RAW_DECL_SIGFILLSET +_GL_WARN_ON_USE (sigfillset, "sigfillset is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigismember +# if HAVE_RAW_DECL_SIGISMEMBER +_GL_WARN_ON_USE (sigismember, "sigismember is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigpending +# if HAVE_RAW_DECL_SIGPENDING +_GL_WARN_ON_USE (sigpending, "sigpending is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigprocmask +# if HAVE_RAW_DECL_SIGPROCMASK +_GL_WARN_ON_USE (sigprocmask, "sigprocmask is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +#endif /* 1 */ + + +#if 1 +# if !1 + +# if !1 + +# if !GNULIB_defined_siginfo_types + +/* Present to allow compilation, but unsupported by gnulib. */ +union sigval +{ + int sival_int; + void *sival_ptr; +}; + +/* Present to allow compilation, but unsupported by gnulib. */ +struct siginfo_t +{ + int si_signo; + int si_code; + int si_errno; + pid_t si_pid; + uid_t si_uid; + void *si_addr; + int si_status; + long si_band; + union sigval si_value; +}; +typedef struct siginfo_t siginfo_t; + +# define GNULIB_defined_siginfo_types 1 +# endif + +# endif /* !1 */ + +/* We assume that platforms which lack the sigaction() function also lack + the 'struct sigaction' type, and vice versa. */ + +# if !GNULIB_defined_struct_sigaction + +struct sigaction +{ + union + { + void (*_sa_handler) (int); + /* Present to allow compilation, but unsupported by gnulib. POSIX + says that implementations may, but not must, make sa_sigaction + overlap with sa_handler, but we know of no implementation where + they do not overlap. */ + void (*_sa_sigaction) (int, siginfo_t *, void *); + } _sa_func; + sigset_t sa_mask; + /* Not all POSIX flags are supported. */ + int sa_flags; +}; +# define sa_handler _sa_func._sa_handler +# define sa_sigaction _sa_func._sa_sigaction +/* Unsupported flags are not present. */ +# define SA_RESETHAND 1 +# define SA_NODEFER 2 +# define SA_RESTART 4 + +# define GNULIB_defined_struct_sigaction 1 +# endif + +_GL_FUNCDECL_SYS (sigaction, int, (int, const struct sigaction *restrict, + struct sigaction *restrict)); + +# elif !1 + +# define sa_sigaction sa_handler + +# endif /* !1, !1 */ + +_GL_CXXALIAS_SYS (sigaction, int, (int, const struct sigaction *restrict, + struct sigaction *restrict)); +_GL_CXXALIASWARN (sigaction); + +#elif defined GNULIB_POSIXCHECK +# undef sigaction +# if HAVE_RAW_DECL_SIGACTION +_GL_WARN_ON_USE (sigaction, "sigaction is unportable - " + "use the gnulib module sigaction for portability"); +# endif +#endif + +/* Some systems don't have SA_NODEFER. */ +#ifndef SA_NODEFER +# define SA_NODEFER 0 +#endif + + +#endif /* _GL_SIGNAL_H */ +#endif /* _GL_SIGNAL_H */ +#endif diff --git a/devspec.en_US/project/recutils/lib/signal.in.h b/devspec.en_US/project/recutils/lib/signal.in.h new file mode 100755 index 0000000..a6960a2 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/signal.in.h @@ -0,0 +1,463 @@ +/* A GNU-like <signal.h>. + + Copyright (C) 2006-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T) +/* Special invocation convention: + - Inside glibc header files. + - On glibc systems we have a sequence of nested includes + <signal.h> -> <ucontext.h> -> <signal.h>. + In this situation, the functions are not yet declared, therefore we cannot + provide the C++ aliases. + - On glibc systems with GCC 4.3 we have a sequence of nested includes + <csignal> -> </usr/include/signal.h> -> <sys/ucontext.h> -> <signal.h>. + In this situation, some of the functions are not yet declared, therefore + we cannot provide the C++ aliases. */ + +# @INCLUDE_NEXT@ @NEXT_SIGNAL_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_SIGNAL_H + +#define _GL_ALREADY_INCLUDING_SIGNAL_H + +/* Define pid_t, uid_t. + Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. + On Solaris 10, <signal.h> includes <sys/types.h>, which eventually includes + us; so include <sys/types.h> now, before the second inclusion guard. */ +#include <sys/types.h> + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_SIGNAL_H@ + +#undef _GL_ALREADY_INCLUDING_SIGNAL_H + +#ifndef _@GUARD_PREFIX@_SIGNAL_H +#define _@GUARD_PREFIX@_SIGNAL_H + +/* Mac OS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6, Android + declare pthread_sigmask in <pthread.h>, not in <signal.h>. + But avoid namespace pollution on glibc systems.*/ +#if (@GNULIB_PTHREAD_SIGMASK@ || defined GNULIB_POSIXCHECK) \ + && ((defined __APPLE__ && defined __MACH__) \ + || defined __FreeBSD__ || defined __OpenBSD__ || defined __osf__ \ + || defined __sun || defined __ANDROID__) \ + && ! defined __GLIBC__ +# include <pthread.h> +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +/* On AIX, sig_atomic_t already includes volatile. C99 requires that + 'volatile sig_atomic_t' ignore the extra modifier, but C89 did not. + Hence, redefine this to a non-volatile type as needed. */ +#if ! @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +# if !GNULIB_defined_sig_atomic_t +typedef int rpl_sig_atomic_t; +# undef sig_atomic_t +# define sig_atomic_t rpl_sig_atomic_t +# define GNULIB_defined_sig_atomic_t 1 +# endif +#endif + +/* A set or mask of signals. */ +#if !@HAVE_SIGSET_T@ +# if !GNULIB_defined_sigset_t +typedef unsigned int sigset_t; +# define GNULIB_defined_sigset_t 1 +# endif +#endif + +/* Define sighandler_t, the type of signal handlers. A GNU extension. */ +#if !@HAVE_SIGHANDLER_T@ +# ifdef __cplusplus +extern "C" { +# endif +# if !GNULIB_defined_sighandler_t +typedef void (*sighandler_t) (int); +# define GNULIB_defined_sighandler_t 1 +# endif +# ifdef __cplusplus +} +# endif +#endif + + +#if @GNULIB_SIGNAL_H_SIGPIPE@ +# ifndef SIGPIPE +/* Define SIGPIPE to a value that does not overlap with other signals. */ +# define SIGPIPE 13 +# define GNULIB_defined_SIGPIPE 1 +/* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask', + 'write', 'stdio'. */ +# endif +#endif + + +/* Maximum signal number + 1. */ +#ifndef NSIG +# if defined __TANDEM +# define NSIG 32 +# endif +#endif + + +#if @GNULIB_PTHREAD_SIGMASK@ +# if @REPLACE_PTHREAD_SIGMASK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pthread_sigmask +# define pthread_sigmask rpl_pthread_sigmask +# endif +_GL_FUNCDECL_RPL (pthread_sigmask, int, + (int how, const sigset_t *new_mask, sigset_t *old_mask)); +_GL_CXXALIAS_RPL (pthread_sigmask, int, + (int how, const sigset_t *new_mask, sigset_t *old_mask)); +# else +# if !(@HAVE_PTHREAD_SIGMASK@ || defined pthread_sigmask) +_GL_FUNCDECL_SYS (pthread_sigmask, int, + (int how, const sigset_t *new_mask, sigset_t *old_mask)); +# endif +_GL_CXXALIAS_SYS (pthread_sigmask, int, + (int how, const sigset_t *new_mask, sigset_t *old_mask)); +# endif +_GL_CXXALIASWARN (pthread_sigmask); +#elif defined GNULIB_POSIXCHECK +# undef pthread_sigmask +# if HAVE_RAW_DECL_PTHREAD_SIGMASK +_GL_WARN_ON_USE (pthread_sigmask, "pthread_sigmask is not portable - " + "use gnulib module pthread_sigmask for portability"); +# endif +#endif + + +#if @GNULIB_RAISE@ +# if @REPLACE_RAISE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef raise +# define raise rpl_raise +# endif +_GL_FUNCDECL_RPL (raise, int, (int sig)); +_GL_CXXALIAS_RPL (raise, int, (int sig)); +# else +# if !@HAVE_RAISE@ +_GL_FUNCDECL_SYS (raise, int, (int sig)); +# endif +_GL_CXXALIAS_SYS (raise, int, (int sig)); +# endif +_GL_CXXALIASWARN (raise); +#elif defined GNULIB_POSIXCHECK +# undef raise +/* Assume raise is always declared. */ +_GL_WARN_ON_USE (raise, "raise can crash on native Windows - " + "use gnulib module raise for portability"); +#endif + + +#if @GNULIB_SIGPROCMASK@ +# if !@HAVE_POSIX_SIGNALBLOCKING@ + +# ifndef GNULIB_defined_signal_blocking +# define GNULIB_defined_signal_blocking 1 +# endif + +/* Maximum signal number + 1. */ +# ifndef NSIG +# define NSIG 32 +# endif + +/* This code supports only 32 signals. */ +# if !GNULIB_defined_verify_NSIG_constraint +typedef int verify_NSIG_constraint[NSIG <= 32 ? 1 : -1]; +# define GNULIB_defined_verify_NSIG_constraint 1 +# endif + +# endif + +/* When also using extern inline, suppress the use of static inline in + standard headers of problematic Apple configurations, as Libc at + least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., + <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>. + Perhaps Apple will fix this some day. */ +#if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ + && (defined __i386__ || defined __x86_64__)) +# undef sigaddset +# undef sigdelset +# undef sigemptyset +# undef sigfillset +# undef sigismember +#endif + +/* Test whether a given signal is contained in a signal set. */ +# if @HAVE_POSIX_SIGNALBLOCKING@ +/* This function is defined as a macro on Mac OS X. */ +# if defined __cplusplus && defined GNULIB_NAMESPACE +# undef sigismember +# endif +# else +_GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigismember, int, (const sigset_t *set, int sig)); +_GL_CXXALIASWARN (sigismember); + +/* Initialize a signal set to the empty set. */ +# if @HAVE_POSIX_SIGNALBLOCKING@ +/* This function is defined as a macro on Mac OS X. */ +# if defined __cplusplus && defined GNULIB_NAMESPACE +# undef sigemptyset +# endif +# else +_GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigemptyset, int, (sigset_t *set)); +_GL_CXXALIASWARN (sigemptyset); + +/* Add a signal to a signal set. */ +# if @HAVE_POSIX_SIGNALBLOCKING@ +/* This function is defined as a macro on Mac OS X. */ +# if defined __cplusplus && defined GNULIB_NAMESPACE +# undef sigaddset +# endif +# else +_GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigaddset, int, (sigset_t *set, int sig)); +_GL_CXXALIASWARN (sigaddset); + +/* Remove a signal from a signal set. */ +# if @HAVE_POSIX_SIGNALBLOCKING@ +/* This function is defined as a macro on Mac OS X. */ +# if defined __cplusplus && defined GNULIB_NAMESPACE +# undef sigdelset +# endif +# else +_GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigdelset, int, (sigset_t *set, int sig)); +_GL_CXXALIASWARN (sigdelset); + +/* Fill a signal set with all possible signals. */ +# if @HAVE_POSIX_SIGNALBLOCKING@ +/* This function is defined as a macro on Mac OS X. */ +# if defined __cplusplus && defined GNULIB_NAMESPACE +# undef sigfillset +# endif +# else +_GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigfillset, int, (sigset_t *set)); +_GL_CXXALIASWARN (sigfillset); + +/* Return the set of those blocked signals that are pending. */ +# if !@HAVE_POSIX_SIGNALBLOCKING@ +_GL_FUNCDECL_SYS (sigpending, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (sigpending, int, (sigset_t *set)); +_GL_CXXALIASWARN (sigpending); + +/* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET. + Then, if SET is not NULL, affect the current set of blocked signals by + combining it with *SET as indicated in OPERATION. + In this implementation, you are not allowed to change a signal handler + while the signal is blocked. */ +# if !@HAVE_POSIX_SIGNALBLOCKING@ +# define SIG_BLOCK 0 /* blocked_set = blocked_set | *set; */ +# define SIG_SETMASK 1 /* blocked_set = *set; */ +# define SIG_UNBLOCK 2 /* blocked_set = blocked_set & ~*set; */ +_GL_FUNCDECL_SYS (sigprocmask, int, + (int operation, const sigset_t *set, sigset_t *old_set)); +# endif +_GL_CXXALIAS_SYS (sigprocmask, int, + (int operation, const sigset_t *set, sigset_t *old_set)); +_GL_CXXALIASWARN (sigprocmask); + +/* Install the handler FUNC for signal SIG, and return the previous + handler. */ +# ifdef __cplusplus +extern "C" { +# endif +# if !GNULIB_defined_function_taking_int_returning_void_t +typedef void (*_gl_function_taking_int_returning_void_t) (int); +# define GNULIB_defined_function_taking_int_returning_void_t 1 +# endif +# ifdef __cplusplus +} +# endif +# if !@HAVE_POSIX_SIGNALBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define signal rpl_signal +# endif +_GL_FUNCDECL_RPL (signal, _gl_function_taking_int_returning_void_t, + (int sig, _gl_function_taking_int_returning_void_t func)); +_GL_CXXALIAS_RPL (signal, _gl_function_taking_int_returning_void_t, + (int sig, _gl_function_taking_int_returning_void_t func)); +# else +_GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t, + (int sig, _gl_function_taking_int_returning_void_t func)); +# endif +_GL_CXXALIASWARN (signal); + +# if !@HAVE_POSIX_SIGNALBLOCKING@ && GNULIB_defined_SIGPIPE +/* Raise signal SIGPIPE. */ +_GL_EXTERN_C int _gl_raise_SIGPIPE (void); +# endif + +#elif defined GNULIB_POSIXCHECK +# undef sigaddset +# if HAVE_RAW_DECL_SIGADDSET +_GL_WARN_ON_USE (sigaddset, "sigaddset is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigdelset +# if HAVE_RAW_DECL_SIGDELSET +_GL_WARN_ON_USE (sigdelset, "sigdelset is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigemptyset +# if HAVE_RAW_DECL_SIGEMPTYSET +_GL_WARN_ON_USE (sigemptyset, "sigemptyset is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigfillset +# if HAVE_RAW_DECL_SIGFILLSET +_GL_WARN_ON_USE (sigfillset, "sigfillset is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigismember +# if HAVE_RAW_DECL_SIGISMEMBER +_GL_WARN_ON_USE (sigismember, "sigismember is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigpending +# if HAVE_RAW_DECL_SIGPENDING +_GL_WARN_ON_USE (sigpending, "sigpending is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +# undef sigprocmask +# if HAVE_RAW_DECL_SIGPROCMASK +_GL_WARN_ON_USE (sigprocmask, "sigprocmask is unportable - " + "use the gnulib module sigprocmask for portability"); +# endif +#endif /* @GNULIB_SIGPROCMASK@ */ + + +#if @GNULIB_SIGACTION@ +# if !@HAVE_SIGACTION@ + +# if !@HAVE_SIGINFO_T@ + +# if !GNULIB_defined_siginfo_types + +/* Present to allow compilation, but unsupported by gnulib. */ +union sigval +{ + int sival_int; + void *sival_ptr; +}; + +/* Present to allow compilation, but unsupported by gnulib. */ +struct siginfo_t +{ + int si_signo; + int si_code; + int si_errno; + pid_t si_pid; + uid_t si_uid; + void *si_addr; + int si_status; + long si_band; + union sigval si_value; +}; +typedef struct siginfo_t siginfo_t; + +# define GNULIB_defined_siginfo_types 1 +# endif + +# endif /* !@HAVE_SIGINFO_T@ */ + +/* We assume that platforms which lack the sigaction() function also lack + the 'struct sigaction' type, and vice versa. */ + +# if !GNULIB_defined_struct_sigaction + +struct sigaction +{ + union + { + void (*_sa_handler) (int); + /* Present to allow compilation, but unsupported by gnulib. POSIX + says that implementations may, but not must, make sa_sigaction + overlap with sa_handler, but we know of no implementation where + they do not overlap. */ + void (*_sa_sigaction) (int, siginfo_t *, void *); + } _sa_func; + sigset_t sa_mask; + /* Not all POSIX flags are supported. */ + int sa_flags; +}; +# define sa_handler _sa_func._sa_handler +# define sa_sigaction _sa_func._sa_sigaction +/* Unsupported flags are not present. */ +# define SA_RESETHAND 1 +# define SA_NODEFER 2 +# define SA_RESTART 4 + +# define GNULIB_defined_struct_sigaction 1 +# endif + +_GL_FUNCDECL_SYS (sigaction, int, (int, const struct sigaction *restrict, + struct sigaction *restrict)); + +# elif !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ + +# define sa_sigaction sa_handler + +# endif /* !@HAVE_SIGACTION@, !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ */ + +_GL_CXXALIAS_SYS (sigaction, int, (int, const struct sigaction *restrict, + struct sigaction *restrict)); +_GL_CXXALIASWARN (sigaction); + +#elif defined GNULIB_POSIXCHECK +# undef sigaction +# if HAVE_RAW_DECL_SIGACTION +_GL_WARN_ON_USE (sigaction, "sigaction is unportable - " + "use the gnulib module sigaction for portability"); +# endif +#endif + +/* Some systems don't have SA_NODEFER. */ +#ifndef SA_NODEFER +# define SA_NODEFER 0 +#endif + + +#endif /* _@GUARD_PREFIX@_SIGNAL_H */ +#endif /* _@GUARD_PREFIX@_SIGNAL_H */ +#endif diff --git a/devspec.en_US/project/recutils/lib/signbitd.c b/devspec.en_US/project/recutils/lib/signbitd.c new file mode 100755 index 0000000..9eb7d3a --- /dev/null +++ b/devspec.en_US/project/recutils/lib/signbitd.c @@ -0,0 +1,64 @@ +/* signbit() macro: Determine the sign bit of a floating-point number. + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <math.h> + +#include <string.h> +#include "isnand-nolibm.h" +#include "float+.h" + +#ifdef gl_signbitd_OPTIMIZED_MACRO +# undef gl_signbitd +#endif + +int +gl_signbitd (double arg) +{ +#if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT + /* The use of a union to extract the bits of the representation of a + 'long double' is safe in practice, despite of the "aliasing rules" of + C99, because the GCC docs say + "Even with '-fstrict-aliasing', type-punning is allowed, provided the + memory is accessed through the union type." + and similarly for other compilers. */ +# define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + union { double value; unsigned int word[NWORDS]; } m; + m.value = arg; + return (m.word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; +#elif HAVE_COPYSIGN_IN_LIBC + return copysign (1.0, arg) < 0; +#else + /* This does not do the right thing for NaN, but this is irrelevant for + most use cases. */ + if (isnand (arg)) + return 0; + if (arg < 0.0) + return 1; + else if (arg == 0.0) + { + /* Distinguish 0.0 and -0.0. */ + static double plus_zero = 0.0; + double arg_mem = arg; + return (memcmp (&plus_zero, &arg_mem, SIZEOF_DBL) != 0); + } + else + return 0; +#endif +} diff --git a/devspec.en_US/project/recutils/lib/signbitf.c b/devspec.en_US/project/recutils/lib/signbitf.c new file mode 100755 index 0000000..86595e5 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/signbitf.c @@ -0,0 +1,64 @@ +/* signbit() macro: Determine the sign bit of a floating-point number. + Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <math.h> + +#include <string.h> +#include "isnanf-nolibm.h" +#include "float+.h" + +#ifdef gl_signbitf_OPTIMIZED_MACRO +# undef gl_signbitf +#endif + +int +gl_signbitf (float arg) +{ +#if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT + /* The use of a union to extract the bits of the representation of a + 'long double' is safe in practice, despite of the "aliasing rules" of + C99, because the GCC docs say + "Even with '-fstrict-aliasing', type-punning is allowed, provided the + memory is accessed through the union type." + and similarly for other compilers. */ +# define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + union { float value; unsigned int word[NWORDS]; } m; + m.value = arg; + return (m.word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; +#elif HAVE_COPYSIGNF_IN_LIBC + return copysignf (1.0f, arg) < 0; +#else + /* This does not do the right thing for NaN, but this is irrelevant for + most use cases. */ + if (isnanf (arg)) + return 0; + if (arg < 0.0f) + return 1; + else if (arg == 0.0f) + { + /* Distinguish 0.0f and -0.0f. */ + static float plus_zero = 0.0f; + float arg_mem = arg; + return (memcmp (&plus_zero, &arg_mem, SIZEOF_FLT) != 0); + } + else + return 0; +#endif +} diff --git a/devspec.en_US/project/recutils/lib/signbitl.c b/devspec.en_US/project/recutils/lib/signbitl.c new file mode 100755 index 0000000..79f4992 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/signbitl.c @@ -0,0 +1,64 @@ +/* signbit() macro: Determine the sign bit of a floating-point number. + Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <math.h> + +#include <string.h> +#include "isnanl-nolibm.h" +#include "float+.h" + +#ifdef gl_signbitl_OPTIMIZED_MACRO +# undef gl_signbitl +#endif + +int +gl_signbitl (long double arg) +{ +#if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT + /* The use of a union to extract the bits of the representation of a + 'long double' is safe in practice, despite of the "aliasing rules" of + C99, because the GCC docs say + "Even with '-fstrict-aliasing', type-punning is allowed, provided the + memory is accessed through the union type." + and similarly for other compilers. */ +# define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + union { long double value; unsigned int word[NWORDS]; } m; + m.value = arg; + return (m.word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; +#elif HAVE_COPYSIGNL_IN_LIBC + return copysignl (1.0L, arg) < 0; +#else + /* This does not do the right thing for NaN, but this is irrelevant for + most use cases. */ + if (isnanl (arg)) + return 0; + if (arg < 0.0L) + return 1; + else if (arg == 0.0L) + { + /* Distinguish 0.0L and -0.0L. */ + static long double plus_zero = 0.0L; + long double arg_mem = arg; + return (memcmp (&plus_zero, &arg_mem, SIZEOF_LDBL) != 0); + } + else + return 0; +#endif +} diff --git a/devspec.en_US/project/recutils/lib/sigprocmask.c b/devspec.en_US/project/recutils/lib/sigprocmask.c new file mode 100755 index 0000000..d6cd3f8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/sigprocmask.c @@ -0,0 +1,349 @@ +/* POSIX compatible signal blocking. + Copyright (C) 2006-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <signal.h> + +#include <errno.h> +#include <stdint.h> +#include <stdlib.h> + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +# include "msvc-inval.h" +#endif + +/* We assume that a platform without POSIX signal blocking functions + also does not have the POSIX sigaction() function, only the + signal() function. We also assume signal() has SysV semantics, + where any handler is uninstalled prior to being invoked. This is + true for native Windows platforms. */ + +/* We use raw signal(), but also provide a wrapper rpl_signal() so + that applications can query or change a blocked signal. */ +#undef signal + +/* Provide invalid signal numbers as fallbacks if the uncatchable + signals are not defined. */ +#ifndef SIGKILL +# define SIGKILL (-1) +#endif +#ifndef SIGSTOP +# define SIGSTOP (-1) +#endif + +/* On native Windows, as of 2008, the signal SIGABRT_COMPAT is an alias + for the signal SIGABRT. Only one signal handler is stored for both + SIGABRT and SIGABRT_COMPAT. SIGABRT_COMPAT is not a signal of its own. */ +#if defined _WIN32 && ! defined __CYGWIN__ +# undef SIGABRT_COMPAT +# define SIGABRT_COMPAT 6 +#endif +#ifdef SIGABRT_COMPAT +# define SIGABRT_COMPAT_MASK (1U << SIGABRT_COMPAT) +#else +# define SIGABRT_COMPAT_MASK 0 +#endif + +typedef void (*handler_t) (int); + +#if HAVE_MSVC_INVALID_PARAMETER_HANDLER +static handler_t +signal_nothrow (int sig, handler_t handler) +{ + handler_t result; + + TRY_MSVC_INVAL + { + result = signal (sig, handler); + } + CATCH_MSVC_INVAL + { + result = SIG_ERR; + errno = EINVAL; + } + DONE_MSVC_INVAL; + + return result; +} +# define signal signal_nothrow +#endif + +/* Handling of gnulib defined signals. */ + +#if GNULIB_defined_SIGPIPE +static handler_t SIGPIPE_handler = SIG_DFL; +#endif + +#if GNULIB_defined_SIGPIPE +static handler_t +ext_signal (int sig, handler_t handler) +{ + switch (sig) + { + case SIGPIPE: + { + handler_t old_handler = SIGPIPE_handler; + SIGPIPE_handler = handler; + return old_handler; + } + default: /* System defined signal */ + return signal (sig, handler); + } +} +# undef signal +# define signal ext_signal +#endif + +int +sigismember (const sigset_t *set, int sig) +{ + if (sig >= 0 && sig < NSIG) + { + #ifdef SIGABRT_COMPAT + if (sig == SIGABRT_COMPAT) + sig = SIGABRT; + #endif + + return (*set >> sig) & 1; + } + else + return 0; +} + +int +sigemptyset (sigset_t *set) +{ + *set = 0; + return 0; +} + +int +sigaddset (sigset_t *set, int sig) +{ + if (sig >= 0 && sig < NSIG) + { + #ifdef SIGABRT_COMPAT + if (sig == SIGABRT_COMPAT) + sig = SIGABRT; + #endif + + *set |= 1U << sig; + return 0; + } + else + { + errno = EINVAL; + return -1; + } +} + +int +sigdelset (sigset_t *set, int sig) +{ + if (sig >= 0 && sig < NSIG) + { + #ifdef SIGABRT_COMPAT + if (sig == SIGABRT_COMPAT) + sig = SIGABRT; + #endif + + *set &= ~(1U << sig); + return 0; + } + else + { + errno = EINVAL; + return -1; + } +} + + +int +sigfillset (sigset_t *set) +{ + *set = ((2U << (NSIG - 1)) - 1) & ~ SIGABRT_COMPAT_MASK; + return 0; +} + +/* Set of currently blocked signals. */ +static volatile sigset_t blocked_set /* = 0 */; + +/* Set of currently blocked and pending signals. */ +static volatile sig_atomic_t pending_array[NSIG] /* = { 0 } */; + +/* Signal handler that is installed for blocked signals. */ +static void +blocked_handler (int sig) +{ + /* Reinstall the handler, in case the signal occurs multiple times + while blocked. There is an inherent race where an asynchronous + signal in between when the kernel uninstalled the handler and + when we reinstall it will trigger the default handler; oh + well. */ + signal (sig, blocked_handler); + if (sig >= 0 && sig < NSIG) + pending_array[sig] = 1; +} + +int +sigpending (sigset_t *set) +{ + sigset_t pending = 0; + int sig; + + for (sig = 0; sig < NSIG; sig++) + if (pending_array[sig]) + pending |= 1U << sig; + *set = pending; + return 0; +} + +/* The previous signal handlers. + Only the array elements corresponding to blocked signals are relevant. */ +static volatile handler_t old_handlers[NSIG]; + +int +sigprocmask (int operation, const sigset_t *set, sigset_t *old_set) +{ + if (old_set != NULL) + *old_set = blocked_set; + + if (set != NULL) + { + sigset_t new_blocked_set; + sigset_t to_unblock; + sigset_t to_block; + + switch (operation) + { + case SIG_BLOCK: + new_blocked_set = blocked_set | *set; + break; + case SIG_SETMASK: + new_blocked_set = *set; + break; + case SIG_UNBLOCK: + new_blocked_set = blocked_set & ~*set; + break; + default: + errno = EINVAL; + return -1; + } + to_unblock = blocked_set & ~new_blocked_set; + to_block = new_blocked_set & ~blocked_set; + + if (to_block != 0) + { + int sig; + + for (sig = 0; sig < NSIG; sig++) + if ((to_block >> sig) & 1) + { + pending_array[sig] = 0; + if ((old_handlers[sig] = signal (sig, blocked_handler)) != SIG_ERR) + blocked_set |= 1U << sig; + } + } + + if (to_unblock != 0) + { + sig_atomic_t received[NSIG]; + int sig; + + for (sig = 0; sig < NSIG; sig++) + if ((to_unblock >> sig) & 1) + { + if (signal (sig, old_handlers[sig]) != blocked_handler) + /* The application changed a signal handler while the signal + was blocked, bypassing our rpl_signal replacement. + We don't support this. */ + abort (); + received[sig] = pending_array[sig]; + blocked_set &= ~(1U << sig); + pending_array[sig] = 0; + } + else + received[sig] = 0; + + for (sig = 0; sig < NSIG; sig++) + if (received[sig]) + raise (sig); + } + } + return 0; +} + +/* Install the handler FUNC for signal SIG, and return the previous + handler. */ +handler_t +rpl_signal (int sig, handler_t handler) +{ + /* We must provide a wrapper, so that a user can query what handler + they installed even if that signal is currently blocked. */ + if (sig >= 0 && sig < NSIG && sig != SIGKILL && sig != SIGSTOP + && handler != SIG_ERR) + { + #ifdef SIGABRT_COMPAT + if (sig == SIGABRT_COMPAT) + sig = SIGABRT; + #endif + + if (blocked_set & (1U << sig)) + { + /* POSIX states that sigprocmask and signal are both + async-signal-safe. This is not true of our + implementation - there is a slight data race where an + asynchronous interrupt on signal A can occur after we + install blocked_handler but before we have updated + old_handlers for signal B, such that handler A can see + stale information if it calls signal(B). Oh well - + signal handlers really shouldn't try to manipulate the + installed handlers of unrelated signals. */ + handler_t result = old_handlers[sig]; + old_handlers[sig] = handler; + return result; + } + else + return signal (sig, handler); + } + else + { + errno = EINVAL; + return SIG_ERR; + } +} + +#if GNULIB_defined_SIGPIPE +/* Raise the signal SIGPIPE. */ +int +_gl_raise_SIGPIPE (void) +{ + if (blocked_set & (1U << SIGPIPE)) + pending_array[SIGPIPE] = 1; + else + { + handler_t handler = SIGPIPE_handler; + if (handler == SIG_DFL) + exit (128 + SIGPIPE); + else if (handler != SIG_IGN) + (*handler) (SIGPIPE); + } + return 0; +} +#endif diff --git a/devspec.en_US/project/recutils/lib/size_max.h b/devspec.en_US/project/recutils/lib/size_max.h new file mode 100755 index 0000000..e265fb9 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/size_max.h @@ -0,0 +1,30 @@ +/* size_max.h -- declare SIZE_MAX through system headers + Copyright (C) 2005-2006, 2009-2019 Free Software Foundation, Inc. + Written by Simon Josefsson. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef GNULIB_SIZE_MAX_H +#define GNULIB_SIZE_MAX_H + +/* Get SIZE_MAX declaration on systems like Solaris 7/8/9. */ +# include <limits.h> +/* Get SIZE_MAX declaration on systems like glibc 2. */ +# if HAVE_STDINT_H +# include <stdint.h> +# endif +/* On systems where these include files don't define it, SIZE_MAX is defined + in config.h. */ + +#endif /* GNULIB_SIZE_MAX_H */ diff --git a/devspec.en_US/project/recutils/lib/spawn.h b/devspec.en_US/project/recutils/lib/spawn.h new file mode 100755 index 0000000..f7d8ce0 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/spawn.h @@ -0,0 +1,1392 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Definitions for POSIX spawn interface. + Copyright (C) 2000, 2003-2004, 2008-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_SPAWN_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* The include_next requires a split double-inclusion guard. */ +#if 1 +# include_next <spawn.h> +#endif + +#ifndef _GL_SPAWN_H +#define _GL_SPAWN_H + +/* Get definitions of 'struct sched_param' and 'sigset_t'. + But avoid namespace pollution on glibc systems. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include <sched.h> +# include <signal.h> +#endif + +#include <sys/types.h> + +#ifndef __THROW +# define __THROW +#endif + +/* GCC 2.95 and later have "__restrict"; C99 compilers have + "restrict", and "configure" may have defined "restrict". + Other compilers use __restrict, __restrict__, and _Restrict, and + 'configure' might #define 'restrict' to those words, so pick a + different name. */ +#ifndef _Restrict_ +# if 199901L <= __STDC_VERSION__ +# define _Restrict_ restrict +# elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__) +# define _Restrict_ __restrict +# else +# define _Restrict_ +# endif +#endif +/* gcc 3.1 and up support the [restrict] syntax. Don't trust + sys/cdefs.h's definition of __restrict_arr, though, as it + mishandles gcc -ansi -pedantic. */ +#ifndef _Restrict_arr_ +# if ((199901L <= __STDC_VERSION__ \ + || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) \ + && !defined __STRICT_ANSI__)) \ + && !defined __GNUG__) +# define _Restrict_arr_ _Restrict_ +# else +# define _Restrict_arr_ +# endif +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +/* Data structure to contain attributes for thread creation. */ +#if 0 || (1 && !1) +# define posix_spawnattr_t rpl_posix_spawnattr_t +#endif +#if 0 || !1 || !1 +# if !GNULIB_defined_posix_spawnattr_t +typedef struct +{ + short int _flags; + pid_t _pgrp; + sigset_t _sd; + sigset_t _ss; + struct sched_param _sp; + int _policy; + int __pad[16]; +} posix_spawnattr_t; +# define GNULIB_defined_posix_spawnattr_t 1 +# endif +#endif + + +/* Data structure to contain information about the actions to be + performed in the new process with respect to file descriptors. */ +#if 0 || (1 && !1) +# define posix_spawn_file_actions_t rpl_posix_spawn_file_actions_t +#endif +#if 0 || !1 || !1 +# if !GNULIB_defined_posix_spawn_file_actions_t +typedef struct +{ + int _allocated; + int _used; + struct __spawn_action *_actions; + int __pad[16]; +} posix_spawn_file_actions_t; +# define GNULIB_defined_posix_spawn_file_actions_t 1 +# endif +#endif + + +/* Flags to be set in the 'posix_spawnattr_t'. */ +#if 1 +/* Use the values from the system, but provide the missing ones. */ +# ifndef POSIX_SPAWN_SETSCHEDPARAM +# define POSIX_SPAWN_SETSCHEDPARAM 0 +# endif +# ifndef POSIX_SPAWN_SETSCHEDULER +# define POSIX_SPAWN_SETSCHEDULER 0 +# endif +#else +# if 0 +/* Use the values from the system, for better compatibility. */ +/* But this implementation does not support AIX extensions. */ +# undef POSIX_SPAWN_FORK_HANDLERS +# else +# define POSIX_SPAWN_RESETIDS 0x01 +# define POSIX_SPAWN_SETPGROUP 0x02 +# define POSIX_SPAWN_SETSIGDEF 0x04 +# define POSIX_SPAWN_SETSIGMASK 0x08 +# define POSIX_SPAWN_SETSCHEDPARAM 0x10 +# define POSIX_SPAWN_SETSCHEDULER 0x20 +# endif +#endif +/* A GNU extension. Use the next free bit position. */ +#ifndef POSIX_SPAWN_USEVFORK +# define POSIX_SPAWN_USEVFORK \ + ((POSIX_SPAWN_RESETIDS | (POSIX_SPAWN_RESETIDS - 1) \ + | POSIX_SPAWN_SETPGROUP | (POSIX_SPAWN_SETPGROUP - 1) \ + | POSIX_SPAWN_SETSIGDEF | (POSIX_SPAWN_SETSIGDEF - 1) \ + | POSIX_SPAWN_SETSIGMASK | (POSIX_SPAWN_SETSIGMASK - 1) \ + | POSIX_SPAWN_SETSCHEDPARAM \ + | (POSIX_SPAWN_SETSCHEDPARAM > 0 ? POSIX_SPAWN_SETSCHEDPARAM - 1 : 0) \ + | POSIX_SPAWN_SETSCHEDULER \ + | (POSIX_SPAWN_SETSCHEDULER > 0 ? POSIX_SPAWN_SETSCHEDULER - 1 : 0)) \ + + 1) +#endif +#if !GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap +typedef int verify_POSIX_SPAWN_USEVFORK_no_overlap + [(((POSIX_SPAWN_RESETIDS | POSIX_SPAWN_SETPGROUP + | POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK + | POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER) + & POSIX_SPAWN_USEVFORK) + == 0) + ? 1 : -1]; +# define GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap 1 +#endif + + +#if 0 +/* Spawn a new process executing PATH with the attributes describes in *ATTRP. + Before running the process perform the actions described in FILE-ACTIONS. + + This function is a possible cancellation points and therefore not + marked with __THROW. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawn rpl_posix_spawn +# endif +_GL_FUNCDECL_RPL (posix_spawn, int, + (pid_t *_Restrict_ __pid, + const char *_Restrict_ __path, + const posix_spawn_file_actions_t *_Restrict_ __file_actions, + const posix_spawnattr_t *_Restrict_ __attrp, + char *const argv[_Restrict_arr_], + char *const envp[_Restrict_arr_]) + _GL_ARG_NONNULL ((2, 5, 6))); +_GL_CXXALIAS_RPL (posix_spawn, int, + (pid_t *_Restrict_ __pid, + const char *_Restrict_ __path, + const posix_spawn_file_actions_t *_Restrict_ __file_actions, + const posix_spawnattr_t *_Restrict_ __attrp, + char *const argv[_Restrict_arr_], + char *const envp[_Restrict_arr_])); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawn, int, + (pid_t *_Restrict_ __pid, + const char *_Restrict_ __path, + const posix_spawn_file_actions_t *_Restrict_ __file_actions, + const posix_spawnattr_t *_Restrict_ __attrp, + char *const argv[_Restrict_arr_], + char *const envp[_Restrict_arr_]) + _GL_ARG_NONNULL ((2, 5, 6))); +# endif +_GL_CXXALIAS_SYS (posix_spawn, int, + (pid_t *_Restrict_ __pid, + const char *_Restrict_ __path, + const posix_spawn_file_actions_t *_Restrict_ __file_actions, + const posix_spawnattr_t *_Restrict_ __attrp, + char *const argv[_Restrict_arr_], + char *const envp[_Restrict_arr_])); +# endif +_GL_CXXALIASWARN (posix_spawn); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawn +# if HAVE_RAW_DECL_POSIX_SPAWN +_GL_WARN_ON_USE (posix_spawn, "posix_spawn is unportable - " + "use gnulib module posix_spawn for portability"); +# endif +#endif + +#if 1 +/* Similar to 'posix_spawn' but search for FILE in the PATH. + + This function is a possible cancellation points and therefore not + marked with __THROW. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnp rpl_posix_spawnp +# endif +_GL_FUNCDECL_RPL (posix_spawnp, int, + (pid_t *__pid, const char *__file, + const posix_spawn_file_actions_t *__file_actions, + const posix_spawnattr_t *__attrp, + char *const argv[], char *const envp[]) + _GL_ARG_NONNULL ((2, 5, 6))); +_GL_CXXALIAS_RPL (posix_spawnp, int, + (pid_t *__pid, const char *__file, + const posix_spawn_file_actions_t *__file_actions, + const posix_spawnattr_t *__attrp, + char *const argv[], char *const envp[])); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawnp, int, + (pid_t *__pid, const char *__file, + const posix_spawn_file_actions_t *__file_actions, + const posix_spawnattr_t *__attrp, + char *const argv[], char *const envp[]) + _GL_ARG_NONNULL ((2, 5, 6))); +# endif +_GL_CXXALIAS_SYS (posix_spawnp, int, + (pid_t *__pid, const char *__file, + const posix_spawn_file_actions_t *__file_actions, + const posix_spawnattr_t *__attrp, + char *const argv[], char *const envp[])); +# endif +_GL_CXXALIASWARN (posix_spawnp); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnp +# if HAVE_RAW_DECL_POSIX_SPAWNP +_GL_WARN_ON_USE (posix_spawnp, "posix_spawnp is unportable - " + "use gnulib module posix_spawnp for portability"); +# endif +#endif + + +#if 1 +/* Initialize data structure with attributes for 'spawn' to default values. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_init rpl_posix_spawnattr_init +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_init, int, (posix_spawnattr_t *__attr) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawnattr_init, int, (posix_spawnattr_t *__attr)); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawnattr_init, int, (posix_spawnattr_t *__attr) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_init, int, (posix_spawnattr_t *__attr)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_init); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_init +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_INIT +_GL_WARN_ON_USE (posix_spawnattr_init, "posix_spawnattr_init is unportable - " + "use gnulib module posix_spawnattr_init for portability"); +# endif +#endif + +#if 1 +/* Free resources associated with ATTR. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_destroy rpl_posix_spawnattr_destroy +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr)); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_destroy); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_destroy +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_DESTROY +_GL_WARN_ON_USE (posix_spawnattr_destroy, + "posix_spawnattr_destroy is unportable - " + "use gnulib module posix_spawnattr_destroy for portability"); +# endif +#endif + +#if 0 +/* Store signal mask for signals with default handling from ATTR in + SIGDEFAULT. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_getsigdefault rpl_posix_spawnattr_getsigdefault +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_getsigdefault, int, + (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigdefault) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_getsigdefault, int, + (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigdefault)); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawnattr_getsigdefault, int, + (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigdefault) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_getsigdefault, int, + (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigdefault)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_getsigdefault); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_getsigdefault +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGDEFAULT +_GL_WARN_ON_USE (posix_spawnattr_getsigdefault, + "posix_spawnattr_getsigdefault is unportable - " + "use gnulib module posix_spawnattr_getsigdefault for portability"); +# endif +#endif + +#if 0 +/* Set signal mask for signals with default handling in ATTR to SIGDEFAULT. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_setsigdefault rpl_posix_spawnattr_setsigdefault +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_setsigdefault, int, + (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigdefault) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_setsigdefault, int, + (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigdefault)); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawnattr_setsigdefault, int, + (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigdefault) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_setsigdefault, int, + (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigdefault)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_setsigdefault); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_setsigdefault +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGDEFAULT +_GL_WARN_ON_USE (posix_spawnattr_setsigdefault, + "posix_spawnattr_setsigdefault is unportable - " + "use gnulib module posix_spawnattr_setsigdefault for portability"); +# endif +#endif + +#if 0 +/* Store signal mask for the new process from ATTR in SIGMASK. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_getsigmask rpl_posix_spawnattr_getsigmask +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_getsigmask, int, + (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigmask) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_getsigmask, int, + (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigmask)); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawnattr_getsigmask, int, + (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigmask) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_getsigmask, int, + (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigmask)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_getsigmask); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_getsigmask +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGMASK +_GL_WARN_ON_USE (posix_spawnattr_getsigmask, + "posix_spawnattr_getsigmask is unportable - " + "use gnulib module posix_spawnattr_getsigmask for portability"); +# endif +#endif + +#if 1 +/* Set signal mask for the new process in ATTR to SIGMASK. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_setsigmask rpl_posix_spawnattr_setsigmask +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_setsigmask, int, + (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigmask) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_setsigmask, int, + (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigmask)); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawnattr_setsigmask, int, + (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigmask) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_setsigmask, int, + (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigmask)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_setsigmask); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_setsigmask +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGMASK +_GL_WARN_ON_USE (posix_spawnattr_setsigmask, + "posix_spawnattr_setsigmask is unportable - " + "use gnulib module posix_spawnattr_setsigmask for portability"); +# endif +#endif + +#if 0 +/* Get flag word from the attribute structure. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_getflags rpl_posix_spawnattr_getflags +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_getflags, int, + (const posix_spawnattr_t *_Restrict_ __attr, + short int *_Restrict_ __flags) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_getflags, int, + (const posix_spawnattr_t *_Restrict_ __attr, + short int *_Restrict_ __flags)); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawnattr_getflags, int, + (const posix_spawnattr_t *_Restrict_ __attr, + short int *_Restrict_ __flags) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_getflags, int, + (const posix_spawnattr_t *_Restrict_ __attr, + short int *_Restrict_ __flags)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_getflags); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_getflags +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETFLAGS +_GL_WARN_ON_USE (posix_spawnattr_getflags, + "posix_spawnattr_getflags is unportable - " + "use gnulib module posix_spawnattr_getflags for portability"); +# endif +#endif + +#if 1 +/* Store flags in the attribute structure. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_setflags rpl_posix_spawnattr_setflags +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_setflags, int, + (posix_spawnattr_t *__attr, short int __flags) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawnattr_setflags, int, + (posix_spawnattr_t *__attr, short int __flags)); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawnattr_setflags, int, + (posix_spawnattr_t *__attr, short int __flags) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_setflags, int, + (posix_spawnattr_t *__attr, short int __flags)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_setflags); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_setflags +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETFLAGS +_GL_WARN_ON_USE (posix_spawnattr_setflags, + "posix_spawnattr_setflags is unportable - " + "use gnulib module posix_spawnattr_setflags for portability"); +# endif +#endif + +#if 0 +/* Get process group ID from the attribute structure. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_getpgroup rpl_posix_spawnattr_getpgroup +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_getpgroup, int, + (const posix_spawnattr_t *_Restrict_ __attr, + pid_t *_Restrict_ __pgroup) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_getpgroup, int, + (const posix_spawnattr_t *_Restrict_ __attr, + pid_t *_Restrict_ __pgroup)); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawnattr_getpgroup, int, + (const posix_spawnattr_t *_Restrict_ __attr, + pid_t *_Restrict_ __pgroup) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_getpgroup, int, + (const posix_spawnattr_t *_Restrict_ __attr, + pid_t *_Restrict_ __pgroup)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_getpgroup); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_getpgroup +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETPGROUP +_GL_WARN_ON_USE (posix_spawnattr_getpgroup, + "posix_spawnattr_getpgroup is unportable - " + "use gnulib module posix_spawnattr_getpgroup for portability"); +# endif +#endif + +#if 0 +/* Store process group ID in the attribute structure. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_setpgroup rpl_posix_spawnattr_setpgroup +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_setpgroup, int, + (posix_spawnattr_t *__attr, pid_t __pgroup) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawnattr_setpgroup, int, + (posix_spawnattr_t *__attr, pid_t __pgroup)); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawnattr_setpgroup, int, + (posix_spawnattr_t *__attr, pid_t __pgroup) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_setpgroup, int, + (posix_spawnattr_t *__attr, pid_t __pgroup)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_setpgroup); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_setpgroup +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETPGROUP +_GL_WARN_ON_USE (posix_spawnattr_setpgroup, + "posix_spawnattr_setpgroup is unportable - " + "use gnulib module posix_spawnattr_setpgroup for portability"); +# endif +#endif + +#if 0 +/* Get scheduling policy from the attribute structure. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_getschedpolicy rpl_posix_spawnattr_getschedpolicy +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_getschedpolicy, int, + (const posix_spawnattr_t *_Restrict_ __attr, + int *_Restrict_ __schedpolicy) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_getschedpolicy, int, + (const posix_spawnattr_t *_Restrict_ __attr, + int *_Restrict_ __schedpolicy)); +# else +# if !1 || POSIX_SPAWN_SETSCHEDULER == 0 +_GL_FUNCDECL_SYS (posix_spawnattr_getschedpolicy, int, + (const posix_spawnattr_t *_Restrict_ __attr, + int *_Restrict_ __schedpolicy) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_getschedpolicy, int, + (const posix_spawnattr_t *_Restrict_ __attr, + int *_Restrict_ __schedpolicy)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_getschedpolicy); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_getschedpolicy +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPOLICY +_GL_WARN_ON_USE (posix_spawnattr_getschedpolicy, + "posix_spawnattr_getschedpolicy is unportable - " + "use gnulib module posix_spawnattr_getschedpolicy for portability"); +# endif +#endif + +#if 0 +/* Store scheduling policy in the attribute structure. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_setschedpolicy rpl_posix_spawnattr_setschedpolicy +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_setschedpolicy, int, + (posix_spawnattr_t *__attr, int __schedpolicy) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawnattr_setschedpolicy, int, + (posix_spawnattr_t *__attr, int __schedpolicy)); +# else +# if !1 || POSIX_SPAWN_SETSCHEDULER == 0 +_GL_FUNCDECL_SYS (posix_spawnattr_setschedpolicy, int, + (posix_spawnattr_t *__attr, int __schedpolicy) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_setschedpolicy, int, + (posix_spawnattr_t *__attr, int __schedpolicy)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_setschedpolicy); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_setschedpolicy +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPOLICY +_GL_WARN_ON_USE (posix_spawnattr_setschedpolicy, + "posix_spawnattr_setschedpolicy is unportable - " + "use gnulib module posix_spawnattr_setschedpolicy for portability"); +# endif +#endif + +#if 0 +/* Get scheduling parameters from the attribute structure. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_getschedparam rpl_posix_spawnattr_getschedparam +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_getschedparam, int, + (const posix_spawnattr_t *_Restrict_ __attr, + struct sched_param *_Restrict_ __schedparam) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_getschedparam, int, + (const posix_spawnattr_t *_Restrict_ __attr, + struct sched_param *_Restrict_ __schedparam)); +# else +# if !1 || POSIX_SPAWN_SETSCHEDPARAM == 0 +_GL_FUNCDECL_SYS (posix_spawnattr_getschedparam, int, + (const posix_spawnattr_t *_Restrict_ __attr, + struct sched_param *_Restrict_ __schedparam) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_getschedparam, int, + (const posix_spawnattr_t *_Restrict_ __attr, + struct sched_param *_Restrict_ __schedparam)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_getschedparam); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_getschedparam +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPARAM +_GL_WARN_ON_USE (posix_spawnattr_getschedparam, + "posix_spawnattr_getschedparam is unportable - " + "use gnulib module posix_spawnattr_getschedparam for portability"); +# endif +#endif + +#if 0 +/* Store scheduling parameters in the attribute structure. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_setschedparam rpl_posix_spawnattr_setschedparam +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_setschedparam, int, + (posix_spawnattr_t *_Restrict_ __attr, + const struct sched_param *_Restrict_ __schedparam) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_setschedparam, int, + (posix_spawnattr_t *_Restrict_ __attr, + const struct sched_param *_Restrict_ __schedparam)); +# else +# if !1 || POSIX_SPAWN_SETSCHEDPARAM == 0 +_GL_FUNCDECL_SYS (posix_spawnattr_setschedparam, int, + (posix_spawnattr_t *_Restrict_ __attr, + const struct sched_param *_Restrict_ __schedparam) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_setschedparam, int, + (posix_spawnattr_t *_Restrict_ __attr, + const struct sched_param *_Restrict_ __schedparam)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_setschedparam); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_setschedparam +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPARAM +_GL_WARN_ON_USE (posix_spawnattr_setschedparam, + "posix_spawnattr_setschedparam is unportable - " + "use gnulib module posix_spawnattr_setschedparam for portability"); +# endif +#endif + + +#if 1 +/* Initialize data structure for file attribute for 'spawn' call. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawn_file_actions_init rpl_posix_spawn_file_actions_init +# endif +_GL_FUNCDECL_RPL (posix_spawn_file_actions_init, int, + (posix_spawn_file_actions_t *__file_actions) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawn_file_actions_init, int, + (posix_spawn_file_actions_t *__file_actions)); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawn_file_actions_init, int, + (posix_spawn_file_actions_t *__file_actions) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawn_file_actions_init, int, + (posix_spawn_file_actions_t *__file_actions)); +# endif +_GL_CXXALIASWARN (posix_spawn_file_actions_init); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawn_file_actions_init +# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_INIT +_GL_WARN_ON_USE (posix_spawn_file_actions_init, + "posix_spawn_file_actions_init is unportable - " + "use gnulib module posix_spawn_file_actions_init for portability"); +# endif +#endif + +#if 1 +/* Free resources associated with FILE-ACTIONS. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawn_file_actions_destroy rpl_posix_spawn_file_actions_destroy +# endif +_GL_FUNCDECL_RPL (posix_spawn_file_actions_destroy, int, + (posix_spawn_file_actions_t *__file_actions) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawn_file_actions_destroy, int, + (posix_spawn_file_actions_t *__file_actions)); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawn_file_actions_destroy, int, + (posix_spawn_file_actions_t *__file_actions) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawn_file_actions_destroy, int, + (posix_spawn_file_actions_t *__file_actions)); +# endif +_GL_CXXALIASWARN (posix_spawn_file_actions_destroy); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawn_file_actions_destroy +# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_DESTROY +_GL_WARN_ON_USE (posix_spawn_file_actions_destroy, + "posix_spawn_file_actions_destroy is unportable - " + "use gnulib module posix_spawn_file_actions_destroy for portability"); +# endif +#endif + +#if 1 +/* Add an action to FILE-ACTIONS which tells the implementation to call + 'open' for the given file during the 'spawn' call. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawn_file_actions_addopen rpl_posix_spawn_file_actions_addopen +# endif +_GL_FUNCDECL_RPL (posix_spawn_file_actions_addopen, int, + (posix_spawn_file_actions_t *_Restrict_ __file_actions, + int __fd, + const char *_Restrict_ __path, int __oflag, mode_t __mode) + __THROW _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (posix_spawn_file_actions_addopen, int, + (posix_spawn_file_actions_t *_Restrict_ __file_actions, + int __fd, + const char *_Restrict_ __path, int __oflag, mode_t __mode)); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawn_file_actions_addopen, int, + (posix_spawn_file_actions_t *_Restrict_ __file_actions, + int __fd, + const char *_Restrict_ __path, int __oflag, mode_t __mode) + __THROW _GL_ARG_NONNULL ((1, 3))); +# endif +_GL_CXXALIAS_SYS (posix_spawn_file_actions_addopen, int, + (posix_spawn_file_actions_t *_Restrict_ __file_actions, + int __fd, + const char *_Restrict_ __path, int __oflag, mode_t __mode)); +# endif +_GL_CXXALIASWARN (posix_spawn_file_actions_addopen); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawn_file_actions_addopen +# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN +_GL_WARN_ON_USE (posix_spawn_file_actions_addopen, + "posix_spawn_file_actions_addopen is unportable - " + "use gnulib module posix_spawn_file_actions_addopen for portability"); +# endif +#endif + +#if 0 +/* Add an action to FILE-ACTIONS which tells the implementation to call + 'close' for the given file descriptor during the 'spawn' call. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawn_file_actions_addclose rpl_posix_spawn_file_actions_addclose +# endif +_GL_FUNCDECL_RPL (posix_spawn_file_actions_addclose, int, + (posix_spawn_file_actions_t *__file_actions, int __fd) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawn_file_actions_addclose, int, + (posix_spawn_file_actions_t *__file_actions, int __fd)); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawn_file_actions_addclose, int, + (posix_spawn_file_actions_t *__file_actions, int __fd) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawn_file_actions_addclose, int, + (posix_spawn_file_actions_t *__file_actions, int __fd)); +# endif +_GL_CXXALIASWARN (posix_spawn_file_actions_addclose); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawn_file_actions_addclose +# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE +_GL_WARN_ON_USE (posix_spawn_file_actions_addclose, + "posix_spawn_file_actions_addclose is unportable - " + "use gnulib module posix_spawn_file_actions_addclose for portability"); +# endif +#endif + +#if 0 +/* Add an action to FILE-ACTIONS which tells the implementation to call + 'dup2' for the given file descriptors during the 'spawn' call. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawn_file_actions_adddup2 rpl_posix_spawn_file_actions_adddup2 +# endif +_GL_FUNCDECL_RPL (posix_spawn_file_actions_adddup2, int, + (posix_spawn_file_actions_t *__file_actions, + int __fd, int __newfd) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawn_file_actions_adddup2, int, + (posix_spawn_file_actions_t *__file_actions, + int __fd, int __newfd)); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawn_file_actions_adddup2, int, + (posix_spawn_file_actions_t *__file_actions, + int __fd, int __newfd) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawn_file_actions_adddup2, int, + (posix_spawn_file_actions_t *__file_actions, + int __fd, int __newfd)); +# endif +_GL_CXXALIASWARN (posix_spawn_file_actions_adddup2); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawn_file_actions_adddup2 +# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 +_GL_WARN_ON_USE (posix_spawn_file_actions_adddup2, + "posix_spawn_file_actions_adddup2 is unportable - " + "use gnulib module posix_spawn_file_actions_adddup2 for portability"); +# endif +#endif + +#if 0 +/* Add an action to FILE-ACTIONS which tells the implementation to call + 'chdir' to the given directory during the 'spawn' call. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawn_file_actions_addchdir rpl_posix_spawn_file_actions_addchdir +# endif +_GL_FUNCDECL_RPL (posix_spawn_file_actions_addchdir, int, + (posix_spawn_file_actions_t *_Restrict_ __file_actions, + const char *_Restrict_ __path) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawn_file_actions_addchdir, int, + (posix_spawn_file_actions_t *_Restrict_ __file_actions, + const char *_Restrict_ __path)); +# else +# if !1 +_GL_FUNCDECL_SYS (posix_spawn_file_actions_addchdir, int, + (posix_spawn_file_actions_t *_Restrict_ __file_actions, + const char *_Restrict_ __path) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawn_file_actions_addchdir, int, + (posix_spawn_file_actions_t *_Restrict_ __file_actions, + const char *_Restrict_ __path)); +# endif +_GL_CXXALIASWARN (posix_spawn_file_actions_addchdir); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawn_file_actions_addchdir +# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR +_GL_WARN_ON_USE (posix_spawn_file_actions_addchdir, + "posix_spawn_file_actions_addchdir is unportable - " + "use gnulib module posix_spawn_file_actions_addchdir for portability"); +# endif +#endif + + +#endif /* _GL_SPAWN_H */ +#endif /* _GL_SPAWN_H */ diff --git a/devspec.en_US/project/recutils/lib/spawn.in.h b/devspec.en_US/project/recutils/lib/spawn.in.h new file mode 100755 index 0000000..df95e4a --- /dev/null +++ b/devspec.en_US/project/recutils/lib/spawn.in.h @@ -0,0 +1,918 @@ +/* Definitions for POSIX spawn interface. + Copyright (C) 2000, 2003-2004, 2008-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _@GUARD_PREFIX@_SPAWN_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_SPAWN_H@ +# @INCLUDE_NEXT@ @NEXT_SPAWN_H@ +#endif + +#ifndef _@GUARD_PREFIX@_SPAWN_H +#define _@GUARD_PREFIX@_SPAWN_H + +/* Get definitions of 'struct sched_param' and 'sigset_t'. + But avoid namespace pollution on glibc systems. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include <sched.h> +# include <signal.h> +#endif + +#include <sys/types.h> + +#ifndef __THROW +# define __THROW +#endif + +/* GCC 2.95 and later have "__restrict"; C99 compilers have + "restrict", and "configure" may have defined "restrict". + Other compilers use __restrict, __restrict__, and _Restrict, and + 'configure' might #define 'restrict' to those words, so pick a + different name. */ +#ifndef _Restrict_ +# if 199901L <= __STDC_VERSION__ +# define _Restrict_ restrict +# elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__) +# define _Restrict_ __restrict +# else +# define _Restrict_ +# endif +#endif +/* gcc 3.1 and up support the [restrict] syntax. Don't trust + sys/cdefs.h's definition of __restrict_arr, though, as it + mishandles gcc -ansi -pedantic. */ +#ifndef _Restrict_arr_ +# if ((199901L <= __STDC_VERSION__ \ + || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) \ + && !defined __STRICT_ANSI__)) \ + && !defined __GNUG__) +# define _Restrict_arr_ _Restrict_ +# else +# define _Restrict_arr_ +# endif +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + + +/* Data structure to contain attributes for thread creation. */ +#if @REPLACE_POSIX_SPAWN@ || (@HAVE_POSIX_SPAWNATTR_T@ && !@HAVE_POSIX_SPAWN@) +# define posix_spawnattr_t rpl_posix_spawnattr_t +#endif +#if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWNATTR_T@ || !@HAVE_POSIX_SPAWN@ +# if !GNULIB_defined_posix_spawnattr_t +typedef struct +{ + short int _flags; + pid_t _pgrp; + sigset_t _sd; + sigset_t _ss; + struct sched_param _sp; + int _policy; + int __pad[16]; +} posix_spawnattr_t; +# define GNULIB_defined_posix_spawnattr_t 1 +# endif +#endif + + +/* Data structure to contain information about the actions to be + performed in the new process with respect to file descriptors. */ +#if @REPLACE_POSIX_SPAWN@ || (@HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ && !@HAVE_POSIX_SPAWN@) +# define posix_spawn_file_actions_t rpl_posix_spawn_file_actions_t +#endif +#if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ || !@HAVE_POSIX_SPAWN@ +# if !GNULIB_defined_posix_spawn_file_actions_t +typedef struct +{ + int _allocated; + int _used; + struct __spawn_action *_actions; + int __pad[16]; +} posix_spawn_file_actions_t; +# define GNULIB_defined_posix_spawn_file_actions_t 1 +# endif +#endif + + +/* Flags to be set in the 'posix_spawnattr_t'. */ +#if @HAVE_POSIX_SPAWN@ +/* Use the values from the system, but provide the missing ones. */ +# ifndef POSIX_SPAWN_SETSCHEDPARAM +# define POSIX_SPAWN_SETSCHEDPARAM 0 +# endif +# ifndef POSIX_SPAWN_SETSCHEDULER +# define POSIX_SPAWN_SETSCHEDULER 0 +# endif +#else +# if @REPLACE_POSIX_SPAWN@ +/* Use the values from the system, for better compatibility. */ +/* But this implementation does not support AIX extensions. */ +# undef POSIX_SPAWN_FORK_HANDLERS +# else +# define POSIX_SPAWN_RESETIDS 0x01 +# define POSIX_SPAWN_SETPGROUP 0x02 +# define POSIX_SPAWN_SETSIGDEF 0x04 +# define POSIX_SPAWN_SETSIGMASK 0x08 +# define POSIX_SPAWN_SETSCHEDPARAM 0x10 +# define POSIX_SPAWN_SETSCHEDULER 0x20 +# endif +#endif +/* A GNU extension. Use the next free bit position. */ +#ifndef POSIX_SPAWN_USEVFORK +# define POSIX_SPAWN_USEVFORK \ + ((POSIX_SPAWN_RESETIDS | (POSIX_SPAWN_RESETIDS - 1) \ + | POSIX_SPAWN_SETPGROUP | (POSIX_SPAWN_SETPGROUP - 1) \ + | POSIX_SPAWN_SETSIGDEF | (POSIX_SPAWN_SETSIGDEF - 1) \ + | POSIX_SPAWN_SETSIGMASK | (POSIX_SPAWN_SETSIGMASK - 1) \ + | POSIX_SPAWN_SETSCHEDPARAM \ + | (POSIX_SPAWN_SETSCHEDPARAM > 0 ? POSIX_SPAWN_SETSCHEDPARAM - 1 : 0) \ + | POSIX_SPAWN_SETSCHEDULER \ + | (POSIX_SPAWN_SETSCHEDULER > 0 ? POSIX_SPAWN_SETSCHEDULER - 1 : 0)) \ + + 1) +#endif +#if !GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap +typedef int verify_POSIX_SPAWN_USEVFORK_no_overlap + [(((POSIX_SPAWN_RESETIDS | POSIX_SPAWN_SETPGROUP + | POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK + | POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER) + & POSIX_SPAWN_USEVFORK) + == 0) + ? 1 : -1]; +# define GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap 1 +#endif + + +#if @GNULIB_POSIX_SPAWN@ +/* Spawn a new process executing PATH with the attributes describes in *ATTRP. + Before running the process perform the actions described in FILE-ACTIONS. + + This function is a possible cancellation points and therefore not + marked with __THROW. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawn rpl_posix_spawn +# endif +_GL_FUNCDECL_RPL (posix_spawn, int, + (pid_t *_Restrict_ __pid, + const char *_Restrict_ __path, + const posix_spawn_file_actions_t *_Restrict_ __file_actions, + const posix_spawnattr_t *_Restrict_ __attrp, + char *const argv[_Restrict_arr_], + char *const envp[_Restrict_arr_]) + _GL_ARG_NONNULL ((2, 5, 6))); +_GL_CXXALIAS_RPL (posix_spawn, int, + (pid_t *_Restrict_ __pid, + const char *_Restrict_ __path, + const posix_spawn_file_actions_t *_Restrict_ __file_actions, + const posix_spawnattr_t *_Restrict_ __attrp, + char *const argv[_Restrict_arr_], + char *const envp[_Restrict_arr_])); +# else +# if !@HAVE_POSIX_SPAWN@ +_GL_FUNCDECL_SYS (posix_spawn, int, + (pid_t *_Restrict_ __pid, + const char *_Restrict_ __path, + const posix_spawn_file_actions_t *_Restrict_ __file_actions, + const posix_spawnattr_t *_Restrict_ __attrp, + char *const argv[_Restrict_arr_], + char *const envp[_Restrict_arr_]) + _GL_ARG_NONNULL ((2, 5, 6))); +# endif +_GL_CXXALIAS_SYS (posix_spawn, int, + (pid_t *_Restrict_ __pid, + const char *_Restrict_ __path, + const posix_spawn_file_actions_t *_Restrict_ __file_actions, + const posix_spawnattr_t *_Restrict_ __attrp, + char *const argv[_Restrict_arr_], + char *const envp[_Restrict_arr_])); +# endif +_GL_CXXALIASWARN (posix_spawn); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawn +# if HAVE_RAW_DECL_POSIX_SPAWN +_GL_WARN_ON_USE (posix_spawn, "posix_spawn is unportable - " + "use gnulib module posix_spawn for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWNP@ +/* Similar to 'posix_spawn' but search for FILE in the PATH. + + This function is a possible cancellation points and therefore not + marked with __THROW. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnp rpl_posix_spawnp +# endif +_GL_FUNCDECL_RPL (posix_spawnp, int, + (pid_t *__pid, const char *__file, + const posix_spawn_file_actions_t *__file_actions, + const posix_spawnattr_t *__attrp, + char *const argv[], char *const envp[]) + _GL_ARG_NONNULL ((2, 5, 6))); +_GL_CXXALIAS_RPL (posix_spawnp, int, + (pid_t *__pid, const char *__file, + const posix_spawn_file_actions_t *__file_actions, + const posix_spawnattr_t *__attrp, + char *const argv[], char *const envp[])); +# else +# if !@HAVE_POSIX_SPAWN@ +_GL_FUNCDECL_SYS (posix_spawnp, int, + (pid_t *__pid, const char *__file, + const posix_spawn_file_actions_t *__file_actions, + const posix_spawnattr_t *__attrp, + char *const argv[], char *const envp[]) + _GL_ARG_NONNULL ((2, 5, 6))); +# endif +_GL_CXXALIAS_SYS (posix_spawnp, int, + (pid_t *__pid, const char *__file, + const posix_spawn_file_actions_t *__file_actions, + const posix_spawnattr_t *__attrp, + char *const argv[], char *const envp[])); +# endif +_GL_CXXALIASWARN (posix_spawnp); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnp +# if HAVE_RAW_DECL_POSIX_SPAWNP +_GL_WARN_ON_USE (posix_spawnp, "posix_spawnp is unportable - " + "use gnulib module posix_spawnp for portability"); +# endif +#endif + + +#if @GNULIB_POSIX_SPAWNATTR_INIT@ +/* Initialize data structure with attributes for 'spawn' to default values. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_init rpl_posix_spawnattr_init +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_init, int, (posix_spawnattr_t *__attr) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawnattr_init, int, (posix_spawnattr_t *__attr)); +# else +# if !@HAVE_POSIX_SPAWN@ +_GL_FUNCDECL_SYS (posix_spawnattr_init, int, (posix_spawnattr_t *__attr) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_init, int, (posix_spawnattr_t *__attr)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_init); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_init +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_INIT +_GL_WARN_ON_USE (posix_spawnattr_init, "posix_spawnattr_init is unportable - " + "use gnulib module posix_spawnattr_init for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_DESTROY@ +/* Free resources associated with ATTR. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_destroy rpl_posix_spawnattr_destroy +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr)); +# else +# if !@HAVE_POSIX_SPAWN@ +_GL_FUNCDECL_SYS (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_destroy); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_destroy +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_DESTROY +_GL_WARN_ON_USE (posix_spawnattr_destroy, + "posix_spawnattr_destroy is unportable - " + "use gnulib module posix_spawnattr_destroy for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +/* Store signal mask for signals with default handling from ATTR in + SIGDEFAULT. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_getsigdefault rpl_posix_spawnattr_getsigdefault +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_getsigdefault, int, + (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigdefault) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_getsigdefault, int, + (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigdefault)); +# else +# if !@HAVE_POSIX_SPAWN@ +_GL_FUNCDECL_SYS (posix_spawnattr_getsigdefault, int, + (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigdefault) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_getsigdefault, int, + (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigdefault)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_getsigdefault); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_getsigdefault +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGDEFAULT +_GL_WARN_ON_USE (posix_spawnattr_getsigdefault, + "posix_spawnattr_getsigdefault is unportable - " + "use gnulib module posix_spawnattr_getsigdefault for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +/* Set signal mask for signals with default handling in ATTR to SIGDEFAULT. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_setsigdefault rpl_posix_spawnattr_setsigdefault +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_setsigdefault, int, + (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigdefault) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_setsigdefault, int, + (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigdefault)); +# else +# if !@HAVE_POSIX_SPAWN@ +_GL_FUNCDECL_SYS (posix_spawnattr_setsigdefault, int, + (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigdefault) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_setsigdefault, int, + (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigdefault)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_setsigdefault); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_setsigdefault +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGDEFAULT +_GL_WARN_ON_USE (posix_spawnattr_setsigdefault, + "posix_spawnattr_setsigdefault is unportable - " + "use gnulib module posix_spawnattr_setsigdefault for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +/* Store signal mask for the new process from ATTR in SIGMASK. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_getsigmask rpl_posix_spawnattr_getsigmask +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_getsigmask, int, + (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigmask) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_getsigmask, int, + (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigmask)); +# else +# if !@HAVE_POSIX_SPAWN@ +_GL_FUNCDECL_SYS (posix_spawnattr_getsigmask, int, + (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigmask) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_getsigmask, int, + (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigmask)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_getsigmask); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_getsigmask +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGMASK +_GL_WARN_ON_USE (posix_spawnattr_getsigmask, + "posix_spawnattr_getsigmask is unportable - " + "use gnulib module posix_spawnattr_getsigmask for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +/* Set signal mask for the new process in ATTR to SIGMASK. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_setsigmask rpl_posix_spawnattr_setsigmask +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_setsigmask, int, + (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigmask) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_setsigmask, int, + (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigmask)); +# else +# if !@HAVE_POSIX_SPAWN@ +_GL_FUNCDECL_SYS (posix_spawnattr_setsigmask, int, + (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigmask) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_setsigmask, int, + (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigmask)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_setsigmask); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_setsigmask +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGMASK +_GL_WARN_ON_USE (posix_spawnattr_setsigmask, + "posix_spawnattr_setsigmask is unportable - " + "use gnulib module posix_spawnattr_setsigmask for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +/* Get flag word from the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_getflags rpl_posix_spawnattr_getflags +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_getflags, int, + (const posix_spawnattr_t *_Restrict_ __attr, + short int *_Restrict_ __flags) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_getflags, int, + (const posix_spawnattr_t *_Restrict_ __attr, + short int *_Restrict_ __flags)); +# else +# if !@HAVE_POSIX_SPAWN@ +_GL_FUNCDECL_SYS (posix_spawnattr_getflags, int, + (const posix_spawnattr_t *_Restrict_ __attr, + short int *_Restrict_ __flags) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_getflags, int, + (const posix_spawnattr_t *_Restrict_ __attr, + short int *_Restrict_ __flags)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_getflags); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_getflags +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETFLAGS +_GL_WARN_ON_USE (posix_spawnattr_getflags, + "posix_spawnattr_getflags is unportable - " + "use gnulib module posix_spawnattr_getflags for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +/* Store flags in the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_setflags rpl_posix_spawnattr_setflags +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_setflags, int, + (posix_spawnattr_t *__attr, short int __flags) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawnattr_setflags, int, + (posix_spawnattr_t *__attr, short int __flags)); +# else +# if !@HAVE_POSIX_SPAWN@ +_GL_FUNCDECL_SYS (posix_spawnattr_setflags, int, + (posix_spawnattr_t *__attr, short int __flags) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_setflags, int, + (posix_spawnattr_t *__attr, short int __flags)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_setflags); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_setflags +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETFLAGS +_GL_WARN_ON_USE (posix_spawnattr_setflags, + "posix_spawnattr_setflags is unportable - " + "use gnulib module posix_spawnattr_setflags for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +/* Get process group ID from the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_getpgroup rpl_posix_spawnattr_getpgroup +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_getpgroup, int, + (const posix_spawnattr_t *_Restrict_ __attr, + pid_t *_Restrict_ __pgroup) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_getpgroup, int, + (const posix_spawnattr_t *_Restrict_ __attr, + pid_t *_Restrict_ __pgroup)); +# else +# if !@HAVE_POSIX_SPAWN@ +_GL_FUNCDECL_SYS (posix_spawnattr_getpgroup, int, + (const posix_spawnattr_t *_Restrict_ __attr, + pid_t *_Restrict_ __pgroup) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_getpgroup, int, + (const posix_spawnattr_t *_Restrict_ __attr, + pid_t *_Restrict_ __pgroup)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_getpgroup); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_getpgroup +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETPGROUP +_GL_WARN_ON_USE (posix_spawnattr_getpgroup, + "posix_spawnattr_getpgroup is unportable - " + "use gnulib module posix_spawnattr_getpgroup for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +/* Store process group ID in the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_setpgroup rpl_posix_spawnattr_setpgroup +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_setpgroup, int, + (posix_spawnattr_t *__attr, pid_t __pgroup) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawnattr_setpgroup, int, + (posix_spawnattr_t *__attr, pid_t __pgroup)); +# else +# if !@HAVE_POSIX_SPAWN@ +_GL_FUNCDECL_SYS (posix_spawnattr_setpgroup, int, + (posix_spawnattr_t *__attr, pid_t __pgroup) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_setpgroup, int, + (posix_spawnattr_t *__attr, pid_t __pgroup)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_setpgroup); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_setpgroup +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETPGROUP +_GL_WARN_ON_USE (posix_spawnattr_setpgroup, + "posix_spawnattr_setpgroup is unportable - " + "use gnulib module posix_spawnattr_setpgroup for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +/* Get scheduling policy from the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_getschedpolicy rpl_posix_spawnattr_getschedpolicy +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_getschedpolicy, int, + (const posix_spawnattr_t *_Restrict_ __attr, + int *_Restrict_ __schedpolicy) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_getschedpolicy, int, + (const posix_spawnattr_t *_Restrict_ __attr, + int *_Restrict_ __schedpolicy)); +# else +# if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDULER == 0 +_GL_FUNCDECL_SYS (posix_spawnattr_getschedpolicy, int, + (const posix_spawnattr_t *_Restrict_ __attr, + int *_Restrict_ __schedpolicy) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_getschedpolicy, int, + (const posix_spawnattr_t *_Restrict_ __attr, + int *_Restrict_ __schedpolicy)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_getschedpolicy); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_getschedpolicy +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPOLICY +_GL_WARN_ON_USE (posix_spawnattr_getschedpolicy, + "posix_spawnattr_getschedpolicy is unportable - " + "use gnulib module posix_spawnattr_getschedpolicy for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +/* Store scheduling policy in the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_setschedpolicy rpl_posix_spawnattr_setschedpolicy +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_setschedpolicy, int, + (posix_spawnattr_t *__attr, int __schedpolicy) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawnattr_setschedpolicy, int, + (posix_spawnattr_t *__attr, int __schedpolicy)); +# else +# if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDULER == 0 +_GL_FUNCDECL_SYS (posix_spawnattr_setschedpolicy, int, + (posix_spawnattr_t *__attr, int __schedpolicy) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_setschedpolicy, int, + (posix_spawnattr_t *__attr, int __schedpolicy)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_setschedpolicy); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_setschedpolicy +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPOLICY +_GL_WARN_ON_USE (posix_spawnattr_setschedpolicy, + "posix_spawnattr_setschedpolicy is unportable - " + "use gnulib module posix_spawnattr_setschedpolicy for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +/* Get scheduling parameters from the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_getschedparam rpl_posix_spawnattr_getschedparam +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_getschedparam, int, + (const posix_spawnattr_t *_Restrict_ __attr, + struct sched_param *_Restrict_ __schedparam) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_getschedparam, int, + (const posix_spawnattr_t *_Restrict_ __attr, + struct sched_param *_Restrict_ __schedparam)); +# else +# if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDPARAM == 0 +_GL_FUNCDECL_SYS (posix_spawnattr_getschedparam, int, + (const posix_spawnattr_t *_Restrict_ __attr, + struct sched_param *_Restrict_ __schedparam) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_getschedparam, int, + (const posix_spawnattr_t *_Restrict_ __attr, + struct sched_param *_Restrict_ __schedparam)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_getschedparam); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_getschedparam +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPARAM +_GL_WARN_ON_USE (posix_spawnattr_getschedparam, + "posix_spawnattr_getschedparam is unportable - " + "use gnulib module posix_spawnattr_getschedparam for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +/* Store scheduling parameters in the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawnattr_setschedparam rpl_posix_spawnattr_setschedparam +# endif +_GL_FUNCDECL_RPL (posix_spawnattr_setschedparam, int, + (posix_spawnattr_t *_Restrict_ __attr, + const struct sched_param *_Restrict_ __schedparam) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawnattr_setschedparam, int, + (posix_spawnattr_t *_Restrict_ __attr, + const struct sched_param *_Restrict_ __schedparam)); +# else +# if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDPARAM == 0 +_GL_FUNCDECL_SYS (posix_spawnattr_setschedparam, int, + (posix_spawnattr_t *_Restrict_ __attr, + const struct sched_param *_Restrict_ __schedparam) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawnattr_setschedparam, int, + (posix_spawnattr_t *_Restrict_ __attr, + const struct sched_param *_Restrict_ __schedparam)); +# endif +_GL_CXXALIASWARN (posix_spawnattr_setschedparam); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawnattr_setschedparam +# if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPARAM +_GL_WARN_ON_USE (posix_spawnattr_setschedparam, + "posix_spawnattr_setschedparam is unportable - " + "use gnulib module posix_spawnattr_setschedparam for portability"); +# endif +#endif + + +#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +/* Initialize data structure for file attribute for 'spawn' call. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawn_file_actions_init rpl_posix_spawn_file_actions_init +# endif +_GL_FUNCDECL_RPL (posix_spawn_file_actions_init, int, + (posix_spawn_file_actions_t *__file_actions) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawn_file_actions_init, int, + (posix_spawn_file_actions_t *__file_actions)); +# else +# if !@HAVE_POSIX_SPAWN@ +_GL_FUNCDECL_SYS (posix_spawn_file_actions_init, int, + (posix_spawn_file_actions_t *__file_actions) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawn_file_actions_init, int, + (posix_spawn_file_actions_t *__file_actions)); +# endif +_GL_CXXALIASWARN (posix_spawn_file_actions_init); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawn_file_actions_init +# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_INIT +_GL_WARN_ON_USE (posix_spawn_file_actions_init, + "posix_spawn_file_actions_init is unportable - " + "use gnulib module posix_spawn_file_actions_init for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +/* Free resources associated with FILE-ACTIONS. */ +# if @REPLACE_POSIX_SPAWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawn_file_actions_destroy rpl_posix_spawn_file_actions_destroy +# endif +_GL_FUNCDECL_RPL (posix_spawn_file_actions_destroy, int, + (posix_spawn_file_actions_t *__file_actions) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawn_file_actions_destroy, int, + (posix_spawn_file_actions_t *__file_actions)); +# else +# if !@HAVE_POSIX_SPAWN@ +_GL_FUNCDECL_SYS (posix_spawn_file_actions_destroy, int, + (posix_spawn_file_actions_t *__file_actions) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawn_file_actions_destroy, int, + (posix_spawn_file_actions_t *__file_actions)); +# endif +_GL_CXXALIASWARN (posix_spawn_file_actions_destroy); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawn_file_actions_destroy +# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_DESTROY +_GL_WARN_ON_USE (posix_spawn_file_actions_destroy, + "posix_spawn_file_actions_destroy is unportable - " + "use gnulib module posix_spawn_file_actions_destroy for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +/* Add an action to FILE-ACTIONS which tells the implementation to call + 'open' for the given file during the 'spawn' call. */ +# if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawn_file_actions_addopen rpl_posix_spawn_file_actions_addopen +# endif +_GL_FUNCDECL_RPL (posix_spawn_file_actions_addopen, int, + (posix_spawn_file_actions_t *_Restrict_ __file_actions, + int __fd, + const char *_Restrict_ __path, int __oflag, mode_t __mode) + __THROW _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (posix_spawn_file_actions_addopen, int, + (posix_spawn_file_actions_t *_Restrict_ __file_actions, + int __fd, + const char *_Restrict_ __path, int __oflag, mode_t __mode)); +# else +# if !@HAVE_POSIX_SPAWN@ +_GL_FUNCDECL_SYS (posix_spawn_file_actions_addopen, int, + (posix_spawn_file_actions_t *_Restrict_ __file_actions, + int __fd, + const char *_Restrict_ __path, int __oflag, mode_t __mode) + __THROW _GL_ARG_NONNULL ((1, 3))); +# endif +_GL_CXXALIAS_SYS (posix_spawn_file_actions_addopen, int, + (posix_spawn_file_actions_t *_Restrict_ __file_actions, + int __fd, + const char *_Restrict_ __path, int __oflag, mode_t __mode)); +# endif +_GL_CXXALIASWARN (posix_spawn_file_actions_addopen); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawn_file_actions_addopen +# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN +_GL_WARN_ON_USE (posix_spawn_file_actions_addopen, + "posix_spawn_file_actions_addopen is unportable - " + "use gnulib module posix_spawn_file_actions_addopen for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +/* Add an action to FILE-ACTIONS which tells the implementation to call + 'close' for the given file descriptor during the 'spawn' call. */ +# if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawn_file_actions_addclose rpl_posix_spawn_file_actions_addclose +# endif +_GL_FUNCDECL_RPL (posix_spawn_file_actions_addclose, int, + (posix_spawn_file_actions_t *__file_actions, int __fd) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawn_file_actions_addclose, int, + (posix_spawn_file_actions_t *__file_actions, int __fd)); +# else +# if !@HAVE_POSIX_SPAWN@ +_GL_FUNCDECL_SYS (posix_spawn_file_actions_addclose, int, + (posix_spawn_file_actions_t *__file_actions, int __fd) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawn_file_actions_addclose, int, + (posix_spawn_file_actions_t *__file_actions, int __fd)); +# endif +_GL_CXXALIASWARN (posix_spawn_file_actions_addclose); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawn_file_actions_addclose +# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE +_GL_WARN_ON_USE (posix_spawn_file_actions_addclose, + "posix_spawn_file_actions_addclose is unportable - " + "use gnulib module posix_spawn_file_actions_addclose for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +/* Add an action to FILE-ACTIONS which tells the implementation to call + 'dup2' for the given file descriptors during the 'spawn' call. */ +# if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawn_file_actions_adddup2 rpl_posix_spawn_file_actions_adddup2 +# endif +_GL_FUNCDECL_RPL (posix_spawn_file_actions_adddup2, int, + (posix_spawn_file_actions_t *__file_actions, + int __fd, int __newfd) + __THROW _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (posix_spawn_file_actions_adddup2, int, + (posix_spawn_file_actions_t *__file_actions, + int __fd, int __newfd)); +# else +# if !@HAVE_POSIX_SPAWN@ +_GL_FUNCDECL_SYS (posix_spawn_file_actions_adddup2, int, + (posix_spawn_file_actions_t *__file_actions, + int __fd, int __newfd) + __THROW _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (posix_spawn_file_actions_adddup2, int, + (posix_spawn_file_actions_t *__file_actions, + int __fd, int __newfd)); +# endif +_GL_CXXALIASWARN (posix_spawn_file_actions_adddup2); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawn_file_actions_adddup2 +# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 +_GL_WARN_ON_USE (posix_spawn_file_actions_adddup2, + "posix_spawn_file_actions_adddup2 is unportable - " + "use gnulib module posix_spawn_file_actions_adddup2 for portability"); +# endif +#endif + +#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +/* Add an action to FILE-ACTIONS which tells the implementation to call + 'chdir' to the given directory during the 'spawn' call. */ +# if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define posix_spawn_file_actions_addchdir rpl_posix_spawn_file_actions_addchdir +# endif +_GL_FUNCDECL_RPL (posix_spawn_file_actions_addchdir, int, + (posix_spawn_file_actions_t *_Restrict_ __file_actions, + const char *_Restrict_ __path) + __THROW _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (posix_spawn_file_actions_addchdir, int, + (posix_spawn_file_actions_t *_Restrict_ __file_actions, + const char *_Restrict_ __path)); +# else +# if !@HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +_GL_FUNCDECL_SYS (posix_spawn_file_actions_addchdir, int, + (posix_spawn_file_actions_t *_Restrict_ __file_actions, + const char *_Restrict_ __path) + __THROW _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (posix_spawn_file_actions_addchdir, int, + (posix_spawn_file_actions_t *_Restrict_ __file_actions, + const char *_Restrict_ __path)); +# endif +_GL_CXXALIASWARN (posix_spawn_file_actions_addchdir); +#elif defined GNULIB_POSIXCHECK +# undef posix_spawn_file_actions_addchdir +# if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR +_GL_WARN_ON_USE (posix_spawn_file_actions_addchdir, + "posix_spawn_file_actions_addchdir is unportable - " + "use gnulib module posix_spawn_file_actions_addchdir for portability"); +# endif +#endif + + +#endif /* _@GUARD_PREFIX@_SPAWN_H */ +#endif /* _@GUARD_PREFIX@_SPAWN_H */ diff --git a/devspec.en_US/project/recutils/lib/spawn_faction_addopen.c b/devspec.en_US/project/recutils/lib/spawn_faction_addopen.c new file mode 100755 index 0000000..6b4422f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/spawn_faction_addopen.c @@ -0,0 +1,73 @@ +/* Copyright (C) 2000, 2009-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <spawn.h> + +#include <errno.h> +#include <unistd.h> + +#if !_LIBC +# define __sysconf(open_max) getdtablesize () +#endif + +#if REPLACE_POSIX_SPAWN +# include "spawn_int.h" +#endif + +/* Add an action to FILE-ACTIONS which tells the implementation to call + 'open' for the given file during the 'spawn' call. */ +int +posix_spawn_file_actions_addopen (posix_spawn_file_actions_t *file_actions, + int fd, const char *path, int oflag, + mode_t mode) +#undef posix_spawn_file_actions_addopen +{ + int maxfd = __sysconf (_SC_OPEN_MAX); + + /* Test for the validity of the file descriptor. */ + if (fd < 0 || fd >= maxfd) + return EBADF; + +#if !REPLACE_POSIX_SPAWN + return posix_spawn_file_actions_addopen (file_actions, fd, path, oflag, mode); +#else + /* Allocate more memory if needed. */ + if (file_actions->_used == file_actions->_allocated + && __posix_spawn_file_actions_realloc (file_actions) != 0) + /* This can only mean we ran out of memory. */ + return ENOMEM; + + { + struct __spawn_action *rec; + + /* Add the new value. */ + rec = &file_actions->_actions[file_actions->_used]; + rec->tag = spawn_do_open; + rec->action.open_action.fd = fd; + rec->action.open_action.path = path; + rec->action.open_action.oflag = oflag; + rec->action.open_action.mode = mode; + + /* Account for the new entry. */ + ++file_actions->_used; + + return 0; + } +#endif +} diff --git a/devspec.en_US/project/recutils/lib/spawn_faction_destroy.c b/devspec.en_US/project/recutils/lib/spawn_faction_destroy.c new file mode 100755 index 0000000..6d9ec80 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/spawn_faction_destroy.c @@ -0,0 +1,31 @@ +/* Copyright (C) 2000, 2009-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <spawn.h> + +#include <stdlib.h> + +/* Initialize data structure for file attribute for 'spawn' call. */ +int +posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions) +{ + /* Free the memory allocated. */ + free (file_actions->_actions); + return 0; +} diff --git a/devspec.en_US/project/recutils/lib/spawn_faction_init.c b/devspec.en_US/project/recutils/lib/spawn_faction_init.c new file mode 100755 index 0000000..72e2c73 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/spawn_faction_init.c @@ -0,0 +1,56 @@ +/* Copyright (C) 2000, 2009-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <spawn.h> + +#include <errno.h> +#include <stdlib.h> +#include <string.h> + +#include "spawn_int.h" + + +/* Function used to increase the size of the allocated array. This + function is called from the 'add'-functions. */ +int +__posix_spawn_file_actions_realloc (posix_spawn_file_actions_t *file_actions) +{ + int newalloc = file_actions->_allocated + 8; + void *newmem = realloc (file_actions->_actions, + newalloc * sizeof (struct __spawn_action)); + + if (newmem == NULL) + /* Not enough memory. */ + return ENOMEM; + + file_actions->_actions = (struct __spawn_action *) newmem; + file_actions->_allocated = newalloc; + + return 0; +} + + +/* Initialize data structure for file attribute for 'spawn' call. */ +int +posix_spawn_file_actions_init (posix_spawn_file_actions_t *file_actions) +{ + /* Simply clear all the elements. */ + memset (file_actions, '\0', sizeof (*file_actions)); + return 0; +} diff --git a/devspec.en_US/project/recutils/lib/spawn_int.h b/devspec.en_US/project/recutils/lib/spawn_int.h new file mode 100755 index 0000000..06b8004 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/spawn_int.h @@ -0,0 +1,67 @@ +/* Copyright (C) 2000, 2008-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <sys/types.h> + +/* Data structure to contain the action information. */ +struct __spawn_action +{ + enum + { + spawn_do_close, + spawn_do_dup2, + spawn_do_open, + spawn_do_chdir + } tag; + + union + { + struct + { + int fd; + } close_action; + struct + { + int fd; + int newfd; + } dup2_action; + struct + { + int fd; + const char *path; + int oflag; + mode_t mode; + } open_action; + struct + { + const char *path; + } chdir_action; + } action; +}; + +#if !_LIBC +# define __posix_spawn_file_actions_realloc gl_posix_spawn_file_actions_realloc +#endif +extern int __posix_spawn_file_actions_realloc (posix_spawn_file_actions_t * + file_actions); + +#if !_LIBC +# define __spawni gl_posix_spawn_internal +#endif +extern int __spawni (pid_t *pid, const char *path, + const posix_spawn_file_actions_t *file_actions, + const posix_spawnattr_t *attrp, char *const argv[], + char *const envp[], int use_path); diff --git a/devspec.en_US/project/recutils/lib/spawnattr_destroy.c b/devspec.en_US/project/recutils/lib/spawnattr_destroy.c new file mode 100755 index 0000000..01bd927 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/spawnattr_destroy.c @@ -0,0 +1,28 @@ +/* Copyright (C) 2000, 2009-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <spawn.h> + +/* Initialize data structure for file attribute for 'spawn' call. */ +int +posix_spawnattr_destroy (posix_spawnattr_t *attr) +{ + /* Nothing to do in the moment. */ + return 0; +} diff --git a/devspec.en_US/project/recutils/lib/spawnattr_init.c b/devspec.en_US/project/recutils/lib/spawnattr_init.c new file mode 100755 index 0000000..6fd6ca9 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/spawnattr_init.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2000, 2009-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <spawn.h> + +#include <string.h> + +/* Initialize data structure for file attribute for 'spawn' call. */ +int +posix_spawnattr_init (posix_spawnattr_t *attr) +{ + /* All elements have to be initialized to the default values which + is generally zero. */ + memset (attr, '\0', sizeof (*attr)); + + return 0; +} diff --git a/devspec.en_US/project/recutils/lib/spawnattr_setflags.c b/devspec.en_US/project/recutils/lib/spawnattr_setflags.c new file mode 100755 index 0000000..a8f557c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/spawnattr_setflags.c @@ -0,0 +1,45 @@ +/* Copyright (C) 2000, 2004, 2009-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <spawn.h> + +#include <errno.h> +#include <string.h> + +#define ALL_FLAGS (POSIX_SPAWN_RESETIDS \ + | POSIX_SPAWN_SETPGROUP \ + | POSIX_SPAWN_SETSIGDEF \ + | POSIX_SPAWN_SETSIGMASK \ + | POSIX_SPAWN_SETSCHEDPARAM \ + | POSIX_SPAWN_SETSCHEDULER \ + | POSIX_SPAWN_USEVFORK) + +/* Store flags in the attribute structure. */ +int +posix_spawnattr_setflags (posix_spawnattr_t *attr, short int flags) +{ + /* Check no invalid bits are set. */ + if (flags & ~ALL_FLAGS) + return EINVAL; + + /* Store the flag word. */ + attr->_flags = flags; + + return 0; +} diff --git a/devspec.en_US/project/recutils/lib/spawnattr_setsigmask.c b/devspec.en_US/project/recutils/lib/spawnattr_setsigmask.c new file mode 100755 index 0000000..e1713c5 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/spawnattr_setsigmask.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2000, 2009-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <spawn.h> + +#include <string.h> + +/* Set signal mask for the new process in ATTR to SIGMASK. */ +int +posix_spawnattr_setsigmask (posix_spawnattr_t *attr, + const sigset_t *sigmask) +{ + /* Copy the sigset_t data to the user buffer. */ + memcpy (&attr->_ss, sigmask, sizeof (sigset_t)); + + return 0; +} diff --git a/devspec.en_US/project/recutils/lib/spawni.c b/devspec.en_US/project/recutils/lib/spawni.c new file mode 100755 index 0000000..39e99a0 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/spawni.c @@ -0,0 +1,380 @@ +/* Guts of POSIX spawn interface. Generic POSIX.1 version. + Copyright (C) 2000-2006, 2008-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <spawn.h> +#include "spawn_int.h" + +#include <alloca.h> +#include <errno.h> + +#include <fcntl.h> +#ifndef O_LARGEFILE +# define O_LARGEFILE 0 +#endif + +#if _LIBC || HAVE_PATHS_H +# include <paths.h> +#else +# define _PATH_BSHELL BOURNE_SHELL +#endif + +#include <signal.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#if _LIBC +# include <not-cancel.h> +#else +# define close_not_cancel close +# define open_not_cancel open +#endif + +#if _LIBC +# include <local-setxid.h> +#else +# if !HAVE_SETEUID +# define seteuid(id) setresuid (-1, id, -1) +# endif +# if !HAVE_SETEGID +# define setegid(id) setresgid (-1, id, -1) +# endif +# define local_seteuid(id) seteuid (id) +# define local_setegid(id) setegid (id) +#endif + +#if _LIBC +# define alloca __alloca +# define execve __execve +# define dup2 __dup2 +# define fork __fork +# define getgid __getgid +# define getuid __getuid +# define sched_setparam __sched_setparam +# define sched_setscheduler __sched_setscheduler +# define setpgid __setpgid +# define sigaction __sigaction +# define sigismember __sigismember +# define sigprocmask __sigprocmask +# define strchrnul __strchrnul +# define vfork __vfork +#else +# undef internal_function +# define internal_function /* empty */ +#endif + + +/* The Unix standard contains a long explanation of the way to signal + an error after the fork() was successful. Since no new wait status + was wanted there is no way to signal an error using one of the + available methods. The committee chose to signal an error by a + normal program exit with the exit code 127. */ +#define SPAWN_ERROR 127 + + +#if defined _WIN32 && ! defined __CYGWIN__ + +/* Native Windows API. */ +int +__spawni (pid_t *pid, const char *file, + const posix_spawn_file_actions_t *file_actions, + const posix_spawnattr_t *attrp, char *const argv[], + char *const envp[], int use_path) +{ + /* Not yet implemented. */ + return ENOSYS; +} + +#else + + +/* The file is accessible but it is not an executable file. Invoke + the shell to interpret it as a script. */ +static void +internal_function +script_execute (const char *file, char *const argv[], char *const envp[]) +{ + /* Count the arguments. */ + int argc = 0; + while (argv[argc++]) + ; + + /* Construct an argument list for the shell. */ + { + char **new_argv = (char **) alloca ((argc + 1) * sizeof (char *)); + new_argv[0] = (char *) _PATH_BSHELL; + new_argv[1] = (char *) file; + while (argc > 1) + { + new_argv[argc] = argv[argc - 1]; + --argc; + } + + /* Execute the shell. */ + execve (new_argv[0], new_argv, envp); + } +} + + +/* Spawn a new process executing PATH with the attributes describes in *ATTRP. + Before running the process perform the actions described in FILE-ACTIONS. */ +int +__spawni (pid_t *pid, const char *file, + const posix_spawn_file_actions_t *file_actions, + const posix_spawnattr_t *attrp, char *const argv[], + char *const envp[], int use_path) +{ + pid_t new_pid; + char *path, *p, *name; + size_t len; + size_t pathlen; + + /* Do this once. */ + short int flags = attrp == NULL ? 0 : attrp->_flags; + + /* Avoid gcc warning + "variable 'flags' might be clobbered by 'longjmp' or 'vfork'" */ + (void) &flags; + + /* Generate the new process. */ +#if HAVE_VFORK + if ((flags & POSIX_SPAWN_USEVFORK) != 0 + /* If no major work is done, allow using vfork. Note that we + might perform the path searching. But this would be done by + a call to execvp(), too, and such a call must be OK according + to POSIX. */ + || ((flags & (POSIX_SPAWN_SETSIGMASK | POSIX_SPAWN_SETSIGDEF + | POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER + | POSIX_SPAWN_SETPGROUP | POSIX_SPAWN_RESETIDS)) == 0 + && file_actions == NULL)) + new_pid = vfork (); + else +#endif + new_pid = fork (); + + if (new_pid != 0) + { + if (new_pid < 0) + return errno; + + /* The call was successful. Store the PID if necessary. */ + if (pid != NULL) + *pid = new_pid; + + return 0; + } + + /* Set signal mask. */ + if ((flags & POSIX_SPAWN_SETSIGMASK) != 0 + && sigprocmask (SIG_SETMASK, &attrp->_ss, NULL) != 0) + _exit (SPAWN_ERROR); + + /* Set signal default action. */ + if ((flags & POSIX_SPAWN_SETSIGDEF) != 0) + { + /* We have to iterate over all signals. This could possibly be + done better but it requires system specific solutions since + the sigset_t data type can be very different on different + architectures. */ + int sig; + struct sigaction sa; + + memset (&sa, '\0', sizeof (sa)); + sa.sa_handler = SIG_DFL; + + for (sig = 1; sig <= NSIG; ++sig) + if (sigismember (&attrp->_sd, sig) != 0 + && sigaction (sig, &sa, NULL) != 0) + _exit (SPAWN_ERROR); + + } + +#if (_LIBC ? defined _POSIX_PRIORITY_SCHEDULING : HAVE_SCHED_SETPARAM && HAVE_SCHED_SETSCHEDULER) + /* Set the scheduling algorithm and parameters. */ + if ((flags & (POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER)) + == POSIX_SPAWN_SETSCHEDPARAM) + { + if (sched_setparam (0, &attrp->_sp) == -1) + _exit (SPAWN_ERROR); + } + else if ((flags & POSIX_SPAWN_SETSCHEDULER) != 0) + { + if (sched_setscheduler (0, attrp->_policy, + (flags & POSIX_SPAWN_SETSCHEDPARAM) != 0 + ? &attrp->_sp : NULL) == -1) + _exit (SPAWN_ERROR); + } +#endif + + /* Set the process group ID. */ + if ((flags & POSIX_SPAWN_SETPGROUP) != 0 + && setpgid (0, attrp->_pgrp) != 0) + _exit (SPAWN_ERROR); + + /* Set the effective user and group IDs. */ + if ((flags & POSIX_SPAWN_RESETIDS) != 0 + && (local_seteuid (getuid ()) != 0 + || local_setegid (getgid ()) != 0)) + _exit (SPAWN_ERROR); + + /* Execute the file actions. */ + if (file_actions != NULL) + { + int cnt; + + for (cnt = 0; cnt < file_actions->_used; ++cnt) + { + struct __spawn_action *action = &file_actions->_actions[cnt]; + + switch (action->tag) + { + case spawn_do_close: + if (close_not_cancel (action->action.close_action.fd) != 0) + /* Signal the error. */ + _exit (SPAWN_ERROR); + break; + + case spawn_do_open: + { + int new_fd = open_not_cancel (action->action.open_action.path, + action->action.open_action.oflag + | O_LARGEFILE, + action->action.open_action.mode); + + if (new_fd == -1) + /* The 'open' call failed. */ + _exit (SPAWN_ERROR); + + /* Make sure the desired file descriptor is used. */ + if (new_fd != action->action.open_action.fd) + { + if (dup2 (new_fd, action->action.open_action.fd) + != action->action.open_action.fd) + /* The 'dup2' call failed. */ + _exit (SPAWN_ERROR); + + if (close_not_cancel (new_fd) != 0) + /* The 'close' call failed. */ + _exit (SPAWN_ERROR); + } + } + break; + + case spawn_do_dup2: + if (dup2 (action->action.dup2_action.fd, + action->action.dup2_action.newfd) + != action->action.dup2_action.newfd) + /* The 'dup2' call failed. */ + _exit (SPAWN_ERROR); + break; + + case spawn_do_chdir: + if (chdir (action->action.chdir_action.path) < 0) + /* The 'chdir' call failed. */ + _exit (SPAWN_ERROR); + break; + } + } + } + + if (! use_path || strchr (file, '/') != NULL) + { + /* The FILE parameter is actually a path. */ + execve (file, argv, envp); + + if (errno == ENOEXEC) + script_execute (file, argv, envp); + + /* Oh, oh. 'execve' returns. This is bad. */ + _exit (SPAWN_ERROR); + } + + /* We have to search for FILE on the path. */ + path = getenv ("PATH"); + if (path == NULL) + { +#if HAVE_CONFSTR + /* There is no 'PATH' in the environment. + The default search path is the current directory + followed by the path 'confstr' returns for '_CS_PATH'. */ + len = confstr (_CS_PATH, (char *) NULL, 0); + path = (char *) alloca (1 + len); + path[0] = ':'; + (void) confstr (_CS_PATH, path + 1, len); +#else + /* Pretend that the PATH contains only the current directory. */ + path = ""; +#endif + } + + len = strlen (file) + 1; + pathlen = strlen (path); + name = alloca (pathlen + len + 1); + /* Copy the file name at the top. */ + name = (char *) memcpy (name + pathlen + 1, file, len); + /* And add the slash. */ + *--name = '/'; + + p = path; + do + { + char *startp; + + path = p; + p = strchrnul (path, ':'); + + if (p == path) + /* Two adjacent colons, or a colon at the beginning or the end + of 'PATH' means to search the current directory. */ + startp = name + 1; + else + startp = (char *) memcpy (name - (p - path), path, p - path); + + /* Try to execute this name. If it works, execv will not return. */ + execve (startp, argv, envp); + + if (errno == ENOEXEC) + script_execute (startp, argv, envp); + + switch (errno) + { + case EACCES: + case ENOENT: + case ESTALE: + case ENOTDIR: + /* Those errors indicate the file is missing or not executable + by us, in which case we want to just try the next path + directory. */ + break; + + default: + /* Some other error means we found an executable file, but + something went wrong executing it; return the error to our + caller. */ + _exit (SPAWN_ERROR); + } + } + while (*p++ != '\0'); + + /* Return with an error. */ + _exit (SPAWN_ERROR); +} + +#endif diff --git a/devspec.en_US/project/recutils/lib/spawnp.c b/devspec.en_US/project/recutils/lib/spawnp.c new file mode 100755 index 0000000..0f15069 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/spawnp.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2000, 2009-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <spawn.h> + +#include "spawn_int.h" + +/* Spawn a new process executing FILE with the attributes describes in *ATTRP. + Before running the process perform the actions described in FILE-ACTIONS. */ +int +posix_spawnp (pid_t *pid, const char *file, + const posix_spawn_file_actions_t *file_actions, + const posix_spawnattr_t *attrp, char *const argv[], + char *const envp[]) +{ + return __spawni (pid, file, file_actions, attrp, argv, envp, 1); +} diff --git a/devspec.en_US/project/recutils/lib/stat-macros.h b/devspec.en_US/project/recutils/lib/stat-macros.h new file mode 100755 index 0000000..690216c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/stat-macros.h @@ -0,0 +1,3 @@ +/* All the mode bits that can be affected by chmod. */ +#define CHMOD_MODE_BITS \ + (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO) diff --git a/devspec.en_US/project/recutils/lib/stat-time.c b/devspec.en_US/project/recutils/lib/stat-time.c new file mode 100755 index 0000000..81b83dd --- /dev/null +++ b/devspec.en_US/project/recutils/lib/stat-time.c @@ -0,0 +1,3 @@ +#include <config.h> +#define _GL_STAT_TIME_INLINE _GL_EXTERN_INLINE +#include "stat-time.h" diff --git a/devspec.en_US/project/recutils/lib/stat-time.h b/devspec.en_US/project/recutils/lib/stat-time.h new file mode 100755 index 0000000..d4f1f96 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/stat-time.h @@ -0,0 +1,252 @@ +/* stat-related time functions. + + Copyright (C) 2005, 2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert. */ + +#ifndef STAT_TIME_H +#define STAT_TIME_H 1 + +#include "intprops.h" + +#include <errno.h> +#include <stddef.h> +#include <sys/stat.h> +#include <time.h> + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_STAT_TIME_INLINE +# define _GL_STAT_TIME_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type + struct timespec, if available. If not, then STAT_TIMESPEC_NS (ST, + ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST, + if available. ST_XTIM can be st_atim, st_ctim, st_mtim, or st_birthtim + for access, status change, data modification, or birth (creation) + time respectively. + + These macros are private to stat-time.h. */ +#if _GL_WINDOWS_STAT_TIMESPEC || defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC +# if _GL_WINDOWS_STAT_TIMESPEC || defined TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC +# define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim) +# else +# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.tv_nsec) +# endif +#elif defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC +# define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim##espec) +#elif defined HAVE_STRUCT_STAT_ST_ATIMENSEC +# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim##ensec) +#elif defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC +# define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.st__tim.tv_nsec) +#endif + +/* Return the nanosecond component of *ST's access time. */ +_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE +get_stat_atime_ns (struct stat const *st) +{ +# if defined STAT_TIMESPEC + return STAT_TIMESPEC (st, st_atim).tv_nsec; +# elif defined STAT_TIMESPEC_NS + return STAT_TIMESPEC_NS (st, st_atim); +# else + return 0; +# endif +} + +/* Return the nanosecond component of *ST's status change time. */ +_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE +get_stat_ctime_ns (struct stat const *st) +{ +# if defined STAT_TIMESPEC + return STAT_TIMESPEC (st, st_ctim).tv_nsec; +# elif defined STAT_TIMESPEC_NS + return STAT_TIMESPEC_NS (st, st_ctim); +# else + return 0; +# endif +} + +/* Return the nanosecond component of *ST's data modification time. */ +_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE +get_stat_mtime_ns (struct stat const *st) +{ +# if defined STAT_TIMESPEC + return STAT_TIMESPEC (st, st_mtim).tv_nsec; +# elif defined STAT_TIMESPEC_NS + return STAT_TIMESPEC_NS (st, st_mtim); +# else + return 0; +# endif +} + +/* Return the nanosecond component of *ST's birth time. */ +_GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE +get_stat_birthtime_ns (struct stat const *st _GL_UNUSED) +{ +# if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC + return STAT_TIMESPEC (st, st_birthtim).tv_nsec; +# elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC + return STAT_TIMESPEC_NS (st, st_birthtim); +# else + return 0; +# endif +} + +/* Return *ST's access time. */ +_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE +get_stat_atime (struct stat const *st) +{ +#ifdef STAT_TIMESPEC + return STAT_TIMESPEC (st, st_atim); +#else + struct timespec t; + t.tv_sec = st->st_atime; + t.tv_nsec = get_stat_atime_ns (st); + return t; +#endif +} + +/* Return *ST's status change time. */ +_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE +get_stat_ctime (struct stat const *st) +{ +#ifdef STAT_TIMESPEC + return STAT_TIMESPEC (st, st_ctim); +#else + struct timespec t; + t.tv_sec = st->st_ctime; + t.tv_nsec = get_stat_ctime_ns (st); + return t; +#endif +} + +/* Return *ST's data modification time. */ +_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE +get_stat_mtime (struct stat const *st) +{ +#ifdef STAT_TIMESPEC + return STAT_TIMESPEC (st, st_mtim); +#else + struct timespec t; + t.tv_sec = st->st_mtime; + t.tv_nsec = get_stat_mtime_ns (st); + return t; +#endif +} + +/* Return *ST's birth time, if available; otherwise return a value + with tv_sec and tv_nsec both equal to -1. */ +_GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE +get_stat_birthtime (struct stat const *st _GL_UNUSED) +{ + struct timespec t; + +#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ + || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC) + t = STAT_TIMESPEC (st, st_birthtim); +#elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC + t.tv_sec = st->st_birthtime; + t.tv_nsec = st->st_birthtimensec; +#elif defined _WIN32 && ! defined __CYGWIN__ + /* Native Windows platforms (but not Cygwin) put the "file creation + time" in st_ctime (!). See + <https://msdn.microsoft.com/en-us/library/14h5k7ff(VS.80).aspx>. */ +# if _GL_WINDOWS_STAT_TIMESPEC + t = st->st_ctim; +# else + t.tv_sec = st->st_ctime; + t.tv_nsec = 0; +# endif +#else + /* Birth time is not supported. */ + t.tv_sec = -1; + t.tv_nsec = -1; +#endif + +#if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ + || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC \ + || defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC) + /* FreeBSD and NetBSD sometimes signal the absence of knowledge by + using zero. Attempt to work around this problem. Alas, this can + report failure even for valid timestamps. Also, NetBSD + sometimes returns junk in the birth time fields; work around this + bug if it is detected. */ + if (! (t.tv_sec && 0 <= t.tv_nsec && t.tv_nsec < 1000000000)) + { + t.tv_sec = -1; + t.tv_nsec = -1; + } +#endif + + return t; +} + +/* If a stat-like function returned RESULT, normalize the timestamps + in *ST, in case this platform suffers from the Solaris 11 bug where + tv_nsec might be negative. Return the adjusted RESULT, setting + errno to EOVERFLOW if normalization overflowed. This function + is intended to be private to this .h file. */ +_GL_STAT_TIME_INLINE int +stat_time_normalize (int result, struct stat *st _GL_UNUSED) +{ +#if defined __sun && defined STAT_TIMESPEC + if (result == 0) + { + long int timespec_hz = 1000000000; + short int const ts_off[] = { offsetof (struct stat, st_atim), + offsetof (struct stat, st_mtim), + offsetof (struct stat, st_ctim) }; + int i; + for (i = 0; i < sizeof ts_off / sizeof *ts_off; i++) + { + struct timespec *ts = (struct timespec *) ((char *) st + ts_off[i]); + long int q = ts->tv_nsec / timespec_hz; + long int r = ts->tv_nsec % timespec_hz; + if (r < 0) + { + r += timespec_hz; + q--; + } + ts->tv_nsec = r; + /* Overflow is possible, as Solaris 11 stat can yield + tv_sec == TYPE_MINIMUM (time_t) && tv_nsec == -1000000000. + INT_ADD_WRAPV is OK, since time_t is signed on Solaris. */ + if (INT_ADD_WRAPV (q, ts->tv_sec, &ts->tv_sec)) + { + errno = EOVERFLOW; + return -1; + } + } + } +#endif + return result; +} + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif diff --git a/devspec.en_US/project/recutils/lib/stat-w32.c b/devspec.en_US/project/recutils/lib/stat-w32.c new file mode 100755 index 0000000..ffa9942 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/stat-w32.c @@ -0,0 +1,425 @@ +/* Core of implementation of fstat and stat for native Windows. + Copyright (C) 2017-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible. */ + +#include <config.h> + +#if defined _WIN32 && ! defined __CYGWIN__ + +/* Ensure that <windows.h> defines FILE_ID_INFO. */ +#undef _WIN32_WINNT +#define _WIN32_WINNT _WIN32_WINNT_WIN8 + +#include <sys/types.h> +#include <sys/stat.h> +#include <errno.h> +#include <limits.h> +#include <string.h> +#include <unistd.h> +#include <windows.h> + +/* Specification. */ +#include "stat-w32.h" + +#include "pathmax.h" +#include "verify.h" + +/* Avoid warnings from gcc -Wcast-function-type. */ +#define GetProcAddress \ + (void *) GetProcAddress + +#if _GL_WINDOWS_STAT_INODES == 2 +/* GetFileInformationByHandleEx was introduced only in Windows Vista. */ +typedef DWORD (WINAPI * GetFileInformationByHandleExFuncType) (HANDLE hFile, + FILE_INFO_BY_HANDLE_CLASS fiClass, + LPVOID lpBuffer, + DWORD dwBufferSize); +static GetFileInformationByHandleExFuncType GetFileInformationByHandleExFunc = NULL; +#endif +/* GetFinalPathNameByHandle was introduced only in Windows Vista. */ +typedef DWORD (WINAPI * GetFinalPathNameByHandleFuncType) (HANDLE hFile, + LPTSTR lpFilePath, + DWORD lenFilePath, + DWORD dwFlags); +static GetFinalPathNameByHandleFuncType GetFinalPathNameByHandleFunc = NULL; +static BOOL initialized = FALSE; + +static void +initialize (void) +{ + HMODULE kernel32 = LoadLibrary ("kernel32.dll"); + if (kernel32 != NULL) + { +#if _GL_WINDOWS_STAT_INODES == 2 + GetFileInformationByHandleExFunc = + (GetFileInformationByHandleExFuncType) GetProcAddress (kernel32, "GetFileInformationByHandleEx"); +#endif + GetFinalPathNameByHandleFunc = + (GetFinalPathNameByHandleFuncType) GetProcAddress (kernel32, "GetFinalPathNameByHandleA"); + } + initialized = TRUE; +} + +/* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */ +#if _GL_WINDOWS_STAT_TIMESPEC +struct timespec +_gl_convert_FILETIME_to_timespec (const FILETIME *ft) +{ + struct timespec result; + /* FILETIME: <https://msdn.microsoft.com/en-us/library/ms724284.aspx> */ + unsigned long long since_1601 = + ((unsigned long long) ft->dwHighDateTime << 32) + | (unsigned long long) ft->dwLowDateTime; + if (since_1601 == 0) + { + result.tv_sec = 0; + result.tv_nsec = 0; + } + else + { + /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 + leap years, in total 134774 days. */ + unsigned long long since_1970 = + since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000; + result.tv_sec = since_1970 / (unsigned long long) 10000000; + result.tv_nsec = (unsigned long) (since_1970 % (unsigned long long) 10000000) * 100; + } + return result; +} +#else +time_t +_gl_convert_FILETIME_to_POSIX (const FILETIME *ft) +{ + /* FILETIME: <https://msdn.microsoft.com/en-us/library/ms724284.aspx> */ + unsigned long long since_1601 = + ((unsigned long long) ft->dwHighDateTime << 32) + | (unsigned long long) ft->dwLowDateTime; + if (since_1601 == 0) + return 0; + else + { + /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 + leap years, in total 134774 days. */ + unsigned long long since_1970 = + since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000; + return since_1970 / (unsigned long long) 10000000; + } +} +#endif + +/* Fill *BUF with information about the file designated by H. + PATH is the file name, if known, otherwise NULL. + Return 0 if successful, or -1 with errno set upon failure. */ +int +_gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf) +{ + /* GetFileType + <https://msdn.microsoft.com/en-us/library/aa364960.aspx> */ + DWORD type = GetFileType (h); + if (type == FILE_TYPE_DISK) + { + if (!initialized) + initialize (); + + /* st_mode can be determined through + GetFileAttributesEx + <https://msdn.microsoft.com/en-us/library/aa364946.aspx> + <https://msdn.microsoft.com/en-us/library/aa365739.aspx> + or through + GetFileInformationByHandle + <https://msdn.microsoft.com/en-us/library/aa364952.aspx> + <https://msdn.microsoft.com/en-us/library/aa363788.aspx> + or through + GetFileInformationByHandleEx with argument FileBasicInfo + <https://msdn.microsoft.com/en-us/library/aa364953.aspx> + <https://msdn.microsoft.com/en-us/library/aa364217.aspx> + The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ + BY_HANDLE_FILE_INFORMATION info; + if (! GetFileInformationByHandle (h, &info)) + goto failed; + + /* Test for error conditions before starting to fill *buf. */ + if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0) + { + errno = EOVERFLOW; + return -1; + } + +#if _GL_WINDOWS_STAT_INODES + /* st_ino can be determined through + GetFileInformationByHandle + <https://msdn.microsoft.com/en-us/library/aa364952.aspx> + <https://msdn.microsoft.com/en-us/library/aa363788.aspx> + as 64 bits, or through + GetFileInformationByHandleEx with argument FileIdInfo + <https://msdn.microsoft.com/en-us/library/aa364953.aspx> + <https://msdn.microsoft.com/en-us/library/hh802691.aspx> + as 128 bits. + The latter requires -D_WIN32_WINNT=_WIN32_WINNT_WIN8 or higher. */ + /* Experiments show that GetFileInformationByHandleEx does not provide + much more information than GetFileInformationByHandle: + * The dwVolumeSerialNumber from GetFileInformationByHandle is equal + to the low 32 bits of the 64-bit VolumeSerialNumber from + GetFileInformationByHandleEx, and is apparently sufficient for + identifying the device. + * The nFileIndex from GetFileInformationByHandle is equal to the low + 64 bits of the 128-bit FileId from GetFileInformationByHandleEx, + and the high 64 bits of this 128-bit FileId are zero. + * On a FAT file system, GetFileInformationByHandleEx fails with error + ERROR_INVALID_PARAMETER, whereas GetFileInformationByHandle + succeeds. + * On a CIFS/SMB file system, GetFileInformationByHandleEx fails with + error ERROR_INVALID_LEVEL, whereas GetFileInformationByHandle + succeeds. */ +# if _GL_WINDOWS_STAT_INODES == 2 + if (GetFileInformationByHandleExFunc != NULL) + { + FILE_ID_INFO id; + if (GetFileInformationByHandleExFunc (h, FileIdInfo, &id, sizeof (id))) + { + buf->st_dev = id.VolumeSerialNumber; + verify (sizeof (ino_t) == sizeof (id.FileId)); + memcpy (&buf->st_ino, &id.FileId, sizeof (ino_t)); + goto ino_done; + } + else + { + switch (GetLastError ()) + { + case ERROR_INVALID_PARAMETER: /* older Windows version, or FAT */ + case ERROR_INVALID_LEVEL: /* CIFS/SMB file system */ + goto fallback; + default: + goto failed; + } + } + } + fallback: ; + /* Fallback for older Windows versions. */ + buf->st_dev = info.dwVolumeSerialNumber; + buf->st_ino._gl_ino[0] = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow; + buf->st_ino._gl_ino[1] = 0; + ino_done: ; +# else /* _GL_WINDOWS_STAT_INODES == 1 */ + buf->st_dev = info.dwVolumeSerialNumber; + buf->st_ino = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow; +# endif +#else + /* st_ino is not wide enough for identifying a file on a device. + Without st_ino, st_dev is pointless. */ + buf->st_dev = 0; + buf->st_ino = 0; +#endif + + /* st_mode. */ + unsigned int mode = + /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */ + ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG) + | S_IREAD_UGO + | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO); + if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + { + /* Determine whether the file is executable by looking at the file + name suffix. + If the file name is already known, use it. Otherwise, for + non-empty files, it can be determined through + GetFinalPathNameByHandle + <https://msdn.microsoft.com/en-us/library/aa364962.aspx> + or through + GetFileInformationByHandleEx with argument FileNameInfo + <https://msdn.microsoft.com/en-us/library/aa364953.aspx> + <https://msdn.microsoft.com/en-us/library/aa364388.aspx> + Both require -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ + if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0) + { + char fpath[PATH_MAX]; + if (path != NULL + || (GetFinalPathNameByHandleFunc != NULL + && GetFinalPathNameByHandleFunc (h, fpath, sizeof (fpath), VOLUME_NAME_NONE) + < sizeof (fpath) + && (path = fpath, 1))) + { + const char *last_dot = NULL; + const char *p; + for (p = path; *p != '\0'; p++) + if (*p == '.') + last_dot = p; + if (last_dot != NULL) + { + const char *suffix = last_dot + 1; + if (_stricmp (suffix, "exe") == 0 + || _stricmp (suffix, "bat") == 0 + || _stricmp (suffix, "cmd") == 0 + || _stricmp (suffix, "com") == 0) + mode |= S_IEXEC_UGO; + } + } + else + /* Cannot determine file name. Pretend that it is executable. */ + mode |= S_IEXEC_UGO; + } + } + buf->st_mode = mode; + + /* st_nlink can be determined through + GetFileInformationByHandle + <https://msdn.microsoft.com/en-us/library/aa364952.aspx> + <https://msdn.microsoft.com/en-us/library/aa363788.aspx> + or through + GetFileInformationByHandleEx with argument FileStandardInfo + <https://msdn.microsoft.com/en-us/library/aa364953.aspx> + <https://msdn.microsoft.com/en-us/library/aa364401.aspx> + The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ + buf->st_nlink = (info.nNumberOfLinks > SHRT_MAX ? SHRT_MAX : info.nNumberOfLinks); + + /* There's no easy way to map the Windows SID concept to an integer. */ + buf->st_uid = 0; + buf->st_gid = 0; + + /* st_rdev is irrelevant for normal files and directories. */ + buf->st_rdev = 0; + + /* st_size can be determined through + GetFileSizeEx + <https://msdn.microsoft.com/en-us/library/aa364957.aspx> + or through + GetFileAttributesEx + <https://msdn.microsoft.com/en-us/library/aa364946.aspx> + <https://msdn.microsoft.com/en-us/library/aa365739.aspx> + or through + GetFileInformationByHandle + <https://msdn.microsoft.com/en-us/library/aa364952.aspx> + <https://msdn.microsoft.com/en-us/library/aa363788.aspx> + or through + GetFileInformationByHandleEx with argument FileStandardInfo + <https://msdn.microsoft.com/en-us/library/aa364953.aspx> + <https://msdn.microsoft.com/en-us/library/aa364401.aspx> + The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ + if (sizeof (buf->st_size) <= 4) + /* Range check already done above. */ + buf->st_size = info.nFileSizeLow; + else + buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow; + + /* st_atime, st_mtime, st_ctime can be determined through + GetFileTime + <https://msdn.microsoft.com/en-us/library/ms724320.aspx> + or through + GetFileAttributesEx + <https://msdn.microsoft.com/en-us/library/aa364946.aspx> + <https://msdn.microsoft.com/en-us/library/aa365739.aspx> + or through + GetFileInformationByHandle + <https://msdn.microsoft.com/en-us/library/aa364952.aspx> + <https://msdn.microsoft.com/en-us/library/aa363788.aspx> + or through + GetFileInformationByHandleEx with argument FileBasicInfo + <https://msdn.microsoft.com/en-us/library/aa364953.aspx> + <https://msdn.microsoft.com/en-us/library/aa364217.aspx> + The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ +#if _GL_WINDOWS_STAT_TIMESPEC + buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime); + buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime); + buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime); +#else + buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime); + buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime); + buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime); +#endif + + return 0; + } + else if (type == FILE_TYPE_CHAR || type == FILE_TYPE_PIPE) + { + buf->st_dev = 0; +#if _GL_WINDOWS_STAT_INODES == 2 + buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0; +#else + buf->st_ino = 0; +#endif + buf->st_mode = (type == FILE_TYPE_PIPE ? _S_IFIFO : _S_IFCHR); + buf->st_nlink = 1; + buf->st_uid = 0; + buf->st_gid = 0; + buf->st_rdev = 0; + if (type == FILE_TYPE_PIPE) + { + /* PeekNamedPipe + <https://msdn.microsoft.com/en-us/library/aa365779.aspx> */ + DWORD bytes_available; + if (PeekNamedPipe (h, NULL, 0, NULL, &bytes_available, NULL)) + buf->st_size = bytes_available; + else + buf->st_size = 0; + } + else + buf->st_size = 0; +#if _GL_WINDOWS_STAT_TIMESPEC + buf->st_atim.tv_sec = 0; buf->st_atim.tv_nsec = 0; + buf->st_mtim.tv_sec = 0; buf->st_mtim.tv_nsec = 0; + buf->st_ctim.tv_sec = 0; buf->st_ctim.tv_nsec = 0; +#else + buf->st_atime = 0; + buf->st_mtime = 0; + buf->st_ctime = 0; +#endif + return 0; + } + else + { + errno = ENOENT; + return -1; + } + + failed: + { + DWORD error = GetLastError (); + #if 0 + fprintf (stderr, "_gl_fstat_by_handle error 0x%x\n", (unsigned int) error); + #endif + switch (error) + { + case ERROR_ACCESS_DENIED: + case ERROR_SHARING_VIOLATION: + errno = EACCES; + break; + + case ERROR_OUTOFMEMORY: + errno = ENOMEM; + break; + + case ERROR_WRITE_FAULT: + case ERROR_READ_FAULT: + case ERROR_GEN_FAILURE: + errno = EIO; + break; + + default: + errno = EINVAL; + break; + } + return -1; + } +} + +#else + +/* This declaration is solely to ensure that after preprocessing + this file is never empty. */ +typedef int dummy; + +#endif diff --git a/devspec.en_US/project/recutils/lib/stat-w32.h b/devspec.en_US/project/recutils/lib/stat-w32.h new file mode 100755 index 0000000..6b961d7 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/stat-w32.h @@ -0,0 +1,37 @@ +/* Core of implementation of fstat and stat for native Windows. + Copyright (C) 2017-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _STAT_W32_H +#define _STAT_W32_H 1 + +/* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */ +#if _GL_WINDOWS_STAT_TIMESPEC +extern struct timespec _gl_convert_FILETIME_to_timespec (const FILETIME *ft); +#else +extern time_t _gl_convert_FILETIME_to_POSIX (const FILETIME *ft); +#endif + +/* Fill *BUF with information about the file designated by H. + PATH is the file name, if known, otherwise NULL. + Return 0 if successful, or -1 with errno set upon failure. */ +extern int _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf); + +/* Bitmasks for st_mode. */ +#define S_IREAD_UGO (_S_IREAD | (_S_IREAD >> 3) | (_S_IREAD >> 6)) +#define S_IWRITE_UGO (_S_IWRITE | (_S_IWRITE >> 3) | (_S_IWRITE >> 6)) +#define S_IEXEC_UGO (_S_IEXEC | (_S_IEXEC >> 3) | (_S_IEXEC >> 6)) + +#endif /* _STAT_W32_H */ diff --git a/devspec.en_US/project/recutils/lib/stat.c b/devspec.en_US/project/recutils/lib/stat.c new file mode 100755 index 0000000..74f4795 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/stat.c @@ -0,0 +1,429 @@ +/* Work around platform bugs in stat. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Eric Blake and Bruno Haible. */ + +/* If the user's config.h happens to include <sys/stat.h>, let it include only + the system's <sys/stat.h> here, so that orig_stat doesn't recurse to + rpl_stat. */ +#define __need_system_sys_stat_h +#include <config.h> + +/* Get the original definition of stat. It might be defined as a macro. */ +#include <sys/types.h> +#include <sys/stat.h> +#undef __need_system_sys_stat_h + +#if defined _WIN32 && ! defined __CYGWIN__ +# define WINDOWS_NATIVE +#endif + +#if !defined WINDOWS_NATIVE + +static int +orig_stat (const char *filename, struct stat *buf) +{ + return stat (filename, buf); +} + +#endif + +/* Specification. */ +/* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc + eliminates this include because of the preliminary #include <sys/stat.h> + above. */ +#include "sys/stat.h" + +#include "stat-time.h" + +#include <errno.h> +#include <limits.h> +#include <stdbool.h> +#include <string.h> +#include "filename.h" +#include "malloca.h" +#include "verify.h" + +#ifdef WINDOWS_NATIVE +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +# include "stat-w32.h" +#endif + +#ifdef WINDOWS_NATIVE +/* Return TRUE if the given file name denotes an UNC root. */ +static BOOL +is_unc_root (const char *rname) +{ + /* Test whether it has the syntax '\\server\share'. */ + if (ISSLASH (rname[0]) && ISSLASH (rname[1])) + { + /* It starts with two slashes. Find the next slash. */ + const char *p = rname + 2; + const char *q = p; + while (*q != '\0' && !ISSLASH (*q)) + q++; + if (q > p && *q != '\0') + { + /* Found the next slash at q. */ + q++; + const char *r = q; + while (*r != '\0' && !ISSLASH (*r)) + r++; + if (r > q && *r == '\0') + return TRUE; + } + } + return FALSE; +} +#endif + +/* Store information about NAME into ST. Work around bugs with + trailing slashes. Mingw has other bugs (such as st_ino always + being 0 on success) which this wrapper does not work around. But + at least this implementation provides the ability to emulate fchdir + correctly. */ + +int +rpl_stat (char const *name, struct stat *buf) +{ +#ifdef WINDOWS_NATIVE + /* Fill the fields ourselves, because the original stat function returns + values for st_atime, st_mtime, st_ctime that depend on the current time + zone. See + <https://lists.gnu.org/r/bug-gnulib/2017-04/msg00134.html> */ + /* XXX Should we convert to wchar_t* and prepend '\\?\', in order to work + around length limitations + <https://msdn.microsoft.com/en-us/library/aa365247.aspx> ? */ + + /* POSIX <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13> + specifies: "More than two leading <slash> characters shall be treated as + a single <slash> character." */ + if (ISSLASH (name[0]) && ISSLASH (name[1]) && ISSLASH (name[2])) + { + name += 2; + while (ISSLASH (name[1])) + name++; + } + + size_t len = strlen (name); + size_t drive_prefix_len = (HAS_DEVICE (name) ? 2 : 0); + + /* Remove trailing slashes (except the very first one, at position + drive_prefix_len), but remember their presence. */ + size_t rlen; + bool check_dir = false; + + rlen = len; + while (rlen > drive_prefix_len && ISSLASH (name[rlen-1])) + { + check_dir = true; + if (rlen == drive_prefix_len + 1) + break; + rlen--; + } + + /* Handle '' and 'C:'. */ + if (!check_dir && rlen == drive_prefix_len) + { + errno = ENOENT; + return -1; + } + + /* Handle '\\'. */ + if (rlen == 1 && ISSLASH (name[0]) && len >= 2) + { + errno = ENOENT; + return -1; + } + + const char *rname; + char *malloca_rname; + if (rlen == len) + { + rname = name; + malloca_rname = NULL; + } + else + { + malloca_rname = malloca (rlen + 1); + if (malloca_rname == NULL) + { + errno = ENOMEM; + return -1; + } + memcpy (malloca_rname, name, rlen); + malloca_rname[rlen] = '\0'; + rname = malloca_rname; + } + + /* There are two ways to get at the requested information: + - by scanning the parent directory and examining the relevant + directory entry, + - by opening the file directly. + The first approach fails for root directories (e.g. 'C:\') and + UNC root directories (e.g. '\\server\share'). + The second approach fails for some system files (e.g. 'C:\pagefile.sys' + and 'C:\hiberfil.sys'): ERROR_SHARING_VIOLATION. + The second approach gives more information (in particular, correct + st_dev, st_ino, st_nlink fields). + So we use the second approach and, as a fallback except for root and + UNC root directories, also the first approach. */ + { + int ret; + + { + /* Approach based on the file. */ + + /* Open a handle to the file. + CreateFile + <https://msdn.microsoft.com/en-us/library/aa363858.aspx> + <https://msdn.microsoft.com/en-us/library/aa363874.aspx> */ + HANDLE h = + CreateFile (rname, + FILE_READ_ATTRIBUTES, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, + OPEN_EXISTING, + /* FILE_FLAG_POSIX_SEMANTICS (treat file names that differ only + in case as different) makes sense only when applied to *all* + filesystem operations. */ + FILE_FLAG_BACKUP_SEMANTICS /* | FILE_FLAG_POSIX_SEMANTICS */, + NULL); + if (h != INVALID_HANDLE_VALUE) + { + ret = _gl_fstat_by_handle (h, rname, buf); + CloseHandle (h); + goto done; + } + } + + /* Test for root and UNC root directories. */ + if ((rlen == drive_prefix_len + 1 && ISSLASH (rname[drive_prefix_len])) + || is_unc_root (rname)) + goto failed; + + /* Fallback. */ + { + /* Approach based on the directory entry. */ + + if (strchr (rname, '?') != NULL || strchr (rname, '*') != NULL) + { + /* Other Windows API functions would fail with error + ERROR_INVALID_NAME. */ + if (malloca_rname != NULL) + freea (malloca_rname); + errno = ENOENT; + return -1; + } + + /* Get the details about the directory entry. This can be done through + FindFirstFile + <https://msdn.microsoft.com/en-us/library/aa364418.aspx> + <https://msdn.microsoft.com/en-us/library/aa365740.aspx> + or through + FindFirstFileEx with argument FindExInfoBasic + <https://msdn.microsoft.com/en-us/library/aa364419.aspx> + <https://msdn.microsoft.com/en-us/library/aa364415.aspx> + <https://msdn.microsoft.com/en-us/library/aa365740.aspx> */ + WIN32_FIND_DATA info; + HANDLE h = FindFirstFile (rname, &info); + if (h == INVALID_HANDLE_VALUE) + goto failed; + + /* Test for error conditions before starting to fill *buf. */ + if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0) + { + FindClose (h); + if (malloca_rname != NULL) + freea (malloca_rname); + errno = EOVERFLOW; + return -1; + } + +# if _GL_WINDOWS_STAT_INODES + buf->st_dev = 0; +# if _GL_WINDOWS_STAT_INODES == 2 + buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0; +# else /* _GL_WINDOWS_STAT_INODES == 1 */ + buf->st_ino = 0; +# endif +# else + /* st_ino is not wide enough for identifying a file on a device. + Without st_ino, st_dev is pointless. */ + buf->st_dev = 0; + buf->st_ino = 0; +# endif + + /* st_mode. */ + unsigned int mode = + /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */ + ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG) + | S_IREAD_UGO + | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO); + if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + { + /* Determine whether the file is executable by looking at the file + name suffix. */ + if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0) + { + const char *last_dot = NULL; + const char *p; + for (p = info.cFileName; *p != '\0'; p++) + if (*p == '.') + last_dot = p; + if (last_dot != NULL) + { + const char *suffix = last_dot + 1; + if (_stricmp (suffix, "exe") == 0 + || _stricmp (suffix, "bat") == 0 + || _stricmp (suffix, "cmd") == 0 + || _stricmp (suffix, "com") == 0) + mode |= S_IEXEC_UGO; + } + } + } + buf->st_mode = mode; + + /* st_nlink. Ignore hard links here. */ + buf->st_nlink = 1; + + /* There's no easy way to map the Windows SID concept to an integer. */ + buf->st_uid = 0; + buf->st_gid = 0; + + /* st_rdev is irrelevant for normal files and directories. */ + buf->st_rdev = 0; + + /* st_size. */ + if (sizeof (buf->st_size) <= 4) + /* Range check already done above. */ + buf->st_size = info.nFileSizeLow; + else + buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow; + + /* st_atime, st_mtime, st_ctime. */ +# if _GL_WINDOWS_STAT_TIMESPEC + buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime); + buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime); + buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime); +# else + buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime); + buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime); + buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime); +# endif + + FindClose (h); + + ret = 0; + } + + done: + if (ret >= 0 && check_dir && !S_ISDIR (buf->st_mode)) + { + errno = ENOTDIR; + ret = -1; + } + if (malloca_rname != NULL) + { + int saved_errno = errno; + freea (malloca_rname); + errno = saved_errno; + } + return ret; + } + + failed: + { + DWORD error = GetLastError (); + #if 0 + fprintf (stderr, "rpl_stat error 0x%x\n", (unsigned int) error); + #endif + + if (malloca_rname != NULL) + freea (malloca_rname); + + switch (error) + { + /* Some of these errors probably cannot happen with the specific flags + that we pass to CreateFile. But who knows... */ + case ERROR_FILE_NOT_FOUND: /* The last component of rname does not exist. */ + case ERROR_PATH_NOT_FOUND: /* Some directory component in rname does not exist. */ + case ERROR_BAD_PATHNAME: /* rname is such as '\\server'. */ + case ERROR_BAD_NET_NAME: /* rname is such as '\\server\nonexistentshare'. */ + case ERROR_INVALID_NAME: /* rname contains wildcards, misplaced colon, etc. */ + case ERROR_DIRECTORY: + errno = ENOENT; + break; + + case ERROR_ACCESS_DENIED: /* rname is such as 'C:\System Volume Information\foo'. */ + case ERROR_SHARING_VIOLATION: /* rname is such as 'C:\pagefile.sys' (second approach only). */ + /* XXX map to EACCESS or EPERM? */ + errno = EACCES; + break; + + case ERROR_OUTOFMEMORY: + errno = ENOMEM; + break; + + case ERROR_WRITE_PROTECT: + errno = EROFS; + break; + + case ERROR_WRITE_FAULT: + case ERROR_READ_FAULT: + case ERROR_GEN_FAILURE: + errno = EIO; + break; + + case ERROR_BUFFER_OVERFLOW: + case ERROR_FILENAME_EXCED_RANGE: + errno = ENAMETOOLONG; + break; + + case ERROR_DELETE_PENDING: /* XXX map to EACCESS or EPERM? */ + errno = EPERM; + break; + + default: + errno = EINVAL; + break; + } + + return -1; + } +#else + int result = orig_stat (name, buf); + if (result == 0) + { +# if REPLACE_FUNC_STAT_FILE + /* Solaris 9 mistakenly succeeds when given a non-directory with a + trailing slash. */ + if (!S_ISDIR (buf->st_mode)) + { + size_t len = strlen (name); + if (ISSLASH (name[len - 1])) + { + errno = ENOTDIR; + return -1; + } + } +# endif /* REPLACE_FUNC_STAT_FILE */ + result = stat_time_normalize (result, buf); + } + return result; +#endif +} diff --git a/devspec.en_US/project/recutils/lib/stdarg.in.h b/devspec.en_US/project/recutils/lib/stdarg.in.h new file mode 100755 index 0000000..5eec8ba --- /dev/null +++ b/devspec.en_US/project/recutils/lib/stdarg.in.h @@ -0,0 +1,35 @@ +/* Substitute for and wrapper around <stdarg.h>. + Copyright (C) 2008-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _@GUARD_PREFIX@_STDARG_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STDARG_H@ + +#ifndef _@GUARD_PREFIX@_STDARG_H +#define _@GUARD_PREFIX@_STDARG_H + +#ifndef va_copy +# define va_copy(a,b) ((a) = (b)) +#endif + +#endif /* _@GUARD_PREFIX@_STDARG_H */ +#endif /* _@GUARD_PREFIX@_STDARG_H */ diff --git a/devspec.en_US/project/recutils/lib/stdbool.in.h b/devspec.en_US/project/recutils/lib/stdbool.in.h new file mode 100755 index 0000000..8158b00 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/stdbool.in.h @@ -0,0 +1,132 @@ +/* Copyright (C) 2001-2003, 2006-2019 Free Software Foundation, Inc. + Written by Bruno Haible <haible@clisp.cons.org>, 2001. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_STDBOOL_H +#define _GL_STDBOOL_H + +/* ISO C 99 <stdbool.h> for platforms that lack it. */ + +/* Usage suggestions: + + Programs that use <stdbool.h> should be aware of some limitations + and standards compliance issues. + + Standards compliance: + + - <stdbool.h> must be #included before 'bool', 'false', 'true' + can be used. + + - You cannot assume that sizeof (bool) == 1. + + - Programs should not undefine the macros bool, true, and false, + as C99 lists that as an "obsolescent feature". + + Limitations of this substitute, when used in a C89 environment: + + - <stdbool.h> must be #included before the '_Bool' type can be used. + + - You cannot assume that _Bool is a typedef; it might be a macro. + + - Bit-fields of type 'bool' are not supported. Portable code + should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'. + + - In C99, casts and automatic conversions to '_Bool' or 'bool' are + performed in such a way that every nonzero value gets converted + to 'true', and zero gets converted to 'false'. This doesn't work + with this substitute. With this substitute, only the values 0 and 1 + give the expected result when converted to _Bool' or 'bool'. + + - C99 allows the use of (_Bool)0.0 in constant expressions, but + this substitute cannot always provide this property. + + Also, it is suggested that programs use 'bool' rather than '_Bool'; + this isn't required, but 'bool' is more common. */ + + +/* 7.16. Boolean type and values */ + +/* BeOS <sys/socket.h> already #defines false 0, true 1. We use the same + definitions below, but temporarily we have to #undef them. */ +#if defined __BEOS__ && !defined __HAIKU__ +# include <OS.h> /* defines bool but not _Bool */ +# undef false +# undef true +#endif + +#ifdef __cplusplus +# define _Bool bool +# define bool bool +#else +# if defined __BEOS__ && !defined __HAIKU__ + /* A compiler known to have 'bool'. */ + /* If the compiler already has both 'bool' and '_Bool', we can assume they + are the same types. */ +# if !@HAVE__BOOL@ +typedef bool _Bool; +# endif +# else +# if !defined __GNUC__ + /* If @HAVE__BOOL@: + Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when + the built-in _Bool type is used. See + https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html + https://lists.gnu.org/r/bug-coreutils/2005-10/msg00086.html + Similar bugs are likely with other compilers as well; this file + wouldn't be used if <stdbool.h> was working. + So we override the _Bool type. + If !@HAVE__BOOL@: + Need to define _Bool ourselves. As 'signed char' or as an enum type? + Use of a typedef, with SunPRO C, leads to a stupid + "warning: _Bool is a keyword in ISO C99". + Use of an enum type, with IRIX cc, leads to a stupid + "warning(1185): enumerated type mixed with another type". + Even the existence of an enum type, without a typedef, + "Invalid enumerator. (badenum)" with HP-UX cc on Tru64. + The only benefit of the enum, debuggability, is not important + with these compilers. So use 'signed char' and no enum. */ +# define _Bool signed char +# else + /* With this compiler, trust the _Bool type if the compiler has it. */ +# if !@HAVE__BOOL@ + /* For the sake of symbolic names in gdb, define true and false as + enum constants, not only as macros. + It is tempting to write + typedef enum { false = 0, true = 1 } _Bool; + so that gdb prints values of type 'bool' symbolically. But then + values of type '_Bool' might promote to 'int' or 'unsigned int' + (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' + (see ISO C 99 6.3.1.1.(2)). So add a negative value to the + enum; this ensures that '_Bool' promotes to 'int'. */ +typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; +# endif +# endif +# endif +# define bool _Bool +#endif + +/* The other macros must be usable in preprocessor directives. */ +#ifdef __cplusplus +# define false false +# define true true +#else +# define false 0 +# define true 1 +#endif + +#define __bool_true_false_are_defined 1 + +#endif /* _GL_STDBOOL_H */ diff --git a/devspec.en_US/project/recutils/lib/stddef.in.h b/devspec.en_US/project/recutils/lib/stddef.in.h new file mode 100755 index 0000000..5aad121 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/stddef.in.h @@ -0,0 +1,114 @@ +/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues. + + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Eric Blake. */ + +/* + * POSIX 2008 <stddef.h> for platforms that have issues. + * <http://www.opengroup.org/susv3xbd/stddef.h.html> + */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if defined __need_wchar_t || defined __need_size_t \ + || defined __need_ptrdiff_t || defined __need_NULL \ + || defined __need_wint_t +/* Special invocation convention inside gcc header files. In + particular, gcc provides a version of <stddef.h> that blindly + redefines NULL even when __need_wint_t was defined, even though + wint_t is not normally provided by <stddef.h>. Hence, we must + remember if special invocation has ever been used to obtain wint_t, + in which case we need to clean up NULL yet again. */ + +# if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T) +# ifdef __need_wint_t +# define _GL_STDDEF_WINT_T +# endif +# @INCLUDE_NEXT@ @NEXT_STDDEF_H@ +# endif + +#else +/* Normal invocation convention. */ + +# ifndef _@GUARD_PREFIX@_STDDEF_H + +/* The include_next requires a split double-inclusion guard. */ + +# @INCLUDE_NEXT@ @NEXT_STDDEF_H@ + +/* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ +# if (@REPLACE_NULL@ \ + && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _GL_STDDEF_WINT_T)) +# undef NULL +# ifdef __cplusplus + /* ISO C++ says that the macro NULL must expand to an integer constant + expression, hence '((void *) 0)' is not allowed in C++. */ +# if __GNUG__ >= 3 + /* GNU C++ has a __null macro that behaves like an integer ('int' or + 'long') but has the same size as a pointer. Use that, to avoid + warnings. */ +# define NULL __null +# else +# define NULL 0L +# endif +# else +# define NULL ((void *) 0) +# endif +# endif + +# ifndef _@GUARD_PREFIX@_STDDEF_H +# define _@GUARD_PREFIX@_STDDEF_H + +/* Some platforms lack wchar_t. */ +#if !@HAVE_WCHAR_T@ +# define wchar_t int +#endif + +/* Some platforms lack max_align_t. The check for _GCC_MAX_ALIGN_T is + a hack in case the configure-time test was done with g++ even though + we are currently compiling with gcc. */ +#if ! (@HAVE_MAX_ALIGN_T@ || defined _GCC_MAX_ALIGN_T) +# if !GNULIB_defined_max_align_t +/* On the x86, the maximum storage alignment of double, long, etc. is 4, + but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8, + and the C11 standard allows this. Work around this problem by + using __alignof__ (which returns 8 for double) rather than _Alignof + (which returns 4), and align each union member accordingly. */ +# ifdef __GNUC__ +# define _GL_STDDEF_ALIGNAS(type) \ + __attribute__ ((__aligned__ (__alignof__ (type)))) +# else +# define _GL_STDDEF_ALIGNAS(type) /* */ +# endif +typedef union +{ + char *__p _GL_STDDEF_ALIGNAS (char *); + double __d _GL_STDDEF_ALIGNAS (double); + long double __ld _GL_STDDEF_ALIGNAS (long double); + long int __i _GL_STDDEF_ALIGNAS (long int); +} rpl_max_align_t; +# define max_align_t rpl_max_align_t +# define GNULIB_defined_max_align_t 1 +# endif +#endif + +# endif /* _@GUARD_PREFIX@_STDDEF_H */ +# endif /* _@GUARD_PREFIX@_STDDEF_H */ +#endif /* __need_XXX */ diff --git a/devspec.en_US/project/recutils/lib/stdint.h b/devspec.en_US/project/recutils/lib/stdint.h new file mode 100755 index 0000000..bc902c7 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/stdint.h @@ -0,0 +1,727 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Copyright (C) 2001-2002, 2004-2019 Free Software Foundation, Inc. + Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. + This file is part of gnulib. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* + * ISO C 99 <stdint.h> for platforms that lack it. + * <http://www.opengroup.org/susv3xbd/stdint.h.html> + */ + +#ifndef _GL_STDINT_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* When including a system file that in turn includes <inttypes.h>, + use the system <inttypes.h>, not our substitute. This avoids + problems with (for example) VMS, whose <sys/bitypes.h> includes + <inttypes.h>. */ +#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + +/* On Android (Bionic libc), <sys/types.h> includes this file before + having defined 'time_t'. Therefore in this case avoid including + other system header files; just include the system's <stdint.h>. + Ideally we should test __BIONIC__ here, but it is only defined after + <sys/cdefs.h> has been included; hence test __ANDROID__ instead. */ +#if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H +# include_next <stdint.h> +#else + +/* Get those types that are already defined in other system include + files, so that we can "#define int8_t signed char" below without + worrying about a later system include file containing a "typedef + signed char int8_t;" that will get messed up by our macro. Our + macros should all be consistent with the system versions, except + for the "fast" types and macros, which we recommend against using + in public interfaces due to compiler differences. */ + +#if 1 +# if defined __sgi && ! defined __c99 + /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users + with "This header file is to be used only for c99 mode compilations" + diagnostics. */ +# define __STDINT_H__ +# endif + + /* Some pre-C++11 <stdint.h> implementations need this. */ +# ifdef __cplusplus +# ifndef __STDC_CONSTANT_MACROS +# define __STDC_CONSTANT_MACROS 1 +# endif +# ifndef __STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS 1 +# endif +# endif + + /* Other systems may have an incomplete or buggy <stdint.h>. + Include it before <inttypes.h>, since any "#include <stdint.h>" + in <inttypes.h> would reinclude us, skipping our contents because + _GL_STDINT_H is defined. + The include_next requires a split double-inclusion guard. */ +# include_next <stdint.h> +#endif + +#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H +#define _GL_STDINT_H + +/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, + LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH. */ +#include <limits.h> + +/* Override WINT_MIN and WINT_MAX if gnulib's <wchar.h> or <wctype.h> overrides + wint_t. */ +#if 0 +# undef WINT_MIN +# undef WINT_MAX +# define WINT_MIN 0x0U +# define WINT_MAX 0xffffffffU +#endif + +#if ! 1 + +/* <sys/types.h> defines some of the stdint.h types as well, on glibc, + IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>). + AIX 5.2 <sys/types.h> isn't needed and causes troubles. + Mac OS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but + relies on the system <stdint.h> definitions, so include + <sys/types.h> after <stdint.h>. */ +# if 1 && ! defined _AIX +# include <sys/types.h> +# endif + +# if 1 + /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines + int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. + <inttypes.h> also defines intptr_t and uintptr_t. */ +# include <inttypes.h> +# elif 0 + /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and + the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ +# include <sys/inttypes.h> +# endif + +# if 0 && ! defined __BIT_TYPES_DEFINED__ + /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines + int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is + included by <sys/types.h>. */ +# include <sys/bitypes.h> +# endif + +# undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + +/* Minimum and maximum values for an integer type under the usual assumption. + Return an unspecified value if BITS == 0, adding a check to pacify + picky compilers. */ + +/* These are separate macros, because if you try to merge these macros into + a single one, HP-UX cc rejects the resulting expression in constant + expressions. */ +# define _STDINT_UNSIGNED_MIN(bits, zero) \ + (zero) +# define _STDINT_SIGNED_MIN(bits, zero) \ + (~ _STDINT_MAX (1, bits, zero)) + +# define _STDINT_MAX(signed, bits, zero) \ + (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) + +#if !GNULIB_defined_stdint_types + +/* 7.18.1.1. Exact-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. */ + +# undef int8_t +# undef uint8_t +typedef signed char gl_int8_t; +typedef unsigned char gl_uint8_t; +# define int8_t gl_int8_t +# define uint8_t gl_uint8_t + +# undef int16_t +# undef uint16_t +typedef short int gl_int16_t; +typedef unsigned short int gl_uint16_t; +# define int16_t gl_int16_t +# define uint16_t gl_uint16_t + +# undef int32_t +# undef uint32_t +typedef int gl_int32_t; +typedef unsigned int gl_uint32_t; +# define int32_t gl_int32_t +# define uint32_t gl_uint32_t + +/* If the system defines INT64_MAX, assume int64_t works. That way, + if the underlying platform defines int64_t to be a 64-bit long long + int, the code below won't mistakenly define it to be a 64-bit long + int, which would mess up C++ name mangling. We must use #ifdef + rather than #if, to avoid an error with HP-UX 10.20 cc. */ + +# ifdef INT64_MAX +# define GL_INT64_T +# else +/* Do not undefine int64_t if gnulib is not being used with 64-bit + types, since otherwise it breaks platforms like Tandem/NSK. */ +# if LONG_MAX >> 31 >> 31 == 1 +# undef int64_t +typedef long int gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# elif defined _MSC_VER +# undef int64_t +typedef __int64 gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# elif 1 +# undef int64_t +typedef long long int gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# endif +# endif + +# ifdef UINT64_MAX +# define GL_UINT64_T +# else +# if ULONG_MAX >> 31 >> 31 >> 1 == 1 +# undef uint64_t +typedef unsigned long int gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# elif defined _MSC_VER +# undef uint64_t +typedef unsigned __int64 gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# elif 1 +# undef uint64_t +typedef unsigned long long int gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# endif +# endif + +/* Avoid collision with Solaris 2.5.1 <pthread.h> etc. */ +# define _UINT8_T +# define _UINT32_T +# define _UINT64_T + + +/* 7.18.1.2. Minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types + are the same as the corresponding N_t types. */ + +# undef int_least8_t +# undef uint_least8_t +# undef int_least16_t +# undef uint_least16_t +# undef int_least32_t +# undef uint_least32_t +# undef int_least64_t +# undef uint_least64_t +# define int_least8_t int8_t +# define uint_least8_t uint8_t +# define int_least16_t int16_t +# define uint_least16_t uint16_t +# define int_least32_t int32_t +# define uint_least32_t uint32_t +# ifdef GL_INT64_T +# define int_least64_t int64_t +# endif +# ifdef GL_UINT64_T +# define uint_least64_t uint64_t +# endif + +/* 7.18.1.3. Fastest minimum-width integer types */ + +/* Note: Other <stdint.h> substitutes may define these types differently. + It is not recommended to use these types in public header files. */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types + are taken from the same list of types. The following code normally + uses types consistent with glibc, as that lessens the chance of + incompatibility with older GNU hosts. */ + +# undef int_fast8_t +# undef uint_fast8_t +# undef int_fast16_t +# undef uint_fast16_t +# undef int_fast32_t +# undef uint_fast32_t +# undef int_fast64_t +# undef uint_fast64_t +typedef signed char gl_int_fast8_t; +typedef unsigned char gl_uint_fast8_t; + +# ifdef __sun +/* Define types compatible with SunOS 5.10, so that code compiled under + earlier SunOS versions works with code compiled under SunOS 5.10. */ +typedef int gl_int_fast32_t; +typedef unsigned int gl_uint_fast32_t; +# else +typedef long int gl_int_fast32_t; +typedef unsigned long int gl_uint_fast32_t; +# endif +typedef gl_int_fast32_t gl_int_fast16_t; +typedef gl_uint_fast32_t gl_uint_fast16_t; + +# define int_fast8_t gl_int_fast8_t +# define uint_fast8_t gl_uint_fast8_t +# define int_fast16_t gl_int_fast16_t +# define uint_fast16_t gl_uint_fast16_t +# define int_fast32_t gl_int_fast32_t +# define uint_fast32_t gl_uint_fast32_t +# ifdef GL_INT64_T +# define int_fast64_t int64_t +# endif +# ifdef GL_UINT64_T +# define uint_fast64_t uint64_t +# endif + +/* 7.18.1.4. Integer types capable of holding object pointers */ + +/* kLIBC's stdint.h defines _INTPTR_T_DECLARED and needs its own + definitions of intptr_t and uintptr_t (which use int and unsigned) + to avoid clashes with declarations of system functions like sbrk. */ +# ifndef _INTPTR_T_DECLARED +# undef intptr_t +# undef uintptr_t +typedef long int gl_intptr_t; +typedef unsigned long int gl_uintptr_t; +# define intptr_t gl_intptr_t +# define uintptr_t gl_uintptr_t +# endif + +/* 7.18.1.5. Greatest-width integer types */ + +/* Note: These types are compiler dependent. It may be unwise to use them in + public header files. */ + +/* If the system defines INTMAX_MAX, assume that intmax_t works, and + similarly for UINTMAX_MAX and uintmax_t. This avoids problems with + assuming one type where another is used by the system. */ + +# ifndef INTMAX_MAX +# undef INTMAX_C +# undef intmax_t +# if 1 && LONG_MAX >> 30 == 1 +typedef long long int gl_intmax_t; +# define intmax_t gl_intmax_t +# elif defined GL_INT64_T +# define intmax_t int64_t +# else +typedef long int gl_intmax_t; +# define intmax_t gl_intmax_t +# endif +# endif + +# ifndef UINTMAX_MAX +# undef UINTMAX_C +# undef uintmax_t +# if 1 && ULONG_MAX >> 31 == 1 +typedef unsigned long long int gl_uintmax_t; +# define uintmax_t gl_uintmax_t +# elif defined GL_UINT64_T +# define uintmax_t uint64_t +# else +typedef unsigned long int gl_uintmax_t; +# define uintmax_t gl_uintmax_t +# endif +# endif + +/* Verify that intmax_t and uintmax_t have the same size. Too much code + breaks if this is not the case. If this check fails, the reason is likely + to be found in the autoconf macros. */ +typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) + ? 1 : -1]; + +# define GNULIB_defined_stdint_types 1 +# endif /* !GNULIB_defined_stdint_types */ + +/* 7.18.2. Limits of specified-width integer types */ + +/* 7.18.2.1. Limits of exact-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. */ + +# undef INT8_MIN +# undef INT8_MAX +# undef UINT8_MAX +# define INT8_MIN (~ INT8_MAX) +# define INT8_MAX 127 +# define UINT8_MAX 255 + +# undef INT16_MIN +# undef INT16_MAX +# undef UINT16_MAX +# define INT16_MIN (~ INT16_MAX) +# define INT16_MAX 32767 +# define UINT16_MAX 65535 + +# undef INT32_MIN +# undef INT32_MAX +# undef UINT32_MAX +# define INT32_MIN (~ INT32_MAX) +# define INT32_MAX 2147483647 +# define UINT32_MAX 4294967295U + +# if defined GL_INT64_T && ! defined INT64_MAX +/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 + evaluates the latter incorrectly in preprocessor expressions. */ +# define INT64_MIN (- INTMAX_C (1) << 63) +# define INT64_MAX INTMAX_C (9223372036854775807) +# endif + +# if defined GL_UINT64_T && ! defined UINT64_MAX +# define UINT64_MAX UINTMAX_C (18446744073709551615) +# endif + +/* 7.18.2.2. Limits of minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types + are the same as the corresponding N_t types. */ + +# undef INT_LEAST8_MIN +# undef INT_LEAST8_MAX +# undef UINT_LEAST8_MAX +# define INT_LEAST8_MIN INT8_MIN +# define INT_LEAST8_MAX INT8_MAX +# define UINT_LEAST8_MAX UINT8_MAX + +# undef INT_LEAST16_MIN +# undef INT_LEAST16_MAX +# undef UINT_LEAST16_MAX +# define INT_LEAST16_MIN INT16_MIN +# define INT_LEAST16_MAX INT16_MAX +# define UINT_LEAST16_MAX UINT16_MAX + +# undef INT_LEAST32_MIN +# undef INT_LEAST32_MAX +# undef UINT_LEAST32_MAX +# define INT_LEAST32_MIN INT32_MIN +# define INT_LEAST32_MAX INT32_MAX +# define UINT_LEAST32_MAX UINT32_MAX + +# undef INT_LEAST64_MIN +# undef INT_LEAST64_MAX +# ifdef GL_INT64_T +# define INT_LEAST64_MIN INT64_MIN +# define INT_LEAST64_MAX INT64_MAX +# endif + +# undef UINT_LEAST64_MAX +# ifdef GL_UINT64_T +# define UINT_LEAST64_MAX UINT64_MAX +# endif + +/* 7.18.2.3. Limits of fastest minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types + are taken from the same list of types. */ + +# undef INT_FAST8_MIN +# undef INT_FAST8_MAX +# undef UINT_FAST8_MAX +# define INT_FAST8_MIN SCHAR_MIN +# define INT_FAST8_MAX SCHAR_MAX +# define UINT_FAST8_MAX UCHAR_MAX + +# undef INT_FAST16_MIN +# undef INT_FAST16_MAX +# undef UINT_FAST16_MAX +# define INT_FAST16_MIN INT_FAST32_MIN +# define INT_FAST16_MAX INT_FAST32_MAX +# define UINT_FAST16_MAX UINT_FAST32_MAX + +# undef INT_FAST32_MIN +# undef INT_FAST32_MAX +# undef UINT_FAST32_MAX +# ifdef __sun +# define INT_FAST32_MIN INT_MIN +# define INT_FAST32_MAX INT_MAX +# define UINT_FAST32_MAX UINT_MAX +# else +# define INT_FAST32_MIN LONG_MIN +# define INT_FAST32_MAX LONG_MAX +# define UINT_FAST32_MAX ULONG_MAX +# endif + +# undef INT_FAST64_MIN +# undef INT_FAST64_MAX +# ifdef GL_INT64_T +# define INT_FAST64_MIN INT64_MIN +# define INT_FAST64_MAX INT64_MAX +# endif + +# undef UINT_FAST64_MAX +# ifdef GL_UINT64_T +# define UINT_FAST64_MAX UINT64_MAX +# endif + +/* 7.18.2.4. Limits of integer types capable of holding object pointers */ + +# undef INTPTR_MIN +# undef INTPTR_MAX +# undef UINTPTR_MAX +# define INTPTR_MIN LONG_MIN +# define INTPTR_MAX LONG_MAX +# define UINTPTR_MAX ULONG_MAX + +/* 7.18.2.5. Limits of greatest-width integer types */ + +# ifndef INTMAX_MAX +# undef INTMAX_MIN +# ifdef INT64_MAX +# define INTMAX_MIN INT64_MIN +# define INTMAX_MAX INT64_MAX +# else +# define INTMAX_MIN INT32_MIN +# define INTMAX_MAX INT32_MAX +# endif +# endif + +# ifndef UINTMAX_MAX +# ifdef UINT64_MAX +# define UINTMAX_MAX UINT64_MAX +# else +# define UINTMAX_MAX UINT32_MAX +# endif +# endif + +/* 7.18.3. Limits of other integer types */ + +/* ptrdiff_t limits */ +# undef PTRDIFF_MIN +# undef PTRDIFF_MAX +# if 0 +# ifdef _LP64 +# define PTRDIFF_MIN _STDINT_SIGNED_MIN (64, 0l) +# define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) +# else +# define PTRDIFF_MIN _STDINT_SIGNED_MIN (32, 0) +# define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) +# endif +# else +# define PTRDIFF_MIN \ + _STDINT_SIGNED_MIN (, 0) +# define PTRDIFF_MAX \ + _STDINT_MAX (1, , 0) +# endif + +/* sig_atomic_t limits */ +# undef SIG_ATOMIC_MIN +# undef SIG_ATOMIC_MAX +# if +# define SIG_ATOMIC_MIN \ + _STDINT_SIGNED_MIN (, 0) +# else +# define SIG_ATOMIC_MIN \ + _STDINT_UNSIGNED_MIN (, 0) +# endif +# define SIG_ATOMIC_MAX \ + _STDINT_MAX (, , \ + 0) + + +/* size_t limit */ +# undef SIZE_MAX +# if 0 +# ifdef _LP64 +# define SIZE_MAX _STDINT_MAX (0, 64, 0ul) +# else +# define SIZE_MAX _STDINT_MAX (0, 32, 0ul) +# endif +# else +# define SIZE_MAX _STDINT_MAX (0, , 0) +# endif + +/* wchar_t limits */ +/* Get WCHAR_MIN, WCHAR_MAX. + This include is not on the top, above, because on OSF/1 4.0 we have a + sequence of nested includes + <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes + <stdint.h> and assumes its types are already defined. */ +# if 1 && ! (defined WCHAR_MIN && defined WCHAR_MAX) + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +# include <stddef.h> +# include <stdio.h> +# include <time.h> +# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +# include <wchar.h> +# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +# endif +# undef WCHAR_MIN +# undef WCHAR_MAX +# if +# define WCHAR_MIN \ + _STDINT_SIGNED_MIN (, 0) +# else +# define WCHAR_MIN \ + _STDINT_UNSIGNED_MIN (, 0) +# endif +# define WCHAR_MAX \ + _STDINT_MAX (, , 0) + +/* wint_t limits */ +# undef WINT_MIN +# undef WINT_MAX +# if +# define WINT_MIN \ + _STDINT_SIGNED_MIN (, 0) +# else +# define WINT_MIN \ + _STDINT_UNSIGNED_MIN (, 0) +# endif +# define WINT_MAX \ + _STDINT_MAX (, , 0) + +/* 7.18.4. Macros for integer constants */ + +/* 7.18.4.1. Macros for minimum-width integer constants */ +/* According to ISO C 99 Technical Corrigendum 1 */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ + +# undef INT8_C +# undef UINT8_C +# define INT8_C(x) x +# define UINT8_C(x) x + +# undef INT16_C +# undef UINT16_C +# define INT16_C(x) x +# define UINT16_C(x) x + +# undef INT32_C +# undef UINT32_C +# define INT32_C(x) x +# define UINT32_C(x) x ## U + +# undef INT64_C +# undef UINT64_C +# if LONG_MAX >> 31 >> 31 == 1 +# define INT64_C(x) x##L +# elif defined _MSC_VER +# define INT64_C(x) x##i64 +# elif 1 +# define INT64_C(x) x##LL +# endif +# if ULONG_MAX >> 31 >> 31 >> 1 == 1 +# define UINT64_C(x) x##UL +# elif defined _MSC_VER +# define UINT64_C(x) x##ui64 +# elif 1 +# define UINT64_C(x) x##ULL +# endif + +/* 7.18.4.2. Macros for greatest-width integer constants */ + +# ifndef INTMAX_C +# if 1 && LONG_MAX >> 30 == 1 +# define INTMAX_C(x) x##LL +# elif defined GL_INT64_T +# define INTMAX_C(x) INT64_C(x) +# else +# define INTMAX_C(x) x##L +# endif +# endif + +# ifndef UINTMAX_C +# if 1 && ULONG_MAX >> 31 == 1 +# define UINTMAX_C(x) x##ULL +# elif defined GL_UINT64_T +# define UINTMAX_C(x) UINT64_C(x) +# else +# define UINTMAX_C(x) x##UL +# endif +# endif + +#endif /* !1 */ + +/* Macros specified by ISO/IEC TS 18661-1:2014. */ + +#if (!defined UINTMAX_WIDTH \ + && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) +# ifdef INT8_MAX +# define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX) +# endif +# ifdef UINT8_MAX +# define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX) +# endif +# ifdef INT16_MAX +# define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX) +# endif +# ifdef UINT16_MAX +# define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX) +# endif +# ifdef INT32_MAX +# define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX) +# endif +# ifdef UINT32_MAX +# define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX) +# endif +# ifdef INT64_MAX +# define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX) +# endif +# ifdef UINT64_MAX +# define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX) +# endif +# define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX) +# define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX) +# define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX) +# define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX) +# define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX) +# define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX) +# define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX) +# define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX) +# define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX) +# define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX) +# define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX) +# define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX) +# define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX) +# define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX) +# define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX) +# define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX) +# define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX) +# define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX) +# define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX) +# define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX) +# define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX) +# define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX) +# define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX) +# ifdef WINT_MAX +# define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX) +# endif +# ifdef SIG_ATOMIC_MAX +# define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX) +# endif +#endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ + +#endif /* _GL_STDINT_H */ +#endif /* !(defined __ANDROID__ && ...) */ +#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ diff --git a/devspec.en_US/project/recutils/lib/stdint.in.h b/devspec.en_US/project/recutils/lib/stdint.in.h new file mode 100755 index 0000000..21dd8d2 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/stdint.in.h @@ -0,0 +1,726 @@ +/* Copyright (C) 2001-2002, 2004-2019 Free Software Foundation, Inc. + Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. + This file is part of gnulib. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* + * ISO C 99 <stdint.h> for platforms that lack it. + * <http://www.opengroup.org/susv3xbd/stdint.h.html> + */ + +#ifndef _@GUARD_PREFIX@_STDINT_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* When including a system file that in turn includes <inttypes.h>, + use the system <inttypes.h>, not our substitute. This avoids + problems with (for example) VMS, whose <sys/bitypes.h> includes + <inttypes.h>. */ +#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + +/* On Android (Bionic libc), <sys/types.h> includes this file before + having defined 'time_t'. Therefore in this case avoid including + other system header files; just include the system's <stdint.h>. + Ideally we should test __BIONIC__ here, but it is only defined after + <sys/cdefs.h> has been included; hence test __ANDROID__ instead. */ +#if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H +# @INCLUDE_NEXT@ @NEXT_STDINT_H@ +#else + +/* Get those types that are already defined in other system include + files, so that we can "#define int8_t signed char" below without + worrying about a later system include file containing a "typedef + signed char int8_t;" that will get messed up by our macro. Our + macros should all be consistent with the system versions, except + for the "fast" types and macros, which we recommend against using + in public interfaces due to compiler differences. */ + +#if @HAVE_STDINT_H@ +# if defined __sgi && ! defined __c99 + /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users + with "This header file is to be used only for c99 mode compilations" + diagnostics. */ +# define __STDINT_H__ +# endif + + /* Some pre-C++11 <stdint.h> implementations need this. */ +# ifdef __cplusplus +# ifndef __STDC_CONSTANT_MACROS +# define __STDC_CONSTANT_MACROS 1 +# endif +# ifndef __STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS 1 +# endif +# endif + + /* Other systems may have an incomplete or buggy <stdint.h>. + Include it before <inttypes.h>, since any "#include <stdint.h>" + in <inttypes.h> would reinclude us, skipping our contents because + _@GUARD_PREFIX@_STDINT_H is defined. + The include_next requires a split double-inclusion guard. */ +# @INCLUDE_NEXT@ @NEXT_STDINT_H@ +#endif + +#if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H +#define _@GUARD_PREFIX@_STDINT_H + +/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, + LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH. */ +#include <limits.h> + +/* Override WINT_MIN and WINT_MAX if gnulib's <wchar.h> or <wctype.h> overrides + wint_t. */ +#if @GNULIB_OVERRIDES_WINT_T@ +# undef WINT_MIN +# undef WINT_MAX +# define WINT_MIN 0x0U +# define WINT_MAX 0xffffffffU +#endif + +#if ! @HAVE_C99_STDINT_H@ + +/* <sys/types.h> defines some of the stdint.h types as well, on glibc, + IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>). + AIX 5.2 <sys/types.h> isn't needed and causes troubles. + Mac OS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but + relies on the system <stdint.h> definitions, so include + <sys/types.h> after @NEXT_STDINT_H@. */ +# if @HAVE_SYS_TYPES_H@ && ! defined _AIX +# include <sys/types.h> +# endif + +# if @HAVE_INTTYPES_H@ + /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines + int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. + <inttypes.h> also defines intptr_t and uintptr_t. */ +# include <inttypes.h> +# elif @HAVE_SYS_INTTYPES_H@ + /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and + the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ +# include <sys/inttypes.h> +# endif + +# if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ + /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines + int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is + included by <sys/types.h>. */ +# include <sys/bitypes.h> +# endif + +# undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + +/* Minimum and maximum values for an integer type under the usual assumption. + Return an unspecified value if BITS == 0, adding a check to pacify + picky compilers. */ + +/* These are separate macros, because if you try to merge these macros into + a single one, HP-UX cc rejects the resulting expression in constant + expressions. */ +# define _STDINT_UNSIGNED_MIN(bits, zero) \ + (zero) +# define _STDINT_SIGNED_MIN(bits, zero) \ + (~ _STDINT_MAX (1, bits, zero)) + +# define _STDINT_MAX(signed, bits, zero) \ + (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) + +#if !GNULIB_defined_stdint_types + +/* 7.18.1.1. Exact-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. */ + +# undef int8_t +# undef uint8_t +typedef signed char gl_int8_t; +typedef unsigned char gl_uint8_t; +# define int8_t gl_int8_t +# define uint8_t gl_uint8_t + +# undef int16_t +# undef uint16_t +typedef short int gl_int16_t; +typedef unsigned short int gl_uint16_t; +# define int16_t gl_int16_t +# define uint16_t gl_uint16_t + +# undef int32_t +# undef uint32_t +typedef int gl_int32_t; +typedef unsigned int gl_uint32_t; +# define int32_t gl_int32_t +# define uint32_t gl_uint32_t + +/* If the system defines INT64_MAX, assume int64_t works. That way, + if the underlying platform defines int64_t to be a 64-bit long long + int, the code below won't mistakenly define it to be a 64-bit long + int, which would mess up C++ name mangling. We must use #ifdef + rather than #if, to avoid an error with HP-UX 10.20 cc. */ + +# ifdef INT64_MAX +# define GL_INT64_T +# else +/* Do not undefine int64_t if gnulib is not being used with 64-bit + types, since otherwise it breaks platforms like Tandem/NSK. */ +# if LONG_MAX >> 31 >> 31 == 1 +# undef int64_t +typedef long int gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# elif defined _MSC_VER +# undef int64_t +typedef __int64 gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# elif @HAVE_LONG_LONG_INT@ +# undef int64_t +typedef long long int gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +# endif +# endif + +# ifdef UINT64_MAX +# define GL_UINT64_T +# else +# if ULONG_MAX >> 31 >> 31 >> 1 == 1 +# undef uint64_t +typedef unsigned long int gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# elif defined _MSC_VER +# undef uint64_t +typedef unsigned __int64 gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# elif @HAVE_UNSIGNED_LONG_LONG_INT@ +# undef uint64_t +typedef unsigned long long int gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +# endif +# endif + +/* Avoid collision with Solaris 2.5.1 <pthread.h> etc. */ +# define _UINT8_T +# define _UINT32_T +# define _UINT64_T + + +/* 7.18.1.2. Minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types + are the same as the corresponding N_t types. */ + +# undef int_least8_t +# undef uint_least8_t +# undef int_least16_t +# undef uint_least16_t +# undef int_least32_t +# undef uint_least32_t +# undef int_least64_t +# undef uint_least64_t +# define int_least8_t int8_t +# define uint_least8_t uint8_t +# define int_least16_t int16_t +# define uint_least16_t uint16_t +# define int_least32_t int32_t +# define uint_least32_t uint32_t +# ifdef GL_INT64_T +# define int_least64_t int64_t +# endif +# ifdef GL_UINT64_T +# define uint_least64_t uint64_t +# endif + +/* 7.18.1.3. Fastest minimum-width integer types */ + +/* Note: Other <stdint.h> substitutes may define these types differently. + It is not recommended to use these types in public header files. */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types + are taken from the same list of types. The following code normally + uses types consistent with glibc, as that lessens the chance of + incompatibility with older GNU hosts. */ + +# undef int_fast8_t +# undef uint_fast8_t +# undef int_fast16_t +# undef uint_fast16_t +# undef int_fast32_t +# undef uint_fast32_t +# undef int_fast64_t +# undef uint_fast64_t +typedef signed char gl_int_fast8_t; +typedef unsigned char gl_uint_fast8_t; + +# ifdef __sun +/* Define types compatible with SunOS 5.10, so that code compiled under + earlier SunOS versions works with code compiled under SunOS 5.10. */ +typedef int gl_int_fast32_t; +typedef unsigned int gl_uint_fast32_t; +# else +typedef long int gl_int_fast32_t; +typedef unsigned long int gl_uint_fast32_t; +# endif +typedef gl_int_fast32_t gl_int_fast16_t; +typedef gl_uint_fast32_t gl_uint_fast16_t; + +# define int_fast8_t gl_int_fast8_t +# define uint_fast8_t gl_uint_fast8_t +# define int_fast16_t gl_int_fast16_t +# define uint_fast16_t gl_uint_fast16_t +# define int_fast32_t gl_int_fast32_t +# define uint_fast32_t gl_uint_fast32_t +# ifdef GL_INT64_T +# define int_fast64_t int64_t +# endif +# ifdef GL_UINT64_T +# define uint_fast64_t uint64_t +# endif + +/* 7.18.1.4. Integer types capable of holding object pointers */ + +/* kLIBC's stdint.h defines _INTPTR_T_DECLARED and needs its own + definitions of intptr_t and uintptr_t (which use int and unsigned) + to avoid clashes with declarations of system functions like sbrk. */ +# ifndef _INTPTR_T_DECLARED +# undef intptr_t +# undef uintptr_t +typedef long int gl_intptr_t; +typedef unsigned long int gl_uintptr_t; +# define intptr_t gl_intptr_t +# define uintptr_t gl_uintptr_t +# endif + +/* 7.18.1.5. Greatest-width integer types */ + +/* Note: These types are compiler dependent. It may be unwise to use them in + public header files. */ + +/* If the system defines INTMAX_MAX, assume that intmax_t works, and + similarly for UINTMAX_MAX and uintmax_t. This avoids problems with + assuming one type where another is used by the system. */ + +# ifndef INTMAX_MAX +# undef INTMAX_C +# undef intmax_t +# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +typedef long long int gl_intmax_t; +# define intmax_t gl_intmax_t +# elif defined GL_INT64_T +# define intmax_t int64_t +# else +typedef long int gl_intmax_t; +# define intmax_t gl_intmax_t +# endif +# endif + +# ifndef UINTMAX_MAX +# undef UINTMAX_C +# undef uintmax_t +# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +typedef unsigned long long int gl_uintmax_t; +# define uintmax_t gl_uintmax_t +# elif defined GL_UINT64_T +# define uintmax_t uint64_t +# else +typedef unsigned long int gl_uintmax_t; +# define uintmax_t gl_uintmax_t +# endif +# endif + +/* Verify that intmax_t and uintmax_t have the same size. Too much code + breaks if this is not the case. If this check fails, the reason is likely + to be found in the autoconf macros. */ +typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) + ? 1 : -1]; + +# define GNULIB_defined_stdint_types 1 +# endif /* !GNULIB_defined_stdint_types */ + +/* 7.18.2. Limits of specified-width integer types */ + +/* 7.18.2.1. Limits of exact-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. */ + +# undef INT8_MIN +# undef INT8_MAX +# undef UINT8_MAX +# define INT8_MIN (~ INT8_MAX) +# define INT8_MAX 127 +# define UINT8_MAX 255 + +# undef INT16_MIN +# undef INT16_MAX +# undef UINT16_MAX +# define INT16_MIN (~ INT16_MAX) +# define INT16_MAX 32767 +# define UINT16_MAX 65535 + +# undef INT32_MIN +# undef INT32_MAX +# undef UINT32_MAX +# define INT32_MIN (~ INT32_MAX) +# define INT32_MAX 2147483647 +# define UINT32_MAX 4294967295U + +# if defined GL_INT64_T && ! defined INT64_MAX +/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 + evaluates the latter incorrectly in preprocessor expressions. */ +# define INT64_MIN (- INTMAX_C (1) << 63) +# define INT64_MAX INTMAX_C (9223372036854775807) +# endif + +# if defined GL_UINT64_T && ! defined UINT64_MAX +# define UINT64_MAX UINTMAX_C (18446744073709551615) +# endif + +/* 7.18.2.2. Limits of minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types + are the same as the corresponding N_t types. */ + +# undef INT_LEAST8_MIN +# undef INT_LEAST8_MAX +# undef UINT_LEAST8_MAX +# define INT_LEAST8_MIN INT8_MIN +# define INT_LEAST8_MAX INT8_MAX +# define UINT_LEAST8_MAX UINT8_MAX + +# undef INT_LEAST16_MIN +# undef INT_LEAST16_MAX +# undef UINT_LEAST16_MAX +# define INT_LEAST16_MIN INT16_MIN +# define INT_LEAST16_MAX INT16_MAX +# define UINT_LEAST16_MAX UINT16_MAX + +# undef INT_LEAST32_MIN +# undef INT_LEAST32_MAX +# undef UINT_LEAST32_MAX +# define INT_LEAST32_MIN INT32_MIN +# define INT_LEAST32_MAX INT32_MAX +# define UINT_LEAST32_MAX UINT32_MAX + +# undef INT_LEAST64_MIN +# undef INT_LEAST64_MAX +# ifdef GL_INT64_T +# define INT_LEAST64_MIN INT64_MIN +# define INT_LEAST64_MAX INT64_MAX +# endif + +# undef UINT_LEAST64_MAX +# ifdef GL_UINT64_T +# define UINT_LEAST64_MAX UINT64_MAX +# endif + +/* 7.18.2.3. Limits of fastest minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types + are taken from the same list of types. */ + +# undef INT_FAST8_MIN +# undef INT_FAST8_MAX +# undef UINT_FAST8_MAX +# define INT_FAST8_MIN SCHAR_MIN +# define INT_FAST8_MAX SCHAR_MAX +# define UINT_FAST8_MAX UCHAR_MAX + +# undef INT_FAST16_MIN +# undef INT_FAST16_MAX +# undef UINT_FAST16_MAX +# define INT_FAST16_MIN INT_FAST32_MIN +# define INT_FAST16_MAX INT_FAST32_MAX +# define UINT_FAST16_MAX UINT_FAST32_MAX + +# undef INT_FAST32_MIN +# undef INT_FAST32_MAX +# undef UINT_FAST32_MAX +# ifdef __sun +# define INT_FAST32_MIN INT_MIN +# define INT_FAST32_MAX INT_MAX +# define UINT_FAST32_MAX UINT_MAX +# else +# define INT_FAST32_MIN LONG_MIN +# define INT_FAST32_MAX LONG_MAX +# define UINT_FAST32_MAX ULONG_MAX +# endif + +# undef INT_FAST64_MIN +# undef INT_FAST64_MAX +# ifdef GL_INT64_T +# define INT_FAST64_MIN INT64_MIN +# define INT_FAST64_MAX INT64_MAX +# endif + +# undef UINT_FAST64_MAX +# ifdef GL_UINT64_T +# define UINT_FAST64_MAX UINT64_MAX +# endif + +/* 7.18.2.4. Limits of integer types capable of holding object pointers */ + +# undef INTPTR_MIN +# undef INTPTR_MAX +# undef UINTPTR_MAX +# define INTPTR_MIN LONG_MIN +# define INTPTR_MAX LONG_MAX +# define UINTPTR_MAX ULONG_MAX + +/* 7.18.2.5. Limits of greatest-width integer types */ + +# ifndef INTMAX_MAX +# undef INTMAX_MIN +# ifdef INT64_MAX +# define INTMAX_MIN INT64_MIN +# define INTMAX_MAX INT64_MAX +# else +# define INTMAX_MIN INT32_MIN +# define INTMAX_MAX INT32_MAX +# endif +# endif + +# ifndef UINTMAX_MAX +# ifdef UINT64_MAX +# define UINTMAX_MAX UINT64_MAX +# else +# define UINTMAX_MAX UINT32_MAX +# endif +# endif + +/* 7.18.3. Limits of other integer types */ + +/* ptrdiff_t limits */ +# undef PTRDIFF_MIN +# undef PTRDIFF_MAX +# if @APPLE_UNIVERSAL_BUILD@ +# ifdef _LP64 +# define PTRDIFF_MIN _STDINT_SIGNED_MIN (64, 0l) +# define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) +# else +# define PTRDIFF_MIN _STDINT_SIGNED_MIN (32, 0) +# define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) +# endif +# else +# define PTRDIFF_MIN \ + _STDINT_SIGNED_MIN (@BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) +# define PTRDIFF_MAX \ + _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) +# endif + +/* sig_atomic_t limits */ +# undef SIG_ATOMIC_MIN +# undef SIG_ATOMIC_MAX +# if @HAVE_SIGNED_SIG_ATOMIC_T@ +# define SIG_ATOMIC_MIN \ + _STDINT_SIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) +# else +# define SIG_ATOMIC_MIN \ + _STDINT_UNSIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) +# endif +# define SIG_ATOMIC_MAX \ + _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ + 0@SIG_ATOMIC_T_SUFFIX@) + + +/* size_t limit */ +# undef SIZE_MAX +# if @APPLE_UNIVERSAL_BUILD@ +# ifdef _LP64 +# define SIZE_MAX _STDINT_MAX (0, 64, 0ul) +# else +# define SIZE_MAX _STDINT_MAX (0, 32, 0ul) +# endif +# else +# define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) +# endif + +/* wchar_t limits */ +/* Get WCHAR_MIN, WCHAR_MAX. + This include is not on the top, above, because on OSF/1 4.0 we have a + sequence of nested includes + <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes + <stdint.h> and assumes its types are already defined. */ +# if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX) + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +# include <stddef.h> +# include <stdio.h> +# include <time.h> +# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +# include <wchar.h> +# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +# endif +# undef WCHAR_MIN +# undef WCHAR_MAX +# if @HAVE_SIGNED_WCHAR_T@ +# define WCHAR_MIN \ + _STDINT_SIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) +# else +# define WCHAR_MIN \ + _STDINT_UNSIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) +# endif +# define WCHAR_MAX \ + _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) + +/* wint_t limits */ +# undef WINT_MIN +# undef WINT_MAX +# if @HAVE_SIGNED_WINT_T@ +# define WINT_MIN \ + _STDINT_SIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) +# else +# define WINT_MIN \ + _STDINT_UNSIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) +# endif +# define WINT_MAX \ + _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) + +/* 7.18.4. Macros for integer constants */ + +/* 7.18.4.1. Macros for minimum-width integer constants */ +/* According to ISO C 99 Technical Corrigendum 1 */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ + +# undef INT8_C +# undef UINT8_C +# define INT8_C(x) x +# define UINT8_C(x) x + +# undef INT16_C +# undef UINT16_C +# define INT16_C(x) x +# define UINT16_C(x) x + +# undef INT32_C +# undef UINT32_C +# define INT32_C(x) x +# define UINT32_C(x) x ## U + +# undef INT64_C +# undef UINT64_C +# if LONG_MAX >> 31 >> 31 == 1 +# define INT64_C(x) x##L +# elif defined _MSC_VER +# define INT64_C(x) x##i64 +# elif @HAVE_LONG_LONG_INT@ +# define INT64_C(x) x##LL +# endif +# if ULONG_MAX >> 31 >> 31 >> 1 == 1 +# define UINT64_C(x) x##UL +# elif defined _MSC_VER +# define UINT64_C(x) x##ui64 +# elif @HAVE_UNSIGNED_LONG_LONG_INT@ +# define UINT64_C(x) x##ULL +# endif + +/* 7.18.4.2. Macros for greatest-width integer constants */ + +# ifndef INTMAX_C +# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +# define INTMAX_C(x) x##LL +# elif defined GL_INT64_T +# define INTMAX_C(x) INT64_C(x) +# else +# define INTMAX_C(x) x##L +# endif +# endif + +# ifndef UINTMAX_C +# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +# define UINTMAX_C(x) x##ULL +# elif defined GL_UINT64_T +# define UINTMAX_C(x) UINT64_C(x) +# else +# define UINTMAX_C(x) x##UL +# endif +# endif + +#endif /* !@HAVE_C99_STDINT_H@ */ + +/* Macros specified by ISO/IEC TS 18661-1:2014. */ + +#if (!defined UINTMAX_WIDTH \ + && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) +# ifdef INT8_MAX +# define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX) +# endif +# ifdef UINT8_MAX +# define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX) +# endif +# ifdef INT16_MAX +# define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX) +# endif +# ifdef UINT16_MAX +# define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX) +# endif +# ifdef INT32_MAX +# define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX) +# endif +# ifdef UINT32_MAX +# define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX) +# endif +# ifdef INT64_MAX +# define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX) +# endif +# ifdef UINT64_MAX +# define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX) +# endif +# define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX) +# define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX) +# define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX) +# define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX) +# define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX) +# define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX) +# define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX) +# define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX) +# define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX) +# define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX) +# define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX) +# define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX) +# define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX) +# define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX) +# define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX) +# define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX) +# define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX) +# define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX) +# define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX) +# define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX) +# define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX) +# define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX) +# define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX) +# ifdef WINT_MAX +# define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX) +# endif +# ifdef SIG_ATOMIC_MAX +# define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX) +# endif +#endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ + +#endif /* _@GUARD_PREFIX@_STDINT_H */ +#endif /* !(defined __ANDROID__ && ...) */ +#endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ diff --git a/devspec.en_US/project/recutils/lib/stdio-impl.h b/devspec.en_US/project/recutils/lib/stdio-impl.h new file mode 100755 index 0000000..b2b2971 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/stdio-impl.h @@ -0,0 +1,202 @@ +/* Implementation details of FILE streams. + Copyright (C) 2007-2008, 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Many stdio implementations have the same logic and therefore can share + the same implementation of stdio extension API, except that some fields + have different naming conventions, or their access requires some casts. */ + +/* Glibc 2.28 made _IO_IN_BACKUP private. For now, work around this + problem by defining it ourselves. FIXME: Do not rely on glibc + internals. */ +#if !defined _IO_IN_BACKUP && defined _IO_EOF_SEEN +# define _IO_IN_BACKUP 0x100 +#endif + +/* BSD stdio derived implementations. */ + +#if defined __NetBSD__ /* NetBSD */ +/* Get __NetBSD_Version__. */ +# include <sys/param.h> +#endif + +#include <errno.h> /* For detecting Plan9. */ + +#if defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ + +# if defined __DragonFly__ /* DragonFly */ + /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/lib/libc/stdio/priv_stdio.h>. */ +# define fp_ ((struct { struct __FILE_public pub; \ + struct { unsigned char *_base; int _size; } _bf; \ + void *cookie; \ + void *_close; \ + void *_read; \ + void *_seek; \ + void *_write; \ + struct { unsigned char *_base; int _size; } _ub; \ + int _ur; \ + unsigned char _ubuf[3]; \ + unsigned char _nbuf[1]; \ + struct { unsigned char *_base; int _size; } _lb; \ + int _blksize; \ + fpos_t _offset; \ + /* More fields, not relevant here. */ \ + } *) fp) + /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/include/stdio.h>. */ +# define _p pub._p +# define _flags pub._flags +# define _r pub._r +# define _w pub._w +# elif defined __ANDROID__ /* Android */ + /* Up to this commit from 2015-10-12 + <https://android.googlesource.com/platform/bionic.git/+/f0141dfab10a4b332769d52fa76631a64741297a> + the innards of FILE were public, and fp_ub could be defined like for OpenBSD, + see <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/fileext.h> + and <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/local.h>. + After this commit, the innards of FILE are hidden. */ +# define fp_ ((struct { unsigned char *_p; \ + int _r; \ + int _w; \ + int _flags; \ + int _file; \ + struct { unsigned char *_base; size_t _size; } _bf; \ + int _lbfsize; \ + void *_cookie; \ + void *_close; \ + void *_read; \ + void *_seek; \ + void *_write; \ + struct { unsigned char *_base; size_t _size; } _ext; \ + unsigned char *_up; \ + int _ur; \ + unsigned char _ubuf[3]; \ + unsigned char _nbuf[1]; \ + struct { unsigned char *_base; size_t _size; } _lb; \ + int _blksize; \ + fpos_t _offset; \ + /* More fields, not relevant here. */ \ + } *) fp) +# else +# define fp_ fp +# endif + +# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __minix /* NetBSD >= 1.5ZA, OpenBSD, Minix 3 */ + /* See <http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> + and <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> + and <https://github.com/Stichting-MINIX-Research-Foundation/minix/blob/master/lib/libc/stdio/fileext.h> */ + struct __sfileext + { + struct __sbuf _ub; /* ungetc buffer */ + /* More fields, not relevant here. */ + }; +# define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub +# elif defined __ANDROID__ /* Android */ + struct __sfileext + { + struct { unsigned char *_base; size_t _size; } _ub; /* ungetc buffer */ + /* More fields, not relevant here. */ + }; +# define fp_ub ((struct __sfileext *) fp_->_ext._base)->_ub +# else /* FreeBSD, NetBSD <= 1.5Z, DragonFly, Mac OS X, Cygwin */ +# define fp_ub fp_->_ub +# endif + +# define HASUB(fp) (fp_ub._base != NULL) + +# if defined __ANDROID__ /* Android */ + /* Needed after this commit from 2016-01-25 + <https://android.googlesource.com/platform/bionic.git/+/e70e0e9267d069bf56a5078c99307e08a7280de7> */ +# ifndef __SEOF +# define __SLBF 1 +# define __SNBF 2 +# define __SRD 4 +# define __SWR 8 +# define __SRW 0x10 +# define __SEOF 0x20 +# define __SERR 0x40 +# endif +# ifndef __SOFF +# define __SOFF 0x1000 +# endif +# endif + +#endif + + +/* SystemV derived implementations. */ + +#ifdef __TANDEM /* NonStop Kernel */ +# ifndef _IOERR +/* These values were determined by the program 'stdioext-flags' at + <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>. */ +# define _IOERR 0x40 +# define _IOREAD 0x80 +# define _IOWRT 0x4 +# define _IORW 0x100 +# endif +#endif + +#if defined _IOERR + +# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */ +# define fp_ ((struct { unsigned char *_ptr; \ + unsigned char *_base; \ + unsigned char *_end; \ + long _cnt; \ + int _file; \ + unsigned int _flag; \ + } *) fp) +# elif defined __VMS /* OpenVMS */ +# define fp_ ((struct _iobuf *) fp) +# else +# define fp_ fp +# endif + +# if defined _SCO_DS /* OpenServer */ +# define _cnt __cnt +# define _ptr __ptr +# define _base __base +# define _flag __flag +# endif + +#elif defined _WIN32 && ! defined __CYGWIN__ /* newer Windows with MSVC */ + +/* <stdio.h> does not define the innards of FILE any more. */ +# define WINDOWS_OPAQUE_FILE + +struct _gl_real_FILE +{ + /* Note: Compared to older Windows and to mingw, it has the fields + _base and _cnt swapped. */ + unsigned char *_ptr; + unsigned char *_base; + int _cnt; + int _flag; + int _file; + int _charbuf; + int _bufsiz; +}; +# define fp_ ((struct _gl_real_FILE *) fp) + +/* These values were determined by a program similar to the one at + <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>. */ +# define _IOREAD 0x1 +# define _IOWRT 0x2 +# define _IORW 0x4 +# define _IOEOF 0x8 +# define _IOERR 0x10 + +#endif diff --git a/devspec.en_US/project/recutils/lib/stdio.h b/devspec.en_US/project/recutils/lib/stdio.h new file mode 100755 index 0000000..dbd9294 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/stdio.h @@ -0,0 +1,1851 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like <stdio.h>. + + Copyright (C) 2004, 2007-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H +/* Special invocation convention: + - Inside glibc header files. + - On OSF/1 5.1 we have a sequence of nested includes + <stdio.h> -> <getopt.h> -> <ctype.h> -> <sys/localedef.h> -> + <sys/lc_core.h> -> <nl_types.h> -> <mesg.h> -> <stdio.h>. + In this situation, the functions are not yet declared, therefore we cannot + provide the C++ aliases. */ + +#include_next <stdio.h> + +#else +/* Normal invocation convention. */ + +#ifndef _GL_STDIO_H + +#define _GL_ALREADY_INCLUDING_STDIO_H + +/* The include_next requires a split double-inclusion guard. */ +#include_next <stdio.h> + +#undef _GL_ALREADY_INCLUDING_STDIO_H + +#ifndef _GL_STDIO_H +#define _GL_STDIO_H + +/* Get va_list. Needed on many systems, including glibc 2.8. */ +#include <stdarg.h> + +#include <stddef.h> + +/* Get off_t and ssize_t. Needed on many systems, including glibc 2.8 + and eglibc 2.11.2. + May also define off_t to a 64-bit type on native Windows. */ +#include <sys/types.h> + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. + We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because + gnulib and libintl do '#define printf __printf__' when they override + the 'printf' function. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +#endif + +/* _GL_ATTRIBUTE_FORMAT_PRINTF + indicates to GCC that the function takes a format string and arguments, + where the format string directives are the ones standardized by ISO C99 + and POSIX. */ +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) +# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument)) +#else +# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) +#endif + +/* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF, + except that it indicates to GCC that the supported format string directives + are the ones of the system printf(), rather than the ones standardized by + ISO C99 and POSIX. */ +#if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU +# define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT_PRINTF (formatstring_parameter, first_argument) +#else +# define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) +#endif + +/* _GL_ATTRIBUTE_FORMAT_SCANF + indicates to GCC that the function takes a format string and arguments, + where the format string directives are the ones standardized by ISO C99 + and POSIX. */ +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) +# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument)) +#else +# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) +#endif + +/* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF, + except that it indicates to GCC that the supported format string directives + are the ones of the system scanf(), rather than the ones standardized by + ISO C99 and POSIX. */ +#define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) + +/* Solaris 10 and NetBSD 7.0 declare renameat in <unistd.h>, not in <stdio.h>. */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (0 || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \ + && ! defined __GLIBC__ +# include <unistd.h> +#endif + +/* MSVC declares 'perror' in <stdlib.h>, not in <stdio.h>. We must include + it before we #define perror rpl_perror. */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (0 || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) \ + && ! defined __GLIBC__ +# include <stdlib.h> +#endif + +/* MSVC declares 'remove' in <io.h>, not in <stdio.h>. We must include + it before we #define remove rpl_remove. */ +/* MSVC declares 'rename' in <io.h>, not in <stdio.h>. We must include + it before we #define rename rpl_rename. */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (0 || 1 || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) \ + && ! defined __GLIBC__ +# include <io.h> +#endif + + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* Macros for stringification. */ +#define _GL_STDIO_STRINGIZE(token) #token +#define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) + +/* When also using extern inline, suppress the use of static inline in + standard headers of problematic Apple configurations, as Libc at + least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., + <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>. + Perhaps Apple will fix this some day. */ +#if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ + && defined __GNUC__ && defined __STDC__) +# undef putc_unlocked +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dprintf rpl_dprintf +# endif +_GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...)); +# else +# if !1 +_GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...)); +# endif +_GL_CXXALIASWARN (dprintf); +#elif defined GNULIB_POSIXCHECK +# undef dprintf +# if HAVE_RAW_DECL_DPRINTF +_GL_WARN_ON_USE (dprintf, "dprintf is unportable - " + "use gnulib module dprintf for portability"); +# endif +#endif + +#if 0 +/* Close STREAM and its underlying file descriptor. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fclose rpl_fclose +# endif +_GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fclose, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (fclose, int, (FILE *stream)); +# endif +_GL_CXXALIASWARN (fclose); +#elif defined GNULIB_POSIXCHECK +# undef fclose +/* Assume fclose is always declared. */ +_GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - " + "use gnulib module fclose for portable POSIX compliance"); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fdopen +# define fdopen rpl_fdopen +# endif +_GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); +# else +_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); +# endif +_GL_CXXALIASWARN (fdopen); +#elif defined GNULIB_POSIXCHECK +# undef fdopen +/* Assume fdopen is always declared. */ +_GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - " + "use gnulib module fdopen for portability"); +#endif + +#if 0 +/* Flush all pending data on STREAM according to POSIX rules. Both + output and seekable input streams are supported. + Note! LOSS OF DATA can occur if fflush is applied on an input stream + that is _not_seekable_ or on an update stream that is _not_seekable_ + and in which the most recent operation was input. Seekability can + be tested with lseek(fileno(fp),0,SEEK_CUR). */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fflush rpl_fflush +# endif +_GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream)); +_GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream)); +# else +_GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream)); +# endif +_GL_CXXALIASWARN (fflush); +#elif defined GNULIB_POSIXCHECK +# undef fflush +/* Assume fflush is always declared. */ +_GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - " + "use gnulib module fflush for portable POSIX compliance"); +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fgetc +# define fgetc rpl_fgetc +# endif +_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fgetc, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (fgetc, int, (FILE *stream)); +# endif +_GL_CXXALIASWARN (fgetc); +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fgets +# define fgets rpl_fgets +# endif +_GL_FUNCDECL_RPL (fgets, char *, (char *s, int n, FILE *stream) + _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (fgets, char *, (char *s, int n, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream)); +# endif +_GL_CXXALIASWARN (fgets); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fopen +# define fopen rpl_fopen +# endif +_GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode)); +# else +_GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode)); +# endif +_GL_CXXALIASWARN (fopen); +#elif defined GNULIB_POSIXCHECK +# undef fopen +/* Assume fopen is always declared. */ +_GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - " + "use gnulib module fopen for portability"); +#endif + +#if 1 || 1 +# if (1 && 1) \ + || (1 && 0 && (0 || 0)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fprintf rpl_fprintf +# endif +# define GNULIB_overrides_fprintf 1 +# if 1 || 1 +_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# else +_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...)); +# else +_GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...)); +# endif +_GL_CXXALIASWARN (fprintf); +#endif +#if !1 && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_fprintf +# undef fprintf +# endif +/* Assume fprintf is always declared. */ +_GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " + "use gnulib module fprintf-posix for portable " + "POSIX compliance"); +#endif + +#if 0 +/* Discard all pending buffered I/O data on STREAM. + STREAM must not be wide-character oriented. + When discarding pending output, the file position is set back to where it + was before the write calls. When discarding pending input, the file + position is advanced to match the end of the previously read input. + Return 0 if successful. Upon error, return -1 and set errno. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fpurge rpl_fpurge +# endif +_GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream)); +# else +# if !1 +_GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream)); +# endif +_GL_CXXALIASWARN (fpurge); +#elif defined GNULIB_POSIXCHECK +# undef fpurge +# if HAVE_RAW_DECL_FPURGE +_GL_WARN_ON_USE (fpurge, "fpurge is not always present - " + "use gnulib module fpurge for portability"); +# endif +#endif + +#if 1 +# if 0 && (0 || 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fputc +# define fputc rpl_fputc +# endif +_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream)); +# endif +_GL_CXXALIASWARN (fputc); +#endif + +#if 1 +# if 0 && (0 || 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fputs +# define fputs rpl_fputs +# endif +_GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream)); +# endif +_GL_CXXALIASWARN (fputs); +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fread +# define fread rpl_fread +# endif +_GL_FUNCDECL_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream) + _GL_ARG_NONNULL ((4))); +_GL_CXXALIAS_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); +# endif +_GL_CXXALIASWARN (fread); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef freopen +# define freopen rpl_freopen +# endif +_GL_FUNCDECL_RPL (freopen, FILE *, + (const char *filename, const char *mode, FILE *stream) + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (freopen, FILE *, + (const char *filename, const char *mode, FILE *stream)); +# else +_GL_CXXALIAS_SYS (freopen, FILE *, + (const char *filename, const char *mode, FILE *stream)); +# endif +_GL_CXXALIASWARN (freopen); +#elif defined GNULIB_POSIXCHECK +# undef freopen +/* Assume freopen is always declared. */ +_GL_WARN_ON_USE (freopen, + "freopen on native Windows platforms is not POSIX compliant - " + "use gnulib module freopen for portability"); +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fscanf +# define fscanf rpl_fscanf +# endif +_GL_FUNCDECL_RPL (fscanf, int, (FILE *stream, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fscanf, int, (FILE *stream, const char *format, ...)); +# else +_GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...)); +# endif +_GL_CXXALIASWARN (fscanf); +#endif + + +/* Set up the following warnings, based on which modules are in use. + GNU Coding Standards discourage the use of fseek, since it imposes + an arbitrary limitation on some 32-bit hosts. Remember that the + fseek module depends on the fseeko module, so we only have three + cases to consider: + + 1. The developer is not using either module. Issue a warning under + GNULIB_POSIXCHECK for both functions, to remind them that both + functions have bugs on some systems. _GL_NO_LARGE_FILES has no + impact on this warning. + + 2. The developer is using both modules. They may be unaware of the + arbitrary limitations of fseek, so issue a warning under + GNULIB_POSIXCHECK. On the other hand, they may be using both + modules intentionally, so the developer can define + _GL_NO_LARGE_FILES in the compilation units where the use of fseek + is safe, to silence the warning. + + 3. The developer is using the fseeko module, but not fseek. Gnulib + guarantees that fseek will still work around platform bugs in that + case, but we presume that the developer is aware of the pitfalls of + fseek and was trying to avoid it, so issue a warning even when + GNULIB_POSIXCHECK is undefined. Again, _GL_NO_LARGE_FILES can be + defined to silence the warning in particular compilation units. + In C++ compilations with GNULIB_NAMESPACE, in order to avoid that + fseek gets defined as a macro, it is recommended that the developer + uses the fseek module, even if he is not calling the fseek function. + + Most gnulib clients that perform stream operations should fall into + category 3. */ + +#if 1 +# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES +# define _GL_FSEEK_WARN /* Category 2, above. */ +# undef fseek +# endif +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fseek +# define fseek rpl_fseek +# endif +_GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence)); +# else +_GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence)); +# endif +_GL_CXXALIASWARN (fseek); +#endif + +#if 1 +# if !1 && !defined _GL_NO_LARGE_FILES +# define _GL_FSEEK_WARN /* Category 3, above. */ +# undef fseek +# endif +# if 0 +/* Provide an fseeko function that is aware of a preceding fflush(), and which + detects pipes. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fseeko +# define fseeko rpl_fseeko +# endif +_GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)); +# endif +_GL_CXXALIASWARN (fseeko); +#elif defined GNULIB_POSIXCHECK +# define _GL_FSEEK_WARN /* Category 1, above. */ +# undef fseek +# undef fseeko +# if HAVE_RAW_DECL_FSEEKO +_GL_WARN_ON_USE (fseeko, "fseeko is unportable - " + "use gnulib module fseeko for portability"); +# endif +#endif + +#ifdef _GL_FSEEK_WARN +# undef _GL_FSEEK_WARN +/* Here, either fseek is undefined (but C89 guarantees that it is + declared), or it is defined as rpl_fseek (declared above). */ +_GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB " + "on 32-bit platforms - " + "use fseeko function for handling of large files"); +#endif + + +/* ftell, ftello. See the comments on fseek/fseeko. */ + +#if 1 +# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES +# define _GL_FTELL_WARN /* Category 2, above. */ +# undef ftell +# endif +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ftell +# define ftell rpl_ftell +# endif +_GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (ftell, long, (FILE *fp)); +# else +_GL_CXXALIAS_SYS (ftell, long, (FILE *fp)); +# endif +_GL_CXXALIASWARN (ftell); +#endif + +#if 1 +# if !1 && !defined _GL_NO_LARGE_FILES +# define _GL_FTELL_WARN /* Category 3, above. */ +# undef ftell +# endif +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ftello +# define ftello rpl_ftello +# endif +_GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp)); +# endif +_GL_CXXALIASWARN (ftello); +#elif defined GNULIB_POSIXCHECK +# define _GL_FTELL_WARN /* Category 1, above. */ +# undef ftell +# undef ftello +# if HAVE_RAW_DECL_FTELLO +_GL_WARN_ON_USE (ftello, "ftello is unportable - " + "use gnulib module ftello for portability"); +# endif +#endif + +#ifdef _GL_FTELL_WARN +# undef _GL_FTELL_WARN +/* Here, either ftell is undefined (but C89 guarantees that it is + declared), or it is defined as rpl_ftell (declared above). */ +_GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB " + "on 32-bit platforms - " + "use ftello function for handling of large files"); +#endif + + +#if 1 +# if 0 && (0 || 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fwrite +# define fwrite rpl_fwrite +# endif +_GL_FUNCDECL_RPL (fwrite, size_t, + (const void *ptr, size_t s, size_t n, FILE *stream) + _GL_ARG_NONNULL ((1, 4))); +_GL_CXXALIAS_RPL (fwrite, size_t, + (const void *ptr, size_t s, size_t n, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fwrite, size_t, + (const void *ptr, size_t s, size_t n, FILE *stream)); + +/* Work around bug 11959 when fortifying glibc 2.4 through 2.15 + <https://sourceware.org/bugzilla/show_bug.cgi?id=11959>, + which sometimes causes an unwanted diagnostic for fwrite calls. + This affects only function declaration attributes under certain + versions of gcc and clang, and is not needed for C++. */ +# if (0 < __USE_FORTIFY_LEVEL \ + && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \ + && 3 < __GNUC__ + (4 <= __GNUC_MINOR__) \ + && !defined __cplusplus) +# undef fwrite +# undef fwrite_unlocked +extern size_t __REDIRECT (rpl_fwrite, + (const void *__restrict, size_t, size_t, + FILE *__restrict), + fwrite); +extern size_t __REDIRECT (rpl_fwrite_unlocked, + (const void *__restrict, size_t, size_t, + FILE *__restrict), + fwrite_unlocked); +# define fwrite rpl_fwrite +# define fwrite_unlocked rpl_fwrite_unlocked +# endif +# endif +_GL_CXXALIASWARN (fwrite); +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getc +# define getc rpl_fgetc +# endif +_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (getc, int, (FILE *stream)); +# endif +_GL_CXXALIASWARN (getc); +#endif + +#if 1 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getchar +# define getchar rpl_getchar +# endif +_GL_FUNCDECL_RPL (getchar, int, (void)); +_GL_CXXALIAS_RPL (getchar, int, (void)); +# else +_GL_CXXALIAS_SYS (getchar, int, (void)); +# endif +_GL_CXXALIASWARN (getchar); +#endif + +#if 1 +/* Read input, up to (and including) the next occurrence of DELIMITER, from + STREAM, store it in *LINEPTR (and NUL-terminate it). + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getdelim +# define getdelim rpl_getdelim +# endif +_GL_FUNCDECL_RPL (getdelim, ssize_t, + (char **lineptr, size_t *linesize, int delimiter, + FILE *stream) + _GL_ARG_NONNULL ((1, 2, 4))); +_GL_CXXALIAS_RPL (getdelim, ssize_t, + (char **lineptr, size_t *linesize, int delimiter, + FILE *stream)); +# else +# if !1 +_GL_FUNCDECL_SYS (getdelim, ssize_t, + (char **lineptr, size_t *linesize, int delimiter, + FILE *stream) + _GL_ARG_NONNULL ((1, 2, 4))); +# endif +_GL_CXXALIAS_SYS (getdelim, ssize_t, + (char **lineptr, size_t *linesize, int delimiter, + FILE *stream)); +# endif +_GL_CXXALIASWARN (getdelim); +#elif defined GNULIB_POSIXCHECK +# undef getdelim +# if HAVE_RAW_DECL_GETDELIM +_GL_WARN_ON_USE (getdelim, "getdelim is unportable - " + "use gnulib module getdelim for portability"); +# endif +#endif + +#if 1 +/* Read a line, up to (and including) the next newline, from STREAM, store it + in *LINEPTR (and NUL-terminate it). + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getline +# define getline rpl_getline +# endif +_GL_FUNCDECL_RPL (getline, ssize_t, + (char **lineptr, size_t *linesize, FILE *stream) + _GL_ARG_NONNULL ((1, 2, 3))); +_GL_CXXALIAS_RPL (getline, ssize_t, + (char **lineptr, size_t *linesize, FILE *stream)); +# else +# if !1 +_GL_FUNCDECL_SYS (getline, ssize_t, + (char **lineptr, size_t *linesize, FILE *stream) + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +_GL_CXXALIAS_SYS (getline, ssize_t, + (char **lineptr, size_t *linesize, FILE *stream)); +# endif +# if 1 +_GL_CXXALIASWARN (getline); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getline +# if HAVE_RAW_DECL_GETLINE +_GL_WARN_ON_USE (getline, "getline is unportable - " + "use gnulib module getline for portability"); +# endif +#endif + +/* It is very rare that the developer ever has full control of stdin, + so any use of gets warrants an unconditional warning; besides, C11 + removed it. */ +#undef gets +#if HAVE_RAW_DECL_GETS && !defined __cplusplus +_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); +#endif + +#if 0 || 0 +struct obstack; +/* Grow an obstack with formatted output. Return the number of + bytes added to OBS. No trailing nul byte is added, and the + object should be closed with obstack_finish before use. Upon + memory allocation error, call obstack_alloc_failed_handler. Upon + other error, return -1. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define obstack_printf rpl_obstack_printf +# endif +_GL_FUNCDECL_RPL (obstack_printf, int, + (struct obstack *obs, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (obstack_printf, int, + (struct obstack *obs, const char *format, ...)); +# else +# if !1 +_GL_FUNCDECL_SYS (obstack_printf, int, + (struct obstack *obs, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (obstack_printf, int, + (struct obstack *obs, const char *format, ...)); +# endif +_GL_CXXALIASWARN (obstack_printf); +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define obstack_vprintf rpl_obstack_vprintf +# endif +_GL_FUNCDECL_RPL (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args)); +# else +# if !1 +_GL_FUNCDECL_SYS (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (obstack_vprintf); +#endif + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pclose, int, (FILE *stream)); +_GL_CXXALIASWARN (pclose); +#elif defined GNULIB_POSIXCHECK +# undef pclose +# if HAVE_RAW_DECL_PCLOSE +_GL_WARN_ON_USE (pclose, "pclose is unportable - " + "use gnulib module pclose for more portability"); +# endif +#endif + +#if 0 +/* Print a message to standard error, describing the value of ERRNO, + (if STRING is not NULL and not empty) prefixed with STRING and ": ", + and terminated with a newline. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define perror rpl_perror +# endif +_GL_FUNCDECL_RPL (perror, void, (const char *string)); +_GL_CXXALIAS_RPL (perror, void, (const char *string)); +# else +_GL_CXXALIAS_SYS (perror, void, (const char *string)); +# endif +_GL_CXXALIASWARN (perror); +#elif defined GNULIB_POSIXCHECK +# undef perror +/* Assume perror is always declared. */ +_GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " + "use gnulib module perror for portability"); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef popen +# define popen rpl_popen +# endif +_GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); +# else +# if !1 +_GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); +# endif +_GL_CXXALIASWARN (popen); +#elif defined GNULIB_POSIXCHECK +# undef popen +# if HAVE_RAW_DECL_POPEN +_GL_WARN_ON_USE (popen, "popen is buggy on some platforms - " + "use gnulib module popen or pipe for more portability"); +# endif +#endif + +#if 1 || 1 +# if (1 && 1) \ + || (1 && 0 && (0 || 0)) +# if defined __GNUC__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +/* Don't break __attribute__((format(printf,M,N))). */ +# define printf __printf__ +# endif +# if 1 || 1 +_GL_FUNCDECL_RPL_1 (__printf__, int, + (const char *format, ...) + __asm__ ("" + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) + _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) + _GL_ARG_NONNULL ((1))); +# else +_GL_FUNCDECL_RPL_1 (__printf__, int, + (const char *format, ...) + __asm__ ("" + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); +# else +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define printf rpl_printf +# endif +_GL_FUNCDECL_RPL (printf, int, + (const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (printf, int, (const char *format, ...)); +# endif +# define GNULIB_overrides_printf 1 +# else +_GL_CXXALIAS_SYS (printf, int, (const char *format, ...)); +# endif +_GL_CXXALIASWARN (printf); +#endif +#if !1 && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_printf +# undef printf +# endif +/* Assume printf is always declared. */ +_GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " + "use gnulib module printf-posix for portable " + "POSIX compliance"); +#endif + +#if 1 +# if 0 && (0 || 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putc +# define putc rpl_fputc +# endif +_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream)); +# else +_GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream)); +# endif +_GL_CXXALIASWARN (putc); +#endif + +#if 1 +# if 0 && (0 || 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putchar +# define putchar rpl_putchar +# endif +_GL_FUNCDECL_RPL (putchar, int, (int c)); +_GL_CXXALIAS_RPL (putchar, int, (int c)); +# else +_GL_CXXALIAS_SYS (putchar, int, (int c)); +# endif +_GL_CXXALIASWARN (putchar); +#endif + +#if 1 +# if 0 && (0 || 0) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef puts +# define puts rpl_puts +# endif +_GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (puts, int, (const char *string)); +# else +_GL_CXXALIAS_SYS (puts, int, (const char *string)); +# endif +_GL_CXXALIASWARN (puts); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef remove +# define remove rpl_remove +# endif +_GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (remove, int, (const char *name)); +# else +_GL_CXXALIAS_SYS (remove, int, (const char *name)); +# endif +_GL_CXXALIASWARN (remove); +#elif defined GNULIB_POSIXCHECK +# undef remove +/* Assume remove is always declared. */ +_GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - " + "use gnulib module remove for more portability"); +#endif + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef rename +# define rename rpl_rename +# endif +_GL_FUNCDECL_RPL (rename, int, + (const char *old_filename, const char *new_filename) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (rename, int, + (const char *old_filename, const char *new_filename)); +# else +_GL_CXXALIAS_SYS (rename, int, + (const char *old_filename, const char *new_filename)); +# endif +_GL_CXXALIASWARN (rename); +#elif defined GNULIB_POSIXCHECK +# undef rename +/* Assume rename is always declared. */ +_GL_WARN_ON_USE (rename, "rename is buggy on some platforms - " + "use gnulib module rename for more portability"); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef renameat +# define renameat rpl_renameat +# endif +_GL_FUNCDECL_RPL (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2) + _GL_ARG_NONNULL ((2, 4))); +_GL_CXXALIAS_RPL (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2)); +# else +# if !1 +_GL_FUNCDECL_SYS (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2) + _GL_ARG_NONNULL ((2, 4))); +# endif +_GL_CXXALIAS_SYS (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2)); +# endif +_GL_CXXALIASWARN (renameat); +#elif defined GNULIB_POSIXCHECK +# undef renameat +# if HAVE_RAW_DECL_RENAMEAT +_GL_WARN_ON_USE (renameat, "renameat is not portable - " + "use gnulib module renameat for portability"); +# endif +#endif + +#if 1 +# if 0 && 0 +# if defined __GNUC__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef scanf +/* Don't break __attribute__((format(scanf,M,N))). */ +# define scanf __scanf__ +# endif +_GL_FUNCDECL_RPL_1 (__scanf__, int, + (const char *format, ...) + __asm__ ("" + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf)) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *format, ...)); +# else +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef scanf +# define scanf rpl_scanf +# endif +_GL_FUNCDECL_RPL (scanf, int, (const char *format, ...) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (scanf, int, (const char *format, ...)); +# endif +# else +_GL_CXXALIAS_SYS (scanf, int, (const char *format, ...)); +# endif +_GL_CXXALIASWARN (scanf); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define snprintf rpl_snprintf +# endif +_GL_FUNCDECL_RPL (snprintf, int, + (char *str, size_t size, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) + _GL_ARG_NONNULL ((3))); +_GL_CXXALIAS_RPL (snprintf, int, + (char *str, size_t size, const char *format, ...)); +# else +# if !1 +_GL_FUNCDECL_SYS (snprintf, int, + (char *str, size_t size, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) + _GL_ARG_NONNULL ((3))); +# endif +_GL_CXXALIAS_SYS (snprintf, int, + (char *str, size_t size, const char *format, ...)); +# endif +_GL_CXXALIASWARN (snprintf); +#elif defined GNULIB_POSIXCHECK +# undef snprintf +# if HAVE_RAW_DECL_SNPRINTF +_GL_WARN_ON_USE (snprintf, "snprintf is unportable - " + "use gnulib module snprintf for portability"); +# endif +#endif + +/* Some people would argue that all sprintf uses should be warned about + (for example, OpenBSD issues a link warning for it), + since it can cause security holes due to buffer overruns. + However, we believe that sprintf can be used safely, and is more + efficient than snprintf in those safe cases; and as proof of our + belief, we use sprintf in several gnulib modules. So this header + intentionally avoids adding a warning to sprintf except when + GNULIB_POSIXCHECK is defined. */ + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define sprintf rpl_sprintf +# endif +_GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...)); +# else +_GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...)); +# endif +_GL_CXXALIASWARN (sprintf); +#elif defined GNULIB_POSIXCHECK +# undef sprintf +/* Assume sprintf is always declared. */ +_GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - " + "use gnulib module sprintf-posix for portable " + "POSIX compliance"); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define tmpfile rpl_tmpfile +# endif +_GL_FUNCDECL_RPL (tmpfile, FILE *, (void)); +_GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); +# else +_GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); +# endif +_GL_CXXALIASWARN (tmpfile); +#elif defined GNULIB_POSIXCHECK +# undef tmpfile +# if HAVE_RAW_DECL_TMPFILE +_GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " + "use gnulib module tmpfile for portability"); +# endif +#endif + +#if 1 +/* Write formatted output to a string dynamically allocated with malloc(). + If the memory allocation succeeds, store the address of the string in + *RESULT and return the number of resulting bytes, excluding the trailing + NUL. Upon memory allocation error, or some other error, return -1. */ +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define asprintf rpl_asprintf +# endif +_GL_FUNCDECL_RPL (asprintf, int, + (char **result, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (asprintf, int, + (char **result, const char *format, ...)); +# else +# if !1 +_GL_FUNCDECL_SYS (asprintf, int, + (char **result, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (asprintf, int, + (char **result, const char *format, ...)); +# endif +_GL_CXXALIASWARN (asprintf); +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vasprintf rpl_vasprintf +# endif +_GL_FUNCDECL_RPL (vasprintf, int, + (char **result, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (vasprintf, int, + (char **result, const char *format, va_list args)); +# else +# if !1 +_GL_FUNCDECL_SYS (vasprintf, int, + (char **result, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (vasprintf, int, + (char **result, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vasprintf); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vdprintf rpl_vdprintf +# endif +_GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args)); +# else +# if !1 +_GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((2))); +# endif +/* Need to cast, because on Solaris, the third parameter will likely be + __va_list args. */ +_GL_CXXALIAS_SYS_CAST (vdprintf, int, + (int fd, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vdprintf); +#elif defined GNULIB_POSIXCHECK +# undef vdprintf +# if HAVE_RAW_DECL_VDPRINTF +_GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - " + "use gnulib module vdprintf for portability"); +# endif +#endif + +#if 1 || 1 +# if (1 && 1) \ + || (1 && 0 && (0 || 0)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vfprintf rpl_vfprintf +# endif +# define GNULIB_overrides_vfprintf 1 +# if 1 +_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# else +_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)); +# else +/* Need to cast, because on Solaris, the third parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vfprintf, int, + (FILE *fp, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vfprintf); +#endif +#if !1 && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_vfprintf +# undef vfprintf +# endif +/* Assume vfprintf is always declared. */ +_GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " + "use gnulib module vfprintf-posix for portable " + "POSIX compliance"); +#endif + +#if 0 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef vfscanf +# define vfscanf rpl_vfscanf +# endif +_GL_FUNCDECL_RPL (vfscanf, int, + (FILE *stream, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (vfscanf, int, + (FILE *stream, const char *format, va_list args)); +# else +_GL_CXXALIAS_SYS (vfscanf, int, + (FILE *stream, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vfscanf); +#endif + +#if 0 || 1 +# if (0 && 0) \ + || (1 && 0 && (0 || 0)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vprintf rpl_vprintf +# endif +# define GNULIB_overrides_vprintf 1 +# if 0 || 1 +_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0) + _GL_ARG_NONNULL ((1))); +# else +_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args)); +# else +/* Need to cast, because on Solaris, the second parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vprintf); +#endif +#if !0 && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_vprintf +# undef vprintf +# endif +/* Assume vprintf is always declared. */ +_GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " + "use gnulib module vprintf-posix for portable " + "POSIX compliance"); +#endif + +#if 0 +# if 0 && 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef vscanf +# define vscanf rpl_vscanf +# endif +_GL_FUNCDECL_RPL (vscanf, int, (const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (vscanf, int, (const char *format, va_list args)); +# else +_GL_CXXALIAS_SYS (vscanf, int, (const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vscanf); +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vsnprintf rpl_vsnprintf +# endif +_GL_FUNCDECL_RPL (vsnprintf, int, + (char *str, size_t size, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) + _GL_ARG_NONNULL ((3))); +_GL_CXXALIAS_RPL (vsnprintf, int, + (char *str, size_t size, const char *format, va_list args)); +# else +# if !1 +_GL_FUNCDECL_SYS (vsnprintf, int, + (char *str, size_t size, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) + _GL_ARG_NONNULL ((3))); +# endif +_GL_CXXALIAS_SYS (vsnprintf, int, + (char *str, size_t size, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vsnprintf); +#elif defined GNULIB_POSIXCHECK +# undef vsnprintf +# if HAVE_RAW_DECL_VSNPRINTF +_GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - " + "use gnulib module vsnprintf for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vsprintf rpl_vsprintf +# endif +_GL_FUNCDECL_RPL (vsprintf, int, + (char *str, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (vsprintf, int, + (char *str, const char *format, va_list args)); +# else +/* Need to cast, because on Solaris, the third parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vsprintf, int, + (char *str, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vsprintf); +#elif defined GNULIB_POSIXCHECK +# undef vsprintf +/* Assume vsprintf is always declared. */ +_GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - " + "use gnulib module vsprintf-posix for portable " + "POSIX compliance"); +#endif + +#endif /* _GL_STDIO_H */ +#endif /* _GL_STDIO_H */ +#endif diff --git a/devspec.en_US/project/recutils/lib/stdio.in.h b/devspec.en_US/project/recutils/lib/stdio.in.h new file mode 100755 index 0000000..acf29c4 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/stdio.in.h @@ -0,0 +1,1377 @@ +/* A GNU-like <stdio.h>. + + Copyright (C) 2004, 2007-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H +/* Special invocation convention: + - Inside glibc header files. + - On OSF/1 5.1 we have a sequence of nested includes + <stdio.h> -> <getopt.h> -> <ctype.h> -> <sys/localedef.h> -> + <sys/lc_core.h> -> <nl_types.h> -> <mesg.h> -> <stdio.h>. + In this situation, the functions are not yet declared, therefore we cannot + provide the C++ aliases. */ + +#@INCLUDE_NEXT@ @NEXT_STDIO_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_STDIO_H + +#define _GL_ALREADY_INCLUDING_STDIO_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STDIO_H@ + +#undef _GL_ALREADY_INCLUDING_STDIO_H + +#ifndef _@GUARD_PREFIX@_STDIO_H +#define _@GUARD_PREFIX@_STDIO_H + +/* Get va_list. Needed on many systems, including glibc 2.8. */ +#include <stdarg.h> + +#include <stddef.h> + +/* Get off_t and ssize_t. Needed on many systems, including glibc 2.8 + and eglibc 2.11.2. + May also define off_t to a 64-bit type on native Windows. */ +#include <sys/types.h> + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. + We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because + gnulib and libintl do '#define printf __printf__' when they override + the 'printf' function. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +#endif + +/* _GL_ATTRIBUTE_FORMAT_PRINTF + indicates to GCC that the function takes a format string and arguments, + where the format string directives are the ones standardized by ISO C99 + and POSIX. */ +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) +# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument)) +#else +# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) +#endif + +/* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF, + except that it indicates to GCC that the supported format string directives + are the ones of the system printf(), rather than the ones standardized by + ISO C99 and POSIX. */ +#if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU +# define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT_PRINTF (formatstring_parameter, first_argument) +#else +# define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) +#endif + +/* _GL_ATTRIBUTE_FORMAT_SCANF + indicates to GCC that the function takes a format string and arguments, + where the format string directives are the ones standardized by ISO C99 + and POSIX. */ +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) +# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument)) +#else +# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) +#endif + +/* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF, + except that it indicates to GCC that the supported format string directives + are the ones of the system scanf(), rather than the ones standardized by + ISO C99 and POSIX. */ +#define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \ + _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) + +/* Solaris 10 and NetBSD 7.0 declare renameat in <unistd.h>, not in <stdio.h>. */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \ + && ! defined __GLIBC__ +# include <unistd.h> +#endif + +/* MSVC declares 'perror' in <stdlib.h>, not in <stdio.h>. We must include + it before we #define perror rpl_perror. */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (@GNULIB_PERROR@ || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) \ + && ! defined __GLIBC__ +# include <stdlib.h> +#endif + +/* MSVC declares 'remove' in <io.h>, not in <stdio.h>. We must include + it before we #define remove rpl_remove. */ +/* MSVC declares 'rename' in <io.h>, not in <stdio.h>. We must include + it before we #define rename rpl_rename. */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (@GNULIB_REMOVE@ || @GNULIB_RENAME@ || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) \ + && ! defined __GLIBC__ +# include <io.h> +#endif + + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +/* Macros for stringification. */ +#define _GL_STDIO_STRINGIZE(token) #token +#define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) + +/* When also using extern inline, suppress the use of static inline in + standard headers of problematic Apple configurations, as Libc at + least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., + <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>. + Perhaps Apple will fix this some day. */ +#if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ + && defined __GNUC__ && defined __STDC__) +# undef putc_unlocked +#endif + +#if @GNULIB_DPRINTF@ +# if @REPLACE_DPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dprintf rpl_dprintf +# endif +_GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...)); +# else +# if !@HAVE_DPRINTF@ +_GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...)); +# endif +_GL_CXXALIASWARN (dprintf); +#elif defined GNULIB_POSIXCHECK +# undef dprintf +# if HAVE_RAW_DECL_DPRINTF +_GL_WARN_ON_USE (dprintf, "dprintf is unportable - " + "use gnulib module dprintf for portability"); +# endif +#endif + +#if @GNULIB_FCLOSE@ +/* Close STREAM and its underlying file descriptor. */ +# if @REPLACE_FCLOSE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fclose rpl_fclose +# endif +_GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fclose, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (fclose, int, (FILE *stream)); +# endif +_GL_CXXALIASWARN (fclose); +#elif defined GNULIB_POSIXCHECK +# undef fclose +/* Assume fclose is always declared. */ +_GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - " + "use gnulib module fclose for portable POSIX compliance"); +#endif + +#if @GNULIB_FDOPEN@ +# if @REPLACE_FDOPEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fdopen +# define fdopen rpl_fdopen +# endif +_GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); +# else +_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); +# endif +_GL_CXXALIASWARN (fdopen); +#elif defined GNULIB_POSIXCHECK +# undef fdopen +/* Assume fdopen is always declared. */ +_GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - " + "use gnulib module fdopen for portability"); +#endif + +#if @GNULIB_FFLUSH@ +/* Flush all pending data on STREAM according to POSIX rules. Both + output and seekable input streams are supported. + Note! LOSS OF DATA can occur if fflush is applied on an input stream + that is _not_seekable_ or on an update stream that is _not_seekable_ + and in which the most recent operation was input. Seekability can + be tested with lseek(fileno(fp),0,SEEK_CUR). */ +# if @REPLACE_FFLUSH@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fflush rpl_fflush +# endif +_GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream)); +_GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream)); +# else +_GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream)); +# endif +_GL_CXXALIASWARN (fflush); +#elif defined GNULIB_POSIXCHECK +# undef fflush +/* Assume fflush is always declared. */ +_GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - " + "use gnulib module fflush for portable POSIX compliance"); +#endif + +#if @GNULIB_FGETC@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fgetc +# define fgetc rpl_fgetc +# endif +_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fgetc, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (fgetc, int, (FILE *stream)); +# endif +_GL_CXXALIASWARN (fgetc); +#endif + +#if @GNULIB_FGETS@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fgets +# define fgets rpl_fgets +# endif +_GL_FUNCDECL_RPL (fgets, char *, (char *s, int n, FILE *stream) + _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (fgets, char *, (char *s, int n, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream)); +# endif +_GL_CXXALIASWARN (fgets); +#endif + +#if @GNULIB_FOPEN@ +# if @REPLACE_FOPEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fopen +# define fopen rpl_fopen +# endif +_GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode)); +# else +_GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode)); +# endif +_GL_CXXALIASWARN (fopen); +#elif defined GNULIB_POSIXCHECK +# undef fopen +/* Assume fopen is always declared. */ +_GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - " + "use gnulib module fopen for portability"); +#endif + +#if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@ +# if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \ + || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fprintf rpl_fprintf +# endif +# define GNULIB_overrides_fprintf 1 +# if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ +_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# else +_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...)); +# else +_GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...)); +# endif +_GL_CXXALIASWARN (fprintf); +#endif +#if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_fprintf +# undef fprintf +# endif +/* Assume fprintf is always declared. */ +_GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " + "use gnulib module fprintf-posix for portable " + "POSIX compliance"); +#endif + +#if @GNULIB_FPURGE@ +/* Discard all pending buffered I/O data on STREAM. + STREAM must not be wide-character oriented. + When discarding pending output, the file position is set back to where it + was before the write calls. When discarding pending input, the file + position is advanced to match the end of the previously read input. + Return 0 if successful. Upon error, return -1 and set errno. */ +# if @REPLACE_FPURGE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define fpurge rpl_fpurge +# endif +_GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream)); +# else +# if !@HAVE_DECL_FPURGE@ +_GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream)); +# endif +_GL_CXXALIASWARN (fpurge); +#elif defined GNULIB_POSIXCHECK +# undef fpurge +# if HAVE_RAW_DECL_FPURGE +_GL_WARN_ON_USE (fpurge, "fpurge is not always present - " + "use gnulib module fpurge for portability"); +# endif +#endif + +#if @GNULIB_FPUTC@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fputc +# define fputc rpl_fputc +# endif +_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream)); +# endif +_GL_CXXALIASWARN (fputc); +#endif + +#if @GNULIB_FPUTS@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fputs +# define fputs rpl_fputs +# endif +_GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream)); +# endif +_GL_CXXALIASWARN (fputs); +#endif + +#if @GNULIB_FREAD@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fread +# define fread rpl_fread +# endif +_GL_FUNCDECL_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream) + _GL_ARG_NONNULL ((4))); +_GL_CXXALIAS_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); +# endif +_GL_CXXALIASWARN (fread); +#endif + +#if @GNULIB_FREOPEN@ +# if @REPLACE_FREOPEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef freopen +# define freopen rpl_freopen +# endif +_GL_FUNCDECL_RPL (freopen, FILE *, + (const char *filename, const char *mode, FILE *stream) + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (freopen, FILE *, + (const char *filename, const char *mode, FILE *stream)); +# else +_GL_CXXALIAS_SYS (freopen, FILE *, + (const char *filename, const char *mode, FILE *stream)); +# endif +_GL_CXXALIASWARN (freopen); +#elif defined GNULIB_POSIXCHECK +# undef freopen +/* Assume freopen is always declared. */ +_GL_WARN_ON_USE (freopen, + "freopen on native Windows platforms is not POSIX compliant - " + "use gnulib module freopen for portability"); +#endif + +#if @GNULIB_FSCANF@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fscanf +# define fscanf rpl_fscanf +# endif +_GL_FUNCDECL_RPL (fscanf, int, (FILE *stream, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (fscanf, int, (FILE *stream, const char *format, ...)); +# else +_GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...)); +# endif +_GL_CXXALIASWARN (fscanf); +#endif + + +/* Set up the following warnings, based on which modules are in use. + GNU Coding Standards discourage the use of fseek, since it imposes + an arbitrary limitation on some 32-bit hosts. Remember that the + fseek module depends on the fseeko module, so we only have three + cases to consider: + + 1. The developer is not using either module. Issue a warning under + GNULIB_POSIXCHECK for both functions, to remind them that both + functions have bugs on some systems. _GL_NO_LARGE_FILES has no + impact on this warning. + + 2. The developer is using both modules. They may be unaware of the + arbitrary limitations of fseek, so issue a warning under + GNULIB_POSIXCHECK. On the other hand, they may be using both + modules intentionally, so the developer can define + _GL_NO_LARGE_FILES in the compilation units where the use of fseek + is safe, to silence the warning. + + 3. The developer is using the fseeko module, but not fseek. Gnulib + guarantees that fseek will still work around platform bugs in that + case, but we presume that the developer is aware of the pitfalls of + fseek and was trying to avoid it, so issue a warning even when + GNULIB_POSIXCHECK is undefined. Again, _GL_NO_LARGE_FILES can be + defined to silence the warning in particular compilation units. + In C++ compilations with GNULIB_NAMESPACE, in order to avoid that + fseek gets defined as a macro, it is recommended that the developer + uses the fseek module, even if he is not calling the fseek function. + + Most gnulib clients that perform stream operations should fall into + category 3. */ + +#if @GNULIB_FSEEK@ +# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES +# define _GL_FSEEK_WARN /* Category 2, above. */ +# undef fseek +# endif +# if @REPLACE_FSEEK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fseek +# define fseek rpl_fseek +# endif +_GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence)); +# else +_GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence)); +# endif +_GL_CXXALIASWARN (fseek); +#endif + +#if @GNULIB_FSEEKO@ +# if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES +# define _GL_FSEEK_WARN /* Category 3, above. */ +# undef fseek +# endif +# if @REPLACE_FSEEKO@ +/* Provide an fseeko function that is aware of a preceding fflush(), and which + detects pipes. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fseeko +# define fseeko rpl_fseeko +# endif +_GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)); +# else +# if ! @HAVE_DECL_FSEEKO@ +_GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)); +# endif +_GL_CXXALIASWARN (fseeko); +#elif defined GNULIB_POSIXCHECK +# define _GL_FSEEK_WARN /* Category 1, above. */ +# undef fseek +# undef fseeko +# if HAVE_RAW_DECL_FSEEKO +_GL_WARN_ON_USE (fseeko, "fseeko is unportable - " + "use gnulib module fseeko for portability"); +# endif +#endif + +#ifdef _GL_FSEEK_WARN +# undef _GL_FSEEK_WARN +/* Here, either fseek is undefined (but C89 guarantees that it is + declared), or it is defined as rpl_fseek (declared above). */ +_GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB " + "on 32-bit platforms - " + "use fseeko function for handling of large files"); +#endif + + +/* ftell, ftello. See the comments on fseek/fseeko. */ + +#if @GNULIB_FTELL@ +# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES +# define _GL_FTELL_WARN /* Category 2, above. */ +# undef ftell +# endif +# if @REPLACE_FTELL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ftell +# define ftell rpl_ftell +# endif +_GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (ftell, long, (FILE *fp)); +# else +_GL_CXXALIAS_SYS (ftell, long, (FILE *fp)); +# endif +_GL_CXXALIASWARN (ftell); +#endif + +#if @GNULIB_FTELLO@ +# if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES +# define _GL_FTELL_WARN /* Category 3, above. */ +# undef ftell +# endif +# if @REPLACE_FTELLO@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ftello +# define ftello rpl_ftello +# endif +_GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp)); +# else +# if ! @HAVE_DECL_FTELLO@ +_GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp)); +# endif +_GL_CXXALIASWARN (ftello); +#elif defined GNULIB_POSIXCHECK +# define _GL_FTELL_WARN /* Category 1, above. */ +# undef ftell +# undef ftello +# if HAVE_RAW_DECL_FTELLO +_GL_WARN_ON_USE (ftello, "ftello is unportable - " + "use gnulib module ftello for portability"); +# endif +#endif + +#ifdef _GL_FTELL_WARN +# undef _GL_FTELL_WARN +/* Here, either ftell is undefined (but C89 guarantees that it is + declared), or it is defined as rpl_ftell (declared above). */ +_GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB " + "on 32-bit platforms - " + "use ftello function for handling of large files"); +#endif + + +#if @GNULIB_FWRITE@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fwrite +# define fwrite rpl_fwrite +# endif +_GL_FUNCDECL_RPL (fwrite, size_t, + (const void *ptr, size_t s, size_t n, FILE *stream) + _GL_ARG_NONNULL ((1, 4))); +_GL_CXXALIAS_RPL (fwrite, size_t, + (const void *ptr, size_t s, size_t n, FILE *stream)); +# else +_GL_CXXALIAS_SYS (fwrite, size_t, + (const void *ptr, size_t s, size_t n, FILE *stream)); + +/* Work around bug 11959 when fortifying glibc 2.4 through 2.15 + <https://sourceware.org/bugzilla/show_bug.cgi?id=11959>, + which sometimes causes an unwanted diagnostic for fwrite calls. + This affects only function declaration attributes under certain + versions of gcc and clang, and is not needed for C++. */ +# if (0 < __USE_FORTIFY_LEVEL \ + && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \ + && 3 < __GNUC__ + (4 <= __GNUC_MINOR__) \ + && !defined __cplusplus) +# undef fwrite +# undef fwrite_unlocked +extern size_t __REDIRECT (rpl_fwrite, + (const void *__restrict, size_t, size_t, + FILE *__restrict), + fwrite); +extern size_t __REDIRECT (rpl_fwrite_unlocked, + (const void *__restrict, size_t, size_t, + FILE *__restrict), + fwrite_unlocked); +# define fwrite rpl_fwrite +# define fwrite_unlocked rpl_fwrite_unlocked +# endif +# endif +_GL_CXXALIASWARN (fwrite); +#endif + +#if @GNULIB_GETC@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getc +# define getc rpl_fgetc +# endif +_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream)); +# else +_GL_CXXALIAS_SYS (getc, int, (FILE *stream)); +# endif +_GL_CXXALIASWARN (getc); +#endif + +#if @GNULIB_GETCHAR@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getchar +# define getchar rpl_getchar +# endif +_GL_FUNCDECL_RPL (getchar, int, (void)); +_GL_CXXALIAS_RPL (getchar, int, (void)); +# else +_GL_CXXALIAS_SYS (getchar, int, (void)); +# endif +_GL_CXXALIASWARN (getchar); +#endif + +#if @GNULIB_GETDELIM@ +/* Read input, up to (and including) the next occurrence of DELIMITER, from + STREAM, store it in *LINEPTR (and NUL-terminate it). + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +# if @REPLACE_GETDELIM@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getdelim +# define getdelim rpl_getdelim +# endif +_GL_FUNCDECL_RPL (getdelim, ssize_t, + (char **lineptr, size_t *linesize, int delimiter, + FILE *stream) + _GL_ARG_NONNULL ((1, 2, 4))); +_GL_CXXALIAS_RPL (getdelim, ssize_t, + (char **lineptr, size_t *linesize, int delimiter, + FILE *stream)); +# else +# if !@HAVE_DECL_GETDELIM@ +_GL_FUNCDECL_SYS (getdelim, ssize_t, + (char **lineptr, size_t *linesize, int delimiter, + FILE *stream) + _GL_ARG_NONNULL ((1, 2, 4))); +# endif +_GL_CXXALIAS_SYS (getdelim, ssize_t, + (char **lineptr, size_t *linesize, int delimiter, + FILE *stream)); +# endif +_GL_CXXALIASWARN (getdelim); +#elif defined GNULIB_POSIXCHECK +# undef getdelim +# if HAVE_RAW_DECL_GETDELIM +_GL_WARN_ON_USE (getdelim, "getdelim is unportable - " + "use gnulib module getdelim for portability"); +# endif +#endif + +#if @GNULIB_GETLINE@ +/* Read a line, up to (and including) the next newline, from STREAM, store it + in *LINEPTR (and NUL-terminate it). + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +# if @REPLACE_GETLINE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getline +# define getline rpl_getline +# endif +_GL_FUNCDECL_RPL (getline, ssize_t, + (char **lineptr, size_t *linesize, FILE *stream) + _GL_ARG_NONNULL ((1, 2, 3))); +_GL_CXXALIAS_RPL (getline, ssize_t, + (char **lineptr, size_t *linesize, FILE *stream)); +# else +# if !@HAVE_DECL_GETLINE@ +_GL_FUNCDECL_SYS (getline, ssize_t, + (char **lineptr, size_t *linesize, FILE *stream) + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +_GL_CXXALIAS_SYS (getline, ssize_t, + (char **lineptr, size_t *linesize, FILE *stream)); +# endif +# if @HAVE_DECL_GETLINE@ +_GL_CXXALIASWARN (getline); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getline +# if HAVE_RAW_DECL_GETLINE +_GL_WARN_ON_USE (getline, "getline is unportable - " + "use gnulib module getline for portability"); +# endif +#endif + +/* It is very rare that the developer ever has full control of stdin, + so any use of gets warrants an unconditional warning; besides, C11 + removed it. */ +#undef gets +#if HAVE_RAW_DECL_GETS && !defined __cplusplus +_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); +#endif + +#if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ +struct obstack; +/* Grow an obstack with formatted output. Return the number of + bytes added to OBS. No trailing nul byte is added, and the + object should be closed with obstack_finish before use. Upon + memory allocation error, call obstack_alloc_failed_handler. Upon + other error, return -1. */ +# if @REPLACE_OBSTACK_PRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define obstack_printf rpl_obstack_printf +# endif +_GL_FUNCDECL_RPL (obstack_printf, int, + (struct obstack *obs, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (obstack_printf, int, + (struct obstack *obs, const char *format, ...)); +# else +# if !@HAVE_DECL_OBSTACK_PRINTF@ +_GL_FUNCDECL_SYS (obstack_printf, int, + (struct obstack *obs, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (obstack_printf, int, + (struct obstack *obs, const char *format, ...)); +# endif +_GL_CXXALIASWARN (obstack_printf); +# if @REPLACE_OBSTACK_PRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define obstack_vprintf rpl_obstack_vprintf +# endif +_GL_FUNCDECL_RPL (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args)); +# else +# if !@HAVE_DECL_OBSTACK_PRINTF@ +_GL_FUNCDECL_SYS (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (obstack_vprintf, int, + (struct obstack *obs, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (obstack_vprintf); +#endif + +#if @GNULIB_PCLOSE@ +# if !@HAVE_PCLOSE@ +_GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pclose, int, (FILE *stream)); +_GL_CXXALIASWARN (pclose); +#elif defined GNULIB_POSIXCHECK +# undef pclose +# if HAVE_RAW_DECL_PCLOSE +_GL_WARN_ON_USE (pclose, "pclose is unportable - " + "use gnulib module pclose for more portability"); +# endif +#endif + +#if @GNULIB_PERROR@ +/* Print a message to standard error, describing the value of ERRNO, + (if STRING is not NULL and not empty) prefixed with STRING and ": ", + and terminated with a newline. */ +# if @REPLACE_PERROR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define perror rpl_perror +# endif +_GL_FUNCDECL_RPL (perror, void, (const char *string)); +_GL_CXXALIAS_RPL (perror, void, (const char *string)); +# else +_GL_CXXALIAS_SYS (perror, void, (const char *string)); +# endif +_GL_CXXALIASWARN (perror); +#elif defined GNULIB_POSIXCHECK +# undef perror +/* Assume perror is always declared. */ +_GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " + "use gnulib module perror for portability"); +#endif + +#if @GNULIB_POPEN@ +# if @REPLACE_POPEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef popen +# define popen rpl_popen +# endif +_GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); +# else +# if !@HAVE_POPEN@ +_GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); +# endif +_GL_CXXALIASWARN (popen); +#elif defined GNULIB_POSIXCHECK +# undef popen +# if HAVE_RAW_DECL_POPEN +_GL_WARN_ON_USE (popen, "popen is buggy on some platforms - " + "use gnulib module popen or pipe for more portability"); +# endif +#endif + +#if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@ +# if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \ + || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) +# if defined __GNUC__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +/* Don't break __attribute__((format(printf,M,N))). */ +# define printf __printf__ +# endif +# if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ +_GL_FUNCDECL_RPL_1 (__printf__, int, + (const char *format, ...) + __asm__ (@ASM_SYMBOL_PREFIX@ + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) + _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) + _GL_ARG_NONNULL ((1))); +# else +_GL_FUNCDECL_RPL_1 (__printf__, int, + (const char *format, ...) + __asm__ (@ASM_SYMBOL_PREFIX@ + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); +# else +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define printf rpl_printf +# endif +_GL_FUNCDECL_RPL (printf, int, + (const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (printf, int, (const char *format, ...)); +# endif +# define GNULIB_overrides_printf 1 +# else +_GL_CXXALIAS_SYS (printf, int, (const char *format, ...)); +# endif +_GL_CXXALIASWARN (printf); +#endif +#if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_printf +# undef printf +# endif +/* Assume printf is always declared. */ +_GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " + "use gnulib module printf-posix for portable " + "POSIX compliance"); +#endif + +#if @GNULIB_PUTC@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putc +# define putc rpl_fputc +# endif +_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream)); +# else +_GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream)); +# endif +_GL_CXXALIASWARN (putc); +#endif + +#if @GNULIB_PUTCHAR@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putchar +# define putchar rpl_putchar +# endif +_GL_FUNCDECL_RPL (putchar, int, (int c)); +_GL_CXXALIAS_RPL (putchar, int, (int c)); +# else +_GL_CXXALIAS_SYS (putchar, int, (int c)); +# endif +_GL_CXXALIASWARN (putchar); +#endif + +#if @GNULIB_PUTS@ +# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef puts +# define puts rpl_puts +# endif +_GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (puts, int, (const char *string)); +# else +_GL_CXXALIAS_SYS (puts, int, (const char *string)); +# endif +_GL_CXXALIASWARN (puts); +#endif + +#if @GNULIB_REMOVE@ +# if @REPLACE_REMOVE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef remove +# define remove rpl_remove +# endif +_GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (remove, int, (const char *name)); +# else +_GL_CXXALIAS_SYS (remove, int, (const char *name)); +# endif +_GL_CXXALIASWARN (remove); +#elif defined GNULIB_POSIXCHECK +# undef remove +/* Assume remove is always declared. */ +_GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - " + "use gnulib module remove for more portability"); +#endif + +#if @GNULIB_RENAME@ +# if @REPLACE_RENAME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef rename +# define rename rpl_rename +# endif +_GL_FUNCDECL_RPL (rename, int, + (const char *old_filename, const char *new_filename) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (rename, int, + (const char *old_filename, const char *new_filename)); +# else +_GL_CXXALIAS_SYS (rename, int, + (const char *old_filename, const char *new_filename)); +# endif +_GL_CXXALIASWARN (rename); +#elif defined GNULIB_POSIXCHECK +# undef rename +/* Assume rename is always declared. */ +_GL_WARN_ON_USE (rename, "rename is buggy on some platforms - " + "use gnulib module rename for more portability"); +#endif + +#if @GNULIB_RENAMEAT@ +# if @REPLACE_RENAMEAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef renameat +# define renameat rpl_renameat +# endif +_GL_FUNCDECL_RPL (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2) + _GL_ARG_NONNULL ((2, 4))); +_GL_CXXALIAS_RPL (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2)); +# else +# if !@HAVE_RENAMEAT@ +_GL_FUNCDECL_SYS (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2) + _GL_ARG_NONNULL ((2, 4))); +# endif +_GL_CXXALIAS_SYS (renameat, int, + (int fd1, char const *file1, int fd2, char const *file2)); +# endif +_GL_CXXALIASWARN (renameat); +#elif defined GNULIB_POSIXCHECK +# undef renameat +# if HAVE_RAW_DECL_RENAMEAT +_GL_WARN_ON_USE (renameat, "renameat is not portable - " + "use gnulib module renameat for portability"); +# endif +#endif + +#if @GNULIB_SCANF@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if defined __GNUC__ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef scanf +/* Don't break __attribute__((format(scanf,M,N))). */ +# define scanf __scanf__ +# endif +_GL_FUNCDECL_RPL_1 (__scanf__, int, + (const char *format, ...) + __asm__ (@ASM_SYMBOL_PREFIX@ + _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf)) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *format, ...)); +# else +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef scanf +# define scanf rpl_scanf +# endif +_GL_FUNCDECL_RPL (scanf, int, (const char *format, ...) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (scanf, int, (const char *format, ...)); +# endif +# else +_GL_CXXALIAS_SYS (scanf, int, (const char *format, ...)); +# endif +_GL_CXXALIASWARN (scanf); +#endif + +#if @GNULIB_SNPRINTF@ +# if @REPLACE_SNPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define snprintf rpl_snprintf +# endif +_GL_FUNCDECL_RPL (snprintf, int, + (char *str, size_t size, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) + _GL_ARG_NONNULL ((3))); +_GL_CXXALIAS_RPL (snprintf, int, + (char *str, size_t size, const char *format, ...)); +# else +# if !@HAVE_DECL_SNPRINTF@ +_GL_FUNCDECL_SYS (snprintf, int, + (char *str, size_t size, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) + _GL_ARG_NONNULL ((3))); +# endif +_GL_CXXALIAS_SYS (snprintf, int, + (char *str, size_t size, const char *format, ...)); +# endif +_GL_CXXALIASWARN (snprintf); +#elif defined GNULIB_POSIXCHECK +# undef snprintf +# if HAVE_RAW_DECL_SNPRINTF +_GL_WARN_ON_USE (snprintf, "snprintf is unportable - " + "use gnulib module snprintf for portability"); +# endif +#endif + +/* Some people would argue that all sprintf uses should be warned about + (for example, OpenBSD issues a link warning for it), + since it can cause security holes due to buffer overruns. + However, we believe that sprintf can be used safely, and is more + efficient than snprintf in those safe cases; and as proof of our + belief, we use sprintf in several gnulib modules. So this header + intentionally avoids adding a warning to sprintf except when + GNULIB_POSIXCHECK is defined. */ + +#if @GNULIB_SPRINTF_POSIX@ +# if @REPLACE_SPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define sprintf rpl_sprintf +# endif +_GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...)); +# else +_GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...)); +# endif +_GL_CXXALIASWARN (sprintf); +#elif defined GNULIB_POSIXCHECK +# undef sprintf +/* Assume sprintf is always declared. */ +_GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - " + "use gnulib module sprintf-posix for portable " + "POSIX compliance"); +#endif + +#if @GNULIB_TMPFILE@ +# if @REPLACE_TMPFILE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define tmpfile rpl_tmpfile +# endif +_GL_FUNCDECL_RPL (tmpfile, FILE *, (void)); +_GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); +# else +_GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); +# endif +_GL_CXXALIASWARN (tmpfile); +#elif defined GNULIB_POSIXCHECK +# undef tmpfile +# if HAVE_RAW_DECL_TMPFILE +_GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " + "use gnulib module tmpfile for portability"); +# endif +#endif + +#if @GNULIB_VASPRINTF@ +/* Write formatted output to a string dynamically allocated with malloc(). + If the memory allocation succeeds, store the address of the string in + *RESULT and return the number of resulting bytes, excluding the trailing + NUL. Upon memory allocation error, or some other error, return -1. */ +# if @REPLACE_VASPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define asprintf rpl_asprintf +# endif +_GL_FUNCDECL_RPL (asprintf, int, + (char **result, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (asprintf, int, + (char **result, const char *format, ...)); +# else +# if !@HAVE_VASPRINTF@ +_GL_FUNCDECL_SYS (asprintf, int, + (char **result, const char *format, ...) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (asprintf, int, + (char **result, const char *format, ...)); +# endif +_GL_CXXALIASWARN (asprintf); +# if @REPLACE_VASPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vasprintf rpl_vasprintf +# endif +_GL_FUNCDECL_RPL (vasprintf, int, + (char **result, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (vasprintf, int, + (char **result, const char *format, va_list args)); +# else +# if !@HAVE_VASPRINTF@ +_GL_FUNCDECL_SYS (vasprintf, int, + (char **result, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (vasprintf, int, + (char **result, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vasprintf); +#endif + +#if @GNULIB_VDPRINTF@ +# if @REPLACE_VDPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vdprintf rpl_vdprintf +# endif +_GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args)); +# else +# if !@HAVE_VDPRINTF@ +_GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((2))); +# endif +/* Need to cast, because on Solaris, the third parameter will likely be + __va_list args. */ +_GL_CXXALIAS_SYS_CAST (vdprintf, int, + (int fd, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vdprintf); +#elif defined GNULIB_POSIXCHECK +# undef vdprintf +# if HAVE_RAW_DECL_VDPRINTF +_GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - " + "use gnulib module vdprintf for portability"); +# endif +#endif + +#if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@ +# if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \ + || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vfprintf rpl_vfprintf +# endif +# define GNULIB_overrides_vfprintf 1 +# if @GNULIB_VFPRINTF_POSIX@ +_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# else +_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)); +# else +/* Need to cast, because on Solaris, the third parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vfprintf, int, + (FILE *fp, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vfprintf); +#endif +#if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_vfprintf +# undef vfprintf +# endif +/* Assume vfprintf is always declared. */ +_GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " + "use gnulib module vfprintf-posix for portable " + "POSIX compliance"); +#endif + +#if @GNULIB_VFSCANF@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef vfscanf +# define vfscanf rpl_vfscanf +# endif +_GL_FUNCDECL_RPL (vfscanf, int, + (FILE *stream, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (vfscanf, int, + (FILE *stream, const char *format, va_list args)); +# else +_GL_CXXALIAS_SYS (vfscanf, int, + (FILE *stream, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vfscanf); +#endif + +#if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@ +# if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \ + || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vprintf rpl_vprintf +# endif +# define GNULIB_overrides_vprintf 1 +# if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ +_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0) + _GL_ARG_NONNULL ((1))); +# else +_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args)); +# else +/* Need to cast, because on Solaris, the second parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vprintf); +#endif +#if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK +# if !GNULIB_overrides_vprintf +# undef vprintf +# endif +/* Assume vprintf is always declared. */ +_GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " + "use gnulib module vprintf-posix for portable " + "POSIX compliance"); +#endif + +#if @GNULIB_VSCANF@ +# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef vscanf +# define vscanf rpl_vscanf +# endif +_GL_FUNCDECL_RPL (vscanf, int, (const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (vscanf, int, (const char *format, va_list args)); +# else +_GL_CXXALIAS_SYS (vscanf, int, (const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vscanf); +#endif + +#if @GNULIB_VSNPRINTF@ +# if @REPLACE_VSNPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vsnprintf rpl_vsnprintf +# endif +_GL_FUNCDECL_RPL (vsnprintf, int, + (char *str, size_t size, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) + _GL_ARG_NONNULL ((3))); +_GL_CXXALIAS_RPL (vsnprintf, int, + (char *str, size_t size, const char *format, va_list args)); +# else +# if !@HAVE_DECL_VSNPRINTF@ +_GL_FUNCDECL_SYS (vsnprintf, int, + (char *str, size_t size, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) + _GL_ARG_NONNULL ((3))); +# endif +_GL_CXXALIAS_SYS (vsnprintf, int, + (char *str, size_t size, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vsnprintf); +#elif defined GNULIB_POSIXCHECK +# undef vsnprintf +# if HAVE_RAW_DECL_VSNPRINTF +_GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - " + "use gnulib module vsnprintf for portability"); +# endif +#endif + +#if @GNULIB_VSPRINTF_POSIX@ +# if @REPLACE_VSPRINTF@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define vsprintf rpl_vsprintf +# endif +_GL_FUNCDECL_RPL (vsprintf, int, + (char *str, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (vsprintf, int, + (char *str, const char *format, va_list args)); +# else +/* Need to cast, because on Solaris, the third parameter is + __va_list args + and GCC's fixincludes did not change this to __gnuc_va_list. */ +_GL_CXXALIAS_SYS_CAST (vsprintf, int, + (char *str, const char *format, va_list args)); +# endif +_GL_CXXALIASWARN (vsprintf); +#elif defined GNULIB_POSIXCHECK +# undef vsprintf +/* Assume vsprintf is always declared. */ +_GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - " + "use gnulib module vsprintf-posix for portable " + "POSIX compliance"); +#endif + +#endif /* _@GUARD_PREFIX@_STDIO_H */ +#endif /* _@GUARD_PREFIX@_STDIO_H */ +#endif diff --git a/devspec.en_US/project/recutils/lib/stdlib.h b/devspec.en_US/project/recutils/lib/stdlib.h new file mode 100755 index 0000000..0e88afd --- /dev/null +++ b/devspec.en_US/project/recutils/lib/stdlib.h @@ -0,0 +1,1501 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like <stdlib.h>. + + Copyright (C) 1995, 2001-2004, 2006-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined __need_system_stdlib_h || defined __need_malloc_and_calloc +/* Special invocation conventions inside some gnulib header files, + and inside some glibc header files, respectively. */ + +#include_next <stdlib.h> + +#else +/* Normal invocation convention. */ + +#ifndef _GL_STDLIB_H + +/* The include_next requires a split double-inclusion guard. */ +#include_next <stdlib.h> + +#ifndef _GL_STDLIB_H +#define _GL_STDLIB_H + +/* NetBSD 5.0 mis-defines NULL. */ +#include <stddef.h> + +/* MirBSD 10 defines WEXITSTATUS in <sys/wait.h>, not in <stdlib.h>. */ +#if 0 && !defined WEXITSTATUS +# include <sys/wait.h> +#endif + +/* Solaris declares getloadavg() in <sys/loadavg.h>. */ +#if (0 || defined GNULIB_POSIXCHECK) && 0 +/* OpenIndiana has a bug: <sys/time.h> must be included before + <sys/loadavg.h>. */ +# include <sys/time.h> +# include <sys/loadavg.h> +#endif + +/* Native Windows platforms declare mktemp() in <io.h>. */ +#if 0 && (defined _WIN32 && ! defined __CYGWIN__) +# include <io.h> +#endif + +#if 1 + +/* OSF/1 5.1 declares 'struct random_data' in <random.h>, which is included + from <stdlib.h> if _REENTRANT is defined. Include it whenever we need + 'struct random_data'. */ +# if 0 +# include <random.h> +# endif + +# if !1 || 0 || !1 +# include <stdint.h> +# endif + +# if !1 +/* Define 'struct random_data'. + But allow multiple gnulib generated <stdlib.h> replacements to coexist. */ +# if !GNULIB_defined_struct_random_data +struct random_data +{ + int32_t *fptr; /* Front pointer. */ + int32_t *rptr; /* Rear pointer. */ + int32_t *state; /* Array of state values. */ + int rand_type; /* Type of random number generator. */ + int rand_deg; /* Degree of random number generator. */ + int rand_sep; /* Distance between front and rear. */ + int32_t *end_ptr; /* Pointer behind state table. */ +}; +# define GNULIB_defined_struct_random_data 1 +# endif +# endif +#endif + +#if (1 || 0 || 1 || 0 || 0 || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !(defined _WIN32 && ! defined __CYGWIN__) +/* On Mac OS X 10.3, only <unistd.h> declares mkstemp. */ +/* On Mac OS X 10.5, only <unistd.h> declares mkstemps. */ +/* On Mac OS X 10.13, only <unistd.h> declares mkostemp and mkostemps. */ +/* On Cygwin 1.7.1, only <unistd.h> declares getsubopt. */ +/* But avoid namespace pollution on glibc systems and native Windows. */ +# include <unistd.h> +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE /* empty */ +#endif + +/* The definition of _Noreturn is copied here. */ +#ifndef _Noreturn +# if 201103 <= (defined __cplusplus ? __cplusplus : 0) +# define _Noreturn [[noreturn]] +# elif (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ + || 4 < __GNUC__ + (7 <= __GNUC_MINOR__)) + /* _Noreturn works as-is. */ +# elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C +# define _Noreturn __attribute__ ((__noreturn__)) +# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn +# endif +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +/* Some systems do not define EXIT_*, despite otherwise supporting C89. */ +#ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +#endif +/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere + with proper operation of xargs. */ +#ifndef EXIT_FAILURE +# define EXIT_FAILURE 1 +#elif EXIT_FAILURE != 1 +# undef EXIT_FAILURE +# define EXIT_FAILURE 1 +#endif + + +#if 0 +/* Terminate the current process with the given return code, without running + the 'atexit' handlers. */ +# if !1 +_GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status)); +# endif +_GL_CXXALIAS_SYS (_Exit, void, (int status)); +_GL_CXXALIASWARN (_Exit); +#elif defined GNULIB_POSIXCHECK +# undef _Exit +# if HAVE_RAW_DECL__EXIT +_GL_WARN_ON_USE (_Exit, "_Exit is unportable - " + "use gnulib module _Exit for portability"); +# endif +#endif + + +#if 0 +/* Parse a signed decimal integer. + Returns the value of the integer. Errors are not detected. */ +# if !1 +_GL_FUNCDECL_SYS (atoll, long long, (const char *string) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (atoll, long long, (const char *string)); +_GL_CXXALIASWARN (atoll); +#elif defined GNULIB_POSIXCHECK +# undef atoll +# if HAVE_RAW_DECL_ATOLL +_GL_WARN_ON_USE (atoll, "atoll is unportable - " + "use gnulib module atoll for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef calloc +# define calloc rpl_calloc +# endif +_GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size)); +_GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size)); +# else +_GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size)); +# endif +_GL_CXXALIASWARN (calloc); +#elif defined GNULIB_POSIXCHECK +# undef calloc +/* Assume calloc is always declared. */ +_GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - " + "use gnulib module calloc-posix for portability"); +#endif + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define canonicalize_file_name rpl_canonicalize_file_name +# endif +_GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name)); +# else +# if !1 +_GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name)); +# endif +_GL_CXXALIASWARN (canonicalize_file_name); +#elif defined GNULIB_POSIXCHECK +# undef canonicalize_file_name +# if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME +_GL_WARN_ON_USE (canonicalize_file_name, + "canonicalize_file_name is unportable - " + "use gnulib module canonicalize-lgpl for portability"); +# endif +#endif + +#if 0 +/* Store max(NELEM,3) load average numbers in LOADAVG[]. + The three numbers are the load average of the last 1 minute, the last 5 + minutes, and the last 15 minutes, respectively. + LOADAVG is an array of NELEM numbers. */ +# if !1 +_GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem)); +_GL_CXXALIASWARN (getloadavg); +#elif defined GNULIB_POSIXCHECK +# undef getloadavg +# if HAVE_RAW_DECL_GETLOADAVG +_GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - " + "use gnulib module getloadavg for portability"); +# endif +#endif + +#if 0 +/* Assuming *OPTIONP is a comma separated list of elements of the form + "token" or "token=value", getsubopt parses the first of these elements. + If the first element refers to a "token" that is member of the given + NULL-terminated array of tokens: + - It replaces the comma with a NUL byte, updates *OPTIONP to point past + the first option and the comma, sets *VALUEP to the value of the + element (or NULL if it doesn't contain an "=" sign), + - It returns the index of the "token" in the given array of tokens. + Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. + For more details see the POSIX:2001 specification. + http://www.opengroup.org/susv3xsh/getsubopt.html */ +# if !1 +_GL_FUNCDECL_SYS (getsubopt, int, + (char **optionp, char *const *tokens, char **valuep) + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +_GL_CXXALIAS_SYS (getsubopt, int, + (char **optionp, char *const *tokens, char **valuep)); +_GL_CXXALIASWARN (getsubopt); +#elif defined GNULIB_POSIXCHECK +# undef getsubopt +# if HAVE_RAW_DECL_GETSUBOPT +_GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - " + "use gnulib module getsubopt for portability"); +# endif +#endif + +#if 0 +/* Change the ownership and access permission of the slave side of the + pseudo-terminal whose master side is specified by FD. */ +# if !1 +_GL_FUNCDECL_SYS (grantpt, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (grantpt, int, (int fd)); +_GL_CXXALIASWARN (grantpt); +#elif defined GNULIB_POSIXCHECK +# undef grantpt +# if HAVE_RAW_DECL_GRANTPT +_GL_WARN_ON_USE (grantpt, "grantpt is not portable - " + "use gnulib module grantpt for portability"); +# endif +#endif + +/* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not + rely on GNU or POSIX semantics for malloc and realloc (for example, + by never specifying a zero size), so it does not need malloc or + realloc to be redefined. */ +#if 1 +# if 0 +# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ + || _GL_USE_STDLIB_ALLOC) +# undef malloc +# define malloc rpl_malloc +# endif +_GL_FUNCDECL_RPL (malloc, void *, (size_t size)); +_GL_CXXALIAS_RPL (malloc, void *, (size_t size)); +# else +_GL_CXXALIAS_SYS (malloc, void *, (size_t size)); +# endif +_GL_CXXALIASWARN (malloc); +#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC +# undef malloc +/* Assume malloc is always declared. */ +_GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - " + "use gnulib module malloc-posix for portability"); +#endif + +/* Convert a multibyte character to a wide character. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbtowc +# define mbtowc rpl_mbtowc +# endif +_GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); +_GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); +# else +_GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); +# endif +_GL_CXXALIASWARN (mbtowc); +#endif + +#if 0 +/* Create a unique temporary directory from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the directory name unique. + Returns TEMPLATE, or a null pointer if it cannot get a unique name. + The directory is created mode 700. */ +# if !1 +_GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/)); +_GL_CXXALIASWARN (mkdtemp); +#elif defined GNULIB_POSIXCHECK +# undef mkdtemp +# if HAVE_RAW_DECL_MKDTEMP +_GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - " + "use gnulib module mkdtemp for portability"); +# endif +#endif + +#if 1 +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + The file is then created, with the specified flags, ensuring it didn't exist + before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if !1 +_GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)); +_GL_CXXALIASWARN (mkostemp); +#elif defined GNULIB_POSIXCHECK +# undef mkostemp +# if HAVE_RAW_DECL_MKOSTEMP +_GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - " + "use gnulib module mkostemp for portability"); +# endif +#endif + +#if 0 +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE before a suffix of length + SUFFIXLEN must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + The file is then created, with the specified flags, ensuring it didn't exist + before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if !1 +_GL_FUNCDECL_SYS (mkostemps, int, + (char * /*template*/, int /*suffixlen*/, int /*flags*/) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkostemps, int, + (char * /*template*/, int /*suffixlen*/, int /*flags*/)); +_GL_CXXALIASWARN (mkostemps); +#elif defined GNULIB_POSIXCHECK +# undef mkostemps +# if HAVE_RAW_DECL_MKOSTEMPS +_GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - " + "use gnulib module mkostemps for portability"); +# endif +#endif + +#if 1 +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The file is then created, ensuring it didn't exist before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mkstemp rpl_mkstemp +# endif +_GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/)); +# endif +_GL_CXXALIASWARN (mkstemp); +#elif defined GNULIB_POSIXCHECK +# undef mkstemp +# if HAVE_RAW_DECL_MKSTEMP +_GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - " + "use gnulib module mkstemp for portability"); +# endif +#endif + +#if 0 +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE prior to a suffix of length + SUFFIXLEN must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The file is then created, ensuring it didn't exist before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if !1 +_GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)); +_GL_CXXALIASWARN (mkstemps); +#elif defined GNULIB_POSIXCHECK +# undef mkstemps +# if HAVE_RAW_DECL_MKSTEMPS +_GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - " + "use gnulib module mkstemps for portability"); +# endif +#endif + +#if 0 +/* Return an FD open to the master side of a pseudo-terminal. Flags should + include O_RDWR, and may also include O_NOCTTY. */ +# if !1 +_GL_FUNCDECL_SYS (posix_openpt, int, (int flags)); +# endif +_GL_CXXALIAS_SYS (posix_openpt, int, (int flags)); +_GL_CXXALIASWARN (posix_openpt); +#elif defined GNULIB_POSIXCHECK +# undef posix_openpt +# if HAVE_RAW_DECL_POSIX_OPENPT +_GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - " + "use gnulib module posix_openpt for portability"); +# endif +#endif + +#if 0 +/* Return the pathname of the pseudo-terminal slave associated with + the master FD is open on, or NULL on errors. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ptsname +# define ptsname rpl_ptsname +# endif +_GL_FUNCDECL_RPL (ptsname, char *, (int fd)); +_GL_CXXALIAS_RPL (ptsname, char *, (int fd)); +# else +# if !1 +_GL_FUNCDECL_SYS (ptsname, char *, (int fd)); +# endif +_GL_CXXALIAS_SYS (ptsname, char *, (int fd)); +# endif +_GL_CXXALIASWARN (ptsname); +#elif defined GNULIB_POSIXCHECK +# undef ptsname +# if HAVE_RAW_DECL_PTSNAME +_GL_WARN_ON_USE (ptsname, "ptsname is not portable - " + "use gnulib module ptsname for portability"); +# endif +#endif + +#if 0 +/* Set the pathname of the pseudo-terminal slave associated with + the master FD is open on and return 0, or set errno and return + non-zero on errors. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ptsname_r +# define ptsname_r rpl_ptsname_r +# endif +_GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); +_GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); +# else +# if !1 +_GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); +# endif +_GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); +# endif +_GL_CXXALIASWARN (ptsname_r); +#elif defined GNULIB_POSIXCHECK +# undef ptsname_r +# if HAVE_RAW_DECL_PTSNAME_R +_GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - " + "use gnulib module ptsname_r for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putenv +# define putenv rpl_putenv +# endif +_GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (putenv, int, (char *string)); +# else +_GL_CXXALIAS_SYS (putenv, int, (char *string)); +# endif +_GL_CXXALIASWARN (putenv); +#endif + +#if 0 +/* Sort an array of NMEMB elements, starting at address BASE, each element + occupying SIZE bytes, in ascending order according to the comparison + function COMPARE. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef qsort_r +# define qsort_r rpl_qsort_r +# endif +_GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, + int (*compare) (void const *, void const *, + void *), + void *arg) _GL_ARG_NONNULL ((1, 4))); +_GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, + int (*compare) (void const *, void const *, + void *), + void *arg)); +# else +# if !1 +_GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, + int (*compare) (void const *, void const *, + void *), + void *arg) _GL_ARG_NONNULL ((1, 4))); +# endif +_GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, + int (*compare) (void const *, void const *, + void *), + void *arg)); +# endif +_GL_CXXALIASWARN (qsort_r); +#elif defined GNULIB_POSIXCHECK +# undef qsort_r +# if HAVE_RAW_DECL_QSORT_R +_GL_WARN_ON_USE (qsort_r, "qsort_r is not portable - " + "use gnulib module qsort_r for portability"); +# endif +#endif + + +#if 1 +# if !1 +# ifndef RAND_MAX +# define RAND_MAX 2147483647 +# endif +# endif +#endif + + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (random, long, (void)); +# endif +_GL_CXXALIAS_SYS (random, long, (void)); +_GL_CXXALIASWARN (random); +#elif defined GNULIB_POSIXCHECK +# undef random +# if HAVE_RAW_DECL_RANDOM +_GL_WARN_ON_USE (random, "random is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (srandom, void, (unsigned int seed)); +# endif +_GL_CXXALIAS_SYS (srandom, void, (unsigned int seed)); +_GL_CXXALIASWARN (srandom); +#elif defined GNULIB_POSIXCHECK +# undef srandom +# if HAVE_RAW_DECL_SRANDOM +_GL_WARN_ON_USE (srandom, "srandom is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if 0 +# if !1 || !1 +_GL_FUNCDECL_SYS (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size)); +_GL_CXXALIASWARN (initstate); +#elif defined GNULIB_POSIXCHECK +# undef initstate +# if HAVE_RAW_DECL_INITSTATE_R +_GL_WARN_ON_USE (initstate, "initstate is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if 0 +# if !1 || !1 +_GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (setstate, char *, (char *arg_state)); +_GL_CXXALIASWARN (setstate); +#elif defined GNULIB_POSIXCHECK +# undef setstate +# if HAVE_RAW_DECL_SETSTATE_R +_GL_WARN_ON_USE (setstate, "setstate is unportable - " + "use gnulib module random for portability"); +# endif +#endif + + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef random_r +# define random_r rpl_random_r +# endif +_GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result)); +# else +# if !1 +_GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result)); +# endif +_GL_CXXALIASWARN (random_r); +#elif defined GNULIB_POSIXCHECK +# undef random_r +# if HAVE_RAW_DECL_RANDOM_R +_GL_WARN_ON_USE (random_r, "random_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef srandom_r +# define srandom_r rpl_srandom_r +# endif +_GL_FUNCDECL_RPL (srandom_r, int, + (unsigned int seed, struct random_data *rand_state) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (srandom_r, int, + (unsigned int seed, struct random_data *rand_state)); +# else +# if !1 +_GL_FUNCDECL_SYS (srandom_r, int, + (unsigned int seed, struct random_data *rand_state) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (srandom_r, int, + (unsigned int seed, struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (srandom_r); +#elif defined GNULIB_POSIXCHECK +# undef srandom_r +# if HAVE_RAW_DECL_SRANDOM_R +_GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef initstate_r +# define initstate_r rpl_initstate_r +# endif +_GL_FUNCDECL_RPL (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state) + _GL_ARG_NONNULL ((2, 4))); +_GL_CXXALIAS_RPL (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state)); +# else +# if !1 +_GL_FUNCDECL_SYS (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state) + _GL_ARG_NONNULL ((2, 4))); +# endif +_GL_CXXALIAS_SYS (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (initstate_r); +#elif defined GNULIB_POSIXCHECK +# undef initstate_r +# if HAVE_RAW_DECL_INITSTATE_R +_GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setstate_r +# define setstate_r rpl_setstate_r +# endif +_GL_FUNCDECL_RPL (setstate_r, int, + (char *arg_state, struct random_data *rand_state) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (setstate_r, int, + (char *arg_state, struct random_data *rand_state)); +# else +# if !1 +_GL_FUNCDECL_SYS (setstate_r, int, + (char *arg_state, struct random_data *rand_state) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (setstate_r, int, + (char *arg_state, struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (setstate_r); +#elif defined GNULIB_POSIXCHECK +# undef setstate_r +# if HAVE_RAW_DECL_SETSTATE_R +_GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + + +#if 1 +# if 0 +# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ + || _GL_USE_STDLIB_ALLOC) +# undef realloc +# define realloc rpl_realloc +# endif +_GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size)); +_GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size)); +# else +_GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size)); +# endif +_GL_CXXALIASWARN (realloc); +#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC +# undef realloc +/* Assume realloc is always declared. */ +_GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - " + "use gnulib module realloc-posix for portability"); +#endif + + +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (reallocarray, void *, + (void *ptr, size_t nmemb, size_t size)); +# endif +_GL_CXXALIAS_SYS (reallocarray, void *, + (void *ptr, size_t nmemb, size_t size)); +_GL_CXXALIASWARN (reallocarray); +#elif defined GNULIB_POSIXCHECK +# undef reallocarray +# if HAVE_RAW_DECL_REALLOCARRAY +_GL_WARN_ON_USE (reallocarray, "reallocarray is not portable - " + "use gnulib module reallocarray for portability"); +# endif +#endif + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define realpath rpl_realpath +# endif +_GL_FUNCDECL_RPL (realpath, char *, (const char *name, char *resolved) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (realpath, char *, (const char *name, char *resolved)); +# else +# if !1 +_GL_FUNCDECL_SYS (realpath, char *, (const char *name, char *resolved) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (realpath, char *, (const char *name, char *resolved)); +# endif +_GL_CXXALIASWARN (realpath); +#elif defined GNULIB_POSIXCHECK +# undef realpath +# if HAVE_RAW_DECL_REALPATH +_GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module " + "canonicalize or canonicalize-lgpl for portability"); +# endif +#endif + +#if 0 +/* Test a user response to a question. + Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ +# if !1 +_GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (rpmatch, int, (const char *response)); +_GL_CXXALIASWARN (rpmatch); +#elif defined GNULIB_POSIXCHECK +# undef rpmatch +# if HAVE_RAW_DECL_RPMATCH +_GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - " + "use gnulib module rpmatch for portability"); +# endif +#endif + +#if 1 +/* Look up NAME in the environment, returning 0 in insecure situations. */ +# if !1 +_GL_FUNCDECL_SYS (secure_getenv, char *, + (char const *name) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (secure_getenv, char *, (char const *name)); +_GL_CXXALIASWARN (secure_getenv); +#elif defined GNULIB_POSIXCHECK +# undef secure_getenv +# if HAVE_RAW_DECL_SECURE_GETENV +_GL_WARN_ON_USE (secure_getenv, "secure_getenv is unportable - " + "use gnulib module secure_getenv for portability"); +# endif +#endif + +#if 1 +/* Set NAME to VALUE in the environment. + If REPLACE is nonzero, overwrite an existing value. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setenv +# define setenv rpl_setenv +# endif +_GL_FUNCDECL_RPL (setenv, int, + (const char *name, const char *value, int replace) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (setenv, int, + (const char *name, const char *value, int replace)); +# else +# if !1 +_GL_FUNCDECL_SYS (setenv, int, + (const char *name, const char *value, int replace) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (setenv, int, + (const char *name, const char *value, int replace)); +# endif +# if !(0 && !1) +_GL_CXXALIASWARN (setenv); +# endif +#elif defined GNULIB_POSIXCHECK +# undef setenv +# if HAVE_RAW_DECL_SETENV +_GL_WARN_ON_USE (setenv, "setenv is unportable - " + "use gnulib module setenv for portability"); +# endif +#endif + +#if 0 + /* Parse a double from STRING, updating ENDP if appropriate. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtod rpl_strtod +# endif +_GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp)); +# else +# if !1 +_GL_FUNCDECL_SYS (strtod, double, (const char *str, char **endp) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp)); +# endif +_GL_CXXALIASWARN (strtod); +#elif defined GNULIB_POSIXCHECK +# undef strtod +# if HAVE_RAW_DECL_STRTOD +_GL_WARN_ON_USE (strtod, "strtod is unportable - " + "use gnulib module strtod for portability"); +# endif +#endif + +#if 0 +/* Parse a signed integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set + to ERANGE. */ +# if !1 +_GL_FUNCDECL_SYS (strtoll, long long, + (const char *string, char **endptr, int base) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoll, long long, + (const char *string, char **endptr, int base)); +_GL_CXXALIASWARN (strtoll); +#elif defined GNULIB_POSIXCHECK +# undef strtoll +# if HAVE_RAW_DECL_STRTOLL +_GL_WARN_ON_USE (strtoll, "strtoll is unportable - " + "use gnulib module strtoll for portability"); +# endif +#endif + +#if 0 +/* Parse an unsigned integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is ULLONG_MAX, and errno is set to + ERANGE. */ +# if !1 +_GL_FUNCDECL_SYS (strtoull, unsigned long long, + (const char *string, char **endptr, int base) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoull, unsigned long long, + (const char *string, char **endptr, int base)); +_GL_CXXALIASWARN (strtoull); +#elif defined GNULIB_POSIXCHECK +# undef strtoull +# if HAVE_RAW_DECL_STRTOULL +_GL_WARN_ON_USE (strtoull, "strtoull is unportable - " + "use gnulib module strtoull for portability"); +# endif +#endif + +#if 0 +/* Unlock the slave side of the pseudo-terminal whose master side is specified + by FD, so that it can be opened. */ +# if !1 +_GL_FUNCDECL_SYS (unlockpt, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (unlockpt, int, (int fd)); +_GL_CXXALIASWARN (unlockpt); +#elif defined GNULIB_POSIXCHECK +# undef unlockpt +# if HAVE_RAW_DECL_UNLOCKPT +_GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - " + "use gnulib module unlockpt for portability"); +# endif +#endif + +#if 1 +/* Remove the variable NAME from the environment. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unsetenv +# define unsetenv rpl_unsetenv +# endif +_GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (unsetenv, int, (const char *name)); +# else +# if !1 +_GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (unsetenv, int, (const char *name)); +# endif +# if !(0 && !1) +_GL_CXXALIASWARN (unsetenv); +# endif +#elif defined GNULIB_POSIXCHECK +# undef unsetenv +# if HAVE_RAW_DECL_UNSETENV +_GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - " + "use gnulib module unsetenv for portability"); +# endif +#endif + +/* Convert a wide character to a multibyte character. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wctomb +# define wctomb rpl_wctomb +# endif +_GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc)); +_GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc)); +# else +_GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc)); +# endif +_GL_CXXALIASWARN (wctomb); +#endif + + +#endif /* _GL_STDLIB_H */ +#endif /* _GL_STDLIB_H */ +#endif diff --git a/devspec.en_US/project/recutils/lib/stdlib.in.h b/devspec.en_US/project/recutils/lib/stdlib.in.h new file mode 100755 index 0000000..d80d7ec --- /dev/null +++ b/devspec.en_US/project/recutils/lib/stdlib.in.h @@ -0,0 +1,1013 @@ +/* A GNU-like <stdlib.h>. + + Copyright (C) 1995, 2001-2004, 2006-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if defined __need_system_stdlib_h || defined __need_malloc_and_calloc +/* Special invocation conventions inside some gnulib header files, + and inside some glibc header files, respectively. */ + +#@INCLUDE_NEXT@ @NEXT_STDLIB_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_STDLIB_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STDLIB_H@ + +#ifndef _@GUARD_PREFIX@_STDLIB_H +#define _@GUARD_PREFIX@_STDLIB_H + +/* NetBSD 5.0 mis-defines NULL. */ +#include <stddef.h> + +/* MirBSD 10 defines WEXITSTATUS in <sys/wait.h>, not in <stdlib.h>. */ +#if @GNULIB_SYSTEM_POSIX@ && !defined WEXITSTATUS +# include <sys/wait.h> +#endif + +/* Solaris declares getloadavg() in <sys/loadavg.h>. */ +#if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@ +/* OpenIndiana has a bug: <sys/time.h> must be included before + <sys/loadavg.h>. */ +# include <sys/time.h> +# include <sys/loadavg.h> +#endif + +/* Native Windows platforms declare mktemp() in <io.h>. */ +#if 0 && (defined _WIN32 && ! defined __CYGWIN__) +# include <io.h> +#endif + +#if @GNULIB_RANDOM_R@ + +/* OSF/1 5.1 declares 'struct random_data' in <random.h>, which is included + from <stdlib.h> if _REENTRANT is defined. Include it whenever we need + 'struct random_data'. */ +# if @HAVE_RANDOM_H@ +# include <random.h> +# endif + +# if !@HAVE_STRUCT_RANDOM_DATA@ || @REPLACE_RANDOM_R@ || !@HAVE_RANDOM_R@ +# include <stdint.h> +# endif + +# if !@HAVE_STRUCT_RANDOM_DATA@ +/* Define 'struct random_data'. + But allow multiple gnulib generated <stdlib.h> replacements to coexist. */ +# if !GNULIB_defined_struct_random_data +struct random_data +{ + int32_t *fptr; /* Front pointer. */ + int32_t *rptr; /* Rear pointer. */ + int32_t *state; /* Array of state values. */ + int rand_type; /* Type of random number generator. */ + int rand_deg; /* Degree of random number generator. */ + int rand_sep; /* Distance between front and rear. */ + int32_t *end_ptr; /* Pointer behind state table. */ +}; +# define GNULIB_defined_struct_random_data 1 +# endif +# endif +#endif + +#if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_MKOSTEMP@ || @GNULIB_MKOSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !(defined _WIN32 && ! defined __CYGWIN__) +/* On Mac OS X 10.3, only <unistd.h> declares mkstemp. */ +/* On Mac OS X 10.5, only <unistd.h> declares mkstemps. */ +/* On Mac OS X 10.13, only <unistd.h> declares mkostemp and mkostemps. */ +/* On Cygwin 1.7.1, only <unistd.h> declares getsubopt. */ +/* But avoid namespace pollution on glibc systems and native Windows. */ +# include <unistd.h> +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE /* empty */ +#endif + +/* The definition of _Noreturn is copied here. */ + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + + +/* Some systems do not define EXIT_*, despite otherwise supporting C89. */ +#ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +#endif +/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere + with proper operation of xargs. */ +#ifndef EXIT_FAILURE +# define EXIT_FAILURE 1 +#elif EXIT_FAILURE != 1 +# undef EXIT_FAILURE +# define EXIT_FAILURE 1 +#endif + + +#if @GNULIB__EXIT@ +/* Terminate the current process with the given return code, without running + the 'atexit' handlers. */ +# if !@HAVE__EXIT@ +_GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status)); +# endif +_GL_CXXALIAS_SYS (_Exit, void, (int status)); +_GL_CXXALIASWARN (_Exit); +#elif defined GNULIB_POSIXCHECK +# undef _Exit +# if HAVE_RAW_DECL__EXIT +_GL_WARN_ON_USE (_Exit, "_Exit is unportable - " + "use gnulib module _Exit for portability"); +# endif +#endif + + +#if @GNULIB_ATOLL@ +/* Parse a signed decimal integer. + Returns the value of the integer. Errors are not detected. */ +# if !@HAVE_ATOLL@ +_GL_FUNCDECL_SYS (atoll, long long, (const char *string) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (atoll, long long, (const char *string)); +_GL_CXXALIASWARN (atoll); +#elif defined GNULIB_POSIXCHECK +# undef atoll +# if HAVE_RAW_DECL_ATOLL +_GL_WARN_ON_USE (atoll, "atoll is unportable - " + "use gnulib module atoll for portability"); +# endif +#endif + +#if @GNULIB_CALLOC_POSIX@ +# if @REPLACE_CALLOC@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef calloc +# define calloc rpl_calloc +# endif +_GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size)); +_GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size)); +# else +_GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size)); +# endif +_GL_CXXALIASWARN (calloc); +#elif defined GNULIB_POSIXCHECK +# undef calloc +/* Assume calloc is always declared. */ +_GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - " + "use gnulib module calloc-posix for portability"); +#endif + +#if @GNULIB_CANONICALIZE_FILE_NAME@ +# if @REPLACE_CANONICALIZE_FILE_NAME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define canonicalize_file_name rpl_canonicalize_file_name +# endif +_GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name)); +# else +# if !@HAVE_CANONICALIZE_FILE_NAME@ +_GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name)); +# endif +_GL_CXXALIASWARN (canonicalize_file_name); +#elif defined GNULIB_POSIXCHECK +# undef canonicalize_file_name +# if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME +_GL_WARN_ON_USE (canonicalize_file_name, + "canonicalize_file_name is unportable - " + "use gnulib module canonicalize-lgpl for portability"); +# endif +#endif + +#if @GNULIB_GETLOADAVG@ +/* Store max(NELEM,3) load average numbers in LOADAVG[]. + The three numbers are the load average of the last 1 minute, the last 5 + minutes, and the last 15 minutes, respectively. + LOADAVG is an array of NELEM numbers. */ +# if !@HAVE_DECL_GETLOADAVG@ +_GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem)); +_GL_CXXALIASWARN (getloadavg); +#elif defined GNULIB_POSIXCHECK +# undef getloadavg +# if HAVE_RAW_DECL_GETLOADAVG +_GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - " + "use gnulib module getloadavg for portability"); +# endif +#endif + +#if @GNULIB_GETSUBOPT@ +/* Assuming *OPTIONP is a comma separated list of elements of the form + "token" or "token=value", getsubopt parses the first of these elements. + If the first element refers to a "token" that is member of the given + NULL-terminated array of tokens: + - It replaces the comma with a NUL byte, updates *OPTIONP to point past + the first option and the comma, sets *VALUEP to the value of the + element (or NULL if it doesn't contain an "=" sign), + - It returns the index of the "token" in the given array of tokens. + Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. + For more details see the POSIX:2001 specification. + http://www.opengroup.org/susv3xsh/getsubopt.html */ +# if !@HAVE_GETSUBOPT@ +_GL_FUNCDECL_SYS (getsubopt, int, + (char **optionp, char *const *tokens, char **valuep) + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +_GL_CXXALIAS_SYS (getsubopt, int, + (char **optionp, char *const *tokens, char **valuep)); +_GL_CXXALIASWARN (getsubopt); +#elif defined GNULIB_POSIXCHECK +# undef getsubopt +# if HAVE_RAW_DECL_GETSUBOPT +_GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - " + "use gnulib module getsubopt for portability"); +# endif +#endif + +#if @GNULIB_GRANTPT@ +/* Change the ownership and access permission of the slave side of the + pseudo-terminal whose master side is specified by FD. */ +# if !@HAVE_GRANTPT@ +_GL_FUNCDECL_SYS (grantpt, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (grantpt, int, (int fd)); +_GL_CXXALIASWARN (grantpt); +#elif defined GNULIB_POSIXCHECK +# undef grantpt +# if HAVE_RAW_DECL_GRANTPT +_GL_WARN_ON_USE (grantpt, "grantpt is not portable - " + "use gnulib module grantpt for portability"); +# endif +#endif + +/* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not + rely on GNU or POSIX semantics for malloc and realloc (for example, + by never specifying a zero size), so it does not need malloc or + realloc to be redefined. */ +#if @GNULIB_MALLOC_POSIX@ +# if @REPLACE_MALLOC@ +# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ + || _GL_USE_STDLIB_ALLOC) +# undef malloc +# define malloc rpl_malloc +# endif +_GL_FUNCDECL_RPL (malloc, void *, (size_t size)); +_GL_CXXALIAS_RPL (malloc, void *, (size_t size)); +# else +_GL_CXXALIAS_SYS (malloc, void *, (size_t size)); +# endif +_GL_CXXALIASWARN (malloc); +#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC +# undef malloc +/* Assume malloc is always declared. */ +_GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - " + "use gnulib module malloc-posix for portability"); +#endif + +/* Convert a multibyte character to a wide character. */ +#if @GNULIB_MBTOWC@ +# if @REPLACE_MBTOWC@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbtowc +# define mbtowc rpl_mbtowc +# endif +_GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); +_GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); +# else +_GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *pwc, const char *s, size_t n)); +# endif +_GL_CXXALIASWARN (mbtowc); +#endif + +#if @GNULIB_MKDTEMP@ +/* Create a unique temporary directory from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the directory name unique. + Returns TEMPLATE, or a null pointer if it cannot get a unique name. + The directory is created mode 700. */ +# if !@HAVE_MKDTEMP@ +_GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/)); +_GL_CXXALIASWARN (mkdtemp); +#elif defined GNULIB_POSIXCHECK +# undef mkdtemp +# if HAVE_RAW_DECL_MKDTEMP +_GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - " + "use gnulib module mkdtemp for portability"); +# endif +#endif + +#if @GNULIB_MKOSTEMP@ +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + The file is then created, with the specified flags, ensuring it didn't exist + before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if !@HAVE_MKOSTEMP@ +_GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)); +_GL_CXXALIASWARN (mkostemp); +#elif defined GNULIB_POSIXCHECK +# undef mkostemp +# if HAVE_RAW_DECL_MKOSTEMP +_GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - " + "use gnulib module mkostemp for portability"); +# endif +#endif + +#if @GNULIB_MKOSTEMPS@ +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE before a suffix of length + SUFFIXLEN must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + The file is then created, with the specified flags, ensuring it didn't exist + before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if !@HAVE_MKOSTEMPS@ +_GL_FUNCDECL_SYS (mkostemps, int, + (char * /*template*/, int /*suffixlen*/, int /*flags*/) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkostemps, int, + (char * /*template*/, int /*suffixlen*/, int /*flags*/)); +_GL_CXXALIASWARN (mkostemps); +#elif defined GNULIB_POSIXCHECK +# undef mkostemps +# if HAVE_RAW_DECL_MKOSTEMPS +_GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - " + "use gnulib module mkostemps for portability"); +# endif +#endif + +#if @GNULIB_MKSTEMP@ +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The file is then created, ensuring it didn't exist before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if @REPLACE_MKSTEMP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mkstemp rpl_mkstemp +# endif +_GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/)); +# else +# if ! @HAVE_MKSTEMP@ +_GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/)); +# endif +_GL_CXXALIASWARN (mkstemp); +#elif defined GNULIB_POSIXCHECK +# undef mkstemp +# if HAVE_RAW_DECL_MKSTEMP +_GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - " + "use gnulib module mkstemp for portability"); +# endif +#endif + +#if @GNULIB_MKSTEMPS@ +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE prior to a suffix of length + SUFFIXLEN must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The file is then created, ensuring it didn't exist before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# if !@HAVE_MKSTEMPS@ +_GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)); +_GL_CXXALIASWARN (mkstemps); +#elif defined GNULIB_POSIXCHECK +# undef mkstemps +# if HAVE_RAW_DECL_MKSTEMPS +_GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - " + "use gnulib module mkstemps for portability"); +# endif +#endif + +#if @GNULIB_POSIX_OPENPT@ +/* Return an FD open to the master side of a pseudo-terminal. Flags should + include O_RDWR, and may also include O_NOCTTY. */ +# if !@HAVE_POSIX_OPENPT@ +_GL_FUNCDECL_SYS (posix_openpt, int, (int flags)); +# endif +_GL_CXXALIAS_SYS (posix_openpt, int, (int flags)); +_GL_CXXALIASWARN (posix_openpt); +#elif defined GNULIB_POSIXCHECK +# undef posix_openpt +# if HAVE_RAW_DECL_POSIX_OPENPT +_GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - " + "use gnulib module posix_openpt for portability"); +# endif +#endif + +#if @GNULIB_PTSNAME@ +/* Return the pathname of the pseudo-terminal slave associated with + the master FD is open on, or NULL on errors. */ +# if @REPLACE_PTSNAME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ptsname +# define ptsname rpl_ptsname +# endif +_GL_FUNCDECL_RPL (ptsname, char *, (int fd)); +_GL_CXXALIAS_RPL (ptsname, char *, (int fd)); +# else +# if !@HAVE_PTSNAME@ +_GL_FUNCDECL_SYS (ptsname, char *, (int fd)); +# endif +_GL_CXXALIAS_SYS (ptsname, char *, (int fd)); +# endif +_GL_CXXALIASWARN (ptsname); +#elif defined GNULIB_POSIXCHECK +# undef ptsname +# if HAVE_RAW_DECL_PTSNAME +_GL_WARN_ON_USE (ptsname, "ptsname is not portable - " + "use gnulib module ptsname for portability"); +# endif +#endif + +#if @GNULIB_PTSNAME_R@ +/* Set the pathname of the pseudo-terminal slave associated with + the master FD is open on and return 0, or set errno and return + non-zero on errors. */ +# if @REPLACE_PTSNAME_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ptsname_r +# define ptsname_r rpl_ptsname_r +# endif +_GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); +_GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); +# else +# if !@HAVE_PTSNAME_R@ +_GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); +# endif +_GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); +# endif +_GL_CXXALIASWARN (ptsname_r); +#elif defined GNULIB_POSIXCHECK +# undef ptsname_r +# if HAVE_RAW_DECL_PTSNAME_R +_GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - " + "use gnulib module ptsname_r for portability"); +# endif +#endif + +#if @GNULIB_PUTENV@ +# if @REPLACE_PUTENV@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef putenv +# define putenv rpl_putenv +# endif +_GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (putenv, int, (char *string)); +# else +_GL_CXXALIAS_SYS (putenv, int, (char *string)); +# endif +_GL_CXXALIASWARN (putenv); +#endif + +#if @GNULIB_QSORT_R@ +/* Sort an array of NMEMB elements, starting at address BASE, each element + occupying SIZE bytes, in ascending order according to the comparison + function COMPARE. */ +# if @REPLACE_QSORT_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef qsort_r +# define qsort_r rpl_qsort_r +# endif +_GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, + int (*compare) (void const *, void const *, + void *), + void *arg) _GL_ARG_NONNULL ((1, 4))); +_GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, + int (*compare) (void const *, void const *, + void *), + void *arg)); +# else +# if !@HAVE_QSORT_R@ +_GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, + int (*compare) (void const *, void const *, + void *), + void *arg) _GL_ARG_NONNULL ((1, 4))); +# endif +_GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, + int (*compare) (void const *, void const *, + void *), + void *arg)); +# endif +_GL_CXXALIASWARN (qsort_r); +#elif defined GNULIB_POSIXCHECK +# undef qsort_r +# if HAVE_RAW_DECL_QSORT_R +_GL_WARN_ON_USE (qsort_r, "qsort_r is not portable - " + "use gnulib module qsort_r for portability"); +# endif +#endif + + +#if @GNULIB_RANDOM_R@ +# if !@HAVE_RANDOM_R@ +# ifndef RAND_MAX +# define RAND_MAX 2147483647 +# endif +# endif +#endif + + +#if @GNULIB_RANDOM@ +# if !@HAVE_RANDOM@ +_GL_FUNCDECL_SYS (random, long, (void)); +# endif +_GL_CXXALIAS_SYS (random, long, (void)); +_GL_CXXALIASWARN (random); +#elif defined GNULIB_POSIXCHECK +# undef random +# if HAVE_RAW_DECL_RANDOM +_GL_WARN_ON_USE (random, "random is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if @GNULIB_RANDOM@ +# if !@HAVE_RANDOM@ +_GL_FUNCDECL_SYS (srandom, void, (unsigned int seed)); +# endif +_GL_CXXALIAS_SYS (srandom, void, (unsigned int seed)); +_GL_CXXALIASWARN (srandom); +#elif defined GNULIB_POSIXCHECK +# undef srandom +# if HAVE_RAW_DECL_SRANDOM +_GL_WARN_ON_USE (srandom, "srandom is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if @GNULIB_RANDOM@ +# if !@HAVE_RANDOM@ || !@HAVE_DECL_INITSTATE@ +_GL_FUNCDECL_SYS (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (initstate, char *, + (unsigned int seed, char *buf, size_t buf_size)); +_GL_CXXALIASWARN (initstate); +#elif defined GNULIB_POSIXCHECK +# undef initstate +# if HAVE_RAW_DECL_INITSTATE_R +_GL_WARN_ON_USE (initstate, "initstate is unportable - " + "use gnulib module random for portability"); +# endif +#endif + +#if @GNULIB_RANDOM@ +# if !@HAVE_RANDOM@ || !@HAVE_DECL_SETSTATE@ +_GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (setstate, char *, (char *arg_state)); +_GL_CXXALIASWARN (setstate); +#elif defined GNULIB_POSIXCHECK +# undef setstate +# if HAVE_RAW_DECL_SETSTATE_R +_GL_WARN_ON_USE (setstate, "setstate is unportable - " + "use gnulib module random for portability"); +# endif +#endif + + +#if @GNULIB_RANDOM_R@ +# if @REPLACE_RANDOM_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef random_r +# define random_r rpl_random_r +# endif +_GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result)); +# else +# if !@HAVE_RANDOM_R@ +_GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result)); +# endif +_GL_CXXALIASWARN (random_r); +#elif defined GNULIB_POSIXCHECK +# undef random_r +# if HAVE_RAW_DECL_RANDOM_R +_GL_WARN_ON_USE (random_r, "random_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if @GNULIB_RANDOM_R@ +# if @REPLACE_RANDOM_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef srandom_r +# define srandom_r rpl_srandom_r +# endif +_GL_FUNCDECL_RPL (srandom_r, int, + (unsigned int seed, struct random_data *rand_state) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (srandom_r, int, + (unsigned int seed, struct random_data *rand_state)); +# else +# if !@HAVE_RANDOM_R@ +_GL_FUNCDECL_SYS (srandom_r, int, + (unsigned int seed, struct random_data *rand_state) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (srandom_r, int, + (unsigned int seed, struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (srandom_r); +#elif defined GNULIB_POSIXCHECK +# undef srandom_r +# if HAVE_RAW_DECL_SRANDOM_R +_GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if @GNULIB_RANDOM_R@ +# if @REPLACE_RANDOM_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef initstate_r +# define initstate_r rpl_initstate_r +# endif +_GL_FUNCDECL_RPL (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state) + _GL_ARG_NONNULL ((2, 4))); +_GL_CXXALIAS_RPL (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state)); +# else +# if !@HAVE_RANDOM_R@ +_GL_FUNCDECL_SYS (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state) + _GL_ARG_NONNULL ((2, 4))); +# endif +_GL_CXXALIAS_SYS (initstate_r, int, + (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (initstate_r); +#elif defined GNULIB_POSIXCHECK +# undef initstate_r +# if HAVE_RAW_DECL_INITSTATE_R +_GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + +#if @GNULIB_RANDOM_R@ +# if @REPLACE_RANDOM_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setstate_r +# define setstate_r rpl_setstate_r +# endif +_GL_FUNCDECL_RPL (setstate_r, int, + (char *arg_state, struct random_data *rand_state) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (setstate_r, int, + (char *arg_state, struct random_data *rand_state)); +# else +# if !@HAVE_RANDOM_R@ +_GL_FUNCDECL_SYS (setstate_r, int, + (char *arg_state, struct random_data *rand_state) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (setstate_r, int, + (char *arg_state, struct random_data *rand_state)); +# endif +_GL_CXXALIASWARN (setstate_r); +#elif defined GNULIB_POSIXCHECK +# undef setstate_r +# if HAVE_RAW_DECL_SETSTATE_R +_GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - " + "use gnulib module random_r for portability"); +# endif +#endif + + +#if @GNULIB_REALLOC_POSIX@ +# if @REPLACE_REALLOC@ +# if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ + || _GL_USE_STDLIB_ALLOC) +# undef realloc +# define realloc rpl_realloc +# endif +_GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size)); +_GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size)); +# else +_GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size)); +# endif +_GL_CXXALIASWARN (realloc); +#elif defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC +# undef realloc +/* Assume realloc is always declared. */ +_GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - " + "use gnulib module realloc-posix for portability"); +#endif + + +#if @GNULIB_REALLOCARRAY@ +# if ! @HAVE_REALLOCARRAY@ +_GL_FUNCDECL_SYS (reallocarray, void *, + (void *ptr, size_t nmemb, size_t size)); +# endif +_GL_CXXALIAS_SYS (reallocarray, void *, + (void *ptr, size_t nmemb, size_t size)); +_GL_CXXALIASWARN (reallocarray); +#elif defined GNULIB_POSIXCHECK +# undef reallocarray +# if HAVE_RAW_DECL_REALLOCARRAY +_GL_WARN_ON_USE (reallocarray, "reallocarray is not portable - " + "use gnulib module reallocarray for portability"); +# endif +#endif + +#if @GNULIB_REALPATH@ +# if @REPLACE_REALPATH@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define realpath rpl_realpath +# endif +_GL_FUNCDECL_RPL (realpath, char *, (const char *name, char *resolved) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (realpath, char *, (const char *name, char *resolved)); +# else +# if !@HAVE_REALPATH@ +_GL_FUNCDECL_SYS (realpath, char *, (const char *name, char *resolved) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (realpath, char *, (const char *name, char *resolved)); +# endif +_GL_CXXALIASWARN (realpath); +#elif defined GNULIB_POSIXCHECK +# undef realpath +# if HAVE_RAW_DECL_REALPATH +_GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module " + "canonicalize or canonicalize-lgpl for portability"); +# endif +#endif + +#if @GNULIB_RPMATCH@ +/* Test a user response to a question. + Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ +# if !@HAVE_RPMATCH@ +_GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (rpmatch, int, (const char *response)); +_GL_CXXALIASWARN (rpmatch); +#elif defined GNULIB_POSIXCHECK +# undef rpmatch +# if HAVE_RAW_DECL_RPMATCH +_GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - " + "use gnulib module rpmatch for portability"); +# endif +#endif + +#if @GNULIB_SECURE_GETENV@ +/* Look up NAME in the environment, returning 0 in insecure situations. */ +# if !@HAVE_SECURE_GETENV@ +_GL_FUNCDECL_SYS (secure_getenv, char *, + (char const *name) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (secure_getenv, char *, (char const *name)); +_GL_CXXALIASWARN (secure_getenv); +#elif defined GNULIB_POSIXCHECK +# undef secure_getenv +# if HAVE_RAW_DECL_SECURE_GETENV +_GL_WARN_ON_USE (secure_getenv, "secure_getenv is unportable - " + "use gnulib module secure_getenv for portability"); +# endif +#endif + +#if @GNULIB_SETENV@ +/* Set NAME to VALUE in the environment. + If REPLACE is nonzero, overwrite an existing value. */ +# if @REPLACE_SETENV@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef setenv +# define setenv rpl_setenv +# endif +_GL_FUNCDECL_RPL (setenv, int, + (const char *name, const char *value, int replace) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (setenv, int, + (const char *name, const char *value, int replace)); +# else +# if !@HAVE_DECL_SETENV@ +_GL_FUNCDECL_SYS (setenv, int, + (const char *name, const char *value, int replace) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (setenv, int, + (const char *name, const char *value, int replace)); +# endif +# if !(@REPLACE_SETENV@ && !@HAVE_DECL_SETENV@) +_GL_CXXALIASWARN (setenv); +# endif +#elif defined GNULIB_POSIXCHECK +# undef setenv +# if HAVE_RAW_DECL_SETENV +_GL_WARN_ON_USE (setenv, "setenv is unportable - " + "use gnulib module setenv for portability"); +# endif +#endif + +#if @GNULIB_STRTOD@ + /* Parse a double from STRING, updating ENDP if appropriate. */ +# if @REPLACE_STRTOD@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strtod rpl_strtod +# endif +_GL_FUNCDECL_RPL (strtod, double, (const char *str, char **endp) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strtod, double, (const char *str, char **endp)); +# else +# if !@HAVE_STRTOD@ +_GL_FUNCDECL_SYS (strtod, double, (const char *str, char **endp) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtod, double, (const char *str, char **endp)); +# endif +_GL_CXXALIASWARN (strtod); +#elif defined GNULIB_POSIXCHECK +# undef strtod +# if HAVE_RAW_DECL_STRTOD +_GL_WARN_ON_USE (strtod, "strtod is unportable - " + "use gnulib module strtod for portability"); +# endif +#endif + +#if @GNULIB_STRTOLL@ +/* Parse a signed integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set + to ERANGE. */ +# if !@HAVE_STRTOLL@ +_GL_FUNCDECL_SYS (strtoll, long long, + (const char *string, char **endptr, int base) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoll, long long, + (const char *string, char **endptr, int base)); +_GL_CXXALIASWARN (strtoll); +#elif defined GNULIB_POSIXCHECK +# undef strtoll +# if HAVE_RAW_DECL_STRTOLL +_GL_WARN_ON_USE (strtoll, "strtoll is unportable - " + "use gnulib module strtoll for portability"); +# endif +#endif + +#if @GNULIB_STRTOULL@ +/* Parse an unsigned integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is ULLONG_MAX, and errno is set to + ERANGE. */ +# if !@HAVE_STRTOULL@ +_GL_FUNCDECL_SYS (strtoull, unsigned long long, + (const char *string, char **endptr, int base) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strtoull, unsigned long long, + (const char *string, char **endptr, int base)); +_GL_CXXALIASWARN (strtoull); +#elif defined GNULIB_POSIXCHECK +# undef strtoull +# if HAVE_RAW_DECL_STRTOULL +_GL_WARN_ON_USE (strtoull, "strtoull is unportable - " + "use gnulib module strtoull for portability"); +# endif +#endif + +#if @GNULIB_UNLOCKPT@ +/* Unlock the slave side of the pseudo-terminal whose master side is specified + by FD, so that it can be opened. */ +# if !@HAVE_UNLOCKPT@ +_GL_FUNCDECL_SYS (unlockpt, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (unlockpt, int, (int fd)); +_GL_CXXALIASWARN (unlockpt); +#elif defined GNULIB_POSIXCHECK +# undef unlockpt +# if HAVE_RAW_DECL_UNLOCKPT +_GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - " + "use gnulib module unlockpt for portability"); +# endif +#endif + +#if @GNULIB_UNSETENV@ +/* Remove the variable NAME from the environment. */ +# if @REPLACE_UNSETENV@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unsetenv +# define unsetenv rpl_unsetenv +# endif +_GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (unsetenv, int, (const char *name)); +# else +# if !@HAVE_DECL_UNSETENV@ +_GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (unsetenv, int, (const char *name)); +# endif +# if !(@REPLACE_UNSETENV@ && !@HAVE_DECL_UNSETENV@) +_GL_CXXALIASWARN (unsetenv); +# endif +#elif defined GNULIB_POSIXCHECK +# undef unsetenv +# if HAVE_RAW_DECL_UNSETENV +_GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - " + "use gnulib module unsetenv for portability"); +# endif +#endif + +/* Convert a wide character to a multibyte character. */ +#if @GNULIB_WCTOMB@ +# if @REPLACE_WCTOMB@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wctomb +# define wctomb rpl_wctomb +# endif +_GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc)); +_GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc)); +# else +_GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc)); +# endif +_GL_CXXALIASWARN (wctomb); +#endif + + +#endif /* _@GUARD_PREFIX@_STDLIB_H */ +#endif /* _@GUARD_PREFIX@_STDLIB_H */ +#endif diff --git a/devspec.en_US/project/recutils/lib/str-two-way.h b/devspec.en_US/project/recutils/lib/str-two-way.h new file mode 100755 index 0000000..9155e6b --- /dev/null +++ b/devspec.en_US/project/recutils/lib/str-two-way.h @@ -0,0 +1,452 @@ +/* Byte-wise substring search, using the Two-Way algorithm. + Copyright (C) 2008-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Eric Blake <ebb9@byu.net>, 2008. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Before including this file, you need to include <config.h> and + <string.h>, and define: + RESULT_TYPE A macro that expands to the return type. + AVAILABLE(h, h_l, j, n_l) + A macro that returns nonzero if there are + at least N_L bytes left starting at H[J]. + H is 'unsigned char *', H_L, J, and N_L + are 'size_t'; H_L is an lvalue. For + NUL-terminated searches, H_L can be + modified each iteration to avoid having + to compute the end of H up front. + + For case-insensitivity, you may optionally define: + CMP_FUNC(p1, p2, l) A macro that returns 0 iff the first L + characters of P1 and P2 are equal. + CANON_ELEMENT(c) A macro that canonicalizes an element right after + it has been fetched from one of the two strings. + The argument is an 'unsigned char'; the result + must be an 'unsigned char' as well. + + This file undefines the macros documented above, and defines + LONG_NEEDLE_THRESHOLD. +*/ + +#include <limits.h> +#include <stdint.h> + +/* We use the Two-Way string matching algorithm (also known as + Chrochemore-Perrin), which guarantees linear complexity with + constant space. Additionally, for long needles, we also use a bad + character shift table similar to the Boyer-Moore algorithm to + achieve improved (potentially sub-linear) performance. + + See http://www-igm.univ-mlv.fr/~lecroq/string/node26.html#SECTION00260, + https://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm, + https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.34.6641&rep=rep1&type=pdf +*/ + +/* Point at which computing a bad-byte shift table is likely to be + worthwhile. Small needles should not compute a table, since it + adds (1 << CHAR_BIT) + NEEDLE_LEN computations of preparation for a + speedup no greater than a factor of NEEDLE_LEN. The larger the + needle, the better the potential performance gain. On the other + hand, on non-POSIX systems with CHAR_BIT larger than eight, the + memory required for the table is prohibitive. */ +#if CHAR_BIT < 10 +# define LONG_NEEDLE_THRESHOLD 32U +#else +# define LONG_NEEDLE_THRESHOLD SIZE_MAX +#endif + +#ifndef MAX +# define MAX(a, b) ((a < b) ? (b) : (a)) +#endif + +#ifndef CANON_ELEMENT +# define CANON_ELEMENT(c) c +#endif +#ifndef CMP_FUNC +# define CMP_FUNC memcmp +#endif + +/* Perform a critical factorization of NEEDLE, of length NEEDLE_LEN. + Return the index of the first byte in the right half, and set + *PERIOD to the global period of the right half. + + The global period of a string is the smallest index (possibly its + length) at which all remaining bytes in the string are repetitions + of the prefix (the last repetition may be a subset of the prefix). + + When NEEDLE is factored into two halves, a local period is the + length of the smallest word that shares a suffix with the left half + and shares a prefix with the right half. All factorizations of a + non-empty NEEDLE have a local period of at least 1 and no greater + than NEEDLE_LEN. + + A critical factorization has the property that the local period + equals the global period. All strings have at least one critical + factorization with the left half smaller than the global period. + And while some strings have more than one critical factorization, + it is provable that with an ordered alphabet, at least one of the + critical factorizations corresponds to a maximal suffix. + + Given an ordered alphabet, a critical factorization can be computed + in linear time, with 2 * NEEDLE_LEN comparisons, by computing the + shorter of two ordered maximal suffixes. The ordered maximal + suffixes are determined by lexicographic comparison while tracking + periodicity. */ +static size_t +critical_factorization (const unsigned char *needle, size_t needle_len, + size_t *period) +{ + /* Index of last byte of left half, or SIZE_MAX. */ + size_t max_suffix, max_suffix_rev; + size_t j; /* Index into NEEDLE for current candidate suffix. */ + size_t k; /* Offset into current period. */ + size_t p; /* Intermediate period. */ + unsigned char a, b; /* Current comparison bytes. */ + + /* Special case NEEDLE_LEN of 1 or 2 (all callers already filtered + out 0-length needles. */ + if (needle_len < 3) + { + *period = 1; + return needle_len - 1; + } + + /* Invariants: + 0 <= j < NEEDLE_LEN - 1 + -1 <= max_suffix{,_rev} < j (treating SIZE_MAX as if it were signed) + min(max_suffix, max_suffix_rev) < global period of NEEDLE + 1 <= p <= global period of NEEDLE + p == global period of the substring NEEDLE[max_suffix{,_rev}+1...j] + 1 <= k <= p + */ + + /* Perform lexicographic search. */ + max_suffix = SIZE_MAX; + j = 0; + k = p = 1; + while (j + k < needle_len) + { + a = CANON_ELEMENT (needle[j + k]); + b = CANON_ELEMENT (needle[max_suffix + k]); + if (a < b) + { + /* Suffix is smaller, period is entire prefix so far. */ + j += k; + k = 1; + p = j - max_suffix; + } + else if (a == b) + { + /* Advance through repetition of the current period. */ + if (k != p) + ++k; + else + { + j += p; + k = 1; + } + } + else /* b < a */ + { + /* Suffix is larger, start over from current location. */ + max_suffix = j++; + k = p = 1; + } + } + *period = p; + + /* Perform reverse lexicographic search. */ + max_suffix_rev = SIZE_MAX; + j = 0; + k = p = 1; + while (j + k < needle_len) + { + a = CANON_ELEMENT (needle[j + k]); + b = CANON_ELEMENT (needle[max_suffix_rev + k]); + if (b < a) + { + /* Suffix is smaller, period is entire prefix so far. */ + j += k; + k = 1; + p = j - max_suffix_rev; + } + else if (a == b) + { + /* Advance through repetition of the current period. */ + if (k != p) + ++k; + else + { + j += p; + k = 1; + } + } + else /* a < b */ + { + /* Suffix is larger, start over from current location. */ + max_suffix_rev = j++; + k = p = 1; + } + } + + /* Choose the shorter suffix. Return the index of the first byte of + the right half, rather than the last byte of the left half. + + For some examples, 'banana' has two critical factorizations, both + exposed by the two lexicographic extreme suffixes of 'anana' and + 'nana', where both suffixes have a period of 2. On the other + hand, with 'aab' and 'bba', both strings have a single critical + factorization of the last byte, with the suffix having a period + of 1. While the maximal lexicographic suffix of 'aab' is 'b', + the maximal lexicographic suffix of 'bba' is 'ba', which is not a + critical factorization. Conversely, the maximal reverse + lexicographic suffix of 'a' works for 'bba', but not 'ab' for + 'aab'. The shorter suffix of the two will always be a critical + factorization. */ + if (max_suffix_rev + 1 < max_suffix + 1) + return max_suffix + 1; + *period = p; + return max_suffix_rev + 1; +} + +/* Return the first location of non-empty NEEDLE within HAYSTACK, or + NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This + method is optimized for NEEDLE_LEN < LONG_NEEDLE_THRESHOLD. + Performance is guaranteed to be linear, with an initialization cost + of 2 * NEEDLE_LEN comparisons. + + If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at + most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. + If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * + HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. */ +static RETURN_TYPE +two_way_short_needle (const unsigned char *haystack, size_t haystack_len, + const unsigned char *needle, size_t needle_len) +{ + size_t i; /* Index into current byte of NEEDLE. */ + size_t j; /* Index into current window of HAYSTACK. */ + size_t period; /* The period of the right half of needle. */ + size_t suffix; /* The index of the right half of needle. */ + + /* Factor the needle into two halves, such that the left half is + smaller than the global period, and the right half is + periodic (with a period as large as NEEDLE_LEN - suffix). */ + suffix = critical_factorization (needle, needle_len, &period); + + /* Perform the search. Each iteration compares the right half + first. */ + if (CMP_FUNC (needle, needle + period, suffix) == 0) + { + /* Entire needle is periodic; a mismatch in the left half can + only advance by the period, so use memory to avoid rescanning + known occurrences of the period in the right half. */ + size_t memory = 0; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Scan for matches in right half. */ + i = MAX (suffix, memory); + while (i < needle_len && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (memory < i + 1 && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i + 1 < memory + 1) + return (RETURN_TYPE) (haystack + j); + /* No match, so remember how many repetitions of period + on the right half were scanned. */ + j += period; + memory = needle_len - period; + } + else + { + j += i - suffix + 1; + memory = 0; + } + } + } + else + { + /* The two halves of needle are distinct; no extra memory is + required, and any mismatch results in a maximal shift. */ + period = MAX (suffix, needle_len - suffix) + 1; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Scan for matches in right half. */ + i = suffix; + while (i < needle_len && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i == SIZE_MAX) + return (RETURN_TYPE) (haystack + j); + j += period; + } + else + j += i - suffix + 1; + } + } + return NULL; +} + +/* Return the first location of non-empty NEEDLE within HAYSTACK, or + NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This + method is optimized for LONG_NEEDLE_THRESHOLD <= NEEDLE_LEN. + Performance is guaranteed to be linear, with an initialization cost + of 3 * NEEDLE_LEN + (1 << CHAR_BIT) operations. + + If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at + most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, + and sublinear performance O(HAYSTACK_LEN / NEEDLE_LEN) is possible. + If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * + HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, and + sublinear performance is not possible. */ +static RETURN_TYPE +two_way_long_needle (const unsigned char *haystack, size_t haystack_len, + const unsigned char *needle, size_t needle_len) +{ + size_t i; /* Index into current byte of NEEDLE. */ + size_t j; /* Index into current window of HAYSTACK. */ + size_t period; /* The period of the right half of needle. */ + size_t suffix; /* The index of the right half of needle. */ + size_t shift_table[1U << CHAR_BIT]; /* See below. */ + + /* Factor the needle into two halves, such that the left half is + smaller than the global period, and the right half is + periodic (with a period as large as NEEDLE_LEN - suffix). */ + suffix = critical_factorization (needle, needle_len, &period); + + /* Populate shift_table. For each possible byte value c, + shift_table[c] is the distance from the last occurrence of c to + the end of NEEDLE, or NEEDLE_LEN if c is absent from the NEEDLE. + shift_table[NEEDLE[NEEDLE_LEN - 1]] contains the only 0. */ + for (i = 0; i < 1U << CHAR_BIT; i++) + shift_table[i] = needle_len; + for (i = 0; i < needle_len; i++) + shift_table[CANON_ELEMENT (needle[i])] = needle_len - i - 1; + + /* Perform the search. Each iteration compares the right half + first. */ + if (CMP_FUNC (needle, needle + period, suffix) == 0) + { + /* Entire needle is periodic; a mismatch in the left half can + only advance by the period, so use memory to avoid rescanning + known occurrences of the period in the right half. */ + size_t memory = 0; + size_t shift; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Check the last byte first; if it does not match, then + shift to the next possible match location. */ + shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; + if (0 < shift) + { + if (memory && shift < period) + { + /* Since needle is periodic, but the last period has + a byte out of place, there can be no match until + after the mismatch. */ + shift = needle_len - period; + } + memory = 0; + j += shift; + continue; + } + /* Scan for matches in right half. The last byte has + already been matched, by virtue of the shift table. */ + i = MAX (suffix, memory); + while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len - 1 <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (memory < i + 1 && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i + 1 < memory + 1) + return (RETURN_TYPE) (haystack + j); + /* No match, so remember how many repetitions of period + on the right half were scanned. */ + j += period; + memory = needle_len - period; + } + else + { + j += i - suffix + 1; + memory = 0; + } + } + } + else + { + /* The two halves of needle are distinct; no extra memory is + required, and any mismatch results in a maximal shift. */ + size_t shift; + period = MAX (suffix, needle_len - suffix) + 1; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Check the last byte first; if it does not match, then + shift to the next possible match location. */ + shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; + if (0 < shift) + { + j += shift; + continue; + } + /* Scan for matches in right half. The last byte has + already been matched, by virtue of the shift table. */ + i = suffix; + while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len - 1 <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i == SIZE_MAX) + return (RETURN_TYPE) (haystack + j); + j += period; + } + else + j += i - suffix + 1; + } + } + return NULL; +} + +#undef AVAILABLE +#undef CANON_ELEMENT +#undef CMP_FUNC +#undef MAX +#undef RETURN_TYPE diff --git a/devspec.en_US/project/recutils/lib/strcasecmp.c b/devspec.en_US/project/recutils/lib/strcasecmp.c new file mode 100755 index 0000000..6cd0e1e --- /dev/null +++ b/devspec.en_US/project/recutils/lib/strcasecmp.c @@ -0,0 +1,62 @@ +/* Case-insensitive string comparison function. + Copyright (C) 1998-1999, 2005-2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <string.h> + +#include <ctype.h> +#include <limits.h> + +#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) + +/* Compare strings S1 and S2, ignoring case, returning less than, equal to or + greater than zero if S1 is lexicographically less than, equal to or greater + than S2. + Note: This function does not work with multibyte strings! */ + +int +strcasecmp (const char *s1, const char *s2) +{ + const unsigned char *p1 = (const unsigned char *) s1; + const unsigned char *p2 = (const unsigned char *) s2; + unsigned char c1, c2; + + if (p1 == p2) + return 0; + + do + { + c1 = TOLOWER (*p1); + c2 = TOLOWER (*p2); + + if (c1 == '\0') + break; + + ++p1; + ++p2; + } + while (c1 == c2); + + if (UCHAR_MAX <= INT_MAX) + return c1 - c2; + else + /* On machines where 'char' and 'int' are types of the same size, the + difference of two 'unsigned char' values - including the sign bit - + doesn't fit in an 'int'. */ + return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); +} diff --git a/devspec.en_US/project/recutils/lib/strcasestr.c b/devspec.en_US/project/recutils/lib/strcasestr.c new file mode 100755 index 0000000..9c93ac5 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/strcasestr.c @@ -0,0 +1,82 @@ +/* Case-insensitive searching in a string. + Copyright (C) 2005-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2005. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <string.h> + +#include <ctype.h> +#include <stdbool.h> +#include <strings.h> + +#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) + +/* Two-Way algorithm. */ +#define RETURN_TYPE char * +#define AVAILABLE(h, h_l, j, n_l) \ + (!memchr ((h) + (h_l), '\0', (j) + (n_l) - (h_l)) \ + && ((h_l) = (j) + (n_l))) +#define CANON_ELEMENT(c) TOLOWER (c) +#define CMP_FUNC(p1, p2, l) \ + strncasecmp ((const char *) (p1), (const char *) (p2), l) +#include "str-two-way.h" + +/* Find the first occurrence of NEEDLE in HAYSTACK, using + case-insensitive comparison. This function gives unspecified + results in multibyte locales. */ +char * +strcasestr (const char *haystack_start, const char *needle_start) +{ + const char *haystack = haystack_start; + const char *needle = needle_start; + size_t needle_len; /* Length of NEEDLE. */ + size_t haystack_len; /* Known minimum length of HAYSTACK. */ + bool ok = true; /* True if NEEDLE is prefix of HAYSTACK. */ + + /* Determine length of NEEDLE, and in the process, make sure + HAYSTACK is at least as long (no point processing all of a long + NEEDLE if HAYSTACK is too short). */ + while (*haystack && *needle) + { + ok &= (TOLOWER ((unsigned char) *haystack) + == TOLOWER ((unsigned char) *needle)); + haystack++; + needle++; + } + if (*needle) + return NULL; + if (ok) + return (char *) haystack_start; + needle_len = needle - needle_start; + haystack = haystack_start + 1; + haystack_len = needle_len - 1; + + /* Perform the search. Abstract memory is considered to be an array + of 'unsigned char' values, not an array of 'char' values. See + ISO C 99 section 6.2.6.1. */ + if (needle_len < LONG_NEEDLE_THRESHOLD) + return two_way_short_needle ((const unsigned char *) haystack, + haystack_len, + (const unsigned char *) needle_start, + needle_len); + return two_way_long_needle ((const unsigned char *) haystack, haystack_len, + (const unsigned char *) needle_start, + needle_len); +} + +#undef LONG_NEEDLE_THRESHOLD diff --git a/devspec.en_US/project/recutils/lib/strchrnul.c b/devspec.en_US/project/recutils/lib/strchrnul.c new file mode 100755 index 0000000..0f5dd81 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/strchrnul.c @@ -0,0 +1,142 @@ +/* Searching in a string. + Copyright (C) 2003, 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <string.h> + +/* Find the first occurrence of C in S or the final NUL byte. */ +char * +strchrnul (const char *s, int c_in) +{ + /* On 32-bit hardware, choosing longword to be a 32-bit unsigned + long instead of a 64-bit uintmax_t tends to give better + performance. On 64-bit hardware, unsigned long is generally 64 + bits already. Change this typedef to experiment with + performance. */ + typedef unsigned long int longword; + + const unsigned char *char_ptr; + const longword *longword_ptr; + longword repeated_one; + longword repeated_c; + unsigned char c; + + c = (unsigned char) c_in; + if (!c) + return rawmemchr (s, 0); + + /* Handle the first few bytes by reading one byte at a time. + Do this until CHAR_PTR is aligned on a longword boundary. */ + for (char_ptr = (const unsigned char *) s; + (size_t) char_ptr % sizeof (longword) != 0; + ++char_ptr) + if (!*char_ptr || *char_ptr == c) + return (char *) char_ptr; + + longword_ptr = (const longword *) char_ptr; + + /* All these elucidatory comments refer to 4-byte longwords, + but the theory applies equally well to any size longwords. */ + + /* Compute auxiliary longword values: + repeated_one is a value which has a 1 in every byte. + repeated_c has c in every byte. */ + repeated_one = 0x01010101; + repeated_c = c | (c << 8); + repeated_c |= repeated_c << 16; + if (0xffffffffU < (longword) -1) + { + repeated_one |= repeated_one << 31 << 1; + repeated_c |= repeated_c << 31 << 1; + if (8 < sizeof (longword)) + { + size_t i; + + for (i = 64; i < sizeof (longword) * 8; i *= 2) + { + repeated_one |= repeated_one << i; + repeated_c |= repeated_c << i; + } + } + } + + /* Instead of the traditional loop which tests each byte, we will + test a longword at a time. The tricky part is testing if *any of + the four* bytes in the longword in question are equal to NUL or + c. We first use an xor with repeated_c. This reduces the task + to testing whether *any of the four* bytes in longword1 or + longword2 is zero. + + Let's consider longword1. We compute tmp = + ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). + That is, we perform the following operations: + 1. Subtract repeated_one. + 2. & ~longword1. + 3. & a mask consisting of 0x80 in every byte. + Consider what happens in each byte: + - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, + and step 3 transforms it into 0x80. A carry can also be propagated + to more significant bytes. + - If a byte of longword1 is nonzero, let its lowest 1 bit be at + position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, + the byte ends in a single bit of value 0 and k bits of value 1. + After step 2, the result is just k bits of value 1: 2^k - 1. After + step 3, the result is 0. And no carry is produced. + So, if longword1 has only non-zero bytes, tmp is zero. + Whereas if longword1 has a zero byte, call j the position of the least + significant zero byte. Then the result has a zero at positions 0, ..., + j-1 and a 0x80 at position j. We cannot predict the result at the more + significant bytes (positions j+1..3), but it does not matter since we + already have a non-zero bit at position 8*j+7. + + The test whether any byte in longword1 or longword2 is zero is equivalent + to testing whether tmp1 is nonzero or tmp2 is nonzero. We can combine + this into a single test, whether (tmp1 | tmp2) is nonzero. + + This test can read more than one byte beyond the end of a string, + depending on where the terminating NUL is encountered. However, + this is considered safe since the initialization phase ensured + that the read will be aligned, therefore, the read will not cross + page boundaries and will not cause a fault. */ + + while (1) + { + longword longword1 = *longword_ptr ^ repeated_c; + longword longword2 = *longword_ptr; + + if (((((longword1 - repeated_one) & ~longword1) + | ((longword2 - repeated_one) & ~longword2)) + & (repeated_one << 7)) != 0) + break; + longword_ptr++; + } + + char_ptr = (const unsigned char *) longword_ptr; + + /* At this point, we know that one of the sizeof (longword) bytes + starting at char_ptr is == 0 or == c. On little-endian machines, + we could determine the first such byte without any further memory + accesses, just by looking at the tmp result from the last loop + iteration. But this does not work on big-endian machines. + Choose code that works in both cases. */ + + char_ptr = (unsigned char *) longword_ptr; + while (*char_ptr && (*char_ptr != c)) + char_ptr++; + return (char *) char_ptr; +} diff --git a/devspec.en_US/project/recutils/lib/strchrnul.valgrind b/devspec.en_US/project/recutils/lib/strchrnul.valgrind new file mode 100755 index 0000000..b14fa13 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/strchrnul.valgrind @@ -0,0 +1,12 @@ +# Suppress a valgrind message about use of uninitialized memory in strchrnul(). +# This use is OK because it provides only a speedup. +{ + strchrnul-value4 + Memcheck:Value4 + fun:strchrnul +} +{ + strchrnul-value8 + Memcheck:Value8 + fun:strchrnul +} diff --git a/devspec.en_US/project/recutils/lib/strdup.c b/devspec.en_US/project/recutils/lib/strdup.c new file mode 100755 index 0000000..717cf65 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/strdup.c @@ -0,0 +1,54 @@ +/* Copyright (C) 1991, 1996-1998, 2002-2004, 2006-2007, 2009-2019 Free Software + Foundation, Inc. + + This file is part of the GNU C Library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _LIBC +# include <config.h> +#endif + +/* Get specification. */ +#include <string.h> + +#include <stdlib.h> + +#undef __strdup +#ifdef _LIBC +# undef strdup +#endif + +#ifndef weak_alias +# define __strdup strdup +#endif + +/* Duplicate S, returning an identical malloc'd string. */ +char * +__strdup (const char *s) +{ + size_t len = strlen (s) + 1; + void *new = malloc (len); + + if (new == NULL) + return NULL; + + return (char *) memcpy (new, s, len); +} +#ifdef libc_hidden_def +libc_hidden_def (__strdup) +#endif +#ifdef weak_alias +weak_alias (__strdup, strdup) +#endif diff --git a/devspec.en_US/project/recutils/lib/streq.h b/devspec.en_US/project/recutils/lib/streq.h new file mode 100755 index 0000000..326537b --- /dev/null +++ b/devspec.en_US/project/recutils/lib/streq.h @@ -0,0 +1,176 @@ +/* Optimized string comparison. + Copyright (C) 2001-2002, 2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>. */ + +#ifndef _GL_STREQ_H +#define _GL_STREQ_H + +#include <string.h> + +/* STREQ_OPT allows to optimize string comparison with a small literal string. + STREQ_OPT (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) + is semantically equivalent to + strcmp (s, "EUC-KR") == 0 + just faster. */ + +/* Help GCC to generate good code for string comparisons with + immediate strings. */ +#if defined (__GNUC__) && defined (__OPTIMIZE__) + +static inline int +streq9 (const char *s1, const char *s2) +{ + return strcmp (s1 + 9, s2 + 9) == 0; +} + +static inline int +streq8 (const char *s1, const char *s2, char s28) +{ + if (s1[8] == s28) + { + if (s28 == 0) + return 1; + else + return streq9 (s1, s2); + } + else + return 0; +} + +static inline int +streq7 (const char *s1, const char *s2, char s27, char s28) +{ + if (s1[7] == s27) + { + if (s27 == 0) + return 1; + else + return streq8 (s1, s2, s28); + } + else + return 0; +} + +static inline int +streq6 (const char *s1, const char *s2, char s26, char s27, char s28) +{ + if (s1[6] == s26) + { + if (s26 == 0) + return 1; + else + return streq7 (s1, s2, s27, s28); + } + else + return 0; +} + +static inline int +streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28) +{ + if (s1[5] == s25) + { + if (s25 == 0) + return 1; + else + return streq6 (s1, s2, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[4] == s24) + { + if (s24 == 0) + return 1; + else + return streq5 (s1, s2, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[3] == s23) + { + if (s23 == 0) + return 1; + else + return streq4 (s1, s2, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[2] == s22) + { + if (s22 == 0) + return 1; + else + return streq3 (s1, s2, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[1] == s21) + { + if (s21 == 0) + return 1; + else + return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[0] == s20) + { + if (s20 == 0) + return 1; + else + return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28) + +#else + +#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + (strcmp (s1, s2) == 0) + +#endif + +#endif /* _GL_STREQ_H */ diff --git a/devspec.en_US/project/recutils/lib/strerror-override.c b/devspec.en_US/project/recutils/lib/strerror-override.c new file mode 100755 index 0000000..558a010 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/strerror-override.c @@ -0,0 +1,302 @@ +/* strerror-override.c --- POSIX compatible system error routine + + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2010. */ + +#include <config.h> + +#include "strerror-override.h" + +#include <errno.h> + +#if GNULIB_defined_EWINSOCK /* native Windows platforms */ +# if HAVE_WINSOCK2_H +# include <winsock2.h> +# endif +#endif + +/* If ERRNUM maps to an errno value defined by gnulib, return a string + describing the error. Otherwise return NULL. */ +const char * +strerror_override (int errnum) +{ + /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ + switch (errnum) + { +#if REPLACE_STRERROR_0 + case 0: + return "Success"; +#endif + +#if GNULIB_defined_ESOCK /* native Windows platforms with older <errno.h> */ + case EINPROGRESS: + return "Operation now in progress"; + case EALREADY: + return "Operation already in progress"; + case ENOTSOCK: + return "Socket operation on non-socket"; + case EDESTADDRREQ: + return "Destination address required"; + case EMSGSIZE: + return "Message too long"; + case EPROTOTYPE: + return "Protocol wrong type for socket"; + case ENOPROTOOPT: + return "Protocol not available"; + case EPROTONOSUPPORT: + return "Protocol not supported"; + case EOPNOTSUPP: + return "Operation not supported"; + case EAFNOSUPPORT: + return "Address family not supported by protocol"; + case EADDRINUSE: + return "Address already in use"; + case EADDRNOTAVAIL: + return "Cannot assign requested address"; + case ENETDOWN: + return "Network is down"; + case ENETUNREACH: + return "Network is unreachable"; + case ECONNRESET: + return "Connection reset by peer"; + case ENOBUFS: + return "No buffer space available"; + case EISCONN: + return "Transport endpoint is already connected"; + case ENOTCONN: + return "Transport endpoint is not connected"; + case ETIMEDOUT: + return "Connection timed out"; + case ECONNREFUSED: + return "Connection refused"; + case ELOOP: + return "Too many levels of symbolic links"; + case EHOSTUNREACH: + return "No route to host"; + case EWOULDBLOCK: + return "Operation would block"; +#endif +#if GNULIB_defined_ESTREAMS /* native Windows platforms with older <errno.h> */ + case ETXTBSY: + return "Text file busy"; + case ENODATA: + return "No data available"; + case ENOSR: + return "Out of streams resources"; + case ENOSTR: + return "Device not a stream"; + case ETIME: + return "Timer expired"; + case EOTHER: + return "Other error"; +#endif +#if GNULIB_defined_EWINSOCK /* native Windows platforms */ + case ESOCKTNOSUPPORT: + return "Socket type not supported"; + case EPFNOSUPPORT: + return "Protocol family not supported"; + case ESHUTDOWN: + return "Cannot send after transport endpoint shutdown"; + case ETOOMANYREFS: + return "Too many references: cannot splice"; + case EHOSTDOWN: + return "Host is down"; + case EPROCLIM: + return "Too many processes"; + case EUSERS: + return "Too many users"; + case EDQUOT: + return "Disk quota exceeded"; + case ESTALE: + return "Stale NFS file handle"; + case EREMOTE: + return "Object is remote"; +# if HAVE_WINSOCK2_H + /* WSA_INVALID_HANDLE maps to EBADF */ + /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */ + /* WSA_INVALID_PARAMETER maps to EINVAL */ + case WSA_OPERATION_ABORTED: + return "Overlapped operation aborted"; + case WSA_IO_INCOMPLETE: + return "Overlapped I/O event object not in signaled state"; + case WSA_IO_PENDING: + return "Overlapped operations will complete later"; + /* WSAEINTR maps to EINTR */ + /* WSAEBADF maps to EBADF */ + /* WSAEACCES maps to EACCES */ + /* WSAEFAULT maps to EFAULT */ + /* WSAEINVAL maps to EINVAL */ + /* WSAEMFILE maps to EMFILE */ + /* WSAEWOULDBLOCK maps to EWOULDBLOCK */ + /* WSAEINPROGRESS maps to EINPROGRESS */ + /* WSAEALREADY maps to EALREADY */ + /* WSAENOTSOCK maps to ENOTSOCK */ + /* WSAEDESTADDRREQ maps to EDESTADDRREQ */ + /* WSAEMSGSIZE maps to EMSGSIZE */ + /* WSAEPROTOTYPE maps to EPROTOTYPE */ + /* WSAENOPROTOOPT maps to ENOPROTOOPT */ + /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */ + /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ + /* WSAEOPNOTSUPP maps to EOPNOTSUPP */ + /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ + /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */ + /* WSAEADDRINUSE maps to EADDRINUSE */ + /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */ + /* WSAENETDOWN maps to ENETDOWN */ + /* WSAENETUNREACH maps to ENETUNREACH */ + /* WSAENETRESET maps to ENETRESET */ + /* WSAECONNABORTED maps to ECONNABORTED */ + /* WSAECONNRESET maps to ECONNRESET */ + /* WSAENOBUFS maps to ENOBUFS */ + /* WSAEISCONN maps to EISCONN */ + /* WSAENOTCONN maps to ENOTCONN */ + /* WSAESHUTDOWN is ESHUTDOWN */ + /* WSAETOOMANYREFS is ETOOMANYREFS */ + /* WSAETIMEDOUT maps to ETIMEDOUT */ + /* WSAECONNREFUSED maps to ECONNREFUSED */ + /* WSAELOOP maps to ELOOP */ + /* WSAENAMETOOLONG maps to ENAMETOOLONG */ + /* WSAEHOSTDOWN is EHOSTDOWN */ + /* WSAEHOSTUNREACH maps to EHOSTUNREACH */ + /* WSAENOTEMPTY maps to ENOTEMPTY */ + /* WSAEPROCLIM is EPROCLIM */ + /* WSAEUSERS is EUSERS */ + /* WSAEDQUOT is EDQUOT */ + /* WSAESTALE is ESTALE */ + /* WSAEREMOTE is EREMOTE */ + case WSASYSNOTREADY: + return "Network subsystem is unavailable"; + case WSAVERNOTSUPPORTED: + return "Winsock.dll version out of range"; + case WSANOTINITIALISED: + return "Successful WSAStartup not yet performed"; + case WSAEDISCON: + return "Graceful shutdown in progress"; + case WSAENOMORE: case WSA_E_NO_MORE: + return "No more results"; + case WSAECANCELLED: case WSA_E_CANCELLED: + return "Call was canceled"; + case WSAEINVALIDPROCTABLE: + return "Procedure call table is invalid"; + case WSAEINVALIDPROVIDER: + return "Service provider is invalid"; + case WSAEPROVIDERFAILEDINIT: + return "Service provider failed to initialize"; + case WSASYSCALLFAILURE: + return "System call failure"; + case WSASERVICE_NOT_FOUND: + return "Service not found"; + case WSATYPE_NOT_FOUND: + return "Class type not found"; + case WSAEREFUSED: + return "Database query was refused"; + case WSAHOST_NOT_FOUND: + return "Host not found"; + case WSATRY_AGAIN: + return "Nonauthoritative host not found"; + case WSANO_RECOVERY: + return "Nonrecoverable error"; + case WSANO_DATA: + return "Valid name, no data record of requested type"; + /* WSA_QOS_* omitted */ +# endif +#endif + +#if GNULIB_defined_ENOMSG + case ENOMSG: + return "No message of desired type"; +#endif + +#if GNULIB_defined_EIDRM + case EIDRM: + return "Identifier removed"; +#endif + +#if GNULIB_defined_ENOLINK + case ENOLINK: + return "Link has been severed"; +#endif + +#if GNULIB_defined_EPROTO + case EPROTO: + return "Protocol error"; +#endif + +#if GNULIB_defined_EMULTIHOP + case EMULTIHOP: + return "Multihop attempted"; +#endif + +#if GNULIB_defined_EBADMSG + case EBADMSG: + return "Bad message"; +#endif + +#if GNULIB_defined_EOVERFLOW + case EOVERFLOW: + return "Value too large for defined data type"; +#endif + +#if GNULIB_defined_ENOTSUP + case ENOTSUP: + return "Not supported"; +#endif + +#if GNULIB_defined_ENETRESET + case ENETRESET: + return "Network dropped connection on reset"; +#endif + +#if GNULIB_defined_ECONNABORTED + case ECONNABORTED: + return "Software caused connection abort"; +#endif + +#if GNULIB_defined_ESTALE + case ESTALE: + return "Stale NFS file handle"; +#endif + +#if GNULIB_defined_EDQUOT + case EDQUOT: + return "Disk quota exceeded"; +#endif + +#if GNULIB_defined_ECANCELED + case ECANCELED: + return "Operation canceled"; +#endif + +#if GNULIB_defined_EOWNERDEAD + case EOWNERDEAD: + return "Owner died"; +#endif + +#if GNULIB_defined_ENOTRECOVERABLE + case ENOTRECOVERABLE: + return "State not recoverable"; +#endif + +#if GNULIB_defined_EILSEQ + case EILSEQ: + return "Invalid or incomplete multibyte or wide character"; +#endif + + default: + return NULL; + } +} diff --git a/devspec.en_US/project/recutils/lib/strerror-override.h b/devspec.en_US/project/recutils/lib/strerror-override.h new file mode 100755 index 0000000..255febc --- /dev/null +++ b/devspec.en_US/project/recutils/lib/strerror-override.h @@ -0,0 +1,56 @@ +/* strerror-override.h --- POSIX compatible system error routine + + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_STRERROR_OVERRIDE_H +# define _GL_STRERROR_OVERRIDE_H + +# include <errno.h> +# include <stddef.h> + +/* Reasonable buffer size that should never trigger ERANGE; if this + proves too small, we intentionally abort(), to remind us to fix + this value. */ +# define STACKBUF_LEN 256 + +/* If ERRNUM maps to an errno value defined by gnulib, return a string + describing the error. Otherwise return NULL. */ +# if REPLACE_STRERROR_0 \ + || GNULIB_defined_ESOCK \ + || GNULIB_defined_ESTREAMS \ + || GNULIB_defined_EWINSOCK \ + || GNULIB_defined_ENOMSG \ + || GNULIB_defined_EIDRM \ + || GNULIB_defined_ENOLINK \ + || GNULIB_defined_EPROTO \ + || GNULIB_defined_EMULTIHOP \ + || GNULIB_defined_EBADMSG \ + || GNULIB_defined_EOVERFLOW \ + || GNULIB_defined_ENOTSUP \ + || GNULIB_defined_ENETRESET \ + || GNULIB_defined_ECONNABORTED \ + || GNULIB_defined_ESTALE \ + || GNULIB_defined_EDQUOT \ + || GNULIB_defined_ECANCELED \ + || GNULIB_defined_EOWNERDEAD \ + || GNULIB_defined_ENOTRECOVERABLE \ + || GNULIB_defined_EILSEQ +extern const char *strerror_override (int errnum) _GL_ATTRIBUTE_CONST; +# else +# define strerror_override(ignored) NULL +# endif + +#endif /* _GL_STRERROR_OVERRIDE_H */ diff --git a/devspec.en_US/project/recutils/lib/strerror.c b/devspec.en_US/project/recutils/lib/strerror.c new file mode 100755 index 0000000..f5900fd --- /dev/null +++ b/devspec.en_US/project/recutils/lib/strerror.c @@ -0,0 +1,71 @@ +/* strerror.c --- POSIX compatible system error routine + + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <string.h> + +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "intprops.h" +#include "strerror-override.h" +#include "verify.h" + +/* Use the system functions, not the gnulib overrides in this file. */ +#undef sprintf + +char * +strerror (int n) +#undef strerror +{ + static char buf[STACKBUF_LEN]; + size_t len; + + /* Cast away const, due to the historical signature of strerror; + callers should not be modifying the string. */ + const char *msg = strerror_override (n); + if (msg) + return (char *) msg; + + msg = strerror (n); + + /* Our strerror_r implementation might use the system's strerror + buffer, so all other clients of strerror have to see the error + copied into a buffer that we manage. This is not thread-safe, + even if the system strerror is, but portable programs shouldn't + be using strerror if they care about thread-safety. */ + if (!msg || !*msg) + { + static char const fmt[] = "Unknown error %d"; + verify (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n)); + sprintf (buf, fmt, n); + errno = EINVAL; + return buf; + } + + /* Fix STACKBUF_LEN if this ever aborts. */ + len = strlen (msg); + if (sizeof buf <= len) + abort (); + + memcpy (buf, msg, len + 1); + return buf; +} diff --git a/devspec.en_US/project/recutils/lib/strftime.h b/devspec.en_US/project/recutils/lib/strftime.h new file mode 100755 index 0000000..e4a720b --- /dev/null +++ b/devspec.en_US/project/recutils/lib/strftime.h @@ -0,0 +1,33 @@ +/* declarations for strftime.c + + Copyright (C) 2002, 2004, 2008-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <time.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* Just like strftime, but with two more arguments: + POSIX requires that strftime use the local timezone information. + Use the timezone __TZ instead. Use __NS as the number of + nanoseconds in the %N directive. */ +size_t nstrftime (char *, size_t, char const *, struct tm const *, + timezone_t __tz, int __ns); + +#ifdef __cplusplus +} +#endif diff --git a/devspec.en_US/project/recutils/lib/string.h b/devspec.en_US/project/recutils/lib/string.h new file mode 100755 index 0000000..824bfa5 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/string.h @@ -0,0 +1,1537 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like <string.h>. + + Copyright (C) 1995-1996, 2001-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined _GL_ALREADY_INCLUDING_STRING_H +/* Special invocation convention: + - On OS X/NetBSD we have a sequence of nested includes + <string.h> -> <strings.h> -> "string.h" + In this situation system _chk variants due to -D_FORTIFY_SOURCE + might be used after any replacements defined here. */ + +#include_next <string.h> + +#else +/* Normal invocation convention. */ + +#ifndef _GL_STRING_H + +#define _GL_ALREADY_INCLUDING_STRING_H + +/* The include_next requires a split double-inclusion guard. */ +#include_next <string.h> + +#undef _GL_ALREADY_INCLUDING_STRING_H + +#ifndef _GL_STRING_H +#define _GL_STRING_H + +/* NetBSD 5.0 mis-defines NULL. */ +#include <stddef.h> + +/* MirBSD defines mbslen as a macro. */ +#if 0 && defined __MirBSD__ +# include <wchar.h> +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE /* empty */ +#endif + +/* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>. */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (0 || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ + && ! defined __GLIBC__ +# include <unistd.h> +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +/* Clear a block of memory. The compiler will not delete a call to + this function, even if the block is dead after the call. */ +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (explicit_bzero, void, + (void *__dest, size_t __n) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n)); +_GL_CXXALIASWARN (explicit_bzero); +#elif defined GNULIB_POSIXCHECK +# undef explicit_bzero +# if HAVE_RAW_DECL_EXPLICIT_BZERO +_GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - " + "use gnulib module explicit_bzero for portability"); +# endif +#endif + +/* Find the index of the least-significant set bit. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (ffsl, int, (long int i)); +# endif +_GL_CXXALIAS_SYS (ffsl, int, (long int i)); +_GL_CXXALIASWARN (ffsl); +#elif defined GNULIB_POSIXCHECK +# undef ffsl +# if HAVE_RAW_DECL_FFSL +_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); +# endif +#endif + + +/* Find the index of the least-significant set bit. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (ffsll, int, (long long int i)); +# endif +_GL_CXXALIAS_SYS (ffsll, int, (long long int i)); +_GL_CXXALIASWARN (ffsll); +#elif defined GNULIB_POSIXCHECK +# undef ffsll +# if HAVE_RAW_DECL_FFSLL +_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); +# endif +#endif + + +/* Return the first instance of C within N bytes of S, or NULL. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define memchr rpl_memchr +# endif +_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C" { const void * std::memchr (const void *, int, size_t); } + extern "C++" { void * std::memchr (void *, int, size_t); } */ +_GL_CXXALIAS_SYS_CAST2 (memchr, + void *, (void const *__s, int __c, size_t __n), + void const *, (void const *__s, int __c, size_t __n)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); +_GL_CXXALIASWARN1 (memchr, void const *, + (void const *__s, int __c, size_t __n)); +# else +_GL_CXXALIASWARN (memchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memchr +/* Assume memchr is always declared. */ +_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " + "use gnulib module memchr for portability" ); +#endif + +/* Return the first occurrence of NEEDLE in HAYSTACK. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define memmem rpl_memmem +# endif +_GL_FUNCDECL_RPL (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 3))); +# endif +_GL_CXXALIAS_SYS (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len)); +# endif +_GL_CXXALIASWARN (memmem); +#elif defined GNULIB_POSIXCHECK +# undef memmem +# if HAVE_RAW_DECL_MEMMEM +_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " + "use gnulib module memmem-simple for portability, " + "and module memmem for speed" ); +# endif +#endif + +/* Copy N bytes of SRC to DEST, return pointer to bytes after the + last written byte. */ +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (mempcpy, void *, + (void *restrict __dest, void const *restrict __src, + size_t __n) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (mempcpy, void *, + (void *restrict __dest, void const *restrict __src, + size_t __n)); +_GL_CXXALIASWARN (mempcpy); +#elif defined GNULIB_POSIXCHECK +# undef mempcpy +# if HAVE_RAW_DECL_MEMPCPY +_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " + "use gnulib module mempcpy for portability"); +# endif +#endif + +/* Search backwards through a block for a byte (specified as an int). */ +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const void * std::memrchr (const void *, int, size_t); } + extern "C++" { void * std::memrchr (void *, int, size_t); } */ +_GL_CXXALIAS_SYS_CAST2 (memrchr, + void *, (void const *, int, size_t), + void const *, (void const *, int, size_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t)); +_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t)); +# else +_GL_CXXALIASWARN (memrchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memrchr +# if HAVE_RAW_DECL_MEMRCHR +_GL_WARN_ON_USE (memrchr, "memrchr is unportable - " + "use gnulib module memrchr for portability"); +# endif +#endif + +/* Find the first occurrence of C in S. More efficient than + memchr(S,C,N), at the expense of undefined behavior if C does not + occur within N bytes. */ +#if 1 +# if ! 1 +_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const void * std::rawmemchr (const void *, int); } + extern "C++" { void * std::rawmemchr (void *, int); } */ +_GL_CXXALIAS_SYS_CAST2 (rawmemchr, + void *, (void const *__s, int __c_in), + void const *, (void const *__s, int __c_in)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in)); +_GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in)); +# else +_GL_CXXALIASWARN (rawmemchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef rawmemchr +# if HAVE_RAW_DECL_RAWMEMCHR +_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " + "use gnulib module rawmemchr for portability"); +# endif +#endif + +/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (stpcpy, char *, + (char *restrict __dst, char const *restrict __src) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (stpcpy, char *, + (char *restrict __dst, char const *restrict __src)); +_GL_CXXALIASWARN (stpcpy); +#elif defined GNULIB_POSIXCHECK +# undef stpcpy +# if HAVE_RAW_DECL_STPCPY +_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " + "use gnulib module stpcpy for portability"); +# endif +#endif + +/* Copy no more than N bytes of SRC to DST, returning a pointer past the + last non-NUL byte written into DST. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef stpncpy +# define stpncpy rpl_stpncpy +# endif +_GL_FUNCDECL_RPL (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n)); +# endif +_GL_CXXALIASWARN (stpncpy); +#elif defined GNULIB_POSIXCHECK +# undef stpncpy +# if HAVE_RAW_DECL_STPNCPY +_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " + "use gnulib module stpncpy for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strchr +/* Assume strchr is always declared. */ +_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings " + "in some multibyte locales - " + "use mbschr if you care about internationalization"); +#endif + +/* Find the first occurrence of C in S or the final NUL byte. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strchrnul rpl_strchrnul +# endif +_GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strchrnul, char *, + (const char *str, int ch)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * std::strchrnul (const char *, int); } + extern "C++" { char * std::strchrnul (char *, int); } */ +_GL_CXXALIAS_SYS_CAST2 (strchrnul, + char *, (char const *__s, int __c_in), + char const *, (char const *__s, int __c_in)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in)); +_GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in)); +# else +_GL_CXXALIASWARN (strchrnul); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strchrnul +# if HAVE_RAW_DECL_STRCHRNUL +_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " + "use gnulib module strchrnul for portability"); +# endif +#endif + +/* Duplicate S, returning an identical malloc'd string. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strdup +# define strdup rpl_strdup +# endif +_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); +# else +# if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup + /* strdup exists as a function and as a macro. Get rid of the macro. */ +# undef strdup +# endif +# if !(1 || defined strdup) +_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); +# endif +_GL_CXXALIASWARN (strdup); +#elif defined GNULIB_POSIXCHECK +# undef strdup +# if HAVE_RAW_DECL_STRDUP +_GL_WARN_ON_USE (strdup, "strdup is unportable - " + "use gnulib module strdup for portability"); +# endif +#endif + +/* Append no more than N characters from SRC onto DEST. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strncat +# define strncat rpl_strncat +# endif +_GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n)); +# else +_GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n)); +# endif +_GL_CXXALIASWARN (strncat); +#elif defined GNULIB_POSIXCHECK +# undef strncat +# if HAVE_RAW_DECL_STRNCAT +_GL_WARN_ON_USE (strncat, "strncat is unportable - " + "use gnulib module strncat for portability"); +# endif +#endif + +/* Return a newly allocated copy of at most N bytes of STRING. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strndup +# define strndup rpl_strndup +# endif +_GL_FUNCDECL_RPL (strndup, char *, (char const *__s, size_t __n) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n)); +# endif +_GL_CXXALIASWARN (strndup); +#elif defined GNULIB_POSIXCHECK +# undef strndup +# if HAVE_RAW_DECL_STRNDUP +_GL_WARN_ON_USE (strndup, "strndup is unportable - " + "use gnulib module strndup for portability"); +# endif +#endif + +/* Find the length (number of bytes) of STRING, but scan at most + MAXLEN bytes. If no '\0' terminator is found in that many bytes, + return MAXLEN. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strnlen +# define strnlen rpl_strnlen +# endif +_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen)); +# endif +_GL_CXXALIASWARN (strnlen); +#elif defined GNULIB_POSIXCHECK +# undef strnlen +# if HAVE_RAW_DECL_STRNLEN +_GL_WARN_ON_USE (strnlen, "strnlen is unportable - " + "use gnulib module strnlen for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strcspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strcspn +/* Assume strcspn is always declared. */ +_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " + "in multibyte locales - " + "use mbscspn if you care about internationalization"); +#endif + +/* Find the first occurrence in S of any character in ACCEPT. */ +#if 0 +# if ! 1 +_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C" { const char * strpbrk (const char *, const char *); } + extern "C++" { char * strpbrk (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strpbrk, + char *, (char const *__s, char const *__accept), + const char *, (char const *__s, char const *__accept)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); +_GL_CXXALIASWARN1 (strpbrk, char const *, + (char const *__s, char const *__accept)); +# else +_GL_CXXALIASWARN (strpbrk); +# endif +# if defined GNULIB_POSIXCHECK +/* strpbrk() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strpbrk +_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings " + "in multibyte locales - " + "use mbspbrk if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strpbrk +# if HAVE_RAW_DECL_STRPBRK +_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - " + "use gnulib module strpbrk for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it cannot work with multibyte strings. */ +# undef strspn +/* Assume strspn is always declared. */ +_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " + "in multibyte locales - " + "use mbsspn if you care about internationalization"); +#endif + +#if defined GNULIB_POSIXCHECK +/* strrchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strrchr +/* Assume strrchr is always declared. */ +_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings " + "in some multibyte locales - " + "use mbsrchr if you care about internationalization"); +#endif + +/* Search the next delimiter (char listed in DELIM) starting at *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP + to point to the next char after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of strtok() that is multithread-safe and supports + empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strtok_r(). */ +#if 1 +# if ! 1 +_GL_FUNCDECL_SYS (strsep, char *, + (char **restrict __stringp, char const *restrict __delim) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (strsep, char *, + (char **restrict __stringp, char const *restrict __delim)); +_GL_CXXALIASWARN (strsep); +# if defined GNULIB_POSIXCHECK +# undef strsep +_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " + "in multibyte locales - " + "use mbssep if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strsep +# if HAVE_RAW_DECL_STRSEP +_GL_WARN_ON_USE (strsep, "strsep is unportable - " + "use gnulib module strsep for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strstr rpl_strstr +# endif +_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); +# else + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * strstr (const char *, const char *); } + extern "C++" { char * strstr (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strstr, + char *, (const char *haystack, const char *needle), + const char *, (const char *haystack, const char *needle)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); +_GL_CXXALIASWARN1 (strstr, const char *, + (const char *haystack, const char *needle)); +# else +_GL_CXXALIASWARN (strstr); +# endif +#elif defined GNULIB_POSIXCHECK +/* strstr() does not work with multibyte strings if the locale encoding is + different from UTF-8: + POSIX says that it operates on "strings", and "string" in POSIX is defined + as a sequence of bytes, not of characters. */ +# undef strstr +/* Assume strstr is always declared. */ +_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " + "work correctly on character strings in most " + "multibyte locales - " + "use mbsstr if you care about internationalization, " + "or use strstr if you care about speed"); +#endif + +/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive + comparison. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strcasestr rpl_strcasestr +# endif +_GL_FUNCDECL_RPL (strcasestr, char *, + (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strcasestr, char *, + (const char *haystack, const char *needle)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (strcasestr, char *, + (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * strcasestr (const char *, const char *); } + extern "C++" { char * strcasestr (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strcasestr, + char *, (const char *haystack, const char *needle), + const char *, (const char *haystack, const char *needle)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle)); +_GL_CXXALIASWARN1 (strcasestr, const char *, + (const char *haystack, const char *needle)); +# else +_GL_CXXALIASWARN (strcasestr); +# endif +#elif defined GNULIB_POSIXCHECK +/* strcasestr() does not work with multibyte strings: + It is a glibc extension, and glibc implements it only for unibyte + locales. */ +# undef strcasestr +# if HAVE_RAW_DECL_STRCASESTR +_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " + "strings in multibyte locales - " + "use mbscasestr if you care about " + "internationalization, or use c-strcasestr if you want " + "a locale independent function"); +# endif +#endif + +/* Parse S into tokens separated by characters in DELIM. + If S is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = strtok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + This is a variant of strtok() that is multithread-safe. + + For the POSIX documentation for this function, see: + http://www.opengroup.org/susv3xsh/strtok.html + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strsep(). */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strtok_r +# define strtok_r rpl_strtok_r +# endif +_GL_FUNCDECL_RPL (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr) + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr)); +# else +# if 0 || defined GNULIB_POSIXCHECK +# undef strtok_r +# endif +# if ! 1 +_GL_FUNCDECL_SYS (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr) + _GL_ARG_NONNULL ((2, 3))); +# endif +_GL_CXXALIAS_SYS (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr)); +# endif +_GL_CXXALIASWARN (strtok_r); +# if defined GNULIB_POSIXCHECK +_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " + "strings in multibyte locales - " + "use mbstok_r if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtok_r +# if HAVE_RAW_DECL_STRTOK_R +_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " + "use gnulib module strtok_r for portability"); +# endif +#endif + + +/* The following functions are not specified by POSIX. They are gnulib + extensions. */ + +#if 0 +/* Return the number of multibyte characters in the character string STRING. + This considers multibyte characters, unlike strlen, which counts bytes. */ +# ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ +# undef mbslen +# endif +# if 0 /* AIX, OSF/1, MirBSD define mbslen already in libc. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbslen rpl_mbslen +# endif +_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); +# else +_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); +# endif +_GL_CXXALIASWARN (mbslen); +#endif + +#if 0 +/* Return the number of multibyte characters in the character string starting + at STRING and ending at STRING + LEN. */ +_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1)); +#endif + +#if 0 +/* Locate the first single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# if defined __hpux +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbschr rpl_mbschr /* avoid collision with HP-UX function */ +# endif +_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); +# else +_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); +# endif +_GL_CXXALIASWARN (mbschr); +#endif + +#if 0 +/* Locate the last single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strrchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# if defined __hpux || defined __INTERIX +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbsrchr rpl_mbsrchr /* avoid collision with system function */ +# endif +_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); +# else +_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); +# endif +_GL_CXXALIASWARN (mbsrchr); +#endif + +#if 0 +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. + Unlike strstr(), this function works correctly in multibyte locales with + encodings different from UTF-8. */ +_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Compare the character strings S1 and S2, ignoring case, returning less than, + equal to or greater than zero if S1 is lexicographically less than, equal to + or greater than S2. + Note: This function may, in multibyte locales, return 0 for strings of + different lengths! + Unlike strcasecmp(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Compare the initial segment of the character string S1 consisting of at most + N characters with the initial segment of the character string S2 consisting + of at most N characters, ignoring case, returning less than, equal to or + greater than zero if the initial segment of S1 is lexicographically less + than, equal to or greater than the initial segment of S2. + Note: This function may, in multibyte locales, return 0 for initial segments + of different lengths! + Unlike strncasecmp(), this function works correctly in multibyte locales. + But beware that N is not a byte count but a character count! */ +_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Compare the initial segment of the character string STRING consisting of + at most mbslen (PREFIX) characters with the character string PREFIX, + ignoring case. If the two match, return a pointer to the first byte + after this prefix in STRING. Otherwise, return NULL. + Note: This function may, in multibyte locales, return non-NULL if STRING + is of smaller length than PREFIX! + Unlike strncasecmp(), this function works correctly in multibyte + locales. */ +_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK, using case-insensitive comparison. + Note: This function may, in multibyte locales, return success even if + strlen (haystack) < strlen (needle) ! + Unlike strcasestr(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strcspn(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the pointer to it, or NULL if none + exists. + Unlike strpbrk(), this function works correctly in multibyte locales. */ +# if defined __hpux +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ +# endif +_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); +# else +_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); +# endif +_GL_CXXALIASWARN (mbspbrk); +#endif + +#if 0 +/* Find the first occurrence in the character string STRING of any character + not in the character string REJECT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strspn(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Search the next delimiter (multibyte character listed in the character + string DELIM) starting at the character string *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP to point + to the next multibyte character after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of mbstok_r() that supports empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbstok_r(). */ +_GL_EXTERN_C char * mbssep (char **stringp, const char *delim) + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if 0 +/* Parse the character string STRING into tokens separated by characters in + the character string DELIM. + If STRING is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = mbstok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbssep(). */ +_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr) + _GL_ARG_NONNULL ((2, 3)); +#endif + +/* Map any int, typically from errno, into an error message. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strerror +# define strerror rpl_strerror +# endif +_GL_FUNCDECL_RPL (strerror, char *, (int)); +_GL_CXXALIAS_RPL (strerror, char *, (int)); +# else +_GL_CXXALIAS_SYS (strerror, char *, (int)); +# endif +_GL_CXXALIASWARN (strerror); +#elif defined GNULIB_POSIXCHECK +# undef strerror +/* Assume strerror is always declared. */ +_GL_WARN_ON_USE (strerror, "strerror is unportable - " + "use gnulib module strerror to guarantee non-NULL result"); +#endif + +/* Map any int, typically from errno, into an error message. Multithread-safe. + Uses the POSIX declaration, not the glibc declaration. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strerror_r +# define strerror_r rpl_strerror_r +# endif +_GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); +# else +# if !1 +_GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); +# endif +# if 1 +_GL_CXXALIASWARN (strerror_r); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strerror_r +# if HAVE_RAW_DECL_STRERROR_R +_GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " + "use gnulib module strerror_r-posix for portability"); +# endif +#endif + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strsignal rpl_strsignal +# endif +_GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); +_GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); +# endif +/* Need to cast, because on Cygwin 1.5.x systems, the return type is + 'const char *'. */ +_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); +# endif +_GL_CXXALIASWARN (strsignal); +#elif defined GNULIB_POSIXCHECK +# undef strsignal +# if HAVE_RAW_DECL_STRSIGNAL +_GL_WARN_ON_USE (strsignal, "strsignal is unportable - " + "use gnulib module strsignal for portability"); +# endif +#endif + +#if 1 +# if !1 +_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); +_GL_CXXALIASWARN (strverscmp); +#elif defined GNULIB_POSIXCHECK +# undef strverscmp +# if HAVE_RAW_DECL_STRVERSCMP +_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " + "use gnulib module strverscmp for portability"); +# endif +#endif + + +#endif /* _GL_STRING_H */ +#endif /* _GL_STRING_H */ +#endif diff --git a/devspec.en_US/project/recutils/lib/string.in.h b/devspec.en_US/project/recutils/lib/string.in.h new file mode 100755 index 0000000..4a9292f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/string.in.h @@ -0,0 +1,1063 @@ +/* A GNU-like <string.h>. + + Copyright (C) 1995-1996, 2001-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if defined _GL_ALREADY_INCLUDING_STRING_H +/* Special invocation convention: + - On OS X/NetBSD we have a sequence of nested includes + <string.h> -> <strings.h> -> "string.h" + In this situation system _chk variants due to -D_FORTIFY_SOURCE + might be used after any replacements defined here. */ + +#@INCLUDE_NEXT@ @NEXT_STRING_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_STRING_H + +#define _GL_ALREADY_INCLUDING_STRING_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STRING_H@ + +#undef _GL_ALREADY_INCLUDING_STRING_H + +#ifndef _@GUARD_PREFIX@_STRING_H +#define _@GUARD_PREFIX@_STRING_H + +/* NetBSD 5.0 mis-defines NULL. */ +#include <stddef.h> + +/* MirBSD defines mbslen as a macro. */ +#if @GNULIB_MBSLEN@ && defined __MirBSD__ +# include <wchar.h> +#endif + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE /* empty */ +#endif + +/* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>. */ +/* But in any case avoid namespace pollution on glibc systems. */ +#if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ + && ! defined __GLIBC__ +# include <unistd.h> +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + + +/* Clear a block of memory. The compiler will not delete a call to + this function, even if the block is dead after the call. */ +#if @GNULIB_EXPLICIT_BZERO@ +# if ! @HAVE_EXPLICIT_BZERO@ +_GL_FUNCDECL_SYS (explicit_bzero, void, + (void *__dest, size_t __n) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n)); +_GL_CXXALIASWARN (explicit_bzero); +#elif defined GNULIB_POSIXCHECK +# undef explicit_bzero +# if HAVE_RAW_DECL_EXPLICIT_BZERO +_GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - " + "use gnulib module explicit_bzero for portability"); +# endif +#endif + +/* Find the index of the least-significant set bit. */ +#if @GNULIB_FFSL@ +# if !@HAVE_FFSL@ +_GL_FUNCDECL_SYS (ffsl, int, (long int i)); +# endif +_GL_CXXALIAS_SYS (ffsl, int, (long int i)); +_GL_CXXALIASWARN (ffsl); +#elif defined GNULIB_POSIXCHECK +# undef ffsl +# if HAVE_RAW_DECL_FFSL +_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); +# endif +#endif + + +/* Find the index of the least-significant set bit. */ +#if @GNULIB_FFSLL@ +# if !@HAVE_FFSLL@ +_GL_FUNCDECL_SYS (ffsll, int, (long long int i)); +# endif +_GL_CXXALIAS_SYS (ffsll, int, (long long int i)); +_GL_CXXALIASWARN (ffsll); +#elif defined GNULIB_POSIXCHECK +# undef ffsll +# if HAVE_RAW_DECL_FFSLL +_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); +# endif +#endif + + +/* Return the first instance of C within N bytes of S, or NULL. */ +#if @GNULIB_MEMCHR@ +# if @REPLACE_MEMCHR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define memchr rpl_memchr +# endif +_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); +# else +# if ! @HAVE_MEMCHR@ +_GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C" { const void * std::memchr (const void *, int, size_t); } + extern "C++" { void * std::memchr (void *, int, size_t); } */ +_GL_CXXALIAS_SYS_CAST2 (memchr, + void *, (void const *__s, int __c, size_t __n), + void const *, (void const *__s, int __c, size_t __n)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n)); +_GL_CXXALIASWARN1 (memchr, void const *, + (void const *__s, int __c, size_t __n)); +# else +_GL_CXXALIASWARN (memchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memchr +/* Assume memchr is always declared. */ +_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " + "use gnulib module memchr for portability" ); +#endif + +/* Return the first occurrence of NEEDLE in HAYSTACK. */ +#if @GNULIB_MEMMEM@ +# if @REPLACE_MEMMEM@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define memmem rpl_memmem +# endif +_GL_FUNCDECL_RPL (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len)); +# else +# if ! @HAVE_DECL_MEMMEM@ +_GL_FUNCDECL_SYS (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 3))); +# endif +_GL_CXXALIAS_SYS (memmem, void *, + (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len)); +# endif +_GL_CXXALIASWARN (memmem); +#elif defined GNULIB_POSIXCHECK +# undef memmem +# if HAVE_RAW_DECL_MEMMEM +_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " + "use gnulib module memmem-simple for portability, " + "and module memmem for speed" ); +# endif +#endif + +/* Copy N bytes of SRC to DEST, return pointer to bytes after the + last written byte. */ +#if @GNULIB_MEMPCPY@ +# if ! @HAVE_MEMPCPY@ +_GL_FUNCDECL_SYS (mempcpy, void *, + (void *restrict __dest, void const *restrict __src, + size_t __n) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (mempcpy, void *, + (void *restrict __dest, void const *restrict __src, + size_t __n)); +_GL_CXXALIASWARN (mempcpy); +#elif defined GNULIB_POSIXCHECK +# undef mempcpy +# if HAVE_RAW_DECL_MEMPCPY +_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " + "use gnulib module mempcpy for portability"); +# endif +#endif + +/* Search backwards through a block for a byte (specified as an int). */ +#if @GNULIB_MEMRCHR@ +# if ! @HAVE_DECL_MEMRCHR@ +_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const void * std::memrchr (const void *, int, size_t); } + extern "C++" { void * std::memrchr (void *, int, size_t); } */ +_GL_CXXALIAS_SYS_CAST2 (memrchr, + void *, (void const *, int, size_t), + void const *, (void const *, int, size_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t)); +_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t)); +# else +_GL_CXXALIASWARN (memrchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memrchr +# if HAVE_RAW_DECL_MEMRCHR +_GL_WARN_ON_USE (memrchr, "memrchr is unportable - " + "use gnulib module memrchr for portability"); +# endif +#endif + +/* Find the first occurrence of C in S. More efficient than + memchr(S,C,N), at the expense of undefined behavior if C does not + occur within N bytes. */ +#if @GNULIB_RAWMEMCHR@ +# if ! @HAVE_RAWMEMCHR@ +_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const void * std::rawmemchr (const void *, int); } + extern "C++" { void * std::rawmemchr (void *, int); } */ +_GL_CXXALIAS_SYS_CAST2 (rawmemchr, + void *, (void const *__s, int __c_in), + void const *, (void const *__s, int __c_in)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in)); +_GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in)); +# else +_GL_CXXALIASWARN (rawmemchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef rawmemchr +# if HAVE_RAW_DECL_RAWMEMCHR +_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " + "use gnulib module rawmemchr for portability"); +# endif +#endif + +/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ +#if @GNULIB_STPCPY@ +# if ! @HAVE_STPCPY@ +_GL_FUNCDECL_SYS (stpcpy, char *, + (char *restrict __dst, char const *restrict __src) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (stpcpy, char *, + (char *restrict __dst, char const *restrict __src)); +_GL_CXXALIASWARN (stpcpy); +#elif defined GNULIB_POSIXCHECK +# undef stpcpy +# if HAVE_RAW_DECL_STPCPY +_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " + "use gnulib module stpcpy for portability"); +# endif +#endif + +/* Copy no more than N bytes of SRC to DST, returning a pointer past the + last non-NUL byte written into DST. */ +#if @GNULIB_STPNCPY@ +# if @REPLACE_STPNCPY@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef stpncpy +# define stpncpy rpl_stpncpy +# endif +_GL_FUNCDECL_RPL (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n)); +# else +# if ! @HAVE_STPNCPY@ +_GL_FUNCDECL_SYS (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (stpncpy, char *, + (char *restrict __dst, char const *restrict __src, + size_t __n)); +# endif +_GL_CXXALIASWARN (stpncpy); +#elif defined GNULIB_POSIXCHECK +# undef stpncpy +# if HAVE_RAW_DECL_STPNCPY +_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " + "use gnulib module stpncpy for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strchr +/* Assume strchr is always declared. */ +_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings " + "in some multibyte locales - " + "use mbschr if you care about internationalization"); +#endif + +/* Find the first occurrence of C in S or the final NUL byte. */ +#if @GNULIB_STRCHRNUL@ +# if @REPLACE_STRCHRNUL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strchrnul rpl_strchrnul +# endif +_GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strchrnul, char *, + (const char *str, int ch)); +# else +# if ! @HAVE_STRCHRNUL@ +_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * std::strchrnul (const char *, int); } + extern "C++" { char * std::strchrnul (char *, int); } */ +_GL_CXXALIAS_SYS_CAST2 (strchrnul, + char *, (char const *__s, int __c_in), + char const *, (char const *__s, int __c_in)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in)); +_GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in)); +# else +_GL_CXXALIASWARN (strchrnul); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strchrnul +# if HAVE_RAW_DECL_STRCHRNUL +_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " + "use gnulib module strchrnul for portability"); +# endif +#endif + +/* Duplicate S, returning an identical malloc'd string. */ +#if @GNULIB_STRDUP@ +# if @REPLACE_STRDUP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strdup +# define strdup rpl_strdup +# endif +_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); +# else +# if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup + /* strdup exists as a function and as a macro. Get rid of the macro. */ +# undef strdup +# endif +# if !(@HAVE_DECL_STRDUP@ || defined strdup) +_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); +# endif +_GL_CXXALIASWARN (strdup); +#elif defined GNULIB_POSIXCHECK +# undef strdup +# if HAVE_RAW_DECL_STRDUP +_GL_WARN_ON_USE (strdup, "strdup is unportable - " + "use gnulib module strdup for portability"); +# endif +#endif + +/* Append no more than N characters from SRC onto DEST. */ +#if @GNULIB_STRNCAT@ +# if @REPLACE_STRNCAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strncat +# define strncat rpl_strncat +# endif +_GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n)); +# else +_GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n)); +# endif +_GL_CXXALIASWARN (strncat); +#elif defined GNULIB_POSIXCHECK +# undef strncat +# if HAVE_RAW_DECL_STRNCAT +_GL_WARN_ON_USE (strncat, "strncat is unportable - " + "use gnulib module strncat for portability"); +# endif +#endif + +/* Return a newly allocated copy of at most N bytes of STRING. */ +#if @GNULIB_STRNDUP@ +# if @REPLACE_STRNDUP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strndup +# define strndup rpl_strndup +# endif +_GL_FUNCDECL_RPL (strndup, char *, (char const *__s, size_t __n) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n)); +# else +# if ! @HAVE_DECL_STRNDUP@ +_GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n)); +# endif +_GL_CXXALIASWARN (strndup); +#elif defined GNULIB_POSIXCHECK +# undef strndup +# if HAVE_RAW_DECL_STRNDUP +_GL_WARN_ON_USE (strndup, "strndup is unportable - " + "use gnulib module strndup for portability"); +# endif +#endif + +/* Find the length (number of bytes) of STRING, but scan at most + MAXLEN bytes. If no '\0' terminator is found in that many bytes, + return MAXLEN. */ +#if @GNULIB_STRNLEN@ +# if @REPLACE_STRNLEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strnlen +# define strnlen rpl_strnlen +# endif +_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen)); +# else +# if ! @HAVE_DECL_STRNLEN@ +_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen)); +# endif +_GL_CXXALIASWARN (strnlen); +#elif defined GNULIB_POSIXCHECK +# undef strnlen +# if HAVE_RAW_DECL_STRNLEN +_GL_WARN_ON_USE (strnlen, "strnlen is unportable - " + "use gnulib module strnlen for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strcspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strcspn +/* Assume strcspn is always declared. */ +_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " + "in multibyte locales - " + "use mbscspn if you care about internationalization"); +#endif + +/* Find the first occurrence in S of any character in ACCEPT. */ +#if @GNULIB_STRPBRK@ +# if ! @HAVE_STRPBRK@ +_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C" { const char * strpbrk (const char *, const char *); } + extern "C++" { char * strpbrk (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strpbrk, + char *, (char const *__s, char const *__accept), + const char *, (char const *__s, char const *__accept)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept)); +_GL_CXXALIASWARN1 (strpbrk, char const *, + (char const *__s, char const *__accept)); +# else +_GL_CXXALIASWARN (strpbrk); +# endif +# if defined GNULIB_POSIXCHECK +/* strpbrk() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strpbrk +_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings " + "in multibyte locales - " + "use mbspbrk if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strpbrk +# if HAVE_RAW_DECL_STRPBRK +_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - " + "use gnulib module strpbrk for portability"); +# endif +#endif + +#if defined GNULIB_POSIXCHECK +/* strspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it cannot work with multibyte strings. */ +# undef strspn +/* Assume strspn is always declared. */ +_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " + "in multibyte locales - " + "use mbsspn if you care about internationalization"); +#endif + +#if defined GNULIB_POSIXCHECK +/* strrchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strrchr +/* Assume strrchr is always declared. */ +_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings " + "in some multibyte locales - " + "use mbsrchr if you care about internationalization"); +#endif + +/* Search the next delimiter (char listed in DELIM) starting at *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP + to point to the next char after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of strtok() that is multithread-safe and supports + empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strtok_r(). */ +#if @GNULIB_STRSEP@ +# if ! @HAVE_STRSEP@ +_GL_FUNCDECL_SYS (strsep, char *, + (char **restrict __stringp, char const *restrict __delim) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (strsep, char *, + (char **restrict __stringp, char const *restrict __delim)); +_GL_CXXALIASWARN (strsep); +# if defined GNULIB_POSIXCHECK +# undef strsep +_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " + "in multibyte locales - " + "use mbssep if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strsep +# if HAVE_RAW_DECL_STRSEP +_GL_WARN_ON_USE (strsep, "strsep is unportable - " + "use gnulib module strsep for portability"); +# endif +#endif + +#if @GNULIB_STRSTR@ +# if @REPLACE_STRSTR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strstr rpl_strstr +# endif +_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); +# else + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * strstr (const char *, const char *); } + extern "C++" { char * strstr (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strstr, + char *, (const char *haystack, const char *needle), + const char *, (const char *haystack, const char *needle)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle)); +_GL_CXXALIASWARN1 (strstr, const char *, + (const char *haystack, const char *needle)); +# else +_GL_CXXALIASWARN (strstr); +# endif +#elif defined GNULIB_POSIXCHECK +/* strstr() does not work with multibyte strings if the locale encoding is + different from UTF-8: + POSIX says that it operates on "strings", and "string" in POSIX is defined + as a sequence of bytes, not of characters. */ +# undef strstr +/* Assume strstr is always declared. */ +_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " + "work correctly on character strings in most " + "multibyte locales - " + "use mbsstr if you care about internationalization, " + "or use strstr if you care about speed"); +#endif + +/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive + comparison. */ +#if @GNULIB_STRCASESTR@ +# if @REPLACE_STRCASESTR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strcasestr rpl_strcasestr +# endif +_GL_FUNCDECL_RPL (strcasestr, char *, + (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (strcasestr, char *, + (const char *haystack, const char *needle)); +# else +# if ! @HAVE_STRCASESTR@ +_GL_FUNCDECL_SYS (strcasestr, char *, + (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { const char * strcasestr (const char *, const char *); } + extern "C++" { char * strcasestr (char *, const char *); } */ +_GL_CXXALIAS_SYS_CAST2 (strcasestr, + char *, (const char *haystack, const char *needle), + const char *, (const char *haystack, const char *needle)); +# endif +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle)); +_GL_CXXALIASWARN1 (strcasestr, const char *, + (const char *haystack, const char *needle)); +# else +_GL_CXXALIASWARN (strcasestr); +# endif +#elif defined GNULIB_POSIXCHECK +/* strcasestr() does not work with multibyte strings: + It is a glibc extension, and glibc implements it only for unibyte + locales. */ +# undef strcasestr +# if HAVE_RAW_DECL_STRCASESTR +_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " + "strings in multibyte locales - " + "use mbscasestr if you care about " + "internationalization, or use c-strcasestr if you want " + "a locale independent function"); +# endif +#endif + +/* Parse S into tokens separated by characters in DELIM. + If S is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = strtok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + This is a variant of strtok() that is multithread-safe. + + For the POSIX documentation for this function, see: + http://www.opengroup.org/susv3xsh/strtok.html + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strsep(). */ +#if @GNULIB_STRTOK_R@ +# if @REPLACE_STRTOK_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strtok_r +# define strtok_r rpl_strtok_r +# endif +_GL_FUNCDECL_RPL (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr) + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr)); +# else +# if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK +# undef strtok_r +# endif +# if ! @HAVE_DECL_STRTOK_R@ +_GL_FUNCDECL_SYS (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr) + _GL_ARG_NONNULL ((2, 3))); +# endif +_GL_CXXALIAS_SYS (strtok_r, char *, + (char *restrict s, char const *restrict delim, + char **restrict save_ptr)); +# endif +_GL_CXXALIASWARN (strtok_r); +# if defined GNULIB_POSIXCHECK +_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " + "strings in multibyte locales - " + "use mbstok_r if you care about internationalization"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtok_r +# if HAVE_RAW_DECL_STRTOK_R +_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " + "use gnulib module strtok_r for portability"); +# endif +#endif + + +/* The following functions are not specified by POSIX. They are gnulib + extensions. */ + +#if @GNULIB_MBSLEN@ +/* Return the number of multibyte characters in the character string STRING. + This considers multibyte characters, unlike strlen, which counts bytes. */ +# ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ +# undef mbslen +# endif +# if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbslen rpl_mbslen +# endif +_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); +# else +_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); +# endif +_GL_CXXALIASWARN (mbslen); +#endif + +#if @GNULIB_MBSNLEN@ +/* Return the number of multibyte characters in the character string starting + at STRING and ending at STRING + LEN. */ +_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1)); +#endif + +#if @GNULIB_MBSCHR@ +/* Locate the first single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# if defined __hpux +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbschr rpl_mbschr /* avoid collision with HP-UX function */ +# endif +_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); +# else +_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); +# endif +_GL_CXXALIASWARN (mbschr); +#endif + +#if @GNULIB_MBSRCHR@ +/* Locate the last single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strrchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# if defined __hpux || defined __INTERIX +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbsrchr rpl_mbsrchr /* avoid collision with system function */ +# endif +_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); +# else +_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); +# endif +_GL_CXXALIASWARN (mbsrchr); +#endif + +#if @GNULIB_MBSSTR@ +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. + Unlike strstr(), this function works correctly in multibyte locales with + encodings different from UTF-8. */ +_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSCASECMP@ +/* Compare the character strings S1 and S2, ignoring case, returning less than, + equal to or greater than zero if S1 is lexicographically less than, equal to + or greater than S2. + Note: This function may, in multibyte locales, return 0 for strings of + different lengths! + Unlike strcasecmp(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSNCASECMP@ +/* Compare the initial segment of the character string S1 consisting of at most + N characters with the initial segment of the character string S2 consisting + of at most N characters, ignoring case, returning less than, equal to or + greater than zero if the initial segment of S1 is lexicographically less + than, equal to or greater than the initial segment of S2. + Note: This function may, in multibyte locales, return 0 for initial segments + of different lengths! + Unlike strncasecmp(), this function works correctly in multibyte locales. + But beware that N is not a byte count but a character count! */ +_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSPCASECMP@ +/* Compare the initial segment of the character string STRING consisting of + at most mbslen (PREFIX) characters with the character string PREFIX, + ignoring case. If the two match, return a pointer to the first byte + after this prefix in STRING. Otherwise, return NULL. + Note: This function may, in multibyte locales, return non-NULL if STRING + is of smaller length than PREFIX! + Unlike strncasecmp(), this function works correctly in multibyte + locales. */ +_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSCASESTR@ +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK, using case-insensitive comparison. + Note: This function may, in multibyte locales, return success even if + strlen (haystack) < strlen (needle) ! + Unlike strcasestr(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSCSPN@ +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strcspn(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSPBRK@ +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the pointer to it, or NULL if none + exists. + Unlike strpbrk(), this function works correctly in multibyte locales. */ +# if defined __hpux +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ +# endif +_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); +# else +_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); +# endif +_GL_CXXALIASWARN (mbspbrk); +#endif + +#if @GNULIB_MBSSPN@ +/* Find the first occurrence in the character string STRING of any character + not in the character string REJECT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strspn(), this function works correctly in multibyte locales. */ +_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSSEP@ +/* Search the next delimiter (multibyte character listed in the character + string DELIM) starting at the character string *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP to point + to the next multibyte character after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of mbstok_r() that supports empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbstok_r(). */ +_GL_EXTERN_C char * mbssep (char **stringp, const char *delim) + _GL_ARG_NONNULL ((1, 2)); +#endif + +#if @GNULIB_MBSTOK_R@ +/* Parse the character string STRING into tokens separated by characters in + the character string DELIM. + If STRING is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = mbstok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbssep(). */ +_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr) + _GL_ARG_NONNULL ((2, 3)); +#endif + +/* Map any int, typically from errno, into an error message. */ +#if @GNULIB_STRERROR@ +# if @REPLACE_STRERROR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strerror +# define strerror rpl_strerror +# endif +_GL_FUNCDECL_RPL (strerror, char *, (int)); +_GL_CXXALIAS_RPL (strerror, char *, (int)); +# else +_GL_CXXALIAS_SYS (strerror, char *, (int)); +# endif +_GL_CXXALIASWARN (strerror); +#elif defined GNULIB_POSIXCHECK +# undef strerror +/* Assume strerror is always declared. */ +_GL_WARN_ON_USE (strerror, "strerror is unportable - " + "use gnulib module strerror to guarantee non-NULL result"); +#endif + +/* Map any int, typically from errno, into an error message. Multithread-safe. + Uses the POSIX declaration, not the glibc declaration. */ +#if @GNULIB_STRERROR_R@ +# if @REPLACE_STRERROR_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef strerror_r +# define strerror_r rpl_strerror_r +# endif +_GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); +# else +# if !@HAVE_DECL_STRERROR_R@ +_GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); +# endif +# if @HAVE_DECL_STRERROR_R@ +_GL_CXXALIASWARN (strerror_r); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strerror_r +# if HAVE_RAW_DECL_STRERROR_R +_GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " + "use gnulib module strerror_r-posix for portability"); +# endif +#endif + +#if @GNULIB_STRSIGNAL@ +# if @REPLACE_STRSIGNAL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strsignal rpl_strsignal +# endif +_GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); +_GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); +# else +# if ! @HAVE_DECL_STRSIGNAL@ +_GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); +# endif +/* Need to cast, because on Cygwin 1.5.x systems, the return type is + 'const char *'. */ +_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); +# endif +_GL_CXXALIASWARN (strsignal); +#elif defined GNULIB_POSIXCHECK +# undef strsignal +# if HAVE_RAW_DECL_STRSIGNAL +_GL_WARN_ON_USE (strsignal, "strsignal is unportable - " + "use gnulib module strsignal for portability"); +# endif +#endif + +#if @GNULIB_STRVERSCMP@ +# if !@HAVE_STRVERSCMP@ +_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) + _GL_ATTRIBUTE_PURE + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); +_GL_CXXALIASWARN (strverscmp); +#elif defined GNULIB_POSIXCHECK +# undef strverscmp +# if HAVE_RAW_DECL_STRVERSCMP +_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " + "use gnulib module strverscmp for portability"); +# endif +#endif + + +#endif /* _@GUARD_PREFIX@_STRING_H */ +#endif /* _@GUARD_PREFIX@_STRING_H */ +#endif diff --git a/devspec.en_US/project/recutils/lib/strings.h b/devspec.en_US/project/recutils/lib/strings.h new file mode 100755 index 0000000..171e6f3 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/strings.h @@ -0,0 +1,596 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A substitute <strings.h>. + + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_STRINGS_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* Minix 3.1.8 has a bug: <sys/types.h> must be included before <strings.h>. + But avoid namespace pollution on glibc systems. */ +#if defined __minix && !defined __GLIBC__ +# include <sys/types.h> +#endif + +/* The include_next requires a split double-inclusion guard. */ +#if 1 +# include_next <strings.h> +#endif + +#ifndef _GL_STRINGS_H +#define _GL_STRINGS_H + +#if ! 1 +/* Get size_t. */ +# include <stddef.h> +#endif + + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + + /* Find the index of the least-significant set bit. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (ffs, int, (int i)); +# endif +_GL_CXXALIAS_SYS (ffs, int, (int i)); +_GL_CXXALIASWARN (ffs); +#elif defined GNULIB_POSIXCHECK +# undef ffs +# if HAVE_RAW_DECL_FFS +_GL_WARN_ON_USE (ffs, "ffs is not portable - use the ffs module"); +# endif +#endif + +/* Compare strings S1 and S2, ignoring case, returning less than, equal to or + greater than zero if S1 is lexicographically less than, equal to or greater + than S2. + Note: This function does not work in multibyte locales. */ +#if ! 1 +extern int strcasecmp (char const *s1, char const *s2) + _GL_ARG_NONNULL ((1, 2)); +#endif +#if defined GNULIB_POSIXCHECK +/* strcasecmp() does not work with multibyte strings: + POSIX says that it operates on "strings", and "string" in POSIX is defined + as a sequence of bytes, not of characters. */ +# undef strcasecmp +# if HAVE_RAW_DECL_STRCASECMP +_GL_WARN_ON_USE (strcasecmp, "strcasecmp cannot work correctly on character " + "strings in multibyte locales - " + "use mbscasecmp if you care about " + "internationalization, or use c_strcasecmp , " + "gnulib module c-strcase) if you want a locale " + "independent function"); +# endif +#endif + +/* Compare no more than N bytes of strings S1 and S2, ignoring case, + returning less than, equal to or greater than zero if S1 is + lexicographically less than, equal to or greater than S2. + Note: This function cannot work correctly in multibyte locales. */ +#if ! 1 +extern int strncasecmp (char const *s1, char const *s2, size_t n) + _GL_ARG_NONNULL ((1, 2)); +#endif +#if defined GNULIB_POSIXCHECK +/* strncasecmp() does not work with multibyte strings: + POSIX says that it operates on "strings", and "string" in POSIX is defined + as a sequence of bytes, not of characters. */ +# undef strncasecmp +# if HAVE_RAW_DECL_STRNCASECMP +_GL_WARN_ON_USE (strncasecmp, "strncasecmp cannot work correctly on character " + "strings in multibyte locales - " + "use mbsncasecmp or mbspcasecmp if you care about " + "internationalization, or use c_strncasecmp , " + "gnulib module c-strcase) if you want a locale " + "independent function"); +# endif +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_STRING_H */ +#endif /* _GL_STRING_H */ diff --git a/devspec.en_US/project/recutils/lib/strings.in.h b/devspec.en_US/project/recutils/lib/strings.in.h new file mode 100755 index 0000000..21b1a85 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/strings.in.h @@ -0,0 +1,122 @@ +/* A substitute <strings.h>. + + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _@GUARD_PREFIX@_STRINGS_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* Minix 3.1.8 has a bug: <sys/types.h> must be included before <strings.h>. + But avoid namespace pollution on glibc systems. */ +#if defined __minix && !defined __GLIBC__ +# include <sys/types.h> +#endif + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_STRINGS_H@ +# @INCLUDE_NEXT@ @NEXT_STRINGS_H@ +#endif + +#ifndef _@GUARD_PREFIX@_STRINGS_H +#define _@GUARD_PREFIX@_STRINGS_H + +#if ! @HAVE_DECL_STRNCASECMP@ +/* Get size_t. */ +# include <stddef.h> +#endif + + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +#ifdef __cplusplus +extern "C" { +#endif + + + /* Find the index of the least-significant set bit. */ +#if @GNULIB_FFS@ +# if !@HAVE_FFS@ +_GL_FUNCDECL_SYS (ffs, int, (int i)); +# endif +_GL_CXXALIAS_SYS (ffs, int, (int i)); +_GL_CXXALIASWARN (ffs); +#elif defined GNULIB_POSIXCHECK +# undef ffs +# if HAVE_RAW_DECL_FFS +_GL_WARN_ON_USE (ffs, "ffs is not portable - use the ffs module"); +# endif +#endif + +/* Compare strings S1 and S2, ignoring case, returning less than, equal to or + greater than zero if S1 is lexicographically less than, equal to or greater + than S2. + Note: This function does not work in multibyte locales. */ +#if ! @HAVE_STRCASECMP@ +extern int strcasecmp (char const *s1, char const *s2) + _GL_ARG_NONNULL ((1, 2)); +#endif +#if defined GNULIB_POSIXCHECK +/* strcasecmp() does not work with multibyte strings: + POSIX says that it operates on "strings", and "string" in POSIX is defined + as a sequence of bytes, not of characters. */ +# undef strcasecmp +# if HAVE_RAW_DECL_STRCASECMP +_GL_WARN_ON_USE (strcasecmp, "strcasecmp cannot work correctly on character " + "strings in multibyte locales - " + "use mbscasecmp if you care about " + "internationalization, or use c_strcasecmp , " + "gnulib module c-strcase) if you want a locale " + "independent function"); +# endif +#endif + +/* Compare no more than N bytes of strings S1 and S2, ignoring case, + returning less than, equal to or greater than zero if S1 is + lexicographically less than, equal to or greater than S2. + Note: This function cannot work correctly in multibyte locales. */ +#if ! @HAVE_DECL_STRNCASECMP@ +extern int strncasecmp (char const *s1, char const *s2, size_t n) + _GL_ARG_NONNULL ((1, 2)); +#endif +#if defined GNULIB_POSIXCHECK +/* strncasecmp() does not work with multibyte strings: + POSIX says that it operates on "strings", and "string" in POSIX is defined + as a sequence of bytes, not of characters. */ +# undef strncasecmp +# if HAVE_RAW_DECL_STRNCASECMP +_GL_WARN_ON_USE (strncasecmp, "strncasecmp cannot work correctly on character " + "strings in multibyte locales - " + "use mbsncasecmp or mbspcasecmp if you care about " + "internationalization, or use c_strncasecmp , " + "gnulib module c-strcase) if you want a locale " + "independent function"); +# endif +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _@GUARD_PREFIX@_STRING_H */ +#endif /* _@GUARD_PREFIX@_STRING_H */ diff --git a/devspec.en_US/project/recutils/lib/stripslash.c b/devspec.en_US/project/recutils/lib/stripslash.c new file mode 100755 index 0000000..dfc15b4 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/stripslash.c @@ -0,0 +1,45 @@ +/* stripslash.c -- remove redundant trailing slashes from a file name + + Copyright (C) 1990, 2001, 2003-2006, 2009-2019 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include "dirname.h" + +/* Remove trailing slashes from FILE. Return true if a trailing slash + was removed. This is useful when using file name completion from a + shell that adds a "/" after directory names (such as tcsh and + bash), because on symlinks to directories, several system calls + have different semantics according to whether a trailing slash is + present. */ + +bool +strip_trailing_slashes (char *file) +{ + char *base = last_component (file); + char *base_lim; + bool had_slash; + + /* last_component returns "" for file system roots, but we need to turn + "///" into "/". */ + if (! *base) + base = file; + base_lim = base + base_len (base); + had_slash = (*base_lim != '\0'); + *base_lim = '\0'; + return had_slash; +} diff --git a/devspec.en_US/project/recutils/lib/strncasecmp.c b/devspec.en_US/project/recutils/lib/strncasecmp.c new file mode 100755 index 0000000..034011c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/strncasecmp.c @@ -0,0 +1,62 @@ +/* strncasecmp.c -- case insensitive string comparator + Copyright (C) 1998-1999, 2005-2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <string.h> + +#include <ctype.h> +#include <limits.h> + +#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) + +/* Compare no more than N bytes of strings S1 and S2, ignoring case, + returning less than, equal to or greater than zero if S1 is + lexicographically less than, equal to or greater than S2. + Note: This function cannot work correctly in multibyte locales. */ + +int +strncasecmp (const char *s1, const char *s2, size_t n) +{ + register const unsigned char *p1 = (const unsigned char *) s1; + register const unsigned char *p2 = (const unsigned char *) s2; + unsigned char c1, c2; + + if (p1 == p2 || n == 0) + return 0; + + do + { + c1 = TOLOWER (*p1); + c2 = TOLOWER (*p2); + + if (--n == 0 || c1 == '\0') + break; + + ++p1; + ++p2; + } + while (c1 == c2); + + if (UCHAR_MAX <= INT_MAX) + return c1 - c2; + else + /* On machines where 'char' and 'int' are types of the same size, the + difference of two 'unsigned char' values - including the sign bit - + doesn't fit in an 'int'. */ + return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); +} diff --git a/devspec.en_US/project/recutils/lib/strsep.c b/devspec.en_US/project/recutils/lib/strsep.c new file mode 100755 index 0000000..734cd17 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/strsep.c @@ -0,0 +1,57 @@ +/* Copyright (C) 2004, 2007, 2009-2019 Free Software Foundation, Inc. + + Written by Yoann Vandoorselaere <yoann@prelude-ids.org>. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +/* Specification. */ +#include <string.h> + +char * +strsep (char **stringp, const char *delim) +{ + char *start = *stringp; + char *ptr; + + if (start == NULL) + return NULL; + + /* Optimize the case of no delimiters. */ + if (delim[0] == '\0') + { + *stringp = NULL; + return start; + } + + /* Optimize the case of one delimiter. */ + if (delim[1] == '\0') + ptr = strchr (start, delim[0]); + else + /* The general case. */ + ptr = strpbrk (start, delim); + if (ptr == NULL) + { + *stringp = NULL; + return start; + } + + *ptr = '\0'; + *stringp = ptr + 1; + + return start; +} diff --git a/devspec.en_US/project/recutils/lib/strverscmp.c b/devspec.en_US/project/recutils/lib/strverscmp.c new file mode 100755 index 0000000..bf5ce50 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/strverscmp.c @@ -0,0 +1,117 @@ +/* Compare strings while treating digits characters numerically. + Copyright (C) 1997-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jean-François Bignolles <bignolle@ecoledoc.ibp.fr>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <https://www.gnu.org/licenses/>. */ + +#if !_LIBC +# include <config.h> +#endif + +#include <string.h> +#include <ctype.h> + +/* states: S_N: normal, S_I: comparing integral part, S_F: comparing + fractional parts, S_Z: idem but with leading Zeroes only */ +#define S_N 0x0 +#define S_I 0x3 +#define S_F 0x6 +#define S_Z 0x9 + +/* result_type: CMP: return diff; LEN: compare using len_diff/diff */ +#define CMP 2 +#define LEN 3 + +#ifndef weak_alias +# define __strverscmp strverscmp +#endif + +/* Compare S1 and S2 as strings holding indices/version numbers, + returning less than, equal to or greater than zero if S1 is less than, + equal to or greater than S2 (for more info, see the texinfo doc). +*/ + +int +__strverscmp (const char *s1, const char *s2) +{ + const unsigned char *p1 = (const unsigned char *) s1; + const unsigned char *p2 = (const unsigned char *) s2; + unsigned char c1, c2; + int state; + int diff; + + /* Symbol(s) 0 [1-9] others + Transition (10) 0 (01) d (00) x */ + static const unsigned char next_state[] = + { + /* state x d 0 */ + /* S_N */ S_N, S_I, S_Z, + /* S_I */ S_N, S_I, S_I, + /* S_F */ S_N, S_F, S_F, + /* S_Z */ S_N, S_F, S_Z + }; + + static const signed char result_type[] = + { + /* state x/x x/d x/0 d/x d/d d/0 0/x 0/d 0/0 */ + + /* S_N */ CMP, CMP, CMP, CMP, LEN, CMP, CMP, CMP, CMP, + /* S_I */ CMP, -1, -1, +1, LEN, LEN, +1, LEN, LEN, + /* S_F */ CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, + /* S_Z */ CMP, +1, +1, -1, CMP, CMP, -1, CMP, CMP + }; + + if (p1 == p2) + return 0; + + c1 = *p1++; + c2 = *p2++; + /* Hint: '0' is a digit too. */ + state = S_N + ((c1 == '0') + (isdigit (c1) != 0)); + + while ((diff = c1 - c2) == 0) + { + if (c1 == '\0') + return diff; + + state = next_state[state]; + c1 = *p1++; + c2 = *p2++; + state += (c1 == '0') + (isdigit (c1) != 0); + } + + state = result_type[state * 3 + (((c2 == '0') + (isdigit (c2) != 0)))]; + + switch (state) + { + case CMP: + return diff; + + case LEN: + while (isdigit (*p1++)) + if (!isdigit (*p2++)) + return 1; + + return isdigit (*p2) ? -1 : diff; + + default: + return state; + } +} +#ifdef weak_alias +libc_hidden_def (__strverscmp) +weak_alias (__strverscmp, strverscmp) +#endif diff --git a/devspec.en_US/project/recutils/lib/sys/file.h b/devspec.en_US/project/recutils/lib/sys/file.h new file mode 100755 index 0000000..30a4d7e --- /dev/null +++ b/devspec.en_US/project/recutils/lib/sys/file.h @@ -0,0 +1,195 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Provide a more complete sys/file.h. + + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Richard W.M. Jones. */ + +#ifndef _GL_SYS_FILE_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* The include_next requires a split double-inclusion guard. */ +#if 1 +# include_next <sys/file.h> +#endif + +#ifndef _GL_SYS_FILE_H +#define _GL_SYS_FILE_H + +#ifndef LOCK_SH +/* Operations for the 'flock' call (same as Linux kernel constants). */ +# define LOCK_SH 1 /* Shared lock. */ +# define LOCK_EX 2 /* Exclusive lock. */ +# define LOCK_UN 8 /* Unlock. */ + +/* Can be OR'd in to one of the above. */ +# define LOCK_NB 4 /* Don't block when locking. */ +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +#if 1 +/* Apply or remove advisory locks on an open file. + Return 0 if successful, otherwise -1 and errno set. */ +# if !1 +extern int flock (int fd, int operation); +# endif +#elif defined GNULIB_POSIXCHECK +# undef flock +# if HAVE_RAW_DECL_FLOCK +_GL_WARN_ON_USE (flock, "flock is unportable - " + "use gnulib module flock for portability"); +# endif +#endif + + +#endif /* _GL_SYS_FILE_H */ +#endif /* _GL_SYS_FILE_H */ diff --git a/devspec.en_US/project/recutils/lib/sys/stat.h b/devspec.en_US/project/recutils/lib/sys/stat.h new file mode 100755 index 0000000..97c11e0 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/sys/stat.h @@ -0,0 +1,1290 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Provide a more complete sys/stat.h header file. + Copyright (C) 2005-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Eric Blake, Paul Eggert, and Jim Meyering. */ + +/* This file is supposed to be used on platforms where <sys/stat.h> is + incomplete. It is intended to provide definitions and prototypes + needed by an application. Start with what the system provides. */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined __need_system_sys_stat_h +/* Special invocation convention. */ + +#include_next <sys/stat.h> + +#else +/* Normal invocation convention. */ + +#ifndef _GL_SYS_STAT_H + +/* Get nlink_t. + May also define off_t to a 64-bit type on native Windows. */ +#include <sys/types.h> + +/* Get struct timespec. */ +#include <time.h> + +/* The include_next requires a split double-inclusion guard. */ +#include_next <sys/stat.h> + +#ifndef _GL_SYS_STAT_H +#define _GL_SYS_STAT_H + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* Before doing "#define mkdir rpl_mkdir" below, we need to include all + headers that may declare mkdir(). Native Windows platforms declare mkdir + in <io.h> and/or <direct.h>, not in <unistd.h>. */ +#if defined _WIN32 && ! defined __CYGWIN__ +# include <io.h> /* mingw32, mingw64 */ +# include <direct.h> /* mingw64, MSVC 9 */ +#endif + +/* Native Windows platforms declare umask() in <io.h>. */ +#if 0 && (defined _WIN32 && ! defined __CYGWIN__) +# include <io.h> +#endif + +/* Large File Support on native Windows. */ +#if 0 +# define stat _stati64 +#endif + +/* Optionally, override 'struct stat' on native Windows. */ +#if 0 + +# undef stat +# if 1 +# define stat rpl_stat +# else + /* Provoke a clear link error if stat() is used as a function and + module 'stat' is not in use. */ +# define stat stat_used_without_requesting_gnulib_module_stat +# endif + +# if !GNULIB_defined_struct_stat +struct stat +{ + dev_t st_dev; + ino_t st_ino; + mode_t st_mode; + nlink_t st_nlink; +# if 0 + uid_t st_uid; +# else /* uid_t is not defined by default on native Windows. */ + short st_uid; +# endif +# if 0 + gid_t st_gid; +# else /* gid_t is not defined by default on native Windows. */ + short st_gid; +# endif + dev_t st_rdev; + off_t st_size; +# if 0 + blksize_t st_blksize; + blkcnt_t st_blocks; +# endif + +# if 0 + struct timespec st_atim; + struct timespec st_mtim; + struct timespec st_ctim; +# else + time_t st_atime; + time_t st_mtime; + time_t st_ctime; +# endif +}; +# if 0 +# define st_atime st_atim.tv_sec +# define st_mtime st_mtim.tv_sec +# define st_ctime st_ctim.tv_sec + /* Indicator, for gnulib internal purposes. */ +# define _GL_WINDOWS_STAT_TIMESPEC 1 +# endif +# define GNULIB_defined_struct_stat 1 +# endif + +/* Other possible values of st_mode. */ +# if 0 +# define _S_IFBLK 0x6000 +# endif +# if 0 +# define _S_IFLNK 0xA000 +# endif +# if 0 +# define _S_IFSOCK 0xC000 +# endif + +#endif + +#ifndef S_IFIFO +# ifdef _S_IFIFO +# define S_IFIFO _S_IFIFO +# endif +#endif + +#ifndef S_IFMT +# define S_IFMT 0170000 +#endif + +#if STAT_MACROS_BROKEN +# undef S_ISBLK +# undef S_ISCHR +# undef S_ISDIR +# undef S_ISFIFO +# undef S_ISLNK +# undef S_ISNAM +# undef S_ISMPB +# undef S_ISMPC +# undef S_ISNWK +# undef S_ISREG +# undef S_ISSOCK +#endif + +#ifndef S_ISBLK +# ifdef S_IFBLK +# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +# else +# define S_ISBLK(m) 0 +# endif +#endif + +#ifndef S_ISCHR +# ifdef S_IFCHR +# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +# else +# define S_ISCHR(m) 0 +# endif +#endif + +#ifndef S_ISDIR +# ifdef S_IFDIR +# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +# else +# define S_ISDIR(m) 0 +# endif +#endif + +#ifndef S_ISDOOR /* Solaris 2.5 and up */ +# define S_ISDOOR(m) 0 +#endif + +#ifndef S_ISFIFO +# ifdef S_IFIFO +# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) +# else +# define S_ISFIFO(m) 0 +# endif +#endif + +#ifndef S_ISLNK +# ifdef S_IFLNK +# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +# else +# define S_ISLNK(m) 0 +# endif +#endif + +#ifndef S_ISMPB /* V7 */ +# ifdef S_IFMPB +# define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) +# define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) +# else +# define S_ISMPB(m) 0 +# define S_ISMPC(m) 0 +# endif +#endif + +#ifndef S_ISMPX /* AIX */ +# define S_ISMPX(m) 0 +#endif + +#ifndef S_ISNAM /* Xenix */ +# ifdef S_IFNAM +# define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM) +# else +# define S_ISNAM(m) 0 +# endif +#endif + +#ifndef S_ISNWK /* HP/UX */ +# ifdef S_IFNWK +# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) +# else +# define S_ISNWK(m) 0 +# endif +#endif + +#ifndef S_ISPORT /* Solaris 10 and up */ +# define S_ISPORT(m) 0 +#endif + +#ifndef S_ISREG +# ifdef S_IFREG +# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +# else +# define S_ISREG(m) 0 +# endif +#endif + +#ifndef S_ISSOCK +# ifdef S_IFSOCK +# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) +# else +# define S_ISSOCK(m) 0 +# endif +#endif + + +#ifndef S_TYPEISMQ +# define S_TYPEISMQ(p) 0 +#endif + +#ifndef S_TYPEISTMO +# define S_TYPEISTMO(p) 0 +#endif + + +#ifndef S_TYPEISSEM +# ifdef S_INSEM +# define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM) +# else +# define S_TYPEISSEM(p) 0 +# endif +#endif + +#ifndef S_TYPEISSHM +# ifdef S_INSHD +# define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD) +# else +# define S_TYPEISSHM(p) 0 +# endif +#endif + +/* high performance ("contiguous data") */ +#ifndef S_ISCTG +# define S_ISCTG(p) 0 +#endif + +/* Cray DMF (data migration facility): off line, with data */ +#ifndef S_ISOFD +# define S_ISOFD(p) 0 +#endif + +/* Cray DMF (data migration facility): off line, with no data */ +#ifndef S_ISOFL +# define S_ISOFL(p) 0 +#endif + +/* 4.4BSD whiteout */ +#ifndef S_ISWHT +# define S_ISWHT(m) 0 +#endif + +/* If any of the following are undefined, + define them to their de facto standard values. */ +#if !S_ISUID +# define S_ISUID 04000 +#endif +#if !S_ISGID +# define S_ISGID 02000 +#endif + +/* S_ISVTX is a common extension to POSIX. */ +#ifndef S_ISVTX +# define S_ISVTX 01000 +#endif + +#if !S_IRUSR && S_IREAD +# define S_IRUSR S_IREAD +#endif +#if !S_IRUSR +# define S_IRUSR 00400 +#endif +#if !S_IRGRP +# define S_IRGRP (S_IRUSR >> 3) +#endif +#if !S_IROTH +# define S_IROTH (S_IRUSR >> 6) +#endif + +#if !S_IWUSR && S_IWRITE +# define S_IWUSR S_IWRITE +#endif +#if !S_IWUSR +# define S_IWUSR 00200 +#endif +#if !S_IWGRP +# define S_IWGRP (S_IWUSR >> 3) +#endif +#if !S_IWOTH +# define S_IWOTH (S_IWUSR >> 6) +#endif + +#if !S_IXUSR && S_IEXEC +# define S_IXUSR S_IEXEC +#endif +#if !S_IXUSR +# define S_IXUSR 00100 +#endif +#if !S_IXGRP +# define S_IXGRP (S_IXUSR >> 3) +#endif +#if !S_IXOTH +# define S_IXOTH (S_IXUSR >> 6) +#endif + +#if !S_IRWXU +# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) +#endif +#if !S_IRWXG +# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) +#endif +#if !S_IRWXO +# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) +#endif + +/* S_IXUGO is a common extension to POSIX. */ +#if !S_IXUGO +# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) +#endif + +#ifndef S_IRWXUGO +# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) +#endif + +/* Macros for futimens and utimensat. */ +#ifndef UTIME_NOW +# define UTIME_NOW (-1) +# define UTIME_OMIT (-2) +#endif + + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (fchmodat, int, + (int fd, char const *file, mode_t mode, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (fchmodat, int, + (int fd, char const *file, mode_t mode, int flag)); +_GL_CXXALIASWARN (fchmodat); +#elif defined GNULIB_POSIXCHECK +# undef fchmodat +# if HAVE_RAW_DECL_FCHMODAT +_GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fstat +# define fstat rpl_fstat +# endif +_GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf)); +# else +_GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf)); +# endif +_GL_CXXALIASWARN (fstat); +#elif 0 +# undef fstat +# define fstat fstat_used_without_requesting_gnulib_module_fstat +#elif 0 +/* Above, we define stat to _stati64. */ +# define fstat _fstati64 +#elif defined GNULIB_POSIXCHECK +# undef fstat +# if HAVE_RAW_DECL_FSTAT +_GL_WARN_ON_USE (fstat, "fstat has portability problems - " + "use gnulib module fstat for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fstatat +# define fstatat rpl_fstatat +# endif +_GL_FUNCDECL_RPL (fstatat, int, + (int fd, char const *name, struct stat *st, int flags) + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (fstatat, int, + (int fd, char const *name, struct stat *st, int flags)); +# else +# if !1 +_GL_FUNCDECL_SYS (fstatat, int, + (int fd, char const *name, struct stat *st, int flags) + _GL_ARG_NONNULL ((2, 3))); +# endif +_GL_CXXALIAS_SYS (fstatat, int, + (int fd, char const *name, struct stat *st, int flags)); +# endif +_GL_CXXALIASWARN (fstatat); +#elif 0 +# undef fstatat +# define fstatat fstatat_used_without_requesting_gnulib_module_fstatat +#elif defined GNULIB_POSIXCHECK +# undef fstatat +# if HAVE_RAW_DECL_FSTATAT +_GL_WARN_ON_USE (fstatat, "fstatat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if 0 +/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens + implementation relies on futimesat, which on Solaris 10 makes an invocation + to futimens that is meant to invoke the libc's futimens(), not gnulib's + futimens(). */ +# if 0 || (!1 && defined __sun) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef futimens +# define futimens rpl_futimens +# endif +_GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2])); +_GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2])); +# else +# if !1 +_GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2])); +# endif +_GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2])); +# endif +# if 1 +_GL_CXXALIASWARN (futimens); +# endif +#elif defined GNULIB_POSIXCHECK +# undef futimens +# if HAVE_RAW_DECL_FUTIMENS +_GL_WARN_ON_USE (futimens, "futimens is not portable - " + "use gnulib module futimens for portability"); +# endif +#endif + + +#if 0 +/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME + denotes a symbolic link. */ +# if !1 +/* The lchmod replacement follows symbolic links. Callers should take + this into account; lchmod should be applied only to arguments that + are known to not be symbolic links. On hosts that lack lchmod, + this can lead to race conditions between the check and the + invocation of lchmod, but we know of no workarounds that are + reliable in general. You might try requesting support for lchmod + from your operating system supplier. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define lchmod chmod +# endif +/* Need to cast, because on mingw, the second parameter of chmod is + int mode. */ +_GL_CXXALIAS_RPL_CAST_1 (lchmod, chmod, int, + (const char *filename, mode_t mode)); +# else +# if 0 /* assume already declared */ +_GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode)); +# endif +# if 1 +_GL_CXXALIASWARN (lchmod); +# endif +#elif defined GNULIB_POSIXCHECK +# undef lchmod +# if HAVE_RAW_DECL_LCHMOD +_GL_WARN_ON_USE (lchmod, "lchmod is unportable - " + "use gnulib module lchmod for portability"); +# endif +#endif + + +#if 1 +# if ! 1 +/* mingw does not support symlinks, therefore it does not have lstat. But + without links, stat does just fine. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define lstat stat +# endif +_GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *name, struct stat *buf)); +# elif 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef lstat +# define lstat rpl_lstat +# endif +_GL_FUNCDECL_RPL (lstat, int, (const char *name, struct stat *buf) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (lstat, int, (const char *name, struct stat *buf)); +# else +_GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf)); +# endif +# if 1 +_GL_CXXALIASWARN (lstat); +# endif +#elif 0 +# undef lstat +# define lstat lstat_used_without_requesting_gnulib_module_lstat +#elif defined GNULIB_POSIXCHECK +# undef lstat +# if HAVE_RAW_DECL_LSTAT +_GL_WARN_ON_USE (lstat, "lstat is unportable - " + "use gnulib module lstat for portability"); +# endif +#endif + + +#if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mkdir +# define mkdir rpl_mkdir +# endif +_GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); +#else +/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. + Additionally, it declares _mkdir (and depending on compile flags, an + alias mkdir), only in the nonstandard includes <direct.h> and <io.h>, + which are included above. */ +# if defined _WIN32 && ! defined __CYGWIN__ + +# if !GNULIB_defined_rpl_mkdir +static int +rpl_mkdir (char const *name, mode_t mode) +{ + return _mkdir (name); +} +# define GNULIB_defined_rpl_mkdir 1 +# endif + +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mkdir rpl_mkdir +# endif +_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); +# else +_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); +# endif +#endif +_GL_CXXALIASWARN (mkdir); + + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)); +_GL_CXXALIASWARN (mkdirat); +#elif defined GNULIB_POSIXCHECK +# undef mkdirat +# if HAVE_RAW_DECL_MKDIRAT +_GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mkfifo +# define mkfifo rpl_mkfifo +# endif +_GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode)); +# else +# if !1 +_GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode)); +# endif +_GL_CXXALIASWARN (mkfifo); +#elif defined GNULIB_POSIXCHECK +# undef mkfifo +# if HAVE_RAW_DECL_MKFIFO +_GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - " + "use gnulib module mkfifo for portability"); +# endif +#endif + + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)); +_GL_CXXALIASWARN (mkfifoat); +#elif defined GNULIB_POSIXCHECK +# undef mkfifoat +# if HAVE_RAW_DECL_MKFIFOAT +_GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - " + "use gnulib module mkfifoat for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mknod +# define mknod rpl_mknod +# endif +_GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)); +# else +# if !1 +_GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on OSF/1 5.1, the third parameter is '...'. */ +_GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev)); +# endif +_GL_CXXALIASWARN (mknod); +#elif defined GNULIB_POSIXCHECK +# undef mknod +# if HAVE_RAW_DECL_MKNOD +_GL_WARN_ON_USE (mknod, "mknod is not portable - " + "use gnulib module mknod for portability"); +# endif +#endif + + +#if 0 +# if !1 +_GL_FUNCDECL_SYS (mknodat, int, + (int fd, char const *file, mode_t mode, dev_t dev) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mknodat, int, + (int fd, char const *file, mode_t mode, dev_t dev)); +_GL_CXXALIASWARN (mknodat); +#elif defined GNULIB_POSIXCHECK +# undef mknodat +# if HAVE_RAW_DECL_MKNODAT +_GL_WARN_ON_USE (mknodat, "mknodat is not portable - " + "use gnulib module mkfifoat for portability"); +# endif +#endif + + +#if 1 +# if 0 +# if !0 + /* We can't use the object-like #define stat rpl_stat, because of + struct stat. This means that rpl_stat will not be used if the user + does (stat)(a,b). Oh well. */ +# if defined _AIX && defined stat && defined _LARGE_FILES + /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, + so we have to replace stat64() instead of stat(). */ +# undef stat64 +# define stat64(name, st) rpl_stat (name, st) +# elif 0 + /* Above, we define stat to _stati64. */ +# if defined __MINGW32__ && defined _stati64 +# ifndef _USE_32BIT_TIME_T + /* The system headers define _stati64 to _stat64. */ +# undef _stat64 +# define _stat64(name, st) rpl_stat (name, st) +# endif +# elif defined _MSC_VER && defined _stati64 +# ifdef _USE_32BIT_TIME_T + /* The system headers define _stati64 to _stat32i64. */ +# undef _stat32i64 +# define _stat32i64(name, st) rpl_stat (name, st) +# else + /* The system headers define _stati64 to _stat64. */ +# undef _stat64 +# define _stat64(name, st) rpl_stat (name, st) +# endif +# else +# undef _stati64 +# define _stati64(name, st) rpl_stat (name, st) +# endif +# elif defined __MINGW32__ && defined stat +# ifdef _USE_32BIT_TIME_T + /* The system headers define stat to _stat32i64. */ +# undef _stat32i64 +# define _stat32i64(name, st) rpl_stat (name, st) +# else + /* The system headers define stat to _stat64. */ +# undef _stat64 +# define _stat64(name, st) rpl_stat (name, st) +# endif +# elif defined _MSC_VER && defined stat +# ifdef _USE_32BIT_TIME_T + /* The system headers define stat to _stat32. */ +# undef _stat32 +# define _stat32(name, st) rpl_stat (name, st) +# else + /* The system headers define stat to _stat64i32. */ +# undef _stat64i32 +# define _stat64i32(name, st) rpl_stat (name, st) +# endif +# else /* !(_AIX || __MINGW32__ || _MSC_VER) */ +# undef stat +# define stat(name, st) rpl_stat (name, st) +# endif /* !_LARGE_FILES */ +# endif /* !0 */ +_GL_EXTERN_C int stat (const char *name, struct stat *buf) + _GL_ARG_NONNULL ((1, 2)); +# endif +#elif 0 +/* see above: + #define stat stat_used_without_requesting_gnulib_module_stat + */ +#elif defined GNULIB_POSIXCHECK +# undef stat +# if HAVE_RAW_DECL_STAT +_GL_WARN_ON_USE (stat, "stat is unportable - " + "use gnulib module stat for portability"); +# endif +#endif + + +#if 0 +/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat + implementation relies on futimesat, which on Solaris 10 makes an invocation + to utimensat that is meant to invoke the libc's utimensat(), not gnulib's + utimensat(). */ +# if 0 || (!1 && defined __sun) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef utimensat +# define utimensat rpl_utimensat +# endif +_GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name, + struct timespec const times[2], int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name, + struct timespec const times[2], int flag)); +# else +# if !1 +_GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name, + struct timespec const times[2], int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name, + struct timespec const times[2], int flag)); +# endif +# if 1 +_GL_CXXALIASWARN (utimensat); +# endif +#elif defined GNULIB_POSIXCHECK +# undef utimensat +# if HAVE_RAW_DECL_UTIMENSAT +_GL_WARN_ON_USE (utimensat, "utimensat is not portable - " + "use gnulib module utimensat for portability"); +# endif +#endif + + +#endif /* _GL_SYS_STAT_H */ +#endif /* _GL_SYS_STAT_H */ +#endif diff --git a/devspec.en_US/project/recutils/lib/sys/time.h b/devspec.en_US/project/recutils/lib/sys/time.h new file mode 100755 index 0000000..01dfd12 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/sys/time.h @@ -0,0 +1,694 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Provide a more complete sys/time.h. + + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert. */ + +#ifndef _GL_SYS_TIME_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* On Cygwin and on many BSDish systems, <sys/time.h> includes itself + recursively via <sys/select.h>. + Simply delegate to the system's header in this case; it is a no-op. + Without this extra ifdef, the C++ gettimeofday declaration below + would be a forward declaration in gnulib's nested <sys/time.h>. */ +#if defined _CYGWIN_SYS_TIME_H || defined _SYS_TIME_H || defined _SYS_TIME_H_ +# include_next <sys/time.h> +#else + +/* The include_next requires a split double-inclusion guard. */ +#if 1 +# include_next <sys/time.h> +#endif + +#ifndef _GL_SYS_TIME_H +#define _GL_SYS_TIME_H + +#if ! 1 +# include <time.h> +#endif + +/* On native Windows with MSVC, get the 'struct timeval' type. + Also, on native Windows with a 64-bit time_t, where we are overriding the + 'struct timeval' type, get all declarations of system functions whose + signature contains 'struct timeval'. */ +#if (defined _MSC_VER || 0) && 0 && !defined _GL_INCLUDING_WINSOCK2_H +# define _GL_INCLUDING_WINSOCK2_H +# include <winsock2.h> +# undef _GL_INCLUDING_WINSOCK2_H +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if !1 || 0 + +# if 0 +# define timeval rpl_timeval +# endif + +# if !GNULIB_defined_struct_timeval +struct timeval +{ + time_t tv_sec; + long int tv_usec; +}; +# define GNULIB_defined_struct_timeval 1 +# endif + +#endif + +#ifdef __cplusplus +} +#endif + +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gettimeofday +# define gettimeofday rpl_gettimeofday +# endif +_GL_FUNCDECL_RPL (gettimeofday, int, + (struct timeval *restrict, void *restrict) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (gettimeofday, int, + (struct timeval *restrict, void *restrict)); +# else +# if !1 +_GL_FUNCDECL_SYS (gettimeofday, int, + (struct timeval *restrict, void *restrict) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on glibc systems, by default, the second argument is + struct timezone *. */ +_GL_CXXALIAS_SYS_CAST (gettimeofday, int, + (struct timeval *restrict, void *restrict)); +# endif +_GL_CXXALIASWARN (gettimeofday); +# if defined __cplusplus && defined GNULIB_NAMESPACE +namespace GNULIB_NAMESPACE { + typedef ::timeval +#undef timeval + timeval; +} +# endif +#elif defined GNULIB_POSIXCHECK +# undef gettimeofday +# if HAVE_RAW_DECL_GETTIMEOFDAY +_GL_WARN_ON_USE (gettimeofday, "gettimeofday is unportable - " + "use gnulib module gettimeofday for portability"); +# endif +#endif + +/* Hide some function declarations from <winsock2.h>. */ + +#if defined _MSC_VER && 0 +# if !defined _GL_UNISTD_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef close +# define close close_used_without_including_unistd_h +# else + _GL_WARN_ON_USE (close, + "close() used without including <unistd.h>"); +# endif +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gethostname +# define gethostname gethostname_used_without_including_unistd_h +# else + _GL_WARN_ON_USE (gethostname, + "gethostname() used without including <unistd.h>"); +# endif +# endif +# if !defined _GL_SYS_SOCKET_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef socket +# define socket socket_used_without_including_sys_socket_h +# undef connect +# define connect connect_used_without_including_sys_socket_h +# undef accept +# define accept accept_used_without_including_sys_socket_h +# undef bind +# define bind bind_used_without_including_sys_socket_h +# undef getpeername +# define getpeername getpeername_used_without_including_sys_socket_h +# undef getsockname +# define getsockname getsockname_used_without_including_sys_socket_h +# undef getsockopt +# define getsockopt getsockopt_used_without_including_sys_socket_h +# undef listen +# define listen listen_used_without_including_sys_socket_h +# undef recv +# define recv recv_used_without_including_sys_socket_h +# undef send +# define send send_used_without_including_sys_socket_h +# undef recvfrom +# define recvfrom recvfrom_used_without_including_sys_socket_h +# undef sendto +# define sendto sendto_used_without_including_sys_socket_h +# undef setsockopt +# define setsockopt setsockopt_used_without_including_sys_socket_h +# undef shutdown +# define shutdown shutdown_used_without_including_sys_socket_h +# else + _GL_WARN_ON_USE (socket, + "socket() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (connect, + "connect() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (accept, + "accept() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (bind, + "bind() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (getpeername, + "getpeername() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (getsockname, + "getsockname() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (getsockopt, + "getsockopt() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (listen, + "listen() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (recv, + "recv() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (send, + "send() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (recvfrom, + "recvfrom() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (sendto, + "sendto() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (setsockopt, + "setsockopt() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (shutdown, + "shutdown() used without including <sys/socket.h>"); +# endif +# endif +# if !defined _GL_SYS_SELECT_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef select +# define select select_used_without_including_sys_select_h +# else + _GL_WARN_ON_USE (select, + "select() used without including <sys/select.h>"); +# endif +# endif +#endif + +#endif /* _GL_SYS_TIME_H */ +#endif /* _CYGWIN_SYS_TIME_H */ +#endif /* _GL_SYS_TIME_H */ diff --git a/devspec.en_US/project/recutils/lib/sys/types.h b/devspec.en_US/project/recutils/lib/sys/types.h new file mode 100755 index 0000000..602907b --- /dev/null +++ b/devspec.en_US/project/recutils/lib/sys/types.h @@ -0,0 +1,107 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Provide a more complete sys/types.h. + + Copyright (C) 2011-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if defined _WIN32 && !defined __CYGWIN__ \ + && (defined __need_off_t || defined __need___off64_t \ + || defined __need_ssize_t || defined __need_time_t) + +/* Special invocation convention inside mingw header files. */ + +#include_next <sys/types.h> + +#else +/* Normal invocation convention. */ + +#ifndef _GL_SYS_TYPES_H + +/* The include_next requires a split double-inclusion guard. */ +# define _GL_INCLUDING_SYS_TYPES_H +#include_next <sys/types.h> +# undef _GL_INCLUDING_SYS_TYPES_H + +#ifndef _GL_SYS_TYPES_H +#define _GL_SYS_TYPES_H + +/* Override off_t if Large File Support is requested on native Windows. */ +#if 0 +/* Same as int64_t in <stdint.h>. */ +# if defined _MSC_VER +# define off_t __int64 +# else +# define off_t long long int +# endif +/* Indicator, for gnulib internal purposes. */ +# define _GL_WINDOWS_64_BIT_OFF_T 1 +#endif + +/* Override dev_t and ino_t if distinguishable inodes support is requested + on native Windows. */ +#if 0 + +# if 0 == 2 +/* Experimental, not useful in Windows 10. */ + +/* Define dev_t to a 64-bit type. */ +# if !defined GNULIB_defined_dev_t +typedef unsigned long long int rpl_dev_t; +# undef dev_t +# define dev_t rpl_dev_t +# define GNULIB_defined_dev_t 1 +# endif + +/* Define ino_t to a 128-bit type. */ +# if !defined GNULIB_defined_ino_t +/* MSVC does not have a 128-bit integer type. + GCC has a 128-bit integer type __int128, but only on 64-bit targets. */ +typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t; +# undef ino_t +# define ino_t rpl_ino_t +# define GNULIB_defined_ino_t 1 +# endif + +# else /* 0 == 1 */ + +/* Define ino_t to a 64-bit type. */ +# if !defined GNULIB_defined_ino_t +typedef unsigned long long int rpl_ino_t; +# undef ino_t +# define ino_t rpl_ino_t +# define GNULIB_defined_ino_t 1 +# endif + +# endif + +/* Indicator, for gnulib internal purposes. */ +# define _GL_WINDOWS_STAT_INODES 0 + +#endif + +/* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>. */ +/* But avoid namespace pollution on glibc systems. */ +#if (defined _WIN32 && ! defined __CYGWIN__) && ! defined __GLIBC__ +# include <stddef.h> +#endif + +#endif /* _GL_SYS_TYPES_H */ +#endif /* _GL_SYS_TYPES_H */ +#endif /* __need_XXX */ diff --git a/devspec.en_US/project/recutils/lib/sys/wait.h b/devspec.en_US/project/recutils/lib/sys/wait.h new file mode 100755 index 0000000..5dc0945 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/sys/wait.h @@ -0,0 +1,577 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A POSIX-like <sys/wait.h>. + Copyright (C) 2001-2003, 2005-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + + +#ifndef _GL_SYS_WAIT_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* The include_next requires a split double-inclusion guard. */ +#if !(defined _WIN32 && ! defined __CYGWIN__) +# include_next <sys/wait.h> +#endif + +#ifndef _GL_SYS_WAIT_H +#define _GL_SYS_WAIT_H + +/* Get pid_t. */ +#include <sys/types.h> + + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +#if !(defined _WIN32 && ! defined __CYGWIN__) +/* Unix API. */ + +/* The following macros apply to an argument x, that is a status of a process, + as returned by waitpid(). + On nearly all systems, including Linux/x86, WEXITSTATUS are bits 15..8 and + WTERMSIG are bits 7..0, while BeOS uses the opposite. Therefore programs + have to use the abstract macros. */ + +/* For valid x, exactly one of WIFSIGNALED(x), WIFEXITED(x), WIFSTOPPED(x) + is true. */ +# ifndef WIFSIGNALED +# define WIFSIGNALED(x) (WTERMSIG (x) != 0 && WTERMSIG(x) != 0x7f) +# endif +# ifndef WIFEXITED +# define WIFEXITED(x) (WTERMSIG (x) == 0) +# endif +# ifndef WIFSTOPPED +# define WIFSTOPPED(x) (WTERMSIG (x) == 0x7f) +# endif + +/* The termination signal. Only to be accessed if WIFSIGNALED(x) is true. */ +# ifndef WTERMSIG +# define WTERMSIG(x) ((x) & 0x7f) +# endif + +/* The exit status. Only to be accessed if WIFEXITED(x) is true. */ +# ifndef WEXITSTATUS +# define WEXITSTATUS(x) (((x) >> 8) & 0xff) +# endif + +/* The stopping signal. Only to be accessed if WIFSTOPPED(x) is true. */ +# ifndef WSTOPSIG +# define WSTOPSIG(x) (((x) >> 8) & 0x7f) +# endif + +/* True if the process dumped core. Not standardized by POSIX. */ +# ifndef WCOREDUMP +# define WCOREDUMP(x) ((x) & 0x80) +# endif + +#else +/* Native Windows API. */ + +# include <signal.h> /* for SIGTERM */ + +/* The following macros apply to an argument x, that is a status of a process, + as returned by waitpid() or, equivalently, _cwait() or GetExitCodeProcess(). + This value is simply an 'int', not composed of bit fields. */ + +/* When an unhandled fatal signal terminates a process, the exit code is 3. */ +# define WIFSIGNALED(x) ((x) == 3) +# define WIFEXITED(x) ((x) != 3) +# define WIFSTOPPED(x) 0 + +/* The signal that terminated a process is not known posthum. */ +# define WTERMSIG(x) SIGTERM + +# define WEXITSTATUS(x) (x) + +/* There are no stopping signals. */ +# define WSTOPSIG(x) 0 + +/* There are no core dumps. */ +# define WCOREDUMP(x) 0 + +#endif + + +/* Declarations of functions. */ + +#if 1 +# if defined _WIN32 && ! defined __CYGWIN__ +_GL_FUNCDECL_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options)); +# endif +_GL_CXXALIAS_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options)); +_GL_CXXALIASWARN (waitpid); +#elif defined GNULIB_POSIXCHECK +# undef waitpid +# if HAVE_RAW_DECL_WAITPID +_GL_WARN_ON_USE (waitpid, "waitpid is unportable - " + "use gnulib module sys_wait for portability"); +# endif +#endif + + +#endif /* _GL_SYS_WAIT_H */ +#endif /* _GL_SYS_WAIT_H */ diff --git a/devspec.en_US/project/recutils/lib/sys_file.in.h b/devspec.en_US/project/recutils/lib/sys_file.in.h new file mode 100755 index 0000000..5096421 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/sys_file.in.h @@ -0,0 +1,63 @@ +/* Provide a more complete sys/file.h. + + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Richard W.M. Jones. */ + +#ifndef _@GUARD_PREFIX@_SYS_FILE_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_SYS_FILE_H@ +# @INCLUDE_NEXT@ @NEXT_SYS_FILE_H@ +#endif + +#ifndef _@GUARD_PREFIX@_SYS_FILE_H +#define _@GUARD_PREFIX@_SYS_FILE_H + +#ifndef LOCK_SH +/* Operations for the 'flock' call (same as Linux kernel constants). */ +# define LOCK_SH 1 /* Shared lock. */ +# define LOCK_EX 2 /* Exclusive lock. */ +# define LOCK_UN 8 /* Unlock. */ + +/* Can be OR'd in to one of the above. */ +# define LOCK_NB 4 /* Don't block when locking. */ +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +#if @GNULIB_FLOCK@ +/* Apply or remove advisory locks on an open file. + Return 0 if successful, otherwise -1 and errno set. */ +# if !@HAVE_FLOCK@ +extern int flock (int fd, int operation); +# endif +#elif defined GNULIB_POSIXCHECK +# undef flock +# if HAVE_RAW_DECL_FLOCK +_GL_WARN_ON_USE (flock, "flock is unportable - " + "use gnulib module flock for portability"); +# endif +#endif + + +#endif /* _@GUARD_PREFIX@_SYS_FILE_H */ +#endif /* _@GUARD_PREFIX@_SYS_FILE_H */ diff --git a/devspec.en_US/project/recutils/lib/sys_stat.in.h b/devspec.en_US/project/recutils/lib/sys_stat.in.h new file mode 100755 index 0000000..58fa93f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/sys_stat.in.h @@ -0,0 +1,816 @@ +/* Provide a more complete sys/stat.h header file. + Copyright (C) 2005-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Eric Blake, Paul Eggert, and Jim Meyering. */ + +/* This file is supposed to be used on platforms where <sys/stat.h> is + incomplete. It is intended to provide definitions and prototypes + needed by an application. Start with what the system provides. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if defined __need_system_sys_stat_h +/* Special invocation convention. */ + +#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_SYS_STAT_H + +/* Get nlink_t. + May also define off_t to a 64-bit type on native Windows. */ +#include <sys/types.h> + +/* Get struct timespec. */ +#include <time.h> + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ + +#ifndef _@GUARD_PREFIX@_SYS_STAT_H +#define _@GUARD_PREFIX@_SYS_STAT_H + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +/* Before doing "#define mkdir rpl_mkdir" below, we need to include all + headers that may declare mkdir(). Native Windows platforms declare mkdir + in <io.h> and/or <direct.h>, not in <unistd.h>. */ +#if defined _WIN32 && ! defined __CYGWIN__ +# include <io.h> /* mingw32, mingw64 */ +# include <direct.h> /* mingw64, MSVC 9 */ +#endif + +/* Native Windows platforms declare umask() in <io.h>. */ +#if 0 && (defined _WIN32 && ! defined __CYGWIN__) +# include <io.h> +#endif + +/* Large File Support on native Windows. */ +#if @WINDOWS_64_BIT_ST_SIZE@ +# define stat _stati64 +#endif + +/* Optionally, override 'struct stat' on native Windows. */ +#if @GNULIB_OVERRIDES_STRUCT_STAT@ + +# undef stat +# if @GNULIB_STAT@ +# define stat rpl_stat +# else + /* Provoke a clear link error if stat() is used as a function and + module 'stat' is not in use. */ +# define stat stat_used_without_requesting_gnulib_module_stat +# endif + +# if !GNULIB_defined_struct_stat +struct stat +{ + dev_t st_dev; + ino_t st_ino; + mode_t st_mode; + nlink_t st_nlink; +# if 0 + uid_t st_uid; +# else /* uid_t is not defined by default on native Windows. */ + short st_uid; +# endif +# if 0 + gid_t st_gid; +# else /* gid_t is not defined by default on native Windows. */ + short st_gid; +# endif + dev_t st_rdev; + off_t st_size; +# if 0 + blksize_t st_blksize; + blkcnt_t st_blocks; +# endif + +# if @WINDOWS_STAT_TIMESPEC@ + struct timespec st_atim; + struct timespec st_mtim; + struct timespec st_ctim; +# else + time_t st_atime; + time_t st_mtime; + time_t st_ctime; +# endif +}; +# if @WINDOWS_STAT_TIMESPEC@ +# define st_atime st_atim.tv_sec +# define st_mtime st_mtim.tv_sec +# define st_ctime st_ctim.tv_sec + /* Indicator, for gnulib internal purposes. */ +# define _GL_WINDOWS_STAT_TIMESPEC 1 +# endif +# define GNULIB_defined_struct_stat 1 +# endif + +/* Other possible values of st_mode. */ +# if 0 +# define _S_IFBLK 0x6000 +# endif +# if 0 +# define _S_IFLNK 0xA000 +# endif +# if 0 +# define _S_IFSOCK 0xC000 +# endif + +#endif + +#ifndef S_IFIFO +# ifdef _S_IFIFO +# define S_IFIFO _S_IFIFO +# endif +#endif + +#ifndef S_IFMT +# define S_IFMT 0170000 +#endif + +#if STAT_MACROS_BROKEN +# undef S_ISBLK +# undef S_ISCHR +# undef S_ISDIR +# undef S_ISFIFO +# undef S_ISLNK +# undef S_ISNAM +# undef S_ISMPB +# undef S_ISMPC +# undef S_ISNWK +# undef S_ISREG +# undef S_ISSOCK +#endif + +#ifndef S_ISBLK +# ifdef S_IFBLK +# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +# else +# define S_ISBLK(m) 0 +# endif +#endif + +#ifndef S_ISCHR +# ifdef S_IFCHR +# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +# else +# define S_ISCHR(m) 0 +# endif +#endif + +#ifndef S_ISDIR +# ifdef S_IFDIR +# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +# else +# define S_ISDIR(m) 0 +# endif +#endif + +#ifndef S_ISDOOR /* Solaris 2.5 and up */ +# define S_ISDOOR(m) 0 +#endif + +#ifndef S_ISFIFO +# ifdef S_IFIFO +# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) +# else +# define S_ISFIFO(m) 0 +# endif +#endif + +#ifndef S_ISLNK +# ifdef S_IFLNK +# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +# else +# define S_ISLNK(m) 0 +# endif +#endif + +#ifndef S_ISMPB /* V7 */ +# ifdef S_IFMPB +# define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) +# define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) +# else +# define S_ISMPB(m) 0 +# define S_ISMPC(m) 0 +# endif +#endif + +#ifndef S_ISMPX /* AIX */ +# define S_ISMPX(m) 0 +#endif + +#ifndef S_ISNAM /* Xenix */ +# ifdef S_IFNAM +# define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM) +# else +# define S_ISNAM(m) 0 +# endif +#endif + +#ifndef S_ISNWK /* HP/UX */ +# ifdef S_IFNWK +# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) +# else +# define S_ISNWK(m) 0 +# endif +#endif + +#ifndef S_ISPORT /* Solaris 10 and up */ +# define S_ISPORT(m) 0 +#endif + +#ifndef S_ISREG +# ifdef S_IFREG +# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +# else +# define S_ISREG(m) 0 +# endif +#endif + +#ifndef S_ISSOCK +# ifdef S_IFSOCK +# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) +# else +# define S_ISSOCK(m) 0 +# endif +#endif + + +#ifndef S_TYPEISMQ +# define S_TYPEISMQ(p) 0 +#endif + +#ifndef S_TYPEISTMO +# define S_TYPEISTMO(p) 0 +#endif + + +#ifndef S_TYPEISSEM +# ifdef S_INSEM +# define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM) +# else +# define S_TYPEISSEM(p) 0 +# endif +#endif + +#ifndef S_TYPEISSHM +# ifdef S_INSHD +# define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD) +# else +# define S_TYPEISSHM(p) 0 +# endif +#endif + +/* high performance ("contiguous data") */ +#ifndef S_ISCTG +# define S_ISCTG(p) 0 +#endif + +/* Cray DMF (data migration facility): off line, with data */ +#ifndef S_ISOFD +# define S_ISOFD(p) 0 +#endif + +/* Cray DMF (data migration facility): off line, with no data */ +#ifndef S_ISOFL +# define S_ISOFL(p) 0 +#endif + +/* 4.4BSD whiteout */ +#ifndef S_ISWHT +# define S_ISWHT(m) 0 +#endif + +/* If any of the following are undefined, + define them to their de facto standard values. */ +#if !S_ISUID +# define S_ISUID 04000 +#endif +#if !S_ISGID +# define S_ISGID 02000 +#endif + +/* S_ISVTX is a common extension to POSIX. */ +#ifndef S_ISVTX +# define S_ISVTX 01000 +#endif + +#if !S_IRUSR && S_IREAD +# define S_IRUSR S_IREAD +#endif +#if !S_IRUSR +# define S_IRUSR 00400 +#endif +#if !S_IRGRP +# define S_IRGRP (S_IRUSR >> 3) +#endif +#if !S_IROTH +# define S_IROTH (S_IRUSR >> 6) +#endif + +#if !S_IWUSR && S_IWRITE +# define S_IWUSR S_IWRITE +#endif +#if !S_IWUSR +# define S_IWUSR 00200 +#endif +#if !S_IWGRP +# define S_IWGRP (S_IWUSR >> 3) +#endif +#if !S_IWOTH +# define S_IWOTH (S_IWUSR >> 6) +#endif + +#if !S_IXUSR && S_IEXEC +# define S_IXUSR S_IEXEC +#endif +#if !S_IXUSR +# define S_IXUSR 00100 +#endif +#if !S_IXGRP +# define S_IXGRP (S_IXUSR >> 3) +#endif +#if !S_IXOTH +# define S_IXOTH (S_IXUSR >> 6) +#endif + +#if !S_IRWXU +# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) +#endif +#if !S_IRWXG +# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) +#endif +#if !S_IRWXO +# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) +#endif + +/* S_IXUGO is a common extension to POSIX. */ +#if !S_IXUGO +# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) +#endif + +#ifndef S_IRWXUGO +# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) +#endif + +/* Macros for futimens and utimensat. */ +#ifndef UTIME_NOW +# define UTIME_NOW (-1) +# define UTIME_OMIT (-2) +#endif + + +#if @GNULIB_FCHMODAT@ +# if !@HAVE_FCHMODAT@ +_GL_FUNCDECL_SYS (fchmodat, int, + (int fd, char const *file, mode_t mode, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (fchmodat, int, + (int fd, char const *file, mode_t mode, int flag)); +_GL_CXXALIASWARN (fchmodat); +#elif defined GNULIB_POSIXCHECK +# undef fchmodat +# if HAVE_RAW_DECL_FCHMODAT +_GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if @GNULIB_FSTAT@ +# if @REPLACE_FSTAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fstat +# define fstat rpl_fstat +# endif +_GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf)); +# else +_GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf)); +# endif +_GL_CXXALIASWARN (fstat); +#elif @GNULIB_OVERRIDES_STRUCT_STAT@ +# undef fstat +# define fstat fstat_used_without_requesting_gnulib_module_fstat +#elif @WINDOWS_64_BIT_ST_SIZE@ +/* Above, we define stat to _stati64. */ +# define fstat _fstati64 +#elif defined GNULIB_POSIXCHECK +# undef fstat +# if HAVE_RAW_DECL_FSTAT +_GL_WARN_ON_USE (fstat, "fstat has portability problems - " + "use gnulib module fstat for portability"); +# endif +#endif + + +#if @GNULIB_FSTATAT@ +# if @REPLACE_FSTATAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fstatat +# define fstatat rpl_fstatat +# endif +_GL_FUNCDECL_RPL (fstatat, int, + (int fd, char const *name, struct stat *st, int flags) + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (fstatat, int, + (int fd, char const *name, struct stat *st, int flags)); +# else +# if !@HAVE_FSTATAT@ +_GL_FUNCDECL_SYS (fstatat, int, + (int fd, char const *name, struct stat *st, int flags) + _GL_ARG_NONNULL ((2, 3))); +# endif +_GL_CXXALIAS_SYS (fstatat, int, + (int fd, char const *name, struct stat *st, int flags)); +# endif +_GL_CXXALIASWARN (fstatat); +#elif @GNULIB_OVERRIDES_STRUCT_STAT@ +# undef fstatat +# define fstatat fstatat_used_without_requesting_gnulib_module_fstatat +#elif defined GNULIB_POSIXCHECK +# undef fstatat +# if HAVE_RAW_DECL_FSTATAT +_GL_WARN_ON_USE (fstatat, "fstatat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if @GNULIB_FUTIMENS@ +/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens + implementation relies on futimesat, which on Solaris 10 makes an invocation + to futimens that is meant to invoke the libc's futimens(), not gnulib's + futimens(). */ +# if @REPLACE_FUTIMENS@ || (!@HAVE_FUTIMENS@ && defined __sun) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef futimens +# define futimens rpl_futimens +# endif +_GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2])); +_GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2])); +# else +# if !@HAVE_FUTIMENS@ +_GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2])); +# endif +_GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2])); +# endif +# if @HAVE_FUTIMENS@ +_GL_CXXALIASWARN (futimens); +# endif +#elif defined GNULIB_POSIXCHECK +# undef futimens +# if HAVE_RAW_DECL_FUTIMENS +_GL_WARN_ON_USE (futimens, "futimens is not portable - " + "use gnulib module futimens for portability"); +# endif +#endif + + +#if @GNULIB_LCHMOD@ +/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME + denotes a symbolic link. */ +# if !@HAVE_LCHMOD@ +/* The lchmod replacement follows symbolic links. Callers should take + this into account; lchmod should be applied only to arguments that + are known to not be symbolic links. On hosts that lack lchmod, + this can lead to race conditions between the check and the + invocation of lchmod, but we know of no workarounds that are + reliable in general. You might try requesting support for lchmod + from your operating system supplier. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define lchmod chmod +# endif +/* Need to cast, because on mingw, the second parameter of chmod is + int mode. */ +_GL_CXXALIAS_RPL_CAST_1 (lchmod, chmod, int, + (const char *filename, mode_t mode)); +# else +# if 0 /* assume already declared */ +_GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode)); +# endif +# if @HAVE_LCHMOD@ +_GL_CXXALIASWARN (lchmod); +# endif +#elif defined GNULIB_POSIXCHECK +# undef lchmod +# if HAVE_RAW_DECL_LCHMOD +_GL_WARN_ON_USE (lchmod, "lchmod is unportable - " + "use gnulib module lchmod for portability"); +# endif +#endif + + +#if @GNULIB_LSTAT@ +# if ! @HAVE_LSTAT@ +/* mingw does not support symlinks, therefore it does not have lstat. But + without links, stat does just fine. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define lstat stat +# endif +_GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *name, struct stat *buf)); +# elif @REPLACE_LSTAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef lstat +# define lstat rpl_lstat +# endif +_GL_FUNCDECL_RPL (lstat, int, (const char *name, struct stat *buf) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (lstat, int, (const char *name, struct stat *buf)); +# else +_GL_CXXALIAS_SYS (lstat, int, (const char *name, struct stat *buf)); +# endif +# if @HAVE_LSTAT@ +_GL_CXXALIASWARN (lstat); +# endif +#elif @GNULIB_OVERRIDES_STRUCT_STAT@ +# undef lstat +# define lstat lstat_used_without_requesting_gnulib_module_lstat +#elif defined GNULIB_POSIXCHECK +# undef lstat +# if HAVE_RAW_DECL_LSTAT +_GL_WARN_ON_USE (lstat, "lstat is unportable - " + "use gnulib module lstat for portability"); +# endif +#endif + + +#if @REPLACE_MKDIR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mkdir +# define mkdir rpl_mkdir +# endif +_GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); +#else +/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. + Additionally, it declares _mkdir (and depending on compile flags, an + alias mkdir), only in the nonstandard includes <direct.h> and <io.h>, + which are included above. */ +# if defined _WIN32 && ! defined __CYGWIN__ + +# if !GNULIB_defined_rpl_mkdir +static int +rpl_mkdir (char const *name, mode_t mode) +{ + return _mkdir (name); +} +# define GNULIB_defined_rpl_mkdir 1 +# endif + +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mkdir rpl_mkdir +# endif +_GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); +# else +_GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); +# endif +#endif +_GL_CXXALIASWARN (mkdir); + + +#if @GNULIB_MKDIRAT@ +# if !@HAVE_MKDIRAT@ +_GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)); +_GL_CXXALIASWARN (mkdirat); +#elif defined GNULIB_POSIXCHECK +# undef mkdirat +# if HAVE_RAW_DECL_MKDIRAT +_GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if @GNULIB_MKFIFO@ +# if @REPLACE_MKFIFO@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mkfifo +# define mkfifo rpl_mkfifo +# endif +_GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode)); +# else +# if !@HAVE_MKFIFO@ +_GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode)); +# endif +_GL_CXXALIASWARN (mkfifo); +#elif defined GNULIB_POSIXCHECK +# undef mkfifo +# if HAVE_RAW_DECL_MKFIFO +_GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - " + "use gnulib module mkfifo for portability"); +# endif +#endif + + +#if @GNULIB_MKFIFOAT@ +# if !@HAVE_MKFIFOAT@ +_GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)); +_GL_CXXALIASWARN (mkfifoat); +#elif defined GNULIB_POSIXCHECK +# undef mkfifoat +# if HAVE_RAW_DECL_MKFIFOAT +_GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - " + "use gnulib module mkfifoat for portability"); +# endif +#endif + + +#if @GNULIB_MKNOD@ +# if @REPLACE_MKNOD@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mknod +# define mknod rpl_mknod +# endif +_GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)); +# else +# if !@HAVE_MKNOD@ +_GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on OSF/1 5.1, the third parameter is '...'. */ +_GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev)); +# endif +_GL_CXXALIASWARN (mknod); +#elif defined GNULIB_POSIXCHECK +# undef mknod +# if HAVE_RAW_DECL_MKNOD +_GL_WARN_ON_USE (mknod, "mknod is not portable - " + "use gnulib module mknod for portability"); +# endif +#endif + + +#if @GNULIB_MKNODAT@ +# if !@HAVE_MKNODAT@ +_GL_FUNCDECL_SYS (mknodat, int, + (int fd, char const *file, mode_t mode, dev_t dev) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mknodat, int, + (int fd, char const *file, mode_t mode, dev_t dev)); +_GL_CXXALIASWARN (mknodat); +#elif defined GNULIB_POSIXCHECK +# undef mknodat +# if HAVE_RAW_DECL_MKNODAT +_GL_WARN_ON_USE (mknodat, "mknodat is not portable - " + "use gnulib module mkfifoat for portability"); +# endif +#endif + + +#if @GNULIB_STAT@ +# if @REPLACE_STAT@ +# if !@GNULIB_OVERRIDES_STRUCT_STAT@ + /* We can't use the object-like #define stat rpl_stat, because of + struct stat. This means that rpl_stat will not be used if the user + does (stat)(a,b). Oh well. */ +# if defined _AIX && defined stat && defined _LARGE_FILES + /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, + so we have to replace stat64() instead of stat(). */ +# undef stat64 +# define stat64(name, st) rpl_stat (name, st) +# elif @WINDOWS_64_BIT_ST_SIZE@ + /* Above, we define stat to _stati64. */ +# if defined __MINGW32__ && defined _stati64 +# ifndef _USE_32BIT_TIME_T + /* The system headers define _stati64 to _stat64. */ +# undef _stat64 +# define _stat64(name, st) rpl_stat (name, st) +# endif +# elif defined _MSC_VER && defined _stati64 +# ifdef _USE_32BIT_TIME_T + /* The system headers define _stati64 to _stat32i64. */ +# undef _stat32i64 +# define _stat32i64(name, st) rpl_stat (name, st) +# else + /* The system headers define _stati64 to _stat64. */ +# undef _stat64 +# define _stat64(name, st) rpl_stat (name, st) +# endif +# else +# undef _stati64 +# define _stati64(name, st) rpl_stat (name, st) +# endif +# elif defined __MINGW32__ && defined stat +# ifdef _USE_32BIT_TIME_T + /* The system headers define stat to _stat32i64. */ +# undef _stat32i64 +# define _stat32i64(name, st) rpl_stat (name, st) +# else + /* The system headers define stat to _stat64. */ +# undef _stat64 +# define _stat64(name, st) rpl_stat (name, st) +# endif +# elif defined _MSC_VER && defined stat +# ifdef _USE_32BIT_TIME_T + /* The system headers define stat to _stat32. */ +# undef _stat32 +# define _stat32(name, st) rpl_stat (name, st) +# else + /* The system headers define stat to _stat64i32. */ +# undef _stat64i32 +# define _stat64i32(name, st) rpl_stat (name, st) +# endif +# else /* !(_AIX || __MINGW32__ || _MSC_VER) */ +# undef stat +# define stat(name, st) rpl_stat (name, st) +# endif /* !_LARGE_FILES */ +# endif /* !@GNULIB_OVERRIDES_STRUCT_STAT@ */ +_GL_EXTERN_C int stat (const char *name, struct stat *buf) + _GL_ARG_NONNULL ((1, 2)); +# endif +#elif @GNULIB_OVERRIDES_STRUCT_STAT@ +/* see above: + #define stat stat_used_without_requesting_gnulib_module_stat + */ +#elif defined GNULIB_POSIXCHECK +# undef stat +# if HAVE_RAW_DECL_STAT +_GL_WARN_ON_USE (stat, "stat is unportable - " + "use gnulib module stat for portability"); +# endif +#endif + + +#if @GNULIB_UTIMENSAT@ +/* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat + implementation relies on futimesat, which on Solaris 10 makes an invocation + to utimensat that is meant to invoke the libc's utimensat(), not gnulib's + utimensat(). */ +# if @REPLACE_UTIMENSAT@ || (!@HAVE_UTIMENSAT@ && defined __sun) +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef utimensat +# define utimensat rpl_utimensat +# endif +_GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name, + struct timespec const times[2], int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name, + struct timespec const times[2], int flag)); +# else +# if !@HAVE_UTIMENSAT@ +_GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name, + struct timespec const times[2], int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name, + struct timespec const times[2], int flag)); +# endif +# if @HAVE_UTIMENSAT@ +_GL_CXXALIASWARN (utimensat); +# endif +#elif defined GNULIB_POSIXCHECK +# undef utimensat +# if HAVE_RAW_DECL_UTIMENSAT +_GL_WARN_ON_USE (utimensat, "utimensat is not portable - " + "use gnulib module utimensat for portability"); +# endif +#endif + + +#endif /* _@GUARD_PREFIX@_SYS_STAT_H */ +#endif /* _@GUARD_PREFIX@_SYS_STAT_H */ +#endif diff --git a/devspec.en_US/project/recutils/lib/sys_time.in.h b/devspec.en_US/project/recutils/lib/sys_time.in.h new file mode 100755 index 0000000..5397688 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/sys_time.in.h @@ -0,0 +1,220 @@ +/* Provide a more complete sys/time.h. + + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert. */ + +#ifndef _@GUARD_PREFIX@_SYS_TIME_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* On Cygwin and on many BSDish systems, <sys/time.h> includes itself + recursively via <sys/select.h>. + Simply delegate to the system's header in this case; it is a no-op. + Without this extra ifdef, the C++ gettimeofday declaration below + would be a forward declaration in gnulib's nested <sys/time.h>. */ +#if defined _CYGWIN_SYS_TIME_H || defined _SYS_TIME_H || defined _SYS_TIME_H_ +# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ +#else + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_SYS_TIME_H@ +# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ +#endif + +#ifndef _@GUARD_PREFIX@_SYS_TIME_H +#define _@GUARD_PREFIX@_SYS_TIME_H + +#if ! @HAVE_SYS_TIME_H@ +# include <time.h> +#endif + +/* On native Windows with MSVC, get the 'struct timeval' type. + Also, on native Windows with a 64-bit time_t, where we are overriding the + 'struct timeval' type, get all declarations of system functions whose + signature contains 'struct timeval'. */ +#if (defined _MSC_VER || @REPLACE_STRUCT_TIMEVAL@) && @HAVE_WINSOCK2_H@ && !defined _GL_INCLUDING_WINSOCK2_H +# define _GL_INCLUDING_WINSOCK2_H +# include <winsock2.h> +# undef _GL_INCLUDING_WINSOCK2_H +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if !@HAVE_STRUCT_TIMEVAL@ || @REPLACE_STRUCT_TIMEVAL@ + +# if @REPLACE_STRUCT_TIMEVAL@ +# define timeval rpl_timeval +# endif + +# if !GNULIB_defined_struct_timeval +struct timeval +{ + time_t tv_sec; + long int tv_usec; +}; +# define GNULIB_defined_struct_timeval 1 +# endif + +#endif + +#ifdef __cplusplus +} +#endif + +#if @GNULIB_GETTIMEOFDAY@ +# if @REPLACE_GETTIMEOFDAY@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gettimeofday +# define gettimeofday rpl_gettimeofday +# endif +_GL_FUNCDECL_RPL (gettimeofday, int, + (struct timeval *restrict, void *restrict) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (gettimeofday, int, + (struct timeval *restrict, void *restrict)); +# else +# if !@HAVE_GETTIMEOFDAY@ +_GL_FUNCDECL_SYS (gettimeofday, int, + (struct timeval *restrict, void *restrict) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on glibc systems, by default, the second argument is + struct timezone *. */ +_GL_CXXALIAS_SYS_CAST (gettimeofday, int, + (struct timeval *restrict, void *restrict)); +# endif +_GL_CXXALIASWARN (gettimeofday); +# if defined __cplusplus && defined GNULIB_NAMESPACE +namespace GNULIB_NAMESPACE { + typedef ::timeval +#undef timeval + timeval; +} +# endif +#elif defined GNULIB_POSIXCHECK +# undef gettimeofday +# if HAVE_RAW_DECL_GETTIMEOFDAY +_GL_WARN_ON_USE (gettimeofday, "gettimeofday is unportable - " + "use gnulib module gettimeofday for portability"); +# endif +#endif + +/* Hide some function declarations from <winsock2.h>. */ + +#if defined _MSC_VER && @HAVE_WINSOCK2_H@ +# if !defined _@GUARD_PREFIX@_UNISTD_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef close +# define close close_used_without_including_unistd_h +# else + _GL_WARN_ON_USE (close, + "close() used without including <unistd.h>"); +# endif +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gethostname +# define gethostname gethostname_used_without_including_unistd_h +# else + _GL_WARN_ON_USE (gethostname, + "gethostname() used without including <unistd.h>"); +# endif +# endif +# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef socket +# define socket socket_used_without_including_sys_socket_h +# undef connect +# define connect connect_used_without_including_sys_socket_h +# undef accept +# define accept accept_used_without_including_sys_socket_h +# undef bind +# define bind bind_used_without_including_sys_socket_h +# undef getpeername +# define getpeername getpeername_used_without_including_sys_socket_h +# undef getsockname +# define getsockname getsockname_used_without_including_sys_socket_h +# undef getsockopt +# define getsockopt getsockopt_used_without_including_sys_socket_h +# undef listen +# define listen listen_used_without_including_sys_socket_h +# undef recv +# define recv recv_used_without_including_sys_socket_h +# undef send +# define send send_used_without_including_sys_socket_h +# undef recvfrom +# define recvfrom recvfrom_used_without_including_sys_socket_h +# undef sendto +# define sendto sendto_used_without_including_sys_socket_h +# undef setsockopt +# define setsockopt setsockopt_used_without_including_sys_socket_h +# undef shutdown +# define shutdown shutdown_used_without_including_sys_socket_h +# else + _GL_WARN_ON_USE (socket, + "socket() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (connect, + "connect() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (accept, + "accept() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (bind, + "bind() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (getpeername, + "getpeername() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (getsockname, + "getsockname() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (getsockopt, + "getsockopt() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (listen, + "listen() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (recv, + "recv() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (send, + "send() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (recvfrom, + "recvfrom() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (sendto, + "sendto() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (setsockopt, + "setsockopt() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (shutdown, + "shutdown() used without including <sys/socket.h>"); +# endif +# endif +# if !defined _@GUARD_PREFIX@_SYS_SELECT_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef select +# define select select_used_without_including_sys_select_h +# else + _GL_WARN_ON_USE (select, + "select() used without including <sys/select.h>"); +# endif +# endif +#endif + +#endif /* _@GUARD_PREFIX@_SYS_TIME_H */ +#endif /* _CYGWIN_SYS_TIME_H */ +#endif /* _@GUARD_PREFIX@_SYS_TIME_H */ diff --git a/devspec.en_US/project/recutils/lib/sys_types.in.h b/devspec.en_US/project/recutils/lib/sys_types.in.h new file mode 100755 index 0000000..237e206 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/sys_types.in.h @@ -0,0 +1,106 @@ +/* Provide a more complete sys/types.h. + + Copyright (C) 2011-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if defined _WIN32 && !defined __CYGWIN__ \ + && (defined __need_off_t || defined __need___off64_t \ + || defined __need_ssize_t || defined __need_time_t) + +/* Special invocation convention inside mingw header files. */ + +#@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_SYS_TYPES_H + +/* The include_next requires a split double-inclusion guard. */ +# define _GL_INCLUDING_SYS_TYPES_H +#@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ +# undef _GL_INCLUDING_SYS_TYPES_H + +#ifndef _@GUARD_PREFIX@_SYS_TYPES_H +#define _@GUARD_PREFIX@_SYS_TYPES_H + +/* Override off_t if Large File Support is requested on native Windows. */ +#if @WINDOWS_64_BIT_OFF_T@ +/* Same as int64_t in <stdint.h>. */ +# if defined _MSC_VER +# define off_t __int64 +# else +# define off_t long long int +# endif +/* Indicator, for gnulib internal purposes. */ +# define _GL_WINDOWS_64_BIT_OFF_T 1 +#endif + +/* Override dev_t and ino_t if distinguishable inodes support is requested + on native Windows. */ +#if @WINDOWS_STAT_INODES@ + +# if @WINDOWS_STAT_INODES@ == 2 +/* Experimental, not useful in Windows 10. */ + +/* Define dev_t to a 64-bit type. */ +# if !defined GNULIB_defined_dev_t +typedef unsigned long long int rpl_dev_t; +# undef dev_t +# define dev_t rpl_dev_t +# define GNULIB_defined_dev_t 1 +# endif + +/* Define ino_t to a 128-bit type. */ +# if !defined GNULIB_defined_ino_t +/* MSVC does not have a 128-bit integer type. + GCC has a 128-bit integer type __int128, but only on 64-bit targets. */ +typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t; +# undef ino_t +# define ino_t rpl_ino_t +# define GNULIB_defined_ino_t 1 +# endif + +# else /* @WINDOWS_STAT_INODES@ == 1 */ + +/* Define ino_t to a 64-bit type. */ +# if !defined GNULIB_defined_ino_t +typedef unsigned long long int rpl_ino_t; +# undef ino_t +# define ino_t rpl_ino_t +# define GNULIB_defined_ino_t 1 +# endif + +# endif + +/* Indicator, for gnulib internal purposes. */ +# define _GL_WINDOWS_STAT_INODES @WINDOWS_STAT_INODES@ + +#endif + +/* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>. */ +/* But avoid namespace pollution on glibc systems. */ +#if (defined _WIN32 && ! defined __CYGWIN__) && ! defined __GLIBC__ +# include <stddef.h> +#endif + +#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ +#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ +#endif /* __need_XXX */ diff --git a/devspec.en_US/project/recutils/lib/sys_wait.in.h b/devspec.en_US/project/recutils/lib/sys_wait.in.h new file mode 100755 index 0000000..10973f7 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/sys_wait.in.h @@ -0,0 +1,129 @@ +/* A POSIX-like <sys/wait.h>. + Copyright (C) 2001-2003, 2005-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + + +#ifndef _@GUARD_PREFIX@_SYS_WAIT_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* The include_next requires a split double-inclusion guard. */ +#if !(defined _WIN32 && ! defined __CYGWIN__) +# @INCLUDE_NEXT@ @NEXT_SYS_WAIT_H@ +#endif + +#ifndef _@GUARD_PREFIX@_SYS_WAIT_H +#define _@GUARD_PREFIX@_SYS_WAIT_H + +/* Get pid_t. */ +#include <sys/types.h> + + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + + +#if !(defined _WIN32 && ! defined __CYGWIN__) +/* Unix API. */ + +/* The following macros apply to an argument x, that is a status of a process, + as returned by waitpid(). + On nearly all systems, including Linux/x86, WEXITSTATUS are bits 15..8 and + WTERMSIG are bits 7..0, while BeOS uses the opposite. Therefore programs + have to use the abstract macros. */ + +/* For valid x, exactly one of WIFSIGNALED(x), WIFEXITED(x), WIFSTOPPED(x) + is true. */ +# ifndef WIFSIGNALED +# define WIFSIGNALED(x) (WTERMSIG (x) != 0 && WTERMSIG(x) != 0x7f) +# endif +# ifndef WIFEXITED +# define WIFEXITED(x) (WTERMSIG (x) == 0) +# endif +# ifndef WIFSTOPPED +# define WIFSTOPPED(x) (WTERMSIG (x) == 0x7f) +# endif + +/* The termination signal. Only to be accessed if WIFSIGNALED(x) is true. */ +# ifndef WTERMSIG +# define WTERMSIG(x) ((x) & 0x7f) +# endif + +/* The exit status. Only to be accessed if WIFEXITED(x) is true. */ +# ifndef WEXITSTATUS +# define WEXITSTATUS(x) (((x) >> 8) & 0xff) +# endif + +/* The stopping signal. Only to be accessed if WIFSTOPPED(x) is true. */ +# ifndef WSTOPSIG +# define WSTOPSIG(x) (((x) >> 8) & 0x7f) +# endif + +/* True if the process dumped core. Not standardized by POSIX. */ +# ifndef WCOREDUMP +# define WCOREDUMP(x) ((x) & 0x80) +# endif + +#else +/* Native Windows API. */ + +# include <signal.h> /* for SIGTERM */ + +/* The following macros apply to an argument x, that is a status of a process, + as returned by waitpid() or, equivalently, _cwait() or GetExitCodeProcess(). + This value is simply an 'int', not composed of bit fields. */ + +/* When an unhandled fatal signal terminates a process, the exit code is 3. */ +# define WIFSIGNALED(x) ((x) == 3) +# define WIFEXITED(x) ((x) != 3) +# define WIFSTOPPED(x) 0 + +/* The signal that terminated a process is not known posthum. */ +# define WTERMSIG(x) SIGTERM + +# define WEXITSTATUS(x) (x) + +/* There are no stopping signals. */ +# define WSTOPSIG(x) 0 + +/* There are no core dumps. */ +# define WCOREDUMP(x) 0 + +#endif + + +/* Declarations of functions. */ + +#if @GNULIB_WAITPID@ +# if defined _WIN32 && ! defined __CYGWIN__ +_GL_FUNCDECL_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options)); +# endif +_GL_CXXALIAS_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options)); +_GL_CXXALIASWARN (waitpid); +#elif defined GNULIB_POSIXCHECK +# undef waitpid +# if HAVE_RAW_DECL_WAITPID +_GL_WARN_ON_USE (waitpid, "waitpid is unportable - " + "use gnulib module sys_wait for portability"); +# endif +#endif + + +#endif /* _@GUARD_PREFIX@_SYS_WAIT_H */ +#endif /* _@GUARD_PREFIX@_SYS_WAIT_H */ diff --git a/devspec.en_US/project/recutils/lib/tempname.c b/devspec.en_US/project/recutils/lib/tempname.c new file mode 100755 index 0000000..be62ed9 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/tempname.c @@ -0,0 +1,323 @@ +/* tempname.c - generate the name of a temporary file. + + Copyright (C) 1991-2003, 2005-2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Extracted from glibc sysdeps/posix/tempname.c. See also tmpdir.c. */ + +#if !_LIBC +# include <config.h> +# include "tempname.h" +#endif + +#include <sys/types.h> +#include <assert.h> + +#include <errno.h> +#ifndef __set_errno +# define __set_errno(Val) errno = (Val) +#endif + +#include <stdio.h> +#ifndef P_tmpdir +# define P_tmpdir "/tmp" +#endif +#ifndef TMP_MAX +# define TMP_MAX 238328 +#endif +#ifndef __GT_FILE +# define __GT_FILE 0 +# define __GT_DIR 1 +# define __GT_NOCREATE 2 +#endif +#if !_LIBC && (GT_FILE != __GT_FILE || GT_DIR != __GT_DIR \ + || GT_NOCREATE != __GT_NOCREATE) +# error report this to bug-gnulib@gnu.org +#endif + +#include <stddef.h> +#include <stdlib.h> +#include <string.h> + +#include <fcntl.h> +#include <sys/time.h> +#include <stdint.h> +#include <unistd.h> + +#include <sys/stat.h> + +#if _LIBC +# define struct_stat64 struct stat64 +#else +# define struct_stat64 struct stat +# define __try_tempname try_tempname +# define __gen_tempname gen_tempname +# define __getpid getpid +# define __gettimeofday gettimeofday +# define __mkdir mkdir +# define __open open +# define __lxstat64(version, file, buf) lstat (file, buf) +#endif + +#ifdef _LIBC +# include <hp-timing.h> +# if HP_TIMING_AVAIL +# define RANDOM_BITS(Var) \ + if (__builtin_expect (value == UINT64_C (0), 0)) \ + { \ + /* If this is the first time this function is used initialize \ + the variable we accumulate the value in to some somewhat \ + random value. If we'd not do this programs at startup time \ + might have a reduced set of possible names, at least on slow \ + machines. */ \ + struct timeval tv; \ + __gettimeofday (&tv, NULL); \ + value = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec; \ + } \ + HP_TIMING_NOW (Var) +# endif +#endif + +/* Use the widest available unsigned type if uint64_t is not + available. The algorithm below extracts a number less than 62**6 + (approximately 2**35.725) from uint64_t, so ancient hosts where + uintmax_t is only 32 bits lose about 3.725 bits of randomness, + which is better than not having mkstemp at all. */ +#if !defined UINT64_MAX && !defined uint64_t +# define uint64_t uintmax_t +#endif + +#if _LIBC +/* Return nonzero if DIR is an existent directory. */ +static int +direxists (const char *dir) +{ + struct_stat64 buf; + return __xstat64 (_STAT_VER, dir, &buf) == 0 && S_ISDIR (buf.st_mode); +} + +/* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is + non-null and exists, uses it; otherwise uses the first of $TMPDIR, + P_tmpdir, /tmp that exists. Copies into TMPL a template suitable + for use with mk[s]temp. Will fail (-1) if DIR is non-null and + doesn't exist, none of the searched dirs exists, or there's not + enough space in TMPL. */ +int +__path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx, + int try_tmpdir) +{ + const char *d; + size_t dlen, plen; + + if (!pfx || !pfx[0]) + { + pfx = "file"; + plen = 4; + } + else + { + plen = strlen (pfx); + if (plen > 5) + plen = 5; + } + + if (try_tmpdir) + { + d = __secure_getenv ("TMPDIR"); + if (d != NULL && direxists (d)) + dir = d; + else if (dir != NULL && direxists (dir)) + /* nothing */ ; + else + dir = NULL; + } + if (dir == NULL) + { + if (direxists (P_tmpdir)) + dir = P_tmpdir; + else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp")) + dir = "/tmp"; + else + { + __set_errno (ENOENT); + return -1; + } + } + + dlen = strlen (dir); + while (dlen > 1 && dir[dlen - 1] == '/') + dlen--; /* remove trailing slashes */ + + /* check we have room for "${dir}/${pfx}XXXXXX\0" */ + if (tmpl_len < dlen + 1 + plen + 6 + 1) + { + __set_errno (EINVAL); + return -1; + } + + sprintf (tmpl, "%.*s/%.*sXXXXXX", (int) dlen, dir, (int) plen, pfx); + return 0; +} +#endif /* _LIBC */ + +/* These are the characters used in temporary file names. */ +static const char letters[] = +"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + +int +__try_tempname (char *tmpl, int suffixlen, void *args, + int (*tryfunc) (char *, void *)) +{ + int len; + char *XXXXXX; + static uint64_t value; + uint64_t random_time_bits; + unsigned int count; + int fd = -1; + int save_errno = errno; + + /* A lower bound on the number of temporary files to attempt to + generate. The maximum total number of temporary file names that + can exist for a given template is 62**6. It should never be + necessary to try all of these combinations. Instead if a reasonable + number of names is tried (we define reasonable as 62**3) fail to + give the system administrator the chance to remove the problems. */ +#define ATTEMPTS_MIN (62 * 62 * 62) + + /* The number of times to attempt to generate a temporary file. To + conform to POSIX, this must be no smaller than TMP_MAX. */ +#if ATTEMPTS_MIN < TMP_MAX + unsigned int attempts = TMP_MAX; +#else + unsigned int attempts = ATTEMPTS_MIN; +#endif + + len = strlen (tmpl); + if (len < 6 + suffixlen || memcmp (&tmpl[len - 6 - suffixlen], "XXXXXX", 6)) + { + __set_errno (EINVAL); + return -1; + } + + /* This is where the Xs start. */ + XXXXXX = &tmpl[len - 6 - suffixlen]; + + /* Get some more or less random data. */ +#ifdef RANDOM_BITS + RANDOM_BITS (random_time_bits); +#else + { + struct timeval tv; + __gettimeofday (&tv, NULL); + random_time_bits = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec; + } +#endif + value += random_time_bits ^ __getpid (); + + for (count = 0; count < attempts; value += 7777, ++count) + { + uint64_t v = value; + + /* Fill in the random bits. */ + XXXXXX[0] = letters[v % 62]; + v /= 62; + XXXXXX[1] = letters[v % 62]; + v /= 62; + XXXXXX[2] = letters[v % 62]; + v /= 62; + XXXXXX[3] = letters[v % 62]; + v /= 62; + XXXXXX[4] = letters[v % 62]; + v /= 62; + XXXXXX[5] = letters[v % 62]; + + fd = tryfunc (tmpl, args); + if (fd >= 0) + { + __set_errno (save_errno); + return fd; + } + else if (errno != EEXIST) + return -1; + } + + /* We got out of the loop because we ran out of combinations to try. */ + __set_errno (EEXIST); + return -1; +} + +static int +try_file (char *tmpl, void *flags) +{ + int *openflags = flags; + return __open (tmpl, + (*openflags & ~O_ACCMODE) + | O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); +} + +static int +try_dir (char *tmpl, void *flags _GL_UNUSED) +{ + return __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR); +} + +static int +try_nocreate (char *tmpl, void *flags _GL_UNUSED) +{ + struct_stat64 st; + + if (__lxstat64 (_STAT_VER, tmpl, &st) == 0 || errno == EOVERFLOW) + __set_errno (EEXIST); + return errno == ENOENT ? 0 : -1; +} + +/* Generate a temporary file name based on TMPL. TMPL must match the + rules for mk[s]temp (i.e. end in "XXXXXX", possibly with a suffix). + The name constructed does not exist at the time of the call to + __gen_tempname. TMPL is overwritten with the result. + + KIND may be one of: + __GT_NOCREATE: simply verify that the name does not exist + at the time of the call. + __GT_FILE: create the file using open(O_CREAT|O_EXCL) + and return a read-write fd. The file is mode 0600. + __GT_DIR: create a directory, which will be mode 0700. + + We use a clever algorithm to get hard-to-predict names. */ +int +__gen_tempname (char *tmpl, int suffixlen, int flags, int kind) +{ + int (*tryfunc) (char *, void *); + + switch (kind) + { + case __GT_FILE: + tryfunc = try_file; + break; + + case __GT_DIR: + tryfunc = try_dir; + break; + + case __GT_NOCREATE: + tryfunc = try_nocreate; + break; + + default: + assert (! "invalid KIND in __gen_tempname"); + abort (); + } + return __try_tempname (tmpl, suffixlen, &flags, tryfunc); +} diff --git a/devspec.en_US/project/recutils/lib/tempname.h b/devspec.en_US/project/recutils/lib/tempname.h new file mode 100755 index 0000000..fb203d3 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/tempname.h @@ -0,0 +1,65 @@ +/* Create a temporary file or directory. + + Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* header written by Eric Blake */ + +#ifndef GL_TEMPNAME_H +# define GL_TEMPNAME_H + +# include <stdio.h> + +# ifdef __GT_FILE +# define GT_FILE __GT_FILE +# define GT_DIR __GT_DIR +# define GT_NOCREATE __GT_NOCREATE +# else +# define GT_FILE 0 +# define GT_DIR 1 +# define GT_NOCREATE 2 +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Generate a temporary file name based on TMPL. TMPL must match the + rules for mk[s]temp (i.e. end in "XXXXXX", possibly with a suffix). + The name constructed does not exist at the time of the call to + gen_tempname. TMPL is overwritten with the result. + + KIND may be one of: + GT_NOCREATE: simply verify that the name does not exist + at the time of the call. + GT_FILE: create a large file using open(O_CREAT|O_EXCL) + and return a read-write fd. The file is mode 0600. + GT_DIR: create a directory, which will be mode 0700. + + We use a clever algorithm to get hard-to-predict names. */ +extern int gen_tempname (char *tmpl, int suffixlen, int flags, int kind); + +/* Similar to gen_tempname, but TRYFUNC is called for each temporary + name to try. If TRYFUNC returns a non-negative number, TRY_GEN_TEMPNAME + returns with this value. Otherwise, if errno is set to EEXIST, another + name is tried, or else TRY_GEN_TEMPNAME returns -1. */ +extern int try_tempname (char *tmpl, int suffixlen, void *args, + int (*tryfunc) (char *, void *)); + +#ifdef __cplusplus +} +#endif + +#endif /* GL_TEMPNAME_H */ diff --git a/devspec.en_US/project/recutils/lib/time-internal.h b/devspec.en_US/project/recutils/lib/time-internal.h new file mode 100755 index 0000000..57f2e78 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/time-internal.h @@ -0,0 +1,49 @@ +/* Time internal interface + + Copyright 2015-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert. */ + +/* A time zone rule. */ +struct tm_zone +{ + /* More abbreviations, should they be needed. Their TZ_IS_SET + members are zero. */ + struct tm_zone *next; + +#if HAVE_TZNAME && !HAVE_TM_ZONE + /* Copies of recent strings taken from tzname[0] and tzname[1]. + The copies are in ABBRS, so that they survive tzset. Null if unknown. */ + char *tzname_copy[2]; +#endif + + /* If nonzero, the rule represents the TZ environment variable set + to the first "abbreviation" (this may be the empty string). + Otherwise, it represents an unset TZ. */ + char tz_is_set; + + /* A sequence of null-terminated strings packed next to each other. + The strings are followed by an extra null byte. If TZ_IS_SET, + there must be at least one string and the first string (which is + actually a TZ environment value) may be empty. Otherwise all + strings must be nonempty. + + Abbreviations are stored here because otherwise the values of + tm_zone and/or tzname would be dead after changing TZ and calling + tzset. Abbreviations never move once allocated, and are live + until tzfree is called. */ + char abbrs[FLEXIBLE_ARRAY_MEMBER]; +}; diff --git a/devspec.en_US/project/recutils/lib/time.h b/devspec.en_US/project/recutils/lib/time.h new file mode 100755 index 0000000..9083ac6 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/time.h @@ -0,0 +1,824 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A more-standard <time.h>. + + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +/* Don't get in the way of glibc when it includes time.h merely to + declare a few standard symbols, rather than to declare all the + symbols. (However, skip this for MinGW as it treats __need_time_t + incompatibly.) Also, Solaris 8 <time.h> eventually includes itself + recursively; if that is happening, just include the system <time.h> + without adding our own declarations. */ +#if (((defined __need_time_t || defined __need_clock_t \ + || defined __need_timespec) \ + && !defined __MINGW32__) \ + || defined _GL_TIME_H) + +# include_next <time.h> + +#else + +# define _GL_TIME_H + +# include_next <time.h> + +/* NetBSD 5.0 mis-defines NULL. */ +# include <stddef.h> + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* Some systems don't define struct timespec (e.g., AIX 4.1). + Or they define it with the wrong member names or define it in <sys/time.h> + (e.g., FreeBSD circa 1997). Stock Mingw prior to 3.0 does not define it, + but the pthreads-win32 library defines it in <pthread.h>. */ +# if ! 1 +# if 0 +# include <sys/time.h> +# elif 0 +# include <pthread.h> +# elif 0 +# include <unistd.h> +# else + +# ifdef __cplusplus +extern "C" { +# endif + +# if !GNULIB_defined_struct_timespec +# undef timespec +# define timespec rpl_timespec +struct timespec +{ + time_t tv_sec; + long int tv_nsec; +}; +# define GNULIB_defined_struct_timespec 1 +# endif + +# ifdef __cplusplus +} +# endif + +# endif +# endif + +# if !GNULIB_defined_struct_time_t_must_be_integral +/* Per http://austingroupbugs.net/view.php?id=327, POSIX requires + time_t to be an integer type, even though C99 permits floating + point. We don't know of any implementation that uses floating + point, and it is much easier to write code that doesn't have to + worry about that corner case, so we force the issue. */ +struct __time_t_must_be_integral { + unsigned int __floating_time_t_unsupported : (time_t) 1; +}; +# define GNULIB_defined_struct_time_t_must_be_integral 1 +# endif + +/* Sleep for at least RQTP seconds unless interrupted, If interrupted, + return -1 and store the remaining time into RMTP. See + <http://www.opengroup.org/susv3xsh/nanosleep.html>. */ +# if 0 +# if GNULIB_PORTCHECK +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define nanosleep rpl_nanosleep +# endif +_GL_FUNCDECL_RPL (nanosleep, int, + (struct timespec const *__rqtp, struct timespec *__rmtp) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (nanosleep, int, + (struct timespec const *__rqtp, struct timespec *__rmtp)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (nanosleep, int, + (struct timespec const *__rqtp, struct timespec *__rmtp) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (nanosleep, int, + (struct timespec const *__rqtp, struct timespec *__rmtp)); +# endif +_GL_CXXALIASWARN (nanosleep); +# endif + +/* Initialize time conversion information. */ +# if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef tzset +# define tzset rpl_tzset +# endif +_GL_FUNCDECL_RPL (tzset, void, (void)); +_GL_CXXALIAS_RPL (tzset, void, (void)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (tzset, void, (void)); +# endif +_GL_CXXALIAS_SYS (tzset, void, (void)); +# endif +_GL_CXXALIASWARN (tzset); +# endif + +/* Return the 'time_t' representation of TP and normalize TP. */ +# if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mktime rpl_mktime +# endif +_GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp)); +# else +_GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp)); +# endif +_GL_CXXALIASWARN (mktime); +# endif + +/* Convert TIMER to RESULT, assuming local time and UTC respectively. See + <http://www.opengroup.org/susv3xsh/localtime_r.html> and + <http://www.opengroup.org/susv3xsh/gmtime_r.html>. */ +# if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef localtime_r +# define localtime_r rpl_localtime_r +# endif +_GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result)); +# endif +# if 1 +_GL_CXXALIASWARN (localtime_r); +# endif +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gmtime_r +# define gmtime_r rpl_gmtime_r +# endif +_GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result)); +# endif +# if 1 +_GL_CXXALIASWARN (gmtime_r); +# endif +# endif + +/* Convert TIMER to RESULT, assuming local time and UTC respectively. See + <http://www.opengroup.org/susv3xsh/localtime.html> and + <http://www.opengroup.org/susv3xsh/gmtime.html>. */ +# if 0 || 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef localtime +# define localtime rpl_localtime +# endif +_GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer)); +# else +_GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer)); +# endif +_GL_CXXALIASWARN (localtime); +# endif + +# if 0 || 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gmtime +# define gmtime rpl_gmtime +# endif +_GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer)); +# else +_GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer)); +# endif +_GL_CXXALIASWARN (gmtime); +# endif + +/* Parse BUF as a timestamp, assuming FORMAT specifies its layout, and store + the resulting broken-down time into TM. See + <http://www.opengroup.org/susv3xsh/strptime.html>. */ +# if 0 +# if ! 1 +_GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf, + char const *restrict __format, + struct tm *restrict __tm) + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +_GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf, + char const *restrict __format, + struct tm *restrict __tm)); +_GL_CXXALIASWARN (strptime); +# endif + +/* Convert *TP to a date and time string. See + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/ctime.html>. */ +# if 0 +# if GNULIB_PORTCHECK +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define ctime rpl_ctime +# endif +_GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp)); +# else +_GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp)); +# endif +_GL_CXXALIASWARN (ctime); +# endif + +/* Convert *TP to a date and time string. See + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html>. */ +# if 0 +# if GNULIB_PORTCHECK +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strftime rpl_strftime +# endif +_GL_FUNCDECL_RPL (strftime, size_t, (char *__buf, size_t __bufsize, + const char *__fmt, const struct tm *__tp) + _GL_ARG_NONNULL ((1, 3, 4))); +_GL_CXXALIAS_RPL (strftime, size_t, (char *__buf, size_t __bufsize, + const char *__fmt, const struct tm *__tp)); +# else +_GL_CXXALIAS_SYS (strftime, size_t, (char *__buf, size_t __bufsize, + const char *__fmt, const struct tm *__tp)); +# endif +_GL_CXXALIASWARN (strftime); +# endif + +# if defined _GNU_SOURCE && 1 && ! 0 +typedef struct tm_zone *timezone_t; +_GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name)); +_GL_CXXALIAS_SYS (tzalloc, timezone_t, (char const *__name)); +_GL_FUNCDECL_SYS (tzfree, void, (timezone_t __tz)); +_GL_CXXALIAS_SYS (tzfree, void, (timezone_t __tz)); +_GL_FUNCDECL_SYS (localtime_rz, struct tm *, + (timezone_t __tz, time_t const *restrict __timer, + struct tm *restrict __result) _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_SYS (localtime_rz, struct tm *, + (timezone_t __tz, time_t const *restrict __timer, + struct tm *restrict __result)); +_GL_FUNCDECL_SYS (mktime_z, time_t, + (timezone_t __tz, struct tm *restrict __result) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_SYS (mktime_z, time_t, + (timezone_t __tz, struct tm *restrict __result)); +# endif + +/* Convert TM to a time_t value, assuming UTC. */ +# if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef timegm +# define timegm rpl_timegm +# endif +_GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm)); +# else +# if ! 1 +_GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm)); +# endif +_GL_CXXALIASWARN (timegm); +# endif + +/* Encourage applications to avoid unsafe functions that can overrun + buffers when given outlandish struct tm values. Portable + applications should use strftime (or even sprintf) instead. */ +# if defined GNULIB_POSIXCHECK +# undef asctime +_GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - " + "better use strftime (or even sprintf) instead"); +# endif +# if defined GNULIB_POSIXCHECK +# undef asctime_r +_GL_WARN_ON_USE (asctime, "asctime_r can overrun buffers in some cases - " + "better use strftime (or even sprintf) instead"); +# endif +# if defined GNULIB_POSIXCHECK +# undef ctime +_GL_WARN_ON_USE (asctime, "ctime can overrun buffers in some cases - " + "better use strftime (or even sprintf) instead"); +# endif +# if defined GNULIB_POSIXCHECK +# undef ctime_r +_GL_WARN_ON_USE (asctime, "ctime_r can overrun buffers in some cases - " + "better use strftime (or even sprintf) instead"); +# endif + +#endif diff --git a/devspec.en_US/project/recutils/lib/time.in.h b/devspec.en_US/project/recutils/lib/time.in.h new file mode 100755 index 0000000..dd3b212 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/time.in.h @@ -0,0 +1,350 @@ +/* A more-standard <time.h>. + + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +/* Don't get in the way of glibc when it includes time.h merely to + declare a few standard symbols, rather than to declare all the + symbols. (However, skip this for MinGW as it treats __need_time_t + incompatibly.) Also, Solaris 8 <time.h> eventually includes itself + recursively; if that is happening, just include the system <time.h> + without adding our own declarations. */ +#if (((defined __need_time_t || defined __need_clock_t \ + || defined __need_timespec) \ + && !defined __MINGW32__) \ + || defined _@GUARD_PREFIX@_TIME_H) + +# @INCLUDE_NEXT@ @NEXT_TIME_H@ + +#else + +# define _@GUARD_PREFIX@_TIME_H + +# @INCLUDE_NEXT@ @NEXT_TIME_H@ + +/* NetBSD 5.0 mis-defines NULL. */ +# include <stddef.h> + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +/* Some systems don't define struct timespec (e.g., AIX 4.1). + Or they define it with the wrong member names or define it in <sys/time.h> + (e.g., FreeBSD circa 1997). Stock Mingw prior to 3.0 does not define it, + but the pthreads-win32 library defines it in <pthread.h>. */ +# if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@ +# if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +# include <sys/time.h> +# elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +# include <pthread.h> +# elif @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ +# include <unistd.h> +# else + +# ifdef __cplusplus +extern "C" { +# endif + +# if !GNULIB_defined_struct_timespec +# undef timespec +# define timespec rpl_timespec +struct timespec +{ + time_t tv_sec; + long int tv_nsec; +}; +# define GNULIB_defined_struct_timespec 1 +# endif + +# ifdef __cplusplus +} +# endif + +# endif +# endif + +# if !GNULIB_defined_struct_time_t_must_be_integral +/* Per http://austingroupbugs.net/view.php?id=327, POSIX requires + time_t to be an integer type, even though C99 permits floating + point. We don't know of any implementation that uses floating + point, and it is much easier to write code that doesn't have to + worry about that corner case, so we force the issue. */ +struct __time_t_must_be_integral { + unsigned int __floating_time_t_unsupported : (time_t) 1; +}; +# define GNULIB_defined_struct_time_t_must_be_integral 1 +# endif + +/* Sleep for at least RQTP seconds unless interrupted, If interrupted, + return -1 and store the remaining time into RMTP. See + <http://www.opengroup.org/susv3xsh/nanosleep.html>. */ +# if @GNULIB_NANOSLEEP@ +# if @REPLACE_NANOSLEEP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define nanosleep rpl_nanosleep +# endif +_GL_FUNCDECL_RPL (nanosleep, int, + (struct timespec const *__rqtp, struct timespec *__rmtp) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (nanosleep, int, + (struct timespec const *__rqtp, struct timespec *__rmtp)); +# else +# if ! @HAVE_NANOSLEEP@ +_GL_FUNCDECL_SYS (nanosleep, int, + (struct timespec const *__rqtp, struct timespec *__rmtp) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (nanosleep, int, + (struct timespec const *__rqtp, struct timespec *__rmtp)); +# endif +_GL_CXXALIASWARN (nanosleep); +# endif + +/* Initialize time conversion information. */ +# if @GNULIB_TZSET@ +# if @REPLACE_TZSET@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef tzset +# define tzset rpl_tzset +# endif +_GL_FUNCDECL_RPL (tzset, void, (void)); +_GL_CXXALIAS_RPL (tzset, void, (void)); +# else +# if ! @HAVE_TZSET@ +_GL_FUNCDECL_SYS (tzset, void, (void)); +# endif +_GL_CXXALIAS_SYS (tzset, void, (void)); +# endif +_GL_CXXALIASWARN (tzset); +# endif + +/* Return the 'time_t' representation of TP and normalize TP. */ +# if @GNULIB_MKTIME@ +# if @REPLACE_MKTIME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define mktime rpl_mktime +# endif +_GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp)); +# else +_GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp)); +# endif +_GL_CXXALIASWARN (mktime); +# endif + +/* Convert TIMER to RESULT, assuming local time and UTC respectively. See + <http://www.opengroup.org/susv3xsh/localtime_r.html> and + <http://www.opengroup.org/susv3xsh/gmtime_r.html>. */ +# if @GNULIB_TIME_R@ +# if @REPLACE_LOCALTIME_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef localtime_r +# define localtime_r rpl_localtime_r +# endif +_GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result)); +# else +# if ! @HAVE_DECL_LOCALTIME_R@ +_GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result)); +# endif +# if @HAVE_DECL_LOCALTIME_R@ +_GL_CXXALIASWARN (localtime_r); +# endif +# if @REPLACE_LOCALTIME_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gmtime_r +# define gmtime_r rpl_gmtime_r +# endif +_GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result)); +# else +# if ! @HAVE_DECL_LOCALTIME_R@ +_GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, + struct tm *restrict __result)); +# endif +# if @HAVE_DECL_LOCALTIME_R@ +_GL_CXXALIASWARN (gmtime_r); +# endif +# endif + +/* Convert TIMER to RESULT, assuming local time and UTC respectively. See + <http://www.opengroup.org/susv3xsh/localtime.html> and + <http://www.opengroup.org/susv3xsh/gmtime.html>. */ +# if @GNULIB_LOCALTIME@ || @REPLACE_LOCALTIME@ +# if @REPLACE_LOCALTIME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef localtime +# define localtime rpl_localtime +# endif +_GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer)); +# else +_GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer)); +# endif +_GL_CXXALIASWARN (localtime); +# endif + +# if 0 || @REPLACE_GMTIME@ +# if @REPLACE_GMTIME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gmtime +# define gmtime rpl_gmtime +# endif +_GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer)); +# else +_GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer)); +# endif +_GL_CXXALIASWARN (gmtime); +# endif + +/* Parse BUF as a timestamp, assuming FORMAT specifies its layout, and store + the resulting broken-down time into TM. See + <http://www.opengroup.org/susv3xsh/strptime.html>. */ +# if @GNULIB_STRPTIME@ +# if ! @HAVE_STRPTIME@ +_GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf, + char const *restrict __format, + struct tm *restrict __tm) + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +_GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf, + char const *restrict __format, + struct tm *restrict __tm)); +_GL_CXXALIASWARN (strptime); +# endif + +/* Convert *TP to a date and time string. See + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/ctime.html>. */ +# if @GNULIB_CTIME@ +# if @REPLACE_CTIME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define ctime rpl_ctime +# endif +_GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp)); +# else +_GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp)); +# endif +_GL_CXXALIASWARN (ctime); +# endif + +/* Convert *TP to a date and time string. See + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html>. */ +# if @GNULIB_STRFTIME@ +# if @REPLACE_STRFTIME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define strftime rpl_strftime +# endif +_GL_FUNCDECL_RPL (strftime, size_t, (char *__buf, size_t __bufsize, + const char *__fmt, const struct tm *__tp) + _GL_ARG_NONNULL ((1, 3, 4))); +_GL_CXXALIAS_RPL (strftime, size_t, (char *__buf, size_t __bufsize, + const char *__fmt, const struct tm *__tp)); +# else +_GL_CXXALIAS_SYS (strftime, size_t, (char *__buf, size_t __bufsize, + const char *__fmt, const struct tm *__tp)); +# endif +_GL_CXXALIASWARN (strftime); +# endif + +# if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@ +typedef struct tm_zone *timezone_t; +_GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name)); +_GL_CXXALIAS_SYS (tzalloc, timezone_t, (char const *__name)); +_GL_FUNCDECL_SYS (tzfree, void, (timezone_t __tz)); +_GL_CXXALIAS_SYS (tzfree, void, (timezone_t __tz)); +_GL_FUNCDECL_SYS (localtime_rz, struct tm *, + (timezone_t __tz, time_t const *restrict __timer, + struct tm *restrict __result) _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_SYS (localtime_rz, struct tm *, + (timezone_t __tz, time_t const *restrict __timer, + struct tm *restrict __result)); +_GL_FUNCDECL_SYS (mktime_z, time_t, + (timezone_t __tz, struct tm *restrict __result) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_SYS (mktime_z, time_t, + (timezone_t __tz, struct tm *restrict __result)); +# endif + +/* Convert TM to a time_t value, assuming UTC. */ +# if @GNULIB_TIMEGM@ +# if @REPLACE_TIMEGM@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef timegm +# define timegm rpl_timegm +# endif +_GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm)); +# else +# if ! @HAVE_TIMEGM@ +_GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm)); +# endif +_GL_CXXALIASWARN (timegm); +# endif + +/* Encourage applications to avoid unsafe functions that can overrun + buffers when given outlandish struct tm values. Portable + applications should use strftime (or even sprintf) instead. */ +# if defined GNULIB_POSIXCHECK +# undef asctime +_GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - " + "better use strftime (or even sprintf) instead"); +# endif +# if defined GNULIB_POSIXCHECK +# undef asctime_r +_GL_WARN_ON_USE (asctime, "asctime_r can overrun buffers in some cases - " + "better use strftime (or even sprintf) instead"); +# endif +# if defined GNULIB_POSIXCHECK +# undef ctime +_GL_WARN_ON_USE (asctime, "ctime can overrun buffers in some cases - " + "better use strftime (or even sprintf) instead"); +# endif +# if defined GNULIB_POSIXCHECK +# undef ctime_r +_GL_WARN_ON_USE (asctime, "ctime_r can overrun buffers in some cases - " + "better use strftime (or even sprintf) instead"); +# endif + +#endif diff --git a/devspec.en_US/project/recutils/lib/time_r.c b/devspec.en_US/project/recutils/lib/time_r.c new file mode 100755 index 0000000..a701ccc --- /dev/null +++ b/devspec.en_US/project/recutils/lib/time_r.c @@ -0,0 +1,44 @@ +/* Reentrant time functions like localtime_r. + + Copyright (C) 2003, 2006-2007, 2010-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert. */ + +#include <config.h> + +#include <time.h> + +static struct tm * +copy_tm_result (struct tm *dest, struct tm const *src) +{ + if (! src) + return 0; + *dest = *src; + return dest; +} + + +struct tm * +gmtime_r (time_t const * restrict t, struct tm * restrict tp) +{ + return copy_tm_result (tp, gmtime (t)); +} + +struct tm * +localtime_r (time_t const * restrict t, struct tm * restrict tp) +{ + return copy_tm_result (tp, localtime (t)); +} diff --git a/devspec.en_US/project/recutils/lib/time_rz.c b/devspec.en_US/project/recutils/lib/time_rz.c new file mode 100755 index 0000000..42ae3d3 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/time_rz.c @@ -0,0 +1,344 @@ +/* Time zone functions such as tzalloc and localtime_rz + + Copyright 2015-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert. */ + +/* Although this module is not thread-safe, any races should be fairly + rare and reasonably benign. For complete thread-safety, use a C + library with a working timezone_t type, so that this module is not + needed. */ + +#include <config.h> + +#include <time.h> + +#include <errno.h> +#include <limits.h> +#include <stdbool.h> +#include <stddef.h> +#include <stdlib.h> +#include <string.h> + +#include "flexmember.h" +#include "time-internal.h" + +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + +/* The approximate size to use for small allocation requests. This is + the largest "small" request for the GNU C library malloc. */ +enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; + +/* Minimum size of the ABBRS member of struct tm_zone. ABBRS is larger + only in the unlikely case where an abbreviation longer than this is + used. */ +enum { ABBR_SIZE_MIN = DEFAULT_MXFAST - offsetof (struct tm_zone, abbrs) }; + +/* Magic cookie timezone_t value, for local time. It differs from + NULL and from all other timezone_t values. Only the address + matters; the pointer is never dereferenced. */ +static timezone_t const local_tz = (timezone_t) 1; + +#if HAVE_TM_ZONE || HAVE_TZNAME + +/* Return true if the values A and B differ according to the rules for + tm_isdst: A and B differ if one is zero and the other positive. */ +static bool +isdst_differ (int a, int b) +{ + return !a != !b && 0 <= a && 0 <= b; +} + +/* Return true if A and B are equal. */ +static int +equal_tm (const struct tm *a, const struct tm *b) +{ + return ! ((a->tm_sec ^ b->tm_sec) + | (a->tm_min ^ b->tm_min) + | (a->tm_hour ^ b->tm_hour) + | (a->tm_mday ^ b->tm_mday) + | (a->tm_mon ^ b->tm_mon) + | (a->tm_year ^ b->tm_year) + | isdst_differ (a->tm_isdst, b->tm_isdst)); +} + +#endif + +/* Copy to ABBRS the abbreviation at ABBR with size ABBR_SIZE (this + includes its trailing null byte). Append an extra null byte to + mark the end of ABBRS. */ +static void +extend_abbrs (char *abbrs, char const *abbr, size_t abbr_size) +{ + memcpy (abbrs, abbr, abbr_size); + abbrs[abbr_size] = '\0'; +} + +/* Return a newly allocated time zone for NAME, or NULL on failure. + A null NAME stands for wall clock time (which is like unset TZ). */ +timezone_t +tzalloc (char const *name) +{ + size_t name_size = name ? strlen (name) + 1 : 0; + size_t abbr_size = name_size < ABBR_SIZE_MIN ? ABBR_SIZE_MIN : name_size + 1; + timezone_t tz = malloc (FLEXSIZEOF (struct tm_zone, abbrs, abbr_size)); + if (tz) + { + tz->next = NULL; +#if HAVE_TZNAME && !HAVE_TM_ZONE + tz->tzname_copy[0] = tz->tzname_copy[1] = NULL; +#endif + tz->tz_is_set = !!name; + tz->abbrs[0] = '\0'; + if (name) + extend_abbrs (tz->abbrs, name, name_size); + } + return tz; +} + +/* Save into TZ any nontrivial time zone abbreviation used by TM, and + update *TM (if HAVE_TM_ZONE) or *TZ (if !HAVE_TM_ZONE && + HAVE_TZNAME) if they use the abbreviation. Return true if + successful, false (setting errno) otherwise. */ +static bool +save_abbr (timezone_t tz, struct tm *tm) +{ +#if HAVE_TM_ZONE || HAVE_TZNAME + char const *zone = NULL; + char *zone_copy = (char *) ""; + +# if HAVE_TZNAME + int tzname_index = -1; +# endif + +# if HAVE_TM_ZONE + zone = tm->tm_zone; +# endif + +# if HAVE_TZNAME + if (! (zone && *zone) && 0 <= tm->tm_isdst) + { + tzname_index = tm->tm_isdst != 0; + zone = tzname[tzname_index]; + } +# endif + + /* No need to replace null zones, or zones within the struct tm. */ + if (!zone || ((char *) tm <= zone && zone < (char *) (tm + 1))) + return true; + + if (*zone) + { + zone_copy = tz->abbrs; + + while (strcmp (zone_copy, zone) != 0) + { + if (! (*zone_copy || (zone_copy == tz->abbrs && tz->tz_is_set))) + { + size_t zone_size = strlen (zone) + 1; + size_t zone_used = zone_copy - tz->abbrs; + if (SIZE_MAX - zone_used < zone_size) + { + errno = ENOMEM; + return false; + } + if (zone_used + zone_size < ABBR_SIZE_MIN) + extend_abbrs (zone_copy, zone, zone_size); + else + { + tz = tz->next = tzalloc (zone); + if (!tz) + return false; + tz->tz_is_set = 0; + zone_copy = tz->abbrs; + } + break; + } + + zone_copy += strlen (zone_copy) + 1; + if (!*zone_copy && tz->next) + { + tz = tz->next; + zone_copy = tz->abbrs; + } + } + } + + /* Replace the zone name so that its lifetime matches that of TZ. */ +# if HAVE_TM_ZONE + tm->tm_zone = zone_copy; +# else + if (0 <= tzname_index) + tz->tzname_copy[tzname_index] = zone_copy; +# endif +#endif + + return true; +} + +/* Free a time zone. */ +void +tzfree (timezone_t tz) +{ + if (tz != local_tz) + while (tz) + { + timezone_t next = tz->next; + free (tz); + tz = next; + } +} + +/* Get and set the TZ environment variable. These functions can be + overridden by programs like Emacs that manage their own environment. */ + +#ifndef getenv_TZ +static char * +getenv_TZ (void) +{ + return getenv ("TZ"); +} +#endif + +#ifndef setenv_TZ +static int +setenv_TZ (char const *tz) +{ + return tz ? setenv ("TZ", tz, 1) : unsetenv ("TZ"); +} +#endif + +/* Change the environment to match the specified timezone_t value. + Return true if successful, false (setting errno) otherwise. */ +static bool +change_env (timezone_t tz) +{ + if (setenv_TZ (tz->tz_is_set ? tz->abbrs : NULL) != 0) + return false; + tzset (); + return true; +} + +/* Temporarily set the time zone to TZ, which must not be null. + Return LOCAL_TZ if the time zone setting is already correct. + Otherwise return a newly allocated time zone representing the old + setting, or NULL (setting errno) on failure. */ +static timezone_t +set_tz (timezone_t tz) +{ + char *env_tz = getenv_TZ (); + if (env_tz + ? tz->tz_is_set && strcmp (tz->abbrs, env_tz) == 0 + : !tz->tz_is_set) + return local_tz; + else + { + timezone_t old_tz = tzalloc (env_tz); + if (!old_tz) + return old_tz; + if (! change_env (tz)) + { + int saved_errno = errno; + tzfree (old_tz); + errno = saved_errno; + return NULL; + } + return old_tz; + } +} + +/* Restore an old setting returned by set_tz. It must not be null. + Return true (preserving errno) if successful, false (setting errno) + otherwise. */ +static bool +revert_tz (timezone_t tz) +{ + if (tz == local_tz) + return true; + else + { + int saved_errno = errno; + bool ok = change_env (tz); + if (!ok) + saved_errno = errno; + tzfree (tz); + errno = saved_errno; + return ok; + } +} + +/* Use time zone TZ to compute localtime_r (T, TM). */ +struct tm * +localtime_rz (timezone_t tz, time_t const *t, struct tm *tm) +{ +#ifdef HAVE_LOCALTIME_INFLOOP_BUG + /* The -67768038400665599 comes from: + https://lists.gnu.org/r/bug-gnulib/2017-07/msg00142.html + On affected platforms the greatest POSIX-compatible time_t value + that could return nonnull is 67768036191766798 (when + TZ="XXX24:59:59" it resolves to the year 2**31 - 1 + 1900, on + 12-31 at 23:59:59), so test for that too while we're in the + neighborhood. */ + if (! (-67768038400665599 <= *t && *t <= 67768036191766798)) + { + errno = EOVERFLOW; + return NULL; + } +#endif + + if (!tz) + return gmtime_r (t, tm); + else + { + timezone_t old_tz = set_tz (tz); + if (old_tz) + { + bool abbr_saved = localtime_r (t, tm) && save_abbr (tz, tm); + if (revert_tz (old_tz) && abbr_saved) + return tm; + } + return NULL; + } +} + +/* Use time zone TZ to compute mktime (TM). */ +time_t +mktime_z (timezone_t tz, struct tm *tm) +{ + if (!tz) + return timegm (tm); + else + { + timezone_t old_tz = set_tz (tz); + if (old_tz) + { + time_t t = mktime (tm); +#if HAVE_TM_ZONE || HAVE_TZNAME + time_t badtime = -1; + struct tm tm_1; + if ((t != badtime + || (localtime_r (&t, &tm_1) && equal_tm (tm, &tm_1))) + && !save_abbr (tz, tm)) + t = badtime; +#endif + if (revert_tz (old_tz)) + return t; + } + return -1; + } +} diff --git a/devspec.en_US/project/recutils/lib/timegm.c b/devspec.en_US/project/recutils/lib/timegm.c new file mode 100755 index 0000000..2ca5744 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/timegm.c @@ -0,0 +1,34 @@ +/* Convert UTC calendar time to simple time. Like mktime but assumes UTC. + + Copyright (C) 1994-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#ifndef _LIBC +# include <config.h> +#endif + +#include <time.h> + +#include "mktime-internal.h" + +time_t +timegm (struct tm *tmp) +{ + static mktime_offset_t gmtime_offset; + tmp->tm_isdst = 0; + return __mktime_internal (tmp, __gmtime_r, &gmtime_offset); +} diff --git a/devspec.en_US/project/recutils/lib/timespec.c b/devspec.en_US/project/recutils/lib/timespec.c new file mode 100755 index 0000000..2b6098e --- /dev/null +++ b/devspec.en_US/project/recutils/lib/timespec.c @@ -0,0 +1,3 @@ +#include <config.h> +#define _GL_TIMESPEC_INLINE _GL_EXTERN_INLINE +#include "timespec.h" diff --git a/devspec.en_US/project/recutils/lib/timespec.h b/devspec.en_US/project/recutils/lib/timespec.h new file mode 100755 index 0000000..26f1bc1 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/timespec.h @@ -0,0 +1,136 @@ +/* timespec -- System time interface + + Copyright (C) 2000, 2002, 2004-2005, 2007, 2009-2019 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#if ! defined TIMESPEC_H +#define TIMESPEC_H + +#include <time.h> + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_TIMESPEC_INLINE +# define _GL_TIMESPEC_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#include "arg-nonnull.h" +#include "verify.h" + +/* Inverse resolution of timespec timestamps (in units per second), + and log base 10 of the inverse resolution. */ + +enum { TIMESPEC_HZ = 1000000000 }; +enum { LOG10_TIMESPEC_HZ = 9 }; + +/* Obsolescent names for backward compatibility. + They are misnomers, because TIMESPEC_RESOLUTION is not a resolution. */ + +enum { TIMESPEC_RESOLUTION = TIMESPEC_HZ }; +enum { LOG10_TIMESPEC_RESOLUTION = LOG10_TIMESPEC_HZ }; + +/* Return a timespec with seconds S and nanoseconds NS. */ + +_GL_TIMESPEC_INLINE struct timespec +make_timespec (time_t s, long int ns) +{ + struct timespec r; + r.tv_sec = s; + r.tv_nsec = ns; + return r; +} + +/* Return negative, zero, positive if A < B, A == B, A > B, respectively. + + For each timestamp T, this code assumes that either: + + * T.tv_nsec is in the range 0..999999999; or + * T.tv_sec corresponds to a valid leap second on a host that supports + leap seconds, and T.tv_nsec is in the range 1000000000..1999999999; or + * T.tv_sec is the minimum time_t value and T.tv_nsec is -1; or + T.tv_sec is the maximum time_t value and T.tv_nsec is 2000000000. + This allows for special struct timespec values that are less or + greater than all possible valid timestamps. + + In all these cases, it is safe to subtract two tv_nsec values and + convert the result to integer without worrying about overflow on + any platform of interest to the GNU project, since all such + platforms have 32-bit int or wider. + + Replacing "a.tv_nsec - b.tv_nsec" with something like + "a.tv_nsec < b.tv_nsec ? -1 : a.tv_nsec > b.tv_nsec" would cause + this function to work in some cases where the above assumption is + violated, but not in all cases (e.g., a.tv_sec==1, a.tv_nsec==-2, + b.tv_sec==0, b.tv_nsec==999999999) and is arguably not worth the + extra instructions. Using a subtraction has the advantage of + detecting some invalid cases on platforms that detect integer + overflow. */ + +_GL_TIMESPEC_INLINE int _GL_ATTRIBUTE_PURE +timespec_cmp (struct timespec a, struct timespec b) +{ + if (a.tv_sec < b.tv_sec) + return -1; + if (a.tv_sec > b.tv_sec) + return 1; + + /* Pacify gcc -Wstrict-overflow (bleeding-edge circa 2017-10-02). See: + https://lists.gnu.org/r/bug-gnulib/2017-10/msg00006.html */ + assume (-1 <= a.tv_nsec && a.tv_nsec <= 2 * TIMESPEC_HZ); + assume (-1 <= b.tv_nsec && b.tv_nsec <= 2 * TIMESPEC_HZ); + + return a.tv_nsec - b.tv_nsec; +} + +/* Return -1, 0, 1, depending on the sign of A. A.tv_nsec must be + nonnegative. */ +_GL_TIMESPEC_INLINE int _GL_ATTRIBUTE_PURE +timespec_sign (struct timespec a) +{ + return a.tv_sec < 0 ? -1 : a.tv_sec || a.tv_nsec; +} + +struct timespec timespec_add (struct timespec, struct timespec) + _GL_ATTRIBUTE_CONST; +struct timespec timespec_sub (struct timespec, struct timespec) + _GL_ATTRIBUTE_CONST; +struct timespec dtotimespec (double) + _GL_ATTRIBUTE_CONST; + +/* Return an approximation to A, of type 'double'. */ +_GL_TIMESPEC_INLINE double +timespectod (struct timespec a) +{ + return a.tv_sec + a.tv_nsec / 1e9; +} + +struct timespec current_timespec (void); +void gettime (struct timespec *) _GL_ARG_NONNULL ((1)); +int settime (struct timespec const *) _GL_ARG_NONNULL ((1)); + +#ifdef __cplusplus +} +#endif + +_GL_INLINE_HEADER_END + +#endif diff --git a/devspec.en_US/project/recutils/lib/tmpdir.c b/devspec.en_US/project/recutils/lib/tmpdir.c new file mode 100755 index 0000000..7b50914 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/tmpdir.c @@ -0,0 +1,159 @@ +/* Copyright (C) 1999, 2001-2002, 2006, 2009-2019 Free Software Foundation, + Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Extracted from sysdeps/posix/tempname.c. */ + +#include <config.h> + +/* Specification. */ +#include "tmpdir.h" + +#include <stdbool.h> +#include <stdlib.h> +#include <string.h> + +#include <errno.h> +#ifndef __set_errno +# define __set_errno(Val) errno = (Val) +#endif + +#include <stdio.h> +#ifndef P_tmpdir +# ifdef _P_tmpdir /* native Windows */ +# define P_tmpdir _P_tmpdir +# else +# define P_tmpdir "/tmp" +# endif +#endif + +#include <sys/stat.h> + +#if defined _WIN32 && ! defined __CYGWIN__ +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include <windows.h> +#endif + +#include "pathmax.h" + +#if _LIBC +# define struct_stat64 struct stat64 +#else +# define struct_stat64 struct stat +# define __libc_secure_getenv secure_getenv +# define __xstat64(version, path, buf) stat (path, buf) +#endif + +/* Pathname support. + ISSLASH(C) tests whether C is a directory separator character. + */ +#if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ + /* Native Windows, Cygwin, OS/2, DOS */ +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +#else + /* Unix */ +# define ISSLASH(C) ((C) == '/') +#endif + + +/* Return nonzero if DIR is an existent directory. */ +static bool +direxists (const char *dir) +{ + struct_stat64 buf; + return __xstat64 (_STAT_VER, dir, &buf) == 0 && S_ISDIR (buf.st_mode); +} + +/* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is + non-null and exists, uses it; otherwise uses the first of $TMPDIR, + P_tmpdir, /tmp that exists. Copies into TMPL a template suitable + for use with mk[s]temp. Will fail (-1) if DIR is non-null and + doesn't exist, none of the searched dirs exists, or there's not + enough space in TMPL. */ +int +path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx, + bool try_tmpdir) +{ + const char *d; + size_t dlen, plen; + bool add_slash; + + if (!pfx || !pfx[0]) + { + pfx = "file"; + plen = 4; + } + else + { + plen = strlen (pfx); + if (plen > 5) + plen = 5; + } + + if (try_tmpdir) + { + d = __libc_secure_getenv ("TMPDIR"); + if (d != NULL && direxists (d)) + dir = d; + else if (dir != NULL && direxists (dir)) + /* nothing */ ; + else + dir = NULL; + } + if (dir == NULL) + { +#if defined _WIN32 && ! defined __CYGWIN__ + char dirbuf[PATH_MAX]; + DWORD retval; + + /* Find Windows temporary file directory. + We try this before P_tmpdir because Windows defines P_tmpdir to "\\" + and will therefore try to put all temporary files in the root + directory (unless $TMPDIR is set). */ + retval = GetTempPath (PATH_MAX, dirbuf); + if (retval > 0 && retval < PATH_MAX && direxists (dirbuf)) + dir = dirbuf; + else +#endif + if (direxists (P_tmpdir)) + dir = P_tmpdir; + else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp")) + dir = "/tmp"; + else + { + __set_errno (ENOENT); + return -1; + } + } + + dlen = strlen (dir); +#ifdef __VMS + add_slash = 0; +#else + add_slash = dlen != 0 && !ISSLASH (dir[dlen - 1]); +#endif + + /* check we have room for "${dir}/${pfx}XXXXXX\0" */ + if (tmpl_len < dlen + add_slash + plen + 6 + 1) + { + __set_errno (EINVAL); + return -1; + } + + memcpy (tmpl, dir, dlen); + sprintf (tmpl + dlen, &"/%.*sXXXXXX"[!add_slash], (int) plen, pfx); + return 0; +} diff --git a/devspec.en_US/project/recutils/lib/tmpdir.h b/devspec.en_US/project/recutils/lib/tmpdir.h new file mode 100755 index 0000000..5689da4 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/tmpdir.h @@ -0,0 +1,26 @@ +/* Determine a temporary directory. + Copyright (C) 2001-2002, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <stdbool.h> +#include <stddef.h> + +/* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is + non-null and exists, uses it; otherwise uses the first of $TMPDIR, + P_tmpdir, /tmp that exists. Copies into TMPL a template suitable + for use with mk[s]temp. Will fail (-1) if DIR is non-null and + doesn't exist, none of the searched dirs exists, or there's not + enough space in TMPL. */ +extern int path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx, bool try_tmpdir); diff --git a/devspec.en_US/project/recutils/lib/tzset.c b/devspec.en_US/project/recutils/lib/tzset.c new file mode 100755 index 0000000..a77633d --- /dev/null +++ b/devspec.en_US/project/recutils/lib/tzset.c @@ -0,0 +1,83 @@ +/* Provide tzset for systems that don't have it or for which it's broken. + + Copyright (C) 2001-2003, 2005-2007, 2009-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* written by Jim Meyering */ + +#include <config.h> + +/* Specification. */ +#include <time.h> + +#include "localtime-buffer.h" + +/* This is a wrapper for tzset, for systems on which tzset may clobber + the static buffer used for localtime's result. + Work around the bug in some systems whereby tzset clobbers the + static buffer that localtime uses for its return value. The + tzset function from Solaris 2.5, 2.5.1, and 2.6 has this problem. */ + +void +tzset (void) +#undef tzset +{ +#if TZSET_CLOBBERS_LOCALTIME + /* Save and restore the contents of the buffer used for localtime's + result around the call to tzset. */ + struct tm save = *localtime_buffer_addr; +#endif + +#if defined _WIN32 && ! defined __CYGWIN__ + /* Rectify the value of the environment variable TZ. + There are four possible kinds of such values: + - Traditional US time zone names, e.g. "PST8PDT". Syntax: see + <https://msdn.microsoft.com/en-us/library/90s5c885.aspx> + - Time zone names based on geography, that contain one or more + slashes, e.g. "Europe/Moscow". + - Time zone names based on geography, without slashes, e.g. + "Singapore". + - Time zone names that contain explicit DST rules. Syntax: see + <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03> + The Microsoft CRT understands only the first kind. It produces incorrect + results if the value of TZ is of the other kinds. + But in a Cygwin environment, /etc/profile.d/tzset.sh sets TZ to a value + of the second kind for most geographies, or of the first kind in a few + other geographies. If it is of the second kind, neutralize it. For the + Microsoft CRT, an absent or empty TZ means the time zone that the user + has set in the Windows Control Panel. + If the value of TZ is of the third or fourth kind -- Cygwin programs + understand these syntaxes as well --, it does not matter whether we + neutralize it or not, since these values occur only when a Cygwin user + has set TZ explicitly; this case is 1. rare and 2. under the user's + responsibility. */ + const char *tz = getenv ("TZ"); + if (tz != NULL && strchr (tz, '/') != NULL) + _putenv ("TZ="); + + /* On native Windows, tzset() is deprecated. Use _tzset() instead. See + https://msdn.microsoft.com/en-us/library/ms235451.aspx + https://msdn.microsoft.com/en-us/library/90s5c885.aspx */ + _tzset (); +#elif HAVE_TZSET + tzset (); +#else + /* Do nothing. Avoid infinite recursion. */ +#endif + +#if TZSET_CLOBBERS_LOCALTIME + *localtime_buffer_addr = save; +#endif +} diff --git a/devspec.en_US/project/recutils/lib/unistd.c b/devspec.en_US/project/recutils/lib/unistd.c new file mode 100755 index 0000000..72bad1c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/unistd.c @@ -0,0 +1,4 @@ +#include <config.h> +#define _GL_UNISTD_INLINE _GL_EXTERN_INLINE +#include "unistd.h" +typedef int dummy; diff --git a/devspec.en_US/project/recutils/lib/unistd.h b/devspec.en_US/project/recutils/lib/unistd.h new file mode 100755 index 0000000..c081205 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/unistd.h @@ -0,0 +1,2142 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Substitute for and wrapper around <unistd.h>. + Copyright (C) 2003-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_UNISTD_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#ifdef _GL_INCLUDING_UNISTD_H +/* Special invocation convention: + - On Mac OS X 10.3.9 we have a sequence of nested includes + <unistd.h> -> <signal.h> -> <pthread.h> -> <unistd.h> + In this situation, the functions are not yet declared, therefore we cannot + provide the C++ aliases. */ + +#include_next <unistd.h> + +#else +/* Normal invocation convention. */ + +/* The include_next requires a split double-inclusion guard. */ +#if 1 +# define _GL_INCLUDING_UNISTD_H +# include_next <unistd.h> +# undef _GL_INCLUDING_UNISTD_H +#endif + +/* Get all possible declarations of gethostname(). */ +#if 0 && 0 \ + && !defined _GL_INCLUDING_WINSOCK2_H +# define _GL_INCLUDING_WINSOCK2_H +# include <winsock2.h> +# undef _GL_INCLUDING_WINSOCK2_H +#endif + +#if !defined _GL_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H +#define _GL_UNISTD_H + +/* NetBSD 5.0 mis-defines NULL. Also get size_t. */ +#include <stddef.h> + +/* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>. */ +/* MSVC declares 'unlink' in <stdio.h>, not in <unistd.h>. We must include + it before we #define unlink rpl_unlink. */ +/* Cygwin 1.7.1 declares symlinkat in <stdio.h>, not in <unistd.h>. */ +/* But avoid namespace pollution on glibc systems. */ +#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ + || ((0 || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__)) \ + || ((0 || defined GNULIB_POSIXCHECK) \ + && defined __CYGWIN__)) \ + && ! defined __GLIBC__ +# include <stdio.h> +#endif + +/* Cygwin 1.7.1 declares unlinkat in <fcntl.h>, not in <unistd.h>. */ +/* But avoid namespace pollution on glibc systems. */ +#if (0 || defined GNULIB_POSIXCHECK) && defined __CYGWIN__ \ + && ! defined __GLIBC__ +# include <fcntl.h> +#endif + +/* mingw fails to declare _exit in <unistd.h>. */ +/* mingw, MSVC, BeOS, Haiku declare environ in <stdlib.h>, not in + <unistd.h>. */ +/* Solaris declares getcwd not only in <unistd.h> but also in <stdlib.h>. */ +/* OSF Tru64 Unix cannot see gnulib rpl_strtod when system <stdlib.h> is + included here. */ +/* But avoid namespace pollution on glibc systems. */ +#if !defined __GLIBC__ && !defined __osf__ +# define __need_system_stdlib_h +# include <stdlib.h> +# undef __need_system_stdlib_h +#endif + +/* Native Windows platforms declare chdir, getcwd, rmdir in + <io.h> and/or <direct.h>, not in <unistd.h>. + They also declare access(), chmod(), close(), dup(), dup2(), isatty(), + lseek(), read(), unlink(), write() in <io.h>. */ +#if ((1 || 0 || 1 \ + || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__)) +# include <io.h> /* mingw32, mingw64 */ +# include <direct.h> /* mingw64, MSVC 9 */ +#elif (1 || 0 || 1 || 0 \ + || 1 || 0 || 0 || 0 \ + || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) +# include <io.h> +#endif + +/* AIX and OSF/1 5.1 declare getdomainname in <netdb.h>, not in <unistd.h>. + NonStop Kernel declares gethostname in <netdb.h>, not in <unistd.h>. */ +/* But avoid namespace pollution on glibc systems. */ +#if ((0 && (defined _AIX || defined __osf__)) \ + || (0 && defined __TANDEM)) \ + && !defined __GLIBC__ +# include <netdb.h> +#endif + +/* MSVC defines off_t in <sys/types.h>. + May also define off_t to a 64-bit type on native Windows. */ +#if !1 || 0 +/* Get off_t. */ +# include <sys/types.h> +#endif + +#if (0 || 0 \ + || 1 || 0 \ + || 0 || 0 || defined GNULIB_POSIXCHECK) +/* Get ssize_t. */ +# include <sys/types.h> +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +/* Get getopt(), optarg, optind, opterr, optopt. */ +#if 0 && !defined _GL_SYSTEM_GETOPT +# include <getopt-cdefs.h> +# include <getopt-pfx-core.h> +#endif + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_UNISTD_INLINE +# define _GL_UNISTD_INLINE _GL_INLINE +#endif + +/* Hide some function declarations from <winsock2.h>. */ + +#if 0 && 0 +# if !defined _GL_SYS_SOCKET_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef socket +# define socket socket_used_without_including_sys_socket_h +# undef connect +# define connect connect_used_without_including_sys_socket_h +# undef accept +# define accept accept_used_without_including_sys_socket_h +# undef bind +# define bind bind_used_without_including_sys_socket_h +# undef getpeername +# define getpeername getpeername_used_without_including_sys_socket_h +# undef getsockname +# define getsockname getsockname_used_without_including_sys_socket_h +# undef getsockopt +# define getsockopt getsockopt_used_without_including_sys_socket_h +# undef listen +# define listen listen_used_without_including_sys_socket_h +# undef recv +# define recv recv_used_without_including_sys_socket_h +# undef send +# define send send_used_without_including_sys_socket_h +# undef recvfrom +# define recvfrom recvfrom_used_without_including_sys_socket_h +# undef sendto +# define sendto sendto_used_without_including_sys_socket_h +# undef setsockopt +# define setsockopt setsockopt_used_without_including_sys_socket_h +# undef shutdown +# define shutdown shutdown_used_without_including_sys_socket_h +# else + _GL_WARN_ON_USE (socket, + "socket() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (connect, + "connect() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (accept, + "accept() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (bind, + "bind() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (getpeername, + "getpeername() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (getsockname, + "getsockname() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (getsockopt, + "getsockopt() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (listen, + "listen() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (recv, + "recv() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (send, + "send() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (recvfrom, + "recvfrom() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (sendto, + "sendto() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (setsockopt, + "setsockopt() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (shutdown, + "shutdown() used without including <sys/socket.h>"); +# endif +# endif +# if !defined _GL_SYS_SELECT_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef select +# define select select_used_without_including_sys_select_h +# else + _GL_WARN_ON_USE (select, + "select() used without including <sys/select.h>"); +# endif +# endif +#endif + + +/* OS/2 EMX lacks these macros. */ +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +/* Ensure *_OK macros exist. */ +#ifndef F_OK +# define F_OK 0 +# define X_OK 1 +# define W_OK 2 +# define R_OK 4 +#endif + + +/* Declare overridden functions. */ + + +#if defined GNULIB_POSIXCHECK +/* The access() function is a security risk. */ +_GL_WARN_ON_USE (access, "the access function is a security risk - " + "use the gnulib module faccessat instead"); +#endif + + +#if 1 +_GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); +_GL_CXXALIASWARN (chdir); +#elif defined GNULIB_POSIXCHECK +# undef chdir +# if HAVE_RAW_DECL_CHDIR +_GL_WARN_ON_USE (chown, "chdir is not always in <unistd.h> - " + "use gnulib module chdir for portability"); +# endif +#endif + + +#if 0 +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/chown.html. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef chown +# define chown rpl_chown +# endif +_GL_FUNCDECL_RPL (chown, int, (const char *file, uid_t uid, gid_t gid) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (chown, int, (const char *file, uid_t uid, gid_t gid)); +# else +# if !1 +_GL_FUNCDECL_SYS (chown, int, (const char *file, uid_t uid, gid_t gid) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (chown, int, (const char *file, uid_t uid, gid_t gid)); +# endif +_GL_CXXALIASWARN (chown); +#elif defined GNULIB_POSIXCHECK +# undef chown +# if HAVE_RAW_DECL_CHOWN +_GL_WARN_ON_USE (chown, "chown fails to follow symlinks on some systems and " + "doesn't treat a uid or gid of -1 on some systems - " + "use gnulib module chown for portability"); +# endif +#endif + + +#if 1 +# if 0 +/* Automatically included by modules that need a replacement for close. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef close +# define close rpl_close +# endif +_GL_FUNCDECL_RPL (close, int, (int fd)); +_GL_CXXALIAS_RPL (close, int, (int fd)); +# else +_GL_CXXALIAS_SYS (close, int, (int fd)); +# endif +_GL_CXXALIASWARN (close); +#elif 0 +# undef close +# define close close_used_without_requesting_gnulib_module_close +#elif defined GNULIB_POSIXCHECK +# undef close +/* Assume close is always declared. */ +_GL_WARN_ON_USE (close, "close does not portably work on sockets - " + "use gnulib module close for portability"); +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dup rpl_dup +# endif +_GL_FUNCDECL_RPL (dup, int, (int oldfd)); +_GL_CXXALIAS_RPL (dup, int, (int oldfd)); +# else +_GL_CXXALIAS_SYS (dup, int, (int oldfd)); +# endif +_GL_CXXALIASWARN (dup); +#elif defined GNULIB_POSIXCHECK +# undef dup +# if HAVE_RAW_DECL_DUP +_GL_WARN_ON_USE (dup, "dup is unportable - " + "use gnulib module dup for portability"); +# endif +#endif + + +#if 1 +/* Copy the file descriptor OLDFD into file descriptor NEWFD. Do nothing if + NEWFD = OLDFD, otherwise close NEWFD first if it is open. + Return newfd if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/dup2.html>. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dup2 rpl_dup2 +# endif +_GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd)); +_GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd)); +# else +# if !1 +_GL_FUNCDECL_SYS (dup2, int, (int oldfd, int newfd)); +# endif +_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); +# endif +_GL_CXXALIASWARN (dup2); +#elif defined GNULIB_POSIXCHECK +# undef dup2 +# if HAVE_RAW_DECL_DUP2 +_GL_WARN_ON_USE (dup2, "dup2 is unportable - " + "use gnulib module dup2 for portability"); +# endif +#endif + + +#if 0 +/* Copy the file descriptor OLDFD into file descriptor NEWFD, with the + specified flags. + The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + Close NEWFD first if it is open. + Return newfd if successful, otherwise -1 and errno set. + See the Linux man page at + <https://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html>. */ +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dup3 rpl_dup3 +# endif +_GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags)); +_GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags)); +# else +_GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags)); +_GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags)); +# endif +_GL_CXXALIASWARN (dup3); +#elif defined GNULIB_POSIXCHECK +# undef dup3 +# if HAVE_RAW_DECL_DUP3 +_GL_WARN_ON_USE (dup3, "dup3 is unportable - " + "use gnulib module dup3 for portability"); +# endif +#endif + + +#if 1 +# if defined __CYGWIN__ && !defined __i386__ +/* The 'environ' variable is defined in a DLL. Therefore its declaration needs + the '__declspec(dllimport)' attribute, but the system's <unistd.h> lacks it. + This leads to a link error on 64-bit Cygwin when the option + -Wl,--disable-auto-import is in use. */ +_GL_EXTERN_C __declspec(dllimport) char **environ; +# endif +# if !1 +/* Set of environment variables and values. An array of strings of the form + "VARIABLE=VALUE", terminated with a NULL. */ +# if defined __APPLE__ && defined __MACH__ +# include <TargetConditionals.h> +# if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR +# define _GL_USE_CRT_EXTERNS +# endif +# endif +# ifdef _GL_USE_CRT_EXTERNS +# include <crt_externs.h> +# define environ (*_NSGetEnviron ()) +# else +# ifdef __cplusplus +extern "C" { +# endif +extern char **environ; +# ifdef __cplusplus +} +# endif +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# if HAVE_RAW_DECL_ENVIRON +_GL_UNISTD_INLINE char *** +_GL_WARN_ON_USE_ATTRIBUTE ("environ is unportable - " + "use gnulib module environ for portability") +rpl_environ (void) +{ + return &environ; +} +# undef environ +# define environ (*rpl_environ ()) +# endif +#endif + + +#if 1 +/* Like access(), except that it uses the effective user id and group id of + the current process. */ +# if !1 +_GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode)); +_GL_CXXALIASWARN (euidaccess); +# if defined GNULIB_POSIXCHECK +/* Like access(), this function is a security risk. */ +_GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - " + "use the gnulib module faccessat instead"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef euidaccess +# if HAVE_RAW_DECL_EUIDACCESS +_GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - " + "use gnulib module euidaccess for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef faccessat +# define faccessat rpl_faccessat +# endif +_GL_FUNCDECL_RPL (faccessat, int, + (int fd, char const *name, int mode, int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (faccessat, int, + (int fd, char const *name, int mode, int flag)); +# else +# if !1 +_GL_FUNCDECL_SYS (faccessat, int, + (int fd, char const *file, int mode, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (faccessat, int, + (int fd, char const *file, int mode, int flag)); +# endif +_GL_CXXALIASWARN (faccessat); +#elif defined GNULIB_POSIXCHECK +# undef faccessat +# if HAVE_RAW_DECL_FACCESSAT +_GL_WARN_ON_USE (faccessat, "faccessat is not portable - " + "use gnulib module faccessat for portability"); +# endif +#endif + + +#if 0 +/* Change the process' current working directory to the directory on which + the given file descriptor is open. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fchdir.html>. */ +# if ! 1 +_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); + +/* Gnulib internal hooks needed to maintain the fchdir metadata. */ +_GL_EXTERN_C int _gl_register_fd (int fd, const char *filename) + _GL_ARG_NONNULL ((2)); +_GL_EXTERN_C void _gl_unregister_fd (int fd); +_GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd); +_GL_EXTERN_C const char *_gl_directory_name (int fd); + +# else +# if !1 +_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); +# endif +# endif +_GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/)); +_GL_CXXALIASWARN (fchdir); +#elif defined GNULIB_POSIXCHECK +# undef fchdir +# if HAVE_RAW_DECL_FCHDIR +_GL_WARN_ON_USE (fchdir, "fchdir is unportable - " + "use gnulib module fchdir for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fchownat +# define fchownat rpl_fchownat +# endif +_GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag)); +# else +# if !1 +_GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag)); +# endif +_GL_CXXALIASWARN (fchownat); +#elif defined GNULIB_POSIXCHECK +# undef fchownat +# if HAVE_RAW_DECL_FCHOWNAT +_GL_WARN_ON_USE (fchownat, "fchownat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if 0 +/* Synchronize changes to a file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fdatasync.html>. */ +# if !1 || !1 +_GL_FUNCDECL_SYS (fdatasync, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (fdatasync, int, (int fd)); +_GL_CXXALIASWARN (fdatasync); +#elif defined GNULIB_POSIXCHECK +# undef fdatasync +# if HAVE_RAW_DECL_FDATASYNC +_GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - " + "use gnulib module fdatasync for portability"); +# endif +#endif + + +#if 0 +/* Synchronize changes, including metadata, to a file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html>. */ +# if !1 +_GL_FUNCDECL_SYS (fsync, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (fsync, int, (int fd)); +_GL_CXXALIASWARN (fsync); +#elif defined GNULIB_POSIXCHECK +# undef fsync +# if HAVE_RAW_DECL_FSYNC +_GL_WARN_ON_USE (fsync, "fsync is unportable - " + "use gnulib module fsync for portability"); +# endif +#endif + + +#if 0 +/* Change the size of the file to which FD is opened to become equal to LENGTH. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html>. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ftruncate +# define ftruncate rpl_ftruncate +# endif +_GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length)); +_GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length)); +# else +# if !1 +_GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); +# endif +_GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); +# endif +_GL_CXXALIASWARN (ftruncate); +#elif defined GNULIB_POSIXCHECK +# undef ftruncate +# if HAVE_RAW_DECL_FTRUNCATE +_GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - " + "use gnulib module ftruncate for portability"); +# endif +#endif + + +#if 0 +/* Get the name of the current working directory, and put it in SIZE bytes + of BUF. + Return BUF if successful, or NULL if the directory couldn't be determined + or SIZE was too small. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html>. + Additionally, the gnulib module 'getcwd' guarantees the following GNU + extension: If BUF is NULL, an array is allocated with 'malloc'; the array + is SIZE bytes long, unless SIZE == 0, in which case it is as big as + necessary. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getcwd rpl_getcwd +# endif +_GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size)); +_GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size)); +# else +/* Need to cast, because on mingw, the second parameter is + int size. */ +_GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); +# endif +_GL_CXXALIASWARN (getcwd); +#elif defined GNULIB_POSIXCHECK +# undef getcwd +# if HAVE_RAW_DECL_GETCWD +_GL_WARN_ON_USE (getcwd, "getcwd is unportable - " + "use gnulib module getcwd for portability"); +# endif +#endif + + +#if 0 +/* Return the NIS domain name of the machine. + WARNING! The NIS domain name is unrelated to the fully qualified host name + of the machine. It is also unrelated to email addresses. + WARNING! The NIS domain name is usually the empty string or "(none)" when + not using NIS. + + Put up to LEN bytes of the NIS domain name into NAME. + Null terminate it if the name is shorter than LEN. + If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getdomainname +# define getdomainname rpl_getdomainname +# endif +_GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len)); +# else +# if !1 +_GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len)); +# endif +_GL_CXXALIASWARN (getdomainname); +#elif defined GNULIB_POSIXCHECK +# undef getdomainname +# if HAVE_RAW_DECL_GETDOMAINNAME +_GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - " + "use gnulib module getdomainname for portability"); +# endif +#endif + + +#if 1 +/* Return the maximum number of file descriptors in the current process. + In POSIX, this is same as sysconf (_SC_OPEN_MAX). */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getdtablesize +# define getdtablesize rpl_getdtablesize +# endif +_GL_FUNCDECL_RPL (getdtablesize, int, (void)); +_GL_CXXALIAS_RPL (getdtablesize, int, (void)); +# else +# if !1 +_GL_FUNCDECL_SYS (getdtablesize, int, (void)); +# endif +_GL_CXXALIAS_SYS (getdtablesize, int, (void)); +# endif +_GL_CXXALIASWARN (getdtablesize); +#elif defined GNULIB_POSIXCHECK +# undef getdtablesize +# if HAVE_RAW_DECL_GETDTABLESIZE +_GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - " + "use gnulib module getdtablesize for portability"); +# endif +#endif + + +#if 1 +/* Return the supplemental groups that the current process belongs to. + It is unspecified whether the effective group id is in the list. + If N is 0, return the group count; otherwise, N describes how many + entries are available in GROUPS. Return -1 and set errno if N is + not 0 and not large enough. Fails with ENOSYS on some systems. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getgroups +# define getgroups rpl_getgroups +# endif +_GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups)); +_GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups)); +# else +# if !1 +_GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups)); +# endif +_GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups)); +# endif +_GL_CXXALIASWARN (getgroups); +#elif defined GNULIB_POSIXCHECK +# undef getgroups +# if HAVE_RAW_DECL_GETGROUPS +_GL_WARN_ON_USE (getgroups, "getgroups is unportable - " + "use gnulib module getgroups for portability"); +# endif +#endif + + +#if 0 +/* Return the standard host name of the machine. + WARNING! The host name may or may not be fully qualified. + + Put up to LEN bytes of the host name into NAME. + Null terminate it if the name is shorter than LEN. + If the host name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gethostname +# define gethostname rpl_gethostname +# endif +_GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len)); +# else +# if !1 +_GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second + parameter is + int len. */ +_GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len)); +# endif +_GL_CXXALIASWARN (gethostname); +#elif 0 +# undef gethostname +# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname +#elif defined GNULIB_POSIXCHECK +# undef gethostname +# if HAVE_RAW_DECL_GETHOSTNAME +_GL_WARN_ON_USE (gethostname, "gethostname is unportable - " + "use gnulib module gethostname for portability"); +# endif +#endif + + +#if 0 +/* Returns the user's login name, or NULL if it cannot be found. Upon error, + returns NULL with errno set. + + See <http://www.opengroup.org/susv3xsh/getlogin.html>. + + Most programs don't need to use this function, because the information is + available through environment variables: + ${LOGNAME-$USER} on Unix platforms, + $USERNAME on native Windows platforms. + */ +# if !1 +_GL_FUNCDECL_SYS (getlogin, char *, (void)); +# endif +_GL_CXXALIAS_SYS (getlogin, char *, (void)); +_GL_CXXALIASWARN (getlogin); +#elif defined GNULIB_POSIXCHECK +# undef getlogin +# if HAVE_RAW_DECL_GETLOGIN +_GL_WARN_ON_USE (getlogin, "getlogin is unportable - " + "use gnulib module getlogin for portability"); +# endif +#endif + + +#if 0 +/* Copies the user's login name to NAME. + The array pointed to by NAME has room for SIZE bytes. + + Returns 0 if successful. Upon error, an error number is returned, or -1 in + the case that the login name cannot be found but no specific error is + provided (this case is hopefully rare but is left open by the POSIX spec). + + See <http://www.opengroup.org/susv3xsh/getlogin.html>. + + Most programs don't need to use this function, because the information is + available through environment variables: + ${LOGNAME-$USER} on Unix platforms, + $USERNAME on native Windows platforms. + */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getlogin_r rpl_getlogin_r +# endif +_GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size)); +# else +# if !1 +_GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Solaris 10 systems, the second argument is + int size. */ +_GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size)); +# endif +_GL_CXXALIASWARN (getlogin_r); +#elif defined GNULIB_POSIXCHECK +# undef getlogin_r +# if HAVE_RAW_DECL_GETLOGIN_R +_GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - " + "use gnulib module getlogin_r for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getpagesize rpl_getpagesize +# endif +_GL_FUNCDECL_RPL (getpagesize, int, (void)); +_GL_CXXALIAS_RPL (getpagesize, int, (void)); +# else +# if !1 +# if !defined getpagesize +/* This is for POSIX systems. */ +# if !defined _gl_getpagesize && defined _SC_PAGESIZE +# if ! (defined __VMS && __VMS_VER < 70000000) +# define _gl_getpagesize() sysconf (_SC_PAGESIZE) +# endif +# endif +/* This is for older VMS. */ +# if !defined _gl_getpagesize && defined __VMS +# ifdef __ALPHA +# define _gl_getpagesize() 8192 +# else +# define _gl_getpagesize() 512 +# endif +# endif +/* This is for BeOS. */ +# if !defined _gl_getpagesize && 0 +# include <OS.h> +# if defined B_PAGE_SIZE +# define _gl_getpagesize() B_PAGE_SIZE +# endif +# endif +/* This is for AmigaOS4.0. */ +# if !defined _gl_getpagesize && defined __amigaos4__ +# define _gl_getpagesize() 2048 +# endif +/* This is for older Unix systems. */ +# if !defined _gl_getpagesize && 0 +# include <sys/param.h> +# ifdef EXEC_PAGESIZE +# define _gl_getpagesize() EXEC_PAGESIZE +# else +# ifdef NBPG +# ifndef CLSIZE +# define CLSIZE 1 +# endif +# define _gl_getpagesize() (NBPG * CLSIZE) +# else +# ifdef NBPC +# define _gl_getpagesize() NBPC +# endif +# endif +# endif +# endif +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getpagesize() _gl_getpagesize () +# else +# if !GNULIB_defined_getpagesize_function +_GL_UNISTD_INLINE int +getpagesize () +{ + return _gl_getpagesize (); +} +# define GNULIB_defined_getpagesize_function 1 +# endif +# endif +# endif +# endif +/* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */ +_GL_CXXALIAS_SYS_CAST (getpagesize, int, (void)); +# endif +# if 1 +_GL_CXXALIASWARN (getpagesize); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getpagesize +# if HAVE_RAW_DECL_GETPAGESIZE +_GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - " + "use gnulib module getpagesize for portability"); +# endif +#endif + + +#if 1 +/* Function getpass() from module 'getpass': + Read a password from /dev/tty or stdin. + Function getpass() from module 'getpass-gnu': + Read a password of arbitrary length from /dev/tty or stdin. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getpass +# define getpass rpl_getpass +# endif +_GL_FUNCDECL_RPL (getpass, char *, (const char *prompt) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getpass, char *, (const char *prompt)); +# else +# if !1 +_GL_FUNCDECL_SYS (getpass, char *, (const char *prompt) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (getpass, char *, (const char *prompt)); +# endif +_GL_CXXALIASWARN (getpass); +#elif defined GNULIB_POSIXCHECK +# undef getpass +# if HAVE_RAW_DECL_GETPASS +_GL_WARN_ON_USE (getpass, "getpass is unportable - " + "use gnulib module getpass or getpass-gnu for portability"); +# endif +#endif + + +#if 0 +/* Return the next valid login shell on the system, or NULL when the end of + the list has been reached. */ +# if !1 +_GL_FUNCDECL_SYS (getusershell, char *, (void)); +# endif +_GL_CXXALIAS_SYS (getusershell, char *, (void)); +_GL_CXXALIASWARN (getusershell); +#elif defined GNULIB_POSIXCHECK +# undef getusershell +# if HAVE_RAW_DECL_GETUSERSHELL +_GL_WARN_ON_USE (getusershell, "getusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + +#if 0 +/* Rewind to pointer that is advanced at each getusershell() call. */ +# if !1 +_GL_FUNCDECL_SYS (setusershell, void, (void)); +# endif +_GL_CXXALIAS_SYS (setusershell, void, (void)); +_GL_CXXALIASWARN (setusershell); +#elif defined GNULIB_POSIXCHECK +# undef setusershell +# if HAVE_RAW_DECL_SETUSERSHELL +_GL_WARN_ON_USE (setusershell, "setusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + +#if 0 +/* Free the pointer that is advanced at each getusershell() call and + associated resources. */ +# if !1 +_GL_FUNCDECL_SYS (endusershell, void, (void)); +# endif +_GL_CXXALIAS_SYS (endusershell, void, (void)); +_GL_CXXALIASWARN (endusershell); +#elif defined GNULIB_POSIXCHECK +# undef endusershell +# if HAVE_RAW_DECL_ENDUSERSHELL +_GL_WARN_ON_USE (endusershell, "endusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + + +#if 1 +/* Determine whether group id is in calling user's group list. */ +# if !1 +_GL_FUNCDECL_SYS (group_member, int, (gid_t gid)); +# endif +_GL_CXXALIAS_SYS (group_member, int, (gid_t gid)); +_GL_CXXALIASWARN (group_member); +#elif defined GNULIB_POSIXCHECK +# undef group_member +# if HAVE_RAW_DECL_GROUP_MEMBER +_GL_WARN_ON_USE (group_member, "group_member is unportable - " + "use gnulib module group-member for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef isatty +# define isatty rpl_isatty +# endif +_GL_FUNCDECL_RPL (isatty, int, (int fd)); +_GL_CXXALIAS_RPL (isatty, int, (int fd)); +# else +_GL_CXXALIAS_SYS (isatty, int, (int fd)); +# endif +_GL_CXXALIASWARN (isatty); +#elif defined GNULIB_POSIXCHECK +# undef isatty +# if HAVE_RAW_DECL_ISATTY +_GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - " + "use gnulib module isatty for portability"); +# endif +#endif + + +#if 0 +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Do not follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/lchown.html>. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef lchown +# define lchown rpl_lchown +# endif +_GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)); +# else +# if !1 +_GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)); +# endif +_GL_CXXALIASWARN (lchown); +#elif defined GNULIB_POSIXCHECK +# undef lchown +# if HAVE_RAW_DECL_LCHOWN +_GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - " + "use gnulib module lchown for portability"); +# endif +#endif + + +#if 0 +/* Create a new hard link for an existing file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html>. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define link rpl_link +# endif +_GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2)); +# else +# if !1 +_GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2)); +# endif +_GL_CXXALIASWARN (link); +#elif defined GNULIB_POSIXCHECK +# undef link +# if HAVE_RAW_DECL_LINK +_GL_WARN_ON_USE (link, "link is unportable - " + "use gnulib module link for portability"); +# endif +#endif + + +#if 0 +/* Create a new hard link for an existing file, relative to two + directories. FLAG controls whether symlinks are followed. + Return 0 if successful, otherwise -1 and errno set. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef linkat +# define linkat rpl_linkat +# endif +_GL_FUNCDECL_RPL (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag) + _GL_ARG_NONNULL ((2, 4))); +_GL_CXXALIAS_RPL (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag)); +# else +# if !1 +_GL_FUNCDECL_SYS (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag) + _GL_ARG_NONNULL ((2, 4))); +# endif +_GL_CXXALIAS_SYS (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag)); +# endif +_GL_CXXALIASWARN (linkat); +#elif defined GNULIB_POSIXCHECK +# undef linkat +# if HAVE_RAW_DECL_LINKAT +_GL_WARN_ON_USE (linkat, "linkat is unportable - " + "use gnulib module linkat for portability"); +# endif +#endif + + +#if 1 +/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. + Return the new offset if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/lseek.html>. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define lseek rpl_lseek +# endif +_GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence)); +_GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence)); +# else +_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); +# endif +_GL_CXXALIASWARN (lseek); +#elif defined GNULIB_POSIXCHECK +# undef lseek +# if HAVE_RAW_DECL_LSEEK +_GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some " + "systems - use gnulib module lseek for portability"); +# endif +#endif + + +#if 0 +/* Create a pipe, defaulting to O_BINARY mode. + Store the read-end as fd[0] and the write-end as fd[1]. + Return 0 upon success, or -1 with errno set upon failure. */ +# if !1 +_GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pipe, int, (int fd[2])); +_GL_CXXALIASWARN (pipe); +#elif defined GNULIB_POSIXCHECK +# undef pipe +# if HAVE_RAW_DECL_PIPE +_GL_WARN_ON_USE (pipe, "pipe is unportable - " + "use gnulib module pipe-posix for portability"); +# endif +#endif + + +#if 0 +/* Create a pipe, applying the given flags when opening the read-end of the + pipe and the write-end of the pipe. + The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + Store the read-end as fd[0] and the write-end as fd[1]. + Return 0 upon success, or -1 with errno set upon failure. + See also the Linux man page at + <https://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>. */ +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define pipe2 rpl_pipe2 +# endif +_GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags)); +# else +_GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags)); +# endif +_GL_CXXALIASWARN (pipe2); +#elif defined GNULIB_POSIXCHECK +# undef pipe2 +# if HAVE_RAW_DECL_PIPE2 +_GL_WARN_ON_USE (pipe2, "pipe2 is unportable - " + "use gnulib module pipe2 for portability"); +# endif +#endif + + +#if 0 +/* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET. + Return the number of bytes placed into BUF if successful, otherwise + set errno and return -1. 0 indicates EOF. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html>. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pread +# define pread rpl_pread +# endif +_GL_FUNCDECL_RPL (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset)); +# else +# if !1 +_GL_FUNCDECL_SYS (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset)); +# endif +_GL_CXXALIASWARN (pread); +#elif defined GNULIB_POSIXCHECK +# undef pread +# if HAVE_RAW_DECL_PREAD +_GL_WARN_ON_USE (pread, "pread is unportable - " + "use gnulib module pread for portability"); +# endif +#endif + + +#if 0 +/* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET. + Return the number of bytes written if successful, otherwise + set errno and return -1. 0 indicates nothing written. See the + POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html>. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pwrite +# define pwrite rpl_pwrite +# endif +_GL_FUNCDECL_RPL (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset)); +# else +# if !1 +_GL_FUNCDECL_SYS (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset)); +# endif +_GL_CXXALIASWARN (pwrite); +#elif defined GNULIB_POSIXCHECK +# undef pwrite +# if HAVE_RAW_DECL_PWRITE +_GL_WARN_ON_USE (pwrite, "pwrite is unportable - " + "use gnulib module pwrite for portability"); +# endif +#endif + + +#if 0 +/* Read up to COUNT bytes from file descriptor FD into the buffer starting + at BUF. See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html>. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef read +# define read rpl_read +# endif +_GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count)); +# else +/* Need to cast, because on mingw, the third parameter is + unsigned int count + and the return type is 'int'. */ +_GL_CXXALIAS_SYS_CAST (read, ssize_t, (int fd, void *buf, size_t count)); +# endif +_GL_CXXALIASWARN (read); +#endif + + +#if 1 +/* Read the contents of the symbolic link FILE and place the first BUFSIZE + bytes of it into BUF. Return the number of bytes placed into BUF if + successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define readlink rpl_readlink +# endif +_GL_FUNCDECL_RPL (readlink, ssize_t, + (const char *file, char *buf, size_t bufsize) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (readlink, ssize_t, + (const char *file, char *buf, size_t bufsize)); +# else +# if !1 +_GL_FUNCDECL_SYS (readlink, ssize_t, + (const char *file, char *buf, size_t bufsize) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (readlink, ssize_t, + (const char *file, char *buf, size_t bufsize)); +# endif +_GL_CXXALIASWARN (readlink); +#elif defined GNULIB_POSIXCHECK +# undef readlink +# if HAVE_RAW_DECL_READLINK +_GL_WARN_ON_USE (readlink, "readlink is unportable - " + "use gnulib module readlink for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define readlinkat rpl_readlinkat +# endif +_GL_FUNCDECL_RPL (readlinkat, ssize_t, + (int fd, char const *file, char *buf, size_t len) + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (readlinkat, ssize_t, + (int fd, char const *file, char *buf, size_t len)); +# else +# if !1 +_GL_FUNCDECL_SYS (readlinkat, ssize_t, + (int fd, char const *file, char *buf, size_t len) + _GL_ARG_NONNULL ((2, 3))); +# endif +_GL_CXXALIAS_SYS (readlinkat, ssize_t, + (int fd, char const *file, char *buf, size_t len)); +# endif +_GL_CXXALIASWARN (readlinkat); +#elif defined GNULIB_POSIXCHECK +# undef readlinkat +# if HAVE_RAW_DECL_READLINKAT +_GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - " + "use gnulib module readlinkat for portability"); +# endif +#endif + + +#if 1 +/* Remove the directory DIR. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define rmdir rpl_rmdir +# endif +_GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (rmdir, int, (char const *name)); +# else +_GL_CXXALIAS_SYS (rmdir, int, (char const *name)); +# endif +_GL_CXXALIASWARN (rmdir); +#elif defined GNULIB_POSIXCHECK +# undef rmdir +# if HAVE_RAW_DECL_RMDIR +_GL_WARN_ON_USE (rmdir, "rmdir is unportable - " + "use gnulib module rmdir for portability"); +# endif +#endif + + +#if 0 +/* Set the host name of the machine. + The host name may or may not be fully qualified. + + Put LEN bytes of NAME into the host name. + Return 0 if successful, otherwise, set errno and return -1. + + Platforms with no ability to set the hostname return -1 and set + errno = ENOSYS. */ +# if !1 || !1 +_GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5 + and FreeBSD 6.4 the second parameter is int. On Solaris 11 + 2011-10, the first parameter is not const. */ +_GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len)); +_GL_CXXALIASWARN (sethostname); +#elif defined GNULIB_POSIXCHECK +# undef sethostname +# if HAVE_RAW_DECL_SETHOSTNAME +_GL_WARN_ON_USE (sethostname, "sethostname is unportable - " + "use gnulib module sethostname for portability"); +# endif +#endif + + +#if 0 +/* Pause the execution of the current thread for N seconds. + Returns the number of seconds left to sleep. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html>. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sleep +# define sleep rpl_sleep +# endif +_GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n)); +_GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n)); +# else +# if !1 +_GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n)); +# endif +_GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n)); +# endif +_GL_CXXALIASWARN (sleep); +#elif defined GNULIB_POSIXCHECK +# undef sleep +# if HAVE_RAW_DECL_SLEEP +_GL_WARN_ON_USE (sleep, "sleep is unportable - " + "use gnulib module sleep for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef symlink +# define symlink rpl_symlink +# endif +_GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file)); +# else +# if !1 +_GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file)); +# endif +_GL_CXXALIASWARN (symlink); +#elif defined GNULIB_POSIXCHECK +# undef symlink +# if HAVE_RAW_DECL_SYMLINK +_GL_WARN_ON_USE (symlink, "symlink is not portable - " + "use gnulib module symlink for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef symlinkat +# define symlinkat rpl_symlinkat +# endif +_GL_FUNCDECL_RPL (symlinkat, int, + (char const *contents, int fd, char const *file) + _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (symlinkat, int, + (char const *contents, int fd, char const *file)); +# else +# if !1 +_GL_FUNCDECL_SYS (symlinkat, int, + (char const *contents, int fd, char const *file) + _GL_ARG_NONNULL ((1, 3))); +# endif +_GL_CXXALIAS_SYS (symlinkat, int, + (char const *contents, int fd, char const *file)); +# endif +_GL_CXXALIASWARN (symlinkat); +#elif defined GNULIB_POSIXCHECK +# undef symlinkat +# if HAVE_RAW_DECL_SYMLINKAT +_GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - " + "use gnulib module symlinkat for portability"); +# endif +#endif + + +#if 0 +/* Change the size of the file designated by FILENAME to become equal to LENGTH. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/truncate.html>. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef truncate +# define truncate rpl_truncate +# endif +_GL_FUNCDECL_RPL (truncate, int, (const char *filename, off_t length) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (truncate, int, (const char *filename, off_t length)); +# else +# if !1 +_GL_FUNCDECL_SYS (truncate, int, (const char *filename, off_t length) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (truncate, int, (const char *filename, off_t length)); +# endif +_GL_CXXALIASWARN (truncate); +#elif defined GNULIB_POSIXCHECK +# undef truncate +# if HAVE_RAW_DECL_TRUNCATE +_GL_WARN_ON_USE (truncate, "truncate is unportable - " + "use gnulib module truncate for portability"); +# endif +#endif + + +#if 0 +/* Store at most BUFLEN characters of the pathname of the terminal FD is + open on in BUF. Return 0 on success, otherwise an error number. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ttyname_r +# define ttyname_r rpl_ttyname_r +# endif +_GL_FUNCDECL_RPL (ttyname_r, int, + (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (ttyname_r, int, + (int fd, char *buf, size_t buflen)); +# else +# if !1 +_GL_FUNCDECL_SYS (ttyname_r, int, + (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (ttyname_r, int, + (int fd, char *buf, size_t buflen)); +# endif +_GL_CXXALIASWARN (ttyname_r); +#elif defined GNULIB_POSIXCHECK +# undef ttyname_r +# if HAVE_RAW_DECL_TTYNAME_R +_GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - " + "use gnulib module ttyname_r for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unlink +# define unlink rpl_unlink +# endif +_GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (unlink, int, (char const *file)); +# else +_GL_CXXALIAS_SYS (unlink, int, (char const *file)); +# endif +_GL_CXXALIASWARN (unlink); +#elif defined GNULIB_POSIXCHECK +# undef unlink +# if HAVE_RAW_DECL_UNLINK +_GL_WARN_ON_USE (unlink, "unlink is not portable - " + "use gnulib module unlink for portability"); +# endif +#endif + + +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unlinkat +# define unlinkat rpl_unlinkat +# endif +_GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag)); +# else +# if !1 +_GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag)); +# endif +_GL_CXXALIASWARN (unlinkat); +#elif defined GNULIB_POSIXCHECK +# undef unlinkat +# if HAVE_RAW_DECL_UNLINKAT +_GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if 0 +/* Pause the execution of the current thread for N microseconds. + Returns 0 on completion, or -1 on range error. + See the POSIX:2001 specification + <http://www.opengroup.org/susv3xsh/usleep.html>. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef usleep +# define usleep rpl_usleep +# endif +_GL_FUNCDECL_RPL (usleep, int, (useconds_t n)); +_GL_CXXALIAS_RPL (usleep, int, (useconds_t n)); +# else +# if !1 +_GL_FUNCDECL_SYS (usleep, int, (useconds_t n)); +# endif +_GL_CXXALIAS_SYS (usleep, int, (useconds_t n)); +# endif +_GL_CXXALIASWARN (usleep); +#elif defined GNULIB_POSIXCHECK +# undef usleep +# if HAVE_RAW_DECL_USLEEP +_GL_WARN_ON_USE (usleep, "usleep is unportable - " + "use gnulib module usleep for portability"); +# endif +#endif + + +#if 0 +/* Write up to COUNT bytes starting at BUF to file descriptor FD. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef write +# define write rpl_write +# endif +_GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count)); +# else +/* Need to cast, because on mingw, the third parameter is + unsigned int count + and the return type is 'int'. */ +_GL_CXXALIAS_SYS_CAST (write, ssize_t, (int fd, const void *buf, size_t count)); +# endif +_GL_CXXALIASWARN (write); +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_UNISTD_H */ +#endif /* _GL_INCLUDING_UNISTD_H */ +#endif /* _GL_UNISTD_H */ diff --git a/devspec.en_US/project/recutils/lib/unistd.in.h b/devspec.en_US/project/recutils/lib/unistd.in.h new file mode 100755 index 0000000..a10ca28 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/unistd.in.h @@ -0,0 +1,1668 @@ +/* Substitute for and wrapper around <unistd.h>. + Copyright (C) 2003-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _@GUARD_PREFIX@_UNISTD_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#ifdef _GL_INCLUDING_UNISTD_H +/* Special invocation convention: + - On Mac OS X 10.3.9 we have a sequence of nested includes + <unistd.h> -> <signal.h> -> <pthread.h> -> <unistd.h> + In this situation, the functions are not yet declared, therefore we cannot + provide the C++ aliases. */ + +#@INCLUDE_NEXT@ @NEXT_UNISTD_H@ + +#else +/* Normal invocation convention. */ + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_UNISTD_H@ +# define _GL_INCLUDING_UNISTD_H +# @INCLUDE_NEXT@ @NEXT_UNISTD_H@ +# undef _GL_INCLUDING_UNISTD_H +#endif + +/* Get all possible declarations of gethostname(). */ +#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \ + && !defined _GL_INCLUDING_WINSOCK2_H +# define _GL_INCLUDING_WINSOCK2_H +# include <winsock2.h> +# undef _GL_INCLUDING_WINSOCK2_H +#endif + +#if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H +#define _@GUARD_PREFIX@_UNISTD_H + +/* NetBSD 5.0 mis-defines NULL. Also get size_t. */ +#include <stddef.h> + +/* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>. */ +/* MSVC declares 'unlink' in <stdio.h>, not in <unistd.h>. We must include + it before we #define unlink rpl_unlink. */ +/* Cygwin 1.7.1 declares symlinkat in <stdio.h>, not in <unistd.h>. */ +/* But avoid namespace pollution on glibc systems. */ +#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ + || ((@GNULIB_UNLINK@ || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__)) \ + || ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \ + && defined __CYGWIN__)) \ + && ! defined __GLIBC__ +# include <stdio.h> +#endif + +/* Cygwin 1.7.1 declares unlinkat in <fcntl.h>, not in <unistd.h>. */ +/* But avoid namespace pollution on glibc systems. */ +#if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) && defined __CYGWIN__ \ + && ! defined __GLIBC__ +# include <fcntl.h> +#endif + +/* mingw fails to declare _exit in <unistd.h>. */ +/* mingw, MSVC, BeOS, Haiku declare environ in <stdlib.h>, not in + <unistd.h>. */ +/* Solaris declares getcwd not only in <unistd.h> but also in <stdlib.h>. */ +/* OSF Tru64 Unix cannot see gnulib rpl_strtod when system <stdlib.h> is + included here. */ +/* But avoid namespace pollution on glibc systems. */ +#if !defined __GLIBC__ && !defined __osf__ +# define __need_system_stdlib_h +# include <stdlib.h> +# undef __need_system_stdlib_h +#endif + +/* Native Windows platforms declare chdir, getcwd, rmdir in + <io.h> and/or <direct.h>, not in <unistd.h>. + They also declare access(), chmod(), close(), dup(), dup2(), isatty(), + lseek(), read(), unlink(), write() in <io.h>. */ +#if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \ + || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__)) +# include <io.h> /* mingw32, mingw64 */ +# include <direct.h> /* mingw64, MSVC 9 */ +#elif (@GNULIB_CLOSE@ || @GNULIB_DUP@ || @GNULIB_DUP2@ || @GNULIB_ISATTY@ \ + || @GNULIB_LSEEK@ || @GNULIB_READ@ || @GNULIB_UNLINK@ || @GNULIB_WRITE@ \ + || defined GNULIB_POSIXCHECK) \ + && (defined _WIN32 && ! defined __CYGWIN__) +# include <io.h> +#endif + +/* AIX and OSF/1 5.1 declare getdomainname in <netdb.h>, not in <unistd.h>. + NonStop Kernel declares gethostname in <netdb.h>, not in <unistd.h>. */ +/* But avoid namespace pollution on glibc systems. */ +#if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \ + || (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \ + && !defined __GLIBC__ +# include <netdb.h> +#endif + +/* MSVC defines off_t in <sys/types.h>. + May also define off_t to a 64-bit type on native Windows. */ +#if !@HAVE_UNISTD_H@ || @WINDOWS_64_BIT_OFF_T@ +/* Get off_t. */ +# include <sys/types.h> +#endif + +#if (@GNULIB_READ@ || @GNULIB_WRITE@ \ + || @GNULIB_READLINK@ || @GNULIB_READLINKAT@ \ + || @GNULIB_PREAD@ || @GNULIB_PWRITE@ || defined GNULIB_POSIXCHECK) +/* Get ssize_t. */ +# include <sys/types.h> +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + + +/* Get getopt(), optarg, optind, opterr, optopt. */ +#if @GNULIB_UNISTD_H_GETOPT@ && !defined _GL_SYSTEM_GETOPT +# include <getopt-cdefs.h> +# include <getopt-pfx-core.h> +#endif + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_UNISTD_INLINE +# define _GL_UNISTD_INLINE _GL_INLINE +#endif + +/* Hide some function declarations from <winsock2.h>. */ + +#if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ +# if !defined _@GUARD_PREFIX@_SYS_SOCKET_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef socket +# define socket socket_used_without_including_sys_socket_h +# undef connect +# define connect connect_used_without_including_sys_socket_h +# undef accept +# define accept accept_used_without_including_sys_socket_h +# undef bind +# define bind bind_used_without_including_sys_socket_h +# undef getpeername +# define getpeername getpeername_used_without_including_sys_socket_h +# undef getsockname +# define getsockname getsockname_used_without_including_sys_socket_h +# undef getsockopt +# define getsockopt getsockopt_used_without_including_sys_socket_h +# undef listen +# define listen listen_used_without_including_sys_socket_h +# undef recv +# define recv recv_used_without_including_sys_socket_h +# undef send +# define send send_used_without_including_sys_socket_h +# undef recvfrom +# define recvfrom recvfrom_used_without_including_sys_socket_h +# undef sendto +# define sendto sendto_used_without_including_sys_socket_h +# undef setsockopt +# define setsockopt setsockopt_used_without_including_sys_socket_h +# undef shutdown +# define shutdown shutdown_used_without_including_sys_socket_h +# else + _GL_WARN_ON_USE (socket, + "socket() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (connect, + "connect() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (accept, + "accept() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (bind, + "bind() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (getpeername, + "getpeername() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (getsockname, + "getsockname() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (getsockopt, + "getsockopt() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (listen, + "listen() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (recv, + "recv() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (send, + "send() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (recvfrom, + "recvfrom() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (sendto, + "sendto() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (setsockopt, + "setsockopt() used without including <sys/socket.h>"); + _GL_WARN_ON_USE (shutdown, + "shutdown() used without including <sys/socket.h>"); +# endif +# endif +# if !defined _@GUARD_PREFIX@_SYS_SELECT_H +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef select +# define select select_used_without_including_sys_select_h +# else + _GL_WARN_ON_USE (select, + "select() used without including <sys/select.h>"); +# endif +# endif +#endif + + +/* OS/2 EMX lacks these macros. */ +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +/* Ensure *_OK macros exist. */ +#ifndef F_OK +# define F_OK 0 +# define X_OK 1 +# define W_OK 2 +# define R_OK 4 +#endif + + +/* Declare overridden functions. */ + + +#if defined GNULIB_POSIXCHECK +/* The access() function is a security risk. */ +_GL_WARN_ON_USE (access, "the access function is a security risk - " + "use the gnulib module faccessat instead"); +#endif + + +#if @GNULIB_CHDIR@ +_GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); +_GL_CXXALIASWARN (chdir); +#elif defined GNULIB_POSIXCHECK +# undef chdir +# if HAVE_RAW_DECL_CHDIR +_GL_WARN_ON_USE (chown, "chdir is not always in <unistd.h> - " + "use gnulib module chdir for portability"); +# endif +#endif + + +#if @GNULIB_CHOWN@ +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/chown.html. */ +# if @REPLACE_CHOWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef chown +# define chown rpl_chown +# endif +_GL_FUNCDECL_RPL (chown, int, (const char *file, uid_t uid, gid_t gid) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (chown, int, (const char *file, uid_t uid, gid_t gid)); +# else +# if !@HAVE_CHOWN@ +_GL_FUNCDECL_SYS (chown, int, (const char *file, uid_t uid, gid_t gid) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (chown, int, (const char *file, uid_t uid, gid_t gid)); +# endif +_GL_CXXALIASWARN (chown); +#elif defined GNULIB_POSIXCHECK +# undef chown +# if HAVE_RAW_DECL_CHOWN +_GL_WARN_ON_USE (chown, "chown fails to follow symlinks on some systems and " + "doesn't treat a uid or gid of -1 on some systems - " + "use gnulib module chown for portability"); +# endif +#endif + + +#if @GNULIB_CLOSE@ +# if @REPLACE_CLOSE@ +/* Automatically included by modules that need a replacement for close. */ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef close +# define close rpl_close +# endif +_GL_FUNCDECL_RPL (close, int, (int fd)); +_GL_CXXALIAS_RPL (close, int, (int fd)); +# else +_GL_CXXALIAS_SYS (close, int, (int fd)); +# endif +_GL_CXXALIASWARN (close); +#elif @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +# undef close +# define close close_used_without_requesting_gnulib_module_close +#elif defined GNULIB_POSIXCHECK +# undef close +/* Assume close is always declared. */ +_GL_WARN_ON_USE (close, "close does not portably work on sockets - " + "use gnulib module close for portability"); +#endif + + +#if @GNULIB_DUP@ +# if @REPLACE_DUP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dup rpl_dup +# endif +_GL_FUNCDECL_RPL (dup, int, (int oldfd)); +_GL_CXXALIAS_RPL (dup, int, (int oldfd)); +# else +_GL_CXXALIAS_SYS (dup, int, (int oldfd)); +# endif +_GL_CXXALIASWARN (dup); +#elif defined GNULIB_POSIXCHECK +# undef dup +# if HAVE_RAW_DECL_DUP +_GL_WARN_ON_USE (dup, "dup is unportable - " + "use gnulib module dup for portability"); +# endif +#endif + + +#if @GNULIB_DUP2@ +/* Copy the file descriptor OLDFD into file descriptor NEWFD. Do nothing if + NEWFD = OLDFD, otherwise close NEWFD first if it is open. + Return newfd if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/dup2.html>. */ +# if @REPLACE_DUP2@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dup2 rpl_dup2 +# endif +_GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd)); +_GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd)); +# else +# if !@HAVE_DUP2@ +_GL_FUNCDECL_SYS (dup2, int, (int oldfd, int newfd)); +# endif +_GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); +# endif +_GL_CXXALIASWARN (dup2); +#elif defined GNULIB_POSIXCHECK +# undef dup2 +# if HAVE_RAW_DECL_DUP2 +_GL_WARN_ON_USE (dup2, "dup2 is unportable - " + "use gnulib module dup2 for portability"); +# endif +#endif + + +#if @GNULIB_DUP3@ +/* Copy the file descriptor OLDFD into file descriptor NEWFD, with the + specified flags. + The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + Close NEWFD first if it is open. + Return newfd if successful, otherwise -1 and errno set. + See the Linux man page at + <https://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html>. */ +# if @HAVE_DUP3@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define dup3 rpl_dup3 +# endif +_GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags)); +_GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags)); +# else +_GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags)); +_GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags)); +# endif +_GL_CXXALIASWARN (dup3); +#elif defined GNULIB_POSIXCHECK +# undef dup3 +# if HAVE_RAW_DECL_DUP3 +_GL_WARN_ON_USE (dup3, "dup3 is unportable - " + "use gnulib module dup3 for portability"); +# endif +#endif + + +#if @GNULIB_ENVIRON@ +# if defined __CYGWIN__ && !defined __i386__ +/* The 'environ' variable is defined in a DLL. Therefore its declaration needs + the '__declspec(dllimport)' attribute, but the system's <unistd.h> lacks it. + This leads to a link error on 64-bit Cygwin when the option + -Wl,--disable-auto-import is in use. */ +_GL_EXTERN_C __declspec(dllimport) char **environ; +# endif +# if !@HAVE_DECL_ENVIRON@ +/* Set of environment variables and values. An array of strings of the form + "VARIABLE=VALUE", terminated with a NULL. */ +# if defined __APPLE__ && defined __MACH__ +# include <TargetConditionals.h> +# if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR +# define _GL_USE_CRT_EXTERNS +# endif +# endif +# ifdef _GL_USE_CRT_EXTERNS +# include <crt_externs.h> +# define environ (*_NSGetEnviron ()) +# else +# ifdef __cplusplus +extern "C" { +# endif +extern char **environ; +# ifdef __cplusplus +} +# endif +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# if HAVE_RAW_DECL_ENVIRON +_GL_UNISTD_INLINE char *** +_GL_WARN_ON_USE_ATTRIBUTE ("environ is unportable - " + "use gnulib module environ for portability") +rpl_environ (void) +{ + return &environ; +} +# undef environ +# define environ (*rpl_environ ()) +# endif +#endif + + +#if @GNULIB_EUIDACCESS@ +/* Like access(), except that it uses the effective user id and group id of + the current process. */ +# if !@HAVE_EUIDACCESS@ +_GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode)); +_GL_CXXALIASWARN (euidaccess); +# if defined GNULIB_POSIXCHECK +/* Like access(), this function is a security risk. */ +_GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - " + "use the gnulib module faccessat instead"); +# endif +#elif defined GNULIB_POSIXCHECK +# undef euidaccess +# if HAVE_RAW_DECL_EUIDACCESS +_GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - " + "use gnulib module euidaccess for portability"); +# endif +#endif + + +#if @GNULIB_FACCESSAT@ +# if @REPLACE_FACCESSAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef faccessat +# define faccessat rpl_faccessat +# endif +_GL_FUNCDECL_RPL (faccessat, int, + (int fd, char const *name, int mode, int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (faccessat, int, + (int fd, char const *name, int mode, int flag)); +# else +# if !@HAVE_FACCESSAT@ +_GL_FUNCDECL_SYS (faccessat, int, + (int fd, char const *file, int mode, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (faccessat, int, + (int fd, char const *file, int mode, int flag)); +# endif +_GL_CXXALIASWARN (faccessat); +#elif defined GNULIB_POSIXCHECK +# undef faccessat +# if HAVE_RAW_DECL_FACCESSAT +_GL_WARN_ON_USE (faccessat, "faccessat is not portable - " + "use gnulib module faccessat for portability"); +# endif +#endif + + +#if @GNULIB_FCHDIR@ +/* Change the process' current working directory to the directory on which + the given file descriptor is open. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fchdir.html>. */ +# if ! @HAVE_FCHDIR@ +_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); + +/* Gnulib internal hooks needed to maintain the fchdir metadata. */ +_GL_EXTERN_C int _gl_register_fd (int fd, const char *filename) + _GL_ARG_NONNULL ((2)); +_GL_EXTERN_C void _gl_unregister_fd (int fd); +_GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd); +_GL_EXTERN_C const char *_gl_directory_name (int fd); + +# else +# if !@HAVE_DECL_FCHDIR@ +_GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); +# endif +# endif +_GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/)); +_GL_CXXALIASWARN (fchdir); +#elif defined GNULIB_POSIXCHECK +# undef fchdir +# if HAVE_RAW_DECL_FCHDIR +_GL_WARN_ON_USE (fchdir, "fchdir is unportable - " + "use gnulib module fchdir for portability"); +# endif +#endif + + +#if @GNULIB_FCHOWNAT@ +# if @REPLACE_FCHOWNAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef fchownat +# define fchownat rpl_fchownat +# endif +_GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag)); +# else +# if !@HAVE_FCHOWNAT@ +_GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file, + uid_t owner, gid_t group, int flag)); +# endif +_GL_CXXALIASWARN (fchownat); +#elif defined GNULIB_POSIXCHECK +# undef fchownat +# if HAVE_RAW_DECL_FCHOWNAT +_GL_WARN_ON_USE (fchownat, "fchownat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if @GNULIB_FDATASYNC@ +/* Synchronize changes to a file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fdatasync.html>. */ +# if !@HAVE_FDATASYNC@ || !@HAVE_DECL_FDATASYNC@ +_GL_FUNCDECL_SYS (fdatasync, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (fdatasync, int, (int fd)); +_GL_CXXALIASWARN (fdatasync); +#elif defined GNULIB_POSIXCHECK +# undef fdatasync +# if HAVE_RAW_DECL_FDATASYNC +_GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - " + "use gnulib module fdatasync for portability"); +# endif +#endif + + +#if @GNULIB_FSYNC@ +/* Synchronize changes, including metadata, to a file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html>. */ +# if !@HAVE_FSYNC@ +_GL_FUNCDECL_SYS (fsync, int, (int fd)); +# endif +_GL_CXXALIAS_SYS (fsync, int, (int fd)); +_GL_CXXALIASWARN (fsync); +#elif defined GNULIB_POSIXCHECK +# undef fsync +# if HAVE_RAW_DECL_FSYNC +_GL_WARN_ON_USE (fsync, "fsync is unportable - " + "use gnulib module fsync for portability"); +# endif +#endif + + +#if @GNULIB_FTRUNCATE@ +/* Change the size of the file to which FD is opened to become equal to LENGTH. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html>. */ +# if @REPLACE_FTRUNCATE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ftruncate +# define ftruncate rpl_ftruncate +# endif +_GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length)); +_GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length)); +# else +# if !@HAVE_FTRUNCATE@ +_GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); +# endif +_GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); +# endif +_GL_CXXALIASWARN (ftruncate); +#elif defined GNULIB_POSIXCHECK +# undef ftruncate +# if HAVE_RAW_DECL_FTRUNCATE +_GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - " + "use gnulib module ftruncate for portability"); +# endif +#endif + + +#if @GNULIB_GETCWD@ +/* Get the name of the current working directory, and put it in SIZE bytes + of BUF. + Return BUF if successful, or NULL if the directory couldn't be determined + or SIZE was too small. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html>. + Additionally, the gnulib module 'getcwd' guarantees the following GNU + extension: If BUF is NULL, an array is allocated with 'malloc'; the array + is SIZE bytes long, unless SIZE == 0, in which case it is as big as + necessary. */ +# if @REPLACE_GETCWD@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getcwd rpl_getcwd +# endif +_GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size)); +_GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size)); +# else +/* Need to cast, because on mingw, the second parameter is + int size. */ +_GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); +# endif +_GL_CXXALIASWARN (getcwd); +#elif defined GNULIB_POSIXCHECK +# undef getcwd +# if HAVE_RAW_DECL_GETCWD +_GL_WARN_ON_USE (getcwd, "getcwd is unportable - " + "use gnulib module getcwd for portability"); +# endif +#endif + + +#if @GNULIB_GETDOMAINNAME@ +/* Return the NIS domain name of the machine. + WARNING! The NIS domain name is unrelated to the fully qualified host name + of the machine. It is also unrelated to email addresses. + WARNING! The NIS domain name is usually the empty string or "(none)" when + not using NIS. + + Put up to LEN bytes of the NIS domain name into NAME. + Null terminate it if the name is shorter than LEN. + If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if @REPLACE_GETDOMAINNAME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getdomainname +# define getdomainname rpl_getdomainname +# endif +_GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len)); +# else +# if !@HAVE_DECL_GETDOMAINNAME@ +_GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len)); +# endif +_GL_CXXALIASWARN (getdomainname); +#elif defined GNULIB_POSIXCHECK +# undef getdomainname +# if HAVE_RAW_DECL_GETDOMAINNAME +_GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - " + "use gnulib module getdomainname for portability"); +# endif +#endif + + +#if @GNULIB_GETDTABLESIZE@ +/* Return the maximum number of file descriptors in the current process. + In POSIX, this is same as sysconf (_SC_OPEN_MAX). */ +# if @REPLACE_GETDTABLESIZE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getdtablesize +# define getdtablesize rpl_getdtablesize +# endif +_GL_FUNCDECL_RPL (getdtablesize, int, (void)); +_GL_CXXALIAS_RPL (getdtablesize, int, (void)); +# else +# if !@HAVE_GETDTABLESIZE@ +_GL_FUNCDECL_SYS (getdtablesize, int, (void)); +# endif +_GL_CXXALIAS_SYS (getdtablesize, int, (void)); +# endif +_GL_CXXALIASWARN (getdtablesize); +#elif defined GNULIB_POSIXCHECK +# undef getdtablesize +# if HAVE_RAW_DECL_GETDTABLESIZE +_GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - " + "use gnulib module getdtablesize for portability"); +# endif +#endif + + +#if @GNULIB_GETGROUPS@ +/* Return the supplemental groups that the current process belongs to. + It is unspecified whether the effective group id is in the list. + If N is 0, return the group count; otherwise, N describes how many + entries are available in GROUPS. Return -1 and set errno if N is + not 0 and not large enough. Fails with ENOSYS on some systems. */ +# if @REPLACE_GETGROUPS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getgroups +# define getgroups rpl_getgroups +# endif +_GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups)); +_GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups)); +# else +# if !@HAVE_GETGROUPS@ +_GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups)); +# endif +_GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups)); +# endif +_GL_CXXALIASWARN (getgroups); +#elif defined GNULIB_POSIXCHECK +# undef getgroups +# if HAVE_RAW_DECL_GETGROUPS +_GL_WARN_ON_USE (getgroups, "getgroups is unportable - " + "use gnulib module getgroups for portability"); +# endif +#endif + + +#if @GNULIB_GETHOSTNAME@ +/* Return the standard host name of the machine. + WARNING! The host name may or may not be fully qualified. + + Put up to LEN bytes of the host name into NAME. + Null terminate it if the name is shorter than LEN. + If the host name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if @UNISTD_H_HAVE_WINSOCK2_H@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef gethostname +# define gethostname rpl_gethostname +# endif +_GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len)); +# else +# if !@HAVE_GETHOSTNAME@ +_GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second + parameter is + int len. */ +_GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len)); +# endif +_GL_CXXALIASWARN (gethostname); +#elif @UNISTD_H_HAVE_WINSOCK2_H@ +# undef gethostname +# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname +#elif defined GNULIB_POSIXCHECK +# undef gethostname +# if HAVE_RAW_DECL_GETHOSTNAME +_GL_WARN_ON_USE (gethostname, "gethostname is unportable - " + "use gnulib module gethostname for portability"); +# endif +#endif + + +#if @GNULIB_GETLOGIN@ +/* Returns the user's login name, or NULL if it cannot be found. Upon error, + returns NULL with errno set. + + See <http://www.opengroup.org/susv3xsh/getlogin.html>. + + Most programs don't need to use this function, because the information is + available through environment variables: + ${LOGNAME-$USER} on Unix platforms, + $USERNAME on native Windows platforms. + */ +# if !@HAVE_DECL_GETLOGIN@ +_GL_FUNCDECL_SYS (getlogin, char *, (void)); +# endif +_GL_CXXALIAS_SYS (getlogin, char *, (void)); +_GL_CXXALIASWARN (getlogin); +#elif defined GNULIB_POSIXCHECK +# undef getlogin +# if HAVE_RAW_DECL_GETLOGIN +_GL_WARN_ON_USE (getlogin, "getlogin is unportable - " + "use gnulib module getlogin for portability"); +# endif +#endif + + +#if @GNULIB_GETLOGIN_R@ +/* Copies the user's login name to NAME. + The array pointed to by NAME has room for SIZE bytes. + + Returns 0 if successful. Upon error, an error number is returned, or -1 in + the case that the login name cannot be found but no specific error is + provided (this case is hopefully rare but is left open by the POSIX spec). + + See <http://www.opengroup.org/susv3xsh/getlogin.html>. + + Most programs don't need to use this function, because the information is + available through environment variables: + ${LOGNAME-$USER} on Unix platforms, + $USERNAME on native Windows platforms. + */ +# if @REPLACE_GETLOGIN_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getlogin_r rpl_getlogin_r +# endif +_GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size)); +# else +# if !@HAVE_DECL_GETLOGIN_R@ +_GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Solaris 10 systems, the second argument is + int size. */ +_GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size)); +# endif +_GL_CXXALIASWARN (getlogin_r); +#elif defined GNULIB_POSIXCHECK +# undef getlogin_r +# if HAVE_RAW_DECL_GETLOGIN_R +_GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - " + "use gnulib module getlogin_r for portability"); +# endif +#endif + + +#if @GNULIB_GETPAGESIZE@ +# if @REPLACE_GETPAGESIZE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getpagesize rpl_getpagesize +# endif +_GL_FUNCDECL_RPL (getpagesize, int, (void)); +_GL_CXXALIAS_RPL (getpagesize, int, (void)); +# else +# if !@HAVE_GETPAGESIZE@ +# if !defined getpagesize +/* This is for POSIX systems. */ +# if !defined _gl_getpagesize && defined _SC_PAGESIZE +# if ! (defined __VMS && __VMS_VER < 70000000) +# define _gl_getpagesize() sysconf (_SC_PAGESIZE) +# endif +# endif +/* This is for older VMS. */ +# if !defined _gl_getpagesize && defined __VMS +# ifdef __ALPHA +# define _gl_getpagesize() 8192 +# else +# define _gl_getpagesize() 512 +# endif +# endif +/* This is for BeOS. */ +# if !defined _gl_getpagesize && @HAVE_OS_H@ +# include <OS.h> +# if defined B_PAGE_SIZE +# define _gl_getpagesize() B_PAGE_SIZE +# endif +# endif +/* This is for AmigaOS4.0. */ +# if !defined _gl_getpagesize && defined __amigaos4__ +# define _gl_getpagesize() 2048 +# endif +/* This is for older Unix systems. */ +# if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@ +# include <sys/param.h> +# ifdef EXEC_PAGESIZE +# define _gl_getpagesize() EXEC_PAGESIZE +# else +# ifdef NBPG +# ifndef CLSIZE +# define CLSIZE 1 +# endif +# define _gl_getpagesize() (NBPG * CLSIZE) +# else +# ifdef NBPC +# define _gl_getpagesize() NBPC +# endif +# endif +# endif +# endif +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define getpagesize() _gl_getpagesize () +# else +# if !GNULIB_defined_getpagesize_function +_GL_UNISTD_INLINE int +getpagesize () +{ + return _gl_getpagesize (); +} +# define GNULIB_defined_getpagesize_function 1 +# endif +# endif +# endif +# endif +/* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */ +_GL_CXXALIAS_SYS_CAST (getpagesize, int, (void)); +# endif +# if @HAVE_DECL_GETPAGESIZE@ +_GL_CXXALIASWARN (getpagesize); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getpagesize +# if HAVE_RAW_DECL_GETPAGESIZE +_GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - " + "use gnulib module getpagesize for portability"); +# endif +#endif + + +#if @GNULIB_GETPASS@ +/* Function getpass() from module 'getpass': + Read a password from /dev/tty or stdin. + Function getpass() from module 'getpass-gnu': + Read a password of arbitrary length from /dev/tty or stdin. */ +# if @REPLACE_GETPASS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef getpass +# define getpass rpl_getpass +# endif +_GL_FUNCDECL_RPL (getpass, char *, (const char *prompt) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (getpass, char *, (const char *prompt)); +# else +# if !@HAVE_GETPASS@ +_GL_FUNCDECL_SYS (getpass, char *, (const char *prompt) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (getpass, char *, (const char *prompt)); +# endif +_GL_CXXALIASWARN (getpass); +#elif defined GNULIB_POSIXCHECK +# undef getpass +# if HAVE_RAW_DECL_GETPASS +_GL_WARN_ON_USE (getpass, "getpass is unportable - " + "use gnulib module getpass or getpass-gnu for portability"); +# endif +#endif + + +#if @GNULIB_GETUSERSHELL@ +/* Return the next valid login shell on the system, or NULL when the end of + the list has been reached. */ +# if !@HAVE_DECL_GETUSERSHELL@ +_GL_FUNCDECL_SYS (getusershell, char *, (void)); +# endif +_GL_CXXALIAS_SYS (getusershell, char *, (void)); +_GL_CXXALIASWARN (getusershell); +#elif defined GNULIB_POSIXCHECK +# undef getusershell +# if HAVE_RAW_DECL_GETUSERSHELL +_GL_WARN_ON_USE (getusershell, "getusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + +#if @GNULIB_GETUSERSHELL@ +/* Rewind to pointer that is advanced at each getusershell() call. */ +# if !@HAVE_DECL_GETUSERSHELL@ +_GL_FUNCDECL_SYS (setusershell, void, (void)); +# endif +_GL_CXXALIAS_SYS (setusershell, void, (void)); +_GL_CXXALIASWARN (setusershell); +#elif defined GNULIB_POSIXCHECK +# undef setusershell +# if HAVE_RAW_DECL_SETUSERSHELL +_GL_WARN_ON_USE (setusershell, "setusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + +#if @GNULIB_GETUSERSHELL@ +/* Free the pointer that is advanced at each getusershell() call and + associated resources. */ +# if !@HAVE_DECL_GETUSERSHELL@ +_GL_FUNCDECL_SYS (endusershell, void, (void)); +# endif +_GL_CXXALIAS_SYS (endusershell, void, (void)); +_GL_CXXALIASWARN (endusershell); +#elif defined GNULIB_POSIXCHECK +# undef endusershell +# if HAVE_RAW_DECL_ENDUSERSHELL +_GL_WARN_ON_USE (endusershell, "endusershell is unportable - " + "use gnulib module getusershell for portability"); +# endif +#endif + + +#if @GNULIB_GROUP_MEMBER@ +/* Determine whether group id is in calling user's group list. */ +# if !@HAVE_GROUP_MEMBER@ +_GL_FUNCDECL_SYS (group_member, int, (gid_t gid)); +# endif +_GL_CXXALIAS_SYS (group_member, int, (gid_t gid)); +_GL_CXXALIASWARN (group_member); +#elif defined GNULIB_POSIXCHECK +# undef group_member +# if HAVE_RAW_DECL_GROUP_MEMBER +_GL_WARN_ON_USE (group_member, "group_member is unportable - " + "use gnulib module group-member for portability"); +# endif +#endif + + +#if @GNULIB_ISATTY@ +# if @REPLACE_ISATTY@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef isatty +# define isatty rpl_isatty +# endif +_GL_FUNCDECL_RPL (isatty, int, (int fd)); +_GL_CXXALIAS_RPL (isatty, int, (int fd)); +# else +_GL_CXXALIAS_SYS (isatty, int, (int fd)); +# endif +_GL_CXXALIASWARN (isatty); +#elif defined GNULIB_POSIXCHECK +# undef isatty +# if HAVE_RAW_DECL_ISATTY +_GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - " + "use gnulib module isatty for portability"); +# endif +#endif + + +#if @GNULIB_LCHOWN@ +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Do not follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/lchown.html>. */ +# if @REPLACE_LCHOWN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef lchown +# define lchown rpl_lchown +# endif +_GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)); +# else +# if !@HAVE_LCHOWN@ +_GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)); +# endif +_GL_CXXALIASWARN (lchown); +#elif defined GNULIB_POSIXCHECK +# undef lchown +# if HAVE_RAW_DECL_LCHOWN +_GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - " + "use gnulib module lchown for portability"); +# endif +#endif + + +#if @GNULIB_LINK@ +/* Create a new hard link for an existing file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html>. */ +# if @REPLACE_LINK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define link rpl_link +# endif +_GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2)); +# else +# if !@HAVE_LINK@ +_GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2)); +# endif +_GL_CXXALIASWARN (link); +#elif defined GNULIB_POSIXCHECK +# undef link +# if HAVE_RAW_DECL_LINK +_GL_WARN_ON_USE (link, "link is unportable - " + "use gnulib module link for portability"); +# endif +#endif + + +#if @GNULIB_LINKAT@ +/* Create a new hard link for an existing file, relative to two + directories. FLAG controls whether symlinks are followed. + Return 0 if successful, otherwise -1 and errno set. */ +# if @REPLACE_LINKAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef linkat +# define linkat rpl_linkat +# endif +_GL_FUNCDECL_RPL (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag) + _GL_ARG_NONNULL ((2, 4))); +_GL_CXXALIAS_RPL (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag)); +# else +# if !@HAVE_LINKAT@ +_GL_FUNCDECL_SYS (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag) + _GL_ARG_NONNULL ((2, 4))); +# endif +_GL_CXXALIAS_SYS (linkat, int, + (int fd1, const char *path1, int fd2, const char *path2, + int flag)); +# endif +_GL_CXXALIASWARN (linkat); +#elif defined GNULIB_POSIXCHECK +# undef linkat +# if HAVE_RAW_DECL_LINKAT +_GL_WARN_ON_USE (linkat, "linkat is unportable - " + "use gnulib module linkat for portability"); +# endif +#endif + + +#if @GNULIB_LSEEK@ +/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. + Return the new offset if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/lseek.html>. */ +# if @REPLACE_LSEEK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define lseek rpl_lseek +# endif +_GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence)); +_GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence)); +# else +_GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); +# endif +_GL_CXXALIASWARN (lseek); +#elif defined GNULIB_POSIXCHECK +# undef lseek +# if HAVE_RAW_DECL_LSEEK +_GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some " + "systems - use gnulib module lseek for portability"); +# endif +#endif + + +#if @GNULIB_PIPE@ +/* Create a pipe, defaulting to O_BINARY mode. + Store the read-end as fd[0] and the write-end as fd[1]. + Return 0 upon success, or -1 with errno set upon failure. */ +# if !@HAVE_PIPE@ +_GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (pipe, int, (int fd[2])); +_GL_CXXALIASWARN (pipe); +#elif defined GNULIB_POSIXCHECK +# undef pipe +# if HAVE_RAW_DECL_PIPE +_GL_WARN_ON_USE (pipe, "pipe is unportable - " + "use gnulib module pipe-posix for portability"); +# endif +#endif + + +#if @GNULIB_PIPE2@ +/* Create a pipe, applying the given flags when opening the read-end of the + pipe and the write-end of the pipe. + The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) + and O_TEXT, O_BINARY (defined in "binary-io.h"). + Store the read-end as fd[0] and the write-end as fd[1]. + Return 0 upon success, or -1 with errno set upon failure. + See also the Linux man page at + <https://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>. */ +# if @HAVE_PIPE2@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define pipe2 rpl_pipe2 +# endif +_GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags)); +# else +_GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags)); +# endif +_GL_CXXALIASWARN (pipe2); +#elif defined GNULIB_POSIXCHECK +# undef pipe2 +# if HAVE_RAW_DECL_PIPE2 +_GL_WARN_ON_USE (pipe2, "pipe2 is unportable - " + "use gnulib module pipe2 for portability"); +# endif +#endif + + +#if @GNULIB_PREAD@ +/* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET. + Return the number of bytes placed into BUF if successful, otherwise + set errno and return -1. 0 indicates EOF. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html>. */ +# if @REPLACE_PREAD@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pread +# define pread rpl_pread +# endif +_GL_FUNCDECL_RPL (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset)); +# else +# if !@HAVE_PREAD@ +_GL_FUNCDECL_SYS (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (pread, ssize_t, + (int fd, void *buf, size_t bufsize, off_t offset)); +# endif +_GL_CXXALIASWARN (pread); +#elif defined GNULIB_POSIXCHECK +# undef pread +# if HAVE_RAW_DECL_PREAD +_GL_WARN_ON_USE (pread, "pread is unportable - " + "use gnulib module pread for portability"); +# endif +#endif + + +#if @GNULIB_PWRITE@ +/* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET. + Return the number of bytes written if successful, otherwise + set errno and return -1. 0 indicates nothing written. See the + POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html>. */ +# if @REPLACE_PWRITE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef pwrite +# define pwrite rpl_pwrite +# endif +_GL_FUNCDECL_RPL (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset)); +# else +# if !@HAVE_PWRITE@ +_GL_FUNCDECL_SYS (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (pwrite, ssize_t, + (int fd, const void *buf, size_t bufsize, off_t offset)); +# endif +_GL_CXXALIASWARN (pwrite); +#elif defined GNULIB_POSIXCHECK +# undef pwrite +# if HAVE_RAW_DECL_PWRITE +_GL_WARN_ON_USE (pwrite, "pwrite is unportable - " + "use gnulib module pwrite for portability"); +# endif +#endif + + +#if @GNULIB_READ@ +/* Read up to COUNT bytes from file descriptor FD into the buffer starting + at BUF. See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html>. */ +# if @REPLACE_READ@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef read +# define read rpl_read +# endif +_GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count)); +# else +/* Need to cast, because on mingw, the third parameter is + unsigned int count + and the return type is 'int'. */ +_GL_CXXALIAS_SYS_CAST (read, ssize_t, (int fd, void *buf, size_t count)); +# endif +_GL_CXXALIASWARN (read); +#endif + + +#if @GNULIB_READLINK@ +/* Read the contents of the symbolic link FILE and place the first BUFSIZE + bytes of it into BUF. Return the number of bytes placed into BUF if + successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>. */ +# if @REPLACE_READLINK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define readlink rpl_readlink +# endif +_GL_FUNCDECL_RPL (readlink, ssize_t, + (const char *file, char *buf, size_t bufsize) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (readlink, ssize_t, + (const char *file, char *buf, size_t bufsize)); +# else +# if !@HAVE_READLINK@ +_GL_FUNCDECL_SYS (readlink, ssize_t, + (const char *file, char *buf, size_t bufsize) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (readlink, ssize_t, + (const char *file, char *buf, size_t bufsize)); +# endif +_GL_CXXALIASWARN (readlink); +#elif defined GNULIB_POSIXCHECK +# undef readlink +# if HAVE_RAW_DECL_READLINK +_GL_WARN_ON_USE (readlink, "readlink is unportable - " + "use gnulib module readlink for portability"); +# endif +#endif + + +#if @GNULIB_READLINKAT@ +# if @REPLACE_READLINKAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define readlinkat rpl_readlinkat +# endif +_GL_FUNCDECL_RPL (readlinkat, ssize_t, + (int fd, char const *file, char *buf, size_t len) + _GL_ARG_NONNULL ((2, 3))); +_GL_CXXALIAS_RPL (readlinkat, ssize_t, + (int fd, char const *file, char *buf, size_t len)); +# else +# if !@HAVE_READLINKAT@ +_GL_FUNCDECL_SYS (readlinkat, ssize_t, + (int fd, char const *file, char *buf, size_t len) + _GL_ARG_NONNULL ((2, 3))); +# endif +_GL_CXXALIAS_SYS (readlinkat, ssize_t, + (int fd, char const *file, char *buf, size_t len)); +# endif +_GL_CXXALIASWARN (readlinkat); +#elif defined GNULIB_POSIXCHECK +# undef readlinkat +# if HAVE_RAW_DECL_READLINKAT +_GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - " + "use gnulib module readlinkat for portability"); +# endif +#endif + + +#if @GNULIB_RMDIR@ +/* Remove the directory DIR. */ +# if @REPLACE_RMDIR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define rmdir rpl_rmdir +# endif +_GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (rmdir, int, (char const *name)); +# else +_GL_CXXALIAS_SYS (rmdir, int, (char const *name)); +# endif +_GL_CXXALIASWARN (rmdir); +#elif defined GNULIB_POSIXCHECK +# undef rmdir +# if HAVE_RAW_DECL_RMDIR +_GL_WARN_ON_USE (rmdir, "rmdir is unportable - " + "use gnulib module rmdir for portability"); +# endif +#endif + + +#if @GNULIB_SETHOSTNAME@ +/* Set the host name of the machine. + The host name may or may not be fully qualified. + + Put LEN bytes of NAME into the host name. + Return 0 if successful, otherwise, set errno and return -1. + + Platforms with no ability to set the hostname return -1 and set + errno = ENOSYS. */ +# if !@HAVE_SETHOSTNAME@ || !@HAVE_DECL_SETHOSTNAME@ +_GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len) + _GL_ARG_NONNULL ((1))); +# endif +/* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5 + and FreeBSD 6.4 the second parameter is int. On Solaris 11 + 2011-10, the first parameter is not const. */ +_GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len)); +_GL_CXXALIASWARN (sethostname); +#elif defined GNULIB_POSIXCHECK +# undef sethostname +# if HAVE_RAW_DECL_SETHOSTNAME +_GL_WARN_ON_USE (sethostname, "sethostname is unportable - " + "use gnulib module sethostname for portability"); +# endif +#endif + + +#if @GNULIB_SLEEP@ +/* Pause the execution of the current thread for N seconds. + Returns the number of seconds left to sleep. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html>. */ +# if @REPLACE_SLEEP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef sleep +# define sleep rpl_sleep +# endif +_GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n)); +_GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n)); +# else +# if !@HAVE_SLEEP@ +_GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n)); +# endif +_GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n)); +# endif +_GL_CXXALIASWARN (sleep); +#elif defined GNULIB_POSIXCHECK +# undef sleep +# if HAVE_RAW_DECL_SLEEP +_GL_WARN_ON_USE (sleep, "sleep is unportable - " + "use gnulib module sleep for portability"); +# endif +#endif + + +#if @GNULIB_SYMLINK@ +# if @REPLACE_SYMLINK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef symlink +# define symlink rpl_symlink +# endif +_GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file) + _GL_ARG_NONNULL ((1, 2))); +_GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file)); +# else +# if !@HAVE_SYMLINK@ +_GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file) + _GL_ARG_NONNULL ((1, 2))); +# endif +_GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file)); +# endif +_GL_CXXALIASWARN (symlink); +#elif defined GNULIB_POSIXCHECK +# undef symlink +# if HAVE_RAW_DECL_SYMLINK +_GL_WARN_ON_USE (symlink, "symlink is not portable - " + "use gnulib module symlink for portability"); +# endif +#endif + + +#if @GNULIB_SYMLINKAT@ +# if @REPLACE_SYMLINKAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef symlinkat +# define symlinkat rpl_symlinkat +# endif +_GL_FUNCDECL_RPL (symlinkat, int, + (char const *contents, int fd, char const *file) + _GL_ARG_NONNULL ((1, 3))); +_GL_CXXALIAS_RPL (symlinkat, int, + (char const *contents, int fd, char const *file)); +# else +# if !@HAVE_SYMLINKAT@ +_GL_FUNCDECL_SYS (symlinkat, int, + (char const *contents, int fd, char const *file) + _GL_ARG_NONNULL ((1, 3))); +# endif +_GL_CXXALIAS_SYS (symlinkat, int, + (char const *contents, int fd, char const *file)); +# endif +_GL_CXXALIASWARN (symlinkat); +#elif defined GNULIB_POSIXCHECK +# undef symlinkat +# if HAVE_RAW_DECL_SYMLINKAT +_GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - " + "use gnulib module symlinkat for portability"); +# endif +#endif + + +#if @GNULIB_TRUNCATE@ +/* Change the size of the file designated by FILENAME to become equal to LENGTH. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/truncate.html>. */ +# if @REPLACE_TRUNCATE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef truncate +# define truncate rpl_truncate +# endif +_GL_FUNCDECL_RPL (truncate, int, (const char *filename, off_t length) + _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (truncate, int, (const char *filename, off_t length)); +# else +# if !@HAVE_DECL_TRUNCATE@ +_GL_FUNCDECL_SYS (truncate, int, (const char *filename, off_t length) + _GL_ARG_NONNULL ((1))); +# endif +_GL_CXXALIAS_SYS (truncate, int, (const char *filename, off_t length)); +# endif +_GL_CXXALIASWARN (truncate); +#elif defined GNULIB_POSIXCHECK +# undef truncate +# if HAVE_RAW_DECL_TRUNCATE +_GL_WARN_ON_USE (truncate, "truncate is unportable - " + "use gnulib module truncate for portability"); +# endif +#endif + + +#if @GNULIB_TTYNAME_R@ +/* Store at most BUFLEN characters of the pathname of the terminal FD is + open on in BUF. Return 0 on success, otherwise an error number. */ +# if @REPLACE_TTYNAME_R@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef ttyname_r +# define ttyname_r rpl_ttyname_r +# endif +_GL_FUNCDECL_RPL (ttyname_r, int, + (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (ttyname_r, int, + (int fd, char *buf, size_t buflen)); +# else +# if !@HAVE_DECL_TTYNAME_R@ +_GL_FUNCDECL_SYS (ttyname_r, int, + (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (ttyname_r, int, + (int fd, char *buf, size_t buflen)); +# endif +_GL_CXXALIASWARN (ttyname_r); +#elif defined GNULIB_POSIXCHECK +# undef ttyname_r +# if HAVE_RAW_DECL_TTYNAME_R +_GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - " + "use gnulib module ttyname_r for portability"); +# endif +#endif + + +#if @GNULIB_UNLINK@ +# if @REPLACE_UNLINK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unlink +# define unlink rpl_unlink +# endif +_GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (unlink, int, (char const *file)); +# else +_GL_CXXALIAS_SYS (unlink, int, (char const *file)); +# endif +_GL_CXXALIASWARN (unlink); +#elif defined GNULIB_POSIXCHECK +# undef unlink +# if HAVE_RAW_DECL_UNLINK +_GL_WARN_ON_USE (unlink, "unlink is not portable - " + "use gnulib module unlink for portability"); +# endif +#endif + + +#if @GNULIB_UNLINKAT@ +# if @REPLACE_UNLINKAT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef unlinkat +# define unlinkat rpl_unlinkat +# endif +_GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag)); +# else +# if !@HAVE_UNLINKAT@ +_GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag)); +# endif +_GL_CXXALIASWARN (unlinkat); +#elif defined GNULIB_POSIXCHECK +# undef unlinkat +# if HAVE_RAW_DECL_UNLINKAT +_GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - " + "use gnulib module openat for portability"); +# endif +#endif + + +#if @GNULIB_USLEEP@ +/* Pause the execution of the current thread for N microseconds. + Returns 0 on completion, or -1 on range error. + See the POSIX:2001 specification + <http://www.opengroup.org/susv3xsh/usleep.html>. */ +# if @REPLACE_USLEEP@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef usleep +# define usleep rpl_usleep +# endif +_GL_FUNCDECL_RPL (usleep, int, (useconds_t n)); +_GL_CXXALIAS_RPL (usleep, int, (useconds_t n)); +# else +# if !@HAVE_USLEEP@ +_GL_FUNCDECL_SYS (usleep, int, (useconds_t n)); +# endif +_GL_CXXALIAS_SYS (usleep, int, (useconds_t n)); +# endif +_GL_CXXALIASWARN (usleep); +#elif defined GNULIB_POSIXCHECK +# undef usleep +# if HAVE_RAW_DECL_USLEEP +_GL_WARN_ON_USE (usleep, "usleep is unportable - " + "use gnulib module usleep for portability"); +# endif +#endif + + +#if @GNULIB_WRITE@ +/* Write up to COUNT bytes starting at BUF to file descriptor FD. + See the POSIX:2008 specification + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>. */ +# if @REPLACE_WRITE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef write +# define write rpl_write +# endif +_GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count)); +# else +/* Need to cast, because on mingw, the third parameter is + unsigned int count + and the return type is 'int'. */ +_GL_CXXALIAS_SYS_CAST (write, ssize_t, (int fd, const void *buf, size_t count)); +# endif +_GL_CXXALIASWARN (write); +#endif + +_GL_INLINE_HEADER_END + +#endif /* _@GUARD_PREFIX@_UNISTD_H */ +#endif /* _GL_INCLUDING_UNISTD_H */ +#endif /* _@GUARD_PREFIX@_UNISTD_H */ diff --git a/devspec.en_US/project/recutils/lib/unlocked-io.h b/devspec.en_US/project/recutils/lib/unlocked-io.h new file mode 100755 index 0000000..ee1c062 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/unlocked-io.h @@ -0,0 +1,136 @@ +/* Prefer faster, non-thread-safe stdio functions if available. + + Copyright (C) 2001-2004, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Jim Meyering. */ + +#ifndef UNLOCKED_IO_H +# define UNLOCKED_IO_H 1 + +/* These are wrappers for functions/macros from the GNU C library, and + from other C libraries supporting POSIX's optional thread-safe functions. + + The standard I/O functions are thread-safe. These *_unlocked ones are + more efficient but not thread-safe. That they're not thread-safe is + fine since all of the applications in this package are single threaded. + + Also, some code that is shared with the GNU C library may invoke + the *_unlocked functions directly. On hosts that lack those + functions, invoke the non-thread-safe versions instead. */ + +# include <stdio.h> + +# if HAVE_DECL_CLEARERR_UNLOCKED +# undef clearerr +# define clearerr(x) clearerr_unlocked (x) +# else +# define clearerr_unlocked(x) clearerr (x) +# endif + +# if HAVE_DECL_FEOF_UNLOCKED +# undef feof +# define feof(x) feof_unlocked (x) +# else +# define feof_unlocked(x) feof (x) +# endif + +# if HAVE_DECL_FERROR_UNLOCKED +# undef ferror +# define ferror(x) ferror_unlocked (x) +# else +# define ferror_unlocked(x) ferror (x) +# endif + +# if HAVE_DECL_FFLUSH_UNLOCKED +# undef fflush +# define fflush(x) fflush_unlocked (x) +# else +# define fflush_unlocked(x) fflush (x) +# endif + +# if HAVE_DECL_FGETS_UNLOCKED +# undef fgets +# define fgets(x,y,z) fgets_unlocked (x,y,z) +# else +# define fgets_unlocked(x,y,z) fgets (x,y,z) +# endif + +# if HAVE_DECL_FPUTC_UNLOCKED +# undef fputc +# define fputc(x,y) fputc_unlocked (x,y) +# else +# define fputc_unlocked(x,y) fputc (x,y) +# endif + +# if HAVE_DECL_FPUTS_UNLOCKED +# undef fputs +# define fputs(x,y) fputs_unlocked (x,y) +# else +# define fputs_unlocked(x,y) fputs (x,y) +# endif + +# if HAVE_DECL_FREAD_UNLOCKED +# undef fread +# define fread(w,x,y,z) fread_unlocked (w,x,y,z) +# else +# define fread_unlocked(w,x,y,z) fread (w,x,y,z) +# endif + +# if HAVE_DECL_FWRITE_UNLOCKED +# undef fwrite +# define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z) +# else +# define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z) +# endif + +# if HAVE_DECL_GETC_UNLOCKED +# undef getc +# define getc(x) getc_unlocked (x) +# else +# define getc_unlocked(x) getc (x) +# endif + +# if HAVE_DECL_GETCHAR_UNLOCKED +# undef getchar +# define getchar() getchar_unlocked () +# else +# define getchar_unlocked() getchar () +# endif + +# if HAVE_DECL_PUTC_UNLOCKED +# undef putc +# define putc(x,y) putc_unlocked (x,y) +# else +# define putc_unlocked(x,y) putc (x,y) +# endif + +# if HAVE_DECL_PUTCHAR_UNLOCKED +# undef putchar +# define putchar(x) putchar_unlocked (x) +# else +# define putchar_unlocked(x) putchar (x) +# endif + +# undef flockfile +# define flockfile(x) ((void) 0) + +# undef ftrylockfile +# define ftrylockfile(x) 0 + +# undef funlockfile +# define funlockfile(x) ((void) 0) + +#endif /* UNLOCKED_IO_H */ diff --git a/devspec.en_US/project/recutils/lib/unsetenv.c b/devspec.en_US/project/recutils/lib/unsetenv.c new file mode 100755 index 0000000..0199280 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/unsetenv.c @@ -0,0 +1,127 @@ +/* Copyright (C) 1992, 1995-2002, 2005-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc + optimizes away the name == NULL test below. */ +#define _GL_ARG_NONNULL(params) + +#include <config.h> + +/* Specification. */ +#include <stdlib.h> + +#include <errno.h> +#if !_LIBC +# define __set_errno(ev) ((errno) = (ev)) +#endif + +#include <string.h> +#include <unistd.h> + +#if !_LIBC +# define __environ environ +#endif + +#if _LIBC +/* This lock protects against simultaneous modifications of 'environ'. */ +# include <bits/libc-lock.h> +__libc_lock_define_initialized (static, envlock) +# define LOCK __libc_lock_lock (envlock) +# define UNLOCK __libc_lock_unlock (envlock) +#else +# define LOCK +# define UNLOCK +#endif + +/* In the GNU C library we must keep the namespace clean. */ +#ifdef _LIBC +# define unsetenv __unsetenv +#endif + +#if _LIBC || !HAVE_UNSETENV + +int +unsetenv (const char *name) +{ + size_t len; + char **ep; + + if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) + { + __set_errno (EINVAL); + return -1; + } + + len = strlen (name); + + LOCK; + + ep = __environ; + while (*ep != NULL) + if (!strncmp (*ep, name, len) && (*ep)[len] == '=') + { + /* Found it. Remove this pointer by moving later ones back. */ + char **dp = ep; + + do + dp[0] = dp[1]; + while (*dp++); + /* Continue the loop in case NAME appears again. */ + } + else + ++ep; + + UNLOCK; + + return 0; +} + +#ifdef _LIBC +# undef unsetenv +weak_alias (__unsetenv, unsetenv) +#endif + +#else /* HAVE_UNSETENV */ + +# undef unsetenv +# if !HAVE_DECL_UNSETENV +# if VOID_UNSETENV +extern void unsetenv (const char *); +# else +extern int unsetenv (const char *); +# endif +# endif + +/* Call the underlying unsetenv, in case there is hidden bookkeeping + that needs updating beyond just modifying environ. */ +int +rpl_unsetenv (const char *name) +{ + int result = 0; + if (!name || !*name || strchr (name, '=')) + { + errno = EINVAL; + return -1; + } + while (getenv (name)) +# if !VOID_UNSETENV + result = +# endif + unsetenv (name); + return result; +} + +#endif /* HAVE_UNSETENV */ diff --git a/devspec.en_US/project/recutils/lib/unused-parameter.h b/devspec.en_US/project/recutils/lib/unused-parameter.h new file mode 100755 index 0000000..5e57de1 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/unused-parameter.h @@ -0,0 +1,36 @@ +/* A C macro for declaring that specific function parameters are not used. + Copyright (C) 2008-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_UNUSED_PARAMETER is a marker that can be appended to function parameter + declarations for parameters that are not used. This helps to reduce + warnings, such as from GCC -Wunused-parameter. The syntax is as follows: + type param _GL_UNUSED_PARAMETER + or more generally + param_decl _GL_UNUSED_PARAMETER + For example: + int param _GL_UNUSED_PARAMETER + int *(*param)(void) _GL_UNUSED_PARAMETER + Other possible, but obscure and discouraged syntaxes: + int _GL_UNUSED_PARAMETER *(*param)(void) + _GL_UNUSED_PARAMETER int *(*param)(void) + */ +#ifndef _GL_UNUSED_PARAMETER +# if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_UNUSED_PARAMETER __attribute__ ((__unused__)) +# else +# define _GL_UNUSED_PARAMETER +# endif +#endif diff --git a/devspec.en_US/project/recutils/lib/vasnprintf.c b/devspec.en_US/project/recutils/lib/vasnprintf.c new file mode 100755 index 0000000..c475903 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/vasnprintf.c @@ -0,0 +1,5621 @@ +/* vsprintf with automatic memory allocation. + Copyright (C) 1999, 2002-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* This file can be parametrized with the following macros: + VASNPRINTF The name of the function being defined. + FCHAR_T The element type of the format string. + DCHAR_T The element type of the destination (result) string. + FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters + in the format string are ASCII. MUST be set if + FCHAR_T and DCHAR_T are not the same type. + DIRECTIVE Structure denoting a format directive. + Depends on FCHAR_T. + DIRECTIVES Structure denoting the set of format directives of a + format string. Depends on FCHAR_T. + PRINTF_PARSE Function that parses a format string. + Depends on FCHAR_T. + DCHAR_CPY memcpy like function for DCHAR_T[] arrays. + DCHAR_SET memset like function for DCHAR_T[] arrays. + DCHAR_MBSNLEN mbsnlen like function for DCHAR_T[] arrays. + SNPRINTF The system's snprintf (or similar) function. + This may be either snprintf or swprintf. + TCHAR_T The element type of the argument and result string + of the said SNPRINTF function. This may be either + char or wchar_t. The code exploits that + sizeof (TCHAR_T) | sizeof (DCHAR_T) and + alignof (TCHAR_T) <= alignof (DCHAR_T). + DCHAR_IS_TCHAR Set to 1 if DCHAR_T and TCHAR_T are the same type. + DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[]. + DCHAR_IS_UINT8_T Set to 1 if DCHAR_T is uint8_t. + DCHAR_IS_UINT16_T Set to 1 if DCHAR_T is uint16_t. + DCHAR_IS_UINT32_T Set to 1 if DCHAR_T is uint32_t. */ + +/* Tell glibc's <stdio.h> to provide a prototype for snprintf(). + This must come before <config.h> because <config.h> may include + <features.h>, and once <features.h> has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#ifndef VASNPRINTF +# include <config.h> +#endif +#ifndef IN_LIBINTL +# include <alloca.h> +#endif + +/* Specification. */ +#ifndef VASNPRINTF +# if WIDE_CHAR_VERSION +# include "vasnwprintf.h" +# else +# include "vasnprintf.h" +# endif +#endif + +#include <locale.h> /* localeconv() */ +#include <stdio.h> /* snprintf(), sprintf() */ +#include <stdlib.h> /* abort(), malloc(), realloc(), free() */ +#include <string.h> /* memcpy(), strlen() */ +#include <errno.h> /* errno */ +#include <limits.h> /* CHAR_BIT */ +#include <float.h> /* DBL_MAX_EXP, LDBL_MAX_EXP */ +#if HAVE_NL_LANGINFO +# include <langinfo.h> +#endif +#ifndef VASNPRINTF +# if WIDE_CHAR_VERSION +# include "wprintf-parse.h" +# else +# include "printf-parse.h" +# endif +#endif + +/* Checked size_t computations. */ +#include "xsize.h" + +#include "verify.h" + +#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL +# include <math.h> +# include "float+.h" +#endif + +#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL +# include <math.h> +# include "isnand-nolibm.h" +#endif + +#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL +# include <math.h> +# include "isnanl-nolibm.h" +# include "fpucw.h" +#endif + +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL +# include <math.h> +# include "isnand-nolibm.h" +# include "printf-frexp.h" +#endif + +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL +# include <math.h> +# include "isnanl-nolibm.h" +# include "printf-frexpl.h" +# include "fpucw.h" +#endif + +#ifndef FALLTHROUGH +# if __GNUC__ < 7 +# define FALLTHROUGH ((void) 0) +# else +# define FALLTHROUGH __attribute__ ((__fallthrough__)) +# endif +#endif + +/* Default parameters. */ +#ifndef VASNPRINTF +# if WIDE_CHAR_VERSION +# define VASNPRINTF vasnwprintf +# define FCHAR_T wchar_t +# define DCHAR_T wchar_t +# define TCHAR_T wchar_t +# define DCHAR_IS_TCHAR 1 +# define DIRECTIVE wchar_t_directive +# define DIRECTIVES wchar_t_directives +# define PRINTF_PARSE wprintf_parse +# define DCHAR_CPY wmemcpy +# define DCHAR_SET wmemset +# else +# define VASNPRINTF vasnprintf +# define FCHAR_T char +# define DCHAR_T char +# define TCHAR_T char +# define DCHAR_IS_TCHAR 1 +# define DIRECTIVE char_directive +# define DIRECTIVES char_directives +# define PRINTF_PARSE printf_parse +# define DCHAR_CPY memcpy +# define DCHAR_SET memset +# endif +#endif +#if WIDE_CHAR_VERSION + /* TCHAR_T is wchar_t. */ +# define USE_SNPRINTF 1 +# if HAVE_DECL__SNWPRINTF + /* On Windows, the function swprintf() has a different signature than + on Unix; we use the function _snwprintf() or - on mingw - snwprintf() + instead. The mingw function snwprintf() has fewer bugs than the + MSVCRT function _snwprintf(), so prefer that. */ +# if defined __MINGW32__ +# define SNPRINTF snwprintf +# else +# define SNPRINTF _snwprintf +# define USE_MSVC__SNPRINTF 1 +# endif +# else + /* Unix. */ +# define SNPRINTF swprintf +# endif +#else + /* TCHAR_T is char. */ + /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'. + But don't use it on BeOS, since BeOS snprintf produces no output if the + size argument is >= 0x3000000. + Also don't use it on Linux libc5, since there snprintf with size = 1 + writes any output without bounds, like sprintf. */ +# if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1) +# define USE_SNPRINTF 1 +# else +# define USE_SNPRINTF 0 +# endif +# if HAVE_DECL__SNPRINTF + /* Windows. The mingw function snprintf() has fewer bugs than the MSVCRT + function _snprintf(), so prefer that. */ +# if defined __MINGW32__ +# define SNPRINTF snprintf + /* Here we need to call the native snprintf, not rpl_snprintf. */ +# undef snprintf +# else + /* MSVC versions < 14 did not have snprintf, only _snprintf. */ +# define SNPRINTF _snprintf +# define USE_MSVC__SNPRINTF 1 +# endif +# else + /* Unix. */ +# define SNPRINTF snprintf + /* Here we need to call the native snprintf, not rpl_snprintf. */ +# undef snprintf +# endif +#endif +/* Here we need to call the native sprintf, not rpl_sprintf. */ +#undef sprintf + +/* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized" + warnings in this file. Use -Dlint to suppress them. */ +#if defined GCC_LINT || defined lint +# define IF_LINT(Code) Code +#else +# define IF_LINT(Code) /* empty */ +#endif + +/* Avoid some warnings from "gcc -Wshadow". + This file doesn't use the exp() and remainder() functions. */ +#undef exp +#define exp expo +#undef remainder +#define remainder rem + +#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && !WIDE_CHAR_VERSION +# if (HAVE_STRNLEN && !defined _AIX) +# define local_strnlen strnlen +# else +# ifndef local_strnlen_defined +# define local_strnlen_defined 1 +static size_t +local_strnlen (const char *string, size_t maxlen) +{ + const char *end = memchr (string, '\0', maxlen); + return end ? (size_t) (end - string) : maxlen; +} +# endif +# endif +#endif + +#if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T +# if HAVE_WCSLEN +# define local_wcslen wcslen +# else + /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid + a dependency towards this library, here is a local substitute. + Define this substitute only once, even if this file is included + twice in the same compilation unit. */ +# ifndef local_wcslen_defined +# define local_wcslen_defined 1 +static size_t +local_wcslen (const wchar_t *s) +{ + const wchar_t *ptr; + + for (ptr = s; *ptr != (wchar_t) 0; ptr++) + ; + return ptr - s; +} +# endif +# endif +#endif + +#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && HAVE_WCHAR_T && WIDE_CHAR_VERSION +# if HAVE_WCSNLEN +# define local_wcsnlen wcsnlen +# else +# ifndef local_wcsnlen_defined +# define local_wcsnlen_defined 1 +static size_t +local_wcsnlen (const wchar_t *s, size_t maxlen) +{ + const wchar_t *ptr; + + for (ptr = s; maxlen > 0 && *ptr != (wchar_t) 0; ptr++, maxlen--) + ; + return ptr - s; +} +# endif +# endif +#endif + +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL +/* Determine the decimal-point character according to the current locale. */ +# ifndef decimal_point_char_defined +# define decimal_point_char_defined 1 +static char +decimal_point_char (void) +{ + const char *point; + /* Determine it in a multithread-safe way. We know nl_langinfo is + multithread-safe on glibc systems and Mac OS X systems, but is not required + to be multithread-safe by POSIX. sprintf(), however, is multithread-safe. + localeconv() is rarely multithread-safe. */ +# if HAVE_NL_LANGINFO && (__GLIBC__ || defined __UCLIBC__ || (defined __APPLE__ && defined __MACH__)) + point = nl_langinfo (RADIXCHAR); +# elif 1 + char pointbuf[5]; + sprintf (pointbuf, "%#.0f", 1.0); + point = &pointbuf[1]; +# else + point = localeconv () -> decimal_point; +# endif + /* The decimal point is always a single byte: either '.' or ','. */ + return (point[0] != '\0' ? point[0] : '.'); +} +# endif +#endif + +#if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL + +/* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ +static int +is_infinite_or_zero (double x) +{ + return isnand (x) || x + x == x; +} + +#endif + +#if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL + +/* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ +static int +is_infinite_or_zerol (long double x) +{ + return isnanl (x) || x + x == x; +} + +#endif + +#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL + +/* Converting 'long double' to decimal without rare rounding bugs requires + real bignums. We use the naming conventions of GNU gmp, but vastly simpler + (and slower) algorithms. */ + +typedef unsigned int mp_limb_t; +# define GMP_LIMB_BITS 32 +verify (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS); + +typedef unsigned long long mp_twolimb_t; +# define GMP_TWOLIMB_BITS 64 +verify (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS); + +/* Representation of a bignum >= 0. */ +typedef struct +{ + size_t nlimbs; + mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc(). */ +} mpn_t; + +/* Compute the product of two bignums >= 0. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +multiply (mpn_t src1, mpn_t src2, mpn_t *dest) +{ + const mp_limb_t *p1; + const mp_limb_t *p2; + size_t len1; + size_t len2; + + if (src1.nlimbs <= src2.nlimbs) + { + len1 = src1.nlimbs; + p1 = src1.limbs; + len2 = src2.nlimbs; + p2 = src2.limbs; + } + else + { + len1 = src2.nlimbs; + p1 = src2.limbs; + len2 = src1.nlimbs; + p2 = src1.limbs; + } + /* Now 0 <= len1 <= len2. */ + if (len1 == 0) + { + /* src1 or src2 is zero. */ + dest->nlimbs = 0; + dest->limbs = (mp_limb_t *) malloc (1); + } + else + { + /* Here 1 <= len1 <= len2. */ + size_t dlen; + mp_limb_t *dp; + size_t k, i, j; + + dlen = len1 + len2; + dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t)); + if (dp == NULL) + return NULL; + for (k = len2; k > 0; ) + dp[--k] = 0; + for (i = 0; i < len1; i++) + { + mp_limb_t digit1 = p1[i]; + mp_twolimb_t carry = 0; + for (j = 0; j < len2; j++) + { + mp_limb_t digit2 = p2[j]; + carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; + carry += dp[i + j]; + dp[i + j] = (mp_limb_t) carry; + carry = carry >> GMP_LIMB_BITS; + } + dp[i + len2] = (mp_limb_t) carry; + } + /* Normalise. */ + while (dlen > 0 && dp[dlen - 1] == 0) + dlen--; + dest->nlimbs = dlen; + dest->limbs = dp; + } + return dest->limbs; +} + +/* Compute the quotient of a bignum a >= 0 and a bignum b > 0. + a is written as a = q * b + r with 0 <= r < b. q is the quotient, r + the remainder. + Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd, + q is incremented. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +divide (mpn_t a, mpn_t b, mpn_t *q) +{ + /* Algorithm: + First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]] + with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS). + If m<n, then q:=0 and r:=a. + If m>=n=1, perform a single-precision division: + r:=0, j:=m, + while j>0 do + {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j = + = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r<b[0]<beta} + j:=j-1, r:=r*beta+a[j], q[j]:=floor(r/b[0]), r:=r-b[0]*q[j]. + Normalise [q[m-1],...,q[0]], yields q. + If m>=n>1, perform a multiple-precision division: + We have a/b < beta^(m-n+1). + s:=intDsize-1-(highest bit in b[n-1]), 0<=s<intDsize. + Shift a and b left by s bits, copying them. r:=a. + r=[r[m],...,r[0]], b=[b[n-1],...,b[0]] with b[n-1]>=beta/2. + For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).} + Compute q* : + q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]). + In case of overflow (q* >= beta) set q* := beta-1. + Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2] + and c3 := b[n-2] * q*. + {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow + occurred. Furthermore 0 <= c3 < beta^2. + If there was overflow and + r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2, + the next test can be skipped.} + While c3 > c2, {Here 0 <= c2 < c3 < beta^2} + Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2]. + If q* > 0: + Put r := r - b * q* * beta^j. In detail: + [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]]. + hence: u:=0, for i:=0 to n-1 do + u := u + q* * b[i], + r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry), + u:=u div beta (+ 1, if carry in subtraction) + r[n+j]:=r[n+j]-u. + {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1 + < q* + 1 <= beta, + the carry u does not overflow.} + If a negative carry occurs, put q* := q* - 1 + and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]]. + Set q[j] := q*. + Normalise [q[m-n],..,q[0]]; this yields the quotient q. + Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the + rest r. + The room for q[j] can be allocated at the memory location of r[n+j]. + Finally, round-to-even: + Shift r left by 1 bit. + If r > b or if r = b and q[0] is odd, q := q+1. + */ + const mp_limb_t *a_ptr = a.limbs; + size_t a_len = a.nlimbs; + const mp_limb_t *b_ptr = b.limbs; + size_t b_len = b.nlimbs; + mp_limb_t *roomptr; + mp_limb_t *tmp_roomptr = NULL; + mp_limb_t *q_ptr; + size_t q_len; + mp_limb_t *r_ptr; + size_t r_len; + + /* Allocate room for a_len+2 digits. + (Need a_len+1 digits for the real division and 1 more digit for the + final rounding of q.) */ + roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t)); + if (roomptr == NULL) + return NULL; + + /* Normalise a. */ + while (a_len > 0 && a_ptr[a_len - 1] == 0) + a_len--; + + /* Normalise b. */ + for (;;) + { + if (b_len == 0) + /* Division by zero. */ + abort (); + if (b_ptr[b_len - 1] == 0) + b_len--; + else + break; + } + + /* Here m = a_len >= 0 and n = b_len > 0. */ + + if (a_len < b_len) + { + /* m<n: trivial case. q=0, r := copy of a. */ + r_ptr = roomptr; + r_len = a_len; + memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); + q_ptr = roomptr + a_len; + q_len = 0; + } + else if (b_len == 1) + { + /* n=1: single precision division. + beta^(m-1) <= a < beta^m ==> beta^(m-2) <= a/b < beta^m */ + r_ptr = roomptr; + q_ptr = roomptr + 1; + { + mp_limb_t den = b_ptr[0]; + mp_limb_t remainder = 0; + const mp_limb_t *sourceptr = a_ptr + a_len; + mp_limb_t *destptr = q_ptr + a_len; + size_t count; + for (count = a_len; count > 0; count--) + { + mp_twolimb_t num = + ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr; + *--destptr = num / den; + remainder = num % den; + } + /* Normalise and store r. */ + if (remainder > 0) + { + r_ptr[0] = remainder; + r_len = 1; + } + else + r_len = 0; + /* Normalise q. */ + q_len = a_len; + if (q_ptr[q_len - 1] == 0) + q_len--; + } + } + else + { + /* n>1: multiple precision division. + beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n ==> + beta^(m-n-1) <= a/b < beta^(m-n+1). */ + /* Determine s. */ + size_t s; + { + mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */ + /* Determine s = GMP_LIMB_BITS - integer_length (msd). + Code copied from gnulib's integer_length.c. */ +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + s = __builtin_clz (msd); +# else +# if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT + if (GMP_LIMB_BITS <= DBL_MANT_BIT) + { + /* Use 'double' operations. + Assumes an IEEE 754 'double' implementation. */ +# define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) +# define DBL_EXP_BIAS (DBL_EXP_MASK / 2 - 1) +# define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + union { double value; unsigned int word[NWORDS]; } m; + + /* Use a single integer to floating-point conversion. */ + m.value = msd; + + s = GMP_LIMB_BITS + - (((m.word[DBL_EXPBIT0_WORD] >> DBL_EXPBIT0_BIT) & DBL_EXP_MASK) + - DBL_EXP_BIAS); + } + else +# undef NWORDS +# endif + { + s = 31; + if (msd >= 0x10000) + { + msd = msd >> 16; + s -= 16; + } + if (msd >= 0x100) + { + msd = msd >> 8; + s -= 8; + } + if (msd >= 0x10) + { + msd = msd >> 4; + s -= 4; + } + if (msd >= 0x4) + { + msd = msd >> 2; + s -= 2; + } + if (msd >= 0x2) + { + msd = msd >> 1; + s -= 1; + } + } +# endif + } + /* 0 <= s < GMP_LIMB_BITS. + Copy b, shifting it left by s bits. */ + if (s > 0) + { + tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t)); + if (tmp_roomptr == NULL) + { + free (roomptr); + return NULL; + } + { + const mp_limb_t *sourceptr = b_ptr; + mp_limb_t *destptr = tmp_roomptr; + mp_twolimb_t accu = 0; + size_t count; + for (count = b_len; count > 0; count--) + { + accu += (mp_twolimb_t) *sourceptr++ << s; + *destptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + /* accu must be zero, since that was how s was determined. */ + if (accu != 0) + abort (); + } + b_ptr = tmp_roomptr; + } + /* Copy a, shifting it left by s bits, yields r. + Memory layout: + At the beginning: r = roomptr[0..a_len], + at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len] */ + r_ptr = roomptr; + if (s == 0) + { + memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); + r_ptr[a_len] = 0; + } + else + { + const mp_limb_t *sourceptr = a_ptr; + mp_limb_t *destptr = r_ptr; + mp_twolimb_t accu = 0; + size_t count; + for (count = a_len; count > 0; count--) + { + accu += (mp_twolimb_t) *sourceptr++ << s; + *destptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + *destptr++ = (mp_limb_t) accu; + } + q_ptr = roomptr + b_len; + q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */ + { + size_t j = a_len - b_len; /* m-n */ + mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */ + mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */ + mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */ + ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd; + /* Division loop, traversed m-n+1 times. + j counts down, b is unchanged, beta/2 <= b[n-1] < beta. */ + for (;;) + { + mp_limb_t q_star; + mp_limb_t c1; + if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */ + { + /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow. */ + mp_twolimb_t num = + ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS) + | r_ptr[j + b_len - 1]; + q_star = num / b_msd; + c1 = num % b_msd; + } + else + { + /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1]. */ + q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */ + /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta + <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta + <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) + {<= beta !}. + If yes, jump directly to the subtraction loop. + (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta + <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */ + if (r_ptr[j + b_len] > b_msd + || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd) + /* r[j+n] >= b[n-1]+1 or + r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a + carry. */ + goto subtract; + } + /* q_star = q*, + c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, <beta). */ + { + mp_twolimb_t c2 = /* c1*beta+r[j+n-2] */ + ((mp_twolimb_t) c1 << GMP_LIMB_BITS) | r_ptr[j + b_len - 2]; + mp_twolimb_t c3 = /* b[n-2] * q* */ + (mp_twolimb_t) b_2msd * (mp_twolimb_t) q_star; + /* While c2 < c3, increase c2 and decrease c3. + Consider c3-c2. While it is > 0, decrease it by + b[n-1]*beta+b[n-2]. Because of b[n-1]*beta+b[n-2] >= beta^2/2 + this can happen only twice. */ + if (c3 > c2) + { + q_star = q_star - 1; /* q* := q* - 1 */ + if (c3 - c2 > b_msdd) + q_star = q_star - 1; /* q* := q* - 1 */ + } + } + if (q_star > 0) + subtract: + { + /* Subtract r := r - b * q* * beta^j. */ + mp_limb_t cr; + { + const mp_limb_t *sourceptr = b_ptr; + mp_limb_t *destptr = r_ptr + j; + mp_twolimb_t carry = 0; + size_t count; + for (count = b_len; count > 0; count--) + { + /* Here 0 <= carry <= q*. */ + carry = + carry + + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++ + + (mp_limb_t) ~(*destptr); + /* Here 0 <= carry <= beta*q* + beta-1. */ + *destptr++ = ~(mp_limb_t) carry; + carry = carry >> GMP_LIMB_BITS; /* <= q* */ + } + cr = (mp_limb_t) carry; + } + /* Subtract cr from r_ptr[j + b_len], then forget about + r_ptr[j + b_len]. */ + if (cr > r_ptr[j + b_len]) + { + /* Subtraction gave a carry. */ + q_star = q_star - 1; /* q* := q* - 1 */ + /* Add b back. */ + { + const mp_limb_t *sourceptr = b_ptr; + mp_limb_t *destptr = r_ptr + j; + mp_limb_t carry = 0; + size_t count; + for (count = b_len; count > 0; count--) + { + mp_limb_t source1 = *sourceptr++; + mp_limb_t source2 = *destptr; + *destptr++ = source1 + source2 + carry; + carry = + (carry + ? source1 >= (mp_limb_t) ~source2 + : source1 > (mp_limb_t) ~source2); + } + } + /* Forget about the carry and about r[j+n]. */ + } + } + /* q* is determined. Store it as q[j]. */ + q_ptr[j] = q_star; + if (j == 0) + break; + j--; + } + } + r_len = b_len; + /* Normalise q. */ + if (q_ptr[q_len - 1] == 0) + q_len--; +# if 0 /* Not needed here, since we need r only to compare it with b/2, and + b is shifted left by s bits. */ + /* Shift r right by s bits. */ + if (s > 0) + { + mp_limb_t ptr = r_ptr + r_len; + mp_twolimb_t accu = 0; + size_t count; + for (count = r_len; count > 0; count--) + { + accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS; + accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s); + *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS); + } + } +# endif + /* Normalise r. */ + while (r_len > 0 && r_ptr[r_len - 1] == 0) + r_len--; + } + /* Compare r << 1 with b. */ + if (r_len > b_len) + goto increment_q; + { + size_t i; + for (i = b_len;;) + { + mp_limb_t r_i = + (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0) + | (i < r_len ? r_ptr[i] << 1 : 0); + mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0); + if (r_i > b_i) + goto increment_q; + if (r_i < b_i) + goto keep_q; + if (i == 0) + break; + i--; + } + } + if (q_len > 0 && ((q_ptr[0] & 1) != 0)) + /* q is odd. */ + increment_q: + { + size_t i; + for (i = 0; i < q_len; i++) + if (++(q_ptr[i]) != 0) + goto keep_q; + q_ptr[q_len++] = 1; + } + keep_q: + if (tmp_roomptr != NULL) + free (tmp_roomptr); + q->limbs = q_ptr; + q->nlimbs = q_len; + return roomptr; +} + +/* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal + representation. + Destroys the contents of a. + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +convert_to_decimal (mpn_t a, size_t extra_zeroes) +{ + mp_limb_t *a_ptr = a.limbs; + size_t a_len = a.nlimbs; + /* 0.03345 is slightly larger than log(2)/(9*log(10)). */ + size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1); + /* We need extra_zeroes bytes for zeroes, followed by c_len bytes for the + digits of a, followed by 1 byte for the terminating NUL. */ + char *c_ptr = (char *) malloc (xsum (xsum (extra_zeroes, c_len), 1)); + if (c_ptr != NULL) + { + char *d_ptr = c_ptr; + for (; extra_zeroes > 0; extra_zeroes--) + *d_ptr++ = '0'; + while (a_len > 0) + { + /* Divide a by 10^9, in-place. */ + mp_limb_t remainder = 0; + mp_limb_t *ptr = a_ptr + a_len; + size_t count; + for (count = a_len; count > 0; count--) + { + mp_twolimb_t num = + ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr; + *ptr = num / 1000000000; + remainder = num % 1000000000; + } + /* Store the remainder as 9 decimal digits. */ + for (count = 9; count > 0; count--) + { + *d_ptr++ = '0' + (remainder % 10); + remainder = remainder / 10; + } + /* Normalize a. */ + if (a_ptr[a_len - 1] == 0) + a_len--; + } + /* Remove leading zeroes. */ + while (d_ptr > c_ptr && d_ptr[-1] == '0') + d_ptr--; + /* But keep at least one zero. */ + if (d_ptr == c_ptr) + *d_ptr++ = '0'; + /* Terminate the string. */ + *d_ptr = '\0'; + } + return c_ptr; +} + +# if NEED_PRINTF_LONG_DOUBLE + +/* Assuming x is finite and >= 0: + write x as x = 2^e * m, where m is a bignum. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +decode_long_double (long double x, int *ep, mpn_t *mp) +{ + mpn_t m; + int exp; + long double y; + size_t i; + + /* Allocate memory for result. */ + m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; + m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); + if (m.limbs == NULL) + return NULL; + /* Split into exponential part and mantissa. */ + y = frexpl (x, &exp); + if (!(y >= 0.0L && y < 1.0L)) + abort (); + /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * 2^LDBL_MANT_BIT), and the + latter is an integer. */ + /* Convert the mantissa (y * 2^LDBL_MANT_BIT) to a sequence of limbs. + I'm not sure whether it's safe to cast a 'long double' value between + 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only + 'long double' values between 0 and 2^16 (to 'unsigned int' or 'int', + doesn't matter). */ +# if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0 +# if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2)); + hi = (int) y; + y -= hi; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } +# else + { + mp_limb_t d; + y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS); + d = (int) y; + y -= d; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d; + } +# endif +# endif + for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + hi = (int) y; + y -= hi; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } +# if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess + precision. */ + if (!(y == 0.0L)) + abort (); +# endif + /* Normalise. */ + while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) + m.nlimbs--; + *mp = m; + *ep = exp - LDBL_MANT_BIT; + return m.limbs; +} + +# endif + +# if NEED_PRINTF_DOUBLE + +/* Assuming x is finite and >= 0: + write x as x = 2^e * m, where m is a bignum. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +decode_double (double x, int *ep, mpn_t *mp) +{ + mpn_t m; + int exp; + double y; + size_t i; + + /* Allocate memory for result. */ + m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; + m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); + if (m.limbs == NULL) + return NULL; + /* Split into exponential part and mantissa. */ + y = frexp (x, &exp); + if (!(y >= 0.0 && y < 1.0)) + abort (); + /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * 2^DBL_MANT_BIT), and the + latter is an integer. */ + /* Convert the mantissa (y * 2^DBL_MANT_BIT) to a sequence of limbs. + I'm not sure whether it's safe to cast a 'double' value between + 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only + 'double' values between 0 and 2^16 (to 'unsigned int' or 'int', + doesn't matter). */ +# if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0 +# if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2)); + hi = (int) y; + y -= hi; + if (!(y >= 0.0 && y < 1.0)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0 && y < 1.0)) + abort (); + m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } +# else + { + mp_limb_t d; + y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS); + d = (int) y; + y -= d; + if (!(y >= 0.0 && y < 1.0)) + abort (); + m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d; + } +# endif +# endif + for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + hi = (int) y; + y -= hi; + if (!(y >= 0.0 && y < 1.0)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0 && y < 1.0)) + abort (); + m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } + if (!(y == 0.0)) + abort (); + /* Normalise. */ + while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) + m.nlimbs--; + *mp = m; + *ep = exp - DBL_MANT_BIT; + return m.limbs; +} + +# endif + +/* Assuming x = 2^e * m is finite and >= 0, and n is an integer: + Returns the decimal representation of round (x * 10^n). + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n) +{ + int s; + size_t extra_zeroes; + unsigned int abs_n; + unsigned int abs_s; + mp_limb_t *pow5_ptr; + size_t pow5_len; + unsigned int s_limbs; + unsigned int s_bits; + mpn_t pow5; + mpn_t z; + void *z_memory; + char *digits; + + if (memory == NULL) + return NULL; + /* x = 2^e * m, hence + y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m) + = round (2^s * 5^n * m). */ + s = e + n; + extra_zeroes = 0; + /* Factor out a common power of 10 if possible. */ + if (s > 0 && n > 0) + { + extra_zeroes = (s < n ? s : n); + s -= extra_zeroes; + n -= extra_zeroes; + } + /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes. + Before converting to decimal, we need to compute + z = round (2^s * 5^n * m). */ + /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same + sign. 2.322 is slightly larger than log(5)/log(2). */ + abs_n = (n >= 0 ? n : -n); + abs_s = (s >= 0 ? s : -s); + pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1 + + abs_s / GMP_LIMB_BITS + 1) + * sizeof (mp_limb_t)); + if (pow5_ptr == NULL) + { + free (memory); + return NULL; + } + /* Initialize with 1. */ + pow5_ptr[0] = 1; + pow5_len = 1; + /* Multiply with 5^|n|. */ + if (abs_n > 0) + { + static mp_limb_t const small_pow5[13 + 1] = + { + 1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, + 48828125, 244140625, 1220703125 + }; + unsigned int n13; + for (n13 = 0; n13 <= abs_n; n13 += 13) + { + mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13]; + size_t j; + mp_twolimb_t carry = 0; + for (j = 0; j < pow5_len; j++) + { + mp_limb_t digit2 = pow5_ptr[j]; + carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; + pow5_ptr[j] = (mp_limb_t) carry; + carry = carry >> GMP_LIMB_BITS; + } + if (carry > 0) + pow5_ptr[pow5_len++] = (mp_limb_t) carry; + } + } + s_limbs = abs_s / GMP_LIMB_BITS; + s_bits = abs_s % GMP_LIMB_BITS; + if (n >= 0 ? s >= 0 : s <= 0) + { + /* Multiply with 2^|s|. */ + if (s_bits > 0) + { + mp_limb_t *ptr = pow5_ptr; + mp_twolimb_t accu = 0; + size_t count; + for (count = pow5_len; count > 0; count--) + { + accu += (mp_twolimb_t) *ptr << s_bits; + *ptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + if (accu > 0) + { + *ptr = (mp_limb_t) accu; + pow5_len++; + } + } + if (s_limbs > 0) + { + size_t count; + for (count = pow5_len; count > 0;) + { + count--; + pow5_ptr[s_limbs + count] = pow5_ptr[count]; + } + for (count = s_limbs; count > 0;) + { + count--; + pow5_ptr[count] = 0; + } + pow5_len += s_limbs; + } + pow5.limbs = pow5_ptr; + pow5.nlimbs = pow5_len; + if (n >= 0) + { + /* Multiply m with pow5. No division needed. */ + z_memory = multiply (m, pow5, &z); + } + else + { + /* Divide m by pow5 and round. */ + z_memory = divide (m, pow5, &z); + } + } + else + { + pow5.limbs = pow5_ptr; + pow5.nlimbs = pow5_len; + if (n >= 0) + { + /* n >= 0, s < 0. + Multiply m with pow5, then divide by 2^|s|. */ + mpn_t numerator; + mpn_t denominator; + void *tmp_memory; + tmp_memory = multiply (m, pow5, &numerator); + if (tmp_memory == NULL) + { + free (pow5_ptr); + free (memory); + return NULL; + } + /* Construct 2^|s|. */ + { + mp_limb_t *ptr = pow5_ptr + pow5_len; + size_t i; + for (i = 0; i < s_limbs; i++) + ptr[i] = 0; + ptr[s_limbs] = (mp_limb_t) 1 << s_bits; + denominator.limbs = ptr; + denominator.nlimbs = s_limbs + 1; + } + z_memory = divide (numerator, denominator, &z); + free (tmp_memory); + } + else + { + /* n < 0, s > 0. + Multiply m with 2^s, then divide by pow5. */ + mpn_t numerator; + mp_limb_t *num_ptr; + num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1) + * sizeof (mp_limb_t)); + if (num_ptr == NULL) + { + free (pow5_ptr); + free (memory); + return NULL; + } + { + mp_limb_t *destptr = num_ptr; + { + size_t i; + for (i = 0; i < s_limbs; i++) + *destptr++ = 0; + } + if (s_bits > 0) + { + const mp_limb_t *sourceptr = m.limbs; + mp_twolimb_t accu = 0; + size_t count; + for (count = m.nlimbs; count > 0; count--) + { + accu += (mp_twolimb_t) *sourceptr++ << s_bits; + *destptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + if (accu > 0) + *destptr++ = (mp_limb_t) accu; + } + else + { + const mp_limb_t *sourceptr = m.limbs; + size_t count; + for (count = m.nlimbs; count > 0; count--) + *destptr++ = *sourceptr++; + } + numerator.limbs = num_ptr; + numerator.nlimbs = destptr - num_ptr; + } + z_memory = divide (numerator, pow5, &z); + free (num_ptr); + } + } + free (pow5_ptr); + free (memory); + + /* Here y = round (x * 10^n) = z * 10^extra_zeroes. */ + + if (z_memory == NULL) + return NULL; + digits = convert_to_decimal (z, extra_zeroes); + free (z_memory); + return digits; +} + +# if NEED_PRINTF_LONG_DOUBLE + +/* Assuming x is finite and >= 0, and n is an integer: + Returns the decimal representation of round (x * 10^n). + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +scale10_round_decimal_long_double (long double x, int n) +{ + int e IF_LINT(= 0); + mpn_t m; + void *memory = decode_long_double (x, &e, &m); + return scale10_round_decimal_decoded (e, m, memory, n); +} + +# endif + +# if NEED_PRINTF_DOUBLE + +/* Assuming x is finite and >= 0, and n is an integer: + Returns the decimal representation of round (x * 10^n). + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +scale10_round_decimal_double (double x, int n) +{ + int e IF_LINT(= 0); + mpn_t m; + void *memory = decode_double (x, &e, &m); + return scale10_round_decimal_decoded (e, m, memory, n); +} + +# endif + +# if NEED_PRINTF_LONG_DOUBLE + +/* Assuming x is finite and > 0: + Return an approximation for n with 10^n <= x < 10^(n+1). + The approximation is usually the right n, but may be off by 1 sometimes. */ +static int +floorlog10l (long double x) +{ + int exp; + long double y; + double z; + double l; + + /* Split into exponential part and mantissa. */ + y = frexpl (x, &exp); + if (!(y >= 0.0L && y < 1.0L)) + abort (); + if (y == 0.0L) + return INT_MIN; + if (y < 0.5L) + { + while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) + { + y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); + exp -= GMP_LIMB_BITS; + } + if (y < (1.0L / (1 << 16))) + { + y *= 1.0L * (1 << 16); + exp -= 16; + } + if (y < (1.0L / (1 << 8))) + { + y *= 1.0L * (1 << 8); + exp -= 8; + } + if (y < (1.0L / (1 << 4))) + { + y *= 1.0L * (1 << 4); + exp -= 4; + } + if (y < (1.0L / (1 << 2))) + { + y *= 1.0L * (1 << 2); + exp -= 2; + } + if (y < (1.0L / (1 << 1))) + { + y *= 1.0L * (1 << 1); + exp -= 1; + } + } + if (!(y >= 0.5L && y < 1.0L)) + abort (); + /* Compute an approximation for l = log2(x) = exp + log2(y). */ + l = exp; + z = y; + if (z < 0.70710678118654752444) + { + z *= 1.4142135623730950488; + l -= 0.5; + } + if (z < 0.8408964152537145431) + { + z *= 1.1892071150027210667; + l -= 0.25; + } + if (z < 0.91700404320467123175) + { + z *= 1.0905077326652576592; + l -= 0.125; + } + if (z < 0.9576032806985736469) + { + z *= 1.0442737824274138403; + l -= 0.0625; + } + /* Now 0.95 <= z <= 1.01. */ + z = 1 - z; + /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) + Four terms are enough to get an approximation with error < 10^-7. */ + l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); + /* Finally multiply with log(2)/log(10), yields an approximation for + log10(x). */ + l *= 0.30102999566398119523; + /* Round down to the next integer. */ + return (int) l + (l < 0 ? -1 : 0); +} + +# endif + +# if NEED_PRINTF_DOUBLE + +/* Assuming x is finite and > 0: + Return an approximation for n with 10^n <= x < 10^(n+1). + The approximation is usually the right n, but may be off by 1 sometimes. */ +static int +floorlog10 (double x) +{ + int exp; + double y; + double z; + double l; + + /* Split into exponential part and mantissa. */ + y = frexp (x, &exp); + if (!(y >= 0.0 && y < 1.0)) + abort (); + if (y == 0.0) + return INT_MIN; + if (y < 0.5) + { + while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) + { + y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); + exp -= GMP_LIMB_BITS; + } + if (y < (1.0 / (1 << 16))) + { + y *= 1.0 * (1 << 16); + exp -= 16; + } + if (y < (1.0 / (1 << 8))) + { + y *= 1.0 * (1 << 8); + exp -= 8; + } + if (y < (1.0 / (1 << 4))) + { + y *= 1.0 * (1 << 4); + exp -= 4; + } + if (y < (1.0 / (1 << 2))) + { + y *= 1.0 * (1 << 2); + exp -= 2; + } + if (y < (1.0 / (1 << 1))) + { + y *= 1.0 * (1 << 1); + exp -= 1; + } + } + if (!(y >= 0.5 && y < 1.0)) + abort (); + /* Compute an approximation for l = log2(x) = exp + log2(y). */ + l = exp; + z = y; + if (z < 0.70710678118654752444) + { + z *= 1.4142135623730950488; + l -= 0.5; + } + if (z < 0.8408964152537145431) + { + z *= 1.1892071150027210667; + l -= 0.25; + } + if (z < 0.91700404320467123175) + { + z *= 1.0905077326652576592; + l -= 0.125; + } + if (z < 0.9576032806985736469) + { + z *= 1.0442737824274138403; + l -= 0.0625; + } + /* Now 0.95 <= z <= 1.01. */ + z = 1 - z; + /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) + Four terms are enough to get an approximation with error < 10^-7. */ + l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); + /* Finally multiply with log(2)/log(10), yields an approximation for + log10(x). */ + l *= 0.30102999566398119523; + /* Round down to the next integer. */ + return (int) l + (l < 0 ? -1 : 0); +} + +# endif + +/* Tests whether a string of digits consists of exactly PRECISION zeroes and + a single '1' digit. */ +static int +is_borderline (const char *digits, size_t precision) +{ + for (; precision > 0; precision--, digits++) + if (*digits != '0') + return 0; + if (*digits != '1') + return 0; + digits++; + return *digits == '\0'; +} + +#endif + +#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF + +/* Use a different function name, to make it possible that the 'wchar_t' + parametrization and the 'char' parametrization get compiled in the same + translation unit. */ +# if WIDE_CHAR_VERSION +# define MAX_ROOM_NEEDED wmax_room_needed +# else +# define MAX_ROOM_NEEDED max_room_needed +# endif + +/* Returns the number of TCHAR_T units needed as temporary space for the result + of sprintf or SNPRINTF of a single conversion directive. */ +static size_t +MAX_ROOM_NEEDED (const arguments *ap, size_t arg_index, FCHAR_T conversion, + arg_type type, int flags, size_t width, int has_precision, + size_t precision, int pad_ourselves) +{ + size_t tmp_length; + + switch (conversion) + { + case 'd': case 'i': case 'u': +# if HAVE_LONG_LONG_INT + if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long long) * CHAR_BIT + * 0.30103 /* binary -> decimal */ + ) + + 1; /* turn floor into ceil */ + else +# endif + if (type == TYPE_LONGINT || type == TYPE_ULONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long) * CHAR_BIT + * 0.30103 /* binary -> decimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (sizeof (unsigned int) * CHAR_BIT + * 0.30103 /* binary -> decimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Multiply by 2, as an estimate for FLAG_GROUP. */ + tmp_length = xsum (tmp_length, tmp_length); + /* Add 1, to account for a leading sign. */ + tmp_length = xsum (tmp_length, 1); + break; + + case 'o': +# if HAVE_LONG_LONG_INT + if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long long) * CHAR_BIT + * 0.333334 /* binary -> octal */ + ) + + 1; /* turn floor into ceil */ + else +# endif + if (type == TYPE_LONGINT || type == TYPE_ULONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long) * CHAR_BIT + * 0.333334 /* binary -> octal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (sizeof (unsigned int) * CHAR_BIT + * 0.333334 /* binary -> octal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Add 1, to account for a leading sign. */ + tmp_length = xsum (tmp_length, 1); + break; + + case 'x': case 'X': +# if HAVE_LONG_LONG_INT + if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long long) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else +# endif + if (type == TYPE_LONGINT || type == TYPE_ULONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (sizeof (unsigned int) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Add 2, to account for a leading sign or alternate form. */ + tmp_length = xsum (tmp_length, 2); + break; + + case 'f': case 'F': + if (type == TYPE_LONGDOUBLE) + tmp_length = + (unsigned int) (LDBL_MAX_EXP + * 0.30103 /* binary -> decimal */ + * 2 /* estimate for FLAG_GROUP */ + ) + + 1 /* turn floor into ceil */ + + 10; /* sign, decimal point etc. */ + else + tmp_length = + (unsigned int) (DBL_MAX_EXP + * 0.30103 /* binary -> decimal */ + * 2 /* estimate for FLAG_GROUP */ + ) + + 1 /* turn floor into ceil */ + + 10; /* sign, decimal point etc. */ + tmp_length = xsum (tmp_length, precision); + break; + + case 'e': case 'E': case 'g': case 'G': + tmp_length = + 12; /* sign, decimal point, exponent etc. */ + tmp_length = xsum (tmp_length, precision); + break; + + case 'a': case 'A': + if (type == TYPE_LONGDOUBLE) + tmp_length = + (unsigned int) (LDBL_DIG + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (DBL_DIG + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Account for sign, decimal point etc. */ + tmp_length = xsum (tmp_length, 12); + break; + + case 'c': +# if HAVE_WINT_T && !WIDE_CHAR_VERSION + if (type == TYPE_WIDE_CHAR) + tmp_length = MB_CUR_MAX; + else +# endif + tmp_length = 1; + break; + + case 's': +# if HAVE_WCHAR_T + if (type == TYPE_WIDE_STRING) + { +# if WIDE_CHAR_VERSION + /* ISO C says about %ls in fwprintf: + "If the precision is not specified or is greater than the size + of the array, the array shall contain a null wide character." + So if there is a precision, we must not use wcslen. */ + const wchar_t *arg = ap->arg[arg_index].a.a_wide_string; + + if (has_precision) + tmp_length = local_wcsnlen (arg, precision); + else + tmp_length = local_wcslen (arg); +# else + /* ISO C says about %ls in fprintf: + "If a precision is specified, no more than that many bytes are + written (including shift sequences, if any), and the array + shall contain a null wide character if, to equal the multibyte + character sequence length given by the precision, the function + would need to access a wide character one past the end of the + array." + So if there is a precision, we must not use wcslen. */ + /* This case has already been handled separately in VASNPRINTF. */ + abort (); +# endif + } + else +# endif + { +# if WIDE_CHAR_VERSION + /* ISO C says about %s in fwprintf: + "If the precision is not specified or is greater than the size + of the converted array, the converted array shall contain a + null wide character." + So if there is a precision, we must not use strlen. */ + /* This case has already been handled separately in VASNPRINTF. */ + abort (); +# else + /* ISO C says about %s in fprintf: + "If the precision is not specified or greater than the size of + the array, the array shall contain a null character." + So if there is a precision, we must not use strlen. */ + const char *arg = ap->arg[arg_index].a.a_string; + + if (has_precision) + tmp_length = local_strnlen (arg, precision); + else + tmp_length = strlen (arg); +# endif + } + break; + + case 'p': + tmp_length = + (unsigned int) (sizeof (void *) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1 /* turn floor into ceil */ + + 2; /* account for leading 0x */ + break; + + default: + abort (); + } + + if (!pad_ourselves) + { +# if ENABLE_UNISTDIO + /* Padding considers the number of characters, therefore the number of + elements after padding may be + > max (tmp_length, width) + but is certainly + <= tmp_length + width. */ + tmp_length = xsum (tmp_length, width); +# else + /* Padding considers the number of elements, says POSIX. */ + if (tmp_length < width) + tmp_length = width; +# endif + } + + tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ + + return tmp_length; +} + +#endif + +DCHAR_T * +VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, + const FCHAR_T *format, va_list args) +{ + DIRECTIVES d; + arguments a; + + if (PRINTF_PARSE (format, &d, &a) < 0) + /* errno is already set. */ + return NULL; + +#define CLEANUP() \ + if (d.dir != d.direct_alloc_dir) \ + free (d.dir); \ + if (a.arg != a.direct_alloc_arg) \ + free (a.arg); + + if (PRINTF_FETCHARGS (args, &a) < 0) + { + CLEANUP (); + errno = EINVAL; + return NULL; + } + + { + size_t buf_neededlength; + TCHAR_T *buf; + TCHAR_T *buf_malloced; + const FCHAR_T *cp; + size_t i; + DIRECTIVE *dp; + /* Output string accumulator. */ + DCHAR_T *result; + size_t allocated; + size_t length; + + /* Allocate a small buffer that will hold a directive passed to + sprintf or snprintf. */ + buf_neededlength = + xsum4 (7, d.max_width_length, d.max_precision_length, 6); +#if HAVE_ALLOCA + if (buf_neededlength < 4000 / sizeof (TCHAR_T)) + { + buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T)); + buf_malloced = NULL; + } + else +#endif + { + size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T)); + if (size_overflow_p (buf_memsize)) + goto out_of_memory_1; + buf = (TCHAR_T *) malloc (buf_memsize); + if (buf == NULL) + goto out_of_memory_1; + buf_malloced = buf; + } + + if (resultbuf != NULL) + { + result = resultbuf; + allocated = *lengthp; + } + else + { + result = NULL; + allocated = 0; + } + length = 0; + /* Invariants: + result is either == resultbuf or == NULL or malloc-allocated. + If length > 0, then result != NULL. */ + + /* Ensures that allocated >= needed. Aborts through a jump to + out_of_memory if needed is SIZE_MAX or otherwise too big. */ +#define ENSURE_ALLOCATION(needed) \ + if ((needed) > allocated) \ + { \ + size_t memory_size; \ + DCHAR_T *memory; \ + \ + allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ + if ((needed) > allocated) \ + allocated = (needed); \ + memory_size = xtimes (allocated, sizeof (DCHAR_T)); \ + if (size_overflow_p (memory_size)) \ + goto out_of_memory; \ + if (result == resultbuf || result == NULL) \ + memory = (DCHAR_T *) malloc (memory_size); \ + else \ + memory = (DCHAR_T *) realloc (result, memory_size); \ + if (memory == NULL) \ + goto out_of_memory; \ + if (result == resultbuf && length > 0) \ + DCHAR_CPY (memory, result, length); \ + result = memory; \ + } + + for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++) + { + if (cp != dp->dir_start) + { + size_t n = dp->dir_start - cp; + size_t augmented_length = xsum (length, n); + + ENSURE_ALLOCATION (augmented_length); + /* This copies a piece of FCHAR_T[] into a DCHAR_T[]. Here we + need that the format string contains only ASCII characters + if FCHAR_T and DCHAR_T are not the same type. */ + if (sizeof (FCHAR_T) == sizeof (DCHAR_T)) + { + DCHAR_CPY (result + length, (const DCHAR_T *) cp, n); + length = augmented_length; + } + else + { + do + result[length++] = *cp++; + while (--n > 0); + } + } + if (i == d.count) + break; + + /* Execute a single directive. */ + if (dp->conversion == '%') + { + size_t augmented_length; + + if (!(dp->arg_index == ARG_NONE)) + abort (); + augmented_length = xsum (length, 1); + ENSURE_ALLOCATION (augmented_length); + result[length] = '%'; + length = augmented_length; + } + else + { + if (!(dp->arg_index != ARG_NONE)) + abort (); + + if (dp->conversion == 'n') + { + switch (a.arg[dp->arg_index].type) + { + case TYPE_COUNT_SCHAR_POINTER: + *a.arg[dp->arg_index].a.a_count_schar_pointer = length; + break; + case TYPE_COUNT_SHORT_POINTER: + *a.arg[dp->arg_index].a.a_count_short_pointer = length; + break; + case TYPE_COUNT_INT_POINTER: + *a.arg[dp->arg_index].a.a_count_int_pointer = length; + break; + case TYPE_COUNT_LONGINT_POINTER: + *a.arg[dp->arg_index].a.a_count_longint_pointer = length; + break; +#if HAVE_LONG_LONG_INT + case TYPE_COUNT_LONGLONGINT_POINTER: + *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; + break; +#endif + default: + abort (); + } + } +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + else if (dp->conversion == 'U') + { + arg_type type = a.arg[dp->arg_index].type; + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + width = arg; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = -width; + } + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 0; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + + switch (type) + { + case TYPE_U8_STRING: + { + const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string; + const uint8_t *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only PRECISION characters, from the left. */ + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count = u8_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of + characters. */ + arg_end = arg; + characters = 0; + for (;;) + { + int count = u8_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + u8_strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (characters < width && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_UINT8_T + { + size_t n = arg_end - arg; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_CPY (result + length, arg, n); + length += n; + } +# else + { /* Convert. */ + DCHAR_T *converted = result + length; + size_t converted_len = allocated - length; +# if DCHAR_IS_TCHAR + /* Convert from UTF-8 to locale encoding. */ + converted = + u8_conv_to_encoding (locale_charset (), + iconveh_question_mark, + arg, arg_end - arg, NULL, + converted, &converted_len); +# else + /* Convert from UTF-8 to UTF-16/UTF-32. */ + converted = + U8_TO_DCHAR (arg, arg_end - arg, + converted, &converted_len); +# endif + if (converted == NULL) + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + if (converted != result + length) + { + ENSURE_ALLOCATION (xsum (length, converted_len)); + DCHAR_CPY (result + length, converted, converted_len); + free (converted); + } + length += converted_len; + } +# endif + + if (characters < width && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } + break; + + case TYPE_U16_STRING: + { + const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string; + const uint16_t *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only PRECISION characters, from the left. */ + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count = u16_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of + characters. */ + arg_end = arg; + characters = 0; + for (;;) + { + int count = u16_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + u16_strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (characters < width && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_UINT16_T + { + size_t n = arg_end - arg; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_CPY (result + length, arg, n); + length += n; + } +# else + { /* Convert. */ + DCHAR_T *converted = result + length; + size_t converted_len = allocated - length; +# if DCHAR_IS_TCHAR + /* Convert from UTF-16 to locale encoding. */ + converted = + u16_conv_to_encoding (locale_charset (), + iconveh_question_mark, + arg, arg_end - arg, NULL, + converted, &converted_len); +# else + /* Convert from UTF-16 to UTF-8/UTF-32. */ + converted = + U16_TO_DCHAR (arg, arg_end - arg, + converted, &converted_len); +# endif + if (converted == NULL) + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + if (converted != result + length) + { + ENSURE_ALLOCATION (xsum (length, converted_len)); + DCHAR_CPY (result + length, converted, converted_len); + free (converted); + } + length += converted_len; + } +# endif + + if (characters < width && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } + break; + + case TYPE_U32_STRING: + { + const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string; + const uint32_t *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only PRECISION characters, from the left. */ + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count = u32_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of + characters. */ + arg_end = arg; + characters = 0; + for (;;) + { + int count = u32_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + u32_strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (characters < width && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_UINT32_T + { + size_t n = arg_end - arg; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_CPY (result + length, arg, n); + length += n; + } +# else + { /* Convert. */ + DCHAR_T *converted = result + length; + size_t converted_len = allocated - length; +# if DCHAR_IS_TCHAR + /* Convert from UTF-32 to locale encoding. */ + converted = + u32_conv_to_encoding (locale_charset (), + iconveh_question_mark, + arg, arg_end - arg, NULL, + converted, &converted_len); +# else + /* Convert from UTF-32 to UTF-8/UTF-16. */ + converted = + U32_TO_DCHAR (arg, arg_end - arg, + converted, &converted_len); +# endif + if (converted == NULL) + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + if (converted != result + length) + { + ENSURE_ALLOCATION (xsum (length, converted_len)); + DCHAR_CPY (result + length, converted, converted_len); + free (converted); + } + length += converted_len; + } +# endif + + if (characters < width && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } + break; + + default: + abort (); + } + } +#endif +#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T + else if (dp->conversion == 's' +# if WIDE_CHAR_VERSION + && a.arg[dp->arg_index].type != TYPE_WIDE_STRING +# else + && a.arg[dp->arg_index].type == TYPE_WIDE_STRING +# endif + ) + { + /* The normal handling of the 's' directive below requires + allocating a temporary buffer. The determination of its + length (tmp_length), in the case when a precision is + specified, below requires a conversion between a char[] + string and a wchar_t[] wide string. It could be done, but + we have no guarantee that the implementation of sprintf will + use the exactly same algorithm. Without this guarantee, it + is possible to have buffer overrun bugs. In order to avoid + such bugs, we implement the entire processing of the 's' + directive ourselves. */ + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + width = arg; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = -width; + } + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 6; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + +# if WIDE_CHAR_VERSION + /* %s in vasnwprintf. See the specification of fwprintf. */ + { + const char *arg = a.arg[dp->arg_index].a.a_string; + const char *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only as many bytes as needed to produce PRECISION + wide characters, from the left. */ +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count; +# if HAVE_MBRTOWC + count = mbrlen (arg_end, MB_CUR_MAX, &state); +# else + count = mblen (arg_end, MB_CUR_MAX); +# endif + if (count == 0) + /* Found the terminating NUL. */ + break; + if (count < 0) + { + /* Invalid or incomplete multibyte character. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of wide + characters. */ +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + for (;;) + { + int count; +# if HAVE_MBRTOWC + count = mbrlen (arg_end, MB_CUR_MAX, &state); +# else + count = mblen (arg_end, MB_CUR_MAX); +# endif + if (count == 0) + /* Found the terminating NUL. */ + break; + if (count < 0) + { + /* Invalid or incomplete multibyte character. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (characters < width && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + + if (has_precision || has_width) + { + /* We know the number of wide characters in advance. */ + size_t remaining; +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + ENSURE_ALLOCATION (xsum (length, characters)); + for (remaining = characters; remaining > 0; remaining--) + { + wchar_t wc; + int count; +# if HAVE_MBRTOWC + count = mbrtowc (&wc, arg, arg_end - arg, &state); +# else + count = mbtowc (&wc, arg, arg_end - arg); +# endif + if (count <= 0) + /* mbrtowc not consistent with mbrlen, or mbtowc + not consistent with mblen. */ + abort (); + result[length++] = wc; + arg += count; + } + if (!(arg == arg_end)) + abort (); + } + else + { +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + while (arg < arg_end) + { + wchar_t wc; + int count; +# if HAVE_MBRTOWC + count = mbrtowc (&wc, arg, arg_end - arg, &state); +# else + count = mbtowc (&wc, arg, arg_end - arg); +# endif + if (count <= 0) + /* mbrtowc not consistent with mbrlen, or mbtowc + not consistent with mblen. */ + abort (); + ENSURE_ALLOCATION (xsum (length, 1)); + result[length++] = wc; + arg += count; + } + } + + if (characters < width && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } +# else + /* %ls in vasnprintf. See the specification of fprintf. */ + { + const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; + const wchar_t *arg_end; + size_t characters; +# if !DCHAR_IS_TCHAR + /* This code assumes that TCHAR_T is 'char'. */ + verify (sizeof (TCHAR_T) == 1); + TCHAR_T *tmpsrc; + DCHAR_T *tmpdst; + size_t tmpdst_len; +# endif + size_t w; + + if (has_precision) + { + /* Use only as many wide characters as needed to produce + at most PRECISION bytes, from the left. */ +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + while (precision > 0) + { + char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg_end == 0) + /* Found the terminating null wide character. */ + break; +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + count = wcrtomb (cbuf, *arg_end, &state); +# else + count = wctomb (cbuf, *arg_end); +# endif + if (count < 0) + { + /* Cannot convert. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + if (precision < (unsigned int) count) + break; + arg_end++; + characters += count; + precision -= count; + } + } +# if DCHAR_IS_TCHAR + else if (has_width) +# else + else +# endif + { + /* Use the entire string, and count the number of + bytes. */ +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + for (;;) + { + char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg_end == 0) + /* Found the terminating null wide character. */ + break; +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + count = wcrtomb (cbuf, *arg_end, &state); +# else + count = wctomb (cbuf, *arg_end); +# endif + if (count < 0) + { + /* Cannot convert. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end++; + characters += count; + } + } +# if DCHAR_IS_TCHAR + else + { + /* Use the entire string. */ + arg_end = arg + local_wcslen (arg); + /* The number of bytes doesn't matter. */ + characters = 0; + } +# endif + +# if !DCHAR_IS_TCHAR + /* Convert the string into a piece of temporary memory. */ + tmpsrc = (TCHAR_T *) malloc (characters * sizeof (TCHAR_T)); + if (tmpsrc == NULL) + goto out_of_memory; + { + TCHAR_T *tmpptr = tmpsrc; + size_t remaining; +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + for (remaining = characters; remaining > 0; ) + { + char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg == 0) + abort (); +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + count = wcrtomb (cbuf, *arg, &state); +# else + count = wctomb (cbuf, *arg); +# endif + if (count <= 0) + /* Inconsistency. */ + abort (); + memcpy (tmpptr, cbuf, count); + tmpptr += count; + arg++; + remaining -= count; + } + if (!(arg == arg_end)) + abort (); + } + + /* Convert from TCHAR_T[] to DCHAR_T[]. */ + tmpdst = + DCHAR_CONV_FROM_ENCODING (locale_charset (), + iconveh_question_mark, + tmpsrc, characters, + NULL, + NULL, &tmpdst_len); + if (tmpdst == NULL) + { + int saved_errno = errno; + free (tmpsrc); + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + free (tmpsrc); +# endif + + if (has_width) + { +# if ENABLE_UNISTDIO + /* Outside POSIX, it's preferable to compare the width + against the number of _characters_ of the converted + value. */ + w = DCHAR_MBSNLEN (result + length, characters); +# else + /* The width is compared against the number of _bytes_ + of the converted value, says POSIX. */ + w = characters; +# endif + } + else + /* w doesn't matter. */ + w = 0; + + if (w < width && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - w; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_TCHAR + if (has_precision || has_width) + { + /* We know the number of bytes in advance. */ + size_t remaining; +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + ENSURE_ALLOCATION (xsum (length, characters)); + for (remaining = characters; remaining > 0; ) + { + char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg == 0) + abort (); +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + count = wcrtomb (cbuf, *arg, &state); +# else + count = wctomb (cbuf, *arg); +# endif + if (count <= 0) + /* Inconsistency. */ + abort (); + memcpy (result + length, cbuf, count); + length += count; + arg++; + remaining -= count; + } + if (!(arg == arg_end)) + abort (); + } + else + { +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + while (arg < arg_end) + { + char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg == 0) + abort (); +# if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t + count = wcrtomb (cbuf, *arg, &state); +# else + count = wctomb (cbuf, *arg); +# endif + if (count <= 0) + { + /* Cannot convert. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + ENSURE_ALLOCATION (xsum (length, count)); + memcpy (result + length, cbuf, count); + length += count; + arg++; + } + } +# else + ENSURE_ALLOCATION (xsum (length, tmpdst_len)); + DCHAR_CPY (result + length, tmpdst, tmpdst_len); + free (tmpdst); + length += tmpdst_len; +# endif + + if (w < width && (dp->flags & FLAG_LEFT)) + { + size_t n = width - w; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } +# endif + } +#endif +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL + else if ((dp->conversion == 'a' || dp->conversion == 'A') +# if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE)) + && (0 +# if NEED_PRINTF_DOUBLE + || a.arg[dp->arg_index].type == TYPE_DOUBLE +# endif +# if NEED_PRINTF_LONG_DOUBLE + || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE +# endif + ) +# endif + ) + { + arg_type type = a.arg[dp->arg_index].type; + int flags = dp->flags; + size_t width; + int has_precision; + size_t precision; + size_t tmp_length; + size_t count; + DCHAR_T tmpbuf[700]; + DCHAR_T *tmp; + DCHAR_T *pad_ptr; + DCHAR_T *p; + + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + width = arg; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = -width; + } + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + } + + has_precision = 0; + precision = 0; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + + /* Allocate a temporary buffer of sufficient size. */ + if (type == TYPE_LONGDOUBLE) + tmp_length = + (unsigned int) ((LDBL_DIG + 1) + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) ((DBL_DIG + 1) + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Account for sign, decimal point etc. */ + tmp_length = xsum (tmp_length, 12); + + if (tmp_length < width) + tmp_length = width; + + tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ + + if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) + tmp = tmpbuf; + else + { + size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); + + if (size_overflow_p (tmp_memsize)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + tmp = (DCHAR_T *) malloc (tmp_memsize); + if (tmp == NULL) + /* Out of memory. */ + goto out_of_memory; + } + + pad_ptr = NULL; + p = tmp; + if (type == TYPE_LONGDOUBLE) + { +# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE + long double arg = a.arg[dp->arg_index].a.a_longdouble; + + if (isnanl (arg)) + { + if (dp->conversion == 'A') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + DECL_LONG_DOUBLE_ROUNDING + + BEGIN_LONG_DOUBLE_ROUNDING (); + + if (signbit (arg)) /* arg < 0.0L or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0L && arg + arg == arg) + { + if (dp->conversion == 'A') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { + int exponent; + long double mantissa; + + if (arg > 0.0L) + mantissa = printf_frexpl (arg, &exponent); + else + { + exponent = 0; + mantissa = 0.0L; + } + + if (has_precision + && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1) + { + /* Round the mantissa. */ + long double tail = mantissa; + size_t q; + + for (q = precision; ; q--) + { + int digit = (int) tail; + tail -= digit; + if (q == 0) + { + if (digit & 1 ? tail >= 0.5L : tail > 0.5L) + tail = 1 - tail; + else + tail = - tail; + break; + } + tail *= 16.0L; + } + if (tail != 0.0L) + for (q = precision; q > 0; q--) + tail *= 0.0625L; + mantissa += tail; + } + + *p++ = '0'; + *p++ = dp->conversion - 'A' + 'X'; + pad_ptr = p; + { + int digit; + + digit = (int) mantissa; + mantissa -= digit; + *p++ = '0' + digit; + if ((flags & FLAG_ALT) + || mantissa > 0.0L || precision > 0) + { + *p++ = decimal_point_char (); + /* This loop terminates because we assume + that FLT_RADIX is a power of 2. */ + while (mantissa > 0.0L) + { + mantissa *= 16.0L; + digit = (int) mantissa; + mantissa -= digit; + *p++ = digit + + (digit < 10 + ? '0' + : dp->conversion - 10); + if (precision > 0) + precision--; + } + while (precision > 0) + { + *p++ = '0'; + precision--; + } + } + } + *p++ = dp->conversion - 'A' + 'P'; +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + + END_LONG_DOUBLE_ROUNDING (); + } +# else + abort (); +# endif + } + else + { +# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE + double arg = a.arg[dp->arg_index].a.a_double; + + if (isnand (arg)) + { + if (dp->conversion == 'A') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + + if (signbit (arg)) /* arg < 0.0 or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0 && arg + arg == arg) + { + if (dp->conversion == 'A') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { + int exponent; + double mantissa; + + if (arg > 0.0) + mantissa = printf_frexp (arg, &exponent); + else + { + exponent = 0; + mantissa = 0.0; + } + + if (has_precision + && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1) + { + /* Round the mantissa. */ + double tail = mantissa; + size_t q; + + for (q = precision; ; q--) + { + int digit = (int) tail; + tail -= digit; + if (q == 0) + { + if (digit & 1 ? tail >= 0.5 : tail > 0.5) + tail = 1 - tail; + else + tail = - tail; + break; + } + tail *= 16.0; + } + if (tail != 0.0) + for (q = precision; q > 0; q--) + tail *= 0.0625; + mantissa += tail; + } + + *p++ = '0'; + *p++ = dp->conversion - 'A' + 'X'; + pad_ptr = p; + { + int digit; + + digit = (int) mantissa; + mantissa -= digit; + *p++ = '0' + digit; + if ((flags & FLAG_ALT) + || mantissa > 0.0 || precision > 0) + { + *p++ = decimal_point_char (); + /* This loop terminates because we assume + that FLT_RADIX is a power of 2. */ + while (mantissa > 0.0) + { + mantissa *= 16.0; + digit = (int) mantissa; + mantissa -= digit; + *p++ = digit + + (digit < 10 + ? '0' + : dp->conversion - 10); + if (precision > 0) + precision--; + } + while (precision > 0) + { + *p++ = '0'; + precision--; + } + } + } + *p++ = dp->conversion - 'A' + 'P'; +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + } +# else + abort (); +# endif + } + + /* The generated string now extends from tmp to p, with the + zero padding insertion point being at pad_ptr. */ + count = p - tmp; + + if (count < width) + { + size_t pad = width - count; + DCHAR_T *end = p + pad; + + if (flags & FLAG_LEFT) + { + /* Pad with spaces on the right. */ + for (; pad > 0; pad--) + *p++ = ' '; + } + else if ((flags & FLAG_ZERO) && pad_ptr != NULL) + { + /* Pad with zeroes. */ + DCHAR_T *q = end; + + while (p > pad_ptr) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = '0'; + } + else + { + /* Pad with spaces on the left. */ + DCHAR_T *q = end; + + while (p > tmp) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = ' '; + } + + p = end; + } + + count = p - tmp; + + if (count >= tmp_length) + /* tmp_length was incorrectly calculated - fix the + code above! */ + abort (); + + /* Make room for the result. */ + if (count >= allocated - length) + { + size_t n = xsum (length, count); + + ENSURE_ALLOCATION (n); + } + + /* Append the result. */ + memcpy (result + length, tmp, count * sizeof (DCHAR_T)); + if (tmp != tmpbuf) + free (tmp); + length += count; + } +#endif +#if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL + else if ((dp->conversion == 'f' || dp->conversion == 'F' + || dp->conversion == 'e' || dp->conversion == 'E' + || dp->conversion == 'g' || dp->conversion == 'G' + || dp->conversion == 'a' || dp->conversion == 'A') + && (0 +# if NEED_PRINTF_DOUBLE + || a.arg[dp->arg_index].type == TYPE_DOUBLE +# elif NEED_PRINTF_INFINITE_DOUBLE + || (a.arg[dp->arg_index].type == TYPE_DOUBLE + /* The systems (mingw) which produce wrong output + for Inf, -Inf, and NaN also do so for -0.0. + Therefore we treat this case here as well. */ + && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double)) +# endif +# if NEED_PRINTF_LONG_DOUBLE + || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE +# elif NEED_PRINTF_INFINITE_LONG_DOUBLE + || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE + /* Some systems produce wrong output for Inf, + -Inf, and NaN. Some systems in this category + (IRIX 5.3) also do so for -0.0. Therefore we + treat this case here as well. */ + && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble)) +# endif + )) + { +# if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) + arg_type type = a.arg[dp->arg_index].type; +# endif + int flags = dp->flags; + size_t width; + size_t count; + int has_precision; + size_t precision; + size_t tmp_length; + DCHAR_T tmpbuf[700]; + DCHAR_T *tmp; + DCHAR_T *pad_ptr; + DCHAR_T *p; + + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + width = arg; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = -width; + } + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + } + + has_precision = 0; + precision = 0; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + + /* POSIX specifies the default precision to be 6 for %f, %F, + %e, %E, but not for %g, %G. Implementations appear to use + the same default precision also for %g, %G. But for %a, %A, + the default precision is 0. */ + if (!has_precision) + if (!(dp->conversion == 'a' || dp->conversion == 'A')) + precision = 6; + + /* Allocate a temporary buffer of sufficient size. */ +# if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE + tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1); +# elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE + tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0); +# elif NEED_PRINTF_LONG_DOUBLE + tmp_length = LDBL_DIG + 1; +# elif NEED_PRINTF_DOUBLE + tmp_length = DBL_DIG + 1; +# else + tmp_length = 0; +# endif + if (tmp_length < precision) + tmp_length = precision; +# if NEED_PRINTF_LONG_DOUBLE +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + if (type == TYPE_LONGDOUBLE) +# endif + if (dp->conversion == 'f' || dp->conversion == 'F') + { + long double arg = a.arg[dp->arg_index].a.a_longdouble; + if (!(isnanl (arg) || arg + arg == arg)) + { + /* arg is finite and nonzero. */ + int exponent = floorlog10l (arg < 0 ? -arg : arg); + if (exponent >= 0 && tmp_length < exponent + precision) + tmp_length = exponent + precision; + } + } +# endif +# if NEED_PRINTF_DOUBLE +# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE + if (type == TYPE_DOUBLE) +# endif + if (dp->conversion == 'f' || dp->conversion == 'F') + { + double arg = a.arg[dp->arg_index].a.a_double; + if (!(isnand (arg) || arg + arg == arg)) + { + /* arg is finite and nonzero. */ + int exponent = floorlog10 (arg < 0 ? -arg : arg); + if (exponent >= 0 && tmp_length < exponent + precision) + tmp_length = exponent + precision; + } + } +# endif + /* Account for sign, decimal point etc. */ + tmp_length = xsum (tmp_length, 12); + + if (tmp_length < width) + tmp_length = width; + + tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ + + if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) + tmp = tmpbuf; + else + { + size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); + + if (size_overflow_p (tmp_memsize)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + tmp = (DCHAR_T *) malloc (tmp_memsize); + if (tmp == NULL) + /* Out of memory. */ + goto out_of_memory; + } + + pad_ptr = NULL; + p = tmp; + +# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + if (type == TYPE_LONGDOUBLE) +# endif + { + long double arg = a.arg[dp->arg_index].a.a_longdouble; + + if (isnanl (arg)) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + DECL_LONG_DOUBLE_ROUNDING + + BEGIN_LONG_DOUBLE_ROUNDING (); + + if (signbit (arg)) /* arg < 0.0L or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0L && arg + arg == arg) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { +# if NEED_PRINTF_LONG_DOUBLE + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + char *digits; + size_t ndigits; + + digits = + scale10_round_decimal_long_double (arg, precision); + if (digits == NULL) + { + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + ndigits = strlen (digits); + + if (ndigits > precision) + do + { + --ndigits; + *p++ = digits[ndigits]; + } + while (ndigits > precision); + else + *p++ = '0'; + /* Here ndigits <= precision. */ + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > ndigits; precision--) + *p++ = '0'; + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + int exponent; + + if (arg == 0.0L) + { + exponent = 0; + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else + { + /* arg > 0.0L. */ + int adjusted; + char *digits; + size_t ndigits; + + exponent = floorlog10l (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_long_double (arg, + (int)precision - exponent); + if (digits == NULL) + { + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + ndigits = strlen (digits); + + if (ndigits == precision + 1) + break; + if (ndigits < precision + || ndigits > precision + 2) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits == precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision+1. */ + if (is_borderline (digits, precision)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_long_double (arg, + (int)precision - exponent + 1); + if (digits2 == NULL) + { + free (digits); + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + if (strlen (digits2) == precision + 1) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision+1. */ + + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + + *p++ = dp->conversion; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', '.', '2', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+.2d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+.2d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + if (precision == 0) + precision = 1; + /* precision >= 1. */ + + if (arg == 0.0L) + /* The exponent is 0, >= -4, < precision. + Use fixed-point notation. */ + { + size_t ndigits = precision; + /* Number of trailing zeroes that have to be + dropped. */ + size_t nzeroes = + (flags & FLAG_ALT ? 0 : precision - 1); + + --ndigits; + *p++ = '0'; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = '0'; + } + } + } + else + { + /* arg > 0.0L. */ + int exponent; + int adjusted; + char *digits; + size_t ndigits; + size_t nzeroes; + + exponent = floorlog10l (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_long_double (arg, + (int)(precision - 1) - exponent); + if (digits == NULL) + { + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + ndigits = strlen (digits); + + if (ndigits == precision) + break; + if (ndigits < precision - 1 + || ndigits > precision + 1) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits < precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision. */ + if (is_borderline (digits, precision - 1)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_long_double (arg, + (int)(precision - 1) - exponent + 1); + if (digits2 == NULL) + { + free (digits); + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + if (strlen (digits2) == precision) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision. */ + + /* Determine the number of trailing zeroes + that have to be dropped. */ + nzeroes = 0; + if ((flags & FLAG_ALT) == 0) + while (nzeroes < ndigits + && digits[nzeroes] == '0') + nzeroes++; + + /* The exponent is now determined. */ + if (exponent >= -4 + && exponent < (long)precision) + { + /* Fixed-point notation: + max(exponent,0)+1 digits, then the + decimal point, then the remaining + digits without trailing zeroes. */ + if (exponent >= 0) + { + size_t ecount = exponent + 1; + /* Note: count <= precision = ndigits. */ + for (; ecount > 0; ecount--) + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + size_t ecount = -exponent - 1; + *p++ = '0'; + *p++ = decimal_point_char (); + for (; ecount > 0; ecount--) + *p++ = '0'; + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + /* Exponential notation. */ + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', '.', '2', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+.2d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+.2d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + + free (digits); + } + } + else + abort (); +# else + /* arg is finite. */ + if (!(arg == 0.0L)) + abort (); + + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + *p++ = dp->conversion; /* 'e' or 'E' */ + *p++ = '+'; + *p++ = '0'; + *p++ = '0'; + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + *p++ = '0'; + if (flags & FLAG_ALT) + { + size_t ndigits = + (precision > 0 ? precision - 1 : 0); + *p++ = decimal_point_char (); + for (; ndigits > 0; --ndigits) + *p++ = '0'; + } + } + else if (dp->conversion == 'a' || dp->conversion == 'A') + { + *p++ = '0'; + *p++ = dp->conversion - 'A' + 'X'; + pad_ptr = p; + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + *p++ = dp->conversion - 'A' + 'P'; + *p++ = '+'; + *p++ = '0'; + } + else + abort (); +# endif + } + + END_LONG_DOUBLE_ROUNDING (); + } + } +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + else +# endif +# endif +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + { + double arg = a.arg[dp->arg_index].a.a_double; + + if (isnand (arg)) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + + if (signbit (arg)) /* arg < 0.0 or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0 && arg + arg == arg) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { +# if NEED_PRINTF_DOUBLE + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + char *digits; + size_t ndigits; + + digits = + scale10_round_decimal_double (arg, precision); + if (digits == NULL) + goto out_of_memory; + ndigits = strlen (digits); + + if (ndigits > precision) + do + { + --ndigits; + *p++ = digits[ndigits]; + } + while (ndigits > precision); + else + *p++ = '0'; + /* Here ndigits <= precision. */ + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > ndigits; precision--) + *p++ = '0'; + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + int exponent; + + if (arg == 0.0) + { + exponent = 0; + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else + { + /* arg > 0.0. */ + int adjusted; + char *digits; + size_t ndigits; + + exponent = floorlog10 (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_double (arg, + (int)precision - exponent); + if (digits == NULL) + goto out_of_memory; + ndigits = strlen (digits); + + if (ndigits == precision + 1) + break; + if (ndigits < precision + || ndigits > precision + 2) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits == precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision+1. */ + if (is_borderline (digits, precision)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_double (arg, + (int)precision - exponent + 1); + if (digits2 == NULL) + { + free (digits); + goto out_of_memory; + } + if (strlen (digits2) == precision + 1) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision+1. */ + + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + + *p++ = dp->conversion; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if defined _WIN32 && ! defined __CYGWIN__ + { '%', '+', '.', '3', 'd', '\0' }; +# else + { '%', '+', '.', '2', 'd', '\0' }; +# endif + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + { + static const char decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if defined _WIN32 && ! defined __CYGWIN__ + "%+.3d"; +# else + "%+.2d"; +# endif + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, decimal_format, exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, decimal_format, exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } + } +# endif + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + if (precision == 0) + precision = 1; + /* precision >= 1. */ + + if (arg == 0.0) + /* The exponent is 0, >= -4, < precision. + Use fixed-point notation. */ + { + size_t ndigits = precision; + /* Number of trailing zeroes that have to be + dropped. */ + size_t nzeroes = + (flags & FLAG_ALT ? 0 : precision - 1); + + --ndigits; + *p++ = '0'; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = '0'; + } + } + } + else + { + /* arg > 0.0. */ + int exponent; + int adjusted; + char *digits; + size_t ndigits; + size_t nzeroes; + + exponent = floorlog10 (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_double (arg, + (int)(precision - 1) - exponent); + if (digits == NULL) + goto out_of_memory; + ndigits = strlen (digits); + + if (ndigits == precision) + break; + if (ndigits < precision - 1 + || ndigits > precision + 1) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits < precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision. */ + if (is_borderline (digits, precision - 1)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_double (arg, + (int)(precision - 1) - exponent + 1); + if (digits2 == NULL) + { + free (digits); + goto out_of_memory; + } + if (strlen (digits2) == precision) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision. */ + + /* Determine the number of trailing zeroes + that have to be dropped. */ + nzeroes = 0; + if ((flags & FLAG_ALT) == 0) + while (nzeroes < ndigits + && digits[nzeroes] == '0') + nzeroes++; + + /* The exponent is now determined. */ + if (exponent >= -4 + && exponent < (long)precision) + { + /* Fixed-point notation: + max(exponent,0)+1 digits, then the + decimal point, then the remaining + digits without trailing zeroes. */ + if (exponent >= 0) + { + size_t ecount = exponent + 1; + /* Note: ecount <= precision = ndigits. */ + for (; ecount > 0; ecount--) + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + size_t ecount = -exponent - 1; + *p++ = '0'; + *p++ = decimal_point_char (); + for (; ecount > 0; ecount--) + *p++ = '0'; + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + /* Exponential notation. */ + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if defined _WIN32 && ! defined __CYGWIN__ + { '%', '+', '.', '3', 'd', '\0' }; +# else + { '%', '+', '.', '2', 'd', '\0' }; +# endif + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + { + static const char decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if defined _WIN32 && ! defined __CYGWIN__ + "%+.3d"; +# else + "%+.2d"; +# endif + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, decimal_format, exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, decimal_format, exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } + } +# endif + } + + free (digits); + } + } + else + abort (); +# else + /* arg is finite. */ + if (!(arg == 0.0)) + abort (); + + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + *p++ = dp->conversion; /* 'e' or 'E' */ + *p++ = '+'; + /* Produce the same number of exponent digits as + the native printf implementation. */ +# if defined _WIN32 && ! defined __CYGWIN__ + *p++ = '0'; +# endif + *p++ = '0'; + *p++ = '0'; + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + *p++ = '0'; + if (flags & FLAG_ALT) + { + size_t ndigits = + (precision > 0 ? precision - 1 : 0); + *p++ = decimal_point_char (); + for (; ndigits > 0; --ndigits) + *p++ = '0'; + } + } + else + abort (); +# endif + } + } + } +# endif + + /* The generated string now extends from tmp to p, with the + zero padding insertion point being at pad_ptr. */ + count = p - tmp; + + if (count < width) + { + size_t pad = width - count; + DCHAR_T *end = p + pad; + + if (flags & FLAG_LEFT) + { + /* Pad with spaces on the right. */ + for (; pad > 0; pad--) + *p++ = ' '; + } + else if ((flags & FLAG_ZERO) && pad_ptr != NULL) + { + /* Pad with zeroes. */ + DCHAR_T *q = end; + + while (p > pad_ptr) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = '0'; + } + else + { + /* Pad with spaces on the left. */ + DCHAR_T *q = end; + + while (p > tmp) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = ' '; + } + + p = end; + } + + count = p - tmp; + + if (count >= tmp_length) + /* tmp_length was incorrectly calculated - fix the + code above! */ + abort (); + + /* Make room for the result. */ + if (count >= allocated - length) + { + size_t n = xsum (length, count); + + ENSURE_ALLOCATION (n); + } + + /* Append the result. */ + memcpy (result + length, tmp, count * sizeof (DCHAR_T)); + if (tmp != tmpbuf) + free (tmp); + length += count; + } +#endif + else + { + arg_type type = a.arg[dp->arg_index].type; + int flags = dp->flags; +#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + int has_width; +#endif +#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + size_t width; +#endif +#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION + int has_precision; + size_t precision; +#endif +#if NEED_PRINTF_UNBOUNDED_PRECISION + int prec_ourselves; +#else +# define prec_ourselves 0 +#endif +#if NEED_PRINTF_FLAG_LEFTADJUST +# define pad_ourselves 1 +#elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + int pad_ourselves; +#else +# define pad_ourselves 0 +#endif + TCHAR_T *fbp; + unsigned int prefix_count; + int prefixes[2] IF_LINT (= { 0 }); + int orig_errno; +#if !USE_SNPRINTF + size_t tmp_length; + TCHAR_T tmpbuf[700]; + TCHAR_T *tmp; +#endif + +#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + has_width = 0; +#endif +#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + width = arg; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = -width; + } + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } +#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + has_width = 1; +#endif + } +#endif + +#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION + has_precision = 0; + precision = 6; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } +#endif + + /* Decide whether to handle the precision ourselves. */ +#if NEED_PRINTF_UNBOUNDED_PRECISION + switch (dp->conversion) + { + case 'd': case 'i': case 'u': + case 'o': + case 'x': case 'X': case 'p': + prec_ourselves = has_precision && (precision > 0); + break; + default: + prec_ourselves = 0; + break; + } +#endif + + /* Decide whether to perform the padding ourselves. */ +#if !NEED_PRINTF_FLAG_LEFTADJUST && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION) + switch (dp->conversion) + { +# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO + /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need + to perform the padding after this conversion. Functions + with unistdio extensions perform the padding based on + character count rather than element count. */ + case 'c': case 's': +# endif +# if NEED_PRINTF_FLAG_ZERO + case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': + case 'a': case 'A': +# endif + pad_ourselves = 1; + break; + default: + pad_ourselves = prec_ourselves; + break; + } +#endif + +#if !USE_SNPRINTF + /* Allocate a temporary buffer of sufficient size for calling + sprintf. */ + tmp_length = + MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, + flags, width, has_precision, precision, + pad_ourselves); + + if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T)) + tmp = tmpbuf; + else + { + size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T)); + + if (size_overflow_p (tmp_memsize)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + tmp = (TCHAR_T *) malloc (tmp_memsize); + if (tmp == NULL) + /* Out of memory. */ + goto out_of_memory; + } +#endif + + /* Construct the format string for calling snprintf or + sprintf. */ + fbp = buf; + *fbp++ = '%'; +#if NEED_PRINTF_FLAG_GROUPING + /* The underlying implementation doesn't support the ' flag. + Produce no grouping characters in this case; this is + acceptable because the grouping is locale dependent. */ +#else + if (flags & FLAG_GROUP) + *fbp++ = '\''; +#endif + if (flags & FLAG_LEFT) + *fbp++ = '-'; + if (flags & FLAG_SHOWSIGN) + *fbp++ = '+'; + if (flags & FLAG_SPACE) + *fbp++ = ' '; + if (flags & FLAG_ALT) + *fbp++ = '#'; +#if __GLIBC__ >= 2 && !defined __UCLIBC__ + if (flags & FLAG_LOCALIZED) + *fbp++ = 'I'; +#endif + if (!pad_ourselves) + { + if (flags & FLAG_ZERO) + *fbp++ = '0'; + if (dp->width_start != dp->width_end) + { + size_t n = dp->width_end - dp->width_start; + /* The width specification is known to consist only + of standard ASCII characters. */ + if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) + { + memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T)); + fbp += n; + } + else + { + const FCHAR_T *mp = dp->width_start; + do + *fbp++ = *mp++; + while (--n > 0); + } + } + } + if (!prec_ourselves) + { + if (dp->precision_start != dp->precision_end) + { + size_t n = dp->precision_end - dp->precision_start; + /* The precision specification is known to consist only + of standard ASCII characters. */ + if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) + { + memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T)); + fbp += n; + } + else + { + const FCHAR_T *mp = dp->precision_start; + do + *fbp++ = *mp++; + while (--n > 0); + } + } + } + + switch (type) + { +#if HAVE_LONG_LONG_INT + case TYPE_LONGLONGINT: + case TYPE_ULONGLONGINT: +# if defined _WIN32 && ! defined __CYGWIN__ + *fbp++ = 'I'; + *fbp++ = '6'; + *fbp++ = '4'; + break; +# else + *fbp++ = 'l'; +# endif +#endif + FALLTHROUGH; + case TYPE_LONGINT: + case TYPE_ULONGINT: +#if HAVE_WINT_T + case TYPE_WIDE_CHAR: +#endif +#if HAVE_WCHAR_T + case TYPE_WIDE_STRING: +#endif + *fbp++ = 'l'; + break; + case TYPE_LONGDOUBLE: + *fbp++ = 'L'; + break; + default: + break; + } +#if NEED_PRINTF_DIRECTIVE_F + if (dp->conversion == 'F') + *fbp = 'f'; + else +#endif + *fbp = dp->conversion; +#if USE_SNPRINTF +# if ! (((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) \ + && !defined __UCLIBC__) \ + || (defined __APPLE__ && defined __MACH__) \ + || (defined _WIN32 && ! defined __CYGWIN__)) + fbp[1] = '%'; + fbp[2] = 'n'; + fbp[3] = '\0'; +# else + /* On glibc2 systems from glibc >= 2.3 - probably also older + ones - we know that snprintf's return value conforms to + ISO C 99: the tests gl_SNPRINTF_RETVAL_C99 and + gl_SNPRINTF_TRUNCATION_C99 pass. + Therefore we can avoid using %n in this situation. + On glibc2 systems from 2004-10-18 or newer, the use of %n + in format strings in writable memory may crash the program + (if compiled with _FORTIFY_SOURCE=2), so we should avoid it + in this situation. */ + /* On Mac OS X 10.3 or newer, we know that snprintf's return + value conforms to ISO C 99: the tests gl_SNPRINTF_RETVAL_C99 + and gl_SNPRINTF_TRUNCATION_C99 pass. + Therefore we can avoid using %n in this situation. + On Mac OS X 10.13 or newer, the use of %n in format strings + in writable memory by default crashes the program, so we + should avoid it in this situation. */ + /* On native Windows systems (such as mingw), we can avoid using + %n because: + - Although the gl_SNPRINTF_TRUNCATION_C99 test fails, + snprintf does not write more than the specified number + of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes + '4', '5', '6' into buf, not '4', '5', '\0'.) + - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf + allows us to recognize the case of an insufficient + buffer size: it returns -1 in this case. + On native Windows systems (such as mingw) where the OS is + Windows Vista, the use of %n in format strings by default + crashes the program. See + <https://gcc.gnu.org/ml/gcc/2007-06/msg00122.html> and + <https://msdn.microsoft.com/en-us/library/ms175782.aspx> + So we should avoid %n in this situation. */ + fbp[1] = '\0'; +# endif +#else + fbp[1] = '\0'; +#endif + + /* Construct the arguments for calling snprintf or sprintf. */ + prefix_count = 0; + if (!pad_ourselves && dp->width_arg_index != ARG_NONE) + { + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int; + } + if (!prec_ourselves && dp->precision_arg_index != ARG_NONE) + { + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int; + } + +#if USE_SNPRINTF + /* The SNPRINTF result is appended after result[0..length]. + The latter is an array of DCHAR_T; SNPRINTF appends an + array of TCHAR_T to it. This is possible because + sizeof (TCHAR_T) divides sizeof (DCHAR_T) and + alignof (TCHAR_T) <= alignof (DCHAR_T). */ +# define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T)) + /* Ensure that maxlen below will be >= 2. Needed on BeOS, + where an snprintf() with maxlen==1 acts like sprintf(). */ + ENSURE_ALLOCATION (xsum (length, + (2 + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR)); + /* Prepare checking whether snprintf returns the count + via %n. */ + *(TCHAR_T *) (result + length) = '\0'; +#endif + + orig_errno = errno; + + for (;;) + { + int count = -1; + +#if USE_SNPRINTF + int retcount = 0; + size_t maxlen = allocated - length; + /* SNPRINTF can fail if its second argument is + > INT_MAX. */ + if (maxlen > INT_MAX / TCHARS_PER_DCHAR) + maxlen = INT_MAX / TCHARS_PER_DCHAR; + maxlen = maxlen * TCHARS_PER_DCHAR; +# define SNPRINTF_BUF(arg) \ + switch (prefix_count) \ + { \ + case 0: \ + retcount = SNPRINTF ((TCHAR_T *) (result + length), \ + maxlen, buf, \ + arg, &count); \ + break; \ + case 1: \ + retcount = SNPRINTF ((TCHAR_T *) (result + length), \ + maxlen, buf, \ + prefixes[0], arg, &count); \ + break; \ + case 2: \ + retcount = SNPRINTF ((TCHAR_T *) (result + length), \ + maxlen, buf, \ + prefixes[0], prefixes[1], arg, \ + &count); \ + break; \ + default: \ + abort (); \ + } +#else +# define SNPRINTF_BUF(arg) \ + switch (prefix_count) \ + { \ + case 0: \ + count = sprintf (tmp, buf, arg); \ + break; \ + case 1: \ + count = sprintf (tmp, buf, prefixes[0], arg); \ + break; \ + case 2: \ + count = sprintf (tmp, buf, prefixes[0], prefixes[1],\ + arg); \ + break; \ + default: \ + abort (); \ + } +#endif + + errno = 0; + switch (type) + { + case TYPE_SCHAR: + { + int arg = a.arg[dp->arg_index].a.a_schar; + SNPRINTF_BUF (arg); + } + break; + case TYPE_UCHAR: + { + unsigned int arg = a.arg[dp->arg_index].a.a_uchar; + SNPRINTF_BUF (arg); + } + break; + case TYPE_SHORT: + { + int arg = a.arg[dp->arg_index].a.a_short; + SNPRINTF_BUF (arg); + } + break; + case TYPE_USHORT: + { + unsigned int arg = a.arg[dp->arg_index].a.a_ushort; + SNPRINTF_BUF (arg); + } + break; + case TYPE_INT: + { + int arg = a.arg[dp->arg_index].a.a_int; + SNPRINTF_BUF (arg); + } + break; + case TYPE_UINT: + { + unsigned int arg = a.arg[dp->arg_index].a.a_uint; + SNPRINTF_BUF (arg); + } + break; + case TYPE_LONGINT: + { + long int arg = a.arg[dp->arg_index].a.a_longint; + SNPRINTF_BUF (arg); + } + break; + case TYPE_ULONGINT: + { + unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint; + SNPRINTF_BUF (arg); + } + break; +#if HAVE_LONG_LONG_INT + case TYPE_LONGLONGINT: + { + long long int arg = a.arg[dp->arg_index].a.a_longlongint; + SNPRINTF_BUF (arg); + } + break; + case TYPE_ULONGLONGINT: + { + unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint; + SNPRINTF_BUF (arg); + } + break; +#endif + case TYPE_DOUBLE: + { + double arg = a.arg[dp->arg_index].a.a_double; + SNPRINTF_BUF (arg); + } + break; + case TYPE_LONGDOUBLE: + { + long double arg = a.arg[dp->arg_index].a.a_longdouble; + SNPRINTF_BUF (arg); + } + break; + case TYPE_CHAR: + { + int arg = a.arg[dp->arg_index].a.a_char; + SNPRINTF_BUF (arg); + } + break; +#if HAVE_WINT_T + case TYPE_WIDE_CHAR: + { + wint_t arg = a.arg[dp->arg_index].a.a_wide_char; + SNPRINTF_BUF (arg); + } + break; +#endif + case TYPE_STRING: + { + const char *arg = a.arg[dp->arg_index].a.a_string; + SNPRINTF_BUF (arg); + } + break; +#if HAVE_WCHAR_T + case TYPE_WIDE_STRING: + { + const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; + SNPRINTF_BUF (arg); + } + break; +#endif + case TYPE_POINTER: + { + void *arg = a.arg[dp->arg_index].a.a_pointer; + SNPRINTF_BUF (arg); + } + break; + default: + abort (); + } + +#if USE_SNPRINTF + /* Portability: Not all implementations of snprintf() + are ISO C 99 compliant. Determine the number of + bytes that snprintf() has produced or would have + produced. */ + if (count >= 0) + { + /* Verify that snprintf() has NUL-terminated its + result. */ + if ((unsigned int) count < maxlen + && ((TCHAR_T *) (result + length)) [count] != '\0') + abort (); + /* Portability hack. */ + if (retcount > count) + count = retcount; + } + else + { + /* snprintf() doesn't understand the '%n' + directive. */ + if (fbp[1] != '\0') + { + /* Don't use the '%n' directive; instead, look + at the snprintf() return value. */ + fbp[1] = '\0'; + continue; + } + else + { + /* Look at the snprintf() return value. */ + if (retcount < 0) + { +# if !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF + /* HP-UX 10.20 snprintf() is doubly deficient: + It doesn't understand the '%n' directive, + *and* it returns -1 (rather than the length + that would have been required) when the + buffer is too small. + But a failure at this point can also come + from other reasons than a too small buffer, + such as an invalid wide string argument to + the %ls directive, or possibly an invalid + floating-point argument. */ + size_t tmp_length = + MAX_ROOM_NEEDED (&a, dp->arg_index, + dp->conversion, type, flags, + width, + has_precision, + precision, pad_ourselves); + + if (maxlen < tmp_length) + { + /* Make more room. But try to do through + this reallocation only once. */ + size_t bigger_need = + xsum (length, + xsum (tmp_length, + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR); + /* And always grow proportionally. + (There may be several arguments, each + needing a little more room than the + previous one.) */ + size_t bigger_need2 = + xsum (xtimes (allocated, 2), 12); + if (bigger_need < bigger_need2) + bigger_need = bigger_need2; + ENSURE_ALLOCATION (bigger_need); + continue; + } +# endif + } + else + count = retcount; + } + } +#endif + + /* Attempt to handle failure. */ + if (count < 0) + { + /* SNPRINTF or sprintf failed. Save and use the errno + that it has set, if any. */ + int saved_errno = errno; + if (saved_errno == 0) + { + if (dp->conversion == 'c' || dp->conversion == 's') + saved_errno = EILSEQ; + else + saved_errno = EINVAL; + } + + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + + errno = saved_errno; + return NULL; + } + +#if USE_SNPRINTF + /* Handle overflow of the allocated buffer. + If such an overflow occurs, a C99 compliant snprintf() + returns a count >= maxlen. However, a non-compliant + snprintf() function returns only count = maxlen - 1. To + cover both cases, test whether count >= maxlen - 1. */ + if ((unsigned int) count + 1 >= maxlen) + { + /* If maxlen already has attained its allowed maximum, + allocating more memory will not increase maxlen. + Instead of looping, bail out. */ + if (maxlen == INT_MAX / TCHARS_PER_DCHAR) + goto overflow; + else + { + /* Need at least (count + 1) * sizeof (TCHAR_T) + bytes. (The +1 is for the trailing NUL.) + But ask for (count + 2) * sizeof (TCHAR_T) + bytes, so that in the next round, we likely get + maxlen > (unsigned int) count + 1 + and so we don't get here again. + And allocate proportionally, to avoid looping + eternally if snprintf() reports a too small + count. */ + size_t n = + xmax (xsum (length, + ((unsigned int) count + 2 + + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR), + xtimes (allocated, 2)); + + ENSURE_ALLOCATION (n); + continue; + } + } +#endif + +#if NEED_PRINTF_UNBOUNDED_PRECISION + if (prec_ourselves) + { + /* Handle the precision. */ + TCHAR_T *prec_ptr = +# if USE_SNPRINTF + (TCHAR_T *) (result + length); +# else + tmp; +# endif + size_t prefix_count; + size_t move; + + prefix_count = 0; + /* Put the additional zeroes after the sign. */ + if (count >= 1 + && (*prec_ptr == '-' || *prec_ptr == '+' + || *prec_ptr == ' ')) + prefix_count = 1; + /* Put the additional zeroes after the 0x prefix if + (flags & FLAG_ALT) || (dp->conversion == 'p'). */ + else if (count >= 2 + && prec_ptr[0] == '0' + && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X')) + prefix_count = 2; + + move = count - prefix_count; + if (precision > move) + { + /* Insert zeroes. */ + size_t insert = precision - move; + TCHAR_T *prec_end; + +# if USE_SNPRINTF + size_t n = + xsum (length, + (count + insert + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR); + length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; + ENSURE_ALLOCATION (n); + length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; + prec_ptr = (TCHAR_T *) (result + length); +# endif + + prec_end = prec_ptr + count; + prec_ptr += prefix_count; + + while (prec_end > prec_ptr) + { + prec_end--; + prec_end[insert] = prec_end[0]; + } + + prec_end += insert; + do + *--prec_end = '0'; + while (prec_end > prec_ptr); + + count += insert; + } + } +#endif + +#if !USE_SNPRINTF + if (count >= tmp_length) + /* tmp_length was incorrectly calculated - fix the + code above! */ + abort (); +#endif + +#if !DCHAR_IS_TCHAR + /* Convert from TCHAR_T[] to DCHAR_T[]. */ + if (dp->conversion == 'c' || dp->conversion == 's') + { + /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING + TYPE_WIDE_STRING. + The result string is not certainly ASCII. */ + const TCHAR_T *tmpsrc; + DCHAR_T *tmpdst; + size_t tmpdst_len; + /* This code assumes that TCHAR_T is 'char'. */ + verify (sizeof (TCHAR_T) == 1); +# if USE_SNPRINTF + tmpsrc = (TCHAR_T *) (result + length); +# else + tmpsrc = tmp; +# endif + tmpdst = + DCHAR_CONV_FROM_ENCODING (locale_charset (), + iconveh_question_mark, + tmpsrc, count, + NULL, + NULL, &tmpdst_len); + if (tmpdst == NULL) + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + ENSURE_ALLOCATION (xsum (length, tmpdst_len)); + DCHAR_CPY (result + length, tmpdst, tmpdst_len); + free (tmpdst); + count = tmpdst_len; + } + else + { + /* The result string is ASCII. + Simple 1:1 conversion. */ +# if USE_SNPRINTF + /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a + no-op conversion, in-place on the array starting + at (result + length). */ + if (sizeof (DCHAR_T) != sizeof (TCHAR_T)) +# endif + { + const TCHAR_T *tmpsrc; + DCHAR_T *tmpdst; + size_t n; + +# if USE_SNPRINTF + if (result == resultbuf) + { + tmpsrc = (TCHAR_T *) (result + length); + /* ENSURE_ALLOCATION will not move tmpsrc + (because it's part of resultbuf). */ + ENSURE_ALLOCATION (xsum (length, count)); + } + else + { + /* ENSURE_ALLOCATION will move the array + (because it uses realloc(). */ + ENSURE_ALLOCATION (xsum (length, count)); + tmpsrc = (TCHAR_T *) (result + length); + } +# else + tmpsrc = tmp; + ENSURE_ALLOCATION (xsum (length, count)); +# endif + tmpdst = result + length; + /* Copy backwards, because of overlapping. */ + tmpsrc += count; + tmpdst += count; + for (n = count; n > 0; n--) + *--tmpdst = *--tmpsrc; + } + } +#endif + +#if DCHAR_IS_TCHAR && !USE_SNPRINTF + /* Make room for the result. */ + if (count > allocated - length) + { + /* Need at least count elements. But allocate + proportionally. */ + size_t n = + xmax (xsum (length, count), xtimes (allocated, 2)); + + ENSURE_ALLOCATION (n); + } +#endif + + /* Here count <= allocated - length. */ + + /* Perform padding. */ +#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + if (pad_ourselves && has_width) + { + size_t w; +# if ENABLE_UNISTDIO + /* Outside POSIX, it's preferable to compare the width + against the number of _characters_ of the converted + value. */ + w = DCHAR_MBSNLEN (result + length, count); +# else + /* The width is compared against the number of _bytes_ + of the converted value, says POSIX. */ + w = count; +# endif + if (w < width) + { + size_t pad = width - w; + + /* Make room for the result. */ + if (xsum (count, pad) > allocated - length) + { + /* Need at least count + pad elements. But + allocate proportionally. */ + size_t n = + xmax (xsum3 (length, count, pad), + xtimes (allocated, 2)); + +# if USE_SNPRINTF + length += count; + ENSURE_ALLOCATION (n); + length -= count; +# else + ENSURE_ALLOCATION (n); +# endif + } + /* Here count + pad <= allocated - length. */ + + { +# if !DCHAR_IS_TCHAR || USE_SNPRINTF + DCHAR_T * const rp = result + length; +# else + DCHAR_T * const rp = tmp; +# endif + DCHAR_T *p = rp + count; + DCHAR_T *end = p + pad; + DCHAR_T *pad_ptr; +# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO + if (dp->conversion == 'c' + || dp->conversion == 's') + /* No zero-padding for string directives. */ + pad_ptr = NULL; + else +# endif + { + pad_ptr = (*rp == '-' ? rp + 1 : rp); + /* No zero-padding of "inf" and "nan". */ + if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z') + || (*pad_ptr >= 'a' && *pad_ptr <= 'z')) + pad_ptr = NULL; + } + /* The generated string now extends from rp to p, + with the zero padding insertion point being at + pad_ptr. */ + + count = count + pad; /* = end - rp */ + + if (flags & FLAG_LEFT) + { + /* Pad with spaces on the right. */ + for (; pad > 0; pad--) + *p++ = ' '; + } + else if ((flags & FLAG_ZERO) && pad_ptr != NULL) + { + /* Pad with zeroes. */ + DCHAR_T *q = end; + + while (p > pad_ptr) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = '0'; + } + else + { + /* Pad with spaces on the left. */ + DCHAR_T *q = end; + + while (p > rp) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = ' '; + } + } + } + } +#endif + + /* Here still count <= allocated - length. */ + +#if !DCHAR_IS_TCHAR || USE_SNPRINTF + /* The snprintf() result did fit. */ +#else + /* Append the sprintf() result. */ + memcpy (result + length, tmp, count * sizeof (DCHAR_T)); +#endif +#if !USE_SNPRINTF + if (tmp != tmpbuf) + free (tmp); +#endif + +#if NEED_PRINTF_DIRECTIVE_F + if (dp->conversion == 'F') + { + /* Convert the %f result to upper case for %F. */ + DCHAR_T *rp = result + length; + size_t rc; + for (rc = count; rc > 0; rc--, rp++) + if (*rp >= 'a' && *rp <= 'z') + *rp = *rp - 'a' + 'A'; + } +#endif + + length += count; + break; + } + errno = orig_errno; +#undef pad_ourselves +#undef prec_ourselves + } + } + } + + /* Add the final NUL. */ + ENSURE_ALLOCATION (xsum (length, 1)); + result[length] = '\0'; + + if (result != resultbuf && length + 1 < allocated) + { + /* Shrink the allocated memory if possible. */ + DCHAR_T *memory; + + memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T)); + if (memory != NULL) + result = memory; + } + + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + *lengthp = length; + /* Note that we can produce a big string of a length > INT_MAX. POSIX + says that snprintf() fails with errno = EOVERFLOW in this case, but + that's only because snprintf() returns an 'int'. This function does + not have this limitation. */ + return result; + +#if USE_SNPRINTF + overflow: + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EOVERFLOW; + return NULL; +#endif + + out_of_memory: + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + out_of_memory_1: + CLEANUP (); + errno = ENOMEM; + return NULL; + } +} + +#undef MAX_ROOM_NEEDED +#undef TCHARS_PER_DCHAR +#undef SNPRINTF +#undef USE_SNPRINTF +#undef DCHAR_SET +#undef DCHAR_CPY +#undef PRINTF_PARSE +#undef DIRECTIVES +#undef DIRECTIVE +#undef DCHAR_IS_TCHAR +#undef TCHAR_T +#undef DCHAR_T +#undef FCHAR_T +#undef VASNPRINTF diff --git a/devspec.en_US/project/recutils/lib/vasnprintf.h b/devspec.en_US/project/recutils/lib/vasnprintf.h new file mode 100755 index 0000000..5b192b2 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/vasnprintf.h @@ -0,0 +1,79 @@ +/* vsprintf with automatic memory allocation. + Copyright (C) 2002-2004, 2007-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _VASNPRINTF_H +#define _VASNPRINTF_H + +/* Get va_list. */ +#include <stdarg.h> + +/* Get size_t. */ +#include <stddef.h> + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The __-protected variants of the attributes 'format' and 'printf' are + accepted by gcc versions 2.6.4 (effectively 2.7) and later. + We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because + gnulib and libintl do '#define printf __printf__' when they override + the 'printf' function. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) +#else +# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Write formatted output to a string dynamically allocated with malloc(). + You can pass a preallocated buffer for the result in RESULTBUF and its + size in *LENGTHP; otherwise you pass RESULTBUF = NULL. + If successful, return the address of the string (this may be = RESULTBUF + if no dynamic memory allocation was necessary) and set *LENGTHP to the + number of resulting bytes, excluding the trailing NUL. Upon error, set + errno and return NULL. + + When dynamic memory allocation occurs, the preallocated buffer is left + alone (with possibly modified contents). This makes it possible to use + a statically allocated or stack-allocated buffer, like this: + + char buf[100]; + size_t len = sizeof (buf); + char *output = vasnprintf (buf, &len, format, args); + if (output == NULL) + ... error handling ...; + else + { + ... use the output string ...; + if (output != buf) + free (output); + } + */ +#if REPLACE_VASNPRINTF +# define asnprintf rpl_asnprintf +# define vasnprintf rpl_vasnprintf +#endif +extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) + _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4)); +extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) + _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 0)); + +#ifdef __cplusplus +} +#endif + +#endif /* _VASNPRINTF_H */ diff --git a/devspec.en_US/project/recutils/lib/vasprintf.c b/devspec.en_US/project/recutils/lib/vasprintf.c new file mode 100755 index 0000000..f5857ca --- /dev/null +++ b/devspec.en_US/project/recutils/lib/vasprintf.c @@ -0,0 +1,50 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#ifdef IN_LIBASPRINTF +# include "vasprintf.h" +#else +# include <stdio.h> +#endif + +#include <errno.h> +#include <limits.h> +#include <stdlib.h> + +#include "vasnprintf.h" + +int +vasprintf (char **resultp, const char *format, va_list args) +{ + size_t length; + char *result = vasnprintf (NULL, &length, format, args); + if (result == NULL) + return -1; + + if (length > INT_MAX) + { + free (result); + errno = EOVERFLOW; + return -1; + } + + *resultp = result; + /* Return the number of resulting bytes, excluding the trailing NUL. */ + return length; +} diff --git a/devspec.en_US/project/recutils/lib/verify.h b/devspec.en_US/project/recutils/lib/verify.h new file mode 100755 index 0000000..b2e5f64 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/verify.h @@ -0,0 +1,285 @@ +/* Compile-time assert-like macros. + + Copyright (C) 2005-2006, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ + +#ifndef _GL_VERIFY_H +#define _GL_VERIFY_H + + +/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per C11. + This is supported by GCC 4.6.0 and later, in C mode, and its use + here generates easier-to-read diagnostics when verify (R) fails. + + Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per C++11. + This will likely be supported by future GCC versions, in C++ mode. + + Use this only with GCC. If we were willing to slow 'configure' + down we could also use it with other compilers, but since this + affects only the quality of diagnostics, why bother? */ +#if (4 < __GNUC__ + (6 <= __GNUC_MINOR__) \ + && (201112L <= __STDC_VERSION__ || !defined __STRICT_ANSI__) \ + && !defined __cplusplus) +# define _GL_HAVE__STATIC_ASSERT 1 +#endif +/* The condition (99 < __GNUC__) is temporary, until we know about the + first G++ release that supports static_assert. */ +#if (99 < __GNUC__) && defined __cplusplus +# define _GL_HAVE_STATIC_ASSERT 1 +#endif + +/* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other + system headers, defines a conflicting _Static_assert that is no + better than ours; override it. */ +#ifndef _GL_HAVE_STATIC_ASSERT +# include <stddef.h> +# undef _Static_assert +#endif + +/* Each of these macros verifies that its argument R is nonzero. To + be portable, R should be an integer constant expression. Unlike + assert (R), there is no run-time overhead. + + If _Static_assert works, verify (R) uses it directly. Similarly, + _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct + that is an operand of sizeof. + + The code below uses several ideas for C++ compilers, and for C + compilers that do not support _Static_assert: + + * The first step is ((R) ? 1 : -1). Given an expression R, of + integral or boolean or floating-point type, this yields an + expression of integral type, whose value is later verified to be + constant and nonnegative. + + * Next this expression W is wrapped in a type + struct _gl_verify_type { + unsigned int _gl_verify_error_if_negative: W; + }. + If W is negative, this yields a compile-time error. No compiler can + deal with a bit-field of negative size. + + One might think that an array size check would have the same + effect, that is, that the type struct { unsigned int dummy[W]; } + would work as well. However, inside a function, some compilers + (such as C++ compilers and GNU C) allow local parameters and + variables inside array size expressions. With these compilers, + an array size check would not properly diagnose this misuse of + the verify macro: + + void function (int n) { verify (n < 0); } + + * For the verify macro, the struct _gl_verify_type will need to + somehow be embedded into a declaration. To be portable, this + declaration must declare an object, a constant, a function, or a + typedef name. If the declared entity uses the type directly, + such as in + + struct dummy {...}; + typedef struct {...} dummy; + extern struct {...} *dummy; + extern void dummy (struct {...} *); + extern struct {...} *dummy (void); + + two uses of the verify macro would yield colliding declarations + if the entity names are not disambiguated. A workaround is to + attach the current line number to the entity name: + + #define _GL_CONCAT0(x, y) x##y + #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) + extern struct {...} * _GL_CONCAT (dummy, __LINE__); + + But this has the problem that two invocations of verify from + within the same macro would collide, since the __LINE__ value + would be the same for both invocations. (The GCC __COUNTER__ + macro solves this problem, but is not portable.) + + A solution is to use the sizeof operator. It yields a number, + getting rid of the identity of the type. Declarations like + + extern int dummy [sizeof (struct {...})]; + extern void dummy (int [sizeof (struct {...})]); + extern int (*dummy (void)) [sizeof (struct {...})]; + + can be repeated. + + * Should the implementation use a named struct or an unnamed struct? + Which of the following alternatives can be used? + + extern int dummy [sizeof (struct {...})]; + extern int dummy [sizeof (struct _gl_verify_type {...})]; + extern void dummy (int [sizeof (struct {...})]); + extern void dummy (int [sizeof (struct _gl_verify_type {...})]); + extern int (*dummy (void)) [sizeof (struct {...})]; + extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; + + In the second and sixth case, the struct type is exported to the + outer scope; two such declarations therefore collide. GCC warns + about the first, third, and fourth cases. So the only remaining + possibility is the fifth case: + + extern int (*dummy (void)) [sizeof (struct {...})]; + + * GCC warns about duplicate declarations of the dummy function if + -Wredundant-decls is used. GCC 4.3 and later have a builtin + __COUNTER__ macro that can let us generate unique identifiers for + each dummy function, to suppress this warning. + + * This implementation exploits the fact that older versions of GCC, + which do not support _Static_assert, also do not warn about the + last declaration mentioned above. + + * GCC warns if -Wnested-externs is enabled and verify() is used + within a function body; but inside a function, you can always + arrange to use verify_expr() instead. + + * In C++, any struct definition inside sizeof is invalid. + Use a template type to work around the problem. */ + +/* Concatenate two preprocessor tokens. */ +#define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) +#define _GL_CONCAT0(x, y) x##y + +/* _GL_COUNTER is an integer, preferably one that changes each time we + use it. Use __COUNTER__ if it works, falling back on __LINE__ + otherwise. __LINE__ isn't perfect, but it's better than a + constant. */ +#if defined __COUNTER__ && __COUNTER__ != __COUNTER__ +# define _GL_COUNTER __COUNTER__ +#else +# define _GL_COUNTER __LINE__ +#endif + +/* Generate a symbol with the given prefix, making it unique if + possible. */ +#define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) + +/* Verify requirement R at compile-time, as an integer constant expression + that returns 1. If R is false, fail at compile-time, preferably + with a diagnostic that includes the string-literal DIAGNOSTIC. */ + +#define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ + (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) + +#ifdef __cplusplus +# if !GNULIB_defined_struct__gl_verify_type +template <int w> + struct _gl_verify_type { + unsigned int _gl_verify_error_if_negative: w; + }; +# define GNULIB_defined_struct__gl_verify_type 1 +# endif +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ + _gl_verify_type<(R) ? 1 : -1> +#elif defined _GL_HAVE__STATIC_ASSERT +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ + struct { \ + _Static_assert (R, DIAGNOSTIC); \ + int _gl_dummy; \ + } +#else +# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ + struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } +#endif + +/* Verify requirement R at compile-time, as a declaration without a + trailing ';'. If R is false, fail at compile-time, preferably + with a diagnostic that includes the string-literal DIAGNOSTIC. + + Unfortunately, unlike C11, this implementation must appear as an + ordinary declaration, and cannot appear inside struct { ... }. */ + +#ifdef _GL_HAVE__STATIC_ASSERT +# define _GL_VERIFY _Static_assert +#else +# define _GL_VERIFY(R, DIAGNOSTIC) \ + extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ + [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] +#endif + +/* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ +#ifdef _GL_STATIC_ASSERT_H +# if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert +# define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC) +# endif +# if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert +# define static_assert _Static_assert /* C11 requires this #define. */ +# endif +#endif + +/* @assert.h omit start@ */ + +/* Each of these macros verifies that its argument R is nonzero. To + be portable, R should be an integer constant expression. Unlike + assert (R), there is no run-time overhead. + + There are two macros, since no single macro can be used in all + contexts in C. verify_true (R) is for scalar contexts, including + integer constant expression contexts. verify (R) is for declaration + contexts, e.g., the top level. */ + +/* Verify requirement R at compile-time, as an integer constant expression. + Return 1. This is equivalent to verify_expr (R, 1). + + verify_true is obsolescent; please use verify_expr instead. */ + +#define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")") + +/* Verify requirement R at compile-time. Return the value of the + expression E. */ + +#define verify_expr(R, E) \ + (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) + +/* Verify requirement R at compile-time, as a declaration without a + trailing ';'. */ + +#ifdef __GNUC__ +# define verify(R) _GL_VERIFY (R, "verify (" #R ")") +#else +/* PGI barfs if R is long. Play it safe. */ +# define verify(R) _GL_VERIFY (R, "verify (...)") +#endif + +#ifndef __has_builtin +# define __has_builtin(x) 0 +#endif + +/* Assume that R always holds. This lets the compiler optimize + accordingly. R should not have side-effects; it may or may not be + evaluated. Behavior is undefined if R is false. */ + +#if (__has_builtin (__builtin_unreachable) \ + || 4 < __GNUC__ + (5 <= __GNUC_MINOR__)) +# define assume(R) ((R) ? (void) 0 : __builtin_unreachable ()) +#elif 1200 <= _MSC_VER +# define assume(R) __assume (R) +#elif ((defined GCC_LINT || defined lint) \ + && (__has_builtin (__builtin_trap) \ + || 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)))) + /* Doing it this way helps various packages when configured with + --enable-gcc-warnings, which compiles with -Dlint. It's nicer + when 'assume' silences warnings even with older GCCs. */ +# define assume(R) ((R) ? (void) 0 : __builtin_trap ()) +#else + /* Some tools grok NOTREACHED, e.g., Oracle Studio 12.6. */ +# define assume(R) ((R) ? (void) 0 : /*NOTREACHED*/ (void) 0) +#endif + +/* @assert.h omit end@ */ + +#endif diff --git a/devspec.en_US/project/recutils/lib/version-etc-fsf.c b/devspec.en_US/project/recutils/lib/version-etc-fsf.c new file mode 100755 index 0000000..b00819d --- /dev/null +++ b/devspec.en_US/project/recutils/lib/version-etc-fsf.c @@ -0,0 +1,30 @@ +/* Variable with FSF copyright information, for version-etc. + Copyright (C) 1999-2006, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Jim Meyering. */ + +#include <config.h> + +/* Specification. */ +#include "version-etc.h" + +/* Default copyright goes to the FSF. */ + +const char version_etc_copyright[] = + /* Do *not* mark this string for translation. %s is a copyright + symbol suitable for this locale, and %d is the copyright + year. */ + "Copyright %s %d Free Software Foundation, Inc."; diff --git a/devspec.en_US/project/recutils/lib/version-etc.c b/devspec.en_US/project/recutils/lib/version-etc.c new file mode 100755 index 0000000..9ca9a56 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/version-etc.c @@ -0,0 +1,258 @@ +/* Print --version and bug-reporting information in a consistent format. + Copyright (C) 1999-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Jim Meyering. */ + +#include <config.h> + +/* Specification. */ +#include "version-etc.h" + +#include <stdarg.h> +#include <stdio.h> + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + +#include "gettext.h" +#define _(msgid) gettext (msgid) + +/* If you use AM_INIT_AUTOMAKE's no-define option, + PACKAGE is not defined. Use PACKAGE_TARNAME instead. */ +#if ! defined PACKAGE && defined PACKAGE_TARNAME +# define PACKAGE PACKAGE_TARNAME +#endif + +enum { COPYRIGHT_YEAR = 2019 }; + +/* The three functions below display the --version information the + standard way. + + If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of + the program. The formats are therefore: + + PACKAGE VERSION + + or + + COMMAND_NAME (PACKAGE) VERSION. + + The functions differ in the way they are passed author names. */ + +/* Display the --version information the standard way. + + Author names are given in the array AUTHORS. N_AUTHORS is the + number of elements in the array. */ +void +version_etc_arn (FILE *stream, + const char *command_name, const char *package, + const char *version, + const char * const * authors, size_t n_authors) +{ + if (command_name) + fprintf (stream, "%s (%s) %s\n", command_name, package, version); + else + fprintf (stream, "%s %s\n", package, version); + +#ifdef PACKAGE_PACKAGER +# ifdef PACKAGE_PACKAGER_VERSION + fprintf (stream, _("Packaged by %s (%s)\n"), PACKAGE_PACKAGER, + PACKAGE_PACKAGER_VERSION); +# else + fprintf (stream, _("Packaged by %s\n"), PACKAGE_PACKAGER); +# endif +#endif + + /* TRANSLATORS: Translate "(C)" to the copyright symbol + (C-in-a-circle), if this symbol is available in the user's + locale. Otherwise, do not translate "(C)"; leave it as-is. */ + fprintf (stream, version_etc_copyright, _("(C)"), COPYRIGHT_YEAR); + + fputs (_("\ +\n\ +License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.\n\ +This is free software: you are free to change and redistribute it.\n\ +There is NO WARRANTY, to the extent permitted by law.\n\ +\n\ +"), + stream); + + switch (n_authors) + { + case 0: + /* No authors are given. The caller should output authorship + info after calling this function. */ + break; + case 1: + /* TRANSLATORS: %s denotes an author name. */ + fprintf (stream, _("Written by %s.\n"), authors[0]); + break; + case 2: + /* TRANSLATORS: Each %s denotes an author name. */ + fprintf (stream, _("Written by %s and %s.\n"), authors[0], authors[1]); + break; + case 3: + /* TRANSLATORS: Each %s denotes an author name. */ + fprintf (stream, _("Written by %s, %s, and %s.\n"), + authors[0], authors[1], authors[2]); + break; + case 4: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + fprintf (stream, _("Written by %s, %s, %s,\nand %s.\n"), + authors[0], authors[1], authors[2], authors[3]); + break; + case 5: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + fprintf (stream, _("Written by %s, %s, %s,\n%s, and %s.\n"), + authors[0], authors[1], authors[2], authors[3], authors[4]); + break; + case 6: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, and %s.\n"), + authors[0], authors[1], authors[2], authors[3], authors[4], + authors[5]); + break; + case 7: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, %s, and %s.\n"), + authors[0], authors[1], authors[2], authors[3], authors[4], + authors[5], authors[6]); + break; + case 8: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + fprintf (stream, _("\ +Written by %s, %s, %s,\n%s, %s, %s, %s,\nand %s.\n"), + authors[0], authors[1], authors[2], authors[3], authors[4], + authors[5], authors[6], authors[7]); + break; + case 9: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + fprintf (stream, _("\ +Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, and %s.\n"), + authors[0], authors[1], authors[2], authors[3], authors[4], + authors[5], authors[6], authors[7], authors[8]); + break; + default: + /* 10 or more authors. Use an abbreviation, since the human reader + will probably not want to read the entire list anyway. */ + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + fprintf (stream, _("\ +Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, %s, and others.\n"), + authors[0], authors[1], authors[2], authors[3], authors[4], + authors[5], authors[6], authors[7], authors[8]); + break; + } +} + +/* Display the --version information the standard way. See the initial + comment to this module, for more information. + + Author names are given in the NULL-terminated array AUTHORS. */ +void +version_etc_ar (FILE *stream, + const char *command_name, const char *package, + const char *version, const char * const * authors) +{ + size_t n_authors; + + for (n_authors = 0; authors[n_authors]; n_authors++) + ; + version_etc_arn (stream, command_name, package, version, authors, n_authors); +} + +/* Display the --version information the standard way. See the initial + comment to this module, for more information. + + Author names are given in the NULL-terminated va_list AUTHORS. */ +void +version_etc_va (FILE *stream, + const char *command_name, const char *package, + const char *version, va_list authors) +{ + size_t n_authors; + const char *authtab[10]; + + for (n_authors = 0; + n_authors < 10 + && (authtab[n_authors] = va_arg (authors, const char *)) != NULL; + n_authors++) + ; + version_etc_arn (stream, command_name, package, version, + authtab, n_authors); +} + + +/* Display the --version information the standard way. + + If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of + the program. The formats are therefore: + + PACKAGE VERSION + + or + + COMMAND_NAME (PACKAGE) VERSION. + + The authors names are passed as separate arguments, with an additional + NULL argument at the end. */ +void +version_etc (FILE *stream, + const char *command_name, const char *package, + const char *version, /* const char *author1, ...*/ ...) +{ + va_list authors; + + va_start (authors, version); + version_etc_va (stream, command_name, package, version, authors); + va_end (authors); +} + +void +emit_bug_reporting_address (void) +{ + /* TRANSLATORS: The placeholder indicates the bug-reporting address + for this package. Please add _another line_ saying + "Report translation bugs to <...>\n" with the address for translation + bugs (typically your translation team's web or email address). */ + printf (_("\nReport bugs to: %s\n"), PACKAGE_BUGREPORT); +#ifdef PACKAGE_PACKAGER_BUG_REPORTS + printf (_("Report %s bugs to: %s\n"), PACKAGE_PACKAGER, + PACKAGE_PACKAGER_BUG_REPORTS); +#endif +#ifdef PACKAGE_URL + printf (_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL); +#else + printf (_("%s home page: <https://www.gnu.org/software/%s/>\n"), + PACKAGE_NAME, PACKAGE); +#endif + fputs (_("General help using GNU software: <https://www.gnu.org/gethelp/>\n"), + stdout); +} diff --git a/devspec.en_US/project/recutils/lib/version-etc.h b/devspec.en_US/project/recutils/lib/version-etc.h new file mode 100755 index 0000000..225cfcd --- /dev/null +++ b/devspec.en_US/project/recutils/lib/version-etc.h @@ -0,0 +1,78 @@ +/* Print --version and bug-reporting information in a consistent format. + Copyright (C) 1999, 2003, 2005, 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Jim Meyering. */ + +#ifndef VERSION_ETC_H +# define VERSION_ETC_H 1 + +# include <stdarg.h> +# include <stdio.h> + +/* The 'sentinel' attribute was added in gcc 4.0. */ +#ifndef _GL_ATTRIBUTE_SENTINEL +# if 4 <= __GNUC__ +# define _GL_ATTRIBUTE_SENTINEL __attribute__ ((__sentinel__)) +# else +# define _GL_ATTRIBUTE_SENTINEL /* empty */ +# endif +#endif + +extern const char version_etc_copyright[]; + +/* The three functions below display the --version information in the + standard way: command and package names, package version, followed + by a short GPLv3+ notice and a list of up to 10 author names. + + If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of + the program. The formats are therefore: + + PACKAGE VERSION + + or + + COMMAND_NAME (PACKAGE) VERSION. + + The functions differ in the way they are passed author names: */ + +/* N_AUTHORS names are supplied in array AUTHORS. */ +extern void version_etc_arn (FILE *stream, + const char *command_name, const char *package, + const char *version, + const char * const * authors, size_t n_authors); + +/* Names are passed in the NULL-terminated array AUTHORS. */ +extern void version_etc_ar (FILE *stream, + const char *command_name, const char *package, + const char *version, const char * const * authors); + +/* Names are passed in the NULL-terminated va_list. */ +extern void version_etc_va (FILE *stream, + const char *command_name, const char *package, + const char *version, va_list authors); + +/* Names are passed as separate arguments, with an additional + NULL argument at the end. */ +extern void version_etc (FILE *stream, + const char *command_name, const char *package, + const char *version, + /* const char *author1, ..., NULL */ ...) + _GL_ATTRIBUTE_SENTINEL; + +/* Display the usual "Report bugs to" stanza. */ +extern void emit_bug_reporting_address (void); + +#endif /* VERSION_ETC_H */ diff --git a/devspec.en_US/project/recutils/lib/vfprintf.c b/devspec.en_US/project/recutils/lib/vfprintf.c new file mode 100755 index 0000000..d58bbed --- /dev/null +++ b/devspec.en_US/project/recutils/lib/vfprintf.c @@ -0,0 +1,74 @@ +/* Formatted output to a stream. + Copyright (C) 2004, 2006-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +/* Specification. */ +#include <stdio.h> + +#include <errno.h> +#include <limits.h> +#include <stdarg.h> +#include <stdlib.h> + +#include "fseterr.h" +#include "vasnprintf.h" + +/* Print formatted output to the stream FP. + Return string length of formatted string. On error, return a negative + value. */ +int +vfprintf (FILE *fp, const char *format, va_list args) +{ + char buf[2000]; + char *output; + size_t len; + size_t lenbuf = sizeof (buf); + + output = vasnprintf (buf, &lenbuf, format, args); + len = lenbuf; + + if (!output) + { + fseterr (fp); + return -1; + } + + if (fwrite (output, 1, len, fp) < len) + { + if (output != buf) + { + int saved_errno = errno; + free (output); + errno = saved_errno; + } + return -1; + } + + if (output != buf) + free (output); + + if (len > INT_MAX) + { + errno = EOVERFLOW; + fseterr (fp); + return -1; + } + + return len; +} diff --git a/devspec.en_US/project/recutils/lib/w32spawn.h b/devspec.en_US/project/recutils/lib/w32spawn.h new file mode 100755 index 0000000..941ff1a --- /dev/null +++ b/devspec.en_US/project/recutils/lib/w32spawn.h @@ -0,0 +1,233 @@ +/* Auxiliary functions for the creation of subprocesses. Native Windows API. + Copyright (C) 2001, 2003-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2003. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef __KLIBC__ +/* Get declarations of the native Windows API functions. */ +# define WIN32_LEAN_AND_MEAN +# include <windows.h> +#endif + +/* Get _open_osfhandle(). */ +#include <io.h> + +#include <stdbool.h> +#include <string.h> +#include <unistd.h> +#include <errno.h> + +/* Get _get_osfhandle(). */ +# if GNULIB_MSVC_NOTHROW +# include "msvc-nothrow.h" +# else +# include <io.h> +# endif + +#include "cloexec.h" +#include "xalloc.h" + +/* Duplicates a file handle, making the copy uninheritable. + Returns -1 for a file handle that is equivalent to closed. */ +static int +dup_noinherit (int fd) +{ + fd = dup_cloexec (fd); + if (fd < 0 && errno == EMFILE) + error (EXIT_FAILURE, errno, _("_open_osfhandle failed")); + + return fd; +} + +/* Returns a file descriptor equivalent to FD, except that the resulting file + descriptor is none of STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO. + FD must be open and non-inheritable. The result will be non-inheritable as + well. + If FD < 0, FD itself is returned. */ +static int +fd_safer_noinherit (int fd) +{ + if (STDIN_FILENO <= fd && fd <= STDERR_FILENO) + { + /* The recursion depth is at most 3. */ + int nfd = fd_safer_noinherit (dup_noinherit (fd)); + int saved_errno = errno; + close (fd); + errno = saved_errno; + return nfd; + } + return fd; +} + +/* Duplicates a file handle, making the copy uninheritable and ensuring the + result is none of STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO. + Returns -1 for a file handle that is equivalent to closed. */ +static int +dup_safer_noinherit (int fd) +{ + return fd_safer_noinherit (dup_noinherit (fd)); +} + +/* Undoes the effect of TEMPFD = dup_safer_noinherit (ORIGFD); */ +static void +undup_safer_noinherit (int tempfd, int origfd) +{ + if (tempfd >= 0) + { + if (dup2 (tempfd, origfd) < 0) + error (EXIT_FAILURE, errno, _("cannot restore fd %d: dup2 failed"), + origfd); + close (tempfd); + } + else + { + /* origfd was closed or open to no handle at all. Set it to a closed + state. This is (nearly) equivalent to the original state. */ + close (origfd); + } +} + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Windows CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + - '*', '?' characters may get expanded through wildcard expansion in the + callee: By default, in the callee, the initialization code before main() + takes the result of GetCommandLine(), wildcard-expands it, and passes it + to main(). The exceptions to this rule are: + - programs that inspect GetCommandLine() and ignore argv, + - mingw programs that have a global variable 'int _CRT_glob = 0;', + - Cygwin programs, when invoked from a Cygwin program. + */ +#ifndef __KLIBC__ +# define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037*?" +# define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#else +# define SHELL_SPECIAL_CHARS "" +# define SHELL_SPACE_CHARS "" +#endif +static char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XNMALLOC (1 + argc + 1, char *); + + /* Add an element upfront that can be used when argv[0] turns out to be a + script, not a program. + On Unix, this would be "/bin/sh". On native Windows, "sh" is actually + "sh.exe". We have to omit the directory part and rely on the search in + PATH, because the mingw "mount points" are not visible inside Windows + CreateProcess(). */ + *new_argv++ = "sh.exe"; + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + bool quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = (char *) xmalloc (length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} diff --git a/devspec.en_US/project/recutils/lib/wait-process.c b/devspec.en_US/project/recutils/lib/wait-process.c new file mode 100755 index 0000000..84c0e86 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/wait-process.c @@ -0,0 +1,361 @@ +/* Waiting for a subprocess to finish. + Copyright (C) 2001-2003, 2005-2019 Free Software Foundation, Inc. + Written by Bruno Haible <haible@clisp.cons.org>, 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + + +#include <config.h> + +/* Specification. */ +#include "wait-process.h" + +#include <errno.h> +#include <stdlib.h> +#include <string.h> +#include <signal.h> + +#include <sys/types.h> +#include <sys/wait.h> + +#include "error.h" +#include "fatal-signal.h" +#include "xalloc.h" +#include "gettext.h" + +#define _(str) gettext (str) + +#define SIZEOF(a) (sizeof(a) / sizeof(a[0])) + + +#if defined _WIN32 && ! defined __CYGWIN__ + +# define WIN32_LEAN_AND_MEAN +# include <windows.h> + +/* The return value of spawnvp() is really a process handle as returned + by CreateProcess(). Therefore we can kill it using TerminateProcess. */ +# define kill(pid,sig) TerminateProcess ((HANDLE) (pid), sig) + +#endif + + +/* Type of an entry in the slaves array. + The 'used' bit determines whether this entry is currently in use. + (If pid_t was an atomic type like sig_atomic_t, we could just set the + 'child' field to 0 when unregistering a slave process, and wouldn't need + the 'used' field.) + The 'used' and 'child' fields are accessed from within the cleanup_slaves() + action, therefore we mark them as 'volatile'. */ +typedef struct +{ + volatile sig_atomic_t used; + volatile pid_t child; +} +slaves_entry_t; + +/* The registered slave subprocesses. */ +static slaves_entry_t static_slaves[32]; +static slaves_entry_t * volatile slaves = static_slaves; +static sig_atomic_t volatile slaves_count = 0; +static size_t slaves_allocated = SIZEOF (static_slaves); + +/* The termination signal for slave subprocesses. + 2003-10-07: Terminator becomes Governator. */ +#ifdef SIGHUP +# define TERMINATOR SIGHUP +#else +# define TERMINATOR SIGTERM +#endif + +/* The cleanup action. It gets called asynchronously. */ +static void +cleanup_slaves (void) +{ + for (;;) + { + /* Get the last registered slave. */ + size_t n = slaves_count; + if (n == 0) + break; + n--; + slaves_count = n; + /* Skip unused entries in the slaves array. */ + if (slaves[n].used) + { + pid_t slave = slaves[n].child; + + /* Kill the slave. */ + kill (slave, TERMINATOR); + } + } +} + +/* Register a subprocess as being a slave process. This means that the + subprocess will be terminated when its creator receives a catchable fatal + signal or exits normally. Registration ends when wait_subprocess() + notices that the subprocess has exited. */ +void +register_slave_subprocess (pid_t child) +{ + static bool cleanup_slaves_registered = false; + if (!cleanup_slaves_registered) + { + atexit (cleanup_slaves); + at_fatal_signal (cleanup_slaves); + cleanup_slaves_registered = true; + } + + /* Try to store the new slave in an unused entry of the slaves array. */ + { + slaves_entry_t *s = slaves; + slaves_entry_t *s_end = s + slaves_count; + + for (; s < s_end; s++) + if (!s->used) + { + /* The two uses of 'volatile' in the slaves_entry_t type above + (and ISO C 99 section 5.1.2.3.(5)) ensure that we mark the + entry as used only after the child pid has been written to the + memory location s->child. */ + s->child = child; + s->used = 1; + return; + } + } + + if (slaves_count == slaves_allocated) + { + /* Extend the slaves array. Note that we cannot use xrealloc(), + because then the cleanup_slaves() function could access an already + deallocated array. */ + slaves_entry_t *old_slaves = slaves; + size_t new_slaves_allocated = 2 * slaves_allocated; + slaves_entry_t *new_slaves = + (slaves_entry_t *) + malloc (new_slaves_allocated * sizeof (slaves_entry_t)); + if (new_slaves == NULL) + { + /* xalloc_die() will call exit() which will invoke cleanup_slaves(). + Additionally we need to kill child, because it's not yet among + the slaves list. */ + kill (child, TERMINATOR); + xalloc_die (); + } + memcpy (new_slaves, old_slaves, + slaves_allocated * sizeof (slaves_entry_t)); + slaves = new_slaves; + slaves_allocated = new_slaves_allocated; + /* Now we can free the old slaves array. */ + if (old_slaves != static_slaves) + free (old_slaves); + } + /* The three uses of 'volatile' in the types above (and ISO C 99 section + 5.1.2.3.(5)) ensure that we increment the slaves_count only after the + new slave and its 'used' bit have been written to the memory locations + that make up slaves[slaves_count]. */ + slaves[slaves_count].child = child; + slaves[slaves_count].used = 1; + slaves_count++; +} + +/* Unregister a child from the list of slave subprocesses. */ +static void +unregister_slave_subprocess (pid_t child) +{ + /* The easiest way to remove an entry from a list that can be used by + an asynchronous signal handler is just to mark it as unused. For this, + we rely on sig_atomic_t. */ + slaves_entry_t *s = slaves; + slaves_entry_t *s_end = s + slaves_count; + + for (; s < s_end; s++) + if (s->used && s->child == child) + s->used = 0; +} + + +/* Wait for a subprocess to finish. Return its exit code. + If it didn't terminate correctly, exit if exit_on_error is true, otherwise + return 127. */ +int +wait_subprocess (pid_t child, const char *progname, + bool ignore_sigpipe, bool null_stderr, + bool slave_process, bool exit_on_error, + int *termsigp) +{ +#if HAVE_WAITID && defined WNOWAIT && 0 + /* Commented out because waitid() without WEXITED and with WNOWAIT doesn't + work: On Solaris 7 and OSF/1 4.0, it returns -1 and sets errno = ECHILD, + and on HP-UX 10.20 it just hangs. */ + /* Use of waitid() with WNOWAIT avoids a race condition: If slave_process is + true, and this process sleeps a very long time between the return from + waitpid() and the execution of unregister_slave_subprocess(), and + meanwhile another process acquires the same PID as child, and then - still + before unregister_slave_subprocess() - this process gets a fatal signal, + it would kill the other totally unrelated process. */ + siginfo_t info; + + if (termsigp != NULL) + *termsigp = 0; + for (;;) + { + if (waitid (P_PID, child, &info, WEXITED | (slave_process ? WNOWAIT : 0)) + < 0) + { +# ifdef EINTR + if (errno == EINTR) + continue; +# endif + if (exit_on_error || !null_stderr) + error (exit_on_error ? EXIT_FAILURE : 0, errno, + _("%s subprocess"), progname); + return 127; + } + + /* info.si_code is set to one of CLD_EXITED, CLD_KILLED, CLD_DUMPED, + CLD_TRAPPED, CLD_STOPPED, CLD_CONTINUED. Loop until the program + terminates. */ + if (info.si_code == CLD_EXITED + || info.si_code == CLD_KILLED || info.si_code == CLD_DUMPED) + break; + } + + /* The child process has exited or was signalled. */ + + if (slave_process) + { + /* Unregister the child from the list of slave subprocesses, so that + later, when we exit, we don't kill a totally unrelated process which + may have acquired the same pid. */ + unregister_slave_subprocess (child); + + /* Now remove the zombie from the process list. */ + for (;;) + { + if (waitid (P_PID, child, &info, WEXITED) < 0) + { +# ifdef EINTR + if (errno == EINTR) + continue; +# endif + if (exit_on_error || !null_stderr) + error (exit_on_error ? EXIT_FAILURE : 0, errno, + _("%s subprocess"), progname); + return 127; + } + break; + } + } + + switch (info.si_code) + { + case CLD_KILLED: + case CLD_DUMPED: + if (termsigp != NULL) + *termsigp = info.si_status; /* TODO: or info.si_signo? */ +# ifdef SIGPIPE + if (info.si_status == SIGPIPE && ignore_sigpipe) + return 0; +# endif + if (exit_on_error || (!null_stderr && termsigp == NULL)) + error (exit_on_error ? EXIT_FAILURE : 0, 0, + _("%s subprocess got fatal signal %d"), + progname, info.si_status); + return 127; + case CLD_EXITED: + if (info.si_status == 127) + { + if (exit_on_error || !null_stderr) + error (exit_on_error ? EXIT_FAILURE : 0, 0, + _("%s subprocess failed"), progname); + return 127; + } + return info.si_status; + default: + abort (); + } +#else + /* waitpid() is just as portable as wait() nowadays. */ + int status; + + if (termsigp != NULL) + *termsigp = 0; + status = 0; + for (;;) + { + int result = waitpid (child, &status, 0); + + if (result != child) + { +# ifdef EINTR + if (errno == EINTR) + continue; +# endif +# if 0 /* defined ECHILD */ + if (errno == ECHILD) + { + /* Child process nonexistent?! Assume it terminated + successfully. */ + status = 0; + break; + } +# endif + if (exit_on_error || !null_stderr) + error (exit_on_error ? EXIT_FAILURE : 0, errno, + _("%s subprocess"), progname); + return 127; + } + + /* One of WIFSIGNALED (status), WIFEXITED (status), WIFSTOPPED (status) + must always be true, since we did not specify WCONTINUED in the + waitpid() call. Loop until the program terminates. */ + if (!WIFSTOPPED (status)) + break; + } + + /* The child process has exited or was signalled. */ + + if (slave_process) + /* Unregister the child from the list of slave subprocesses, so that + later, when we exit, we don't kill a totally unrelated process which + may have acquired the same pid. */ + unregister_slave_subprocess (child); + + if (WIFSIGNALED (status)) + { + if (termsigp != NULL) + *termsigp = WTERMSIG (status); +# ifdef SIGPIPE + if (WTERMSIG (status) == SIGPIPE && ignore_sigpipe) + return 0; +# endif + if (exit_on_error || (!null_stderr && termsigp == NULL)) + error (exit_on_error ? EXIT_FAILURE : 0, 0, + _("%s subprocess got fatal signal %d"), + progname, (int) WTERMSIG (status)); + return 127; + } + if (!WIFEXITED (status)) + abort (); + if (WEXITSTATUS (status) == 127) + { + if (exit_on_error || !null_stderr) + error (exit_on_error ? EXIT_FAILURE : 0, 0, + _("%s subprocess failed"), progname); + return 127; + } + return WEXITSTATUS (status); +#endif +} diff --git a/devspec.en_US/project/recutils/lib/wait-process.h b/devspec.en_US/project/recutils/lib/wait-process.h new file mode 100755 index 0000000..08470fb --- /dev/null +++ b/devspec.en_US/project/recutils/lib/wait-process.h @@ -0,0 +1,74 @@ +/* Waiting for a subprocess to finish. + Copyright (C) 2001-2003, 2006, 2008-2019 Free Software Foundation, Inc. + Written by Bruno Haible <haible@clisp.cons.org>, 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _WAIT_PROCESS_H +#define _WAIT_PROCESS_H + +/* Get pid_t. */ +#include <stdlib.h> +#include <unistd.h> +#include <sys/types.h> + +#include <stdbool.h> + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Wait for a subprocess to finish. Return its exit code. + If it didn't terminate correctly, exit if exit_on_error is true, otherwise + return 127. + Arguments: + - child is the pid of the subprocess. + - progname is the name of the program executed by the subprocess, used for + error messages. + - If ignore_sigpipe is true, consider a subprocess termination due to + SIGPIPE as equivalent to a success. This is suitable for processes whose + only purpose is to write to standard output. This flag can be safely set + to false when the process' standard output is known to go to DEV_NULL. + - If null_stderr is true, the usual error message to stderr will be omitted. + This is suitable when the subprocess does not fulfill an important task. + - slave_process should be set to true if the process has been launched as a + slave process. + - If exit_on_error is true, any error will cause the main process to exit + with an error status. + - If termsigp is not NULL: *termsig will be set to the signal that + terminated the subprocess (if supported by the platform: not on native + Windows platforms), otherwise 0, and the error message about the signal + that terminated the subprocess will be omitted. + Prerequisites: The signal handler for SIGCHLD should not be set to SIG_IGN, + otherwise this function will not work. */ +extern int wait_subprocess (pid_t child, const char *progname, + bool ignore_sigpipe, bool null_stderr, + bool slave_process, bool exit_on_error, + int *termsigp); + +/* Register a subprocess as being a slave process. This means that the + subprocess will be terminated when its creator receives a catchable fatal + signal or exits normally. Registration ends when wait_subprocess() + notices that the subprocess has exited. */ +extern void register_slave_subprocess (pid_t child); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _WAIT_PROCESS_H */ diff --git a/devspec.en_US/project/recutils/lib/waitpid.c b/devspec.en_US/project/recutils/lib/waitpid.c new file mode 100755 index 0000000..a9dace6 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/waitpid.c @@ -0,0 +1,30 @@ +/* Wait for process state change. + Copyright (C) 2001-2003, 2005-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <sys/wait.h> + +/* Implementation for native Windows systems. */ + +#include <process.h> /* for _cwait, WAIT_CHILD */ + +pid_t +waitpid (pid_t pid, int *statusp, int options) +{ + return _cwait (statusp, pid, WAIT_CHILD); +} diff --git a/devspec.en_US/project/recutils/lib/warn-on-use.h b/devspec.en_US/project/recutils/lib/warn-on-use.h new file mode 100755 index 0000000..7d11a15 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/warn-on-use.h @@ -0,0 +1,131 @@ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif diff --git a/devspec.en_US/project/recutils/lib/wchar.h b/devspec.en_US/project/recutils/lib/wchar.h new file mode 100755 index 0000000..295cea9 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/wchar.h @@ -0,0 +1,1546 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A substitute for ISO C99 <wchar.h>, for platforms that have issues. + + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Eric Blake. */ + +/* + * ISO C 99 <wchar.h> for platforms that have issues. + * <http://www.opengroup.org/susv3xbd/wchar.h.html> + * + * For now, this just ensures proper prerequisite inclusion order and + * the declaration of wcwidth(). + */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if (((defined __need_mbstate_t || defined __need_wint_t) \ + && !defined __MINGW32__) \ + || (defined __hpux \ + && ((defined _INTTYPES_INCLUDED && !defined strtoimax) \ + || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) \ + || (defined __MINGW32__ && defined __STRING_H_SOURCED__) \ + || defined _GL_ALREADY_INCLUDING_WCHAR_H) +/* Special invocation convention: + - Inside glibc and uClibc header files, but not MinGW. + - On HP-UX 11.00 we have a sequence of nested includes + <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>, + once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h> + and once directly. In both situations 'wint_t' is not yet defined, + therefore we cannot provide the function overrides; instead include only + the system's <wchar.h>. + - With MinGW 3.22, when <string.h> includes <wchar.h>, only some part of + <wchar.h> is actually processed, and that doesn't include 'mbstate_t'. + - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and + the latter includes <wchar.h>. But here, we have no way to detect whether + <wctype.h> is completely included or is still being included. */ + +#include_next <wchar.h> + +#else +/* Normal invocation convention. */ + +#ifndef _GL_WCHAR_H + +#define _GL_ALREADY_INCLUDING_WCHAR_H + +#if 1 +# include <features.h> /* for __GLIBC__ */ +#endif + +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. + In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined + by <stddef.h>. + But avoid namespace pollution on glibc systems. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include <stddef.h> +#endif +#ifndef __GLIBC__ +# include <stdio.h> +# include <time.h> +#endif + +/* Include the original <wchar.h> if it exists. + Some builds of uClibc lack it. */ +/* The include_next requires a split double-inclusion guard. */ +#if 1 +# include_next <wchar.h> +#endif + +#undef _GL_ALREADY_INCLUDING_WCHAR_H + +#ifndef _GL_WCHAR_H +#define _GL_WCHAR_H + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE /* empty */ +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ +/* A C macro for declaring that specific arguments must not be NULL. + Copyright (C) 2009-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools + that the values passed as arguments n, ..., m must be non-NULL pointers. + n = 1 stands for the first argument, n = 2 for the second argument etc. */ +#ifndef _GL_ARG_NONNULL +# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 +# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) +# else +# define _GL_ARG_NONNULL(params) +# endif +#endif + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + + +/* Define wint_t and WEOF. (Also done in wctype.in.h.) */ +#if !1 && !defined wint_t +# define wint_t int +# ifndef WEOF +# define WEOF -1 +# endif +#else +/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or + <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that + wint_t must be "unchanged by default argument promotions". Override it. */ +# if 0 +# if !GNULIB_defined_wint_t +# if 0 +# include <crtdefs.h> +# else +# include <stddef.h> +# endif +typedef unsigned int rpl_wint_t; +# undef wint_t +# define wint_t rpl_wint_t +# define GNULIB_defined_wint_t 1 +# endif +# endif +# ifndef WEOF +# define WEOF ((wint_t) -1) +# endif +#endif + + +/* Override mbstate_t if it is too small. + On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for + implementing mbrtowc for encodings like UTF-8. */ +#if !(1 && 1) || 0 +# if !GNULIB_defined_mbstate_t +typedef int rpl_mbstate_t; +# undef mbstate_t +# define mbstate_t rpl_mbstate_t +# define GNULIB_defined_mbstate_t 1 +# endif +#endif + + +/* Convert a single-byte character to a wide character. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef btowc +# define btowc rpl_btowc +# endif +_GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (btowc, wint_t, (int c)); +# else +# if !1 +_GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (btowc, wint_t, (int c)); +# endif +_GL_CXXALIASWARN (btowc); +#elif defined GNULIB_POSIXCHECK +# undef btowc +# if HAVE_RAW_DECL_BTOWC +_GL_WARN_ON_USE (btowc, "btowc is unportable - " + "use gnulib module btowc for portability"); +# endif +#endif + + +/* Convert a wide character to a single-byte character. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wctob +# define wctob rpl_wctob +# endif +_GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wctob, int, (wint_t wc)); +# else +# if !defined wctob && !1 +/* wctob is provided by gnulib, or wctob exists but is not declared. */ +_GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wctob, int, (wint_t wc)); +# endif +_GL_CXXALIASWARN (wctob); +#elif defined GNULIB_POSIXCHECK +# undef wctob +# if HAVE_RAW_DECL_WCTOB +_GL_WARN_ON_USE (wctob, "wctob is unportable - " + "use gnulib module wctob for portability"); +# endif +#endif + + +/* Test whether *PS is in the initial state. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsinit +# define mbsinit rpl_mbsinit +# endif +_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps)); +_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps)); +# endif +_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbsinit); +#elif defined GNULIB_POSIXCHECK +# undef mbsinit +# if HAVE_RAW_DECL_MBSINIT +_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - " + "use gnulib module mbsinit for portability"); +# endif +#endif + + +/* Convert a multibyte character to a wide character. */ +#if 1 +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbrtowc +# define mbrtowc rpl_mbrtowc +# endif +_GL_FUNCDECL_RPL (mbrtowc, size_t, + (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +_GL_CXXALIAS_RPL (mbrtowc, size_t, + (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbrtowc, size_t, + (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +# endif +_GL_CXXALIAS_SYS (mbrtowc, size_t, + (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbrtowc); +#elif defined GNULIB_POSIXCHECK +# undef mbrtowc +# if HAVE_RAW_DECL_MBRTOWC +_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - " + "use gnulib module mbrtowc for portability"); +# endif +#endif + + +/* Recognize a multibyte character. */ +#if 1 +# if 1 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbrlen +# define mbrlen rpl_mbrlen +# endif +_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +# endif +_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbrlen); +#elif defined GNULIB_POSIXCHECK +# undef mbrlen +# if HAVE_RAW_DECL_MBRLEN +_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - " + "use gnulib module mbrlen for portability"); +# endif +#endif + + +/* Convert a string to a wide string. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsrtowcs +# define mbsrtowcs rpl_mbsrtowcs +# endif +_GL_FUNCDECL_RPL (mbsrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mbsrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t len, + mbstate_t *ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbsrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mbsrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t len, + mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbsrtowcs); +#elif defined GNULIB_POSIXCHECK +# undef mbsrtowcs +# if HAVE_RAW_DECL_MBSRTOWCS +_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - " + "use gnulib module mbsrtowcs for portability"); +# endif +#endif + + +/* Convert a string to a wide string. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsnrtowcs +# define mbsnrtowcs rpl_mbsnrtowcs +# endif +_GL_FUNCDECL_RPL (mbsnrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mbsnrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (mbsnrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mbsnrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbsnrtowcs); +#elif defined GNULIB_POSIXCHECK +# undef mbsnrtowcs +# if HAVE_RAW_DECL_MBSNRTOWCS +_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - " + "use gnulib module mbsnrtowcs for portability"); +# endif +#endif + + +/* Convert a wide character to a multibyte character. */ +#if 1 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcrtomb +# define wcrtomb rpl_wcrtomb +# endif +_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +# endif +_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (wcrtomb); +#elif defined GNULIB_POSIXCHECK +# undef wcrtomb +# if HAVE_RAW_DECL_WCRTOMB +_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - " + "use gnulib module wcrtomb for portability"); +# endif +#endif + + +/* Convert a wide string to a string. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsrtombs +# define wcsrtombs rpl_wcsrtombs +# endif +_GL_FUNCDECL_RPL (wcsrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (wcsrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t len, + mbstate_t *ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcsrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (wcsrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t len, + mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (wcsrtombs); +#elif defined GNULIB_POSIXCHECK +# undef wcsrtombs +# if HAVE_RAW_DECL_WCSRTOMBS +_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - " + "use gnulib module wcsrtombs for portability"); +# endif +#endif + + +/* Convert a wide string to a string. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsnrtombs +# define wcsnrtombs rpl_wcsnrtombs +# endif +_GL_FUNCDECL_RPL (wcsnrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t srclen, size_t len, + mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (wcsnrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcsnrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t srclen, size_t len, + mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (wcsnrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (wcsnrtombs); +#elif defined GNULIB_POSIXCHECK +# undef wcsnrtombs +# if HAVE_RAW_DECL_WCSNRTOMBS +_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - " + "use gnulib module wcsnrtombs for portability"); +# endif +#endif + + +/* Return the number of screen columns needed for WC. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcwidth +# define wcwidth rpl_wcwidth +# endif +_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t)); +# else +# if !1 +/* wcwidth exists but is not declared. */ +_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t)); +# endif +_GL_CXXALIASWARN (wcwidth); +#elif defined GNULIB_POSIXCHECK +# undef wcwidth +# if HAVE_RAW_DECL_WCWIDTH +_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - " + "use gnulib module wcwidth for portability"); +# endif +#endif + + +/* Search N wide characters of S for C. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t); + wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wmemchr, + wchar_t *, (const wchar_t *, wchar_t, size_t), + const wchar_t *, (const wchar_t *, wchar_t, size_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +_GL_CXXALIASWARN1 (wmemchr, const wchar_t *, + (const wchar_t *s, wchar_t c, size_t n)); +# else +_GL_CXXALIASWARN (wmemchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmemchr +# if HAVE_RAW_DECL_WMEMCHR +_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - " + "use gnulib module wmemchr for portability"); +# endif +#endif + + +/* Compare N wide characters of S1 and S2. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wmemcmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wmemcmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wmemcmp); +#elif defined GNULIB_POSIXCHECK +# undef wmemcmp +# if HAVE_RAW_DECL_WMEMCMP +_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - " + "use gnulib module wmemcmp for portability"); +# endif +#endif + + +/* Copy N wide characters of SRC to DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wmemcpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmemcpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wmemcpy); +#elif defined GNULIB_POSIXCHECK +# undef wmemcpy +# if HAVE_RAW_DECL_WMEMCPY +_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - " + "use gnulib module wmemcpy for portability"); +# endif +#endif + + +/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for + overlapping memory areas. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wmemmove, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmemmove, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wmemmove); +#elif defined GNULIB_POSIXCHECK +# undef wmemmove +# if HAVE_RAW_DECL_WMEMMOVE +_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - " + "use gnulib module wmemmove for portability"); +# endif +#endif + + +/* Set N wide characters of S to C. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +_GL_CXXALIASWARN (wmemset); +#elif defined GNULIB_POSIXCHECK +# undef wmemset +# if HAVE_RAW_DECL_WMEMSET +_GL_WARN_ON_USE (wmemset, "wmemset is unportable - " + "use gnulib module wmemset for portability"); +# endif +#endif + + +/* Return the number of wide characters in S. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s)); +_GL_CXXALIASWARN (wcslen); +#elif defined GNULIB_POSIXCHECK +# undef wcslen +# if HAVE_RAW_DECL_WCSLEN +_GL_WARN_ON_USE (wcslen, "wcslen is unportable - " + "use gnulib module wcslen for portability"); +# endif +#endif + + +/* Return the number of wide characters in S, but at most MAXLEN. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)); +_GL_CXXALIASWARN (wcsnlen); +#elif defined GNULIB_POSIXCHECK +# undef wcsnlen +# if HAVE_RAW_DECL_WCSNLEN +_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - " + "use gnulib module wcsnlen for portability"); +# endif +#endif + + +/* Copy SRC to DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +# endif +_GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIASWARN (wcscpy); +#elif defined GNULIB_POSIXCHECK +# undef wcscpy +# if HAVE_RAW_DECL_WCSCPY +_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - " + "use gnulib module wcscpy for portability"); +# endif +#endif + + +/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +# endif +_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIASWARN (wcpcpy); +#elif defined GNULIB_POSIXCHECK +# undef wcpcpy +# if HAVE_RAW_DECL_WCPCPY +_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - " + "use gnulib module wcpcpy for portability"); +# endif +#endif + + +/* Copy no more than N wide characters of SRC to DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsncpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcsncpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wcsncpy); +#elif defined GNULIB_POSIXCHECK +# undef wcsncpy +# if HAVE_RAW_DECL_WCSNCPY +_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - " + "use gnulib module wcsncpy for portability"); +# endif +#endif + + +/* Copy no more than N characters of SRC to DEST, returning the address of + the last character written into DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcpncpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcpncpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wcpncpy); +#elif defined GNULIB_POSIXCHECK +# undef wcpncpy +# if HAVE_RAW_DECL_WCPNCPY +_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - " + "use gnulib module wcpncpy for portability"); +# endif +#endif + + +/* Append SRC onto DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); +# endif +_GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIASWARN (wcscat); +#elif defined GNULIB_POSIXCHECK +# undef wcscat +# if HAVE_RAW_DECL_WCSCAT +_GL_WARN_ON_USE (wcscat, "wcscat is unportable - " + "use gnulib module wcscat for portability"); +# endif +#endif + + +/* Append no more than N wide characters of SRC onto DEST. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsncat, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcsncat, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wcsncat); +#elif defined GNULIB_POSIXCHECK +# undef wcsncat +# if HAVE_RAW_DECL_WCSNCAT +_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - " + "use gnulib module wcsncat for portability"); +# endif +#endif + + +/* Compare S1 and S2. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); +_GL_CXXALIASWARN (wcscmp); +#elif defined GNULIB_POSIXCHECK +# undef wcscmp +# if HAVE_RAW_DECL_WCSCMP +_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - " + "use gnulib module wcscmp for portability"); +# endif +#endif + + +/* Compare no more than N wide characters of S1 and S2. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsncmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsncmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wcsncmp); +#elif defined GNULIB_POSIXCHECK +# undef wcsncmp +# if HAVE_RAW_DECL_WCSNCMP +_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - " + "use gnulib module wcsncmp for portability"); +# endif +#endif + + +/* Compare S1 and S2, ignoring case. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)); +_GL_CXXALIASWARN (wcscasecmp); +#elif defined GNULIB_POSIXCHECK +# undef wcscasecmp +# if HAVE_RAW_DECL_WCSCASECMP +_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - " + "use gnulib module wcscasecmp for portability"); +# endif +#endif + + +/* Compare no more than N chars of S1 and S2, ignoring case. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsncasecmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsncasecmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wcsncasecmp); +#elif defined GNULIB_POSIXCHECK +# undef wcsncasecmp +# if HAVE_RAW_DECL_WCSNCASECMP +_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - " + "use gnulib module wcsncasecmp for portability"); +# endif +#endif + + +/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE + category of the current locale. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); +# endif +_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); +_GL_CXXALIASWARN (wcscoll); +#elif defined GNULIB_POSIXCHECK +# undef wcscoll +# if HAVE_RAW_DECL_WCSCOLL +_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - " + "use gnulib module wcscoll for portability"); +# endif +#endif + + +/* Transform S2 into array pointed to by S1 such that if wcscmp is applied + to two transformed strings the result is the as applying 'wcscoll' to the + original strings. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wcsxfrm); +#elif defined GNULIB_POSIXCHECK +# undef wcsxfrm +# if HAVE_RAW_DECL_WCSXFRM +_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - " + "use gnulib module wcsxfrm for portability"); +# endif +#endif + + +/* Duplicate S, returning an identical malloc'd string. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s)); +# endif +_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); +_GL_CXXALIASWARN (wcsdup); +#elif defined GNULIB_POSIXCHECK +# undef wcsdup +# if HAVE_RAW_DECL_WCSDUP +_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - " + "use gnulib module wcsdup for portability"); +# endif +#endif + + +/* Find the first occurrence of WC in WCS. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcschr (const wchar_t *, wchar_t); + wchar_t * std::wcschr (wchar_t *, wchar_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcschr, + wchar_t *, (const wchar_t *, wchar_t), + const wchar_t *, (const wchar_t *, wchar_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc)); +_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); +# else +_GL_CXXALIASWARN (wcschr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcschr +# if HAVE_RAW_DECL_WCSCHR +_GL_WARN_ON_USE (wcschr, "wcschr is unportable - " + "use gnulib module wcschr for portability"); +# endif +#endif + + +/* Find the last occurrence of WC in WCS. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcsrchr (const wchar_t *, wchar_t); + wchar_t * std::wcsrchr (wchar_t *, wchar_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcsrchr, + wchar_t *, (const wchar_t *, wchar_t), + const wchar_t *, (const wchar_t *, wchar_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc)); +_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); +# else +_GL_CXXALIASWARN (wcsrchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsrchr +# if HAVE_RAW_DECL_WCSRCHR +_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - " + "use gnulib module wcsrchr for portability"); +# endif +#endif + + +/* Return the length of the initial segmet of WCS which consists entirely + of wide characters not in REJECT. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); +_GL_CXXALIASWARN (wcscspn); +#elif defined GNULIB_POSIXCHECK +# undef wcscspn +# if HAVE_RAW_DECL_WCSCSPN +_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - " + "use gnulib module wcscspn for portability"); +# endif +#endif + + +/* Return the length of the initial segmet of WCS which consists entirely + of wide characters in ACCEPT. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); +_GL_CXXALIASWARN (wcsspn); +#elif defined GNULIB_POSIXCHECK +# undef wcsspn +# if HAVE_RAW_DECL_WCSSPN +_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - " + "use gnulib module wcsspn for portability"); +# endif +#endif + + +/* Find the first occurrence in WCS of any character in ACCEPT. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcspbrk, wchar_t *, + (const wchar_t *wcs, const wchar_t *accept) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *); + wchar_t * std::wcspbrk (wchar_t *, const wchar_t *); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcspbrk, + wchar_t *, (const wchar_t *, const wchar_t *), + const wchar_t *, (const wchar_t *, const wchar_t *)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcspbrk, wchar_t *, + (wchar_t *wcs, const wchar_t *accept)); +_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *, + (const wchar_t *wcs, const wchar_t *accept)); +# else +_GL_CXXALIASWARN (wcspbrk); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcspbrk +# if HAVE_RAW_DECL_WCSPBRK +_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - " + "use gnulib module wcspbrk for portability"); +# endif +#endif + + +/* Find the first occurrence of NEEDLE in HAYSTACK. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcsstr, wchar_t *, + (const wchar_t *haystack, const wchar_t *needle) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *); + wchar_t * std::wcsstr (wchar_t *, const wchar_t *); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcsstr, + wchar_t *, (const wchar_t *, const wchar_t *), + const wchar_t *, (const wchar_t *, const wchar_t *)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcsstr, wchar_t *, + (wchar_t *haystack, const wchar_t *needle)); +_GL_CXXALIASWARN1 (wcsstr, const wchar_t *, + (const wchar_t *haystack, const wchar_t *needle)); +# else +_GL_CXXALIASWARN (wcsstr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsstr +# if HAVE_RAW_DECL_WCSSTR +_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - " + "use gnulib module wcsstr for portability"); +# endif +#endif + + +/* Divide WCS into tokens separated by characters in DELIM. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wcstok, wchar_t *, + (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); +# endif +_GL_CXXALIAS_SYS (wcstok, wchar_t *, + (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); +_GL_CXXALIASWARN (wcstok); +#elif defined GNULIB_POSIXCHECK +# undef wcstok +# if HAVE_RAW_DECL_WCSTOK +_GL_WARN_ON_USE (wcstok, "wcstok is unportable - " + "use gnulib module wcstok for portability"); +# endif +#endif + + +/* Determine number of column positions required for first N wide + characters (or fewer if S ends before this) in S. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcswidth +# define wcswidth rpl_wcswidth +# endif +_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n) + _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n)); +# endif +_GL_CXXALIASWARN (wcswidth); +#elif defined GNULIB_POSIXCHECK +# undef wcswidth +# if HAVE_RAW_DECL_WCSWIDTH +_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - " + "use gnulib module wcswidth for portability"); +# endif +#endif + + +/* Convert *TP to a date and time wide string. See + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsftime.html>. */ +#if 0 +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsftime +# define wcsftime rpl_wcsftime +# endif +_GL_FUNCDECL_RPL (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, + const wchar_t *__fmt, const struct tm *__tp) + _GL_ARG_NONNULL ((1, 3, 4))); +_GL_CXXALIAS_RPL (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, + const wchar_t *__fmt, const struct tm *__tp)); +# else +# if !1 +_GL_FUNCDECL_SYS (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, + const wchar_t *__fmt, const struct tm *__tp) + _GL_ARG_NONNULL ((1, 3, 4))); +# endif +_GL_CXXALIAS_SYS (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, + const wchar_t *__fmt, const struct tm *__tp)); +# endif +_GL_CXXALIASWARN (wcsftime); +#elif defined GNULIB_POSIXCHECK +# undef wcsftime +# if HAVE_RAW_DECL_WCSFTIME +_GL_WARN_ON_USE (wcsftime, "wcsftime is unportable - " + "use gnulib module wcsftime for portability"); +# endif +#endif + + +#endif /* _GL_WCHAR_H */ +#endif /* _GL_WCHAR_H */ +#endif diff --git a/devspec.en_US/project/recutils/lib/wchar.in.h b/devspec.en_US/project/recutils/lib/wchar.in.h new file mode 100755 index 0000000..17d5691 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/wchar.in.h @@ -0,0 +1,1072 @@ +/* A substitute for ISO C99 <wchar.h>, for platforms that have issues. + + Copyright (C) 2007-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Eric Blake. */ + +/* + * ISO C 99 <wchar.h> for platforms that have issues. + * <http://www.opengroup.org/susv3xbd/wchar.h.html> + * + * For now, this just ensures proper prerequisite inclusion order and + * the declaration of wcwidth(). + */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if (((defined __need_mbstate_t || defined __need_wint_t) \ + && !defined __MINGW32__) \ + || (defined __hpux \ + && ((defined _INTTYPES_INCLUDED && !defined strtoimax) \ + || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) \ + || (defined __MINGW32__ && defined __STRING_H_SOURCED__) \ + || defined _GL_ALREADY_INCLUDING_WCHAR_H) +/* Special invocation convention: + - Inside glibc and uClibc header files, but not MinGW. + - On HP-UX 11.00 we have a sequence of nested includes + <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>, + once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h> + and once directly. In both situations 'wint_t' is not yet defined, + therefore we cannot provide the function overrides; instead include only + the system's <wchar.h>. + - With MinGW 3.22, when <string.h> includes <wchar.h>, only some part of + <wchar.h> is actually processed, and that doesn't include 'mbstate_t'. + - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and + the latter includes <wchar.h>. But here, we have no way to detect whether + <wctype.h> is completely included or is still being included. */ + +#@INCLUDE_NEXT@ @NEXT_WCHAR_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_WCHAR_H + +#define _GL_ALREADY_INCLUDING_WCHAR_H + +#if @HAVE_FEATURES_H@ +# include <features.h> /* for __GLIBC__ */ +#endif + +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. + In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined + by <stddef.h>. + But avoid namespace pollution on glibc systems. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include <stddef.h> +#endif +#ifndef __GLIBC__ +# include <stdio.h> +# include <time.h> +#endif + +/* Include the original <wchar.h> if it exists. + Some builds of uClibc lack it. */ +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_WCHAR_H@ +# @INCLUDE_NEXT@ @NEXT_WCHAR_H@ +#endif + +#undef _GL_ALREADY_INCLUDING_WCHAR_H + +#ifndef _@GUARD_PREFIX@_WCHAR_H +#define _@GUARD_PREFIX@_WCHAR_H + +/* The __attribute__ feature is available in gcc versions 2.5 and later. + The attribute __pure__ was added in gcc 2.96. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE /* empty */ +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_ARG_NONNULL is copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + + +/* Define wint_t and WEOF. (Also done in wctype.in.h.) */ +#if !@HAVE_WINT_T@ && !defined wint_t +# define wint_t int +# ifndef WEOF +# define WEOF -1 +# endif +#else +/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or + <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that + wint_t must be "unchanged by default argument promotions". Override it. */ +# if @GNULIB_OVERRIDES_WINT_T@ +# if !GNULIB_defined_wint_t +# if @HAVE_CRTDEFS_H@ +# include <crtdefs.h> +# else +# include <stddef.h> +# endif +typedef unsigned int rpl_wint_t; +# undef wint_t +# define wint_t rpl_wint_t +# define GNULIB_defined_wint_t 1 +# endif +# endif +# ifndef WEOF +# define WEOF ((wint_t) -1) +# endif +#endif + + +/* Override mbstate_t if it is too small. + On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for + implementing mbrtowc for encodings like UTF-8. */ +#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@ +# if !GNULIB_defined_mbstate_t +typedef int rpl_mbstate_t; +# undef mbstate_t +# define mbstate_t rpl_mbstate_t +# define GNULIB_defined_mbstate_t 1 +# endif +#endif + + +/* Convert a single-byte character to a wide character. */ +#if @GNULIB_BTOWC@ +# if @REPLACE_BTOWC@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef btowc +# define btowc rpl_btowc +# endif +_GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (btowc, wint_t, (int c)); +# else +# if !@HAVE_BTOWC@ +_GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (btowc, wint_t, (int c)); +# endif +_GL_CXXALIASWARN (btowc); +#elif defined GNULIB_POSIXCHECK +# undef btowc +# if HAVE_RAW_DECL_BTOWC +_GL_WARN_ON_USE (btowc, "btowc is unportable - " + "use gnulib module btowc for portability"); +# endif +#endif + + +/* Convert a wide character to a single-byte character. */ +#if @GNULIB_WCTOB@ +# if @REPLACE_WCTOB@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wctob +# define wctob rpl_wctob +# endif +_GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wctob, int, (wint_t wc)); +# else +# if !defined wctob && !@HAVE_DECL_WCTOB@ +/* wctob is provided by gnulib, or wctob exists but is not declared. */ +_GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wctob, int, (wint_t wc)); +# endif +_GL_CXXALIASWARN (wctob); +#elif defined GNULIB_POSIXCHECK +# undef wctob +# if HAVE_RAW_DECL_WCTOB +_GL_WARN_ON_USE (wctob, "wctob is unportable - " + "use gnulib module wctob for portability"); +# endif +#endif + + +/* Test whether *PS is in the initial state. */ +#if @GNULIB_MBSINIT@ +# if @REPLACE_MBSINIT@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsinit +# define mbsinit rpl_mbsinit +# endif +_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps)); +_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps)); +# else +# if !@HAVE_MBSINIT@ +_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps)); +# endif +_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbsinit); +#elif defined GNULIB_POSIXCHECK +# undef mbsinit +# if HAVE_RAW_DECL_MBSINIT +_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - " + "use gnulib module mbsinit for portability"); +# endif +#endif + + +/* Convert a multibyte character to a wide character. */ +#if @GNULIB_MBRTOWC@ +# if @REPLACE_MBRTOWC@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbrtowc +# define mbrtowc rpl_mbrtowc +# endif +_GL_FUNCDECL_RPL (mbrtowc, size_t, + (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +_GL_CXXALIAS_RPL (mbrtowc, size_t, + (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +# else +# if !@HAVE_MBRTOWC@ +_GL_FUNCDECL_SYS (mbrtowc, size_t, + (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +# endif +_GL_CXXALIAS_SYS (mbrtowc, size_t, + (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbrtowc); +#elif defined GNULIB_POSIXCHECK +# undef mbrtowc +# if HAVE_RAW_DECL_MBRTOWC +_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - " + "use gnulib module mbrtowc for portability"); +# endif +#endif + + +/* Recognize a multibyte character. */ +#if @GNULIB_MBRLEN@ +# if @REPLACE_MBRLEN@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbrlen +# define mbrlen rpl_mbrlen +# endif +_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +# else +# if !@HAVE_MBRLEN@ +_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +# endif +_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbrlen); +#elif defined GNULIB_POSIXCHECK +# undef mbrlen +# if HAVE_RAW_DECL_MBRLEN +_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - " + "use gnulib module mbrlen for portability"); +# endif +#endif + + +/* Convert a string to a wide string. */ +#if @GNULIB_MBSRTOWCS@ +# if @REPLACE_MBSRTOWCS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsrtowcs +# define mbsrtowcs rpl_mbsrtowcs +# endif +_GL_FUNCDECL_RPL (mbsrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mbsrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t len, + mbstate_t *ps)); +# else +# if !@HAVE_MBSRTOWCS@ +_GL_FUNCDECL_SYS (mbsrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mbsrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t len, + mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbsrtowcs); +#elif defined GNULIB_POSIXCHECK +# undef mbsrtowcs +# if HAVE_RAW_DECL_MBSRTOWCS +_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - " + "use gnulib module mbsrtowcs for portability"); +# endif +#endif + + +/* Convert a string to a wide string. */ +#if @GNULIB_MBSNRTOWCS@ +# if @REPLACE_MBSNRTOWCS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef mbsnrtowcs +# define mbsnrtowcs rpl_mbsnrtowcs +# endif +_GL_FUNCDECL_RPL (mbsnrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (mbsnrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +# else +# if !@HAVE_MBSNRTOWCS@ +_GL_FUNCDECL_SYS (mbsnrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (mbsnrtowcs, size_t, + (wchar_t *dest, const char **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (mbsnrtowcs); +#elif defined GNULIB_POSIXCHECK +# undef mbsnrtowcs +# if HAVE_RAW_DECL_MBSNRTOWCS +_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - " + "use gnulib module mbsnrtowcs for portability"); +# endif +#endif + + +/* Convert a wide character to a multibyte character. */ +#if @GNULIB_WCRTOMB@ +# if @REPLACE_WCRTOMB@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcrtomb +# define wcrtomb rpl_wcrtomb +# endif +_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +# else +# if !@HAVE_WCRTOMB@ +_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +# endif +_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (wcrtomb); +#elif defined GNULIB_POSIXCHECK +# undef wcrtomb +# if HAVE_RAW_DECL_WCRTOMB +_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - " + "use gnulib module wcrtomb for portability"); +# endif +#endif + + +/* Convert a wide string to a string. */ +#if @GNULIB_WCSRTOMBS@ +# if @REPLACE_WCSRTOMBS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsrtombs +# define wcsrtombs rpl_wcsrtombs +# endif +_GL_FUNCDECL_RPL (wcsrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (wcsrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t len, + mbstate_t *ps)); +# else +# if !@HAVE_WCSRTOMBS@ +_GL_FUNCDECL_SYS (wcsrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (wcsrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t len, + mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (wcsrtombs); +#elif defined GNULIB_POSIXCHECK +# undef wcsrtombs +# if HAVE_RAW_DECL_WCSRTOMBS +_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - " + "use gnulib module wcsrtombs for portability"); +# endif +#endif + + +/* Convert a wide string to a string. */ +#if @GNULIB_WCSNRTOMBS@ +# if @REPLACE_WCSNRTOMBS@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsnrtombs +# define wcsnrtombs rpl_wcsnrtombs +# endif +_GL_FUNCDECL_RPL (wcsnrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t srclen, size_t len, + mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (wcsnrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +# else +# if !@HAVE_WCSNRTOMBS@ +_GL_FUNCDECL_SYS (wcsnrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t srclen, size_t len, + mbstate_t *ps) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (wcsnrtombs, size_t, + (char *dest, const wchar_t **srcp, size_t srclen, size_t len, + mbstate_t *ps)); +# endif +_GL_CXXALIASWARN (wcsnrtombs); +#elif defined GNULIB_POSIXCHECK +# undef wcsnrtombs +# if HAVE_RAW_DECL_WCSNRTOMBS +_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - " + "use gnulib module wcsnrtombs for portability"); +# endif +#endif + + +/* Return the number of screen columns needed for WC. */ +#if @GNULIB_WCWIDTH@ +# if @REPLACE_WCWIDTH@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcwidth +# define wcwidth rpl_wcwidth +# endif +_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t)); +# else +# if !@HAVE_DECL_WCWIDTH@ +/* wcwidth exists but is not declared. */ +_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t)); +# endif +_GL_CXXALIASWARN (wcwidth); +#elif defined GNULIB_POSIXCHECK +# undef wcwidth +# if HAVE_RAW_DECL_WCWIDTH +_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - " + "use gnulib module wcwidth for portability"); +# endif +#endif + + +/* Search N wide characters of S for C. */ +#if @GNULIB_WMEMCHR@ +# if !@HAVE_WMEMCHR@ +_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t); + wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wmemchr, + wchar_t *, (const wchar_t *, wchar_t, size_t), + const wchar_t *, (const wchar_t *, wchar_t, size_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +_GL_CXXALIASWARN1 (wmemchr, const wchar_t *, + (const wchar_t *s, wchar_t c, size_t n)); +# else +_GL_CXXALIASWARN (wmemchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wmemchr +# if HAVE_RAW_DECL_WMEMCHR +_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - " + "use gnulib module wmemchr for portability"); +# endif +#endif + + +/* Compare N wide characters of S1 and S2. */ +#if @GNULIB_WMEMCMP@ +# if !@HAVE_WMEMCMP@ +_GL_FUNCDECL_SYS (wmemcmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wmemcmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wmemcmp); +#elif defined GNULIB_POSIXCHECK +# undef wmemcmp +# if HAVE_RAW_DECL_WMEMCMP +_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - " + "use gnulib module wmemcmp for portability"); +# endif +#endif + + +/* Copy N wide characters of SRC to DEST. */ +#if @GNULIB_WMEMCPY@ +# if !@HAVE_WMEMCPY@ +_GL_FUNCDECL_SYS (wmemcpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmemcpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wmemcpy); +#elif defined GNULIB_POSIXCHECK +# undef wmemcpy +# if HAVE_RAW_DECL_WMEMCPY +_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - " + "use gnulib module wmemcpy for portability"); +# endif +#endif + + +/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for + overlapping memory areas. */ +#if @GNULIB_WMEMMOVE@ +# if !@HAVE_WMEMMOVE@ +_GL_FUNCDECL_SYS (wmemmove, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmemmove, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wmemmove); +#elif defined GNULIB_POSIXCHECK +# undef wmemmove +# if HAVE_RAW_DECL_WMEMMOVE +_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - " + "use gnulib module wmemmove for portability"); +# endif +#endif + + +/* Set N wide characters of S to C. */ +#if @GNULIB_WMEMSET@ +# if !@HAVE_WMEMSET@ +_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +# endif +_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); +_GL_CXXALIASWARN (wmemset); +#elif defined GNULIB_POSIXCHECK +# undef wmemset +# if HAVE_RAW_DECL_WMEMSET +_GL_WARN_ON_USE (wmemset, "wmemset is unportable - " + "use gnulib module wmemset for portability"); +# endif +#endif + + +/* Return the number of wide characters in S. */ +#if @GNULIB_WCSLEN@ +# if !@HAVE_WCSLEN@ +_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s)); +_GL_CXXALIASWARN (wcslen); +#elif defined GNULIB_POSIXCHECK +# undef wcslen +# if HAVE_RAW_DECL_WCSLEN +_GL_WARN_ON_USE (wcslen, "wcslen is unportable - " + "use gnulib module wcslen for portability"); +# endif +#endif + + +/* Return the number of wide characters in S, but at most MAXLEN. */ +#if @GNULIB_WCSNLEN@ +# if !@HAVE_WCSNLEN@ +_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)); +_GL_CXXALIASWARN (wcsnlen); +#elif defined GNULIB_POSIXCHECK +# undef wcsnlen +# if HAVE_RAW_DECL_WCSNLEN +_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - " + "use gnulib module wcsnlen for portability"); +# endif +#endif + + +/* Copy SRC to DEST. */ +#if @GNULIB_WCSCPY@ +# if !@HAVE_WCSCPY@ +_GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +# endif +_GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIASWARN (wcscpy); +#elif defined GNULIB_POSIXCHECK +# undef wcscpy +# if HAVE_RAW_DECL_WCSCPY +_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - " + "use gnulib module wcscpy for portability"); +# endif +#endif + + +/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */ +#if @GNULIB_WCPCPY@ +# if !@HAVE_WCPCPY@ +_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +# endif +_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIASWARN (wcpcpy); +#elif defined GNULIB_POSIXCHECK +# undef wcpcpy +# if HAVE_RAW_DECL_WCPCPY +_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - " + "use gnulib module wcpcpy for portability"); +# endif +#endif + + +/* Copy no more than N wide characters of SRC to DEST. */ +#if @GNULIB_WCSNCPY@ +# if !@HAVE_WCSNCPY@ +_GL_FUNCDECL_SYS (wcsncpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcsncpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wcsncpy); +#elif defined GNULIB_POSIXCHECK +# undef wcsncpy +# if HAVE_RAW_DECL_WCSNCPY +_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - " + "use gnulib module wcsncpy for portability"); +# endif +#endif + + +/* Copy no more than N characters of SRC to DEST, returning the address of + the last character written into DEST. */ +#if @GNULIB_WCPNCPY@ +# if !@HAVE_WCPNCPY@ +_GL_FUNCDECL_SYS (wcpncpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcpncpy, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wcpncpy); +#elif defined GNULIB_POSIXCHECK +# undef wcpncpy +# if HAVE_RAW_DECL_WCPNCPY +_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - " + "use gnulib module wcpncpy for portability"); +# endif +#endif + + +/* Append SRC onto DEST. */ +#if @GNULIB_WCSCAT@ +# if !@HAVE_WCSCAT@ +_GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); +# endif +_GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src)); +_GL_CXXALIASWARN (wcscat); +#elif defined GNULIB_POSIXCHECK +# undef wcscat +# if HAVE_RAW_DECL_WCSCAT +_GL_WARN_ON_USE (wcscat, "wcscat is unportable - " + "use gnulib module wcscat for portability"); +# endif +#endif + + +/* Append no more than N wide characters of SRC onto DEST. */ +#if @GNULIB_WCSNCAT@ +# if !@HAVE_WCSNCAT@ +_GL_FUNCDECL_SYS (wcsncat, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcsncat, wchar_t *, + (wchar_t *dest, const wchar_t *src, size_t n)); +_GL_CXXALIASWARN (wcsncat); +#elif defined GNULIB_POSIXCHECK +# undef wcsncat +# if HAVE_RAW_DECL_WCSNCAT +_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - " + "use gnulib module wcsncat for portability"); +# endif +#endif + + +/* Compare S1 and S2. */ +#if @GNULIB_WCSCMP@ +# if !@HAVE_WCSCMP@ +_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); +_GL_CXXALIASWARN (wcscmp); +#elif defined GNULIB_POSIXCHECK +# undef wcscmp +# if HAVE_RAW_DECL_WCSCMP +_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - " + "use gnulib module wcscmp for portability"); +# endif +#endif + + +/* Compare no more than N wide characters of S1 and S2. */ +#if @GNULIB_WCSNCMP@ +# if !@HAVE_WCSNCMP@ +_GL_FUNCDECL_SYS (wcsncmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsncmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wcsncmp); +#elif defined GNULIB_POSIXCHECK +# undef wcsncmp +# if HAVE_RAW_DECL_WCSNCMP +_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - " + "use gnulib module wcsncmp for portability"); +# endif +#endif + + +/* Compare S1 and S2, ignoring case. */ +#if @GNULIB_WCSCASECMP@ +# if !@HAVE_WCSCASECMP@ +_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)); +_GL_CXXALIASWARN (wcscasecmp); +#elif defined GNULIB_POSIXCHECK +# undef wcscasecmp +# if HAVE_RAW_DECL_WCSCASECMP +_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - " + "use gnulib module wcscasecmp for portability"); +# endif +#endif + + +/* Compare no more than N chars of S1 and S2, ignoring case. */ +#if @GNULIB_WCSNCASECMP@ +# if !@HAVE_WCSNCASECMP@ +_GL_FUNCDECL_SYS (wcsncasecmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsncasecmp, int, + (const wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wcsncasecmp); +#elif defined GNULIB_POSIXCHECK +# undef wcsncasecmp +# if HAVE_RAW_DECL_WCSNCASECMP +_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - " + "use gnulib module wcsncasecmp for portability"); +# endif +#endif + + +/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE + category of the current locale. */ +#if @GNULIB_WCSCOLL@ +# if !@HAVE_WCSCOLL@ +_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); +# endif +_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); +_GL_CXXALIASWARN (wcscoll); +#elif defined GNULIB_POSIXCHECK +# undef wcscoll +# if HAVE_RAW_DECL_WCSCOLL +_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - " + "use gnulib module wcscoll for portability"); +# endif +#endif + + +/* Transform S2 into array pointed to by S1 such that if wcscmp is applied + to two transformed strings the result is the as applying 'wcscoll' to the + original strings. */ +#if @GNULIB_WCSXFRM@ +# if !@HAVE_WCSXFRM@ +_GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); +# endif +_GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n)); +_GL_CXXALIASWARN (wcsxfrm); +#elif defined GNULIB_POSIXCHECK +# undef wcsxfrm +# if HAVE_RAW_DECL_WCSXFRM +_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - " + "use gnulib module wcsxfrm for portability"); +# endif +#endif + + +/* Duplicate S, returning an identical malloc'd string. */ +#if @GNULIB_WCSDUP@ +# if !@HAVE_WCSDUP@ +_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s)); +# endif +_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); +_GL_CXXALIASWARN (wcsdup); +#elif defined GNULIB_POSIXCHECK +# undef wcsdup +# if HAVE_RAW_DECL_WCSDUP +_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - " + "use gnulib module wcsdup for portability"); +# endif +#endif + + +/* Find the first occurrence of WC in WCS. */ +#if @GNULIB_WCSCHR@ +# if !@HAVE_WCSCHR@ +_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcschr (const wchar_t *, wchar_t); + wchar_t * std::wcschr (wchar_t *, wchar_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcschr, + wchar_t *, (const wchar_t *, wchar_t), + const wchar_t *, (const wchar_t *, wchar_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc)); +_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); +# else +_GL_CXXALIASWARN (wcschr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcschr +# if HAVE_RAW_DECL_WCSCHR +_GL_WARN_ON_USE (wcschr, "wcschr is unportable - " + "use gnulib module wcschr for portability"); +# endif +#endif + + +/* Find the last occurrence of WC in WCS. */ +#if @GNULIB_WCSRCHR@ +# if !@HAVE_WCSRCHR@ +_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcsrchr (const wchar_t *, wchar_t); + wchar_t * std::wcsrchr (wchar_t *, wchar_t); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcsrchr, + wchar_t *, (const wchar_t *, wchar_t), + const wchar_t *, (const wchar_t *, wchar_t)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc)); +_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); +# else +_GL_CXXALIASWARN (wcsrchr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsrchr +# if HAVE_RAW_DECL_WCSRCHR +_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - " + "use gnulib module wcsrchr for portability"); +# endif +#endif + + +/* Return the length of the initial segmet of WCS which consists entirely + of wide characters not in REJECT. */ +#if @GNULIB_WCSCSPN@ +# if !@HAVE_WCSCSPN@ +_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); +_GL_CXXALIASWARN (wcscspn); +#elif defined GNULIB_POSIXCHECK +# undef wcscspn +# if HAVE_RAW_DECL_WCSCSPN +_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - " + "use gnulib module wcscspn for portability"); +# endif +#endif + + +/* Return the length of the initial segmet of WCS which consists entirely + of wide characters in ACCEPT. */ +#if @GNULIB_WCSSPN@ +# if !@HAVE_WCSSPN@ +_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); +_GL_CXXALIASWARN (wcsspn); +#elif defined GNULIB_POSIXCHECK +# undef wcsspn +# if HAVE_RAW_DECL_WCSSPN +_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - " + "use gnulib module wcsspn for portability"); +# endif +#endif + + +/* Find the first occurrence in WCS of any character in ACCEPT. */ +#if @GNULIB_WCSPBRK@ +# if !@HAVE_WCSPBRK@ +_GL_FUNCDECL_SYS (wcspbrk, wchar_t *, + (const wchar_t *wcs, const wchar_t *accept) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *); + wchar_t * std::wcspbrk (wchar_t *, const wchar_t *); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcspbrk, + wchar_t *, (const wchar_t *, const wchar_t *), + const wchar_t *, (const wchar_t *, const wchar_t *)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcspbrk, wchar_t *, + (wchar_t *wcs, const wchar_t *accept)); +_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *, + (const wchar_t *wcs, const wchar_t *accept)); +# else +_GL_CXXALIASWARN (wcspbrk); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcspbrk +# if HAVE_RAW_DECL_WCSPBRK +_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - " + "use gnulib module wcspbrk for portability"); +# endif +#endif + + +/* Find the first occurrence of NEEDLE in HAYSTACK. */ +#if @GNULIB_WCSSTR@ +# if !@HAVE_WCSSTR@ +_GL_FUNCDECL_SYS (wcsstr, wchar_t *, + (const wchar_t *haystack, const wchar_t *needle) + _GL_ATTRIBUTE_PURE); +# endif + /* On some systems, this function is defined as an overloaded function: + extern "C++" { + const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *); + wchar_t * std::wcsstr (wchar_t *, const wchar_t *); + } */ +_GL_CXXALIAS_SYS_CAST2 (wcsstr, + wchar_t *, (const wchar_t *, const wchar_t *), + const wchar_t *, (const wchar_t *, const wchar_t *)); +# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ + && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) +_GL_CXXALIASWARN1 (wcsstr, wchar_t *, + (wchar_t *haystack, const wchar_t *needle)); +_GL_CXXALIASWARN1 (wcsstr, const wchar_t *, + (const wchar_t *haystack, const wchar_t *needle)); +# else +_GL_CXXALIASWARN (wcsstr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsstr +# if HAVE_RAW_DECL_WCSSTR +_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - " + "use gnulib module wcsstr for portability"); +# endif +#endif + + +/* Divide WCS into tokens separated by characters in DELIM. */ +#if @GNULIB_WCSTOK@ +# if !@HAVE_WCSTOK@ +_GL_FUNCDECL_SYS (wcstok, wchar_t *, + (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); +# endif +_GL_CXXALIAS_SYS (wcstok, wchar_t *, + (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr)); +_GL_CXXALIASWARN (wcstok); +#elif defined GNULIB_POSIXCHECK +# undef wcstok +# if HAVE_RAW_DECL_WCSTOK +_GL_WARN_ON_USE (wcstok, "wcstok is unportable - " + "use gnulib module wcstok for portability"); +# endif +#endif + + +/* Determine number of column positions required for first N wide + characters (or fewer if S ends before this) in S. */ +#if @GNULIB_WCSWIDTH@ +# if @REPLACE_WCSWIDTH@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcswidth +# define wcswidth rpl_wcswidth +# endif +_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n) + _GL_ATTRIBUTE_PURE); +_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n)); +# else +# if !@HAVE_WCSWIDTH@ +_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n) + _GL_ATTRIBUTE_PURE); +# endif +_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n)); +# endif +_GL_CXXALIASWARN (wcswidth); +#elif defined GNULIB_POSIXCHECK +# undef wcswidth +# if HAVE_RAW_DECL_WCSWIDTH +_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - " + "use gnulib module wcswidth for portability"); +# endif +#endif + + +/* Convert *TP to a date and time wide string. See + <http://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsftime.html>. */ +#if @GNULIB_WCSFTIME@ +# if @REPLACE_WCSFTIME@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# undef wcsftime +# define wcsftime rpl_wcsftime +# endif +_GL_FUNCDECL_RPL (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, + const wchar_t *__fmt, const struct tm *__tp) + _GL_ARG_NONNULL ((1, 3, 4))); +_GL_CXXALIAS_RPL (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, + const wchar_t *__fmt, const struct tm *__tp)); +# else +# if !@HAVE_WCSFTIME@ +_GL_FUNCDECL_SYS (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, + const wchar_t *__fmt, const struct tm *__tp) + _GL_ARG_NONNULL ((1, 3, 4))); +# endif +_GL_CXXALIAS_SYS (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize, + const wchar_t *__fmt, const struct tm *__tp)); +# endif +_GL_CXXALIASWARN (wcsftime); +#elif defined GNULIB_POSIXCHECK +# undef wcsftime +# if HAVE_RAW_DECL_WCSFTIME +_GL_WARN_ON_USE (wcsftime, "wcsftime is unportable - " + "use gnulib module wcsftime for portability"); +# endif +#endif + + +#endif /* _@GUARD_PREFIX@_WCHAR_H */ +#endif /* _@GUARD_PREFIX@_WCHAR_H */ +#endif diff --git a/devspec.en_US/project/recutils/lib/wcrtomb.c b/devspec.en_US/project/recutils/lib/wcrtomb.c new file mode 100755 index 0000000..9fc40cf --- /dev/null +++ b/devspec.en_US/project/recutils/lib/wcrtomb.c @@ -0,0 +1,53 @@ +/* Convert wide character to multibyte character. + Copyright (C) 2008-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <wchar.h> + +#include <errno.h> +#include <stdlib.h> + + +size_t +wcrtomb (char *s, wchar_t wc, mbstate_t *ps) +{ + /* This implementation of wcrtomb on top of wctomb() supports only + stateless encodings. ps must be in the initial state. */ + if (ps != NULL && !mbsinit (ps)) + { + errno = EINVAL; + return (size_t)(-1); + } + + if (s == NULL) + /* We know the NUL wide character corresponds to the NUL character. */ + return 1; + else + { + int ret = wctomb (s, wc); + + if (ret >= 0) + return ret; + else + { + errno = EILSEQ; + return (size_t)(-1); + } + } +} diff --git a/devspec.en_US/project/recutils/lib/wctob.c b/devspec.en_US/project/recutils/lib/wctob.c new file mode 100755 index 0000000..b4f7d92 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/wctob.c @@ -0,0 +1,38 @@ +/* Convert wide character to unibyte character. + Copyright (C) 2008, 2010-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +/* Specification. */ +#include <wchar.h> + +#include <stdio.h> +#include <stdlib.h> + +int +wctob (wint_t wc) +{ + char buf[64]; + + if (!(MB_CUR_MAX <= sizeof (buf))) + abort (); + /* Handle the case where WEOF is a value that does not fit in a wchar_t. */ + if (wc == (wchar_t)wc) + if (wctomb (buf, (wchar_t)wc) == 1) + return (unsigned char) buf[0]; + return EOF; +} diff --git a/devspec.en_US/project/recutils/lib/wctomb-impl.h b/devspec.en_US/project/recutils/lib/wctomb-impl.h new file mode 100755 index 0000000..810063b --- /dev/null +++ b/devspec.en_US/project/recutils/lib/wctomb-impl.h @@ -0,0 +1,34 @@ +/* Convert wide character to multibyte character. + Copyright (C) 2011-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2011. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +int +wctomb (char *s, wchar_t wc) +{ + if (s == NULL) + return 0; + else + { + mbstate_t state; + size_t result; + + memset (&state, 0, sizeof (mbstate_t)); + result = wcrtomb (s, wc, &state); + if (result == (size_t)-1) + return -1; + return result; + } +} diff --git a/devspec.en_US/project/recutils/lib/wctomb.c b/devspec.en_US/project/recutils/lib/wctomb.c new file mode 100755 index 0000000..c35dc7b --- /dev/null +++ b/devspec.en_US/project/recutils/lib/wctomb.c @@ -0,0 +1,25 @@ +/* Convert wide character to multibyte character. + Copyright (C) 2011-2019 Free Software Foundation, Inc. + Written by Bruno Haible <bruno@clisp.org>, 2011. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include <stdlib.h> + +#include <string.h> +#include <wchar.h> + +#include "wctomb-impl.h" diff --git a/devspec.en_US/project/recutils/lib/wctype-h.c b/devspec.en_US/project/recutils/lib/wctype-h.c new file mode 100755 index 0000000..bb5f847 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/wctype-h.c @@ -0,0 +1,4 @@ +/* Normally this would be wctype.c, but that name's already taken. */ +#include <config.h> +#define _GL_WCTYPE_INLINE _GL_EXTERN_INLINE +#include "wctype.h" diff --git a/devspec.en_US/project/recutils/lib/wctype.h b/devspec.en_US/project/recutils/lib/wctype.h new file mode 100755 index 0000000..e486d21 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/wctype.h @@ -0,0 +1,981 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A substitute for ISO C99 <wctype.h>, for platforms that lack it. + + Copyright (C) 2006-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible and Paul Eggert. */ + +/* + * ISO C 99 <wctype.h> for platforms that lack it. + * <http://www.opengroup.org/susv3xbd/wctype.h.html> + * + * iswctype, towctrans, towlower, towupper, wctrans, wctype, + * wctrans_t, and wctype_t are not yet implemented. + */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + + +#if (defined __MINGW32__ && defined __CTYPE_H_SOURCED__) + +/* Special invocation convention: + - With MinGW 3.22, when <ctype.h> includes <wctype.h>, only some part of + <wctype.h> is being processed, which doesn't include the idempotency + guard. */ + +#include_next <wctype.h> + +#else +/* Normal invocation convention. */ + +#ifndef _GL_WCTYPE_H + +#if 1 +/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. + Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +# include <stddef.h> +# include <stdio.h> +# include <time.h> +# include <wchar.h> +#endif + +/* Native Windows (mingw, MSVC) have declarations of towupper, towlower, and + isw* functions in <ctype.h>, <wchar.h> as well as in <wctype.h>. Include + <ctype.h>, <wchar.h> in advance to avoid rpl_ prefix being added to the + declarations. */ +#if defined _WIN32 && ! defined __CYGWIN__ +# include <ctype.h> +# include <wchar.h> +#endif + +/* Include the original <wctype.h> if it exists. + BeOS 5 has the functions but no <wctype.h>. */ +/* The include_next requires a split double-inclusion guard. */ +#if 1 +# include_next <wctype.h> +#endif + +#ifndef _GL_WCTYPE_H +#define _GL_WCTYPE_H + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_WCTYPE_INLINE +# define _GL_WCTYPE_INLINE _GL_INLINE +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* C++ compatible function declaration macros. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _GL_CXXDEFS_H +#define _GL_CXXDEFS_H + +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + +/* The three most frequent use cases of these macros are: + + * For providing a substitute for a function that is missing on some + platforms, but is declared and works fine on the platforms on which + it exists: + + #if @GNULIB_FOO@ + # if !@HAVE_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on all platforms, + but is broken/insufficient and needs to be replaced on some platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif + + * For providing a replacement for a function that exists on some platforms + but is broken/insufficient and needs to be replaced on some of them and + is additionally either missing or undeclared on some other platforms: + + #if @GNULIB_FOO@ + # if @REPLACE_FOO@ + # if !(defined __cplusplus && defined GNULIB_NAMESPACE) + # undef foo + # define foo rpl_foo + # endif + _GL_FUNCDECL_RPL (foo, ...); + _GL_CXXALIAS_RPL (foo, ...); + # else + # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ + _GL_FUNCDECL_SYS (foo, ...); + # endif + _GL_CXXALIAS_SYS (foo, ...); + # endif + _GL_CXXALIASWARN (foo); + #elif defined GNULIB_POSIXCHECK + ... + #endif +*/ + +/* _GL_EXTERN_C declaration; + performs the declaration with C linkage. */ +#if defined __cplusplus +# define _GL_EXTERN_C extern "C" +#else +# define _GL_EXTERN_C extern +#endif + +/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); + declares a replacement function, named rpl_func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ + _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) +#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype rpl_func parameters_and_attributes + +/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); + declares the system function, named func, with the given prototype, + consisting of return type, parameters, and attributes. + Example: + _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) + _GL_ARG_NONNULL ((1))); + */ +#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C rettype func parameters_and_attributes + +/* _GL_CXXALIAS_RPL (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to rpl_func, if GNULIB_NAMESPACE is defined. + Example: + _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); + + Wrapping rpl_func in an object with an inline conversion operator + avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ + _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::rpl_func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); + is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); + except that the C function rpl_func may have a slightly different + declaration. A cast is used to silence the "invalid conversion" error + that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::rpl_func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS (func, rettype, parameters); + declares a C++ alias called GNULIB_NAMESPACE::func + that redirects to the system provided function func, if GNULIB_NAMESPACE + is defined. + Example: + _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); + + Wrapping func in an object with an inline conversion operator + avoids a reference to func unless GNULIB_NAMESPACE::func is + actually used in the program. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return ::func; \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function func may have a slightly different declaration. + A cast is used to silence the "invalid conversion" error that would + otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>(::func); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); + is like _GL_CXXALIAS_SYS (func, rettype, parameters); + except that the C function is picked among a set of overloaded functions, + namely the one with rettype2 and parameters2. Two consecutive casts + are used to silence the "cannot find a match" and "invalid conversion" + errors that would otherwise occur. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE + /* The outer cast must be a reinterpret_cast. + The inner cast: When the function is defined as a set of overloaded + functions, it works as a static_cast<>, choosing the designated variant. + When the function is defined as a single variant, it works as a + reinterpret_cast<>. The parenthesized cast syntax works both ways. */ +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + namespace GNULIB_NAMESPACE \ + { \ + static const struct _gl_ ## func ## _wrapper \ + { \ + typedef rettype (*type) parameters; \ + \ + inline operator type () const \ + { \ + return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ + } \ + } func = {}; \ + } \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#else +# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN (func); + causes a warning to be emitted when ::func is used but not when + GNULIB_NAMESPACE::func is used. func must be defined without overloaded + variants. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN(func) \ + _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN_1(func,namespace) \ + _GL_CXXALIASWARN_2 (func, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_WARN_ON_USE (func, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN_2(func,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN_2(func,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN(func) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); + causes a warning to be emitted when the given overloaded variant of ::func + is used but not when GNULIB_NAMESPACE::func is used. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ + GNULIB_NAMESPACE) +# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ + _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) +/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, + we enable the warning only when not optimizing. */ +# if !__OPTIMIZE__ +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ + "The symbol ::" #func " refers to the system function. " \ + "Use " #namespace "::" #func " instead.") +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + extern __typeof__ (func) func +# else +# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +# endif +#else +# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ + _GL_EXTERN_C int _gl_cxxalias_dummy +#endif + +#endif /* _GL_CXXDEFS_H */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ +/* A C macro for emitting warnings if a function is used. + Copyright (C) 2010-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* _GL_WARN_ON_USE (function, "literal string") issues a declaration + for FUNCTION which will then trigger a compiler warning containing + the text of "literal string" anywhere that function is called, if + supported by the compiler. If the compiler does not support this + feature, the macro expands to an unused extern declaration. + + _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the + attribute used in _GL_WARN_ON_USE. If the compiler does not support + this feature, it expands to empty. + + These macros are useful for marking a function as a potential + portability trap, with the intent that "literal string" include + instructions on the replacement function that should be used + instead. + _GL_WARN_ON_USE is for functions with 'extern' linkage. + _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' + linkage. + + However, one of the reasons that a function is a portability trap is + if it has the wrong signature. Declaring FUNCTION with a different + signature in C is a compilation error, so this macro must use the + same type as any existing declaration so that programs that avoid + the problematic FUNCTION do not fail to compile merely because they + included a header that poisoned the function. But this implies that + _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already + have a declaration. Use of this macro implies that there must not + be any other macro hiding the declaration of FUNCTION; but + undefining FUNCTION first is part of the poisoning process anyway + (although for symbols that are provided only via a macro, the result + is a compilation error rather than a warning containing + "literal string"). Also note that in C++, it is only safe to use if + FUNCTION has no overloads. + + For an example, it is possible to poison 'getline' by: + - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], + [getline]) in configure.ac, which potentially defines + HAVE_RAW_DECL_GETLINE + - adding this code to a header that wraps the system <stdio.h>: + #undef getline + #if HAVE_RAW_DECL_GETLINE + _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" + "not universally present; use the gnulib module getline"); + #endif + + It is not possible to directly poison global variables. But it is + possible to write a wrapper accessor function, and poison that + (less common usage, like &environ, will cause a compilation error + rather than issue the nice warning, but the end result of informing + the developer about their portability problem is still achieved): + #if HAVE_RAW_DECL_ENVIRON + static char *** + rpl_environ (void) { return &environ; } + _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); + # undef environ + # define environ (*rpl_environ ()) + #endif + or better (avoiding contradictory use of 'static' and 'extern'): + #if HAVE_RAW_DECL_ENVIRON + static char *** + _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") + rpl_environ (void) { return &environ; } + # undef environ + # define environ (*rpl_environ ()) + #endif + */ +#ifndef _GL_WARN_ON_USE + +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +/* A compiler attribute is available in gcc versions 4.3.0 and later. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function __attribute__ ((__warning__ (message))) +# define _GL_WARN_ON_USE_ATTRIBUTE(message) \ + __attribute__ ((__warning__ (message))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE(function, message) \ +extern __typeof__ (function) function +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# else /* Unsupported. */ +# define _GL_WARN_ON_USE(function, message) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# define _GL_WARN_ON_USE_ATTRIBUTE(message) +# endif +#endif + +/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string") + is like _GL_WARN_ON_USE (function, "string"), except that the function is + declared with the given prototype, consisting of return type, parameters, + and attributes. + This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does + not work in this case. */ +#ifndef _GL_WARN_ON_USE_CXX +# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes \ + __attribute__ ((__warning__ (msg))) +# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING +/* Verify the existence of the function. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +extern rettype function parameters_and_attributes +# else /* Unsupported. */ +# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \ +_GL_WARN_EXTERN_C int _gl_warn_on_use +# endif +#endif + +/* _GL_WARN_EXTERN_C declaration; + performs the declaration with C linkage. */ +#ifndef _GL_WARN_EXTERN_C +# if defined __cplusplus +# define _GL_WARN_EXTERN_C extern "C" +# else +# define _GL_WARN_EXTERN_C extern +# endif +#endif + +/* Solaris 2.6 <wctype.h> includes <widec.h> which includes <euc.h> which + #defines a number of identifiers in the application namespace. Revert + these #defines. */ +#ifdef __sun +# undef multibyte +# undef eucw1 +# undef eucw2 +# undef eucw3 +# undef scrw1 +# undef scrw2 +# undef scrw3 +#endif + +/* Define wint_t and WEOF. (Also done in wchar.in.h.) */ +#if !1 && !defined wint_t +# define wint_t int +# ifndef WEOF +# define WEOF -1 +# endif +#else +/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or + <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that + wint_t must be "unchanged by default argument promotions". Override it. */ +# if 0 +# if !GNULIB_defined_wint_t +# if 0 +# include <crtdefs.h> +# else +# include <stddef.h> +# endif +typedef unsigned int rpl_wint_t; +# undef wint_t +# define wint_t rpl_wint_t +# define GNULIB_defined_wint_t 1 +# endif +# endif +# ifndef WEOF +# define WEOF ((wint_t) -1) +# endif +#endif + + +#if !GNULIB_defined_wctype_functions + +/* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions. + Linux libc5 has <wctype.h> and the functions but they are broken. + Assume all 11 functions (all isw* except iswblank) are implemented the + same way, or not at all. */ +# if ! 1 || 0 + +/* IRIX 5.3 has macros but no functions, its isw* macros refer to an + undefined variable _ctmp_ and to <ctype.h> macros like _P, and they + refer to system functions like _iswctype that are not in the + standard C library. Rather than try to get ancient buggy + implementations like this to work, just disable them. */ +# undef iswalnum +# undef iswalpha +# undef iswblank +# undef iswcntrl +# undef iswdigit +# undef iswgraph +# undef iswlower +# undef iswprint +# undef iswpunct +# undef iswspace +# undef iswupper +# undef iswxdigit +# undef towlower +# undef towupper + +/* Linux libc5 has <wctype.h> and the functions but they are broken. */ +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define iswalnum rpl_iswalnum +# define iswalpha rpl_iswalpha +# define iswblank rpl_iswblank +# define iswcntrl rpl_iswcntrl +# define iswdigit rpl_iswdigit +# define iswgraph rpl_iswgraph +# define iswlower rpl_iswlower +# define iswprint rpl_iswprint +# define iswpunct rpl_iswpunct +# define iswspace rpl_iswspace +# define iswupper rpl_iswupper +# define iswxdigit rpl_iswxdigit +# endif +# endif +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define towlower rpl_towlower +# define towupper rpl_towupper +# endif +# endif + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswalnum +# else +iswalnum +# endif + (wint_t wc) +{ + return ((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')); +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswalpha +# else +iswalpha +# endif + (wint_t wc) +{ + return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'; +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswblank +# else +iswblank +# endif + (wint_t wc) +{ + return wc == ' ' || wc == '\t'; +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswcntrl +# else +iswcntrl +# endif + (wint_t wc) +{ + return (wc & ~0x1f) == 0 || wc == 0x7f; +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswdigit +# else +iswdigit +# endif + (wint_t wc) +{ + return wc >= '0' && wc <= '9'; +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswgraph +# else +iswgraph +# endif + (wint_t wc) +{ + return wc >= '!' && wc <= '~'; +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswlower +# else +iswlower +# endif + (wint_t wc) +{ + return wc >= 'a' && wc <= 'z'; +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswprint +# else +iswprint +# endif + (wint_t wc) +{ + return wc >= ' ' && wc <= '~'; +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswpunct +# else +iswpunct +# endif + (wint_t wc) +{ + return (wc >= '!' && wc <= '~' + && !((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'))); +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswspace +# else +iswspace +# endif + (wint_t wc) +{ + return (wc == ' ' || wc == '\t' + || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r'); +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswupper +# else +iswupper +# endif + (wint_t wc) +{ + return wc >= 'A' && wc <= 'Z'; +} + +_GL_WCTYPE_INLINE int +# if 0 +rpl_iswxdigit +# else +iswxdigit +# endif + (wint_t wc) +{ + return ((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F')); +} + +_GL_WCTYPE_INLINE wint_t +# if 0 +rpl_towlower +# else +towlower +# endif + (wint_t wc) +{ + return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc); +} + +_GL_WCTYPE_INLINE wint_t +# if 0 +rpl_towupper +# else +towupper +# endif + (wint_t wc) +{ + return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc); +} + +# elif 0 && (! 1 || 0) +/* Only the iswblank function is missing. */ + +# if 0 +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define iswblank rpl_iswblank +# endif +_GL_FUNCDECL_RPL (iswblank, int, (wint_t wc)); +# else +_GL_FUNCDECL_SYS (iswblank, int, (wint_t wc)); +# endif + +# endif + +# if defined __MINGW32__ + +/* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t. + The functions towlower and towupper are implemented in the MSVCRT library + to take a wchar_t argument and return a wchar_t result. mingw declares + these functions to take a wint_t argument and return a wint_t result. + This means that: + 1. When the user passes an argument outside the range 0x0000..0xFFFF, the + function will look only at the lower 16 bits. This is allowed according + to POSIX. + 2. The return value is returned in the lower 16 bits of the result register. + The upper 16 bits are random: whatever happened to be in that part of the + result register. We need to fix this by adding a zero-extend from + wchar_t to wint_t after the call. */ + +_GL_WCTYPE_INLINE wint_t +rpl_towlower (wint_t wc) +{ + return (wint_t) (wchar_t) towlower (wc); +} +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define towlower rpl_towlower +# endif + +_GL_WCTYPE_INLINE wint_t +rpl_towupper (wint_t wc) +{ + return (wint_t) (wchar_t) towupper (wc); +} +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define towupper rpl_towupper +# endif + +# endif /* __MINGW32__ */ + +# define GNULIB_defined_wctype_functions 1 +#endif + +#if 0 +_GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswlower, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswprint, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswspace, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswupper, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc)); +#else +_GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswlower, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswprint, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswspace, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswupper, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc)); +#endif +_GL_CXXALIASWARN (iswalnum); +_GL_CXXALIASWARN (iswalpha); +_GL_CXXALIASWARN (iswcntrl); +_GL_CXXALIASWARN (iswdigit); +_GL_CXXALIASWARN (iswgraph); +_GL_CXXALIASWARN (iswlower); +_GL_CXXALIASWARN (iswprint); +_GL_CXXALIASWARN (iswpunct); +_GL_CXXALIASWARN (iswspace); +_GL_CXXALIASWARN (iswupper); +_GL_CXXALIASWARN (iswxdigit); + +#if 0 +# if 0 || 0 +_GL_CXXALIAS_RPL (iswblank, int, (wint_t wc)); +# else +_GL_CXXALIAS_SYS (iswblank, int, (wint_t wc)); +# endif +_GL_CXXALIASWARN (iswblank); +#endif + +#if !1 +# if !GNULIB_defined_wctype_t +typedef void * wctype_t; +# define GNULIB_defined_wctype_t 1 +# endif +#endif + +/* Get a descriptor for a wide character property. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name)); +# endif +_GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name)); +_GL_CXXALIASWARN (wctype); +#elif defined GNULIB_POSIXCHECK +# undef wctype +# if HAVE_RAW_DECL_WCTYPE +_GL_WARN_ON_USE (wctype, "wctype is unportable - " + "use gnulib module wctype for portability"); +# endif +#endif + +/* Test whether a wide character has a given property. + The argument WC must be either a wchar_t value or WEOF. + The argument DESC must have been returned by the wctype() function. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc)); +# endif +_GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc)); +_GL_CXXALIASWARN (iswctype); +#elif defined GNULIB_POSIXCHECK +# undef iswctype +# if HAVE_RAW_DECL_ISWCTYPE +_GL_WARN_ON_USE (iswctype, "iswctype is unportable - " + "use gnulib module iswctype for portability"); +# endif +#endif + +#if 0 || defined __MINGW32__ +_GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc)); +_GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc)); +#else +_GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc)); +_GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc)); +#endif +_GL_CXXALIASWARN (towlower); +_GL_CXXALIASWARN (towupper); + +#if !1 +# if !GNULIB_defined_wctrans_t +typedef void * wctrans_t; +# define GNULIB_defined_wctrans_t 1 +# endif +#endif + +/* Get a descriptor for a wide character case conversion. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name)); +# endif +_GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name)); +_GL_CXXALIASWARN (wctrans); +#elif defined GNULIB_POSIXCHECK +# undef wctrans +# if HAVE_RAW_DECL_WCTRANS +_GL_WARN_ON_USE (wctrans, "wctrans is unportable - " + "use gnulib module wctrans for portability"); +# endif +#endif + +/* Perform a given case conversion on a wide character. + The argument WC must be either a wchar_t value or WEOF. + The argument DESC must have been returned by the wctrans() function. */ +#if 0 +# if !1 +_GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); +# endif +_GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); +_GL_CXXALIASWARN (towctrans); +#elif defined GNULIB_POSIXCHECK +# undef towctrans +# if HAVE_RAW_DECL_TOWCTRANS +_GL_WARN_ON_USE (towctrans, "towctrans is unportable - " + "use gnulib module towctrans for portability"); +# endif +#endif + +_GL_INLINE_HEADER_END + +#endif /* _GL_WCTYPE_H */ +#endif /* _GL_WCTYPE_H */ +#endif diff --git a/devspec.en_US/project/recutils/lib/wctype.in.h b/devspec.en_US/project/recutils/lib/wctype.in.h new file mode 100755 index 0000000..0a7471f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/wctype.in.h @@ -0,0 +1,533 @@ +/* A substitute for ISO C99 <wctype.h>, for platforms that lack it. + + Copyright (C) 2006-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible and Paul Eggert. */ + +/* + * ISO C 99 <wctype.h> for platforms that lack it. + * <http://www.opengroup.org/susv3xbd/wctype.h.html> + * + * iswctype, towctrans, towlower, towupper, wctrans, wctype, + * wctrans_t, and wctype_t are not yet implemented. + */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ + +#if (defined __MINGW32__ && defined __CTYPE_H_SOURCED__) + +/* Special invocation convention: + - With MinGW 3.22, when <ctype.h> includes <wctype.h>, only some part of + <wctype.h> is being processed, which doesn't include the idempotency + guard. */ + +#@INCLUDE_NEXT@ @NEXT_WCTYPE_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _@GUARD_PREFIX@_WCTYPE_H + +#if @HAVE_WINT_T@ +/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. + Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +# include <stddef.h> +# include <stdio.h> +# include <time.h> +# include <wchar.h> +#endif + +/* Native Windows (mingw, MSVC) have declarations of towupper, towlower, and + isw* functions in <ctype.h>, <wchar.h> as well as in <wctype.h>. Include + <ctype.h>, <wchar.h> in advance to avoid rpl_ prefix being added to the + declarations. */ +#if defined _WIN32 && ! defined __CYGWIN__ +# include <ctype.h> +# include <wchar.h> +#endif + +/* Include the original <wctype.h> if it exists. + BeOS 5 has the functions but no <wctype.h>. */ +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_WCTYPE_H@ +# @INCLUDE_NEXT@ @NEXT_WCTYPE_H@ +#endif + +#ifndef _@GUARD_PREFIX@_WCTYPE_H +#define _@GUARD_PREFIX@_WCTYPE_H + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef _GL_WCTYPE_INLINE +# define _GL_WCTYPE_INLINE _GL_INLINE +#endif + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ + +/* The definition of _GL_WARN_ON_USE is copied here. */ + +/* Solaris 2.6 <wctype.h> includes <widec.h> which includes <euc.h> which + #defines a number of identifiers in the application namespace. Revert + these #defines. */ +#ifdef __sun +# undef multibyte +# undef eucw1 +# undef eucw2 +# undef eucw3 +# undef scrw1 +# undef scrw2 +# undef scrw3 +#endif + +/* Define wint_t and WEOF. (Also done in wchar.in.h.) */ +#if !@HAVE_WINT_T@ && !defined wint_t +# define wint_t int +# ifndef WEOF +# define WEOF -1 +# endif +#else +/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or + <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that + wint_t must be "unchanged by default argument promotions". Override it. */ +# if @GNULIB_OVERRIDES_WINT_T@ +# if !GNULIB_defined_wint_t +# if @HAVE_CRTDEFS_H@ +# include <crtdefs.h> +# else +# include <stddef.h> +# endif +typedef unsigned int rpl_wint_t; +# undef wint_t +# define wint_t rpl_wint_t +# define GNULIB_defined_wint_t 1 +# endif +# endif +# ifndef WEOF +# define WEOF ((wint_t) -1) +# endif +#endif + + +#if !GNULIB_defined_wctype_functions + +/* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions. + Linux libc5 has <wctype.h> and the functions but they are broken. + Assume all 11 functions (all isw* except iswblank) are implemented the + same way, or not at all. */ +# if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@ + +/* IRIX 5.3 has macros but no functions, its isw* macros refer to an + undefined variable _ctmp_ and to <ctype.h> macros like _P, and they + refer to system functions like _iswctype that are not in the + standard C library. Rather than try to get ancient buggy + implementations like this to work, just disable them. */ +# undef iswalnum +# undef iswalpha +# undef iswblank +# undef iswcntrl +# undef iswdigit +# undef iswgraph +# undef iswlower +# undef iswprint +# undef iswpunct +# undef iswspace +# undef iswupper +# undef iswxdigit +# undef towlower +# undef towupper + +/* Linux libc5 has <wctype.h> and the functions but they are broken. */ +# if @REPLACE_ISWCNTRL@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define iswalnum rpl_iswalnum +# define iswalpha rpl_iswalpha +# define iswblank rpl_iswblank +# define iswcntrl rpl_iswcntrl +# define iswdigit rpl_iswdigit +# define iswgraph rpl_iswgraph +# define iswlower rpl_iswlower +# define iswprint rpl_iswprint +# define iswpunct rpl_iswpunct +# define iswspace rpl_iswspace +# define iswupper rpl_iswupper +# define iswxdigit rpl_iswxdigit +# endif +# endif +# if @REPLACE_TOWLOWER@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define towlower rpl_towlower +# define towupper rpl_towupper +# endif +# endif + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswalnum +# else +iswalnum +# endif + (wint_t wc) +{ + return ((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')); +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswalpha +# else +iswalpha +# endif + (wint_t wc) +{ + return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'; +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswblank +# else +iswblank +# endif + (wint_t wc) +{ + return wc == ' ' || wc == '\t'; +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswcntrl +# else +iswcntrl +# endif + (wint_t wc) +{ + return (wc & ~0x1f) == 0 || wc == 0x7f; +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswdigit +# else +iswdigit +# endif + (wint_t wc) +{ + return wc >= '0' && wc <= '9'; +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswgraph +# else +iswgraph +# endif + (wint_t wc) +{ + return wc >= '!' && wc <= '~'; +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswlower +# else +iswlower +# endif + (wint_t wc) +{ + return wc >= 'a' && wc <= 'z'; +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswprint +# else +iswprint +# endif + (wint_t wc) +{ + return wc >= ' ' && wc <= '~'; +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswpunct +# else +iswpunct +# endif + (wint_t wc) +{ + return (wc >= '!' && wc <= '~' + && !((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'))); +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswspace +# else +iswspace +# endif + (wint_t wc) +{ + return (wc == ' ' || wc == '\t' + || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r'); +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswupper +# else +iswupper +# endif + (wint_t wc) +{ + return wc >= 'A' && wc <= 'Z'; +} + +_GL_WCTYPE_INLINE int +# if @REPLACE_ISWCNTRL@ +rpl_iswxdigit +# else +iswxdigit +# endif + (wint_t wc) +{ + return ((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F')); +} + +_GL_WCTYPE_INLINE wint_t +# if @REPLACE_TOWLOWER@ +rpl_towlower +# else +towlower +# endif + (wint_t wc) +{ + return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc); +} + +_GL_WCTYPE_INLINE wint_t +# if @REPLACE_TOWLOWER@ +rpl_towupper +# else +towupper +# endif + (wint_t wc) +{ + return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc); +} + +# elif @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@) +/* Only the iswblank function is missing. */ + +# if @REPLACE_ISWBLANK@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define iswblank rpl_iswblank +# endif +_GL_FUNCDECL_RPL (iswblank, int, (wint_t wc)); +# else +_GL_FUNCDECL_SYS (iswblank, int, (wint_t wc)); +# endif + +# endif + +# if defined __MINGW32__ + +/* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t. + The functions towlower and towupper are implemented in the MSVCRT library + to take a wchar_t argument and return a wchar_t result. mingw declares + these functions to take a wint_t argument and return a wint_t result. + This means that: + 1. When the user passes an argument outside the range 0x0000..0xFFFF, the + function will look only at the lower 16 bits. This is allowed according + to POSIX. + 2. The return value is returned in the lower 16 bits of the result register. + The upper 16 bits are random: whatever happened to be in that part of the + result register. We need to fix this by adding a zero-extend from + wchar_t to wint_t after the call. */ + +_GL_WCTYPE_INLINE wint_t +rpl_towlower (wint_t wc) +{ + return (wint_t) (wchar_t) towlower (wc); +} +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define towlower rpl_towlower +# endif + +_GL_WCTYPE_INLINE wint_t +rpl_towupper (wint_t wc) +{ + return (wint_t) (wchar_t) towupper (wc); +} +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define towupper rpl_towupper +# endif + +# endif /* __MINGW32__ */ + +# define GNULIB_defined_wctype_functions 1 +#endif + +#if @REPLACE_ISWCNTRL@ +_GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswlower, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswprint, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswspace, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswupper, int, (wint_t wc)); +_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc)); +#else +_GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswlower, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswprint, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswspace, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswupper, int, (wint_t wc)); +_GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc)); +#endif +_GL_CXXALIASWARN (iswalnum); +_GL_CXXALIASWARN (iswalpha); +_GL_CXXALIASWARN (iswcntrl); +_GL_CXXALIASWARN (iswdigit); +_GL_CXXALIASWARN (iswgraph); +_GL_CXXALIASWARN (iswlower); +_GL_CXXALIASWARN (iswprint); +_GL_CXXALIASWARN (iswpunct); +_GL_CXXALIASWARN (iswspace); +_GL_CXXALIASWARN (iswupper); +_GL_CXXALIASWARN (iswxdigit); + +#if @GNULIB_ISWBLANK@ +# if @REPLACE_ISWCNTRL@ || @REPLACE_ISWBLANK@ +_GL_CXXALIAS_RPL (iswblank, int, (wint_t wc)); +# else +_GL_CXXALIAS_SYS (iswblank, int, (wint_t wc)); +# endif +_GL_CXXALIASWARN (iswblank); +#endif + +#if !@HAVE_WCTYPE_T@ +# if !GNULIB_defined_wctype_t +typedef void * wctype_t; +# define GNULIB_defined_wctype_t 1 +# endif +#endif + +/* Get a descriptor for a wide character property. */ +#if @GNULIB_WCTYPE@ +# if !@HAVE_WCTYPE_T@ +_GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name)); +# endif +_GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name)); +_GL_CXXALIASWARN (wctype); +#elif defined GNULIB_POSIXCHECK +# undef wctype +# if HAVE_RAW_DECL_WCTYPE +_GL_WARN_ON_USE (wctype, "wctype is unportable - " + "use gnulib module wctype for portability"); +# endif +#endif + +/* Test whether a wide character has a given property. + The argument WC must be either a wchar_t value or WEOF. + The argument DESC must have been returned by the wctype() function. */ +#if @GNULIB_ISWCTYPE@ +# if !@HAVE_WCTYPE_T@ +_GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc)); +# endif +_GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc)); +_GL_CXXALIASWARN (iswctype); +#elif defined GNULIB_POSIXCHECK +# undef iswctype +# if HAVE_RAW_DECL_ISWCTYPE +_GL_WARN_ON_USE (iswctype, "iswctype is unportable - " + "use gnulib module iswctype for portability"); +# endif +#endif + +#if @REPLACE_TOWLOWER@ || defined __MINGW32__ +_GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc)); +_GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc)); +#else +_GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc)); +_GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc)); +#endif +_GL_CXXALIASWARN (towlower); +_GL_CXXALIASWARN (towupper); + +#if !@HAVE_WCTRANS_T@ +# if !GNULIB_defined_wctrans_t +typedef void * wctrans_t; +# define GNULIB_defined_wctrans_t 1 +# endif +#endif + +/* Get a descriptor for a wide character case conversion. */ +#if @GNULIB_WCTRANS@ +# if !@HAVE_WCTRANS_T@ +_GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name)); +# endif +_GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name)); +_GL_CXXALIASWARN (wctrans); +#elif defined GNULIB_POSIXCHECK +# undef wctrans +# if HAVE_RAW_DECL_WCTRANS +_GL_WARN_ON_USE (wctrans, "wctrans is unportable - " + "use gnulib module wctrans for portability"); +# endif +#endif + +/* Perform a given case conversion on a wide character. + The argument WC must be either a wchar_t value or WEOF. + The argument DESC must have been returned by the wctrans() function. */ +#if @GNULIB_TOWCTRANS@ +# if !@HAVE_WCTRANS_T@ +_GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); +# endif +_GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); +_GL_CXXALIASWARN (towctrans); +#elif defined GNULIB_POSIXCHECK +# undef towctrans +# if HAVE_RAW_DECL_TOWCTRANS +_GL_WARN_ON_USE (towctrans, "towctrans is unportable - " + "use gnulib module towctrans for portability"); +# endif +#endif + +_GL_INLINE_HEADER_END + +#endif /* _@GUARD_PREFIX@_WCTYPE_H */ +#endif /* _@GUARD_PREFIX@_WCTYPE_H */ +#endif diff --git a/devspec.en_US/project/recutils/lib/xalloc-die.c b/devspec.en_US/project/recutils/lib/xalloc-die.c new file mode 100755 index 0000000..295f8d8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/xalloc-die.c @@ -0,0 +1,41 @@ +/* Report a memory allocation failure and exit. + + Copyright (C) 1997-2000, 2002-2004, 2006, 2009-2019 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#include "xalloc.h" + +#include <stdlib.h> + +#include "error.h" +#include "exitfail.h" + +#include "gettext.h" +#define _(msgid) gettext (msgid) + +void +xalloc_die (void) +{ + error (exit_failure, 0, "%s", _("memory exhausted")); + + /* _Noreturn cannot be given to error, since it may return if + its first argument is 0. To help compilers understand the + xalloc_die does not return, call abort. Also, the abort is a + safety feature if exit_failure is 0 (which shouldn't happen). */ + abort (); +} diff --git a/devspec.en_US/project/recutils/lib/xalloc-oversized.h b/devspec.en_US/project/recutils/lib/xalloc-oversized.h new file mode 100755 index 0000000..e3068c8 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/xalloc-oversized.h @@ -0,0 +1,60 @@ +/* xalloc-oversized.h -- memory allocation size checking + + Copyright (C) 1990-2000, 2003-2004, 2006-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef XALLOC_OVERSIZED_H_ +#define XALLOC_OVERSIZED_H_ + +#include <stddef.h> +#include <stdint.h> + +/* True if N * S would overflow in a size_t calculation, + or would generate a value larger than PTRDIFF_MAX. + This expands to a constant expression if N and S are both constants. + By gnulib convention, SIZE_MAX represents overflow in size + calculations, so the conservative size_t-based dividend to use here + is SIZE_MAX - 1. */ +#define __xalloc_oversized(n, s) \ + ((size_t) (PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX - 1) / (s) < (n)) + +#if PTRDIFF_MAX < SIZE_MAX +typedef ptrdiff_t __xalloc_count_type; +#else +typedef size_t __xalloc_count_type; +#endif + +/* Return 1 if an array of N objects, each of size S, cannot exist + reliably due to size or ptrdiff_t arithmetic overflow. S must be + positive and N must be nonnegative. This is a macro, not a + function, so that it works correctly even when SIZE_MAX < N. */ + +#if 7 <= __GNUC__ +# define xalloc_oversized(n, s) \ + __builtin_mul_overflow_p (n, s, (__xalloc_count_type) 1) +#elif 5 <= __GNUC__ && !defined __ICC && !__STRICT_ANSI__ +# define xalloc_oversized(n, s) \ + (__builtin_constant_p (n) && __builtin_constant_p (s) \ + ? __xalloc_oversized (n, s) \ + : ({ __xalloc_count_type __xalloc_count; \ + __builtin_mul_overflow (n, s, &__xalloc_count); })) + +/* Other compilers use integer division; this may be slower but is + more portable. */ +#else +# define xalloc_oversized(n, s) __xalloc_oversized (n, s) +#endif + +#endif /* !XALLOC_OVERSIZED_H_ */ diff --git a/devspec.en_US/project/recutils/lib/xalloc.h b/devspec.en_US/project/recutils/lib/xalloc.h new file mode 100755 index 0000000..fc7e86b --- /dev/null +++ b/devspec.en_US/project/recutils/lib/xalloc.h @@ -0,0 +1,262 @@ +/* xalloc.h -- malloc with out-of-memory checking + + Copyright (C) 1990-2000, 2003-2004, 2006-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef XALLOC_H_ +#define XALLOC_H_ + +#include <stddef.h> +#include <stdint.h> + +#include "xalloc-oversized.h" + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef XALLOC_INLINE +# define XALLOC_INLINE _GL_INLINE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +#if ! defined __clang__ && \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) +# define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) +#else +# define _GL_ATTRIBUTE_ALLOC_SIZE(args) +#endif + +/* This function is always triggered when memory is exhausted. + It must be defined by the application, either explicitly + or by using gnulib's xalloc-die module. This is the + function to call when one wants the program to die because of a + memory allocation failure. */ +extern _Noreturn void xalloc_die (void); + +void *xmalloc (size_t s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)); +void *xzalloc (size_t s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)); +void *xcalloc (size_t n, size_t s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)); +void *xrealloc (void *p, size_t s) + _GL_ATTRIBUTE_ALLOC_SIZE ((2)); +void *x2realloc (void *p, size_t *pn); +void *xmemdup (void const *p, size_t s) + _GL_ATTRIBUTE_ALLOC_SIZE ((2)); +char *xstrdup (char const *str) + _GL_ATTRIBUTE_MALLOC; + +/* In the following macros, T must be an elementary or structure/union or + typedef'ed type, or a pointer to such a type. To apply one of the + following macros to a function pointer or array type, you need to typedef + it first and use the typedef name. */ + +/* Allocate an object of type T dynamically, with error checking. */ +/* extern t *XMALLOC (typename t); */ +#define XMALLOC(t) ((t *) xmalloc (sizeof (t))) + +/* Allocate memory for N elements of type T, with error checking. */ +/* extern t *XNMALLOC (size_t n, typename t); */ +#define XNMALLOC(n, t) \ + ((t *) (sizeof (t) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (t)))) + +/* Allocate an object of type T dynamically, with error checking, + and zero it. */ +/* extern t *XZALLOC (typename t); */ +#define XZALLOC(t) ((t *) xzalloc (sizeof (t))) + +/* Allocate memory for N elements of type T, with error checking, + and zero it. */ +/* extern t *XCALLOC (size_t n, typename t); */ +#define XCALLOC(n, t) \ + ((t *) (sizeof (t) == 1 ? xzalloc (n) : xcalloc (n, sizeof (t)))) + + +/* Allocate an array of N objects, each with S bytes of memory, + dynamically, with error checking. S must be nonzero. */ + +XALLOC_INLINE void *xnmalloc (size_t n, size_t s) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)); +XALLOC_INLINE void * +xnmalloc (size_t n, size_t s) +{ + if (xalloc_oversized (n, s)) + xalloc_die (); + return xmalloc (n * s); +} + +/* Change the size of an allocated block of memory P to an array of N + objects each of S bytes, with error checking. S must be nonzero. */ + +XALLOC_INLINE void *xnrealloc (void *p, size_t n, size_t s) + _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)); +XALLOC_INLINE void * +xnrealloc (void *p, size_t n, size_t s) +{ + if (xalloc_oversized (n, s)) + xalloc_die (); + return xrealloc (p, n * s); +} + +/* If P is null, allocate a block of at least *PN such objects; + otherwise, reallocate P so that it contains more than *PN objects + each of S bytes. S must be nonzero. Set *PN to the new number of + objects, and return the pointer to the new block. *PN is never set + to zero, and the returned pointer is never null. + + Repeated reallocations are guaranteed to make progress, either by + allocating an initial block with a nonzero size, or by allocating a + larger block. + + In the following implementation, nonzero sizes are increased by a + factor of approximately 1.5 so that repeated reallocations have + O(N) overall cost rather than O(N**2) cost, but the + specification for this function does not guarantee that rate. + + Here is an example of use: + + int *p = NULL; + size_t used = 0; + size_t allocated = 0; + + void + append_int (int value) + { + if (used == allocated) + p = x2nrealloc (p, &allocated, sizeof *p); + p[used++] = value; + } + + This causes x2nrealloc to allocate a block of some nonzero size the + first time it is called. + + To have finer-grained control over the initial size, set *PN to a + nonzero value before calling this function with P == NULL. For + example: + + int *p = NULL; + size_t used = 0; + size_t allocated = 0; + size_t allocated1 = 1000; + + void + append_int (int value) + { + if (used == allocated) + { + p = x2nrealloc (p, &allocated1, sizeof *p); + allocated = allocated1; + } + p[used++] = value; + } + + */ + +XALLOC_INLINE void * +x2nrealloc (void *p, size_t *pn, size_t s) +{ + size_t n = *pn; + + if (! p) + { + if (! n) + { + /* The approximate size to use for initial small allocation + requests, when the invoking code specifies an old size of + zero. This is the largest "small" request for the GNU C + library malloc. */ + enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; + + n = DEFAULT_MXFAST / s; + n += !n; + } + if (xalloc_oversized (n, s)) + xalloc_die (); + } + else + { + /* Set N = floor (1.5 * N) + 1 so that progress is made even if N == 0. + Check for overflow, so that N * S stays in both ptrdiff_t and + size_t range. The check may be slightly conservative, but an + exact check isn't worth the trouble. */ + if ((PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX) / 3 * 2 / s + <= n) + xalloc_die (); + n += n / 2 + 1; + } + + *pn = n; + return xrealloc (p, n * s); +} + +/* Return a pointer to a new buffer of N bytes. This is like xmalloc, + except it returns char *. */ + +XALLOC_INLINE char *xcharalloc (size_t n) + _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_ALLOC_SIZE ((1)); +XALLOC_INLINE char * +xcharalloc (size_t n) +{ + return XNMALLOC (n, char); +} + +#ifdef __cplusplus +} + +/* C++ does not allow conversions from void * to other pointer types + without a cast. Use templates to work around the problem when + possible. */ + +template <typename T> inline T * +xrealloc (T *p, size_t s) +{ + return (T *) xrealloc ((void *) p, s); +} + +template <typename T> inline T * +xnrealloc (T *p, size_t n, size_t s) +{ + return (T *) xnrealloc ((void *) p, n, s); +} + +template <typename T> inline T * +x2realloc (T *p, size_t *pn) +{ + return (T *) x2realloc ((void *) p, pn); +} + +template <typename T> inline T * +x2nrealloc (T *p, size_t *pn, size_t s) +{ + return (T *) x2nrealloc ((void *) p, pn, s); +} + +template <typename T> inline T * +xmemdup (T const *p, size_t s) +{ + return (T *) xmemdup ((void const *) p, s); +} + +#endif + +_GL_INLINE_HEADER_END + +#endif /* !XALLOC_H_ */ diff --git a/devspec.en_US/project/recutils/lib/xmalloc.c b/devspec.en_US/project/recutils/lib/xmalloc.c new file mode 100755 index 0000000..cbe9a4f --- /dev/null +++ b/devspec.en_US/project/recutils/lib/xmalloc.c @@ -0,0 +1,122 @@ +/* xmalloc.c -- malloc with out of memory checking + + Copyright (C) 1990-2000, 2002-2006, 2008-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <config.h> + +#define XALLOC_INLINE _GL_EXTERN_INLINE + +#include "xalloc.h" + +#include <stdlib.h> +#include <string.h> + +/* 1 if calloc is known to be compatible with GNU calloc. This + matters if we are not also using the calloc module, which defines + HAVE_CALLOC_GNU and supports the GNU API even on non-GNU platforms. */ +#if defined HAVE_CALLOC_GNU || (defined __GLIBC__ && !defined __UCLIBC__) +enum { HAVE_GNU_CALLOC = 1 }; +#else +enum { HAVE_GNU_CALLOC = 0 }; +#endif + +/* Allocate N bytes of memory dynamically, with error checking. */ + +void * +xmalloc (size_t n) +{ + void *p = malloc (n); + if (!p && n != 0) + xalloc_die (); + return p; +} + +/* Change the size of an allocated block of memory P to N bytes, + with error checking. */ + +void * +xrealloc (void *p, size_t n) +{ + if (!n && p) + { + /* The GNU and C99 realloc behaviors disagree here. Act like + GNU, even if the underlying realloc is C99. */ + free (p); + return NULL; + } + + p = realloc (p, n); + if (!p && n) + xalloc_die (); + return p; +} + +/* If P is null, allocate a block of at least *PN bytes; otherwise, + reallocate P so that it contains more than *PN bytes. *PN must be + nonzero unless P is null. Set *PN to the new block's size, and + return the pointer to the new block. *PN is never set to zero, and + the returned pointer is never null. */ + +void * +x2realloc (void *p, size_t *pn) +{ + return x2nrealloc (p, pn, 1); +} + +/* Allocate S bytes of zeroed memory dynamically, with error checking. + There's no need for xnzalloc (N, S), since it would be equivalent + to xcalloc (N, S). */ + +void * +xzalloc (size_t s) +{ + return memset (xmalloc (s), 0, s); +} + +/* Allocate zeroed memory for N elements of S bytes, with error + checking. S must be nonzero. */ + +void * +xcalloc (size_t n, size_t s) +{ + void *p; + /* Test for overflow, since objects with size greater than + PTRDIFF_MAX cause pointer subtraction to go awry. Omit size-zero + tests if HAVE_GNU_CALLOC, since GNU calloc never returns NULL if + successful. */ + if (xalloc_oversized (n, s) + || (! (p = calloc (n, s)) && (HAVE_GNU_CALLOC || n != 0))) + xalloc_die (); + return p; +} + +/* Clone an object P of size S, with error checking. There's no need + for xnmemdup (P, N, S), since xmemdup (P, N * S) works without any + need for an arithmetic overflow check. */ + +void * +xmemdup (void const *p, size_t s) +{ + return memcpy (xmalloc (s), p, s); +} + +/* Clone STRING. */ + +char * +xstrdup (char const *string) +{ + return xmemdup (string, strlen (string) + 1); +} diff --git a/devspec.en_US/project/recutils/lib/xsize.c b/devspec.en_US/project/recutils/lib/xsize.c new file mode 100755 index 0000000..4b4914c --- /dev/null +++ b/devspec.en_US/project/recutils/lib/xsize.c @@ -0,0 +1,3 @@ +#include <config.h> +#define XSIZE_INLINE _GL_EXTERN_INLINE +#include "xsize.h" diff --git a/devspec.en_US/project/recutils/lib/xsize.h b/devspec.en_US/project/recutils/lib/xsize.h new file mode 100755 index 0000000..ecfd478 --- /dev/null +++ b/devspec.en_US/project/recutils/lib/xsize.h @@ -0,0 +1,117 @@ +/* xsize.h -- Checked size_t computations. + + Copyright (C) 2003, 2008-2019 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _XSIZE_H +#define _XSIZE_H + +/* Get size_t. */ +#include <stddef.h> + +/* Get SIZE_MAX. */ +#include <limits.h> +#if HAVE_STDINT_H +# include <stdint.h> +#endif + +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef XSIZE_INLINE +# define XSIZE_INLINE _GL_INLINE +#endif + +/* The size of memory objects is often computed through expressions of + type size_t. Example: + void* p = malloc (header_size + n * element_size). + These computations can lead to overflow. When this happens, malloc() + returns a piece of memory that is way too small, and the program then + crashes while attempting to fill the memory. + To avoid this, the functions and macros in this file check for overflow. + The convention is that SIZE_MAX represents overflow. + malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc + implementation that uses mmap --, it's recommended to use size_overflow_p() + or size_in_bounds_p() before invoking malloc(). + The example thus becomes: + size_t size = xsum (header_size, xtimes (n, element_size)); + void *p = (size_in_bounds_p (size) ? malloc (size) : NULL); +*/ + +/* Convert an arbitrary value >= 0 to type size_t. */ +#define xcast_size_t(N) \ + ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) + +/* Sum of two sizes, with overflow check. */ +XSIZE_INLINE size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xsum (size_t size1, size_t size2) +{ + size_t sum = size1 + size2; + return (sum >= size1 ? sum : SIZE_MAX); +} + +/* Sum of three sizes, with overflow check. */ +XSIZE_INLINE size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xsum3 (size_t size1, size_t size2, size_t size3) +{ + return xsum (xsum (size1, size2), size3); +} + +/* Sum of four sizes, with overflow check. */ +XSIZE_INLINE size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xsum4 (size_t size1, size_t size2, size_t size3, size_t size4) +{ + return xsum (xsum (xsum (size1, size2), size3), size4); +} + +/* Maximum of two sizes, with overflow check. */ +XSIZE_INLINE size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xmax (size_t size1, size_t size2) +{ + /* No explicit check is needed here, because for any n: + max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */ + return (size1 >= size2 ? size1 : size2); +} + +/* Multiplication of a count with an element size, with overflow check. + The count must be >= 0 and the element size must be > 0. + This is a macro, not a function, so that it works correctly even + when N is of a wider type and N > SIZE_MAX. */ +#define xtimes(N, ELSIZE) \ + ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) + +/* Check for overflow. */ +#define size_overflow_p(SIZE) \ + ((SIZE) == SIZE_MAX) +/* Check against overflow. */ +#define size_in_bounds_p(SIZE) \ + ((SIZE) != SIZE_MAX) + +_GL_INLINE_HEADER_END + +#endif /* _XSIZE_H */ diff --git a/devspec.en_US/project/recutils/libcsv/.deps/libcsv.Plo b/devspec.en_US/project/recutils/libcsv/.deps/libcsv.Plo new file mode 100755 index 0000000..e5fb610 --- /dev/null +++ b/devspec.en_US/project/recutils/libcsv/.deps/libcsv.Plo @@ -0,0 +1,113 @@ +libcsv.lo: libcsv.c /usr/include/stdc-predef.h ../src/config.h csv.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +csv.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: diff --git a/devspec.en_US/project/recutils/libcsv/Makefile b/devspec.en_US/project/recutils/libcsv/Makefile new file mode 100755 index 0000000..e2c34a7 --- /dev/null +++ b/devspec.en_US/project/recutils/libcsv/Makefile @@ -0,0 +1,1862 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# libcsv/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# libcsv/ Makefile.am + +# Copyright (C) 2010-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/recutils +pkgincludedir = $(includedir)/recutils +pkglibdir = $(libdir)/recutils +pkglibexecdir = $(libexecdir)/recutils +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +subdir = libcsv +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libcsv_la_LIBADD = +am_libcsv_la_OBJECTS = libcsv.lo +libcsv_la_OBJECTS = $(am_libcsv_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +am__v_lt_1 = +AM_V_P = $(am__v_P_$(V)) +am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I. -I$(top_builddir)/src +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libcsv_la_SOURCES) +DIST_SOURCES = $(libcsv_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/depcomp README +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing aclocal-1.15 +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = $${TAR-tar} +AM_DEFAULT_VERBOSITY = 1 +APPLE_UNIVERSAL_BUILD = 0 +AR = ar +ARFLAGS = cr +ASM_SYMBOL_PREFIX = "" +AUTOCONF = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoconf +AUTOHEADER = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoheader +AUTOMAKE = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing automake-1.15 +AWK = gawk +BASH_HEADERS = /usr/include/bash +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CA68 = +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CHECK_CFLAGS = +CHECK_LIBS = +CONFIG_INCLUDE = src/config.h +CPP = gcc -E +CPPFLAGS = +CURLLIBS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = false +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FGREP = /bin/grep -F +FLOAT_H = +FLOOR_LIBM = -lm +GETOPT_CDEFS_H = +GETOPT_H = +GETTEXT_MACRO_VERSION = 0.19 +GLIBC21 = yes +GLIB_CFLAGS = +GLIB_LIBS = +GMSGFMT = /usr/bin/msgfmt +GMSGFMT_015 = /usr/bin/msgfmt +GNULIB_ACOSF = 0 +GNULIB_ACOSL = 0 +GNULIB_ASINF = 0 +GNULIB_ASINL = 0 +GNULIB_ATAN2F = 0 +GNULIB_ATANF = 0 +GNULIB_ATANL = 0 +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CANONICALIZE_FILE_NAME = 1 +GNULIB_CBRT = 0 +GNULIB_CBRTF = 0 +GNULIB_CBRTL = 0 +GNULIB_CEIL = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHDIR = 1 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 1 +GNULIB_COPYSIGN = 0 +GNULIB_COPYSIGNF = 0 +GNULIB_COPYSIGNL = 0 +GNULIB_COSF = 0 +GNULIB_COSHF = 0 +GNULIB_COSL = 0 +GNULIB_CTIME = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP = 0 +GNULIB_DUP2 = 1 +GNULIB_DUP3 = 0 +GNULIB_DUPLOCALE = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 1 +GNULIB_EXP2 = 0 +GNULIB_EXP2F = 0 +GNULIB_EXP2L = 0 +GNULIB_EXPF = 0 +GNULIB_EXPL = 0 +GNULIB_EXPLICIT_BZERO = 0 +GNULIB_EXPM1 = 0 +GNULIB_EXPM1F = 0 +GNULIB_EXPM1L = 0 +GNULIB_FABSF = 0 +GNULIB_FABSL = 0 +GNULIB_FACCESSAT = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCHMODAT = 0 +GNULIB_FCHOWNAT = 0 +GNULIB_FCLOSE = 0 +GNULIB_FCNTL = 1 +GNULIB_FDATASYNC = 0 +GNULIB_FDOPEN = 0 +GNULIB_FFLUSH = 0 +GNULIB_FFS = 0 +GNULIB_FFSL = 0 +GNULIB_FFSLL = 0 +GNULIB_FGETC = 1 +GNULIB_FGETS = 1 +GNULIB_FLOCK = 1 +GNULIB_FLOOR = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FMA = 0 +GNULIB_FMAF = 0 +GNULIB_FMAL = 0 +GNULIB_FMOD = 0 +GNULIB_FMODF = 0 +GNULIB_FMODL = 0 +GNULIB_FOPEN = 0 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 1 +GNULIB_FPURGE = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREAD = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPF = 0 +GNULIB_FREXPL = 1 +GNULIB_FSCANF = 1 +GNULIB_FSEEK = 1 +GNULIB_FSEEKO = 1 +GNULIB_FSTAT = 1 +GNULIB_FSTATAT = 0 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 1 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FUTIMENS = 0 +GNULIB_FWRITE = 1 +GNULIB_GETC = 1 +GNULIB_GETCHAR = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 1 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETGROUPS = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 1 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETPASS = 1 +GNULIB_GETSUBOPT = 0 +GNULIB_GETTIMEOFDAY = 1 +GNULIB_GETUSERSHELL = 0 +GNULIB_GL_UNISTD_H_GETOPT = +GNULIB_GRANTPT = 0 +GNULIB_GROUP_MEMBER = 1 +GNULIB_HYPOT = 0 +GNULIB_HYPOTF = 0 +GNULIB_HYPOTL = 0 +GNULIB_ILOGB = 0 +GNULIB_ILOGBF = 0 +GNULIB_ILOGBL = 0 +GNULIB_IMAXABS = 0 +GNULIB_IMAXDIV = 0 +GNULIB_ISATTY = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_ISWBLANK = 0 +GNULIB_ISWCTYPE = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPF = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LINKAT = 0 +GNULIB_LOCALECONV = 1 +GNULIB_LOCALENAME = 0 +GNULIB_LOCALTIME = 0 +GNULIB_LOG = 0 +GNULIB_LOG10 = 0 +GNULIB_LOG10F = 0 +GNULIB_LOG10L = 0 +GNULIB_LOG1P = 0 +GNULIB_LOG1PF = 0 +GNULIB_LOG1PL = 0 +GNULIB_LOG2 = 0 +GNULIB_LOG2F = 0 +GNULIB_LOG2L = 0 +GNULIB_LOGB = 0 +GNULIB_LOGBF = 0 +GNULIB_LOGBL = 0 +GNULIB_LOGF = 0 +GNULIB_LOGL = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MBRLEN = 1 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MBTOWC = 1 +GNULIB_MEMCHR = 1 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDIRAT = 0 +GNULIB_MKDTEMP = 0 +GNULIB_MKFIFO = 0 +GNULIB_MKFIFOAT = 0 +GNULIB_MKNOD = 0 +GNULIB_MKNODAT = 0 +GNULIB_MKOSTEMP = 1 +GNULIB_MKOSTEMPS = 0 +GNULIB_MKSTEMP = 1 +GNULIB_MKSTEMPS = 0 +GNULIB_MKTIME = 1 +GNULIB_MODF = 0 +GNULIB_MODFF = 0 +GNULIB_MODFL = 0 +GNULIB_NANOSLEEP = 0 +GNULIB_NL_LANGINFO = 1 +GNULIB_NONBLOCKING = 0 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_OPENAT = 0 +GNULIB_OVERRIDES_STRUCT_STAT = 0 +GNULIB_OVERRIDES_WINT_T = 0 +GNULIB_PCLOSE = 0 +GNULIB_PERROR = 0 +GNULIB_PIPE = 0 +GNULIB_PIPE2 = 0 +GNULIB_POPEN = 0 +GNULIB_POSIX_OPENPT = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_POWF = 0 +GNULIB_PREAD = 0 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 1 +GNULIB_PTHREAD_SIGMASK = 0 +GNULIB_PTSNAME = 0 +GNULIB_PTSNAME_R = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_PWRITE = 0 +GNULIB_QSORT_R = 0 +GNULIB_RAISE = 1 +GNULIB_RANDOM = 0 +GNULIB_RANDOM_R = 1 +GNULIB_RAWMEMCHR = 1 +GNULIB_READ = 0 +GNULIB_READLINK = 1 +GNULIB_READLINKAT = 0 +GNULIB_REALLOCARRAY = 0 +GNULIB_REALLOC_POSIX = 1 +GNULIB_REALPATH = 1 +GNULIB_REMAINDER = 0 +GNULIB_REMAINDERF = 0 +GNULIB_REMAINDERL = 0 +GNULIB_REMOVE = 0 +GNULIB_RENAME = 1 +GNULIB_RENAMEAT = 0 +GNULIB_RINT = 0 +GNULIB_RINTF = 0 +GNULIB_RINTL = 0 +GNULIB_RMDIR = 1 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SCANF = 1 +GNULIB_SECURE_GETENV = 1 +GNULIB_SETENV = 1 +GNULIB_SETHOSTNAME = 0 +GNULIB_SETLOCALE = 0 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SINF = 0 +GNULIB_SINHF = 0 +GNULIB_SINL = 0 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 0 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_SQRTF = 0 +GNULIB_SQRTL = 0 +GNULIB_STAT = 1 +GNULIB_STDIO_H_NONBLOCKING = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 1 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 1 +GNULIB_STRERROR = 1 +GNULIB_STRERROR_R = 0 +GNULIB_STRFTIME = 0 +GNULIB_STRNCAT = 0 +GNULIB_STRNDUP = 0 +GNULIB_STRNLEN = 0 +GNULIB_STRPBRK = 0 +GNULIB_STRPTIME = 0 +GNULIB_STRSEP = 1 +GNULIB_STRSIGNAL = 0 +GNULIB_STRSTR = 0 +GNULIB_STRTOD = 0 +GNULIB_STRTOIMAX = 0 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRTOUMAX = 0 +GNULIB_STRVERSCMP = 1 +GNULIB_SYMLINK = 0 +GNULIB_SYMLINKAT = 0 +GNULIB_SYSTEM_POSIX = 0 +GNULIB_TANF = 0 +GNULIB_TANHF = 0 +GNULIB_TANL = 0 +GNULIB_TIMEGM = 1 +GNULIB_TIME_R = 1 +GNULIB_TIME_RZ = 1 +GNULIB_TMPFILE = 0 +GNULIB_TOWCTRANS = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCATE = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_TTYNAME_R = 0 +GNULIB_TZSET = 1 +GNULIB_UNISTD_H_NONBLOCKING = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNLINK = 0 +GNULIB_UNLINKAT = 0 +GNULIB_UNLOCKPT = 0 +GNULIB_UNSETENV = 1 +GNULIB_USLEEP = 0 +GNULIB_UTIMENSAT = 0 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 1 +GNULIB_VFSCANF = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSCANF = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WAITPID = 1 +GNULIB_WCPCPY = 0 +GNULIB_WCPNCPY = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSCASECMP = 0 +GNULIB_WCSCAT = 0 +GNULIB_WCSCHR = 0 +GNULIB_WCSCMP = 0 +GNULIB_WCSCOLL = 0 +GNULIB_WCSCPY = 0 +GNULIB_WCSCSPN = 0 +GNULIB_WCSDUP = 0 +GNULIB_WCSFTIME = 0 +GNULIB_WCSLEN = 0 +GNULIB_WCSNCASECMP = 0 +GNULIB_WCSNCAT = 0 +GNULIB_WCSNCMP = 0 +GNULIB_WCSNCPY = 0 +GNULIB_WCSNLEN = 0 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSPBRK = 0 +GNULIB_WCSRCHR = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCSSPN = 0 +GNULIB_WCSSTR = 0 +GNULIB_WCSTOK = 0 +GNULIB_WCSWIDTH = 0 +GNULIB_WCSXFRM = 0 +GNULIB_WCTOB = 1 +GNULIB_WCTOMB = 1 +GNULIB_WCTRANS = 0 +GNULIB_WCTYPE = 0 +GNULIB_WCWIDTH = 0 +GNULIB_WMEMCHR = 0 +GNULIB_WMEMCMP = 0 +GNULIB_WMEMCPY = 0 +GNULIB_WMEMMOVE = 0 +GNULIB_WMEMSET = 0 +GNULIB_WRITE = 0 +GNULIB__EXIT = 0 +GREP = /bin/grep +HAVE_ACOSF = 1 +HAVE_ACOSL = 1 +HAVE_ASINF = 1 +HAVE_ASINL = 1 +HAVE_ATAN2F = 1 +HAVE_ATANF = 1 +HAVE_ATANL = 1 +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_C99_STDINT_H = 1 +HAVE_CANONICALIZE_FILE_NAME = 1 +HAVE_CBRT = 1 +HAVE_CBRTF = 1 +HAVE_CBRTL = 1 +HAVE_CHOWN = 1 +HAVE_COPYSIGN = 1 +HAVE_COPYSIGNL = 1 +HAVE_COSF = 1 +HAVE_COSHF = 1 +HAVE_COSL = 1 +HAVE_CRTDEFS_H = 0 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_CBRTF = 1 +HAVE_DECL_CBRTL = 1 +HAVE_DECL_CEILF = 1 +HAVE_DECL_CEILL = 1 +HAVE_DECL_COPYSIGNF = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXP2 = 1 +HAVE_DECL_EXP2F = 1 +HAVE_DECL_EXP2L = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_EXPM1L = 1 +HAVE_DECL_FCHDIR = 1 +HAVE_DECL_FDATASYNC = 1 +HAVE_DECL_FLOORF = 1 +HAVE_DECL_FLOORL = 1 +HAVE_DECL_FPURGE = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_FSEEKO = 1 +HAVE_DECL_FTELLO = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETDOMAINNAME = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_GETPAGESIZE = 1 +HAVE_DECL_GETUSERSHELL = 1 +HAVE_DECL_IMAXABS = 1 +HAVE_DECL_IMAXDIV = 1 +HAVE_DECL_INITSTATE = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOCALTIME_R = 1 +HAVE_DECL_LOG10L = 1 +HAVE_DECL_LOG2 = 1 +HAVE_DECL_LOG2F = 1 +HAVE_DECL_LOG2L = 1 +HAVE_DECL_LOGB = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_REMAINDER = 1 +HAVE_DECL_REMAINDERL = 1 +HAVE_DECL_RINTF = 1 +HAVE_DECL_ROUND = 1 +HAVE_DECL_ROUNDF = 1 +HAVE_DECL_ROUNDL = 1 +HAVE_DECL_SETENV = 1 +HAVE_DECL_SETHOSTNAME = 1 +HAVE_DECL_SETSTATE = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR_R = 1 +HAVE_DECL_STRNCASECMP = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOIMAX = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_STRTOUMAX = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCATE = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_TRUNCL = 1 +HAVE_DECL_TTYNAME_R = 1 +HAVE_DECL_UNSETENV = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_DUP3 = 1 +HAVE_DUPLOCALE = 1 +HAVE_EUIDACCESS = 1 +HAVE_EXPF = 1 +HAVE_EXPL = 1 +HAVE_EXPLICIT_BZERO = 1 +HAVE_EXPM1 = 1 +HAVE_EXPM1F = 1 +HAVE_FABSF = 1 +HAVE_FABSL = 1 +HAVE_FACCESSAT = 1 +HAVE_FCHDIR = 1 +HAVE_FCHMODAT = 1 +HAVE_FCHOWNAT = 1 +HAVE_FCNTL = 1 +HAVE_FDATASYNC = 1 +HAVE_FEATURES_H = 1 +HAVE_FFS = 1 +HAVE_FFSL = 1 +HAVE_FFSLL = 1 +HAVE_FLOCK = 1 +HAVE_FMA = 1 +HAVE_FMAF = 1 +HAVE_FMAL = 1 +HAVE_FMODF = 1 +HAVE_FMODL = 1 +HAVE_FREELOCALE = 1 +HAVE_FREXPF = 1 +HAVE_FSEEKO = 1 +HAVE_FSTATAT = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_FUTIMENS = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETGROUPS = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETLOGIN = 1 +HAVE_GETOPT_H = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETPASS = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETTIMEOFDAY = 1 +HAVE_GRANTPT = 1 +HAVE_GROUP_MEMBER = 1 +HAVE_HYPOTF = 1 +HAVE_HYPOTL = 1 +HAVE_ILOGB = 1 +HAVE_ILOGBF = 1 +HAVE_ILOGBL = 1 +HAVE_IMAXDIV_T = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWBLANK = 1 +HAVE_ISWCNTRL = 1 +HAVE_LANGINFO_ALTMON = 0 +HAVE_LANGINFO_CODESET = 1 +HAVE_LANGINFO_ERA = 1 +HAVE_LANGINFO_H = 1 +HAVE_LANGINFO_T_FMT_AMPM = 1 +HAVE_LANGINFO_YESEXPR = 1 +HAVE_LCHMOD = 1 +HAVE_LCHOWN = 1 +HAVE_LDEXPF = 1 +HAVE_LIBGCRYPT = no +HAVE_LINK = 1 +HAVE_LINKAT = 1 +HAVE_LOG10F = 1 +HAVE_LOG10L = 1 +HAVE_LOG1P = 1 +HAVE_LOG1PF = 1 +HAVE_LOG1PL = 1 +HAVE_LOGBF = 1 +HAVE_LOGBL = 1 +HAVE_LOGF = 1 +HAVE_LOGL = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MAX_ALIGN_T = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSLEN = 0 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMCHR = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDIRAT = 1 +HAVE_MKDTEMP = 1 +HAVE_MKFIFO = 1 +HAVE_MKFIFOAT = 1 +HAVE_MKNOD = 1 +HAVE_MKNODAT = 1 +HAVE_MKOSTEMP = 1 +HAVE_MKOSTEMPS = 1 +HAVE_MKSTEMP = 1 +HAVE_MKSTEMPS = 1 +HAVE_MODFF = 1 +HAVE_MODFL = 1 +HAVE_MSVC_INVALID_PARAMETER_HANDLER = 0 +HAVE_NANOSLEEP = 1 +HAVE_NEWLOCALE = 1 +HAVE_NL_LANGINFO = 1 +HAVE_OPENAT = 1 +HAVE_OS_H = 0 +HAVE_PCLOSE = 1 +HAVE_PIPE = 1 +HAVE_PIPE2 = 1 +HAVE_POPEN = 1 +HAVE_POSIX_OPENPT = 1 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_POSIX_SPAWNATTR_T = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = 1 +HAVE_POWF = 1 +HAVE_PREAD = 1 +HAVE_PTHREAD_SIGMASK = 1 +HAVE_PTSNAME = 1 +HAVE_PTSNAME_R = 1 +HAVE_PWRITE = 1 +HAVE_QSORT_R = 1 +HAVE_RAISE = 1 +HAVE_RANDOM = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_READLINKAT = 1 +HAVE_REALLOCARRAY = 1 +HAVE_REALPATH = 1 +HAVE_REMAINDER = 1 +HAVE_REMAINDERF = 1 +HAVE_RENAMEAT = 1 +HAVE_RINT = 1 +HAVE_RINTL = 1 +HAVE_RPMATCH = 1 +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0 +HAVE_SCHED_H = +HAVE_SECURE_GETENV = 1 +HAVE_SETENV = 1 +HAVE_SETHOSTNAME = 1 +HAVE_SIGACTION = 1 +HAVE_SIGHANDLER_T = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SINF = 1 +HAVE_SINHF = 1 +HAVE_SINL = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_SQRTF = 1 +HAVE_SQRTL = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASECMP = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRINGS_H = 1 +HAVE_STRPBRK = 1 +HAVE_STRPTIME = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYMLINK = 1 +HAVE_SYMLINKAT = 1 +HAVE_SYS_BITYPES_H = 0 +HAVE_SYS_CDEFS_H = +HAVE_SYS_FILE_H = 1 +HAVE_SYS_INTTYPES_H = 0 +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TANF = 1 +HAVE_TANHF = 1 +HAVE_TANL = 1 +HAVE_TIMEGM = 1 +HAVE_TIMEZONE_T = 0 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_TZSET = 1 +HAVE_UNISTD_H = 1 +HAVE_UNLINKAT = 1 +HAVE_UNLOCKPT = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_USLEEP = 1 +HAVE_UTIMENSAT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCHAR_T = 1 +HAVE_WCPCPY = 1 +HAVE_WCPNCPY = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSCASECMP = 1 +HAVE_WCSCAT = 1 +HAVE_WCSCHR = 1 +HAVE_WCSCMP = 1 +HAVE_WCSCOLL = 1 +HAVE_WCSCPY = 1 +HAVE_WCSCSPN = 1 +HAVE_WCSDUP = 1 +HAVE_WCSFTIME = 1 +HAVE_WCSLEN = 1 +HAVE_WCSNCASECMP = 1 +HAVE_WCSNCAT = 1 +HAVE_WCSNCMP = 1 +HAVE_WCSNCPY = 1 +HAVE_WCSNLEN = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSPBRK = 1 +HAVE_WCSRCHR = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCSSPN = 1 +HAVE_WCSSTR = 1 +HAVE_WCSTOK = 1 +HAVE_WCSWIDTH = 1 +HAVE_WCSXFRM = 1 +HAVE_WCTRANS_T = 1 +HAVE_WCTYPE_H = 1 +HAVE_WCTYPE_T = 1 +HAVE_WINSOCK2_H = 0 +HAVE_WINT_T = 1 +HAVE_WMEMCHR = 1 +HAVE_WMEMCMP = 1 +HAVE_WMEMCPY = 1 +HAVE_WMEMMOVE = 1 +HAVE_WMEMSET = 1 +HAVE_XLOCALE_H = 1 +HAVE__BOOL = 1 +HAVE__EXIT = 1 +HELP2MAN = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing help2man +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +INT32_MAX_LT_INTMAX_MAX = 1 +INT64_MAX_EQ_LONG_MAX = 0 +INTLLIBS = +INTL_MACOSX_LIBS = +LD = /usr/bin/ld +LDFLAGS = +LEX = flex +LEXLIB = -lfl +LEX_OUTPUT_ROOT = lex.yy +LIBGCRYPT = +LIBGCRYPT_PREFIX = +LIBICONV = -liconv +LIBINTL = +LIBMULTITHREAD = -pthread -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBREADLINE = +LIBS = +LIBTHREAD = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIB_ACL = +LIB_CLOCK_GETTIME = +LIB_EACCESS = +LIB_POSIX_SPAWN = +LIB_SELINUX = +LIMITS_H = limits.h +LIPO = +LN_S = ln -s +LOCALCHARSET_TESTS_ENVIRONMENT = +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTALLOCA = +LTLIBGCRYPT = +LTLIBICONV = -liconv +LTLIBINTL = +LTLIBMULTITHREAD = -pthread +LTLIBOBJS = +LTLIBPTH = +LTLIBREADLINE = +LTLIBTHREAD = +LT_SYS_LIBRARY_PATH = +MAKEINFO = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing makeinfo +MANIFEST_TOOL = : +MDBLIBS = +MDB_DATETIME = +MKDIR_P = /bin/mkdir -p +MSGFMT = /usr/bin/msgfmt +MSGFMT_015 = /usr/bin/msgfmt +MSGMERGE = /usr/bin/msgmerge +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = <fcntl.h> +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = <getopt.h> +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = <inttypes.h> +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = <langinfo.h> +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = <limits.h> +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = <locale.h> +NEXT_AS_FIRST_DIRECTIVE_MATH_H = <math.h> +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = <signal.h> +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = <spawn.h> +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = <stdint.h> +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = <stdio.h> +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = <stdlib.h> +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = <strings.h> +NEXT_AS_FIRST_DIRECTIVE_STRING_H = <string.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = <sys/file.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = <sys/stat.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = <sys/time.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = <sys/types.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = <sys/wait.h> +NEXT_AS_FIRST_DIRECTIVE_TIME_H = <time.h> +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = <unistd.h> +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = <wchar.h> +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = <wctype.h> +NEXT_ERRNO_H = +NEXT_FCNTL_H = <fcntl.h> +NEXT_FLOAT_H = +NEXT_GETOPT_H = <getopt.h> +NEXT_INTTYPES_H = <inttypes.h> +NEXT_LANGINFO_H = <langinfo.h> +NEXT_LIMITS_H = <limits.h> +NEXT_LOCALE_H = <locale.h> +NEXT_MATH_H = <math.h> +NEXT_SCHED_H = +NEXT_SELINUX_SELINUX_H = +NEXT_SIGNAL_H = <signal.h> +NEXT_SPAWN_H = <spawn.h> +NEXT_STDARG_H = <stdarg.h> +NEXT_STDDEF_H = +NEXT_STDINT_H = <stdint.h> +NEXT_STDIO_H = <stdio.h> +NEXT_STDLIB_H = <stdlib.h> +NEXT_STRINGS_H = <strings.h> +NEXT_STRING_H = <string.h> +NEXT_SYS_FILE_H = <sys/file.h> +NEXT_SYS_STAT_H = <sys/stat.h> +NEXT_SYS_TIME_H = <sys/time.h> +NEXT_SYS_TYPES_H = <sys/types.h> +NEXT_SYS_WAIT_H = <sys/wait.h> +NEXT_TIME_H = <time.h> +NEXT_UNISTD_H = <unistd.h> +NEXT_WCHAR_H = <wchar.h> +NEXT_WCTYPE_H = <wctype.h> +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = recutils +PACKAGE_BUGREPORT = bug-recutils@gnu.org +PACKAGE_NAME = GNU recutils +PACKAGE_STRING = GNU recutils 1.8 +PACKAGE_TARNAME = recutils +PACKAGE_URL = http://www.gnu.org/software/recutils/ +PACKAGE_VERSION = 1.8 +PATH_SEPARATOR = : +PKG_CONFIG = /usr/bin/pkg-config +PKG_CONFIG_LIBDIR = +PKG_CONFIG_PATH = +POSUB = po +PRAGMA_COLUMNS = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PRIPTR_PREFIX = "l" +PRI_MACROS_BROKEN = 0 +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = 0 +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_ACOSF = 0 +REPLACE_ASINF = 0 +REPLACE_ATAN2F = 0 +REPLACE_ATANF = 0 +REPLACE_BTOWC = 0 +REPLACE_CALLOC = 0 +REPLACE_CANONICALIZE_FILE_NAME = 0 +REPLACE_CBRTF = 0 +REPLACE_CBRTL = 0 +REPLACE_CEIL = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_COSF = 0 +REPLACE_COSHF = 0 +REPLACE_CTIME = GNULIB_PORTCHECK +REPLACE_DPRINTF = 0 +REPLACE_DUP = 0 +REPLACE_DUP2 = 0 +REPLACE_DUPLOCALE = 0 +REPLACE_EXP2 = 0 +REPLACE_EXP2L = 0 +REPLACE_EXPF = 0 +REPLACE_EXPM1 = 0 +REPLACE_EXPM1F = 0 +REPLACE_FABSL = 0 +REPLACE_FACCESSAT = 0 +REPLACE_FCHOWNAT = 0 +REPLACE_FCLOSE = 0 +REPLACE_FCNTL = 1 +REPLACE_FDOPEN = 0 +REPLACE_FFLUSH = 0 +REPLACE_FLOOR = 0 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FMA = 0 +REPLACE_FMAF = 0 +REPLACE_FMAL = 0 +REPLACE_FMOD = 0 +REPLACE_FMODF = 0 +REPLACE_FMODL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 1 +REPLACE_FPURGE = 0 +REPLACE_FREELOCALE = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPF = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 0 +REPLACE_FSTAT = 0 +REPLACE_FSTATAT = 0 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_FTRUNCATE = 0 +REPLACE_FUTIMENS = 0 +REPLACE_GETCWD = 0 +REPLACE_GETDELIM = 0 +REPLACE_GETDOMAINNAME = 0 +REPLACE_GETDTABLESIZE = 0 +REPLACE_GETGROUPS = 0 +REPLACE_GETLINE = 0 +REPLACE_GETLOGIN_R = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETPASS = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_GMTIME = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_HYPOT = 0 +REPLACE_HYPOTF = 0 +REPLACE_HYPOTL = 0 +REPLACE_ILOGB = 0 +REPLACE_ILOGBF = 0 +REPLACE_ILOGBL = 0 +REPLACE_ISATTY = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWBLANK = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_ITOLD = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LINK = 0 +REPLACE_LINKAT = 0 +REPLACE_LOCALECONV = 0 +REPLACE_LOCALTIME = 0 +REPLACE_LOCALTIME_R = 0 +REPLACE_LOG = 0 +REPLACE_LOG10 = 0 +REPLACE_LOG10F = 0 +REPLACE_LOG10L = 0 +REPLACE_LOG1P = 0 +REPLACE_LOG1PF = 0 +REPLACE_LOG1PL = 0 +REPLACE_LOG2 = 0 +REPLACE_LOG2F = 0 +REPLACE_LOG2L = 0 +REPLACE_LOGB = 0 +REPLACE_LOGBF = 0 +REPLACE_LOGBL = 0 +REPLACE_LOGF = 0 +REPLACE_LOGL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MALLOC = 0 +REPLACE_MBRLEN = 1 +REPLACE_MBRTOWC = 1 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MBTOWC = 0 +REPLACE_MEMCHR = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKFIFO = 0 +REPLACE_MKNOD = 0 +REPLACE_MKSTEMP = 0 +REPLACE_MKTIME = 0 +REPLACE_MODF = 0 +REPLACE_MODFF = 0 +REPLACE_MODFL = 0 +REPLACE_NAN = 0 +REPLACE_NANOSLEEP = GNULIB_PORTCHECK +REPLACE_NEWLOCALE = 0 +REPLACE_NL_LANGINFO = 1 +REPLACE_NULL = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_OPENAT = 0 +REPLACE_PERROR = 0 +REPLACE_POPEN = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 0 +REPLACE_PREAD = 0 +REPLACE_PRINTF = 1 +REPLACE_PTHREAD_SIGMASK = 0 +REPLACE_PTSNAME = 0 +REPLACE_PTSNAME_R = 0 +REPLACE_PUTENV = 0 +REPLACE_PWRITE = 0 +REPLACE_QSORT_R = 0 +REPLACE_RAISE = 0 +REPLACE_RANDOM_R = 0 +REPLACE_READ = 0 +REPLACE_READLINK = 0 +REPLACE_READLINKAT = 0 +REPLACE_REALLOC = 0 +REPLACE_REALPATH = 0 +REPLACE_REMAINDER = 0 +REPLACE_REMAINDERF = 0 +REPLACE_REMAINDERL = 0 +REPLACE_REMOVE = 0 +REPLACE_RENAME = 0 +REPLACE_RENAMEAT = 0 +REPLACE_RMDIR = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SETENV = 0 +REPLACE_SETLOCALE = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SINF = 0 +REPLACE_SINHF = 0 +REPLACE_SLEEP = 0 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_SQRTF = 0 +REPLACE_SQRTL = 0 +REPLACE_STAT = 0 +REPLACE_STDIO_READ_FUNCS = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STPNCPY = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRCHRNUL = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRERROR_R = 0 +REPLACE_STRFTIME = GNULIB_PORTCHECK +REPLACE_STRNCAT = 0 +REPLACE_STRNDUP = 0 +REPLACE_STRNLEN = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 0 +REPLACE_STRTOD = 0 +REPLACE_STRTOIMAX = 0 +REPLACE_STRTOK_R = 0 +REPLACE_STRTOUMAX = 0 +REPLACE_STRUCT_LCONV = 0 +REPLACE_STRUCT_TIMEVAL = 0 +REPLACE_SYMLINK = 0 +REPLACE_SYMLINKAT = 0 +REPLACE_TANF = 0 +REPLACE_TANHF = 0 +REPLACE_TIMEGM = 0 +REPLACE_TMPFILE = 0 +REPLACE_TOWLOWER = 0 +REPLACE_TRUNC = 0 +REPLACE_TRUNCATE = 0 +REPLACE_TRUNCF = 0 +REPLACE_TRUNCL = 0 +REPLACE_TTYNAME_R = 0 +REPLACE_TZSET = 0 +REPLACE_UNLINK = 0 +REPLACE_UNLINKAT = 0 +REPLACE_UNSETENV = 0 +REPLACE_USLEEP = 0 +REPLACE_UTIMENSAT = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 1 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSFTIME = 0 +REPLACE_WCSNRTOMBS = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCSWIDTH = 0 +REPLACE_WCTOB = 0 +REPLACE_WCTOMB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SED = /bin/sed +SELINUX_CONTEXT_H = selinux/context.h +SET_MAKE = +SHELL = /bin/sh +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +STDARG_H = +STDBOOL_H = +STDDEF_H = +STDINT_H = stdint.h +STRIP = strip +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = 0 +TIME_H_DEFINES_STRUCT_TIMESPEC = 1 +UINT32_MAX_LT_UINTMAX_MAX = 1 +UINT64_MAX_EQ_ULONG_MAX = 0 +UNDEFINE_STRTOK_R = 0 +UNISTD_H_DEFINES_STRUCT_TIMESPEC = 0 +UNISTD_H_HAVE_WINSOCK2_H = 0 +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = 0 +USE_ACL = 0 +USE_NLS = yes +UUIDLIBS = +VERSION = 1.8 +WCHAR_T_SUFFIX = +WINDOWS_64_BIT_OFF_T = 0 +WINDOWS_64_BIT_ST_SIZE = 0 +WINDOWS_STAT_INODES = 0 +WINDOWS_STAT_TIMESPEC = 0 +WINT_T_SUFFIX = +XGETTEXT = /usr/bin/xgettext +XGETTEXT_015 = /usr/bin/xgettext +XGETTEXT_EXTRA_OPTIONS = --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format +YACC = bison -o y.tab.c +YFLAGS = +abs_builddir = /mnt/lfs/build/recutils/recutils-1.8/libcsv +abs_srcdir = /mnt/lfs/build/recutils/recutils-1.8/libcsv +abs_top_builddir = /mnt/lfs/build/recutils/recutils-1.8 +abs_top_srcdir = /mnt/lfs/build/recutils/recutils-1.8 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +builddir = . +crypt_support = no +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +gl_LIBOBJS = asnprintf.o asprintf.o fcntl.o fprintf.o fseterr.o localtime-buffer.o mbrlen.o mbrtowc.o mktime.o nl_langinfo.o obstack.o printf.o printf-args.o printf-parse.o readline.o regex.o time_rz.o vasnprintf.o vasprintf.o vfprintf.o +gl_LTLIBOBJS = asnprintf.lo asprintf.lo fcntl.lo fprintf.lo fseterr.lo localtime-buffer.lo mbrlen.lo mbrtowc.lo mktime.lo nl_langinfo.lo obstack.lo printf.lo printf-args.lo printf-parse.lo readline.lo regex.lo time_rz.lo vasnprintf.lo vasprintf.lo vfprintf.lo +gltests_LIBOBJS = +gltests_LTLIBOBJS = +gltests_WITNESS = IN_RECUTILS_GNULIB_TESTS +have_uuid = no +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = $(MKDIR_P) +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +runstatedir = ${localstatedir}/run +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +noinst_LTLIBRARIES = libcsv.la +libcsv_la_SOURCES = csv.h \ + libcsv.c + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libcsv/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu libcsv/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libcsv.la: $(libcsv_la_OBJECTS) $(libcsv_la_DEPENDENCIES) $(EXTRA_libcsv_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libcsv_la_OBJECTS) $(libcsv_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/libcsv.Plo + +.c.o: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< + +.c.obj: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ + $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Plo +# $(AM_V_CC)source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/libcsv/Makefile.am b/devspec.en_US/project/recutils/libcsv/Makefile.am new file mode 100755 index 0000000..0c25faf --- /dev/null +++ b/devspec.en_US/project/recutils/libcsv/Makefile.am @@ -0,0 +1,23 @@ +# libcsv/ Makefile.am + +# Copyright (C) 2010-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +noinst_LTLIBRARIES = libcsv.la + +libcsv_la_SOURCES = csv.h \ + libcsv.c + +# End of Makefile.am diff --git a/devspec.en_US/project/recutils/libcsv/Makefile.in b/devspec.en_US/project/recutils/libcsv/Makefile.in new file mode 100755 index 0000000..aff648d --- /dev/null +++ b/devspec.en_US/project/recutils/libcsv/Makefile.in @@ -0,0 +1,1862 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# libcsv/ Makefile.am + +# Copyright (C) 2010-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = libcsv +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +libcsv_la_LIBADD = +am_libcsv_la_OBJECTS = libcsv.lo +libcsv_la_OBJECTS = $(am_libcsv_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libcsv_la_SOURCES) +DIST_SOURCES = $(libcsv_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/depcomp README +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BASH_HEADERS = @BASH_HEADERS@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CA68 = @CA68@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CURLLIBS = @CURLLIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +FLOOR_LIBM = @FLOOR_LIBM@ +GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ACOSF = @GNULIB_ACOSF@ +GNULIB_ACOSL = @GNULIB_ACOSL@ +GNULIB_ASINF = @GNULIB_ASINF@ +GNULIB_ASINL = @GNULIB_ASINL@ +GNULIB_ATAN2F = @GNULIB_ATAN2F@ +GNULIB_ATANF = @GNULIB_ATANF@ +GNULIB_ATANL = @GNULIB_ATANL@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CBRT = @GNULIB_CBRT@ +GNULIB_CBRTF = @GNULIB_CBRTF@ +GNULIB_CBRTL = @GNULIB_CBRTL@ +GNULIB_CEIL = @GNULIB_CEIL@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ +GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ +GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ +GNULIB_COSF = @GNULIB_COSF@ +GNULIB_COSHF = @GNULIB_COSHF@ +GNULIB_COSL = @GNULIB_COSL@ +GNULIB_CTIME = @GNULIB_CTIME@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_EXP2 = @GNULIB_EXP2@ +GNULIB_EXP2F = @GNULIB_EXP2F@ +GNULIB_EXP2L = @GNULIB_EXP2L@ +GNULIB_EXPF = @GNULIB_EXPF@ +GNULIB_EXPL = @GNULIB_EXPL@ +GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ +GNULIB_EXPM1 = @GNULIB_EXPM1@ +GNULIB_EXPM1F = @GNULIB_EXPM1F@ +GNULIB_EXPM1L = @GNULIB_EXPM1L@ +GNULIB_FABSF = @GNULIB_FABSF@ +GNULIB_FABSL = @GNULIB_FABSL@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FCNTL = @GNULIB_FCNTL@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FLOCK = @GNULIB_FLOCK@ +GNULIB_FLOOR = @GNULIB_FLOOR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FMA = @GNULIB_FMA@ +GNULIB_FMAF = @GNULIB_FMAF@ +GNULIB_FMAL = @GNULIB_FMAL@ +GNULIB_FMOD = @GNULIB_FMOD@ +GNULIB_FMODF = @GNULIB_FMODF@ +GNULIB_FMODL = @GNULIB_FMODL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPF = @GNULIB_FREXPF@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSTAT = @GNULIB_FSTAT@ +GNULIB_FSTATAT = @GNULIB_FSTATAT@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETPASS = @GNULIB_GETPASS@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_HYPOT = @GNULIB_HYPOT@ +GNULIB_HYPOTF = @GNULIB_HYPOTF@ +GNULIB_HYPOTL = @GNULIB_HYPOTL@ +GNULIB_ILOGB = @GNULIB_ILOGB@ +GNULIB_ILOGBF = @GNULIB_ILOGBF@ +GNULIB_ILOGBL = @GNULIB_ILOGBL@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPF = @GNULIB_LDEXPF@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LOCALENAME = @GNULIB_LOCALENAME@ +GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ +GNULIB_LOG = @GNULIB_LOG@ +GNULIB_LOG10 = @GNULIB_LOG10@ +GNULIB_LOG10F = @GNULIB_LOG10F@ +GNULIB_LOG10L = @GNULIB_LOG10L@ +GNULIB_LOG1P = @GNULIB_LOG1P@ +GNULIB_LOG1PF = @GNULIB_LOG1PF@ +GNULIB_LOG1PL = @GNULIB_LOG1PL@ +GNULIB_LOG2 = @GNULIB_LOG2@ +GNULIB_LOG2F = @GNULIB_LOG2F@ +GNULIB_LOG2L = @GNULIB_LOG2L@ +GNULIB_LOGB = @GNULIB_LOGB@ +GNULIB_LOGBF = @GNULIB_LOGBF@ +GNULIB_LOGBL = @GNULIB_LOGBL@ +GNULIB_LOGF = @GNULIB_LOGF@ +GNULIB_LOGL = @GNULIB_LOGL@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKFIFO = @GNULIB_MKFIFO@ +GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ +GNULIB_MKNOD = @GNULIB_MKNOD@ +GNULIB_MKNODAT = @GNULIB_MKNODAT@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_MKTIME = @GNULIB_MKTIME@ +GNULIB_MODF = @GNULIB_MODF@ +GNULIB_MODFF = @GNULIB_MODFF@ +GNULIB_MODFL = @GNULIB_MODFL@ +GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ +GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_POWF = @GNULIB_POWF@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_QSORT_R = @GNULIB_QSORT_R@ +GNULIB_RAISE = @GNULIB_RAISE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMAINDER = @GNULIB_REMAINDER@ +GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ +GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RINT = @GNULIB_RINT@ +GNULIB_RINTF = @GNULIB_RINTF@ +GNULIB_RINTL = @GNULIB_RINTL@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SINF = @GNULIB_SINF@ +GNULIB_SINHF = @GNULIB_SINHF@ +GNULIB_SINL = @GNULIB_SINL@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_SQRTF = @GNULIB_SQRTF@ +GNULIB_SQRTL = @GNULIB_SQRTL@ +GNULIB_STAT = @GNULIB_STAT@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRFTIME = @GNULIB_STRFTIME@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRPTIME = @GNULIB_STRPTIME@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TANF = @GNULIB_TANF@ +GNULIB_TANHF = @GNULIB_TANHF@ +GNULIB_TANL = @GNULIB_TANL@ +GNULIB_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_TZSET = @GNULIB_TZSET@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WAITPID = @GNULIB_WAITPID@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +HAVE_ACOSF = @HAVE_ACOSF@ +HAVE_ACOSL = @HAVE_ACOSL@ +HAVE_ASINF = @HAVE_ASINF@ +HAVE_ASINL = @HAVE_ASINL@ +HAVE_ATAN2F = @HAVE_ATAN2F@ +HAVE_ATANF = @HAVE_ATANF@ +HAVE_ATANL = @HAVE_ATANL@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CBRT = @HAVE_CBRT@ +HAVE_CBRTF = @HAVE_CBRTF@ +HAVE_CBRTL = @HAVE_CBRTL@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_COPYSIGN = @HAVE_COPYSIGN@ +HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ +HAVE_COSF = @HAVE_COSF@ +HAVE_COSHF = @HAVE_COSHF@ +HAVE_COSL = @HAVE_COSL@ +HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ +HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ +HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ +HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ +HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ +HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ +HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ +HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ +HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ +HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ +HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ +HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ +HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ +HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ +HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ +HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ +HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ +HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ +HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ +HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_EXPF = @HAVE_EXPF@ +HAVE_EXPL = @HAVE_EXPL@ +HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ +HAVE_EXPM1 = @HAVE_EXPM1@ +HAVE_EXPM1F = @HAVE_EXPM1F@ +HAVE_FABSF = @HAVE_FABSF@ +HAVE_FABSL = @HAVE_FABSL@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FLOCK = @HAVE_FLOCK@ +HAVE_FMA = @HAVE_FMA@ +HAVE_FMAF = @HAVE_FMAF@ +HAVE_FMAL = @HAVE_FMAL@ +HAVE_FMODF = @HAVE_FMODF@ +HAVE_FMODL = @HAVE_FMODL@ +HAVE_FREELOCALE = @HAVE_FREELOCALE@ +HAVE_FREXPF = @HAVE_FREXPF@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSTATAT = @HAVE_FSTATAT@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_FUTIMENS = @HAVE_FUTIMENS@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETPASS = @HAVE_GETPASS@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_HYPOTF = @HAVE_HYPOTF@ +HAVE_HYPOTL = @HAVE_HYPOTL@ +HAVE_ILOGB = @HAVE_ILOGB@ +HAVE_ILOGBF = @HAVE_ILOGBF@ +HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LDEXPF = @HAVE_LDEXPF@ +HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOG10F = @HAVE_LOG10F@ +HAVE_LOG10L = @HAVE_LOG10L@ +HAVE_LOG1P = @HAVE_LOG1P@ +HAVE_LOG1PF = @HAVE_LOG1PF@ +HAVE_LOG1PL = @HAVE_LOG1PL@ +HAVE_LOGBF = @HAVE_LOGBF@ +HAVE_LOGBL = @HAVE_LOGBL@ +HAVE_LOGF = @HAVE_LOGF@ +HAVE_LOGL = @HAVE_LOGL@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDIRAT = @HAVE_MKDIRAT@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKFIFO = @HAVE_MKFIFO@ +HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ +HAVE_MKNOD = @HAVE_MKNOD@ +HAVE_MKNODAT = @HAVE_MKNODAT@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MODFF = @HAVE_MODFF@ +HAVE_MODFL = @HAVE_MODFL@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ +HAVE_POWF = @HAVE_POWF@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_QSORT_R = @HAVE_QSORT_R@ +HAVE_RAISE = @HAVE_RAISE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_REMAINDER = @HAVE_REMAINDER@ +HAVE_REMAINDERF = @HAVE_REMAINDERF@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RINT = @HAVE_RINT@ +HAVE_RINTL = @HAVE_RINTL@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SINF = @HAVE_SINF@ +HAVE_SINHF = @HAVE_SINHF@ +HAVE_SINL = @HAVE_SINL@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_SQRTF = @HAVE_SQRTF@ +HAVE_SQRTL = @HAVE_SQRTL@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRPTIME = @HAVE_STRPTIME@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ +HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TANF = @HAVE_TANF@ +HAVE_TANHF = @HAVE_TANHF@ +HAVE_TANL = @HAVE_TANL@ +HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_TZSET = @HAVE_TZSET@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSFTIME = @HAVE_WCSFTIME@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ +INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBGCRYPT = @LIBGCRYPT@ +LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBREADLINE = @LIBREADLINE@ +LIBS = @LIBS@ +LIBTHREAD = @LIBTHREAD@ +LIBTOOL = @LIBTOOL@ +LIB_ACL = @LIB_ACL@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LIB_EACCESS = @LIB_EACCESS@ +LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ +LIB_SELINUX = @LIB_SELINUX@ +LIMITS_H = @LIMITS_H@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTALLOCA = @LTALLOCA@ +LTLIBGCRYPT = @LTLIBGCRYPT@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBREADLINE = @LTLIBREADLINE@ +LTLIBTHREAD = @LTLIBTHREAD@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MDBLIBS = @MDBLIBS@ +MDB_DATETIME = @MDB_DATETIME@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ +NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LIMITS_H = @NEXT_LIMITS_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_ACOSF = @REPLACE_ACOSF@ +REPLACE_ASINF = @REPLACE_ASINF@ +REPLACE_ATAN2F = @REPLACE_ATAN2F@ +REPLACE_ATANF = @REPLACE_ATANF@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CBRTF = @REPLACE_CBRTF@ +REPLACE_CBRTL = @REPLACE_CBRTL@ +REPLACE_CEIL = @REPLACE_CEIL@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_COSF = @REPLACE_COSF@ +REPLACE_COSHF = @REPLACE_COSHF@ +REPLACE_CTIME = @REPLACE_CTIME@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_EXP2 = @REPLACE_EXP2@ +REPLACE_EXP2L = @REPLACE_EXP2L@ +REPLACE_EXPF = @REPLACE_EXPF@ +REPLACE_EXPM1 = @REPLACE_EXPM1@ +REPLACE_EXPM1F = @REPLACE_EXPM1F@ +REPLACE_FABSL = @REPLACE_FABSL@ +REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOOR = @REPLACE_FLOOR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FMA = @REPLACE_FMA@ +REPLACE_FMAF = @REPLACE_FMAF@ +REPLACE_FMAL = @REPLACE_FMAL@ +REPLACE_FMOD = @REPLACE_FMOD@ +REPLACE_FMODF = @REPLACE_FMODF@ +REPLACE_FMODL = @REPLACE_FMODL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPF = @REPLACE_FREXPF@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FSTAT = @REPLACE_FSTAT@ +REPLACE_FSTATAT = @REPLACE_FSTATAT@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETPASS = @REPLACE_GETPASS@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_GMTIME = @REPLACE_GMTIME@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_HYPOT = @REPLACE_HYPOT@ +REPLACE_HYPOTF = @REPLACE_HYPOTF@ +REPLACE_HYPOTL = @REPLACE_HYPOTL@ +REPLACE_ILOGB = @REPLACE_ILOGB@ +REPLACE_ILOGBF = @REPLACE_ILOGBF@ +REPLACE_ILOGBL = @REPLACE_ILOGBL@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LOG = @REPLACE_LOG@ +REPLACE_LOG10 = @REPLACE_LOG10@ +REPLACE_LOG10F = @REPLACE_LOG10F@ +REPLACE_LOG10L = @REPLACE_LOG10L@ +REPLACE_LOG1P = @REPLACE_LOG1P@ +REPLACE_LOG1PF = @REPLACE_LOG1PF@ +REPLACE_LOG1PL = @REPLACE_LOG1PL@ +REPLACE_LOG2 = @REPLACE_LOG2@ +REPLACE_LOG2F = @REPLACE_LOG2F@ +REPLACE_LOG2L = @REPLACE_LOG2L@ +REPLACE_LOGB = @REPLACE_LOGB@ +REPLACE_LOGBF = @REPLACE_LOGBF@ +REPLACE_LOGBL = @REPLACE_LOGBL@ +REPLACE_LOGF = @REPLACE_LOGF@ +REPLACE_LOGL = @REPLACE_LOGL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKFIFO = @REPLACE_MKFIFO@ +REPLACE_MKNOD = @REPLACE_MKNOD@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_MKTIME = @REPLACE_MKTIME@ +REPLACE_MODF = @REPLACE_MODF@ +REPLACE_MODFF = @REPLACE_MODFF@ +REPLACE_MODFL = @REPLACE_MODFL@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_OPENAT = @REPLACE_OPENAT@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_QSORT_R = @REPLACE_QSORT_R@ +REPLACE_RAISE = @REPLACE_RAISE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_READLINKAT = @REPLACE_READLINKAT@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMAINDER = @REPLACE_REMAINDER@ +REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ +REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SINF = @REPLACE_SINF@ +REPLACE_SINHF = @REPLACE_SINHF@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_SQRTF = @REPLACE_SQRTF@ +REPLACE_SQRTL = @REPLACE_SQRTL@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRFTIME = @REPLACE_STRFTIME@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ +REPLACE_TANF = @REPLACE_TANF@ +REPLACE_TANHF = @REPLACE_TANHF@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TRUNC = @REPLACE_TRUNC@ +REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ +REPLACE_TRUNCF = @REPLACE_TRUNCF@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_TZSET = @REPLACE_TZSET@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SED = @SED@ +SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ +UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +USE_ACL = @USE_ACL@ +USE_NLS = @USE_NLS@ +UUIDLIBS = @UUIDLIBS@ +VERSION = @VERSION@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ +WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ +WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +crypt_support = @crypt_support@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +have_uuid = @have_uuid@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +noinst_LTLIBRARIES = libcsv.la +libcsv_la_SOURCES = csv.h \ + libcsv.c + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libcsv/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu libcsv/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libcsv.la: $(libcsv_la_OBJECTS) $(libcsv_la_DEPENDENCIES) $(EXTRA_libcsv_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libcsv_la_OBJECTS) $(libcsv_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcsv.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/libcsv/README b/devspec.en_US/project/recutils/libcsv/README new file mode 100755 index 0000000..a13015f --- /dev/null +++ b/devspec.en_US/project/recutils/libcsv/README @@ -0,0 +1,7 @@ +This directory contains a copy of the libcsv library, extracted from +libcsv-3.0.0.tar.gz. It contains some modifications. + +The homepage for libcsv is at http://libcsv.sf.net + +Note that this copy has been relicensed to GPLv3 as per terms of the +LGPL 2.1. diff --git a/devspec.en_US/project/recutils/libcsv/csv.h b/devspec.en_US/project/recutils/libcsv/csv.h new file mode 100755 index 0000000..6445714 --- /dev/null +++ b/devspec.en_US/project/recutils/libcsv/csv.h @@ -0,0 +1,111 @@ +/* + * libcsv - parse and write csv data + * + * Original Author: Robert Gamble. + * + * Copyright (C) 2008 Robert Gamble + * Copyright (C) 2010 Jose E. Marchesi +*/ + +/* This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License version + * 3 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + + +#ifndef LIBCSV_H__ +#define LIBCSV_H__ +#include <stdlib.h> +#include <stdio.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#define CSV_MAJOR 3 +#define CSV_MINOR 0 +#define CSV_RELEASE 0 + +/* Error Codes */ +#define CSV_SUCCESS 0 +#define CSV_EPARSE 1 /* Parse error in strict mode */ +#define CSV_ENOMEM 2 /* Out of memory while increasing buffer size */ +#define CSV_ETOOBIG 3 /* Buffer larger than SIZE_MAX needed */ +#define CSV_EINVALID 4 /* Invalid code,should never be received from csv_error*/ + + +/* parser options */ +#define CSV_STRICT 1 /* enable strict mode */ +#define CSV_REPALL_NL 2 /* report all unquoted carriage returns and linefeeds */ +#define CSV_STRICT_FINI 4 /* causes csv_fini to return CSV_EPARSE if last + field is quoted and doesn't containg ending + quote */ +#define CSV_APPEND_NULL 8 /* Ensure that all fields are null-ternimated */ + + +/* Character values */ +#define CSV_TAB 0x09 +#define CSV_SPACE 0x20 +#define CSV_CR 0x0d +#define CSV_LF 0x0a +#define CSV_COMMA 0x2c +#define CSV_QUOTE 0x22 + +struct csv_parser { + int pstate; /* Parser state */ + int quoted; /* Is the current field a quoted field? */ + size_t spaces; /* Number of continious spaces after quote or in a non-quoted field */ + unsigned char * entry_buf; /* Entry buffer */ + size_t entry_pos; /* Current position in entry_buf (and current size of entry) */ + size_t entry_size; /* Size of entry buffer */ + int status; /* Operation status */ + unsigned char options; + unsigned char quote_char; + unsigned char delim_char; + int (*is_space)(unsigned char); + int (*is_term)(unsigned char); + size_t blk_size; + void *(*malloc_func)(size_t); + void *(*realloc_func)(void *, size_t); + void (*free_func)(void *); +}; + +/* Function Prototypes */ +int csv_init(struct csv_parser *p, unsigned char options); +int csv_fini(struct csv_parser *p, void (*cb1)(void *, size_t, void *), void (*cb2)(int, void *), void *data); +void csv_free(struct csv_parser *p); +int csv_error(struct csv_parser *p); +char * csv_strerror(int error); +size_t csv_parse(struct csv_parser *p, const void *s, size_t len, void (*cb1)(void *, size_t, void *), void (*cb2)(int, void *), void *data); +size_t csv_write(void *dest, size_t dest_size, const void *src, size_t src_size); +int csv_fwrite(FILE *fp, const void *src, size_t src_size); +size_t csv_write2(void *dest, size_t dest_size, const void *src, size_t src_size, unsigned char quote); +int csv_fwrite2(FILE *fp, const void *src, size_t src_size, unsigned char quote); +int csv_get_opts(struct csv_parser *p); +int csv_set_opts(struct csv_parser *p, unsigned char options); +void csv_set_delim(struct csv_parser *p, unsigned char c); +void csv_set_quote(struct csv_parser *p, unsigned char c); +unsigned char csv_get_delim(struct csv_parser *p); +unsigned char csv_get_quote(struct csv_parser *p); +void csv_set_space_func(struct csv_parser *p, int (*f)(unsigned char)); +void csv_set_term_func(struct csv_parser *p, int (*f)(unsigned char)); +void csv_set_realloc_func(struct csv_parser *p, void *(*)(void *, size_t)); +void csv_set_free_func(struct csv_parser *p, void (*)(void *)); +void csv_set_blk_size(struct csv_parser *p, size_t); +size_t csv_get_buffer_size(struct csv_parser *p); + +#ifdef __cplusplus +} +#endif + +#endif + +/* End of csv.h */ diff --git a/devspec.en_US/project/recutils/libcsv/libcsv.c b/devspec.en_US/project/recutils/libcsv/libcsv.c new file mode 100755 index 0000000..7ba6403 --- /dev/null +++ b/devspec.en_US/project/recutils/libcsv/libcsv.c @@ -0,0 +1,586 @@ +/* + * libcsv - parse and write csv data + * + * Original Author: Robert Gamble. + * + * Copyright (C) 2008 Robert Gamble + * Copyright (C) 2010-2015 Jose E. Marchesi +*/ + +/* This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License version + * 3 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#if ___STDC_VERSION__ >= 199901L +# include <stdint.h> +#else +# define SIZE_MAX ((size_t)-1) /* C89 doesn't have stdint.h or SIZE_MAX */ +#endif + +#include <config.h> + +#include "csv.h" + +#define LIBCSV_VERSION "3.0.0-recutils" + +#define ROW_NOT_BEGUN 0 +#define FIELD_NOT_BEGUN 1 +#define FIELD_BEGUN 2 +#define FIELD_MIGHT_HAVE_ENDED 3 + +/* + Explanation of states + ROW_NOT_BEGUN There have not been any fields encountered for this row + FIELD_NOT_BEGUN There have been fields but we are currently not in one + FIELD_BEGUN We are in a field + FIELD_MIGHT_HAVE_ENDED + We encountered a double quote inside a quoted field, the + field is either ended or the quote is literal +*/ + +#define MEM_BLK_SIZE 128 + +#define SUBMIT_FIELD(p) \ + do { \ + if (!quoted) \ + entry_pos -= spaces; \ + if (p->options & CSV_APPEND_NULL) \ + ((p)->entry_buf[entry_pos+1]) = '\0'; \ + if (cb1) \ + cb1(p->entry_buf, entry_pos, data); \ + pstate = FIELD_NOT_BEGUN; \ + entry_pos = quoted = spaces = 0; \ + } while (0) + +#define SUBMIT_ROW(p, c) \ + do { \ + if (cb2) \ + cb2(c, data); \ + pstate = ROW_NOT_BEGUN; \ + entry_pos = quoted = spaces = 0; \ + } while (0) + +#define SUBMIT_CHAR(p, c) ((p)->entry_buf[entry_pos++] = (c)) + +static char *csv_errors[] = {"success", + "error parsing data while strict checking enabled", + "memory exhausted while increasing buffer size", + "data size too large", + "invalid status code"}; + +int +csv_error(struct csv_parser *p) +{ + /* Return the current status of the parser */ + return p->status; +} + +char * +csv_strerror(int status) +{ + /* Return a textual description of status */ + if (status >= CSV_EINVALID || status < 0) + return csv_errors[CSV_EINVALID]; + else + return csv_errors[status]; +} + +int +csv_get_opts(struct csv_parser *p) +{ + /* Return the currently set options of parser */ + if (p == NULL) + return -1; + + return p->options; +} + +int +csv_set_opts(struct csv_parser *p, unsigned char options) +{ + /* Set the options */ + if (p == NULL) + return -1; + + p->options = options; + return 0; +} + +int +csv_init(struct csv_parser *p, unsigned char options) +{ + /* Initialize a csv_parser object returns 0 on success, -1 on error */ + if (p == NULL) + return -1; + + p->entry_buf = NULL; + p->pstate = ROW_NOT_BEGUN; + p->quoted = 0; + p->spaces = 0; + p->entry_pos = 0; + p->entry_size = 0; + p->status = 0; + p->options = options; + p->quote_char = CSV_QUOTE; + p->delim_char = CSV_COMMA; + p->is_space = NULL; + p->is_term = NULL; + p->blk_size = MEM_BLK_SIZE; + p->malloc_func = NULL; + p->realloc_func = realloc; + p->free_func = free; + + return 0; +} + +void +csv_free(struct csv_parser *p) +{ + /* Free the entry_buffer of csv_parser object */ + if (p == NULL) + return; + + if (p->entry_buf) + p->free_func(p->entry_buf); + + p->entry_buf = NULL; + p->entry_size = 0; + + return; +} + +int +csv_fini(struct csv_parser *p, void (*cb1)(void *, size_t, void *), void (*cb2)(int c, void *), void *data) +{ + /* Finalize parsing. Needed, for example, when file does not end in a newline */ + int quoted = p->quoted; + int pstate = p->pstate; + size_t spaces = p->spaces; + size_t entry_pos = p->entry_pos; + + if (p == NULL) + return -1; + + + if (p->pstate == FIELD_BEGUN && p->quoted && p->options & CSV_STRICT && p->options & CSV_STRICT_FINI) { + /* Current field is quoted, no end-quote was seen, and CSV_STRICT_FINI is set */ + p->status = CSV_EPARSE; + return -1; + } + + switch (p->pstate) { + case FIELD_MIGHT_HAVE_ENDED: + p->entry_pos -= p->spaces + 1; /* get rid of spaces and original quote */ + /* Fall-through */ + case FIELD_NOT_BEGUN: + case FIELD_BEGUN: + quoted = p->quoted, pstate = p->pstate; + spaces = p->spaces, entry_pos = p->entry_pos; + SUBMIT_FIELD(p); + SUBMIT_ROW(p, -1); + case ROW_NOT_BEGUN: /* Already ended properly */ + ; + } + + /* Reset parser */ + p->spaces = p->quoted = p->entry_pos = p->status = 0; + p->pstate = ROW_NOT_BEGUN; + + return 0; +} + +void +csv_set_delim(struct csv_parser *p, unsigned char c) +{ + /* Set the delimiter */ + if (p) p->delim_char = c; +} + +void +csv_set_quote(struct csv_parser *p, unsigned char c) +{ + /* Set the quote character */ + if (p) p->quote_char = c; +} + +unsigned char +csv_get_delim(struct csv_parser *p) +{ + /* Get the delimiter */ + return p->delim_char; +} + +unsigned char +csv_get_quote(struct csv_parser *p) +{ + /* Get the quote character */ + return p->quote_char; +} + +void +csv_set_space_func(struct csv_parser *p, int (*f)(unsigned char)) +{ + /* Set the space function */ + if (p) p->is_space = f; +} + +void +csv_set_term_func(struct csv_parser *p, int (*f)(unsigned char)) +{ + /* Set the term function */ + if (p) p->is_term = f; +} + +void +csv_set_realloc_func(struct csv_parser *p, void *(*f)(void *, size_t)) +{ + /* Set the realloc function used to increase buffer size */ + if (p && f) p->realloc_func = f; +} + +void +csv_set_free_func(struct csv_parser *p, void (*f)(void *)) +{ + /* Set the free function used to free the buffer */ + if (p && f) p->free_func = f; +} + +void +csv_set_blk_size(struct csv_parser *p, size_t size) +{ + /* Set the block size used to increment buffer size */ + if (p) p->blk_size = size; +} + +size_t +csv_get_buffer_size(struct csv_parser *p) +{ + /* Get the size of the entry buffer */ + if (p) + return p->entry_size; + return 0; +} + +static int +csv_increase_buffer(struct csv_parser *p) +{ + /* Increase the size of the entry buffer. Attempt to increase size by + * p->blk_size, if this is larger than SIZE_MAX try to increase current + * buffer size to SIZE_MAX. If allocation fails, try to allocate halve + * the size and try again until successful or increment size is zero. + */ + + size_t to_add = p->blk_size; + void *vp; + + if ( p->entry_size >= SIZE_MAX - to_add ) + to_add = SIZE_MAX - p->entry_size; + + if (!to_add) { + p->status = CSV_ETOOBIG; + return -1; + } + + while ((vp = p->realloc_func(p->entry_buf, p->entry_size + to_add)) == NULL) { + to_add /= 2; + if (!to_add) { + p->status = CSV_ENOMEM; + return -1; + } + } + + /* Update entry buffer pointer and entry_size if successful */ + p->entry_buf = vp; + p->entry_size += to_add; + return 0; +} + +size_t +csv_parse(struct csv_parser *p, const void *s, size_t len, void (*cb1)(void *, size_t, void *), void (*cb2)(int c, void *), void *data) +{ + unsigned const char *us = s; /* Access input data as array of unsigned char */ + unsigned char c; /* The character we are currently processing */ + size_t pos = 0; /* The number of characters we have processed in this call */ + + /* Store key fields into local variables for performance */ + unsigned char delim = p->delim_char; + unsigned char quote = p->quote_char; + int (*is_space)(unsigned char) = p->is_space; + int (*is_term)(unsigned char) = p->is_term; + int quoted = p->quoted; + int pstate = p->pstate; + size_t spaces = p->spaces; + size_t entry_pos = p->entry_pos; + + + if (!p->entry_buf && pos < len) { + /* Buffer hasn't been allocated yet and len > 0 */ + if (csv_increase_buffer(p) != 0) { + p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; + return pos; + } + } + + while (pos < len) { + /* Check memory usage, increase buffer if neccessary */ + if (entry_pos == ((p->options & CSV_APPEND_NULL) ? p->entry_size - 1 : p->entry_size) ) { + if (csv_increase_buffer(p) != 0) { + p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; + return pos; + } + } + + c = us[pos++]; + + switch (pstate) { + case ROW_NOT_BEGUN: + case FIELD_NOT_BEGUN: + if (is_space ? is_space(c) : c == CSV_SPACE || c == CSV_TAB) { /* Space or Tab */ + continue; + } else if (is_term ? is_term(c) : c == CSV_CR || c == CSV_LF) { /* Carriage Return or Line Feed */ + if (pstate == FIELD_NOT_BEGUN) { + SUBMIT_FIELD(p); + SUBMIT_ROW(p, (unsigned char)c); + } else { /* ROW_NOT_BEGUN */ + /* Don't submit empty rows by default */ + if (p->options & CSV_REPALL_NL) { + SUBMIT_ROW(p, (unsigned char)c); + } + } + continue; + } else if (c == delim) { /* Comma */ + SUBMIT_FIELD(p); + break; + } else if (c == quote) { /* Quote */ + pstate = FIELD_BEGUN; + quoted = 1; + } else { /* Anything else */ + pstate = FIELD_BEGUN; + quoted = 0; + SUBMIT_CHAR(p, c); + } + break; + case FIELD_BEGUN: + if (c == quote) { /* Quote */ + if (quoted) { + SUBMIT_CHAR(p, c); + pstate = FIELD_MIGHT_HAVE_ENDED; + } else { + /* STRICT ERROR - double quote inside non-quoted field */ + if (p->options & CSV_STRICT) { + p->status = CSV_EPARSE; + p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; + return pos-1; + } + SUBMIT_CHAR(p, c); + spaces = 0; + } + } else if (c == delim) { /* Comma */ + if (quoted) { + SUBMIT_CHAR(p, c); + } else { + SUBMIT_FIELD(p); + } + } else if (is_term ? is_term(c) : c == CSV_CR || c == CSV_LF) { /* Carriage Return or Line Feed */ + if (!quoted) { + SUBMIT_FIELD(p); + SUBMIT_ROW(p, (unsigned char)c); + } else { + SUBMIT_CHAR(p, c); + } + } else if (!quoted && (is_space? is_space(c) : c == CSV_SPACE || c == CSV_TAB)) { /* Tab or space for non-quoted field */ + SUBMIT_CHAR(p, c); + spaces++; + } else { /* Anything else */ + SUBMIT_CHAR(p, c); + spaces = 0; + } + break; + case FIELD_MIGHT_HAVE_ENDED: + /* This only happens when a quote character is encountered in a quoted field */ + if (c == delim) { /* Comma */ + entry_pos -= spaces + 1; /* get rid of spaces and original quote */ + SUBMIT_FIELD(p); + } else if (is_term ? is_term(c) : c == CSV_CR || c == CSV_LF) { /* Carriage Return or Line Feed */ + entry_pos -= spaces + 1; /* get rid of spaces and original quote */ + SUBMIT_FIELD(p); + SUBMIT_ROW(p, (unsigned char)c); + } else if (is_space ? is_space(c) : c == CSV_SPACE || c == CSV_TAB) { /* Space or Tab */ + SUBMIT_CHAR(p, c); + spaces++; + } else if (c == quote) { /* Quote */ + if (spaces) { + /* STRICT ERROR - unescaped double quote */ + if (p->options & CSV_STRICT) { + p->status = CSV_EPARSE; + p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; + return pos-1; + } + spaces = 0; + SUBMIT_CHAR(p, c); + } else { + /* Two quotes in a row */ + pstate = FIELD_BEGUN; + } + } else { /* Anything else */ + /* STRICT ERROR - unescaped double quote */ + if (p->options & CSV_STRICT) { + p->status = CSV_EPARSE; + p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; + return pos-1; + } + pstate = FIELD_BEGUN; + spaces = 0; + SUBMIT_CHAR(p, c); + } + break; + default: + break; + } + } + p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; + return pos; +} + +size_t +csv_write (void *dest, size_t dest_size, const void *src, size_t src_size) +{ + unsigned char *cdest = dest; + const unsigned char *csrc = src; + size_t chars = 0; + + if (src == NULL) + return 0; + + if (cdest == NULL) + dest_size = 0; + + if (dest_size > 0) + *cdest++ = '"'; + chars++; + + while (src_size) { + if (*csrc == '"') { + if (dest_size > chars) + *cdest++ = '"'; + if (chars < SIZE_MAX) chars++; + } + if (dest_size > chars) + *cdest++ = *csrc; + if (chars < SIZE_MAX) chars++; + src_size--; + csrc++; + } + + if (dest_size > chars) + *cdest = '"'; + if (chars < SIZE_MAX) chars++; + + return chars; +} + +int +csv_fwrite (FILE *fp, const void *src, size_t src_size) +{ + const unsigned char *csrc = src; + + if (fp == NULL || src == NULL) + return 0; + + if (fputc('"', fp) == EOF) + return EOF; + + while (src_size) { + if (*csrc == '"') { + if (fputc('"', fp) == EOF) + return EOF; + } + if (fputc(*csrc, fp) == EOF) + return EOF; + src_size--; + csrc++; + } + + if (fputc('"', fp) == EOF) { + return EOF; + } + + return 0; +} + +size_t +csv_write2 (void *dest, size_t dest_size, const void *src, size_t src_size, unsigned char quote) +{ + unsigned char *cdest = dest; + const unsigned char *csrc = src; + size_t chars = 0; + + if (src == NULL) + return 0; + + if (dest == NULL) + dest_size = 0; + + if (dest_size > 0) + *cdest++ = quote; + chars++; + + while (src_size) { + if (*csrc == quote) { + if (dest_size > chars) + *cdest++ = quote; + if (chars < SIZE_MAX) chars++; + } + if (dest_size > chars) + *cdest++ = *csrc; + if (chars < SIZE_MAX) chars++; + src_size--; + csrc++; + } + + if (dest_size > chars) + *cdest = quote; + if (chars < SIZE_MAX) chars++; + + return chars; +} + +int +csv_fwrite2 (FILE *fp, const void *src, size_t src_size, unsigned char quote) +{ + const unsigned char *csrc = src; + + if (fp == NULL || src == NULL) + return 0; + + if (fputc(quote, fp) == EOF) + return EOF; + + while (src_size) { + if (*csrc == quote) { + if (fputc(quote, fp) == EOF) + return EOF; + } + if (fputc(*csrc, fp) == EOF) + return EOF; + src_size--; + csrc++; + } + + if (fputc(quote, fp) == EOF) { + return EOF; + } + + return 0; +} + +/* End of libcsv.c */ diff --git a/devspec.en_US/project/recutils/libtool b/devspec.en_US/project/recutils/libtool new file mode 100755 index 0000000..ff53859 --- /dev/null +++ b/devspec.en_US/project/recutils/libtool @@ -0,0 +1,11653 @@ +#! /bin/sh +# Generated automatically by config.status (recutils) 1.8 +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +# The names of the tagged configurations supported by this script. +available_tags='' + +# Configured defaults for sys_lib_dlsearch_path munging. +: ${LT_SYS_LIBRARY_PATH=""} + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=2.4.6 +macro_revision=2.4.6 + +# Whether or not to build shared libraries. +build_libtool_libs=yes + +# Whether or not to build static libraries. +build_old_libs=yes + +# What type of objects to build. +pic_mode=default + +# Whether or not to optimize for fast installation. +fast_install=yes + +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec= + +# Shell to use when invoking shell scripts. +SHELL="/bin/sh" + +# An echo program that protects backslashes. +ECHO="printf %s\\n" + +# The PATH separator for the build system. +PATH_SEPARATOR=":" + +# The host system. +host_alias= +host=i686-pc-linux-gnu +host_os=linux-gnu + +# The build system. +build_alias= +build=i686-pc-linux-gnu +build_os=linux-gnu + +# A sed program that does not truncate output. +SED="/bin/sed" + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP="/bin/grep" + +# An ERE matcher. +EGREP="/bin/grep -E" + +# A literal string matcher. +FGREP="/bin/grep -F" + +# A BSD- or MS-compatible name lister. +NM="/usr/bin/nm -B" + +# Whether we need soft or hard links. +LN_S="ln -s" + +# What is the maximum length of a command? +max_cmd_len=1572864 + +# Object file suffix (normally "o"). +objext=o + +# Executable file suffix (normally ""). +exeext= + +# whether the shell understands "unset". +lt_unset=unset + +# turn spaces into newlines. +SP2NL="tr \\040 \\012" + +# turn newlines into spaces. +NL2SP="tr \\015\\012 \\040\\040" + +# convert $build file names to $host format. +to_host_file_cmd=func_convert_file_noop + +# convert $build files to toolchain format. +to_tool_file_cmd=func_convert_file_noop + +# An object symbol dumper. +OBJDUMP="objdump" + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method="pass_all" + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd="\$MAGIC_CMD" + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob="" + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob="no" + +# DLL creation program. +DLLTOOL="false" + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd="printf %s\\n" + +# The archiver. +AR="ar" + +# Flags to create an archive. +AR_FLAGS="cru" + +# How to feed a file listing to the archiver. +archiver_list_spec="@" + +# A symbol stripping program. +STRIP="strip" + +# Commands used to install an old-style archive. +RANLIB="ranlib" +old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$tool_oldlib" +old_postuninstall_cmds="" + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=no + +# A C compiler. +LTCC="gcc" + +# LTCC compiler flags. +LTCFLAGS="-g -O2" + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGIRSTW][ABCDGIRSTW]*\\)[ ][ ]*\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2 \\2/p' | sed '/ __gnu_lto/d'" + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl="sed -n -e 's/^T .* \\(.*\\)\$/extern int \\1();/p' -e 's/^[ABCDGIRSTW][ABCDGIRSTW]* .* \\(.*\\)\$/extern char \\1;/p'" + +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import="" + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address="sed -n -e 's/^: \\(.*\\) .*\$/ {\"\\1\", (void *) 0},/p' -e 's/^[ABCDGIRSTW][ABCDGIRSTW]* .* \\(.*\\)\$/ {\"\\1\", (void *) \\&\\1},/p'" + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \\(.*\\) .*\$/ {\"\\1\", (void *) 0},/p' -e 's/^[ABCDGIRSTW][ABCDGIRSTW]* .* \\(lib.*\\)\$/ {\"\\1\", (void *) \\&\\1},/p' -e 's/^[ABCDGIRSTW][ABCDGIRSTW]* .* \\(.*\\)\$/ {\"lib\\1\", (void *) \\&\\1},/p'" + +# The name lister interface. +nm_interface="BSD nm" + +# Specify filename containing input files for $NM. +nm_file_list_spec="@" + +# The root where to search for dependent libraries,and where our libraries should be installed. +lt_sysroot= + +# Command to truncate a binary pipe. +lt_truncate_bin="/bin/dd bs=4096 count=1" + +# The name of the directory that contains temporary libtool files. +objdir=.libs + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=file + +# Must we lock files when doing compilation? +need_locks="no" + +# Manifest tool. +MANIFEST_TOOL=":" + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL="" + +# Tool to change global to local symbols on Mac OS X. +NMEDIT="" + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO="" + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL="" + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64="" + +# Old archive suffix (normally "a"). +libext=a + +# Shared library suffix (normally ".so"). +shrext_cmds=".so" + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds="" + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" + +# Do we need the "lib" prefix for modules? +need_lib_prefix=no + +# Do we need a version for libraries? +need_version=no + +# Library versioning type. +version_type=linux + +# Shared library runtime path variable. +runpath_var=LD_RUN_PATH + +# Shared library path variable. +shlibpath_var=LD_LIBRARY_PATH + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=no + +# Format of library name prefix. +libname_spec="lib\$name" + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec="\$libname\$release\$shared_ext\$versuffix \$libname\$release\$shared_ext\$major \$libname\$shared_ext" + +# The coded name of the library, if different from the real name. +soname_spec="\$libname\$release\$shared_ext\$major" + +# Permission mode override for installation of shared libraries. +install_override_mode="" + +# Command to use after installation of a shared archive. +postinstall_cmds="" + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds="" + +# Commands used to finish a libtool library installation in a directory. +finish_cmds="PATH=\\\"\\\$PATH:/sbin\\\" ldconfig -n \$libdir" + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval="" + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=yes + +# Compile-time system search path for libraries. +sys_lib_search_path_spec="/usr/lib/gcc/i686-linux-gnu/5 /usr/lib/i386-linux-gnu /usr/lib /lib/i386-linux-gnu /lib " + +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/lib/i386-linux-gnu/libfakeroot /lib/i386-linux-gnu /usr/lib/i386-linux-gnu /lib/i686-linux-gnu /usr/lib/i686-linux-gnu /usr/lib/i386-linux-gnu/mesa-egl /usr/lib/i386-linux-gnu/mesa /usr/local/lib /usr/lib/vmware-tools/lib32/libvmGuestLib.so /usr/lib/vmware-tools/lib64/libvmGuestLib.so /usr/lib/vmware-tools/lib32/libvmGuestLibJava.so /usr/lib/vmware-tools/lib64/libvmGuestLibJava.so /usr/lib/vmware-tools/lib32/libDeployPkg.so /usr/lib/vmware-tools/lib64/libDeployPkg.so " + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path="" + +# Whether dlopen is supported. +dlopen_support=unknown + +# Whether dlopen of programs is supported. +dlopen_self=unknown + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=unknown + +# Commands to strip libraries. +old_striplib="strip --strip-debug" +striplib="strip --strip-unneeded" + + +# The linker used to build libraries. +LD="/usr/bin/ld" + +# How to create reloadable object files. +reload_flag=" -r" +reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" + +# Commands used to build an old-style archive. +old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$tool_oldlib" + +# A language specific compiler. +CC="gcc" + +# Is the compiler the GNU compiler? +with_gcc=yes + +# Compiler flag to turn off builtin functions. +no_builtin_flag=" -fno-builtin" + +# Additional compiler flags for building library objects. +pic_flag=" -fPIC -DPIC" + +# How to pass a linker flag through the compiler. +wl="-Wl," + +# Compiler flag to prevent dynamic linking. +link_static_flag="-static" + +# Does compiler simultaneously support -c and -o options? +compiler_c_o="yes" + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=no + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=no + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="\$wl--export-dynamic" + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec="\$wl--whole-archive\$convenience \$wl--no-whole-archive" + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object="no" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="" + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds="" + +# Commands used to build a shared archive. +archive_cmds="\$CC -shared \$pic_flag \$libobjs \$deplibs \$compiler_flags \$wl-soname \$wl\$soname -o \$lib" +archive_expsym_cmds="echo \\\"{ global:\\\" > \$output_objdir/\$libname.ver~ + cat \$export_symbols | sed -e \\\"s/\\\\(.*\\\\)/\\\\1;/\\\" >> \$output_objdir/\$libname.ver~ + echo \\\"local: *; };\\\" >> \$output_objdir/\$libname.ver~ + \$CC -shared \$pic_flag \$libobjs \$deplibs \$compiler_flags \$wl-soname \$wl\$soname \$wl-version-script \$wl\$output_objdir/\$libname.ver -o \$lib" + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds="" +module_expsym_cmds="" + +# Whether we are building with GNU ld or not. +with_gnu_ld="yes" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="" + +# Flag that enforces no undefined symbols. +no_undefined_flag="" + +# Flag to hardcode $libdir into a binary during linking. +# This must work even if $libdir does not exist +hardcode_libdir_flag_spec="\$wl-rpath \$wl\$libdir" + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator="" + +# Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=no + +# Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting $shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=no + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=no + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=unsupported + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=no + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=no + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=no + +# Set to "yes" if exported symbols are required. +always_export_symbols=no + +# The commands to list exported symbols. +export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*" + +# Symbols that must always be exported. +include_expsyms="" + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds="" + +# Commands necessary for finishing linking programs. +postlink_cmds="" + +# Specify filename containing input files. +file_list_spec="" + +# How to hardcode a shared library path into an executable. +hardcode_action=immediate + +# ### END LIBTOOL CONFIG + + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +#! /bin/sh +## DO NOT EDIT - This file generated from ./build-aux/ltmain.in +## by inline-source v2014-01-03.01 + +# libtool (GNU libtool) 2.4.6 +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 + +# Copyright (C) 1996-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +PROGRAM=libtool +PACKAGE=libtool +VERSION="2.4.6 Debian-2.4.6-2" +package_revision=2.4.6 + + +## ------ ## +## Usage. ## +## ------ ## + +# Run './libtool --help' for help with using this script from the +# command line. + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# After configure completes, it has a better idea of some of the +# shell tools we need than the defaults used by the functions shared +# with bootstrap, so set those here where they can still be over- +# ridden by the user, but otherwise take precedence. + +: ${AUTOCONF="autoconf"} +: ${AUTOMAKE="automake"} + + +## -------------------------- ## +## Source external libraries. ## +## -------------------------- ## + +# Much of our low-level functionality needs to be sourced from external +# libraries, which are installed to $pkgauxdir. + +# Set a version string for this script. +scriptversion=2015-01-20.17; # UTC + +# General shell script boiler plate, and helper functions. +# Written by Gary V. Vaughan, 2004 + +# Copyright (C) 2004-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +# As a special exception to the GNU General Public License, if you distribute +# this file as part of a program or library that is built using GNU Libtool, +# you may include this file under the same distribution terms that you use +# for the rest of that program. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# Evaluate this file near the top of your script to gain access to +# the functions and variables defined here: +# +# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh +# +# If you need to override any of the default environment variable +# settings, do that before evaluating this file. + + +## -------------------- ## +## Shell normalisation. ## +## -------------------- ## + +# Some shells need a little help to be as Bourne compatible as possible. +# Before doing anything else, make sure all that help has been provided! + +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac +fi + +# NLS nuisances: We save the old values in case they are required later. +_G_user_locale= +_G_safe_locale= +for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test set = \"\${$_G_var+set}\"; then + save_$_G_var=\$$_G_var + $_G_var=C + export $_G_var + _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" + _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" + fi" +done + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Make sure IFS has a sensible default +sp=' ' +nl=' +' +IFS="$sp $nl" + +# There are apparently some retarded systems that use ';' as a PATH separator! +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + + +## ------------------------- ## +## Locate command utilities. ## +## ------------------------- ## + + +# func_executable_p FILE +# ---------------------- +# Check that FILE is an executable regular file. +func_executable_p () +{ + test -f "$1" && test -x "$1" +} + + +# func_path_progs PROGS_LIST CHECK_FUNC [PATH] +# -------------------------------------------- +# Search for either a program that responds to --version with output +# containing "GNU", or else returned by CHECK_FUNC otherwise, by +# trying all the directories in PATH with each of the elements of +# PROGS_LIST. +# +# CHECK_FUNC should accept the path to a candidate program, and +# set $func_check_prog_result if it truncates its output less than +# $_G_path_prog_max characters. +func_path_progs () +{ + _G_progs_list=$1 + _G_check_func=$2 + _G_PATH=${3-"$PATH"} + + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} + for _G_dir in $_G_PATH; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in $_G_progs_list; do + for _exeext in '' .EXE; do + _G_path_prog=$_G_dir/$_G_prog_name$_exeext + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; + *) $_G_check_func $_G_path_prog + func_path_progs_result=$func_check_prog_result + ;; + esac + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$func_path_progs_result" && { + echo "no acceptable sed could be found in \$PATH" >&2 + exit 1 + } +} + + +# We want to be able to use the functions in this file before configure +# has figured out where the best binaries are kept, which means we have +# to search for them ourselves - except when the results are already set +# where we skip the searches. + +# Unless the user overrides by setting SED, search the path for either GNU +# sed, or the sed that truncates its output the least. +test -z "$SED" && { + _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for _G_i in 1 2 3 4 5 6 7; do + _G_sed_script=$_G_sed_script$nl$_G_sed_script + done + echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed + _G_sed_script= + + func_check_prog_sed () + { + _G_path_prog=$1 + + _G_count=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo '' >> conftest.nl + "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + rm -f conftest.sed + SED=$func_path_progs_result +} + + +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the grep that truncates its output the least. +test -z "$GREP" && { + func_check_prog_grep () + { + _G_path_prog=$1 + + _G_count=0 + _G_path_prog_max=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + GREP=$func_path_progs_result +} + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# All uppercase variable names are used for environment variables. These +# variables can be overridden by the user before calling a script that +# uses them if a suitable command of that name is not already available +# in the command search PATH. + +: ${CP="cp -f"} +: ${ECHO="printf %s\n"} +: ${EGREP="$GREP -E"} +: ${FGREP="$GREP -F"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} + + +## -------------------- ## +## Useful sed snippets. ## +## -------------------- ## + +sed_dirname='s|/[^/]*$||' +sed_basename='s|^.*/||' + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Same as above, but do not quote variable references. +sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' + +# Sed substitution that converts a w32 file name or path +# that contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-'\' parameter expansions in output of sed_double_quote_subst that +# were '\'-ed in input to the same. If an odd number of '\' preceded a +# '$' in input to sed_double_quote_subst, that '$' was protected from +# expansion. Since each input '\' is now two '\'s, look for any number +# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. +_G_bs='\\' +_G_bs2='\\\\' +_G_bs4='\\\\\\\\' +_G_dollar='\$' +sed_double_backslash="\ + s/$_G_bs4/&\\ +/g + s/^$_G_bs2$_G_dollar/$_G_bs&/ + s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g + s/\n//g" + + +## ----------------- ## +## Global variables. ## +## ----------------- ## + +# Except for the global variables explicitly listed below, the following +# functions in the '^func_' namespace, and the '^require_' namespace +# variables initialised in the 'Resource management' section, sourcing +# this file will not pollute your global namespace with anything +# else. There's no portable way to scope variables in Bourne shell +# though, so actually running these functions will sometimes place +# results into a variable named after the function, and often use +# temporary variables in the '^_G_' namespace. If you are careful to +# avoid using those namespaces casually in your sourcing script, things +# should continue to work as you expect. And, of course, you can freely +# overwrite any of the functions or variables defined here before +# calling anything to customize them. + +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +# Allow overriding, eg assuming that you follow the convention of +# putting '$debug_cmd' at the start of all your functions, you can get +# bash to show function call trace with: +# +# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name +debug_cmd=${debug_cmd-":"} +exit_cmd=: + +# By convention, finish your script with: +# +# exit $exit_status +# +# so that you can set exit_status to non-zero if you want to indicate +# something went wrong during execution without actually bailing out at +# the point of failure. +exit_status=$EXIT_SUCCESS + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath=$0 + +# The name of this program. +progname=`$ECHO "$progpath" |$SED "$sed_basename"` + +# Make sure we have an absolute progpath for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` + progdir=`cd "$progdir" && pwd` + progpath=$progdir/$progname + ;; + *) + _G_IFS=$IFS + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS=$_G_IFS + test -x "$progdir/$progname" && break + done + IFS=$_G_IFS + test -n "$progdir" || progdir=`pwd` + progpath=$progdir/$progname + ;; +esac + + +## ----------------- ## +## Standard options. ## +## ----------------- ## + +# The following options affect the operation of the functions defined +# below, and should be set appropriately depending on run-time para- +# meters passed on the command line. + +opt_dry_run=false +opt_quiet=false +opt_verbose=false + +# Categories 'all' and 'none' are always available. Append any others +# you will pass as the first argument to func_warning from your own +# code. +warning_categories= + +# By default, display warnings according to 'opt_warning_types'. Set +# 'warning_func' to ':' to elide all warnings, or func_fatal_error to +# treat the next displayed warning as a fatal error. +warning_func=func_warn_and_continue + +# Set to 'all' to display all warnings, 'none' to suppress all +# warnings, or a space delimited list of some subset of +# 'warning_categories' to display only the listed warnings. +opt_warning_types=all + + +## -------------------- ## +## Resource management. ## +## -------------------- ## + +# This section contains definitions for functions that each ensure a +# particular resource (a file, or a non-empty configuration variable for +# example) is available, and if appropriate to extract default values +# from pertinent package files. Call them using their associated +# 'require_*' variable to ensure that they are executed, at most, once. +# +# It's entirely deliberate that calling these functions can set +# variables that don't obey the namespace limitations obeyed by the rest +# of this file, in order that that they be as useful as possible to +# callers. + + +# require_term_colors +# ------------------- +# Allow display of bold text on terminals that support it. +require_term_colors=func_require_term_colors +func_require_term_colors () +{ + $debug_cmd + + test -t 1 && { + # COLORTERM and USE_ANSI_COLORS environment variables take + # precedence, because most terminfo databases neglect to describe + # whether color sequences are supported. + test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} + + if test 1 = "$USE_ANSI_COLORS"; then + # Standard ANSI escape sequences + tc_reset='' + tc_bold=''; tc_standout='' + tc_red=''; tc_green='' + tc_blue=''; tc_cyan='' + else + # Otherwise trust the terminfo database after all. + test -n "`tput sgr0 2>/dev/null`" && { + tc_reset=`tput sgr0` + test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` + tc_standout=$tc_bold + test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` + test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` + test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` + test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` + test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` + } + fi + } + + require_term_colors=: +} + + +## ----------------- ## +## Function library. ## +## ----------------- ## + +# This section contains a variety of useful functions to call in your +# scripts. Take note of the portable wrappers for features provided by +# some modern shells, which will fall back to slower equivalents on +# less featureful shells. + + +# func_append VAR VALUE +# --------------------- +# Append VALUE onto the existing contents of VAR. + + # We should try to minimise forks, especially on Windows where they are + # unreasonably slow, so skip the feature probes when bash or zsh are + # being used: + if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then + : ${_G_HAVE_ARITH_OP="yes"} + : ${_G_HAVE_XSI_OPS="yes"} + # The += operator was introduced in bash 3.1 + case $BASH_VERSION in + [12].* | 3.0 | 3.0*) ;; + *) + : ${_G_HAVE_PLUSEQ_OP="yes"} + ;; + esac + fi + + # _G_HAVE_PLUSEQ_OP + # Can be empty, in which case the shell is probed, "yes" if += is + # useable or anything else if it does not work. + test -z "$_G_HAVE_PLUSEQ_OP" \ + && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ + && _G_HAVE_PLUSEQ_OP=yes + +if test yes = "$_G_HAVE_PLUSEQ_OP" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_append () + { + $debug_cmd + + eval "$1+=\$2" + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_append () + { + $debug_cmd + + eval "$1=\$$1\$2" + } +fi + + +# func_append_quoted VAR VALUE +# ---------------------------- +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +if test yes = "$_G_HAVE_PLUSEQ_OP"; then + eval 'func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1+=\\ \$func_quote_for_eval_result" + }' +else + func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1=\$$1\\ \$func_quote_for_eval_result" + } +fi + + +# func_append_uniq VAR VALUE +# -------------------------- +# Append unique VALUE onto the existing contents of VAR, assuming +# entries are delimited by the first character of VALUE. For example: +# +# func_append_uniq options " --another-option option-argument" +# +# will only append to $options if " --another-option option-argument " +# is not already present somewhere in $options already (note spaces at +# each end implied by leading space in second argument). +func_append_uniq () +{ + $debug_cmd + + eval _G_current_value='`$ECHO $'$1'`' + _G_delim=`expr "$2" : '\(.\)'` + + case $_G_delim$_G_current_value$_G_delim in + *"$2$_G_delim"*) ;; + *) func_append "$@" ;; + esac +} + + +# func_arith TERM... +# ------------------ +# Set func_arith_result to the result of evaluating TERMs. + test -z "$_G_HAVE_ARITH_OP" \ + && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ + && _G_HAVE_ARITH_OP=yes + +if test yes = "$_G_HAVE_ARITH_OP"; then + eval 'func_arith () + { + $debug_cmd + + func_arith_result=$(( $* )) + }' +else + func_arith () + { + $debug_cmd + + func_arith_result=`expr "$@"` + } +fi + + +# func_basename FILE +# ------------------ +# Set func_basename_result to FILE with everything up to and including +# the last / stripped. +if test yes = "$_G_HAVE_XSI_OPS"; then + # If this shell supports suffix pattern removal, then use it to avoid + # forking. Hide the definitions single quotes in case the shell chokes + # on unsupported syntax... + _b='func_basename_result=${1##*/}' + _d='case $1 in + */*) func_dirname_result=${1%/*}$2 ;; + * ) func_dirname_result=$3 ;; + esac' + +else + # ...otherwise fall back to using sed. + _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' + _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` + if test "X$func_dirname_result" = "X$1"; then + func_dirname_result=$3 + else + func_append func_dirname_result "$2" + fi' +fi + +eval 'func_basename () +{ + $debug_cmd + + '"$_b"' +}' + + +# func_dirname FILE APPEND NONDIR_REPLACEMENT +# ------------------------------------------- +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +eval 'func_dirname () +{ + $debug_cmd + + '"$_d"' +}' + + +# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT +# -------------------------------------------------------- +# Perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# For efficiency, we do not delegate to the functions above but instead +# duplicate the functionality here. +eval 'func_dirname_and_basename () +{ + $debug_cmd + + '"$_b"' + '"$_d"' +}' + + +# func_echo ARG... +# ---------------- +# Echo program name prefixed message. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_echo_all ARG... +# -------------------- +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + + +# func_echo_infix_1 INFIX ARG... +# ------------------------------ +# Echo program name, followed by INFIX on the first line, with any +# additional lines not showing INFIX. +func_echo_infix_1 () +{ + $debug_cmd + + $require_term_colors + + _G_infix=$1; shift + _G_indent=$_G_infix + _G_prefix="$progname: $_G_infix: " + _G_message=$* + + # Strip color escape sequences before counting printable length + for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" + do + test -n "$_G_tc" && { + _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` + _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` + } + done + _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes + + func_echo_infix_1_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_infix_1_IFS + $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 + _G_prefix=$_G_indent + done + IFS=$func_echo_infix_1_IFS +} + + +# func_error ARG... +# ----------------- +# Echo program name prefixed message to standard error. +func_error () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 +} + + +# func_fatal_error ARG... +# ----------------------- +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + $debug_cmd + + func_error "$*" + exit $EXIT_FAILURE +} + + +# func_grep EXPRESSION FILENAME +# ----------------------------- +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $debug_cmd + + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_len STRING +# --------------- +# Set func_len_result to the length of STRING. STRING may not +# start with a hyphen. + test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_len () + { + $debug_cmd + + func_len_result=${#1} + }' +else + func_len () + { + $debug_cmd + + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` + } +fi + + +# func_mkdir_p DIRECTORY-PATH +# --------------------------- +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + $debug_cmd + + _G_directory_path=$1 + _G_dir_list= + + if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then + + # Protect directory names starting with '-' + case $_G_directory_path in + -*) _G_directory_path=./$_G_directory_path ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$_G_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + _G_dir_list=$_G_directory_path:$_G_dir_list + + # If the last portion added has no slash in it, the list is done + case $_G_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` + done + _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` + + func_mkdir_p_IFS=$IFS; IFS=: + for _G_dir in $_G_dir_list; do + IFS=$func_mkdir_p_IFS + # mkdir can fail with a 'File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$_G_dir" 2>/dev/null || : + done + IFS=$func_mkdir_p_IFS + + # Bail out if we (or some other process) failed to create a directory. + test -d "$_G_directory_path" || \ + func_fatal_error "Failed to create '$1'" + fi +} + + +# func_mktempdir [BASENAME] +# ------------------------- +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, BASENAME is the basename for that directory. +func_mktempdir () +{ + $debug_cmd + + _G_template=${TMPDIR-/tmp}/${1-$progname} + + if test : = "$opt_dry_run"; then + # Return a directory name, but don't create it in dry-run mode + _G_tmpdir=$_G_template-$$ + else + + # If mktemp works, use that first and foremost + _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` + + if test ! -d "$_G_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + _G_tmpdir=$_G_template-${RANDOM-0}$$ + + func_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$_G_tmpdir" + umask $func_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$_G_tmpdir" || \ + func_fatal_error "cannot create temporary directory '$_G_tmpdir'" + fi + + $ECHO "$_G_tmpdir" +} + + +# func_normal_abspath PATH +# ------------------------ +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +func_normal_abspath () +{ + $debug_cmd + + # These SED scripts presuppose an absolute path with a trailing slash. + _G_pathcar='s|^/\([^/]*\).*$|\1|' + _G_pathcdr='s|^/[^/]*||' + _G_removedotparts=':dotsl + s|/\./|/|g + t dotsl + s|/\.$|/|' + _G_collapseslashes='s|/\{1,\}|/|g' + _G_finalslash='s|/*$|/|' + + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` + while :; do + # Processed it all yet? + if test / = "$func_normal_abspath_tpath"; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result"; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + + +# func_notquiet ARG... +# -------------------- +# Echo program name prefixed message only when not in quiet mode. +func_notquiet () +{ + $debug_cmd + + $opt_quiet || func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + + +# func_relative_path SRCDIR DSTDIR +# -------------------------------- +# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. +func_relative_path () +{ + $debug_cmd + + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=$func_dirname_result + if test -z "$func_relative_path_tlibdir"; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test -n "$func_stripname_result"; then + func_append func_relative_path_result "/$func_stripname_result" + fi + + # Normalisation. If bindir is libdir, return '.' else relative path. + if test -n "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + fi + + test -n "$func_relative_path_result" || func_relative_path_result=. + + : +} + + +# func_quote_for_eval ARG... +# -------------------------- +# Aesthetically quote ARGs to be evaled later. +# This function returns two values: +# i) func_quote_for_eval_result +# double-quoted, suitable for a subsequent eval +# ii) func_quote_for_eval_unquoted_result +# has all characters that are still active within double +# quotes backslashified. +func_quote_for_eval () +{ + $debug_cmd + + func_quote_for_eval_unquoted_result= + func_quote_for_eval_result= + while test 0 -lt $#; do + case $1 in + *[\\\`\"\$]*) + _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; + *) + _G_unquoted_arg=$1 ;; + esac + if test -n "$func_quote_for_eval_unquoted_result"; then + func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" + else + func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" + fi + + case $_G_unquoted_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_quoted_arg=\"$_G_unquoted_arg\" + ;; + *) + _G_quoted_arg=$_G_unquoted_arg + ;; + esac + + if test -n "$func_quote_for_eval_result"; then + func_append func_quote_for_eval_result " $_G_quoted_arg" + else + func_append func_quote_for_eval_result "$_G_quoted_arg" + fi + shift + done +} + + +# func_quote_for_expand ARG +# ------------------------- +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + $debug_cmd + + case $1 in + *[\\\`\"]*) + _G_arg=`$ECHO "$1" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; + *) + _G_arg=$1 ;; + esac + + case $_G_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_arg=\"$_G_arg\" + ;; + esac + + func_quote_for_expand_result=$_G_arg +} + + +# func_stripname PREFIX SUFFIX NAME +# --------------------------------- +# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_stripname () + { + $debug_cmd + + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary variable first. + func_stripname_result=$3 + func_stripname_result=${func_stripname_result#"$1"} + func_stripname_result=${func_stripname_result%"$2"} + }' +else + func_stripname () + { + $debug_cmd + + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; + esac + } +fi + + +# func_show_eval CMD [FAIL_EXP] +# ----------------------------- +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + func_quote_for_expand "$_G_cmd" + eval "func_notquiet $func_quote_for_expand_result" + + $opt_dry_run || { + eval "$_G_cmd" + _G_status=$? + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_show_eval_locale CMD [FAIL_EXP] +# ------------------------------------ +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + $opt_quiet || { + func_quote_for_expand "$_G_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + $opt_dry_run || { + eval "$_G_user_locale + $_G_cmd" + _G_status=$? + eval "$_G_safe_locale" + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_tr_sh +# ---------- +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + $debug_cmd + + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_verbose ARG... +# ------------------- +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $debug_cmd + + $opt_verbose && func_echo "$*" + + : +} + + +# func_warn_and_continue ARG... +# ----------------------------- +# Echo program name prefixed warning message to standard error. +func_warn_and_continue () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 +} + + +# func_warning CATEGORY ARG... +# ---------------------------- +# Echo program name prefixed warning message to standard error. Warning +# messages can be filtered according to CATEGORY, where this function +# elides messages where CATEGORY is not listed in the global variable +# 'opt_warning_types'. +func_warning () +{ + $debug_cmd + + # CATEGORY must be in the warning_categories list! + case " $warning_categories " in + *" $1 "*) ;; + *) func_internal_error "invalid warning category '$1'" ;; + esac + + _G_category=$1 + shift + + case " $opt_warning_types " in + *" $_G_category "*) $warning_func ${1+"$@"} ;; + esac +} + + +# func_sort_ver VER1 VER2 +# ----------------------- +# 'sort -V' is not generally available. +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +func_sort_ver () +{ + $debug_cmd + + printf '%s\n%s\n' "$1" "$2" \ + | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n +} + +# func_lt_ver PREV CURR +# --------------------- +# Return true if PREV and CURR are in the correct order according to +# func_sort_ver, otherwise false. Use it like this: +# +# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." +func_lt_ver () +{ + $debug_cmd + + test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: +#! /bin/sh + +# Set a version string for this script. +scriptversion=2014-01-07.03; # UTC + +# A portable, pluggable option parser for Bourne shell. +# Written by Gary V. Vaughan, 2010 + +# Copyright (C) 2010-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# This file is a library for parsing options in your shell scripts along +# with assorted other useful supporting features that you can make use +# of too. +# +# For the simplest scripts you might need only: +# +# #!/bin/sh +# . relative/path/to/funclib.sh +# . relative/path/to/options-parser +# scriptversion=1.0 +# func_options ${1+"$@"} +# eval set dummy "$func_options_result"; shift +# ...rest of your script... +# +# In order for the '--version' option to work, you will need to have a +# suitably formatted comment like the one at the top of this file +# starting with '# Written by ' and ending with '# warranty; '. +# +# For '-h' and '--help' to work, you will also need a one line +# description of your script's purpose in a comment directly above the +# '# Written by ' line, like the one at the top of this file. +# +# The default options also support '--debug', which will turn on shell +# execution tracing (see the comment above debug_cmd below for another +# use), and '--verbose' and the func_verbose function to allow your script +# to display verbose messages only when your user has specified +# '--verbose'. +# +# After sourcing this file, you can plug processing for additional +# options by amending the variables from the 'Configuration' section +# below, and following the instructions in the 'Option parsing' +# section further down. + +## -------------- ## +## Configuration. ## +## -------------- ## + +# You should override these variables in your script after sourcing this +# file so that they reflect the customisations you have added to the +# option parser. + +# The usage line for option parsing errors and the start of '-h' and +# '--help' output messages. You can embed shell variables for delayed +# expansion at the time the message is displayed, but you will need to +# quote other shell meta-characters carefully to prevent them being +# expanded when the contents are evaled. +usage='$progpath [OPTION]...' + +# Short help message in response to '-h' and '--help'. Add to this or +# override it after sourcing this library to reflect the full set of +# options your script accepts. +usage_message="\ + --debug enable verbose shell tracing + -W, --warnings=CATEGORY + report the warnings falling in CATEGORY [all] + -v, --verbose verbosely report processing + --version print version information and exit + -h, --help print short or long help message and exit +" + +# Additional text appended to 'usage_message' in response to '--help'. +long_help_message=" +Warning categories include: + 'all' show all warnings + 'none' turn off all the warnings + 'error' warnings are treated as fatal errors" + +# Help message printed before fatal option parsing errors. +fatal_help="Try '\$progname --help' for more information." + + + +## ------------------------- ## +## Hook function management. ## +## ------------------------- ## + +# This section contains functions for adding, removing, and running hooks +# to the main code. A hook is just a named list of of function, that can +# be run in order later on. + +# func_hookable FUNC_NAME +# ----------------------- +# Declare that FUNC_NAME will run hooks added with +# 'func_add_hook FUNC_NAME ...'. +func_hookable () +{ + $debug_cmd + + func_append hookable_fns " $1" +} + + +# func_add_hook FUNC_NAME HOOK_FUNC +# --------------------------------- +# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must +# first have been declared "hookable" by a call to 'func_hookable'. +func_add_hook () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not accept hook functions." ;; + esac + + eval func_append ${1}_hooks '" $2"' +} + + +# func_remove_hook FUNC_NAME HOOK_FUNC +# ------------------------------------ +# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. +func_remove_hook () +{ + $debug_cmd + + eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' +} + + +# func_run_hooks FUNC_NAME [ARG]... +# --------------------------------- +# Run all hook functions registered to FUNC_NAME. +# It is assumed that the list of hook functions contains nothing more +# than a whitespace-delimited list of legal shell function names, and +# no effort is wasted trying to catch shell meta-characters or preserve +# whitespace. +func_run_hooks () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not support hook funcions.n" ;; + esac + + eval _G_hook_fns=\$$1_hooks; shift + + for _G_hook in $_G_hook_fns; do + eval $_G_hook '"$@"' + + # store returned options list back into positional + # parameters for next 'cmd' execution. + eval _G_hook_result=\$${_G_hook}_result + eval set dummy "$_G_hook_result"; shift + done + + func_quote_for_eval ${1+"$@"} + func_run_hooks_result=$func_quote_for_eval_result +} + + + +## --------------- ## +## Option parsing. ## +## --------------- ## + +# In order to add your own option parsing hooks, you must accept the +# full positional parameter list in your hook function, remove any +# options that you action, and then pass back the remaining unprocessed +# options in '<hooked_function_name>_result', escaped suitably for +# 'eval'. Like this: +# +# my_options_prep () +# { +# $debug_cmd +# +# # Extend the existing usage message. +# usage_message=$usage_message' +# -s, --silent don'\''t print informational messages +# ' +# +# func_quote_for_eval ${1+"$@"} +# my_options_prep_result=$func_quote_for_eval_result +# } +# func_add_hook func_options_prep my_options_prep +# +# +# my_silent_option () +# { +# $debug_cmd +# +# # Note that for efficiency, we parse as many options as we can +# # recognise in a loop before passing the remainder back to the +# # caller on the first unrecognised argument we encounter. +# while test $# -gt 0; do +# opt=$1; shift +# case $opt in +# --silent|-s) opt_silent=: ;; +# # Separate non-argument short options: +# -s*) func_split_short_opt "$_G_opt" +# set dummy "$func_split_short_opt_name" \ +# "-$func_split_short_opt_arg" ${1+"$@"} +# shift +# ;; +# *) set dummy "$_G_opt" "$*"; shift; break ;; +# esac +# done +# +# func_quote_for_eval ${1+"$@"} +# my_silent_option_result=$func_quote_for_eval_result +# } +# func_add_hook func_parse_options my_silent_option +# +# +# my_option_validation () +# { +# $debug_cmd +# +# $opt_silent && $opt_verbose && func_fatal_help "\ +# '--silent' and '--verbose' options are mutually exclusive." +# +# func_quote_for_eval ${1+"$@"} +# my_option_validation_result=$func_quote_for_eval_result +# } +# func_add_hook func_validate_options my_option_validation +# +# You'll alse need to manually amend $usage_message to reflect the extra +# options you parse. It's preferable to append if you can, so that +# multiple option parsing hooks can be added safely. + + +# func_options [ARG]... +# --------------------- +# All the functions called inside func_options are hookable. See the +# individual implementations for details. +func_hookable func_options +func_options () +{ + $debug_cmd + + func_options_prep ${1+"$@"} + eval func_parse_options \ + ${func_options_prep_result+"$func_options_prep_result"} + eval func_validate_options \ + ${func_parse_options_result+"$func_parse_options_result"} + + eval func_run_hooks func_options \ + ${func_validate_options_result+"$func_validate_options_result"} + + # save modified positional parameters for caller + func_options_result=$func_run_hooks_result +} + + +# func_options_prep [ARG]... +# -------------------------- +# All initialisations required before starting the option parse loop. +# Note that when calling hook functions, we pass through the list of +# positional parameters. If a hook function modifies that list, and +# needs to propogate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before +# returning. +func_hookable func_options_prep +func_options_prep () +{ + $debug_cmd + + # Option defaults: + opt_verbose=false + opt_warning_types= + + func_run_hooks func_options_prep ${1+"$@"} + + # save modified positional parameters for caller + func_options_prep_result=$func_run_hooks_result +} + + +# func_parse_options [ARG]... +# --------------------------- +# The main option parsing loop. +func_hookable func_parse_options +func_parse_options () +{ + $debug_cmd + + func_parse_options_result= + + # this just eases exit handling + while test $# -gt 0; do + # Defer to hook functions for initial option parsing, so they + # get priority in the event of reusing an option name. + func_run_hooks func_parse_options ${1+"$@"} + + # Adjust func_parse_options positional parameters to match + eval set dummy "$func_run_hooks_result"; shift + + # Break out of the loop if we already parsed every option. + test $# -gt 0 || break + + _G_opt=$1 + shift + case $_G_opt in + --debug|-x) debug_cmd='set -x' + func_echo "enabling shell trace mode" + $debug_cmd + ;; + + --no-warnings|--no-warning|--no-warn) + set dummy --warnings none ${1+"$@"} + shift + ;; + + --warnings|--warning|-W) + test $# = 0 && func_missing_arg $_G_opt && break + case " $warning_categories $1" in + *" $1 "*) + # trailing space prevents matching last $1 above + func_append_uniq opt_warning_types " $1" + ;; + *all) + opt_warning_types=$warning_categories + ;; + *none) + opt_warning_types=none + warning_func=: + ;; + *error) + opt_warning_types=$warning_categories + warning_func=func_fatal_error + ;; + *) + func_fatal_error \ + "unsupported warning category: '$1'" + ;; + esac + shift + ;; + + --verbose|-v) opt_verbose=: ;; + --version) func_version ;; + -\?|-h) func_usage ;; + --help) func_help ;; + + # Separate optargs to long options (plugins may need this): + --*=*) func_split_equals "$_G_opt" + set dummy "$func_split_equals_lhs" \ + "$func_split_equals_rhs" ${1+"$@"} + shift + ;; + + # Separate optargs to short options: + -W*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-v*|-x*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + func_parse_options_result=$func_quote_for_eval_result +} + + +# func_validate_options [ARG]... +# ------------------------------ +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +func_hookable func_validate_options +func_validate_options () +{ + $debug_cmd + + # Display all warnings if -W was not given. + test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" + + func_run_hooks func_validate_options ${1+"$@"} + + # Bail if the options were screwed! + $exit_cmd $EXIT_FAILURE + + # save modified positional parameters for caller + func_validate_options_result=$func_run_hooks_result +} + + + +## ----------------- ## +## Helper functions. ## +## ----------------- ## + +# This section contains the helper functions used by the rest of the +# hookable option parser framework in ascii-betical order. + + +# func_fatal_help ARG... +# ---------------------- +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + eval \$ECHO \""$fatal_help"\" + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + + +# func_help +# --------- +# Echo long help message to standard output and exit. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message" + exit 0 +} + + +# func_missing_arg ARGNAME +# ------------------------ +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $debug_cmd + + func_error "Missing argument for '$1'." + exit_cmd=exit +} + + +# func_split_equals STRING +# ------------------------ +# Set func_split_equals_lhs and func_split_equals_rhs shell variables after +# splitting STRING at the '=' sign. +test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=${1%%=*} + func_split_equals_rhs=${1#*=} + test "x$func_split_equals_lhs" = "x$1" \ + && func_split_equals_rhs= + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` + func_split_equals_rhs= + test "x$func_split_equals_lhs" = "x$1" \ + || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` + } +fi #func_split_equals + + +# func_split_short_opt SHORTOPT +# ----------------------------- +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"} + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` + } +fi #func_split_short_opt + + +# func_usage +# ---------- +# Echo short help message to standard output and exit. +func_usage () +{ + $debug_cmd + + func_usage_message + $ECHO "Run '$progname --help |${PAGER-more}' for full usage" + exit 0 +} + + +# func_usage_message +# ------------------ +# Echo short help message to standard output. +func_usage_message () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + echo + $SED -n 's|^# || + /^Written by/{ + x;p;x + } + h + /^Written by/q' < "$progpath" + echo + eval \$ECHO \""$usage_message"\" +} + + +# func_version +# ------------ +# Echo version message to standard output and exit. +func_version () +{ + $debug_cmd + + printf '%s\n' "$progname $scriptversion" + $SED -n ' + /(C)/!b go + :more + /\./!{ + N + s|\n# | | + b more + } + :go + /^# Written by /,/# warranty; / { + s|^# || + s|^# *$|| + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + p + } + /^# Written by / { + s|^# || + p + } + /^warranty; /q' < "$progpath" + + exit $? +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: + +# Set a version string. +scriptversion='(GNU libtool) 2.4.6' + + +# func_echo ARG... +# ---------------- +# Libtool also displays the current mode in messages, so override +# funclib.sh func_echo with this custom definition. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () +{ + $debug_cmd + + $warning_func ${1+"$@"} +} + + +## ---------------- ## +## Options parsing. ## +## ---------------- ## + +# Hook in the functions to make sure our own options are parsed during +# the option parsing loop. + +usage='$progpath [OPTION]... [MODE-ARG]...' + +# Short help message in response to '-h'. +usage_message="Options: + --config show all configuration variables + --debug enable verbose shell tracing + -n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --mode=MODE use operation mode MODE + --no-warnings equivalent to '-Wnone' + --preserve-dup-deps don't remove duplicate dependency libraries + --quiet, --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + -v, --verbose print more informational messages than default + --version print version information + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] + -h, --help, --help-all print short, long, or detailed help message +" + +# Additional text appended to 'usage_message' in response to '--help'. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. When passed as first option, +'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. +Try '$progname --help --mode=MODE' for a more detailed description of MODE. + +When reporting a bug, please describe a test case to reproduce it and +include the following information: + + host-triplet: $host + shell: $SHELL + compiler: $LTCC + compiler flags: $LTCFLAGS + linker: $LD (gnu? $with_gnu_ld) + version: $progname $scriptversion Debian-2.4.6-2 + automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` + autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` + +Report bugs to <bug-libtool@gnu.org>. +GNU libtool home page: <http://www.gnu.org/s/libtool/>. +General help using GNU software: <http://www.gnu.org/gethelp/>." + exit 0 +} + + +# func_lo2o OBJECT-NAME +# --------------------- +# Transform OBJECT-NAME from a '.lo' suffix to the platform specific +# object suffix. + +lo2o=s/\\.lo\$/.$objext/ +o2lo=s/\\.$objext\$/.lo/ + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_lo2o () + { + case $1 in + *.lo) func_lo2o_result=${1%.lo}.$objext ;; + * ) func_lo2o_result=$1 ;; + esac + }' + + # func_xform LIBOBJ-OR-SOURCE + # --------------------------- + # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) + # suffix to a '.lo' libtool-object suffix. + eval 'func_xform () + { + func_xform_result=${1%.*}.lo + }' +else + # ...otherwise fall back to using sed. + func_lo2o () + { + func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` + } + + func_xform () + { + func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` + } +fi + + +# func_fatal_configuration ARG... +# ------------------------------- +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func__fatal_error ${1+"$@"} \ + "See the $PACKAGE documentation for more information." \ + "Fatal configuration error." +} + + +# func_config +# ----------- +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + + +# func_features +# ------------- +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test yes = "$build_libtool_libs"; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test yes = "$build_old_libs"; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + + +# func_enable_tag TAGNAME +# ----------------------- +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname=$1 + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf=/$re_begincf/,/$re_endcf/p + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + + +# func_check_version_match +# ------------------------ +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# libtool_options_prep [ARG]... +# ----------------------------- +# Preparation for options parsed by libtool. +libtool_options_prep () +{ + $debug_mode + + # Option defaults: + opt_config=false + opt_dlopen= + opt_dry_run=false + opt_help=false + opt_mode= + opt_preserve_dup_deps=false + opt_quiet=false + + nonopt= + preserve_args= + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Pass back the list of options. + func_quote_for_eval ${1+"$@"} + libtool_options_prep_result=$func_quote_for_eval_result +} +func_add_hook func_options_prep libtool_options_prep + + +# libtool_parse_options [ARG]... +# --------------------------------- +# Provide handling for libtool specific options. +libtool_parse_options () +{ + $debug_cmd + + # Perform our own loop to consume as many options as possible in + # each iteration. + while test $# -gt 0; do + _G_opt=$1 + shift + case $_G_opt in + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + + --config) func_config ;; + + --dlopen|-dlopen) + opt_dlopen="${opt_dlopen+$opt_dlopen +}$1" + shift + ;; + + --preserve-dup-deps) + opt_preserve_dup_deps=: ;; + + --features) func_features ;; + + --finish) set dummy --mode finish ${1+"$@"}; shift ;; + + --help) opt_help=: ;; + + --help-all) opt_help=': help-all' ;; + + --mode) test $# = 0 && func_missing_arg $_G_opt && break + opt_mode=$1 + case $1 in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $_G_opt" + exit_cmd=exit + break + ;; + esac + shift + ;; + + --no-silent|--no-quiet) + opt_quiet=false + func_append preserve_args " $_G_opt" + ;; + + --no-warnings|--no-warning|--no-warn) + opt_warning=false + func_append preserve_args " $_G_opt" + ;; + + --no-verbose) + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --silent|--quiet) + opt_quiet=: + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --tag) test $# = 0 && func_missing_arg $_G_opt && break + opt_tag=$1 + func_append preserve_args " $_G_opt $1" + func_enable_tag "$1" + shift + ;; + + --verbose|-v) opt_quiet=false + opt_verbose=: + func_append preserve_args " $_G_opt" + ;; + + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + libtool_parse_options_result=$func_quote_for_eval_result +} +func_add_hook func_parse_options libtool_parse_options + + + +# libtool_validate_options [ARG]... +# --------------------------------- +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +libtool_validate_options () +{ + # save first non-option argument + if test 0 -lt $#; then + nonopt=$1 + shift + fi + + # preserve --debug + test : = "$debug_cmd" || func_append preserve_args " --debug" + + case $host in + # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 + # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 + *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + test yes != "$build_libtool_libs" \ + && test yes != "$build_old_libs" \ + && func_fatal_configuration "not configured to build any kind of library" + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test execute != "$opt_mode"; then + func_error "unrecognized option '-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help=$help + help="Try '$progname --help --mode=$opt_mode' for more information." + } + + # Pass back the unparsed argument list + func_quote_for_eval ${1+"$@"} + libtool_validate_options_result=$func_quote_for_eval_result +} +func_add_hook func_validate_options libtool_validate_options + + +# Process options as early as possible so that --help and --version +# can return quickly. +func_options ${1+"$@"} +eval set dummy "$func_options_result"; shift + + + +## ----------- ## +## Main. ## +## ----------- ## + +magic='%%%MAGIC variable%%%' +magic_exe='%%%MAGIC EXE variable%%%' + +# Global variables. +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# func_generated_by_libtool +# True iff stdin has been generated by Libtool. This function is only +# a basic sanity check; it will hardly flush out determined imposters. +func_generated_by_libtool_p () +{ + $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if 'file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case $lalib_p_line in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test yes = "$lalib_p" +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + test -f "$1" && + $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $debug_cmd + + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# 'FILE.' does not work on cygwin managed mounts. +func_source () +{ + $debug_cmd + + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case $lt_sysroot:$1 in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result='='$func_stripname_result + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $debug_cmd + + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with '--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=$1 + if test yes = "$build_libtool_libs"; then + write_lobj=\'$2\' + else + write_lobj=none + fi + + if test yes = "$build_old_libs"; then + write_oldobj=\'$3\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T <<EOF +# $write_libobj - a libtool object file +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object=$write_lobj + +# Name of the non-PIC object +non_pic_object=$write_oldobj + +EOF + $MV "${write_libobj}T" "$write_libobj" + } +} + + +################################################## +# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # +################################################## + +# func_convert_core_file_wine_to_w32 ARG +# Helper function used by file name conversion functions when $build is *nix, +# and $host is mingw, cygwin, or some other w32 environment. Relies on a +# correctly configured wine environment available, with the winepath program +# in $build's $PATH. +# +# ARG is the $build file name to be converted to w32 format. +# Result is available in $func_convert_core_file_wine_to_w32_result, and will +# be empty on error (or when ARG is empty) +func_convert_core_file_wine_to_w32 () +{ + $debug_cmd + + func_convert_core_file_wine_to_w32_result=$1 + if test -n "$1"; then + # Unfortunately, winepath does not exit with a non-zero error code, so we + # are forced to check the contents of stdout. On the other hand, if the + # command is not found, the shell will set an exit code of 127 and print + # *an error message* to stdout. So we must check for both error code of + # zero AND non-empty stdout, which explains the odd construction: + func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` + if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $debug_cmd + + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result= + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result"; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $debug_cmd + + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $debug_cmd + + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $debug_cmd + + if test -z "$2" && test -n "$1"; then + func_error "Could not determine host file name corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result=$1 + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $debug_cmd + + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " '$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result=$3 + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $debug_cmd + + case $4 in + $1 ) func_to_host_path_result=$3$func_to_host_path_result + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via '$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $debug_cmd + + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $debug_cmd + + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result=$1 +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result=$func_convert_core_msys_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result=$func_convert_core_file_wine_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via '$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $debug_cmd + + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd=func_convert_path_$func_stripname_result + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $debug_cmd + + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result=$1 +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_msys_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_path_wine_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_dll_def_p FILE +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with _LT_DLL_DEF_P in libtool.m4 +func_dll_def_p () +{ + $debug_cmd + + func_dll_def_p_tmp=`$SED -n \ + -e 's/^[ ]*//' \ + -e '/^\(;.*\)*$/d' \ + -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ + -e q \ + "$1"` + test DEF = "$func_dll_def_p_tmp" +} + + +# func_mode_compile arg... +func_mode_compile () +{ + $debug_cmd + + # Get the compilation command and the source file. + base_compile= + srcfile=$nonopt # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg=$arg + arg_mode=normal + ;; + + target ) + libobj=$arg + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify '-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs=$IFS; IFS=, + for arg in $args; do + IFS=$save_ifs + func_append_quoted lastarg "$arg" + done + IFS=$save_ifs + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg=$srcfile + srcfile=$arg + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with '-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj=$func_basename_result + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from '$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test yes = "$build_libtool_libs" \ + || func_fatal_configuration "cannot build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name '$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname=$func_basename_result + xdir=$func_dirname_result + lobj=$xdir$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test yes = "$build_old_libs"; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test no = "$compiler_c_o"; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext + lockfile=$output_obj.lock + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test yes = "$need_locks"; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test warn = "$need_locks"; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test yes = "$build_libtool_libs"; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test no != "$pic_mode"; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test yes = "$suppress_opt"; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test yes = "$build_old_libs"; then + if test yes != "$pic_mode"; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test yes = "$compiler_c_o"; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test no != "$need_locks"; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test compile = "$opt_mode" && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a '.o' file suitable for static linking + -static only build a '.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a 'standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix '.c' with the +library object suffix, '.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to '-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the '--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the 'install' or 'cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE use a list of object files found in FILE to specify objects + -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with '-') are ignored. + +Every other argument is treated as a filename. Files ending in '.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in '.la', then a libtool library is created, +only library objects ('.lo' files) may be specified, and '-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created +using 'ar' and 'ranlib', or on Windows using 'lib'. + +If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode '$opt_mode'" + ;; + esac + + echo + $ECHO "Try '$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test : = "$opt_help"; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | $SED -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + $SED '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $debug_cmd + + # The first argument is the command name. + cmd=$nonopt + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "'$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "'$file' was not linked with '-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir=$func_dirname_result + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir=$func_dirname_result + ;; + + *) + func_warning "'-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir=$absdir + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic=$magic + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file=$progdir/$program + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file=$progdir/$program + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if $opt_dry_run; then + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + else + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd=\$cmd$args + fi +} + +test execute = "$opt_mode" && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $debug_cmd + + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "'$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument '$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and '=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_quiet && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the '-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the '$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the '$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the '$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test finish = "$opt_mode" && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $debug_cmd + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac + then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=false + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=: ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test X-m = "X$prev" && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the '$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=: + if $isdir; then + destdir=$dest + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir=$func_dirname_result + destname=$func_basename_result + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "'$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "'$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir=$func_dirname_result + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking '$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname=$1 + shift + + srcname=$realname + test -n "$relink_command" && srcname=${realname}T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme=$stripme + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme= + ;; + esac + ;; + os2*) + case $realname in + *_dll.a) + tstripme= + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try 'ln -sf' first, because the 'ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib=$destdir/$realname + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name=$func_basename_result + instname=$dir/${name}i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest=$destfile + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to '$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test yes = "$build_old_libs"; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext= + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=.exe + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script '$wrapper'" + + finalize=: + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "'$lib' has not been installed in '$libdir'" + finalize=false + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test no = "$fast_install" && test -n "$relink_command"; then + $opt_dry_run || { + if $finalize; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file=$func_basename_result + outputname=$tmpdir/$file + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_quiet || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink '$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file=$outputname + else + func_warning "cannot relink '$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name=$func_basename_result + + # Set up the ranlib parameters. + oldlib=$destdir/$name + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run '$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test install = "$opt_mode" && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $debug_cmd + + my_outputname=$1 + my_originator=$2 + my_pic_p=${3-false} + my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms=${my_outputname}S.c + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist=$output_objdir/$my_outputname.nm + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* External symbol declarations for the compiler. */\ +" + + if test yes = "$dlself"; then + func_verbose "generating symbol list for '$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from '$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols=$output_objdir/$outputname.exp + $opt_dry_run || { + $RM $export_symbols + eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from '$dlprefile'" + func_basename "$dlprefile" + name=$func_basename_result + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename= + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname"; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename=$func_basename_result + else + # no lafile. user explicitly requested -dlpreopen <import library>. + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename"; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 </dev/null >/dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + func_show_eval '$RM "${nlist}I"' + if test -n "$global_symbol_to_import"; then + eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[];\ +" + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ +static void lt_syminit(void) +{ + LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; + for (; symbol->name; ++symbol) + {" + $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" + echo >> "$output_objdir/$my_dlsyms" "\ + } +}" + fi + echo >> "$output_objdir/$my_dlsyms" "\ +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{ {\"$my_originator\", (void *) 0}," + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ + {\"@INIT@\", (void *) <_syminit}," + fi + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + $my_pic_p && pic_flag_for_symtable=" $pic_flag" + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' + + # Transform the symbol file into the correct name. + symfileobj=$output_objdir/${my_outputname}S.$objext + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for '$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $debug_cmd + + win32_libid_type=unknown + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + case $nm_interface in + "MS dumpbin") + if func_cygming_ms_implib_p "$1" || + func_cygming_gnu_implib_p "$1" + then + win32_nmres=import + else + win32_nmres= + fi + ;; + *) + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s|.*|import| + p + q + } + }'` + ;; + esac + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $debug_cmd + + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $debug_cmd + + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive that possess that section. Heuristic: eliminate + # all those that have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $debug_cmd + + if func_cygming_gnu_implib_p "$1"; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1"; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result= + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $debug_cmd + + f_ex_an_ar_dir=$1; shift + f_ex_an_ar_oldlib=$1 + if test yes = "$lock_old_archive_extraction"; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test yes = "$lock_old_archive_extraction"; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $debug_cmd + + my_gentop=$1; shift + my_oldlibs=${1+"$@"} + my_oldobjs= + my_xlib= + my_xabs= + my_xdir= + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib=$func_basename_result + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir=$my_gentop/$my_xlib_u + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + func_basename "$darwin_archive" + darwin_base_archive=$func_basename_result + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches; do + func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" + $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" + cd "unfat-$$/$darwin_base_archive-$darwin_arch" + func_extract_an_archive "`pwd`" "$darwin_base_archive" + cd "$darwin_curdir" + $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result=$my_oldobjs +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory where it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test yes = "$fast_install"; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + \$ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat <<EOF + +/* $cwrappersource - temporary wrapper executable for $objdir/$outputname + Generated by $PROGRAM (GNU $PACKAGE) $VERSION + + The $output program cannot be directly executed until all the libtool + libraries that it depends on are installed. + + This wrapper executable should never be moved out of the build directory. + If it is, it will not operate correctly. +*/ +EOF + cat <<"EOF" +#ifdef _MSC_VER +# define _CRT_SECURE_NO_DEPRECATE 1 +#endif +#include <stdio.h> +#include <stdlib.h> +#ifdef _MSC_VER +# include <direct.h> +# include <process.h> +# include <io.h> +#else +# include <unistd.h> +# include <stdint.h> +# ifdef __CYGWIN__ +# include <io.h> +# endif +#endif +#include <malloc.h> +#include <stdarg.h> +#include <assert.h> +#include <string.h> +#include <ctype.h> +#include <errno.h> +#include <fcntl.h> +#include <sys/stat.h> + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* declarations of non-ANSI functions */ +#if defined __MINGW32__ +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined __CYGWIN__ +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined other_platform || defined ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined _MSC_VER +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +#elif defined __MINGW32__ +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined __CYGWIN__ +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined other platforms ... */ +#endif + +#if defined PATH_MAX +# define LT_PATHMAX PATH_MAX +#elif defined MAXPATHLEN +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ + defined __OS2__ +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free (stale); stale = 0; } \ +} while (0) + +#if defined LT_DEBUGWRAPPER +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <<EOF +#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) +# define externally_visible volatile +#else +# define externally_visible __attribute__((externally_visible)) volatile +#endif +externally_visible const char * MAGIC_EXE = "$magic_exe"; +const char * LIB_PATH_VARNAME = "$shlibpath_var"; +EOF + + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + func_to_host_path "$temp_rpath" + cat <<EOF +const char * LIB_PATH_VALUE = "$func_to_host_path_result"; +EOF + else + cat <<"EOF" +const char * LIB_PATH_VALUE = ""; +EOF + fi + + if test -n "$dllsearchpath"; then + func_to_host_path "$dllsearchpath:" + cat <<EOF +const char * EXE_PATH_VARNAME = "PATH"; +const char * EXE_PATH_VALUE = "$func_to_host_path_result"; +EOF + else + cat <<"EOF" +const char * EXE_PATH_VARNAME = ""; +const char * EXE_PATH_VALUE = ""; +EOF + fi + + if test yes = "$fast_install"; then + cat <<EOF +const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ +EOF + else + cat <<EOF +const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ +EOF + fi + + + cat <<"EOF" + +#define LTWRAPPER_OPTION_PREFIX "--lt-" + +static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; +static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; +static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; + +int +main (int argc, char *argv[]) +{ + char **newargz; + int newargc; + char *tmp_pathspec; + char *actual_cwrapper_path; + char *actual_cwrapper_name; + char *target_name; + char *lt_argv_zero; + int rval = 127; + + int i; + + program_name = (char *) xstrdup (base_name (argv[0])); + newargz = XMALLOC (char *, (size_t) argc + 1); + + /* very simple arg parsing; don't want to rely on getopt + * also, copy all non cwrapper options to newargz, except + * argz[0], which is handled differently + */ + newargc=0; + for (i = 1; i < argc; i++) + { + if (STREQ (argv[i], dumpscript_opt)) + { +EOF + case $host in + *mingw* | *cygwin* ) + # make stdout use "unix" line endings + echo " setmode(1,_O_BINARY);" + ;; + esac + + cat <<"EOF" + lt_dump_script (stdout); + return 0; + } + if (STREQ (argv[i], debug_opt)) + { + lt_debug = 1; + continue; + } + if (STREQ (argv[i], ltwrapper_option_prefix)) + { + /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX + namespace, but it is not one of the ones we know about and + have already dealt with, above (inluding dump-script), then + report an error. Otherwise, targets might begin to believe + they are allowed to use options in the LTWRAPPER_OPTION_PREFIX + namespace. The first time any user complains about this, we'll + need to make LTWRAPPER_OPTION_PREFIX a configure-time option + or a configure.ac-settable value. + */ + lt_fatal (__FILE__, __LINE__, + "unrecognized %s option: '%s'", + ltwrapper_option_prefix, argv[i]); + } + /* otherwise ... */ + newargz[++newargc] = xstrdup (argv[i]); + } + newargz[++newargc] = NULL; + +EOF + cat <<EOF + /* The GNU banner must be the first non-error debug message */ + lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); +EOF + cat <<"EOF" + lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); + lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); + + tmp_pathspec = find_executable (argv[0]); + if (tmp_pathspec == NULL) + lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); + lt_debugprintf (__FILE__, __LINE__, + "(main) found exe (before symlink chase) at: %s\n", + tmp_pathspec); + + actual_cwrapper_path = chase_symlinks (tmp_pathspec); + lt_debugprintf (__FILE__, __LINE__, + "(main) found exe (after symlink chase) at: %s\n", + actual_cwrapper_path); + XFREE (tmp_pathspec); + + actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); + strendzap (actual_cwrapper_path, actual_cwrapper_name); + + /* wrapper name transforms */ + strendzap (actual_cwrapper_name, ".exe"); + tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); + XFREE (actual_cwrapper_name); + actual_cwrapper_name = tmp_pathspec; + tmp_pathspec = 0; + + /* target_name transforms -- use actual target program name; might have lt- prefix */ + target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); + strendzap (target_name, ".exe"); + tmp_pathspec = lt_extend_str (target_name, ".exe", 1); + XFREE (target_name); + target_name = tmp_pathspec; + tmp_pathspec = 0; + + lt_debugprintf (__FILE__, __LINE__, + "(main) libtool target name: %s\n", + target_name); +EOF + + cat <<EOF + newargz[0] = + XMALLOC (char, (strlen (actual_cwrapper_path) + + strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); + strcpy (newargz[0], actual_cwrapper_path); + strcat (newargz[0], "$objdir"); + strcat (newargz[0], "/"); +EOF + + cat <<"EOF" + /* stop here, and copy so we don't have to do this twice */ + tmp_pathspec = xstrdup (newargz[0]); + + /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ + strcat (newargz[0], actual_cwrapper_name); + + /* DO want the lt- prefix here if it exists, so use target_name */ + lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); + XFREE (tmp_pathspec); + tmp_pathspec = NULL; +EOF + + case $host_os in + mingw*) + cat <<"EOF" + { + char* p; + while ((p = strchr (newargz[0], '\\')) != NULL) + { + *p = '/'; + } + while ((p = strchr (lt_argv_zero, '\\')) != NULL) + { + *p = '/'; + } + } +EOF + ;; + esac + + cat <<"EOF" + XFREE (target_name); + XFREE (actual_cwrapper_path); + XFREE (actual_cwrapper_name); + + lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ + lt_setenv ("DUALCASE", "1"); /* for MSK sh */ + /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must + be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) + because on Windows, both *_VARNAMEs are PATH but uninstalled + libraries must come first. */ + lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); + lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); + + lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", + nonnull (lt_argv_zero)); + for (i = 0; i < newargc; i++) + { + lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", + i, nonnull (newargz[i])); + } + +EOF + + case $host_os in + mingw*) + cat <<"EOF" + /* execv doesn't actually work on mingw as expected on unix */ + newargz = prepare_spawn (newargz); + rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); + if (rval == -1) + { + /* failed to start process */ + lt_debugprintf (__FILE__, __LINE__, + "(main) failed to launch target \"%s\": %s\n", + lt_argv_zero, nonnull (strerror (errno))); + return 127; + } + return rval; +EOF + ;; + *) + cat <<"EOF" + execv (lt_argv_zero, newargz); + return rval; /* =127, but avoids unused variable warning */ +EOF + ;; + esac + + cat <<"EOF" +} + +void * +xmalloc (size_t num) +{ + void *p = (void *) malloc (num); + if (!p) + lt_fatal (__FILE__, __LINE__, "memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), + string) : NULL; +} + +const char * +base_name (const char *name) +{ + const char *base; + +#if defined HAVE_DOS_BASED_FILE_SYSTEM + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha ((unsigned char) name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return base; +} + +int +check_executable (const char *path) +{ + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if ((stat (path, &st) >= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + size_t tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined HAVE_DOS_BASED_FILE_SYSTEM + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined HAVE_DOS_BASED_FILE_SYSTEM + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = (size_t) (q - p); + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (STREQ (str, pat)) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + size_t len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + size_t orig_value_len = strlen (orig_value); + size_t add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + size_t len = strlen (new_value); + while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[--len] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $debug_cmd + + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_suncc_cstd_abi +# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! +# Several compiler flags select an ABI that is incompatible with the +# Cstd library. Avoid specifying it if any are in CXXFLAGS. +func_suncc_cstd_abi () +{ + $debug_cmd + + case " $compile_command " in + *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) + suncc_use_cstd_abi=no + ;; + *) + suncc_use_cstd_abi=yes + ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $debug_cmd + + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # what system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll that has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + os2dllname= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=false + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module=$wl-single_module + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test yes != "$build_libtool_libs" \ + && func_fatal_configuration "cannot build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg=$1 + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir=$arg + prev= + continue + ;; + dlfiles|dlprefiles) + $preload || { + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=: + } + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test no = "$dlself"; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test dlprefiles = "$prev"; then + dlself=yes + elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test dlfiles = "$prev"; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols=$arg + test -f "$arg" \ + || func_fatal_error "symbol file '$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex=$arg + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir=$arg + prev= + continue + ;; + mllvm) + # Clang does not use LLVM to link, so we can simply discard any + # '-mllvm $arg' options when doing the link step. + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + if test none != "$pic_object"; then + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + fi + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file '$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + os2dllname) + os2dllname=$arg + prev= + continue + ;; + precious_regex) + precious_files_regex=$arg + prev= + continue + ;; + release) + release=-$arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test rpath = "$prev"; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds=$arg + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg=$arg + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "'-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test X-export-symbols = "X$arg"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between '-L' and '$1'" + else + func_fatal_error "need path for '-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of '$dir'" + dir=$absdir + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test X-lc = "X$arg" || test X-lm = "X$arg"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test X-lc = "X$arg" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc due to us having libc/libc_r. + test X-lc = "X$arg" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test X-lc = "X$arg" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test X-lc = "X$arg" && continue + ;; + esac + elif test X-lc_r = "X$arg"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -mllvm) + prev=mllvm + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module=$wl-multi_module + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "'-no-install' is ignored for $host" + func_warning "assuming '-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -os2dllname) + prev=os2dllname + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # -fstack-protector* stack protector flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -specs=* GCC specs files + # -stdlib=* select c++ std lib with clang + # -fsanitize=* Clang/GCC memory and address sanitizer + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ + -specs=*|-fsanitize=*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + -Z*) + if test os2 = "`expr $host : '.*\(os2\)'`"; then + # OS/2 uses -Zxxx to specify OS/2-specific options + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case $arg in + -Zlinker | -Zstack) + prev=xcompiler + ;; + esac + continue + else + # Otherwise treat like 'Some other compiler flag' below + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + fi + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + test none = "$pic_object" || { + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + } + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test dlfiles = "$prev"; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test dlprefiles = "$prev"; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the '$prevarg' option requires an argument" + + if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname=$func_basename_result + libobjs_save=$libobjs + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + + func_dirname "$output" "/" "" + output_objdir=$func_dirname_result$objdir + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test lib = "$linkmode"; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=false + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test lib,link = "$linkmode,$pass"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs=$tmp_deplibs + fi + + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass"; then + libs=$deplibs + deplibs= + fi + if test prog = "$linkmode"; then + case $pass in + dlopen) libs=$dlfiles ;; + dlpreopen) libs=$dlprefiles ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test lib,dlpreopen = "$linkmode,$pass"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs=$dlprefiles + fi + if test dlopen = "$pass"; then + # Collect dlpreopened libraries + save_deplibs=$deplibs + deplibs= + fi + + for deplib in $libs; do + lib= + found=false + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test lib != "$linkmode" && test prog != "$linkmode"; then + func_warning "'-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test lib = "$linkmode"; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib=$searchdir/lib$name$search_ext + if test -f "$lib"; then + if test .la = "$search_ext"; then + found=: + else + found=false + fi + break 2 + fi + done + done + if $found; then + # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll=$l + done + if test "X$ll" = "X$old_library"; then # only static version available + found=false + func_dirname "$lib" "" "." + ladir=$func_dirname_result + lib=$ladir/$old_library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + else + # deplib doesn't seem to be a libtool library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + ;; # -l + *.ltframework) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test conv = "$pass" && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + if test scan = "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "'-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test link = "$pass"; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=false + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=: + fi + ;; + pass_all) + valid_a_lib=: + ;; + esac + if $valid_a_lib; then + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + else + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + fi + ;; + esac + continue + ;; + prog) + if test link != "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + elif test prog = "$linkmode"; then + if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=: + continue + ;; + esac # case $deplib + + $found || test -f "$lib" \ + || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "'$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir=$func_dirname_result + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass" || + { test prog != "$linkmode" && test lib != "$linkmode"; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test conv = "$pass"; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + elif test prog != "$linkmode" && test lib != "$linkmode"; then + func_fatal_error "'$lib' is not a convenience library" + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test yes = "$prefer_static_libs" || + test built,no = "$prefer_static_libs,$installed"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib=$l + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + + # This library was specified with -dlopen. + if test dlopen = "$pass"; then + test -z "$libdir" \ + && func_fatal_error "cannot -dlopen a convenience library: '$lib'" + if test -z "$dlname" || + test yes != "$dlopen_support" || + test no = "$build_libtool_libs" + then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of '$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir=$ladir + fi + ;; + esac + func_basename "$lib" + laname=$func_basename_result + + # Find the relevant object directory and library name. + if test yes = "$installed"; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library '$lib' was moved." + dir=$ladir + absdir=$abs_ladir + libdir=$abs_ladir + else + dir=$lt_sysroot$libdir + absdir=$lt_sysroot$libdir + fi + test yes = "$hardcode_automatic" && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir=$ladir + absdir=$abs_ladir + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir=$ladir/$objdir + absdir=$abs_ladir/$objdir + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test dlpreopen = "$pass"; then + if test -z "$libdir" && test prog = "$linkmode"; then + func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" + fi + case $host in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test lib = "$linkmode"; then + deplibs="$dir/$old_library $deplibs" + elif test prog,link = "$linkmode,$pass"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test prog = "$linkmode" && test link != "$pass"; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=false + if test no != "$link_all_deplibs" || test -z "$library_names" || + test no = "$build_libtool_libs"; then + linkalldeplibs=: + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if $linkalldeplibs; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test prog,link = "$linkmode,$pass"; then + if test -n "$library_names" && + { { test no = "$prefer_static_libs" || + test built,yes = "$prefer_static_libs,$installed"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then + # Make sure the rpath contains only unique directories. + case $temp_rpath: in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if $alldeplibs && + { test pass_all = "$deplibs_check_method" || + { test yes = "$build_libtool_libs" && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test built = "$use_static_libs" && test yes = "$installed"; then + use_static_libs=no + fi + if test -n "$library_names" && + { test no = "$use_static_libs" || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc* | *os2*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test no = "$installed"; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule= + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule=$dlpremoduletest + break + fi + done + if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then + echo + if test prog = "$linkmode"; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test lib = "$linkmode" && + test yes = "$hardcode_into_libs"; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname=$1 + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname=$dlname + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc* | *os2*) + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + esac + eval soname=\"$soname_spec\" + else + soname=$realname + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot=$soname + func_basename "$soroot" + soname=$func_basename_result + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from '$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for '$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test prog = "$linkmode" || test relink != "$opt_mode"; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test no = "$hardcode_direct"; then + add=$dir/$linklib + case $host in + *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; + *-*-sysv4*uw2*) add_dir=-L$dir ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir=-L$dir ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we cannot + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library"; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add=$dir/$old_library + fi + elif test -n "$old_library"; then + add=$dir/$old_library + fi + fi + esac + elif test no = "$hardcode_minus_L"; then + case $host in + *-*-sunos*) add_shlibpath=$dir ;; + esac + add_dir=-L$dir + add=-l$name + elif test no = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + relink) + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$dir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$absdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test yes != "$lib_linked"; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test prog = "$linkmode"; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test yes != "$hardcode_direct" && + test yes != "$hardcode_minus_L" && + test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test prog = "$linkmode" || test relink = "$opt_mode"; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$libdir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$libdir + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add=-l$name + elif test yes = "$hardcode_automatic"; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib"; then + add=$inst_prefix_dir$libdir/$linklib + else + add=$libdir/$linklib + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir=-L$libdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + fi + + if test prog = "$linkmode"; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test prog = "$linkmode"; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test unsupported != "$hardcode_direct"; then + test -n "$old_library" && linklib=$old_library + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test yes = "$build_libtool_libs"; then + # Not a shared library + if test pass_all != "$deplibs_check_method"; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system cannot link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test yes = "$module"; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test lib = "$linkmode"; then + if test -n "$dependency_libs" && + { test yes != "$hardcode_into_libs" || + test yes = "$build_old_libs" || + test yes = "$link_static"; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs=$temp_deplibs + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test no != "$link_all_deplibs"; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path=$deplib ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of '$dir'" + absdir=$dir + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names"; then + for tmp in $deplibrary_names; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl"; then + depdepl=$absdir/$objdir/$depdepl + darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" + func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" + path= + fi + fi + ;; + *) + path=-L$absdir/$objdir + ;; + esac + else + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "'$deplib' seems to be moved" + + path=-L$absdir + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test link = "$pass"; then + if test prog = "$linkmode"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs=$newdependency_libs + if test dlpreopen = "$pass"; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test dlopen != "$pass"; then + test conv = "$pass" || { + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + } + + if test prog,link = "$linkmode,$pass"; then + vars="compile_deplibs finalize_deplibs" + else + vars=deplibs + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + + # Add Sun CC postdeps if required: + test CXX = "$tagname" && { + case $host_os in + linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C++ 5.9 + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + + solaris*) + func_cc_basename "$CC" + case $func_cc_basename_result in + CC* | sunCC*) + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + esac + } + + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i= + ;; + esac + if test -n "$i"; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test prog = "$linkmode"; then + dlfiles=$newdlfiles + fi + if test prog = "$linkmode" || test lib = "$linkmode"; then + dlprefiles=$newdlprefiles + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "'-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "'-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs=$output + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form 'libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test no = "$module" \ + && func_fatal_help "libtool library '$output' must begin with 'lib'" + + if test no != "$need_lib_prefix"; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test pass_all != "$deplibs_check_method"; then + func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test no = "$dlself" \ + || func_warning "'-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test 1 -lt "$#" \ + && func_warning "ignoring multiple '-rpath's for a libtool library" + + install_libdir=$1 + + oldlibs= + if test -z "$rpath"; then + if test yes = "$build_libtool_libs"; then + # Building a libtool convenience library. + # Some compilers have problems with a '.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "'-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs=$IFS; IFS=: + set dummy $vinfo 0 0 0 + shift + IFS=$save_ifs + + test -n "$7" && \ + func_fatal_help "too many parameters to '-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major=$1 + number_minor=$2 + number_revision=$3 + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # that has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|freebsd-elf|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_revision + ;; + freebsd-aout|qnx|sunos) + current=$number_major + revision=$number_minor + age=0 + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_minor + lt_irix_increment=no + ;; + *) + func_fatal_configuration "$modename: unknown library version type '$version_type'" + ;; + esac + ;; + no) + current=$1 + revision=$2 + age=$3 + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT '$current' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION '$revision' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE '$age' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE '$age' is greater than the current interface number '$current'" + func_fatal_error "'$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + # On Darwin other compilers + case $CC in + nagfor*) + verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + ;; + *) + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + esac + ;; + + freebsd-aout) + major=.$current + versuffix=.$current.$revision + ;; + + freebsd-elf) + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + irix | nonstopux) + if test no = "$lt_irix_increment"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring=$verstring_prefix$major.$revision + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test 0 -ne "$loop"; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring_prefix$major.$iface:$verstring + done + + # Before this point, $major must not contain '.'. + major=.$major + versuffix=$major.$revision + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=.$current.$age.$revision + verstring=$current.$age.$revision + + # Add in all the interfaces that we are compatible with. + loop=$age + while test 0 -ne "$loop"; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring:$iface.0 + done + + # Make executables depend on our current version. + func_append verstring ":$current.0" + ;; + + qnx) + major=.$current + versuffix=.$current + ;; + + sco) + major=.$current + versuffix=.$current + ;; + + sunos) + major=.$current + versuffix=.$current.$revision + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 file systems. + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + + *) + func_fatal_configuration "unknown library version type '$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring=0.0 + ;; + esac + if test no = "$need_version"; then + versuffix= + else + versuffix=.0.0 + fi + fi + + # Remove version info from name if versioning should be avoided + if test yes,no = "$avoid_version,$need_version"; then + major= + versuffix= + verstring= + fi + + # Check to see if the archive will have undefined symbols. + if test yes = "$allow_undefined"; then + if test unsupported = "$allow_undefined_flag"; then + if test yes = "$build_old_libs"; then + func_warning "undefined symbols not allowed in $host shared libraries; building static only" + build_libtool_libs=no + else + func_fatal_error "can't build $host shared library unless -no-undefined is specified" + fi + fi + else + # Don't allow undefined symbols. + allow_undefined_flag=$no_undefined_flag + fi + + fi + + func_generate_dlsyms "$libname" "$libname" : + func_append libobjs " $symfileobj" + test " " = "$libobjs" && libobjs= + + if test relink != "$opt_mode"; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) + if test -n "$precious_files_regex"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles=$dlfiles + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles=$dlprefiles + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test yes = "$build_libtool_libs"; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test yes = "$build_libtool_need_lc"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release= + versuffix= + major= + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c <<EOF + int main() { return 0; } +EOF + $opt_dry_run || $RM conftest + if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then + ldd_output=`ldd conftest` + for i in $deplibs; do + case $i in + -l*) + func_stripname -l '' "$i" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $i "*) + func_append newdeplibs " $i" + i= + ;; + esac + fi + if test -n "$i"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` + set dummy $deplib_matches; shift + deplib_match=$1 + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then + func_append newdeplibs " $i" + else + droppeddeps=yes + echo + $ECHO "*** Warning: dynamic linker does not accept needed library $i." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which I believe you do not have" + echo "*** because a test_compile did reveal that the linker did not use it for" + echo "*** its dynamic dependency list that programs get resolved with at runtime." + fi + fi + ;; + *) + func_append newdeplibs " $i" + ;; + esac + done + else + # Error occurred in the first compile. Let's try to salvage + # the situation: Compile a separate program for each library. + for i in $deplibs; do + case $i in + -l*) + func_stripname -l '' "$i" + name=$func_stripname_result + $opt_dry_run || $RM conftest + if $LTCC $LTCFLAGS -o conftest conftest.c $i; then + ldd_output=`ldd conftest` + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $i "*) + func_append newdeplibs " $i" + i= + ;; + esac + fi + if test -n "$i"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` + set dummy $deplib_matches; shift + deplib_match=$1 + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then + func_append newdeplibs " $i" + else + droppeddeps=yes + echo + $ECHO "*** Warning: dynamic linker does not accept needed library $i." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because a test_compile did reveal that the linker did not use this one" + echo "*** as a dynamic dependency that programs can get resolved with at runtime." + fi + fi + else + droppeddeps=yes + echo + $ECHO "*** Warning! Library $i is needed by this library but I was not able to" + echo "*** make it link in! You will probably need to install it or some" + echo "*** library that it depends on before this library will be fully" + echo "*** functional. Installing it before continuing would be even better." + fi + ;; + *) + func_append newdeplibs " $i" + ;; + esac + done + fi + ;; + file_magic*) + set dummy $deplibs_check_method; shift + file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib= + ;; + esac + fi + if test -n "$a_deplib"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + if test -n "$file_magic_glob"; then + libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` + else + libnameglob=$libname + fi + test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + if test yes = "$want_nocaseglob"; then + shopt -s nocaseglob + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib=$potent_lib + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | $SED 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; + *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib= + ;; + esac + fi + if test -n "$a_deplib"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib=$potent_lib # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs= + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + for i in $predeps $postdeps; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test none = "$deplibs_check_method"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test yes = "$droppeddeps"; then + if test yes = "$module"; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test no = "$allow_undefined"; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs=$new_libs + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test yes = "$build_libtool_libs"; then + # Remove $wl instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test yes = "$hardcode_into_libs"; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath=$finalize_rpath + test relink = "$opt_mode" || rpath=$compile_rpath$rpath + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath=$finalize_shlibpath + test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname=$1 + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname=$realname + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib=$output_objdir/$realname + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols=$output_objdir/$libname.uexp + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + func_dll_def_p "$export_symbols" || { + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols=$export_symbols + export_symbols= + always_export_symbols=yes + } + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs=$IFS; IFS='~' + for cmd1 in $cmds; do + IFS=$save_ifs + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test yes = "$try_normal_branch" \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=$output_objdir/$output_la.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS=$save_ifs + if test -n "$export_symbols_regex" && test : != "$skipped_export"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test : != "$skipped_export" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs=$tmp_deplibs + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test yes = "$compiler_needs_object" && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test : != "$skipped_export" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then + output=$output_objdir/$output_la.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then + output=$output_objdir/$output_la.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test yes = "$compiler_needs_object"; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-$k.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test -z "$objlist" || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test 1 -eq "$k"; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-$k.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-$k.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + ${skipped_export-false} && { + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + } + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs=$IFS; IFS='~' + for cmd in $concat_cmds; do + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + ${skipped_export-false} && { + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + } + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs=$IFS; IFS='~' + for cmd in $cmds; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test yes = "$module" || test yes = "$export_dynamic"; then + # On all known operating systems, these are identical. + dlname=$soname + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "'-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object '$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj=$output + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # if reload_cmds runs $LD directly, get rid of -Wl from + # whole_archive_flag_spec and hope we can get by with turning comma + # into space. + case $reload_cmds in + *\$LD[\ \$]*) wl= ;; + esac + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags + else + gentop=$output_objdir/${obj}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test yes = "$build_libtool_libs" || libobjs=$non_pic_objects + + # Create the old-style object. + reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs + + output=$obj + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + test yes = "$build_libtool_libs" || { + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + } + + if test -n "$pic_flag" || test default != "$pic_mode"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output=$libobj + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "'-release' is ignored for programs" + + $preload \ + && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ + && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test CXX = "$tagname"; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " $wl-bind_at_load" + func_append finalize_command " $wl-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs=$new_libs + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath=$rpath + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath=$rpath + + if test -n "$libobjs" && test yes = "$build_old_libs"; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" false + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=: + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=false + ;; + *cygwin* | *mingw* ) + test yes = "$build_libtool_libs" || wrappers_required=false + ;; + *) + if test no = "$need_relink" || test yes != "$build_libtool_libs"; then + wrappers_required=false + fi + ;; + esac + $wrappers_required || { + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command=$compile_command$compile_rpath + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.$objext"; then + func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' + fi + + exit $exit_status + } + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test yes = "$no_install"; then + # We don't need to create a wrapper script. + link_command=$compile_var$compile_command$compile_rpath + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + case $hardcode_action,$fast_install in + relink,*) + # Fast installation is not supported + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "'$output' will be relinked during installation" + ;; + *,yes) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + ;; + *,no) + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + ;; + *,needless) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command= + ;; + esac + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource=$output_path/$objdir/lt-$output_name.c + cwrapper=$output_path/$output_name.exe + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host"; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + case $build_libtool_libs in + convenience) + oldobjs="$libobjs_save $symfileobj" + addlibs=$convenience + build_libtool_libs=no + ;; + module) + oldobjs=$libobjs_save + addlibs=$old_convenience + build_libtool_libs=no + ;; + *) + oldobjs="$old_deplibs $non_pic_objects" + $preload && test -f "$symfileobj" \ + && func_append oldobjs " $symfileobj" + addlibs=$old_convenience + ;; + esac + + if test -n "$addlibs"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase=$func_basename_result + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj"; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test -z "$oldobjs"; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test yes = "$build_old_libs" && old_library=$libname.$libext + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test yes = "$hardcode_automatic"; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test yes = "$installed"; then + if test -z "$install_libdir"; then + break + fi + output=$output_objdir/${outputname}i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name=$func_basename_result + func_resolve_sysroot "$deplib" + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs=$newdependency_libs + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles=$newdlprefiles + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles=$newdlprefiles + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test -n "$bindir"; then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result/$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test no,yes = "$installed,$need_relink"; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +if test link = "$opt_mode" || test relink = "$opt_mode"; then + func_mode_link ${1+"$@"} +fi + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $debug_cmd + + RM=$nonopt + files= + rmforce=false + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=: ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir=$func_dirname_result + if test . = "$dir"; then + odir=$objdir + else + odir=$dir/$objdir + fi + func_basename "$file" + name=$func_basename_result + test uninstall = "$opt_mode" && odir=$dir + + # Remember odir for removal later, being careful to avoid duplicates + if test clean = "$opt_mode"; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif $rmforce; then + continue + fi + + rmfiles=$file + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case $opt_mode in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && test none != "$pic_object"; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && test none != "$non_pic_object"; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test clean = "$opt_mode"; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.$objext" + if test yes = "$fast_install" && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name"; then + func_append rmfiles " $odir/lt-$noexename.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the $objdir's in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then + func_mode_uninstall ${1+"$@"} +fi + +test -z "$opt_mode" && { + help=$generic_help + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode '$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# where we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/devspec.en_US/project/recutils/m4/00gnulib.m4 b/devspec.en_US/project/recutils/m4/00gnulib.m4 new file mode 100755 index 0000000..e3e0fb6 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/00gnulib.m4 @@ -0,0 +1,46 @@ +# 00gnulib.m4 serial 3 +dnl Copyright (C) 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This file must be named something that sorts before all other +dnl gnulib-provided .m4 files. It is needed until such time as we can +dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE and +dnl m4_divert semantics. + +# Until autoconf 2.63, handling of the diversion stack required m4_init +# to be called first; but this does not happen with aclocal. Wrapping +# the entire execution in another layer of the diversion stack fixes this. +# Worse, prior to autoconf 2.62, m4_wrap depended on the underlying m4 +# for whether it was FIFO or LIFO; in order to properly balance with +# m4_init, we need to undo our push just before anything wrapped within +# the m4_init body. The way to ensure this is to wrap both sides of +# m4_init with a one-shot macro that does the pop at the right time. +m4_ifndef([_m4_divert_diversion], +[m4_divert_push([KILL]) +m4_define([gl_divert_fixup], [m4_divert_pop()m4_define([$0])]) +m4_define([m4_init], + [gl_divert_fixup()]m4_defn([m4_init])[gl_divert_fixup()])]) + + +# AC_DEFUN_ONCE([NAME], VALUE) +# ---------------------------- +# Define NAME to expand to VALUE on the first use (whether by direct +# expansion, or by AC_REQUIRE), and to nothing on all subsequent uses. +# Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier. This +# definition is slower than the version in Autoconf 2.64, because it +# can only use interfaces that existed since 2.59; but it achieves the +# same effect. Quoting is necessary to avoid confusing Automake. +m4_version_prereq([2.63.263], [], +[m4_define([AC][_DEFUN_ONCE], + [AC][_DEFUN([$1], + [AC_REQUIRE([_gl_DEFUN_ONCE([$1])], + [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl +[AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])]) + +# gl_00GNULIB +# ----------- +# Witness macro that this file has been included. Needed to force +# Automake to include this file prior to all other gnulib .m4 files. +AC_DEFUN([gl_00GNULIB]) diff --git a/devspec.en_US/project/recutils/m4/__inline.m4 b/devspec.en_US/project/recutils/m4/__inline.m4 new file mode 100755 index 0000000..e1aa310 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/__inline.m4 @@ -0,0 +1,22 @@ +# Test for __inline keyword +dnl Copyright 2017-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl___INLINE], +[ + AC_CACHE_CHECK([whether the compiler supports the __inline keyword], + [gl_cv_c___inline], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[typedef int foo_t; + static __inline foo_t foo (void) { return 0; }]], + [[return foo ();]])], + [gl_cv_c___inline=yes], + [gl_cv_c___inline=no])]) + if test $gl_cv_c___inline = yes; then + AC_DEFINE([HAVE___INLINE], [1], + [Define to 1 if the compiler supports the keyword '__inline'.]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/absolute-header.m4 b/devspec.en_US/project/recutils/m4/absolute-header.m4 new file mode 100755 index 0000000..a8f2cba --- /dev/null +++ b/devspec.en_US/project/recutils/m4/absolute-header.m4 @@ -0,0 +1,102 @@ +# absolute-header.m4 serial 16 +dnl Copyright (C) 2006-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Derek Price. + +# gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...) +# --------------------------------------- +# Find the absolute name of a header file, testing first if the header exists. +# If the header were sys/inttypes.h, this macro would define +# ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h +# in config.h +# (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"'). +# The three "///" are to pacify Sun C 5.8, which otherwise would say +# "warning: #include of /usr/include/... may be non-portable". +# Use '""', not '<>', so that the /// cannot be confused with a C99 comment. +# Note: This macro assumes that the header file is not empty after +# preprocessing, i.e. it does not only define preprocessor macros but also +# provides some type/enum definitions or function/variable declarations. +AC_DEFUN([gl_ABSOLUTE_HEADER], +[AC_REQUIRE([AC_CANONICAL_HOST]) +AC_LANG_PREPROC_REQUIRE()dnl +dnl FIXME: gl_absolute_header and ac_header_exists must be used unquoted +dnl until we can assume autoconf 2.64 or newer. +m4_foreach_w([gl_HEADER_NAME], [$1], + [AS_VAR_PUSHDEF([gl_absolute_header], + [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl + AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>], + m4_defn([gl_absolute_header]), + [AS_VAR_PUSHDEF([ac_header_exists], + [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl + AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl + if test AS_VAR_GET(ac_header_exists) = yes; then + gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME])) + fi + AS_VAR_POPDEF([ac_header_exists])dnl + ])dnl + AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])), + ["AS_VAR_GET(gl_absolute_header)"], + [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.]) + AS_VAR_POPDEF([gl_absolute_header])dnl +])dnl +])# gl_ABSOLUTE_HEADER + +# gl_ABSOLUTE_HEADER_ONE(HEADER) +# ------------------------------ +# Like gl_ABSOLUTE_HEADER, except that: +# - it assumes that the header exists, +# - it uses the current CPPFLAGS, +# - it does not cache the result, +# - it is silent. +AC_DEFUN([gl_ABSOLUTE_HEADER_ONE], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])]) + dnl AIX "xlc -E" and "cc -E" omit #line directives for header files + dnl that contain only a #include of other header files and no + dnl non-comment tokens of their own. This leads to a failure to + dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h> + dnl and others. The workaround is to force preservation of comments + dnl through option -C. This ensures all necessary #line directives + dnl are present. GCC supports option -C as well. + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac +changequote(,) + case "$host_os" in + mingw*) + dnl For the sake of native Windows compilers (excluding gcc), + dnl treat backslash as a directory separator, like /. + dnl Actually, these compilers use a double-backslash as + dnl directory separator, inside the + dnl # line "filename" + dnl directives. + gl_dirsep_regex='[/\\]' + ;; + *) + gl_dirsep_regex='\/' + ;; + esac + dnl A sed expression that turns a string into a basic regular + dnl expression, for use within "/.../". + gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' + gl_header_literal_regex=`echo '$1' \ + | sed -e "$gl_make_literal_regex_sed"` + gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ + s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ + s|^/[^/]|//&| + p + q + }' +changequote([,]) + dnl eval is necessary to expand gl_absname_cpp. + dnl Ultrix and Pyramid sh refuse to redirect output of eval, + dnl so use subshell. + AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]), +[`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | + sed -n "$gl_absolute_header_sed"`]) +]) diff --git a/devspec.en_US/project/recutils/m4/acl.m4 b/devspec.en_US/project/recutils/m4/acl.m4 new file mode 100755 index 0000000..5234a80 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/acl.m4 @@ -0,0 +1,211 @@ +# acl.m4 - check for access control list (ACL) primitives +# serial 23 + +# Copyright (C) 2002, 2004-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Written by Paul Eggert and Jim Meyering. + +AC_DEFUN([gl_FUNC_ACL_ARG], +[ + gl_need_lib_has_acl= + AC_ARG_ENABLE([acl], + AS_HELP_STRING([--disable-acl], [do not support ACLs]), + , [enable_acl=auto]) +]) + + +AC_DEFUN([gl_FUNC_ACL], +[ + AC_REQUIRE([gl_FUNC_ACL_ARG]) + AC_CHECK_FUNCS_ONCE([fchmod]) + LIB_ACL= + use_acl=0 + if test "$enable_acl" != no; then + dnl On all platforms, the ACL related API is declared in <sys/acl.h>. + AC_CHECK_HEADERS([sys/acl.h]) + if test $ac_cv_header_sys_acl_h = yes; then + ac_save_LIBS=$LIBS + + dnl Test for POSIX-draft-like API (GNU/Linux, FreeBSD, Mac OS X, + dnl IRIX, Tru64, Cygwin >= 2.5). + dnl -lacl is needed on GNU/Linux, -lpacl on OSF/1. + if test $use_acl = 0; then + AC_SEARCH_LIBS([acl_get_file], [acl pacl], + [if test "$ac_cv_search_acl_get_file" != "none required"; then + LIB_ACL=$ac_cv_search_acl_get_file + fi + AC_CHECK_FUNCS( + [acl_get_file acl_get_fd acl_set_file acl_set_fd \ + acl_free acl_from_mode acl_from_text \ + acl_delete_def_file acl_extended_file \ + acl_delete_fd_np acl_delete_file_np \ + acl_copy_ext_native acl_create_entry_np \ + acl_to_short_text acl_free_text]) + # If the acl_get_file bug is detected, don't enable the ACL support. + gl_ACL_GET_FILE([use_acl=1], []) + if test $use_acl = 1; then + dnl On GNU/Linux, an additional API is declared in <acl/libacl.h>. + AC_CHECK_HEADERS([acl/libacl.h]) + AC_REPLACE_FUNCS([acl_entries]) + AC_CACHE_CHECK([for ACL_FIRST_ENTRY], + [gl_cv_acl_ACL_FIRST_ENTRY], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( +[[#include <sys/types.h> +#include <sys/acl.h> +int type = ACL_FIRST_ENTRY;]])], + [gl_cv_acl_ACL_FIRST_ENTRY=yes], + [gl_cv_acl_ACL_FIRST_ENTRY=no])]) + if test $gl_cv_acl_ACL_FIRST_ENTRY = yes; then + AC_DEFINE([HAVE_ACL_FIRST_ENTRY], [1], + [Define to 1 if the constant ACL_FIRST_ENTRY exists.]) + fi + dnl On Mac OS X, other types of ACLs are supported. + AC_CACHE_CHECK([for ACL_TYPE_EXTENDED], + [gl_cv_acl_ACL_TYPE_EXTENDED], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( +[[#include <sys/types.h> +#include <sys/acl.h> +int type = ACL_TYPE_EXTENDED;]])], + [gl_cv_acl_ACL_TYPE_EXTENDED=yes], + [gl_cv_acl_ACL_TYPE_EXTENDED=no])]) + if test $gl_cv_acl_ACL_TYPE_EXTENDED = yes; then + AC_DEFINE([HAVE_ACL_TYPE_EXTENDED], [1], + [Define to 1 if the ACL type ACL_TYPE_EXTENDED exists.]) + fi + else + LIB_ACL= + fi + ]) + fi + + dnl Test for Solaris API (Solaris, Cygwin). + if test $use_acl = 0; then + AC_CHECK_FUNCS([facl]) + if test $ac_cv_func_facl = yes; then + AC_SEARCH_LIBS([acl_trivial], [sec], + [if test "$ac_cv_search_acl_trivial" != "none required"; then + LIB_ACL=$ac_cv_search_acl_trivial + fi + ]) + AC_CHECK_FUNCS([acl_trivial]) + use_acl=1 + fi + fi + + dnl Test for HP-UX API. + if test $use_acl = 0; then + AC_CHECK_FUNCS([getacl]) + if test $ac_cv_func_getacl = yes; then + use_acl=1 + fi + dnl Test for HP-UX 11.11 API. + AC_CHECK_HEADERS([aclv.h], [], [], [#include <sys/types.h>]) + fi + + dnl Test for AIX API (AIX 5.3 or newer). + if test $use_acl = 0; then + AC_CHECK_FUNCS([aclx_get]) + if test $ac_cv_func_aclx_get = yes; then + use_acl=1 + fi + fi + + dnl Test for older AIX API. + if test $use_acl = 0 || test "$ac_cv_func_aclx_get" = yes; then + AC_CHECK_FUNCS([statacl]) + if test $ac_cv_func_statacl = yes; then + use_acl=1 + fi + fi + + dnl Test for NonStop Kernel API. + if test $use_acl = 0; then + AC_CHECK_FUNCS([aclsort]) + if test $ac_cv_func_aclsort = yes; then + use_acl=1 + fi + fi + + LIBS=$ac_save_LIBS + fi + + if test "$enable_acl$use_acl" = yes0; then + AC_MSG_ERROR([ACLs enabled but support not detected]) + elif test "$enable_acl$use_acl" = auto0; then + AC_MSG_WARN([libacl development library was not found or not usable.]) + AC_MSG_WARN([AC_PACKAGE_NAME will be built without ACL support.]) + fi + fi + test $gl_need_lib_has_acl && LIB_HAS_ACL=$LIB_ACL + AC_SUBST([LIB_ACL]) + AC_DEFINE_UNQUOTED([USE_ACL], [$use_acl], + [Define to nonzero if you want access control list support.]) + USE_ACL=$use_acl + AC_SUBST([USE_ACL]) +]) + +# gl_ACL_GET_FILE(IF-WORKS, IF-NOT) +# --------------------------------- +# If 'acl_get_file' works (does not have a particular bug), +# run IF-WORKS, otherwise, IF-NOT. +# When building natively, test for a Darwin 8.7.0 bug, whereby acl_get_file +# returns NULL, but sets errno = ENOENT for an existing file or directory. +# When cross-compiling, assume that this old bug no longer applies. +AC_DEFUN([gl_ACL_GET_FILE], +[ + AC_CACHE_CHECK([for working acl_get_file], [gl_cv_func_working_acl_get_file], + [gl_cv_func_working_acl_get_file=no + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/types.h> + #include <sys/acl.h> + #include <errno.h> + ]], + [[acl_t acl = acl_get_file (".", ACL_TYPE_ACCESS); + return acl ? acl_free (acl) != 0 : errno == ENOENT; + ]])], + [if test $cross_compiling = yes; then + gl_cv_func_working_acl_get_file="guessing yes" + elif ./conftest$ac_exeext; then + gl_cv_func_working_acl_get_file=yes + fi])]) + AS_IF([test "$gl_cv_func_working_acl_get_file" != no], [$1], [$2]) +]) + +# On GNU/Linux, testing if a file has an acl can be done with the getxattr +# syscall which doesn't require linking against additional libraries. +AC_DEFUN([gl_FILE_HAS_ACL], +[ + AC_REQUIRE([gl_FUNC_ACL_ARG]) + if test "$enable_acl" != no; then + AC_CACHE_CHECK([for getxattr with XATTR_NAME_POSIX_ACL macros], + [gl_cv_getxattr_with_posix_acls], + [gl_cv_getxattr_with_posix_acls=no + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/types.h> + #include <sys/xattr.h> + #include <linux/xattr.h> + ]], + [[ssize_t a = getxattr (".", XATTR_NAME_POSIX_ACL_ACCESS, 0, 0); + ssize_t b = getxattr (".", XATTR_NAME_POSIX_ACL_DEFAULT, 0, 0); + return a < 0 || b < 0; + ]])], + [gl_cv_getxattr_with_posix_acls=yes])]) + fi + if test "$gl_cv_getxattr_with_posix_acls" = yes; then + LIB_HAS_ACL= + AC_DEFINE([GETXATTR_WITH_POSIX_ACLS], 1, + [Define to 1 if getxattr works with XATTR_NAME_POSIX_ACL_ACCESS + and XATTR_NAME_POSIX_ACL_DEFAULT.]) + else + dnl Set gl_need_lib_has_acl to a nonempty value, so that any + dnl later gl_FUNC_ACL call will set LIB_HAS_ACL=$LIB_ACL. + gl_need_lib_has_acl=1 + LIB_HAS_ACL=$LIB_ACL + fi + AC_SUBST([LIB_HAS_ACL]) +]) diff --git a/devspec.en_US/project/recutils/m4/alloca.m4 b/devspec.en_US/project/recutils/m4/alloca.m4 new file mode 100755 index 0000000..46d60f9 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/alloca.m4 @@ -0,0 +1,121 @@ +# alloca.m4 serial 14 +dnl Copyright (C) 2002-2004, 2006-2007, 2009-2019 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_ALLOCA], +[ + AC_REQUIRE([AC_FUNC_ALLOCA]) + if test $ac_cv_func_alloca_works = no; then + gl_PREREQ_ALLOCA + fi + + # Define an additional variable used in the Makefile substitution. + if test $ac_cv_working_alloca_h = yes; then + AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [ + AC_EGREP_CPP([Need own alloca], [ +#if defined __GNUC__ || defined _AIX || defined _MSC_VER + Need own alloca +#endif + ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no]) + ]) + if test $gl_cv_rpl_alloca = yes; then + dnl OK, alloca can be implemented through a compiler built-in. + AC_DEFINE([HAVE_ALLOCA], [1], + [Define to 1 if you have 'alloca' after including <alloca.h>, + a header that may be supplied by this distribution.]) + ALLOCA_H=alloca.h + else + dnl alloca exists as a library function, i.e. it is slow and probably + dnl a memory leak. Don't define HAVE_ALLOCA in this case. + ALLOCA_H= + fi + else + ALLOCA_H=alloca.h + fi + AC_SUBST([ALLOCA_H]) + AM_CONDITIONAL([GL_GENERATE_ALLOCA_H], [test -n "$ALLOCA_H"]) +]) + +# Prerequisites of lib/alloca.c. +# STACK_DIRECTION is already handled by AC_FUNC_ALLOCA. +AC_DEFUN([gl_PREREQ_ALLOCA], [:]) + +# This works around a bug in autoconf <= 2.68. +# See <https://lists.gnu.org/r/bug-gnulib/2011-06/msg00277.html>. + +m4_version_prereq([2.69], [] ,[ + +# This is taken from the following Autoconf patch: +# https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=6cd9f12520b0d6f76d3230d7565feba1ecf29497 + +# _AC_LIBOBJ_ALLOCA +# ----------------- +# Set up the LIBOBJ replacement of 'alloca'. Well, not exactly +# AC_LIBOBJ since we actually set the output variable 'ALLOCA'. +# Nevertheless, for Automake, AC_LIBSOURCES it. +m4_define([_AC_LIBOBJ_ALLOCA], +[# The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. +AC_LIBSOURCES(alloca.c) +AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])dnl +AC_DEFINE(C_ALLOCA, 1, [Define to 1 if using 'alloca.c'.]) + +AC_CACHE_CHECK(whether 'alloca.c' needs Cray hooks, ac_cv_os_cray, +[AC_EGREP_CPP(webecray, +[#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif +], ac_cv_os_cray=yes, ac_cv_os_cray=no)]) +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + AC_CHECK_FUNC($ac_func, + [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func, + [Define to one of '_getb67', 'GETB67', + 'getb67' for Cray-2 and Cray-YMP + systems. This function is required for + 'alloca.c' support on those systems.]) + break]) + done +fi + +AC_CACHE_CHECK([stack direction for C alloca], + [ac_cv_c_stack_direction], +[AC_RUN_IFELSE([AC_LANG_SOURCE( +[AC_INCLUDES_DEFAULT +int +find_stack_direction (int *addr, int depth) +{ + int dir, dummy = 0; + if (! addr) + addr = &dummy; + *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; + dir = depth ? find_stack_direction (addr, depth - 1) : 0; + return dir + dummy; +} + +int +main (int argc, char **argv) +{ + return find_stack_direction (0, argc + !argv + 20) < 0; +}])], + [ac_cv_c_stack_direction=1], + [ac_cv_c_stack_direction=-1], + [ac_cv_c_stack_direction=0])]) +AH_VERBATIM([STACK_DIRECTION], +[/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +@%:@undef STACK_DIRECTION])dnl +AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction) +])# _AC_LIBOBJ_ALLOCA +]) diff --git a/devspec.en_US/project/recutils/m4/asm-underscore.m4 b/devspec.en_US/project/recutils/m4/asm-underscore.m4 new file mode 100755 index 0000000..0f6bee4 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/asm-underscore.m4 @@ -0,0 +1,72 @@ +# asm-underscore.m4 serial 4 +dnl Copyright (C) 2010-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. Based on as-underscore.m4 in GNU clisp. + +# gl_ASM_SYMBOL_PREFIX +# Tests for the prefix of C symbols at the assembly language level and the +# linker level. This prefix is either an underscore or empty. Defines the +# C macro USER_LABEL_PREFIX to this prefix, and sets ASM_SYMBOL_PREFIX to +# a stringified variant of this prefix. + +AC_DEFUN([gl_ASM_SYMBOL_PREFIX], +[ + AC_REQUIRE([AC_PROG_EGREP]) + dnl We don't use GCC's __USER_LABEL_PREFIX__ here, because + dnl 1. It works only for GCC. + dnl 2. It is incorrectly defined on some platforms, in some GCC versions. + AC_REQUIRE([gl_C_ASM]) + AC_CACHE_CHECK( + [whether C symbols are prefixed with underscore at the linker level], + [gl_cv_prog_as_underscore], + [cat > conftest.c <<EOF +#ifdef __cplusplus +extern "C" int foo (void); +#endif +int foo(void) { return 0; } +EOF + # Look for the assembly language name in the .s file. + AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1 + if LC_ALL=C $EGREP '(^|[[^a-zA-Z0-9_]])_foo([[^a-zA-Z0-9_]]|$)' conftest.$gl_asmext >/dev/null; then + gl_cv_prog_as_underscore=yes + else + gl_cv_prog_as_underscore=no + fi + rm -f conftest* + ]) + if test $gl_cv_prog_as_underscore = yes; then + USER_LABEL_PREFIX=_ + else + USER_LABEL_PREFIX= + fi + AC_DEFINE_UNQUOTED([USER_LABEL_PREFIX], [$USER_LABEL_PREFIX], + [Define to the prefix of C symbols at the assembler and linker level, + either an underscore or empty.]) + ASM_SYMBOL_PREFIX='"'${USER_LABEL_PREFIX}'"' + AC_SUBST([ASM_SYMBOL_PREFIX]) +]) + +# gl_C_ASM +# Determines how to produce an assembly language file from C source code. +# Sets the variables: +# gl_asmext - the extension of assembly language output, +# gl_c_asm_opt - the C compiler option that produces assembly language output. + +AC_DEFUN([gl_C_ASM], +[ + AC_EGREP_CPP([MicrosoftCompiler], + [ +#ifdef _MSC_VER +MicrosoftCompiler +#endif + ], + [gl_asmext='asm' + gl_c_asm_opt='-c -Fa' + ], + [gl_asmext='s' + gl_c_asm_opt='-S' + ]) +]) diff --git a/devspec.en_US/project/recutils/m4/autobuild.m4 b/devspec.en_US/project/recutils/m4/autobuild.m4 new file mode 100755 index 0000000..4ae5b2e --- /dev/null +++ b/devspec.en_US/project/recutils/m4/autobuild.m4 @@ -0,0 +1,39 @@ +# autobuild.m4 serial 7 +dnl Copyright (C) 2004, 2006-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Simon Josefsson + +# Usage: AB_INIT([MODE]). +AC_DEFUN([AB_INIT], +[ + AC_REQUIRE([AC_CANONICAL_BUILD]) + AC_REQUIRE([AC_CANONICAL_HOST]) + + if test -z "$AB_PACKAGE"; then + AB_PACKAGE=${PACKAGE_NAME:-$PACKAGE} + fi + AC_MSG_NOTICE([autobuild project... $AB_PACKAGE]) + + if test -z "$AB_VERSION"; then + AB_VERSION=${PACKAGE_VERSION:-$VERSION} + fi + AC_MSG_NOTICE([autobuild revision... $AB_VERSION]) + + hostname=`hostname` + if test "$hostname"; then + AC_MSG_NOTICE([autobuild hostname... $hostname]) + fi + + ifelse([$1],[],,[AC_MSG_NOTICE([autobuild mode... $1])]) + + date=`TZ=UTC0 date +%Y%m%dT%H%M%SZ` + if test "$?" != 0; then + date=`date` + fi + if test "$date"; then + AC_MSG_NOTICE([autobuild timestamp... $date]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/base64.m4 b/devspec.en_US/project/recutils/m4/base64.m4 new file mode 100755 index 0000000..cc2e2ed --- /dev/null +++ b/devspec.en_US/project/recutils/m4/base64.m4 @@ -0,0 +1,15 @@ +# base64.m4 serial 4 +dnl Copyright (C) 2004, 2006, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_BASE64], +[ + gl_PREREQ_BASE64 +]) + +# Prerequisites of lib/base64.c. +AC_DEFUN([gl_PREREQ_BASE64], [ + AC_REQUIRE([AC_C_RESTRICT]) +]) diff --git a/devspec.en_US/project/recutils/m4/bison.m4 b/devspec.en_US/project/recutils/m4/bison.m4 new file mode 100755 index 0000000..d64883b --- /dev/null +++ b/devspec.en_US/project/recutils/m4/bison.m4 @@ -0,0 +1,25 @@ +# serial 7 + +# Copyright (C) 2002, 2005, 2009-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_BISON], +[ + # parse-datetime.y works with bison only. + : ${YACC='bison -o y.tab.c'} +dnl +dnl Declaring YACC & YFLAGS precious will not be necessary after GNULIB +dnl requires an Autoconf greater than 2.59c, but it will probably still be +dnl useful to override the description of YACC in the --help output, re +dnl parse-datetime.y assuming 'bison -o y.tab.c'. + AC_ARG_VAR([YACC], +[The "Yet Another C Compiler" implementation to use. Defaults to +'bison -o y.tab.c'. Values other than 'bison -o y.tab.c' will most likely +break on most systems.])dnl + AC_ARG_VAR([YFLAGS], +[YFLAGS contains the list arguments that will be passed by default to Bison. +This script will default YFLAGS to the empty string to avoid a default value of +'-d' given by some make applications.])dnl +]) diff --git a/devspec.en_US/project/recutils/m4/btowc.m4 b/devspec.en_US/project/recutils/m4/btowc.m4 new file mode 100755 index 0000000..85c2cbf --- /dev/null +++ b/devspec.en_US/project/recutils/m4/btowc.m4 @@ -0,0 +1,120 @@ +# btowc.m4 serial 11 +dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_BTOWC], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + dnl Check whether <wchar.h> is usable at all, first. Otherwise the test + dnl program below may lead to an endless loop. See + dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. + AC_REQUIRE([gl_WCHAR_H_INLINE_OK]) + + AC_CHECK_FUNCS_ONCE([btowc]) + if test $ac_cv_func_btowc = no; then + HAVE_BTOWC=0 + else + + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_FR]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + + dnl Cygwin 1.7.2 btowc('\0') is WEOF, not 0. + AC_CACHE_CHECK([whether btowc(0) is correct], + [gl_cv_func_btowc_nul], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (btowc ('\0') != 0) + return 1; + return 0; +}]])], + [gl_cv_func_btowc_nul=yes], + [gl_cv_func_btowc_nul=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess no on Cygwin. + cygwin*) gl_cv_func_btowc_nul="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_btowc_nul="guessing yes" ;; + # Guess yes otherwise. + *) gl_cv_func_btowc_nul="guessing yes" ;; + esac +changequote([,])dnl + ]) + ]) + + dnl IRIX 6.5 btowc(EOF) is 0xFF, not WEOF. + AC_CACHE_CHECK([whether btowc(EOF) is correct], + [gl_cv_func_btowc_eof], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on IRIX. + irix*) gl_cv_func_btowc_eof="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_btowc_eof="guessing yes" ;; + # Guess yes otherwise. + *) gl_cv_func_btowc_eof="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR != none; then + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + if (btowc (EOF) != WEOF) + return 1; + } + return 0; +}]])], + [gl_cv_func_btowc_eof=yes], + [gl_cv_func_btowc_eof=no], + [:]) + fi + ]) + + case "$gl_cv_func_btowc_nul" in + *yes) ;; + *) REPLACE_BTOWC=1 ;; + esac + case "$gl_cv_func_btowc_eof" in + *yes) ;; + *) REPLACE_BTOWC=1 ;; + esac + fi +]) + +# Prerequisites of lib/btowc.c. +AC_DEFUN([gl_PREREQ_BTOWC], [ + : +]) diff --git a/devspec.en_US/project/recutils/m4/builtin-expect.m4 b/devspec.en_US/project/recutils/m4/builtin-expect.m4 new file mode 100755 index 0000000..b65fbf8 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/builtin-expect.m4 @@ -0,0 +1,49 @@ +dnl Check for __builtin_expect. + +dnl Copyright 2016-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Paul Eggert. + +AC_DEFUN([gl___BUILTIN_EXPECT], +[ + AC_CACHE_CHECK([for __builtin_expect], + [gl_cv___builtin_expect], + [AC_LINK_IFELSE( + [AC_LANG_SOURCE([[ + int + main (int argc, char **argv) + { + argc = __builtin_expect (argc, 100); + return argv[argc != 100][0]; + }]])], + [gl_cv___builtin_expect=yes], + [AC_LINK_IFELSE( + [AC_LANG_SOURCE([[ + #include <builtins.h> + int + main (int argc, char **argv) + { + argc = __builtin_expect (argc, 100); + return argv[argc != 100][0]; + }]])], + [gl_cv___builtin_expect="in <builtins.h>"], + [gl_cv___builtin_expect=no])])]) + if test "$gl_cv___builtin_expect" = yes; then + AC_DEFINE([HAVE___BUILTIN_EXPECT], [1]) + elif test "$gl_cv___builtin_expect" = "in <builtins.h>"; then + AC_DEFINE([HAVE___BUILTIN_EXPECT], [2]) + fi + AH_VERBATIM([HAVE___BUILTIN_EXPECT], + [/* Define to 1 if the compiler supports __builtin_expect, + and to 2 if <builtins.h> does. */ +#undef HAVE___BUILTIN_EXPECT +#ifndef HAVE___BUILTIN_EXPECT +# define __builtin_expect(e, c) (e) +#elif HAVE___BUILTIN_EXPECT == 2 +# include <builtins.h> +#endif + ]) +]) diff --git a/devspec.en_US/project/recutils/m4/canonicalize.m4 b/devspec.en_US/project/recutils/m4/canonicalize.m4 new file mode 100755 index 0000000..5b6e25d --- /dev/null +++ b/devspec.en_US/project/recutils/m4/canonicalize.m4 @@ -0,0 +1,131 @@ +# canonicalize.m4 serial 29 + +dnl Copyright (C) 2003-2007, 2009-2019 Free Software Foundation, Inc. + +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Provides canonicalize_file_name and canonicalize_filename_mode, but does +# not provide or fix realpath. +AC_DEFUN([gl_FUNC_CANONICALIZE_FILENAME_MODE], +[ + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_CHECK_FUNCS_ONCE([canonicalize_file_name]) + AC_REQUIRE([gl_DOUBLE_SLASH_ROOT]) + AC_REQUIRE([gl_FUNC_REALPATH_WORKS]) + if test $ac_cv_func_canonicalize_file_name = no; then + HAVE_CANONICALIZE_FILE_NAME=0 + else + case "$gl_cv_func_realpath_works" in + *yes) ;; + *) REPLACE_CANONICALIZE_FILE_NAME=1 ;; + esac + fi +]) + +# Provides canonicalize_file_name and realpath. +AC_DEFUN([gl_CANONICALIZE_LGPL], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_REQUIRE([gl_CANONICALIZE_LGPL_SEPARATE]) + if test $ac_cv_func_canonicalize_file_name = no; then + HAVE_CANONICALIZE_FILE_NAME=0 + if test $ac_cv_func_realpath = no; then + HAVE_REALPATH=0 + else + case "$gl_cv_func_realpath_works" in + *yes) ;; + *) REPLACE_REALPATH=1 ;; + esac + fi + else + case "$gl_cv_func_realpath_works" in + *yes) + ;; + *) + REPLACE_CANONICALIZE_FILE_NAME=1 + REPLACE_REALPATH=1 + ;; + esac + fi +]) + +# Like gl_CANONICALIZE_LGPL, except prepare for separate compilation +# (no REPLACE_CANONICALIZE_FILE_NAME, no REPLACE_REALPATH, no AC_LIBOBJ). +AC_DEFUN([gl_CANONICALIZE_LGPL_SEPARATE], +[ + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_CHECK_FUNCS_ONCE([canonicalize_file_name getcwd readlink]) + AC_REQUIRE([gl_DOUBLE_SLASH_ROOT]) + AC_REQUIRE([gl_FUNC_REALPATH_WORKS]) + AC_CHECK_HEADERS_ONCE([sys/param.h]) +]) + +# Check whether realpath works. Assume that if a platform has both +# realpath and canonicalize_file_name, but the former is broken, then +# so is the latter. +AC_DEFUN([gl_FUNC_REALPATH_WORKS], +[ + AC_CHECK_FUNCS_ONCE([realpath]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether realpath works], [gl_cv_func_realpath_works], [ + touch conftest.a + mkdir conftest.d + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ + ]GL_NOCRASH[ + #include <stdlib.h> + #include <string.h> + ]], [[ + int result = 0; + { + char *name = realpath ("conftest.a", NULL); + if (!(name && *name == '/')) + result |= 1; + free (name); + } + { + char *name = realpath ("conftest.b/../conftest.a", NULL); + if (name != NULL) + result |= 2; + free (name); + } + { + char *name = realpath ("conftest.a/", NULL); + if (name != NULL) + result |= 4; + free (name); + } + { + char *name1 = realpath (".", NULL); + char *name2 = realpath ("conftest.d//./..", NULL); + if (! name1 || ! name2 || strcmp (name1, name2)) + result |= 8; + free (name1); + free (name2); + } + return result; + ]]) + ], + [gl_cv_func_realpath_works=yes], + [gl_cv_func_realpath_works=no], + [case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_realpath_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_realpath_works="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_realpath_works="guessing no" ;; + esac + ]) + rm -rf conftest.a conftest.d + ]) + case "$gl_cv_func_realpath_works" in + *yes) + AC_DEFINE([FUNC_REALPATH_WORKS], [1], [Define to 1 if realpath() + can malloc memory, always gives an absolute path, and handles + trailing slash correctly.]) + ;; + esac +]) diff --git a/devspec.en_US/project/recutils/m4/clock_time.m4 b/devspec.en_US/project/recutils/m4/clock_time.m4 new file mode 100755 index 0000000..8f7a7fc --- /dev/null +++ b/devspec.en_US/project/recutils/m4/clock_time.m4 @@ -0,0 +1,31 @@ +# clock_time.m4 serial 10 +dnl Copyright (C) 2002-2006, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Check for clock_gettime and clock_settime, and set LIB_CLOCK_GETTIME. +# For a program named, say foo, you should add a line like the following +# in the corresponding Makefile.am file: +# foo_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) + +AC_DEFUN([gl_CLOCK_TIME], +[ + dnl Persuade glibc and Solaris <time.h> to declare these functions. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function. + # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4. + + # Save and restore LIBS so e.g., -lrt, isn't added to it. Otherwise, *all* + # programs in the package would end up linked with that potentially-shared + # library, inducing unnecessary run-time overhead. + LIB_CLOCK_GETTIME= + AC_SUBST([LIB_CLOCK_GETTIME]) + gl_saved_libs=$LIBS + AC_SEARCH_LIBS([clock_gettime], [rt posix4], + [test "$ac_cv_search_clock_gettime" = "none required" || + LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime]) + AC_CHECK_FUNCS([clock_gettime clock_settime]) + LIBS=$gl_saved_libs +]) diff --git a/devspec.en_US/project/recutils/m4/close-stream.m4 b/devspec.en_US/project/recutils/m4/close-stream.m4 new file mode 100755 index 0000000..5d31221 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/close-stream.m4 @@ -0,0 +1,11 @@ +#serial 4 +dnl Copyright (C) 2006-2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Prerequisites of lib/close-stream.c. +AC_DEFUN([gl_CLOSE_STREAM], +[ + : +]) diff --git a/devspec.en_US/project/recutils/m4/close.m4 b/devspec.en_US/project/recutils/m4/close.m4 new file mode 100755 index 0000000..7013a13 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/close.m4 @@ -0,0 +1,35 @@ +# close.m4 serial 9 +dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_CLOSE], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + m4_ifdef([gl_MSVC_INVAL], [ + AC_REQUIRE([gl_MSVC_INVAL]) + if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then + REPLACE_CLOSE=1 + fi + ]) + m4_ifdef([gl_PREREQ_SYS_H_WINSOCK2], [ + gl_PREREQ_SYS_H_WINSOCK2 + if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then + dnl Even if the 'socket' module is not used here, another part of the + dnl application may use it and pass file descriptors that refer to + dnl sockets to the close() function. So enable the support for sockets. + REPLACE_CLOSE=1 + fi + ]) + dnl Replace close() for supporting the gnulib-defined fchdir() function, + dnl to keep fchdir's bookkeeping up-to-date. + m4_ifdef([gl_FUNC_FCHDIR], [ + if test $REPLACE_CLOSE = 0; then + gl_TEST_FCHDIR + if test $HAVE_FCHDIR = 0; then + REPLACE_CLOSE=1 + fi + fi + ]) +]) diff --git a/devspec.en_US/project/recutils/m4/closeout.m4 b/devspec.en_US/project/recutils/m4/closeout.m4 new file mode 100755 index 0000000..c02179b --- /dev/null +++ b/devspec.en_US/project/recutils/m4/closeout.m4 @@ -0,0 +1,12 @@ +# closeout.m4 serial 6 +dnl Copyright (C) 2002-2003, 2005-2006, 2009-2019 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Prerequisites of lib/closeout.c. +AC_DEFUN([gl_CLOSEOUT], +[ + : +]) diff --git a/devspec.en_US/project/recutils/m4/codeset.m4 b/devspec.en_US/project/recutils/m4/codeset.m4 new file mode 100755 index 0000000..280f556 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/codeset.m4 @@ -0,0 +1,24 @@ +# codeset.m4 serial 5 (gettext-0.18.2) +dnl Copyright (C) 2000-2002, 2006, 2008-2014, 2016, 2019 Free Software +dnl Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([AM_LANGINFO_CODESET], +[ + AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <langinfo.h>]], + [[char* cs = nl_langinfo(CODESET); return !cs;]])], + [am_cv_langinfo_codeset=yes], + [am_cv_langinfo_codeset=no]) + ]) + if test $am_cv_langinfo_codeset = yes; then + AC_DEFINE([HAVE_LANGINFO_CODESET], [1], + [Define if you have <langinfo.h> and nl_langinfo(CODESET).]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/dirname.m4 b/devspec.en_US/project/recutils/m4/dirname.m4 new file mode 100755 index 0000000..32141ae --- /dev/null +++ b/devspec.en_US/project/recutils/m4/dirname.m4 @@ -0,0 +1,19 @@ +#serial 10 -*- autoconf -*- +dnl Copyright (C) 2002-2006, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_DIRNAME], +[ + AC_REQUIRE([gl_DIRNAME_LGPL]) +]) + +AC_DEFUN([gl_DIRNAME_LGPL], +[ + dnl Prerequisites of lib/dirname.h. + AC_REQUIRE([gl_DOUBLE_SLASH_ROOT]) + + dnl No prerequisites of lib/basename-lgpl.c, lib/dirname-lgpl.c, + dnl lib/stripslash.c. +]) diff --git a/devspec.en_US/project/recutils/m4/double-slash-root.m4 b/devspec.en_US/project/recutils/m4/double-slash-root.m4 new file mode 100755 index 0000000..0c5afb1 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/double-slash-root.m4 @@ -0,0 +1,38 @@ +# double-slash-root.m4 serial 4 -*- Autoconf -*- +dnl Copyright (C) 2006, 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_DOUBLE_SLASH_ROOT], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CACHE_CHECK([whether // is distinct from /], [gl_cv_double_slash_root], + [ if test x"$cross_compiling" = xyes ; then + # When cross-compiling, there is no way to tell whether // is special + # short of a list of hosts. However, the only known hosts to date + # that have a distinct // are Apollo DomainOS (too old to port to), + # Cygwin, and z/OS. If anyone knows of another system for which // has + # special semantics and is distinct from /, please report it to + # <bug-gnulib@gnu.org>. + case $host in + *-cygwin | i370-ibm-openedition) + gl_cv_double_slash_root=yes ;; + *) + # Be optimistic and assume that / and // are the same when we + # don't know. + gl_cv_double_slash_root='unknown, assuming no' ;; + esac + else + set x `ls -di / // 2>/dev/null` + if test "$[2]" = "$[4]" && wc //dev/null >/dev/null 2>&1; then + gl_cv_double_slash_root=no + else + gl_cv_double_slash_root=yes + fi + fi]) + if test "$gl_cv_double_slash_root" = yes; then + AC_DEFINE([DOUBLE_SLASH_IS_DISTINCT_ROOT], [1], + [Define to 1 if // is a file system root distinct from /.]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/dup2.m4 b/devspec.en_US/project/recutils/m4/dup2.m4 new file mode 100755 index 0000000..b314247 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/dup2.m4 @@ -0,0 +1,117 @@ +#serial 25 +dnl Copyright (C) 2002, 2005, 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_DUP2], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) + m4_ifdef([gl_FUNC_DUP2_OBSOLETE], [ + AC_CHECK_FUNCS_ONCE([dup2]) + if test $ac_cv_func_dup2 = no; then + HAVE_DUP2=0 + fi + ], [ + AC_DEFINE([HAVE_DUP2], [1], [Define to 1 if you have the 'dup2' function.]) + ]) + if test $HAVE_DUP2 = 1; then + AC_CACHE_CHECK([whether dup2 works], [gl_cv_func_dup2_works], + [AC_RUN_IFELSE([ + AC_LANG_PROGRAM( + [[#include <errno.h> + #include <fcntl.h> + #include <limits.h> + #include <sys/resource.h> + #include <unistd.h> + #ifndef RLIM_SAVED_CUR + # define RLIM_SAVED_CUR RLIM_INFINITY + #endif + #ifndef RLIM_SAVED_MAX + # define RLIM_SAVED_MAX RLIM_INFINITY + #endif + ]], + [[int result = 0; + int bad_fd = INT_MAX; + struct rlimit rlim; + if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 + && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX + && rlim.rlim_cur != RLIM_INFINITY + && rlim.rlim_cur != RLIM_SAVED_MAX + && rlim.rlim_cur != RLIM_SAVED_CUR) + bad_fd = rlim.rlim_cur; + #ifdef FD_CLOEXEC + if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1) + result |= 1; + #endif + if (dup2 (1, 1) != 1) + result |= 2; + #ifdef FD_CLOEXEC + if (fcntl (1, F_GETFD) != FD_CLOEXEC) + result |= 4; + #endif + close (0); + if (dup2 (0, 0) != -1) + result |= 8; + /* Many gnulib modules require POSIX conformance of EBADF. */ + if (dup2 (2, bad_fd) == -1 && errno != EBADF) + result |= 16; + /* Flush out some cygwin core dumps. */ + if (dup2 (2, -1) != -1 || errno != EBADF) + result |= 32; + dup2 (2, 255); + dup2 (2, 256); + /* On OS/2 kLIBC, dup2() does not work on a directory fd. */ + { + int fd = open (".", O_RDONLY); + if (fd == -1) + result |= 64; + else if (dup2 (fd, fd + 1) == -1) + result |= 128; + + close (fd); + } + return result;]]) + ], + [gl_cv_func_dup2_works=yes], [gl_cv_func_dup2_works=no], + [case "$host_os" in + mingw*) # on this platform, dup2 always returns 0 for success + gl_cv_func_dup2_works="guessing no" ;; + cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 + gl_cv_func_dup2_works="guessing no" ;; + aix* | freebsd*) + # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE, + # not EBADF. + gl_cv_func_dup2_works="guessing no" ;; + haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC. + gl_cv_func_dup2_works="guessing no" ;; + *-android*) # implemented using dup3(), which fails if oldfd == newfd + gl_cv_func_dup2_works="guessing no" ;; + os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd. + gl_cv_func_dup2_works="guessing no" ;; + *) gl_cv_func_dup2_works="guessing yes" ;; + esac]) + ]) + case "$gl_cv_func_dup2_works" in + *yes) ;; + *) + REPLACE_DUP2=1 + AC_CHECK_FUNCS([setdtablesize]) + ;; + esac + fi + dnl Replace dup2() for supporting the gnulib-defined fchdir() function, + dnl to keep fchdir's bookkeeping up-to-date. + m4_ifdef([gl_FUNC_FCHDIR], [ + gl_TEST_FCHDIR + if test $HAVE_FCHDIR = 0; then + if test $HAVE_DUP2 = 1; then + REPLACE_DUP2=1 + fi + fi + ]) +]) + +# Prerequisites of lib/dup2.c. +AC_DEFUN([gl_PREREQ_DUP2], []) diff --git a/devspec.en_US/project/recutils/m4/eealloc.m4 b/devspec.en_US/project/recutils/m4/eealloc.m4 new file mode 100755 index 0000000..2a4b120 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/eealloc.m4 @@ -0,0 +1,31 @@ +# eealloc.m4 serial 3 +dnl Copyright (C) 2003, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_EEALLOC], +[ + AC_REQUIRE([gl_EEMALLOC]) + AC_REQUIRE([gl_EEREALLOC]) +]) + +AC_DEFUN([gl_EEMALLOC], +[ + _AC_FUNC_MALLOC_IF( + [gl_cv_func_malloc_0_nonnull=1], + [gl_cv_func_malloc_0_nonnull=0]) + AC_DEFINE_UNQUOTED([MALLOC_0_IS_NONNULL], [$gl_cv_func_malloc_0_nonnull], + [If malloc(0) is != NULL, define this to 1. Otherwise define this + to 0.]) +]) + +AC_DEFUN([gl_EEREALLOC], +[ + _AC_FUNC_REALLOC_IF( + [gl_cv_func_realloc_0_nonnull=1], + [gl_cv_func_realloc_0_nonnull=0]) + AC_DEFINE_UNQUOTED([REALLOC_0_IS_NONNULL], [$gl_cv_func_realloc_0_nonnull], + [If realloc(NULL,0) is != NULL, define this to 1. Otherwise define this + to 0.]) +]) diff --git a/devspec.en_US/project/recutils/m4/environ.m4 b/devspec.en_US/project/recutils/m4/environ.m4 new file mode 100755 index 0000000..c1a6fa3 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/environ.m4 @@ -0,0 +1,45 @@ +# environ.m4 serial 7 +dnl Copyright (C) 2001-2004, 2006-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN_ONCE([gl_ENVIRON], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + dnl Persuade glibc <unistd.h> to declare environ. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + AC_CHECK_HEADERS_ONCE([unistd.h]) + gt_CHECK_VAR_DECL( + [#if HAVE_UNISTD_H + #include <unistd.h> + #endif + /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */ + #include <stdlib.h> + ], + [environ]) + if test $gt_cv_var_environ_declaration != yes; then + HAVE_DECL_ENVIRON=0 + fi +]) + +# Check if a variable is properly declared. +# gt_CHECK_VAR_DECL(includes,variable) +AC_DEFUN([gt_CHECK_VAR_DECL], +[ + define([gt_cv_var], [gt_cv_var_]$2[_declaration]) + AC_CACHE_CHECK([if $2 is properly declared], [gt_cv_var], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[$1 + extern struct { int foo; } $2;]], + [[$2.foo = 1;]])], + [gt_cv_var=no], + [gt_cv_var=yes])]) + if test $gt_cv_var = yes; then + AC_DEFINE([HAVE_]m4_translit($2, [a-z], [A-Z])[_DECL], 1, + [Define if you have the declaration of $2.]) + fi + undefine([gt_cv_var]) +]) diff --git a/devspec.en_US/project/recutils/m4/errno_h.m4 b/devspec.en_US/project/recutils/m4/errno_h.m4 new file mode 100755 index 0000000..2388854 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/errno_h.m4 @@ -0,0 +1,133 @@ +# errno_h.m4 serial 13 +dnl Copyright (C) 2004, 2006, 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_PREREQ([2.61]) + +AC_DEFUN_ONCE([gl_HEADER_ERRNO_H], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [ + AC_EGREP_CPP([booboo],[ +#include <errno.h> +#if !defined ETXTBSY +booboo +#endif +#if !defined ENOMSG +booboo +#endif +#if !defined EIDRM +booboo +#endif +#if !defined ENOLINK +booboo +#endif +#if !defined EPROTO +booboo +#endif +#if !defined EMULTIHOP +booboo +#endif +#if !defined EBADMSG +booboo +#endif +#if !defined EOVERFLOW +booboo +#endif +#if !defined ENOTSUP +booboo +#endif +#if !defined ENETRESET +booboo +#endif +#if !defined ECONNABORTED +booboo +#endif +#if !defined ESTALE +booboo +#endif +#if !defined EDQUOT +booboo +#endif +#if !defined ECANCELED +booboo +#endif +#if !defined EOWNERDEAD +booboo +#endif +#if !defined ENOTRECOVERABLE +booboo +#endif +#if !defined EILSEQ +booboo +#endif + ], + [gl_cv_header_errno_h_complete=no], + [gl_cv_header_errno_h_complete=yes]) + ]) + if test $gl_cv_header_errno_h_complete = yes; then + ERRNO_H='' + else + gl_NEXT_HEADERS([errno.h]) + ERRNO_H='errno.h' + fi + AC_SUBST([ERRNO_H]) + AM_CONDITIONAL([GL_GENERATE_ERRNO_H], [test -n "$ERRNO_H"]) + gl_REPLACE_ERRNO_VALUE([EMULTIHOP]) + gl_REPLACE_ERRNO_VALUE([ENOLINK]) + gl_REPLACE_ERRNO_VALUE([EOVERFLOW]) +]) + +# Assuming $1 = EOVERFLOW. +# The EOVERFLOW errno value ought to be defined in <errno.h>, according to +# POSIX. But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and +# some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined. +# Check for the value of EOVERFLOW. +# Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE. +AC_DEFUN([gl_REPLACE_ERRNO_VALUE], +[ + if test -n "$ERRNO_H"; then + AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [ + AC_EGREP_CPP([yes],[ +#include <errno.h> +#ifdef ]$1[ +yes +#endif + ], + [gl_cv_header_errno_h_]$1[=yes], + [gl_cv_header_errno_h_]$1[=no]) + if test $gl_cv_header_errno_h_]$1[ = no; then + AC_EGREP_CPP([yes],[ +#define _XOPEN_SOURCE_EXTENDED 1 +#include <errno.h> +#ifdef ]$1[ +yes +#endif + ], [gl_cv_header_errno_h_]$1[=hidden]) + if test $gl_cv_header_errno_h_]$1[ = hidden; then + dnl The macro exists but is hidden. + dnl Define it to the same value. + AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [ +#define _XOPEN_SOURCE_EXTENDED 1 +#include <errno.h> +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include <stdio.h> +#include <stdlib.h> +]) + fi + fi + ]) + case $gl_cv_header_errno_h_]$1[ in + yes | no) + ]$1[_HIDDEN=0; ]$1[_VALUE= + ;; + *) + ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1[" + ;; + esac + AC_SUBST($1[_HIDDEN]) + AC_SUBST($1[_VALUE]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/error.m4 b/devspec.en_US/project/recutils/m4/error.m4 new file mode 100755 index 0000000..393adb5 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/error.m4 @@ -0,0 +1,27 @@ +#serial 14 + +# Copyright (C) 1996-1998, 2001-2004, 2009-2019 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_ERROR], +[ + dnl We don't use AC_FUNC_ERROR_AT_LINE any more, because it is no longer + dnl maintained in Autoconf and because it invokes AC_LIBOBJ. + AC_CACHE_CHECK([for error_at_line], [ac_cv_lib_error_at_line], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <error.h>]], + [[error_at_line (0, 0, "", 0, "an error occurred");]])], + [ac_cv_lib_error_at_line=yes], + [ac_cv_lib_error_at_line=no])]) +]) + +# Prerequisites of lib/error.c. +AC_DEFUN([gl_PREREQ_ERROR], +[ + AC_REQUIRE([AC_FUNC_STRERROR_R]) + : +]) diff --git a/devspec.en_US/project/recutils/m4/euidaccess.m4 b/devspec.en_US/project/recutils/m4/euidaccess.m4 new file mode 100755 index 0000000..8e840e6 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/euidaccess.m4 @@ -0,0 +1,52 @@ +# euidaccess.m4 serial 15 +dnl Copyright (C) 2002-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_NONREENTRANT_EUIDACCESS], +[ + AC_REQUIRE([gl_FUNC_EUIDACCESS]) + AC_CHECK_DECLS([setregid]) + AC_DEFINE([PREFER_NONREENTRANT_EUIDACCESS], [1], + [Define this if you prefer euidaccess to return the correct result + even if this would make it nonreentrant. Define this only if your + entire application is safe even if the uid or gid might temporarily + change. If your application uses signal handlers or threads it + is probably not safe.]) +]) + +AC_DEFUN([gl_FUNC_EUIDACCESS], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + + dnl Persuade glibc <unistd.h> to declare euidaccess(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_CHECK_FUNCS([euidaccess]) + if test $ac_cv_func_euidaccess = no; then + HAVE_EUIDACCESS=0 + fi +]) + +# Prerequisites of lib/euidaccess.c. +AC_DEFUN([gl_PREREQ_EUIDACCESS], [ + dnl Prefer POSIX faccessat over non-standard euidaccess. + AC_CHECK_FUNCS_ONCE([faccessat]) + dnl Try various other non-standard fallbacks. + AC_CHECK_HEADERS([libgen.h]) + AC_FUNC_GETGROUPS + + # Solaris 9 and 10 need -lgen to get the eaccess function. + # Save and restore LIBS so -lgen isn't added to it. Otherwise, *all* + # programs in the package would end up linked with that potentially-shared + # library, inducing unnecessary run-time overhead. + LIB_EACCESS= + AC_SUBST([LIB_EACCESS]) + gl_saved_libs=$LIBS + AC_SEARCH_LIBS([eaccess], [gen], + [test "$ac_cv_search_eaccess" = "none required" || + LIB_EACCESS=$ac_cv_search_eaccess]) + AC_CHECK_FUNCS([eaccess]) + LIBS=$gl_saved_libs +]) diff --git a/devspec.en_US/project/recutils/m4/execute.m4 b/devspec.en_US/project/recutils/m4/execute.m4 new file mode 100755 index 0000000..f84e470 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/execute.m4 @@ -0,0 +1,11 @@ +# execute.m4 serial 5 +dnl Copyright (C) 2003, 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_EXECUTE], +[ + dnl Prerequisites of lib/execute.c. + AC_REQUIRE([AC_TYPE_MODE_T]) +]) diff --git a/devspec.en_US/project/recutils/m4/exponentd.m4 b/devspec.en_US/project/recutils/m4/exponentd.m4 new file mode 100755 index 0000000..90870df --- /dev/null +++ b/devspec.en_US/project/recutils/m4/exponentd.m4 @@ -0,0 +1,116 @@ +# exponentd.m4 serial 3 +dnl Copyright (C) 2007-2008, 2010-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +AC_DEFUN([gl_DOUBLE_EXPONENT_LOCATION], +[ + AC_CACHE_CHECK([where to find the exponent in a 'double'], + [gl_cv_cc_double_expbit0], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <float.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { double value; unsigned int word[NWORDS]; } memory_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (double x) +{ + memory_double m; + size_t i; + /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ + memset (&m, 0, sizeof (memory_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25); + add_to_ored_words (0.5); + add_to_ored_words (1.0); + add_to_ored_words (2.0); + add_to_ored_words (4.0); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + ]])], + [gl_cv_cc_double_expbit0=`cat conftest.out`], + [gl_cv_cc_double_expbit0="unknown"], + [ + dnl On ARM, there are two 'double' floating-point formats, used by + dnl different sets of instructions: The older FPA instructions assume + dnl that they are stored in big-endian word order, while the words + dnl (like integer types) are stored in little-endian byte order. + dnl The newer VFP instructions assume little-endian order + dnl consistently. + AC_EGREP_CPP([mixed_endianness], [ +#if defined arm || defined __arm || defined __arm__ + mixed_endianness +#endif + ], + [gl_cv_cc_double_expbit0="unknown"], + [ + pushdef([AC_MSG_CHECKING],[:])dnl + pushdef([AC_MSG_RESULT],[:])dnl + pushdef([AC_MSG_RESULT_UNQUOTED],[:])dnl + AC_C_BIGENDIAN( + [gl_cv_cc_double_expbit0="word 0 bit 20"], + [gl_cv_cc_double_expbit0="word 1 bit 20"], + [gl_cv_cc_double_expbit0="unknown"]) + popdef([AC_MSG_RESULT_UNQUOTED])dnl + popdef([AC_MSG_RESULT])dnl + popdef([AC_MSG_CHECKING])dnl + ]) + ]) + rm -f conftest.out + ]) + case "$gl_cv_cc_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` + AC_DEFINE_UNQUOTED([DBL_EXPBIT0_WORD], [$word], + [Define as the word index where to find the exponent of 'double'.]) + AC_DEFINE_UNQUOTED([DBL_EXPBIT0_BIT], [$bit], + [Define as the bit index in the word where to find bit 0 of the exponent of 'double'.]) + ;; + esac +]) diff --git a/devspec.en_US/project/recutils/m4/exponentf.m4 b/devspec.en_US/project/recutils/m4/exponentf.m4 new file mode 100755 index 0000000..cf8306b --- /dev/null +++ b/devspec.en_US/project/recutils/m4/exponentf.m4 @@ -0,0 +1,92 @@ +# exponentf.m4 serial 2 +dnl Copyright (C) 2007-2008, 2010-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +AC_DEFUN([gl_FLOAT_EXPONENT_LOCATION], +[ + AC_CACHE_CHECK([where to find the exponent in a 'float'], + [gl_cv_cc_float_expbit0], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <float.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { float value; unsigned int word[NWORDS]; } memory_float; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (float x) +{ + memory_float m; + size_t i; + /* Clear it first, in case + sizeof (float) < sizeof (memory_float). */ + memset (&m, 0, sizeof (memory_float)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25f); + add_to_ored_words (0.5f); + add_to_ored_words (1.0f); + add_to_ored_words (2.0f); + add_to_ored_words (4.0f); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + ]])], + [gl_cv_cc_float_expbit0=`cat conftest.out`], + [gl_cv_cc_float_expbit0="unknown"], + [gl_cv_cc_float_expbit0="word 0 bit 23"]) + rm -f conftest.out + ]) + case "$gl_cv_cc_float_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` + AC_DEFINE_UNQUOTED([FLT_EXPBIT0_WORD], [$word], + [Define as the word index where to find the exponent of 'float'.]) + AC_DEFINE_UNQUOTED([FLT_EXPBIT0_BIT], [$bit], + [Define as the bit index in the word where to find bit 0 of the exponent of 'float'.]) + ;; + esac +]) diff --git a/devspec.en_US/project/recutils/m4/exponentl.m4 b/devspec.en_US/project/recutils/m4/exponentl.m4 new file mode 100755 index 0000000..4064981 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/exponentl.m4 @@ -0,0 +1,114 @@ +# exponentl.m4 serial 4 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +AC_DEFUN([gl_LONG_DOUBLE_EXPONENT_LOCATION], +[ + AC_REQUIRE([gl_BIGENDIAN]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([where to find the exponent in a 'long double'], + [gl_cv_cc_long_double_expbit0], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <float.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { long double value; unsigned int word[NWORDS]; } + memory_long_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (long double x) +{ + memory_long_double m; + size_t i; + /* Clear it first, in case + sizeof (long double) < sizeof (memory_long_double). */ + memset (&m, 0, sizeof (memory_long_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25L); + add_to_ored_words (0.5L); + add_to_ored_words (1.0L); + add_to_ored_words (2.0L); + add_to_ored_words (4.0L); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + ]])], + [gl_cv_cc_long_double_expbit0=`cat conftest.out`], + [gl_cv_cc_long_double_expbit0="unknown"], + [ + dnl When cross-compiling, in general we don't know. It depends on the + dnl ABI and compiler version. There are too many cases. + gl_cv_cc_long_double_expbit0="unknown" + case "$host_os" in + mingw*) # On native Windows (little-endian), we know the result + # in two cases: mingw, MSVC. + AC_EGREP_CPP([Known], [ +#ifdef __MINGW32__ + Known +#endif + ], [gl_cv_cc_long_double_expbit0="word 2 bit 0"]) + AC_EGREP_CPP([Known], [ +#ifdef _MSC_VER + Known +#endif + ], [gl_cv_cc_long_double_expbit0="word 1 bit 20"]) + ;; + esac + ]) + rm -f conftest.out + ]) + case "$gl_cv_cc_long_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'` + AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_WORD], [$word], + [Define as the word index where to find the exponent of 'long double'.]) + AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_BIT], [$bit], + [Define as the bit index in the word where to find bit 0 of the exponent of 'long double'.]) + ;; + esac +]) diff --git a/devspec.en_US/project/recutils/m4/extensions.m4 b/devspec.en_US/project/recutils/m4/extensions.m4 new file mode 100755 index 0000000..fd1ce81 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/extensions.m4 @@ -0,0 +1,189 @@ +# serial 18 -*- Autoconf -*- +# Enable extensions on systems that normally disable them. + +# Copyright (C) 2003, 2006-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git +# Autoconf. Perhaps we can remove this once we can assume Autoconf +# 2.70 or later everywhere, but since Autoconf mutates rapidly +# enough in this area it's likely we'll need to redefine +# AC_USE_SYSTEM_EXTENSIONS for quite some time. + +# If autoconf reports a warning +# warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS +# or warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS +# the fix is +# 1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked +# but always AC_REQUIREd, +# 2) to ensure that for each occurrence of +# AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) +# or +# AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) +# the corresponding gnulib module description has 'extensions' among +# its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS +# invocation occurs in gl_EARLY, not in gl_INIT. + +# AC_USE_SYSTEM_EXTENSIONS +# ------------------------ +# Enable extensions on systems that normally disable them, +# typically due to standards-conformance issues. +# +# Remember that #undef in AH_VERBATIM gets replaced with #define by +# AC_DEFINE. The goal here is to define all known feature-enabling +# macros, then, if reports of conflicts are made, disable macros that +# cause problems on some platforms (such as __EXTENSIONS__). +AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS], +[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl +AC_BEFORE([$0], [AC_RUN_IFELSE])dnl + + AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=]) + if test "$MINIX" = yes; then + AC_DEFINE([_POSIX_SOURCE], [1], + [Define to 1 if you need to in order for 'stat' and other + things to work.]) + AC_DEFINE([_POSIX_1_SOURCE], [2], + [Define to 2 if the system does not provide POSIX.1 features + except with this defined.]) + AC_DEFINE([_MINIX], [1], + [Define to 1 if on MINIX.]) + AC_DEFINE([_NETBSD_SOURCE], [1], + [Define to 1 to make NetBSD features available. MINIX 3 needs this.]) + fi + +dnl Use a different key than __EXTENSIONS__, as that name broke existing +dnl configure.ac when using autoheader 2.62. + AH_VERBATIM([USE_SYSTEM_EXTENSIONS], +[/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable general extensions on macOS. */ +#ifndef _DARWIN_C_SOURCE +# undef _DARWIN_C_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable NetBSD extensions on NetBSD. */ +#ifndef _NETBSD_SOURCE +# undef _NETBSD_SOURCE +#endif +/* Enable OpenBSD extensions on NetBSD. */ +#ifndef _OPENBSD_SOURCE +# undef _OPENBSD_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ +#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ +# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ +#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ +# undef __STDC_WANT_IEC_60559_BFP_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ +#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ +# undef __STDC_WANT_IEC_60559_DFP_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ +#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ +# undef __STDC_WANT_IEC_60559_FUNCS_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ +#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ +# undef __STDC_WANT_IEC_60559_TYPES_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ +#ifndef __STDC_WANT_LIB_EXT2__ +# undef __STDC_WANT_LIB_EXT2__ +#endif +/* Enable extensions specified by ISO/IEC 24747:2009. */ +#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ +# undef __STDC_WANT_MATH_SPEC_FUNCS__ +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable X/Open extensions if necessary. HP-UX 11.11 defines + mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of + whether compiling with -Ae or -D_HPUX_SOURCE=1. */ +#ifndef _XOPEN_SOURCE +# undef _XOPEN_SOURCE +#endif +/* Enable X/Open compliant socket functions that do not require linking + with -lxnet on HP-UX 11.11. */ +#ifndef _HPUX_ALT_XOPEN_SOCKET_API +# undef _HPUX_ALT_XOPEN_SOCKET_API +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif +]) + AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], + [ac_cv_safe_to_define___extensions__], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ +# define __EXTENSIONS__ 1 + ]AC_INCLUDES_DEFAULT])], + [ac_cv_safe_to_define___extensions__=yes], + [ac_cv_safe_to_define___extensions__=no])]) + test $ac_cv_safe_to_define___extensions__ = yes && + AC_DEFINE([__EXTENSIONS__]) + AC_DEFINE([_ALL_SOURCE]) + AC_DEFINE([_DARWIN_C_SOURCE]) + AC_DEFINE([_GNU_SOURCE]) + AC_DEFINE([_NETBSD_SOURCE]) + AC_DEFINE([_OPENBSD_SOURCE]) + AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) + AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__]) + AC_DEFINE([__STDC_WANT_IEC_60559_BFP_EXT__]) + AC_DEFINE([__STDC_WANT_IEC_60559_DFP_EXT__]) + AC_DEFINE([__STDC_WANT_IEC_60559_FUNCS_EXT__]) + AC_DEFINE([__STDC_WANT_IEC_60559_TYPES_EXT__]) + AC_DEFINE([__STDC_WANT_LIB_EXT2__]) + AC_DEFINE([__STDC_WANT_MATH_SPEC_FUNCS__]) + AC_DEFINE([_TANDEM_SOURCE]) + AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined], + [ac_cv_should_define__xopen_source], + [ac_cv_should_define__xopen_source=no + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ + #include <wchar.h> + mbstate_t x;]])], + [], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ + #define _XOPEN_SOURCE 500 + #include <wchar.h> + mbstate_t x;]])], + [ac_cv_should_define__xopen_source=yes])])]) + test $ac_cv_should_define__xopen_source = yes && + AC_DEFINE([_XOPEN_SOURCE], [500]) + AC_DEFINE([_HPUX_ALT_XOPEN_SOCKET_API]) +])# AC_USE_SYSTEM_EXTENSIONS + +# gl_USE_SYSTEM_EXTENSIONS +# ------------------------ +# Enable extensions on systems that normally disable them, +# typically due to standards-conformance issues. +AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS], +[ + dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS. + dnl gnulib does not need it. But if it gets required by third-party macros + dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a + dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS". + dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE, + dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck. + AC_REQUIRE([AC_GNU_SOURCE]) + + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) +]) diff --git a/devspec.en_US/project/recutils/m4/extern-inline.m4 b/devspec.en_US/project/recutils/m4/extern-inline.m4 new file mode 100755 index 0000000..ec9f221 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/extern-inline.m4 @@ -0,0 +1,114 @@ +dnl 'extern inline' a la ISO C99. + +dnl Copyright 2012-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_EXTERN_INLINE], +[ + AH_VERBATIM([extern_inline], +[/* Please see the Gnulib manual for how to use these macros. + + Suppress extern inline with HP-UX cc, as it appears to be broken; see + <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>. + + Suppress extern inline with Sun C in standards-conformance mode, as it + mishandles inline functions that call each other. E.g., for 'inline void f + (void) { } inline void g (void) { f (); }', c99 incorrectly complains + 'reference to static identifier "f" in extern inline function'. + This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. + + Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) + on configurations that mistakenly use 'static inline' to implement + functions or macros in standard C headers like <ctype.h>. For example, + if isdigit is mistakenly implemented via a static inline function, + a program containing an extern inline function that calls isdigit + may not work since the C standard prohibits extern inline functions + from calling static functions (ISO C 99 section 6.7.4.(3). + This bug is known to occur on: + + OS X 10.8 and earlier; see: + https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html + + DragonFly; see + http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log + + FreeBSD; see: + https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html + + OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and + for clang but remains for g++; see <https://trac.macports.org/ticket/41033>. + Assume DragonFly and FreeBSD will be similar. + + GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. It defines a macro + __GNUC_STDC_INLINE__ to indicate this situation or a macro + __GNUC_GNU_INLINE__ to indicate the opposite situation. + GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline + semantics but warns, unless -fgnu89-inline is used: + warning: C99 inline functions are not supported; using GNU89 + warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute + It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. + */ +#if (((defined __APPLE__ && defined __MACH__) \ + || defined __DragonFly__ || defined __FreeBSD__) \ + && (defined __header_inline \ + ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ + && ! defined __clang__) \ + : ((! defined _DONT_USE_CTYPE_INLINE_ \ + && (defined __GNUC__ || defined __cplusplus)) \ + || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ + && defined __GNUC__ && ! defined __cplusplus)))) +# define _GL_EXTERN_INLINE_STDHEADER_BUG +#endif +#if ((__GNUC__ \ + ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ + : (199901L <= __STDC_VERSION__ \ + && !defined __HP_cc \ + && !defined __PGI \ + && !(defined __SUNPRO_C && __STDC__))) \ + && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) +# define _GL_INLINE inline +# define _GL_EXTERN_INLINE extern inline +# define _GL_EXTERN_INLINE_IN_USE +#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ + && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) +# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ + /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ +# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) +# else +# define _GL_INLINE extern inline +# endif +# define _GL_EXTERN_INLINE extern +# define _GL_EXTERN_INLINE_IN_USE +#else +# define _GL_INLINE static _GL_UNUSED +# define _GL_EXTERN_INLINE static _GL_UNUSED +#endif + +/* In GCC 4.6 (inclusive) to 5.1 (exclusive), + suppress bogus "no previous prototype for 'FOO'" + and "no previous declaration for 'FOO'" diagnostics, + when FOO is an inline function in the header; see + <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and + <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>. */ +#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ +# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ +# define _GL_INLINE_HEADER_CONST_PRAGMA +# else +# define _GL_INLINE_HEADER_CONST_PRAGMA \ + _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") +# endif +# define _GL_INLINE_HEADER_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ + _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ + _GL_INLINE_HEADER_CONST_PRAGMA +# define _GL_INLINE_HEADER_END \ + _Pragma ("GCC diagnostic pop") +#else +# define _GL_INLINE_HEADER_BEGIN +# define _GL_INLINE_HEADER_END +#endif]) +]) diff --git a/devspec.en_US/project/recutils/m4/fatal-signal.m4 b/devspec.en_US/project/recutils/m4/fatal-signal.m4 new file mode 100755 index 0000000..349c1f7 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/fatal-signal.m4 @@ -0,0 +1,12 @@ +# fatal-signal.m4 serial 9 +dnl Copyright (C) 2003-2004, 2006, 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FATAL_SIGNAL], +[ + AC_REQUIRE([gt_TYPE_SIG_ATOMIC_T]) + AC_CHECK_HEADERS_ONCE([unistd.h]) + gl_PREREQ_SIG_HANDLER_H +]) diff --git a/devspec.en_US/project/recutils/m4/fcntl-o.m4 b/devspec.en_US/project/recutils/m4/fcntl-o.m4 new file mode 100755 index 0000000..6ab3387 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/fcntl-o.m4 @@ -0,0 +1,139 @@ +# fcntl-o.m4 serial 6 +dnl Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Paul Eggert. + +AC_PREREQ([2.60]) + +# Test whether the flags O_NOATIME and O_NOFOLLOW actually work. +# Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise. +# Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise. +AC_DEFUN([gl_FCNTL_O_FLAGS], +[ + dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW. + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CHECK_HEADERS_ONCE([unistd.h]) + AC_CHECK_FUNCS_ONCE([symlink]) + AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/types.h> + #include <sys/stat.h> + #if HAVE_UNISTD_H + # include <unistd.h> + #else /* on Windows with MSVC */ + # include <io.h> + # include <stdlib.h> + # defined sleep(n) _sleep ((n) * 1000) + #endif + #include <fcntl.h> + #ifndef O_NOATIME + #define O_NOATIME 0 + #endif + #ifndef O_NOFOLLOW + #define O_NOFOLLOW 0 + #endif + static int const constants[] = + { + O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, + O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY + }; + ]], + [[ + int result = !constants; + #if HAVE_SYMLINK + { + static char const sym[] = "conftest.sym"; + if (symlink ("/dev/null", sym) != 0) + result |= 2; + else + { + int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); + if (fd >= 0) + { + close (fd); + result |= 4; + } + } + if (unlink (sym) != 0 || symlink (".", sym) != 0) + result |= 2; + else + { + int fd = open (sym, O_RDONLY | O_NOFOLLOW); + if (fd >= 0) + { + close (fd); + result |= 4; + } + } + unlink (sym); + } + #endif + { + static char const file[] = "confdefs.h"; + int fd = open (file, O_RDONLY | O_NOATIME); + if (fd < 0) + result |= 8; + else + { + struct stat st0; + if (fstat (fd, &st0) != 0) + result |= 16; + else + { + char c; + sleep (1); + if (read (fd, &c, 1) != 1) + result |= 24; + else + { + if (close (fd) != 0) + result |= 32; + else + { + struct stat st1; + if (stat (file, &st1) != 0) + result |= 40; + else + if (st0.st_atime != st1.st_atime) + result |= 64; + } + } + } + } + } + return result;]])], + [gl_cv_header_working_fcntl_h=yes], + [case $? in #( + 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( + 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( + 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( + *) gl_cv_header_working_fcntl_h='no';; + esac], + [case "$host_os" in + # Guess 'no' on native Windows. + mingw*) gl_cv_header_working_fcntl_h='no' ;; + *) gl_cv_header_working_fcntl_h=cross-compiling ;; + esac + ]) + ]) + + case $gl_cv_header_working_fcntl_h in #( + *O_NOATIME* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val], + [Define to 1 if O_NOATIME works.]) + + case $gl_cv_header_working_fcntl_h in #( + *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val], + [Define to 1 if O_NOFOLLOW works.]) +]) diff --git a/devspec.en_US/project/recutils/m4/fcntl.m4 b/devspec.en_US/project/recutils/m4/fcntl.m4 new file mode 100755 index 0000000..e409e96 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/fcntl.m4 @@ -0,0 +1,126 @@ +# fcntl.m4 serial 9 +dnl Copyright (C) 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# For now, this module ensures that fcntl() +# - supports F_DUPFD correctly +# - supports or emulates F_DUPFD_CLOEXEC +# - supports F_GETFD +# Still to be ported to mingw: +# - F_SETFD +# - F_GETFL, F_SETFL +# - F_GETOWN, F_SETOWN +# - F_GETLK, F_SETLK, F_SETLKW +AC_DEFUN([gl_FUNC_FCNTL], +[ + dnl Persuade glibc to expose F_DUPFD_CLOEXEC. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CHECK_FUNCS_ONCE([fcntl]) + if test $ac_cv_func_fcntl = no; then + gl_REPLACE_FCNTL + else + dnl cygwin 1.5.x F_DUPFD has wrong errno, and allows negative target + dnl haiku alpha 2 F_DUPFD has wrong errno + AC_CACHE_CHECK([whether fcntl handles F_DUPFD correctly], + [gl_cv_func_fcntl_f_dupfd_works], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <errno.h> + #include <fcntl.h> + #include <limits.h> + #include <sys/resource.h> + #include <unistd.h> + #ifndef RLIM_SAVED_CUR + # define RLIM_SAVED_CUR RLIM_INFINITY + #endif + #ifndef RLIM_SAVED_MAX + # define RLIM_SAVED_MAX RLIM_INFINITY + #endif + ]], + [[int result = 0; + int bad_fd = INT_MAX; + struct rlimit rlim; + if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 + && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX + && rlim.rlim_cur != RLIM_INFINITY + && rlim.rlim_cur != RLIM_SAVED_MAX + && rlim.rlim_cur != RLIM_SAVED_CUR) + bad_fd = rlim.rlim_cur; + if (fcntl (0, F_DUPFD, -1) != -1) result |= 1; + if (errno != EINVAL) result |= 2; + if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4; + if (errno != EINVAL) result |= 8; + /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */ + { + int fd; + fd = open (".", O_RDONLY); + if (fd == -1) + result |= 16; + else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1) + result |= 32; + + close (fd); + } + return result;]])], + [gl_cv_func_fcntl_f_dupfd_works=yes], + [gl_cv_func_fcntl_f_dupfd_works=no], + [case $host_os in + aix* | cygwin* | haiku*) + gl_cv_func_fcntl_f_dupfd_works="guessing no" ;; + *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;; + esac])]) + case $gl_cv_func_fcntl_f_dupfd_works in + *yes) ;; + *) gl_REPLACE_FCNTL + AC_DEFINE([FCNTL_DUPFD_BUGGY], [1], [Define this to 1 if F_DUPFD + behavior does not match POSIX]) ;; + esac + + dnl Many systems lack F_DUPFD_CLOEXEC + AC_CACHE_CHECK([whether fcntl understands F_DUPFD_CLOEXEC], + [gl_cv_func_fcntl_f_dupfd_cloexec], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#include <fcntl.h> +#ifndef F_DUPFD_CLOEXEC +choke me +#endif + ]])], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ +#ifdef __linux__ +/* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace + it to support the semantics on older kernels that failed with EINVAL. */ +choke me +#endif + ]])], + [gl_cv_func_fcntl_f_dupfd_cloexec=yes], + [gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check"])], + [gl_cv_func_fcntl_f_dupfd_cloexec=no])]) + if test "$gl_cv_func_fcntl_f_dupfd_cloexec" != yes; then + gl_REPLACE_FCNTL + dnl No witness macro needed for this bug. + fi + fi + dnl Replace fcntl() for supporting the gnulib-defined fchdir() function, + dnl to keep fchdir's bookkeeping up-to-date. + m4_ifdef([gl_FUNC_FCHDIR], [ + gl_TEST_FCHDIR + if test $HAVE_FCHDIR = 0; then + gl_REPLACE_FCNTL + fi + ]) +]) + +AC_DEFUN([gl_REPLACE_FCNTL], +[ + AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([fcntl]) + if test $ac_cv_func_fcntl = no; then + HAVE_FCNTL=0 + else + REPLACE_FCNTL=1 + fi +]) diff --git a/devspec.en_US/project/recutils/m4/fcntl_h.m4 b/devspec.en_US/project/recutils/m4/fcntl_h.m4 new file mode 100755 index 0000000..a86fdae --- /dev/null +++ b/devspec.en_US/project/recutils/m4/fcntl_h.m4 @@ -0,0 +1,50 @@ +# serial 15 +# Configure fcntl.h. +dnl Copyright (C) 2006-2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Paul Eggert. + +AC_DEFUN([gl_FCNTL_H], +[ + AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) + AC_REQUIRE([gl_FCNTL_O_FLAGS]) + gl_NEXT_HEADERS([fcntl.h]) + + dnl Ensure the type pid_t gets defined. + AC_REQUIRE([AC_TYPE_PID_T]) + + dnl Ensure the type mode_t gets defined. + AC_REQUIRE([AC_TYPE_MODE_T]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use, if it is not common + dnl enough to be declared everywhere. + gl_WARN_ON_USE_PREPARE([[#include <fcntl.h> + ]], [fcntl openat]) +]) + +AC_DEFUN([gl_FCNTL_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_FCNTL_H_DEFAULTS], +[ + GNULIB_FCNTL=0; AC_SUBST([GNULIB_FCNTL]) + GNULIB_NONBLOCKING=0; AC_SUBST([GNULIB_NONBLOCKING]) + GNULIB_OPEN=0; AC_SUBST([GNULIB_OPEN]) + GNULIB_OPENAT=0; AC_SUBST([GNULIB_OPENAT]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_FCNTL=1; AC_SUBST([HAVE_FCNTL]) + HAVE_OPENAT=1; AC_SUBST([HAVE_OPENAT]) + REPLACE_FCNTL=0; AC_SUBST([REPLACE_FCNTL]) + REPLACE_OPEN=0; AC_SUBST([REPLACE_OPEN]) + REPLACE_OPENAT=0; AC_SUBST([REPLACE_OPENAT]) +]) diff --git a/devspec.en_US/project/recutils/m4/flexmember.m4 b/devspec.en_US/project/recutils/m4/flexmember.m4 new file mode 100755 index 0000000..1347068 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/flexmember.m4 @@ -0,0 +1,46 @@ +# serial 5 +# Check for flexible array member support. + +# Copyright (C) 2006, 2009-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Written by Paul Eggert. + +AC_DEFUN([AC_C_FLEXIBLE_ARRAY_MEMBER], +[ + AC_CACHE_CHECK([for flexible array member], + ac_cv_c_flexmember, + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <stdlib.h> + #include <stdio.h> + #include <stddef.h> + struct m { struct m *next, **list; char name[]; }; + struct s { struct s *p; struct m *m; int n; double d[]; };]], + [[int m = getchar (); + size_t nbytes = offsetof (struct s, d) + m * sizeof (double); + nbytes += sizeof (struct s) - 1; + nbytes -= nbytes % sizeof (struct s); + struct s *p = malloc (nbytes); + p->p = p; + p->m = NULL; + p->d[0] = 0.0; + return p->d != (double *) NULL;]])], + [ac_cv_c_flexmember=yes], + [ac_cv_c_flexmember=no])]) + if test $ac_cv_c_flexmember = yes; then + AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [], + [Define to nothing if C supports flexible array members, and to + 1 if it does not. That way, with a declaration like 'struct s + { int n; double d@<:@FLEXIBLE_ARRAY_MEMBER@:>@; };', the struct hack + can be used with pre-C99 compilers. + When computing the size of such an object, don't use 'sizeof (struct s)' + as it overestimates the size. Use 'offsetof (struct s, d)' instead. + Don't use 'offsetof (struct s, d@<:@0@:>@)', as this doesn't work with + MSVC and with C++ compilers.]) + else + AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [1]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/float_h.m4 b/devspec.en_US/project/recutils/m4/float_h.m4 new file mode 100755 index 0000000..1cd28a0 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/float_h.m4 @@ -0,0 +1,108 @@ +# float_h.m4 serial 12 +dnl Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FLOAT_H], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + FLOAT_H= + REPLACE_FLOAT_LDBL=0 + case "$host_os" in + aix* | beos* | openbsd* | mirbsd* | irix*) + FLOAT_H=float.h + ;; + freebsd* | dragonfly*) + case "$host_cpu" in +changequote(,)dnl + i[34567]86 ) +changequote([,])dnl + FLOAT_H=float.h + ;; + x86_64 ) + # On x86_64 systems, the C compiler may still be generating + # 32-bit code. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __LP64__ || defined __x86_64__ || defined __amd64__ + int ok; + #else + error fail + #endif + ]])], + [], + [FLOAT_H=float.h]) + ;; + esac + ;; + linux*) + case "$host_cpu" in + powerpc*) + FLOAT_H=float.h + ;; + esac + ;; + esac + case "$host_os" in + aix* | freebsd* | dragonfly* | linux*) + if test -n "$FLOAT_H"; then + REPLACE_FLOAT_LDBL=1 + fi + ;; + esac + + dnl Test against glibc-2.7 Linux/SPARC64 bug. + REPLACE_ITOLD=0 + AC_CACHE_CHECK([whether conversion from 'int' to 'long double' works], + [gl_cv_func_itold_works], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +int i = -1; +volatile long double ld; +int main () +{ + ld += i * 1.0L; + if (ld > 0) + return 1; + return 0; +}]])], + [gl_cv_func_itold_works=yes], + [gl_cv_func_itold_works=no], + [case "$host" in + sparc*-*-linux*) + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __LP64__ || defined __arch64__ + int ok; + #else + error fail + #endif + ]])], + [gl_cv_func_itold_works="guessing no"], + [gl_cv_func_itold_works="guessing yes"]) + ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_itold_works="guessing yes" ;; + *) gl_cv_func_itold_works="guessing yes" ;; + esac + ]) + ]) + case "$gl_cv_func_itold_works" in + *no) + REPLACE_ITOLD=1 + dnl We add the workaround to <float.h> but also to <math.h>, + dnl to increase the chances that the fix function gets pulled in. + FLOAT_H=float.h + ;; + esac + + if test -n "$FLOAT_H"; then + gl_NEXT_HEADERS([float.h]) + fi + AC_SUBST([FLOAT_H]) + AM_CONDITIONAL([GL_GENERATE_FLOAT_H], [test -n "$FLOAT_H"]) + AC_SUBST([REPLACE_ITOLD]) +]) diff --git a/devspec.en_US/project/recutils/m4/flock.m4 b/devspec.en_US/project/recutils/m4/flock.m4 new file mode 100755 index 0000000..7197afa --- /dev/null +++ b/devspec.en_US/project/recutils/m4/flock.m4 @@ -0,0 +1,24 @@ +# flock.m4 serial 3 +dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FLOCK], +[ + AC_REQUIRE([gl_HEADER_SYS_FILE_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([flock]) + if test $ac_cv_func_flock = no; then + HAVE_FLOCK=0 + fi +]) + +dnl Prerequisites of lib/flock.c. +AC_DEFUN([gl_PREREQ_FLOCK], +[ + AC_CHECK_FUNCS_ONCE([fcntl]) + AC_CHECK_HEADERS_ONCE([unistd.h]) + + dnl Do we have a POSIX fcntl lock implementation? + AC_CHECK_MEMBERS([struct flock.l_type],[],[],[[#include <fcntl.h>]]) +]) diff --git a/devspec.en_US/project/recutils/m4/floor.m4 b/devspec.en_US/project/recutils/m4/floor.m4 new file mode 100755 index 0000000..25a80b9 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/floor.m4 @@ -0,0 +1,101 @@ +# floor.m4 serial 11 +dnl Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FLOOR], +[ + m4_divert_text([DEFAULTS], [gl_floor_required=plain]) + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + dnl Test whether floor() can be used without libm. + gl_FUNC_FLOOR_LIBS + if test "$FLOOR_LIBM" = "?"; then + FLOOR_LIBM= + fi + m4_ifdef([gl_FUNC_FLOOR_IEEE], [ + if test $gl_floor_required = ieee && test $REPLACE_FLOOR = 0; then + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether floor works according to ISO C 99 with IEC 60559], + [gl_cv_func_floor_ieee], + [ + save_LIBS="$LIBS" + LIBS="$LIBS $FLOOR_LIBM" + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#ifndef __NO_MATH_INLINES +# define __NO_MATH_INLINES 1 /* for glibc */ +#endif +#include <math.h> +]gl_DOUBLE_MINUS_ZERO_CODE[ +]gl_DOUBLE_SIGNBIT_CODE[ +static double dummy (double f) { return 0; } +int main (int argc, char *argv[]) +{ + double (*my_floor) (double) = argc ? floor : dummy; + /* Test whether floor (-0.0) is -0.0. */ + if (signbitd (minus_zerod) && !signbitd (my_floor (minus_zerod))) + return 1; + return 0; +} + ]])], + [gl_cv_func_floor_ieee=yes], + [gl_cv_func_floor_ieee=no], + [case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_floor_ieee="guessing yes" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_floor_ieee="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_floor_ieee="guessing no" ;; + esac + ]) + LIBS="$save_LIBS" + ]) + case "$gl_cv_func_floor_ieee" in + *yes) ;; + *) REPLACE_FLOOR=1 ;; + esac + fi + ]) + if test $REPLACE_FLOOR = 1; then + dnl No libraries are needed to link lib/floor.c. + FLOOR_LIBM= + fi + AC_SUBST([FLOOR_LIBM]) +]) + +# Determines the libraries needed to get the floor() function. +# Sets FLOOR_LIBM. +AC_DEFUN([gl_FUNC_FLOOR_LIBS], +[ + gl_CACHE_VAL_SILENT([gl_cv_func_floor_libm], [ + gl_cv_func_floor_libm=? + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#ifndef __NO_MATH_INLINES + # define __NO_MATH_INLINES 1 /* for glibc */ + #endif + #include <math.h> + double (*funcptr) (double) = floor; + double x;]], + [[x = funcptr(x) + floor(x);]])], + [gl_cv_func_floor_libm=]) + if test "$gl_cv_func_floor_libm" = "?"; then + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#ifndef __NO_MATH_INLINES + # define __NO_MATH_INLINES 1 /* for glibc */ + #endif + #include <math.h> + double (*funcptr) (double) = floor; + double x;]], + [[x = funcptr(x) + floor(x);]])], + [gl_cv_func_floor_libm="-lm"]) + LIBS="$save_LIBS" + fi + ]) + FLOOR_LIBM="$gl_cv_func_floor_libm" +]) diff --git a/devspec.en_US/project/recutils/m4/fpending.m4 b/devspec.en_US/project/recutils/m4/fpending.m4 new file mode 100755 index 0000000..402ec40 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/fpending.m4 @@ -0,0 +1,36 @@ +# serial 22 + +# Copyright (C) 2000-2001, 2004-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl From Jim Meyering +dnl Using code from emacs, based on suggestions from Paul Eggert +dnl and Ulrich Drepper. + +dnl Find out how to determine the number of pending output bytes on a stream. +dnl glibc (2.1.93 and newer) and Solaris provide __fpending. On other systems, +dnl we have to grub around in the (possibly opaque) FILE struct. + +AC_DEFUN([gl_FUNC_FPENDING], +[ + AC_CHECK_HEADERS_ONCE([stdio_ext.h]) + fp_headers=' + #include <stdio.h> + #if HAVE_STDIO_EXT_H + # include <stdio_ext.h> + #endif + ' + AC_CACHE_CHECK([for __fpending], [gl_cv_func___fpending], + [ + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([$fp_headers], + [[return ! __fpending (stdin);]])], + [gl_cv_func___fpending=yes], + [gl_cv_func___fpending=no]) + ]) + if test $gl_cv_func___fpending = yes; then + AC_CHECK_DECLS([__fpending], [], [], [$fp_headers]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/fpieee.m4 b/devspec.en_US/project/recutils/m4/fpieee.m4 new file mode 100755 index 0000000..ea1d5da --- /dev/null +++ b/devspec.en_US/project/recutils/m4/fpieee.m4 @@ -0,0 +1,54 @@ +# fpieee.m4 serial 2 -*- coding: utf-8 -*- +dnl Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl IEEE 754 standardized three items: +dnl - The formats of single-float and double-float - nowadays commonly +dnl available as 'float' and 'double' in C and C++. +dnl No autoconf test needed. +dnl - The overflow and division by zero behaviour: The result are values +dnl '±Inf' and 'NaN', rather than exceptions as it was before. +dnl This file provides an autoconf macro for ensuring this behaviour of +dnl floating-point operations. +dnl - A set of conditions (overflow, underflow, inexact, etc.) which can +dnl be configured to trigger an exception. +dnl This cannot be done in a portable way: it depends on the compiler, +dnl libc, kernel, and CPU. No autoconf macro is provided for this. + +dnl Ensure non-trapping behaviour of floating-point overflow and +dnl floating-point division by zero. +dnl (For integer overflow, see gcc's -ftrapv option; for integer division by +dnl zero, see the autoconf macro in intdiv0.m4.) + +AC_DEFUN([gl_FP_IEEE], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + # IEEE behaviour is the default on all CPUs except Alpha and SH + # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4 + # and the GCC 4.1.2 manual). + case "$host_cpu" in + alpha*) + # On Alpha systems, a compiler option provides the behaviour. + # See the ieee(3) manual page, also available at + # <https://backdrift.org/man/tru64/man3/ieee.3.html> + if test -n "$GCC"; then + # GCC has the option -mieee. + # For full IEEE compliance (rarely needed), use option -mieee-with-inexact. + CPPFLAGS="$CPPFLAGS -mieee" + else + # Compaq (ex-DEC) C has the option -ieee, equivalent to -ieee_with_no_inexact. + # For full IEEE compliance (rarely needed), use option -ieee_with_inexact. + CPPFLAGS="$CPPFLAGS -ieee" + fi + ;; + sh*) + if test -n "$GCC"; then + # GCC has the option -mieee. + CPPFLAGS="$CPPFLAGS -mieee" + fi + ;; + esac +]) diff --git a/devspec.en_US/project/recutils/m4/fprintf-posix.m4 b/devspec.en_US/project/recutils/m4/fprintf-posix.m4 new file mode 100755 index 0000000..17206e6 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/fprintf-posix.m4 @@ -0,0 +1,110 @@ +# fprintf-posix.m4 serial 14 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FPRINTF_POSIX], +[ + AC_REQUIRE([gl_PRINTF_SIZES_C99]) + AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) + AC_REQUIRE([gl_PRINTF_INFINITE]) + AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) + AC_REQUIRE([gl_PRINTF_POSITIONS]) + AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) + AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) + AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) + AC_REQUIRE([gl_PRINTF_PRECISION]) + AC_REQUIRE([gl_PRINTF_ENOMEM]) + gl_cv_func_fprintf_posix=no + case "$gl_cv_func_printf_sizes_c99" in + *yes) + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + case "$gl_cv_func_printf_directive_a" in + *yes) + case "$gl_cv_func_printf_directive_f" in + *yes) + case "$gl_cv_func_printf_directive_n" in + *yes) + case "$gl_cv_func_printf_directive_ls" in + *yes) + case "$gl_cv_func_printf_positions" in + *yes) + case "$gl_cv_func_printf_flag_grouping" in + *yes) + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + case "$gl_cv_func_printf_flag_zero" in + *yes) + case "$gl_cv_func_printf_precision" in + *yes) + case "$gl_cv_func_printf_enomem" in + *yes) + # fprintf exists and is + # already POSIX compliant. + gl_cv_func_fprintf_posix=yes + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + if test $gl_cv_func_fprintf_posix = no; then + gl_PREREQ_VASNPRINTF_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_DIRECTIVE_A + gl_PREREQ_VASNPRINTF_DIRECTIVE_F + gl_PREREQ_VASNPRINTF_DIRECTIVE_LS + gl_PREREQ_VASNPRINTF_FLAG_GROUPING + gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST + gl_PREREQ_VASNPRINTF_FLAG_ZERO + gl_PREREQ_VASNPRINTF_PRECISION + gl_PREREQ_VASNPRINTF_ENOMEM + gl_REPLACE_VASNPRINTF + gl_REPLACE_FPRINTF + fi +]) + +AC_DEFUN([gl_REPLACE_FPRINTF], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_LIBOBJ([fprintf]) + REPLACE_FPRINTF=1 + AC_DEFINE([REPLACE_FPRINTF_POSIX], [1], + [Define if fprintf is overridden by a POSIX compliant gnulib implementation.]) + gl_PREREQ_FPRINTF +]) + +AC_DEFUN([gl_PREREQ_FPRINTF], [:]) diff --git a/devspec.en_US/project/recutils/m4/frexp.m4 b/devspec.en_US/project/recutils/m4/frexp.m4 new file mode 100755 index 0000000..990fce6 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/frexp.m4 @@ -0,0 +1,181 @@ +# frexp.m4 serial 16 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FREXP], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM]) + FREXP_LIBM= + if test $gl_cv_func_frexp_no_libm = no; then + AC_CACHE_CHECK([whether frexp() can be used with libm], + [gl_cv_func_frexp_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <math.h> + double x;]], + [[int e; return frexp (x, &e) > 0;]])], + [gl_cv_func_frexp_in_libm=yes], + [gl_cv_func_frexp_in_libm=no]) + LIBS="$save_LIBS" + ]) + if test $gl_cv_func_frexp_in_libm = yes; then + FREXP_LIBM=-lm + fi + fi + if test $gl_cv_func_frexp_no_libm = yes \ + || test $gl_cv_func_frexp_in_libm = yes; then + save_LIBS="$LIBS" + LIBS="$LIBS $FREXP_LIBM" + gl_FUNC_FREXP_WORKS + LIBS="$save_LIBS" + case "$gl_cv_func_frexp_works" in + *yes) gl_func_frexp=yes ;; + *) gl_func_frexp=no; REPLACE_FREXP=1; FREXP_LIBM= ;; + esac + else + gl_func_frexp=no + fi + if test $gl_func_frexp = yes; then + AC_DEFINE([HAVE_FREXP], [1], + [Define if the frexp() function is available and works.]) + fi + AC_SUBST([FREXP_LIBM]) +]) + +AC_DEFUN([gl_FUNC_FREXP_NO_LIBM], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM]) + if test $gl_cv_func_frexp_no_libm = yes; then + gl_FUNC_FREXP_WORKS + case "$gl_cv_func_frexp_works" in + *yes) gl_func_frexp_no_libm=yes ;; + *) gl_func_frexp_no_libm=no; REPLACE_FREXP=1 ;; + esac + else + gl_func_frexp_no_libm=no + dnl Set REPLACE_FREXP here because the system may have frexp in libm. + REPLACE_FREXP=1 + fi + if test $gl_func_frexp_no_libm = yes; then + AC_DEFINE([HAVE_FREXP_IN_LIBC], [1], + [Define if the frexp() function is available in libc.]) + fi +]) + +dnl Test whether frexp() can be used without linking with libm. +dnl Set gl_cv_func_frexp_no_libm to 'yes' or 'no' accordingly. +AC_DEFUN([gl_CHECK_FREXP_NO_LIBM], +[ + AC_CACHE_CHECK([whether frexp() can be used without linking with libm], + [gl_cv_func_frexp_no_libm], + [ + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <math.h> + double x;]], + [[int e; return frexp (x, &e) > 0;]])], + [gl_cv_func_frexp_no_libm=yes], + [gl_cv_func_frexp_no_libm=no]) + ]) +]) + +dnl Test whether frexp() works also on denormalized numbers (this fails e.g. on +dnl NetBSD 3.0), on infinite numbers (this fails e.g. on IRIX 6.5 and mingw), +dnl and on negative zero (this fails e.g. on NetBSD 4.99 and mingw). +AC_DEFUN([gl_FUNC_FREXP_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CHECK_DECLS_ONCE([alarm]) + AC_CACHE_CHECK([whether frexp works], [gl_cv_func_frexp_works], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <float.h> +#include <math.h> +#include <string.h> +#if HAVE_DECL_ALARM +# include <signal.h> +# include <unistd.h> +#endif +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + ICC 10.0 has a bug when optimizing the expression -zero. + The expression -DBL_MIN * DBL_MIN does not work when cross-compiling + to PowerPC on Mac OS X 10.5. */ +#if defined __hpux || defined __sgi || defined __ICC +static double +compute_minus_zero (void) +{ + return -DBL_MIN * DBL_MIN; +} +# define minus_zero compute_minus_zero () +#else +double minus_zero = -0.0; +#endif +int main() +{ + int result = 0; + int i; + volatile double x; + double zero = 0.0; +#if HAVE_DECL_ALARM + /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite + number. Let the test fail in this case. */ + signal (SIGALRM, SIG_DFL); + alarm (5); +#endif + /* Test on denormalized numbers. */ + for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) + ; + if (x > 0.0) + { + int exp; + double y = frexp (x, &exp); + /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022. + On NetBSD: y = 0.75. Correct: y = 0.5. */ + if (y != 0.5) + result |= 1; + } + /* Test on infinite numbers. */ + x = 1.0 / zero; + { + int exp; + double y = frexp (x, &exp); + if (y != x) + result |= 2; + } + /* Test on negative zero. */ + x = minus_zero; + { + int exp; + double y = frexp (x, &exp); + if (memcmp (&y, &x, sizeof x)) + result |= 4; + } + return result; +}]])], + [gl_cv_func_frexp_works=yes], + [gl_cv_func_frexp_works=no], + [case "$host_os" in + netbsd* | irix*) gl_cv_func_frexp_works="guessing no" ;; + mingw*) # Guess yes with MSVC, no with mingw. + AC_EGREP_CPP([Good], [ +#ifdef _MSC_VER + Good +#endif + ], + [gl_cv_func_frexp_works="guessing yes"], + [gl_cv_func_frexp_works="guessing no"]) + ;; + *) gl_cv_func_frexp_works="guessing yes" ;; + esac + ]) + ]) +]) diff --git a/devspec.en_US/project/recutils/m4/frexpl.m4 b/devspec.en_US/project/recutils/m4/frexpl.m4 new file mode 100755 index 0000000..53eed55 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/frexpl.m4 @@ -0,0 +1,231 @@ +# frexpl.m4 serial 21 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FREXPL], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) + + dnl Persuade glibc <math.h> to declare frexpl(). + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + dnl Check whether it's declared. + dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>. + AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]]) + + FREXPL_LIBM= + if test $HAVE_DECL_FREXPL = 1; then + gl_CHECK_FREXPL_NO_LIBM + if test $gl_cv_func_frexpl_no_libm = no; then + AC_CACHE_CHECK([whether frexpl() can be used with libm], + [gl_cv_func_frexpl_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <math.h> + long double x;]], + [[int e; return frexpl (x, &e) > 0;]])], + [gl_cv_func_frexpl_in_libm=yes], + [gl_cv_func_frexpl_in_libm=no]) + LIBS="$save_LIBS" + ]) + if test $gl_cv_func_frexpl_in_libm = yes; then + FREXPL_LIBM=-lm + fi + fi + if test $gl_cv_func_frexpl_no_libm = yes \ + || test $gl_cv_func_frexpl_in_libm = yes; then + save_LIBS="$LIBS" + LIBS="$LIBS $FREXPL_LIBM" + gl_FUNC_FREXPL_WORKS + LIBS="$save_LIBS" + case "$gl_cv_func_frexpl_works" in + *yes) gl_func_frexpl=yes ;; + *) gl_func_frexpl=no; REPLACE_FREXPL=1 ;; + esac + else + gl_func_frexpl=no + fi + if test $gl_func_frexpl = yes; then + AC_DEFINE([HAVE_FREXPL], [1], + [Define if the frexpl() function is available.]) + fi + fi + if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl = no; then + dnl Find libraries needed to link lib/frexpl.c. + if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then + AC_REQUIRE([gl_FUNC_FREXP]) + FREXPL_LIBM="$FREXP_LIBM" + else + FREXPL_LIBM= + fi + fi + AC_SUBST([FREXPL_LIBM]) +]) + +AC_DEFUN([gl_FUNC_FREXPL_NO_LIBM], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) + dnl Check whether it's declared. + dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>. + AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]]) + if test $HAVE_DECL_FREXPL = 1; then + gl_CHECK_FREXPL_NO_LIBM + if test $gl_cv_func_frexpl_no_libm = yes; then + gl_FUNC_FREXPL_WORKS + case "$gl_cv_func_frexpl_works" in + *yes) gl_func_frexpl_no_libm=yes ;; + *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; + esac + else + gl_func_frexpl_no_libm=no + dnl Set REPLACE_FREXPL here because the system may have frexpl in libm. + REPLACE_FREXPL=1 + fi + if test $gl_func_frexpl_no_libm = yes; then + AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1], + [Define if the frexpl() function is available in libc.]) + fi + fi +]) + +dnl Test whether frexpl() can be used without linking with libm. +dnl Set gl_cv_func_frexpl_no_libm to 'yes' or 'no' accordingly. +AC_DEFUN([gl_CHECK_FREXPL_NO_LIBM], +[ + AC_CACHE_CHECK([whether frexpl() can be used without linking with libm], + [gl_cv_func_frexpl_no_libm], + [ + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <math.h> + long double x;]], + [[int e; return frexpl (x, &e) > 0;]])], + [gl_cv_func_frexpl_no_libm=yes], + [gl_cv_func_frexpl_no_libm=no]) + ]) +]) + +dnl Test whether frexpl() works on finite numbers (this fails on +dnl Mac OS X 10.4/PowerPC, on AIX 5.1, and on BeOS), on denormalized numbers +dnl (this fails on Mac OS X 10.5/i386), and also on infinite numbers (this +dnl fails e.g. on IRIX 6.5 and mingw). +AC_DEFUN([gl_FUNC_FREXPL_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether frexpl works], [gl_cv_func_frexpl_works], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <float.h> +#include <math.h> +/* Override the values of <float.h>, like done in float.in.h. */ +#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +#endif +#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +#endif +#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP DBL_MIN_EXP +#endif +#if defined __sgi && (LDBL_MANT_DIG >= 106) +# if defined __GNUC__ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP DBL_MIN_EXP +# endif +#endif +extern +#ifdef __cplusplus +"C" +#endif +long double frexpl (long double, int *); +int main() +{ + int result = 0; + volatile long double x; + /* Test on finite numbers that fails on AIX 5.1. */ + x = 16.0L; + { + int exp = -9999; + frexpl (x, &exp); + if (exp != 5) + result |= 1; + } + /* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl + function returns an invalid (incorrectly normalized) value: it returns + y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 } + but the correct result is + 0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */ + x = 1.01L; + { + int exp = -9999; + long double y = frexpl (x, &exp); + if (!(exp == 1 && y == 0.505L)) + result |= 2; + } + /* Test on large finite numbers. This fails on BeOS at i = 16322, while + LDBL_MAX_EXP = 16384. + In the loop end test, we test x against Infinity, rather than comparing + i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP. */ + { + int i; + for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L) + { + int exp = -9999; + frexpl (x, &exp); + if (exp != i) + { + result |= 4; + break; + } + } + } + /* Test on denormalized numbers. */ + { + int i; + for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L) + ; + if (x > 0.0L) + { + int exp; + long double y = frexpl (x, &exp); + /* On machines with IEEE854 arithmetic: x = 1.68105e-4932, + exp = -16382, y = 0.5. On Mac OS X 10.5: exp = -16384, y = 0.5. */ + if (exp != LDBL_MIN_EXP - 1) + result |= 8; + } + } + /* Test on infinite numbers. */ + x = 1.0L / 0.0L; + { + int exp; + long double y = frexpl (x, &exp); + if (y != x) + result |= 16; + } + return result; +}]])], + [gl_cv_func_frexpl_works=yes], + [gl_cv_func_frexpl_works=no], + [ +changequote(,)dnl + case "$host_os" in + aix | aix[3-6]* | beos* | darwin* | irix* | mingw* | pw*) + gl_cv_func_frexpl_works="guessing no";; + *) gl_cv_func_frexpl_works="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) diff --git a/devspec.en_US/project/recutils/m4/fseek.m4 b/devspec.en_US/project/recutils/m4/fseek.m4 new file mode 100755 index 0000000..2dfeecb --- /dev/null +++ b/devspec.en_US/project/recutils/m4/fseek.m4 @@ -0,0 +1,15 @@ +# fseek.m4 serial 4 +dnl Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FSEEK], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_REQUIRE([gl_FUNC_FSEEKO]) + dnl When fseeko needs fixes, fseek needs them too. + if test $HAVE_FSEEKO = 0 || test $REPLACE_FSEEKO = 1; then + REPLACE_FSEEK=1 + fi +]) diff --git a/devspec.en_US/project/recutils/m4/fseeko.m4 b/devspec.en_US/project/recutils/m4/fseeko.m4 new file mode 100755 index 0000000..1e2b08d --- /dev/null +++ b/devspec.en_US/project/recutils/m4/fseeko.m4 @@ -0,0 +1,77 @@ +# fseeko.m4 serial 19 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FSEEKO], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_REQUIRE([gl_STDIN_LARGE_OFFSET]) + AC_REQUIRE([gl_SYS_TYPES_H]) + AC_REQUIRE([AC_PROG_CC]) + + dnl Persuade glibc <stdio.h> to declare fseeko(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_CACHE_CHECK([for fseeko], [gl_cv_func_fseeko], + [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h> +]], [fseeko (stdin, 0, 0);])], + [gl_cv_func_fseeko=yes], [gl_cv_func_fseeko=no]) + ]) + + AC_CHECK_DECLS_ONCE([fseeko]) + if test $ac_cv_have_decl_fseeko = no; then + HAVE_DECL_FSEEKO=0 + fi + + if test $gl_cv_func_fseeko = no; then + HAVE_FSEEKO=0 + else + if test $WINDOWS_64_BIT_OFF_T = 1; then + REPLACE_FSEEKO=1 + fi + if test $gl_cv_var_stdin_large_offset = no; then + REPLACE_FSEEKO=1 + fi + m4_ifdef([gl_FUNC_FFLUSH_STDIN], [ + gl_FUNC_FFLUSH_STDIN + case "$gl_cv_func_fflush_stdin" in + *yes) ;; + *) REPLACE_FSEEKO=1 ;; + esac + ]) + fi +]) + +dnl Code shared by fseeko and ftello. Determine if large files are supported, +dnl but stdin does not start as a large file by default. +AC_DEFUN([gl_STDIN_LARGE_OFFSET], + [ + AC_CACHE_CHECK([whether stdin defaults to large file offsets], + [gl_cv_var_stdin_large_offset], + [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]], +[[#if defined __SL64 && defined __SCLE /* cygwin */ + /* Cygwin 1.5.24 and earlier fail to put stdin in 64-bit mode, making + fseeko/ftello needlessly fail. This bug was fixed in 1.5.25, and + it is easier to do a version check than building a runtime test. */ +# include <cygwin/version.h> +# if CYGWIN_VERSION_DLL_COMBINED < CYGWIN_VERSION_DLL_MAKE_COMBINED (1005, 25) + choke me +# endif +#endif]])], + [gl_cv_var_stdin_large_offset=yes], + [gl_cv_var_stdin_large_offset=no])]) +]) + +# Prerequisites of lib/fseeko.c. +AC_DEFUN([gl_PREREQ_FSEEKO], +[ + dnl Native Windows has the function _fseeki64. mingw hides it in some + dnl circumstances, but mingw64 makes it usable again. + AC_CHECK_FUNCS([_fseeki64]) + if test $ac_cv_func__fseeki64 = yes; then + AC_CHECK_DECLS([_fseeki64]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/fseterr.m4 b/devspec.en_US/project/recutils/m4/fseterr.m4 new file mode 100755 index 0000000..e2b97a5 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/fseterr.m4 @@ -0,0 +1,10 @@ +# fseterr.m4 serial 1 +dnl Copyright (C) 2012-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FSETERR], +[ + AC_CHECK_FUNCS_ONCE([__fseterr]) +]) diff --git a/devspec.en_US/project/recutils/m4/fstat.m4 b/devspec.en_US/project/recutils/m4/fstat.m4 new file mode 100755 index 0000000..2a59c8f --- /dev/null +++ b/devspec.en_US/project/recutils/m4/fstat.m4 @@ -0,0 +1,39 @@ +# fstat.m4 serial 6 +dnl Copyright (C) 2011-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FSTAT], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) + + case "$host_os" in + mingw* | solaris*) + dnl On MinGW, the original stat() returns st_atime, st_mtime, + dnl st_ctime values that are affected by the time zone. + dnl Solaris stat can return a negative tv_nsec. + REPLACE_FSTAT=1 + ;; + esac + + dnl Replace fstat() for supporting the gnulib-defined open() on directories. + m4_ifdef([gl_FUNC_FCHDIR], [ + gl_TEST_FCHDIR + if test $HAVE_FCHDIR = 0; then + case "$gl_cv_func_open_directory_works" in + *yes) ;; + *) + REPLACE_FSTAT=1 + ;; + esac + fi + ]) +]) + +# Prerequisites of lib/fstat.c and lib/stat-w32.c. +AC_DEFUN([gl_PREREQ_FSTAT], [ + AC_REQUIRE([gl_HEADER_SYS_STAT_H]) + : +]) diff --git a/devspec.en_US/project/recutils/m4/ftell.m4 b/devspec.en_US/project/recutils/m4/ftell.m4 new file mode 100755 index 0000000..713dd9f --- /dev/null +++ b/devspec.en_US/project/recutils/m4/ftell.m4 @@ -0,0 +1,15 @@ +# ftell.m4 serial 3 +dnl Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FTELL], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_REQUIRE([gl_FUNC_FTELLO]) + dnl When ftello needs fixes, ftell needs them too. + if test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1; then + REPLACE_FTELL=1 + fi +]) diff --git a/devspec.en_US/project/recutils/m4/ftello.m4 b/devspec.en_US/project/recutils/m4/ftello.m4 new file mode 100755 index 0000000..336a4b5 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/ftello.m4 @@ -0,0 +1,142 @@ +# ftello.m4 serial 13 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FTELLO], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_STDIN_LARGE_OFFSET]) + AC_REQUIRE([gl_SYS_TYPES_H]) + + dnl Persuade glibc <stdio.h> to declare ftello(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_CHECK_DECLS_ONCE([ftello]) + if test $ac_cv_have_decl_ftello = no; then + HAVE_DECL_FTELLO=0 + fi + + AC_CACHE_CHECK([for ftello], [gl_cv_func_ftello], + [ + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <stdio.h>]], + [[ftello (stdin);]])], + [gl_cv_func_ftello=yes], + [gl_cv_func_ftello=no]) + ]) + if test $gl_cv_func_ftello = no; then + HAVE_FTELLO=0 + else + if test $WINDOWS_64_BIT_OFF_T = 1; then + REPLACE_FTELLO=1 + fi + if test $gl_cv_var_stdin_large_offset = no; then + REPLACE_FTELLO=1 + fi + if test $REPLACE_FTELLO = 0; then + dnl Detect bug on Solaris. + dnl ftell and ftello produce incorrect results after putc that followed a + dnl getc call that reached EOF on Solaris. This is because the _IOREAD + dnl flag does not get cleared in this case, even though _IOWRT gets set, + dnl and ftell and ftello look whether the _IOREAD flag is set. + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CACHE_CHECK([whether ftello works], + [gl_cv_func_ftello_works], + [ + dnl Initial guess, used when cross-compiling or when /dev/tty cannot + dnl be opened. +changequote(,)dnl + case "$host_os" in + # Guess no on Solaris. + solaris*) gl_cv_func_ftello_works="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_ftello_works="guessing yes" ;; + # Guess yes otherwise. + *) gl_cv_func_ftello_works="guessing yes" ;; + esac +changequote([,])dnl + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#define TESTFILE "conftest.tmp" +int +main (void) +{ + FILE *fp; + + /* Create a file with some contents. */ + fp = fopen (TESTFILE, "w"); + if (fp == NULL) + return 70; + if (fwrite ("foogarsh", 1, 8, fp) < 8) + { fclose (fp); return 71; } + if (fclose (fp)) + return 72; + + /* The file's contents is now "foogarsh". */ + + /* Try writing after reading to EOF. */ + fp = fopen (TESTFILE, "r+"); + if (fp == NULL) + return 73; + if (fseek (fp, -1, SEEK_END)) + { fclose (fp); return 74; } + if (!(getc (fp) == 'h')) + { fclose (fp); return 1; } + if (!(getc (fp) == EOF)) + { fclose (fp); return 2; } + if (!(ftell (fp) == 8)) + { fclose (fp); return 3; } + if (!(ftell (fp) == 8)) + { fclose (fp); return 4; } + if (!(putc ('!', fp) == '!')) + { fclose (fp); return 5; } + if (!(ftell (fp) == 9)) + { fclose (fp); return 6; } + if (!(fclose (fp) == 0)) + return 7; + fp = fopen (TESTFILE, "r"); + if (fp == NULL) + return 75; + { + char buf[10]; + if (!(fread (buf, 1, 10, fp) == 9)) + { fclose (fp); return 10; } + if (!(memcmp (buf, "foogarsh!", 9) == 0)) + { fclose (fp); return 11; } + } + if (!(fclose (fp) == 0)) + return 12; + + /* The file's contents is now "foogarsh!". */ + + return 0; +}]])], + [gl_cv_func_ftello_works=yes], + [gl_cv_func_ftello_works=no], [:]) + ]) + case "$gl_cv_func_ftello_works" in + *yes) ;; + *) + REPLACE_FTELLO=1 + AC_DEFINE([FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE], [1], + [Define to 1 if the system's ftello function has the Solaris bug.]) + ;; + esac + fi + fi +]) + +# Prerequisites of lib/ftello.c. +AC_DEFUN([gl_PREREQ_FTELLO], +[ + dnl Native Windows has the function _ftelli64. mingw hides it, but mingw64 + dnl makes it usable again. + AC_CHECK_FUNCS([_ftelli64]) +]) diff --git a/devspec.en_US/project/recutils/m4/fwriting.m4 b/devspec.en_US/project/recutils/m4/fwriting.m4 new file mode 100755 index 0000000..09c3adb --- /dev/null +++ b/devspec.en_US/project/recutils/m4/fwriting.m4 @@ -0,0 +1,10 @@ +# fwriting.m4 serial 2 +dnl Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FWRITING], +[ + AC_CHECK_FUNCS_ONCE([__fwriting]) +]) diff --git a/devspec.en_US/project/recutils/m4/getdelim.m4 b/devspec.en_US/project/recutils/m4/getdelim.m4 new file mode 100755 index 0000000..bf17c57 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/getdelim.m4 @@ -0,0 +1,90 @@ +# getdelim.m4 serial 12 + +dnl Copyright (C) 2005-2007, 2009-2019 Free Software Foundation, Inc. +dnl +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_PREREQ([2.59]) + +AC_DEFUN([gl_FUNC_GETDELIM], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + + dnl Persuade glibc <stdio.h> to declare getdelim(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_CHECK_DECLS_ONCE([getdelim]) + + AC_CHECK_FUNCS_ONCE([getdelim]) + if test $ac_cv_func_getdelim = yes; then + HAVE_GETDELIM=1 + dnl Found it in some library. Verify that it works. + AC_CACHE_CHECK([for working getdelim function], [gl_cv_func_working_getdelim], + [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +# include <stdio.h> +# include <stdlib.h> +# include <string.h> + int main () + { + FILE *in = fopen ("./conftest.data", "r"); + if (!in) + return 1; + { + /* Test result for a NULL buffer and a zero size. + Based on a test program from Karl Heuer. */ + char *line = NULL; + size_t siz = 0; + int len = getdelim (&line, &siz, '\n', in); + if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) + { free (line); fclose (in); return 2; } + } + { + /* Test result for a NULL buffer and a non-zero size. + This crashes on FreeBSD 8.0. */ + char *line = NULL; + size_t siz = (size_t)(~0) / 4; + if (getdelim (&line, &siz, '\n', in) == -1) + { fclose (in); return 3; } + free (line); + } + fclose (in); + return 0; + } + ]])], [gl_cv_func_working_getdelim=yes] dnl The library version works. + , [gl_cv_func_working_getdelim=no] dnl The library version does NOT work. + , dnl We're cross compiling. Assume it works on glibc2 systems. + [AC_EGREP_CPP([Lucky GNU user], + [ +#include <features.h> +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ >= 2) && !defined __UCLIBC__ + Lucky GNU user + #endif +#endif + ], + [gl_cv_func_working_getdelim="guessing yes"], + [gl_cv_func_working_getdelim="guessing no"])] + )]) + case "$gl_cv_func_working_getdelim" in + *no) + REPLACE_GETDELIM=1 + ;; + esac + else + HAVE_GETDELIM=0 + fi + + if test $ac_cv_have_decl_getdelim = no; then + HAVE_DECL_GETDELIM=0 + fi +]) + +# Prerequisites of lib/getdelim.c. +AC_DEFUN([gl_PREREQ_GETDELIM], +[ + AC_CHECK_FUNCS([flockfile funlockfile]) + AC_CHECK_DECLS([getc_unlocked]) +]) diff --git a/devspec.en_US/project/recutils/m4/getdtablesize.m4 b/devspec.en_US/project/recutils/m4/getdtablesize.m4 new file mode 100755 index 0000000..96aa241 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/getdtablesize.m4 @@ -0,0 +1,60 @@ +# getdtablesize.m4 serial 7 +dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_GETDTABLESIZE], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CHECK_FUNCS_ONCE([getdtablesize]) + AC_CHECK_DECLS_ONCE([getdtablesize]) + if test $ac_cv_func_getdtablesize = yes && + test $ac_cv_have_decl_getdtablesize = yes; then + AC_CACHE_CHECK([whether getdtablesize works], + [gl_cv_func_getdtablesize_works], + [dnl There are two concepts: the "maximum possible file descriptor value + 1" + dnl and the "maximum number of open file descriptors in a process". + dnl Per SUSv2 and POSIX, getdtablesize() should return the first one. + dnl On most platforms, the first and the second concept are the same. + dnl On OpenVMS, however, they are different and getdtablesize() returns + dnl the second one; thus the test below fails. But we don't care + dnl because there's no good way to write a replacement getdtablesize(). + case "$host_os" in + vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;; + *) + dnl Cygwin 1.7.25 automatically increases the RLIMIT_NOFILE soft + dnl limit up to an unchangeable hard limit; all other platforms + dnl correctly require setrlimit before getdtablesize() can report + dnl a larger value. + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[#include <unistd.h>]], + [int size = getdtablesize(); + if (dup2 (0, getdtablesize()) != -1) + return 1; + if (size != getdtablesize()) + return 2; + ])], + [gl_cv_func_getdtablesize_works=yes], + [gl_cv_func_getdtablesize_works=no], + [case "$host_os" in + cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows + gl_cv_func_getdtablesize_works="guessing no" ;; + *) gl_cv_func_getdtablesize_works="guessing yes" ;; + esac + ]) + ;; + esac + ]) + case "$gl_cv_func_getdtablesize_works" in + *yes | "no (limitation)") ;; + *) REPLACE_GETDTABLESIZE=1 ;; + esac + else + HAVE_GETDTABLESIZE=0 + fi +]) + +# Prerequisites of lib/getdtablesize.c. +AC_DEFUN([gl_PREREQ_GETDTABLESIZE], [:]) diff --git a/devspec.en_US/project/recutils/m4/getgroups.m4 b/devspec.en_US/project/recutils/m4/getgroups.m4 new file mode 100755 index 0000000..2ce986e --- /dev/null +++ b/devspec.en_US/project/recutils/m4/getgroups.m4 @@ -0,0 +1,109 @@ +# serial 21 + +dnl From Jim Meyering. +dnl A wrapper around AC_FUNC_GETGROUPS. + +# Copyright (C) 1996-1997, 1999-2004, 2008-2019 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +m4_version_prereq([2.70], [] ,[ + +# This is taken from the following Autoconf patch: +# https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=7fbb553727ed7e0e689a17594b58559ecf3ea6e9 +AC_DEFUN([AC_FUNC_GETGROUPS], +[ + AC_REQUIRE([AC_TYPE_GETGROUPS])dnl + AC_REQUIRE([AC_TYPE_SIZE_T])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles + AC_CHECK_FUNC([getgroups]) + + # If we don't yet have getgroups, see if it's in -lbsd. + # This is reported to be necessary on an ITOS 3000WS running SEIUX 3.1. + ac_save_LIBS=$LIBS + if test $ac_cv_func_getgroups = no; then + AC_CHECK_LIB(bsd, getgroups, [GETGROUPS_LIB=-lbsd]) + fi + + # Run the program to test the functionality of the system-supplied + # getgroups function only if there is such a function. + if test $ac_cv_func_getgroups = yes; then + AC_CACHE_CHECK([for working getgroups], [ac_cv_func_getgroups_works], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [AC_INCLUDES_DEFAULT], + [[/* On NeXTstep 3.2, getgroups (0, 0) always fails. */ + return getgroups (0, 0) == -1;]]) + ], + [ac_cv_func_getgroups_works=yes], + [ac_cv_func_getgroups_works=no], + [case "$host_os" in # (( + # Guess yes on glibc systems. + *-gnu* | gnu*) ac_cv_func_getgroups_works="guessing yes" ;; + # If we don't know, assume the worst. + *) ac_cv_func_getgroups_works="guessing no" ;; + esac + ]) + ]) + else + ac_cv_func_getgroups_works=no + fi + case "$ac_cv_func_getgroups_works" in + *yes) + AC_DEFINE([HAVE_GETGROUPS], [1], + [Define to 1 if your system has a working `getgroups' function.]) + ;; + esac + LIBS=$ac_save_LIBS +])# AC_FUNC_GETGROUPS + +]) + +AC_DEFUN([gl_FUNC_GETGROUPS], +[ + AC_REQUIRE([AC_TYPE_GETGROUPS]) + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + + AC_FUNC_GETGROUPS + if test $ac_cv_func_getgroups != yes; then + HAVE_GETGROUPS=0 + else + if test "$ac_cv_type_getgroups" != gid_t \ + || { case "$ac_cv_func_getgroups_works" in + *yes) false;; + *) true;; + esac + }; then + REPLACE_GETGROUPS=1 + AC_DEFINE([GETGROUPS_ZERO_BUG], [1], [Define this to 1 if + getgroups(0,NULL) does not return the number of groups.]) + else + dnl Detect FreeBSD bug; POSIX requires getgroups(-1,ptr) to fail. + AC_CACHE_CHECK([whether getgroups handles negative values], + [gl_cv_func_getgroups_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], + [[int size = getgroups (0, 0); + gid_t *list = malloc (size * sizeof *list); + int result = getgroups (-1, list) != -1; + free (list); + return result;]])], + [gl_cv_func_getgroups_works=yes], + [gl_cv_func_getgroups_works=no], + [case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_getgroups_works="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_getgroups_works="guessing no" ;; + esac + ])]) + case "$gl_cv_func_getgroups_works" in + *yes) ;; + *) REPLACE_GETGROUPS=1 ;; + esac + fi + fi + test -n "$GETGROUPS_LIB" && LIBS="$GETGROUPS_LIB $LIBS" +]) diff --git a/devspec.en_US/project/recutils/m4/getline.m4 b/devspec.en_US/project/recutils/m4/getline.m4 new file mode 100755 index 0000000..5b2ead2 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/getline.m4 @@ -0,0 +1,99 @@ +# getline.m4 serial 28 + +dnl Copyright (C) 1998-2003, 2005-2007, 2009-2019 Free Software Foundation, +dnl Inc. +dnl +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_PREREQ([2.59]) + +dnl See if there's a working, system-supplied version of the getline function. +dnl We can't just do AC_REPLACE_FUNCS([getline]) because some systems +dnl have a function by that name in -linet that doesn't have anything +dnl to do with the function we need. +AC_DEFUN([gl_FUNC_GETLINE], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + + dnl Persuade glibc <stdio.h> to declare getline(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_CHECK_DECLS_ONCE([getline]) + + gl_getline_needs_run_time_check=no + AC_CHECK_FUNC([getline], + [dnl Found it in some library. Verify that it works. + gl_getline_needs_run_time_check=yes], + [am_cv_func_working_getline=no]) + if test $gl_getline_needs_run_time_check = yes; then + AC_CACHE_CHECK([for working getline function], [am_cv_func_working_getline], + [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +# include <stdio.h> +# include <stdlib.h> +# include <string.h> + int main () + { + FILE *in = fopen ("./conftest.data", "r"); + if (!in) + return 1; + { + /* Test result for a NULL buffer and a zero size. + Based on a test program from Karl Heuer. */ + char *line = NULL; + size_t siz = 0; + int len = getline (&line, &siz, in); + if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) + { free (line); fclose (in); return 2; } + free (line); + } + { + /* Test result for a NULL buffer and a non-zero size. + This crashes on FreeBSD 8.0. */ + char *line = NULL; + size_t siz = (size_t)(~0) / 4; + if (getline (&line, &siz, in) == -1) + { fclose (in); return 3; } + free (line); + } + fclose (in); + return 0; + } + ]])], [am_cv_func_working_getline=yes] dnl The library version works. + , [am_cv_func_working_getline=no] dnl The library version does NOT work. + , dnl We're cross compiling. Assume it works on glibc2 systems. + [AC_EGREP_CPP([Lucky GNU user], + [ +#include <features.h> +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ >= 2) && !defined __UCLIBC__ + Lucky GNU user + #endif +#endif + ], + [am_cv_func_working_getline="guessing yes"], + [am_cv_func_working_getline="guessing no"])] + )]) + fi + + if test $ac_cv_have_decl_getline = no; then + HAVE_DECL_GETLINE=0 + fi + + case "$am_cv_func_working_getline" in + *no) + dnl Set REPLACE_GETLINE always: Even if we have not found the broken + dnl getline function among $LIBS, it may exist in libinet and the + dnl executable may be linked with -linet. + REPLACE_GETLINE=1 + ;; + esac +]) + +# Prerequisites of lib/getline.c. +AC_DEFUN([gl_PREREQ_GETLINE], +[ + : +]) diff --git a/devspec.en_US/project/recutils/m4/getopt.m4 b/devspec.en_US/project/recutils/m4/getopt.m4 new file mode 100755 index 0000000..5991bf8 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/getopt.m4 @@ -0,0 +1,379 @@ +# getopt.m4 serial 46 +dnl Copyright (C) 2002-2006, 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Request a POSIX compliant getopt function. +AC_DEFUN([gl_FUNC_GETOPT_POSIX], +[ + m4_divert_text([DEFAULTS], [gl_getopt_required=POSIX]) + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + AC_REQUIRE([gl_GETOPT_CHECK_HEADERS]) + dnl Other modules can request the gnulib implementation of the getopt + dnl functions unconditionally, by defining gl_REPLACE_GETOPT_ALWAYS. + dnl argp.m4 does this. + m4_ifdef([gl_REPLACE_GETOPT_ALWAYS], [ + REPLACE_GETOPT=1 + ], [ + REPLACE_GETOPT=0 + if test -n "$gl_replace_getopt"; then + REPLACE_GETOPT=1 + fi + ]) + if test $REPLACE_GETOPT = 1; then + dnl Arrange for getopt.h to be created. + gl_GETOPT_SUBSTITUTE_HEADER + fi +]) + +# Request a POSIX compliant getopt function with GNU extensions (such as +# options with optional arguments) and the functions getopt_long, +# getopt_long_only. +AC_DEFUN([gl_FUNC_GETOPT_GNU], +[ + dnl Set the variable gl_getopt_required, so that all invocations of + dnl gl_GETOPT_CHECK_HEADERS in the scope of the current configure file + dnl will check for getopt with GNU extensions. + dnl This means that if one gnulib-tool invocation requests getopt-posix + dnl and another gnulib-tool invocation requests getopt-gnu, it is as if + dnl both had requested getopt-gnu. + m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU]) + + dnl No need to invoke gl_FUNC_GETOPT_POSIX here; this is automatically + dnl done through the module dependency getopt-gnu -> getopt-posix. +]) + +# Determine whether to replace the entire getopt facility. +AC_DEFUN([gl_GETOPT_CHECK_HEADERS], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([AC_PROG_AWK]) dnl for awk that supports ENVIRON + + dnl Persuade Solaris <unistd.h> to declare optarg, optind, opterr, optopt. + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + gl_CHECK_NEXT_HEADERS([getopt.h]) + if test $ac_cv_header_getopt_h = yes; then + HAVE_GETOPT_H=1 + else + HAVE_GETOPT_H=0 + fi + AC_SUBST([HAVE_GETOPT_H]) + + gl_replace_getopt= + + dnl Test whether <getopt.h> is available. + if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then + AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes]) + fi + + dnl Test whether the function getopt_long is available. + if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then + AC_CHECK_FUNCS([getopt_long_only], [], [gl_replace_getopt=yes]) + fi + + dnl POSIX 2008 does not specify leading '+' behavior, but see + dnl http://austingroupbugs.net/view.php?id=191 for a recommendation on + dnl the next version of POSIX. For now, we only guarantee leading '+' + dnl behavior with getopt-gnu. + if test -z "$gl_replace_getopt"; then + AC_CACHE_CHECK([whether getopt is POSIX compatible], + [gl_cv_func_getopt_posix], + [ + dnl Merging these three different test programs into a single one + dnl would require a reset mechanism. On BSD systems, it can be done + dnl through 'optreset'; on some others (glibc), it can be done by + dnl setting 'optind' to 0; on others again (HP-UX, IRIX, OSF/1, + dnl Solaris 9, musl libc), there is no such mechanism. + if test $cross_compiling = no; then + dnl Sanity check. Succeeds everywhere (except on MSVC, + dnl which lacks <unistd.h> and getopt() entirely). + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +int +main () +{ + static char program[] = "program"; + static char a[] = "-a"; + static char foo[] = "foo"; + static char bar[] = "bar"; + char *argv[] = { program, a, foo, bar, NULL }; + int c; + + c = getopt (4, argv, "ab"); + if (!(c == 'a')) + return 1; + c = getopt (4, argv, "ab"); + if (!(c == -1)) + return 2; + if (!(optind == 2)) + return 3; + return 0; +} +]])], + [gl_cv_func_getopt_posix=maybe], + [gl_cv_func_getopt_posix=no]) + if test $gl_cv_func_getopt_posix = maybe; then + dnl Sanity check with '+'. Succeeds everywhere (except on MSVC, + dnl which lacks <unistd.h> and getopt() entirely). + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +int +main () +{ + static char program[] = "program"; + static char donald[] = "donald"; + static char p[] = "-p"; + static char billy[] = "billy"; + static char duck[] = "duck"; + static char a[] = "-a"; + static char bar[] = "bar"; + char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; + int c; + + c = getopt (7, argv, "+abp:q:"); + if (!(c == -1)) + return 4; + if (!(strcmp (argv[0], "program") == 0)) + return 5; + if (!(strcmp (argv[1], "donald") == 0)) + return 6; + if (!(strcmp (argv[2], "-p") == 0)) + return 7; + if (!(strcmp (argv[3], "billy") == 0)) + return 8; + if (!(strcmp (argv[4], "duck") == 0)) + return 9; + if (!(strcmp (argv[5], "-a") == 0)) + return 10; + if (!(strcmp (argv[6], "bar") == 0)) + return 11; + if (!(optind == 1)) + return 12; + return 0; +} +]])], + [gl_cv_func_getopt_posix=maybe], + [gl_cv_func_getopt_posix=no]) + fi + if test $gl_cv_func_getopt_posix = maybe; then + dnl Detect Mac OS X 10.5, AIX 7.1, mingw bug. + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +int +main () +{ + static char program[] = "program"; + static char ab[] = "-ab"; + char *argv[3] = { program, ab, NULL }; + if (getopt (2, argv, "ab:") != 'a') + return 13; + if (getopt (2, argv, "ab:") != '?') + return 14; + if (optopt != 'b') + return 15; + if (optind != 2) + return 16; + return 0; +} +]])], + [gl_cv_func_getopt_posix=yes], + [gl_cv_func_getopt_posix=no]) + fi + else + case "$host_os" in + darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";; + *) gl_cv_func_getopt_posix="guessing yes";; + esac + fi + ]) + case "$gl_cv_func_getopt_posix" in + *no) gl_replace_getopt=yes ;; + esac + fi + + if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then + AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_getopt_gnu], + [# Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the + # optstring is necessary for programs like m4 that have POSIX-mandated + # semantics for supporting options interspersed with files. + # Also, since getopt_long is a GNU extension, we require optind=0. + # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; + # so take care to revert to the correct (non-)export state. +dnl GNU Coding Standards currently allow awk but not env; besides, env +dnl is ambiguous with environment values that contain newlines. + gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' + case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in + xx) gl_had_POSIXLY_CORRECT=exported ;; + x) gl_had_POSIXLY_CORRECT=yes ;; + *) gl_had_POSIXLY_CORRECT= ;; + esac + POSIXLY_CORRECT=1 + export POSIXLY_CORRECT + AC_RUN_IFELSE( + [AC_LANG_PROGRAM([[#include <getopt.h> + #include <stddef.h> + #include <string.h> + ]GL_NOCRASH[ + ]], [[ + int result = 0; + + nocrash_init(); + + /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, + and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, + OSF/1 5.1, Solaris 10. */ + { + static char conftest[] = "conftest"; + static char plus[] = "-+"; + char *argv[3] = { conftest, plus, NULL }; + opterr = 0; + if (getopt (2, argv, "+a") != '?') + result |= 1; + } + /* This code succeeds on glibc 2.8, mingw, + and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, + IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ + { + static char program[] = "program"; + static char p[] = "-p"; + static char foo[] = "foo"; + static char bar[] = "bar"; + char *argv[] = { program, p, foo, bar, NULL }; + + optind = 1; + if (getopt (4, argv, "p::") != 'p') + result |= 2; + else if (optarg != NULL) + result |= 4; + else if (getopt (4, argv, "p::") != -1) + result |= 6; + else if (optind != 2) + result |= 8; + } + /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ + { + static char program[] = "program"; + static char foo[] = "foo"; + static char p[] = "-p"; + char *argv[] = { program, foo, p, NULL }; + optind = 0; + if (getopt (3, argv, "-p") != 1) + result |= 16; + else if (getopt (3, argv, "-p") != 'p') + result |= 16; + } + /* This code fails on glibc 2.11. */ + { + static char program[] = "program"; + static char b[] = "-b"; + static char a[] = "-a"; + char *argv[] = { program, b, a, NULL }; + optind = opterr = 0; + if (getopt (3, argv, "+:a:b") != 'b') + result |= 32; + else if (getopt (3, argv, "+:a:b") != ':') + result |= 32; + } + /* This code dumps core on glibc 2.14. */ + { + static char program[] = "program"; + static char w[] = "-W"; + static char dummy[] = "dummy"; + char *argv[] = { program, w, dummy, NULL }; + optind = opterr = 1; + if (getopt (3, argv, "W;") != 'W') + result |= 64; + } + return result; + ]])], + [gl_cv_func_getopt_gnu=yes], + [gl_cv_func_getopt_gnu=no], + [dnl Cross compiling. Assume the worst, even on glibc platforms. + gl_cv_func_getopt_gnu="guessing no" + ]) + case $gl_had_POSIXLY_CORRECT in + exported) ;; + yes) AS_UNSET([POSIXLY_CORRECT]); POSIXLY_CORRECT=1 ;; + *) AS_UNSET([POSIXLY_CORRECT]) ;; + esac + ]) + if test "$gl_cv_func_getopt_gnu" != yes; then + gl_replace_getopt=yes + else + AC_CACHE_CHECK([for working GNU getopt_long function], + [gl_cv_func_getopt_long_gnu], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <getopt.h> + #include <stddef.h> + #include <string.h> + ]], + [[static const struct option long_options[] = + { + { "xtremely-",no_argument, NULL, 1003 }, + { "xtra", no_argument, NULL, 1001 }, + { "xtreme", no_argument, NULL, 1002 }, + { "xtremely", no_argument, NULL, 1003 }, + { NULL, 0, NULL, 0 } + }; + /* This code fails on OpenBSD 5.0. */ + { + static char program[] = "program"; + static char xtremel[] = "--xtremel"; + char *argv[] = { program, xtremel, NULL }; + int option_index; + optind = 1; opterr = 0; + if (getopt_long (2, argv, "", long_options, &option_index) != 1003) + return 1; + } + return 0; + ]])], + [gl_cv_func_getopt_long_gnu=yes], + [gl_cv_func_getopt_long_gnu=no], + [dnl Cross compiling. Guess no on OpenBSD, yes otherwise. + case "$host_os" in + openbsd*) gl_cv_func_getopt_long_gnu="guessing no";; + *) gl_cv_func_getopt_long_gnu="guessing yes";; + esac + ]) + ]) + case "$gl_cv_func_getopt_long_gnu" in + *yes) ;; + *) gl_replace_getopt=yes ;; + esac + fi + fi +]) + +AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER], +[ + AC_CHECK_HEADERS_ONCE([sys/cdefs.h]) + if test $ac_cv_header_sys_cdefs_h = yes; then + HAVE_SYS_CDEFS_H=1 + else + HAVE_SYS_CDEFS_H=0 + fi + AC_SUBST([HAVE_SYS_CDEFS_H]) + + AC_DEFINE([__GETOPT_PREFIX], [[rpl_]], + [Define to rpl_ if the getopt replacement functions and variables + should be used.]) + GETOPT_H=getopt.h + GETOPT_CDEFS_H=getopt-cdefs.h + AC_SUBST([GETOPT_H]) + AC_SUBST([GETOPT_CDEFS_H]) +]) diff --git a/devspec.en_US/project/recutils/m4/getpass.m4 b/devspec.en_US/project/recutils/m4/getpass.m4 new file mode 100755 index 0000000..e4448af --- /dev/null +++ b/devspec.en_US/project/recutils/m4/getpass.m4 @@ -0,0 +1,106 @@ +# getpass.m4 serial 16 +dnl Copyright (C) 2002-2003, 2005-2006, 2009-2019 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Provide a getpass() function if the system doesn't have it. +AC_DEFUN_ONCE([gl_FUNC_GETPASS], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + + dnl Persuade Solaris <unistd.h> and <stdlib.h> to declare getpass(). + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + AC_CHECK_FUNCS_ONCE([getpass]) + if test $ac_cv_func_getpass = no; then + HAVE_GETPASS=0 + fi +]) + +# Provide the GNU getpass() implementation. It supports passwords of +# arbitrary length (not just 8 bytes as on HP-UX). +AC_DEFUN([gl_FUNC_GETPASS_GNU], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + AC_REQUIRE([gl_FUNC_GETPASS]) + + if test $ac_cv_func_getpass = yes; then + AC_CACHE_CHECK([for getpass without length limitations], + [gl_cv_func_getpass_good], + [AC_EGREP_CPP([Lucky GNU user], + [ +#include <features.h> +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ >= 2) && !defined __UCLIBC__ + Lucky GNU user + #endif +#endif + ], + [gl_cv_func_getpass_good=yes], + [gl_cv_func_getpass_good=no]) + ]) + if test $gl_cv_func_getpass_good != yes; then + REPLACE_GETPASS=1 + fi + fi +]) + +# Prerequisites of lib/getpass.c. +AC_DEFUN([gl_PREREQ_GETPASS], [ + AC_CHECK_HEADERS_ONCE([stdio_ext.h termios.h]) + AC_CHECK_FUNCS_ONCE([__fsetlocking]) + AC_CHECK_DECLS([__fsetlocking],,, + [[#include <stdio.h> + #if HAVE_STDIO_EXT_H + #include <stdio_ext.h> + #endif]]) + AC_CHECK_DECLS_ONCE([fflush_unlocked]) + AC_CHECK_DECLS_ONCE([flockfile]) + AC_CHECK_DECLS_ONCE([fputs_unlocked]) + AC_CHECK_DECLS_ONCE([funlockfile]) + AC_CHECK_DECLS_ONCE([putc_unlocked]) + + dnl We can't use AC_CHECK_FUNC here, because tcgetattr() is defined as a + dnl static inline function when compiling for Android 4.4 or older. + AC_CACHE_CHECK([for tcgetattr], [gl_cv_func_tcgetattr], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <termios.h> + struct termios x; + ]], + [[return tcgetattr(0,&x);]]) + ], + [gl_cv_func_tcgetattr=yes], + [gl_cv_func_tcgetattr=no]) + ]) + if test $gl_cv_func_tcgetattr = yes; then + HAVE_TCGETATTR=1 + else + HAVE_TCGETATTR=0 + fi + AC_DEFINE_UNQUOTED([HAVE_TCGETATTR], [$HAVE_TCGETATTR], + [Define to 1 if the system has the 'tcgetattr' function.]) + + dnl We can't use AC_CHECK_FUNC here, because tcsetattr() is defined as a + dnl static inline function when compiling for Android 4.4 or older. + AC_CACHE_CHECK([for tcsetattr], [gl_cv_func_tcsetattr], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <termios.h> + struct termios x; + ]], + [[return tcsetattr(0,0,&x);]]) + ], + [gl_cv_func_tcsetattr=yes], + [gl_cv_func_tcsetattr=no]) + ]) + if test $gl_cv_func_tcsetattr = yes; then + HAVE_TCSETATTR=1 + else + HAVE_TCSETATTR=0 + fi + AC_DEFINE_UNQUOTED([HAVE_TCSETATTR], [$HAVE_TCSETATTR], + [Define to 1 if the system has the 'tcsetattr' function.]) +]) diff --git a/devspec.en_US/project/recutils/m4/getprogname.m4 b/devspec.en_US/project/recutils/m4/getprogname.m4 new file mode 100755 index 0000000..4a96d06 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/getprogname.m4 @@ -0,0 +1,43 @@ +# getprogname.m4 - check for getprogname or replacements for it + +# Copyright (C) 2016-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +AC_DEFUN([gl_FUNC_GETPROGNAME], +[ + AC_CHECK_FUNCS_ONCE([getprogname getexecname]) + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + ac_found=0 + AC_CHECK_DECLS([program_invocation_name], [ac_found=1], [], + [#include <errno.h>]) + AC_CHECK_DECLS([program_invocation_short_name], [ac_found=1], [], + [#include <errno.h>]) + AC_CHECK_DECLS([__argv], [ac_found=1], [], [#include <stdlib.h>]) + + # Incur the cost of this test only if none of the above worked. + if test $ac_found = 0; then + # On OpenBSD 5.1, using the global __progname variable appears to be + # the only way to implement getprogname. + AC_CACHE_CHECK([whether __progname is defined in default libraries], + [gl_cv_var___progname], + [ + gl_cv_var___progname= + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[extern char *__progname;]], + [[return *__progname;]] + )], + [gl_cv_var___progname=yes] + ) + ] + ) + if test "$gl_cv_var___progname" = yes; then + AC_DEFINE([HAVE_VAR___PROGNAME], 1, + [Define if you have a global __progname variable]) + fi + fi +]) diff --git a/devspec.en_US/project/recutils/m4/gettext.m4 b/devspec.en_US/project/recutils/m4/gettext.m4 new file mode 100755 index 0000000..eef5073 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/gettext.m4 @@ -0,0 +1,420 @@ +# gettext.m4 serial 68 (gettext-0.19.8) +dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. +dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010. + +dnl Macro to add for using GNU gettext. + +dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). +dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The +dnl default (if it is not specified or empty) is 'no-libtool'. +dnl INTLSYMBOL should be 'external' for packages with no intl directory, +dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. +dnl If INTLSYMBOL is 'use-libtool', then a libtool library +dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, +dnl depending on --{enable,disable}-{shared,static} and on the presence of +dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library +dnl $(top_builddir)/intl/libintl.a will be created. +dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext +dnl implementations (in libc or libintl) without the ngettext() function +dnl will be ignored. If NEEDSYMBOL is specified and is +dnl 'need-formatstring-macros', then GNU gettext implementations that don't +dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored. +dnl INTLDIR is used to find the intl libraries. If empty, +dnl the value '$(top_builddir)/intl/' is used. +dnl +dnl The result of the configuration is one of three cases: +dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled +dnl and used. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 2) GNU gettext has been found in the system's C library. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 3) No internationalization, always use English msgid. +dnl Catalog format: none +dnl Catalog extension: none +dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. +dnl The use of .gmo is historical (it was needed to avoid overwriting the +dnl GNU format catalogs when building on a platform with an X/Open gettext), +dnl but we keep it in order not to force irrelevant filename changes on the +dnl maintainers. +dnl +AC_DEFUN([AM_GNU_GETTEXT], +[ + dnl Argument checking. + ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , + [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT +])])])])]) + ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], + [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) + ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , + [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT +])])])]) + define([gt_included_intl], + ifelse([$1], [external], + ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), + [yes])) + define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) + gt_NEEDS_INIT + AM_GNU_GETTEXT_NEED([$2]) + + AC_REQUIRE([AM_PO_SUBDIRS])dnl + ifelse(gt_included_intl, yes, [ + AC_REQUIRE([AM_INTL_SUBDIR])dnl + ]) + + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Sometimes libintl requires libiconv, so first search for libiconv. + dnl Ideally we would do this search only after the + dnl if test "$USE_NLS" = "yes"; then + dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT + dnl the configure script would need to contain the same shell code + dnl again, outside any 'if'. There are two solutions: + dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. + dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. + dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not + dnl documented, we avoid it. + ifelse(gt_included_intl, yes, , [ + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + ]) + + dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. + gt_INTL_MACOSX + + dnl Set USE_NLS. + AC_REQUIRE([AM_NLS]) + + ifelse(gt_included_intl, yes, [ + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + ]) + LIBINTL= + LTLIBINTL= + POSUB= + + dnl Add a version number to the cache macros. + case " $gt_needs " in + *" need-formatstring-macros "*) gt_api_version=3 ;; + *" need-ngettext "*) gt_api_version=2 ;; + *) gt_api_version=1 ;; + esac + gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" + gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" + + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + ifelse(gt_included_intl, yes, [ + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH([included-gettext], + [ --with-included-gettext use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + ]) + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If GNU gettext is available we use this. Else we have + dnl to fall back to GNU NLS library. + + if test $gt_api_version -ge 3; then + gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +' + else + gt_revision_test_code= + fi + if test $gt_api_version -ge 2; then + gt_expression_test_code=' + * ngettext ("", "", 0)' + else + gt_expression_test_code= + fi + + AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include <libintl.h> +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings; +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + ]])], + [eval "$gt_func_gnugettext_libc=yes"], + [eval "$gt_func_gnugettext_libc=no"])]) + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + dnl Sometimes libintl requires libiconv, so first search for libiconv. + ifelse(gt_included_intl, yes, , [ + AM_ICONV_LINK + ]) + dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL + dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) + dnl because that would add "-liconv" to LIBINTL and LTLIBINTL + dnl even if libiconv doesn't exist. + AC_LIB_LINKFLAGS_BODY([intl]) + AC_CACHE_CHECK([for GNU gettext in libintl], + [$gt_func_gnugettext_libintl], + [gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + dnl Now see whether libintl exists and does not depend on libiconv. + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include <libintl.h> +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + ]])], + [eval "$gt_func_gnugettext_libintl=yes"], + [eval "$gt_func_gnugettext_libintl=no"]) + dnl Now see whether libintl exists and depends on libiconv. + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include <libintl.h> +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +#define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) +#else +#define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 +#endif +$gt_revision_test_code + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION + ]])], + [LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" + ]) + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS"]) + fi + + dnl If an already present or preinstalled GNU gettext() is found, + dnl use it. But if this macro is used in GNU gettext, and GNU + dnl gettext is already preinstalled in libintl, we update this + dnl libintl. (Cf. the install rule in intl/Makefile.in.) + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ + || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + dnl Reset the values set by searching for libintl. + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + ifelse(gt_included_intl, yes, [ + if test "$gt_use_preinstalled_gnugettext" != "yes"; then + dnl GNU gettext is not found in the C library. + dnl Fall back on included GNU gettext library. + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions used to generate GNU NLS library. + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" + LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + CATOBJEXT= + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions to use GNU gettext tools. + CATOBJEXT=.gmo + fi + ]) + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Some extra flags are needed during linking. + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + AC_DEFINE([ENABLE_NLS], [1], + [Define to 1 if translation of program messages to the user's native language + is requested.]) + else + USE_NLS=no + fi + fi + + AC_MSG_CHECKING([whether to use NLS]) + AC_MSG_RESULT([$USE_NLS]) + if test "$USE_NLS" = "yes"; then + AC_MSG_CHECKING([where the gettext function comes from]) + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + AC_MSG_RESULT([$gt_source]) + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + AC_MSG_CHECKING([how to link with libintl]) + AC_MSG_RESULT([$LIBINTL]) + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) + fi + + dnl For backward compatibility. Some packages may be using this. + AC_DEFINE([HAVE_GETTEXT], [1], + [Define if the GNU gettext() function is already present or preinstalled.]) + AC_DEFINE([HAVE_DCGETTEXT], [1], + [Define if the GNU dcgettext() function is already present or preinstalled.]) + fi + + dnl We need to process the po/ directory. + POSUB=po + fi + + ifelse(gt_included_intl, yes, [ + dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL + dnl to 'yes' because some of the testsuite requires it. + if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then + BUILD_INCLUDED_LIBINTL=yes + fi + + dnl Make all variables we use known to autoconf. + AC_SUBST([BUILD_INCLUDED_LIBINTL]) + AC_SUBST([USE_INCLUDED_LIBINTL]) + AC_SUBST([CATOBJEXT]) + + dnl For backward compatibility. Some configure.ins may be using this. + nls_cv_header_intl= + nls_cv_header_libgt= + + dnl For backward compatibility. Some Makefiles may be using this. + DATADIRNAME=share + AC_SUBST([DATADIRNAME]) + + dnl For backward compatibility. Some Makefiles may be using this. + INSTOBJEXT=.mo + AC_SUBST([INSTOBJEXT]) + + dnl For backward compatibility. Some Makefiles may be using this. + GENCAT=gencat + AC_SUBST([GENCAT]) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLOBJS= + if test "$USE_INCLUDED_LIBINTL" = yes; then + INTLOBJS="\$(GETTOBJS)" + fi + AC_SUBST([INTLOBJS]) + + dnl Enable libtool support if the surrounding package wishes it. + INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix + AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) + ]) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLLIBS="$LIBINTL" + AC_SUBST([INTLLIBS]) + + dnl Make all documented variables known to autoconf. + AC_SUBST([LIBINTL]) + AC_SUBST([LTLIBINTL]) + AC_SUBST([POSUB]) +]) + + +dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. +m4_define([gt_NEEDS_INIT], +[ + m4_divert_text([DEFAULTS], [gt_needs=]) + m4_define([gt_NEEDS_INIT], []) +]) + + +dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) +AC_DEFUN([AM_GNU_GETTEXT_NEED], +[ + m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) +]) + + +dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) +AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) + + +dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version]) +AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], []) diff --git a/devspec.en_US/project/recutils/m4/gettime.m4 b/devspec.en_US/project/recutils/m4/gettime.m4 new file mode 100755 index 0000000..60d8ea1 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/gettime.m4 @@ -0,0 +1,13 @@ +# gettime.m4 serial 9 +dnl Copyright (C) 2002, 2004-2006, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_GETTIME], +[ + dnl Prerequisites of lib/gettime.c. + AC_REQUIRE([gl_CLOCK_TIME]) + AC_REQUIRE([gl_TIMESPEC]) + AC_CHECK_FUNCS_ONCE([gettimeofday]) +]) diff --git a/devspec.en_US/project/recutils/m4/gettimeofday.m4 b/devspec.en_US/project/recutils/m4/gettimeofday.m4 new file mode 100755 index 0000000..d29b4bf --- /dev/null +++ b/devspec.en_US/project/recutils/m4/gettimeofday.m4 @@ -0,0 +1,126 @@ +# serial 25 + +# Copyright (C) 2001-2003, 2005, 2007, 2009-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl From Jim Meyering. + +AC_DEFUN([gl_FUNC_GETTIMEOFDAY], +[ + AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) + AC_REQUIRE([AC_C_RESTRICT]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_HEADER_SYS_TIME_H]) + AC_CHECK_FUNCS_ONCE([gettimeofday]) + + gl_gettimeofday_timezone=void + if test $ac_cv_func_gettimeofday != yes; then + HAVE_GETTIMEOFDAY=0 + else + gl_FUNC_GETTIMEOFDAY_CLOBBER + AC_CACHE_CHECK([for gettimeofday with POSIX signature], + [gl_cv_func_gettimeofday_posix_signature], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/time.h> + struct timeval c; + int gettimeofday (struct timeval *restrict, void *restrict); + ]], + [[/* glibc uses struct timezone * rather than the POSIX void * + if _GNU_SOURCE is defined. However, since the only portable + use of gettimeofday uses NULL as the second parameter, and + since the glibc definition is actually more typesafe, it is + not worth wrapping this to get a compliant signature. */ + int (*f) (struct timeval *restrict, void *restrict) + = gettimeofday; + int x = f (&c, 0); + return !(x | c.tv_sec | c.tv_usec); + ]])], + [gl_cv_func_gettimeofday_posix_signature=yes], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/time.h> +int gettimeofday (struct timeval *restrict, struct timezone *restrict); + ]])], + [gl_cv_func_gettimeofday_posix_signature=almost], + [gl_cv_func_gettimeofday_posix_signature=no])])]) + if test $gl_cv_func_gettimeofday_posix_signature = almost; then + gl_gettimeofday_timezone='struct timezone' + elif test $gl_cv_func_gettimeofday_posix_signature != yes; then + REPLACE_GETTIMEOFDAY=1 + fi + dnl If we override 'struct timeval', we also have to override gettimeofday. + if test $REPLACE_STRUCT_TIMEVAL = 1; then + REPLACE_GETTIMEOFDAY=1 + fi + dnl On mingw, the original gettimeofday has only a precision of 15.6 + dnl milliseconds. So override it. + case "$host_os" in + mingw*) REPLACE_GETTIMEOFDAY=1 ;; + esac + fi + AC_DEFINE_UNQUOTED([GETTIMEOFDAY_TIMEZONE], [$gl_gettimeofday_timezone], + [Define this to 'void' or 'struct timezone' to match the system's + declaration of the second argument to gettimeofday.]) +]) + + +dnl See if gettimeofday clobbers the static buffer that localtime uses +dnl for its return value. The gettimeofday function from Mac OS X 10.0.4 +dnl (i.e., Darwin 1.3.7) has this problem. +dnl +dnl If it does, then arrange to use gettimeofday and localtime only via +dnl the wrapper functions that work around the problem. + +AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER], +[ + AC_REQUIRE([gl_HEADER_SYS_TIME_H]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS]) + + AC_CACHE_CHECK([whether gettimeofday clobbers localtime buffer], + [gl_cv_func_gettimeofday_clobber], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <string.h> + #include <sys/time.h> + #include <time.h> + #include <stdlib.h> + ]], + [[ + time_t t = 0; + struct tm *lt; + struct tm saved_lt; + struct timeval tv; + lt = localtime (&t); + saved_lt = *lt; + gettimeofday (&tv, NULL); + return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0; + ]])], + [gl_cv_func_gettimeofday_clobber=no], + [gl_cv_func_gettimeofday_clobber=yes], + [# When cross-compiling: + case "$host_os" in + # Guess all is fine on glibc systems. + *-gnu* | gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_gettimeofday_clobber="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_gettimeofday_clobber="guessing yes" ;; + esac + ])]) + + case "$gl_cv_func_gettimeofday_clobber" in + *yes) + REPLACE_GETTIMEOFDAY=1 + AC_DEFINE([GETTIMEOFDAY_CLOBBERS_LOCALTIME], [1], + [Define if gettimeofday clobbers the localtime buffer.]) + gl_LOCALTIME_BUFFER_NEEDED + ;; + esac +]) + +# Prerequisites of lib/gettimeofday.c. +AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [:]) diff --git a/devspec.en_US/project/recutils/m4/glibc21.m4 b/devspec.en_US/project/recutils/m4/glibc21.m4 new file mode 100755 index 0000000..0ab0f23 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/glibc21.m4 @@ -0,0 +1,34 @@ +# glibc21.m4 serial 5 +dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2019 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Test for the GNU C Library, version 2.1 or newer, or uClibc. +# From Bruno Haible. + +AC_DEFUN([gl_GLIBC21], + [ + AC_CACHE_CHECK([whether we are using the GNU C Library >= 2.1 or uClibc], + [ac_cv_gnu_library_2_1], + [AC_EGREP_CPP([Lucky], + [ +#include <features.h> +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif +#ifdef __UCLIBC__ + Lucky user +#endif + ], + [ac_cv_gnu_library_2_1=yes], + [ac_cv_gnu_library_2_1=no]) + ] + ) + AC_SUBST([GLIBC21]) + GLIBC21="$ac_cv_gnu_library_2_1" + ] +) diff --git a/devspec.en_US/project/recutils/m4/gnulib-common.m4 b/devspec.en_US/project/recutils/m4/gnulib-common.m4 new file mode 100755 index 0000000..7c0e3e8 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/gnulib-common.m4 @@ -0,0 +1,394 @@ +# gnulib-common.m4 serial 41 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_PREREQ([2.62]) + +# gl_COMMON +# is expanded unconditionally through gnulib-tool magic. +AC_DEFUN([gl_COMMON], [ + dnl Use AC_REQUIRE here, so that the code is expanded once only. + AC_REQUIRE([gl_00GNULIB]) + AC_REQUIRE([gl_COMMON_BODY]) +]) +AC_DEFUN([gl_COMMON_BODY], [ + AH_VERBATIM([_Noreturn], +[/* The _Noreturn keyword of C11. */ +#ifndef _Noreturn +# if 201103 <= (defined __cplusplus ? __cplusplus : 0) +# define _Noreturn [[noreturn]] +# elif (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ + || 4 < __GNUC__ + (7 <= __GNUC_MINOR__)) + /* _Noreturn works as-is. */ +# elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C +# define _Noreturn __attribute__ ((__noreturn__)) +# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn +# endif +#endif +]) + AH_VERBATIM([isoc99_inline], +[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports + the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of + earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. + __APPLE__ && __MACH__ test for Mac OS X. + __APPLE_CC__ tests for the Apple compiler and its version. + __STDC_VERSION__ tests for the C99 mode. */ +#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ +# define __GNUC_STDC_INLINE__ 1 +#endif]) + AH_VERBATIM([unused_parameter], +[/* Define as a marker that can be attached to declarations that might not + be used. This helps to reduce warnings, such as from + GCC -Wunused-parameter. */ +#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_UNUSED __attribute__ ((__unused__)) +#else +# define _GL_UNUSED +#endif +/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name + is a misnomer outside of parameter lists. */ +#define _UNUSED_PARAMETER_ _GL_UNUSED + +/* gcc supports the "unused" attribute on possibly unused labels, and + g++ has since version 4.5. Note to support C++ as well as C, + _GL_UNUSED_LABEL should be used with a trailing ; */ +#if !defined __cplusplus || __GNUC__ > 4 \ + || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +# define _GL_UNUSED_LABEL _GL_UNUSED +#else +# define _GL_UNUSED_LABEL +#endif + +/* The __pure__ attribute was added in gcc 2.96. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE /* empty */ +#endif + +/* The __const__ attribute was added in gcc 2.95. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) +#else +# define _GL_ATTRIBUTE_CONST /* empty */ +#endif + +/* The __malloc__ attribute was added in gcc 3. */ +#if 3 <= __GNUC__ +# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +#else +# define _GL_ATTRIBUTE_MALLOC /* empty */ +#endif +]) + dnl Preparation for running test programs: + dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not + dnl to /dev/tty, so they can be redirected to log files. Such diagnostics + dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N. + LIBC_FATAL_STDERR_=1 + export LIBC_FATAL_STDERR_ +]) + +# gl_MODULE_INDICATOR_CONDITION +# expands to a C preprocessor expression that evaluates to 1 or 0, depending +# whether a gnulib module that has been requested shall be considered present +# or not. +m4_define([gl_MODULE_INDICATOR_CONDITION], [1]) + +# gl_MODULE_INDICATOR_SET_VARIABLE([modulename]) +# sets the shell variable that indicates the presence of the given module to +# a C preprocessor expression that will evaluate to 1. +AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE], +[ + gl_MODULE_INDICATOR_SET_VARIABLE_AUX( + [GNULIB_[]m4_translit([[$1]], + [abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])], + [gl_MODULE_INDICATOR_CONDITION]) +]) + +# gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable]) +# modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION. +# The shell variable's value is a C preprocessor expression that evaluates +# to 0 or 1. +AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX], +[ + m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1], + [ + dnl Simplify the expression VALUE || 1 to 1. + $1=1 + ], + [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1], + [gl_MODULE_INDICATOR_CONDITION])]) +]) + +# gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition]) +# modifies the shell variable to include the given condition. The shell +# variable's value is a C preprocessor expression that evaluates to 0 or 1. +AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR], +[ + dnl Simplify the expression 1 || CONDITION to 1. + if test "$[]$1" != 1; then + dnl Simplify the expression 0 || CONDITION to CONDITION. + if test "$[]$1" = 0; then + $1=$2 + else + $1="($[]$1 || $2)" + fi + fi +]) + +# gl_MODULE_INDICATOR([modulename]) +# defines a C macro indicating the presence of the given module +# in a location where it can be used. +# | Value | Value | +# | in lib/ | in tests/ | +# --------------------------------------------+---------+-----------+ +# Module present among main modules: | 1 | 1 | +# --------------------------------------------+---------+-----------+ +# Module present among tests-related modules: | 0 | 1 | +# --------------------------------------------+---------+-----------+ +# Module not present at all: | 0 | 0 | +# --------------------------------------------+---------+-----------+ +AC_DEFUN([gl_MODULE_INDICATOR], +[ + AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]], + [abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), + [gl_MODULE_INDICATOR_CONDITION], + [Define to a C preprocessor expression that evaluates to 1 or 0, + depending whether the gnulib module $1 shall be considered present.]) +]) + +# gl_MODULE_INDICATOR_FOR_TESTS([modulename]) +# defines a C macro indicating the presence of the given module +# in lib or tests. This is useful to determine whether the module +# should be tested. +# | Value | Value | +# | in lib/ | in tests/ | +# --------------------------------------------+---------+-----------+ +# Module present among main modules: | 1 | 1 | +# --------------------------------------------+---------+-----------+ +# Module present among tests-related modules: | 1 | 1 | +# --------------------------------------------+---------+-----------+ +# Module not present at all: | 0 | 0 | +# --------------------------------------------+---------+-----------+ +AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], +[ + AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]], + [abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], + [Define to 1 when the gnulib module $1 should be tested.]) +]) + +# gl_ASSERT_NO_GNULIB_POSIXCHECK +# asserts that there will never be a need to #define GNULIB_POSIXCHECK. +# and thereby enables an optimization of configure and config.h. +# Used by Emacs. +AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK], +[ + dnl Override gl_WARN_ON_USE_PREPARE. + dnl But hide this definition from 'aclocal'. + AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], []) +]) + +# gl_ASSERT_NO_GNULIB_TESTS +# asserts that there will be no gnulib tests in the scope of the configure.ac +# and thereby enables an optimization of config.h. +# Used by Emacs. +AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS], +[ + dnl Override gl_MODULE_INDICATOR_FOR_TESTS. + AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], []) +]) + +# Test whether <features.h> exists. +# Set HAVE_FEATURES_H. +AC_DEFUN([gl_FEATURES_H], +[ + AC_CHECK_HEADERS_ONCE([features.h]) + if test $ac_cv_header_features_h = yes; then + HAVE_FEATURES_H=1 + else + HAVE_FEATURES_H=0 + fi + AC_SUBST([HAVE_FEATURES_H]) +]) + +# AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH]) +# ---------------------------------------------------- +# Backport of autoconf-2.63b's macro. +# Remove this macro when we can assume autoconf >= 2.64. +m4_ifndef([AS_VAR_IF], +[m4_define([AS_VAR_IF], +[AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])]) + +# gl_PROG_CC_C99 +# Modifies the value of the shell variable CC in an attempt to make $CC +# understand ISO C99 source code. +# This is like AC_PROG_CC_C99, except that +# - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC +# <https://lists.gnu.org/r/bug-gnulib/2011-09/msg00367.html>, +# but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99 +# <https://lists.gnu.org/r/bug-gnulib/2011-09/msg00441.html>. +# Remaining problems: +# - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options +# to CC twice +# <https://lists.gnu.org/r/bug-gnulib/2011-09/msg00431.html>. +# - AC_PROG_CC_STDC is likely to change now that C11 is an ISO standard. +AC_DEFUN([gl_PROG_CC_C99], +[ + dnl Change that version number to the minimum Autoconf version that supports + dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls. + m4_version_prereq([9.0], + [AC_REQUIRE([AC_PROG_CC_C99])], + [AC_REQUIRE([AC_PROG_CC_STDC])]) +]) + +# gl_PROG_AR_RANLIB +# Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler. +# The user can set the variables AR, ARFLAGS, RANLIB if he wants to override +# the values. +AC_DEFUN([gl_PROG_AR_RANLIB], +[ + dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler + dnl as "cc", and GCC as "gcc". They have different object file formats and + dnl library formats. In particular, the GNU binutils programs ar and ranlib + dnl produce libraries that work only with gcc, not with cc. + AC_REQUIRE([AC_PROG_CC]) + dnl The '][' hides this use from 'aclocal'. + AC_BEFORE([$0], [A][M_PROG_AR]) + AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], + [ + AC_EGREP_CPP([Amsterdam], + [ +#ifdef __ACK__ +Amsterdam +#endif + ], + [gl_cv_c_amsterdam_compiler=yes], + [gl_cv_c_amsterdam_compiler=no]) + ]) + + dnl Don't compete with AM_PROG_AR's decision about AR/ARFLAGS if we are not + dnl building with __ACK__. + if test $gl_cv_c_amsterdam_compiler = yes; then + if test -z "$AR"; then + AR='cc -c.a' + fi + if test -z "$ARFLAGS"; then + ARFLAGS='-o' + fi + else + dnl AM_PROG_AR was added in automake v1.11.2. AM_PROG_AR does not AC_SUBST + dnl ARFLAGS variable (it is filed into Makefile.in directly by automake + dnl script on-demand, if not specified by ./configure of course). + dnl Don't AC_REQUIRE the AM_PROG_AR otherwise the code for __ACK__ above + dnl will be ignored. Also, pay attention to call AM_PROG_AR in else block + dnl because AM_PROG_AR is written so it could re-set AR variable even for + dnl __ACK__. It may seem like its easier to avoid calling the macro here, + dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good + dnl default value and automake should usually know them). + dnl + dnl The '][' hides this use from 'aclocal'. + m4_ifdef([A][M_PROG_AR], [A][M_PROG_AR], [:]) + fi + + dnl In case the code above has not helped with setting AR/ARFLAGS, use + dnl Automake-documented default values for AR and ARFLAGS, but prefer + dnl ${host}-ar over ar (useful for cross-compiling). + AC_CHECK_TOOL([AR], [ar], [ar]) + if test -z "$ARFLAGS"; then + ARFLAGS='cr' + fi + + AC_SUBST([AR]) + AC_SUBST([ARFLAGS]) + if test -z "$RANLIB"; then + if test $gl_cv_c_amsterdam_compiler = yes; then + RANLIB=':' + else + dnl Use the ranlib program if it is available. + AC_PROG_RANLIB + fi + fi + AC_SUBST([RANLIB]) +]) + +# AC_C_RESTRICT +# This definition is copied from post-2.69 Autoconf and overrides the +# AC_C_RESTRICT macro from autoconf 2.60..2.69. It can be removed +# once autoconf >= 2.70 can be assumed. It's painful to check version +# numbers, and in practice this macro is more up-to-date than Autoconf +# is, so override Autoconf unconditionally. +AC_DEFUN([AC_C_RESTRICT], +[AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], + [ac_cv_c_restrict=no + # The order here caters to the fact that C++ does not require restrict. + for ac_kw in __restrict __restrict__ _Restrict restrict; do + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[typedef int *int_ptr; + int foo (int_ptr $ac_kw ip) { return ip[0]; } + int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ + int bar (int ip[$ac_kw]) { return ip[0]; } + ]], + [[int s[1]; + int *$ac_kw t = s; + t[0] = 0; + return foo (t) + bar (t); + ]])], + [ac_cv_c_restrict=$ac_kw]) + test "$ac_cv_c_restrict" != no && break + done + ]) + AH_VERBATIM([restrict], +[/* Define to the equivalent of the C99 'restrict' keyword, or to + nothing if this is not supported. Do not define if restrict is + supported directly. */ +#undef restrict +/* Work around a bug in Sun C++: it does not support _Restrict or + __restrict__, even though the corresponding Sun C compiler ends up with + "#define restrict _Restrict" or "#define restrict __restrict__" in the + previous line. Perhaps some future version of Sun C++ will work with + restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ +#if defined __SUNPRO_CC && !defined __RESTRICT +# define _Restrict +# define __restrict__ +#endif]) + case $ac_cv_c_restrict in + restrict) ;; + no) AC_DEFINE([restrict], []) ;; + *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; + esac +])# AC_C_RESTRICT + +# gl_BIGENDIAN +# is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd. +# Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some +# macros invoke AC_C_BIGENDIAN with arguments. +AC_DEFUN([gl_BIGENDIAN], +[ + AC_C_BIGENDIAN +]) + +# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it) +# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not +# output a spurious "(cached)" mark in the midst of other configure output. +# This macro should be used instead of AC_CACHE_VAL when it is not surrounded +# by an AC_MSG_CHECKING/AC_MSG_RESULT pair. +AC_DEFUN([gl_CACHE_VAL_SILENT], +[ + saved_as_echo_n="$as_echo_n" + as_echo_n=':' + AC_CACHE_VAL([$1], [$2]) + as_echo_n="$saved_as_echo_n" +]) + +# AS_VAR_COPY was added in autoconf 2.63b +m4_define_default([AS_VAR_COPY], +[AS_LITERAL_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])]) diff --git a/devspec.en_US/project/recutils/m4/gnulib-comp.m4 b/devspec.en_US/project/recutils/m4/gnulib-comp.m4 new file mode 100755 index 0000000..f1834c4 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/gnulib-comp.m4 @@ -0,0 +1,1612 @@ +# DO NOT EDIT! GENERATED AUTOMATICALLY! +# Copyright (C) 2002-2019 Free Software Foundation, Inc. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This file is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this file. If not, see <https://www.gnu.org/licenses/>. +# +# As a special exception to the GNU General Public License, +# this file may be distributed as part of a program that +# contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. +# +# This file represents the compiled summary of the specification in +# gnulib-cache.m4. It lists the computed macro invocations that need +# to be invoked from configure.ac. +# In projects that use version control, this file can be treated like +# other built files. + + +# This macro should be invoked from ./configure.ac, in the section +# "Checks for programs", right after AC_PROG_CC, and certainly before +# any checks for libraries, header files, types and library functions. +AC_DEFUN([gl_EARLY], +[ + m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace + m4_pattern_allow([^gl_ES$])dnl a valid locale name + m4_pattern_allow([^gl_LIBOBJS$])dnl a variable + m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable + + # Pre-early section. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_REQUIRE([gl_PROG_AR_RANLIB]) + + AC_REQUIRE([AM_PROG_CC_C_O]) + # Code from module absolute-header: + # Code from module acl: + # Code from module acl-permissions: + # Code from module alignof: + # Code from module alloca: + # Code from module alloca-opt: + # Code from module announce-gen: + # Code from module array-list: + # Code from module autobuild: + AB_INIT + # Code from module base64: + # Code from module btowc: + # Code from module builtin-expect: + # Code from module c-ctype: + # Code from module c-strcase: + # Code from module c-strcaseeq: + # Code from module canonicalize-lgpl: + # Code from module chdir: + # Code from module clock-time: + # Code from module cloexec: + # Code from module close: + # Code from module close-stream: + # Code from module closeout: + # Code from module crc: + # Code from module dirname-lgpl: + # Code from module dosname: + # Code from module double-slash-root: + # Code from module dup2: + # Code from module environ: + # Code from module errno: + # Code from module error: + # Code from module euidaccess: + # Code from module execute: + # Code from module exitfail: + # Code from module extensions: + # Code from module extern-inline: + # Code from module fatal-signal: + # Code from module fcntl: + # Code from module fcntl-h: + # Code from module fd-hook: + # Code from module filename: + # Code from module flexmember: + # Code from module float: + # Code from module flock: + # Code from module floor: + # Code from module fpending: + # Code from module fpieee: + AC_REQUIRE([gl_FP_IEEE]) + # Code from module fprintf-posix: + # Code from module fpucw: + # Code from module frexp-nolibm: + # Code from module frexpl-nolibm: + # Code from module fseek: + # Code from module fseeko: + AC_REQUIRE([AC_FUNC_FSEEKO]) + # Code from module fseterr: + # Code from module fstat: + # Code from module ftell: + # Code from module ftello: + AC_REQUIRE([AC_FUNC_FSEEKO]) + # Code from module fwriting: + # Code from module gendocs: + # Code from module getdelim: + # Code from module getdtablesize: + # Code from module getgroups: + # Code from module getline: + # Code from module getopt-gnu: + # Code from module getopt-posix: + # Code from module getpass: + # Code from module getpass-gnu: + # Code from module getprogname: + # Code from module gettext-h: + # Code from module gettime: + # Code from module gettimeofday: + # Code from module gnumakefile: + # Code from module gnupload: + # Code from module group-member: + # Code from module hard-locale: + # Code from module havelib: + # Code from module include_next: + # Code from module intprops: + # Code from module inttypes: + # Code from module inttypes-incomplete: + # Code from module isnand-nolibm: + # Code from module isnanf-nolibm: + # Code from module isnanl-nolibm: + # Code from module langinfo: + # Code from module largefile: + AC_REQUIRE([AC_SYS_LARGEFILE]) + # Code from module libc-config: + # Code from module limits-h: + # Code from module list: + # Code from module localcharset: + # Code from module locale: + # Code from module localeconv: + # Code from module localtime-buffer: + # Code from module lock: + # Code from module lseek: + # Code from module lstat: + # Code from module maintainer-makefile: + # Code from module malloc-posix: + # Code from module malloca: + # Code from module math: + # Code from module mbrlen: + # Code from module mbrtowc: + # Code from module mbsinit: + # Code from module mbtowc: + # Code from module memchr: + # Code from module minmax: + # Code from module mkdir: + # Code from module mkostemp: + # Code from module mkstemp: + # Code from module mktime: + # Code from module mktime-internal: + # Code from module msvc-inval: + # Code from module msvc-nothrow: + # Code from module multiarch: + # Code from module nl_langinfo: + # Code from module nocrash: + # Code from module nstrftime: + # Code from module obstack: + # Code from module open: + # Code from module parse-datetime: + # Code from module pathmax: + # Code from module posix_spawn-internal: + # Code from module posix_spawn_file_actions_addopen: + # Code from module posix_spawn_file_actions_destroy: + # Code from module posix_spawn_file_actions_init: + # Code from module posix_spawnattr_destroy: + # Code from module posix_spawnattr_init: + # Code from module posix_spawnattr_setflags: + # Code from module posix_spawnattr_setsigmask: + # Code from module posix_spawnp: + # Code from module printf-frexp: + # Code from module printf-frexpl: + # Code from module printf-posix: + # Code from module printf-safe: + # Code from module progname: + # Code from module qcopy-acl: + # Code from module qset-acl: + # Code from module quote: + # Code from module quotearg: + # Code from module quotearg-simple: + # Code from module raise: + # Code from module random_r: + # Code from module rawmemchr: + # Code from module read-file: + # Code from module readline: + # Code from module readlink: + # Code from module realloc-posix: + # Code from module regex: + # Code from module regexprops-generic: + # Code from module rename: + # Code from module rmdir: + # Code from module root-uid: + # Code from module same-inode: + # Code from module sched: + # Code from module secure_getenv: + # Code from module selinux-h: + # Code from module setenv: + # Code from module sh-filename: + # Code from module sigaction: + # Code from module signal-h: + # Code from module signbit: + # Code from module sigprocmask: + # Code from module size_max: + # Code from module snippet/_Noreturn: + # Code from module snippet/arg-nonnull: + # Code from module snippet/c++defs: + # Code from module snippet/unused-parameter: + # Code from module snippet/warn-on-use: + # Code from module spawn: + # Code from module ssize_t: + # Code from module stat: + # Code from module stat-macros: + # Code from module stat-time: + # Code from module stdarg: + dnl Some compilers (e.g., AIX 5.3 cc) need to be in c99 mode + dnl for the builtin va_copy to work. gl_PROG_CC_C99 arranges for this. + gl_PROG_CC_C99 + # Code from module stdbool: + # Code from module stddef: + # Code from module stdint: + # Code from module stdio: + # Code from module stdlib: + # Code from module strcase: + # Code from module strcasestr: + # Code from module strcasestr-simple: + # Code from module strchrnul: + # Code from module strdup-posix: + # Code from module streq: + # Code from module strerror: + # Code from module strerror-override: + # Code from module string: + # Code from module strings: + # Code from module strsep: + # Code from module strverscmp: + # Code from module sys_file: + # Code from module sys_stat: + # Code from module sys_time: + # Code from module sys_types: + # Code from module sys_wait: + # Code from module tempname: + # Code from module threadlib: + gl_THREADLIB_EARLY + # Code from module time: + # Code from module time_r: + # Code from module time_rz: + # Code from module timegm: + # Code from module timespec: + # Code from module tmpdir: + # Code from module tzset: + # Code from module unistd: + # Code from module unlocked-io: + # Code from module unsetenv: + # Code from module useless-if-before-free: + # Code from module vasnprintf: + # Code from module vasnprintf-posix: + # Code from module vasprintf: + # Code from module vasprintf-posix: + # Code from module vc-list-files: + # Code from module verify: + # Code from module version-etc: + # Code from module version-etc-fsf: + # Code from module vfprintf-posix: + # Code from module wait-process: + # Code from module waitpid: + # Code from module wchar: + # Code from module wcrtomb: + # Code from module wctob: + # Code from module wctomb: + # Code from module wctype-h: + # Code from module xalloc: + # Code from module xalloc-die: + # Code from module xalloc-oversized: + # Code from module xsize: +]) + +# This macro should be invoked from ./configure.ac, in the section +# "Check for header files, types and library functions". +AC_DEFUN([gl_INIT], +[ + AM_CONDITIONAL([GL_COND_LIBTOOL], [true]) + gl_cond_libtool=true + gl_m4_base='m4' + m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ])) + m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS])) + m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES])) + m4_pushdef([gl_LIBSOURCES_LIST], []) + m4_pushdef([gl_LIBSOURCES_DIR], []) + gl_COMMON + gl_source_base='lib' + gl_FUNC_ACL +changequote(,)dnl +LTALLOCA=`echo "$ALLOCA" | sed -e 's/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'` +changequote([, ])dnl +AC_SUBST([LTALLOCA]) + gl_FUNC_ALLOCA + gl_FUNC_BASE64 + gl_FUNC_BTOWC + if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then + AC_LIBOBJ([btowc]) + gl_PREREQ_BTOWC + fi + gl_WCHAR_MODULE_INDICATOR([btowc]) + gl___BUILTIN_EXPECT + gl_CANONICALIZE_LGPL + if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then + AC_LIBOBJ([canonicalize-lgpl]) + fi + gl_MODULE_INDICATOR([canonicalize-lgpl]) + gl_STDLIB_MODULE_INDICATOR([canonicalize_file_name]) + gl_STDLIB_MODULE_INDICATOR([realpath]) + gl_UNISTD_MODULE_INDICATOR([chdir]) + gl_CLOCK_TIME + gl_MODULE_INDICATOR_FOR_TESTS([cloexec]) + gl_FUNC_CLOSE + if test $REPLACE_CLOSE = 1; then + AC_LIBOBJ([close]) + fi + gl_UNISTD_MODULE_INDICATOR([close]) + gl_CLOSE_STREAM + gl_MODULE_INDICATOR([close-stream]) + gl_CLOSEOUT + gl_DIRNAME_LGPL + gl_DOUBLE_SLASH_ROOT + gl_FUNC_DUP2 + if test $HAVE_DUP2 = 0 || test $REPLACE_DUP2 = 1; then + AC_LIBOBJ([dup2]) + gl_PREREQ_DUP2 + fi + gl_UNISTD_MODULE_INDICATOR([dup2]) + gl_ENVIRON + gl_UNISTD_MODULE_INDICATOR([environ]) + gl_HEADER_ERRNO_H + gl_ERROR + if test $ac_cv_lib_error_at_line = no; then + AC_LIBOBJ([error]) + gl_PREREQ_ERROR + fi + m4_ifdef([AM_XGETTEXT_OPTION], + [AM_][XGETTEXT_OPTION([--flag=error:3:c-format]) + AM_][XGETTEXT_OPTION([--flag=error_at_line:5:c-format])]) + gl_FUNC_EUIDACCESS + if test $HAVE_EUIDACCESS = 0; then + AC_LIBOBJ([euidaccess]) + gl_PREREQ_EUIDACCESS + fi + gl_UNISTD_MODULE_INDICATOR([euidaccess]) + gl_EXECUTE + AC_REQUIRE([gl_EXTERN_INLINE]) + gl_FATAL_SIGNAL + gl_FUNC_FCNTL + if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then + AC_LIBOBJ([fcntl]) + fi + gl_FCNTL_MODULE_INDICATOR([fcntl]) + gl_FCNTL_H + AC_C_FLEXIBLE_ARRAY_MEMBER + gl_FLOAT_H + if test $REPLACE_FLOAT_LDBL = 1; then + AC_LIBOBJ([float]) + fi + if test $REPLACE_ITOLD = 1; then + AC_LIBOBJ([itold]) + fi + gl_FUNC_FLOCK + if test $HAVE_FLOCK = 0; then + AC_LIBOBJ([flock]) + gl_PREREQ_FLOCK + fi + gl_HEADER_SYS_FILE_MODULE_INDICATOR([flock]) + gl_FUNC_FLOOR + if test $REPLACE_FLOOR = 1; then + AC_LIBOBJ([floor]) + fi + gl_MATH_MODULE_INDICATOR([floor]) + gl_FUNC_FPENDING + if test $gl_cv_func___fpending = no; then + AC_LIBOBJ([fpending]) + fi + gl_FUNC_FPRINTF_POSIX + gl_STDIO_MODULE_INDICATOR([fprintf-posix]) + gl_FUNC_FREXP_NO_LIBM + if test $gl_func_frexp_no_libm != yes; then + AC_LIBOBJ([frexp]) + fi + gl_MATH_MODULE_INDICATOR([frexp]) + gl_FUNC_FREXPL_NO_LIBM + if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl_no_libm = no; then + AC_LIBOBJ([frexpl]) + fi + gl_MATH_MODULE_INDICATOR([frexpl]) + gl_FUNC_FSEEK + if test $REPLACE_FSEEK = 1; then + AC_LIBOBJ([fseek]) + fi + gl_STDIO_MODULE_INDICATOR([fseek]) + gl_FUNC_FSEEKO + if test $HAVE_FSEEKO = 0 || test $REPLACE_FSEEKO = 1; then + AC_LIBOBJ([fseeko]) + gl_PREREQ_FSEEKO + fi + gl_STDIO_MODULE_INDICATOR([fseeko]) + gl_FUNC_FSETERR + if test $ac_cv_func___fseterr = no; then + AC_LIBOBJ([fseterr]) + fi + gl_FUNC_FSTAT + if test $REPLACE_FSTAT = 1; then + AC_LIBOBJ([fstat]) + case "$host_os" in + mingw*) + AC_LIBOBJ([stat-w32]) + ;; + esac + gl_PREREQ_FSTAT + fi + gl_SYS_STAT_MODULE_INDICATOR([fstat]) + gl_FUNC_FTELL + if test $REPLACE_FTELL = 1; then + AC_LIBOBJ([ftell]) + fi + gl_STDIO_MODULE_INDICATOR([ftell]) + gl_FUNC_FTELLO + if test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1; then + AC_LIBOBJ([ftello]) + gl_PREREQ_FTELLO + fi + gl_STDIO_MODULE_INDICATOR([ftello]) + gl_FUNC_FWRITING + if test $ac_cv_func___fwriting = no; then + AC_LIBOBJ([fwriting]) + fi + gl_FUNC_GETDELIM + if test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1; then + AC_LIBOBJ([getdelim]) + gl_PREREQ_GETDELIM + fi + gl_STDIO_MODULE_INDICATOR([getdelim]) + gl_FUNC_GETDTABLESIZE + if test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1; then + AC_LIBOBJ([getdtablesize]) + gl_PREREQ_GETDTABLESIZE + fi + gl_UNISTD_MODULE_INDICATOR([getdtablesize]) + gl_FUNC_GETGROUPS + if test $HAVE_GETGROUPS = 0 || test $REPLACE_GETGROUPS = 1; then + AC_LIBOBJ([getgroups]) + fi + gl_UNISTD_MODULE_INDICATOR([getgroups]) + gl_FUNC_GETLINE + if test $REPLACE_GETLINE = 1; then + AC_LIBOBJ([getline]) + gl_PREREQ_GETLINE + fi + gl_STDIO_MODULE_INDICATOR([getline]) + gl_FUNC_GETOPT_GNU + dnl Because of the way gl_FUNC_GETOPT_GNU is implemented (the gl_getopt_required + dnl mechanism), there is no need to do any AC_LIBOBJ or AC_SUBST here; they are + dnl done in the getopt-posix module. + gl_FUNC_GETOPT_POSIX + if test $REPLACE_GETOPT = 1; then + AC_LIBOBJ([getopt]) + AC_LIBOBJ([getopt1]) + dnl Arrange for unistd.h to include getopt.h. + GNULIB_GL_UNISTD_H_GETOPT=1 + fi + AC_SUBST([GNULIB_GL_UNISTD_H_GETOPT]) + gl_FUNC_GETPASS + if test $HAVE_GETPASS = 0 || test $REPLACE_GETPASS = 1; then + AC_LIBOBJ([getpass]) + gl_PREREQ_GETPASS + fi + gl_UNISTD_MODULE_INDICATOR([getpass]) + gl_FUNC_GETPASS_GNU + if test $HAVE_GETPASS = 0 || test $REPLACE_GETPASS = 1; then + AC_LIBOBJ([getpass]) + gl_PREREQ_GETPASS + fi + gl_UNISTD_MODULE_INDICATOR([getpass]) + gl_FUNC_GETPROGNAME + AC_SUBST([LIBINTL]) + AC_SUBST([LTLIBINTL]) + gl_GETTIME + gl_FUNC_GETTIMEOFDAY + if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then + AC_LIBOBJ([gettimeofday]) + gl_PREREQ_GETTIMEOFDAY + fi + gl_SYS_TIME_MODULE_INDICATOR([gettimeofday]) + # Autoconf 2.61a.99 and earlier don't support linking a file only + # in VPATH builds. But since GNUmakefile is for maintainer use + # only, it does not matter if we skip the link with older autoconf. + # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH + # builds, so use a shell variable to bypass this. + GNUmakefile=GNUmakefile + m4_if(m4_version_compare([2.61a.100], + m4_defn([m4_PACKAGE_VERSION])), [1], [], + [AC_CONFIG_LINKS([$GNUmakefile:$GNUmakefile], [], + [GNUmakefile=$GNUmakefile])]) + gl_FUNC_GROUP_MEMBER + if test $HAVE_GROUP_MEMBER = 0; then + AC_LIBOBJ([group-member]) + gl_PREREQ_GROUP_MEMBER + fi + gl_UNISTD_MODULE_INDICATOR([group-member]) + gl_INTTYPES_H + gl_INTTYPES_INCOMPLETE + gl_FUNC_ISNAND_NO_LIBM + if test $gl_func_isnand_no_libm != yes; then + AC_LIBOBJ([isnand]) + gl_PREREQ_ISNAND + fi + gl_FUNC_ISNANF_NO_LIBM + if test $gl_func_isnanf_no_libm != yes; then + AC_LIBOBJ([isnanf]) + gl_PREREQ_ISNANF + fi + gl_FUNC_ISNANL_NO_LIBM + if test $gl_func_isnanl_no_libm != yes; then + AC_LIBOBJ([isnanl]) + gl_PREREQ_ISNANL + fi + gl_LANGINFO_H + AC_REQUIRE([gl_LARGEFILE]) + gl___INLINE + gl_LIMITS_H + gl_LOCALCHARSET + dnl For backward compatibility. Some packages still use this. + LOCALCHARSET_TESTS_ENVIRONMENT= + AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT]) + gl_LOCALE_H + gl_FUNC_LOCALECONV + if test $REPLACE_LOCALECONV = 1; then + AC_LIBOBJ([localeconv]) + gl_PREREQ_LOCALECONV + fi + gl_LOCALE_MODULE_INDICATOR([localeconv]) + AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS]) + AC_LIBOBJ([localtime-buffer]) + gl_LOCK + gl_MODULE_INDICATOR([lock]) + gl_FUNC_LSEEK + if test $REPLACE_LSEEK = 1; then + AC_LIBOBJ([lseek]) + fi + gl_UNISTD_MODULE_INDICATOR([lseek]) + gl_FUNC_LSTAT + if test $REPLACE_LSTAT = 1; then + AC_LIBOBJ([lstat]) + gl_PREREQ_LSTAT + fi + gl_SYS_STAT_MODULE_INDICATOR([lstat]) + AC_CONFIG_COMMANDS_PRE([m4_ifdef([AH_HEADER], + [AC_SUBST([CONFIG_INCLUDE], m4_defn([AH_HEADER]))])]) + AC_REQUIRE([AC_PROG_SED]) + AC_REQUIRE([AC_PROG_GREP]) + gl_FUNC_MALLOC_POSIX + if test $REPLACE_MALLOC = 1; then + AC_LIBOBJ([malloc]) + fi + gl_STDLIB_MODULE_INDICATOR([malloc-posix]) + gl_MALLOCA + gl_MATH_H + gl_FUNC_MBRLEN + if test $HAVE_MBRLEN = 0 || test $REPLACE_MBRLEN = 1; then + AC_LIBOBJ([mbrlen]) + gl_PREREQ_MBRLEN + fi + gl_WCHAR_MODULE_INDICATOR([mbrlen]) + gl_FUNC_MBRTOWC + if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then + AC_LIBOBJ([mbrtowc]) + gl_PREREQ_MBRTOWC + fi + gl_WCHAR_MODULE_INDICATOR([mbrtowc]) + gl_FUNC_MBSINIT + if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then + AC_LIBOBJ([mbsinit]) + gl_PREREQ_MBSINIT + fi + gl_WCHAR_MODULE_INDICATOR([mbsinit]) + gl_FUNC_MBTOWC + if test $REPLACE_MBTOWC = 1; then + AC_LIBOBJ([mbtowc]) + gl_PREREQ_MBTOWC + fi + gl_STDLIB_MODULE_INDICATOR([mbtowc]) + gl_FUNC_MEMCHR + if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then + AC_LIBOBJ([memchr]) + gl_PREREQ_MEMCHR + fi + gl_STRING_MODULE_INDICATOR([memchr]) + gl_MINMAX + gl_FUNC_MKDIR + if test $REPLACE_MKDIR = 1; then + AC_LIBOBJ([mkdir]) + fi + gl_FUNC_MKOSTEMP + if test $HAVE_MKOSTEMP = 0; then + AC_LIBOBJ([mkostemp]) + gl_PREREQ_MKOSTEMP + fi + gl_MODULE_INDICATOR([mkostemp]) + gl_STDLIB_MODULE_INDICATOR([mkostemp]) + gl_FUNC_MKSTEMP + if test $HAVE_MKSTEMP = 0 || test $REPLACE_MKSTEMP = 1; then + AC_LIBOBJ([mkstemp]) + gl_PREREQ_MKSTEMP + fi + gl_STDLIB_MODULE_INDICATOR([mkstemp]) + gl_FUNC_MKTIME + if test $REPLACE_MKTIME = 1; then + AC_LIBOBJ([mktime]) + gl_PREREQ_MKTIME + fi + gl_TIME_MODULE_INDICATOR([mktime]) + gl_FUNC_MKTIME_INTERNAL + if test $WANT_MKTIME_INTERNAL = 1; then + AC_LIBOBJ([mktime]) + gl_PREREQ_MKTIME + fi + AC_REQUIRE([gl_MSVC_INVAL]) + if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then + AC_LIBOBJ([msvc-inval]) + fi + AC_REQUIRE([gl_MSVC_NOTHROW]) + if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then + AC_LIBOBJ([msvc-nothrow]) + fi + gl_MODULE_INDICATOR([msvc-nothrow]) + gl_MULTIARCH + gl_FUNC_NL_LANGINFO + if test $HAVE_NL_LANGINFO = 0 || test $REPLACE_NL_LANGINFO = 1; then + AC_LIBOBJ([nl_langinfo]) + fi + gl_LANGINFO_MODULE_INDICATOR([nl_langinfo]) + gl_FUNC_GNU_STRFTIME + AC_FUNC_OBSTACK + dnl Note: AC_FUNC_OBSTACK does AC_LIBSOURCES([obstack.h, obstack.c]). + gl_FUNC_OPEN + if test $REPLACE_OPEN = 1; then + AC_LIBOBJ([open]) + gl_PREREQ_OPEN + fi + gl_FCNTL_MODULE_INDICATOR([open]) + gl_PARSE_DATETIME + gl_PATHMAX + gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1; then + AC_LIBOBJ([spawn_faction_addopen]) + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_addopen]) + gl_POSIX_SPAWN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + AC_LIBOBJ([spawn_faction_destroy]) + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_destroy]) + gl_POSIX_SPAWN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + AC_LIBOBJ([spawn_faction_init]) + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_init]) + gl_POSIX_SPAWN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + AC_LIBOBJ([spawnattr_destroy]) + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_destroy]) + gl_POSIX_SPAWN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + AC_LIBOBJ([spawnattr_init]) + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_init]) + gl_POSIX_SPAWN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + AC_LIBOBJ([spawnattr_setflags]) + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_setflags]) + gl_POSIX_SPAWN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + AC_LIBOBJ([spawnattr_setsigmask]) + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_setsigmask]) + gl_POSIX_SPAWN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + AC_LIBOBJ([spawnp]) + AC_LIBOBJ([spawni]) + gl_PREREQ_POSIX_SPAWN_INTERNAL + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawnp]) + gl_FUNC_PRINTF_FREXP + gl_FUNC_PRINTF_FREXPL + gl_FUNC_PRINTF_POSIX + gl_STDIO_MODULE_INDICATOR([printf-posix]) + m4_divert_text([INIT_PREPARE], [gl_printf_safe=yes]) + AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>]) + AC_CHECK_DECLS([program_invocation_short_name], [], [], [#include <errno.h>]) + gl_QUOTE + gl_QUOTEARG + gl_FUNC_RAISE + if test $HAVE_RAISE = 0 || test $REPLACE_RAISE = 1; then + AC_LIBOBJ([raise]) + gl_PREREQ_RAISE + fi + gl_SIGNAL_MODULE_INDICATOR([raise]) + gl_FUNC_RANDOM_R + if test $HAVE_RANDOM_R = 0 || test $REPLACE_RANDOM_R = 1; then + AC_LIBOBJ([random_r]) + gl_PREREQ_RANDOM_R + fi + gl_STDLIB_MODULE_INDICATOR([random_r]) + gl_FUNC_RAWMEMCHR + if test $HAVE_RAWMEMCHR = 0; then + AC_LIBOBJ([rawmemchr]) + gl_PREREQ_RAWMEMCHR + fi + gl_STRING_MODULE_INDICATOR([rawmemchr]) + gl_PREREQ_READ_FILE + gl_FUNC_READLINE + if test "$gl_cv_lib_readline" = no; then + AC_LIBOBJ([readline]) + gl_PREREQ_READLINE + fi + gl_FUNC_READLINK + if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then + AC_LIBOBJ([readlink]) + gl_PREREQ_READLINK + fi + gl_UNISTD_MODULE_INDICATOR([readlink]) + gl_FUNC_REALLOC_POSIX + if test $REPLACE_REALLOC = 1; then + AC_LIBOBJ([realloc]) + fi + gl_STDLIB_MODULE_INDICATOR([realloc-posix]) + gl_REGEX + if test $ac_use_included_regex = yes; then + AC_LIBOBJ([regex]) + gl_PREREQ_REGEX + fi + gl_FUNC_RENAME + if test $REPLACE_RENAME = 1; then + AC_LIBOBJ([rename]) + fi + gl_STDIO_MODULE_INDICATOR([rename]) + gl_FUNC_RMDIR + if test $REPLACE_RMDIR = 1; then + AC_LIBOBJ([rmdir]) + fi + gl_UNISTD_MODULE_INDICATOR([rmdir]) + gl_SCHED_H + gl_FUNC_SECURE_GETENV + if test $HAVE_SECURE_GETENV = 0; then + AC_LIBOBJ([secure_getenv]) + gl_PREREQ_SECURE_GETENV + fi + gl_STDLIB_MODULE_INDICATOR([secure_getenv]) + gl_HEADERS_SELINUX_SELINUX_H + gl_HEADERS_SELINUX_CONTEXT_H + if test "$with_selinux" != no && test "$ac_cv_header_selinux_selinux_h" = yes; then + AC_LIBOBJ([getfilecon]) + fi + gl_FUNC_SETENV + if test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1; then + AC_LIBOBJ([setenv]) + fi + gl_STDLIB_MODULE_INDICATOR([setenv]) + gl_SH_FILENAME + gl_SIGACTION + if test $HAVE_SIGACTION = 0; then + AC_LIBOBJ([sigaction]) + gl_PREREQ_SIGACTION + fi + gl_SIGNAL_MODULE_INDICATOR([sigaction]) + gl_SIGNAL_H + gl_SIGNBIT + if test $REPLACE_SIGNBIT = 1; then + AC_LIBOBJ([signbitf]) + AC_LIBOBJ([signbitd]) + AC_LIBOBJ([signbitl]) + fi + gl_MATH_MODULE_INDICATOR([signbit]) + gl_SIGNALBLOCKING + if test $HAVE_POSIX_SIGNALBLOCKING = 0; then + AC_LIBOBJ([sigprocmask]) + gl_PREREQ_SIGPROCMASK + fi + gl_SIGNAL_MODULE_INDICATOR([sigprocmask]) + gl_SIZE_MAX + gl_SPAWN_H + gt_TYPE_SSIZE_T + gl_FUNC_STAT + if test $REPLACE_STAT = 1; then + AC_LIBOBJ([stat]) + case "$host_os" in + mingw*) + AC_LIBOBJ([stat-w32]) + ;; + esac + gl_PREREQ_STAT + fi + gl_SYS_STAT_MODULE_INDICATOR([stat]) + gl_STAT_TIME + gl_STAT_BIRTHTIME + gl_STDARG_H + AM_STDBOOL_H + gl_STDDEF_H + gl_STDINT_H + gl_STDIO_H + gl_STDLIB_H + gl_STRCASE + if test $HAVE_STRCASECMP = 0; then + AC_LIBOBJ([strcasecmp]) + gl_PREREQ_STRCASECMP + fi + if test $HAVE_STRNCASECMP = 0; then + AC_LIBOBJ([strncasecmp]) + gl_PREREQ_STRNCASECMP + fi + gl_FUNC_STRCASESTR + if test $HAVE_STRCASESTR = 0 || test $REPLACE_STRCASESTR = 1; then + AC_LIBOBJ([strcasestr]) + gl_PREREQ_STRCASESTR + fi + gl_FUNC_STRCASESTR_SIMPLE + if test $HAVE_STRCASESTR = 0 || test $REPLACE_STRCASESTR = 1; then + AC_LIBOBJ([strcasestr]) + gl_PREREQ_STRCASESTR + fi + gl_STRING_MODULE_INDICATOR([strcasestr]) + gl_FUNC_STRCHRNUL + if test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1; then + AC_LIBOBJ([strchrnul]) + gl_PREREQ_STRCHRNUL + fi + gl_STRING_MODULE_INDICATOR([strchrnul]) + gl_FUNC_STRDUP_POSIX + if test $ac_cv_func_strdup = no || test $REPLACE_STRDUP = 1; then + AC_LIBOBJ([strdup]) + gl_PREREQ_STRDUP + fi + gl_STRING_MODULE_INDICATOR([strdup]) + gl_FUNC_STRERROR + if test $REPLACE_STRERROR = 1; then + AC_LIBOBJ([strerror]) + fi + gl_MODULE_INDICATOR([strerror]) + gl_STRING_MODULE_INDICATOR([strerror]) + AC_REQUIRE([gl_HEADER_ERRNO_H]) + AC_REQUIRE([gl_FUNC_STRERROR_0]) + if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then + AC_LIBOBJ([strerror-override]) + gl_PREREQ_SYS_H_WINSOCK2 + fi + gl_HEADER_STRING_H + gl_HEADER_STRINGS_H + gl_FUNC_STRSEP + if test $HAVE_STRSEP = 0; then + AC_LIBOBJ([strsep]) + gl_PREREQ_STRSEP + fi + gl_STRING_MODULE_INDICATOR([strsep]) + gl_FUNC_STRVERSCMP + if test $HAVE_STRVERSCMP = 0; then + AC_LIBOBJ([strverscmp]) + gl_PREREQ_STRVERSCMP + fi + gl_STRING_MODULE_INDICATOR([strverscmp]) + gl_HEADER_SYS_FILE_H + AC_PROG_MKDIR_P + gl_HEADER_SYS_STAT_H + AC_PROG_MKDIR_P + gl_HEADER_SYS_TIME_H + AC_PROG_MKDIR_P + gl_SYS_TYPES_H + AC_PROG_MKDIR_P + gl_SYS_WAIT_H + AC_PROG_MKDIR_P + gl_FUNC_GEN_TEMPNAME + gl_THREADLIB + gl_HEADER_TIME_H + gl_TIME_R + if test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1; then + AC_LIBOBJ([time_r]) + gl_PREREQ_TIME_R + fi + gl_TIME_MODULE_INDICATOR([time_r]) + gl_TIME_RZ + if test $HAVE_TIMEZONE_T = 0; then + AC_LIBOBJ([time_rz]) + fi + gl_TIME_MODULE_INDICATOR([time_rz]) + gl_FUNC_TIMEGM + if test $HAVE_TIMEGM = 0 || test $REPLACE_TIMEGM = 1; then + AC_LIBOBJ([timegm]) + gl_PREREQ_TIMEGM + fi + gl_TIME_MODULE_INDICATOR([timegm]) + gl_TIMESPEC + gt_TMPDIR + gl_FUNC_TZSET + if test $HAVE_TZSET = 0 || test $REPLACE_TZSET = 1; then + AC_LIBOBJ([tzset]) + fi + gl_TIME_MODULE_INDICATOR([tzset]) + gl_UNISTD_H + gl_FUNC_GLIBC_UNLOCKED_IO + gl_FUNC_UNSETENV + if test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1; then + AC_LIBOBJ([unsetenv]) + gl_PREREQ_UNSETENV + fi + gl_STDLIB_MODULE_INDICATOR([unsetenv]) + gl_FUNC_VASNPRINTF + gl_FUNC_VASNPRINTF_POSIX + gl_FUNC_VASPRINTF + gl_STDIO_MODULE_INDICATOR([vasprintf]) + m4_ifdef([AM_XGETTEXT_OPTION], + [AM_][XGETTEXT_OPTION([--flag=asprintf:2:c-format]) + AM_][XGETTEXT_OPTION([--flag=vasprintf:2:c-format])]) + gl_FUNC_VASPRINTF_POSIX + gl_VERSION_ETC + gl_FUNC_VFPRINTF_POSIX + gl_STDIO_MODULE_INDICATOR([vfprintf-posix]) + gl_WAIT_PROCESS + gl_FUNC_WAITPID + if test $HAVE_WAITPID = 0; then + AC_LIBOBJ([waitpid]) + fi + gl_SYS_WAIT_MODULE_INDICATOR([waitpid]) + gl_WCHAR_H + gl_FUNC_WCRTOMB + if test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1; then + AC_LIBOBJ([wcrtomb]) + gl_PREREQ_WCRTOMB + fi + gl_WCHAR_MODULE_INDICATOR([wcrtomb]) + gl_FUNC_WCTOB + if test $HAVE_WCTOB = 0 || test $REPLACE_WCTOB = 1; then + AC_LIBOBJ([wctob]) + gl_PREREQ_WCTOB + fi + gl_WCHAR_MODULE_INDICATOR([wctob]) + gl_FUNC_WCTOMB + if test $REPLACE_WCTOMB = 1; then + AC_LIBOBJ([wctomb]) + gl_PREREQ_WCTOMB + fi + gl_STDLIB_MODULE_INDICATOR([wctomb]) + gl_WCTYPE_H + gl_XALLOC + gl_XSIZE + # End of code from modules + m4_ifval(gl_LIBSOURCES_LIST, [ + m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ || + for gl_file in ]gl_LIBSOURCES_LIST[ ; do + if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then + echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2 + exit 1 + fi + done])dnl + m4_if(m4_sysval, [0], [], + [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) + ]) + m4_popdef([gl_LIBSOURCES_DIR]) + m4_popdef([gl_LIBSOURCES_LIST]) + m4_popdef([AC_LIBSOURCES]) + m4_popdef([AC_REPLACE_FUNCS]) + m4_popdef([AC_LIBOBJ]) + AC_CONFIG_COMMANDS_PRE([ + gl_libobjs= + gl_ltlibobjs= + if test -n "$gl_LIBOBJS"; then + # Remove the extension. + sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do + gl_libobjs="$gl_libobjs $i.$ac_objext" + gl_ltlibobjs="$gl_ltlibobjs $i.lo" + done + fi + AC_SUBST([gl_LIBOBJS], [$gl_libobjs]) + AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs]) + ]) + gltests_libdeps= + gltests_ltlibdeps= + m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ])) + m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS])) + m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES])) + m4_pushdef([gltests_LIBSOURCES_LIST], []) + m4_pushdef([gltests_LIBSOURCES_DIR], []) + gl_COMMON + gl_source_base='tests' +changequote(,)dnl + gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS +changequote([, ])dnl + AC_SUBST([gltests_WITNESS]) + gl_module_indicator_condition=$gltests_WITNESS + m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition]) + m4_popdef([gl_MODULE_INDICATOR_CONDITION]) + m4_ifval(gltests_LIBSOURCES_LIST, [ + m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ || + for gl_file in ]gltests_LIBSOURCES_LIST[ ; do + if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then + echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2 + exit 1 + fi + done])dnl + m4_if(m4_sysval, [0], [], + [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) + ]) + m4_popdef([gltests_LIBSOURCES_DIR]) + m4_popdef([gltests_LIBSOURCES_LIST]) + m4_popdef([AC_LIBSOURCES]) + m4_popdef([AC_REPLACE_FUNCS]) + m4_popdef([AC_LIBOBJ]) + AC_CONFIG_COMMANDS_PRE([ + gltests_libobjs= + gltests_ltlibobjs= + if test -n "$gltests_LIBOBJS"; then + # Remove the extension. + sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do + gltests_libobjs="$gltests_libobjs $i.$ac_objext" + gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" + done + fi + AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs]) + AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs]) + ]) +]) + +# Like AC_LIBOBJ, except that the module name goes +# into gl_LIBOBJS instead of into LIBOBJS. +AC_DEFUN([gl_LIBOBJ], [ + AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl + gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext" +]) + +# Like AC_REPLACE_FUNCS, except that the module name goes +# into gl_LIBOBJS instead of into LIBOBJS. +AC_DEFUN([gl_REPLACE_FUNCS], [ + m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl + AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)]) +]) + +# Like AC_LIBSOURCES, except the directory where the source file is +# expected is derived from the gnulib-tool parameterization, +# and alloca is special cased (for the alloca-opt module). +# We could also entirely rely on EXTRA_lib..._SOURCES. +AC_DEFUN([gl_LIBSOURCES], [ + m4_foreach([_gl_NAME], [$1], [ + m4_if(_gl_NAME, [alloca.c], [], [ + m4_define([gl_LIBSOURCES_DIR], [lib]) + m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ]) + ]) + ]) +]) + +# Like AC_LIBOBJ, except that the module name goes +# into gltests_LIBOBJS instead of into LIBOBJS. +AC_DEFUN([gltests_LIBOBJ], [ + AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl + gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext" +]) + +# Like AC_REPLACE_FUNCS, except that the module name goes +# into gltests_LIBOBJS instead of into LIBOBJS. +AC_DEFUN([gltests_REPLACE_FUNCS], [ + m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl + AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)]) +]) + +# Like AC_LIBSOURCES, except the directory where the source file is +# expected is derived from the gnulib-tool parameterization, +# and alloca is special cased (for the alloca-opt module). +# We could also entirely rely on EXTRA_lib..._SOURCES. +AC_DEFUN([gltests_LIBSOURCES], [ + m4_foreach([_gl_NAME], [$1], [ + m4_if(_gl_NAME, [alloca.c], [], [ + m4_define([gltests_LIBSOURCES_DIR], [tests]) + m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ]) + ]) + ]) +]) + +# This macro records the list of files which have been installed by +# gnulib-tool and may be removed by future gnulib-tool invocations. +AC_DEFUN([gl_FILE_LIST], [ + build-aux/announce-gen + build-aux/config.rpath + build-aux/gendocs.sh + build-aux/gnupload + build-aux/useless-if-before-free + build-aux/vc-list-files + doc/gendocs_template + doc/gendocs_template_min + doc/parse-datetime.texi + doc/regexprops-generic.texi + lib/_Noreturn.h + lib/acl-errno-valid.c + lib/acl-internal.c + lib/acl-internal.h + lib/acl.h + lib/acl_entries.c + lib/alignof.h + lib/alloca.c + lib/alloca.in.h + lib/arg-nonnull.h + lib/asnprintf.c + lib/asprintf.c + lib/base64.c + lib/base64.h + lib/basename-lgpl.c + lib/btowc.c + lib/c++defs.h + lib/c-ctype.c + lib/c-ctype.h + lib/c-strcase.h + lib/c-strcasecmp.c + lib/c-strcaseeq.h + lib/c-strncasecmp.c + lib/canonicalize-lgpl.c + lib/cdefs.h + lib/cloexec.c + lib/cloexec.h + lib/close-stream.c + lib/close-stream.h + lib/close.c + lib/closeout.c + lib/closeout.h + lib/copy-acl.c + lib/crc.c + lib/crc.h + lib/dirname-lgpl.c + lib/dirname.h + lib/dosname.h + lib/dup2.c + lib/errno.in.h + lib/error.c + lib/error.h + lib/euidaccess.c + lib/execute.c + lib/execute.h + lib/exitfail.c + lib/exitfail.h + lib/fatal-signal.c + lib/fatal-signal.h + lib/fcntl.c + lib/fcntl.in.h + lib/fd-hook.c + lib/fd-hook.h + lib/filename.h + lib/flexmember.h + lib/float+.h + lib/float.c + lib/float.in.h + lib/flock.c + lib/floor.c + lib/fpending.c + lib/fpending.h + lib/fprintf.c + lib/fpucw.h + lib/frexp.c + lib/frexpl.c + lib/fseek.c + lib/fseeko.c + lib/fseterr.c + lib/fseterr.h + lib/fstat.c + lib/ftell.c + lib/ftello.c + lib/fwriting.c + lib/fwriting.h + lib/get-permissions.c + lib/getdelim.c + lib/getdtablesize.c + lib/getfilecon.c + lib/getgroups.c + lib/getline.c + lib/getopt-cdefs.in.h + lib/getopt-core.h + lib/getopt-ext.h + lib/getopt-pfx-core.h + lib/getopt-pfx-ext.h + lib/getopt.c + lib/getopt.in.h + lib/getopt1.c + lib/getopt_int.h + lib/getpass.c + lib/getpass.h + lib/getprogname.c + lib/getprogname.h + lib/gettext.h + lib/gettime.c + lib/gettimeofday.c + lib/gl_array_list.c + lib/gl_array_list.h + lib/gl_list.c + lib/gl_list.h + lib/glthread/lock.c + lib/glthread/lock.h + lib/glthread/threadlib.c + lib/group-member.c + lib/hard-locale.c + lib/hard-locale.h + lib/intprops.h + lib/inttypes.in.h + lib/isnan.c + lib/isnand-nolibm.h + lib/isnand.c + lib/isnanf-nolibm.h + lib/isnanf.c + lib/isnanl-nolibm.h + lib/isnanl.c + lib/itold.c + lib/langinfo.in.h + lib/libc-config.h + lib/limits.in.h + lib/localcharset.c + lib/localcharset.h + lib/locale.in.h + lib/localeconv.c + lib/localtime-buffer.c + lib/localtime-buffer.h + lib/lseek.c + lib/lstat.c + lib/malloc.c + lib/malloca.c + lib/malloca.h + lib/math.c + lib/math.in.h + lib/mbrlen.c + lib/mbrtowc.c + lib/mbsinit.c + lib/mbtowc-impl.h + lib/mbtowc.c + lib/memchr.c + lib/memchr.valgrind + lib/minmax.h + lib/mkdir.c + lib/mkostemp.c + lib/mkstemp.c + lib/mktime-internal.h + lib/mktime.c + lib/msvc-inval.c + lib/msvc-inval.h + lib/msvc-nothrow.c + lib/msvc-nothrow.h + lib/nl_langinfo.c + lib/nstrftime.c + lib/obstack.c + lib/obstack.h + lib/open.c + lib/parse-datetime.h + lib/parse-datetime.y + lib/pathmax.h + lib/printf-args.c + lib/printf-args.h + lib/printf-frexp.c + lib/printf-frexp.h + lib/printf-frexpl.c + lib/printf-frexpl.h + lib/printf-parse.c + lib/printf-parse.h + lib/printf.c + lib/progname.c + lib/progname.h + lib/qcopy-acl.c + lib/qset-acl.c + lib/quote.h + lib/quotearg.c + lib/quotearg.h + lib/raise.c + lib/random_r.c + lib/rawmemchr.c + lib/rawmemchr.valgrind + lib/read-file.c + lib/read-file.h + lib/readline.c + lib/readline.h + lib/readlink.c + lib/realloc.c + lib/regcomp.c + lib/regex.c + lib/regex.h + lib/regex_internal.c + lib/regex_internal.h + lib/regexec.c + lib/rename.c + lib/rmdir.c + lib/root-uid.h + lib/same-inode.h + lib/sched.in.h + lib/se-context.c + lib/se-context.in.h + lib/se-selinux.c + lib/se-selinux.in.h + lib/secure_getenv.c + lib/set-acl.c + lib/set-permissions.c + lib/setenv.c + lib/sig-handler.c + lib/sig-handler.h + lib/sigaction.c + lib/signal.in.h + lib/signbitd.c + lib/signbitf.c + lib/signbitl.c + lib/sigprocmask.c + lib/size_max.h + lib/spawn.in.h + lib/spawn_faction_addopen.c + lib/spawn_faction_destroy.c + lib/spawn_faction_init.c + lib/spawn_int.h + lib/spawnattr_destroy.c + lib/spawnattr_init.c + lib/spawnattr_setflags.c + lib/spawnattr_setsigmask.c + lib/spawni.c + lib/spawnp.c + lib/stat-macros.h + lib/stat-time.c + lib/stat-time.h + lib/stat-w32.c + lib/stat-w32.h + lib/stat.c + lib/stdarg.in.h + lib/stdbool.in.h + lib/stddef.in.h + lib/stdint.in.h + lib/stdio-impl.h + lib/stdio.in.h + lib/stdlib.in.h + lib/str-two-way.h + lib/strcasecmp.c + lib/strcasestr.c + lib/strchrnul.c + lib/strchrnul.valgrind + lib/strdup.c + lib/streq.h + lib/strerror-override.c + lib/strerror-override.h + lib/strerror.c + lib/strftime.h + lib/string.in.h + lib/strings.in.h + lib/stripslash.c + lib/strncasecmp.c + lib/strsep.c + lib/strverscmp.c + lib/sys_file.in.h + lib/sys_stat.in.h + lib/sys_time.in.h + lib/sys_types.in.h + lib/sys_wait.in.h + lib/tempname.c + lib/tempname.h + lib/time-internal.h + lib/time.in.h + lib/time_r.c + lib/time_rz.c + lib/timegm.c + lib/timespec.c + lib/timespec.h + lib/tmpdir.c + lib/tmpdir.h + lib/tzset.c + lib/unistd.c + lib/unistd.in.h + lib/unlocked-io.h + lib/unsetenv.c + lib/unused-parameter.h + lib/vasnprintf.c + lib/vasnprintf.h + lib/vasprintf.c + lib/verify.h + lib/version-etc-fsf.c + lib/version-etc.c + lib/version-etc.h + lib/vfprintf.c + lib/w32spawn.h + lib/wait-process.c + lib/wait-process.h + lib/waitpid.c + lib/warn-on-use.h + lib/wchar.in.h + lib/wcrtomb.c + lib/wctob.c + lib/wctomb-impl.h + lib/wctomb.c + lib/wctype-h.c + lib/wctype.in.h + lib/xalloc-die.c + lib/xalloc-oversized.h + lib/xalloc.h + lib/xmalloc.c + lib/xsize.c + lib/xsize.h + m4/00gnulib.m4 + m4/__inline.m4 + m4/absolute-header.m4 + m4/acl.m4 + m4/alloca.m4 + m4/asm-underscore.m4 + m4/autobuild.m4 + m4/base64.m4 + m4/bison.m4 + m4/btowc.m4 + m4/builtin-expect.m4 + m4/canonicalize.m4 + m4/clock_time.m4 + m4/close-stream.m4 + m4/close.m4 + m4/closeout.m4 + m4/codeset.m4 + m4/dirname.m4 + m4/double-slash-root.m4 + m4/dup2.m4 + m4/eealloc.m4 + m4/environ.m4 + m4/errno_h.m4 + m4/error.m4 + m4/euidaccess.m4 + m4/execute.m4 + m4/exponentd.m4 + m4/exponentf.m4 + m4/exponentl.m4 + m4/extensions.m4 + m4/extern-inline.m4 + m4/fatal-signal.m4 + m4/fcntl-o.m4 + m4/fcntl.m4 + m4/fcntl_h.m4 + m4/flexmember.m4 + m4/float_h.m4 + m4/flock.m4 + m4/floor.m4 + m4/fpending.m4 + m4/fpieee.m4 + m4/fprintf-posix.m4 + m4/frexp.m4 + m4/frexpl.m4 + m4/fseek.m4 + m4/fseeko.m4 + m4/fseterr.m4 + m4/fstat.m4 + m4/ftell.m4 + m4/ftello.m4 + m4/fwriting.m4 + m4/getdelim.m4 + m4/getdtablesize.m4 + m4/getgroups.m4 + m4/getline.m4 + m4/getopt.m4 + m4/getpass.m4 + m4/getprogname.m4 + m4/gettime.m4 + m4/gettimeofday.m4 + m4/glibc21.m4 + m4/gnulib-common.m4 + m4/group-member.m4 + m4/host-cpu-c-abi.m4 + m4/include_next.m4 + m4/intmax_t.m4 + m4/inttypes-pri.m4 + m4/inttypes.m4 + m4/inttypes_h.m4 + m4/isnand.m4 + m4/isnanf.m4 + m4/isnanl.m4 + m4/langinfo_h.m4 + m4/largefile.m4 + m4/ldexpl.m4 + m4/lib-ld.m4 + m4/lib-link.m4 + m4/lib-prefix.m4 + m4/limits-h.m4 + m4/localcharset.m4 + m4/locale-fr.m4 + m4/locale-ja.m4 + m4/locale-zh.m4 + m4/locale_h.m4 + m4/localeconv.m4 + m4/localtime-buffer.m4 + m4/lock.m4 + m4/longlong.m4 + m4/lseek.m4 + m4/lstat.m4 + m4/malloc.m4 + m4/malloca.m4 + m4/math_h.m4 + m4/mbrlen.m4 + m4/mbrtowc.m4 + m4/mbsinit.m4 + m4/mbstate_t.m4 + m4/mbtowc.m4 + m4/memchr.m4 + m4/minmax.m4 + m4/mkdir.m4 + m4/mkostemp.m4 + m4/mkstemp.m4 + m4/mktime.m4 + m4/mmap-anon.m4 + m4/mode_t.m4 + m4/msvc-inval.m4 + m4/msvc-nothrow.m4 + m4/multiarch.m4 + m4/nl_langinfo.m4 + m4/nocrash.m4 + m4/nstrftime.m4 + m4/obstack.m4 + m4/off_t.m4 + m4/open-cloexec.m4 + m4/open.m4 + m4/parse-datetime.m4 + m4/pathmax.m4 + m4/posix_spawn.m4 + m4/printf-frexp.m4 + m4/printf-frexpl.m4 + m4/printf-posix-rpl.m4 + m4/printf.m4 + m4/pthread_rwlock_rdlock.m4 + m4/quote.m4 + m4/quotearg.m4 + m4/raise.m4 + m4/random_r.m4 + m4/rawmemchr.m4 + m4/read-file.m4 + m4/readline.m4 + m4/readlink.m4 + m4/realloc.m4 + m4/regex.m4 + m4/rename.m4 + m4/rmdir.m4 + m4/sched_h.m4 + m4/secure_getenv.m4 + m4/selinux-context-h.m4 + m4/selinux-selinux-h.m4 + m4/setenv.m4 + m4/sh-filename.m4 + m4/sig_atomic_t.m4 + m4/sigaction.m4 + m4/signal_h.m4 + m4/signalblocking.m4 + m4/signbit.m4 + m4/size_max.m4 + m4/spawn_h.m4 + m4/ssize_t.m4 + m4/stat-time.m4 + m4/stat.m4 + m4/stdarg.m4 + m4/stdbool.m4 + m4/stddef_h.m4 + m4/stdint.m4 + m4/stdint_h.m4 + m4/stdio_h.m4 + m4/stdlib_h.m4 + m4/strcase.m4 + m4/strcasestr.m4 + m4/strchrnul.m4 + m4/strdup.m4 + m4/strerror.m4 + m4/string_h.m4 + m4/strings_h.m4 + m4/strsep.m4 + m4/strverscmp.m4 + m4/sys_file_h.m4 + m4/sys_socket_h.m4 + m4/sys_stat_h.m4 + m4/sys_time_h.m4 + m4/sys_types_h.m4 + m4/sys_wait_h.m4 + m4/tempname.m4 + m4/threadlib.m4 + m4/time_h.m4 + m4/time_r.m4 + m4/time_rz.m4 + m4/timegm.m4 + m4/timespec.m4 + m4/tm_gmtoff.m4 + m4/tmpdir.m4 + m4/tzset.m4 + m4/unistd_h.m4 + m4/unlocked-io.m4 + m4/vasnprintf-posix.m4 + m4/vasnprintf.m4 + m4/vasprintf-posix.m4 + m4/vasprintf.m4 + m4/version-etc.m4 + m4/vfprintf-posix.m4 + m4/wait-process.m4 + m4/waitpid.m4 + m4/warn-on-use.m4 + m4/wchar_h.m4 + m4/wchar_t.m4 + m4/wcrtomb.m4 + m4/wctob.m4 + m4/wctomb.m4 + m4/wctype_h.m4 + m4/wint_t.m4 + m4/xalloc.m4 + m4/xsize.m4 + top/GNUmakefile + top/maint.mk +]) diff --git a/devspec.en_US/project/recutils/m4/group-member.m4 b/devspec.en_US/project/recutils/m4/group-member.m4 new file mode 100755 index 0000000..77d389d --- /dev/null +++ b/devspec.en_US/project/recutils/m4/group-member.m4 @@ -0,0 +1,29 @@ +# serial 14 + +# Copyright (C) 1999-2001, 2003-2007, 2009-2019 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl Written by Jim Meyering + +AC_DEFUN([gl_FUNC_GROUP_MEMBER], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + + dnl Persuade glibc <unistd.h> to declare group_member(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + dnl Do this replacement check manually because I want the hyphen + dnl (not the underscore) in the filename. + AC_CHECK_FUNC([group_member], , [ + HAVE_GROUP_MEMBER=0 + ]) +]) + +# Prerequisites of lib/group-member.c. +AC_DEFUN([gl_PREREQ_GROUP_MEMBER], +[ + AC_REQUIRE([AC_FUNC_GETGROUPS]) +]) diff --git a/devspec.en_US/project/recutils/m4/host-cpu-c-abi.m4 b/devspec.en_US/project/recutils/m4/host-cpu-c-abi.m4 new file mode 100755 index 0000000..4407296 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/host-cpu-c-abi.m4 @@ -0,0 +1,644 @@ +# host-cpu-c-abi.m4 serial 11 +dnl Copyright (C) 2002-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible and Sam Steingold. + +dnl Sets the HOST_CPU variable to the canonical name of the CPU. +dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its +dnl C language ABI (application binary interface). +dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in +dnl config.h. +dnl +dnl This canonical name can be used to select a particular assembly language +dnl source file that will interoperate with C code on the given host. +dnl +dnl For example: +dnl * 'i386' and 'sparc' are different canonical names, because code for i386 +dnl will not run on SPARC CPUs and vice versa. They have different +dnl instruction sets. +dnl * 'sparc' and 'sparc64' are different canonical names, because code for +dnl 'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code +dnl contains 32-bit instructions, whereas 'sparc64' code contains 64-bit +dnl instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit +dnl mode, but not both. +dnl * 'mips' and 'mipsn32' are different canonical names, because they use +dnl different argument passing and return conventions for C functions, and +dnl although the instruction set of 'mips' is a large subset of the +dnl instruction set of 'mipsn32'. +dnl * 'mipsn32' and 'mips64' are different canonical names, because they use +dnl different sizes for the C types like 'int' and 'void *', and although +dnl the instruction sets of 'mipsn32' and 'mips64' are the same. +dnl * The same canonical name is used for different endiannesses. You can +dnl determine the endianness through preprocessor symbols: +dnl - 'arm': test __ARMEL__. +dnl - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL. +dnl - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN. +dnl * The same name 'i386' is used for CPUs of type i386, i486, i586 +dnl (Pentium), AMD K7, Pentium II, Pentium IV, etc., because +dnl - Instructions that do not exist on all of these CPUs (cmpxchg, +dnl MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your +dnl assembly language source files use such instructions, you will +dnl need to make the distinction. +dnl - Speed of execution of the common instruction set is reasonable across +dnl the entire family of CPUs. If you have assembly language source files +dnl that are optimized for particular CPU types (like GNU gmp has), you +dnl will need to make the distinction. +dnl See <https://en.wikipedia.org/wiki/X86_instruction_listings>. +AC_DEFUN([gl_HOST_CPU_C_ABI], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_C_ASM]) + AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi], + [case "$host_cpu" in + +changequote(,)dnl + i[4567]86 ) +changequote([,])dnl + gl_cv_host_cpu_c_abi=i386 + ;; + + x86_64 ) + # On x86_64 systems, the C compiler may be generating code in one of + # these ABIs: + # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. + # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 + # with native Windows (mingw, MSVC). + # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. + # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if (defined __x86_64__ || defined __amd64__ \ + || defined _M_X64 || defined _M_AMD64) + int ok; + #else + error fail + #endif + ]])], + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __ILP32__ || defined _ILP32 + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=x86_64-x32], + [gl_cv_host_cpu_c_abi=x86_64])], + [gl_cv_host_cpu_c_abi=i386]) + ;; + +changequote(,)dnl + alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] ) +changequote([,])dnl + gl_cv_host_cpu_c_abi=alpha + ;; + + arm* | aarch64 ) + # Assume arm with EABI. + # On arm64 systems, the C compiler may be generating code in one of + # these ABIs: + # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. + # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. + # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#ifdef __aarch64__ + int ok; + #else + error fail + #endif + ]])], + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __ILP32__ || defined _ILP32 + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=arm64-ilp32], + [gl_cv_host_cpu_c_abi=arm64])], + [# Don't distinguish little-endian and big-endian arm, since they + # don't require different machine code for simple operations and + # since the user can distinguish them through the preprocessor + # defines __ARMEL__ vs. __ARMEB__. + # But distinguish arm which passes floating-point arguments and + # return values in integer registers (r0, r1, ...) - this is + # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which + # passes them in float registers (s0, s1, ...) and double registers + # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer + # sets the preprocessor defines __ARM_PCS (for the first case) and + # __ARM_PCS_VFP (for the second case), but older GCC does not. + echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c + # Look for a reference to the register d0 in the .s file. + AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1 + if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then + gl_cv_host_cpu_c_abi=armhf + else + gl_cv_host_cpu_c_abi=arm + fi + rm -f conftest* + ]) + ;; + + hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) + # On hppa, the C compiler may be generating 32-bit code or 64-bit + # code. In the latter case, it defines _LP64 and __LP64__. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#ifdef __LP64__ + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=hppa64], + [gl_cv_host_cpu_c_abi=hppa]) + ;; + + ia64* ) + # On ia64 on HP-UX, the C compiler may be generating 64-bit code or + # 32-bit code. In the latter case, it defines _ILP32. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#ifdef _ILP32 + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=ia64-ilp32], + [gl_cv_host_cpu_c_abi=ia64]) + ;; + + mips* ) + # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this + # at 32. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=mips64], + [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but + # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIN32. + # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but + # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIO32. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if (_MIPS_SIM == _ABIN32) + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=mipsn32], + [gl_cv_host_cpu_c_abi=mips])]) + ;; + + powerpc* ) + # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. + # No need to distinguish them here; the caller may distinguish + # them based on the OS. + # On powerpc64 systems, the C compiler may still be generating + # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may + # be generating 64-bit code. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __powerpc64__ || defined _ARCH_PPC64 + int ok; + #else + error fail + #endif + ]])], + [# On powerpc64, there are two ABIs on Linux: The AIX compatible + # one and the ELFv2 one. The latter defines _CALL_ELF=2. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined _CALL_ELF && _CALL_ELF == 2 + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=powerpc64-elfv2], + [gl_cv_host_cpu_c_abi=powerpc64]) + ], + [gl_cv_host_cpu_c_abi=powerpc]) + ;; + + rs6000 ) + gl_cv_host_cpu_c_abi=powerpc + ;; + + riscv32 | riscv64 ) + # There are 2 architectures (with variants): rv32* and rv64*. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if __riscv_xlen == 64 + int ok; + #else + error fail + #endif + ]])], + [cpu=riscv64], + [cpu=riscv32]) + # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. + # Size of 'long' and 'void *': + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __LP64__ + int ok; + #else + error fail + #endif + ]])], + [main_abi=lp64], + [main_abi=ilp32]) + # Float ABIs: + # __riscv_float_abi_double: + # 'float' and 'double' are passed in floating-point registers. + # __riscv_float_abi_single: + # 'float' are passed in floating-point registers. + # __riscv_float_abi_soft: + # No values are passed in floating-point registers. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __riscv_float_abi_double + int ok; + #else + error fail + #endif + ]])], + [float_abi=d], + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __riscv_float_abi_single + int ok; + #else + error fail + #endif + ]])], + [float_abi=f], + [float_abi='']) + ]) + gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}" + ;; + + s390* ) + # On s390x, the C compiler may be generating 64-bit (= s390x) code + # or 31-bit (= s390) code. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __LP64__ || defined __s390x__ + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=s390x], + [gl_cv_host_cpu_c_abi=s390]) + ;; + + sparc | sparc64 ) + # UltraSPARCs running Linux have `uname -m` = "sparc64", but the + # C compiler still generates 32-bit code. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __sparcv9 || defined __arch64__ + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi=sparc64], + [gl_cv_host_cpu_c_abi=sparc]) + ;; + + *) + gl_cv_host_cpu_c_abi="$host_cpu" + ;; + esac + ]) + + dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same. + HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'` + HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi" + AC_SUBST([HOST_CPU]) + AC_SUBST([HOST_CPU_C_ABI]) + + # This was + # AC_DEFINE_UNQUOTED([__${HOST_CPU}__]) + # AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__]) + # earlier, but KAI C++ 3.2d doesn't like this. + sed -e 's/-/_/g' >> confdefs.h <<EOF +#ifndef __${HOST_CPU}__ +#define __${HOST_CPU}__ 1 +#endif +#ifndef __${HOST_CPU_C_ABI}__ +#define __${HOST_CPU_C_ABI}__ 1 +#endif +EOF + AH_TOP([/* CPU and C ABI indicator */ +#ifndef __i386__ +#undef __i386__ +#endif +#ifndef __x86_64_x32__ +#undef __x86_64_x32__ +#endif +#ifndef __x86_64__ +#undef __x86_64__ +#endif +#ifndef __alpha__ +#undef __alpha__ +#endif +#ifndef __arm__ +#undef __arm__ +#endif +#ifndef __armhf__ +#undef __armhf__ +#endif +#ifndef __arm64_ilp32__ +#undef __arm64_ilp32__ +#endif +#ifndef __arm64__ +#undef __arm64__ +#endif +#ifndef __hppa__ +#undef __hppa__ +#endif +#ifndef __hppa64__ +#undef __hppa64__ +#endif +#ifndef __ia64_ilp32__ +#undef __ia64_ilp32__ +#endif +#ifndef __ia64__ +#undef __ia64__ +#endif +#ifndef __m68k__ +#undef __m68k__ +#endif +#ifndef __mips__ +#undef __mips__ +#endif +#ifndef __mipsn32__ +#undef __mipsn32__ +#endif +#ifndef __mips64__ +#undef __mips64__ +#endif +#ifndef __powerpc__ +#undef __powerpc__ +#endif +#ifndef __powerpc64__ +#undef __powerpc64__ +#endif +#ifndef __powerpc64_elfv2__ +#undef __powerpc64_elfv2__ +#endif +#ifndef __riscv32__ +#undef __riscv32__ +#endif +#ifndef __riscv64__ +#undef __riscv64__ +#endif +#ifndef __riscv32_ilp32__ +#undef __riscv32_ilp32__ +#endif +#ifndef __riscv32_ilp32f__ +#undef __riscv32_ilp32f__ +#endif +#ifndef __riscv32_ilp32d__ +#undef __riscv32_ilp32d__ +#endif +#ifndef __riscv64_ilp32__ +#undef __riscv64_ilp32__ +#endif +#ifndef __riscv64_ilp32f__ +#undef __riscv64_ilp32f__ +#endif +#ifndef __riscv64_ilp32d__ +#undef __riscv64_ilp32d__ +#endif +#ifndef __riscv64_lp64__ +#undef __riscv64_lp64__ +#endif +#ifndef __riscv64_lp64f__ +#undef __riscv64_lp64f__ +#endif +#ifndef __riscv64_lp64d__ +#undef __riscv64_lp64d__ +#endif +#ifndef __s390__ +#undef __s390__ +#endif +#ifndef __s390x__ +#undef __s390x__ +#endif +#ifndef __sh__ +#undef __sh__ +#endif +#ifndef __sparc__ +#undef __sparc__ +#endif +#ifndef __sparc64__ +#undef __sparc64__ +#endif +]) + +]) + + +dnl Sets the HOST_CPU_C_ABI_32BIT variable to 'yes' if the C language ABI +dnl (application binary interface) is a 32-bit one, or to 'no' otherwise. +dnl This is a simplified variant of gl_HOST_CPU_C_ABI. +AC_DEFUN([gl_HOST_CPU_C_ABI_32BIT], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CACHE_CHECK([32-bit host C ABI], [gl_cv_host_cpu_c_abi_32bit], + [if test -n "$gl_cv_host_cpu_c_abi"; then + case "$gl_cv_host_cpu_c_abi" in + i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) + gl_cv_host_cpu_c_abi_32bit=yes ;; + *) + gl_cv_host_cpu_c_abi_32bit=no ;; + esac + else + case "$host_cpu" in + +changequote(,)dnl + i[4567]86 ) +changequote([,])dnl + gl_cv_host_cpu_c_abi_32bit=yes + ;; + + x86_64 ) + # On x86_64 systems, the C compiler may be generating code in one of + # these ABIs: + # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. + # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 + # with native Windows (mingw, MSVC). + # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. + # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if (defined __x86_64__ || defined __amd64__ \ + || defined _M_X64 || defined _M_AMD64) \ + && !(defined __ILP32__ || defined _ILP32) + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi_32bit=no], + [gl_cv_host_cpu_c_abi_32bit=yes]) + ;; + + arm* | aarch64 ) + # Assume arm with EABI. + # On arm64 systems, the C compiler may be generating code in one of + # these ABIs: + # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. + # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. + # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32) + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi_32bit=no], + [gl_cv_host_cpu_c_abi_32bit=yes]) + ;; + + hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) + # On hppa, the C compiler may be generating 32-bit code or 64-bit + # code. In the latter case, it defines _LP64 and __LP64__. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#ifdef __LP64__ + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi_32bit=no], + [gl_cv_host_cpu_c_abi_32bit=yes]) + ;; + + ia64* ) + # On ia64 on HP-UX, the C compiler may be generating 64-bit code or + # 32-bit code. In the latter case, it defines _ILP32. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#ifdef _ILP32 + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi_32bit=yes], + [gl_cv_host_cpu_c_abi_32bit=no]) + ;; + + mips* ) + # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this + # at 32. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi_32bit=no], + [gl_cv_host_cpu_c_abi_32bit=yes]) + ;; + + powerpc* ) + # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. + # No need to distinguish them here; the caller may distinguish + # them based on the OS. + # On powerpc64 systems, the C compiler may still be generating + # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may + # be generating 64-bit code. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __powerpc64__ || defined _ARCH_PPC64 + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi_32bit=no], + [gl_cv_host_cpu_c_abi_32bit=yes]) + ;; + + rs6000 ) + gl_cv_host_cpu_c_abi_32bit=yes + ;; + + riscv32 | riscv64 ) + # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. + # Size of 'long' and 'void *': + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __LP64__ + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi_32bit=no], + [gl_cv_host_cpu_c_abi_32bit=yes]) + ;; + + s390* ) + # On s390x, the C compiler may be generating 64-bit (= s390x) code + # or 31-bit (= s390) code. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __LP64__ || defined __s390x__ + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi_32bit=no], + [gl_cv_host_cpu_c_abi_32bit=yes]) + ;; + + sparc | sparc64 ) + # UltraSPARCs running Linux have `uname -m` = "sparc64", but the + # C compiler still generates 32-bit code. + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __sparcv9 || defined __arch64__ + int ok; + #else + error fail + #endif + ]])], + [gl_cv_host_cpu_c_abi_32bit=no], + [gl_cv_host_cpu_c_abi_32bit=yes]) + ;; + + *) + gl_cv_host_cpu_c_abi_32bit=no + ;; + esac + fi + ]) + + HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit" +]) diff --git a/devspec.en_US/project/recutils/m4/iconv.m4 b/devspec.en_US/project/recutils/m4/iconv.m4 new file mode 100755 index 0000000..aa159c5 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/iconv.m4 @@ -0,0 +1,271 @@ +# iconv.m4 serial 19 (gettext-0.18.2) +dnl Copyright (C) 2000-2002, 2007-2014, 2016 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], +[ + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([iconv]) +]) + +AC_DEFUN([AM_ICONV_LINK], +[ + dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and + dnl those with the standalone portable GNU libiconv installed). + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + + dnl Add $INCICONV to CPPFLAGS before performing the following checks, + dnl because if the user has installed libiconv and not disabled its use + dnl via --without-libiconv-prefix, he wants to use it. The first + dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed. + am_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) + + AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include <stdlib.h> +#include <iconv.h> + ]], + [[iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);]])], + [am_cv_func_iconv=yes]) + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include <stdlib.h> +#include <iconv.h> + ]], + [[iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);]])], + [am_cv_lib_iconv=yes] + [am_cv_func_iconv=yes]) + LIBS="$am_save_LIBS" + fi + ]) + if test "$am_cv_func_iconv" = yes; then + AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ + dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11, + dnl Solaris 10. + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + am_cv_func_iconv_works=no + for ac_iconv_const in '' 'const'; do + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include <iconv.h> +#include <string.h> + +#ifndef ICONV_CONST +# define ICONV_CONST $ac_iconv_const +#endif + ]], + [[int result = 0; + /* Test against AIX 5.1 bug: Failures are not distinguishable from successful + returns. */ + { + iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); + if (cd_utf8_to_88591 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 1; + iconv_close (cd_utf8_to_88591); + } + } + /* Test against Solaris 10 bug: Failures are not distinguishable from + successful returns. */ + { + iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); + if (cd_ascii_to_88591 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\263"; + char buf[10]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_ascii_to_88591, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 2; + iconv_close (cd_ascii_to_88591); + } + } + /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\304"; + static char buf[2] = { (char)0xDE, (char)0xAD }; + ICONV_CONST char *inptr = input; + size_t inbytesleft = 1; + char *outptr = buf; + size_t outbytesleft = 1; + size_t res = iconv (cd_88591_to_utf8, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) + result |= 4; + iconv_close (cd_88591_to_utf8); + } + } +#if 0 /* This bug could be worked around by the caller. */ + /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + ICONV_CONST char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_88591_to_utf8, + &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + result |= 8; + iconv_close (cd_88591_to_utf8); + } + } +#endif + /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is + provided. */ + if (/* Try standardized names. */ + iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) + /* Try IRIX, OSF/1 names. */ + && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) + /* Try AIX names. */ + && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) + /* Try HP-UX names. */ + && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) + result |= 16; + return result; +]])], + [am_cv_func_iconv_works=yes], , + [case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac]) + test "$am_cv_func_iconv_works" = no || break + done + LIBS="$am_save_LIBS" + ]) + case "$am_cv_func_iconv_works" in + *no) am_func_iconv=no am_cv_lib_iconv=no ;; + *) am_func_iconv=yes ;; + esac + else + am_func_iconv=no am_cv_lib_iconv=no + fi + if test "$am_func_iconv" = yes; then + AC_DEFINE([HAVE_ICONV], [1], + [Define if you have the iconv() function and it works.]) + fi + if test "$am_cv_lib_iconv" = yes; then + AC_MSG_CHECKING([how to link with libiconv]) + AC_MSG_RESULT([$LIBICONV]) + else + dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV + dnl either. + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + AC_SUBST([LIBICONV]) + AC_SUBST([LTLIBICONV]) +]) + +dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to +dnl avoid warnings like +dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". +dnl This is tricky because of the way 'aclocal' is implemented: +dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. +dnl Otherwise aclocal's initial scan pass would miss the macro definition. +dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. +dnl Otherwise aclocal would emit many "Use of uninitialized value $1" +dnl warnings. +m4_define([gl_iconv_AC_DEFUN], + m4_version_prereq([2.64], + [[AC_DEFUN_ONCE( + [$1], [$2])]], + [m4_ifdef([gl_00GNULIB], + [[AC_DEFUN_ONCE( + [$1], [$2])]], + [[AC_DEFUN( + [$1], [$2])]])])) +gl_iconv_AC_DEFUN([AM_ICONV], +[ + AM_ICONV_LINK + if test "$am_cv_func_iconv" = yes; then + AC_MSG_CHECKING([for iconv declaration]) + AC_CACHE_VAL([am_cv_proto_iconv], [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include <stdlib.h> +#include <iconv.h> +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif + ]], + [[]])], + [am_cv_proto_iconv_arg1=""], + [am_cv_proto_iconv_arg1="const"]) + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) + am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + AC_MSG_RESULT([ + $am_cv_proto_iconv]) + AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], + [Define as const if the declaration of iconv() needs const.]) + dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>. + m4_ifdef([gl_ICONV_H_DEFAULTS], + [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) + if test -n "$am_cv_proto_iconv_arg1"; then + ICONV_CONST="const" + fi + ]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/include_next.m4 b/devspec.en_US/project/recutils/m4/include_next.m4 new file mode 100755 index 0000000..86eb2c9 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/include_next.m4 @@ -0,0 +1,224 @@ +# include_next.m4 serial 24 +dnl Copyright (C) 2006-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert and Derek Price. + +dnl Sets INCLUDE_NEXT, INCLUDE_NEXT_AS_FIRST_DIRECTIVE, PRAGMA_SYSTEM_HEADER, +dnl and PRAGMA_COLUMNS. +dnl +dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to +dnl 'include' otherwise. +dnl +dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler +dnl supports it in the special case that it is the first include directive in +dnl the given file, or to 'include' otherwise. +dnl +dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next, +dnl so as to avoid GCC warnings when the gcc option -pedantic is used. +dnl '#pragma GCC system_header' has the same effect as if the file was found +dnl through the include search path specified with '-isystem' options (as +dnl opposed to the search path specified with '-I' options). Namely, gcc +dnl does not warn about some things, and on some systems (Solaris and Interix) +dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side +dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead +dnl of plain '__STDC__'. +dnl +dnl PRAGMA_COLUMNS can be used in files that override system header files, so +dnl as to avoid compilation errors on HP NonStop systems when the gnulib file +dnl is included by a system header file that does a "#pragma COLUMNS 80" (which +dnl has the effect of truncating the lines of that file and all files that it +dnl includes to 80 columns) and the gnulib file has lines longer than 80 +dnl columns. + +AC_DEFUN([gl_INCLUDE_NEXT], +[ + AC_LANG_PREPROC_REQUIRE() + AC_CACHE_CHECK([whether the preprocessor supports include_next], + [gl_cv_have_include_next], + [rm -rf conftestd1a conftestd1b conftestd2 + mkdir conftestd1a conftestd1b conftestd2 + dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on + dnl AIX 6.1 support include_next when used as first preprocessor directive + dnl in a file, but not when preceded by another include directive. Check + dnl for this bug by including <stdio.h>. + dnl Additionally, with this same compiler, include_next is a no-op when + dnl used in a header file that was included by specifying its absolute + dnl file name. Despite these two bugs, include_next is used in the + dnl compiler's <math.h>. By virtue of the second bug, we need to use + dnl include_next as well in this case. + cat <<EOF > conftestd1a/conftest.h +#define DEFINED_IN_CONFTESTD1 +#include_next <conftest.h> +#ifdef DEFINED_IN_CONFTESTD2 +int foo; +#else +#error "include_next doesn't work" +#endif +EOF + cat <<EOF > conftestd1b/conftest.h +#define DEFINED_IN_CONFTESTD1 +#include <stdio.h> +#include_next <conftest.h> +#ifdef DEFINED_IN_CONFTESTD2 +int foo; +#else +#error "include_next doesn't work" +#endif +EOF + cat <<EOF > conftestd2/conftest.h +#ifndef DEFINED_IN_CONFTESTD1 +#error "include_next test doesn't work" +#endif +#define DEFINED_IN_CONFTESTD2 +EOF + gl_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" +dnl We intentionally avoid using AC_LANG_SOURCE here. + AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]], + [gl_cv_have_include_next=yes], + [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" + AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]], + [gl_cv_have_include_next=buggy], + [gl_cv_have_include_next=no]) + ]) + CPPFLAGS="$gl_save_CPPFLAGS" + rm -rf conftestd1a conftestd1b conftestd2 + ]) + PRAGMA_SYSTEM_HEADER= + if test $gl_cv_have_include_next = yes; then + INCLUDE_NEXT=include_next + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next + if test -n "$GCC"; then + PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' + fi + else + if test $gl_cv_have_include_next = buggy; then + INCLUDE_NEXT=include + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next + else + INCLUDE_NEXT=include + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include + fi + fi + AC_SUBST([INCLUDE_NEXT]) + AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE]) + AC_SUBST([PRAGMA_SYSTEM_HEADER]) + AC_CACHE_CHECK([whether system header files limit the line length], + [gl_cv_pragma_columns], + [dnl HP NonStop systems, which define __TANDEM, have this misfeature. + AC_EGREP_CPP([choke me], + [ +#ifdef __TANDEM +choke me +#endif + ], + [gl_cv_pragma_columns=yes], + [gl_cv_pragma_columns=no]) + ]) + if test $gl_cv_pragma_columns = yes; then + PRAGMA_COLUMNS="#pragma COLUMNS 10000" + else + PRAGMA_COLUMNS= + fi + AC_SUBST([PRAGMA_COLUMNS]) +]) + +# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) +# ------------------------------------------ +# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be +# '<foo.h>'; otherwise define it to be +# '"///usr/include/foo.h"', or whatever other absolute file name is suitable. +# Also, if #include_next works as first preprocessing directive in a file, +# define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be '<foo.h>'; otherwise define it to +# be +# '"///usr/include/foo.h"', or whatever other absolute file name is suitable. +# That way, a header file with the following line: +# #@INCLUDE_NEXT@ @NEXT_FOO_H@ +# or +# #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@ +# behaves (after sed substitution) as if it contained +# #include_next <foo.h> +# even if the compiler does not support include_next. +# The three "///" are to pacify Sun C 5.8, which otherwise would say +# "warning: #include of /usr/include/... may be non-portable". +# Use '""', not '<>', so that the /// cannot be confused with a C99 comment. +# Note: This macro assumes that the header file is not empty after +# preprocessing, i.e. it does not only define preprocessor macros but also +# provides some type/enum definitions or function/variable declarations. +# +# This macro also checks whether each header exists, by invoking +# AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument. +AC_DEFUN([gl_CHECK_NEXT_HEADERS], +[ + gl_NEXT_HEADERS_INTERNAL([$1], [check]) +]) + +# gl_NEXT_HEADERS(HEADER1 HEADER2 ...) +# ------------------------------------ +# Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist. +# This is suitable for headers like <stddef.h> that are standardized by C89 +# and therefore can be assumed to exist. +AC_DEFUN([gl_NEXT_HEADERS], +[ + gl_NEXT_HEADERS_INTERNAL([$1], [assume]) +]) + +# The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. +AC_DEFUN([gl_NEXT_HEADERS_INTERNAL], +[ + AC_REQUIRE([gl_INCLUDE_NEXT]) + AC_REQUIRE([AC_CANONICAL_HOST]) + + m4_if([$2], [check], + [AC_CHECK_HEADERS_ONCE([$1]) + ]) + +dnl FIXME: gl_next_header and gl_header_exists must be used unquoted +dnl until we can assume autoconf 2.64 or newer. + m4_foreach_w([gl_HEADER_NAME], [$1], + [AS_VAR_PUSHDEF([gl_next_header], + [gl_cv_next_]m4_defn([gl_HEADER_NAME])) + if test $gl_cv_have_include_next = yes; then + AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) + else + AC_CACHE_CHECK( + [absolute name of <]m4_defn([gl_HEADER_NAME])[>], + m4_defn([gl_next_header]), + [m4_if([$2], [check], + [AS_VAR_PUSHDEF([gl_header_exists], + [ac_cv_header_]m4_defn([gl_HEADER_NAME])) + if test AS_VAR_GET(gl_header_exists) = yes; then + AS_VAR_POPDEF([gl_header_exists]) + ]) + gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME) + AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME)) + AS_VAR_SET(gl_next_header, ['"'$gl_header'"']) + m4_if([$2], [check], + [else + AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) + fi + ]) + ]) + fi + AC_SUBST( + AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])), + [AS_VAR_GET(gl_next_header)]) + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'gl_HEADER_NAME'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=AS_VAR_GET(gl_next_header) + fi + AC_SUBST( + AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])), + [$gl_next_as_first_directive]) + AS_VAR_POPDEF([gl_next_header])]) +]) + +# Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE; +# this fallback is safe for all earlier autoconf versions. +m4_define_default([AC_LANG_DEFINES_PROVIDED]) diff --git a/devspec.en_US/project/recutils/m4/intlmacosx.m4 b/devspec.en_US/project/recutils/m4/intlmacosx.m4 new file mode 100755 index 0000000..aca924c --- /dev/null +++ b/devspec.en_US/project/recutils/m4/intlmacosx.m4 @@ -0,0 +1,56 @@ +# intlmacosx.m4 serial 5 (gettext-0.18.2) +dnl Copyright (C) 2004-2014, 2016 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Checks for special options needed on Mac OS X. +dnl Defines INTL_MACOSX_LIBS. +AC_DEFUN([gt_INTL_MACOSX], +[ + dnl Check for API introduced in Mac OS X 10.2. + AC_CACHE_CHECK([for CFPreferencesCopyAppValue], + [gt_cv_func_CFPreferencesCopyAppValue], + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <CoreFoundation/CFPreferences.h>]], + [[CFPreferencesCopyAppValue(NULL, NULL)]])], + [gt_cv_func_CFPreferencesCopyAppValue=yes], + [gt_cv_func_CFPreferencesCopyAppValue=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], + [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) + fi + dnl Check for API introduced in Mac OS X 10.3. + AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <CoreFoundation/CFLocale.h>]], + [[CFLocaleCopyCurrent();]])], + [gt_cv_func_CFLocaleCopyCurrent=yes], + [gt_cv_func_CFLocaleCopyCurrent=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], + [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + AC_SUBST([INTL_MACOSX_LIBS]) +]) diff --git a/devspec.en_US/project/recutils/m4/intmax_t.m4 b/devspec.en_US/project/recutils/m4/intmax_t.m4 new file mode 100755 index 0000000..5ded16e --- /dev/null +++ b/devspec.en_US/project/recutils/m4/intmax_t.m4 @@ -0,0 +1,67 @@ +# intmax_t.m4 serial 8 +dnl Copyright (C) 1997-2004, 2006-2007, 2009-2019 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +AC_PREREQ([2.53]) + +# Define intmax_t to 'long' or 'long long' +# if it is not already defined in <stdint.h> or <inttypes.h>. + +AC_DEFUN([gl_AC_TYPE_INTMAX_T], +[ + dnl For simplicity, we assume that a header file defines 'intmax_t' if and + dnl only if it defines 'uintmax_t'. + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + test $ac_cv_type_long_long_int = yes \ + && ac_type='long long' \ + || ac_type='long' + AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], + [Define to long or long long if <inttypes.h> and <stdint.h> don't define.]) + else + AC_DEFINE([HAVE_INTMAX_T], [1], + [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.]) + fi +]) + +dnl An alternative would be to explicitly test for 'intmax_t'. + +AC_DEFUN([gt_AC_TYPE_INTMAX_T], +[ + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include <stddef.h> +#include <stdlib.h> +#if HAVE_STDINT_H_WITH_UINTMAX +#include <stdint.h> +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +#include <inttypes.h> +#endif + ]], + [[intmax_t x = -1; return !x;]])], + [gt_cv_c_intmax_t=yes], + [gt_cv_c_intmax_t=no])]) + if test $gt_cv_c_intmax_t = yes; then + AC_DEFINE([HAVE_INTMAX_T], [1], + [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.]) + else + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + test $ac_cv_type_long_long_int = yes \ + && ac_type='long long' \ + || ac_type='long' + AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], + [Define to long or long long if <stdint.h> and <inttypes.h> don't define.]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/inttypes-pri.m4 b/devspec.en_US/project/recutils/m4/inttypes-pri.m4 new file mode 100755 index 0000000..38fe118 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/inttypes-pri.m4 @@ -0,0 +1,42 @@ +# inttypes-pri.m4 serial 7 (gettext-0.18.2) +dnl Copyright (C) 1997-2002, 2006, 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_PREREQ([2.53]) + +# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI* +# macros to non-string values. This is the case on AIX 4.3.3. + +AC_DEFUN([gt_INTTYPES_PRI], +[ + AC_CHECK_HEADERS([inttypes.h]) + if test $ac_cv_header_inttypes_h = yes; then + AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], + [gt_cv_inttypes_pri_broken], + [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include <inttypes.h> +#ifdef PRId32 +char *p = PRId32; +#endif + ]], + [[]])], + [gt_cv_inttypes_pri_broken=no], + [gt_cv_inttypes_pri_broken=yes]) + ]) + fi + if test "$gt_cv_inttypes_pri_broken" = yes; then + AC_DEFINE_UNQUOTED([PRI_MACROS_BROKEN], [1], + [Define if <inttypes.h> exists and defines unusable PRI* macros.]) + PRI_MACROS_BROKEN=1 + else + PRI_MACROS_BROKEN=0 + fi + AC_SUBST([PRI_MACROS_BROKEN]) +]) diff --git a/devspec.en_US/project/recutils/m4/inttypes.m4 b/devspec.en_US/project/recutils/m4/inttypes.m4 new file mode 100755 index 0000000..c58a1be --- /dev/null +++ b/devspec.en_US/project/recutils/m4/inttypes.m4 @@ -0,0 +1,159 @@ +# inttypes.m4 serial 27 +dnl Copyright (C) 2006-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Derek Price, Bruno Haible. +dnl Test whether <inttypes.h> is supported or must be substituted. + +AC_DEFUN([gl_INTTYPES_H], +[ + AC_REQUIRE([gl_INTTYPES_INCOMPLETE]) + gl_INTTYPES_PRI_SCN +]) + +AC_DEFUN_ONCE([gl_INTTYPES_INCOMPLETE], +[ + AC_REQUIRE([gl_STDINT_H]) + AC_CHECK_HEADERS_ONCE([inttypes.h]) + + dnl Override <inttypes.h> always, so that the portability warnings work. + AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) + gl_CHECK_NEXT_HEADERS([inttypes.h]) + + AC_REQUIRE([gl_MULTIARCH]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[#include <inttypes.h> + ]], [imaxabs imaxdiv strtoimax strtoumax]) +]) + +# Ensure that the PRI* and SCN* macros are defined appropriately. +AC_DEFUN([gl_INTTYPES_PRI_SCN], +[ + AC_REQUIRE([gt_INTTYPES_PRI]) + + PRIPTR_PREFIX= + if test -n "$STDINT_H"; then + dnl Using the gnulib <stdint.h>. It always defines intptr_t to 'long'. + PRIPTR_PREFIX='"l"' + else + dnl Using the system's <stdint.h>. + for glpfx in '' l ll I64; do + case $glpfx in + '') gltype1='int';; + l) gltype1='long int';; + ll) gltype1='long long int';; + I64) gltype1='__int64';; + esac + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include <stdint.h> + extern intptr_t foo; + extern $gltype1 foo;]])], + [PRIPTR_PREFIX='"'$glpfx'"']) + test -n "$PRIPTR_PREFIX" && break + done + fi + AC_SUBST([PRIPTR_PREFIX]) + + gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( + [INT32_MAX_LT_INTMAX_MAX], + [defined INT32_MAX && defined INTMAX_MAX], + [INT32_MAX < INTMAX_MAX], + [sizeof (int) < sizeof (long long int)]) + if test $APPLE_UNIVERSAL_BUILD = 0; then + gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( + [INT64_MAX_EQ_LONG_MAX], + [defined INT64_MAX], + [INT64_MAX == LONG_MAX], + [sizeof (long long int) == sizeof (long int)]) + else + INT64_MAX_EQ_LONG_MAX=-1 + fi + gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( + [UINT32_MAX_LT_UINTMAX_MAX], + [defined UINT32_MAX && defined UINTMAX_MAX], + [UINT32_MAX < UINTMAX_MAX], + [sizeof (unsigned int) < sizeof (unsigned long long int)]) + if test $APPLE_UNIVERSAL_BUILD = 0; then + gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( + [UINT64_MAX_EQ_ULONG_MAX], + [defined UINT64_MAX], + [UINT64_MAX == ULONG_MAX], + [sizeof (unsigned long long int) == sizeof (unsigned long int)]) + else + UINT64_MAX_EQ_ULONG_MAX=-1 + fi +]) + +# Define the symbol $1 to be 1 if the condition is true, 0 otherwise. +# If $2 is true, the condition is $3; otherwise if long long int is supported +# approximate the condition with $4; otherwise, assume the condition is false. +# The condition should work on all C99 platforms; the approximations should be +# good enough to work on all practical pre-C99 platforms. +# $2 is evaluated by the C preprocessor, $3 and $4 as compile-time constants. +AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION], +[ + AC_CACHE_CHECK([whether $3], + [gl_cv_test_$1], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[/* Work also in C++ mode. */ + #define __STDC_LIMIT_MACROS 1 + + /* Work if build is not clean. */ + #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H + + #include <limits.h> + #if HAVE_STDINT_H + #include <stdint.h> + #endif + + #if $2 + #define CONDITION ($3) + #elif HAVE_LONG_LONG_INT + #define CONDITION ($4) + #else + #define CONDITION 0 + #endif + int test[CONDITION ? 1 : -1];]])], + [gl_cv_test_$1=yes], + [gl_cv_test_$1=no])]) + if test $gl_cv_test_$1 = yes; then + $1=1; + else + $1=0; + fi + AC_SUBST([$1]) +]) + +AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) +]) + +AC_DEFUN([gl_INTTYPES_H_DEFAULTS], +[ + GNULIB_IMAXABS=0; AC_SUBST([GNULIB_IMAXABS]) + GNULIB_IMAXDIV=0; AC_SUBST([GNULIB_IMAXDIV]) + GNULIB_STRTOIMAX=0; AC_SUBST([GNULIB_STRTOIMAX]) + GNULIB_STRTOUMAX=0; AC_SUBST([GNULIB_STRTOUMAX]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_DECL_IMAXABS=1; AC_SUBST([HAVE_DECL_IMAXABS]) + HAVE_DECL_IMAXDIV=1; AC_SUBST([HAVE_DECL_IMAXDIV]) + HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX]) + HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX]) + HAVE_IMAXDIV_T=1; AC_SUBST([HAVE_IMAXDIV_T]) + REPLACE_STRTOIMAX=0; AC_SUBST([REPLACE_STRTOIMAX]) + REPLACE_STRTOUMAX=0; AC_SUBST([REPLACE_STRTOUMAX]) + INT32_MAX_LT_INTMAX_MAX=1; AC_SUBST([INT32_MAX_LT_INTMAX_MAX]) + INT64_MAX_EQ_LONG_MAX='defined _LP64'; AC_SUBST([INT64_MAX_EQ_LONG_MAX]) + PRI_MACROS_BROKEN=0; AC_SUBST([PRI_MACROS_BROKEN]) + PRIPTR_PREFIX=__PRIPTR_PREFIX; AC_SUBST([PRIPTR_PREFIX]) + UINT32_MAX_LT_UINTMAX_MAX=1; AC_SUBST([UINT32_MAX_LT_UINTMAX_MAX]) + UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; AC_SUBST([UINT64_MAX_EQ_ULONG_MAX]) +]) diff --git a/devspec.en_US/project/recutils/m4/inttypes_h.m4 b/devspec.en_US/project/recutils/m4/inttypes_h.m4 new file mode 100755 index 0000000..d20422a --- /dev/null +++ b/devspec.en_US/project/recutils/m4/inttypes_h.m4 @@ -0,0 +1,29 @@ +# inttypes_h.m4 serial 10 +dnl Copyright (C) 1997-2004, 2006, 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists, +# doesn't clash with <sys/types.h>, and declares uintmax_t. + +AC_DEFUN([gl_AC_HEADER_INTTYPES_H], +[ + AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include <sys/types.h> +#include <inttypes.h> + ]], + [[uintmax_t i = (uintmax_t) -1; return !i;]])], + [gl_cv_header_inttypes_h=yes], + [gl_cv_header_inttypes_h=no])]) + if test $gl_cv_header_inttypes_h = yes; then + AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1], + [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, + and declares uintmax_t. ]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/isnand.m4 b/devspec.en_US/project/recutils/m4/isnand.m4 new file mode 100755 index 0000000..31af024 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/isnand.m4 @@ -0,0 +1,96 @@ +# isnand.m4 serial 11 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Check how to get or define isnand(). + +AC_DEFUN([gl_FUNC_ISNAND], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + ISNAND_LIBM= + gl_HAVE_ISNAND_NO_LIBM + if test $gl_cv_func_isnand_no_libm = no; then + gl_HAVE_ISNAND_IN_LIBM + if test $gl_cv_func_isnand_in_libm = yes; then + ISNAND_LIBM=-lm + fi + fi + dnl The variable gl_func_isnand set here is used by isnan.m4. + if test $gl_cv_func_isnand_no_libm = yes \ + || test $gl_cv_func_isnand_in_libm = yes; then + gl_func_isnand=yes + else + gl_func_isnand=no + HAVE_ISNAND=0 + fi + AC_SUBST([ISNAND_LIBM]) +]) + +dnl Check how to get or define isnand() without linking with libm. + +AC_DEFUN([gl_FUNC_ISNAND_NO_LIBM], +[ + gl_HAVE_ISNAND_NO_LIBM + gl_func_isnand_no_libm=$gl_cv_func_isnand_no_libm + if test $gl_cv_func_isnand_no_libm = yes; then + AC_DEFINE([HAVE_ISNAND_IN_LIBC], [1], + [Define if the isnan(double) function is available in libc.]) + fi +]) + +dnl Prerequisites of replacement isnand definition. It does not need -lm. +AC_DEFUN([gl_PREREQ_ISNAND], +[ + AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) +]) + +dnl Test whether isnand() can be used with libm. + +AC_DEFUN([gl_HAVE_ISNAND_IN_LIBM], +[ + AC_CACHE_CHECK([whether isnan(double) can be used with libm], + [gl_cv_func_isnand_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <math.h> + #if __GNUC__ >= 4 + # undef isnand + # define isnand(x) __builtin_isnan ((double)(x)) + #elif defined isnan + # undef isnand + # define isnand(x) isnan ((double)(x)) + #endif + double x;]], + [[return isnand (x);]])], + [gl_cv_func_isnand_in_libm=yes], + [gl_cv_func_isnand_in_libm=no]) + LIBS="$save_LIBS" + ]) +]) + +AC_DEFUN([gl_HAVE_ISNAND_NO_LIBM], +[ + AC_CACHE_CHECK([whether isnan(double) can be used without linking with libm], + [gl_cv_func_isnand_no_libm], + [ + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <math.h> + #if __GNUC__ >= 4 + # undef isnand + # define isnand(x) __builtin_isnan ((double)(x)) + #else + # undef isnand + # define isnand(x) isnan ((double)(x)) + #endif + double x;]], + [[return isnand (x);]])], + [gl_cv_func_isnand_no_libm=yes], + [gl_cv_func_isnand_no_libm=no]) + ]) +]) diff --git a/devspec.en_US/project/recutils/m4/isnanf.m4 b/devspec.en_US/project/recutils/m4/isnanf.m4 new file mode 100755 index 0000000..f03f37d --- /dev/null +++ b/devspec.en_US/project/recutils/m4/isnanf.m4 @@ -0,0 +1,197 @@ +# isnanf.m4 serial 15 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Check how to get or define isnanf(). + +AC_DEFUN([gl_FUNC_ISNANF], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + ISNANF_LIBM= + gl_HAVE_ISNANF_NO_LIBM + if test $gl_cv_func_isnanf_no_libm = no; then + gl_HAVE_ISNANF_IN_LIBM + if test $gl_cv_func_isnanf_in_libm = yes; then + ISNANF_LIBM=-lm + fi + fi + dnl The variable gl_func_isnanf set here is used by isnan.m4. + if test $gl_cv_func_isnanf_no_libm = yes \ + || test $gl_cv_func_isnanf_in_libm = yes; then + save_LIBS="$LIBS" + LIBS="$LIBS $ISNANF_LIBM" + gl_ISNANF_WORKS + LIBS="$save_LIBS" + case "$gl_cv_func_isnanf_works" in + *yes) gl_func_isnanf=yes ;; + *) gl_func_isnanf=no; ISNANF_LIBM= ;; + esac + else + gl_func_isnanf=no + fi + if test $gl_func_isnanf != yes; then + HAVE_ISNANF=0 + fi + AC_SUBST([ISNANF_LIBM]) +]) + +dnl Check how to get or define isnanf() without linking with libm. + +AC_DEFUN([gl_FUNC_ISNANF_NO_LIBM], +[ + gl_HAVE_ISNANF_NO_LIBM + if test $gl_cv_func_isnanf_no_libm = yes; then + gl_ISNANF_WORKS + fi + if test $gl_cv_func_isnanf_no_libm = yes \ + && { case "$gl_cv_func_isnanf_works" in + *yes) true;; + *) false;; + esac + }; then + gl_func_isnanf_no_libm=yes + AC_DEFINE([HAVE_ISNANF_IN_LIBC], [1], + [Define if the isnan(float) function is available in libc.]) + else + gl_func_isnanf_no_libm=no + fi +]) + +dnl Prerequisites of replacement isnanf definition. It does not need -lm. +AC_DEFUN([gl_PREREQ_ISNANF], +[ + gl_FLOAT_EXPONENT_LOCATION +]) + +dnl Test whether isnanf() can be used without libm. +AC_DEFUN([gl_HAVE_ISNANF_NO_LIBM], +[ + AC_CACHE_CHECK([whether isnan(float) can be used without linking with libm], + [gl_cv_func_isnanf_no_libm], + [ + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <math.h> + #if __GNUC__ >= 4 + # undef isnanf + # define isnanf(x) __builtin_isnanf ((float)(x)) + #elif defined isnan + # undef isnanf + # define isnanf(x) isnan ((float)(x)) + #endif + float x;]], + [[return isnanf (x);]])], + [gl_cv_func_isnanf_no_libm=yes], + [gl_cv_func_isnanf_no_libm=no]) + ]) +]) + +dnl Test whether isnanf() can be used with libm. +AC_DEFUN([gl_HAVE_ISNANF_IN_LIBM], +[ + AC_CACHE_CHECK([whether isnan(float) can be used with libm], + [gl_cv_func_isnanf_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <math.h> + #if __GNUC__ >= 4 + # undef isnanf + # define isnanf(x) __builtin_isnanf ((float)(x)) + #elif defined isnan + # undef isnanf + # define isnanf(x) isnan ((float)(x)) + #endif + float x;]], + [[return isnanf (x);]])], + [gl_cv_func_isnanf_in_libm=yes], + [gl_cv_func_isnanf_in_libm=no]) + LIBS="$save_LIBS" + ]) +]) + +dnl Test whether isnanf() rejects Infinity (this fails on Solaris 2.5.1), +dnl recognizes a NaN (this fails on IRIX 6.5 with cc), and recognizes a NaN +dnl with in-memory representation 0x7fbfffff (this fails on IRIX 6.5). +AC_DEFUN([gl_ISNANF_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION]) + AC_CACHE_CHECK([whether isnan(float) works], [gl_cv_func_isnanf_works], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <math.h> +#if __GNUC__ >= 4 +# undef isnanf +# define isnanf(x) __builtin_isnanf ((float)(x)) +#elif defined isnan +# undef isnanf +# define isnanf(x) isnan ((float)(x)) +#endif +/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ +#ifdef __DECC +static float +NaN () +{ + static float zero = 0.0f; + return zero / zero; +} +#else +# define NaN() (0.0f / 0.0f) +#endif +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { unsigned int word[NWORDS]; float value; } memory_float; +int main() +{ + int result = 0; + + if (isnanf (1.0f / 0.0f)) + result |= 1; + + if (!isnanf (NaN ())) + result |= 2; + +#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT + /* The isnanf function should be immune against changes in the sign bit and + in the mantissa bits. The xor operation twiddles a bit that can only be + a sign bit or a mantissa bit. */ + if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0) + { + memory_float m; + + m.value = NaN (); + /* Set the bits below the exponent to 01111...111. */ + m.word[0] &= -1U << FLT_EXPBIT0_BIT; + m.word[0] |= 1U << (FLT_EXPBIT0_BIT - 1) - 1; + if (!isnanf (m.value)) + result |= 4; + } +#endif + + return result; +}]])], + [gl_cv_func_isnanf_works=yes], + [gl_cv_func_isnanf_works=no], + [case "$host_os" in + irix* | solaris*) gl_cv_func_isnanf_works="guessing no" ;; + mingw*) # Guess yes on mingw, no on MSVC. + AC_EGREP_CPP([Known], [ +#ifdef __MINGW32__ + Known +#endif + ], + [gl_cv_func_isnanf_works="guessing yes"], + [gl_cv_func_isnanf_works="guessing no"]) + ;; + *) gl_cv_func_isnanf_works="guessing yes" ;; + esac + ]) + ]) +]) diff --git a/devspec.en_US/project/recutils/m4/isnanl.m4 b/devspec.en_US/project/recutils/m4/isnanl.m4 new file mode 100755 index 0000000..3bef867 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/isnanl.m4 @@ -0,0 +1,248 @@ +# isnanl.m4 serial 20 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_ISNANL], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + ISNANL_LIBM= + gl_HAVE_ISNANL_NO_LIBM + if test $gl_cv_func_isnanl_no_libm = no; then + gl_HAVE_ISNANL_IN_LIBM + if test $gl_cv_func_isnanl_in_libm = yes; then + ISNANL_LIBM=-lm + fi + fi + dnl The variable gl_func_isnanl set here is used by isnan.m4. + if test $gl_cv_func_isnanl_no_libm = yes \ + || test $gl_cv_func_isnanl_in_libm = yes; then + save_LIBS="$LIBS" + LIBS="$LIBS $ISNANL_LIBM" + gl_FUNC_ISNANL_WORKS + LIBS="$save_LIBS" + case "$gl_cv_func_isnanl_works" in + *yes) gl_func_isnanl=yes ;; + *) gl_func_isnanl=no; ISNANL_LIBM= ;; + esac + else + gl_func_isnanl=no + fi + if test $gl_func_isnanl != yes; then + HAVE_ISNANL=0 + fi + AC_SUBST([ISNANL_LIBM]) +]) + +AC_DEFUN([gl_FUNC_ISNANL_NO_LIBM], +[ + gl_HAVE_ISNANL_NO_LIBM + gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm + if test $gl_func_isnanl_no_libm = yes; then + gl_FUNC_ISNANL_WORKS + case "$gl_cv_func_isnanl_works" in + *yes) ;; + *) gl_func_isnanl_no_libm=no ;; + esac + fi + if test $gl_func_isnanl_no_libm = yes; then + AC_DEFINE([HAVE_ISNANL_IN_LIBC], [1], + [Define if the isnan(long double) function is available in libc.]) + fi +]) + +dnl Prerequisites of replacement isnanl definition. It does not need -lm. +AC_DEFUN([gl_PREREQ_ISNANL], +[ + gl_LONG_DOUBLE_EXPONENT_LOCATION + AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) +]) + +dnl Test whether isnanl() can be used without libm. +AC_DEFUN([gl_HAVE_ISNANL_NO_LIBM], +[ + AC_CACHE_CHECK([whether isnan(long double) can be used without linking with libm], + [gl_cv_func_isnanl_no_libm], + [ + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <math.h> + #if __GNUC__ >= 4 + # undef isnanl + # define isnanl(x) __builtin_isnanl ((long double)(x)) + #elif defined isnan + # undef isnanl + # define isnanl(x) isnan ((long double)(x)) + #endif + long double x;]], + [[return isnanl (x);]])], + [gl_cv_func_isnanl_no_libm=yes], + [gl_cv_func_isnanl_no_libm=no]) + ]) +]) + +dnl Test whether isnanl() can be used with libm. +AC_DEFUN([gl_HAVE_ISNANL_IN_LIBM], +[ + AC_CACHE_CHECK([whether isnan(long double) can be used with libm], + [gl_cv_func_isnanl_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <math.h> + #if __GNUC__ >= 4 + # undef isnanl + # define isnanl(x) __builtin_isnanl ((long double)(x)) + #elif defined isnan + # undef isnanl + # define isnanl(x) isnan ((long double)(x)) + #endif + long double x;]], + [[return isnanl (x);]])], + [gl_cv_func_isnanl_in_libm=yes], + [gl_cv_func_isnanl_in_libm=no]) + LIBS="$save_LIBS" + ]) +]) + +dnl Test whether isnanl() recognizes all canonical numbers which are neither +dnl finite nor infinite. +AC_DEFUN([gl_FUNC_ISNANL_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_BIGENDIAN]) + AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether isnanl works], [gl_cv_func_isnanl_works], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <float.h> +#include <limits.h> +#include <math.h> +#if __GNUC__ >= 4 +# undef isnanl +# define isnanl(x) __builtin_isnanl ((long double)(x)) +#elif defined isnan +# undef isnanl +# define isnanl(x) isnan ((long double)(x)) +#endif +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { unsigned int word[NWORDS]; long double value; } + memory_long_double; +/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the + runtime type conversion. */ +#ifdef __sgi +static long double NaNl () +{ + double zero = 0.0; + return zero / zero; +} +#else +# define NaNl() (0.0L / 0.0L) +#endif +int main () +{ + int result = 0; + + if (!isnanl (NaNl ())) + result |= 1; + + { + memory_long_double m; + unsigned int i; + + /* The isnanl function should be immune against changes in the sign bit and + in the mantissa bits. The xor operation twiddles a bit that can only be + a sign bit or a mantissa bit (since the exponent never extends to + bit 31). */ + m.value = NaNl (); + m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); + for (i = 0; i < NWORDS; i++) + m.word[i] |= 1; + if (!isnanl (m.value)) + result |= 1; + } + +#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE +/* Representation of an 80-bit 'long double' as an initializer for a sequence + of 'unsigned int' words. */ +# ifdef WORDS_BIGENDIAN +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ + ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ + (unsigned int) (mantlo) << 16 \ + } +# else +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { mantlo, manthi, exponent } +# endif + { /* Quiet NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + if (!isnanl (x.value)) + result |= 2; + } + { + /* Signalling NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + if (!isnanl (x.value)) + result |= 2; + } + /* isnanl should return something even for noncanonical values. */ + { /* Pseudo-NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + if (isnanl (x.value) && !isnanl (x.value)) + result |= 4; + } + { /* Pseudo-Infinity. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + if (isnanl (x.value) && !isnanl (x.value)) + result |= 8; + } + { /* Pseudo-Zero. */ + static memory_long_double x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + if (isnanl (x.value) && !isnanl (x.value)) + result |= 16; + } + { /* Unnormalized number. */ + static memory_long_double x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + if (isnanl (x.value) && !isnanl (x.value)) + result |= 32; + } + { /* Pseudo-Denormal. */ + static memory_long_double x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + if (isnanl (x.value) && !isnanl (x.value)) + result |= 64; + } +#endif + + return result; +}]])], + [gl_cv_func_isnanl_works=yes], + [gl_cv_func_isnanl_works=no], + [case "$host_os" in + mingw*) # Guess yes on mingw, no on MSVC. + AC_EGREP_CPP([Known], [ +#ifdef __MINGW32__ + Known +#endif + ], + [gl_cv_func_isnanl_works="guessing yes"], + [gl_cv_func_isnanl_works="guessing no"]) + ;; + *) gl_cv_func_isnanl_works="guessing yes" ;; + esac + ]) + ]) +]) diff --git a/devspec.en_US/project/recutils/m4/langinfo_h.m4 b/devspec.en_US/project/recutils/m4/langinfo_h.m4 new file mode 100755 index 0000000..76385d8 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/langinfo_h.m4 @@ -0,0 +1,120 @@ +# langinfo_h.m4 serial 8 +dnl Copyright (C) 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_LANGINFO_H], +[ + AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) + + dnl Persuade glibc-2.0.6 <langinfo.h> to define CODESET. + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + dnl <langinfo.h> is always overridden, because of GNULIB_POSIXCHECK. + gl_CHECK_NEXT_HEADERS([langinfo.h]) + + dnl Determine whether <langinfo.h> exists. It is missing on mingw and BeOS. + HAVE_LANGINFO_CODESET=0 + HAVE_LANGINFO_T_FMT_AMPM=0 + HAVE_LANGINFO_ALTMON=0 + HAVE_LANGINFO_ERA=0 + HAVE_LANGINFO_YESEXPR=0 + AC_CHECK_HEADERS_ONCE([langinfo.h]) + if test $ac_cv_header_langinfo_h = yes; then + HAVE_LANGINFO_H=1 + dnl Determine what <langinfo.h> defines. CODESET and ERA etc. are missing + dnl on OpenBSD 3.8. T_FMT_AMPM and YESEXPR, NOEXPR are missing on IRIX 5.3. + dnl ALTMON_* are missing on glibc 2.26 and many other systems. + AC_CACHE_CHECK([whether langinfo.h defines CODESET], + [gl_cv_header_langinfo_codeset], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include <langinfo.h> +int a = CODESET; +]])], + [gl_cv_header_langinfo_codeset=yes], + [gl_cv_header_langinfo_codeset=no]) + ]) + if test $gl_cv_header_langinfo_codeset = yes; then + HAVE_LANGINFO_CODESET=1 + fi + AC_CACHE_CHECK([whether langinfo.h defines T_FMT_AMPM], + [gl_cv_header_langinfo_t_fmt_ampm], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include <langinfo.h> +int a = T_FMT_AMPM; +]])], + [gl_cv_header_langinfo_t_fmt_ampm=yes], + [gl_cv_header_langinfo_t_fmt_ampm=no]) + ]) + if test $gl_cv_header_langinfo_t_fmt_ampm = yes; then + HAVE_LANGINFO_T_FMT_AMPM=1 + fi + AC_CACHE_CHECK([whether langinfo.h defines ALTMON_1], + [gl_cv_header_langinfo_altmon], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include <langinfo.h> +int a = ALTMON_1; +]])], + [gl_cv_header_langinfo_altmon=yes], + [gl_cv_header_langinfo_altmon=no]) + ]) + if test $gl_cv_header_langinfo_altmon = yes; then + HAVE_LANGINFO_ALTMON=1 + fi + AC_CACHE_CHECK([whether langinfo.h defines ERA], + [gl_cv_header_langinfo_era], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include <langinfo.h> +int a = ERA; +]])], + [gl_cv_header_langinfo_era=yes], + [gl_cv_header_langinfo_era=no]) + ]) + if test $gl_cv_header_langinfo_era = yes; then + HAVE_LANGINFO_ERA=1 + fi + AC_CACHE_CHECK([whether langinfo.h defines YESEXPR], + [gl_cv_header_langinfo_yesexpr], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include <langinfo.h> +int a = YESEXPR; +]])], + [gl_cv_header_langinfo_yesexpr=yes], + [gl_cv_header_langinfo_yesexpr=no]) + ]) + if test $gl_cv_header_langinfo_yesexpr = yes; then + HAVE_LANGINFO_YESEXPR=1 + fi + else + HAVE_LANGINFO_H=0 + fi + AC_SUBST([HAVE_LANGINFO_H]) + AC_SUBST([HAVE_LANGINFO_CODESET]) + AC_SUBST([HAVE_LANGINFO_T_FMT_AMPM]) + AC_SUBST([HAVE_LANGINFO_ALTMON]) + AC_SUBST([HAVE_LANGINFO_ERA]) + AC_SUBST([HAVE_LANGINFO_YESEXPR]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[#include <langinfo.h> + ]], [nl_langinfo]) +]) + +AC_DEFUN([gl_LANGINFO_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_LANGINFO_H_DEFAULTS], +[ + GNULIB_NL_LANGINFO=0; AC_SUBST([GNULIB_NL_LANGINFO]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_NL_LANGINFO=1; AC_SUBST([HAVE_NL_LANGINFO]) + REPLACE_NL_LANGINFO=0; AC_SUBST([REPLACE_NL_LANGINFO]) +]) diff --git a/devspec.en_US/project/recutils/m4/largefile.m4 b/devspec.en_US/project/recutils/m4/largefile.m4 new file mode 100755 index 0000000..1938188 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/largefile.m4 @@ -0,0 +1,161 @@ +# Enable large files on systems where this is not the default. + +# Copyright 1992-1996, 1998-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# The following implementation works around a problem in autoconf <= 2.69; +# AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5, +# or configures them incorrectly in some cases. +m4_version_prereq([2.70], [] ,[ + +# _AC_SYS_LARGEFILE_TEST_INCLUDES +# ------------------------------- +m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES], +[@%:@include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +@%:@define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]];[]dnl +]) + + +# _AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, +# CACHE-VAR, +# DESCRIPTION, +# PROLOGUE, [FUNCTION-BODY]) +# -------------------------------------------------------- +m4_define([_AC_SYS_LARGEFILE_MACRO_VALUE], +[AC_CACHE_CHECK([for $1 value needed for large files], [$3], +[while :; do + m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])( + [AC_LANG_PROGRAM([$5], [$6])], + [$3=no; break]) + m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])( + [AC_LANG_PROGRAM([@%:@define $1 $2 +$5], [$6])], + [$3=$2; break]) + $3=unknown + break +done]) +case $$3 in #( + no | unknown) ;; + *) AC_DEFINE_UNQUOTED([$1], [$$3], [$4]);; +esac +rm -rf conftest*[]dnl +])# _AC_SYS_LARGEFILE_MACRO_VALUE + + +# AC_SYS_LARGEFILE +# ---------------- +# By default, many hosts won't let programs access large files; +# one must use special compiler options to get large-file access to work. +# For more details about this brain damage please see: +# http://www.unix-systems.org/version2/whatsnew/lfs20mar.html +AC_DEFUN([AC_SYS_LARGEFILE], +[AC_ARG_ENABLE(largefile, + [ --disable-largefile omit support for large files]) +if test "$enable_largefile" != no; then + + AC_CACHE_CHECK([for special C compiler options needed for large files], + ac_cv_sys_largefile_CC, + [ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + AC_LANG_CONFTEST([AC_LANG_PROGRAM([_AC_SYS_LARGEFILE_TEST_INCLUDES])]) + AC_COMPILE_IFELSE([], [break]) + CC="$CC -n32" + AC_COMPILE_IFELSE([], [ac_cv_sys_largefile_CC=' -n32'; break]) + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi]) + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + _AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64, + ac_cv_sys_file_offset_bits, + [Number of bits in a file offset, on hosts where this is settable.], + [_AC_SYS_LARGEFILE_TEST_INCLUDES]) + if test $ac_cv_sys_file_offset_bits = unknown; then + _AC_SYS_LARGEFILE_MACRO_VALUE(_LARGE_FILES, 1, + ac_cv_sys_large_files, + [Define for large files, on AIX-style hosts.], + [_AC_SYS_LARGEFILE_TEST_INCLUDES]) + fi + + AC_DEFINE([_DARWIN_USE_64_BIT_INODE], [1], + [Enable large inode numbers on Mac OS X 10.5.]) +fi +])# AC_SYS_LARGEFILE +])# m4_version_prereq 2.70 + +# Enable large files on systems where this is implemented by Gnulib, not by the +# system headers. +# Set the variables WINDOWS_64_BIT_OFF_T, WINDOWS_64_BIT_ST_SIZE if Gnulib +# overrides ensure that off_t or 'struct size.st_size' are 64-bit, respectively. +AC_DEFUN([gl_LARGEFILE], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + case "$host_os" in + mingw*) + dnl Native Windows. + dnl mingw64 defines off_t to a 64-bit type already, if + dnl _FILE_OFFSET_BITS=64, which is ensured by AC_SYS_LARGEFILE. + AC_CACHE_CHECK([for 64-bit off_t], [gl_cv_type_off_t_64], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/types.h> + int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1]; + ]], + [[]])], + [gl_cv_type_off_t_64=yes], [gl_cv_type_off_t_64=no]) + ]) + if test $gl_cv_type_off_t_64 = no; then + WINDOWS_64_BIT_OFF_T=1 + else + WINDOWS_64_BIT_OFF_T=0 + fi + dnl Some mingw versions define, if _FILE_OFFSET_BITS=64, 'struct stat' + dnl to 'struct _stat32i64' or 'struct _stat64' (depending on + dnl _USE_32BIT_TIME_T), which has a 32-bit st_size member. + AC_CACHE_CHECK([for 64-bit st_size], [gl_cv_member_st_size_64], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/types.h> + struct stat buf; + int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1]; + ]], + [[]])], + [gl_cv_member_st_size_64=yes], [gl_cv_member_st_size_64=no]) + ]) + if test $gl_cv_member_st_size_64 = no; then + WINDOWS_64_BIT_ST_SIZE=1 + else + WINDOWS_64_BIT_ST_SIZE=0 + fi + ;; + *) + dnl Nothing to do on gnulib's side. + dnl A 64-bit off_t is + dnl - already the default on Mac OS X, FreeBSD, NetBSD, OpenBSD, IRIX, + dnl OSF/1, Cygwin, + dnl - enabled by _FILE_OFFSET_BITS=64 (ensured by AC_SYS_LARGEFILE) on + dnl glibc, HP-UX, Solaris, + dnl - enabled by _LARGE_FILES=1 (ensured by AC_SYS_LARGEFILE) on AIX, + dnl - impossible to achieve on Minix 3.1.8. + WINDOWS_64_BIT_OFF_T=0 + WINDOWS_64_BIT_ST_SIZE=0 + ;; + esac +]) diff --git a/devspec.en_US/project/recutils/m4/ldexpl.m4 b/devspec.en_US/project/recutils/m4/ldexpl.m4 new file mode 100755 index 0000000..bae6de3 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/ldexpl.m4 @@ -0,0 +1,135 @@ +# ldexpl.m4 serial 17 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_LDEXPL], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) + AC_REQUIRE([gl_FUNC_ISNANL]) dnl for ISNANL_LIBM + + dnl Persuade glibc <math.h> to declare ldexpl(). + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + dnl Check whether it's declared. + dnl Mac OS X 10.3 has ldexpl() in libc but doesn't declare it in <math.h>. + AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [[#include <math.h>]]) + + LDEXPL_LIBM= + if test $HAVE_DECL_LDEXPL = 1; then + gl_CHECK_LDEXPL_NO_LIBM + if test $gl_cv_func_ldexpl_no_libm = no; then + AC_CACHE_CHECK([whether ldexpl() can be used with libm], + [gl_cv_func_ldexpl_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <math.h> + long double x;]], + [[return ldexpl (x, -1) > 0;]])], + [gl_cv_func_ldexpl_in_libm=yes], + [gl_cv_func_ldexpl_in_libm=no]) + LIBS="$save_LIBS" + ]) + if test $gl_cv_func_ldexpl_in_libm = yes; then + LDEXPL_LIBM=-lm + fi + fi + if test $gl_cv_func_ldexpl_no_libm = yes \ + || test $gl_cv_func_ldexpl_in_libm = yes; then + save_LIBS="$LIBS" + LIBS="$LIBS $LDEXPL_LIBM" + gl_FUNC_LDEXPL_WORKS + LIBS="$save_LIBS" + case "$gl_cv_func_ldexpl_works" in + *yes) gl_func_ldexpl=yes ;; + *) gl_func_ldexpl=no; REPLACE_LDEXPL=1 ;; + esac + else + gl_func_ldexpl=no + fi + if test $gl_func_ldexpl = yes; then + AC_DEFINE([HAVE_LDEXPL], [1], + [Define if the ldexpl() function is available.]) + fi + fi + if test $HAVE_DECL_LDEXPL = 0 || test $gl_func_ldexpl = no; then + dnl Find libraries needed to link lib/ldexpl.c. + if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then + AC_REQUIRE([gl_FUNC_LDEXP]) + LDEXPL_LIBM="$LDEXP_LIBM" + else + LDEXPL_LIBM="$ISNANL_LIBM" + fi + fi + AC_SUBST([LDEXPL_LIBM]) +]) + +dnl Test whether ldexpl() can be used without linking with libm. +dnl Set gl_cv_func_ldexpl_no_libm to 'yes' or 'no' accordingly. +AC_DEFUN([gl_CHECK_LDEXPL_NO_LIBM], +[ + AC_CACHE_CHECK([whether ldexpl() can be used without linking with libm], + [gl_cv_func_ldexpl_no_libm], + [ + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <math.h> + long double x;]], + [[return ldexpl (x, -1) > 0;]])], + [gl_cv_func_ldexpl_no_libm=yes], + [gl_cv_func_ldexpl_no_libm=no]) + ]) +]) + +dnl Test whether ldexpl() works on finite numbers (this fails on AIX 5.1 +dnl and Mac OS X 10.4/PowerPC). +AC_DEFUN([gl_FUNC_LDEXPL_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether ldexpl works], [gl_cv_func_ldexpl_works], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <math.h> +extern +#ifdef __cplusplus +"C" +#endif +long double ldexpl (long double, int); +int main() +{ + int result = 0; + { + volatile long double x = 1.0; + volatile long double y = ldexpl (x, -1); + if (y != 0.5L) + result |= 1; + } + { + volatile long double x = 1.73205L; + volatile long double y = ldexpl (x, 0); + if (y != x) + result |= 2; + } + return result; +}]])], + [gl_cv_func_ldexpl_works=yes], + [gl_cv_func_ldexpl_works=no], + [ +changequote(,)dnl + case "$host_os" in + aix | aix[3-6]*) gl_cv_func_ldexpl_works="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_ldexpl_works="guessing yes" ;; + *) gl_cv_func_ldexpl_works="guessing yes" ;; + esac +changequote([,])dnl + ]) + ]) +]) diff --git a/devspec.en_US/project/recutils/m4/lib-ld.m4 b/devspec.en_US/project/recutils/m4/lib-ld.m4 new file mode 100755 index 0000000..a187196 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/lib-ld.m4 @@ -0,0 +1,168 @@ +# lib-ld.m4 serial 9 +dnl Copyright (C) 1996-2003, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Subroutines of libtool.m4, +dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid +dnl collision with libtool.m4. + +dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. +AC_DEFUN([AC_LIB_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], +[# I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 </dev/null` in +*GNU* | *'with BFD'*) + acl_cv_prog_gnu_ld=yes + ;; +*) + acl_cv_prog_gnu_ld=no + ;; +esac]) +with_gnu_ld=$acl_cv_prog_gnu_ld +]) + +dnl From libtool-2.4. Sets the variable LD. +AC_DEFUN([AC_LIB_PROG_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld [default=no]])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +if test -n "$LD"; then + AC_MSG_CHECKING([for ld]) +elif test "$GCC" = yes; then + AC_MSG_CHECKING([for ld used by $CC]) +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +if test -n "$LD"; then + # Let the user override the test with a path. + : +else + AC_CACHE_VAL([acl_cv_path_LD], + [ + acl_cv_path_LD= # Final result of this test + ac_prog=ld # Program to search in $PATH + if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + acl_output=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $acl_output in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` + while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do + acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` + done + # Got the pathname. No search in PATH is needed. + acl_cv_path_LD="$acl_output" + ac_prog= + ;; + "") + # If it fails, then pretend we aren't using GCC. + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac + fi + if test -n "$ac_prog"; then + # Search for $ac_prog in $PATH. + acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$acl_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break + ;; + *) + test "$with_gnu_ld" != yes && break + ;; + esac + fi + done + IFS="$acl_save_ifs" + fi + case $host in + *-*-aix*) + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __powerpc64__ || defined _ARCH_PPC64 + int ok; + #else + error fail + #endif + ]])], + [# The compiler produces 64-bit code. Add option '-b64' so that the + # linker groks 64-bit object files. + case "$acl_cv_path_LD " in + *" -b64 "*) ;; + *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;; + esac + ], []) + ;; + sparc64-*-netbsd*) + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#if defined __sparcv9 || defined __arch64__ + int ok; + #else + error fail + #endif + ]])], + [], + [# The compiler produces 32-bit code. Add option '-m elf32_sparc' + # so that the linker groks 32-bit object files. + case "$acl_cv_path_LD " in + *" -m elf32_sparc "*) ;; + *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;; + esac + ]) + ;; + esac + ]) + LD="$acl_cv_path_LD" +fi +if test -n "$LD"; then + AC_MSG_RESULT([$LD]) +else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([no acceptable ld found in \$PATH]) +fi +AC_LIB_PROG_LD_GNU +]) diff --git a/devspec.en_US/project/recutils/m4/lib-link.m4 b/devspec.en_US/project/recutils/m4/lib-link.m4 new file mode 100755 index 0000000..0ff1073 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/lib-link.m4 @@ -0,0 +1,774 @@ +# lib-link.m4 serial 28 +dnl Copyright (C) 2001-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_PREREQ([2.61]) + +dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and +dnl augments the CPPFLAGS variable. +dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname +dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + pushdef([Name],[m4_translit([$1],[./+-], [____])]) + pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + ac_cv_lib[]Name[]_libs="$LIB[]NAME" + ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" + ac_cv_lib[]Name[]_cppflags="$INC[]NAME" + ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" + ]) + LIB[]NAME="$ac_cv_lib[]Name[]_libs" + LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" + INC[]NAME="$ac_cv_lib[]Name[]_cppflags" + LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + AC_SUBST([LIB]NAME[_PREFIX]) + dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the + dnl results of this search when this library appears as a dependency. + HAVE_LIB[]NAME=yes + popdef([NAME]) + popdef([Name]) +]) + +dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) +dnl searches for libname and the libraries corresponding to explicit and +dnl implicit dependencies, together with the specified include files and +dnl the ability to compile and link the specified testcode. The missing-message +dnl defaults to 'no' and may contain additional hints for the user. +dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} +dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and +dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs +dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. +dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname +dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + pushdef([Name],[m4_translit([$1],[./+-], [____])]) + pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + + dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + + dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, + dnl because if the user has installed lib[]Name and not disabled its use + dnl via --without-lib[]Name-prefix, he wants to use it. + ac_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + + AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ + ac_save_LIBS="$LIBS" + dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, + dnl because these -l options might require -L options that are present in + dnl LIBS. -l options benefit only from the -L options listed before it. + dnl Otherwise, add it to the front of LIBS, because it may be a static + dnl library that depends on another static library that is present in LIBS. + dnl Static libraries benefit only from the static libraries listed after + dnl it. + case " $LIB[]NAME" in + *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; + *) LIBS="$LIB[]NAME $LIBS" ;; + esac + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[$3]], [[$4]])], + [ac_cv_lib[]Name=yes], + [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) + LIBS="$ac_save_LIBS" + ]) + if test "$ac_cv_lib[]Name" = yes; then + HAVE_LIB[]NAME=yes + AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) + AC_MSG_CHECKING([how to link with lib[]$1]) + AC_MSG_RESULT([$LIB[]NAME]) + else + HAVE_LIB[]NAME=no + dnl If $LIB[]NAME didn't lead to a usable library, we don't need + dnl $INC[]NAME either. + CPPFLAGS="$ac_save_CPPFLAGS" + LIB[]NAME= + LTLIB[]NAME= + LIB[]NAME[]_PREFIX= + fi + AC_SUBST([HAVE_LIB]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + AC_SUBST([LIB]NAME[_PREFIX]) + popdef([NAME]) + popdef([Name]) +]) + +dnl Determine the platform dependent parameters needed to use rpath: +dnl acl_libext, +dnl acl_shlibext, +dnl acl_libname_spec, +dnl acl_library_names_spec, +dnl acl_hardcode_libdir_flag_spec, +dnl acl_hardcode_libdir_separator, +dnl acl_hardcode_direct, +dnl acl_hardcode_minus_L. +AC_DEFUN([AC_LIB_RPATH], +[ + dnl Complain if config.rpath is missing. + AC_REQUIRE_AUX_FILE([config.rpath]) + AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS + AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir + AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + ]) + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE([rpath], + [ --disable-rpath do not hardcode runtime library paths], + :, enable_rpath=yes) +]) + +dnl AC_LIB_FROMPACKAGE(name, package) +dnl declares that libname comes from the given package. The configure file +dnl will then not have a --with-libname-prefix option but a +dnl --with-package-prefix option. Several libraries can come from the same +dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar +dnl macro call that searches for libname. +AC_DEFUN([AC_LIB_FROMPACKAGE], +[ + pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + define([acl_frompackage_]NAME, [$2]) + popdef([NAME]) + pushdef([PACK],[$2]) + pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + define([acl_libsinpackage_]PACKUP, + m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) + popdef([PACKUP]) + popdef([PACK]) +]) + +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found +dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], +[ + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) + pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_ARG_WITH(PACK[-prefix], +[[ --with-]]PACK[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib + --without-]]PACK[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && test ! -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi +]) + dnl Search the library and its dependencies in $additional_libdir and + dnl $LDFLAGS. Using breadth-first-seach. + LIB[]NAME= + LTLIB[]NAME= + INC[]NAME= + LIB[]NAME[]_PREFIX= + dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been + dnl computed. So it has to be reset here. + HAVE_LIB[]NAME= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='$1 $2' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + dnl See if it was already located by an earlier AC_LIB_LINKFLAGS + dnl or AC_LIB_HAVE_LINKFLAGS call. + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" + else + dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined + dnl that this library doesn't exist. So just drop it. + : + fi + else + dnl Search the library lib$name in $additional_libdir and $LDFLAGS + dnl and the already constructed $LIBNAME/$LTLIBNAME. + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + dnl The same code as in the loop below: + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + dnl Found the library. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + dnl Linking with a shared library. We attempt to hardcode its + dnl directory into the executable's runpath, unless it's the + dnl standard /usr/lib. + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + dnl No hardcoding is needed. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + dnl The hardcoding into $LIBNAME is system dependent. + if test "$acl_hardcode_direct" = yes; then + dnl Using DIR/libNAME.so during linking hardcodes DIR into the + dnl resulting binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + dnl Rely on "-L$found_dir". + dnl But don't add it if it's already contained in the LDFLAGS + dnl or the already constructed $LIBNAME + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH + dnl here, because this doesn't fit in flags passed to the + dnl compiler. So give up. No hardcoding. This affects only + dnl very old systems. + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + dnl Linking with a static library. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" + else + dnl We shouldn't come here, but anyway it's good to have a + dnl fallback. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" + fi + fi + dnl Assume the include files are nearby. + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + dnl Potentially add $additional_includedir to $INCNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's /usr/local/include and we are using GCC on Linux, + dnl 3. if it's already present in $CPPFLAGS or the already + dnl constructed $INCNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INC[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $INCNAME. + INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + dnl Look for dependencies. + if test -n "$found_la"; then + dnl Read the .la file. It defines the variables + dnl dlname, library_names, old_library, dependency_libs, current, + dnl age, revision, installed, dlopen, dlpreopen, libdir. + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + dnl We use only dependency_libs. + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's /usr/local/lib and we are using GCC on Linux, + dnl 3. if it's already present in $LDFLAGS or the already + dnl constructed $LIBNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + dnl Handle this in the next round. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + dnl Handle this in the next round. Throw away the .la's + dnl directory; it is already contained in a preceding -L + dnl option. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + dnl Most likely an immediate library name. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" + ;; + esac + done + fi + else + dnl Didn't find the library; assume it is in the system directories + dnl known to the linker and runtime loader. (All the system + dnl directories known to the linker should also be known to the + dnl runtime loader, otherwise the system is severely misconfigured.) + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user must + dnl pass all path elements in one option. We can arrange that for a + dnl single library, but not when more than one $LIBNAMEs are used. + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + else + dnl The -rpath options are cumulative. + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + dnl When using libtool, the option that works for both libraries and + dnl executables is -R. The -R options are cumulative. + for found_dir in $ltrpathdirs; do + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" + done + fi + popdef([PACKLIBS]) + popdef([PACKUP]) + popdef([PACK]) + popdef([NAME]) +]) + +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, +dnl unless already present in VAR. +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes +dnl contains two or three consecutive elements that belong together. +AC_DEFUN([AC_LIB_APPENDTOVAR], +[ + for element in [$2]; do + haveit= + for x in $[$1]; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + [$1]="${[$1]}${[$1]:+ }$element" + fi + done +]) + +dnl For those cases where a variable contains several -L and -l options +dnl referring to unknown libraries and directories, this macro determines the +dnl necessary additional linker options for the runtime path. +dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) +dnl sets LDADDVAR to linker options needed together with LIBSVALUE. +dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, +dnl otherwise linking without libtool is assumed. +AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], +[ + AC_REQUIRE([AC_LIB_RPATH]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + $1= + if test "$enable_rpath" != no; then + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode directories into the resulting + dnl binary. + rpathdirs= + next= + for opt in $2; do + if test -n "$next"; then + dir="$next" + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2"; then + rpathdirs="$rpathdirs $dir" + fi + next= + else + case $opt in + -L) next=yes ;; + -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2"; then + rpathdirs="$rpathdirs $dir" + fi + next= ;; + *) next= ;; + esac + fi + done + if test "X$rpathdirs" != "X"; then + if test -n ""$3""; then + dnl libtool is used for linking. Use -R options. + for dir in $rpathdirs; do + $1="${$1}${$1:+ }-R$dir" + done + else + dnl The linker is used for linking directly. + if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user + dnl must pass all path elements in one option. + alldirs= + for dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="$flag" + else + dnl The -rpath options are cumulative. + for dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="${$1}${$1:+ }$flag" + done + fi + fi + fi + fi + fi + AC_SUBST([$1]) +]) diff --git a/devspec.en_US/project/recutils/m4/lib-prefix.m4 b/devspec.en_US/project/recutils/m4/lib-prefix.m4 new file mode 100755 index 0000000..8adb17b --- /dev/null +++ b/devspec.en_US/project/recutils/m4/lib-prefix.m4 @@ -0,0 +1,249 @@ +# lib-prefix.m4 serial 14 +dnl Copyright (C) 2001-2005, 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], +[ + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_ARG_WITH([lib-prefix], +[[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib + --without-lib-prefix don't search for libraries in includedir and libdir]], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi +]) + if test $use_additional = yes; then + dnl Potentially add $additional_includedir to $CPPFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's already present in $CPPFLAGS, + dnl 3. if it's /usr/local/include and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + for x in $CPPFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $CPPFLAGS. + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" + fi + fi + fi + fi + dnl Potentially add $additional_libdir to $LDFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LDFLAGS. + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" + fi + fi + fi + fi + fi +]) + +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], +[ + dnl Unfortunately, prefix and exec_prefix get only finally determined + dnl at the end of configure. + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + $1 + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_PREPARE_MULTILIB creates +dnl - a variable acl_libdirstem, containing the basename of the libdir, either +dnl "lib" or "lib64" or "lib/64", +dnl - a variable acl_libdirstem2, as a secondary possible value for +dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or +dnl "lib/amd64". +AC_DEFUN([AC_LIB_PREPARE_MULTILIB], +[ + dnl There is no formal standard regarding lib and lib64. + dnl On glibc systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine + dnl the compiler's default mode by looking at the compiler's library search + dnl path. If at least one of its elements ends in /lib64 or points to a + dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. + dnl Otherwise we use the default, namely "lib". + dnl On Solaris systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or + dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_HOST_CPU_C_ABI_32BIT]) + + case "$host_os" in + solaris*) + AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], + [AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#ifdef _LP64 + int ok; + #else + error fail + #endif + ]])], + [gl_cv_solaris_64bit=yes], + [gl_cv_solaris_64bit=no]) + ]);; + esac + + dnl Allow the user to override the result by setting acl_cv_libdirstems. + AC_CACHE_CHECK([for the common suffixes of directories in the library search path], + [acl_cv_libdirstems], + [acl_libdirstem=lib + acl_libdirstem2= + case "$host_os" in + solaris*) + dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment + dnl <https://docs.oracle.com/cd/E19253-01/816-5138/dev-env/index.html>. + dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." + dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the + dnl symlink is missing, so we set acl_libdirstem2 too. + if test $gl_cv_solaris_64bit = yes; then + acl_libdirstem=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem2=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + esac + fi + ;; + *) + dnl If $CC generates code for a 32-bit ABI, the libraries are + dnl surely under $prefix/lib, not $prefix/lib64. + if test "$HOST_CPU_C_ABI_32BIT" != yes; then + dnl The result is a property of the system. However, non-system + dnl compilers sometimes have odd library search paths. Therefore + dnl prefer asking /usr/bin/gcc, if available, rather than $CC. + searchpath=`(if test -f /usr/bin/gcc \ + && LC_ALL=C /usr/bin/gcc -print-search-dirs >/dev/null 2>/dev/null; then \ + LC_ALL=C /usr/bin/gcc -print-search-dirs; \ + else \ + LC_ALL=C $CC -print-search-dirs; \ + fi) 2>/dev/null \ + | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" + acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2" + ]) + # Decompose acl_cv_libdirstems into acl_libdirstem and acl_libdirstem2. + acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` + acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e '/,/s/.*,//'` +]) diff --git a/devspec.en_US/project/recutils/m4/libtool.m4 b/devspec.en_US/project/recutils/m4/libtool.m4 new file mode 100755 index 0000000..ee80844 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/libtool.m4 @@ -0,0 +1,8387 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +]) + +# serial 58 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_PREPARE_CC_BASENAME +# ----------------------- +m4_defun([_LT_PREPARE_CC_BASENAME], [ +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in @S|@*""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} +])# _LT_PREPARE_CC_BASENAME + + +# _LT_CC_BASENAME(CC) +# ------------------- +# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, +# but that macro is also expanded into generated libtool script, which +# arranges for $SED and $ECHO to be set by different means. +m4_defun([_LT_CC_BASENAME], +[m4_require([_LT_PREPARE_CC_BASENAME])dnl +AC_REQUIRE([_LT_DECL_SED])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl +func_cc_basename $1 +cc_basename=$func_cc_basename_result +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl +m4_require([_LT_CMD_TRUNCATE])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from 'configure', and 'config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# 'config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain=$ac_aux_dir/ltmain.sh +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the 'libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to 'config.status' so that its +# declaration there will have the same value as in 'configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags='_LT_TAGS'dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into 'config.status', and then the shell code to quote escape them in +# for loops in 'config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# '#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test 0 = "$lt_write_fail" && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +'$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to <bug-libtool@gnu.org>." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test 0 != $[#] +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try '$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try '$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test yes = "$silent" && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +_LT_COPYING +_LT_LIBTOOL_TAGS + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +_LT_PREPARE_MUNGE_PATH_LIST +_LT_PREPARE_CC_BASENAME + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS=$save_LDFLAGS + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[[012]][[,.]]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test yes = "$lt_cv_ld_force_load"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + m4_if([$1], [CXX], +[ if test yes != "$lt_cv_apple_cc_single_mod"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script that will find a shell with a builtin +# printf (that we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case $ECHO in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], + [Search for dependent libraries within DIR (or the compiler's sysroot + if not specified).])], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([$with_sysroot]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and where our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test yes = "[$]$2"; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS +]) + +if test yes = "[$]$2"; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n "$lt_cv_sys_max_cmd_len"; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes = "$cross_compiling"; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include <dlfcn.h> +#endif + +#include <stdio.h> + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen=shl_load], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen=dlopen], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links=nottested +if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test no = "$hard_links"; then + AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", + [Define to the sub-directory where libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then + + # We can hardcode non-existent directories. + if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && + test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || + test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_PREPARE_MUNGE_PATH_LIST +# --------------------------- +# Make sure func_munge_path_list() is defined correctly. +m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], +[[# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x@S|@2 in + x) + ;; + *:) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" + ;; + x:*) + eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" + ;; + *) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + esac +} +]])# _LT_PREPARE_PATH_LIST + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +AC_ARG_VAR([LT_SYS_LIBRARY_PATH], +[User-defined run-time library search path.]) + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib<name>.so + # instead of lib<name>.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a[(]lib.so.V[)]' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], + [Detected run-time system search path for libraries]) +_LT_DECL([], [configure_time_lt_sys_library_path], [2], + [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program that can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$1"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac]) +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program that can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test no = "$withval" || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in + *GNU* | *'with BFD'*) + test no != "$with_gnu_ld" && break + ;; + *) + test yes != "$with_gnu_ld" && break + ;; + esac + fi + done + IFS=$lt_save_ifs +else + lt_cv_path_LD=$LD # Let the user override the test with a path. +fi]) +LD=$lt_cv_path_LD +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +_LT_PATH_LD_GNU +AC_SUBST([LD]) + +_LT_TAGDECL([], [LD], [1], [The linker used to build libraries]) +])# LT_PATH_LD + +# Old names: +AU_ALIAS([AM_PROG_LD], [LT_PATH_LD]) +AU_ALIAS([AC_PROG_LD], [LT_PATH_LD]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_LD], []) +dnl AC_DEFUN([AC_PROG_LD], []) + + +# _LT_PATH_LD_GNU +#- -------------- +m4_defun([_LT_PATH_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 </dev/null` in +*GNU* | *'with BFD'*) + lt_cv_prog_gnu_ld=yes + ;; +*) + lt_cv_prog_gnu_ld=no + ;; +esac]) +with_gnu_ld=$lt_cv_prog_gnu_ld +])# _LT_PATH_LD_GNU + + +# _LT_CMD_RELOAD +# -------------- +# find reload flag for linker +# -- PORTME Some linkers may need a different reload flag. +m4_defun([_LT_CMD_RELOAD], +[AC_CACHE_CHECK([for $LD option to reload object files], + lt_cv_ld_reload_flag, + [lt_cv_ld_reload_flag='-r']) +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac +_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl +_LT_TAGDECL([], [reload_cmds], [2])dnl +])# _LT_CMD_RELOAD + + +# _LT_PATH_DD +# ----------- +# find a working dd +m4_defun([_LT_PATH_DD], +[AC_CACHE_CHECK([for a working dd], [ac_cv_path_lt_DD], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], +[if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi]) +rm -f conftest.i conftest2.i conftest.out]) +])# _LT_PATH_DD + + +# _LT_CMD_TRUNCATE +# ---------------- +# find command to truncate a binary pipe +m4_defun([_LT_CMD_TRUNCATE], +[m4_require([_LT_PATH_DD]) +AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) +_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], + [Command to truncate a binary pipe]) +])# _LT_CMD_TRUNCATE + + +# _LT_CHECK_MAGIC_METHOD +# ---------------------- +# how to check for library dependencies +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_MAGIC_METHOD], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +AC_CACHE_CHECK([how to recognize dependent libraries], +lt_cv_deplibs_check_method, +[lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[[4-9]]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[[45]]*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi]) +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# _LT_DLL_DEF_P([FILE]) +# --------------------- +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with func_dll_def_p in the libtool script +AC_DEFUN([_LT_DLL_DEF_P], +[dnl + test DEF = "`$SED -n dnl + -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace + -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments + -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl + -e q dnl Only consider the first "real" line + $1`" dnl +])# _LT_DLL_DEF_P + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM=-lm) + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], + [Transform the output of nm into a list of symbols to manually relocate]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([nm_interface], [lt_cv_nm_interface], [1], + [The name lister interface]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test yes = "$GCC"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach <jrb3@best.com> says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS=$save_LDFLAGS]) + if test yes = "$lt_cv_irix_exported_symbol"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + _LT_TAGVAR(link_all_deplibs, $1)=no + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(ld_shlibs, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + osf3*) + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting $shlibpath_var if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC=$CC +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report what library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC=$lt_save_CC +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GXX"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach <jrb3@best.com> says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + + _LT_TAGVAR(GCC, $1)=$GXX + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case @S|@2 in + .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; + *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)=$prev$p + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test no = "$pre_test_object_deps_done"; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)=$p + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)=$p + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test no = "$F77"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_F77"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$G77 + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_F77" + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test no = "$FC"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_FC"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_FC" + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code=$lt_simple_compile_test_code + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f "$lt_ac_sed" && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test 10 -lt "$lt_ac_count" && break + lt_ac_count=`expr $lt_ac_count + 1` + if test "$lt_ac_count" -gt "$lt_ac_max"; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine what file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/devspec.en_US/project/recutils/m4/limits-h.m4 b/devspec.en_US/project/recutils/m4/limits-h.m4 new file mode 100755 index 0000000..68f724c --- /dev/null +++ b/devspec.en_US/project/recutils/m4/limits-h.m4 @@ -0,0 +1,43 @@ +dnl Check whether limits.h has needed features. + +dnl Copyright 2016-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +AC_DEFUN_ONCE([gl_LIMITS_H], +[ + gl_CHECK_NEXT_HEADERS([limits.h]) + + AC_CACHE_CHECK([whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc.], + [gl_cv_header_limits_width], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ + #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 + #endif + #include <limits.h> + long long llm = LLONG_MAX; + int wb = WORD_BIT; + int ullw = ULLONG_WIDTH; + ]])], + [gl_cv_header_limits_width=yes], + [gl_cv_header_limits_width=no])]) + if test "$gl_cv_header_limits_width" = yes; then + LIMITS_H= + else + LIMITS_H=limits.h + fi + AC_SUBST([LIMITS_H]) + AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) +]) + +dnl Unconditionally enables the replacement of <limits.h>. +AC_DEFUN([gl_REPLACE_LIMITS_H], +[ + AC_REQUIRE([gl_LIMITS_H]) + LIMITS_H='limits.h' + AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"]) +]) diff --git a/devspec.en_US/project/recutils/m4/localcharset.m4 b/devspec.en_US/project/recutils/m4/localcharset.m4 new file mode 100755 index 0000000..2a7f82d --- /dev/null +++ b/devspec.en_US/project/recutils/m4/localcharset.m4 @@ -0,0 +1,11 @@ +# localcharset.m4 serial 8 +dnl Copyright (C) 2002, 2004, 2006, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_LOCALCHARSET], +[ + dnl Prerequisites of lib/localcharset.c. + AC_REQUIRE([AM_LANGINFO_CODESET]) +]) diff --git a/devspec.en_US/project/recutils/m4/locale-fr.m4 b/devspec.en_US/project/recutils/m4/locale-fr.m4 new file mode 100755 index 0000000..cfa068d --- /dev/null +++ b/devspec.en_US/project/recutils/m4/locale-fr.m4 @@ -0,0 +1,257 @@ +# locale-fr.m4 serial 19 +dnl Copyright (C) 2003, 2005-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl Determine the name of a french locale with traditional encoding. +AC_DEFUN([gt_LOCALE_FR], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AM_LANGINFO_CODESET]) + AC_CACHE_CHECK([for a traditional french locale], [gt_cv_locale_fr], [ + AC_LANG_CONFTEST([AC_LANG_SOURCE([ +changequote(,)dnl +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if defined __BEOS__ || defined __HAIKU__ + return 1; +#else + /* Check whether the given locale name is recognized by the system. */ +# if defined _WIN32 && !defined __CYGWIN__ + /* On native Windows, setlocale(category, "") looks at the system settings, + not at the environment variables. Also, when an encoding suffix such + as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE + category of the locale to "C". */ + if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL + || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + return 1; +# else + if (setlocale (LC_ALL, "") == NULL) return 1; +# endif + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. + On MirBSD 10, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "UTF-8". */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 + || strcmp (cs, "UTF-8") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; +# if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; +# endif + return 0; +#endif +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + case "$host_os" in + # Handle native Windows specially, because there setlocale() interprets + # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", + # "fr" or "fra" as "French" or "French_France.1252", + # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", + # "ja" as "Japanese" or "Japanese_Japan.932", + # and similar. + mingw*) + # Test for the native Windows locale name. + if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=French_France.1252 + else + # None found. + gt_cv_locale_fr=none + fi + ;; + *) + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + ;; + esac + fi + rm -fr conftest* + ]) + LOCALE_FR=$gt_cv_locale_fr + AC_SUBST([LOCALE_FR]) +]) + +dnl Determine the name of a french locale with UTF-8 encoding. +AC_DEFUN([gt_LOCALE_FR_UTF8], +[ + AC_REQUIRE([AM_LANGINFO_CODESET]) + AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [ + AC_LANG_CONFTEST([AC_LANG_SOURCE([ +changequote(,)dnl +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ +# if defined _WIN32 && !defined __CYGWIN__ + /* On native Windows, setlocale(category, "") looks at the system settings, + not at the environment variables. Also, when an encoding suffix such + as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE + category of the locale to "C". */ + if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL + || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + return 1; +# else + if (setlocale (LC_ALL, "") == NULL) return 1; +# endif + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif +#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; +#endif + return 0; +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + case "$host_os" in + # Handle native Windows specially, because there setlocale() interprets + # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", + # "fr" or "fra" as "French" or "French_France.1252", + # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", + # "ja" as "Japanese" or "Japanese_Japan.932", + # and similar. + mingw*) + # Test for the hypothetical native Windows locale name. + if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=French_France.65001 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + ;; + *) + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + ;; + esac + fi + rm -fr conftest* + ]) + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + AC_SUBST([LOCALE_FR_UTF8]) +]) diff --git a/devspec.en_US/project/recutils/m4/locale-ja.m4 b/devspec.en_US/project/recutils/m4/locale-ja.m4 new file mode 100755 index 0000000..487f68b --- /dev/null +++ b/devspec.en_US/project/recutils/m4/locale-ja.m4 @@ -0,0 +1,145 @@ +# locale-ja.m4 serial 14 +dnl Copyright (C) 2003, 2005-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl Determine the name of a japanese locale with EUC-JP encoding. +AC_DEFUN([gt_LOCALE_JA], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AM_LANGINFO_CODESET]) + AC_CACHE_CHECK([for a traditional japanese locale], [gt_cv_locale_ja], [ + AC_LANG_CONFTEST([AC_LANG_SOURCE([ +changequote(,)dnl +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () +{ + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if defined __BEOS__ || defined __HAIKU__ + return 1; +#else + /* Check whether the given locale name is recognized by the system. */ +# if defined _WIN32 && !defined __CYGWIN__ + /* On native Windows, setlocale(category, "") looks at the system settings, + not at the environment variables. Also, when an encoding suffix such + as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE + category of the locale to "C". */ + if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL + || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + return 1; +# else + if (setlocale (LC_ALL, "") == NULL) return 1; +# endif + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. + On MirBSD 10, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "UTF-8". */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 + || strcmp (cs, "UTF-8") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales + on Cygwin 1.5.x. */ + if (MB_CUR_MAX == 1) + return 1; + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding (except on MirBSD). */ + { + const char *p; + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + } + return 0; +#endif +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + case "$host_os" in + # Handle native Windows specially, because there setlocale() interprets + # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", + # "fr" or "fra" as "French" or "French_France.1252", + # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", + # "ja" as "Japanese" or "Japanese_Japan.932", + # and similar. + mingw*) + # Note that on native Windows, the Japanese locale is + # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we + # cannot use it here. + gt_cv_locale_ja=none + ;; + *) + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the AIX locale name. + if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC-JP + else + # Test for the HP-UX, OSF/1, NetBSD locale name. + if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.eucJP + else + # Test for the IRIX, FreeBSD locale name. + if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC + else + # Test for the Solaris 7 locale name. + if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja + else + # Special test for NetBSD 1.6. + if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then + gt_cv_locale_ja=ja_JP.eucJP + else + # None found. + gt_cv_locale_ja=none + fi + fi + fi + fi + fi + fi + ;; + esac + fi + rm -fr conftest* + ]) + LOCALE_JA=$gt_cv_locale_ja + AC_SUBST([LOCALE_JA]) +]) diff --git a/devspec.en_US/project/recutils/m4/locale-zh.m4 b/devspec.en_US/project/recutils/m4/locale-zh.m4 new file mode 100755 index 0000000..8b81326 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/locale-zh.m4 @@ -0,0 +1,139 @@ +# locale-zh.m4 serial 14 +dnl Copyright (C) 2003, 2005-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl Determine the name of a chinese locale with GB18030 encoding. +AC_DEFUN([gt_LOCALE_ZH_CN], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AM_LANGINFO_CODESET]) + AC_CACHE_CHECK([for a transitional chinese locale], [gt_cv_locale_zh_CN], [ + AC_LANG_CONFTEST([AC_LANG_SOURCE([ +changequote(,)dnl +#include <locale.h> +#include <stdlib.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () +{ + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if defined __BEOS__ || defined __HAIKU__ + return 1; +#else + /* Check whether the given locale name is recognized by the system. */ +# if defined _WIN32 && !defined __CYGWIN__ + /* On native Windows, setlocale(category, "") looks at the system settings, + not at the environment variables. Also, when an encoding suffix such + as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE + category of the locale to "C". */ + if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL + || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) + return 1; +# else + if (setlocale (LC_ALL, "") == NULL) return 1; +# endif + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. + On MirBSD 10, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "UTF-8". */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 + || strcmp (cs, "UTF-8") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding (except on MirBSD). */ + { + const char *p; + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + } + /* Check whether a typical GB18030 multibyte sequence is recognized as a + single wide character. This excludes the GB2312 and GBK encodings. */ + if (mblen ("\203\062\332\066", 5) != 4) + return 1; + return 0; +#endif +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + case "$host_os" in + # Handle native Windows specially, because there setlocale() interprets + # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", + # "fr" or "fra" as "French" or "French_France.1252", + # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", + # "ja" as "Japanese" or "Japanese_Japan.932", + # and similar. + mingw*) + # Test for the hypothetical native Windows locale name. + if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=Chinese_China.54936 + else + # None found. + gt_cv_locale_zh_CN=none + fi + ;; + solaris2.8) + # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are + # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. + # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. + gt_cv_locale_zh_CN=none + ;; + *) + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the locale name without encoding suffix. + if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN.GB18030 + else + # None found. + gt_cv_locale_zh_CN=none + fi + fi + ;; + esac + else + # If there was a link error, due to mblen(), the system is so old that + # it certainly doesn't have a chinese locale. + gt_cv_locale_zh_CN=none + fi + rm -fr conftest* + ]) + LOCALE_ZH_CN=$gt_cv_locale_zh_CN + AC_SUBST([LOCALE_ZH_CN]) +]) diff --git a/devspec.en_US/project/recutils/m4/locale_h.m4 b/devspec.en_US/project/recutils/m4/locale_h.m4 new file mode 100755 index 0000000..d28ba0c --- /dev/null +++ b/devspec.en_US/project/recutils/m4/locale_h.m4 @@ -0,0 +1,127 @@ +# locale_h.m4 serial 21 +dnl Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_LOCALE_H], +[ + dnl Use AC_REQUIRE here, so that the default behavior below is expanded + dnl once only, before all statements that occur in other macros. + AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) + + dnl Persuade glibc <locale.h> to define locale_t and the int_p_*, int_n_* + dnl members of 'struct lconv'. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + dnl If <stddef.h> is replaced, then <locale.h> must also be replaced. + AC_REQUIRE([gl_STDDEF_H]) + + dnl Solaris 11.0 defines the int_p_*, int_n_* members of 'struct lconv' + dnl only if _LCONV_C99 is defined. + AC_REQUIRE([AC_CANONICAL_HOST]) + case "$host_os" in + solaris*) + AC_DEFINE([_LCONV_C99], [1], [Define to 1 on Solaris.]) + ;; + esac + + AC_CACHE_CHECK([whether locale.h conforms to POSIX:2001], + [gl_cv_header_locale_h_posix2001], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <locale.h> + int x = LC_MESSAGES; + int y = sizeof (((struct lconv *) 0)->decimal_point);]], + [[]])], + [gl_cv_header_locale_h_posix2001=yes], + [gl_cv_header_locale_h_posix2001=no])]) + + dnl Check for <xlocale.h>. + AC_CHECK_HEADERS_ONCE([xlocale.h]) + if test $ac_cv_header_xlocale_h = yes; then + HAVE_XLOCALE_H=1 + dnl Check whether use of locale_t requires inclusion of <xlocale.h>, + dnl e.g. on Mac OS X 10.5. If <locale.h> does not define locale_t by + dnl itself, we assume that <xlocale.h> will do so. + AC_CACHE_CHECK([whether locale.h defines locale_t], + [gl_cv_header_locale_has_locale_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <locale.h> + locale_t x;]], + [[]])], + [gl_cv_header_locale_has_locale_t=yes], + [gl_cv_header_locale_has_locale_t=no]) + ]) + if test $gl_cv_header_locale_has_locale_t = yes; then + gl_cv_header_locale_h_needs_xlocale_h=no + else + gl_cv_header_locale_h_needs_xlocale_h=yes + fi + else + HAVE_XLOCALE_H=0 + gl_cv_header_locale_h_needs_xlocale_h=no + fi + AC_SUBST([HAVE_XLOCALE_H]) + + dnl Check whether 'struct lconv' is complete. + dnl Bionic libc's 'struct lconv' is just a dummy. + dnl On OpenBSD 4.9, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, + dnl mingw, MSVC 9, it lacks the int_p_* and int_n_* members. + AC_CACHE_CHECK([whether struct lconv is properly defined], + [gl_cv_sys_struct_lconv_ok], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <locale.h> + struct lconv l; + int x = sizeof (l.decimal_point); + int y = sizeof (l.int_p_cs_precedes);]], + [[]])], + [gl_cv_sys_struct_lconv_ok=yes], + [gl_cv_sys_struct_lconv_ok=no]) + ]) + if test $gl_cv_sys_struct_lconv_ok = no; then + REPLACE_STRUCT_LCONV=1 + fi + + dnl <locale.h> is always overridden, because of GNULIB_POSIXCHECK. + gl_NEXT_HEADERS([locale.h]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[#include <locale.h> +/* Some systems provide declarations in a non-standard header. */ +#if HAVE_XLOCALE_H +# include <xlocale.h> +#endif + ]], + [setlocale newlocale duplocale freelocale]) +]) + +AC_DEFUN([gl_LOCALE_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_LOCALE_H_DEFAULTS], +[ + GNULIB_LOCALECONV=0; AC_SUBST([GNULIB_LOCALECONV]) + GNULIB_SETLOCALE=0; AC_SUBST([GNULIB_SETLOCALE]) + GNULIB_DUPLOCALE=0; AC_SUBST([GNULIB_DUPLOCALE]) + GNULIB_LOCALENAME=0; AC_SUBST([GNULIB_LOCALENAME]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_NEWLOCALE=1; AC_SUBST([HAVE_NEWLOCALE]) + HAVE_DUPLOCALE=1; AC_SUBST([HAVE_DUPLOCALE]) + HAVE_FREELOCALE=1; AC_SUBST([HAVE_FREELOCALE]) + REPLACE_LOCALECONV=0; AC_SUBST([REPLACE_LOCALECONV]) + REPLACE_SETLOCALE=0; AC_SUBST([REPLACE_SETLOCALE]) + REPLACE_NEWLOCALE=0; AC_SUBST([REPLACE_NEWLOCALE]) + REPLACE_DUPLOCALE=0; AC_SUBST([REPLACE_DUPLOCALE]) + REPLACE_FREELOCALE=0; AC_SUBST([REPLACE_FREELOCALE]) + REPLACE_STRUCT_LCONV=0; AC_SUBST([REPLACE_STRUCT_LCONV]) +]) diff --git a/devspec.en_US/project/recutils/m4/localeconv.m4 b/devspec.en_US/project/recutils/m4/localeconv.m4 new file mode 100755 index 0000000..9bb78f0 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/localeconv.m4 @@ -0,0 +1,22 @@ +# localeconv.m4 serial 1 +dnl Copyright (C) 2012-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_LOCALECONV], +[ + AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) + AC_REQUIRE([gl_LOCALE_H]) + + if test $REPLACE_STRUCT_LCONV = 1; then + REPLACE_LOCALECONV=1 + fi +]) + +# Prerequisites of lib/localeconv.c. +AC_DEFUN([gl_PREREQ_LOCALECONV], +[ + AC_CHECK_MEMBERS([struct lconv.decimal_point], [], [], + [[#include <locale.h>]]) +]) diff --git a/devspec.en_US/project/recutils/m4/localtime-buffer.m4 b/devspec.en_US/project/recutils/m4/localtime-buffer.m4 new file mode 100755 index 0000000..6d99828 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/localtime-buffer.m4 @@ -0,0 +1,21 @@ +# localtime-buffer.m4 serial 1 +dnl Copyright (C) 2017-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_LOCALTIME_BUFFER_DEFAULTS], +[ + NEED_LOCALTIME_BUFFER=0 +]) + +dnl Macro invoked from other modules, to signal that the compilation of +dnl module 'localtime-buffer' is needed. +AC_DEFUN([gl_LOCALTIME_BUFFER_NEEDED], +[ + AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS]) + AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) + NEED_LOCALTIME_BUFFER=1 + REPLACE_GMTIME=1 + REPLACE_LOCALTIME=1 +]) diff --git a/devspec.en_US/project/recutils/m4/lock.m4 b/devspec.en_US/project/recutils/m4/lock.m4 new file mode 100755 index 0000000..93b76fa --- /dev/null +++ b/devspec.en_US/project/recutils/m4/lock.m4 @@ -0,0 +1,47 @@ +# lock.m4 serial 14 +dnl Copyright (C) 2005-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([gl_LOCK], +[ + AC_REQUIRE([gl_THREADLIB]) + if test "$gl_threads_api" = posix; then + # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the + # pthread_rwlock_* functions. + has_rwlock=false + AC_CHECK_TYPE([pthread_rwlock_t], + [has_rwlock=true + AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1], + [Define if the POSIX multithreading library has read/write locks.])], + [], + [#include <pthread.h>]) + if $has_rwlock; then + gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER + fi + # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM( + [[#include <pthread.h>]], + [[ +#if __FreeBSD__ == 4 +error "No, in FreeBSD 4.0 recursive mutexes actually don't work." +#elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ + && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) +error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." +#else +int x = (int)PTHREAD_MUTEX_RECURSIVE; +return !x; +#endif + ]])], + [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1], + [Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE.])]) + fi + gl_PREREQ_LOCK +]) + +# Prerequisites of lib/glthread/lock.c. +AC_DEFUN([gl_PREREQ_LOCK], [:]) diff --git a/devspec.en_US/project/recutils/m4/longlong.m4 b/devspec.en_US/project/recutils/m4/longlong.m4 new file mode 100755 index 0000000..08d0e36 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/longlong.m4 @@ -0,0 +1,113 @@ +# longlong.m4 serial 18 +dnl Copyright (C) 1999-2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +AC_PREREQ([2.62]) + +# Define HAVE_LONG_LONG_INT if 'long long int' works. +# This can be faster than what's in Autoconf 2.62 through 2.68. + +# Note: If the type 'long long int' exists but is only 32 bits large +# (as on some very old compilers), HAVE_LONG_LONG_INT will not be +# defined. In this case you can treat 'long long int' like 'long int'. + +AC_DEFUN([AC_TYPE_LONG_LONG_INT], +[ + AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) + AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], + [ac_cv_type_long_long_int=yes + if test "x${ac_cv_prog_cc_c99-no}" = xno; then + ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int + if test $ac_cv_type_long_long_int = yes; then + dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. + dnl If cross compiling, assume the bug is not important, since + dnl nobody cross compiles for this platform as far as we know. + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[@%:@include <limits.h> + @%:@ifndef LLONG_MAX + @%:@ define HALF \ + (1LL << (sizeof (long long int) * CHAR_BIT - 2)) + @%:@ define LLONG_MAX (HALF - 1 + HALF) + @%:@endif]], + [[long long int n = 1; + int i; + for (i = 0; ; i++) + { + long long int m = n << i; + if (m >> i != n) + return 1; + if (LLONG_MAX / 2 < m) + break; + } + return 0;]])], + [], + [ac_cv_type_long_long_int=no], + [:]) + fi + fi]) + if test $ac_cv_type_long_long_int = yes; then + AC_DEFINE([HAVE_LONG_LONG_INT], [1], + [Define to 1 if the system has the type 'long long int'.]) + fi +]) + +# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. +# This can be faster than what's in Autoconf 2.62 through 2.68. + +# Note: If the type 'unsigned long long int' exists but is only 32 bits +# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT +# will not be defined. In this case you can treat 'unsigned long long int' +# like 'unsigned long int'. + +AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], +[ + AC_CACHE_CHECK([for unsigned long long int], + [ac_cv_type_unsigned_long_long_int], + [ac_cv_type_unsigned_long_long_int=yes + if test "x${ac_cv_prog_cc_c99-no}" = xno; then + AC_LINK_IFELSE( + [_AC_TYPE_LONG_LONG_SNIPPET], + [], + [ac_cv_type_unsigned_long_long_int=no]) + fi]) + if test $ac_cv_type_unsigned_long_long_int = yes; then + AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], + [Define to 1 if the system has the type 'unsigned long long int'.]) + fi +]) + +# Expands to a C program that can be used to test for simultaneous support +# of 'long long' and 'unsigned long long'. We don't want to say that +# 'long long' is available if 'unsigned long long' is not, or vice versa, +# because too many programs rely on the symmetry between signed and unsigned +# integer types (excluding 'bool'). +AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], +[ + AC_LANG_PROGRAM( + [[/* For now, do not test the preprocessor; as of 2007 there are too many + implementations with broken preprocessors. Perhaps this can + be revisited in 2012. In the meantime, code should not expect + #if to work with literals wider than 32 bits. */ + /* Test literals. */ + long long int ll = 9223372036854775807ll; + long long int nll = -9223372036854775807LL; + unsigned long long int ull = 18446744073709551615ULL; + /* Test constant expressions. */ + typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) + ? 1 : -1)]; + typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 + ? 1 : -1)]; + int i = 63;]], + [[/* Test availability of runtime routines for shift and division. */ + long long int llmax = 9223372036854775807ll; + unsigned long long int ullmax = 18446744073709551615ull; + return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) + | (llmax / ll) | (llmax % ll) + | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) + | (ullmax / ull) | (ullmax % ull));]]) +]) diff --git a/devspec.en_US/project/recutils/m4/lseek.m4 b/devspec.en_US/project/recutils/m4/lseek.m4 new file mode 100755 index 0000000..d55ec2a --- /dev/null +++ b/devspec.en_US/project/recutils/m4/lseek.m4 @@ -0,0 +1,71 @@ +# lseek.m4 serial 10 +dnl Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_LSEEK], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_PROG_CC]) + AC_CHECK_HEADERS_ONCE([unistd.h]) + AC_CACHE_CHECK([whether lseek detects pipes], [gl_cv_func_lseek_pipe], + [case "$host_os" in + mingw*) + dnl Native Windows. + dnl The result of lseek (fd, (off_t)0, SEEK_CUR) or + dnl SetFilePointer(handle, 0, NULL, FILE_CURRENT) + dnl for a pipe depends on the environment: In a Cygwin 1.5 + dnl environment it succeeds (wrong); in a Cygwin 1.7 environment + dnl it fails with a wrong errno value. + gl_cv_func_lseek_pipe=no + ;; + *) + if test $cross_compiling = no; then + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include <sys/types.h> /* for off_t */ +#include <stdio.h> /* for SEEK_CUR */ +#if HAVE_UNISTD_H +# include <unistd.h> +#else /* on Windows with MSVC */ +# include <io.h> +#endif +]], [[ + /* Exit with success only if stdin is seekable. */ + return lseek (0, (off_t)0, SEEK_CUR) < 0; +]])], + [if test -s conftest$ac_exeext \ + && ./conftest$ac_exeext < conftest.$ac_ext \ + && test 1 = "`echo hi \ + | { ./conftest$ac_exeext; echo $?; cat >/dev/null; }`"; then + gl_cv_func_lseek_pipe=yes + else + gl_cv_func_lseek_pipe=no + fi + ], + [gl_cv_func_lseek_pipe=no]) + else + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE([[ +#if defined __BEOS__ +/* BeOS mistakenly return 0 when trying to seek on pipes. */ + Choke me. +#endif]])], + [gl_cv_func_lseek_pipe=yes], [gl_cv_func_lseek_pipe=no]) + fi + ;; + esac + ]) + if test $gl_cv_func_lseek_pipe = no; then + REPLACE_LSEEK=1 + AC_DEFINE([LSEEK_PIPE_BROKEN], [1], + [Define to 1 if lseek does not detect pipes.]) + fi + + AC_REQUIRE([gl_SYS_TYPES_H]) + if test $WINDOWS_64_BIT_OFF_T = 1; then + REPLACE_LSEEK=1 + fi +]) diff --git a/devspec.en_US/project/recutils/m4/lstat.m4 b/devspec.en_US/project/recutils/m4/lstat.m4 new file mode 100755 index 0000000..ace1638 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/lstat.m4 @@ -0,0 +1,79 @@ +# serial 32 + +# Copyright (C) 1997-2001, 2003-2019 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl From Jim Meyering. + +AC_DEFUN([gl_FUNC_LSTAT], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) + dnl If lstat does not exist, the replacement <sys/stat.h> does + dnl "#define lstat stat", and lstat.c is a no-op. + AC_CHECK_FUNCS_ONCE([lstat]) + if test $ac_cv_func_lstat = yes; then + AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) + case $host_os,$gl_cv_func_lstat_dereferences_slashed_symlink in + solaris* | *no) + REPLACE_LSTAT=1 + ;; + esac + else + HAVE_LSTAT=0 + fi +]) + +# Prerequisites of lib/lstat.c. +AC_DEFUN([gl_PREREQ_LSTAT], [:]) + +AC_DEFUN([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK], +[ + dnl We don't use AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK any more, because it + dnl is no longer maintained in Autoconf and because it invokes AC_LIBOBJ. + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether lstat correctly handles trailing slash], + [gl_cv_func_lstat_dereferences_slashed_symlink], + [rm -f conftest.sym conftest.file + echo >conftest.file + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [AC_INCLUDES_DEFAULT], + [[struct stat sbuf; + if (symlink ("conftest.file", "conftest.sym") != 0) + return 1; + /* Linux will dereference the symlink and fail, as required by + POSIX. That is better in the sense that it means we will not + have to compile and use the lstat wrapper. */ + return lstat ("conftest.sym/", &sbuf) == 0; + ]])], + [gl_cv_func_lstat_dereferences_slashed_symlink=yes], + [gl_cv_func_lstat_dereferences_slashed_symlink=no], + [case "$host_os" in + linux-* | linux) + # Guess yes on Linux systems. + gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; + *-gnu* | gnu*) + # Guess yes on glibc systems. + gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; + mingw*) + # Guess no on native Windows. + gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;; + *) + # If we don't know, assume the worst. + gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;; + esac + ]) + rm -f conftest.sym conftest.file + ]) + case "$gl_cv_func_lstat_dereferences_slashed_symlink" in + *yes) + AC_DEFINE_UNQUOTED([LSTAT_FOLLOWS_SLASHED_SYMLINK], [1], + [Define to 1 if 'lstat' dereferences a symlink specified + with a trailing slash.]) + ;; + esac +]) diff --git a/devspec.en_US/project/recutils/m4/ltoptions.m4 b/devspec.en_US/project/recutils/m4/ltoptions.m4 new file mode 100755 index 0000000..94b0829 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/ltoptions.m4 @@ -0,0 +1,437 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 8 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option '$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl 'shared' nor 'disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], + [_LT_WITH_AIX_SONAME([aix])]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the 'shared' and +# 'disable-shared' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the 'static' and +# 'disable-static' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the 'fast-install' +# and 'disable-fast-install' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_AIX_SONAME([DEFAULT]) +# ---------------------------------- +# implement the --with-aix-soname flag, and support the `aix-soname=aix' +# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT +# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. +m4_define([_LT_WITH_AIX_SONAME], +[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl +shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[[5-9]]*,yes) + AC_MSG_CHECKING([which variant of shared library versioning to provide]) + AC_ARG_WITH([aix-soname], + [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], + [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], + [case $withval in + aix|svr4|both) + ;; + *) + AC_MSG_ERROR([Unknown argument to --with-aix-soname]) + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname], + [AC_CACHE_VAL([lt_cv_with_aix_soname], + [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) + with_aix_soname=$lt_cv_with_aix_soname]) + AC_MSG_RESULT([$with_aix_soname]) + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + +_LT_DECL([], [shared_archive_member_spec], [0], + [Shared archive member basename, for filename based shared library versioning on AIX])dnl +])# _LT_WITH_AIX_SONAME + +LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the 'pic-only' and 'no-pic' +# LT_INIT options. +# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [pic_mode=m4_default([$1], [default])]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/devspec.en_US/project/recutils/m4/ltsugar.m4 b/devspec.en_US/project/recutils/m4/ltsugar.m4 new file mode 100755 index 0000000..48bc934 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/ltsugar.m4 @@ -0,0 +1,124 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59, which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/devspec.en_US/project/recutils/m4/ltversion.m4 b/devspec.en_US/project/recutils/m4/ltversion.m4 new file mode 100755 index 0000000..fa04b52 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 4179 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4.6]) +m4_define([LT_PACKAGE_REVISION], [2.4.6]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.6' +macro_revision='2.4.6' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/devspec.en_US/project/recutils/m4/lt~obsolete.m4 b/devspec.en_US/project/recutils/m4/lt~obsolete.m4 new file mode 100755 index 0000000..c6b26f8 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/lt~obsolete.m4 @@ -0,0 +1,99 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/devspec.en_US/project/recutils/m4/malloc.m4 b/devspec.en_US/project/recutils/m4/malloc.m4 new file mode 100755 index 0000000..f78a484 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/malloc.m4 @@ -0,0 +1,101 @@ +# malloc.m4 serial 17 +dnl Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +m4_version_prereq([2.70], [] ,[ + +# This is adapted with modifications from upstream Autoconf here: +# https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c +AC_DEFUN([_AC_FUNC_MALLOC_IF], +[ + AC_REQUIRE([AC_HEADER_STDC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles + AC_CHECK_HEADERS([stdlib.h]) + AC_CACHE_CHECK([for GNU libc compatible malloc], + [ac_cv_func_malloc_0_nonnull], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#if defined STDC_HEADERS || defined HAVE_STDLIB_H + # include <stdlib.h> + #else + char *malloc (); + #endif + ]], + [[char *p = malloc (0); + int result = !p; + free (p); + return result;]]) + ], + [ac_cv_func_malloc_0_nonnull=yes], + [ac_cv_func_malloc_0_nonnull=no], + [case "$host_os" in + # Guess yes on platforms where we know the result. + *-gnu* | gnu* | freebsd* | netbsd* | openbsd* \ + | hpux* | solaris* | cygwin* | mingw*) + ac_cv_func_malloc_0_nonnull=yes ;; + # If we don't know, assume the worst. + *) ac_cv_func_malloc_0_nonnull=no ;; + esac + ]) + ]) + AS_IF([test $ac_cv_func_malloc_0_nonnull = yes], [$1], [$2]) +])# _AC_FUNC_MALLOC_IF + +]) + +# gl_FUNC_MALLOC_GNU +# ------------------ +# Test whether 'malloc (0)' is handled like in GNU libc, and replace malloc if +# it is not. +AC_DEFUN([gl_FUNC_MALLOC_GNU], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + dnl _AC_FUNC_MALLOC_IF is defined in Autoconf. + _AC_FUNC_MALLOC_IF( + [AC_DEFINE([HAVE_MALLOC_GNU], [1], + [Define to 1 if your system has a GNU libc compatible 'malloc' + function, and to 0 otherwise.])], + [AC_DEFINE([HAVE_MALLOC_GNU], [0]) + REPLACE_MALLOC=1 + ]) +]) + +# gl_FUNC_MALLOC_POSIX +# -------------------- +# Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it +# fails), and replace malloc if it is not. +AC_DEFUN([gl_FUNC_MALLOC_POSIX], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) + if test $gl_cv_func_malloc_posix = yes; then + AC_DEFINE([HAVE_MALLOC_POSIX], [1], + [Define if the 'malloc' function is POSIX compliant.]) + else + REPLACE_MALLOC=1 + fi +]) + +# Test whether malloc, realloc, calloc are POSIX compliant, +# Set gl_cv_func_malloc_posix to yes or no accordingly. +AC_DEFUN([gl_CHECK_MALLOC_POSIX], +[ + AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant], + [gl_cv_func_malloc_posix], + [ + dnl It is too dangerous to try to allocate a large amount of memory: + dnl some systems go to their knees when you do that. So assume that + dnl all Unix implementations of the function are POSIX compliant. + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[]], + [[#if defined _WIN32 && ! defined __CYGWIN__ + choke me + #endif + ]])], + [gl_cv_func_malloc_posix=yes], + [gl_cv_func_malloc_posix=no]) + ]) +]) diff --git a/devspec.en_US/project/recutils/m4/malloca.m4 b/devspec.en_US/project/recutils/m4/malloca.m4 new file mode 100755 index 0000000..820f40a --- /dev/null +++ b/devspec.en_US/project/recutils/m4/malloca.m4 @@ -0,0 +1,15 @@ +# malloca.m4 serial 1 +dnl Copyright (C) 2003-2004, 2006-2007, 2009-2019 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_MALLOCA], +[ + dnl Use the autoconf tests for alloca(), but not the AC_SUBSTed variables + dnl @ALLOCA@ and @LTALLOCA@. + dnl gl_FUNC_ALLOCA dnl Already brought in by the module dependencies. + AC_REQUIRE([gl_EEMALLOC]) + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) +]) diff --git a/devspec.en_US/project/recutils/m4/math_h.m4 b/devspec.en_US/project/recutils/m4/math_h.m4 new file mode 100755 index 0000000..7e79831 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/math_h.m4 @@ -0,0 +1,366 @@ +# math_h.m4 serial 116 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_MATH_H], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + gl_CHECK_NEXT_HEADERS([math.h]) + + AC_CACHE_CHECK([whether NAN macro works], [gl_cv_header_math_nan_works], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <math.h>]], + [[/* Solaris 10 has a broken definition of NAN. Other platforms + fail to provide NAN, or provide it only in C99 mode; this + test only needs to fail when NAN is provided but wrong. */ + float f = 1.0f; +#ifdef NAN + f = NAN; +#endif + return f == 0;]])], + [gl_cv_header_math_nan_works=yes], + [gl_cv_header_math_nan_works=no])]) + if test $gl_cv_header_math_nan_works = no; then + REPLACE_NAN=1 + fi + AC_CACHE_CHECK([whether HUGE_VAL works], [gl_cv_header_math_huge_val_works], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <math.h>]], + [[/* Solaris 10 has a broken definition of HUGE_VAL. */ + double d = HUGE_VAL; + return d == 0;]])], + [gl_cv_header_math_huge_val_works=yes], + [gl_cv_header_math_huge_val_works=no])]) + if test $gl_cv_header_math_huge_val_works = no; then + REPLACE_HUGE_VAL=1 + fi + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[#include <math.h>]], + [acosf acosl asinf asinl atanf atanl + cbrt cbrtf cbrtl ceilf ceill copysign copysignf copysignl cosf cosl coshf + expf expl exp2 exp2f exp2l expm1 expm1f expm1l + fabsf fabsl floorf floorl fma fmaf fmal + fmod fmodf fmodl frexpf frexpl hypotf hypotl + ilogb ilogbf ilogbl + ldexpf ldexpl + log logf logl log10 log10f log10l log1p log1pf log1pl log2 log2f log2l + logb logbf logbl + modf modff modfl powf + remainder remainderf remainderl + rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl + tanf tanl tanhf trunc truncf truncl]) +]) + +AC_DEFUN([gl_MATH_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_MATH_H_DEFAULTS], +[ + GNULIB_ACOSF=0; AC_SUBST([GNULIB_ACOSF]) + GNULIB_ACOSL=0; AC_SUBST([GNULIB_ACOSL]) + GNULIB_ASINF=0; AC_SUBST([GNULIB_ASINF]) + GNULIB_ASINL=0; AC_SUBST([GNULIB_ASINL]) + GNULIB_ATANF=0; AC_SUBST([GNULIB_ATANF]) + GNULIB_ATANL=0; AC_SUBST([GNULIB_ATANL]) + GNULIB_ATAN2F=0; AC_SUBST([GNULIB_ATAN2F]) + GNULIB_CBRT=0; AC_SUBST([GNULIB_CBRT]) + GNULIB_CBRTF=0; AC_SUBST([GNULIB_CBRTF]) + GNULIB_CBRTL=0; AC_SUBST([GNULIB_CBRTL]) + GNULIB_CEIL=0; AC_SUBST([GNULIB_CEIL]) + GNULIB_CEILF=0; AC_SUBST([GNULIB_CEILF]) + GNULIB_CEILL=0; AC_SUBST([GNULIB_CEILL]) + GNULIB_COPYSIGN=0; AC_SUBST([GNULIB_COPYSIGN]) + GNULIB_COPYSIGNF=0; AC_SUBST([GNULIB_COPYSIGNF]) + GNULIB_COPYSIGNL=0; AC_SUBST([GNULIB_COPYSIGNL]) + GNULIB_COSF=0; AC_SUBST([GNULIB_COSF]) + GNULIB_COSL=0; AC_SUBST([GNULIB_COSL]) + GNULIB_COSHF=0; AC_SUBST([GNULIB_COSHF]) + GNULIB_EXPF=0; AC_SUBST([GNULIB_EXPF]) + GNULIB_EXPL=0; AC_SUBST([GNULIB_EXPL]) + GNULIB_EXP2=0; AC_SUBST([GNULIB_EXP2]) + GNULIB_EXP2F=0; AC_SUBST([GNULIB_EXP2F]) + GNULIB_EXP2L=0; AC_SUBST([GNULIB_EXP2L]) + GNULIB_EXPM1=0; AC_SUBST([GNULIB_EXPM1]) + GNULIB_EXPM1F=0; AC_SUBST([GNULIB_EXPM1F]) + GNULIB_EXPM1L=0; AC_SUBST([GNULIB_EXPM1L]) + GNULIB_FABSF=0; AC_SUBST([GNULIB_FABSF]) + GNULIB_FABSL=0; AC_SUBST([GNULIB_FABSL]) + GNULIB_FLOOR=0; AC_SUBST([GNULIB_FLOOR]) + GNULIB_FLOORF=0; AC_SUBST([GNULIB_FLOORF]) + GNULIB_FLOORL=0; AC_SUBST([GNULIB_FLOORL]) + GNULIB_FMA=0; AC_SUBST([GNULIB_FMA]) + GNULIB_FMAF=0; AC_SUBST([GNULIB_FMAF]) + GNULIB_FMAL=0; AC_SUBST([GNULIB_FMAL]) + GNULIB_FMOD=0; AC_SUBST([GNULIB_FMOD]) + GNULIB_FMODF=0; AC_SUBST([GNULIB_FMODF]) + GNULIB_FMODL=0; AC_SUBST([GNULIB_FMODL]) + GNULIB_FREXPF=0; AC_SUBST([GNULIB_FREXPF]) + GNULIB_FREXP=0; AC_SUBST([GNULIB_FREXP]) + GNULIB_FREXPL=0; AC_SUBST([GNULIB_FREXPL]) + GNULIB_HYPOT=0; AC_SUBST([GNULIB_HYPOT]) + GNULIB_HYPOTF=0; AC_SUBST([GNULIB_HYPOTF]) + GNULIB_HYPOTL=0; AC_SUBST([GNULIB_HYPOTL]) + GNULIB_ILOGB=0; AC_SUBST([GNULIB_ILOGB]) + GNULIB_ILOGBF=0; AC_SUBST([GNULIB_ILOGBF]) + GNULIB_ILOGBL=0; AC_SUBST([GNULIB_ILOGBL]) + GNULIB_ISFINITE=0; AC_SUBST([GNULIB_ISFINITE]) + GNULIB_ISINF=0; AC_SUBST([GNULIB_ISINF]) + GNULIB_ISNAN=0; AC_SUBST([GNULIB_ISNAN]) + GNULIB_ISNANF=0; AC_SUBST([GNULIB_ISNANF]) + GNULIB_ISNAND=0; AC_SUBST([GNULIB_ISNAND]) + GNULIB_ISNANL=0; AC_SUBST([GNULIB_ISNANL]) + GNULIB_LDEXPF=0; AC_SUBST([GNULIB_LDEXPF]) + GNULIB_LDEXPL=0; AC_SUBST([GNULIB_LDEXPL]) + GNULIB_LOG=0; AC_SUBST([GNULIB_LOG]) + GNULIB_LOGF=0; AC_SUBST([GNULIB_LOGF]) + GNULIB_LOGL=0; AC_SUBST([GNULIB_LOGL]) + GNULIB_LOG10=0; AC_SUBST([GNULIB_LOG10]) + GNULIB_LOG10F=0; AC_SUBST([GNULIB_LOG10F]) + GNULIB_LOG10L=0; AC_SUBST([GNULIB_LOG10L]) + GNULIB_LOG1P=0; AC_SUBST([GNULIB_LOG1P]) + GNULIB_LOG1PF=0; AC_SUBST([GNULIB_LOG1PF]) + GNULIB_LOG1PL=0; AC_SUBST([GNULIB_LOG1PL]) + GNULIB_LOG2=0; AC_SUBST([GNULIB_LOG2]) + GNULIB_LOG2F=0; AC_SUBST([GNULIB_LOG2F]) + GNULIB_LOG2L=0; AC_SUBST([GNULIB_LOG2L]) + GNULIB_LOGB=0; AC_SUBST([GNULIB_LOGB]) + GNULIB_LOGBF=0; AC_SUBST([GNULIB_LOGBF]) + GNULIB_LOGBL=0; AC_SUBST([GNULIB_LOGBL]) + GNULIB_MODF=0; AC_SUBST([GNULIB_MODF]) + GNULIB_MODFF=0; AC_SUBST([GNULIB_MODFF]) + GNULIB_MODFL=0; AC_SUBST([GNULIB_MODFL]) + GNULIB_POWF=0; AC_SUBST([GNULIB_POWF]) + GNULIB_REMAINDER=0; AC_SUBST([GNULIB_REMAINDER]) + GNULIB_REMAINDERF=0; AC_SUBST([GNULIB_REMAINDERF]) + GNULIB_REMAINDERL=0; AC_SUBST([GNULIB_REMAINDERL]) + GNULIB_RINT=0; AC_SUBST([GNULIB_RINT]) + GNULIB_RINTF=0; AC_SUBST([GNULIB_RINTF]) + GNULIB_RINTL=0; AC_SUBST([GNULIB_RINTL]) + GNULIB_ROUND=0; AC_SUBST([GNULIB_ROUND]) + GNULIB_ROUNDF=0; AC_SUBST([GNULIB_ROUNDF]) + GNULIB_ROUNDL=0; AC_SUBST([GNULIB_ROUNDL]) + GNULIB_SIGNBIT=0; AC_SUBST([GNULIB_SIGNBIT]) + GNULIB_SINF=0; AC_SUBST([GNULIB_SINF]) + GNULIB_SINL=0; AC_SUBST([GNULIB_SINL]) + GNULIB_SINHF=0; AC_SUBST([GNULIB_SINHF]) + GNULIB_SQRTF=0; AC_SUBST([GNULIB_SQRTF]) + GNULIB_SQRTL=0; AC_SUBST([GNULIB_SQRTL]) + GNULIB_TANF=0; AC_SUBST([GNULIB_TANF]) + GNULIB_TANL=0; AC_SUBST([GNULIB_TANL]) + GNULIB_TANHF=0; AC_SUBST([GNULIB_TANHF]) + GNULIB_TRUNC=0; AC_SUBST([GNULIB_TRUNC]) + GNULIB_TRUNCF=0; AC_SUBST([GNULIB_TRUNCF]) + GNULIB_TRUNCL=0; AC_SUBST([GNULIB_TRUNCL]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_ACOSF=1; AC_SUBST([HAVE_ACOSF]) + HAVE_ACOSL=1; AC_SUBST([HAVE_ACOSL]) + HAVE_ASINF=1; AC_SUBST([HAVE_ASINF]) + HAVE_ASINL=1; AC_SUBST([HAVE_ASINL]) + HAVE_ATANF=1; AC_SUBST([HAVE_ATANF]) + HAVE_ATANL=1; AC_SUBST([HAVE_ATANL]) + HAVE_ATAN2F=1; AC_SUBST([HAVE_ATAN2F]) + HAVE_CBRT=1; AC_SUBST([HAVE_CBRT]) + HAVE_CBRTF=1; AC_SUBST([HAVE_CBRTF]) + HAVE_CBRTL=1; AC_SUBST([HAVE_CBRTL]) + HAVE_COPYSIGN=1; AC_SUBST([HAVE_COPYSIGN]) + HAVE_COPYSIGNL=1; AC_SUBST([HAVE_COPYSIGNL]) + HAVE_COSF=1; AC_SUBST([HAVE_COSF]) + HAVE_COSL=1; AC_SUBST([HAVE_COSL]) + HAVE_COSHF=1; AC_SUBST([HAVE_COSHF]) + HAVE_EXPF=1; AC_SUBST([HAVE_EXPF]) + HAVE_EXPL=1; AC_SUBST([HAVE_EXPL]) + HAVE_EXPM1=1; AC_SUBST([HAVE_EXPM1]) + HAVE_EXPM1F=1; AC_SUBST([HAVE_EXPM1F]) + HAVE_FABSF=1; AC_SUBST([HAVE_FABSF]) + HAVE_FABSL=1; AC_SUBST([HAVE_FABSL]) + HAVE_FMA=1; AC_SUBST([HAVE_FMA]) + HAVE_FMAF=1; AC_SUBST([HAVE_FMAF]) + HAVE_FMAL=1; AC_SUBST([HAVE_FMAL]) + HAVE_FMODF=1; AC_SUBST([HAVE_FMODF]) + HAVE_FMODL=1; AC_SUBST([HAVE_FMODL]) + HAVE_FREXPF=1; AC_SUBST([HAVE_FREXPF]) + HAVE_HYPOTF=1; AC_SUBST([HAVE_HYPOTF]) + HAVE_HYPOTL=1; AC_SUBST([HAVE_HYPOTL]) + HAVE_ILOGB=1; AC_SUBST([HAVE_ILOGB]) + HAVE_ILOGBF=1; AC_SUBST([HAVE_ILOGBF]) + HAVE_ILOGBL=1; AC_SUBST([HAVE_ILOGBL]) + HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF]) + HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND]) + HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL]) + HAVE_LDEXPF=1; AC_SUBST([HAVE_LDEXPF]) + HAVE_LOGF=1; AC_SUBST([HAVE_LOGF]) + HAVE_LOGL=1; AC_SUBST([HAVE_LOGL]) + HAVE_LOG10F=1; AC_SUBST([HAVE_LOG10F]) + HAVE_LOG10L=1; AC_SUBST([HAVE_LOG10L]) + HAVE_LOG1P=1; AC_SUBST([HAVE_LOG1P]) + HAVE_LOG1PF=1; AC_SUBST([HAVE_LOG1PF]) + HAVE_LOG1PL=1; AC_SUBST([HAVE_LOG1PL]) + HAVE_LOGBF=1; AC_SUBST([HAVE_LOGBF]) + HAVE_LOGBL=1; AC_SUBST([HAVE_LOGBL]) + HAVE_MODFF=1; AC_SUBST([HAVE_MODFF]) + HAVE_MODFL=1; AC_SUBST([HAVE_MODFL]) + HAVE_POWF=1; AC_SUBST([HAVE_POWF]) + HAVE_REMAINDER=1; AC_SUBST([HAVE_REMAINDER]) + HAVE_REMAINDERF=1; AC_SUBST([HAVE_REMAINDERF]) + HAVE_RINT=1; AC_SUBST([HAVE_RINT]) + HAVE_RINTL=1; AC_SUBST([HAVE_RINTL]) + HAVE_SINF=1; AC_SUBST([HAVE_SINF]) + HAVE_SINL=1; AC_SUBST([HAVE_SINL]) + HAVE_SINHF=1; AC_SUBST([HAVE_SINHF]) + HAVE_SQRTF=1; AC_SUBST([HAVE_SQRTF]) + HAVE_SQRTL=1; AC_SUBST([HAVE_SQRTL]) + HAVE_TANF=1; AC_SUBST([HAVE_TANF]) + HAVE_TANL=1; AC_SUBST([HAVE_TANL]) + HAVE_TANHF=1; AC_SUBST([HAVE_TANHF]) + HAVE_DECL_ACOSL=1; AC_SUBST([HAVE_DECL_ACOSL]) + HAVE_DECL_ASINL=1; AC_SUBST([HAVE_DECL_ASINL]) + HAVE_DECL_ATANL=1; AC_SUBST([HAVE_DECL_ATANL]) + HAVE_DECL_CBRTF=1; AC_SUBST([HAVE_DECL_CBRTF]) + HAVE_DECL_CBRTL=1; AC_SUBST([HAVE_DECL_CBRTL]) + HAVE_DECL_CEILF=1; AC_SUBST([HAVE_DECL_CEILF]) + HAVE_DECL_CEILL=1; AC_SUBST([HAVE_DECL_CEILL]) + HAVE_DECL_COPYSIGNF=1; AC_SUBST([HAVE_DECL_COPYSIGNF]) + HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL]) + HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL]) + HAVE_DECL_EXP2=1; AC_SUBST([HAVE_DECL_EXP2]) + HAVE_DECL_EXP2F=1; AC_SUBST([HAVE_DECL_EXP2F]) + HAVE_DECL_EXP2L=1; AC_SUBST([HAVE_DECL_EXP2L]) + HAVE_DECL_EXPM1L=1; AC_SUBST([HAVE_DECL_EXPM1L]) + HAVE_DECL_FLOORF=1; AC_SUBST([HAVE_DECL_FLOORF]) + HAVE_DECL_FLOORL=1; AC_SUBST([HAVE_DECL_FLOORL]) + HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL]) + HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL]) + HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL]) + HAVE_DECL_LOG10L=1; AC_SUBST([HAVE_DECL_LOG10L]) + HAVE_DECL_LOG2=1; AC_SUBST([HAVE_DECL_LOG2]) + HAVE_DECL_LOG2F=1; AC_SUBST([HAVE_DECL_LOG2F]) + HAVE_DECL_LOG2L=1; AC_SUBST([HAVE_DECL_LOG2L]) + HAVE_DECL_LOGB=1; AC_SUBST([HAVE_DECL_LOGB]) + HAVE_DECL_REMAINDER=1; AC_SUBST([HAVE_DECL_REMAINDER]) + HAVE_DECL_REMAINDERL=1; AC_SUBST([HAVE_DECL_REMAINDERL]) + HAVE_DECL_RINTF=1; AC_SUBST([HAVE_DECL_RINTF]) + HAVE_DECL_ROUND=1; AC_SUBST([HAVE_DECL_ROUND]) + HAVE_DECL_ROUNDF=1; AC_SUBST([HAVE_DECL_ROUNDF]) + HAVE_DECL_ROUNDL=1; AC_SUBST([HAVE_DECL_ROUNDL]) + HAVE_DECL_SINL=1; AC_SUBST([HAVE_DECL_SINL]) + HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL]) + HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL]) + HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC]) + HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF]) + HAVE_DECL_TRUNCL=1; AC_SUBST([HAVE_DECL_TRUNCL]) + REPLACE_ACOSF=0; AC_SUBST([REPLACE_ACOSF]) + REPLACE_ASINF=0; AC_SUBST([REPLACE_ASINF]) + REPLACE_ATANF=0; AC_SUBST([REPLACE_ATANF]) + REPLACE_ATAN2F=0; AC_SUBST([REPLACE_ATAN2F]) + REPLACE_CBRTF=0; AC_SUBST([REPLACE_CBRTF]) + REPLACE_CBRTL=0; AC_SUBST([REPLACE_CBRTL]) + REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL]) + REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF]) + REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL]) + REPLACE_COSF=0; AC_SUBST([REPLACE_COSF]) + REPLACE_COSHF=0; AC_SUBST([REPLACE_COSHF]) + REPLACE_EXPF=0; AC_SUBST([REPLACE_EXPF]) + REPLACE_EXPM1=0; AC_SUBST([REPLACE_EXPM1]) + REPLACE_EXPM1F=0; AC_SUBST([REPLACE_EXPM1F]) + REPLACE_EXP2=0; AC_SUBST([REPLACE_EXP2]) + REPLACE_EXP2L=0; AC_SUBST([REPLACE_EXP2L]) + REPLACE_FABSL=0; AC_SUBST([REPLACE_FABSL]) + REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR]) + REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF]) + REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL]) + REPLACE_FMA=0; AC_SUBST([REPLACE_FMA]) + REPLACE_FMAF=0; AC_SUBST([REPLACE_FMAF]) + REPLACE_FMAL=0; AC_SUBST([REPLACE_FMAL]) + REPLACE_FMOD=0; AC_SUBST([REPLACE_FMOD]) + REPLACE_FMODF=0; AC_SUBST([REPLACE_FMODF]) + REPLACE_FMODL=0; AC_SUBST([REPLACE_FMODL]) + REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF]) + REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP]) + REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL]) + REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL]) + REPLACE_HYPOT=0; AC_SUBST([REPLACE_HYPOT]) + REPLACE_HYPOTF=0; AC_SUBST([REPLACE_HYPOTF]) + REPLACE_HYPOTL=0; AC_SUBST([REPLACE_HYPOTL]) + REPLACE_ILOGB=0; AC_SUBST([REPLACE_ILOGB]) + REPLACE_ILOGBF=0; AC_SUBST([REPLACE_ILOGBF]) + REPLACE_ILOGBL=0; AC_SUBST([REPLACE_ILOGBL]) + REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE]) + REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF]) + REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN]) + REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL]) + REPLACE_LOG=0; AC_SUBST([REPLACE_LOG]) + REPLACE_LOGF=0; AC_SUBST([REPLACE_LOGF]) + REPLACE_LOGL=0; AC_SUBST([REPLACE_LOGL]) + REPLACE_LOG10=0; AC_SUBST([REPLACE_LOG10]) + REPLACE_LOG10F=0; AC_SUBST([REPLACE_LOG10F]) + REPLACE_LOG10L=0; AC_SUBST([REPLACE_LOG10L]) + REPLACE_LOG1P=0; AC_SUBST([REPLACE_LOG1P]) + REPLACE_LOG1PF=0; AC_SUBST([REPLACE_LOG1PF]) + REPLACE_LOG1PL=0; AC_SUBST([REPLACE_LOG1PL]) + REPLACE_LOG2=0; AC_SUBST([REPLACE_LOG2]) + REPLACE_LOG2F=0; AC_SUBST([REPLACE_LOG2F]) + REPLACE_LOG2L=0; AC_SUBST([REPLACE_LOG2L]) + REPLACE_LOGB=0; AC_SUBST([REPLACE_LOGB]) + REPLACE_LOGBF=0; AC_SUBST([REPLACE_LOGBF]) + REPLACE_LOGBL=0; AC_SUBST([REPLACE_LOGBL]) + REPLACE_MODF=0; AC_SUBST([REPLACE_MODF]) + REPLACE_MODFF=0; AC_SUBST([REPLACE_MODFF]) + REPLACE_MODFL=0; AC_SUBST([REPLACE_MODFL]) + REPLACE_NAN=0; AC_SUBST([REPLACE_NAN]) + REPLACE_REMAINDER=0; AC_SUBST([REPLACE_REMAINDER]) + REPLACE_REMAINDERF=0; AC_SUBST([REPLACE_REMAINDERF]) + REPLACE_REMAINDERL=0; AC_SUBST([REPLACE_REMAINDERL]) + REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND]) + REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF]) + REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL]) + REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT]) + REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC]) + REPLACE_SINF=0; AC_SUBST([REPLACE_SINF]) + REPLACE_SINHF=0; AC_SUBST([REPLACE_SINHF]) + REPLACE_SQRTF=0; AC_SUBST([REPLACE_SQRTF]) + REPLACE_SQRTL=0; AC_SUBST([REPLACE_SQRTL]) + REPLACE_TANF=0; AC_SUBST([REPLACE_TANF]) + REPLACE_TANHF=0; AC_SUBST([REPLACE_TANHF]) + REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC]) + REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF]) + REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL]) +]) + +# gl_LONG_DOUBLE_VS_DOUBLE +# determines whether 'long double' and 'double' have the same representation. +# Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines +# HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly. +# The currently known platforms where this is the case are: +# Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9. +AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE], +[ + AC_CACHE_CHECK([whether long double and double are the same], + [gl_cv_long_double_equals_double], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include <float.h>]], + [[typedef int check[sizeof (long double) == sizeof (double) + && LDBL_MANT_DIG == DBL_MANT_DIG + && LDBL_MAX_EXP == DBL_MAX_EXP + && LDBL_MIN_EXP == DBL_MIN_EXP + ? 1 : -1]; + ]])], + [gl_cv_long_double_equals_double=yes], + [gl_cv_long_double_equals_double=no]) + ]) + if test $gl_cv_long_double_equals_double = yes; then + AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1], + [Define to 1 if 'long double' and 'double' have the same representation.]) + HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1 + else + HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0 + fi + AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]) +]) diff --git a/devspec.en_US/project/recutils/m4/mbrlen.m4 b/devspec.en_US/project/recutils/m4/mbrlen.m4 new file mode 100755 index 0000000..f72ad26 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/mbrlen.m4 @@ -0,0 +1,266 @@ +# mbrlen.m4 serial 10 -*- coding: utf-8 -*- +dnl Copyright (C) 2008, 2010-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_MBRLEN], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + AC_REQUIRE([gl_FUNC_MBRTOWC]) + AC_CHECK_FUNCS_ONCE([mbrlen]) + if test $ac_cv_func_mbrlen = no; then + HAVE_MBRLEN=0 + AC_CHECK_DECLS([mbrlen],,, [[ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +]]) + if test $ac_cv_have_decl_mbrlen = yes; then + dnl On Minix 3.1.8, the system's <wchar.h> declares mbrlen() although + dnl it does not have the function. Avoid a collision with gnulib's + dnl replacement. + REPLACE_MBRLEN=1 + fi + else + dnl Most bugs affecting the system's mbrtowc function also affect the + dnl mbrlen function. So override mbrlen whenever mbrtowc is overridden. + dnl We could also run the individual tests below; the results would be + dnl the same. + if test $REPLACE_MBRTOWC = 1; then + REPLACE_MBRLEN=1 + fi + fi +]) + +dnl Test whether mbrlen puts the state into non-initial state when parsing an +dnl incomplete multibyte character. +dnl Result is gl_cv_func_mbrlen_incomplete_state. + +AC_DEFUN([gl_MBRLEN_INCOMPLETE_STATE], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_JA]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrlen handles incomplete characters], + [gl_cv_func_mbrlen_incomplete_state], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on AIX and OSF/1. + aix* | osf*) gl_cv_func_mbrlen_incomplete_state="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrlen_incomplete_state="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_JA != none; then + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrlen (input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 1; + } + return 0; +}]])], + [gl_cv_func_mbrlen_incomplete_state=yes], + [gl_cv_func_mbrlen_incomplete_state=no], + []) + fi + ]) +]) + +dnl Test whether mbrlen, when parsing the end of a multibyte character, +dnl correctly returns the number of bytes that were needed to complete the +dnl character (not the total number of bytes of the multibyte character). +dnl Result is gl_cv_func_mbrlen_retval. + +AC_DEFUN([gl_MBRLEN_RETVAL], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_FR_UTF8]) + AC_REQUIRE([gt_LOCALE_JA]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrlen has a correct return value], + [gl_cv_func_mbrlen_retval], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on HP-UX and Solaris. + hpux* | solaris*) gl_cv_func_mbrlen_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrlen_retval="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none; then + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + int result = 0; + /* This fails on Solaris. */ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + char input[] = "B\303\274\303\237er"; /* "Büßer" */ + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrlen (input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrlen (input + 2, 5, &state) != 1) + result |= 1; + } + } + /* This fails on HP-UX 11.11. */ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrlen (input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrlen (input + 2, 5, &state) != 2) + result |= 2; + } + } + return result; +}]])], + [gl_cv_func_mbrlen_retval=yes], + [gl_cv_func_mbrlen_retval=no], + []) + fi + ]) +]) + +dnl Test whether mbrlen, when parsing a NUL character, correctly returns 0. +dnl Result is gl_cv_func_mbrlen_nul_retval. + +AC_DEFUN([gl_MBRLEN_NUL_RETVAL], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_ZH_CN]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrlen returns 0 when parsing a NUL character], + [gl_cv_func_mbrlen_nul_retval], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on Solaris 9. + solaris2.9) gl_cv_func_mbrlen_nul_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrlen_nul_retval="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_ZH_CN != none; then + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + /* This crashes on Solaris 9 inside __mbrtowc_dense_gb18030. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + mbstate_t state; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrlen ("", 1, &state) != 0) + return 1; + } + return 0; +}]])], + [gl_cv_func_mbrlen_nul_retval=yes], + [gl_cv_func_mbrlen_nul_retval=no], + []) + fi + ]) +]) + +dnl Test whether mbrlen returns the correct value on empty input. + +AC_DEFUN([gl_MBRLEN_EMPTY_INPUT], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrlen works on empty input], + [gl_cv_func_mbrlen_empty_input], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on AIX and glibc systems. + aix* | *-gnu* | gnu*) gl_cv_func_mbrlen_empty_input="guessing no" ;; + *) gl_cv_func_mbrlen_empty_input="guessing yes" ;; + esac +changequote([,])dnl + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ + #include <wchar.h> + static mbstate_t mbs; + int + main (void) + { + return mbrlen ("", 0, &mbs) != (size_t) -2; + }]])], + [gl_cv_func_mbrlen_empty_input=yes], + [gl_cv_func_mbrlen_empty_input=no], + [:]) + ]) +]) + +# Prerequisites of lib/mbrlen.c. +AC_DEFUN([gl_PREREQ_MBRLEN], [ + : +]) diff --git a/devspec.en_US/project/recutils/m4/mbrtowc.m4 b/devspec.en_US/project/recutils/m4/mbrtowc.m4 new file mode 100755 index 0000000..4811af5 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/mbrtowc.m4 @@ -0,0 +1,672 @@ +# mbrtowc.m4 serial 31 -*- coding: utf-8 -*- +dnl Copyright (C) 2001-2002, 2004-2005, 2008-2019 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_MBRTOWC], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + gl_MBSTATE_T_BROKEN + + AC_CHECK_FUNCS_ONCE([mbrtowc]) + if test $ac_cv_func_mbrtowc = no; then + HAVE_MBRTOWC=0 + AC_CHECK_DECLS([mbrtowc],,, [[ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +]]) + if test $ac_cv_have_decl_mbrtowc = yes; then + dnl On Minix 3.1.8, the system's <wchar.h> declares mbrtowc() although + dnl it does not have the function. Avoid a collision with gnulib's + dnl replacement. + REPLACE_MBRTOWC=1 + fi + else + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBRTOWC=1 + else + gl_MBRTOWC_NULL_ARG1 + gl_MBRTOWC_NULL_ARG2 + gl_MBRTOWC_RETVAL + gl_MBRTOWC_NUL_RETVAL + gl_MBRTOWC_EMPTY_INPUT + gl_MBRTOWC_C_LOCALE + case "$gl_cv_func_mbrtowc_null_arg1" in + *yes) ;; + *) AC_DEFINE([MBRTOWC_NULL_ARG1_BUG], [1], + [Define if the mbrtowc function has the NULL pwc argument bug.]) + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_null_arg2" in + *yes) ;; + *) AC_DEFINE([MBRTOWC_NULL_ARG2_BUG], [1], + [Define if the mbrtowc function has the NULL string argument bug.]) + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_retval" in + *yes) ;; + *) AC_DEFINE([MBRTOWC_RETVAL_BUG], [1], + [Define if the mbrtowc function returns a wrong return value.]) + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_nul_retval" in + *yes) ;; + *) AC_DEFINE([MBRTOWC_NUL_RETVAL_BUG], [1], + [Define if the mbrtowc function does not return 0 for a NUL character.]) + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_empty_input" in + *yes) ;; + *) AC_DEFINE([MBRTOWC_EMPTY_INPUT_BUG], [1], + [Define if the mbrtowc function does not return (size_t) -2 + for empty input.]) + REPLACE_MBRTOWC=1 + ;; + esac + case $gl_cv_C_locale_sans_EILSEQ in + *yes) ;; + *) AC_DEFINE([C_LOCALE_MAYBE_EILSEQ], [1], + [Define to 1 if the C locale may have encoding errors.]) + REPLACE_MBRTOWC=1 + ;; + esac + fi + fi +]) + +dnl Test whether mbsinit() and mbrtowc() need to be overridden in a way that +dnl redefines the semantics of the given mbstate_t type. +dnl Result is REPLACE_MBSTATE_T. +dnl When this is set to 1, we replace both mbsinit() and mbrtowc(), in order to +dnl avoid inconsistencies. + +AC_DEFUN([gl_MBSTATE_T_BROKEN], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + AC_CHECK_FUNCS_ONCE([mbsinit]) + AC_CHECK_FUNCS_ONCE([mbrtowc]) + if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then + gl_MBRTOWC_INCOMPLETE_STATE + gl_MBRTOWC_SANITYCHECK + REPLACE_MBSTATE_T=0 + case "$gl_cv_func_mbrtowc_incomplete_state" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + case "$gl_cv_func_mbrtowc_sanitycheck" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + else + REPLACE_MBSTATE_T=1 + fi +]) + +dnl Test whether mbrtowc puts the state into non-initial state when parsing an +dnl incomplete multibyte character. +dnl Result is gl_cv_func_mbrtowc_incomplete_state. + +AC_DEFUN([gl_MBRTOWC_INCOMPLETE_STATE], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_JA]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrtowc handles incomplete characters], + [gl_cv_func_mbrtowc_incomplete_state], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on AIX and OSF/1. + aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_JA != none; then + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 2; + } + return 0; +}]])], + [gl_cv_func_mbrtowc_incomplete_state=yes], + [gl_cv_func_mbrtowc_incomplete_state=no], + [:]) + fi + ]) +]) + +dnl Test whether mbrtowc works not worse than mbtowc. +dnl Result is gl_cv_func_mbrtowc_sanitycheck. + +AC_DEFUN([gl_MBRTOWC_SANITYCHECK], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_ZH_CN]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrtowc works as well as mbtowc], + [gl_cv_func_mbrtowc_sanitycheck], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on Solaris 8. + solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_ZH_CN != none; then + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <locale.h> +#include <stdlib.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + /* This fails on Solaris 8: + mbrtowc returns 2, and sets wc to 0x00F0. + mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 6, &state) != 4 + && mbtowc (&wc, input + 3, 6) == 4) + return 2; + } + return 0; +}]])], + [gl_cv_func_mbrtowc_sanitycheck=yes], + [gl_cv_func_mbrtowc_sanitycheck=no], + [:]) + fi + ]) +]) + +dnl Test whether mbrtowc supports a NULL pwc argument correctly. +dnl Result is gl_cv_func_mbrtowc_null_arg1. + +AC_DEFUN([gl_MBRTOWC_NULL_ARG1], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_FR_UTF8]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrtowc handles a NULL pwc argument], + [gl_cv_func_mbrtowc_null_arg1], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on Solaris. + solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_null_arg1="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR_UTF8 != none; then + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <locale.h> +#include <stdlib.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + int result = 0; + + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + char input[] = "\303\237er"; + mbstate_t state; + wchar_t wc; + size_t ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 5, &state); + if (ret != 2) + result |= 1; + if (!mbsinit (&state)) + result |= 2; + + memset (&state, '\0', sizeof (mbstate_t)); + ret = mbrtowc (NULL, input, 5, &state); + if (ret != 2) /* Solaris 7 fails here: ret is -1. */ + result |= 4; + if (!mbsinit (&state)) + result |= 8; + } + return result; +}]])], + [gl_cv_func_mbrtowc_null_arg1=yes], + [gl_cv_func_mbrtowc_null_arg1=no], + [:]) + fi + ]) +]) + +dnl Test whether mbrtowc supports a NULL string argument correctly. +dnl Result is gl_cv_func_mbrtowc_null_arg2. + +AC_DEFUN([gl_MBRTOWC_NULL_ARG2], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_FR_UTF8]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrtowc handles a NULL string argument], + [gl_cv_func_mbrtowc_null_arg2], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on OSF/1. + osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_null_arg2="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR_UTF8 != none; then + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + mbstate_t state; + wchar_t wc; + int ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + mbrtowc (&wc, NULL, 5, &state); + /* Check that wc was not modified. */ + if (wc != (wchar_t) 0xBADFACE) + return 2; + } + return 0; +}]])], + [gl_cv_func_mbrtowc_null_arg2=yes], + [gl_cv_func_mbrtowc_null_arg2=no], + [:]) + fi + ]) +]) + +dnl Test whether mbrtowc, when parsing the end of a multibyte character, +dnl correctly returns the number of bytes that were needed to complete the +dnl character (not the total number of bytes of the multibyte character). +dnl Result is gl_cv_func_mbrtowc_retval. + +AC_DEFUN([gl_MBRTOWC_RETVAL], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_FR_UTF8]) + AC_REQUIRE([gt_LOCALE_JA]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CACHE_CHECK([whether mbrtowc has a correct return value], + [gl_cv_func_mbrtowc_retval], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on HP-UX, Solaris, native Windows. + hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_retval="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \ + || { case "$host_os" in mingw*) true;; *) false;; esac; }; then + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + int result = 0; + int found_some_locale = 0; + /* This fails on Solaris. */ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + char input[] = "B\303\274\303\237er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrtowc (&wc, input + 2, 5, &state) != 1) + result |= 1; + } + found_some_locale = 1; + } + /* This fails on HP-UX 11.11. */ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrtowc (&wc, input + 2, 5, &state) != 2) + result |= 2; + } + found_some_locale = 1; + } + /* This fails on native Windows. */ + if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) + { + char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) + { + input[3] = '\0'; + if (mbrtowc (&wc, input + 4, 4, &state) != 1) + result |= 4; + } + found_some_locale = 1; + } + if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) + { + char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) + { + input[3] = '\0'; + if (mbrtowc (&wc, input + 4, 4, &state) != 1) + result |= 8; + } + found_some_locale = 1; + } + if (setlocale (LC_ALL, "Chinese_China.936") != NULL) + { + char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) + { + input[3] = '\0'; + if (mbrtowc (&wc, input + 4, 4, &state) != 1) + result |= 16; + } + found_some_locale = 1; + } + return (found_some_locale ? result : 77); +}]])], + [gl_cv_func_mbrtowc_retval=yes], + [if test $? != 77; then + gl_cv_func_mbrtowc_retval=no + fi + ], + [:]) + fi + ]) +]) + +dnl Test whether mbrtowc, when parsing a NUL character, correctly returns 0. +dnl Result is gl_cv_func_mbrtowc_nul_retval. + +AC_DEFUN([gl_MBRTOWC_NUL_RETVAL], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_ZH_CN]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrtowc returns 0 when parsing a NUL character], + [gl_cv_func_mbrtowc_nul_retval], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on Solaris 8 and 9. + solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_ZH_CN != none; then + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + /* This fails on Solaris 8 and 9. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "", 1, &state) != 0) + return 2; + } + return 0; +}]])], + [gl_cv_func_mbrtowc_nul_retval=yes], + [gl_cv_func_mbrtowc_nul_retval=no], + [:]) + fi + ]) +]) + +dnl Test whether mbrtowc returns the correct value on empty input. + +AC_DEFUN([gl_MBRTOWC_EMPTY_INPUT], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrtowc works on empty input], + [gl_cv_func_mbrtowc_empty_input], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on AIX and glibc systems. + aix* | *-gnu* | gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; + *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; + esac +changequote([,])dnl + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ + #include <wchar.h> + static wchar_t wc; + static mbstate_t mbs; + int + main (void) + { + return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2; + }]])], + [gl_cv_func_mbrtowc_empty_input=yes], + [gl_cv_func_mbrtowc_empty_input=no], + [:]) + ]) +]) + +dnl Test whether mbrtowc reports encoding errors in the C locale. +dnl Although POSIX was never intended to allow this, the GNU C Library +dnl and other implementations do it. See: +dnl https://sourceware.org/bugzilla/show_bug.cgi?id=19932 + +AC_DEFUN([gl_MBRTOWC_C_LOCALE], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether the C locale is free of encoding errors], + [gl_cv_C_locale_sans_EILSEQ], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. + gl_cv_C_locale_sans_EILSEQ="guessing no" + + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <limits.h> + #include <locale.h> + #include <wchar.h> + ]], [[ + int i; + char *locale = setlocale (LC_ALL, "C"); + if (! locale) + return 2; + for (i = CHAR_MIN; i <= CHAR_MAX; i++) + { + char c = i; + wchar_t wc; + mbstate_t mbs = { 0, }; + size_t ss = mbrtowc (&wc, &c, 1, &mbs); + if (1 < ss) + return 3; + } + return 0; + ]])], + [gl_cv_C_locale_sans_EILSEQ=yes], + [gl_cv_C_locale_sans_EILSEQ=no], + [case "$host_os" in + # Guess yes on native Windows. + mingw*) gl_cv_C_locale_sans_EILSEQ="guessing yes" ;; + esac + ]) + ]) +]) + +# Prerequisites of lib/mbrtowc.c. +AC_DEFUN([gl_PREREQ_MBRTOWC], [ + AC_REQUIRE([AC_C_INLINE]) + : +]) + + +dnl From Paul Eggert + +dnl This is an override of an autoconf macro. + +AC_DEFUN([AC_FUNC_MBRTOWC], +[ + dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60. + AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared], + [gl_cv_func_mbrtowc], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be + included before <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> + must be included before <wchar.h>. */ + #include <stddef.h> + #include <stdio.h> + #include <time.h> + #include <wchar.h>]], + [[wchar_t wc; + char const s[] = ""; + size_t n = 1; + mbstate_t state; + return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])], + [gl_cv_func_mbrtowc=yes], + [gl_cv_func_mbrtowc=no])]) + if test $gl_cv_func_mbrtowc = yes; then + AC_DEFINE([HAVE_MBRTOWC], [1], + [Define to 1 if mbrtowc and mbstate_t are properly declared.]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/mbsinit.m4 b/devspec.en_US/project/recutils/m4/mbsinit.m4 new file mode 100755 index 0000000..e2f45e7 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/mbsinit.m4 @@ -0,0 +1,51 @@ +# mbsinit.m4 serial 8 +dnl Copyright (C) 2008, 2010-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_MBSINIT], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) + + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + gl_MBSTATE_T_BROKEN + + AC_CHECK_FUNCS_ONCE([mbsinit]) + if test $ac_cv_func_mbsinit = no; then + HAVE_MBSINIT=0 + AC_CHECK_DECLS([mbsinit],,, [[ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +]]) + if test $ac_cv_have_decl_mbsinit = yes; then + dnl On Minix 3.1.8, the system's <wchar.h> declares mbsinit() although + dnl it does not have the function. Avoid a collision with gnulib's + dnl replacement. + REPLACE_MBSINIT=1 + fi + else + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBSINIT=1 + else + dnl On mingw, mbsinit() always returns 1, which is inappropriate for + dnl states produced by mbrtowc() for an incomplete multibyte character + dnl in multibyte locales. + case "$host_os" in + mingw*) REPLACE_MBSINIT=1 ;; + esac + fi + fi +]) + +# Prerequisites of lib/mbsinit.c. +AC_DEFUN([gl_PREREQ_MBSINIT], [ + : +]) diff --git a/devspec.en_US/project/recutils/m4/mbstate_t.m4 b/devspec.en_US/project/recutils/m4/mbstate_t.m4 new file mode 100755 index 0000000..f669753 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/mbstate_t.m4 @@ -0,0 +1,41 @@ +# mbstate_t.m4 serial 13 +dnl Copyright (C) 2000-2002, 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# From Paul Eggert. + +# BeOS 5 has <wchar.h> but does not define mbstate_t, +# so you can't declare an object of that type. +# Check for this incompatibility with Standard C. + +# AC_TYPE_MBSTATE_T +# ----------------- +AC_DEFUN([AC_TYPE_MBSTATE_T], +[ + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl for HP-UX 11.11 + + AC_CACHE_CHECK([for mbstate_t], [ac_cv_type_mbstate_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [AC_INCLUDES_DEFAULT[ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h>]], + [[mbstate_t x; return sizeof x;]])], + [ac_cv_type_mbstate_t=yes], + [ac_cv_type_mbstate_t=no])]) + if test $ac_cv_type_mbstate_t = yes; then + AC_DEFINE([HAVE_MBSTATE_T], [1], + [Define to 1 if <wchar.h> declares mbstate_t.]) + else + AC_DEFINE([mbstate_t], [int], + [Define to a type if <wchar.h> does not define.]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/mbtowc.m4 b/devspec.en_US/project/recutils/m4/mbtowc.m4 new file mode 100755 index 0000000..202c3fb --- /dev/null +++ b/devspec.en_US/project/recutils/m4/mbtowc.m4 @@ -0,0 +1,19 @@ +# mbtowc.m4 serial 2 +dnl Copyright (C) 2011-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_MBTOWC], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + + if false; then + REPLACE_MBTOWC=1 + fi +]) + +# Prerequisites of lib/mbtowc.c. +AC_DEFUN([gl_PREREQ_MBTOWC], [ + : +]) diff --git a/devspec.en_US/project/recutils/m4/memchr.m4 b/devspec.en_US/project/recutils/m4/memchr.m4 new file mode 100755 index 0000000..db227e7 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/memchr.m4 @@ -0,0 +1,99 @@ +# memchr.m4 serial 13 +dnl Copyright (C) 2002-2004, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN_ONCE([gl_FUNC_MEMCHR], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + + dnl Check for prerequisites for memory fence checks. + gl_FUNC_MMAP_ANON + AC_CHECK_HEADERS_ONCE([sys/mman.h]) + AC_CHECK_FUNCS_ONCE([mprotect]) + + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + m4_ifdef([gl_FUNC_MEMCHR_OBSOLETE], [ + dnl These days, we assume memchr is present. But if support for old + dnl platforms is desired: + AC_CHECK_FUNCS_ONCE([memchr]) + if test $ac_cv_func_memchr = no; then + HAVE_MEMCHR=0 + fi + ]) + if test $HAVE_MEMCHR = 1; then + # Detect platform-specific bugs in some versions of glibc: + # memchr should not dereference anything with length 0 + # https://bugzilla.redhat.com/show_bug.cgi?id=499689 + # memchr should not dereference overestimated length after a match + # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 + # https://sourceware.org/bugzilla/show_bug.cgi?id=10162 + # Assume that memchr works on platforms that lack mprotect. + AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +#include <string.h> +#if HAVE_SYS_MMAN_H +# include <fcntl.h> +# include <unistd.h> +# include <sys/types.h> +# include <sys/mman.h> +# ifndef MAP_FILE +# define MAP_FILE 0 +# endif +#endif +]], [[ + int result = 0; + char *fence = NULL; +#if HAVE_SYS_MMAN_H && HAVE_MPROTECT +# if HAVE_MAP_ANONYMOUS + const int flags = MAP_ANONYMOUS | MAP_PRIVATE; + const int fd = -1; +# else /* !HAVE_MAP_ANONYMOUS */ + const int flags = MAP_FILE | MAP_PRIVATE; + int fd = open ("/dev/zero", O_RDONLY, 0666); + if (fd >= 0) +# endif + { + int pagesize = getpagesize (); + char *two_pages = + (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, + flags, fd, 0); + if (two_pages != (char *)(-1) + && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) + fence = two_pages + pagesize; + } +#endif + if (fence) + { + if (memchr (fence, 0, 0)) + result |= 1; + strcpy (fence - 9, "12345678"); + if (memchr (fence - 9, 0, 79) != fence - 1) + result |= 2; + if (memchr (fence - 1, 0, 3) != fence - 1) + result |= 4; + } + return result; +]])], + [gl_cv_func_memchr_works=yes], + [gl_cv_func_memchr_works=no], + [case "$host_os" in + # Guess yes on native Windows. + mingw*) gl_cv_func_memchr_works="guessing yes" ;; + # Be pessimistic for now. + *) gl_cv_func_memchr_works="guessing no" ;; + esac + ]) + ]) + case "$gl_cv_func_memchr_works" in + *yes) ;; + *) REPLACE_MEMCHR=1 ;; + esac + fi +]) + +# Prerequisites of lib/memchr.c. +AC_DEFUN([gl_PREREQ_MEMCHR], [ + AC_CHECK_HEADERS([bp-sym.h]) +]) diff --git a/devspec.en_US/project/recutils/m4/minmax.m4 b/devspec.en_US/project/recutils/m4/minmax.m4 new file mode 100755 index 0000000..1e0d30b --- /dev/null +++ b/devspec.en_US/project/recutils/m4/minmax.m4 @@ -0,0 +1,44 @@ +# minmax.m4 serial 4 +dnl Copyright (C) 2005, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_PREREQ([2.53]) + +AC_DEFUN([gl_MINMAX], +[ + AC_REQUIRE([gl_PREREQ_MINMAX]) +]) + +# Prerequisites of lib/minmax.h. +AC_DEFUN([gl_PREREQ_MINMAX], +[ + gl_MINMAX_IN_HEADER([limits.h]) + gl_MINMAX_IN_HEADER([sys/param.h]) +]) + +dnl gl_MINMAX_IN_HEADER(HEADER) +dnl The parameter has to be a literal header name; it cannot be macro, +dnl nor a shell variable. (Because autoheader collects only AC_DEFINE +dnl invocations with a literal macro name.) +AC_DEFUN([gl_MINMAX_IN_HEADER], +[ + m4_pushdef([header], AS_TR_SH([$1])) + m4_pushdef([HEADER], AS_TR_CPP([$1])) + AC_CACHE_CHECK([whether <$1> defines MIN and MAX], + [gl_cv_minmax_in_]header, + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <$1> + int x = MIN (42, 17);]], + [[]])], + [gl_cv_minmax_in_]header[=yes], + [gl_cv_minmax_in_]header[=no])]) + if test $gl_cv_minmax_in_[]header = yes; then + AC_DEFINE([HAVE_MINMAX_IN_]HEADER, 1, + [Define to 1 if <$1> defines the MIN and MAX macros.]) + fi + m4_popdef([HEADER]) + m4_popdef([header]) +]) diff --git a/devspec.en_US/project/recutils/m4/mkdir.m4 b/devspec.en_US/project/recutils/m4/mkdir.m4 new file mode 100755 index 0000000..4cd9590 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/mkdir.m4 @@ -0,0 +1,82 @@ +# serial 14 + +# Copyright (C) 2001, 2003-2004, 2006, 2008-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# On some systems, mkdir ("foo/", 0700) fails because of the trailing slash. +# On others, mkdir ("foo/./", 0700) mistakenly succeeds. +# On such systems, arrange to use a wrapper function. +AC_DEFUN([gl_FUNC_MKDIR], +[dnl + AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CHECK_HEADERS_ONCE([unistd.h]) + AC_CACHE_CHECK([whether mkdir handles trailing slash], + [gl_cv_func_mkdir_trailing_slash_works], + [rm -rf conftest.dir + AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +# include <sys/types.h> +# include <sys/stat.h> +]], [return mkdir ("conftest.dir/", 0700);])], + [gl_cv_func_mkdir_trailing_slash_works=yes], + [gl_cv_func_mkdir_trailing_slash_works=no], + [case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; + # Guess yes on MSVC, no on mingw. + mingw*) AC_EGREP_CPP([Known], [ +#ifdef _MSC_VER + Known +#endif + ], + [gl_cv_func_mkdir_trailing_slash_works="guessing yes"], + [gl_cv_func_mkdir_trailing_slash_works="guessing no"]) + ;; + # If we don't know, assume the worst. + *) gl_cv_func_mkdir_trailing_slash_works="guessing no" ;; + esac + ]) + rm -rf conftest.dir + ] + ) + case "$gl_cv_func_mkdir_trailing_slash_works" in + *yes) ;; + *) + REPLACE_MKDIR=1 + ;; + esac + + AC_CACHE_CHECK([whether mkdir handles trailing dot], + [gl_cv_func_mkdir_trailing_dot_works], + [rm -rf conftest.dir + AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +# include <sys/types.h> +# include <sys/stat.h> +]], [return !mkdir ("conftest.dir/./", 0700);])], + [gl_cv_func_mkdir_trailing_dot_works=yes], + [gl_cv_func_mkdir_trailing_dot_works=no], + [case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_mkdir_trailing_dot_works="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_mkdir_trailing_dot_works="guessing no" ;; + esac + ]) + rm -rf conftest.dir + ] + ) + case "$gl_cv_func_mkdir_trailing_dot_works" in + *yes) ;; + *) + REPLACE_MKDIR=1 + AC_DEFINE([FUNC_MKDIR_DOT_BUG], [1], [Define to 1 if mkdir mistakenly + creates a directory given with a trailing dot component.]) + ;; + esac +]) diff --git a/devspec.en_US/project/recutils/m4/mkostemp.m4 b/devspec.en_US/project/recutils/m4/mkostemp.m4 new file mode 100755 index 0000000..56f566c --- /dev/null +++ b/devspec.en_US/project/recutils/m4/mkostemp.m4 @@ -0,0 +1,23 @@ +# mkostemp.m4 serial 2 +dnl Copyright (C) 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_MKOSTEMP], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + + dnl Persuade glibc <stdlib.h> to declare mkostemp(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_CHECK_FUNCS_ONCE([mkostemp]) + if test $ac_cv_func_mkostemp != yes; then + HAVE_MKOSTEMP=0 + fi +]) + +# Prerequisites of lib/mkostemp.c. +AC_DEFUN([gl_PREREQ_MKOSTEMP], +[ +]) diff --git a/devspec.en_US/project/recutils/m4/mkstemp.m4 b/devspec.en_US/project/recutils/m4/mkstemp.m4 new file mode 100755 index 0000000..ae24c3b --- /dev/null +++ b/devspec.en_US/project/recutils/m4/mkstemp.m4 @@ -0,0 +1,84 @@ +#serial 25 + +# Copyright (C) 2001, 2003-2007, 2009-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# On some hosts (e.g., HP-UX 10.20, SunOS 4.1.4, Solaris 2.5.1), mkstemp has a +# silly limit that it can create no more than 26 files from a given template. +# Other systems lack mkstemp altogether. +# On OSF1/Tru64 V4.0F, the system-provided mkstemp function can create +# only 32 files per process. +# On some hosts, mkstemp creates files with mode 0666, which is a security +# problem and a violation of POSIX 2008. +# On systems like the above, arrange to use the replacement function. +AC_DEFUN([gl_FUNC_MKSTEMP], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + + AC_CHECK_FUNCS_ONCE([mkstemp]) + if test $ac_cv_func_mkstemp = yes; then + AC_CACHE_CHECK([for working mkstemp], + [gl_cv_func_working_mkstemp], + [ + mkdir conftest.mkstemp + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [AC_INCLUDES_DEFAULT], + [[int result = 0; + int i; + off_t large = (off_t) 4294967295u; + if (large < 0) + large = 2147483647; + umask (0); + for (i = 0; i < 70; i++) + { + char templ[] = "conftest.mkstemp/coXXXXXX"; + int (*mkstemp_function) (char *) = mkstemp; + int fd = mkstemp_function (templ); + if (fd < 0) + result |= 1; + else + { + struct stat st; + if (lseek (fd, large, SEEK_SET) != large) + result |= 2; + if (fstat (fd, &st) < 0) + result |= 4; + else if (st.st_mode & 0077) + result |= 8; + if (close (fd)) + result |= 16; + } + } + return result;]])], + [gl_cv_func_working_mkstemp=yes], + [gl_cv_func_working_mkstemp=no], + [case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_working_mkstemp="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_working_mkstemp="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_working_mkstemp="guessing no" ;; + esac + ]) + rm -rf conftest.mkstemp + ]) + case "$gl_cv_func_working_mkstemp" in + *yes) ;; + *) + REPLACE_MKSTEMP=1 + ;; + esac + else + HAVE_MKSTEMP=0 + fi +]) + +# Prerequisites of lib/mkstemp.c. +AC_DEFUN([gl_PREREQ_MKSTEMP], +[ +]) diff --git a/devspec.en_US/project/recutils/m4/mktime.m4 b/devspec.en_US/project/recutils/m4/mktime.m4 new file mode 100755 index 0000000..a86e1ee --- /dev/null +++ b/devspec.en_US/project/recutils/m4/mktime.m4 @@ -0,0 +1,299 @@ +# serial 30 +dnl Copyright (C) 2002-2003, 2005-2007, 2009-2019 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Jim Meyering. + +AC_DEFUN([gl_TIME_T_IS_SIGNED], +[ + AC_CACHE_CHECK([whether time_t is signed], + [gl_cv_time_t_is_signed], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include <time.h> + char time_t_signed[(time_t) -1 < 0 ? 1 : -1];]])], + [gl_cv_time_t_is_signed=yes], + [gl_cv_time_t_is_signed=no])]) + if test $gl_cv_time_t_is_signed = yes; then + AC_DEFINE([TIME_T_IS_SIGNED], [1], [Define to 1 if time_t is signed.]) + fi +]) + +dnl Test whether mktime works. Set gl_cv_func_working_mktime. +AC_DEFUN([gl_FUNC_MKTIME_WORKS], +[ + AC_REQUIRE([gl_TIME_T_IS_SIGNED]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + + dnl We don't use AC_FUNC_MKTIME any more, because it is no longer maintained + dnl in Autoconf and because it invokes AC_LIBOBJ. + AC_CHECK_HEADERS_ONCE([unistd.h]) + AC_CHECK_DECLS_ONCE([alarm]) + AC_CHECK_FUNCS_ONCE([tzset]) + AC_REQUIRE([gl_MULTIARCH]) + if test $APPLE_UNIVERSAL_BUILD = 1; then + # A universal build on Apple Mac OS X platforms. + # The test result would be 'yes' in 32-bit mode and 'no' in 64-bit mode. + # But we need a configuration result that is valid in both modes. + gl_cv_func_working_mktime=no + fi + AC_CACHE_CHECK([for working mktime], [gl_cv_func_working_mktime], + [AC_RUN_IFELSE( + [AC_LANG_SOURCE( +[[/* Test program from Paul Eggert and Tony Leneis. */ +#include <limits.h> +#include <stdlib.h> +#include <time.h> + +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif + +#if HAVE_DECL_ALARM +# include <signal.h> +#endif + +#ifndef TIME_T_IS_SIGNED +# define TIME_T_IS_SIGNED 0 +#endif + +/* Work around redefinition to rpl_putenv by other config tests. */ +#undef putenv + +static time_t time_t_max; +static time_t time_t_min; + +/* Values we'll use to set the TZ environment variable. */ +static char *tz_strings[] = { + (char *) 0, "TZ=GMT0", "TZ=JST-9", + "TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00" +}; +#define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0])) + +/* Return 0 if mktime fails to convert a date in the spring-forward gap. + Based on a problem report from Andreas Jaeger. */ +static int +spring_forward_gap () +{ + /* glibc (up to about 1998-10-07) failed this test. */ + struct tm tm; + + /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" + instead of "TZ=America/Vancouver" in order to detect the bug even + on systems that don't support the Olson extension, or don't have the + full zoneinfo tables installed. */ + putenv ("TZ=PST8PDT,M4.1.0,M10.5.0"); + + tm.tm_year = 98; + tm.tm_mon = 3; + tm.tm_mday = 5; + tm.tm_hour = 2; + tm.tm_min = 0; + tm.tm_sec = 0; + tm.tm_isdst = -1; + return mktime (&tm) != (time_t) -1; +} + +static int +mktime_test1 (time_t now) +{ + struct tm *lt; + return ! (lt = localtime (&now)) || mktime (lt) == now; +} + +static int +mktime_test (time_t now) +{ + return (mktime_test1 (now) + && mktime_test1 ((time_t) (time_t_max - now)) + && mktime_test1 ((time_t) (time_t_min + now))); +} + +static int +irix_6_4_bug () +{ + /* Based on code from Ariel Faigon. */ + struct tm tm; + tm.tm_year = 96; + tm.tm_mon = 3; + tm.tm_mday = 0; + tm.tm_hour = 0; + tm.tm_min = 0; + tm.tm_sec = 0; + tm.tm_isdst = -1; + mktime (&tm); + return tm.tm_mon == 2 && tm.tm_mday == 31; +} + +static int +bigtime_test (int j) +{ + struct tm tm; + time_t now; + tm.tm_year = tm.tm_mon = tm.tm_mday = tm.tm_hour = tm.tm_min = tm.tm_sec = j; + now = mktime (&tm); + if (now != (time_t) -1) + { + struct tm *lt = localtime (&now); + if (! (lt + && lt->tm_year == tm.tm_year + && lt->tm_mon == tm.tm_mon + && lt->tm_mday == tm.tm_mday + && lt->tm_hour == tm.tm_hour + && lt->tm_min == tm.tm_min + && lt->tm_sec == tm.tm_sec + && lt->tm_yday == tm.tm_yday + && lt->tm_wday == tm.tm_wday + && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst) + == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst)))) + return 0; + } + return 1; +} + +static int +year_2050_test () +{ + /* The correct answer for 2050-02-01 00:00:00 in Pacific time, + ignoring leap seconds. */ + unsigned long int answer = 2527315200UL; + + struct tm tm; + time_t t; + tm.tm_year = 2050 - 1900; + tm.tm_mon = 2 - 1; + tm.tm_mday = 1; + tm.tm_hour = tm.tm_min = tm.tm_sec = 0; + tm.tm_isdst = -1; + + /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" + instead of "TZ=America/Vancouver" in order to detect the bug even + on systems that don't support the Olson extension, or don't have the + full zoneinfo tables installed. */ + putenv ("TZ=PST8PDT,M4.1.0,M10.5.0"); + + t = mktime (&tm); + + /* Check that the result is either a failure, or close enough + to the correct answer that we can assume the discrepancy is + due to leap seconds. */ + return (t == (time_t) -1 + || (0 < t && answer - 120 <= t && t <= answer + 120)); +} + +int +main () +{ + int result = 0; + time_t t, delta; + int i, j; + int time_t_signed_magnitude = (time_t) ~ (time_t) 0 < (time_t) -1; + +#if HAVE_DECL_ALARM + /* This test makes some buggy mktime implementations loop. + Give up after 60 seconds; a mktime slower than that + isn't worth using anyway. */ + signal (SIGALRM, SIG_DFL); + alarm (60); +#endif + + time_t_max = (! TIME_T_IS_SIGNED + ? (time_t) -1 + : ((((time_t) 1 << (sizeof (time_t) * CHAR_BIT - 2)) - 1) + * 2 + 1)); + time_t_min = (! TIME_T_IS_SIGNED + ? (time_t) 0 + : time_t_signed_magnitude + ? ~ (time_t) 0 + : ~ time_t_max); + + delta = time_t_max / 997; /* a suitable prime number */ + for (i = 0; i < N_STRINGS; i++) + { + if (tz_strings[i]) + putenv (tz_strings[i]); + + for (t = 0; t <= time_t_max - delta && (result & 1) == 0; t += delta) + if (! mktime_test (t)) + result |= 1; + if ((result & 2) == 0 + && ! (mktime_test ((time_t) 1) + && mktime_test ((time_t) (60 * 60)) + && mktime_test ((time_t) (60 * 60 * 24)))) + result |= 2; + + for (j = 1; (result & 4) == 0; j <<= 1) + { + if (! bigtime_test (j)) + result |= 4; + if (INT_MAX / 2 < j) + break; + } + if ((result & 8) == 0 && ! bigtime_test (INT_MAX)) + result |= 8; + } + if (! irix_6_4_bug ()) + result |= 16; + if (! spring_forward_gap ()) + result |= 32; + if (! year_2050_test ()) + result |= 64; + return result; +}]])], + [gl_cv_func_working_mktime=yes], + [gl_cv_func_working_mktime=no], + [case "$host_os" in + # Guess no on native Windows. + mingw*) gl_cv_func_working_mktime="guessing no" ;; + *) gl_cv_func_working_mktime="guessing no" ;; + esac + ]) + ]) +]) + +dnl Main macro of module 'mktime'. +AC_DEFUN([gl_FUNC_MKTIME], +[ + AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_FUNC_MKTIME_WORKS]) + + REPLACE_MKTIME=0 + if test "$gl_cv_func_working_mktime" != yes; then + REPLACE_MKTIME=1 + AC_DEFINE([NEED_MKTIME_WORKING], [1], + [Define if the compilation of mktime.c should define 'mktime' + with the algorithmic workarounds.]) + fi + case "$host_os" in + mingw*) + REPLACE_MKTIME=1 + AC_DEFINE([NEED_MKTIME_WINDOWS], [1], + [Define if the compilation of mktime.c should define 'mktime' + with the native Windows TZ workaround.]) + ;; + esac +]) + +dnl Main macro of module 'mktime-internal'. +AC_DEFUN([gl_FUNC_MKTIME_INTERNAL], [ + AC_REQUIRE([gl_FUNC_MKTIME_WORKS]) + + WANT_MKTIME_INTERNAL=0 + dnl BeOS has __mktime_internal in libc, but other platforms don't. + AC_CHECK_FUNC([__mktime_internal], + [AC_DEFINE([mktime_internal], [__mktime_internal], + [Define to the real name of the mktime_internal function.]) + ], + [dnl mktime works but it doesn't export __mktime_internal, + dnl so we need to substitute our own mktime implementation. + WANT_MKTIME_INTERNAL=1 + AC_DEFINE([NEED_MKTIME_INTERNAL], [1], + [Define if the compilation of mktime.c should define 'mktime_internal'.]) + ]) +]) + +# Prerequisites of lib/mktime.c. +AC_DEFUN([gl_PREREQ_MKTIME], [:]) diff --git a/devspec.en_US/project/recutils/m4/mmap-anon.m4 b/devspec.en_US/project/recutils/m4/mmap-anon.m4 new file mode 100755 index 0000000..50c3808 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/mmap-anon.m4 @@ -0,0 +1,55 @@ +# mmap-anon.m4 serial 10 +dnl Copyright (C) 2005, 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Detect how mmap can be used to create anonymous (not file-backed) memory +# mappings. +# - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS +# and MAP_ANON exist and have the same value. +# - On HP-UX, only MAP_ANONYMOUS exists. +# - On Mac OS X, FreeBSD, NetBSD, OpenBSD, only MAP_ANON exists. +# - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be +# used. + +AC_DEFUN([gl_FUNC_MMAP_ANON], +[ + dnl Persuade glibc <sys/mman.h> to define MAP_ANONYMOUS. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it + # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is + # irrelevant for anonymous mappings. + AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no]) + + # Try to allow MAP_ANONYMOUS. + gl_have_mmap_anonymous=no + if test $gl_have_mmap = yes; then + AC_MSG_CHECKING([for MAP_ANONYMOUS]) + AC_EGREP_CPP([I cannot identify this map], [ +#include <sys/mman.h> +#ifdef MAP_ANONYMOUS + I cannot identify this map +#endif +], + [gl_have_mmap_anonymous=yes]) + if test $gl_have_mmap_anonymous != yes; then + AC_EGREP_CPP([I cannot identify this map], [ +#include <sys/mman.h> +#ifdef MAP_ANON + I cannot identify this map +#endif +], + [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON], + [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.]) + gl_have_mmap_anonymous=yes]) + fi + AC_MSG_RESULT([$gl_have_mmap_anonymous]) + if test $gl_have_mmap_anonymous = yes; then + AC_DEFINE([HAVE_MAP_ANONYMOUS], [1], + [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including + config.h and <sys/mman.h>.]) + fi + fi +]) diff --git a/devspec.en_US/project/recutils/m4/mode_t.m4 b/devspec.en_US/project/recutils/m4/mode_t.m4 new file mode 100755 index 0000000..ba840dc --- /dev/null +++ b/devspec.en_US/project/recutils/m4/mode_t.m4 @@ -0,0 +1,26 @@ +# mode_t.m4 serial 2 +dnl Copyright (C) 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# For using mode_t, it's sufficient to use AC_TYPE_MODE_T and +# include <sys/types.h>. + +# Define PROMOTED_MODE_T to the type that is the result of "default argument +# promotion" (ISO C 6.5.2.2.(6)) of the type mode_t. +AC_DEFUN([gl_PROMOTED_TYPE_MODE_T], +[ + AC_REQUIRE([AC_TYPE_MODE_T]) + AC_CACHE_CHECK([for promoted mode_t type], [gl_cv_promoted_mode_t], [ + dnl Assume mode_t promotes to 'int' if and only if it is smaller than 'int', + dnl and to itself otherwise. This assumption is not guaranteed by the ISO C + dnl standard, but we don't know of any real-world counterexamples. + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>]], + [[typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1];]])], + [gl_cv_promoted_mode_t='int'], + [gl_cv_promoted_mode_t='mode_t']) + ]) + AC_DEFINE_UNQUOTED([PROMOTED_MODE_T], [$gl_cv_promoted_mode_t], + [Define to the type that is the result of default argument promotions of type mode_t.]) +]) diff --git a/devspec.en_US/project/recutils/m4/msvc-inval.m4 b/devspec.en_US/project/recutils/m4/msvc-inval.m4 new file mode 100755 index 0000000..4b95876 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/msvc-inval.m4 @@ -0,0 +1,19 @@ +# msvc-inval.m4 serial 1 +dnl Copyright (C) 2011-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_MSVC_INVAL], +[ + AC_CHECK_FUNCS_ONCE([_set_invalid_parameter_handler]) + if test $ac_cv_func__set_invalid_parameter_handler = yes; then + HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 + AC_DEFINE([HAVE_MSVC_INVALID_PARAMETER_HANDLER], [1], + [Define to 1 on MSVC platforms that have the "invalid parameter handler" + concept.]) + else + HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 + fi + AC_SUBST([HAVE_MSVC_INVALID_PARAMETER_HANDLER]) +]) diff --git a/devspec.en_US/project/recutils/m4/msvc-nothrow.m4 b/devspec.en_US/project/recutils/m4/msvc-nothrow.m4 new file mode 100755 index 0000000..7e73b40 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/msvc-nothrow.m4 @@ -0,0 +1,10 @@ +# msvc-nothrow.m4 serial 1 +dnl Copyright (C) 2011-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_MSVC_NOTHROW], +[ + AC_REQUIRE([gl_MSVC_INVAL]) +]) diff --git a/devspec.en_US/project/recutils/m4/multiarch.m4 b/devspec.en_US/project/recutils/m4/multiarch.m4 new file mode 100755 index 0000000..d48316e --- /dev/null +++ b/devspec.en_US/project/recutils/m4/multiarch.m4 @@ -0,0 +1,62 @@ +# multiarch.m4 serial 7 +dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Determine whether the compiler is or may be producing universal binaries. +# +# On Mac OS X 10.5 and later systems, the user can create libraries and +# executables that work on multiple system types--known as "fat" or +# "universal" binaries--by specifying multiple '-arch' options to the +# compiler but only a single '-arch' option to the preprocessor. Like +# this: +# +# ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ +# CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ +# CPP="gcc -E" CXXCPP="g++ -E" +# +# Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly. + +AC_DEFUN_ONCE([gl_MULTIARCH], +[ + dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN. + gl_cv_c_multiarch=no + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + ]])], + [ + dnl Check for potential -arch flags. It is not universal unless + dnl there are at least two -arch flags with different values. + arch= + prev= + for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do + if test -n "$prev"; then + case $word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$arch" || test "$arch" = "$word"; then + arch="$word" + else + gl_cv_c_multiarch=yes + fi + ;; + esac + prev= + else + if test "x$word" = "x-arch"; then + prev=arch + fi + fi + done + ]) + if test $gl_cv_c_multiarch = yes; then + APPLE_UNIVERSAL_BUILD=1 + else + APPLE_UNIVERSAL_BUILD=0 + fi + AC_SUBST([APPLE_UNIVERSAL_BUILD]) +]) diff --git a/devspec.en_US/project/recutils/m4/nl_langinfo.m4 b/devspec.en_US/project/recutils/m4/nl_langinfo.m4 new file mode 100755 index 0000000..66eee41 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/nl_langinfo.m4 @@ -0,0 +1,53 @@ +# nl_langinfo.m4 serial 6 +dnl Copyright (C) 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_NL_LANGINFO], +[ + AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) + AC_REQUIRE([gl_LANGINFO_H]) + AC_CHECK_FUNCS_ONCE([nl_langinfo]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + if test $ac_cv_func_nl_langinfo = yes; then + # On Irix 6.5, YESEXPR is defined, but nl_langinfo(YESEXPR) is broken. + AC_CACHE_CHECK([whether YESEXPR works], + [gl_cv_func_nl_langinfo_yesexpr_works], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM([[#include <langinfo.h> +]], [[return !*nl_langinfo(YESEXPR); +]])], + [gl_cv_func_nl_langinfo_yesexpr_works=yes], + [gl_cv_func_nl_langinfo_yesexpr_works=no], + [ + case "$host_os" in + # Guess no on irix systems. + irix*) gl_cv_func_nl_langinfo_yesexpr_works="guessing no";; + # Guess yes elsewhere. + *) gl_cv_func_nl_langinfo_yesexpr_works="guessing yes";; + esac + ]) + ]) + case $gl_cv_func_nl_langinfo_yesexpr_works in + *yes) FUNC_NL_LANGINFO_YESEXPR_WORKS=1 ;; + *) FUNC_NL_LANGINFO_YESEXPR_WORKS=0 ;; + esac + AC_DEFINE_UNQUOTED([FUNC_NL_LANGINFO_YESEXPR_WORKS], + [$FUNC_NL_LANGINFO_YESEXPR_WORKS], + [Define to 1 if nl_langinfo (YESEXPR) returns a non-empty string.]) + if test $HAVE_LANGINFO_CODESET = 1 \ + && test $HAVE_LANGINFO_T_FMT_AMPM = 1 \ + && test $HAVE_LANGINFO_ALTMON = 1 \ + && test $HAVE_LANGINFO_ERA = 1 \ + && test $FUNC_NL_LANGINFO_YESEXPR_WORKS = 1; then + : + else + REPLACE_NL_LANGINFO=1 + AC_DEFINE([REPLACE_NL_LANGINFO], [1], + [Define if nl_langinfo exists but is overridden by gnulib.]) + fi + else + HAVE_NL_LANGINFO=0 + fi +]) diff --git a/devspec.en_US/project/recutils/m4/nls.m4 b/devspec.en_US/project/recutils/m4/nls.m4 new file mode 100755 index 0000000..afdb9ca --- /dev/null +++ b/devspec.en_US/project/recutils/m4/nls.m4 @@ -0,0 +1,32 @@ +# nls.m4 serial 5 (gettext-0.18) +dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016 Free Software +dnl Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. +dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. + +AC_PREREQ([2.50]) + +AC_DEFUN([AM_NLS], +[ + AC_MSG_CHECKING([whether NLS is requested]) + dnl Default is enabled NLS + AC_ARG_ENABLE([nls], + [ --disable-nls do not use Native Language Support], + USE_NLS=$enableval, USE_NLS=yes) + AC_MSG_RESULT([$USE_NLS]) + AC_SUBST([USE_NLS]) +]) diff --git a/devspec.en_US/project/recutils/m4/nocrash.m4 b/devspec.en_US/project/recutils/m4/nocrash.m4 new file mode 100755 index 0000000..4d9f022 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/nocrash.m4 @@ -0,0 +1,131 @@ +# nocrash.m4 serial 5 +dnl Copyright (C) 2005, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Based on libsigsegv, from Bruno Haible and Paolo Bonzini. + +AC_PREREQ([2.13]) + +dnl Expands to some code for use in .c programs that will cause the configure +dnl test to exit instead of crashing. This is useful to avoid triggering +dnl action from a background debugger and to avoid core dumps. +dnl Usage: ... +dnl ]GL_NOCRASH[ +dnl ... +dnl int main() { nocrash_init(); ... } +AC_DEFUN([GL_NOCRASH],[[ +#include <stdlib.h> +#if defined __MACH__ && defined __APPLE__ +/* Avoid a crash on Mac OS X. */ +#include <mach/mach.h> +#include <mach/mach_error.h> +#include <mach/thread_status.h> +#include <mach/exception.h> +#include <mach/task.h> +#include <pthread.h> +/* The exception port on which our thread listens. */ +static mach_port_t our_exception_port; +/* The main function of the thread listening for exceptions of type + EXC_BAD_ACCESS. */ +static void * +mach_exception_thread (void *arg) +{ + /* Buffer for a message to be received. */ + struct { + mach_msg_header_t head; + mach_msg_body_t msgh_body; + char data[1024]; + } msg; + mach_msg_return_t retval; + /* Wait for a message on the exception port. */ + retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), + our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); + if (retval != MACH_MSG_SUCCESS) + abort (); + exit (1); +} +static void +nocrash_init (void) +{ + mach_port_t self = mach_task_self (); + /* Allocate a port on which the thread shall listen for exceptions. */ + if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) + == KERN_SUCCESS) { + /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ + if (mach_port_insert_right (self, our_exception_port, our_exception_port, + MACH_MSG_TYPE_MAKE_SEND) + == KERN_SUCCESS) { + /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting + for us. */ + exception_mask_t mask = EXC_MASK_BAD_ACCESS; + /* Create the thread listening on the exception port. */ + pthread_attr_t attr; + pthread_t thread; + if (pthread_attr_init (&attr) == 0 + && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 + && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { + pthread_attr_destroy (&attr); + /* Replace the exception port info for these exceptions with our own. + Note that we replace the exception port for the entire task, not only + for a particular thread. This has the effect that when our exception + port gets the message, the thread specific exception port has already + been asked, and we don't need to bother about it. + See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ + task_set_exception_ports (self, mask, our_exception_port, + EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); + } + } + } +} +#elif defined _WIN32 && ! defined __CYGWIN__ +/* Avoid a crash on native Windows. */ +#define WIN32_LEAN_AND_MEAN +#include <windows.h> +#include <winerror.h> +static LONG WINAPI +exception_filter (EXCEPTION_POINTERS *ExceptionInfo) +{ + switch (ExceptionInfo->ExceptionRecord->ExceptionCode) + { + case EXCEPTION_ACCESS_VIOLATION: + case EXCEPTION_IN_PAGE_ERROR: + case EXCEPTION_STACK_OVERFLOW: + case EXCEPTION_GUARD_PAGE: + case EXCEPTION_PRIV_INSTRUCTION: + case EXCEPTION_ILLEGAL_INSTRUCTION: + case EXCEPTION_DATATYPE_MISALIGNMENT: + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: + case EXCEPTION_NONCONTINUABLE_EXCEPTION: + exit (1); + } + return EXCEPTION_CONTINUE_SEARCH; +} +static void +nocrash_init (void) +{ + SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); +} +#else +/* Avoid a crash on POSIX systems. */ +#include <signal.h> +#include <unistd.h> +/* A POSIX signal handler. */ +static void +exception_handler (int sig) +{ + _exit (1); +} +static void +nocrash_init (void) +{ +#ifdef SIGSEGV + signal (SIGSEGV, exception_handler); +#endif +#ifdef SIGBUS + signal (SIGBUS, exception_handler); +#endif +} +#endif +]]) diff --git a/devspec.en_US/project/recutils/m4/nstrftime.m4 b/devspec.en_US/project/recutils/m4/nstrftime.m4 new file mode 100755 index 0000000..546c240 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/nstrftime.m4 @@ -0,0 +1,22 @@ +# serial 34 + +# Copyright (C) 1996-1997, 1999-2007, 2009-2019 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Written by Jim Meyering and Paul Eggert. + +AC_DEFUN([gl_FUNC_GNU_STRFTIME], +[ + # This defines (or not) HAVE_TZNAME and HAVE_TM_ZONE. + AC_REQUIRE([AC_STRUCT_TIMEZONE]) + + AC_REQUIRE([gl_TM_GMTOFF]) + + AC_CHECK_FUNCS_ONCE([tzset]) + + AC_DEFINE([my_strftime], [nstrftime], + [Define to the name of the strftime replacement function.]) +]) diff --git a/devspec.en_US/project/recutils/m4/obstack.m4 b/devspec.en_US/project/recutils/m4/obstack.m4 new file mode 100755 index 0000000..b56fca4 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/obstack.m4 @@ -0,0 +1,35 @@ +# See if we need to provide obstacks. + +dnl Copyright 1996-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This replaces Autoconf's AC_FUNC_OBSTACK. +dnl The Autoconf version should be marked obsolete at some point. + +AC_DEFUN([AC_FUNC_OBSTACK], + [AC_LIBSOURCES([obstack.h, obstack.c])dnl + AC_CACHE_CHECK([for obstacks that work with any size object], + [ac_cv_func_obstack], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include "obstack.h" + void *obstack_chunk_alloc (size_t n) { return 0; } + void obstack_chunk_free (void *p) { } + /* Check that an internal function returns size_t, not int. */ + size_t _obstack_memory_used (struct obstack *); + ]], + [[struct obstack mem; + obstack_init (&mem); + obstack_free (&mem, 0); + ]])], + [ac_cv_func_obstack=yes], + [ac_cv_func_obstack=no])]) + if test "$ac_cv_func_obstack" = yes; then + AC_DEFINE([HAVE_OBSTACK], 1, + [Define to 1 if the system has obstacks that work with any size object.]) + else + AC_LIBOBJ([obstack]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/off_t.m4 b/devspec.en_US/project/recutils/m4/off_t.m4 new file mode 100755 index 0000000..711a2d4 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/off_t.m4 @@ -0,0 +1,18 @@ +# off_t.m4 serial 1 +dnl Copyright (C) 2012-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Check whether to override the 'off_t' type. +dnl Set WINDOWS_64_BIT_OFF_T. + +AC_DEFUN([gl_TYPE_OFF_T], +[ + m4_ifdef([gl_LARGEFILE], [ + AC_REQUIRE([gl_LARGEFILE]) + ], [ + WINDOWS_64_BIT_OFF_T=0 + ]) + AC_SUBST([WINDOWS_64_BIT_OFF_T]) +]) diff --git a/devspec.en_US/project/recutils/m4/open-cloexec.m4 b/devspec.en_US/project/recutils/m4/open-cloexec.m4 new file mode 100755 index 0000000..52498d9 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/open-cloexec.m4 @@ -0,0 +1,21 @@ +# Test whether O_CLOEXEC is defined. + +dnl Copyright 2017-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_PREPROC_O_CLOEXEC], +[ + AC_CACHE_CHECK([for O_CLOEXEC], + [gl_cv_macro_O_CLOEXEC], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include <fcntl.h> + #ifndef O_CLOEXEC + choke me; + #endif + ]], + [[return O_CLOEXEC;]])], + [gl_cv_macro_O_CLOEXEC=yes], + [gl_cv_macro_O_CLOEXEC=no])]) +]) diff --git a/devspec.en_US/project/recutils/m4/open.m4 b/devspec.en_US/project/recutils/m4/open.m4 new file mode 100755 index 0000000..5d73f4d --- /dev/null +++ b/devspec.en_US/project/recutils/m4/open.m4 @@ -0,0 +1,95 @@ +# open.m4 serial 15 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_OPEN], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_PREPROC_O_CLOEXEC]) + case "$host_os" in + mingw* | pw*) + REPLACE_OPEN=1 + ;; + *) + dnl open("foo/") should not create a file when the file name has a + dnl trailing slash. FreeBSD only has the problem on symlinks. + AC_CHECK_FUNCS_ONCE([lstat]) + if test "$gl_cv_macro_O_CLOEXEC" != yes; then + REPLACE_OPEN=1 + fi + AC_CACHE_CHECK([whether open recognizes a trailing slash], + [gl_cv_func_open_slash], + [# Assume that if we have lstat, we can also check symlinks. + if test $ac_cv_func_lstat = yes; then + touch conftest.tmp + ln -s conftest.tmp conftest.lnk + fi + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <fcntl.h> +#if HAVE_UNISTD_H +# include <unistd.h> +#endif +int main () +{ + int result = 0; +#if HAVE_LSTAT + if (open ("conftest.lnk/", O_RDONLY) != -1) + result |= 1; +#endif + if (open ("conftest.sl/", O_CREAT, 0600) >= 0) + result |= 2; + return result; +}]])], + [gl_cv_func_open_slash=yes], + [gl_cv_func_open_slash=no], + [ +changequote(,)dnl + case "$host_os" in + freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) + gl_cv_func_open_slash="guessing no" ;; + *) + gl_cv_func_open_slash="guessing yes" ;; + esac +changequote([,])dnl + ]) + rm -f conftest.sl conftest.tmp conftest.lnk + ]) + case "$gl_cv_func_open_slash" in + *no) + AC_DEFINE([OPEN_TRAILING_SLASH_BUG], [1], + [Define to 1 if open() fails to recognize a trailing slash.]) + REPLACE_OPEN=1 + ;; + esac + ;; + esac + dnl Replace open() for supporting the gnulib-defined fchdir() function, + dnl to keep fchdir's bookkeeping up-to-date. + m4_ifdef([gl_FUNC_FCHDIR], [ + if test $REPLACE_OPEN = 0; then + gl_TEST_FCHDIR + if test $HAVE_FCHDIR = 0; then + REPLACE_OPEN=1 + fi + fi + ]) + dnl Replace open() for supporting the gnulib-defined O_NONBLOCK flag. + m4_ifdef([gl_NONBLOCKING_IO], [ + if test $REPLACE_OPEN = 0; then + gl_NONBLOCKING_IO + if test $gl_cv_have_open_O_NONBLOCK != yes; then + REPLACE_OPEN=1 + fi + fi + ]) +]) + +# Prerequisites of lib/open.c. +AC_DEFUN([gl_PREREQ_OPEN], +[ + AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T]) + : +]) diff --git a/devspec.en_US/project/recutils/m4/parse-datetime.m4 b/devspec.en_US/project/recutils/m4/parse-datetime.m4 new file mode 100755 index 0000000..597a44c --- /dev/null +++ b/devspec.en_US/project/recutils/m4/parse-datetime.m4 @@ -0,0 +1,39 @@ +# parse-datetime.m4 serial 22 +dnl Copyright (C) 2002-2006, 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Define HAVE_COMPOUND_LITERALS if the C compiler supports compound literals +dnl as in ISO C99. +dnl Note that compound literals such as (struct s) { 3, 4 } can be used for +dnl initialization of stack-allocated variables, but are not constant +dnl expressions and therefore cannot be used as initializer for global or +dnl static variables (even though gcc supports this in pre-C99 mode). +AC_DEFUN([gl_C_COMPOUND_LITERALS], +[ + AC_CACHE_CHECK([for compound literals], [gl_cv_compound_literals], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[struct s { int i, j; };]], + [[struct s t = (struct s) { 3, 4 }; + if (t.i != 0) return 0;]])], + gl_cv_compound_literals=yes, + gl_cv_compound_literals=no)]) + if test $gl_cv_compound_literals = yes; then + AC_DEFINE([HAVE_COMPOUND_LITERALS], [1], + [Define if you have compound literals.]) + fi +]) + +AC_DEFUN([gl_PARSE_DATETIME], +[ + dnl Prerequisites of lib/parse-datetime.h. + AC_REQUIRE([AM_STDBOOL_H]) + AC_REQUIRE([gl_TIMESPEC]) + + dnl Prerequisites of lib/parse-datetime.y. + AC_REQUIRE([gl_BISON]) + AC_REQUIRE([gl_C_COMPOUND_LITERALS]) + AC_STRUCT_TIMEZONE + AC_REQUIRE([gl_CLOCK_TIME]) + AC_REQUIRE([gl_TM_GMTOFF]) +]) diff --git a/devspec.en_US/project/recutils/m4/pathmax.m4 b/devspec.en_US/project/recutils/m4/pathmax.m4 new file mode 100755 index 0000000..0770aca --- /dev/null +++ b/devspec.en_US/project/recutils/m4/pathmax.m4 @@ -0,0 +1,42 @@ +# pathmax.m4 serial 11 +dnl Copyright (C) 2002-2003, 2005-2006, 2009-2019 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_PATHMAX], +[ + dnl Prerequisites of lib/pathmax.h. + AC_CHECK_HEADERS_ONCE([sys/param.h]) +]) + +# Expands to a piece of C program that defines PATH_MAX in the same way as +# "pathmax.h" will do. +AC_DEFUN([gl_PATHMAX_SNIPPET], [[ +/* Arrange to define PATH_MAX, like "pathmax.h" does. */ +#if HAVE_UNISTD_H +# include <unistd.h> +#endif +#include <limits.h> +#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN +# include <sys/param.h> +#endif +#if !defined PATH_MAX && defined MAXPATHLEN +# define PATH_MAX MAXPATHLEN +#endif +#ifdef __hpux +# undef PATH_MAX +# define PATH_MAX 1024 +#endif +#if defined _WIN32 && ! defined __CYGWIN__ +# undef PATH_MAX +# define PATH_MAX 260 +#endif +]]) + +# Prerequisites of gl_PATHMAX_SNIPPET. +AC_DEFUN([gl_PATHMAX_SNIPPET_PREREQ], +[ + AC_CHECK_HEADERS_ONCE([unistd.h sys/param.h]) +]) diff --git a/devspec.en_US/project/recutils/m4/po.m4 b/devspec.en_US/project/recutils/m4/po.m4 new file mode 100755 index 0000000..c5a2f6b --- /dev/null +++ b/devspec.en_US/project/recutils/m4/po.m4 @@ -0,0 +1,453 @@ +# po.m4 serial 24 (gettext-0.19) +dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. +dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. + +AC_PREREQ([2.60]) + +dnl Checks for all prerequisites of the po subdirectory. +AC_DEFUN([AM_PO_SUBDIRS], +[ + AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AC_PROG_MKDIR_P])dnl + AC_REQUIRE([AC_PROG_SED])dnl + AC_REQUIRE([AM_NLS])dnl + + dnl Release version of the gettext macros. This is used to ensure that + dnl the gettext macros and po/Makefile.in.in are in sync. + AC_SUBST([GETTEXT_MACRO_VERSION], [0.19]) + + dnl Perform the following tests also if --disable-nls has been given, + dnl because they are needed for "make dist" to work. + + dnl Search for GNU msgfmt in the PATH. + dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. + dnl The second test excludes FreeBSD msgfmt. + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) + + dnl Test whether it is GNU msgfmt >= 0.15. +changequote(,)dnl + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([MSGFMT_015]) +changequote(,)dnl + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([GMSGFMT_015]) + + dnl Search for GNU xgettext 0.12 or newer in the PATH. + dnl The first test excludes Solaris xgettext and early GNU xgettext versions. + dnl The second test excludes FreeBSD xgettext. + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + dnl Remove leftover from FreeBSD xgettext call. + rm -f messages.po + + dnl Test whether it is GNU xgettext >= 0.15. +changequote(,)dnl + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac +changequote([,])dnl + AC_SUBST([XGETTEXT_015]) + + dnl Search for GNU msgmerge 0.11 or newer in the PATH. + AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, + [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) + + dnl Installation directories. + dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we + dnl have to define it here, so that it can be used in po/Makefile. + test -n "$localedir" || localedir='${datadir}/locale' + AC_SUBST([localedir]) + + dnl Support for AM_XGETTEXT_OPTION. + test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= + AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) + + AC_CONFIG_COMMANDS([po-directories], [[ + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + gt_tab=`printf '\t'` + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done]], + [# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + ]) +]) + +dnl Postprocesses a Makefile in a directory containing PO files. +AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], +[ + # When this code is run, in config.status, two variables have already been + # set: + # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, + # - LINGUAS is the value of the environment variable LINGUAS at configure + # time. + +changequote(,)dnl + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + # Find a way to echo strings without interpreting backslash. + if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='echo' + else + if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='printf %s\n' + else + echo_func () { + cat <<EOT +$* +EOT + } + gt_echo='echo_func' + fi + fi + + # A sed script that extracts the value of VARIABLE from a Makefile. + tab=`printf '\t'` + sed_x_variable=' +# Test if the hold space is empty. +x +s/P/P/ +x +ta +# Yes it was empty. Look if we have the expected variable definition. +/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=/{ + # Seen the first line of the variable definition. + s/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=// + ba +} +bd +:a +# Here we are processing a line from the variable definition. +# Remove comment, more precisely replace it with a space. +s/#.*$/ / +# See if the line ends in a backslash. +tb +:b +s/\\$// +# Print the line, without the trailing backslash. +p +tc +# There was no trailing backslash. The end of the variable definition is +# reached. Clear the hold space. +s/^.*$// +x +bd +:c +# A trailing backslash means that the variable definition continues in the +# next line. Put a nonempty string into the hold space to indicate this. +s/^.*$/P/ +x +:d +' +changequote([,])dnl + + # Set POTFILES to the value of the Makefile variable POTFILES. + sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'` + POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"` + # Compute POTFILES_DEPS as + # $(foreach file, $(POTFILES), $(top_srcdir)/$(file)) + POTFILES_DEPS= + for file in $POTFILES; do + POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file" + done + POMAKEFILEDEPS="" + + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS. + sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'` + ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"` + fi + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + # Compute PROPERTIESFILES + # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties) + # Compute CLASSFILES + # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class) + # Compute QMFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm) + # Compute MSGFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg) + # Compute RESOURCESDLLFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + PROPERTIESFILES= + CLASSFILES= + QMFILES= + MSGFILES= + RESOURCESDLLFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties" + CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class" + QMFILES="$QMFILES $srcdirpre$lang.qm" + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` + MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg" + frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` + RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + JAVACATALOGS= + QTCATALOGS= + TCLCATALOGS= + CSHARPCATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties" + QTCATALOGS="$QTCATALOGS $lang.qm" + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` + TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg" + frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` + CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll" + done + fi + + sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp" + tab=`printf '\t'` + if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` + cat >> "$ac_file.tmp" <<EOF +$frobbedlang.msg: $lang.po +${tab}@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \ +${tab}\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } +EOF + done + fi + if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` + cat >> "$ac_file.tmp" <<EOF +$frobbedlang/\$(DOMAIN).resources.dll: $lang.po +${tab}@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \ +${tab}\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } +EOF + done + fi + if test -n "$POMAKEFILEDEPS"; then + cat >> "$ac_file.tmp" <<EOF +Makefile: $POMAKEFILEDEPS +EOF + fi + mv "$ac_file.tmp" "$ac_file" +]) + +dnl Initializes the accumulator used by AM_XGETTEXT_OPTION. +AC_DEFUN([AM_XGETTEXT_OPTION_INIT], +[ + XGETTEXT_EXTRA_OPTIONS= +]) + +dnl Registers an option to be passed to xgettext in the po subdirectory. +AC_DEFUN([AM_XGETTEXT_OPTION], +[ + AC_REQUIRE([AM_XGETTEXT_OPTION_INIT]) + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1" +]) diff --git a/devspec.en_US/project/recutils/m4/posix_spawn.m4 b/devspec.en_US/project/recutils/m4/posix_spawn.m4 new file mode 100755 index 0000000..1e2533c --- /dev/null +++ b/devspec.en_US/project/recutils/m4/posix_spawn.m4 @@ -0,0 +1,545 @@ +# posix_spawn.m4 serial 15 +dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Tests whether the entire posix_spawn facility is available. +AC_DEFUN([gl_POSIX_SPAWN], +[ + AC_REQUIRE([gl_POSIX_SPAWN_BODY]) +]) + +AC_DEFUN([gl_POSIX_SPAWN_BODY], +[ + AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) + AC_REQUIRE([gl_HAVE_POSIX_SPAWN]) + dnl Assume that when the main function exists, all the others, + dnl except posix_spawnattr_{get,set}sched*, are available as well. + dnl AC_CHECK_FUNCS_ONCE([posix_spawnp]) + dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_init]) + dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addclose]) + dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_adddup2]) + dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addopen]) + dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_destroy]) + dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_init]) + dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getflags]) + dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setflags]) + dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getpgroup]) + dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setpgroup]) + dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getsigdefault]) + dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setsigdefault]) + dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getsigmask]) + dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setsigmask]) + dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_destroy]) + if test $ac_cv_func_posix_spawn = yes; then + m4_ifdef([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR], + [dnl Module 'posix_spawn_file_actions_addchdir' is present. + AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addchdir_np]) + if test $ac_cv_func_posix_spawn_file_actions_addchdir_np = no; then + dnl In order to implement the posix_spawn_file_actions_addchdir + dnl function, we need to replace the entire posix_spawn facility. + REPLACE_POSIX_SPAWN=1 + fi + ]) + if test $REPLACE_POSIX_SPAWN = 0; then + gl_POSIX_SPAWN_WORKS + case "$gl_cv_func_posix_spawn_works" in + *yes) + dnl Assume that these functions are available if POSIX_SPAWN_SETSCHEDULER + dnl evaluates to nonzero. + dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getschedpolicy]) + dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setschedpolicy]) + AC_CACHE_CHECK([whether posix_spawnattr_setschedpolicy is supported], + [gl_cv_func_spawnattr_setschedpolicy], + [AC_EGREP_CPP([POSIX scheduling supported], [ +#include <spawn.h> +#if POSIX_SPAWN_SETSCHEDULER + POSIX scheduling supported +#endif +], + [gl_cv_func_spawnattr_setschedpolicy=yes], + [gl_cv_func_spawnattr_setschedpolicy=no]) + ]) + dnl Assume that these functions are available if POSIX_SPAWN_SETSCHEDPARAM + dnl evaluates to nonzero. + dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getschedparam]) + dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setschedparam]) + AC_CACHE_CHECK([whether posix_spawnattr_setschedparam is supported], + [gl_cv_func_spawnattr_setschedparam], + [AC_EGREP_CPP([POSIX scheduling supported], [ +#include <spawn.h> +#if POSIX_SPAWN_SETSCHEDPARAM + POSIX scheduling supported +#endif +], + [gl_cv_func_spawnattr_setschedparam=yes], + [gl_cv_func_spawnattr_setschedparam=no]) + ]) + ;; + *) REPLACE_POSIX_SPAWN=1 ;; + esac + fi + fi + if test $ac_cv_func_posix_spawn != yes || test $REPLACE_POSIX_SPAWN = 1; then + AC_DEFINE([REPLACE_POSIX_SPAWN], [1], + [Define if gnulib uses its own posix_spawn and posix_spawnp functions.]) + fi +]) + +dnl Test whether posix_spawn actually works. +dnl posix_spawn on AIX 5.3..6.1 has two bugs: +dnl 1) When it fails to execute the program, the child process exits with +dnl exit() rather than _exit(), which causes the stdio buffers to be +dnl flushed. Reported by Rainer Tammer. +dnl 2) The posix_spawn_file_actions_addopen function does not support file +dnl names that contain a '*'. +dnl posix_spawn on AIX 5.3..6.1 has also a third bug: It does not work +dnl when POSIX threads are used. But we don't test against this bug here. +AC_DEFUN([gl_POSIX_SPAWN_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether posix_spawn works], [gl_cv_func_posix_spawn_works], + [if test $cross_compiling = no; then + AC_LINK_IFELSE([AC_LANG_SOURCE([[ +#include <errno.h> +#include <fcntl.h> +#include <signal.h> +#include <spawn.h> +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/wait.h> + +extern char **environ; + +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +#ifndef WTERMSIG +# define WTERMSIG(x) ((x) & 0x7f) +#endif +#ifndef WIFEXITED +# define WIFEXITED(x) (WTERMSIG (x) == 0) +#endif +#ifndef WEXITSTATUS +# define WEXITSTATUS(x) (((x) >> 8) & 0xff) +#endif + +#define CHILD_PROGRAM_FILENAME "/non/exist/ent" + +static int +fd_safer (int fd) +{ + if (0 <= fd && fd <= 2) + { + int f = fd_safer (dup (fd)); + int e = errno; + close (fd); + errno = e; + fd = f; + } + + return fd; +} + +int +main () +{ + char *argv[2] = { CHILD_PROGRAM_FILENAME, NULL }; + int ofd[2]; + sigset_t blocked_signals; + sigset_t fatal_signal_set; + posix_spawn_file_actions_t actions; + bool actions_allocated; + posix_spawnattr_t attrs; + bool attrs_allocated; + int err; + pid_t child; + int status; + int exitstatus; + + setvbuf (stdout, NULL, _IOFBF, 0); + puts ("This should be seen only once."); + if (pipe (ofd) < 0 || (ofd[1] = fd_safer (ofd[1])) < 0) + { + perror ("cannot create pipe"); + exit (1); + } + sigprocmask (SIG_SETMASK, NULL, &blocked_signals); + sigemptyset (&fatal_signal_set); + sigaddset (&fatal_signal_set, SIGINT); + sigaddset (&fatal_signal_set, SIGTERM); + sigaddset (&fatal_signal_set, SIGHUP); + sigaddset (&fatal_signal_set, SIGPIPE); + sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); + actions_allocated = false; + attrs_allocated = false; + if ((err = posix_spawn_file_actions_init (&actions)) != 0 + || (actions_allocated = true, + (err = posix_spawn_file_actions_adddup2 (&actions, ofd[0], STDIN_FILENO)) != 0 + || (err = posix_spawn_file_actions_addclose (&actions, ofd[0])) != 0 + || (err = posix_spawn_file_actions_addclose (&actions, ofd[1])) != 0 + || (err = posix_spawnattr_init (&attrs)) != 0 + || (attrs_allocated = true, + (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0 + || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0) + || (err = posix_spawnp (&child, CHILD_PROGRAM_FILENAME, &actions, &attrs, argv, environ)) != 0)) + { + if (actions_allocated) + posix_spawn_file_actions_destroy (&actions); + if (attrs_allocated) + posix_spawnattr_destroy (&attrs); + sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); + if (err == ENOENT) + return 0; + else + { + errno = err; + perror ("subprocess failed"); + exit (1); + } + } + posix_spawn_file_actions_destroy (&actions); + posix_spawnattr_destroy (&attrs); + sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); + close (ofd[0]); + close (ofd[1]); + status = 0; + while (waitpid (child, &status, 0) != child) + ; + if (!WIFEXITED (status)) + { + fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); + exit (1); + } + exitstatus = WEXITSTATUS (status); + if (exitstatus != 127) + { + fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); + exit (1); + } + return 0; +} +]])], + [if test -s conftest$ac_exeext \ + && ./conftest$ac_exeext > conftest.out \ + && echo 'This should be seen only once.' > conftest.ok \ + && cmp conftest.out conftest.ok >/dev/null 2>&1; then + gl_cv_func_posix_spawn_works=yes + else + gl_cv_func_posix_spawn_works=no + fi], + [gl_cv_func_posix_spawn_works=no]) + if test $gl_cv_func_posix_spawn_works = yes; then + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +/* Test whether posix_spawn_file_actions_addopen supports filename arguments + that contain special characters such as '*'. */ + +#include <errno.h> +#include <fcntl.h> +#include <signal.h> +#include <spawn.h> +#include <stdbool.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/wait.h> + +extern char **environ; + +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +#ifndef WTERMSIG +# define WTERMSIG(x) ((x) & 0x7f) +#endif +#ifndef WIFEXITED +# define WIFEXITED(x) (WTERMSIG (x) == 0) +#endif +#ifndef WEXITSTATUS +# define WEXITSTATUS(x) (((x) >> 8) & 0xff) +#endif + +#define CHILD_PROGRAM_FILENAME "conftest" +#define DATA_FILENAME "conftest%=*#?" + +static int +parent_main (void) +{ + FILE *fp; + char *argv[3] = { CHILD_PROGRAM_FILENAME, "-child", NULL }; + posix_spawn_file_actions_t actions; + bool actions_allocated; + int err; + pid_t child; + int status; + int exitstatus; + + /* Create a data file with specific contents. */ + fp = fopen (DATA_FILENAME, "wb"); + if (fp == NULL) + { + perror ("cannot create data file"); + return 1; + } + fwrite ("Halle Potta", 1, 11, fp); + if (fflush (fp) || fclose (fp)) + { + perror ("cannot prepare data file"); + return 2; + } + + /* Avoid reading from our stdin, as it could block. */ + freopen ("/dev/null", "rb", stdin); + + /* Test whether posix_spawn_file_actions_addopen with this file name + actually works, but spawning a child that reads from this file. */ + actions_allocated = false; + if ((err = posix_spawn_file_actions_init (&actions)) != 0 + || (actions_allocated = true, + (err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, DATA_FILENAME, O_RDONLY, 0600)) != 0 + || (err = posix_spawn (&child, CHILD_PROGRAM_FILENAME, &actions, NULL, argv, environ)) != 0)) + { + if (actions_allocated) + posix_spawn_file_actions_destroy (&actions); + errno = err; + perror ("subprocess failed"); + return 3; + } + posix_spawn_file_actions_destroy (&actions); + status = 0; + while (waitpid (child, &status, 0) != child) + ; + if (!WIFEXITED (status)) + { + fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); + return 4; + } + exitstatus = WEXITSTATUS (status); + if (exitstatus != 0) + { + fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); + return 5; + } + return 0; +} + +static int +child_main (void) +{ + char buf[1024]; + + /* See if reading from STDIN_FILENO yields the expected contents. */ + if (fread (buf, 1, sizeof (buf), stdin) == 11 + && memcmp (buf, "Halle Potta", 11) == 0) + return 0; + else + return 8; +} + +static void +cleanup_then_die (int sig) +{ + /* Clean up data file. */ + unlink (DATA_FILENAME); + + /* Re-raise the signal and die from it. */ + signal (sig, SIG_DFL); + raise (sig); +} + +int +main (int argc, char *argv[]) +{ + int exitstatus; + + if (!(argc > 1 && strcmp (argv[1], "-child") == 0)) + { + /* This is the parent process. */ + signal (SIGINT, cleanup_then_die); + signal (SIGTERM, cleanup_then_die); + #ifdef SIGHUP + signal (SIGHUP, cleanup_then_die); + #endif + + exitstatus = parent_main (); + } + else + { + /* This is the child process. */ + + exitstatus = child_main (); + } + unlink (DATA_FILENAME); + return exitstatus; +} +]])], + [], + [gl_cv_func_posix_spawn_works=no]) + fi + else + case "$host_os" in + aix*) gl_cv_func_posix_spawn_works="guessing no";; + *) gl_cv_func_posix_spawn_works="guessing yes";; + esac + fi + ]) +]) + +# Prerequisites of lib/spawni.c. +AC_DEFUN([gl_PREREQ_POSIX_SPAWN_INTERNAL], +[ + AC_CHECK_HEADERS([paths.h]) + AC_CHECK_FUNCS([confstr sched_setparam sched_setscheduler setegid seteuid vfork]) +]) + +AC_DEFUN([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE], +[ + AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + gl_POSIX_SPAWN + if test $REPLACE_POSIX_SPAWN = 1; then + REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=1 + else + dnl On Solaris 11.0, posix_spawn_file_actions_addclose succeeds even + dnl if the fd argument is out of range. + AC_CACHE_CHECK([whether posix_spawn_file_actions_addclose works], + [gl_cv_func_posix_spawn_file_actions_addclose_works], + [AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <spawn.h> +int main () +{ + posix_spawn_file_actions_t actions; + if (posix_spawn_file_actions_init (&actions) != 0) + return 1; + if (posix_spawn_file_actions_addclose (&actions, 10000000) == 0) + return 2; + return 0; +}]])], + [gl_cv_func_posix_spawn_file_actions_addclose_works=yes], + [gl_cv_func_posix_spawn_file_actions_addclose_works=no], + [# Guess no on Solaris, yes otherwise. + case "$host_os" in + solaris*) gl_cv_func_posix_spawn_file_actions_addclose_works="guessing no" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_posix_spawn_file_actions_addclose_works="guessing no" ;; + *) gl_cv_func_posix_spawn_file_actions_addclose_works="guessing yes" ;; + esac + ]) + ]) + case "$gl_cv_func_posix_spawn_file_actions_addclose_works" in + *yes) ;; + *) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=1 ;; + esac + fi +]) + +AC_DEFUN([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2], +[ + AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + gl_POSIX_SPAWN + if test $REPLACE_POSIX_SPAWN = 1; then + REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=1 + else + dnl On Solaris 11.0, posix_spawn_file_actions_adddup2 succeeds even + dnl if the fd argument is out of range. + AC_CACHE_CHECK([whether posix_spawn_file_actions_adddup2 works], + [gl_cv_func_posix_spawn_file_actions_adddup2_works], + [AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <spawn.h> +int main () +{ + posix_spawn_file_actions_t actions; + if (posix_spawn_file_actions_init (&actions) != 0) + return 1; + if (posix_spawn_file_actions_adddup2 (&actions, 10000000, 2) == 0) + return 2; + return 0; +}]])], + [gl_cv_func_posix_spawn_file_actions_adddup2_works=yes], + [gl_cv_func_posix_spawn_file_actions_adddup2_works=no], + [# Guess no on Solaris, yes otherwise. + case "$host_os" in + solaris*) gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing no";; + # Guess no on native Windows. + mingw*) gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing no" ;; + *) gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing yes";; + esac + ]) + ]) + case "$gl_cv_func_posix_spawn_file_actions_adddup2_works" in + *yes) ;; + *) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=1 ;; + esac + fi +]) + +AC_DEFUN([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN], +[ + AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + gl_POSIX_SPAWN + if test $REPLACE_POSIX_SPAWN = 1; then + REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1 + else + dnl On Solaris 11.0, posix_spawn_file_actions_addopen succeeds even + dnl if the fd argument is out of range. + AC_CACHE_CHECK([whether posix_spawn_file_actions_addopen works], + [gl_cv_func_posix_spawn_file_actions_addopen_works], + [AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <spawn.h> +#include <fcntl.h> +int main () +{ + posix_spawn_file_actions_t actions; + if (posix_spawn_file_actions_init (&actions) != 0) + return 1; + if (posix_spawn_file_actions_addopen (&actions, 10000000, "foo", 0, O_RDONLY) + == 0) + return 2; + return 0; +}]])], + [gl_cv_func_posix_spawn_file_actions_addopen_works=yes], + [gl_cv_func_posix_spawn_file_actions_addopen_works=no], + [# Guess no on Solaris, yes otherwise. + case "$host_os" in + solaris*) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no";; + # Guess no on native Windows. + mingw*) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no" ;; + *) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing yes";; + esac + ]) + ]) + case "$gl_cv_func_posix_spawn_file_actions_addopen_works" in + *yes) ;; + *) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1 ;; + esac + fi +]) diff --git a/devspec.en_US/project/recutils/m4/printf-frexp.m4 b/devspec.en_US/project/recutils/m4/printf-frexp.m4 new file mode 100755 index 0000000..4d4aae5 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/printf-frexp.m4 @@ -0,0 +1,38 @@ +# printf-frexp.m4 serial 5 +dnl Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Check how to define printf_frexp() without linking with libm. + +AC_DEFUN([gl_FUNC_PRINTF_FREXP], +[ + AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM]) + if test $gl_cv_func_frexp_no_libm = yes; then + gl_FUNC_FREXP_WORKS + case "$gl_cv_func_frexp_works" in + *yes) + AC_DEFINE([HAVE_FREXP_IN_LIBC], [1], + [Define if the frexp function is available in libc.]) + ;; + esac + fi + + AC_CACHE_CHECK([whether ldexp can be used without linking with libm], + [gl_cv_func_ldexp_no_libm], + [ + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <math.h> + double x; + int y;]], + [[return ldexp (x, y) < 1;]])], + [gl_cv_func_ldexp_no_libm=yes], + [gl_cv_func_ldexp_no_libm=no]) + ]) + if test $gl_cv_func_ldexp_no_libm = yes; then + AC_DEFINE([HAVE_LDEXP_IN_LIBC], [1], + [Define if the ldexp function is available in libc.]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/printf-frexpl.m4 b/devspec.en_US/project/recutils/m4/printf-frexpl.m4 new file mode 100755 index 0000000..6835612 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/printf-frexpl.m4 @@ -0,0 +1,48 @@ +# printf-frexpl.m4 serial 10 +dnl Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Check how to define printf_frexpl() without linking with libm. + +AC_DEFUN([gl_FUNC_PRINTF_FREXPL], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) + + dnl Subset of gl_FUNC_FREXPL_NO_LIBM. + gl_CHECK_FREXPL_NO_LIBM + if test $gl_cv_func_frexpl_no_libm = yes; then + gl_FUNC_FREXPL_WORKS + case "$gl_cv_func_frexpl_works" in + *yes) gl_func_frexpl_no_libm=yes ;; + *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; + esac + else + gl_func_frexpl_no_libm=no + dnl Set REPLACE_FREXPL here because the system may have frexpl in libm. + REPLACE_FREXPL=1 + fi + if test $gl_func_frexpl_no_libm = yes; then + AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1], + [Define if the frexpl function is available in libc.]) + dnl Also check whether it's declared. + dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>. + AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]]) + fi + + gl_CHECK_LDEXPL_NO_LIBM + if test $gl_cv_func_ldexpl_no_libm = yes; then + gl_FUNC_LDEXPL_WORKS + case "$gl_cv_func_ldexpl_works" in + *yes) + AC_DEFINE([HAVE_LDEXPL_IN_LIBC], [1], + [Define if the ldexpl function is available in libc.]) + dnl Also check whether it's declared. + dnl Mac OS X 10.3 has ldexpl() in libc but doesn't declare it in <math.h>. + AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [[#include <math.h>]]) + ;; + esac + fi +]) diff --git a/devspec.en_US/project/recutils/m4/printf-posix-rpl.m4 b/devspec.en_US/project/recutils/m4/printf-posix-rpl.m4 new file mode 100755 index 0000000..b98da6f --- /dev/null +++ b/devspec.en_US/project/recutils/m4/printf-posix-rpl.m4 @@ -0,0 +1,26 @@ +# printf-posix-rpl.m4 serial 4 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_PRINTF_POSIX], +[ + AC_REQUIRE([gl_FUNC_VFPRINTF_POSIX]) + if test $gl_cv_func_vfprintf_posix = no; then + gl_REPLACE_PRINTF + fi +]) + +AC_DEFUN([gl_REPLACE_PRINTF], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_REQUIRE([gl_ASM_SYMBOL_PREFIX]) + AC_LIBOBJ([printf]) + REPLACE_PRINTF=1 + AC_DEFINE([REPLACE_PRINTF_POSIX], [1], + [Define if printf is overridden by a POSIX compliant gnulib implementation.]) + gl_PREREQ_PRINTF +]) + +AC_DEFUN([gl_PREREQ_PRINTF], [:]) diff --git a/devspec.en_US/project/recutils/m4/printf.m4 b/devspec.en_US/project/recutils/m4/printf.m4 new file mode 100755 index 0000000..1db13bf --- /dev/null +++ b/devspec.en_US/project/recutils/m4/printf.m4 @@ -0,0 +1,1632 @@ +# printf.m4 serial 59 +dnl Copyright (C) 2003, 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Test whether the *printf family of functions supports the 'j', 'z', 't', +dnl 'L' size specifiers. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_sizes_c99. + +AC_DEFUN([gl_PRINTF_SIZES_C99], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports size specifiers as in C99], + [gl_cv_func_printf_sizes_c99], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#if HAVE_STDINT_H_WITH_UINTMAX +# include <stdint.h> +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +# include <inttypes.h> +#endif +static char buf[100]; +int main () +{ + int result = 0; +#if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX + buf[0] = '\0'; + if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0 + || strcmp (buf, "12345671 33") != 0) + result |= 1; +#else + result |= 1; +#endif + buf[0] = '\0'; + if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0 + || strcmp (buf, "12345672 33") != 0) + result |= 2; + buf[0] = '\0'; + if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0 + || strcmp (buf, "12345673 33") != 0) + result |= 4; + buf[0] = '\0'; + if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0 + || strcmp (buf, "1.5 33") != 0) + result |= 8; + return result; +}]])], + [gl_cv_func_printf_sizes_c99=yes], + [gl_cv_func_printf_sizes_c99=no], + [ + case "$host_os" in +changequote(,)dnl + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4].*) gl_cv_func_printf_sizes_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on Mac OS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_sizes_c99="guessing no";; + darwin*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on OpenBSD >= 3.9. + openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) + gl_cv_func_printf_sizes_c99="guessing no";; + openbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on Solaris >= 2.10. + solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; + solaris*) gl_cv_func_printf_sizes_c99="guessing no";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_printf_sizes_c99="guessing no";; + netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; +changequote([,])dnl + # Guess yes on MSVC, no on mingw. + mingw*) AC_EGREP_CPP([Known], [ +#ifdef _MSC_VER + Known +#endif + ], + [gl_cv_func_printf_sizes_c99="guessing yes"], + [gl_cv_func_printf_sizes_c99="guessing no"]) + ;; + # If we don't know, assume the worst. + *) gl_cv_func_printf_sizes_c99="guessing no";; + esac + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports 'long double' +dnl arguments together with the 'L' size specifier. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_long_double. + +AC_DEFUN([gl_PRINTF_LONG_DOUBLE], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports 'long double' arguments], + [gl_cv_func_printf_long_double], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +static char buf[10000]; +int main () +{ + int result = 0; + buf[0] = '\0'; + if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.750000 33") != 0) + result |= 1; + buf[0] = '\0'; + if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.750000e+00 33") != 0) + result |= 2; + buf[0] = '\0'; + if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.75 33") != 0) + result |= 4; + return result; +}]])], + [gl_cv_func_printf_long_double=yes], + [gl_cv_func_printf_long_double=no], + [case "$host_os" in + beos*) gl_cv_func_printf_long_double="guessing no";; + # Guess yes on MSVC, no on mingw. + mingw*) AC_EGREP_CPP([Known], [ +#ifdef _MSC_VER + Known +#endif + ], + [gl_cv_func_printf_long_double="guessing yes"], + [gl_cv_func_printf_long_double="guessing no"]) + ;; + *) gl_cv_func_printf_long_double="guessing yes";; + esac + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports infinite and NaN +dnl 'double' arguments and negative zero arguments in the %f, %e, %g +dnl directives. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_infinite. + +AC_DEFUN([gl_PRINTF_INFINITE], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports infinite 'double' arguments], + [gl_cv_func_printf_infinite], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +static int +strisnan (const char *string, size_t start_index, size_t end_index) +{ + if (start_index < end_index) + { + if (string[start_index] == '-') + start_index++; + if (start_index + 3 <= end_index + && memcmp (string + start_index, "nan", 3) == 0) + { + start_index += 3; + if (start_index == end_index + || (string[start_index] == '(' && string[end_index - 1] == ')')) + return 1; + } + } + return 0; +} +static int +have_minus_zero () +{ + static double plus_zero = 0.0; + double minus_zero = - plus_zero; + return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; +} +static char buf[10000]; +static double zero = 0.0; +int main () +{ + int result = 0; + if (sprintf (buf, "%f", 1.0 / zero) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 1; + if (sprintf (buf, "%f", -1.0 / zero) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 1; + if (sprintf (buf, "%f", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + if (sprintf (buf, "%e", 1.0 / zero) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 4; + if (sprintf (buf, "%e", -1.0 / zero) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 4; + if (sprintf (buf, "%e", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 8; + if (sprintf (buf, "%g", 1.0 / zero) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 16; + if (sprintf (buf, "%g", -1.0 / zero) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 16; + if (sprintf (buf, "%g", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 32; + /* This test fails on HP-UX 10.20. */ + if (have_minus_zero ()) + if (sprintf (buf, "%g", - zero) < 0 + || strcmp (buf, "-0") != 0) + result |= 64; + return result; +}]])], + [gl_cv_func_printf_infinite=yes], + [gl_cv_func_printf_infinite=no], + [ + case "$host_os" in +changequote(,)dnl + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5].*) gl_cv_func_printf_infinite="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on Mac OS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";; + darwin*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";; + hpux*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_printf_infinite="guessing no";; + netbsd*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_infinite="guessing yes";; +changequote([,])dnl + # Guess yes on MSVC, no on mingw. + mingw*) AC_EGREP_CPP([Known], [ +#ifdef _MSC_VER + Known +#endif + ], + [gl_cv_func_printf_infinite="guessing yes"], + [gl_cv_func_printf_infinite="guessing no"]) + ;; + # If we don't know, assume the worst. + *) gl_cv_func_printf_infinite="guessing no";; + esac + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports infinite and NaN +dnl 'long double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_infinite_long_double. + +AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE], +[ + AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_BIGENDIAN]) + AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + dnl The user can set or unset the variable gl_printf_safe to indicate + dnl that he wishes a safe handling of non-IEEE-754 'long double' values. + if test -n "$gl_printf_safe"; then + AC_DEFINE([CHECK_PRINTF_SAFE], [1], + [Define if you wish *printf() functions that have a safe handling of + non-IEEE-754 'long double' values.]) + fi + case "$gl_cv_func_printf_long_double" in + *yes) + AC_CACHE_CHECK([whether printf supports infinite 'long double' arguments], + [gl_cv_func_printf_infinite_long_double], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +]GL_NOCRASH[ +#include <float.h> +#include <stdio.h> +#include <string.h> +static int +strisnan (const char *string, size_t start_index, size_t end_index) +{ + if (start_index < end_index) + { + if (string[start_index] == '-') + start_index++; + if (start_index + 3 <= end_index + && memcmp (string + start_index, "nan", 3) == 0) + { + start_index += 3; + if (start_index == end_index + || (string[start_index] == '(' && string[end_index - 1] == ')')) + return 1; + } + } + return 0; +} +static char buf[10000]; +static long double zeroL = 0.0L; +int main () +{ + int result = 0; + nocrash_init(); + if (sprintf (buf, "%Lf", 1.0L / zeroL) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Lf", -1.0L / zeroL) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Lf", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 1; + if (sprintf (buf, "%Le", 1.0L / zeroL) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Le", -1.0L / zeroL) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Le", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 1; + if (sprintf (buf, "%Lg", 1.0L / zeroL) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Lg", -1.0L / zeroL) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + result |= 1; + if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 1; +#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE +/* Representation of an 80-bit 'long double' as an initializer for a sequence + of 'unsigned int' words. */ +# ifdef WORDS_BIGENDIAN +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ + ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ + (unsigned int) (mantlo) << 16 \ + } +# else +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { mantlo, manthi, exponent } +# endif + { /* Quiet NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + } + { + /* Signalling NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + result |= 2; + } + { /* Pseudo-NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) <= 0) + result |= 4; + if (sprintf (buf, "%Le", x.value) <= 0) + result |= 4; + if (sprintf (buf, "%Lg", x.value) <= 0) + result |= 4; + } + { /* Pseudo-Infinity. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) <= 0) + result |= 8; + if (sprintf (buf, "%Le", x.value) <= 0) + result |= 8; + if (sprintf (buf, "%Lg", x.value) <= 0) + result |= 8; + } + { /* Pseudo-Zero. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) <= 0) + result |= 16; + if (sprintf (buf, "%Le", x.value) <= 0) + result |= 16; + if (sprintf (buf, "%Lg", x.value) <= 0) + result |= 16; + } + { /* Unnormalized number. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) <= 0) + result |= 32; + if (sprintf (buf, "%Le", x.value) <= 0) + result |= 32; + if (sprintf (buf, "%Lg", x.value) <= 0) + result |= 32; + } + { /* Pseudo-Denormal. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) <= 0) + result |= 64; + if (sprintf (buf, "%Le", x.value) <= 0) + result |= 64; + if (sprintf (buf, "%Lg", x.value) <= 0) + result |= 64; + } +#endif + return result; +}]])], + [gl_cv_func_printf_infinite_long_double=yes], + [gl_cv_func_printf_infinite_long_double=no], + [case "$host_cpu" in + # Guess no on ia64, x86_64, i386. + ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";; + *) + case "$host_os" in +changequote(,)dnl + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5].*) gl_cv_func_printf_infinite_long_double="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";; + hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";; +changequote([,])dnl + # Guess yes on MSVC, no on mingw. + mingw*) AC_EGREP_CPP([Known], [ +#ifdef _MSC_VER + Known +#endif + ], + [gl_cv_func_printf_infinite_long_double="guessing yes"], + [gl_cv_func_printf_infinite_long_double="guessing no"]) + ;; + # If we don't know, assume the worst. + *) gl_cv_func_printf_infinite_long_double="guessing no";; + esac + ;; + esac + ]) + ]) + ;; + *) + gl_cv_func_printf_infinite_long_double="irrelevant" + ;; + esac +]) + +dnl Test whether the *printf family of functions supports the 'a' and 'A' +dnl conversion specifier for hexadecimal output of floating-point numbers. +dnl (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_directive_a. + +AC_DEFUN([gl_PRINTF_DIRECTIVE_A], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the 'a' and 'A' directives], + [gl_cv_func_printf_directive_a], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +static char buf[100]; +static double zero = 0.0; +int main () +{ + int result = 0; + if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 + || (strcmp (buf, "0x1.922p+1 33") != 0 + && strcmp (buf, "0x3.244p+0 33") != 0 + && strcmp (buf, "0x6.488p-1 33") != 0 + && strcmp (buf, "0xc.91p-2 33") != 0)) + result |= 1; + if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 + || (strcmp (buf, "-0X1.922P+1 33") != 0 + && strcmp (buf, "-0X3.244P+0 33") != 0 + && strcmp (buf, "-0X6.488P-1 33") != 0 + && strcmp (buf, "-0XC.91P-2 33") != 0)) + result |= 2; + /* This catches a FreeBSD 6.1 bug: it doesn't round. */ + if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 + || (strcmp (buf, "0x1.83p+0 33") != 0 + && strcmp (buf, "0x3.05p-1 33") != 0 + && strcmp (buf, "0x6.0ap-2 33") != 0 + && strcmp (buf, "0xc.14p-3 33") != 0)) + result |= 4; + /* This catches a Mac OS X 10.12.4 (Darwin 16.5) bug: it doesn't round. */ + if (sprintf (buf, "%.0a %d", 1.51, 33, 44, 55) < 0 + || (strcmp (buf, "0x2p+0 33") != 0 + && strcmp (buf, "0x3p-1 33") != 0 + && strcmp (buf, "0x6p-2 33") != 0 + && strcmp (buf, "0xcp-3 33") != 0)) + result |= 4; + /* This catches a FreeBSD 6.1 bug. See + <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ + if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0 + || buf[0] == '0') + result |= 8; + /* This catches a Mac OS X 10.3.9 (Darwin 7.9) bug. */ + if (sprintf (buf, "%.1a", 1.999) < 0 + || (strcmp (buf, "0x1.0p+1") != 0 + && strcmp (buf, "0x2.0p+0") != 0 + && strcmp (buf, "0x4.0p-1") != 0 + && strcmp (buf, "0x8.0p-2") != 0)) + result |= 16; + /* This catches the same Mac OS X 10.3.9 (Darwin 7.9) bug and also a + glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */ + if (sprintf (buf, "%.1La", 1.999L) < 0 + || (strcmp (buf, "0x1.0p+1") != 0 + && strcmp (buf, "0x2.0p+0") != 0 + && strcmp (buf, "0x4.0p-1") != 0 + && strcmp (buf, "0x8.0p-2") != 0)) + result |= 32; + return result; +}]])], + [gl_cv_func_printf_directive_a=yes], + [gl_cv_func_printf_directive_a=no], + [ + case "$host_os" in + # Guess yes on glibc >= 2.5 systems. + *-gnu* | gnu*) + AC_EGREP_CPP([BZ2908], [ + #include <features.h> + #ifdef __GNU_LIBRARY__ + #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)) && !defined __UCLIBC__ + BZ2908 + #endif + #endif + ], + [gl_cv_func_printf_directive_a="guessing yes"], + [gl_cv_func_printf_directive_a="guessing no"]) + ;; + # Guess no on native Windows. + mingw*) gl_cv_func_printf_directive_a="guessing no";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_directive_a="guessing no";; + esac + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports the %F format +dnl directive. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_directive_f. + +AC_DEFUN([gl_PRINTF_DIRECTIVE_F], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the 'F' directive], + [gl_cv_func_printf_directive_f], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +static char buf[100]; +static double zero = 0.0; +int main () +{ + int result = 0; + if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0 + || strcmp (buf, "1234567.000000 33") != 0) + result |= 1; + if (sprintf (buf, "%F", 1.0 / zero) < 0 + || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0)) + result |= 2; + /* This catches a Cygwin 1.5.x bug. */ + if (sprintf (buf, "%.F", 1234.0) < 0 + || strcmp (buf, "1234") != 0) + result |= 4; + return result; +}]])], + [gl_cv_func_printf_directive_f=yes], + [gl_cv_func_printf_directive_f=no], + [ + case "$host_os" in +changequote(,)dnl + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5].*) gl_cv_func_printf_directive_f="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on Mac OS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";; + darwin*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on Solaris >= 2.10. + solaris2.[1-9][0-9]*) gl_cv_func_printf_directive_f="guessing yes";; + solaris*) gl_cv_func_printf_directive_f="guessing no";; +changequote([,])dnl + # Guess yes on MSVC, no on mingw. + mingw*) AC_EGREP_CPP([Known], [ +#ifdef _MSC_VER + Known +#endif + ], + [gl_cv_func_printf_directive_f="guessing yes"], + [gl_cv_func_printf_directive_f="guessing no"]) + ;; + # If we don't know, assume the worst. + *) gl_cv_func_printf_directive_f="guessing no";; + esac + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports the %n format +dnl directive. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_directive_n. + +AC_DEFUN([gl_PRINTF_DIRECTIVE_N], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the 'n' directive], + [gl_cv_func_printf_directive_n], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#ifdef _MSC_VER +/* See page about "Parameter Validation" on msdn.microsoft.com. */ +static void cdecl +invalid_parameter_handler (const wchar_t *expression, + const wchar_t *function, + const wchar_t *file, unsigned int line, + uintptr_t dummy) +{ + exit (1); +} +#endif +static char fmtstring[10]; +static char buf[100]; +int main () +{ + int count = -1; +#ifdef _MSC_VER + _set_invalid_parameter_handler (invalid_parameter_handler); +#endif + /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) + support %n in format strings in read-only memory but not in writable + memory. */ + strcpy (fmtstring, "%d %n"); + if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0 + || strcmp (buf, "123 ") != 0 + || count != 4) + return 1; + return 0; +}]])], + [gl_cv_func_printf_directive_n=yes], + [gl_cv_func_printf_directive_n=no], + [case "$host_os" in + # Guess no on native Windows. + mingw*) gl_cv_func_printf_directive_n="guessing no";; + *) gl_cv_func_printf_directive_n="guessing yes";; + esac + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports the %ls format +dnl directive and in particular, when a precision is specified, whether +dnl the functions stop converting the wide string argument when the number +dnl of bytes that have been produced by this conversion equals or exceeds +dnl the precision. +dnl Result is gl_cv_func_printf_directive_ls. + +AC_DEFUN([gl_PRINTF_DIRECTIVE_LS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the 'ls' directive], + [gl_cv_func_printf_directive_ls], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +#include <string.h> +int main () +{ + int result = 0; + char buf[100]; + /* Test whether %ls works at all. + This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on + Cygwin 1.5. */ + { + static const wchar_t wstring[] = { 'a', 'b', 'c', 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%ls", wstring) < 0 + || strcmp (buf, "abc") != 0) + result |= 1; + } + /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an + assertion failure inside libc), but not on OpenBSD 4.0. */ + { + static const wchar_t wstring[] = { 'a', 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%ls", wstring) < 0 + || strcmp (buf, "a") != 0) + result |= 2; + } + /* Test whether precisions in %ls are supported as specified in ISO C 99 + section 7.19.6.1: + "If a precision is specified, no more than that many bytes are written + (including shift sequences, if any), and the array shall contain a + null wide character if, to equal the multibyte character sequence + length given by the precision, the function would need to access a + wide character one past the end of the array." + This test fails on Solaris 10. */ + { + static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%.2ls", wstring) < 0 + || strcmp (buf, "ab") != 0) + result |= 8; + } + return result; +}]])], + [gl_cv_func_printf_directive_ls=yes], + [gl_cv_func_printf_directive_ls=no], + [ +changequote(,)dnl + case "$host_os" in + openbsd*) gl_cv_func_printf_directive_ls="guessing no";; + irix*) gl_cv_func_printf_directive_ls="guessing no";; + solaris*) gl_cv_func_printf_directive_ls="guessing no";; + cygwin*) gl_cv_func_printf_directive_ls="guessing no";; + beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";; + # Guess yes on native Windows. + mingw*) gl_cv_func_printf_directive_ls="guessing yes";; + *) gl_cv_func_printf_directive_ls="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports POSIX/XSI format +dnl strings with positions. (POSIX:2001) +dnl Result is gl_cv_func_printf_positions. + +AC_DEFUN([gl_PRINTF_POSITIONS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports POSIX/XSI format strings with positions], + [gl_cv_func_printf_positions], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +/* The string "%2$d %1$d", with dollar characters protected from the shell's + dollar expansion (possibly an autoconf bug). */ +static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; +static char buf[100]; +int main () +{ + sprintf (buf, format, 33, 55); + return (strcmp (buf, "55 33") != 0); +}]])], + [gl_cv_func_printf_positions=yes], + [gl_cv_func_printf_positions=no], + [ +changequote(,)dnl + case "$host_os" in + netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) + gl_cv_func_printf_positions="guessing no";; + beos*) gl_cv_func_printf_positions="guessing no";; + # Guess no on native Windows. + mingw* | pw*) gl_cv_func_printf_positions="guessing no";; + *) gl_cv_func_printf_positions="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports POSIX/XSI format +dnl strings with the ' flag for grouping of decimal digits. (POSIX:2001) +dnl Result is gl_cv_func_printf_flag_grouping. + +AC_DEFUN([gl_PRINTF_FLAG_GROUPING], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the grouping flag], + [gl_cv_func_printf_flag_grouping], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +static char buf[100]; +int main () +{ + if (sprintf (buf, "%'d %d", 1234567, 99) < 0 + || buf[strlen (buf) - 1] != '9') + return 1; + return 0; +}]])], + [gl_cv_func_printf_flag_grouping=yes], + [gl_cv_func_printf_flag_grouping=no], + [ +changequote(,)dnl + case "$host_os" in + cygwin*) gl_cv_func_printf_flag_grouping="guessing no";; + netbsd*) gl_cv_func_printf_flag_grouping="guessing no";; + # Guess no on native Windows. + mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";; + *) gl_cv_func_printf_flag_grouping="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports the - flag correctly. +dnl (ISO C99.) See +dnl <https://lists.gnu.org/r/bug-coreutils/2008-02/msg00035.html> +dnl Result is gl_cv_func_printf_flag_leftadjust. + +AC_DEFUN([gl_PRINTF_FLAG_LEFTADJUST], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the left-adjust flag correctly], + [gl_cv_func_printf_flag_leftadjust], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +static char buf[100]; +int main () +{ + /* Check that a '-' flag is not annihilated by a negative width. */ + if (sprintf (buf, "a%-*sc", -3, "b") < 0 + || strcmp (buf, "ab c") != 0) + return 1; + return 0; +}]])], + [gl_cv_func_printf_flag_leftadjust=yes], + [gl_cv_func_printf_flag_leftadjust=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on HP-UX 11. + hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";; + # Guess no on HP-UX 10 and older. + hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";; + # Guess yes on native Windows. + mingw*) gl_cv_func_printf_flag_leftadjust="guessing yes";; + # Guess yes otherwise. + *) gl_cv_func_printf_flag_leftadjust="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports padding of non-finite +dnl values with the 0 flag correctly. (ISO C99 + TC1 + TC2.) See +dnl <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> +dnl Result is gl_cv_func_printf_flag_zero. + +AC_DEFUN([gl_PRINTF_FLAG_ZERO], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the zero flag correctly], + [gl_cv_func_printf_flag_zero], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +static char buf[100]; +static double zero = 0.0; +int main () +{ + if (sprintf (buf, "%010f", 1.0 / zero, 33, 44, 55) < 0 + || (strcmp (buf, " inf") != 0 + && strcmp (buf, " infinity") != 0)) + return 1; + return 0; +}]])], + [gl_cv_func_printf_flag_zero=yes], + [gl_cv_func_printf_flag_zero=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_printf_flag_zero="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_flag_zero="guessing yes";; + # Guess no on native Windows. + mingw*) gl_cv_func_printf_flag_zero="guessing no";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_flag_zero="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports large precisions. +dnl On mingw, precisions larger than 512 are treated like 512, in integer, +dnl floating-point or pointer output. On Solaris 10/x86, precisions larger +dnl than 510 in floating-point output crash the program. On Solaris 10/SPARC, +dnl precisions larger than 510 in floating-point output yield wrong results. +dnl On AIX 7.1, precisions larger than 998 in floating-point output yield +dnl wrong results. On BeOS, precisions larger than 1044 crash the program. +dnl Result is gl_cv_func_printf_precision. + +AC_DEFUN([gl_PRINTF_PRECISION], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports large precisions], + [gl_cv_func_printf_precision], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +static char buf[5000]; +int main () +{ + int result = 0; +#ifdef __BEOS__ + /* On BeOS, this would crash and show a dialog box. Avoid the crash. */ + return 1; +#endif + if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) + result |= 1; + if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5) + result |= 2; + if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5 + || buf[0] != '1') + result |= 4; + if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5 + || buf[0] != '1') + result |= 4; + return result; +}]])], + [gl_cv_func_printf_precision=yes], + [gl_cv_func_printf_precision=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess no only on Solaris, native Windows, and BeOS systems. + solaris*) gl_cv_func_printf_precision="guessing no" ;; + mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;; + beos*) gl_cv_func_printf_precision="guessing no" ;; + *) gl_cv_func_printf_precision="guessing yes" ;; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions recovers gracefully in case +dnl of an out-of-memory condition, or whether it crashes the entire program. +dnl Result is gl_cv_func_printf_enomem. + +AC_DEFUN([gl_PRINTF_ENOMEM], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_MULTIARCH]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf survives out-of-memory conditions], + [gl_cv_func_printf_enomem], + [ + gl_cv_func_printf_enomem="guessing no" + if test "$cross_compiling" = no; then + if test $APPLE_UNIVERSAL_BUILD = 0; then + AC_LANG_CONFTEST([AC_LANG_SOURCE([ +]GL_NOCRASH[ +changequote(,)dnl +#include <stdio.h> +#include <sys/types.h> +#include <sys/time.h> +#include <sys/resource.h> +#include <errno.h> +int main() +{ + struct rlimit limit; + int ret; + nocrash_init (); + /* Some printf implementations allocate temporary space with malloc. */ + /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ +#ifdef RLIMIT_DATA + if (getrlimit (RLIMIT_DATA, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_DATA, &limit) < 0) + return 77; +#endif + /* On Linux systems, malloc() is limited by RLIMIT_AS. */ +#ifdef RLIMIT_AS + if (getrlimit (RLIMIT_AS, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_AS, &limit) < 0) + return 77; +#endif + /* Some printf implementations allocate temporary space on the stack. */ +#ifdef RLIMIT_STACK + if (getrlimit (RLIMIT_STACK, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_STACK, &limit) < 0) + return 77; +#endif + ret = printf ("%.5000000f", 1.0); + return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + (./conftest 2>&AS_MESSAGE_LOG_FD + result=$? + _AS_ECHO_LOG([\$? = $result]) + if test $result != 0 && test $result != 77; then result=1; fi + exit $result + ) >/dev/null 2>/dev/null + case $? in + 0) gl_cv_func_printf_enomem="yes" ;; + 77) gl_cv_func_printf_enomem="guessing no" ;; + *) gl_cv_func_printf_enomem="no" ;; + esac + else + gl_cv_func_printf_enomem="guessing no" + fi + rm -fr conftest* + else + dnl A universal build on Apple Mac OS X platforms. + dnl The result would be 'no' in 32-bit mode and 'yes' in 64-bit mode. + dnl But we need a configuration result that is valid in both modes. + gl_cv_func_printf_enomem="guessing no" + fi + fi + if test "$gl_cv_func_printf_enomem" = "guessing no"; then +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on Solaris. + solaris*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on AIX. + aix*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on HP-UX/hppa. + hpux*) case "$host_cpu" in + hppa*) gl_cv_func_printf_enomem="guessing yes";; + *) gl_cv_func_printf_enomem="guessing no";; + esac + ;; + # Guess yes on IRIX. + irix*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on OSF/1. + osf*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on Haiku. + haiku*) gl_cv_func_printf_enomem="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_enomem="guessing no";; + esac +changequote([,])dnl + fi + ]) +]) + +dnl Test whether the snprintf function exists. (ISO C99, POSIX:2001) +dnl Result is ac_cv_func_snprintf. + +AC_DEFUN([gl_SNPRINTF_PRESENCE], +[ + AC_CHECK_FUNCS_ONCE([snprintf]) +]) + +dnl Test whether the string produced by the snprintf function is always NUL +dnl terminated. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_snprintf_truncation_c99. + +AC_DEFUN([gl_SNPRINTF_TRUNCATION_C99], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_SNPRINTF_PRESENCE]) + AC_CACHE_CHECK([whether snprintf truncates the result as in C99], + [gl_cv_func_snprintf_truncation_c99], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +#if HAVE_SNPRINTF +# define my_snprintf snprintf +#else +# include <stdarg.h> +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +#endif +static char buf[100]; +int main () +{ + strcpy (buf, "ABCDEF"); + my_snprintf (buf, 3, "%d %d", 4567, 89); + if (memcmp (buf, "45\0DEF", 6) != 0) + return 1; + return 0; +}]])], + [gl_cv_func_snprintf_truncation_c99=yes], + [gl_cv_func_snprintf_truncation_c99=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4].*) gl_cv_func_snprintf_truncation_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on Mac OS X >= 10.3. + darwin[1-6].*) gl_cv_func_snprintf_truncation_c99="guessing no";; + darwin*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on OpenBSD >= 3.9. + openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) + gl_cv_func_snprintf_truncation_c99="guessing no";; + openbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on Solaris >= 2.6. + solaris2.[0-5] | solaris2.[0-5].*) + gl_cv_func_snprintf_truncation_c99="guessing no";; + solaris*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_snprintf_truncation_c99="guessing no";; + aix*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";; + hpux*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on IRIX >= 6.5. + irix6.5) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on OSF/1 >= 5. + osf[3-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";; + osf*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_snprintf_truncation_c99="guessing no";; + netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess no on native Windows. + mingw*) gl_cv_func_snprintf_truncation_c99="guessing no";; + # If we don't know, assume the worst. + *) gl_cv_func_snprintf_truncation_c99="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the return value of the snprintf function is the number +dnl of bytes (excluding the terminating NUL) that would have been produced +dnl if the buffer had been large enough. (ISO C99, POSIX:2001) +dnl For example, this test program fails on IRIX 6.5: +dnl --------------------------------------------------------------------- +dnl #include <stdio.h> +dnl int main() +dnl { +dnl static char buf[8]; +dnl int retval = snprintf (buf, 3, "%d", 12345); +dnl return retval >= 0 && retval < 3; +dnl } +dnl --------------------------------------------------------------------- +dnl Result is gl_cv_func_snprintf_retval_c99. + +AC_DEFUN_ONCE([gl_SNPRINTF_RETVAL_C99], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_SNPRINTF_PRESENCE]) + AC_CACHE_CHECK([whether snprintf returns a byte count as in C99], + [gl_cv_func_snprintf_retval_c99], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +#if HAVE_SNPRINTF +# define my_snprintf snprintf +#else +# include <stdarg.h> +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +#endif +static char buf[100]; +int main () +{ + strcpy (buf, "ABCDEF"); + if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7) + return 1; + if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7) + return 2; + if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7) + return 3; + return 0; +}]])], + [gl_cv_func_snprintf_retval_c99=yes], + [gl_cv_func_snprintf_retval_c99=no], + [case "$host_os" in +changequote(,)dnl + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4].*) gl_cv_func_snprintf_retval_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on Mac OS X >= 10.3. + darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; + darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on OpenBSD >= 3.9. + openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) + gl_cv_func_snprintf_retval_c99="guessing no";; + openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on Solaris >= 2.10. + solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; + solaris*) gl_cv_func_printf_sizes_c99="guessing no";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; + aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_snprintf_retval_c99="guessing no";; + netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; +changequote([,])dnl + # Guess yes on MSVC, no on mingw. + mingw*) AC_EGREP_CPP([Known], [ +#ifdef _MSC_VER + Known +#endif + ], + [gl_cv_func_snprintf_retval_c99="guessing yes"], + [gl_cv_func_snprintf_retval_c99="guessing no"]) + ;; + # If we don't know, assume the worst. + *) gl_cv_func_snprintf_retval_c99="guessing no";; + esac + ]) + ]) +]) + +dnl Test whether the snprintf function supports the %n format directive +dnl also in truncated portions of the format string. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_snprintf_directive_n. + +AC_DEFUN([gl_SNPRINTF_DIRECTIVE_N], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_SNPRINTF_PRESENCE]) + AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive], + [gl_cv_func_snprintf_directive_n], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#include <string.h> +#if HAVE_SNPRINTF +# define my_snprintf snprintf +#else +# include <stdarg.h> +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +#endif +static char fmtstring[10]; +static char buf[100]; +int main () +{ + int count = -1; + /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) + support %n in format strings in read-only memory but not in writable + memory. */ + strcpy (fmtstring, "%d %n"); + my_snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55); + if (count != 6) + return 1; + return 0; +}]])], + [gl_cv_func_snprintf_directive_n=yes], + [gl_cv_func_snprintf_directive_n=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4].*) gl_cv_func_snprintf_directive_n="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on Mac OS X >= 10.3. + darwin[1-6].*) gl_cv_func_snprintf_directive_n="guessing no";; + darwin*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on Solaris >= 2.6. + solaris2.[0-5] | solaris2.[0-5].*) + gl_cv_func_snprintf_directive_n="guessing no";; + solaris*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_snprintf_directive_n="guessing no";; + aix*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on IRIX >= 6.5. + irix6.5) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on OSF/1 >= 5. + osf[3-4]*) gl_cv_func_snprintf_directive_n="guessing no";; + osf*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_snprintf_directive_n="guessing no";; + netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess no on native Windows. + mingw*) gl_cv_func_snprintf_directive_n="guessing no";; + # If we don't know, assume the worst. + *) gl_cv_func_snprintf_directive_n="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the snprintf function, when passed a size = 1, writes any +dnl output without bounds in this case, behaving like sprintf. This is the +dnl case on Linux libc5. +dnl Result is gl_cv_func_snprintf_size1. + +AC_DEFUN([gl_SNPRINTF_SIZE1], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_SNPRINTF_PRESENCE]) + AC_CACHE_CHECK([whether snprintf respects a size of 1], + [gl_cv_func_snprintf_size1], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#if HAVE_SNPRINTF +# define my_snprintf snprintf +#else +# include <stdarg.h> +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +#endif +int main() +{ + static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; + my_snprintf (buf, 1, "%d", 12345); + return buf[1] != 'E'; +}]])], + [gl_cv_func_snprintf_size1=yes], + [gl_cv_func_snprintf_size1=no], + [case "$host_os" in + # Guess yes on native Windows. + mingw*) gl_cv_func_snprintf_size1="guessing yes" ;; + *) gl_cv_func_snprintf_size1="guessing yes" ;; + esac + ]) + ]) +]) + +dnl Test whether the vsnprintf function, when passed a zero size, produces no +dnl output. (ISO C99, POSIX:2001) +dnl For example, snprintf nevertheless writes a NUL byte in this case +dnl on OSF/1 5.1: +dnl --------------------------------------------------------------------- +dnl #include <stdio.h> +dnl int main() +dnl { +dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; +dnl snprintf (buf, 0, "%d", 12345); +dnl return buf[0] != 'D'; +dnl } +dnl --------------------------------------------------------------------- +dnl And vsnprintf writes any output without bounds in this case, behaving like +dnl vsprintf, on HP-UX 11 and OSF/1 5.1: +dnl --------------------------------------------------------------------- +dnl #include <stdarg.h> +dnl #include <stdio.h> +dnl static int my_snprintf (char *buf, int size, const char *format, ...) +dnl { +dnl va_list args; +dnl int ret; +dnl va_start (args, format); +dnl ret = vsnprintf (buf, size, format, args); +dnl va_end (args); +dnl return ret; +dnl } +dnl int main() +dnl { +dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; +dnl my_snprintf (buf, 0, "%d", 12345); +dnl return buf[0] != 'D'; +dnl } +dnl --------------------------------------------------------------------- +dnl Result is gl_cv_func_vsnprintf_zerosize_c99. + +AC_DEFUN([gl_VSNPRINTF_ZEROSIZE_C99], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether vsnprintf respects a zero size as in C99], + [gl_cv_func_vsnprintf_zerosize_c99], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdarg.h> +#include <stdio.h> +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +int main() +{ + static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; + my_snprintf (buf, 0, "%d", 12345); + return buf[0] != 'D'; +}]])], + [gl_cv_func_vsnprintf_zerosize_c99=yes], + [gl_cv_func_vsnprintf_zerosize_c99=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on Mac OS X >= 10.3. + darwin[1-6].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + darwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on Cygwin. + cygwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on Solaris >= 2.6. + solaris2.[0-5] | solaris2.[0-5].*) + gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + solaris*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + aix*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on IRIX >= 6.5. + irix6.5) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + netbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on native Windows. + mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl The results of these tests on various platforms are: +dnl +dnl 1 = gl_PRINTF_SIZES_C99 +dnl 2 = gl_PRINTF_LONG_DOUBLE +dnl 3 = gl_PRINTF_INFINITE +dnl 4 = gl_PRINTF_INFINITE_LONG_DOUBLE +dnl 5 = gl_PRINTF_DIRECTIVE_A +dnl 6 = gl_PRINTF_DIRECTIVE_F +dnl 7 = gl_PRINTF_DIRECTIVE_N +dnl 8 = gl_PRINTF_DIRECTIVE_LS +dnl 9 = gl_PRINTF_POSITIONS +dnl 10 = gl_PRINTF_FLAG_GROUPING +dnl 11 = gl_PRINTF_FLAG_LEFTADJUST +dnl 12 = gl_PRINTF_FLAG_ZERO +dnl 13 = gl_PRINTF_PRECISION +dnl 14 = gl_PRINTF_ENOMEM +dnl 15 = gl_SNPRINTF_PRESENCE +dnl 16 = gl_SNPRINTF_TRUNCATION_C99 +dnl 17 = gl_SNPRINTF_RETVAL_C99 +dnl 18 = gl_SNPRINTF_DIRECTIVE_N +dnl 19 = gl_SNPRINTF_SIZE1 +dnl 20 = gl_VSNPRINTF_ZEROSIZE_C99 +dnl +dnl 1 = checking whether printf supports size specifiers as in C99... +dnl 2 = checking whether printf supports 'long double' arguments... +dnl 3 = checking whether printf supports infinite 'double' arguments... +dnl 4 = checking whether printf supports infinite 'long double' arguments... +dnl 5 = checking whether printf supports the 'a' and 'A' directives... +dnl 6 = checking whether printf supports the 'F' directive... +dnl 7 = checking whether printf supports the 'n' directive... +dnl 8 = checking whether printf supports the 'ls' directive... +dnl 9 = checking whether printf supports POSIX/XSI format strings with positions... +dnl 10 = checking whether printf supports the grouping flag... +dnl 11 = checking whether printf supports the left-adjust flag correctly... +dnl 12 = checking whether printf supports the zero flag correctly... +dnl 13 = checking whether printf supports large precisions... +dnl 14 = checking whether printf survives out-of-memory conditions... +dnl 15 = checking for snprintf... +dnl 16 = checking whether snprintf truncates the result as in C99... +dnl 17 = checking whether snprintf returns a byte count as in C99... +dnl 18 = checking whether snprintf fully supports the 'n' directive... +dnl 19 = checking whether snprintf respects a size of 1... +dnl 20 = checking whether vsnprintf respects a zero size as in C99... +dnl +dnl . = yes, # = no. +dnl +dnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +dnl glibc 2.5 . . . . . . . . . . . . . . . . . . . . +dnl glibc 2.3.6 . . . . # . . . . . . . . . . . . . . . +dnl FreeBSD 5.4, 6.1 . . . . # . . . . . . # . # . . . . . . +dnl Mac OS X 10.5.8 . . . # # . . . . . . # . . . . . . . . +dnl Mac OS X 10.3.9 . . . . # . . . . . . # . # . . . . . . +dnl OpenBSD 3.9, 4.0 . . # # # # . # . # . # . # . . . . . . +dnl Cygwin 1.7.0 (2009) . . . # . . . ? . . . . . ? . . . . . . +dnl Cygwin 1.5.25 (2008) . . . # # . . # . . . . . # . . . . . . +dnl Cygwin 1.5.19 (2006) # . . # # # . # . # . # # # . . . . . . +dnl Solaris 11.4 . . # # # . . # . . . # . . . . . . . . +dnl Solaris 11.3 . . . . # . . # . . . . . . . . . . . . +dnl Solaris 11.0 . . # # # . . # . . . # . . . . . . . . +dnl Solaris 10 . . # # # . . # . . . # # . . . . . . . +dnl Solaris 2.6 ... 9 # . # # # # . # . . . # # . . . # . . . +dnl Solaris 2.5.1 # . # # # # . # . . . # . . # # # # # # +dnl AIX 7.1 . . # # # . . . . . . # # . . . . . . . +dnl AIX 5.2 . . # # # . . . . . . # . . . . . . . . +dnl AIX 4.3.2, 5.1 # . # # # # . . . . . # . . . . # . . . +dnl HP-UX 11.31 . . . . # . . . . . . # . . . . # # . . +dnl HP-UX 11.{00,11,23} # . . . # # . . . . . # . . . . # # . # +dnl HP-UX 10.20 # . # . # # . ? . . # # . . . . # # ? # +dnl IRIX 6.5 # . # # # # . # . . . # . . . . # . . . +dnl OSF/1 5.1 # . # # # # . . . . . # . . . . # . . # +dnl OSF/1 4.0d # . # # # # . . . . . # . . # # # # # # +dnl NetBSD 5.0 . . . # # . . . . . . # . # . . . . . . +dnl NetBSD 4.0 . ? ? ? ? ? . ? . ? ? ? ? ? . . . ? ? ? +dnl NetBSD 3.0 . . . . # # . ? # # ? # . # . . . . . . +dnl Haiku . . . # # # . # . . . . . ? . . ? . . . +dnl BeOS # # . # # # . ? # . ? . # ? . . ? . . . +dnl old mingw / msvcrt # # # # # # . . # # . # # ? . # # # . . +dnl MSVC 9 # # # # # # # . # # . # # ? # # # # . . +dnl mingw 2009-2011 . # . # . . . . # # . . . ? . . . . . . +dnl mingw-w64 2011 # # # # # # . . # # . # # ? . # # # . . diff --git a/devspec.en_US/project/recutils/m4/progtest.m4 b/devspec.en_US/project/recutils/m4/progtest.m4 new file mode 100755 index 0000000..9ace7c3 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/progtest.m4 @@ -0,0 +1,91 @@ +# progtest.m4 serial 7 (gettext-0.18.2) +dnl Copyright (C) 1996-2003, 2005, 2008-2016 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper <drepper@cygnus.com>, 1996. + +AC_PREREQ([2.50]) + +# Search path for a program which passes the given test. + +dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN([AM_PATH_PROG_WITH_TEST], +[ +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL([ac_cv_path_$1], +[case "[$]$1" in + [[\\/]]* | ?:[[\\/]]*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in ifelse([$5], , $PATH, [$5]); do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$][$1]) +else + AC_MSG_RESULT([no]) +fi +AC_SUBST([$1])dnl +]) diff --git a/devspec.en_US/project/recutils/m4/pthread_rwlock_rdlock.m4 b/devspec.en_US/project/recutils/m4/pthread_rwlock_rdlock.m4 new file mode 100755 index 0000000..3c1d645 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/pthread_rwlock_rdlock.m4 @@ -0,0 +1,165 @@ +# pthread_rwlock_rdlock.m4 serial 2 +dnl Copyright (C) 2017-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Inspired by +dnl https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_rwlock_rdlock/2-2.c +dnl by Intel Corporation. + +dnl Test whether in a situation where +dnl - an rwlock is taken by a reader and has a writer waiting, +dnl - an additional reader requests the lock, +dnl - the waiting writer and the requesting reader threads have the same +dnl priority, +dnl the requesting reader thread gets blocked, so that at some point the +dnl waiting writer can acquire the lock. +dnl Without such a guarantee, when there a N readers and each of the readers +dnl spends more than 1/Nth of the time with the lock held, there is a high +dnl probability that the waiting writer will not get the lock in a given finite +dnl time, a phenomenon called "writer starvation". +dnl Without such a guarantee, applications have a hard time avoiding writer +dnl starvation. +dnl +dnl POSIX:2017 makes this requirement only for implementations that support TPS +dnl (Thread Priority Scheduling) and only for the scheduling policies SCHED_FIFO +dnl and SCHED_RR, see +dnl http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html +dnl but this test verifies the guarantee regardless of TPS and regardless of +dnl scheduling policy. +dnl Glibc currently does not provide this guarantee, see +dnl https://sourceware.org/bugzilla/show_bug.cgi?id=13701 +AC_DEFUN([gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], +[ + AC_REQUIRE([gl_THREADLIB_EARLY]) + AC_CACHE_CHECK([whether pthread_rwlock_rdlock prefers a writer to a reader], + [gl_cv_pthread_rwlock_rdlock_prefer_writer], + [save_LIBS="$LIBS" + LIBS="$LIBS $LIBMULTITHREAD" + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <errno.h> +#include <pthread.h> +#include <stdlib.h> +#include <unistd.h> + +#define SUCCEED() exit (0) +#define FAILURE() exit (1) +#define UNEXPECTED(n) (exit (10 + (n))) + +/* The main thread creates the waiting writer and the requesting reader threads + in the default way; this guarantees that they have the same priority. + We can reuse the main thread as first reader thread. */ + +static pthread_rwlock_t lock; +static pthread_t reader1; +static pthread_t writer; +static pthread_t reader2; +static pthread_t timer; +/* Used to pass control from writer to reader2 and from reader2 to timer, + as in a relay race. + Passing control from one running thread to another running thread + is most likely faster than to create the second thread. */ +static pthread_mutex_t baton; + +static void * +timer_func (void *ignored) +{ + /* Step 13 (can be before or after step 12): + The timer thread takes the baton, then waits a moment to make sure + it can tell whether the second reader thread is blocked at step 12. */ + if (pthread_mutex_lock (&baton)) + UNEXPECTED (13); + usleep (100000); + /* By the time we get here, it's clear that the second reader thread is + blocked at step 12. This is the desired behaviour. */ + SUCCEED (); +} + +static void * +reader2_func (void *ignored) +{ + int err; + + /* Step 8 (can be before or after step 7): + The second reader thread takes the baton, then waits a moment to make sure + the writer thread has reached step 7. */ + if (pthread_mutex_lock (&baton)) + UNEXPECTED (8); + usleep (100000); + /* Step 9: The second reader thread requests the lock. */ + err = pthread_rwlock_tryrdlock (&lock); + if (err == 0) + FAILURE (); + else if (err != EBUSY) + UNEXPECTED (9); + /* Step 10: Launch a timer, to test whether the next call blocks. */ + if (pthread_create (&timer, NULL, timer_func, NULL)) + UNEXPECTED (10); + /* Step 11: Release the baton. */ + if (pthread_mutex_unlock (&baton)) + UNEXPECTED (11); + /* Step 12: The second reader thread requests the lock. */ + err = pthread_rwlock_rdlock (&lock); + if (err == 0) + FAILURE (); + else + UNEXPECTED (12); +} + +static void * +writer_func (void *ignored) +{ + /* Step 4: Take the baton, so that the second reader thread does not go ahead + too early. */ + if (pthread_mutex_lock (&baton)) + UNEXPECTED (4); + /* Step 5: Create the second reader thread. */ + if (pthread_create (&reader2, NULL, reader2_func, NULL)) + UNEXPECTED (5); + /* Step 6: Release the baton. */ + if (pthread_mutex_unlock (&baton)) + UNEXPECTED (6); + /* Step 7: The writer thread requests the lock. */ + if (pthread_rwlock_wrlock (&lock)) + UNEXPECTED (7); + return NULL; +} + +int +main () +{ + reader1 = pthread_self (); + + /* Step 1: The main thread initializes the lock and the baton. */ + if (pthread_rwlock_init (&lock, NULL)) + UNEXPECTED (1); + if (pthread_mutex_init (&baton, NULL)) + UNEXPECTED (1); + /* Step 2: The main thread acquires the lock as a reader. */ + if (pthread_rwlock_rdlock (&lock)) + UNEXPECTED (2); + /* Step 3: Create the writer thread. */ + if (pthread_create (&writer, NULL, writer_func, NULL)) + UNEXPECTED (3); + /* Job done. Go to sleep. */ + for (;;) + { + sleep (1); + } +} +]])], + [gl_cv_pthread_rwlock_rdlock_prefer_writer=yes], + [gl_cv_pthread_rwlock_rdlock_prefer_writer=no], + [gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes"]) + LIBS="$save_LIBS" + ]) + case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in + *yes) + AC_DEFINE([HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], [1], + [Define if the 'pthread_rwlock_rdlock' function prefers a writer to a reader.]) + ;; + esac +]) diff --git a/devspec.en_US/project/recutils/m4/quote.m4 b/devspec.en_US/project/recutils/m4/quote.m4 new file mode 100755 index 0000000..feaa735 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/quote.m4 @@ -0,0 +1,13 @@ +# quote.m4 serial 6 +dnl Copyright (C) 2002-2003, 2005-2006, 2009-2019 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_QUOTE], +[ + dnl Prerequisites of lib/quote.c. + dnl (none) + : +]) diff --git a/devspec.en_US/project/recutils/m4/quotearg.m4 b/devspec.en_US/project/recutils/m4/quotearg.m4 new file mode 100755 index 0000000..c478f50 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/quotearg.m4 @@ -0,0 +1,10 @@ +# quotearg.m4 serial 9 +dnl Copyright (C) 2002, 2004-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_QUOTEARG], +[ + : +]) diff --git a/devspec.en_US/project/recutils/m4/raise.m4 b/devspec.en_US/project/recutils/m4/raise.m4 new file mode 100755 index 0000000..f7661e6 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/raise.m4 @@ -0,0 +1,36 @@ +# raise.m4 serial 4 +dnl Copyright (C) 2011-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_RAISE], +[ + AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CHECK_FUNCS([raise]) + if test $ac_cv_func_raise = no; then + HAVE_RAISE=0 + else + m4_ifdef([gl_MSVC_INVAL], [ + AC_REQUIRE([gl_MSVC_INVAL]) + if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then + REPLACE_RAISE=1 + fi + ]) + m4_ifdef([gl_SIGNALBLOCKING], [ + gl_SIGNALBLOCKING + if test $HAVE_POSIX_SIGNALBLOCKING = 0; then + m4_ifdef([gl_SIGNAL_SIGPIPE], [ + gl_SIGNAL_SIGPIPE + if test $gl_cv_header_signal_h_SIGPIPE != yes; then + REPLACE_RAISE=1 + fi + ], [:]) + fi + ]) + fi +]) + +# Prerequisites of lib/raise.c. +AC_DEFUN([gl_PREREQ_RAISE], [:]) diff --git a/devspec.en_US/project/recutils/m4/random_r.m4 b/devspec.en_US/project/recutils/m4/random_r.m4 new file mode 100755 index 0000000..4d84228 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/random_r.m4 @@ -0,0 +1,43 @@ +# serial 5 +dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_RANDOM_R], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) + + AC_CHECK_HEADERS([random.h], [], [], [AC_INCLUDES_DEFAULT]) + if test $ac_cv_header_random_h = no; then + HAVE_RANDOM_H=0 + fi + + AC_CHECK_TYPES([struct random_data], + [], [HAVE_STRUCT_RANDOM_DATA=0], + [[#include <stdlib.h> + #if HAVE_RANDOM_H + # include <random.h> + #endif + ]]) + + dnl On AIX and OSF/1, these functions exist, but with different declarations. + dnl Override them all. + case "$host_os" in + aix* | osf*) + REPLACE_RANDOM_R=1 + ;; + *) + AC_CHECK_FUNCS([random_r]) + if test $ac_cv_func_random_r = no; then + HAVE_RANDOM_R=0 + fi + ;; + esac +]) + +# Prerequisites of lib/random_r.c. +AC_DEFUN([gl_PREREQ_RANDOM_R], [ + : +]) diff --git a/devspec.en_US/project/recutils/m4/rawmemchr.m4 b/devspec.en_US/project/recutils/m4/rawmemchr.m4 new file mode 100755 index 0000000..03a8804 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/rawmemchr.m4 @@ -0,0 +1,20 @@ +# rawmemchr.m4 serial 2 +dnl Copyright (C) 2003, 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_RAWMEMCHR], +[ + dnl Persuade glibc <string.h> to declare rawmemchr(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_CHECK_FUNCS([rawmemchr]) + if test $ac_cv_func_rawmemchr = no; then + HAVE_RAWMEMCHR=0 + fi +]) + +# Prerequisites of lib/strchrnul.c. +AC_DEFUN([gl_PREREQ_RAWMEMCHR], [:]) diff --git a/devspec.en_US/project/recutils/m4/read-file.m4 b/devspec.en_US/project/recutils/m4/read-file.m4 new file mode 100755 index 0000000..4e5551f --- /dev/null +++ b/devspec.en_US/project/recutils/m4/read-file.m4 @@ -0,0 +1,8 @@ +# read-file.m4 serial 3 +dnl Copyright (C) 2002-2006, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Prerequisites of lib/read-file.c. +AC_DEFUN([gl_PREREQ_READ_FILE], [:]) diff --git a/devspec.en_US/project/recutils/m4/readline.m4 b/devspec.en_US/project/recutils/m4/readline.m4 new file mode 100755 index 0000000..0a84b5f --- /dev/null +++ b/devspec.en_US/project/recutils/m4/readline.m4 @@ -0,0 +1,81 @@ +# readline.m4 serial 10 +dnl Copyright (C) 2005-2006, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Simon Josefsson, with help from Bruno Haible and Oskar +dnl Liljeblad. + +AC_DEFUN([gl_FUNC_READLINE], +[ + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Search for libreadline and define LIBREADLINE, LTLIBREADLINE and + dnl INCREADLINE accordingly. + AC_LIB_LINKFLAGS_BODY([readline]) + + dnl Add $INCREADLINE to CPPFLAGS before performing the following checks, + dnl because if the user has installed libreadline and not disabled its use + dnl via --without-libreadline-prefix, he wants to use it. The AC_LINK_IFELSE + dnl will then succeed. + am_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCREADLINE]) + + AC_CACHE_CHECK([for readline], [gl_cv_lib_readline], [ + gl_cv_lib_readline=no + am_save_LIBS="$LIBS" + dnl On some systems, -lreadline doesn't link without an additional + dnl -lncurses or -ltermcap. + dnl Try -lncurses before -ltermcap, because libtermcap is insecure + dnl by design and obsolete since 1994. Try -lcurses last, because + dnl libcurses is unusable on some old Unices. + for extra_lib in "" ncurses termcap curses; do + LIBS="$am_save_LIBS $LIBREADLINE" + if test -n "$extra_lib"; then + LIBS="$LIBS -l$extra_lib" + fi + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h> +#include <readline/readline.h>]], + [[readline((char*)0);]])], + [if test -n "$extra_lib"; then + gl_cv_lib_readline="yes, requires -l$extra_lib" + else + gl_cv_lib_readline="yes" + fi + ]) + if test "$gl_cv_lib_readline" != no; then + break + fi + done + LIBS="$am_save_LIBS" + ]) + + if test "$gl_cv_lib_readline" != no; then + AC_DEFINE([HAVE_READLINE], [1], [Define if you have the readline library.]) + extra_lib=`echo "$gl_cv_lib_readline" | sed -n -e 's/yes, requires //p'` + if test -n "$extra_lib"; then + LIBREADLINE="$LIBREADLINE $extra_lib" + LTLIBREADLINE="$LTLIBREADLINE $extra_lib" + fi + AC_MSG_CHECKING([how to link with libreadline]) + AC_MSG_RESULT([$LIBREADLINE]) + else + dnl If $LIBREADLINE didn't lead to a usable library, we don't + dnl need $INCREADLINE either. + CPPFLAGS="$am_save_CPPFLAGS" + LIBREADLINE= + LTLIBREADLINE= + fi + AC_SUBST([LIBREADLINE]) + AC_SUBST([LTLIBREADLINE]) + + AC_CHECK_HEADERS([readline/readline.h readline/history.h]) +]) + +# Prerequisites of lib/readline.c. +AC_DEFUN([gl_PREREQ_READLINE], [ + : +]) diff --git a/devspec.en_US/project/recutils/m4/readlink.m4 b/devspec.en_US/project/recutils/m4/readlink.m4 new file mode 100755 index 0000000..2d76815 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/readlink.m4 @@ -0,0 +1,73 @@ +# readlink.m4 serial 14 +dnl Copyright (C) 2003, 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_READLINK], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CHECK_FUNCS_ONCE([readlink]) + if test $ac_cv_func_readlink = no; then + HAVE_READLINK=0 + else + AC_CACHE_CHECK([whether readlink signature is correct], + [gl_cv_decl_readlink_works], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <unistd.h> + /* Cause compilation failure if original declaration has wrong type. */ + ssize_t readlink (const char *, char *, size_t);]])], + [gl_cv_decl_readlink_works=yes], [gl_cv_decl_readlink_works=no])]) + dnl Solaris 9 ignores trailing slash. + dnl FreeBSD 7.2 dereferences only one level of links with trailing slash. + AC_CACHE_CHECK([whether readlink handles trailing slash correctly], + [gl_cv_func_readlink_works], + [# We have readlink, so assume ln -s works. + ln -s conftest.no-such conftest.link + ln -s conftest.link conftest.lnk2 + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <unistd.h> +]], [[char buf[20]; + return readlink ("conftest.lnk2/", buf, sizeof buf) != -1;]])], + [gl_cv_func_readlink_works=yes], [gl_cv_func_readlink_works=no], + [case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_readlink_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_readlink_works="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_readlink_works="guessing no" ;; + esac + ]) + rm -f conftest.link conftest.lnk2]) + case "$gl_cv_func_readlink_works" in + *yes) + if test "$gl_cv_decl_readlink_works" != yes; then + REPLACE_READLINK=1 + fi + ;; + *) + AC_DEFINE([READLINK_TRAILING_SLASH_BUG], [1], [Define to 1 if readlink + fails to recognize a trailing slash.]) + REPLACE_READLINK=1 + ;; + esac + fi +]) + +# Like gl_FUNC_READLINK, except prepare for separate compilation +# (no REPLACE_READLINK, no AC_LIBOBJ). +AC_DEFUN([gl_FUNC_READLINK_SEPARATE], +[ + AC_CHECK_FUNCS_ONCE([readlink]) + gl_PREREQ_READLINK +]) + +# Prerequisites of lib/readlink.c. +AC_DEFUN([gl_PREREQ_READLINK], +[ + : +]) diff --git a/devspec.en_US/project/recutils/m4/realloc.m4 b/devspec.en_US/project/recutils/m4/realloc.m4 new file mode 100755 index 0000000..1281a35 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/realloc.m4 @@ -0,0 +1,79 @@ +# realloc.m4 serial 15 +dnl Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +m4_version_prereq([2.70], [] ,[ + +# This is adapted with modifications from upstream Autoconf here: +# https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=04be2b7a29d65d9a08e64e8e56e594c91749598c +AC_DEFUN([_AC_FUNC_REALLOC_IF], +[ + AC_REQUIRE([AC_HEADER_STDC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles + AC_CHECK_HEADERS([stdlib.h]) + AC_CACHE_CHECK([for GNU libc compatible realloc], + [ac_cv_func_realloc_0_nonnull], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#if defined STDC_HEADERS || defined HAVE_STDLIB_H + # include <stdlib.h> + #else + char *realloc (); + #endif + ]], + [[char *p = realloc (0, 0); + int result = !p; + free (p); + return result;]]) + ], + [ac_cv_func_realloc_0_nonnull=yes], + [ac_cv_func_realloc_0_nonnull=no], + [case "$host_os" in + # Guess yes on platforms where we know the result. + *-gnu* | gnu* | freebsd* | netbsd* | openbsd* \ + | hpux* | solaris* | cygwin* | mingw*) + ac_cv_func_realloc_0_nonnull=yes ;; + # If we don't know, assume the worst. + *) ac_cv_func_realloc_0_nonnull=no ;; + esac + ]) + ]) + AS_IF([test $ac_cv_func_realloc_0_nonnull = yes], [$1], [$2]) +])# AC_FUNC_REALLOC + +]) + +# gl_FUNC_REALLOC_GNU +# ------------------- +# Test whether 'realloc (0, 0)' is handled like in GNU libc, and replace +# realloc if it is not. +AC_DEFUN([gl_FUNC_REALLOC_GNU], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + dnl _AC_FUNC_REALLOC_IF is defined in Autoconf. + _AC_FUNC_REALLOC_IF( + [AC_DEFINE([HAVE_REALLOC_GNU], [1], + [Define to 1 if your system has a GNU libc compatible 'realloc' + function, and to 0 otherwise.])], + [AC_DEFINE([HAVE_REALLOC_GNU], [0]) + REPLACE_REALLOC=1 + ]) +])# gl_FUNC_REALLOC_GNU + +# gl_FUNC_REALLOC_POSIX +# --------------------- +# Test whether 'realloc' is POSIX compliant (sets errno to ENOMEM when it +# fails), and replace realloc if it is not. +AC_DEFUN([gl_FUNC_REALLOC_POSIX], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) + if test $gl_cv_func_malloc_posix = yes; then + AC_DEFINE([HAVE_REALLOC_POSIX], [1], + [Define if the 'realloc' function is POSIX compliant.]) + else + REPLACE_REALLOC=1 + fi +]) diff --git a/devspec.en_US/project/recutils/m4/regex.m4 b/devspec.en_US/project/recutils/m4/regex.m4 new file mode 100755 index 0000000..35119c5 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/regex.m4 @@ -0,0 +1,311 @@ +# serial 68 + +# Copyright (C) 1996-2001, 2003-2019 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl Initially derived from code in GNU grep. +dnl Mostly written by Jim Meyering. + +AC_PREREQ([2.50]) + +AC_DEFUN([gl_REGEX], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_ARG_WITH([included-regex], + [AS_HELP_STRING([--without-included-regex], + [don't compile regex; this is the default on systems + with recent-enough versions of the GNU C Library + (use with caution on other systems).])]) + + case $with_included_regex in #( + yes|no) ac_use_included_regex=$with_included_regex + ;; + '') + # If the system regex support is good enough that it passes the + # following run test, then default to *not* using the included regex.c. + # If cross compiling, assume the test would fail and use the included + # regex.c. + AC_CHECK_DECLS_ONCE([alarm]) + AC_CHECK_HEADERS_ONCE([malloc.h]) + AC_CACHE_CHECK([for working re_compile_pattern], + [gl_cv_func_re_compile_pattern_working], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <regex.h> + + #include <locale.h> + #include <limits.h> + #include <string.h> + + #if defined M_CHECK_ACTION || HAVE_DECL_ALARM + # include <signal.h> + # include <unistd.h> + #endif + + #if HAVE_MALLOC_H + # include <malloc.h> + #endif + + #ifdef M_CHECK_ACTION + /* Exit with distinguishable exit code. */ + static void sigabrt_no_core (int sig) { raise (SIGTERM); } + #endif + ]], + [[int result = 0; + static struct re_pattern_buffer regex; + unsigned char folded_chars[UCHAR_MAX + 1]; + int i; + const char *s; + struct re_registers regs; + + /* Some builds of glibc go into an infinite loop on this + test. Use alarm to force death, and mallopt to avoid + malloc recursion in diagnosing the corrupted heap. */ +#if HAVE_DECL_ALARM + signal (SIGALRM, SIG_DFL); + alarm (2); +#endif +#ifdef M_CHECK_ACTION + signal (SIGABRT, sigabrt_no_core); + mallopt (M_CHECK_ACTION, 2); +#endif + + if (setlocale (LC_ALL, "en_US.UTF-8")) + { + { + /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html + This test needs valgrind to catch the bug on Debian + GNU/Linux 3.1 x86, but it might catch the bug better + on other platforms and it shouldn't hurt to try the + test here. */ + static char const pat[] = "insert into"; + static char const data[] = + "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; + re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE + | RE_ICASE); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern (pat, sizeof pat - 1, ®ex); + if (s) + result |= 1; + else if (re_search (®ex, data, sizeof data - 1, + 0, sizeof data - 1, ®s) + != -1) + result |= 1; + regfree (®ex); + } + + { + /* This test is from glibc bug 15078. + The test case is from Andreas Schwab in + <https://sourceware.org/ml/libc-alpha/2013-01/msg00967.html>. + */ + static char const pat[] = "[^x]x"; + static char const data[] = + /* <U1000><U103B><U103D><U1014><U103A><U102F><U1015><U103A> */ + "\xe1\x80\x80" + "\xe1\x80\xbb" + "\xe1\x80\xbd" + "\xe1\x80\x94" + "\xe1\x80\xba" + "\xe1\x80\xaf" + "\xe1\x80\x95" + "\xe1\x80\xba" + "x"; + re_set_syntax (0); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern (pat, sizeof pat - 1, ®ex); + if (s) + result |= 1; + else + { + i = re_search (®ex, data, sizeof data - 1, + 0, sizeof data - 1, 0); + if (i != 0 && i != 21) + result |= 1; + } + regfree (®ex); + } + + if (! setlocale (LC_ALL, "C")) + return 1; + } + + /* This test is from glibc bug 3957, reported by Andrew Mackey. */ + re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("a[^x]b", 6, ®ex); + if (s) + result |= 2; + /* This should fail, but succeeds for glibc-2.5. */ + else if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) + result |= 2; + + /* This regular expression is from Spencer ere test number 75 + in grep-2.3. */ + re_set_syntax (RE_SYNTAX_POSIX_EGREP); + memset (®ex, 0, sizeof regex); + for (i = 0; i <= UCHAR_MAX; i++) + folded_chars[i] = i; + regex.translate = folded_chars; + s = re_compile_pattern ("a[[:@:>@:]]b\n", 11, ®ex); + /* This should fail with _Invalid character class name_ error. */ + if (!s) + result |= 4; + + /* Ensure that [b-a] is diagnosed as invalid, when + using RE_NO_EMPTY_RANGES. */ + re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("a[b-a]", 6, ®ex); + if (s == 0) + result |= 8; + + /* This should succeed, but does not for glibc-2.1.3. */ + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("{1", 2, ®ex); + if (s) + result |= 8; + + /* The following example is derived from a problem report + against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */ + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("[an\371]*n", 7, ®ex); + if (s) + result |= 8; + /* This should match, but does not for glibc-2.2.1. */ + else if (re_match (®ex, "an", 2, 0, ®s) != 2) + result |= 8; + + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("x", 1, ®ex); + if (s) + result |= 8; + /* glibc-2.2.93 does not work with a negative RANGE argument. */ + else if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) + result |= 8; + + /* The version of regex.c in older versions of gnulib + ignored RE_ICASE. Detect that problem too. */ + re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("x", 1, ®ex); + if (s) + result |= 16; + else if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) + result |= 16; + + /* Catch a bug reported by Vin Shelton in + https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html + */ + re_set_syntax (RE_SYNTAX_POSIX_BASIC + & ~RE_CONTEXT_INVALID_DUP + & ~RE_NO_EMPTY_RANGES); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("[[:alnum:]_-]\\\\+$", 16, ®ex); + if (s) + result |= 32; + + /* REG_STARTEND was added to glibc on 2004-01-15. + Reject older versions. */ + if (! REG_STARTEND) + result |= 64; + + /* Matching with the compiled form of this regexp would provoke + an assertion failure prior to glibc-2.28: + regexec.c:1375: pop_fail_stack: Assertion 'num >= 0' failed + With glibc-2.28, compilation fails and reports the invalid + back reference. */ + re_set_syntax (RE_SYNTAX_POSIX_EGREP); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("0|()0|\\1|0", 10, ®ex); + if (!s || strcmp (s, "Invalid back reference")) + result |= 64; + +#if 0 + /* It would be nice to reject hosts whose regoff_t values are too + narrow (including glibc on hosts with 64-bit ptrdiff_t and + 32-bit int), but we should wait until glibc implements this + feature. Otherwise, support for equivalence classes and + multibyte collation symbols would always be broken except + when compiling --without-included-regex. */ + if (sizeof (regoff_t) < sizeof (ptrdiff_t) + || sizeof (regoff_t) < sizeof (ssize_t)) + result |= 64; +#endif + + return result; + ]])], + [gl_cv_func_re_compile_pattern_working=yes], + [gl_cv_func_re_compile_pattern_working=no], + [case "$host_os" in + # Guess no on native Windows. + mingw*) gl_cv_func_re_compile_pattern_working="guessing no" ;; + # Otherwise, assume it is not working. + *) gl_cv_func_re_compile_pattern_working="guessing no" ;; + esac + ]) + ]) + case "$gl_cv_func_re_compile_pattern_working" in #( + *yes) ac_use_included_regex=no;; #( + *no) ac_use_included_regex=yes;; + esac + ;; + *) AC_MSG_ERROR([Invalid value for --with-included-regex: $with_included_regex]) + ;; + esac + + if test $ac_use_included_regex = yes; then + AC_DEFINE([_REGEX_INCLUDE_LIMITS_H], [1], + [Define if you want <regex.h> to include <limits.h>, so that it + consistently overrides <limits.h>'s RE_DUP_MAX.]) + AC_DEFINE([_REGEX_LARGE_OFFSETS], [1], + [Define if you want regoff_t to be at least as wide POSIX requires.]) + AC_DEFINE([re_syntax_options], [rpl_re_syntax_options], + [Define to rpl_re_syntax_options if the replacement should be used.]) + AC_DEFINE([re_set_syntax], [rpl_re_set_syntax], + [Define to rpl_re_set_syntax if the replacement should be used.]) + AC_DEFINE([re_compile_pattern], [rpl_re_compile_pattern], + [Define to rpl_re_compile_pattern if the replacement should be used.]) + AC_DEFINE([re_compile_fastmap], [rpl_re_compile_fastmap], + [Define to rpl_re_compile_fastmap if the replacement should be used.]) + AC_DEFINE([re_search], [rpl_re_search], + [Define to rpl_re_search if the replacement should be used.]) + AC_DEFINE([re_search_2], [rpl_re_search_2], + [Define to rpl_re_search_2 if the replacement should be used.]) + AC_DEFINE([re_match], [rpl_re_match], + [Define to rpl_re_match if the replacement should be used.]) + AC_DEFINE([re_match_2], [rpl_re_match_2], + [Define to rpl_re_match_2 if the replacement should be used.]) + AC_DEFINE([re_set_registers], [rpl_re_set_registers], + [Define to rpl_re_set_registers if the replacement should be used.]) + AC_DEFINE([re_comp], [rpl_re_comp], + [Define to rpl_re_comp if the replacement should be used.]) + AC_DEFINE([re_exec], [rpl_re_exec], + [Define to rpl_re_exec if the replacement should be used.]) + AC_DEFINE([regcomp], [rpl_regcomp], + [Define to rpl_regcomp if the replacement should be used.]) + AC_DEFINE([regexec], [rpl_regexec], + [Define to rpl_regexec if the replacement should be used.]) + AC_DEFINE([regerror], [rpl_regerror], + [Define to rpl_regerror if the replacement should be used.]) + AC_DEFINE([regfree], [rpl_regfree], + [Define to rpl_regfree if the replacement should be used.]) + fi +]) + +# Prerequisites of lib/regex.c and lib/regex_internal.c. +AC_DEFUN([gl_PREREQ_REGEX], +[ + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + AC_REQUIRE([AC_C_INLINE]) + AC_REQUIRE([AC_C_RESTRICT]) + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + AC_REQUIRE([gl_EEMALLOC]) + AC_REQUIRE([gl_GLIBC21]) + AC_CHECK_HEADERS([libintl.h]) + AC_CHECK_FUNCS_ONCE([isblank iswctype]) + AC_CHECK_DECLS([isblank], [], [], [[#include <ctype.h>]]) +]) diff --git a/devspec.en_US/project/recutils/m4/rename.m4 b/devspec.en_US/project/recutils/m4/rename.m4 new file mode 100755 index 0000000..7318e75 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/rename.m4 @@ -0,0 +1,250 @@ +# serial 31 + +# Copyright (C) 2001, 2003, 2005-2006, 2009-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl From Volker Borchert. +dnl Determine whether rename works for source file names with a trailing slash. +dnl The rename from SunOS 4.1.1_U1 doesn't. +dnl +dnl If it doesn't, then define RENAME_TRAILING_SLASH_BUG and arrange +dnl to compile the wrapper function. +dnl + +AC_DEFUN([gl_FUNC_RENAME], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([lstat]) + + dnl Solaris 11.3, AIX 7.1 mistakenly allow rename("file","name/"). + dnl NetBSD 1.6 mistakenly forbids rename("dir","name/"). + dnl FreeBSD 7.2 mistakenly allows rename("file","link-to-file/"). + dnl The Solaris bug can be worked around without stripping + dnl trailing slash, while the NetBSD bug requires stripping; + dnl the two conditions can be distinguished by whether hard + dnl links are also broken. + AC_CACHE_CHECK([whether rename honors trailing slash on destination], + [gl_cv_func_rename_slash_dst_works], + [rm -rf conftest.f conftest.f1 conftest.f2 conftest.d1 conftest.d2 conftest.lnk + touch conftest.f && touch conftest.f1 && mkdir conftest.d1 || + AC_MSG_ERROR([cannot create temporary files]) + # Assume that if we have lstat, we can also check symlinks. + if test $ac_cv_func_lstat = yes; then + ln -s conftest.f conftest.lnk + fi + AC_RUN_IFELSE( + [AC_LANG_PROGRAM([[ +# include <stdio.h> +# include <stdlib.h> + ]], + [[int result = 0; + if (rename ("conftest.f1", "conftest.f2/") == 0) + result |= 1; + if (rename ("conftest.d1", "conftest.d2/") != 0) + result |= 2; +#if HAVE_LSTAT + if (rename ("conftest.f", "conftest.lnk/") == 0) + result |= 4; +#endif + return result; + ]])], + [gl_cv_func_rename_slash_dst_works=yes], + [gl_cv_func_rename_slash_dst_works=no], + dnl When crosscompiling, assume rename is broken. + [case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rename_slash_dst_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_rename_slash_dst_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_rename_slash_dst_works="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_rename_slash_dst_works="guessing no" ;; + esac + ]) + rm -rf conftest.f conftest.f1 conftest.f2 conftest.d1 conftest.d2 conftest.lnk + ]) + case "$gl_cv_func_rename_slash_dst_works" in + *yes) ;; + *) + REPLACE_RENAME=1 + AC_DEFINE([RENAME_TRAILING_SLASH_DEST_BUG], [1], + [Define if rename does not correctly handle slashes on the destination + argument, such as on Solaris 11 or NetBSD 1.6.]) + ;; + esac + + dnl SunOS 4.1.1_U1 mistakenly forbids rename("dir/","name"). + dnl Solaris 9 mistakenly allows rename("file/","name"). + dnl FreeBSD 7.2 mistakenly allows rename("link-to-file/","name"). + dnl These bugs require stripping trailing slash to avoid corrupting + dnl symlinks with a trailing slash. + AC_CACHE_CHECK([whether rename honors trailing slash on source], + [gl_cv_func_rename_slash_src_works], + [rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.d3 conftest.lnk + touch conftest.f && touch conftest.f1 && mkdir conftest.d1 || + AC_MSG_ERROR([cannot create temporary files]) + # Assume that if we have lstat, we can also check symlinks. + if test $ac_cv_func_lstat = yes; then + ln -s conftest.f conftest.lnk + fi + AC_RUN_IFELSE( + [AC_LANG_PROGRAM([[ +# include <stdio.h> +# include <stdlib.h> + ]], + [[int result = 0; + if (rename ("conftest.f1/", "conftest.d3") == 0) + result |= 1; + if (rename ("conftest.d1/", "conftest.d2") != 0) + result |= 2; +#if HAVE_LSTAT + if (rename ("conftest.lnk/", "conftest.f") == 0) + result |= 4; +#endif + return result; + ]])], + [gl_cv_func_rename_slash_src_works=yes], + [gl_cv_func_rename_slash_src_works=no], + dnl When crosscompiling, assume rename is broken. + [case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rename_slash_src_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_rename_slash_src_works="guessing yes" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_rename_slash_src_works="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_rename_slash_src_works="guessing no" ;; + esac + ]) + rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.d3 conftest.lnk + ]) + case "$gl_cv_func_rename_slash_src_works" in + *yes) ;; + *) + REPLACE_RENAME=1 + AC_DEFINE([RENAME_TRAILING_SLASH_SOURCE_BUG], [1], + [Define if rename does not correctly handle slashes on the source + argument, such as on Solaris 9 or cygwin 1.5.]) + ;; + esac + + dnl NetBSD 1.6 and cygwin 1.5.x mistakenly reduce hard link count + dnl on rename("h1","h2"). + dnl This bug requires stat'ting targets prior to attempting rename. + AC_CHECK_FUNCS_ONCE([link]) + AC_CACHE_CHECK([whether rename manages hard links correctly], + [gl_cv_func_rename_link_works], + [if test $ac_cv_func_link = yes; then + rm -rf conftest.f conftest.f1 conftest.f2 + if touch conftest.f conftest.f2 && ln conftest.f conftest.f1 && + set x `ls -i conftest.f conftest.f1` && test "$2" = "$4"; then + AC_RUN_IFELSE( + [AC_LANG_PROGRAM([[ +# include <errno.h> +# include <stdio.h> +# include <stdlib.h> +# include <unistd.h> + ]], + [[int result = 0; + if (rename ("conftest.f", "conftest.f1")) + result |= 1; + if (unlink ("conftest.f1")) + result |= 2; + + /* Allow either the POSIX-required behavior, where the + previous rename kept conftest.f, or the (better) NetBSD + behavior, where it removed conftest.f. */ + if (rename ("conftest.f", "conftest.f") != 0 + && errno != ENOENT) + result |= 4; + + if (rename ("conftest.f1", "conftest.f1") == 0) + result |= 8; + if (rename ("conftest.f2", "conftest.f2") != 0) + result |= 16; + return result; + ]])], + [gl_cv_func_rename_link_works=yes], + [gl_cv_func_rename_link_works=no], + dnl When crosscompiling, assume rename is broken. + [case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rename_link_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_rename_link_works="guessing yes" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_rename_link_works="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_rename_link_works="guessing no" ;; + esac + ]) + else + gl_cv_func_rename_link_works="guessing no" + fi + rm -rf conftest.f conftest.f1 conftest.f2 + else + gl_cv_func_rename_link_works=yes + fi + ]) + case "$gl_cv_func_rename_link_works" in + *yes) ;; + *) + REPLACE_RENAME=1 + AC_DEFINE([RENAME_HARD_LINK_BUG], [1], + [Define if rename fails to leave hard links alone, as on NetBSD 1.6 + or Cygwin 1.5.]) + ;; + esac + + dnl Cygwin 1.5.x mistakenly allows rename("dir","file"). + dnl mingw mistakenly forbids rename("dir1","dir2"). + dnl These bugs require stripping trailing slash to avoid corrupting + dnl symlinks with a trailing slash. + AC_CACHE_CHECK([whether rename manages existing destinations correctly], + [gl_cv_func_rename_dest_works], + [rm -rf conftest.f conftest.d1 conftest.d2 + touch conftest.f && mkdir conftest.d1 conftest.d2 || + AC_MSG_ERROR([cannot create temporary files]) + AC_RUN_IFELSE( + [AC_LANG_PROGRAM([[ +# include <stdio.h> +# include <stdlib.h> + ]], + [[int result = 0; + if (rename ("conftest.d1", "conftest.d2") != 0) + result |= 1; + if (rename ("conftest.d2", "conftest.f") == 0) + result |= 2; + return result; + ]])], + [gl_cv_func_rename_dest_works=yes], + [gl_cv_func_rename_dest_works=no], + dnl When crosscompiling, assume rename is broken. + [case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rename_dest_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_rename_dest_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_rename_dest_works="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_rename_dest_works="guessing no" ;; + esac + ]) + rm -rf conftest.f conftest.d1 conftest.d2 + ]) + case "$gl_cv_func_rename_dest_works" in + *yes) ;; + *) + REPLACE_RENAME=1 + AC_DEFINE([RENAME_DEST_EXISTS_BUG], [1], + [Define if rename does not work when the destination file exists, + as on Cygwin 1.5 or Windows.]) + ;; + esac +]) diff --git a/devspec.en_US/project/recutils/m4/rmdir.m4 b/devspec.en_US/project/recutils/m4/rmdir.m4 new file mode 100755 index 0000000..5d32caa --- /dev/null +++ b/devspec.en_US/project/recutils/m4/rmdir.m4 @@ -0,0 +1,53 @@ +# rmdir.m4 serial 16 +dnl Copyright (C) 2002, 2005, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_RMDIR], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + dnl Detect cygwin 1.5.x bug. + AC_CHECK_HEADERS_ONCE([unistd.h]) + AC_CACHE_CHECK([whether rmdir works], [gl_cv_func_rmdir_works], + [mkdir conftest.dir + touch conftest.file + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <stdio.h> + #include <errno.h> + #if HAVE_UNISTD_H + # include <unistd.h> + #else /* on Windows with MSVC */ + # include <direct.h> + #endif +]], [[int result = 0; + if (!rmdir ("conftest.file/")) + result |= 1; + else if (errno != ENOTDIR) + result |= 2; + if (!rmdir ("conftest.dir/./")) + result |= 4; + return result; + ]])], + [gl_cv_func_rmdir_works=yes], [gl_cv_func_rmdir_works=no], + [case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_rmdir_works="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_rmdir_works="guessing yes" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_rmdir_works="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_rmdir_works="guessing no" ;; + esac + ]) + rm -rf conftest.dir conftest.file]) + case "$gl_cv_func_rmdir_works" in + *yes) ;; + *) + REPLACE_RMDIR=1 + ;; + esac +]) diff --git a/devspec.en_US/project/recutils/m4/sched_h.m4 b/devspec.en_US/project/recutils/m4/sched_h.m4 new file mode 100755 index 0000000..c7a1d97 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/sched_h.m4 @@ -0,0 +1,75 @@ +# sched_h.m4 serial 11 +dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Bruno Haible. + +AC_DEFUN([gl_SCHED_H], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CHECK_HEADERS_ONCE([sys/cdefs.h]) + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ + #include <sched.h> + struct sched_param a; + int b[] = { SCHED_FIFO, SCHED_RR, SCHED_OTHER }; + pid_t t1; + ]])], + [SCHED_H=''], + [SCHED_H='sched.h' + AC_CHECK_HEADERS([sched.h], [], [], + [[#if HAVE_SYS_CDEFS_H + #include <sys/cdefs.h> + #endif + ]]) + gl_NEXT_HEADERS([sched.h]) + + if test "$ac_cv_header_sched_h" = yes; then + HAVE_SCHED_H=1 + else + HAVE_SCHED_H=0 + fi + AC_SUBST([HAVE_SCHED_H]) + + if test "$HAVE_SCHED_H" = 1; then + AC_CHECK_TYPE([struct sched_param], + [HAVE_STRUCT_SCHED_PARAM=1], [HAVE_STRUCT_SCHED_PARAM=0], + [[#if HAVE_SYS_CDEFS_H + #include <sys/cdefs.h> + #endif + #include <sched.h> + ]]) + else + HAVE_STRUCT_SCHED_PARAM=0 + case "$host_os" in + os2*) + dnl On OS/2 kLIBC, struct sched_param is in spawn.h. + AC_CHECK_TYPE([struct sched_param], + [HAVE_STRUCT_SCHED_PARAM=1], [], + [#include <spawn.h>]) + ;; + vms) + dnl On OpenVMS 7.2 or newer, struct sched_param is in pthread.h. + AC_CHECK_TYPE([struct sched_param], + [HAVE_STRUCT_SCHED_PARAM=1], [], + [#include <pthread.h>]) + ;; + esac + fi + AC_SUBST([HAVE_STRUCT_SCHED_PARAM]) + + if test "$ac_cv_header_sys_cdefs_h" = yes; then + HAVE_SYS_CDEFS_H=1 + else + HAVE_SYS_CDEFS_H=0 + fi + AC_SUBST([HAVE_SYS_CDEFS_H]) + + dnl Ensure the type pid_t gets defined. + AC_REQUIRE([AC_TYPE_PID_T]) + ]) + AC_SUBST([SCHED_H]) + AM_CONDITIONAL([GL_GENERATE_SCHED_H], [test -n "$SCHED_H"]) +]) diff --git a/devspec.en_US/project/recutils/m4/secure_getenv.m4 b/devspec.en_US/project/recutils/m4/secure_getenv.m4 new file mode 100755 index 0000000..ef3788d --- /dev/null +++ b/devspec.en_US/project/recutils/m4/secure_getenv.m4 @@ -0,0 +1,26 @@ +# Look up an environment variable more securely. +dnl Copyright 2013-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_SECURE_GETENV], +[ + dnl Persuade glibc <stdlib.h> to declare secure_getenv(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([secure_getenv]) + if test $ac_cv_func_secure_getenv = no; then + HAVE_SECURE_GETENV=0 + fi +]) + +# Prerequisites of lib/secure_getenv.c. +AC_DEFUN([gl_PREREQ_SECURE_GETENV], [ + AC_CHECK_FUNCS([__secure_getenv]) + if test $ac_cv_func___secure_getenv = no; then + AC_CHECK_FUNCS([issetugid]) + fi + AC_CHECK_FUNCS_ONCE([getuid geteuid getgid getegid]) +]) diff --git a/devspec.en_US/project/recutils/m4/selinux-context-h.m4 b/devspec.en_US/project/recutils/m4/selinux-context-h.m4 new file mode 100755 index 0000000..c45026f --- /dev/null +++ b/devspec.en_US/project/recutils/m4/selinux-context-h.m4 @@ -0,0 +1,22 @@ +# serial 3 -*- Autoconf -*- +# Copyright (C) 2006-2007, 2009-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# From Jim Meyering +# Provide <selinux/context.h>, if necessary. + +AC_DEFUN([gl_HEADERS_SELINUX_CONTEXT_H], +[ + AC_REQUIRE([gl_LIBSELINUX]) + if test "$with_selinux" != no; then + AC_CHECK_HEADERS([selinux/context.h], + [SELINUX_CONTEXT_H=], + [SELINUX_CONTEXT_H=selinux/context.h]) + else + SELINUX_CONTEXT_H=selinux/context.h + fi + AC_SUBST([SELINUX_CONTEXT_H]) + AM_CONDITIONAL([GL_GENERATE_SELINUX_CONTEXT_H], [test -n "$SELINUX_CONTEXT_H"]) +]) diff --git a/devspec.en_US/project/recutils/m4/selinux-selinux-h.m4 b/devspec.en_US/project/recutils/m4/selinux-selinux-h.m4 new file mode 100755 index 0000000..8bbbf05 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/selinux-selinux-h.m4 @@ -0,0 +1,71 @@ +# serial 5 -*- Autoconf -*- +# Copyright (C) 2006-2007, 2009-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# From Jim Meyering +# Provide <selinux/selinux.h>, if necessary. +# If it is already present, provide wrapper functions to guard against +# misbehavior from getfilecon, lgetfilecon, and fgetfilecon. + +AC_DEFUN([gl_HEADERS_SELINUX_SELINUX_H], +[ + AC_REQUIRE([gl_LIBSELINUX]) + if test "$with_selinux" != no; then + AC_CHECK_HEADERS([selinux/selinux.h]) + + if test "$ac_cv_header_selinux_selinux_h" = yes; then + # We do have <selinux/selinux.h>, so do compile getfilecon.c + # and arrange to use its wrappers. + gl_CHECK_NEXT_HEADERS([selinux/selinux.h]) + AC_DEFINE([getfilecon], [rpl_getfilecon], + [Always use our getfilecon wrapper.]) + AC_DEFINE([lgetfilecon], [rpl_lgetfilecon], + [Always use our lgetfilecon wrapper.]) + AC_DEFINE([fgetfilecon], [rpl_fgetfilecon], + [Always use our fgetfilecon wrapper.]) + fi + + case "$ac_cv_search_setfilecon:$ac_cv_header_selinux_selinux_h" in + no:*) # already warned + ;; + *:no) + AC_MSG_WARN([libselinux was found but selinux/selinux.h is missing.]) + AC_MSG_WARN([AC_PACKAGE_NAME will be compiled without SELinux support.]) + esac + else + # Do as if <selinux/selinux.h> does not exist, even if + # AC_CHECK_HEADERS_ONCE has already determined that it exists. + AC_DEFINE([HAVE_SELINUX_SELINUX_H], [0]) + fi +]) + +AC_DEFUN([gl_LIBSELINUX], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_CANONICAL_BUILD]) + + AC_ARG_WITH([selinux], + AS_HELP_STRING([--without-selinux], [do not use SELinux, even on systems with SELinux]), + [], [with_selinux=maybe]) + + LIB_SELINUX= + if test "$with_selinux" != no; then + gl_save_LIBS=$LIBS + AC_SEARCH_LIBS([setfilecon], [selinux], + [test "$ac_cv_search_setfilecon" = "none required" || + LIB_SELINUX=$ac_cv_search_setfilecon]) + LIBS=$gl_save_LIBS + fi + AC_SUBST([LIB_SELINUX]) + + # Warn if SELinux is found but libselinux is absent; + if test "$ac_cv_search_setfilecon" = no; then + if test "$host" = "$build" && test -d /selinux; then + AC_MSG_WARN([This system supports SELinux but libselinux is missing.]) + AC_MSG_WARN([AC_PACKAGE_NAME will be compiled without SELinux support.]) + fi + with_selinux=no + fi +]) diff --git a/devspec.en_US/project/recutils/m4/setenv.m4 b/devspec.en_US/project/recutils/m4/setenv.m4 new file mode 100755 index 0000000..6101274 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/setenv.m4 @@ -0,0 +1,160 @@ +# setenv.m4 serial 27 +dnl Copyright (C) 2001-2004, 2006-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_SETENV], +[ + AC_REQUIRE([gl_FUNC_SETENV_SEPARATE]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + if test $ac_cv_func_setenv = no; then + HAVE_SETENV=0 + else + AC_CACHE_CHECK([whether setenv validates arguments], + [gl_cv_func_setenv_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ + #include <stdlib.h> + #include <errno.h> + #include <string.h> + ]], [[ + int result = 0; + { + if (setenv ("", "", 0) != -1) + result |= 1; + else if (errno != EINVAL) + result |= 2; + } + { + if (setenv ("a", "=", 1) != 0) + result |= 4; + else if (strcmp (getenv ("a"), "=") != 0) + result |= 8; + } + return result; + ]])], + [gl_cv_func_setenv_works=yes], [gl_cv_func_setenv_works=no], + [case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_setenv_works="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_setenv_works="guessing no" ;; + esac + ])]) + case "$gl_cv_func_setenv_works" in + *yes) ;; + *) + REPLACE_SETENV=1 + ;; + esac + fi +]) + +# Like gl_FUNC_SETENV, except prepare for separate compilation +# (no REPLACE_SETENV, no AC_LIBOBJ). +AC_DEFUN([gl_FUNC_SETENV_SEPARATE], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_CHECK_DECLS_ONCE([setenv]) + if test $ac_cv_have_decl_setenv = no; then + HAVE_DECL_SETENV=0 + fi + AC_CHECK_FUNCS_ONCE([setenv]) + gl_PREREQ_SETENV +]) + +AC_DEFUN([gl_FUNC_UNSETENV], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CHECK_DECLS_ONCE([unsetenv]) + if test $ac_cv_have_decl_unsetenv = no; then + HAVE_DECL_UNSETENV=0 + fi + AC_CHECK_FUNCS([unsetenv]) + if test $ac_cv_func_unsetenv = no; then + HAVE_UNSETENV=0 + else + HAVE_UNSETENV=1 + dnl Some BSDs return void, failing to do error checking. + AC_CACHE_CHECK([for unsetenv() return type], [gt_cv_func_unsetenv_ret], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +#undef _BSD +#define _BSD 1 /* unhide unsetenv declaration in OSF/1 5.1 <stdlib.h> */ +#include <stdlib.h> +extern +#ifdef __cplusplus +"C" +#endif +int unsetenv (const char *name); + ]], + [[]])], + [gt_cv_func_unsetenv_ret='int'], + [gt_cv_func_unsetenv_ret='void'])]) + if test $gt_cv_func_unsetenv_ret = 'void'; then + AC_DEFINE([VOID_UNSETENV], [1], [Define to 1 if unsetenv returns void + instead of int.]) + REPLACE_UNSETENV=1 + fi + + dnl Solaris 10 unsetenv does not remove all copies of a name. + dnl Haiku alpha 2 unsetenv gets confused by assignment to environ. + dnl OpenBSD 4.7 unsetenv("") does not fail. + AC_CACHE_CHECK([whether unsetenv obeys POSIX], + [gl_cv_func_unsetenv_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ + #include <stdlib.h> + #include <errno.h> + extern char **environ; + ]], [[ + char entry1[] = "a=1"; + char entry2[] = "b=2"; + char *env[] = { entry1, entry2, NULL }; + if (putenv ((char *) "a=1")) return 1; + if (putenv (entry2)) return 2; + entry2[0] = 'a'; + unsetenv ("a"); + if (getenv ("a")) return 3; + if (!unsetenv ("") || errno != EINVAL) return 4; + entry2[0] = 'b'; + environ = env; + if (!getenv ("a")) return 5; + entry2[0] = 'a'; + unsetenv ("a"); + if (getenv ("a")) return 6; + ]])], + [gl_cv_func_unsetenv_works=yes], [gl_cv_func_unsetenv_works=no], + [case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_unsetenv_works="guessing no" ;; + esac + ])]) + case "$gl_cv_func_unsetenv_works" in + *yes) ;; + *) + REPLACE_UNSETENV=1 + ;; + esac + fi +]) + +# Prerequisites of lib/setenv.c. +AC_DEFUN([gl_PREREQ_SETENV], +[ + AC_REQUIRE([AC_FUNC_ALLOCA]) + AC_REQUIRE([gl_ENVIRON]) + AC_CHECK_HEADERS_ONCE([unistd.h]) + AC_CHECK_HEADERS([search.h]) + AC_CHECK_FUNCS([tsearch]) +]) + +# Prerequisites of lib/unsetenv.c. +AC_DEFUN([gl_PREREQ_UNSETENV], +[ + AC_REQUIRE([gl_ENVIRON]) + AC_CHECK_HEADERS_ONCE([unistd.h]) +]) diff --git a/devspec.en_US/project/recutils/m4/sh-filename.m4 b/devspec.en_US/project/recutils/m4/sh-filename.m4 new file mode 100755 index 0000000..3e7fe75 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/sh-filename.m4 @@ -0,0 +1,20 @@ +# sh-filename.m4 serial 1 +dnl Copyright (C) 2018-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([gl_SH_FILENAME], +[ + AH_VERBATIM([SH_FILENAME], +[/* File name of the Bourne shell. */ +#if defined __CYGWIN__ +/* Omit the directory part because for 32-bit Cygwin programs in a + 64-bit Cygwin environment, the Cygwin mounts are not visible. */ +# define BOURNE_SHELL "sh" +#else +# define BOURNE_SHELL "/bin/sh" +#endif]) +]) diff --git a/devspec.en_US/project/recutils/m4/sig_atomic_t.m4 b/devspec.en_US/project/recutils/m4/sig_atomic_t.m4 new file mode 100755 index 0000000..2a31575 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/sig_atomic_t.m4 @@ -0,0 +1,14 @@ +# sig_atomic_t.m4 serial 3 +dnl Copyright (C) 2003, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gt_TYPE_SIG_ATOMIC_T], +[ + AC_CHECK_TYPES([sig_atomic_t], , + [AC_DEFINE([sig_atomic_t], [int], + [Define as an integer type suitable for memory locations that can be + accessed atomically even in the presence of asynchronous signals.])], + [#include <signal.h>]) +]) diff --git a/devspec.en_US/project/recutils/m4/sigaction.m4 b/devspec.en_US/project/recutils/m4/sigaction.m4 new file mode 100755 index 0000000..6117d1b --- /dev/null +++ b/devspec.en_US/project/recutils/m4/sigaction.m4 @@ -0,0 +1,40 @@ +# sigaction.m4 serial 7 +dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Determine if sigaction interface is present. +AC_DEFUN([gl_SIGACTION], +[ + AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([sigaction]) + if test $ac_cv_func_sigaction = yes; then + AC_CHECK_MEMBERS([struct sigaction.sa_sigaction], , , + [[#include <signal.h>]]) + if test $ac_cv_member_struct_sigaction_sa_sigaction = no; then + HAVE_STRUCT_SIGACTION_SA_SIGACTION=0 + fi + else + HAVE_SIGACTION=0 + fi +]) + +# Prerequisites of the part of lib/signal.in.h and of lib/sigaction.c. +AC_DEFUN([gl_PREREQ_SIGACTION], +[ + AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) + AC_REQUIRE([AC_C_RESTRICT]) + AC_REQUIRE([AC_TYPE_UID_T]) + AC_REQUIRE([gl_PREREQ_SIG_HANDLER_H]) + AC_CHECK_FUNCS_ONCE([sigaltstack siginterrupt]) + AC_CHECK_TYPES([siginfo_t], [], [], [[ +#include <signal.h> + ]]) + if test $ac_cv_type_siginfo_t = no; then + HAVE_SIGINFO_T=0 + fi +]) + +# Prerequisites of lib/sig-handler.h. +AC_DEFUN([gl_PREREQ_SIG_HANDLER_H], [:]) diff --git a/devspec.en_US/project/recutils/m4/signal_h.m4 b/devspec.en_US/project/recutils/m4/signal_h.m4 new file mode 100755 index 0000000..3acec64 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/signal_h.m4 @@ -0,0 +1,83 @@ +# signal_h.m4 serial 18 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_SIGNAL_H], +[ + AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) + AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T]) + gl_NEXT_HEADERS([signal.h]) + +# AIX declares sig_atomic_t to already include volatile, and C89 compilers +# then choke on 'volatile sig_atomic_t'. C99 requires that it compile. + AC_CHECK_TYPE([volatile sig_atomic_t], [], + [HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0], [[ +#include <signal.h> + ]]) + + dnl Ensure the type pid_t gets defined. + AC_REQUIRE([AC_TYPE_PID_T]) + + AC_REQUIRE([AC_TYPE_UID_T]) + + dnl Persuade glibc <signal.h> to define sighandler_t. + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + AC_CHECK_TYPE([sighandler_t], [], [HAVE_SIGHANDLER_T=0], [[ +#include <signal.h> + ]]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[#include <signal.h> + ]], [pthread_sigmask sigaction + sigaddset sigdelset sigemptyset sigfillset sigismember + sigpending sigprocmask]) +]) + +AC_DEFUN([gl_CHECK_TYPE_SIGSET_T], +[ + AC_CHECK_TYPES([sigset_t], + [gl_cv_type_sigset_t=yes], [gl_cv_type_sigset_t=no], + [[ + #include <signal.h> + /* Mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. */ + #include <sys/types.h> + ]]) + if test $gl_cv_type_sigset_t != yes; then + HAVE_SIGSET_T=0 + fi +]) + +AC_DEFUN([gl_SIGNAL_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_SIGNAL_H_DEFAULTS], +[ + GNULIB_PTHREAD_SIGMASK=0; AC_SUBST([GNULIB_PTHREAD_SIGMASK]) + GNULIB_RAISE=0; AC_SUBST([GNULIB_RAISE]) + GNULIB_SIGNAL_H_SIGPIPE=0; AC_SUBST([GNULIB_SIGNAL_H_SIGPIPE]) + GNULIB_SIGPROCMASK=0; AC_SUBST([GNULIB_SIGPROCMASK]) + GNULIB_SIGACTION=0; AC_SUBST([GNULIB_SIGACTION]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_POSIX_SIGNALBLOCKING=1; AC_SUBST([HAVE_POSIX_SIGNALBLOCKING]) + HAVE_PTHREAD_SIGMASK=1; AC_SUBST([HAVE_PTHREAD_SIGMASK]) + HAVE_RAISE=1; AC_SUBST([HAVE_RAISE]) + HAVE_SIGSET_T=1; AC_SUBST([HAVE_SIGSET_T]) + HAVE_SIGINFO_T=1; AC_SUBST([HAVE_SIGINFO_T]) + HAVE_SIGACTION=1; AC_SUBST([HAVE_SIGACTION]) + HAVE_STRUCT_SIGACTION_SA_SIGACTION=1; + AC_SUBST([HAVE_STRUCT_SIGACTION_SA_SIGACTION]) + HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1; + AC_SUBST([HAVE_TYPE_VOLATILE_SIG_ATOMIC_T]) + HAVE_SIGHANDLER_T=1; AC_SUBST([HAVE_SIGHANDLER_T]) + REPLACE_PTHREAD_SIGMASK=0; AC_SUBST([REPLACE_PTHREAD_SIGMASK]) + REPLACE_RAISE=0; AC_SUBST([REPLACE_RAISE]) +]) diff --git a/devspec.en_US/project/recutils/m4/signalblocking.m4 b/devspec.en_US/project/recutils/m4/signalblocking.m4 new file mode 100755 index 0000000..d722f65 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/signalblocking.m4 @@ -0,0 +1,25 @@ +# signalblocking.m4 serial 14 +dnl Copyright (C) 2001-2002, 2006-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Determine available signal blocking primitives. Three different APIs exist: +# 1) POSIX: sigemptyset, sigaddset, sigprocmask +# 2) SYSV: sighold, sigrelse +# 3) BSD: sigblock, sigsetmask +# For simplicity, here we check only for the POSIX signal blocking. +AC_DEFUN([gl_SIGNALBLOCKING], +[ + AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) + AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T]) + if test $gl_cv_type_sigset_t = yes; then + AC_CHECK_FUNC([sigprocmask], [gl_cv_func_sigprocmask=1]) + fi + if test -z "$gl_cv_func_sigprocmask"; then + HAVE_POSIX_SIGNALBLOCKING=0 + fi +]) + +# Prerequisites of lib/sigprocmask.c. +AC_DEFUN([gl_PREREQ_SIGPROCMASK], [:]) diff --git a/devspec.en_US/project/recutils/m4/signbit.m4 b/devspec.en_US/project/recutils/m4/signbit.m4 new file mode 100755 index 0000000..bf5bce5 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/signbit.m4 @@ -0,0 +1,377 @@ +# signbit.m4 serial 16 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_SIGNBIT], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([for signbit macro], [gl_cv_func_signbit], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <math.h> +/* If signbit is defined as a function, don't use it, since calling it for + 'float' or 'long double' arguments would involve conversions. + If signbit is not declared at all but exists as a library function, don't + use it, since the prototype may not match. + If signbit is not declared at all but exists as a compiler built-in, don't + use it, since it's preferable to use __builtin_signbit* (no warnings, + no conversions). */ +#ifndef signbit +# error "signbit should be a macro" +#endif +#include <string.h> +]gl_SIGNBIT_TEST_PROGRAM +])], + [gl_cv_func_signbit=yes], + [gl_cv_func_signbit=no], + [case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_signbit="guessing yes" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_signbit="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_signbit="guessing no" ;; + esac + ]) + ]) + dnl GCC 4.0 and newer provides three built-ins for signbit. + dnl They can be used without warnings, also in C++, regardless of <math.h>. + dnl But they may expand to calls to functions, which may or may not be in + dnl libc. + AC_CACHE_CHECK([for signbit compiler built-ins], [gl_cv_func_signbit_gcc], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#if __GNUC__ >= 4 +# define signbit(x) \ + (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ + sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ + __builtin_signbitf (x)) +#else +# error "signbit should be three compiler built-ins" +#endif +#include <string.h> +]gl_SIGNBIT_TEST_PROGRAM +])], + [gl_cv_func_signbit_gcc=yes], + [gl_cv_func_signbit_gcc=no], + [case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_signbit_gcc="guessing yes" ;; + # Guess yes on mingw, no on MSVC. + mingw*) if test -n "$GCC"; then + gl_cv_func_signbit_gcc="guessing yes" + else + gl_cv_func_signbit_gcc="guessing no" + fi + ;; + # If we don't know, assume the worst. + *) gl_cv_func_signbit_gcc="guessing no" ;; + esac + ]) + ]) + dnl Use the compiler built-ins whenever possible, because they are more + dnl efficient than the system library functions (if they exist). + case "$gl_cv_func_signbit_gcc" in + *yes) + REPLACE_SIGNBIT_USING_GCC=1 + ;; + *) + case "$gl_cv_func_signbit" in + *yes) ;; + *) + dnl REPLACE_SIGNBIT=1 makes sure the signbit[fdl] functions get built. + REPLACE_SIGNBIT=1 + gl_FLOAT_SIGN_LOCATION + gl_DOUBLE_SIGN_LOCATION + gl_LONG_DOUBLE_SIGN_LOCATION + if test "$gl_cv_cc_float_signbit" = unknown; then + dnl Test whether copysignf() is declared. + AC_CHECK_DECLS([copysignf], , , [[#include <math.h>]]) + if test "$ac_cv_have_decl_copysignf" = yes; then + dnl Test whether copysignf() can be used without libm. + AC_CACHE_CHECK([whether copysignf can be used without linking with libm], + [gl_cv_func_copysignf_no_libm], + [ + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <math.h> + float x, y;]], + [[return copysignf (x, y) < 0;]])], + [gl_cv_func_copysignf_no_libm=yes], + [gl_cv_func_copysignf_no_libm=no]) + ]) + if test $gl_cv_func_copysignf_no_libm = yes; then + AC_DEFINE([HAVE_COPYSIGNF_IN_LIBC], [1], + [Define if the copysignf function is declared in <math.h> and available in libc.]) + fi + fi + fi + if test "$gl_cv_cc_double_signbit" = unknown; then + dnl Test whether copysign() is declared. + AC_CHECK_DECLS([copysign], , , [[#include <math.h>]]) + if test "$ac_cv_have_decl_copysign" = yes; then + dnl Test whether copysign() can be used without libm. + AC_CACHE_CHECK([whether copysign can be used without linking with libm], + [gl_cv_func_copysign_no_libm], + [ + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <math.h> + double x, y;]], + [[return copysign (x, y) < 0;]])], + [gl_cv_func_copysign_no_libm=yes], + [gl_cv_func_copysign_no_libm=no]) + ]) + if test $gl_cv_func_copysign_no_libm = yes; then + AC_DEFINE([HAVE_COPYSIGN_IN_LIBC], [1], + [Define if the copysign function is declared in <math.h> and available in libc.]) + fi + fi + fi + if test "$gl_cv_cc_long_double_signbit" = unknown; then + dnl Test whether copysignl() is declared. + AC_CHECK_DECLS([copysignl], , , [[#include <math.h>]]) + if test "$ac_cv_have_decl_copysignl" = yes; then + dnl Test whether copysignl() can be used without libm. + AC_CACHE_CHECK([whether copysignl can be used without linking with libm], + [gl_cv_func_copysignl_no_libm], + [ + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <math.h> + long double x, y;]], + [[return copysignl (x, y) < 0;]])], + [gl_cv_func_copysignl_no_libm=yes], + [gl_cv_func_copysignl_no_libm=no]) + ]) + if test $gl_cv_func_copysignl_no_libm = yes; then + AC_DEFINE([HAVE_COPYSIGNL_IN_LIBC], [1], + [Define if the copysignl function is declared in <math.h> and available in libc.]) + fi + fi + fi + ;; + esac + ;; + esac +]) + +AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [[ +/* Global variables. + Needed because GCC 4 constant-folds __builtin_signbitl (literal) + but cannot constant-fold __builtin_signbitl (variable). */ +float vf; +double vd; +long double vl; +int main () +{ +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -p0f and -p0d instead. */ +float p0f = 0.0f; +float m0f = -p0f; +double p0d = 0.0; +double m0d = -p0d; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use another constant expression instead. + But that expression does not work on other platforms, such as when + cross-compiling to PowerPC on Mac OS X 10.5. */ +long double p0l = 0.0L; +#if defined __hpux || defined __sgi +long double m0l = -LDBL_MIN * LDBL_MIN; +#else +long double m0l = -p0l; +#endif + int result = 0; + if (signbit (vf)) /* link check */ + vf++; + { + float plus_inf = 1.0f / p0f; + float minus_inf = -1.0f / p0f; + if (!(!signbit (255.0f) + && signbit (-255.0f) + && !signbit (p0f) + && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) + && !signbit (plus_inf) + && signbit (minus_inf))) + result |= 1; + } + if (signbit (vd)) /* link check */ + vd++; + { + double plus_inf = 1.0 / p0d; + double minus_inf = -1.0 / p0d; + if (!(!signbit (255.0) + && signbit (-255.0) + && !signbit (p0d) + && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) + && !signbit (plus_inf) + && signbit (minus_inf))) + result |= 2; + } + if (signbit (vl)) /* link check */ + vl++; + { + long double plus_inf = 1.0L / p0l; + long double minus_inf = -1.0L / p0l; + if (signbit (255.0L)) + result |= 4; + if (!signbit (-255.0L)) + result |= 4; + if (signbit (p0l)) + result |= 8; + if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l))) + result |= 16; + if (signbit (plus_inf)) + result |= 32; + if (!signbit (minus_inf)) + result |= 64; + } + return result; +} +]]) + +AC_DEFUN([gl_FLOAT_SIGN_LOCATION], +[ + gl_FLOATTYPE_SIGN_LOCATION([float], [gl_cv_cc_float_signbit], [f], [FLT]) +]) + +AC_DEFUN([gl_DOUBLE_SIGN_LOCATION], +[ + gl_FLOATTYPE_SIGN_LOCATION([double], [gl_cv_cc_double_signbit], [], [DBL]) +]) + +AC_DEFUN([gl_LONG_DOUBLE_SIGN_LOCATION], +[ + gl_FLOATTYPE_SIGN_LOCATION([long double], [gl_cv_cc_long_double_signbit], [L], [LDBL]) +]) + +AC_DEFUN([gl_FLOATTYPE_SIGN_LOCATION], +[ + AC_CACHE_CHECK([where to find the sign bit in a '$1'], + [$2], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stddef.h> +#include <stdio.h> +#define NWORDS \ + ((sizeof ($1) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { $1 value; unsigned int word[NWORDS]; } + memory_float; +static memory_float plus = { 1.0$3 }; +static memory_float minus = { -1.0$3 }; +int main () +{ + size_t j, k, i; + unsigned int m; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + /* Find the different bit. */ + k = 0; m = 0; + for (j = 0; j < NWORDS; j++) + { + unsigned int x = plus.word[j] ^ minus.word[j]; + if ((x & (x - 1)) || (x && m)) + { + /* More than one bit difference. */ + fprintf (fp, "unknown"); + fclose (fp); + return 2; + } + if (x) + { + k = j; + m = x; + } + } + if (m == 0) + { + /* No difference. */ + fprintf (fp, "unknown"); + fclose (fp); + return 3; + } + /* Now m = plus.word[k] ^ ~minus.word[k]. */ + if (plus.word[k] & ~minus.word[k]) + { + /* Oh? The sign bit is set in the positive and cleared in the negative + numbers? */ + fprintf (fp, "unknown"); + fclose (fp); + return 4; + } + for (i = 0; ; i++) + if ((m >> i) & 1) + break; + fprintf (fp, "word %d bit %d", (int) k, (int) i); + if (fclose (fp) != 0) + return 5; + return 0; +} + ]])], + [$2=`cat conftest.out`], + [$2="unknown"], + [ + dnl When cross-compiling, we don't know. It depends on the + dnl ABI and compiler version. There are too many cases. + $2="unknown" + ]) + rm -f conftest.out + ]) + case "$]$2[" in + word*bit*) + word=`echo "$]$2[" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$]$2[" | sed -e 's/word.*bit //'` + AC_DEFINE_UNQUOTED([$4][_SIGNBIT_WORD], [$word], + [Define as the word index where to find the sign of '$1'.]) + AC_DEFINE_UNQUOTED([$4][_SIGNBIT_BIT], [$bit], + [Define as the bit index in the word where to find the sign of '$1'.]) + ;; + esac +]) + +# Expands to code that defines a function signbitf(float). +# It extracts the sign bit of a non-NaN value. +AC_DEFUN([gl_FLOAT_SIGNBIT_CODE], +[ + gl_FLOATTYPE_SIGNBIT_CODE([float], [f], [f]) +]) + +# Expands to code that defines a function signbitd(double). +# It extracts the sign bit of a non-NaN value. +AC_DEFUN([gl_DOUBLE_SIGNBIT_CODE], +[ + gl_FLOATTYPE_SIGNBIT_CODE([double], [d], []) +]) + +# Expands to code that defines a function signbitl(long double). +# It extracts the sign bit of a non-NaN value. +AC_DEFUN([gl_LONG_DOUBLE_SIGNBIT_CODE], +[ + gl_FLOATTYPE_SIGNBIT_CODE([long double], [l], [L]) +]) + +AC_DEFUN([gl_FLOATTYPE_SIGNBIT_CODE], +[[ +static int +signbit$2 ($1 value) +{ + typedef union { $1 f; unsigned char b[sizeof ($1)]; } float_union; + static float_union plus_one = { 1.0$3 }; /* unused bits are zero here */ + static float_union minus_one = { -1.0$3 }; /* unused bits are zero here */ + /* Compute the sign bit mask as the XOR of plus_one and minus_one. */ + float_union u; + unsigned int i; + u.f = value; + for (i = 0; i < sizeof ($1); i++) + if (u.b[i] & (plus_one.b[i] ^ minus_one.b[i])) + return 1; + return 0; +} +]]) diff --git a/devspec.en_US/project/recutils/m4/size_max.m4 b/devspec.en_US/project/recutils/m4/size_max.m4 new file mode 100755 index 0000000..ab79052 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/size_max.m4 @@ -0,0 +1,75 @@ +# size_max.m4 serial 11 +dnl Copyright (C) 2003, 2005-2006, 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_PREREQ([2.61]) + +AC_DEFUN([gl_SIZE_MAX], +[ + AC_CHECK_HEADERS([stdint.h]) + dnl First test whether the system already has SIZE_MAX. + AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [ + gl_cv_size_max= + AC_EGREP_CPP([Found it], [ +#include <limits.h> +#if HAVE_STDINT_H +#include <stdint.h> +#endif +#ifdef SIZE_MAX +Found it +#endif +], [gl_cv_size_max=yes]) + if test -z "$gl_cv_size_max"; then + dnl Define it ourselves. Here we assume that the type 'size_t' is not wider + dnl than the type 'unsigned long'. Try hard to find a definition that can + dnl be used in a preprocessor #if, i.e. doesn't contain a cast. + AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1], + [#include <stddef.h> +#include <limits.h>], [size_t_bits_minus_1=]) + AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)], + [#include <stddef.h>], [fits_in_uint=]) + if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then + if test $fits_in_uint = 1; then + dnl Even though SIZE_MAX fits in an unsigned int, it must be of type + dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <stddef.h> + extern size_t foo; + extern unsigned long foo; + ]], + [[]])], + [fits_in_uint=0]) + fi + dnl We cannot use 'expr' to simplify this expression, because 'expr' + dnl works only with 'long' integers in the host environment, while we + dnl might be cross-compiling from a 32-bit platform to a 64-bit platform. + if test $fits_in_uint = 1; then + gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" + else + gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" + fi + else + dnl Shouldn't happen, but who knows... + gl_cv_size_max='((size_t)~(size_t)0)' + fi + fi + ]) + if test "$gl_cv_size_max" != yes; then + AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max], + [Define as the maximum value of type 'size_t', if the system doesn't define it.]) + fi + dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after + dnl <stdint.h>. Remember that the #undef in AH_VERBATIM gets replaced with + dnl #define by AC_DEFINE_UNQUOTED. + AH_VERBATIM([SIZE_MAX], +[/* Define as the maximum value of type 'size_t', if the system doesn't define + it. */ +#ifndef SIZE_MAX +# undef SIZE_MAX +#endif]) +]) diff --git a/devspec.en_US/project/recutils/m4/spawn_h.m4 b/devspec.en_US/project/recutils/m4/spawn_h.m4 new file mode 100755 index 0000000..561caa7 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/spawn_h.m4 @@ -0,0 +1,130 @@ +# spawn_h.m4 serial 17 +dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Bruno Haible. + +AC_DEFUN([gl_SPAWN_H], +[ + dnl Use AC_REQUIRE here, so that the default behavior below is expanded + dnl once only, before all statements that occur in other macros. + AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) + + dnl <spawn.h> is always overridden, because of GNULIB_POSIXCHECK. + gl_CHECK_NEXT_HEADERS([spawn.h]) + + if test $ac_cv_header_spawn_h = yes; then + HAVE_SPAWN_H=1 + AC_CHECK_TYPES([posix_spawnattr_t], [], [HAVE_POSIX_SPAWNATTR_T=0], [[ +#include <spawn.h> + ]]) + AC_CHECK_TYPES([posix_spawn_file_actions_t], [], + [HAVE_POSIX_SPAWN_FILE_ACTIONS_T=0], [[ +#include <spawn.h> + ]]) + else + HAVE_SPAWN_H=0 + HAVE_POSIX_SPAWNATTR_T=0 + HAVE_POSIX_SPAWN_FILE_ACTIONS_T=0 + fi + AC_SUBST([HAVE_SPAWN_H]) + + dnl Ensure the type pid_t gets defined. + AC_REQUIRE([AC_TYPE_PID_T]) + + dnl Ensure the type mode_t gets defined. + AC_REQUIRE([AC_TYPE_MODE_T]) + + AC_REQUIRE([gl_HAVE_POSIX_SPAWN]) + + AC_REQUIRE([AC_C_RESTRICT]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[#include <spawn.h> + ]], [posix_spawn posix_spawnp posix_spawnattr_init posix_spawnattr_destroy + posix_spawnattr_getsigdefault posix_spawnattr_setsigdefault + posix_spawnattr_getsigmask posix_spawnattr_setsigmask + posix_spawnattr_getflags posix_spawnattr_setflags + posix_spawnattr_getpgroup posix_spawnattr_setpgroup + posix_spawnattr_getschedpolicy posix_spawnattr_setschedpolicy + posix_spawnattr_getschedparam posix_spawnattr_setschedparam + posix_spawn_file_actions_init posix_spawn_file_actions_destroy + posix_spawn_file_actions_addopen posix_spawn_file_actions_addclose + posix_spawn_file_actions_adddup2 posix_spawn_file_actions_addchdir]) +]) + +dnl Checks whether the system has the functions posix_spawn. +dnl Sets ac_cv_func_posix_spawn and HAVE_POSIX_SPAWN. +AC_DEFUN([gl_HAVE_POSIX_SPAWN], +[ + dnl Use AC_REQUIRE here, so that the default behavior below is expanded + dnl once only, before all statements that occur in other macros. + AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) + + LIB_POSIX_SPAWN= + AC_SUBST([LIB_POSIX_SPAWN]) + gl_saved_libs=$LIBS + AC_SEARCH_LIBS([posix_spawn], [rt], + [test "$ac_cv_search_posix_spawn" = "none required" || + LIB_POSIX_SPAWN=$ac_cv_search_posix_spawn]) + AC_CHECK_FUNCS([posix_spawn]) + LIBS=$gl_saved_libs + + if test $ac_cv_func_posix_spawn != yes; then + HAVE_POSIX_SPAWN=0 + fi +]) + +AC_DEFUN([gl_SPAWN_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_SPAWN_H_DEFAULTS], +[ + GNULIB_POSIX_SPAWN=0; AC_SUBST([GNULIB_POSIX_SPAWN]) + GNULIB_POSIX_SPAWNP=0; AC_SUBST([GNULIB_POSIX_SPAWNP]) + GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT]) + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR]) + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE]) + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2]) + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN]) + GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY]) + GNULIB_POSIX_SPAWNATTR_INIT=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_INIT]) + GNULIB_POSIX_SPAWNATTR_GETFLAGS=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETFLAGS]) + GNULIB_POSIX_SPAWNATTR_SETFLAGS=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETFLAGS]) + GNULIB_POSIX_SPAWNATTR_GETPGROUP=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETPGROUP]) + GNULIB_POSIX_SPAWNATTR_SETPGROUP=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETPGROUP]) + GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM]) + GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM]) + GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY]) + GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY]) + GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT]) + GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT]) + GNULIB_POSIX_SPAWNATTR_GETSIGMASK=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSIGMASK]) + GNULIB_POSIX_SPAWNATTR_SETSIGMASK=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSIGMASK]) + GNULIB_POSIX_SPAWNATTR_DESTROY=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_DESTROY]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_POSIX_SPAWN=1; AC_SUBST([HAVE_POSIX_SPAWN]) + HAVE_POSIX_SPAWNATTR_T=1; AC_SUBST([HAVE_POSIX_SPAWNATTR_T]) + HAVE_POSIX_SPAWN_FILE_ACTIONS_T=1; + AC_SUBST([HAVE_POSIX_SPAWN_FILE_ACTIONS_T]) + HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=1; + AC_SUBST([HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR]) + REPLACE_POSIX_SPAWN=0; AC_SUBST([REPLACE_POSIX_SPAWN]) + REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=0; + AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR]) + REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0; + AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE]) + REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0; + AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2]) + REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0; + AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN]) +]) diff --git a/devspec.en_US/project/recutils/m4/ssize_t.m4 b/devspec.en_US/project/recutils/m4/ssize_t.m4 new file mode 100755 index 0000000..38bcee1 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/ssize_t.m4 @@ -0,0 +1,23 @@ +# ssize_t.m4 serial 5 (gettext-0.18.2) +dnl Copyright (C) 2001-2003, 2006, 2010-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether ssize_t is defined. + +AC_DEFUN([gt_TYPE_SSIZE_T], +[ + AC_CACHE_CHECK([for ssize_t], [gt_cv_ssize_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/types.h>]], + [[int x = sizeof (ssize_t *) + sizeof (ssize_t); + return !x;]])], + [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])]) + if test $gt_cv_ssize_t = no; then + AC_DEFINE([ssize_t], [int], + [Define as a signed type of the same size as size_t.]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/stat-time.m4 b/devspec.en_US/project/recutils/m4/stat-time.m4 new file mode 100755 index 0000000..1685788 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/stat-time.m4 @@ -0,0 +1,83 @@ +# Checks for stat-related time functions. + +# Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2019 Free Software +# Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# st_atim.tv_nsec - Linux, Solaris, Cygwin +# st_atimespec.tv_nsec - FreeBSD, NetBSD, if ! defined _POSIX_SOURCE +# st_atimensec - FreeBSD, NetBSD, if defined _POSIX_SOURCE +# st_atim.st__tim.tv_nsec - UnixWare (at least 2.1.2 through 7.1) + +# st_birthtimespec - FreeBSD, NetBSD (hidden on OpenBSD 3.9, anyway) +# st_birthtim - Cygwin 1.7.0+ + +AC_DEFUN([gl_STAT_TIME], +[ + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_CHECK_HEADERS_ONCE([sys/time.h]) + + AC_CHECK_MEMBERS([struct stat.st_atim.tv_nsec], + [AC_CACHE_CHECK([whether struct stat.st_atim is of type struct timespec], + [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( + [[ + #include <sys/types.h> + #include <sys/stat.h> + #if HAVE_SYS_TIME_H + # include <sys/time.h> + #endif + #include <time.h> + struct timespec ts; + struct stat st; + ]], + [[ + st.st_atim = ts; + ]])], + [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes], + [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no])]) + if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then + AC_DEFINE([TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC], [1], + [Define to 1 if the type of the st_atim member of a struct stat is + struct timespec.]) + fi], + [AC_CHECK_MEMBERS([struct stat.st_atimespec.tv_nsec], [], + [AC_CHECK_MEMBERS([struct stat.st_atimensec], [], + [AC_CHECK_MEMBERS([struct stat.st_atim.st__tim.tv_nsec], [], [], + [#include <sys/types.h> + #include <sys/stat.h>])], + [#include <sys/types.h> + #include <sys/stat.h>])], + [#include <sys/types.h> + #include <sys/stat.h>])], + [#include <sys/types.h> + #include <sys/stat.h>]) +]) + +# Check for st_birthtime, a feature from UFS2 (FreeBSD, NetBSD, OpenBSD, etc.) +# and NTFS (Cygwin). +# There was a time when this field was named st_createtime (21 June +# 2002 to 16 July 2002) But that window is very small and applied only +# to development code, so systems still using that configuration are +# not supported. See revisions 1.10 and 1.11 of FreeBSD's +# src/sys/ufs/ufs/dinode.h. +# +AC_DEFUN([gl_STAT_BIRTHTIME], +[ + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_CHECK_HEADERS_ONCE([sys/time.h]) + AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec], [], + [AC_CHECK_MEMBERS([struct stat.st_birthtimensec], [], + [AC_CHECK_MEMBERS([struct stat.st_birthtim.tv_nsec], [], [], + [#include <sys/types.h> + #include <sys/stat.h>])], + [#include <sys/types.h> + #include <sys/stat.h>])], + [#include <sys/types.h> + #include <sys/stat.h>]) +]) diff --git a/devspec.en_US/project/recutils/m4/stat.m4 b/devspec.en_US/project/recutils/m4/stat.m4 new file mode 100755 index 0000000..60040d1 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/stat.m4 @@ -0,0 +1,74 @@ +# serial 15 + +# Copyright (C) 2009-2019 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_STAT], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([lstat]) + case "$host_os" in + mingw*) + dnl On this platform, the original stat() returns st_atime, st_mtime, + dnl st_ctime values that are affected by the time zone. + REPLACE_STAT=1 + ;; + *) + dnl AIX 7.1, Solaris 9, mingw64 mistakenly succeed on stat("file/"). + dnl (For mingw, this is due to a broken stat() override in libmingwex.a.) + dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/"). + AC_CACHE_CHECK([whether stat handles trailing slashes on files], + [gl_cv_func_stat_file_slash], + [touch conftest.tmp + # Assume that if we have lstat, we can also check symlinks. + if test $ac_cv_func_lstat = yes; then + ln -s conftest.tmp conftest.lnk + fi + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/stat.h> +]], [[int result = 0; + struct stat st; + if (!stat ("conftest.tmp/", &st)) + result |= 1; +#if HAVE_LSTAT + if (!stat ("conftest.lnk/", &st)) + result |= 2; +#endif + return result; + ]])], + [gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no], + [case "$host_os" in + # Guess yes on Linux systems. + linux-* | linux) gl_cv_func_stat_file_slash="guessing yes" ;; + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_stat_file_slash="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_stat_file_slash="guessing no" ;; + esac + ]) + rm -f conftest.tmp conftest.lnk]) + case $gl_cv_func_stat_file_slash in + *no) + REPLACE_STAT=1 + AC_DEFINE([REPLACE_FUNC_STAT_FILE], [1], [Define to 1 if stat needs + help when passed a file name with a trailing slash]);; + esac + case $host_os in + dnl Solaris stat can return a negative tv_nsec. + solaris*) + REPLACE_FSTAT=1 ;; + esac + ;; + esac +]) + +# Prerequisites of lib/stat.c and lib/stat-w32.c. +AC_DEFUN([gl_PREREQ_STAT], [ + AC_REQUIRE([gl_HEADER_SYS_STAT_H]) + : +]) diff --git a/devspec.en_US/project/recutils/m4/stdarg.m4 b/devspec.en_US/project/recutils/m4/stdarg.m4 new file mode 100755 index 0000000..f43fe20 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/stdarg.m4 @@ -0,0 +1,78 @@ +# stdarg.m4 serial 7 +dnl Copyright (C) 2006, 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Provide a working va_copy in combination with <stdarg.h>. + +AC_DEFUN([gl_STDARG_H], +[ + STDARG_H='' + NEXT_STDARG_H='<stdarg.h>' + AC_CACHE_CHECK([for va_copy], + [gl_cv_func_va_copy], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <stdarg.h>]], + [[ +#ifndef va_copy +void (*func) (va_list, va_list) = va_copy; +#endif + ]])], + [gl_cv_func_va_copy=yes], + [gl_cv_func_va_copy=no]) + ]) + if test $gl_cv_func_va_copy = no; then + dnl Provide a substitute. + dnl Usually a simple definition in <config.h> is enough. Not so on AIX 5 + dnl with some versions of the /usr/vac/bin/cc compiler. It has an <stdarg.h> + dnl which does '#undef va_copy', leading to a missing va_copy symbol. For + dnl this platform, we use an <stdarg.h> substitute. But we cannot use this + dnl approach on other platforms, because <stdarg.h> often defines only + dnl preprocessor macros and gl_ABSOLUTE_HEADER, gl_CHECK_NEXT_HEADERS do + dnl not work in this situation. + AC_EGREP_CPP([vaccine], + [#if defined _AIX && !defined __GNUC__ + AIX vaccine + #endif + ], [gl_aixcc=yes], [gl_aixcc=no]) + if test $gl_aixcc = yes; then + dnl Provide a substitute <stdarg.h> file. + STDARG_H=stdarg.h + gl_NEXT_HEADERS([stdarg.h]) + dnl Fallback for the case when <stdarg.h> contains only macro definitions. + if test "$gl_cv_next_stdarg_h" = '""'; then + gl_cv_next_stdarg_h='"///usr/include/stdarg.h"' + NEXT_STDARG_H="$gl_cv_next_stdarg_h" + fi + else + dnl Provide a substitute in <config.h>, either __va_copy or as a simple + dnl assignment. + gl_CACHE_VAL_SILENT([gl_cv_func___va_copy], [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <stdarg.h>]], + [[ +#ifndef __va_copy +error, bail out +#endif + ]])], + [gl_cv_func___va_copy=yes], + [gl_cv_func___va_copy=no])]) + if test $gl_cv_func___va_copy = yes; then + AC_DEFINE([va_copy], [__va_copy], + [Define as a macro for copying va_list variables.]) + else + AH_VERBATIM([gl_VA_COPY], [/* A replacement for va_copy, if needed. */ +#define gl_va_copy(a,b) ((a) = (b))]) + AC_DEFINE([va_copy], [gl_va_copy], + [Define as a macro for copying va_list variables.]) + fi + fi + fi + AC_SUBST([STDARG_H]) + AM_CONDITIONAL([GL_GENERATE_STDARG_H], [test -n "$STDARG_H"]) + AC_SUBST([NEXT_STDARG_H]) +]) diff --git a/devspec.en_US/project/recutils/m4/stdbool.m4 b/devspec.en_US/project/recutils/m4/stdbool.m4 new file mode 100755 index 0000000..acb8522 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/stdbool.m4 @@ -0,0 +1,108 @@ +# Check for stdbool.h that conforms to C99. + +dnl Copyright (C) 2002-2006, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +#serial 7 + +# Prepare for substituting <stdbool.h> if it is not supported. + +AC_DEFUN([AM_STDBOOL_H], +[ + AC_REQUIRE([AC_CHECK_HEADER_STDBOOL]) + + # Define two additional variables used in the Makefile substitution. + + if test "$ac_cv_header_stdbool_h" = yes; then + STDBOOL_H='' + else + STDBOOL_H='stdbool.h' + fi + AC_SUBST([STDBOOL_H]) + AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"]) + + if test "$ac_cv_type__Bool" = yes; then + HAVE__BOOL=1 + else + HAVE__BOOL=0 + fi + AC_SUBST([HAVE__BOOL]) +]) + +# AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future. +AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H]) + +# This version of the macro is needed in autoconf <= 2.68. + +AC_DEFUN([AC_CHECK_HEADER_STDBOOL], + [AC_CACHE_CHECK([for stdbool.h that conforms to C99], + [ac_cv_header_stdbool_h], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ + #include <stdbool.h> + + #ifdef __cplusplus + typedef bool Bool; + #else + typedef _Bool Bool; + #ifndef bool + "error: bool is not defined" + #endif + #ifndef false + "error: false is not defined" + #endif + #if false + "error: false is not 0" + #endif + #ifndef true + "error: true is not defined" + #endif + #if true != 1 + "error: true is not 1" + #endif + #endif + + #ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" + #endif + + struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + /* See body of main program for 'e'. */ + char f[(Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ + Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + /* Catch a bug in an HP-UX C compiler. See + https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html + */ + Bool q = true; + Bool *pq = &q; + bool *qq = &q; + ]], + [[ + bool e = &s; + *pq |= q; *pq |= ! q; + *qq |= q; *qq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq + !qq); + ]])], + [ac_cv_header_stdbool_h=yes], + [ac_cv_header_stdbool_h=no])]) + AC_CHECK_TYPES([_Bool]) +]) diff --git a/devspec.en_US/project/recutils/m4/stddef_h.m4 b/devspec.en_US/project/recutils/m4/stddef_h.m4 new file mode 100755 index 0000000..979e3cf --- /dev/null +++ b/devspec.en_US/project/recutils/m4/stddef_h.m4 @@ -0,0 +1,72 @@ +dnl A placeholder for <stddef.h>, for platforms that have issues. +# stddef_h.m4 serial 6 +dnl Copyright (C) 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_STDDEF_H], +[ + AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) + AC_REQUIRE([gt_TYPE_WCHAR_T]) + STDDEF_H= + + dnl Test whether the type max_align_t exists and whether its alignment + dnl "is as great as is supported by the implementation in all contexts". + AC_CACHE_CHECK([for good max_align_t], + [gl_cv_type_max_align_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <stddef.h> + unsigned int s = sizeof (max_align_t); + #if defined __GNUC__ || defined __IBM__ALIGNOF__ + int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1]; + int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1]; + #endif + ]])], + [gl_cv_type_max_align_t=yes], + [gl_cv_type_max_align_t=no]) + ]) + if test $gl_cv_type_max_align_t = no; then + HAVE_MAX_ALIGN_T=0 + STDDEF_H=stddef.h + fi + + if test $gt_cv_c_wchar_t = no; then + HAVE_WCHAR_T=0 + STDDEF_H=stddef.h + fi + + AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions], + [gl_cv_decl_null_works], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h> + int test[2 * (sizeof NULL == sizeof (void *)) -1]; +]])], + [gl_cv_decl_null_works=yes], + [gl_cv_decl_null_works=no])]) + if test $gl_cv_decl_null_works = no; then + REPLACE_NULL=1 + STDDEF_H=stddef.h + fi + + AC_SUBST([STDDEF_H]) + AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"]) + if test -n "$STDDEF_H"; then + gl_NEXT_HEADERS([stddef.h]) + fi +]) + +AC_DEFUN([gl_STDDEF_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) +]) + +AC_DEFUN([gl_STDDEF_H_DEFAULTS], +[ + dnl Assume proper GNU behavior unless another module says otherwise. + REPLACE_NULL=0; AC_SUBST([REPLACE_NULL]) + HAVE_MAX_ALIGN_T=1; AC_SUBST([HAVE_MAX_ALIGN_T]) + HAVE_WCHAR_T=1; AC_SUBST([HAVE_WCHAR_T]) +]) diff --git a/devspec.en_US/project/recutils/m4/stdint.m4 b/devspec.en_US/project/recutils/m4/stdint.m4 new file mode 100755 index 0000000..11d8e8e --- /dev/null +++ b/devspec.en_US/project/recutils/m4/stdint.m4 @@ -0,0 +1,544 @@ +# stdint.m4 serial 53 +dnl Copyright (C) 2001-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert and Bruno Haible. +dnl Test whether <stdint.h> is supported or must be substituted. + +AC_PREREQ([2.61]) + +AC_DEFUN_ONCE([gl_STDINT_H], +[ + AC_PREREQ([2.59])dnl + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + + AC_REQUIRE([gl_LIMITS_H]) + AC_REQUIRE([gt_TYPE_WINT_T]) + + dnl Check for long long int and unsigned long long int. + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + if test $ac_cv_type_long_long_int = yes; then + HAVE_LONG_LONG_INT=1 + else + HAVE_LONG_LONG_INT=0 + fi + AC_SUBST([HAVE_LONG_LONG_INT]) + AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) + if test $ac_cv_type_unsigned_long_long_int = yes; then + HAVE_UNSIGNED_LONG_LONG_INT=1 + else + HAVE_UNSIGNED_LONG_LONG_INT=0 + fi + AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT]) + + dnl Check for <wchar.h>, in the same way as gl_WCHAR_H does. + AC_CHECK_HEADERS_ONCE([wchar.h]) + if test $ac_cv_header_wchar_h = yes; then + HAVE_WCHAR_H=1 + else + HAVE_WCHAR_H=0 + fi + AC_SUBST([HAVE_WCHAR_H]) + + dnl Check for <inttypes.h>. + dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h. + if test $ac_cv_header_inttypes_h = yes; then + HAVE_INTTYPES_H=1 + else + HAVE_INTTYPES_H=0 + fi + AC_SUBST([HAVE_INTTYPES_H]) + + dnl Check for <sys/types.h>. + dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h. + if test $ac_cv_header_sys_types_h = yes; then + HAVE_SYS_TYPES_H=1 + else + HAVE_SYS_TYPES_H=0 + fi + AC_SUBST([HAVE_SYS_TYPES_H]) + + gl_CHECK_NEXT_HEADERS([stdint.h]) + if test $ac_cv_header_stdint_h = yes; then + HAVE_STDINT_H=1 + else + HAVE_STDINT_H=0 + fi + AC_SUBST([HAVE_STDINT_H]) + + dnl Now see whether we need a substitute <stdint.h>. + if test $ac_cv_header_stdint_h = yes; then + AC_CACHE_CHECK([whether stdint.h conforms to C99], + [gl_cv_header_working_stdint_h], + [gl_cv_header_working_stdint_h=no + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#define __STDC_CONSTANT_MACROS 1 +#define __STDC_LIMIT_MACROS 1 +#include <stdint.h> +/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */ +#if !(defined WCHAR_MIN && defined WCHAR_MAX) +#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>" +#endif +] +gl_STDINT_INCLUDES +[ +#ifdef INT8_MAX +int8_t a1 = INT8_MAX; +int8_t a1min = INT8_MIN; +#endif +#ifdef INT16_MAX +int16_t a2 = INT16_MAX; +int16_t a2min = INT16_MIN; +#endif +#ifdef INT32_MAX +int32_t a3 = INT32_MAX; +int32_t a3min = INT32_MIN; +#endif +#ifdef INT64_MAX +int64_t a4 = INT64_MAX; +int64_t a4min = INT64_MIN; +#endif +#ifdef UINT8_MAX +uint8_t b1 = UINT8_MAX; +#else +typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; +#endif +#ifdef UINT16_MAX +uint16_t b2 = UINT16_MAX; +#endif +#ifdef UINT32_MAX +uint32_t b3 = UINT32_MAX; +#endif +#ifdef UINT64_MAX +uint64_t b4 = UINT64_MAX; +#endif +int_least8_t c1 = INT8_C (0x7f); +int_least8_t c1max = INT_LEAST8_MAX; +int_least8_t c1min = INT_LEAST8_MIN; +int_least16_t c2 = INT16_C (0x7fff); +int_least16_t c2max = INT_LEAST16_MAX; +int_least16_t c2min = INT_LEAST16_MIN; +int_least32_t c3 = INT32_C (0x7fffffff); +int_least32_t c3max = INT_LEAST32_MAX; +int_least32_t c3min = INT_LEAST32_MIN; +int_least64_t c4 = INT64_C (0x7fffffffffffffff); +int_least64_t c4max = INT_LEAST64_MAX; +int_least64_t c4min = INT_LEAST64_MIN; +uint_least8_t d1 = UINT8_C (0xff); +uint_least8_t d1max = UINT_LEAST8_MAX; +uint_least16_t d2 = UINT16_C (0xffff); +uint_least16_t d2max = UINT_LEAST16_MAX; +uint_least32_t d3 = UINT32_C (0xffffffff); +uint_least32_t d3max = UINT_LEAST32_MAX; +uint_least64_t d4 = UINT64_C (0xffffffffffffffff); +uint_least64_t d4max = UINT_LEAST64_MAX; +int_fast8_t e1 = INT_FAST8_MAX; +int_fast8_t e1min = INT_FAST8_MIN; +int_fast16_t e2 = INT_FAST16_MAX; +int_fast16_t e2min = INT_FAST16_MIN; +int_fast32_t e3 = INT_FAST32_MAX; +int_fast32_t e3min = INT_FAST32_MIN; +int_fast64_t e4 = INT_FAST64_MAX; +int_fast64_t e4min = INT_FAST64_MIN; +uint_fast8_t f1 = UINT_FAST8_MAX; +uint_fast16_t f2 = UINT_FAST16_MAX; +uint_fast32_t f3 = UINT_FAST32_MAX; +uint_fast64_t f4 = UINT_FAST64_MAX; +#ifdef INTPTR_MAX +intptr_t g = INTPTR_MAX; +intptr_t gmin = INTPTR_MIN; +#endif +#ifdef UINTPTR_MAX +uintptr_t h = UINTPTR_MAX; +#endif +intmax_t i = INTMAX_MAX; +uintmax_t j = UINTMAX_MAX; + +/* Check that SIZE_MAX has the correct type, if possible. */ +#if 201112 <= __STDC_VERSION__ +int k = _Generic (SIZE_MAX, size_t: 0); +#elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \ + || (0x5110 <= __SUNPRO_C && !__STDC__)) +extern size_t k; +extern __typeof__ (SIZE_MAX) k; +#endif + +#include <limits.h> /* for CHAR_BIT */ +#define TYPE_MINIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) +#define TYPE_MAXIMUM(t) \ + ((t) ((t) 0 < (t) -1 \ + ? (t) -1 \ + : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) +struct s { + int check_PTRDIFF: + PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) + && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) + ? 1 : -1; + /* Detect bug in FreeBSD 6.0 / ia64. */ + int check_SIG_ATOMIC: + SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) + && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) + ? 1 : -1; + int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; + int check_WCHAR: + WCHAR_MIN == TYPE_MINIMUM (wchar_t) + && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) + ? 1 : -1; + /* Detect bug in mingw. */ + int check_WINT: + WINT_MIN == TYPE_MINIMUM (wint_t) + && WINT_MAX == TYPE_MAXIMUM (wint_t) + ? 1 : -1; + + /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ + int check_UINT8_C: + (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; + int check_UINT16_C: + (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; + + /* Detect bugs in OpenBSD 3.9 stdint.h. */ +#ifdef UINT8_MAX + int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; +#endif +#ifdef UINT16_MAX + int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; +#endif +#ifdef UINT32_MAX + int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; +#endif +#ifdef UINT64_MAX + int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; +#endif + int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; + int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; + int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; + int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; + int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; + int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; + int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; + int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; + int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; + int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; + int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; +}; + ]])], + [dnl Determine whether the various *_MIN, *_MAX macros are usable + dnl in preprocessor expression. We could do it by compiling a test + dnl program for each of these macros. It is faster to run a program + dnl that inspects the macro expansion. + dnl This detects a bug on HP-UX 11.23/ia64. + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#define __STDC_CONSTANT_MACROS 1 +#define __STDC_LIMIT_MACROS 1 +#include <stdint.h> +] +gl_STDINT_INCLUDES +[ +#include <stdio.h> +#include <string.h> +#define MVAL(macro) MVAL1(macro) +#define MVAL1(expression) #expression +static const char *macro_values[] = + { +#ifdef INT8_MAX + MVAL (INT8_MAX), +#endif +#ifdef INT16_MAX + MVAL (INT16_MAX), +#endif +#ifdef INT32_MAX + MVAL (INT32_MAX), +#endif +#ifdef INT64_MAX + MVAL (INT64_MAX), +#endif +#ifdef UINT8_MAX + MVAL (UINT8_MAX), +#endif +#ifdef UINT16_MAX + MVAL (UINT16_MAX), +#endif +#ifdef UINT32_MAX + MVAL (UINT32_MAX), +#endif +#ifdef UINT64_MAX + MVAL (UINT64_MAX), +#endif + NULL + }; +]], [[ + const char **mv; + for (mv = macro_values; *mv != NULL; mv++) + { + const char *value = *mv; + /* Test whether it looks like a cast expression. */ + if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 + || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 + || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 + || strncmp (value, "((int)"/*)*/, 6) == 0 + || strncmp (value, "((signed short)"/*)*/, 15) == 0 + || strncmp (value, "((signed char)"/*)*/, 14) == 0) + return mv - macro_values + 1; + } + return 0; +]])], + [gl_cv_header_working_stdint_h=yes], + [], + [case "$host_os" in + # Guess yes on native Windows. + mingw*) gl_cv_header_working_stdint_h="guessing yes" ;; + # In general, assume it works. + *) gl_cv_header_working_stdint_h="guessing yes" ;; + esac + ]) + ]) + ]) + fi + + HAVE_C99_STDINT_H=0 + HAVE_SYS_BITYPES_H=0 + HAVE_SYS_INTTYPES_H=0 + STDINT_H=stdint.h + case "$gl_cv_header_working_stdint_h" in + *yes) + HAVE_C99_STDINT_H=1 + dnl Now see whether the system <stdint.h> works without + dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined. + AC_CACHE_CHECK([whether stdint.h predates C++11], + [gl_cv_header_stdint_predates_cxx11_h], + [gl_cv_header_stdint_predates_cxx11_h=yes + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#include <stdint.h> +] +gl_STDINT_INCLUDES +[ +intmax_t im = INTMAX_MAX; +int32_t i32 = INT32_C (0x7fffffff); + ]])], + [gl_cv_header_stdint_predates_cxx11_h=no])]) + + if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then + AC_DEFINE([__STDC_CONSTANT_MACROS], [1], + [Define to 1 if the system <stdint.h> predates C++11.]) + AC_DEFINE([__STDC_LIMIT_MACROS], [1], + [Define to 1 if the system <stdint.h> predates C++11.]) + fi + AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.], + [gl_cv_header_stdint_width], + [gl_cv_header_stdint_width=no + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ + /* Work if build is not clean. */ + #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 + #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ + #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 + #endif + #include <stdint.h> + ]gl_STDINT_INCLUDES[ + int iw = UINTMAX_WIDTH; + ]])], + [gl_cv_header_stdint_width=yes])]) + if test "$gl_cv_header_stdint_width" = yes; then + STDINT_H= + fi + ;; + *) + dnl Check for <sys/inttypes.h>, and for + dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5). + AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) + if test $ac_cv_header_sys_inttypes_h = yes; then + HAVE_SYS_INTTYPES_H=1 + fi + if test $ac_cv_header_sys_bitypes_h = yes; then + HAVE_SYS_BITYPES_H=1 + fi + gl_STDINT_TYPE_PROPERTIES + ;; + esac + + dnl The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH. + gl_REPLACE_LIMITS_H + + AC_SUBST([HAVE_C99_STDINT_H]) + AC_SUBST([HAVE_SYS_BITYPES_H]) + AC_SUBST([HAVE_SYS_INTTYPES_H]) + AC_SUBST([STDINT_H]) + AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"]) +]) + +dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES) +dnl Determine the size of each of the given types in bits. +AC_DEFUN([gl_STDINT_BITSIZEOF], +[ + dnl Use a shell loop, to avoid bloating configure, and + dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into + dnl config.h.in, + dnl - extra AC_SUBST calls, so that the right substitutions are made. + m4_foreach_w([gltype], [$1], + [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), + [Define to the number of bits in type ']gltype['.])]) + for gltype in $1 ; do + AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}], + [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT], + [$2 +#include <limits.h>], [result=unknown]) + eval gl_cv_bitsizeof_${gltype}=\$result + ]) + eval result=\$gl_cv_bitsizeof_${gltype} + if test $result = unknown; then + dnl Use a nonempty default, because some compilers, such as IRIX 5 cc, + dnl do a syntax check even on unused #if conditions and give an error + dnl on valid C code like this: + dnl #if 0 + dnl # if > 32 + dnl # endif + dnl #endif + result=0 + fi + GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result]) + eval BITSIZEOF_${GLTYPE}=\$result + done + m4_foreach_w([gltype], [$1], + [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) +]) + +dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES) +dnl Determine the signedness of each of the given types. +dnl Define HAVE_SIGNED_TYPE if type is signed. +AC_DEFUN([gl_CHECK_TYPES_SIGNED], +[ + dnl Use a shell loop, to avoid bloating configure, and + dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into + dnl config.h.in, + dnl - extra AC_SUBST calls, so that the right substitutions are made. + m4_foreach_w([gltype], [$1], + [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), + [Define to 1 if ']gltype[' is a signed integer type.])]) + for gltype in $1 ; do + AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([$2[ + int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])], + result=yes, result=no) + eval gl_cv_type_${gltype}_signed=\$result + ]) + eval result=\$gl_cv_type_${gltype}_signed + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + if test "$result" = yes; then + AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1]) + eval HAVE_SIGNED_${GLTYPE}=1 + else + eval HAVE_SIGNED_${GLTYPE}=0 + fi + done + m4_foreach_w([gltype], [$1], + [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) +]) + +dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES) +dnl Determine the suffix to use for integer constants of the given types. +dnl Define t_SUFFIX for each such type. +AC_DEFUN([gl_INTEGER_TYPE_SUFFIX], +[ + dnl Use a shell loop, to avoid bloating configure, and + dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into + dnl config.h.in, + dnl - extra AC_SUBST calls, so that the right substitutions are made. + m4_foreach_w([gltype], [$1], + [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX], + [Define to l, ll, u, ul, ull, etc., as suitable for + constants of type ']gltype['.])]) + for gltype in $1 ; do + AC_CACHE_CHECK([for $gltype integer literal suffix], + [gl_cv_type_${gltype}_suffix], + [eval gl_cv_type_${gltype}_suffix=no + eval result=\$gl_cv_type_${gltype}_signed + if test "$result" = yes; then + glsufu= + else + glsufu=u + fi + for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do + case $glsuf in + '') gltype1='int';; + l) gltype1='long int';; + ll) gltype1='long long int';; + i64) gltype1='__int64';; + u) gltype1='unsigned int';; + ul) gltype1='unsigned long int';; + ull) gltype1='unsigned long long int';; + ui64)gltype1='unsigned __int64';; + esac + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([$2[ + extern $gltype foo; + extern $gltype1 foo;]])], + [eval gl_cv_type_${gltype}_suffix=\$glsuf]) + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" != no && break + done]) + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" = no && result= + eval ${GLTYPE}_SUFFIX=\$result + AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result]) + done + m4_foreach_w([gltype], [$1], + [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])]) +]) + +dnl gl_STDINT_INCLUDES +AC_DEFUN([gl_STDINT_INCLUDES], +[[ + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif +]]) + +dnl gl_STDINT_TYPE_PROPERTIES +dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t +dnl of interest to stdint.in.h. +AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], +[ + AC_REQUIRE([gl_MULTIARCH]) + if test $APPLE_UNIVERSAL_BUILD = 0; then + gl_STDINT_BITSIZEOF([ptrdiff_t size_t], + [gl_STDINT_INCLUDES]) + fi + gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t], + [gl_STDINT_INCLUDES]) + gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t], + [gl_STDINT_INCLUDES]) + gl_cv_type_ptrdiff_t_signed=yes + gl_cv_type_size_t_signed=no + if test $APPLE_UNIVERSAL_BUILD = 0; then + gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t], + [gl_STDINT_INCLUDES]) + fi + gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t], + [gl_STDINT_INCLUDES]) + + dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99 + dnl requirement that wint_t is "unchanged by default argument promotions". + dnl In this case gnulib's <wchar.h> and <wctype.h> override wint_t. + dnl Set the variable BITSIZEOF_WINT_T accordingly. + if test $GNULIB_OVERRIDES_WINT_T = 1; then + BITSIZEOF_WINT_T=32 + fi +]) diff --git a/devspec.en_US/project/recutils/m4/stdint_h.m4 b/devspec.en_US/project/recutils/m4/stdint_h.m4 new file mode 100755 index 0000000..6d5f1af --- /dev/null +++ b/devspec.en_US/project/recutils/m4/stdint_h.m4 @@ -0,0 +1,27 @@ +# stdint_h.m4 serial 9 +dnl Copyright (C) 1997-2004, 2006, 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists, +# doesn't clash with <sys/types.h>, and declares uintmax_t. + +AC_DEFUN([gl_AC_HEADER_STDINT_H], +[ + AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/types.h> + #include <stdint.h>]], + [[uintmax_t i = (uintmax_t) -1; return !i;]])], + [gl_cv_header_stdint_h=yes], + [gl_cv_header_stdint_h=no])]) + if test $gl_cv_header_stdint_h = yes; then + AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1], + [Define if <stdint.h> exists, doesn't clash with <sys/types.h>, + and declares uintmax_t. ]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/stdio_h.m4 b/devspec.en_US/project/recutils/m4/stdio_h.m4 new file mode 100755 index 0000000..6c9c104 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/stdio_h.m4 @@ -0,0 +1,225 @@ +# stdio_h.m4 serial 49 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_STDIO_H], +[ + AH_VERBATIM([MINGW_ANSI_STDIO], +[/* Use GNU style printf and scanf. */ +#ifndef __USE_MINGW_ANSI_STDIO +# undef __USE_MINGW_ANSI_STDIO +#endif +]) + AC_DEFINE([__USE_MINGW_ANSI_STDIO]) + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + gl_NEXT_HEADERS([stdio.h]) + + dnl Determine whether __USE_MINGW_ANSI_STDIO makes printf and + dnl inttypes.h behave like gnu instead of system; we must give our + dnl printf wrapper the right attribute to match. + AC_CACHE_CHECK([which flavor of printf attribute matches inttypes macros], + [gl_cv_func_printf_attribute_flavor], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #define __STDC_FORMAT_MACROS 1 + #include <stdio.h> + #include <inttypes.h> + /* For non-mingw systems, compilation will trivially succeed. + For mingw, compilation will succeed for older mingw (system + printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ + #if (defined _WIN32 && ! defined __CYGWIN__) && \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) + extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; + #endif + ]])], [gl_cv_func_printf_attribute_flavor=system], + [gl_cv_func_printf_attribute_flavor=gnu])]) + if test "$gl_cv_func_printf_attribute_flavor" = gnu; then + AC_DEFINE([GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU], [1], + [Define to 1 if printf and friends should be labeled with + attribute "__gnu_printf__" instead of "__printf__"]) + fi + + dnl No need to create extra modules for these functions. Everyone who uses + dnl <stdio.h> likely needs them. + GNULIB_FSCANF=1 + gl_MODULE_INDICATOR([fscanf]) + GNULIB_SCANF=1 + gl_MODULE_INDICATOR([scanf]) + GNULIB_FGETC=1 + GNULIB_GETC=1 + GNULIB_GETCHAR=1 + GNULIB_FGETS=1 + GNULIB_FREAD=1 + dnl This ifdef is necessary to avoid an error "missing file lib/stdio-read.c" + dnl "expected source file, required through AC_LIBSOURCES, not found". It is + dnl also an optimization, to avoid performing a configure check whose result + dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING + dnl or GNULIB_NONBLOCKING redundant. + m4_ifdef([gl_NONBLOCKING_IO], [ + gl_NONBLOCKING_IO + if test $gl_cv_have_nonblocking != yes; then + REPLACE_STDIO_READ_FUNCS=1 + AC_LIBOBJ([stdio-read]) + fi + ]) + + dnl No need to create extra modules for these functions. Everyone who uses + dnl <stdio.h> likely needs them. + GNULIB_FPRINTF=1 + GNULIB_PRINTF=1 + GNULIB_VFPRINTF=1 + GNULIB_VPRINTF=1 + GNULIB_FPUTC=1 + GNULIB_PUTC=1 + GNULIB_PUTCHAR=1 + GNULIB_FPUTS=1 + GNULIB_PUTS=1 + GNULIB_FWRITE=1 + dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" + dnl "expected source file, required through AC_LIBSOURCES, not found". It is + dnl also an optimization, to avoid performing a configure check whose result + dnl is not used. But it does not make the test of GNULIB_STDIO_H_SIGPIPE or + dnl GNULIB_SIGPIPE redundant. + m4_ifdef([gl_SIGNAL_SIGPIPE], [ + gl_SIGNAL_SIGPIPE + if test $gl_cv_header_signal_h_SIGPIPE != yes; then + REPLACE_STDIO_WRITE_FUNCS=1 + AC_LIBOBJ([stdio-write]) + fi + ]) + dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" + dnl "expected source file, required through AC_LIBSOURCES, not found". It is + dnl also an optimization, to avoid performing a configure check whose result + dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING + dnl or GNULIB_NONBLOCKING redundant. + m4_ifdef([gl_NONBLOCKING_IO], [ + gl_NONBLOCKING_IO + if test $gl_cv_have_nonblocking != yes; then + REPLACE_STDIO_WRITE_FUNCS=1 + AC_LIBOBJ([stdio-write]) + fi + ]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use, and which is not + dnl guaranteed by both C89 and C11. + gl_WARN_ON_USE_PREPARE([[#include <stdio.h> + ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen + renameat snprintf tmpfile vdprintf vsnprintf]) +]) + +AC_DEFUN([gl_STDIO_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_STDIO_H_DEFAULTS], +[ + GNULIB_DPRINTF=0; AC_SUBST([GNULIB_DPRINTF]) + GNULIB_FCLOSE=0; AC_SUBST([GNULIB_FCLOSE]) + GNULIB_FDOPEN=0; AC_SUBST([GNULIB_FDOPEN]) + GNULIB_FFLUSH=0; AC_SUBST([GNULIB_FFLUSH]) + GNULIB_FGETC=0; AC_SUBST([GNULIB_FGETC]) + GNULIB_FGETS=0; AC_SUBST([GNULIB_FGETS]) + GNULIB_FOPEN=0; AC_SUBST([GNULIB_FOPEN]) + GNULIB_FPRINTF=0; AC_SUBST([GNULIB_FPRINTF]) + GNULIB_FPRINTF_POSIX=0; AC_SUBST([GNULIB_FPRINTF_POSIX]) + GNULIB_FPURGE=0; AC_SUBST([GNULIB_FPURGE]) + GNULIB_FPUTC=0; AC_SUBST([GNULIB_FPUTC]) + GNULIB_FPUTS=0; AC_SUBST([GNULIB_FPUTS]) + GNULIB_FREAD=0; AC_SUBST([GNULIB_FREAD]) + GNULIB_FREOPEN=0; AC_SUBST([GNULIB_FREOPEN]) + GNULIB_FSCANF=0; AC_SUBST([GNULIB_FSCANF]) + GNULIB_FSEEK=0; AC_SUBST([GNULIB_FSEEK]) + GNULIB_FSEEKO=0; AC_SUBST([GNULIB_FSEEKO]) + GNULIB_FTELL=0; AC_SUBST([GNULIB_FTELL]) + GNULIB_FTELLO=0; AC_SUBST([GNULIB_FTELLO]) + GNULIB_FWRITE=0; AC_SUBST([GNULIB_FWRITE]) + GNULIB_GETC=0; AC_SUBST([GNULIB_GETC]) + GNULIB_GETCHAR=0; AC_SUBST([GNULIB_GETCHAR]) + GNULIB_GETDELIM=0; AC_SUBST([GNULIB_GETDELIM]) + GNULIB_GETLINE=0; AC_SUBST([GNULIB_GETLINE]) + GNULIB_OBSTACK_PRINTF=0; AC_SUBST([GNULIB_OBSTACK_PRINTF]) + GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX]) + GNULIB_PCLOSE=0; AC_SUBST([GNULIB_PCLOSE]) + GNULIB_PERROR=0; AC_SUBST([GNULIB_PERROR]) + GNULIB_POPEN=0; AC_SUBST([GNULIB_POPEN]) + GNULIB_PRINTF=0; AC_SUBST([GNULIB_PRINTF]) + GNULIB_PRINTF_POSIX=0; AC_SUBST([GNULIB_PRINTF_POSIX]) + GNULIB_PUTC=0; AC_SUBST([GNULIB_PUTC]) + GNULIB_PUTCHAR=0; AC_SUBST([GNULIB_PUTCHAR]) + GNULIB_PUTS=0; AC_SUBST([GNULIB_PUTS]) + GNULIB_REMOVE=0; AC_SUBST([GNULIB_REMOVE]) + GNULIB_RENAME=0; AC_SUBST([GNULIB_RENAME]) + GNULIB_RENAMEAT=0; AC_SUBST([GNULIB_RENAMEAT]) + GNULIB_SCANF=0; AC_SUBST([GNULIB_SCANF]) + GNULIB_SNPRINTF=0; AC_SUBST([GNULIB_SNPRINTF]) + GNULIB_SPRINTF_POSIX=0; AC_SUBST([GNULIB_SPRINTF_POSIX]) + GNULIB_STDIO_H_NONBLOCKING=0; AC_SUBST([GNULIB_STDIO_H_NONBLOCKING]) + GNULIB_STDIO_H_SIGPIPE=0; AC_SUBST([GNULIB_STDIO_H_SIGPIPE]) + GNULIB_TMPFILE=0; AC_SUBST([GNULIB_TMPFILE]) + GNULIB_VASPRINTF=0; AC_SUBST([GNULIB_VASPRINTF]) + GNULIB_VFSCANF=0; AC_SUBST([GNULIB_VFSCANF]) + GNULIB_VSCANF=0; AC_SUBST([GNULIB_VSCANF]) + GNULIB_VDPRINTF=0; AC_SUBST([GNULIB_VDPRINTF]) + GNULIB_VFPRINTF=0; AC_SUBST([GNULIB_VFPRINTF]) + GNULIB_VFPRINTF_POSIX=0; AC_SUBST([GNULIB_VFPRINTF_POSIX]) + GNULIB_VPRINTF=0; AC_SUBST([GNULIB_VPRINTF]) + GNULIB_VPRINTF_POSIX=0; AC_SUBST([GNULIB_VPRINTF_POSIX]) + GNULIB_VSNPRINTF=0; AC_SUBST([GNULIB_VSNPRINTF]) + GNULIB_VSPRINTF_POSIX=0; AC_SUBST([GNULIB_VSPRINTF_POSIX]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_DECL_FPURGE=1; AC_SUBST([HAVE_DECL_FPURGE]) + HAVE_DECL_FSEEKO=1; AC_SUBST([HAVE_DECL_FSEEKO]) + HAVE_DECL_FTELLO=1; AC_SUBST([HAVE_DECL_FTELLO]) + HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM]) + HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE]) + HAVE_DECL_OBSTACK_PRINTF=1; AC_SUBST([HAVE_DECL_OBSTACK_PRINTF]) + HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF]) + HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF]) + HAVE_DPRINTF=1; AC_SUBST([HAVE_DPRINTF]) + HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO]) + HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO]) + HAVE_PCLOSE=1; AC_SUBST([HAVE_PCLOSE]) + HAVE_POPEN=1; AC_SUBST([HAVE_POPEN]) + HAVE_RENAMEAT=1; AC_SUBST([HAVE_RENAMEAT]) + HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF]) + HAVE_VDPRINTF=1; AC_SUBST([HAVE_VDPRINTF]) + REPLACE_DPRINTF=0; AC_SUBST([REPLACE_DPRINTF]) + REPLACE_FCLOSE=0; AC_SUBST([REPLACE_FCLOSE]) + REPLACE_FDOPEN=0; AC_SUBST([REPLACE_FDOPEN]) + REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH]) + REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN]) + REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF]) + REPLACE_FPURGE=0; AC_SUBST([REPLACE_FPURGE]) + REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN]) + REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK]) + REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO]) + REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL]) + REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO]) + REPLACE_GETDELIM=0; AC_SUBST([REPLACE_GETDELIM]) + REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE]) + REPLACE_OBSTACK_PRINTF=0; AC_SUBST([REPLACE_OBSTACK_PRINTF]) + REPLACE_PERROR=0; AC_SUBST([REPLACE_PERROR]) + REPLACE_POPEN=0; AC_SUBST([REPLACE_POPEN]) + REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF]) + REPLACE_REMOVE=0; AC_SUBST([REPLACE_REMOVE]) + REPLACE_RENAME=0; AC_SUBST([REPLACE_RENAME]) + REPLACE_RENAMEAT=0; AC_SUBST([REPLACE_RENAMEAT]) + REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF]) + REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF]) + REPLACE_STDIO_READ_FUNCS=0; AC_SUBST([REPLACE_STDIO_READ_FUNCS]) + REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS]) + REPLACE_TMPFILE=0; AC_SUBST([REPLACE_TMPFILE]) + REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF]) + REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF]) + REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF]) + REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF]) + REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF]) + REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF]) +]) diff --git a/devspec.en_US/project/recutils/m4/stdlib_h.m4 b/devspec.en_US/project/recutils/m4/stdlib_h.m4 new file mode 100755 index 0000000..cf06428 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/stdlib_h.m4 @@ -0,0 +1,127 @@ +# stdlib_h.m4 serial 45 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_STDLIB_H], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + gl_NEXT_HEADERS([stdlib.h]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use, and which is not + dnl guaranteed by C89. + gl_WARN_ON_USE_PREPARE([[#include <stdlib.h> +#if HAVE_SYS_LOADAVG_H +/* OpenIndiana has a bug: <sys/time.h> must be included before + <sys/loadavg.h>. */ +# include <sys/time.h> +# include <sys/loadavg.h> +#endif +#if HAVE_RANDOM_H +# include <random.h> +#endif + ]], [_Exit atoll canonicalize_file_name getloadavg getsubopt grantpt + initstate initstate_r mkdtemp mkostemp mkostemps mkstemp mkstemps + posix_openpt ptsname ptsname_r qsort_r random random_r reallocarray + realpath rpmatch secure_getenv setenv setstate setstate_r srandom + srandom_r strtod strtoll strtoull unlockpt unsetenv]) +]) + +AC_DEFUN([gl_STDLIB_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_STDLIB_H_DEFAULTS], +[ + GNULIB__EXIT=0; AC_SUBST([GNULIB__EXIT]) + GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL]) + GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX]) + GNULIB_CANONICALIZE_FILE_NAME=0; AC_SUBST([GNULIB_CANONICALIZE_FILE_NAME]) + GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG]) + GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT]) + GNULIB_GRANTPT=0; AC_SUBST([GNULIB_GRANTPT]) + GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX]) + GNULIB_MBTOWC=0; AC_SUBST([GNULIB_MBTOWC]) + GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP]) + GNULIB_MKOSTEMP=0; AC_SUBST([GNULIB_MKOSTEMP]) + GNULIB_MKOSTEMPS=0; AC_SUBST([GNULIB_MKOSTEMPS]) + GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP]) + GNULIB_MKSTEMPS=0; AC_SUBST([GNULIB_MKSTEMPS]) + GNULIB_POSIX_OPENPT=0; AC_SUBST([GNULIB_POSIX_OPENPT]) + GNULIB_PTSNAME=0; AC_SUBST([GNULIB_PTSNAME]) + GNULIB_PTSNAME_R=0; AC_SUBST([GNULIB_PTSNAME_R]) + GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV]) + GNULIB_QSORT_R=0; AC_SUBST([GNULIB_QSORT_R]) + GNULIB_RANDOM=0; AC_SUBST([GNULIB_RANDOM]) + GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R]) + GNULIB_REALLOCARRAY=0; AC_SUBST([GNULIB_REALLOCARRAY]) + GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX]) + GNULIB_REALPATH=0; AC_SUBST([GNULIB_REALPATH]) + GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH]) + GNULIB_SECURE_GETENV=0; AC_SUBST([GNULIB_SECURE_GETENV]) + GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV]) + GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD]) + GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL]) + GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL]) + GNULIB_SYSTEM_POSIX=0; AC_SUBST([GNULIB_SYSTEM_POSIX]) + GNULIB_UNLOCKPT=0; AC_SUBST([GNULIB_UNLOCKPT]) + GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV]) + GNULIB_WCTOMB=0; AC_SUBST([GNULIB_WCTOMB]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE__EXIT=1; AC_SUBST([HAVE__EXIT]) + HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL]) + HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME]) + HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG]) + HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT]) + HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT]) + HAVE_DECL_INITSTATE=1; AC_SUBST([HAVE_DECL_INITSTATE]) + HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP]) + HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP]) + HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS]) + HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP]) + HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS]) + HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT]) + HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME]) + HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R]) + HAVE_QSORT_R=1; AC_SUBST([HAVE_QSORT_R]) + HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM]) + HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H]) + HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R]) + HAVE_REALLOCARRAY=1; AC_SUBST([HAVE_REALLOCARRAY]) + HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH]) + HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH]) + HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV]) + HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) + HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV]) + HAVE_DECL_SETSTATE=1; AC_SUBST([HAVE_DECL_SETSTATE]) + HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD]) + HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL]) + HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL]) + HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA]) + HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H]) + HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT]) + HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV]) + REPLACE_CALLOC=0; AC_SUBST([REPLACE_CALLOC]) + REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME]) + REPLACE_MALLOC=0; AC_SUBST([REPLACE_MALLOC]) + REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC]) + REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) + REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME]) + REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R]) + REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) + REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R]) + REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R]) + REPLACE_REALLOC=0; AC_SUBST([REPLACE_REALLOC]) + REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH]) + REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV]) + REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD]) + REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV]) + REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB]) +]) diff --git a/devspec.en_US/project/recutils/m4/strcase.m4 b/devspec.en_US/project/recutils/m4/strcase.m4 new file mode 100755 index 0000000..9baef78 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/strcase.m4 @@ -0,0 +1,45 @@ +# strcase.m4 serial 11 +dnl Copyright (C) 2002, 2005-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_STRCASE], +[ + gl_FUNC_STRCASECMP + gl_FUNC_STRNCASECMP +]) + +AC_DEFUN([gl_FUNC_STRCASECMP], +[ + AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) + AC_CHECK_FUNCS([strcasecmp]) + if test $ac_cv_func_strcasecmp = no; then + HAVE_STRCASECMP=0 + fi +]) + +AC_DEFUN([gl_FUNC_STRNCASECMP], +[ + AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) + AC_CHECK_FUNCS([strncasecmp]) + if test $ac_cv_func_strncasecmp = yes; then + HAVE_STRNCASECMP=1 + else + HAVE_STRNCASECMP=0 + fi + AC_CHECK_DECLS([strncasecmp]) + if test $ac_cv_have_decl_strncasecmp = no; then + HAVE_DECL_STRNCASECMP=0 + fi +]) + +# Prerequisites of lib/strcasecmp.c. +AC_DEFUN([gl_PREREQ_STRCASECMP], [ + : +]) + +# Prerequisites of lib/strncasecmp.c. +AC_DEFUN([gl_PREREQ_STRNCASECMP], [ + : +]) diff --git a/devspec.en_US/project/recutils/m4/strcasestr.m4 b/devspec.en_US/project/recutils/m4/strcasestr.m4 new file mode 100755 index 0000000..45abdbd --- /dev/null +++ b/devspec.en_US/project/recutils/m4/strcasestr.m4 @@ -0,0 +1,154 @@ +# strcasestr.m4 serial 24 +dnl Copyright (C) 2005, 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Check that strcasestr is present and works. +AC_DEFUN([gl_FUNC_STRCASESTR_SIMPLE], +[ + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + + dnl Persuade glibc <string.h> to declare strcasestr(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([gl_FUNC_MEMCHR]) + AC_CHECK_FUNCS([strcasestr]) + if test $ac_cv_func_strcasestr = no; then + HAVE_STRCASESTR=0 + else + if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then + REPLACE_STRCASESTR=1 + else + dnl Detect https://sourceware.org/bugzilla/show_bug.cgi?id=12092 + dnl and https://sourceware.org/bugzilla/show_bug.cgi?id=23637. + AC_CACHE_CHECK([whether strcasestr works], + [gl_cv_func_strcasestr_works_always], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM([[ +#include <string.h> /* for strcasestr */ +#ifdef __GNU_LIBRARY__ + #include <features.h> + #if __GLIBC__ == 2 && __GLIBC_MINOR__ == 28 + Unlucky user + #endif +#endif +#define P "_EF_BF_BD" +#define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P +#define NEEDLE P P P P P +]], + [[return !!strcasestr (HAYSTACK, NEEDLE); + ]])], + [gl_cv_func_strcasestr_works_always=yes], + [gl_cv_func_strcasestr_works_always=no], + [dnl glibc 2.12 and cygwin 1.7.7 have a known bug. uClibc is not + dnl affected, since it uses different source code for strcasestr + dnl than glibc. + dnl Assume that it works on all other platforms, even if it is not + dnl linear. + AC_EGREP_CPP([Lucky user], + [ +#ifdef __GNU_LIBRARY__ + #include <features.h> + #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \ + || defined __UCLIBC__ + Lucky user + #endif +#elif defined __CYGWIN__ + #include <cygwin/version.h> + #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) + Lucky user + #endif +#else + Lucky user +#endif + ], + [gl_cv_func_strcasestr_works_always="guessing yes"], + [gl_cv_func_strcasestr_works_always="guessing no"]) + ]) + ]) + case "$gl_cv_func_strcasestr_works_always" in + *yes) ;; + *) + REPLACE_STRCASESTR=1 + ;; + esac + fi + fi +]) # gl_FUNC_STRCASESTR_SIMPLE + +dnl Additionally, check that strcasestr is efficient. +AC_DEFUN([gl_FUNC_STRCASESTR], +[ + AC_REQUIRE([gl_FUNC_STRCASESTR_SIMPLE]) + if test $HAVE_STRCASESTR = 1 && test $REPLACE_STRCASESTR = 0; then + AC_CACHE_CHECK([whether strcasestr works in linear time], + [gl_cv_func_strcasestr_linear], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +#include <signal.h> /* for signal */ +#include <string.h> /* for strcasestr */ +#include <stdlib.h> /* for malloc */ +#include <unistd.h> /* for alarm */ +static void quit (int sig) { _exit (sig + 128); } +]], [[ + int result = 0; + size_t m = 1000000; + char *haystack = (char *) malloc (2 * m + 2); + char *needle = (char *) malloc (m + 2); + /* Failure to compile this test due to missing alarm is okay, + since all such platforms (mingw) also lack strcasestr. */ + signal (SIGALRM, quit); + alarm (5); + /* Check for quadratic performance. */ + if (haystack && needle) + { + memset (haystack, 'A', 2 * m); + haystack[2 * m] = 'B'; + haystack[2 * m + 1] = 0; + memset (needle, 'A', m); + needle[m] = 'B'; + needle[m + 1] = 0; + if (!strcasestr (haystack, needle)) + result |= 1; + } + /* Free allocated memory, in case some sanitizer is watching. */ + free (haystack); + free (needle); + return result; + ]])], + [gl_cv_func_strcasestr_linear=yes], [gl_cv_func_strcasestr_linear=no], + [dnl Only glibc > 2.12 and cygwin > 1.7.7 are known to have a + dnl strcasestr that works in linear time. + AC_EGREP_CPP([Lucky user], + [ +#include <features.h> +#ifdef __GNU_LIBRARY__ + #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \ + && !defined __UCLIBC__ + Lucky user + #endif +#endif +#ifdef __CYGWIN__ + #include <cygwin/version.h> + #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) + Lucky user + #endif +#endif + ], + [gl_cv_func_strcasestr_linear="guessing yes"], + [gl_cv_func_strcasestr_linear="guessing no"]) + ]) + ]) + case "$gl_cv_func_strcasestr_linear" in + *yes) ;; + *) + REPLACE_STRCASESTR=1 + ;; + esac + fi +]) # gl_FUNC_STRCASESTR + +# Prerequisites of lib/strcasestr.c. +AC_DEFUN([gl_PREREQ_STRCASESTR], [ + : +]) diff --git a/devspec.en_US/project/recutils/m4/strchrnul.m4 b/devspec.en_US/project/recutils/m4/strchrnul.m4 new file mode 100755 index 0000000..93cf112 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/strchrnul.m4 @@ -0,0 +1,50 @@ +# strchrnul.m4 serial 9 +dnl Copyright (C) 2003, 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_STRCHRNUL], +[ + dnl Persuade glibc <string.h> to declare strchrnul(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_CHECK_FUNCS([strchrnul]) + if test $ac_cv_func_strchrnul = no; then + HAVE_STRCHRNUL=0 + else + AC_CACHE_CHECK([whether strchrnul works], + [gl_cv_func_strchrnul_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +#include <string.h> /* for strchrnul */ +]], [[const char *buf = "a"; + return strchrnul (buf, 'b') != buf + 1; + ]])], + [gl_cv_func_strchrnul_works=yes], + [gl_cv_func_strchrnul_works=no], + [dnl Cygwin 1.7.9 introduced strchrnul, but it was broken until 1.7.10 + AC_EGREP_CPP([Lucky user], + [ +#if defined __CYGWIN__ + #include <cygwin/version.h> + #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 9) + Lucky user + #endif +#else + Lucky user +#endif + ], + [gl_cv_func_strchrnul_works="guessing yes"], + [gl_cv_func_strchrnul_works="guessing no"]) + ]) + ]) + case "$gl_cv_func_strchrnul_works" in + *yes) ;; + *) REPLACE_STRCHRNUL=1 ;; + esac + fi +]) + +# Prerequisites of lib/strchrnul.c. +AC_DEFUN([gl_PREREQ_STRCHRNUL], [:]) diff --git a/devspec.en_US/project/recutils/m4/strdup.m4 b/devspec.en_US/project/recutils/m4/strdup.m4 new file mode 100755 index 0000000..82d7420 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/strdup.m4 @@ -0,0 +1,36 @@ +# strdup.m4 serial 13 + +dnl Copyright (C) 2002-2019 Free Software Foundation, Inc. + +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_STRDUP], +[ + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([strdup]) + AC_CHECK_DECLS_ONCE([strdup]) + if test $ac_cv_have_decl_strdup = no; then + HAVE_DECL_STRDUP=0 + fi +]) + +AC_DEFUN([gl_FUNC_STRDUP_POSIX], +[ + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) + AC_CHECK_FUNCS_ONCE([strdup]) + if test $ac_cv_func_strdup = yes; then + if test $gl_cv_func_malloc_posix != yes; then + REPLACE_STRDUP=1 + fi + fi + AC_CHECK_DECLS_ONCE([strdup]) + if test $ac_cv_have_decl_strdup = no; then + HAVE_DECL_STRDUP=0 + fi +]) + +# Prerequisites of lib/strdup.c. +AC_DEFUN([gl_PREREQ_STRDUP], [:]) diff --git a/devspec.en_US/project/recutils/m4/strerror.m4 b/devspec.en_US/project/recutils/m4/strerror.m4 new file mode 100755 index 0000000..b452f7f --- /dev/null +++ b/devspec.en_US/project/recutils/m4/strerror.m4 @@ -0,0 +1,98 @@ +# strerror.m4 serial 19 +dnl Copyright (C) 2002, 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_STRERROR], +[ + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_REQUIRE([gl_HEADER_ERRNO_H]) + AC_REQUIRE([gl_FUNC_STRERROR_0]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ + AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS]) + ]) + if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then + AC_CACHE_CHECK([for working strerror function], + [gl_cv_func_working_strerror], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <string.h> + ]], + [[if (!*strerror (-2)) return 1;]])], + [gl_cv_func_working_strerror=yes], + [gl_cv_func_working_strerror=no], + [case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_working_strerror="guessing no" ;; + esac + ]) + ]) + case "$gl_cv_func_working_strerror" in + *yes) ;; + *) + dnl The system's strerror() fails to return a string for out-of-range + dnl integers. Replace it. + REPLACE_STRERROR=1 + ;; + esac + m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ + dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's + dnl buffer, we must replace strerror. + case "$gl_cv_func_strerror_r_works" in + *no) REPLACE_STRERROR=1 ;; + esac + ]) + else + dnl The system's strerror() cannot know about the new errno values we add + dnl to <errno.h>, or any fix for strerror(0). Replace it. + REPLACE_STRERROR=1 + fi +]) + +dnl Detect if strerror(0) passes (that is, does not set errno, and does not +dnl return a string that matches strerror(-1)). +AC_DEFUN([gl_FUNC_STRERROR_0], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + REPLACE_STRERROR_0=0 + AC_CACHE_CHECK([whether strerror(0) succeeds], + [gl_cv_func_strerror_0_works], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <string.h> + #include <errno.h> + ]], + [[int result = 0; + char *str; + errno = 0; + str = strerror (0); + if (!*str) result |= 1; + if (errno) result |= 2; + if (strstr (str, "nknown") || strstr (str, "ndefined")) + result |= 4; + return result;]])], + [gl_cv_func_strerror_0_works=yes], + [gl_cv_func_strerror_0_works=no], + [case "$host_os" in + # Guess yes on glibc systems. + *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_strerror_0_works="guessing yes" ;; + # If we don't know, assume the worst. + *) gl_cv_func_strerror_0_works="guessing no" ;; + esac + ]) + ]) + case "$gl_cv_func_strerror_0_works" in + *yes) ;; + *) + REPLACE_STRERROR_0=1 + AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0) + does not return a message implying success.]) + ;; + esac +]) diff --git a/devspec.en_US/project/recutils/m4/string_h.m4 b/devspec.en_US/project/recutils/m4/string_h.m4 new file mode 100755 index 0000000..0c0e3a7 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/string_h.m4 @@ -0,0 +1,122 @@ +# Configure a GNU-like replacement for <string.h>. + +# Copyright (C) 2007-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 22 + +# Written by Paul Eggert. + +AC_DEFUN([gl_HEADER_STRING_H], +[ + dnl Use AC_REQUIRE here, so that the default behavior below is expanded + dnl once only, before all statements that occur in other macros. + AC_REQUIRE([gl_HEADER_STRING_H_BODY]) +]) + +AC_DEFUN([gl_HEADER_STRING_H_BODY], +[ + AC_REQUIRE([AC_C_RESTRICT]) + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + gl_NEXT_HEADERS([string.h]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use, and which is not + dnl guaranteed by C89. + gl_WARN_ON_USE_PREPARE([[#include <string.h> + ]], + [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul + strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r + strerror_r strsignal strverscmp]) +]) + +AC_DEFUN([gl_STRING_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], +[ + GNULIB_EXPLICIT_BZERO=0; AC_SUBST([GNULIB_EXPLICIT_BZERO]) + GNULIB_FFSL=0; AC_SUBST([GNULIB_FFSL]) + GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL]) + GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR]) + GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM]) + GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY]) + GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR]) + GNULIB_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR]) + GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY]) + GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY]) + GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL]) + GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP]) + GNULIB_STRNCAT=0; AC_SUBST([GNULIB_STRNCAT]) + GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP]) + GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN]) + GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK]) + GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP]) + GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR]) + GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR]) + GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R]) + GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN]) + GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN]) + GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR]) + GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR]) + GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR]) + GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP]) + GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP]) + GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP]) + GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR]) + GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN]) + GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK]) + GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN]) + GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP]) + GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R]) + GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR]) + GNULIB_STRERROR_R=0; AC_SUBST([GNULIB_STRERROR_R]) + GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL]) + GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP]) + HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_EXPLICIT_BZERO=1; AC_SUBST([HAVE_EXPLICIT_BZERO]) + HAVE_FFSL=1; AC_SUBST([HAVE_FFSL]) + HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL]) + HAVE_MEMCHR=1; AC_SUBST([HAVE_MEMCHR]) + HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) + HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) + HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) + HAVE_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR]) + HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) + HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) + HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) + HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) + HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) + HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) + HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) + HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) + HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) + HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) + HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R]) + HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) + HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP]) + REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR]) + REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) + REPLACE_STPNCPY=0; AC_SUBST([REPLACE_STPNCPY]) + REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) + REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) + REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) + REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) + REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) + REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) + REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) + REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) + REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) + REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) + REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) + UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) +]) diff --git a/devspec.en_US/project/recutils/m4/strings_h.m4 b/devspec.en_US/project/recutils/m4/strings_h.m4 new file mode 100755 index 0000000..76128cf --- /dev/null +++ b/devspec.en_US/project/recutils/m4/strings_h.m4 @@ -0,0 +1,52 @@ +# Configure a replacement for <strings.h>. +# serial 6 + +# Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_HEADER_STRINGS_H], +[ + dnl Use AC_REQUIRE here, so that the default behavior below is expanded + dnl once only, before all statements that occur in other macros. + AC_REQUIRE([gl_HEADER_STRINGS_H_BODY]) +]) + +AC_DEFUN([gl_HEADER_STRINGS_H_BODY], +[ + AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) + + gl_CHECK_NEXT_HEADERS([strings.h]) + if test $ac_cv_header_strings_h = yes; then + HAVE_STRINGS_H=1 + else + HAVE_STRINGS_H=0 + fi + AC_SUBST([HAVE_STRINGS_H]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[ + /* Minix 3.1.8 has a bug: <sys/types.h> must be included before + <strings.h>. */ + #include <sys/types.h> + #include <strings.h> + ]], [ffs strcasecmp strncasecmp]) +]) + +AC_DEFUN([gl_STRINGS_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_HEADER_STRINGS_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) +]) + +AC_DEFUN([gl_HEADER_STRINGS_H_DEFAULTS], +[ + GNULIB_FFS=0; AC_SUBST([GNULIB_FFS]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_FFS=1; AC_SUBST([HAVE_FFS]) + HAVE_STRCASECMP=1; AC_SUBST([HAVE_STRCASECMP]) + HAVE_DECL_STRNCASECMP=1; AC_SUBST([HAVE_DECL_STRNCASECMP]) +]) diff --git a/devspec.en_US/project/recutils/m4/strsep.m4 b/devspec.en_US/project/recutils/m4/strsep.m4 new file mode 100755 index 0000000..5872023 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/strsep.m4 @@ -0,0 +1,23 @@ +# strsep.m4 serial 10 +dnl Copyright (C) 2002-2004, 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_STRSEP], +[ + dnl Persuade glibc <string.h> to declare strsep(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + dnl The strsep() declaration in lib/string.in.h uses 'restrict'. + AC_REQUIRE([AC_C_RESTRICT]) + + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_CHECK_FUNCS([strsep]) + if test $ac_cv_func_strsep = no; then + HAVE_STRSEP=0 + fi +]) + +# Prerequisites of lib/strsep.c. +AC_DEFUN([gl_PREREQ_STRSEP], [:]) diff --git a/devspec.en_US/project/recutils/m4/strverscmp.m4 b/devspec.en_US/project/recutils/m4/strverscmp.m4 new file mode 100755 index 0000000..ec66cdf --- /dev/null +++ b/devspec.en_US/project/recutils/m4/strverscmp.m4 @@ -0,0 +1,22 @@ +# strverscmp.m4 serial 8 +dnl Copyright (C) 2002, 2005-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_STRVERSCMP], +[ + dnl Persuade glibc <string.h> to declare strverscmp(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_CHECK_FUNCS([strverscmp]) + if test $ac_cv_func_strverscmp = no; then + HAVE_STRVERSCMP=0 + fi +]) + +# Prerequisites of lib/strverscmp.c. +AC_DEFUN([gl_PREREQ_STRVERSCMP], [ + : +]) diff --git a/devspec.en_US/project/recutils/m4/sys_file_h.m4 b/devspec.en_US/project/recutils/m4/sys_file_h.m4 new file mode 100755 index 0000000..e30d45e --- /dev/null +++ b/devspec.en_US/project/recutils/m4/sys_file_h.m4 @@ -0,0 +1,41 @@ +# Configure a replacement for <sys/file.h>. +# serial 6 + +# Copyright (C) 2008-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Written by Richard W.M. Jones. + +AC_DEFUN([gl_HEADER_SYS_FILE_H], +[ + AC_REQUIRE([gl_HEADER_SYS_FILE_H_DEFAULTS]) + + dnl <sys/file.h> is always overridden, because of GNULIB_POSIXCHECK. + gl_CHECK_NEXT_HEADERS([sys/file.h]) + + if test $ac_cv_header_sys_file_h = yes; then + HAVE_SYS_FILE_H=1 + else + HAVE_SYS_FILE_H=0 + fi + AC_SUBST([HAVE_SYS_FILE_H]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[#include <sys/file.h> + ]], [flock]) +]) + +AC_DEFUN([gl_HEADER_SYS_FILE_MODULE_INDICATOR], +[ + AC_REQUIRE([gl_HEADER_SYS_FILE_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) +]) + +AC_DEFUN([gl_HEADER_SYS_FILE_H_DEFAULTS], +[ + GNULIB_FLOCK=0; AC_SUBST([GNULIB_FLOCK]) + HAVE_FLOCK=1; AC_SUBST([HAVE_FLOCK]) +]) diff --git a/devspec.en_US/project/recutils/m4/sys_socket_h.m4 b/devspec.en_US/project/recutils/m4/sys_socket_h.m4 new file mode 100755 index 0000000..1ea7b0b --- /dev/null +++ b/devspec.en_US/project/recutils/m4/sys_socket_h.m4 @@ -0,0 +1,176 @@ +# sys_socket_h.m4 serial 23 +dnl Copyright (C) 2005-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Simon Josefsson. + +AC_DEFUN([gl_HEADER_SYS_SOCKET], +[ + AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) + + dnl On OSF/1, the functions recv(), send(), recvfrom(), sendto() have + dnl old-style declarations (with return type 'int' instead of 'ssize_t') + dnl unless _POSIX_PII_SOCKET is defined. + case "$host_os" in + osf*) + AC_DEFINE([_POSIX_PII_SOCKET], [1], + [Define to 1 in order to get the POSIX compatible declarations + of socket functions.]) + ;; + esac + + AC_CACHE_CHECK([whether <sys/socket.h> is self-contained], + [gl_cv_header_sys_socket_h_selfcontained], + [ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[]])], + [gl_cv_header_sys_socket_h_selfcontained=yes], + [gl_cv_header_sys_socket_h_selfcontained=no]) + ]) + if test $gl_cv_header_sys_socket_h_selfcontained = yes; then + dnl If the shutdown function exists, <sys/socket.h> should define + dnl SHUT_RD, SHUT_WR, SHUT_RDWR. + AC_CHECK_FUNCS([shutdown]) + if test $ac_cv_func_shutdown = yes; then + AC_CACHE_CHECK([whether <sys/socket.h> defines the SHUT_* macros], + [gl_cv_header_sys_socket_h_shut], + [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[#include <sys/socket.h>]], + [[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])], + [gl_cv_header_sys_socket_h_shut=yes], + [gl_cv_header_sys_socket_h_shut=no]) + ]) + if test $gl_cv_header_sys_socket_h_shut = no; then + SYS_SOCKET_H='sys/socket.h' + fi + fi + fi + # We need to check for ws2tcpip.h now. + gl_PREREQ_SYS_H_SOCKET + AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[ + /* sys/types.h is not needed according to POSIX, but the + sys/socket.h in i386-unknown-freebsd4.10 and + powerpc-apple-darwin5.5 required it. */ +#include <sys/types.h> +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif +#ifdef HAVE_WS2TCPIP_H +#include <ws2tcpip.h> +#endif +]) + if test $ac_cv_type_struct_sockaddr_storage = no; then + HAVE_STRUCT_SOCKADDR_STORAGE=0 + fi + if test $ac_cv_type_sa_family_t = no; then + HAVE_SA_FAMILY_T=0 + fi + if test $ac_cv_type_struct_sockaddr_storage != no; then + AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family], + [], + [HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0], + [#include <sys/types.h> + #ifdef HAVE_SYS_SOCKET_H + #include <sys/socket.h> + #endif + #ifdef HAVE_WS2TCPIP_H + #include <ws2tcpip.h> + #endif + ]) + fi + if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \ + || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then + SYS_SOCKET_H='sys/socket.h' + fi + gl_PREREQ_SYS_H_WINSOCK2 + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[ +/* Some systems require prerequisite headers. */ +#include <sys/types.h> +#include <sys/socket.h> + ]], [socket connect accept bind getpeername getsockname getsockopt + listen recv send recvfrom sendto setsockopt shutdown accept4]) +]) + +AC_DEFUN([gl_PREREQ_SYS_H_SOCKET], +[ + dnl Check prerequisites of the <sys/socket.h> replacement. + AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) + gl_CHECK_NEXT_HEADERS([sys/socket.h]) + if test $ac_cv_header_sys_socket_h = yes; then + HAVE_SYS_SOCKET_H=1 + HAVE_WS2TCPIP_H=0 + else + HAVE_SYS_SOCKET_H=0 + if test $ac_cv_header_ws2tcpip_h = yes; then + HAVE_WS2TCPIP_H=1 + else + HAVE_WS2TCPIP_H=0 + fi + fi + AC_SUBST([HAVE_SYS_SOCKET_H]) + AC_SUBST([HAVE_WS2TCPIP_H]) +]) + +# Common prerequisites of the <sys/socket.h> replacement and of the +# <sys/select.h> replacement. +# Sets and substitutes HAVE_WINSOCK2_H. +AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2], +[ + m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) + m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])]) + AC_CHECK_HEADERS_ONCE([sys/socket.h]) + if test $ac_cv_header_sys_socket_h != yes; then + dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make + dnl the check for those headers unconditional; yet cygwin reports + dnl that the headers are present but cannot be compiled (since on + dnl cygwin, all socket information should come from sys/socket.h). + AC_CHECK_HEADERS([winsock2.h]) + fi + if test "$ac_cv_header_winsock2_h" = yes; then + HAVE_WINSOCK2_H=1 + UNISTD_H_HAVE_WINSOCK2_H=1 + SYS_IOCTL_H_HAVE_WINSOCK2_H=1 + else + HAVE_WINSOCK2_H=0 + fi + AC_SUBST([HAVE_WINSOCK2_H]) +]) + +AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS], +[ + GNULIB_SOCKET=0; AC_SUBST([GNULIB_SOCKET]) + GNULIB_CONNECT=0; AC_SUBST([GNULIB_CONNECT]) + GNULIB_ACCEPT=0; AC_SUBST([GNULIB_ACCEPT]) + GNULIB_BIND=0; AC_SUBST([GNULIB_BIND]) + GNULIB_GETPEERNAME=0; AC_SUBST([GNULIB_GETPEERNAME]) + GNULIB_GETSOCKNAME=0; AC_SUBST([GNULIB_GETSOCKNAME]) + GNULIB_GETSOCKOPT=0; AC_SUBST([GNULIB_GETSOCKOPT]) + GNULIB_LISTEN=0; AC_SUBST([GNULIB_LISTEN]) + GNULIB_RECV=0; AC_SUBST([GNULIB_RECV]) + GNULIB_SEND=0; AC_SUBST([GNULIB_SEND]) + GNULIB_RECVFROM=0; AC_SUBST([GNULIB_RECVFROM]) + GNULIB_SENDTO=0; AC_SUBST([GNULIB_SENDTO]) + GNULIB_SETSOCKOPT=0; AC_SUBST([GNULIB_SETSOCKOPT]) + GNULIB_SHUTDOWN=0; AC_SUBST([GNULIB_SHUTDOWN]) + GNULIB_ACCEPT4=0; AC_SUBST([GNULIB_ACCEPT4]) + HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE]) + HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1; + AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY]) + HAVE_SA_FAMILY_T=1; AC_SUBST([HAVE_SA_FAMILY_T]) + HAVE_ACCEPT4=1; AC_SUBST([HAVE_ACCEPT4]) +]) diff --git a/devspec.en_US/project/recutils/m4/sys_stat_h.m4 b/devspec.en_US/project/recutils/m4/sys_stat_h.m4 new file mode 100755 index 0000000..361ac3f --- /dev/null +++ b/devspec.en_US/project/recutils/m4/sys_stat_h.m4 @@ -0,0 +1,100 @@ +# sys_stat_h.m4 serial 31 -*- Autoconf -*- +dnl Copyright (C) 2006-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Eric Blake. +dnl Provide a GNU-like <sys/stat.h>. + +AC_DEFUN([gl_HEADER_SYS_STAT_H], +[ + AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) + + dnl Check for broken stat macros. + AC_REQUIRE([AC_HEADER_STAT]) + + gl_CHECK_NEXT_HEADERS([sys/stat.h]) + + dnl Ensure the type mode_t gets defined. + AC_REQUIRE([AC_TYPE_MODE_T]) + + dnl Whether to enable precise timestamps in 'struct stat'. + m4_ifdef([gl_WINDOWS_STAT_TIMESPEC], [ + AC_REQUIRE([gl_WINDOWS_STAT_TIMESPEC]) + ], [ + WINDOWS_STAT_TIMESPEC=0 + ]) + AC_SUBST([WINDOWS_STAT_TIMESPEC]) + + dnl Whether to ensure that struct stat.st_size is 64-bit wide. + m4_ifdef([gl_LARGEFILE], [ + AC_REQUIRE([gl_LARGEFILE]) + ], [ + WINDOWS_64_BIT_ST_SIZE=0 + ]) + AC_SUBST([WINDOWS_64_BIT_ST_SIZE]) + + dnl Define types that are supposed to be defined in <sys/types.h> or + dnl <sys/stat.h>. + AC_CHECK_TYPE([nlink_t], [], + [AC_DEFINE([nlink_t], [int], + [Define to the type of st_nlink in struct stat, or a supertype.])], + [#include <sys/types.h> + #include <sys/stat.h>]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[#include <sys/stat.h> + ]], [fchmodat fstat fstatat futimens lchmod lstat mkdirat mkfifo mkfifoat + mknod mknodat stat utimensat]) +]) # gl_HEADER_SYS_STAT_H + +AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_SYS_STAT_H_DEFAULTS], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl for REPLACE_FCHDIR + GNULIB_FCHMODAT=0; AC_SUBST([GNULIB_FCHMODAT]) + GNULIB_FSTAT=0; AC_SUBST([GNULIB_FSTAT]) + GNULIB_FSTATAT=0; AC_SUBST([GNULIB_FSTATAT]) + GNULIB_FUTIMENS=0; AC_SUBST([GNULIB_FUTIMENS]) + GNULIB_LCHMOD=0; AC_SUBST([GNULIB_LCHMOD]) + GNULIB_LSTAT=0; AC_SUBST([GNULIB_LSTAT]) + GNULIB_MKDIRAT=0; AC_SUBST([GNULIB_MKDIRAT]) + GNULIB_MKFIFO=0; AC_SUBST([GNULIB_MKFIFO]) + GNULIB_MKFIFOAT=0; AC_SUBST([GNULIB_MKFIFOAT]) + GNULIB_MKNOD=0; AC_SUBST([GNULIB_MKNOD]) + GNULIB_MKNODAT=0; AC_SUBST([GNULIB_MKNODAT]) + GNULIB_STAT=0; AC_SUBST([GNULIB_STAT]) + GNULIB_UTIMENSAT=0; AC_SUBST([GNULIB_UTIMENSAT]) + GNULIB_OVERRIDES_STRUCT_STAT=0; AC_SUBST([GNULIB_OVERRIDES_STRUCT_STAT]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_FCHMODAT=1; AC_SUBST([HAVE_FCHMODAT]) + HAVE_FSTATAT=1; AC_SUBST([HAVE_FSTATAT]) + HAVE_FUTIMENS=1; AC_SUBST([HAVE_FUTIMENS]) + HAVE_LCHMOD=1; AC_SUBST([HAVE_LCHMOD]) + HAVE_LSTAT=1; AC_SUBST([HAVE_LSTAT]) + HAVE_MKDIRAT=1; AC_SUBST([HAVE_MKDIRAT]) + HAVE_MKFIFO=1; AC_SUBST([HAVE_MKFIFO]) + HAVE_MKFIFOAT=1; AC_SUBST([HAVE_MKFIFOAT]) + HAVE_MKNOD=1; AC_SUBST([HAVE_MKNOD]) + HAVE_MKNODAT=1; AC_SUBST([HAVE_MKNODAT]) + HAVE_UTIMENSAT=1; AC_SUBST([HAVE_UTIMENSAT]) + REPLACE_FSTAT=0; AC_SUBST([REPLACE_FSTAT]) + REPLACE_FSTATAT=0; AC_SUBST([REPLACE_FSTATAT]) + REPLACE_FUTIMENS=0; AC_SUBST([REPLACE_FUTIMENS]) + REPLACE_LSTAT=0; AC_SUBST([REPLACE_LSTAT]) + REPLACE_MKDIR=0; AC_SUBST([REPLACE_MKDIR]) + REPLACE_MKFIFO=0; AC_SUBST([REPLACE_MKFIFO]) + REPLACE_MKNOD=0; AC_SUBST([REPLACE_MKNOD]) + REPLACE_STAT=0; AC_SUBST([REPLACE_STAT]) + REPLACE_UTIMENSAT=0; AC_SUBST([REPLACE_UTIMENSAT]) +]) diff --git a/devspec.en_US/project/recutils/m4/sys_time_h.m4 b/devspec.en_US/project/recutils/m4/sys_time_h.m4 new file mode 100755 index 0000000..3d9233a --- /dev/null +++ b/devspec.en_US/project/recutils/m4/sys_time_h.m4 @@ -0,0 +1,110 @@ +# Configure a replacement for <sys/time.h>. +# serial 9 + +# Copyright (C) 2007, 2009-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Written by Paul Eggert and Martin Lambers. + +AC_DEFUN([gl_HEADER_SYS_TIME_H], +[ + dnl Use AC_REQUIRE here, so that the REPLACE_GETTIMEOFDAY=0 statement + dnl below is expanded once only, before all REPLACE_GETTIMEOFDAY=1 + dnl statements that occur in other macros. + AC_REQUIRE([gl_HEADER_SYS_TIME_H_BODY]) +]) + +AC_DEFUN([gl_HEADER_SYS_TIME_H_BODY], +[ + AC_REQUIRE([AC_C_RESTRICT]) + AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) + AC_CHECK_HEADERS_ONCE([sys/time.h]) + gl_CHECK_NEXT_HEADERS([sys/time.h]) + + if test $ac_cv_header_sys_time_h != yes; then + HAVE_SYS_TIME_H=0 + fi + + dnl On native Windows with MSVC, 'struct timeval' is defined in <winsock2.h> + dnl only. So include that header in the list. + gl_PREREQ_SYS_H_WINSOCK2 + AC_CACHE_CHECK([for struct timeval], [gl_cv_sys_struct_timeval], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#if HAVE_SYS_TIME_H + #include <sys/time.h> + #endif + #include <time.h> + #if HAVE_WINSOCK2_H + # include <winsock2.h> + #endif + ]], + [[static struct timeval x; x.tv_sec = x.tv_usec;]])], + [gl_cv_sys_struct_timeval=yes], + [gl_cv_sys_struct_timeval=no]) + ]) + if test $gl_cv_sys_struct_timeval != yes; then + HAVE_STRUCT_TIMEVAL=0 + else + dnl On native Windows with a 64-bit 'time_t', 'struct timeval' is defined + dnl (in <sys/time.h> and <winsock2.h> for mingw64, in <winsock2.h> only + dnl for MSVC) with a tv_sec field of type 'long' (32-bit!), which is + dnl smaller than the 'time_t' type mandated by POSIX. + dnl On OpenBSD 5.1 amd64, tv_sec is 64 bits and time_t 32 bits, but + dnl that is good enough. + AC_CACHE_CHECK([for wide-enough struct timeval.tv_sec member], + [gl_cv_sys_struct_timeval_tv_sec], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#if HAVE_SYS_TIME_H + #include <sys/time.h> + #endif + #include <time.h> + #if HAVE_WINSOCK2_H + # include <winsock2.h> + #endif + ]], + [[static struct timeval x; + typedef int verify_tv_sec_type[ + sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1 + ]; + ]])], + [gl_cv_sys_struct_timeval_tv_sec=yes], + [gl_cv_sys_struct_timeval_tv_sec=no]) + ]) + if test $gl_cv_sys_struct_timeval_tv_sec != yes; then + REPLACE_STRUCT_TIMEVAL=1 + fi + fi + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[ +#if HAVE_SYS_TIME_H +# include <sys/time.h> +#endif +#include <time.h> + ]], [gettimeofday]) +]) + +AC_DEFUN([gl_SYS_TIME_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_HEADER_SYS_TIME_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_HEADER_SYS_TIME_H_DEFAULTS], +[ + GNULIB_GETTIMEOFDAY=0; AC_SUBST([GNULIB_GETTIMEOFDAY]) + dnl Assume POSIX behavior unless another module says otherwise. + HAVE_GETTIMEOFDAY=1; AC_SUBST([HAVE_GETTIMEOFDAY]) + HAVE_STRUCT_TIMEVAL=1; AC_SUBST([HAVE_STRUCT_TIMEVAL]) + HAVE_SYS_TIME_H=1; AC_SUBST([HAVE_SYS_TIME_H]) + REPLACE_GETTIMEOFDAY=0; AC_SUBST([REPLACE_GETTIMEOFDAY]) + REPLACE_STRUCT_TIMEVAL=0; AC_SUBST([REPLACE_STRUCT_TIMEVAL]) +]) diff --git a/devspec.en_US/project/recutils/m4/sys_types_h.m4 b/devspec.en_US/project/recutils/m4/sys_types_h.m4 new file mode 100755 index 0000000..be06559 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/sys_types_h.m4 @@ -0,0 +1,60 @@ +# sys_types_h.m4 serial 9 +dnl Copyright (C) 2011-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN_ONCE([gl_SYS_TYPES_H], +[ + dnl Use sane struct stat types in OpenVMS 8.2 and later. + AC_DEFINE([_USE_STD_STAT], 1, [For standard stat data types on VMS.]) + + AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) + gl_NEXT_HEADERS([sys/types.h]) + + dnl Ensure the type pid_t gets defined. + AC_REQUIRE([AC_TYPE_PID_T]) + + dnl Ensure the type mode_t gets defined. + AC_REQUIRE([AC_TYPE_MODE_T]) + + dnl Whether to override the 'off_t' type. + AC_REQUIRE([gl_TYPE_OFF_T]) + + dnl Whether to override the 'dev_t' and 'ino_t' types. + m4_ifdef([gl_WINDOWS_STAT_INODES], [ + AC_REQUIRE([gl_WINDOWS_STAT_INODES]) + ], [ + WINDOWS_STAT_INODES=0 + ]) + AC_SUBST([WINDOWS_STAT_INODES]) +]) + +AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS], +[ +]) + +# This works around a buggy version in autoconf <= 2.69. +# See <https://lists.gnu.org/r/autoconf/2016-08/msg00014.html> + +m4_version_prereq([2.70], [], [ + +# This is taken from the following Autoconf patch: +# https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=e17a30e987d7ee695fb4294a82d987ec3dc9b974 + +m4_undefine([AC_HEADER_MAJOR]) +AC_DEFUN([AC_HEADER_MAJOR], +[AC_CHECK_HEADERS_ONCE([sys/types.h]) +AC_CHECK_HEADER([sys/mkdev.h], + [AC_DEFINE([MAJOR_IN_MKDEV], [1], + [Define to 1 if `major', `minor', and `makedev' are declared in + <mkdev.h>.])]) +if test $ac_cv_header_sys_mkdev_h = no; then + AC_CHECK_HEADER([sys/sysmacros.h], + [AC_DEFINE([MAJOR_IN_SYSMACROS], [1], + [Define to 1 if `major', `minor', and `makedev' are declared in + <sysmacros.h>.])]) +fi +]) + +]) diff --git a/devspec.en_US/project/recutils/m4/sys_wait_h.m4 b/devspec.en_US/project/recutils/m4/sys_wait_h.m4 new file mode 100755 index 0000000..6532959 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/sys_wait_h.m4 @@ -0,0 +1,36 @@ +# sys_wait_h.m4 serial 6 +dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_SYS_WAIT_H], +[ + AC_REQUIRE([gl_SYS_WAIT_H_DEFAULTS]) + + dnl <sys/wait.h> is always overridden, because of GNULIB_POSIXCHECK. + gl_CHECK_NEXT_HEADERS([sys/wait.h]) + + dnl Ensure the type pid_t gets defined. + AC_REQUIRE([AC_TYPE_PID_T]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[#include <sys/wait.h>]], + [waitpid]) +]) + +AC_DEFUN([gl_SYS_WAIT_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_SYS_WAIT_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_SYS_WAIT_H_DEFAULTS], +[ + GNULIB_WAITPID=0; AC_SUBST([GNULIB_WAITPID]) + dnl Assume proper GNU behavior unless another module says otherwise. +]) diff --git a/devspec.en_US/project/recutils/m4/tempname.m4 b/devspec.en_US/project/recutils/m4/tempname.m4 new file mode 100755 index 0000000..664a632 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/tempname.m4 @@ -0,0 +1,19 @@ +#serial 5 + +# Copyright (C) 2006-2007, 2009-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# glibc provides __gen_tempname as a wrapper for mk[ds]temp. Expose +# it as a public API, and provide it on systems that are lacking. +AC_DEFUN([gl_FUNC_GEN_TEMPNAME], +[ + gl_PREREQ_TEMPNAME +]) + +# Prerequisites of lib/tempname.c. +AC_DEFUN([gl_PREREQ_TEMPNAME], +[ + : +]) diff --git a/devspec.en_US/project/recutils/m4/threadlib.m4 b/devspec.en_US/project/recutils/m4/threadlib.m4 new file mode 100755 index 0000000..f7841b6 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/threadlib.m4 @@ -0,0 +1,473 @@ +# threadlib.m4 serial 15 +dnl Copyright (C) 2005-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_PREREQ([2.60]) + +dnl gl_THREADLIB +dnl ------------ +dnl Tests for a multithreading library to be used. +dnl If the configure.ac contains a definition of the gl_THREADLIB_DEFAULT_NO +dnl (it must be placed before the invocation of gl_THREADLIB_EARLY!), then the +dnl default is 'no', otherwise it is system dependent. In both cases, the user +dnl can change the choice through the options --enable-threads=choice or +dnl --disable-threads. +dnl Defines at most one of the macros USE_POSIX_THREADS, USE_SOLARIS_THREADS, +dnl USE_PTH_THREADS, USE_WINDOWS_THREADS +dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use +dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with +dnl libtool). +dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for +dnl programs that really need multithread functionality. The difference +dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak +dnl symbols, typically LIBTHREAD is empty whereas LIBMULTITHREAD is not. +dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for +dnl multithread-safe programs. + +AC_DEFUN([gl_THREADLIB_EARLY], +[ + AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) +]) + +dnl The guts of gl_THREADLIB_EARLY. Needs to be expanded only once. + +AC_DEFUN([gl_THREADLIB_EARLY_BODY], +[ + dnl Ordering constraints: This macro modifies CPPFLAGS in a way that + dnl influences the result of the autoconf tests that test for *_unlocked + dnl declarations, on AIX 5 at least. Therefore it must come early. + AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl + AC_BEFORE([$0], [gl_ARGP])dnl + + AC_REQUIRE([AC_CANONICAL_HOST]) + dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems. + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + dnl Check for multithreading. + m4_ifdef([gl_THREADLIB_DEFAULT_NO], + [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])], + [m4_divert_text([DEFAULTS], [gl_use_threads_default=])]) + AC_ARG_ENABLE([threads], +AC_HELP_STRING([--enable-threads={posix|solaris|pth|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [ +AC_HELP_STRING([--disable-threads], [build without multithread safety])]), + [gl_use_threads=$enableval], + [if test -n "$gl_use_threads_default"; then + gl_use_threads="$gl_use_threads_default" + else +changequote(,)dnl + case "$host_os" in + dnl Disable multithreading by default on OSF/1, because it interferes + dnl with fork()/exec(): When msgexec is linked with -lpthread, its + dnl child process gets an endless segmentation fault inside execvp(). + dnl Disable multithreading by default on Cygwin 1.5.x, because it has + dnl bugs that lead to endless loops or crashes. See + dnl <https://cygwin.com/ml/cygwin/2009-08/msg00283.html>. + osf*) gl_use_threads=no ;; + cygwin*) + case `uname -r` in + 1.[0-5].*) gl_use_threads=no ;; + *) gl_use_threads=yes ;; + esac + ;; + *) gl_use_threads=yes ;; + esac +changequote([,])dnl + fi + ]) + if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then + # For using <pthread.h>: + case "$host_os" in + osf*) + # On OSF/1, the compiler needs the flag -D_REENTRANT so that it + # groks <pthread.h>. cc also understands the flag -pthread, but + # we don't use it because 1. gcc-2.95 doesn't understand -pthread, + # 2. putting a flag into CPPFLAGS that has an effect on the linker + # causes the AC_LINK_IFELSE test below to succeed unexpectedly, + # leading to wrong values of LIBTHREAD and LTLIBTHREAD. + CPPFLAGS="$CPPFLAGS -D_REENTRANT" + ;; + esac + # Some systems optimize for single-threaded programs by default, and + # need special flags to disable these optimizations. For example, the + # definition of 'errno' in <errno.h>. + case "$host_os" in + aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; + solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; + esac + fi +]) + +dnl The guts of gl_THREADLIB. Needs to be expanded only once. + +AC_DEFUN([gl_THREADLIB_BODY], +[ + AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) + gl_threads_api=none + LIBTHREAD= + LTLIBTHREAD= + LIBMULTITHREAD= + LTLIBMULTITHREAD= + if test "$gl_use_threads" != no; then + dnl Check whether the compiler and linker support weak declarations. + AC_CACHE_CHECK([whether imported symbols can be declared weak], + [gl_cv_have_weak], + [gl_cv_have_weak=no + dnl First, test whether the compiler accepts it syntactically. + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[extern void xyzzy (); +#pragma weak xyzzy]], + [[xyzzy();]])], + [gl_cv_have_weak=maybe]) + if test $gl_cv_have_weak = maybe; then + dnl Second, test whether it actually works. On Cygwin 1.7.2, with + dnl gcc 4.3, symbols declared weak always evaluate to the address 0. + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <stdio.h> +#pragma weak fputs +int main () +{ + return (fputs == NULL); +}]])], + [gl_cv_have_weak=yes], + [gl_cv_have_weak=no], + [dnl When cross-compiling, assume that only ELF platforms support + dnl weak symbols. + AC_EGREP_CPP([Extensible Linking Format], + [#ifdef __ELF__ + Extensible Linking Format + #endif + ], + [gl_cv_have_weak="guessing yes"], + [gl_cv_have_weak="guessing no"]) + ]) + fi + dnl But when linking statically, weak symbols don't work. + case " $LDFLAGS " in + *" -static "*) gl_cv_have_weak=no ;; + esac + ]) + dnl Check whether the linker supports the --as-needed/--no-as-needed options. + dnl Assume GCC, so that we can use the -Wl option. + AC_CACHE_CHECK([whether the linker supports --as-needed], + [gl_cv_linker_have_as_needed], + [if test -n "$GCC"; then + gl_saved_ldflags="$LDFLAGS" + LDFLAGS="$gl_saved_ldflags -Wl,--as-needed -Wl,--no-as-needed" + AC_LINK_IFELSE([AC_LANG_PROGRAM()], + [gl_cv_linker_have_as_needed=yes], + [gl_cv_linker_have_as_needed=no]) + LDFLAGS="$gl_saved_ldflags" + else + gl_cv_linker_have_as_needed=no + fi + ]) + dnl Check whether the linker supports the --push-state/--pop-state options. + dnl Assume GCC, so that we can use the -Wl option. + AC_CACHE_CHECK([whether the linker supports --push-state], + [gl_cv_linker_have_push_state], + [if test -n "$GCC"; then + gl_saved_ldflags="$LDFLAGS" + LDFLAGS="$gl_saved_ldflags -Wl,--push-state -Wl,--pop-state" + AC_LINK_IFELSE([AC_LANG_PROGRAM()], + [gl_cv_linker_have_push_state=yes], + [gl_cv_linker_have_push_state=no]) + LDFLAGS="$gl_saved_ldflags" + else + gl_cv_linker_have_push_state=no + fi + ]) + if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then + # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that + # it groks <pthread.h>. It's added above, in gl_THREADLIB_EARLY_BODY. + AC_CHECK_HEADER([pthread.h], + [gl_have_pthread_h=yes], [gl_have_pthread_h=no]) + if test "$gl_have_pthread_h" = yes; then + # Other possible tests: + # -lpthreads (FSU threads, PCthreads) + # -lgthreads + gl_have_pthread= + # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist + # in libc. IRIX 6.5 has the first one in both libc and libpthread, but + # the second one only in libpthread, and lock.c needs it. + # + # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 + # needs -pthread for some reason. See: + # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html + save_LIBS=$LIBS + for gl_pthread in '' '-pthread'; do + LIBS="$LIBS $gl_pthread" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include <pthread.h> + pthread_mutex_t m; + pthread_mutexattr_t ma; + ]], + [[pthread_mutex_lock (&m); + pthread_mutexattr_init (&ma);]])], + [gl_have_pthread=yes + LIBTHREAD=$gl_pthread LTLIBTHREAD=$gl_pthread + LIBMULTITHREAD=$gl_pthread LTLIBMULTITHREAD=$gl_pthread]) + LIBS=$save_LIBS + test -n "$gl_have_pthread" && break + done + + # Test for libpthread by looking for pthread_kill. (Not pthread_self, + # since it is defined as a macro on OSF/1.) + if test -n "$gl_have_pthread" && test -z "$LIBTHREAD"; then + # The program links fine without libpthread. But it may actually + # need to link with libpthread in order to create multiple threads. + AC_CHECK_LIB([pthread], [pthread_kill], + [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread + # On Solaris and HP-UX, most pthread functions exist also in libc. + # Therefore pthread_in_use() needs to actually try to create a + # thread: pthread_create from libc will fail, whereas + # pthread_create will actually create a thread. + # On Solaris 10 or newer, this test is no longer needed, because + # libc contains the fully functional pthread functions. + case "$host_os" in + solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*) + AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], + [Define if the pthread_in_use() detection is hard.]) + esac + ]) + elif test -z "$gl_have_pthread"; then + # Some library is needed. Try libpthread and libc_r. + AC_CHECK_LIB([pthread], [pthread_kill], + [gl_have_pthread=yes + LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread + LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread]) + if test -z "$gl_have_pthread"; then + # For FreeBSD 4. + AC_CHECK_LIB([c_r], [pthread_kill], + [gl_have_pthread=yes + LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r + LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r]) + fi + fi + if test -n "$gl_have_pthread"; then + gl_threads_api=posix + AC_DEFINE([USE_POSIX_THREADS], [1], + [Define if the POSIX multithreading library can be used.]) + if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + AC_DEFINE([USE_POSIX_THREADS_WEAK], [1], + [Define if references to the POSIX multithreading library should be made weak.]) + LIBTHREAD= + LTLIBTHREAD= + dnl On platforms where GCC enables --as-needed by default, attempt + dnl to make sure that LIBMULTITHREAD really links with -lpthread. + dnl Otherwise linking with LIBMULTITHREAD has no effect; then + dnl the weak symbols are not defined and thus evaluate to NULL. + case "$LIBMULTITHREAD" in + "") ;; + -pthread) + if test $gl_cv_linker_have_as_needed = yes; then + if test $gl_cv_linker_have_push_state = yes; then + LIBMULTITHREAD="$LIBMULTITHREAD -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state" + else + LIBMULTITHREAD="$LIBMULTITHREAD -Wl,--no-as-needed -lpthread" + fi + fi + ;; + *) + if test $gl_cv_linker_have_as_needed = yes; then + if test $gl_cv_linker_have_push_state = yes; then + LIBMULTITHREAD="-Wl,--push-state -Wl,--no-as-needed $LIBMULTITHREAD -Wl,--pop-state" + else + LIBMULTITHREAD="-Wl,--no-as-needed $LIBMULTITHREAD" + fi + fi + ;; + esac + # TODO: May need to modify LTLIBMULTITHREAD similarly. + fi + fi + fi + fi + fi + if test -z "$gl_have_pthread"; then + if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then + gl_have_solaristhread= + gl_save_LIBS="$LIBS" + LIBS="$LIBS -lthread" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include <thread.h> +#include <synch.h> + ]], + [[thr_self();]])], + [gl_have_solaristhread=yes]) + LIBS="$gl_save_LIBS" + if test -n "$gl_have_solaristhread"; then + gl_threads_api=solaris + LIBTHREAD=-lthread + LTLIBTHREAD=-lthread + LIBMULTITHREAD="$LIBTHREAD" + LTLIBMULTITHREAD="$LTLIBTHREAD" + AC_DEFINE([USE_SOLARIS_THREADS], [1], + [Define if the old Solaris multithreading library can be used.]) + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + AC_DEFINE([USE_SOLARIS_THREADS_WEAK], [1], + [Define if references to the old Solaris multithreading library should be made weak.]) + LIBTHREAD= + LTLIBTHREAD= + dnl On platforms where GCC enables --as-needed by default, attempt + dnl to make sure that LIBMULTITHREAD really links with -lthread. + dnl Otherwise linking with LIBMULTITHREAD has no effect; then + dnl the weak symbols are not defined and thus evaluate to NULL. + if test $gl_cv_linker_have_as_needed = yes; then + if test $gl_cv_linker_have_push_state = yes; then + LIBMULTITHREAD="-Wl,--push-state -Wl,--no-as-needed $LIBMULTITHREAD -Wl,--pop-state" + else + LIBMULTITHREAD="-Wl,--no-as-needed $LIBMULTITHREAD" + fi + fi + # TODO: May need to modify LTLIBMULTITHREAD similarly. + fi + fi + fi + fi + if test "$gl_use_threads" = pth; then + gl_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_LINKFLAGS([pth]) + gl_have_pth= + gl_save_LIBS="$LIBS" + LIBS="$LIBS $LIBPTH" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include <pth.h>]], [[pth_self();]])], + [gl_have_pth=yes]) + LIBS="$gl_save_LIBS" + if test -n "$gl_have_pth"; then + gl_threads_api=pth + LIBTHREAD="$LIBPTH" + LTLIBTHREAD="$LTLIBPTH" + LIBMULTITHREAD="$LIBTHREAD" + LTLIBMULTITHREAD="$LTLIBTHREAD" + AC_DEFINE([USE_PTH_THREADS], [1], + [Define if the GNU Pth multithreading library can be used.]) + if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + AC_DEFINE([USE_PTH_THREADS_WEAK], [1], + [Define if references to the GNU Pth multithreading library should be made weak.]) + LIBTHREAD= + LTLIBTHREAD= + dnl On platforms where GCC enables --as-needed by default, attempt + dnl to make sure that LIBMULTITHREAD really links with -lpth. + dnl Otherwise linking with LIBMULTITHREAD has no effect; then + dnl the weak symbols are not defined and thus evaluate to NULL. + if test $gl_cv_linker_have_as_needed = yes; then + if test $gl_cv_linker_have_push_state = yes; then + LIBMULTITHREAD="-Wl,--push-state -Wl,--no-as-needed $LIBMULTITHREAD -Wl,--pop-state" + else + LIBMULTITHREAD="-Wl,--no-as-needed $LIBMULTITHREAD" + fi + fi + # TODO: May need to modify LTLIBMULTITHREAD similarly. + fi + fi + else + CPPFLAGS="$gl_save_CPPFLAGS" + fi + fi + if test -z "$gl_have_pthread"; then + case "$gl_use_threads" in + yes | windows | win32) # The 'win32' is for backward compatibility. + if { case "$host_os" in + mingw*) true;; + *) false;; + esac + }; then + gl_threads_api=windows + AC_DEFINE([USE_WINDOWS_THREADS], [1], + [Define if the native Windows multithreading API can be used.]) + fi + ;; + esac + fi + fi + AC_MSG_CHECKING([for multithread API to use]) + AC_MSG_RESULT([$gl_threads_api]) + AC_SUBST([LIBTHREAD]) + AC_SUBST([LTLIBTHREAD]) + AC_SUBST([LIBMULTITHREAD]) + AC_SUBST([LTLIBMULTITHREAD]) +]) + +AC_DEFUN([gl_THREADLIB], +[ + AC_REQUIRE([gl_THREADLIB_EARLY]) + AC_REQUIRE([gl_THREADLIB_BODY]) +]) + + +dnl gl_DISABLE_THREADS +dnl ------------------ +dnl Sets the gl_THREADLIB default so that threads are not used by default. +dnl The user can still override it at installation time, by using the +dnl configure option '--enable-threads'. + +AC_DEFUN([gl_DISABLE_THREADS], [ + m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no]) +]) + + +dnl Survey of platforms: +dnl +dnl Platform Available Compiler Supports test-lock +dnl flavours option weak result +dnl --------------- --------- --------- -------- --------- +dnl Linux 2.4/glibc posix -lpthread Y OK +dnl +dnl GNU Hurd/glibc posix +dnl +dnl Ubuntu 14.04 posix -pthread Y OK +dnl +dnl FreeBSD 5.3 posix -lc_r Y +dnl posix -lkse ? Y +dnl posix -lpthread ? Y +dnl posix -lthr Y +dnl +dnl FreeBSD 5.2 posix -lc_r Y +dnl posix -lkse Y +dnl posix -lthr Y +dnl +dnl FreeBSD 4.0,4.10 posix -lc_r Y OK +dnl +dnl NetBSD 1.6 -- +dnl +dnl OpenBSD 3.4 posix -lpthread Y OK +dnl +dnl Mac OS X 10.[123] posix -lpthread Y OK +dnl +dnl Solaris 7,8,9 posix -lpthread Y Sol 7,8: 0.0; Sol 9: OK +dnl solaris -lthread Y Sol 7,8: 0.0; Sol 9: OK +dnl +dnl HP-UX 11 posix -lpthread N (cc) OK +dnl Y (gcc) +dnl +dnl IRIX 6.5 posix -lpthread Y 0.5 +dnl +dnl AIX 4.3,5.1 posix -lpthread N AIX 4: 0.5; AIX 5: OK +dnl +dnl OSF/1 4.0,5.1 posix -pthread (cc) N OK +dnl -lpthread (gcc) Y +dnl +dnl Cygwin posix -lpthread Y OK +dnl +dnl Any of the above pth -lpth 0.0 +dnl +dnl Mingw windows N OK +dnl +dnl BeOS 5 -- +dnl +dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is +dnl turned off: +dnl OK if all three tests terminate OK, +dnl 0.5 if the first test terminates OK but the second one loops endlessly, +dnl 0.0 if the first test already loops endlessly. diff --git a/devspec.en_US/project/recutils/m4/time_h.m4 b/devspec.en_US/project/recutils/m4/time_h.m4 new file mode 100755 index 0000000..f08f29b --- /dev/null +++ b/devspec.en_US/project/recutils/m4/time_h.m4 @@ -0,0 +1,144 @@ +# Configure a more-standard replacement for <time.h>. + +# Copyright (C) 2000-2001, 2003-2007, 2009-2019 Free Software Foundation, Inc. + +# serial 11 + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Written by Paul Eggert and Jim Meyering. + +AC_DEFUN([gl_HEADER_TIME_H], +[ + dnl Use AC_REQUIRE here, so that the default behavior below is expanded + dnl once only, before all statements that occur in other macros. + AC_REQUIRE([gl_HEADER_TIME_H_BODY]) +]) + +AC_DEFUN([gl_HEADER_TIME_H_BODY], +[ + AC_REQUIRE([AC_C_RESTRICT]) + AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) + gl_NEXT_HEADERS([time.h]) + AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) +]) + +dnl Check whether 'struct timespec' is declared +dnl in time.h, sys/time.h, pthread.h, or unistd.h. + +AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC], +[ + AC_CHECK_HEADERS_ONCE([sys/time.h]) + AC_CACHE_CHECK([for struct timespec in <time.h>], + [gl_cv_sys_struct_timespec_in_time_h], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <time.h> + ]], + [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], + [gl_cv_sys_struct_timespec_in_time_h=yes], + [gl_cv_sys_struct_timespec_in_time_h=no])]) + + TIME_H_DEFINES_STRUCT_TIMESPEC=0 + SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 + PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 + UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 + if test $gl_cv_sys_struct_timespec_in_time_h = yes; then + TIME_H_DEFINES_STRUCT_TIMESPEC=1 + else + AC_CACHE_CHECK([for struct timespec in <sys/time.h>], + [gl_cv_sys_struct_timespec_in_sys_time_h], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <sys/time.h> + ]], + [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], + [gl_cv_sys_struct_timespec_in_sys_time_h=yes], + [gl_cv_sys_struct_timespec_in_sys_time_h=no])]) + if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then + SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 + else + AC_CACHE_CHECK([for struct timespec in <pthread.h>], + [gl_cv_sys_struct_timespec_in_pthread_h], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <pthread.h> + ]], + [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], + [gl_cv_sys_struct_timespec_in_pthread_h=yes], + [gl_cv_sys_struct_timespec_in_pthread_h=no])]) + if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then + PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 + else + AC_CACHE_CHECK([for struct timespec in <unistd.h>], + [gl_cv_sys_struct_timespec_in_unistd_h], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <unistd.h> + ]], + [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], + [gl_cv_sys_struct_timespec_in_unistd_h=yes], + [gl_cv_sys_struct_timespec_in_unistd_h=no])]) + if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then + UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 + fi + fi + fi + fi + AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC]) + AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC]) + AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC]) + AC_SUBST([UNISTD_H_DEFINES_STRUCT_TIMESPEC]) +]) + +AC_DEFUN([gl_TIME_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_HEADER_TIME_H_DEFAULTS], +[ + GNULIB_CTIME=0; AC_SUBST([GNULIB_CTIME]) + GNULIB_MKTIME=0; AC_SUBST([GNULIB_MKTIME]) + GNULIB_LOCALTIME=0; AC_SUBST([GNULIB_LOCALTIME]) + GNULIB_NANOSLEEP=0; AC_SUBST([GNULIB_NANOSLEEP]) + GNULIB_STRFTIME=0; AC_SUBST([GNULIB_STRFTIME]) + GNULIB_STRPTIME=0; AC_SUBST([GNULIB_STRPTIME]) + GNULIB_TIMEGM=0; AC_SUBST([GNULIB_TIMEGM]) + GNULIB_TIME_R=0; AC_SUBST([GNULIB_TIME_R]) + GNULIB_TIME_RZ=0; AC_SUBST([GNULIB_TIME_RZ]) + GNULIB_TZSET=0; AC_SUBST([GNULIB_TZSET]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_DECL_LOCALTIME_R=1; AC_SUBST([HAVE_DECL_LOCALTIME_R]) + HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP]) + HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME]) + HAVE_TIMEGM=1; AC_SUBST([HAVE_TIMEGM]) + HAVE_TZSET=1; AC_SUBST([HAVE_TZSET]) + dnl Even GNU libc does not have timezone_t yet. + HAVE_TIMEZONE_T=0; AC_SUBST([HAVE_TIMEZONE_T]) + dnl If another module says to replace or to not replace, do that. + dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK; + dnl this lets maintainers check for portability. + REPLACE_CTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_CTIME]) + REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; AC_SUBST([REPLACE_LOCALTIME_R]) + REPLACE_MKTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_MKTIME]) + REPLACE_NANOSLEEP=GNULIB_PORTCHECK; AC_SUBST([REPLACE_NANOSLEEP]) + REPLACE_STRFTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_STRFTIME]) + REPLACE_TIMEGM=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TIMEGM]) + REPLACE_TZSET=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TZSET]) + + dnl Hack so that the time module doesn't depend on the sys_time module. + dnl First, default GNULIB_GETTIMEOFDAY to 0 if sys_time is absent. + : ${GNULIB_GETTIMEOFDAY=0}; AC_SUBST([GNULIB_GETTIMEOFDAY]) + dnl Second, it's OK to not use GNULIB_PORTCHECK for REPLACE_GMTIME + dnl and REPLACE_LOCALTIME, as portability to Solaris 2.6 and earlier + dnl is no longer a big deal. + REPLACE_GMTIME=0; AC_SUBST([REPLACE_GMTIME]) + REPLACE_LOCALTIME=0; AC_SUBST([REPLACE_LOCALTIME]) +]) diff --git a/devspec.en_US/project/recutils/m4/time_r.m4 b/devspec.en_US/project/recutils/m4/time_r.m4 new file mode 100755 index 0000000..5caeca7 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/time_r.m4 @@ -0,0 +1,58 @@ +dnl Reentrant time functions: localtime_r, gmtime_r. + +dnl Copyright (C) 2003, 2006-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Paul Eggert. + +AC_DEFUN([gl_TIME_R], +[ + dnl Persuade glibc and Solaris <time.h> to declare localtime_r. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) + AC_REQUIRE([AC_C_RESTRICT]) + + dnl Some systems don't declare localtime_r() and gmtime_r() if _REENTRANT is + dnl not defined. + AC_CHECK_DECLS([localtime_r], [], [], [[#include <time.h>]]) + if test $ac_cv_have_decl_localtime_r = no; then + HAVE_DECL_LOCALTIME_R=0 + fi + + AC_CHECK_FUNCS_ONCE([localtime_r]) + if test $ac_cv_func_localtime_r = yes; then + HAVE_LOCALTIME_R=1 + AC_CACHE_CHECK([whether localtime_r is compatible with its POSIX signature], + [gl_cv_time_r_posix], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <time.h>]], + [[/* We don't need to append 'restrict's to the argument types, + even though the POSIX signature has the 'restrict's, + since C99 says they can't affect type compatibility. */ + struct tm * (*ptr) (time_t const *, struct tm *) = localtime_r; + if (ptr) return 0; + /* Check the return type is a pointer. + On HP-UX 10 it is 'int'. */ + *localtime_r (0, 0);]]) + ], + [gl_cv_time_r_posix=yes], + [gl_cv_time_r_posix=no]) + ]) + if test $gl_cv_time_r_posix = yes; then + REPLACE_LOCALTIME_R=0 + else + REPLACE_LOCALTIME_R=1 + fi + else + HAVE_LOCALTIME_R=0 + fi +]) + +# Prerequisites of lib/time_r.c. +AC_DEFUN([gl_PREREQ_TIME_R], [ + : +]) diff --git a/devspec.en_US/project/recutils/m4/time_rz.m4 b/devspec.en_US/project/recutils/m4/time_rz.m4 new file mode 100755 index 0000000..5564559 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/time_rz.m4 @@ -0,0 +1,53 @@ +dnl Time zone functions: tzalloc, localtime_rz, etc. + +dnl Copyright (C) 2015-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Paul Eggert. + +AC_DEFUN([gl_TIME_RZ], +[ + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) + AC_REQUIRE([AC_STRUCT_TIMEZONE]) + + # Mac OS X 10.6 loops forever with some time_t values. + # See Bug#27706, Bug#27736, and + # https://lists.gnu.org/r/bug-gnulib/2017-07/msg00142.html + AC_CACHE_CHECK([whether localtime loops forever near extrema], + [gl_cv_func_localtime_infloop_bug], + [gl_cv_func_localtime_infloop_bug=no + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <stdlib.h> + #include <string.h> + #include <unistd.h> + #include <time.h> + ]], [[ + time_t t = -67768038400666600; + struct tm *tm; + char *tz = getenv ("TZ"); + if (! (tz && strcmp (tz, "QQQ0") == 0)) + return 0; + alarm (2); + tm = localtime (&t); + /* Use TM and *TM to suppress over-optimization. */ + return tm && tm->tm_isdst; + ]])], + [(TZ=QQQ0 ./conftest$EXEEXT) >/dev/null 2>&1 || + gl_cv_func_localtime_infloop_bug=yes], + [], + [gl_cv_func_localtime_infloop_bug="guessing no"])]) + if test "$gl_cv_func_localtime_infloop_bug" = yes; then + AC_DEFINE([HAVE_LOCALTIME_INFLOOP_BUG], 1, + [Define if localtime-like functions can loop forever on + extreme arguments.]) + fi + + AC_CHECK_TYPES([timezone_t], [], [], [[#include <time.h>]]) + if test "$ac_cv_type_timezone_t" = yes; then + HAVE_TIMEZONE_T=1 + fi +]) diff --git a/devspec.en_US/project/recutils/m4/timegm.m4 b/devspec.en_US/project/recutils/m4/timegm.m4 new file mode 100755 index 0000000..d9d40de --- /dev/null +++ b/devspec.en_US/project/recutils/m4/timegm.m4 @@ -0,0 +1,26 @@ +# timegm.m4 serial 12 +dnl Copyright (C) 2003, 2007, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_TIMEGM], +[ + AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) + AC_REQUIRE([gl_FUNC_MKTIME_WORKS]) + REPLACE_TIMEGM=0 + AC_CHECK_FUNCS_ONCE([timegm]) + if test $ac_cv_func_timegm = yes; then + if test "$gl_cv_func_working_mktime" != yes; then + # Assume that timegm is buggy if mktime is. + REPLACE_TIMEGM=1 + fi + else + HAVE_TIMEGM=0 + fi +]) + +# Prerequisites of lib/timegm.c. +AC_DEFUN([gl_PREREQ_TIMEGM], [ + : +]) diff --git a/devspec.en_US/project/recutils/m4/timespec.m4 b/devspec.en_US/project/recutils/m4/timespec.m4 new file mode 100755 index 0000000..3db9943 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/timespec.m4 @@ -0,0 +1,11 @@ +#serial 15 + +# Copyright (C) 2000-2001, 2003-2007, 2009-2019 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl From Jim Meyering + +AC_DEFUN([gl_TIMESPEC], [:]) diff --git a/devspec.en_US/project/recutils/m4/tm_gmtoff.m4 b/devspec.en_US/project/recutils/m4/tm_gmtoff.m4 new file mode 100755 index 0000000..31b841f --- /dev/null +++ b/devspec.en_US/project/recutils/m4/tm_gmtoff.m4 @@ -0,0 +1,14 @@ +# tm_gmtoff.m4 serial 3 +dnl Copyright (C) 2002, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_TM_GMTOFF], +[ + AC_CHECK_MEMBER([struct tm.tm_gmtoff], + [AC_DEFINE([HAVE_TM_GMTOFF], [1], + [Define if struct tm has the tm_gmtoff member.])], + , + [#include <time.h>]) +]) diff --git a/devspec.en_US/project/recutils/m4/tmpdir.m4 b/devspec.en_US/project/recutils/m4/tmpdir.m4 new file mode 100755 index 0000000..551ce09 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/tmpdir.m4 @@ -0,0 +1,9 @@ +# tmpdir.m4 serial 4 +dnl Copyright (C) 2001-2002, 2006, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Prerequisites for lib/tmpdir.c + +AC_DEFUN([gt_TMPDIR], [:]) diff --git a/devspec.en_US/project/recutils/m4/tzset.m4 b/devspec.en_US/project/recutils/m4/tzset.m4 new file mode 100755 index 0000000..1278801 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/tzset.m4 @@ -0,0 +1,83 @@ +# serial 11 + +# Copyright (C) 2003, 2007, 2009-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# See if we have a working tzset function. +# If so, arrange to compile the wrapper function. +# For at least Solaris 2.5.1 and 2.6, this is necessary +# because tzset can clobber the contents of the buffer +# used by localtime. + +# Written by Paul Eggert and Jim Meyering. + +AC_DEFUN([gl_FUNC_TZSET], +[ + AC_REQUIRE([gl_HEADER_TIME_H_DEFAULTS]) + AC_REQUIRE([gl_LOCALTIME_BUFFER_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CHECK_FUNCS_ONCE([tzset]) + if test $ac_cv_func_tzset = no; then + HAVE_TZSET=0 + fi + gl_FUNC_TZSET_CLOBBER + REPLACE_TZSET=0 + case "$gl_cv_func_tzset_clobber" in + *yes) + REPLACE_TZSET=1 + AC_DEFINE([TZSET_CLOBBERS_LOCALTIME], [1], + [Define if tzset clobbers localtime's static buffer.]) + gl_LOCALTIME_BUFFER_NEEDED + ;; + esac + case "$host_os" in + mingw*) REPLACE_TZSET=1 ;; + esac +]) + +# Set gl_cv_func_tzset_clobber. +AC_DEFUN([gl_FUNC_TZSET_CLOBBER], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether tzset clobbers localtime buffer], + [gl_cv_func_tzset_clobber], + [AC_RUN_IFELSE([AC_LANG_SOURCE([[ +#include <time.h> +#include <stdlib.h> + +int +main () +{ + time_t t1 = 853958121; + struct tm *p, s; + putenv ("TZ=GMT0"); + p = localtime (&t1); + s = *p; + putenv ("TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00"); + tzset (); + return (p->tm_year != s.tm_year + || p->tm_mon != s.tm_mon + || p->tm_mday != s.tm_mday + || p->tm_hour != s.tm_hour + || p->tm_min != s.tm_min + || p->tm_sec != s.tm_sec); +} + ]])], + [gl_cv_func_tzset_clobber=no], + [gl_cv_func_tzset_clobber=yes], + [case "$host_os" in + # Guess all is fine on glibc systems. + *-gnu* | gnu*) gl_cv_func_tzset_clobber="guessing no" ;; + # Guess no on native Windows. + mingw*) gl_cv_func_tzset_clobber="guessing no" ;; + # If we don't know, assume the worst. + *) gl_cv_func_tzset_clobber="guessing yes" ;; + esac + ]) + ]) + + AC_DEFINE([HAVE_RUN_TZSET_TEST], [1], + [Define to 1 if you have run the test for working tzset.]) +]) diff --git a/devspec.en_US/project/recutils/m4/unistd_h.m4 b/devspec.en_US/project/recutils/m4/unistd_h.m4 new file mode 100755 index 0000000..a04055d --- /dev/null +++ b/devspec.en_US/project/recutils/m4/unistd_h.m4 @@ -0,0 +1,197 @@ +# unistd_h.m4 serial 74 +dnl Copyright (C) 2006-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Simon Josefsson, Bruno Haible. + +AC_DEFUN([gl_UNISTD_H], +[ + dnl Use AC_REQUIRE here, so that the default behavior below is expanded + dnl once only, before all statements that occur in other macros. + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + + gl_CHECK_NEXT_HEADERS([unistd.h]) + if test $ac_cv_header_unistd_h = yes; then + HAVE_UNISTD_H=1 + else + HAVE_UNISTD_H=0 + fi + AC_SUBST([HAVE_UNISTD_H]) + + dnl Ensure the type pid_t gets defined. + AC_REQUIRE([AC_TYPE_PID_T]) + + dnl Determine WINDOWS_64_BIT_OFF_T. + AC_REQUIRE([gl_TYPE_OFF_T]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[ +#if HAVE_UNISTD_H +# include <unistd.h> +#endif +/* Some systems declare various items in the wrong headers. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include <fcntl.h> +# include <stdio.h> +# include <stdlib.h> +# if defined _WIN32 && ! defined __CYGWIN__ +# include <io.h> +# endif +#endif + ]], [chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat + fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups + gethostname getlogin getlogin_r getpagesize getpass + getusershell setusershell endusershell + group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite + readlink readlinkat rmdir sethostname sleep symlink symlinkat + truncate ttyname_r unlink unlinkat usleep]) +]) + +AC_DEFUN([gl_UNISTD_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_UNISTD_H_DEFAULTS], +[ + GNULIB_CHDIR=0; AC_SUBST([GNULIB_CHDIR]) + GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN]) + GNULIB_CLOSE=0; AC_SUBST([GNULIB_CLOSE]) + GNULIB_DUP=0; AC_SUBST([GNULIB_DUP]) + GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2]) + GNULIB_DUP3=0; AC_SUBST([GNULIB_DUP3]) + GNULIB_ENVIRON=0; AC_SUBST([GNULIB_ENVIRON]) + GNULIB_EUIDACCESS=0; AC_SUBST([GNULIB_EUIDACCESS]) + GNULIB_FACCESSAT=0; AC_SUBST([GNULIB_FACCESSAT]) + GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR]) + GNULIB_FCHOWNAT=0; AC_SUBST([GNULIB_FCHOWNAT]) + GNULIB_FDATASYNC=0; AC_SUBST([GNULIB_FDATASYNC]) + GNULIB_FSYNC=0; AC_SUBST([GNULIB_FSYNC]) + GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE]) + GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD]) + GNULIB_GETDOMAINNAME=0; AC_SUBST([GNULIB_GETDOMAINNAME]) + GNULIB_GETDTABLESIZE=0; AC_SUBST([GNULIB_GETDTABLESIZE]) + GNULIB_GETGROUPS=0; AC_SUBST([GNULIB_GETGROUPS]) + GNULIB_GETHOSTNAME=0; AC_SUBST([GNULIB_GETHOSTNAME]) + GNULIB_GETLOGIN=0; AC_SUBST([GNULIB_GETLOGIN]) + GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R]) + GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE]) + GNULIB_GETPASS=0; AC_SUBST([GNULIB_GETPASS]) + GNULIB_GETUSERSHELL=0; AC_SUBST([GNULIB_GETUSERSHELL]) + GNULIB_GROUP_MEMBER=0; AC_SUBST([GNULIB_GROUP_MEMBER]) + GNULIB_ISATTY=0; AC_SUBST([GNULIB_ISATTY]) + GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN]) + GNULIB_LINK=0; AC_SUBST([GNULIB_LINK]) + GNULIB_LINKAT=0; AC_SUBST([GNULIB_LINKAT]) + GNULIB_LSEEK=0; AC_SUBST([GNULIB_LSEEK]) + GNULIB_PIPE=0; AC_SUBST([GNULIB_PIPE]) + GNULIB_PIPE2=0; AC_SUBST([GNULIB_PIPE2]) + GNULIB_PREAD=0; AC_SUBST([GNULIB_PREAD]) + GNULIB_PWRITE=0; AC_SUBST([GNULIB_PWRITE]) + GNULIB_READ=0; AC_SUBST([GNULIB_READ]) + GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK]) + GNULIB_READLINKAT=0; AC_SUBST([GNULIB_READLINKAT]) + GNULIB_RMDIR=0; AC_SUBST([GNULIB_RMDIR]) + GNULIB_SETHOSTNAME=0; AC_SUBST([GNULIB_SETHOSTNAME]) + GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP]) + GNULIB_SYMLINK=0; AC_SUBST([GNULIB_SYMLINK]) + GNULIB_SYMLINKAT=0; AC_SUBST([GNULIB_SYMLINKAT]) + GNULIB_TRUNCATE=0; AC_SUBST([GNULIB_TRUNCATE]) + GNULIB_TTYNAME_R=0; AC_SUBST([GNULIB_TTYNAME_R]) + GNULIB_UNISTD_H_NONBLOCKING=0; AC_SUBST([GNULIB_UNISTD_H_NONBLOCKING]) + GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE]) + GNULIB_UNLINK=0; AC_SUBST([GNULIB_UNLINK]) + GNULIB_UNLINKAT=0; AC_SUBST([GNULIB_UNLINKAT]) + GNULIB_USLEEP=0; AC_SUBST([GNULIB_USLEEP]) + GNULIB_WRITE=0; AC_SUBST([GNULIB_WRITE]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN]) + HAVE_DUP2=1; AC_SUBST([HAVE_DUP2]) + HAVE_DUP3=1; AC_SUBST([HAVE_DUP3]) + HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS]) + HAVE_FACCESSAT=1; AC_SUBST([HAVE_FACCESSAT]) + HAVE_FCHDIR=1; AC_SUBST([HAVE_FCHDIR]) + HAVE_FCHOWNAT=1; AC_SUBST([HAVE_FCHOWNAT]) + HAVE_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC]) + HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC]) + HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) + HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE]) + HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS]) + HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME]) + HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN]) + HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE]) + HAVE_GETPASS=1; AC_SUBST([HAVE_GETPASS]) + HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER]) + HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN]) + HAVE_LINK=1; AC_SUBST([HAVE_LINK]) + HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT]) + HAVE_PIPE=1; AC_SUBST([HAVE_PIPE]) + HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2]) + HAVE_PREAD=1; AC_SUBST([HAVE_PREAD]) + HAVE_PWRITE=1; AC_SUBST([HAVE_PWRITE]) + HAVE_READLINK=1; AC_SUBST([HAVE_READLINK]) + HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT]) + HAVE_SETHOSTNAME=1; AC_SUBST([HAVE_SETHOSTNAME]) + HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) + HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK]) + HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT]) + HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT]) + HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP]) + HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON]) + HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR]) + HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC]) + HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME]) + HAVE_DECL_GETLOGIN=1; AC_SUBST([HAVE_DECL_GETLOGIN]) + HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R]) + HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE]) + HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL]) + HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME]) + HAVE_DECL_TRUNCATE=1; AC_SUBST([HAVE_DECL_TRUNCATE]) + HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R]) + HAVE_OS_H=0; AC_SUBST([HAVE_OS_H]) + HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H]) + REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN]) + REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE]) + REPLACE_DUP=0; AC_SUBST([REPLACE_DUP]) + REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2]) + REPLACE_FACCESSAT=0; AC_SUBST([REPLACE_FACCESSAT]) + REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT]) + REPLACE_FTRUNCATE=0; AC_SUBST([REPLACE_FTRUNCATE]) + REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) + REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME]) + REPLACE_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE]) + REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R]) + REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS]) + REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) + REPLACE_GETPASS=0; AC_SUBST([REPLACE_GETPASS]) + REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY]) + REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN]) + REPLACE_LINK=0; AC_SUBST([REPLACE_LINK]) + REPLACE_LINKAT=0; AC_SUBST([REPLACE_LINKAT]) + REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK]) + REPLACE_PREAD=0; AC_SUBST([REPLACE_PREAD]) + REPLACE_PWRITE=0; AC_SUBST([REPLACE_PWRITE]) + REPLACE_READ=0; AC_SUBST([REPLACE_READ]) + REPLACE_READLINK=0; AC_SUBST([REPLACE_READLINK]) + REPLACE_READLINKAT=0; AC_SUBST([REPLACE_READLINKAT]) + REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR]) + REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP]) + REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK]) + REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT]) + REPLACE_TRUNCATE=0; AC_SUBST([REPLACE_TRUNCATE]) + REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R]) + REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK]) + REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT]) + REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP]) + REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE]) + UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H]) + UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; + AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS]) +]) diff --git a/devspec.en_US/project/recutils/m4/unlocked-io.m4 b/devspec.en_US/project/recutils/m4/unlocked-io.m4 new file mode 100755 index 0000000..ea55a1a --- /dev/null +++ b/devspec.en_US/project/recutils/m4/unlocked-io.m4 @@ -0,0 +1,41 @@ +# unlocked-io.m4 serial 15 + +# Copyright (C) 1998-2006, 2009-2019 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl From Jim Meyering. +dnl +dnl See if the glibc *_unlocked I/O macros or functions are available. +dnl Use only those *_unlocked macros or functions that are declared +dnl (because some of them were declared in Solaris 2.5.1 but were removed +dnl in Solaris 2.6, whereas we want binaries built on Solaris 2.5.1 to run +dnl on Solaris 2.6). + +AC_DEFUN([gl_FUNC_GLIBC_UNLOCKED_IO], +[ + AC_DEFINE([USE_UNLOCKED_IO], [1], + [Define to 1 if you want getc etc. to use unlocked I/O if available. + Unlocked I/O can improve performance in unithreaded apps, + but it is not safe for multithreaded apps.]) + + dnl Persuade glibc and Solaris <stdio.h> to declare + dnl fgets_unlocked(), fputs_unlocked() etc. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + AC_CHECK_DECLS_ONCE([clearerr_unlocked]) + AC_CHECK_DECLS_ONCE([feof_unlocked]) + AC_CHECK_DECLS_ONCE([ferror_unlocked]) + AC_CHECK_DECLS_ONCE([fflush_unlocked]) + AC_CHECK_DECLS_ONCE([fgets_unlocked]) + AC_CHECK_DECLS_ONCE([fputc_unlocked]) + AC_CHECK_DECLS_ONCE([fputs_unlocked]) + AC_CHECK_DECLS_ONCE([fread_unlocked]) + AC_CHECK_DECLS_ONCE([fwrite_unlocked]) + AC_CHECK_DECLS_ONCE([getc_unlocked]) + AC_CHECK_DECLS_ONCE([getchar_unlocked]) + AC_CHECK_DECLS_ONCE([putc_unlocked]) + AC_CHECK_DECLS_ONCE([putchar_unlocked]) +]) diff --git a/devspec.en_US/project/recutils/m4/vasnprintf-posix.m4 b/devspec.en_US/project/recutils/m4/vasnprintf-posix.m4 new file mode 100755 index 0000000..117cabc --- /dev/null +++ b/devspec.en_US/project/recutils/m4/vasnprintf-posix.m4 @@ -0,0 +1,100 @@ +# vasnprintf-posix.m4 serial 13 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_VASNPRINTF_POSIX], +[ + AC_REQUIRE([gl_PRINTF_SIZES_C99]) + AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) + AC_REQUIRE([gl_PRINTF_INFINITE]) + AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) + AC_REQUIRE([gl_PRINTF_POSITIONS]) + AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) + AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) + AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) + AC_REQUIRE([gl_PRINTF_PRECISION]) + AC_REQUIRE([gl_PRINTF_ENOMEM]) + gl_cv_func_vasnprintf_posix=no + AC_CHECK_FUNCS_ONCE([vasnprintf]) + case "$gl_cv_func_printf_sizes_c99" in + *yes) + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + case "$gl_cv_func_printf_directive_a" in + *yes) + case "$gl_cv_func_printf_directive_f" in + *yes) + case "$gl_cv_func_printf_directive_n" in + *yes) + case "$gl_cv_func_printf_directive_ls" in + *yes) + case "$gl_cv_func_printf_positions" in + *yes) + case "$gl_cv_func_printf_flag_grouping" in + *yes) + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + case "$gl_cv_func_printf_flag_zero" in + *yes) + case "$gl_cv_func_printf_precision" in + *yes) + case "$gl_cv_func_printf_enomem" in + *yes) + if test $ac_cv_func_vasnprintf = yes; then + # vasnprintf exists and is + # already POSIX compliant. + gl_cv_func_vasnprintf_posix=yes + fi + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + if test $gl_cv_func_vasnprintf_posix = no; then + gl_PREREQ_VASNPRINTF_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_DIRECTIVE_A + gl_PREREQ_VASNPRINTF_DIRECTIVE_F + gl_PREREQ_VASNPRINTF_DIRECTIVE_LS + gl_PREREQ_VASNPRINTF_FLAG_GROUPING + gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST + gl_PREREQ_VASNPRINTF_FLAG_ZERO + gl_PREREQ_VASNPRINTF_PRECISION + gl_PREREQ_VASNPRINTF_ENOMEM + gl_REPLACE_VASNPRINTF + fi +]) diff --git a/devspec.en_US/project/recutils/m4/vasnprintf.m4 b/devspec.en_US/project/recutils/m4/vasnprintf.m4 new file mode 100755 index 0000000..b763a3d --- /dev/null +++ b/devspec.en_US/project/recutils/m4/vasnprintf.m4 @@ -0,0 +1,291 @@ +# vasnprintf.m4 serial 36 +dnl Copyright (C) 2002-2004, 2006-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_VASNPRINTF], +[ + AC_CHECK_FUNCS_ONCE([vasnprintf]) + if test $ac_cv_func_vasnprintf = no; then + gl_REPLACE_VASNPRINTF + fi +]) + +AC_DEFUN([gl_REPLACE_VASNPRINTF], +[ + AC_CHECK_FUNCS_ONCE([vasnprintf]) + AC_LIBOBJ([vasnprintf]) + AC_LIBOBJ([printf-args]) + AC_LIBOBJ([printf-parse]) + AC_LIBOBJ([asnprintf]) + if test $ac_cv_func_vasnprintf = yes; then + AC_DEFINE([REPLACE_VASNPRINTF], [1], + [Define if vasnprintf exists but is overridden by gnulib.]) + fi + gl_PREREQ_PRINTF_ARGS + gl_PREREQ_PRINTF_PARSE + gl_PREREQ_VASNPRINTF + gl_PREREQ_ASNPRINTF +]) + +# Prerequisites of lib/printf-args.h, lib/printf-args.c. +AC_DEFUN([gl_PREREQ_PRINTF_ARGS], +[ + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + AC_REQUIRE([gt_TYPE_WCHAR_T]) + AC_REQUIRE([gt_TYPE_WINT_T]) +]) + +# Prerequisites of lib/printf-parse.h, lib/printf-parse.c. +AC_DEFUN([gl_PREREQ_PRINTF_PARSE], +[ + AC_REQUIRE([gl_FEATURES_H]) + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + AC_REQUIRE([gt_TYPE_WCHAR_T]) + AC_REQUIRE([gt_TYPE_WINT_T]) + AC_REQUIRE([AC_TYPE_SIZE_T]) + AC_CHECK_TYPE([ptrdiff_t], , + [AC_DEFINE([ptrdiff_t], [long], + [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) + ]) + AC_REQUIRE([gt_AC_TYPE_INTMAX_T]) +]) + +# Prerequisites of lib/vasnprintf.c. +AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF], +[ + AC_REQUIRE([AC_FUNC_ALLOCA]) + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + AC_REQUIRE([gt_TYPE_WCHAR_T]) + AC_REQUIRE([gt_TYPE_WINT_T]) + AC_CHECK_FUNCS([snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb]) + dnl Use the _snprintf function only if it is declared (because on NetBSD it + dnl is defined as a weak alias of snprintf; we prefer to use the latter). + AC_CHECK_DECLS([_snprintf], , , [[#include <stdio.h>]]) + dnl Knowing DBL_EXPBIT0_WORD and DBL_EXPBIT0_BIT enables an optimization + dnl in the code for NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE. + AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) + dnl We can avoid a lot of code by assuming that snprintf's return value + dnl conforms to ISO C99. So check that. + AC_REQUIRE([gl_SNPRINTF_RETVAL_C99]) + case "$gl_cv_func_snprintf_retval_c99" in + *yes) + AC_DEFINE([HAVE_SNPRINTF_RETVAL_C99], [1], + [Define if the return value of the snprintf function is the number of + of bytes (excluding the terminating NUL) that would have been produced + if the buffer had been large enough.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting 'long double' +# arguments. +AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE], +[ + AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) + case "$gl_cv_func_printf_long_double" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'long double' arguments.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double' +# arguments. +AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE], +[ + AC_REQUIRE([gl_PRINTF_INFINITE]) + case "$gl_cv_func_printf_infinite" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + infinite 'double' arguments.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double' +# arguments. +AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE], +[ + AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) + dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if + dnl NEED_PRINTF_LONG_DOUBLE is already set. + AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE]) + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + infinite 'long double' arguments.]) + ;; + esac + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive. +AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A], +[ + AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) + case "$gl_cv_func_printf_directive_a" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], [1], + [Define if the vasnprintf implementation needs special code for + the 'a' and 'A' directives.]) + AC_CHECK_FUNCS([nl_langinfo]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive. +AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F], +[ + AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) + case "$gl_cv_func_printf_directive_f" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], [1], + [Define if the vasnprintf implementation needs special code for + the 'F' directive.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive. +AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS], +[ + AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) + case "$gl_cv_func_printf_directive_ls" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1], + [Define if the vasnprintf implementation needs special code for + the 'ls' directive.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the ' flag. +AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING], +[ + AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) + case "$gl_cv_func_printf_flag_grouping" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], [1], + [Define if the vasnprintf implementation needs special code for the + ' flag.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag. +AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST], +[ + AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], [1], + [Define if the vasnprintf implementation needs special code for the + '-' flag.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag. +AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO], +[ + AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) + case "$gl_cv_func_printf_flag_zero" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_FLAG_ZERO], [1], + [Define if the vasnprintf implementation needs special code for the + 0 flag.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting large precisions. +AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION], +[ + AC_REQUIRE([gl_PRINTF_PRECISION]) + case "$gl_cv_func_printf_precision" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], [1], + [Define if the vasnprintf implementation needs special code for + supporting large precisions without arbitrary bounds.]) + AC_DEFINE([NEED_PRINTF_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'double' arguments.]) + AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'long double' arguments.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory +# conditions. +AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM], +[ + AC_REQUIRE([gl_PRINTF_ENOMEM]) + case "$gl_cv_func_printf_enomem" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_ENOMEM], [1], + [Define if the vasnprintf implementation needs special code for + surviving out-of-memory conditions.]) + AC_DEFINE([NEED_PRINTF_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'double' arguments.]) + AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'long double' arguments.]) + ;; + esac +]) + +# Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance. +AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS], +[ + AC_REQUIRE([gl_PREREQ_VASNPRINTF]) + gl_PREREQ_VASNPRINTF_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_DIRECTIVE_A + gl_PREREQ_VASNPRINTF_DIRECTIVE_F + gl_PREREQ_VASNPRINTF_DIRECTIVE_LS + gl_PREREQ_VASNPRINTF_FLAG_GROUPING + gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST + gl_PREREQ_VASNPRINTF_FLAG_ZERO + gl_PREREQ_VASNPRINTF_PRECISION + gl_PREREQ_VASNPRINTF_ENOMEM +]) + +# Prerequisites of lib/asnprintf.c. +AC_DEFUN([gl_PREREQ_ASNPRINTF], +[ +]) diff --git a/devspec.en_US/project/recutils/m4/vasprintf-posix.m4 b/devspec.en_US/project/recutils/m4/vasprintf-posix.m4 new file mode 100755 index 0000000..3b8de2a --- /dev/null +++ b/devspec.en_US/project/recutils/m4/vasprintf-posix.m4 @@ -0,0 +1,101 @@ +# vasprintf-posix.m4 serial 13 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_VASPRINTF_POSIX], +[ + AC_REQUIRE([gl_PRINTF_SIZES_C99]) + AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) + AC_REQUIRE([gl_PRINTF_INFINITE]) + AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) + AC_REQUIRE([gl_PRINTF_POSITIONS]) + AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) + AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) + AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) + AC_REQUIRE([gl_PRINTF_PRECISION]) + AC_REQUIRE([gl_PRINTF_ENOMEM]) + gl_cv_func_vasprintf_posix=no + AC_CHECK_FUNCS([vasprintf]) + case "$gl_cv_func_printf_sizes_c99" in + *yes) + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + case "$gl_cv_func_printf_directive_a" in + *yes) + case "$gl_cv_func_printf_directive_f" in + *yes) + case "$gl_cv_func_printf_directive_n" in + *yes) + case "$gl_cv_func_printf_directive_ls" in + *yes) + case "$gl_cv_func_printf_positions" in + *yes) + case "$gl_cv_func_printf_flag_grouping" in + *yes) + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + case "$gl_cv_func_printf_flag_zero" in + *yes) + case "$gl_cv_func_printf_precision" in + *yes) + case "$gl_cv_func_printf_enomem" in + *yes) + if test $ac_cv_func_vasprintf = yes; then + # vasprintf exists and is + # already POSIX compliant. + gl_cv_func_vasprintf_posix=yes + fi + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + if test $gl_cv_func_vasprintf_posix = no; then + gl_PREREQ_VASNPRINTF_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_DIRECTIVE_A + gl_PREREQ_VASNPRINTF_DIRECTIVE_F + gl_PREREQ_VASNPRINTF_DIRECTIVE_LS + gl_PREREQ_VASNPRINTF_FLAG_GROUPING + gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST + gl_PREREQ_VASNPRINTF_FLAG_ZERO + gl_PREREQ_VASNPRINTF_PRECISION + gl_PREREQ_VASNPRINTF_ENOMEM + gl_REPLACE_VASNPRINTF + gl_REPLACE_VASPRINTF + fi +]) diff --git a/devspec.en_US/project/recutils/m4/vasprintf.m4 b/devspec.en_US/project/recutils/m4/vasprintf.m4 new file mode 100755 index 0000000..cd96229 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/vasprintf.m4 @@ -0,0 +1,46 @@ +# vasprintf.m4 serial 6 +dnl Copyright (C) 2002-2003, 2006-2007, 2009-2019 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_VASPRINTF], +[ + AC_CHECK_FUNCS([vasprintf]) + if test $ac_cv_func_vasprintf = no; then + gl_REPLACE_VASPRINTF + fi +]) + +AC_DEFUN([gl_REPLACE_VASPRINTF], +[ + AC_LIBOBJ([vasprintf]) + AC_LIBOBJ([asprintf]) + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + if test $ac_cv_func_vasprintf = yes; then + REPLACE_VASPRINTF=1 + else + HAVE_VASPRINTF=0 + fi + gl_PREREQ_VASPRINTF_H + gl_PREREQ_VASPRINTF + gl_PREREQ_ASPRINTF +]) + +# Prerequisites of the vasprintf portion of lib/stdio.h. +AC_DEFUN([gl_PREREQ_VASPRINTF_H], +[ + dnl Persuade glibc <stdio.h> to declare asprintf() and vasprintf(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) +]) + +# Prerequisites of lib/vasprintf.c. +AC_DEFUN([gl_PREREQ_VASPRINTF], +[ +]) + +# Prerequisites of lib/asprintf.c. +AC_DEFUN([gl_PREREQ_ASPRINTF], +[ +]) diff --git a/devspec.en_US/project/recutils/m4/version-etc.m4 b/devspec.en_US/project/recutils/m4/version-etc.m4 new file mode 100755 index 0000000..4b2c4ff --- /dev/null +++ b/devspec.en_US/project/recutils/m4/version-etc.m4 @@ -0,0 +1,33 @@ +# version-etc.m4 serial 1 +# Copyright (C) 2009-2019 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl $1 - configure flag and define name +dnl $2 - human readable description +m4_define([gl_VERSION_ETC_FLAG], +[dnl + AC_ARG_WITH([$1], [AS_HELP_STRING([--with-$1], [$2])], + [dnl + case $withval in + yes|no) ;; + *) AC_DEFINE_UNQUOTED(AS_TR_CPP([PACKAGE_$1]), ["$withval"], [$2]) ;; + esac + ]) +]) + +AC_DEFUN([gl_VERSION_ETC], +[dnl + gl_VERSION_ETC_FLAG([packager], + [String identifying the packager of this software]) + gl_VERSION_ETC_FLAG([packager-version], + [Packager-specific version information]) + gl_VERSION_ETC_FLAG([packager-bug-reports], + [Packager info for bug reports (URL/e-mail/...)]) + if test "X$with_packager" = "X" && \ + test "X$with_packager_version$with_packager_bug_reports" != "X" + then + AC_MSG_ERROR([The --with-packager-{bug-reports,version} options require --with-packager]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/vfprintf-posix.m4 b/devspec.en_US/project/recutils/m4/vfprintf-posix.m4 new file mode 100755 index 0000000..94d1621 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/vfprintf-posix.m4 @@ -0,0 +1,110 @@ +# vfprintf-posix.m4 serial 14 +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_VFPRINTF_POSIX], +[ + AC_REQUIRE([gl_PRINTF_SIZES_C99]) + AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) + AC_REQUIRE([gl_PRINTF_INFINITE]) + AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) + AC_REQUIRE([gl_PRINTF_POSITIONS]) + AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) + AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) + AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) + AC_REQUIRE([gl_PRINTF_PRECISION]) + AC_REQUIRE([gl_PRINTF_ENOMEM]) + gl_cv_func_vfprintf_posix=no + case "$gl_cv_func_printf_sizes_c99" in + *yes) + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + case "$gl_cv_func_printf_directive_a" in + *yes) + case "$gl_cv_func_printf_directive_f" in + *yes) + case "$gl_cv_func_printf_directive_n" in + *yes) + case "$gl_cv_func_printf_directive_ls" in + *yes) + case "$gl_cv_func_printf_positions" in + *yes) + case "$gl_cv_func_printf_flag_grouping" in + *yes) + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + case "$gl_cv_func_printf_flag_zero" in + *yes) + case "$gl_cv_func_printf_precision" in + *yes) + case "$gl_cv_func_printf_enomem" in + *yes) + # vfprintf exists and is + # already POSIX compliant. + gl_cv_func_vfprintf_posix=yes + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + if test $gl_cv_func_vfprintf_posix = no; then + gl_PREREQ_VASNPRINTF_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_DIRECTIVE_A + gl_PREREQ_VASNPRINTF_DIRECTIVE_F + gl_PREREQ_VASNPRINTF_DIRECTIVE_LS + gl_PREREQ_VASNPRINTF_FLAG_GROUPING + gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST + gl_PREREQ_VASNPRINTF_FLAG_ZERO + gl_PREREQ_VASNPRINTF_PRECISION + gl_PREREQ_VASNPRINTF_ENOMEM + gl_REPLACE_VASNPRINTF + gl_REPLACE_VFPRINTF + fi +]) + +AC_DEFUN([gl_REPLACE_VFPRINTF], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_LIBOBJ([vfprintf]) + REPLACE_VFPRINTF=1 + AC_DEFINE([REPLACE_VFPRINTF_POSIX], [1], + [Define if vfprintf is overridden by a POSIX compliant gnulib implementation.]) + gl_PREREQ_VFPRINTF +]) + +AC_DEFUN([gl_PREREQ_VFPRINTF], [:]) diff --git a/devspec.en_US/project/recutils/m4/wait-process.m4 b/devspec.en_US/project/recutils/m4/wait-process.m4 new file mode 100755 index 0000000..8d579eb --- /dev/null +++ b/devspec.en_US/project/recutils/m4/wait-process.m4 @@ -0,0 +1,12 @@ +# wait-process.m4 serial 6 +dnl Copyright (C) 2003, 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_WAIT_PROCESS], +[ + dnl Prerequisites of lib/wait-process.c. + AC_REQUIRE([gt_TYPE_SIG_ATOMIC_T]) + AC_CHECK_FUNCS([waitid]) +]) diff --git a/devspec.en_US/project/recutils/m4/waitpid.m4 b/devspec.en_US/project/recutils/m4/waitpid.m4 new file mode 100755 index 0000000..ead350c --- /dev/null +++ b/devspec.en_US/project/recutils/m4/waitpid.m4 @@ -0,0 +1,14 @@ +# waitpid.m4 serial 2 +dnl Copyright (C) 2010-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_WAITPID], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + HAVE_WAITPID=1 + case $host_os in + mingw*) HAVE_WAITPID=0 ;; + esac +]) diff --git a/devspec.en_US/project/recutils/m4/warn-on-use.m4 b/devspec.en_US/project/recutils/m4/warn-on-use.m4 new file mode 100755 index 0000000..7ebe2d3 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/warn-on-use.m4 @@ -0,0 +1,51 @@ +# warn-on-use.m4 serial 6 +dnl Copyright (C) 2010-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES) +# --------------------------------------- +# If the module 'posixcheck' is in use: +# +# For each whitespace-separated element in the list of NAMES, define +# HAVE_RAW_DECL_name if the function has a declaration among INCLUDES +# even after being undefined as a macro. +# +# See warn-on-use.h for some hints on how to poison function names, as +# well as ideas on poisoning global variables and macros. NAMES may +# include global variables, but remember that only functions work with +# _GL_WARN_ON_USE. Typically, INCLUDES only needs to list a single +# header, but if the replacement header pulls in other headers because +# some systems declare functions in the wrong header, then INCLUDES +# should do likewise. +# +# It is generally safe to assume declarations for functions declared +# in the intersection of C89 and C11 (such as printf) without +# needing gl_WARN_ON_USE_PREPARE. +AC_DEFUN([gl_WARN_ON_USE_PREPARE], +[ + m4_ifdef([gl_POSIXCHECK], + [m4_foreach_w([gl_decl], [$2], + [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])), + [Define to 1 if ]m4_defn([gl_decl])[ is declared even after + undefining macros.])])dnl +dnl FIXME: gl_Symbol must be used unquoted until we can assume +dnl autoconf 2.64 or newer. + for gl_func in m4_flatten([$2]); do + AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl + AC_CACHE_CHECK([whether $gl_func is declared without a macro], + gl_Symbol, + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1], +[@%:@undef $gl_func + (void) $gl_func;])], + [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])]) + AS_VAR_IF(gl_Symbol, [yes], + [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1]) + dnl shortcut - if the raw declaration exists, then set a cache + dnl variable to allow skipping any later AC_CHECK_DECL efforts + eval ac_cv_have_decl_$gl_func=yes]) + AS_VAR_POPDEF([gl_Symbol])dnl + done + ]) +]) diff --git a/devspec.en_US/project/recutils/m4/wchar_h.m4 b/devspec.en_US/project/recutils/m4/wchar_h.m4 new file mode 100755 index 0000000..cd20e7a --- /dev/null +++ b/devspec.en_US/project/recutils/m4/wchar_h.m4 @@ -0,0 +1,240 @@ +dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues. + +dnl Copyright (C) 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Eric Blake. + +# wchar_h.m4 serial 43 + +AC_DEFUN([gl_WCHAR_H], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + AC_REQUIRE([gl_WCHAR_H_INLINE_OK]) + dnl Prepare for creating substitute <wchar.h>. + dnl Check for <wchar.h> (missing in Linux uClibc when built without wide + dnl character support). + dnl <wchar.h> is always overridden, because of GNULIB_POSIXCHECK. + gl_CHECK_NEXT_HEADERS([wchar.h]) + if test $ac_cv_header_wchar_h = yes; then + HAVE_WCHAR_H=1 + else + HAVE_WCHAR_H=0 + fi + AC_SUBST([HAVE_WCHAR_H]) + + AC_REQUIRE([gl_FEATURES_H]) + + AC_REQUIRE([gt_TYPE_WINT_T]) + if test $gt_cv_c_wint_t = yes; then + HAVE_WINT_T=1 + else + HAVE_WINT_T=0 + fi + AC_SUBST([HAVE_WINT_T]) + + AC_REQUIRE([gl_TYPE_WINT_T_PREREQ]) + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include <stddef.h> +# include <stdio.h> +# include <time.h> +#endif +#include <wchar.h> + ]], + [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb + wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset + wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp + wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr + wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth wcsftime + ]) +]) + +dnl Check whether <wchar.h> is usable at all. +AC_DEFUN([gl_WCHAR_H_INLINE_OK], +[ + dnl Test whether <wchar.h> suffers due to the transition from '__inline' to + dnl 'gnu_inline'. See <https://sourceware.org/bugzilla/show_bug.cgi?id=4022> + dnl and <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary, + dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and + dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>. + AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly], + [gl_cv_header_wchar_h_correct_inline], + [gl_cv_header_wchar_h_correct_inline=yes + AC_LANG_CONFTEST([ + AC_LANG_SOURCE([[#define wcstod renamed_wcstod +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +extern int zero (void); +int main () { return zero(); } +]])]) + dnl Do not rename the object file from conftest.$ac_objext to + dnl conftest1.$ac_objext, as this will cause the link to fail on + dnl z/OS when using the XPLINK object format (due to duplicate + dnl CSECT names). Instead, temporarily redefine $ac_compile so + dnl that the object file has the latter name from the start. + save_ac_compile="$ac_compile" + ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/` + if echo '#include "conftest.c"' >conftest1.c && + AC_TRY_EVAL([ac_compile]); then + AC_LANG_CONFTEST([ + AC_LANG_SOURCE([[#define wcstod renamed_wcstod +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int zero (void) { return 0; } +]])]) + dnl See note above about renaming object files. + ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/` + if echo '#include "conftest.c"' >conftest2.c && + AC_TRY_EVAL([ac_compile]); then + if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then + : + else + gl_cv_header_wchar_h_correct_inline=no + fi + fi + fi + ac_compile="$save_ac_compile" + rm -f conftest[12].c conftest[12].$ac_objext conftest$ac_exeext + ]) + if test $gl_cv_header_wchar_h_correct_inline = no; then + AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). +This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in +C99 mode. You have four options: + - Add the flag -fgnu89-inline to CC and reconfigure, or + - Fix your include files, using parts of + <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or + - Use a gcc version older than 4.3, or + - Don't use the flags -std=c99 or -std=gnu99. +Configuration aborted.]) + fi +]) + +AC_DEFUN([gl_WCHAR_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_WCHAR_H_DEFAULTS], +[ + GNULIB_BTOWC=0; AC_SUBST([GNULIB_BTOWC]) + GNULIB_WCTOB=0; AC_SUBST([GNULIB_WCTOB]) + GNULIB_MBSINIT=0; AC_SUBST([GNULIB_MBSINIT]) + GNULIB_MBRTOWC=0; AC_SUBST([GNULIB_MBRTOWC]) + GNULIB_MBRLEN=0; AC_SUBST([GNULIB_MBRLEN]) + GNULIB_MBSRTOWCS=0; AC_SUBST([GNULIB_MBSRTOWCS]) + GNULIB_MBSNRTOWCS=0; AC_SUBST([GNULIB_MBSNRTOWCS]) + GNULIB_WCRTOMB=0; AC_SUBST([GNULIB_WCRTOMB]) + GNULIB_WCSRTOMBS=0; AC_SUBST([GNULIB_WCSRTOMBS]) + GNULIB_WCSNRTOMBS=0; AC_SUBST([GNULIB_WCSNRTOMBS]) + GNULIB_WCWIDTH=0; AC_SUBST([GNULIB_WCWIDTH]) + GNULIB_WMEMCHR=0; AC_SUBST([GNULIB_WMEMCHR]) + GNULIB_WMEMCMP=0; AC_SUBST([GNULIB_WMEMCMP]) + GNULIB_WMEMCPY=0; AC_SUBST([GNULIB_WMEMCPY]) + GNULIB_WMEMMOVE=0; AC_SUBST([GNULIB_WMEMMOVE]) + GNULIB_WMEMSET=0; AC_SUBST([GNULIB_WMEMSET]) + GNULIB_WCSLEN=0; AC_SUBST([GNULIB_WCSLEN]) + GNULIB_WCSNLEN=0; AC_SUBST([GNULIB_WCSNLEN]) + GNULIB_WCSCPY=0; AC_SUBST([GNULIB_WCSCPY]) + GNULIB_WCPCPY=0; AC_SUBST([GNULIB_WCPCPY]) + GNULIB_WCSNCPY=0; AC_SUBST([GNULIB_WCSNCPY]) + GNULIB_WCPNCPY=0; AC_SUBST([GNULIB_WCPNCPY]) + GNULIB_WCSCAT=0; AC_SUBST([GNULIB_WCSCAT]) + GNULIB_WCSNCAT=0; AC_SUBST([GNULIB_WCSNCAT]) + GNULIB_WCSCMP=0; AC_SUBST([GNULIB_WCSCMP]) + GNULIB_WCSNCMP=0; AC_SUBST([GNULIB_WCSNCMP]) + GNULIB_WCSCASECMP=0; AC_SUBST([GNULIB_WCSCASECMP]) + GNULIB_WCSNCASECMP=0; AC_SUBST([GNULIB_WCSNCASECMP]) + GNULIB_WCSCOLL=0; AC_SUBST([GNULIB_WCSCOLL]) + GNULIB_WCSXFRM=0; AC_SUBST([GNULIB_WCSXFRM]) + GNULIB_WCSDUP=0; AC_SUBST([GNULIB_WCSDUP]) + GNULIB_WCSCHR=0; AC_SUBST([GNULIB_WCSCHR]) + GNULIB_WCSRCHR=0; AC_SUBST([GNULIB_WCSRCHR]) + GNULIB_WCSCSPN=0; AC_SUBST([GNULIB_WCSCSPN]) + GNULIB_WCSSPN=0; AC_SUBST([GNULIB_WCSSPN]) + GNULIB_WCSPBRK=0; AC_SUBST([GNULIB_WCSPBRK]) + GNULIB_WCSSTR=0; AC_SUBST([GNULIB_WCSSTR]) + GNULIB_WCSTOK=0; AC_SUBST([GNULIB_WCSTOK]) + GNULIB_WCSWIDTH=0; AC_SUBST([GNULIB_WCSWIDTH]) + GNULIB_WCSFTIME=0; AC_SUBST([GNULIB_WCSFTIME]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC]) + HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT]) + HAVE_MBRTOWC=1; AC_SUBST([HAVE_MBRTOWC]) + HAVE_MBRLEN=1; AC_SUBST([HAVE_MBRLEN]) + HAVE_MBSRTOWCS=1; AC_SUBST([HAVE_MBSRTOWCS]) + HAVE_MBSNRTOWCS=1; AC_SUBST([HAVE_MBSNRTOWCS]) + HAVE_WCRTOMB=1; AC_SUBST([HAVE_WCRTOMB]) + HAVE_WCSRTOMBS=1; AC_SUBST([HAVE_WCSRTOMBS]) + HAVE_WCSNRTOMBS=1; AC_SUBST([HAVE_WCSNRTOMBS]) + HAVE_WMEMCHR=1; AC_SUBST([HAVE_WMEMCHR]) + HAVE_WMEMCMP=1; AC_SUBST([HAVE_WMEMCMP]) + HAVE_WMEMCPY=1; AC_SUBST([HAVE_WMEMCPY]) + HAVE_WMEMMOVE=1; AC_SUBST([HAVE_WMEMMOVE]) + HAVE_WMEMSET=1; AC_SUBST([HAVE_WMEMSET]) + HAVE_WCSLEN=1; AC_SUBST([HAVE_WCSLEN]) + HAVE_WCSNLEN=1; AC_SUBST([HAVE_WCSNLEN]) + HAVE_WCSCPY=1; AC_SUBST([HAVE_WCSCPY]) + HAVE_WCPCPY=1; AC_SUBST([HAVE_WCPCPY]) + HAVE_WCSNCPY=1; AC_SUBST([HAVE_WCSNCPY]) + HAVE_WCPNCPY=1; AC_SUBST([HAVE_WCPNCPY]) + HAVE_WCSCAT=1; AC_SUBST([HAVE_WCSCAT]) + HAVE_WCSNCAT=1; AC_SUBST([HAVE_WCSNCAT]) + HAVE_WCSCMP=1; AC_SUBST([HAVE_WCSCMP]) + HAVE_WCSNCMP=1; AC_SUBST([HAVE_WCSNCMP]) + HAVE_WCSCASECMP=1; AC_SUBST([HAVE_WCSCASECMP]) + HAVE_WCSNCASECMP=1; AC_SUBST([HAVE_WCSNCASECMP]) + HAVE_WCSCOLL=1; AC_SUBST([HAVE_WCSCOLL]) + HAVE_WCSXFRM=1; AC_SUBST([HAVE_WCSXFRM]) + HAVE_WCSDUP=1; AC_SUBST([HAVE_WCSDUP]) + HAVE_WCSCHR=1; AC_SUBST([HAVE_WCSCHR]) + HAVE_WCSRCHR=1; AC_SUBST([HAVE_WCSRCHR]) + HAVE_WCSCSPN=1; AC_SUBST([HAVE_WCSCSPN]) + HAVE_WCSSPN=1; AC_SUBST([HAVE_WCSSPN]) + HAVE_WCSPBRK=1; AC_SUBST([HAVE_WCSPBRK]) + HAVE_WCSSTR=1; AC_SUBST([HAVE_WCSSTR]) + HAVE_WCSTOK=1; AC_SUBST([HAVE_WCSTOK]) + HAVE_WCSWIDTH=1; AC_SUBST([HAVE_WCSWIDTH]) + HAVE_WCSFTIME=1; AC_SUBST([HAVE_WCSFTIME]) + HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB]) + HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH]) + REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T]) + REPLACE_BTOWC=0; AC_SUBST([REPLACE_BTOWC]) + REPLACE_WCTOB=0; AC_SUBST([REPLACE_WCTOB]) + REPLACE_MBSINIT=0; AC_SUBST([REPLACE_MBSINIT]) + REPLACE_MBRTOWC=0; AC_SUBST([REPLACE_MBRTOWC]) + REPLACE_MBRLEN=0; AC_SUBST([REPLACE_MBRLEN]) + REPLACE_MBSRTOWCS=0; AC_SUBST([REPLACE_MBSRTOWCS]) + REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS]) + REPLACE_WCRTOMB=0; AC_SUBST([REPLACE_WCRTOMB]) + REPLACE_WCSRTOMBS=0; AC_SUBST([REPLACE_WCSRTOMBS]) + REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS]) + REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH]) + REPLACE_WCSWIDTH=0; AC_SUBST([REPLACE_WCSWIDTH]) + REPLACE_WCSFTIME=0; AC_SUBST([REPLACE_WCSFTIME]) +]) diff --git a/devspec.en_US/project/recutils/m4/wchar_t.m4 b/devspec.en_US/project/recutils/m4/wchar_t.m4 new file mode 100755 index 0000000..5db5815 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/wchar_t.m4 @@ -0,0 +1,24 @@ +# wchar_t.m4 serial 4 (gettext-0.18.2) +dnl Copyright (C) 2002-2003, 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether <stddef.h> has the 'wchar_t' type. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_WCHAR_T], +[ + AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <stddef.h> + wchar_t foo = (wchar_t)'\0';]], + [[]])], + [gt_cv_c_wchar_t=yes], + [gt_cv_c_wchar_t=no])]) + if test $gt_cv_c_wchar_t = yes; then + AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.]) + fi +]) diff --git a/devspec.en_US/project/recutils/m4/wcrtomb.m4 b/devspec.en_US/project/recutils/m4/wcrtomb.m4 new file mode 100755 index 0000000..f4f37f5 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/wcrtomb.m4 @@ -0,0 +1,114 @@ +# wcrtomb.m4 serial 13 +dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_WCRTOMB], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + gl_MBSTATE_T_BROKEN + + AC_CHECK_FUNCS_ONCE([wcrtomb]) + if test $ac_cv_func_wcrtomb = no; then + HAVE_WCRTOMB=0 + AC_CHECK_DECLS([wcrtomb],,, [[ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +]]) + if test $ac_cv_have_decl_wcrtomb = yes; then + dnl On Minix 3.1.8, the system's <wchar.h> declares wcrtomb() although + dnl it does not have the function. Avoid a collision with gnulib's + dnl replacement. + REPLACE_WCRTOMB=1 + fi + else + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_WCRTOMB=1 + else + dnl On AIX 4.3, OSF/1 5.1 and Solaris <= 11.3, wcrtomb (NULL, 0, NULL) + dnl sometimes returns 0 instead of 1. + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_FR]) + AC_REQUIRE([gt_LOCALE_FR_UTF8]) + AC_REQUIRE([gt_LOCALE_JA]) + AC_REQUIRE([gt_LOCALE_ZH_CN]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether wcrtomb return value is correct], + [gl_cv_func_wcrtomb_retval], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on AIX 4, OSF/1 and Solaris. + aix4* | osf* | solaris*) gl_cv_func_wcrtomb_retval="guessing no" ;; + # Guess yes on native Windows. + mingw*) gl_cv_func_wcrtomb_retval="guessing yes" ;; + # Guess yes otherwise. + *) gl_cv_func_wcrtomb_retval="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + int result = 0; + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + result |= 1; + } + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + result |= 2; + } + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + result |= 4; + } + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + result |= 8; + } + return result; +}]])], + [gl_cv_func_wcrtomb_retval=yes], + [gl_cv_func_wcrtomb_retval=no], + [:]) + fi + ]) + case "$gl_cv_func_wcrtomb_retval" in + *yes) ;; + *) REPLACE_WCRTOMB=1 ;; + esac + fi + fi +]) + +# Prerequisites of lib/wcrtomb.c. +AC_DEFUN([gl_PREREQ_WCRTOMB], [ + : +]) diff --git a/devspec.en_US/project/recutils/m4/wctob.m4 b/devspec.en_US/project/recutils/m4/wctob.m4 new file mode 100755 index 0000000..05c1237 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/wctob.m4 @@ -0,0 +1,130 @@ +# wctob.m4 serial 11 +dnl Copyright (C) 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_WCTOB], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + AC_CHECK_FUNCS_ONCE([wctob]) + if test $ac_cv_func_wctob = no; then + HAVE_WCTOB=0 + HAVE_DECL_WCTOB=0 + else + HAVE_WCTOB=1 + + dnl Solaris 9 has the wctob() function but it does not work. + dnl Cygwin 1.7.2 has the wctob() function but it clobbers caller-owned + dnl registers, see <https://cygwin.com/ml/cygwin/2010-05/msg00015.html>. + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_FR]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether wctob works], + [gl_cv_func_wctob_works], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on Solaris <= 9 and Cygwin. + solaris2.[1-9] | solaris2.[1-9].* | cygwin*) + gl_cv_func_wctob_works="guessing no" ;; + # Guess no on native Windows. + mingw*) + gl_cv_func_wctob_works="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_wctob_works="guessing yes" ;; + esac +changequote([,])dnl + case "$host_os" in + cygwin*) + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <locale.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> + +register long global __asm__ ("%ebx"); + +int main () +{ + setlocale (LC_ALL, "en_US.UTF-8"); + + global = 0x12345678; + if (wctob (0x00FC) != -1) + return 1; + if (global != 0x12345678) + return 2; + return 0; +}]])], + [:], + [gl_cv_func_wctob_works=no], + [:]) + ;; + esac + if test "$gl_cv_func_wctob_works" != no && test $LOCALE_FR != none; then + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include <locale.h> +#include <string.h> +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + wchar_t wc; + + if (mbtowc (&wc, "\374", 1) == 1) + if (wctob (wc) != (unsigned char) '\374') + return 1; + } + return 0; +}]])], + [gl_cv_func_wctob_works=yes], + [gl_cv_func_wctob_works=no], + [:]) + fi + ]) + case "$gl_cv_func_wctob_works" in + *yes) ;; + *) REPLACE_WCTOB=1 ;; + esac + if test $REPLACE_WCTOB = 0; then + + dnl IRIX 6.5 has the wctob() function but does not declare it. + AC_CHECK_DECLS([wctob], [], [], [[ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included + before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +]]) + if test $ac_cv_have_decl_wctob != yes; then + HAVE_DECL_WCTOB=0 + fi + fi + fi +]) + +# Prerequisites of lib/wctob.c. +AC_DEFUN([gl_PREREQ_WCTOB], [ + : +]) diff --git a/devspec.en_US/project/recutils/m4/wctomb.m4 b/devspec.en_US/project/recutils/m4/wctomb.m4 new file mode 100755 index 0000000..79d29f1 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/wctomb.m4 @@ -0,0 +1,19 @@ +# wctomb.m4 serial 2 +dnl Copyright (C) 2011-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_WCTOMB], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + + if false; then + REPLACE_WCTOMB=1 + fi +]) + +# Prerequisites of lib/wctomb.c. +AC_DEFUN([gl_PREREQ_WCTOMB], [ + : +]) diff --git a/devspec.en_US/project/recutils/m4/wctype_h.m4 b/devspec.en_US/project/recutils/m4/wctype_h.m4 new file mode 100755 index 0000000..6903d75 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/wctype_h.m4 @@ -0,0 +1,212 @@ +# wctype_h.m4 serial 21 + +dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it. + +dnl Copyright (C) 2006-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Paul Eggert. + +AC_DEFUN([gl_WCTYPE_H], +[ + AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CHECK_FUNCS_ONCE([iswcntrl]) + if test $ac_cv_func_iswcntrl = yes; then + HAVE_ISWCNTRL=1 + else + HAVE_ISWCNTRL=0 + fi + AC_SUBST([HAVE_ISWCNTRL]) + + AC_REQUIRE([gt_TYPE_WINT_T]) + if test $gt_cv_c_wint_t = yes; then + HAVE_WINT_T=1 + else + HAVE_WINT_T=0 + fi + AC_SUBST([HAVE_WINT_T]) + + AC_REQUIRE([gl_TYPE_WINT_T_PREREQ]) + + gl_CHECK_NEXT_HEADERS([wctype.h]) + if test $ac_cv_header_wctype_h = yes; then + if test $ac_cv_func_iswcntrl = yes; then + dnl Linux libc5 has an iswprint function that returns 0 for all arguments. + dnl The other functions are likely broken in the same way. + AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ + /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be + included before <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> + must be included before <wchar.h>. */ + #include <stddef.h> + #include <stdio.h> + #include <time.h> + #include <wchar.h> + #include <wctype.h> + int main () { return iswprint ('x') == 0; } + ]])], + [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no], + [dnl Guess no on Linux libc5, yes otherwise. + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h> + #if __GNU_LIBRARY__ == 1 + Linux libc5 i18n is broken. + #endif]], [])], + [gl_cv_func_iswcntrl_works="guessing yes"], + [gl_cv_func_iswcntrl_works="guessing no"]) + ]) + ]) + fi + HAVE_WCTYPE_H=1 + else + HAVE_WCTYPE_H=0 + fi + AC_SUBST([HAVE_WCTYPE_H]) + + case "$gl_cv_func_iswcntrl_works" in + *yes) REPLACE_ISWCNTRL=0 ;; + *) REPLACE_ISWCNTRL=1 ;; + esac + AC_SUBST([REPLACE_ISWCNTRL]) + + if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then + dnl Redefine all of iswcntrl, ..., iswxdigit in <wctype.h>. + : + fi + + if test $REPLACE_ISWCNTRL = 1; then + REPLACE_TOWLOWER=1 + else + AC_CHECK_FUNCS([towlower]) + if test $ac_cv_func_towlower = yes; then + REPLACE_TOWLOWER=0 + else + AC_CHECK_DECLS([towlower],,, + [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be + included before <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> + must be included before <wchar.h>. */ + #include <stddef.h> + #include <stdio.h> + #include <time.h> + #include <wchar.h> + #if HAVE_WCTYPE_H + # include <wctype.h> + #endif + ]]) + if test $ac_cv_have_decl_towlower = yes; then + dnl On Minix 3.1.8, the system's <wctype.h> declares towlower() and + dnl towupper() although it does not have the functions. Avoid a + dnl collision with gnulib's replacement. + REPLACE_TOWLOWER=1 + else + REPLACE_TOWLOWER=0 + fi + fi + fi + AC_SUBST([REPLACE_TOWLOWER]) + + if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then + dnl Redefine towlower, towupper in <wctype.h>. + : + fi + + dnl We assume that the wctype() and iswctype() functions exist if and only + dnl if the type wctype_t is defined in <wchar.h> or in <wctype.h> if that + dnl exists. + dnl HP-UX 11.00 declares all these in <wchar.h> and lacks <wctype.h>. + AC_CACHE_CHECK([for wctype_t], [gl_cv_type_wctype_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be + included before <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> + must be included before <wchar.h>. */ + #include <stddef.h> + #include <stdio.h> + #include <time.h> + #include <wchar.h> + #if HAVE_WCTYPE_H + # include <wctype.h> + #endif + wctype_t a; + ]], + [[]])], + [gl_cv_type_wctype_t=yes], + [gl_cv_type_wctype_t=no]) + ]) + if test $gl_cv_type_wctype_t = no; then + HAVE_WCTYPE_T=0 + fi + + dnl We assume that the wctrans() and towctrans() functions exist if and only + dnl if the type wctrans_t is defined in <wctype.h>. + AC_CACHE_CHECK([for wctrans_t], [gl_cv_type_wctrans_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be + included before <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> + must be included before <wchar.h>. */ + #include <stddef.h> + #include <stdio.h> + #include <time.h> + #include <wchar.h> + #include <wctype.h> + wctrans_t a; + ]], + [[]])], + [gl_cv_type_wctrans_t=yes], + [gl_cv_type_wctrans_t=no]) + ]) + if test $gl_cv_type_wctrans_t = no; then + HAVE_WCTRANS_T=0 + fi + + dnl Check for declarations of anything we want to poison if the + dnl corresponding gnulib module is not in use. + gl_WARN_ON_USE_PREPARE([[ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include <stddef.h> +# include <stdio.h> +# include <time.h> +# include <wchar.h> +#endif +#include <wctype.h> + ]], + [wctype iswctype wctrans towctrans + ]) +]) + +AC_DEFUN([gl_WCTYPE_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) + gl_MODULE_INDICATOR_SET_VARIABLE([$1]) + dnl Define it also as a C macro, for the benefit of the unit tests. + gl_MODULE_INDICATOR_FOR_TESTS([$1]) +]) + +AC_DEFUN([gl_WCTYPE_H_DEFAULTS], +[ + GNULIB_ISWBLANK=0; AC_SUBST([GNULIB_ISWBLANK]) + GNULIB_WCTYPE=0; AC_SUBST([GNULIB_WCTYPE]) + GNULIB_ISWCTYPE=0; AC_SUBST([GNULIB_ISWCTYPE]) + GNULIB_WCTRANS=0; AC_SUBST([GNULIB_WCTRANS]) + GNULIB_TOWCTRANS=0; AC_SUBST([GNULIB_TOWCTRANS]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_ISWBLANK=1; AC_SUBST([HAVE_ISWBLANK]) + HAVE_WCTYPE_T=1; AC_SUBST([HAVE_WCTYPE_T]) + HAVE_WCTRANS_T=1; AC_SUBST([HAVE_WCTRANS_T]) + REPLACE_ISWBLANK=0; AC_SUBST([REPLACE_ISWBLANK]) +]) diff --git a/devspec.en_US/project/recutils/m4/wint_t.m4 b/devspec.en_US/project/recutils/m4/wint_t.m4 new file mode 100755 index 0000000..61e8a23 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/wint_t.m4 @@ -0,0 +1,74 @@ +# wint_t.m4 serial 7 +dnl Copyright (C) 2003, 2007-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether <wchar.h> has the 'wint_t' type and whether gnulib's +dnl <wchar.h> or <wctype.h> would, if present, override 'wint_t'. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_WINT_T], +[ + AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included + before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> + wint_t foo = (wchar_t)'\0';]], + [[]])], + [gt_cv_c_wint_t=yes], + [gt_cv_c_wint_t=no])]) + if test $gt_cv_c_wint_t = yes; then + AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.]) + + dnl Determine whether gnulib's <wchar.h> or <wctype.h> would, if present, + dnl override 'wint_t'. + AC_CACHE_CHECK([whether wint_t is too small], + [gl_cv_type_wint_t_too_small], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#if !(defined __GLIBC__ && !defined __UCLIBC__) +# include <stddef.h> +# include <stdio.h> +# include <time.h> +#endif +#include <wchar.h> + int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; + ]])], + [gl_cv_type_wint_t_too_small=no], + [gl_cv_type_wint_t_too_small=yes])]) + if test $gl_cv_type_wint_t_too_small = yes; then + GNULIB_OVERRIDES_WINT_T=1 + else + GNULIB_OVERRIDES_WINT_T=0 + fi + else + GNULIB_OVERRIDES_WINT_T=0 + fi + AC_SUBST([GNULIB_OVERRIDES_WINT_T]) +]) + +dnl Prerequisites of the 'wint_t' override. +AC_DEFUN([gl_TYPE_WINT_T_PREREQ], +[ + AC_CHECK_HEADERS_ONCE([crtdefs.h]) + if test $ac_cv_header_crtdefs_h = yes; then + HAVE_CRTDEFS_H=1 + else + HAVE_CRTDEFS_H=0 + fi + AC_SUBST([HAVE_CRTDEFS_H]) +]) diff --git a/devspec.en_US/project/recutils/m4/xalloc.m4 b/devspec.en_US/project/recutils/m4/xalloc.m4 new file mode 100755 index 0000000..dfff943 --- /dev/null +++ b/devspec.en_US/project/recutils/m4/xalloc.m4 @@ -0,0 +1,7 @@ +# xalloc.m4 serial 18 +dnl Copyright (C) 2002-2006, 2009-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_XALLOC], [:]) diff --git a/devspec.en_US/project/recutils/m4/xsize.m4 b/devspec.en_US/project/recutils/m4/xsize.m4 new file mode 100755 index 0000000..f2898ba --- /dev/null +++ b/devspec.en_US/project/recutils/m4/xsize.m4 @@ -0,0 +1,12 @@ +# xsize.m4 serial 5 +dnl Copyright (C) 2003-2004, 2008-2019 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_XSIZE], +[ + dnl Prerequisites of lib/xsize.h. + AC_REQUIRE([gl_SIZE_MAX]) + AC_CHECK_HEADERS([stdint.h]) +]) diff --git a/devspec.en_US/project/recutils/maint.mk b/devspec.en_US/project/recutils/maint.mk new file mode 100755 index 0000000..19757fc --- /dev/null +++ b/devspec.en_US/project/recutils/maint.mk @@ -0,0 +1,1712 @@ +# -*-Makefile-*- +# This Makefile fragment tries to be general-purpose enough to be +# used by many projects via the gnulib maintainer-makefile module. + +## Copyright (C) 2001-2019 Free Software Foundation, Inc. +## +## This program is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see <https://www.gnu.org/licenses/>. + +# This is reported not to work with make-3.79.1 +# ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) +ME := maint.mk + +# Helper variables. +_empty = +_sp = $(_empty) $(_empty) + +# _equal,S1,S2 +# ------------ +# If S1 == S2, return S1, otherwise the empty string. +_equal = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1))) + +# member-check,VARIABLE,VALID-VALUES +# ---------------------------------- +# Check that $(VARIABLE) is in the space-separated list of VALID-VALUES, and +# return it. Die otherwise. +member-check = \ + $(strip \ + $(if $($(1)), \ + $(if $(findstring $(_sp),$($(1))), \ + $(error invalid $(1): '$($(1))', expected $(2)), \ + $(or $(findstring $(_sp)$($(1))$(_sp),$(_sp)$(2)$(_sp)), \ + $(error invalid $(1): '$($(1))', expected $(2)))), \ + $(error $(1) undefined))) + +# Do not save the original name or timestamp in the .tar.gz file. +# Use --rsyncable if available. +gzip_rsyncable := \ + $(shell gzip --help 2>/dev/null|$(GREP) rsyncable >/dev/null \ + && printf %s --rsyncable) +GZIP_ENV = '--no-name --best $(gzip_rsyncable)' + +GIT = git +VC = $(GIT) + +VC_LIST = $(srcdir)/$(_build-aux)/vc-list-files -C $(srcdir) + +# You can override this variable in cfg.mk if your gnulib submodule lives +# in a different location. +gnulib_dir ?= $(srcdir)/gnulib + +# You can override this variable in cfg.mk to set your own regexp +# matching files to ignore. +VC_LIST_ALWAYS_EXCLUDE_REGEX ?= ^$$ + +# This is to preprocess robustly the output of $(VC_LIST), so that even +# when $(srcdir) is a pathological name like "....", the leading sed command +# removes only the intended prefix. +_dot_escaped_srcdir = $(subst .,\.,$(srcdir)) + +# Post-process $(VC_LIST) output, prepending $(srcdir)/, but only +# when $(srcdir) is not ".". +ifeq ($(srcdir),.) + _prepend_srcdir_prefix = +else + _prepend_srcdir_prefix = | $(SED) 's|^|$(srcdir)/|' +endif + +# In order to be able to consistently filter "."-relative names, +# (i.e., with no $(srcdir) prefix), this definition is careful to +# remove any $(srcdir) prefix, and to restore what it removes. +_sc_excl = \ + $(or $(exclude_file_name_regexp--$@),^$$) +VC_LIST_EXCEPT = \ + $(VC_LIST) | $(SED) 's|^$(_dot_escaped_srcdir)/||' \ + | if test -f $(srcdir)/.x-$@; then $(GREP) -vEf $(srcdir)/.x-$@; \ + else $(GREP) -Ev -e "$${VC_LIST_EXCEPT_DEFAULT-ChangeLog}"; fi \ + | $(GREP) -Ev -e '($(VC_LIST_ALWAYS_EXCLUDE_REGEX)|$(_sc_excl))' \ + $(_prepend_srcdir_prefix) + +ifeq ($(origin prev_version_file), undefined) + prev_version_file = $(srcdir)/.prev-version +endif + +PREV_VERSION := $(shell cat $(prev_version_file) 2>/dev/null) +VERSION_REGEXP = $(subst .,\.,$(VERSION)) +PREV_VERSION_REGEXP = $(subst .,\.,$(PREV_VERSION)) + +ifeq ($(VC),$(GIT)) + this-vc-tag = v$(VERSION) + this-vc-tag-regexp = v$(VERSION_REGEXP) +else + tag-package = $(shell echo "$(PACKAGE)" | tr '[:lower:]' '[:upper:]') + tag-this-version = $(subst .,_,$(VERSION)) + this-vc-tag = $(tag-package)-$(tag-this-version) + this-vc-tag-regexp = $(this-vc-tag) +endif +my_distdir = $(PACKAGE)-$(VERSION) + +# Old releases are stored here. +release_archive_dir ?= ../release + +# If RELEASE_TYPE is undefined, but RELEASE is, use its second word. +# But overwrite VERSION. +ifdef RELEASE + VERSION := $(word 1, $(RELEASE)) + RELEASE_TYPE ?= $(word 2, $(RELEASE)) +endif + +# Validate and return $(RELEASE_TYPE), or die. +RELEASE_TYPES = alpha beta stable +release-type = $(call member-check,RELEASE_TYPE,$(RELEASE_TYPES)) + +# Override gnu_rel_host and url_dir_list in cfg.mk if these are not right. +# Use alpha.gnu.org for alpha and beta releases. +# Use ftp.gnu.org for stable releases. +gnu_ftp_host-alpha = alpha.gnu.org +gnu_ftp_host-beta = alpha.gnu.org +gnu_ftp_host-stable = ftp.gnu.org +gnu_rel_host ?= $(gnu_ftp_host-$(release-type)) + +url_dir_list ?= $(if $(call _equal,$(gnu_rel_host),ftp.gnu.org), \ + https://ftpmirror.gnu.org/$(PACKAGE), \ + https://$(gnu_rel_host)/gnu/$(PACKAGE)) + +# Override this in cfg.mk if you are using a different format in your +# NEWS file. +today = $(shell date +%Y-%m-%d) + +# Select which lines of NEWS are searched for $(news-check-regexp). +# This is a sed line number spec. The default says that we search +# lines 1..10 of NEWS for $(news-check-regexp). +# If you want to search only line 3 or only lines 20-22, use "3" or "20,22". +news-check-lines-spec ?= 1,10 +news-check-regexp ?= '^\*.* $(VERSION_REGEXP) \($(today)\)' + +# Prevent programs like 'sort' from considering distinct strings to be equal. +# Doing it here saves us from having to set LC_ALL elsewhere in this file. +export LC_ALL = C + +## --------------- ## +## Sanity checks. ## +## --------------- ## + +ifneq ($(_gl-Makefile),) +_cfg_mk := $(wildcard $(srcdir)/cfg.mk) + +# Collect the names of rules starting with 'sc_'. +syntax-check-rules := $(sort $(shell $(SED) -n \ + 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p' $(srcdir)/$(ME) $(_cfg_mk))) +.PHONY: $(syntax-check-rules) + +ifeq ($(shell $(VC_LIST) >/dev/null 2>&1; echo $$?),0) + local-checks-available += $(syntax-check-rules) +else + local-checks-available += no-vc-detected +no-vc-detected: + @echo "No version control files detected; skipping syntax check" +endif +.PHONY: $(local-checks-available) + +# Arrange to print the name of each syntax-checking rule just before running it. +$(syntax-check-rules): %: %.m +sc_m_rules_ = $(patsubst %, %.m, $(syntax-check-rules)) +.PHONY: $(sc_m_rules_) +$(sc_m_rules_): + @echo $(patsubst sc_%.m, %, $@) + @date +%s.%N > .sc-start-$(basename $@) + +# Compute and print the elapsed time for each syntax-check rule. +sc_z_rules_ = $(patsubst %, %.z, $(syntax-check-rules)) +.PHONY: $(sc_z_rules_) +$(sc_z_rules_): %.z: % + @end=$$(date +%s.%N); \ + start=$$(cat .sc-start-$*); \ + rm -f .sc-start-$*; \ + awk -v s=$$start -v e=$$end \ + 'END {printf "%.2f $(patsubst sc_%,%,$*)\n", e - s}' < /dev/null + +# The patsubst here is to replace each sc_% rule with its sc_%.z wrapper +# that computes and prints elapsed time. +local-check := \ + $(patsubst sc_%, sc_%.z, \ + $(filter-out $(local-checks-to-skip), $(local-checks-available))) + +syntax-check: $(local-check) +endif + +# _sc_search_regexp +# +# This macro searches for a given construct in the selected files and +# then takes some action. +# +# Parameters (shell variables): +# +# prohibit | require +# +# Regular expression (ERE) denoting either a forbidden construct +# or a required construct. Those arguments are exclusive. +# +# exclude +# +# Regular expression (ERE) denoting lines to ignore that matched +# a prohibit construct. For example, this can be used to exclude +# comments that mention why the nearby code uses an alternative +# construct instead of the simpler prohibited construct. +# +# in_vc_files | in_files +# +# grep-E-style regexp selecting the files to check. For in_vc_files, +# the regexp is used to select matching files from the list of all +# version-controlled files; for in_files, it's from the names printed +# by "find $(srcdir)". When neither is specified, use all files that +# are under version control. +# +# containing | non_containing +# +# Select the files (non) containing strings matching this regexp. +# If both arguments are specified then CONTAINING takes +# precedence. +# +# with_grep_options +# +# Extra options for grep. +# +# ignore_case +# +# Ignore case. +# +# halt +# +# Message to display before to halting execution. +# +# Finally, you may exempt files based on an ERE matching file names. +# For example, to exempt from the sc_space_tab check all files with the +# .diff suffix, set this Make variable: +# +# exclude_file_name_regexp--sc_space_tab = \.diff$ +# +# Note that while this functionality is mostly inherited via VC_LIST_EXCEPT, +# when filtering by name via in_files, we explicitly filter out matching +# names here as well. + +# Initialize each, so that envvar settings cannot interfere. +export require = +export prohibit = +export exclude = +export in_vc_files = +export in_files = +export containing = +export non_containing = +export halt = +export with_grep_options = + +# By default, _sc_search_regexp does not ignore case. +export ignore_case = +_ignore_case = $$(test -n "$$ignore_case" && printf %s -i || :) + +define _sc_say_and_exit + dummy=; : so we do not need a semicolon before each use; \ + { printf '%s\n' "$(ME): $$msg" 1>&2; exit 1; }; +endef + +define _sc_search_regexp + dummy=; : so we do not need a semicolon before each use; \ + \ + : Check arguments; \ + test -n "$$prohibit" && test -n "$$require" \ + && { msg='Cannot specify both prohibit and require' \ + $(_sc_say_and_exit) } || :; \ + test -z "$$prohibit" && test -z "$$require" \ + && { msg='Should specify either prohibit or require' \ + $(_sc_say_and_exit) } || :; \ + test -z "$$prohibit" && test -n "$$exclude" \ + && { msg='Use of exclude requires a prohibit pattern' \ + $(_sc_say_and_exit) } || :; \ + test -n "$$in_vc_files" && test -n "$$in_files" \ + && { msg='Cannot specify both in_vc_files and in_files' \ + $(_sc_say_and_exit) } || :; \ + test "x$$halt" != x \ + || { msg='halt not defined' $(_sc_say_and_exit) }; \ + \ + : Filter by file name; \ + if test -n "$$in_files"; then \ + files=$$(find $(srcdir) | $(GREP) -E "$$in_files" \ + | $(GREP) -Ev '$(_sc_excl)'); \ + else \ + files=$$($(VC_LIST_EXCEPT)); \ + if test -n "$$in_vc_files"; then \ + files=$$(echo "$$files" | $(GREP) -E "$$in_vc_files"); \ + fi; \ + fi; \ + \ + : Filter by content; \ + test -n "$$files" \ + && test -n "$$containing" \ + && { files=$$(echo "$$files" | xargs $(GREP) -l "$$containing"); } \ + || :; \ + test -n "$$files" \ + && test -n "$$non_containing" \ + && { files=$$(echo "$$files" | xargs $(GREP) -vl "$$non_containing"); } \ + || :; \ + \ + : Check for the construct; \ + if test -n "$$files"; then \ + if test -n "$$prohibit"; then \ + echo "$$files" + | xargs $(GREP) $$with_grep_options $(_ignore_case) -nE \ + "$$prohibit" /dev/null \ + | $(GREP) -vE "$${exclude:-^$$}" \ + && { msg="$$halt" $(_sc_say_and_exit) } \ + || :; \ + else \ + echo "$$files" \ + | xargs \ + $(GREP) $$with_grep_options $(_ignore_case) -LE "$$require" \ + | $(GREP) . \ + && { msg="$$halt" $(_sc_say_and_exit) } \ + || :; \ + fi \ + else :; \ + fi || :; +endef + +sc_avoid_if_before_free: + @$(VC_LIST_EXCEPT) \ + | $(GREP) -v useless-if-before-free \ + | xargs \ + $(srcdir)/$(_build-aux)/useless-if-before-free \ + $(useless_free_options) \ + && { printf '$(ME): found useless "if"' \ + ' before "free" above\n' 1>&2; \ + exit 1; } \ + || : + +sc_cast_of_argument_to_free: + @prohibit='\<free *\( *\(' halt="don't cast free argument" \ + $(_sc_search_regexp) + +sc_cast_of_x_alloc_return_value: + @prohibit='\*\) *x(m|c|re)alloc\>' \ + halt="don't cast x*alloc return value" \ + $(_sc_search_regexp) + +sc_cast_of_alloca_return_value: + @prohibit='\*\) *alloca\>' \ + halt="don't cast alloca return value" \ + $(_sc_search_regexp) + +sc_space_tab: + @prohibit='[ ] ' \ + halt='found SPACE-TAB sequence; remove the SPACE' \ + $(_sc_search_regexp) + +# Don't use *scanf or the old ato* functions in "real" code. +# They provide no error checking mechanism. +# Instead, use strto* functions. +sc_prohibit_atoi_atof: + @prohibit='\<([fs]?scanf|ato([filq]|ll)) *\(' \ + halt='do not use *scan''f, ato''f, ato''i, ato''l, ato''ll or ato''q' \ + $(_sc_search_regexp) + +# Use STREQ rather than comparing strcmp == 0, or != 0. +sp_ = strcmp *\(.+\) +sc_prohibit_strcmp: + @prohibit='! *strcmp *\(|\<$(sp_) *[!=]=|[!=]= *$(sp_)' \ + exclude='# *define STRN?EQ\(' \ + halt='replace strcmp calls above with STREQ/STRNEQ' \ + $(_sc_search_regexp) + +# Really. You don't want to use this function. +# It may fail to NUL-terminate the destination, +# and always NUL-pads out to the specified length. +sc_prohibit_strncpy: + @prohibit='\<strncpy *\(' \ + halt='do not use strncpy, period' \ + $(_sc_search_regexp) + +# Pass EXIT_*, not number, to usage, exit, and error (when exiting) +# Convert all uses automatically, via these two commands: +# git grep -l '\<exit *(1)' \ +# | grep -vEf .x-sc_prohibit_magic_number_exit \ +# | xargs --no-run-if-empty \ +# perl -pi -e 's/(^|[^.])\b(exit ?)\(1\)/$1$2(EXIT_FAILURE)/' +# git grep -l '\<exit *(0)' \ +# | grep -vEf .x-sc_prohibit_magic_number_exit \ +# | xargs --no-run-if-empty \ +# perl -pi -e 's/(^|[^.])\b(exit ?)\(0\)/$1$2(EXIT_SUCCESS)/' +sc_prohibit_magic_number_exit: + @prohibit='(^|[^.])\<(usage|exit|error) ?\(-?[0-9]+[,)]' \ + exclude='exit \(77\)|error ?\(((0|77),|[^,]*)' \ + halt='use EXIT_* values rather than magic number' \ + $(_sc_search_regexp) + +# Using EXIT_SUCCESS as the first argument to error is misleading, +# since when that parameter is 0, error does not exit. Use '0' instead. +sc_error_exit_success: + @prohibit='error *\(EXIT_SUCCESS,' \ + in_vc_files='\.[chly]$$' \ + halt='found error (EXIT_SUCCESS' \ + $(_sc_search_regexp) + +# "FATAL:" should be fully upper-cased in error messages +# "WARNING:" should be fully upper-cased, or fully lower-cased +sc_error_message_warn_fatal: + @$(VC_LIST_EXCEPT) \ + | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null \ + | $(GREP) -E '"Warning|"Fatal|"fatal' \ + && { echo '$(ME): use FATAL, WARNING or warning' 1>&2; \ + exit 1; } \ + || : + +# Error messages should not start with a capital letter +sc_error_message_uppercase: + @$(VC_LIST_EXCEPT) \ + | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null \ + | $(GREP) -E '"[A-Z]' \ + | $(GREP) -vE '"FATAL|"WARNING|"Java|"C#|PRIuMAX' \ + && { echo '$(ME): found capitalized error message' 1>&2; \ + exit 1; } \ + || : + +# Error messages should not end with a period +sc_error_message_period: + @$(VC_LIST_EXCEPT) \ + | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null \ + | $(GREP) -E '[^."]\."' \ + && { echo '$(ME): found error message ending in period' 1>&2; \ + exit 1; } \ + || : + +sc_file_system: + @prohibit=file''system \ + exclude='/proc/filesystems' \ + ignore_case=1 \ + halt='found use of "file''system"; spell it "file system"' \ + $(_sc_search_regexp) + +# Don't use cpp tests of this symbol. All code assumes config.h is included. +sc_prohibit_have_config_h: + @prohibit='^# *if.*HAVE''_CONFIG_H' \ + halt='found use of HAVE''_CONFIG_H; remove' \ + $(_sc_search_regexp) + +# Nearly all .c files must include <config.h>. However, we also permit this +# via inclusion of a package-specific header, if cfg.mk specified one. +# config_h_header must be suitable for grep -E. +config_h_header ?= <config\.h> +sc_require_config_h: + @require='^# *include $(config_h_header)' \ + in_vc_files='\.c$$' \ + halt='the above files do not include <config.h>' \ + $(_sc_search_regexp) + +# Print each file name for which the first #include does not match +# $(config_h_header). Like grep -m 1, this only looks at the first match. +perl_config_h_first_ = \ + -e 'BEGIN {$$ret = 0}' \ + -e 'if (/^\# *include\b/) {' \ + -e ' if (not m{^\# *include $(config_h_header)}) {' \ + -e ' print "$$ARGV\n";' \ + -e ' $$ret = 1;' \ + -e ' }' \ + -e ' \# Move on to next file after first include' \ + -e ' close ARGV;' \ + -e '}' \ + -e 'END {exit $$ret}' + +# You must include <config.h> before including any other header file. +# This can possibly be via a package-specific header, if given by cfg.mk. +sc_require_config_h_first: + @if $(VC_LIST_EXCEPT) | $(GREP) '\.c$$' > /dev/null; then \ + files=$$($(VC_LIST_EXCEPT) | $(GREP) '\.c$$') && \ + perl -n $(perl_config_h_first_) $$files || \ + { echo '$(ME): the above files include some other header' \ + 'before <config.h>' 1>&2; exit 1; } || :; \ + else :; \ + fi + +sc_prohibit_HAVE_MBRTOWC: + @prohibit='\bHAVE_MBRTOWC\b' \ + halt="do not use $$prohibit; it is always defined" \ + $(_sc_search_regexp) + +# To use this "command" macro, you must first define two shell variables: +# h: the header name, with no enclosing <> or "" +# re: a regular expression that matches IFF something provided by $h is used. +define _sc_header_without_use + dummy=; : so we do not need a semicolon before each use; \ + h_esc=`echo '[<"]'"$$h"'[">]'|$(SED) 's/\./\\\\./g'`; \ + if $(VC_LIST_EXCEPT) | $(GREP) '\.c$$' > /dev/null; then \ + files=$$($(GREP) -l '^# *include '"$$h_esc" \ + $$($(VC_LIST_EXCEPT) | $(GREP) '\.c$$')) && \ + $(GREP) -LE "$$re" $$files | $(GREP) . && \ + { echo "$(ME): the above files include $$h but don't use it" \ + 1>&2; exit 1; } || :; \ + else :; \ + fi +endef + +# Prohibit the inclusion of assert.h without an actual use of assert. +sc_prohibit_assert_without_use: + @h='assert.h' re='\<assert *\(' $(_sc_header_without_use) + +# Prohibit the inclusion of close-stream.h without an actual use. +sc_prohibit_close_stream_without_use: + @h='close-stream.h' re='\<close_stream *\(' $(_sc_header_without_use) + +# Prohibit the inclusion of getopt.h without an actual use. +sc_prohibit_getopt_without_use: + @h='getopt.h' re='\<getopt(_long)? *\(' $(_sc_header_without_use) + +# Don't include quotearg.h unless you use one of its functions. +sc_prohibit_quotearg_without_use: + @h='quotearg.h' re='\<quotearg(_[^ ]+)? *\(' $(_sc_header_without_use) + +# Don't include quote.h unless you use one of its functions. +sc_prohibit_quote_without_use: + @h='quote.h' re='\<quote((_n)? *\(|_quoting_options\>)' \ + $(_sc_header_without_use) + +# Don't include this header unless you use one of its functions. +sc_prohibit_long_options_without_use: + @h='long-options.h' re='\<parse_long_options *\(' \ + $(_sc_header_without_use) + +# Don't include this header unless you use one of its functions. +sc_prohibit_inttostr_without_use: + @h='inttostr.h' re='\<(off|[iu]max|uint)tostr *\(' \ + $(_sc_header_without_use) + +# Don't include this header unless you use one of its functions. +sc_prohibit_ignore_value_without_use: + @h='ignore-value.h' re='\<ignore_(value|ptr) *\(' \ + $(_sc_header_without_use) + +# Don't include this header unless you use one of its functions. +sc_prohibit_error_without_use: + @h='error.h' \ + re='\<error(_at_line|_print_progname|_one_per_line|_message_count)? *\('\ + $(_sc_header_without_use) + +# Don't include xalloc.h unless you use one of its functions. +# Consider these symbols: +# perl -lne '/^# *define (\w+)\(/ and print $1' lib/xalloc.h|grep -v '^__'; +# perl -lne '/^(?:extern )?(?:void|char) \*?(\w+) *\(/ and print $1' lib/xalloc.h +# Divide into two sets on case, and filter each through this: +# | sort | perl -MRegexp::Assemble -le \ +# 'print Regexp::Assemble->new(file => "/dev/stdin")->as_string'|sed 's/\?://g' +# Note this was produced by the above: +# _xa1 = \ +#x(((2n?)?re|c(har)?|n(re|m)|z)alloc|alloc_(oversized|die)|m(alloc|emdup)|strdup) +# But we can do better, in at least two ways: +# 1) take advantage of two "dup"-suffixed strings: +# x(((2n?)?re|c(har)?|n(re|m)|[mz])alloc|alloc_(oversized|die)|(mem|str)dup) +# 2) notice that "c(har)?|[mz]" is equivalent to the shorter and more readable +# "char|[cmz]" +# x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup) +_xa1 = x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup) +_xa2 = X([CZ]|N?M)ALLOC +sc_prohibit_xalloc_without_use: + @h='xalloc.h' \ + re='\<($(_xa1)|$(_xa2)) *\('\ + $(_sc_header_without_use) + +# Extract function names: +# perl -lne '/^(?:extern )?(?:void|char) \*?(\w+) *\(/ and print $1' lib/hash.h +_hash_re = \ +clear|delete|free|get_(first|next)|insert|lookup|print_statistics|reset_tuning +_hash_fn = \<($(_hash_re)) *\( +_hash_struct = (struct )?\<[Hh]ash_(table|tuning)\> +sc_prohibit_hash_without_use: + @h='hash.h' \ + re='$(_hash_fn)|$(_hash_struct)'\ + $(_sc_header_without_use) + +sc_prohibit_cloexec_without_use: + @h='cloexec.h' re='\<(set_cloexec_flag|dup_cloexec) *\(' \ + $(_sc_header_without_use) + +sc_prohibit_posixver_without_use: + @h='posixver.h' re='\<posix2_version *\(' $(_sc_header_without_use) + +sc_prohibit_same_without_use: + @h='same.h' re='\<same_name(at)? *\(' $(_sc_header_without_use) + +sc_prohibit_hash_pjw_without_use: + @h='hash-pjw.h' \ + re='\<hash_pjw\>' \ + $(_sc_header_without_use) + +sc_prohibit_safe_read_without_use: + @h='safe-read.h' re='(\<SAFE_READ_ERROR\>|\<safe_read *\()' \ + $(_sc_header_without_use) + +sc_prohibit_argmatch_without_use: + @h='argmatch.h' \ + re='(\<(ARRAY_CARDINALITY|X?ARGMATCH(|_TO_ARGUMENT|_VERIFY))\>|\<(invalid_arg|argmatch(_exit_fn|_(in)?valid)?) *\()' \ + $(_sc_header_without_use) + +sc_prohibit_canonicalize_without_use: + @h='canonicalize.h' \ + re='CAN_(EXISTING|ALL_BUT_LAST|MISSING)|canonicalize_(mode_t|filename_mode|file_name)' \ + $(_sc_header_without_use) + +sc_prohibit_root_dev_ino_without_use: + @h='root-dev-ino.h' \ + re='(\<ROOT_DEV_INO_(CHECK|WARN)\>|\<get_root_dev_ino *\()' \ + $(_sc_header_without_use) + +sc_prohibit_openat_without_use: + @h='openat.h' \ + re='\<(openat_(permissive|needs_fchdir|(save|restore)_fail)|l?(stat|ch(own|mod))at|(euid)?accessat|(FCHMOD|FCHOWN|STAT)AT_INLINE)\>' \ + $(_sc_header_without_use) + +# Prohibit the inclusion of c-ctype.h without an actual use. +ctype_re = isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|islower\ +|isprint|ispunct|isspace|isupper|isxdigit|tolower|toupper +sc_prohibit_c_ctype_without_use: + @h='c-ctype.h' re='\<c_($(ctype_re)) *\(' \ + $(_sc_header_without_use) + +# The following list was generated by running: +# man signal.h|col -b|perl -ne '/bsd_signal.*;/.../sigwaitinfo.*;/ and print' \ +# | perl -lne '/^\s+(?:int|void).*?(\w+).*/ and print $1' | fmt +_sig_functions = \ + bsd_signal kill killpg pthread_kill pthread_sigmask raise sigaction \ + sigaddset sigaltstack sigdelset sigemptyset sigfillset sighold sigignore \ + siginterrupt sigismember signal sigpause sigpending sigprocmask sigqueue \ + sigrelse sigset sigsuspend sigtimedwait sigwait sigwaitinfo +_sig_function_re = $(subst $(_sp),|,$(strip $(_sig_functions))) +# The following were extracted from "man signal.h" manually. +_sig_types_and_consts = \ + MINSIGSTKSZ SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK \ + SA_RESETHAND SA_RESTART SA_SIGINFO SIGEV_NONE SIGEV_SIGNAL \ + SIGEV_THREAD SIGSTKSZ SIG_BLOCK SIG_SETMASK SIG_UNBLOCK SS_DISABLE \ + SS_ONSTACK mcontext_t pid_t sig_atomic_t sigevent siginfo_t sigset_t \ + sigstack sigval stack_t ucontext_t +# generated via this: +# perl -lne '/^#ifdef (SIG\w+)/ and print $1' lib/sig2str.c|sort -u|fmt -70 +_sig_names = \ + SIGABRT SIGALRM SIGALRM1 SIGBUS SIGCANCEL SIGCHLD SIGCLD SIGCONT \ + SIGDANGER SIGDIL SIGEMT SIGFPE SIGFREEZE SIGGRANT SIGHUP SIGILL \ + SIGINFO SIGINT SIGIO SIGIOT SIGKAP SIGKILL SIGKILLTHR SIGLOST SIGLWP \ + SIGMIGRATE SIGMSG SIGPHONE SIGPIPE SIGPOLL SIGPRE SIGPROF SIGPWR \ + SIGQUIT SIGRETRACT SIGSAK SIGSEGV SIGSOUND SIGSTKFLT SIGSTOP SIGSYS \ + SIGTERM SIGTHAW SIGTRAP SIGTSTP SIGTTIN SIGTTOU SIGURG SIGUSR1 \ + SIGUSR2 SIGVIRT SIGVTALRM SIGWAITING SIGWINCH SIGWIND SIGWINDOW \ + SIGXCPU SIGXFSZ +_sig_syms_re = $(subst $(_sp),|,$(strip $(_sig_names) $(_sig_types_and_consts))) + +# Prohibit the inclusion of signal.h without an actual use. +sc_prohibit_signal_without_use: + @h='signal.h' \ + re='\<($(_sig_function_re)) *\(|\<($(_sig_syms_re))\>' \ + $(_sc_header_without_use) + +# Don't include stdio--.h unless you use one of its functions. +sc_prohibit_stdio--_without_use: + @h='stdio--.h' re='\<((f(re)?|p)open|tmpfile) *\(' \ + $(_sc_header_without_use) + +# Don't include stdio-safer.h unless you use one of its functions. +sc_prohibit_stdio-safer_without_use: + @h='stdio-safer.h' re='\<((f(re)?|p)open|tmpfile)_safer *\(' \ + $(_sc_header_without_use) + +# Prohibit the inclusion of strings.h without a sensible use. +# Using the likes of bcmp, bcopy, bzero, index or rindex is not sensible. +sc_prohibit_strings_without_use: + @h='strings.h' \ + re='\<(strn?casecmp|ffs(ll)?)\>' \ + $(_sc_header_without_use) + +# Extract the raw list of symbol names with this: +gl_extract_define_simple = \ + /^\# *define ([A-Z]\w+)\(/ and print $$1 +# Filter out duplicates and convert to a space-separated list: +_intprops_names = \ + $(shell f=$(gnulib_dir)/lib/intprops.h; \ + perl -lne '$(gl_extract_define_simple)' $$f | sort -u | tr '\n' ' ') +# Remove trailing space and convert to a regular expression: +_intprops_syms_re = $(subst $(_sp),|,$(strip $(_intprops_names))) +# Prohibit the inclusion of intprops.h without an actual use. +sc_prohibit_intprops_without_use: + @h='intprops.h' \ + re='\<($(_intprops_syms_re)) *\(' \ + $(_sc_header_without_use) + +_stddef_syms_re = NULL|offsetof|ptrdiff_t|size_t|wchar_t +# Prohibit the inclusion of stddef.h without an actual use. +sc_prohibit_stddef_without_use: + @h='stddef.h' \ + re='\<($(_stddef_syms_re))\>' \ + $(_sc_header_without_use) + +_de1 = dirfd|(close|(fd)?open|read|rewind|seek|tell)dir(64)?(_r)? +_de2 = (versionsort|struct dirent|getdirentries|alphasort|scandir(at)?)(64)? +_de3 = MAXNAMLEN|DIR|ino_t|d_ino|d_fileno|d_namlen +_dirent_syms_re = $(_de1)|$(_de2)|$(_de3) +# Prohibit the inclusion of dirent.h without an actual use. +sc_prohibit_dirent_without_use: + @h='dirent.h' \ + re='\<($(_dirent_syms_re))\>' \ + $(_sc_header_without_use) + +# Prohibit the inclusion of verify.h without an actual use. +sc_prohibit_verify_without_use: + @h='verify.h' \ + re='\<(verify(true|expr)?|assume|static_assert) *\(' \ + $(_sc_header_without_use) + +# Don't include xfreopen.h unless you use one of its functions. +sc_prohibit_xfreopen_without_use: + @h='xfreopen.h' re='\<xfreopen *\(' $(_sc_header_without_use) + +sc_obsolete_symbols: + @prohibit='\<(HAVE''_FCNTL_H|O''_NDELAY)\>' \ + halt='do not use HAVE''_FCNTL_H or O'_NDELAY \ + $(_sc_search_regexp) + +# FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ + +# Each nonempty ChangeLog line must start with a year number, or a TAB. +sc_changelog: + @prohibit='^[^12 ]' \ + in_vc_files='^ChangeLog$$' \ + halt='found unexpected prefix in a ChangeLog' \ + $(_sc_search_regexp) + +# Ensure that each .c file containing a "main" function also +# calls bindtextdomain. +sc_bindtextdomain: + @require='bindtextdomain *\(' \ + in_vc_files='\.c$$' \ + containing='\<main *(' \ + halt='the above files do not call bindtextdomain' \ + $(_sc_search_regexp) + +# Require that the final line of each test-lib.sh-using test be this one: +# Exit $fail +# Note: this test requires GNU grep's --label= option. +Exit_witness_file ?= tests/test-lib.sh +Exit_base := $(notdir $(Exit_witness_file)) +sc_require_test_exit_idiom: + @if test -f $(srcdir)/$(Exit_witness_file); then \ + die=0; \ + for i in $$($(GREP) -l -F 'srcdir/$(Exit_base)' \ + $$($(VC_LIST) tests)); do \ + tail -n1 $$i | $(GREP) '^Exit .' > /dev/null \ + && : || { die=1; echo $$i; } \ + done; \ + test $$die = 1 && \ + { echo 1>&2 '$(ME): the final line in each of the above is not:'; \ + echo 1>&2 'Exit something'; \ + exit 1; } || :; \ + fi + +sc_trailing_blank: + @prohibit='[ ]$$' \ + halt='found trailing blank(s)' \ + exclude='^Binary file .* matches$$' \ + $(_sc_search_regexp) + +# Match lines like the following, but where there is only one space +# between the options and the description: +# -D, --all-repeated[=delimit-method] print all duplicate lines\n +longopt_re = --[a-z][0-9A-Za-z-]*(\[?=[0-9A-Za-z-]*\]?)? +sc_two_space_separator_in_usage: + @prohibit='^ *(-[A-Za-z],)? $(longopt_re) [^ ].*\\$$' \ + halt='help2man requires at least two spaces between an option and its description'\ + $(_sc_search_regexp) + +# A regexp matching function names like "error" that may be used +# to emit translatable messages. +_gl_translatable_diag_func_re ?= error + +# Look for diagnostics that aren't marked for translation. +# This won't find any for which error's format string is on a separate line. +sc_unmarked_diagnostics: + @prohibit='\<$(_gl_translatable_diag_func_re) *\([^"]*"[^"]*[a-z]{3}' \ + exclude='(_|ngettext ?)\(' \ + halt='found unmarked diagnostic(s)' \ + $(_sc_search_regexp) + +# Avoid useless parentheses like those in this example: +# #if defined (SYMBOL) || defined (SYM2) +sc_useless_cpp_parens: + @prohibit='^# *if .*defined *\(' \ + halt='found useless parentheses in cpp directive' \ + $(_sc_search_regexp) + +# List headers for which HAVE_HEADER_H is always true, assuming you are +# using the appropriate gnulib module. CAUTION: for each "unnecessary" +# #if HAVE_HEADER_H that you remove, be sure that your project explicitly +# requires the gnulib module that guarantees the usability of that header. +gl_assured_headers_ = \ + cd $(gnulib_dir)/lib && echo *.in.h|$(SED) 's/\.in\.h//g' + +# Convert the list of names to upper case, and replace each space with "|". +az_ = abcdefghijklmnopqrstuvwxyz +AZ_ = ABCDEFGHIJKLMNOPQRSTUVWXYZ +gl_header_upper_case_or_ = \ + $$($(gl_assured_headers_) \ + | tr $(az_)/.- $(AZ_)___ \ + | tr -s ' ' '|' \ + ) +sc_prohibit_always_true_header_tests: + @or=$(gl_header_upper_case_or_); \ + re="HAVE_($$or)_H"; \ + prohibit='\<'"$$re"'\>' \ + halt=$$(printf '%s\n' \ + 'do not test the above HAVE_<header>_H symbol(s);' \ + ' with the corresponding gnulib module, they are always true') \ + $(_sc_search_regexp) + +sc_prohibit_defined_have_decl_tests: + @prohibit='(#[ ]*ifn?def|\<defined)\>[ (]+HAVE_DECL_' \ + halt='HAVE_DECL macros are always defined' \ + $(_sc_search_regexp) + +# ================================================================== +gl_other_headers_ ?= \ + intprops.h \ + openat.h \ + stat-macros.h + +# Perl -lne code to extract "significant" cpp-defined symbols from a +# gnulib header file, eliminating a few common false-positives. +# The exempted names below are defined only conditionally in gnulib, +# and hence sometimes must/may be defined in application code. +gl_extract_significant_defines_ = \ + /^\# *define ([^_ (][^ (]*)(\s*\(|\s+\w+)/\ + && $$2 !~ /(?:rpl_|_used_without_)/\ + && $$1 !~ /^(?:NSIG|ENODATA)$$/\ + && $$1 !~ /^(?:SA_RESETHAND|SA_RESTART)$$/\ + and print $$1 + +# Create a list of regular expressions matching the names +# of macros that are guaranteed to be defined by parts of gnulib. +define def_sym_regex + gen_h=$(gl_generated_headers_); \ + (cd $(gnulib_dir)/lib; \ + for f in *.in.h $(gl_other_headers_); do \ + test -f $$f \ + && perl -lne '$(gl_extract_significant_defines_)' $$f; \ + done; \ + ) | sort -u \ + | $(SED) 's/^/^ *# *(define|undef) */;s/$$/\\>/' +endef + +# Don't define macros that we already get from gnulib header files. +sc_prohibit_always-defined_macros: + @if test -d $(gnulib_dir); then \ + case $$(echo all: | $(GREP) -l -f - Makefile) in Makefile);; *) \ + echo '$(ME): skipping $@: you lack GNU grep' 1>&2; exit 0;; \ + esac; \ + regex=$$($(def_sym_regex)); export regex; \ + $(VC_LIST_EXCEPT) \ + | xargs sh -c 'echo $$regex | $(GREP) -E -f - "$$@"' \ + dummy /dev/null \ + && { printf '$(ME): define the above' \ + ' via some gnulib .h file\n' 1>&2; \ + exit 1; } \ + || :; \ + fi +# ================================================================== + +# Prohibit checked in backup files. +sc_prohibit_backup_files: + @$(VC_LIST) | $(GREP) '~$$' && \ + { echo '$(ME): found version controlled backup file' 1>&2; \ + exit 1; } || : + +# Require the latest GPL. +sc_GPL_version: + @prohibit='either ''version [^3]' \ + halt='GPL vN, N!=3' \ + $(_sc_search_regexp) + +# Require the latest GFDL. Two regexp, since some .texi files end up +# line wrapping between 'Free Documentation License,' and 'Version'. +_GFDL_regexp = (Free ''Documentation.*Version 1\.[^3]|Version 1\.[^3] or any) +sc_GFDL_version: + @prohibit='$(_GFDL_regexp)' \ + halt='GFDL vN, N!=3' \ + $(_sc_search_regexp) + +# Don't use Texinfo's @acronym{}. +# https://lists.gnu.org/r/bug-gnulib/2010-03/msg00321.html +texinfo_suffix_re_ ?= \.(txi|texi(nfo)?)$$ +sc_texinfo_acronym: + @prohibit='@acronym\{' \ + in_vc_files='$(texinfo_suffix_re_)' \ + halt='found use of Texinfo @acronym{}' \ + $(_sc_search_regexp) + +cvs_keywords = \ + Author|Date|Header|Id|Name|Locker|Log|RCSfile|Revision|Source|State + +sc_prohibit_cvs_keyword: + @prohibit='\$$($(cvs_keywords))\$$' \ + halt='do not use CVS keyword expansion' \ + $(_sc_search_regexp) + +# This Perl code is slightly obfuscated. Not only is each "$" doubled +# because it's in a Makefile, but the $$c's are comments; we cannot +# use "#" due to the way the script ends up concatenated onto one line. +# It would be much more concise, and would produce better output (including +# counts) if written as: +# perl -ln -0777 -e '/\n(\n+)$/ and print "$ARGV: ".length $1' ... +# but that would be far less efficient, reading the entire contents +# of each file, rather than just the last two bytes of each. +# In addition, while the code below detects both blank lines and a missing +# newline at EOF, the above detects only the former. +# +# This is a perl script that is expected to be the single-quoted argument +# to a command-line "-le". The remaining arguments are file names. +# Print the name of each file that does not end in exactly one newline byte. +# I.e., warn if there are blank lines (2 or more newlines), or if the +# last byte is not a newline. However, currently we don't complain +# about any file that contains exactly one byte. +# Exit nonzero if at least one such file is found, otherwise, exit 0. +# Warn about, but otherwise ignore open failure. Ignore seek/read failure. +# +# Use this if you want to remove trailing empty lines from selected files: +# perl -pi -0777 -e 's/\n\n+$/\n/' files... +# +require_exactly_one_NL_at_EOF_ = \ + foreach my $$f (@ARGV) \ + { \ + open F, "<", $$f or (warn "failed to open $$f: $$!\n"), next; \ + my $$p = sysseek (F, -2, 2); \ + my $$c = "seek failure probably means file has < 2 bytes; ignore"; \ + my $$last_two_bytes; \ + defined $$p and $$p = sysread F, $$last_two_bytes, 2; \ + close F; \ + $$c = "ignore read failure"; \ + $$p && ($$last_two_bytes eq "\n\n" \ + || substr ($$last_two_bytes,1) ne "\n") \ + and (print $$f), $$fail=1; \ + } \ + END { exit defined $$fail } +sc_prohibit_empty_lines_at_EOF: + @$(VC_LIST_EXCEPT) \ + | xargs perl -le '$(require_exactly_one_NL_at_EOF_)' \ + || { echo '$(ME): empty line(s) or no newline at EOF' 1>&2; \ + exit 1; } \ + || : + +# Make sure we don't use st_blocks. Use ST_NBLOCKS instead. +# This is a bit of a kludge, since it prevents use of the string +# even in comments, but for now it does the job with no false positives. +sc_prohibit_stat_st_blocks: + @prohibit='[.>]st_blocks' \ + halt='do not use st_blocks; use ST_NBLOCKS' \ + $(_sc_search_regexp) + +# Make sure we don't define any S_IS* macros in src/*.c files. +# They're already defined via gnulib's sys/stat.h replacement. +sc_prohibit_S_IS_definition: + @prohibit='^ *# *define *S_IS' \ + halt='do not define S_IS* macros; include <sys/stat.h>' \ + $(_sc_search_regexp) + +# Perl block to convert a match to FILE_NAME:LINENO:TEST, +# that is shared by two definitions below. +perl_filename_lineno_text_ = \ + -e ' {' \ + -e ' $$n = ($$` =~ tr/\n/\n/ + 1);' \ + -e ' ($$v = $$&) =~ s/\n/\\n/g;' \ + -e ' print "$$ARGV:$$n:$$v\n";' \ + -e ' }' + +prohibit_doubled_words_ = \ + the then in an on if is it but for or at and do to +# expand the regex before running the check to avoid using expensive captures +prohibit_doubled_word_expanded_ = \ + $(join $(prohibit_doubled_words_),$(addprefix \s+,$(prohibit_doubled_words_))) +prohibit_doubled_word_RE_ ?= \ + /\b(?:$(subst $(_sp),|,$(prohibit_doubled_word_expanded_)))\b/gims +prohibit_doubled_word_ = \ + -e 'while ($(prohibit_doubled_word_RE_))' \ + $(perl_filename_lineno_text_) + +# Define this to a regular expression that matches +# any filename:dd:match lines you want to ignore. +# The default is to ignore no matches. +ignore_doubled_word_match_RE_ ?= ^$$ + +sc_prohibit_doubled_word: + @$(VC_LIST_EXCEPT) \ + | xargs perl -n -0777 $(prohibit_doubled_word_) \ + | $(GREP) -vE '$(ignore_doubled_word_match_RE_)' \ + | $(GREP) . \ + && { echo '$(ME): doubled words' 1>&2; exit 1; } \ + || : + +# A regular expression matching undesirable combinations of words like +# "can not"; this matches them even when the two words appear on different +# lines, but not when there is an intervening delimiter like "#" or "*". +# Similarly undesirable, "See @xref{...}", since an @xref should start +# a sentence. Explicitly prohibit any prefix of "see" or "also". +# Also prohibit a prefix matching "\w+ +". +# @pxref gets the same see/also treatment and should be parenthesized; +# presume it must *not* start a sentence. +# POSIX spells it "timestamp" rather than "time\s+stamp", so we do, too. +bad_xref_re_ ?= (?:[\w,:;] +|(?:see|also)\s+)\@xref\{ +bad_pxref_re_ ?= (?:[.!?]|(?:see|also))\s+\@pxref\{ +prohibit_undesirable_word_seq_RE_ ?= \ + /(?:\bcan\s+not\b|\btime\s+stamps?\b|$(bad_xref_re_)|$(bad_pxref_re_))/gims +prohibit_undesirable_word_seq_ = \ + -e 'while ($(prohibit_undesirable_word_seq_RE_))' \ + $(perl_filename_lineno_text_) +# Define this to a regular expression that matches +# any filename:dd:match lines you want to ignore. +# The default is to ignore no matches. +ignore_undesirable_word_sequence_RE_ ?= ^$$ + +sc_prohibit_undesirable_word_seq: + @$(VC_LIST_EXCEPT) \ + | xargs perl -n -0777 $(prohibit_undesirable_word_seq_) \ + | $(GREP) -vE '$(ignore_undesirable_word_sequence_RE_)' \ + | $(GREP) . \ + && { echo '$(ME): undesirable word sequence' >&2; exit 1; } \ + || : + +# Except for shell files and for loops, double semicolon is probably a mistake +sc_prohibit_double_semicolon: + @prohibit='; *;[ {} \]*(/[/*]|$$)' \ + in_vc_files='\.[chly]$$' \ + exclude='\bfor *\(.*\)' \ + halt="Double semicolon detected" \ + $(_sc_search_regexp) + +_ptm1 = use "test C1 && test C2", not "test C1 -''a C2" +_ptm2 = use "test C1 || test C2", not "test C1 -''o C2" +# Using test's -a and -o operators is not portable. +# We prefer test over [, since the latter is spelled [[ in configure.ac. +sc_prohibit_test_minus_ao: + @prohibit='(\<test| \[+) .+ -[ao] ' \ + halt='$(_ptm1); $(_ptm2)' \ + $(_sc_search_regexp) + +# Avoid a test bashism. +sc_prohibit_test_double_equal: + @prohibit='(\<test| \[+) .+ == ' \ + containing='#! */bin/[a-z]*sh' \ + halt='use "test x = x", not "test x =''= x"' \ + $(_sc_search_regexp) + +# Each program that uses proper_name_utf8 must link with one of the +# ICONV libraries. Otherwise, some ICONV library must appear in LDADD. +# The perl -0777 invocation below extracts the possibly-multi-line +# definition of LDADD from the appropriate Makefile.am and exits 0 +# when it contains "ICONV". +sc_proper_name_utf8_requires_ICONV: + @progs=$$($(VC_LIST_EXCEPT) \ + | xargs $(GREP) -l 'proper_name_utf8 ''("'); \ + if test "x$$progs" != x; then \ + fail=0; \ + for p in $$progs; do \ + dir=$$(dirname "$$p"); \ + perl -0777 \ + -ne 'exit !(/^LDADD =(.+?[^\\]\n)/ms && $$1 =~ /ICONV/)' \ + $$dir/Makefile.am && continue; \ + base=$$(basename "$$p" .c); \ + $(GREP) "$${base}_LDADD.*ICONV)" $$dir/Makefile.am > /dev/null \ + || { fail=1; echo 1>&2 "$(ME): $$p uses proper_name_utf8"; }; \ + done; \ + test $$fail = 1 && \ + { echo 1>&2 '$(ME): the above do not link with any ICONV library'; \ + exit 1; } || :; \ + fi + +# Warn about "c0nst struct Foo const foo[]", +# but not about "char const *const foo" or "#define const const". +sc_redundant_const: + @prohibit='\bconst\b[[:space:][:alnum:]]{2,}\bconst\b' \ + halt='redundant "const" in declarations' \ + $(_sc_search_regexp) + +sc_const_long_option: + @prohibit='^ *static.*struct option ' \ + exclude='const struct option|struct option const' \ + halt='add "const" to the above declarations' \ + $(_sc_search_regexp) + +NEWS_hash = \ + $$($(SED) -n '/^\*.* $(PREV_VERSION_REGEXP) ([0-9-]*)/,$$p' \ + $(srcdir)/NEWS \ + | perl -0777 -pe \ + 's/^Copyright.+?Free\sSoftware\sFoundation,\sInc\.\n//ms' \ + | md5sum - \ + | $(SED) 's/ .*//') + +# Ensure that we don't accidentally insert an entry into an old NEWS block. +sc_immutable_NEWS: + @if test -f $(srcdir)/NEWS; then \ + test "$(NEWS_hash)" = '$(old_NEWS_hash)' && : || \ + { echo '$(ME): you have modified old NEWS' 1>&2; exit 1; }; \ + fi + +# Update the hash stored above. Do this after each release and +# for any corrections to old entries. +update-NEWS-hash: NEWS + perl -pi -e 's/^(old_NEWS_hash[ \t]+:?=[ \t]+).*/$${1}'"$(NEWS_hash)/" \ + $(srcdir)/cfg.mk + +# Ensure that we use only the standard $(VAR) notation, +# not @...@ in Makefile.am, now that we can rely on automake +# to emit a definition for each substituted variable. +# However, there is still one case in which @VAR@ use is not just +# legitimate, but actually required: when augmenting an automake-defined +# variable with a prefix. For example, gettext uses this: +# MAKEINFO = env LANG= LC_MESSAGES= LC_ALL= LANGUAGE= @MAKEINFO@ +# otherwise, makeinfo would put German or French (current locale) +# navigation hints in the otherwise-English documentation. +# +# Allow the package to add exceptions via a hook in cfg.mk; +# for example, @PRAGMA_SYSTEM_HEADER@ can be permitted by +# setting this to ' && !/PRAGMA_SYSTEM_HEADER/'. +_makefile_at_at_check_exceptions ?= +sc_makefile_at_at_check: + @perl -ne '/\@\w+\@/' \ + -e ' && !/(\w+)\s+=.*\@\1\@$$/' \ + -e ''$(_makefile_at_at_check_exceptions) \ + -e 'and (print "$$ARGV:$$.: $$_"), $$m=1; END {exit !$$m}' \ + $$($(VC_LIST_EXCEPT) | $(GREP) -E '(^|/)(Makefile\.am|[^/]+\.mk)$$') \ + && { echo '$(ME): use $$(...), not @...@' 1>&2; exit 1; } || : + +news-check: NEWS + $(AM_V_GEN)if $(SED) -n $(news-check-lines-spec)p $< \ + | $(GREP) -E $(news-check-regexp) >/dev/null; then \ + :; \ + else \ + echo 'NEWS: $$(news-check-regexp) failed to match' 1>&2; \ + exit 1; \ + fi + +sc_makefile_TAB_only_indentation: + @prohibit='^ [ ]{8}' \ + in_vc_files='akefile|\.mk$$' \ + halt='found TAB-8-space indentation' \ + $(_sc_search_regexp) + +sc_m4_quote_check: + @prohibit='(AC_DEFINE(_UNQUOTED)?|AC_DEFUN)\([^[]' \ + in_vc_files='(^configure\.ac|\.m4)$$' \ + halt='quote the first arg to AC_DEF*' \ + $(_sc_search_regexp) + +fix_po_file_diag = \ +'you have changed the set of files with translatable diagnostics;\n\ +apply the above patch\n' + +# Generate a list of files in which to search for translatable strings. +perl_translatable_files_list_ = \ + -e 'foreach $$file (@ARGV) {' \ + -e ' \# Consider only file extensions with one or two letters' \ + -e ' $$file =~ /\...?$$/ or next;' \ + -e ' \# Ignore m4 and mk files' \ + -e ' $$file =~ /\.m[4k]$$/ and next;' \ + -e ' \# Ignore a .c or .h file with a corresponding .l or .y file' \ + -e ' $$file =~ /(.+)\.[ch]$$/ && (-e "$${1}.l" || -e "$${1}.y")' \ + -e ' and next;' \ + -e ' \# Skip unreadable files' \ + -e ' -r $$file or next;' \ + -e ' print "$$file ";' \ + -e '}' + +# Verify that all source files using _() (more specifically, files that +# match $(_gl_translatable_string_re)) are listed in po/POTFILES.in. +po_file ?= $(srcdir)/po/POTFILES.in +generated_files ?= $(srcdir)/lib/*.[ch] +_gl_translatable_string_re ?= \b(N?_|gettext *)\([^)"]*("|$$) +sc_po_check: + @if test -f $(po_file); then \ + $(GREP) -E -v '^(#|$$)' $(po_file) \ + | $(GREP) -v '^src/false\.c$$' | sort > $@-1; \ + { $(VC_LIST_EXCEPT); echo $(generated_files); } \ + | xargs perl $(perl_translatable_files_list_) \ + | xargs $(GREP) -E -l '$(_gl_translatable_string_re)' \ + | $(SED) 's|^$(_dot_escaped_srcdir)/||' \ + | sort -u > $@-2; \ + diff -u -L $(po_file) -L $(po_file) $@-1 $@-2 \ + || { printf '$(ME): '$(fix_po_file_diag) 1>&2; exit 1; }; \ + rm -f $@-1 $@-2; \ + fi + +# Sometimes it is useful to change the PATH environment variable +# in Makefiles. When doing so, it's better not to use the Unix-centric +# path separator of ':', but rather the automake-provided '$(PATH_SEPARATOR)'. +msg = 'Do not use ":" above; use $$(PATH_SEPARATOR) instead' +sc_makefile_path_separator_check: + @prohibit='PATH[=].*:' \ + in_vc_files='akefile|\.mk$$' \ + halt=$(msg) \ + $(_sc_search_regexp) + +# Check that 'make alpha' will not fail at the end of the process, +# i.e., when pkg-M.N.tar.xz already exists (either in "." or in ../release) +# and is read-only. +writable-files: + $(AM_V_GEN)if test -d $(release_archive_dir); then \ + for file in $(DIST_ARCHIVES); do \ + for p in ./ $(release_archive_dir)/; do \ + test -e $$p$$file || continue; \ + test -w $$p$$file \ + || { echo ERROR: $$p$$file is not writable; fail=1; }; \ + done; \ + done; \ + test "$$fail" && exit 1 || : ; \ + else :; \ + fi + +v_etc_file = $(gnulib_dir)/lib/version-etc.c +sample-test = tests/sample-test +texi = doc/$(PACKAGE).texi +# Make sure that the copyright date in $(v_etc_file) is up to date. +# Do the same for the $(sample-test) and the main doc/.texi file. +sc_copyright_check: + @require='enum { COPYRIGHT_YEAR = '$$(date +%Y)' };' \ + in_files=$(v_etc_file) \ + halt='out of date copyright in $(v_etc_file); update it' \ + $(_sc_search_regexp) + @require='# Copyright \(C\) '$$(date +%Y)' Free' \ + in_vc_files=$(sample-test) \ + halt='out of date copyright in $(sample-test); update it' \ + $(_sc_search_regexp) + @require='Copyright @copyright\{\} .*'$$(date +%Y) \ + in_vc_files=$(texi) \ + halt='out of date copyright in $(texi); update it' \ + $(_sc_search_regexp) + +# If tests/help-version exists and seems to be new enough, assume that its +# use of init.sh and path_prepend_ is correct, and ensure that every other +# use of init.sh is identical. +# This is useful because help-version cross-checks prog --version +# with $(VERSION), which verifies that its path_prepend_ invocation +# sets PATH correctly. This is an inexpensive way to ensure that +# the other init.sh-using tests also get it right. +_hv_file ?= $(srcdir)/tests/help-version +_hv_regex_weak ?= ^ *\. .*/init\.sh" +# Fix syntax-highlighters " +_hv_regex_strong ?= ^ *\. "\$${srcdir=\.}/init\.sh" +sc_cross_check_PATH_usage_in_tests: + @if test -f $(_hv_file); then \ + $(GREP) -l 'VERSION mismatch' $(_hv_file) >/dev/null \ + || { echo "$@: skipped: no such file: $(_hv_file)" 1>&2; \ + exit 0; }; \ + $(GREP) -lE '$(_hv_regex_strong)' $(_hv_file) >/dev/null \ + || { echo "$@: $(_hv_file) lacks conforming use of init.sh" 1>&2; \ + exit 1; }; \ + good=$$($(GREP) -E '$(_hv_regex_strong)' $(_hv_file)); \ + $(VC_LIST_EXCEPT) \ + | xargs $(GREP) -lE '$(_hv_regex_weak)' \ + | xargs $(GREP) -LFx "$$good" \ + | $(GREP) . \ + && { printf "$(ME): the above files use" \ + " path_prepend_ inconsistently\n" 1>&2; \ + exit 1; } \ + || :; \ + fi + +# BRE regex of file contents to identify a test script. +_test_script_regex ?= \<init\.sh\> + +# In tests, use "compare expected actual", not the reverse. +sc_prohibit_reversed_compare_failure: + @prohibit='\<compare [^ ]+ ([^ ]*exp|/dev/null)' \ + containing='$(_test_script_regex)' \ + halt='reversed compare arguments' \ + $(_sc_search_regexp) + +# #if HAVE_... will evaluate to false for any non numeric string. +# That would be flagged by using -Wundef, however gnulib currently +# tests many undefined macros, and so we can't enable that option. +# So at least preclude common boolean strings as macro values. +sc_Wundef_boolean: + @prohibit='^#define.*(yes|no|true|false)$$' \ + in_files='$(CONFIG_INCLUDE)' \ + halt='Use 0 or 1 for macro values' \ + $(_sc_search_regexp) + +# Even if you use pathmax.h to guarantee that PATH_MAX is defined, it might +# not be constant, or might overflow a stack. In general, use PATH_MAX as +# a limit, not an array or alloca size. +sc_prohibit_path_max_allocation: + @prohibit='(\balloca *\([^)]*|\[[^]]*)\bPATH_MAX' \ + halt='Avoid stack allocations of size PATH_MAX' \ + $(_sc_search_regexp) + +sc_vulnerable_makefile_CVE-2009-4029: + @prohibit='perm -777 -exec chmod a\+rwx|chmod 777 \$$\(distdir\)' \ + in_files='(^|/)Makefile\.in$$' \ + halt=$$(printf '%s\n' \ + 'the above files are vulnerable; beware of running' \ + ' "make dist*" rules, and upgrade to fixed automake' \ + ' see https://bugzilla.redhat.com/show_bug.cgi?id=542609 for details') \ + $(_sc_search_regexp) + +sc_vulnerable_makefile_CVE-2012-3386: + @prohibit='chmod a\+w \$$\(distdir\)' \ + in_files='(^|/)Makefile\.in$$' \ + halt=$$(printf '%s\n' \ + 'the above files are vulnerable; beware of running' \ + ' "make distcheck", and upgrade to fixed automake' \ + ' see https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2012-3386 for details') \ + $(_sc_search_regexp) + +vc-diff-check: + $(AM_V_GEN)(unset CDPATH; cd $(srcdir) && $(VC) diff) > vc-diffs || : + $(AM_V_at)if test -s vc-diffs; then \ + cat vc-diffs; \ + echo "Some files are locally modified:" 1>&2; \ + exit 1; \ + else \ + rm vc-diffs; \ + fi + +rel-files = $(DIST_ARCHIVES) + +gnulib-version = $$(cd $(gnulib_dir) \ + && { git describe || git rev-parse --short=10 HEAD; } ) +bootstrap-tools ?= autoconf,automake,gnulib + +gpgv = $$(gpgv2 --version >/dev/null && echo gpgv2 || echo gpgv) +# If it's not already specified, derive the GPG key ID from +# the signed tag we've just applied to mark this release. +gpg_key_ID ?= \ + $$(cd $(srcdir) \ + && git cat-file tag v$(VERSION) \ + | $(gpgv) --status-fd 1 --keyring /dev/null - - 2>/dev/null \ + | awk '/^\[GNUPG:\] ERRSIG / {print $$3; exit}') + +translation_project_ ?= coordinator@translationproject.org + +# Make info-gnu the default only for a stable release. +announcement_Cc_stable = $(translation_project_), $(PACKAGE_BUGREPORT) +announcement_mail_headers_stable = \ + To: info-gnu@gnu.org \ + Cc: $(announcement_Cc_) \ + Mail-Followup-To: $(PACKAGE_BUGREPORT) + +announcement_Cc_alpha = $(translation_project_) +announcement_mail_headers_alpha = \ + To: $(PACKAGE_BUGREPORT) \ + Cc: $(announcement_Cc_) + +announcement_mail_Cc_beta = $(announcement_mail_Cc_alpha) +announcement_mail_headers_beta = $(announcement_mail_headers_alpha) + +announcement_mail_Cc_ ?= $(announcement_mail_Cc_$(release-type)) +announcement_mail_headers_ ?= $(announcement_mail_headers_$(release-type)) +announcement: NEWS ChangeLog $(rel-files) +# Not $(AM_V_GEN) since the output of this command serves as +# announcement message: it would start with " GEN announcement". + $(AM_V_at)$(srcdir)/$(_build-aux)/announce-gen \ + --mail-headers='$(announcement_mail_headers_)' \ + --release-type=$(release-type) \ + --package=$(PACKAGE) \ + --prev=$(PREV_VERSION) \ + --curr=$(VERSION) \ + --gpg-key-id=$(gpg_key_ID) \ + --srcdir=$(srcdir) \ + --news=$(srcdir)/NEWS \ + --bootstrap-tools=$(bootstrap-tools) \ + $$(case ,$(bootstrap-tools), in (*,gnulib,*) \ + echo --gnulib-version=$(gnulib-version);; esac) \ + --no-print-checksums \ + $(addprefix --url-dir=, $(url_dir_list)) + +.PHONY: release-commit +release-commit: + $(AM_V_GEN)cd $(srcdir) \ + && $(_build-aux)/do-release-commit-and-tag \ + -C $(abs_builddir) $(RELEASE) + +## ---------------- ## +## Updating files. ## +## ---------------- ## + +ftp-gnu = https://ftp.gnu.org/gnu +www-gnu = https://www.gnu.org + +upload_dest_dir_ ?= $(PACKAGE) +upload_command = \ + $(srcdir)/$(_build-aux)/gnupload $(GNUPLOADFLAGS) \ + --to $(gnu_rel_host):$(upload_dest_dir_) \ + $(rel-files) +emit_upload_commands: + @echo ===================================== + @echo ===================================== + @echo '$(upload_command)' + @echo '# send the ~/announce-$(my_distdir) e-mail' + @echo ===================================== + @echo ===================================== + +.PHONY: upload +upload: + $(AM_V_GEN)$(upload_command) + +define emit-commit-log + printf '%s\n' 'maint: post-release administrivia' '' \ + '* NEWS: Add header line for next release.' \ + '* .prev-version: Record previous version.' \ + '* cfg.mk (old_NEWS_hash): Auto-update.' +endef + +.PHONY: no-submodule-changes +no-submodule-changes: + $(AM_V_GEN)if test -d $(srcdir)/.git \ + && git --version >/dev/null 2>&1; then \ + diff=$$(cd $(srcdir) && git submodule -q foreach \ + git diff-index --name-only HEAD) \ + || exit 1; \ + case $$diff in '') ;; \ + *) echo '$(ME): submodule files are locally modified:'; \ + echo "$$diff"; exit 1;; esac; \ + else \ + : ; \ + fi + +submodule-checks ?= no-submodule-changes public-submodule-commit + +# Ensure that each sub-module commit we're using is public. +# Without this, it is too easy to tag and release code that +# cannot be built from a fresh clone. +.PHONY: public-submodule-commit +public-submodule-commit: + $(AM_V_GEN)if test -d $(srcdir)/.git \ + && git --version >/dev/null 2>&1; then \ + cd $(srcdir) && \ + git submodule --quiet foreach \ + 'test "$$(git rev-parse "$$sha1")" \ + = "$$(git merge-base origin "$$sha1")"' \ + || { echo '$(ME): found non-public submodule commit' >&2; \ + exit 1; }; \ + else \ + : ; \ + fi +# This rule has a high enough utility/cost ratio that it should be a +# dependent of "check" by default. However, some of us do occasionally +# commit a temporary change that deliberately points to a non-public +# submodule commit, and want to be able to use rules like "make check". +# In that case, run e.g., "make check gl_public_submodule_commit=" +# to disable this test. +gl_public_submodule_commit ?= public-submodule-commit +check: $(gl_public_submodule_commit) + +.PHONY: alpha beta stable release +ALL_RECURSIVE_TARGETS += alpha beta stable +alpha beta stable: $(local-check) writable-files $(submodule-checks) + $(AM_V_GEN)test $@ = stable \ + && { echo $(VERSION) | $(GREP) -E '^[0-9]+(\.[0-9]+)+$$' \ + || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\ + || : + $(AM_V_at)$(MAKE) vc-diff-check + $(AM_V_at)$(MAKE) news-check + $(AM_V_at)$(MAKE) distcheck + $(AM_V_at)$(MAKE) dist + $(AM_V_at)$(MAKE) $(release-prep-hook) RELEASE_TYPE=$@ + $(AM_V_at)$(MAKE) -s emit_upload_commands RELEASE_TYPE=$@ + +release: + $(AM_V_GEN)$(MAKE) _version + $(AM_V_GEN)$(MAKE) $(release-type) + +# Override this in cfg.mk if you follow different procedures. +release-prep-hook ?= release-prep + +gl_noteworthy_news_ = * Noteworthy changes in release ?.? (????-??-??) [?] +.PHONY: release-prep +release-prep: + $(AM_V_GEN)$(MAKE) --no-print-directory -s announcement \ + > ~/announce-$(my_distdir) + $(AM_V_at)if test -d $(release_archive_dir); then \ + ln $(rel-files) $(release_archive_dir); \ + chmod a-w $(rel-files); \ + fi + $(AM_V_at)echo $(VERSION) > $(prev_version_file) + $(AM_V_at)$(MAKE) update-NEWS-hash + $(AM_V_at)perl -pi \ + -e '$$. == 3 and print "$(gl_noteworthy_news_)\n\n\n"' \ + $(srcdir)/NEWS + $(AM_V_at)msg=$$($(emit-commit-log)) || exit 1; \ + cd $(srcdir) && $(VC) commit -m "$$msg" -a + +# Override this with e.g., -s $(srcdir)/some_other_name.texi +# if the default $(PACKAGE)-derived name doesn't apply. +gendocs_options_ ?= + +.PHONY: web-manual +web-manual: + $(AM_V_GEN)test -z "$(manual_title)" \ + && { echo define manual_title in cfg.mk 1>&2; exit 1; } || : + $(AM_V_at)cd '$(srcdir)/doc'; \ + $(SHELL) ../$(_build-aux)/gendocs.sh $(gendocs_options_) \ + -o '$(abs_builddir)/doc/manual' \ + --email $(PACKAGE_BUGREPORT) $(PACKAGE) \ + "$(PACKAGE_NAME) - $(manual_title)" + $(AM_V_at)echo " *** Upload the doc/manual directory to web-cvs." + +.PHONY: web-manual-update +web-manual-update: + $(AM_V_GEN)cd $(srcdir) \ + && $(_build-aux)/gnu-web-doc-update -C $(abs_builddir) + + +# Code Coverage + +init-coverage: + $(MAKE) $(AM_MAKEFLAGS) clean + lcov --directory . --zerocounters + +COVERAGE_CCOPTS ?= "-g --coverage" +COVERAGE_OUT ?= doc/coverage + +build-coverage: + $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS) + $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS) check + mkdir -p $(COVERAGE_OUT) + lcov --directory . --output-file $(COVERAGE_OUT)/$(PACKAGE).info \ + --capture + +gen-coverage: + genhtml --output-directory $(COVERAGE_OUT) \ + $(COVERAGE_OUT)/$(PACKAGE).info \ + --highlight --frames --legend \ + --title "$(PACKAGE_NAME)" + +coverage: + $(MAKE) init-coverage + $(MAKE) build-coverage + $(MAKE) gen-coverage + +# Some projects carry local adjustments for gnulib modules via patches in +# a gnulib patch directory whose default name is gl/ (defined in bootstrap +# via local_gl_dir=gl). Those patches become stale as the originals evolve +# in gnulib. Use this rule to refresh any stale patches. It applies each +# patch to the original in $(gnulib_dir) and uses the temporary result to +# generate a fuzz-free .diff file. If you customize the name of your local +# gnulib patch directory via bootstrap.conf, this rule detects that name. +# Run this from a non-VPATH (i.e., srcdir) build directory. +.PHONY: refresh-gnulib-patches +refresh-gnulib-patches: + gl=gl; \ + if test -f bootstrap.conf; then \ + t=$$(perl -lne '/^\s*local_gl_dir=(\S+)/ and $$d=$$1;' \ + -e 'END{defined $$d and print $$d}' bootstrap.conf); \ + test -n "$$t" && gl=$$t; \ + fi; \ + for diff in $$(cd $$gl; git ls-files | $(GREP) '\.diff$$'); do \ + b=$$(printf %s "$$diff"|$(SED) 's/\.diff$$//'); \ + VERSION_CONTROL=none \ + patch "$(gnulib_dir)/$$b" "$$gl/$$diff" || exit 1; \ + ( cd $(gnulib_dir) || exit 1; \ + git diff "$$b" > "../$$gl/$$diff"; \ + git checkout $$b ) || exit 1; \ + done + +# Update gettext files. +PACKAGE ?= $(shell basename $(PWD)) +PO_DOMAIN ?= $(PACKAGE) +POURL = https://translationproject.org/latest/$(PO_DOMAIN)/ +PODIR ?= po +refresh-po: + rm -f $(PODIR)/*.po && \ + echo "$(ME): getting translations into po (please ignore the robots.txt ERROR 404)..." && \ + wget --no-verbose --directory-prefix $(PODIR) --no-directories --recursive --level 1 --accept .po --accept .po.1 $(POURL) && \ + echo 'en@boldquot' > $(PODIR)/LINGUAS && \ + echo 'en@quot' >> $(PODIR)/LINGUAS && \ + ls $(PODIR)/*.po | $(SED) 's/\.po//;s,$(PODIR)/,,' | \ + sort >> $(PODIR)/LINGUAS + + # Running indent once is not idempotent, but running it twice is. +INDENT_SOURCES ?= $(C_SOURCES) +.PHONY: indent +indent: + indent $(INDENT_SOURCES) + indent $(INDENT_SOURCES) + +# If you want to set UPDATE_COPYRIGHT_* environment variables, +# put the assignments in this variable. +update-copyright-env ?= + +# Run this rule once per year (usually early in January) +# to update all FSF copyright year lists in your project. +# If you have an additional project-specific rule, +# add it in cfg.mk along with a line 'update-copyright: prereq'. +# By default, exclude all variants of COPYING; you can also +# add exemptions (such as ChangeLog..* for rotated change logs) +# in the file .x-update-copyright. +.PHONY: update-copyright +update-copyright: + $(AM_V_GEN)$(GREP) -l -w Copyright \ + $$(export VC_LIST_EXCEPT_DEFAULT=COPYING && $(VC_LIST_EXCEPT)) \ + | $(update-copyright-env) xargs $(srcdir)/$(_build-aux)/$@ + +# This tight_scope test is skipped with a warning if $(_gl_TS_headers) is not +# overridden and $(_gl_TS_dir)/Makefile.am does not mention noinst_HEADERS. + +# NOTE: to override any _gl_TS_* default value, you must +# define the variable(s) using "export" in cfg.mk. +_gl_TS_dir ?= src + +ALL_RECURSIVE_TARGETS += sc_tight_scope +sc_tight_scope: tight-scope.mk + @fail=0; \ + if ! $(GREP) '^ *export _gl_TS_headers *=' $(srcdir)/cfg.mk \ + > /dev/null \ + && ! $(GREP) -w noinst_HEADERS $(srcdir)/$(_gl_TS_dir)/Makefile.am \ + > /dev/null 2>&1; then \ + echo '$(ME): skipping $@'; \ + else \ + $(MAKE) -s -C $(_gl_TS_dir) \ + -f Makefile \ + -f $(abs_top_srcdir)/cfg.mk \ + -f $(abs_top_builddir)/$< \ + _gl_tight_scope \ + || fail=1; \ + fi; \ + rm -f $<; \ + exit $$fail + +tight-scope.mk: $(ME) + @rm -f $@ $@-t + @perl -ne '/^# TS-start/.../^# TS-end/ and print' $(srcdir)/$(ME) > $@-t + @chmod a=r $@-t && mv $@-t $@ + +ifeq (a,b) +# TS-start + +# Most functions should have static scope. +# Any that don't must be marked with 'extern', but 'main' +# and 'usage' are exceptions: they're always extern, but +# do not need to be marked. Symbols matching '__.*' are +# reserved by the compiler, so are automatically excluded below. +_gl_TS_unmarked_extern_functions ?= main usage +_gl_TS_function_match ?= /^(?:$(_gl_TS_extern)) +.*?(\w+) *\(/ + +# If your project uses a macro like "XTERN", then put +# the following in cfg.mk to override this default: +# export _gl_TS_extern = extern|XTERN +_gl_TS_extern ?= extern + +# The second nm|grep checks for file-scope variables with 'extern' scope. +# Without gnulib's progname module, you might put program_name here. +# Symbols matching '__.*' are reserved by the compiler, +# so are automatically excluded below. +_gl_TS_unmarked_extern_vars ?= + +# NOTE: the _match variables are perl expressions -- not mere regular +# expressions -- so that you can extend them to match other patterns +# and easily extract matched variable names. +# For example, if your project declares some global variables via +# a macro like this: GLOBAL(type, var_name, initializer), then you +# can override this definition to automatically extract those names: +# export _gl_TS_var_match = \ +# /^(?:$(_gl_TS_extern)) .*?\**(\w+)(\[.*?\])?;/ || /\bGLOBAL\(.*?,\s*(.*?),/ +_gl_TS_var_match ?= /^(?:$(_gl_TS_extern)) .*?(\w+)(\[.*?\])?;/ + +# The names of object files in (or relative to) $(_gl_TS_dir). +_gl_TS_obj_files ?= *.$(OBJEXT) + +# Files in which to search for the one-line style extern declarations. +# $(_gl_TS_dir)-relative. +_gl_TS_headers ?= $(noinst_HEADERS) +_gl_TS_other_headers ?= *.h + +.PHONY: _gl_tight_scope +_gl_tight_scope: $(bin_PROGRAMS) + sed_wrap='s/^/^_?/;s/$$/$$/'; \ + t=exceptions-$$$$; \ + trap 's=$$?; rm -f $$t; exit $$s' 0; \ + for sig in 1 2 3 13 15; do \ + eval "trap 'v=`expr $$sig + 128`; (exit $$v); exit $$v' $$sig"; \ + done; \ + src=`for f in $(SOURCES); do \ + test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \ + hdr=`for f in $(_gl_TS_headers); do \ + test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \ + ( printf '%s\n' '__.*' $(_gl_TS_unmarked_extern_functions); \ + $(GREP) -h -A1 '^extern .*[^;]$$' $$src \ + | $(GREP) -vE '^(extern |--|#)' | $(SED) 's/ .*//; /^$$/d'; \ + perl -lne \ + '$(_gl_TS_function_match) and print $$1' $$hdr; \ + ) | sort -u | $(SED) "$$sed_wrap" > $$t; \ + nm -g $(_gl_TS_obj_files)|$(SED) -n 's/.* T //p'|$(GREP) -Ev -f $$t \ + && { echo the above functions should have static scope >&2; \ + exit 1; } || : ; \ + ( printf '%s\n' '__.*' main $(_gl_TS_unmarked_extern_vars); \ + perl -lne '$(_gl_TS_var_match) and print $$1' \ + $$hdr $(_gl_TS_other_headers) \ + ) | sort -u | $(SED) "$$sed_wrap" > $$t; \ + nm -g $(_gl_TS_obj_files) | $(SED) -n 's/.* [BCDGRS] //p' \ + | sort -u | $(GREP) -Ev -f $$t \ + && { echo the above variables should have static scope >&2; \ + exit 1; } || : +# TS-end +endif diff --git a/devspec.en_US/project/recutils/man/Makefile b/devspec.en_US/project/recutils/man/Makefile new file mode 100755 index 0000000..3537728 --- /dev/null +++ b/devspec.en_US/project/recutils/man/Makefile @@ -0,0 +1,1833 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# man/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# Makefile.am for recutils/man + +# Copyright (C) 2010 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/recutils +pkgincludedir = $(includedir)/recutils +pkglibdir = $(libdir)/recutils +pkglibexecdir = $(libexecdir)/recutils +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +#am__append_1 = mdb2rec.1 +subdir = man +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_$(V)) +am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +man1dir = $(mandir)/man1 +am__installdirs = "$(DESTDIR)$(man1dir)" +NROFF = nroff +MANS = $(man_MANS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing aclocal-1.15 +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = $${TAR-tar} +AM_DEFAULT_VERBOSITY = 1 +APPLE_UNIVERSAL_BUILD = 0 +AR = ar +ARFLAGS = cr +ASM_SYMBOL_PREFIX = "" +AUTOCONF = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoconf +AUTOHEADER = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoheader +AUTOMAKE = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing automake-1.15 +AWK = gawk +BASH_HEADERS = /usr/include/bash +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CA68 = +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CHECK_CFLAGS = +CHECK_LIBS = +CONFIG_INCLUDE = src/config.h +CPP = gcc -E +CPPFLAGS = +CURLLIBS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = false +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FGREP = /bin/grep -F +FLOAT_H = +FLOOR_LIBM = -lm +GETOPT_CDEFS_H = +GETOPT_H = +GETTEXT_MACRO_VERSION = 0.19 +GLIBC21 = yes +GLIB_CFLAGS = +GLIB_LIBS = +GMSGFMT = /usr/bin/msgfmt +GMSGFMT_015 = /usr/bin/msgfmt +GNULIB_ACOSF = 0 +GNULIB_ACOSL = 0 +GNULIB_ASINF = 0 +GNULIB_ASINL = 0 +GNULIB_ATAN2F = 0 +GNULIB_ATANF = 0 +GNULIB_ATANL = 0 +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CANONICALIZE_FILE_NAME = 1 +GNULIB_CBRT = 0 +GNULIB_CBRTF = 0 +GNULIB_CBRTL = 0 +GNULIB_CEIL = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHDIR = 1 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 1 +GNULIB_COPYSIGN = 0 +GNULIB_COPYSIGNF = 0 +GNULIB_COPYSIGNL = 0 +GNULIB_COSF = 0 +GNULIB_COSHF = 0 +GNULIB_COSL = 0 +GNULIB_CTIME = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP = 0 +GNULIB_DUP2 = 1 +GNULIB_DUP3 = 0 +GNULIB_DUPLOCALE = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 1 +GNULIB_EXP2 = 0 +GNULIB_EXP2F = 0 +GNULIB_EXP2L = 0 +GNULIB_EXPF = 0 +GNULIB_EXPL = 0 +GNULIB_EXPLICIT_BZERO = 0 +GNULIB_EXPM1 = 0 +GNULIB_EXPM1F = 0 +GNULIB_EXPM1L = 0 +GNULIB_FABSF = 0 +GNULIB_FABSL = 0 +GNULIB_FACCESSAT = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCHMODAT = 0 +GNULIB_FCHOWNAT = 0 +GNULIB_FCLOSE = 0 +GNULIB_FCNTL = 1 +GNULIB_FDATASYNC = 0 +GNULIB_FDOPEN = 0 +GNULIB_FFLUSH = 0 +GNULIB_FFS = 0 +GNULIB_FFSL = 0 +GNULIB_FFSLL = 0 +GNULIB_FGETC = 1 +GNULIB_FGETS = 1 +GNULIB_FLOCK = 1 +GNULIB_FLOOR = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FMA = 0 +GNULIB_FMAF = 0 +GNULIB_FMAL = 0 +GNULIB_FMOD = 0 +GNULIB_FMODF = 0 +GNULIB_FMODL = 0 +GNULIB_FOPEN = 0 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 1 +GNULIB_FPURGE = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREAD = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPF = 0 +GNULIB_FREXPL = 1 +GNULIB_FSCANF = 1 +GNULIB_FSEEK = 1 +GNULIB_FSEEKO = 1 +GNULIB_FSTAT = 1 +GNULIB_FSTATAT = 0 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 1 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FUTIMENS = 0 +GNULIB_FWRITE = 1 +GNULIB_GETC = 1 +GNULIB_GETCHAR = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 1 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETGROUPS = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 1 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETPASS = 1 +GNULIB_GETSUBOPT = 0 +GNULIB_GETTIMEOFDAY = 1 +GNULIB_GETUSERSHELL = 0 +GNULIB_GL_UNISTD_H_GETOPT = +GNULIB_GRANTPT = 0 +GNULIB_GROUP_MEMBER = 1 +GNULIB_HYPOT = 0 +GNULIB_HYPOTF = 0 +GNULIB_HYPOTL = 0 +GNULIB_ILOGB = 0 +GNULIB_ILOGBF = 0 +GNULIB_ILOGBL = 0 +GNULIB_IMAXABS = 0 +GNULIB_IMAXDIV = 0 +GNULIB_ISATTY = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_ISWBLANK = 0 +GNULIB_ISWCTYPE = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPF = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LINKAT = 0 +GNULIB_LOCALECONV = 1 +GNULIB_LOCALENAME = 0 +GNULIB_LOCALTIME = 0 +GNULIB_LOG = 0 +GNULIB_LOG10 = 0 +GNULIB_LOG10F = 0 +GNULIB_LOG10L = 0 +GNULIB_LOG1P = 0 +GNULIB_LOG1PF = 0 +GNULIB_LOG1PL = 0 +GNULIB_LOG2 = 0 +GNULIB_LOG2F = 0 +GNULIB_LOG2L = 0 +GNULIB_LOGB = 0 +GNULIB_LOGBF = 0 +GNULIB_LOGBL = 0 +GNULIB_LOGF = 0 +GNULIB_LOGL = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MBRLEN = 1 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MBTOWC = 1 +GNULIB_MEMCHR = 1 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDIRAT = 0 +GNULIB_MKDTEMP = 0 +GNULIB_MKFIFO = 0 +GNULIB_MKFIFOAT = 0 +GNULIB_MKNOD = 0 +GNULIB_MKNODAT = 0 +GNULIB_MKOSTEMP = 1 +GNULIB_MKOSTEMPS = 0 +GNULIB_MKSTEMP = 1 +GNULIB_MKSTEMPS = 0 +GNULIB_MKTIME = 1 +GNULIB_MODF = 0 +GNULIB_MODFF = 0 +GNULIB_MODFL = 0 +GNULIB_NANOSLEEP = 0 +GNULIB_NL_LANGINFO = 1 +GNULIB_NONBLOCKING = 0 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_OPENAT = 0 +GNULIB_OVERRIDES_STRUCT_STAT = 0 +GNULIB_OVERRIDES_WINT_T = 0 +GNULIB_PCLOSE = 0 +GNULIB_PERROR = 0 +GNULIB_PIPE = 0 +GNULIB_PIPE2 = 0 +GNULIB_POPEN = 0 +GNULIB_POSIX_OPENPT = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_POWF = 0 +GNULIB_PREAD = 0 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 1 +GNULIB_PTHREAD_SIGMASK = 0 +GNULIB_PTSNAME = 0 +GNULIB_PTSNAME_R = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_PWRITE = 0 +GNULIB_QSORT_R = 0 +GNULIB_RAISE = 1 +GNULIB_RANDOM = 0 +GNULIB_RANDOM_R = 1 +GNULIB_RAWMEMCHR = 1 +GNULIB_READ = 0 +GNULIB_READLINK = 1 +GNULIB_READLINKAT = 0 +GNULIB_REALLOCARRAY = 0 +GNULIB_REALLOC_POSIX = 1 +GNULIB_REALPATH = 1 +GNULIB_REMAINDER = 0 +GNULIB_REMAINDERF = 0 +GNULIB_REMAINDERL = 0 +GNULIB_REMOVE = 0 +GNULIB_RENAME = 1 +GNULIB_RENAMEAT = 0 +GNULIB_RINT = 0 +GNULIB_RINTF = 0 +GNULIB_RINTL = 0 +GNULIB_RMDIR = 1 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SCANF = 1 +GNULIB_SECURE_GETENV = 1 +GNULIB_SETENV = 1 +GNULIB_SETHOSTNAME = 0 +GNULIB_SETLOCALE = 0 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SINF = 0 +GNULIB_SINHF = 0 +GNULIB_SINL = 0 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 0 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_SQRTF = 0 +GNULIB_SQRTL = 0 +GNULIB_STAT = 1 +GNULIB_STDIO_H_NONBLOCKING = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 1 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 1 +GNULIB_STRERROR = 1 +GNULIB_STRERROR_R = 0 +GNULIB_STRFTIME = 0 +GNULIB_STRNCAT = 0 +GNULIB_STRNDUP = 0 +GNULIB_STRNLEN = 0 +GNULIB_STRPBRK = 0 +GNULIB_STRPTIME = 0 +GNULIB_STRSEP = 1 +GNULIB_STRSIGNAL = 0 +GNULIB_STRSTR = 0 +GNULIB_STRTOD = 0 +GNULIB_STRTOIMAX = 0 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRTOUMAX = 0 +GNULIB_STRVERSCMP = 1 +GNULIB_SYMLINK = 0 +GNULIB_SYMLINKAT = 0 +GNULIB_SYSTEM_POSIX = 0 +GNULIB_TANF = 0 +GNULIB_TANHF = 0 +GNULIB_TANL = 0 +GNULIB_TIMEGM = 1 +GNULIB_TIME_R = 1 +GNULIB_TIME_RZ = 1 +GNULIB_TMPFILE = 0 +GNULIB_TOWCTRANS = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCATE = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_TTYNAME_R = 0 +GNULIB_TZSET = 1 +GNULIB_UNISTD_H_NONBLOCKING = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNLINK = 0 +GNULIB_UNLINKAT = 0 +GNULIB_UNLOCKPT = 0 +GNULIB_UNSETENV = 1 +GNULIB_USLEEP = 0 +GNULIB_UTIMENSAT = 0 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 1 +GNULIB_VFSCANF = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSCANF = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WAITPID = 1 +GNULIB_WCPCPY = 0 +GNULIB_WCPNCPY = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSCASECMP = 0 +GNULIB_WCSCAT = 0 +GNULIB_WCSCHR = 0 +GNULIB_WCSCMP = 0 +GNULIB_WCSCOLL = 0 +GNULIB_WCSCPY = 0 +GNULIB_WCSCSPN = 0 +GNULIB_WCSDUP = 0 +GNULIB_WCSFTIME = 0 +GNULIB_WCSLEN = 0 +GNULIB_WCSNCASECMP = 0 +GNULIB_WCSNCAT = 0 +GNULIB_WCSNCMP = 0 +GNULIB_WCSNCPY = 0 +GNULIB_WCSNLEN = 0 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSPBRK = 0 +GNULIB_WCSRCHR = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCSSPN = 0 +GNULIB_WCSSTR = 0 +GNULIB_WCSTOK = 0 +GNULIB_WCSWIDTH = 0 +GNULIB_WCSXFRM = 0 +GNULIB_WCTOB = 1 +GNULIB_WCTOMB = 1 +GNULIB_WCTRANS = 0 +GNULIB_WCTYPE = 0 +GNULIB_WCWIDTH = 0 +GNULIB_WMEMCHR = 0 +GNULIB_WMEMCMP = 0 +GNULIB_WMEMCPY = 0 +GNULIB_WMEMMOVE = 0 +GNULIB_WMEMSET = 0 +GNULIB_WRITE = 0 +GNULIB__EXIT = 0 +GREP = /bin/grep +HAVE_ACOSF = 1 +HAVE_ACOSL = 1 +HAVE_ASINF = 1 +HAVE_ASINL = 1 +HAVE_ATAN2F = 1 +HAVE_ATANF = 1 +HAVE_ATANL = 1 +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_C99_STDINT_H = 1 +HAVE_CANONICALIZE_FILE_NAME = 1 +HAVE_CBRT = 1 +HAVE_CBRTF = 1 +HAVE_CBRTL = 1 +HAVE_CHOWN = 1 +HAVE_COPYSIGN = 1 +HAVE_COPYSIGNL = 1 +HAVE_COSF = 1 +HAVE_COSHF = 1 +HAVE_COSL = 1 +HAVE_CRTDEFS_H = 0 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_CBRTF = 1 +HAVE_DECL_CBRTL = 1 +HAVE_DECL_CEILF = 1 +HAVE_DECL_CEILL = 1 +HAVE_DECL_COPYSIGNF = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXP2 = 1 +HAVE_DECL_EXP2F = 1 +HAVE_DECL_EXP2L = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_EXPM1L = 1 +HAVE_DECL_FCHDIR = 1 +HAVE_DECL_FDATASYNC = 1 +HAVE_DECL_FLOORF = 1 +HAVE_DECL_FLOORL = 1 +HAVE_DECL_FPURGE = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_FSEEKO = 1 +HAVE_DECL_FTELLO = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETDOMAINNAME = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_GETPAGESIZE = 1 +HAVE_DECL_GETUSERSHELL = 1 +HAVE_DECL_IMAXABS = 1 +HAVE_DECL_IMAXDIV = 1 +HAVE_DECL_INITSTATE = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOCALTIME_R = 1 +HAVE_DECL_LOG10L = 1 +HAVE_DECL_LOG2 = 1 +HAVE_DECL_LOG2F = 1 +HAVE_DECL_LOG2L = 1 +HAVE_DECL_LOGB = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_REMAINDER = 1 +HAVE_DECL_REMAINDERL = 1 +HAVE_DECL_RINTF = 1 +HAVE_DECL_ROUND = 1 +HAVE_DECL_ROUNDF = 1 +HAVE_DECL_ROUNDL = 1 +HAVE_DECL_SETENV = 1 +HAVE_DECL_SETHOSTNAME = 1 +HAVE_DECL_SETSTATE = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR_R = 1 +HAVE_DECL_STRNCASECMP = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOIMAX = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_STRTOUMAX = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCATE = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_TRUNCL = 1 +HAVE_DECL_TTYNAME_R = 1 +HAVE_DECL_UNSETENV = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_DUP3 = 1 +HAVE_DUPLOCALE = 1 +HAVE_EUIDACCESS = 1 +HAVE_EXPF = 1 +HAVE_EXPL = 1 +HAVE_EXPLICIT_BZERO = 1 +HAVE_EXPM1 = 1 +HAVE_EXPM1F = 1 +HAVE_FABSF = 1 +HAVE_FABSL = 1 +HAVE_FACCESSAT = 1 +HAVE_FCHDIR = 1 +HAVE_FCHMODAT = 1 +HAVE_FCHOWNAT = 1 +HAVE_FCNTL = 1 +HAVE_FDATASYNC = 1 +HAVE_FEATURES_H = 1 +HAVE_FFS = 1 +HAVE_FFSL = 1 +HAVE_FFSLL = 1 +HAVE_FLOCK = 1 +HAVE_FMA = 1 +HAVE_FMAF = 1 +HAVE_FMAL = 1 +HAVE_FMODF = 1 +HAVE_FMODL = 1 +HAVE_FREELOCALE = 1 +HAVE_FREXPF = 1 +HAVE_FSEEKO = 1 +HAVE_FSTATAT = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_FUTIMENS = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETGROUPS = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETLOGIN = 1 +HAVE_GETOPT_H = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETPASS = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETTIMEOFDAY = 1 +HAVE_GRANTPT = 1 +HAVE_GROUP_MEMBER = 1 +HAVE_HYPOTF = 1 +HAVE_HYPOTL = 1 +HAVE_ILOGB = 1 +HAVE_ILOGBF = 1 +HAVE_ILOGBL = 1 +HAVE_IMAXDIV_T = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWBLANK = 1 +HAVE_ISWCNTRL = 1 +HAVE_LANGINFO_ALTMON = 0 +HAVE_LANGINFO_CODESET = 1 +HAVE_LANGINFO_ERA = 1 +HAVE_LANGINFO_H = 1 +HAVE_LANGINFO_T_FMT_AMPM = 1 +HAVE_LANGINFO_YESEXPR = 1 +HAVE_LCHMOD = 1 +HAVE_LCHOWN = 1 +HAVE_LDEXPF = 1 +HAVE_LIBGCRYPT = no +HAVE_LINK = 1 +HAVE_LINKAT = 1 +HAVE_LOG10F = 1 +HAVE_LOG10L = 1 +HAVE_LOG1P = 1 +HAVE_LOG1PF = 1 +HAVE_LOG1PL = 1 +HAVE_LOGBF = 1 +HAVE_LOGBL = 1 +HAVE_LOGF = 1 +HAVE_LOGL = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MAX_ALIGN_T = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSLEN = 0 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMCHR = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDIRAT = 1 +HAVE_MKDTEMP = 1 +HAVE_MKFIFO = 1 +HAVE_MKFIFOAT = 1 +HAVE_MKNOD = 1 +HAVE_MKNODAT = 1 +HAVE_MKOSTEMP = 1 +HAVE_MKOSTEMPS = 1 +HAVE_MKSTEMP = 1 +HAVE_MKSTEMPS = 1 +HAVE_MODFF = 1 +HAVE_MODFL = 1 +HAVE_MSVC_INVALID_PARAMETER_HANDLER = 0 +HAVE_NANOSLEEP = 1 +HAVE_NEWLOCALE = 1 +HAVE_NL_LANGINFO = 1 +HAVE_OPENAT = 1 +HAVE_OS_H = 0 +HAVE_PCLOSE = 1 +HAVE_PIPE = 1 +HAVE_PIPE2 = 1 +HAVE_POPEN = 1 +HAVE_POSIX_OPENPT = 1 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_POSIX_SPAWNATTR_T = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = 1 +HAVE_POWF = 1 +HAVE_PREAD = 1 +HAVE_PTHREAD_SIGMASK = 1 +HAVE_PTSNAME = 1 +HAVE_PTSNAME_R = 1 +HAVE_PWRITE = 1 +HAVE_QSORT_R = 1 +HAVE_RAISE = 1 +HAVE_RANDOM = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_READLINKAT = 1 +HAVE_REALLOCARRAY = 1 +HAVE_REALPATH = 1 +HAVE_REMAINDER = 1 +HAVE_REMAINDERF = 1 +HAVE_RENAMEAT = 1 +HAVE_RINT = 1 +HAVE_RINTL = 1 +HAVE_RPMATCH = 1 +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0 +HAVE_SCHED_H = +HAVE_SECURE_GETENV = 1 +HAVE_SETENV = 1 +HAVE_SETHOSTNAME = 1 +HAVE_SIGACTION = 1 +HAVE_SIGHANDLER_T = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SINF = 1 +HAVE_SINHF = 1 +HAVE_SINL = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_SQRTF = 1 +HAVE_SQRTL = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASECMP = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRINGS_H = 1 +HAVE_STRPBRK = 1 +HAVE_STRPTIME = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYMLINK = 1 +HAVE_SYMLINKAT = 1 +HAVE_SYS_BITYPES_H = 0 +HAVE_SYS_CDEFS_H = +HAVE_SYS_FILE_H = 1 +HAVE_SYS_INTTYPES_H = 0 +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TANF = 1 +HAVE_TANHF = 1 +HAVE_TANL = 1 +HAVE_TIMEGM = 1 +HAVE_TIMEZONE_T = 0 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_TZSET = 1 +HAVE_UNISTD_H = 1 +HAVE_UNLINKAT = 1 +HAVE_UNLOCKPT = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_USLEEP = 1 +HAVE_UTIMENSAT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCHAR_T = 1 +HAVE_WCPCPY = 1 +HAVE_WCPNCPY = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSCASECMP = 1 +HAVE_WCSCAT = 1 +HAVE_WCSCHR = 1 +HAVE_WCSCMP = 1 +HAVE_WCSCOLL = 1 +HAVE_WCSCPY = 1 +HAVE_WCSCSPN = 1 +HAVE_WCSDUP = 1 +HAVE_WCSFTIME = 1 +HAVE_WCSLEN = 1 +HAVE_WCSNCASECMP = 1 +HAVE_WCSNCAT = 1 +HAVE_WCSNCMP = 1 +HAVE_WCSNCPY = 1 +HAVE_WCSNLEN = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSPBRK = 1 +HAVE_WCSRCHR = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCSSPN = 1 +HAVE_WCSSTR = 1 +HAVE_WCSTOK = 1 +HAVE_WCSWIDTH = 1 +HAVE_WCSXFRM = 1 +HAVE_WCTRANS_T = 1 +HAVE_WCTYPE_H = 1 +HAVE_WCTYPE_T = 1 +HAVE_WINSOCK2_H = 0 +HAVE_WINT_T = 1 +HAVE_WMEMCHR = 1 +HAVE_WMEMCMP = 1 +HAVE_WMEMCPY = 1 +HAVE_WMEMMOVE = 1 +HAVE_WMEMSET = 1 +HAVE_XLOCALE_H = 1 +HAVE__BOOL = 1 +HAVE__EXIT = 1 +HELP2MAN = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing help2man +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +INT32_MAX_LT_INTMAX_MAX = 1 +INT64_MAX_EQ_LONG_MAX = 0 +INTLLIBS = +INTL_MACOSX_LIBS = +LD = /usr/bin/ld +LDFLAGS = +LEX = flex +LEXLIB = -lfl +LEX_OUTPUT_ROOT = lex.yy +LIBGCRYPT = +LIBGCRYPT_PREFIX = +LIBICONV = -liconv +LIBINTL = +LIBMULTITHREAD = -pthread -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBREADLINE = +LIBS = +LIBTHREAD = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIB_ACL = +LIB_CLOCK_GETTIME = +LIB_EACCESS = +LIB_POSIX_SPAWN = +LIB_SELINUX = +LIMITS_H = limits.h +LIPO = +LN_S = ln -s +LOCALCHARSET_TESTS_ENVIRONMENT = +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTALLOCA = +LTLIBGCRYPT = +LTLIBICONV = -liconv +LTLIBINTL = +LTLIBMULTITHREAD = -pthread +LTLIBOBJS = +LTLIBPTH = +LTLIBREADLINE = +LTLIBTHREAD = +LT_SYS_LIBRARY_PATH = +MAKEINFO = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing makeinfo +MANIFEST_TOOL = : +MDBLIBS = +MDB_DATETIME = +MKDIR_P = /bin/mkdir -p +MSGFMT = /usr/bin/msgfmt +MSGFMT_015 = /usr/bin/msgfmt +MSGMERGE = /usr/bin/msgmerge +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = <fcntl.h> +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = <getopt.h> +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = <inttypes.h> +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = <langinfo.h> +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = <limits.h> +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = <locale.h> +NEXT_AS_FIRST_DIRECTIVE_MATH_H = <math.h> +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = <signal.h> +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = <spawn.h> +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = <stdint.h> +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = <stdio.h> +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = <stdlib.h> +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = <strings.h> +NEXT_AS_FIRST_DIRECTIVE_STRING_H = <string.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = <sys/file.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = <sys/stat.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = <sys/time.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = <sys/types.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = <sys/wait.h> +NEXT_AS_FIRST_DIRECTIVE_TIME_H = <time.h> +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = <unistd.h> +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = <wchar.h> +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = <wctype.h> +NEXT_ERRNO_H = +NEXT_FCNTL_H = <fcntl.h> +NEXT_FLOAT_H = +NEXT_GETOPT_H = <getopt.h> +NEXT_INTTYPES_H = <inttypes.h> +NEXT_LANGINFO_H = <langinfo.h> +NEXT_LIMITS_H = <limits.h> +NEXT_LOCALE_H = <locale.h> +NEXT_MATH_H = <math.h> +NEXT_SCHED_H = +NEXT_SELINUX_SELINUX_H = +NEXT_SIGNAL_H = <signal.h> +NEXT_SPAWN_H = <spawn.h> +NEXT_STDARG_H = <stdarg.h> +NEXT_STDDEF_H = +NEXT_STDINT_H = <stdint.h> +NEXT_STDIO_H = <stdio.h> +NEXT_STDLIB_H = <stdlib.h> +NEXT_STRINGS_H = <strings.h> +NEXT_STRING_H = <string.h> +NEXT_SYS_FILE_H = <sys/file.h> +NEXT_SYS_STAT_H = <sys/stat.h> +NEXT_SYS_TIME_H = <sys/time.h> +NEXT_SYS_TYPES_H = <sys/types.h> +NEXT_SYS_WAIT_H = <sys/wait.h> +NEXT_TIME_H = <time.h> +NEXT_UNISTD_H = <unistd.h> +NEXT_WCHAR_H = <wchar.h> +NEXT_WCTYPE_H = <wctype.h> +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = recutils +PACKAGE_BUGREPORT = bug-recutils@gnu.org +PACKAGE_NAME = GNU recutils +PACKAGE_STRING = GNU recutils 1.8 +PACKAGE_TARNAME = recutils +PACKAGE_URL = http://www.gnu.org/software/recutils/ +PACKAGE_VERSION = 1.8 +PATH_SEPARATOR = : +PKG_CONFIG = /usr/bin/pkg-config +PKG_CONFIG_LIBDIR = +PKG_CONFIG_PATH = +POSUB = po +PRAGMA_COLUMNS = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PRIPTR_PREFIX = "l" +PRI_MACROS_BROKEN = 0 +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = 0 +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_ACOSF = 0 +REPLACE_ASINF = 0 +REPLACE_ATAN2F = 0 +REPLACE_ATANF = 0 +REPLACE_BTOWC = 0 +REPLACE_CALLOC = 0 +REPLACE_CANONICALIZE_FILE_NAME = 0 +REPLACE_CBRTF = 0 +REPLACE_CBRTL = 0 +REPLACE_CEIL = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_COSF = 0 +REPLACE_COSHF = 0 +REPLACE_CTIME = GNULIB_PORTCHECK +REPLACE_DPRINTF = 0 +REPLACE_DUP = 0 +REPLACE_DUP2 = 0 +REPLACE_DUPLOCALE = 0 +REPLACE_EXP2 = 0 +REPLACE_EXP2L = 0 +REPLACE_EXPF = 0 +REPLACE_EXPM1 = 0 +REPLACE_EXPM1F = 0 +REPLACE_FABSL = 0 +REPLACE_FACCESSAT = 0 +REPLACE_FCHOWNAT = 0 +REPLACE_FCLOSE = 0 +REPLACE_FCNTL = 1 +REPLACE_FDOPEN = 0 +REPLACE_FFLUSH = 0 +REPLACE_FLOOR = 0 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FMA = 0 +REPLACE_FMAF = 0 +REPLACE_FMAL = 0 +REPLACE_FMOD = 0 +REPLACE_FMODF = 0 +REPLACE_FMODL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 1 +REPLACE_FPURGE = 0 +REPLACE_FREELOCALE = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPF = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 0 +REPLACE_FSTAT = 0 +REPLACE_FSTATAT = 0 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_FTRUNCATE = 0 +REPLACE_FUTIMENS = 0 +REPLACE_GETCWD = 0 +REPLACE_GETDELIM = 0 +REPLACE_GETDOMAINNAME = 0 +REPLACE_GETDTABLESIZE = 0 +REPLACE_GETGROUPS = 0 +REPLACE_GETLINE = 0 +REPLACE_GETLOGIN_R = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETPASS = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_GMTIME = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_HYPOT = 0 +REPLACE_HYPOTF = 0 +REPLACE_HYPOTL = 0 +REPLACE_ILOGB = 0 +REPLACE_ILOGBF = 0 +REPLACE_ILOGBL = 0 +REPLACE_ISATTY = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWBLANK = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_ITOLD = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LINK = 0 +REPLACE_LINKAT = 0 +REPLACE_LOCALECONV = 0 +REPLACE_LOCALTIME = 0 +REPLACE_LOCALTIME_R = 0 +REPLACE_LOG = 0 +REPLACE_LOG10 = 0 +REPLACE_LOG10F = 0 +REPLACE_LOG10L = 0 +REPLACE_LOG1P = 0 +REPLACE_LOG1PF = 0 +REPLACE_LOG1PL = 0 +REPLACE_LOG2 = 0 +REPLACE_LOG2F = 0 +REPLACE_LOG2L = 0 +REPLACE_LOGB = 0 +REPLACE_LOGBF = 0 +REPLACE_LOGBL = 0 +REPLACE_LOGF = 0 +REPLACE_LOGL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MALLOC = 0 +REPLACE_MBRLEN = 1 +REPLACE_MBRTOWC = 1 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MBTOWC = 0 +REPLACE_MEMCHR = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKFIFO = 0 +REPLACE_MKNOD = 0 +REPLACE_MKSTEMP = 0 +REPLACE_MKTIME = 0 +REPLACE_MODF = 0 +REPLACE_MODFF = 0 +REPLACE_MODFL = 0 +REPLACE_NAN = 0 +REPLACE_NANOSLEEP = GNULIB_PORTCHECK +REPLACE_NEWLOCALE = 0 +REPLACE_NL_LANGINFO = 1 +REPLACE_NULL = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_OPENAT = 0 +REPLACE_PERROR = 0 +REPLACE_POPEN = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 0 +REPLACE_PREAD = 0 +REPLACE_PRINTF = 1 +REPLACE_PTHREAD_SIGMASK = 0 +REPLACE_PTSNAME = 0 +REPLACE_PTSNAME_R = 0 +REPLACE_PUTENV = 0 +REPLACE_PWRITE = 0 +REPLACE_QSORT_R = 0 +REPLACE_RAISE = 0 +REPLACE_RANDOM_R = 0 +REPLACE_READ = 0 +REPLACE_READLINK = 0 +REPLACE_READLINKAT = 0 +REPLACE_REALLOC = 0 +REPLACE_REALPATH = 0 +REPLACE_REMAINDER = 0 +REPLACE_REMAINDERF = 0 +REPLACE_REMAINDERL = 0 +REPLACE_REMOVE = 0 +REPLACE_RENAME = 0 +REPLACE_RENAMEAT = 0 +REPLACE_RMDIR = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SETENV = 0 +REPLACE_SETLOCALE = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SINF = 0 +REPLACE_SINHF = 0 +REPLACE_SLEEP = 0 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_SQRTF = 0 +REPLACE_SQRTL = 0 +REPLACE_STAT = 0 +REPLACE_STDIO_READ_FUNCS = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STPNCPY = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRCHRNUL = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRERROR_R = 0 +REPLACE_STRFTIME = GNULIB_PORTCHECK +REPLACE_STRNCAT = 0 +REPLACE_STRNDUP = 0 +REPLACE_STRNLEN = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 0 +REPLACE_STRTOD = 0 +REPLACE_STRTOIMAX = 0 +REPLACE_STRTOK_R = 0 +REPLACE_STRTOUMAX = 0 +REPLACE_STRUCT_LCONV = 0 +REPLACE_STRUCT_TIMEVAL = 0 +REPLACE_SYMLINK = 0 +REPLACE_SYMLINKAT = 0 +REPLACE_TANF = 0 +REPLACE_TANHF = 0 +REPLACE_TIMEGM = 0 +REPLACE_TMPFILE = 0 +REPLACE_TOWLOWER = 0 +REPLACE_TRUNC = 0 +REPLACE_TRUNCATE = 0 +REPLACE_TRUNCF = 0 +REPLACE_TRUNCL = 0 +REPLACE_TTYNAME_R = 0 +REPLACE_TZSET = 0 +REPLACE_UNLINK = 0 +REPLACE_UNLINKAT = 0 +REPLACE_UNSETENV = 0 +REPLACE_USLEEP = 0 +REPLACE_UTIMENSAT = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 1 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSFTIME = 0 +REPLACE_WCSNRTOMBS = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCSWIDTH = 0 +REPLACE_WCTOB = 0 +REPLACE_WCTOMB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SED = /bin/sed +SELINUX_CONTEXT_H = selinux/context.h +SET_MAKE = +SHELL = /bin/sh +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +STDARG_H = +STDBOOL_H = +STDDEF_H = +STDINT_H = stdint.h +STRIP = strip +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = 0 +TIME_H_DEFINES_STRUCT_TIMESPEC = 1 +UINT32_MAX_LT_UINTMAX_MAX = 1 +UINT64_MAX_EQ_ULONG_MAX = 0 +UNDEFINE_STRTOK_R = 0 +UNISTD_H_DEFINES_STRUCT_TIMESPEC = 0 +UNISTD_H_HAVE_WINSOCK2_H = 0 +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = 0 +USE_ACL = 0 +USE_NLS = yes +UUIDLIBS = +VERSION = 1.8 +WCHAR_T_SUFFIX = +WINDOWS_64_BIT_OFF_T = 0 +WINDOWS_64_BIT_ST_SIZE = 0 +WINDOWS_STAT_INODES = 0 +WINDOWS_STAT_TIMESPEC = 0 +WINT_T_SUFFIX = +XGETTEXT = /usr/bin/xgettext +XGETTEXT_015 = /usr/bin/xgettext +XGETTEXT_EXTRA_OPTIONS = --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format +YACC = bison -o y.tab.c +YFLAGS = +abs_builddir = /mnt/lfs/build/recutils/recutils-1.8/man +abs_srcdir = /mnt/lfs/build/recutils/recutils-1.8/man +abs_top_builddir = /mnt/lfs/build/recutils/recutils-1.8 +abs_top_srcdir = /mnt/lfs/build/recutils/recutils-1.8 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +builddir = . +crypt_support = no +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +gl_LIBOBJS = asnprintf.o asprintf.o fcntl.o fprintf.o fseterr.o localtime-buffer.o mbrlen.o mbrtowc.o mktime.o nl_langinfo.o obstack.o printf.o printf-args.o printf-parse.o readline.o regex.o time_rz.o vasnprintf.o vasprintf.o vfprintf.o +gl_LTLIBOBJS = asnprintf.lo asprintf.lo fcntl.lo fprintf.lo fseterr.lo localtime-buffer.lo mbrlen.lo mbrtowc.lo mktime.lo nl_langinfo.lo obstack.lo printf.lo printf-args.lo printf-parse.lo readline.lo regex.lo time_rz.lo vasnprintf.lo vasprintf.lo vfprintf.lo +gltests_LIBOBJS = +gltests_LTLIBOBJS = +gltests_WITNESS = IN_RECUTILS_GNULIB_TESTS +have_uuid = no +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = $(MKDIR_P) +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +runstatedir = ${localstatedir}/run +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +man_MANS = recdel.1 recfix.1 recinf.1 recins.1 recsel.1 recset.1 \ + recfmt.1 csv2rec.1 rec2csv.1 $(am__append_1) +EXTRA_DIST = $(man_MANS) +MAINTAINERCLEANFILES = $(man_MANS) + +# The man pages depend on the --help strings and the version number. +common_mandeps = $(top_srcdir)/configure.ac \ + $(top_srcdir)/utils/recutl.c + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu man/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(MANS) +installdirs: + for dir in "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man + +uninstall-man: uninstall-man1 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags-am uninstall uninstall-am uninstall-man \ + uninstall-man1 + +.PRECIOUS: Makefile + + +# Depend on the source, not the binary; we don't need to regenerate +# the binary when any source file changes, only the main one. +# Use -o so that the `missing' program can infer the output file. + +rec2csv.1: $(top_srcdir)/utils/rec2csv.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="rec to csv converter" $(builddir)/../utils/rec2csv -o $@ + +csv2rec.1: $(top_srcdir)/utils/csv2rec.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="csv to rec converter" $(builddir)/../utils/csv2rec -o $@ + +mdb2rec.1: $(top_srcdir)/utils/mdb2rec.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="mdb to rec converter" $(builddir)/../utils/mdb2rec -o $@ + +recdel.1: $(top_srcdir)/utils/recdel.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="remove records from a recfile" $(builddir)/../utils/recdel -o $@ + +recfix.1: $(top_srcdir)/utils/recfix.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="check a recfile for errors" $(builddir)/../utils/recfix -o $@ + +recinf.1: $(top_srcdir)/utils/recinf.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="print information about a recfile" $(builddir)/../utils/recinf -o $@ + +recins.1: $(top_srcdir)/utils/recins.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="insert records in a recfile" $(builddir)/../utils/recins -o $@ + +recsel.1: $(top_srcdir)/utils/recsel.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="print records from a recfile" $(builddir)/../utils/recsel -o $@ + +recset.1: $(top_srcdir)/utils/recset.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="manipulate fields in a recfile" $(builddir)/../utils/recset -o $@ + +recfmt.1: $(top_srcdir)/utils/recfmt.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="apply a template to records" $(builddir)/../utils/recfmt -o $@ + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/man/Makefile.am b/devspec.en_US/project/recutils/man/Makefile.am new file mode 100755 index 0000000..ee1be8d --- /dev/null +++ b/devspec.en_US/project/recutils/man/Makefile.am @@ -0,0 +1,73 @@ +# Makefile.am for recutils/man + +# Copyright (C) 2010 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +man_MANS = recdel.1 \ + recfix.1 \ + recinf.1 \ + recins.1 \ + recsel.1 \ + recset.1 \ + recfmt.1 \ + csv2rec.1 \ + rec2csv.1 + +if COMPILE_MDB2REC +man_MANS += mdb2rec.1 +endif + +EXTRA_DIST = $(man_MANS) +MAINTAINERCLEANFILES = $(man_MANS) + +# The man pages depend on the --help strings and the version number. +common_mandeps = $(top_srcdir)/configure.ac \ + $(top_srcdir)/utils/recutl.c + +# Depend on the source, not the binary; we don't need to regenerate +# the binary when any source file changes, only the main one. +# Use -o so that the `missing' program can infer the output file. + +rec2csv.1: $(top_srcdir)/utils/rec2csv.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="rec to csv converter" $(builddir)/../utils/rec2csv -o $@ + +csv2rec.1: $(top_srcdir)/utils/csv2rec.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="csv to rec converter" $(builddir)/../utils/csv2rec -o $@ + +mdb2rec.1: $(top_srcdir)/utils/mdb2rec.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="mdb to rec converter" $(builddir)/../utils/mdb2rec -o $@ + +recdel.1: $(top_srcdir)/utils/recdel.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="remove records from a recfile" $(builddir)/../utils/recdel -o $@ + +recfix.1: $(top_srcdir)/utils/recfix.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="check a recfile for errors" $(builddir)/../utils/recfix -o $@ + +recinf.1: $(top_srcdir)/utils/recinf.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="print information about a recfile" $(builddir)/../utils/recinf -o $@ + +recins.1: $(top_srcdir)/utils/recins.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="insert records in a recfile" $(builddir)/../utils/recins -o $@ + +recsel.1: $(top_srcdir)/utils/recsel.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="print records from a recfile" $(builddir)/../utils/recsel -o $@ + +recset.1: $(top_srcdir)/utils/recset.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="manipulate fields in a recfile" $(builddir)/../utils/recset -o $@ + +recfmt.1: $(top_srcdir)/utils/recfmt.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="apply a template to records" $(builddir)/../utils/recfmt -o $@ + +# End of Makefile.am diff --git a/devspec.en_US/project/recutils/man/Makefile.in b/devspec.en_US/project/recutils/man/Makefile.in new file mode 100755 index 0000000..11cf9b5 --- /dev/null +++ b/devspec.en_US/project/recutils/man/Makefile.in @@ -0,0 +1,1833 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Makefile.am for recutils/man + +# Copyright (C) 2010 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@COMPILE_MDB2REC_TRUE@am__append_1 = mdb2rec.1 +subdir = man +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +man1dir = $(mandir)/man1 +am__installdirs = "$(DESTDIR)$(man1dir)" +NROFF = nroff +MANS = $(man_MANS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BASH_HEADERS = @BASH_HEADERS@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CA68 = @CA68@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CURLLIBS = @CURLLIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +FLOOR_LIBM = @FLOOR_LIBM@ +GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ACOSF = @GNULIB_ACOSF@ +GNULIB_ACOSL = @GNULIB_ACOSL@ +GNULIB_ASINF = @GNULIB_ASINF@ +GNULIB_ASINL = @GNULIB_ASINL@ +GNULIB_ATAN2F = @GNULIB_ATAN2F@ +GNULIB_ATANF = @GNULIB_ATANF@ +GNULIB_ATANL = @GNULIB_ATANL@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CBRT = @GNULIB_CBRT@ +GNULIB_CBRTF = @GNULIB_CBRTF@ +GNULIB_CBRTL = @GNULIB_CBRTL@ +GNULIB_CEIL = @GNULIB_CEIL@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ +GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ +GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ +GNULIB_COSF = @GNULIB_COSF@ +GNULIB_COSHF = @GNULIB_COSHF@ +GNULIB_COSL = @GNULIB_COSL@ +GNULIB_CTIME = @GNULIB_CTIME@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_EXP2 = @GNULIB_EXP2@ +GNULIB_EXP2F = @GNULIB_EXP2F@ +GNULIB_EXP2L = @GNULIB_EXP2L@ +GNULIB_EXPF = @GNULIB_EXPF@ +GNULIB_EXPL = @GNULIB_EXPL@ +GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ +GNULIB_EXPM1 = @GNULIB_EXPM1@ +GNULIB_EXPM1F = @GNULIB_EXPM1F@ +GNULIB_EXPM1L = @GNULIB_EXPM1L@ +GNULIB_FABSF = @GNULIB_FABSF@ +GNULIB_FABSL = @GNULIB_FABSL@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FCNTL = @GNULIB_FCNTL@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FLOCK = @GNULIB_FLOCK@ +GNULIB_FLOOR = @GNULIB_FLOOR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FMA = @GNULIB_FMA@ +GNULIB_FMAF = @GNULIB_FMAF@ +GNULIB_FMAL = @GNULIB_FMAL@ +GNULIB_FMOD = @GNULIB_FMOD@ +GNULIB_FMODF = @GNULIB_FMODF@ +GNULIB_FMODL = @GNULIB_FMODL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPF = @GNULIB_FREXPF@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSTAT = @GNULIB_FSTAT@ +GNULIB_FSTATAT = @GNULIB_FSTATAT@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETPASS = @GNULIB_GETPASS@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_HYPOT = @GNULIB_HYPOT@ +GNULIB_HYPOTF = @GNULIB_HYPOTF@ +GNULIB_HYPOTL = @GNULIB_HYPOTL@ +GNULIB_ILOGB = @GNULIB_ILOGB@ +GNULIB_ILOGBF = @GNULIB_ILOGBF@ +GNULIB_ILOGBL = @GNULIB_ILOGBL@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPF = @GNULIB_LDEXPF@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LOCALENAME = @GNULIB_LOCALENAME@ +GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ +GNULIB_LOG = @GNULIB_LOG@ +GNULIB_LOG10 = @GNULIB_LOG10@ +GNULIB_LOG10F = @GNULIB_LOG10F@ +GNULIB_LOG10L = @GNULIB_LOG10L@ +GNULIB_LOG1P = @GNULIB_LOG1P@ +GNULIB_LOG1PF = @GNULIB_LOG1PF@ +GNULIB_LOG1PL = @GNULIB_LOG1PL@ +GNULIB_LOG2 = @GNULIB_LOG2@ +GNULIB_LOG2F = @GNULIB_LOG2F@ +GNULIB_LOG2L = @GNULIB_LOG2L@ +GNULIB_LOGB = @GNULIB_LOGB@ +GNULIB_LOGBF = @GNULIB_LOGBF@ +GNULIB_LOGBL = @GNULIB_LOGBL@ +GNULIB_LOGF = @GNULIB_LOGF@ +GNULIB_LOGL = @GNULIB_LOGL@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKFIFO = @GNULIB_MKFIFO@ +GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ +GNULIB_MKNOD = @GNULIB_MKNOD@ +GNULIB_MKNODAT = @GNULIB_MKNODAT@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_MKTIME = @GNULIB_MKTIME@ +GNULIB_MODF = @GNULIB_MODF@ +GNULIB_MODFF = @GNULIB_MODFF@ +GNULIB_MODFL = @GNULIB_MODFL@ +GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ +GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_POWF = @GNULIB_POWF@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_QSORT_R = @GNULIB_QSORT_R@ +GNULIB_RAISE = @GNULIB_RAISE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMAINDER = @GNULIB_REMAINDER@ +GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ +GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RINT = @GNULIB_RINT@ +GNULIB_RINTF = @GNULIB_RINTF@ +GNULIB_RINTL = @GNULIB_RINTL@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SINF = @GNULIB_SINF@ +GNULIB_SINHF = @GNULIB_SINHF@ +GNULIB_SINL = @GNULIB_SINL@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_SQRTF = @GNULIB_SQRTF@ +GNULIB_SQRTL = @GNULIB_SQRTL@ +GNULIB_STAT = @GNULIB_STAT@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRFTIME = @GNULIB_STRFTIME@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRPTIME = @GNULIB_STRPTIME@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TANF = @GNULIB_TANF@ +GNULIB_TANHF = @GNULIB_TANHF@ +GNULIB_TANL = @GNULIB_TANL@ +GNULIB_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_TZSET = @GNULIB_TZSET@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WAITPID = @GNULIB_WAITPID@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +HAVE_ACOSF = @HAVE_ACOSF@ +HAVE_ACOSL = @HAVE_ACOSL@ +HAVE_ASINF = @HAVE_ASINF@ +HAVE_ASINL = @HAVE_ASINL@ +HAVE_ATAN2F = @HAVE_ATAN2F@ +HAVE_ATANF = @HAVE_ATANF@ +HAVE_ATANL = @HAVE_ATANL@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CBRT = @HAVE_CBRT@ +HAVE_CBRTF = @HAVE_CBRTF@ +HAVE_CBRTL = @HAVE_CBRTL@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_COPYSIGN = @HAVE_COPYSIGN@ +HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ +HAVE_COSF = @HAVE_COSF@ +HAVE_COSHF = @HAVE_COSHF@ +HAVE_COSL = @HAVE_COSL@ +HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ +HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ +HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ +HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ +HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ +HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ +HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ +HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ +HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ +HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ +HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ +HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ +HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ +HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ +HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ +HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ +HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ +HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ +HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ +HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_EXPF = @HAVE_EXPF@ +HAVE_EXPL = @HAVE_EXPL@ +HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ +HAVE_EXPM1 = @HAVE_EXPM1@ +HAVE_EXPM1F = @HAVE_EXPM1F@ +HAVE_FABSF = @HAVE_FABSF@ +HAVE_FABSL = @HAVE_FABSL@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FLOCK = @HAVE_FLOCK@ +HAVE_FMA = @HAVE_FMA@ +HAVE_FMAF = @HAVE_FMAF@ +HAVE_FMAL = @HAVE_FMAL@ +HAVE_FMODF = @HAVE_FMODF@ +HAVE_FMODL = @HAVE_FMODL@ +HAVE_FREELOCALE = @HAVE_FREELOCALE@ +HAVE_FREXPF = @HAVE_FREXPF@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSTATAT = @HAVE_FSTATAT@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_FUTIMENS = @HAVE_FUTIMENS@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETPASS = @HAVE_GETPASS@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_HYPOTF = @HAVE_HYPOTF@ +HAVE_HYPOTL = @HAVE_HYPOTL@ +HAVE_ILOGB = @HAVE_ILOGB@ +HAVE_ILOGBF = @HAVE_ILOGBF@ +HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LDEXPF = @HAVE_LDEXPF@ +HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOG10F = @HAVE_LOG10F@ +HAVE_LOG10L = @HAVE_LOG10L@ +HAVE_LOG1P = @HAVE_LOG1P@ +HAVE_LOG1PF = @HAVE_LOG1PF@ +HAVE_LOG1PL = @HAVE_LOG1PL@ +HAVE_LOGBF = @HAVE_LOGBF@ +HAVE_LOGBL = @HAVE_LOGBL@ +HAVE_LOGF = @HAVE_LOGF@ +HAVE_LOGL = @HAVE_LOGL@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDIRAT = @HAVE_MKDIRAT@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKFIFO = @HAVE_MKFIFO@ +HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ +HAVE_MKNOD = @HAVE_MKNOD@ +HAVE_MKNODAT = @HAVE_MKNODAT@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MODFF = @HAVE_MODFF@ +HAVE_MODFL = @HAVE_MODFL@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ +HAVE_POWF = @HAVE_POWF@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_QSORT_R = @HAVE_QSORT_R@ +HAVE_RAISE = @HAVE_RAISE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_REMAINDER = @HAVE_REMAINDER@ +HAVE_REMAINDERF = @HAVE_REMAINDERF@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RINT = @HAVE_RINT@ +HAVE_RINTL = @HAVE_RINTL@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SINF = @HAVE_SINF@ +HAVE_SINHF = @HAVE_SINHF@ +HAVE_SINL = @HAVE_SINL@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_SQRTF = @HAVE_SQRTF@ +HAVE_SQRTL = @HAVE_SQRTL@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRPTIME = @HAVE_STRPTIME@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ +HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TANF = @HAVE_TANF@ +HAVE_TANHF = @HAVE_TANHF@ +HAVE_TANL = @HAVE_TANL@ +HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_TZSET = @HAVE_TZSET@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSFTIME = @HAVE_WCSFTIME@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ +INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBGCRYPT = @LIBGCRYPT@ +LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBREADLINE = @LIBREADLINE@ +LIBS = @LIBS@ +LIBTHREAD = @LIBTHREAD@ +LIBTOOL = @LIBTOOL@ +LIB_ACL = @LIB_ACL@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LIB_EACCESS = @LIB_EACCESS@ +LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ +LIB_SELINUX = @LIB_SELINUX@ +LIMITS_H = @LIMITS_H@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTALLOCA = @LTALLOCA@ +LTLIBGCRYPT = @LTLIBGCRYPT@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBREADLINE = @LTLIBREADLINE@ +LTLIBTHREAD = @LTLIBTHREAD@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MDBLIBS = @MDBLIBS@ +MDB_DATETIME = @MDB_DATETIME@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ +NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LIMITS_H = @NEXT_LIMITS_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_ACOSF = @REPLACE_ACOSF@ +REPLACE_ASINF = @REPLACE_ASINF@ +REPLACE_ATAN2F = @REPLACE_ATAN2F@ +REPLACE_ATANF = @REPLACE_ATANF@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CBRTF = @REPLACE_CBRTF@ +REPLACE_CBRTL = @REPLACE_CBRTL@ +REPLACE_CEIL = @REPLACE_CEIL@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_COSF = @REPLACE_COSF@ +REPLACE_COSHF = @REPLACE_COSHF@ +REPLACE_CTIME = @REPLACE_CTIME@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_EXP2 = @REPLACE_EXP2@ +REPLACE_EXP2L = @REPLACE_EXP2L@ +REPLACE_EXPF = @REPLACE_EXPF@ +REPLACE_EXPM1 = @REPLACE_EXPM1@ +REPLACE_EXPM1F = @REPLACE_EXPM1F@ +REPLACE_FABSL = @REPLACE_FABSL@ +REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOOR = @REPLACE_FLOOR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FMA = @REPLACE_FMA@ +REPLACE_FMAF = @REPLACE_FMAF@ +REPLACE_FMAL = @REPLACE_FMAL@ +REPLACE_FMOD = @REPLACE_FMOD@ +REPLACE_FMODF = @REPLACE_FMODF@ +REPLACE_FMODL = @REPLACE_FMODL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPF = @REPLACE_FREXPF@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FSTAT = @REPLACE_FSTAT@ +REPLACE_FSTATAT = @REPLACE_FSTATAT@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETPASS = @REPLACE_GETPASS@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_GMTIME = @REPLACE_GMTIME@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_HYPOT = @REPLACE_HYPOT@ +REPLACE_HYPOTF = @REPLACE_HYPOTF@ +REPLACE_HYPOTL = @REPLACE_HYPOTL@ +REPLACE_ILOGB = @REPLACE_ILOGB@ +REPLACE_ILOGBF = @REPLACE_ILOGBF@ +REPLACE_ILOGBL = @REPLACE_ILOGBL@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LOG = @REPLACE_LOG@ +REPLACE_LOG10 = @REPLACE_LOG10@ +REPLACE_LOG10F = @REPLACE_LOG10F@ +REPLACE_LOG10L = @REPLACE_LOG10L@ +REPLACE_LOG1P = @REPLACE_LOG1P@ +REPLACE_LOG1PF = @REPLACE_LOG1PF@ +REPLACE_LOG1PL = @REPLACE_LOG1PL@ +REPLACE_LOG2 = @REPLACE_LOG2@ +REPLACE_LOG2F = @REPLACE_LOG2F@ +REPLACE_LOG2L = @REPLACE_LOG2L@ +REPLACE_LOGB = @REPLACE_LOGB@ +REPLACE_LOGBF = @REPLACE_LOGBF@ +REPLACE_LOGBL = @REPLACE_LOGBL@ +REPLACE_LOGF = @REPLACE_LOGF@ +REPLACE_LOGL = @REPLACE_LOGL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKFIFO = @REPLACE_MKFIFO@ +REPLACE_MKNOD = @REPLACE_MKNOD@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_MKTIME = @REPLACE_MKTIME@ +REPLACE_MODF = @REPLACE_MODF@ +REPLACE_MODFF = @REPLACE_MODFF@ +REPLACE_MODFL = @REPLACE_MODFL@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_OPENAT = @REPLACE_OPENAT@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_QSORT_R = @REPLACE_QSORT_R@ +REPLACE_RAISE = @REPLACE_RAISE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_READLINKAT = @REPLACE_READLINKAT@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMAINDER = @REPLACE_REMAINDER@ +REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ +REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SINF = @REPLACE_SINF@ +REPLACE_SINHF = @REPLACE_SINHF@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_SQRTF = @REPLACE_SQRTF@ +REPLACE_SQRTL = @REPLACE_SQRTL@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRFTIME = @REPLACE_STRFTIME@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ +REPLACE_TANF = @REPLACE_TANF@ +REPLACE_TANHF = @REPLACE_TANHF@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TRUNC = @REPLACE_TRUNC@ +REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ +REPLACE_TRUNCF = @REPLACE_TRUNCF@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_TZSET = @REPLACE_TZSET@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SED = @SED@ +SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ +UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +USE_ACL = @USE_ACL@ +USE_NLS = @USE_NLS@ +UUIDLIBS = @UUIDLIBS@ +VERSION = @VERSION@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ +WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ +WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +crypt_support = @crypt_support@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +have_uuid = @have_uuid@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +man_MANS = recdel.1 recfix.1 recinf.1 recins.1 recsel.1 recset.1 \ + recfmt.1 csv2rec.1 rec2csv.1 $(am__append_1) +EXTRA_DIST = $(man_MANS) +MAINTAINERCLEANFILES = $(man_MANS) + +# The man pages depend on the --help strings and the version number. +common_mandeps = $(top_srcdir)/configure.ac \ + $(top_srcdir)/utils/recutl.c + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu man/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(MANS) +installdirs: + for dir in "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man + +uninstall-man: uninstall-man1 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags-am uninstall uninstall-am uninstall-man \ + uninstall-man1 + +.PRECIOUS: Makefile + + +# Depend on the source, not the binary; we don't need to regenerate +# the binary when any source file changes, only the main one. +# Use -o so that the `missing' program can infer the output file. + +rec2csv.1: $(top_srcdir)/utils/rec2csv.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="rec to csv converter" $(builddir)/../utils/rec2csv -o $@ + +csv2rec.1: $(top_srcdir)/utils/csv2rec.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="csv to rec converter" $(builddir)/../utils/csv2rec -o $@ + +mdb2rec.1: $(top_srcdir)/utils/mdb2rec.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="mdb to rec converter" $(builddir)/../utils/mdb2rec -o $@ + +recdel.1: $(top_srcdir)/utils/recdel.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="remove records from a recfile" $(builddir)/../utils/recdel -o $@ + +recfix.1: $(top_srcdir)/utils/recfix.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="check a recfile for errors" $(builddir)/../utils/recfix -o $@ + +recinf.1: $(top_srcdir)/utils/recinf.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="print information about a recfile" $(builddir)/../utils/recinf -o $@ + +recins.1: $(top_srcdir)/utils/recins.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="insert records in a recfile" $(builddir)/../utils/recins -o $@ + +recsel.1: $(top_srcdir)/utils/recsel.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="print records from a recfile" $(builddir)/../utils/recsel -o $@ + +recset.1: $(top_srcdir)/utils/recset.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="manipulate fields in a recfile" $(builddir)/../utils/recset -o $@ + +recfmt.1: $(top_srcdir)/utils/recfmt.c $(common_mandeps) + $(HELP2MAN) -p recutils --name="apply a template to records" $(builddir)/../utils/recfmt -o $@ + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/man/csv2rec.1 b/devspec.en_US/project/recutils/man/csv2rec.1 new file mode 100755 index 0000000..372c043 --- /dev/null +++ b/devspec.en_US/project/recutils/man/csv2rec.1 @@ -0,0 +1,51 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. +.TH CSV2REC "1" "January 2019" "csv2rec 1.8" "User Commands" +.SH NAME +csv2rec \- csv to rec converter +.SH SYNOPSIS +.B csv2rec +[\fI\,OPTIONS\/\fR]... [\fI\,CSV_FILE\/\fR] +.SH DESCRIPTION +Convert csv data into rec data. +.TP +\fB\-t\fR, \fB\-\-type\fR=\fI\,TYPE\/\fR +type name for the converted records; if this +parameter is ommited then no type is used. +.TP +\fB\-s\fR, \fB\-\-strict\fR +be strict parsing the csv file. +.TP +\fB\-e\fR, \fB\-\-omit\-empty\fR +omit empty fields. +.TP +\fB\-\-help\fR +print a help message and exit. +.TP +\fB\-\-version\fR +show version and exit. +.SH AUTHOR +Written by Jose E. Marchesi. +.SH "REPORTING BUGS" +Report bugs to: bug\-recutils@gnu.org +.br +GNU recutils home page: <http://www.gnu.org/software/recutils/> +.br +General help using GNU software: <http://www.gnu.org/gethelp/> +.SH COPYRIGHT +Copyright \(co 2010\-2019 Jose E. Marchesi. +License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. +.br +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +.SH "SEE ALSO" +The full documentation for +.B csv2rec +is maintained as a Texinfo manual. If the +.B info +and +.B csv2rec +programs are properly installed at your site, the command +.IP +.B info recutils +.PP +should give you access to the complete manual. diff --git a/devspec.en_US/project/recutils/man/mdb2rec.1 b/devspec.en_US/project/recutils/man/mdb2rec.1 new file mode 100755 index 0000000..024fefd --- /dev/null +++ b/devspec.en_US/project/recutils/man/mdb2rec.1 @@ -0,0 +1,52 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. +.TH MDB2REC "1" "January 2019" "mdb2rec 1.8" "User Commands" +.SH NAME +mdb2rec \- mdb to rec converter +.SH SYNOPSIS +.B mdb2rec +[\fI\,OPTIONS\/\fR]... \fI\,MDB_FILE \/\fR[\fI\,TABLE\/\fR] +.SH DESCRIPTION +Convert an mdb file into a rec file. +.TP +\fB\-s\fR, \fB\-\-system\-tables\fR +include system tables. +.TP +\fB\-e\fR, \fB\-\-keep\-empty\-fields\fR +don't prune empty fields in the rec +output. +.TP +\fB\-l\fR, \fB\-\-list\-tables\fR +dump a list of the table names contained +in the mdb file. +.TP +\fB\-\-help\fR +print a help message and exit. +.TP +\fB\-\-version\fR +show version and exit. +.SH AUTHOR +Written by Jose E. Marchesi. +.SH "REPORTING BUGS" +Report bugs to: bug\-recutils@gnu.org +.br +GNU recutils home page: <http://www.gnu.org/software/recutils/> +.br +General help using GNU software: <http://www.gnu.org/gethelp/> +.SH COPYRIGHT +Copyright \(co 2010\-2019 Jose E. Marchesi. +License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. +.br +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +.SH "SEE ALSO" +The full documentation for +.B mdb2rec +is maintained as a Texinfo manual. If the +.B info +and +.B mdb2rec +programs are properly installed at your site, the command +.IP +.B info recutils +.PP +should give you access to the complete manual. diff --git a/devspec.en_US/project/recutils/man/rec2csv.1 b/devspec.en_US/project/recutils/man/rec2csv.1 new file mode 100755 index 0000000..324d3cf --- /dev/null +++ b/devspec.en_US/project/recutils/man/rec2csv.1 @@ -0,0 +1,51 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. +.TH REC2CSV "1" "January 2019" "rec2csv 1.8" "User Commands" +.SH NAME +rec2csv \- rec to csv converter +.SH SYNOPSIS +.B rec2csv +[\fI\,OPTIONS\/\fR]... [\fI\,REC_FILE\/\fR] +.SH DESCRIPTION +Convert rec data into csv data. +.TP +\fB\-d\fR, \fB\-\-delim\fR=\fI\,char\/\fR +sets the deliminator (default ',') +.TP +\fB\-t\fR, \fB\-\-type\fR=\fI\,TYPE\/\fR +record set to convert to csv; if this parameter +is omitted then the default record set is used +.TP +\fB\-S\fR, \fB\-\-sort\fR=\fI\,FIELDS\/\fR +sort the output by the specified fields. +.TP +\fB\-\-help\fR +print a help message and exit. +.TP +\fB\-\-version\fR +show version and exit. +.SH AUTHOR +Written by Jose E. Marchesi. +.SH "REPORTING BUGS" +Report bugs to: bug\-recutils@gnu.org +.br +GNU recutils home page: <http://www.gnu.org/software/recutils/> +.br +General help using GNU software: <http://www.gnu.org/gethelp/> +.SH COPYRIGHT +Copyright \(co 2010\-2019 Jose E. Marchesi. +License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. +.br +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +.SH "SEE ALSO" +The full documentation for +.B rec2csv +is maintained as a Texinfo manual. If the +.B info +and +.B rec2csv +programs are properly installed at your site, the command +.IP +.B info recutils +.PP +should give you access to the complete manual. diff --git a/devspec.en_US/project/recutils/man/recdel.1 b/devspec.en_US/project/recutils/man/recdel.1 new file mode 100755 index 0000000..e7b18f0 --- /dev/null +++ b/devspec.en_US/project/recutils/man/recdel.1 @@ -0,0 +1,79 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. +.TH RECDEL "1" "January 2019" "recdel 1.8" "User Commands" +.SH NAME +recdel \- remove records from a recfile +.SH SYNOPSIS +.B recdel +[\fI\,OPTIONS\/\fR]... [\fI\,-t TYPE\/\fR] [\fI\,-n NUM | -e RECORD_EXPR | -q STR | -m NUM\/\fR] [\fI\,FILE\/\fR] +.SH DESCRIPTION +Remove (or comment out) records from a rec file. +.TP +\fB\-c\fR, \fB\-\-comment\fR +comment out the matching records instead of +deleting them. +.TP +\fB\-\-force\fR +delete even in potentially dangerous situations, +and if the deletion is violating record restrictions. +.TP +\fB\-\-no\-external\fR +don't use external descriptors. +.TP +\fB\-\-verbose\fR +give a detailed report if the integrity check +fails. +.TP +\fB\-\-help\fR +print a help message and exit. +.TP +\fB\-\-version\fR +show version and exit. +.SS "Record selection options:" +.TP +\fB\-i\fR, \fB\-\-case\-insensitive\fR +make strings case\-insensitive in selection +expressions. +.TP +\fB\-t\fR, \fB\-\-type\fR=\fI\,TYPE\/\fR +operate on records of the specified type only. +.TP +\fB\-e\fR, \fB\-\-expression\fR=\fI\,RECORD_EXPR\/\fR +selection expression. +.TP +\fB\-q\fR, \fB\-\-quick\fR=\fI\,STR\/\fR +select records with fields containing a string. +.TP +\fB\-n\fR, \fB\-\-number\fR=\fI\,NUM\/\fR,... +select specific records by position, with ranges. +.TP +\fB\-m\fR, \fB\-\-random\fR=\fI\,NUM\/\fR +select a given number of random records. +.PP +If no FILE is specified then the command acts like a filter, getting +the data from standard input and writing the result to standard output. +.SH AUTHOR +Written by Jose E. Marchesi. +.SH "REPORTING BUGS" +Report bugs to: bug\-recutils@gnu.org +.br +GNU recutils home page: <http://www.gnu.org/software/recutils/> +.br +General help using GNU software: <http://www.gnu.org/gethelp/> +.SH COPYRIGHT +Copyright \(co 2010\-2019 Jose E. Marchesi. +License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. +.br +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +.SH "SEE ALSO" +The full documentation for +.B recdel +is maintained as a Texinfo manual. If the +.B info +and +.B recdel +programs are properly installed at your site, the command +.IP +.B info recutils +.PP +should give you access to the complete manual. diff --git a/devspec.en_US/project/recutils/man/recfix.1 b/devspec.en_US/project/recutils/man/recfix.1 new file mode 100755 index 0000000..8776d61 --- /dev/null +++ b/devspec.en_US/project/recutils/man/recfix.1 @@ -0,0 +1,70 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. +.TH RECFIX "1" "January 2019" "recfix 1.8" "User Commands" +.SH NAME +recfix \- check a recfile for errors +.SH SYNOPSIS +.B recfix +[\fI\,OPTION\/\fR]... [\fI\,OPERATION\/\fR] [\fI\,OP_OPTION\/\fR]... [\fI\,FILE\/\fR] +.SH DESCRIPTION +Check and fix rec files. +.TP +\fB\-\-no\-external\fR +don't use external descriptors. +.TP +\fB\-\-force\fR +force the requested operation. +.TP +\fB\-\-help\fR +print a help message and exit. +.TP +\fB\-\-version\fR +show version and exit. +.SS "Operations:" +.TP +\fB\-\-check\fR +check integrity of the specified file. Default. +.TP +\fB\-\-sort\fR +sort the records in the specified file. +.TP +\fB\-\-auto\fR +insert auto\-generated fields in records missing them. +.TP +\fB\-\-encrypt\fR +encrypt confidential fields in the specified file. +.TP +\fB\-\-decrypt\fR +decrypt confidential fields in the specified file. +.SS "De/Encryption options:" +.TP +\fB\-s\fR, \fB\-\-password\fR=\fI\,PASSWORD\/\fR +encrypt/decrypt with this password. +.PP +If no FILE is specified then the command acts like a filter, getting +the data from standard input and writing the result to standard output. +.SH AUTHOR +Written by Jose E. Marchesi. +.SH "REPORTING BUGS" +Report bugs to: bug\-recutils@gnu.org +.br +GNU recutils home page: <http://www.gnu.org/software/recutils/> +.br +General help using GNU software: <http://www.gnu.org/gethelp/> +.SH COPYRIGHT +Copyright \(co 2010\-2019 Jose E. Marchesi. +License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. +.br +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +.SH "SEE ALSO" +The full documentation for +.B recfix +is maintained as a Texinfo manual. If the +.B info +and +.B recfix +programs are properly installed at your site, the command +.IP +.B info recutils +.PP +should give you access to the complete manual. diff --git a/devspec.en_US/project/recutils/man/recfmt.1 b/devspec.en_US/project/recutils/man/recfmt.1 new file mode 100755 index 0000000..248aa72 --- /dev/null +++ b/devspec.en_US/project/recutils/man/recfmt.1 @@ -0,0 +1,44 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. +.TH RECFMT "1" "January 2019" "recfmt 1.8" "User Commands" +.SH NAME +recfmt \- apply a template to records +.SH SYNOPSIS +.B recfmt +[\fI\,OPTION\/\fR]... [\fI\,TEMPLATE\/\fR] +.SH DESCRIPTION +Apply a template to records read from standard input. +.TP +\fB\-f\fR, \fB\-\-file\fR=\fI\,FILENAME\/\fR +read the template to apply from a file. +.TP +\fB\-\-help\fR +print a help message and exit. +.TP +\fB\-\-version\fR +show version and exit. +.SH AUTHOR +Written by Jose E. Marchesi. +.SH "REPORTING BUGS" +Report bugs to: bug\-recutils@gnu.org +.br +GNU recutils home page: <http://www.gnu.org/software/recutils/> +.br +General help using GNU software: <http://www.gnu.org/gethelp/> +.SH COPYRIGHT +Copyright \(co 2010\-2019 Jose E. Marchesi. +License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. +.br +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +.SH "SEE ALSO" +The full documentation for +.B recfmt +is maintained as a Texinfo manual. If the +.B info +and +.B recfmt +programs are properly installed at your site, the command +.IP +.B info recutils +.PP +should give you access to the complete manual. diff --git a/devspec.en_US/project/recutils/man/recinf.1 b/devspec.en_US/project/recutils/man/recinf.1 new file mode 100755 index 0000000..42aac36 --- /dev/null +++ b/devspec.en_US/project/recutils/man/recinf.1 @@ -0,0 +1,56 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. +.TH RECINF "1" "January 2019" "recinf 1.8" "User Commands" +.SH NAME +recinf \- print information about a recfile +.SH SYNOPSIS +.B recinf +[\fI\,OPTION\/\fR]... [\fI\,FILE\/\fR]... +.SH DESCRIPTION +Print information about the types of records stored in the input. +.TP +\fB\-t\fR, \fB\-\-type\fR=\fI\,RECORD_TYPE\/\fR +print information on the records having the +specified type. +.TP +\fB\-d\fR, \fB\-\-descriptor\fR +include the full record descriptors. +.TP +\fB\-n\fR, \fB\-\-names\-only\fR +output just the names of the record files +found in the input. +.TP +\fB\-\-help\fR +print a help message and exit. +.TP +\fB\-\-version\fR +show version and exit. +.SS "Special options:" +.TP +\fB\-S\fR, \fB\-\-print\-sexps\fR +print the data in sexps instead of rec format. +.SH AUTHOR +Written by Jose E. Marchesi. +.SH "REPORTING BUGS" +Report bugs to: bug\-recutils@gnu.org +.br +GNU recutils home page: <http://www.gnu.org/software/recutils/> +.br +General help using GNU software: <http://www.gnu.org/gethelp/> +.SH COPYRIGHT +Copyright \(co 2010\-2019 Jose E. Marchesi. +License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. +.br +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +.SH "SEE ALSO" +The full documentation for +.B recinf +is maintained as a Texinfo manual. If the +.B info +and +.B recinf +programs are properly installed at your site, the command +.IP +.B info recutils +.PP +should give you access to the complete manual. diff --git a/devspec.en_US/project/recutils/man/recins.1 b/devspec.en_US/project/recutils/man/recins.1 new file mode 100755 index 0000000..085f809 --- /dev/null +++ b/devspec.en_US/project/recutils/man/recins.1 @@ -0,0 +1,90 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. +.TH RECINS "1" "January 2019" "recins 1.8" "User Commands" +.SH NAME +recins \- insert records in a recfile +.SH SYNOPSIS +.B recins +[\fI\,OPTION\/\fR]... [\fI\,-t TYPE\/\fR] [\fI\,-n NUM | -e RECORD_EXPR | -q STR | -m NUM\/\fR] [\fI\,(-f NAME -v STR) | -r RECDATA\/\fR]... [\fI\,FILE\/\fR] +.SH DESCRIPTION +Insert new records in a rec database. +.TP +\fB\-f\fR, \fB\-\-field\fR=\fI\,STR\/\fR +field name; should be followed by a \fB\-v\fR. +.TP +\fB\-v\fR, \fB\-\-value\fR=\fI\,STR\/\fR +field value; should be preceded by an \fB\-f\fR. +.TP +\fB\-r\fR, \fB\-\-record\fR=\fI\,STR\/\fR +record that will be inserted in the file. +.TP +\fB\-\-force\fR +insert the record even if it is violating +record restrictions. +.TP +\fB\-\-no\-external\fR +don't use external descriptors. +.TP +\fB\-\-no\-auto\fR +don't insert auto generated fields. +.TP +\fB\-\-verbose\fR +give a detailed report if the integrity check +fails. +.TP +\fB\-s\fR, \fB\-\-password\fR=\fI\,STR\/\fR +encrypt confidential fields with the given password. +.TP +\fB\-\-help\fR +print a help message and exit. +.TP +\fB\-\-version\fR +show version and exit. +.SS "Record selection options:" +.TP +\fB\-i\fR, \fB\-\-case\-insensitive\fR +make strings case\-insensitive in selection +expressions. +.TP +\fB\-t\fR, \fB\-\-type\fR=\fI\,TYPE\/\fR +operate on records of the specified type only. +.TP +\fB\-e\fR, \fB\-\-expression\fR=\fI\,RECORD_EXPR\/\fR +selection expression. +.TP +\fB\-q\fR, \fB\-\-quick\fR=\fI\,STR\/\fR +select records with fields containing a string. +.TP +\fB\-n\fR, \fB\-\-number\fR=\fI\,NUM\/\fR,... +select specific records by position, with ranges. +.TP +\fB\-m\fR, \fB\-\-random\fR=\fI\,NUM\/\fR +select a given number of random records. +.PP +If no FILE is specified then the command acts like a filter, getting +the data from standard input and writing the result to standard output. +.SH AUTHOR +Written by Jose E. Marchesi. +.SH "REPORTING BUGS" +Report bugs to: bug\-recutils@gnu.org +.br +GNU recutils home page: <http://www.gnu.org/software/recutils/> +.br +General help using GNU software: <http://www.gnu.org/gethelp/> +.SH COPYRIGHT +Copyright \(co 2010\-2019 Jose E. Marchesi. +License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. +.br +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +.SH "SEE ALSO" +The full documentation for +.B recins +is maintained as a Texinfo manual. If the +.B info +and +.B recins +programs are properly installed at your site, the command +.IP +.B info recutils +.PP +should give you access to the complete manual. diff --git a/devspec.en_US/project/recutils/man/recsel.1 b/devspec.en_US/project/recutils/man/recsel.1 new file mode 100755 index 0000000..8c6c4ff --- /dev/null +++ b/devspec.en_US/project/recutils/man/recsel.1 @@ -0,0 +1,104 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. +.TH RECSEL "1" "January 2019" "recsel 1.8" "User Commands" +.SH NAME +recsel \- print records from a recfile +.SH SYNOPSIS +.B recsel +[\fI\,OPTION\/\fR]... [\fI\,-t TYPE\/\fR] [\fI\,-j FIELD\/\fR] [\fI\,-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM\/\fR] [\fI\,-c | (-p|-P) FIELD_EXPR\/\fR] [\fI\,FILE\/\fR]... +.SH DESCRIPTION +Select and print rec data. +.TP +\fB\-d\fR, \fB\-\-include\-descriptors\fR +print record descriptors along with the matched +records. +.TP +\fB\-C\fR, \fB\-\-collapse\fR +do not section the result in records with newlines. +.TP +\fB\-S\fR, \fB\-\-sort\fR=\fI\,FIELD\/\fR,... +sort the output by the specified fields. +.TP +\fB\-G\fR, \fB\-\-group\-by\fR=\fI\,FIELD\/\fR,... +group records by the specified fields. +.TP +\fB\-U\fR, \fB\-\-uniq\fR +remove duplicated fields in the output records. +.TP +\fB\-s\fR, \fB\-\-password\fR=\fI\,STR\/\fR +decrypt confidential fields with the given password. +.TP +\fB\-\-help\fR +print a help message and exit. +.TP +\fB\-\-version\fR +show version and exit. +.SS "Record selection options:" +.TP +\fB\-i\fR, \fB\-\-case\-insensitive\fR +make strings case\-insensitive in selection +expressions. +.TP +\fB\-t\fR, \fB\-\-type\fR=\fI\,TYPE\/\fR +operate on records of the specified type only. +.TP +\fB\-e\fR, \fB\-\-expression\fR=\fI\,RECORD_EXPR\/\fR +selection expression. +.TP +\fB\-q\fR, \fB\-\-quick\fR=\fI\,STR\/\fR +select records with fields containing a string. +.TP +\fB\-n\fR, \fB\-\-number\fR=\fI\,NUM\/\fR,... +select specific records by position, with ranges. +.TP +\fB\-m\fR, \fB\-\-random\fR=\fI\,NUM\/\fR +select a given number of random records. +.TP +\fB\-j\fR, \fB\-\-join\fR=\fI\,FIELD\/\fR +perform an inner join using the specified field. +.SS "Output options:" +.TP +\fB\-p\fR, \fB\-\-print\fR=\fI\,FIELDS\/\fR +comma\-separated list of fields to print for each +matching record. +.TP +\fB\-P\fR, \fB\-\-print\-values\fR=\fI\,FIELDS\/\fR +as \fB\-p\fR, but print only the values of the selected +fields. +.TP +\fB\-R\fR, \fB\-\-print\-row\fR=\fI\,FIELDS\/\fR +as \fB\-P\fR, but separate the values with spaces instead +of newlines. +.TP +\fB\-c\fR, \fB\-\-count\fR +print a count of the matching records instead of +the records themselves. +.SS "Special options:" +.TP +\fB\-\-print\-sexps\fR +print the data in sexps instead of rec format. +.SH AUTHOR +Written by Jose E. Marchesi. +.SH "REPORTING BUGS" +Report bugs to: bug\-recutils@gnu.org +.br +GNU recutils home page: <http://www.gnu.org/software/recutils/> +.br +General help using GNU software: <http://www.gnu.org/gethelp/> +.SH COPYRIGHT +Copyright \(co 2010\-2019 Jose E. Marchesi. +License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. +.br +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +.SH "SEE ALSO" +The full documentation for +.B recsel +is maintained as a Texinfo manual. If the +.B info +and +.B recsel +programs are properly installed at your site, the command +.IP +.B info recutils +.PP +should give you access to the complete manual. diff --git a/devspec.en_US/project/recutils/man/recset.1 b/devspec.en_US/project/recutils/man/recset.1 new file mode 100755 index 0000000..db9acdc --- /dev/null +++ b/devspec.en_US/project/recutils/man/recset.1 @@ -0,0 +1,95 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. +.TH RECSET "1" "January 2019" "recset 1.8" "User Commands" +.SH NAME +recset \- manipulate fields in a recfile +.SH SYNOPSIS +.B recset +[\fI\,OPTION\/\fR]... [\fI\,FILE\/\fR]... +.SH DESCRIPTION +Alter or delete fields in records. +.TP +\fB\-\-no\-external\fR +don't use external descriptors. +.TP +\fB\-\-force\fR +alter the records even if violating record +restrictions. +.TP +\fB\-\-help\fR +print a help message and exit. +.TP +\fB\-\-version\fR +show version and exit. +.SS "Record selection options:" +.TP +\fB\-i\fR, \fB\-\-case\-insensitive\fR +make strings case\-insensitive in selection +expressions. +.TP +\fB\-t\fR, \fB\-\-type\fR=\fI\,TYPE\/\fR +operate on records of the specified type only. +.TP +\fB\-e\fR, \fB\-\-expression\fR=\fI\,RECORD_EXPR\/\fR +selection expression. +.TP +\fB\-q\fR, \fB\-\-quick\fR=\fI\,STR\/\fR +select records with fields containing a string. +.TP +\fB\-n\fR, \fB\-\-number\fR=\fI\,NUM\/\fR,... +select specific records by position, with ranges. +.TP +\fB\-m\fR, \fB\-\-random\fR=\fI\,NUM\/\fR +select a given number of random records. +.SS "Field selection options:" +.TP +\fB\-f\fR, \fB\-\-fields\fR=\fI\,FIELDS\/\fR +comma\-separated list of field names with optional +subscripts. +.SS "Actions:" +.TP +\fB\-s\fR, \fB\-\-set\fR=\fI\,VALUE\/\fR +change the value of the selected fields. +.TP +\fB\-a\fR, \fB\-\-add\fR=\fI\,VALUE\/\fR +add the selected fields with the given value. +.TP +\fB\-S\fR, \fB\-\-set\-add\fR=\fI\,VALUE\/\fR +change the value of the selected fields. If they don't +exist then add a new field with that value. +.TP +\fB\-r\fR, \fB\-\-rename\fR=\fI\,NAME\/\fR +rename the selected fields to a given name. If an entire +record set is selected then the field is renamed in the +record descriptor as well. +.TP +\fB\-d\fR, \fB\-\-delete\fR +delete the selected fields. +.TP +\fB\-c\fR, \fB\-\-comment\fR +comment out the selected fields. +.SH AUTHOR +Written by Jose E. Marchesi. +.SH "REPORTING BUGS" +Report bugs to: bug\-recutils@gnu.org +.br +GNU recutils home page: <http://www.gnu.org/software/recutils/> +.br +General help using GNU software: <http://www.gnu.org/gethelp/> +.SH COPYRIGHT +Copyright \(co 2010\-2019 Jose E. Marchesi. +License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. +.br +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +.SH "SEE ALSO" +The full documentation for +.B recset +is maintained as a Texinfo manual. If the +.B info +and +.B recset +programs are properly installed at your site, the command +.IP +.B info recutils +.PP +should give you access to the complete manual. diff --git a/devspec.en_US/project/recutils/po/ChangeLog b/devspec.en_US/project/recutils/po/ChangeLog new file mode 100755 index 0000000..9f67c78 --- /dev/null +++ b/devspec.en_US/project/recutils/po/ChangeLog @@ -0,0 +1,14 @@ +2018-03-18 Jose E. Marchesi <jemarch@gnu.org> + + * POTFILES.in: Updated. + +2018-03-17 Jose E. Marchesi <jemarch@gnu.org> + + * POTFILES.in: recreate after last gettexttize. + +2018-03-17 gettextize <bug-gnu-gettext@gnu.org> + + * Makefile.in.in: Upgrade to gettext-0.19.8.1. + * Rules-quot: Upgrade to gettext-0.19.8.1. + * POTFILES.in: New file. + diff --git a/devspec.en_US/project/recutils/po/LINGUAS b/devspec.en_US/project/recutils/po/LINGUAS new file mode 100755 index 0000000..ff05d7d --- /dev/null +++ b/devspec.en_US/project/recutils/po/LINGUAS @@ -0,0 +1,10 @@ +de +es +fi +fr +nl +pt_BR +sr +sv +uk +vi diff --git a/devspec.en_US/project/recutils/po/Makefile b/devspec.en_US/project/recutils/po/Makefile new file mode 100755 index 0000000..484675a --- /dev/null +++ b/devspec.en_US/project/recutils/po/Makefile @@ -0,0 +1,958 @@ +# Makefile for PO directory in any package using GNU gettext. +# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu> +# +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved. This file is offered as-is, +# without any warranty. +# +# Origin: gettext-0.19.8 +GETTEXT_MACRO_VERSION = 0.19 + +PACKAGE = recutils +VERSION = 1.8 +PACKAGE_BUGREPORT = bug-recutils@gnu.org + +SED = /bin/sed +SHELL = /bin/sh + + +srcdir = . +top_srcdir = .. + + +prefix = /usr/local +exec_prefix = ${prefix} +datarootdir = ${prefix}/share +datadir = ${datarootdir} +localedir = ${datarootdir}/locale +gettextsrcdir = $(datadir)/gettext/po + +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 + +# We use $(mkdir_p). +# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as +# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, +# ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh does not start with $(SHELL), so we add it. +# In automake >= 1.10, $(MKDIR_P) is derived from ${MKDIR_P}, which is defined +# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake +# versions, $(mkinstalldirs) and $(install_sh) are unused. +mkinstalldirs = $(SHELL) ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh -d +install_sh = $(SHELL) ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh +MKDIR_P = /bin/mkdir -p +mkdir_p = $(MKDIR_P) + +# When building gettext-tools, we prefer to use the built programs +# rather than installed programs. However, we can't do that when we +# are cross compiling. +CROSS_COMPILING = @CROSS_COMPILING@ + +GMSGFMT_ = /usr/bin/msgfmt +GMSGFMT_no = /usr/bin/msgfmt +GMSGFMT_yes = /usr/bin/msgfmt +GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) +MSGFMT_ = /usr/bin/msgfmt +MSGFMT_no = /usr/bin/msgfmt +MSGFMT_yes = /usr/bin/msgfmt +MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) +XGETTEXT_ = /usr/bin/xgettext +XGETTEXT_no = /usr/bin/xgettext +XGETTEXT_yes = /usr/bin/xgettext +XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) +MSGMERGE = msgmerge +MSGMERGE_UPDATE = /usr/bin/msgmerge --update +MSGINIT = msginit +MSGCONV = msgconv +MSGFILTER = msgfilter + +POFILES = de.po es.po fi.po fr.po nl.po pt_BR.po sr.po sv.po uk.po vi.po +GMOFILES = de.gmo es.gmo fi.gmo fr.gmo nl.gmo pt_BR.gmo sr.gmo sv.gmo uk.gmo vi.gmo +UPDATEPOFILES = de.po-update es.po-update fi.po-update fr.po-update nl.po-update pt_BR.po-update sr.po-update sv.po-update uk.po-update vi.po-update +DUMMYPOFILES = de.nop es.nop fi.nop fr.nop nl.nop pt_BR.nop sr.nop sv.nop uk.nop vi.nop +DISTFILES.common = Makefile.in.in remove-potcdate.sin \ +$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) +DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ +$(POFILES) $(GMOFILES) \ +$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) + +POTFILES = \ + ../lib/acl_entries.c \ + ../lib/acl-errno-valid.c \ + ../lib/acl.h \ + ../lib/acl-internal.c \ + ../lib/acl-internal.h \ + ../lib/alignof.h \ + ../lib/alloca.c \ + ../lib/alloca.in.h \ + ../lib/arg-nonnull.h \ + ../lib/asnprintf.c \ + ../lib/asprintf.c \ + ../lib/base64.c \ + ../lib/base64.h \ + ../lib/basename-lgpl.c \ + ../lib/btowc.c \ + ../lib/canonicalize-lgpl.c \ + ../lib/c-ctype.c \ + ../lib/c-ctype.h \ + ../lib/c++defs.h \ + ../lib/cloexec.c \ + ../lib/cloexec.h \ + ../lib/close.c \ + ../lib/closeout.c \ + ../lib/closeout.h \ + ../lib/close-stream.c \ + ../lib/close-stream.h \ + ../lib/copy-acl.c \ + ../lib/crc.c \ + ../lib/crc.h \ + ../lib/c-strcasecmp.c \ + ../lib/c-strcaseeq.h \ + ../lib/c-strcase.h \ + ../lib/c-strncasecmp.c \ + ../lib/dirname.h \ + ../lib/dirname-lgpl.c \ + ../lib/dosname.h \ + ../lib/dup2.c \ + ../lib/errno.in.h \ + ../lib/error.c \ + ../lib/error.h \ + ../lib/euidaccess.c \ + ../lib/execute.c \ + ../lib/execute.h \ + ../lib/exitfail.c \ + ../lib/exitfail.h \ + ../lib/fatal-signal.c \ + ../lib/fatal-signal.h \ + ../lib/fcntl.c \ + ../lib/fcntl.in.h \ + ../lib/fd-hook.c \ + ../lib/fd-hook.h \ + ../lib/filename.h \ + ../lib/flexmember.h \ + ../lib/float.c \ + ../lib/float+.h \ + ../lib/float.in.h \ + ../lib/flock.c \ + ../lib/floor.c \ + ../lib/fpending.c \ + ../lib/fpending.h \ + ../lib/fprintf.c \ + ../lib/fpucw.h \ + ../lib/frexp.c \ + ../lib/frexpl.c \ + ../lib/fseek.c \ + ../lib/fseeko.c \ + ../lib/fseterr.c \ + ../lib/fseterr.h \ + ../lib/fstat.c \ + ../lib/ftell.c \ + ../lib/ftello.c \ + ../lib/fwriting.c \ + ../lib/fwriting.h \ + ../lib/getdelim.c \ + ../lib/getdtablesize.c \ + ../lib/getfilecon.c \ + ../lib/getgroups.c \ + ../lib/getline.c \ + ../lib/getopt1.c \ + ../lib/getopt.c \ + ../lib/getopt-cdefs.in.h \ + ../lib/getopt-core.h \ + ../lib/getopt-ext.h \ + ../lib/getopt.in.h \ + ../lib/getopt_int.h \ + ../lib/getopt-pfx-core.h \ + ../lib/getopt-pfx-ext.h \ + ../lib/getpass.c \ + ../lib/getpass.h \ + ../lib/get-permissions.c \ + ../lib/getprogname.c \ + ../lib/getprogname.h \ + ../lib/gettext.h \ + ../lib/gettime.c \ + ../lib/gettimeofday.c \ + ../lib/gl_array_list.c \ + ../lib/gl_array_list.h \ + ../lib/gl_list.c \ + ../lib/gl_list.h \ + ../lib/group-member.c \ + ../lib/hard-locale.c \ + ../lib/hard-locale.h \ + ../lib/intprops.h \ + ../lib/inttypes.in.h \ + ../lib/isnan.c \ + ../lib/isnand.c \ + ../lib/isnand-nolibm.h \ + ../lib/isnanf.c \ + ../lib/isnanf-nolibm.h \ + ../lib/isnanl.c \ + ../lib/isnanl-nolibm.h \ + ../lib/itold.c \ + ../lib/langinfo.in.h \ + ../lib/limits.in.h \ + ../lib/localcharset.c \ + ../lib/localcharset.h \ + ../lib/localeconv.c \ + ../lib/locale.in.h \ + ../lib/localtime-buffer.c \ + ../lib/localtime-buffer.h \ + ../lib/lseek.c \ + ../lib/lstat.c \ + ../lib/malloca.c \ + ../lib/malloca.h \ + ../lib/malloc.c \ + ../lib/math.c \ + ../lib/math.in.h \ + ../lib/mbrlen.c \ + ../lib/mbrtowc.c \ + ../lib/mbsinit.c \ + ../lib/mbtowc.c \ + ../lib/mbtowc-impl.h \ + ../lib/memchr.c \ + ../lib/minmax.h \ + ../lib/mkostemp.c \ + ../lib/mkstemp.c \ + ../lib/mktime.c \ + ../lib/mktime-internal.h \ + ../lib/msvc-inval.c \ + ../lib/msvc-inval.h \ + ../lib/msvc-nothrow.c \ + ../lib/msvc-nothrow.h \ + ../lib/nl_langinfo.c \ + ../lib/_Noreturn.h \ + ../lib/nstrftime.c \ + ../lib/obstack.c \ + ../lib/obstack.h \ + ../lib/open.c \ + ../lib/parse-datetime.c \ + ../lib/parse-datetime.h \ + ../lib/pathmax.h \ + ../lib/printf-args.c \ + ../lib/printf-args.h \ + ../lib/printf.c \ + ../lib/printf-frexp.c \ + ../lib/printf-frexp.h \ + ../lib/printf-frexpl.c \ + ../lib/printf-frexpl.h \ + ../lib/printf-parse.c \ + ../lib/printf-parse.h \ + ../lib/progname.c \ + ../lib/progname.h \ + ../lib/qcopy-acl.c \ + ../lib/qset-acl.c \ + ../lib/quotearg.c \ + ../lib/quotearg.h \ + ../lib/quote.h \ + ../lib/raise.c \ + ../lib/random_r.c \ + ../lib/rawmemchr.c \ + ../lib/read-file.c \ + ../lib/read-file.h \ + ../lib/readline.c \ + ../lib/readline.h \ + ../lib/readlink.c \ + ../lib/realloc.c \ + ../lib/regcomp.c \ + ../lib/regex.c \ + ../lib/regexec.c \ + ../lib/regex.h \ + ../lib/regex_internal.c \ + ../lib/regex_internal.h \ + ../lib/rename.c \ + ../lib/rmdir.c \ + ../lib/root-uid.h \ + ../lib/same-inode.h \ + ../lib/sched.in.h \ + ../lib/se-context.c \ + ../lib/se-context.in.h \ + ../lib/secure_getenv.c \ + ../lib/se-selinux.c \ + ../lib/se-selinux.in.h \ + ../lib/set-acl.c \ + ../lib/setenv.c \ + ../lib/set-permissions.c \ + ../lib/sigaction.c \ + ../lib/sig-handler.c \ + ../lib/sig-handler.h \ + ../lib/signal.in.h \ + ../lib/signbitd.c \ + ../lib/signbitf.c \ + ../lib/signbitl.c \ + ../lib/sigprocmask.c \ + ../lib/size_max.h \ + ../lib/spawnattr_destroy.c \ + ../lib/spawnattr_init.c \ + ../lib/spawnattr_setflags.c \ + ../lib/spawnattr_setsigmask.c \ + ../lib/spawn_faction_addopen.c \ + ../lib/spawn_faction_destroy.c \ + ../lib/spawn_faction_init.c \ + ../lib/spawni.c \ + ../lib/spawn.in.h \ + ../lib/spawn_int.h \ + ../lib/spawnp.c \ + ../lib/stat.c \ + ../lib/stat-macros.h \ + ../lib/stat-time.c \ + ../lib/stat-time.h \ + ../lib/stat-w32.c \ + ../lib/stat-w32.h \ + ../lib/stdarg.in.h \ + ../lib/stdbool.in.h \ + ../lib/stddef.in.h \ + ../lib/stdint.in.h \ + ../lib/stdio-impl.h \ + ../lib/stdio.in.h \ + ../lib/stdlib.in.h \ + ../lib/strcasecmp.c \ + ../lib/strcasestr.c \ + ../lib/strchrnul.c \ + ../lib/streq.h \ + ../lib/strerror.c \ + ../lib/strerror-override.c \ + ../lib/strerror-override.h \ + ../lib/strftime.h \ + ../lib/string.in.h \ + ../lib/strings.in.h \ + ../lib/stripslash.c \ + ../lib/strncasecmp.c \ + ../lib/strsep.c \ + ../lib/str-two-way.h \ + ../lib/strverscmp.c \ + ../lib/sys_file.in.h \ + ../lib/sys_stat.in.h \ + ../lib/sys_time.in.h \ + ../lib/sys_types.in.h \ + ../lib/sys_wait.in.h \ + ../lib/tempname.c \ + ../lib/tempname.h \ + ../lib/timegm.c \ + ../lib/time.in.h \ + ../lib/time-internal.h \ + ../lib/time_r.c \ + ../lib/time_rz.c \ + ../lib/timespec.c \ + ../lib/timespec.h \ + ../lib/tmpdir.c \ + ../lib/tmpdir.h \ + ../lib/tzset.c \ + ../lib/unistd.c \ + ../lib/unistd.in.h \ + ../lib/unlocked-io.h \ + ../lib/unsetenv.c \ + ../lib/unused-parameter.h \ + ../lib/vasnprintf.c \ + ../lib/vasnprintf.h \ + ../lib/vasprintf.c \ + ../lib/verify.h \ + ../lib/version-etc.c \ + ../lib/version-etc-fsf.c \ + ../lib/version-etc.h \ + ../lib/vfprintf.c \ + ../lib/w32spawn.h \ + ../lib/waitpid.c \ + ../lib/wait-process.c \ + ../lib/wait-process.h \ + ../lib/warn-on-use.h \ + ../lib/wchar.in.h \ + ../lib/wcrtomb.c \ + ../lib/wctob.c \ + ../lib/wctomb.c \ + ../lib/wctomb-impl.h \ + ../lib/wctype-h.c \ + ../lib/wctype.in.h \ + ../lib/xalloc-die.c \ + ../lib/xalloc.h \ + ../lib/xalloc-oversized.h \ + ../lib/xmalloc.c \ + ../lib/xsize.c \ + ../lib/xsize.h \ + ../src/rec-aggregate.c \ + ../src/rec-buf.c \ + ../src/rec.c \ + ../src/rec-comment.c \ + ../src/rec-crypt.c \ + ../src/rec-crypt-dummy.c \ + ../src/rec-db.c \ + ../src/rec-fex.c \ + ../src/rec-field.c \ + ../src/rec-field-name.c \ + ../src/rec.h \ + ../src/rec-int.c \ + ../src/rec-mset.c \ + ../src/rec-parser.c \ + ../src/rec-record.c \ + ../src/rec-rset.c \ + ../src/rec-sex-ast.c \ + ../src/rec-sex-ast.h \ + ../src/rec-sex.c \ + ../src/rec-sex-parser.c \ + ../src/rec-sex-parser.h \ + ../src/rec-types.c \ + ../src/rec-utils.c \ + ../src/rec-utils.h \ + ../src/rec-writer.c \ + ../utils/csv2rec.c \ + ../utils/mdb2rec.c \ + ../utils/rec2csv.c \ + ../utils/recdel.c \ + ../utils/recfix.c \ + ../utils/recfmt.c \ + ../utils/recinf.c \ + ../utils/recins.c \ + ../utils/recsel.c \ + ../utils/recset.c \ + ../utils/recutl.c \ + ../utils/recutl.h + +CATALOGS = de.gmo es.gmo fi.gmo fr.gmo nl.gmo pt_BR.gmo sr.gmo sv.gmo uk.gmo vi.gmo + +POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot +POFILESDEPS_yes = $(POFILESDEPS_) +POFILESDEPS_no = +POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT)) + +DISTFILESDEPS_ = update-po +DISTFILESDEPS_yes = $(DISTFILESDEPS_) +DISTFILESDEPS_no = +DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO)) + +# Makevars gets inserted here. (Don't remove this line!) +# Makefile variables for PO directory in any package using GNU gettext. + +# Usually the message domain is the same as the package name. +DOMAIN = $(PACKAGE) + +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + +# These options get passed to xgettext. +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ \ + \ + --flag=_:1:pass-c-format\ + --flag=N_:1:pass-c-format\ + --flag=error:3:c-format --flag=error_at_line:5:c-format\ +\ + --from-code=UTF-8\ + --flag=asprintf:2:c-format --flag=vasprintf:2:c-format\ + --flag=asnprintf:3:c-format --flag=vasnprintf:3:c-format\ + --flag=wrapf:1:c-format\ + --flag=error:3:c-format --flag=error_at_line:5:c-format\ + $${end_of_xgettext_options+} + +# This is the copyright holder that gets inserted into the header of the +# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding +# package. (Note that the msgstr strings, extracted from the package's +# sources, belong to the copyright holder of the package.) Translators are +# expected to transfer the copyright for their translations to this person +# or entity, or to disclaim their copyright. The empty string stands for +# the public domain; in this case the translators are expected to disclaim +# their copyright. +COPYRIGHT_HOLDER = Free Software Foundation, Inc. + +# This tells whether or not to prepend "GNU " prefix to the package +# name that gets inserted into the header of the $(DOMAIN).pot file. +# Possible values are "yes", "no", or empty. If it is empty, try to +# detect it automatically by scanning the files in $(top_srcdir) for +# "GNU packagename" string. +PACKAGE_GNU = + +# This is the email address or URL to which the translators shall report +# bugs in the untranslated strings: +# - Strings which are not entire sentences, see the maintainer guidelines +# in the GNU gettext documentation, section 'Preparing Strings'. +# - Strings which use unclear terms or require additional context to be +# understood. +# - Strings which make invalid assumptions about notation of date, time or +# money. +# - Pluralisation problems. +# - Incorrect English spelling. +# - Incorrect formatting. +# It can be your email address, or a mailing list address where translators +# can write to without being subscribed, or the URL of a web page through +# which the translators can contact you. +MSGID_BUGS_ADDRESS = bug-gnu-utils@gnu.org + +# This is the list of locale categories, beyond LC_MESSAGES, for which the +# message catalogs shall be used. It is usually empty. +EXTRA_LOCALE_CATEGORIES = + +# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' +# context. Possible values are "yes" and "no". Set this to yes if the +# package uses functions taking also a message context, like pgettext(), or +# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. +USE_MSGCTXT = no + +# These options get passed to msgmerge. +# Useful options are in particular: +# --previous to keep previous msgids of translated messages, +# --quiet to reduce the verbosity. +MSGMERGE_OPTIONS = + +# These options get passed to msginit. +# If you want to disable line wrapping when writing PO files, add +# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and +# MSGINIT_OPTIONS. +MSGINIT_OPTIONS = + +# This tells whether or not to regenerate a PO file when $(DOMAIN).pot +# has changed. Possible values are "yes" and "no". Set this to no if +# the POT file is checked in the repository and the version control +# program ignores timestamps. +PO_DEPENDS_ON_POT = yes + +# This tells whether or not to forcibly update $(DOMAIN).pot and +# regenerate PO files on "make dist". Possible values are "yes" and +# "no". Set this to no if the POT file and PO files are maintained +# externally. +DIST_DEPENDS_ON_UPDATE_PO = yes + +.SUFFIXES: +.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update + +.po.mo: + @echo "$(MSGFMT) -c -o $@ $<"; \ + $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ + +.po.gmo: + @lang=`echo $* | sed -e 's,.*/,,'`; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ + cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo + +.sin.sed: + sed -e '/^#/d' $< > t-$@ + mv t-$@ $@ + + +all: all-yes + +all-yes: stamp-po +all-no: + +# Ensure that the gettext macros and this Makefile.in.in are in sync. +CHECK_MACRO_VERSION = \ + test "$(GETTEXT_MACRO_VERSION)" = "0.19" \ + || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version 0.19" 1>&2; \ + exit 1; \ + } + +# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no +# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because +# we don't want to bother translators with empty POT files). We assume that +# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. +# In this case, stamp-po is a nop (i.e. a phony target). + +# stamp-po is a timestamp denoting the last time at which the CATALOGS have +# been loosely updated. Its purpose is that when a developer or translator +# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, +# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent +# invocations of "make" will do nothing. This timestamp would not be necessary +# if updating the $(CATALOGS) would always touch them; however, the rule for +# $(POFILES) has been designed to not touch files that don't need to be +# changed. +stamp-po: $(srcdir)/$(DOMAIN).pot + @$(CHECK_MACRO_VERSION) + test ! -f $(srcdir)/$(DOMAIN).pot || \ + test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) + @test ! -f $(srcdir)/$(DOMAIN).pot || { \ + echo "touch stamp-po" && \ + echo timestamp > stamp-poT && \ + mv stamp-poT stamp-po; \ + } + +# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', +# otherwise packages like GCC can not be built if only parts of the source +# have been downloaded. + +# This target rebuilds $(DOMAIN).pot; it is an expensive operation. +# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. +# The determination of whether the package xyz is a GNU one is based on the +# heuristic whether some file in the top level directory mentions "GNU xyz". +# If GNU 'find' is available, we avoid grepping through monster files. +$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed + package_gnu="$(PACKAGE_GNU)"; \ + test -n "$$package_gnu" || { \ + if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \ + LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f \ + -size -10000000c -exec grep 'GNU recutils' \ + /dev/null '{}' ';' 2>/dev/null; \ + else \ + LC_ALL=C grep 'GNU recutils' $(top_srcdir)/* 2>/dev/null; \ + fi; \ + } | grep -v 'libtool:' >/dev/null; then \ + package_gnu=yes; \ + else \ + package_gnu=no; \ + fi; \ + }; \ + if test "$$package_gnu" = "yes"; then \ + package_prefix='GNU '; \ + else \ + package_prefix=''; \ + fi; \ + if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ + msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ + else \ + msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ + fi; \ + case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --msgid-bugs-address="$$msgid_bugs_address" \ + ;; \ + *) \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --package-name="$${package_prefix}recutils" \ + --package-version='1.8' \ + --msgid-bugs-address="$$msgid_bugs_address" \ + ;; \ + esac + test ! -f $(DOMAIN).po || { \ + if test -f $(srcdir)/$(DOMAIN).pot-header; then \ + sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \ + cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po; \ + rm -f $(DOMAIN).1po; \ + fi; \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ + sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ + if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ + else \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + else \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + } + +# This rule has no dependencies: we don't need to update $(DOMAIN).pot at +# every "make" invocation, only create it when it is missing. +# Only "make $(DOMAIN).pot-update" or "make dist" will force an update. +$(srcdir)/$(DOMAIN).pot: + $(MAKE) $(DOMAIN).pot-update + +# This target rebuilds a PO file if $(DOMAIN).pot has changed. +# Note that a PO file is not touched if it doesn't need to be changed. +$(POFILES): $(POFILESDEPS) + @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ + if test -f "$(srcdir)/$${lang}.po"; then \ + test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \ + cd $(srcdir) \ + && { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ + $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ + *) \ + $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \ + esac; \ + }; \ + else \ + $(MAKE) $${lang}.po-create; \ + fi + + +install: install-exec install-data +install-exec: +install-data: install-data-yes + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ + for file in $(DISTFILES.common) Makevars.template; do \ + $(INSTALL_DATA) $(srcdir)/$$file \ + $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + for file in Makevars; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +install-data-no: all +install-data-yes: all + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $(DESTDIR)$$dir; \ + if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ + $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ + echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ + fi; \ + done; \ + done + +install-strip: install + +installdirs: installdirs-exec installdirs-data +installdirs-exec: +installdirs-data: installdirs-data-yes + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ + else \ + : ; \ + fi +installdirs-data-no: +installdirs-data-yes: + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $(DESTDIR)$$dir; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + fi; \ + done; \ + done + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: uninstall-exec uninstall-data +uninstall-exec: +uninstall-data: uninstall-data-yes + if test "$(PACKAGE)" = "gettext-tools"; then \ + for file in $(DISTFILES.common) Makevars.template; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +uninstall-data-no: +uninstall-data-yes: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + done; \ + done + +check: all + +info dvi ps pdf html tags TAGS ctags CTAGS ID: + +mostlyclean: + rm -f remove-potcdate.sed + rm -f stamp-poT + rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po + rm -fr *.o + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f stamp-po $(GMOFILES) + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: + test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS) + @$(MAKE) dist2 +# This is a separate target because 'update-po' must be executed before. +dist2: stamp-po $(DISTFILES) + dists="$(DISTFILES)"; \ + if test "$(PACKAGE)" = "gettext-tools"; then \ + dists="$$dists Makevars.template"; \ + fi; \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + dists="$$dists $(DOMAIN).pot stamp-po"; \ + fi; \ + if test -f $(srcdir)/ChangeLog; then \ + dists="$$dists ChangeLog"; \ + fi; \ + for i in 0 1 2 3 4 5 6 7 8 9; do \ + if test -f $(srcdir)/ChangeLog.$$i; then \ + dists="$$dists ChangeLog.$$i"; \ + fi; \ + done; \ + if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ + for file in $$dists; do \ + if test -f $$file; then \ + cp -p $$file $(distdir) || exit 1; \ + else \ + cp -p $(srcdir)/$$file $(distdir) || exit 1; \ + fi; \ + done + +update-po: Makefile + $(MAKE) $(DOMAIN).pot-update + test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) + $(MAKE) update-gmo + +# General rule for creating PO files. + +.nop.po-create: + @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ + echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ + exit 1 + +# General rule for updating PO files. + +.nop.po-update: + @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ + if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + cd $(srcdir); \ + if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ + $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ + *) \ + $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ + esac; \ + }; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +$(DUMMYPOFILES): + +update-gmo: Makefile $(GMOFILES) + @: + +# Recreate Makefile by invoking config.status. Explicitly invoke the shell, +# because execution permission bits may not work on the current file system. +# Use /bin/sh, which is the shell determined by autoconf for the use by its +# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. +Makefile: Makefile.in.in Makevars $(top_builddir)/config.status POTFILES.in LINGUAS + cd $(top_builddir) \ + && /bin/sh ./config.status $(subdir)/$@.in po-directories + +force: + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: +# This file, Rules-quot, can be copied and used freely without restrictions. +# Special Makefile rules for English message catalogs with quotation marks. + +DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot + +.SUFFIXES: .insert-header .po-update-en + +en@quot.po-create: + $(MAKE) en@quot.po-update +en@boldquot.po-create: + $(MAKE) en@boldquot.po-update + +en@quot.po-update: en@quot.po-update-en +en@boldquot.po-update: en@boldquot.po-update-en + +.insert-header.po-update-en: + @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ + if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + ll=`echo $$lang | sed -e 's/@.*//'`; \ + LC_ALL=C; export LC_ALL; \ + cd $(srcdir); \ + if $(MSGINIT) $(MSGINIT_OPTIONS) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \ + | $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \ + { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \ + $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \ + ;; \ + *) \ + $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \ + ;; \ + esac } 2>/dev/null > $$tmpdir/$$lang.new.po \ + ; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "creation of $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +en@quot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header + +en@boldquot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header + +mostlyclean: mostlyclean-quot +mostlyclean-quot: + rm -f *.insert-header diff --git a/devspec.en_US/project/recutils/po/Makefile.in b/devspec.en_US/project/recutils/po/Makefile.in new file mode 100755 index 0000000..ad61d21 --- /dev/null +++ b/devspec.en_US/project/recutils/po/Makefile.in @@ -0,0 +1,483 @@ +# Makefile for PO directory in any package using GNU gettext. +# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu> +# +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved. This file is offered as-is, +# without any warranty. +# +# Origin: gettext-0.19.8 +GETTEXT_MACRO_VERSION = 0.19 + +PACKAGE = recutils +VERSION = 1.8 +PACKAGE_BUGREPORT = bug-recutils@gnu.org + +SED = /bin/sed +SHELL = /bin/sh + + +srcdir = . +top_srcdir = .. + + +prefix = /usr/local +exec_prefix = ${prefix} +datarootdir = ${prefix}/share +datadir = ${datarootdir} +localedir = ${datarootdir}/locale +gettextsrcdir = $(datadir)/gettext/po + +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 + +# We use $(mkdir_p). +# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as +# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, +# ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh does not start with $(SHELL), so we add it. +# In automake >= 1.10, $(MKDIR_P) is derived from ${MKDIR_P}, which is defined +# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake +# versions, $(mkinstalldirs) and $(install_sh) are unused. +mkinstalldirs = $(SHELL) ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh -d +install_sh = $(SHELL) ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh +MKDIR_P = /bin/mkdir -p +mkdir_p = $(MKDIR_P) + +# When building gettext-tools, we prefer to use the built programs +# rather than installed programs. However, we can't do that when we +# are cross compiling. +CROSS_COMPILING = @CROSS_COMPILING@ + +GMSGFMT_ = /usr/bin/msgfmt +GMSGFMT_no = /usr/bin/msgfmt +GMSGFMT_yes = /usr/bin/msgfmt +GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) +MSGFMT_ = /usr/bin/msgfmt +MSGFMT_no = /usr/bin/msgfmt +MSGFMT_yes = /usr/bin/msgfmt +MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) +XGETTEXT_ = /usr/bin/xgettext +XGETTEXT_no = /usr/bin/xgettext +XGETTEXT_yes = /usr/bin/xgettext +XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) +MSGMERGE = msgmerge +MSGMERGE_UPDATE = /usr/bin/msgmerge --update +MSGINIT = msginit +MSGCONV = msgconv +MSGFILTER = msgfilter + +POFILES = @POFILES@ +GMOFILES = @GMOFILES@ +UPDATEPOFILES = @UPDATEPOFILES@ +DUMMYPOFILES = @DUMMYPOFILES@ +DISTFILES.common = Makefile.in.in remove-potcdate.sin \ +$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) +DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ +$(POFILES) $(GMOFILES) \ +$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) + +POTFILES = \ + +CATALOGS = @CATALOGS@ + +POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot +POFILESDEPS_yes = $(POFILESDEPS_) +POFILESDEPS_no = +POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT)) + +DISTFILESDEPS_ = update-po +DISTFILESDEPS_yes = $(DISTFILESDEPS_) +DISTFILESDEPS_no = +DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO)) + +# Makevars gets inserted here. (Don't remove this line!) + +.SUFFIXES: +.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update + +.po.mo: + @echo "$(MSGFMT) -c -o $@ $<"; \ + $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ + +.po.gmo: + @lang=`echo $* | sed -e 's,.*/,,'`; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ + cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo + +.sin.sed: + sed -e '/^#/d' $< > t-$@ + mv t-$@ $@ + + +all: all-yes + +all-yes: stamp-po +all-no: + +# Ensure that the gettext macros and this Makefile.in.in are in sync. +CHECK_MACRO_VERSION = \ + test "$(GETTEXT_MACRO_VERSION)" = "0.19" \ + || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version 0.19" 1>&2; \ + exit 1; \ + } + +# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no +# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because +# we don't want to bother translators with empty POT files). We assume that +# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. +# In this case, stamp-po is a nop (i.e. a phony target). + +# stamp-po is a timestamp denoting the last time at which the CATALOGS have +# been loosely updated. Its purpose is that when a developer or translator +# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, +# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent +# invocations of "make" will do nothing. This timestamp would not be necessary +# if updating the $(CATALOGS) would always touch them; however, the rule for +# $(POFILES) has been designed to not touch files that don't need to be +# changed. +stamp-po: $(srcdir)/$(DOMAIN).pot + @$(CHECK_MACRO_VERSION) + test ! -f $(srcdir)/$(DOMAIN).pot || \ + test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) + @test ! -f $(srcdir)/$(DOMAIN).pot || { \ + echo "touch stamp-po" && \ + echo timestamp > stamp-poT && \ + mv stamp-poT stamp-po; \ + } + +# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', +# otherwise packages like GCC can not be built if only parts of the source +# have been downloaded. + +# This target rebuilds $(DOMAIN).pot; it is an expensive operation. +# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. +# The determination of whether the package xyz is a GNU one is based on the +# heuristic whether some file in the top level directory mentions "GNU xyz". +# If GNU 'find' is available, we avoid grepping through monster files. +$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed + package_gnu="$(PACKAGE_GNU)"; \ + test -n "$$package_gnu" || { \ + if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \ + LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f \ + -size -10000000c -exec grep 'GNU recutils' \ + /dev/null '{}' ';' 2>/dev/null; \ + else \ + LC_ALL=C grep 'GNU recutils' $(top_srcdir)/* 2>/dev/null; \ + fi; \ + } | grep -v 'libtool:' >/dev/null; then \ + package_gnu=yes; \ + else \ + package_gnu=no; \ + fi; \ + }; \ + if test "$$package_gnu" = "yes"; then \ + package_prefix='GNU '; \ + else \ + package_prefix=''; \ + fi; \ + if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ + msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ + else \ + msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ + fi; \ + case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --msgid-bugs-address="$$msgid_bugs_address" \ + ;; \ + *) \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --package-name="$${package_prefix}recutils" \ + --package-version='1.8' \ + --msgid-bugs-address="$$msgid_bugs_address" \ + ;; \ + esac + test ! -f $(DOMAIN).po || { \ + if test -f $(srcdir)/$(DOMAIN).pot-header; then \ + sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \ + cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po; \ + rm -f $(DOMAIN).1po; \ + fi; \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ + sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ + if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ + else \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + else \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + } + +# This rule has no dependencies: we don't need to update $(DOMAIN).pot at +# every "make" invocation, only create it when it is missing. +# Only "make $(DOMAIN).pot-update" or "make dist" will force an update. +$(srcdir)/$(DOMAIN).pot: + $(MAKE) $(DOMAIN).pot-update + +# This target rebuilds a PO file if $(DOMAIN).pot has changed. +# Note that a PO file is not touched if it doesn't need to be changed. +$(POFILES): $(POFILESDEPS) + @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ + if test -f "$(srcdir)/$${lang}.po"; then \ + test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \ + cd $(srcdir) \ + && { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ + $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ + *) \ + $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \ + esac; \ + }; \ + else \ + $(MAKE) $${lang}.po-create; \ + fi + + +install: install-exec install-data +install-exec: +install-data: install-data-yes + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ + for file in $(DISTFILES.common) Makevars.template; do \ + $(INSTALL_DATA) $(srcdir)/$$file \ + $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + for file in Makevars; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +install-data-no: all +install-data-yes: all + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $(DESTDIR)$$dir; \ + if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ + $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ + echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ + fi; \ + done; \ + done + +install-strip: install + +installdirs: installdirs-exec installdirs-data +installdirs-exec: +installdirs-data: installdirs-data-yes + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ + else \ + : ; \ + fi +installdirs-data-no: +installdirs-data-yes: + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $(DESTDIR)$$dir; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + fi; \ + done; \ + done + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: uninstall-exec uninstall-data +uninstall-exec: +uninstall-data: uninstall-data-yes + if test "$(PACKAGE)" = "gettext-tools"; then \ + for file in $(DISTFILES.common) Makevars.template; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +uninstall-data-no: +uninstall-data-yes: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + done; \ + done + +check: all + +info dvi ps pdf html tags TAGS ctags CTAGS ID: + +mostlyclean: + rm -f remove-potcdate.sed + rm -f stamp-poT + rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po + rm -fr *.o + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f stamp-po $(GMOFILES) + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: + test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS) + @$(MAKE) dist2 +# This is a separate target because 'update-po' must be executed before. +dist2: stamp-po $(DISTFILES) + dists="$(DISTFILES)"; \ + if test "$(PACKAGE)" = "gettext-tools"; then \ + dists="$$dists Makevars.template"; \ + fi; \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + dists="$$dists $(DOMAIN).pot stamp-po"; \ + fi; \ + if test -f $(srcdir)/ChangeLog; then \ + dists="$$dists ChangeLog"; \ + fi; \ + for i in 0 1 2 3 4 5 6 7 8 9; do \ + if test -f $(srcdir)/ChangeLog.$$i; then \ + dists="$$dists ChangeLog.$$i"; \ + fi; \ + done; \ + if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ + for file in $$dists; do \ + if test -f $$file; then \ + cp -p $$file $(distdir) || exit 1; \ + else \ + cp -p $(srcdir)/$$file $(distdir) || exit 1; \ + fi; \ + done + +update-po: Makefile + $(MAKE) $(DOMAIN).pot-update + test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) + $(MAKE) update-gmo + +# General rule for creating PO files. + +.nop.po-create: + @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ + echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ + exit 1 + +# General rule for updating PO files. + +.nop.po-update: + @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ + if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + cd $(srcdir); \ + if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ + $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ + *) \ + $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ + esac; \ + }; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +$(DUMMYPOFILES): + +update-gmo: Makefile $(GMOFILES) + @: + +# Recreate Makefile by invoking config.status. Explicitly invoke the shell, +# because execution permission bits may not work on the current file system. +# Use /bin/sh, which is the shell determined by autoconf for the use by its +# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. +Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ + cd $(top_builddir) \ + && /bin/sh ./config.status $(subdir)/$@.in po-directories + +force: + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/po/Makefile.in.in b/devspec.en_US/project/recutils/po/Makefile.in.in new file mode 100755 index 0000000..38c293d --- /dev/null +++ b/devspec.en_US/project/recutils/po/Makefile.in.in @@ -0,0 +1,483 @@ +# Makefile for PO directory in any package using GNU gettext. +# Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu> +# +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved. This file is offered as-is, +# without any warranty. +# +# Origin: gettext-0.19.8 +GETTEXT_MACRO_VERSION = 0.19 + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ + +SED = @SED@ +SHELL = /bin/sh +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datarootdir = @datarootdir@ +datadir = @datadir@ +localedir = @localedir@ +gettextsrcdir = $(datadir)/gettext/po + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ + +# We use $(mkdir_p). +# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as +# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, +# @install_sh@ does not start with $(SHELL), so we add it. +# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined +# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake +# versions, $(mkinstalldirs) and $(install_sh) are unused. +mkinstalldirs = $(SHELL) @install_sh@ -d +install_sh = $(SHELL) @install_sh@ +MKDIR_P = @MKDIR_P@ +mkdir_p = @mkdir_p@ + +# When building gettext-tools, we prefer to use the built programs +# rather than installed programs. However, we can't do that when we +# are cross compiling. +CROSS_COMPILING = @CROSS_COMPILING@ + +GMSGFMT_ = @GMSGFMT@ +GMSGFMT_no = @GMSGFMT@ +GMSGFMT_yes = @GMSGFMT_015@ +GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) +MSGFMT_ = @MSGFMT@ +MSGFMT_no = @MSGFMT@ +MSGFMT_yes = @MSGFMT_015@ +MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) +XGETTEXT_ = @XGETTEXT@ +XGETTEXT_no = @XGETTEXT@ +XGETTEXT_yes = @XGETTEXT_015@ +XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) +MSGMERGE = msgmerge +MSGMERGE_UPDATE = @MSGMERGE@ --update +MSGINIT = msginit +MSGCONV = msgconv +MSGFILTER = msgfilter + +POFILES = @POFILES@ +GMOFILES = @GMOFILES@ +UPDATEPOFILES = @UPDATEPOFILES@ +DUMMYPOFILES = @DUMMYPOFILES@ +DISTFILES.common = Makefile.in.in remove-potcdate.sin \ +$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) +DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ +$(POFILES) $(GMOFILES) \ +$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) + +POTFILES = \ + +CATALOGS = @CATALOGS@ + +POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot +POFILESDEPS_yes = $(POFILESDEPS_) +POFILESDEPS_no = +POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT)) + +DISTFILESDEPS_ = update-po +DISTFILESDEPS_yes = $(DISTFILESDEPS_) +DISTFILESDEPS_no = +DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO)) + +# Makevars gets inserted here. (Don't remove this line!) + +.SUFFIXES: +.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update + +.po.mo: + @echo "$(MSGFMT) -c -o $@ $<"; \ + $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ + +.po.gmo: + @lang=`echo $* | sed -e 's,.*/,,'`; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ + cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo + +.sin.sed: + sed -e '/^#/d' $< > t-$@ + mv t-$@ $@ + + +all: all-@USE_NLS@ + +all-yes: stamp-po +all-no: + +# Ensure that the gettext macros and this Makefile.in.in are in sync. +CHECK_MACRO_VERSION = \ + test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ + || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ + exit 1; \ + } + +# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no +# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because +# we don't want to bother translators with empty POT files). We assume that +# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. +# In this case, stamp-po is a nop (i.e. a phony target). + +# stamp-po is a timestamp denoting the last time at which the CATALOGS have +# been loosely updated. Its purpose is that when a developer or translator +# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, +# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent +# invocations of "make" will do nothing. This timestamp would not be necessary +# if updating the $(CATALOGS) would always touch them; however, the rule for +# $(POFILES) has been designed to not touch files that don't need to be +# changed. +stamp-po: $(srcdir)/$(DOMAIN).pot + @$(CHECK_MACRO_VERSION) + test ! -f $(srcdir)/$(DOMAIN).pot || \ + test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) + @test ! -f $(srcdir)/$(DOMAIN).pot || { \ + echo "touch stamp-po" && \ + echo timestamp > stamp-poT && \ + mv stamp-poT stamp-po; \ + } + +# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', +# otherwise packages like GCC can not be built if only parts of the source +# have been downloaded. + +# This target rebuilds $(DOMAIN).pot; it is an expensive operation. +# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. +# The determination of whether the package xyz is a GNU one is based on the +# heuristic whether some file in the top level directory mentions "GNU xyz". +# If GNU 'find' is available, we avoid grepping through monster files. +$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed + package_gnu="$(PACKAGE_GNU)"; \ + test -n "$$package_gnu" || { \ + if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \ + LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f \ + -size -10000000c -exec grep 'GNU @PACKAGE@' \ + /dev/null '{}' ';' 2>/dev/null; \ + else \ + LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \ + fi; \ + } | grep -v 'libtool:' >/dev/null; then \ + package_gnu=yes; \ + else \ + package_gnu=no; \ + fi; \ + }; \ + if test "$$package_gnu" = "yes"; then \ + package_prefix='GNU '; \ + else \ + package_prefix=''; \ + fi; \ + if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ + msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ + else \ + msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ + fi; \ + case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --msgid-bugs-address="$$msgid_bugs_address" \ + ;; \ + *) \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --package-name="$${package_prefix}@PACKAGE@" \ + --package-version='@VERSION@' \ + --msgid-bugs-address="$$msgid_bugs_address" \ + ;; \ + esac + test ! -f $(DOMAIN).po || { \ + if test -f $(srcdir)/$(DOMAIN).pot-header; then \ + sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \ + cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po; \ + rm -f $(DOMAIN).1po; \ + fi; \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ + sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ + if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ + else \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + else \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + } + +# This rule has no dependencies: we don't need to update $(DOMAIN).pot at +# every "make" invocation, only create it when it is missing. +# Only "make $(DOMAIN).pot-update" or "make dist" will force an update. +$(srcdir)/$(DOMAIN).pot: + $(MAKE) $(DOMAIN).pot-update + +# This target rebuilds a PO file if $(DOMAIN).pot has changed. +# Note that a PO file is not touched if it doesn't need to be changed. +$(POFILES): $(POFILESDEPS) + @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ + if test -f "$(srcdir)/$${lang}.po"; then \ + test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \ + cd $(srcdir) \ + && { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ + $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ + *) \ + $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \ + esac; \ + }; \ + else \ + $(MAKE) $${lang}.po-create; \ + fi + + +install: install-exec install-data +install-exec: +install-data: install-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ + for file in $(DISTFILES.common) Makevars.template; do \ + $(INSTALL_DATA) $(srcdir)/$$file \ + $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + for file in Makevars; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +install-data-no: all +install-data-yes: all + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $(DESTDIR)$$dir; \ + if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ + $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ + echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ + fi; \ + done; \ + done + +install-strip: install + +installdirs: installdirs-exec installdirs-data +installdirs-exec: +installdirs-data: installdirs-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ + else \ + : ; \ + fi +installdirs-data-no: +installdirs-data-yes: + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $(DESTDIR)$$dir; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + fi; \ + done; \ + done + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: uninstall-exec uninstall-data +uninstall-exec: +uninstall-data: uninstall-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + for file in $(DISTFILES.common) Makevars.template; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +uninstall-data-no: +uninstall-data-yes: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + done; \ + done + +check: all + +info dvi ps pdf html tags TAGS ctags CTAGS ID: + +mostlyclean: + rm -f remove-potcdate.sed + rm -f stamp-poT + rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po + rm -fr *.o + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f stamp-po $(GMOFILES) + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: + test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS) + @$(MAKE) dist2 +# This is a separate target because 'update-po' must be executed before. +dist2: stamp-po $(DISTFILES) + dists="$(DISTFILES)"; \ + if test "$(PACKAGE)" = "gettext-tools"; then \ + dists="$$dists Makevars.template"; \ + fi; \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + dists="$$dists $(DOMAIN).pot stamp-po"; \ + fi; \ + if test -f $(srcdir)/ChangeLog; then \ + dists="$$dists ChangeLog"; \ + fi; \ + for i in 0 1 2 3 4 5 6 7 8 9; do \ + if test -f $(srcdir)/ChangeLog.$$i; then \ + dists="$$dists ChangeLog.$$i"; \ + fi; \ + done; \ + if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ + for file in $$dists; do \ + if test -f $$file; then \ + cp -p $$file $(distdir) || exit 1; \ + else \ + cp -p $(srcdir)/$$file $(distdir) || exit 1; \ + fi; \ + done + +update-po: Makefile + $(MAKE) $(DOMAIN).pot-update + test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) + $(MAKE) update-gmo + +# General rule for creating PO files. + +.nop.po-create: + @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ + echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ + exit 1 + +# General rule for updating PO files. + +.nop.po-update: + @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ + if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + cd $(srcdir); \ + if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ + $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ + *) \ + $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ + esac; \ + }; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +$(DUMMYPOFILES): + +update-gmo: Makefile $(GMOFILES) + @: + +# Recreate Makefile by invoking config.status. Explicitly invoke the shell, +# because execution permission bits may not work on the current file system. +# Use @SHELL@, which is the shell determined by autoconf for the use by its +# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. +Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ + cd $(top_builddir) \ + && @SHELL@ ./config.status $(subdir)/$@.in po-directories + +force: + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/po/Makevars b/devspec.en_US/project/recutils/po/Makevars new file mode 100755 index 0000000..47112fd --- /dev/null +++ b/devspec.en_US/project/recutils/po/Makevars @@ -0,0 +1,89 @@ +# Makefile variables for PO directory in any package using GNU gettext. + +# Usually the message domain is the same as the package name. +DOMAIN = $(PACKAGE) + +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + +# These options get passed to xgettext. +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ \ + \ + --flag=_:1:pass-c-format\ + --flag=N_:1:pass-c-format\ + --flag=error:3:c-format --flag=error_at_line:5:c-format\ +\ + --from-code=UTF-8\ + --flag=asprintf:2:c-format --flag=vasprintf:2:c-format\ + --flag=asnprintf:3:c-format --flag=vasnprintf:3:c-format\ + --flag=wrapf:1:c-format\ + --flag=error:3:c-format --flag=error_at_line:5:c-format\ + $${end_of_xgettext_options+} + +# This is the copyright holder that gets inserted into the header of the +# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding +# package. (Note that the msgstr strings, extracted from the package's +# sources, belong to the copyright holder of the package.) Translators are +# expected to transfer the copyright for their translations to this person +# or entity, or to disclaim their copyright. The empty string stands for +# the public domain; in this case the translators are expected to disclaim +# their copyright. +COPYRIGHT_HOLDER = Free Software Foundation, Inc. + +# This tells whether or not to prepend "GNU " prefix to the package +# name that gets inserted into the header of the $(DOMAIN).pot file. +# Possible values are "yes", "no", or empty. If it is empty, try to +# detect it automatically by scanning the files in $(top_srcdir) for +# "GNU packagename" string. +PACKAGE_GNU = + +# This is the email address or URL to which the translators shall report +# bugs in the untranslated strings: +# - Strings which are not entire sentences, see the maintainer guidelines +# in the GNU gettext documentation, section 'Preparing Strings'. +# - Strings which use unclear terms or require additional context to be +# understood. +# - Strings which make invalid assumptions about notation of date, time or +# money. +# - Pluralisation problems. +# - Incorrect English spelling. +# - Incorrect formatting. +# It can be your email address, or a mailing list address where translators +# can write to without being subscribed, or the URL of a web page through +# which the translators can contact you. +MSGID_BUGS_ADDRESS = bug-gnu-utils@gnu.org + +# This is the list of locale categories, beyond LC_MESSAGES, for which the +# message catalogs shall be used. It is usually empty. +EXTRA_LOCALE_CATEGORIES = + +# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' +# context. Possible values are "yes" and "no". Set this to yes if the +# package uses functions taking also a message context, like pgettext(), or +# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. +USE_MSGCTXT = no + +# These options get passed to msgmerge. +# Useful options are in particular: +# --previous to keep previous msgids of translated messages, +# --quiet to reduce the verbosity. +MSGMERGE_OPTIONS = + +# These options get passed to msginit. +# If you want to disable line wrapping when writing PO files, add +# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and +# MSGINIT_OPTIONS. +MSGINIT_OPTIONS = + +# This tells whether or not to regenerate a PO file when $(DOMAIN).pot +# has changed. Possible values are "yes" and "no". Set this to no if +# the POT file is checked in the repository and the version control +# program ignores timestamps. +PO_DEPENDS_ON_POT = yes + +# This tells whether or not to forcibly update $(DOMAIN).pot and +# regenerate PO files on "make dist". Possible values are "yes" and +# "no". Set this to no if the POT file and PO files are maintained +# externally. +DIST_DEPENDS_ON_UPDATE_PO = yes diff --git a/devspec.en_US/project/recutils/po/POTFILES b/devspec.en_US/project/recutils/po/POTFILES new file mode 100755 index 0000000..68f4d6a --- /dev/null +++ b/devspec.en_US/project/recutils/po/POTFILES @@ -0,0 +1,328 @@ + ../lib/acl_entries.c \ + ../lib/acl-errno-valid.c \ + ../lib/acl.h \ + ../lib/acl-internal.c \ + ../lib/acl-internal.h \ + ../lib/alignof.h \ + ../lib/alloca.c \ + ../lib/alloca.in.h \ + ../lib/arg-nonnull.h \ + ../lib/asnprintf.c \ + ../lib/asprintf.c \ + ../lib/base64.c \ + ../lib/base64.h \ + ../lib/basename-lgpl.c \ + ../lib/btowc.c \ + ../lib/canonicalize-lgpl.c \ + ../lib/c-ctype.c \ + ../lib/c-ctype.h \ + ../lib/c++defs.h \ + ../lib/cloexec.c \ + ../lib/cloexec.h \ + ../lib/close.c \ + ../lib/closeout.c \ + ../lib/closeout.h \ + ../lib/close-stream.c \ + ../lib/close-stream.h \ + ../lib/copy-acl.c \ + ../lib/crc.c \ + ../lib/crc.h \ + ../lib/c-strcasecmp.c \ + ../lib/c-strcaseeq.h \ + ../lib/c-strcase.h \ + ../lib/c-strncasecmp.c \ + ../lib/dirname.h \ + ../lib/dirname-lgpl.c \ + ../lib/dosname.h \ + ../lib/dup2.c \ + ../lib/errno.in.h \ + ../lib/error.c \ + ../lib/error.h \ + ../lib/euidaccess.c \ + ../lib/execute.c \ + ../lib/execute.h \ + ../lib/exitfail.c \ + ../lib/exitfail.h \ + ../lib/fatal-signal.c \ + ../lib/fatal-signal.h \ + ../lib/fcntl.c \ + ../lib/fcntl.in.h \ + ../lib/fd-hook.c \ + ../lib/fd-hook.h \ + ../lib/filename.h \ + ../lib/flexmember.h \ + ../lib/float.c \ + ../lib/float+.h \ + ../lib/float.in.h \ + ../lib/flock.c \ + ../lib/floor.c \ + ../lib/fpending.c \ + ../lib/fpending.h \ + ../lib/fprintf.c \ + ../lib/fpucw.h \ + ../lib/frexp.c \ + ../lib/frexpl.c \ + ../lib/fseek.c \ + ../lib/fseeko.c \ + ../lib/fseterr.c \ + ../lib/fseterr.h \ + ../lib/fstat.c \ + ../lib/ftell.c \ + ../lib/ftello.c \ + ../lib/fwriting.c \ + ../lib/fwriting.h \ + ../lib/getdelim.c \ + ../lib/getdtablesize.c \ + ../lib/getfilecon.c \ + ../lib/getgroups.c \ + ../lib/getline.c \ + ../lib/getopt1.c \ + ../lib/getopt.c \ + ../lib/getopt-cdefs.in.h \ + ../lib/getopt-core.h \ + ../lib/getopt-ext.h \ + ../lib/getopt.in.h \ + ../lib/getopt_int.h \ + ../lib/getopt-pfx-core.h \ + ../lib/getopt-pfx-ext.h \ + ../lib/getpass.c \ + ../lib/getpass.h \ + ../lib/get-permissions.c \ + ../lib/getprogname.c \ + ../lib/getprogname.h \ + ../lib/gettext.h \ + ../lib/gettime.c \ + ../lib/gettimeofday.c \ + ../lib/gl_array_list.c \ + ../lib/gl_array_list.h \ + ../lib/gl_list.c \ + ../lib/gl_list.h \ + ../lib/group-member.c \ + ../lib/hard-locale.c \ + ../lib/hard-locale.h \ + ../lib/intprops.h \ + ../lib/inttypes.in.h \ + ../lib/isnan.c \ + ../lib/isnand.c \ + ../lib/isnand-nolibm.h \ + ../lib/isnanf.c \ + ../lib/isnanf-nolibm.h \ + ../lib/isnanl.c \ + ../lib/isnanl-nolibm.h \ + ../lib/itold.c \ + ../lib/langinfo.in.h \ + ../lib/limits.in.h \ + ../lib/localcharset.c \ + ../lib/localcharset.h \ + ../lib/localeconv.c \ + ../lib/locale.in.h \ + ../lib/localtime-buffer.c \ + ../lib/localtime-buffer.h \ + ../lib/lseek.c \ + ../lib/lstat.c \ + ../lib/malloca.c \ + ../lib/malloca.h \ + ../lib/malloc.c \ + ../lib/math.c \ + ../lib/math.in.h \ + ../lib/mbrlen.c \ + ../lib/mbrtowc.c \ + ../lib/mbsinit.c \ + ../lib/mbtowc.c \ + ../lib/mbtowc-impl.h \ + ../lib/memchr.c \ + ../lib/minmax.h \ + ../lib/mkostemp.c \ + ../lib/mkstemp.c \ + ../lib/mktime.c \ + ../lib/mktime-internal.h \ + ../lib/msvc-inval.c \ + ../lib/msvc-inval.h \ + ../lib/msvc-nothrow.c \ + ../lib/msvc-nothrow.h \ + ../lib/nl_langinfo.c \ + ../lib/_Noreturn.h \ + ../lib/nstrftime.c \ + ../lib/obstack.c \ + ../lib/obstack.h \ + ../lib/open.c \ + ../lib/parse-datetime.c \ + ../lib/parse-datetime.h \ + ../lib/pathmax.h \ + ../lib/printf-args.c \ + ../lib/printf-args.h \ + ../lib/printf.c \ + ../lib/printf-frexp.c \ + ../lib/printf-frexp.h \ + ../lib/printf-frexpl.c \ + ../lib/printf-frexpl.h \ + ../lib/printf-parse.c \ + ../lib/printf-parse.h \ + ../lib/progname.c \ + ../lib/progname.h \ + ../lib/qcopy-acl.c \ + ../lib/qset-acl.c \ + ../lib/quotearg.c \ + ../lib/quotearg.h \ + ../lib/quote.h \ + ../lib/raise.c \ + ../lib/random_r.c \ + ../lib/rawmemchr.c \ + ../lib/read-file.c \ + ../lib/read-file.h \ + ../lib/readline.c \ + ../lib/readline.h \ + ../lib/readlink.c \ + ../lib/realloc.c \ + ../lib/regcomp.c \ + ../lib/regex.c \ + ../lib/regexec.c \ + ../lib/regex.h \ + ../lib/regex_internal.c \ + ../lib/regex_internal.h \ + ../lib/rename.c \ + ../lib/rmdir.c \ + ../lib/root-uid.h \ + ../lib/same-inode.h \ + ../lib/sched.in.h \ + ../lib/se-context.c \ + ../lib/se-context.in.h \ + ../lib/secure_getenv.c \ + ../lib/se-selinux.c \ + ../lib/se-selinux.in.h \ + ../lib/set-acl.c \ + ../lib/setenv.c \ + ../lib/set-permissions.c \ + ../lib/sigaction.c \ + ../lib/sig-handler.c \ + ../lib/sig-handler.h \ + ../lib/signal.in.h \ + ../lib/signbitd.c \ + ../lib/signbitf.c \ + ../lib/signbitl.c \ + ../lib/sigprocmask.c \ + ../lib/size_max.h \ + ../lib/spawnattr_destroy.c \ + ../lib/spawnattr_init.c \ + ../lib/spawnattr_setflags.c \ + ../lib/spawnattr_setsigmask.c \ + ../lib/spawn_faction_addopen.c \ + ../lib/spawn_faction_destroy.c \ + ../lib/spawn_faction_init.c \ + ../lib/spawni.c \ + ../lib/spawn.in.h \ + ../lib/spawn_int.h \ + ../lib/spawnp.c \ + ../lib/stat.c \ + ../lib/stat-macros.h \ + ../lib/stat-time.c \ + ../lib/stat-time.h \ + ../lib/stat-w32.c \ + ../lib/stat-w32.h \ + ../lib/stdarg.in.h \ + ../lib/stdbool.in.h \ + ../lib/stddef.in.h \ + ../lib/stdint.in.h \ + ../lib/stdio-impl.h \ + ../lib/stdio.in.h \ + ../lib/stdlib.in.h \ + ../lib/strcasecmp.c \ + ../lib/strcasestr.c \ + ../lib/strchrnul.c \ + ../lib/streq.h \ + ../lib/strerror.c \ + ../lib/strerror-override.c \ + ../lib/strerror-override.h \ + ../lib/strftime.h \ + ../lib/string.in.h \ + ../lib/strings.in.h \ + ../lib/stripslash.c \ + ../lib/strncasecmp.c \ + ../lib/strsep.c \ + ../lib/str-two-way.h \ + ../lib/strverscmp.c \ + ../lib/sys_file.in.h \ + ../lib/sys_stat.in.h \ + ../lib/sys_time.in.h \ + ../lib/sys_types.in.h \ + ../lib/sys_wait.in.h \ + ../lib/tempname.c \ + ../lib/tempname.h \ + ../lib/timegm.c \ + ../lib/time.in.h \ + ../lib/time-internal.h \ + ../lib/time_r.c \ + ../lib/time_rz.c \ + ../lib/timespec.c \ + ../lib/timespec.h \ + ../lib/tmpdir.c \ + ../lib/tmpdir.h \ + ../lib/tzset.c \ + ../lib/unistd.c \ + ../lib/unistd.in.h \ + ../lib/unlocked-io.h \ + ../lib/unsetenv.c \ + ../lib/unused-parameter.h \ + ../lib/vasnprintf.c \ + ../lib/vasnprintf.h \ + ../lib/vasprintf.c \ + ../lib/verify.h \ + ../lib/version-etc.c \ + ../lib/version-etc-fsf.c \ + ../lib/version-etc.h \ + ../lib/vfprintf.c \ + ../lib/w32spawn.h \ + ../lib/waitpid.c \ + ../lib/wait-process.c \ + ../lib/wait-process.h \ + ../lib/warn-on-use.h \ + ../lib/wchar.in.h \ + ../lib/wcrtomb.c \ + ../lib/wctob.c \ + ../lib/wctomb.c \ + ../lib/wctomb-impl.h \ + ../lib/wctype-h.c \ + ../lib/wctype.in.h \ + ../lib/xalloc-die.c \ + ../lib/xalloc.h \ + ../lib/xalloc-oversized.h \ + ../lib/xmalloc.c \ + ../lib/xsize.c \ + ../lib/xsize.h \ + ../src/rec-aggregate.c \ + ../src/rec-buf.c \ + ../src/rec.c \ + ../src/rec-comment.c \ + ../src/rec-crypt.c \ + ../src/rec-crypt-dummy.c \ + ../src/rec-db.c \ + ../src/rec-fex.c \ + ../src/rec-field.c \ + ../src/rec-field-name.c \ + ../src/rec.h \ + ../src/rec-int.c \ + ../src/rec-mset.c \ + ../src/rec-parser.c \ + ../src/rec-record.c \ + ../src/rec-rset.c \ + ../src/rec-sex-ast.c \ + ../src/rec-sex-ast.h \ + ../src/rec-sex.c \ + ../src/rec-sex-parser.c \ + ../src/rec-sex-parser.h \ + ../src/rec-types.c \ + ../src/rec-utils.c \ + ../src/rec-utils.h \ + ../src/rec-writer.c \ + ../utils/csv2rec.c \ + ../utils/mdb2rec.c \ + ../utils/rec2csv.c \ + ../utils/recdel.c \ + ../utils/recfix.c \ + ../utils/recfmt.c \ + ../utils/recinf.c \ + ../utils/recins.c \ + ../utils/recsel.c \ + ../utils/recset.c \ + ../utils/recutl.c \ + ../utils/recutl.h diff --git a/devspec.en_US/project/recutils/po/POTFILES.in b/devspec.en_US/project/recutils/po/POTFILES.in new file mode 100755 index 0000000..d4246b0 --- /dev/null +++ b/devspec.en_US/project/recutils/po/POTFILES.in @@ -0,0 +1,336 @@ +# List of source files which contain translatable strings. + +# Gnulib source files. + +lib/acl_entries.c +lib/acl-errno-valid.c +lib/acl.h +lib/acl-internal.c +lib/acl-internal.h +lib/alignof.h +lib/alloca.c +lib/alloca.in.h +lib/arg-nonnull.h +lib/asnprintf.c +lib/asprintf.c +lib/base64.c +lib/base64.h +lib/basename-lgpl.c +lib/btowc.c +lib/canonicalize-lgpl.c +lib/c-ctype.c +lib/c-ctype.h +lib/c++defs.h +lib/cloexec.c +lib/cloexec.h +lib/close.c +lib/closeout.c +lib/closeout.h +lib/close-stream.c +lib/close-stream.h +lib/copy-acl.c +lib/crc.c +lib/crc.h +lib/c-strcasecmp.c +lib/c-strcaseeq.h +lib/c-strcase.h +lib/c-strncasecmp.c +lib/dirname.h +lib/dirname-lgpl.c +lib/dosname.h +lib/dup2.c +lib/errno.in.h +lib/error.c +lib/error.h +lib/euidaccess.c +lib/execute.c +lib/execute.h +lib/exitfail.c +lib/exitfail.h +lib/fatal-signal.c +lib/fatal-signal.h +lib/fcntl.c +lib/fcntl.in.h +lib/fd-hook.c +lib/fd-hook.h +lib/filename.h +lib/flexmember.h +lib/float.c +lib/float+.h +lib/float.in.h +lib/flock.c +lib/floor.c +lib/fpending.c +lib/fpending.h +lib/fprintf.c +lib/fpucw.h +lib/frexp.c +lib/frexpl.c +lib/fseek.c +lib/fseeko.c +lib/fseterr.c +lib/fseterr.h +lib/fstat.c +lib/ftell.c +lib/ftello.c +lib/fwriting.c +lib/fwriting.h +lib/getdelim.c +lib/getdtablesize.c +lib/getfilecon.c +lib/getgroups.c +lib/getline.c +lib/getopt1.c +lib/getopt.c +lib/getopt-cdefs.in.h +lib/getopt-core.h +lib/getopt-ext.h +lib/getopt.in.h +lib/getopt_int.h +lib/getopt-pfx-core.h +lib/getopt-pfx-ext.h +lib/getpass.c +lib/getpass.h +lib/get-permissions.c +lib/getprogname.c +lib/getprogname.h +lib/gettext.h +lib/gettime.c +lib/gettimeofday.c +lib/gl_array_list.c +lib/gl_array_list.h +lib/gl_list.c +lib/gl_list.h +lib/group-member.c +lib/hard-locale.c +lib/hard-locale.h +lib/intprops.h +lib/inttypes.in.h +lib/isnan.c +lib/isnand.c +lib/isnand-nolibm.h +lib/isnanf.c +lib/isnanf-nolibm.h +lib/isnanl.c +lib/isnanl-nolibm.h +lib/itold.c +lib/langinfo.in.h +lib/limits.in.h +lib/localcharset.c +lib/localcharset.h +lib/localeconv.c +lib/locale.in.h +lib/localtime-buffer.c +lib/localtime-buffer.h +lib/lseek.c +lib/lstat.c +lib/malloca.c +lib/malloca.h +lib/malloc.c +lib/math.c +lib/math.in.h +lib/mbrlen.c +lib/mbrtowc.c +lib/mbsinit.c +lib/mbtowc.c +lib/mbtowc-impl.h +lib/memchr.c +lib/minmax.h +lib/mkostemp.c +lib/mkstemp.c +lib/mktime.c +lib/mktime-internal.h +lib/msvc-inval.c +lib/msvc-inval.h +lib/msvc-nothrow.c +lib/msvc-nothrow.h +lib/nl_langinfo.c +lib/_Noreturn.h +lib/nstrftime.c +lib/obstack.c +lib/obstack.h +lib/open.c +lib/parse-datetime.c +lib/parse-datetime.h +lib/pathmax.h +lib/printf-args.c +lib/printf-args.h +lib/printf.c +lib/printf-frexp.c +lib/printf-frexp.h +lib/printf-frexpl.c +lib/printf-frexpl.h +lib/printf-parse.c +lib/printf-parse.h +lib/progname.c +lib/progname.h +lib/qcopy-acl.c +lib/qset-acl.c +lib/quotearg.c +lib/quotearg.h +lib/quote.h +lib/raise.c +lib/random_r.c +lib/rawmemchr.c +lib/read-file.c +lib/read-file.h +lib/readline.c +lib/readline.h +lib/readlink.c +lib/realloc.c +lib/regcomp.c +lib/regex.c +lib/regexec.c +lib/regex.h +lib/regex_internal.c +lib/regex_internal.h +lib/rename.c +lib/rmdir.c +lib/root-uid.h +lib/same-inode.h +lib/sched.in.h +lib/se-context.c +lib/se-context.in.h +lib/secure_getenv.c +lib/se-selinux.c +lib/se-selinux.in.h +lib/set-acl.c +lib/setenv.c +lib/set-permissions.c +lib/sigaction.c +lib/sig-handler.c +lib/sig-handler.h +lib/signal.in.h +lib/signbitd.c +lib/signbitf.c +lib/signbitl.c +lib/sigprocmask.c +lib/size_max.h +lib/spawnattr_destroy.c +lib/spawnattr_init.c +lib/spawnattr_setflags.c +lib/spawnattr_setsigmask.c +lib/spawn_faction_addopen.c +lib/spawn_faction_destroy.c +lib/spawn_faction_init.c +lib/spawni.c +lib/spawn.in.h +lib/spawn_int.h +lib/spawnp.c +lib/stat.c +lib/stat-macros.h +lib/stat-time.c +lib/stat-time.h +lib/stat-w32.c +lib/stat-w32.h +lib/stdarg.in.h +lib/stdbool.in.h +lib/stddef.in.h +lib/stdint.in.h +lib/stdio-impl.h +lib/stdio.in.h +lib/stdlib.in.h +lib/strcasecmp.c +lib/strcasestr.c +lib/strchrnul.c +lib/streq.h +lib/strerror.c +lib/strerror-override.c +lib/strerror-override.h +lib/strftime.h +lib/string.in.h +lib/strings.in.h +lib/stripslash.c +lib/strncasecmp.c +lib/strsep.c +lib/str-two-way.h +lib/strverscmp.c +lib/sys_file.in.h +lib/sys_stat.in.h +lib/sys_time.in.h +lib/sys_types.in.h +lib/sys_wait.in.h +lib/tempname.c +lib/tempname.h +lib/timegm.c +lib/time.in.h +lib/time-internal.h +lib/time_r.c +lib/time_rz.c +lib/timespec.c +lib/timespec.h +lib/tmpdir.c +lib/tmpdir.h +lib/tzset.c +lib/unistd.c +lib/unistd.in.h +lib/unlocked-io.h +lib/unsetenv.c +lib/unused-parameter.h +lib/vasnprintf.c +lib/vasnprintf.h +lib/vasprintf.c +lib/verify.h +lib/version-etc.c +lib/version-etc-fsf.c +lib/version-etc.h +lib/vfprintf.c +lib/w32spawn.h +lib/waitpid.c +lib/wait-process.c +lib/wait-process.h +lib/warn-on-use.h +lib/wchar.in.h +lib/wcrtomb.c +lib/wctob.c +lib/wctomb.c +lib/wctomb-impl.h +lib/wctype-h.c +lib/wctype.in.h +lib/xalloc-die.c +lib/xalloc.h +lib/xalloc-oversized.h +lib/xmalloc.c +lib/xsize.c +lib/xsize.h + +# Package source files. + +src/rec-aggregate.c +src/rec-buf.c +src/rec.c +src/rec-comment.c +src/rec-crypt.c +src/rec-crypt-dummy.c +src/rec-db.c +src/rec-fex.c +src/rec-field.c +src/rec-field-name.c +src/rec.h +src/rec-int.c +src/rec-mset.c +src/rec-parser.c +src/rec-record.c +src/rec-rset.c +src/rec-sex-ast.c +src/rec-sex-ast.h +src/rec-sex.c +src/rec-sex-parser.c +src/rec-sex-parser.h +src/rec-types.c +src/rec-utils.c +src/rec-utils.h +src/rec-writer.c + +utils/csv2rec.c +utils/mdb2rec.c +utils/rec2csv.c +utils/recdel.c +utils/recfix.c +utils/recfmt.c +utils/recinf.c +utils/recins.c +utils/recsel.c +utils/recset.c +utils/recutl.c +utils/recutl.h diff --git a/devspec.en_US/project/recutils/po/Rules-quot b/devspec.en_US/project/recutils/po/Rules-quot new file mode 100755 index 0000000..baf6528 --- /dev/null +++ b/devspec.en_US/project/recutils/po/Rules-quot @@ -0,0 +1,58 @@ +# This file, Rules-quot, can be copied and used freely without restrictions. +# Special Makefile rules for English message catalogs with quotation marks. + +DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot + +.SUFFIXES: .insert-header .po-update-en + +en@quot.po-create: + $(MAKE) en@quot.po-update +en@boldquot.po-create: + $(MAKE) en@boldquot.po-update + +en@quot.po-update: en@quot.po-update-en +en@boldquot.po-update: en@boldquot.po-update-en + +.insert-header.po-update-en: + @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ + if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + ll=`echo $$lang | sed -e 's/@.*//'`; \ + LC_ALL=C; export LC_ALL; \ + cd $(srcdir); \ + if $(MSGINIT) $(MSGINIT_OPTIONS) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \ + | $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \ + { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \ + $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \ + ;; \ + *) \ + $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \ + ;; \ + esac } 2>/dev/null > $$tmpdir/$$lang.new.po \ + ; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "creation of $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +en@quot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header + +en@boldquot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header + +mostlyclean: mostlyclean-quot +mostlyclean-quot: + rm -f *.insert-header diff --git a/devspec.en_US/project/recutils/po/boldquot.sed b/devspec.en_US/project/recutils/po/boldquot.sed new file mode 100755 index 0000000..4b937aa --- /dev/null +++ b/devspec.en_US/project/recutils/po/boldquot.sed @@ -0,0 +1,10 @@ +s/"\([^"]*\)"/“\1”/g +s/`\([^`']*\)'/‘\1’/g +s/ '\([^`']*\)' / ‘\1’ /g +s/ '\([^`']*\)'$/ ‘\1’/g +s/^'\([^`']*\)' /‘\1’ /g +s/“”/""/g +s/“/“/g +s/”/”/g +s/‘/‘/g +s/’/’/g diff --git a/devspec.en_US/project/recutils/po/de.gmo b/devspec.en_US/project/recutils/po/de.gmo new file mode 100755 index 0000000000000000000000000000000000000000..a048c3229bc26c18b8d262faf39d899e7cbbc1f6 GIT binary patch literal 35833 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³?OZPqGg<v8oDJ6xcal=dq91CoP#X3cBHi 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 Wa{c-BXXCeg3}ht>62$8&*#8ByQNlw2 literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/po/de.po b/devspec.en_US/project/recutils/po/de.po new file mode 100755 index 0000000..9e89712 --- /dev/null +++ b/devspec.en_US/project/recutils/po/de.po @@ -0,0 +1,2196 @@ +# German translation for GNU recutils. +# Copyright (C) 2011 Free Software Foundation, Inc. +# This file is distributed under the same license as the recutils package. +# Mario Blättermann <mario.blaettermann@gmail.com>, 2011, 2012, 2013, 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: GNU recutils 1.6.90\n" +"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" +"POT-Creation-Date: 2019-01-03 10:32+0100\n" +"PO-Revision-Date: 2014-03-20 09:40+0100\n" +"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n" +"Language-Team: German <translation-team-de@lists.sourceforge.net>\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"X-Generator: Poedit 1.5.4\n" + +#: lib/closeout.c:122 +msgid "write error" +msgstr "Schreibfehler" + +#: lib/copy-acl.c:54 +#, c-format +msgid "preserving permissions for %s" +msgstr "" + +#: lib/error.c:195 +msgid "Unknown system error" +msgstr "Unbekannter Systemfehler" + +#: lib/execute.c:185 lib/execute.c:258 lib/wait-process.c:282 +#: lib/wait-process.c:356 +#, c-format +msgid "%s subprocess failed" +msgstr "Unterprozess %s fehlgeschlagen" + +#: lib/getopt.c:278 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous\n" +msgstr "%s: Die Option »-W %s« ist nicht eindeutig\n" + +#: lib/getopt.c:284 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous; possibilities:" +msgstr "%s: Die Option »%s« ist nicht eindeutig; möglich wären:" + +#: lib/getopt.c:319 +#, fuzzy, c-format +msgid "%s: unrecognized option '%s%s'\n" +msgstr "%s: Unbekannte Option »%c%s«\n" + +#: lib/getopt.c:345 +#, fuzzy, c-format +msgid "%s: option '%s%s' doesn't allow an argument\n" +msgstr "%s: Die Option »%c%s« erlaubt kein Argument\n" + +#: lib/getopt.c:360 +#, fuzzy, c-format +msgid "%s: option '%s%s' requires an argument\n" +msgstr "%s: Die Option »%s« benötigt ein Argument\n" + +#: lib/getopt.c:621 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: Ungültige Option -- %c\n" + +#: lib/getopt.c:636 lib/getopt.c:682 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: Diese Option benötigt ein Argument -- »%c«\n" + +#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "Speicher verbraucht" + +#: parse-datetime.y:440 parse-datetime.y:540 +#, c-format +msgid "parsed %s part: " +msgstr "" + +#: parse-datetime.y:455 +#, c-format +msgid "year: %04<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:483 +#, c-format +msgid "%s (day ordinal=%<PRIdMAX> number=%d)" +msgstr "" + +#: parse-datetime.y:514 +#, c-format +msgid "number of seconds: %<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:547 +msgid "today/this/now\n" +msgstr "" + +#: parse-datetime.y:612 +msgid "number of seconds" +msgstr "" + +#: parse-datetime.y:625 +msgid "datetime" +msgstr "" + +#: parse-datetime.y:630 +msgid "time" +msgstr "" + +#: parse-datetime.y:635 +msgid "local_zone" +msgstr "" + +#: parse-datetime.y:640 +msgid "zone" +msgstr "" + +#: parse-datetime.y:645 +msgid "date" +msgstr "" + +#: parse-datetime.y:650 +msgid "day" +msgstr "" + +#: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 +msgid "relative" +msgstr "" + +#: parse-datetime.y:658 +msgid "number" +msgstr "" + +#: parse-datetime.y:662 +msgid "hybrid" +msgstr "" + +#: parse-datetime.y:820 +#, c-format +msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" +msgstr "" + +#: parse-datetime.y:832 +#, c-format +msgid "" +"warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" +msgstr "" + +#: parse-datetime.y:1276 +#, c-format +msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1286 +#, c-format +msgid "error: out-of-range year %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1524 +#, fuzzy, c-format +msgid "error: unknown word '%s'\n" +msgstr "Fehler: Datei %s kann nicht gelesen werden\n" + +#: parse-datetime.y:1673 +#, fuzzy +msgid "error: invalid date/time value:\n" +msgstr "Ungültiger Aufzählungswert." + +#: parse-datetime.y:1674 +#, c-format +msgid " user provided time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1676 +#, c-format +msgid " normalized time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1699 +msgid " possible reasons:\n" +msgstr "" + +#: parse-datetime.y:1701 +msgid " non-existing due to daylight-saving time;\n" +msgstr "" + +#: parse-datetime.y:1703 +msgid " invalid day/month combination;\n" +msgstr "" + +#: parse-datetime.y:1704 +msgid " numeric values overflow;\n" +msgstr "" + +#: parse-datetime.y:1705 +msgid "incorrect timezone" +msgstr "" + +#: parse-datetime.y:1706 +msgid "missing timezone" +msgstr "" + +#: parse-datetime.y:1826 +msgid "error: initial year out of range\n" +msgstr "" + +#: parse-datetime.y:1923 +#, fuzzy +msgid "error: parsing failed\n" +msgstr "Fehler beim Einlesen der CSV-Datei: %s\n" + +#: parse-datetime.y:1924 +#, fuzzy, c-format +msgid "error: parsing failed, stopped at '%s'\n" +msgstr "Fehler beim Einlesen der CSV-Datei: %s\n" + +#: parse-datetime.y:1934 +msgid "input timezone: " +msgstr "" + +#: parse-datetime.y:1937 +#, c-format +msgid "'@timespec' - always UTC" +msgstr "" + +#: parse-datetime.y:1939 +#, c-format +msgid "parsed date/time string" +msgstr "" + +#: parse-datetime.y:1943 +#, c-format +msgid "TZ=\"%s\" in date string" +msgstr "" + +#: parse-datetime.y:1947 +#, c-format +msgid "TZ=\"UTC0\" environment value or -u" +msgstr "" + +#: parse-datetime.y:1950 +#, c-format +msgid "TZ=\"%s\" environment value" +msgstr "" + +#: parse-datetime.y:1953 +#, c-format +msgid "system default" +msgstr "" + +#: parse-datetime.y:1995 +msgid "error: year, month, or day overflow\n" +msgstr "" + +#: parse-datetime.y:2006 +#, fuzzy, c-format +msgid "error: invalid hour %<PRIdMAX>%s\n" +msgstr "%s:%s: Fehler: Ungültiger Datensatztyp %s\n" + +#: parse-datetime.y:2014 +#, c-format +msgid "using specified time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2015 +#, c-format +msgid "using current time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2069 +#, c-format +msgid "error: tzalloc (\"%s\") failed\n" +msgstr "" + +#: parse-datetime.y:2114 +#, c-format +msgid "" +"error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " +"date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2125 +#, c-format +msgid "new start date: '%s' is '%s'\n" +msgstr "" + +#: parse-datetime.y:2134 +#, c-format +msgid "using current date as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2138 +#, c-format +msgid "warning: day (%s) ignored when explicit dates are given\n" +msgstr "" + +#: parse-datetime.y:2142 +#, c-format +msgid "starting date/time: '%s'\n" +msgstr "" + +#: parse-datetime.y:2152 +msgid "" +"warning: when adding relative months/years, it is recommended to specify the " +"15th of the months\n" +msgstr "" + +#: parse-datetime.y:2157 +msgid "warning: when adding relative days, it is recommended to specify noon\n" +msgstr "" + +#: parse-datetime.y:2167 +#, fuzzy, c-format +msgid "error: %s:%d\n" +msgstr ": Fehler: " + +#: parse-datetime.y:2181 +#, c-format +msgid "error: adding relative date resulted in an invalid date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2190 +#, c-format +msgid "" +"after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " +"days),\n" +msgstr "" + +#: parse-datetime.y:2194 +#, c-format +msgid " new date/time = '%s'\n" +msgstr "" + +#: parse-datetime.y:2213 +msgid "warning: daylight saving time changed after date adjustment\n" +msgstr "" + +#: parse-datetime.y:2232 +msgid "warning: month/year adjustment resulted in shifted dates:\n" +msgstr "" + +#: parse-datetime.y:2235 +#, c-format +msgid " adjusted Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2237 +#, c-format +msgid " normalized Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2265 +#, c-format +msgid "error: timezone %d caused time_t overflow\n" +msgstr "" + +#: parse-datetime.y:2275 +#, c-format +msgid "'%s' = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2303 +msgid "error: adding relative time caused an overflow\n" +msgstr "" + +#: parse-datetime.y:2314 +#, c-format +msgid "" +"after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " +"seconds, %+d ns),\n" +msgstr "" + +#: parse-datetime.y:2319 +#, c-format +msgid " new time = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2335 +msgid "warning: daylight saving time changed after time adjustment\n" +msgstr "" + +#: parse-datetime.y:2345 +msgid "timezone: system default\n" +msgstr "" + +#: parse-datetime.y:2347 +msgid "timezone: Universal Time\n" +msgstr "" + +#: parse-datetime.y:2349 +#, c-format +msgid "timezone: TZ=\"%s\" environment value\n" +msgstr "" + +#: parse-datetime.y:2353 +#, c-format +msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" +msgstr "" + +#: parse-datetime.y:2359 +#, c-format +msgid "final: %s (UTC)\n" +msgstr "" + +#: parse-datetime.y:2374 +#, c-format +msgid "final: %s (UTC%s)\n" +msgstr "" + +#: parse-datetime.y:2378 +#, c-format +msgid "final: %s (unknown time zone offset)\n" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". For example, a French Unicode local should translate +#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), respectively. +#. +#. If the catalog has no translation, we will try to +#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and +#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the +#. current locale is not Unicode, locale_quoting_style +#. will quote 'like this', and clocale_quoting_style will +#. quote "like this". You should always include translations +#. for "`" and "'" even if U+2018 and U+2019 are appropriate +#. for your locale. +#. +#. If you don't know what to put here, please see +#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:362 +msgid "`" +msgstr "»" + +#: lib/quotearg.c:363 +msgid "'" +msgstr "«" + +#: lib/regcomp.c:135 +msgid "Success" +msgstr "Erfolg" + +#: lib/regcomp.c:138 +msgid "No match" +msgstr "Kein Treffer" + +#: lib/regcomp.c:141 +msgid "Invalid regular expression" +msgstr "Ungültiger regulärer Ausdruck" + +#: lib/regcomp.c:144 +msgid "Invalid collation character" +msgstr "Ungültiges Sortierzeichen" + +#: lib/regcomp.c:147 +msgid "Invalid character class name" +msgstr "Ungültiger Name für Zeichenklasse" + +#: lib/regcomp.c:150 +msgid "Trailing backslash" +msgstr "Angehängter Backslash" + +#: lib/regcomp.c:153 +msgid "Invalid back reference" +msgstr "Ungültige Rückreferenz" + +#: lib/regcomp.c:156 +#, fuzzy +msgid "Unmatched [, [^, [:, [., or [=" +msgstr "Öffnende [ oder [^ ohne schließende." + +#: lib/regcomp.c:159 +msgid "Unmatched ( or \\(" +msgstr "Öffnende ( oder \\( ohne schließende." + +#: lib/regcomp.c:162 +msgid "Unmatched \\{" +msgstr "Öffnende \\{ ohne schließende." + +#: lib/regcomp.c:165 +msgid "Invalid content of \\{\\}" +msgstr "Ungültiger Inhalt von \\{\\}" + +#: lib/regcomp.c:168 +msgid "Invalid range end" +msgstr "Ungültiges Bereichsende" + +#: lib/regcomp.c:171 +msgid "Memory exhausted" +msgstr "Speicher verbraucht" + +#: lib/regcomp.c:174 +msgid "Invalid preceding regular expression" +msgstr "Ungültiger vorhergehender regulärer Ausdruck" + +#: lib/regcomp.c:177 +msgid "Premature end of regular expression" +msgstr "Vorzeitiges Ende des regulären Ausdrucks" + +#: lib/regcomp.c:180 +msgid "Regular expression too big" +msgstr "Regulärer Ausdruck zu groß" + +#: lib/regcomp.c:183 +msgid "Unmatched ) or \\)" +msgstr "Schließende ) oder \\)" + +#: lib/regcomp.c:676 +msgid "No previous regular expression" +msgstr "Kein vorhergehender regulärer Ausdruck" + +#: lib/set-acl.c:46 +#, c-format +msgid "setting permissions for %s" +msgstr "" + +#: lib/version-etc.c:73 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:76 +#, c-format +msgid "Packaged by %s\n" +msgstr "" + +#. TRANSLATORS: Translate "(C)" to the copyright symbol +#. (C-in-a-circle), if this symbol is available in the user's +#. locale. Otherwise, do not translate "(C)"; leave it as-is. +#: lib/version-etc.c:83 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:85 +#, fuzzy +msgid "" +"\n" +"License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +"\n" +msgstr "" +"Copyright (C) %s Jose E. Marchesi.\n" +"Lizenz GPLv3+: GNU GPL Version 3 oder neuer <http://gnu.org/licenses/gpl." +"html>.\n" +"Dies ist freie Software: Sie können Sie frei verändern und weitergeben.\n" +"Es gibt KEINE GARANTIE, soweit gesetzlich zulässig.\n" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, fuzzy, c-format +msgid "Written by %s and %s.\n" +msgstr "" +"\n" +"Geschrieben von Jose E. Marchesi." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, fuzzy, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "" +"\n" +"Geschrieben von Jose E. Marchesi." + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:117 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" + +#. TRANSLATORS: The placeholder indicates the bug-reporting address +#. for this package. Please add _another line_ saying +#. "Report translation bugs to <...>\n" with the address for translation +#. bugs (typically your translation team's web or email address). +#: lib/version-etc.c:245 +#, fuzzy, c-format +msgid "" +"\n" +"Report bugs to: %s\n" +msgstr "" +"Melden Sie Fehler an: %s\n" +"Fehler in der Übersetzung melden Sie bitte an:\n" +"<translation-team-de@lists.sourceforge.net>\n" + +#: lib/version-etc.c:247 utils/recutl.c:125 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "Fehler in %s bitte melden an: %s\n" + +#: lib/version-etc.c:251 utils/recutl.c:129 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Webseite von %s: <%s>\n" + +#: lib/version-etc.c:253 +#, fuzzy, c-format +msgid "%s home page: <https://www.gnu.org/software/%s/>\n" +msgstr "Webseite von %s: <http://www.gnu.org/software/recutils/>\n" + +#: lib/version-etc.c:256 +#, fuzzy +msgid "General help using GNU software: <https://www.gnu.org/gethelp/>\n" +msgstr "Allgemeine Hilfe zu GNU-Software: <http://www.gnu.org/gethelp/>\n" + +#: lib/w32spawn.h:49 +#, c-format +msgid "_open_osfhandle failed" +msgstr "_open_osfhandle fehlgeschlagen" + +#: lib/w32spawn.h:90 +#, c-format +msgid "cannot restore fd %d: dup2 failed" +msgstr "fd %d kann nicht wiederhergestellt werden: dup2 ist fehlgeschlagen" + +#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317 +#, c-format +msgid "%s subprocess" +msgstr "Unterprozess %s" + +#: lib/wait-process.c:274 lib/wait-process.c:346 +#, c-format +msgid "%s subprocess got fatal signal %d" +msgstr "Unterprozess %s hat das fatale Signal %d erhalten" + +#: src/rec-fex.c:451 +#, c-format +msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" +msgstr "" +"Interner Fehler: REC_FEX_MAX_ELEMS überschritten. Bitte einen Fehlerbericht " +"senden.\n" + +#: src/rec-int.c:176 +#, c-format +msgid "%s: error: the number of records of type %s should be %zd.\n" +msgstr "%s: Fehler: Die Anzahl der Datensätze des Typs %s sollte %zd sein.\n" + +#: src/rec-int.c:186 +#, c-format +msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" +msgstr "" +"%s: Fehler: Zu viele Datensätze des Typs %s. Maximal erlaubt sind %zd.\n" + +#: src/rec-int.c:193 +#, c-format +msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" +msgstr "" +"%s: Fehler: Zu wenige Datensätze des Typs %s. Minimal erforderlich sind " +"%zd.\n" + +#: src/rec-int.c:409 src/rec-int.c:463 src/rec-int.c:520 src/rec-int.c:564 +#: utils/recutl.c:207 +msgid "out of memory\n" +msgstr "Nicht genügend freier Speicher\n" + +#: src/rec-int.c:424 +#, c-format +msgid "%s:%s: error: mandatory field '%s' not found in record\n" +msgstr "%s:%s: Fehler: Obligatorisches Feld »%s« nicht im Datensatz gefunden\n" + +#: src/rec-int.c:487 +#, c-format +msgid "%s:%s: error: field '%s' not allowed in this record set\n" +msgstr "%s:%s: Fehler: Feld »%s« ist in diesem Datensatz nicht erlaubt\n" + +#: src/rec-int.c:534 +#, c-format +msgid "%s:%s: error: field '%s' should be unique in this record\n" +msgstr "%s:%s: Fehler: Feld »%s« sollte in diesem Datensatz einmalig sein\n" + +#: src/rec-int.c:578 +#, c-format +msgid "%s:%s: error: prohibited field '%s' found in record\n" +msgstr "%s:%s: Fehler: Unzulässiges Feld »%s« im Datensatz gefunden\n" + +#: src/rec-int.c:610 +#, c-format +msgid "%s:%s: error: %%constraint[%d] violated in record\n" +msgstr "%s:%s: Fehler: %%constraint[%d] wurde im Datensatz beschädigt\n" + +#: src/rec-int.c:647 +#, c-format +msgid "%s:%s: error: confidential field is not encrypted\n" +msgstr "%s:%s: Fehler: vertrauliches Feld ist nicht verschlüsselt\n" + +#: src/rec-int.c:699 +#, c-format +msgid "%s:%s: error: key field '%s' not found in record\n" +msgstr "%s:%s: Fehler: Schlüsselfeld »%s« nicht im Datensatz gefunden\n" + +#: src/rec-int.c:708 +#, c-format +msgid "%s:%s: error: multiple key fields '%s' in record\n" +msgstr "%s:%s: Fehler: Mehrere Schlüsselfelder »%s« im Datensatz\n" + +#: src/rec-int.c:751 +#, c-format +msgid "%s:%s: error: duplicated key value in field '%s' in record\n" +msgstr "%s:%s: Fehler: Doppelter Schlüsselwert im Feld »%s« im Datensatz\n" + +#: src/rec-int.c:799 +#, c-format +msgid "%s:%s: error: missing %%rec field in record descriptor\n" +msgstr "%s:%s: Fehler: Fehlendes %%rec-Feld im Datensatzdeskriptor\n" + +#: src/rec-int.c:807 +#, c-format +msgid "%s:%s: error: too many %%rec fields in record descriptor\n" +msgstr "%s:%s: Fehler: Zu viele %%rec-Felder im Datensatzdeskriptor\n" + +#: src/rec-int.c:817 +#, c-format +msgid "%s:%s: error: invalid record type %s\n" +msgstr "%s:%s: Fehler: Ungültiger Datensatztyp %s\n" + +#: src/rec-int.c:828 +#, c-format +msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" +msgstr "%s:%s: Fehler: Nur ein %%key-Feld im Datensatzdeskriptor zulässig\n" + +#: src/rec-int.c:838 +#, c-format +msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" +msgstr "%s:%s: Fehler: Nur ein %%size-Feld im Datensatzdeskriptor zulässig\n" + +#: src/rec-int.c:848 +#, c-format +msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" +msgstr "%s:%s: Fehler: Nur ein %%sort-Feld im Datensatzdeskriptor zulässig\n" + +#: src/rec-int.c:871 +#, c-format +msgid "" +"%s:%s: error: expected a comma-separated list of fields before the type " +"specification\n" +msgstr "" +"%s:%s: Fehler: eine durch Kommata getrennte Feldliste wurde vor der " +"Typangabe erwartet\n" + +#: src/rec-int.c:897 src/rec-int.c:950 +#, c-format +msgid "%s:%s: error: the referred type %s does not exist\n" +msgstr "%s:%s: Fehler: Der Bezugstyp %s existiert nicht\n" + +#: src/rec-int.c:909 +#, c-format +msgid "%s:%s: error: invalid type specification\n" +msgstr "%s:%s: Fehler: Ungültige Typ-Angabe\n" + +#: src/rec-int.c:924 +#, c-format +msgid "%s:%s: error: expected a type name before the type specification\n" +msgstr "%s:%s: Fehler: Vor der Typangabe wurde ein Typname erwartet\n" + +#: src/rec-int.c:962 +#, c-format +msgid "%s:%s: error: invalid typedef specification\n" +msgstr "%s:%s: Fehler: Ungültige typedef-Angabe\n" + +#: src/rec-int.c:984 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" +msgstr "%s:%s: Fehler: Wert für %s[%zd] ist kein gültiger Auswahlausdruck\n" + +#: src/rec-int.c:1015 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" +msgstr "%s:%s: Fehler: Wert für %s[%zd] ist keine Feldnamenliste\n" + +#: src/rec-int.c:1028 +#, c-format +msgid "" +"%s:%s: error: value for %s should be a number optionally preceded by >, <, " +">= or <=.\n" +msgstr "" +"%s:%s: Fehler: Wert von %s sollte eine Zahl sein, der optional ein >, <, >= " +"oder <= vorangestellt ist.\n" + +#: src/rec-int.c:1044 +#, c-format +msgid "%s:%s: error: value for %s should be a list of field names.\n" +msgstr "%s:%s: Fehler: Wert für %s sollte eine Feldnamenliste sein.\n" + +#: src/rec-int.c:1072 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range, uuid " +"or date\n" +msgstr "" +"%s:%s: Fehler: Automatisch hochgezähltes Feld %s sollte vom Typ int, range, " +"uuid oder date sein\n" + +#: src/rec-int.c:1074 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range or " +"date\n" +msgstr "" +"%s:%s: Fehler: Automatisch hochgezähltes Feld %s sollte vom Typ int, range " +"oder date sein\n" + +#: src/rec-int.c:1157 +#, c-format +msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" +msgstr "" +"%s:%s: Fehler: Entfernter Deskriptor von Adresse %s konnte nicht geholt " +"werden.\n" + +#: src/rec-int.c:1176 +#, c-format +msgid "%s:%s: error: could not read external descriptor from file %s.\n" +msgstr "" +"%s:%s: Fehler: Externer Deskriptor aus Datei %s konnte nicht geholt werden.\n" + +#: src/rec-int.c:1191 +#, c-format +msgid "%s:%s: error: %s does not contain valid rec data.\n" +msgstr "%s:%s: Fehler: %s enthält keine gültigen rec-Daten.\n" + +#: src/rec-int.c:1205 +#, c-format +msgid "%s:%s: error: %s does not contain information for type %s.\n" +msgstr "%s:%s: Fehler: %s enthält keine Informationen für Typ %s.\n" + +#: src/rec-types.c:448 +#, c-format +msgid "" +"internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " +"in rec_type_new().\n" +msgstr "" +"Interner Fehler: rec-types: REC_TYPE_NONE von rec_type_parse_type_kind() " +"erhalten in rec_type_new().\n" + +#: src/rec-types.c:1178 +msgid "invalid integer." +msgstr "Ungültige Ganzzahl." + +#: src/rec-types.c:1208 +msgid "invalid 'field' value." +msgstr "Ungültiger »field«-Wert." + +#: src/rec-types.c:1231 +msgid "invalid 'uuid' value." +msgstr "Ungültiger »uuid«-Wert." + +#: src/rec-types.c:1249 +msgid "invalid 'bool' value." +msgstr "Ungültiger »bool«-Wert." + +#: src/rec-types.c:1272 +msgid "invalid 'range' value." +msgstr "Ungültiger »range«-Wert." + +#: src/rec-types.c:1281 +#, c-format +msgid "expected an integer between %d and %d." +msgstr "Ganzzahl zwischen %d und %d wurde erwartet." + +#: src/rec-types.c:1302 +msgid "invalid 'real' value." +msgstr "Ungültiger »real«-Wert." + +#: src/rec-types.c:1320 +#, c-format +msgid "value too large. Expected a size <= %zu." +msgstr "Wert zu groß. Größe <= %zu wurde erwartet." + +#: src/rec-types.c:1341 +msgid "invalid 'line' value." +msgstr "Ungültiger »line«-Wert." + +#: src/rec-types.c:1360 +msgid "value does not match the regexp." +msgstr "Wert passt nicht auf den regulären Ausdruck." + +#: src/rec-types.c:1383 +msgid "invalid date." +msgstr "Ungültiges Datum." + +#: src/rec-types.c:1399 +msgid "invalid email." +msgstr "Ungültige E-Mail." + +#: src/rec-types.c:1444 +msgid "invalid enum value." +msgstr "Ungültiger Aufzählungswert." + +#: src/rec-utils.c:93 +#, c-format +msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" +msgstr "" +"Interner Fehler: rec_int_rec_extract_file:\n" +"Fehler beim Kompilieren des regulären Ausdrucks.\n" + +#: src/rec-utils.c:121 src/rec-utils.c:150 +#, c-format +msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" +msgstr "" +"Interner Fehler: rec_int_rec_extract_url:\n" +"Fehler beim Kompilieren des regulären Ausdrucks.\n" + +#: src/rec-utils.c:304 +#, c-format +msgid "internal error: rec_match: error compiling regexp.\n" +msgstr "" +"Interner Fehler: rec_match:\n" +"Fehler beim Kompilieren des regulären Ausdrucks.\n" + +#. TRANSLATORS: --help output, csv2rec synopsis. +#. no-wrap +#: utils/csv2rec.c:105 +#, c-format +msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" +msgstr "Aufruf: csv2rec [OPTIONEN] … [CSV-DATEI]\n" + +#. TRANSLATORS: --help output, csv2rec short description. +#. no-wrap +#: utils/csv2rec.c:110 +msgid "Convert csv data into rec data.\n" +msgstr "CSV-Daten in rec-Daten-umwandeln.\n" + +#. TRANSLATORS: --help output, csv2rec options. +#. no-wrap +#: utils/csv2rec.c:116 +msgid "" +" -t, --type=TYPE type name for the converted records; " +"if this\n" +" parameter is ommited then no type is " +"used.\n" +" -s, --strict be strict parsing the csv file.\n" +" -e, --omit-empty omit empty fields.\n" +msgstr "" +" -t, --type Typname der konvertierten Datensätze. " +"Falls\n" +" dieser Parameter fehlt, wird kein " +"Typ\n" +" verwendet.\n" +" -s, --strict CSV-Datei strikt verarbeiten.\n" +" -e, --omit-empty Leere Felder weglassen.\n" + +#: utils/csv2rec.c:230 +#, c-format +msgid "invalid field name '%s' in header\n" +msgstr "Ungültiger Feldname »%s« in Header\n" + +#: utils/csv2rec.c:259 +#, fuzzy, c-format +msgid "" +"%s: %lu: this line contains %lu fields, but %lu header fields were read\n" +msgstr "" +"%s: %d: diese Zeile enthält %d Felder, aber %d Kopfzeilenfelder wurden " +"gelesen\n" + +#: utils/csv2rec.c:347 utils/recdel.c:266 utils/recset.c:358 utils/recutl.c:328 +#, c-format +msgid "cannot read file %s\n" +msgstr "Datei %s kann nicht gelesen werden\n" + +#: utils/csv2rec.c:358 +msgid "failed to initialize csv parser\n" +msgstr "Initialisieren des CSV-Parsers ist gescheitert\n" + +#: utils/csv2rec.c:376 +#, c-format +msgid "error while parsing CSV file: %s\n" +msgstr "Fehler beim Einlesen der CSV-Datei: %s\n" + +#. TRANSLATORS: --help output, mdb2rec synopsis. +#. no-wrap +#: utils/mdb2rec.c:103 +#, c-format +msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" +msgstr "Aufruf: mdb2rec [OPTIONEN] … MDB-DATEI [TABELLE]\n" + +#. TRANSLATORS: --help output, mdb2rec short description. +#. no-wrap +#: utils/mdb2rec.c:108 +msgid "Convert an mdb file into a rec file.\n" +msgstr "Eine mdb-Datei in eine rec-Datei umwandeln.\n" + +#. TRANSLATORS: --help output, mdb2rec options. +#. no-wrap +#: utils/mdb2rec.c:114 +msgid "" +" -s, --system-tables include system tables.\n" +" -e, --keep-empty-fields don't prune empty fields in the rec\n" +" output.\n" +" -l, --list-tables dump a list of the table names " +"contained\n" +" in the mdb file.\n" +msgstr "" +" -s, --system-tables Systemtabellen einschließen.\n" +" -e, --keep-empty-fields Leere Felder in rec-Ausgabe\n" +" nicht weglassen\n" +" -l, --list-tables Eine Liste der in der mdb-Datei " +"enthaltenen\n" +" Tabellennamen ausgeben.\n" + +#: utils/mdb2rec.c:251 utils/mdb2rec.c:315 +#, c-format +msgid "failed to normalise record type name %s\n" +msgstr "Datensatztypname %s konnte nicht normalisiert werden\n" + +#: utils/mdb2rec.c:259 utils/mdb2rec.c:270 +#, c-format +msgid "failed to normalise field name %s\n" +msgstr "Normalisieren des Feldnamens %s fehlgeschlagen\n" + +#: utils/mdb2rec.c:336 +#, c-format +msgid "failed to normalise the field name %s\n" +msgstr "Feldname %s konnte nicht normalisiert werden\n" + +#: utils/mdb2rec.c:443 utils/recins.c:208 utils/recset.c:253 +#, c-format +msgid "invalid field name %s.\n" +msgstr "Ungültiger Feldname %s.\n" + +#: utils/mdb2rec.c:482 +#, c-format +msgid "could not open file %s\n" +msgstr "Datei %s konnte nicht geöffnet werden\n" + +#: utils/mdb2rec.c:489 +msgid "file does not appear to be an Access database\n" +msgstr "Datei scheint keine Access-Datenbank zu sein\n" + +#. TRANSLATORS: --help output, rec2csv synopsis. +#. no-wrap +#: utils/rec2csv.c:86 +#, c-format +msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" +msgstr "Aufruf: rec2csv [OPTIONEN] … [REC-DATEI]\n" + +#. TRANSLATORS: --help output, rec2csv short description. +#. no-wrap +#: utils/rec2csv.c:91 +msgid "Convert rec data into csv data.\n" +msgstr "REC-Daten in CSV-Daten-umwandeln.\n" + +#. TRANSLATORS: --help output, rec2csv options. +#. no-wrap +#: utils/rec2csv.c:97 +msgid "" +" -d, --delim=char sets the deliminator (default ',')\n" +" -t, --type=TYPE record set to convert to csv; if this " +"parameter\n" +" is omitted then the default record " +"set is used\n" +" -S, --sort=FIELDS sort the output by the specified " +"fields.\n" +msgstr "" +" -d, --delim=ZEICHEN legt das Trennzeichen fest (Vorgabe " +"ist »,«)\n" +" -t, --type=TYP Datensatz zum Umwandeln in csv; Falls " +"dieser\n" +" Parameter fehlt, wird der " +"vorgegebene Datensatz\n" +" verwendet.\n" +" -S, --sort=FELDER sortiert die Ausgabe anhand der " +"angegebenen Felder.\n" + +#: utils/rec2csv.c:142 +msgid "only one list of fields can be specified as a sorting criteria.\n" +msgstr "Nur eine Feldliste kann als Sortierkriterium angegeben werden.\n" + +#: utils/rec2csv.c:149 +msgid "invalid field name list in -S.\n" +msgstr "Ungültige Feldnamenliste in -S.\n" + +#: utils/rec2csv.c:155 utils/recsel.c:248 utils/recsel.c:286 +msgid "internal error creating fex.\n" +msgstr "Interner Fehler beim Erstellen des Feldausdrucks.\n" + +#. TRANSLATORS: --help output, recdel synopsis. +#. no-wrap +#: utils/recdel.c:89 +#, c-format +msgid "" +"Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [FILE]\n" +msgstr "" +"Aufruf: recdel [OPTIONEN] … [-t TYP] [-n ZAHL | -e DATENSATZ_AUSDR | -q STR " +"| -m ZAHL] [DATEI]\n" + +#. TRANSLATORS: --help output, recdel short description. +#. no-wrap +#: utils/recdel.c:94 +msgid "Remove (or comment out) records from a rec file.\n" +msgstr "Entfernen oder Auskommentieren von Datensätzen einer rec-Datei.\n" + +#. TRANSLATORS: --help output, recdel arguments. +#. no-wrap +#: utils/recdel.c:101 +msgid "" +" -c, --comment comment out the matching records " +"instead of\n" +" deleting them.\n" +" --force delete even in potentially dangerous " +"situations,\n" +" and if the deletion is violating " +"record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -c, --comment Die betreffenden Datensätze " +"auskommentieren,\n" +" anstatt sie zu löschen.\n" +" --force Auch in potenziell gefährlichen " +"Situationen löschen,\n" +" auch wenn der Löschvorgang " +"Einschränkungen des\n" +" Datensatzes berührt.\n" +" --no-external Keine externen Deskriptoren " +"verwenden.\n" +" --verbose Einen ausführlichen Bericht ausgeben, " +"falls\n" +" die Integritätsprüfung scheitert.\n" + +#. TRANSLATORS: --help output, notes on recdel. +#. no-wrap +#. TRANSLATORS: --help output, notes on recfix. +#. no-wrap +#. TRANSLATORS: --help output, notes on recins. +#. no-wrap +#: utils/recdel.c:119 utils/recfix.c:167 utils/recins.c:149 +msgid "" +"If no FILE is specified then the command acts like a filter, getting\n" +"the data from standard input and writing the result to standard output.\n" +msgstr "" +"Falls keine DATEI angegeben wird, arbeitet der Befehl als Filter,\n" +"wobei die Daten aus der Standardeingabe geholt werden und das\n" +"Ergebnis in die Standardausgabe geschrieben wird.\n" + +#: utils/recdel.c:136 +#, c-format +msgid "no records of type %s found.\n" +msgstr "Keine Datensätze vom Typ %s gefunden.\n" + +#: utils/recdel.c:227 +#, c-format +msgid "ignoring a request to delete all records of type %s.\n" +msgstr "Anfrage zum Löschen aller Datensätze des Typs %s wird ignoriert.\n" + +#: utils/recdel.c:229 +msgid "use --force if you really want to proceed, or use either -n or -e.\n" +msgstr "" +"Verwenden Sie --force, wenn Sie wirklich fortsetzen wollen, ansonsten -n " +"oder -e.\n" + +#: utils/recdel.c:237 +msgid "invalid selection expression.\n" +msgstr "Ungültiger Auswahlausdruck.\n" + +#: utils/recdel.c:276 utils/recfix.c:407 utils/recins.c:410 utils/recset.c:365 +#, c-format +msgid "file %s is not writable.\n" +msgstr "Datei %s ist schreibgeschützt.\n" + +#. TRANSLATORS: --help output, recfix synopsis. +#. no-wrap +#: utils/recfix.c:117 +#, c-format +msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" +msgstr "Aufruf: recfix [OPTION] … [OPERATION] [OP_OPTION] … [DATEI]\n" + +#. TRANSLATORS: --help output, recfix short description. +#. no-wrap +#: utils/recfix.c:122 +msgid "Check and fix rec files.\n" +msgstr "rec-Dateien prüfen und korrigieren.\n" + +#. TRANSLATORS: --help output, recfix global arguments. +#. no-wrap +#: utils/recfix.c:129 +msgid "" +" --no-external don't use external descriptors.\n" +" --force force the requested operation.\n" +msgstr "" +" --no-external Keine externen Deskriptoren " +"verwenden.\n" +" --force Die angeforderte Operation erzwingen.\n" + +#. TRANSLATORS: --help output, recfix operations. +#. no-wrap +#: utils/recfix.c:139 +msgid "" +"Operations:\n" +" --check check integrity of the specified " +"file. Default.\n" +" --sort sort the records in the specified " +"file.\n" +" --auto insert auto-generated fields in " +"records missing them.\n" +msgstr "" +"Operationen:\n" +" --check Integrität der angegebenen Datei " +"prüfen. Vorgabe.\n" +" --sort Datensätze in der angegebenen Datei " +"sortieren.\n" +" --auto Automatisch generierte Felder in " +"Datensätze einfügen,\n" +" sofern diese fehlen.\n" + +#. TRANSLATORS: --help output, recfix operations related with encryption. +#. no-wrap +#: utils/recfix.c:149 +msgid "" +" --encrypt encrypt confidential fields in the " +"specified file.\n" +" --decrypt decrypt confidential fields in the " +"specified file.\n" +msgstr "" +" --encrypt Vertrauliche Felder in der angegebenen " +"Datei\n" +" verschlüsseln.\n" +" --decrypt Vertrauliche Felder in der angegebenen " +"Datei\n" +" entschlüsseln.\n" + +#. TRANSLATORS: --help output, recfix encryption and decryption +#. options. +#. no-wrap +#: utils/recfix.c:158 +msgid "" +"De/Encryption options:\n" +" -s, --password=PASSWORD encrypt/decrypt with this password.\n" +msgstr "" +"Optionen zur Ver- und Entschlüsselung:\n" +" -s, --password=PASSWORT Mit diesem Passwort ver-/" +"entschlüsseln.\n" + +#: utils/recfix.c:208 +msgid "--password|-s must be used as an operation argument.\n" +msgstr "--password|-s muss als Operationsargument verwendet werden.\n" + +#: utils/recfix.c:214 +msgid "the specified operation does not require a password.\n" +msgstr "Die angegebene Operation benötigt kein Passwort.\n" + +#: utils/recfix.c:219 +msgid "please specify just one password.\n" +msgstr "Bitte geben Sie nur ein Passwort an.\n" + +#: utils/recfix.c:230 utils/recfix.c:240 utils/recfix.c:250 utils/recfix.c:261 +#: utils/recfix.c:271 +msgid "please specify just one operation.\n" +msgstr "Bitte geben Sie nur eine Operation an.\n" + +#: utils/recfix.c:463 +msgid "the database contains already encrypted fields\n" +msgstr "Die Datenbank enthält bereits verschlüsselte Felder\n" + +#: utils/recfix.c:464 +msgid "please use --force or --decrypt\n" +msgstr "Bitte --force oder --decrypt verwenden\n" + +#: utils/recfix.c:574 +msgid "unknown operation in recfix: please report this as a bug.\n" +msgstr "Unbekannte Operation in recfix: Bitte melden Sie dies als Fehler.\n" + +#. TRANSLATORS: --help output, recfmt synopsis. +#. no-wrap +#: utils/recfmt.c:78 +#, c-format +msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" +msgstr "Aufruf: recfmt [OPTION] … [VORLAGE]\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:83 +msgid "Apply a template to records read from standard input.\n" +msgstr "" +"Eine Vorlage auf die aus der Standardeingabe gelesenen Datensätze anwenden.\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:89 +msgid "" +" -f, --file=FILENAME read the template to apply from a " +"file.\n" +msgstr "" +" -f, --file=DATEINAME Zu benutzende Vorlage aus einer Datei " +"holen.\n" + +#: utils/recfmt.c:123 +#, c-format +msgid "can't open file %s for reading.\n" +msgstr "Datei »%s« kann nicht zum Lesen geöffnet werden.\n" + +#: utils/recfmt.c:141 +msgid "don't specify a template in the command line and -f at the same time.\n" +msgstr "" +"Vorlage und -f können nicht gleichzeitig in der Befehlszeile angegeben " +"werden.\n" + +#: utils/recfmt.c:164 +msgid "invalid expression in a template slot.\n" +msgstr "Ungültiger Ausdruck in einem Vorlagenslot.\n" + +#: utils/recfmt.c:170 +msgid "error evaluating expression in a template slot.\n" +msgstr "Fehler beim Verarbeiten des Ausdrucks in einem Vorlagenslot.\n" + +#: utils/recfmt.c:204 +msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" +msgstr "" +"recfmt_apply_template: Fehler beim Kompilieren des regulären Ausdrucks.\n" +"Bitte melden Sie diesen Fehler.\n" + +#. TRANSLATORS: --help output, recinf synopsis. +#. no-wrap +#: utils/recinf.c:84 +#, c-format +msgid "Usage: recinf [OPTION]... [FILE]...\n" +msgstr "Aufruf: recinf [OPTION] … [DATEI] …\n" + +#. TRANSLATORS: --help output, recinf short description. +#. no-wrap +#: utils/recinf.c:89 +msgid "Print information about the types of records stored in the input.\n" +msgstr "" +"Informationen über die Datensatztypen in der Standardeingabe ausgeben.\n" + +#. TRANSLATORS: --help output, recinf arguments. +#. no-wrap +#: utils/recinf.c:96 +msgid "" +" -t, --type=RECORD_TYPE print information on the records having " +"the\n" +" specified type.\n" +" -d, --descriptor include the full record descriptors.\n" +" -n, --names-only output just the names of the record files\n" +" found in the input.\n" +msgstr "" +" -t, --type=DATENSATZTYP Informationen zu Datensätzen des\n" +" angegebenen Typs ausgeben.\n" +" -d, --descriptor Vollständige Datensatzdeskriptoren " +"einschließen.\n" +" -n, --names-only Nur die Namen der in der Eingabe " +"gefundenen\n" +" Datensatzdateien ausgeben.\n" + +#. TRANSLATORS: --help output, recinf special options. +#. no-wrap +#: utils/recinf.c:109 +msgid "" +"Special options:\n" +" -S, --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Spezielle Optionen:\n" +" -S, --print-sexps Daten im sexps- anstelle des rec-" +"Formats ausgeben.\n" + +#: utils/recinf.c:263 +#, c-format +msgid "error: cannot read file %s\n" +msgstr "Fehler: Datei %s kann nicht gelesen werden\n" + +#. TRANSLATORS: --help output, recins synopsis. +#. no-wrap +#: utils/recins.c:111 +#, c-format +msgid "" +"Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" +msgstr "" +"Aufruf: recins [OPTION] … [t TYP] [-n ZAHL | -e DATENSATZ_AUSDR | -q STR | -" +"m ZAHL] [(-f NAME -v STR]|[-r RECDATEN)] … [DATEI]\n" + +#. TRANSLATORS: --help output, recins short description. +#. no-wrap +#: utils/recins.c:116 +msgid "Insert new records in a rec database.\n" +msgstr "Neue Datensätze in eine rec-Datenbank einfügen.\n" + +#. TRANSLATORS: --help output, recins arguments. +#. no-wrap +#: utils/recins.c:122 +msgid "" +" -f, --field=STR field name; should be followed by a -" +"v.\n" +" -v, --value=STR field value; should be preceded by an -" +"f.\n" +" -r, --record=STR record that will be inserted in the " +"file.\n" +" --force insert the record even if it is " +"violating\n" +" record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --no-auto don't insert auto generated fields.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -f, --field=STR Feldname. Darauf sollte ein -v " +"folgen.\n" +" -v, --value=STR Feldwert. Sollte auf ein -f folgen.\n" +" -r, --record=STR In die Datei einzufügender Datensatz.\n" +" --force Datensatz auch dann einfügen, wenn " +"dies\n" +" Einschränkungen des Datensatzes " +"berührt.\n" +" --no-external Keine externen Deskriptoren " +"verwenden.\n" +" --no-auto Keine automatisch generierten Felder " +"einfügen.\n" +" --verbose Einen ausführlichen Bericht ausgeben, " +"falls\n" +" die Intergritätsprüfung scheitert.\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recins.c:136 +msgid "" +" -s, --password=STR encrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=STR Vertrauliche Felder mit dem " +"angegebenen Passwort\n" +" verschlüsseln.\n" + +#: utils/recins.c:195 +msgid "a -f should be followed by a -v\n" +msgstr "Auf -f sollte ein -v folgen\n" + +#: utils/recins.c:219 +msgid "a -v should be preceded by a -f\n" +msgstr "Einem -v sollte ein -f vorausgehen\n" + +#: utils/recins.c:244 utils/recsel.c:223 +msgid "more than one password was specified\n" +msgstr "Es wurde mehr als ein Passwort angegeben\n" + +#: utils/recins.c:258 +msgid "error while parsing the record provided by -r\n" +msgstr "Fehler beim Einlesen des mit -r angegebenen Datensatzes\n" + +#: utils/recins.c:293 +#, c-format +msgid "please provide a value for the field %s\n" +msgstr "Bitte geben Sie einen Wert für das Feld %s an\n" + +#. TRANSLATORS: --help output, recsel synopsis. +#. no-wrap +#: utils/recsel.c:118 +#, c-format +msgid "" +"Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " +"| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" +msgstr "" +"Aufruf: recsel [OPTION] … [-t TYP] [-j FELD] [-n INDIZES | -e DATENSAUSDR | -" +"q AUSDR | -m ZAHL] [-c | (-p|-P) FELDAUSDR] [DATEI] …\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:123 +msgid "Select and print rec data.\n" +msgstr "rec-Daten auswählen und ausgeben.\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:129 +msgid "" +" -d, --include-descriptors print record descriptors along with " +"the matched\n" +" records.\n" +" -C, --collapse do not section the result in records " +"with newlines.\n" +" -S, --sort=FIELD,... sort the output by the specified " +"fields.\n" +" -G, --group-by=FIELD,... group records by the specified " +"fields.\n" +" -U, --uniq remove duplicated fields in the output " +"records.\n" +msgstr "" +" -d, --include-descriptors Datensatzdeskriptoren mit den " +"übereinstimmenden\n" +" Datensätzen ausgeben.\n" +" -C, --collapse Ergebnis in Datensätzen nicht in neue " +"Zeile\n" +" umbrechen.\n" +" -S, --sort=FELD Die Ausgabe anhand des angegebenen " +"Feldes sortieren.\n" +" -G, --group-by=FELD, … Datensätze anhand des angegebenen " +"Feldes gruppieren.\n" +" -U, --uniq Feldduplikate in ausgegebenen " +"Datensätzen entfernen.\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recsel.c:141 +msgid "" +" -s, --password=STR decrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=PASSWORT Vertrauliche Felder mit dem " +"angegebenen Passwort\n" +" entschlüsseln.\n" + +#: utils/recsel.c:150 +msgid "" +" -j, --join=FIELD perform an inner join using the " +"specified field.\n" +msgstr "" +" -j, --join=FELD Eine innere Verknüpfung mit dem " +"angegebenen\n" +" Feld ausführen.\n" + +#. TRANSLATORS: --help output, recsel output options. +#. no-wrap +#: utils/recsel.c:157 +msgid "" +"Output options:\n" +" -p, --print=FIELDS comma-separated list of fields to " +"print for each\n" +" matching record.\n" +" -P, --print-values=FIELDS as -p, but print only the values of " +"the selected\n" +" fields.\n" +" -R, --print-row=FIELDS as -P, but separate the values with " +"spaces instead\n" +" of newlines.\n" +" -c, --count print a count of the matching records " +"instead of\n" +" the records themselves.\n" +msgstr "" +"Ausgabeoptionen:\n" +" -p, --print=FELDER Durch Kommata getrennte Liste von " +"Feldern, die für\n" +" jeden übereinstimmenden Datensatz " +"auszugeben sind.\n" +" -P, --print-values=FELDER Wie -p, aber die Werte der " +"ausgewählten\n" +" Felder ausgeben.\n" +" -R, --print-row=FELDER Wie -P, aber ausgegebene Werte durch " +"Leerzeichen\n" +" anstatt durch Zeilenumbrüche " +"trennen.\n" +" -c, --count Anzahl der übereinstimmenden " +"Datensätze anstelle\n" +" der Datensätze selbst ausgeben.\n" + +#. TRANSLATORS: --help output, recsel special options. +#. no-wrap +#: utils/recsel.c:171 +msgid "" +"Special options:\n" +" --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Spezielle Optionen:\n" +" --print-sexps Daten im sexps- anstelle des rec-" +"Formats ausgeben.\n" + +#: utils/recsel.c:235 +msgid "only one field list can be specified as a sorting criteria.\n" +msgstr "Nur eine Feldliste kann als Sortierkriterium angegeben werden.\n" + +#: utils/recsel.c:242 +msgid "invalid field names in -S.\n" +msgstr "Ungültige Feldnamen in -S.\n" + +#: utils/recsel.c:258 +msgid "only one field can be specified as join criteria.\n" +msgstr "Nur ein Feld kann als Verknüpfungskriterium angegeben werden.\n" + +#: utils/recsel.c:263 +msgid "please specify a correct field name to -j|--join.\n" +msgstr "Bitte geben Sie mit -j|--join einen korrekten Feldnamen an.\n" + +#: utils/recsel.c:274 +msgid "only one field list can be specified as a grouping criteria.\n" +msgstr "Nur eine Feldliste kann als Gruppierkriterium angegeben werden.\n" + +#: utils/recsel.c:280 +msgid "invalid field names in -G.\n" +msgstr "Ungültige Feldnamen in -G.\n" + +#: utils/recsel.c:300 +msgid "cannot specify -[pPR] and also -c.\n" +msgstr "Die Optionen -[pPR] und -c sind gemeinsam nicht erlaubt.\n" + +#: utils/recsel.c:317 +#, c-format +msgid "invalid list of fields in -%c\n" +msgstr "Ungültige Feldliste in -%c\n" + +#: utils/recsel.c:325 +msgid "internal error creating the field expression.\n" +msgstr "Interner Fehler beim Erstellen des Feldausdrucks.\n" + +#: utils/recsel.c:340 +#, c-format +msgid "invalid aggregate function '%s'\n" +msgstr "Ungültige Aggregatfunktion »%s«\n" + +#: utils/recsel.c:358 +msgid "cannot specify -c and also -p.\n" +msgstr "-c und -p können nicht gleichzeitig angegeben werden.\n" + +#: utils/recsel.c:377 +msgid "joins can only be used when a named record set is selected.\n" +msgstr "" +"Verknüpfungen können nur ausgeführt werden, wenn ein benannter Datensatz " +"ausgewählt ist.\n" + +#: utils/recsel.c:439 +msgid "several record types found. Please use -t to specify one.\n" +msgstr "Verschiedene Datensatztypen gefunden. Bitte mit -t einen angeben.\n" + +#. TRANSLATORS: --help output, recset synopsis. +#. no-wrap +#: utils/recset.c:113 +#, c-format +msgid "Usage: recset [OPTION]... [FILE]...\n" +msgstr "Aufruf: recset [OPTION] … [DATEI] …\n" + +#. TRANSLATORS: --help output, recset short description. +#. no-wrap +#: utils/recset.c:118 +msgid "Alter or delete fields in records.\n" +msgstr "Felder in Datensätzen bearbeiten oder löschen.\n" + +#. TRANSLATORS: --help output, recset options. +#. no-wrap +#: utils/recset.c:124 +msgid "" +" --no-external don't use external descriptors.\n" +" --force alter the records even if violating " +"record\n" +" restrictions.\n" +msgstr "" +" --no-external keine externen Deskriptoren " +"verwenden.\n" +" --force Datensätze auch dann bearbeiten, wenn " +"Richtlinien\n" +" dies untersagen.\n" + +#. TRANSLATORS: --help output, recset field selection options. +#. no-wrap +#: utils/recset.c:137 +msgid "" +"Field selection options:\n" +" -f, --fields=FIELDS comma-separated list of field names " +"with optional\n" +" subscripts.\n" +msgstr "" +"Feldauswahloptionen:\n" +" -f, --fields=FELDER Durch Kommata getrennte Liste von " +"Feldnamen mit\n" +" optionalen Subskripten.\n" + +#. TRANSLATORS: --help output, recset actions. +#. no-wrap +#: utils/recset.c:145 +msgid "" +"Actions:\n" +" -s, --set=VALUE change the value of the selected " +"fields.\n" +" -a, --add=VALUE add the selected fields with the given " +"value.\n" +" -S, --set-add=VALUE change the value of the selected " +"fields. If they don't\n" +" exist then add a new field with that " +"value.\n" +" -r, --rename=NAME rename the selected fields to a given " +"name. If an entire\n" +" record set is selected then the " +"field is renamed in the\n" +" record descriptor as well.\n" +" -d, --delete delete the selected fields.\n" +" -c, --comment comment out the selected fields.\n" +msgstr "" +"Aktionen:\n" +" -s, --set=WERT Wert der ausgewählten Felder ändern.\n" +" -a, --add=WERT Angegebenen Wert auf die ausgewählten " +"Felder\n" +" anwenden.\n" +" -S, --set-add=VALUE Den Wert der ausgewählten Felder " +"ändern. Falls diese\n" +" nicht existieren, ein neues Feld mit " +"diesem\n" +" Wert hinzufügen.\n" +" -r, --rename=NAME Die ausgewählten Felder in einen " +"angegebenen\n" +" Namen umbenennen. Falls ein ganzer " +"Datensatz\n" +" ausgewählt wird, dann wird das Feld " +"im\n" +" Datensatzdeskriptor ebenfalls " +"umbenannt.\n" +" -d, --delete Ausgewählte Felder löschen.\n" +" -c, --comment Ausgewählte Felder auskommentieren.\n" + +#: utils/recset.c:168 +msgid "please specify some field with -f.\n" +msgstr "Bitte geben Sie mit -f ein Feld an.\n" + +#: utils/recset.c:173 +msgid "please specify just one action.\n" +msgstr "Bitte geben Sie nur eine Aktion an.\n" + +#: utils/recset.c:213 +msgid "invalid field expression in -f.\n" +msgstr "Ungültiger Feldausdruck in -f.\n" + +#: utils/recset.c:221 +msgid "creating the field expression.\n" +msgstr "Feldausdruck wird erstellt.\n" + +#: utils/recset.c:243 +msgid "" +"the rename operation requires just one field with an optional subscript.\n" +msgstr "" +"Die rename-Aktion benötigt nur ein Feld mit einem optionalen Subskript.\n" + +#. TRANSLATORS: --help output 5+ (reports) +#. TRANSLATORS: the placeholder indicates the bug-reporting address +#. for this application. Please add _another line_ with the +#. address for translation bugs. +#. no-wrap +#: utils/recutl.c:122 +#, c-format +msgid "Report bugs to: %s\n" +msgstr "" +"Melden Sie Fehler an: %s\n" +"Fehler in der Übersetzung melden Sie bitte an:\n" +"<translation-team-de@lists.sourceforge.net>\n" + +#: utils/recutl.c:131 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" +msgstr "Webseite von %s: <http://www.gnu.org/software/recutils/>\n" + +#: utils/recutl.c:134 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "Allgemeine Hilfe zu GNU-Software: <http://www.gnu.org/gethelp/>\n" + +#. TRANSLATORS: --help output, common arguments. +#. no-wrap +#: utils/recutl.c:143 +msgid "" +" --help print a help message and exit.\n" +" --version show version and exit.\n" +msgstr "" +" --help Hilfe anzeigen und beenden.\n" +" --version Version anzeigen und beenden.\n" + +#. TRANSLATORS: --help output, record selection arguments +#. no-wrap +#: utils/recutl.c:154 +msgid "" +"Record selection options:\n" +" -i, --case-insensitive make strings case-insensitive in " +"selection\n" +" expressions.\n" +" -t, --type=TYPE operate on records of the specified " +"type only.\n" +" -e, --expression=RECORD_EXPR selection expression.\n" +" -q, --quick=STR select records with fields containing " +"a string.\n" +" -n, --number=NUM,... select specific records by position, " +"with ranges.\n" +" -m, --random=NUM select a given number of random " +"records.\n" +msgstr "" +"Optionen zur Datensatzauswahl:\n" +" -i, --case-insensitive Groß- oder Kleinschreibung in\n" +" Auswahlausdrücken nicht beachten.\n" +" -t, --type=TYP Nur auf Datensätze des angegebenen " +"Typs anwenden.\n" +" -e, --expression=DATENS_AUSDR Auswahlausdruck.\n" +" -q, --quick=STRING Datensätze mit Feldern auswählen, die " +"eine\n" +" Zeichenkette enthalten.\n" +" -n, --number=ZAHL Bestimmten Datensatz nach Position " +"auswählen,\n" +" mit Bereichsangabe.\n" +" -m, --random=ZAHL Eine angegebene Zahl von Datensätzen\n" +" zufällig auswählen.\n" + +#: utils/recutl.c:179 +#, c-format +msgid "" +"Copyright (C) %s Jose E. Marchesi.\n" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +msgstr "" +"Copyright (C) %s Jose E. Marchesi.\n" +"Lizenz GPLv3+: GNU GPL Version 3 oder neuer <http://gnu.org/licenses/gpl." +"html>.\n" +"Dies ist freie Software: Sie können Sie frei verändern und weitergeben.\n" +"Es gibt KEINE GARANTIE, soweit gesetzlich zulässig.\n" + +#: utils/recutl.c:185 +msgid "" +"\n" +"Written by Jose E. Marchesi." +msgstr "" +"\n" +"Geschrieben von Jose E. Marchesi." + +#: utils/recutl.c:197 utils/recutl.c:217 +msgid ": error: " +msgstr ": Fehler: " + +#: utils/recutl.c:229 +msgid ": warning: " +msgstr ": Warnung: " + +#: utils/recutl.c:254 +#, c-format +msgid "duplicated record set '%s' from %s.\n" +msgstr "Doppelter Datensatz »%s« von %s.\n" + +#: utils/recutl.c:417 +msgid "cannot create a unique name.\n" +msgstr "Eindeutiger Name kann nicht erstellt werden.\n" + +#: utils/recutl.c:438 +#, c-format +msgid "renaming file %s to %s\n" +msgstr "Datei %s wird in %s umbenannt\n" + +#: utils/recutl.c:482 +msgid "operation aborted due to integrity failures.\n" +msgstr "Vorgang wurde wegen Integritätsproblemen abgebrochen.\n" + +#: utils/recutl.c:483 +msgid "use --verbose to get a detailed report.\n" +msgstr "Mit --verbose erhalten Sie einen ausführlichen Bericht.\n" + +#: utils/recutl.c:490 +msgid "use --force to skip the integrity check.\n" +msgstr "Benutzen Sie --force, um die Integritätsprüfung zu unterbinden.\n" + +#: utils/recutl.c:551 +msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" +msgstr "" +"Interner Fehler: recutl_index_list_parse:\n" +"Fehler beim Kompilieren des regulären Ausdrucks.\n" + +#: utils/recutl.c:626 +msgid "Password: " +msgstr "Passwort: " + +#: utils/recutl.c:632 +msgid "Password again: " +msgstr "Passwort erneut: " + +#: utils/recutl.c:637 +msgid "the provided passwords don't match.\n" +msgstr "Die angegebenen Passwörter stimmen nicht überein.\n" + +#: utils/recutl.h:97 utils/recutl.h:186 utils/recutl.h:190 +#, fuzzy +msgid "cannot specify -e and also -n\n" +msgstr "-c und -p können nicht gleichzeitig angegeben werden.\n" + +#: utils/recutl.h:102 +#, fuzzy +msgid "cannot specify -e and also -q\n" +msgstr "-c und -p können nicht gleichzeitig angegeben werden.\n" + +#: utils/recutl.h:113 +#, fuzzy +msgid "invalid selection expression\n" +msgstr "Ungültiger Auswahlausdruck.\n" + +#: utils/recutl.h:125 +#, fuzzy +msgid "cannot specify -n and also -e\n" +msgstr "-c und -p können nicht gleichzeitig angegeben werden.\n" + +#: utils/recutl.h:130 +#, fuzzy +msgid "cannot specify -n and also -q\n" +msgstr "-c und -p können nicht gleichzeitig angegeben werden.\n" + +#: utils/recutl.h:140 +#, fuzzy +msgid "invalid list of indexes in -n\n" +msgstr "Ungültige Feldliste in -%c\n" + +#: utils/recutl.h:150 +#, fuzzy +msgid "cannot specify -m and also -e\n" +msgstr "-c und -p können nicht gleichzeitig angegeben werden.\n" + +#: utils/recutl.h:155 +#, fuzzy +msgid "cannot specify -m and also -q\n" +msgstr "-c und -p können nicht gleichzeitig angegeben werden.\n" + +#: utils/recutl.h:160 +#, fuzzy +msgid "cannot specify -m and also -n\n" +msgstr "-c und -p können nicht gleichzeitig angegeben werden.\n" + +#~ msgid "%s: option '--%s' doesn't allow an argument\n" +#~ msgstr "%s: Die Option »--%s« erlaubt kein Argument\n" + +#~ msgid "%s: unrecognized option '--%s'\n" +#~ msgstr "%s: Unbekannte Option »--%s«\n" + +#~ msgid "%s: option '-W %s' doesn't allow an argument\n" +#~ msgstr "%s: Die Option »-W %s« erlaubt kein Argument\n" + +#~ msgid "%s: option '-W %s' requires an argument\n" +#~ msgstr "%s: Die Option »-W %s« benötigt ein Argument\n" + +#~ msgid "" +#~ "%s:%s: warning: type %s collides with referred type %s in the rset %s.\n" +#~ msgstr "%s:%s: Warnung: Typ %s kollidiert mit Bezugstyp %s im rset %s.\n" + +#~ msgid "%s:%s: error: value for %s shall be a field name.\n" +#~ msgstr "%s:%s: Fehler: Wert für %s soll ein Feldname sein.\n" + +#~ msgid "reached maximum number of fields: %d\n" +#~ msgstr "Maximale Feldanzahl ist erreicht: %d\n" + +#~ msgid "not enough headers" +#~ msgstr "Nicht genug Header" + +#~ msgid "out of memory" +#~ msgstr "Nicht genügend freier Speicher" + +#~ msgid "evaluating the selection expression.\n" +#~ msgstr "Auswahlausdruck wird interpretiert.\n" + +#~ msgid "reading file %s" +#~ msgstr "Datei %s wird gelesen" + +#~ msgid "internal error: rec_resolver_check: error compiling regexp.\n" +#~ msgstr "" +#~ "Interner Fehler: rec_resolver_check:\n" +#~ "Fehler beim Kompilieren des regulären Ausdrucks.\n" + +#~ msgid "internal error: rec_field_name_part_str_p: error compiling regexp.\n" +#~ msgstr "" +#~ "Interner Fehler: rec_field_name_part_str_p:\n" +#~ "Fehler beim Kompilieren des regulären Ausdrucks.\n" + +#~ msgid "internal error: rec_int_rec_type_p: error compiling regexp.\n" +#~ msgstr "" +#~ "Interner Fehler: rec_int_rec_type_p:\n" +#~ "Fehler beim Kompilieren des regulären Ausdrucks.\n" + +#~ msgid "internal error: rec-types: error compiling regexp.\n" +#~ msgstr "" +#~ "Interner Fehler: rec-types:\n" +#~ "Fehler beim Kompilieren des regulären Ausdrucks.\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " csv2rec contacts.csv > contacts.rec\n" +#~ " cat contacts.csv | csv2rec > contacts.rec\n" +#~ msgstr "" +#~ "Beispiele:\n" +#~ "\n" +#~ " csv2rec kontakte.csv > kontakte.rec\n" +#~ " cat kontakte.csv | csv2rec > kontakte.rec\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " mdb2rec database.mdb > database.rec\n" +#~ " mdb2rec database.mdb Customers > customers.rec\n" +#~ msgstr "" +#~ "Beispiele:\n" +#~ "\n" +#~ " mdb2rec datenbank.mdb > datenbank.rec\n" +#~ " mdb2rec datenbank.mdb Kunden > kunden.rec\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " rec2csv contacts.rec > contacts.csv\n" +#~ " cat contacts.rec | rec2csv -t Contact > contacts.csv\n" +#~ msgstr "" +#~ "Beispiele:\n" +#~ "\n" +#~ " rec2csv kontakte.rec > kontakte.csv\n" +#~ " cat kontakte.rec | rec2csv -t Kontakt > kontakte.csv\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recdel -n 10 contacts.rec\n" +#~ " cat hackers.rec | recdel -e \"Email[0] = 'foo@bar.com'\" > other." +#~ "rec\n" +#~ msgstr "" +#~ "Beispiele:\n" +#~ "\n" +#~ " recdel -n 10 kontakte.rec\n" +#~ " cat hackers.rec | recdel -e \"Email[0] = 'foo@bar.com'\" > andere." +#~ "rec\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " cat employees.rec | recfmt 'Dear {{Name}}, you are fired.'\n" +#~ " cat employees.rec | recfmt -f fire-letter.tmpl\n" +#~ msgstr "" +#~ "Beispiele:\n" +#~ "\n" +#~ " cat angestellte.rec | recfmt 'Sehr geehrter {{Name}}, Sie sind " +#~ "entlassen.'\n" +#~ " cat angestellte.rec | recfmt -f kuendigung.tmpl\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recinf mydata.rec\n" +#~ " recinf -d mydata.rec moredata.rec\n" +#~ " recinf -t Task TODO\n" +#~ msgstr "" +#~ "Beispiele:\n" +#~ "\n" +#~ " recinf meinedaten.rec\n" +#~ " recinf -d meinedaten.rec mehrdaten.rec\n" +#~ " recinf -t Aufgabe TODO\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recins -f Name -v \"Mr Foo\" -f Email -v foo@foo.org contacts." +#~ "rec\n" +#~ " cat hackers.rec | recins -t Hacker -f Email -v foo@foo.org > " +#~ "other.rec\n" +#~ msgstr "" +#~ "Beispiele:\n" +#~ "\n" +#~ " recins -f Name -v \"Mr Foo\" -f Email -v foo@foo.org kontakte." +#~ "rec\n" +#~ " cat hackers.rec | recins -t Hacker -f Email -v foo@foo.org > " +#~ "andere.rec\n" + +#~ msgid "" +#~ "the record set contains confidential fields but no password was provided\n" +#~ msgstr "" +#~ "Der Datensatz enthält vertrauliche Felder, aber es wurde kein Passwort " +#~ "angegeben\n" + +#~ msgid "the resulting record will have those fields unencrypted!\n" +#~ msgstr "" +#~ "Im sich ergebenden Datensatz werden diese Felder unverschlüsselt sein!\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recsel -t Friend -e \"Name ~ 'Smith'\" friends.rec\n" +#~ " recsel -C -e \"#Email && Wiki = 'no'\" -P Email[0] gnupdf-hackers." +#~ "rec\n" +#~ msgstr "" +#~ "Beispiele:\n" +#~ "\n" +#~ " recsel -t Freund -e \"Name ~ 'Schmidt'\" freunde.rec\n" +#~ " recsel -C -e \"#Email && Wiki = 'no'\" -P Email[0] gnupdf-hackers." +#~ "rec\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recset -f TmpName -d data.rec\n" +#~ " recset -f Email[1] -s invalid@email.com friends.rec\n" +#~ " recset -e \"Name ~ 'Smith'\" -f Email -a new@email.com friends." +#~ "rec\n" +#~ " recset -f Email[1] -r AltEmail friends.rec\n" +#~ msgstr "" +#~ "Beispiele:\n" +#~ "\n" +#~ " recset -f TmpName -d daten.rec\n" +#~ " recset -f Email[1] -s ungueltige@email.com freunde.rec\n" +#~ " recset -e \"Name ~ 'Schmidt'\" -f Email -a neue@email.com freunde." +#~ "rec\n" +#~ " recset -f Email[1] -r AltEmail freunde.rec\n" + +#~ msgid " --no-external don't use external descriptors.\n" +#~ msgstr "" +#~ " --no-external Keine externen Deskriptoren verwenden.\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recfix data.rec\n" +#~ " recfix data1.rec data2.rec\n" +#~ " cat data1.rec data2.rec | recfix\n" +#~ msgstr "" +#~ "Beispiele:\n" +#~ "\n" +#~ " recfix daten.rec\n" +#~ " recfix daten1.rec daten2.rec\n" +#~ " cat daten1.rec daten2.rec | recfix\n" + +#~ msgid "evaluating selection expression.\n" +#~ msgstr "Auswahlausdruck wird interpretiert.\n" + +#~ msgid "use --force to skip the integrity chech\n" +#~ msgstr "Durch --force wird die Integritätsprüfung übersprungen\n" + +#~ msgid "operation aborted due to integrity failures\n" +#~ msgstr "Vorgang wurde wegen Integritätsproblemen abgebrochen\n" + +#~ msgid "use --verbose to get a detailed report\n" +#~ msgstr "Mit --verbose erhalten Sie einen ausführlichen Bericht\n" diff --git a/devspec.en_US/project/recutils/po/en@boldquot.header b/devspec.en_US/project/recutils/po/en@boldquot.header new file mode 100755 index 0000000..fedb6a0 --- /dev/null +++ b/devspec.en_US/project/recutils/po/en@boldquot.header @@ -0,0 +1,25 @@ +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# +# This catalog furthermore displays the text between the quotation marks in +# bold face, assuming the VT100/XTerm escape sequences. +# diff --git a/devspec.en_US/project/recutils/po/en@quot.header b/devspec.en_US/project/recutils/po/en@quot.header new file mode 100755 index 0000000..a9647fc --- /dev/null +++ b/devspec.en_US/project/recutils/po/en@quot.header @@ -0,0 +1,22 @@ +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# diff --git a/devspec.en_US/project/recutils/po/es.gmo b/devspec.en_US/project/recutils/po/es.gmo new file mode 100755 index 0000000000000000000000000000000000000000..cafa69e3b7e6a1299b811d391b80f83d13d6398b GIT binary patch literal 17909 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 K^_oh)R``EiL1ZQX literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/po/es.po b/devspec.en_US/project/recutils/po/es.po new file mode 100755 index 0000000..e82ae43 --- /dev/null +++ b/devspec.en_US/project/recutils/po/es.po @@ -0,0 +1,1901 @@ +# Translation for GNU recutils for Spanish +# Copyright (C) 2015 Free Software Foundation, Inc. +# This file is distributed under the same license as the recutils package. +# Enrique Lazcorreta Puigmartí <enrique.lazcorreta@gmail.com>, 2015. +# +msgid "" +msgstr "" +"Project-Id-Version: GNU recutils 1.6.90\n" +"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" +"POT-Creation-Date: 2019-01-03 10:32+0100\n" +"PO-Revision-Date: 2015-01-28 11:16+0100\n" +"Last-Translator: Enrique Lazcorreta Puigmartí <enrique.lazcorreta@gmail." +"com>\n" +"Language-Team: Spanish <es@tp.org.es>\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.7.4\n" + +#: lib/closeout.c:122 +#, fuzzy +msgid "write error" +msgstr "error de escritura" + +#: lib/copy-acl.c:54 +#, c-format +msgid "preserving permissions for %s" +msgstr "" + +#: lib/error.c:195 +msgid "Unknown system error" +msgstr "Error del sistema desconocido" + +#: lib/execute.c:185 lib/execute.c:258 lib/wait-process.c:282 +#: lib/wait-process.c:356 +#, c-format +msgid "%s subprocess failed" +msgstr "Fallo en el subproceso %s" + +#: lib/getopt.c:278 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous\n" +msgstr "%s: la opción '-W %s' es ambigua\n" + +#: lib/getopt.c:284 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous; possibilities:" +msgstr "%s: la opción '%s' es ambigua; posibilidades:" + +#: lib/getopt.c:319 +#, fuzzy, c-format +msgid "%s: unrecognized option '%s%s'\n" +msgstr "%s: no se reconoce la opción '%c%s'\n" + +#: lib/getopt.c:345 +#, fuzzy, c-format +msgid "%s: option '%s%s' doesn't allow an argument\n" +msgstr "%s: la opción '%c%s' no admite ningún argumento\n" + +#: lib/getopt.c:360 +#, fuzzy, c-format +msgid "%s: option '%s%s' requires an argument\n" +msgstr "%s: la opción '--%s' requiere un argumento\n" + +#: lib/getopt.c:621 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: opción inválida -- '%c'\n" + +#: lib/getopt.c:636 lib/getopt.c:682 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: la opción -- '%c' requiere un argumento\n" + +#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "memoria agotada" + +#: parse-datetime.y:440 parse-datetime.y:540 +#, c-format +msgid "parsed %s part: " +msgstr "" + +#: parse-datetime.y:455 +#, c-format +msgid "year: %04<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:483 +#, c-format +msgid "%s (day ordinal=%<PRIdMAX> number=%d)" +msgstr "" + +#: parse-datetime.y:514 +#, c-format +msgid "number of seconds: %<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:547 +msgid "today/this/now\n" +msgstr "" + +#: parse-datetime.y:612 +msgid "number of seconds" +msgstr "" + +#: parse-datetime.y:625 +msgid "datetime" +msgstr "" + +#: parse-datetime.y:630 +msgid "time" +msgstr "" + +#: parse-datetime.y:635 +msgid "local_zone" +msgstr "" + +#: parse-datetime.y:640 +msgid "zone" +msgstr "" + +#: parse-datetime.y:645 +msgid "date" +msgstr "" + +#: parse-datetime.y:650 +msgid "day" +msgstr "" + +#: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 +msgid "relative" +msgstr "" + +#: parse-datetime.y:658 +msgid "number" +msgstr "" + +#: parse-datetime.y:662 +msgid "hybrid" +msgstr "" + +#: parse-datetime.y:820 +#, c-format +msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" +msgstr "" + +#: parse-datetime.y:832 +#, c-format +msgid "" +"warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" +msgstr "" + +#: parse-datetime.y:1276 +#, c-format +msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1286 +#, c-format +msgid "error: out-of-range year %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1524 +#, fuzzy, c-format +msgid "error: unknown word '%s'\n" +msgstr "no se puede leer el archivo %s\n" + +#: parse-datetime.y:1673 +#, fuzzy +msgid "error: invalid date/time value:\n" +msgstr "valor de enumeración no válido" + +#: parse-datetime.y:1674 +#, c-format +msgid " user provided time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1676 +#, c-format +msgid " normalized time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1699 +msgid " possible reasons:\n" +msgstr "" + +#: parse-datetime.y:1701 +msgid " non-existing due to daylight-saving time;\n" +msgstr "" + +#: parse-datetime.y:1703 +msgid " invalid day/month combination;\n" +msgstr "" + +#: parse-datetime.y:1704 +msgid " numeric values overflow;\n" +msgstr "" + +#: parse-datetime.y:1705 +msgid "incorrect timezone" +msgstr "" + +#: parse-datetime.y:1706 +msgid "missing timezone" +msgstr "" + +#: parse-datetime.y:1826 +msgid "error: initial year out of range\n" +msgstr "" + +#: parse-datetime.y:1923 +#, fuzzy +msgid "error: parsing failed\n" +msgstr "error al analizar el archivo CSV: %s\n" + +#: parse-datetime.y:1924 +#, fuzzy, c-format +msgid "error: parsing failed, stopped at '%s'\n" +msgstr "error al analizar el archivo CSV: %s\n" + +#: parse-datetime.y:1934 +msgid "input timezone: " +msgstr "" + +#: parse-datetime.y:1937 +#, c-format +msgid "'@timespec' - always UTC" +msgstr "" + +#: parse-datetime.y:1939 +#, c-format +msgid "parsed date/time string" +msgstr "" + +#: parse-datetime.y:1943 +#, c-format +msgid "TZ=\"%s\" in date string" +msgstr "" + +#: parse-datetime.y:1947 +#, c-format +msgid "TZ=\"UTC0\" environment value or -u" +msgstr "" + +#: parse-datetime.y:1950 +#, c-format +msgid "TZ=\"%s\" environment value" +msgstr "" + +#: parse-datetime.y:1953 +#, c-format +msgid "system default" +msgstr "" + +#: parse-datetime.y:1995 +msgid "error: year, month, or day overflow\n" +msgstr "" + +#: parse-datetime.y:2006 +#, fuzzy, c-format +msgid "error: invalid hour %<PRIdMAX>%s\n" +msgstr "%s:%s: error: tipo de registro %s no válido\n" + +#: parse-datetime.y:2014 +#, c-format +msgid "using specified time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2015 +#, c-format +msgid "using current time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2069 +#, c-format +msgid "error: tzalloc (\"%s\") failed\n" +msgstr "" + +#: parse-datetime.y:2114 +#, c-format +msgid "" +"error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " +"date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2125 +#, c-format +msgid "new start date: '%s' is '%s'\n" +msgstr "" + +#: parse-datetime.y:2134 +#, c-format +msgid "using current date as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2138 +#, c-format +msgid "warning: day (%s) ignored when explicit dates are given\n" +msgstr "" + +#: parse-datetime.y:2142 +#, c-format +msgid "starting date/time: '%s'\n" +msgstr "" + +#: parse-datetime.y:2152 +msgid "" +"warning: when adding relative months/years, it is recommended to specify the " +"15th of the months\n" +msgstr "" + +#: parse-datetime.y:2157 +msgid "warning: when adding relative days, it is recommended to specify noon\n" +msgstr "" + +#: parse-datetime.y:2167 +#, fuzzy, c-format +msgid "error: %s:%d\n" +msgstr "error de escritura" + +#: parse-datetime.y:2181 +#, c-format +msgid "error: adding relative date resulted in an invalid date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2190 +#, c-format +msgid "" +"after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " +"days),\n" +msgstr "" + +#: parse-datetime.y:2194 +#, c-format +msgid " new date/time = '%s'\n" +msgstr "" + +#: parse-datetime.y:2213 +msgid "warning: daylight saving time changed after date adjustment\n" +msgstr "" + +#: parse-datetime.y:2232 +msgid "warning: month/year adjustment resulted in shifted dates:\n" +msgstr "" + +#: parse-datetime.y:2235 +#, c-format +msgid " adjusted Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2237 +#, c-format +msgid " normalized Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2265 +#, c-format +msgid "error: timezone %d caused time_t overflow\n" +msgstr "" + +#: parse-datetime.y:2275 +#, c-format +msgid "'%s' = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2303 +msgid "error: adding relative time caused an overflow\n" +msgstr "" + +#: parse-datetime.y:2314 +#, c-format +msgid "" +"after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " +"seconds, %+d ns),\n" +msgstr "" + +#: parse-datetime.y:2319 +#, c-format +msgid " new time = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2335 +msgid "warning: daylight saving time changed after time adjustment\n" +msgstr "" + +#: parse-datetime.y:2345 +msgid "timezone: system default\n" +msgstr "" + +#: parse-datetime.y:2347 +msgid "timezone: Universal Time\n" +msgstr "" + +#: parse-datetime.y:2349 +#, c-format +msgid "timezone: TZ=\"%s\" environment value\n" +msgstr "" + +#: parse-datetime.y:2353 +#, c-format +msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" +msgstr "" + +#: parse-datetime.y:2359 +#, c-format +msgid "final: %s (UTC)\n" +msgstr "" + +#: parse-datetime.y:2374 +#, c-format +msgid "final: %s (UTC%s)\n" +msgstr "" + +#: parse-datetime.y:2378 +#, c-format +msgid "final: %s (unknown time zone offset)\n" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". For example, a French Unicode local should translate +#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), respectively. +#. +#. If the catalog has no translation, we will try to +#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and +#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the +#. current locale is not Unicode, locale_quoting_style +#. will quote 'like this', and clocale_quoting_style will +#. quote "like this". You should always include translations +#. for "`" and "'" even if U+2018 and U+2019 are appropriate +#. for your locale. +#. +#. If you don't know what to put here, please see +#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:362 +msgid "`" +msgstr "«" + +#: lib/quotearg.c:363 +msgid "'" +msgstr "»" + +#: lib/regcomp.c:135 +msgid "Success" +msgstr "Éxito" + +#: lib/regcomp.c:138 +msgid "No match" +msgstr "No hay resultados" + +#: lib/regcomp.c:141 +msgid "Invalid regular expression" +msgstr "Expresión regular no válida" + +#: lib/regcomp.c:144 +msgid "Invalid collation character" +msgstr "Carácter de secuencia inválido" + +#: lib/regcomp.c:147 +msgid "Invalid character class name" +msgstr "Nombre de clase de caracteres inválido" + +#: lib/regcomp.c:150 +msgid "Trailing backslash" +msgstr "Barra invertida final" + +#: lib/regcomp.c:153 +msgid "Invalid back reference" +msgstr "Referencia hacia atrás inválida" + +#: lib/regcomp.c:156 +#, fuzzy +msgid "Unmatched [, [^, [:, [., or [=" +msgstr "[ o [^ desemparejado" + +#: lib/regcomp.c:159 +msgid "Unmatched ( or \\(" +msgstr "( or \\( desemparejado" + +#: lib/regcomp.c:162 +msgid "Unmatched \\{" +msgstr "\\{ desemparejado" + +#: lib/regcomp.c:165 +msgid "Invalid content of \\{\\}" +msgstr "Contenido de \\{\\} inválido" + +#: lib/regcomp.c:168 +msgid "Invalid range end" +msgstr "Fin de rango inválido" + +#: lib/regcomp.c:171 +msgid "Memory exhausted" +msgstr "Memoria agotada" + +#: lib/regcomp.c:174 +msgid "Invalid preceding regular expression" +msgstr "Expresión regular precedente inválida" + +#: lib/regcomp.c:177 +#, fuzzy +msgid "Premature end of regular expression" +msgstr "Expresión regular no válida" + +#: lib/regcomp.c:180 +msgid "Regular expression too big" +msgstr "Expresión regular demasiado grande" + +#: lib/regcomp.c:183 +msgid "Unmatched ) or \\)" +msgstr ") or \\) desemparejado" + +#: lib/regcomp.c:676 +msgid "No previous regular expression" +msgstr "No hay ninguna expresión regular previa" + +#: lib/set-acl.c:46 +#, c-format +msgid "setting permissions for %s" +msgstr "" + +#: lib/version-etc.c:73 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:76 +#, c-format +msgid "Packaged by %s\n" +msgstr "" + +#. TRANSLATORS: Translate "(C)" to the copyright symbol +#. (C-in-a-circle), if this symbol is available in the user's +#. locale. Otherwise, do not translate "(C)"; leave it as-is. +#: lib/version-etc.c:83 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:85 +msgid "" +"\n" +"License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:117 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" + +#. TRANSLATORS: The placeholder indicates the bug-reporting address +#. for this package. Please add _another line_ saying +#. "Report translation bugs to <...>\n" with the address for translation +#. bugs (typically your translation team's web or email address). +#: lib/version-etc.c:245 +#, c-format +msgid "" +"\n" +"Report bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:247 utils/recutl.c:125 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 utils/recutl.c:129 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <https://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <https://www.gnu.org/gethelp/>\n" +msgstr "" + +#: lib/w32spawn.h:49 +#, c-format +msgid "_open_osfhandle failed" +msgstr "falló _open_osfhandle" + +#: lib/w32spawn.h:90 +#, c-format +msgid "cannot restore fd %d: dup2 failed" +msgstr "no se puede restaurar fd %d: falló dup2" + +#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317 +#, c-format +msgid "%s subprocess" +msgstr "subproceso %s" + +#: lib/wait-process.c:274 lib/wait-process.c:346 +#, c-format +msgid "%s subprocess got fatal signal %d" +msgstr "subproceso %s recibió la señal fatal %d" + +#: src/rec-fex.c:451 +#, c-format +msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" +msgstr "error interno: REC_FEX_MAX_ELEMS superado. Por favor, comuníquelo.\n" + +#: src/rec-int.c:176 +#, c-format +msgid "%s: error: the number of records of type %s should be %zd.\n" +msgstr "%s: error: el número de registros de tipo %s debería ser %zd.\n" + +#: src/rec-int.c:186 +#, c-format +msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" +msgstr "" +"%s: error: demasiados registros de tipo %s. El máximo permitido es %zd.\n" + +#: src/rec-int.c:193 +#, c-format +msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" +msgstr "" +"%s: error: muy pocos registros de tipo %s. El mínimo permitido es %zd.\n" + +#: src/rec-int.c:409 src/rec-int.c:463 src/rec-int.c:520 src/rec-int.c:564 +#: utils/recutl.c:207 +msgid "out of memory\n" +msgstr "memoria insuficiente\n" + +#: src/rec-int.c:424 +#, c-format +msgid "%s:%s: error: mandatory field '%s' not found in record\n" +msgstr "%s:%s: error: el campo obligatorio '%s' no está en el registro\n" + +#: src/rec-int.c:487 +#, c-format +msgid "%s:%s: error: field '%s' not allowed in this record set\n" +msgstr "%s:%s: error: este conjunto de registros no admite el campo '%s'\n" + +#: src/rec-int.c:534 +#, c-format +msgid "%s:%s: error: field '%s' should be unique in this record\n" +msgstr "%s:%s: error: el campo '%s' debería ser único en este registro\n" + +#: src/rec-int.c:578 +#, c-format +msgid "%s:%s: error: prohibited field '%s' found in record\n" +msgstr "" +"%s:%s: error: se ha encontrado en el registro el campo prohibido '%s'\n" + +# No traduzco %%constraint, %%rec, %%key, %%size ni %%sort porque parece el nombre de un campo. +#: src/rec-int.c:610 +#, c-format +msgid "%s:%s: error: %%constraint[%d] violated in record\n" +msgstr "%s:%s: error: %%constraint[%d] violada en el registro\n" + +#: src/rec-int.c:647 +#, c-format +msgid "%s:%s: error: confidential field is not encrypted\n" +msgstr "%s:%s: error: campo confidencial sin encriptar\n" + +#: src/rec-int.c:699 +#, c-format +msgid "%s:%s: error: key field '%s' not found in record\n" +msgstr "%s:%s: error: no se encuentra el campo clave '%s' en el registro\n" + +#: src/rec-int.c:708 +#, c-format +msgid "%s:%s: error: multiple key fields '%s' in record\n" +msgstr "%s:%s: error: múltiples campos clave '%s' en el registro\n" + +#: src/rec-int.c:751 +#, c-format +msgid "%s:%s: error: duplicated key value in field '%s' in record\n" +msgstr "%s:%s: error: valor clave duplicada en el campo '%s' del registro\n" + +# No traduzco %%constraint, %%rec, %%key, %%size ni %%sort porque parece el nombre de un campo. +#: src/rec-int.c:799 +#, c-format +msgid "%s:%s: error: missing %%rec field in record descriptor\n" +msgstr "%s:%s: error: falta el campo %%rec en el descriptor del registro\n" + +# No traduzco %%constraint, %%rec, %%key, %%size ni %%sort porque parece el nombre de un campo. +#: src/rec-int.c:807 +#, c-format +msgid "%s:%s: error: too many %%rec fields in record descriptor\n" +msgstr "%s:%s: error: demasiados campos %%rec en el descriptor del registro\n" + +#: src/rec-int.c:817 +#, c-format +msgid "%s:%s: error: invalid record type %s\n" +msgstr "%s:%s: error: tipo de registro %s no válido\n" + +# No traduzco %%constraint, %%rec, %%key, %%size ni %%sort porque parece el nombre de un campo. +#: src/rec-int.c:828 +#, c-format +msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" +msgstr "" +"%s:%s: error: sólo se permite un campo %%key en el descriptor del registro\n" + +# No traduzco %%constraint, %%rec, %%key, %%size ni %%sort porque parece el nombre de un campo. +#: src/rec-int.c:838 +#, c-format +msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" +msgstr "" +"%s:%s: error: sólo se permite un campo %%size en el descriptor del registro\n" + +# No traduzco %%constraint, %%rec, %%key, %%size ni %%sort porque parece el nombre de un campo. +#: src/rec-int.c:848 +#, c-format +msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" +msgstr "" +"%s:%s: error: sólo se permite un campo %%sort en el descriptor del registro\n" + +#: src/rec-int.c:871 +#, c-format +msgid "" +"%s:%s: error: expected a comma-separated list of fields before the type " +"specification\n" +msgstr "" +"%s:%s: error: se esperaba una lista de campos separada por comas antes de la " +"especificación de tipo\n" + +#: src/rec-int.c:897 src/rec-int.c:950 +#, c-format +msgid "%s:%s: error: the referred type %s does not exist\n" +msgstr "%s:%s: error: el tipo indicado %s no existe\n" + +#: src/rec-int.c:909 +#, c-format +msgid "%s:%s: error: invalid type specification\n" +msgstr "%s:%s: error: especificación de tipo no válida\n" + +#: src/rec-int.c:924 +#, c-format +msgid "%s:%s: error: expected a type name before the type specification\n" +msgstr "" +"%s:%s: error: se esperaba un nombre de tipo antes de su especificación\n" + +# No entiendo el código, no sé si se debe traducir typedef. +#: src/rec-int.c:962 +#, c-format +msgid "%s:%s: error: invalid typedef specification\n" +msgstr "%s:%s: error: especificación typedef no válida\n" + +#: src/rec-int.c:984 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" +msgstr "" +"%s:%s: error: el valor de %s[%zd] no es una expresión de selección válida\n" + +#: src/rec-int.c:1015 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" +msgstr "" +"%s:%s: error: el valor de %s[%zd] no es una lista de nombres de campos\n" + +#: src/rec-int.c:1028 +#, c-format +msgid "" +"%s:%s: error: value for %s should be a number optionally preceded by >, <, " +">= or <=.\n" +msgstr "" +"%s:%s: error: el valor de %s debe ser un número que puede estar precedido " +"por >, <, >= o <=.\n" + +#: src/rec-int.c:1044 +#, c-format +msgid "%s:%s: error: value for %s should be a list of field names.\n" +msgstr "" +"%s:%s: error: el valor de %s debe ser una lista de campos de nombres.\n" + +#: src/rec-int.c:1072 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range, uuid " +"or date\n" +msgstr "" +"%s:%s: error: el campo auto-incrementado %s debe ser de tipo int, range, " +"uuid o date\n" + +#: src/rec-int.c:1074 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range or " +"date\n" +msgstr "" +"%s:%s: error: el campo auto-incrementado %s debe ser de tipo int, range o " +"date\n" + +#: src/rec-int.c:1157 +#, c-format +msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" +msgstr "" +"%s:%s: error: no se pudo obtener el descriptor remoto desde la url %s.\n" + +#: src/rec-int.c:1176 +#, c-format +msgid "%s:%s: error: could not read external descriptor from file %s.\n" +msgstr "" +"%s:%s: error: no se pudo leer el descriptor externo desde el archivo %s.\n" + +# Repasar traducción +#: src/rec-int.c:1191 +#, c-format +msgid "%s:%s: error: %s does not contain valid rec data.\n" +msgstr "%s:%s: error: %s no contiene datos válidos rec.\n" + +#: src/rec-int.c:1205 +#, c-format +msgid "%s:%s: error: %s does not contain information for type %s.\n" +msgstr "%s:%s: error: %s no contiene información para el tipo %s.\n" + +#: src/rec-types.c:448 +#, c-format +msgid "" +"internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " +"in rec_type_new().\n" +msgstr "" +"error interno: rec-types: obtuvo REC_TYPE_NONE desde " +"rec_type_parse_type_kind() en rec_type_new().\n" + +#: src/rec-types.c:1178 +msgid "invalid integer." +msgstr "entero no válido." + +#: src/rec-types.c:1208 +msgid "invalid 'field' value." +msgstr "valor 'field' no válido." + +#: src/rec-types.c:1231 +msgid "invalid 'uuid' value." +msgstr "valor 'uuid' no válido." + +#: src/rec-types.c:1249 +msgid "invalid 'bool' value." +msgstr "valor 'bool' no válido." + +#: src/rec-types.c:1272 +msgid "invalid 'range' value." +msgstr "valor 'range' no válido." + +#: src/rec-types.c:1281 +#, c-format +msgid "expected an integer between %d and %d." +msgstr "se esperaba un entero entre %d y %d." + +#: src/rec-types.c:1302 +msgid "invalid 'real' value." +msgstr "valor 'real' no válido." + +#: src/rec-types.c:1320 +#, c-format +msgid "value too large. Expected a size <= %zu." +msgstr "valor demasiado grande. Se esperaba un tamaño <= %zu." + +#: src/rec-types.c:1341 +msgid "invalid 'line' value." +msgstr "valor 'line' no válido." + +#: src/rec-types.c:1360 +msgid "value does not match the regexp." +msgstr "el valor no coincide con la expresión regular." + +#: src/rec-types.c:1383 +msgid "invalid date." +msgstr "fecha incorrecta." + +# Averiguar si es correcta la traducción. +#: src/rec-types.c:1399 +msgid "invalid email." +msgstr "correo electrónico no válido." + +#: src/rec-types.c:1444 +msgid "invalid enum value." +msgstr "valor de enumeración no válido" + +#: src/rec-utils.c:93 +#, c-format +msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" +msgstr "" +"error interno: rec_int_rec_extract_file: error compilando expresión " +"regular.\n" + +#: src/rec-utils.c:121 src/rec-utils.c:150 +#, c-format +msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" +msgstr "" +"error interno: rec_int_rec_extract_url: error compilando expresión regular.\n" + +#: src/rec-utils.c:304 +#, c-format +msgid "internal error: rec_match: error compiling regexp.\n" +msgstr "error interno: rec_match: error compilando expresión regular.\n" + +#. TRANSLATORS: --help output, csv2rec synopsis. +#. no-wrap +#: utils/csv2rec.c:105 +#, c-format +msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" +msgstr "Uso: csv2rec [OPCIONES]... [ARCHIVO_CSV]\n" + +#. TRANSLATORS: --help output, csv2rec short description. +#. no-wrap +#: utils/csv2rec.c:110 +msgid "Convert csv data into rec data.\n" +msgstr "Convertir datos csv en datos rec.\n" + +#. TRANSLATORS: --help output, csv2rec options. +#. no-wrap +#: utils/csv2rec.c:116 +msgid "" +" -t, --type=TYPE type name for the converted records; " +"if this\n" +" parameter is ommited then no type is " +"used.\n" +" -s, --strict be strict parsing the csv file.\n" +" -e, --omit-empty omit empty fields.\n" +msgstr "" +" -t, --type=TYPE nombre del tipo para el registro " +"convertido;\n" +" se omite este parámetro no se usará " +"ningún tipo.\n" +" -s, --strict ser estricto al analizar el archivo " +"csv.\n" +" -e, --omit-empty omitir campos vacíos.\n" + +#: utils/csv2rec.c:230 +#, c-format +msgid "invalid field name '%s' in header\n" +msgstr "nombre de campo '%s' no válido en la cabecera\n" + +#: utils/csv2rec.c:259 +#, fuzzy, c-format +msgid "" +"%s: %lu: this line contains %lu fields, but %lu header fields were read\n" +msgstr "" +"%s: %d: esta línea contiene %d campos, pero se leyeron %d campos en la " +"cabecera\n" + +#: utils/csv2rec.c:347 utils/recdel.c:266 utils/recset.c:358 utils/recutl.c:328 +#, c-format +msgid "cannot read file %s\n" +msgstr "no se puede leer el archivo %s\n" + +#: utils/csv2rec.c:358 +msgid "failed to initialize csv parser\n" +msgstr "no se pudo inicializar el analizador de csv\n" + +#: utils/csv2rec.c:376 +#, c-format +msgid "error while parsing CSV file: %s\n" +msgstr "error al analizar el archivo CSV: %s\n" + +#. TRANSLATORS: --help output, mdb2rec synopsis. +#. no-wrap +#: utils/mdb2rec.c:103 +#, c-format +msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" +msgstr "UsO: mdb2rec [OPCIONES]... ARCHIVO_MDB [TABLA]\n" + +#. TRANSLATORS: --help output, mdb2rec short description. +#. no-wrap +#: utils/mdb2rec.c:108 +msgid "Convert an mdb file into a rec file.\n" +msgstr "Convertir un archivo mdb en un archivo rec.\n" + +#. TRANSLATORS: --help output, mdb2rec options. +#. no-wrap +#: utils/mdb2rec.c:114 +msgid "" +" -s, --system-tables include system tables.\n" +" -e, --keep-empty-fields don't prune empty fields in the rec\n" +" output.\n" +" -l, --list-tables dump a list of the table names " +"contained\n" +" in the mdb file.\n" +msgstr "" +" -s, --system-tables incluir tablas del sistema.\n" +" -e, --keep-empty-fields no se eliminan los campos vacíos\n" +" en la salida rec.\n" +" -l, --list-tables volcar una lista de los nombres de " +"tablas\n" +" contenidas en el archivo mdb.\n" + +#: utils/mdb2rec.c:251 utils/mdb2rec.c:315 +#, c-format +msgid "failed to normalise record type name %s\n" +msgstr "error al normalizar registros de nombre de tipo %s\n" + +#: utils/mdb2rec.c:259 utils/mdb2rec.c:270 +#, c-format +msgid "failed to normalise field name %s\n" +msgstr "error al normalizar nombre de campo %s\n" + +#: utils/mdb2rec.c:336 +#, c-format +msgid "failed to normalise the field name %s\n" +msgstr "error al normalizar el nombre de campo %s\n" + +#: utils/mdb2rec.c:443 utils/recins.c:208 utils/recset.c:253 +#, c-format +msgid "invalid field name %s.\n" +msgstr "nombre de campo %s inválido.\n" + +#: utils/mdb2rec.c:482 +#, c-format +msgid "could not open file %s\n" +msgstr "no se puede abrir el archivo %s\n" + +#: utils/mdb2rec.c:489 +msgid "file does not appear to be an Access database\n" +msgstr "el archivo no parece ser una base de datos Access\n" + +#. TRANSLATORS: --help output, rec2csv synopsis. +#. no-wrap +#: utils/rec2csv.c:86 +#, c-format +msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" +msgstr "Uso: rec2csv [OPCIONES]... [ARCHIVO_REC]\n" + +#. TRANSLATORS: --help output, rec2csv short description. +#. no-wrap +#: utils/rec2csv.c:91 +msgid "Convert rec data into csv data.\n" +msgstr "Convertir datos rec en datos csv.\n" + +#. TRANSLATORS: --help output, rec2csv options. +#. no-wrap +#: utils/rec2csv.c:97 +msgid "" +" -d, --delim=char sets the deliminator (default ',')\n" +" -t, --type=TYPE record set to convert to csv; if this " +"parameter\n" +" is omitted then the default record " +"set is used\n" +" -S, --sort=FIELDS sort the output by the specified " +"fields.\n" +msgstr "" +" -d, --delim=char establece el separador (',' por " +"defecto)\n" +" -t, --type=TIPO conjunto de registros a convertir a " +"csv; si se omite\n" +" este parámetro se usará el conjunto " +"de registros por defecto\n" +" -S, --sort=CAMPOS ordenar la salida por los campos " +"especificados\n" + +#: utils/rec2csv.c:142 +msgid "only one list of fields can be specified as a sorting criteria.\n" +msgstr "" +"sólo se puede especificar una lista de campos como criterio de ordenación.\n" + +#: utils/rec2csv.c:149 +msgid "invalid field name list in -S.\n" +msgstr "lista de nombres de campos inválida en -S.\n" + +#: utils/rec2csv.c:155 utils/recsel.c:248 utils/recsel.c:286 +msgid "internal error creating fex.\n" +msgstr "error interno creando fex.\n" + +#. TRANSLATORS: --help output, recdel synopsis. +#. no-wrap +#: utils/recdel.c:89 +#, c-format +msgid "" +"Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [FILE]\n" +msgstr "" +"Uso: recdel [OPCIONES]... [-t TIPO] [-n NUM | -e EXPR_REGISTRO | -q STR | -m " +"NUM] [ARCHIVO]\n" + +#. TRANSLATORS: --help output, recdel short description. +#. no-wrap +#: utils/recdel.c:94 +msgid "Remove (or comment out) records from a rec file.\n" +msgstr "Eliminar (o comentar) registros de un archivo rec.\n" + +#. TRANSLATORS: --help output, recdel arguments. +#. no-wrap +#: utils/recdel.c:101 +msgid "" +" -c, --comment comment out the matching records " +"instead of\n" +" deleting them.\n" +" --force delete even in potentially dangerous " +"situations,\n" +" and if the deletion is violating " +"record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -c, --comment comentar los registros coincidentes en " +"lugar de\n" +" eliminarlos.\n" +" --force eliminar incluso en situaciones " +"potencialmente peligrosas,\n" +" y si la eliminación está violando " +"las restricciones del registro.\n" +" --no-external no utilice descriptores externos.\n" +" --verbose dar un informe detallado si la " +"comprobación de\n" +" integridad falla.\n" + +#. TRANSLATORS: --help output, notes on recdel. +#. no-wrap +#. TRANSLATORS: --help output, notes on recfix. +#. no-wrap +#. TRANSLATORS: --help output, notes on recins. +#. no-wrap +#: utils/recdel.c:119 utils/recfix.c:167 utils/recins.c:149 +msgid "" +"If no FILE is specified then the command acts like a filter, getting\n" +"the data from standard input and writing the result to standard output.\n" +msgstr "" +"Si no se especifica un ARCHIVO el comando actúa como un filtro, obteniendo\n" +"los datos de la entrada estándar y escribiendo el resultado en la salida " +"estándar.\n" + +#: utils/recdel.c:136 +#, c-format +msgid "no records of type %s found.\n" +msgstr "no se encontraron registros del tipo %s.\n" + +#: utils/recdel.c:227 +#, c-format +msgid "ignoring a request to delete all records of type %s.\n" +msgstr "" +"omitiendo una solicitud para eliminar todos los registros de tipo %s.\n" + +#: utils/recdel.c:229 +msgid "use --force if you really want to proceed, or use either -n or -e.\n" +msgstr "use --force si realmente quiere continuar, o use -n o -e.\n" + +#: utils/recdel.c:237 +msgid "invalid selection expression.\n" +msgstr "expresión de selección no válida.\n" + +#: utils/recdel.c:276 utils/recfix.c:407 utils/recins.c:410 utils/recset.c:365 +#, c-format +msgid "file %s is not writable.\n" +msgstr "no se puede escribir en el archivo %s.\n" + +#. TRANSLATORS: --help output, recfix synopsis. +#. no-wrap +#: utils/recfix.c:117 +#, c-format +msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" +msgstr "Uso: recfix [OPCIÓN]... [OPERACIÓN] [OPCIÓN_OP]... [ARCHIVO]\n" + +#. TRANSLATORS: --help output, recfix short description. +#. no-wrap +#: utils/recfix.c:122 +msgid "Check and fix rec files.\n" +msgstr "Comprobar y reparar archivos rec.\n" + +#. TRANSLATORS: --help output, recfix global arguments. +#. no-wrap +#: utils/recfix.c:129 +msgid "" +" --no-external don't use external descriptors.\n" +" --force force the requested operation.\n" +msgstr "" +" --no-external no use descriptores externos.\n" +" --force forzar la operación solicitada.\n" + +#. TRANSLATORS: --help output, recfix operations. +#. no-wrap +#: utils/recfix.c:139 +msgid "" +"Operations:\n" +" --check check integrity of the specified " +"file. Default.\n" +" --sort sort the records in the specified " +"file.\n" +" --auto insert auto-generated fields in " +"records missing them.\n" +msgstr "" +"Operations:\n" +" --check comprobar la integridad del archivo " +"especificado. Por defecto.\n" +" --sort ordenar los registros del archivo " +"especificado.\n" +" --auto insertar campos generados " +"automáticamente en los registros en que han desaparecido.\n" + +#. TRANSLATORS: --help output, recfix operations related with encryption. +#. no-wrap +#: utils/recfix.c:149 +msgid "" +" --encrypt encrypt confidential fields in the " +"specified file.\n" +" --decrypt decrypt confidential fields in the " +"specified file.\n" +msgstr "" +" --encrypt codificar campos confidenciales en el " +"archivo especificado.\n" +" --decrypt descodificar los campos confidenciales " +"en el archivo especificado.\n" + +#. TRANSLATORS: --help output, recfix encryption and decryption +#. options. +#. no-wrap +#: utils/recfix.c:158 +msgid "" +"De/Encryption options:\n" +" -s, --password=PASSWORD encrypt/decrypt with this password.\n" +msgstr "" +"Opciones de Des/Encriptado:\n" +" -s, --password=CONTRASEÑA encripta /desencripta con esta " +"contraseña.\n" + +#: utils/recfix.c:208 +msgid "--password|-s must be used as an operation argument.\n" +msgstr "--password|-s se ha de usar como un argumento de operación.\n" + +#: utils/recfix.c:214 +msgid "the specified operation does not require a password.\n" +msgstr "la operación especificada no necesita contraseña.\n" + +#: utils/recfix.c:219 +msgid "please specify just one password.\n" +msgstr "por favor, especifique sólo una contraseña.\n" + +#: utils/recfix.c:230 utils/recfix.c:240 utils/recfix.c:250 utils/recfix.c:261 +#: utils/recfix.c:271 +msgid "please specify just one operation.\n" +msgstr "por favor, especifique sólo una operación.\n" + +#: utils/recfix.c:463 +msgid "the database contains already encrypted fields\n" +msgstr "la base de datos contiene campos ya encriptados\n" + +#: utils/recfix.c:464 +msgid "please use --force or --decrypt\n" +msgstr "" + +#: utils/recfix.c:574 +msgid "unknown operation in recfix: please report this as a bug.\n" +msgstr "" + +#. TRANSLATORS: --help output, recfmt synopsis. +#. no-wrap +#: utils/recfmt.c:78 +#, c-format +msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" +msgstr "" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:83 +msgid "Apply a template to records read from standard input.\n" +msgstr "" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:89 +msgid "" +" -f, --file=FILENAME read the template to apply from a " +"file.\n" +msgstr "" + +#: utils/recfmt.c:123 +#, c-format +msgid "can't open file %s for reading.\n" +msgstr "" + +#: utils/recfmt.c:141 +msgid "don't specify a template in the command line and -f at the same time.\n" +msgstr "" + +#: utils/recfmt.c:164 +msgid "invalid expression in a template slot.\n" +msgstr "" + +#: utils/recfmt.c:170 +msgid "error evaluating expression in a template slot.\n" +msgstr "" + +#: utils/recfmt.c:204 +msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" +msgstr "" + +#. TRANSLATORS: --help output, recinf synopsis. +#. no-wrap +#: utils/recinf.c:84 +#, fuzzy, c-format +msgid "Usage: recinf [OPTION]... [FILE]...\n" +msgstr "Uso: rec2csv [OPCIONES]... [ARCHIVO_REC]\n" + +#. TRANSLATORS: --help output, recinf short description. +#. no-wrap +#: utils/recinf.c:89 +msgid "Print information about the types of records stored in the input.\n" +msgstr "" + +#. TRANSLATORS: --help output, recinf arguments. +#. no-wrap +#: utils/recinf.c:96 +msgid "" +" -t, --type=RECORD_TYPE print information on the records having " +"the\n" +" specified type.\n" +" -d, --descriptor include the full record descriptors.\n" +" -n, --names-only output just the names of the record files\n" +" found in the input.\n" +msgstr "" + +#. TRANSLATORS: --help output, recinf special options. +#. no-wrap +#: utils/recinf.c:109 +msgid "" +"Special options:\n" +" -S, --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" + +#: utils/recinf.c:263 +#, fuzzy, c-format +msgid "error: cannot read file %s\n" +msgstr "no se puede leer el archivo %s\n" + +#. TRANSLATORS: --help output, recins synopsis. +#. no-wrap +#: utils/recins.c:111 +#, fuzzy, c-format +msgid "" +"Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" +msgstr "" +"Uso: recdel [OPCIONES]... [-t TIPO] [-n NUM | -e EXPR_REGISTRO | -q STR | -m " +"NUM] [ARCHIVO]\n" + +#. TRANSLATORS: --help output, recins short description. +#. no-wrap +#: utils/recins.c:116 +#, fuzzy +msgid "Insert new records in a rec database.\n" +msgstr "Convertir datos csv en datos rec.\n" + +#. TRANSLATORS: --help output, recins arguments. +#. no-wrap +#: utils/recins.c:122 +#, fuzzy +msgid "" +" -f, --field=STR field name; should be followed by a -" +"v.\n" +" -v, --value=STR field value; should be preceded by an -" +"f.\n" +" -r, --record=STR record that will be inserted in the " +"file.\n" +" --force insert the record even if it is " +"violating\n" +" record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --no-auto don't insert auto generated fields.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -c, --comment comentar los registros coincidentes en " +"lugar de\n" +" eliminarlos.\n" +" --force eliminar incluso en situaciones " +"potencialmente peligrosas,\n" +" y si la eliminación está violando " +"las restricciones del registro.\n" +" --no-external no utilice descriptores externos.\n" +" --verbose dar un informe detallado si la " +"comprobación de\n" +" integridad falla.\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recins.c:136 +#, fuzzy +msgid "" +" -s, --password=STR encrypt confidential fields with the " +"given password.\n" +msgstr "" +"Opciones de Des/Encriptado:\n" +" -s, --password=CONTRASEÑA encripta /desencripta con esta " +"contraseña.\n" + +#: utils/recins.c:195 +msgid "a -f should be followed by a -v\n" +msgstr "" + +#: utils/recins.c:219 +msgid "a -v should be preceded by a -f\n" +msgstr "" + +#: utils/recins.c:244 utils/recsel.c:223 +msgid "more than one password was specified\n" +msgstr "" + +#: utils/recins.c:258 +#, fuzzy +msgid "error while parsing the record provided by -r\n" +msgstr "error al analizar el archivo CSV: %s\n" + +#: utils/recins.c:293 +#, c-format +msgid "please provide a value for the field %s\n" +msgstr "" + +#. TRANSLATORS: --help output, recsel synopsis. +#. no-wrap +#: utils/recsel.c:118 +#, fuzzy, c-format +msgid "" +"Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " +"| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" +msgstr "" +"Uso: recdel [OPCIONES]... [-t TIPO] [-n NUM | -e EXPR_REGISTRO | -q STR | -m " +"NUM] [ARCHIVO]\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:123 +#, fuzzy +msgid "Select and print rec data.\n" +msgstr "Convertir datos csv en datos rec.\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:129 +msgid "" +" -d, --include-descriptors print record descriptors along with " +"the matched\n" +" records.\n" +" -C, --collapse do not section the result in records " +"with newlines.\n" +" -S, --sort=FIELD,... sort the output by the specified " +"fields.\n" +" -G, --group-by=FIELD,... group records by the specified " +"fields.\n" +" -U, --uniq remove duplicated fields in the output " +"records.\n" +msgstr "" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recsel.c:141 +#, fuzzy +msgid "" +" -s, --password=STR decrypt confidential fields with the " +"given password.\n" +msgstr "" +"Opciones de Des/Encriptado:\n" +" -s, --password=CONTRASEÑA encripta /desencripta con esta " +"contraseña.\n" + +#: utils/recsel.c:150 +msgid "" +" -j, --join=FIELD perform an inner join using the " +"specified field.\n" +msgstr "" + +#. TRANSLATORS: --help output, recsel output options. +#. no-wrap +#: utils/recsel.c:157 +msgid "" +"Output options:\n" +" -p, --print=FIELDS comma-separated list of fields to " +"print for each\n" +" matching record.\n" +" -P, --print-values=FIELDS as -p, but print only the values of " +"the selected\n" +" fields.\n" +" -R, --print-row=FIELDS as -P, but separate the values with " +"spaces instead\n" +" of newlines.\n" +" -c, --count print a count of the matching records " +"instead of\n" +" the records themselves.\n" +msgstr "" + +#. TRANSLATORS: --help output, recsel special options. +#. no-wrap +#: utils/recsel.c:171 +msgid "" +"Special options:\n" +" --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" + +#: utils/recsel.c:235 +#, fuzzy +msgid "only one field list can be specified as a sorting criteria.\n" +msgstr "" +"sólo se puede especificar una lista de campos como criterio de ordenación.\n" + +#: utils/recsel.c:242 +#, fuzzy +msgid "invalid field names in -S.\n" +msgstr "lista de nombres de campos inválida en -S.\n" + +#: utils/recsel.c:258 +#, fuzzy +msgid "only one field can be specified as join criteria.\n" +msgstr "" +"sólo se puede especificar una lista de campos como criterio de ordenación.\n" + +#: utils/recsel.c:263 +#, fuzzy +msgid "please specify a correct field name to -j|--join.\n" +msgstr "por favor, especifique sólo una operación.\n" + +#: utils/recsel.c:274 +#, fuzzy +msgid "only one field list can be specified as a grouping criteria.\n" +msgstr "" +"sólo se puede especificar una lista de campos como criterio de ordenación.\n" + +#: utils/recsel.c:280 +#, fuzzy +msgid "invalid field names in -G.\n" +msgstr "lista de nombres de campos inválida en -S.\n" + +#: utils/recsel.c:300 +msgid "cannot specify -[pPR] and also -c.\n" +msgstr "" + +#: utils/recsel.c:317 +#, fuzzy, c-format +msgid "invalid list of fields in -%c\n" +msgstr "nombre de campo %s inválido.\n" + +#: utils/recsel.c:325 +#, fuzzy +msgid "internal error creating the field expression.\n" +msgstr "error interno creando fex.\n" + +#: utils/recsel.c:340 +#, c-format +msgid "invalid aggregate function '%s'\n" +msgstr "" + +#: utils/recsel.c:358 +msgid "cannot specify -c and also -p.\n" +msgstr "" + +#: utils/recsel.c:377 +msgid "joins can only be used when a named record set is selected.\n" +msgstr "" + +#: utils/recsel.c:439 +msgid "several record types found. Please use -t to specify one.\n" +msgstr "" + +#. TRANSLATORS: --help output, recset synopsis. +#. no-wrap +#: utils/recset.c:113 +#, fuzzy, c-format +msgid "Usage: recset [OPTION]... [FILE]...\n" +msgstr "Uso: rec2csv [OPCIONES]... [ARCHIVO_REC]\n" + +#. TRANSLATORS: --help output, recset short description. +#. no-wrap +#: utils/recset.c:118 +#, fuzzy +msgid "Alter or delete fields in records.\n" +msgstr "%s:%s: error: múltiples campos clave '%s' en el registro\n" + +#. TRANSLATORS: --help output, recset options. +#. no-wrap +#: utils/recset.c:124 +#, fuzzy +msgid "" +" --no-external don't use external descriptors.\n" +" --force alter the records even if violating " +"record\n" +" restrictions.\n" +msgstr "" +" --no-external no use descriptores externos.\n" +" --force forzar la operación solicitada.\n" + +#. TRANSLATORS: --help output, recset field selection options. +#. no-wrap +#: utils/recset.c:137 +msgid "" +"Field selection options:\n" +" -f, --fields=FIELDS comma-separated list of field names " +"with optional\n" +" subscripts.\n" +msgstr "" + +#. TRANSLATORS: --help output, recset actions. +#. no-wrap +#: utils/recset.c:145 +msgid "" +"Actions:\n" +" -s, --set=VALUE change the value of the selected " +"fields.\n" +" -a, --add=VALUE add the selected fields with the given " +"value.\n" +" -S, --set-add=VALUE change the value of the selected " +"fields. If they don't\n" +" exist then add a new field with that " +"value.\n" +" -r, --rename=NAME rename the selected fields to a given " +"name. If an entire\n" +" record set is selected then the " +"field is renamed in the\n" +" record descriptor as well.\n" +" -d, --delete delete the selected fields.\n" +" -c, --comment comment out the selected fields.\n" +msgstr "" + +#: utils/recset.c:168 +#, fuzzy +msgid "please specify some field with -f.\n" +msgstr "por favor, especifique sólo una operación.\n" + +#: utils/recset.c:173 +#, fuzzy +msgid "please specify just one action.\n" +msgstr "por favor, especifique sólo una operación.\n" + +#: utils/recset.c:213 +#, fuzzy +msgid "invalid field expression in -f.\n" +msgstr "expresión de selección no válida.\n" + +#: utils/recset.c:221 +#, fuzzy +msgid "creating the field expression.\n" +msgstr "Fin prematuro de expresión regular" + +#: utils/recset.c:243 +msgid "" +"the rename operation requires just one field with an optional subscript.\n" +msgstr "" + +#. TRANSLATORS: --help output 5+ (reports) +#. TRANSLATORS: the placeholder indicates the bug-reporting address +#. for this application. Please add _another line_ with the +#. address for translation bugs. +#. no-wrap +#: utils/recutl.c:122 +#, c-format +msgid "Report bugs to: %s\n" +msgstr "" + +#: utils/recutl.c:131 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" +msgstr "" + +#: utils/recutl.c:134 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#. TRANSLATORS: --help output, common arguments. +#. no-wrap +#: utils/recutl.c:143 +#, fuzzy +msgid "" +" --help print a help message and exit.\n" +" --version show version and exit.\n" +msgstr "" +" --no-external no use descriptores externos.\n" +" --force forzar la operación solicitada.\n" + +#. TRANSLATORS: --help output, record selection arguments +#. no-wrap +#: utils/recutl.c:154 +msgid "" +"Record selection options:\n" +" -i, --case-insensitive make strings case-insensitive in " +"selection\n" +" expressions.\n" +" -t, --type=TYPE operate on records of the specified " +"type only.\n" +" -e, --expression=RECORD_EXPR selection expression.\n" +" -q, --quick=STR select records with fields containing " +"a string.\n" +" -n, --number=NUM,... select specific records by position, " +"with ranges.\n" +" -m, --random=NUM select a given number of random " +"records.\n" +msgstr "" + +#: utils/recutl.c:179 +#, c-format +msgid "" +"Copyright (C) %s Jose E. Marchesi.\n" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +msgstr "" + +#: utils/recutl.c:185 +msgid "" +"\n" +"Written by Jose E. Marchesi." +msgstr "" + +#: utils/recutl.c:197 utils/recutl.c:217 +#, fuzzy +msgid ": error: " +msgstr "error de escritura" + +#: utils/recutl.c:229 +msgid ": warning: " +msgstr "" + +#: utils/recutl.c:254 +#, c-format +msgid "duplicated record set '%s' from %s.\n" +msgstr "" + +#: utils/recutl.c:417 +#, fuzzy +msgid "cannot create a unique name.\n" +msgstr "no se puede leer el archivo %s\n" + +#: utils/recutl.c:438 +#, c-format +msgid "renaming file %s to %s\n" +msgstr "" + +#: utils/recutl.c:482 +msgid "operation aborted due to integrity failures.\n" +msgstr "" + +#: utils/recutl.c:483 +msgid "use --verbose to get a detailed report.\n" +msgstr "" + +#: utils/recutl.c:490 +msgid "use --force to skip the integrity check.\n" +msgstr "" + +#: utils/recutl.c:551 +#, fuzzy +msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" +msgstr "" +"error interno: rec_int_rec_extract_url: error compilando expresión regular.\n" + +#: utils/recutl.c:626 +msgid "Password: " +msgstr "" + +#: utils/recutl.c:632 +msgid "Password again: " +msgstr "" + +#: utils/recutl.c:637 +msgid "the provided passwords don't match.\n" +msgstr "" + +#: utils/recutl.h:97 utils/recutl.h:186 utils/recutl.h:190 +msgid "cannot specify -e and also -n\n" +msgstr "" + +#: utils/recutl.h:102 +msgid "cannot specify -e and also -q\n" +msgstr "" + +#: utils/recutl.h:113 +#, fuzzy +msgid "invalid selection expression\n" +msgstr "expresión de selección no válida.\n" + +#: utils/recutl.h:125 +msgid "cannot specify -n and also -e\n" +msgstr "" + +#: utils/recutl.h:130 +msgid "cannot specify -n and also -q\n" +msgstr "" + +#: utils/recutl.h:140 +#, fuzzy +msgid "invalid list of indexes in -n\n" +msgstr "nombre de campo %s inválido.\n" + +#: utils/recutl.h:150 +msgid "cannot specify -m and also -e\n" +msgstr "" + +#: utils/recutl.h:155 +msgid "cannot specify -m and also -q\n" +msgstr "" + +#: utils/recutl.h:160 +msgid "cannot specify -m and also -n\n" +msgstr "" + +#~ msgid "%s: option '--%s' doesn't allow an argument\n" +#~ msgstr "%s: la opción '--%s' no admite ningún argumento\n" + +#~ msgid "%s: unrecognized option '--%s'\n" +#~ msgstr "%s: no se reconoce la opción '--%s'\n" + +#~ msgid "%s: option '-W %s' doesn't allow an argument\n" +#~ msgstr "%s: la opción '-W %s' no admite ningún argumento\n" + +#~ msgid "%s: option '-W %s' requires an argument\n" +#~ msgstr "%s: la opción '-W %s' requiere un argumento\n" diff --git a/devspec.en_US/project/recutils/po/fi.gmo b/devspec.en_US/project/recutils/po/fi.gmo new file mode 100755 index 0000000000000000000000000000000000000000..1d6a91dc8a9b61b5c2861e04285f80c3c36cd689 GIT binary patch literal 35172 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 literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/po/fi.po b/devspec.en_US/project/recutils/po/fi.po new file mode 100755 index 0000000..0bfe69b --- /dev/null +++ b/devspec.en_US/project/recutils/po/fi.po @@ -0,0 +1,2164 @@ +# Finnish messages for recutils. +# Copyright © 2011, 2012, 2013, 2014 Free Software Foundation, Inc. +# Copyright © 2010 Jose E. Marchesi (msgids) +# This file is distributed under the same license as the recutils package. +# Jorma Karvonen <karvonen.jorma@gmail.com>, 2011-2014. +# +msgid "" +msgstr "" +"Project-Id-Version: GNU recutils 1.6.90\n" +"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" +"POT-Creation-Date: 2019-01-03 10:32+0100\n" +"PO-Revision-Date: 2014-04-18 12:00+0200\n" +"Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com>\n" +"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: lib/closeout.c:122 +msgid "write error" +msgstr "kirjoitusvirhe" + +#: lib/copy-acl.c:54 +#, c-format +msgid "preserving permissions for %s" +msgstr "" + +#: lib/error.c:195 +msgid "Unknown system error" +msgstr "Tuntematon järjestelmävirhe" + +#: lib/execute.c:185 lib/execute.c:258 lib/wait-process.c:282 +#: lib/wait-process.c:356 +#, c-format +msgid "%s subprocess failed" +msgstr "%s aliprosessi epäonnistui" + +#: lib/getopt.c:278 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous\n" +msgstr "%s: valitsin ’-W %s’ ei ole yksiselitteinen\n" + +#: lib/getopt.c:284 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous; possibilities:" +msgstr "%s: valitsin ’%s’ ei ole yksiselitteinen; mahdollisuudet:" + +#: lib/getopt.c:319 +#, fuzzy, c-format +msgid "%s: unrecognized option '%s%s'\n" +msgstr "%s: tunnistamaton valitsin ’%c%s’\n" + +#: lib/getopt.c:345 +#, fuzzy, c-format +msgid "%s: option '%s%s' doesn't allow an argument\n" +msgstr "%s: valitsin ’%c%s’ ei salli argumenttia\n" + +#: lib/getopt.c:360 +#, fuzzy, c-format +msgid "%s: option '%s%s' requires an argument\n" +msgstr "%s: valitsin ’--%s’ vaatii argumentin\n" + +#: lib/getopt.c:621 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: virheellinen valitsin -- ’%c’\n" + +#: lib/getopt.c:636 lib/getopt.c:682 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: valitsin vaatii argumentin -- ’%c’\n" + +#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "muisti loppui" + +#: parse-datetime.y:440 parse-datetime.y:540 +#, c-format +msgid "parsed %s part: " +msgstr "" + +#: parse-datetime.y:455 +#, c-format +msgid "year: %04<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:483 +#, c-format +msgid "%s (day ordinal=%<PRIdMAX> number=%d)" +msgstr "" + +#: parse-datetime.y:514 +#, c-format +msgid "number of seconds: %<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:547 +msgid "today/this/now\n" +msgstr "" + +#: parse-datetime.y:612 +msgid "number of seconds" +msgstr "" + +#: parse-datetime.y:625 +msgid "datetime" +msgstr "" + +#: parse-datetime.y:630 +msgid "time" +msgstr "" + +#: parse-datetime.y:635 +msgid "local_zone" +msgstr "" + +#: parse-datetime.y:640 +msgid "zone" +msgstr "" + +#: parse-datetime.y:645 +msgid "date" +msgstr "" + +#: parse-datetime.y:650 +msgid "day" +msgstr "" + +#: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 +msgid "relative" +msgstr "" + +#: parse-datetime.y:658 +msgid "number" +msgstr "" + +#: parse-datetime.y:662 +msgid "hybrid" +msgstr "" + +#: parse-datetime.y:820 +#, c-format +msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" +msgstr "" + +#: parse-datetime.y:832 +#, c-format +msgid "" +"warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" +msgstr "" + +#: parse-datetime.y:1276 +#, c-format +msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1286 +#, c-format +msgid "error: out-of-range year %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1524 +#, fuzzy, c-format +msgid "error: unknown word '%s'\n" +msgstr "virhe: tiedoston %s lukeminen epäonnistui\n" + +#: parse-datetime.y:1673 +#, fuzzy +msgid "error: invalid date/time value:\n" +msgstr "virheellinen enumeraatioarvo." + +#: parse-datetime.y:1674 +#, c-format +msgid " user provided time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1676 +#, c-format +msgid " normalized time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1699 +msgid " possible reasons:\n" +msgstr "" + +#: parse-datetime.y:1701 +msgid " non-existing due to daylight-saving time;\n" +msgstr "" + +#: parse-datetime.y:1703 +msgid " invalid day/month combination;\n" +msgstr "" + +#: parse-datetime.y:1704 +msgid " numeric values overflow;\n" +msgstr "" + +#: parse-datetime.y:1705 +msgid "incorrect timezone" +msgstr "" + +#: parse-datetime.y:1706 +msgid "missing timezone" +msgstr "" + +#: parse-datetime.y:1826 +msgid "error: initial year out of range\n" +msgstr "" + +#: parse-datetime.y:1923 +#, fuzzy +msgid "error: parsing failed\n" +msgstr "virhe jäsennettäessä CSV-tiedostoa: %s\n" + +#: parse-datetime.y:1924 +#, fuzzy, c-format +msgid "error: parsing failed, stopped at '%s'\n" +msgstr "virhe jäsennettäessä CSV-tiedostoa: %s\n" + +#: parse-datetime.y:1934 +msgid "input timezone: " +msgstr "" + +#: parse-datetime.y:1937 +#, c-format +msgid "'@timespec' - always UTC" +msgstr "" + +#: parse-datetime.y:1939 +#, c-format +msgid "parsed date/time string" +msgstr "" + +#: parse-datetime.y:1943 +#, c-format +msgid "TZ=\"%s\" in date string" +msgstr "" + +#: parse-datetime.y:1947 +#, c-format +msgid "TZ=\"UTC0\" environment value or -u" +msgstr "" + +#: parse-datetime.y:1950 +#, c-format +msgid "TZ=\"%s\" environment value" +msgstr "" + +#: parse-datetime.y:1953 +#, c-format +msgid "system default" +msgstr "" + +#: parse-datetime.y:1995 +msgid "error: year, month, or day overflow\n" +msgstr "" + +#: parse-datetime.y:2006 +#, fuzzy, c-format +msgid "error: invalid hour %<PRIdMAX>%s\n" +msgstr "%s:%s: virhe: väärä tietuetyyppi %s\n" + +#: parse-datetime.y:2014 +#, c-format +msgid "using specified time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2015 +#, c-format +msgid "using current time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2069 +#, c-format +msgid "error: tzalloc (\"%s\") failed\n" +msgstr "" + +#: parse-datetime.y:2114 +#, c-format +msgid "" +"error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " +"date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2125 +#, c-format +msgid "new start date: '%s' is '%s'\n" +msgstr "" + +#: parse-datetime.y:2134 +#, c-format +msgid "using current date as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2138 +#, c-format +msgid "warning: day (%s) ignored when explicit dates are given\n" +msgstr "" + +#: parse-datetime.y:2142 +#, c-format +msgid "starting date/time: '%s'\n" +msgstr "" + +#: parse-datetime.y:2152 +msgid "" +"warning: when adding relative months/years, it is recommended to specify the " +"15th of the months\n" +msgstr "" + +#: parse-datetime.y:2157 +msgid "warning: when adding relative days, it is recommended to specify noon\n" +msgstr "" + +#: parse-datetime.y:2167 +#, fuzzy, c-format +msgid "error: %s:%d\n" +msgstr ": virhe: " + +#: parse-datetime.y:2181 +#, c-format +msgid "error: adding relative date resulted in an invalid date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2190 +#, c-format +msgid "" +"after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " +"days),\n" +msgstr "" + +#: parse-datetime.y:2194 +#, c-format +msgid " new date/time = '%s'\n" +msgstr "" + +#: parse-datetime.y:2213 +msgid "warning: daylight saving time changed after date adjustment\n" +msgstr "" + +#: parse-datetime.y:2232 +msgid "warning: month/year adjustment resulted in shifted dates:\n" +msgstr "" + +#: parse-datetime.y:2235 +#, c-format +msgid " adjusted Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2237 +#, c-format +msgid " normalized Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2265 +#, c-format +msgid "error: timezone %d caused time_t overflow\n" +msgstr "" + +#: parse-datetime.y:2275 +#, c-format +msgid "'%s' = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2303 +msgid "error: adding relative time caused an overflow\n" +msgstr "" + +#: parse-datetime.y:2314 +#, c-format +msgid "" +"after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " +"seconds, %+d ns),\n" +msgstr "" + +#: parse-datetime.y:2319 +#, c-format +msgid " new time = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2335 +msgid "warning: daylight saving time changed after time adjustment\n" +msgstr "" + +#: parse-datetime.y:2345 +msgid "timezone: system default\n" +msgstr "" + +#: parse-datetime.y:2347 +msgid "timezone: Universal Time\n" +msgstr "" + +#: parse-datetime.y:2349 +#, c-format +msgid "timezone: TZ=\"%s\" environment value\n" +msgstr "" + +#: parse-datetime.y:2353 +#, c-format +msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" +msgstr "" + +#: parse-datetime.y:2359 +#, c-format +msgid "final: %s (UTC)\n" +msgstr "" + +#: parse-datetime.y:2374 +#, c-format +msgid "final: %s (UTC%s)\n" +msgstr "" + +#: parse-datetime.y:2378 +#, c-format +msgid "final: %s (unknown time zone offset)\n" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". For example, a French Unicode local should translate +#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), respectively. +#. +#. If the catalog has no translation, we will try to +#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and +#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the +#. current locale is not Unicode, locale_quoting_style +#. will quote 'like this', and clocale_quoting_style will +#. quote "like this". You should always include translations +#. for "`" and "'" even if U+2018 and U+2019 are appropriate +#. for your locale. +#. +#. If you don't know what to put here, please see +#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:362 +msgid "`" +msgstr "”" + +#: lib/quotearg.c:363 +msgid "'" +msgstr "”" + +#: lib/regcomp.c:135 +msgid "Success" +msgstr "Onnistui" + +#: lib/regcomp.c:138 +msgid "No match" +msgstr "Ei täsmää" + +#: lib/regcomp.c:141 +msgid "Invalid regular expression" +msgstr "Virheellinen säännöllinen lauseke" + +#: lib/regcomp.c:144 +msgid "Invalid collation character" +msgstr "Virheellinen lajittelumerkki" + +#: lib/regcomp.c:147 +msgid "Invalid character class name" +msgstr "Virheellinen merkkiluokkanimi" + +#: lib/regcomp.c:150 +msgid "Trailing backslash" +msgstr "Jäljessä oleva kenoviiva" + +#: lib/regcomp.c:153 +msgid "Invalid back reference" +msgstr "Virheellinen paluuviite" + +#: lib/regcomp.c:156 +#, fuzzy +msgid "Unmatched [, [^, [:, [., or [=" +msgstr "Pariton [ tai [^" + +#: lib/regcomp.c:159 +msgid "Unmatched ( or \\(" +msgstr "Pariton ( tai \\(" + +#: lib/regcomp.c:162 +msgid "Unmatched \\{" +msgstr "Pariton \\{" + +#: lib/regcomp.c:165 +msgid "Invalid content of \\{\\}" +msgstr "Virheellinen \\{\\}-sisältö" + +#: lib/regcomp.c:168 +msgid "Invalid range end" +msgstr "virheellinen lukualueen loppu" + +#: lib/regcomp.c:171 +msgid "Memory exhausted" +msgstr "Muisti loppui" + +#: lib/regcomp.c:174 +msgid "Invalid preceding regular expression" +msgstr "Virheellinen edeltävä säännöllinen lauseke" + +#: lib/regcomp.c:177 +msgid "Premature end of regular expression" +msgstr "Säännöllisen lausekkeen ennenaikainen loppu" + +#: lib/regcomp.c:180 +msgid "Regular expression too big" +msgstr "Säännöllinen lauseke on liian iso" + +#: lib/regcomp.c:183 +msgid "Unmatched ) or \\)" +msgstr "Pariton ) tai \\)" + +#: lib/regcomp.c:676 +msgid "No previous regular expression" +msgstr "Ei edellistä säännöllistä lauseketta" + +#: lib/set-acl.c:46 +#, c-format +msgid "setting permissions for %s" +msgstr "" + +#: lib/version-etc.c:73 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:76 +#, c-format +msgid "Packaged by %s\n" +msgstr "" + +#. TRANSLATORS: Translate "(C)" to the copyright symbol +#. (C-in-a-circle), if this symbol is available in the user's +#. locale. Otherwise, do not translate "(C)"; leave it as-is. +#: lib/version-etc.c:83 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:85 +#, fuzzy +msgid "" +"\n" +"License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +"\n" +msgstr "" +"Copyright © %s Jose E. Marchesi.\n" +"License GPLv3+: GNU GPL versio 3 tai myöhäisempi <http://gnu.org/licenses/" +"gpl.html>.\n" +"Tämä on vapaa ohjelmisto: voi muuttaa ja jakaa sitä vapaasti edelleen.\n" +"Ohjelmalla EI OLE TAKUUTA siinä laajuudessa, minkä laki sallii.\n" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, fuzzy, c-format +msgid "Written by %s and %s.\n" +msgstr "" +"\n" +"Tekijä: Jose E. Marchesi." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, fuzzy, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "" +"\n" +"Tekijä: Jose E. Marchesi." + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:117 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" + +#. TRANSLATORS: The placeholder indicates the bug-reporting address +#. for this package. Please add _another line_ saying +#. "Report translation bugs to <...>\n" with the address for translation +#. bugs (typically your translation team's web or email address). +#: lib/version-etc.c:245 +#, fuzzy, c-format +msgid "" +"\n" +"Report bugs to: %s\n" +msgstr "" +"Ilmoita virheistä (englanniksi) osoitteeseen: %s\n" +"Ilmoita käännösvirheistä osoitteeseen <translation-team-fi@lists.sourceforge." +"net>\n" + +#: lib/version-etc.c:247 utils/recutl.c:125 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" +"Ilmoita %s-virheistä osoitteeseen: %s\n" +"Ilmoita käännösvirheistä osoitteeseen <translation-team-fi@lists.sourceforge." +"net>\n" + +#: lib/version-etc.c:251 utils/recutl.c:129 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s kotisivu: <%s>\n" + +#: lib/version-etc.c:253 +#, fuzzy, c-format +msgid "%s home page: <https://www.gnu.org/software/%s/>\n" +msgstr "%s kotisivu: <http://www.gnu.org/software/recutils/>\n" + +#: lib/version-etc.c:256 +#, fuzzy +msgid "General help using GNU software: <https://www.gnu.org/gethelp/>\n" +msgstr "" +"Yleinen opaste GNU-ohjelmistojen käytöstä: <http://www.gnu.org/gethelp/>\n" + +#: lib/w32spawn.h:49 +#, c-format +msgid "_open_osfhandle failed" +msgstr "_open_osfhandle epäonnistui" + +#: lib/w32spawn.h:90 +#, c-format +msgid "cannot restore fd %d: dup2 failed" +msgstr "ei voi palauttaa fd %d: dup2 epäonnistui" + +#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317 +#, c-format +msgid "%s subprocess" +msgstr "%s aliprosessi" + +#: lib/wait-process.c:274 lib/wait-process.c:346 +#, c-format +msgid "%s subprocess got fatal signal %d" +msgstr "%s aliprosessi sai kuolettavan signaalin %d" + +#: src/rec-fex.c:451 +#, c-format +msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" +msgstr "sisäinen virhe: REC_FEX_MAX_ELEMS ylitetty. Ilmoita tästä.\n" + +#: src/rec-int.c:176 +#, c-format +msgid "%s: error: the number of records of type %s should be %zd.\n" +msgstr "%s: virhe: tietuetyypin %s lukumäärän pitää olla %zd.\n" + +#: src/rec-int.c:186 +#, c-format +msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" +msgstr "" +"%s: virhe: liian monta %s-tyyppistä tietuetta. Sallitaan enintään %zd.\n" + +#: src/rec-int.c:193 +#, c-format +msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" +msgstr "" +"%s: virhe: liian vähän %s-tyyppisiä tietueita. Sallittu vähimmäismäärä on " +"%zd.\n" + +#: src/rec-int.c:409 src/rec-int.c:463 src/rec-int.c:520 src/rec-int.c:564 +#: utils/recutl.c:207 +msgid "out of memory\n" +msgstr "muisti loppui\n" + +#: src/rec-int.c:424 +#, c-format +msgid "%s:%s: error: mandatory field '%s' not found in record\n" +msgstr "%s:%s: virhe: pakollista kenttää ’%s’ ei löytynyt tietueesta\n" + +#: src/rec-int.c:487 +#, c-format +msgid "%s:%s: error: field '%s' not allowed in this record set\n" +msgstr "%s:%s: virhe: kenttä ’%s’ ei ole sallittu tässä tietuejoukossa\n" + +#: src/rec-int.c:534 +#, c-format +msgid "%s:%s: error: field '%s' should be unique in this record\n" +msgstr "%s:%s: virhe: kentän ’%s’ pitäisi olla uniikki tässä tietueessa\n" + +#: src/rec-int.c:578 +#, c-format +msgid "%s:%s: error: prohibited field '%s' found in record\n" +msgstr "%s:%s: virhe: kielletty kenttä ’%s’ löytyi tietueessa\n" + +#: src/rec-int.c:610 +#, c-format +msgid "%s:%s: error: %%constraint[%d] violated in record\n" +msgstr "%s:%s: virhe: %%constraint[%d]-sääntörikkomus tietueessa\n" + +#: src/rec-int.c:647 +#, c-format +msgid "%s:%s: error: confidential field is not encrypted\n" +msgstr "%s:%s: virhe: luottamuksellinen kenttä ei ole salattu\n" + +#: src/rec-int.c:699 +#, c-format +msgid "%s:%s: error: key field '%s' not found in record\n" +msgstr "%s:%s: virhe: avainkenttää ’%s’ ei löytynyt tietueesta\n" + +#: src/rec-int.c:708 +#, c-format +msgid "%s:%s: error: multiple key fields '%s' in record\n" +msgstr "%s:%s: virhe: useita avainkenttiä ’%s’ tietueessa\n" + +#: src/rec-int.c:751 +#, c-format +msgid "%s:%s: error: duplicated key value in field '%s' in record\n" +msgstr "%s:%s: virhe: kaksoiskappale avainarvo tietueen kentässä ’%s’\n" + +#: src/rec-int.c:799 +#, c-format +msgid "%s:%s: error: missing %%rec field in record descriptor\n" +msgstr "%s:%s: virhe: puuttuva %%rec-kenttä tietueselosteessa\n" + +#: src/rec-int.c:807 +#, c-format +msgid "%s:%s: error: too many %%rec fields in record descriptor\n" +msgstr "%s:%s: virhe: liian monia %%rec-kenttiä tietueselosteessa\n" + +#: src/rec-int.c:817 +#, c-format +msgid "%s:%s: error: invalid record type %s\n" +msgstr "%s:%s: virhe: väärä tietuetyyppi %s\n" + +#: src/rec-int.c:828 +#, c-format +msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" +msgstr "%s:%s: virhe: vain yksi %%key-kenttä sallitaan tietueselosteessa\n" + +#: src/rec-int.c:838 +#, c-format +msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" +msgstr "%s:%s: virhe: vain yksi %%size-kenttä sallitaan tietueselosteessa\n" + +#: src/rec-int.c:848 +#, c-format +msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" +msgstr "%s:%s: virhe: vain yksi %%sort-kenttä sallitaan tietueselosteessa\n" + +#: src/rec-int.c:871 +#, c-format +msgid "" +"%s:%s: error: expected a comma-separated list of fields before the type " +"specification\n" +msgstr "" +"%s:%s: virhe: odotettiin pilkulla eroteltua kenttien luetteloa ennen " +"tyyppimäärittelyä\n" + +#: src/rec-int.c:897 src/rec-int.c:950 +#, c-format +msgid "%s:%s: error: the referred type %s does not exist\n" +msgstr "%s:%s: virhe: viitattu tyyppi %s ei ole olemassa\n" + +#: src/rec-int.c:909 +#, c-format +msgid "%s:%s: error: invalid type specification\n" +msgstr "%s:%s: virhe: virheellinen tyyppimäärittely\n" + +#: src/rec-int.c:924 +#, c-format +msgid "%s:%s: error: expected a type name before the type specification\n" +msgstr "%s:%s: virhe: odotettiin tyyppinimeä ennen tyyppimäärittelyä\n" + +#: src/rec-int.c:962 +#, c-format +msgid "%s:%s: error: invalid typedef specification\n" +msgstr "%s:%s: virhe: virheellinen typedef-määrittely\n" + +#: src/rec-int.c:984 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" +msgstr "" +"%s:%s: virhe: arvo kohteelle %s[%zd] ei ole kelvollinen valintalauseke\n" + +#: src/rec-int.c:1015 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" +msgstr "%s:%s: virhe: arvo kohteelle %s[%zd] ei ole kenttänimien luettelo\n" + +#: src/rec-int.c:1028 +#, c-format +msgid "" +"%s:%s: error: value for %s should be a number optionally preceded by >, <, " +">= or <=.\n" +msgstr "" +"%s:%s: virhe: arvon %s pitäisi olla numero, jota valinnaisesti edeltää >, <, " +">= tai <=.\n" + +#: src/rec-int.c:1044 +#, c-format +msgid "%s:%s: error: value for %s should be a list of field names.\n" +msgstr "%s:%s: virhe: arvon kohteelle %s olisi oltava kenttänimien luettelo.\n" + +#: src/rec-int.c:1072 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range, uuid " +"or date\n" +msgstr "" +"%s:%s: virhe: automaattisen askelkasvatuskentän %s pitäisi olla tyyppiä " +"kokonaisluku, lukualue, uuid tai päivämäärä\n" + +#: src/rec-int.c:1074 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range or " +"date\n" +msgstr "" +"%s:%s: virhe: automaattisen askelkasvatuskentän %s pitäisi olla tyyppiä " +"kokonaisluku, lukualue tai päivämäärä\n" + +#: src/rec-int.c:1157 +#, c-format +msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" +msgstr "%s:%s: virhe: etäselosteen nouto verkko-osoitteesta %s epäonnistui.\n" + +#: src/rec-int.c:1176 +#, c-format +msgid "%s:%s: error: could not read external descriptor from file %s.\n" +msgstr "" +"%s:%s: virhe: ulkoisen selosteen lukemien tiedostosta %s epäonnistui.\n" + +#: src/rec-int.c:1191 +#, c-format +msgid "%s:%s: error: %s does not contain valid rec data.\n" +msgstr "%s:%s: virhe: verkko-osoite %s ei sisällä kelvollista rec-tietoa.\n" + +#: src/rec-int.c:1205 +#, c-format +msgid "%s:%s: error: %s does not contain information for type %s.\n" +msgstr "%s:%s: virhe: verkko-osoite %s ei sisällä tietoa tyypille %s.\n" + +#: src/rec-types.c:448 +#, c-format +msgid "" +"internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " +"in rec_type_new().\n" +msgstr "" +"sisäinen virhe: rec-tyypit: saatiin REC_TYPE_NONE funktiosta " +"rec_type_parse_type_kind() funktiossa rec_type_new().\n" + +#: src/rec-types.c:1178 +msgid "invalid integer." +msgstr "virheellinen kokonaisluku." + +#: src/rec-types.c:1208 +msgid "invalid 'field' value." +msgstr "virheellinen ’field’-arvo." + +#: src/rec-types.c:1231 +msgid "invalid 'uuid' value." +msgstr "virheellinen ’uuid’-arvo." + +#: src/rec-types.c:1249 +msgid "invalid 'bool' value." +msgstr "virheellinen ’bool’-arvo." + +#: src/rec-types.c:1272 +msgid "invalid 'range' value." +msgstr "virheellinen ’range’-alue." + +#: src/rec-types.c:1281 +#, c-format +msgid "expected an integer between %d and %d." +msgstr "odotettiin kokonaislukua väliltä %d ... %d." + +#: src/rec-types.c:1302 +msgid "invalid 'real' value." +msgstr "virheellinen ’real’-arvo." + +#: src/rec-types.c:1320 +#, c-format +msgid "value too large. Expected a size <= %zu." +msgstr "arvo on liian iso. Odotettiin kokoa <= %zu." + +#: src/rec-types.c:1341 +msgid "invalid 'line' value." +msgstr "virheellinen ’line’-arvo." + +#: src/rec-types.c:1360 +msgid "value does not match the regexp." +msgstr "arvo ei täsmää säännöllisessä lausekkeessa." + +#: src/rec-types.c:1383 +msgid "invalid date." +msgstr "virheellinen päivämäärä." + +#: src/rec-types.c:1399 +msgid "invalid email." +msgstr "virheellinen sähköpostiosoite." + +#: src/rec-types.c:1444 +msgid "invalid enum value." +msgstr "virheellinen enumeraatioarvo." + +#: src/rec-utils.c:93 +#, c-format +msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" +msgstr "" +"sisäinen virhe: rec_int_rec_extract_file: virhe käännettäessä säännöllistä " +"lauseketta.\n" + +#: src/rec-utils.c:121 src/rec-utils.c:150 +#, c-format +msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" +msgstr "" +"sisäinen virhe: rec_int_rec_extract_url: virhe käännettäessä säännöllistä " +"lauseketta.\n" + +#: src/rec-utils.c:304 +#, c-format +msgid "internal error: rec_match: error compiling regexp.\n" +msgstr "" +"sisäinen virhe: rec_match: virhe käännettäessä säännöllistä lauseketta.\n" + +#. TRANSLATORS: --help output, csv2rec synopsis. +#. no-wrap +#: utils/csv2rec.c:105 +#, c-format +msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" +msgstr "Käyttö: csv2rec [VALITSIMET]... [CSV_TIEDOSTO]\n" + +#. TRANSLATORS: --help output, csv2rec short description. +#. no-wrap +#: utils/csv2rec.c:110 +msgid "Convert csv data into rec data.\n" +msgstr "Muunna csv-tietoa rec-tiedoksi.\n" + +#. TRANSLATORS: --help output, csv2rec options. +#. no-wrap +#: utils/csv2rec.c:116 +msgid "" +" -t, --type=TYPE type name for the converted records; " +"if this\n" +" parameter is ommited then no type is " +"used.\n" +" -s, --strict be strict parsing the csv file.\n" +" -e, --omit-empty omit empty fields.\n" +msgstr "" +" -t, --type=TYYPPI Muunnettujen tietueiden tyyppinimi. " +"Jos tämä\n" +" parametri ohitetaan, mitään tyyppiä " +"ei käytetä.\n" +" -s, --strict Noudata tiukkaa jäsennystä csv-" +"tiedostossa.\n" +" -e, --omit-empty Ohita tyhjät kentät.\n" + +#: utils/csv2rec.c:230 +#, c-format +msgid "invalid field name '%s' in header\n" +msgstr "virheellinen kenttänimi ’%s’ otsakkeessa\n" + +#: utils/csv2rec.c:259 +#, fuzzy, c-format +msgid "" +"%s: %lu: this line contains %lu fields, but %lu header fields were read\n" +msgstr "" +"%s: %d: tämä rivi sisältää %d kenttää, mutta %d -otsakekenttää luettiin\n" + +#: utils/csv2rec.c:347 utils/recdel.c:266 utils/recset.c:358 utils/recutl.c:328 +#, c-format +msgid "cannot read file %s\n" +msgstr "tiedoston %s lukeminen epäonnistui\n" + +#: utils/csv2rec.c:358 +msgid "failed to initialize csv parser\n" +msgstr "csv-jäsentimen alustus epäonnistui\n" + +#: utils/csv2rec.c:376 +#, c-format +msgid "error while parsing CSV file: %s\n" +msgstr "virhe jäsennettäessä CSV-tiedostoa: %s\n" + +#. TRANSLATORS: --help output, mdb2rec synopsis. +#. no-wrap +#: utils/mdb2rec.c:103 +#, c-format +msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" +msgstr "Käyttö: mdb2rec [VALITSIMET]... MDB_TIEDOSTO [TAULU]\n" + +#. TRANSLATORS: --help output, mdb2rec short description. +#. no-wrap +#: utils/mdb2rec.c:108 +msgid "Convert an mdb file into a rec file.\n" +msgstr "Muunna mdb-tiedosto rec-tiedostoksi.\n" + +#. TRANSLATORS: --help output, mdb2rec options. +#. no-wrap +#: utils/mdb2rec.c:114 +msgid "" +" -s, --system-tables include system tables.\n" +" -e, --keep-empty-fields don't prune empty fields in the rec\n" +" output.\n" +" -l, --list-tables dump a list of the table names " +"contained\n" +" in the mdb file.\n" +msgstr "" +" -s, --system-tables sisällytä järjestelmätaulut.\n" +" -e, --keep-empty-fields älä karsi tyhjiä kenttiä rec-\n" +" tulosteesta\n" +" -l, --list-tables vedosta mbd-tiedostoon sisältyvä " +"taulu-\n" +" nimien luettelo\n" + +#: utils/mdb2rec.c:251 utils/mdb2rec.c:315 +#, c-format +msgid "failed to normalise record type name %s\n" +msgstr "tietuetyypin nimen %s normalisointi epäonnistui\n" + +#: utils/mdb2rec.c:259 utils/mdb2rec.c:270 +#, c-format +msgid "failed to normalise field name %s\n" +msgstr "kenttänimen %s normalisointi epäonnistui\n" + +#: utils/mdb2rec.c:336 +#, c-format +msgid "failed to normalise the field name %s\n" +msgstr "kenttänimen %s normalisointi epäonnistui\n" + +#: utils/mdb2rec.c:443 utils/recins.c:208 utils/recset.c:253 +#, c-format +msgid "invalid field name %s.\n" +msgstr "virheellinen kenttänimi %s.\n" + +#: utils/mdb2rec.c:482 +#, c-format +msgid "could not open file %s\n" +msgstr "tiedoston %s avaus epäonnistui\n" + +#: utils/mdb2rec.c:489 +msgid "file does not appear to be an Access database\n" +msgstr "tiedosto ei näytä olevan Access-tietokanta\n" + +#. TRANSLATORS: --help output, rec2csv synopsis. +#. no-wrap +#: utils/rec2csv.c:86 +#, c-format +msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" +msgstr "Käyttö: rec2csv [VALITSIMET]... [REC_TIEDOSTO]\n" + +#. TRANSLATORS: --help output, rec2csv short description. +#. no-wrap +#: utils/rec2csv.c:91 +msgid "Convert rec data into csv data.\n" +msgstr "Muunna rec-tietoa csv-tiedoksi.\n" + +#. TRANSLATORS: --help output, rec2csv options. +#. no-wrap +#: utils/rec2csv.c:97 +msgid "" +" -d, --delim=char sets the deliminator (default ',')\n" +" -t, --type=TYPE record set to convert to csv; if this " +"parameter\n" +" is omitted then the default record " +"set is used\n" +" -S, --sort=FIELDS sort the output by the specified " +"fields.\n" +msgstr "" +" -d, --delim=merkki asettaa rajoittimen (oletus ’,’)\n" +" -t, --type=TYYPPI csv-muotoon muunnettava tietuejoukko. " +"Jos tämä parametri\n" +" ohitetaan, käytetään " +"oletustietuejoukkoa\n" +" -S, --sort=KENTÄT lajittele tuloste määritellyn kentän " +"mukaan.\n" + +#: utils/rec2csv.c:142 +msgid "only one list of fields can be specified as a sorting criteria.\n" +msgstr "vain yksi kenttien luettelo voidaan määritellä lajittelukriteerinä.\n" + +#: utils/rec2csv.c:149 +msgid "invalid field name list in -S.\n" +msgstr "virheellinen kenttänimiluettelo valitsimelle -S.\n" + +#: utils/rec2csv.c:155 utils/recsel.c:248 utils/recsel.c:286 +msgid "internal error creating fex.\n" +msgstr "sisäinen virhe luotaessa kohdetta fex.\n" + +#. TRANSLATORS: --help output, recdel synopsis. +#. no-wrap +#: utils/recdel.c:89 +#, c-format +msgid "" +"Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [FILE]\n" +msgstr "" +"Käyttö: recdel [VALITSIMET]... [-t TYYPPI] [-n NUMERO | -e TIETUE_LAUSEKE | -" +"q MERKKIJONO | -m NUMERO] [TIEDOSTO]\n" + +#. TRANSLATORS: --help output, recdel short description. +#. no-wrap +#: utils/recdel.c:94 +msgid "Remove (or comment out) records from a rec file.\n" +msgstr "Poista (tai muuta kommenteiksi) rec-tiedoston tietueita.\n" + +#. TRANSLATORS: --help output, recdel arguments. +#. no-wrap +#: utils/recdel.c:101 +msgid "" +" -c, --comment comment out the matching records " +"instead of\n" +" deleting them.\n" +" --force delete even in potentially dangerous " +"situations,\n" +" and if the deletion is violating " +"record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -c, --comment muuta täsmäävät tietueet kommenteiksi " +"sen sijaan että\n" +" ne poistettaisiin.\n" +" --force poista myös potentiaalisesti " +"vaarallisissa tilanteissa, ja\n" +" jos poistaminen on ristiriidassa " +"tietuerajoitusten kanssa.\n" +" --no-external älä käytä ulkoisia selosteita.\n" +" --verbose anna yksityiskohtainen ilmoitus, jos " +"integriteetti-\n" +" tarkistus epäonnistuu.\n" + +#. TRANSLATORS: --help output, notes on recdel. +#. no-wrap +#. TRANSLATORS: --help output, notes on recfix. +#. no-wrap +#. TRANSLATORS: --help output, notes on recins. +#. no-wrap +#: utils/recdel.c:119 utils/recfix.c:167 utils/recins.c:149 +msgid "" +"If no FILE is specified then the command acts like a filter, getting\n" +"the data from standard input and writing the result to standard output.\n" +msgstr "" +"Jos TIEDOSTOa ei ole määritelty, silloin komento toimii kuin suodatin " +"hakien\n" +"tietoja vakiosyötteestä ja kirjoittaen tuloksen vakiotulosteeseen.\n" + +#: utils/recdel.c:136 +#, c-format +msgid "no records of type %s found.\n" +msgstr "%s-tyyppisiä tietueita ei löytynyt.\n" + +#: utils/recdel.c:227 +#, c-format +msgid "ignoring a request to delete all records of type %s.\n" +msgstr "ohitetaan pyyntö poistaa kaikki %s-tyyppiset tietueet.\n" + +#: utils/recdel.c:229 +msgid "use --force if you really want to proceed, or use either -n or -e.\n" +msgstr "" +"käytä valitsinta --force jos haluat todella jatkaa, tai käytä joko " +"valitsinta -n tai -e.\n" + +#: utils/recdel.c:237 +msgid "invalid selection expression.\n" +msgstr "virheellinen valintalauseke.\n" + +#: utils/recdel.c:276 utils/recfix.c:407 utils/recins.c:410 utils/recset.c:365 +#, c-format +msgid "file %s is not writable.\n" +msgstr "tiedosto %s on kirjoitussuojattu.\n" + +#. TRANSLATORS: --help output, recfix synopsis. +#. no-wrap +#: utils/recfix.c:117 +#, c-format +msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" +msgstr "" +"Käyttö: recfix [VALITSIN]... [TOIMINTO] [TOIMINTO_VALITSIN]... [TIEDOSTO]\n" + +#. TRANSLATORS: --help output, recfix short description. +#. no-wrap +#: utils/recfix.c:122 +msgid "Check and fix rec files.\n" +msgstr "Tarkista ja korjaa rec-tiedostot.\n" + +#. TRANSLATORS: --help output, recfix global arguments. +#. no-wrap +#: utils/recfix.c:129 +msgid "" +" --no-external don't use external descriptors.\n" +" --force force the requested operation.\n" +msgstr "" +" --no-external älä käytä ulkoisia kuvaajia.\n" +" --force poista jopa potentiaalisesti " +"vaarallisissa tilanteissa.\n" + +#. TRANSLATORS: --help output, recfix operations. +#. no-wrap +#: utils/recfix.c:139 +msgid "" +"Operations:\n" +" --check check integrity of the specified " +"file. Default.\n" +" --sort sort the records in the specified " +"file.\n" +" --auto insert auto-generated fields in " +"records missing them.\n" +msgstr "" +"Toiminnot:\n" +" --check tarkista määritellyn tiedosto " +"integriteetti. Oletus.\n" +" --sort lajittele tietueet määritellyssä " +"tiedostossa.\n" +" --auto lisää automaattisesti tuotetut kentät " +"tietueisiin, joista ne puuttuvat.\n" + +#. TRANSLATORS: --help output, recfix operations related with encryption. +#. no-wrap +#: utils/recfix.c:149 +msgid "" +" --encrypt encrypt confidential fields in the " +"specified file.\n" +" --decrypt decrypt confidential fields in the " +"specified file.\n" +msgstr "" +" --encrypt salaa luottamukselliset kentät " +"määritellyssä tiedostossa.\n" +" --decrypt pura luottamuksellisten kenttien " +"salaus määritellyssä tiedostossa.\n" + +#. TRANSLATORS: --help output, recfix encryption and decryption +#. options. +#. no-wrap +#: utils/recfix.c:158 +msgid "" +"De/Encryption options:\n" +" -s, --password=PASSWORD encrypt/decrypt with this password.\n" +msgstr "" +"Salauksen purku-/salausvalitsimet:\n" +" -s, --password=SALASANA salaa/pura salaus tällä salasanalla.\n" + +#: utils/recfix.c:208 +msgid "--password|-s must be used as an operation argument.\n" +msgstr "--password|-s on käytettävä toiminta-argumentteina.\n" + +#: utils/recfix.c:214 +msgid "the specified operation does not require a password.\n" +msgstr "määritelty toiminto ei vaadi salasanaa.\n" + +#: utils/recfix.c:219 +msgid "please specify just one password.\n" +msgstr "määritä vain yksi salasana.\n" + +#: utils/recfix.c:230 utils/recfix.c:240 utils/recfix.c:250 utils/recfix.c:261 +#: utils/recfix.c:271 +msgid "please specify just one operation.\n" +msgstr "määritä vain yksi toiminto.\n" + +#: utils/recfix.c:463 +msgid "the database contains already encrypted fields\n" +msgstr "tietokanta sisältää jo salattuja kenttiä\n" + +#: utils/recfix.c:464 +msgid "please use --force or --decrypt\n" +msgstr "käytä valitsimia --force tai --decrypt\n" + +#: utils/recfix.c:574 +msgid "unknown operation in recfix: please report this as a bug.\n" +msgstr "tuntematon toiminto kohteessa recfix: ilmoita tästä viasta.\n" + +#. TRANSLATORS: --help output, recfmt synopsis. +#. no-wrap +#: utils/recfmt.c:78 +#, c-format +msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" +msgstr "Käyttö: recfmt [VALITSIN]... [MALLINNE]\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:83 +msgid "Apply a template to records read from standard input.\n" +msgstr "Aseta mallinne tietuisiin, jotka on luettu vakiosyötteestä.\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:89 +msgid "" +" -f, --file=FILENAME read the template to apply from a " +"file.\n" +msgstr "" +" -f, --file=TIEDOSTONIMI lue mallinne, joka haettiin " +"tiedostosta.\n" + +#: utils/recfmt.c:123 +#, c-format +msgid "can't open file %s for reading.\n" +msgstr "tiedoston %s avaus lukemista varten epäonnistui.\n" + +#: utils/recfmt.c:141 +msgid "don't specify a template in the command line and -f at the same time.\n" +msgstr "" +"älä määritä samalla kertaa sekä mallinnetta komentorivillä että valitsinta -" +"f.\n" + +#: utils/recfmt.c:164 +msgid "invalid expression in a template slot.\n" +msgstr "virheellinen lauseke mallinnevälissä.\n" + +#: utils/recfmt.c:170 +msgid "error evaluating expression in a template slot.\n" +msgstr "virhe arvioitaessa lauseketta mallinnevälissä.\n" + +#: utils/recfmt.c:204 +msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" +msgstr "" +"recfmt_apply_template: virhe käännettäessä säännöllistä lauseketta. Ilmoita " +"tästä.\n" + +#. TRANSLATORS: --help output, recinf synopsis. +#. no-wrap +#: utils/recinf.c:84 +#, c-format +msgid "Usage: recinf [OPTION]... [FILE]...\n" +msgstr "Käyttö: recinf [VALITSIN]... [TIEDOSTO]...\n" + +#. TRANSLATORS: --help output, recinf short description. +#. no-wrap +#: utils/recinf.c:89 +msgid "Print information about the types of records stored in the input.\n" +msgstr "Tulosta syötteeseen tallennettujen tietuiden tyypit.\n" + +#. TRANSLATORS: --help output, recinf arguments. +#. no-wrap +#: utils/recinf.c:96 +msgid "" +" -t, --type=RECORD_TYPE print information on the records having " +"the\n" +" specified type.\n" +" -d, --descriptor include the full record descriptors.\n" +" -n, --names-only output just the names of the record files\n" +" found in the input.\n" +msgstr "" +" -t, --type=TIETUE_TYYPPI tulosta tietoja määritellyn tyyppisistä\n" +" tietueista.\n" +" -d, --descriptor sisällytä täydet tietueselosteet.\n" +" -n, --names-only tulosta vain syöteestä löydettyjen " +"tietue-\n" +" tiedostojen nimet.\n" + +#. TRANSLATORS: --help output, recinf special options. +#. no-wrap +#: utils/recinf.c:109 +msgid "" +"Special options:\n" +" -S, --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Erikoisvalitsimet:\n" +" -S, --print-sexps tulosta tietoja sexps-muodossa eikä " +"rec-muodossa.\n" + +#: utils/recinf.c:263 +#, c-format +msgid "error: cannot read file %s\n" +msgstr "virhe: tiedoston %s lukeminen epäonnistui\n" + +#. TRANSLATORS: --help output, recins synopsis. +#. no-wrap +#: utils/recins.c:111 +#, c-format +msgid "" +"Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" +msgstr "" +"Käyttö: recins [VALITSIN]... [-t TYYPPI] [-n NUMERO | -e TIETUE_LAUSEKE | -q " +"MERKKIJONO | -m NUMERO] [(-f NIMI -v MERKKIJONO]|[-r RECDATA)]... " +"[TIEDOSTO]\n" + +#. TRANSLATORS: --help output, recins short description. +#. no-wrap +#: utils/recins.c:116 +msgid "Insert new records in a rec database.\n" +msgstr "Lisää uusia tietueita rec-tietokantaan.\n" + +#. TRANSLATORS: --help output, recins arguments. +#. no-wrap +#: utils/recins.c:122 +msgid "" +" -f, --field=STR field name; should be followed by a -" +"v.\n" +" -v, --value=STR field value; should be preceded by an -" +"f.\n" +" -r, --record=STR record that will be inserted in the " +"file.\n" +" --force insert the record even if it is " +"violating\n" +" record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --no-auto don't insert auto generated fields.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -f, --field=MERKKIJONO kenttänimi. Pitäisi olla valitsimen -" +"v jäljessä.\n" +" -v, --value=MERKKIJONO kenttänimi. Pitäisi edeltää " +"valitsinta -f.\n" +" -r, --record=MERKKIJONO tietue, joka lisätään tiedostoon.\n" +" --force lisää tietue, vaikka se on " +"ristiriidassa tietue-\n" +" rajoitusten kanssa.\n" +" --no-external älä käytä ulkoisia selosteita.\n" +" --no-auto älä lisää automaattisesti tuotettuja " +"kenttiä.\n" +" --verbose anna yksityiskohtainen ilmoitus, jos " +"integriteetti-\n" +" tarkistus epäonnistuu.\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recins.c:136 +msgid "" +" -s, --password=STR encrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=MERKKIJONO salaa luottamukselliset kentän " +"annetulla salasanalla.\n" + +#: utils/recins.c:195 +msgid "a -f should be followed by a -v\n" +msgstr "valitsimen -f pitäisi seurata valitsinta -v\n" + +#: utils/recins.c:219 +msgid "a -v should be preceded by a -f\n" +msgstr "valitsimen -v pitäisi edeltää valitsinta -f\n" + +#: utils/recins.c:244 utils/recsel.c:223 +msgid "more than one password was specified\n" +msgstr "on määritelty useampia kuin yksi salasana\n" + +#: utils/recins.c:258 +msgid "error while parsing the record provided by -r\n" +msgstr "virhe jäsennettäessä valitsimen -r tarjoamaa tietuetta\n" + +#: utils/recins.c:293 +#, c-format +msgid "please provide a value for the field %s\n" +msgstr "tarjoa arvo kentälle %s\n" + +#. TRANSLATORS: --help output, recsel synopsis. +#. no-wrap +#: utils/recsel.c:118 +#, c-format +msgid "" +"Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " +"| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" +msgstr "" +"Käyttö: recsel [VALITSIN]... [-t TYYPPI] [-j KENTTÄ] [-n INDEKSIT | -e " +"TIETUE_LAUSEKE | -q MERKKIJONO | -m NUMERO] [-c | (-p|-P) KENTTÄ_LAUSEKE] " +"[TIEDOSTO]...\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:123 +msgid "Select and print rec data.\n" +msgstr "Valitse ja tulosta rec-tietoja.\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:129 +msgid "" +" -d, --include-descriptors print record descriptors along with " +"the matched\n" +" records.\n" +" -C, --collapse do not section the result in records " +"with newlines.\n" +" -S, --sort=FIELD,... sort the output by the specified " +"fields.\n" +" -G, --group-by=FIELD,... group records by the specified " +"fields.\n" +" -U, --uniq remove duplicated fields in the output " +"records.\n" +msgstr "" +" -d, --include-descriptors tulosta tietueselosteet täsmäävistä " +"tietueista.\n" +" -C, --collapse älä jaa tulosta tietueissa lohkoihin " +"rivinvaihdoilla.\n" +" -S, --sort=KENTTÄ lajittele tuloste määritellyn kentän " +"mukaan.\n" +" -G, --group-by=KENTTÄ,... määriteltyjen kenttien ryhmätietueet.\n" +" -U, --uniq poista kaksoiskappalekentät " +"tulostetietueista.\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recsel.c:141 +msgid "" +" -s, --password=STR decrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=MERKKIJONO pura luottamuksellisten kenttien " +"salaus annetulla salasanalla.\n" + +#: utils/recsel.c:150 +msgid "" +" -j, --join=FIELD perform an inner join using the " +"specified field.\n" +msgstr "" +" -j, --join=FIELD suorita sisäinen liitos käyttäen " +"määriteltyä kenttää.\n" + +#. TRANSLATORS: --help output, recsel output options. +#. no-wrap +#: utils/recsel.c:157 +msgid "" +"Output options:\n" +" -p, --print=FIELDS comma-separated list of fields to " +"print for each\n" +" matching record.\n" +" -P, --print-values=FIELDS as -p, but print only the values of " +"the selected\n" +" fields.\n" +" -R, --print-row=FIELDS as -P, but separate the values with " +"spaces instead\n" +" of newlines.\n" +" -c, --count print a count of the matching records " +"instead of\n" +" the records themselves.\n" +msgstr "" +"Tulostusvalitsimet:\n" +" -p, --print=KENTÄT pilkulla eroteltu kenttien luettelo " +"jokaiselle\n" +" täsmäävälle tietueelle.\n" +" -P, --print-values=KENTÄT sama kuin -p, mutta tulostaa vain " +"valittujen\n" +" kenttien arvot.\n" +" -R, --print-row=KENTÄT sama kuin -P, mutta tulostettavat " +"arvot erotellaan\n" +" välilyönneillä eikä " +"rivinvaihdoilla.\n" +" -c, --count tarjoa täsmäävien tietueiden lukumäärä " +"eikä itse\n" +" tietueita.\n" + +#. TRANSLATORS: --help output, recsel special options. +#. no-wrap +#: utils/recsel.c:171 +msgid "" +"Special options:\n" +" --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Erikoisvalitsimet:\n" +" --print-sexps tulosta tietoja sexps-muodossa eikä " +"rec-muodossa.\n" + +#: utils/recsel.c:235 +msgid "only one field list can be specified as a sorting criteria.\n" +msgstr "vain yksi kenttäluettelo voidaan määritellä lajittelukriteerinä.\n" + +#: utils/recsel.c:242 +msgid "invalid field names in -S.\n" +msgstr "virheelliset kenttänimet valitsimelle -S.\n" + +#: utils/recsel.c:258 +msgid "only one field can be specified as join criteria.\n" +msgstr "vain yksi kenttä voidaan määritellä liitoskriteerinä.\n" + +#: utils/recsel.c:263 +msgid "please specify a correct field name to -j|--join.\n" +msgstr "määritä oikea kenttänimi valitsimien -j|--join kanssa.\n" + +#: utils/recsel.c:274 +msgid "only one field list can be specified as a grouping criteria.\n" +msgstr "vain yksi kenttäluettelo voidaan määritellä lajittelukriteerinä.\n" + +#: utils/recsel.c:280 +msgid "invalid field names in -G.\n" +msgstr "virheellinen kenttänimi valitsimelle -G.\n" + +#: utils/recsel.c:300 +msgid "cannot specify -[pPR] and also -c.\n" +msgstr "ei voida määritellä sekä valitsimia -[pPR] että myös valitsinta -c.\n" + +#: utils/recsel.c:317 +#, c-format +msgid "invalid list of fields in -%c\n" +msgstr "virheellinen kenttien luettelo kohteessa -%c\n" + +#: utils/recsel.c:325 +msgid "internal error creating the field expression.\n" +msgstr "sisäinen virhe luotaessa kenttälauseketta.\n" + +#: utils/recsel.c:340 +#, c-format +msgid "invalid aggregate function '%s'\n" +msgstr "virheellinen ryhmitysfunktio ’%s’\n" + +#: utils/recsel.c:358 +msgid "cannot specify -c and also -p.\n" +msgstr "ei voida määritellä valitsinta -c ja myös valitsinta -p.\n" + +#: utils/recsel.c:377 +msgid "joins can only be used when a named record set is selected.\n" +msgstr "" +"yhteenliittymiä voidaan käyttää vain kun valitaan nimettyjä tietuejoukkoja.\n" + +#: utils/recsel.c:439 +msgid "several record types found. Please use -t to specify one.\n" +msgstr "" +"löydettiin useita tietuetyyppejä. Käytä valitsinta -t määrittämään yksi.\n" + +#. TRANSLATORS: --help output, recset synopsis. +#. no-wrap +#: utils/recset.c:113 +#, c-format +msgid "Usage: recset [OPTION]... [FILE]...\n" +msgstr "Käyttö: recset [VALITSIN]... [TIEDOSTO]...\n" + +#. TRANSLATORS: --help output, recset short description. +#. no-wrap +#: utils/recset.c:118 +msgid "Alter or delete fields in records.\n" +msgstr "Muuta tai poista kentät tietueissa.\n" + +#. TRANSLATORS: --help output, recset options. +#. no-wrap +#: utils/recset.c:124 +msgid "" +" --no-external don't use external descriptors.\n" +" --force alter the records even if violating " +"record\n" +" restrictions.\n" +msgstr "" +" --no-external älä käytä ulkoisia selosteita.\n" +" --force muuta tietueita vaikka se on " +"ristiriidassa tietue-\n" +" rajoitteiden kanssa.\n" + +#. TRANSLATORS: --help output, recset field selection options. +#. no-wrap +#: utils/recset.c:137 +msgid "" +"Field selection options:\n" +" -f, --fields=FIELDS comma-separated list of field names " +"with optional\n" +" subscripts.\n" +msgstr "" +"Kenttien valintavalitsimet:\n" +" -f, --fields=KENTÄT pilkulla eroteltu kenttänimien " +"luettelo valinnaisilla\n" +" alaindekseillä.\n" + +#. TRANSLATORS: --help output, recset actions. +#. no-wrap +#: utils/recset.c:145 +msgid "" +"Actions:\n" +" -s, --set=VALUE change the value of the selected " +"fields.\n" +" -a, --add=VALUE add the selected fields with the given " +"value.\n" +" -S, --set-add=VALUE change the value of the selected " +"fields. If they don't\n" +" exist then add a new field with that " +"value.\n" +" -r, --rename=NAME rename the selected fields to a given " +"name. If an entire\n" +" record set is selected then the " +"field is renamed in the\n" +" record descriptor as well.\n" +" -d, --delete delete the selected fields.\n" +" -c, --comment comment out the selected fields.\n" +msgstr "" +"Toimet:\n" +" -s, --set=ARVO muuta valittujen kenttien arvoa.\n" +" -a, --add=ARVO lisää valitut kentät annetulla " +"arvolla.\n" +" -S, --set-add=VALUE muuta valittujen kenttien arvo. Jos " +"niitä ei ole\n" +" olemassa, lisää uusi kenttä tuolla " +"arvolla.\n" +" -r, --rename=NIMI nimeä uudelleen valitut kentät " +"annetulla nimellä. Jos koko\n" +" tietuejoukko on valittu niin silloin " +"kenttä nimetään\n" +" uudelleen myös tietueselosteessa.\n" +" -d, --delete poista valitut kentät.\n" +" -c, --comment muuta valitut kentät kommenteiksi.\n" + +#: utils/recset.c:168 +msgid "please specify some field with -f.\n" +msgstr "määritä joku kenttä valitsimen -f kanssa.\n" + +#: utils/recset.c:173 +msgid "please specify just one action.\n" +msgstr "määritä vain yksi toiminto.\n" + +#: utils/recset.c:213 +msgid "invalid field expression in -f.\n" +msgstr "virheellinen kenttälauseke valitsimessa -f.\n" + +#: utils/recset.c:221 +msgid "creating the field expression.\n" +msgstr "luodaan kenttälauseke.\n" + +#: utils/recset.c:243 +msgid "" +"the rename operation requires just one field with an optional subscript.\n" +msgstr "" +"uudelleennimeämistoiminto vaatii vain yhden kentän valinnaisella " +"alaindeksillä.\n" + +#. TRANSLATORS: --help output 5+ (reports) +#. TRANSLATORS: the placeholder indicates the bug-reporting address +#. for this application. Please add _another line_ with the +#. address for translation bugs. +#. no-wrap +#: utils/recutl.c:122 +#, c-format +msgid "Report bugs to: %s\n" +msgstr "" +"Ilmoita virheistä (englanniksi) osoitteeseen: %s\n" +"Ilmoita käännösvirheistä osoitteeseen <translation-team-fi@lists.sourceforge." +"net>\n" + +#: utils/recutl.c:131 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" +msgstr "%s kotisivu: <http://www.gnu.org/software/recutils/>\n" + +#: utils/recutl.c:134 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Yleinen opaste GNU-ohjelmistojen käytöstä: <http://www.gnu.org/gethelp/>\n" + +#. TRANSLATORS: --help output, common arguments. +#. no-wrap +#: utils/recutl.c:143 +msgid "" +" --help print a help message and exit.\n" +" --version show version and exit.\n" +msgstr "" +" --help tulosta opasteviesti ja poistu.\n" +" --version näytä versio ja poistu.\n" + +#. TRANSLATORS: --help output, record selection arguments +#. no-wrap +#: utils/recutl.c:154 +msgid "" +"Record selection options:\n" +" -i, --case-insensitive make strings case-insensitive in " +"selection\n" +" expressions.\n" +" -t, --type=TYPE operate on records of the specified " +"type only.\n" +" -e, --expression=RECORD_EXPR selection expression.\n" +" -q, --quick=STR select records with fields containing " +"a string.\n" +" -n, --number=NUM,... select specific records by position, " +"with ranges.\n" +" -m, --random=NUM select a given number of random " +"records.\n" +msgstr "" +"Tietuevalintavalitsimet:\n" +" -i, --case-insensitive tee merkkijonoista kirjainkoosta " +"riippuvia valinta-\n" +" lausekkeissa.\n" +" -t, --type=TYYPPI tulosta vain määritellyntyyppiset " +"tietueet.\n" +" -e, --expression=LAUSEKE valintalauseke.\n" +" -q, --quick=MERKKIJONO valitse tietueet, joiden kentissä on " +"merkkijono.\n" +" -n, --number=NUMERO valitse määritelty tietue.\n" +" -m, --random=NUMERO valitse annettu satunnaistietuemäärä.\n" + +#: utils/recutl.c:179 +#, c-format +msgid "" +"Copyright (C) %s Jose E. Marchesi.\n" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +msgstr "" +"Copyright © %s Jose E. Marchesi.\n" +"License GPLv3+: GNU GPL versio 3 tai myöhäisempi <http://gnu.org/licenses/" +"gpl.html>.\n" +"Tämä on vapaa ohjelmisto: voi muuttaa ja jakaa sitä vapaasti edelleen.\n" +"Ohjelmalla EI OLE TAKUUTA siinä laajuudessa, minkä laki sallii.\n" + +#: utils/recutl.c:185 +msgid "" +"\n" +"Written by Jose E. Marchesi." +msgstr "" +"\n" +"Tekijä: Jose E. Marchesi." + +#: utils/recutl.c:197 utils/recutl.c:217 +msgid ": error: " +msgstr ": virhe: " + +#: utils/recutl.c:229 +msgid ": warning: " +msgstr ": varoitus: " + +#: utils/recutl.c:254 +#, c-format +msgid "duplicated record set '%s' from %s.\n" +msgstr "kaksoiskappale tietuejoukko ’%s’ kohteesta %s.\n" + +#: utils/recutl.c:417 +msgid "cannot create a unique name.\n" +msgstr "uniikin nimen luominen epäonnistui.\n" + +#: utils/recutl.c:438 +#, c-format +msgid "renaming file %s to %s\n" +msgstr "nimetään tiedosto %s uudelleen nimellä %s\n" + +#: utils/recutl.c:482 +msgid "operation aborted due to integrity failures.\n" +msgstr "toiminta keskeytettiin integriteettivirheiden vuoksi.\n" + +#: utils/recutl.c:483 +msgid "use --verbose to get a detailed report.\n" +msgstr "käytä valitsinta --verbose samaan yksityiskohtainen ilmoitus.\n" + +#: utils/recutl.c:490 +msgid "use --force to skip the integrity check.\n" +msgstr "käytä valitsinta --force ohittamaan integriteettitarkistus.\n" + +#: utils/recutl.c:551 +msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" +msgstr "" +"sisäinen virhe: recutl_index_list_parse: virhe käännettäessä säännöllistä " +"lauseketta.\n" + +#: utils/recutl.c:626 +msgid "Password: " +msgstr "Salasana: " + +#: utils/recutl.c:632 +msgid "Password again: " +msgstr "Salasana uudelleen: " + +#: utils/recutl.c:637 +msgid "the provided passwords don't match.\n" +msgstr "annetut salasanat eivät täsmää.\n" + +#: utils/recutl.h:97 utils/recutl.h:186 utils/recutl.h:190 +#, fuzzy +msgid "cannot specify -e and also -n\n" +msgstr "ei voida määritellä valitsinta -c ja myös valitsinta -p.\n" + +#: utils/recutl.h:102 +#, fuzzy +msgid "cannot specify -e and also -q\n" +msgstr "ei voida määritellä valitsinta -c ja myös valitsinta -p.\n" + +#: utils/recutl.h:113 +#, fuzzy +msgid "invalid selection expression\n" +msgstr "virheellinen valintalauseke.\n" + +#: utils/recutl.h:125 +#, fuzzy +msgid "cannot specify -n and also -e\n" +msgstr "ei voida määritellä valitsinta -c ja myös valitsinta -p.\n" + +#: utils/recutl.h:130 +#, fuzzy +msgid "cannot specify -n and also -q\n" +msgstr "ei voida määritellä valitsinta -c ja myös valitsinta -p.\n" + +#: utils/recutl.h:140 +#, fuzzy +msgid "invalid list of indexes in -n\n" +msgstr "virheellinen kenttien luettelo kohteessa -%c\n" + +#: utils/recutl.h:150 +#, fuzzy +msgid "cannot specify -m and also -e\n" +msgstr "ei voida määritellä valitsinta -c ja myös valitsinta -p.\n" + +#: utils/recutl.h:155 +#, fuzzy +msgid "cannot specify -m and also -q\n" +msgstr "ei voida määritellä valitsinta -c ja myös valitsinta -p.\n" + +#: utils/recutl.h:160 +#, fuzzy +msgid "cannot specify -m and also -n\n" +msgstr "ei voida määritellä valitsinta -c ja myös valitsinta -p.\n" + +#~ msgid "%s: option '--%s' doesn't allow an argument\n" +#~ msgstr "%s: valitsin ’--%s’ ei salli argumenttia\n" + +#~ msgid "%s: unrecognized option '--%s'\n" +#~ msgstr "%s: tunnistamaton valitsin ’--%s’\n" + +#~ msgid "%s: option '-W %s' doesn't allow an argument\n" +#~ msgstr "%s: valitsin ’-W %s’ ei salli argumenttia\n" + +#~ msgid "%s: option '-W %s' requires an argument\n" +#~ msgstr "%s: valitsin ’-W %s’ vaatii argumentin\n" + +#~ msgid "" +#~ "%s:%s: warning: type %s collides with referred type %s in the rset %s.\n" +#~ msgstr "" +#~ "%s:%s: varoitus: tyyppi %s on ristiriidassa viitetyypin %s kanssa " +#~ "kohteessa rset %s.\n" + +#~ msgid "%s:%s: error: value for %s shall be a field name.\n" +#~ msgstr "%s:%s: virhe: arvon kohteelle %s pitää olla kenttänimi.\n" + +#~ msgid "reached maximum number of fields: %d\n" +#~ msgstr "saavutettiin kenttien enimmäismäärä: %d\n" + +#~ msgid "not enough headers" +#~ msgstr "otsakkeita ei ole tarpeeksi" + +#~ msgid "out of memory" +#~ msgstr "muisti loppui" + +#~ msgid "evaluating the selection expression.\n" +#~ msgstr "arvioidaan valintalauseketta.\n" + +#~ msgid "reading file %s" +#~ msgstr "luetaan tiedosto %s" + +#~ msgid "internal error: rec_resolver_check: error compiling regexp.\n" +#~ msgstr "" +#~ "sisäinen virhe: rec_resolver_check: virhe käännettäessä säännöllistä " +#~ "lauseketta.\n" + +#~ msgid "internal error: rec_field_name_part_str_p: error compiling regexp.\n" +#~ msgstr "" +#~ "sisäinen virhe: rec_field_name_part_str_p: virhe käännettäessä " +#~ "säännöllistä lauseketta.\n" + +#~ msgid "internal error: rec_int_rec_type_p: error compiling regexp.\n" +#~ msgstr "" +#~ "sisäinen virhe: rec_int_rec_type_p: virhe käännettäessä säännöllistä " +#~ "lauseketta.\n" + +#~ msgid "internal error: rec-types: error compiling regexp.\n" +#~ msgstr "" +#~ "sisäinen virhe: rec-types: virhe käännettäessä säännöllistä lauseketta.\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " csv2rec contacts.csv > contacts.rec\n" +#~ " cat contacts.csv | csv2rec > contacts.rec\n" +#~ msgstr "" +#~ "Esimerkit:\n" +#~ "\n" +#~ " csv2rec contacts.csv > contacts.rec\n" +#~ " cat contacts.csv | csv2rec > contacts.rec\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " mdb2rec database.mdb > database.rec\n" +#~ " mdb2rec database.mdb Customers > customers.rec\n" +#~ msgstr "" +#~ "Esimerkit:\n" +#~ "\n" +#~ " mdb2rec database.mdb > database.rec\n" +#~ " mdb2rec database.mdb Customers > customers.rec\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " rec2csv contacts.rec > contacts.csv\n" +#~ " cat contacts.rec | rec2csv -t Contact > contacts.csv\n" +#~ msgstr "" +#~ "Esimerkit:\n" +#~ "\n" +#~ " rec2csv contacts.rec > contacts.csv\n" +#~ " cat contacts.rec | rec2csv -t Contact > contacts.csv\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recdel -n 10 contacts.rec\n" +#~ " cat hackers.rec | recdel -e \"Email[0] = 'foo@bar.com'\" > other." +#~ "rec\n" +#~ msgstr "" +#~ "Esimerkit:\n" +#~ "\n" +#~ " recdel -n 10 contacts.rec\n" +#~ " cat hackers.rec | recdel -e \"Email[0] = 'foo@bar.com'\" > other." +#~ "rec\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " cat employees.rec | recfmt 'Dear {{Name}}, you are fired.'\n" +#~ " cat employees.rec | recfmt -f fire-letter.tmpl\n" +#~ msgstr "" +#~ "Esimerkit:\n" +#~ "\n" +#~ " cat employees.rec | recfmt 'Rakas {{Nimi}}, olet erotettu.'\n" +#~ " cat employees.rec | recfmt -f fire-letter.tmpl\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recinf mydata.rec\n" +#~ " recinf -d mydata.rec moredata.rec\n" +#~ " recinf -t Task TODO\n" +#~ msgstr "" +#~ "Esimerkit:\n" +#~ "\n" +#~ " recinf mydata.rec\n" +#~ " recinf -d mydata.rec moredata.rec\n" +#~ " recinf -t Task TODO\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recins -f Name -v \"Mr Foo\" -f Email -v foo@foo.org contacts." +#~ "rec\n" +#~ " cat hackers.rec | recins -t Hacker -f Email -v foo@foo.org > " +#~ "other.rec\n" +#~ msgstr "" +#~ "Esimerkit:\n" +#~ "\n" +#~ " recins -f Name -v \"Mr Foo\" -f Email -v foo@foo.org contacts." +#~ "rec\n" +#~ " cat hackers.rec | recins -t Hacker -f Email -v foo@foo.org > " +#~ "other.rec\n" + +#~ msgid "" +#~ "the record set contains confidential fields but no password was provided\n" +#~ msgstr "" +#~ "tietuejoukko sisältää luottamuksellisia kenttiä, mutta salasanaa ei " +#~ "tarjottu\n" + +#~ msgid "the resulting record will have those fields unencrypted!\n" +#~ msgstr "tuloksena olevalla tietueella on nuo kentät salaamattomia!\n" + +# Heittomerkit jätetty muuttamatta suomalaistyyppiseksi, koska käskyparametreissa heittomerkin tyyppi voi olla kriittinen. +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recsel -t Friend -e \"Name ~ 'Smith'\" friends.rec\n" +#~ " recsel -C -e \"#Email && Wiki = 'no'\" -P Email[0] gnupdf-hackers." +#~ "rec\n" +#~ msgstr "" +#~ "Esimerkit:\n" +#~ "\n" +#~ " recsel -t Friend -e \"Name ~ 'Smith'\" friends.rec\n" +#~ " recsel -C -e \"#Email && Wiki = 'no'\" -P Email[0] gnupdf-hackers." +#~ "rec\n" + +# Heittomerkit jätetty muuttamatta suomalaistyyppiseksi, koska käskyparametreissa heittomerkin tyyppi voi olla kriittinen. +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recset -f TmpName -d data.rec\n" +#~ " recset -f Email[1] -s invalid@email.com friends.rec\n" +#~ " recset -e \"Name ~ 'Smith'\" -f Email -a new@email.com friends." +#~ "rec\n" +#~ " recset -f Email[1] -r AltEmail friends.rec\n" +#~ msgstr "" +#~ "Esimerkit:\n" +#~ "\n" +#~ " recset -f TmpName -d data.rec\n" +#~ " recset -f Email[1] -s invalid@email.com friends.rec\n" +#~ " recset -e \"Name ~ 'Smith'\" -f Email -a new@email.com friends." +#~ "rec\n" +#~ " recset -f Email[1] -r AltEmail friends.rec\n" + +#~ msgid " --no-external don't use external descriptors.\n" +#~ msgstr " --no-external älä käytä ulkoisia selosteita.\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recfix data.rec\n" +#~ " recfix data1.rec data2.rec\n" +#~ " cat data1.rec data2.rec | recfix\n" +#~ msgstr "" +#~ "Esimerkit:\n" +#~ "\n" +#~ " recfix data.rec\n" +#~ " recfix data1.rec data2.rec\n" +#~ " cat data1.rec data2.rec | recfix\n" + +#~ msgid "evaluating selection expression.\n" +#~ msgstr "arvioidaan valintalauseketta.\n" diff --git a/devspec.en_US/project/recutils/po/fr.gmo b/devspec.en_US/project/recutils/po/fr.gmo new file mode 100755 index 0000000000000000000000000000000000000000..b56358602815812670f312f1aa7f3a9425c51114 GIT binary patch literal 36013 zcwWVQ3zTF>d0rVSHW@<9I}s-G1$mfVn4Wz|=rQ|{W@l!Xg`M4DXI2udR--%J)jfB& z``+IBnAusa-m4b~9853<93muaX(1tYj3O|0By0TO1d?#<K<s13U^qU<fjFEb=U9o8 zgY*6WU-#Mf_S{{`aUae8-S<}gRrS|j|Ff#}C$G8eqY9tj#owFoxA<d9z4Awtdi3up z{yg_8rT!7%Zvy@+z;6NG2l%tER_fmYzWy~zeE{&gfIt2+rM%ZFHH-RduUG2#0e|BS zN__~=Kl~4sI*fAGPbzgYpa*!I+BNV>G=2lh-wiki_$(S71$^aCDFu}3Dod$r01p7Z z67Vj-*8x5X_-4RQ1MULc0K5_KuK}k3Z^TP9q3#3R0{AJwoz(7|rTkx+-`Bha?E*T0 z3xLnOMV`OnN~QJy?ghL7@Z6PB@7Dou0{mZBN;^k>TB+**KMZ(1;J*bN1-uOZYz2H9 z;5gtS;10lh0j~x8RRh0oo?rP^&=2q!;C{eQ8u%T+s{yx;NxyCzlXgA~xEt`RfX4t| zzD4?b8{iD!F93p!>Q4dR0r*|OzYBOdI`s-_5Ab`KpKX8`ihAR?(0MQ5<$%$+jN@kj zEx@M@{3hV{0bc;L32#HGUj&?;5ITJy@PmMF-=-A0uD%2aR#4yGCVck7Hkp^#ZCC0a z0B#2a$<#Xm!CI;Z_(s6H0l{+W6M!!V{2bsFfM3`yeER!<htU5&-67>BK%^1C8?Kh| zybEw2pbI#Ga=&u5;QjVBLht``jr6N=t?=2*wbHL!0Na3}fqw+}<AD1x$*&>2*9rff zxK8@(8+aa&md?)sVoKB#fFO<fs`>rD0dE0(^Yt=sXRjCfK6AZ{|33qs1$^10QuhPi zIVsP7WS8{wt-EAC_w15+xWT~N4ZL@ktk=hPN&lYPCF|oGyM!Ju0Afk0pWH2U-?dwQ zFYFdR3wBF;zXk}>s&DO<`mX|0VM^7`JwhLQkId_xd!*gZ0Ak6g-`*qZ?9a{nSML=* zx^A!3Ke|`=@ZP=B&u7f@Z|s$IbQzfEcEJ5N$h<vygFOEp;8lR*H_GqZ0U=`4<2MRj zzG!~`2lM;S%<une;A^I&pIfFxejEh+`+zr3$-K9xWPZ+?a*t05eKw|KTz@nrbo$|x zjQ@�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 literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/po/fr.po b/devspec.en_US/project/recutils/po/fr.po new file mode 100755 index 0000000..c446923 --- /dev/null +++ b/devspec.en_US/project/recutils/po/fr.po @@ -0,0 +1,2070 @@ +# Translation of recutils to French. +# Copyright (C) 2014 Free Software Foundation, Inc. +# This file is distributed under the same license as the recutils package. +# Je ne désire pas continuer cette traduction. Quiconque voudrait continuer +# la traduction est le bienvenu. +# +# Frédéric Marchal <fmarchal@perso.be>, 2014. +msgid "" +msgstr "" +"Project-Id-Version: GNU recutils 1.6.90\n" +"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" +"POT-Creation-Date: 2019-01-03 10:32+0100\n" +"PO-Revision-Date: 2014-03-20 10:02+0100\n" +"Last-Translator: Frédéric Marchal <fmarchal@perso.be>\n" +"Language-Team: French <traduc@traduc.org>\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: lib/closeout.c:122 +msgid "write error" +msgstr "Erreur d'écriture" + +#: lib/copy-acl.c:54 +#, c-format +msgid "preserving permissions for %s" +msgstr "" + +#: lib/error.c:195 +msgid "Unknown system error" +msgstr "Erreur système inconnue" + +#: lib/execute.c:185 lib/execute.c:258 lib/wait-process.c:282 +#: lib/wait-process.c:356 +#, c-format +msgid "%s subprocess failed" +msgstr "Le sous-processus %s a échoué" + +#: lib/getopt.c:278 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous\n" +msgstr "%s: l'option « -W %s » est ambiguë\n" + +#: lib/getopt.c:284 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous; possibilities:" +msgstr "%s: l'option « %s » est ambiguë; les possibilités sont:" + +#: lib/getopt.c:319 +#, fuzzy, c-format +msgid "%s: unrecognized option '%s%s'\n" +msgstr "%s: option « %c%s » pas reconnue\n" + +#: lib/getopt.c:345 +#, fuzzy, c-format +msgid "%s: option '%s%s' doesn't allow an argument\n" +msgstr "%s: l'option « %c%s » n'accepte pas d'argument\n" + +#: lib/getopt.c:360 +#, fuzzy, c-format +msgid "%s: option '%s%s' requires an argument\n" +msgstr "%s: l'option « --%s » exige un argument\n" + +#: lib/getopt.c:621 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: option invalide -- « %c »\n" + +#: lib/getopt.c:636 lib/getopt.c:682 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: l'option exige un argument -- « %c »\n" + +#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "mémoire épuisée" + +#: parse-datetime.y:440 parse-datetime.y:540 +#, c-format +msgid "parsed %s part: " +msgstr "" + +#: parse-datetime.y:455 +#, c-format +msgid "year: %04<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:483 +#, c-format +msgid "%s (day ordinal=%<PRIdMAX> number=%d)" +msgstr "" + +#: parse-datetime.y:514 +#, c-format +msgid "number of seconds: %<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:547 +msgid "today/this/now\n" +msgstr "" + +#: parse-datetime.y:612 +msgid "number of seconds" +msgstr "" + +#: parse-datetime.y:625 +msgid "datetime" +msgstr "" + +#: parse-datetime.y:630 +msgid "time" +msgstr "" + +#: parse-datetime.y:635 +msgid "local_zone" +msgstr "" + +#: parse-datetime.y:640 +msgid "zone" +msgstr "" + +#: parse-datetime.y:645 +msgid "date" +msgstr "" + +#: parse-datetime.y:650 +msgid "day" +msgstr "" + +#: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 +msgid "relative" +msgstr "" + +#: parse-datetime.y:658 +msgid "number" +msgstr "" + +#: parse-datetime.y:662 +msgid "hybrid" +msgstr "" + +#: parse-datetime.y:820 +#, c-format +msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" +msgstr "" + +#: parse-datetime.y:832 +#, c-format +msgid "" +"warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" +msgstr "" + +#: parse-datetime.y:1276 +#, c-format +msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1286 +#, c-format +msgid "error: out-of-range year %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1524 +#, fuzzy, c-format +msgid "error: unknown word '%s'\n" +msgstr "erreur: impossible de lire le fichier %s\n" + +#: parse-datetime.y:1673 +#, fuzzy +msgid "error: invalid date/time value:\n" +msgstr "valeur énumérée invalide." + +#: parse-datetime.y:1674 +#, c-format +msgid " user provided time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1676 +#, c-format +msgid " normalized time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1699 +msgid " possible reasons:\n" +msgstr "" + +#: parse-datetime.y:1701 +msgid " non-existing due to daylight-saving time;\n" +msgstr "" + +#: parse-datetime.y:1703 +msgid " invalid day/month combination;\n" +msgstr "" + +#: parse-datetime.y:1704 +msgid " numeric values overflow;\n" +msgstr "" + +#: parse-datetime.y:1705 +msgid "incorrect timezone" +msgstr "" + +#: parse-datetime.y:1706 +msgid "missing timezone" +msgstr "" + +#: parse-datetime.y:1826 +msgid "error: initial year out of range\n" +msgstr "" + +#: parse-datetime.y:1923 +#, fuzzy +msgid "error: parsing failed\n" +msgstr "erreur lors de l'analyse du fichier CSV: %s\n" + +#: parse-datetime.y:1924 +#, fuzzy, c-format +msgid "error: parsing failed, stopped at '%s'\n" +msgstr "erreur lors de l'analyse du fichier CSV: %s\n" + +#: parse-datetime.y:1934 +msgid "input timezone: " +msgstr "" + +#: parse-datetime.y:1937 +#, c-format +msgid "'@timespec' - always UTC" +msgstr "" + +#: parse-datetime.y:1939 +#, c-format +msgid "parsed date/time string" +msgstr "" + +#: parse-datetime.y:1943 +#, c-format +msgid "TZ=\"%s\" in date string" +msgstr "" + +#: parse-datetime.y:1947 +#, c-format +msgid "TZ=\"UTC0\" environment value or -u" +msgstr "" + +#: parse-datetime.y:1950 +#, c-format +msgid "TZ=\"%s\" environment value" +msgstr "" + +#: parse-datetime.y:1953 +#, c-format +msgid "system default" +msgstr "" + +#: parse-datetime.y:1995 +msgid "error: year, month, or day overflow\n" +msgstr "" + +#: parse-datetime.y:2006 +#, fuzzy, c-format +msgid "error: invalid hour %<PRIdMAX>%s\n" +msgstr "%s:%s: erreur: type d'enregistrement %s invalide\n" + +#: parse-datetime.y:2014 +#, c-format +msgid "using specified time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2015 +#, c-format +msgid "using current time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2069 +#, c-format +msgid "error: tzalloc (\"%s\") failed\n" +msgstr "" + +#: parse-datetime.y:2114 +#, c-format +msgid "" +"error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " +"date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2125 +#, c-format +msgid "new start date: '%s' is '%s'\n" +msgstr "" + +#: parse-datetime.y:2134 +#, c-format +msgid "using current date as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2138 +#, c-format +msgid "warning: day (%s) ignored when explicit dates are given\n" +msgstr "" + +#: parse-datetime.y:2142 +#, c-format +msgid "starting date/time: '%s'\n" +msgstr "" + +#: parse-datetime.y:2152 +msgid "" +"warning: when adding relative months/years, it is recommended to specify the " +"15th of the months\n" +msgstr "" + +#: parse-datetime.y:2157 +msgid "warning: when adding relative days, it is recommended to specify noon\n" +msgstr "" + +#: parse-datetime.y:2167 +#, fuzzy, c-format +msgid "error: %s:%d\n" +msgstr ": erreur: " + +#: parse-datetime.y:2181 +#, c-format +msgid "error: adding relative date resulted in an invalid date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2190 +#, c-format +msgid "" +"after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " +"days),\n" +msgstr "" + +#: parse-datetime.y:2194 +#, c-format +msgid " new date/time = '%s'\n" +msgstr "" + +#: parse-datetime.y:2213 +msgid "warning: daylight saving time changed after date adjustment\n" +msgstr "" + +#: parse-datetime.y:2232 +msgid "warning: month/year adjustment resulted in shifted dates:\n" +msgstr "" + +#: parse-datetime.y:2235 +#, c-format +msgid " adjusted Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2237 +#, c-format +msgid " normalized Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2265 +#, c-format +msgid "error: timezone %d caused time_t overflow\n" +msgstr "" + +#: parse-datetime.y:2275 +#, c-format +msgid "'%s' = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2303 +msgid "error: adding relative time caused an overflow\n" +msgstr "" + +#: parse-datetime.y:2314 +#, c-format +msgid "" +"after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " +"seconds, %+d ns),\n" +msgstr "" + +#: parse-datetime.y:2319 +#, c-format +msgid " new time = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2335 +msgid "warning: daylight saving time changed after time adjustment\n" +msgstr "" + +#: parse-datetime.y:2345 +msgid "timezone: system default\n" +msgstr "" + +#: parse-datetime.y:2347 +msgid "timezone: Universal Time\n" +msgstr "" + +#: parse-datetime.y:2349 +#, c-format +msgid "timezone: TZ=\"%s\" environment value\n" +msgstr "" + +#: parse-datetime.y:2353 +#, c-format +msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" +msgstr "" + +#: parse-datetime.y:2359 +#, c-format +msgid "final: %s (UTC)\n" +msgstr "" + +#: parse-datetime.y:2374 +#, c-format +msgid "final: %s (UTC%s)\n" +msgstr "" + +#: parse-datetime.y:2378 +#, c-format +msgid "final: %s (unknown time zone offset)\n" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". For example, a French Unicode local should translate +#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), respectively. +#. +#. If the catalog has no translation, we will try to +#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and +#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the +#. current locale is not Unicode, locale_quoting_style +#. will quote 'like this', and clocale_quoting_style will +#. quote "like this". You should always include translations +#. for "`" and "'" even if U+2018 and U+2019 are appropriate +#. for your locale. +#. +#. If you don't know what to put here, please see +#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:362 +msgid "`" +msgstr "« " + +#: lib/quotearg.c:363 +msgid "'" +msgstr " »" + +#: lib/regcomp.c:135 +msgid "Success" +msgstr "Succès" + +#: lib/regcomp.c:138 +msgid "No match" +msgstr "Aucune correspondance" + +#: lib/regcomp.c:141 +msgid "Invalid regular expression" +msgstr "Expression régulière invalide" + +#: lib/regcomp.c:144 +msgid "Invalid collation character" +msgstr "Caractère d'interclassement invalide" + +#: lib/regcomp.c:147 +msgid "Invalid character class name" +msgstr "Nom de classe de caractère invalide" + +#: lib/regcomp.c:150 +msgid "Trailing backslash" +msgstr "Barre oblique inverse à la fin" + +#: lib/regcomp.c:153 +msgid "Invalid back reference" +msgstr "Référence arrière invalide" + +#: lib/regcomp.c:156 +#, fuzzy +msgid "Unmatched [, [^, [:, [., or [=" +msgstr "[ ou [^ sans correspondant" + +#: lib/regcomp.c:159 +msgid "Unmatched ( or \\(" +msgstr "( ou \\( sans correspondant" + +#: lib/regcomp.c:162 +msgid "Unmatched \\{" +msgstr "\\{ sans correspondant" + +#: lib/regcomp.c:165 +msgid "Invalid content of \\{\\}" +msgstr "Contenu de \\{\\} invalide" + +#: lib/regcomp.c:168 +msgid "Invalid range end" +msgstr "Fin de plage invalide" + +#: lib/regcomp.c:171 +msgid "Memory exhausted" +msgstr "Mémoire épuisée" + +#: lib/regcomp.c:174 +msgid "Invalid preceding regular expression" +msgstr "Expression régulière précédente invalide" + +#: lib/regcomp.c:177 +msgid "Premature end of regular expression" +msgstr "Fin prématurée de l'expression régulière" + +#: lib/regcomp.c:180 +msgid "Regular expression too big" +msgstr "Expression régulière trop grande" + +#: lib/regcomp.c:183 +msgid "Unmatched ) or \\)" +msgstr ") ou \\) sans correspondant" + +#: lib/regcomp.c:676 +msgid "No previous regular expression" +msgstr "Pas d'expression régulière précédente" + +#: lib/set-acl.c:46 +#, c-format +msgid "setting permissions for %s" +msgstr "" + +#: lib/version-etc.c:73 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:76 +#, c-format +msgid "Packaged by %s\n" +msgstr "" + +#. TRANSLATORS: Translate "(C)" to the copyright symbol +#. (C-in-a-circle), if this symbol is available in the user's +#. locale. Otherwise, do not translate "(C)"; leave it as-is. +#: lib/version-etc.c:83 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:85 +#, fuzzy +msgid "" +"\n" +"License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +"\n" +msgstr "" +"Copyright (C) %s Jose E. Marchesi.\n" +"License GPLv3+: GNU GPL version 3 ou supérieure <http://gnu.org/licenses/gpl." +"html>.\n" +"Ceci est un logiciel libre: vous êtes libre de le changer et de le " +"redistribuer.\n" +"Il n'y a PAS de GARANTIE, dans les limites permises par la loi.\n" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, fuzzy, c-format +msgid "Written by %s and %s.\n" +msgstr "" +"\n" +"Écrit par Jose E. Marchesi." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, fuzzy, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "" +"\n" +"Écrit par Jose E. Marchesi." + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:117 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" + +#. TRANSLATORS: The placeholder indicates the bug-reporting address +#. for this package. Please add _another line_ saying +#. "Report translation bugs to <...>\n" with the address for translation +#. bugs (typically your translation team's web or email address). +#: lib/version-etc.c:245 +#, fuzzy, c-format +msgid "" +"\n" +"Report bugs to: %s\n" +msgstr "" +"Signalez les bugs à: %s\n" +"Signalez les erreurs de traduction à: traduc@traduc.org\n" + +#: lib/version-etc.c:247 utils/recutl.c:125 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "Rapportez les bugs de %s à: %s\n" + +#: lib/version-etc.c:251 utils/recutl.c:129 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Page d'accueil de %s: <%s>\n" + +#: lib/version-etc.c:253 +#, fuzzy, c-format +msgid "%s home page: <https://www.gnu.org/software/%s/>\n" +msgstr "Page d'accueil de %s: <http://www.gnu.org/software/recutils/>\n" + +#: lib/version-etc.c:256 +#, fuzzy +msgid "General help using GNU software: <https://www.gnu.org/gethelp/>\n" +msgstr "" +"Aide générale sur l'utilisation des logiciels GNU: <http://www.gnu.org/" +"gethelp/>\n" + +#: lib/w32spawn.h:49 +#, c-format +msgid "_open_osfhandle failed" +msgstr "échec de _open_osfhandle" + +#: lib/w32spawn.h:90 +#, c-format +msgid "cannot restore fd %d: dup2 failed" +msgstr "ne peut rétablir fd %d: dup2 a échoué" + +#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317 +#, c-format +msgid "%s subprocess" +msgstr "sous-processus %s" + +#: lib/wait-process.c:274 lib/wait-process.c:346 +#, c-format +msgid "%s subprocess got fatal signal %d" +msgstr "le sous-processus %s a reçu le signal fatal %d" + +#: src/rec-fex.c:451 +#, c-format +msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" +msgstr "erreur interne: REC_FEX_MAX_ELEMS dépassé. Merci de rapporter ceci.\n" + +#: src/rec-int.c:176 +#, c-format +msgid "%s: error: the number of records of type %s should be %zd.\n" +msgstr "%s: erreur: le nombre d'enregistrements de type %s devrait être %zd.\n" + +#: src/rec-int.c:186 +#, c-format +msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" +msgstr "" +"%s: erreur: trop d'enregistrements de type %s. Le maximum permis est %zd.\n" + +#: src/rec-int.c:193 +#, c-format +msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" +msgstr "" +"%s: erreur: trop peu d'enregistrements de type %s. Le minimum permis est " +"%zd.\n" + +#: src/rec-int.c:409 src/rec-int.c:463 src/rec-int.c:520 src/rec-int.c:564 +#: utils/recutl.c:207 +msgid "out of memory\n" +msgstr "à cours de mémoire\n" + +#: src/rec-int.c:424 +#, c-format +msgid "%s:%s: error: mandatory field '%s' not found in record\n" +msgstr "" +"%s:%s: erreur: champ obligatoire « %s » pas trouvé dans l'enregistrement\n" + +#: src/rec-int.c:487 +#, c-format +msgid "%s:%s: error: field '%s' not allowed in this record set\n" +msgstr "" +"%s:%s: erreur: le champ « %s » n'est pas permis dans cet ensemble " +"d'enregistrements\n" + +#: src/rec-int.c:534 +#, c-format +msgid "%s:%s: error: field '%s' should be unique in this record\n" +msgstr "" +"%s:%s: erreur: le champ « %s » devrait être unique dans cet enregistrement\n" + +#: src/rec-int.c:578 +#, c-format +msgid "%s:%s: error: prohibited field '%s' found in record\n" +msgstr "%s:%s erreur: champ prohibé « %s » rencontré dans l'enregistrement\n" + +#: src/rec-int.c:610 +#, c-format +msgid "%s:%s: error: %%constraint[%d] violated in record\n" +msgstr "%s:%s: erreur: %%constraint[%d] violée dans l'enregistrement\n" + +#: src/rec-int.c:647 +#, c-format +msgid "%s:%s: error: confidential field is not encrypted\n" +msgstr "%s:%s: erreur: le champ confidentiel n'est pas chiffré\n" + +#: src/rec-int.c:699 +#, c-format +msgid "%s:%s: error: key field '%s' not found in record\n" +msgstr "" +"%s:%s: erreur: le champ clé « %s » n'est pas trouvé dans l'enregistrement\n" + +#: src/rec-int.c:708 +#, c-format +msgid "%s:%s: error: multiple key fields '%s' in record\n" +msgstr "%s:%s: erreur: plusieurs champs clé « %s » dans l'enregistrement\n" + +#: src/rec-int.c:751 +#, c-format +msgid "%s:%s: error: duplicated key value in field '%s' in record\n" +msgstr "" +"%s:%s: erreur: valeur de clé en double dans le champ « %s » de " +"l'enregistrement\n" + +#: src/rec-int.c:799 +#, c-format +msgid "%s:%s: error: missing %%rec field in record descriptor\n" +msgstr "" +"%s:%s: erreur: champ %%rec manquant dans le descripteur de l'enregistrement\n" + +#: src/rec-int.c:807 +#, c-format +msgid "%s:%s: error: too many %%rec fields in record descriptor\n" +msgstr "" +"%s:%s: erreur: trop de champs %%rec dans le descripteur d'enregistrement\n" + +#: src/rec-int.c:817 +#, c-format +msgid "%s:%s: error: invalid record type %s\n" +msgstr "%s:%s: erreur: type d'enregistrement %s invalide\n" + +#: src/rec-int.c:828 +#, c-format +msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" +msgstr "" +"%s:%s: erreur: un seul champ %%key permis dans le descripteur " +"d'enregistrement\n" + +#: src/rec-int.c:838 +#, c-format +msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" +msgstr "" +"%s:%s: erreur: un seul champ %%size permis dans le descripteur " +"d'enregistrement\n" + +#: src/rec-int.c:848 +#, c-format +msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" +msgstr "" +"%s:%s: erreur: un seul champ %%sort permis dans le descripteur " +"d'enregistrement\n" + +#: src/rec-int.c:871 +#, c-format +msgid "" +"%s:%s: error: expected a comma-separated list of fields before the type " +"specification\n" +msgstr "" +"%s:%s: erreur: une liste de champs délimités par des virgules est attendue " +"devant la spécification de type\n" + +#: src/rec-int.c:897 src/rec-int.c:950 +#, c-format +msgid "%s:%s: error: the referred type %s does not exist\n" +msgstr "%s:%s: erreur: le type référé %s n'existe pas\n" + +#: src/rec-int.c:909 +#, c-format +msgid "%s:%s: error: invalid type specification\n" +msgstr "%s:%s: erreur: spécification type invalide\n" + +#: src/rec-int.c:924 +#, c-format +msgid "%s:%s: error: expected a type name before the type specification\n" +msgstr "" +"%s:%s: erreur: un nom de type est attendu avant la spécification du type\n" + +#: src/rec-int.c:962 +#, c-format +msgid "%s:%s: error: invalid typedef specification\n" +msgstr "%s:%s: erreur: spécification typedef invalide\n" + +#: src/rec-int.c:984 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" +msgstr "" +"%s:%s: erreur: la valeur de %s[%zd] n'est pas une expression de sélection " +"valide\n" + +#: src/rec-int.c:1015 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" +msgstr "" +"%s:%s: erreur: la valeur de %s[%zd] n'est pas une liste de noms de champs\n" + +#: src/rec-int.c:1028 +#, c-format +msgid "" +"%s:%s: error: value for %s should be a number optionally preceded by >, <, " +">= or <=.\n" +msgstr "" +"%s:%s: erreur: la valeur de %s devrait être un nombre facultatif précédé de " +">, <, >= ou <=.\n" + +#: src/rec-int.c:1044 +#, c-format +msgid "%s:%s: error: value for %s should be a list of field names.\n" +msgstr "" +"%s:%s: erreur: la valeur de %s devrait être une liste de noms de champs.\n" + +#: src/rec-int.c:1072 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range, uuid " +"or date\n" +msgstr "" +"%s:%s: erreur: le champ auto-incrémenté %s devrait être de type entier, " +"plage, uuid ou date\n" + +#: src/rec-int.c:1074 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range or " +"date\n" +msgstr "" +"%s:%s: erreur: le champ auto-incrémenté %s devrait être de type entier, " +"plage ou date\n" + +#: src/rec-int.c:1157 +#, c-format +msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" +msgstr "" +"%s:%s: erreur: le descripteur distant n'a pas pu être récupéré depuis l'URL " +"%s.\n" + +#: src/rec-int.c:1176 +#, c-format +msgid "%s:%s: error: could not read external descriptor from file %s.\n" +msgstr "" +"%s:%s: erreur: le descripteur externe n'a pas pu être lu depuis le fichier " +"%s.\n" + +#: src/rec-int.c:1191 +#, c-format +msgid "%s:%s: error: %s does not contain valid rec data.\n" +msgstr "" +"%s:%s: erreur: %s ne contient aucune donnée d'enregistrement valable.\n" + +#: src/rec-int.c:1205 +#, c-format +msgid "%s:%s: error: %s does not contain information for type %s.\n" +msgstr "%s:%s: erreur: %s ne contient aucune information pour le type %s.\n" + +#: src/rec-types.c:448 +#, c-format +msgid "" +"internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " +"in rec_type_new().\n" +msgstr "" +"erreur interne: rec-types: REC_TYPE_NONE reçu de rec_type_parse_type_kind() " +"dans rec_type_new().\n" + +#: src/rec-types.c:1178 +msgid "invalid integer." +msgstr "entier invalide." + +#: src/rec-types.c:1208 +msgid "invalid 'field' value." +msgstr "valeur « field » invalide." + +#: src/rec-types.c:1231 +msgid "invalid 'uuid' value." +msgstr "valeur « uuid » invalide." + +#: src/rec-types.c:1249 +msgid "invalid 'bool' value." +msgstr "valeur « bool » invalide." + +#: src/rec-types.c:1272 +msgid "invalid 'range' value." +msgstr "valeur « range » invalide." + +#: src/rec-types.c:1281 +#, c-format +msgid "expected an integer between %d and %d." +msgstr "entier entre %d et %d attendu." + +#: src/rec-types.c:1302 +msgid "invalid 'real' value." +msgstr "valeur « real » invalide." + +#: src/rec-types.c:1320 +#, c-format +msgid "value too large. Expected a size <= %zu." +msgstr "valeur trop grande. Taille attendue <= %zu." + +#: src/rec-types.c:1341 +msgid "invalid 'line' value." +msgstr "valeur « ligne » attendue." + +#: src/rec-types.c:1360 +msgid "value does not match the regexp." +msgstr "valeur ne correspond pas à l'expression régulière." + +#: src/rec-types.c:1383 +msgid "invalid date." +msgstr "date invalide." + +#: src/rec-types.c:1399 +msgid "invalid email." +msgstr "email invalide." + +#: src/rec-types.c:1444 +msgid "invalid enum value." +msgstr "valeur énumérée invalide." + +#: src/rec-utils.c:93 +#, c-format +msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" +msgstr "" +"erreur interne: rec_int_rec_extract_file: erreur à la compilation de la " +"regexp.\n" + +#: src/rec-utils.c:121 src/rec-utils.c:150 +#, c-format +msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" +msgstr "" +"erreur interne: rec_int_rec_extract_url: erreur à la compilation de la " +"regexp.\n" + +#: src/rec-utils.c:304 +#, c-format +msgid "internal error: rec_match: error compiling regexp.\n" +msgstr "erreur interne: rec_match: erreur à la compilation de la regexp.\n" + +#. TRANSLATORS: --help output, csv2rec synopsis. +#. no-wrap +#: utils/csv2rec.c:105 +#, c-format +msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" +msgstr "Usage: csv2rec [OPTIONS]… [FICHIER_CSV]\n" + +#. TRANSLATORS: --help output, csv2rec short description. +#. no-wrap +#: utils/csv2rec.c:110 +msgid "Convert csv data into rec data.\n" +msgstr "Convertit les données csv en des données d'enregistrement.\n" + +#. TRANSLATORS: --help output, csv2rec options. +#. no-wrap +#: utils/csv2rec.c:116 +msgid "" +" -t, --type=TYPE type name for the converted records; " +"if this\n" +" parameter is ommited then no type is " +"used.\n" +" -s, --strict be strict parsing the csv file.\n" +" -e, --omit-empty omit empty fields.\n" +msgstr "" +" -t, --type=TYPE nom de type pour les enregistrements " +"convertis; aucun type n'est utilisé\n" +" si ce paramètre est omis.\n" +" -s, --strict analyser le fichier csv de manière " +"stricte.\n" +" -e, --omit-empty omettre les champs vides.\n" + +#: utils/csv2rec.c:230 +#, c-format +msgid "invalid field name '%s' in header\n" +msgstr "nom de champ « %s » invalide dans l'en-tête\n" + +#: utils/csv2rec.c:259 +#, fuzzy, c-format +msgid "" +"%s: %lu: this line contains %lu fields, but %lu header fields were read\n" +msgstr "" +"%s: %d: cette ligne contient %d champs mais %d champs d'en-têtes ont été " +"lus\n" + +#: utils/csv2rec.c:347 utils/recdel.c:266 utils/recset.c:358 utils/recutl.c:328 +#, c-format +msgid "cannot read file %s\n" +msgstr "impossible de lire le fichier %s\n" + +#: utils/csv2rec.c:358 +msgid "failed to initialize csv parser\n" +msgstr "échec à l'initialisation de l'analyseur csv\n" + +#: utils/csv2rec.c:376 +#, c-format +msgid "error while parsing CSV file: %s\n" +msgstr "erreur lors de l'analyse du fichier CSV: %s\n" + +#. TRANSLATORS: --help output, mdb2rec synopsis. +#. no-wrap +#: utils/mdb2rec.c:103 +#, c-format +msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" +msgstr "Usage mdb2rec [OPTIONS]… FICHIER_MDB [TABLE]\n" + +#. TRANSLATORS: --help output, mdb2rec short description. +#. no-wrap +#: utils/mdb2rec.c:108 +msgid "Convert an mdb file into a rec file.\n" +msgstr "Convertit un fichier mdb en un fichier d'enregistrements.\n" + +#. TRANSLATORS: --help output, mdb2rec options. +#. no-wrap +#: utils/mdb2rec.c:114 +msgid "" +" -s, --system-tables include system tables.\n" +" -e, --keep-empty-fields don't prune empty fields in the rec\n" +" output.\n" +" -l, --list-tables dump a list of the table names " +"contained\n" +" in the mdb file.\n" +msgstr "" +" -s, --system-tables inclure les tables systèmes.\n" +" -e, --keep-empty-fields garder les champs vides dans la " +"sortie\n" +" des enregistrements.\n" +" -l, --list-tables afficher une liste des noms des " +"tables\n" +" contenues dans le fichier mdb.\n" + +#: utils/mdb2rec.c:251 utils/mdb2rec.c:315 +#, c-format +msgid "failed to normalise record type name %s\n" +msgstr "erreur lors de la normalisation du nom de type d'enregistrement %s\n" + +#: utils/mdb2rec.c:259 utils/mdb2rec.c:270 +#, c-format +msgid "failed to normalise field name %s\n" +msgstr "erreur lors de la normalisation du nom du champ %s\n" + +#: utils/mdb2rec.c:336 +#, c-format +msgid "failed to normalise the field name %s\n" +msgstr "erreur lors de la normalisation du nom du champ %s\n" + +#: utils/mdb2rec.c:443 utils/recins.c:208 utils/recset.c:253 +#, c-format +msgid "invalid field name %s.\n" +msgstr "nom de champ %s invalide.\n" + +#: utils/mdb2rec.c:482 +#, c-format +msgid "could not open file %s\n" +msgstr "le fichier %s n'a pas pu être ouvert\n" + +#: utils/mdb2rec.c:489 +msgid "file does not appear to be an Access database\n" +msgstr "le fichier ne semble pas être une base de données Access\n" + +#. TRANSLATORS: --help output, rec2csv synopsis. +#. no-wrap +#: utils/rec2csv.c:86 +#, c-format +msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" +msgstr "Usage: rec2csv [OPTIONS]… [FICHIER_ENRG]\n" + +#. TRANSLATORS: --help output, rec2csv short description. +#. no-wrap +#: utils/rec2csv.c:91 +msgid "Convert rec data into csv data.\n" +msgstr "Convertit les données enrg en données csv.\n" + +#. TRANSLATORS: --help output, rec2csv options. +#. no-wrap +#: utils/rec2csv.c:97 +msgid "" +" -d, --delim=char sets the deliminator (default ',')\n" +" -t, --type=TYPE record set to convert to csv; if this " +"parameter\n" +" is omitted then the default record " +"set is used\n" +" -S, --sort=FIELDS sort the output by the specified " +"fields.\n" +msgstr "" +" -d, --delim=CARACT change le délimiteur (« , » par " +"défaut)\n" +" -t, --type=TYPE ensemble d'enregistrements à convertir " +"en csv; l'ensemble d'enregistrements\n" +" par défaut est utilisé si ce " +"paramètre est omis\n" +" -S, --sort=CHAMPS trier la sortie selon les champs " +"spécifiés.\n" + +#: utils/rec2csv.c:142 +msgid "only one list of fields can be specified as a sorting criteria.\n" +msgstr "une seule liste de champs peut servir de critère de tri.\n" + +#: utils/rec2csv.c:149 +msgid "invalid field name list in -S.\n" +msgstr "liste de noms de champs invalide dans -S.\n" + +#: utils/rec2csv.c:155 utils/recsel.c:248 utils/recsel.c:286 +msgid "internal error creating fex.\n" +msgstr "erreur interne lors de la création de fex.\n" + +#. TRANSLATORS: --help output, recdel synopsis. +#. no-wrap +#: utils/recdel.c:89 +#, c-format +msgid "" +"Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [FILE]\n" +msgstr "" +"Usage: recdel [OPTIONS]… [-t TYPE] [-n NUM | -e EXPR_ENR | -q CHAÎNE | -m " +"NUM] [FICHIER]\n" + +#. TRANSLATORS: --help output, recdel short description. +#. no-wrap +#: utils/recdel.c:94 +msgid "Remove (or comment out) records from a rec file.\n" +msgstr "" +"Supprime (ou met en commentaire) les enregistrements du fichier enrg.\n" + +#. TRANSLATORS: --help output, recdel arguments. +#. no-wrap +#: utils/recdel.c:101 +msgid "" +" -c, --comment comment out the matching records " +"instead of\n" +" deleting them.\n" +" --force delete even in potentially dangerous " +"situations,\n" +" and if the deletion is violating " +"record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -c, --comment mettre en commentaire les " +"enregistrements correspondants au lieu de\n" +" les supprimer.\n" +" --force supprimer même dans des situations " +"potentiellement dangereuses\n" +" et si l'effacement viole des " +"restrictions d'enregistrements.\n" +" --no-external ne pas utiliser de descripteur " +"externe.\n" +" --verbose fournir un rapport détaillé si le " +"contrôle d'intégrité\n" +" échoue.\n" + +#. TRANSLATORS: --help output, notes on recdel. +#. no-wrap +#. TRANSLATORS: --help output, notes on recfix. +#. no-wrap +#. TRANSLATORS: --help output, notes on recins. +#. no-wrap +#: utils/recdel.c:119 utils/recfix.c:167 utils/recins.c:149 +msgid "" +"If no FILE is specified then the command acts like a filter, getting\n" +"the data from standard input and writing the result to standard output.\n" +msgstr "" +"Si aucun FICHIER n'est spécifié alors la commande agit comme un filtre " +"récupérant les\n" +"données depuis l'entrée standard et écrivant le résultat sur la sortie " +"standard.\n" + +#: utils/recdel.c:136 +#, c-format +msgid "no records of type %s found.\n" +msgstr "aucun enregistrement de type %s trouvé.\n" + +#: utils/recdel.c:227 +#, c-format +msgid "ignoring a request to delete all records of type %s.\n" +msgstr "ignore la demande de supprimer tous les enregistrements de type %s.\n" + +#: utils/recdel.c:229 +msgid "use --force if you really want to proceed, or use either -n or -e.\n" +msgstr "" +"utilisez --force si vous voulez réellement continuer ou alors utilisez -n ou " +"-e.\n" + +#: utils/recdel.c:237 +msgid "invalid selection expression.\n" +msgstr "expression de sélection invalide.\n" + +#: utils/recdel.c:276 utils/recfix.c:407 utils/recins.c:410 utils/recset.c:365 +#, c-format +msgid "file %s is not writable.\n" +msgstr "le fichier %s n'est pas accessible en écriture.\n" + +#. TRANSLATORS: --help output, recfix synopsis. +#. no-wrap +#: utils/recfix.c:117 +#, c-format +msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" +msgstr "Usage: recfix [OPTION]… [OPÉRATION] [OP_OPTION]… [FICHIER]\n" + +#. TRANSLATORS: --help output, recfix short description. +#. no-wrap +#: utils/recfix.c:122 +msgid "Check and fix rec files.\n" +msgstr "Vérifie et corrige les fichiers enrg.\n" + +#. TRANSLATORS: --help output, recfix global arguments. +#. no-wrap +#: utils/recfix.c:129 +msgid "" +" --no-external don't use external descriptors.\n" +" --force force the requested operation.\n" +msgstr "" +" --no-external ne pas utiliser de descripteur " +"externe.\n" +" --force forcer l'opération demandée.\n" + +#. TRANSLATORS: --help output, recfix operations. +#. no-wrap +#: utils/recfix.c:139 +msgid "" +"Operations:\n" +" --check check integrity of the specified " +"file. Default.\n" +" --sort sort the records in the specified " +"file.\n" +" --auto insert auto-generated fields in " +"records missing them.\n" +msgstr "" +"Opérations:\n" +" --check vérifie l'intégrité du fichier " +"spécifié. Défaut.\n" +" --sort trier les enregistrements dans le " +"fichier spécifié.\n" +" --auto insérer des champs auto-générés dans " +"les enregistrements où ils manquent.\n" + +#. TRANSLATORS: --help output, recfix operations related with encryption. +#. no-wrap +#: utils/recfix.c:149 +msgid "" +" --encrypt encrypt confidential fields in the " +"specified file.\n" +" --decrypt decrypt confidential fields in the " +"specified file.\n" +msgstr "" +" --encrypt chiffrer les champs confidentiels dans " +"le fichier spécifié.\n" +" --decrypt déchiffrer les champs confidentiels " +"dans le fichier spécifié.\n" + +#. TRANSLATORS: --help output, recfix encryption and decryption +#. options. +#. no-wrap +#: utils/recfix.c:158 +msgid "" +"De/Encryption options:\n" +" -s, --password=PASSWORD encrypt/decrypt with this password.\n" +msgstr "" +"Options de dé/chiffrement:\n" +" -s, --password=MOT_DE_PASSE chiffre/déchiffre avec ce mot de " +"passe.\n" + +#: utils/recfix.c:208 +msgid "--password|-s must be used as an operation argument.\n" +msgstr "--password|-s doit être utilisé comme un argument d'opération.\n" + +#: utils/recfix.c:214 +msgid "the specified operation does not require a password.\n" +msgstr "l'opération spécifiée n'a pas besoin de mot de passe.\n" + +#: utils/recfix.c:219 +msgid "please specify just one password.\n" +msgstr "veuillez n'indiquer qu'un seul mot de passe.\n" + +#: utils/recfix.c:230 utils/recfix.c:240 utils/recfix.c:250 utils/recfix.c:261 +#: utils/recfix.c:271 +msgid "please specify just one operation.\n" +msgstr "veuillez n'indiquer qu'une seule opération\n" + +#: utils/recfix.c:463 +msgid "the database contains already encrypted fields\n" +msgstr "la base de données contient déjà des champs chiffrés\n" + +#: utils/recfix.c:464 +msgid "please use --force or --decrypt\n" +msgstr "veuillez utiliser --force ou --decrypt\n" + +#: utils/recfix.c:574 +msgid "unknown operation in recfix: please report this as a bug.\n" +msgstr "" +"opération inconnue dans recfix: veuillez rapporter ceci comme un bug.\n" + +#. TRANSLATORS: --help output, recfmt synopsis. +#. no-wrap +#: utils/recfmt.c:78 +#, c-format +msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" +msgstr "Usage: recfmt [OPTION]… [MODÈLE]\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:83 +msgid "Apply a template to records read from standard input.\n" +msgstr "Appliquer un modèle aux enregistrements lus sur l'entrée standard.\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:89 +msgid "" +" -f, --file=FILENAME read the template to apply from a " +"file.\n" +msgstr "" +" -f, --file=FICHIER lire le modèle à appliquer dans le " +"fichier.\n" + +#: utils/recfmt.c:123 +#, c-format +msgid "can't open file %s for reading.\n" +msgstr "le fichier %s n'a pas pu être ouvert en lecture.\n" + +#: utils/recfmt.c:141 +msgid "don't specify a template in the command line and -f at the same time.\n" +msgstr "" +"ne spécifiez pas de modèle sur la ligne de commande et avec -f en même " +"temps.\n" + +#: utils/recfmt.c:164 +msgid "invalid expression in a template slot.\n" +msgstr "expression invalide dans un emplacement de modèle.\n" + +#: utils/recfmt.c:170 +msgid "error evaluating expression in a template slot.\n" +msgstr "" +"erreur lors de l'évaluation d'une expression dans un emplacement de modèle.\n" + +#: utils/recfmt.c:204 +msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" +msgstr "" +"recfmt_apply_template: erreur à la compilation de la regexp. Merci de " +"rapporter ceci.\n" + +#. TRANSLATORS: --help output, recinf synopsis. +#. no-wrap +#: utils/recinf.c:84 +#, c-format +msgid "Usage: recinf [OPTION]... [FILE]...\n" +msgstr "Usage: recinf [OPTION]… [FICHIER]…\n" + +#. TRANSLATORS: --help output, recinf short description. +#. no-wrap +#: utils/recinf.c:89 +msgid "Print information about the types of records stored in the input.\n" +msgstr "" +"Afficher les informations à propos des types d'enregistrements stockés dans " +"l'entrée.\n" + +#. TRANSLATORS: --help output, recinf arguments. +#. no-wrap +#: utils/recinf.c:96 +msgid "" +" -t, --type=RECORD_TYPE print information on the records having " +"the\n" +" specified type.\n" +" -d, --descriptor include the full record descriptors.\n" +" -n, --names-only output just the names of the record files\n" +" found in the input.\n" +msgstr "" +" -t, --type=TYPE_ENREGISTREMENT afficher les informations sur les " +"enregistrements ayant\n" +" le type spécifié.\n" +" -d, --descriptor inclure les descriptors complets de " +"l'enregistrement.\n" +" -n, --names-only afficher uniquement les noms des fichiers " +"d'enregistrements\n" +" rencontrés en entrée.\n" + +#. TRANSLATORS: --help output, recinf special options. +#. no-wrap +#: utils/recinf.c:109 +msgid "" +"Special options:\n" +" -S, --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Options spéciales:\n" +" -S, --print-sexps afficher les données en sexps au lieu " +"du format enrg.\n" + +#: utils/recinf.c:263 +#, c-format +msgid "error: cannot read file %s\n" +msgstr "erreur: impossible de lire le fichier %s\n" + +#. TRANSLATORS: --help output, recins synopsis. +#. no-wrap +#: utils/recins.c:111 +#, c-format +msgid "" +"Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" +msgstr "" +"Usage: recins [OPTION]… [-t TYPE] [-n NUM | -e EXPR_ENR | -q CHAÎNE | -m " +"NUM] [(-f CHAÎNE -v CHAÎNE]|[-r RECDATA)]… [FICHIER]\n" + +#. TRANSLATORS: --help output, recins short description. +#. no-wrap +#: utils/recins.c:116 +msgid "Insert new records in a rec database.\n" +msgstr "" +"Insérer les nouveaux enregistrements dans une base de données " +"d'enregistrements.\n" + +#. TRANSLATORS: --help output, recins arguments. +#. no-wrap +#: utils/recins.c:122 +msgid "" +" -f, --field=STR field name; should be followed by a -" +"v.\n" +" -v, --value=STR field value; should be preceded by an -" +"f.\n" +" -r, --record=STR record that will be inserted in the " +"file.\n" +" --force insert the record even if it is " +"violating\n" +" record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --no-auto don't insert auto generated fields.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -f, --field=CHAÎNE nom du champ; devrait être suivi par -" +"v.\n" +" -v, --value=CHAÎNE valeur du champ; devrait être précédé " +"par -f.\n" +" -r, --record=CHAÎNE enregistrement qui sera inséré dans le " +"fichier.\n" +" --force insérer l'enregistrement même si il " +"viole\n" +" les restrictions de " +"l'enregistrement.\n" +" --no-external ne pas utiliser de descripteur " +"externe.\n" +" --no-auto ne pas insérer de champ généré " +"automatiquement.\n" +" --verbose fournir un rapport détaillé si la " +"validation d'intégrité\n" +" échoue.\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recins.c:136 +msgid "" +" -s, --password=STR encrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=CHAÎNE chiffrer les champs confidentiels avec " +"ce mot de passe.\n" + +#: utils/recins.c:195 +msgid "a -f should be followed by a -v\n" +msgstr "un -f devrait être suivi par un -v\n" + +#: utils/recins.c:219 +msgid "a -v should be preceded by a -f\n" +msgstr "un -v devrait être précédé par un -f\n" + +#: utils/recins.c:244 utils/recsel.c:223 +msgid "more than one password was specified\n" +msgstr "plus d'un mot de passe a été spécifié\n" + +#: utils/recins.c:258 +msgid "error while parsing the record provided by -r\n" +msgstr "erreur lors de l'analyse de l'enregistrement fourni par -r\n" + +#: utils/recins.c:293 +#, c-format +msgid "please provide a value for the field %s\n" +msgstr "veuillez fournir une valeur pour le champ %s\n" + +#. TRANSLATORS: --help output, recsel synopsis. +#. no-wrap +#: utils/recsel.c:118 +#, c-format +msgid "" +"Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " +"| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" +msgstr "" +"Usage: recsel [OPTION]… [-t TYPE] [-j CHAMP] [-n INDEXES | -e EXPR_ENRG | -q " +"EXPR | -m NUM] [-c | (-p|-P) EXPR_CHAMP] [FICHIER]…\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:123 +msgid "Select and print rec data.\n" +msgstr "Sélectionne et affiche les données de l'enregistrement.\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:129 +msgid "" +" -d, --include-descriptors print record descriptors along with " +"the matched\n" +" records.\n" +" -C, --collapse do not section the result in records " +"with newlines.\n" +" -S, --sort=FIELD,... sort the output by the specified " +"fields.\n" +" -G, --group-by=FIELD,... group records by the specified " +"fields.\n" +" -U, --uniq remove duplicated fields in the output " +"records.\n" +msgstr "" +" -d, --include-descriptors afficher les descripteurs " +"d'enregistrements ainsi que les enregistrements\n" +" correspondants.\n" +" -C, --collapse ne pas séparer les résultats des " +"enregistrements avec des sauts de lignes.\n" +" -S, --sort=CHAMP,… trier la sortie selon le champ " +"spécifié.\n" +" -G, --group-by=CHAMP,… grouper les enregistrements selon le " +"champ spécifié.\n" +" -U, --uniq supprimer les champs dupliqués dans " +"les enregistrements de sortie.\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recsel.c:141 +msgid "" +" -s, --password=STR decrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=CHAÎNE déchiffrer les champs confidentiels " +"avec ce mot de passe.\n" + +#: utils/recsel.c:150 +msgid "" +" -j, --join=FIELD perform an inner join using the " +"specified field.\n" +msgstr "" +" -j, --join=CHAMP effectuer une jointure interne sur le " +"champ spécifié.\n" + +#. TRANSLATORS: --help output, recsel output options. +#. no-wrap +#: utils/recsel.c:157 +msgid "" +"Output options:\n" +" -p, --print=FIELDS comma-separated list of fields to " +"print for each\n" +" matching record.\n" +" -P, --print-values=FIELDS as -p, but print only the values of " +"the selected\n" +" fields.\n" +" -R, --print-row=FIELDS as -P, but separate the values with " +"spaces instead\n" +" of newlines.\n" +" -c, --count print a count of the matching records " +"instead of\n" +" the records themselves.\n" +msgstr "" +"Options de sortie:\n" +" -p, --print=CHAMPS liste séparée par des virgules des " +"champs à afficher pour chaque\n" +" enregistrement correspondant.\n" +" -P, --print-values=CHAMPS comme -p mais afficher uniquement les " +"valeurs des champs sélectionnés.\n" +" -R, --print-row=CHAMPS comme -P mais séparer les valeurs avec " +"des espaces au lieu\n" +" de sauts de lignes.\n" +" -c, --count afficher le décompte des " +"enregistrements correspondants au lieu\n" +" des enregistrements.\n" + +#. TRANSLATORS: --help output, recsel special options. +#. no-wrap +#: utils/recsel.c:171 +msgid "" +"Special options:\n" +" --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Options spéciales:\n" +" --print-sexps afficher les données en sexps au lieu " +"du format enrg.\n" + +#: utils/recsel.c:235 +msgid "only one field list can be specified as a sorting criteria.\n" +msgstr "une seule liste de champs peut servir de critère de tri.\n" + +#: utils/recsel.c:242 +msgid "invalid field names in -S.\n" +msgstr "noms de champ invalides dans -S.\n" + +#: utils/recsel.c:258 +msgid "only one field can be specified as join criteria.\n" +msgstr "un seul champ peut servir de critère de jointure.\n" + +#: utils/recsel.c:263 +msgid "please specify a correct field name to -j|--join.\n" +msgstr "veuillez spécifier un nom de champ correct avec -j|--join.\n" + +#: utils/recsel.c:274 +msgid "only one field list can be specified as a grouping criteria.\n" +msgstr "une seule liste de champs peut servir de critère de groupement.\n" + +#: utils/recsel.c:280 +msgid "invalid field names in -G.\n" +msgstr "noms de champ invalides dans -G.\n" + +#: utils/recsel.c:300 +msgid "cannot specify -[pPR] and also -c.\n" +msgstr "vous ne pouvez pas spécifier -[pPR] en même temps que -c.\n" + +#: utils/recsel.c:317 +#, c-format +msgid "invalid list of fields in -%c\n" +msgstr "liste de champs invalide dans -%c\n" + +#: utils/recsel.c:325 +msgid "internal error creating the field expression.\n" +msgstr "erreur interne lors de la création de l'expression de champ.\n" + +#: utils/recsel.c:340 +#, c-format +msgid "invalid aggregate function '%s'\n" +msgstr "fonction d'aggrégation « %s » invalide\n" + +#: utils/recsel.c:358 +msgid "cannot specify -c and also -p.\n" +msgstr "vous ne pouvez pas spécifier -c en même temps que -p.\n" + +#: utils/recsel.c:377 +msgid "joins can only be used when a named record set is selected.\n" +msgstr "" +"les jointures peuvent uniquement être utilisées si un ensemble " +"d'enregistrements nommés est sélectionné.\n" + +#: utils/recsel.c:439 +msgid "several record types found. Please use -t to specify one.\n" +msgstr "" +"plusieurs types d'enregistrements trouvés. Veuillez utiliser -t pour en " +"spécifier un.\n" + +#. TRANSLATORS: --help output, recset synopsis. +#. no-wrap +#: utils/recset.c:113 +#, c-format +msgid "Usage: recset [OPTION]... [FILE]...\n" +msgstr "Usage: recset [OPTION]… [FICHIER]…\n" + +#. TRANSLATORS: --help output, recset short description. +#. no-wrap +#: utils/recset.c:118 +msgid "Alter or delete fields in records.\n" +msgstr "Altérer ou éditer les champs dans les enregistrements.\n" + +#. TRANSLATORS: --help output, recset options. +#. no-wrap +#: utils/recset.c:124 +msgid "" +" --no-external don't use external descriptors.\n" +" --force alter the records even if violating " +"record\n" +" restrictions.\n" +msgstr "" +" --no-external ne pas utiliser de descripteur " +"externe.\n" +" --force altérer les enregistrements même si " +"cela viole les restrictions\n" +" des enregistrements.\n" + +#. TRANSLATORS: --help output, recset field selection options. +#. no-wrap +#: utils/recset.c:137 +msgid "" +"Field selection options:\n" +" -f, --fields=FIELDS comma-separated list of field names " +"with optional\n" +" subscripts.\n" +msgstr "" +"Options de sélection des champs:\n" +" -f, --fields=CHAMPS liste séparée par des virgules des " +"noms des champs avec\n" +" les indices optionnels.\n" + +#. TRANSLATORS: --help output, recset actions. +#. no-wrap +#: utils/recset.c:145 +msgid "" +"Actions:\n" +" -s, --set=VALUE change the value of the selected " +"fields.\n" +" -a, --add=VALUE add the selected fields with the given " +"value.\n" +" -S, --set-add=VALUE change the value of the selected " +"fields. If they don't\n" +" exist then add a new field with that " +"value.\n" +" -r, --rename=NAME rename the selected fields to a given " +"name. If an entire\n" +" record set is selected then the " +"field is renamed in the\n" +" record descriptor as well.\n" +" -d, --delete delete the selected fields.\n" +" -c, --comment comment out the selected fields.\n" +msgstr "" +"Actions:\n" +" -s, --set=VALEUR changer la valeur des champs " +"sélectionnés.\n" +" -a, --add=VALEUR ajouter les champs sélectionnés avec " +"la valeur indiquée.\n" +" -S, --set-add=VALEUR changer la valeur des champs " +"sélectionner. Si ils n'existent pas,\n" +" ajouter un nouveau champ avec cette " +"valeur.\n" +" -r, --rename=NOM renommer les champs sélectionnés avec " +"le nom indiqué. Si un ensemble complet\n" +" d'enregistrements est sélectionné, " +"alors le champ est également renommé dans\n" +" le descripteur d'enregistrement.\n" +" -d, --delete effacer les champs sélectionnés.\n" +" -c, --comment mettre en commentaire les champs " +"sélectionnés.\n" + +#: utils/recset.c:168 +msgid "please specify some field with -f.\n" +msgstr "veuillez spécifier des champs avec -f.\n" + +#: utils/recset.c:173 +msgid "please specify just one action.\n" +msgstr "veuillez ne spécifier qu'une seule action.\n" + +#: utils/recset.c:213 +msgid "invalid field expression in -f.\n" +msgstr "expression de champ invalide dans -f.\n" + +#: utils/recset.c:221 +msgid "creating the field expression.\n" +msgstr "création de l'expression de champ.\n" + +#: utils/recset.c:243 +msgid "" +"the rename operation requires just one field with an optional subscript.\n" +msgstr "" +"l'opération de renommage requiert un seul champ avec un indice optionnel.\n" + +#. TRANSLATORS: --help output 5+ (reports) +#. TRANSLATORS: the placeholder indicates the bug-reporting address +#. for this application. Please add _another line_ with the +#. address for translation bugs. +#. no-wrap +#: utils/recutl.c:122 +#, c-format +msgid "Report bugs to: %s\n" +msgstr "" +"Signalez les bugs à: %s\n" +"Signalez les erreurs de traduction à: traduc@traduc.org\n" + +#: utils/recutl.c:131 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" +msgstr "Page d'accueil de %s: <http://www.gnu.org/software/recutils/>\n" + +#: utils/recutl.c:134 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Aide générale sur l'utilisation des logiciels GNU: <http://www.gnu.org/" +"gethelp/>\n" + +#. TRANSLATORS: --help output, common arguments. +#. no-wrap +#: utils/recutl.c:143 +msgid "" +" --help print a help message and exit.\n" +" --version show version and exit.\n" +msgstr "" +" --help afficher un message d'aide et " +"quitter.\n" +" --version afficher la version et quitter.\n" + +#. TRANSLATORS: --help output, record selection arguments +#. no-wrap +#: utils/recutl.c:154 +msgid "" +"Record selection options:\n" +" -i, --case-insensitive make strings case-insensitive in " +"selection\n" +" expressions.\n" +" -t, --type=TYPE operate on records of the specified " +"type only.\n" +" -e, --expression=RECORD_EXPR selection expression.\n" +" -q, --quick=STR select records with fields containing " +"a string.\n" +" -n, --number=NUM,... select specific records by position, " +"with ranges.\n" +" -m, --random=NUM select a given number of random " +"records.\n" +msgstr "" +"Options de sélection des enregistrements:\n" +" -i, --case-insensitive rendre les chaînes insensibles à la " +"casse dans les expressions\n" +" de sélection.\n" +" -t, --type=TYPE agir uniquement sur les " +"enregistrements du type sélectionné.\n" +" -e, --expression=EXPR_ENR expression de sélection.\n" +" -q, --quick=CHAÎNE sélectionner les enregistrements avec " +"des champs contenant une chaîne.\n" +" -n, --number=NUM,… sélectionner les enregistrements " +"spécifiés par position (plage permise).\n" +" -m, --random=NUM sélectionner un nombre aléatoire " +"d'enregistrements.\n" + +#: utils/recutl.c:179 +#, c-format +msgid "" +"Copyright (C) %s Jose E. Marchesi.\n" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +msgstr "" +"Copyright (C) %s Jose E. Marchesi.\n" +"License GPLv3+: GNU GPL version 3 ou supérieure <http://gnu.org/licenses/gpl." +"html>.\n" +"Ceci est un logiciel libre: vous êtes libre de le changer et de le " +"redistribuer.\n" +"Il n'y a PAS de GARANTIE, dans les limites permises par la loi.\n" + +#: utils/recutl.c:185 +msgid "" +"\n" +"Written by Jose E. Marchesi." +msgstr "" +"\n" +"Écrit par Jose E. Marchesi." + +#: utils/recutl.c:197 utils/recutl.c:217 +msgid ": error: " +msgstr ": erreur: " + +#: utils/recutl.c:229 +msgid ": warning: " +msgstr ": avertissement: " + +#: utils/recutl.c:254 +#, c-format +msgid "duplicated record set '%s' from %s.\n" +msgstr "ensemble d'enregistrement « %s » en double dans %s.\n" + +#: utils/recutl.c:417 +msgid "cannot create a unique name.\n" +msgstr "impossible de créer un nom unique.\n" + +#: utils/recutl.c:438 +#, c-format +msgid "renaming file %s to %s\n" +msgstr "renomme le fichier %s en %s\n" + +#: utils/recutl.c:482 +msgid "operation aborted due to integrity failures.\n" +msgstr "opération annulée à cause d'erreurs d'intégrité.\n" + +#: utils/recutl.c:483 +msgid "use --verbose to get a detailed report.\n" +msgstr "utilisez --verbose pour obtenir un rapport détaillé.\n" + +#: utils/recutl.c:490 +msgid "use --force to skip the integrity check.\n" +msgstr "utilisez --force pour ignorer la validation d'intégrité.\n" + +#: utils/recutl.c:551 +msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" +msgstr "" +"erreur interne: recutl_index_list_parse: erreur à la compilation de la " +"regexp.\n" + +#: utils/recutl.c:626 +msgid "Password: " +msgstr "Mot de passe: " + +#: utils/recutl.c:632 +msgid "Password again: " +msgstr "Mot de passe, à nouveau: " + +#: utils/recutl.c:637 +msgid "the provided passwords don't match.\n" +msgstr "les mots de passes entrés ne sont pas les mêmes.\n" + +#: utils/recutl.h:97 utils/recutl.h:186 utils/recutl.h:190 +#, fuzzy +msgid "cannot specify -e and also -n\n" +msgstr "vous ne pouvez pas spécifier -c en même temps que -p.\n" + +#: utils/recutl.h:102 +#, fuzzy +msgid "cannot specify -e and also -q\n" +msgstr "vous ne pouvez pas spécifier -c en même temps que -p.\n" + +#: utils/recutl.h:113 +#, fuzzy +msgid "invalid selection expression\n" +msgstr "expression de sélection invalide.\n" + +#: utils/recutl.h:125 +#, fuzzy +msgid "cannot specify -n and also -e\n" +msgstr "vous ne pouvez pas spécifier -c en même temps que -p.\n" + +#: utils/recutl.h:130 +#, fuzzy +msgid "cannot specify -n and also -q\n" +msgstr "vous ne pouvez pas spécifier -c en même temps que -p.\n" + +#: utils/recutl.h:140 +#, fuzzy +msgid "invalid list of indexes in -n\n" +msgstr "liste de champs invalide dans -%c\n" + +#: utils/recutl.h:150 +#, fuzzy +msgid "cannot specify -m and also -e\n" +msgstr "vous ne pouvez pas spécifier -c en même temps que -p.\n" + +#: utils/recutl.h:155 +#, fuzzy +msgid "cannot specify -m and also -q\n" +msgstr "vous ne pouvez pas spécifier -c en même temps que -p.\n" + +#: utils/recutl.h:160 +#, fuzzy +msgid "cannot specify -m and also -n\n" +msgstr "vous ne pouvez pas spécifier -c en même temps que -p.\n" + +#~ msgid "%s: option '--%s' doesn't allow an argument\n" +#~ msgstr "%s: l'option « --%s » n'accepte pas d'argument\n" + +#~ msgid "%s: unrecognized option '--%s'\n" +#~ msgstr "%s: option « --%s » pas reconnue\n" + +#~ msgid "%s: option '-W %s' doesn't allow an argument\n" +#~ msgstr "%s: l'option « -W %s » n'accepte pas d'argument\n" + +#~ msgid "%s: option '-W %s' requires an argument\n" +#~ msgstr "%s: l'option « -W %s » exige un argument\n" + +#~ msgid "" +#~ "%s:%s: warning: type %s collides with referred type %s in the rset %s.\n" +#~ msgstr "" +#~ "%s:%s: attention: le type %s entre en collision avec le type référé %s " +#~ "dans le rset %s.\n" + +#~ msgid "%s:%s: error: value for %s shall be a field name.\n" +#~ msgstr "%s:%s: erreur: la valeur de %s sera un nom de champ.\n" + +#~ msgid "reached maximum number of fields: %d\n" +#~ msgstr "nombre maximum de champs atteint: %d\n" + +#~ msgid "not enough headers" +#~ msgstr "pas assez d'en-têtes" + +#~ msgid "out of memory" +#~ msgstr "à cours de mémoire" + +#~ msgid "evaluating the selection expression.\n" +#~ msgstr "évaluation de l'expression sélectionnée.\n" + +#~ msgid "reading file %s" +#~ msgstr "lecture du fichier %s" + +#~ msgid "internal error: rec_resolver_check: error compiling regexp.\n" +#~ msgstr "" +#~ "erreur interne: rec_resolver_check: erreur lors de la compilation de la " +#~ "regexp.\n" + +#~ msgid "internal error: rec_field_name_part_str_p: error compiling regexp.\n" +#~ msgstr "" +#~ "erreur interne: rec_field_name_part_str_p: erreur à la compilation de la " +#~ "regexp.\n" + +#~ msgid "internal error: rec_int_rec_type_p: error compiling regexp.\n" +#~ msgstr "" +#~ "erreur interne: rec_int_rec_type_p: erreur à la compilation de la " +#~ "regexp.\n" + +#~ msgid "internal error: rec-types: error compiling regexp.\n" +#~ msgstr "erreur interne: rec-types: erreur à la compilation de la regexp.\n" + +#~ msgid "" +#~ "the record set contains confidential fields but no password was provided\n" +#~ msgstr "" +#~ "l'ensemble d'enregistrements contient des champs confidentiels mais aucun " +#~ "mot de passe n'a été fourni\n" + +#~ msgid "the resulting record will have those fields unencrypted!\n" +#~ msgstr "l'enregistrement résultant contiendra ces champs non chiffrés !\n" diff --git a/devspec.en_US/project/recutils/po/insert-header.sin b/devspec.en_US/project/recutils/po/insert-header.sin new file mode 100755 index 0000000..b26de01 --- /dev/null +++ b/devspec.en_US/project/recutils/po/insert-header.sin @@ -0,0 +1,23 @@ +# Sed script that inserts the file called HEADER before the header entry. +# +# At each occurrence of a line starting with "msgid ", we execute the following +# commands. At the first occurrence, insert the file. At the following +# occurrences, do nothing. The distinction between the first and the following +# occurrences is achieved by looking at the hold space. +/^msgid /{ +x +# Test if the hold space is empty. +s/m/m/ +ta +# Yes it was empty. First occurrence. Read the file. +r HEADER +# Output the file's contents by reading the next line. But don't lose the +# current line while doing this. +g +N +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/devspec.en_US/project/recutils/po/nl.gmo b/devspec.en_US/project/recutils/po/nl.gmo new file mode 100755 index 0000000000000000000000000000000000000000..68c22078cd5569ab657b6f209a79192897cf1669 GIT binary patch literal 33948 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 Z^sv&q;H49Np$<Jx^U7o$EO7qq{{r7+#_#|D literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/po/nl.po b/devspec.en_US/project/recutils/po/nl.po new file mode 100755 index 0000000..05714f1 --- /dev/null +++ b/devspec.en_US/project/recutils/po/nl.po @@ -0,0 +1,2148 @@ +# Dutch translations for GNU recutils. +# Copyright (C) 2014 Free Software Foundation, Inc. +# This file is distributed under the same license as the recutils package. +# +# « Si le nez de Cléopatre avait été plus long, +# Jules César se serait piqué le ventre. » +# +# Benno Schulenberg <benno@vertaalt.nl>, 2011, 2012, 2013, 2014. +msgid "" +msgstr "" +"Project-Id-Version: recutils 1.6.90\n" +"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" +"POT-Creation-Date: 2019-01-03 10:32+0100\n" +"PO-Revision-Date: 2014-03-20 21:55+0100\n" +"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n" +"Language-Team: Dutch <vertaling@vrijschrift.org>\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#: lib/closeout.c:122 +msgid "write error" +msgstr "schrijffout" + +#: lib/copy-acl.c:54 +#, c-format +msgid "preserving permissions for %s" +msgstr "" + +#: lib/error.c:195 +msgid "Unknown system error" +msgstr "Onbekende systeemfout" + +#: lib/execute.c:185 lib/execute.c:258 lib/wait-process.c:282 +#: lib/wait-process.c:356 +#, c-format +msgid "%s subprocess failed" +msgstr "subproces %s is mislukt" + +#: lib/getopt.c:278 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous\n" +msgstr "%s: optie '-W %s' is niet eenduidig\n" + +#: lib/getopt.c:284 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous; possibilities:" +msgstr "%s: optie '%s' is niet eenduidig; mogelijkheden zijn:" + +#: lib/getopt.c:319 +#, fuzzy, c-format +msgid "%s: unrecognized option '%s%s'\n" +msgstr "%s: onbekende optie '%c%s'\n" + +#: lib/getopt.c:345 +#, fuzzy, c-format +msgid "%s: option '%s%s' doesn't allow an argument\n" +msgstr "%s: optie '%c%s' staat geen argument toe\n" + +#: lib/getopt.c:360 +#, fuzzy, c-format +msgid "%s: option '%s%s' requires an argument\n" +msgstr "%s: optie '--%s' vereist een argument\n" + +#: lib/getopt.c:621 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ongeldige optie -- '%c'\n" + +#: lib/getopt.c:636 lib/getopt.c:682 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: optie vereist een argument -- '%c'\n" + +#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "onvoldoende geheugen beschikbaar" + +#: parse-datetime.y:440 parse-datetime.y:540 +#, c-format +msgid "parsed %s part: " +msgstr "" + +#: parse-datetime.y:455 +#, c-format +msgid "year: %04<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:483 +#, c-format +msgid "%s (day ordinal=%<PRIdMAX> number=%d)" +msgstr "" + +#: parse-datetime.y:514 +#, c-format +msgid "number of seconds: %<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:547 +msgid "today/this/now\n" +msgstr "" + +#: parse-datetime.y:612 +msgid "number of seconds" +msgstr "" + +#: parse-datetime.y:625 +msgid "datetime" +msgstr "" + +#: parse-datetime.y:630 +msgid "time" +msgstr "" + +#: parse-datetime.y:635 +msgid "local_zone" +msgstr "" + +#: parse-datetime.y:640 +msgid "zone" +msgstr "" + +#: parse-datetime.y:645 +msgid "date" +msgstr "" + +#: parse-datetime.y:650 +msgid "day" +msgstr "" + +#: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 +msgid "relative" +msgstr "" + +#: parse-datetime.y:658 +msgid "number" +msgstr "" + +#: parse-datetime.y:662 +msgid "hybrid" +msgstr "" + +#: parse-datetime.y:820 +#, c-format +msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" +msgstr "" + +#: parse-datetime.y:832 +#, c-format +msgid "" +"warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" +msgstr "" + +#: parse-datetime.y:1276 +#, c-format +msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1286 +#, c-format +msgid "error: out-of-range year %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1524 +#, fuzzy, c-format +msgid "error: unknown word '%s'\n" +msgstr "fout: kan bestand %s niet lezen.\n" + +#: parse-datetime.y:1673 +#, fuzzy +msgid "error: invalid date/time value:\n" +msgstr "ongeldige opsommingswaarde." + +#: parse-datetime.y:1674 +#, c-format +msgid " user provided time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1676 +#, c-format +msgid " normalized time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1699 +msgid " possible reasons:\n" +msgstr "" + +#: parse-datetime.y:1701 +msgid " non-existing due to daylight-saving time;\n" +msgstr "" + +#: parse-datetime.y:1703 +msgid " invalid day/month combination;\n" +msgstr "" + +#: parse-datetime.y:1704 +msgid " numeric values overflow;\n" +msgstr "" + +#: parse-datetime.y:1705 +msgid "incorrect timezone" +msgstr "" + +#: parse-datetime.y:1706 +msgid "missing timezone" +msgstr "" + +#: parse-datetime.y:1826 +msgid "error: initial year out of range\n" +msgstr "" + +#: parse-datetime.y:1923 +#, fuzzy +msgid "error: parsing failed\n" +msgstr "fout tijdens ontleden van CSV-bestand: %s\n" + +#: parse-datetime.y:1924 +#, fuzzy, c-format +msgid "error: parsing failed, stopped at '%s'\n" +msgstr "fout tijdens ontleden van CSV-bestand: %s\n" + +#: parse-datetime.y:1934 +msgid "input timezone: " +msgstr "" + +#: parse-datetime.y:1937 +#, c-format +msgid "'@timespec' - always UTC" +msgstr "" + +#: parse-datetime.y:1939 +#, c-format +msgid "parsed date/time string" +msgstr "" + +#: parse-datetime.y:1943 +#, c-format +msgid "TZ=\"%s\" in date string" +msgstr "" + +#: parse-datetime.y:1947 +#, c-format +msgid "TZ=\"UTC0\" environment value or -u" +msgstr "" + +#: parse-datetime.y:1950 +#, c-format +msgid "TZ=\"%s\" environment value" +msgstr "" + +#: parse-datetime.y:1953 +#, c-format +msgid "system default" +msgstr "" + +#: parse-datetime.y:1995 +msgid "error: year, month, or day overflow\n" +msgstr "" + +#: parse-datetime.y:2006 +#, fuzzy, c-format +msgid "error: invalid hour %<PRIdMAX>%s\n" +msgstr "%s:%s: fout: ongeldig recordtype %s\n" + +#: parse-datetime.y:2014 +#, c-format +msgid "using specified time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2015 +#, c-format +msgid "using current time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2069 +#, c-format +msgid "error: tzalloc (\"%s\") failed\n" +msgstr "" + +#: parse-datetime.y:2114 +#, c-format +msgid "" +"error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " +"date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2125 +#, c-format +msgid "new start date: '%s' is '%s'\n" +msgstr "" + +#: parse-datetime.y:2134 +#, c-format +msgid "using current date as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2138 +#, c-format +msgid "warning: day (%s) ignored when explicit dates are given\n" +msgstr "" + +#: parse-datetime.y:2142 +#, c-format +msgid "starting date/time: '%s'\n" +msgstr "" + +#: parse-datetime.y:2152 +msgid "" +"warning: when adding relative months/years, it is recommended to specify the " +"15th of the months\n" +msgstr "" + +#: parse-datetime.y:2157 +msgid "warning: when adding relative days, it is recommended to specify noon\n" +msgstr "" + +#: parse-datetime.y:2167 +#, fuzzy, c-format +msgid "error: %s:%d\n" +msgstr ": fout: " + +#: parse-datetime.y:2181 +#, c-format +msgid "error: adding relative date resulted in an invalid date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2190 +#, c-format +msgid "" +"after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " +"days),\n" +msgstr "" + +#: parse-datetime.y:2194 +#, c-format +msgid " new date/time = '%s'\n" +msgstr "" + +#: parse-datetime.y:2213 +msgid "warning: daylight saving time changed after date adjustment\n" +msgstr "" + +#: parse-datetime.y:2232 +msgid "warning: month/year adjustment resulted in shifted dates:\n" +msgstr "" + +#: parse-datetime.y:2235 +#, c-format +msgid " adjusted Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2237 +#, c-format +msgid " normalized Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2265 +#, c-format +msgid "error: timezone %d caused time_t overflow\n" +msgstr "" + +#: parse-datetime.y:2275 +#, c-format +msgid "'%s' = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2303 +msgid "error: adding relative time caused an overflow\n" +msgstr "" + +#: parse-datetime.y:2314 +#, c-format +msgid "" +"after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " +"seconds, %+d ns),\n" +msgstr "" + +#: parse-datetime.y:2319 +#, c-format +msgid " new time = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2335 +msgid "warning: daylight saving time changed after time adjustment\n" +msgstr "" + +#: parse-datetime.y:2345 +msgid "timezone: system default\n" +msgstr "" + +#: parse-datetime.y:2347 +msgid "timezone: Universal Time\n" +msgstr "" + +#: parse-datetime.y:2349 +#, c-format +msgid "timezone: TZ=\"%s\" environment value\n" +msgstr "" + +#: parse-datetime.y:2353 +#, c-format +msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" +msgstr "" + +#: parse-datetime.y:2359 +#, c-format +msgid "final: %s (UTC)\n" +msgstr "" + +#: parse-datetime.y:2374 +#, c-format +msgid "final: %s (UTC%s)\n" +msgstr "" + +#: parse-datetime.y:2378 +#, c-format +msgid "final: %s (unknown time zone offset)\n" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". For example, a French Unicode local should translate +#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), respectively. +#. +#. If the catalog has no translation, we will try to +#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and +#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the +#. current locale is not Unicode, locale_quoting_style +#. will quote 'like this', and clocale_quoting_style will +#. quote "like this". You should always include translations +#. for "`" and "'" even if U+2018 and U+2019 are appropriate +#. for your locale. +#. +#. If you don't know what to put here, please see +#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:362 +msgid "`" +msgstr "‘" + +#: lib/quotearg.c:363 +msgid "'" +msgstr "’" + +#: lib/regcomp.c:135 +msgid "Success" +msgstr "Gelukt" + +#: lib/regcomp.c:138 +msgid "No match" +msgstr "Geen overeenkomsten" + +#: lib/regcomp.c:141 +msgid "Invalid regular expression" +msgstr "Ongeldige reguliere expressie" + +# Zie http://mailman.vrijschrift.org/pipermail/vertaling/2005-August/004670.html +#: lib/regcomp.c:144 +msgid "Invalid collation character" +msgstr "Ongeldig samengesteld teken" + +#: lib/regcomp.c:147 +msgid "Invalid character class name" +msgstr "Ongeldige tekenklassenaam" + +#: lib/regcomp.c:150 +msgid "Trailing backslash" +msgstr "Backslash aan het eind" + +#: lib/regcomp.c:153 +msgid "Invalid back reference" +msgstr "Ongeldige terugverwijzing" + +#: lib/regcomp.c:156 +#, fuzzy +msgid "Unmatched [, [^, [:, [., or [=" +msgstr "Ongepaarde [ of [^" + +#: lib/regcomp.c:159 +msgid "Unmatched ( or \\(" +msgstr "Ongepaarde ( of \\(" + +#: lib/regcomp.c:162 +msgid "Unmatched \\{" +msgstr "Ongepaarde \\{" + +#: lib/regcomp.c:165 +msgid "Invalid content of \\{\\}" +msgstr "Ongeldige inhoud van \\{\\}" + +#: lib/regcomp.c:168 +msgid "Invalid range end" +msgstr "Ongeldig bereikeinde" + +#: lib/regcomp.c:171 +msgid "Memory exhausted" +msgstr "Onvoldoende geheugen beschikbaar" + +#: lib/regcomp.c:174 +msgid "Invalid preceding regular expression" +msgstr "Ongeldige voorafgaande reguliere expressie" + +#: lib/regcomp.c:177 +msgid "Premature end of regular expression" +msgstr "Voortijdig einde van reguliere expressie" + +#: lib/regcomp.c:180 +msgid "Regular expression too big" +msgstr "Reguliere expressie is te groot" + +#: lib/regcomp.c:183 +msgid "Unmatched ) or \\)" +msgstr "Ongepaarde ) of \\)" + +#: lib/regcomp.c:676 +msgid "No previous regular expression" +msgstr "Geen eerdere reguliere expressie" + +#: lib/set-acl.c:46 +#, c-format +msgid "setting permissions for %s" +msgstr "" + +#: lib/version-etc.c:73 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:76 +#, c-format +msgid "Packaged by %s\n" +msgstr "" + +#. TRANSLATORS: Translate "(C)" to the copyright symbol +#. (C-in-a-circle), if this symbol is available in the user's +#. locale. Otherwise, do not translate "(C)"; leave it as-is. +#: lib/version-etc.c:83 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:85 +#, fuzzy +msgid "" +"\n" +"License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +"\n" +msgstr "" +"Copyright (C) %s Jose E. Marchesi.\n" +"Dit is vrije software: u mag het vrijelijk wijzigen en verder verspreiden.\n" +"De precieze licentie is GPL-3+: GNU General Public License versie 3 of " +"later.\n" +"Zie http://gnu.org/licenses/gpl.html voor de volledige (Engelse) tekst.\n" +"Deze software kent GEEN GARANTIE, voor zover de wet dit toestaat.\n" +"\n" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, fuzzy, c-format +msgid "Written by %s and %s.\n" +msgstr "" +"\n" +"Geschreven door Jose E. Marchesi." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, fuzzy, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "" +"\n" +"Geschreven door Jose E. Marchesi." + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:117 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" + +#. TRANSLATORS: The placeholder indicates the bug-reporting address +#. for this package. Please add _another line_ saying +#. "Report translation bugs to <...>\n" with the address for translation +#. bugs (typically your translation team's web or email address). +#: lib/version-etc.c:245 +#, fuzzy, c-format +msgid "" +"\n" +"Report bugs to: %s\n" +msgstr "" +"Rapporteer gebreken in het programma aan <%s>;\n" +"meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n" + +#: lib/version-etc.c:247 utils/recutl.c:125 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" +"Rapporteer gebreken in het programma '%s' aan <%s>;\n" +"meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n" + +#: lib/version-etc.c:251 utils/recutl.c:129 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Webpagina van %s: <%s>\n" + +#: lib/version-etc.c:253 +#, fuzzy, c-format +msgid "%s home page: <https://www.gnu.org/software/%s/>\n" +msgstr "Webpagina van %s: <http://www.gnu.org/software/recutils/>\n" + +#: lib/version-etc.c:256 +#, fuzzy +msgid "General help using GNU software: <https://www.gnu.org/gethelp/>\n" +msgstr "" +"Algemene hulp bij gebruik van GNU-software: <http://www.gnu.org/gethelp/>\n" + +#: lib/w32spawn.h:49 +#, c-format +msgid "_open_osfhandle failed" +msgstr "_open_osfhandle() is mislukt" + +#: lib/w32spawn.h:90 +#, c-format +msgid "cannot restore fd %d: dup2 failed" +msgstr "kan bestandsdescriptor %d niet herstellen: dup2() is mislukt" + +#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317 +#, c-format +msgid "%s subprocess" +msgstr "subproces %s" + +#: lib/wait-process.c:274 lib/wait-process.c:346 +#, c-format +msgid "%s subprocess got fatal signal %d" +msgstr "subproces %s ontving het fatale signaal %d" + +#: src/rec-fex.c:451 +#, c-format +msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" +msgstr "" +"**interne programmafout**: REC_FEX_MAX_ELEMS is overschreden.\n" +"Rapporteer dit alstublieft aan de maker.\n" + +#: src/rec-int.c:176 +#, c-format +msgid "%s: error: the number of records of type %s should be %zd.\n" +msgstr "%s: fout: het aantal records van type %s moet %zd zijn.\n" + +#: src/rec-int.c:186 +#, c-format +msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" +msgstr "%s: fout: te veel records van type %s; maximum aantal is %zd.\n" + +#: src/rec-int.c:193 +#, c-format +msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" +msgstr "%s: fout: te weinig records van type %s; minimum aantal is %zd.\n" + +#: src/rec-int.c:409 src/rec-int.c:463 src/rec-int.c:520 src/rec-int.c:564 +#: utils/recutl.c:207 +msgid "out of memory\n" +msgstr "onvoldoende geheugen beschikbaar\n" + +#: src/rec-int.c:424 +#, c-format +msgid "%s:%s: error: mandatory field '%s' not found in record\n" +msgstr "%s:%s: fout: verplicht veld '%s' niet gevonden in record\n" + +#: src/rec-int.c:487 +#, c-format +msgid "%s:%s: error: field '%s' not allowed in this record set\n" +msgstr "%s:%s: fout: veld '%s' is niet toegestaan in deze recordset\n" + +#: src/rec-int.c:534 +#, c-format +msgid "%s:%s: error: field '%s' should be unique in this record\n" +msgstr "%s:%s: fout: veld '%s' moet uniek zijn in dit record\n" + +#: src/rec-int.c:578 +#, c-format +msgid "%s:%s: error: prohibited field '%s' found in record\n" +msgstr "%s:%s: fout: verboden veld '%s' gevonden in record\n" + +#: src/rec-int.c:610 +#, c-format +msgid "%s:%s: error: %%constraint[%d] violated in record\n" +msgstr "%s:%s: error: %%begrenzing[%d] is overschreden in record\n" + +#: src/rec-int.c:647 +#, c-format +msgid "%s:%s: error: confidential field is not encrypted\n" +msgstr "%s:%s: fout: vertrouwelijk veld is niet versleuteld\n" + +#: src/rec-int.c:699 +#, c-format +msgid "%s:%s: error: key field '%s' not found in record\n" +msgstr "%s:%s: fout: sleutelveld '%s' niet gevonden in record\n" + +#: src/rec-int.c:708 +#, c-format +msgid "%s:%s: error: multiple key fields '%s' in record\n" +msgstr "%s:%s: fout: meerdere sleutelvelden '%s' in record\n" + +#: src/rec-int.c:751 +#, c-format +msgid "%s:%s: error: duplicated key value in field '%s' in record\n" +msgstr "%s:%s: fout: duplicaat sleutel in veld '%s' in record\n" + +#: src/rec-int.c:799 +#, c-format +msgid "%s:%s: error: missing %%rec field in record descriptor\n" +msgstr "%s:%s: fout: ontbrekend %%rec-veld in recorddescriptor\n" + +#: src/rec-int.c:807 +#, c-format +msgid "%s:%s: error: too many %%rec fields in record descriptor\n" +msgstr "%s:%s: fout: te veel %%rec-velden in recorddescriptor\n" + +#: src/rec-int.c:817 +#, c-format +msgid "%s:%s: error: invalid record type %s\n" +msgstr "%s:%s: fout: ongeldig recordtype %s\n" + +#: src/rec-int.c:828 +#, c-format +msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" +msgstr "" +"%s:%s: fout: slechts één %%key-veld is toegestaan in een recorddescriptor\n" + +#: src/rec-int.c:838 +#, c-format +msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" +msgstr "" +"%s:%s: fout: slechts één %%size-veld is toegestaan in een recorddescriptor\n" + +#: src/rec-int.c:848 +#, c-format +msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" +msgstr "" +"%s:%s: fout: slechts één %%sort-veld is toegestaan in een recorddescriptor\n" + +#: src/rec-int.c:871 +#, c-format +msgid "" +"%s:%s: error: expected a comma-separated list of fields before the type " +"specification\n" +msgstr "" +"%s:%s: fout: er werd een kommagescheiden lijst van velden verwacht vóór de " +"typespecificatie\n" + +#: src/rec-int.c:897 src/rec-int.c:950 +#, c-format +msgid "%s:%s: error: the referred type %s does not exist\n" +msgstr "%s:%s: fout: genoemd type %s bestaat niet\n" + +#: src/rec-int.c:909 +#, c-format +msgid "%s:%s: error: invalid type specification\n" +msgstr "%s:%s: fout: ongeldige typespecificatie\n" + +#: src/rec-int.c:924 +#, c-format +msgid "%s:%s: error: expected a type name before the type specification\n" +msgstr "%s:%s: fout: er wordt een typenaam verwacht vóór de typespecificatie\n" + +#: src/rec-int.c:962 +#, c-format +msgid "%s:%s: error: invalid typedef specification\n" +msgstr "%s:%s: fout: ongeldige 'typedef'-specificatie\n" + +#: src/rec-int.c:984 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" +msgstr "" +"%s:%s: fout: de waarde van %s[%zd] is geen geldige selectie-expressie\n" + +#: src/rec-int.c:1015 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" +msgstr "%s:%s: fout: de waarde van %s[%zd] is geen lijst van veldnamen\n" + +#: src/rec-int.c:1028 +#, c-format +msgid "" +"%s:%s: error: value for %s should be a number optionally preceded by >, <, " +">= or <=.\n" +msgstr "" +"%s: %s: fout: de waarde voor %s moet een getal zijn,\n" +"eventueel voorafgegaan door '>', '<', '>=' of '<='.\n" + +#: src/rec-int.c:1044 +#, c-format +msgid "%s:%s: error: value for %s should be a list of field names.\n" +msgstr "%s:%s: fout: de waarde van %s moet een lijst van veldnamen zijn\n" + +#: src/rec-int.c:1072 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range, uuid " +"or date\n" +msgstr "" +"%s:%s: fout: automatisch opgehoogd veld '%s' moet een geheel getal, bereik, " +"UUID of datum zijn\n" + +#: src/rec-int.c:1074 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range or " +"date\n" +msgstr "" +"%s:%s: fout: automatisch opgehoogd veld '%s' moet een geheel getal, bereik " +"of datum zijn\n" + +#: src/rec-int.c:1157 +#, c-format +msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" +msgstr "%s:%s: fout: kan descriptor op afstand niet laden vanaf URL %s.\n" + +#: src/rec-int.c:1176 +#, c-format +msgid "%s:%s: error: could not read external descriptor from file %s.\n" +msgstr "%s:%s: fout: kan externe descriptor niet laden uit bestand %s.\n" + +#: src/rec-int.c:1191 +#, c-format +msgid "%s:%s: error: %s does not contain valid rec data.\n" +msgstr "%s:%s: fout: %s bevat geen geldige rec-gegevens.\n" + +#: src/rec-int.c:1205 +#, c-format +msgid "%s:%s: error: %s does not contain information for type %s.\n" +msgstr "%s:%s: fout: %s bevat geen informatie voor type %s.\n" + +#: src/rec-types.c:448 +#, c-format +msgid "" +"internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " +"in rec_type_new().\n" +msgstr "" +"**interne programmafout**: REC_TYPE_NONE gekregen van " +"rec_type_parse_type_kind() in rec_type_new().\n" + +#: src/rec-types.c:1178 +msgid "invalid integer." +msgstr "ongeldig geheel getal." + +#: src/rec-types.c:1208 +msgid "invalid 'field' value." +msgstr "ongeldige waarde voor 'field'." + +#: src/rec-types.c:1231 +msgid "invalid 'uuid' value." +msgstr "ongeldige waarde voor UUID." + +#: src/rec-types.c:1249 +msgid "invalid 'bool' value." +msgstr "ongeldige waarde voor 'bool'." + +#: src/rec-types.c:1272 +msgid "invalid 'range' value." +msgstr "ongeldige waarde voor 'range'." + +#: src/rec-types.c:1281 +#, c-format +msgid "expected an integer between %d and %d." +msgstr "verwachtte een geheel getal tussen %d en %d." + +#: src/rec-types.c:1302 +msgid "invalid 'real' value." +msgstr "ongeldige waarde voor 'real'." + +#: src/rec-types.c:1320 +#, c-format +msgid "value too large. Expected a size <= %zu." +msgstr "waarde is te groot. Verwachtte een grootte <= %zu." + +#: src/rec-types.c:1341 +msgid "invalid 'line' value." +msgstr "ongeldige waarde voor 'line'." + +#: src/rec-types.c:1360 +msgid "value does not match the regexp." +msgstr "waarde komt niet overeen met reguliere expressie." + +#: src/rec-types.c:1383 +msgid "invalid date." +msgstr "ongeldige datum." + +#: src/rec-types.c:1399 +msgid "invalid email." +msgstr "ongeldig e-mailadres." + +#: src/rec-types.c:1444 +msgid "invalid enum value." +msgstr "ongeldige opsommingswaarde." + +#: src/rec-utils.c:93 +#, c-format +msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" +msgstr "" +"**interne programmafout**: rec_int_rec_extract_file(): fout bij compileren " +"van regexp.\n" + +#: src/rec-utils.c:121 src/rec-utils.c:150 +#, c-format +msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" +msgstr "" +"**interne programmafout**: rec_int_rec_extract_url(): fout bij compileren " +"van regexp.\n" + +#: src/rec-utils.c:304 +#, c-format +msgid "internal error: rec_match: error compiling regexp.\n" +msgstr "" +"**interne programmafout**: rec_match: fout bij compileren van regexp.\n" + +#. TRANSLATORS: --help output, csv2rec synopsis. +#. no-wrap +#: utils/csv2rec.c:105 +#, c-format +msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" +msgstr "Gebruik: csv2rec [OPTIE...] [CSV-BESTAND]\n" + +#. TRANSLATORS: --help output, csv2rec short description. +#. no-wrap +#: utils/csv2rec.c:110 +msgid "Convert csv data into rec data.\n" +msgstr "Converteert kommagescheiden gegevens naar rec-gegevens.\n" + +#. TRANSLATORS: --help output, csv2rec options. +#. no-wrap +#: utils/csv2rec.c:116 +msgid "" +" -t, --type=TYPE type name for the converted records; " +"if this\n" +" parameter is ommited then no type is " +"used.\n" +" -s, --strict be strict parsing the csv file.\n" +" -e, --omit-empty omit empty fields.\n" +msgstr "" +" -t, --type=TYPE typenaam voor geconverteerde records; als deze " +"optie\n" +" weggelaten wordt, dan wordt geen type gebruikt\n" +" -s, --strict streng zijn bij ontleden van CSV-bestand\n" +" -e, --omit-empty lege velden weglaten\n" + +#: utils/csv2rec.c:230 +#, c-format +msgid "invalid field name '%s' in header\n" +msgstr "ongeldige veldnaam '%s' in kopregel\n" + +#: utils/csv2rec.c:259 +#, fuzzy, c-format +msgid "" +"%s: %lu: this line contains %lu fields, but %lu header fields were read\n" +msgstr "" +"%s: %d: deze regel bevat %d velden, maar er werden %d kopvelden gelezen\n" + +#: utils/csv2rec.c:347 utils/recdel.c:266 utils/recset.c:358 utils/recutl.c:328 +#, c-format +msgid "cannot read file %s\n" +msgstr "kan bestand %s niet lezen\n" + +#: utils/csv2rec.c:358 +msgid "failed to initialize csv parser\n" +msgstr "initialiseren van CSV-ontleder is mislukt\n" + +#: utils/csv2rec.c:376 +#, c-format +msgid "error while parsing CSV file: %s\n" +msgstr "fout tijdens ontleden van CSV-bestand: %s\n" + +#. TRANSLATORS: --help output, mdb2rec synopsis. +#. no-wrap +#: utils/mdb2rec.c:103 +#, c-format +msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" +msgstr "Gebruik: mdb2rec [OPTIE...] MDB-BESTAND [TABEL]\n" + +#. TRANSLATORS: --help output, mdb2rec short description. +#. no-wrap +#: utils/mdb2rec.c:108 +msgid "Convert an mdb file into a rec file.\n" +msgstr "Converteert een mdb-bestand naar een rec-bestand.\n" + +#. TRANSLATORS: --help output, mdb2rec options. +#. no-wrap +#: utils/mdb2rec.c:114 +msgid "" +" -s, --system-tables include system tables.\n" +" -e, --keep-empty-fields don't prune empty fields in the rec\n" +" output.\n" +" -l, --list-tables dump a list of the table names " +"contained\n" +" in the mdb file.\n" +msgstr "" +" -s, --system-tables ook de systeemtabellen tonen\n" +" -e, --keep-empty-fields lege velden in rec-uitvoer niet weglaten\n" +" -l, --list-tables een lijst van tabelnamen in mdb-bestand tonen\n" + +#: utils/mdb2rec.c:251 utils/mdb2rec.c:315 +#, c-format +msgid "failed to normalise record type name %s\n" +msgstr "kan recordtypenaam %s niet normaliseren.\n" + +#: utils/mdb2rec.c:259 utils/mdb2rec.c:270 +#, c-format +msgid "failed to normalise field name %s\n" +msgstr "kan veldnaam %s niet normaliseren.\n" + +#: utils/mdb2rec.c:336 +#, c-format +msgid "failed to normalise the field name %s\n" +msgstr "kan veldnaam %s niet normaliseren.\n" + +#: utils/mdb2rec.c:443 utils/recins.c:208 utils/recset.c:253 +#, c-format +msgid "invalid field name %s.\n" +msgstr "ongeldige veldnaam %s.\n" + +#: utils/mdb2rec.c:482 +#, c-format +msgid "could not open file %s\n" +msgstr "kan bestand %s niet openen.\n" + +#: utils/mdb2rec.c:489 +msgid "file does not appear to be an Access database\n" +msgstr "bestand schijnt geen Access-databank te zijn.\n" + +#. TRANSLATORS: --help output, rec2csv synopsis. +#. no-wrap +#: utils/rec2csv.c:86 +#, c-format +msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" +msgstr "Gebruik: rec2csv [OPTIE...] [REC-BESTAND]\n" + +#. TRANSLATORS: --help output, rec2csv short description. +#. no-wrap +#: utils/rec2csv.c:91 +msgid "Convert rec data into csv data.\n" +msgstr "Converteert rec-gegevens naar kommagescheiden gegevens.\n" + +#. TRANSLATORS: --help output, rec2csv options. +#. no-wrap +#: utils/rec2csv.c:97 +msgid "" +" -d, --delim=char sets the deliminator (default ',')\n" +" -t, --type=TYPE record set to convert to csv; if this " +"parameter\n" +" is omitted then the default record " +"set is used\n" +" -S, --sort=FIELDS sort the output by the specified " +"fields.\n" +msgstr "" +" -d, --delim=TEKEN te gebruiken scheidingsteken (standaard ',')\n" +" -t, --type=TYPE te converteren recordset; als deze optie " +"weggelaten\n" +" wordt, dan wordt de standaard recordset " +"gebruikt\n" +" -S, --sort=VELD,... de uitvoer sorteren op deze velden\n" + +#: utils/rec2csv.c:142 +msgid "only one list of fields can be specified as a sorting criteria.\n" +msgstr "" +"er kan slechts één lijst van velden gegeven worden als sorteercriterium.\n" + +#: utils/rec2csv.c:149 +msgid "invalid field name list in -S.\n" +msgstr "ongeldige veldnamenlijst bij optie '-S'.\n" + +#: utils/rec2csv.c:155 utils/recsel.c:248 utils/recsel.c:286 +msgid "internal error creating fex.\n" +msgstr "**interne programmafout** tijdens aanmaken van de veldexpressie.\n" + +#. TRANSLATORS: --help output, recdel synopsis. +#. no-wrap +#: utils/recdel.c:89 +#, c-format +msgid "" +"Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [FILE]\n" +msgstr "" +"Gebruik: recdel [OPTIE...] [-t TYPE]\n" +" [-n NUMMER | -e RECORDEXPRESSIE | -q TEKENREEKS | -m " +"GETAL]\n" +" [BESTAND]\n" + +#. TRANSLATORS: --help output, recdel short description. +#. no-wrap +#: utils/recdel.c:94 +msgid "Remove (or comment out) records from a rec file.\n" +msgstr "Verwijdert records uit een rec-bestand (of zet ze om in commentaar).\n" + +#. TRANSLATORS: --help output, recdel arguments. +#. no-wrap +#: utils/recdel.c:101 +msgid "" +" -c, --comment comment out the matching records " +"instead of\n" +" deleting them.\n" +" --force delete even in potentially dangerous " +"situations,\n" +" and if the deletion is violating " +"record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -c, --comment van de overeenkomende records commentaar maken\n" +" in plaats van ze te verwijderen\n" +" --force records ook verwijderen als dit mogelijk " +"gevaar\n" +" oplevert of beperkingen overtreedt\n" +" --no-external geen externe descriptors gebruiken\n" +" --verbose een gedetailleerd rapport produceren als de\n" +" integriteitscontrole faalt\n" + +#. TRANSLATORS: --help output, notes on recdel. +#. no-wrap +#. TRANSLATORS: --help output, notes on recfix. +#. no-wrap +#. TRANSLATORS: --help output, notes on recins. +#. no-wrap +#: utils/recdel.c:119 utils/recfix.c:167 utils/recins.c:149 +msgid "" +"If no FILE is specified then the command acts like a filter, getting\n" +"the data from standard input and writing the result to standard output.\n" +msgstr "" +"Als geen BESTAND gegeven is dan fungeert de opdracht als een filter: het " +"leest\n" +"de gegevens van standaardinvoer en schrijft het resultaat naar " +"standaarduitvoer.\n" + +#: utils/recdel.c:136 +#, c-format +msgid "no records of type %s found.\n" +msgstr "geen records van type %s gevonden.\n" + +#: utils/recdel.c:227 +#, c-format +msgid "ignoring a request to delete all records of type %s.\n" +msgstr "verzoek om alle records van type %s te verwijderen wordt genegeerd.\n" + +#: utils/recdel.c:229 +msgid "use --force if you really want to proceed, or use either -n or -e.\n" +msgstr "" +"gebruik optie '--force' als u echt door wilt gaan, of gebruik '-n' of '-e'\n" + +#: utils/recdel.c:237 +msgid "invalid selection expression.\n" +msgstr "ongeldige selectie-expressie.\n" + +#: utils/recdel.c:276 utils/recfix.c:407 utils/recins.c:410 utils/recset.c:365 +#, c-format +msgid "file %s is not writable.\n" +msgstr "bestand %s is niet schrijfbaar.\n" + +#. TRANSLATORS: --help output, recfix synopsis. +#. no-wrap +#: utils/recfix.c:117 +#, c-format +msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" +msgstr "" +"Gebruik: recfix [OPTIE...] [BEWERKING] [BEWERKINGSOPTIE...] [BESTAND]\n" + +#. TRANSLATORS: --help output, recfix short description. +#. no-wrap +#: utils/recfix.c:122 +msgid "Check and fix rec files.\n" +msgstr "Controleert en repareert rec-bestanden.\n" + +#. TRANSLATORS: --help output, recfix global arguments. +#. no-wrap +#: utils/recfix.c:129 +msgid "" +" --no-external don't use external descriptors.\n" +" --force force the requested operation.\n" +msgstr "" +" --no-external geen externe descriptors gebruiken\n" +" --force de gevraagde bewerking afdwingen\n" + +#. TRANSLATORS: --help output, recfix operations. +#. no-wrap +#: utils/recfix.c:139 +msgid "" +"Operations:\n" +" --check check integrity of the specified " +"file. Default.\n" +" --sort sort the records in the specified " +"file.\n" +" --auto insert auto-generated fields in " +"records missing them.\n" +msgstr "" +"Bewerkingen:\n" +" --check integriteit van gegeven bestand controleren\n" +" --sort de records in het gegeven bestand sorteren\n" +" --auto automatisch gegenereerde velden invoegen\n" +" in records waarin ze ontbreken\n" + +#. TRANSLATORS: --help output, recfix operations related with encryption. +#. no-wrap +#: utils/recfix.c:149 +msgid "" +" --encrypt encrypt confidential fields in the " +"specified file.\n" +" --decrypt decrypt confidential fields in the " +"specified file.\n" +msgstr "" +" --encrypt vertrouwelijke velden versleutelen\n" +" --decrypt vertrouwelijke velden ontsleutelen\n" + +#. TRANSLATORS: --help output, recfix encryption and decryption +#. options. +#. no-wrap +#: utils/recfix.c:158 +msgid "" +"De/Encryption options:\n" +" -s, --password=PASSWORD encrypt/decrypt with this password.\n" +msgstr "" +"Versleutelings-/Ontsleutelingsoptie:\n" +" -s, --password=WACHTWOORD versleutelen/ontsleutelen met dit wachtwoord\n" + +#: utils/recfix.c:208 +msgid "--password|-s must be used as an operation argument.\n" +msgstr "optie '--password' ('-s') moet gebruikt worden als bewerkingsoptie\n" + +#: utils/recfix.c:214 +msgid "the specified operation does not require a password.\n" +msgstr "de opgegeven bewerking vraagt geen wachtwoord.\n" + +#: utils/recfix.c:219 +msgid "please specify just one password.\n" +msgstr "u kunt slechts één wachtwoord opgeven.\n" + +#: utils/recfix.c:230 utils/recfix.c:240 utils/recfix.c:250 utils/recfix.c:261 +#: utils/recfix.c:271 +msgid "please specify just one operation.\n" +msgstr "u kunt slechts één bewerking opgeven.\n" + +#: utils/recfix.c:463 +msgid "the database contains already encrypted fields\n" +msgstr "de databank bevat al versleutelde velden\n" + +#: utils/recfix.c:464 +msgid "please use --force or --decrypt\n" +msgstr "gebruik ofwel '--force' ofwel '--decrypt'\n" + +#: utils/recfix.c:574 +msgid "unknown operation in recfix: please report this as a bug.\n" +msgstr "" +"onbekende bewerking in 'recfix'; rapporteer dit als een programmafout.\n" + +#. TRANSLATORS: --help output, recfmt synopsis. +#. no-wrap +#: utils/recfmt.c:78 +#, c-format +msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" +msgstr "Gebruik: recfmt [OPTIE...] [SJABLOON]\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:83 +msgid "Apply a template to records read from standard input.\n" +msgstr "Past een sjabloon toe op de records gelezen van standaardinvoer.\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:89 +msgid "" +" -f, --file=FILENAME read the template to apply from a " +"file.\n" +msgstr "" +" -f, --file=BESTANDSNAAM te gebruiken sjabloon uit dit bestand lezen\n" + +#: utils/recfmt.c:123 +#, c-format +msgid "can't open file %s for reading.\n" +msgstr "kan bestand %s niet openen om te lezen.\n" + +#: utils/recfmt.c:141 +msgid "don't specify a template in the command line and -f at the same time.\n" +msgstr "optie '-f' gaat niet samen met een sjabloon op de opdrachtregel.\n" + +#: utils/recfmt.c:164 +msgid "invalid expression in a template slot.\n" +msgstr "ongeldige expressie opgegeven voor sjabloon.\n" + +#: utils/recfmt.c:170 +msgid "error evaluating expression in a template slot.\n" +msgstr "fout tijdens evalueren van sjabloonexpressie.\n" + +#: utils/recfmt.c:204 +msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" +msgstr "" +"**interne programmafout**: recfmt_apply_template(): fout bij compileren van " +"regexp.\n" + +#. TRANSLATORS: --help output, recinf synopsis. +#. no-wrap +#: utils/recinf.c:84 +#, c-format +msgid "Usage: recinf [OPTION]... [FILE]...\n" +msgstr "Gebruik: recinf [OPTIE...] [BESTAND...]\n" + +#. TRANSLATORS: --help output, recinf short description. +#. no-wrap +#: utils/recinf.c:89 +msgid "Print information about the types of records stored in the input.\n" +msgstr "Toont informatie over de soorten records aanwezig in de invoer.\n" + +#. TRANSLATORS: --help output, recinf arguments. +#. no-wrap +#: utils/recinf.c:96 +msgid "" +" -t, --type=RECORD_TYPE print information on the records having " +"the\n" +" specified type.\n" +" -d, --descriptor include the full record descriptors.\n" +" -n, --names-only output just the names of the record files\n" +" found in the input.\n" +msgstr "" +" -t, --type=RECORDTYPE alleen informatie tonen over records van dit " +"type\n" +" -d, --descriptor ook de volledige recorddescriptors tonen\n" +" -n, --names-only alleen de namen van de recordbestanden tonen\n" + +#. TRANSLATORS: --help output, recinf special options. +#. no-wrap +#: utils/recinf.c:109 +msgid "" +"Special options:\n" +" -S, --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Speciaal:\n" +" -S, --print-sexps de gegevens als S-expressies tonen\n" +" in plaats van in rec-indeling\n" + +#: utils/recinf.c:263 +#, c-format +msgid "error: cannot read file %s\n" +msgstr "fout: kan bestand %s niet lezen.\n" + +#. TRANSLATORS: --help output, recins synopsis. +#. no-wrap +#: utils/recins.c:111 +#, c-format +msgid "" +"Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" +msgstr "" +"Gebruik: recins [OPTIE...] [-t TYPE]\n" +" [-n NUMMER | -e RECORDEXPRESSIE | -q TEKENREEKS | -m " +"GETAL]\n" +" [(-f VELDNAAM -v TEKENREEKS) | -r REC-GEGEVENS]... " +"[BESTAND]\n" + +#. TRANSLATORS: --help output, recins short description. +#. no-wrap +#: utils/recins.c:116 +msgid "Insert new records in a rec database.\n" +msgstr "Voegt nieuwe records in in rec-databank.\n" + +#. TRANSLATORS: --help output, recins arguments. +#. no-wrap +#: utils/recins.c:122 +msgid "" +" -f, --field=STR field name; should be followed by a -" +"v.\n" +" -v, --value=STR field value; should be preceded by an -" +"f.\n" +" -r, --record=STR record that will be inserted in the " +"file.\n" +" --force insert the record even if it is " +"violating\n" +" record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --no-auto don't insert auto generated fields.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -f, --field=NAAM veldnaam (dient gevolgd te worden door '-v')\n" +" -v, --value=TEKENREEKS veldwaarde (dient voorafgegaan te worden door '-" +"f')\n" +" -r, --record=NAAM in het bestand in te voegen record\n" +" --force records ook wijzigen als dit beperkingen " +"overtreedt\n" +" --no-external geen externe descriptors gebruiken\n" +" --no-auto geen automatisch gegenereerde velden invoegen\n" +" --verbose een gedetailleerd rapport produceren als de\n" +" integriteitscontrole faalt\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recins.c:136 +msgid "" +" -s, --password=STR encrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=WOORD vertrouwelijke velden versleutelen met dit " +"wachtwoord\n" + +#: utils/recins.c:195 +msgid "a -f should be followed by a -v\n" +msgstr "optie '-f' dient gevolgd te worden door optie '-v'.\n" + +#: utils/recins.c:219 +msgid "a -v should be preceded by a -f\n" +msgstr "optie '-v' dient voorafgegaan te worden door optie '-f'.\n" + +#: utils/recins.c:244 utils/recsel.c:223 +msgid "more than one password was specified\n" +msgstr "er is meer dan één wachtwoord opgegeven\n" + +#: utils/recins.c:258 +msgid "error while parsing the record provided by -r\n" +msgstr "fout tijdens ontleden van record gegeven met optie '-r'.\n" + +#: utils/recins.c:293 +#, c-format +msgid "please provide a value for the field %s\n" +msgstr "u dient een waarde op te geven voor veld %s.\n" + +#. TRANSLATORS: --help output, recsel synopsis. +#. no-wrap +#: utils/recsel.c:118 +#, c-format +msgid "" +"Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " +"| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" +msgstr "" +"Gebruik: recsel [OPTIE...] [-t TYPE] [-j VELDNAAM]\n" +" [-n INDEXEN | -e RECORDEXPRESSIE | -q TEKENREEKS | -m " +"GETAL]\n" +" [-c | (-p|-P) VELDEXPRESSIE] [BESTAND...]\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:123 +msgid "Select and print rec data.\n" +msgstr "Selecteert en toont rec-gegevens.\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:129 +msgid "" +" -d, --include-descriptors print record descriptors along with " +"the matched\n" +" records.\n" +" -C, --collapse do not section the result in records " +"with newlines.\n" +" -S, --sort=FIELD,... sort the output by the specified " +"fields.\n" +" -G, --group-by=FIELD,... group records by the specified " +"fields.\n" +" -U, --uniq remove duplicated fields in the output " +"records.\n" +msgstr "" +" -d, --include-descriptors bij de overeenkomende records ook\n" +" de recorddescriptors tonen\n" +" -C, --collapse de records niet scheiden met nieuwe regels\n" +" -G, --group-by=VELD,... de records groeperen op deze velden\n" +" -S, --sort=VELD,... de uitvoer sorteren op deze velden\n" +" -U, --uniq duplicaatvelden in uitvoerrecords weglaten\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recsel.c:141 +msgid "" +" -s, --password=STR decrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=WOORD vertrouwelijke velden ontsleutelen met dit " +"wachtwoord\n" + +#: utils/recsel.c:150 +msgid "" +" -j, --join=FIELD perform an inner join using the " +"specified field.\n" +msgstr "" +" -j, --join=VELD een interne samenvoeging uitvoeren via dit veld\n" + +#. TRANSLATORS: --help output, recsel output options. +#. no-wrap +#: utils/recsel.c:157 +msgid "" +"Output options:\n" +" -p, --print=FIELDS comma-separated list of fields to " +"print for each\n" +" matching record.\n" +" -P, --print-values=FIELDS as -p, but print only the values of " +"the selected\n" +" fields.\n" +" -R, --print-row=FIELDS as -P, but separate the values with " +"spaces instead\n" +" of newlines.\n" +" -c, --count print a count of the matching records " +"instead of\n" +" the records themselves.\n" +msgstr "" +"Uitvoeropties:\n" +" -p, --print=VELDEN kommagescheiden lijst van te tonen velden voor\n" +" elk overeenkomend record\n" +" -P, --print-values=VELDEN als -p, maar alleen de veldwaarden tonen\n" +" -R, --print-row=FIELDS als -P, maar de waarden scheiden met spaties\n" +" in plaats van nieuwe regels\n" +" -c, --count alleen het aantal overeenkomende records tonen\n" + +#. TRANSLATORS: --help output, recsel special options. +#. no-wrap +#: utils/recsel.c:171 +msgid "" +"Special options:\n" +" --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Speciaal:\n" +" --print-sexps de gegevens als S-expressies tonen\n" +" in plaats van in rec-indeling\n" + +#: utils/recsel.c:235 +msgid "only one field list can be specified as a sorting criteria.\n" +msgstr "" +"er kan slechts één veldnamenlijst gegeven worden als sorteercriterium.\n" + +#: utils/recsel.c:242 +msgid "invalid field names in -S.\n" +msgstr "ongeldige veldnamen bij optie '-S'.\n" + +#: utils/recsel.c:258 +msgid "only one field can be specified as join criteria.\n" +msgstr "er kan slechts één veld gegeven worden als samenvoegingscriterium.\n" + +#: utils/recsel.c:263 +msgid "please specify a correct field name to -j|--join.\n" +msgstr "u dient bij optie '-j|--join' een geldige veldnaam op te geven.\n" + +#: utils/recsel.c:274 +msgid "only one field list can be specified as a grouping criteria.\n" +msgstr "" +"er kan slechts één veldnamenlijst gegeven worden als groeperingscriterium.\n" + +#: utils/recsel.c:280 +msgid "invalid field names in -G.\n" +msgstr "ongeldige veldnamen bij optie '-G'.\n" + +#: utils/recsel.c:300 +msgid "cannot specify -[pPR] and also -c.\n" +msgstr "opties '-c' en '-[pPR][' gaan niet samen.\n" + +#: utils/recsel.c:317 +#, c-format +msgid "invalid list of fields in -%c\n" +msgstr "ongeldige veldnamenlijst bij '-%c'.\n" + +#: utils/recsel.c:325 +msgid "internal error creating the field expression.\n" +msgstr "**interne programmafout** tijdens aanmaken van de veldexpressie.\n" + +#: utils/recsel.c:340 +#, c-format +msgid "invalid aggregate function '%s'\n" +msgstr "ongeldige verzamelfunctie '%s'\n" + +#: utils/recsel.c:358 +msgid "cannot specify -c and also -p.\n" +msgstr "opties '-c' en '-p' gaan niet samen.\n" + +#: utils/recsel.c:377 +msgid "joins can only be used when a named record set is selected.\n" +msgstr "" +"samenvoegingen kunnen alleen gebruikt worden wanneer een benoemde recordset " +"geselecteerd is.\n" + +#: utils/recsel.c:439 +msgid "several record types found. Please use -t to specify one.\n" +msgstr "" +"meerdere recordtypes gevonden. Gebruik optie '-t' om er één op te geven.\n" + +#. TRANSLATORS: --help output, recset synopsis. +#. no-wrap +#: utils/recset.c:113 +#, c-format +msgid "Usage: recset [OPTION]... [FILE]...\n" +msgstr "Gebruik: recset [OPTIE...] [BESTAND...]\n" + +#. TRANSLATORS: --help output, recset short description. +#. no-wrap +#: utils/recset.c:118 +msgid "Alter or delete fields in records.\n" +msgstr "Wijzigt of verwijdert velden in records.\n" + +#. TRANSLATORS: --help output, recset options. +#. no-wrap +#: utils/recset.c:124 +msgid "" +" --no-external don't use external descriptors.\n" +" --force alter the records even if violating " +"record\n" +" restrictions.\n" +msgstr "" +" --no-external geen externe descriptors gebruiken\n" +" --force records ook wijzigen als dit beperkingen " +"overtreedt\n" + +#. TRANSLATORS: --help output, recset field selection options. +#. no-wrap +#: utils/recset.c:137 +msgid "" +"Field selection options:\n" +" -f, --fields=FIELDS comma-separated list of field names " +"with optional\n" +" subscripts.\n" +msgstr "" +"Veldselectie:\n" +" -f, --fields=VELDEN kommagescheiden lijst van veldnamen\n" +" met optionele indexwaarden\n" + +#. TRANSLATORS: --help output, recset actions. +#. no-wrap +#: utils/recset.c:145 +msgid "" +"Actions:\n" +" -s, --set=VALUE change the value of the selected " +"fields.\n" +" -a, --add=VALUE add the selected fields with the given " +"value.\n" +" -S, --set-add=VALUE change the value of the selected " +"fields. If they don't\n" +" exist then add a new field with that " +"value.\n" +" -r, --rename=NAME rename the selected fields to a given " +"name. If an entire\n" +" record set is selected then the " +"field is renamed in the\n" +" record descriptor as well.\n" +" -d, --delete delete the selected fields.\n" +" -c, --comment comment out the selected fields.\n" +msgstr "" +"Acties:\n" +" -s, --set=WAARDE deze waarde aan de geselecteerde velden " +"toekennen\n" +" -a, --add=WAARDE de geselecteerde velden met deze waarde " +"toevoegen\n" +" -S, --set-add=WAARDE deze waarde aan de geselecteerde velden " +"toekennen;\n" +" als die velden niet bestaan, dan een nieuw " +"veld\n" +" met deze waarde aanmaken\n" +" -r, --rename=NAAM de geselecteerde velden naar deze naam " +"hernoemen;\n" +" als een gehele recordset geselecteerd is, " +"dan\n" +" het veld ook hernoemen in de " +"recorddescriptor\n" +" -d, --delete de geselecteerde velden verwijderen\n" +" -c, --comment de geselecteerde velden omzetten in commentaar\n" + +#: utils/recset.c:168 +msgid "please specify some field with -f.\n" +msgstr "u dient bij optie '-f' een veld op te geven.\n" + +#: utils/recset.c:173 +msgid "please specify just one action.\n" +msgstr "u kunt slechts één actie opgeven.\n" + +#: utils/recset.c:213 +msgid "invalid field expression in -f.\n" +msgstr "ongeldige veldexpressie bij optie '-f'.\n" + +#: utils/recset.c:221 +msgid "creating the field expression.\n" +msgstr "aanmaken van de veldexpressie.\n" + +#: utils/recset.c:243 +msgid "" +"the rename operation requires just one field with an optional subscript.\n" +msgstr "hernoemen vereist slechts één veld met een optionele index.\n" + +#. TRANSLATORS: --help output 5+ (reports) +#. TRANSLATORS: the placeholder indicates the bug-reporting address +#. for this application. Please add _another line_ with the +#. address for translation bugs. +#. no-wrap +#: utils/recutl.c:122 +#, c-format +msgid "Report bugs to: %s\n" +msgstr "" +"Rapporteer gebreken in het programma aan <%s>;\n" +"meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n" + +#: utils/recutl.c:131 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" +msgstr "Webpagina van %s: <http://www.gnu.org/software/recutils/>\n" + +#: utils/recutl.c:134 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Algemene hulp bij gebruik van GNU-software: <http://www.gnu.org/gethelp/>\n" + +#. TRANSLATORS: --help output, common arguments. +#. no-wrap +#: utils/recutl.c:143 +msgid "" +" --help print a help message and exit.\n" +" --version show version and exit.\n" +msgstr "" +" --help deze hulptekst tonen en stoppen\n" +" --version programmaversie tonen en stoppen\n" + +#. TRANSLATORS: --help output, record selection arguments +#. no-wrap +#: utils/recutl.c:154 +msgid "" +"Record selection options:\n" +" -i, --case-insensitive make strings case-insensitive in " +"selection\n" +" expressions.\n" +" -t, --type=TYPE operate on records of the specified " +"type only.\n" +" -e, --expression=RECORD_EXPR selection expression.\n" +" -q, --quick=STR select records with fields containing " +"a string.\n" +" -n, --number=NUM,... select specific records by position, " +"with ranges.\n" +" -m, --random=NUM select a given number of random " +"records.\n" +msgstr "" +"Recordselectie:\n" +" -i, --case-insensitive geen onderscheid maken tussen hoofd- en kleine\n" +" letters in selectie-expressies\n" +" -t, --type=TYPE alleen dit type records bewerken\n" +" -e, --expression=EXPR te gebruiken selectie-expressie\n" +" -q, --quick=TEKENREEKS records selecteren met velden met deze " +"tekenreeks\n" +" -n, --number=NUMMER,... specifieke records selecteren (bereiken kunnen " +"ook)\n" +" -m, --random=AANTAL dit aantal willekeurig gekozen records " +"selecteren\n" + +#: utils/recutl.c:179 +#, c-format +msgid "" +"Copyright (C) %s Jose E. Marchesi.\n" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +msgstr "" +"Copyright (C) %s Jose E. Marchesi.\n" +"Dit is vrije software: u mag het vrijelijk wijzigen en verder verspreiden.\n" +"De precieze licentie is GPL-3+: GNU General Public License versie 3 of " +"later.\n" +"Zie http://gnu.org/licenses/gpl.html voor de volledige (Engelse) tekst.\n" +"Deze software kent GEEN GARANTIE, voor zover de wet dit toestaat.\n" +"\n" + +#: utils/recutl.c:185 +msgid "" +"\n" +"Written by Jose E. Marchesi." +msgstr "" +"\n" +"Geschreven door Jose E. Marchesi." + +#: utils/recutl.c:197 utils/recutl.c:217 +msgid ": error: " +msgstr ": fout: " + +#: utils/recutl.c:229 +msgid ": warning: " +msgstr ": waarschuwing: " + +#: utils/recutl.c:254 +#, c-format +msgid "duplicated record set '%s' from %s.\n" +msgstr "duplicaat recordset '%s' uit %s.\n" + +#: utils/recutl.c:417 +msgid "cannot create a unique name.\n" +msgstr "kan geen unieke naam aanmaken.\n" + +#: utils/recutl.c:438 +#, c-format +msgid "renaming file %s to %s\n" +msgstr "hernoemen van bestand %s naar %s\n" + +#: utils/recutl.c:482 +msgid "operation aborted due to integrity failures.\n" +msgstr "bewerking is afgebroken wegens integriteitsproblemen.\n" + +#: utils/recutl.c:483 +msgid "use --verbose to get a detailed report.\n" +msgstr "gebruik optie '--verbose' voor een gedetailleerd rapport.\n" + +#: utils/recutl.c:490 +msgid "use --force to skip the integrity check.\n" +msgstr "gebruik optie '--force' op de integriteitscontrole over te slaan.\n" + +#: utils/recutl.c:551 +msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" +msgstr "" +"**interne programmafout**: recutl_index_list_parse(): fout bij compileren " +"van regexp.\n" + +#: utils/recutl.c:626 +msgid "Password: " +msgstr "Wachtwoord: " + +#: utils/recutl.c:632 +msgid "Password again: " +msgstr "Wachtwoord opnieuw: " + +#: utils/recutl.c:637 +msgid "the provided passwords don't match.\n" +msgstr "de gegeven wachtwoorden komen niet overeen.\n" + +#: utils/recutl.h:97 utils/recutl.h:186 utils/recutl.h:190 +#, fuzzy +msgid "cannot specify -e and also -n\n" +msgstr "opties '-c' en '-p' gaan niet samen.\n" + +#: utils/recutl.h:102 +#, fuzzy +msgid "cannot specify -e and also -q\n" +msgstr "opties '-c' en '-p' gaan niet samen.\n" + +#: utils/recutl.h:113 +#, fuzzy +msgid "invalid selection expression\n" +msgstr "ongeldige selectie-expressie.\n" + +#: utils/recutl.h:125 +#, fuzzy +msgid "cannot specify -n and also -e\n" +msgstr "opties '-c' en '-p' gaan niet samen.\n" + +#: utils/recutl.h:130 +#, fuzzy +msgid "cannot specify -n and also -q\n" +msgstr "opties '-c' en '-p' gaan niet samen.\n" + +#: utils/recutl.h:140 +#, fuzzy +msgid "invalid list of indexes in -n\n" +msgstr "ongeldige veldnamenlijst bij '-%c'.\n" + +#: utils/recutl.h:150 +#, fuzzy +msgid "cannot specify -m and also -e\n" +msgstr "opties '-c' en '-p' gaan niet samen.\n" + +#: utils/recutl.h:155 +#, fuzzy +msgid "cannot specify -m and also -q\n" +msgstr "opties '-c' en '-p' gaan niet samen.\n" + +#: utils/recutl.h:160 +#, fuzzy +msgid "cannot specify -m and also -n\n" +msgstr "opties '-c' en '-p' gaan niet samen.\n" + +#~ msgid "%s: option '--%s' doesn't allow an argument\n" +#~ msgstr "%s: optie '--%s' staat geen argument toe\n" + +#~ msgid "%s: unrecognized option '--%s'\n" +#~ msgstr "%s: onbekende optie '--%s'\n" + +#~ msgid "%s: option '-W %s' doesn't allow an argument\n" +#~ msgstr "%s: optie '-W %s' staat geen argument toe\n" + +#~ msgid "%s: option '-W %s' requires an argument\n" +#~ msgstr "%s: optie '-W %s' vereist een argument\n" + +#~ msgid "" +#~ "%s:%s: warning: type %s collides with referred type %s in the rset %s.\n" +#~ msgstr "" +#~ "%s:%s: waarschuwing: type %s botst met gerefereerd type %s in rset %s.\n" + +#~ msgid "%s:%s: error: value for %s shall be a field name.\n" +#~ msgstr "%s:%s: fout: de waarde van %s moet een veldnaam zijn\n" + +#~ msgid "reached maximum number of fields: %d\n" +#~ msgstr "maximum aantal velden (%d) is bereikt\n" + +#~ msgid "not enough headers" +#~ msgstr "niet genoeg koppen" + +#~ msgid "out of memory" +#~ msgstr "onvoldoende geheugen beschikbaar" + +#~ msgid "evaluating the selection expression.\n" +#~ msgstr "evalueren van selectie-expressie\n" + +#~ msgid "reading file %s" +#~ msgstr "lezen van bestand %s" + +#~ msgid "internal error: rec_resolver_check: error compiling regexp.\n" +#~ msgstr "" +#~ "**interne programmafout**: rec_resolver_check(): fout bij compileren van " +#~ "regexp.\n" + +#~ msgid "internal error: rec_field_name_part_str_p: error compiling regexp.\n" +#~ msgstr "" +#~ "**interne programmafout**: rec_field_name_part_str_p(): fout bij " +#~ "compileren van regexp.\n" + +#~ msgid "internal error: rec_int_rec_type_p: error compiling regexp.\n" +#~ msgstr "" +#~ "**interne programmafout**: rec_int_rec_type_p(): fout bij compileren van " +#~ "regexp.\n" + +#~ msgid "internal error: rec-types: error compiling regexp.\n" +#~ msgstr "" +#~ "**interne programmafout**: rec_types: fout bij compileren van regexp.\n" + +#~ msgid "" +#~ "the record set contains confidential fields but no password was provided\n" +#~ msgstr "" +#~ "de recordset bevat vertrouwelijke velden maar er is geen wachtwoord " +#~ "opgegeven\n" + +#~ msgid "the resulting record will have those fields unencrypted!\n" +#~ msgstr "in het resulterende record zullen die velden onversleuteld zijn!\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " csv2rec contacts.csv > contacts.rec\n" +#~ " cat contacts.csv | csv2rec > contacts.rec\n" +#~ msgstr "" +#~ "Voorbeelden:\n" +#~ "\n" +#~ " csv2rec contacten.csv > contacten.rec\n" +#~ " cat contacten.csv | csv2rec > contacten.rec\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " mdb2rec database.mdb > database.rec\n" +#~ " mdb2rec database.mdb Customers > customers.rec\n" +#~ msgstr "" +#~ "Voorbeelden:\n" +#~ "\n" +#~ " mdb2rec databank.mdb > databank.rec\n" +#~ " mdb2rec databank.mdb Klanten > klanten.rec\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " rec2csv contacts.rec > contacts.csv\n" +#~ " cat contacts.rec | rec2csv -t Contact > contacts.csv\n" +#~ msgstr "" +#~ "Voorbeelden:\n" +#~ "\n" +#~ " rec2csv contacten.rec > contacten.csv\n" +#~ " cat contacten.rec | rec2csv -t Contact > contacten.csv\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recdel -n 10 contacts.rec\n" +#~ " cat hackers.rec | recdel -e \"Email[0] = 'foo@bar.com'\" > other." +#~ "rec\n" +#~ msgstr "" +#~ "Voorbeelden:\n" +#~ "\n" +#~ " recdel -n 10 contacten.rec\n" +#~ " cat hackers.rec | recdel -e \"Email[0] = 'foo@bar.com'\" > ander." +#~ "rec\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " cat employees.rec | recfmt 'Dear {{Name}}, you are fired.'\n" +#~ " cat employees.rec | recfmt -f fire-letter.tmpl\n" +#~ msgstr "" +#~ "Voorbeelden:\n" +#~ "\n" +#~ " cat werknemers.rec | recfmt 'Beste {{Naam}}, u bent ontslagen.'\n" +#~ " cat werknemers.rec | recfmt -f ontslagbrief.tmpl\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recinf mydata.rec\n" +#~ " recinf -d mydata.rec moredata.rec\n" +#~ " recinf -t Task TODO\n" +#~ msgstr "" +#~ "Voorbeelden:\n" +#~ "\n" +#~ " recinf mijngegevens.rec\n" +#~ " recinf -d mijngegevens.rec meergegevens.rec\n" +#~ " recinf -t Task TODO\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recins -f Name -v \"Mr Foo\" -f Email -v foo@foo.org contacts." +#~ "rec\n" +#~ " cat hackers.rec | recins -t Hacker -f Email -v foo@foo.org > " +#~ "other.rec\n" +#~ msgstr "" +#~ "Voorbeelden:\n" +#~ "\n" +#~ " recins -f Naam -v \"Hr Foo\" -f Email -v foo@foo.org contacten." +#~ "rec\n" +#~ " cat hackers.rec | recins -t Hacker -f Email -v foo@foo.org > " +#~ "ander.rec\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recsel -t Friend -e \"Name ~ 'Smith'\" friends.rec\n" +#~ " recsel -C -e \"#Email && Wiki = 'no'\" -P Email[0] gnupdf-hackers." +#~ "rec\n" +#~ msgstr "" +#~ "Voorbeelden:\n" +#~ "\n" +#~ " recsel -t Vriend -e \"Naam ~ 'Jansen'\" vrienden.rec\n" +#~ " recsel -C -e \"#Email && Wiki = 'no'\" -P Email[0] gnupdf-hackers." +#~ "rec\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recset -f TmpName -d data.rec\n" +#~ " recset -f Email[1] -s invalid@email.com friends.rec\n" +#~ " recset -e \"Name ~ 'Smith'\" -f Email -a new@email.com friends." +#~ "rec\n" +#~ " recset -f Email[1] -r AltEmail friends.rec\n" +#~ msgstr "" +#~ "Voorbeelden:\n" +#~ "\n" +#~ " recset -f TmpName -d data.rec\n" +#~ " recset -f Email[1] -s ongeldig@email.com vrienden.rec\n" +#~ " recset -e \"Naam ~ 'Jansen'\" -f Email -a new@email.com vrienden." +#~ "rec\n" +#~ " recset -f Email[1] -r AltEmail vrienden.rec\n" + +#~ msgid " --no-external don't use external descriptors.\n" +#~ msgstr " --no-external geen externe descriptors gebruiken\n" + +#~ msgid "" +#~ "Examples:\n" +#~ "\n" +#~ " recfix data.rec\n" +#~ " recfix data1.rec data2.rec\n" +#~ " cat data1.rec data2.rec | recfix\n" +#~ msgstr "" +#~ "Voorbeelden:\n" +#~ "\n" +#~ " recfix gegevens.rec\n" +#~ " recfix gegevens1.rec gegevens2.rec\n" +#~ " cat gegevens1.rec gegevens2.rec | recfix\n" + +#~ msgid "evaluating selection expression.\n" +#~ msgstr "evalueren van selectie-expressie\n" + +#~ msgid "operation aborted due to integrity failures\n" +#~ msgstr "bewerking is afgebroken wegens integriteitsproblemen.\n" + +#~ msgid "use --verbose to get a detailed report\n" +#~ msgstr "gebruik optie '--verbose' voor een gedetailleerd rapport.\n" diff --git a/devspec.en_US/project/recutils/po/pt_BR.gmo b/devspec.en_US/project/recutils/po/pt_BR.gmo new file mode 100755 index 0000000000000000000000000000000000000000..0e918e28e0a66ec6de8d6f1ce7fffa49cf84707b GIT binary patch literal 35807 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 D-J*qr literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/po/pt_BR.po b/devspec.en_US/project/recutils/po/pt_BR.po new file mode 100755 index 0000000..cfeae76 --- /dev/null +++ b/devspec.en_US/project/recutils/po/pt_BR.po @@ -0,0 +1,1993 @@ +# Brazilian Portuguese translations for recutils package +# Traduções em português brasileiro para o pacote recutils +# Copyright (C) 2017 Free Software Foundation, Inc. +# This file is distributed under the same license as the recutils package. +# Rafael Fontenelle <rafaelff@gnome.org>, 2016, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: recutils 1.6.90\n" +"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" +"POT-Creation-Date: 2019-01-03 10:32+0100\n" +"PO-Revision-Date: 2017-01-20 10:44-0200\n" +"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n" +"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge." +"net>\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Virtaal 1.0.0-beta1\n" + +#: lib/closeout.c:122 +msgid "write error" +msgstr "erro de escrita" + +#: lib/copy-acl.c:54 +#, c-format +msgid "preserving permissions for %s" +msgstr "" + +#: lib/error.c:195 +msgid "Unknown system error" +msgstr "Erro desconhecido de sistema" + +#: lib/execute.c:185 lib/execute.c:258 lib/wait-process.c:282 +#: lib/wait-process.c:356 +#, c-format +msgid "%s subprocess failed" +msgstr "subprocesso %s falhou" + +#: lib/getopt.c:278 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous\n" +msgstr "%s: a opção \"-W %s\" é ambígua\n" + +#: lib/getopt.c:284 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous; possibilities:" +msgstr "%s: a opção \"%s\" é ambígua; possibilidades:" + +#: lib/getopt.c:319 +#, fuzzy, c-format +msgid "%s: unrecognized option '%s%s'\n" +msgstr "%s: opção desconhecida \"%c%s\"\n" + +#: lib/getopt.c:345 +#, fuzzy, c-format +msgid "%s: option '%s%s' doesn't allow an argument\n" +msgstr "%s: a opção \"%c%s\" não permite um argumento\n" + +#: lib/getopt.c:360 +#, fuzzy, c-format +msgid "%s: option '%s%s' requires an argument\n" +msgstr "%s: a opção \"--%s\" exige um argumento\n" + +#: lib/getopt.c:621 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: opção inválida -- \"%c\"\n" + +#: lib/getopt.c:636 lib/getopt.c:682 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: a opção exige um argumento -- \"%c\"\n" + +#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "memória esgotada" + +#: parse-datetime.y:440 parse-datetime.y:540 +#, c-format +msgid "parsed %s part: " +msgstr "" + +#: parse-datetime.y:455 +#, c-format +msgid "year: %04<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:483 +#, c-format +msgid "%s (day ordinal=%<PRIdMAX> number=%d)" +msgstr "" + +#: parse-datetime.y:514 +#, c-format +msgid "number of seconds: %<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:547 +msgid "today/this/now\n" +msgstr "" + +#: parse-datetime.y:612 +msgid "number of seconds" +msgstr "" + +#: parse-datetime.y:625 +msgid "datetime" +msgstr "" + +#: parse-datetime.y:630 +msgid "time" +msgstr "" + +#: parse-datetime.y:635 +msgid "local_zone" +msgstr "" + +#: parse-datetime.y:640 +msgid "zone" +msgstr "" + +#: parse-datetime.y:645 +msgid "date" +msgstr "" + +#: parse-datetime.y:650 +msgid "day" +msgstr "" + +#: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 +msgid "relative" +msgstr "" + +#: parse-datetime.y:658 +msgid "number" +msgstr "" + +#: parse-datetime.y:662 +msgid "hybrid" +msgstr "" + +#: parse-datetime.y:820 +#, c-format +msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" +msgstr "" + +#: parse-datetime.y:832 +#, c-format +msgid "" +"warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" +msgstr "" + +#: parse-datetime.y:1276 +#, c-format +msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1286 +#, c-format +msgid "error: out-of-range year %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1524 +#, fuzzy, c-format +msgid "error: unknown word '%s'\n" +msgstr "erro: não foi possível ler o arquivo %s\n" + +#: parse-datetime.y:1673 +#, fuzzy +msgid "error: invalid date/time value:\n" +msgstr "o valor de \"enum\" é inválido." + +#: parse-datetime.y:1674 +#, c-format +msgid " user provided time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1676 +#, c-format +msgid " normalized time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1699 +msgid " possible reasons:\n" +msgstr "" + +#: parse-datetime.y:1701 +msgid " non-existing due to daylight-saving time;\n" +msgstr "" + +#: parse-datetime.y:1703 +msgid " invalid day/month combination;\n" +msgstr "" + +#: parse-datetime.y:1704 +msgid " numeric values overflow;\n" +msgstr "" + +#: parse-datetime.y:1705 +msgid "incorrect timezone" +msgstr "" + +#: parse-datetime.y:1706 +msgid "missing timezone" +msgstr "" + +#: parse-datetime.y:1826 +msgid "error: initial year out of range\n" +msgstr "" + +#: parse-datetime.y:1923 +#, fuzzy +msgid "error: parsing failed\n" +msgstr "erro enquanto analisava o arquivo CSV: %s\n" + +#: parse-datetime.y:1924 +#, fuzzy, c-format +msgid "error: parsing failed, stopped at '%s'\n" +msgstr "erro enquanto analisava o arquivo CSV: %s\n" + +#: parse-datetime.y:1934 +msgid "input timezone: " +msgstr "" + +#: parse-datetime.y:1937 +#, c-format +msgid "'@timespec' - always UTC" +msgstr "" + +#: parse-datetime.y:1939 +#, c-format +msgid "parsed date/time string" +msgstr "" + +#: parse-datetime.y:1943 +#, c-format +msgid "TZ=\"%s\" in date string" +msgstr "" + +#: parse-datetime.y:1947 +#, c-format +msgid "TZ=\"UTC0\" environment value or -u" +msgstr "" + +#: parse-datetime.y:1950 +#, c-format +msgid "TZ=\"%s\" environment value" +msgstr "" + +#: parse-datetime.y:1953 +#, c-format +msgid "system default" +msgstr "" + +#: parse-datetime.y:1995 +msgid "error: year, month, or day overflow\n" +msgstr "" + +#: parse-datetime.y:2006 +#, fuzzy, c-format +msgid "error: invalid hour %<PRIdMAX>%s\n" +msgstr "%s:%s: erro: tipo de registro %s inválido\n" + +#: parse-datetime.y:2014 +#, c-format +msgid "using specified time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2015 +#, c-format +msgid "using current time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2069 +#, c-format +msgid "error: tzalloc (\"%s\") failed\n" +msgstr "" + +#: parse-datetime.y:2114 +#, c-format +msgid "" +"error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " +"date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2125 +#, c-format +msgid "new start date: '%s' is '%s'\n" +msgstr "" + +#: parse-datetime.y:2134 +#, c-format +msgid "using current date as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2138 +#, c-format +msgid "warning: day (%s) ignored when explicit dates are given\n" +msgstr "" + +#: parse-datetime.y:2142 +#, c-format +msgid "starting date/time: '%s'\n" +msgstr "" + +#: parse-datetime.y:2152 +msgid "" +"warning: when adding relative months/years, it is recommended to specify the " +"15th of the months\n" +msgstr "" + +#: parse-datetime.y:2157 +msgid "warning: when adding relative days, it is recommended to specify noon\n" +msgstr "" + +#: parse-datetime.y:2167 +#, fuzzy, c-format +msgid "error: %s:%d\n" +msgstr ": erro: " + +#: parse-datetime.y:2181 +#, c-format +msgid "error: adding relative date resulted in an invalid date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2190 +#, c-format +msgid "" +"after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " +"days),\n" +msgstr "" + +#: parse-datetime.y:2194 +#, c-format +msgid " new date/time = '%s'\n" +msgstr "" + +#: parse-datetime.y:2213 +msgid "warning: daylight saving time changed after date adjustment\n" +msgstr "" + +#: parse-datetime.y:2232 +msgid "warning: month/year adjustment resulted in shifted dates:\n" +msgstr "" + +#: parse-datetime.y:2235 +#, c-format +msgid " adjusted Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2237 +#, c-format +msgid " normalized Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2265 +#, c-format +msgid "error: timezone %d caused time_t overflow\n" +msgstr "" + +#: parse-datetime.y:2275 +#, c-format +msgid "'%s' = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2303 +msgid "error: adding relative time caused an overflow\n" +msgstr "" + +#: parse-datetime.y:2314 +#, c-format +msgid "" +"after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " +"seconds, %+d ns),\n" +msgstr "" + +#: parse-datetime.y:2319 +#, c-format +msgid " new time = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2335 +msgid "warning: daylight saving time changed after time adjustment\n" +msgstr "" + +#: parse-datetime.y:2345 +msgid "timezone: system default\n" +msgstr "" + +#: parse-datetime.y:2347 +msgid "timezone: Universal Time\n" +msgstr "" + +#: parse-datetime.y:2349 +#, c-format +msgid "timezone: TZ=\"%s\" environment value\n" +msgstr "" + +#: parse-datetime.y:2353 +#, c-format +msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" +msgstr "" + +#: parse-datetime.y:2359 +#, c-format +msgid "final: %s (UTC)\n" +msgstr "" + +#: parse-datetime.y:2374 +#, c-format +msgid "final: %s (UTC%s)\n" +msgstr "" + +#: parse-datetime.y:2378 +#, c-format +msgid "final: %s (unknown time zone offset)\n" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". For example, a French Unicode local should translate +#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), respectively. +#. +#. If the catalog has no translation, we will try to +#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and +#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the +#. current locale is not Unicode, locale_quoting_style +#. will quote 'like this', and clocale_quoting_style will +#. quote "like this". You should always include translations +#. for "`" and "'" even if U+2018 and U+2019 are appropriate +#. for your locale. +#. +#. If you don't know what to put here, please see +#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:362 +msgid "`" +msgstr "“" + +#: lib/quotearg.c:363 +msgid "'" +msgstr "”" + +#: lib/regcomp.c:135 +msgid "Success" +msgstr "Sucesso" + +#: lib/regcomp.c:138 +msgid "No match" +msgstr "Nenhuma ocorrência do padrão" + +#: lib/regcomp.c:141 +msgid "Invalid regular expression" +msgstr "Expressão regular inválida" + +#: lib/regcomp.c:144 +msgid "Invalid collation character" +msgstr "Caractere de combinação inválido" + +#: lib/regcomp.c:147 +msgid "Invalid character class name" +msgstr "Nome inválido de categoria de caracteres" + +#: lib/regcomp.c:150 +msgid "Trailing backslash" +msgstr "Barra invertida no final" + +#: lib/regcomp.c:153 +msgid "Invalid back reference" +msgstr "Retrorreferência inválida" + +#: lib/regcomp.c:156 +#, fuzzy +msgid "Unmatched [, [^, [:, [., or [=" +msgstr "[ ou [^ sem correspondente" + +#: lib/regcomp.c:159 +msgid "Unmatched ( or \\(" +msgstr "( ou \\( sem correspondente" + +#: lib/regcomp.c:162 +msgid "Unmatched \\{" +msgstr "\\{ sem correspondente" + +#: lib/regcomp.c:165 +msgid "Invalid content of \\{\\}" +msgstr "Conteúdo inválido de \\{\\}" + +#: lib/regcomp.c:168 +msgid "Invalid range end" +msgstr "Fim de intervalo inválido" + +#: lib/regcomp.c:171 +msgid "Memory exhausted" +msgstr "Memória esgotada" + +#: lib/regcomp.c:174 +msgid "Invalid preceding regular expression" +msgstr "A expressão regular precedente é inválida" + +#: lib/regcomp.c:177 +msgid "Premature end of regular expression" +msgstr "Fim prematuro da expressão regular" + +#: lib/regcomp.c:180 +msgid "Regular expression too big" +msgstr "Expressão regular grande demais" + +#: lib/regcomp.c:183 +msgid "Unmatched ) or \\)" +msgstr ") ou \\) sem correspondente" + +#: lib/regcomp.c:676 +msgid "No previous regular expression" +msgstr "Nenhuma expressão regular anterior" + +#: lib/set-acl.c:46 +#, c-format +msgid "setting permissions for %s" +msgstr "" + +#: lib/version-etc.c:73 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:76 +#, c-format +msgid "Packaged by %s\n" +msgstr "" + +#. TRANSLATORS: Translate "(C)" to the copyright symbol +#. (C-in-a-circle), if this symbol is available in the user's +#. locale. Otherwise, do not translate "(C)"; leave it as-is. +#: lib/version-etc.c:83 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:85 +#, fuzzy +msgid "" +"\n" +"License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +"\n" +msgstr "" +"Copyright (C) %s Jose E. Marchesi.\n" +"Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/gpl." +"html>\n" +"Este é um software livre: você é livre para alterá-lo e redistribuí-lo.\n" +"NÃO HÁ QUALQUER GARANTIA, na máxima extensão permitida em lei.\n" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, fuzzy, c-format +msgid "Written by %s and %s.\n" +msgstr "" +"\n" +"Escrito por Jose E. Marchesi." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, fuzzy, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "" +"\n" +"Escrito por Jose E. Marchesi." + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:117 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" + +#. TRANSLATORS: The placeholder indicates the bug-reporting address +#. for this package. Please add _another line_ saying +#. "Report translation bugs to <...>\n" with the address for translation +#. bugs (typically your translation team's web or email address). +#: lib/version-etc.c:245 +#, fuzzy, c-format +msgid "" +"\n" +"Report bugs to: %s\n" +msgstr "" +"Relate erros para: %s\n" +"Relate erros de tradução para <http://ldpbr-translation@lists.sourceforge." +"net>\n" + +#: lib/version-etc.c:247 utils/recutl.c:125 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "Relate os erros do %s para: %s\n" + +#: lib/version-etc.c:251 utils/recutl.c:129 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Página do %s: <%s>\n" + +#: lib/version-etc.c:253 +#, fuzzy, c-format +msgid "%s home page: <https://www.gnu.org/software/%s/>\n" +msgstr "Página do %s: <http://www.gnu.org/software/recutils/>\n" + +#: lib/version-etc.c:256 +#, fuzzy +msgid "General help using GNU software: <https://www.gnu.org/gethelp/>\n" +msgstr "Ajuda geral no uso de software GNU: <http://www.gnu.org/gethelp/>\n" + +#: lib/w32spawn.h:49 +#, c-format +msgid "_open_osfhandle failed" +msgstr "_open_osfhandle falhou" + +#: lib/w32spawn.h:90 +#, c-format +msgid "cannot restore fd %d: dup2 failed" +msgstr "não foi possível restaurar descritor de arquivo %d: dup2 falhou" + +#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317 +#, c-format +msgid "%s subprocess" +msgstr "subprocesso %s" + +#: lib/wait-process.c:274 lib/wait-process.c:346 +#, c-format +msgid "%s subprocess got fatal signal %d" +msgstr "o subprocesso %s recebeu sinal fatal %d" + +#: src/rec-fex.c:451 +#, c-format +msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" +msgstr "erro interno: REC_FEX_MAX_ELEMS excedido. Por favor, relate isso.\n" + +#: src/rec-int.c:176 +#, c-format +msgid "%s: error: the number of records of type %s should be %zd.\n" +msgstr "%s: erro: o número de registros do tipo %s deveria ser %zd.\n" + +#: src/rec-int.c:186 +#, c-format +msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" +msgstr "" +"%s: erro: número excessivo de registros do tipo %s. Máximo admitido é %zd.\n" + +#: src/rec-int.c:193 +#, c-format +msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" +msgstr "" +"%s: erro: número insuficiente de registros do tipo %s. Mínimo admitido é " +"%zd.\n" + +#: src/rec-int.c:409 src/rec-int.c:463 src/rec-int.c:520 src/rec-int.c:564 +#: utils/recutl.c:207 +msgid "out of memory\n" +msgstr "memória insuficiente\n" + +#: src/rec-int.c:424 +#, c-format +msgid "%s:%s: error: mandatory field '%s' not found in record\n" +msgstr "%s:%s: erro: campo obrigatório \"%s\" não foi encontrado no registro\n" + +#: src/rec-int.c:487 +#, c-format +msgid "%s:%s: error: field '%s' not allowed in this record set\n" +msgstr "%s:%s: erro: campo \"%s\" não admitido neste conjunto de registros\n" + +#: src/rec-int.c:534 +#, c-format +msgid "%s:%s: error: field '%s' should be unique in this record\n" +msgstr "%s:%s: erro: o campo \"%s\" deveria ser único neste registro\n" + +#: src/rec-int.c:578 +#, c-format +msgid "%s:%s: error: prohibited field '%s' found in record\n" +msgstr "%s:%s: erro: campo proibido \"%s\" encontrado no registro\n" + +#: src/rec-int.c:610 +#, c-format +msgid "%s:%s: error: %%constraint[%d] violated in record\n" +msgstr "%s:%s: erro: %%constraint[%d] violada no registro\n" + +#: src/rec-int.c:647 +#, c-format +msgid "%s:%s: error: confidential field is not encrypted\n" +msgstr "%s:%s: erro: campo confidencial não está criptografado\n" + +#: src/rec-int.c:699 +#, c-format +msgid "%s:%s: error: key field '%s' not found in record\n" +msgstr "%s:%s: erro: o campo de chave \"%s\" não foi encontrado no registro\n" + +#: src/rec-int.c:708 +#, c-format +msgid "%s:%s: error: multiple key fields '%s' in record\n" +msgstr "%s:%s: erro: múltiplos campos de chave \"%s\" no registro\n" + +#: src/rec-int.c:751 +#, c-format +msgid "%s:%s: error: duplicated key value in field '%s' in record\n" +msgstr "%s:%s: erro: valor de chave duplicada no campo \"%s\" no registro\n" + +#: src/rec-int.c:799 +#, c-format +msgid "%s:%s: error: missing %%rec field in record descriptor\n" +msgstr "%s:%s: erro: faltando o campo %%rec no descritor de registro\n" + +#: src/rec-int.c:807 +#, c-format +msgid "%s:%s: error: too many %%rec fields in record descriptor\n" +msgstr "" +"%s:%s: erro: número excessivo de campos %%rec no descritor de registro\n" + +#: src/rec-int.c:817 +#, c-format +msgid "%s:%s: error: invalid record type %s\n" +msgstr "%s:%s: erro: tipo de registro %s inválido\n" + +#: src/rec-int.c:828 +#, c-format +msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" +msgstr "" +"%s:%s: erro: apenas um campo %%key é permitido em um descritor de registro\n" + +#: src/rec-int.c:838 +#, c-format +msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" +msgstr "" +"%s:%s: erro: apenas um campo %%size é permitido em um descritor de registro\n" + +#: src/rec-int.c:848 +#, c-format +msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" +msgstr "" +"%s:%s: erro: apenas um campo %%sort é permitido em um descritor de registro\n" + +#: src/rec-int.c:871 +#, c-format +msgid "" +"%s:%s: error: expected a comma-separated list of fields before the type " +"specification\n" +msgstr "" +"%s:%s: erro: esperava uma lista, separada por vírgula, de campos antes do " +"tipo especificado\n" + +#: src/rec-int.c:897 src/rec-int.c:950 +#, c-format +msgid "%s:%s: error: the referred type %s does not exist\n" +msgstr "%s:%s: erro: o tipo referido %s não existe\n" + +#: src/rec-int.c:909 +#, c-format +msgid "%s:%s: error: invalid type specification\n" +msgstr "%s:%s: erro: especificação de \"type\" inválida\n" + +#: src/rec-int.c:924 +#, c-format +msgid "%s:%s: error: expected a type name before the type specification\n" +msgstr "%s:%s: erro: esperava um nome de tipo antes da especificação\n" + +#: src/rec-int.c:962 +#, c-format +msgid "%s:%s: error: invalid typedef specification\n" +msgstr "%s:%s: erro: especificação de \"typedef\" inválida\n" + +#: src/rec-int.c:984 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" +msgstr "" +"%s:%s: erro: o valor de %s[%zd] não é uma expressão de seleção válida\n" + +#: src/rec-int.c:1015 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" +msgstr "%s:%s: erro: o valor de %s[%zd] não é uma lista de nomes de campos\n" + +#: src/rec-int.c:1028 +#, c-format +msgid "" +"%s:%s: error: value for %s should be a number optionally preceded by >, <, " +">= or <=.\n" +msgstr "" +"%s:%s: erro: o valor de %s deveria ser um número precedido opcionalmente por " +">, <, >= ou <=.\n" + +#: src/rec-int.c:1044 +#, c-format +msgid "%s:%s: error: value for %s should be a list of field names.\n" +msgstr "%s:%s: erro: o valor de %s deveria ser uma lista de nomes de campos.\n" + +#: src/rec-int.c:1072 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range, uuid " +"or date\n" +msgstr "" +"%s:%s: erro: campo autoincrementado %s deveria ser do tipo int, range, uuid " +"ou date\n" + +#: src/rec-int.c:1074 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range or " +"date\n" +msgstr "" +"%s:%s: erro: campo autoincrementado %s deveria ser do tipo int, range ou " +"data\n" + +#: src/rec-int.c:1157 +#, c-format +msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" +msgstr "%s:%s: erro: não foi possível obter o descritor remoto da url %s.\n" + +#: src/rec-int.c:1176 +#, c-format +msgid "%s:%s: error: could not read external descriptor from file %s.\n" +msgstr "%s:%s: erro: não foi possível ler o descritor externo do arquivo %s.\n" + +#: src/rec-int.c:1191 +#, c-format +msgid "%s:%s: error: %s does not contain valid rec data.\n" +msgstr "%s:%s: erro: %s não contém dados rec válidos.\n" + +#: src/rec-int.c:1205 +#, c-format +msgid "%s:%s: error: %s does not contain information for type %s.\n" +msgstr "%s:%s: erro: %s não contém informação para tipo %s.\n" + +#: src/rec-types.c:448 +#, c-format +msgid "" +"internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " +"in rec_type_new().\n" +msgstr "" +"erro interno: rec-types: obteve REC_TYPE_NONE de rec_type_parse_type_kind() " +"em rec_type_new().\n" + +#: src/rec-types.c:1178 +msgid "invalid integer." +msgstr "inteiro inválido." + +#: src/rec-types.c:1208 +msgid "invalid 'field' value." +msgstr "o valor de \"field\" é inválido." + +#: src/rec-types.c:1231 +msgid "invalid 'uuid' value." +msgstr "o valor de \"uuid\" é inválido." + +#: src/rec-types.c:1249 +msgid "invalid 'bool' value." +msgstr "o valor de \"bool\" é inválido." + +#: src/rec-types.c:1272 +msgid "invalid 'range' value." +msgstr "o valor de \"range\" é inválido." + +#: src/rec-types.c:1281 +#, c-format +msgid "expected an integer between %d and %d." +msgstr "esperava um inteiro entre %d e %d." + +#: src/rec-types.c:1302 +msgid "invalid 'real' value." +msgstr "o valor de \"real\" é inválido." + +#: src/rec-types.c:1320 +#, c-format +msgid "value too large. Expected a size <= %zu." +msgstr "valor grande demais. Esperava um tamanho <= %zu." + +#: src/rec-types.c:1341 +msgid "invalid 'line' value." +msgstr "o valor de \"line\" é inválido." + +#: src/rec-types.c:1360 +msgid "value does not match the regexp." +msgstr "o valor não corresponde à expressão regular." + +#: src/rec-types.c:1383 +msgid "invalid date." +msgstr "data inválida." + +#: src/rec-types.c:1399 +msgid "invalid email." +msgstr "e-mail inválido." + +#: src/rec-types.c:1444 +msgid "invalid enum value." +msgstr "o valor de \"enum\" é inválido." + +#: src/rec-utils.c:93 +#, c-format +msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" +msgstr "" +"erro interno: rec_int_rec_extract_file: erro ao compilar a expressão " +"regular.\n" + +#: src/rec-utils.c:121 src/rec-utils.c:150 +#, c-format +msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" +msgstr "" +"erro interno: rec_int_rec_extract_url: erro ao compilar a expressão " +"regular.\n" + +#: src/rec-utils.c:304 +#, c-format +msgid "internal error: rec_match: error compiling regexp.\n" +msgstr "erro interno: rec_match: erro ao compilar a expressão regular.\n" + +#. TRANSLATORS: --help output, csv2rec synopsis. +#. no-wrap +#: utils/csv2rec.c:105 +#, c-format +msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" +msgstr "Uso: csv2rec [OPÇÕES]... [ARQUIVO_CSV]\n" + +#. TRANSLATORS: --help output, csv2rec short description. +#. no-wrap +#: utils/csv2rec.c:110 +msgid "Convert csv data into rec data.\n" +msgstr "Converte dados csv em dados rec.\n" + +#. TRANSLATORS: --help output, csv2rec options. +#. no-wrap +#: utils/csv2rec.c:116 +msgid "" +" -t, --type=TYPE type name for the converted records; " +"if this\n" +" parameter is ommited then no type is " +"used.\n" +" -s, --strict be strict parsing the csv file.\n" +" -e, --omit-empty omit empty fields.\n" +msgstr "" +" -t, --type=TIPO nome do tipo para registros " +"convertidos; se\n" +" este parâmetro for omitido, então, " +"nenhum\n" +" tipo é usado.\n" +" -s, --strict análise estrita do arquivo csv.\n" +" -e, --omit-empty omite campos vazios.\n" + +#: utils/csv2rec.c:230 +#, c-format +msgid "invalid field name '%s' in header\n" +msgstr "nome de campo inválido \"%s\" no cabeçalho\n" + +#: utils/csv2rec.c:259 +#, fuzzy, c-format +msgid "" +"%s: %lu: this line contains %lu fields, but %lu header fields were read\n" +msgstr "" +"%s: %d: esta linha contém %d campos, mas %d campos de cabeçalho foram lidos\n" + +#: utils/csv2rec.c:347 utils/recdel.c:266 utils/recset.c:358 utils/recutl.c:328 +#, c-format +msgid "cannot read file %s\n" +msgstr "não foi possível ler o arquivo %s\n" + +#: utils/csv2rec.c:358 +msgid "failed to initialize csv parser\n" +msgstr "falha ao inicializar o analisador de csv\n" + +#: utils/csv2rec.c:376 +#, c-format +msgid "error while parsing CSV file: %s\n" +msgstr "erro enquanto analisava o arquivo CSV: %s\n" + +#. TRANSLATORS: --help output, mdb2rec synopsis. +#. no-wrap +#: utils/mdb2rec.c:103 +#, c-format +msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" +msgstr "Uso: mdb2rec [OPÇÕES]... ARQUIVO_MDB [TABELA]\n" + +#. TRANSLATORS: --help output, mdb2rec short description. +#. no-wrap +#: utils/mdb2rec.c:108 +msgid "Convert an mdb file into a rec file.\n" +msgstr "Converte um arquivo mdb em um arquivo rec.\n" + +#. TRANSLATORS: --help output, mdb2rec options. +#. no-wrap +#: utils/mdb2rec.c:114 +msgid "" +" -s, --system-tables include system tables.\n" +" -e, --keep-empty-fields don't prune empty fields in the rec\n" +" output.\n" +" -l, --list-tables dump a list of the table names " +"contained\n" +" in the mdb file.\n" +msgstr "" +" -s, --system-tables inclui tabelas do sistema.\n" +" -e, --keep-empty-fields não remove campos vazios na saída da\n" +" tabela rec.\n" +" -l, --list-tables despeja uma lista dos nomes de " +"tabelas\n" +" contidos no arquivo mdb.\n" + +#: utils/mdb2rec.c:251 utils/mdb2rec.c:315 +#, c-format +msgid "failed to normalise record type name %s\n" +msgstr "falha ao normalizar o nome do tipo de registro %s\n" + +#: utils/mdb2rec.c:259 utils/mdb2rec.c:270 +#, c-format +msgid "failed to normalise field name %s\n" +msgstr "falha ao normalizar o nome do campo %s\n" + +#: utils/mdb2rec.c:336 +#, c-format +msgid "failed to normalise the field name %s\n" +msgstr "falha ao normalizar o nome do campo %s\n" + +#: utils/mdb2rec.c:443 utils/recins.c:208 utils/recset.c:253 +#, c-format +msgid "invalid field name %s.\n" +msgstr "nome de campo inválido %s.\n" + +#: utils/mdb2rec.c:482 +#, c-format +msgid "could not open file %s\n" +msgstr "não foi possível abrir o arquivo %s\n" + +#: utils/mdb2rec.c:489 +msgid "file does not appear to be an Access database\n" +msgstr "o arquivo não parece ser um banco de dados Access\n" + +#. TRANSLATORS: --help output, rec2csv synopsis. +#. no-wrap +#: utils/rec2csv.c:86 +#, c-format +msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" +msgstr "Uso: rec2csv [OPÇÕES]... [ARQUIVO_CSV]\n" + +#. TRANSLATORS: --help output, rec2csv short description. +#. no-wrap +#: utils/rec2csv.c:91 +msgid "Convert rec data into csv data.\n" +msgstr "Converte dados rec em dados csv.\n" + +#. TRANSLATORS: --help output, rec2csv options. +#. no-wrap +#: utils/rec2csv.c:97 +msgid "" +" -d, --delim=char sets the deliminator (default ',')\n" +" -t, --type=TYPE record set to convert to csv; if this " +"parameter\n" +" is omitted then the default record " +"set is used\n" +" -S, --sort=FIELDS sort the output by the specified " +"fields.\n" +msgstr "" +" -d, --delim=char define o delimitador (padrão \",\")\n" +" -t, --type=TIPO conjunto de registros a ser " +"convertido\n" +" para csv; is este parâmetro for " +"omitido,\n" +" então usa o conjunto de registros " +"padrão\n" +" -S, --sort=CAMPOS ordena a saída pelos campos " +"especificados\n" + +#: utils/rec2csv.c:142 +msgid "only one list of fields can be specified as a sorting criteria.\n" +msgstr "" +"apenas uma lista de campos pode ser especificada como um critério de " +"ordenação.\n" + +#: utils/rec2csv.c:149 +msgid "invalid field name list in -S.\n" +msgstr "lista de nomes de campos inválida em -S.\n" + +#: utils/rec2csv.c:155 utils/recsel.c:248 utils/recsel.c:286 +msgid "internal error creating fex.\n" +msgstr "erro interno ao criar fex.\n" + +#. TRANSLATORS: --help output, recdel synopsis. +#. no-wrap +#: utils/recdel.c:89 +#, c-format +msgid "" +"Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [FILE]\n" +msgstr "" +"Uso: recdel [OPÇÕES]... [-t TIPO] [-n NÚM | -e EXPR_REGISTRO | -q TEXTO | -m " +"NÚM] [ARQUIVO]\n" + +#. TRANSLATORS: --help output, recdel short description. +#. no-wrap +#: utils/recdel.c:94 +msgid "Remove (or comment out) records from a rec file.\n" +msgstr "Remove (ou comenta) registros de um arquivo rec.\n" + +#. TRANSLATORS: --help output, recdel arguments. +#. no-wrap +#: utils/recdel.c:101 +msgid "" +" -c, --comment comment out the matching records " +"instead of\n" +" deleting them.\n" +" --force delete even in potentially dangerous " +"situations,\n" +" and if the deletion is violating " +"record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -c, --comment comenta os registros correspondentes,\n" +" ao invés de excluí-los.\n" +" --force exclui mesmo em situações " +"potencialmente\n" +" perigosas e se a exclusão estiver\n" +" violando restrições do registro.\n" +" --no-external não usa descritores externos.\n" +" --verbose fornece um relatório detalhado se a\n" +" verificação de integridade falhar.\n" + +#. TRANSLATORS: --help output, notes on recdel. +#. no-wrap +#. TRANSLATORS: --help output, notes on recfix. +#. no-wrap +#. TRANSLATORS: --help output, notes on recins. +#. no-wrap +#: utils/recdel.c:119 utils/recfix.c:167 utils/recins.c:149 +msgid "" +"If no FILE is specified then the command acts like a filter, getting\n" +"the data from standard input and writing the result to standard output.\n" +msgstr "" +"Se nenhum ARQUIVO for especificado, então o comando age como um filtro,\n" +"obtendo dados da saída padrão e escrevendo o resultado na saída padrão.\n" + +#: utils/recdel.c:136 +#, c-format +msgid "no records of type %s found.\n" +msgstr "nenhum registro do tipo %s encontrado.\n" + +#: utils/recdel.c:227 +#, c-format +msgid "ignoring a request to delete all records of type %s.\n" +msgstr "ignorando uma requisição para excluir todos registros do tipo %s.\n" + +#: utils/recdel.c:229 +msgid "use --force if you really want to proceed, or use either -n or -e.\n" +msgstr "use --force se você realmente deseja prosseguir ou use -n ou -e.\n" + +#: utils/recdel.c:237 +msgid "invalid selection expression.\n" +msgstr "expressão de seleção inválida.\n" + +#: utils/recdel.c:276 utils/recfix.c:407 utils/recins.c:410 utils/recset.c:365 +#, c-format +msgid "file %s is not writable.\n" +msgstr "arquivo %s não pode ser escrito.\n" + +#. TRANSLATORS: --help output, recfix synopsis. +#. no-wrap +#: utils/recfix.c:117 +#, c-format +msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" +msgstr "Uso: recfix [OPÇÃO]... [OPERAÇÃO] [OPÇÃO-OPERAÇÃO]... [ARQUIVO]\n" + +#. TRANSLATORS: --help output, recfix short description. +#. no-wrap +#: utils/recfix.c:122 +msgid "Check and fix rec files.\n" +msgstr "Verifica e corrige arquivos rec.\n" + +#. TRANSLATORS: --help output, recfix global arguments. +#. no-wrap +#: utils/recfix.c:129 +msgid "" +" --no-external don't use external descriptors.\n" +" --force force the requested operation.\n" +msgstr "" +" --no-external não usa descritores externos.\n" +" --force força a operação requisitada.\n" + +#. TRANSLATORS: --help output, recfix operations. +#. no-wrap +#: utils/recfix.c:139 +msgid "" +"Operations:\n" +" --check check integrity of the specified " +"file. Default.\n" +" --sort sort the records in the specified " +"file.\n" +" --auto insert auto-generated fields in " +"records missing them.\n" +msgstr "" +"Operações:\n" +" --check verifica integridade do arquivo\n" +" especificado. Padrão.\n" +" --sort ordena os registros no arquivo\n" +" especificado.\n" +" --auto insere campos auto-gerados em " +"registros\n" +" que precisem deles.\n" + +#. TRANSLATORS: --help output, recfix operations related with encryption. +#. no-wrap +#: utils/recfix.c:149 +msgid "" +" --encrypt encrypt confidential fields in the " +"specified file.\n" +" --decrypt decrypt confidential fields in the " +"specified file.\n" +msgstr "" +" --encrypt criptografa campos confidenciais no\n" +" arquivo especificado.\n" +" --decrypt descriptografa campos confidenciais " +"no\n" +" arquivo especificado.\n" + +#. TRANSLATORS: --help output, recfix encryption and decryption +#. options. +#. no-wrap +#: utils/recfix.c:158 +msgid "" +"De/Encryption options:\n" +" -s, --password=PASSWORD encrypt/decrypt with this password.\n" +msgstr "" +"Opções de (des)criptografia:\n" +" -s, --password=SENHA criptografa/descriptografa com essa " +"senha.\n" + +#: utils/recfix.c:208 +msgid "--password|-s must be used as an operation argument.\n" +msgstr "--password|-s deve ser usado como um argumento de operação.\n" + +#: utils/recfix.c:214 +msgid "the specified operation does not require a password.\n" +msgstr "a operação especificada não requer uma senha.\n" + +#: utils/recfix.c:219 +msgid "please specify just one password.\n" +msgstr "por favor, especifique apenas uma senha.\n" + +#: utils/recfix.c:230 utils/recfix.c:240 utils/recfix.c:250 utils/recfix.c:261 +#: utils/recfix.c:271 +msgid "please specify just one operation.\n" +msgstr "por favor, especifique apenas uma operação.\n" + +#: utils/recfix.c:463 +msgid "the database contains already encrypted fields\n" +msgstr "o banco de dados já contém campos criptografados\n" + +#: utils/recfix.c:464 +msgid "please use --force or --decrypt\n" +msgstr "por favor, use --force ou --decrypt\n" + +#: utils/recfix.c:574 +msgid "unknown operation in recfix: please report this as a bug.\n" +msgstr "" +"operação desconhecida em recfix: por favor, relate isto como um erro.\n" + +#. TRANSLATORS: --help output, recfmt synopsis. +#. no-wrap +#: utils/recfmt.c:78 +#, c-format +msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" +msgstr "Uso: recfmt [OPÇÕES]... [MODELO]\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:83 +msgid "Apply a template to records read from standard input.\n" +msgstr "Aplica um modelo aos registros lidos da entrada padrão.\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:89 +msgid "" +" -f, --file=FILENAME read the template to apply from a " +"file.\n" +msgstr "" +" -f, --file=ARQUIVO lê o modelo para aplicar de um " +"arquivo.\n" + +#: utils/recfmt.c:123 +#, c-format +msgid "can't open file %s for reading.\n" +msgstr "não foi possível abrir %s para leitura.\n" + +#: utils/recfmt.c:141 +msgid "don't specify a template in the command line and -f at the same time.\n" +msgstr "não especifique um modelo na linha de comando e -f ao mesmo tempo.\n" + +#: utils/recfmt.c:164 +msgid "invalid expression in a template slot.\n" +msgstr "expressão inválida em um slot de modelo.\n" + +#: utils/recfmt.c:170 +msgid "error evaluating expression in a template slot.\n" +msgstr "erro ao avaliar uma expressão em um slot de modelo.\n" + +#: utils/recfmt.c:204 +msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" +msgstr "" +"recfmt_apply_template: erro ao compilar expressão regular. Por favor, relate " +"isto.\n" + +#. TRANSLATORS: --help output, recinf synopsis. +#. no-wrap +#: utils/recinf.c:84 +#, c-format +msgid "Usage: recinf [OPTION]... [FILE]...\n" +msgstr "Uso: recinf [OPÇÃO]... [ARQUIVO]...\n" + +#. TRANSLATORS: --help output, recinf short description. +#. no-wrap +#: utils/recinf.c:89 +msgid "Print information about the types of records stored in the input.\n" +msgstr "" +"Imprime informação sobre os tipos de registros armazenados na entrada.\n" + +#. TRANSLATORS: --help output, recinf arguments. +#. no-wrap +#: utils/recinf.c:96 +msgid "" +" -t, --type=RECORD_TYPE print information on the records having " +"the\n" +" specified type.\n" +" -d, --descriptor include the full record descriptors.\n" +" -n, --names-only output just the names of the record files\n" +" found in the input.\n" +msgstr "" +" -t, --type=TIPO_REGISTRO imprime informação sobre os registros " +"tendo\n" +" o tipo especificado.\n" +" -d, --descriptor inclui os descritores de registros " +"completos.\n" +" -n, --names-only mostra apenas os nomes dos arquivos de\n" +" registro encontrados na entrada.\n" + +#. TRANSLATORS: --help output, recinf special options. +#. no-wrap +#: utils/recinf.c:109 +msgid "" +"Special options:\n" +" -S, --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Opções especiais:\n" +" -S, --print-sexps mostra dados em sexps, em vez de " +"formato rec.\n" + +#: utils/recinf.c:263 +#, c-format +msgid "error: cannot read file %s\n" +msgstr "erro: não foi possível ler o arquivo %s\n" + +#. TRANSLATORS: --help output, recins synopsis. +#. no-wrap +#: utils/recins.c:111 +#, c-format +msgid "" +"Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" +msgstr "" +"Uso: recins [OPÇÃO]... [-t TIPO] [-n NÚM | -e EXPR_REGISTRO | -q TEXTO | -m " +"NÚM] [(-f NOME -v TEXTO) | -r DADOS-REC]... [ARQUIVO]\n" + +#. TRANSLATORS: --help output, recins short description. +#. no-wrap +#: utils/recins.c:116 +msgid "Insert new records in a rec database.\n" +msgstr "Insere novos registros em um banco de dados rec.\n" + +#. TRANSLATORS: --help output, recins arguments. +#. no-wrap +#: utils/recins.c:122 +msgid "" +" -f, --field=STR field name; should be followed by a -" +"v.\n" +" -v, --value=STR field value; should be preceded by an -" +"f.\n" +" -r, --record=STR record that will be inserted in the " +"file.\n" +" --force insert the record even if it is " +"violating\n" +" record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --no-auto don't insert auto generated fields.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -f, --field=TEXTO nome do campo; deve ser seguido por -" +"v.\n" +" -v, --value=TEXTO valor do campo; deve vir após um -f.\n" +" -r, --record=TEXTO registro que será inserido no " +"arquivo.\n" +" --force insere o registro mesmo se isso foi " +"uma\n" +" violação das restrições do " +"registro.\n" +" --no-external não usa descritores externos.\n" +" --no-auto não insere campos gerados " +"automaticamente.\n" +" --verbose fornece um relatório detalhado se a\n" +" verificação de integridade falhar.\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recins.c:136 +msgid "" +" -s, --password=STR encrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=SENHA criptografa campos confidenciais com a " +"SENHA.\n" + +#: utils/recins.c:195 +msgid "a -f should be followed by a -v\n" +msgstr "um -f deve ser seguido por um -v\n" + +#: utils/recins.c:219 +msgid "a -v should be preceded by a -f\n" +msgstr "um -v deve vir após um -f\n" + +#: utils/recins.c:244 utils/recsel.c:223 +msgid "more than one password was specified\n" +msgstr "mais do que uma senha foi especificada\n" + +#: utils/recins.c:258 +msgid "error while parsing the record provided by -r\n" +msgstr "erro ao analisar o registro fornecido por -r\n" + +#: utils/recins.c:293 +#, c-format +msgid "please provide a value for the field %s\n" +msgstr "por favor, forneça um valor para o campo %s\n" + +#. TRANSLATORS: --help output, recsel synopsis. +#. no-wrap +#: utils/recsel.c:118 +#, c-format +msgid "" +"Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " +"| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" +msgstr "" +"Uso: recsel [OPÇÃO]... [-t TIPO] [-j CAMPO] [-n ÍNDICES | -e EXPR_REGISTRO | " +"-q TEXTO | -m NÚM] [-c | (-p|-P) EXPR_CAMPO] [ARQUIVO]...\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:123 +msgid "Select and print rec data.\n" +msgstr "Selecione e imprime dados rec.\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:129 +msgid "" +" -d, --include-descriptors print record descriptors along with " +"the matched\n" +" records.\n" +" -C, --collapse do not section the result in records " +"with newlines.\n" +" -S, --sort=FIELD,... sort the output by the specified " +"fields.\n" +" -G, --group-by=FIELD,... group records by the specified " +"fields.\n" +" -U, --uniq remove duplicated fields in the output " +"records.\n" +msgstr "" +" -d, --include-descriptors imprime descritores de registro junto\n" +" com os registros correspondentes.\n" +" -C, --collapse não secciona o resultado em registros\n" +" com novas linhas.\n" +" -S, --sort=CAMPO,... ordena a saída pelos campos.\n" +" -G, --group-by=CAMPO,... agrupa registros pelos campos\n" +" especificados.\n" +" -U, --uniq remove campos duplicados nos " +"registros\n" +" de saída.\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recsel.c:141 +msgid "" +" -s, --password=STR decrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=SENHA descriptografa campos confidenciais " +"com\n" +" a SENHA.\n" + +#: utils/recsel.c:150 +msgid "" +" -j, --join=FIELD perform an inner join using the " +"specified field.\n" +msgstr "" +" -j, --join=CAMPO faz uma aglutinação, estilo inner " +"join, \n" +" usando o campo especificado..\n" + +#. TRANSLATORS: --help output, recsel output options. +#. no-wrap +#: utils/recsel.c:157 +msgid "" +"Output options:\n" +" -p, --print=FIELDS comma-separated list of fields to " +"print for each\n" +" matching record.\n" +" -P, --print-values=FIELDS as -p, but print only the values of " +"the selected\n" +" fields.\n" +" -R, --print-row=FIELDS as -P, but separate the values with " +"spaces instead\n" +" of newlines.\n" +" -c, --count print a count of the matching records " +"instead of\n" +" the records themselves.\n" +msgstr "" +"Opções de saída:\n" +" -p, --print=CAMPOS lista separada por vírgula de campos " +"a\n" +" ser impressos para cada registro\n" +" correspondente.\n" +" -P, --print-values=CAMPOS semelhante a -p, mas imprime apenas " +"os\n" +" valores dos campos selecionados.\n" +" -R, --print-row=CAMPOS semelhante a -P, mas separa os " +"valores\n" +" com espaços, ao invés de novas " +"linhas.\n" +" -c, --count imprime uma contagem de registros\n" +" correspondentes, ao invés dos " +"registros\n" +" em si.\n" + +#. TRANSLATORS: --help output, recsel special options. +#. no-wrap +#: utils/recsel.c:171 +msgid "" +"Special options:\n" +" --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Opções especiais:\n" +" --print-sexps imprime os dados em sexps, ao invés " +"do\n" +" formato rec.\n" + +#: utils/recsel.c:235 +msgid "only one field list can be specified as a sorting criteria.\n" +msgstr "" +"apenas uma lista de campos pode ser especificada como um critério de " +"ordenação.\n" + +#: utils/recsel.c:242 +msgid "invalid field names in -S.\n" +msgstr "nomes de campos inválidos em -S.\n" + +#: utils/recsel.c:258 +msgid "only one field can be specified as join criteria.\n" +msgstr "" +"apenas um campo pode ser especificado como um critério de aglutinação " +"(join).\n" + +#: utils/recsel.c:263 +msgid "please specify a correct field name to -j|--join.\n" +msgstr "por favor, especifique um nome de campo correto para -j|--join.\n" + +#: utils/recsel.c:274 +msgid "only one field list can be specified as a grouping criteria.\n" +msgstr "" +"apenas uma lista de campos pode ser especificada como um critério de " +"agrupamento.\n" + +#: utils/recsel.c:280 +msgid "invalid field names in -G.\n" +msgstr "nomes de campos inválidos em -G.\n" + +#: utils/recsel.c:300 +msgid "cannot specify -[pPR] and also -c.\n" +msgstr "não é permitido especificar -[pPR] e também -c.\n" + +#: utils/recsel.c:317 +#, c-format +msgid "invalid list of fields in -%c\n" +msgstr "lista de campos inválida em -%c\n" + +#: utils/recsel.c:325 +msgid "internal error creating the field expression.\n" +msgstr "erro interno ao criar a expressão de campo.\n" + +#: utils/recsel.c:340 +#, c-format +msgid "invalid aggregate function '%s'\n" +msgstr "função de agregação inválida \"%s\"\n" + +#: utils/recsel.c:358 +msgid "cannot specify -c and also -p.\n" +msgstr "não é permitido especificar -c e também -p.\n" + +#: utils/recsel.c:377 +msgid "joins can only be used when a named record set is selected.\n" +msgstr "" +"aglutinações (join) podem ser usadas apenas quando um conjunto de registro " +"dado for selecionado.\n" + +#: utils/recsel.c:439 +msgid "several record types found. Please use -t to specify one.\n" +msgstr "" +"vários tipos de registros encontrados. Por favor, use -t para especificar " +"um.\n" + +#. TRANSLATORS: --help output, recset synopsis. +#. no-wrap +#: utils/recset.c:113 +#, c-format +msgid "Usage: recset [OPTION]... [FILE]...\n" +msgstr "Uso: recset [OPÇÃO]... [ARQUIVO]...\n" + +#. TRANSLATORS: --help output, recset short description. +#. no-wrap +#: utils/recset.c:118 +msgid "Alter or delete fields in records.\n" +msgstr "Altera ou exclui campos em registros.\n" + +#. TRANSLATORS: --help output, recset options. +#. no-wrap +#: utils/recset.c:124 +msgid "" +" --no-external don't use external descriptors.\n" +" --force alter the records even if violating " +"record\n" +" restrictions.\n" +msgstr "" +" --no-external não usa descritores externos.\n" +" --force altera os registros mesmo se isso " +"violar\n" +" restrições de registros.\n" + +#. TRANSLATORS: --help output, recset field selection options. +#. no-wrap +#: utils/recset.c:137 +msgid "" +"Field selection options:\n" +" -f, --fields=FIELDS comma-separated list of field names " +"with optional\n" +" subscripts.\n" +msgstr "" +"Opções de seleção de campos:\n" +" -f, --fields=CAMPOS lista separada por vírgula de campos\n" +" dados com subscritos opcionais.\n" + +#. TRANSLATORS: --help output, recset actions. +#. no-wrap +#: utils/recset.c:145 +msgid "" +"Actions:\n" +" -s, --set=VALUE change the value of the selected " +"fields.\n" +" -a, --add=VALUE add the selected fields with the given " +"value.\n" +" -S, --set-add=VALUE change the value of the selected " +"fields. If they don't\n" +" exist then add a new field with that " +"value.\n" +" -r, --rename=NAME rename the selected fields to a given " +"name. If an entire\n" +" record set is selected then the " +"field is renamed in the\n" +" record descriptor as well.\n" +" -d, --delete delete the selected fields.\n" +" -c, --comment comment out the selected fields.\n" +msgstr "" +"Ações:\n" +" -s, --set=VALOR altera o valor dos campos " +"selecionados.\n" +" -a, --add=VALOR adiciona campos selecionados com o " +"valor.\n" +" -S, --set-add=VALOR altera o valor dos campos " +"selecionados.\n" +" Se eles não existiram, então " +"adiciona\n" +" um novo campo com aquele valor.\n" +" -r, --rename=NOME renomeia os campos selecionadas para " +"um\n" +" nome dado. Se todo um conjunto de\n" +" registro for selecionado, então o\n" +" campo também é renomeado no " +"descritor\n" +" de arquivo.\n" +" -d, --delete exclui os campos selecionados.\n" +" -c, --comment comenta os campos selecionados.\n" + +#: utils/recset.c:168 +msgid "please specify some field with -f.\n" +msgstr "por favor, especifique alguns campos com -f.\n" + +#: utils/recset.c:173 +msgid "please specify just one action.\n" +msgstr "por favor, especifique apenas uma ação.\n" + +#: utils/recset.c:213 +msgid "invalid field expression in -f.\n" +msgstr "expressão de campo inválido em -f.\n" + +#: utils/recset.c:221 +msgid "creating the field expression.\n" +msgstr "criando a expressão do campo.\n" + +#: utils/recset.c:243 +msgid "" +"the rename operation requires just one field with an optional subscript.\n" +msgstr "" +"a operação de renomeação requer apenas um campo com um subscrito opcional.\n" + +#. TRANSLATORS: --help output 5+ (reports) +#. TRANSLATORS: the placeholder indicates the bug-reporting address +#. for this application. Please add _another line_ with the +#. address for translation bugs. +#. no-wrap +#: utils/recutl.c:122 +#, c-format +msgid "Report bugs to: %s\n" +msgstr "" +"Relate erros para: %s\n" +"Relate erros de tradução para <http://ldpbr-translation@lists.sourceforge." +"net>\n" + +#: utils/recutl.c:131 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" +msgstr "Página do %s: <http://www.gnu.org/software/recutils/>\n" + +#: utils/recutl.c:134 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "Ajuda geral no uso de software GNU: <http://www.gnu.org/gethelp/>\n" + +#. TRANSLATORS: --help output, common arguments. +#. no-wrap +#: utils/recutl.c:143 +msgid "" +" --help print a help message and exit.\n" +" --version show version and exit.\n" +msgstr "" +" --help mostra uma mensagem de ajuda e sai.\n" +" --version mostra a versão e sai.\n" + +#. TRANSLATORS: --help output, record selection arguments +#. no-wrap +#: utils/recutl.c:154 +msgid "" +"Record selection options:\n" +" -i, --case-insensitive make strings case-insensitive in " +"selection\n" +" expressions.\n" +" -t, --type=TYPE operate on records of the specified " +"type only.\n" +" -e, --expression=RECORD_EXPR selection expression.\n" +" -q, --quick=STR select records with fields containing " +"a string.\n" +" -n, --number=NUM,... select specific records by position, " +"with ranges.\n" +" -m, --random=NUM select a given number of random " +"records.\n" +msgstr "" +"Opções de seleção de registros:\n" +" -i, --case-insensitive diferencia textos entre maiúsculo e\n" +" minúsculo nas expressões de " +"seleção.\n" +" -t, --type=TIPO opera em registros apenas do tipo\n" +" especificado.\n" +" -e, --expression=EXPR_REGISTRO expressão de seleção.\n" +" -q, --quick=TEXTO seleciona registros com campos " +"contendo\n" +" um texto.\n" +" -n, --number=NÚM,... seleciona registros por posição, com\n" +" intervalos.\n" +" -m, --random=NÚM seleciona um número dado de registros\n" +" aleatórios.\n" + +#: utils/recutl.c:179 +#, c-format +msgid "" +"Copyright (C) %s Jose E. Marchesi.\n" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +msgstr "" +"Copyright (C) %s Jose E. Marchesi.\n" +"Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/gpl." +"html>\n" +"Este é um software livre: você é livre para alterá-lo e redistribuí-lo.\n" +"NÃO HÁ QUALQUER GARANTIA, na máxima extensão permitida em lei.\n" + +#: utils/recutl.c:185 +msgid "" +"\n" +"Written by Jose E. Marchesi." +msgstr "" +"\n" +"Escrito por Jose E. Marchesi." + +#: utils/recutl.c:197 utils/recutl.c:217 +msgid ": error: " +msgstr ": erro: " + +#: utils/recutl.c:229 +msgid ": warning: " +msgstr ": aviso: " + +#: utils/recutl.c:254 +#, c-format +msgid "duplicated record set '%s' from %s.\n" +msgstr "conjunto de registros duplicados \"%s\" de \"%s\".\n" + +#: utils/recutl.c:417 +msgid "cannot create a unique name.\n" +msgstr "não foi possível criar um nome único.\n" + +#: utils/recutl.c:438 +#, c-format +msgid "renaming file %s to %s\n" +msgstr "renomeando o arquivo %s para %s\n" + +#: utils/recutl.c:482 +msgid "operation aborted due to integrity failures.\n" +msgstr "operação abortada em decorrência de falhas de integridade.\n" + +#: utils/recutl.c:483 +msgid "use --verbose to get a detailed report.\n" +msgstr "use --verbose para obter um relatório detalhado.\n" + +#: utils/recutl.c:490 +msgid "use --force to skip the integrity check.\n" +msgstr "use --force para ignorar a verificação de integridade.\n" + +#: utils/recutl.c:551 +msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" +msgstr "" +"erro interno: recutl_index_list_parse: erro ao compilar a expressão " +"regular.\n" + +#: utils/recutl.c:626 +msgid "Password: " +msgstr "Senha: " + +#: utils/recutl.c:632 +msgid "Password again: " +msgstr "Senha novamente: " + +#: utils/recutl.c:637 +msgid "the provided passwords don't match.\n" +msgstr "as senhas fornecidas não correspondem.\n" + +#: utils/recutl.h:97 utils/recutl.h:186 utils/recutl.h:190 +#, fuzzy +msgid "cannot specify -e and also -n\n" +msgstr "não é permitido especificar -c e também -p.\n" + +#: utils/recutl.h:102 +#, fuzzy +msgid "cannot specify -e and also -q\n" +msgstr "não é permitido especificar -c e também -p.\n" + +#: utils/recutl.h:113 +#, fuzzy +msgid "invalid selection expression\n" +msgstr "expressão de seleção inválida.\n" + +#: utils/recutl.h:125 +#, fuzzy +msgid "cannot specify -n and also -e\n" +msgstr "não é permitido especificar -c e também -p.\n" + +#: utils/recutl.h:130 +#, fuzzy +msgid "cannot specify -n and also -q\n" +msgstr "não é permitido especificar -c e também -p.\n" + +#: utils/recutl.h:140 +#, fuzzy +msgid "invalid list of indexes in -n\n" +msgstr "lista de campos inválida em -%c\n" + +#: utils/recutl.h:150 +#, fuzzy +msgid "cannot specify -m and also -e\n" +msgstr "não é permitido especificar -c e também -p.\n" + +#: utils/recutl.h:155 +#, fuzzy +msgid "cannot specify -m and also -q\n" +msgstr "não é permitido especificar -c e também -p.\n" + +#: utils/recutl.h:160 +#, fuzzy +msgid "cannot specify -m and also -n\n" +msgstr "não é permitido especificar -c e também -p.\n" + +#~ msgid "%s: option '--%s' doesn't allow an argument\n" +#~ msgstr "%s: a opção \"--%s\" não permite um argumento\n" + +#~ msgid "%s: unrecognized option '--%s'\n" +#~ msgstr "%s: opção desconhecida \"--%s\"\n" + +#~ msgid "%s: option '-W %s' doesn't allow an argument\n" +#~ msgstr "%s: a opção \"-W %s\" não permite um argumento\n" + +#~ msgid "%s: option '-W %s' requires an argument\n" +#~ msgstr "%s: a opção \"-W %s\" exige um argumento\n" diff --git a/devspec.en_US/project/recutils/po/quot.sed b/devspec.en_US/project/recutils/po/quot.sed new file mode 100755 index 0000000..0122c46 --- /dev/null +++ b/devspec.en_US/project/recutils/po/quot.sed @@ -0,0 +1,6 @@ +s/"\([^"]*\)"/“\1”/g +s/`\([^`']*\)'/‘\1’/g +s/ '\([^`']*\)' / ‘\1’ /g +s/ '\([^`']*\)'$/ ‘\1’/g +s/^'\([^`']*\)' /‘\1’ /g +s/“”/""/g diff --git a/devspec.en_US/project/recutils/po/recutils.pot b/devspec.en_US/project/recutils/po/recutils.pot new file mode 100755 index 0000000..9cae636 --- /dev/null +++ b/devspec.en_US/project/recutils/po/recutils.pot @@ -0,0 +1,1736 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# This file is distributed under the same license as the GNU recutils package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: GNU recutils 1.8\n" +"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" +"POT-Creation-Date: 2019-01-03 10:32+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: lib/closeout.c:122 +msgid "write error" +msgstr "" + +#: lib/copy-acl.c:54 +#, c-format +msgid "preserving permissions for %s" +msgstr "" + +#: lib/error.c:195 +msgid "Unknown system error" +msgstr "" + +#: lib/execute.c:185 lib/execute.c:258 lib/wait-process.c:282 +#: lib/wait-process.c:356 +#, c-format +msgid "%s subprocess failed" +msgstr "" + +#: lib/getopt.c:278 +#, c-format +msgid "%s: option '%s%s' is ambiguous\n" +msgstr "" + +#: lib/getopt.c:284 +#, c-format +msgid "%s: option '%s%s' is ambiguous; possibilities:" +msgstr "" + +#: lib/getopt.c:319 +#, c-format +msgid "%s: unrecognized option '%s%s'\n" +msgstr "" + +#: lib/getopt.c:345 +#, c-format +msgid "%s: option '%s%s' doesn't allow an argument\n" +msgstr "" + +#: lib/getopt.c:360 +#, c-format +msgid "%s: option '%s%s' requires an argument\n" +msgstr "" + +#: lib/getopt.c:621 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "" + +#: lib/getopt.c:636 lib/getopt.c:682 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "" + +#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "" + +#: parse-datetime.y:440 parse-datetime.y:540 +#, c-format +msgid "parsed %s part: " +msgstr "" + +#: parse-datetime.y:455 +#, c-format +msgid "year: %04<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:483 +#, c-format +msgid "%s (day ordinal=%<PRIdMAX> number=%d)" +msgstr "" + +#: parse-datetime.y:514 +#, c-format +msgid "number of seconds: %<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:547 +msgid "today/this/now\n" +msgstr "" + +#: parse-datetime.y:612 +msgid "number of seconds" +msgstr "" + +#: parse-datetime.y:625 +msgid "datetime" +msgstr "" + +#: parse-datetime.y:630 +msgid "time" +msgstr "" + +#: parse-datetime.y:635 +msgid "local_zone" +msgstr "" + +#: parse-datetime.y:640 +msgid "zone" +msgstr "" + +#: parse-datetime.y:645 +msgid "date" +msgstr "" + +#: parse-datetime.y:650 +msgid "day" +msgstr "" + +#: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 +msgid "relative" +msgstr "" + +#: parse-datetime.y:658 +msgid "number" +msgstr "" + +#: parse-datetime.y:662 +msgid "hybrid" +msgstr "" + +#: parse-datetime.y:820 +#, c-format +msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" +msgstr "" + +#: parse-datetime.y:832 +#, c-format +msgid "" +"warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" +msgstr "" + +#: parse-datetime.y:1276 +#, c-format +msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1286 +#, c-format +msgid "error: out-of-range year %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1524 +#, c-format +msgid "error: unknown word '%s'\n" +msgstr "" + +#: parse-datetime.y:1673 +msgid "error: invalid date/time value:\n" +msgstr "" + +#: parse-datetime.y:1674 +#, c-format +msgid " user provided time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1676 +#, c-format +msgid " normalized time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1699 +msgid " possible reasons:\n" +msgstr "" + +#: parse-datetime.y:1701 +msgid " non-existing due to daylight-saving time;\n" +msgstr "" + +#: parse-datetime.y:1703 +msgid " invalid day/month combination;\n" +msgstr "" + +#: parse-datetime.y:1704 +msgid " numeric values overflow;\n" +msgstr "" + +#: parse-datetime.y:1705 +msgid "incorrect timezone" +msgstr "" + +#: parse-datetime.y:1706 +msgid "missing timezone" +msgstr "" + +#: parse-datetime.y:1826 +msgid "error: initial year out of range\n" +msgstr "" + +#: parse-datetime.y:1923 +msgid "error: parsing failed\n" +msgstr "" + +#: parse-datetime.y:1924 +#, c-format +msgid "error: parsing failed, stopped at '%s'\n" +msgstr "" + +#: parse-datetime.y:1934 +msgid "input timezone: " +msgstr "" + +#: parse-datetime.y:1937 +#, c-format +msgid "'@timespec' - always UTC" +msgstr "" + +#: parse-datetime.y:1939 +#, c-format +msgid "parsed date/time string" +msgstr "" + +#: parse-datetime.y:1943 +#, c-format +msgid "TZ=\"%s\" in date string" +msgstr "" + +#: parse-datetime.y:1947 +#, c-format +msgid "TZ=\"UTC0\" environment value or -u" +msgstr "" + +#: parse-datetime.y:1950 +#, c-format +msgid "TZ=\"%s\" environment value" +msgstr "" + +#: parse-datetime.y:1953 +#, c-format +msgid "system default" +msgstr "" + +#: parse-datetime.y:1995 +msgid "error: year, month, or day overflow\n" +msgstr "" + +#: parse-datetime.y:2006 +#, c-format +msgid "error: invalid hour %<PRIdMAX>%s\n" +msgstr "" + +#: parse-datetime.y:2014 +#, c-format +msgid "using specified time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2015 +#, c-format +msgid "using current time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2069 +#, c-format +msgid "error: tzalloc (\"%s\") failed\n" +msgstr "" + +#: parse-datetime.y:2114 +#, c-format +msgid "" +"error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " +"date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2125 +#, c-format +msgid "new start date: '%s' is '%s'\n" +msgstr "" + +#: parse-datetime.y:2134 +#, c-format +msgid "using current date as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2138 +#, c-format +msgid "warning: day (%s) ignored when explicit dates are given\n" +msgstr "" + +#: parse-datetime.y:2142 +#, c-format +msgid "starting date/time: '%s'\n" +msgstr "" + +#: parse-datetime.y:2152 +msgid "" +"warning: when adding relative months/years, it is recommended to specify the " +"15th of the months\n" +msgstr "" + +#: parse-datetime.y:2157 +msgid "warning: when adding relative days, it is recommended to specify noon\n" +msgstr "" + +#: parse-datetime.y:2167 +#, c-format +msgid "error: %s:%d\n" +msgstr "" + +#: parse-datetime.y:2181 +#, c-format +msgid "error: adding relative date resulted in an invalid date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2190 +#, c-format +msgid "" +"after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " +"days),\n" +msgstr "" + +#: parse-datetime.y:2194 +#, c-format +msgid " new date/time = '%s'\n" +msgstr "" + +#: parse-datetime.y:2213 +msgid "warning: daylight saving time changed after date adjustment\n" +msgstr "" + +#: parse-datetime.y:2232 +msgid "warning: month/year adjustment resulted in shifted dates:\n" +msgstr "" + +#: parse-datetime.y:2235 +#, c-format +msgid " adjusted Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2237 +#, c-format +msgid " normalized Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2265 +#, c-format +msgid "error: timezone %d caused time_t overflow\n" +msgstr "" + +#: parse-datetime.y:2275 +#, c-format +msgid "'%s' = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2303 +msgid "error: adding relative time caused an overflow\n" +msgstr "" + +#: parse-datetime.y:2314 +#, c-format +msgid "" +"after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " +"seconds, %+d ns),\n" +msgstr "" + +#: parse-datetime.y:2319 +#, c-format +msgid " new time = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2335 +msgid "warning: daylight saving time changed after time adjustment\n" +msgstr "" + +#: parse-datetime.y:2345 +msgid "timezone: system default\n" +msgstr "" + +#: parse-datetime.y:2347 +msgid "timezone: Universal Time\n" +msgstr "" + +#: parse-datetime.y:2349 +#, c-format +msgid "timezone: TZ=\"%s\" environment value\n" +msgstr "" + +#: parse-datetime.y:2353 +#, c-format +msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" +msgstr "" + +#: parse-datetime.y:2359 +#, c-format +msgid "final: %s (UTC)\n" +msgstr "" + +#: parse-datetime.y:2374 +#, c-format +msgid "final: %s (UTC%s)\n" +msgstr "" + +#: parse-datetime.y:2378 +#, c-format +msgid "final: %s (unknown time zone offset)\n" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". For example, a French Unicode local should translate +#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), respectively. +#. +#. If the catalog has no translation, we will try to +#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and +#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the +#. current locale is not Unicode, locale_quoting_style +#. will quote 'like this', and clocale_quoting_style will +#. quote "like this". You should always include translations +#. for "`" and "'" even if U+2018 and U+2019 are appropriate +#. for your locale. +#. +#. If you don't know what to put here, please see +#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:362 +msgid "`" +msgstr "" + +#: lib/quotearg.c:363 +msgid "'" +msgstr "" + +#: lib/regcomp.c:135 +msgid "Success" +msgstr "" + +#: lib/regcomp.c:138 +msgid "No match" +msgstr "" + +#: lib/regcomp.c:141 +msgid "Invalid regular expression" +msgstr "" + +#: lib/regcomp.c:144 +msgid "Invalid collation character" +msgstr "" + +#: lib/regcomp.c:147 +msgid "Invalid character class name" +msgstr "" + +#: lib/regcomp.c:150 +msgid "Trailing backslash" +msgstr "" + +#: lib/regcomp.c:153 +msgid "Invalid back reference" +msgstr "" + +#: lib/regcomp.c:156 +msgid "Unmatched [, [^, [:, [., or [=" +msgstr "" + +#: lib/regcomp.c:159 +msgid "Unmatched ( or \\(" +msgstr "" + +#: lib/regcomp.c:162 +msgid "Unmatched \\{" +msgstr "" + +#: lib/regcomp.c:165 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: lib/regcomp.c:168 +msgid "Invalid range end" +msgstr "" + +#: lib/regcomp.c:171 +msgid "Memory exhausted" +msgstr "" + +#: lib/regcomp.c:174 +msgid "Invalid preceding regular expression" +msgstr "" + +#: lib/regcomp.c:177 +msgid "Premature end of regular expression" +msgstr "" + +#: lib/regcomp.c:180 +msgid "Regular expression too big" +msgstr "" + +#: lib/regcomp.c:183 +msgid "Unmatched ) or \\)" +msgstr "" + +#: lib/regcomp.c:676 +msgid "No previous regular expression" +msgstr "" + +#: lib/set-acl.c:46 +#, c-format +msgid "setting permissions for %s" +msgstr "" + +#: lib/version-etc.c:73 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:76 +#, c-format +msgid "Packaged by %s\n" +msgstr "" + +#. TRANSLATORS: Translate "(C)" to the copyright symbol +#. (C-in-a-circle), if this symbol is available in the user's +#. locale. Otherwise, do not translate "(C)"; leave it as-is. +#: lib/version-etc.c:83 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:85 +msgid "" +"\n" +"License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +"\n" +msgstr "" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, c-format +msgid "Written by %s and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:117 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" + +#. TRANSLATORS: The placeholder indicates the bug-reporting address +#. for this package. Please add _another line_ saying +#. "Report translation bugs to <...>\n" with the address for translation +#. bugs (typically your translation team's web or email address). +#: lib/version-etc.c:245 +#, c-format +msgid "" +"\n" +"Report bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:247 utils/recutl.c:125 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" + +#: lib/version-etc.c:251 utils/recutl.c:129 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "" + +#: lib/version-etc.c:253 +#, c-format +msgid "%s home page: <https://www.gnu.org/software/%s/>\n" +msgstr "" + +#: lib/version-etc.c:256 +msgid "General help using GNU software: <https://www.gnu.org/gethelp/>\n" +msgstr "" + +#: lib/w32spawn.h:49 +#, c-format +msgid "_open_osfhandle failed" +msgstr "" + +#: lib/w32spawn.h:90 +#, c-format +msgid "cannot restore fd %d: dup2 failed" +msgstr "" + +#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317 +#, c-format +msgid "%s subprocess" +msgstr "" + +#: lib/wait-process.c:274 lib/wait-process.c:346 +#, c-format +msgid "%s subprocess got fatal signal %d" +msgstr "" + +#: src/rec-fex.c:451 +#, c-format +msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" +msgstr "" + +#: src/rec-int.c:176 +#, c-format +msgid "%s: error: the number of records of type %s should be %zd.\n" +msgstr "" + +#: src/rec-int.c:186 +#, c-format +msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" +msgstr "" + +#: src/rec-int.c:193 +#, c-format +msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" +msgstr "" + +#: src/rec-int.c:409 src/rec-int.c:463 src/rec-int.c:520 src/rec-int.c:564 +#: utils/recutl.c:207 +msgid "out of memory\n" +msgstr "" + +#: src/rec-int.c:424 +#, c-format +msgid "%s:%s: error: mandatory field '%s' not found in record\n" +msgstr "" + +#: src/rec-int.c:487 +#, c-format +msgid "%s:%s: error: field '%s' not allowed in this record set\n" +msgstr "" + +#: src/rec-int.c:534 +#, c-format +msgid "%s:%s: error: field '%s' should be unique in this record\n" +msgstr "" + +#: src/rec-int.c:578 +#, c-format +msgid "%s:%s: error: prohibited field '%s' found in record\n" +msgstr "" + +#: src/rec-int.c:610 +#, c-format +msgid "%s:%s: error: %%constraint[%d] violated in record\n" +msgstr "" + +#: src/rec-int.c:647 +#, c-format +msgid "%s:%s: error: confidential field is not encrypted\n" +msgstr "" + +#: src/rec-int.c:699 +#, c-format +msgid "%s:%s: error: key field '%s' not found in record\n" +msgstr "" + +#: src/rec-int.c:708 +#, c-format +msgid "%s:%s: error: multiple key fields '%s' in record\n" +msgstr "" + +#: src/rec-int.c:751 +#, c-format +msgid "%s:%s: error: duplicated key value in field '%s' in record\n" +msgstr "" + +#: src/rec-int.c:799 +#, c-format +msgid "%s:%s: error: missing %%rec field in record descriptor\n" +msgstr "" + +#: src/rec-int.c:807 +#, c-format +msgid "%s:%s: error: too many %%rec fields in record descriptor\n" +msgstr "" + +#: src/rec-int.c:817 +#, c-format +msgid "%s:%s: error: invalid record type %s\n" +msgstr "" + +#: src/rec-int.c:828 +#, c-format +msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" +msgstr "" + +#: src/rec-int.c:838 +#, c-format +msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" +msgstr "" + +#: src/rec-int.c:848 +#, c-format +msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" +msgstr "" + +#: src/rec-int.c:871 +#, c-format +msgid "" +"%s:%s: error: expected a comma-separated list of fields before the type " +"specification\n" +msgstr "" + +#: src/rec-int.c:897 src/rec-int.c:950 +#, c-format +msgid "%s:%s: error: the referred type %s does not exist\n" +msgstr "" + +#: src/rec-int.c:909 +#, c-format +msgid "%s:%s: error: invalid type specification\n" +msgstr "" + +#: src/rec-int.c:924 +#, c-format +msgid "%s:%s: error: expected a type name before the type specification\n" +msgstr "" + +#: src/rec-int.c:962 +#, c-format +msgid "%s:%s: error: invalid typedef specification\n" +msgstr "" + +#: src/rec-int.c:984 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" +msgstr "" + +#: src/rec-int.c:1015 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" +msgstr "" + +#: src/rec-int.c:1028 +#, c-format +msgid "" +"%s:%s: error: value for %s should be a number optionally preceded by >, <, " +">= or <=.\n" +msgstr "" + +#: src/rec-int.c:1044 +#, c-format +msgid "%s:%s: error: value for %s should be a list of field names.\n" +msgstr "" + +#: src/rec-int.c:1072 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range, uuid " +"or date\n" +msgstr "" + +#: src/rec-int.c:1074 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range or " +"date\n" +msgstr "" + +#: src/rec-int.c:1157 +#, c-format +msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" +msgstr "" + +#: src/rec-int.c:1176 +#, c-format +msgid "%s:%s: error: could not read external descriptor from file %s.\n" +msgstr "" + +#: src/rec-int.c:1191 +#, c-format +msgid "%s:%s: error: %s does not contain valid rec data.\n" +msgstr "" + +#: src/rec-int.c:1205 +#, c-format +msgid "%s:%s: error: %s does not contain information for type %s.\n" +msgstr "" + +#: src/rec-types.c:448 +#, c-format +msgid "" +"internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " +"in rec_type_new().\n" +msgstr "" + +#: src/rec-types.c:1178 +msgid "invalid integer." +msgstr "" + +#: src/rec-types.c:1208 +msgid "invalid 'field' value." +msgstr "" + +#: src/rec-types.c:1231 +msgid "invalid 'uuid' value." +msgstr "" + +#: src/rec-types.c:1249 +msgid "invalid 'bool' value." +msgstr "" + +#: src/rec-types.c:1272 +msgid "invalid 'range' value." +msgstr "" + +#: src/rec-types.c:1281 +#, c-format +msgid "expected an integer between %d and %d." +msgstr "" + +#: src/rec-types.c:1302 +msgid "invalid 'real' value." +msgstr "" + +#: src/rec-types.c:1320 +#, c-format +msgid "value too large. Expected a size <= %zu." +msgstr "" + +#: src/rec-types.c:1341 +msgid "invalid 'line' value." +msgstr "" + +#: src/rec-types.c:1360 +msgid "value does not match the regexp." +msgstr "" + +#: src/rec-types.c:1383 +msgid "invalid date." +msgstr "" + +#: src/rec-types.c:1399 +msgid "invalid email." +msgstr "" + +#: src/rec-types.c:1444 +msgid "invalid enum value." +msgstr "" + +#: src/rec-utils.c:93 +#, c-format +msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" +msgstr "" + +#: src/rec-utils.c:121 src/rec-utils.c:150 +#, c-format +msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" +msgstr "" + +#: src/rec-utils.c:304 +#, c-format +msgid "internal error: rec_match: error compiling regexp.\n" +msgstr "" + +#. TRANSLATORS: --help output, csv2rec synopsis. +#. no-wrap +#: utils/csv2rec.c:105 +#, c-format +msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" +msgstr "" + +#. TRANSLATORS: --help output, csv2rec short description. +#. no-wrap +#: utils/csv2rec.c:110 +msgid "Convert csv data into rec data.\n" +msgstr "" + +#. TRANSLATORS: --help output, csv2rec options. +#. no-wrap +#: utils/csv2rec.c:116 +msgid "" +" -t, --type=TYPE type name for the converted records; " +"if this\n" +" parameter is ommited then no type is " +"used.\n" +" -s, --strict be strict parsing the csv file.\n" +" -e, --omit-empty omit empty fields.\n" +msgstr "" + +#: utils/csv2rec.c:230 +#, c-format +msgid "invalid field name '%s' in header\n" +msgstr "" + +#: utils/csv2rec.c:259 +#, c-format +msgid "" +"%s: %lu: this line contains %lu fields, but %lu header fields were read\n" +msgstr "" + +#: utils/csv2rec.c:347 utils/recdel.c:266 utils/recset.c:358 utils/recutl.c:328 +#, c-format +msgid "cannot read file %s\n" +msgstr "" + +#: utils/csv2rec.c:358 +msgid "failed to initialize csv parser\n" +msgstr "" + +#: utils/csv2rec.c:376 +#, c-format +msgid "error while parsing CSV file: %s\n" +msgstr "" + +#. TRANSLATORS: --help output, mdb2rec synopsis. +#. no-wrap +#: utils/mdb2rec.c:103 +#, c-format +msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" +msgstr "" + +#. TRANSLATORS: --help output, mdb2rec short description. +#. no-wrap +#: utils/mdb2rec.c:108 +msgid "Convert an mdb file into a rec file.\n" +msgstr "" + +#. TRANSLATORS: --help output, mdb2rec options. +#. no-wrap +#: utils/mdb2rec.c:114 +msgid "" +" -s, --system-tables include system tables.\n" +" -e, --keep-empty-fields don't prune empty fields in the rec\n" +" output.\n" +" -l, --list-tables dump a list of the table names " +"contained\n" +" in the mdb file.\n" +msgstr "" + +#: utils/mdb2rec.c:251 utils/mdb2rec.c:315 +#, c-format +msgid "failed to normalise record type name %s\n" +msgstr "" + +#: utils/mdb2rec.c:259 utils/mdb2rec.c:270 +#, c-format +msgid "failed to normalise field name %s\n" +msgstr "" + +#: utils/mdb2rec.c:336 +#, c-format +msgid "failed to normalise the field name %s\n" +msgstr "" + +#: utils/mdb2rec.c:443 utils/recins.c:208 utils/recset.c:253 +#, c-format +msgid "invalid field name %s.\n" +msgstr "" + +#: utils/mdb2rec.c:482 +#, c-format +msgid "could not open file %s\n" +msgstr "" + +#: utils/mdb2rec.c:489 +msgid "file does not appear to be an Access database\n" +msgstr "" + +#. TRANSLATORS: --help output, rec2csv synopsis. +#. no-wrap +#: utils/rec2csv.c:86 +#, c-format +msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" +msgstr "" + +#. TRANSLATORS: --help output, rec2csv short description. +#. no-wrap +#: utils/rec2csv.c:91 +msgid "Convert rec data into csv data.\n" +msgstr "" + +#. TRANSLATORS: --help output, rec2csv options. +#. no-wrap +#: utils/rec2csv.c:97 +msgid "" +" -d, --delim=char sets the deliminator (default ',')\n" +" -t, --type=TYPE record set to convert to csv; if this " +"parameter\n" +" is omitted then the default record " +"set is used\n" +" -S, --sort=FIELDS sort the output by the specified " +"fields.\n" +msgstr "" + +#: utils/rec2csv.c:142 +msgid "only one list of fields can be specified as a sorting criteria.\n" +msgstr "" + +#: utils/rec2csv.c:149 +msgid "invalid field name list in -S.\n" +msgstr "" + +#: utils/rec2csv.c:155 utils/recsel.c:248 utils/recsel.c:286 +msgid "internal error creating fex.\n" +msgstr "" + +#. TRANSLATORS: --help output, recdel synopsis. +#. no-wrap +#: utils/recdel.c:89 +#, c-format +msgid "" +"Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [FILE]\n" +msgstr "" + +#. TRANSLATORS: --help output, recdel short description. +#. no-wrap +#: utils/recdel.c:94 +msgid "Remove (or comment out) records from a rec file.\n" +msgstr "" + +#. TRANSLATORS: --help output, recdel arguments. +#. no-wrap +#: utils/recdel.c:101 +msgid "" +" -c, --comment comment out the matching records " +"instead of\n" +" deleting them.\n" +" --force delete even in potentially dangerous " +"situations,\n" +" and if the deletion is violating " +"record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" + +#. TRANSLATORS: --help output, notes on recdel. +#. no-wrap +#. TRANSLATORS: --help output, notes on recfix. +#. no-wrap +#. TRANSLATORS: --help output, notes on recins. +#. no-wrap +#: utils/recdel.c:119 utils/recfix.c:167 utils/recins.c:149 +msgid "" +"If no FILE is specified then the command acts like a filter, getting\n" +"the data from standard input and writing the result to standard output.\n" +msgstr "" + +#: utils/recdel.c:136 +#, c-format +msgid "no records of type %s found.\n" +msgstr "" + +#: utils/recdel.c:227 +#, c-format +msgid "ignoring a request to delete all records of type %s.\n" +msgstr "" + +#: utils/recdel.c:229 +msgid "use --force if you really want to proceed, or use either -n or -e.\n" +msgstr "" + +#: utils/recdel.c:237 +msgid "invalid selection expression.\n" +msgstr "" + +#: utils/recdel.c:276 utils/recfix.c:407 utils/recins.c:410 utils/recset.c:365 +#, c-format +msgid "file %s is not writable.\n" +msgstr "" + +#. TRANSLATORS: --help output, recfix synopsis. +#. no-wrap +#: utils/recfix.c:117 +#, c-format +msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" +msgstr "" + +#. TRANSLATORS: --help output, recfix short description. +#. no-wrap +#: utils/recfix.c:122 +msgid "Check and fix rec files.\n" +msgstr "" + +#. TRANSLATORS: --help output, recfix global arguments. +#. no-wrap +#: utils/recfix.c:129 +msgid "" +" --no-external don't use external descriptors.\n" +" --force force the requested operation.\n" +msgstr "" + +#. TRANSLATORS: --help output, recfix operations. +#. no-wrap +#: utils/recfix.c:139 +msgid "" +"Operations:\n" +" --check check integrity of the specified " +"file. Default.\n" +" --sort sort the records in the specified " +"file.\n" +" --auto insert auto-generated fields in " +"records missing them.\n" +msgstr "" + +#. TRANSLATORS: --help output, recfix operations related with encryption. +#. no-wrap +#: utils/recfix.c:149 +msgid "" +" --encrypt encrypt confidential fields in the " +"specified file.\n" +" --decrypt decrypt confidential fields in the " +"specified file.\n" +msgstr "" + +#. TRANSLATORS: --help output, recfix encryption and decryption +#. options. +#. no-wrap +#: utils/recfix.c:158 +msgid "" +"De/Encryption options:\n" +" -s, --password=PASSWORD encrypt/decrypt with this password.\n" +msgstr "" + +#: utils/recfix.c:208 +msgid "--password|-s must be used as an operation argument.\n" +msgstr "" + +#: utils/recfix.c:214 +msgid "the specified operation does not require a password.\n" +msgstr "" + +#: utils/recfix.c:219 +msgid "please specify just one password.\n" +msgstr "" + +#: utils/recfix.c:230 utils/recfix.c:240 utils/recfix.c:250 utils/recfix.c:261 +#: utils/recfix.c:271 +msgid "please specify just one operation.\n" +msgstr "" + +#: utils/recfix.c:463 +msgid "the database contains already encrypted fields\n" +msgstr "" + +#: utils/recfix.c:464 +msgid "please use --force or --decrypt\n" +msgstr "" + +#: utils/recfix.c:574 +msgid "unknown operation in recfix: please report this as a bug.\n" +msgstr "" + +#. TRANSLATORS: --help output, recfmt synopsis. +#. no-wrap +#: utils/recfmt.c:78 +#, c-format +msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" +msgstr "" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:83 +msgid "Apply a template to records read from standard input.\n" +msgstr "" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:89 +msgid "" +" -f, --file=FILENAME read the template to apply from a " +"file.\n" +msgstr "" + +#: utils/recfmt.c:123 +#, c-format +msgid "can't open file %s for reading.\n" +msgstr "" + +#: utils/recfmt.c:141 +msgid "don't specify a template in the command line and -f at the same time.\n" +msgstr "" + +#: utils/recfmt.c:164 +msgid "invalid expression in a template slot.\n" +msgstr "" + +#: utils/recfmt.c:170 +msgid "error evaluating expression in a template slot.\n" +msgstr "" + +#: utils/recfmt.c:204 +msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" +msgstr "" + +#. TRANSLATORS: --help output, recinf synopsis. +#. no-wrap +#: utils/recinf.c:84 +#, c-format +msgid "Usage: recinf [OPTION]... [FILE]...\n" +msgstr "" + +#. TRANSLATORS: --help output, recinf short description. +#. no-wrap +#: utils/recinf.c:89 +msgid "Print information about the types of records stored in the input.\n" +msgstr "" + +#. TRANSLATORS: --help output, recinf arguments. +#. no-wrap +#: utils/recinf.c:96 +msgid "" +" -t, --type=RECORD_TYPE print information on the records having " +"the\n" +" specified type.\n" +" -d, --descriptor include the full record descriptors.\n" +" -n, --names-only output just the names of the record files\n" +" found in the input.\n" +msgstr "" + +#. TRANSLATORS: --help output, recinf special options. +#. no-wrap +#: utils/recinf.c:109 +msgid "" +"Special options:\n" +" -S, --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" + +#: utils/recinf.c:263 +#, c-format +msgid "error: cannot read file %s\n" +msgstr "" + +#. TRANSLATORS: --help output, recins synopsis. +#. no-wrap +#: utils/recins.c:111 +#, c-format +msgid "" +"Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" +msgstr "" + +#. TRANSLATORS: --help output, recins short description. +#. no-wrap +#: utils/recins.c:116 +msgid "Insert new records in a rec database.\n" +msgstr "" + +#. TRANSLATORS: --help output, recins arguments. +#. no-wrap +#: utils/recins.c:122 +msgid "" +" -f, --field=STR field name; should be followed by a -" +"v.\n" +" -v, --value=STR field value; should be preceded by an -" +"f.\n" +" -r, --record=STR record that will be inserted in the " +"file.\n" +" --force insert the record even if it is " +"violating\n" +" record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --no-auto don't insert auto generated fields.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recins.c:136 +msgid "" +" -s, --password=STR encrypt confidential fields with the " +"given password.\n" +msgstr "" + +#: utils/recins.c:195 +msgid "a -f should be followed by a -v\n" +msgstr "" + +#: utils/recins.c:219 +msgid "a -v should be preceded by a -f\n" +msgstr "" + +#: utils/recins.c:244 utils/recsel.c:223 +msgid "more than one password was specified\n" +msgstr "" + +#: utils/recins.c:258 +msgid "error while parsing the record provided by -r\n" +msgstr "" + +#: utils/recins.c:293 +#, c-format +msgid "please provide a value for the field %s\n" +msgstr "" + +#. TRANSLATORS: --help output, recsel synopsis. +#. no-wrap +#: utils/recsel.c:118 +#, c-format +msgid "" +"Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " +"| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" +msgstr "" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:123 +msgid "Select and print rec data.\n" +msgstr "" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:129 +msgid "" +" -d, --include-descriptors print record descriptors along with " +"the matched\n" +" records.\n" +" -C, --collapse do not section the result in records " +"with newlines.\n" +" -S, --sort=FIELD,... sort the output by the specified " +"fields.\n" +" -G, --group-by=FIELD,... group records by the specified " +"fields.\n" +" -U, --uniq remove duplicated fields in the output " +"records.\n" +msgstr "" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recsel.c:141 +msgid "" +" -s, --password=STR decrypt confidential fields with the " +"given password.\n" +msgstr "" + +#: utils/recsel.c:150 +msgid "" +" -j, --join=FIELD perform an inner join using the " +"specified field.\n" +msgstr "" + +#. TRANSLATORS: --help output, recsel output options. +#. no-wrap +#: utils/recsel.c:157 +msgid "" +"Output options:\n" +" -p, --print=FIELDS comma-separated list of fields to " +"print for each\n" +" matching record.\n" +" -P, --print-values=FIELDS as -p, but print only the values of " +"the selected\n" +" fields.\n" +" -R, --print-row=FIELDS as -P, but separate the values with " +"spaces instead\n" +" of newlines.\n" +" -c, --count print a count of the matching records " +"instead of\n" +" the records themselves.\n" +msgstr "" + +#. TRANSLATORS: --help output, recsel special options. +#. no-wrap +#: utils/recsel.c:171 +msgid "" +"Special options:\n" +" --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" + +#: utils/recsel.c:235 +msgid "only one field list can be specified as a sorting criteria.\n" +msgstr "" + +#: utils/recsel.c:242 +msgid "invalid field names in -S.\n" +msgstr "" + +#: utils/recsel.c:258 +msgid "only one field can be specified as join criteria.\n" +msgstr "" + +#: utils/recsel.c:263 +msgid "please specify a correct field name to -j|--join.\n" +msgstr "" + +#: utils/recsel.c:274 +msgid "only one field list can be specified as a grouping criteria.\n" +msgstr "" + +#: utils/recsel.c:280 +msgid "invalid field names in -G.\n" +msgstr "" + +#: utils/recsel.c:300 +msgid "cannot specify -[pPR] and also -c.\n" +msgstr "" + +#: utils/recsel.c:317 +#, c-format +msgid "invalid list of fields in -%c\n" +msgstr "" + +#: utils/recsel.c:325 +msgid "internal error creating the field expression.\n" +msgstr "" + +#: utils/recsel.c:340 +#, c-format +msgid "invalid aggregate function '%s'\n" +msgstr "" + +#: utils/recsel.c:358 +msgid "cannot specify -c and also -p.\n" +msgstr "" + +#: utils/recsel.c:377 +msgid "joins can only be used when a named record set is selected.\n" +msgstr "" + +#: utils/recsel.c:439 +msgid "several record types found. Please use -t to specify one.\n" +msgstr "" + +#. TRANSLATORS: --help output, recset synopsis. +#. no-wrap +#: utils/recset.c:113 +#, c-format +msgid "Usage: recset [OPTION]... [FILE]...\n" +msgstr "" + +#. TRANSLATORS: --help output, recset short description. +#. no-wrap +#: utils/recset.c:118 +msgid "Alter or delete fields in records.\n" +msgstr "" + +#. TRANSLATORS: --help output, recset options. +#. no-wrap +#: utils/recset.c:124 +msgid "" +" --no-external don't use external descriptors.\n" +" --force alter the records even if violating " +"record\n" +" restrictions.\n" +msgstr "" + +#. TRANSLATORS: --help output, recset field selection options. +#. no-wrap +#: utils/recset.c:137 +msgid "" +"Field selection options:\n" +" -f, --fields=FIELDS comma-separated list of field names " +"with optional\n" +" subscripts.\n" +msgstr "" + +#. TRANSLATORS: --help output, recset actions. +#. no-wrap +#: utils/recset.c:145 +msgid "" +"Actions:\n" +" -s, --set=VALUE change the value of the selected " +"fields.\n" +" -a, --add=VALUE add the selected fields with the given " +"value.\n" +" -S, --set-add=VALUE change the value of the selected " +"fields. If they don't\n" +" exist then add a new field with that " +"value.\n" +" -r, --rename=NAME rename the selected fields to a given " +"name. If an entire\n" +" record set is selected then the " +"field is renamed in the\n" +" record descriptor as well.\n" +" -d, --delete delete the selected fields.\n" +" -c, --comment comment out the selected fields.\n" +msgstr "" + +#: utils/recset.c:168 +msgid "please specify some field with -f.\n" +msgstr "" + +#: utils/recset.c:173 +msgid "please specify just one action.\n" +msgstr "" + +#: utils/recset.c:213 +msgid "invalid field expression in -f.\n" +msgstr "" + +#: utils/recset.c:221 +msgid "creating the field expression.\n" +msgstr "" + +#: utils/recset.c:243 +msgid "" +"the rename operation requires just one field with an optional subscript.\n" +msgstr "" + +#. TRANSLATORS: --help output 5+ (reports) +#. TRANSLATORS: the placeholder indicates the bug-reporting address +#. for this application. Please add _another line_ with the +#. address for translation bugs. +#. no-wrap +#: utils/recutl.c:122 +#, c-format +msgid "Report bugs to: %s\n" +msgstr "" + +#: utils/recutl.c:131 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" +msgstr "" + +#: utils/recutl.c:134 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" + +#. TRANSLATORS: --help output, common arguments. +#. no-wrap +#: utils/recutl.c:143 +msgid "" +" --help print a help message and exit.\n" +" --version show version and exit.\n" +msgstr "" + +#. TRANSLATORS: --help output, record selection arguments +#. no-wrap +#: utils/recutl.c:154 +msgid "" +"Record selection options:\n" +" -i, --case-insensitive make strings case-insensitive in " +"selection\n" +" expressions.\n" +" -t, --type=TYPE operate on records of the specified " +"type only.\n" +" -e, --expression=RECORD_EXPR selection expression.\n" +" -q, --quick=STR select records with fields containing " +"a string.\n" +" -n, --number=NUM,... select specific records by position, " +"with ranges.\n" +" -m, --random=NUM select a given number of random " +"records.\n" +msgstr "" + +#: utils/recutl.c:179 +#, c-format +msgid "" +"Copyright (C) %s Jose E. Marchesi.\n" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +msgstr "" + +#: utils/recutl.c:185 +msgid "" +"\n" +"Written by Jose E. Marchesi." +msgstr "" + +#: utils/recutl.c:197 utils/recutl.c:217 +msgid ": error: " +msgstr "" + +#: utils/recutl.c:229 +msgid ": warning: " +msgstr "" + +#: utils/recutl.c:254 +#, c-format +msgid "duplicated record set '%s' from %s.\n" +msgstr "" + +#: utils/recutl.c:417 +msgid "cannot create a unique name.\n" +msgstr "" + +#: utils/recutl.c:438 +#, c-format +msgid "renaming file %s to %s\n" +msgstr "" + +#: utils/recutl.c:482 +msgid "operation aborted due to integrity failures.\n" +msgstr "" + +#: utils/recutl.c:483 +msgid "use --verbose to get a detailed report.\n" +msgstr "" + +#: utils/recutl.c:490 +msgid "use --force to skip the integrity check.\n" +msgstr "" + +#: utils/recutl.c:551 +msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" +msgstr "" + +#: utils/recutl.c:626 +msgid "Password: " +msgstr "" + +#: utils/recutl.c:632 +msgid "Password again: " +msgstr "" + +#: utils/recutl.c:637 +msgid "the provided passwords don't match.\n" +msgstr "" + +#: utils/recutl.h:97 utils/recutl.h:186 utils/recutl.h:190 +msgid "cannot specify -e and also -n\n" +msgstr "" + +#: utils/recutl.h:102 +msgid "cannot specify -e and also -q\n" +msgstr "" + +#: utils/recutl.h:113 +msgid "invalid selection expression\n" +msgstr "" + +#: utils/recutl.h:125 +msgid "cannot specify -n and also -e\n" +msgstr "" + +#: utils/recutl.h:130 +msgid "cannot specify -n and also -q\n" +msgstr "" + +#: utils/recutl.h:140 +msgid "invalid list of indexes in -n\n" +msgstr "" + +#: utils/recutl.h:150 +msgid "cannot specify -m and also -e\n" +msgstr "" + +#: utils/recutl.h:155 +msgid "cannot specify -m and also -q\n" +msgstr "" + +#: utils/recutl.h:160 +msgid "cannot specify -m and also -n\n" +msgstr "" diff --git a/devspec.en_US/project/recutils/po/remove-potcdate.sin b/devspec.en_US/project/recutils/po/remove-potcdate.sin new file mode 100755 index 0000000..2436c49 --- /dev/null +++ b/devspec.en_US/project/recutils/po/remove-potcdate.sin @@ -0,0 +1,19 @@ +# Sed script that remove the POT-Creation-Date line in the header entry +# from a POT file. +# +# The distinction between the first and the following occurrences of the +# pattern is achieved by looking at the hold space. +/^"POT-Creation-Date: .*"$/{ +x +# Test if the hold space is empty. +s/P/P/ +ta +# Yes it was empty. First occurrence. Remove the line. +g +d +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/devspec.en_US/project/recutils/po/sr.gmo b/devspec.en_US/project/recutils/po/sr.gmo new file mode 100755 index 0000000000000000000000000000000000000000..7ef6d019efd0c6955634a5d3739a36e6608e0a68 GIT binary patch literal 42076 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 UUP2PZz4g1qBX-a8V-D;80}NoF-v9sr literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/po/sr.po b/devspec.en_US/project/recutils/po/sr.po new file mode 100755 index 0000000..7473275 --- /dev/null +++ b/devspec.en_US/project/recutils/po/sr.po @@ -0,0 +1,1941 @@ +# Serbian translation of recutils. +# Copyright (C) 2014 Free Software Foundation, Inc. +# This file is distributed under the same license as the recutils package. +# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2012—2014. +msgid "" +msgstr "" +"Project-Id-Version: recutils-1.6.90\n" +"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" +"POT-Creation-Date: 2019-01-03 10:32+0100\n" +"PO-Revision-Date: 2014-04-06 12:14+0200\n" +"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n" +"Language-Team: Serbian <(nothing)>\n" +"Language: sr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: lib/closeout.c:122 +msgid "write error" +msgstr "грешка писања" + +#: lib/copy-acl.c:54 +#, c-format +msgid "preserving permissions for %s" +msgstr "" + +#: lib/error.c:195 +msgid "Unknown system error" +msgstr "Непозната грешка система" + +#: lib/execute.c:185 lib/execute.c:258 lib/wait-process.c:282 +#: lib/wait-process.c:356 +#, c-format +msgid "%s subprocess failed" +msgstr "%s потпроцес није успео" + +#: lib/getopt.c:278 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous\n" +msgstr "%s: опција „-W %s“ је нејасна\n" + +#: lib/getopt.c:284 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous; possibilities:" +msgstr "%s: опција „%s“ је нејасна; могућности:" + +#: lib/getopt.c:319 +#, fuzzy, c-format +msgid "%s: unrecognized option '%s%s'\n" +msgstr "%s: непозната опција „%c%s“\n" + +#: lib/getopt.c:345 +#, fuzzy, c-format +msgid "%s: option '%s%s' doesn't allow an argument\n" +msgstr "%s: опција „%c%s“ не дозвољава аргумент\n" + +#: lib/getopt.c:360 +#, fuzzy, c-format +msgid "%s: option '%s%s' requires an argument\n" +msgstr "%s: опција „--%s“ захтева аргумент\n" + +#: lib/getopt.c:621 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: неисправна опција -- „%c“\n" + +#: lib/getopt.c:636 lib/getopt.c:682 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: опција захтева аргумент -- „%c“\n" + +#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "меморија је потрошена" + +#: parse-datetime.y:440 parse-datetime.y:540 +#, c-format +msgid "parsed %s part: " +msgstr "" + +#: parse-datetime.y:455 +#, c-format +msgid "year: %04<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:483 +#, c-format +msgid "%s (day ordinal=%<PRIdMAX> number=%d)" +msgstr "" + +#: parse-datetime.y:514 +#, c-format +msgid "number of seconds: %<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:547 +msgid "today/this/now\n" +msgstr "" + +#: parse-datetime.y:612 +msgid "number of seconds" +msgstr "" + +#: parse-datetime.y:625 +msgid "datetime" +msgstr "" + +#: parse-datetime.y:630 +msgid "time" +msgstr "" + +#: parse-datetime.y:635 +msgid "local_zone" +msgstr "" + +#: parse-datetime.y:640 +msgid "zone" +msgstr "" + +#: parse-datetime.y:645 +msgid "date" +msgstr "" + +#: parse-datetime.y:650 +msgid "day" +msgstr "" + +#: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 +msgid "relative" +msgstr "" + +#: parse-datetime.y:658 +msgid "number" +msgstr "" + +#: parse-datetime.y:662 +msgid "hybrid" +msgstr "" + +#: parse-datetime.y:820 +#, c-format +msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" +msgstr "" + +#: parse-datetime.y:832 +#, c-format +msgid "" +"warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" +msgstr "" + +#: parse-datetime.y:1276 +#, c-format +msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1286 +#, c-format +msgid "error: out-of-range year %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1524 +#, fuzzy, c-format +msgid "error: unknown word '%s'\n" +msgstr "грешка: не могу да читам датотеку „%s“\n" + +#: parse-datetime.y:1673 +#, fuzzy +msgid "error: invalid date/time value:\n" +msgstr "неисправна бројевна вредност." + +#: parse-datetime.y:1674 +#, c-format +msgid " user provided time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1676 +#, c-format +msgid " normalized time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1699 +msgid " possible reasons:\n" +msgstr "" + +#: parse-datetime.y:1701 +msgid " non-existing due to daylight-saving time;\n" +msgstr "" + +#: parse-datetime.y:1703 +msgid " invalid day/month combination;\n" +msgstr "" + +#: parse-datetime.y:1704 +msgid " numeric values overflow;\n" +msgstr "" + +#: parse-datetime.y:1705 +msgid "incorrect timezone" +msgstr "" + +#: parse-datetime.y:1706 +msgid "missing timezone" +msgstr "" + +#: parse-datetime.y:1826 +msgid "error: initial year out of range\n" +msgstr "" + +#: parse-datetime.y:1923 +#, fuzzy +msgid "error: parsing failed\n" +msgstr "грешка приликом обраде ЦСВ датотеке: %s\n" + +#: parse-datetime.y:1924 +#, fuzzy, c-format +msgid "error: parsing failed, stopped at '%s'\n" +msgstr "грешка приликом обраде ЦСВ датотеке: %s\n" + +#: parse-datetime.y:1934 +msgid "input timezone: " +msgstr "" + +#: parse-datetime.y:1937 +#, c-format +msgid "'@timespec' - always UTC" +msgstr "" + +#: parse-datetime.y:1939 +#, c-format +msgid "parsed date/time string" +msgstr "" + +#: parse-datetime.y:1943 +#, c-format +msgid "TZ=\"%s\" in date string" +msgstr "" + +#: parse-datetime.y:1947 +#, c-format +msgid "TZ=\"UTC0\" environment value or -u" +msgstr "" + +#: parse-datetime.y:1950 +#, c-format +msgid "TZ=\"%s\" environment value" +msgstr "" + +#: parse-datetime.y:1953 +#, c-format +msgid "system default" +msgstr "" + +#: parse-datetime.y:1995 +msgid "error: year, month, or day overflow\n" +msgstr "" + +#: parse-datetime.y:2006 +#, fuzzy, c-format +msgid "error: invalid hour %<PRIdMAX>%s\n" +msgstr "%s:%s: грешка: неисправна врста записа %s\n" + +#: parse-datetime.y:2014 +#, c-format +msgid "using specified time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2015 +#, c-format +msgid "using current time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2069 +#, c-format +msgid "error: tzalloc (\"%s\") failed\n" +msgstr "" + +#: parse-datetime.y:2114 +#, c-format +msgid "" +"error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " +"date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2125 +#, c-format +msgid "new start date: '%s' is '%s'\n" +msgstr "" + +#: parse-datetime.y:2134 +#, c-format +msgid "using current date as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2138 +#, c-format +msgid "warning: day (%s) ignored when explicit dates are given\n" +msgstr "" + +#: parse-datetime.y:2142 +#, c-format +msgid "starting date/time: '%s'\n" +msgstr "" + +#: parse-datetime.y:2152 +msgid "" +"warning: when adding relative months/years, it is recommended to specify the " +"15th of the months\n" +msgstr "" + +#: parse-datetime.y:2157 +msgid "warning: when adding relative days, it is recommended to specify noon\n" +msgstr "" + +#: parse-datetime.y:2167 +#, fuzzy, c-format +msgid "error: %s:%d\n" +msgstr ": грешка: " + +#: parse-datetime.y:2181 +#, c-format +msgid "error: adding relative date resulted in an invalid date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2190 +#, c-format +msgid "" +"after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " +"days),\n" +msgstr "" + +#: parse-datetime.y:2194 +#, c-format +msgid " new date/time = '%s'\n" +msgstr "" + +#: parse-datetime.y:2213 +msgid "warning: daylight saving time changed after date adjustment\n" +msgstr "" + +#: parse-datetime.y:2232 +msgid "warning: month/year adjustment resulted in shifted dates:\n" +msgstr "" + +#: parse-datetime.y:2235 +#, c-format +msgid " adjusted Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2237 +#, c-format +msgid " normalized Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2265 +#, c-format +msgid "error: timezone %d caused time_t overflow\n" +msgstr "" + +#: parse-datetime.y:2275 +#, c-format +msgid "'%s' = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2303 +msgid "error: adding relative time caused an overflow\n" +msgstr "" + +#: parse-datetime.y:2314 +#, c-format +msgid "" +"after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " +"seconds, %+d ns),\n" +msgstr "" + +#: parse-datetime.y:2319 +#, c-format +msgid " new time = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2335 +msgid "warning: daylight saving time changed after time adjustment\n" +msgstr "" + +#: parse-datetime.y:2345 +msgid "timezone: system default\n" +msgstr "" + +#: parse-datetime.y:2347 +msgid "timezone: Universal Time\n" +msgstr "" + +#: parse-datetime.y:2349 +#, c-format +msgid "timezone: TZ=\"%s\" environment value\n" +msgstr "" + +#: parse-datetime.y:2353 +#, c-format +msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" +msgstr "" + +#: parse-datetime.y:2359 +#, c-format +msgid "final: %s (UTC)\n" +msgstr "" + +#: parse-datetime.y:2374 +#, c-format +msgid "final: %s (UTC%s)\n" +msgstr "" + +#: parse-datetime.y:2378 +#, c-format +msgid "final: %s (unknown time zone offset)\n" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". For example, a French Unicode local should translate +#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), respectively. +#. +#. If the catalog has no translation, we will try to +#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and +#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the +#. current locale is not Unicode, locale_quoting_style +#. will quote 'like this', and clocale_quoting_style will +#. quote "like this". You should always include translations +#. for "`" and "'" even if U+2018 and U+2019 are appropriate +#. for your locale. +#. +#. If you don't know what to put here, please see +#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:362 +msgid "`" +msgstr "„" + +#: lib/quotearg.c:363 +msgid "'" +msgstr "“" + +#: lib/regcomp.c:135 +msgid "Success" +msgstr "Успешно" + +#: lib/regcomp.c:138 +msgid "No match" +msgstr "Нема подударања" + +#: lib/regcomp.c:141 +msgid "Invalid regular expression" +msgstr "Неисправан регуларан израз" + +#: lib/regcomp.c:144 +msgid "Invalid collation character" +msgstr "Неисправан знак поретка" + +#: lib/regcomp.c:147 +msgid "Invalid character class name" +msgstr "Неисправан назив класе знака" + +#: lib/regcomp.c:150 +msgid "Trailing backslash" +msgstr "Пратећа контра коса црта" + +#: lib/regcomp.c:153 +msgid "Invalid back reference" +msgstr "Неисправна повратна референца" + +#: lib/regcomp.c:156 +#, fuzzy +msgid "Unmatched [, [^, [:, [., or [=" +msgstr "Не одговара [ или [^" + +#: lib/regcomp.c:159 +msgid "Unmatched ( or \\(" +msgstr "Не одговара ( или \\(" + +#: lib/regcomp.c:162 +msgid "Unmatched \\{" +msgstr "Не одговара \\{" + +#: lib/regcomp.c:165 +msgid "Invalid content of \\{\\}" +msgstr "Неисправан садржај \\{\\}" + +#: lib/regcomp.c:168 +msgid "Invalid range end" +msgstr "Неисправан крај опсега" + +#: lib/regcomp.c:171 +msgid "Memory exhausted" +msgstr "Меморија је потрошена" + +#: lib/regcomp.c:174 +msgid "Invalid preceding regular expression" +msgstr "Неисправан регуларан израз који претходи" + +#: lib/regcomp.c:177 +msgid "Premature end of regular expression" +msgstr "Прерани крај регуларног израза" + +#: lib/regcomp.c:180 +msgid "Regular expression too big" +msgstr "Регуларни израз је превелик" + +#: lib/regcomp.c:183 +msgid "Unmatched ) or \\)" +msgstr "Не одговара ) или \\)" + +#: lib/regcomp.c:676 +msgid "No previous regular expression" +msgstr "Нема претходног регуларног израза" + +#: lib/set-acl.c:46 +#, c-format +msgid "setting permissions for %s" +msgstr "" + +#: lib/version-etc.c:73 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:76 +#, c-format +msgid "Packaged by %s\n" +msgstr "" + +#. TRANSLATORS: Translate "(C)" to the copyright symbol +#. (C-in-a-circle), if this symbol is available in the user's +#. locale. Otherwise, do not translate "(C)"; leave it as-is. +#: lib/version-etc.c:83 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:85 +#, fuzzy +msgid "" +"\n" +"License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +"\n" +msgstr "" +"Ауторска права (C) %s Хозе Е. Маркези.\n" +"Лиценца ОЈЛв3+: ГНУ ОЈЛ издање 3 или новије <http://gnu.org/licenses/gpl." +"html>.\n" +"Ово је слободан софтвер: слободни сте да га мењате и расподељујете.\n" +"Не постоји НИКАКВА ГАРАНЦИЈА, у оквирима дозвољеним законом.\n" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, fuzzy, c-format +msgid "Written by %s and %s.\n" +msgstr "" +"\n" +"Написао Хозе Е. Маркези." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, fuzzy, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "" +"\n" +"Написао Хозе Е. Маркези." + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:117 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" + +#. TRANSLATORS: The placeholder indicates the bug-reporting address +#. for this package. Please add _another line_ saying +#. "Report translation bugs to <...>\n" with the address for translation +#. bugs (typically your translation team's web or email address). +#: lib/version-etc.c:245 +#, fuzzy, c-format +msgid "" +"\n" +"Report bugs to: %s\n" +msgstr "Грешке пријавите на: %s\n" + +#: lib/version-etc.c:247 utils/recutl.c:125 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "Грешке програма „%s“ пријавите на: %s\n" + +#: lib/version-etc.c:251 utils/recutl.c:129 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s матична страница: <%s>\n" + +#: lib/version-etc.c:253 +#, fuzzy, c-format +msgid "%s home page: <https://www.gnu.org/software/%s/>\n" +msgstr "%s матична страница: <http://www.gnu.org/software/recutils/>\n" + +#: lib/version-etc.c:256 +#, fuzzy +msgid "General help using GNU software: <https://www.gnu.org/gethelp/>\n" +msgstr "Општа помоћ користећи ГНУ софтвер: <http://www.gnu.org/gethelp/>\n" + +#: lib/w32spawn.h:49 +#, c-format +msgid "_open_osfhandle failed" +msgstr "„_open_osfhandle“ није успело" + +#: lib/w32spawn.h:90 +#, c-format +msgid "cannot restore fd %d: dup2 failed" +msgstr "не могу да повратим фд %d: „dup2“ није успело" + +#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317 +#, c-format +msgid "%s subprocess" +msgstr "%s потпроцес" + +#: lib/wait-process.c:274 lib/wait-process.c:346 +#, c-format +msgid "%s subprocess got fatal signal %d" +msgstr "%s потпроцес је добио кобни сигнал %d" + +#: src/rec-fex.c:451 +#, c-format +msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" +msgstr "" +"унутрашња грешка: „REC_FEX_MAX_ELEMS“ је превелико. Молим известите о " +"овоме.\n" + +#: src/rec-int.c:176 +#, c-format +msgid "%s: error: the number of records of type %s should be %zd.\n" +msgstr "%s: грешка: број записа врсте „%s“ треба бити %zd.\n" + +#: src/rec-int.c:186 +#, c-format +msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" +msgstr "%s: грешка: превише записа врсте %s. Највише је дозвољено %zd.\n" + +#: src/rec-int.c:193 +#, c-format +msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" +msgstr "%s: грешка: премало записа врсте %s. Најмање је дозвољено %zd.\n" + +#: src/rec-int.c:409 src/rec-int.c:463 src/rec-int.c:520 src/rec-int.c:564 +#: utils/recutl.c:207 +msgid "out of memory\n" +msgstr "нема више меморије\n" + +#: src/rec-int.c:424 +#, c-format +msgid "%s:%s: error: mandatory field '%s' not found in record\n" +msgstr "%s:%s: грешка: обавезно поље „%s“ није пронађено у запису\n" + +#: src/rec-int.c:487 +#, c-format +msgid "%s:%s: error: field '%s' not allowed in this record set\n" +msgstr "%s:%s: грешка: поље „%s“ није допуштено у овом скупу записа\n" + +#: src/rec-int.c:534 +#, c-format +msgid "%s:%s: error: field '%s' should be unique in this record\n" +msgstr "%s:%s: грешка: поље „%s“ треба да буде јединствено у овом запису\n" + +#: src/rec-int.c:578 +#, c-format +msgid "%s:%s: error: prohibited field '%s' found in record\n" +msgstr "%s:%s: грешка: забрањено поље „%s“ је пронађено у запису\n" + +#: src/rec-int.c:610 +#, c-format +msgid "%s:%s: error: %%constraint[%d] violated in record\n" +msgstr "%s:%s: грешка: %%ограничење[%d] је повређено у запису\n" + +#: src/rec-int.c:647 +#, c-format +msgid "%s:%s: error: confidential field is not encrypted\n" +msgstr "%s:%s: грешка: поверљиво поље није шифровано\n" + +#: src/rec-int.c:699 +#, c-format +msgid "%s:%s: error: key field '%s' not found in record\n" +msgstr "%s:%s: грешка: кључно поље „%s“ није пронађено у запису\n" + +#: src/rec-int.c:708 +#, c-format +msgid "%s:%s: error: multiple key fields '%s' in record\n" +msgstr "%s:%s: грешка: више кључних поља „%s“ у запису\n" + +#: src/rec-int.c:751 +#, c-format +msgid "%s:%s: error: duplicated key value in field '%s' in record\n" +msgstr "%s:%s: грешка: удвострчена вредност кључа у пољу „%s“ у запису\n" + +#: src/rec-int.c:799 +#, c-format +msgid "%s:%s: error: missing %%rec field in record descriptor\n" +msgstr "%s:%s: грешка: недостаје %%рек поље у описнику записа\n" + +#: src/rec-int.c:807 +#, c-format +msgid "%s:%s: error: too many %%rec fields in record descriptor\n" +msgstr "%s:%s: грешка: превише %%rec поља у описнику записа\n" + +#: src/rec-int.c:817 +#, c-format +msgid "%s:%s: error: invalid record type %s\n" +msgstr "%s:%s: грешка: неисправна врста записа %s\n" + +#: src/rec-int.c:828 +#, c-format +msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" +msgstr "%s:%s: грешка: само једно %%key поље је дозвољено у описнику записа\n" + +#: src/rec-int.c:838 +#, c-format +msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" +msgstr "%s:%s: грешка: само једно %%size поље је дозвољено у описнику записа\n" + +#: src/rec-int.c:848 +#, c-format +msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" +msgstr "%s:%s: грешка: само једно %%sort поље је дозвољено у описнику записа\n" + +#: src/rec-int.c:871 +#, c-format +msgid "" +"%s:%s: error: expected a comma-separated list of fields before the type " +"specification\n" +msgstr "" +"%s:%s: грешка: очекиван је зарезом раздвојен списак поља пре спецификације " +"врсте\n" + +#: src/rec-int.c:897 src/rec-int.c:950 +#, c-format +msgid "%s:%s: error: the referred type %s does not exist\n" +msgstr "%s:%s: грешка: односна врста %s не постоји\n" + +#: src/rec-int.c:909 +#, c-format +msgid "%s:%s: error: invalid type specification\n" +msgstr "%s:%s: грешка: неисправна спецификација врсте\n" + +#: src/rec-int.c:924 +#, c-format +msgid "%s:%s: error: expected a type name before the type specification\n" +msgstr "%s:%s: грешка: очекиван је назив врсте пре спецификације врсте\n" + +#: src/rec-int.c:962 +#, c-format +msgid "%s:%s: error: invalid typedef specification\n" +msgstr "%s:%s: грешка: неисправна спецификација одреднице врсте\n" + +#: src/rec-int.c:984 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" +msgstr "%s:%s: грешка: вредност за %s[%zd] није исправан израз избора\n" + +#: src/rec-int.c:1015 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" +msgstr "%s:%s: грешка: вредност за %s[%zd] није списак назива поља\n" + +#: src/rec-int.c:1028 +#, c-format +msgid "" +"%s:%s: error: value for %s should be a number optionally preceded by >, <, " +">= or <=.\n" +msgstr "" +"%s:%s: грешка: вредност за „%s“ треба бити број коме по могућности претходи " +">, <, >= или <=.\n" + +#: src/rec-int.c:1044 +#, c-format +msgid "%s:%s: error: value for %s should be a list of field names.\n" +msgstr "%s:%s: грешка: вредност за „%s“ треба бити списак назива поља.\n" + +#: src/rec-int.c:1072 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range, uuid " +"or date\n" +msgstr "" +"%s:%s: грешка: само-повећано поље „%s“ треба бити врсте „int“ (цео број), " +"„range“ (опсег), „uuid“ (ујиб) или „date“ (датум)\n" + +#: src/rec-int.c:1074 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range or " +"date\n" +msgstr "" +"%s:%s: грешка: само-повећано поље „%s“ треба бити врсте „int“ (цео број), " +"„range“ (опсег) или „date“ (датум)\n" + +#: src/rec-int.c:1157 +#, c-format +msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" +msgstr "%s:%s: грешка: не могу да довучем удаљени описник са адресе %s.\n" + +#: src/rec-int.c:1176 +#, c-format +msgid "%s:%s: error: could not read external descriptor from file %s.\n" +msgstr "%s:%s: грешка: не могу прочитам спољни описник из датотеке %s.\n" + +#: src/rec-int.c:1191 +#, c-format +msgid "%s:%s: error: %s does not contain valid rec data.\n" +msgstr "%s:%s: грешка: %s не садржи исправне податке записа.\n" + +#: src/rec-int.c:1205 +#, c-format +msgid "%s:%s: error: %s does not contain information for type %s.\n" +msgstr "%s:%s: грешка: %s не садржи податке за врсту %s.\n" + +#: src/rec-types.c:448 +#, c-format +msgid "" +"internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " +"in rec_type_new().\n" +msgstr "" +"унутрашња грешка: врсте-записа: добих „REC_TYPE_NONE“ из " +"„rec_type_parse_type_kind()“ у „rec_type_new()“.\n" + +#: src/rec-types.c:1178 +msgid "invalid integer." +msgstr "неисправ цео број." + +#: src/rec-types.c:1208 +msgid "invalid 'field' value." +msgstr "неисправна вредност „field“." + +#: src/rec-types.c:1231 +msgid "invalid 'uuid' value." +msgstr "неисправна вредност „uuid“." + +#: src/rec-types.c:1249 +msgid "invalid 'bool' value." +msgstr "неисправна вредност „bool“." + +#: src/rec-types.c:1272 +msgid "invalid 'range' value." +msgstr "неисправна вредност „range“." + +#: src/rec-types.c:1281 +#, c-format +msgid "expected an integer between %d and %d." +msgstr "очекиван је цео број између %d и %d." + +#: src/rec-types.c:1302 +msgid "invalid 'real' value." +msgstr "неисправна вредност „real“." + +#: src/rec-types.c:1320 +#, c-format +msgid "value too large. Expected a size <= %zu." +msgstr "вредност је превелика. Очекивана вредност је <= %zu." + +#: src/rec-types.c:1341 +msgid "invalid 'line' value." +msgstr "неисправна вредност „line“." + +#: src/rec-types.c:1360 +msgid "value does not match the regexp." +msgstr "вредност се не поклапа са регуларним изразом." + +#: src/rec-types.c:1383 +msgid "invalid date." +msgstr "неисправан датум." + +#: src/rec-types.c:1399 +msgid "invalid email." +msgstr "неисправна ел. пошта." + +#: src/rec-types.c:1444 +msgid "invalid enum value." +msgstr "неисправна бројевна вредност." + +#: src/rec-utils.c:93 +#, c-format +msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" +msgstr "" +"унутрашња грешка: „rec_int_rec_extract_file“: грешка превођења регуларног " +"израза.\n" + +#: src/rec-utils.c:121 src/rec-utils.c:150 +#, c-format +msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" +msgstr "" +"унутрашња грешка: „rec_int_rec_extract_url“: грешка превођења регуларног " +"израза.\n" + +#: src/rec-utils.c:304 +#, c-format +msgid "internal error: rec_match: error compiling regexp.\n" +msgstr "унутрашња грешка: „rec_match“: грешка превођења регуларног израза.\n" + +#. TRANSLATORS: --help output, csv2rec synopsis. +#. no-wrap +#: utils/csv2rec.c:105 +#, c-format +msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" +msgstr "Употреба: csv2rec [ОПЦИЈЕ]... [ЦСВ_ДАТОТЕКА]\n" + +#. TRANSLATORS: --help output, csv2rec short description. +#. no-wrap +#: utils/csv2rec.c:110 +msgid "Convert csv data into rec data.\n" +msgstr "Претворите цсв податке у податке записа.\n" + +#. TRANSLATORS: --help output, csv2rec options. +#. no-wrap +#: utils/csv2rec.c:116 +msgid "" +" -t, --type=TYPE type name for the converted records; " +"if this\n" +" parameter is ommited then no type is " +"used.\n" +" -s, --strict be strict parsing the csv file.\n" +" -e, --omit-empty omit empty fields.\n" +msgstr "" +" -t, --type=ВРСТА назив врсте за претворене записе; ако " +"је овај\n" +" параметар изостављен онда се не " +"користи врста.\n" +" -s, --strict бива тачан обрађујући цсв датотеку.\n" +" -e, --omit-empty изоставља празна поља.\n" + +#: utils/csv2rec.c:230 +#, c-format +msgid "invalid field name '%s' in header\n" +msgstr "неисправан назив поља „%s“ у заглављу\n" + +#: utils/csv2rec.c:259 +#, fuzzy, c-format +msgid "" +"%s: %lu: this line contains %lu fields, but %lu header fields were read\n" +msgstr "%s: %d: овај ред садржи %d поља, али су прочитана %d поља заглавља\n" + +#: utils/csv2rec.c:347 utils/recdel.c:266 utils/recset.c:358 utils/recutl.c:328 +#, c-format +msgid "cannot read file %s\n" +msgstr "не могу да прочитам датотеку „%s“\n" + +#: utils/csv2rec.c:358 +msgid "failed to initialize csv parser\n" +msgstr "нисам успео да покренем цсв обрађивача\n" + +#: utils/csv2rec.c:376 +#, c-format +msgid "error while parsing CSV file: %s\n" +msgstr "грешка приликом обраде ЦСВ датотеке: %s\n" + +#. TRANSLATORS: --help output, mdb2rec synopsis. +#. no-wrap +#: utils/mdb2rec.c:103 +#, c-format +msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" +msgstr "Употреба: mdb2rec [ОПЦИЈЕ]... МДБ_ДАТОТЕКА [ТАБЕЛА]\n" + +#. TRANSLATORS: --help output, mdb2rec short description. +#. no-wrap +#: utils/mdb2rec.c:108 +msgid "Convert an mdb file into a rec file.\n" +msgstr "Претворите мдб датотеку у датотеку записа.\n" + +#. TRANSLATORS: --help output, mdb2rec options. +#. no-wrap +#: utils/mdb2rec.c:114 +msgid "" +" -s, --system-tables include system tables.\n" +" -e, --keep-empty-fields don't prune empty fields in the rec\n" +" output.\n" +" -l, --list-tables dump a list of the table names " +"contained\n" +" in the mdb file.\n" +msgstr "" +" -s, --system-tables укључује системске табеле.\n" +" -e, --keep-empty-fields не избацује празна поља у излазу\n" +" записа.\n" +" -l, --list-tables прослеђује списак назива табела\n" +" садржаних у мдб датотеци.\n" + +#: utils/mdb2rec.c:251 utils/mdb2rec.c:315 +#, c-format +msgid "failed to normalise record type name %s\n" +msgstr "нисам успео да нормализујем назив врсте записа %s\n" + +#: utils/mdb2rec.c:259 utils/mdb2rec.c:270 +#, c-format +msgid "failed to normalise field name %s\n" +msgstr "нисам успео да нормализујем назив поља %s\n" + +#: utils/mdb2rec.c:336 +#, c-format +msgid "failed to normalise the field name %s\n" +msgstr "нисам успео да нормализујем назив поља %s\n" + +#: utils/mdb2rec.c:443 utils/recins.c:208 utils/recset.c:253 +#, c-format +msgid "invalid field name %s.\n" +msgstr "неисправан назив поља %s.\n" + +#: utils/mdb2rec.c:482 +#, c-format +msgid "could not open file %s\n" +msgstr "не могу да отворим датотеку %s\n" + +#: utils/mdb2rec.c:489 +msgid "file does not appear to be an Access database\n" +msgstr "датотека не изгледа да је база пдатака Аксеса\n" + +#. TRANSLATORS: --help output, rec2csv synopsis. +#. no-wrap +#: utils/rec2csv.c:86 +#, c-format +msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" +msgstr "Употреба: rec2csv [ОПЦИЈЕ]... [ДАТОТЕКА_ЗАПИСА]\n" + +#. TRANSLATORS: --help output, rec2csv short description. +#. no-wrap +#: utils/rec2csv.c:91 +msgid "Convert rec data into csv data.\n" +msgstr "Претворите податке записа у цсв податке.\n" + +#. TRANSLATORS: --help output, rec2csv options. +#. no-wrap +#: utils/rec2csv.c:97 +msgid "" +" -d, --delim=char sets the deliminator (default ',')\n" +" -t, --type=TYPE record set to convert to csv; if this " +"parameter\n" +" is omitted then the default record " +"set is used\n" +" -S, --sort=FIELDS sort the output by the specified " +"fields.\n" +msgstr "" +" -d, --delim=знак подешава раздвајач (основно је ,)\n" +" -t, --type=ВРСТА скуп записа за претварање у цсв; ако " +"је овај параматар\n" +" изостављен онда се користи основни " +"скуп записа\n" +" -S, --sort=ПОЉА ређа резултат према наведеном пољу.\n" + +#: utils/rec2csv.c:142 +msgid "only one list of fields can be specified as a sorting criteria.\n" +msgstr "само један списак поља може бити наведен као мерило ређања.\n" + +#: utils/rec2csv.c:149 +msgid "invalid field name list in -S.\n" +msgstr "неисправан списак назива поља у „-S“.\n" + +#: utils/rec2csv.c:155 utils/recsel.c:248 utils/recsel.c:286 +msgid "internal error creating fex.\n" +msgstr "унутрашња грешка стварања фекса.\n" + +#. TRANSLATORS: --help output, recdel synopsis. +#. no-wrap +#: utils/recdel.c:89 +#, c-format +msgid "" +"Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [FILE]\n" +msgstr "" +"Употреба: recdel [ОПЦИЈЕ]... [-t ВРСТА] [-n БРОЈ | -e ИЗРАЗ_ЗАПИСА | -q НИЗ " +"| -m БРОЈ] [ДАТОТЕКА]\n" + +#. TRANSLATORS: --help output, recdel short description. +#. no-wrap +#: utils/recdel.c:94 +msgid "Remove (or comment out) records from a rec file.\n" +msgstr "Уклоните (или ставите у напомену) записе из датотеке записа.\n" + +#. TRANSLATORS: --help output, recdel arguments. +#. no-wrap +#: utils/recdel.c:101 +msgid "" +" -c, --comment comment out the matching records " +"instead of\n" +" deleting them.\n" +" --force delete even in potentially dangerous " +"situations,\n" +" and if the deletion is violating " +"record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -c, --comment ставља у напомену подударајуће записе\n" +" уместо да их брише.\n" +" --force брише чак и у потенцијално опасним " +"ситуацијама,\n" +" и ако брисање нарушава ограничења " +"записа.\n" +" --no-external не користи спољне описнике.\n" +" --verbose даје опширан извештај ако провера\n" +" целовитости не успе.\n" + +#. TRANSLATORS: --help output, notes on recdel. +#. no-wrap +#. TRANSLATORS: --help output, notes on recfix. +#. no-wrap +#. TRANSLATORS: --help output, notes on recins. +#. no-wrap +#: utils/recdel.c:119 utils/recfix.c:167 utils/recins.c:149 +msgid "" +"If no FILE is specified then the command acts like a filter, getting\n" +"the data from standard input and writing the result to standard output.\n" +msgstr "" +"Ако ДАТОТЕКА није наведена онда наредба делује као пропусник, добављајући\n" +"податке са стандардног улаза и записујући резултат на стандардни излаз.\n" + +#: utils/recdel.c:136 +#, c-format +msgid "no records of type %s found.\n" +msgstr "нису пронађени записи врсте %s.\n" + +#: utils/recdel.c:227 +#, c-format +msgid "ignoring a request to delete all records of type %s.\n" +msgstr "занемарује захтев за брисање свих записа врсте %s.\n" + +#: utils/recdel.c:229 +msgid "use --force if you really want to proceed, or use either -n or -e.\n" +msgstr "" +"користите „--force“ ако заиста желите да наставите, или користите „-n“ или „-" +"e“.\n" + +#: utils/recdel.c:237 +msgid "invalid selection expression.\n" +msgstr "неисправан израз избора.\n" + +#: utils/recdel.c:276 utils/recfix.c:407 utils/recins.c:410 utils/recset.c:365 +#, c-format +msgid "file %s is not writable.\n" +msgstr "датотека „%s“ није уписива.\n" + +#. TRANSLATORS: --help output, recfix synopsis. +#. no-wrap +#: utils/recfix.c:117 +#, c-format +msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" +msgstr "Употреба: recfix [ОПЦИЈА]... [РАДЊА] [ОПЦИЈА_РАДЊЕ]... [ДАТОТЕКА]\n" + +#. TRANSLATORS: --help output, recfix short description. +#. no-wrap +#: utils/recfix.c:122 +msgid "Check and fix rec files.\n" +msgstr "Проверите и поправите датотеке записа.\n" + +#. TRANSLATORS: --help output, recfix global arguments. +#. no-wrap +#: utils/recfix.c:129 +msgid "" +" --no-external don't use external descriptors.\n" +" --force force the requested operation.\n" +msgstr "" +" --no-external не користи спољног описника.\n" +" --force приморава захтевану радњу.\n" + +#. TRANSLATORS: --help output, recfix operations. +#. no-wrap +#: utils/recfix.c:139 +msgid "" +"Operations:\n" +" --check check integrity of the specified " +"file. Default.\n" +" --sort sort the records in the specified " +"file.\n" +" --auto insert auto-generated fields in " +"records missing them.\n" +msgstr "" +"Радње:\n" +" --check cпроверава целовитост наведене " +"датотеке. Основно.\n" +" --sort ређа записе у наведеној датотеци.\n" +" --auto умеће самостворена поља у записима " +"који их немају.\n" + +#. TRANSLATORS: --help output, recfix operations related with encryption. +#. no-wrap +#: utils/recfix.c:149 +msgid "" +" --encrypt encrypt confidential fields in the " +"specified file.\n" +" --decrypt decrypt confidential fields in the " +"specified file.\n" +msgstr "" +" --encrypt шифрује поверљива поља у наведеној " +"датотеци.\n" +" --decrypt дешифрује поверљива поља у наведеној " +"датотеци.\n" + +#. TRANSLATORS: --help output, recfix encryption and decryption +#. options. +#. no-wrap +#: utils/recfix.c:158 +msgid "" +"De/Encryption options:\n" +" -s, --password=PASSWORD encrypt/decrypt with this password.\n" +msgstr "" +"Опције де/шифровања:\n" +" -s, --password=ЛОЗИНКА шифрује/дешифрује овом лозинком.\n" + +#: utils/recfix.c:208 +msgid "--password|-s must be used as an operation argument.\n" +msgstr "„--password|-s“ мора бити коришћено као аргумент радње.\n" + +#: utils/recfix.c:214 +msgid "the specified operation does not require a password.\n" +msgstr "наведена радња не захтева лозинку.\n" + +#: utils/recfix.c:219 +msgid "please specify just one password.\n" +msgstr "молим наведите барем једну лозинку.\n" + +#: utils/recfix.c:230 utils/recfix.c:240 utils/recfix.c:250 utils/recfix.c:261 +#: utils/recfix.c:271 +msgid "please specify just one operation.\n" +msgstr "молим наведите барем једну радњу.\n" + +#: utils/recfix.c:463 +msgid "the database contains already encrypted fields\n" +msgstr "база података садржи већ шифрована поља\n" + +#: utils/recfix.c:464 +msgid "please use --force or --decrypt\n" +msgstr "молим користите „--force“ или „--decrypt“\n" + +#: utils/recfix.c:574 +msgid "unknown operation in recfix: please report this as a bug.\n" +msgstr "непозната радња у поправци записа: молим пријавите ово као грешку.\n" + +#. TRANSLATORS: --help output, recfmt synopsis. +#. no-wrap +#: utils/recfmt.c:78 +#, c-format +msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" +msgstr "Употреба: recfmt [ОПЦИЈА]... [ШАБЛОН]\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:83 +msgid "Apply a template to records read from standard input.\n" +msgstr "Примените шаблон на читања записа са стандардног улаза.\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:89 +msgid "" +" -f, --file=FILENAME read the template to apply from a " +"file.\n" +msgstr "" +" -f, --file=НАЗИВДАТОТЕКЕ чита шаблон за примену из датотеке.\n" + +#: utils/recfmt.c:123 +#, c-format +msgid "can't open file %s for reading.\n" +msgstr "не могу да отворим датотеку „%s“ за читање.\n" + +#: utils/recfmt.c:141 +msgid "don't specify a template in the command line and -f at the same time.\n" +msgstr "не наводи шаблон на линији наредби и „-f“ у исто време.\n" + +#: utils/recfmt.c:164 +msgid "invalid expression in a template slot.\n" +msgstr "неисправан израз у прикључку шаблона.\n" + +#: utils/recfmt.c:170 +msgid "error evaluating expression in a template slot.\n" +msgstr "грешка процењивања израза у прикључку шаблона.\n" + +#: utils/recfmt.c:204 +msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" +msgstr "" +"фмтзпс_примени_шаблон: грешка превођења регуларног израза. Молим пријавите " +"ово.\n" + +#. TRANSLATORS: --help output, recinf synopsis. +#. no-wrap +#: utils/recinf.c:84 +#, c-format +msgid "Usage: recinf [OPTION]... [FILE]...\n" +msgstr "Употреба: recinf [ОПЦИЈА]... [ДАТОТЕКА]...\n" + +#. TRANSLATORS: --help output, recinf short description. +#. no-wrap +#: utils/recinf.c:89 +msgid "Print information about the types of records stored in the input.\n" +msgstr "Исписшите податке о врстама записа ускладиштених у улазу.\n" + +#. TRANSLATORS: --help output, recinf arguments. +#. no-wrap +#: utils/recinf.c:96 +msgid "" +" -t, --type=RECORD_TYPE print information on the records having " +"the\n" +" specified type.\n" +" -d, --descriptor include the full record descriptors.\n" +" -n, --names-only output just the names of the record files\n" +" found in the input.\n" +msgstr "" +" -t, --type=ВРСТА_ЗАПИСА исписује податке о записима који имају\n" +" наведене врсте.\n" +" -d, --descriptor укључује пуне описнике записа.\n" +" -n, --names-only резултира само називима датотека записа\n" +" пронађених у уносу.\n" + +#. TRANSLATORS: --help output, recinf special options. +#. no-wrap +#: utils/recinf.c:109 +msgid "" +"Special options:\n" +" -S, --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Посебне опције:\n" +" -S, --print-sexps исписује податке у сехпс уместо у рек " +"формату.\n" + +#: utils/recinf.c:263 +#, c-format +msgid "error: cannot read file %s\n" +msgstr "грешка: не могу да читам датотеку „%s“\n" + +#. TRANSLATORS: --help output, recins synopsis. +#. no-wrap +#: utils/recins.c:111 +#, c-format +msgid "" +"Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" +msgstr "" +"Употреба: recins [ОПЦИЈА]... [-t ВРСТА] [-n БРОЈ | -e ИЗРАЗ_ЗАПИСА | -q НИЗ " +"| -m БРОЈ] [(-f НАЗИВ -v НИСКА) | -r ПОДАЦИЗАПИСА]... [ДАТОТЕКА]\n" + +#. TRANSLATORS: --help output, recins short description. +#. no-wrap +#: utils/recins.c:116 +msgid "Insert new records in a rec database.\n" +msgstr "Уметните нове записе у базу података.\n" + +#. TRANSLATORS: --help output, recins arguments. +#. no-wrap +#: utils/recins.c:122 +msgid "" +" -f, --field=STR field name; should be followed by a -" +"v.\n" +" -v, --value=STR field value; should be preceded by an -" +"f.\n" +" -r, --record=STR record that will be inserted in the " +"file.\n" +" --force insert the record even if it is " +"violating\n" +" record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --no-auto don't insert auto generated fields.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -f, --field=НИЗ назив поља; трба да га следи -v.\n" +" -v, --value=НИЗ вредност поља; трба да јој претходи -" +"f.\n" +" -r, --record=НИЗ запис који ће бити уметнут у " +"датотеку.\n" +" --force умеће запис чак и ако нарушава\n" +" ограничења записа.\n" +" --no-external не користи спољне описнике.\n" +" --no-auto не умеће самостворена поља.\n" +" --verbose даје опширан извештај ако провера " +"целовитости\n" +" не успе.\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recins.c:136 +msgid "" +" -s, --password=STR encrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=НИЗ шифрује поверљива поља датом " +"лозинком.\n" + +#: utils/recins.c:195 +msgid "a -f should be followed by a -v\n" +msgstr "након „-f“ треба да следи „-v“\n" + +#: utils/recins.c:219 +msgid "a -v should be preceded by a -f\n" +msgstr "испред „-v“ треба да претходи „-f“\n" + +#: utils/recins.c:244 utils/recsel.c:223 +msgid "more than one password was specified\n" +msgstr "наведено је неколико лозинки\n" + +#: utils/recins.c:258 +msgid "error while parsing the record provided by -r\n" +msgstr "грешка за време обраде записа достављеног „-r“-ом\n" + +#: utils/recins.c:293 +#, c-format +msgid "please provide a value for the field %s\n" +msgstr "молим обезбедите вредност за поље %s\n" + +#. TRANSLATORS: --help output, recsel synopsis. +#. no-wrap +#: utils/recsel.c:118 +#, c-format +msgid "" +"Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " +"| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" +msgstr "" +"Употреба: recsel [ОПЦИЈА]... [-t ВРСТА] [-j ПОЉЕ] [-n ИНДЕКСИ | -e " +"ИЗРАЗ_ЗАПИСА | -q НИСКА | -m БРОЈ] [-c | (-p|-P) ИЗРАЗ_ПОЉА] [ДАТОТЕКА]...\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:123 +msgid "Select and print rec data.\n" +msgstr "Изаберите и исписшите податке записа.\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:129 +msgid "" +" -d, --include-descriptors print record descriptors along with " +"the matched\n" +" records.\n" +" -C, --collapse do not section the result in records " +"with newlines.\n" +" -S, --sort=FIELD,... sort the output by the specified " +"fields.\n" +" -G, --group-by=FIELD,... group records by the specified " +"fields.\n" +" -U, --uniq remove duplicated fields in the output " +"records.\n" +msgstr "" +" -d, --include-descriptors исписује описнике записа поред " +"поклопљених\n" +" записа.\n" +" -C, --collapse не дели резултат у записима новим " +"редовима.\n" +" -S, --sort=ПОЉЕ,... ређа излазе према наведеном пољу.\n" +" -G, --group-by=ПОЉЕ,... групише записе према наведеним " +"пољима.\n" +" -U, --uniq уклања удвостручена поља у излазним " +"записима.\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recsel.c:141 +msgid "" +" -s, --password=STR decrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=НИЗ дешифрује поверљива поља датом " +"лозинком.\n" + +#: utils/recsel.c:150 +msgid "" +" -j, --join=FIELD perform an inner join using the " +"specified field.\n" +msgstr "" +" -j, --join=ПОЉЕ обавља унутрашње придруживање " +"користећи наведено поље.\n" + +#. TRANSLATORS: --help output, recsel output options. +#. no-wrap +#: utils/recsel.c:157 +msgid "" +"Output options:\n" +" -p, --print=FIELDS comma-separated list of fields to " +"print for each\n" +" matching record.\n" +" -P, --print-values=FIELDS as -p, but print only the values of " +"the selected\n" +" fields.\n" +" -R, --print-row=FIELDS as -P, but separate the values with " +"spaces instead\n" +" of newlines.\n" +" -c, --count print a count of the matching records " +"instead of\n" +" the records themselves.\n" +msgstr "" +"Опције излаза:\n" +" -p, --print=ПОЉА зарезом раздвојен списак поља за " +"исписивање за\n" +" сваки поклопљени запис.\n" +" -P, --print-values=ПОЉА као -p, али исписује само вредност " +"изабраних\n" +" поља.\n" +" -R, --print-row=ПОЉА као -P, али раздваја вредности " +"просторима уместо\n" +" новим редовима.\n" +" -c, --count исписује број поклопљених записа " +"уместо\n" +" самих записа.\n" + +#. TRANSLATORS: --help output, recsel special options. +#. no-wrap +#: utils/recsel.c:171 +msgid "" +"Special options:\n" +" --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Посебне опције:\n" +" --print-sexps исписује податке у сехпс уместо у рек " +"формату.\n" + +#: utils/recsel.c:235 +msgid "only one field list can be specified as a sorting criteria.\n" +msgstr "само један списак поља може бити наведен као мерило ређања.\n" + +#: utils/recsel.c:242 +msgid "invalid field names in -S.\n" +msgstr "неисправни називи поља у „-S“.\n" + +#: utils/recsel.c:258 +msgid "only one field can be specified as join criteria.\n" +msgstr "само једно поље може бити наведено као мерило спајања.\n" + +#: utils/recsel.c:263 +msgid "please specify a correct field name to -j|--join.\n" +msgstr "молим наведите исправан назив поља за „-j|--join“.\n" + +#: utils/recsel.c:274 +msgid "only one field list can be specified as a grouping criteria.\n" +msgstr "само један списак поља може бити наведен као мерило груписања.\n" + +#: utils/recsel.c:280 +msgid "invalid field names in -G.\n" +msgstr "неисправни називи поља у „-G“.\n" + +#: utils/recsel.c:300 +msgid "cannot specify -[pPR] and also -c.\n" +msgstr "не можете да наведете „-[pPR]“ и такође „-c“.\n" + +#: utils/recsel.c:317 +#, c-format +msgid "invalid list of fields in -%c\n" +msgstr "неисправан списак поља у „-%c“.\n" + +#: utils/recsel.c:325 +msgid "internal error creating the field expression.\n" +msgstr "унутрашња грешка стварања израза поља.\n" + +#: utils/recsel.c:340 +#, c-format +msgid "invalid aggregate function '%s'\n" +msgstr "неисправна функција спајања „%s“\n" + +#: utils/recsel.c:358 +msgid "cannot specify -c and also -p.\n" +msgstr "не можете да наведете и „-c“ и „-p“.\n" + +#: utils/recsel.c:377 +msgid "joins can only be used when a named record set is selected.\n" +msgstr "" +"спајања могу бити коришћена само када је изабран скуп именованог записа.\n" + +#: utils/recsel.c:439 +msgid "several record types found. Please use -t to specify one.\n" +msgstr "" +"пронашао сам неколико врста записа. Молим користите „-t“ да наведете " +"једну.\n" + +#. TRANSLATORS: --help output, recset synopsis. +#. no-wrap +#: utils/recset.c:113 +#, c-format +msgid "Usage: recset [OPTION]... [FILE]...\n" +msgstr "Употреба: recset [ОПЦИЈА]... [ДАТОТЕКА]...\n" + +#. TRANSLATORS: --help output, recset short description. +#. no-wrap +#: utils/recset.c:118 +msgid "Alter or delete fields in records.\n" +msgstr "Измените или обришите поља у запису.\n" + +#. TRANSLATORS: --help output, recset options. +#. no-wrap +#: utils/recset.c:124 +msgid "" +" --no-external don't use external descriptors.\n" +" --force alter the records even if violating " +"record\n" +" restrictions.\n" +msgstr "" +" --no-external не користи спољне описнике.\n" +" --force мења записе чак и ако нарушава\n" +" ограничења записа.\n" + +#. TRANSLATORS: --help output, recset field selection options. +#. no-wrap +#: utils/recset.c:137 +msgid "" +"Field selection options:\n" +" -f, --fields=FIELDS comma-separated list of field names " +"with optional\n" +" subscripts.\n" +msgstr "" +"Опције избора поља:\n" +" -f, --fields=ПОЉА зарезом раздвојен списак назива поља\n" +" са опционалним подскриптама.\n" + +#. TRANSLATORS: --help output, recset actions. +#. no-wrap +#: utils/recset.c:145 +msgid "" +"Actions:\n" +" -s, --set=VALUE change the value of the selected " +"fields.\n" +" -a, --add=VALUE add the selected fields with the given " +"value.\n" +" -S, --set-add=VALUE change the value of the selected " +"fields. If they don't\n" +" exist then add a new field with that " +"value.\n" +" -r, --rename=NAME rename the selected fields to a given " +"name. If an entire\n" +" record set is selected then the " +"field is renamed in the\n" +" record descriptor as well.\n" +" -d, --delete delete the selected fields.\n" +" -c, --comment comment out the selected fields.\n" +msgstr "" +"Радње:\n" +" -s, --set=ВРЕДНОСТ мења вредност изабраних поља.\n" +" -a, --add=ВРЕДНОСТ додаје изабрана поља са датом " +"вредношћу.\n" +" -S, --set-add=ВРЕДНОСТ мења вредност изабраних поља. Ако не " +"постоје\n" +" тада додаје ново поље са том " +"вредношћу.\n" +" -r, --rename=НАЗИВ преименује изабрана поља на дати " +"назив. Ако је изабран\n" +" читав скуп записа тада је поље такође " +"применовано\n" +" и у описнику.\n" +" -d, --delete брише изабрана поља.\n" +" -c, --comment ставља у напомену изабрана поља.\n" + +#: utils/recset.c:168 +msgid "please specify some field with -f.\n" +msgstr "молим наведите неко поље са „-f“.\n" + +#: utils/recset.c:173 +msgid "please specify just one action.\n" +msgstr "молим наведите барем једну радњу.\n" + +#: utils/recset.c:213 +msgid "invalid field expression in -f.\n" +msgstr "неисправан израз поља у „-f“.\n" + +#: utils/recset.c:221 +msgid "creating the field expression.\n" +msgstr "стварам израз поља.\n" + +#: utils/recset.c:243 +msgid "" +"the rename operation requires just one field with an optional subscript.\n" +msgstr "" +"радња преименовања захтева само једно поље са опционалним подскриптом.\n" + +#. TRANSLATORS: --help output 5+ (reports) +#. TRANSLATORS: the placeholder indicates the bug-reporting address +#. for this application. Please add _another line_ with the +#. address for translation bugs. +#. no-wrap +#: utils/recutl.c:122 +#, c-format +msgid "Report bugs to: %s\n" +msgstr "Грешке пријавите на: %s\n" + +#: utils/recutl.c:131 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" +msgstr "%s матична страница: <http://www.gnu.org/software/recutils/>\n" + +#: utils/recutl.c:134 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "Општа помоћ користећи ГНУ софтвер: <http://www.gnu.org/gethelp/>\n" + +#. TRANSLATORS: --help output, common arguments. +#. no-wrap +#: utils/recutl.c:143 +msgid "" +" --help print a help message and exit.\n" +" --version show version and exit.\n" +msgstr "" +" --help исписује помоћ и излази.\n" +" --version приказује издање и излази.\n" + +#. TRANSLATORS: --help output, record selection arguments +#. no-wrap +#: utils/recutl.c:154 +msgid "" +"Record selection options:\n" +" -i, --case-insensitive make strings case-insensitive in " +"selection\n" +" expressions.\n" +" -t, --type=TYPE operate on records of the specified " +"type only.\n" +" -e, --expression=RECORD_EXPR selection expression.\n" +" -q, --quick=STR select records with fields containing " +"a string.\n" +" -n, --number=NUM,... select specific records by position, " +"with ranges.\n" +" -m, --random=NUM select a given number of random " +"records.\n" +msgstr "" +"Опције избора записа:\n" +" -i, --case-insensitive чини ниске неосетљиве на величину " +"слова\n" +" у изразима избора.\n" +" -t, --type=ВРСТА ради само над записима наведене " +"врсте.\n" +" -e, --expression=ИЗРАЗ_ЗАПИСА израз избора.\n" +" -q, --quick=НИЗ бира записе са пољима која садрже " +"ниску.\n" +" -n, --number=БРОЈ,... бира нарочите записе према положају, " +"са опсезима.\n" +" -m, --random=БРОЈ бира дати број насумичних записа.\n" + +#: utils/recutl.c:179 +#, c-format +msgid "" +"Copyright (C) %s Jose E. Marchesi.\n" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +msgstr "" +"Ауторска права (C) %s Хозе Е. Маркези.\n" +"Лиценца ОЈЛв3+: ГНУ ОЈЛ издање 3 или новије <http://gnu.org/licenses/gpl." +"html>.\n" +"Ово је слободан софтвер: слободни сте да га мењате и расподељујете.\n" +"Не постоји НИКАКВА ГАРАНЦИЈА, у оквирима дозвољеним законом.\n" + +#: utils/recutl.c:185 +msgid "" +"\n" +"Written by Jose E. Marchesi." +msgstr "" +"\n" +"Написао Хозе Е. Маркези." + +#: utils/recutl.c:197 utils/recutl.c:217 +msgid ": error: " +msgstr ": грешка: " + +#: utils/recutl.c:229 +msgid ": warning: " +msgstr ": упозорење: " + +#: utils/recutl.c:254 +#, c-format +msgid "duplicated record set '%s' from %s.\n" +msgstr "удвостручени скуп записа „%s“ из %s.\n" + +#: utils/recutl.c:417 +msgid "cannot create a unique name.\n" +msgstr "не могу да створим јединствени назив.\n" + +#: utils/recutl.c:438 +#, c-format +msgid "renaming file %s to %s\n" +msgstr "преименујем датотеку „%s“ у „%s“\n" + +#: utils/recutl.c:482 +msgid "operation aborted due to integrity failures.\n" +msgstr "радња је прекинута услед неуспеха целовитости.\n" + +#: utils/recutl.c:483 +msgid "use --verbose to get a detailed report.\n" +msgstr "користите „--verbose“ да добијете опширан извештај.\n" + +#: utils/recutl.c:490 +msgid "use --force to skip the integrity check.\n" +msgstr "користите „--force“ да прескочите проверу целовитости.\n" + +#: utils/recutl.c:551 +msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" +msgstr "" +"унутрашња грешка: „recutl_index_list_parse“: грешка превођења регуларног " +"израза.\n" + +#: utils/recutl.c:626 +msgid "Password: " +msgstr "Лозинка: " + +#: utils/recutl.c:632 +msgid "Password again: " +msgstr "Поновите лозинку: " + +#: utils/recutl.c:637 +msgid "the provided passwords don't match.\n" +msgstr "дате лозинке се не подударају.\n" + +#: utils/recutl.h:97 utils/recutl.h:186 utils/recutl.h:190 +#, fuzzy +msgid "cannot specify -e and also -n\n" +msgstr "не можете да наведете и „-c“ и „-p“.\n" + +#: utils/recutl.h:102 +#, fuzzy +msgid "cannot specify -e and also -q\n" +msgstr "не можете да наведете и „-c“ и „-p“.\n" + +#: utils/recutl.h:113 +#, fuzzy +msgid "invalid selection expression\n" +msgstr "неисправан израз избора.\n" + +#: utils/recutl.h:125 +#, fuzzy +msgid "cannot specify -n and also -e\n" +msgstr "не можете да наведете и „-c“ и „-p“.\n" + +#: utils/recutl.h:130 +#, fuzzy +msgid "cannot specify -n and also -q\n" +msgstr "не можете да наведете и „-c“ и „-p“.\n" + +#: utils/recutl.h:140 +#, fuzzy +msgid "invalid list of indexes in -n\n" +msgstr "неисправан списак поља у „-%c“.\n" + +#: utils/recutl.h:150 +#, fuzzy +msgid "cannot specify -m and also -e\n" +msgstr "не можете да наведете и „-c“ и „-p“.\n" + +#: utils/recutl.h:155 +#, fuzzy +msgid "cannot specify -m and also -q\n" +msgstr "не можете да наведете и „-c“ и „-p“.\n" + +#: utils/recutl.h:160 +#, fuzzy +msgid "cannot specify -m and also -n\n" +msgstr "не можете да наведете и „-c“ и „-p“.\n" + +#~ msgid "%s: option '--%s' doesn't allow an argument\n" +#~ msgstr "%s: опција „--%s“ не дозвољава аргумент\n" + +#~ msgid "%s: unrecognized option '--%s'\n" +#~ msgstr "%s: непозната опција „--%s“\n" + +#~ msgid "%s: option '-W %s' doesn't allow an argument\n" +#~ msgstr "%s: опција „-W %s“ не дозвољава аргумент\n" + +#~ msgid "%s: option '-W %s' requires an argument\n" +#~ msgstr "%s: опција „-W %s“ захтева аргумент\n" diff --git a/devspec.en_US/project/recutils/po/stamp-po b/devspec.en_US/project/recutils/po/stamp-po new file mode 100755 index 0000000..9788f70 --- /dev/null +++ b/devspec.en_US/project/recutils/po/stamp-po @@ -0,0 +1 @@ +timestamp diff --git a/devspec.en_US/project/recutils/po/sv.gmo b/devspec.en_US/project/recutils/po/sv.gmo new file mode 100755 index 0000000000000000000000000000000000000000..6bbd593b39797c4341a7d5c0bda302ea41359bbd GIT binary patch literal 34183 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 V-)-5?KY5uduk)TT`;nBn_<waB63hSq literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/po/sv.po b/devspec.en_US/project/recutils/po/sv.po new file mode 100755 index 0000000..f11bf42 --- /dev/null +++ b/devspec.en_US/project/recutils/po/sv.po @@ -0,0 +1,1950 @@ +# Swedish translation of the GNU recuilts package. +# Copyright © 2011, 2012, 2013, 2014 Free Software Foundation, Inc. +# This file is distributed under the same license as the recutils package. +# Göran Uddeborg <goeran@uddeborg.se>, 2011, 2012, 2013, 2014. +# +# $Revision: 1.19 $ +msgid "" +msgstr "" +"Project-Id-Version: GNU recutils 1.6.90\n" +"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" +"POT-Creation-Date: 2019-01-03 10:32+0100\n" +"PO-Revision-Date: 2014-03-21 16:18+0100\n" +"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n" +"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" + +#: lib/closeout.c:122 +msgid "write error" +msgstr "skrivfel" + +#: lib/copy-acl.c:54 +#, c-format +msgid "preserving permissions for %s" +msgstr "" + +#: lib/error.c:195 +msgid "Unknown system error" +msgstr "Okänt systemfel" + +#: lib/execute.c:185 lib/execute.c:258 lib/wait-process.c:282 +#: lib/wait-process.c:356 +#, c-format +msgid "%s subprocess failed" +msgstr "%s underprocess misslyckades" + +#: lib/getopt.c:278 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous\n" +msgstr "%s: flaggan ”-W% s” är tvetydig\n" + +#: lib/getopt.c:284 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous; possibilities:" +msgstr "%s: flaggan ”%s” är tvetydig; möjligheter:" + +#: lib/getopt.c:319 +#, fuzzy, c-format +msgid "%s: unrecognized option '%s%s'\n" +msgstr "%s: okänd flagga ”%c%s”\n" + +#: lib/getopt.c:345 +#, fuzzy, c-format +msgid "%s: option '%s%s' doesn't allow an argument\n" +msgstr "%s: flaggan ”%c%s” tar inget argument\n" + +#: lib/getopt.c:360 +#, fuzzy, c-format +msgid "%s: option '%s%s' requires an argument\n" +msgstr "%s: flaggan ”--%s” kräver ett argument\n" + +#: lib/getopt.c:621 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: ogiltig flagga — ”%c”\n" + +#: lib/getopt.c:636 lib/getopt.c:682 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: flaggan kräver ett argument — ”%c”\n" + +#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "minnet slut" + +#: parse-datetime.y:440 parse-datetime.y:540 +#, c-format +msgid "parsed %s part: " +msgstr "" + +#: parse-datetime.y:455 +#, c-format +msgid "year: %04<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:483 +#, c-format +msgid "%s (day ordinal=%<PRIdMAX> number=%d)" +msgstr "" + +#: parse-datetime.y:514 +#, c-format +msgid "number of seconds: %<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:547 +msgid "today/this/now\n" +msgstr "" + +#: parse-datetime.y:612 +msgid "number of seconds" +msgstr "" + +#: parse-datetime.y:625 +msgid "datetime" +msgstr "" + +#: parse-datetime.y:630 +msgid "time" +msgstr "" + +#: parse-datetime.y:635 +msgid "local_zone" +msgstr "" + +#: parse-datetime.y:640 +msgid "zone" +msgstr "" + +#: parse-datetime.y:645 +msgid "date" +msgstr "" + +#: parse-datetime.y:650 +msgid "day" +msgstr "" + +#: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 +msgid "relative" +msgstr "" + +#: parse-datetime.y:658 +msgid "number" +msgstr "" + +#: parse-datetime.y:662 +msgid "hybrid" +msgstr "" + +#: parse-datetime.y:820 +#, c-format +msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" +msgstr "" + +#: parse-datetime.y:832 +#, c-format +msgid "" +"warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" +msgstr "" + +#: parse-datetime.y:1276 +#, c-format +msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1286 +#, c-format +msgid "error: out-of-range year %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1524 +#, fuzzy, c-format +msgid "error: unknown word '%s'\n" +msgstr "fel: det går inte läsa filen %s\n" + +#: parse-datetime.y:1673 +#, fuzzy +msgid "error: invalid date/time value:\n" +msgstr "ogiltigt enum-värde." + +#: parse-datetime.y:1674 +#, c-format +msgid " user provided time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1676 +#, c-format +msgid " normalized time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1699 +msgid " possible reasons:\n" +msgstr "" + +#: parse-datetime.y:1701 +msgid " non-existing due to daylight-saving time;\n" +msgstr "" + +#: parse-datetime.y:1703 +msgid " invalid day/month combination;\n" +msgstr "" + +#: parse-datetime.y:1704 +msgid " numeric values overflow;\n" +msgstr "" + +#: parse-datetime.y:1705 +msgid "incorrect timezone" +msgstr "" + +#: parse-datetime.y:1706 +msgid "missing timezone" +msgstr "" + +#: parse-datetime.y:1826 +msgid "error: initial year out of range\n" +msgstr "" + +#: parse-datetime.y:1923 +#, fuzzy +msgid "error: parsing failed\n" +msgstr "fel vid tolkning av CSV-fil: %s\n" + +#: parse-datetime.y:1924 +#, fuzzy, c-format +msgid "error: parsing failed, stopped at '%s'\n" +msgstr "fel vid tolkning av CSV-fil: %s\n" + +#: parse-datetime.y:1934 +msgid "input timezone: " +msgstr "" + +#: parse-datetime.y:1937 +#, c-format +msgid "'@timespec' - always UTC" +msgstr "" + +#: parse-datetime.y:1939 +#, c-format +msgid "parsed date/time string" +msgstr "" + +#: parse-datetime.y:1943 +#, c-format +msgid "TZ=\"%s\" in date string" +msgstr "" + +#: parse-datetime.y:1947 +#, c-format +msgid "TZ=\"UTC0\" environment value or -u" +msgstr "" + +#: parse-datetime.y:1950 +#, c-format +msgid "TZ=\"%s\" environment value" +msgstr "" + +#: parse-datetime.y:1953 +#, c-format +msgid "system default" +msgstr "" + +#: parse-datetime.y:1995 +msgid "error: year, month, or day overflow\n" +msgstr "" + +#: parse-datetime.y:2006 +#, fuzzy, c-format +msgid "error: invalid hour %<PRIdMAX>%s\n" +msgstr "%s:%s: fel: ogiltig posttyp %s\n" + +#: parse-datetime.y:2014 +#, c-format +msgid "using specified time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2015 +#, c-format +msgid "using current time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2069 +#, c-format +msgid "error: tzalloc (\"%s\") failed\n" +msgstr "" + +#: parse-datetime.y:2114 +#, c-format +msgid "" +"error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " +"date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2125 +#, c-format +msgid "new start date: '%s' is '%s'\n" +msgstr "" + +#: parse-datetime.y:2134 +#, c-format +msgid "using current date as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2138 +#, c-format +msgid "warning: day (%s) ignored when explicit dates are given\n" +msgstr "" + +#: parse-datetime.y:2142 +#, c-format +msgid "starting date/time: '%s'\n" +msgstr "" + +#: parse-datetime.y:2152 +msgid "" +"warning: when adding relative months/years, it is recommended to specify the " +"15th of the months\n" +msgstr "" + +#: parse-datetime.y:2157 +msgid "warning: when adding relative days, it is recommended to specify noon\n" +msgstr "" + +#: parse-datetime.y:2167 +#, fuzzy, c-format +msgid "error: %s:%d\n" +msgstr ": fel: " + +#: parse-datetime.y:2181 +#, c-format +msgid "error: adding relative date resulted in an invalid date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2190 +#, c-format +msgid "" +"after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " +"days),\n" +msgstr "" + +#: parse-datetime.y:2194 +#, c-format +msgid " new date/time = '%s'\n" +msgstr "" + +#: parse-datetime.y:2213 +msgid "warning: daylight saving time changed after date adjustment\n" +msgstr "" + +#: parse-datetime.y:2232 +msgid "warning: month/year adjustment resulted in shifted dates:\n" +msgstr "" + +#: parse-datetime.y:2235 +#, c-format +msgid " adjusted Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2237 +#, c-format +msgid " normalized Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2265 +#, c-format +msgid "error: timezone %d caused time_t overflow\n" +msgstr "" + +#: parse-datetime.y:2275 +#, c-format +msgid "'%s' = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2303 +msgid "error: adding relative time caused an overflow\n" +msgstr "" + +#: parse-datetime.y:2314 +#, c-format +msgid "" +"after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " +"seconds, %+d ns),\n" +msgstr "" + +#: parse-datetime.y:2319 +#, c-format +msgid " new time = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2335 +msgid "warning: daylight saving time changed after time adjustment\n" +msgstr "" + +#: parse-datetime.y:2345 +msgid "timezone: system default\n" +msgstr "" + +#: parse-datetime.y:2347 +msgid "timezone: Universal Time\n" +msgstr "" + +#: parse-datetime.y:2349 +#, c-format +msgid "timezone: TZ=\"%s\" environment value\n" +msgstr "" + +#: parse-datetime.y:2353 +#, c-format +msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" +msgstr "" + +#: parse-datetime.y:2359 +#, c-format +msgid "final: %s (UTC)\n" +msgstr "" + +#: parse-datetime.y:2374 +#, c-format +msgid "final: %s (UTC%s)\n" +msgstr "" + +#: parse-datetime.y:2378 +#, c-format +msgid "final: %s (unknown time zone offset)\n" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". For example, a French Unicode local should translate +#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), respectively. +#. +#. If the catalog has no translation, we will try to +#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and +#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the +#. current locale is not Unicode, locale_quoting_style +#. will quote 'like this', and clocale_quoting_style will +#. quote "like this". You should always include translations +#. for "`" and "'" even if U+2018 and U+2019 are appropriate +#. for your locale. +#. +#. If you don't know what to put here, please see +#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:362 +msgid "`" +msgstr "”" + +#: lib/quotearg.c:363 +msgid "'" +msgstr "”" + +#: lib/regcomp.c:135 +msgid "Success" +msgstr "Gick bra" + +#: lib/regcomp.c:138 +msgid "No match" +msgstr "Ingen matchning" + +#: lib/regcomp.c:141 +msgid "Invalid regular expression" +msgstr "Ogiltigt reguljärt uttryck" + +#: lib/regcomp.c:144 +msgid "Invalid collation character" +msgstr "Ogiltigt kollationeringstecken" + +#: lib/regcomp.c:147 +msgid "Invalid character class name" +msgstr "Ogiltigt teckenklassnamn" + +#: lib/regcomp.c:150 +msgid "Trailing backslash" +msgstr "Avslutande omvänt snedstreck" + +#: lib/regcomp.c:153 +msgid "Invalid back reference" +msgstr "Ogiltig bakåtreferens" + +#: lib/regcomp.c:156 +#, fuzzy +msgid "Unmatched [, [^, [:, [., or [=" +msgstr "Ensam [ eller [^" + +#: lib/regcomp.c:159 +msgid "Unmatched ( or \\(" +msgstr "Ensam ( eller \\(" + +#: lib/regcomp.c:162 +msgid "Unmatched \\{" +msgstr "Ensam \\{" + +#: lib/regcomp.c:165 +msgid "Invalid content of \\{\\}" +msgstr "Ogiltigt innehåll i \\{\\}" + +#: lib/regcomp.c:168 +msgid "Invalid range end" +msgstr "Ogiltigt intervallslut" + +#: lib/regcomp.c:171 +msgid "Memory exhausted" +msgstr "Minnet är slut" + +#: lib/regcomp.c:174 +msgid "Invalid preceding regular expression" +msgstr "Felaktigt tidigare reguljärt uttryck" + +#: lib/regcomp.c:177 +msgid "Premature end of regular expression" +msgstr "För tidigt slut på reguljärt uttryck" + +#: lib/regcomp.c:180 +msgid "Regular expression too big" +msgstr "Reguljärt uttryck är för stort" + +#: lib/regcomp.c:183 +msgid "Unmatched ) or \\)" +msgstr "Ensam ) eller \\)" + +#: lib/regcomp.c:676 +msgid "No previous regular expression" +msgstr "Inget tidigare reguljärt uttryck" + +#: lib/set-acl.c:46 +#, c-format +msgid "setting permissions for %s" +msgstr "" + +#: lib/version-etc.c:73 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:76 +#, c-format +msgid "Packaged by %s\n" +msgstr "" + +#. TRANSLATORS: Translate "(C)" to the copyright symbol +#. (C-in-a-circle), if this symbol is available in the user's +#. locale. Otherwise, do not translate "(C)"; leave it as-is. +#: lib/version-etc.c:83 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:85 +#, fuzzy +msgid "" +"\n" +"License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +"\n" +msgstr "" +"Copyright © %s Jose E. Marchesi.\n" +"Licens GPLv3+: GNU GPL version 3 eller senare <http://gnu.org/licenses/gpl." +"html>.\n" +"Detta är fri programvara: du har rätt att ändra och vidaredistribuera den.\n" +"Det finns INGEN GARANTI, så långt som lagen tillåter.\n" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, fuzzy, c-format +msgid "Written by %s and %s.\n" +msgstr "" +"\n" +"Skrivet av Jose E. Marchesi." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, fuzzy, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "" +"\n" +"Skrivet av Jose E. Marchesi." + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:117 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" + +#. TRANSLATORS: The placeholder indicates the bug-reporting address +#. for this package. Please add _another line_ saying +#. "Report translation bugs to <...>\n" with the address for translation +#. bugs (typically your translation team's web or email address). +#: lib/version-etc.c:245 +#, fuzzy, c-format +msgid "" +"\n" +"Report bugs to: %s\n" +msgstr "" +"Rapportera fel till: %s\n" +"Rapportera kommentarer på översättningen till <tp-sv@listor.tp-sv.se>.\n" + +#: lib/version-etc.c:247 utils/recutl.c:125 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "Rapportera %s-fel till: %s\n" + +#: lib/version-etc.c:251 utils/recutl.c:129 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "%s hemsida: <%s>\n" + +#: lib/version-etc.c:253 +#, fuzzy, c-format +msgid "%s home page: <https://www.gnu.org/software/%s/>\n" +msgstr "%s hemsida: <http://www.gnu.org/software/recutils/>\n" + +#: lib/version-etc.c:256 +#, fuzzy +msgid "General help using GNU software: <https://www.gnu.org/gethelp/>\n" +msgstr "" +"Allmän hjälp med att använda GNU-program: <http://www.gnu.org/gethelp/>\n" + +#: lib/w32spawn.h:49 +#, c-format +msgid "_open_osfhandle failed" +msgstr "_open_osfhandle misslyckades" + +#: lib/w32spawn.h:90 +#, c-format +msgid "cannot restore fd %d: dup2 failed" +msgstr "det går inte att återställa fb %d: dup2 misslyckades" + +#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317 +#, c-format +msgid "%s subprocess" +msgstr "%s-underprocess" + +#: lib/wait-process.c:274 lib/wait-process.c:346 +#, c-format +msgid "%s subprocess got fatal signal %d" +msgstr "%s-underprocess fick ödesdiger signal %d" + +#: src/rec-fex.c:451 +#, c-format +msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" +msgstr "internt fel: REC_FEX_MAX_ELEMS överskreds. Rapportera gärna detta.\n" + +#: src/rec-int.c:176 +#, c-format +msgid "%s: error: the number of records of type %s should be %zd.\n" +msgstr "%s: fel: antalet poster av typ %s skall vara %zd.\n" + +#: src/rec-int.c:186 +#, c-format +msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" +msgstr "%s: fel: för många poster av typ %s. Maximalt tillåtet är %zd.\n" + +#: src/rec-int.c:193 +#, c-format +msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" +msgstr "%s: fel: för få poster av typ %s. Minimalt tillåtet är %zd.\n" + +#: src/rec-int.c:409 src/rec-int.c:463 src/rec-int.c:520 src/rec-int.c:564 +#: utils/recutl.c:207 +msgid "out of memory\n" +msgstr "slut på minne\n" + +#: src/rec-int.c:424 +#, c-format +msgid "%s:%s: error: mandatory field '%s' not found in record\n" +msgstr "%s:%s: fel: obligatoriskt fält ”%s” hittades inte i posten\n" + +#: src/rec-int.c:487 +#, c-format +msgid "%s:%s: error: field '%s' not allowed in this record set\n" +msgstr "%s:%s: fel: fältet ”%s” är inte tillåtet i postmängd\n" + +#: src/rec-int.c:534 +#, c-format +msgid "%s:%s: error: field '%s' should be unique in this record\n" +msgstr "%s:%s: fel: fält ”%s” skall vara unikt i denna post\n" + +#: src/rec-int.c:578 +#, c-format +msgid "%s:%s: error: prohibited field '%s' found in record\n" +msgstr "%s:%s: fel: förbjudet fält ”%s” finns i posten\n" + +#: src/rec-int.c:610 +#, c-format +msgid "%s:%s: error: %%constraint[%d] violated in record\n" +msgstr "%s:%s: fel: %%constraint[%d] brutet i posten\n" + +#: src/rec-int.c:647 +#, c-format +msgid "%s:%s: error: confidential field is not encrypted\n" +msgstr "%s:%s: fel: konfidentiellt fält är inte krypterat\n" + +#: src/rec-int.c:699 +#, c-format +msgid "%s:%s: error: key field '%s' not found in record\n" +msgstr "%s:%s: fel: nyckelfältet ”%s” finns inte i posten\n" + +#: src/rec-int.c:708 +#, c-format +msgid "%s:%s: error: multiple key fields '%s' in record\n" +msgstr "%s:%s: fel: flera nyckelfält ”%s” i posten\n" + +#: src/rec-int.c:751 +#, c-format +msgid "%s:%s: error: duplicated key value in field '%s' in record\n" +msgstr "%s:%s: fel: dupliceras nyckelvärde fält ”%s” i posten\n" + +#: src/rec-int.c:799 +#, c-format +msgid "%s:%s: error: missing %%rec field in record descriptor\n" +msgstr "%s:%s: fel: saknat %%rec-fält i postens deskriptor\n" + +#: src/rec-int.c:807 +#, c-format +msgid "%s:%s: error: too many %%rec fields in record descriptor\n" +msgstr "%s:%s: fel: för många %%rec-fält i postens deskriptor\n" + +#: src/rec-int.c:817 +#, c-format +msgid "%s:%s: error: invalid record type %s\n" +msgstr "%s:%s: fel: ogiltig posttyp %s\n" + +#: src/rec-int.c:828 +#, c-format +msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" +msgstr "%s:%s: fel: endast ett %%key-fält är tillåtet i en postdeskriptor\n" + +#: src/rec-int.c:838 +#, c-format +msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" +msgstr "%s:%s: fel: endast ett %%size-fält är tillåtet i en postdeskriptor\n" + +#: src/rec-int.c:848 +#, c-format +msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" +msgstr "%s:%s: fel: endast ett %%sort-fält är tillåtet i en postdeskriptor\n" + +#: src/rec-int.c:871 +#, c-format +msgid "" +"%s:%s: error: expected a comma-separated list of fields before the type " +"specification\n" +msgstr "" +"%s:%s: fel: en kommaseparerad lista med fält förväntades före " +"typspecifikationen\n" + +#: src/rec-int.c:897 src/rec-int.c:950 +#, c-format +msgid "%s:%s: error: the referred type %s does not exist\n" +msgstr "%s:%s: fel: den refererade typen %s finns inte\n" + +#: src/rec-int.c:909 +#, c-format +msgid "%s:%s: error: invalid type specification\n" +msgstr "%s:%s: fel: ogiltig typspecifikation\n" + +#: src/rec-int.c:924 +#, c-format +msgid "%s:%s: error: expected a type name before the type specification\n" +msgstr "%s:%s: fel: ett typnamn förväntades före typspecifikationen\n" + +#: src/rec-int.c:962 +#, c-format +msgid "%s:%s: error: invalid typedef specification\n" +msgstr "%s:%s: fel: ogiltig typedef-specifikation\n" + +#: src/rec-int.c:984 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" +msgstr "%s:%s: fel: värdet för %s[%zd] är inte ett giltigt urvalsuttryck\n" + +#: src/rec-int.c:1015 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" +msgstr "%s:%s: fel: värdet för %s[%zd] är inte en lista med fältnamn\n" + +#: src/rec-int.c:1028 +#, c-format +msgid "" +"%s:%s: error: value for %s should be a number optionally preceded by >, <, " +">= or <=.\n" +msgstr "" +"%s:%s: fel: värdet på %s skall vara ett tal eventuellt föregått av >, <, >= " +"eller <=.\n" + +#: src/rec-int.c:1044 +#, c-format +msgid "%s:%s: error: value for %s should be a list of field names.\n" +msgstr "%s:%s: fel: värdet för %s skall vara en lista med fältnamn.\n" + +#: src/rec-int.c:1072 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range, uuid " +"or date\n" +msgstr "" +"%s:%s: fel: automatökat fält ”%s” skall vara av typen heltal, intervall, " +"uuid eller datum\n" + +#: src/rec-int.c:1074 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range or " +"date\n" +msgstr "" +"%s:%s: fel: automatökat fält ”%s” skall vara av typen heltal, intervall " +"eller datum\n" + +#: src/rec-int.c:1157 +#, c-format +msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" +msgstr "%s:%s: fel: kunde inte hämta fjärrbeskrivaren från url:en %s.\n" + +#: src/rec-int.c:1176 +#, c-format +msgid "%s:%s: error: could not read external descriptor from file %s.\n" +msgstr "%s:%s: vel: kan inte läsa extern beskrivare från filen %s.\n" + +#: src/rec-int.c:1191 +#, c-format +msgid "%s:%s: error: %s does not contain valid rec data.\n" +msgstr "%s:%s: fel: %s innehåller inte någon giltig rec-data.\n" + +#: src/rec-int.c:1205 +#, c-format +msgid "%s:%s: error: %s does not contain information for type %s.\n" +msgstr "%s:%s: fel: %s innehåller inte information för typen %s.\n" + +#: src/rec-types.c:448 +#, c-format +msgid "" +"internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " +"in rec_type_new().\n" +msgstr "" +"internt fel: rec-types: fick REC_TYPE_NONE från rec_type_parse_type_kind() i " +"rec_type_new().\n" + +#: src/rec-types.c:1178 +msgid "invalid integer." +msgstr "ogiltigt heltal." + +#: src/rec-types.c:1208 +msgid "invalid 'field' value." +msgstr "ogiltigt ”field”-värde." + +#: src/rec-types.c:1231 +msgid "invalid 'uuid' value." +msgstr "ogiltigt ”uuid”-värde." + +#: src/rec-types.c:1249 +msgid "invalid 'bool' value." +msgstr "ogiltigt ”bool”-värde." + +#: src/rec-types.c:1272 +msgid "invalid 'range' value." +msgstr "ogiltigt ”range”-värde." + +#: src/rec-types.c:1281 +#, c-format +msgid "expected an integer between %d and %d." +msgstr "ett heltal mellan %d och %d förväntades." + +#: src/rec-types.c:1302 +msgid "invalid 'real' value." +msgstr "ogiltigt ”real”-värde." + +#: src/rec-types.c:1320 +#, c-format +msgid "value too large. Expected a size <= %zu." +msgstr "för stort värde. En storlek ≤ %zu förväntades." + +#: src/rec-types.c:1341 +msgid "invalid 'line' value." +msgstr "ogiltigt ”line”-värde." + +#: src/rec-types.c:1360 +msgid "value does not match the regexp." +msgstr "värdet stämmer inte med reguljäruttryck." + +#: src/rec-types.c:1383 +msgid "invalid date." +msgstr "ogiltigt datum." + +#: src/rec-types.c:1399 +msgid "invalid email." +msgstr "ogiltig e-post." + +#: src/rec-types.c:1444 +msgid "invalid enum value." +msgstr "ogiltigt enum-värde." + +#: src/rec-utils.c:93 +#, c-format +msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" +msgstr "" +"internt fel: rec_int_rec_extract_file: fel vid kompilering av " +"reguljäruttryck.\n" + +#: src/rec-utils.c:121 src/rec-utils.c:150 +#, c-format +msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" +msgstr "" +"internt fel: rec_int_rec_extract_url: fel vid kompilering av " +"reguljäruttryck.\n" + +#: src/rec-utils.c:304 +#, c-format +msgid "internal error: rec_match: error compiling regexp.\n" +msgstr "internt fel: rec_match: fel vid kompilering av reguljäruttryck.\n" + +#. TRANSLATORS: --help output, csv2rec synopsis. +#. no-wrap +#: utils/csv2rec.c:105 +#, c-format +msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" +msgstr "Användning: csv2rec [FLAGGOR] … [CSV_FIL]\n" + +#. TRANSLATORS: --help output, csv2rec short description. +#. no-wrap +#: utils/csv2rec.c:110 +msgid "Convert csv data into rec data.\n" +msgstr "Konvertera CSV-data till rec-data.\n" + +#. TRANSLATORS: --help output, csv2rec options. +#. no-wrap +#: utils/csv2rec.c:116 +msgid "" +" -t, --type=TYPE type name for the converted records; " +"if this\n" +" parameter is ommited then no type is " +"used.\n" +" -s, --strict be strict parsing the csv file.\n" +" -e, --omit-empty omit empty fields.\n" +msgstr "" +" -t, -type=TYP skriv namn för de konverterade " +"posterna.\n" +" Om denna parameter utelämnas " +"används\n" +" ingen typ.\n" +" -s, -strict var strikt i tolkningen av csv-filen.\n" +" -e, -omit-empty uteslut tomma fält.\n" + +#: utils/csv2rec.c:230 +#, c-format +msgid "invalid field name '%s' in header\n" +msgstr "ogiltigt fältnamn ”%s” i huvudet\n" + +#: utils/csv2rec.c:259 +#, fuzzy, c-format +msgid "" +"%s: %lu: this line contains %lu fields, but %lu header fields were read\n" +msgstr "%s: %d: denna rad innehåller %d fält, men %d huvudfält lästes\n" + +#: utils/csv2rec.c:347 utils/recdel.c:266 utils/recset.c:358 utils/recutl.c:328 +#, c-format +msgid "cannot read file %s\n" +msgstr "kan inte läsa filen %s\n" + +#: utils/csv2rec.c:358 +msgid "failed to initialize csv parser\n" +msgstr "det gick inte att initiera csv-tolken\n" + +#: utils/csv2rec.c:376 +#, c-format +msgid "error while parsing CSV file: %s\n" +msgstr "fel vid tolkning av CSV-fil: %s\n" + +#. TRANSLATORS: --help output, mdb2rec synopsis. +#. no-wrap +#: utils/mdb2rec.c:103 +#, c-format +msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" +msgstr "Användning: mdb2rec [FLAGGOR] … MDB_FIL [TABELL]\n" + +#. TRANSLATORS: --help output, mdb2rec short description. +#. no-wrap +#: utils/mdb2rec.c:108 +msgid "Convert an mdb file into a rec file.\n" +msgstr "Konvertera en mdb-fil till en rec-fil.\n" + +#. TRANSLATORS: --help output, mdb2rec options. +#. no-wrap +#: utils/mdb2rec.c:114 +msgid "" +" -s, --system-tables include system tables.\n" +" -e, --keep-empty-fields don't prune empty fields in the rec\n" +" output.\n" +" -l, --list-tables dump a list of the table names " +"contained\n" +" in the mdb file.\n" +msgstr "" +" -s, --system-tables inkludera systemtabeller.\n" +" -e, --keep-empty-fields beskär aldrig tomma fält i rec-" +"utdata.\n" +" -l, --list-tables skriv ut en lista av tabellnamnen som\n" +" återfinns i mdb-filen.\n" + +#: utils/mdb2rec.c:251 utils/mdb2rec.c:315 +#, c-format +msgid "failed to normalise record type name %s\n" +msgstr "misslyckades att normalisera posttypnamnet %s\n" + +#: utils/mdb2rec.c:259 utils/mdb2rec.c:270 +#, c-format +msgid "failed to normalise field name %s\n" +msgstr "misslyckades att normalisera fältnamnet %s\n" + +#: utils/mdb2rec.c:336 +#, c-format +msgid "failed to normalise the field name %s\n" +msgstr "misslyckades att normalisera fältnamnet %s\n" + +#: utils/mdb2rec.c:443 utils/recins.c:208 utils/recset.c:253 +#, c-format +msgid "invalid field name %s.\n" +msgstr "ogiltigt fältnamn %s.\n" + +#: utils/mdb2rec.c:482 +#, c-format +msgid "could not open file %s\n" +msgstr "det gick inte att öppna filen %s\n" + +#: utils/mdb2rec.c:489 +msgid "file does not appear to be an Access database\n" +msgstr "filen verkar inte vara en Access-databas\n" + +#. TRANSLATORS: --help output, rec2csv synopsis. +#. no-wrap +#: utils/rec2csv.c:86 +#, c-format +msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" +msgstr "Användning: rec2csv [FLAGGOR] … [CSV_FIL]\n" + +#. TRANSLATORS: --help output, rec2csv short description. +#. no-wrap +#: utils/rec2csv.c:91 +msgid "Convert rec data into csv data.\n" +msgstr "Konvertera rec-data till csv-data.\n" + +#. TRANSLATORS: --help output, rec2csv options. +#. no-wrap +#: utils/rec2csv.c:97 +msgid "" +" -d, --delim=char sets the deliminator (default ',')\n" +" -t, --type=TYPE record set to convert to csv; if this " +"parameter\n" +" is omitted then the default record " +"set is used\n" +" -S, --sort=FIELDS sort the output by the specified " +"fields.\n" +msgstr "" +" -d, --delim=tecken sätter avgränsaren (standard ”,”)\n" +" -t, --type=TYP postuppsättning att konvertera till " +"csv;\n" +" om denna parameter utelämnas " +"används\n" +" standardpostuppsättningen\n" +" -S, --sort=FÄLT sortera utdata efter de angivna " +"fälten.\n" + +#: utils/rec2csv.c:142 +msgid "only one list of fields can be specified as a sorting criteria.\n" +msgstr "endast en lista av fält kan anges som ett sorteringskriterium.\n" + +#: utils/rec2csv.c:149 +msgid "invalid field name list in -S.\n" +msgstr "ogiltigt fältnamnslista till -S.\n" + +#: utils/rec2csv.c:155 utils/recsel.c:248 utils/recsel.c:286 +msgid "internal error creating fex.\n" +msgstr "internt fel när fex skapades.\n" + +#. TRANSLATORS: --help output, recdel synopsis. +#. no-wrap +#: utils/recdel.c:89 +#, c-format +msgid "" +"Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [FILE]\n" +msgstr "" +"Användning: recdel [FLAGGOR] … [-t TYP] [-n NUM | -e POSTUTTR | -q STR | -m " +"ANT] [FIL]\n" + +#. TRANSLATORS: --help output, recdel short description. +#. no-wrap +#: utils/recdel.c:94 +msgid "Remove (or comment out) records from a rec file.\n" +msgstr "Ta bort (eller kommentera bort) poster från en rec fil.\n" + +#. TRANSLATORS: --help output, recdel arguments. +#. no-wrap +#: utils/recdel.c:101 +msgid "" +" -c, --comment comment out the matching records " +"instead of\n" +" deleting them.\n" +" --force delete even in potentially dangerous " +"situations,\n" +" and if the deletion is violating " +"record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -c, --comment kommentera ut de matchande posterna\n" +" istället för att radera dem.\n" +" --force radera även i potentiellt farliga\n" +" situationer, och om raderingen " +"bryter\n" +" mot postrestriktionerna.\n" +" --no-external använd inte externa deskriptorer.\n" +" --verbose ge en detaljerad rapport om\n" +" integritetskontrollen hittar fel.\n" + +#. TRANSLATORS: --help output, notes on recdel. +#. no-wrap +#. TRANSLATORS: --help output, notes on recfix. +#. no-wrap +#. TRANSLATORS: --help output, notes on recins. +#. no-wrap +#: utils/recdel.c:119 utils/recfix.c:167 utils/recins.c:149 +msgid "" +"If no FILE is specified then the command acts like a filter, getting\n" +"the data from standard input and writing the result to standard output.\n" +msgstr "" +"Om ingen FIL anges fungerar kommandot som ett filter, som hämtar\n" +"data från standard in och skriver resultatet till standard ut.\n" + +#: utils/recdel.c:136 +#, c-format +msgid "no records of type %s found.\n" +msgstr "inga poster av typ %s hittades.\n" + +#: utils/recdel.c:227 +#, c-format +msgid "ignoring a request to delete all records of type %s.\n" +msgstr "ignorera en begäran om att ta bort alla poster av typen %s.\n" + +#: utils/recdel.c:229 +msgid "use --force if you really want to proceed, or use either -n or -e.\n" +msgstr "" +"använd --force om du verkligen vill fortsätta, eller använda antingen -n " +"eller -e.\n" + +#: utils/recdel.c:237 +msgid "invalid selection expression.\n" +msgstr "ogiltigt urvalsuttryck.\n" + +#: utils/recdel.c:276 utils/recfix.c:407 utils/recins.c:410 utils/recset.c:365 +#, c-format +msgid "file %s is not writable.\n" +msgstr "filen %s är inte skrivbar.\n" + +#. TRANSLATORS: --help output, recfix synopsis. +#. no-wrap +#: utils/recfix.c:117 +#, c-format +msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" +msgstr "Användning: recfix [FLAGGA]… [ÅTGÄRD] [OP_FLAGGA]… [FIL]\n" + +#. TRANSLATORS: --help output, recfix short description. +#. no-wrap +#: utils/recfix.c:122 +msgid "Check and fix rec files.\n" +msgstr "Kontrollera och åtgärda rec-filer.\n" + +#. TRANSLATORS: --help output, recfix global arguments. +#. no-wrap +#: utils/recfix.c:129 +msgid "" +" --no-external don't use external descriptors.\n" +" --force force the requested operation.\n" +msgstr "" +" --no-external använd inte externa deskriptorer.\n" +" --force tvinga fram den begärda åtgärden.\n" + +#. TRANSLATORS: --help output, recfix operations. +#. no-wrap +#: utils/recfix.c:139 +msgid "" +"Operations:\n" +" --check check integrity of the specified " +"file. Default.\n" +" --sort sort the records in the specified " +"file.\n" +" --auto insert auto-generated fields in " +"records missing them.\n" +msgstr "" +"Åtgärder:\n" +" --check kontrollera integriteten på den " +"angivna\n" +" filen. Standardfall.\n" +" --sort sortera posterna i den angivna filen.\n" +" --auto lägg in automatgenererade fält i " +"poster\n" +" som saknar dem.\n" + +#. TRANSLATORS: --help output, recfix operations related with encryption. +#. no-wrap +#: utils/recfix.c:149 +msgid "" +" --encrypt encrypt confidential fields in the " +"specified file.\n" +" --decrypt decrypt confidential fields in the " +"specified file.\n" +msgstr "" +" --encrypt kryptera konfidentiella fält i den\n" +" angivna filen.\n" +" --decrypt dekryptera konfidentiella fält i den\n" +" angivna filen.\n" + +#. TRANSLATORS: --help output, recfix encryption and decryption +#. options. +#. no-wrap +#: utils/recfix.c:158 +msgid "" +"De/Encryption options:\n" +" -s, --password=PASSWORD encrypt/decrypt with this password.\n" +msgstr "" +"(De)krypteringsflaggor:\n" +" -s, --password=LÖSENORD kryptera/dekryptera med detta " +"lösenord.\n" + +#: utils/recfix.c:208 +msgid "--password|-s must be used as an operation argument.\n" +msgstr "--password|-s måste användas som ett åtgärdsargument.\n" + +#: utils/recfix.c:214 +msgid "the specified operation does not require a password.\n" +msgstr "den angivna åtgärden behöver inte något lösenord.\n" + +#: utils/recfix.c:219 +msgid "please specify just one password.\n" +msgstr "ange bara ett lösenord.\n" + +#: utils/recfix.c:230 utils/recfix.c:240 utils/recfix.c:250 utils/recfix.c:261 +#: utils/recfix.c:271 +msgid "please specify just one operation.\n" +msgstr "ange bara en åtgärd.\n" + +#: utils/recfix.c:463 +msgid "the database contains already encrypted fields\n" +msgstr "databasen innehåller redan krypterade fält\n" + +#: utils/recfix.c:464 +msgid "please use --force or --decrypt\n" +msgstr "använd --force eller --decrypt\n" + +#: utils/recfix.c:574 +msgid "unknown operation in recfix: please report this as a bug.\n" +msgstr "okänd åtgärd i recfix: rapportera gärna detta som ett fel.\n" + +#. TRANSLATORS: --help output, recfmt synopsis. +#. no-wrap +#: utils/recfmt.c:78 +#, c-format +msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" +msgstr "Användning: recfmt [FLAGGA]… [MALL]\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:83 +msgid "Apply a template to records read from standard input.\n" +msgstr "Använda en mall för poster lästa från standard in.\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:89 +msgid "" +" -f, --file=FILENAME read the template to apply from a " +"file.\n" +msgstr " -f, -file=FILNAMN läs mallen att använda från en fil.\n" + +#: utils/recfmt.c:123 +#, c-format +msgid "can't open file %s for reading.\n" +msgstr "kan inte öppna filen %s för läsning.\n" + +#: utils/recfmt.c:141 +msgid "don't specify a template in the command line and -f at the same time.\n" +msgstr "ange inte en mall på kommandoraden och -f samtidigt.\n" + +#: utils/recfmt.c:164 +msgid "invalid expression in a template slot.\n" +msgstr "ogiltigt uttryck på en mallplats.\n" + +#: utils/recfmt.c:170 +msgid "error evaluating expression in a template slot.\n" +msgstr "fel vid beräkning av uttryck på en mallplats.\n" + +#: utils/recfmt.c:204 +msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" +msgstr "" +"recfmt_apply_template: fel vid kompilering av reguljäruttryck. Vänligen " +"rapportera det här.\n" + +#. TRANSLATORS: --help output, recinf synopsis. +#. no-wrap +#: utils/recinf.c:84 +#, c-format +msgid "Usage: recinf [OPTION]... [FILE]...\n" +msgstr "Användning: recinf [FLAGGA]… [FIL]…\n" + +#. TRANSLATORS: --help output, recinf short description. +#. no-wrap +#: utils/recinf.c:89 +msgid "Print information about the types of records stored in the input.\n" +msgstr "" +"Skriv ut information om typerna på poster som finns lagrade i indata.\n" + +#. TRANSLATORS: --help output, recinf arguments. +#. no-wrap +#: utils/recinf.c:96 +msgid "" +" -t, --type=RECORD_TYPE print information on the records having " +"the\n" +" specified type.\n" +" -d, --descriptor include the full record descriptors.\n" +" -n, --names-only output just the names of the record files\n" +" found in the input.\n" +msgstr "" +" -t, --type=POST_TYP skriv ut information om de poster som har\n" +" angiven typ.\n" +" -d, -descriptor inkludera fullständiga " +"postendeskriptorer.\n" +" -n, -names-only skriv bara ut namnen på postfiler som " +"fanns\n" +" i indata.\n" + +#. TRANSLATORS: --help output, recinf special options. +#. no-wrap +#: utils/recinf.c:109 +msgid "" +"Special options:\n" +" -S, --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Specialflaggor:\n" +" -S, --print-sexps skriv ut data i sexps- istället för\n" +" rec-format.\n" + +#: utils/recinf.c:263 +#, c-format +msgid "error: cannot read file %s\n" +msgstr "fel: det går inte läsa filen %s\n" + +#. TRANSLATORS: --help output, recins synopsis. +#. no-wrap +#: utils/recins.c:111 +#, c-format +msgid "" +"Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" +msgstr "" +"Användning: recins [FLAGGA]… [-t TYP] [-n NUM | -e POSTUTTR | -q STR | -m " +"ANT] [(-f NAMN -v STR) | -r POSTDATA]… [FIL]\n" + +#. TRANSLATORS: --help output, recins short description. +#. no-wrap +#: utils/recins.c:116 +msgid "Insert new records in a rec database.\n" +msgstr "Infoga nya poster i en rec-databas.\n" + +#. TRANSLATORS: --help output, recins arguments. +#. no-wrap +#: utils/recins.c:122 +msgid "" +" -f, --field=STR field name; should be followed by a -" +"v.\n" +" -v, --value=STR field value; should be preceded by an -" +"f.\n" +" -r, --record=STR record that will be inserted in the " +"file.\n" +" --force insert the record even if it is " +"violating\n" +" record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --no-auto don't insert auto generated fields.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -f, --field=STR fältnamn; skall följas av ett -v.\n" +" -v, --value=STR fältvärde; skall föregås av ett -f.\n" +" -r, --record=STR post som kommer skjutas in i filen.\n" +" --force skjut in posten även om det bryter " +"mot\n" +" postrestriktionerna.\n" +" --no-external använd inte externa deskriptorer.\n" +" --no-auto skjut inte in automatiskt genererade " +"fält.\n" +" --verbose få en detaljerad rapport om\n" +" integritetskontrollen hittar fel.\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recins.c:136 +msgid "" +" -s, --password=STR encrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=STR kryptera konfidentiella fält med det " +"angivna lösenordet.\n" + +#: utils/recins.c:195 +msgid "a -f should be followed by a -v\n" +msgstr "ett -f skall följas av ett -v\n" + +#: utils/recins.c:219 +msgid "a -v should be preceded by a -f\n" +msgstr "ett -v skall föregås av ett -f\n" + +#: utils/recins.c:244 utils/recsel.c:223 +msgid "more than one password was specified\n" +msgstr "mer än ett lösenord angavs\n" + +#: utils/recins.c:258 +msgid "error while parsing the record provided by -r\n" +msgstr "fel vid tolkning av det posten som gavs via -r\n" + +#: utils/recins.c:293 +#, c-format +msgid "please provide a value for the field %s\n" +msgstr "ange ett värde för fältet %s\n" + +#. TRANSLATORS: --help output, recsel synopsis. +#. no-wrap +#: utils/recsel.c:118 +#, c-format +msgid "" +"Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " +"| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" +msgstr "" +"Användning: recsel [FLAGGA]… [-t TYP] [-j FÄLT] [-n INDEX |-e POSTUTTR | -q " +"STR | -m ANT] [-c | (-p|-P) FÄLTUTTR] [FIL]…\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:123 +msgid "Select and print rec data.\n" +msgstr "Välj och skriv ut rec-data.\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:129 +msgid "" +" -d, --include-descriptors print record descriptors along with " +"the matched\n" +" records.\n" +" -C, --collapse do not section the result in records " +"with newlines.\n" +" -S, --sort=FIELD,... sort the output by the specified " +"fields.\n" +" -G, --group-by=FIELD,... group records by the specified " +"fields.\n" +" -U, --uniq remove duplicated fields in the output " +"records.\n" +msgstr "" +" -d, --include-descriptors skriv ut postdeskriptorer tillsammans " +"med\n" +" matchade poster.\n" +" -C, --collapse dela inte upp resultetat i poster med\n" +" nyrader.\n" +" -S, --sort=FÄLT sortera utdata efter det angivna " +"fältet.\n" +" -G, --group-by=FÄLT,… grupper poster efter de angivna " +"fälten.\n" +" -U, --uniq ta bort dubblerade fält i utposter.\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recsel.c:141 +msgid "" +" -s, --password=STR decrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=STR dekryptera konfidentiella fält med det " +"angivna lösenordet.\n" + +#: utils/recsel.c:150 +msgid "" +" -j, --join=FIELD perform an inner join using the " +"specified field.\n" +msgstr "" +" -j, --join=FÄLT utför en inre join med det angivna " +"fältet.\n" + +#. TRANSLATORS: --help output, recsel output options. +#. no-wrap +#: utils/recsel.c:157 +msgid "" +"Output options:\n" +" -p, --print=FIELDS comma-separated list of fields to " +"print for each\n" +" matching record.\n" +" -P, --print-values=FIELDS as -p, but print only the values of " +"the selected\n" +" fields.\n" +" -R, --print-row=FIELDS as -P, but separate the values with " +"spaces instead\n" +" of newlines.\n" +" -c, --count print a count of the matching records " +"instead of\n" +" the records themselves.\n" +msgstr "" +"Utskriftsflaggor:\n" +" -p, --print=FÄLT kommaseparerad lista av fält att " +"skriva\n" +" ut för varje matchad post.\n" +" -P, --print-values=FÄLT samma som -p, men skriv endast värdena " +"i\n" +" de valda fälten.\n" +" -R, --print-row=FÄLT samma som -P, men dela av värdena med\n" +" blanktecken istället för nyrader.\n" +" -c, --count skriv antalet matchade poster " +"istället\n" +" istället för själva posterna.\n" + +#. TRANSLATORS: --help output, recsel special options. +#. no-wrap +#: utils/recsel.c:171 +msgid "" +"Special options:\n" +" --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Specialflaggor:\n" +" --print-sexps skriv ut data i sexps- istället för\n" +" rec-format.\n" + +#: utils/recsel.c:235 +msgid "only one field list can be specified as a sorting criteria.\n" +msgstr "endast en fältlista kan anges som ett sorteringskriterium.\n" + +#: utils/recsel.c:242 +msgid "invalid field names in -S.\n" +msgstr "ogiltiga fältnamn till -S.\n" + +#: utils/recsel.c:258 +msgid "only one field can be specified as join criteria.\n" +msgstr "endast ett fält kan anges som ett join-kriterium.\n" + +#: utils/recsel.c:263 +msgid "please specify a correct field name to -j|--join.\n" +msgstr "ange ett korrekt fältnamn till -j|--join.\n" + +#: utils/recsel.c:274 +msgid "only one field list can be specified as a grouping criteria.\n" +msgstr "endast en fältlista kan anges som ett grupperingskriterium.\n" + +#: utils/recsel.c:280 +msgid "invalid field names in -G.\n" +msgstr "ogiltiga fältnamn till -G.\n" + +#: utils/recsel.c:300 +msgid "cannot specify -[pPR] and also -c.\n" +msgstr "det går inte att ange -[pPR] samtidigt som -c.\n" + +#: utils/recsel.c:317 +#, c-format +msgid "invalid list of fields in -%c\n" +msgstr "ogiltig fältlista till -%c\n" + +#: utils/recsel.c:325 +msgid "internal error creating the field expression.\n" +msgstr "internt fel när fältuttrycket skapades.\n" + +#: utils/recsel.c:340 +#, c-format +msgid "invalid aggregate function '%s'\n" +msgstr "felaktig aggregatfunktion ”%s”\n" + +#: utils/recsel.c:358 +msgid "cannot specify -c and also -p.\n" +msgstr "det går inte att ange -c samtidigt som -p.\n" + +#: utils/recsel.c:377 +msgid "joins can only be used when a named record set is selected.\n" +msgstr "join kan endast göras när en namngiven postmängd är vald.\n" + +#: utils/recsel.c:439 +msgid "several record types found. Please use -t to specify one.\n" +msgstr "flera posttyper hittatdes. Använd -t för att ange en.\n" + +#. TRANSLATORS: --help output, recset synopsis. +#. no-wrap +#: utils/recset.c:113 +#, c-format +msgid "Usage: recset [OPTION]... [FILE]...\n" +msgstr "Användning: recset [FLAGGA]… [FIL]…\n" + +#. TRANSLATORS: --help output, recset short description. +#. no-wrap +#: utils/recset.c:118 +msgid "Alter or delete fields in records.\n" +msgstr "Ändra eller ta bort fält i poster.\n" + +#. TRANSLATORS: --help output, recset options. +#. no-wrap +#: utils/recset.c:124 +msgid "" +" --no-external don't use external descriptors.\n" +" --force alter the records even if violating " +"record\n" +" restrictions.\n" +msgstr "" +" --no-external använd inte externa deskriptorer.\n" +" --force ändra posterna även om det bryter mot\n" +" postbegränsningarna.\n" + +#. TRANSLATORS: --help output, recset field selection options. +#. no-wrap +#: utils/recset.c:137 +msgid "" +"Field selection options:\n" +" -f, --fields=FIELDS comma-separated list of field names " +"with optional\n" +" subscripts.\n" +msgstr "" +"Flaggor för fältval:\n" +" -f, --fields=FÄLT kommaseparerad lista med fältnamn och\n" +" eventuella index.\n" + +#. TRANSLATORS: --help output, recset actions. +#. no-wrap +#: utils/recset.c:145 +msgid "" +"Actions:\n" +" -s, --set=VALUE change the value of the selected " +"fields.\n" +" -a, --add=VALUE add the selected fields with the given " +"value.\n" +" -S, --set-add=VALUE change the value of the selected " +"fields. If they don't\n" +" exist then add a new field with that " +"value.\n" +" -r, --rename=NAME rename the selected fields to a given " +"name. If an entire\n" +" record set is selected then the " +"field is renamed in the\n" +" record descriptor as well.\n" +" -d, --delete delete the selected fields.\n" +" -c, --comment comment out the selected fields.\n" +msgstr "" +"Åtgärder:\n" +" -s, --set=VÄRDE ändra värdet på de valda fälten.\n" +" -a, --add=VÄRDE lägg till de valda fälten med det " +"angivna\n" +" värdet.\n" +" -S, --set-add=VÄRDE ändra värdet på de valda fälten. Om " +"de\n" +" inte finns, lägg då till ett nytt " +"fält\n" +" med det värdet.\n" +" -r, --rename=NAMN byt namn på de valda fälten till ett\n" +" angivet namn. Om en hel postmängd " +"är\n" +" vald byts namnet även i " +"postdeskriptorn.\n" +" -d, --delete radera de valda fälten.\n" +" -c, --comment kommentera bort de valda fälten.\n" + +#: utils/recset.c:168 +msgid "please specify some field with -f.\n" +msgstr "ange något fält med -f.\n" + +#: utils/recset.c:173 +msgid "please specify just one action.\n" +msgstr "ange bara en åtgärd.\n" + +#: utils/recset.c:213 +msgid "invalid field expression in -f.\n" +msgstr "ogiltigt fältuttryck i -f.\n" + +#: utils/recset.c:221 +msgid "creating the field expression.\n" +msgstr "när fältuttryck skapades.\n" + +#: utils/recset.c:243 +msgid "" +"the rename operation requires just one field with an optional subscript.\n" +msgstr "åtgärden namnbyte tar endast ett fält med en eventuellt index.\n" + +#. TRANSLATORS: --help output 5+ (reports) +#. TRANSLATORS: the placeholder indicates the bug-reporting address +#. for this application. Please add _another line_ with the +#. address for translation bugs. +#. no-wrap +#: utils/recutl.c:122 +#, c-format +msgid "Report bugs to: %s\n" +msgstr "" +"Rapportera fel till: %s\n" +"Rapportera kommentarer på översättningen till <tp-sv@listor.tp-sv.se>.\n" + +#: utils/recutl.c:131 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" +msgstr "%s hemsida: <http://www.gnu.org/software/recutils/>\n" + +#: utils/recutl.c:134 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Allmän hjälp med att använda GNU-program: <http://www.gnu.org/gethelp/>\n" + +#. TRANSLATORS: --help output, common arguments. +#. no-wrap +#: utils/recutl.c:143 +msgid "" +" --help print a help message and exit.\n" +" --version show version and exit.\n" +msgstr "" +" --help visa ett hjälpmeddelande och avsluta.\n" +" --version visa versionsinformation och avsluta.\n" + +#. TRANSLATORS: --help output, record selection arguments +#. no-wrap +#: utils/recutl.c:154 +msgid "" +"Record selection options:\n" +" -i, --case-insensitive make strings case-insensitive in " +"selection\n" +" expressions.\n" +" -t, --type=TYPE operate on records of the specified " +"type only.\n" +" -e, --expression=RECORD_EXPR selection expression.\n" +" -q, --quick=STR select records with fields containing " +"a string.\n" +" -n, --number=NUM,... select specific records by position, " +"with ranges.\n" +" -m, --random=NUM select a given number of random " +"records.\n" +msgstr "" +"Flaggor för postval:\n" +" -i, --case-insensitive gör strängar skiftlägseokänsliga i\n" +" urvaluttryck.\n" +" -t, --type=TYP arbeta enbart på poster med angiven " +"typ.\n" +" -e, --expression=POSTUTTR urvalsuttryck.\n" +" -q, --quick=STR välj poster med fält som innehåller " +"en\n" +" sträng.\n" +" -n, --number=NUM,… välj vissa poster efter position, med\n" +" intervall.\n" +" -R, --random=ANT välj ett angivet antal med " +"slumpposter.\n" + +#: utils/recutl.c:179 +#, c-format +msgid "" +"Copyright (C) %s Jose E. Marchesi.\n" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +msgstr "" +"Copyright © %s Jose E. Marchesi.\n" +"Licens GPLv3+: GNU GPL version 3 eller senare <http://gnu.org/licenses/gpl." +"html>.\n" +"Detta är fri programvara: du har rätt att ändra och vidaredistribuera den.\n" +"Det finns INGEN GARANTI, så långt som lagen tillåter.\n" + +#: utils/recutl.c:185 +msgid "" +"\n" +"Written by Jose E. Marchesi." +msgstr "" +"\n" +"Skrivet av Jose E. Marchesi." + +#: utils/recutl.c:197 utils/recutl.c:217 +msgid ": error: " +msgstr ": fel: " + +#: utils/recutl.c:229 +msgid ": warning: " +msgstr ": varning: " + +#: utils/recutl.c:254 +#, c-format +msgid "duplicated record set '%s' from %s.\n" +msgstr "duplicerad postmängd ”%s” från %s.\n" + +#: utils/recutl.c:417 +msgid "cannot create a unique name.\n" +msgstr "det går inte att skapa ett unikt namn.\n" + +#: utils/recutl.c:438 +#, c-format +msgid "renaming file %s to %s\n" +msgstr "döper om filen %s till %s\n" + +#: utils/recutl.c:482 +msgid "operation aborted due to integrity failures.\n" +msgstr "åtgärden avbruten på grund av integritetfel.\n" + +#: utils/recutl.c:483 +msgid "use --verbose to get a detailed report.\n" +msgstr "använd --verbose för att få en detaljerad rapport.\n" + +#: utils/recutl.c:490 +msgid "use --force to skip the integrity check.\n" +msgstr "använd --force för att hoppa över integritetskontrollen.\n" + +#: utils/recutl.c:551 +msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" +msgstr "" +"internt fel: recutl_index_list_parse: fel vid kompilering av " +"reguljäruttryck.\n" + +#: utils/recutl.c:626 +msgid "Password: " +msgstr "Lösenord: " + +#: utils/recutl.c:632 +msgid "Password again: " +msgstr "Lösenord igen: " + +#: utils/recutl.c:637 +msgid "the provided passwords don't match.\n" +msgstr "de givna lösenorden stämmer inte överens.\n" + +#: utils/recutl.h:97 utils/recutl.h:186 utils/recutl.h:190 +#, fuzzy +msgid "cannot specify -e and also -n\n" +msgstr "det går inte att ange -c samtidigt som -p.\n" + +#: utils/recutl.h:102 +#, fuzzy +msgid "cannot specify -e and also -q\n" +msgstr "det går inte att ange -c samtidigt som -p.\n" + +#: utils/recutl.h:113 +#, fuzzy +msgid "invalid selection expression\n" +msgstr "ogiltigt urvalsuttryck.\n" + +#: utils/recutl.h:125 +#, fuzzy +msgid "cannot specify -n and also -e\n" +msgstr "det går inte att ange -c samtidigt som -p.\n" + +#: utils/recutl.h:130 +#, fuzzy +msgid "cannot specify -n and also -q\n" +msgstr "det går inte att ange -c samtidigt som -p.\n" + +#: utils/recutl.h:140 +#, fuzzy +msgid "invalid list of indexes in -n\n" +msgstr "ogiltig fältlista till -%c\n" + +#: utils/recutl.h:150 +#, fuzzy +msgid "cannot specify -m and also -e\n" +msgstr "det går inte att ange -c samtidigt som -p.\n" + +#: utils/recutl.h:155 +#, fuzzy +msgid "cannot specify -m and also -q\n" +msgstr "det går inte att ange -c samtidigt som -p.\n" + +#: utils/recutl.h:160 +#, fuzzy +msgid "cannot specify -m and also -n\n" +msgstr "det går inte att ange -c samtidigt som -p.\n" + +#~ msgid "%s: option '--%s' doesn't allow an argument\n" +#~ msgstr "%s: flaggan ”--%s” tar inget argument\n" + +#~ msgid "%s: unrecognized option '--%s'\n" +#~ msgstr "%s: okänd flagga ”--%s”\n" + +#~ msgid "%s: option '-W %s' doesn't allow an argument\n" +#~ msgstr "%s: flaggan ”-W %s” tar inget argument\n" + +#~ msgid "%s: option '-W %s' requires an argument\n" +#~ msgstr "%s: flaggan ”-W %s” kräver ett argument\n" diff --git a/devspec.en_US/project/recutils/po/uk.gmo b/devspec.en_US/project/recutils/po/uk.gmo new file mode 100755 index 0000000000000000000000000000000000000000..739ecf52927d404f41ecc2e76c548b36d7e21247 GIT binary patch literal 45597 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 $nqNpktZrf@J!!+<M@-x7Oxk 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 KbtqQp)%pJy95(0x literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/po/uk.po b/devspec.en_US/project/recutils/po/uk.po new file mode 100755 index 0000000..fda2898 --- /dev/null +++ b/devspec.en_US/project/recutils/po/uk.po @@ -0,0 +1,2007 @@ +# Translation of recutils to Ukrainian +# Copyright (C) 2011 Free Software Foundation, Inc. +# This file is distributed under the same license as the recutils package. +# +# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012, 2013, 2014. +msgid "" +msgstr "" +"Project-Id-Version: GNU recutils 1.6.90\n" +"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" +"POT-Creation-Date: 2019-01-03 10:32+0100\n" +"PO-Revision-Date: 2014-03-20 08:08+0200\n" +"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" +"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"X-Generator: Lokalize 1.5\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: lib/closeout.c:122 +msgid "write error" +msgstr "помилка запису" + +#: lib/copy-acl.c:54 +#, c-format +msgid "preserving permissions for %s" +msgstr "" + +#: lib/error.c:195 +msgid "Unknown system error" +msgstr "Невідома системна помилка" + +#: lib/execute.c:185 lib/execute.c:258 lib/wait-process.c:282 +#: lib/wait-process.c:356 +#, c-format +msgid "%s subprocess failed" +msgstr "Помилка підпроцесу %s" + +#: lib/getopt.c:278 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous\n" +msgstr "%s: параметр «-W %s» не є однозначним\n" + +#: lib/getopt.c:284 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous; possibilities:" +msgstr "%s: неоднозначний параметр «%s»; можливі варіанти:" + +#: lib/getopt.c:319 +#, fuzzy, c-format +msgid "%s: unrecognized option '%s%s'\n" +msgstr "%s: невідомий параметр «%c%s»\n" + +#: lib/getopt.c:345 +#, fuzzy, c-format +msgid "%s: option '%s%s' doesn't allow an argument\n" +msgstr "%s: додавання аргументів до параметра «%c%s» не передбачено\n" + +#: lib/getopt.c:360 +#, fuzzy, c-format +msgid "%s: option '%s%s' requires an argument\n" +msgstr "%s: до параметра «--%s» слід додати аргумент\n" + +#: lib/getopt.c:621 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: некоректний параметр — «%c»\n" + +#: lib/getopt.c:636 lib/getopt.c:682 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: до параметра слід додати аргумент — «%c»\n" + +#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "пам’ять вичерпано" + +#: parse-datetime.y:440 parse-datetime.y:540 +#, c-format +msgid "parsed %s part: " +msgstr "" + +#: parse-datetime.y:455 +#, c-format +msgid "year: %04<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:483 +#, c-format +msgid "%s (day ordinal=%<PRIdMAX> number=%d)" +msgstr "" + +#: parse-datetime.y:514 +#, c-format +msgid "number of seconds: %<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:547 +msgid "today/this/now\n" +msgstr "" + +#: parse-datetime.y:612 +msgid "number of seconds" +msgstr "" + +#: parse-datetime.y:625 +msgid "datetime" +msgstr "" + +#: parse-datetime.y:630 +msgid "time" +msgstr "" + +#: parse-datetime.y:635 +msgid "local_zone" +msgstr "" + +#: parse-datetime.y:640 +msgid "zone" +msgstr "" + +#: parse-datetime.y:645 +msgid "date" +msgstr "" + +#: parse-datetime.y:650 +msgid "day" +msgstr "" + +#: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 +msgid "relative" +msgstr "" + +#: parse-datetime.y:658 +msgid "number" +msgstr "" + +#: parse-datetime.y:662 +msgid "hybrid" +msgstr "" + +#: parse-datetime.y:820 +#, c-format +msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" +msgstr "" + +#: parse-datetime.y:832 +#, c-format +msgid "" +"warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" +msgstr "" + +#: parse-datetime.y:1276 +#, c-format +msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1286 +#, c-format +msgid "error: out-of-range year %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1524 +#, fuzzy, c-format +msgid "error: unknown word '%s'\n" +msgstr "помилка: не вдалося виконати читання даних з файла %s\n" + +#: parse-datetime.y:1673 +#, fuzzy +msgid "error: invalid date/time value:\n" +msgstr "некоректне значення нумератора." + +#: parse-datetime.y:1674 +#, c-format +msgid " user provided time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1676 +#, c-format +msgid " normalized time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1699 +msgid " possible reasons:\n" +msgstr "" + +#: parse-datetime.y:1701 +msgid " non-existing due to daylight-saving time;\n" +msgstr "" + +#: parse-datetime.y:1703 +msgid " invalid day/month combination;\n" +msgstr "" + +#: parse-datetime.y:1704 +msgid " numeric values overflow;\n" +msgstr "" + +#: parse-datetime.y:1705 +msgid "incorrect timezone" +msgstr "" + +#: parse-datetime.y:1706 +msgid "missing timezone" +msgstr "" + +#: parse-datetime.y:1826 +msgid "error: initial year out of range\n" +msgstr "" + +#: parse-datetime.y:1923 +#, fuzzy +msgid "error: parsing failed\n" +msgstr "помилка під час обробки файла CSV: %s\n" + +#: parse-datetime.y:1924 +#, fuzzy, c-format +msgid "error: parsing failed, stopped at '%s'\n" +msgstr "помилка під час обробки файла CSV: %s\n" + +#: parse-datetime.y:1934 +msgid "input timezone: " +msgstr "" + +#: parse-datetime.y:1937 +#, c-format +msgid "'@timespec' - always UTC" +msgstr "" + +#: parse-datetime.y:1939 +#, c-format +msgid "parsed date/time string" +msgstr "" + +#: parse-datetime.y:1943 +#, c-format +msgid "TZ=\"%s\" in date string" +msgstr "" + +#: parse-datetime.y:1947 +#, c-format +msgid "TZ=\"UTC0\" environment value or -u" +msgstr "" + +#: parse-datetime.y:1950 +#, c-format +msgid "TZ=\"%s\" environment value" +msgstr "" + +#: parse-datetime.y:1953 +#, c-format +msgid "system default" +msgstr "" + +#: parse-datetime.y:1995 +msgid "error: year, month, or day overflow\n" +msgstr "" + +#: parse-datetime.y:2006 +#, fuzzy, c-format +msgid "error: invalid hour %<PRIdMAX>%s\n" +msgstr "%s:%s: помилка: некоректний тип запису %s\n" + +#: parse-datetime.y:2014 +#, c-format +msgid "using specified time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2015 +#, c-format +msgid "using current time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2069 +#, c-format +msgid "error: tzalloc (\"%s\") failed\n" +msgstr "" + +#: parse-datetime.y:2114 +#, c-format +msgid "" +"error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " +"date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2125 +#, c-format +msgid "new start date: '%s' is '%s'\n" +msgstr "" + +#: parse-datetime.y:2134 +#, c-format +msgid "using current date as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2138 +#, c-format +msgid "warning: day (%s) ignored when explicit dates are given\n" +msgstr "" + +#: parse-datetime.y:2142 +#, c-format +msgid "starting date/time: '%s'\n" +msgstr "" + +#: parse-datetime.y:2152 +msgid "" +"warning: when adding relative months/years, it is recommended to specify the " +"15th of the months\n" +msgstr "" + +#: parse-datetime.y:2157 +msgid "warning: when adding relative days, it is recommended to specify noon\n" +msgstr "" + +#: parse-datetime.y:2167 +#, fuzzy, c-format +msgid "error: %s:%d\n" +msgstr ": помилка: " + +#: parse-datetime.y:2181 +#, c-format +msgid "error: adding relative date resulted in an invalid date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2190 +#, c-format +msgid "" +"after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " +"days),\n" +msgstr "" + +#: parse-datetime.y:2194 +#, c-format +msgid " new date/time = '%s'\n" +msgstr "" + +#: parse-datetime.y:2213 +msgid "warning: daylight saving time changed after date adjustment\n" +msgstr "" + +#: parse-datetime.y:2232 +msgid "warning: month/year adjustment resulted in shifted dates:\n" +msgstr "" + +#: parse-datetime.y:2235 +#, c-format +msgid " adjusted Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2237 +#, c-format +msgid " normalized Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2265 +#, c-format +msgid "error: timezone %d caused time_t overflow\n" +msgstr "" + +#: parse-datetime.y:2275 +#, c-format +msgid "'%s' = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2303 +msgid "error: adding relative time caused an overflow\n" +msgstr "" + +#: parse-datetime.y:2314 +#, c-format +msgid "" +"after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " +"seconds, %+d ns),\n" +msgstr "" + +#: parse-datetime.y:2319 +#, c-format +msgid " new time = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2335 +msgid "warning: daylight saving time changed after time adjustment\n" +msgstr "" + +#: parse-datetime.y:2345 +msgid "timezone: system default\n" +msgstr "" + +#: parse-datetime.y:2347 +msgid "timezone: Universal Time\n" +msgstr "" + +#: parse-datetime.y:2349 +#, c-format +msgid "timezone: TZ=\"%s\" environment value\n" +msgstr "" + +#: parse-datetime.y:2353 +#, c-format +msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" +msgstr "" + +#: parse-datetime.y:2359 +#, c-format +msgid "final: %s (UTC)\n" +msgstr "" + +#: parse-datetime.y:2374 +#, c-format +msgid "final: %s (UTC%s)\n" +msgstr "" + +#: parse-datetime.y:2378 +#, c-format +msgid "final: %s (unknown time zone offset)\n" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". For example, a French Unicode local should translate +#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), respectively. +#. +#. If the catalog has no translation, we will try to +#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and +#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the +#. current locale is not Unicode, locale_quoting_style +#. will quote 'like this', and clocale_quoting_style will +#. quote "like this". You should always include translations +#. for "`" and "'" even if U+2018 and U+2019 are appropriate +#. for your locale. +#. +#. If you don't know what to put here, please see +#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:362 +msgid "`" +msgstr "«" + +#: lib/quotearg.c:363 +msgid "'" +msgstr "»" + +#: lib/regcomp.c:135 +msgid "Success" +msgstr "Успіх" + +#: lib/regcomp.c:138 +msgid "No match" +msgstr "Не знайдено" + +#: lib/regcomp.c:141 +msgid "Invalid regular expression" +msgstr "Помилка у формальному виразі" + +#: lib/regcomp.c:144 +msgid "Invalid collation character" +msgstr "Некоректний символ порівняння" + +#: lib/regcomp.c:147 +msgid "Invalid character class name" +msgstr "Некоректна назва класу символів" + +#: lib/regcomp.c:150 +msgid "Trailing backslash" +msgstr "Кінцевий символ похилої риски" + +#: lib/regcomp.c:153 +msgid "Invalid back reference" +msgstr "Некоректне зворотне посилання" + +#: lib/regcomp.c:156 +#, fuzzy +msgid "Unmatched [, [^, [:, [., or [=" +msgstr "Неврівноважена послідовність [ або [^" + +#: lib/regcomp.c:159 +msgid "Unmatched ( or \\(" +msgstr "Неврівноважена послідовність ( або \\(" + +#: lib/regcomp.c:162 +msgid "Unmatched \\{" +msgstr "Неврівноважена послідовність \\{" + +#: lib/regcomp.c:165 +msgid "Invalid content of \\{\\}" +msgstr "Некоректний вміст \\{\\}" + +#: lib/regcomp.c:168 +msgid "Invalid range end" +msgstr "Некоректне завершення діапазону" + +#: lib/regcomp.c:171 +msgid "Memory exhausted" +msgstr "Пам’ять вичерпано" + +#: lib/regcomp.c:174 +msgid "Invalid preceding regular expression" +msgstr "Помилка у попередньому формальному виразі" + +#: lib/regcomp.c:177 +msgid "Premature end of regular expression" +msgstr "Неочікуване завершення формального виразу" + +#: lib/regcomp.c:180 +msgid "Regular expression too big" +msgstr "Занадто об’ємний формальний вираз" + +#: lib/regcomp.c:183 +msgid "Unmatched ) or \\)" +msgstr "Неврівноважена послідовність ) або \\)" + +#: lib/regcomp.c:676 +msgid "No previous regular expression" +msgstr "Не виявлено попереднього формального виразу" + +#: lib/set-acl.c:46 +#, c-format +msgid "setting permissions for %s" +msgstr "" + +#: lib/version-etc.c:73 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:76 +#, c-format +msgid "Packaged by %s\n" +msgstr "" + +#. TRANSLATORS: Translate "(C)" to the copyright symbol +#. (C-in-a-circle), if this symbol is available in the user's +#. locale. Otherwise, do not translate "(C)"; leave it as-is. +#: lib/version-etc.c:83 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:85 +#, fuzzy +msgid "" +"\n" +"License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +"\n" +msgstr "" +"Авторські права належать Jose E. Marchesi, %s.\n" +"Умови ліцензування викладено у GPLv3+: GNU GPL версії 3 або новішій, <http://" +"gnu.org/licenses/gpl.html>\n" +"Це вільне програмне забезпечення: ви можете вільно змінювати і поширювати " +"його.\n" +"Вам не надається ЖОДНИХ ГАРАНТІЙ, окрім гарантій передбачених " +"законодавством.\n" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, fuzzy, c-format +msgid "Written by %s and %s.\n" +msgstr "" +"\n" +"Автор — Jose E. Marchesi." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, fuzzy, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "" +"\n" +"Автор — Jose E. Marchesi." + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:117 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" + +#. TRANSLATORS: The placeholder indicates the bug-reporting address +#. for this package. Please add _another line_ saying +#. "Report translation bugs to <...>\n" with the address for translation +#. bugs (typically your translation team's web or email address). +#: lib/version-etc.c:245 +#, fuzzy, c-format +msgid "" +"\n" +"Report bugs to: %s\n" +msgstr "Повідомляйте про вади на адресу: %s\n" + +#: lib/version-etc.c:247 utils/recutl.c:125 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "Про вади у %s повідомляйте на адресу %s\n" + +#: lib/version-etc.c:251 utils/recutl.c:129 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Домашня сторінка %s: <%s>\n" + +#: lib/version-etc.c:253 +#, fuzzy, c-format +msgid "%s home page: <https://www.gnu.org/software/%s/>\n" +msgstr "Домашня сторінка %s: <http://www.gnu.org/software/recutils/>\n" + +#: lib/version-etc.c:256 +#, fuzzy +msgid "General help using GNU software: <https://www.gnu.org/gethelp/>\n" +msgstr "" +"Загальна довідкова інформація щодо використання програмного забезпечення " +"GNU: <http://www.gnu.org/gethelp/>\n" + +#: lib/w32spawn.h:49 +#, c-format +msgid "_open_osfhandle failed" +msgstr "Помилка _open_osfhandle" + +#: lib/w32spawn.h:90 +#, c-format +msgid "cannot restore fd %d: dup2 failed" +msgstr "Не вдалося відновити fd %d: помилка dup2" + +#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317 +#, c-format +msgid "%s subprocess" +msgstr "Підпроцес %s" + +#: lib/wait-process.c:274 lib/wait-process.c:346 +#, c-format +msgid "%s subprocess got fatal signal %d" +msgstr "Підпроцесом %s отримано сигнал щодо аварійного завершення %d" + +#: src/rec-fex.c:451 +#, c-format +msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" +msgstr "" +"внутрішня помилка: перевищено обмеження REC_FEX_MAX_ELEMS. Будь ласка, " +"повідомте авторам програми про цю помилку.\n" + +#: src/rec-int.c:176 +#, c-format +msgid "%s: error: the number of records of type %s should be %zd.\n" +msgstr "%s: помилка: кількість записів типу %s має дорівнювати %zd.\n" + +#: src/rec-int.c:186 +#, c-format +msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" +msgstr "%s: помилка: забагато записів типу %s. Максимальною кількістю є %zd.\n" + +#: src/rec-int.c:193 +#, c-format +msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" +msgstr "%s: помилка: замало записів типу %s. Мінімальною кількістю є %zd.\n" + +#: src/rec-int.c:409 src/rec-int.c:463 src/rec-int.c:520 src/rec-int.c:564 +#: utils/recutl.c:207 +msgid "out of memory\n" +msgstr "не вистачає пам'яті\n" + +#: src/rec-int.c:424 +#, c-format +msgid "%s:%s: error: mandatory field '%s' not found in record\n" +msgstr "%s:%s: помилка: у записі не виявлено обов’язкового поля «%s»\n" + +#: src/rec-int.c:487 +#, c-format +msgid "%s:%s: error: field '%s' not allowed in this record set\n" +msgstr "" +"%s:%s: помилка: у цьому наборі записів не можна використовувати поле «%s»\n" + +#: src/rec-int.c:534 +#, c-format +msgid "%s:%s: error: field '%s' should be unique in this record\n" +msgstr "" +"%s:%s: помилка: у цьому записі можна використовувати лише одне поле «%s»\n" + +#: src/rec-int.c:578 +#, c-format +msgid "%s:%s: error: prohibited field '%s' found in record\n" +msgstr "%s:%s: помилка: у записі виявлено заборонене поле «%s»\n" + +#: src/rec-int.c:610 +#, c-format +msgid "%s:%s: error: %%constraint[%d] violated in record\n" +msgstr "%s:%s: помилка: порушення %%constraint[%d] у записі\n" + +#: src/rec-int.c:647 +#, c-format +msgid "%s:%s: error: confidential field is not encrypted\n" +msgstr "%s:%s: помилка: вміст поля з конфіденційними даними не зашифровано\n" + +#: src/rec-int.c:699 +#, c-format +msgid "%s:%s: error: key field '%s' not found in record\n" +msgstr "%s:%s: помилка: у записі не виявлено поля ключа «%s»\n" + +#: src/rec-int.c:708 +#, c-format +msgid "%s:%s: error: multiple key fields '%s' in record\n" +msgstr "%s:%s: помилка: у записі виявлено декілька полів ключів «%s»\n" + +#: src/rec-int.c:751 +#, c-format +msgid "%s:%s: error: duplicated key value in field '%s' in record\n" +msgstr "" +"%s:%s: помилка: у записі виявлено дублювання встановлення значення ключа у " +"полі «%s»\n" + +#: src/rec-int.c:799 +#, c-format +msgid "%s:%s: error: missing %%rec field in record descriptor\n" +msgstr "%s:%s: помилка: у дескрипторі запису не вистачає поля %%rec\n" + +#: src/rec-int.c:807 +#, c-format +msgid "%s:%s: error: too many %%rec fields in record descriptor\n" +msgstr "%s:%s: помилка: у дескрипторі запису занадто багато полів %%rec\n" + +#: src/rec-int.c:817 +#, c-format +msgid "%s:%s: error: invalid record type %s\n" +msgstr "%s:%s: помилка: некоректний тип запису %s\n" + +#: src/rec-int.c:828 +#, c-format +msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" +msgstr "" +"%s:%s: помилка: у дескрипторі запису можна використовувати лише одне поле " +"%%key\n" + +#: src/rec-int.c:838 +#, c-format +msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" +msgstr "" +"%s:%s: помилка: у дескрипторі запису можна використовувати лише одне поле " +"%%size\n" + +#: src/rec-int.c:848 +#, c-format +msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" +msgstr "" +"%s:%s: помилка: у дескрипторі запису можна використовувати лише одне поле " +"%%sort\n" + +#: src/rec-int.c:871 +#, c-format +msgid "" +"%s:%s: error: expected a comma-separated list of fields before the type " +"specification\n" +msgstr "" +"%s:%s: помилка: перед специфікацією типу мало бути вказано список полів, " +"відокремлених комами\n" + +#: src/rec-int.c:897 src/rec-int.c:950 +#, c-format +msgid "%s:%s: error: the referred type %s does not exist\n" +msgstr "%s:%s: помилка: вказаного типу, %s, не існує\n" + +#: src/rec-int.c:909 +#, c-format +msgid "%s:%s: error: invalid type specification\n" +msgstr "%s:%s: помилка: некоректне визначення типу\n" + +#: src/rec-int.c:924 +#, c-format +msgid "%s:%s: error: expected a type name before the type specification\n" +msgstr "" +"%s:%s: помилка: перед специфікацією типу мало бути вказано назву типу\n" + +#: src/rec-int.c:962 +#, c-format +msgid "%s:%s: error: invalid typedef specification\n" +msgstr "%s:%s: помилка: некоректне визначення типу\n" + +#: src/rec-int.c:984 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" +msgstr "%s:%s: помилка: значення для %s[%zd] не є коректним виразом вибору\n" + +#: src/rec-int.c:1015 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" +msgstr "%s:%s: помилка: значенням %s[%zd] не є список назв полів\n" + +#: src/rec-int.c:1028 +#, c-format +msgid "" +"%s:%s: error: value for %s should be a number optionally preceded by >, <, " +">= or <=.\n" +msgstr "" +"%s:%s: помилка: значенням %s має бути число, перед яким може бути вказано " +"символ >, <, >= або <=.\n" + +#: src/rec-int.c:1044 +#, c-format +msgid "%s:%s: error: value for %s should be a list of field names.\n" +msgstr "%s:%s: помилка: значенням %s має бути список назв полів.\n" + +#: src/rec-int.c:1072 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range, uuid " +"or date\n" +msgstr "" +"%s:%s: помилка: поле з автоматичним збільшенням значення %s має містити " +"значення цілого типу, діапазон, UUID або дату\n" + +#: src/rec-int.c:1074 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range or " +"date\n" +msgstr "" +"%s:%s: помилка: поле з автоматичним збільшенням значення %s має містити " +"значення цілого типу, діапазон або дату\n" + +#: src/rec-int.c:1157 +#, c-format +msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" +msgstr "" +"%s:%s: помилка: не вдалося отримати значення дескриптора за адресою url %s.\n" + +#: src/rec-int.c:1176 +#, c-format +msgid "%s:%s: error: could not read external descriptor from file %s.\n" +msgstr "" +"%s:%s: помилка: не вдалося прочитати зовнішній дескриптор з файла %s.\n" + +#: src/rec-int.c:1191 +#, c-format +msgid "%s:%s: error: %s does not contain valid rec data.\n" +msgstr "%s:%s: помилка: у %s не міститься коректних даних rec.\n" + +#: src/rec-int.c:1205 +#, c-format +msgid "%s:%s: error: %s does not contain information for type %s.\n" +msgstr "%s:%s: помилка: у %s не міститься даних типу %s.\n" + +#: src/rec-types.c:448 +#, c-format +msgid "" +"internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " +"in rec_type_new().\n" +msgstr "" +"внутрішня помилка: типи rec: отримано сигнал REC_TYPE_NONE від функції " +"rec_type_parse_type_kind() у rec_type_new().\n" + +#: src/rec-types.c:1178 +msgid "invalid integer." +msgstr "некоректне ціле число." + +#: src/rec-types.c:1208 +msgid "invalid 'field' value." +msgstr "некоректне значення «field»." + +#: src/rec-types.c:1231 +msgid "invalid 'uuid' value." +msgstr "некоректне значення «uuid»." + +#: src/rec-types.c:1249 +msgid "invalid 'bool' value." +msgstr "некоректне значення «bool»." + +#: src/rec-types.c:1272 +msgid "invalid 'range' value." +msgstr "некоректне значення «range»." + +#: src/rec-types.c:1281 +#, c-format +msgid "expected an integer between %d and %d." +msgstr "слід було використати ціле значення у діапазоні від %d до %d." + +#: src/rec-types.c:1302 +msgid "invalid 'real' value." +msgstr "некоректне значення «real»." + +#: src/rec-types.c:1320 +#, c-format +msgid "value too large. Expected a size <= %zu." +msgstr "занадто велике значення. Слід було використати розмір <= %zu." + +#: src/rec-types.c:1341 +msgid "invalid 'line' value." +msgstr "некоректне значення «line»." + +#: src/rec-types.c:1360 +msgid "value does not match the regexp." +msgstr "значення не відповідає формальному виразу." + +#: src/rec-types.c:1383 +msgid "invalid date." +msgstr "некоректна дата." + +#: src/rec-types.c:1399 +msgid "invalid email." +msgstr "некоректна адреса ел. пошти." + +#: src/rec-types.c:1444 +msgid "invalid enum value." +msgstr "некоректне значення нумератора." + +#: src/rec-utils.c:93 +#, c-format +msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" +msgstr "" +"внутрішня помилка: rec_int_rec_extract_file: помилка під час спроби " +"компіляції формального виразу.\n" + +#: src/rec-utils.c:121 src/rec-utils.c:150 +#, c-format +msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" +msgstr "" +"внутрішня помилка: rec_int_rec_extract_url: помилка під час спроби " +"компіляції формального виразу.\n" + +#: src/rec-utils.c:304 +#, c-format +msgid "internal error: rec_match: error compiling regexp.\n" +msgstr "" +"внутрішня помилка: rec_match: помилка під час спроби компіляції формального " +"виразу.\n" + +#. TRANSLATORS: --help output, csv2rec synopsis. +#. no-wrap +#: utils/csv2rec.c:105 +#, c-format +msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" +msgstr "Використання: csv2rec [ПАРАМЕТРИ]... [ФАЙЛ_CSV]\n" + +#. TRANSLATORS: --help output, csv2rec short description. +#. no-wrap +#: utils/csv2rec.c:110 +msgid "Convert csv data into rec data.\n" +msgstr "" +"Перетворення даних csv (списку значень відокремлених роздільниками) у дані " +"rec.\n" + +#. TRANSLATORS: --help output, csv2rec options. +#. no-wrap +#: utils/csv2rec.c:116 +msgid "" +" -t, --type=TYPE type name for the converted records; " +"if this\n" +" parameter is ommited then no type is " +"used.\n" +" -s, --strict be strict parsing the csv file.\n" +" -e, --omit-empty omit empty fields.\n" +msgstr "" +" -t, --type=ТИП назва типу для перетворених значень " +"записів; якщо цей\n" +" параметр буде пропущено, не " +"використовуватиметься жодного типу.\n" +" -s, --strict обробити файл csv зі строгим " +"застосуванням правил.\n" +" -e, --omit-empty пропустити порожні поля.\n" + +#: utils/csv2rec.c:230 +#, c-format +msgid "invalid field name '%s' in header\n" +msgstr "некоректна назва поля, «%s», у заголовку\n" + +#: utils/csv2rec.c:259 +#, fuzzy, c-format +msgid "" +"%s: %lu: this line contains %lu fields, but %lu header fields were read\n" +msgstr "" +"%s: %d: у цьому рядку міститься %d поля. Це не збігається з кількістю " +"прочитаних заголовків, %d.\n" + +#: utils/csv2rec.c:347 utils/recdel.c:266 utils/recset.c:358 utils/recutl.c:328 +#, c-format +msgid "cannot read file %s\n" +msgstr "не вдалося виконати читання даних з файла %s\n" + +#: utils/csv2rec.c:358 +msgid "failed to initialize csv parser\n" +msgstr "не вдалося започаткувати обробку csv\n" + +#: utils/csv2rec.c:376 +#, c-format +msgid "error while parsing CSV file: %s\n" +msgstr "помилка під час обробки файла CSV: %s\n" + +#. TRANSLATORS: --help output, mdb2rec synopsis. +#. no-wrap +#: utils/mdb2rec.c:103 +#, c-format +msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" +msgstr "Використання: mdb2rec [ПАРАМЕТРИ]... ФАЙЛ_MDB [ТАБЛИЦЯ]\n" + +#. TRANSLATORS: --help output, mdb2rec short description. +#. no-wrap +#: utils/mdb2rec.c:108 +msgid "Convert an mdb file into a rec file.\n" +msgstr "Перетворення файла mdb на файл даних rec.\n" + +#. TRANSLATORS: --help output, mdb2rec options. +#. no-wrap +#: utils/mdb2rec.c:114 +msgid "" +" -s, --system-tables include system tables.\n" +" -e, --keep-empty-fields don't prune empty fields in the rec\n" +" output.\n" +" -l, --list-tables dump a list of the table names " +"contained\n" +" in the mdb file.\n" +msgstr "" +" -s, --system-tables включити системні таблиці.\n" +" -e, --keep-empty-fields не вирізати порожні поля з виведених " +"даних\n" +" rec.\n" +" -l, --list-tables показати список назв таблиць, що " +"містяться\n" +" у файлі mdb.\n" + +#: utils/mdb2rec.c:251 utils/mdb2rec.c:315 +#, c-format +msgid "failed to normalise record type name %s\n" +msgstr "не вдалося нормалізувати тип запису з назвою %s\n" + +#: utils/mdb2rec.c:259 utils/mdb2rec.c:270 +#, c-format +msgid "failed to normalise field name %s\n" +msgstr "не вдалося нормалізувати поле з назвою %s\n" + +#: utils/mdb2rec.c:336 +#, c-format +msgid "failed to normalise the field name %s\n" +msgstr "не вдалося нормалізувати поле з назвою %s\n" + +#: utils/mdb2rec.c:443 utils/recins.c:208 utils/recset.c:253 +#, c-format +msgid "invalid field name %s.\n" +msgstr "некоректна назва поля %s.\n" + +#: utils/mdb2rec.c:482 +#, c-format +msgid "could not open file %s\n" +msgstr "не вдалося відкрити файл %s\n" + +#: utils/mdb2rec.c:489 +msgid "file does not appear to be an Access database\n" +msgstr "здається, файл не є файлом бази даних Access\n" + +#. TRANSLATORS: --help output, rec2csv synopsis. +#. no-wrap +#: utils/rec2csv.c:86 +#, c-format +msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" +msgstr "Використання: rec2csv [ПАРАМЕТРИ]... [ФАЙЛ_REC]\n" + +#. TRANSLATORS: --help output, rec2csv short description. +#. no-wrap +#: utils/rec2csv.c:91 +msgid "Convert rec data into csv data.\n" +msgstr "" +"Перетворення даних rec у файли csv (списку значень відокремлених " +"роздільниками).\n" + +#. TRANSLATORS: --help output, rec2csv options. +#. no-wrap +#: utils/rec2csv.c:97 +msgid "" +" -d, --delim=char sets the deliminator (default ',')\n" +" -t, --type=TYPE record set to convert to csv; if this " +"parameter\n" +" is omitted then the default record " +"set is used\n" +" -S, --sort=FIELDS sort the output by the specified " +"fields.\n" +msgstr "" +" -d, --delim=символ встановити символ-роздільник (типовим " +"символом є «,»)\n" +" -t, --type=ТИП набір записів, які слід перетворити у " +"формат csv; якщо цього параметра\n" +" не буде вказано, " +"використовуватиметься типовий набір записів\n" +" -S, --sort=ПОЛЯ впорядкувати виведені дані за вмістом " +"вказаних полів.\n" + +#: utils/rec2csv.c:142 +msgid "only one list of fields can be specified as a sorting criteria.\n" +msgstr "критерієм впорядковування може бути лише один список полів.\n" + +#: utils/rec2csv.c:149 +msgid "invalid field name list in -S.\n" +msgstr "некоректний список назв полів у -S.\n" + +#: utils/rec2csv.c:155 utils/recsel.c:248 utils/recsel.c:286 +msgid "internal error creating fex.\n" +msgstr "внутрішня помилка під час спроби створити fex.\n" + +#. TRANSLATORS: --help output, recdel synopsis. +#. no-wrap +#: utils/recdel.c:89 +#, c-format +msgid "" +"Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [FILE]\n" +msgstr "" +"Використання: recdel [ПАРАМЕТРИ]... [-t ТИП] [-n НОМЕР | -e ВИРАЗ | -q РЯДОК " +"| -m НОМЕР]] [ФАЙЛ]\n" + +#. TRANSLATORS: --help output, recdel short description. +#. no-wrap +#: utils/recdel.c:94 +msgid "Remove (or comment out) records from a rec file.\n" +msgstr "Вилучення (або коментування) записів у файлі rec.\n" + +#. TRANSLATORS: --help output, recdel arguments. +#. no-wrap +#: utils/recdel.c:101 +msgid "" +" -c, --comment comment out the matching records " +"instead of\n" +" deleting them.\n" +" --force delete even in potentially dangerous " +"situations,\n" +" and if the deletion is violating " +"record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -c, --comment закоментувати відповідні записи " +"замість\n" +" їхнього вилучення.\n" +" --force вилучати навіть у потенційно " +"небезпечних ситуаціях\n" +" і якщо вилучення призводити до " +"порушення обмежень запису.\n" +" --no-external не використовувати зовнішніх " +"дескрипторів.\n" +" --verbose надати докладний звіт у разі, якщо " +"буде виявлено помилку\n" +" цілісності бази даних.\n" + +#. TRANSLATORS: --help output, notes on recdel. +#. no-wrap +#. TRANSLATORS: --help output, notes on recfix. +#. no-wrap +#. TRANSLATORS: --help output, notes on recins. +#. no-wrap +#: utils/recdel.c:119 utils/recfix.c:167 utils/recins.c:149 +msgid "" +"If no FILE is specified then the command acts like a filter, getting\n" +"the data from standard input and writing the result to standard output.\n" +msgstr "" +"Якщо не буде вказано значення ФАЙЛ, програма працюватиме у режимі " +"фільтрування:\n" +"отримуватиме дані зі стандартного джерела вхідних даних і виводитиме ці дані " +"до\n" +"стандартного виводу даних.\n" + +#: utils/recdel.c:136 +#, c-format +msgid "no records of type %s found.\n" +msgstr "не виявлено жодних записів типу %s.\n" + +#: utils/recdel.c:227 +#, c-format +msgid "ignoring a request to delete all records of type %s.\n" +msgstr "пропущено запит щодо вилучення всіх записів типу %s.\n" + +#: utils/recdel.c:229 +msgid "use --force if you really want to proceed, or use either -n or -e.\n" +msgstr "" +"скористайтеся параметром --force, якщо вам потрібно продовжити обробку, або " +"скористайтеся одним з параметрів, -n або -e.\n" + +#: utils/recdel.c:237 +msgid "invalid selection expression.\n" +msgstr "некоректний вираз вибору.\n" + +#: utils/recdel.c:276 utils/recfix.c:407 utils/recins.c:410 utils/recset.c:365 +#, c-format +msgid "file %s is not writable.\n" +msgstr "файл %s є непридатним до запису.\n" + +#. TRANSLATORS: --help output, recfix synopsis. +#. no-wrap +#: utils/recfix.c:117 +#, c-format +msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" +msgstr "" +"Використання: recfix [ПАРАМЕТР]... [ДІЯ] [ПАРАМЕТРИ_ДІЇ]... [ФАЙЛ]...\n" + +#. TRANSLATORS: --help output, recfix short description. +#. no-wrap +#: utils/recfix.c:122 +msgid "Check and fix rec files.\n" +msgstr "Перевірка і виправлення файлів rec.\n" + +#. TRANSLATORS: --help output, recfix global arguments. +#. no-wrap +#: utils/recfix.c:129 +msgid "" +" --no-external don't use external descriptors.\n" +" --force force the requested operation.\n" +msgstr "" +" --no-external не використовувати зовнішніх " +"дескрипторів.\n" +" --force змінювати записи, навіть якщо у " +"результаті буде порушено\n" +" обмеження, накладені на запис.\n" + +#. TRANSLATORS: --help output, recfix operations. +#. no-wrap +#: utils/recfix.c:139 +msgid "" +"Operations:\n" +" --check check integrity of the specified " +"file. Default.\n" +" --sort sort the records in the specified " +"file.\n" +" --auto insert auto-generated fields in " +"records missing them.\n" +msgstr "" +"Дії:\n" +" --check перевірити цілісність вказаного файла. " +"Типова дія.\n" +" --sort впорядкувати записи у вказаному " +"файлі.\n" +" --auto вставити автозаповнені поля до " +"записів, у яких їх не вистачає.\n" + +#. TRANSLATORS: --help output, recfix operations related with encryption. +#. no-wrap +#: utils/recfix.c:149 +msgid "" +" --encrypt encrypt confidential fields in the " +"specified file.\n" +" --decrypt decrypt confidential fields in the " +"specified file.\n" +msgstr "" +" --encrypt зашифрувати вміст полів з " +"конфіденційними даними у вказаному файлі.\n" +" --decrypt розшифрувати вміст полів з " +"конфіденційними даними у вказаному файлі.\n" + +#. TRANSLATORS: --help output, recfix encryption and decryption +#. options. +#. no-wrap +#: utils/recfix.c:158 +msgid "" +"De/Encryption options:\n" +" -s, --password=PASSWORD encrypt/decrypt with this password.\n" +msgstr "" +"Параметри розшифрування та шифрування:\n" +" -s, --password=ПАРОЛЬ зашифрувати або розшифрувати на основі " +"вказаного пароля.\n" + +#: utils/recfix.c:208 +msgid "--password|-s must be used as an operation argument.\n" +msgstr "Як аргумент операції має бути використано --password|-s.\n" + +#: utils/recfix.c:214 +msgid "the specified operation does not require a password.\n" +msgstr "для виконання вказаної дії пароль не потрібен.\n" + +#: utils/recfix.c:219 +msgid "please specify just one password.\n" +msgstr "будь ласка, вкажіть лише один пароль.\n" + +#: utils/recfix.c:230 utils/recfix.c:240 utils/recfix.c:250 utils/recfix.c:261 +#: utils/recfix.c:271 +msgid "please specify just one operation.\n" +msgstr "будь ласка, вкажіть лише одну дію.\n" + +#: utils/recfix.c:463 +msgid "the database contains already encrypted fields\n" +msgstr "у базі даних містяться вже зашифровані поля\n" + +#: utils/recfix.c:464 +msgid "please use --force or --decrypt\n" +msgstr "будь ласка, скористайтеся --force або --decrypt\n" + +#: utils/recfix.c:574 +msgid "unknown operation in recfix: please report this as a bug.\n" +msgstr "невідома операція у recfix: будь ласка, повідомте про цю ваду.\n" + +#. TRANSLATORS: --help output, recfmt synopsis. +#. no-wrap +#: utils/recfmt.c:78 +#, c-format +msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" +msgstr "Використання: recfmt [ПАРАМЕТР]... [ШАБЛОН]\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:83 +msgid "Apply a template to records read from standard input.\n" +msgstr "" +"Застосування шаблону до записів, прочитаних зі стандартного джерела вхідних " +"даних.\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:89 +msgid "" +" -f, --file=FILENAME read the template to apply from a " +"file.\n" +msgstr "" +" -f, --file=НАЗВА_ФАЙЛА прочитати дані шаблону, який слід " +"застосувати з файла.\n" + +#: utils/recfmt.c:123 +#, c-format +msgid "can't open file %s for reading.\n" +msgstr "не вдалося відкрити файл %s для читання даних.\n" + +#: utils/recfmt.c:141 +msgid "don't specify a template in the command line and -f at the same time.\n" +msgstr "" +"не можна вказувати шаблон у командному рядку і одночасно використовувати " +"параметр -f.\n" + +#: utils/recfmt.c:164 +msgid "invalid expression in a template slot.\n" +msgstr "некоректний вираз у полі замінника шаблону.\n" + +#: utils/recfmt.c:170 +msgid "error evaluating expression in a template slot.\n" +msgstr "помилка під час визначення виразу у полі замінника шаблону.\n" + +#: utils/recfmt.c:204 +msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" +msgstr "" +"recfmt_apply_template: помилка під час спроби компіляції формального виразу. " +"Будь ласка, повідомте про цю помилку авторам програми.\n" + +#. TRANSLATORS: --help output, recinf synopsis. +#. no-wrap +#: utils/recinf.c:84 +#, c-format +msgid "Usage: recinf [OPTION]... [FILE]...\n" +msgstr "Використання: recinf [ПАРАМЕТР]... [ФАЙЛ]...\n" + +#. TRANSLATORS: --help output, recinf short description. +#. no-wrap +#: utils/recinf.c:89 +msgid "Print information about the types of records stored in the input.\n" +msgstr "Показ даних щодо типів записів, що містяться у вхідних даних.\n" + +#. TRANSLATORS: --help output, recinf arguments. +#. no-wrap +#: utils/recinf.c:96 +msgid "" +" -t, --type=RECORD_TYPE print information on the records having " +"the\n" +" specified type.\n" +" -d, --descriptor include the full record descriptors.\n" +" -n, --names-only output just the names of the record files\n" +" found in the input.\n" +msgstr "" +" -t, --type=ТИП_ЗАПИСУ показати дані щодо записів, які містять\n" +" значення вказаного типу.\n" +" -d, --descriptor включити повні дескриптори записів.\n" +" -n, --names-only показати лише назви файлів записів,\n" +" які буде виявлено у вхідних даних.\n" + +#. TRANSLATORS: --help output, recinf special options. +#. no-wrap +#: utils/recinf.c:109 +msgid "" +"Special options:\n" +" -S, --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Особливі параметри:\n" +" -S, --print-sexps показати дані у форматі sexps, а не у " +"форматі rec.\n" + +#: utils/recinf.c:263 +#, c-format +msgid "error: cannot read file %s\n" +msgstr "помилка: не вдалося виконати читання даних з файла %s\n" + +#. TRANSLATORS: --help output, recins synopsis. +#. no-wrap +#: utils/recins.c:111 +#, c-format +msgid "" +"Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" +msgstr "" +"Використання: recins [ПАРАМЕТР]... [-t ТИП] [-n НОМЕР | -e ВИРАЗ | -q РЯДОК " +"| -m НОМЕР] [(-f НАЗВА -v РЯДОК) | -r ДАНІ_ЗАПИСУ)]... [ФАЙЛ]\n" + +#. TRANSLATORS: --help output, recins short description. +#. no-wrap +#: utils/recins.c:116 +msgid "Insert new records in a rec database.\n" +msgstr "Додавання нових записів до бази даних rec.\n" + +#. TRANSLATORS: --help output, recins arguments. +#. no-wrap +#: utils/recins.c:122 +msgid "" +" -f, --field=STR field name; should be followed by a -" +"v.\n" +" -v, --value=STR field value; should be preceded by an -" +"f.\n" +" -r, --record=STR record that will be inserted in the " +"file.\n" +" --force insert the record even if it is " +"violating\n" +" record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --no-auto don't insert auto generated fields.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -f, --field=РЯДОК назва поля; після цього параметра слід " +"вказати параметр -v.\n" +" -v, --value=РЯДОК значення поля; перед цим параметром " +"слід вказати параметр -f.\n" +" -r, --record=РЯДОК запис, який буде додано до файла.\n" +" --force додати запис, навіть якщо його " +"додавання порушує\n" +" обмеження, накладені на запис.\n" +" --no-external не використовувати зовнішніх " +"дескрипторів.\n" +" --no-auto не вставляти автоматично створених " +"полів.\n" +" --verbose надати докладний звіт у разі, якщо " +"виконання перевірки\n" +" цілісності зазнає невдачі.\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recins.c:136 +msgid "" +" -s, --password=STR encrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=РЯДОК зашифрувати поля з конфіденційними " +"даними за допомогою вказаного пароля.\n" + +#: utils/recins.c:195 +msgid "a -f should be followed by a -v\n" +msgstr "після параметра -f слід вказати параметр -v\n" + +#: utils/recins.c:219 +msgid "a -v should be preceded by a -f\n" +msgstr "перед параметром -v слід вказати параметр -f\n" + +#: utils/recins.c:244 utils/recsel.c:223 +msgid "more than one password was specified\n" +msgstr "було вказано декілька паролів\n" + +#: utils/recins.c:258 +msgid "error while parsing the record provided by -r\n" +msgstr "помилка під час обробки запису, вказаного за допомогою -r\n" + +#: utils/recins.c:293 +#, c-format +msgid "please provide a value for the field %s\n" +msgstr "будь ласка, вкажіть значення для поля %s\n" + +#. TRANSLATORS: --help output, recsel synopsis. +#. no-wrap +#: utils/recsel.c:118 +#, c-format +msgid "" +"Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " +"| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" +msgstr "" +"Використання: recsel [ПАРАМЕТР]... [-t ТИП] [-j ПОЛЕ] [-n ІНДЕКСИ | -e " +"ВИРАЗ_ЗАПИСУ | -q РЯДОК | -m НОМЕР]] [-c | (-p|-P) ВИРАЗ_ПОЛЯ] [ФАЙЛ]...\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:123 +msgid "Select and print rec data.\n" +msgstr "Вибір і виведення даних rec.\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:129 +msgid "" +" -d, --include-descriptors print record descriptors along with " +"the matched\n" +" records.\n" +" -C, --collapse do not section the result in records " +"with newlines.\n" +" -S, --sort=FIELD,... sort the output by the specified " +"fields.\n" +" -G, --group-by=FIELD,... group records by the specified " +"fields.\n" +" -U, --uniq remove duplicated fields in the output " +"records.\n" +msgstr "" +" -d, --include-descriptors показувати дескриптори записів разом з " +"відповідними\n" +" записами.\n" +" -C, --collapse не поділяти окремі записи у " +"результатах символами нового рядка.\n" +" -S, --sort=ПОЛЕ впорядкувати виведені дані за вмістом " +"вказаного поля.\n" +" -G, --group-by=ПОЛЕ,... згрупувати запис за вказаними полями.\n" +" -U, --uniq вилучити дублікати полів з виведених " +"записів.\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recsel.c:141 +msgid "" +" -s, --password=STR decrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=РЯДОК розшифрувати поля з конфіденційними " +"даними за допомогою вказаного пароля.\n" + +#: utils/recsel.c:150 +msgid "" +" -j, --join=FIELD perform an inner join using the " +"specified field.\n" +msgstr "" +" -j, --join=ПОЛЕ виконати внутрішнє з’єднання за " +"допомогою вказаного поля.\n" + +#. TRANSLATORS: --help output, recsel output options. +#. no-wrap +#: utils/recsel.c:157 +msgid "" +"Output options:\n" +" -p, --print=FIELDS comma-separated list of fields to " +"print for each\n" +" matching record.\n" +" -P, --print-values=FIELDS as -p, but print only the values of " +"the selected\n" +" fields.\n" +" -R, --print-row=FIELDS as -P, but separate the values with " +"spaces instead\n" +" of newlines.\n" +" -c, --count print a count of the matching records " +"instead of\n" +" the records themselves.\n" +msgstr "" +"Параметри виведення даних:\n" +" -p, --print=ПОЛЯ список полів, відокремлених комами, " +"які\n" +" слід показати для кожного " +"відповідного запису.\n" +" -P, --print-values=ПОЛЯ те саме, що і -p, але показувати лише " +"значення\n" +" вибраних полів.\n" +" -R, --print-row=ПОЛЯ те саме, що і -P, але з відокремленням " +"значень пробілами\n" +" замість символів нового рядка.\n" +" -c, --count показати кількість відповідних записів " +"замість\n" +" самих записів.\n" + +#. TRANSLATORS: --help output, recsel special options. +#. no-wrap +#: utils/recsel.c:171 +msgid "" +"Special options:\n" +" --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Особливі параметри:\n" +" --print-sexps показати дані у форматі sexps, а не у " +"форматі rec.\n" + +#: utils/recsel.c:235 +msgid "only one field list can be specified as a sorting criteria.\n" +msgstr "критерієм впорядковування може бути лише один список полів.\n" + +#: utils/recsel.c:242 +msgid "invalid field names in -S.\n" +msgstr "некоректні назви полів у -S.\n" + +#: utils/recsel.c:258 +msgid "only one field can be specified as join criteria.\n" +msgstr "критерієм з’єднання може бути лише значення одного поля.\n" + +#: utils/recsel.c:263 +msgid "please specify a correct field name to -j|--join.\n" +msgstr "будь ласка, вкажіть коректну назву поля у -j|--join.\n" + +#: utils/recsel.c:274 +msgid "only one field list can be specified as a grouping criteria.\n" +msgstr "критерієм групування може бути лише один список полів.\n" + +#: utils/recsel.c:280 +msgid "invalid field names in -G.\n" +msgstr "некоректні назви полів у -G.\n" + +#: utils/recsel.c:300 +msgid "cannot specify -[pPR] and also -c.\n" +msgstr "не можна одночасно використовувати -[pPR] і -c.\n" + +#: utils/recsel.c:317 +#, c-format +msgid "invalid list of fields in -%c\n" +msgstr "некоректний список полів у -%c\n" + +#: utils/recsel.c:325 +msgid "internal error creating the field expression.\n" +msgstr "внутрішня помилка під час створення виразу поля.\n" + +#: utils/recsel.c:340 +#, c-format +msgid "invalid aggregate function '%s'\n" +msgstr "некоректна функція агрегування, «%s»\n" + +#: utils/recsel.c:358 +msgid "cannot specify -c and also -p.\n" +msgstr "не можна одночасно визначати -c і -p.\n" + +#: utils/recsel.c:377 +msgid "joins can only be used when a named record set is selected.\n" +msgstr "" +"з’єднання можна використовувати, лише якщо вибрано іменований набір " +"записів.\n" + +#: utils/recsel.c:439 +msgid "several record types found. Please use -t to specify one.\n" +msgstr "" +"знайдено декілька типів записів. Будь ласка, скористайтеся параметром -t, " +"щоб вказати потрібний вам тип.\n" + +#. TRANSLATORS: --help output, recset synopsis. +#. no-wrap +#: utils/recset.c:113 +#, c-format +msgid "Usage: recset [OPTION]... [FILE]...\n" +msgstr "Використання: recset [ПАРАМЕТР]... [ФАЙЛ]...\n" + +#. TRANSLATORS: --help output, recset short description. +#. no-wrap +#: utils/recset.c:118 +msgid "Alter or delete fields in records.\n" +msgstr "Зміна або вилучення полів у записах.\n" + +#. TRANSLATORS: --help output, recset options. +#. no-wrap +#: utils/recset.c:124 +msgid "" +" --no-external don't use external descriptors.\n" +" --force alter the records even if violating " +"record\n" +" restrictions.\n" +msgstr "" +" --no-external не використовувати зовнішніх " +"дескрипторів.\n" +" --force змінювати записи, навіть якщо у " +"результаті буде порушено\n" +" обмеження, накладені на запис.\n" + +#. TRANSLATORS: --help output, recset field selection options. +#. no-wrap +#: utils/recset.c:137 +msgid "" +"Field selection options:\n" +" -f, --fields=FIELDS comma-separated list of field names " +"with optional\n" +" subscripts.\n" +msgstr "" +"Параметри вибору полів:\n" +" -f, --fields=ПОЛЯ список назв полів, відокремлених " +"комами,\n" +" з додатковими індексами.\n" + +#. TRANSLATORS: --help output, recset actions. +#. no-wrap +#: utils/recset.c:145 +msgid "" +"Actions:\n" +" -s, --set=VALUE change the value of the selected " +"fields.\n" +" -a, --add=VALUE add the selected fields with the given " +"value.\n" +" -S, --set-add=VALUE change the value of the selected " +"fields. If they don't\n" +" exist then add a new field with that " +"value.\n" +" -r, --rename=NAME rename the selected fields to a given " +"name. If an entire\n" +" record set is selected then the " +"field is renamed in the\n" +" record descriptor as well.\n" +" -d, --delete delete the selected fields.\n" +" -c, --comment comment out the selected fields.\n" +msgstr "" +"Дії:\n" +" -s, --set=ЗНАЧЕННЯ змінити значення вибраних полів на " +"вказане.\n" +" -a, --add=ЗНАЧЕННЯ додати вибрані поля з вказаним " +"значенням.\n" +" -S, --set-add=ЗНАЧЕННЯ змінити значення вибраних полів. Якщо " +"цих полів\n" +" не існує, додати нове поле з цим " +"значенням.\n" +" -r, --rename=НАЗВА перейменувати позначені поля, надавши " +"їм вказаної назви.\n" +" Якщо вибрано весь набір записів, " +"поле буде\n" +" перейменовано і у дескрипторі " +"записів.\n" +" -d, --delete вилучити вибрані поля.\n" +" -c, --comment закоментувати вибрані поля.\n" + +#: utils/recset.c:168 +msgid "please specify some field with -f.\n" +msgstr "будь ласка, вкажіть якесь поле за допомогою параметра -f.\n" + +#: utils/recset.c:173 +msgid "please specify just one action.\n" +msgstr "будь ласка, вкажіть лише одну дію.\n" + +#: utils/recset.c:213 +msgid "invalid field expression in -f.\n" +msgstr "некоректний вираз для поля у параметрі -f.\n" + +#: utils/recset.c:221 +msgid "creating the field expression.\n" +msgstr "створення виразу для поля.\n" + +#: utils/recset.c:243 +msgid "" +"the rename operation requires just one field with an optional subscript.\n" +msgstr "" +"для дії з перейменування слід вказати точно одне поле з додатковим " +"параметром індексу.\n" + +#. TRANSLATORS: --help output 5+ (reports) +#. TRANSLATORS: the placeholder indicates the bug-reporting address +#. for this application. Please add _another line_ with the +#. address for translation bugs. +#. no-wrap +#: utils/recutl.c:122 +#, c-format +msgid "Report bugs to: %s\n" +msgstr "Повідомляйте про вади на адресу: %s\n" + +#: utils/recutl.c:131 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" +msgstr "Домашня сторінка %s: <http://www.gnu.org/software/recutils/>\n" + +#: utils/recutl.c:134 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Загальна довідкова інформація щодо використання програмного забезпечення " +"GNU: <http://www.gnu.org/gethelp/>\n" + +#. TRANSLATORS: --help output, common arguments. +#. no-wrap +#: utils/recutl.c:143 +msgid "" +" --help print a help message and exit.\n" +" --version show version and exit.\n" +msgstr "" +" --help показати довідкове повідомлення і " +"завершити роботу.\n" +" --version показати повідомлення щодо версії і " +"завершити роботу.\n" + +#. TRANSLATORS: --help output, record selection arguments +#. no-wrap +#: utils/recutl.c:154 +msgid "" +"Record selection options:\n" +" -i, --case-insensitive make strings case-insensitive in " +"selection\n" +" expressions.\n" +" -t, --type=TYPE operate on records of the specified " +"type only.\n" +" -e, --expression=RECORD_EXPR selection expression.\n" +" -q, --quick=STR select records with fields containing " +"a string.\n" +" -n, --number=NUM,... select specific records by position, " +"with ranges.\n" +" -m, --random=NUM select a given number of random " +"records.\n" +msgstr "" +"Параметри вибору записів:\n" +" -i, --case-insensitive не зважати на регістр символів у " +"виразах\n" +" вибору.\n" +" -t, --type=ТИП обробляти лише записи вказаного типу.\n" +" -e, --expression=ВИРАЗ вираз для вибору.\n" +" -q, --quick=РЯДОК вибрати записи з полями, що містять " +"рядок.\n" +" -n, --number=НОМЕР вибрати запис з вказаним номером.\n" +" -m, --random=КІЛЬКІСТЬ вибрати вказану кількість випадкових " +"записів.\n" + +#: utils/recutl.c:179 +#, c-format +msgid "" +"Copyright (C) %s Jose E. Marchesi.\n" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +msgstr "" +"Авторські права належать Jose E. Marchesi, %s.\n" +"Умови ліцензування викладено у GPLv3+: GNU GPL версії 3 або новішій, <http://" +"gnu.org/licenses/gpl.html>\n" +"Це вільне програмне забезпечення: ви можете вільно змінювати і поширювати " +"його.\n" +"Вам не надається ЖОДНИХ ГАРАНТІЙ, окрім гарантій передбачених " +"законодавством.\n" + +#: utils/recutl.c:185 +msgid "" +"\n" +"Written by Jose E. Marchesi." +msgstr "" +"\n" +"Автор — Jose E. Marchesi." + +#: utils/recutl.c:197 utils/recutl.c:217 +msgid ": error: " +msgstr ": помилка: " + +#: utils/recutl.c:229 +msgid ": warning: " +msgstr ": попередження: " + +#: utils/recutl.c:254 +#, c-format +msgid "duplicated record set '%s' from %s.\n" +msgstr "повторення набору записів «%s» з %s.\n" + +#: utils/recutl.c:417 +msgid "cannot create a unique name.\n" +msgstr "не вдалося створити назви, яка б не повторювалася.\n" + +#: utils/recutl.c:438 +#, c-format +msgid "renaming file %s to %s\n" +msgstr "перейменування файла %s на %s\n" + +#: utils/recutl.c:482 +msgid "operation aborted due to integrity failures.\n" +msgstr "дію перервано через порушення цілісності бази даних.\n" + +#: utils/recutl.c:483 +msgid "use --verbose to get a detailed report.\n" +msgstr "скористайтеся параметром --verbose, щоб отримати докладний звіт.\n" + +#: utils/recutl.c:490 +msgid "use --force to skip the integrity check.\n" +msgstr "" +"скористайтеся параметром --force, щоб наказати програмі не виконувати " +"перевірки цілісності.\n" + +#: utils/recutl.c:551 +msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" +msgstr "" +"внутрішня помилка: помилка recutl_index_list_parse під час спроби компіляції " +"формального виразу.\n" + +#: utils/recutl.c:626 +msgid "Password: " +msgstr "Пароль: " + +#: utils/recutl.c:632 +msgid "Password again: " +msgstr "Пароль (ще раз): " + +#: utils/recutl.c:637 +msgid "the provided passwords don't match.\n" +msgstr "вказані паролі не збігаються.\n" + +#: utils/recutl.h:97 utils/recutl.h:186 utils/recutl.h:190 +#, fuzzy +msgid "cannot specify -e and also -n\n" +msgstr "не можна одночасно визначати -c і -p.\n" + +#: utils/recutl.h:102 +#, fuzzy +msgid "cannot specify -e and also -q\n" +msgstr "не можна одночасно визначати -c і -p.\n" + +#: utils/recutl.h:113 +#, fuzzy +msgid "invalid selection expression\n" +msgstr "некоректний вираз вибору.\n" + +#: utils/recutl.h:125 +#, fuzzy +msgid "cannot specify -n and also -e\n" +msgstr "не можна одночасно визначати -c і -p.\n" + +#: utils/recutl.h:130 +#, fuzzy +msgid "cannot specify -n and also -q\n" +msgstr "не можна одночасно визначати -c і -p.\n" + +#: utils/recutl.h:140 +#, fuzzy +msgid "invalid list of indexes in -n\n" +msgstr "некоректний список полів у -%c\n" + +#: utils/recutl.h:150 +#, fuzzy +msgid "cannot specify -m and also -e\n" +msgstr "не можна одночасно визначати -c і -p.\n" + +#: utils/recutl.h:155 +#, fuzzy +msgid "cannot specify -m and also -q\n" +msgstr "не можна одночасно визначати -c і -p.\n" + +#: utils/recutl.h:160 +#, fuzzy +msgid "cannot specify -m and also -n\n" +msgstr "не можна одночасно визначати -c і -p.\n" + +#~ msgid "%s: option '--%s' doesn't allow an argument\n" +#~ msgstr "%s: додавання аргументів до параметра «--%s» не передбачено\n" + +#~ msgid "%s: unrecognized option '--%s'\n" +#~ msgstr "%s: невідомий параметр «--%s»\n" + +#~ msgid "%s: option '-W %s' doesn't allow an argument\n" +#~ msgstr "%s: додавання аргументів до параметра «-W %s» не передбачено\n" + +#~ msgid "%s: option '-W %s' requires an argument\n" +#~ msgstr "%s: до параметра «-W %s» слід додати аргумент\n" diff --git a/devspec.en_US/project/recutils/po/vi.gmo b/devspec.en_US/project/recutils/po/vi.gmo new file mode 100755 index 0000000000000000000000000000000000000000..6c26eb93e861ea274d949c2b00b61ae176a2991f GIT binary patch literal 37365 zcwWVP4U`<!m0qnw*52_tSra=6y9q9X$CASINCLvo=m$ol(MXmw8f!)%g2YhMUDI8f z?&?-o^^69vL4rjXBtQn6V8Aevwc<~UF<_P%6XR`}{qvrjvwNIm<FhtnpY`$Ddp17F zIqSshvzzbU`>N_yb#+fk$VnfKZg<st_uY5j{eQ3OyBA*YIRl?Rz~8^Y-`KAj#s_}I zFpm7X!JoH&!!Z6W;5Puj0{A_^Lx7+Cpke$e;D;|Xj0XUJ0Qlbb7)JG97{(y_&wSW0 z{v7ble`y#G;`*_FZ5YF7Xa1I9+z40&yqU&T@KOwZ9opXsxE=887_=Mk10OLApfs*9 z4dW`nA;1p+ej4yYfJXp73OEP22CxZuJ>WkA_5)szn;6141h^dVi-4EYxF41FKUcr6 zx&-3_I)I~quU{h9-+!rLtOHyRcpcy!mrB2{0p0-kzb}<>c6`h*t^qs-crD-`19k&m zfd5ti{yV@Pz%jtpfCmAu27E=qpQ!7XejNM*+y%G^@CgOK4|pZuie*CAEz4w_V}NS` z{{(Os;QN*fy|(~v1bh+@Y%~@D|2^Oj0DleeA`ta{8V~TtSf7=En2Pb6J;LYpfENKa zdSo6C0h)lXDfnLie**Y3K#TC^4C5r=V6X7$CxAx*FI#CCAl-Na5Tanbvr^>jXDel0 zKD5d({uSUVK(Nf%3<%LODuBNUcqbr4&iDf0`v6}6ycqD+RU)T<4!8~UFRqq$y<k!o z;B{BZd_DoV0ni2PMZ1@;6uj?TCH(&TtAwuH)gosbuNJy?15N_^3VsLhy?`6A$QKgc zYefF`UL*9@6}$(KROj=6SQ6s|AXsDkiTeG20Cxj^^jcZB+pZP<zJ9ID|1SY=1AI@P zVcZS)sXn>>D{F+#kFSyST(?Hn;W`CxRq)^%(bwZ^gub`dh<<!~jqu}VfKVypx7G^Z z*Q}M_qiaRZytOjkJRn$Wd~dDv{|yKgmeja>o$$w6C+qsDbu#Xk0HHF*H`j@t{Yc&a z;ChjxYt~Euo$Eyo53UzFUsu<^y<YU_0tnBofSaz9bvt#PT>mlP6@We0%kNtOVPcHq z*9%{MPyPPS>i1u%-@j1s!hWH1dB50?Er9<F@Wy^w_sM=)pW9Ts<Nd;)X1~nqJN?3^ zf9RL_U%WwJ-v*Jp8#ahs78SgAgRJjKb^rStWS#%l2ATIo1ER-Q4~V|*8<6(T4v78w zs{xUlk8cz@$2JOI^Bbk#k&Qy<*Eh<#zOzy2ykJm%FB_EmTLFQ}C=befzC0-Q>kk1} zQu|G^-d6%{0laCGtj`HRh@SBmo237ThQyBT9uhhZ4GI1i)b(!-i9Pu{Ko5HMp3Ty3 z`V-<eo(6mZaOYOT_-nww1^go5f7=EbM*A5U-xna*ukS!V{LX*UFun_T1jcv|+D*aO zdPMgPV&~T0DAzv=SVq790eBQ}&rQ%-z#snyS@-chVwW3xL?3>4kE~;JkJzan?2&n1 zx)-(w@D>G6?G?HF>0YtBAGrlK5pe7lvAd7lB7FSQTZE2Z8#jyzz{zpJ`$vE`(e+#5 z8vyfwV1e-p;6A{AxK-BMvBcl}jwN>C=a!5&IwA6YpMqbT5IjFs@cO*i_lNVcKHmo1 z33yRK@Rb#OtDx4;7C!8@Wu1@NqVL}UbOA4!6u*275K}h(8t|V04i$y&twpiFp9lQs zfKLNjXz)@|=>6c7;N3JOcH`kGx&DnQ@h5+$V6F`L!uk}-V&A?{0S$l`yF%~J0e=s0 zxGH+^-kR8t%{9@ViJHjUeKpaKuc+VesCHfZ;cEduwqNva$9}Qbx9%6ZJiva8|0Tea zkgp%s4FjQxaik%7cCsP;Uu{TS@;$(-(QeJO=#_Us`1Tl}1Nhwo;vY883LP)aN__Me zfcFCKxlR1R4{j4Z`{`|>{~x|x^!N$|CvO*f`S|T3S8v@ecHtMd3*Y+gfLsIazeD8Y zhj+;QultnnxdQkk;Bmkg>H4ST`rmw7?9@l^l=WP9r}*FgJB8j`?i4)t-6{U?t9OdM z|IwW?&#t>fo<Dh)tjDptM1THF!T$*eRW>d>D0br(K&Y<q=t0q|9|CTp@eheTa1Y5k zJa$Ot{fCF7-`^h+eOP_B{C4jaetqd~vG;#;w~YV(dxTHh?veR<_lVp)3s?gD#XYhf z_HRS?0l)RzLQl`V!naS~E93vydu6`wJ1lzMcUbu092UFy$YG(kd067Mzd0=Pz34va zcP-#$fK&I$JRZAG==tOOL{9(lKCu_wpOJP21s_)MYo8H(KT^NncfaW8m4GlQM&*8y z-*4S7^!?@i!k1rvK<2aI0f`eIeL(pC-xd7$5!fie`Vo=qKR6=vzjH*|f8eOtlhLCx z&%;NB{@0I69Qxy<!uLxa6#F&wpve8)gTlXWJ}CC_;)eup@gZsV=tF|{Zyyr5x#VG4 z59eX|{bvu0oxJFn$kX&O;n!D>Nj&<KV-nW@uzja{^r5-ltiI0~B1^X#lCKb7NH@se zf6Wm2AX`Op4l`=JiocgsU!oNzh<Qr<1v?Cw7~?+~;wNYgo-ri$qR&$be%6q<mSTi4 zb?qVr2Nc|*;Aul-6DEygLHa=bcz$q;#vAy1P+ce4xKVv4drQ7^pZfh}Lu7ZxkXZKf z_<PI{zQf$|deCRLf~4=HYsU?-o%Deku%FUDWRHGTeJ306IrW|FKg5vj3*4shCjP#T zKbT14cCG(g_=7qdSW4E(y1GvG^*Qw&W|HFq`fOE@)?KBO{GoW@0{lIsexEWVHX-?c zQeAr;e=xfS%pA)LeVT^I+Bej1xHir)DDHuoHomE@!vwM~CVhF<5Wi10?ThL@Tm|Q% zWM?VodmMjH<L@r~oltEqR`4SVlI~Fa@q+q&g@PLtq@3avLuCH2x<>f|>DUhS8!BwP zhQHr2L?_5DlP!8)-G4;E-^JgEA%6Bt>e?X%NvG$H^v|q<ZyVyP$$pV;!<4g4BL8-^ z)}HLxKULp9rXblsiYpxTn{wPUhS+BPLpGNDx2=BvzJhRvMp=DdFr+p>_BpSvk#Buj zegBUNlK&x}NdAsuM2gQTmiYqyV7`s7;_p$_7G{;>^zhSlW8Lw6+chU<%}-Q4+Z^mQ zw_Ejm$@ZLH!{kpcXS@0OY|S^*Kf&F6)tz(-w(C1q*_?Fja=|kl*Yr!a>DBDKgG&Wm zFWbFc0pfz)32|`uED#$3=8|2mwLyzdt?szKX_?%rVtbxdv`xz`nDzn3kI0+0>z-3} z+aU2u)fqEr5_L9$-flH#AMowE3#wZ`g{r&EHydDi*r;H8`MOi{t937;VX|7!+bR9! zW0ldDIZ?Os)jAksPh&NmNpsq%mM!0Li|S5STO5f`-S+&tllL(z@Bi^^<gUzSe*<)2 zU8^;_ZV@p|OD^97Ect4s0&!@ACAeE{_>8M!`T0`B2$CIOwt#vvGgAt7*=A+}VI}Ky zxRb3`#5HSGUu3vEYZffGXxFO^&-5I>!SnNaGE+msh9#!S31JXG$7@;g#8OJ%^R<!? z{0TA`>7SxA4TVBa--2EeCADhZ4~T~H*+m$hSrdjPKb3jjlRzdinJe_L`6xS;b@`H2 zPiyVjz8CPwsW`5M37E?Z_N3J)`{uHqWh*dn&L>3vY|UObcGJjU8lHfgz-RhZvPPJ@ zeD$W+$eh6anpL+dSnqn~>7Y}!Lgu$XWV(u0Ax|3<&9EG#z`0Q()&nQkZQ3%pZR2PP zQo75SApSLI01SK5P?7=Fxahd~a-(49v}M-tiK$fN=uND06_PgN_@zk8?6Wa5tc)a3 zxdBn?a@nf2lc++~bgMr2!P2a3gh!l$W(A7P#JKiM*>P>boM2c_Z*OlBb7qDC-4LNG zLT_uiiP?0Nd^e=16S7@|tl>KQlN3dtx?QP4kqV7k*~wde*gtT8isX=&2GC9tT5h&( zbZloTTE1(#5Z5*2#TxiAVZ-{C%hef-0irE4H_b#&6Sirq+_0Cx#%*+THBe<26gn4l zF}^zC6MEYrRI=umEFUXcE)z1CZ0H=2sfowKh|XqM`f5%x^pTDqGn;2AyT4TP3M^Iw zCMNwOSk%P0UD0;QPsSunF#Ufv)Jh!7Hq>R?;Bf!;RvTL<XH3KScBO`;u*tSswHo~7 zWW8Ded0}vu+ehg3RUKEfuLT!A2pAv`6%snf1y@XJ4wftTom57_>k;0X<#{u0C9_jF z8k#}kCtSTklo@xY7<y^k-Yf!|O3t??%C>I1<)iGoDXmOt#mZ<?=PBE+<-mA<Hm3&E zKO$+hdc%dpQlo?gf+}Q|3b9r^a+yXhJD%T;XpG#b)Ufo_2$7n|2eoCp<q@YKvhG=U z97S=ZFrmp)<o<UK4(!;uaXcOci1%|`5-5(+%+UFWfiGFpO0F`|5y>8n$*fS3Oke|& zJ%ZI^tJi=vY<0zq#w9e&nq1X|<|IDKQ|xPaVhM$bimwVKamC9tjmc`m4Q;XG@~Rry zf+@Poqf@lc{Z&B4#)p|2##EVTp-&ilNlb;HDu}7vs*I?DC}x%D44dwD2;p*61E3Bq z2jacZ^N8|L{3gnihK26Nv<6)2hRjqk`x;WtK67oix4z|C$@go0D_73U%=8xBMsKxV zT<KLO{TZunuLO%4K8)*1>E<;iYV~R!8EpI)TVT78xL8C4HEH=UEuK>(*V9cc`b@iC zuh#oSE*g~yun~e0NI1y|agb1j&b|A#0?#GtTdkUt_Do8zUUR$SI+X?tvWhP-k8}hT z%biWfU>)dy!Eq6MIFu@~hURkSvhMscxu>pCKIy<;lT)zj#ReycdP9wp?rumVRv*^I zzqz}xR|N<Xe5hnP*~NpQ1a=Bhm0^k*4Hk7ZnJj%}J{Sv$qHncyA&*aCJHkWEBXDH# z6$;pgN%WX?N;gdq0d)5H!Pa9o8pQK-oUMM0G?1pKJe}Rb!#s~gO(t!m5*+*bwr1xf z7--bXX<UqYb2O0>TuFCQ-?aW(h&^S`N;FIBEwnG|_Lj9@eft2cI`y=;_F&~an+y_N z3A~qbniDo8L2Nm*Q@MjYOGyW`k<mOW3>xvonLvBkZeuy39J52mNCqfX5vFLplRX1n z41#zO`gX0Bo`T*IxpC*lv~r0#hn^~(Tv(g})dkMFpX0Gt=<X&ZRRSI~)`YI5A2L>_ z1`!NN^_CDWcIH(?U)|l&^c+uLOl#?JH7uTUn|(geP?~U#XyA`Z&V&=$8fL)~ESErK z62I(Ft|H56AAqK{bP0TlwoG28brSt2vmG;oR$QSaifXYXZ950fm3<P|0rez#eUG`e z$6UXTZ0g!|9kJdF=eIYosHsGqMQ>3s&n~Ol3hWL%rN{cU%!o3VJ8~Z67bB4^@W?K) zI}Ho8p<@N<;kfvQxW$F8;CsL1%6(A~X8Y@I=-;+0Jygt>*lp3m3;8Ns6;k8H6pPSV zg+d2(xSQ5JnP2fxTJgyCJK)VqqG@j78?%y7We#jvtR<2q@-3=vsbyAVTfRoIs;-a( ztV>O`DcNQ}lEw(ix)l?sjS!6$CO2Nsmfz4Paw{Zb;UIoc;tY+3kP_q(XNzC+>=48m zyIj`ODXzS?`KY_?MCly17+TO6{k$<l(UA<6v_0I0OB`0L>=8u29K~?N;`!vG>V+`R z8lX}P?*U9Y2TU<+oY5Ntsx*x?3$k2_*s5ZaO_lWqttgwJ@KTy+!Di4PxFijN=G>q* zTX%{j-&{Vhf{a|t)?wE+CvUsBI5e_t`ijf?%%S03^gY}!yMlN_ldgyPPLS)ArK`8H zSS$CI{7QL!Z`T+_9QZd`x4~_d4E33_)duGRe3@tzbtK-vOE{FmO*Ft*+Ls$E*>%nX zhj*Aa_V3);KRk9*4|Spiq<9hQ2~(yD^03EcYX)=OXs;ZUkd?FlTEc>bWu1}!(a{@s z?2K2WRIs};C><%C<=uj?inEFJA+o>v7*R3TYgh8`7;>sSpT`Z{PG&_z<|rygvNgm7 z#<FagN->SrG+K+aw6$pa)Si-6m=fgTR0CwI5Y<5fv%vGf!dZFW!z89`srx}fdQ9Nq z0xh*;iA>Q9UiF!}6KvC&YJUJL95xIpP{tN1ow{1a8iX!9z=Y-5+)SL~gawV`-~%ga zhnH#R3FJbC^JT0jGdsFT`x(5TVKeQX%kqY0+H?D!PleYd9FQHnVxw%;HD??)l4Q<y z3(=L<#@mrSA*!_xl&l8rqZ-3i*`lE@XoZ}%;iYxl5x8>}K>ENKvc+llk-Jf;IB<dS zt$EYjC|g@mWtv0Cwx4icMq8j1ydky@<#IFJ1mIjZSu5A9av0eAyw7Xwkg}Psk~LO) zstdN=gj*sD^sB0_Na2`m<x810GO?A-?rJ2YNA_t_3<dlnkquL*2Ie?E3|hQo)RLJV z&1>$A$f#FmQdvV}j0hP4Z*(HqNO?6YZ--m-nF+xJV*7r|hd0`K@aPPPv{D>6A7=%0 znI$m-SEt!Mk0_gOT1Cro5f29!=xg1^*o`_Xwv^vmRCA=I7;Q}i5eOwjo?f=|5EzBA zRTw+$3}Ul1XX7x_VEJ;SEv^SsI-LljD%O-#M%|)kwlu|HA?D2NiY6#am!XC%DTi%V zBfV`gI-DVroJYmlXr!RnKe&4&+>A*}fVl5|>bt+;<fqzhflA+y7?xzE?5d<kGG!^w zY4v(e2-gko+Mc>IEm(t+M~EJ=Nv%pOuL22=#V$eESK$-@{;pafyd9_wWBsV)%iXjH zb!UqZa!x(r6mg5UrkBHnY0>bCkVv(2r^TH+Wor@P;zXlJR<MsNL+Wzu+Nh$?Ekx%J zg5YzM*nvPqlU(`)#>WG#Y1>JHCk!B1RH<d8;6f|wR{AiK5T55@8hNhXkJT-wOhQ7T zhKFdPWbAUM-0F-Q?Avidjf?7_g}Iy}=snA|D=YZQ3hm0C+l^fwZz>>qznliXdB@1u zmL0>Rdr97I9vHo0oI<j_T|qnK4Xy3AZ`{Dm%$vvhH|VX=@^Z=x;#i?v39M*`JSfpD z=bNPAd-2URNmTEEo|?L5;=+EDbPiuC)C6r?5K|JQ5DVTNBZE8p`6qoJ*Kf6UuK4lJ zV}sjAw)Kz2TfyYUTQMGdi#PJ(jm~X;%X5<^r|!9Fy0wDt)v4FU{;~cxv+yF`whX<` zWLGRyY#H7-xO;Fk8zs3sel5?{?#PX-5G34oZ~F8p-EYIAaoB5jyy{INJ1Zb1ReMvn z8Ws|q4hK-WsKIo*BPHnDW#lc|o+kXJs_b)6McFeOT57->E4boQMxlz>T;B-qO0q5e zwTtXR&B=n<UEmFZ%LB?)3o*>IX71)1v4xYDvR6g)5upy-<hA=Xx*u*>=+xsnQ5vK$ zlEdl#$dC>B0IgO$aN=nc#X>wJSZt{(1s8rCp1HQ)QIG01QimnW&08dFa!i}zGoeZI z1Dq~}gL~zwA9k22(PV;+Q`i`uomlp?7E!=NmEmbet#Gccn!|dfty8o=;!5@bCpKaG zGd9@SUEsNQ7kUj@GYY!lg=s&E>fdCvXm}fAL=9ZB$_Um2#&e~NhDvKv*LFBMHjEZB zYNljW)nF-WrK1hK>P}eIwrVvS?ic8&e(ak4>@30zwaajd7)N3Yb!3(rtD2J)o)(Dh zrlOatcE@BjLXn%a4|KTOMj+$O`%Jd}gS*GK_wODb+%~v<6wUKCsVxGWk+N+u?`o3W zIj!WdHQ@lz>*F13LP*wZe0az3phzcLj8ltoUPJjh<+z3AD^xBgmyi-HUy(k*IIfKo zv=8`{oR5o$swr11HSxxX!ZF#5C>r(hSz=&6eRh2sei;K7>;vPJRSE+-VvrKSvWaT7 zyiApfqpQ50t(VDov|i;XGv%^vrC_Gr;g+jbu?Wh@U`#e#3AV}PL}b!la?~6tkyF-w zB2rCaT*@K^?UI5^t?5W&qJh%T^y|S!T?uB03`a^6&h!cOXetUWHROgm+|&ChqZUmz zQAeQm-TA0}dIn?A@i$7=TuJ+b-J2QSR4}CkulWG2W{=L5WF4s@+s};64$GM4jHMOz zx(qj}WNYU~c!v*2!)-*FJ&`t{=Wf8oXZG^2i+0_yTDveO()w9)0GD*&oO)B$sa@v; z`?Dj6cE~2Ge9)=Tu*D$-H8b)XNd8IiD5J+9!uT$uCKgjUM%k`wM2DwjLgZ6a!zeNU z`|FfNY2t}7bNlX)1C+fjUHEVqP1Is3>d-)cD5G5)t-_sX;?Y^B$!HUc^-#5;ld-{p zUQ983M5xP<XnmZ|g^mYm-q!M^dm7$xVo#?WFc?C-^XzFZZfib0kk-&=F=bLtR`b9t zfiuYU$RP*WK5d9oureDRcTrL!?ZYr9V3MZ}TCzh>NYzeVBt79FrjW-P6Rn_@L#Mlf z!o9*2iD-l@j4>2e2#mI34V8OF?ZvMm+3GWEEvyyMM+#3}wH0(Gd5eZT1axS|a(yX& zRw*Fpp#|oX(4Zf&8}bucaXW#77(V6HR2eIF9yx3ooN?xZ&{Ww-oM%QuQJZkq%xD#P zvcRYYRNg3C^&%Cl2crWxd}w0rI<xz>Mz2BPnyvEjk$QC>8s)YWayQ7<mh#e0*)v!7 zUe$Z;sxGN;<hFZ7r;yvwD0;cEY9DbcS9BXWZhF1iG3grFF_s(Ph^y-6HnN0YzH0Tg zxmBxktFACtuj;$v^2=7OUbPAhb35&6$BVVQ5{+_~uQFF%+qe4a%T`^DcH1n^&yB%# zdu2N4(r1p<7w1nQAuTR09L<}bY&4I%=Gtj@#wiz&I9y+3p9_6jkFIX9f&4BvW?Pj$ z^9INE*-?QLzCuW&`?#B%cCIJ$==FNl238GA2Nt@vA7SY;r=70tTec5Ij9T5hs%t>D zLULo!xjwk>1O7^Aw&SkhZ4){muxo5n?wY6_jXY`BbAxWaTHtd9*GxEm*KX!4!cQfY z5rMK&Ua-{{n-%S<lc((M8iD<_%DGJl+kwTc@lS8v>NTc(UAJlt#)x&!-DppEj<4-~ zX`|LeFnAk`IJ9!wk<CnCk-aotjcwKZCYW28`oV%jd)cdduR)8Es*RtyQD)|VFrv>C zP8eNh9)A1Fiwh_6;OOG~*L`zhap7s_oS)yUG*6hN<|}X*&AB`nN4TG&c)v~$`1p(S zr=fgM|1-zXFkh-hTP~d+-z<W-6Aq)#jM)fKcYc1e<SZ`SP5JKP!UMntUSPE5e9gqy zM;u(QHs>-w#~DLbD>=>Q;nzXBo4{rS=sG{)F;!~5irE#KZ%{RFap7@r;8mLJ3H-P4 zf;mC>-D0)*jFa^V7KB^0U4yk2P6~C!k^?-rlPBC$^sD&_L;`bIoS&;?F2FNN>Own} z7~|Y#`mQJ0e69wY2!7>hzR*=7>&!7F>9ft}8#K{Vjoz%!fkLY0+>%*XoIlwx%gtw) zVfj*Xo<uFl$Z#OP`C^56eR4K42YG#_n=hINSdB0Q7;@%V=BabH)}{0zm<KE7;{0<g zil-d2Ud{fH=rm^BA`~f$Ev?V@T6ccxh`4Q;b%YGfIbI4ny5Z1-$(*_Pzd^Qb;c(uZ zBJHe@J<mLIzj+$#?t>uLoL-!N!<F?UJ2^k+^d_Glooc>0j)}aSg2^qOfn^|`m8kQ} zm^)gV+}dqEGixrdEY819VhY=VF-gk4f7g>e-@ogr#KWaqw=6Ck+Lbbdsq7%E&xu-6 zD)XhrEE^{p;B$`YS(I7OQ>Vfs2wuhX78i~&HJKR{3OmfxL+1Vl(&iGRw*w*ZX?lzE zZ$?O1Cc^Cze%Nws=i4tWE<8CrlrlIvzf?01fc}~}#p`{b!K(x3T-BTe%}86T&QGbv zY&g>%%BaRo7T)Q_g(sZMtV-}fvktu5mf^`&r8%_{1zKm0Ray6B;`<wc60xfY22qmc z7QrbW?EQ+`GCaTh)!ljG!PXFcVpq~dm{4h9Ne8qU9&tq&Iwx|N2ofg5xAU4wz>pYN zpImS9(bs{^yA~Hdza?crpUhP_3^a*;N9Lbq<5`WA=U?9yO1b+)KJ7W!wuqy-#x)Ke z=2<rxMP+q1(pg_WV5rdL)8{RKkn3mVQ{qb7-m!FkFjk?IIVPh{vf5<A9v6KQd>I{; zFNi5xZShoUP@tZl%YL+%d~@X7Qk+&{ap5JiOkS`N6YsLUZftS>#gW|Dmf=>kG(qHb zFxW3N_{ZI5bFN0nP6`iRz`cdXeO+(}dGugyC*wi}_T@aA+ruu|Gz4u$2f<5;vBCF6 zkKDous<lnC4m4)`1m*UvDFe1oB9xWHL{Ix*CZeQ9W~}W}o)nyEBzJz^b^^gGtlA^G zr7V(LJ<RMormT5}hi?OEW<QX}3i_>?6eCo&fGuKX0aR`QMu_Rj@JKF4A@uGNga8~9 zvEkEa3H@Jq&JuDm6Ov2^D}{;P#N(tAKIJwn&L1Dn4Q-BWWjqs%loXDGj0Y~i6!We5 z<|~=#V$IYS-(2!Z-Dus(5}cZ4cAb)tzD-D?odjz8<Sw!FGl_XJ+kxB)XBcrWM4oA$ zX?c%W37$lQ(uivMYNX<0(iHPLrCEu{wk4p=L_B>s3=h$Y!3(v5qFO~vrwBGOkh~xn zo)4C24mMkgh?KrGI8Q@x9%*;yr-Q@bJ6)&2bgFfUPMtF8Ssr;>xaDfr=Y`p6v1+^s z7UZigx~E>0*sHv_@R*Z+pVfkGJ~P1;htPntrt(RJr*ITRs^^OtQ=cR%nkupYtK|Vw ziaKEGDTj)l?Nwc&wqR9r&TO9cWBE}vLeOiDVE_tf<Vt5mF10$?SPI#hV^#u@-+W`1 zxqs9R478+7WwP+O967=6Je*%^^E_8x#r={b9&>~z$xa%*Ee|8}(nR^Z*v?4jlij^2 zBofQ4$1(bRm+Yy9Bjhu*Nw@Tk$6PrTbLD&_)5XL}D+2hr;%N>RsFvauNvlEY9Nfrx zM6MoM&OXEhf?|mV*p}o=6b^=VBM2js{T1WLSl^9nWKxlJ9yH_Cz)Ev&R;h7da2Fo1 zl)X<r=A4FEg?b6BiwjRvwdiqIMSGEFNWrJ_E716QjgY@$1>QJh0ZFDuvD^}(Cc>=+ z2MM#5QcIE294**$vr&dbjt8ciXCo_^K9ufi&Z2WD)m0V0ww<b857A1lRA~utl5@v| zsf^W^hDa#YM6%GBWy4ANc$}Yc!~wA~y{J*7mXZD?JGJuQm(wSjZ&aO)rXGl@9#?dh zp!1He<Va8v;+5xsgKoOov=?hQjKEh!h(uK~s|KrdBylPM)5xMnyU&iSB~kL0<@v@b zTWe>5GwO}yJXz6LmVF%q9jDkZuhulu0~onST%uyGrDM#|zbh#yI>1Cx%>&GzxSL5P zMBzv+=C&gmimf;t&_jkOKCkOlBxOL`Ju=>IIC=6rtVo7K%SyMM$GgNk5v(8Lh<q?H z-K;<!jQDfr3P-%gjHP`0%NkxigbKHedg<YFq0>m%XJd2o8T^=b;t!w?ZD}6NjqO}q zxIZOG=dB%8eb=YWv1`J^sbrC+$2mawO!^WdP{iCGRj}6D=&`Ic_LO?tk<N7<<}j<9 z>}h3A$|O!A(<vJZB}odxsH$Z~QtUV5Pq2?Q?@uXknZY#TG8!QDrS_^Aq{x@D8tb~| z)H6>fHGk!`k?Coiizv&CJ#DAro6otb0<NLdix8cjZ$FSy*-FZ0hW*nC$^1G<CT33x zRaE<`l(9xT)$}cml7z8Gr{=-1J}G6()WQMBx_V`Tilz<+3X*#R)7Ge-O52~X45uZa zekmX$42HSvWeg-X*rNM9Qcyc6Ovu(-dM7<I(!0?i^K<A%&MDaFBbE}~`>E?e*ZlqG z$Z51bZa?I(BOPJCJ-}voKym<jNPGFv$hH+d@v{wA@B-0JN0#UB&pg~bKFg+;EVCrB z2P>R`nFTt`B-MXTu7y(F;7oJB=A3Vez?8{Z(`G|&*VfI=M~8<%@+0Pk#rfkq%+1Za zhBuo-%_Eq={P7;yt^*=*;>4oEnpY&O@FERP(Za}uxfc1*u-Z#>L<QxPhxoTI&c8S| zzIF5B{Il`$R*0fh<v3X@ON(oY^;BDz11xcR{;$*~(1n&q{M(n_+xq5+7fU2qneCBq zT!KONt?0jSQlAKyrlLbP&_A~*87^sDpvy5yffz3Nih$wxZpz!T^AhcKu(73xfi_A? z`bI<|FknMpCWFyqa{ArXqH9`pGj2uX+=RA08xqpq><q|$T;#|jyH#Ok@-X?g=ZHT~ zCo3sHFlssR@YXHLqC$?b*qF)_wdmwQOJZhh4Q{EBC_vNNau}?E>7fM^-;aQtUO}K` zSXyhMD;d4<J{7c_bTSM`xutLoY?#jn<*8}M*wC(j>u{SF)oHfJxvu?$v9%@V3oenV z$wrxIVGtf>eW^jmojKuLw1H-l`bX8}XmfFiHymg?^~p{3CC}b<e%(PnDUp%ANW20; zL^D3RY`u#NrP(ok=RNsOgburh?Q28Jm#|$c5(Rtm-`URtO|={rFw<U}kVZKh7MdP? zaf`|-V)!Lu=*+Yw<FdqS6xwi8$QlXB(%Hv^Xyhq&PLbz2!SNTw?kp$_54W|PN6GM# z1zsreB4u8?(C)-V?(C>(jSnHEL(SJzV4-i{BJ0~8|G8DOQXuS!N?SW(Y<4(aYuQ|6 zSH}bdkzU(03bSq~ZH{lKwJ4QrT}ib#oLAQOGQjs$m@TQfw(M5Xt;4>#c}M?BzZA)7 zwtYPj{ODk&3KHUWgN$<8#%c2H3me8ZFD^VgFup<G$xWl2du#7sXnzDp_?DnYBT}nF zm3TXYy!XOm`VOqTi(zze;o-EGF{F>cdw<jFq|#|Mpadbj;lSwiS27U#6!HV~fwDv+ zkk%n3ayfQ~+_ZJ4T<oGq!8L}$GgZq~5|_x-R<z6`zEdDk$(TqypV8!s3gsSHQ+|@S z^(Mla2gv?VgR?mhpE}YnWtag`2a51w`{}I#*;rgL$+?UAWPRO4Tl_3B!8UY((x#$% zMMP-YRJxdAAmVgnc^^evIw%m$LdKX#PM($lG`*tyGNh86O%SItx_pCzPh%S|69x>= zy9A+Lz4;oW5CsY2S%jd=DgLB^DIDb=(1!)GBCk4ax~$N<tjN@5&+RSEXcC;kX|Ko_ zXdWEMjWr*?DK`K+btHH*M39H%21ak#+ZFE{zBVJ-E$X#>;|B9)%5jH>lD+G}Ycx6x zx^r+Kr5nFhqor5QH^r38TOZiw@GBoe!^>pA`0{%n0;|gJexSyCwSiLx<u`7$lDfHn z2e@`{U~lYZF1j9{Q5s@;8%GOb`0wX;rL^X^a<u1|ynCXxlXuPx8}G<5dT|F=EOXPr z{k?bGoZA_^yJN-D^Y@ls&3$GV5(=%<^1gFf;n?dvf^ItUB{<11{8)<p$ya~CY`k6* zLvBDJ4e(5r`on{_@-P#<{R50l?gQwVUC?r}E6fv16hiS1xW4PHLMtgDf~augXnw95 zp_Z~r*e%+q)q0d7Jh2fHEx2I9CnO$m%;Y0LVXxq&B05jB;zv;5daf3gAk>>iDsW&D z>gExQs|r*upCnXbHmO`JJfbc?1=CE`2F<ZR638X;Ye}X$a<a=1rp045eZPx_qSNf^ zK@pB!g45f_8$tDkhKo@!Y35Z2ve{+C=D-y@oS@b1wYVkPPNV>a4>)M-<jhYAOPGGN zWNyjH5V7?30HHnwqki}c;Te3Ylp!Nd!9&RFPV}zojAjCX7ClQ*X8vSNNp_4w^)4gW z4qZ|h^>aq@bV#u=%jY4H3s$IjNd@t4PX75FDajckSz-cYu}Oe+lHsaanG!Fe$w`uU zp)$#jPQ6mjJ!J13A2P-+&I-8Zr!lOT#ajKO9A=s#gx1~6)B>Kol7$!NDK<|WS!)Lv zqCF5jZIB1u^y61DFPH0c%yOP0uK=Wc(mnt&@7%1tRwg_3Nq#oXI^j#|(DL3Eq(GaS zCuX&0v=kbtZnxsBNAGP>X9MG}Zebm*w|{kuC`di|_LkIv+PuFd5{?Pp>rlx;+e+bb zdHOs1F#L`eX_{?>@J%e~_|+R=&L76~_rsh8elmEGi7Yo?Ekfx@1nCVjsb%6`y+g}g z&Lz-2lt+?dy$2VRs0F=sX6XUYkW=fWTdF+*bf6ayEZrUr>3Cq9h9xSos1o<0de|X$ zGAU}@W$331(~zCf&-zg{#^fEY!@Tc!I<1E?6=f;nOf{c3m(%-jR;0C!FKz3Jr1-ct zwxexlerHF*+P1b8+bWOoa4Sb^?peD3W~|Yc(bKA2mSGS@&}bHdRNJAmXiIowPBew# zS#i<ZdfFCn^quwAF}jSFr)@-f5@%${_ECJ89xw5cjHdo{TDYTEN^ZU|Jz?k>9HT0| zJr{%)dYv`$v)Z{Xt%}7yH^u8E<`9Og$+Kr%;0zpo^Rx=-HD)ZQM~+s!YmEGe<GaS9 z?d+UqTu}v<H)$rCCmgBtNytcbdfBfk^Fe$iUdgnAbn8Tg*QXi<{WRVwO#&bj<o~s} zG;#1N9%xD9#N?8D)%<8Y_tk@2?VUskW{J=zuu4hljGX+=*hfDgmZg2-xw5p$$-y(N zu$-9HWYA9~XzIaCb%bE)R~w1b?(D9e-i|?<c6unD603qRr*xXeA~tqff^Rj1dX`V0 zp|4~#V5pQ6nLEVhw0N1V3S{~<IS%n$%C?DGmgsbS%JX=UOe*1}l;w%IhUk;m0&*cX zseF3r-fK+oGhX^+6PRUpBN$x6o{*cskO!+5V5qBiDV5@j2gK@}jmm^+F@Yv7LGrAW zoVig!jz=ZV3Kd{o*b0OY<>s3`fv6R<+*&+QO9_CsK<t)*WOXNk2bHu<aUQSz)2acQ z;OW}HxN=qyu5kL>A4>8>TM?%0%rQC#rKTunJ>ubMZ1L3^E)_WI{i972WIF>Kd`zi_ Sx`@Un^5ILLM6I9=#{UHfslo>U literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/po/vi.po b/devspec.en_US/project/recutils/po/vi.po new file mode 100755 index 0000000..d24f2d8 --- /dev/null +++ b/devspec.en_US/project/recutils/po/vi.po @@ -0,0 +1,1972 @@ +# Vietnamese translation for recutils. +# Copyright © 2014 Free Software Foundation, Inc. +# This file is distributed under the same license as the recutils package. +# Trần Ngọc Quân <vnwildman@gmail.com>, 2012-2014. +# +msgid "" +msgstr "" +"Project-Id-Version: recutils 1.6.90\n" +"Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" +"POT-Creation-Date: 2019-01-03 10:32+0100\n" +"PO-Revision-Date: 2014-03-20 09:17+0700\n" +"Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n" +"Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n" +"Language: vi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Bugs: Report translation errors to the Language-Team address.\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Language-Team-Website: <http://translationproject.org/team/vi.html>\n" +"X-Generator: LocFactoryEditor 1.8\n" +"X-Poedit-SourceCharset: UTF-8\n" + +#: lib/closeout.c:122 +msgid "write error" +msgstr "lỗi ghi" + +#: lib/copy-acl.c:54 +#, c-format +msgid "preserving permissions for %s" +msgstr "" + +#: lib/error.c:195 +msgid "Unknown system error" +msgstr "Lỗi hệ thống không rõ" + +#: lib/execute.c:185 lib/execute.c:258 lib/wait-process.c:282 +#: lib/wait-process.c:356 +#, c-format +msgid "%s subprocess failed" +msgstr "tiến trình con %s bị lỗi" + +#: lib/getopt.c:278 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous\n" +msgstr "%s: tùy chọn “-W %s” chưa rõ ràng\n" + +#: lib/getopt.c:284 +#, fuzzy, c-format +msgid "%s: option '%s%s' is ambiguous; possibilities:" +msgstr "%s: tùy chọn “%s” chưa rõ ràng; khả năng là:" + +#: lib/getopt.c:319 +#, fuzzy, c-format +msgid "%s: unrecognized option '%s%s'\n" +msgstr "%s: không nhận ra tùy chọn “%c%s”\n" + +#: lib/getopt.c:345 +#, fuzzy, c-format +msgid "%s: option '%s%s' doesn't allow an argument\n" +msgstr "%s: tùy chọn “%c%s” không cho phép đối số\n" + +#: lib/getopt.c:360 +#, fuzzy, c-format +msgid "%s: option '%s%s' requires an argument\n" +msgstr "%s: tùy chọn “--%s” cần một đối số\n" + +#: lib/getopt.c:621 +#, c-format +msgid "%s: invalid option -- '%c'\n" +msgstr "%s: tùy chọn không hợp lệ -- “%c”\n" + +#: lib/getopt.c:636 lib/getopt.c:682 +#, c-format +msgid "%s: option requires an argument -- '%c'\n" +msgstr "%s: tùy chọn cần một đối số -- “%c”\n" + +#: lib/obstack.c:338 lib/obstack.c:340 lib/xalloc-die.c:34 +msgid "memory exhausted" +msgstr "hết bộ nhớ" + +#: parse-datetime.y:440 parse-datetime.y:540 +#, c-format +msgid "parsed %s part: " +msgstr "" + +#: parse-datetime.y:455 +#, c-format +msgid "year: %04<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:483 +#, c-format +msgid "%s (day ordinal=%<PRIdMAX> number=%d)" +msgstr "" + +#: parse-datetime.y:514 +#, c-format +msgid "number of seconds: %<PRIdMAX>" +msgstr "" + +#: parse-datetime.y:547 +msgid "today/this/now\n" +msgstr "" + +#: parse-datetime.y:612 +msgid "number of seconds" +msgstr "" + +#: parse-datetime.y:625 +msgid "datetime" +msgstr "" + +#: parse-datetime.y:630 +msgid "time" +msgstr "" + +#: parse-datetime.y:635 +msgid "local_zone" +msgstr "" + +#: parse-datetime.y:640 +msgid "zone" +msgstr "" + +#: parse-datetime.y:645 +msgid "date" +msgstr "" + +#: parse-datetime.y:650 +msgid "day" +msgstr "" + +#: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 +msgid "relative" +msgstr "" + +#: parse-datetime.y:658 +msgid "number" +msgstr "" + +#: parse-datetime.y:662 +msgid "hybrid" +msgstr "" + +#: parse-datetime.y:820 +#, c-format +msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" +msgstr "" + +#: parse-datetime.y:832 +#, c-format +msgid "" +"warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" +msgstr "" + +#: parse-datetime.y:1276 +#, c-format +msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1286 +#, c-format +msgid "error: out-of-range year %<PRIdMAX>\n" +msgstr "" + +#: parse-datetime.y:1524 +#, fuzzy, c-format +msgid "error: unknown word '%s'\n" +msgstr "lỗi: không thể đọc tập tin %s\n" + +#: parse-datetime.y:1673 +#, fuzzy +msgid "error: invalid date/time value:\n" +msgstr "kiểu liệt kê (enum) không hợp lệ." + +#: parse-datetime.y:1674 +#, c-format +msgid " user provided time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1676 +#, c-format +msgid " normalized time: '%s'\n" +msgstr "" + +#: parse-datetime.y:1699 +msgid " possible reasons:\n" +msgstr "" + +#: parse-datetime.y:1701 +msgid " non-existing due to daylight-saving time;\n" +msgstr "" + +#: parse-datetime.y:1703 +msgid " invalid day/month combination;\n" +msgstr "" + +#: parse-datetime.y:1704 +msgid " numeric values overflow;\n" +msgstr "" + +#: parse-datetime.y:1705 +msgid "incorrect timezone" +msgstr "" + +#: parse-datetime.y:1706 +msgid "missing timezone" +msgstr "" + +#: parse-datetime.y:1826 +msgid "error: initial year out of range\n" +msgstr "" + +#: parse-datetime.y:1923 +#, fuzzy +msgid "error: parsing failed\n" +msgstr "gặp lỗi khi phân tích ngữ pháp tập tin CSV: %s\n" + +#: parse-datetime.y:1924 +#, fuzzy, c-format +msgid "error: parsing failed, stopped at '%s'\n" +msgstr "gặp lỗi khi phân tích ngữ pháp tập tin CSV: %s\n" + +#: parse-datetime.y:1934 +msgid "input timezone: " +msgstr "" + +#: parse-datetime.y:1937 +#, c-format +msgid "'@timespec' - always UTC" +msgstr "" + +#: parse-datetime.y:1939 +#, c-format +msgid "parsed date/time string" +msgstr "" + +#: parse-datetime.y:1943 +#, c-format +msgid "TZ=\"%s\" in date string" +msgstr "" + +#: parse-datetime.y:1947 +#, c-format +msgid "TZ=\"UTC0\" environment value or -u" +msgstr "" + +#: parse-datetime.y:1950 +#, c-format +msgid "TZ=\"%s\" environment value" +msgstr "" + +#: parse-datetime.y:1953 +#, c-format +msgid "system default" +msgstr "" + +#: parse-datetime.y:1995 +msgid "error: year, month, or day overflow\n" +msgstr "" + +#: parse-datetime.y:2006 +#, fuzzy, c-format +msgid "error: invalid hour %<PRIdMAX>%s\n" +msgstr "%s:%s: lỗi: kiểu bản ghi %s không hợp lệ\n" + +#: parse-datetime.y:2014 +#, c-format +msgid "using specified time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2015 +#, c-format +msgid "using current time as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2069 +#, c-format +msgid "error: tzalloc (\"%s\") failed\n" +msgstr "" + +#: parse-datetime.y:2114 +#, c-format +msgid "" +"error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " +"date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2125 +#, c-format +msgid "new start date: '%s' is '%s'\n" +msgstr "" + +#: parse-datetime.y:2134 +#, c-format +msgid "using current date as starting value: '%s'\n" +msgstr "" + +#: parse-datetime.y:2138 +#, c-format +msgid "warning: day (%s) ignored when explicit dates are given\n" +msgstr "" + +#: parse-datetime.y:2142 +#, c-format +msgid "starting date/time: '%s'\n" +msgstr "" + +#: parse-datetime.y:2152 +msgid "" +"warning: when adding relative months/years, it is recommended to specify the " +"15th of the months\n" +msgstr "" + +#: parse-datetime.y:2157 +msgid "warning: when adding relative days, it is recommended to specify noon\n" +msgstr "" + +#: parse-datetime.y:2167 +#, fuzzy, c-format +msgid "error: %s:%d\n" +msgstr ": lỗi:" + +#: parse-datetime.y:2181 +#, c-format +msgid "error: adding relative date resulted in an invalid date: '%s'\n" +msgstr "" + +#: parse-datetime.y:2190 +#, c-format +msgid "" +"after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " +"days),\n" +msgstr "" + +#: parse-datetime.y:2194 +#, c-format +msgid " new date/time = '%s'\n" +msgstr "" + +#: parse-datetime.y:2213 +msgid "warning: daylight saving time changed after date adjustment\n" +msgstr "" + +#: parse-datetime.y:2232 +msgid "warning: month/year adjustment resulted in shifted dates:\n" +msgstr "" + +#: parse-datetime.y:2235 +#, c-format +msgid " adjusted Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2237 +#, c-format +msgid " normalized Y M D: %s %02d %02d\n" +msgstr "" + +#: parse-datetime.y:2265 +#, c-format +msgid "error: timezone %d caused time_t overflow\n" +msgstr "" + +#: parse-datetime.y:2275 +#, c-format +msgid "'%s' = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2303 +msgid "error: adding relative time caused an overflow\n" +msgstr "" + +#: parse-datetime.y:2314 +#, c-format +msgid "" +"after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " +"seconds, %+d ns),\n" +msgstr "" + +#: parse-datetime.y:2319 +#, c-format +msgid " new time = %<PRIdMAX> epoch-seconds\n" +msgstr "" + +#: parse-datetime.y:2335 +msgid "warning: daylight saving time changed after time adjustment\n" +msgstr "" + +#: parse-datetime.y:2345 +msgid "timezone: system default\n" +msgstr "" + +#: parse-datetime.y:2347 +msgid "timezone: Universal Time\n" +msgstr "" + +#: parse-datetime.y:2349 +#, c-format +msgid "timezone: TZ=\"%s\" environment value\n" +msgstr "" + +#: parse-datetime.y:2353 +#, c-format +msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" +msgstr "" + +#: parse-datetime.y:2359 +#, c-format +msgid "final: %s (UTC)\n" +msgstr "" + +#: parse-datetime.y:2374 +#, c-format +msgid "final: %s (UTC%s)\n" +msgstr "" + +#: parse-datetime.y:2378 +#, c-format +msgid "final: %s (unknown time zone offset)\n" +msgstr "" + +#. TRANSLATORS: +#. Get translations for open and closing quotation marks. +#. The message catalog should translate "`" to a left +#. quotation mark suitable for the locale, and similarly for +#. "'". For example, a French Unicode local should translate +#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE +#. QUOTATION MARK), respectively. +#. +#. If the catalog has no translation, we will try to +#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and +#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the +#. current locale is not Unicode, locale_quoting_style +#. will quote 'like this', and clocale_quoting_style will +#. quote "like this". You should always include translations +#. for "`" and "'" even if U+2018 and U+2019 are appropriate +#. for your locale. +#. +#. If you don't know what to put here, please see +#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> +#. and use glyphs suitable for your language. +#: lib/quotearg.c:362 +msgid "`" +msgstr "“" + +#: lib/quotearg.c:363 +msgid "'" +msgstr "”" + +#: lib/regcomp.c:135 +msgid "Success" +msgstr "Thành công" + +#: lib/regcomp.c:138 +msgid "No match" +msgstr "Không tìm thấy" + +#: lib/regcomp.c:141 +msgid "Invalid regular expression" +msgstr "Biểu thức chính quy không hợp lệ" + +#: lib/regcomp.c:144 +msgid "Invalid collation character" +msgstr "Ký tự đối chiếu không hợp lệ" + +#: lib/regcomp.c:147 +msgid "Invalid character class name" +msgstr "Tên lớp ký tự không hợp lệ" + +#: lib/regcomp.c:150 +msgid "Trailing backslash" +msgstr "Có dấu gạch ngược ở cuối" + +#: lib/regcomp.c:153 +msgid "Invalid back reference" +msgstr "Sai tham chiếu ngược" + +#: lib/regcomp.c:156 +#, fuzzy +msgid "Unmatched [, [^, [:, [., or [=" +msgstr "Có một ký tự “[” hay “[^” lẻ đôi" + +#: lib/regcomp.c:159 +msgid "Unmatched ( or \\(" +msgstr "Có một ký tự “(” hay “\\(” lẻ đôi" + +#: lib/regcomp.c:162 +msgid "Unmatched \\{" +msgstr "Có một ký tự “\\{” lẻ đôi" + +#: lib/regcomp.c:165 +msgid "Invalid content of \\{\\}" +msgstr "Nội dung của “\\{\\}” không hợp lệ" + +#: lib/regcomp.c:168 +msgid "Invalid range end" +msgstr "Sai kết thúc phạm vi" + +#: lib/regcomp.c:171 +msgid "Memory exhausted" +msgstr "Hết bộ nhớ" + +#: lib/regcomp.c:174 +msgid "Invalid preceding regular expression" +msgstr "Sai biểu thức chính quy đi trước" + +#: lib/regcomp.c:177 +msgid "Premature end of regular expression" +msgstr "Kết thúc sớm biểu thức chính quy" + +#: lib/regcomp.c:180 +msgid "Regular expression too big" +msgstr "Biểu thức chính quy quá lớn" + +#: lib/regcomp.c:183 +msgid "Unmatched ) or \\)" +msgstr "Có một ký tự “)” hay “\\)” lẻ đôi" + +#: lib/regcomp.c:676 +msgid "No previous regular expression" +msgstr "Không có biểu thức chính quy đi trước" + +#: lib/set-acl.c:46 +#, c-format +msgid "setting permissions for %s" +msgstr "" + +#: lib/version-etc.c:73 +#, c-format +msgid "Packaged by %s (%s)\n" +msgstr "" + +#: lib/version-etc.c:76 +#, c-format +msgid "Packaged by %s\n" +msgstr "" + +#. TRANSLATORS: Translate "(C)" to the copyright symbol +#. (C-in-a-circle), if this symbol is available in the user's +#. locale. Otherwise, do not translate "(C)"; leave it as-is. +#: lib/version-etc.c:83 +msgid "(C)" +msgstr "" + +#: lib/version-etc.c:85 +#, fuzzy +msgid "" +"\n" +"License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +"\n" +msgstr "" +"Tác quyền © %s Jose E. Marchesi.\n" +"Giấy Phép Công Cộng GNU (GPL), phiên bản 3 hay sau <http://gnu.org/licenses/" +"gpl.html>.\n" +"Đây là phần mềm tự do: bạn có quyền thay đổi và phát hành lại nó.\n" +"KHÔNG CÓ BẢO HÀNH GÌ CẢ, với điều kiện được pháp luật cho phép.\n" + +#. TRANSLATORS: %s denotes an author name. +#: lib/version-etc.c:102 +#, c-format +msgid "Written by %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:106 +#, fuzzy, c-format +msgid "Written by %s and %s.\n" +msgstr "" +"\n" +"Được viết bởi Jose E. Marchesi." + +#. TRANSLATORS: Each %s denotes an author name. +#: lib/version-etc.c:110 +#, fuzzy, c-format +msgid "Written by %s, %s, and %s.\n" +msgstr "" +"\n" +"Được viết bởi Jose E. Marchesi." + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:117 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:124 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:131 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:139 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:147 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:156 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, and %s.\n" +msgstr "" + +#. TRANSLATORS: Each %s denotes an author name. +#. You can use line breaks, estimating that each author name occupies +#. ca. 16 screen columns and that a screen line has ca. 80 columns. +#: lib/version-etc.c:167 +#, c-format +msgid "" +"Written by %s, %s, %s,\n" +"%s, %s, %s, %s,\n" +"%s, %s, and others.\n" +msgstr "" + +#. TRANSLATORS: The placeholder indicates the bug-reporting address +#. for this package. Please add _another line_ saying +#. "Report translation bugs to <...>\n" with the address for translation +#. bugs (typically your translation team's web or email address). +#: lib/version-etc.c:245 +#, fuzzy, c-format +msgid "" +"\n" +"Report bugs to: %s\n" +msgstr "" +"Thông báo lỗi cho: %s\n" +"Thông báo lỗi dịch cho: <http://translationproject.org/team/vi.html>.\n" + +#: lib/version-etc.c:247 utils/recutl.c:125 +#, c-format +msgid "Report %s bugs to: %s\n" +msgstr "" +"Thông báo lỗi %s cho: %s\n" +"Thông báo lỗi dịch cho: <http://translationproject.org/team/vi.html>.\n" + +#: lib/version-etc.c:251 utils/recutl.c:129 +#, c-format +msgid "%s home page: <%s>\n" +msgstr "Trang chủ %s: <%s>\n" + +#: lib/version-etc.c:253 +#, fuzzy, c-format +msgid "%s home page: <https://www.gnu.org/software/%s/>\n" +msgstr "Trang chủ %s: <http://www.gnu.org/software/recutils/>\n" + +#: lib/version-etc.c:256 +#, fuzzy +msgid "General help using GNU software: <https://www.gnu.org/gethelp/>\n" +msgstr "" +"Trợ giúp chung về sử dụng phần mềm GNU: <http://www.gnu.org/gethelp/>\n" + +#: lib/w32spawn.h:49 +#, c-format +msgid "_open_osfhandle failed" +msgstr "_open_osfhandle gặp lỗi" + +#: lib/w32spawn.h:90 +#, c-format +msgid "cannot restore fd %d: dup2 failed" +msgstr "không thể phục hồi bộ mô tả tập tin %d: dup2 gặp lỗi" + +#: lib/wait-process.c:223 lib/wait-process.c:255 lib/wait-process.c:317 +#, c-format +msgid "%s subprocess" +msgstr "tiến trình con %s" + +#: lib/wait-process.c:274 lib/wait-process.c:346 +#, c-format +msgid "%s subprocess got fatal signal %d" +msgstr "tiến trình con %s đã nhận tín hiệu nghiêm trọng %d" + +#: src/rec-fex.c:451 +#, c-format +msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" +msgstr "lỗi nội bộ: đã vượt quá REC_FEX_MAX_ELEMS. Hãy báo cáo lỗi này.\n" + +#: src/rec-int.c:176 +#, c-format +msgid "%s: error: the number of records of type %s should be %zd.\n" +msgstr "%s: lỗi: số bản ghi của kiểu %s phải là %zd.\n" + +#: src/rec-int.c:186 +#, c-format +msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" +msgstr "%s: lỗi: có quá nhiều bản ghi cho kiểu %s. Tối đa là %zd.\n" + +#: src/rec-int.c:193 +#, c-format +msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" +msgstr "%s: lỗi: có quá ít bản ghi cho kiểu %s. Tối thiểu là %zd.\n" + +#: src/rec-int.c:409 src/rec-int.c:463 src/rec-int.c:520 src/rec-int.c:564 +#: utils/recutl.c:207 +msgid "out of memory\n" +msgstr "không đủ bộ nhớ\n" + +#: src/rec-int.c:424 +#, c-format +msgid "%s:%s: error: mandatory field '%s' not found in record\n" +msgstr "%s:%s: lỗi: trường yêu cầu “%s” không tìm thấy trong bản ghi\n" + +#: src/rec-int.c:487 +#, c-format +msgid "%s:%s: error: field '%s' not allowed in this record set\n" +msgstr "%s:%s: lỗi: không cho phép trường “%s” trong tập hợp bản ghi này\n" + +#: src/rec-int.c:534 +#, c-format +msgid "%s:%s: error: field '%s' should be unique in this record\n" +msgstr "%s:%s: cảnh báo: trường “%s” cần phải là duy nhất trong bản ghi này\n" + +#: src/rec-int.c:578 +#, c-format +msgid "%s:%s: error: prohibited field '%s' found in record\n" +msgstr "%s:%s: lỗi: trường cấm “%s” tìm thấy trong bản ghi\n" + +#: src/rec-int.c:610 +#, c-format +msgid "%s:%s: error: %%constraint[%d] violated in record\n" +msgstr "%s:%s: lỗi: %%constraint[%d] bị vi phạm trong bản ghi\n" + +#: src/rec-int.c:647 +#, c-format +msgid "%s:%s: error: confidential field is not encrypted\n" +msgstr "%s:%s: lỗi: trường bí mật thì chưa được mã hóa\n" + +#: src/rec-int.c:699 +#, c-format +msgid "%s:%s: error: key field '%s' not found in record\n" +msgstr "%s:%s: lỗi: trường yêu cầu “%s” không tìm thấy trong bản ghi\n" + +#: src/rec-int.c:708 +#, c-format +msgid "%s:%s: error: multiple key fields '%s' in record\n" +msgstr "%s:%s: lỗi: có nhiều trường khóa “%s” trong bản ghi\n" + +#: src/rec-int.c:751 +#, c-format +msgid "%s:%s: error: duplicated key value in field '%s' in record\n" +msgstr "%s:%s: lỗi: trùng lặp khóa trong trường “%s” trong bản ghi\n" + +#: src/rec-int.c:799 +#, c-format +msgid "%s:%s: error: missing %%rec field in record descriptor\n" +msgstr "%s:%s: lỗi: thiếu trường %%rec trong bộ mô tả bản ghi\n" + +#: src/rec-int.c:807 +#, c-format +msgid "%s:%s: error: too many %%rec fields in record descriptor\n" +msgstr "%s:%s: lỗi: quá nhiều trường %%rec trong bộ mô tả bản ghi\n" + +#: src/rec-int.c:817 +#, c-format +msgid "%s:%s: error: invalid record type %s\n" +msgstr "%s:%s: lỗi: kiểu bản ghi %s không hợp lệ\n" + +#: src/rec-int.c:828 +#, c-format +msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" +msgstr "%s:%s: lỗi: chỉ cho phép một trường %%key trong bộ mô tả bản ghi\n" + +#: src/rec-int.c:838 +#, c-format +msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" +msgstr "%s:%s: lỗi: chỉ cho phép một trường %%size trong bộ mô tả bản ghi\n" + +#: src/rec-int.c:848 +#, c-format +msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" +msgstr "%s:%s: lỗi: chỉ cho phép một trường %%sort trong bộ mô tả bản ghi\n" + +#: src/rec-int.c:871 +#, c-format +msgid "" +"%s:%s: error: expected a comma-separated list of fields before the type " +"specification\n" +msgstr "" +"%s:%s: lỗi: cần danh sách các trường ngăn cách bằng dấu phẩy trước đặc tả " +"kiểu\n" + +#: src/rec-int.c:897 src/rec-int.c:950 +#, c-format +msgid "%s:%s: error: the referred type %s does not exist\n" +msgstr "%s:%s: lỗi: kiểu tham chiếu %s không tồn tại\n" + +#: src/rec-int.c:909 +#, c-format +msgid "%s:%s: error: invalid type specification\n" +msgstr "%s:%s: lỗi: đặc tả kiểu không hợp lệ\n" + +#: src/rec-int.c:924 +#, c-format +msgid "%s:%s: error: expected a type name before the type specification\n" +msgstr "%s:%s: lỗi: cần tên kiểu trước đặc tả kiểu\n" + +#: src/rec-int.c:962 +#, c-format +msgid "%s:%s: error: invalid typedef specification\n" +msgstr "%s:%s: lỗi: đặc tả kiểu không hợp lệ\n" + +#: src/rec-int.c:984 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" +msgstr "" +"%s:%s: lỗi: giá trị cho %s[%zd] không phải là một biểu thức chọn hợp lệ\n" + +#: src/rec-int.c:1015 +#, c-format +msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" +msgstr "" +"%s:%s: lỗi: giá trị cho %s[%zd] không phải là một danh sách tên trường\n" + +#: src/rec-int.c:1028 +#, c-format +msgid "" +"%s:%s: error: value for %s should be a number optionally preceded by >, <, " +">= or <=.\n" +msgstr "" +"%s:%s: lỗi: giá trị cho %s phải là con số tùy chọn được treo trước bằng >, " +"<, >= or <=.\n" + +#: src/rec-int.c:1044 +#, c-format +msgid "%s:%s: error: value for %s should be a list of field names.\n" +msgstr "%s:%s: lỗi: giá trị cho %s phải là danh sách tên trường.\n" + +#: src/rec-int.c:1072 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range, uuid " +"or date\n" +msgstr "" +"%s:%s: lỗi: trường tự-động-tăng %s phải là kiểu int, vùng, uuid hay ngày " +"tháng\n" + +#: src/rec-int.c:1074 +#, c-format +msgid "" +"%s:%s: error: auto-incremented field %s should be of type int, range or " +"date\n" +msgstr "" +"%s:%s: lỗi: trường tự-động-tăng %s phải là kiểu int, vùng hay ngày tháng\n" + +#: src/rec-int.c:1157 +#, c-format +msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" +msgstr "%s:%s: lỗi: không thể lấy về bộ mô tả máy chủ từ địa chỉ url %s.\n" + +#: src/rec-int.c:1176 +#, c-format +msgid "%s:%s: error: could not read external descriptor from file %s.\n" +msgstr "%s:%s: lỗi: không thể đọc bộ mô tả mở rộng từ tập tin %s.\n" + +#: src/rec-int.c:1191 +#, c-format +msgid "%s:%s: error: %s does not contain valid rec data.\n" +msgstr "%s:%s: lỗi: %s không chứa dữ liệu rec hợp lệ.\n" + +#: src/rec-int.c:1205 +#, c-format +msgid "%s:%s: error: %s does not contain information for type %s.\n" +msgstr "%s:%s: lỗi: %s không chứa thông tin cho kiểu %s.\n" + +#: src/rec-types.c:448 +#, c-format +msgid "" +"internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " +"in rec_type_new().\n" +msgstr "" +"lỗi nội bộ: rec-types: nhận REC_TYPE_NONE từ rec_type_parse_type_kind() " +"trong rec_type_new().\n" + +#: src/rec-types.c:1178 +msgid "invalid integer." +msgstr "số nguyên không hợp lệ." + +#: src/rec-types.c:1208 +msgid "invalid 'field' value." +msgstr "giá trị không hợp lệ cho “trường”." + +#: src/rec-types.c:1231 +msgid "invalid 'uuid' value." +msgstr "giá trị “uuid” không hợp lệ." + +#: src/rec-types.c:1249 +msgid "invalid 'bool' value." +msgstr "giá trị lôgíc “bool” không hợp lệ." + +#: src/rec-types.c:1272 +msgid "invalid 'range' value." +msgstr "giá trị “vùng” không hợp lệ." + +#: src/rec-types.c:1281 +#, c-format +msgid "expected an integer between %d and %d." +msgstr "cần một số nguyên nằm giữa %d và %d." + +#: src/rec-types.c:1302 +msgid "invalid 'real' value." +msgstr "giá trị thực “real” không hợp lệ." + +#: src/rec-types.c:1320 +#, c-format +msgid "value too large. Expected a size <= %zu." +msgstr "giá trị quá lớn. Cần kích thước <= %zu." + +#: src/rec-types.c:1341 +msgid "invalid 'line' value." +msgstr "giá trị dòng “line” không hợp lệ." + +#: src/rec-types.c:1360 +msgid "value does not match the regexp." +msgstr "giá trị không khớp với biểu thức chính quy regexp." + +#: src/rec-types.c:1383 +msgid "invalid date." +msgstr "ngày tháng không hợp lệ." + +#: src/rec-types.c:1399 +msgid "invalid email." +msgstr "địa chỉ thư điện tử không hợp lệ." + +#: src/rec-types.c:1444 +msgid "invalid enum value." +msgstr "kiểu liệt kê (enum) không hợp lệ." + +#: src/rec-utils.c:93 +#, c-format +msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" +msgstr "" +"lỗi nội bộ: rec_int_rec_extract_file: lỗi khi biên dịch biểu thức chính quy " +"(regexp).\n" + +#: src/rec-utils.c:121 src/rec-utils.c:150 +#, c-format +msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" +msgstr "" +"lỗi nội bộ: rec_int_rec_extract_url: lỗi biên dịch biểu thức chính quy " +"regexp.\n" + +#: src/rec-utils.c:304 +#, c-format +msgid "internal error: rec_match: error compiling regexp.\n" +msgstr "lỗi nội bộ: rec_match: lỗi biên dịch biểu thức chính quy regexp.\n" + +#. TRANSLATORS: --help output, csv2rec synopsis. +#. no-wrap +#: utils/csv2rec.c:105 +#, c-format +msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" +msgstr "Cách dùng: csv2rec [CÁC-TÙY-CHỌN]... [TẬP-TIN-CSV]\n" + +#. TRANSLATORS: --help output, csv2rec short description. +#. no-wrap +#: utils/csv2rec.c:110 +msgid "Convert csv data into rec data.\n" +msgstr "Chuyển đổi dữ liệu từ kiểu csv sang rec.\n" + +#. TRANSLATORS: --help output, csv2rec options. +#. no-wrap +#: utils/csv2rec.c:116 +msgid "" +" -t, --type=TYPE type name for the converted records; " +"if this\n" +" parameter is ommited then no type is " +"used.\n" +" -s, --strict be strict parsing the csv file.\n" +" -e, --omit-empty omit empty fields.\n" +msgstr "" +" -t, --type=KIỂU tên kiểu cho các bản ghi được chuyển " +"đổi; nếu tham số\n" +" này được để trống thì kiểu mặc định " +"sẽ được áp dụng.\n" +" -s, --strict phân tích theo chuẩn csv.\n" +" -e, --omit-empty bỏ qua các trường trống.\n" + +#: utils/csv2rec.c:230 +#, c-format +msgid "invalid field name '%s' in header\n" +msgstr "tên người trường sai “%s” trong phần mở đầu\n" + +#: utils/csv2rec.c:259 +#, fuzzy, c-format +msgid "" +"%s: %lu: this line contains %lu fields, but %lu header fields were read\n" +msgstr "%s: %d: dòng này chứa %d trường, nhưng mà lại đọc được %d trường đầu\n" + +#: utils/csv2rec.c:347 utils/recdel.c:266 utils/recset.c:358 utils/recutl.c:328 +#, c-format +msgid "cannot read file %s\n" +msgstr "không thể đọc tập tin %s\n" + +#: utils/csv2rec.c:358 +msgid "failed to initialize csv parser\n" +msgstr "gặp lỗi khi khởi tạo bộ phân tích csv\n" + +#: utils/csv2rec.c:376 +#, c-format +msgid "error while parsing CSV file: %s\n" +msgstr "gặp lỗi khi phân tích ngữ pháp tập tin CSV: %s\n" + +#. TRANSLATORS: --help output, mdb2rec synopsis. +#. no-wrap +#: utils/mdb2rec.c:103 +#, c-format +msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" +msgstr "Cách dùng: mdb2rec [TÙY-CHỌN]... TẬP-TIN-MDB [BẢNG]\n" + +#. TRANSLATORS: --help output, mdb2rec short description. +#. no-wrap +#: utils/mdb2rec.c:108 +msgid "Convert an mdb file into a rec file.\n" +msgstr "Chuyển đổi tập tin từ kiểu mdb sang rec.\n" + +#. TRANSLATORS: --help output, mdb2rec options. +#. no-wrap +#: utils/mdb2rec.c:114 +msgid "" +" -s, --system-tables include system tables.\n" +" -e, --keep-empty-fields don't prune empty fields in the rec\n" +" output.\n" +" -l, --list-tables dump a list of the table names " +"contained\n" +" in the mdb file.\n" +msgstr "" +" -s, --system-tables bao gồm các bảng hệ thống.\n" +" -e, --keep-empty-fields không cắt cụt các trường trống trong " +"kết\n" +" xuất rec.\n" +" -l, --list-tables đổ danh sách tên các bảng chứa trong\n" +" trong tập tin mdb.\n" + +#: utils/mdb2rec.c:251 utils/mdb2rec.c:315 +#, c-format +msgid "failed to normalise record type name %s\n" +msgstr "gặp lỗi khi tiêu chuẩn hóa tên kiểu bản ghi %s\n" + +#: utils/mdb2rec.c:259 utils/mdb2rec.c:270 +#, c-format +msgid "failed to normalise field name %s\n" +msgstr "gặp lỗi khi tiêu chuẩn hóa tên trường %s\n" + +#: utils/mdb2rec.c:336 +#, c-format +msgid "failed to normalise the field name %s\n" +msgstr "gặp lỗi khi tiêu chuẩn hóa tên trường %s\n" + +#: utils/mdb2rec.c:443 utils/recins.c:208 utils/recset.c:253 +#, c-format +msgid "invalid field name %s.\n" +msgstr "tên trường không hợp lệ %s.\n" + +#: utils/mdb2rec.c:482 +#, c-format +msgid "could not open file %s\n" +msgstr "không thể mở tập tin %s\n" + +#: utils/mdb2rec.c:489 +msgid "file does not appear to be an Access database\n" +msgstr "tập tin có vẻ không phải là cơ sở dữ liệu Access\n" + +#. TRANSLATORS: --help output, rec2csv synopsis. +#. no-wrap +#: utils/rec2csv.c:86 +#, c-format +msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" +msgstr "Cách dùng: rec2csv [TÙY-CHỌN]... [TẬP-TIN-REC]\n" + +#. TRANSLATORS: --help output, rec2csv short description. +#. no-wrap +#: utils/rec2csv.c:91 +msgid "Convert rec data into csv data.\n" +msgstr "Chuyển đổi dữ liệu từ kiểu rec sang csv.\n" + +#. TRANSLATORS: --help output, rec2csv options. +#. no-wrap +#: utils/rec2csv.c:97 +msgid "" +" -d, --delim=char sets the deliminator (default ',')\n" +" -t, --type=TYPE record set to convert to csv; if this " +"parameter\n" +" is omitted then the default record " +"set is used\n" +" -S, --sort=FIELDS sort the output by the specified " +"fields.\n" +msgstr "" +" -d, --delim=ký_tự ngăn cách bằng ký tự này (mặc định là " +"“,”)\n" +" -t, --type=KIỂU tập hợp các bản ghi chuyển đổi sang " +"csv; nếu tham số này\n" +" được bỏ qua thì tập hợp các bản ghi " +"mặc định sẽ được dùng\n" +" -S, --sort=TRƯỜNG sắp xếp kết xuất theo trường này.\n" + +#: utils/rec2csv.c:142 +msgid "only one list of fields can be specified as a sorting criteria.\n" +msgstr "chỉ được chỉ ra một trường làm tiêu chí để sắp xếp.\n" + +#: utils/rec2csv.c:149 +msgid "invalid field name list in -S.\n" +msgstr "tên trường không hợp lệ trong -S.\n" + +#: utils/rec2csv.c:155 utils/recsel.c:248 utils/recsel.c:286 +msgid "internal error creating fex.\n" +msgstr "lỗi nội bộ khi tạo “fex”.\n" + +#. TRANSLATORS: --help output, recdel synopsis. +#. no-wrap +#: utils/recdel.c:89 +#, c-format +msgid "" +"Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [FILE]\n" +msgstr "" +"Cách dùng: recdel [TÙY-CHỌN]... [-t KIỂU] [-n SỐ | -e BTHỨC_BẢNGHI | -q " +"CHUỖI | -m SỐ] [TẬP-TIN]\n" + +#. TRANSLATORS: --help output, recdel short description. +#. no-wrap +#: utils/recdel.c:94 +msgid "Remove (or comment out) records from a rec file.\n" +msgstr "Gỡ bỏ (biến thành ghi chú) các bản ghi từ tập tin rec.\n" + +#. TRANSLATORS: --help output, recdel arguments. +#. no-wrap +#: utils/recdel.c:101 +msgid "" +" -c, --comment comment out the matching records " +"instead of\n" +" deleting them.\n" +" --force delete even in potentially dangerous " +"situations,\n" +" and if the deletion is violating " +"record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -c, --comment đánh dấu là ghi chú cho các bản ghi " +"được tìm thấy\n" +" thay vì xóa chúng đi.\n" +" --force xóa ngay cả khi nó tiềm ẩn rủi ro,\n" +" và khi nó vi phạm các hạn chế.\n" +" --no-external không dùng mô tả từ bên ngoài.\n" +" --verbose đưa ra báo cáo chi tiết nếu việc kiểm " +"tra\n" +" tính toàn vẹn thất bại.\n" + +#. TRANSLATORS: --help output, notes on recdel. +#. no-wrap +#. TRANSLATORS: --help output, notes on recfix. +#. no-wrap +#. TRANSLATORS: --help output, notes on recins. +#. no-wrap +#: utils/recdel.c:119 utils/recfix.c:167 utils/recins.c:149 +msgid "" +"If no FILE is specified then the command acts like a filter, getting\n" +"the data from standard input and writing the result to standard output.\n" +msgstr "" +"Nếu không đưa ra TẬP-TIN thì lệnh thực hiện như là một bộ lọc, lấy\n" +"dữ liệu từ đầu vào tiêu chuẩn và kết quả đưa ra đầu ra tiêu chuẩn.\n" + +#: utils/recdel.c:136 +#, c-format +msgid "no records of type %s found.\n" +msgstr "không tìm thấy bản ghi nào thuộc kiểu %s.\n" + +#: utils/recdel.c:227 +#, c-format +msgid "ignoring a request to delete all records of type %s.\n" +msgstr "lờ đi các yêu cầu xóa các bản ghi thuộc kiểu %s.\n" + +#: utils/recdel.c:229 +msgid "use --force if you really want to proceed, or use either -n or -e.\n" +msgstr "" +"dùng --force nếu bạn thực sự muốn xử lý, hoặc dùng một trong hai tùy chọn -" +"n, -e.\n" + +#: utils/recdel.c:237 +msgid "invalid selection expression.\n" +msgstr "Biểu thức chính quy đã chọn không hợp lệ.\n" + +#: utils/recdel.c:276 utils/recfix.c:407 utils/recins.c:410 utils/recset.c:365 +#, c-format +msgid "file %s is not writable.\n" +msgstr "không thể ghi vào tập tin %s.\n" + +#. TRANSLATORS: --help output, recfix synopsis. +#. no-wrap +#: utils/recfix.c:117 +#, c-format +msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" +msgstr "" +"Cách dùng: recfix [TÙY-CHỌN]... [THAO-TÁC] [TÙY-CHỌN-THAO-TÁC]... [TẬP-TIN]\n" + +#. TRANSLATORS: --help output, recfix short description. +#. no-wrap +#: utils/recfix.c:122 +msgid "Check and fix rec files.\n" +msgstr "Kiểm tra và sửa chữa các tập tin rec.\n" + +#. TRANSLATORS: --help output, recfix global arguments. +#. no-wrap +#: utils/recfix.c:129 +msgid "" +" --no-external don't use external descriptors.\n" +" --force force the requested operation.\n" +msgstr "" +" --no-external không dùng mô tả từ bên ngoài.\n" +" --force ép buộc thao tác được yêu cầu.\n" + +#. TRANSLATORS: --help output, recfix operations. +#. no-wrap +#: utils/recfix.c:139 +msgid "" +"Operations:\n" +" --check check integrity of the specified " +"file. Default.\n" +" --sort sort the records in the specified " +"file.\n" +" --auto insert auto-generated fields in " +"records missing them.\n" +msgstr "" +"Các thao tác:\n" +" --check kiểm tra tính toàn vẹn của tập tin. " +"Mặc định.\n" +" --sort sắp xếp các bản ghi trong tập tin đã " +"cho.\n" +" --auto chèn thêm các trường auto-generated " +"vào các bản ghi bị thiếu.\n" + +#. TRANSLATORS: --help output, recfix operations related with encryption. +#. no-wrap +#: utils/recfix.c:149 +msgid "" +" --encrypt encrypt confidential fields in the " +"specified file.\n" +" --decrypt decrypt confidential fields in the " +"specified file.\n" +msgstr "" +" --encrypt mã hóa các trường trong tập tin đã " +"cho.\n" +" --decrypt giải mã các trường trong tập tin đã " +"cho.\n" + +#. TRANSLATORS: --help output, recfix encryption and decryption +#. options. +#. no-wrap +#: utils/recfix.c:158 +msgid "" +"De/Encryption options:\n" +" -s, --password=PASSWORD encrypt/decrypt with this password.\n" +msgstr "" +"Tùy chọn mã hóa và giải mã:\n" +" -s, --password=MẬT_KHẨU mã hóa hoặc giải mã dùng MẬT_KHẨU " +"này.\n" + +#: utils/recfix.c:208 +msgid "--password|-s must be used as an operation argument.\n" +msgstr "--password|-s phải được dùng như là một đối số thao tác.\n" + +#: utils/recfix.c:214 +msgid "the specified operation does not require a password.\n" +msgstr "thao tác đã cho không yêu cầu mật khẩu.\n" + +#: utils/recfix.c:219 +msgid "please specify just one password.\n" +msgstr "chỉ được phép chỉ ra một mật khẩu.\n" + +#: utils/recfix.c:230 utils/recfix.c:240 utils/recfix.c:250 utils/recfix.c:261 +#: utils/recfix.c:271 +msgid "please specify just one operation.\n" +msgstr "chỉ được phép chỉ ra một thao tác.\n" + +#: utils/recfix.c:463 +msgid "the database contains already encrypted fields\n" +msgstr "cơ sở dữ liệu đã sẵn chứa các trường được mã hóa\n" + +#: utils/recfix.c:464 +msgid "please use --force or --decrypt\n" +msgstr "hãy dùng --force hoặc --decrypt\n" + +#: utils/recfix.c:574 +msgid "unknown operation in recfix: please report this as a bug.\n" +msgstr "không hiểu thao tác recfix: hãy báo cáo đây là một lỗi.\n" + +#. TRANSLATORS: --help output, recfmt synopsis. +#. no-wrap +#: utils/recfmt.c:78 +#, c-format +msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" +msgstr "Cách dùng: recfmt [TÙY-CHỌN]... [MẪU]\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:83 +msgid "Apply a template to records read from standard input.\n" +msgstr "Áp dụng mẫu cho các bản ghi đọc từ đầu ra tiêu chuẩn.\n" + +#. TRANSLATORS: --help output, recfmt arguments. +#. no-wrap +#: utils/recfmt.c:89 +msgid "" +" -f, --file=FILENAME read the template to apply from a " +"file.\n" +msgstr "" +" -f, --file=TẬP-TIN đọc mẫu để áp dụng từ một tập tin.\n" + +#: utils/recfmt.c:123 +#, c-format +msgid "can't open file %s for reading.\n" +msgstr "Không thể mở tập tin %s để đọc.\n" + +#: utils/recfmt.c:141 +msgid "don't specify a template in the command line and -f at the same time.\n" +msgstr "đừng dùng mẫu trong câu lệnh và tùy chọn -f cùng một lúc.\n" + +#: utils/recfmt.c:164 +msgid "invalid expression in a template slot.\n" +msgstr "biểu thức không hợp lệ trong slot mẫu.\n" + +#: utils/recfmt.c:170 +msgid "error evaluating expression in a template slot.\n" +msgstr "gặp lỗi khi ước lượng giá trị của biểu thức trong slot mẫu.\n" + +#: utils/recfmt.c:204 +msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" +msgstr "" +"recfmt_apply_template: lỗi dịch biểu thức chính qui. Hãy báo cáo lỗi này.\n" + +#. TRANSLATORS: --help output, recinf synopsis. +#. no-wrap +#: utils/recinf.c:84 +#, c-format +msgid "Usage: recinf [OPTION]... [FILE]...\n" +msgstr "Cách dùng: recinf [TÙY-CHỌN]... [TẬP-TIN]...\n" + +#. TRANSLATORS: --help output, recinf short description. +#. no-wrap +#: utils/recinf.c:89 +msgid "Print information about the types of records stored in the input.\n" +msgstr "Hiển thị thông tin về các kiểu của các trường đã lưu trong đầu vào.\n" + +#. TRANSLATORS: --help output, recinf arguments. +#. no-wrap +#: utils/recinf.c:96 +msgid "" +" -t, --type=RECORD_TYPE print information on the records having " +"the\n" +" specified type.\n" +" -d, --descriptor include the full record descriptors.\n" +" -n, --names-only output just the names of the record files\n" +" found in the input.\n" +msgstr "" +" -t, --type=KIỂU-BẢN-GHI hiển thị thông tin trên những bản ghi có\n" +" kiểu đã cho.\n" +" -d, --descriptor bao gồm đầy đủ cả các mô tả bản ghi.\n" +" -n, --names-only chỉ hiển thị tên của những tập tin bản " +"ghi\n" +" được tìm thấy từ đầu vào.\n" + +#. TRANSLATORS: --help output, recinf special options. +#. no-wrap +#: utils/recinf.c:109 +msgid "" +"Special options:\n" +" -S, --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Các tùy chọn đặc biệt:\n" +" -S, --print-sexps hiển thị dữ liệu ở định dạng sexps " +"thay cho rec.\n" + +#: utils/recinf.c:263 +#, c-format +msgid "error: cannot read file %s\n" +msgstr "lỗi: không thể đọc tập tin %s\n" + +#. TRANSLATORS: --help output, recins synopsis. +#. no-wrap +#: utils/recins.c:111 +#, c-format +msgid "" +"Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " +"NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" +msgstr "" +"Cách dùng: recins [TÙY-CHỌN]... [-t KIỂU] [-n SỐ | -e BTHỨC_BẢN_GHI | -q " +"CHUỖI | -m SỐ] [(-f TÊN -v CHUỖI]|[-R RECDATA)]... [TẬP-TIN]\n" + +#. TRANSLATORS: --help output, recins short description. +#. no-wrap +#: utils/recins.c:116 +msgid "Insert new records in a rec database.\n" +msgstr "Chèn thêm các bản ghi mới vào cơ sở dữ liệu rec.\n" + +#. TRANSLATORS: --help output, recins arguments. +#. no-wrap +#: utils/recins.c:122 +msgid "" +" -f, --field=STR field name; should be followed by a -" +"v.\n" +" -v, --value=STR field value; should be preceded by an -" +"f.\n" +" -r, --record=STR record that will be inserted in the " +"file.\n" +" --force insert the record even if it is " +"violating\n" +" record restrictions.\n" +" --no-external don't use external descriptors.\n" +" --no-auto don't insert auto generated fields.\n" +" --verbose give a detailed report if the " +"integrity check\n" +" fails.\n" +msgstr "" +" -f, --field=CHUỖI tên trường; nên được theo sau -v.\n" +" -v, --value=CHUỖI tên trường; nên được theo trước -f.\n" +" -r, --record=CHUỖI bản ghi sẽ được chèn trong tập tin.\n" +" --force chèn bản ghi thậm chí nó vi phạm\n" +" các hạn chế.\n" +" --no-external không dùng các mô tả từ bên ngoài.\n" +" --no-auto không chèn các trường tự động.\n" +" --verbose đưa ra thông tin chi tiết nếu không " +"đạt\n" +" khi kiểm tra tính toàn vẹn dữ liệu.\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recins.c:136 +msgid "" +" -s, --password=STR encrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=MK mã hóa các trường bằng mật khẩu đã " +"cho.\n" + +#: utils/recins.c:195 +msgid "a -f should be followed by a -v\n" +msgstr "-f phải theo sau bởi -v\n" + +#: utils/recins.c:219 +msgid "a -v should be preceded by a -f\n" +msgstr "-v phải được đi trước bởi -f\n" + +#: utils/recins.c:244 utils/recsel.c:223 +msgid "more than one password was specified\n" +msgstr "đã đưa ra nhiều hơn một mật khẩu\n" + +#: utils/recins.c:258 +msgid "error while parsing the record provided by -r\n" +msgstr "gặp lỗi trong khi phân tích bản ghi cung cấp bởi tùy chọn -r\n" + +#: utils/recins.c:293 +#, c-format +msgid "please provide a value for the field %s\n" +msgstr "hãy cung cấp giá trị cho trường %s\n" + +#. TRANSLATORS: --help output, recsel synopsis. +#. no-wrap +#: utils/recsel.c:118 +#, c-format +msgid "" +"Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " +"| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" +msgstr "" +"Cách dùng: recsel [TÙY-CHỌN]... [-t KIỂU] [-j TRƯỜNG] [-n CHỈSỐ | -e " +"BTHỨC_BẢNGHI | -q CHUỖI | -m SỐ] [-c | (-p|-P) BTHỨC_TRƯỜNG] [TẬP-TIN]...\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:123 +msgid "Select and print rec data.\n" +msgstr "Chọn và hiển thị dữ liệu rec.\n" + +#. TRANSLATORS: --help output, recsel arguments. +#. no-wrap +#: utils/recsel.c:129 +msgid "" +" -d, --include-descriptors print record descriptors along with " +"the matched\n" +" records.\n" +" -C, --collapse do not section the result in records " +"with newlines.\n" +" -S, --sort=FIELD,... sort the output by the specified " +"fields.\n" +" -G, --group-by=FIELD,... group records by the specified " +"fields.\n" +" -U, --uniq remove duplicated fields in the output " +"records.\n" +msgstr "" +" -d, --include-descriptors hiển thị các mô tả bản ghi cùng với\n" +" các bản ghi tìm thấy.\n" +" -C, --collapse không phân đoạn kết quả từng bản ghi " +"bằng ngắt dòng.\n" +" -S, --sort=TRƯỜNG sắp xếp kết xuất theo trường đã cho.\n" +" -G, --group-by=TRƯỜNG,... nhóm các bản ghi theo trường đã cho.\n" +" -U, --uniq gỡ bỏ các trường bị trùng trong các " +"bản ghi kết xuất.\n" + +#. TRANSLATORS: --help output, encryption related options. +#. no-wrap +#: utils/recsel.c:141 +msgid "" +" -s, --password=STR decrypt confidential fields with the " +"given password.\n" +msgstr "" +" -s, --password=MK giải mã các trường bằng mật khẩu.\n" + +#: utils/recsel.c:150 +msgid "" +" -j, --join=FIELD perform an inner join using the " +"specified field.\n" +msgstr "" +" -j, --join=TRƯỜNG thực hiện phép gia nhập “inner join” " +"dùng trường đã cho.\n" + +#. TRANSLATORS: --help output, recsel output options. +#. no-wrap +#: utils/recsel.c:157 +msgid "" +"Output options:\n" +" -p, --print=FIELDS comma-separated list of fields to " +"print for each\n" +" matching record.\n" +" -P, --print-values=FIELDS as -p, but print only the values of " +"the selected\n" +" fields.\n" +" -R, --print-row=FIELDS as -P, but separate the values with " +"spaces instead\n" +" of newlines.\n" +" -c, --count print a count of the matching records " +"instead of\n" +" the records themselves.\n" +msgstr "" +"Các tùy chọn kết xuất:\n" +" -p, --print=TRƯỜNG danh sách các trường (ngăn cách bằng " +"dấu phẩy) sẽ được in ra\n" +" khi kết xuất.\n" +" -P, --print-values=TRƯỜNG như -p, nhưng chỉ in giá trị của các " +"trường\n" +" đã chọn.\n" +" -R, --print-row=TRƯỜNG như -P, nhưng ngăn cách các giá trị " +"bằng khoảng trắng\n" +" thay vì ngắt dòng.\n" +" -c, --count in ra số lượng của các bản ghi\n" +" thay cho các bản ghi.\n" + +#. TRANSLATORS: --help output, recsel special options. +#. no-wrap +#: utils/recsel.c:171 +msgid "" +"Special options:\n" +" --print-sexps print the data in sexps instead of rec " +"format.\n" +msgstr "" +"Tùy chọn đặc biệt:\n" +" --print-sexps hiển thị dữ liệu theo định dạng sexps " +"thay cho rec.\n" + +#: utils/recsel.c:235 +msgid "only one field list can be specified as a sorting criteria.\n" +msgstr "chỉ được chỉ ra một trường làm tiêu chí để sắp xếp.\n" + +#: utils/recsel.c:242 +msgid "invalid field names in -S.\n" +msgstr "tên trường không hợp lệ trong -S.\n" + +#: utils/recsel.c:258 +msgid "only one field can be specified as join criteria.\n" +msgstr "chỉ được chỉ ra một trường làm tiêu chí để gia nhập (join).\n" + +#: utils/recsel.c:263 +msgid "please specify a correct field name to -j|--join.\n" +msgstr "hãy chỉ ra một tên trường đúng cho tùy chọn -j|--join.\n" + +#: utils/recsel.c:274 +msgid "only one field list can be specified as a grouping criteria.\n" +msgstr "chỉ được chỉ ra một trường làm tiêu chí để nhóm.\n" + +#: utils/recsel.c:280 +msgid "invalid field names in -G.\n" +msgstr "tên trường không hợp lệ trong -G.\n" + +#: utils/recsel.c:300 +msgid "cannot specify -[pPR] and also -c.\n" +msgstr "không được phép đưa ra -[pPR] mà lại còn dùng -c.\n" + +#: utils/recsel.c:317 +#, c-format +msgid "invalid list of fields in -%c\n" +msgstr "tên trường không hợp lệ trong -%c\n" + +#: utils/recsel.c:325 +msgid "internal error creating the field expression.\n" +msgstr "lỗi nội bộ khi tạo biểu thức trường.\n" + +#: utils/recsel.c:340 +#, c-format +msgid "invalid aggregate function '%s'\n" +msgstr "hàm kết tập “%s” không hợp lệ\n" + +#: utils/recsel.c:358 +msgid "cannot specify -c and also -p.\n" +msgstr "không thể chỉ ra đồng thời hai tùy chọn -c và -p.\n" + +#: utils/recsel.c:377 +msgid "joins can only be used when a named record set is selected.\n" +msgstr "phép gia nhập chỉ được dùng khi mà tập hợp bản ghi có tên được chọn.\n" + +#: utils/recsel.c:439 +msgid "several record types found. Please use -t to specify one.\n" +msgstr "tìm thấy vài kiểu bản ghi. Hãy dùng tùy chọn -t để chỉ định một.\n" + +#. TRANSLATORS: --help output, recset synopsis. +#. no-wrap +#: utils/recset.c:113 +#, c-format +msgid "Usage: recset [OPTION]... [FILE]...\n" +msgstr "Cách dùng: recset [TÙY-CHỌN]... [TẬP-TIN]...\n" + +#. TRANSLATORS: --help output, recset short description. +#. no-wrap +#: utils/recset.c:118 +msgid "Alter or delete fields in records.\n" +msgstr "Thay thế hay xóa các trường trong bản ghi.\n" + +#. TRANSLATORS: --help output, recset options. +#. no-wrap +#: utils/recset.c:124 +msgid "" +" --no-external don't use external descriptors.\n" +" --force alter the records even if violating " +"record\n" +" restrictions.\n" +msgstr "" +" --no-external không dùng bộ mô tả từ bên ngoài.\n" +" --force thay thế các bản ghi ngay cả khi nó vi " +"phạm\n" +" các hạn chế.\n" + +#. TRANSLATORS: --help output, recset field selection options. +#. no-wrap +#: utils/recset.c:137 +msgid "" +"Field selection options:\n" +" -f, --fields=FIELDS comma-separated list of field names " +"with optional\n" +" subscripts.\n" +msgstr "" +"Các tùy chọn chọn trường:\n" +" -f, --fields=TRƯỜNG danh sách tên trường được ngăn cách " +"bằng dấu phẩy\n" +" với chỉ số phụ tùy chọn.\n" + +#. TRANSLATORS: --help output, recset actions. +#. no-wrap +#: utils/recset.c:145 +msgid "" +"Actions:\n" +" -s, --set=VALUE change the value of the selected " +"fields.\n" +" -a, --add=VALUE add the selected fields with the given " +"value.\n" +" -S, --set-add=VALUE change the value of the selected " +"fields. If they don't\n" +" exist then add a new field with that " +"value.\n" +" -r, --rename=NAME rename the selected fields to a given " +"name. If an entire\n" +" record set is selected then the " +"field is renamed in the\n" +" record descriptor as well.\n" +" -d, --delete delete the selected fields.\n" +" -c, --comment comment out the selected fields.\n" +msgstr "" +"Hành vi:\n" +" -s, --set=GIÁ-TRỊ thay đổi giá trị của các trường đã " +"chọn.\n" +" -a, --add=GIÁ-TRỊ thêm các trường đã chọn bằng giá trị " +"đã cho.\n" +" -S, --set-add=GIÁ-TRỊ thay đổi giá trị của các trường đã " +"chọn. Nếu chúng\n" +" chưa có thì thêm trường bằng giá trị " +"này.\n" +" -r, --rename=TÊN đổi tên trường bằng tên đã cho. Nếu " +"toàn bộ tập hợp\n" +" bản ghi được chọn thì trường đổi " +"tên \n" +" mô tả bản ghi cũng bị đổi tên.\n" +" -d, --delete xóa các trường đã chọn.\n" +" -c, --comment biến các trường đã chọn thành ghi " +"chú.\n" + +#: utils/recset.c:168 +msgid "please specify some field with -f.\n" +msgstr "hãy chỉ ra một số trường cho tùy chọn -f.\n" + +#: utils/recset.c:173 +msgid "please specify just one action.\n" +msgstr "chỉ được phép chỉ ra một hành động.\n" + +#: utils/recset.c:213 +msgid "invalid field expression in -f.\n" +msgstr "biểu thức trường không hợp lệ trong -f.\n" + +#: utils/recset.c:221 +msgid "creating the field expression.\n" +msgstr "tạo biểu thức trường.\n" + +#: utils/recset.c:243 +msgid "" +"the rename operation requires just one field with an optional subscript.\n" +msgstr "thao tác đổi tên yêu cầu chỉ một trường với một subcript tùy chọn.\n" + +#. TRANSLATORS: --help output 5+ (reports) +#. TRANSLATORS: the placeholder indicates the bug-reporting address +#. for this application. Please add _another line_ with the +#. address for translation bugs. +#. no-wrap +#: utils/recutl.c:122 +#, c-format +msgid "Report bugs to: %s\n" +msgstr "" +"Thông báo lỗi cho: %s\n" +"Thông báo lỗi dịch cho: <http://translationproject.org/team/vi.html>.\n" + +#: utils/recutl.c:131 +#, c-format +msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" +msgstr "Trang chủ %s: <http://www.gnu.org/software/recutils/>\n" + +#: utils/recutl.c:134 +msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" +msgstr "" +"Trợ giúp chung về sử dụng phần mềm GNU: <http://www.gnu.org/gethelp/>\n" + +#. TRANSLATORS: --help output, common arguments. +#. no-wrap +#: utils/recutl.c:143 +msgid "" +" --help print a help message and exit.\n" +" --version show version and exit.\n" +msgstr "" +" --help hiển thị trợ giúp rồi thoát.\n" +" --version hiển thị phiên bản rồi thoát.\n" + +#. TRANSLATORS: --help output, record selection arguments +#. no-wrap +#: utils/recutl.c:154 +msgid "" +"Record selection options:\n" +" -i, --case-insensitive make strings case-insensitive in " +"selection\n" +" expressions.\n" +" -t, --type=TYPE operate on records of the specified " +"type only.\n" +" -e, --expression=RECORD_EXPR selection expression.\n" +" -q, --quick=STR select records with fields containing " +"a string.\n" +" -n, --number=NUM,... select specific records by position, " +"with ranges.\n" +" -m, --random=NUM select a given number of random " +"records.\n" +msgstr "" +"Các tùy chọn để lấy bản ghi:\n" +" -i, --case-insensitive làm cho biểu thức chọn phân biệt HOA/" +"thường\n" +" -t, --type=KIỂU chỉ thao tác với các bản ghi có kiểu " +"đã cho.\n" +" -e, --expression=BTHỨC_BGHI biểu thức chọn.\n" +" -q, --quick=CHUỖI lấy các bản ghi với các trường chứa " +"chuỗi.\n" +" -n, --number=SỐ,... lấy các bản ghi theo vị trí với một " +"vùng.\n" +" -m, --random=SỐ lấy ra số bản ghi ngẫu nhiên.\n" + +#: utils/recutl.c:179 +#, c-format +msgid "" +"Copyright (C) %s Jose E. Marchesi.\n" +"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." +"html>.\n" +"This is free software: you are free to change and redistribute it.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +msgstr "" +"Tác quyền © %s Jose E. Marchesi.\n" +"Giấy Phép Công Cộng GNU (GPL), phiên bản 3 hay sau <http://gnu.org/licenses/" +"gpl.html>.\n" +"Đây là phần mềm tự do: bạn có quyền thay đổi và phát hành lại nó.\n" +"KHÔNG CÓ BẢO HÀNH GÌ CẢ, với điều kiện được pháp luật cho phép.\n" + +#: utils/recutl.c:185 +msgid "" +"\n" +"Written by Jose E. Marchesi." +msgstr "" +"\n" +"Được viết bởi Jose E. Marchesi." + +#: utils/recutl.c:197 utils/recutl.c:217 +msgid ": error: " +msgstr ": lỗi:" + +#: utils/recutl.c:229 +msgid ": warning: " +msgstr ": cảnh báo: " + +#: utils/recutl.c:254 +#, c-format +msgid "duplicated record set '%s' from %s.\n" +msgstr "trùng lặp tập hợp bản ghi “%s” từ %s.\n" + +#: utils/recutl.c:417 +msgid "cannot create a unique name.\n" +msgstr "không tạo được tên tập tin duy nhất.\n" + +#: utils/recutl.c:438 +#, c-format +msgid "renaming file %s to %s\n" +msgstr "đổi tên tập tin %s thành %s\n" + +#: utils/recutl.c:482 +msgid "operation aborted due to integrity failures.\n" +msgstr "thao tác bị bãi bỏ bởi vì tính liêm chính không được đảm bảo.\n" + +#: utils/recutl.c:483 +msgid "use --verbose to get a detailed report.\n" +msgstr "" +"dùng --verbose để nhận được báo cáo chi tiết những gì đang thực hiện.\n" + +#: utils/recutl.c:490 +msgid "use --force to skip the integrity check.\n" +msgstr "dùng --force để bỏ qua kiểm tra sự toàn vẹn dữ liệu.\n" + +#: utils/recutl.c:551 +msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" +msgstr "" +"lỗi nội bộ: recutl_index_list_parse: lỗi biên dịch biểu thức chính quy.\n" + +#: utils/recutl.c:626 +msgid "Password: " +msgstr "Mật khẩu: " + +#: utils/recutl.c:632 +msgid "Password again: " +msgstr "Gõ lại mật khẩu: " + +#: utils/recutl.c:637 +msgid "the provided passwords don't match.\n" +msgstr "mật khẩu đã cung cấp không khớp.\n" + +#: utils/recutl.h:97 utils/recutl.h:186 utils/recutl.h:190 +#, fuzzy +msgid "cannot specify -e and also -n\n" +msgstr "không thể chỉ ra đồng thời hai tùy chọn -c và -p.\n" + +#: utils/recutl.h:102 +#, fuzzy +msgid "cannot specify -e and also -q\n" +msgstr "không thể chỉ ra đồng thời hai tùy chọn -c và -p.\n" + +#: utils/recutl.h:113 +#, fuzzy +msgid "invalid selection expression\n" +msgstr "Biểu thức chính quy đã chọn không hợp lệ.\n" + +#: utils/recutl.h:125 +#, fuzzy +msgid "cannot specify -n and also -e\n" +msgstr "không thể chỉ ra đồng thời hai tùy chọn -c và -p.\n" + +#: utils/recutl.h:130 +#, fuzzy +msgid "cannot specify -n and also -q\n" +msgstr "không thể chỉ ra đồng thời hai tùy chọn -c và -p.\n" + +#: utils/recutl.h:140 +#, fuzzy +msgid "invalid list of indexes in -n\n" +msgstr "tên trường không hợp lệ trong -%c\n" + +#: utils/recutl.h:150 +#, fuzzy +msgid "cannot specify -m and also -e\n" +msgstr "không thể chỉ ra đồng thời hai tùy chọn -c và -p.\n" + +#: utils/recutl.h:155 +#, fuzzy +msgid "cannot specify -m and also -q\n" +msgstr "không thể chỉ ra đồng thời hai tùy chọn -c và -p.\n" + +#: utils/recutl.h:160 +#, fuzzy +msgid "cannot specify -m and also -n\n" +msgstr "không thể chỉ ra đồng thời hai tùy chọn -c và -p.\n" + +#~ msgid "%s: option '--%s' doesn't allow an argument\n" +#~ msgstr "%s: tùy chọn “--%s” không cho phép đối số\n" + +#~ msgid "%s: unrecognized option '--%s'\n" +#~ msgstr "%s: không nhận ra tùy chọn “--%s”\n" + +#~ msgid "%s: option '-W %s' doesn't allow an argument\n" +#~ msgstr "%s: tùy chọn “-W %s” không cho phép có đối số\n" + +#~ msgid "%s: option '-W %s' requires an argument\n" +#~ msgstr "%s: tùy chọn “-W %s” cần một đối số\n" + +#~ msgid "" +#~ "%s:%s: warning: type %s collides with referred type %s in the rset %s.\n" +#~ msgstr "" +#~ "%s:%s: cảnh báo: kiểu %s đối lập với kiểu tham chiếu %s trong rset %s.\n" + +#~ msgid "%s:%s: error: value for %s shall be a field name.\n" +#~ msgstr "%s:%s: lỗi: giá trị cho %s phải là tên trường.\n" + +#~ msgid "reached maximum number of fields: %d\n" +#~ msgstr "đã đạt đến số lượng trường tối đa: %d\n" + +#~ msgid "not enough headers" +#~ msgstr "không đủ header" + +#~ msgid "out of memory" +#~ msgstr "hết bộ nhớ" + +#~ msgid "evaluating the selection expression.\n" +#~ msgstr "ước lượng biểu thức chính qui đã chọn.\n" + +#~ msgid "reading file %s" +#~ msgstr "đang đọc tập tin %s" diff --git a/devspec.en_US/project/recutils/src/.deps/rec-aggregate.Plo b/devspec.en_US/project/recutils/src/.deps/rec-aggregate.Plo new file mode 100755 index 0000000..cf186b6 --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-aggregate.Plo @@ -0,0 +1,272 @@ +rec-aggregate.lo: rec-aggregate.c /usr/include/stdc-predef.h config.h \ + ../lib/stdlib.h /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/sys/types.h /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/float.h ../lib/math.h \ + /usr/include/math.h /usr/include/i386-linux-gnu/bits/math-vector.h \ + /usr/include/i386-linux-gnu/bits/libm-simd-decl-stubs.h \ + /usr/include/i386-linux-gnu/bits/huge_val.h \ + /usr/include/i386-linux-gnu/bits/huge_valf.h \ + /usr/include/i386-linux-gnu/bits/huge_vall.h \ + /usr/include/i386-linux-gnu/bits/inf.h \ + /usr/include/i386-linux-gnu/bits/nan.h \ + /usr/include/i386-linux-gnu/bits/mathdef.h \ + /usr/include/i386-linux-gnu/bits/mathcalls.h \ + /usr/include/i386-linux-gnu/bits/mathinline.h ../lib/minmax.h \ + /usr/include/i386-linux-gnu/sys/param.h ../lib/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h ../lib/signal.h \ + /usr/include/signal.h /usr/include/i386-linux-gnu/bits/signum.h \ + /usr/include/i386-linux-gnu/bits/siginfo.h \ + /usr/include/i386-linux-gnu/bits/sigaction.h \ + /usr/include/i386-linux-gnu/bits/sigcontext.h \ + /usr/include/i386-linux-gnu/bits/sigstack.h \ + /usr/include/i386-linux-gnu/sys/ucontext.h \ + /usr/include/i386-linux-gnu/bits/sigthread.h \ + /usr/include/i386-linux-gnu/bits/param.h /usr/include/linux/param.h \ + /usr/include/i386-linux-gnu/asm/param.h /usr/include/asm-generic/param.h \ + rec-utils.h rec.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + ../lib/stdio.h /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h ../lib/stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/float.h: + +../lib/math.h: + +/usr/include/math.h: + +/usr/include/i386-linux-gnu/bits/math-vector.h: + +/usr/include/i386-linux-gnu/bits/libm-simd-decl-stubs.h: + +/usr/include/i386-linux-gnu/bits/huge_val.h: + +/usr/include/i386-linux-gnu/bits/huge_valf.h: + +/usr/include/i386-linux-gnu/bits/huge_vall.h: + +/usr/include/i386-linux-gnu/bits/inf.h: + +/usr/include/i386-linux-gnu/bits/nan.h: + +/usr/include/i386-linux-gnu/bits/mathdef.h: + +/usr/include/i386-linux-gnu/bits/mathcalls.h: + +/usr/include/i386-linux-gnu/bits/mathinline.h: + +../lib/minmax.h: + +/usr/include/i386-linux-gnu/sys/param.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +../lib/signal.h: + +/usr/include/signal.h: + +/usr/include/i386-linux-gnu/bits/signum.h: + +/usr/include/i386-linux-gnu/bits/siginfo.h: + +/usr/include/i386-linux-gnu/bits/sigaction.h: + +/usr/include/i386-linux-gnu/bits/sigcontext.h: + +/usr/include/i386-linux-gnu/bits/sigstack.h: + +/usr/include/i386-linux-gnu/sys/ucontext.h: + +/usr/include/i386-linux-gnu/bits/sigthread.h: + +/usr/include/i386-linux-gnu/bits/param.h: + +/usr/include/linux/param.h: + +/usr/include/i386-linux-gnu/asm/param.h: + +/usr/include/asm-generic/param.h: + +rec-utils.h: + +rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-buf.Plo b/devspec.en_US/project/recutils/src/.deps/rec-buf.Plo new file mode 100755 index 0000000..7751d7f --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-buf.Plo @@ -0,0 +1,146 @@ +rec-buf.lo: rec-buf.c /usr/include/stdc-predef.h config.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/sys/types.h /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h rec.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-comment.Plo b/devspec.en_US/project/recutils/src/.deps/rec-comment.Plo new file mode 100755 index 0000000..31093ad --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-comment.Plo @@ -0,0 +1,159 @@ +rec-comment.lo: rec-comment.c /usr/include/stdc-predef.h config.h \ + ../lib/stdlib.h /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/sys/types.h /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h rec.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-crypt-dummy.Plo b/devspec.en_US/project/recutils/src/.deps/rec-crypt-dummy.Plo new file mode 100755 index 0000000..31fe329 --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-crypt-dummy.Plo @@ -0,0 +1,123 @@ +rec-crypt-dummy.lo: rec-crypt-dummy.c /usr/include/stdc-predef.h config.h \ + rec.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h + +/usr/include/stdc-predef.h: + +config.h: + +rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-crypt.Plo b/devspec.en_US/project/recutils/src/.deps/rec-crypt.Plo new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-crypt.Plo @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/src/.deps/rec-db.Plo b/devspec.en_US/project/recutils/src/.deps/rec-db.Plo new file mode 100755 index 0000000..c023a95 --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-db.Plo @@ -0,0 +1,204 @@ +rec-db.lo: rec-db.c /usr/include/stdc-predef.h config.h ../lib/string.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h ../lib/sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h \ + /usr/include/i386-linux-gnu/bits/timex.h ../lib/gl_array_list.h \ + ../lib/gl_list.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + ../lib/gl_list.h rec-utils.h rec.h ../lib/stdio.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h ../lib/wchar.h \ + /usr/include/wchar.h /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h ../lib/stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h ../lib/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +../lib/gl_array_list.h: + +../lib/gl_list.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/gl_list.h: + +rec-utils.h: + +rec.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-fex.Plo b/devspec.en_US/project/recutils/src/.deps/rec-fex.Plo new file mode 100755 index 0000000..afe64da --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-fex.Plo @@ -0,0 +1,207 @@ +rec-fex.lo: rec-fex.c /usr/include/stdc-predef.h config.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/sys/types.h /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h ../lib/gettext.h \ + /usr/include/libintl.h ../lib/locale.h /usr/include/locale.h \ + /usr/include/i386-linux-gnu/bits/locale.h rec-utils.h rec.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h ../lib/stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h ../lib/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +../lib/gettext.h: + +/usr/include/libintl.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +rec-utils.h: + +rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-field-name.Plo b/devspec.en_US/project/recutils/src/.deps/rec-field-name.Plo new file mode 100755 index 0000000..8c14fb4 --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-field-name.Plo @@ -0,0 +1,211 @@ +rec-field-name.lo: rec-field-name.c /usr/include/stdc-predef.h config.h \ + ../lib/stdlib.h /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/sys/types.h /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h ../lib/regex.h \ + ../lib/limits.h /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h /usr/include/ctype.h \ + ../lib/gettext.h /usr/include/libintl.h ../lib/locale.h \ + /usr/include/locale.h /usr/include/i386-linux-gnu/bits/locale.h \ + rec-utils.h rec.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + ../lib/stdio.h /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h ../lib/stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +../lib/regex.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/ctype.h: + +../lib/gettext.h: + +/usr/include/libintl.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +rec-utils.h: + +rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-field.Plo b/devspec.en_US/project/recutils/src/.deps/rec-field.Plo new file mode 100755 index 0000000..611ef6b --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-field.Plo @@ -0,0 +1,159 @@ +rec-field.lo: rec-field.c /usr/include/stdc-predef.h config.h \ + ../lib/stdlib.h /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/sys/types.h /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h rec.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-int.Plo b/devspec.en_US/project/recutils/src/.deps/rec-int.Plo new file mode 100755 index 0000000..fb9cc57 --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-int.Plo @@ -0,0 +1,212 @@ +rec-int.lo: rec-int.c /usr/include/stdc-predef.h config.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/string.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/regex.h ../lib/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h ../lib/gettext.h \ + /usr/include/libintl.h ../lib/locale.h /usr/include/locale.h \ + /usr/include/i386-linux-gnu/bits/locale.h ../lib/tempname.h rec.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h rec-utils.h ../lib/stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/regex.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +../lib/gettext.h: + +/usr/include/libintl.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +../lib/tempname.h: + +rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +rec-utils.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-mset.Plo b/devspec.en_US/project/recutils/src/.deps/rec-mset.Plo new file mode 100755 index 0000000..6af9b34 --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-mset.Plo @@ -0,0 +1,166 @@ +rec-mset.lo: rec-mset.c /usr/include/stdc-predef.h config.h \ + ../lib/stdlib.h /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/sys/types.h /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h rec.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h ../lib/gl_array_list.h \ + ../lib/gl_list.h ../lib/gl_list.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +../lib/gl_array_list.h: + +../lib/gl_list.h: + +../lib/gl_list.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-parser.Plo b/devspec.en_US/project/recutils/src/.deps/rec-parser.Plo new file mode 100755 index 0000000..45b9edd --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-parser.Plo @@ -0,0 +1,207 @@ +rec-parser.lo: rec-parser.c /usr/include/stdc-predef.h config.h \ + ../lib/stdlib.h /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/sys/types.h /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h ../lib/gettext.h \ + /usr/include/libintl.h ../lib/locale.h /usr/include/locale.h \ + /usr/include/i386-linux-gnu/bits/locale.h rec.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + ../lib/wchar.h /usr/include/wchar.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h rec-utils.h ../lib/stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h ../lib/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +../lib/gettext.h: + +/usr/include/libintl.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +rec-utils.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-record.Plo b/devspec.en_US/project/recutils/src/.deps/rec-record.Plo new file mode 100755 index 0000000..fe14ead --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-record.Plo @@ -0,0 +1,195 @@ +rec-record.lo: rec-record.c /usr/include/stdc-predef.h config.h \ + ../lib/stdlib.h /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/sys/types.h /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h rec.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h rec-utils.h ../lib/stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h ../lib/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +rec-utils.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-rset.Plo b/devspec.en_US/project/recutils/src/.deps/rec-rset.Plo new file mode 100755 index 0000000..74f9b0f --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-rset.Plo @@ -0,0 +1,223 @@ +rec-rset.lo: rec-rset.c /usr/include/stdc-predef.h config.h \ + ../lib/stdlib.h /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/sys/types.h /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h ../lib/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h /usr/include/errno.h \ + /usr/include/i386-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/i386-linux-gnu/asm/errno.h /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/errno-base.h ../lib/locale.h \ + /usr/include/locale.h /usr/include/i386-linux-gnu/bits/locale.h \ + ../lib/string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h ../lib/parse-datetime.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + /usr/include/i386-linux-gnu/bits/timex.h rec.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h rec-utils.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +../lib/parse-datetime.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +rec.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +rec-utils.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-sex-ast.Plo b/devspec.en_US/project/recutils/src/.deps/rec-sex-ast.Plo new file mode 100755 index 0000000..a5fda71 --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-sex-ast.Plo @@ -0,0 +1,140 @@ +rec-sex-ast.lo: rec-sex-ast.c /usr/include/stdc-predef.h config.h \ + ../lib/stdlib.h /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/sys/types.h /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h rec-sex-ast.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +rec-sex-ast.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-sex-lex.Plo b/devspec.en_US/project/recutils/src/.deps/rec-sex-lex.Plo new file mode 100755 index 0000000..c81c18c --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-sex-lex.Plo @@ -0,0 +1,241 @@ +rec-sex-lex.lo: rec-sex-lex.c /usr/include/stdc-predef.h config.h \ + ../lib/stdio.h /usr/include/stdio.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/string.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h \ + /usr/include/errno.h /usr/include/i386-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/i386-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/inttypes.h \ + /usr/include/inttypes.h ../lib/stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h ../lib/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h rec-utils.h rec.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h rec-sex-ast.h rec-sex-parser.h \ + rec-sex-tab.h ../lib/unistd.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/i386-linux-gnu/bits/unistd.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/inttypes.h: + +/usr/include/inttypes.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +rec-utils.h: + +rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +rec-sex-ast.h: + +rec-sex-parser.h: + +rec-sex-tab.h: + +../lib/unistd.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/i386-linux-gnu/bits/unistd.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-sex-parser.Plo b/devspec.en_US/project/recutils/src/.deps/rec-sex-parser.Plo new file mode 100755 index 0000000..34e5472 --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-sex-parser.Plo @@ -0,0 +1,145 @@ +rec-sex-parser.lo: rec-sex-parser.c /usr/include/stdc-predef.h config.h \ + ../lib/stdlib.h /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/sys/types.h /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h rec-sex-parser.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h rec-sex-ast.h \ + rec-sex-tab.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +rec-sex-parser.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +rec-sex-ast.h: + +rec-sex-tab.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-sex-tab.Plo b/devspec.en_US/project/recutils/src/.deps/rec-sex-tab.Plo new file mode 100755 index 0000000..09a3860 --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-sex-tab.Plo @@ -0,0 +1,171 @@ +rec-sex-tab.lo: rec-sex-tab.c /usr/include/stdc-predef.h config.h \ + ../lib/stdlib.h /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/sys/types.h /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h ../lib/regex.h \ + ../lib/limits.h /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h rec-sex-ast.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h rec-sex-parser.h \ + rec-sex-tab.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +../lib/regex.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +rec-sex-ast.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +rec-sex-parser.h: + +rec-sex-tab.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-sex.Plo b/devspec.en_US/project/recutils/src/.deps/rec-sex.Plo new file mode 100755 index 0000000..d577db0 --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-sex.Plo @@ -0,0 +1,209 @@ +rec-sex.lo: rec-sex.c /usr/include/stdc-predef.h config.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/sys/types.h /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h ../lib/regex.h \ + ../lib/limits.h /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h ../lib/parse-datetime.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + /usr/include/i386-linux-gnu/bits/timex.h rec.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h rec-utils.h ../lib/stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h rec-sex-ast.h rec-sex-parser.h \ + rec-sex-tab.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +../lib/regex.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +../lib/parse-datetime.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +rec.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +rec-utils.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +rec-sex-ast.h: + +rec-sex-parser.h: + +rec-sex-tab.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-types.Plo b/devspec.en_US/project/recutils/src/.deps/rec-types.Plo new file mode 100755 index 0000000..b31aea7 --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-types.Plo @@ -0,0 +1,215 @@ +rec-types.lo: rec-types.c /usr/include/stdc-predef.h config.h \ + ../lib/stdlib.h /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/sys/types.h /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/regex.h ../lib/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h ../lib/string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h ../lib/parse-datetime.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + /usr/include/i386-linux-gnu/bits/timex.h ../lib/gettext.h \ + /usr/include/libintl.h ../lib/locale.h /usr/include/locale.h \ + /usr/include/i386-linux-gnu/bits/locale.h rec-utils.h rec.h \ + ../lib/fcntl.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h ../lib/stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/regex.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +../lib/parse-datetime.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +../lib/gettext.h: + +/usr/include/libintl.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +rec-utils.h: + +rec.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-utils.Plo b/devspec.en_US/project/recutils/src/.deps/rec-utils.Plo new file mode 100755 index 0000000..bb5e395 --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-utils.Plo @@ -0,0 +1,209 @@ +rec-utils.lo: rec-utils.c /usr/include/stdc-predef.h config.h \ + ../lib/regex.h ../lib/sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h ../lib/time.h \ + /usr/include/time.h /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/endian.h /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + ../lib/alloca.h /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/gettext.h \ + /usr/include/libintl.h ../lib/locale.h /usr/include/locale.h \ + /usr/include/i386-linux-gnu/bits/locale.h ../lib/string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h rec-utils.h rec.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h ../lib/stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/regex.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/gettext.h: + +/usr/include/libintl.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +rec-utils.h: + +rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec-writer.Plo b/devspec.en_US/project/recutils/src/.deps/rec-writer.Plo new file mode 100755 index 0000000..9afc5ef --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec-writer.Plo @@ -0,0 +1,195 @@ +rec-writer.lo: rec-writer.c /usr/include/stdc-predef.h config.h rec.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h \ + /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + ../lib/alloca.h /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h rec-utils.h ../lib/stdint.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h /usr/include/stdint.h \ + /usr/include/i386-linux-gnu/bits/wchar.h ../lib/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h + +/usr/include/stdc-predef.h: + +config.h: + +rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +rec-utils.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: diff --git a/devspec.en_US/project/recutils/src/.deps/rec.Plo b/devspec.en_US/project/recutils/src/.deps/rec.Plo new file mode 100755 index 0000000..d620797 --- /dev/null +++ b/devspec.en_US/project/recutils/src/.deps/rec.Plo @@ -0,0 +1,154 @@ +rec.lo: rec.c /usr/include/stdc-predef.h config.h ../lib/gettext.h \ + /usr/include/libintl.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h ../lib/locale.h \ + /usr/include/locale.h /usr/include/i386-linux-gnu/bits/locale.h \ + /usr/include/xlocale.h ../lib/string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h rec.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h + +/usr/include/stdc-predef.h: + +config.h: + +../lib/gettext.h: + +/usr/include/libintl.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +/usr/include/xlocale.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: diff --git a/devspec.en_US/project/recutils/src/.libs/librec.lai b/devspec.en_US/project/recutils/src/.libs/librec.lai new file mode 100755 index 0000000..ba3b4d3 --- /dev/null +++ b/devspec.en_US/project/recutils/src/.libs/librec.lai @@ -0,0 +1,41 @@ +# librec.la - a libtool library file +# Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='librec.so.1' + +# Names of this library. +library_names='librec.so.1.0.0 librec.so.1 librec.so' + +# The name of the static archive. +old_library='librec.a' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='' + +# Libraries that this one depends upon. +dependency_libs=' -lm' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for librec. +current=1 +age=0 +revision=0 + +# Is this an already installed library? +installed=yes + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/usr/local/lib' diff --git a/devspec.en_US/project/recutils/src/Makefile b/devspec.en_US/project/recutils/src/Makefile new file mode 100755 index 0000000..7583c0b --- /dev/null +++ b/devspec.en_US/project/recutils/src/Makefile @@ -0,0 +1,2063 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# src/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# src/ Makefile.am +# GNU recutils + +# Copyright (C) 2009-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + + +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/recutils +pkgincludedir = $(includedir)/recutils +pkglibdir = $(libdir)/recutils +pkglibexecdir = $(libexecdir)/recutils +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +#am__append_1 = rec-crypt.c +am__append_2 = rec-crypt-dummy.c +#am__append_3 = -fprofile-arcs -ftest-coverage +#am__append_4 = $(LTLIBGCRYPT) +#am__append_5 = -DREMOTE_DESCRIPTORS +#am__append_6 = $(CURLLIBS) +#am__append_7 = -DUUID_TYPE +#am__append_8 = $(UUIDLIBS) +subdir = src +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +#am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) +#am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) +#am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) +librec_la_DEPENDENCIES = $(top_builddir)/lib/librecutils.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) +am__librec_la_SOURCES_DIST = rec.c rec-mset.c rec-utils.h rec-utils.c \ + rec-comment.c rec-field-name.c rec-field.c rec-record.c \ + rec-rset.c rec-db.c rec-parser.c rec-writer.c rec-int.c \ + rec-sex-parser.h rec-sex-parser.c rec-sex-ast.h rec-sex-ast.c \ + rec-sex-tab.y rec-sex-lex.l rec-sex.c rec-fex.c rec-types.c \ + rec-buf.c rec-aggregate.c rec-crypt.c rec-crypt-dummy.c +#am__objects_1 = rec-crypt.lo +am__objects_2 = rec-crypt-dummy.lo +am_librec_la_OBJECTS = rec.lo rec-mset.lo rec-utils.lo rec-comment.lo \ + rec-field-name.lo rec-field.lo rec-record.lo rec-rset.lo \ + rec-db.lo rec-parser.lo rec-writer.lo rec-int.lo \ + rec-sex-parser.lo rec-sex-ast.lo rec-sex-tab.lo rec-sex-lex.lo \ + rec-sex.lo rec-fex.lo rec-types.lo rec-buf.lo rec-aggregate.lo \ + $(am__objects_1) $(am__objects_2) +librec_la_OBJECTS = $(am_librec_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +am__v_lt_1 = +librec_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(librec_la_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_$(V)) +am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I. +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS) +LTLEXCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(LEX) $(AM_LFLAGS) $(LFLAGS) +AM_V_LEX = $(am__v_LEX_$(V)) +am__v_LEX_ = $(am__v_LEX_$(AM_DEFAULT_VERBOSITY)) +am__v_LEX_0 = @echo " LEX " $@; +am__v_LEX_1 = +YLWRAP = $(top_srcdir)/build-aux/ylwrap +am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ + -e s/c++$$/h++/ -e s/c$$/h/ +YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) +LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS) +AM_V_YACC = $(am__v_YACC_$(V)) +am__v_YACC_ = $(am__v_YACC_$(AM_DEFAULT_VERBOSITY)) +am__v_YACC_0 = @echo " YACC " $@; +am__v_YACC_1 = +SOURCES = $(librec_la_SOURCES) +DIST_SOURCES = $(am__librec_la_SOURCES_DIST) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(include_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(top_srcdir)/build-aux/depcomp $(top_srcdir)/build-aux/ylwrap \ + rec-sex-lex.c rec-sex-tab.c rec-sex-tab.h +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing aclocal-1.15 +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = $${TAR-tar} +AM_DEFAULT_VERBOSITY = 1 +APPLE_UNIVERSAL_BUILD = 0 +AR = ar +ARFLAGS = cr +ASM_SYMBOL_PREFIX = "" +AUTOCONF = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoconf +AUTOHEADER = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoheader +AUTOMAKE = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing automake-1.15 +AWK = gawk +BASH_HEADERS = /usr/include/bash +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CA68 = +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CHECK_CFLAGS = +CHECK_LIBS = +CONFIG_INCLUDE = src/config.h +CPP = gcc -E +CPPFLAGS = +CURLLIBS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = false +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FGREP = /bin/grep -F +FLOAT_H = +FLOOR_LIBM = -lm +GETOPT_CDEFS_H = +GETOPT_H = +GETTEXT_MACRO_VERSION = 0.19 +GLIBC21 = yes +GLIB_CFLAGS = +GLIB_LIBS = +GMSGFMT = /usr/bin/msgfmt +GMSGFMT_015 = /usr/bin/msgfmt +GNULIB_ACOSF = 0 +GNULIB_ACOSL = 0 +GNULIB_ASINF = 0 +GNULIB_ASINL = 0 +GNULIB_ATAN2F = 0 +GNULIB_ATANF = 0 +GNULIB_ATANL = 0 +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CANONICALIZE_FILE_NAME = 1 +GNULIB_CBRT = 0 +GNULIB_CBRTF = 0 +GNULIB_CBRTL = 0 +GNULIB_CEIL = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHDIR = 1 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 1 +GNULIB_COPYSIGN = 0 +GNULIB_COPYSIGNF = 0 +GNULIB_COPYSIGNL = 0 +GNULIB_COSF = 0 +GNULIB_COSHF = 0 +GNULIB_COSL = 0 +GNULIB_CTIME = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP = 0 +GNULIB_DUP2 = 1 +GNULIB_DUP3 = 0 +GNULIB_DUPLOCALE = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 1 +GNULIB_EXP2 = 0 +GNULIB_EXP2F = 0 +GNULIB_EXP2L = 0 +GNULIB_EXPF = 0 +GNULIB_EXPL = 0 +GNULIB_EXPLICIT_BZERO = 0 +GNULIB_EXPM1 = 0 +GNULIB_EXPM1F = 0 +GNULIB_EXPM1L = 0 +GNULIB_FABSF = 0 +GNULIB_FABSL = 0 +GNULIB_FACCESSAT = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCHMODAT = 0 +GNULIB_FCHOWNAT = 0 +GNULIB_FCLOSE = 0 +GNULIB_FCNTL = 1 +GNULIB_FDATASYNC = 0 +GNULIB_FDOPEN = 0 +GNULIB_FFLUSH = 0 +GNULIB_FFS = 0 +GNULIB_FFSL = 0 +GNULIB_FFSLL = 0 +GNULIB_FGETC = 1 +GNULIB_FGETS = 1 +GNULIB_FLOCK = 1 +GNULIB_FLOOR = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FMA = 0 +GNULIB_FMAF = 0 +GNULIB_FMAL = 0 +GNULIB_FMOD = 0 +GNULIB_FMODF = 0 +GNULIB_FMODL = 0 +GNULIB_FOPEN = 0 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 1 +GNULIB_FPURGE = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREAD = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPF = 0 +GNULIB_FREXPL = 1 +GNULIB_FSCANF = 1 +GNULIB_FSEEK = 1 +GNULIB_FSEEKO = 1 +GNULIB_FSTAT = 1 +GNULIB_FSTATAT = 0 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 1 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FUTIMENS = 0 +GNULIB_FWRITE = 1 +GNULIB_GETC = 1 +GNULIB_GETCHAR = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 1 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETGROUPS = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 1 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETPASS = 1 +GNULIB_GETSUBOPT = 0 +GNULIB_GETTIMEOFDAY = 1 +GNULIB_GETUSERSHELL = 0 +GNULIB_GL_UNISTD_H_GETOPT = +GNULIB_GRANTPT = 0 +GNULIB_GROUP_MEMBER = 1 +GNULIB_HYPOT = 0 +GNULIB_HYPOTF = 0 +GNULIB_HYPOTL = 0 +GNULIB_ILOGB = 0 +GNULIB_ILOGBF = 0 +GNULIB_ILOGBL = 0 +GNULIB_IMAXABS = 0 +GNULIB_IMAXDIV = 0 +GNULIB_ISATTY = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_ISWBLANK = 0 +GNULIB_ISWCTYPE = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPF = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LINKAT = 0 +GNULIB_LOCALECONV = 1 +GNULIB_LOCALENAME = 0 +GNULIB_LOCALTIME = 0 +GNULIB_LOG = 0 +GNULIB_LOG10 = 0 +GNULIB_LOG10F = 0 +GNULIB_LOG10L = 0 +GNULIB_LOG1P = 0 +GNULIB_LOG1PF = 0 +GNULIB_LOG1PL = 0 +GNULIB_LOG2 = 0 +GNULIB_LOG2F = 0 +GNULIB_LOG2L = 0 +GNULIB_LOGB = 0 +GNULIB_LOGBF = 0 +GNULIB_LOGBL = 0 +GNULIB_LOGF = 0 +GNULIB_LOGL = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MBRLEN = 1 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MBTOWC = 1 +GNULIB_MEMCHR = 1 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDIRAT = 0 +GNULIB_MKDTEMP = 0 +GNULIB_MKFIFO = 0 +GNULIB_MKFIFOAT = 0 +GNULIB_MKNOD = 0 +GNULIB_MKNODAT = 0 +GNULIB_MKOSTEMP = 1 +GNULIB_MKOSTEMPS = 0 +GNULIB_MKSTEMP = 1 +GNULIB_MKSTEMPS = 0 +GNULIB_MKTIME = 1 +GNULIB_MODF = 0 +GNULIB_MODFF = 0 +GNULIB_MODFL = 0 +GNULIB_NANOSLEEP = 0 +GNULIB_NL_LANGINFO = 1 +GNULIB_NONBLOCKING = 0 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_OPENAT = 0 +GNULIB_OVERRIDES_STRUCT_STAT = 0 +GNULIB_OVERRIDES_WINT_T = 0 +GNULIB_PCLOSE = 0 +GNULIB_PERROR = 0 +GNULIB_PIPE = 0 +GNULIB_PIPE2 = 0 +GNULIB_POPEN = 0 +GNULIB_POSIX_OPENPT = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_POWF = 0 +GNULIB_PREAD = 0 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 1 +GNULIB_PTHREAD_SIGMASK = 0 +GNULIB_PTSNAME = 0 +GNULIB_PTSNAME_R = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_PWRITE = 0 +GNULIB_QSORT_R = 0 +GNULIB_RAISE = 1 +GNULIB_RANDOM = 0 +GNULIB_RANDOM_R = 1 +GNULIB_RAWMEMCHR = 1 +GNULIB_READ = 0 +GNULIB_READLINK = 1 +GNULIB_READLINKAT = 0 +GNULIB_REALLOCARRAY = 0 +GNULIB_REALLOC_POSIX = 1 +GNULIB_REALPATH = 1 +GNULIB_REMAINDER = 0 +GNULIB_REMAINDERF = 0 +GNULIB_REMAINDERL = 0 +GNULIB_REMOVE = 0 +GNULIB_RENAME = 1 +GNULIB_RENAMEAT = 0 +GNULIB_RINT = 0 +GNULIB_RINTF = 0 +GNULIB_RINTL = 0 +GNULIB_RMDIR = 1 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SCANF = 1 +GNULIB_SECURE_GETENV = 1 +GNULIB_SETENV = 1 +GNULIB_SETHOSTNAME = 0 +GNULIB_SETLOCALE = 0 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SINF = 0 +GNULIB_SINHF = 0 +GNULIB_SINL = 0 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 0 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_SQRTF = 0 +GNULIB_SQRTL = 0 +GNULIB_STAT = 1 +GNULIB_STDIO_H_NONBLOCKING = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 1 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 1 +GNULIB_STRERROR = 1 +GNULIB_STRERROR_R = 0 +GNULIB_STRFTIME = 0 +GNULIB_STRNCAT = 0 +GNULIB_STRNDUP = 0 +GNULIB_STRNLEN = 0 +GNULIB_STRPBRK = 0 +GNULIB_STRPTIME = 0 +GNULIB_STRSEP = 1 +GNULIB_STRSIGNAL = 0 +GNULIB_STRSTR = 0 +GNULIB_STRTOD = 0 +GNULIB_STRTOIMAX = 0 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRTOUMAX = 0 +GNULIB_STRVERSCMP = 1 +GNULIB_SYMLINK = 0 +GNULIB_SYMLINKAT = 0 +GNULIB_SYSTEM_POSIX = 0 +GNULIB_TANF = 0 +GNULIB_TANHF = 0 +GNULIB_TANL = 0 +GNULIB_TIMEGM = 1 +GNULIB_TIME_R = 1 +GNULIB_TIME_RZ = 1 +GNULIB_TMPFILE = 0 +GNULIB_TOWCTRANS = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCATE = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_TTYNAME_R = 0 +GNULIB_TZSET = 1 +GNULIB_UNISTD_H_NONBLOCKING = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNLINK = 0 +GNULIB_UNLINKAT = 0 +GNULIB_UNLOCKPT = 0 +GNULIB_UNSETENV = 1 +GNULIB_USLEEP = 0 +GNULIB_UTIMENSAT = 0 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 1 +GNULIB_VFSCANF = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSCANF = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WAITPID = 1 +GNULIB_WCPCPY = 0 +GNULIB_WCPNCPY = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSCASECMP = 0 +GNULIB_WCSCAT = 0 +GNULIB_WCSCHR = 0 +GNULIB_WCSCMP = 0 +GNULIB_WCSCOLL = 0 +GNULIB_WCSCPY = 0 +GNULIB_WCSCSPN = 0 +GNULIB_WCSDUP = 0 +GNULIB_WCSFTIME = 0 +GNULIB_WCSLEN = 0 +GNULIB_WCSNCASECMP = 0 +GNULIB_WCSNCAT = 0 +GNULIB_WCSNCMP = 0 +GNULIB_WCSNCPY = 0 +GNULIB_WCSNLEN = 0 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSPBRK = 0 +GNULIB_WCSRCHR = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCSSPN = 0 +GNULIB_WCSSTR = 0 +GNULIB_WCSTOK = 0 +GNULIB_WCSWIDTH = 0 +GNULIB_WCSXFRM = 0 +GNULIB_WCTOB = 1 +GNULIB_WCTOMB = 1 +GNULIB_WCTRANS = 0 +GNULIB_WCTYPE = 0 +GNULIB_WCWIDTH = 0 +GNULIB_WMEMCHR = 0 +GNULIB_WMEMCMP = 0 +GNULIB_WMEMCPY = 0 +GNULIB_WMEMMOVE = 0 +GNULIB_WMEMSET = 0 +GNULIB_WRITE = 0 +GNULIB__EXIT = 0 +GREP = /bin/grep +HAVE_ACOSF = 1 +HAVE_ACOSL = 1 +HAVE_ASINF = 1 +HAVE_ASINL = 1 +HAVE_ATAN2F = 1 +HAVE_ATANF = 1 +HAVE_ATANL = 1 +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_C99_STDINT_H = 1 +HAVE_CANONICALIZE_FILE_NAME = 1 +HAVE_CBRT = 1 +HAVE_CBRTF = 1 +HAVE_CBRTL = 1 +HAVE_CHOWN = 1 +HAVE_COPYSIGN = 1 +HAVE_COPYSIGNL = 1 +HAVE_COSF = 1 +HAVE_COSHF = 1 +HAVE_COSL = 1 +HAVE_CRTDEFS_H = 0 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_CBRTF = 1 +HAVE_DECL_CBRTL = 1 +HAVE_DECL_CEILF = 1 +HAVE_DECL_CEILL = 1 +HAVE_DECL_COPYSIGNF = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXP2 = 1 +HAVE_DECL_EXP2F = 1 +HAVE_DECL_EXP2L = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_EXPM1L = 1 +HAVE_DECL_FCHDIR = 1 +HAVE_DECL_FDATASYNC = 1 +HAVE_DECL_FLOORF = 1 +HAVE_DECL_FLOORL = 1 +HAVE_DECL_FPURGE = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_FSEEKO = 1 +HAVE_DECL_FTELLO = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETDOMAINNAME = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_GETPAGESIZE = 1 +HAVE_DECL_GETUSERSHELL = 1 +HAVE_DECL_IMAXABS = 1 +HAVE_DECL_IMAXDIV = 1 +HAVE_DECL_INITSTATE = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOCALTIME_R = 1 +HAVE_DECL_LOG10L = 1 +HAVE_DECL_LOG2 = 1 +HAVE_DECL_LOG2F = 1 +HAVE_DECL_LOG2L = 1 +HAVE_DECL_LOGB = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_REMAINDER = 1 +HAVE_DECL_REMAINDERL = 1 +HAVE_DECL_RINTF = 1 +HAVE_DECL_ROUND = 1 +HAVE_DECL_ROUNDF = 1 +HAVE_DECL_ROUNDL = 1 +HAVE_DECL_SETENV = 1 +HAVE_DECL_SETHOSTNAME = 1 +HAVE_DECL_SETSTATE = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR_R = 1 +HAVE_DECL_STRNCASECMP = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOIMAX = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_STRTOUMAX = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCATE = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_TRUNCL = 1 +HAVE_DECL_TTYNAME_R = 1 +HAVE_DECL_UNSETENV = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_DUP3 = 1 +HAVE_DUPLOCALE = 1 +HAVE_EUIDACCESS = 1 +HAVE_EXPF = 1 +HAVE_EXPL = 1 +HAVE_EXPLICIT_BZERO = 1 +HAVE_EXPM1 = 1 +HAVE_EXPM1F = 1 +HAVE_FABSF = 1 +HAVE_FABSL = 1 +HAVE_FACCESSAT = 1 +HAVE_FCHDIR = 1 +HAVE_FCHMODAT = 1 +HAVE_FCHOWNAT = 1 +HAVE_FCNTL = 1 +HAVE_FDATASYNC = 1 +HAVE_FEATURES_H = 1 +HAVE_FFS = 1 +HAVE_FFSL = 1 +HAVE_FFSLL = 1 +HAVE_FLOCK = 1 +HAVE_FMA = 1 +HAVE_FMAF = 1 +HAVE_FMAL = 1 +HAVE_FMODF = 1 +HAVE_FMODL = 1 +HAVE_FREELOCALE = 1 +HAVE_FREXPF = 1 +HAVE_FSEEKO = 1 +HAVE_FSTATAT = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_FUTIMENS = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETGROUPS = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETLOGIN = 1 +HAVE_GETOPT_H = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETPASS = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETTIMEOFDAY = 1 +HAVE_GRANTPT = 1 +HAVE_GROUP_MEMBER = 1 +HAVE_HYPOTF = 1 +HAVE_HYPOTL = 1 +HAVE_ILOGB = 1 +HAVE_ILOGBF = 1 +HAVE_ILOGBL = 1 +HAVE_IMAXDIV_T = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWBLANK = 1 +HAVE_ISWCNTRL = 1 +HAVE_LANGINFO_ALTMON = 0 +HAVE_LANGINFO_CODESET = 1 +HAVE_LANGINFO_ERA = 1 +HAVE_LANGINFO_H = 1 +HAVE_LANGINFO_T_FMT_AMPM = 1 +HAVE_LANGINFO_YESEXPR = 1 +HAVE_LCHMOD = 1 +HAVE_LCHOWN = 1 +HAVE_LDEXPF = 1 +HAVE_LIBGCRYPT = no +HAVE_LINK = 1 +HAVE_LINKAT = 1 +HAVE_LOG10F = 1 +HAVE_LOG10L = 1 +HAVE_LOG1P = 1 +HAVE_LOG1PF = 1 +HAVE_LOG1PL = 1 +HAVE_LOGBF = 1 +HAVE_LOGBL = 1 +HAVE_LOGF = 1 +HAVE_LOGL = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MAX_ALIGN_T = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSLEN = 0 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMCHR = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDIRAT = 1 +HAVE_MKDTEMP = 1 +HAVE_MKFIFO = 1 +HAVE_MKFIFOAT = 1 +HAVE_MKNOD = 1 +HAVE_MKNODAT = 1 +HAVE_MKOSTEMP = 1 +HAVE_MKOSTEMPS = 1 +HAVE_MKSTEMP = 1 +HAVE_MKSTEMPS = 1 +HAVE_MODFF = 1 +HAVE_MODFL = 1 +HAVE_MSVC_INVALID_PARAMETER_HANDLER = 0 +HAVE_NANOSLEEP = 1 +HAVE_NEWLOCALE = 1 +HAVE_NL_LANGINFO = 1 +HAVE_OPENAT = 1 +HAVE_OS_H = 0 +HAVE_PCLOSE = 1 +HAVE_PIPE = 1 +HAVE_PIPE2 = 1 +HAVE_POPEN = 1 +HAVE_POSIX_OPENPT = 1 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_POSIX_SPAWNATTR_T = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = 1 +HAVE_POWF = 1 +HAVE_PREAD = 1 +HAVE_PTHREAD_SIGMASK = 1 +HAVE_PTSNAME = 1 +HAVE_PTSNAME_R = 1 +HAVE_PWRITE = 1 +HAVE_QSORT_R = 1 +HAVE_RAISE = 1 +HAVE_RANDOM = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_READLINKAT = 1 +HAVE_REALLOCARRAY = 1 +HAVE_REALPATH = 1 +HAVE_REMAINDER = 1 +HAVE_REMAINDERF = 1 +HAVE_RENAMEAT = 1 +HAVE_RINT = 1 +HAVE_RINTL = 1 +HAVE_RPMATCH = 1 +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0 +HAVE_SCHED_H = +HAVE_SECURE_GETENV = 1 +HAVE_SETENV = 1 +HAVE_SETHOSTNAME = 1 +HAVE_SIGACTION = 1 +HAVE_SIGHANDLER_T = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SINF = 1 +HAVE_SINHF = 1 +HAVE_SINL = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_SQRTF = 1 +HAVE_SQRTL = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASECMP = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRINGS_H = 1 +HAVE_STRPBRK = 1 +HAVE_STRPTIME = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYMLINK = 1 +HAVE_SYMLINKAT = 1 +HAVE_SYS_BITYPES_H = 0 +HAVE_SYS_CDEFS_H = +HAVE_SYS_FILE_H = 1 +HAVE_SYS_INTTYPES_H = 0 +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TANF = 1 +HAVE_TANHF = 1 +HAVE_TANL = 1 +HAVE_TIMEGM = 1 +HAVE_TIMEZONE_T = 0 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_TZSET = 1 +HAVE_UNISTD_H = 1 +HAVE_UNLINKAT = 1 +HAVE_UNLOCKPT = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_USLEEP = 1 +HAVE_UTIMENSAT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCHAR_T = 1 +HAVE_WCPCPY = 1 +HAVE_WCPNCPY = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSCASECMP = 1 +HAVE_WCSCAT = 1 +HAVE_WCSCHR = 1 +HAVE_WCSCMP = 1 +HAVE_WCSCOLL = 1 +HAVE_WCSCPY = 1 +HAVE_WCSCSPN = 1 +HAVE_WCSDUP = 1 +HAVE_WCSFTIME = 1 +HAVE_WCSLEN = 1 +HAVE_WCSNCASECMP = 1 +HAVE_WCSNCAT = 1 +HAVE_WCSNCMP = 1 +HAVE_WCSNCPY = 1 +HAVE_WCSNLEN = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSPBRK = 1 +HAVE_WCSRCHR = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCSSPN = 1 +HAVE_WCSSTR = 1 +HAVE_WCSTOK = 1 +HAVE_WCSWIDTH = 1 +HAVE_WCSXFRM = 1 +HAVE_WCTRANS_T = 1 +HAVE_WCTYPE_H = 1 +HAVE_WCTYPE_T = 1 +HAVE_WINSOCK2_H = 0 +HAVE_WINT_T = 1 +HAVE_WMEMCHR = 1 +HAVE_WMEMCMP = 1 +HAVE_WMEMCPY = 1 +HAVE_WMEMMOVE = 1 +HAVE_WMEMSET = 1 +HAVE_XLOCALE_H = 1 +HAVE__BOOL = 1 +HAVE__EXIT = 1 +HELP2MAN = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing help2man +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +INT32_MAX_LT_INTMAX_MAX = 1 +INT64_MAX_EQ_LONG_MAX = 0 +INTLLIBS = +INTL_MACOSX_LIBS = +LD = /usr/bin/ld +LDFLAGS = +LEX = flex +LEXLIB = -lfl +LEX_OUTPUT_ROOT = lex.yy +LIBGCRYPT = +LIBGCRYPT_PREFIX = +LIBICONV = -liconv +LIBINTL = +LIBMULTITHREAD = -pthread -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBREADLINE = +LIBS = +LIBTHREAD = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIB_ACL = +LIB_CLOCK_GETTIME = +LIB_EACCESS = +LIB_POSIX_SPAWN = +LIB_SELINUX = +LIMITS_H = limits.h +LIPO = +LN_S = ln -s +LOCALCHARSET_TESTS_ENVIRONMENT = +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTALLOCA = +LTLIBGCRYPT = +LTLIBICONV = -liconv +LTLIBINTL = +LTLIBMULTITHREAD = -pthread +LTLIBOBJS = +LTLIBPTH = +LTLIBREADLINE = +LTLIBTHREAD = +LT_SYS_LIBRARY_PATH = +MAKEINFO = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing makeinfo +MANIFEST_TOOL = : +MDBLIBS = +MDB_DATETIME = +MKDIR_P = /bin/mkdir -p +MSGFMT = /usr/bin/msgfmt +MSGFMT_015 = /usr/bin/msgfmt +MSGMERGE = /usr/bin/msgmerge +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = <fcntl.h> +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = <getopt.h> +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = <inttypes.h> +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = <langinfo.h> +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = <limits.h> +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = <locale.h> +NEXT_AS_FIRST_DIRECTIVE_MATH_H = <math.h> +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = <signal.h> +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = <spawn.h> +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = <stdint.h> +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = <stdio.h> +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = <stdlib.h> +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = <strings.h> +NEXT_AS_FIRST_DIRECTIVE_STRING_H = <string.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = <sys/file.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = <sys/stat.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = <sys/time.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = <sys/types.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = <sys/wait.h> +NEXT_AS_FIRST_DIRECTIVE_TIME_H = <time.h> +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = <unistd.h> +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = <wchar.h> +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = <wctype.h> +NEXT_ERRNO_H = +NEXT_FCNTL_H = <fcntl.h> +NEXT_FLOAT_H = +NEXT_GETOPT_H = <getopt.h> +NEXT_INTTYPES_H = <inttypes.h> +NEXT_LANGINFO_H = <langinfo.h> +NEXT_LIMITS_H = <limits.h> +NEXT_LOCALE_H = <locale.h> +NEXT_MATH_H = <math.h> +NEXT_SCHED_H = +NEXT_SELINUX_SELINUX_H = +NEXT_SIGNAL_H = <signal.h> +NEXT_SPAWN_H = <spawn.h> +NEXT_STDARG_H = <stdarg.h> +NEXT_STDDEF_H = +NEXT_STDINT_H = <stdint.h> +NEXT_STDIO_H = <stdio.h> +NEXT_STDLIB_H = <stdlib.h> +NEXT_STRINGS_H = <strings.h> +NEXT_STRING_H = <string.h> +NEXT_SYS_FILE_H = <sys/file.h> +NEXT_SYS_STAT_H = <sys/stat.h> +NEXT_SYS_TIME_H = <sys/time.h> +NEXT_SYS_TYPES_H = <sys/types.h> +NEXT_SYS_WAIT_H = <sys/wait.h> +NEXT_TIME_H = <time.h> +NEXT_UNISTD_H = <unistd.h> +NEXT_WCHAR_H = <wchar.h> +NEXT_WCTYPE_H = <wctype.h> +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = recutils +PACKAGE_BUGREPORT = bug-recutils@gnu.org +PACKAGE_NAME = GNU recutils +PACKAGE_STRING = GNU recutils 1.8 +PACKAGE_TARNAME = recutils +PACKAGE_URL = http://www.gnu.org/software/recutils/ +PACKAGE_VERSION = 1.8 +PATH_SEPARATOR = : +PKG_CONFIG = /usr/bin/pkg-config +PKG_CONFIG_LIBDIR = +PKG_CONFIG_PATH = +POSUB = po +PRAGMA_COLUMNS = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PRIPTR_PREFIX = "l" +PRI_MACROS_BROKEN = 0 +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = 0 +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_ACOSF = 0 +REPLACE_ASINF = 0 +REPLACE_ATAN2F = 0 +REPLACE_ATANF = 0 +REPLACE_BTOWC = 0 +REPLACE_CALLOC = 0 +REPLACE_CANONICALIZE_FILE_NAME = 0 +REPLACE_CBRTF = 0 +REPLACE_CBRTL = 0 +REPLACE_CEIL = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_COSF = 0 +REPLACE_COSHF = 0 +REPLACE_CTIME = GNULIB_PORTCHECK +REPLACE_DPRINTF = 0 +REPLACE_DUP = 0 +REPLACE_DUP2 = 0 +REPLACE_DUPLOCALE = 0 +REPLACE_EXP2 = 0 +REPLACE_EXP2L = 0 +REPLACE_EXPF = 0 +REPLACE_EXPM1 = 0 +REPLACE_EXPM1F = 0 +REPLACE_FABSL = 0 +REPLACE_FACCESSAT = 0 +REPLACE_FCHOWNAT = 0 +REPLACE_FCLOSE = 0 +REPLACE_FCNTL = 1 +REPLACE_FDOPEN = 0 +REPLACE_FFLUSH = 0 +REPLACE_FLOOR = 0 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FMA = 0 +REPLACE_FMAF = 0 +REPLACE_FMAL = 0 +REPLACE_FMOD = 0 +REPLACE_FMODF = 0 +REPLACE_FMODL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 1 +REPLACE_FPURGE = 0 +REPLACE_FREELOCALE = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPF = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 0 +REPLACE_FSTAT = 0 +REPLACE_FSTATAT = 0 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_FTRUNCATE = 0 +REPLACE_FUTIMENS = 0 +REPLACE_GETCWD = 0 +REPLACE_GETDELIM = 0 +REPLACE_GETDOMAINNAME = 0 +REPLACE_GETDTABLESIZE = 0 +REPLACE_GETGROUPS = 0 +REPLACE_GETLINE = 0 +REPLACE_GETLOGIN_R = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETPASS = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_GMTIME = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_HYPOT = 0 +REPLACE_HYPOTF = 0 +REPLACE_HYPOTL = 0 +REPLACE_ILOGB = 0 +REPLACE_ILOGBF = 0 +REPLACE_ILOGBL = 0 +REPLACE_ISATTY = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWBLANK = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_ITOLD = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LINK = 0 +REPLACE_LINKAT = 0 +REPLACE_LOCALECONV = 0 +REPLACE_LOCALTIME = 0 +REPLACE_LOCALTIME_R = 0 +REPLACE_LOG = 0 +REPLACE_LOG10 = 0 +REPLACE_LOG10F = 0 +REPLACE_LOG10L = 0 +REPLACE_LOG1P = 0 +REPLACE_LOG1PF = 0 +REPLACE_LOG1PL = 0 +REPLACE_LOG2 = 0 +REPLACE_LOG2F = 0 +REPLACE_LOG2L = 0 +REPLACE_LOGB = 0 +REPLACE_LOGBF = 0 +REPLACE_LOGBL = 0 +REPLACE_LOGF = 0 +REPLACE_LOGL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MALLOC = 0 +REPLACE_MBRLEN = 1 +REPLACE_MBRTOWC = 1 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MBTOWC = 0 +REPLACE_MEMCHR = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKFIFO = 0 +REPLACE_MKNOD = 0 +REPLACE_MKSTEMP = 0 +REPLACE_MKTIME = 0 +REPLACE_MODF = 0 +REPLACE_MODFF = 0 +REPLACE_MODFL = 0 +REPLACE_NAN = 0 +REPLACE_NANOSLEEP = GNULIB_PORTCHECK +REPLACE_NEWLOCALE = 0 +REPLACE_NL_LANGINFO = 1 +REPLACE_NULL = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_OPENAT = 0 +REPLACE_PERROR = 0 +REPLACE_POPEN = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 0 +REPLACE_PREAD = 0 +REPLACE_PRINTF = 1 +REPLACE_PTHREAD_SIGMASK = 0 +REPLACE_PTSNAME = 0 +REPLACE_PTSNAME_R = 0 +REPLACE_PUTENV = 0 +REPLACE_PWRITE = 0 +REPLACE_QSORT_R = 0 +REPLACE_RAISE = 0 +REPLACE_RANDOM_R = 0 +REPLACE_READ = 0 +REPLACE_READLINK = 0 +REPLACE_READLINKAT = 0 +REPLACE_REALLOC = 0 +REPLACE_REALPATH = 0 +REPLACE_REMAINDER = 0 +REPLACE_REMAINDERF = 0 +REPLACE_REMAINDERL = 0 +REPLACE_REMOVE = 0 +REPLACE_RENAME = 0 +REPLACE_RENAMEAT = 0 +REPLACE_RMDIR = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SETENV = 0 +REPLACE_SETLOCALE = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SINF = 0 +REPLACE_SINHF = 0 +REPLACE_SLEEP = 0 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_SQRTF = 0 +REPLACE_SQRTL = 0 +REPLACE_STAT = 0 +REPLACE_STDIO_READ_FUNCS = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STPNCPY = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRCHRNUL = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRERROR_R = 0 +REPLACE_STRFTIME = GNULIB_PORTCHECK +REPLACE_STRNCAT = 0 +REPLACE_STRNDUP = 0 +REPLACE_STRNLEN = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 0 +REPLACE_STRTOD = 0 +REPLACE_STRTOIMAX = 0 +REPLACE_STRTOK_R = 0 +REPLACE_STRTOUMAX = 0 +REPLACE_STRUCT_LCONV = 0 +REPLACE_STRUCT_TIMEVAL = 0 +REPLACE_SYMLINK = 0 +REPLACE_SYMLINKAT = 0 +REPLACE_TANF = 0 +REPLACE_TANHF = 0 +REPLACE_TIMEGM = 0 +REPLACE_TMPFILE = 0 +REPLACE_TOWLOWER = 0 +REPLACE_TRUNC = 0 +REPLACE_TRUNCATE = 0 +REPLACE_TRUNCF = 0 +REPLACE_TRUNCL = 0 +REPLACE_TTYNAME_R = 0 +REPLACE_TZSET = 0 +REPLACE_UNLINK = 0 +REPLACE_UNLINKAT = 0 +REPLACE_UNSETENV = 0 +REPLACE_USLEEP = 0 +REPLACE_UTIMENSAT = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 1 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSFTIME = 0 +REPLACE_WCSNRTOMBS = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCSWIDTH = 0 +REPLACE_WCTOB = 0 +REPLACE_WCTOMB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SED = /bin/sed +SELINUX_CONTEXT_H = selinux/context.h +SET_MAKE = +SHELL = /bin/sh +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +STDARG_H = +STDBOOL_H = +STDDEF_H = +STDINT_H = stdint.h +STRIP = strip +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = 0 +TIME_H_DEFINES_STRUCT_TIMESPEC = 1 +UINT32_MAX_LT_UINTMAX_MAX = 1 +UINT64_MAX_EQ_ULONG_MAX = 0 +UNDEFINE_STRTOK_R = 0 +UNISTD_H_DEFINES_STRUCT_TIMESPEC = 0 +UNISTD_H_HAVE_WINSOCK2_H = 0 +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = 0 +USE_ACL = 0 +USE_NLS = yes +UUIDLIBS = +VERSION = 1.8 +WCHAR_T_SUFFIX = +WINDOWS_64_BIT_OFF_T = 0 +WINDOWS_64_BIT_ST_SIZE = 0 +WINDOWS_STAT_INODES = 0 +WINDOWS_STAT_TIMESPEC = 0 +WINT_T_SUFFIX = +XGETTEXT = /usr/bin/xgettext +XGETTEXT_015 = /usr/bin/xgettext +XGETTEXT_EXTRA_OPTIONS = --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format +YACC = bison -o y.tab.c +YFLAGS = +abs_builddir = /mnt/lfs/build/recutils/recutils-1.8/src +abs_srcdir = /mnt/lfs/build/recutils/recutils-1.8/src +abs_top_builddir = /mnt/lfs/build/recutils/recutils-1.8 +abs_top_srcdir = /mnt/lfs/build/recutils/recutils-1.8 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +builddir = . +crypt_support = no +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +gl_LIBOBJS = asnprintf.o asprintf.o fcntl.o fprintf.o fseterr.o localtime-buffer.o mbrlen.o mbrtowc.o mktime.o nl_langinfo.o obstack.o printf.o printf-args.o printf-parse.o readline.o regex.o time_rz.o vasnprintf.o vasprintf.o vfprintf.o +gl_LTLIBOBJS = asnprintf.lo asprintf.lo fcntl.lo fprintf.lo fseterr.lo localtime-buffer.lo mbrlen.lo mbrtowc.lo mktime.lo nl_langinfo.lo obstack.lo printf.lo printf-args.lo printf-parse.lo readline.lo regex.lo time_rz.lo vasnprintf.lo vasprintf.lo vfprintf.lo +gltests_LIBOBJS = +gltests_LTLIBOBJS = +gltests_WITNESS = IN_RECUTILS_GNULIB_TESTS +have_uuid = no +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = $(MKDIR_P) +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +runstatedir = ${localstatedir}/run +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +lib_LTLIBRARIES = librec.la +include_HEADERS = rec.h +librec_la_SOURCES = rec.c rec-mset.c rec-utils.h rec-utils.c \ + rec-comment.c rec-field-name.c rec-field.c rec-record.c \ + rec-rset.c rec-db.c rec-parser.c rec-writer.c rec-int.c \ + rec-sex-parser.h rec-sex-parser.c rec-sex-ast.h rec-sex-ast.c \ + rec-sex-tab.y rec-sex-lex.l rec-sex.c rec-fex.c rec-types.c \ + rec-buf.c rec-aggregate.c $(am__append_1) $(am__append_2) +BUILT_SOURCES = rec-sex-tab.h +AM_YFLAGS = -d +AM_LFLAGS = -d +AM_CFLAGS = $(am__append_3) +AM_LDFLAGS = -no-undefined +AM_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib \ + -DLOCALEDIR=\"$(localedir)\" $(am__append_5) $(am__append_7) +librec_la_LDFLAGS = -version-info 1:0:0 +librec_la_LIBADD = $(top_builddir)/lib/librecutils.la \ + $(LIB_CLOCK_GETTIME) $(am__append_4) $(am__append_6) \ + $(am__append_8) +all: $(BUILT_SOURCES) config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .l .lo .o .obj .y +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status src/config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } +rec-sex-tab.h: rec-sex-tab.c + @if test ! -f $@; then rm -f rec-sex-tab.c; else :; fi + @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) rec-sex-tab.c; else :; fi + +librec.la: $(librec_la_OBJECTS) $(librec_la_DEPENDENCIES) $(EXTRA_librec_la_DEPENDENCIES) + $(AM_V_CCLD)$(librec_la_LINK) -rpath $(libdir) $(librec_la_OBJECTS) $(librec_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/rec-aggregate.Plo +include ./$(DEPDIR)/rec-buf.Plo +include ./$(DEPDIR)/rec-comment.Plo +include ./$(DEPDIR)/rec-crypt-dummy.Plo +include ./$(DEPDIR)/rec-crypt.Plo +include ./$(DEPDIR)/rec-db.Plo +include ./$(DEPDIR)/rec-fex.Plo +include ./$(DEPDIR)/rec-field-name.Plo +include ./$(DEPDIR)/rec-field.Plo +include ./$(DEPDIR)/rec-int.Plo +include ./$(DEPDIR)/rec-mset.Plo +include ./$(DEPDIR)/rec-parser.Plo +include ./$(DEPDIR)/rec-record.Plo +include ./$(DEPDIR)/rec-rset.Plo +include ./$(DEPDIR)/rec-sex-ast.Plo +include ./$(DEPDIR)/rec-sex-lex.Plo +include ./$(DEPDIR)/rec-sex-parser.Plo +include ./$(DEPDIR)/rec-sex-tab.Plo +include ./$(DEPDIR)/rec-sex.Plo +include ./$(DEPDIR)/rec-types.Plo +include ./$(DEPDIR)/rec-utils.Plo +include ./$(DEPDIR)/rec-writer.Plo +include ./$(DEPDIR)/rec.Plo + +.c.o: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< + +.c.obj: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ + $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Plo +# $(AM_V_CC)source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< + +.l.c: + $(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE) + +.y.c: + $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) config.h +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -rm -f rec-sex-lex.c + -rm -f rec-sex-tab.c + -rm -f rec-sex-tab.h + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-includeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-includeHEADERS install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-includeHEADERS \ + uninstall-libLTLIBRARIES + +.PRECIOUS: Makefile + + +check-syntax: all + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/src/Makefile.am b/devspec.en_US/project/recutils/src/Makefile.am new file mode 100755 index 0000000..be7c8fa --- /dev/null +++ b/devspec.en_US/project/recutils/src/Makefile.am @@ -0,0 +1,85 @@ +# src/ Makefile.am +# GNU recutils + +# Copyright (C) 2009-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +lib_LTLIBRARIES = librec.la + +include_HEADERS = rec.h + +librec_la_SOURCES = rec.c \ + rec-mset.c \ + rec-utils.h \ + rec-utils.c \ + rec-comment.c \ + rec-field-name.c \ + rec-field.c \ + rec-record.c \ + rec-rset.c \ + rec-db.c \ + rec-parser.c \ + rec-writer.c \ + rec-int.c \ + rec-sex-parser.h \ + rec-sex-parser.c \ + rec-sex-ast.h \ + rec-sex-ast.c \ + rec-sex-tab.y \ + rec-sex-lex.l \ + rec-sex.c \ + rec-fex.c \ + rec-types.c \ + rec-buf.c \ + rec-aggregate.c + +if CRYPT + librec_la_SOURCES += rec-crypt.c +else + librec_la_SOURCES += rec-crypt-dummy.c +endif + +BUILT_SOURCES = rec-sex-tab.h +AM_YFLAGS = -d +AM_LFLAGS = -d +AM_CFLAGS = +if USE_COVERAGE + AM_CFLAGS += -fprofile-arcs -ftest-coverage +endif + +AM_LDFLAGS = -no-undefined +AM_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib \ + -DLOCALEDIR=\"$(localedir)\" +librec_la_LDFLAGS = -version-info 1:0:0 +librec_la_LIBADD = $(top_builddir)/lib/librecutils.la \ + $(LIB_CLOCK_GETTIME) + +if CRYPT + librec_la_LIBADD += $(LTLIBGCRYPT) +endif + +if REMOTE_DESCRIPTORS + AM_CPPFLAGS += -DREMOTE_DESCRIPTORS + librec_la_LIBADD += $(CURLLIBS) +endif + +if UUID_TYPE + AM_CPPFLAGS += -DUUID_TYPE + librec_la_LIBADD += $(UUIDLIBS) +endif + +check-syntax: all + +# End of Makefile.am diff --git a/devspec.en_US/project/recutils/src/Makefile.in b/devspec.en_US/project/recutils/src/Makefile.in new file mode 100755 index 0000000..893aa4a --- /dev/null +++ b/devspec.en_US/project/recutils/src/Makefile.in @@ -0,0 +1,2063 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# src/ Makefile.am +# GNU recutils + +# Copyright (C) 2009-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@CRYPT_TRUE@am__append_1 = rec-crypt.c +@CRYPT_FALSE@am__append_2 = rec-crypt-dummy.c +@USE_COVERAGE_TRUE@am__append_3 = -fprofile-arcs -ftest-coverage +@CRYPT_TRUE@am__append_4 = $(LTLIBGCRYPT) +@REMOTE_DESCRIPTORS_TRUE@am__append_5 = -DREMOTE_DESCRIPTORS +@REMOTE_DESCRIPTORS_TRUE@am__append_6 = $(CURLLIBS) +@UUID_TYPE_TRUE@am__append_7 = -DUUID_TYPE +@UUID_TYPE_TRUE@am__append_8 = $(UUIDLIBS) +subdir = src +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +@CRYPT_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) +@REMOTE_DESCRIPTORS_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) +@UUID_TYPE_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) +librec_la_DEPENDENCIES = $(top_builddir)/lib/librecutils.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) +am__librec_la_SOURCES_DIST = rec.c rec-mset.c rec-utils.h rec-utils.c \ + rec-comment.c rec-field-name.c rec-field.c rec-record.c \ + rec-rset.c rec-db.c rec-parser.c rec-writer.c rec-int.c \ + rec-sex-parser.h rec-sex-parser.c rec-sex-ast.h rec-sex-ast.c \ + rec-sex-tab.y rec-sex-lex.l rec-sex.c rec-fex.c rec-types.c \ + rec-buf.c rec-aggregate.c rec-crypt.c rec-crypt-dummy.c +@CRYPT_TRUE@am__objects_1 = rec-crypt.lo +@CRYPT_FALSE@am__objects_2 = rec-crypt-dummy.lo +am_librec_la_OBJECTS = rec.lo rec-mset.lo rec-utils.lo rec-comment.lo \ + rec-field-name.lo rec-field.lo rec-record.lo rec-rset.lo \ + rec-db.lo rec-parser.lo rec-writer.lo rec-int.lo \ + rec-sex-parser.lo rec-sex-ast.lo rec-sex-tab.lo rec-sex-lex.lo \ + rec-sex.lo rec-fex.lo rec-types.lo rec-buf.lo rec-aggregate.lo \ + $(am__objects_1) $(am__objects_2) +librec_la_OBJECTS = $(am_librec_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +librec_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(librec_la_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS) +LTLEXCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(LEX) $(AM_LFLAGS) $(LFLAGS) +AM_V_LEX = $(am__v_LEX_@AM_V@) +am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@) +am__v_LEX_0 = @echo " LEX " $@; +am__v_LEX_1 = +YLWRAP = $(top_srcdir)/build-aux/ylwrap +am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ + -e s/c++$$/h++/ -e s/c$$/h/ +YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) +LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS) +AM_V_YACC = $(am__v_YACC_@AM_V@) +am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@) +am__v_YACC_0 = @echo " YACC " $@; +am__v_YACC_1 = +SOURCES = $(librec_la_SOURCES) +DIST_SOURCES = $(am__librec_la_SOURCES_DIST) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(include_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(top_srcdir)/build-aux/depcomp $(top_srcdir)/build-aux/ylwrap \ + rec-sex-lex.c rec-sex-tab.c rec-sex-tab.h +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BASH_HEADERS = @BASH_HEADERS@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CA68 = @CA68@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CURLLIBS = @CURLLIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +FLOOR_LIBM = @FLOOR_LIBM@ +GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ACOSF = @GNULIB_ACOSF@ +GNULIB_ACOSL = @GNULIB_ACOSL@ +GNULIB_ASINF = @GNULIB_ASINF@ +GNULIB_ASINL = @GNULIB_ASINL@ +GNULIB_ATAN2F = @GNULIB_ATAN2F@ +GNULIB_ATANF = @GNULIB_ATANF@ +GNULIB_ATANL = @GNULIB_ATANL@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CBRT = @GNULIB_CBRT@ +GNULIB_CBRTF = @GNULIB_CBRTF@ +GNULIB_CBRTL = @GNULIB_CBRTL@ +GNULIB_CEIL = @GNULIB_CEIL@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ +GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ +GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ +GNULIB_COSF = @GNULIB_COSF@ +GNULIB_COSHF = @GNULIB_COSHF@ +GNULIB_COSL = @GNULIB_COSL@ +GNULIB_CTIME = @GNULIB_CTIME@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_EXP2 = @GNULIB_EXP2@ +GNULIB_EXP2F = @GNULIB_EXP2F@ +GNULIB_EXP2L = @GNULIB_EXP2L@ +GNULIB_EXPF = @GNULIB_EXPF@ +GNULIB_EXPL = @GNULIB_EXPL@ +GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ +GNULIB_EXPM1 = @GNULIB_EXPM1@ +GNULIB_EXPM1F = @GNULIB_EXPM1F@ +GNULIB_EXPM1L = @GNULIB_EXPM1L@ +GNULIB_FABSF = @GNULIB_FABSF@ +GNULIB_FABSL = @GNULIB_FABSL@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FCNTL = @GNULIB_FCNTL@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FLOCK = @GNULIB_FLOCK@ +GNULIB_FLOOR = @GNULIB_FLOOR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FMA = @GNULIB_FMA@ +GNULIB_FMAF = @GNULIB_FMAF@ +GNULIB_FMAL = @GNULIB_FMAL@ +GNULIB_FMOD = @GNULIB_FMOD@ +GNULIB_FMODF = @GNULIB_FMODF@ +GNULIB_FMODL = @GNULIB_FMODL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPF = @GNULIB_FREXPF@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSTAT = @GNULIB_FSTAT@ +GNULIB_FSTATAT = @GNULIB_FSTATAT@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETPASS = @GNULIB_GETPASS@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_HYPOT = @GNULIB_HYPOT@ +GNULIB_HYPOTF = @GNULIB_HYPOTF@ +GNULIB_HYPOTL = @GNULIB_HYPOTL@ +GNULIB_ILOGB = @GNULIB_ILOGB@ +GNULIB_ILOGBF = @GNULIB_ILOGBF@ +GNULIB_ILOGBL = @GNULIB_ILOGBL@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPF = @GNULIB_LDEXPF@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LOCALENAME = @GNULIB_LOCALENAME@ +GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ +GNULIB_LOG = @GNULIB_LOG@ +GNULIB_LOG10 = @GNULIB_LOG10@ +GNULIB_LOG10F = @GNULIB_LOG10F@ +GNULIB_LOG10L = @GNULIB_LOG10L@ +GNULIB_LOG1P = @GNULIB_LOG1P@ +GNULIB_LOG1PF = @GNULIB_LOG1PF@ +GNULIB_LOG1PL = @GNULIB_LOG1PL@ +GNULIB_LOG2 = @GNULIB_LOG2@ +GNULIB_LOG2F = @GNULIB_LOG2F@ +GNULIB_LOG2L = @GNULIB_LOG2L@ +GNULIB_LOGB = @GNULIB_LOGB@ +GNULIB_LOGBF = @GNULIB_LOGBF@ +GNULIB_LOGBL = @GNULIB_LOGBL@ +GNULIB_LOGF = @GNULIB_LOGF@ +GNULIB_LOGL = @GNULIB_LOGL@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKFIFO = @GNULIB_MKFIFO@ +GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ +GNULIB_MKNOD = @GNULIB_MKNOD@ +GNULIB_MKNODAT = @GNULIB_MKNODAT@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_MKTIME = @GNULIB_MKTIME@ +GNULIB_MODF = @GNULIB_MODF@ +GNULIB_MODFF = @GNULIB_MODFF@ +GNULIB_MODFL = @GNULIB_MODFL@ +GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ +GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_POWF = @GNULIB_POWF@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_QSORT_R = @GNULIB_QSORT_R@ +GNULIB_RAISE = @GNULIB_RAISE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMAINDER = @GNULIB_REMAINDER@ +GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ +GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RINT = @GNULIB_RINT@ +GNULIB_RINTF = @GNULIB_RINTF@ +GNULIB_RINTL = @GNULIB_RINTL@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SINF = @GNULIB_SINF@ +GNULIB_SINHF = @GNULIB_SINHF@ +GNULIB_SINL = @GNULIB_SINL@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_SQRTF = @GNULIB_SQRTF@ +GNULIB_SQRTL = @GNULIB_SQRTL@ +GNULIB_STAT = @GNULIB_STAT@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRFTIME = @GNULIB_STRFTIME@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRPTIME = @GNULIB_STRPTIME@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TANF = @GNULIB_TANF@ +GNULIB_TANHF = @GNULIB_TANHF@ +GNULIB_TANL = @GNULIB_TANL@ +GNULIB_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_TZSET = @GNULIB_TZSET@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WAITPID = @GNULIB_WAITPID@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +HAVE_ACOSF = @HAVE_ACOSF@ +HAVE_ACOSL = @HAVE_ACOSL@ +HAVE_ASINF = @HAVE_ASINF@ +HAVE_ASINL = @HAVE_ASINL@ +HAVE_ATAN2F = @HAVE_ATAN2F@ +HAVE_ATANF = @HAVE_ATANF@ +HAVE_ATANL = @HAVE_ATANL@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CBRT = @HAVE_CBRT@ +HAVE_CBRTF = @HAVE_CBRTF@ +HAVE_CBRTL = @HAVE_CBRTL@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_COPYSIGN = @HAVE_COPYSIGN@ +HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ +HAVE_COSF = @HAVE_COSF@ +HAVE_COSHF = @HAVE_COSHF@ +HAVE_COSL = @HAVE_COSL@ +HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ +HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ +HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ +HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ +HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ +HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ +HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ +HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ +HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ +HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ +HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ +HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ +HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ +HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ +HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ +HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ +HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ +HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ +HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ +HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_EXPF = @HAVE_EXPF@ +HAVE_EXPL = @HAVE_EXPL@ +HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ +HAVE_EXPM1 = @HAVE_EXPM1@ +HAVE_EXPM1F = @HAVE_EXPM1F@ +HAVE_FABSF = @HAVE_FABSF@ +HAVE_FABSL = @HAVE_FABSL@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FLOCK = @HAVE_FLOCK@ +HAVE_FMA = @HAVE_FMA@ +HAVE_FMAF = @HAVE_FMAF@ +HAVE_FMAL = @HAVE_FMAL@ +HAVE_FMODF = @HAVE_FMODF@ +HAVE_FMODL = @HAVE_FMODL@ +HAVE_FREELOCALE = @HAVE_FREELOCALE@ +HAVE_FREXPF = @HAVE_FREXPF@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSTATAT = @HAVE_FSTATAT@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_FUTIMENS = @HAVE_FUTIMENS@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETPASS = @HAVE_GETPASS@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_HYPOTF = @HAVE_HYPOTF@ +HAVE_HYPOTL = @HAVE_HYPOTL@ +HAVE_ILOGB = @HAVE_ILOGB@ +HAVE_ILOGBF = @HAVE_ILOGBF@ +HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LDEXPF = @HAVE_LDEXPF@ +HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOG10F = @HAVE_LOG10F@ +HAVE_LOG10L = @HAVE_LOG10L@ +HAVE_LOG1P = @HAVE_LOG1P@ +HAVE_LOG1PF = @HAVE_LOG1PF@ +HAVE_LOG1PL = @HAVE_LOG1PL@ +HAVE_LOGBF = @HAVE_LOGBF@ +HAVE_LOGBL = @HAVE_LOGBL@ +HAVE_LOGF = @HAVE_LOGF@ +HAVE_LOGL = @HAVE_LOGL@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDIRAT = @HAVE_MKDIRAT@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKFIFO = @HAVE_MKFIFO@ +HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ +HAVE_MKNOD = @HAVE_MKNOD@ +HAVE_MKNODAT = @HAVE_MKNODAT@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MODFF = @HAVE_MODFF@ +HAVE_MODFL = @HAVE_MODFL@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ +HAVE_POWF = @HAVE_POWF@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_QSORT_R = @HAVE_QSORT_R@ +HAVE_RAISE = @HAVE_RAISE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_REMAINDER = @HAVE_REMAINDER@ +HAVE_REMAINDERF = @HAVE_REMAINDERF@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RINT = @HAVE_RINT@ +HAVE_RINTL = @HAVE_RINTL@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SINF = @HAVE_SINF@ +HAVE_SINHF = @HAVE_SINHF@ +HAVE_SINL = @HAVE_SINL@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_SQRTF = @HAVE_SQRTF@ +HAVE_SQRTL = @HAVE_SQRTL@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRPTIME = @HAVE_STRPTIME@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ +HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TANF = @HAVE_TANF@ +HAVE_TANHF = @HAVE_TANHF@ +HAVE_TANL = @HAVE_TANL@ +HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_TZSET = @HAVE_TZSET@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSFTIME = @HAVE_WCSFTIME@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ +INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBGCRYPT = @LIBGCRYPT@ +LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBREADLINE = @LIBREADLINE@ +LIBS = @LIBS@ +LIBTHREAD = @LIBTHREAD@ +LIBTOOL = @LIBTOOL@ +LIB_ACL = @LIB_ACL@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LIB_EACCESS = @LIB_EACCESS@ +LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ +LIB_SELINUX = @LIB_SELINUX@ +LIMITS_H = @LIMITS_H@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTALLOCA = @LTALLOCA@ +LTLIBGCRYPT = @LTLIBGCRYPT@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBREADLINE = @LTLIBREADLINE@ +LTLIBTHREAD = @LTLIBTHREAD@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MDBLIBS = @MDBLIBS@ +MDB_DATETIME = @MDB_DATETIME@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ +NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LIMITS_H = @NEXT_LIMITS_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_ACOSF = @REPLACE_ACOSF@ +REPLACE_ASINF = @REPLACE_ASINF@ +REPLACE_ATAN2F = @REPLACE_ATAN2F@ +REPLACE_ATANF = @REPLACE_ATANF@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CBRTF = @REPLACE_CBRTF@ +REPLACE_CBRTL = @REPLACE_CBRTL@ +REPLACE_CEIL = @REPLACE_CEIL@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_COSF = @REPLACE_COSF@ +REPLACE_COSHF = @REPLACE_COSHF@ +REPLACE_CTIME = @REPLACE_CTIME@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_EXP2 = @REPLACE_EXP2@ +REPLACE_EXP2L = @REPLACE_EXP2L@ +REPLACE_EXPF = @REPLACE_EXPF@ +REPLACE_EXPM1 = @REPLACE_EXPM1@ +REPLACE_EXPM1F = @REPLACE_EXPM1F@ +REPLACE_FABSL = @REPLACE_FABSL@ +REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOOR = @REPLACE_FLOOR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FMA = @REPLACE_FMA@ +REPLACE_FMAF = @REPLACE_FMAF@ +REPLACE_FMAL = @REPLACE_FMAL@ +REPLACE_FMOD = @REPLACE_FMOD@ +REPLACE_FMODF = @REPLACE_FMODF@ +REPLACE_FMODL = @REPLACE_FMODL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPF = @REPLACE_FREXPF@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FSTAT = @REPLACE_FSTAT@ +REPLACE_FSTATAT = @REPLACE_FSTATAT@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETPASS = @REPLACE_GETPASS@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_GMTIME = @REPLACE_GMTIME@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_HYPOT = @REPLACE_HYPOT@ +REPLACE_HYPOTF = @REPLACE_HYPOTF@ +REPLACE_HYPOTL = @REPLACE_HYPOTL@ +REPLACE_ILOGB = @REPLACE_ILOGB@ +REPLACE_ILOGBF = @REPLACE_ILOGBF@ +REPLACE_ILOGBL = @REPLACE_ILOGBL@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LOG = @REPLACE_LOG@ +REPLACE_LOG10 = @REPLACE_LOG10@ +REPLACE_LOG10F = @REPLACE_LOG10F@ +REPLACE_LOG10L = @REPLACE_LOG10L@ +REPLACE_LOG1P = @REPLACE_LOG1P@ +REPLACE_LOG1PF = @REPLACE_LOG1PF@ +REPLACE_LOG1PL = @REPLACE_LOG1PL@ +REPLACE_LOG2 = @REPLACE_LOG2@ +REPLACE_LOG2F = @REPLACE_LOG2F@ +REPLACE_LOG2L = @REPLACE_LOG2L@ +REPLACE_LOGB = @REPLACE_LOGB@ +REPLACE_LOGBF = @REPLACE_LOGBF@ +REPLACE_LOGBL = @REPLACE_LOGBL@ +REPLACE_LOGF = @REPLACE_LOGF@ +REPLACE_LOGL = @REPLACE_LOGL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKFIFO = @REPLACE_MKFIFO@ +REPLACE_MKNOD = @REPLACE_MKNOD@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_MKTIME = @REPLACE_MKTIME@ +REPLACE_MODF = @REPLACE_MODF@ +REPLACE_MODFF = @REPLACE_MODFF@ +REPLACE_MODFL = @REPLACE_MODFL@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_OPENAT = @REPLACE_OPENAT@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_QSORT_R = @REPLACE_QSORT_R@ +REPLACE_RAISE = @REPLACE_RAISE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_READLINKAT = @REPLACE_READLINKAT@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMAINDER = @REPLACE_REMAINDER@ +REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ +REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SINF = @REPLACE_SINF@ +REPLACE_SINHF = @REPLACE_SINHF@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_SQRTF = @REPLACE_SQRTF@ +REPLACE_SQRTL = @REPLACE_SQRTL@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRFTIME = @REPLACE_STRFTIME@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ +REPLACE_TANF = @REPLACE_TANF@ +REPLACE_TANHF = @REPLACE_TANHF@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TRUNC = @REPLACE_TRUNC@ +REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ +REPLACE_TRUNCF = @REPLACE_TRUNCF@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_TZSET = @REPLACE_TZSET@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SED = @SED@ +SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ +UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +USE_ACL = @USE_ACL@ +USE_NLS = @USE_NLS@ +UUIDLIBS = @UUIDLIBS@ +VERSION = @VERSION@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ +WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ +WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +crypt_support = @crypt_support@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +have_uuid = @have_uuid@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +lib_LTLIBRARIES = librec.la +include_HEADERS = rec.h +librec_la_SOURCES = rec.c rec-mset.c rec-utils.h rec-utils.c \ + rec-comment.c rec-field-name.c rec-field.c rec-record.c \ + rec-rset.c rec-db.c rec-parser.c rec-writer.c rec-int.c \ + rec-sex-parser.h rec-sex-parser.c rec-sex-ast.h rec-sex-ast.c \ + rec-sex-tab.y rec-sex-lex.l rec-sex.c rec-fex.c rec-types.c \ + rec-buf.c rec-aggregate.c $(am__append_1) $(am__append_2) +BUILT_SOURCES = rec-sex-tab.h +AM_YFLAGS = -d +AM_LFLAGS = -d +AM_CFLAGS = $(am__append_3) +AM_LDFLAGS = -no-undefined +AM_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib \ + -DLOCALEDIR=\"$(localedir)\" $(am__append_5) $(am__append_7) +librec_la_LDFLAGS = -version-info 1:0:0 +librec_la_LIBADD = $(top_builddir)/lib/librecutils.la \ + $(LIB_CLOCK_GETTIME) $(am__append_4) $(am__append_6) \ + $(am__append_8) +all: $(BUILT_SOURCES) config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .l .lo .o .obj .y +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status src/config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } +rec-sex-tab.h: rec-sex-tab.c + @if test ! -f $@; then rm -f rec-sex-tab.c; else :; fi + @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) rec-sex-tab.c; else :; fi + +librec.la: $(librec_la_OBJECTS) $(librec_la_DEPENDENCIES) $(EXTRA_librec_la_DEPENDENCIES) + $(AM_V_CCLD)$(librec_la_LINK) -rpath $(libdir) $(librec_la_OBJECTS) $(librec_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-aggregate.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-buf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-comment.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-crypt-dummy.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-crypt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-db.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-fex.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-field-name.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-field.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-int.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-mset.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-parser.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-record.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-rset.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-sex-ast.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-sex-lex.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-sex-parser.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-sex-tab.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-sex.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-types.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-utils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-writer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +.l.c: + $(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE) + +.y.c: + $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-includeHEADERS: $(include_HEADERS) + @$(NORMAL_INSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ + done + +uninstall-includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) config.h +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -rm -f rec-sex-lex.c + -rm -f rec-sex-tab.c + -rm -f rec-sex-tab.h + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-includeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-includeHEADERS install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-includeHEADERS \ + uninstall-libLTLIBRARIES + +.PRECIOUS: Makefile + + +check-syntax: all + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/src/config.h b/devspec.en_US/project/recutils/src/config.h new file mode 100755 index 0000000..a0b3503 --- /dev/null +++ b/devspec.en_US/project/recutils/src/config.h @@ -0,0 +1,2046 @@ +/* src/config.h. Generated from config.h.in by configure. */ +/* src/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +/* #undef AC_APPLE_UNIVERSAL_BUILD */ + +/* Define to the number of bits in type 'ptrdiff_t'. */ +/* #undef BITSIZEOF_PTRDIFF_T */ + +/* Define to the number of bits in type 'sig_atomic_t'. */ +/* #undef BITSIZEOF_SIG_ATOMIC_T */ + +/* Define to the number of bits in type 'size_t'. */ +/* #undef BITSIZEOF_SIZE_T */ + +/* Define to the number of bits in type 'wchar_t'. */ +/* #undef BITSIZEOF_WCHAR_T */ + +/* Define to the number of bits in type 'wint_t'. */ +/* #undef BITSIZEOF_WINT_T */ + +/* Define if you wish *printf() functions that have a safe handling of + non-IEEE-754 'long double' values. */ +#define CHECK_PRINTF_SAFE 1 + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +/* #undef CRAY_STACKSEG_END */ + +/* Define to 1 if using `alloca.c'. */ +/* #undef C_ALLOCA */ + +/* Define to 1 if the C locale may have encoding errors. */ +#define C_LOCALE_MAYBE_EILSEQ 1 + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'double'. */ +#define DBL_EXPBIT0_BIT 20 + +/* Define as the word index where to find the exponent of 'double'. */ +#define DBL_EXPBIT0_WORD 1 + +/* Define as the bit index in the word where to find the sign of 'double'. */ +/* #undef DBL_SIGNBIT_BIT */ + +/* Define as the word index where to find the sign of 'double'. */ +/* #undef DBL_SIGNBIT_WORD */ + +/* Define to 1 if // is a file system root distinct from /. */ +/* #undef DOUBLE_SLASH_IS_DISTINCT_ROOT */ + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +#define ENABLE_NLS 1 + +/* Define this to 1 if F_DUPFD behavior does not match POSIX */ +/* #undef FCNTL_DUPFD_BUGGY */ + +/* Define to nothing if C supports flexible array members, and to 1 if it does + not. That way, with a declaration like 'struct s { int n; double + d[FLEXIBLE_ARRAY_MEMBER]; };', the struct hack can be used with pre-C99 + compilers. When computing the size of such an object, don't use 'sizeof + (struct s)' as it overestimates the size. Use 'offsetof (struct s, d)' + instead. Don't use 'offsetof (struct s, d[0])', as this doesn't work with + MSVC and with C++ compilers. */ +#define FLEXIBLE_ARRAY_MEMBER /**/ + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'float'. */ +#define FLT_EXPBIT0_BIT 23 + +/* Define as the word index where to find the exponent of 'float'. */ +#define FLT_EXPBIT0_WORD 0 + +/* Define as the bit index in the word where to find the sign of 'float'. */ +/* #undef FLT_SIGNBIT_BIT */ + +/* Define as the word index where to find the sign of 'float'. */ +/* #undef FLT_SIGNBIT_WORD */ + +/* Define to 1 if the system's ftello function has the Solaris bug. */ +/* #undef FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE */ + +/* Define to 1 if mkdir mistakenly creates a directory given with a trailing + dot component. */ +/* #undef FUNC_MKDIR_DOT_BUG */ + +/* Define to 1 if nl_langinfo (YESEXPR) returns a non-empty string. */ +#define FUNC_NL_LANGINFO_YESEXPR_WORKS 1 + +/* Define to 1 if realpath() can malloc memory, always gives an absolute path, + and handles trailing slash correctly. */ +#define FUNC_REALPATH_WORKS 1 + +/* Define to the type of elements in the array set by `getgroups'. Usually + this is either `int' or `gid_t'. */ +#define GETGROUPS_T gid_t + +/* Define this to 1 if getgroups(0,NULL) does not return the number of groups. + */ +/* #undef GETGROUPS_ZERO_BUG */ + +/* Define if gettimeofday clobbers the localtime buffer. */ +/* #undef GETTIMEOFDAY_CLOBBERS_LOCALTIME */ + +/* Define this to 'void' or 'struct timezone' to match the system's + declaration of the second argument to gettimeofday. */ +#define GETTIMEOFDAY_TIMEZONE struct timezone + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module canonicalize-lgpl shall be considered present. */ +#define GNULIB_CANONICALIZE_LGPL 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module close-stream shall be considered present. */ +#define GNULIB_CLOSE_STREAM 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module fscanf shall be considered present. */ +#define GNULIB_FSCANF 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module lock shall be considered present. */ +#define GNULIB_LOCK 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module mkostemp shall be considered present. */ +#define GNULIB_MKOSTEMP 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module msvc-nothrow shall be considered present. */ +#define GNULIB_MSVC_NOTHROW 1 + +/* Define to 1 if printf and friends should be labeled with attribute + "__gnu_printf__" instead of "__printf__" */ +/* #undef GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU */ + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module scanf shall be considered present. */ +#define GNULIB_SCANF 1 + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module strerror shall be considered present. */ +#define GNULIB_STRERROR 1 + +/* Define to 1 when the gnulib module btowc should be tested. */ +#define GNULIB_TEST_BTOWC 1 + +/* Define to 1 when the gnulib module canonicalize_file_name should be tested. + */ +#define GNULIB_TEST_CANONICALIZE_FILE_NAME 1 + +/* Define to 1 when the gnulib module chdir should be tested. */ +#define GNULIB_TEST_CHDIR 1 + +/* Define to 1 when the gnulib module cloexec should be tested. */ +#define GNULIB_TEST_CLOEXEC 1 + +/* Define to 1 when the gnulib module close should be tested. */ +#define GNULIB_TEST_CLOSE 1 + +/* Define to 1 when the gnulib module dup2 should be tested. */ +#define GNULIB_TEST_DUP2 1 + +/* Define to 1 when the gnulib module environ should be tested. */ +#define GNULIB_TEST_ENVIRON 1 + +/* Define to 1 when the gnulib module euidaccess should be tested. */ +#define GNULIB_TEST_EUIDACCESS 1 + +/* Define to 1 when the gnulib module fcntl should be tested. */ +#define GNULIB_TEST_FCNTL 1 + +/* Define to 1 when the gnulib module floor should be tested. */ +#define GNULIB_TEST_FLOOR 1 + +/* Define to 1 when the gnulib module fprintf-posix should be tested. */ +#define GNULIB_TEST_FPRINTF_POSIX 1 + +/* Define to 1 when the gnulib module frexp should be tested. */ +#define GNULIB_TEST_FREXP 1 + +/* Define to 1 when the gnulib module frexpl should be tested. */ +#define GNULIB_TEST_FREXPL 1 + +/* Define to 1 when the gnulib module fseek should be tested. */ +#define GNULIB_TEST_FSEEK 1 + +/* Define to 1 when the gnulib module fseeko should be tested. */ +#define GNULIB_TEST_FSEEKO 1 + +/* Define to 1 when the gnulib module fstat should be tested. */ +#define GNULIB_TEST_FSTAT 1 + +/* Define to 1 when the gnulib module ftell should be tested. */ +#define GNULIB_TEST_FTELL 1 + +/* Define to 1 when the gnulib module ftello should be tested. */ +#define GNULIB_TEST_FTELLO 1 + +/* Define to 1 when the gnulib module getdelim should be tested. */ +#define GNULIB_TEST_GETDELIM 1 + +/* Define to 1 when the gnulib module getdtablesize should be tested. */ +#define GNULIB_TEST_GETDTABLESIZE 1 + +/* Define to 1 when the gnulib module getgroups should be tested. */ +#define GNULIB_TEST_GETGROUPS 1 + +/* Define to 1 when the gnulib module getline should be tested. */ +#define GNULIB_TEST_GETLINE 1 + +/* Define to 1 when the gnulib module getpass should be tested. */ +#define GNULIB_TEST_GETPASS 1 + +/* Define to 1 when the gnulib module gettimeofday should be tested. */ +#define GNULIB_TEST_GETTIMEOFDAY 1 + +/* Define to 1 when the gnulib module group-member should be tested. */ +#define GNULIB_TEST_GROUP_MEMBER 1 + +/* Define to 1 when the gnulib module localeconv should be tested. */ +#define GNULIB_TEST_LOCALECONV 1 + +/* Define to 1 when the gnulib module lseek should be tested. */ +#define GNULIB_TEST_LSEEK 1 + +/* Define to 1 when the gnulib module lstat should be tested. */ +#define GNULIB_TEST_LSTAT 1 + +/* Define to 1 when the gnulib module malloc-posix should be tested. */ +#define GNULIB_TEST_MALLOC_POSIX 1 + +/* Define to 1 when the gnulib module mbrlen should be tested. */ +#define GNULIB_TEST_MBRLEN 1 + +/* Define to 1 when the gnulib module mbrtowc should be tested. */ +#define GNULIB_TEST_MBRTOWC 1 + +/* Define to 1 when the gnulib module mbsinit should be tested. */ +#define GNULIB_TEST_MBSINIT 1 + +/* Define to 1 when the gnulib module mbtowc should be tested. */ +#define GNULIB_TEST_MBTOWC 1 + +/* Define to 1 when the gnulib module memchr should be tested. */ +#define GNULIB_TEST_MEMCHR 1 + +/* Define to 1 when the gnulib module mkostemp should be tested. */ +#define GNULIB_TEST_MKOSTEMP 1 + +/* Define to 1 when the gnulib module mkstemp should be tested. */ +#define GNULIB_TEST_MKSTEMP 1 + +/* Define to 1 when the gnulib module mktime should be tested. */ +#define GNULIB_TEST_MKTIME 1 + +/* Define to 1 when the gnulib module nl_langinfo should be tested. */ +#define GNULIB_TEST_NL_LANGINFO 1 + +/* Define to 1 when the gnulib module open should be tested. */ +#define GNULIB_TEST_OPEN 1 + +/* Define to 1 when the gnulib module posix_spawnattr_destroy should be + tested. */ +#define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1 + +/* Define to 1 when the gnulib module posix_spawnattr_init should be tested. + */ +#define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1 + +/* Define to 1 when the gnulib module posix_spawnattr_setflags should be + tested. */ +#define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1 + +/* Define to 1 when the gnulib module posix_spawnattr_setsigmask should be + tested. */ +#define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1 + +/* Define to 1 when the gnulib module posix_spawnp should be tested. */ +#define GNULIB_TEST_POSIX_SPAWNP 1 + +/* Define to 1 when the gnulib module posix_spawn_file_actions_addopen should + be tested. */ +#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1 + +/* Define to 1 when the gnulib module posix_spawn_file_actions_destroy should + be tested. */ +#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1 + +/* Define to 1 when the gnulib module posix_spawn_file_actions_init should be + tested. */ +#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1 + +/* Define to 1 when the gnulib module printf-posix should be tested. */ +#define GNULIB_TEST_PRINTF_POSIX 1 + +/* Define to 1 when the gnulib module raise should be tested. */ +#define GNULIB_TEST_RAISE 1 + +/* Define to 1 when the gnulib module random_r should be tested. */ +#define GNULIB_TEST_RANDOM_R 1 + +/* Define to 1 when the gnulib module rawmemchr should be tested. */ +#define GNULIB_TEST_RAWMEMCHR 1 + +/* Define to 1 when the gnulib module readlink should be tested. */ +#define GNULIB_TEST_READLINK 1 + +/* Define to 1 when the gnulib module realloc-posix should be tested. */ +#define GNULIB_TEST_REALLOC_POSIX 1 + +/* Define to 1 when the gnulib module realpath should be tested. */ +#define GNULIB_TEST_REALPATH 1 + +/* Define to 1 when the gnulib module rename should be tested. */ +#define GNULIB_TEST_RENAME 1 + +/* Define to 1 when the gnulib module rmdir should be tested. */ +#define GNULIB_TEST_RMDIR 1 + +/* Define to 1 when the gnulib module secure_getenv should be tested. */ +#define GNULIB_TEST_SECURE_GETENV 1 + +/* Define to 1 when the gnulib module setenv should be tested. */ +#define GNULIB_TEST_SETENV 1 + +/* Define to 1 when the gnulib module sigaction should be tested. */ +#define GNULIB_TEST_SIGACTION 1 + +/* Define to 1 when the gnulib module signbit should be tested. */ +#define GNULIB_TEST_SIGNBIT 1 + +/* Define to 1 when the gnulib module sigprocmask should be tested. */ +#define GNULIB_TEST_SIGPROCMASK 1 + +/* Define to 1 when the gnulib module stat should be tested. */ +#define GNULIB_TEST_STAT 1 + +/* Define to 1 when the gnulib module strcasestr should be tested. */ +#define GNULIB_TEST_STRCASESTR 1 + +/* Define to 1 when the gnulib module strchrnul should be tested. */ +#define GNULIB_TEST_STRCHRNUL 1 + +/* Define to 1 when the gnulib module strdup should be tested. */ +#define GNULIB_TEST_STRDUP 1 + +/* Define to 1 when the gnulib module strerror should be tested. */ +#define GNULIB_TEST_STRERROR 1 + +/* Define to 1 when the gnulib module strsep should be tested. */ +#define GNULIB_TEST_STRSEP 1 + +/* Define to 1 when the gnulib module strverscmp should be tested. */ +#define GNULIB_TEST_STRVERSCMP 1 + +/* Define to 1 when the gnulib module timegm should be tested. */ +#define GNULIB_TEST_TIMEGM 1 + +/* Define to 1 when the gnulib module time_r should be tested. */ +#define GNULIB_TEST_TIME_R 1 + +/* Define to 1 when the gnulib module time_rz should be tested. */ +#define GNULIB_TEST_TIME_RZ 1 + +/* Define to 1 when the gnulib module tzset should be tested. */ +#define GNULIB_TEST_TZSET 1 + +/* Define to 1 when the gnulib module unsetenv should be tested. */ +#define GNULIB_TEST_UNSETENV 1 + +/* Define to 1 when the gnulib module vasprintf should be tested. */ +#define GNULIB_TEST_VASPRINTF 1 + +/* Define to 1 when the gnulib module vfprintf-posix should be tested. */ +#define GNULIB_TEST_VFPRINTF_POSIX 1 + +/* Define to 1 when the gnulib module waitpid should be tested. */ +#define GNULIB_TEST_WAITPID 1 + +/* Define to 1 when the gnulib module wcrtomb should be tested. */ +#define GNULIB_TEST_WCRTOMB 1 + +/* Define to 1 when the gnulib module wctob should be tested. */ +#define GNULIB_TEST_WCTOB 1 + +/* Define to 1 when the gnulib module wctomb should be tested. */ +#define GNULIB_TEST_WCTOMB 1 + +/* Define to 1 if you have the `aclsort' function. */ +/* #undef HAVE_ACLSORT */ + +/* Define to 1 if you have the <aclv.h> header file. */ +/* #undef HAVE_ACLV_H */ + +/* Define to 1 if you have the `aclx_get' function. */ +/* #undef HAVE_ACLX_GET */ + +/* Define to 1 if you have the `acl_copy_ext_native' function. */ +/* #undef HAVE_ACL_COPY_EXT_NATIVE */ + +/* Define to 1 if you have the `acl_create_entry_np' function. */ +/* #undef HAVE_ACL_CREATE_ENTRY_NP */ + +/* Define to 1 if you have the `acl_delete_def_file' function. */ +/* #undef HAVE_ACL_DELETE_DEF_FILE */ + +/* Define to 1 if you have the `acl_delete_fd_np' function. */ +/* #undef HAVE_ACL_DELETE_FD_NP */ + +/* Define to 1 if you have the `acl_delete_file_np' function. */ +/* #undef HAVE_ACL_DELETE_FILE_NP */ + +/* Define to 1 if you have the `acl_entries' function. */ +/* #undef HAVE_ACL_ENTRIES */ + +/* Define to 1 if you have the `acl_extended_file' function. */ +/* #undef HAVE_ACL_EXTENDED_FILE */ + +/* Define to 1 if the constant ACL_FIRST_ENTRY exists. */ +/* #undef HAVE_ACL_FIRST_ENTRY */ + +/* Define to 1 if you have the `acl_free' function. */ +/* #undef HAVE_ACL_FREE */ + +/* Define to 1 if you have the `acl_free_text' function. */ +/* #undef HAVE_ACL_FREE_TEXT */ + +/* Define to 1 if you have the `acl_from_mode' function. */ +/* #undef HAVE_ACL_FROM_MODE */ + +/* Define to 1 if you have the `acl_from_text' function. */ +/* #undef HAVE_ACL_FROM_TEXT */ + +/* Define to 1 if you have the `acl_get_fd' function. */ +/* #undef HAVE_ACL_GET_FD */ + +/* Define to 1 if you have the `acl_get_file' function. */ +/* #undef HAVE_ACL_GET_FILE */ + +/* Define to 1 if you have the <acl/libacl.h> header file. */ +/* #undef HAVE_ACL_LIBACL_H */ + +/* Define to 1 if you have the `acl_set_fd' function. */ +/* #undef HAVE_ACL_SET_FD */ + +/* Define to 1 if you have the `acl_set_file' function. */ +/* #undef HAVE_ACL_SET_FILE */ + +/* Define to 1 if you have the `acl_to_short_text' function. */ +/* #undef HAVE_ACL_TO_SHORT_TEXT */ + +/* Define to 1 if you have the `acl_trivial' function. */ +/* #undef HAVE_ACL_TRIVIAL */ + +/* Define to 1 if the ACL type ACL_TYPE_EXTENDED exists. */ +/* #undef HAVE_ACL_TYPE_EXTENDED */ + +/* Define to 1 if you have 'alloca' after including <alloca.h>, a header that + may be supplied by this distribution. */ +#define HAVE_ALLOCA 1 + +/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix). + */ +#define HAVE_ALLOCA_H 1 + +/* Define to 1 if you have the <bp-sym.h> header file. */ +/* #undef HAVE_BP_SYM_H */ + +/* Define to 1 if you have the `btowc' function. */ +#define HAVE_BTOWC 1 + +/* Define to 1 if you have the `canonicalize_file_name' function. */ +#define HAVE_CANONICALIZE_FILE_NAME 1 + +/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +/* #undef HAVE_CFLOCALECOPYCURRENT */ + +/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */ + +/* Define to 1 if you have the `clock_gettime' function. */ +#define HAVE_CLOCK_GETTIME 1 + +/* Define to 1 if you have the `clock_settime' function. */ +#define HAVE_CLOCK_SETTIME 1 + +/* Define if you have compound literals. */ +#define HAVE_COMPOUND_LITERALS 1 + +/* Define to 1 if you have the `confstr' function. */ +/* #undef HAVE_CONFSTR */ + +/* Define if the copysignf function is declared in <math.h> and available in + libc. */ +/* #undef HAVE_COPYSIGNF_IN_LIBC */ + +/* Define if the copysignl function is declared in <math.h> and available in + libc. */ +/* #undef HAVE_COPYSIGNL_IN_LIBC */ + +/* Define if the copysign function is declared in <math.h> and available in + libc. */ +/* #undef HAVE_COPYSIGN_IN_LIBC */ + +/* Define to 1 if you have the <crtdefs.h> header file. */ +/* #undef HAVE_CRTDEFS_H */ + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +#define HAVE_DCGETTEXT 1 + +/* Define to 1 if you have the declaration of `alarm', and to 0 if you don't. + */ +#define HAVE_DECL_ALARM 1 + +/* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_CLEARERR_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `copysign', and to 0 if you + don't. */ +/* #undef HAVE_DECL_COPYSIGN */ + +/* Define to 1 if you have the declaration of `copysignf', and to 0 if you + don't. */ +/* #undef HAVE_DECL_COPYSIGNF */ + +/* Define to 1 if you have the declaration of `copysignl', and to 0 if you + don't. */ +/* #undef HAVE_DECL_COPYSIGNL */ + +/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you + don't. */ +#define HAVE_DECL_FEOF_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FERROR_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FFLUSH_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FGETS_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `flockfile', and to 0 if you + don't. */ +#define HAVE_DECL_FLOCKFILE 1 + +/* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FPUTC_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FPUTS_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FREAD_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fseeko', and to 0 if you don't. + */ +#define HAVE_DECL_FSEEKO 1 + +/* Define to 1 if you have the declaration of `ftello', and to 0 if you don't. + */ +#define HAVE_DECL_FTELLO 1 + +/* Define to 1 if you have the declaration of `funlockfile', and to 0 if you + don't. */ +#define HAVE_DECL_FUNLOCKFILE 1 + +/* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FWRITE_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_GETCHAR_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you + don't. */ +#define HAVE_DECL_GETC_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `getdelim', and to 0 if you + don't. */ +#define HAVE_DECL_GETDELIM 1 + +/* Define to 1 if you have the declaration of `getdtablesize', and to 0 if you + don't. */ +#define HAVE_DECL_GETDTABLESIZE 1 + +/* Define to 1 if you have the declaration of `getline', and to 0 if you + don't. */ +#define HAVE_DECL_GETLINE 1 + +/* Define to 1 if you have the declaration of `isblank', and to 0 if you + don't. */ +#define HAVE_DECL_ISBLANK 1 + +/* Define to 1 if you have the declaration of `localtime_r', and to 0 if you + don't. */ +#define HAVE_DECL_LOCALTIME_R 1 + +/* Define to 1 if you have the declaration of `mbrlen', and to 0 if you don't. + */ +/* #undef HAVE_DECL_MBRLEN */ + +/* Define to 1 if you have the declaration of `mbrtowc', and to 0 if you + don't. */ +/* #undef HAVE_DECL_MBRTOWC */ + +/* Define to 1 if you have the declaration of `mbsinit', and to 0 if you + don't. */ +/* #undef HAVE_DECL_MBSINIT */ + +/* Define to 1 if you have the declaration of `program_invocation_name', and + to 0 if you don't. */ +#define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 + +/* Define to 1 if you have the declaration of `program_invocation_short_name', + and to 0 if you don't. */ +#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 + +/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_PUTCHAR_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you + don't. */ +#define HAVE_DECL_PUTC_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `setenv', and to 0 if you don't. + */ +#define HAVE_DECL_SETENV 1 + +/* Define to 1 if you have the declaration of `strdup', and to 0 if you don't. + */ +#define HAVE_DECL_STRDUP 1 + +/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you + don't. */ +#define HAVE_DECL_STRERROR_R 1 + +/* Define to 1 if you have the declaration of `strncasecmp', and to 0 if you + don't. */ +#define HAVE_DECL_STRNCASECMP 1 + +/* Define to 1 if you have the declaration of `towlower', and to 0 if you + don't. */ +/* #undef HAVE_DECL_TOWLOWER */ + +/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't. + */ +/* #undef HAVE_DECL_TZNAME */ + +/* Define to 1 if you have the declaration of `unsetenv', and to 0 if you + don't. */ +#define HAVE_DECL_UNSETENV 1 + +/* Define to 1 if you have the declaration of `wcrtomb', and to 0 if you + don't. */ +/* #undef HAVE_DECL_WCRTOMB */ + +/* Define to 1 if you have the declaration of `wctob', and to 0 if you don't. + */ +#define HAVE_DECL_WCTOB 1 + +/* Define to 1 if you have the declaration of `_fseeki64', and to 0 if you + don't. */ +/* #undef HAVE_DECL__FSEEKI64 */ + +/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you + don't. */ +#define HAVE_DECL__SNPRINTF 0 + +/* Define to 1 if you have the declaration of `__argv', and to 0 if you don't. + */ +#define HAVE_DECL___ARGV 0 + +/* Define to 1 if you have the declaration of `__fpending', and to 0 if you + don't. */ +#define HAVE_DECL___FPENDING 1 + +/* Define to 1 if you have the declaration of `__fsetlocking', and to 0 if you + don't. */ +/* #undef HAVE_DECL___FSETLOCKING */ + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the 'dup2' function. */ +#define HAVE_DUP2 1 + +/* Define to 1 if you have the `eaccess' function. */ +/* #undef HAVE_EACCESS */ + +/* Define if you have the declaration of environ. */ +#define HAVE_ENVIRON_DECL 1 + +/* Define to 1 if you have the `euidaccess' function. */ +#define HAVE_EUIDACCESS 1 + +/* Define to 1 if you have the `faccessat' function. */ +#define HAVE_FACCESSAT 1 + +/* Define to 1 if you have the `facl' function. */ +/* #undef HAVE_FACL */ + +/* Define to 1 if you have the `fchmod' function. */ +#define HAVE_FCHMOD 1 + +/* Define to 1 if you have the `fcntl' function. */ +#define HAVE_FCNTL 1 + +/* Define to 1 if you have the <features.h> header file. */ +#define HAVE_FEATURES_H 1 + +/* Define to 1 if you have the `flock' function. */ +#define HAVE_FLOCK 1 + +/* Define to 1 if you have the `flockfile' function. */ +/* #undef HAVE_FLOCKFILE */ + +/* Define if the frexpl function is available in libc. */ +#define HAVE_FREXPL_IN_LIBC 1 + +/* Define if the frexp function is available in libc. */ +#define HAVE_FREXP_IN_LIBC 1 + +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +#define HAVE_FSEEKO 1 + +/* Define to 1 if you have the `funlockfile' function. */ +/* #undef HAVE_FUNLOCKFILE */ + +/* Define to 1 if you have the `getacl' function. */ +/* #undef HAVE_GETACL */ + +/* Define to 1 if you have the `getcwd' function. */ +#define HAVE_GETCWD 1 + +/* Define to 1 if you have the `getdelim' function. */ +#define HAVE_GETDELIM 1 + +/* Define to 1 if you have the `getdtablesize' function. */ +#define HAVE_GETDTABLESIZE 1 + +/* Define to 1 if you have the `getegid' function. */ +#define HAVE_GETEGID 1 + +/* Define to 1 if you have the `geteuid' function. */ +#define HAVE_GETEUID 1 + +/* Define to 1 if you have the `getexecname' function. */ +/* #undef HAVE_GETEXECNAME */ + +/* Define to 1 if you have the `getgid' function. */ +#define HAVE_GETGID 1 + +/* Define to 1 if your system has a working `getgroups' function. */ +#define HAVE_GETGROUPS 1 + +/* Define to 1 if you have the <getopt.h> header file. */ +#define HAVE_GETOPT_H 1 + +/* Define to 1 if you have the `getopt_long_only' function. */ +#define HAVE_GETOPT_LONG_ONLY 1 + +/* Define to 1 if you have the `getpass' function. */ +#define HAVE_GETPASS 1 + +/* Define to 1 if you have the `getprogname' function. */ +/* #undef HAVE_GETPROGNAME */ + +/* Define if the GNU gettext() function is already present or preinstalled. */ +#define HAVE_GETTEXT 1 + +/* Define to 1 if you have the `gettimeofday' function. */ +#define HAVE_GETTIMEOFDAY 1 + +/* Define to 1 if you have the `getuid' function. */ +#define HAVE_GETUID 1 + +/* Define if you have the iconv() function and it works. */ +/* #undef HAVE_ICONV */ + +/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */ +#define HAVE_INTMAX_T 1 + +/* Define to 1 if you have the <inttypes.h> header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and + declares uintmax_t. */ +#define HAVE_INTTYPES_H_WITH_UINTMAX 1 + +/* Define to 1 if you have the `isblank' function. */ +#define HAVE_ISBLANK 1 + +/* Define if the isnan(double) function is available in libc. */ +#define HAVE_ISNAND_IN_LIBC 1 + +/* Define if the isnan(float) function is available in libc. */ +#define HAVE_ISNANF_IN_LIBC 1 + +/* Define if the isnan(long double) function is available in libc. */ +#define HAVE_ISNANL_IN_LIBC 1 + +/* Define to 1 if you have the `issetugid' function. */ +/* #undef HAVE_ISSETUGID */ + +/* Define to 1 if you have the `iswcntrl' function. */ +#define HAVE_ISWCNTRL 1 + +/* Define to 1 if you have the `iswctype' function. */ +#define HAVE_ISWCTYPE 1 + +/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */ +#define HAVE_LANGINFO_CODESET 1 + +/* Define to 1 if you have the <langinfo.h> header file. */ +#define HAVE_LANGINFO_H 1 + +/* Define if the ldexpl function is available in libc. */ +#define HAVE_LDEXPL_IN_LIBC 1 + +/* Define if the ldexp function is available in libc. */ +#define HAVE_LDEXP_IN_LIBC 1 + +/* Define if you have the libgcrypt library. */ +/* #undef HAVE_LIBGCRYPT */ + +/* Define to 1 if you have the <libgen.h> header file. */ +/* #undef HAVE_LIBGEN_H */ + +/* Define to 1 if you have the <libintl.h> header file. */ +#define HAVE_LIBINTL_H 1 + +/* Define to 1 if you have the <limits.h> header file. */ +#define HAVE_LIMITS_H 1 + +/* Define to 1 if you have the `link' function. */ +#define HAVE_LINK 1 + +/* Define if localtime-like functions can loop forever on extreme arguments. + */ +/* #undef HAVE_LOCALTIME_INFLOOP_BUG */ + +/* Define to 1 if you have the `localtime_r' function. */ +#define HAVE_LOCALTIME_R 1 + +/* Define to 1 if the system has the type 'long long int'. */ +#define HAVE_LONG_LONG_INT 1 + +/* Define to 1 if you have the `lstat' function. */ +#define HAVE_LSTAT 1 + +/* Define to 1 if you have the <malloc.h> header file. */ +#define HAVE_MALLOC_H 1 + +/* Define if the 'malloc' function is POSIX compliant. */ +#define HAVE_MALLOC_POSIX 1 + +/* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including + config.h and <sys/mman.h>. */ +#define HAVE_MAP_ANONYMOUS 1 + +/* Define to 1 if you have the <math.h> header file. */ +#define HAVE_MATH_H 1 + +/* Define to 1 if you have the `mbrlen' function. */ +#define HAVE_MBRLEN 1 + +/* Define to 1 if you have the `mbrtowc' function. */ +#define HAVE_MBRTOWC 1 + +/* Define to 1 if you have the `mbsinit' function. */ +#define HAVE_MBSINIT 1 + +/* Define to 1 if <wchar.h> declares mbstate_t. */ +#define HAVE_MBSTATE_T 1 + +/* Define to 1 if you have the <memory.h> header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if <limits.h> defines the MIN and MAX macros. */ +/* #undef HAVE_MINMAX_IN_LIMITS_H */ + +/* Define to 1 if <sys/param.h> defines the MIN and MAX macros. */ +#define HAVE_MINMAX_IN_SYS_PARAM_H 1 + +/* Define to 1 if you have the `mkostemp' function. */ +#define HAVE_MKOSTEMP 1 + +/* Define to 1 if you have the `mkstemp' function. */ +#define HAVE_MKSTEMP 1 + +/* Define to 1 if you have the `mprotect' function. */ +#define HAVE_MPROTECT 1 + +/* Define to 1 on MSVC platforms that have the "invalid parameter handler" + concept. */ +/* #undef HAVE_MSVC_INVALID_PARAMETER_HANDLER */ + +/* Define to 1 if you have the `nl_langinfo' function. */ +#define HAVE_NL_LANGINFO 1 + +/* Define to 1 if the system has obstacks that work with any size object. */ +/* #undef HAVE_OBSTACK */ + +/* Define to 1 if you have the <paths.h> header file. */ +/* #undef HAVE_PATHS_H */ + +/* Define to 1 if you have the `posix_spawn' function. */ +#define HAVE_POSIX_SPAWN 1 + +/* Define to 1 if the system has the type `posix_spawnattr_t'. */ +#define HAVE_POSIX_SPAWNATTR_T 1 + +/* Define to 1 if the system has the type `posix_spawn_file_actions_t'. */ +#define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1 + +/* Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE. */ +#define HAVE_PTHREAD_MUTEX_RECURSIVE 1 + +/* Define if the POSIX multithreading library has read/write locks. */ +#define HAVE_PTHREAD_RWLOCK 1 + +/* Define if the 'pthread_rwlock_rdlock' function prefers a writer to a + reader. */ +/* #undef HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER */ + +/* Define to 1 if you have the `raise' function. */ +#define HAVE_RAISE 1 + +/* Define to 1 if you have the <random.h> header file. */ +/* #undef HAVE_RANDOM_H */ + +/* Define to 1 if you have the `random_r' function. */ +#define HAVE_RANDOM_R 1 + +/* Define to 1 if you have the `rawmemchr' function. */ +#define HAVE_RAWMEMCHR 1 + +/* Define if you have the readline library. */ +/* #undef HAVE_READLINE */ + +/* Define to 1 if you have the <readline/history.h> header file. */ +/* #undef HAVE_READLINE_HISTORY_H */ + +/* Define to 1 if you have the <readline/readline.h> header file. */ +/* #undef HAVE_READLINE_READLINE_H */ + +/* Define to 1 if you have the `readlink' function. */ +#define HAVE_READLINK 1 + +/* Define if the 'realloc' function is POSIX compliant. */ +#define HAVE_REALLOC_POSIX 1 + +/* Define to 1 if you have the `realpath' function. */ +#define HAVE_REALPATH 1 + +/* Define to 1 if you have run the test for working tzset. */ +#define HAVE_RUN_TZSET_TEST 1 + +/* Define to 1 if 'long double' and 'double' have the same representation. */ +/* #undef HAVE_SAME_LONG_DOUBLE_AS_DOUBLE */ + +/* Define to 1 if you have the <sched.h> header file. */ +/* #undef HAVE_SCHED_H */ + +/* Define to 1 if you have the `sched_setparam' function. */ +/* #undef HAVE_SCHED_SETPARAM */ + +/* Define to 1 if you have the `sched_setscheduler' function. */ +/* #undef HAVE_SCHED_SETSCHEDULER */ + +/* Define to 1 if you have the <search.h> header file. */ +#define HAVE_SEARCH_H 1 + +/* Define to 1 if you have the `secure_getenv' function. */ +#define HAVE_SECURE_GETENV 1 + +/* Define to 1 if you have the <selinux/context.h> header file. */ +/* #undef HAVE_SELINUX_CONTEXT_H */ + +/* Define to 1 if you have the <selinux/selinux.h> header file. */ +#define HAVE_SELINUX_SELINUX_H 0 + +/* Define to 1 if you have the `setdtablesize' function. */ +/* #undef HAVE_SETDTABLESIZE */ + +/* Define to 1 if you have the `setegid' function. */ +/* #undef HAVE_SETEGID */ + +/* Define to 1 if you have the `setenv' function. */ +#define HAVE_SETENV 1 + +/* Define to 1 if you have the `seteuid' function. */ +/* #undef HAVE_SETEUID */ + +/* Define to 1 if you have the `sigaction' function. */ +#define HAVE_SIGACTION 1 + +/* Define to 1 if you have the `sigaltstack' function. */ +#define HAVE_SIGALTSTACK 1 + +/* Define to 1 if the system has the type `siginfo_t'. */ +/* #undef HAVE_SIGINFO_T */ + +/* Define to 1 if you have the `siginterrupt' function. */ +#define HAVE_SIGINTERRUPT 1 + +/* Define to 1 if 'sig_atomic_t' is a signed integer type. */ +/* #undef HAVE_SIGNED_SIG_ATOMIC_T */ + +/* Define to 1 if 'wchar_t' is a signed integer type. */ +/* #undef HAVE_SIGNED_WCHAR_T */ + +/* Define to 1 if 'wint_t' is a signed integer type. */ +/* #undef HAVE_SIGNED_WINT_T */ + +/* Define to 1 if the system has the type `sigset_t'. */ +#define HAVE_SIGSET_T 1 + +/* Define to 1 if the system has the type `sig_atomic_t'. */ +#define HAVE_SIG_ATOMIC_T 1 + +/* Define to 1 if you have the `snprintf' function. */ +#define HAVE_SNPRINTF 1 + +/* Define if the return value of the snprintf function is the number of of + bytes (excluding the terminating NUL) that would have been produced if the + buffer had been large enough. */ +#define HAVE_SNPRINTF_RETVAL_C99 1 + +/* Define to 1 if you have the <spawn.h> header file. */ +#define HAVE_SPAWN_H 1 + +/* Define to 1 if you have the `statacl' function. */ +/* #undef HAVE_STATACL */ + +/* Define to 1 if you have the <stdint.h> header file. */ +#define HAVE_STDINT_H 1 + +/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares + uintmax_t. */ +#define HAVE_STDINT_H_WITH_UINTMAX 1 + +/* Define to 1 if you have the <stdio_ext.h> header file. */ +#define HAVE_STDIO_EXT_H 1 + +/* Define to 1 if you have the <stdlib.h> header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the `strcasecmp' function. */ +#define HAVE_STRCASECMP 1 + +/* Define to 1 if you have the `strcasestr' function. */ +#define HAVE_STRCASESTR 1 + +/* Define to 1 if you have the `strchrnul' function. */ +#define HAVE_STRCHRNUL 1 + +/* Define to 1 if you have the `strdup' function. */ +#define HAVE_STRDUP 1 + +/* Define to 1 if you have the `strerror_r' function. */ +#define HAVE_STRERROR_R 1 + +/* Define to 1 if you have the <strings.h> header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the <string.h> header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the `strncasecmp' function. */ +#define HAVE_STRNCASECMP 1 + +/* Define to 1 if you have the `strnlen' function. */ +#define HAVE_STRNLEN 1 + +/* Define to 1 if you have the `strsep' function. */ +#define HAVE_STRSEP 1 + +/* Define to 1 if `l_type' is a member of `struct flock'. */ +/* #undef HAVE_STRUCT_FLOCK_L_TYPE */ + +/* Define to 1 if `decimal_point' is a member of `struct lconv'. */ +/* #undef HAVE_STRUCT_LCONV_DECIMAL_POINT */ + +/* Define to 1 if the system has the type `struct random_data'. */ +#define HAVE_STRUCT_RANDOM_DATA 1 + +/* Define to 1 if `sa_sigaction' is a member of `struct sigaction'. */ +#define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 + +/* Define to 1 if `st_atimensec' is a member of `struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_ATIMENSEC */ + +/* Define to 1 if `st_atimespec.tv_nsec' is a member of `struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC */ + +/* Define to 1 if `st_atim.st__tim.tv_nsec' is a member of `struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC */ + +/* Define to 1 if `st_atim.tv_nsec' is a member of `struct stat'. */ +#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 + +/* Define to 1 if `st_birthtimensec' is a member of `struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC */ + +/* Define to 1 if `st_birthtimespec.tv_nsec' is a member of `struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC */ + +/* Define to 1 if `st_birthtim.tv_nsec' is a member of `struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC */ + +/* Define to 1 if `tm_zone' is a member of `struct tm'. */ +#define HAVE_STRUCT_TM_TM_ZONE 1 + +/* Define to 1 if you have the `strverscmp' function. */ +#define HAVE_STRVERSCMP 1 + +/* Define to 1 if you have the `symlink' function. */ +#define HAVE_SYMLINK 1 + +/* Define to 1 if you have the <sys/acl.h> header file. */ +/* #undef HAVE_SYS_ACL_H */ + +/* Define to 1 if you have the <sys/bitypes.h> header file. */ +/* #undef HAVE_SYS_BITYPES_H */ + +/* Define to 1 if you have the <sys/cdefs.h> header file. */ +#define HAVE_SYS_CDEFS_H 1 + +/* Define to 1 if you have the <sys/file.h> header file. */ +#define HAVE_SYS_FILE_H 1 + +/* Define to 1 if you have the <sys/inttypes.h> header file. */ +/* #undef HAVE_SYS_INTTYPES_H */ + +/* Define to 1 if you have the <sys/mman.h> header file. */ +#define HAVE_SYS_MMAN_H 1 + +/* Define to 1 if you have the <sys/param.h> header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the <sys/socket.h> header file. */ +#define HAVE_SYS_SOCKET_H 1 + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the <sys/time.h> header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the <sys/types.h> header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the <sys/wait.h> header file. */ +#define HAVE_SYS_WAIT_H 1 + +/* Define to 1 if the system has the 'tcgetattr' function. */ +/* #undef HAVE_TCGETATTR */ + +/* Define to 1 if the system has the 'tcsetattr' function. */ +/* #undef HAVE_TCSETATTR */ + +/* Define to 1 if you have the <termios.h> header file. */ +#define HAVE_TERMIOS_H 1 + +/* Define to 1 if you have the `timegm' function. */ +#define HAVE_TIMEGM 1 + +/* Define to 1 if the system has the type `timezone_t'. */ +/* #undef HAVE_TIMEZONE_T */ + +/* Define if struct tm has the tm_gmtoff member. */ +#define HAVE_TM_GMTOFF 1 + +/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use + `HAVE_STRUCT_TM_TM_ZONE' instead. */ +#define HAVE_TM_ZONE 1 + +/* Define to 1 if you have the `towlower' function. */ +#define HAVE_TOWLOWER 1 + +/* Define to 1 if you have the `tsearch' function. */ +#define HAVE_TSEARCH 1 + +/* Define to 1 if you don't have `tm_zone' but do have the external array + `tzname'. */ +/* #undef HAVE_TZNAME */ + +/* Define to 1 if you have the `tzset' function. */ +#define HAVE_TZSET 1 + +/* Define to 1 if you have the <unistd.h> header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the `unsetenv' function. */ +#define HAVE_UNSETENV 1 + +/* Define to 1 if the system has the type 'unsigned long long int'. */ +#define HAVE_UNSIGNED_LONG_LONG_INT 1 + +/* Define if you have a global __progname variable */ +/* #undef HAVE_VAR___PROGNAME */ + +/* Define to 1 if you have the `vasnprintf' function. */ +/* #undef HAVE_VASNPRINTF */ + +/* Define to 1 if you have the `vasprintf' function. */ +#define HAVE_VASPRINTF 1 + +/* Define to 1 if you have the `vfork' function. */ +/* #undef HAVE_VFORK */ + +/* Define to 1 if you have the `waitid' function. */ +#define HAVE_WAITID 1 + +/* Define to 1 if you have the <wchar.h> header file. */ +#define HAVE_WCHAR_H 1 + +/* Define if you have the 'wchar_t' type. */ +#define HAVE_WCHAR_T 1 + +/* Define to 1 if you have the `wcrtomb' function. */ +#define HAVE_WCRTOMB 1 + +/* Define to 1 if you have the `wcslen' function. */ +#define HAVE_WCSLEN 1 + +/* Define to 1 if you have the `wcsnlen' function. */ +#define HAVE_WCSNLEN 1 + +/* Define to 1 if you have the `wctob' function. */ +#define HAVE_WCTOB 1 + +/* Define to 1 if you have the <wctype.h> header file. */ +#define HAVE_WCTYPE_H 1 + +/* Define to 1 if you have the <winsock2.h> header file. */ +/* #undef HAVE_WINSOCK2_H */ + +/* Define if you have the 'wint_t' type. */ +#define HAVE_WINT_T 1 + +/* Define to 1 if O_NOATIME works. */ +#define HAVE_WORKING_O_NOATIME 1 + +/* Define to 1 if O_NOFOLLOW works. */ +#define HAVE_WORKING_O_NOFOLLOW 1 + +/* Define to 1 if you have the <xlocale.h> header file. */ +#define HAVE_XLOCALE_H 1 + +/* Define to 1 if the system has the type `_Bool'. */ +#define HAVE__BOOL 1 + +/* Define to 1 if you have the `_fseeki64' function. */ +/* #undef HAVE__FSEEKI64 */ + +/* Define to 1 if you have the `_ftelli64' function. */ +/* #undef HAVE__FTELLI64 */ + +/* Define to 1 if you have the `_set_invalid_parameter_handler' function. */ +/* #undef HAVE__SET_INVALID_PARAMETER_HANDLER */ + +/* Define to 1 if the compiler supports __builtin_expect, + and to 2 if <builtins.h> does. */ +#define HAVE___BUILTIN_EXPECT 1 +#ifndef HAVE___BUILTIN_EXPECT +# define __builtin_expect(e, c) (e) +#elif HAVE___BUILTIN_EXPECT == 2 +# include <builtins.h> +#endif + + +/* Define to 1 if you have the `__fseterr' function. */ +/* #undef HAVE___FSETERR */ + +/* Define to 1 if you have the `__fsetlocking' function. */ +#define HAVE___FSETLOCKING 1 + +/* Define to 1 if you have the `__fwriting' function. */ +#define HAVE___FWRITING 1 + +/* Define to 1 if the compiler supports the keyword '__inline'. */ +#define HAVE___INLINE 1 + +/* Define to 1 if you have the `__secure_getenv' function. */ +/* #undef HAVE___SECURE_GETENV */ + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'long double'. */ +/* #undef LDBL_EXPBIT0_BIT */ + +/* Define as the word index where to find the exponent of 'long double'. */ +/* #undef LDBL_EXPBIT0_WORD */ + +/* Define as the bit index in the word where to find the sign of 'long + double'. */ +/* #undef LDBL_SIGNBIT_BIT */ + +/* Define as the word index where to find the sign of 'long double'. */ +/* #undef LDBL_SIGNBIT_WORD */ + +/* Define to 1 if lseek does not detect pipes. */ +/* #undef LSEEK_PIPE_BROKEN */ + +/* Define to 1 if 'lstat' dereferences a symlink specified with a trailing + slash. */ +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#define LT_OBJDIR ".libs/" + +/* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */ +#define MALLOC_0_IS_NONNULL 1 + +/* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */ +/* #undef MAP_ANONYMOUS */ + +/* Define if the mbrtowc function does not return (size_t) -2 for empty input. + */ +/* #undef MBRTOWC_EMPTY_INPUT_BUG */ + +/* Define if the mbrtowc function has the NULL pwc argument bug. */ +/* #undef MBRTOWC_NULL_ARG1_BUG */ + +/* Define if the mbrtowc function has the NULL string argument bug. */ +/* #undef MBRTOWC_NULL_ARG2_BUG */ + +/* Define if the mbrtowc function does not return 0 for a NUL character. */ +/* #undef MBRTOWC_NUL_RETVAL_BUG */ + +/* Define if the mbrtowc function returns a wrong return value. */ +/* #undef MBRTOWC_RETVAL_BUG */ + +/* Use GNU style printf and scanf. */ +#ifndef __USE_MINGW_ANSI_STDIO +# define __USE_MINGW_ANSI_STDIO 1 +#endif + + +/* Define if the compilation of mktime.c should define 'mktime_internal'. */ +#define NEED_MKTIME_INTERNAL 1 + +/* Define if the compilation of mktime.c should define 'mktime' with the + native Windows TZ workaround. */ +/* #undef NEED_MKTIME_WINDOWS */ + +/* Define if the compilation of mktime.c should define 'mktime' with the + algorithmic workarounds. */ +/* #undef NEED_MKTIME_WORKING */ + +/* Define if the vasnprintf implementation needs special code for the 'a' and + 'A' directives. */ +/* #undef NEED_PRINTF_DIRECTIVE_A */ + +/* Define if the vasnprintf implementation needs special code for the 'F' + directive. */ +/* #undef NEED_PRINTF_DIRECTIVE_F */ + +/* Define if the vasnprintf implementation needs special code for the 'ls' + directive. */ +/* #undef NEED_PRINTF_DIRECTIVE_LS */ + +/* Define if the vasnprintf implementation needs special code for 'double' + arguments. */ +/* #undef NEED_PRINTF_DOUBLE */ + +/* Define if the vasnprintf implementation needs special code for surviving + out-of-memory conditions. */ +/* #undef NEED_PRINTF_ENOMEM */ + +/* Define if the vasnprintf implementation needs special code for the ' flag. + */ +/* #undef NEED_PRINTF_FLAG_GROUPING */ + +/* Define if the vasnprintf implementation needs special code for the '-' + flag. */ +/* #undef NEED_PRINTF_FLAG_LEFTADJUST */ + +/* Define if the vasnprintf implementation needs special code for the 0 flag. + */ +/* #undef NEED_PRINTF_FLAG_ZERO */ + +/* Define if the vasnprintf implementation needs special code for infinite + 'double' arguments. */ +/* #undef NEED_PRINTF_INFINITE_DOUBLE */ + +/* Define if the vasnprintf implementation needs special code for infinite + 'long double' arguments. */ +/* #undef NEED_PRINTF_INFINITE_LONG_DOUBLE */ + +/* Define if the vasnprintf implementation needs special code for 'long + double' arguments. */ +/* #undef NEED_PRINTF_LONG_DOUBLE */ + +/* Define if the vasnprintf implementation needs special code for supporting + large precisions without arbitrary bounds. */ +/* #undef NEED_PRINTF_UNBOUNDED_PRECISION */ + +/* Define to 1 if open() fails to recognize a trailing slash. */ +/* #undef OPEN_TRAILING_SLASH_BUG */ + +/* Name of package */ +#define PACKAGE "recutils" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "bug-recutils@gnu.org" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "GNU recutils" + +/* String identifying the packager of this software */ +/* #undef PACKAGE_PACKAGER */ + +/* Packager info for bug reports (URL/e-mail/...) */ +/* #undef PACKAGE_PACKAGER_BUG_REPORTS */ + +/* Packager-specific version information */ +/* #undef PACKAGE_PACKAGER_VERSION */ + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "GNU recutils 1.8" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "recutils" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "http://www.gnu.org/software/recutils/" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.8" + +/* Define if <inttypes.h> exists and defines unusable PRI* macros. */ +/* #undef PRI_MACROS_BROKEN */ + +/* Define to the type that is the result of default argument promotions of + type mode_t. */ +#define PROMOTED_MODE_T mode_t + +/* Define if the pthread_in_use() detection is hard. */ +/* #undef PTHREAD_IN_USE_DETECTION_HARD */ + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'ptrdiff_t'. */ +/* #undef PTRDIFF_T_SUFFIX */ + +/* Define to 1 if readlink fails to recognize a trailing slash. */ +/* #undef READLINK_TRAILING_SLASH_BUG */ + +/* Compile encryption support */ +/* #undef REC_CRYPT_SUPPORT */ + +/* Define if rename does not work when the destination file exists, as on + Cygwin 1.5 or Windows. */ +/* #undef RENAME_DEST_EXISTS_BUG */ + +/* Define if rename fails to leave hard links alone, as on NetBSD 1.6 or + Cygwin 1.5. */ +/* #undef RENAME_HARD_LINK_BUG */ + +/* Define if rename does not correctly handle slashes on the destination + argument, such as on Solaris 11 or NetBSD 1.6. */ +/* #undef RENAME_TRAILING_SLASH_DEST_BUG */ + +/* Define if rename does not correctly handle slashes on the source argument, + such as on Solaris 9 or cygwin 1.5. */ +/* #undef RENAME_TRAILING_SLASH_SOURCE_BUG */ + +/* Define if fprintf is overridden by a POSIX compliant gnulib implementation. + */ +#define REPLACE_FPRINTF_POSIX 1 + +/* Define to 1 if stat needs help when passed a file name with a trailing + slash */ +/* #undef REPLACE_FUNC_STAT_FILE */ + +/* Define if nl_langinfo exists but is overridden by gnulib. */ +#define REPLACE_NL_LANGINFO 1 + +/* Define if gnulib uses its own posix_spawn and posix_spawnp functions. */ +/* #undef REPLACE_POSIX_SPAWN */ + +/* Define if printf is overridden by a POSIX compliant gnulib implementation. + */ +#define REPLACE_PRINTF_POSIX 1 + +/* Define to 1 if strerror(0) does not return a message implying success. */ +/* #undef REPLACE_STRERROR_0 */ + +/* Define if vasnprintf exists but is overridden by gnulib. */ +/* #undef REPLACE_VASNPRINTF */ + +/* Define if vfprintf is overridden by a POSIX compliant gnulib + implementation. */ +#define REPLACE_VFPRINTF_POSIX 1 + +/* File name of the Bourne shell. */ +#if defined __CYGWIN__ +/* Omit the directory part because for 32-bit Cygwin programs in a + 64-bit Cygwin environment, the Cygwin mounts are not visible. */ +# define BOURNE_SHELL "sh" +#else +# define BOURNE_SHELL "/bin/sh" +#endif + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'sig_atomic_t'. */ +/* #undef SIG_ATOMIC_T_SUFFIX */ + +/* Define as the maximum value of type 'size_t', if the system doesn't define + it. */ +#ifndef SIZE_MAX +/* # undef SIZE_MAX */ +#endif + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'size_t'. */ +/* #undef SIZE_T_SUFFIX */ + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +/* #undef STACK_DIRECTION */ + +/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */ +/* #undef STAT_MACROS_BROKEN */ + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define to 1 if strerror_r returns char *. */ +#define STRERROR_R_CHAR_P 1 + +/* Define to 1 if time_t is signed. */ +#define TIME_T_IS_SIGNED 1 + +/* Define to 1 if your <sys/time.h> declares `struct tm'. */ +/* #undef TM_IN_SYS_TIME */ + +/* Define to 1 if the type of the st_atim member of a struct stat is struct + timespec. */ +#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1 + +/* Define if tzset clobbers localtime's static buffer. */ +/* #undef TZSET_CLOBBERS_LOCALTIME */ + +/* Define to the prefix of C symbols at the assembler and linker level, either + an underscore or empty. */ +#define USER_LABEL_PREFIX + +/* Define to nonzero if you want access control list support. */ +#define USE_ACL 0 + +/* Define if the POSIX multithreading library can be used. */ +#define USE_POSIX_THREADS 1 + +/* Define if references to the POSIX multithreading library should be made + weak. */ +#define USE_POSIX_THREADS_WEAK 1 + +/* Define if the GNU Pth multithreading library can be used. */ +/* #undef USE_PTH_THREADS */ + +/* Define if references to the GNU Pth multithreading library should be made + weak. */ +/* #undef USE_PTH_THREADS_WEAK */ + +/* Define if the old Solaris multithreading library can be used. */ +/* #undef USE_SOLARIS_THREADS */ + +/* Define if references to the old Solaris multithreading library should be + made weak. */ +/* #undef USE_SOLARIS_THREADS_WEAK */ + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif +/* Enable general extensions on macOS. */ +#ifndef _DARWIN_C_SOURCE +# define _DARWIN_C_SOURCE 1 +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif +/* Enable NetBSD extensions on NetBSD. */ +#ifndef _NETBSD_SOURCE +# define _NETBSD_SOURCE 1 +#endif +/* Enable OpenBSD extensions on NetBSD. */ +#ifndef _OPENBSD_SOURCE +# define _OPENBSD_SOURCE 1 +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ +#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ +# define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ +#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ +# define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ +#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ +# define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ +#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ +# define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ +#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ +# define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ +#ifndef __STDC_WANT_LIB_EXT2__ +# define __STDC_WANT_LIB_EXT2__ 1 +#endif +/* Enable extensions specified by ISO/IEC 24747:2009. */ +#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ +# define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +/* Enable X/Open extensions if necessary. HP-UX 11.11 defines + mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of + whether compiling with -Ae or -D_HPUX_SOURCE=1. */ +#ifndef _XOPEN_SOURCE +/* # undef _XOPEN_SOURCE */ +#endif +/* Enable X/Open compliant socket functions that do not require linking + with -lxnet on HP-UX 11.11. */ +#ifndef _HPUX_ALT_XOPEN_SOCKET_API +# define _HPUX_ALT_XOPEN_SOCKET_API 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif + + +/* Define to 1 if you want getc etc. to use unlocked I/O if available. + Unlocked I/O can improve performance in unithreaded apps, but it is not + safe for multithreaded apps. */ +#define USE_UNLOCKED_IO 1 + +/* Define if the native Windows multithreading API can be used. */ +/* #undef USE_WINDOWS_THREADS */ + +/* Version number of package */ +#define VERSION "1.8" + +/* Define to 1 if unsetenv returns void instead of int. */ +/* #undef VOID_UNSETENV */ + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'wchar_t'. */ +/* #undef WCHAR_T_SUFFIX */ + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'wint_t'. */ +/* #undef WINT_T_SUFFIX */ + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +/* # undef WORDS_BIGENDIAN */ +# endif +#endif + +/* Enable large inode numbers on Mac OS X 10.5. */ +#define _DARWIN_USE_64_BIT_INODE 1 + +/* Number of bits in a file offset, on hosts where this is settable. */ +#define _FILE_OFFSET_BITS 64 + +/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ +/* #undef _LARGEFILE_SOURCE */ + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ + +/* Define to 1 on Solaris. */ +/* #undef _LCONV_C99 */ + +/* Define to 1 if on MINIX. */ +/* #undef _MINIX */ + +/* Define to 1 to make NetBSD features available. MINIX 3 needs this. */ +#define _NETBSD_SOURCE 1 + +/* The _Noreturn keyword of C11. */ +#ifndef _Noreturn +# if 201103 <= (defined __cplusplus ? __cplusplus : 0) +# define _Noreturn [[noreturn]] +# elif (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ + || 4 < __GNUC__ + (7 <= __GNUC_MINOR__)) + /* _Noreturn works as-is. */ +# elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C +# define _Noreturn __attribute__ ((__noreturn__)) +# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn +# endif +#endif + + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +/* #undef _POSIX_1_SOURCE */ + +/* Define to 1 if you need to in order for 'stat' and other things to work. */ +/* #undef _POSIX_SOURCE */ + +/* Define if you want <regex.h> to include <limits.h>, so that it consistently + overrides <limits.h>'s RE_DUP_MAX. */ +#define _REGEX_INCLUDE_LIMITS_H 1 + +/* Define if you want regoff_t to be at least as wide POSIX requires. */ +#define _REGEX_LARGE_OFFSETS 1 + +/* For standard stat data types on VMS. */ +#define _USE_STD_STAT 1 + +/* Define to rpl_ if the getopt replacement functions and variables should be + used. */ +/* #undef __GETOPT_PREFIX */ + +/* Define to 1 if the system <stdint.h> predates C++11. */ +/* #undef __STDC_CONSTANT_MACROS */ + +/* Define to 1 if the system <stdint.h> predates C++11. */ +/* #undef __STDC_LIMIT_MACROS */ + +/* Please see the Gnulib manual for how to use these macros. + + Suppress extern inline with HP-UX cc, as it appears to be broken; see + <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>. + + Suppress extern inline with Sun C in standards-conformance mode, as it + mishandles inline functions that call each other. E.g., for 'inline void f + (void) { } inline void g (void) { f (); }', c99 incorrectly complains + 'reference to static identifier "f" in extern inline function'. + This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. + + Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) + on configurations that mistakenly use 'static inline' to implement + functions or macros in standard C headers like <ctype.h>. For example, + if isdigit is mistakenly implemented via a static inline function, + a program containing an extern inline function that calls isdigit + may not work since the C standard prohibits extern inline functions + from calling static functions (ISO C 99 section 6.7.4.(3). + This bug is known to occur on: + + OS X 10.8 and earlier; see: + https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html + + DragonFly; see + http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log + + FreeBSD; see: + https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html + + OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and + for clang but remains for g++; see <https://trac.macports.org/ticket/41033>. + Assume DragonFly and FreeBSD will be similar. + + GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. It defines a macro + __GNUC_STDC_INLINE__ to indicate this situation or a macro + __GNUC_GNU_INLINE__ to indicate the opposite situation. + GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline + semantics but warns, unless -fgnu89-inline is used: + warning: C99 inline functions are not supported; using GNU89 + warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute + It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. + */ +#if (((defined __APPLE__ && defined __MACH__) \ + || defined __DragonFly__ || defined __FreeBSD__) \ + && (defined __header_inline \ + ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ + && ! defined __clang__) \ + : ((! defined _DONT_USE_CTYPE_INLINE_ \ + && (defined __GNUC__ || defined __cplusplus)) \ + || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ + && defined __GNUC__ && ! defined __cplusplus)))) +# define _GL_EXTERN_INLINE_STDHEADER_BUG +#endif +#if ((__GNUC__ \ + ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ + : (199901L <= __STDC_VERSION__ \ + && !defined __HP_cc \ + && !defined __PGI \ + && !(defined __SUNPRO_C && __STDC__))) \ + && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) +# define _GL_INLINE inline +# define _GL_EXTERN_INLINE extern inline +# define _GL_EXTERN_INLINE_IN_USE +#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ + && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) +# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ + /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ +# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) +# else +# define _GL_INLINE extern inline +# endif +# define _GL_EXTERN_INLINE extern +# define _GL_EXTERN_INLINE_IN_USE +#else +# define _GL_INLINE static _GL_UNUSED +# define _GL_EXTERN_INLINE static _GL_UNUSED +#endif + +/* In GCC 4.6 (inclusive) to 5.1 (exclusive), + suppress bogus "no previous prototype for 'FOO'" + and "no previous declaration for 'FOO'" diagnostics, + when FOO is an inline function in the header; see + <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and + <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>. */ +#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ +# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ +# define _GL_INLINE_HEADER_CONST_PRAGMA +# else +# define _GL_INLINE_HEADER_CONST_PRAGMA \ + _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") +# endif +# define _GL_INLINE_HEADER_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ + _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ + _GL_INLINE_HEADER_CONST_PRAGMA +# define _GL_INLINE_HEADER_END \ + _Pragma ("GCC diagnostic pop") +#else +# define _GL_INLINE_HEADER_BEGIN +# define _GL_INLINE_HEADER_END +#endif + +/* Always use our fgetfilecon wrapper. */ +/* #undef fgetfilecon */ + +/* Always use our getfilecon wrapper. */ +/* #undef getfilecon */ + +/* Define to `int' if <sys/types.h> doesn't define. */ +/* #undef gid_t */ + +/* A replacement for va_copy, if needed. */ +#define gl_va_copy(a,b) ((a) = (b)) + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +/* #undef inline */ +#endif + +/* Define to long or long long if <stdint.h> and <inttypes.h> don't define. */ +/* #undef intmax_t */ + +/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports + the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of + earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. + __APPLE__ && __MACH__ test for Mac OS X. + __APPLE_CC__ tests for the Apple compiler and its version. + __STDC_VERSION__ tests for the C99 mode. */ +#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ +# define __GNUC_STDC_INLINE__ 1 +#endif + +/* Always use our lgetfilecon wrapper. */ +/* #undef lgetfilecon */ + +/* Define to a type if <wchar.h> does not define. */ +/* #undef mbstate_t */ + +/* Define to the real name of the mktime_internal function. */ +/* #undef mktime_internal */ + +/* Define to `int' if <sys/types.h> does not define. */ +/* #undef mode_t */ + +/* Define to the name of the strftime replacement function. */ +#define my_strftime nstrftime + +/* Define to the type of st_nlink in struct stat, or a supertype. */ +/* #undef nlink_t */ + +/* Define to `long' if <sys/types.h> does not define. */ +/* #undef off_t */ + +/* Define to `int' if <sys/types.h> does not define. */ +/* #undef pid_t */ + +/* Define as the type of the result of subtracting two pointers, if the system + doesn't define it. */ +/* #undef ptrdiff_t */ + +/* Define to rpl_re_comp if the replacement should be used. */ +#define re_comp rpl_re_comp + +/* Define to rpl_re_compile_fastmap if the replacement should be used. */ +#define re_compile_fastmap rpl_re_compile_fastmap + +/* Define to rpl_re_compile_pattern if the replacement should be used. */ +#define re_compile_pattern rpl_re_compile_pattern + +/* Define to rpl_re_exec if the replacement should be used. */ +#define re_exec rpl_re_exec + +/* Define to rpl_re_match if the replacement should be used. */ +#define re_match rpl_re_match + +/* Define to rpl_re_match_2 if the replacement should be used. */ +#define re_match_2 rpl_re_match_2 + +/* Define to rpl_re_search if the replacement should be used. */ +#define re_search rpl_re_search + +/* Define to rpl_re_search_2 if the replacement should be used. */ +#define re_search_2 rpl_re_search_2 + +/* Define to rpl_re_set_registers if the replacement should be used. */ +#define re_set_registers rpl_re_set_registers + +/* Define to rpl_re_set_syntax if the replacement should be used. */ +#define re_set_syntax rpl_re_set_syntax + +/* Define to rpl_re_syntax_options if the replacement should be used. */ +#define re_syntax_options rpl_re_syntax_options + +/* Define to rpl_regcomp if the replacement should be used. */ +#define regcomp rpl_regcomp + +/* Define to rpl_regerror if the replacement should be used. */ +#define regerror rpl_regerror + +/* Define to rpl_regexec if the replacement should be used. */ +#define regexec rpl_regexec + +/* Define to rpl_regfree if the replacement should be used. */ +#define regfree rpl_regfree + +/* Define to the equivalent of the C99 'restrict' keyword, or to + nothing if this is not supported. Do not define if restrict is + supported directly. */ +#define restrict __restrict +/* Work around a bug in Sun C++: it does not support _Restrict or + __restrict__, even though the corresponding Sun C compiler ends up with + "#define restrict _Restrict" or "#define restrict __restrict__" in the + previous line. Perhaps some future version of Sun C++ will work with + restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ +#if defined __SUNPRO_CC && !defined __RESTRICT +# define _Restrict +# define __restrict__ +#endif + +/* Define as an integer type suitable for memory locations that can be + accessed atomically even in the presence of asynchronous signals. */ +/* #undef sig_atomic_t */ + +/* Define to `unsigned' if <sys/types.h> does not define. */ +/* #undef size_t */ + +/* Define as a signed type of the same size as size_t. */ +/* #undef ssize_t */ + +/* Define to `int' if <sys/types.h> doesn't define. */ +/* #undef uid_t */ + +/* Define as a marker that can be attached to declarations that might not + be used. This helps to reduce warnings, such as from + GCC -Wunused-parameter. */ +#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_UNUSED __attribute__ ((__unused__)) +#else +# define _GL_UNUSED +#endif +/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name + is a misnomer outside of parameter lists. */ +#define _UNUSED_PARAMETER_ _GL_UNUSED + +/* gcc supports the "unused" attribute on possibly unused labels, and + g++ has since version 4.5. Note to support C++ as well as C, + _GL_UNUSED_LABEL should be used with a trailing ; */ +#if !defined __cplusplus || __GNUC__ > 4 \ + || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +# define _GL_UNUSED_LABEL _GL_UNUSED +#else +# define _GL_UNUSED_LABEL +#endif + +/* The __pure__ attribute was added in gcc 2.96. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE /* empty */ +#endif + +/* The __const__ attribute was added in gcc 2.95. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) +#else +# define _GL_ATTRIBUTE_CONST /* empty */ +#endif + +/* The __malloc__ attribute was added in gcc 3. */ +#if 3 <= __GNUC__ +# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +#else +# define _GL_ATTRIBUTE_MALLOC /* empty */ +#endif + + +/* Define as a macro for copying va_list variables. */ +/* #undef va_copy */ diff --git a/devspec.en_US/project/recutils/src/config.h.in b/devspec.en_US/project/recutils/src/config.h.in new file mode 100755 index 0000000..3b5be58 --- /dev/null +++ b/devspec.en_US/project/recutils/src/config.h.in @@ -0,0 +1,2045 @@ +/* src/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + +/* Define to the number of bits in type 'ptrdiff_t'. */ +#undef BITSIZEOF_PTRDIFF_T + +/* Define to the number of bits in type 'sig_atomic_t'. */ +#undef BITSIZEOF_SIG_ATOMIC_T + +/* Define to the number of bits in type 'size_t'. */ +#undef BITSIZEOF_SIZE_T + +/* Define to the number of bits in type 'wchar_t'. */ +#undef BITSIZEOF_WCHAR_T + +/* Define to the number of bits in type 'wint_t'. */ +#undef BITSIZEOF_WINT_T + +/* Define if you wish *printf() functions that have a safe handling of + non-IEEE-754 'long double' values. */ +#undef CHECK_PRINTF_SAFE + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ +#undef C_ALLOCA + +/* Define to 1 if the C locale may have encoding errors. */ +#undef C_LOCALE_MAYBE_EILSEQ + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'double'. */ +#undef DBL_EXPBIT0_BIT + +/* Define as the word index where to find the exponent of 'double'. */ +#undef DBL_EXPBIT0_WORD + +/* Define as the bit index in the word where to find the sign of 'double'. */ +#undef DBL_SIGNBIT_BIT + +/* Define as the word index where to find the sign of 'double'. */ +#undef DBL_SIGNBIT_WORD + +/* Define to 1 if // is a file system root distinct from /. */ +#undef DOUBLE_SLASH_IS_DISTINCT_ROOT + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +#undef ENABLE_NLS + +/* Define this to 1 if F_DUPFD behavior does not match POSIX */ +#undef FCNTL_DUPFD_BUGGY + +/* Define to nothing if C supports flexible array members, and to 1 if it does + not. That way, with a declaration like 'struct s { int n; double + d[FLEXIBLE_ARRAY_MEMBER]; };', the struct hack can be used with pre-C99 + compilers. When computing the size of such an object, don't use 'sizeof + (struct s)' as it overestimates the size. Use 'offsetof (struct s, d)' + instead. Don't use 'offsetof (struct s, d[0])', as this doesn't work with + MSVC and with C++ compilers. */ +#undef FLEXIBLE_ARRAY_MEMBER + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'float'. */ +#undef FLT_EXPBIT0_BIT + +/* Define as the word index where to find the exponent of 'float'. */ +#undef FLT_EXPBIT0_WORD + +/* Define as the bit index in the word where to find the sign of 'float'. */ +#undef FLT_SIGNBIT_BIT + +/* Define as the word index where to find the sign of 'float'. */ +#undef FLT_SIGNBIT_WORD + +/* Define to 1 if the system's ftello function has the Solaris bug. */ +#undef FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE + +/* Define to 1 if mkdir mistakenly creates a directory given with a trailing + dot component. */ +#undef FUNC_MKDIR_DOT_BUG + +/* Define to 1 if nl_langinfo (YESEXPR) returns a non-empty string. */ +#undef FUNC_NL_LANGINFO_YESEXPR_WORKS + +/* Define to 1 if realpath() can malloc memory, always gives an absolute path, + and handles trailing slash correctly. */ +#undef FUNC_REALPATH_WORKS + +/* Define to the type of elements in the array set by `getgroups'. Usually + this is either `int' or `gid_t'. */ +#undef GETGROUPS_T + +/* Define this to 1 if getgroups(0,NULL) does not return the number of groups. + */ +#undef GETGROUPS_ZERO_BUG + +/* Define if gettimeofday clobbers the localtime buffer. */ +#undef GETTIMEOFDAY_CLOBBERS_LOCALTIME + +/* Define this to 'void' or 'struct timezone' to match the system's + declaration of the second argument to gettimeofday. */ +#undef GETTIMEOFDAY_TIMEZONE + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module canonicalize-lgpl shall be considered present. */ +#undef GNULIB_CANONICALIZE_LGPL + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module close-stream shall be considered present. */ +#undef GNULIB_CLOSE_STREAM + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module fscanf shall be considered present. */ +#undef GNULIB_FSCANF + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module lock shall be considered present. */ +#undef GNULIB_LOCK + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module mkostemp shall be considered present. */ +#undef GNULIB_MKOSTEMP + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module msvc-nothrow shall be considered present. */ +#undef GNULIB_MSVC_NOTHROW + +/* Define to 1 if printf and friends should be labeled with attribute + "__gnu_printf__" instead of "__printf__" */ +#undef GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module scanf shall be considered present. */ +#undef GNULIB_SCANF + +/* Define to a C preprocessor expression that evaluates to 1 or 0, depending + whether the gnulib module strerror shall be considered present. */ +#undef GNULIB_STRERROR + +/* Define to 1 when the gnulib module btowc should be tested. */ +#undef GNULIB_TEST_BTOWC + +/* Define to 1 when the gnulib module canonicalize_file_name should be tested. + */ +#undef GNULIB_TEST_CANONICALIZE_FILE_NAME + +/* Define to 1 when the gnulib module chdir should be tested. */ +#undef GNULIB_TEST_CHDIR + +/* Define to 1 when the gnulib module cloexec should be tested. */ +#undef GNULIB_TEST_CLOEXEC + +/* Define to 1 when the gnulib module close should be tested. */ +#undef GNULIB_TEST_CLOSE + +/* Define to 1 when the gnulib module dup2 should be tested. */ +#undef GNULIB_TEST_DUP2 + +/* Define to 1 when the gnulib module environ should be tested. */ +#undef GNULIB_TEST_ENVIRON + +/* Define to 1 when the gnulib module euidaccess should be tested. */ +#undef GNULIB_TEST_EUIDACCESS + +/* Define to 1 when the gnulib module fcntl should be tested. */ +#undef GNULIB_TEST_FCNTL + +/* Define to 1 when the gnulib module floor should be tested. */ +#undef GNULIB_TEST_FLOOR + +/* Define to 1 when the gnulib module fprintf-posix should be tested. */ +#undef GNULIB_TEST_FPRINTF_POSIX + +/* Define to 1 when the gnulib module frexp should be tested. */ +#undef GNULIB_TEST_FREXP + +/* Define to 1 when the gnulib module frexpl should be tested. */ +#undef GNULIB_TEST_FREXPL + +/* Define to 1 when the gnulib module fseek should be tested. */ +#undef GNULIB_TEST_FSEEK + +/* Define to 1 when the gnulib module fseeko should be tested. */ +#undef GNULIB_TEST_FSEEKO + +/* Define to 1 when the gnulib module fstat should be tested. */ +#undef GNULIB_TEST_FSTAT + +/* Define to 1 when the gnulib module ftell should be tested. */ +#undef GNULIB_TEST_FTELL + +/* Define to 1 when the gnulib module ftello should be tested. */ +#undef GNULIB_TEST_FTELLO + +/* Define to 1 when the gnulib module getdelim should be tested. */ +#undef GNULIB_TEST_GETDELIM + +/* Define to 1 when the gnulib module getdtablesize should be tested. */ +#undef GNULIB_TEST_GETDTABLESIZE + +/* Define to 1 when the gnulib module getgroups should be tested. */ +#undef GNULIB_TEST_GETGROUPS + +/* Define to 1 when the gnulib module getline should be tested. */ +#undef GNULIB_TEST_GETLINE + +/* Define to 1 when the gnulib module getpass should be tested. */ +#undef GNULIB_TEST_GETPASS + +/* Define to 1 when the gnulib module gettimeofday should be tested. */ +#undef GNULIB_TEST_GETTIMEOFDAY + +/* Define to 1 when the gnulib module group-member should be tested. */ +#undef GNULIB_TEST_GROUP_MEMBER + +/* Define to 1 when the gnulib module localeconv should be tested. */ +#undef GNULIB_TEST_LOCALECONV + +/* Define to 1 when the gnulib module lseek should be tested. */ +#undef GNULIB_TEST_LSEEK + +/* Define to 1 when the gnulib module lstat should be tested. */ +#undef GNULIB_TEST_LSTAT + +/* Define to 1 when the gnulib module malloc-posix should be tested. */ +#undef GNULIB_TEST_MALLOC_POSIX + +/* Define to 1 when the gnulib module mbrlen should be tested. */ +#undef GNULIB_TEST_MBRLEN + +/* Define to 1 when the gnulib module mbrtowc should be tested. */ +#undef GNULIB_TEST_MBRTOWC + +/* Define to 1 when the gnulib module mbsinit should be tested. */ +#undef GNULIB_TEST_MBSINIT + +/* Define to 1 when the gnulib module mbtowc should be tested. */ +#undef GNULIB_TEST_MBTOWC + +/* Define to 1 when the gnulib module memchr should be tested. */ +#undef GNULIB_TEST_MEMCHR + +/* Define to 1 when the gnulib module mkostemp should be tested. */ +#undef GNULIB_TEST_MKOSTEMP + +/* Define to 1 when the gnulib module mkstemp should be tested. */ +#undef GNULIB_TEST_MKSTEMP + +/* Define to 1 when the gnulib module mktime should be tested. */ +#undef GNULIB_TEST_MKTIME + +/* Define to 1 when the gnulib module nl_langinfo should be tested. */ +#undef GNULIB_TEST_NL_LANGINFO + +/* Define to 1 when the gnulib module open should be tested. */ +#undef GNULIB_TEST_OPEN + +/* Define to 1 when the gnulib module posix_spawnattr_destroy should be + tested. */ +#undef GNULIB_TEST_POSIX_SPAWNATTR_DESTROY + +/* Define to 1 when the gnulib module posix_spawnattr_init should be tested. + */ +#undef GNULIB_TEST_POSIX_SPAWNATTR_INIT + +/* Define to 1 when the gnulib module posix_spawnattr_setflags should be + tested. */ +#undef GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS + +/* Define to 1 when the gnulib module posix_spawnattr_setsigmask should be + tested. */ +#undef GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK + +/* Define to 1 when the gnulib module posix_spawnp should be tested. */ +#undef GNULIB_TEST_POSIX_SPAWNP + +/* Define to 1 when the gnulib module posix_spawn_file_actions_addopen should + be tested. */ +#undef GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN + +/* Define to 1 when the gnulib module posix_spawn_file_actions_destroy should + be tested. */ +#undef GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY + +/* Define to 1 when the gnulib module posix_spawn_file_actions_init should be + tested. */ +#undef GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT + +/* Define to 1 when the gnulib module printf-posix should be tested. */ +#undef GNULIB_TEST_PRINTF_POSIX + +/* Define to 1 when the gnulib module raise should be tested. */ +#undef GNULIB_TEST_RAISE + +/* Define to 1 when the gnulib module random_r should be tested. */ +#undef GNULIB_TEST_RANDOM_R + +/* Define to 1 when the gnulib module rawmemchr should be tested. */ +#undef GNULIB_TEST_RAWMEMCHR + +/* Define to 1 when the gnulib module readlink should be tested. */ +#undef GNULIB_TEST_READLINK + +/* Define to 1 when the gnulib module realloc-posix should be tested. */ +#undef GNULIB_TEST_REALLOC_POSIX + +/* Define to 1 when the gnulib module realpath should be tested. */ +#undef GNULIB_TEST_REALPATH + +/* Define to 1 when the gnulib module rename should be tested. */ +#undef GNULIB_TEST_RENAME + +/* Define to 1 when the gnulib module rmdir should be tested. */ +#undef GNULIB_TEST_RMDIR + +/* Define to 1 when the gnulib module secure_getenv should be tested. */ +#undef GNULIB_TEST_SECURE_GETENV + +/* Define to 1 when the gnulib module setenv should be tested. */ +#undef GNULIB_TEST_SETENV + +/* Define to 1 when the gnulib module sigaction should be tested. */ +#undef GNULIB_TEST_SIGACTION + +/* Define to 1 when the gnulib module signbit should be tested. */ +#undef GNULIB_TEST_SIGNBIT + +/* Define to 1 when the gnulib module sigprocmask should be tested. */ +#undef GNULIB_TEST_SIGPROCMASK + +/* Define to 1 when the gnulib module stat should be tested. */ +#undef GNULIB_TEST_STAT + +/* Define to 1 when the gnulib module strcasestr should be tested. */ +#undef GNULIB_TEST_STRCASESTR + +/* Define to 1 when the gnulib module strchrnul should be tested. */ +#undef GNULIB_TEST_STRCHRNUL + +/* Define to 1 when the gnulib module strdup should be tested. */ +#undef GNULIB_TEST_STRDUP + +/* Define to 1 when the gnulib module strerror should be tested. */ +#undef GNULIB_TEST_STRERROR + +/* Define to 1 when the gnulib module strsep should be tested. */ +#undef GNULIB_TEST_STRSEP + +/* Define to 1 when the gnulib module strverscmp should be tested. */ +#undef GNULIB_TEST_STRVERSCMP + +/* Define to 1 when the gnulib module timegm should be tested. */ +#undef GNULIB_TEST_TIMEGM + +/* Define to 1 when the gnulib module time_r should be tested. */ +#undef GNULIB_TEST_TIME_R + +/* Define to 1 when the gnulib module time_rz should be tested. */ +#undef GNULIB_TEST_TIME_RZ + +/* Define to 1 when the gnulib module tzset should be tested. */ +#undef GNULIB_TEST_TZSET + +/* Define to 1 when the gnulib module unsetenv should be tested. */ +#undef GNULIB_TEST_UNSETENV + +/* Define to 1 when the gnulib module vasprintf should be tested. */ +#undef GNULIB_TEST_VASPRINTF + +/* Define to 1 when the gnulib module vfprintf-posix should be tested. */ +#undef GNULIB_TEST_VFPRINTF_POSIX + +/* Define to 1 when the gnulib module waitpid should be tested. */ +#undef GNULIB_TEST_WAITPID + +/* Define to 1 when the gnulib module wcrtomb should be tested. */ +#undef GNULIB_TEST_WCRTOMB + +/* Define to 1 when the gnulib module wctob should be tested. */ +#undef GNULIB_TEST_WCTOB + +/* Define to 1 when the gnulib module wctomb should be tested. */ +#undef GNULIB_TEST_WCTOMB + +/* Define to 1 if you have the `aclsort' function. */ +#undef HAVE_ACLSORT + +/* Define to 1 if you have the <aclv.h> header file. */ +#undef HAVE_ACLV_H + +/* Define to 1 if you have the `aclx_get' function. */ +#undef HAVE_ACLX_GET + +/* Define to 1 if you have the `acl_copy_ext_native' function. */ +#undef HAVE_ACL_COPY_EXT_NATIVE + +/* Define to 1 if you have the `acl_create_entry_np' function. */ +#undef HAVE_ACL_CREATE_ENTRY_NP + +/* Define to 1 if you have the `acl_delete_def_file' function. */ +#undef HAVE_ACL_DELETE_DEF_FILE + +/* Define to 1 if you have the `acl_delete_fd_np' function. */ +#undef HAVE_ACL_DELETE_FD_NP + +/* Define to 1 if you have the `acl_delete_file_np' function. */ +#undef HAVE_ACL_DELETE_FILE_NP + +/* Define to 1 if you have the `acl_entries' function. */ +#undef HAVE_ACL_ENTRIES + +/* Define to 1 if you have the `acl_extended_file' function. */ +#undef HAVE_ACL_EXTENDED_FILE + +/* Define to 1 if the constant ACL_FIRST_ENTRY exists. */ +#undef HAVE_ACL_FIRST_ENTRY + +/* Define to 1 if you have the `acl_free' function. */ +#undef HAVE_ACL_FREE + +/* Define to 1 if you have the `acl_free_text' function. */ +#undef HAVE_ACL_FREE_TEXT + +/* Define to 1 if you have the `acl_from_mode' function. */ +#undef HAVE_ACL_FROM_MODE + +/* Define to 1 if you have the `acl_from_text' function. */ +#undef HAVE_ACL_FROM_TEXT + +/* Define to 1 if you have the `acl_get_fd' function. */ +#undef HAVE_ACL_GET_FD + +/* Define to 1 if you have the `acl_get_file' function. */ +#undef HAVE_ACL_GET_FILE + +/* Define to 1 if you have the <acl/libacl.h> header file. */ +#undef HAVE_ACL_LIBACL_H + +/* Define to 1 if you have the `acl_set_fd' function. */ +#undef HAVE_ACL_SET_FD + +/* Define to 1 if you have the `acl_set_file' function. */ +#undef HAVE_ACL_SET_FILE + +/* Define to 1 if you have the `acl_to_short_text' function. */ +#undef HAVE_ACL_TO_SHORT_TEXT + +/* Define to 1 if you have the `acl_trivial' function. */ +#undef HAVE_ACL_TRIVIAL + +/* Define to 1 if the ACL type ACL_TYPE_EXTENDED exists. */ +#undef HAVE_ACL_TYPE_EXTENDED + +/* Define to 1 if you have 'alloca' after including <alloca.h>, a header that + may be supplied by this distribution. */ +#undef HAVE_ALLOCA + +/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix). + */ +#undef HAVE_ALLOCA_H + +/* Define to 1 if you have the <bp-sym.h> header file. */ +#undef HAVE_BP_SYM_H + +/* Define to 1 if you have the `btowc' function. */ +#undef HAVE_BTOWC + +/* Define to 1 if you have the `canonicalize_file_name' function. */ +#undef HAVE_CANONICALIZE_FILE_NAME + +/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +#undef HAVE_CFLOCALECOPYCURRENT + +/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +#undef HAVE_CFPREFERENCESCOPYAPPVALUE + +/* Define to 1 if you have the `clock_gettime' function. */ +#undef HAVE_CLOCK_GETTIME + +/* Define to 1 if you have the `clock_settime' function. */ +#undef HAVE_CLOCK_SETTIME + +/* Define if you have compound literals. */ +#undef HAVE_COMPOUND_LITERALS + +/* Define to 1 if you have the `confstr' function. */ +#undef HAVE_CONFSTR + +/* Define if the copysignf function is declared in <math.h> and available in + libc. */ +#undef HAVE_COPYSIGNF_IN_LIBC + +/* Define if the copysignl function is declared in <math.h> and available in + libc. */ +#undef HAVE_COPYSIGNL_IN_LIBC + +/* Define if the copysign function is declared in <math.h> and available in + libc. */ +#undef HAVE_COPYSIGN_IN_LIBC + +/* Define to 1 if you have the <crtdefs.h> header file. */ +#undef HAVE_CRTDEFS_H + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +#undef HAVE_DCGETTEXT + +/* Define to 1 if you have the declaration of `alarm', and to 0 if you don't. + */ +#undef HAVE_DECL_ALARM + +/* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_CLEARERR_UNLOCKED + +/* Define to 1 if you have the declaration of `copysign', and to 0 if you + don't. */ +#undef HAVE_DECL_COPYSIGN + +/* Define to 1 if you have the declaration of `copysignf', and to 0 if you + don't. */ +#undef HAVE_DECL_COPYSIGNF + +/* Define to 1 if you have the declaration of `copysignl', and to 0 if you + don't. */ +#undef HAVE_DECL_COPYSIGNL + +/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you + don't. */ +#undef HAVE_DECL_FEOF_UNLOCKED + +/* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FERROR_UNLOCKED + +/* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FFLUSH_UNLOCKED + +/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FGETS_UNLOCKED + +/* Define to 1 if you have the declaration of `flockfile', and to 0 if you + don't. */ +#undef HAVE_DECL_FLOCKFILE + +/* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FPUTC_UNLOCKED + +/* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FPUTS_UNLOCKED + +/* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FREAD_UNLOCKED + +/* Define to 1 if you have the declaration of `fseeko', and to 0 if you don't. + */ +#undef HAVE_DECL_FSEEKO + +/* Define to 1 if you have the declaration of `ftello', and to 0 if you don't. + */ +#undef HAVE_DECL_FTELLO + +/* Define to 1 if you have the declaration of `funlockfile', and to 0 if you + don't. */ +#undef HAVE_DECL_FUNLOCKFILE + +/* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FWRITE_UNLOCKED + +/* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_GETCHAR_UNLOCKED + +/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you + don't. */ +#undef HAVE_DECL_GETC_UNLOCKED + +/* Define to 1 if you have the declaration of `getdelim', and to 0 if you + don't. */ +#undef HAVE_DECL_GETDELIM + +/* Define to 1 if you have the declaration of `getdtablesize', and to 0 if you + don't. */ +#undef HAVE_DECL_GETDTABLESIZE + +/* Define to 1 if you have the declaration of `getline', and to 0 if you + don't. */ +#undef HAVE_DECL_GETLINE + +/* Define to 1 if you have the declaration of `isblank', and to 0 if you + don't. */ +#undef HAVE_DECL_ISBLANK + +/* Define to 1 if you have the declaration of `localtime_r', and to 0 if you + don't. */ +#undef HAVE_DECL_LOCALTIME_R + +/* Define to 1 if you have the declaration of `mbrlen', and to 0 if you don't. + */ +#undef HAVE_DECL_MBRLEN + +/* Define to 1 if you have the declaration of `mbrtowc', and to 0 if you + don't. */ +#undef HAVE_DECL_MBRTOWC + +/* Define to 1 if you have the declaration of `mbsinit', and to 0 if you + don't. */ +#undef HAVE_DECL_MBSINIT + +/* Define to 1 if you have the declaration of `program_invocation_name', and + to 0 if you don't. */ +#undef HAVE_DECL_PROGRAM_INVOCATION_NAME + +/* Define to 1 if you have the declaration of `program_invocation_short_name', + and to 0 if you don't. */ +#undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME + +/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_PUTCHAR_UNLOCKED + +/* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you + don't. */ +#undef HAVE_DECL_PUTC_UNLOCKED + +/* Define to 1 if you have the declaration of `setenv', and to 0 if you don't. + */ +#undef HAVE_DECL_SETENV + +/* Define to 1 if you have the declaration of `strdup', and to 0 if you don't. + */ +#undef HAVE_DECL_STRDUP + +/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you + don't. */ +#undef HAVE_DECL_STRERROR_R + +/* Define to 1 if you have the declaration of `strncasecmp', and to 0 if you + don't. */ +#undef HAVE_DECL_STRNCASECMP + +/* Define to 1 if you have the declaration of `towlower', and to 0 if you + don't. */ +#undef HAVE_DECL_TOWLOWER + +/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't. + */ +#undef HAVE_DECL_TZNAME + +/* Define to 1 if you have the declaration of `unsetenv', and to 0 if you + don't. */ +#undef HAVE_DECL_UNSETENV + +/* Define to 1 if you have the declaration of `wcrtomb', and to 0 if you + don't. */ +#undef HAVE_DECL_WCRTOMB + +/* Define to 1 if you have the declaration of `wctob', and to 0 if you don't. + */ +#undef HAVE_DECL_WCTOB + +/* Define to 1 if you have the declaration of `_fseeki64', and to 0 if you + don't. */ +#undef HAVE_DECL__FSEEKI64 + +/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you + don't. */ +#undef HAVE_DECL__SNPRINTF + +/* Define to 1 if you have the declaration of `__argv', and to 0 if you don't. + */ +#undef HAVE_DECL___ARGV + +/* Define to 1 if you have the declaration of `__fpending', and to 0 if you + don't. */ +#undef HAVE_DECL___FPENDING + +/* Define to 1 if you have the declaration of `__fsetlocking', and to 0 if you + don't. */ +#undef HAVE_DECL___FSETLOCKING + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the 'dup2' function. */ +#undef HAVE_DUP2 + +/* Define to 1 if you have the `eaccess' function. */ +#undef HAVE_EACCESS + +/* Define if you have the declaration of environ. */ +#undef HAVE_ENVIRON_DECL + +/* Define to 1 if you have the `euidaccess' function. */ +#undef HAVE_EUIDACCESS + +/* Define to 1 if you have the `faccessat' function. */ +#undef HAVE_FACCESSAT + +/* Define to 1 if you have the `facl' function. */ +#undef HAVE_FACL + +/* Define to 1 if you have the `fchmod' function. */ +#undef HAVE_FCHMOD + +/* Define to 1 if you have the `fcntl' function. */ +#undef HAVE_FCNTL + +/* Define to 1 if you have the <features.h> header file. */ +#undef HAVE_FEATURES_H + +/* Define to 1 if you have the `flock' function. */ +#undef HAVE_FLOCK + +/* Define to 1 if you have the `flockfile' function. */ +#undef HAVE_FLOCKFILE + +/* Define if the frexpl function is available in libc. */ +#undef HAVE_FREXPL_IN_LIBC + +/* Define if the frexp function is available in libc. */ +#undef HAVE_FREXP_IN_LIBC + +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +#undef HAVE_FSEEKO + +/* Define to 1 if you have the `funlockfile' function. */ +#undef HAVE_FUNLOCKFILE + +/* Define to 1 if you have the `getacl' function. */ +#undef HAVE_GETACL + +/* Define to 1 if you have the `getcwd' function. */ +#undef HAVE_GETCWD + +/* Define to 1 if you have the `getdelim' function. */ +#undef HAVE_GETDELIM + +/* Define to 1 if you have the `getdtablesize' function. */ +#undef HAVE_GETDTABLESIZE + +/* Define to 1 if you have the `getegid' function. */ +#undef HAVE_GETEGID + +/* Define to 1 if you have the `geteuid' function. */ +#undef HAVE_GETEUID + +/* Define to 1 if you have the `getexecname' function. */ +#undef HAVE_GETEXECNAME + +/* Define to 1 if you have the `getgid' function. */ +#undef HAVE_GETGID + +/* Define to 1 if your system has a working `getgroups' function. */ +#undef HAVE_GETGROUPS + +/* Define to 1 if you have the <getopt.h> header file. */ +#undef HAVE_GETOPT_H + +/* Define to 1 if you have the `getopt_long_only' function. */ +#undef HAVE_GETOPT_LONG_ONLY + +/* Define to 1 if you have the `getpass' function. */ +#undef HAVE_GETPASS + +/* Define to 1 if you have the `getprogname' function. */ +#undef HAVE_GETPROGNAME + +/* Define if the GNU gettext() function is already present or preinstalled. */ +#undef HAVE_GETTEXT + +/* Define to 1 if you have the `gettimeofday' function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define to 1 if you have the `getuid' function. */ +#undef HAVE_GETUID + +/* Define if you have the iconv() function and it works. */ +#undef HAVE_ICONV + +/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */ +#undef HAVE_INTMAX_T + +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and + declares uintmax_t. */ +#undef HAVE_INTTYPES_H_WITH_UINTMAX + +/* Define to 1 if you have the `isblank' function. */ +#undef HAVE_ISBLANK + +/* Define if the isnan(double) function is available in libc. */ +#undef HAVE_ISNAND_IN_LIBC + +/* Define if the isnan(float) function is available in libc. */ +#undef HAVE_ISNANF_IN_LIBC + +/* Define if the isnan(long double) function is available in libc. */ +#undef HAVE_ISNANL_IN_LIBC + +/* Define to 1 if you have the `issetugid' function. */ +#undef HAVE_ISSETUGID + +/* Define to 1 if you have the `iswcntrl' function. */ +#undef HAVE_ISWCNTRL + +/* Define to 1 if you have the `iswctype' function. */ +#undef HAVE_ISWCTYPE + +/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */ +#undef HAVE_LANGINFO_CODESET + +/* Define to 1 if you have the <langinfo.h> header file. */ +#undef HAVE_LANGINFO_H + +/* Define if the ldexpl function is available in libc. */ +#undef HAVE_LDEXPL_IN_LIBC + +/* Define if the ldexp function is available in libc. */ +#undef HAVE_LDEXP_IN_LIBC + +/* Define if you have the libgcrypt library. */ +#undef HAVE_LIBGCRYPT + +/* Define to 1 if you have the <libgen.h> header file. */ +#undef HAVE_LIBGEN_H + +/* Define to 1 if you have the <libintl.h> header file. */ +#undef HAVE_LIBINTL_H + +/* Define to 1 if you have the <limits.h> header file. */ +#undef HAVE_LIMITS_H + +/* Define to 1 if you have the `link' function. */ +#undef HAVE_LINK + +/* Define if localtime-like functions can loop forever on extreme arguments. + */ +#undef HAVE_LOCALTIME_INFLOOP_BUG + +/* Define to 1 if you have the `localtime_r' function. */ +#undef HAVE_LOCALTIME_R + +/* Define to 1 if the system has the type 'long long int'. */ +#undef HAVE_LONG_LONG_INT + +/* Define to 1 if you have the `lstat' function. */ +#undef HAVE_LSTAT + +/* Define to 1 if you have the <malloc.h> header file. */ +#undef HAVE_MALLOC_H + +/* Define if the 'malloc' function is POSIX compliant. */ +#undef HAVE_MALLOC_POSIX + +/* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including + config.h and <sys/mman.h>. */ +#undef HAVE_MAP_ANONYMOUS + +/* Define to 1 if you have the <math.h> header file. */ +#undef HAVE_MATH_H + +/* Define to 1 if you have the `mbrlen' function. */ +#undef HAVE_MBRLEN + +/* Define to 1 if you have the `mbrtowc' function. */ +#undef HAVE_MBRTOWC + +/* Define to 1 if you have the `mbsinit' function. */ +#undef HAVE_MBSINIT + +/* Define to 1 if <wchar.h> declares mbstate_t. */ +#undef HAVE_MBSTATE_T + +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if <limits.h> defines the MIN and MAX macros. */ +#undef HAVE_MINMAX_IN_LIMITS_H + +/* Define to 1 if <sys/param.h> defines the MIN and MAX macros. */ +#undef HAVE_MINMAX_IN_SYS_PARAM_H + +/* Define to 1 if you have the `mkostemp' function. */ +#undef HAVE_MKOSTEMP + +/* Define to 1 if you have the `mkstemp' function. */ +#undef HAVE_MKSTEMP + +/* Define to 1 if you have the `mprotect' function. */ +#undef HAVE_MPROTECT + +/* Define to 1 on MSVC platforms that have the "invalid parameter handler" + concept. */ +#undef HAVE_MSVC_INVALID_PARAMETER_HANDLER + +/* Define to 1 if you have the `nl_langinfo' function. */ +#undef HAVE_NL_LANGINFO + +/* Define to 1 if the system has obstacks that work with any size object. */ +#undef HAVE_OBSTACK + +/* Define to 1 if you have the <paths.h> header file. */ +#undef HAVE_PATHS_H + +/* Define to 1 if you have the `posix_spawn' function. */ +#undef HAVE_POSIX_SPAWN + +/* Define to 1 if the system has the type `posix_spawnattr_t'. */ +#undef HAVE_POSIX_SPAWNATTR_T + +/* Define to 1 if the system has the type `posix_spawn_file_actions_t'. */ +#undef HAVE_POSIX_SPAWN_FILE_ACTIONS_T + +/* Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE. */ +#undef HAVE_PTHREAD_MUTEX_RECURSIVE + +/* Define if the POSIX multithreading library has read/write locks. */ +#undef HAVE_PTHREAD_RWLOCK + +/* Define if the 'pthread_rwlock_rdlock' function prefers a writer to a + reader. */ +#undef HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER + +/* Define to 1 if you have the `raise' function. */ +#undef HAVE_RAISE + +/* Define to 1 if you have the <random.h> header file. */ +#undef HAVE_RANDOM_H + +/* Define to 1 if you have the `random_r' function. */ +#undef HAVE_RANDOM_R + +/* Define to 1 if you have the `rawmemchr' function. */ +#undef HAVE_RAWMEMCHR + +/* Define if you have the readline library. */ +#undef HAVE_READLINE + +/* Define to 1 if you have the <readline/history.h> header file. */ +#undef HAVE_READLINE_HISTORY_H + +/* Define to 1 if you have the <readline/readline.h> header file. */ +#undef HAVE_READLINE_READLINE_H + +/* Define to 1 if you have the `readlink' function. */ +#undef HAVE_READLINK + +/* Define if the 'realloc' function is POSIX compliant. */ +#undef HAVE_REALLOC_POSIX + +/* Define to 1 if you have the `realpath' function. */ +#undef HAVE_REALPATH + +/* Define to 1 if you have run the test for working tzset. */ +#undef HAVE_RUN_TZSET_TEST + +/* Define to 1 if 'long double' and 'double' have the same representation. */ +#undef HAVE_SAME_LONG_DOUBLE_AS_DOUBLE + +/* Define to 1 if you have the <sched.h> header file. */ +#undef HAVE_SCHED_H + +/* Define to 1 if you have the `sched_setparam' function. */ +#undef HAVE_SCHED_SETPARAM + +/* Define to 1 if you have the `sched_setscheduler' function. */ +#undef HAVE_SCHED_SETSCHEDULER + +/* Define to 1 if you have the <search.h> header file. */ +#undef HAVE_SEARCH_H + +/* Define to 1 if you have the `secure_getenv' function. */ +#undef HAVE_SECURE_GETENV + +/* Define to 1 if you have the <selinux/context.h> header file. */ +#undef HAVE_SELINUX_CONTEXT_H + +/* Define to 1 if you have the <selinux/selinux.h> header file. */ +#undef HAVE_SELINUX_SELINUX_H + +/* Define to 1 if you have the `setdtablesize' function. */ +#undef HAVE_SETDTABLESIZE + +/* Define to 1 if you have the `setegid' function. */ +#undef HAVE_SETEGID + +/* Define to 1 if you have the `setenv' function. */ +#undef HAVE_SETENV + +/* Define to 1 if you have the `seteuid' function. */ +#undef HAVE_SETEUID + +/* Define to 1 if you have the `sigaction' function. */ +#undef HAVE_SIGACTION + +/* Define to 1 if you have the `sigaltstack' function. */ +#undef HAVE_SIGALTSTACK + +/* Define to 1 if the system has the type `siginfo_t'. */ +#undef HAVE_SIGINFO_T + +/* Define to 1 if you have the `siginterrupt' function. */ +#undef HAVE_SIGINTERRUPT + +/* Define to 1 if 'sig_atomic_t' is a signed integer type. */ +#undef HAVE_SIGNED_SIG_ATOMIC_T + +/* Define to 1 if 'wchar_t' is a signed integer type. */ +#undef HAVE_SIGNED_WCHAR_T + +/* Define to 1 if 'wint_t' is a signed integer type. */ +#undef HAVE_SIGNED_WINT_T + +/* Define to 1 if the system has the type `sigset_t'. */ +#undef HAVE_SIGSET_T + +/* Define to 1 if the system has the type `sig_atomic_t'. */ +#undef HAVE_SIG_ATOMIC_T + +/* Define to 1 if you have the `snprintf' function. */ +#undef HAVE_SNPRINTF + +/* Define if the return value of the snprintf function is the number of of + bytes (excluding the terminating NUL) that would have been produced if the + buffer had been large enough. */ +#undef HAVE_SNPRINTF_RETVAL_C99 + +/* Define to 1 if you have the <spawn.h> header file. */ +#undef HAVE_SPAWN_H + +/* Define to 1 if you have the `statacl' function. */ +#undef HAVE_STATACL + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares + uintmax_t. */ +#undef HAVE_STDINT_H_WITH_UINTMAX + +/* Define to 1 if you have the <stdio_ext.h> header file. */ +#undef HAVE_STDIO_EXT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strcasecmp' function. */ +#undef HAVE_STRCASECMP + +/* Define to 1 if you have the `strcasestr' function. */ +#undef HAVE_STRCASESTR + +/* Define to 1 if you have the `strchrnul' function. */ +#undef HAVE_STRCHRNUL + +/* Define to 1 if you have the `strdup' function. */ +#undef HAVE_STRDUP + +/* Define to 1 if you have the `strerror_r' function. */ +#undef HAVE_STRERROR_R + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strncasecmp' function. */ +#undef HAVE_STRNCASECMP + +/* Define to 1 if you have the `strnlen' function. */ +#undef HAVE_STRNLEN + +/* Define to 1 if you have the `strsep' function. */ +#undef HAVE_STRSEP + +/* Define to 1 if `l_type' is a member of `struct flock'. */ +#undef HAVE_STRUCT_FLOCK_L_TYPE + +/* Define to 1 if `decimal_point' is a member of `struct lconv'. */ +#undef HAVE_STRUCT_LCONV_DECIMAL_POINT + +/* Define to 1 if the system has the type `struct random_data'. */ +#undef HAVE_STRUCT_RANDOM_DATA + +/* Define to 1 if `sa_sigaction' is a member of `struct sigaction'. */ +#undef HAVE_STRUCT_SIGACTION_SA_SIGACTION + +/* Define to 1 if `st_atimensec' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_ATIMENSEC + +/* Define to 1 if `st_atimespec.tv_nsec' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC + +/* Define to 1 if `st_atim.st__tim.tv_nsec' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC + +/* Define to 1 if `st_atim.tv_nsec' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC + +/* Define to 1 if `st_birthtimensec' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC + +/* Define to 1 if `st_birthtimespec.tv_nsec' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC + +/* Define to 1 if `st_birthtim.tv_nsec' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC + +/* Define to 1 if `tm_zone' is a member of `struct tm'. */ +#undef HAVE_STRUCT_TM_TM_ZONE + +/* Define to 1 if you have the `strverscmp' function. */ +#undef HAVE_STRVERSCMP + +/* Define to 1 if you have the `symlink' function. */ +#undef HAVE_SYMLINK + +/* Define to 1 if you have the <sys/acl.h> header file. */ +#undef HAVE_SYS_ACL_H + +/* Define to 1 if you have the <sys/bitypes.h> header file. */ +#undef HAVE_SYS_BITYPES_H + +/* Define to 1 if you have the <sys/cdefs.h> header file. */ +#undef HAVE_SYS_CDEFS_H + +/* Define to 1 if you have the <sys/file.h> header file. */ +#undef HAVE_SYS_FILE_H + +/* Define to 1 if you have the <sys/inttypes.h> header file. */ +#undef HAVE_SYS_INTTYPES_H + +/* Define to 1 if you have the <sys/mman.h> header file. */ +#undef HAVE_SYS_MMAN_H + +/* Define to 1 if you have the <sys/param.h> header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define to 1 if you have the <sys/socket.h> header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/time.h> header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the <sys/wait.h> header file. */ +#undef HAVE_SYS_WAIT_H + +/* Define to 1 if the system has the 'tcgetattr' function. */ +#undef HAVE_TCGETATTR + +/* Define to 1 if the system has the 'tcsetattr' function. */ +#undef HAVE_TCSETATTR + +/* Define to 1 if you have the <termios.h> header file. */ +#undef HAVE_TERMIOS_H + +/* Define to 1 if you have the `timegm' function. */ +#undef HAVE_TIMEGM + +/* Define to 1 if the system has the type `timezone_t'. */ +#undef HAVE_TIMEZONE_T + +/* Define if struct tm has the tm_gmtoff member. */ +#undef HAVE_TM_GMTOFF + +/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use + `HAVE_STRUCT_TM_TM_ZONE' instead. */ +#undef HAVE_TM_ZONE + +/* Define to 1 if you have the `towlower' function. */ +#undef HAVE_TOWLOWER + +/* Define to 1 if you have the `tsearch' function. */ +#undef HAVE_TSEARCH + +/* Define to 1 if you don't have `tm_zone' but do have the external array + `tzname'. */ +#undef HAVE_TZNAME + +/* Define to 1 if you have the `tzset' function. */ +#undef HAVE_TZSET + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `unsetenv' function. */ +#undef HAVE_UNSETENV + +/* Define to 1 if the system has the type 'unsigned long long int'. */ +#undef HAVE_UNSIGNED_LONG_LONG_INT + +/* Define if you have a global __progname variable */ +#undef HAVE_VAR___PROGNAME + +/* Define to 1 if you have the `vasnprintf' function. */ +#undef HAVE_VASNPRINTF + +/* Define to 1 if you have the `vasprintf' function. */ +#undef HAVE_VASPRINTF + +/* Define to 1 if you have the `vfork' function. */ +#undef HAVE_VFORK + +/* Define to 1 if you have the `waitid' function. */ +#undef HAVE_WAITID + +/* Define to 1 if you have the <wchar.h> header file. */ +#undef HAVE_WCHAR_H + +/* Define if you have the 'wchar_t' type. */ +#undef HAVE_WCHAR_T + +/* Define to 1 if you have the `wcrtomb' function. */ +#undef HAVE_WCRTOMB + +/* Define to 1 if you have the `wcslen' function. */ +#undef HAVE_WCSLEN + +/* Define to 1 if you have the `wcsnlen' function. */ +#undef HAVE_WCSNLEN + +/* Define to 1 if you have the `wctob' function. */ +#undef HAVE_WCTOB + +/* Define to 1 if you have the <wctype.h> header file. */ +#undef HAVE_WCTYPE_H + +/* Define to 1 if you have the <winsock2.h> header file. */ +#undef HAVE_WINSOCK2_H + +/* Define if you have the 'wint_t' type. */ +#undef HAVE_WINT_T + +/* Define to 1 if O_NOATIME works. */ +#undef HAVE_WORKING_O_NOATIME + +/* Define to 1 if O_NOFOLLOW works. */ +#undef HAVE_WORKING_O_NOFOLLOW + +/* Define to 1 if you have the <xlocale.h> header file. */ +#undef HAVE_XLOCALE_H + +/* Define to 1 if the system has the type `_Bool'. */ +#undef HAVE__BOOL + +/* Define to 1 if you have the `_fseeki64' function. */ +#undef HAVE__FSEEKI64 + +/* Define to 1 if you have the `_ftelli64' function. */ +#undef HAVE__FTELLI64 + +/* Define to 1 if you have the `_set_invalid_parameter_handler' function. */ +#undef HAVE__SET_INVALID_PARAMETER_HANDLER + +/* Define to 1 if the compiler supports __builtin_expect, + and to 2 if <builtins.h> does. */ +#undef HAVE___BUILTIN_EXPECT +#ifndef HAVE___BUILTIN_EXPECT +# define __builtin_expect(e, c) (e) +#elif HAVE___BUILTIN_EXPECT == 2 +# include <builtins.h> +#endif + + +/* Define to 1 if you have the `__fseterr' function. */ +#undef HAVE___FSETERR + +/* Define to 1 if you have the `__fsetlocking' function. */ +#undef HAVE___FSETLOCKING + +/* Define to 1 if you have the `__fwriting' function. */ +#undef HAVE___FWRITING + +/* Define to 1 if the compiler supports the keyword '__inline'. */ +#undef HAVE___INLINE + +/* Define to 1 if you have the `__secure_getenv' function. */ +#undef HAVE___SECURE_GETENV + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'long double'. */ +#undef LDBL_EXPBIT0_BIT + +/* Define as the word index where to find the exponent of 'long double'. */ +#undef LDBL_EXPBIT0_WORD + +/* Define as the bit index in the word where to find the sign of 'long + double'. */ +#undef LDBL_SIGNBIT_BIT + +/* Define as the word index where to find the sign of 'long double'. */ +#undef LDBL_SIGNBIT_WORD + +/* Define to 1 if lseek does not detect pipes. */ +#undef LSEEK_PIPE_BROKEN + +/* Define to 1 if 'lstat' dereferences a symlink specified with a trailing + slash. */ +#undef LSTAT_FOLLOWS_SLASHED_SYMLINK + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#undef LT_OBJDIR + +/* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */ +#undef MALLOC_0_IS_NONNULL + +/* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */ +#undef MAP_ANONYMOUS + +/* Define if the mbrtowc function does not return (size_t) -2 for empty input. + */ +#undef MBRTOWC_EMPTY_INPUT_BUG + +/* Define if the mbrtowc function has the NULL pwc argument bug. */ +#undef MBRTOWC_NULL_ARG1_BUG + +/* Define if the mbrtowc function has the NULL string argument bug. */ +#undef MBRTOWC_NULL_ARG2_BUG + +/* Define if the mbrtowc function does not return 0 for a NUL character. */ +#undef MBRTOWC_NUL_RETVAL_BUG + +/* Define if the mbrtowc function returns a wrong return value. */ +#undef MBRTOWC_RETVAL_BUG + +/* Use GNU style printf and scanf. */ +#ifndef __USE_MINGW_ANSI_STDIO +# undef __USE_MINGW_ANSI_STDIO +#endif + + +/* Define if the compilation of mktime.c should define 'mktime_internal'. */ +#undef NEED_MKTIME_INTERNAL + +/* Define if the compilation of mktime.c should define 'mktime' with the + native Windows TZ workaround. */ +#undef NEED_MKTIME_WINDOWS + +/* Define if the compilation of mktime.c should define 'mktime' with the + algorithmic workarounds. */ +#undef NEED_MKTIME_WORKING + +/* Define if the vasnprintf implementation needs special code for the 'a' and + 'A' directives. */ +#undef NEED_PRINTF_DIRECTIVE_A + +/* Define if the vasnprintf implementation needs special code for the 'F' + directive. */ +#undef NEED_PRINTF_DIRECTIVE_F + +/* Define if the vasnprintf implementation needs special code for the 'ls' + directive. */ +#undef NEED_PRINTF_DIRECTIVE_LS + +/* Define if the vasnprintf implementation needs special code for 'double' + arguments. */ +#undef NEED_PRINTF_DOUBLE + +/* Define if the vasnprintf implementation needs special code for surviving + out-of-memory conditions. */ +#undef NEED_PRINTF_ENOMEM + +/* Define if the vasnprintf implementation needs special code for the ' flag. + */ +#undef NEED_PRINTF_FLAG_GROUPING + +/* Define if the vasnprintf implementation needs special code for the '-' + flag. */ +#undef NEED_PRINTF_FLAG_LEFTADJUST + +/* Define if the vasnprintf implementation needs special code for the 0 flag. + */ +#undef NEED_PRINTF_FLAG_ZERO + +/* Define if the vasnprintf implementation needs special code for infinite + 'double' arguments. */ +#undef NEED_PRINTF_INFINITE_DOUBLE + +/* Define if the vasnprintf implementation needs special code for infinite + 'long double' arguments. */ +#undef NEED_PRINTF_INFINITE_LONG_DOUBLE + +/* Define if the vasnprintf implementation needs special code for 'long + double' arguments. */ +#undef NEED_PRINTF_LONG_DOUBLE + +/* Define if the vasnprintf implementation needs special code for supporting + large precisions without arbitrary bounds. */ +#undef NEED_PRINTF_UNBOUNDED_PRECISION + +/* Define to 1 if open() fails to recognize a trailing slash. */ +#undef OPEN_TRAILING_SLASH_BUG + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* String identifying the packager of this software */ +#undef PACKAGE_PACKAGER + +/* Packager info for bug reports (URL/e-mail/...) */ +#undef PACKAGE_PACKAGER_BUG_REPORTS + +/* Packager-specific version information */ +#undef PACKAGE_PACKAGER_VERSION + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define if <inttypes.h> exists and defines unusable PRI* macros. */ +#undef PRI_MACROS_BROKEN + +/* Define to the type that is the result of default argument promotions of + type mode_t. */ +#undef PROMOTED_MODE_T + +/* Define if the pthread_in_use() detection is hard. */ +#undef PTHREAD_IN_USE_DETECTION_HARD + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'ptrdiff_t'. */ +#undef PTRDIFF_T_SUFFIX + +/* Define to 1 if readlink fails to recognize a trailing slash. */ +#undef READLINK_TRAILING_SLASH_BUG + +/* Compile encryption support */ +#undef REC_CRYPT_SUPPORT + +/* Define if rename does not work when the destination file exists, as on + Cygwin 1.5 or Windows. */ +#undef RENAME_DEST_EXISTS_BUG + +/* Define if rename fails to leave hard links alone, as on NetBSD 1.6 or + Cygwin 1.5. */ +#undef RENAME_HARD_LINK_BUG + +/* Define if rename does not correctly handle slashes on the destination + argument, such as on Solaris 11 or NetBSD 1.6. */ +#undef RENAME_TRAILING_SLASH_DEST_BUG + +/* Define if rename does not correctly handle slashes on the source argument, + such as on Solaris 9 or cygwin 1.5. */ +#undef RENAME_TRAILING_SLASH_SOURCE_BUG + +/* Define if fprintf is overridden by a POSIX compliant gnulib implementation. + */ +#undef REPLACE_FPRINTF_POSIX + +/* Define to 1 if stat needs help when passed a file name with a trailing + slash */ +#undef REPLACE_FUNC_STAT_FILE + +/* Define if nl_langinfo exists but is overridden by gnulib. */ +#undef REPLACE_NL_LANGINFO + +/* Define if gnulib uses its own posix_spawn and posix_spawnp functions. */ +#undef REPLACE_POSIX_SPAWN + +/* Define if printf is overridden by a POSIX compliant gnulib implementation. + */ +#undef REPLACE_PRINTF_POSIX + +/* Define to 1 if strerror(0) does not return a message implying success. */ +#undef REPLACE_STRERROR_0 + +/* Define if vasnprintf exists but is overridden by gnulib. */ +#undef REPLACE_VASNPRINTF + +/* Define if vfprintf is overridden by a POSIX compliant gnulib + implementation. */ +#undef REPLACE_VFPRINTF_POSIX + +/* File name of the Bourne shell. */ +#if defined __CYGWIN__ +/* Omit the directory part because for 32-bit Cygwin programs in a + 64-bit Cygwin environment, the Cygwin mounts are not visible. */ +# define BOURNE_SHELL "sh" +#else +# define BOURNE_SHELL "/bin/sh" +#endif + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'sig_atomic_t'. */ +#undef SIG_ATOMIC_T_SUFFIX + +/* Define as the maximum value of type 'size_t', if the system doesn't define + it. */ +#ifndef SIZE_MAX +# undef SIZE_MAX +#endif + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'size_t'. */ +#undef SIZE_T_SUFFIX + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +#undef STACK_DIRECTION + +/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */ +#undef STAT_MACROS_BROKEN + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if strerror_r returns char *. */ +#undef STRERROR_R_CHAR_P + +/* Define to 1 if time_t is signed. */ +#undef TIME_T_IS_SIGNED + +/* Define to 1 if your <sys/time.h> declares `struct tm'. */ +#undef TM_IN_SYS_TIME + +/* Define to 1 if the type of the st_atim member of a struct stat is struct + timespec. */ +#undef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC + +/* Define if tzset clobbers localtime's static buffer. */ +#undef TZSET_CLOBBERS_LOCALTIME + +/* Define to the prefix of C symbols at the assembler and linker level, either + an underscore or empty. */ +#undef USER_LABEL_PREFIX + +/* Define to nonzero if you want access control list support. */ +#undef USE_ACL + +/* Define if the POSIX multithreading library can be used. */ +#undef USE_POSIX_THREADS + +/* Define if references to the POSIX multithreading library should be made + weak. */ +#undef USE_POSIX_THREADS_WEAK + +/* Define if the GNU Pth multithreading library can be used. */ +#undef USE_PTH_THREADS + +/* Define if references to the GNU Pth multithreading library should be made + weak. */ +#undef USE_PTH_THREADS_WEAK + +/* Define if the old Solaris multithreading library can be used. */ +#undef USE_SOLARIS_THREADS + +/* Define if references to the old Solaris multithreading library should be + made weak. */ +#undef USE_SOLARIS_THREADS_WEAK + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable general extensions on macOS. */ +#ifndef _DARWIN_C_SOURCE +# undef _DARWIN_C_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable NetBSD extensions on NetBSD. */ +#ifndef _NETBSD_SOURCE +# undef _NETBSD_SOURCE +#endif +/* Enable OpenBSD extensions on NetBSD. */ +#ifndef _OPENBSD_SOURCE +# undef _OPENBSD_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ +#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ +# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ +#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ +# undef __STDC_WANT_IEC_60559_BFP_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ +#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ +# undef __STDC_WANT_IEC_60559_DFP_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ +#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ +# undef __STDC_WANT_IEC_60559_FUNCS_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ +#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ +# undef __STDC_WANT_IEC_60559_TYPES_EXT__ +#endif +/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ +#ifndef __STDC_WANT_LIB_EXT2__ +# undef __STDC_WANT_LIB_EXT2__ +#endif +/* Enable extensions specified by ISO/IEC 24747:2009. */ +#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ +# undef __STDC_WANT_MATH_SPEC_FUNCS__ +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable X/Open extensions if necessary. HP-UX 11.11 defines + mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of + whether compiling with -Ae or -D_HPUX_SOURCE=1. */ +#ifndef _XOPEN_SOURCE +# undef _XOPEN_SOURCE +#endif +/* Enable X/Open compliant socket functions that do not require linking + with -lxnet on HP-UX 11.11. */ +#ifndef _HPUX_ALT_XOPEN_SOCKET_API +# undef _HPUX_ALT_XOPEN_SOCKET_API +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + +/* Define to 1 if you want getc etc. to use unlocked I/O if available. + Unlocked I/O can improve performance in unithreaded apps, but it is not + safe for multithreaded apps. */ +#undef USE_UNLOCKED_IO + +/* Define if the native Windows multithreading API can be used. */ +#undef USE_WINDOWS_THREADS + +/* Version number of package */ +#undef VERSION + +/* Define to 1 if unsetenv returns void instead of int. */ +#undef VOID_UNSETENV + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'wchar_t'. */ +#undef WCHAR_T_SUFFIX + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'wint_t'. */ +#undef WINT_T_SUFFIX + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + +/* Enable large inode numbers on Mac OS X 10.5. */ +#undef _DARWIN_USE_64_BIT_INODE + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ +#undef _LARGEFILE_SOURCE + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to 1 on Solaris. */ +#undef _LCONV_C99 + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 1 to make NetBSD features available. MINIX 3 needs this. */ +#undef _NETBSD_SOURCE + +/* The _Noreturn keyword of C11. */ +#ifndef _Noreturn +# if 201103 <= (defined __cplusplus ? __cplusplus : 0) +# define _Noreturn [[noreturn]] +# elif (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ + || 4 < __GNUC__ + (7 <= __GNUC_MINOR__)) + /* _Noreturn works as-is. */ +# elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C +# define _Noreturn __attribute__ ((__noreturn__)) +# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn +# endif +#endif + + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for 'stat' and other things to work. */ +#undef _POSIX_SOURCE + +/* Define if you want <regex.h> to include <limits.h>, so that it consistently + overrides <limits.h>'s RE_DUP_MAX. */ +#undef _REGEX_INCLUDE_LIMITS_H + +/* Define if you want regoff_t to be at least as wide POSIX requires. */ +#undef _REGEX_LARGE_OFFSETS + +/* For standard stat data types on VMS. */ +#undef _USE_STD_STAT + +/* Define to rpl_ if the getopt replacement functions and variables should be + used. */ +#undef __GETOPT_PREFIX + +/* Define to 1 if the system <stdint.h> predates C++11. */ +#undef __STDC_CONSTANT_MACROS + +/* Define to 1 if the system <stdint.h> predates C++11. */ +#undef __STDC_LIMIT_MACROS + +/* Please see the Gnulib manual for how to use these macros. + + Suppress extern inline with HP-UX cc, as it appears to be broken; see + <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>. + + Suppress extern inline with Sun C in standards-conformance mode, as it + mishandles inline functions that call each other. E.g., for 'inline void f + (void) { } inline void g (void) { f (); }', c99 incorrectly complains + 'reference to static identifier "f" in extern inline function'. + This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. + + Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) + on configurations that mistakenly use 'static inline' to implement + functions or macros in standard C headers like <ctype.h>. For example, + if isdigit is mistakenly implemented via a static inline function, + a program containing an extern inline function that calls isdigit + may not work since the C standard prohibits extern inline functions + from calling static functions (ISO C 99 section 6.7.4.(3). + This bug is known to occur on: + + OS X 10.8 and earlier; see: + https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html + + DragonFly; see + http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log + + FreeBSD; see: + https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html + + OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and + for clang but remains for g++; see <https://trac.macports.org/ticket/41033>. + Assume DragonFly and FreeBSD will be similar. + + GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 + inline semantics, unless -fgnu89-inline is used. It defines a macro + __GNUC_STDC_INLINE__ to indicate this situation or a macro + __GNUC_GNU_INLINE__ to indicate the opposite situation. + GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline + semantics but warns, unless -fgnu89-inline is used: + warning: C99 inline functions are not supported; using GNU89 + warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute + It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. + */ +#if (((defined __APPLE__ && defined __MACH__) \ + || defined __DragonFly__ || defined __FreeBSD__) \ + && (defined __header_inline \ + ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ + && ! defined __clang__) \ + : ((! defined _DONT_USE_CTYPE_INLINE_ \ + && (defined __GNUC__ || defined __cplusplus)) \ + || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ + && defined __GNUC__ && ! defined __cplusplus)))) +# define _GL_EXTERN_INLINE_STDHEADER_BUG +#endif +#if ((__GNUC__ \ + ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ + : (199901L <= __STDC_VERSION__ \ + && !defined __HP_cc \ + && !defined __PGI \ + && !(defined __SUNPRO_C && __STDC__))) \ + && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) +# define _GL_INLINE inline +# define _GL_EXTERN_INLINE extern inline +# define _GL_EXTERN_INLINE_IN_USE +#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ + && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) +# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ + /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ +# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) +# else +# define _GL_INLINE extern inline +# endif +# define _GL_EXTERN_INLINE extern +# define _GL_EXTERN_INLINE_IN_USE +#else +# define _GL_INLINE static _GL_UNUSED +# define _GL_EXTERN_INLINE static _GL_UNUSED +#endif + +/* In GCC 4.6 (inclusive) to 5.1 (exclusive), + suppress bogus "no previous prototype for 'FOO'" + and "no previous declaration for 'FOO'" diagnostics, + when FOO is an inline function in the header; see + <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and + <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>. */ +#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ +# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ +# define _GL_INLINE_HEADER_CONST_PRAGMA +# else +# define _GL_INLINE_HEADER_CONST_PRAGMA \ + _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") +# endif +# define _GL_INLINE_HEADER_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ + _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ + _GL_INLINE_HEADER_CONST_PRAGMA +# define _GL_INLINE_HEADER_END \ + _Pragma ("GCC diagnostic pop") +#else +# define _GL_INLINE_HEADER_BEGIN +# define _GL_INLINE_HEADER_END +#endif + +/* Always use our fgetfilecon wrapper. */ +#undef fgetfilecon + +/* Always use our getfilecon wrapper. */ +#undef getfilecon + +/* Define to `int' if <sys/types.h> doesn't define. */ +#undef gid_t + +/* A replacement for va_copy, if needed. */ +#define gl_va_copy(a,b) ((a) = (b)) + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + +/* Define to long or long long if <stdint.h> and <inttypes.h> don't define. */ +#undef intmax_t + +/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports + the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of + earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. + __APPLE__ && __MACH__ test for Mac OS X. + __APPLE_CC__ tests for the Apple compiler and its version. + __STDC_VERSION__ tests for the C99 mode. */ +#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ +# define __GNUC_STDC_INLINE__ 1 +#endif + +/* Always use our lgetfilecon wrapper. */ +#undef lgetfilecon + +/* Define to a type if <wchar.h> does not define. */ +#undef mbstate_t + +/* Define to the real name of the mktime_internal function. */ +#undef mktime_internal + +/* Define to `int' if <sys/types.h> does not define. */ +#undef mode_t + +/* Define to the name of the strftime replacement function. */ +#undef my_strftime + +/* Define to the type of st_nlink in struct stat, or a supertype. */ +#undef nlink_t + +/* Define to `long' if <sys/types.h> does not define. */ +#undef off_t + +/* Define to `int' if <sys/types.h> does not define. */ +#undef pid_t + +/* Define as the type of the result of subtracting two pointers, if the system + doesn't define it. */ +#undef ptrdiff_t + +/* Define to rpl_re_comp if the replacement should be used. */ +#undef re_comp + +/* Define to rpl_re_compile_fastmap if the replacement should be used. */ +#undef re_compile_fastmap + +/* Define to rpl_re_compile_pattern if the replacement should be used. */ +#undef re_compile_pattern + +/* Define to rpl_re_exec if the replacement should be used. */ +#undef re_exec + +/* Define to rpl_re_match if the replacement should be used. */ +#undef re_match + +/* Define to rpl_re_match_2 if the replacement should be used. */ +#undef re_match_2 + +/* Define to rpl_re_search if the replacement should be used. */ +#undef re_search + +/* Define to rpl_re_search_2 if the replacement should be used. */ +#undef re_search_2 + +/* Define to rpl_re_set_registers if the replacement should be used. */ +#undef re_set_registers + +/* Define to rpl_re_set_syntax if the replacement should be used. */ +#undef re_set_syntax + +/* Define to rpl_re_syntax_options if the replacement should be used. */ +#undef re_syntax_options + +/* Define to rpl_regcomp if the replacement should be used. */ +#undef regcomp + +/* Define to rpl_regerror if the replacement should be used. */ +#undef regerror + +/* Define to rpl_regexec if the replacement should be used. */ +#undef regexec + +/* Define to rpl_regfree if the replacement should be used. */ +#undef regfree + +/* Define to the equivalent of the C99 'restrict' keyword, or to + nothing if this is not supported. Do not define if restrict is + supported directly. */ +#undef restrict +/* Work around a bug in Sun C++: it does not support _Restrict or + __restrict__, even though the corresponding Sun C compiler ends up with + "#define restrict _Restrict" or "#define restrict __restrict__" in the + previous line. Perhaps some future version of Sun C++ will work with + restrict; if so, hopefully it defines __RESTRICT like Sun C does. */ +#if defined __SUNPRO_CC && !defined __RESTRICT +# define _Restrict +# define __restrict__ +#endif + +/* Define as an integer type suitable for memory locations that can be + accessed atomically even in the presence of asynchronous signals. */ +#undef sig_atomic_t + +/* Define to `unsigned' if <sys/types.h> does not define. */ +#undef size_t + +/* Define as a signed type of the same size as size_t. */ +#undef ssize_t + +/* Define to `int' if <sys/types.h> doesn't define. */ +#undef uid_t + +/* Define as a marker that can be attached to declarations that might not + be used. This helps to reduce warnings, such as from + GCC -Wunused-parameter. */ +#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _GL_UNUSED __attribute__ ((__unused__)) +#else +# define _GL_UNUSED +#endif +/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name + is a misnomer outside of parameter lists. */ +#define _UNUSED_PARAMETER_ _GL_UNUSED + +/* gcc supports the "unused" attribute on possibly unused labels, and + g++ has since version 4.5. Note to support C++ as well as C, + _GL_UNUSED_LABEL should be used with a trailing ; */ +#if !defined __cplusplus || __GNUC__ > 4 \ + || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) +# define _GL_UNUSED_LABEL _GL_UNUSED +#else +# define _GL_UNUSED_LABEL +#endif + +/* The __pure__ attribute was added in gcc 2.96. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) +# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) +#else +# define _GL_ATTRIBUTE_PURE /* empty */ +#endif + +/* The __const__ attribute was added in gcc 2.95. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) +# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) +#else +# define _GL_ATTRIBUTE_CONST /* empty */ +#endif + +/* The __malloc__ attribute was added in gcc 3. */ +#if 3 <= __GNUC__ +# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +#else +# define _GL_ATTRIBUTE_MALLOC /* empty */ +#endif + + +/* Define as a macro for copying va_list variables. */ +#undef va_copy diff --git a/devspec.en_US/project/recutils/src/rec-aggregate.c b/devspec.en_US/project/recutils/src/rec-aggregate.c new file mode 100755 index 0000000..e28f9d8 --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-aggregate.c @@ -0,0 +1,381 @@ +/* -*- mode: C -*- + * + * File: rec-aggregate.c + * Date: Mon Apr 23 11:05:57 2012 + * + * GNU recutils - Support for aggregate functions + * + */ + +/* Copyright (C) 2012-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> +#include <float.h> +#include <math.h> +#include <minmax.h> + +#include <rec-utils.h> +#include <rec.h> + +/* + * Data structures. + */ + +#define MAX_FUNCTIONS 40 + +struct rec_aggregate_reg_elem_s +{ + char *name; + rec_aggregate_t function; +}; + +struct rec_aggregate_reg_s +{ + struct rec_aggregate_reg_elem_s functions[MAX_FUNCTIONS]; + size_t num_functions; +}; + +/* Static functions defined in this file. */ + +static char *rec_aggregate_std_count (rec_rset_t rset, + rec_record_t record, + const char *field_name); + +static char *rec_aggregate_std_avg (rec_rset_t rset, + rec_record_t record, + const char *field_name); +static double rec_aggregate_std_avg_record (rec_record_t record, + const char *field_name); + +static char *rec_aggregate_std_sum (rec_rset_t rset, + rec_record_t record, + const char *field_name); +static double rec_aggregate_std_sum_record (rec_record_t record, + const char *field_name); + +static char *rec_aggregate_std_min (rec_rset_t rset, + rec_record_t record, + const char *field_name); +static double rec_aggregate_std_min_record (rec_record_t record, + const char *field_name); + +static char *rec_aggregate_std_max (rec_rset_t rset, + rec_record_t record, + const char *field_name); +static double rec_aggregate_std_max_record (rec_record_t record, + const char *field_name); + +/* + * Static structure containing the descriptors of the standard + * aggregates. + * + * The aggregate names must be in lower-case, even if the matching is + * case-insensitive. + */ + +struct rec_aggregate_descriptor_s +{ + const char *name; + rec_aggregate_t func; +}; + +#define NUM_STD_AGGREGATES 5 + +static struct rec_aggregate_descriptor_s std_aggregates[] = + {{"count", &rec_aggregate_std_count}, + {"avg", &rec_aggregate_std_avg}, + {"sum", &rec_aggregate_std_sum}, + {"min", &rec_aggregate_std_min}, + {"max", &rec_aggregate_std_max}}; + +/* + * Public functions. + */ + +rec_aggregate_reg_t +rec_aggregate_reg_new (void) +{ + rec_aggregate_reg_t new; + + new = malloc (sizeof (struct rec_aggregate_reg_s)); + if (new) + new->num_functions = 0; + + return new; +} + +void +rec_aggregate_reg_destroy (rec_aggregate_reg_t func_reg) +{ + if (func_reg) + { + size_t i = 0; + + for (i = 0; i < func_reg->num_functions; i++) + free (func_reg->functions[i].name); + free (func_reg); + } +} + +bool +rec_aggregate_reg_add (rec_aggregate_reg_t func_reg, + const char *name, + rec_aggregate_t function) +{ + bool function_replaced = false; + size_t i = 0; + + for (i = 0; i < func_reg->num_functions; i++) + if (strcmp (name, func_reg->functions[i].name) == 0) + { + /* Replace the existing function. */ + func_reg->functions[i].function = function; + function_replaced = true; + break; + } + + if (!function_replaced) + { + /* Insert the function into a new entry in the registry. */ + + if (func_reg->num_functions == MAX_FUNCTIONS) + /* FIXME: this is crappy as hell. */ + return false; + + func_reg->functions[func_reg->num_functions].name = strdup (name); + func_reg->functions[func_reg->num_functions].function = function; + func_reg->num_functions++; + } + + return true; +} + +rec_aggregate_t +rec_aggregate_reg_get (rec_aggregate_reg_t func_reg, + const char *name) +{ + size_t i = 0; + rec_aggregate_t res = NULL; + + for (i = 0; i < func_reg->num_functions; i++) + if (strcasecmp (func_reg->functions[i].name, name) == 0) + { + res = func_reg->functions[i].function; + break; + } + + return res; +} + +void +rec_aggregate_reg_add_standard (rec_aggregate_reg_t func_reg) +{ + size_t i = 0; + + for (i = 0; i < NUM_STD_AGGREGATES; i++) + rec_aggregate_reg_add (func_reg, std_aggregates[i].name, std_aggregates[i].func); +} + +bool +rec_aggregate_std_p (const char *name) +{ + bool found = false; + size_t i = 0; + + for (i = 0; i < NUM_STD_AGGREGATES; i++) + if (strcasecmp (name, std_aggregates[i].name) == 0) + { + found = true; + break; + } + + return found; +} + +/* + * Private functions. + */ + +static char * +rec_aggregate_std_count (rec_rset_t rset, + rec_record_t record, + const char *field_name) +{ + char *result = NULL; + size_t count = 0; + + if (record) + count = rec_record_get_num_fields_by_name (record, field_name); + else if (rset) + { + rec_record_t rec = NULL; + rec_mset_iterator_t iter = rec_mset_iterator (rec_rset_mset (rset)); + + while (rec_mset_iterator_next (&iter, MSET_RECORD, (void *) &rec, NULL)) + count = count + rec_record_get_num_fields_by_name (rec, field_name); + rec_mset_iterator_free (&iter); + } + + /* Return the count as a string. Note that if NULL is returned it + will be returned by this function below to signal the + end-of-memory condition. */ + + asprintf (&result, "%zu", count); + return result; +} + +static char * +rec_aggregate_std_avg (rec_rset_t rset, + rec_record_t record, + const char *field_name) +{ + char *result = NULL; + double avg = 0; + + if (record) + avg = rec_aggregate_std_avg_record (record, field_name); + else if (rset) + { + size_t num_records = 0; + rec_record_t rec = NULL; + rec_mset_iterator_t iter = rec_mset_iterator (rec_rset_mset (rset)); + + while (rec_mset_iterator_next (&iter, MSET_RECORD, (void *) &rec, NULL)) + { + avg = avg + rec_aggregate_std_avg_record (rec, field_name); + num_records++; + } + rec_mset_iterator_free (&iter); + + if (num_records != 0) + avg = avg / num_records; + } + + /* Return the average as a string. Note that if NULL is returned it + will be returned by this function below to signal the + end-of-memory condition. */ + asprintf (&result, "%g", avg); + + return result; +} + +static double +rec_aggregate_std_avg_record (rec_record_t record, + const char *field_name) +{ + double avg = 0; + rec_field_t field; + size_t num_fields = 0; + rec_mset_iterator_t iter = rec_mset_iterator (rec_record_mset (record)); + + while (rec_mset_iterator_next (&iter, MSET_FIELD, (void *) &field, NULL)) + { + double field_value_double = 0; + const char *field_value = rec_field_value (field); + + if (rec_field_name_equal_p (rec_field_name (field), field_name) + && rec_atod (field_value, &field_value_double)) + { + avg = avg + field_value_double; + num_fields++; + } + } + rec_mset_iterator_free (&iter); + + if (num_fields != 0) + avg = avg / num_fields; + + return avg; +} + +#define REC_AGGREGATE_ACCUM_FUNC(NAME, OP, INIT_VAL) \ + static char * \ + rec_aggregate_std_##NAME (rec_rset_t rset, \ + rec_record_t record, \ + const char *field_name) \ + { \ + char *result = NULL; \ + double val = INIT_VAL; \ + \ + if (record) \ + val = rec_aggregate_std_##NAME##_record (record, field_name); \ + else if (rset) \ + { \ + rec_record_t rec = NULL; \ + rec_mset_iterator_t iter = rec_mset_iterator (rec_rset_mset (rset)); \ + while (rec_mset_iterator_next (&iter, MSET_RECORD, (void *) &rec, NULL)) \ + val = OP (val, rec_aggregate_std_##NAME##_record (rec, field_name)); \ + rec_mset_iterator_free (&iter); \ + } \ + \ + /* Return the val as a string. Note that if NULL is returned it */ \ + /* will be returned by this function below to signal the */ \ + /* end-of-memory condition. */ \ + asprintf (&result, "%g", val); \ + \ + return result; \ + } \ + \ + static double \ + rec_aggregate_std_##NAME##_record (rec_record_t record, \ + const char *field_name) \ + { \ + /* Calculate the val of the fields in a given record. Fields */ \ + /* not representing a real value are ignored. */ \ + \ + double val = INIT_VAL; \ + rec_field_t field; \ + rec_mset_iterator_t iter = rec_mset_iterator (rec_record_mset (record)); \ + \ + while (rec_mset_iterator_next (&iter, MSET_FIELD, (void *) &field, NULL)) \ + { \ + const char *field_value = rec_field_value (field); \ + double field_value_double = 0; \ + \ + if (rec_field_name_equal_p (rec_field_name (field), field_name) \ + && rec_atod (field_value, &field_value_double)) \ + val = OP (val, field_value_double); \ + } \ + rec_mset_iterator_free (&iter); \ + \ + return val; \ + } + +/* + * Aggregate: Sum(Field) + */ + +static inline double +op_sum (double op1, double op2) +{ + return op1 + op2; +} + +REC_AGGREGATE_ACCUM_FUNC(sum, op_sum, 0); + +/* + * Aggregate: Min(Field) + * Aggregate: Max(Field) + */ + +REC_AGGREGATE_ACCUM_FUNC(min, MIN, DBL_MAX); +REC_AGGREGATE_ACCUM_FUNC(max, MAX, DBL_MIN); + +/* End of rec-aggregate.c */ diff --git a/devspec.en_US/project/recutils/src/rec-buf.c b/devspec.en_US/project/recutils/src/rec-buf.c new file mode 100755 index 0000000..428b42f --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-buf.c @@ -0,0 +1,150 @@ +/* -*- mode: C -*- + * + * File: rec-buf.c + * Date: Fri Dec 17 18:40:53 2010 + * + * GNU recutils - Flexible buffers. + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <stdlib.h> + +#include <rec.h> + +#define REC_BUF_STEP 512 + +struct rec_buf_s +{ + char *data; + size_t size; + size_t used; + + /* Pointers to user-provided variables that will be updated at + rec_buf_destroy time. */ + char **data_pointer; + size_t *size_pointer; +}; + +/* + * Public functions. + */ + +rec_buf_t +rec_buf_new (char **data, size_t *size) +{ + rec_buf_t new; + + new = malloc (sizeof (struct rec_buf_s)); + if (new) + { + new->data_pointer = data; + new->size_pointer = size; + + new->data = malloc (REC_BUF_STEP); + new->size = REC_BUF_STEP; + new->used = 0; + + if (!new->data) + { + free (new); + new = NULL; + } + } + + return new; +} + +void +rec_buf_close (rec_buf_t buf) +{ + /* Adjust the buffer. */ + if (buf->used > 0) + buf->data = realloc (buf->data, buf->used + 1); + buf->data[buf->used] = '\0'; + + /* Update the user-provided buffer and size. */ + *(buf->data_pointer) = buf->data; + *(buf->size_pointer) = buf->used; + + /* Don't deallocate buf->data */ + free (buf); +} + +void +rec_buf_rewind (rec_buf_t buf, int n) +{ + if ((buf->used - n) >= 0) + buf->used = buf->used - n; +} + +int +rec_buf_putc (int c, rec_buf_t buf) +{ + unsigned int ret; + + if (c == EOF) + return EOF; + + ret = (unsigned int) c; + if ((buf->used + 1) > buf->size) + { + /* Allocate a new block */ + buf->size = buf->size + REC_BUF_STEP; + buf->data = realloc (buf->data, buf->size); + + if (!buf->data) + /* Not enough memory. + REC_BUF_STEP should not be 0. */ + ret = EOF; + } + + if (ret != EOF) + /* Add the character */ + buf->data[buf->used++] = (char) c; + + return ret; +} + +int +rec_buf_puts (const char *str, rec_buf_t buf) +{ + int ret; + const char *p; + + ret = 0; + p = str; + while (*p != '\0') + { + if (rec_buf_putc (*p, buf) == EOF) + { + /* Error. */ + ret = -1; + break; + } + + ret++; + p++; + } + + return ret; +} + +/* End of rec-buf.c */ diff --git a/devspec.en_US/project/recutils/src/rec-comment.c b/devspec.en_US/project/recutils/src/rec-comment.c new file mode 100755 index 0000000..d93bbec --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-comment.c @@ -0,0 +1,79 @@ +/* -*- mode: C -*- + * + * File: rec-comment.c + * Date: Wed Apr 7 17:22:45 2010 + * + * GNU recutils - Comments. + * + */ + +/* Copyright (C) 2009-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> + +#include <rec.h> + +/* + * Public functions. + */ + +rec_comment_t +rec_comment_new (char *text) +{ + if (!text) + return NULL; + + return strdup (text); +} + +void +rec_comment_destroy (rec_comment_t comment) +{ + free (comment); +} + +rec_comment_t +rec_comment_dup (rec_comment_t comment) +{ + return strdup (comment); +} + +char * +rec_comment_text (rec_comment_t comment) +{ + return comment; +} + +void +rec_comment_set_text (rec_comment_t *comment, + char *text) +{ + free (*comment); + *comment = strdup (text); +} + +bool +rec_comment_equal_p (rec_comment_t comment1, + rec_comment_t comment2) +{ + return (strcmp (comment1, comment2) == 0); +} + +/* End of rec-comment.c */ diff --git a/devspec.en_US/project/recutils/src/rec-crypt-dummy.c b/devspec.en_US/project/recutils/src/rec-crypt-dummy.c new file mode 100755 index 0000000..f166e8a --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-crypt-dummy.c @@ -0,0 +1,80 @@ +/* -*- mode: C -*- Time-stamp: "2019-01-03 09:46:25 jemarch" + * + * File: rec-crypt-dummy.c + * Date: Tue Mar 27 21:29:06 2012 + * + * GNU recutils - Dummy replacements for encryption routines + * + */ + +/* Copyright (C) 2012-2019 Michał Masłowski */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <rec.h> + +bool +rec_encrypt (char *in, + size_t in_size, + const char *password, + char **out, + size_t *out_size) +{ + return false; +} + +bool +rec_decrypt (char *in, + size_t in_size, + const char *password, + char **out, + size_t *out_size) +{ + return false; +} + +bool +rec_encrypt_record (rec_rset_t rset, + rec_record_t record, + const char *password) +{ + return false; +} + +bool +rec_encrypt_field (rec_field_t field, + const char *password) +{ + return false; +} + +bool +rec_decrypt_field (rec_field_t field, + const char *password) +{ + return false; +} + +bool +rec_decrypt_record (rec_rset_t rset, + rec_record_t record, + const char *password) +{ + return false; +} + +/* End of rec-crypt-dummy.c */ diff --git a/devspec.en_US/project/recutils/src/rec-crypt.c b/devspec.en_US/project/recutils/src/rec-crypt.c new file mode 100755 index 0000000..1f6455d --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-crypt.c @@ -0,0 +1,438 @@ +/* -*- mode: C -*- + * + * File: rec-crypt.c + * Date: Fri Aug 26 19:50:51 2011 + * + * GNU recutils - Encryption routines + * + */ + +/* Copyright (C) 2011-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <string.h> +#include <gcrypt.h> +#include <crc.h> +#include <base64.h> + +#include <rec.h> +#include <rec-utils.h> + +/* Size of a block in AES128 */ +#define AESV2_BLKSIZE 16 +#define AESV2_KEYSIZE 16 + +#define SALT_SIZE 4 + +static bool +rec_field_encrypted_p (rec_field_t field) +{ + return ((strlen (rec_field_value (field)) > strlen (REC_ENCRYPTED_PREFIX)) + && (strncmp (rec_field_value (field), REC_ENCRYPTED_PREFIX, + strlen (REC_ENCRYPTED_PREFIX)) == 0)); +} + +bool +rec_encrypt (char *in, + size_t in_size, + const char *password, + char **out, + size_t *out_size) +{ + gcry_cipher_hd_t handler; + size_t i; + size_t password_size; + char key[AESV2_KEYSIZE]; + char iv[AESV2_BLKSIZE]; + size_t padding; + uint32_t crc; + char *real_in; + size_t real_in_size; + + /* Append four bytes to the input buffer, containing the CRC of its + contents. This will be used as a control token to determine + whether the correct key is used in decryption. + + We store the integer always in little-endian. */ + + crc = crc32 (in, in_size); + +#if defined WORDS_BIGENDIAN + crc = rec_endian_swap (crc); +#endif + + real_in_size = in_size + 4; + real_in = malloc (real_in_size + 4); + memcpy (real_in, in, real_in_size); + memcpy (real_in + real_in_size - 4, &crc, 4); + + /* The size of the input buffer must be bigger than AESV2_BLKSIZE, + and must contain an entire number of blocks. We assure that by + padding the buffer with \0 characters. */ + + if ((real_in_size % AESV2_BLKSIZE) != 0) + padding = AESV2_BLKSIZE - (real_in_size % AESV2_BLKSIZE); + else + padding = 0; + + if (padding != 0) + { + real_in_size = real_in_size + padding; + real_in = realloc (real_in, real_in_size); + + for (i = 0; i < padding; i++) + real_in[real_in_size - i - 1] = '\0'; + } + + /* Create the handler. */ + if (gcry_cipher_open (&handler, + GCRY_CIPHER_AES128, + GCRY_CIPHER_MODE_CBC, + 0) != GPG_ERR_NO_ERROR) + return false; + + /* Set the key of the cypher. */ + password_size = strlen (password); + for (i = 0; i < AESV2_KEYSIZE; i++) + key[i] = password[i % password_size]; + + /* Set both the key and the IV vector. */ + if (gcry_cipher_setkey (handler, key, AESV2_KEYSIZE) + != GPG_ERR_NO_ERROR) + { + gcry_cipher_close (handler); + return false; + } + + gcry_create_nonce (iv, SALT_SIZE); + + for (i = SALT_SIZE; i < AESV2_BLKSIZE; i++) + iv[i] = i; + + if (gcry_cipher_setiv (handler, iv, AESV2_BLKSIZE) + != GPG_ERR_NO_ERROR) + { + gcry_cipher_close (handler); + return false; + } + + *out_size = real_in_size + SALT_SIZE; + *out = malloc (*out_size); + + /* Append salt at the end of the output. */ + memcpy (*out + real_in_size, iv, SALT_SIZE); + + /* Encrypt the data. */ + if (gcry_cipher_encrypt (handler, + *out, + real_in_size, + real_in, + real_in_size) != 0) + { + /* Error. */ + gcry_cipher_close (handler); + return false; + } + + /* Close the handler. */ + gcry_cipher_close (handler); + + return true; +} + +bool +rec_decrypt (char *in, + size_t in_size, + const char *password, + char **out, + size_t *out_size) +{ + gcry_cipher_hd_t handler; + size_t i; + size_t password_size; + char key[AESV2_KEYSIZE]; + char iv[AESV2_BLKSIZE]; + size_t salt_size = 0; + + if (((in_size - SALT_SIZE) % AESV2_BLKSIZE) == 0) + salt_size = SALT_SIZE; + else if ((in_size % AESV2_BLKSIZE) != 0) + return false; + + /* Create the handler. */ + if (gcry_cipher_open (&handler, + GCRY_CIPHER_AES128, + GCRY_CIPHER_MODE_CBC, + 0) != GPG_ERR_NO_ERROR) + return false; + + /* Set the key of the cypher. */ + password_size = strlen (password); + for (i = 0; i < AESV2_KEYSIZE; i++) + key[i] = password[i % password_size]; + + /* Set both the key and the IV vector. */ + if (gcry_cipher_setkey (handler, key, AESV2_KEYSIZE) + != GPG_ERR_NO_ERROR) + { + printf ("error setting key\n"); + gcry_cipher_close (handler); + return false; + } + + /* Extract salt at the end of the output. */ + memcpy (iv, in + in_size - salt_size, salt_size); + + for (i = salt_size; i < AESV2_BLKSIZE; i++) + iv[i] = i; + + if (gcry_cipher_setiv (handler, iv, AESV2_BLKSIZE) + != GPG_ERR_NO_ERROR) + { + gcry_cipher_close (handler); + return false; + } + + /* Decrypt the data. */ + *out_size = in_size - salt_size; + *out = malloc (*out_size); + if (gcry_cipher_decrypt (handler, + *out, + *out_size, + in, + in_size - salt_size) != 0) + { + /* Error. */ + gcry_cipher_close (handler); + return false; + } + + /* Make sure the decrypted data is ok by checking the CRC at the end + of the sequence. */ + + if (strlen(*out) > 4) + { + uint32_t crc = 0; + + memcpy (&crc, *out + strlen(*out) - 4, 4); +#if defined WORDS_BIGENDIAN + crc = rec_endian_swap (crc); +#endif + + if (crc32 (*out, strlen(*out) - 4) != crc) + { + gcry_cipher_close (handler); + return false; + } + + (*out)[strlen(*out) - 4] = '\0'; + } + else + { + gcry_cipher_close (handler); + return false; + } + + /* Close the handler. */ + gcry_cipher_close (handler); + + return true; +} + +bool +rec_encrypt_record (rec_rset_t rset, + rec_record_t record, + const char *password) +{ + rec_field_t field; + bool res; + const char *field_name; + rec_fex_t confidential_fields; + size_t i, k, num_fields; + + res = true; + + if (rset) + { + confidential_fields = rec_rset_confidential (rset); + for (i = 0; i < rec_fex_size (confidential_fields); i++) + { + field_name = rec_fex_elem_field_name (rec_fex_get (confidential_fields, i)); + + num_fields = rec_record_get_num_fields_by_name (record, field_name); + for (k = 0; k < num_fields; k++) + { + field = rec_record_get_field_by_name (record, field_name, k); + if (field) + { + res = rec_encrypt_field (field, password); + if (!res) + break; + } + } + } + } + + return res; +} + +bool +rec_encrypt_field (rec_field_t field, + const char *password) +{ + char *field_value; + char *field_value_encrypted; + char *field_value_base64; + size_t out_size, base64_size; + char *aux; + + field_value = strdup (rec_field_value (field)); + if (!field_value) + return false; + + /* Make sure the field is not already encrypted. */ + if ((strlen (rec_field_value (field)) >= strlen (REC_ENCRYPTED_PREFIX)) + && (strncmp (rec_field_value (field), REC_ENCRYPTED_PREFIX, + strlen (REC_ENCRYPTED_PREFIX)) == 0)) + return true; + + if (!rec_encrypt (field_value, + strlen (field_value), + password, + &field_value_encrypted, + &out_size)) + return false; + + /* Encode the encrypted value into base64. */ + + base64_size = base64_encode_alloc (field_value_encrypted, + out_size, + &field_value_base64); + base64_encode (field_value_encrypted, + out_size, + field_value_base64, + base64_size); + + /* Prepennd "encrypted-". */ + aux = malloc (strlen (field_value_base64) + + strlen (REC_ENCRYPTED_PREFIX) + 1); + memcpy (aux, + REC_ENCRYPTED_PREFIX, + strlen (REC_ENCRYPTED_PREFIX)); + memcpy (aux + strlen (REC_ENCRYPTED_PREFIX), + field_value_base64, + strlen (field_value_base64)); + aux[strlen (field_value_base64) + + strlen (REC_ENCRYPTED_PREFIX)] = '\0'; + free (field_value_base64); + field_value_base64 = aux; + + /* Replace the value of the field. */ + rec_field_set_value (field, field_value_base64); + + /* Free resources. */ + free (field_value); + free (field_value_encrypted); + free (field_value_base64); + + return true; +} + +bool +rec_decrypt_field (rec_field_t field, + const char *password) +{ + const char *field_value; + char *base64_decoded; + size_t base64_decoded_size; + char *decrypted_value; + size_t decrypted_value_size; + + /* Make sure the field is encrypted. */ + if ((strlen (rec_field_value (field)) < strlen (REC_ENCRYPTED_PREFIX)) + || (strncmp (rec_field_value (field), REC_ENCRYPTED_PREFIX, + strlen (REC_ENCRYPTED_PREFIX)) != 0)) + return true; + + /* Skip the "encrypted-" prefix. */ + field_value = rec_field_value (field) + strlen (REC_ENCRYPTED_PREFIX); + + /* Decode the Base64. */ + + if (base64_decode_alloc (field_value, + strlen(field_value), + &base64_decoded, + &base64_decoded_size)) + { + base64_decode (field_value, + strlen(field_value), + base64_decoded, + &base64_decoded_size); + + /* Decrypt. */ + + if (rec_decrypt (base64_decoded, + base64_decoded_size, + password, + &decrypted_value, + &decrypted_value_size)) + rec_field_set_value (field, decrypted_value); + + /* Free resources. */ + free (base64_decoded); + } + + return true; +} + +bool +rec_decrypt_record (rec_rset_t rset, + rec_record_t record, + const char *password) +{ + bool res = true; + size_t i, num_fields, k; + rec_field_t field; + const char *field_name; + rec_fex_t confidential_fields; + + if (rset) + { + confidential_fields = rec_rset_confidential (rset); + for (i = 0; i < rec_fex_size (confidential_fields); i++) + { + field_name = rec_fex_elem_field_name (rec_fex_get (confidential_fields, i)); + + num_fields = rec_record_get_num_fields_by_name (record, field_name); + for (k = 0; k < num_fields; k++) + { + field = rec_record_get_field_by_name (record, field_name, k); + if (field) + { + res = rec_decrypt_field (field, password); + if (!res) + break; + } + } + } + } + + return res; +} + +/* End of rec-crypt.c */ diff --git a/devspec.en_US/project/recutils/src/rec-db.c b/devspec.en_US/project/recutils/src/rec-db.c new file mode 100755 index 0000000..c2afc37 --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-db.c @@ -0,0 +1,1791 @@ +/* -*- mode: C -*- + * + * File: rec-db.c + * Date: Thu Jan 14 15:35:27 2010 + * + * GNU recutils - Databases + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <string.h> +#include <stdlib.h> +#include <time.h> +#include <gl_array_list.h> +#include <gl_list.h> + +#include <rec-utils.h> +#include <rec.h> + +/* + * Data structures. + */ + +struct rec_db_s +{ + size_t size; /* Number of record sets contained + in this database. */ + gl_list_t rset_list; /* List of record sets. */ + rec_aggregate_reg_t aggregates; /* Registry with the aggregates. */ +}; + +/* Static functions defined in this file. */ + +static bool rec_db_rset_equals_fn (const void *elt1, + const void *elt2); +static void rec_db_rset_dispose_fn (const void *elt); + +static rec_record_t rec_db_process_fex (rec_db_t db, + rec_rset_t rset, + rec_record_t record, + rec_fex_t fex); + +static bool rec_db_record_selected_p (size_t num_rec, + rec_record_t record, + size_t *index, + rec_sex_t sex, + const char *fast_string, + bool case_insensitive_p); +static void rec_db_add_random_indexes (size_t **index, size_t num, size_t limit); +static bool rec_db_index_p (size_t *index, size_t num); + +static bool rec_db_set_act_rename (rec_rset_t rset, rec_record_t record, rec_fex_t fex, bool rename_descriptor, const char *arg); +static bool rec_db_set_act_set (rec_rset_t rset, rec_record_t record, rec_fex_t fex, bool xxx, const char *arg); +static bool rec_db_set_act_add (rec_rset_t rset, rec_record_t record, rec_fex_t fex, const char *arg); +static bool rec_db_set_act_delete (rec_rset_t rset, rec_record_t record, rec_fex_t fex, bool comment_out); + +static rec_rset_t rec_db_join (rec_db_t db, const char *type1, const char *field, const char *type2); +static rec_record_t rec_db_merge_records (rec_record_t record1, rec_record_t record2, const char *prefix); + +/* + * Public functions. + */ + +rec_db_t +rec_db_new (void) +{ + rec_db_t new; + + new = malloc (sizeof (struct rec_db_s)); + if (new) + { + new->size = 0; + new->rset_list = gl_list_nx_create_empty (GL_ARRAY_LIST, + rec_db_rset_equals_fn, + NULL, + rec_db_rset_dispose_fn, + true); + + if (new->rset_list == NULL) + { + /* Out of memory. */ + free (new); + new = NULL; + } + + /* Add the standard field functions to the registry in the + database. */ + + new->aggregates = rec_aggregate_reg_new (); + if (!new->aggregates) + { + /* Out of memory. */ + free (new); + return NULL; + } + rec_aggregate_reg_add_standard (new->aggregates); + } + + return new; +} + +void +rec_db_destroy (rec_db_t db) +{ + if (db) + { + rec_aggregate_reg_destroy (db->aggregates); + gl_list_free (db->rset_list); + free (db); + } +} + +size_t +rec_db_size (rec_db_t db) +{ + return db->size; +} + +rec_rset_t +rec_db_get_rset (rec_db_t db, + size_t position) +{ + rec_rset_t rset; + + rset = NULL; + + if (db->size > 0) + { + if (position >= db->size) + { + position = db->size - 1; + } + + rset = (rec_rset_t) gl_list_get_at (db->rset_list, position); + } + + return rset; +} + +bool +rec_db_insert_rset (rec_db_t db, + rec_rset_t rset, + size_t position) +{ + gl_list_node_t node; + + node = NULL; + + if (position == 0) + { + node = gl_list_nx_add_first (db->rset_list, + (void *) rset); + } + else if (position >= db->size) + { + node = gl_list_nx_add_last (db->rset_list, + (void *) rset); + } + else + { + node = gl_list_nx_add_at (db->rset_list, + position, + (void *) rset); + } + + if (node != NULL) + { + db->size++; + return true; + } + + return false; +} + +bool +rec_db_remove_rset (rec_db_t db, size_t position) +{ + bool removed; + + removed = false; + + if (db->size > 0) + { + if (position >= db->size) + { + position = db->size - 1; + } + + if (gl_list_remove_at (db->rset_list, + position)) + { + db->size--; + removed = true; + } + } + + return removed; +} + +bool +rec_db_type_p (rec_db_t db, + const char *type) +{ + return (rec_db_get_rset_by_type (db, type) != NULL); +} + +rec_rset_t +rec_db_get_rset_by_type (rec_db_t db, + const char *type) +{ + int i; + rec_rset_t rset; + bool found; + char *rtype; + + found = false; + for (i = 0; i < rec_db_size (db); i++) + { + rset = rec_db_get_rset (db, i); + rtype = rec_rset_type (rset); + if (rtype == NULL) + { + if (type == NULL) + { + /* Return the default rset. */ + found = true; + break; + } + } + else + { + if ((type != NULL) + && (strcmp (rtype, type) == 0)) + { + found = true; + break; + } + } + } + + if (!found) + { + rset = NULL; + } + + return rset; +} + +rec_rset_t +rec_db_query (rec_db_t db, + const char *type, + const char *join, + size_t *index, + rec_sex_t sex, + const char *fast_string, + size_t random, + rec_fex_t fex, + const char *password, + rec_fex_t group_by, + rec_fex_t sort_by, + int flags) +{ + rec_rset_t res = NULL; + rec_rset_t rset = NULL; + + /* Create a new, empty, record set, that will contain the contents + of the selection. */ + + res = rec_rset_new (); + if (!res) + { + /* Out of memory. */ + return NULL; + } + + /* Search for the rset containing records of the requested type. If + type equals to NULL then the default record set is used. If JOIN + is not NULL then the record set must be the join of the involved + record sets. */ + + rset = rec_db_get_rset_by_type (db, type); + if (!rset) + { + /* If the default record set was selected, it was not found, and + the database contains only one record set, then it is + selected. */ + + if (!type && (rec_db_size (db) == 1)) + { + rset = rec_db_get_rset (db, 0); + } + else + { + /* Type not found, so return an empty record set. */ + return res; + } + } + else + { + if (join) + { + /* A join was requested. The steps to proceed are: + + - Make sure that the requested field join is declared of + type 'rec' in the record set. + - Retrieve the referred record set from the database. + - Calculate the join and store it in 'rset'. + */ + + rec_type_t ref_type = rec_rset_get_field_type (rset, join); + if (ref_type && (rec_type_kind (ref_type) == REC_TYPE_REC)) + { + const char *referred_type = rec_type_rec (ref_type); + + if (rec_db_get_rset_by_type (db, referred_type)) + { + rset = rec_db_join (db, type, join, referred_type); + if (!rset) + { + /* Out of memory. */ + return NULL; + } + } + } + } + } + + /* If a descriptor is requested then get a copy of the descriptor of + the referred record set, which exists only if it is not the + default. */ + + if (flags & REC_F_DESCRIPTOR) + { + rec_record_t descriptor = rec_rset_descriptor (rset); + if (descriptor) + { + descriptor = rec_record_dup (descriptor); + if (!descriptor) + { + /* Out of memory. */ + free (res); + return NULL; + } + } + + rec_rset_set_descriptor (res, descriptor); + } + + /* Generate a list of random indexes here if requested. The + generated random indexes are added to the indexes list, which + must be NULL if random > 0 (mutually exclusive arguments). */ + + if (random > 0) + { + rec_db_add_random_indexes (&index, random, rec_rset_num_records (rset)); + if (!index) + { + /* Out of memory. */ + return NULL; + } + } + + if (fex && !group_by && rec_fex_all_calls_p (fex)) + { + /* This query is a request for the value of several aggregates, + with no grouping. This means that the resulting rset will + contain one record containing the evaluation of the + aggregates. This is peformed by invoking rec_db_process_fex + with a NULL record. */ + + rec_record_t record = rec_db_process_fex (db, rset, NULL, fex); + if (record) + { + rec_record_set_container (record, res); + if (!rec_mset_append (rec_rset_mset (res), + MSET_RECORD, + (void *) record, + MSET_RECORD)) + { + /* Out of memory. */ + return NULL; + } + } + } + else + { + /* Process this record set. This means that every record of this + record set which is selected by some of the selection arguments + (a sex, an index, a random selection or a "fast string") will + be duplicated and added to the 'res' record set. */ + + rec_record_t record = NULL; + size_t num_rec = -1; + + if (group_by) + { + if (!rec_rset_sort (rset, group_by)) + { + /* Out of memory. */ + return NULL; + } + + if (!rec_rset_group (rset, group_by)) + { + /* Out of memory. */ + return NULL; + } + } + + if (!rec_rset_sort (rset, sort_by)) + { + /* Out of memory. */ + return NULL; + } + + rec_mset_iterator_t iter = rec_mset_iterator (rec_rset_mset (rset)); + while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **) &record, NULL)) + { + rec_record_t res_record; + num_rec++; + + /* Determine whether we must skip this record. */ + + if (!rec_db_record_selected_p (num_rec, + record, + index, + sex, + fast_string, + flags & REC_F_ICASE)) + { + continue; + } + + /* Process this record. */ + + /* Transform the record through the field expression and add + it to the result record set. */ + + res_record + = rec_db_process_fex (db, rset, record, fex); + + if (!res_record) + { + /* Out of memory. */ + return NULL; + } + + /* Do not add empty records to the result record set. */ + + if (rec_record_num_elems (res_record) == 0) + { + continue; + } + +#if defined REC_CRYPT_SUPPORT + + /* Decrypt the confidential fields in the record if some + of the fields are declared as "confidential", but only + do that if the user provided a password. Note that we + use 'rset' instead of 'res' to cover cases where (flags + & REC_F_DESCRIPTOR) == 0. */ + + if (password) + { + if (!rec_decrypt_record (rset, res_record, password)) + { + /* Out of memory. */ + return NULL; + } + } +#endif + + /* Remove duplicated fields if requested by the user. */ + + if (flags & REC_F_UNIQ) + { + rec_record_uniq (res_record); + } + + /* Append. */ + + rec_record_set_container (res_record, res); + if (!rec_mset_append (rec_rset_mset (res), + MSET_RECORD, + (void *) res_record, + MSET_RECORD)) + { + /* Out of memory. */ + return NULL; + } + + } + rec_mset_iterator_free (&iter); + } + + return res; +} + +bool +rec_db_insert (rec_db_t db, + const char *type, + size_t *index, + rec_sex_t sex, + const char *fast_string, + size_t random, + const char *password, + rec_record_t record, + int flags) +{ + /* Discard NULL or empty records. */ + + if (!record || (rec_record_num_fields (record) == 0)) + { + return true; + } + + /* Insert the record in the database. */ + + if (index || sex || fast_string || (random > 0)) + { + /* Replace matching records with copies of RECORD. */ + + rec_rset_t rset = rec_db_get_rset_by_type (db, type); + if (rset) + { + size_t num_rec = -1; + + /* If the user requested to replace random records, + calculate them now for this record set. */ + + if (random > 0) + { + rec_db_add_random_indexes (&index, random, rec_rset_num_records (rset)); + if (!index) + { + /* Out of memory. */ + return false; + } + } + + /* Add auto generated fields unless the user disabled + it. */ + + if (!(flags & REC_F_NOAUTO)) + { + if (!rec_rset_add_auto_fields (rset, record)) + { + /* Out of memory. */ + return false; + } + } + +#if defined REC_CRYPT_SUPPORT + + /* Encrypt confidential fields if a password was provided by + the user. */ + + if (password) + { + if (!rec_encrypt_record (rset, record, password)) + { + /* Out of memory. */ + return false; + } + } +#endif + + /* Iterate on the record set, replacing matching records + with copies of the provided record. */ + + { + rec_record_t rset_record = NULL; + rec_mset_elem_t elem; + rec_mset_iterator_t iter = rec_mset_iterator (rec_rset_mset (rset)); + + while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **) &rset_record, &elem)) + { + num_rec++; + + /* Shall we skip this record? */ + + if (!rec_db_record_selected_p (num_rec, + rset_record, + index, + sex, + fast_string, + flags & REC_F_ICASE)) + { + continue; + } + + /* Replace the record. */ + + rec_record_set_container (record, rset); + rec_mset_elem_set_data (elem, (void *) rec_record_dup (record)); + + } + rec_mset_iterator_free (&iter); + } + } + } + else + { + /* Append the record in the proper record set. */ + + rec_rset_t rset = rec_db_get_rset_by_type (db, type); + + if (rset) + { + rec_record_set_container (record, rset); + + /* Add auto-set fields required by this record set, unless + the addition of auto-fields is disabled by the user. */ + + if (!(flags & REC_F_NOAUTO)) + { + if (!rec_rset_add_auto_fields (rset, record)) + { + /* Out of memory. */ + return false; + } + } + +#if defined REC_CRYPT_SUPPORT + /* Encrypt confidential fields if a password was + provided. */ + + if (password) + { + if (!rec_encrypt_record (rset, record, password)) + { + /* Out of memory. */ + return false; + } + } +#endif + + if (rec_rset_num_records (rset) == 0) + { + /* The rset is empty => Insert the new record just after + the relative position of the record descriptor. */ + + rec_mset_insert_at (rec_rset_mset (rset), + MSET_RECORD, + (void *) record, + rec_rset_descriptor_pos (rset)); + } + else + { + /* Insert the new record after the last record in the + set. */ + + rec_mset_t mset = rec_rset_mset (rset); + rec_record_t last_record = + (rec_record_t) rec_mset_get_at (mset, + MSET_RECORD, + rec_rset_num_records (rset) - 1); + + if (!rec_mset_insert_after (mset, + MSET_RECORD, + (void *) record, + rec_mset_search (mset, (void *) last_record))) + { + /* Out of memory. */ + return NULL; + } + } + } + else + { + /* Create a new type and insert the record there. */ + + rset = rec_rset_new (); + if (!rset) + { + /* Out of memory. */ + return false; + } + + rec_rset_set_type (rset, type); + rec_record_set_container (record, rset); + if (!rec_mset_append (rec_rset_mset (rset), + MSET_RECORD, + (void *) record, + MSET_ANY)) + { + /* Out of memory. */ + return false; + } + + if (type) + { + rec_db_insert_rset (db, rset, rec_db_size (db)); + } + else + { + /* The default rset should always be placed in the + beginning of the db. */ + + rec_db_insert_rset (db, rset, 0); + } + } + } + + return true; +} + +bool +rec_db_delete (rec_db_t db, + const char *type, + size_t *index, + rec_sex_t sex, + const char *fast_string, + size_t random, + int flags) +{ + /* Get the selected record set. If the user did not specify a type, + the default record set does not exist, and the database contains + only one record set, then select it. */ + + rec_rset_t rset = rec_db_get_rset_by_type (db, type); + if (!type && !rset && (rec_db_size (db) == 1)) + { + rset = rec_db_get_rset (db, 0); + } + + /* Don't process empty record sets. */ + + if (rec_rset_num_records (rset) == 0) + { + return true; + } + + /* If the user requested to delete random records then calculate + them now for this record set. */ + + if (random > 0) + { + rec_db_add_random_indexes (&index, random, rec_rset_num_records (rset)); + if (!index) + { + /* Out of memory. */ + return false; + } + } + + /* Iterate on the records, deleting or commenting out the selected + ones. */ + + { + rec_record_t record = NULL; + rec_mset_elem_t elem; + size_t num_rec = -1; + rec_mset_iterator_t iter = rec_mset_iterator (rec_rset_mset (rset)); + + while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **) &record, &elem)) + { + num_rec++; + + if (!rec_db_record_selected_p (num_rec, + record, + index, + sex, + fast_string, + flags & REC_F_ICASE)) + { + continue; + } + + if (flags & REC_F_COMMENT_OUT) + { + /* Replace the record with a comment in the current + element. */ + + rec_comment_t comment = rec_record_to_comment (record); + if (!comment) + { + /* Out of memory. */ + return false; + } + + rec_record_destroy (record); + rec_mset_elem_set_data (elem, (void *) comment); + rec_mset_elem_set_type (elem, MSET_COMMENT); + } + else + { + /* Remove the physical record from the record set and + dispose it. */ + + rec_mset_remove_elem (rec_rset_mset (rset), elem); + } + } + rec_mset_iterator_free (&iter); + } + + return true; +} + +bool rec_db_set (rec_db_t db, + const char *type, + size_t *index, + rec_sex_t sex, + const char *fast_string, + size_t random, + rec_fex_t fex, + int action, + const char *action_arg, + int flags) +{ + /* Get the selected record set. If the user did not specify a type, + the default record set does not exist, and the database contains + only one record set, then select it. */ + + rec_rset_t rset = rec_db_get_rset_by_type (db, type); + if (!type && !rset && (rec_db_size (db) == 1)) + { + rset = rec_db_get_rset (db, 0); + } + + /* Don't process empty record sets. */ + + if (rec_rset_num_records (rset) == 0) + { + return true; + } + + /* If the user requested to manipulate random records then calculate + them now for this record set. */ + + if (random > 0) + { + rec_db_add_random_indexes (&index, random, rec_rset_num_records (rset)); + if (!index) + { + /* Out of memory. */ + return false; + } + } + + /* Iterate on the records, operating on the selected ones. */ + + { + rec_record_t record = NULL; + size_t num_rec = -1; + rec_mset_iterator_t iter = rec_mset_iterator (rec_rset_mset (rset)); + bool descriptor_renamed = false; + + while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **) &record, NULL)) + { + num_rec++; + + if (!rec_db_record_selected_p (num_rec, + record, + index, + sex, + fast_string, + flags & REC_F_ICASE)) + { + continue; + } + + switch (action) + { + case REC_SET_ACT_RENAME: + { + /* If the operation is applied to all records of a given + type (or default) then change the record descriptor + as well. But make sure to do it just once! */ + + bool rename_descriptor = false; + if (!descriptor_renamed + && (sex == NULL) && (index == NULL) && (random == 0) && (fast_string == NULL)) + { + rename_descriptor = true; + descriptor_renamed = true; + } + + if (!rec_db_set_act_rename (rset, record, fex, rename_descriptor, action_arg)) + { + /* Out of memory. */ + return false; + } + + break; + } + case REC_SET_ACT_SET: + { + if (!rec_db_set_act_set (rset, record, fex, false, action_arg)) + { + /* Out of memory. */ + return false; + } + break; + } + case REC_SET_ACT_ADD: + { + if (!rec_db_set_act_add (rset, record, fex, action_arg)) + { + /* Out of memory. */ + return false; + } + break; + } + case REC_SET_ACT_SETADD: + { + if (!rec_db_set_act_set (rset, record, fex, true, action_arg)) + { + /* Out of memory. */ + return false; + } + break; + } + case REC_SET_ACT_DELETE: + { + if (!rec_db_set_act_delete (rset, record, fex, false)) + { + /* Out of memory. */ + return false; + } + break; + } + case REC_SET_ACT_COMMENT: + { + if (!rec_db_set_act_delete (rset, record, fex, true)) + { + /* Out of memory. */ + return false; + } + break; + } + default: + { + /* Ignore an invalid action. */ + return true; + } + } + } + rec_mset_iterator_free (&iter); + } + + return true; +} + +rec_aggregate_reg_t +rec_db_aggregates (rec_db_t db) +{ + return db->aggregates; +} + +/* + * Private functions. + */ + +static rec_record_t +rec_db_merge_records (rec_record_t record1, + rec_record_t record2, + const char *prefix) +{ + rec_mset_iterator_t iter; + rec_field_t field; + rec_record_t merge = NULL; + + merge = rec_record_dup (record1); + if (!merge) + { + return NULL; + } + + /* Add all the fields from record2 to record1, prepending PREFIX_ to + the field name. It is the responsability of the user to provide + a PREFIX whose application results in a unique field. */ + + iter = rec_mset_iterator (rec_record_mset (record2)); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) + { + rec_field_t new_field = rec_field_dup (field); + if (!new_field) + { + /* Out of memory. */ + return NULL; + } + + /* Apply the prefix. */ + { + const char *field_name = rec_field_name (new_field); + char *new_name = malloc (strlen (field_name) + strlen(prefix) + 2); + if (!new_name) + { + /* Out of memory. */ + return NULL; + } + + memcpy (new_name, prefix, strlen (prefix)); + new_name[strlen (prefix)] = '_'; + memcpy (new_name + strlen (prefix) + 1, field_name, strlen (field_name) + 1); + + if (!rec_field_set_name (new_field, new_name)) + { + /* Out of memory. */ + return NULL; + } + + free (new_name); + } + + if (!rec_mset_append (rec_record_mset (merge), + MSET_FIELD, + (void *) new_field, + MSET_ANY)) + { + /* Out of memory. */ + return NULL; + } + } + rec_mset_iterator_free (&iter); + + return merge; +} + +static rec_rset_t +rec_db_join (rec_db_t db, + const char *type1, + const char *field, + const char *type2) +{ + /* Note that this function is inefficient like hell. */ + + /* Perform the join of the specified record sets, using TYPE1.Field + = TYPE2.Key as the join criteria. If some of the specified + record sets don't exist as named rset in the specified database + then return NULL. */ + + const char *key = NULL; + rec_rset_t join = NULL; + rec_rset_t rset1 = rec_db_get_rset_by_type (db, type1); + rec_rset_t rset2 = rec_db_get_rset_by_type (db, type2); + + + if (!rset1 || !rset2) + { + return NULL; + } + + /* Determine the key field of the second record set. */ + key = rec_rset_key (rset2); + if (!key) + { + return NULL; + } + + /* Do the join. */ + + join = rec_rset_new (); + if (!join) + { + /* Out of memory. */ + return NULL; + } + else + { + rec_record_t record1 = NULL; + rec_mset_iterator_t iter1 = rec_mset_iterator (rec_rset_mset (rset1)); + while (rec_mset_iterator_next (&iter1, MSET_RECORD, (const void **) &record1, NULL)) + { + /* For each field record1.key in this record we scan the + second record set for record1.field == record2.key + instances. */ + + size_t num_foreign_keys = rec_record_get_num_fields_by_name (record1, field); + size_t num_foreign_key = 0; + + for (num_foreign_key = 0; num_foreign_key < num_foreign_keys; num_foreign_key++) + { + rec_record_t record2 = NULL; + rec_mset_iterator_t iter2 = rec_mset_iterator (rec_rset_mset (rset2)); + + while (rec_mset_iterator_next (&iter2, MSET_RECORD, (const void **) &record2, NULL)) + { + + /* Continue only if there is a field in record1 such as: + record1.field == record2.key. */ + + bool found = false; + size_t i = 0; + + rec_field_t key_field = rec_record_get_field_by_name (record2, key, num_foreign_key); + if (!key_field) + { + /* A record without a key is an integrity error, but + none of our business, so just skip it. */ + break; + } + + found = false; + for (i = 0; i < rec_record_get_num_fields_by_name (record1, field); i++) + { + if (strcmp (rec_field_value (key_field), + rec_field_value (rec_record_get_field_by_name (record1, field, i))) == 0) + { + found = true; + break; + } + } + + if (!found) + { + /* Skip this combination record. */ + continue; + } + + /* Merge record1 and record2 into a new record. */ + + rec_record_t record = rec_db_merge_records (record1, record2, field); + if (!record) + { + /* Out of memory. */ + return NULL; + } + + /* Remove all the occurrences of the 'field' from + record1, which were substituted in the merge. */ + + while (rec_record_get_num_fields_by_name (record, field) > 0) + { + rec_record_remove_field_by_name (record, field, 0); + } + + /* Add it into the join result. */ + + rec_record_set_container (record, join); + if (!rec_mset_append (rec_rset_mset (join), MSET_RECORD, (void *) record, MSET_ANY)) + { + /* Out of memory. */ + return NULL; + } + } + rec_mset_iterator_free (&iter2); + } + } + rec_mset_iterator_free (&iter1); + } + + /* The descriptor of the new record set will define records of type + TYPE_FIELD, where FIELD is the name specified to trigger the + operation. The contents of the descriptor will be just the + %rec entry. */ + + { + rec_record_t new_descriptor = rec_record_new (); + if (!new_descriptor) + { + /* Out of memory. */ + return NULL; + } + + /* Set the type of the joined record set. */ + + { + rec_field_t new_field = NULL; + char *new_rset_type = rec_concat_strings (type1, "_", field); + if (!new_rset_type) + { + /* Out of memory. */ + return NULL; + } + + new_field = rec_field_new (rec_std_field_name (REC_FIELD_REC), + new_rset_type); + if (!rec_mset_append (rec_record_mset (new_descriptor), + MSET_FIELD, + (void *) new_field, + MSET_ANY)) + { + /* Out of memory. */ + return NULL; + } + } + + rec_rset_set_descriptor (join, new_descriptor); + } + + return join; +} + +static bool +rec_db_set_act_rename (rec_rset_t rset, + rec_record_t record, + rec_fex_t fex, + bool rename_descriptor, + const char *arg) +{ + size_t j, min, max, renamed; + size_t num_fields; + rec_fex_elem_t fex_elem; + rec_field_t field; + const char *field_name; + + /* Rename the selected fields. The size of the FEX is guaranteed to + be 1 at this point. */ + + fex_elem = rec_fex_get (fex, 0); + field_name = rec_fex_elem_field_name (fex_elem); + min = rec_fex_elem_min (fex_elem); + max = rec_fex_elem_max (fex_elem); + + num_fields = + rec_record_get_num_fields_by_name (record, field_name); + if (min == -1) + { + /* Process all the fields with the given name. */ + min = 0; + max = num_fields - 1; + } + if (max == -1) + { + max = min; + } + + renamed = 0; + for (j = 0; j < num_fields; j++) + { + if ((j >= min) && (j <= max)) + { + /* Set the name of the Jth field + named FIELD_NAME, if it exists.*/ + field = rec_record_get_field_by_name (record, + field_name, + j - renamed); + if (field) + { + rec_field_set_name (field, arg); + renamed++; + } + + if (rename_descriptor) + { + + rec_rset_rename_field (rset, + field_name, + arg); + } + } + } + + return true; +} + + +static bool +rec_db_set_act_set (rec_rset_t rset, + rec_record_t record, + rec_fex_t fex, + bool add_p, + const char *arg) +{ + size_t i, j, min, max; + size_t num_fields; + rec_fex_elem_t fex_elem; + rec_field_t field; + const char *field_name; + + for (i = 0; i < rec_fex_size (fex); i++) + { + fex_elem = rec_fex_get (fex, i); + field_name = rec_fex_elem_field_name (fex_elem); + min = rec_fex_elem_min (fex_elem); + max = rec_fex_elem_max (fex_elem); + + num_fields = + rec_record_get_num_fields_by_name (record, field_name); + if (min == -1) + { + /* Process all the fields with the given name. */ + min = 0; + max = num_fields - 1; + } + if (max == -1) + { + max = min; + } + + for (j = 0; j < num_fields; j++) + { + if ((j >= min) && (j <= max)) + { + /* Set the value of the Jth field + named FIELD_NAME, if it exists.*/ + field = rec_record_get_field_by_name (record, + field_name, + j); + if (field) + { + rec_field_set_value (field, arg); + } + } + } + + if (add_p && (num_fields == 0)) + { + /* Add a field with this name and value. */ + field = rec_field_new (field_name, arg); + if (!rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY)) + { + /* Out of memory. */ + return false; + } + } + } + + return true; +} + +static bool +rec_db_set_act_add (rec_rset_t rset, + rec_record_t record, + rec_fex_t fex, + const char *arg) +{ + size_t i; + + /* Create new fields from the FEX and add them to the record. */ + for (i = 0; i < rec_fex_size (fex); i++) + { + rec_fex_elem_t fex_elem = rec_fex_get (fex, i); + const char *field_name = rec_fex_elem_field_name (fex_elem); + rec_field_t field = rec_field_new (field_name, arg); + if (!field) + { + /* Out of memory. */ + return false; + } + + if (!rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY)) + { + /* Out of memory. */ + return false; + } + } + + return true; +} + +static bool +rec_db_set_act_delete (rec_rset_t rset, + rec_record_t record, + rec_fex_t fex, + bool comment_out) +{ + size_t i, j; + size_t num_fields; + bool *deletion_mask; + rec_field_t field; + rec_mset_iterator_t iter; + rec_mset_elem_t elem; + + /* Initialize the deletion mask. */ + deletion_mask = malloc (sizeof (bool) * rec_record_num_fields (record)); + if (!deletion_mask) + { + /* Out of memory. */ + return false; + } + + for (i = 0; i < rec_record_num_fields (record); i++) + { + deletion_mask[i] = false; + } + + /* Mark fields that will be deleted from the record. */ + for (i = 0; i < rec_fex_size (fex); i++) + { + rec_fex_elem_t fex_elem = rec_fex_get (fex, i); + const char *field_name = rec_fex_elem_field_name (fex_elem); + size_t min = rec_fex_elem_min (fex_elem); + size_t max = rec_fex_elem_max (fex_elem); + + num_fields = + rec_record_get_num_fields_by_name (record, field_name); + if (min == -1) + { + /* Delete all the fields with the given name. */ + min = 0; + max = num_fields - 1; + } + if (max == -1) + { + max = min; + } + + for (j = 0; j < num_fields; j++) + { + if ((j >= min) && (j <= max)) + { + /* Mark this field for deletion. */ + field = rec_record_get_field_by_name (record, + rec_fex_elem_field_name (fex_elem), + j); + deletion_mask[rec_record_get_field_index (record, field)] = true; + } + } + } + + /* Delete the marked fields. */ + i = 0; + + iter = rec_mset_iterator (rec_record_mset (record)); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void**) &field, &elem)) + { + if (deletion_mask[i]) + { + if (comment_out) + { + /* Turn the field into a comment. */ + + rec_comment_t comment = rec_field_to_comment (field); + if (!comment) + { + /* Out of memory. */ + return false; + } + + rec_field_destroy (field); + rec_mset_elem_set_data (elem, (void *) comment); + rec_mset_elem_set_type (elem, MSET_COMMENT); + } + else + { + /* Remove the field from the list and dispose it. */ + + rec_mset_remove_elem (rec_record_mset (record), elem); + } + } + + i++; + } + rec_mset_iterator_free (&iter); + + return true; +} + +static bool +rec_db_index_p (size_t *index, + size_t num) +{ + while ((index[0] != REC_Q_NOINDEX) || (index[1] != REC_Q_NOINDEX)) + { + bool found = false; + size_t min = index[0]; + size_t max = index[1]; + + if (max == REC_Q_NOINDEX) + { + found = (num == min); + } + else + { + found = ((num >= min) && (num <= max)); + } + + if (found) + { + return true; + } + + index = index + 2; + } + + return false; +} + +static void +rec_db_add_random_indexes (size_t **index, + size_t num, + size_t limit) +{ + /* Create NUM different random numbers in the [0..limit-1] range, + without repetition, and store them in a buffer pointed by + INDEX. */ + + size_t i; + char random_state[128]; + struct random_data random_data; + + *index = malloc (sizeof(size_t) * ((num + 1) * 2)); + if (*index == NULL) + { + /* Out of memory. */ + return; + } + + for (i = 0; i < ((num + 1) * 2); i++) + { + (*index)[i] = REC_Q_NOINDEX; + } + + /* Insert the random indexes. */ + + memset (&random_data, 0, sizeof (random_data)); + initstate_r (time(NULL), (char *) &random_state, 128, &random_data); + for (i = 0; i < (num * 2); i = i + 2) + { + size_t random_value = 0; + + random_r (&random_data, (int32_t *) &random_value); /* Can't fail. */ + random_value = random_value % limit; + + /* Avoid having repeated random indexes. */ + + if (rec_db_index_p (*index, random_value)) + { + /* Pick the first available number. */ + + size_t i; + for (i = 0; i < limit; i++) + { + if (!rec_db_index_p (*index, i)) + { + random_value = i; + break; + } + } + } + + (*index)[i] = random_value; /* Min. */ + (*index)[i+1] = REC_Q_NOINDEX; /* Max. */ + } +} + +static bool +rec_db_record_selected_p (size_t num_record, + rec_record_t record, + size_t *index, + rec_sex_t sex, + const char *fast_string, + bool case_insensitive_p) +{ + /* Note that the logic in this function assumes that SEX and + FAST_STRING are mutually exclusive. If they are not then + FAST_STRING takes precedence. */ + + /* The record is searched for instances of the "fast string", which + can appear as a substring. */ + + if (fast_string) + { + return rec_record_contains_value (record, + fast_string, + case_insensitive_p); + } + + /* The selected expression is evaluated in the record. If there is + an error evaluating the expression, or if the expression does not + evaluate to 'true', then 'false' is returned. */ + + if (sex) + { + bool eval_status; + return rec_sex_eval (sex, record, &eval_status); + } + + /* The memory pointed by INDEX contains pairs of indexes Min,Max. + The final pair is always REC_Q_NOINDEX,REC_Q_NOINDEX. Select the + current record only if its position is into some of the defined + intervals. */ + + if (index) + { + return rec_db_index_p (index, num_record); + } + + return true; +} + +static rec_record_t +rec_db_process_fex (rec_db_t db, + rec_rset_t rset, + rec_record_t record, + rec_fex_t fex) +{ + rec_record_t res = NULL; + size_t fex_size, i, j = 0; + + /* If fex is NULL then just return a copy of RECORD. Otherwise + create an empty result record. */ + + if (!fex) + { + return rec_record_dup (record); + } + + res = rec_record_new (); + if (!res) + { + /* Out of memory. */ + return NULL; + } + + /* Iterate on the elements of the FEX, picking and transforming the + fields of RECORD that must be copied and inserted into RES. If a + function call is found in the fex then invoke the corresponding + function and add the fields returned by that function into the + record. */ + + fex_size = rec_fex_size (fex); + for (i = 0; i < fex_size; i++) + { + rec_fex_elem_t elem = rec_fex_get (fex, i); + const char *field_name = rec_fex_elem_field_name (elem); + const char *alias = rec_fex_elem_rewrite_to (elem); + const char *function_name = rec_fex_elem_function_name (elem); + size_t min = rec_fex_elem_min (elem); + size_t max = rec_fex_elem_max (elem); + + if (function_name) + { + /* Get a handler for the aggregate function and invoke it on + the rset or record, passing the field_name argument and + the indexes. The value returned by the funciton is then + appended into the current record in a new field, named + after the name of the aggregate and the name of the + argument field. Non-existing aggregates are simply + ignored. */ + + rec_aggregate_t func = rec_aggregate_reg_get (rec_db_aggregates (db), function_name); + if (func) + { + char *func_res = (func) (rset, record, field_name); + if (func_res) + { + /* Add a new field with the result of the aggregate + as its value. */ + + rec_field_t agg_field = NULL; + char *agg_field_name = NULL; + char *agg_field_value = func_res; + + /* The name of the new field is a composition of the + name of the invoked function and the name of the + field to which the function is applied. Unless + an alias is used, of course. */ + + if (alias) + { + agg_field_name = strdup (alias); + if (!agg_field_name) + { + /* Out of memory. */ + return NULL; + } + } + else + { + agg_field_name = malloc (strlen(function_name) + 1 /* _ */ + strlen (field_name) + 1); + if (!agg_field_name) + { + /* Out of memory. */ + return NULL; + } + + memcpy (agg_field_name, function_name, strlen (function_name) + 1); + strcat (agg_field_name, "_"); + strcat (agg_field_name, field_name); + } + + agg_field = rec_field_new (agg_field_name, agg_field_value); + if (!agg_field) + { + /* Out of memory. */ + return NULL; + } + + if (!rec_mset_append (rec_record_mset (res), + MSET_FIELD, + (void *) agg_field, + MSET_FIELD)) + { + /* Out of memory. */ + return NULL; + } + + free (agg_field_name); + free (func_res); + } + } + } + else + { + if ((min == -1) && (max == -1)) + { + /* Add all the fields with that name. */ + min = 0; + max = rec_record_get_num_fields_by_name (record, field_name); + } + else if (max == -1) + { + /* Add just one field: Field[min]. */ + max = min + 1; + } + else + { + /* Add the interval min..max, max inclusive. */ + max++; + } + + /* Add the selected fields to the result record. */ + + for (j = min; j < max; j++) + { + rec_field_t res_field = NULL; + rec_field_t field = + rec_record_get_field_by_name (record, field_name, j); + + if (!field) + { + continue; + } + + /* Duplicate the field and append it into 'res'. If there + is a rewrite rule defined in this fex entry then use it + instead of the original name of the field. */ + + res_field = rec_field_dup (field); + if (alias) + { + if (!rec_field_set_name (res_field, alias)) + { + /* Out of memory. */ + return NULL; + } + } + + if (!rec_mset_append (rec_record_mset (res), + MSET_FIELD, + (void *) res_field, + MSET_FIELD)) + { + /* Out of memory. */ + return NULL; + } + } + } + } + + /* At this point RES is a record containing all the selected fields + of the original record, but we must also copy the location + information. */ + + if (record) + { + rec_record_set_location (res, rec_record_location (record)); + rec_record_set_char_location (res, rec_record_char_location (record)); + } + + return res; +} + +static bool +rec_db_rset_equals_fn (const void *elt1, + const void *elt2) +{ + return false; +} + +static void +rec_db_rset_dispose_fn (const void *elt) +{ + rec_rset_t rset; + + rset = (rec_rset_t) elt; + rec_rset_destroy (rset); +} + +/* End of rec-db.c */ diff --git a/devspec.en_US/project/recutils/src/rec-fex.c b/devspec.en_US/project/recutils/src/rec-fex.c new file mode 100755 index 0000000..47910f0 --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-fex.c @@ -0,0 +1,854 @@ +/* -*- mode: C -*- + * + * File: rec-fex.c + * Date: Sun Apr 11 21:31:32 2010 + * + * GNU recutils - Field Expressions + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> +#include <gettext.h> +#define _(str) dgettext (PACKAGE, str) + +#include <rec-utils.h> +#include <rec.h> + +/* + * Data types. + */ + +struct rec_fex_elem_s +{ + char *str; + + char *field_name; + char *rewrite_to; + int max; + int min; + + char *function_name; + void *function_data; +}; + +#define REC_FEX_MAX_ELEMS 256 + +struct rec_fex_s +{ + int num_elems; + char *str; + rec_fex_elem_t elems[REC_FEX_MAX_ELEMS]; +}; + +/* + * Static function declarations. + */ + +static void rec_fex_init (rec_fex_t fex); + +static bool rec_fex_parse_str_simple (rec_fex_t new, const char *str, const char *sep); +static bool rec_fex_parse_str_subscripts (rec_fex_t new, const char *str); +static bool rec_fex_parse_elem (rec_fex_elem_t elem, const char *str); + +/* + * Public functions. + */ + +rec_fex_t +rec_fex_new (const char *str, + enum rec_fex_kind_e kind) +{ + rec_fex_t new; + int i; + + new = malloc (sizeof (struct rec_fex_s)); + if (new) + { + rec_fex_init (new); + + new->num_elems = 0; + new->str = NULL; + for (i = 0; i < REC_FEX_MAX_ELEMS; i++) + { + new->elems[i] = 0; + } + + if (str != NULL) + { + /* Parse the string, using the proper parsing routine + depending on the kind of field expression requested by + the user. */ + + if (kind == REC_FEX_SUBSCRIPTS) + { + if (!rec_fex_parse_str_subscripts (new, str)) + { + /* Out of memory or parse error. */ + free (new); + return NULL; + } + } + else if (kind == REC_FEX_SIMPLE) + { + if (!rec_fex_parse_str_simple (new, str, " \t\n")) + { + /* Out of memory or parse error. */ + free (new); + return NULL; + } + } + else /* REC_FEX_CSV */ + { + if (!rec_fex_parse_str_simple (new, str, ",")) + { + /* Out of memory or parse error. */ + free (new); + return NULL; + } + } + } + } + + return new; +} + +void +rec_fex_destroy (rec_fex_t fex) +{ + int i; + + if (fex) + { + for (i = 0; i < fex->num_elems; i++) + { + free (fex->elems[i]->rewrite_to); + free (fex->elems[i]->field_name); + free (fex->elems[i]->str); + free (fex->elems[i]); + } + + free (fex->str); + free (fex); + } +} + +rec_fex_t +rec_fex_dup (rec_fex_t fex) +{ + rec_fex_t copy = NULL; + size_t i = 0; + + copy = malloc (sizeof (struct rec_fex_s)); + if (copy) + { + rec_fex_init (copy); + + copy->num_elems = fex->num_elems; + copy->str = strdup (fex->str); + if (!copy->str) + { + /* Out of memory. */ + rec_fex_destroy (copy); + return NULL; + } + + for (i = 0; i < fex->num_elems; i++) + { + if (fex->elems[i] == NULL) + { + copy->elems[i] = NULL; + continue; + } + + copy->elems[i] = malloc (sizeof (struct rec_fex_elem_s)); + if (!copy->elems[i]) + { + /* Out of memory. */ + rec_fex_destroy (copy); + return NULL; + } + + copy->elems[i]->max = fex->elems[i]->max; + copy->elems[i]->min = fex->elems[i]->min; + +#define REC_COPY_STR_MAYBE_RETURN(FNAME) \ + do \ + { \ + if (!fex->elems[i]->FNAME) \ + { \ + copy->elems[i]->FNAME = NULL; \ + } \ + else \ + { \ + copy->elems[i]->FNAME = strdup (fex->elems[i]->FNAME); \ + if (!copy->elems[i]->FNAME) \ + { \ + /* Out of memory. */ \ + rec_fex_destroy (copy); \ + return NULL; \ + } \ + } \ + } while (0) + + REC_COPY_STR_MAYBE_RETURN (str); + REC_COPY_STR_MAYBE_RETURN (field_name); + REC_COPY_STR_MAYBE_RETURN (rewrite_to); + REC_COPY_STR_MAYBE_RETURN (function_name); + } + } + + return copy; +} + +bool +rec_fex_check (const char *str, enum rec_fex_kind_e kind) +{ + char *regexp_str; + + switch (kind) + { + case REC_FEX_SIMPLE: + { + regexp_str = "^" REC_FNAME_LIST_RE "$"; + break; + } + case REC_FEX_CSV: + { + regexp_str = "^" REC_FNAME_LIST_CS_RE "$"; + break; + } + case REC_FEX_SUBSCRIPTS: + { + regexp_str = "^" REC_FNAME_LIST_SUB_RE "$"; + break; + } + default: + { + regexp_str = NULL; + break; + } + } + + return rec_match (str, regexp_str); +} + +size_t +rec_fex_size (rec_fex_t fex) +{ + return fex->num_elems; +} + +rec_fex_elem_t +rec_fex_get (rec_fex_t fex, + size_t position) +{ + if ((position < 0) || (position >= fex->num_elems)) + { + return NULL; + } + + return fex->elems[position]; +} + +const char * +rec_fex_elem_field_name (rec_fex_elem_t elem) +{ + return elem->field_name; +} + +bool +rec_fex_elem_set_field_name (rec_fex_elem_t elem, + const char *fname) +{ + free (elem->field_name); + elem->field_name = strdup (fname); + return (elem->field_name != NULL); +} + +int +rec_fex_elem_min (rec_fex_elem_t elem) +{ + return elem->min; +} + +int +rec_fex_elem_max (rec_fex_elem_t elem) +{ + return elem->max; +} + +const char * +rec_fex_elem_rewrite_to (rec_fex_elem_t elem) +{ + return elem->rewrite_to; +} + +void +rec_fex_sort (rec_fex_t fex) +{ + bool done; + rec_fex_elem_t aux; + int i, j; + + /* XXX: this code only works when 'max' is not specified. */ + + for (i = 1; i < fex->num_elems; i++) + { + aux = fex->elems[i]; + j = i - 1; + done = false; + + while (!done) + { + /* If elems[j] > aux */ + if ((fex->elems[j]->min == -1) || (fex->elems[j]->min > aux->min)) + { + fex->elems[j + 1] = fex->elems[j]; + j = j - 1; + if (j < 0) + { + done = true; + } + } + else + { + done = true; + } + } + + fex->elems[j + 1] = aux; + } +} + +char * +rec_fex_str (rec_fex_t fex, + enum rec_fex_kind_e kind) +{ + char *result; + size_t result_size; + rec_buf_t buf; + size_t i; + char *tmp; + + result = NULL; + buf = rec_buf_new (&result, &result_size); + if (buf) + { + char *field_str = NULL; + + for (i = 0; i < fex->num_elems; i++) + { + if (i != 0) + { + if (kind == REC_FEX_SIMPLE) + { + rec_buf_putc (' ', buf); + } + else + { + rec_buf_putc (',', buf); + } + } + + field_str = strdup (fex->elems[i]->field_name); + if (!field_str) + { + rec_buf_close (buf); + free (result); + return NULL; + } + + rec_buf_puts (field_str, buf); + free (field_str); + + if (kind == REC_FEX_SUBSCRIPTS) + { + if ((fex->elems[i]->min != -1) + || (fex->elems[i]->max != -1)) + { + rec_buf_putc ('[', buf); + if (fex->elems[i]->min != -1) + { + if (asprintf (&tmp, "%d", fex->elems[i]->min) != -1) + { + rec_buf_puts (tmp, buf); + free (tmp); + } + } + if (fex->elems[i]->max != -1) + { + if (asprintf (&tmp, "-%d", fex->elems[i]->max) != -1) + { + rec_buf_puts (tmp, buf); + free (tmp); + } + } + + rec_buf_putc (']', buf); + } + } + } + } + + rec_buf_close (buf); + + return result; +} + +bool +rec_fex_member_p (rec_fex_t fex, + const char *fname, + int min, + int max) +{ + bool res = false; + int i; + + for (i = 0; i < fex->num_elems; i++) + { + if (rec_field_name_equal_p (fname, + fex->elems[i]->field_name) + && ((min == -1) || (fex->elems[i]->min == min)) + && ((max == -1) || (fex->elems[i]->max == max))) + { + res = true; + break; + } + } + + return res; +} + +rec_fex_elem_t +rec_fex_append (rec_fex_t fex, + const char *fname, + int min, + int max) +{ + rec_fex_elem_t new_elem; + + if (fex->num_elems >= REC_FEX_MAX_ELEMS) + { + fprintf (stderr, _("internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n")); + return NULL; + } + + new_elem = malloc (sizeof (struct rec_fex_elem_s)); + if (new_elem) + { + memset (new_elem, 0, sizeof (*new_elem)); + new_elem->field_name = strdup (fname); + if (!new_elem->field_name) + { + /* Out of memory. */ + free (new_elem); + return NULL; + } + + new_elem->str = strdup (fname); + if (!new_elem->str) + { + /* Out of memory. */ + free (new_elem->field_name); + free (new_elem); + return NULL; + } + + new_elem->min = min; + new_elem->max = max; + fex->elems[fex->num_elems++] = new_elem; + } + + return new_elem; +} + +const char * +rec_fex_elem_function_name (rec_fex_elem_t elem) +{ + return elem->function_name; +} + +void ** +rec_fex_elem_function_data (rec_fex_elem_t elem) +{ + return elem->function_data; +} + +bool +rec_fex_all_calls_p (rec_fex_t fex) +{ + bool result = true; + size_t i = 0; + + for (i = 0; i < fex->num_elems; i++) + { + if (fex->elems[i]->function_name == NULL) + { + result = false; + break; + } + } + + return result; +} + +/* + * Private functions. + */ + +static void +rec_fex_init (rec_fex_t fex) +{ + /* Initialize the field expression structure so it can be safely + passed to rec_fex_destroy even if its contents are not completely + initialized with real values. */ + + memset (fex, 0 /* NULL */, sizeof (struct rec_fex_s)); +} + +static bool +rec_fex_parse_str_simple (rec_fex_t new, + const char *str, + const char *sep) +{ + bool res; + rec_fex_elem_t elem; + char *fex_str, *fex_str_orig; + char *elem_str; + size_t i; + + if (!str) + { + return false; + } + + fex_str = strdup (str); + if (!fex_str) + { + return false; + } + fex_str_orig = fex_str; + + res = true; + + elem_str = strsep (&fex_str, sep); + do + { + if (strlen (elem_str) > 0) + { + if ((elem = malloc (sizeof (struct rec_fex_elem_s)))) + { + const char *p = elem_str; + + /* Get the field name. */ + + if (!rec_parse_regexp (&p, + "^" REC_FNAME_RE, + &(elem->field_name))) + { + /* Parse error. */ + free (elem); + res = false; + break; + } + + /* Get the subname, if any, and modify the name + accordingly. */ + + if (*p == '.') + { + char *subname = NULL; + + p++; + if (!rec_parse_regexp (&p, + "^" REC_FNAME_RE, + &subname)) + { + /* Parse error. */ + free (elem->field_name); + free (elem); + res = false; + break; + } + + /* Concatenate the field name and the subname. */ + elem->field_name = rec_concat_strings (elem->field_name, "_", subname); + } + + /* Check that there are no extra stuff at the end of the + string. */ + + if (*p != '\0') + { + free (elem->field_name); + free (elem); + res = false; + break; + } + + /* Initialize other attributes of the fex entry. */ + + elem->function_name = NULL; + elem->function_data = NULL; + elem->rewrite_to = NULL; + elem->str = strdup (elem_str); + elem->min = -1; + elem->max = -1; + new->elems[new->num_elems++] = elem; + } + else + { + res = false; + break; + } + } + } + while ((elem_str = strsep (&fex_str, sep))); + + if (new->num_elems == 0) + { + /* No elements were recognized. */ + res = false; + } + + if (res) + { + new->str = strdup (str); + } + else + { + /* Destroy parsed elements. */ + for (i = 0; i < new->num_elems; i++) + { + free (new->elems[i]->rewrite_to); + free (new->elems[i]->field_name); + free (new->elems[i]->str); + free (new->elems[i]); + } + } + + free (fex_str_orig); + return res; +} + +static bool +rec_fex_parse_str_subscripts (rec_fex_t new, + const char *str) +{ + bool res; + char *elem_str; + char *fex_str, *fex_str_orig; + rec_fex_elem_t elem; + int i; + + res = true; + + fex_str = strdup (str); + if (!fex_str) + { + return false; + } + fex_str_orig = fex_str; + + elem_str = strsep (&fex_str, ","); + do + { + elem = malloc (sizeof (struct rec_fex_elem_s)); + if (!elem) + { + /* Out of memory. */ + res = false; + break; + } + + if (!rec_fex_parse_elem (elem, elem_str)) + { + /* Parse error. */ + for (i = 0; i < new->num_elems; i++) + { + free (new->elems[i]->field_name); + free (new->elems[i]->str); + free (new->elems[i]); + } + + free (elem); + res = false; + break; + } + + /* Add the elem to the FEX. */ + new->elems[new->num_elems++] = elem; + } + while ((elem_str = strsep (&fex_str, ","))); + + if (res) + { + new->str = strdup (str); + } + + free (fex_str_orig); + return res; +} + +static bool +rec_fex_parse_elem (rec_fex_elem_t elem, + const char *str) +{ + bool ret; + const char *p; + + ret = true; + p = str; + + /* 'Empty' part. */ + elem->field_name = NULL; + elem->function_name = NULL; + elem->function_data = NULL; + elem->str = NULL; + elem->rewrite_to = NULL; + elem->min = -1; + elem->max = -1; + + /* The 'str' field keeps a copy of the textual entry. */ + + elem->str = strdup (str); + + /* Each FEX element can be either a function call or a field name + with an optional subscript. */ + + if (rec_match (p, "^" REC_FEX_CALL)) + { + /* Get the function name and the field argument and store them + in the FEX element. */ + + if (!rec_parse_regexp (&p, + "^" REC_FEX_FUNCTION_NAME, + &(elem->function_name))) + { + /* Parse error. */ + free (elem->str); + return false; + } + + p++; /* Skip the ( */ + } + + /* Get the field name. */ + + if (!rec_parse_regexp (&p, + "^" REC_FNAME_RE, + &(elem->field_name))) + { + /* Parse error. */ + free (elem->str); + return false; + } + + /* Get the subname and modify the name accordingly, if it + exists. */ + + if (*p == '.') + { + char *subname = NULL; + + p++; + if (!rec_parse_regexp (&p, + "^" REC_FNAME_RE, + &subname)) + { + /* Parse error. */ + free (elem->str); + return false; + } + + /* Concatenate the field_name and the subname. */ + elem->field_name = rec_concat_strings (elem->field_name, "_", subname); + } + + /* Get the subscripts if they are present. */ + if (*p == '[') + { + p++; + /* First subscript in range. */ + if (!rec_parse_int (&p, &(elem->min))) + { + /* Parse error. */ + free (elem->str); + free (elem->field_name); + return false; + } + + if (*p == '-') + { + p++; + /* Second subscript in range. */ + if (!rec_parse_int (&p, &(elem->max))) + { + /* Parse error. */ + free (elem->str); + free (elem->field_name); + return false; + } + } + + if (*p != ']') + { + /* Parse error. */ + free (elem->str); + free (elem->field_name); + return false; + } + p++; /* Skip the ] */ + } + + if (elem->function_name) + { + p++; /* Skip the ) */ + } + + /* Get the rewrite rule if it is present. */ + if (*p == ':') + { + p++; + if (!rec_parse_regexp (&p, + "^" REC_FNAME_RE, + &(elem->rewrite_to))) + { + /* Parse error. */ + free (elem->str); + free (elem->field_name); + return false; + } + } + + if (*p != '\0') + { + free (elem->str); + free (elem->field_name); + free (elem->rewrite_to); + return false; + } + + return ret; +} + +/* End of rec-fex.c */ diff --git a/devspec.en_US/project/recutils/src/rec-field-name.c b/devspec.en_US/project/recutils/src/rec-field-name.c new file mode 100755 index 0000000..66479cd --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-field-name.c @@ -0,0 +1,120 @@ +/* -*- mode: C -*- + * + * File: rec-field-name.c + * Date: Fri Dec 25 17:27:05 2009 + * + * GNU recutils - Field names. + * + */ + +/* Copyright (C) 2009-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> +#include <regex.h> +#include <ctype.h> +#include <gettext.h> +#define _(str) dgettext (PACKAGE, str) + +#include <rec-utils.h> +#include <rec.h> + +/* The following global variable contains field names which are either + standard, such as the special field names, or often used in the + library. + + Note that the array is indexed using the rec_std_field_e enumerated + values defined in rec.h, so the order is important. */ + +static const char *fnames[] = + { + "%auto", + "%confidential", + "%key", + "%mandatory", + "%prohibit", + "%rec", + "%size", + "%sort", + "%type", + "%typedef", + "%unique", + "%constraint", + "%allowed" + }; + +const char * +rec_std_field_name (enum rec_std_field_e std_field) +{ + return *(fnames + std_field); +} + +bool +rec_field_name_p (const char *str) +{ + return rec_match (str, "^" REC_FNAME_RE "$"); +} + +char * +rec_field_name_normalise (const char *str) +{ + char *normalised_name; + int i; + + normalised_name = malloc (strlen (str) + 1); + if (normalised_name) + { + memcpy (normalised_name, str, strlen (str)); + normalised_name[strlen(str)] = '\0'; + + for (i = 0; i < strlen (normalised_name); i++) + { + if (!((isalnum (normalised_name[i])) + || (normalised_name[i] == '_') + || (normalised_name[i] == '-') + || (normalised_name[i] == '%'))) + { + normalised_name[i] = '_'; + } + } + } + + /* Check that the normalisation produced a proper field name. */ + + if (normalised_name) + { + if (!rec_field_name_p (normalised_name)) + { + free (normalised_name); + normalised_name = NULL; + } + } + + return normalised_name; +} + +bool +rec_field_name_equal_p (const char *name1, + const char *name2) +{ + /* TODO: 'foo' and 'foo:' denote the same field name. */ + return (strcmp (name1, name2) == 0); +} + +/* End of rec-field-name.c */ diff --git a/devspec.en_US/project/recutils/src/rec-field.c b/devspec.en_US/project/recutils/src/rec-field.c new file mode 100755 index 0000000..55c2e8e --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-field.c @@ -0,0 +1,332 @@ +/* -*- mode: C -*- + * + * File: rec-field.c + * Date: Fri Feb 27 20:40:26 2009 + * + * GNU recutils - Fields + * + */ + +/* Copyright (C) 2009-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> +#include <stdio.h> + +#include <rec.h> + +/* Field Data Structure. + * + * A field is an association between a label and a value. + */ + +struct rec_field_s +{ + /* The name and the value of a field are UTF-8 encoded strings. + Thus, we use NULL-terminated strings to store them. */ + + char *name; + char *value; + + /* Localization. */ + + char *source; + size_t location; + char *location_str; + size_t char_location; + char *char_location_str; + + /* Field marks. */ + + int mark; +}; + +/* Static functions defined below. */ + +static void rec_field_init (rec_field_t field); + +/* + * Public functions. + */ + +const char * +rec_field_name (rec_field_t field) +{ + return field->name; +} + +bool +rec_field_set_name (rec_field_t field, const char *name) +{ + free (field->name); + field->name = strdup (name); + return (field->name != NULL); +} + +const char * +rec_field_value (rec_field_t field) +{ + return field->value; +} + +bool +rec_field_set_value (rec_field_t field, + const char *value) +{ + free (field->value); + field->value = strdup (value); + return (field->value != NULL); +} + +rec_field_t +rec_field_new (const char *name, + const char *value) +{ + rec_field_t field; + + field = malloc (sizeof (struct rec_field_s)); + + if (field != NULL) + { + rec_field_init (field); + + if (!rec_field_set_name (field, name)) + { + /* Out of memory. */ + rec_field_destroy (field); + return NULL; + } + + if (!rec_field_set_value (field, value)) + { + /* Out of memory. */ + rec_field_destroy (field); + return NULL; + } + } + + return field; +} + +rec_field_t +rec_field_dup (rec_field_t field) +{ + rec_field_t new_field; + + new_field = rec_field_new (rec_field_name (field), + rec_field_value (field)); + if (new_field) + { + new_field->location = field->location; + new_field->char_location = field->char_location; + new_field->mark = field->mark; + + if (field->source) + { + new_field->source = strdup (field->source); + if (!new_field->source) + { + /* Out of memory. */ + rec_field_destroy (new_field); + return NULL; + } + } + + if (field->location_str) + { + new_field->location_str = strdup (field->location_str); + if (!new_field->location_str) + { + /* Out of memory. */ + rec_field_destroy (new_field); + return NULL; + } + } + + if (field->char_location_str) + { + new_field->char_location_str = strdup (field->char_location_str); + if (!new_field->char_location_str) + { + /* Out of memory. */ + rec_field_destroy (new_field); + return NULL; + } + } + } + + return new_field; +} + +bool +rec_field_equal_p (rec_field_t field1, + rec_field_t field2) +{ + return (strcmp (field1->name, field2->name) == 0); +} + +void +rec_field_destroy (rec_field_t field) +{ + if (field) + { + free (field->name); + free (field->value); + free (field->source); + free (field->location_str); + free (field->char_location_str); + free (field); + } +} + +rec_comment_t +rec_field_to_comment (rec_field_t field) +{ + rec_comment_t res; + char *comment_str; + + comment_str = rec_write_field_str (field, + REC_WRITER_NORMAL); + if (!comment_str) + { + return NULL; + } + + /* If the last character of the comment string is a newline, remove + it. */ + + if (comment_str[strlen (comment_str) - 1] == '\n') + { + comment_str[strlen (comment_str) - 1] = '\0'; + } + + res = rec_comment_new (comment_str); + free (comment_str); + + return res; +} + +const char * +rec_field_source (rec_field_t field) +{ + return field->source; +} + +bool +rec_field_set_source (rec_field_t field, + const char *source) +{ + free (field->source); + field->source = strdup (source); + return (field->source != NULL); +} + +size_t +rec_field_location (rec_field_t field) +{ + return field->location; +} + +bool +rec_field_set_location (rec_field_t field, + size_t location) +{ + field->location = location; + free (field->location_str); + return (asprintf (&(field->location_str), "%zu", field->location) + != -1); +} + +const char * +rec_field_location_str (rec_field_t field) +{ + char *res; + + if (field->location_str) + { + res = field->location_str; + } + else + { + res = ""; + } + + return res; +} + +size_t +rec_field_char_location (rec_field_t field) +{ + return field->char_location; +} + +bool +rec_field_set_char_location (rec_field_t field, + size_t location) +{ + field->char_location = location; + free (field->char_location_str); + return (asprintf (&(field->char_location_str), "%zu", field->char_location) + != -1); +} + +const char * +rec_field_char_location_str (rec_field_t field) +{ + char *res; + + if (field->char_location_str) + { + res = field->char_location_str; + } + else + { + res = ""; + } + + return res; +} + +void +rec_field_set_mark (rec_field_t field, int mark) +{ + field->mark = mark; +} + +int +rec_field_mark (rec_field_t field) +{ + return field->mark; +} + +/* + * Private functions. + */ + +static void +rec_field_init (rec_field_t field) +{ + /* Initialize the field structure so it can be safely passed to + rec_field_destroy even if its contents are not completely + initialized with real values. */ + + memset (field, 0 /* NULL */, sizeof (struct rec_field_s)); +} + +/* End of rec-field.c */ diff --git a/devspec.en_US/project/recutils/src/rec-int.c b/devspec.en_US/project/recutils/src/rec-int.c new file mode 100755 index 0000000..bd648b9 --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-int.c @@ -0,0 +1,1269 @@ +/* -*- mode: C -*- + * + * File: rec-int.c + * Date: Thu Jul 15 18:23:26 2010 + * + * GNU recutils - Data integrity. + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <regex.h> +#include <gettext.h> +#define _(str) dgettext (PACKAGE, str) +#include <tempname.h> + +#if defined REMOTE_DESCRIPTORS +# include <curl/curl.h> +#endif + +#include <rec.h> +#include <rec-utils.h> + +/* + * Forward references. + */ + +static int rec_int_check_descriptor (rec_rset_t rset, rec_buf_t errors); +static int rec_int_check_record_key (rec_rset_t rset, + rec_record_t orig_record, rec_record_t record, + rec_buf_t errors); +static int rec_int_check_record_types (rec_db_t db, + rec_rset_t rset, + rec_record_t record, + rec_buf_t errors); +static int rec_int_check_record_mandatory (rec_rset_t rset, rec_record_t record, + rec_buf_t errors); +static int rec_int_check_record_unique (rec_rset_t rset, rec_record_t record, + rec_buf_t errors); +static int rec_int_check_record_prohibit (rec_rset_t rset, rec_record_t record, + rec_buf_t errors); +static int rec_int_check_record_sex_constraints (rec_rset_t rset, rec_record_t record, + rec_buf_t errors); +static int rec_int_check_record_allowed (rec_rset_t rset, rec_record_t record, + rec_buf_t errors); + +#if defined REC_CRYPT_SUPPORT +static int rec_int_check_record_secrets (rec_rset_t rset, rec_record_t record, + rec_buf_t errors); +#endif + +static int rec_int_merge_remote (rec_rset_t rset, rec_buf_t errors); +static bool rec_int_rec_type_p (const char *str); + +/* The following macros are used by some functions in this file to + reduce verbosity. */ + +#define FNAME(id) rec_std_field_name ((id)) + +#define ADD_ERROR(buf,str,...) \ + do \ + { \ + char *tmp = NULL; \ + if (asprintf (&tmp, (str), __VA_ARGS__) != -1) \ + { \ + rec_buf_puts (tmp, (buf)); \ + free (tmp); \ + } \ + } \ + while (0) + +/* + * Public functions. + */ + +int +rec_int_check_db (rec_db_t db, + bool check_descriptors_p, + bool remote_descriptors_p, + rec_buf_t errors) +{ + int ret; + size_t db_size; + size_t n_rset; + rec_rset_t rset; + + ret = 0; + + db_size = rec_db_size (db); + for (n_rset = 0; n_rset < db_size; n_rset++) + { + rset = rec_db_get_rset (db, n_rset); + ret = ret + rec_int_check_rset (db, + rset, + check_descriptors_p, + remote_descriptors_p, + errors); + } + + return ret; +} + +int +rec_int_check_rset (rec_db_t db, + rec_rset_t rset, + bool check_descriptor_p, + bool remote_descriptor_p, + rec_buf_t errors) +{ + int res; + rec_mset_iterator_t iter; + rec_record_t record; + rec_record_t descriptor; + size_t num_records, min_records, max_records; + + res = 0; + + if (remote_descriptor_p + && (descriptor = rec_rset_descriptor (rset))) + { + /* Make a backup of the record descriptor to restore it + later. */ + descriptor = rec_record_dup (descriptor); + + /* Fetch the remote descriptor, if any, and merge it with the + local descriptor. If there is any error, stop and report + it. */ + res = rec_int_merge_remote (rset, errors); + if (res > 0) + { + return res; + } + } + + if (check_descriptor_p) + { + res += rec_int_check_descriptor (rset, errors); + } + + if (res > 0) + { + /* Stop here, since a lot of errors in the records will be + generated due to errors in the record descriptor. */ + return res; + } + + /* Verify rset size restrictions. */ + num_records = rec_rset_num_records (rset); + min_records = rec_rset_min_records (rset); + max_records = rec_rset_max_records (rset); + + if (min_records == max_records) + { + if (num_records != min_records) + { + ADD_ERROR (errors, + _("%s: error: the number of records of type %s should be %zd.\n"), + rec_rset_source (rset), rec_rset_type (rset), min_records); + res++; + } + } + else + { + if (num_records > rec_rset_max_records (rset)) + { + ADD_ERROR (errors, + _("%s: error: too many records of type %s. Maximum allowed are %zd.\n"), + rec_rset_source (rset), rec_rset_type (rset), rec_rset_max_records (rset)); + res++; + } + if (num_records < rec_rset_min_records (rset)) + { + ADD_ERROR (errors, + _("%s: error: too few records of type %s. Minimum allowed are %zd.\n"), + rec_rset_source (rset), rec_rset_type (rset), rec_rset_min_records (rset)); + res++; + } + } + + iter = rec_mset_iterator (rec_rset_mset (rset)); + while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **) &record, NULL)) + { + res += rec_int_check_record (db, + rset, + record, record, + errors); + } + + rec_mset_iterator_free (&iter); + + if (remote_descriptor_p) + { + /* Restore the original descriptor in the record set. */ + rec_rset_set_descriptor (rset, descriptor); + } + + return res; +} + +int +rec_int_check_record (rec_db_t db, + rec_rset_t rset, + rec_record_t orig_record, + rec_record_t record, + rec_buf_t errors) +{ + int res; + + res = + rec_int_check_record_key (rset, orig_record, record, errors) + + rec_int_check_record_types (db, rset, record, errors) + + rec_int_check_record_mandatory (rset, record, errors) + + rec_int_check_record_unique (rset, record, errors) +#if defined REC_CRYPT_SUPPORT + + rec_int_check_record_secrets (rset, record, errors) +#endif + + rec_int_check_record_prohibit (rset, record, errors) + + rec_int_check_record_sex_constraints (rset, record, errors) + + rec_int_check_record_allowed (rset, record, errors); + + return res; +} + +bool +rec_int_check_field_type (rec_db_t db, + rec_rset_t rset, + rec_field_t field, + rec_buf_t errors) +{ + bool res = true; + rec_type_t type; + char *errors_str; + + res = true; + + + /* Get the proper type to check 'field' with, checking with the type + from the type registry of 'rset', if any. */ + + type = rec_rset_get_field_type (rset, rec_field_name (field)); + + /* Check the field with the type. This is done by simply invoking + rec_type_check on the field value. An exception to this is the + 'rec' type. The 'rec' type is used to implement foreign keys, + and its effect on the type integrity system is that the value of + the field must be considered to be of whatever type the primary + key of the referred record set is. */ + + if (type) + { + if (rec_type_kind (type) == REC_TYPE_REC) + { + /* Get the name of the referred record set. Check the type + if and only if: + + - The referred rset exists in DB and + - The referred rset has a primary key. + - The primary key of the referred rset has a type. + */ + + const char *rset_type = rec_type_rec (type); + rec_rset_t rset = rec_db_get_rset_by_type (db, rset_type); + + if (rset) + { + const char *key = rec_rset_key (rset); + rec_type_t key_type = rec_rset_get_field_type (rset, key); + + if (key_type) + { + if (!rec_type_check (key_type, rec_field_value (field), &errors_str)) + { + if (errors) + { + ADD_ERROR (errors, + "%s:%s: error: %s\n", + rec_field_source (field), rec_field_location_str (field), + errors_str); + } + free (errors_str); + res = false; + } + } + } + } + else + { + if (!rec_type_check (type, rec_field_value (field), &errors_str)) + { + if (errors) + { + ADD_ERROR (errors, + "%s:%s: error: %s\n", + rec_field_source (field), rec_field_location_str (field), + errors_str); + } + free (errors_str); + res = false; + } + } + } + + return res; +} + +/* + * Private functions + */ + +static rec_fex_t +rec_int_collect_field_list (rec_record_t record, + const char *fname) +{ + size_t i, j = 0; + size_t num_fields = rec_record_get_num_fields_by_name (record, fname); + rec_fex_t res = rec_fex_new (NULL, REC_FEX_SIMPLE); + + if (!res) + return NULL; /* Out of memory. */ + + for (i = 0; i < num_fields; i++) + { + rec_field_t field = rec_record_get_field_by_name (record, fname, i); + rec_fex_t fex = rec_fex_new (rec_field_value (field), REC_FEX_SIMPLE); + if (!fex) + /* Invalid value in the field. Ignore it. */ + continue; + + for (j = 0; j < rec_fex_size (fex); j++) + { + rec_fex_elem_t elem = rec_fex_get (fex, j); + char *field_name = strdup (rec_fex_elem_field_name (elem)); + + if (!field_name + || !rec_fex_append (res, + field_name, + rec_fex_elem_min (elem), + rec_fex_elem_max (elem))) + /* Not enough memory: panic and retreat! */ + return NULL; + } + rec_fex_destroy (fex); + } + + return res; +} + +static int +rec_int_check_record_types (rec_db_t db, + rec_rset_t rset, + rec_record_t record, + rec_buf_t errors) +{ + int res; + rec_field_t field; + rec_mset_iterator_t iter; + + res = 0; + + iter = rec_mset_iterator (rec_record_mset (record)); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) + { + /* Check for the type. */ + if (!rec_int_check_field_type (db, rset, field, errors)) + { + res++; + } + } + + rec_mset_iterator_free (&iter); + + return res; +} + +static int +rec_int_check_record_mandatory (rec_rset_t rset, + rec_record_t record, + rec_buf_t errors) +{ + rec_fex_t fex_mandatory = NULL; + int res = 0; + size_t i; + + rec_record_t descriptor = rec_rset_descriptor (rset); + if (descriptor) + { + fex_mandatory = rec_int_collect_field_list (descriptor, FNAME(REC_FIELD_MANDATORY)); + if (!fex_mandatory) + { + ADD_ERROR (errors, _("out of memory\n"), ""); + res = 1; + goto cleanup; + } + + /* Make sure that all fields in the mandatory fields list are in + this record. */ + + for (i = 0; i < rec_fex_size (fex_mandatory); i++) + { + const char *fname = rec_fex_elem_field_name (rec_fex_get (fex_mandatory, i)); + if (rec_record_get_num_fields_by_name (record, fname) + == 0) + { + ADD_ERROR (errors, + _("%s:%s: error: mandatory field '%s' not found in record\n"), + rec_record_source (record), + rec_record_location_str (record), + fname); + res++; + } + } + } + + cleanup: + + rec_fex_destroy (fex_mandatory); + return res; +} + +static int +rec_int_check_record_allowed (rec_rset_t rset, + rec_record_t record, + rec_buf_t errors) +{ + /* If %allowed is specified then fields with names not in the union + of %allowed + %mandatory + %key are not allowed in records, and + thus that situation is an integrity error. */ + + rec_fex_t fex_allowed = NULL; + rec_fex_t fex_mandatory = NULL; + rec_fex_t fex_key = NULL; + + int res = 0; + rec_record_t descriptor = rec_rset_descriptor (rset); + + if (descriptor) + { + fex_allowed = rec_int_collect_field_list (descriptor, FNAME(REC_FIELD_ALLOWED)); + fex_mandatory = rec_int_collect_field_list (descriptor, FNAME(REC_FIELD_MANDATORY)); + fex_key = rec_int_collect_field_list (descriptor, FNAME(REC_FIELD_KEY)); + + if (!fex_allowed || !fex_mandatory || !fex_key) + { + ADD_ERROR (errors, _("out of memory\n"), ""); + res = 1; + goto cleanup; + } + + + if (rec_fex_size (fex_allowed) == 0) + /* Nothing to do. */ + goto cleanup; + + /* Make sure that all the fields in RECORD are in either + %allowed, %mandatory or %key. */ + + rec_field_t field = NULL; + rec_mset_iterator_t iter = rec_mset_iterator (rec_record_mset (record)); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) + { + const char *field_name = rec_field_name (field); + if (!(rec_fex_member_p (fex_allowed, field_name, -1, -1) + || rec_fex_member_p (fex_mandatory, field_name, -1, -1) + || rec_fex_member_p (fex_key, field_name, -1, -1))) + { + /* This field is not allowed. */ + ADD_ERROR (errors, + _("%s:%s: error: field '%s' not allowed in this record set\n"), + rec_record_source (record), + rec_record_location_str (record), + field_name); + res++; + } + } + rec_mset_iterator_free (&iter); + } + + cleanup: + + rec_fex_destroy (fex_allowed); + rec_fex_destroy (fex_mandatory); + rec_fex_destroy (fex_key); + return res; +} + +static int +rec_int_check_record_unique (rec_rset_t rset, + rec_record_t record, + rec_buf_t errors) +{ + rec_fex_t fex_unique = NULL; + int res = 0; + size_t i; + + rec_record_t descriptor = rec_rset_descriptor (rset); + if (descriptor) + { + fex_unique = rec_int_collect_field_list (descriptor, FNAME(REC_FIELD_UNIQUE)); + if (!fex_unique) + { + ADD_ERROR (errors, _("out of memory\n"), ""); + res = 1; + goto cleanup; + } + + /* Make sure that all fields in the unique fields list are + unique in this record. */ + + for (i = 0; i < rec_fex_size (fex_unique); i++) + { + const char *fname = rec_fex_elem_field_name (rec_fex_get (fex_unique, i)); + if (rec_record_get_num_fields_by_name (record, fname) > 1) + { + ADD_ERROR (errors, + _("%s:%s: error: field '%s' should be unique in this record\n"), + rec_record_source (record), + rec_record_location_str (record), + fname); + res++; + } + } + } + + cleanup: + + rec_fex_destroy (fex_unique); + return res; +} + +static int +rec_int_check_record_prohibit (rec_rset_t rset, + rec_record_t record, + rec_buf_t errors) +{ + rec_fex_t fex_prohibit = NULL; + int res = 0; + size_t i; + + rec_record_t descriptor = rec_rset_descriptor (rset); + if (descriptor) + { + fex_prohibit = rec_int_collect_field_list (descriptor, FNAME(REC_FIELD_PROHIBIT)); + if (!fex_prohibit) + { + ADD_ERROR (errors, _("out of memory\n"), ""); + res = 1; + goto cleanup; + } + + /* Make sure that no field in the prohibit fields list is + present in the record. */ + + for (i = 0; i < rec_fex_size (fex_prohibit); i++) + { + const char *fname = rec_fex_elem_field_name (rec_fex_get (fex_prohibit, i)); + if (rec_record_get_num_fields_by_name (record, fname) > 0) + { + ADD_ERROR (errors, + _("%s:%s: error: prohibited field '%s' found in record\n"), + rec_record_source (record), + rec_record_location_str (record), + fname); + res++; + } + } + } + + cleanup: + + rec_fex_destroy (fex_prohibit); + return res; +} + +static int +rec_int_check_record_sex_constraints (rec_rset_t rset, + rec_record_t record, + rec_buf_t errors) +{ + int res = 0; + size_t i = 0; + size_t num_constraints = rec_rset_num_sex_constraints (rset); + + for (i = 0; i < num_constraints; i++) + { + bool status = false; + rec_sex_t sex = rec_rset_sex_constraint (rset, i); + + if (!rec_sex_eval (sex, record, &status)) + { + ADD_ERROR (errors, + _("%s:%s: error: %%constraint[%d] violated in record\n"), + rec_record_source (record), + rec_record_location_str (record), + i); + res++; + } + } + + return res; +} + +#if defined REC_CRYPT_SUPPORT + +static int +rec_int_check_record_secrets (rec_rset_t rset, + rec_record_t record, + rec_buf_t errors) +{ + int res; + rec_field_t field; + rec_mset_iterator_t iter; + + res = 0; + + iter = rec_mset_iterator (rec_record_mset (record)); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void**) &field, NULL)) + { + /* If the field is confidential it must be encrypted. Encrypted + field values can be recognized by the "encrypted-" + prefix. */ +#define REC_ENCRYPTED_PREFIX "encrypted-" + if (rec_rset_field_confidential_p (rset, rec_field_name (field)) + && (strncmp (rec_field_value (field), + REC_ENCRYPTED_PREFIX, + strlen (REC_ENCRYPTED_PREFIX)) != 0)) + { + ADD_ERROR (errors, + _("%s:%s: error: confidential field is not encrypted\n"), + rec_record_source (record), + rec_record_location_str (record)); + res++; + } + } + + rec_mset_iterator_free (&iter); + + return res; +} + +#endif /* REC_CRYPT_SUPPORT */ + +static int +rec_int_check_record_key (rec_rset_t rset, + rec_record_t orig_record, + rec_record_t record, + rec_buf_t errors) +{ + int res; + rec_record_t descriptor; + rec_record_t other_record; + rec_mset_iterator_t iter; + char *key_field_name; + rec_field_t field; + rec_field_t key; + rec_field_t other_key; + bool duplicated_key; + size_t i; + size_t num_fields; + + res = 0; + + descriptor = rec_rset_descriptor (rset); + if (descriptor) + { + for (i = 0; i < rec_record_get_num_fields_by_name (descriptor, + FNAME(REC_FIELD_KEY)); + i++) + { + field = rec_record_get_field_by_name (descriptor, FNAME(REC_FIELD_KEY), i); + + /* Parse the field name from the value of %key: */ + key_field_name = rec_parse_field_name_str (rec_field_value (field)); + if (key_field_name) + { + num_fields = rec_record_get_num_fields_by_name (record, key_field_name); + + if (num_fields == 0) + { + ADD_ERROR (errors, + _("%s:%s: error: key field '%s' not found in record\n"), + rec_record_source (record), + rec_record_location_str (record), + rec_field_value (field)); + res++; + } + else if (num_fields > 1) + { + ADD_ERROR (errors, + _("%s:%s: error: multiple key fields '%s' in record\n"), + rec_record_source (record), + rec_record_location_str (record), + rec_field_value (field)); + res++; + } + else /* num_fields == 1 */ + { + /* Check that the value specified as the key is + unique in the whole record set. */ + key = rec_record_get_field_by_name (record, + key_field_name, + 0); + duplicated_key = false; + + iter = rec_mset_iterator (rec_rset_mset (rset)); + while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void**) &other_record, NULL)) + { + if (other_record != orig_record) + { + /* XXX: Only the first key field is considered. */ + other_key = rec_record_get_field_by_name (other_record, + key_field_name, + 0); + if (other_key) + { + if (strcmp (rec_field_value (other_key), + rec_field_value (key)) == 0) + { + /* Found a key field with the same + value in other record. */ + duplicated_key = true; + break; + } + } + } + } + + rec_mset_iterator_free (&iter); + + if (duplicated_key) + { + ADD_ERROR (errors, + _("%s:%s: error: duplicated key value in field '%s' in record\n"), + rec_record_source (orig_record), + rec_record_location_str (orig_record), + rec_field_name (key)); + res++; + break; + } + } + + free (key_field_name); + } + } + } + + return res; +} + +static int +rec_int_check_descriptor (rec_rset_t rset, + rec_buf_t errors) +{ + int res; + rec_record_t descriptor; + rec_mset_iterator_t iter; + rec_field_t field; + const char *field_name; + const char *field_value; + rec_fex_t fex; + const char *auto_field_name; + size_t i; + rec_type_t type; + char *type_name = NULL; + const char *p, *q = NULL; + + res = 0; + + descriptor = rec_rset_descriptor (rset); + if (descriptor) + { + /* Check the type of the record set: + + 1. There should be one (and only one) %rec: field in the + record. + 2. The value of the %rec: field shall be well-formed. + */ + if (rec_record_get_num_fields_by_name (descriptor, FNAME(REC_FIELD_REC)) == 0) + { + ADD_ERROR (errors, + _("%s:%s: error: missing %%rec field in record descriptor\n"), + rec_record_source (descriptor), + rec_record_location_str (descriptor)); + res++; + } + else if (rec_record_get_num_fields_by_name (descriptor, FNAME(REC_FIELD_REC)) > 1) + { + ADD_ERROR (errors, + _("%s:%s: error: too many %%rec fields in record descriptor\n"), + rec_record_source (descriptor), + rec_record_location_str (descriptor)); + res++; + } + + field = rec_record_get_field_by_name (descriptor, FNAME(REC_FIELD_REC), 0); + if (!rec_int_rec_type_p (rec_field_value (field))) + { + ADD_ERROR (errors, + _("%s:%s: error: invalid record type %s\n"), + rec_field_source (field), + rec_field_location_str (field), + rec_field_value (field)); + res++; + } + + /* Only one 'key:' entry is allowed, if any. */ + if (rec_record_get_num_fields_by_name (descriptor, FNAME(REC_FIELD_KEY)) > 1) + { + ADD_ERROR (errors, + _("%s:%s: error: only one %%key field is allowed in a record descriptor\n"), + rec_record_source (descriptor), + rec_record_location_str (descriptor)); + res++; + } + + /* Only one 'size:' entry is allowed, if any. */ + if (rec_record_get_num_fields_by_name (descriptor, FNAME(REC_FIELD_SIZE)) > 1) + { + ADD_ERROR (errors, + _("%s:%s: error: only one %%size field is allowed in a record descriptor\n"), + rec_record_source (descriptor), + rec_record_location_str (descriptor)); + res++; + } + + /* Only one 'sort:' entry is allowed, if any. */ + if (rec_record_get_num_fields_by_name (descriptor, FNAME(REC_FIELD_SORT)) > 1) + { + ADD_ERROR (errors, + _("%s:%s: error: only one %%sort field is allowed in a record descriptor\n"), + rec_record_source (descriptor), + rec_record_location_str (descriptor)); + res++; + } + + /* Iterate on fields. */ + + iter = rec_mset_iterator (rec_record_mset (descriptor)); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void**) &field, NULL)) + { + field_name = rec_field_name (field); + field_value = rec_field_value (field); + + if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_TYPE))) + { + /* Check for the list of fields. */ + p = field_value; + rec_skip_blanks (&p); + if (!rec_parse_regexp (&p, "^" REC_FNAME_RE "(," REC_FNAME_RE ")*", + NULL)) + { + ADD_ERROR (errors, + _("%s:%s: error: expected a comma-separated list of fields \ +before the type specification\n"), + rec_field_source (field), + rec_field_location_str (field)); + res++; + } + + /* Check the type descriptor. Note that it can be + either a type specification or a type name. */ + rec_skip_blanks (&p); + if (!rec_type_descr_p (p)) + { + q = p; + if (rec_parse_regexp (&q, "^" REC_TYPE_NAME_RE "[ \t\n]*$", + NULL)) + { + /* The named type shall exist in the record set + type registry. + + XXX: but this is probably a warning rather + than an error. */ + + rec_parse_regexp (&p, "^" REC_TYPE_NAME_RE, &type_name); + if (!rec_type_reg_get (rec_rset_get_type_reg (rset), type_name)) + { + ADD_ERROR (errors, + _("%s:%s: error: the referred type %s \ +does not exist\n"), + rec_field_source (field), + rec_field_location_str (field), + type_name); + res++; + } + } + else + { + /* XXX: make rec_type_descr_p to report more details. */ + ADD_ERROR (errors, + _("%s:%s: error: invalid type specification\n"), + rec_field_source (field), + rec_field_location_str (field)); + res++; + } + } + } + else if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_TYPEDEF))) + { + /* Check for the type name. */ + p = field_value; + rec_skip_blanks (&p); + if (!rec_parse_regexp (&p, "^" REC_TYPE_NAME_RE, NULL)) + { + ADD_ERROR (errors, + _("%s:%s: error: expected a type name before the type \ +specification\n"), + rec_field_source (field), + rec_field_location_str (field)); + res++; + } + + /* Check the type descriptor. Note that it can be + either a type specification or a type name. */ + rec_skip_blanks (&p); + if (!rec_type_descr_p (p)) + { + q = p; + if (rec_parse_regexp (&q, "^" REC_TYPE_NAME_RE "[ \t\n]*$", + NULL)) + { + /* The named type shall exist in the record set + type registry. + + XXX: but this is probably a warning rather + than an error. */ + + rec_parse_regexp (&p, "^" REC_TYPE_NAME_RE, &type_name); + if (!rec_type_reg_get (rec_rset_get_type_reg (rset), type_name)) + { + ADD_ERROR (errors, + _("%s:%s: error: the referred type %s \ +does not exist\n"), + rec_field_source (field), + rec_field_location_str (field), + type_name); + res++; + } + } + else + { + /* XXX: make rec_type_descr_p to report more details. */ + ADD_ERROR (errors, + _("%s:%s: error: invalid typedef specification\n"), + rec_field_source (field), + rec_field_location_str (field)); + res++; + } + } + } + else if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_CONSTRAINT))) + { + /* Check that the value of this field is a valid + selection expression. */ + + rec_sex_t sex = rec_sex_new (false); + if (sex) + { + if (rec_sex_compile (sex, field_value)) + { + rec_sex_destroy (sex); + } + else + { + ADD_ERROR (errors, + _("%s:%s: error: value for %s[%zd] is not a valid selection expression\n"), + rec_record_source (descriptor), + rec_record_location_str (descriptor), + rec_field_name (field), + rec_record_get_field_index_by_name (descriptor, field)); + res++; + } + } + else + { + /* Out of memory. */ + res++; + } + } + else if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_MANDATORY)) + || rec_field_name_equal_p (field_name, FNAME(REC_FIELD_UNIQUE)) + || rec_field_name_equal_p (field_name, FNAME(REC_FIELD_PROHIBIT)) + || rec_field_name_equal_p (field_name, FNAME(REC_FIELD_AUTO)) + || rec_field_name_equal_p (field_name, FNAME(REC_FIELD_SORT)) + || rec_field_name_equal_p (field_name, FNAME(REC_FIELD_ALLOWED))) + { + /* Check that the value of this field is a parseable + list of field names. */ + fex = rec_fex_new (field_value, REC_FEX_SIMPLE); + if (fex) + { + rec_fex_destroy (fex); + } + else + { + ADD_ERROR (errors, + _("%s:%s: error: value for %s[%zd] is not a list of field names\n"), + rec_record_source (descriptor), + rec_record_location_str (descriptor), + rec_field_name (field), + rec_record_get_field_index_by_name (descriptor, field)); + res++; + } + } + else if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_SIZE))) + { + if (!rec_match (field_value, REC_INT_SIZE_RE)) + { + ADD_ERROR (errors, + _("%s:%s: error: value for %s should be a number optionally preceded by >, <, >= or <=.\n"), + rec_field_source (field), + rec_field_location_str (field), + field_name); + res++; + } + } +#if defined REC_CRYPT_SUPPORT + else if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_CONFIDENTIAL))) + { + if (!rec_match (field_value, + "^" + "[ \n\t]*" REC_FNAME_RE "([ \n\t]+" REC_FNAME_RE ")*" + "[ \n\t]*$")) + { + ADD_ERROR (errors, + _("%s:%s: error: value for %s should be a list of field names.\n"), + rec_field_source (field), + rec_field_location_str (field), + field_name); + res++; + } + } +#endif /* REC_CRYPT_SUPPORT */ + + if ((rec_field_name_equal_p (field_name, FNAME(REC_FIELD_AUTO))) + && (fex = rec_fex_new (field_value, REC_FEX_SIMPLE))) + { + /* Check that the auto incremented fields have not been + declared with a type other than 'int'. */ + for (i = 0; i < rec_fex_size (fex); i++) + { + auto_field_name = rec_fex_elem_field_name (rec_fex_get (fex, i)); + type = rec_rset_get_field_type (rset, auto_field_name); + if ((!type) || + ! ((rec_type_kind (type) == REC_TYPE_INT) + || (rec_type_kind (type) == REC_TYPE_RANGE) +#if defined UUID_TYPE + || (rec_type_kind (type) == REC_TYPE_UUID) +#endif + || (rec_type_kind (type) == REC_TYPE_DATE))) + { + ADD_ERROR (errors, +#if defined UUID_TYPE + _("%s:%s: error: auto-incremented field %s should be of type int, range, uuid or date\n"), +#else + _("%s:%s: error: auto-incremented field %s should be of type int, range or date\n"), +#endif + rec_record_source (descriptor), + rec_record_location_str (descriptor), + auto_field_name); + res++; + } + } + } + } + + rec_mset_iterator_free (&iter); + } + + return res; +} + +int +rec_int_merge_remote (rec_rset_t rset, + rec_buf_t errors) +{ + int res; + rec_parser_t parser; + rec_record_t descriptor; + rec_db_t remote_db; + rec_rset_t remote_rset; + rec_field_t remote_field; + rec_mset_iterator_t iter; + rec_record_t remote_descriptor; + rec_field_t rec_field; + char *rec_type; + char *rec_url = NULL; + char *rec_file = NULL; + char *rec_source = NULL; + FILE *external_file; + char tmpfile_name[14]; + + res = 0; + + tmpfile_name[0] = '\0'; + + /* If a remote descriptor is defined in the record descriptor of + RSET, fetch it and merge it with the local descriptor. */ + + descriptor = rec_rset_descriptor (rset); + if (descriptor) + { + /* Check if there is an URL in the %rec: field. */ + rec_field = rec_record_get_field_by_name (descriptor, FNAME(REC_FIELD_REC), 0); + + if (!rec_int_rec_type_p (rec_field_value (rec_field))) + { + return 0; + } + + rec_type = rec_extract_type (rec_field_value (rec_field)); + rec_file = rec_extract_file (rec_field_value (rec_field)); + rec_url = rec_extract_url (rec_field_value (rec_field)); + + if (rec_file || rec_url) + { + if (rec_url) + { +#if defined REMOTE_DESCRIPTORS + CURL *curl; + int tmpfile_des; + + /* Fetch the remote descriptor. */ + curl = curl_easy_init (); + + /* Create a temporary file. */ + memcpy (tmpfile_name, "recint-XXXXXX", 13); + tmpfile_name[13] = '\0'; + tmpfile_des = gen_tempname (tmpfile_name, 0, 0, GT_FILE); + external_file = fdopen (tmpfile_des, "r+"); + + /* Fetch the remote file. */ + curl_easy_setopt (curl, CURLOPT_URL, rec_url); + curl_easy_setopt (curl, CURLOPT_WRITEDATA, external_file); + curl_easy_setopt (curl, CURLOPT_FAILONERROR, 1); + if (curl_easy_perform (curl) != 0) + { + ADD_ERROR (errors, + _("%s:%s: error: could not fetch remote descriptor from url %s.\n"), + rec_field_source (rec_field), rec_field_location_str (rec_field), + rec_url); + res++; + goto exit; + } + curl_easy_cleanup (curl); + rec_source = rec_url; +#else + goto exit; +#endif /* REMOTE_DESCRIPTORS */ + } + else + { + /* Try to open the file. */ + external_file = fopen (rec_file, "r"); + if (!external_file) + { + ADD_ERROR (errors, + _("%s:%s: error: could not read external descriptor from file %s.\n"), + rec_field_source (rec_field), rec_field_location_str (rec_field), + rec_file); + res++; + goto exit; + } + rec_source = rec_file; + } + + /* Parse the contents of the external file. */ + fseek (external_file, 0, SEEK_SET); + parser = rec_parser_new (external_file, rec_source); + if (!rec_parse_db (parser, &remote_db)) + { + ADD_ERROR (errors, + _("%s:%s: error: %s does not contain valid rec data.\n"), + rec_field_source (rec_field), rec_field_location_str (rec_field), + rec_source); + res++; + goto exit; + } + rec_parser_destroy (parser); + + /* Get the proper external descriptor and merge it with + the local one. */ + remote_rset = rec_db_get_rset_by_type (remote_db, rec_type); + if (!remote_rset) + { + ADD_ERROR (errors, + _("%s:%s: error: %s does not contain information for type %s.\n"), + rec_field_source (rec_field), rec_field_location_str (rec_field), + rec_source, rec_type); + res++; + goto exit; + } + remote_descriptor = rec_rset_descriptor (remote_rset); + if (!remote_descriptor) + { + /* Do nothing. */ + goto exit; + } + + iter = rec_mset_iterator (rec_record_mset (remote_descriptor)); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void**) &remote_field, NULL)) + { + /* Merge the descriptors, but take care to not add a new + %rec: field. */ + + if (!rec_field_name_equal_p (rec_field_name (remote_field), FNAME(REC_FIELD_REC))) + { + rec_mset_append (rec_record_mset (descriptor), MSET_FIELD, (void *) rec_field_dup (remote_field), MSET_ANY); + } + } + + rec_mset_iterator_free (&iter); + + /* Update the record descriptor (triggering the creation + of a new type registry). */ + rec_rset_set_descriptor (rset, rec_record_dup (descriptor)); + + rec_db_destroy (remote_db); + fclose (external_file); + } + } + + exit: + + if (rec_url && (tmpfile_name[0] != '\0')) + { + remove (tmpfile_name); + } + + free (rec_url); + free (rec_file); + + return res; +} + +static bool +rec_int_rec_type_p (const char *str) +{ + return rec_match (str, + "^[ \t]*" + REC_RECORD_TYPE_RE + "[ \n\t]*" + "(" + "(" REC_URL_REGEXP ")" + "|" + "(" REC_FILE_REGEXP ")" + "[ \t]*)?" + "$"); +} + +/* End of rec-int.c */ diff --git a/devspec.en_US/project/recutils/src/rec-mset.c b/devspec.en_US/project/recutils/src/rec-mset.c new file mode 100755 index 0000000..b30286b --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-mset.c @@ -0,0 +1,912 @@ +/* -*- mode: C -*- + * + * File: rec-mset.c + * Date: Thu Apr 1 17:07:00 2010 + * + * GNU recutils - Ordered Heterogeneous Set + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> +#include <stdio.h> + +#include <rec.h> + +#include <gl_array_list.h> +#include <gl_list.h> + +/* + * Data types. + */ + +#define MAX_NTYPES 4 + +struct rec_mset_elem_s +{ + rec_mset_type_t type; + void *data; + + gl_list_node_t list_node; + + /* Containing multi-set. */ + rec_mset_t mset; +}; + +struct rec_mset_s +{ + int ntypes; + + /* Properties of the element types. */ + char *name[MAX_NTYPES]; + rec_mset_disp_fn_t disp_fn[MAX_NTYPES]; + rec_mset_equal_fn_t equal_fn[MAX_NTYPES]; + rec_mset_dup_fn_t dup_fn[MAX_NTYPES]; + rec_mset_compare_fn_t compare_fn[MAX_NTYPES]; + + /* Statistics. */ + size_t count[MAX_NTYPES]; + + gl_list_t elem_list; +}; + +/* + * Forward declarations of static functions. + */ + +static void rec_mset_init (rec_mset_t mset); + +static bool rec_mset_elem_equal_fn (const void *e1, + const void *e2); +static void rec_mset_elem_dispose_fn (const void *e); +static int rec_mset_elem_compare_fn (const void *e1, const void *e2); + +static rec_mset_list_iter_t rec_mset_iter_gl2mset (gl_list_iterator_t list_iter); +static gl_list_iterator_t rec_mset_iter_mset2gl (rec_mset_list_iter_t mset_iter); + +/* Create a new element to be stored in a given mset, of the givent + type, and return it. NULL is returned if there is no enough memory + to perform the operation. */ + +static rec_mset_elem_t rec_mset_elem_new (rec_mset_t mset, + rec_mset_type_t type, + void *data); + +/* Destroy the resources used by a mset element, freeing any used + memory. The element reference becomes invalid after executing this + function. */ + +static void rec_mset_elem_destroy (rec_mset_elem_t elem); + +/* + * Public functions. + */ + +rec_mset_t +rec_mset_new (void) +{ + rec_mset_t new; + int i; + + new = malloc (sizeof (struct rec_mset_s)); + if (new) + { + rec_mset_init (new); + + new->ntypes = 1; + + for (i = 0; i < MAX_NTYPES; i++) + { + new->count[i] = 0; + new->name[i] = NULL; + new->equal_fn[i] = NULL; + new->disp_fn[i] = NULL; + new->dup_fn[i] = NULL; + new->compare_fn[i] = NULL; + } + + new->elem_list = gl_list_nx_create_empty (GL_ARRAY_LIST, + rec_mset_elem_equal_fn, + NULL, + rec_mset_elem_dispose_fn, + true); + + if (new->elem_list == NULL) + { + /* Out of memory. */ + rec_mset_destroy (new); + new = NULL; + } + } + + return new; +} + +void +rec_mset_destroy (rec_mset_t mset) +{ + if (mset) + { + int i; + + for (i = 0; i < mset->ntypes; i++) + free(mset->name[i]); + gl_list_free (mset->elem_list); + free (mset); + } +} + +rec_mset_t +rec_mset_dup (rec_mset_t mset) +{ + rec_mset_t new; + rec_mset_elem_t elem; + gl_list_iterator_t iter; + int i; + + new = rec_mset_new (); + + if (new) + { + /* Register the types. */ + new->ntypes = mset->ntypes; + for (i = 0; i < new->ntypes; i++) + { + new->count[i] = 0; + if (mset->name[i]) + { + new->name[i] = strdup (mset->name[i]); + if (!new->name[i]) + { + /* Out of memory. */ + rec_mset_destroy (new); + return NULL; + } + } + new->disp_fn[i] = mset->disp_fn[i]; + new->equal_fn[i] = mset->equal_fn[i]; + new->dup_fn[i] = mset->dup_fn[i]; + new->compare_fn[i] = mset->compare_fn[i]; + } + + /* Duplicate the elements. */ + + iter = gl_list_iterator (mset->elem_list); + while (gl_list_iterator_next (&iter, (const void **) &elem, NULL)) + { + void *data = NULL; + + /* Set the data. */ + if (new->dup_fn[elem->type]) + { + data = (new->dup_fn[elem->type]) (elem->data); + if (!data) + { + /* Out of memory. */ + rec_mset_destroy (new); + return NULL; + } + } + else + { + data = elem->data; + } + + /* Append the new data into a new element. */ + + rec_mset_append (new, elem->type, data, MSET_ANY); + } + + gl_list_iterator_free (&iter); + } + + return new; +} + +rec_mset_t +rec_mset_sort (rec_mset_t mset) +{ + rec_mset_elem_t elem; + gl_list_iterator_t iter; + gl_list_t list; + + /* Save a reference to the old gnulib list and create a new, empty + one. */ + + list = mset->elem_list; + mset->elem_list = gl_list_nx_create_empty (GL_ARRAY_LIST, + rec_mset_elem_equal_fn, + NULL, + rec_mset_elem_dispose_fn, + true); + if (!mset->elem_list) + { + /* Out of memory. */ + return NULL; + } + + /* Iterate on the old list getting the data of the elements and + inserting it into the new sorted gl_list. */ + + iter = gl_list_iterator (list); + while (gl_list_iterator_next (&iter, (const void **) &elem, NULL)) + { + /* Create a new node list with the proper data and insert it + into the list using whatever sorting criteria is implemented + by compare_fn. */ + + if (!rec_mset_add_sorted (mset, elem->type, elem->data)) + { + /* Out of memory. Delete the new list and restore the old + one. */ + + gl_list_free (mset->elem_list); + mset->elem_list = list; + return NULL; + } + + /* We don't want the memory used by the element to be disposed + when the old list gets destroyed. The generic element + disposal function always checks if the data is NULL before + invoking the corresponding disp_fn callback. */ + + elem->data = NULL; + } + gl_list_iterator_free (&iter); + + /* Destroy the memory used by the old list, but removing the + dispose_fn callbacks first for the proper types in order to avoid + the disposal of the elements!. */ + + gl_list_free (list); + + return mset; +} + +bool +rec_mset_type_p (rec_mset_t mset, + rec_mset_type_t type) +{ + return type < mset->ntypes; +} + +rec_mset_type_t +rec_mset_register_type (rec_mset_t mset, + char *name, + rec_mset_disp_fn_t disp_fn, + rec_mset_equal_fn_t equal_fn, + rec_mset_dup_fn_t dup_fn, + rec_mset_compare_fn_t compare_fn) +{ + rec_mset_type_t new_type; + + new_type = mset->ntypes++; + mset->count[new_type] = 0; + mset->name[new_type] = strdup (name); + mset->disp_fn[new_type] = disp_fn; + mset->equal_fn[new_type] = equal_fn; + mset->dup_fn[new_type] = dup_fn; + mset->compare_fn[new_type] = compare_fn; + + return new_type; +} + +size_t +rec_mset_count (rec_mset_t mset, + rec_mset_type_t type) +{ + return mset->count[type]; +} + +void * +rec_mset_get_at (rec_mset_t mset, + rec_mset_type_t type, + size_t position) +{ + void *result; + rec_mset_elem_t elem; + + if ((position < 0) || (position >= mset->count[type])) + { + /* Invalid position. */ + return NULL; + } + + if (type == MSET_ANY) + { + /* An element of any type was requested. Simply call the gnulib + list get_at function, that will use the most efficient way to + retrieve the element. */ + + elem = (rec_mset_elem_t) gl_list_get_at (mset->elem_list, + position); + + } + else + { + /* Iterate on the elements in the gnulib list until the + POSITIONth element of the specified type is found. */ + + rec_mset_elem_t cur_elem; + gl_list_node_t node; + gl_list_iterator_t iter; + int count[MAX_NTYPES]; + int i = 0; + + elem = NULL; + for (i = 0; i < MAX_NTYPES; i++) + { + count[i] = 0; + } + + iter = gl_list_iterator (mset->elem_list); + while (gl_list_iterator_next (&iter, (const void **) &cur_elem, &node)) + { + if ((type == MSET_ANY) + || ((type == cur_elem->type) && (count[cur_elem->type] == position))) + { + elem = cur_elem; + break; + } + else + { + count[cur_elem->type]++; + count[0]++; + } + } + } + + if (elem) + { + result = elem->data; + } + else + { + result = NULL; + } + + return result; +} + +bool +rec_mset_remove_at (rec_mset_t mset, + rec_mset_type_t type, + size_t position) +{ + rec_mset_elem_t elem; + void *data; + bool removed = false; + + if (mset->count[type] > 0) + { + if (position < 0) + { + position = 0; + } + if (position >= mset->count[type]) + { + position = mset->count[type] - 1; + } + + data = rec_mset_get_at (mset, type, position); + elem = rec_mset_search (mset, data); + if (rec_mset_remove_elem (mset, elem)) + { + removed = true; + } + } + + return removed; +} + +rec_mset_elem_t +rec_mset_insert_at (rec_mset_t mset, + rec_mset_type_t type, + void *data, + size_t position) +{ + rec_mset_elem_t elem = NULL; + gl_list_node_t node; + + node = NULL; + + /* Create the mset element to insert in the gl_list, returning NULL + if there is no enough memory. */ + + elem = rec_mset_elem_new (mset, type, data); + if (!elem) + { + return NULL; + } + + /* Insert the element at the proper place in the list. */ + + if (position < 0) + { + node = gl_list_nx_add_first (mset->elem_list, + (void *) elem); + } + else if (position >= mset->count[0]) + { + node = gl_list_nx_add_last (mset->elem_list, + (void *) elem); + } + else + { + node = gl_list_nx_add_at (mset->elem_list, + position, + (void *) elem); + } + + if (node == NULL) + { + rec_mset_elem_destroy (elem); + elem = NULL; + } + else + { + elem->list_node = node; + + mset->count[0]++; + if (elem->type != MSET_ANY) + { + mset->count[elem->type]++; + } + } + + return elem; +} + +rec_mset_elem_t +rec_mset_append (rec_mset_t mset, + rec_mset_type_t elem_type, + void *data, + rec_mset_type_t type) +{ + return rec_mset_insert_at (mset, + elem_type, + data, + rec_mset_count (mset, type)); +} + +bool +rec_mset_remove_elem (rec_mset_t mset, + rec_mset_elem_t elem) +{ + rec_mset_type_t type = elem->type; + bool res = gl_list_remove_node (mset->elem_list, elem->list_node); + if (res) + { + /* Update statistics. */ + + mset->count[type]--; + if (type != MSET_ANY) + { + mset->count[MSET_ANY]--; + } + } + + return res; +} + +rec_mset_elem_t +rec_mset_insert_after (rec_mset_t mset, + rec_mset_type_t type, + void *data, + rec_mset_elem_t elem) +{ + rec_mset_elem_t new_elem; + gl_list_node_t node; + + /* Create the mset element to insert in the gl_list, returning NULL + if there is no enough memory. */ + + new_elem = rec_mset_elem_new (mset, type, data); + if (!new_elem) + { + return NULL; + } + + /* Find the requested place where to insert the new element. If + ELEM is not found in the multi-set then the new element is + appended to the multi-set. */ + + node = gl_list_search (mset->elem_list, (void *) elem); + if (node) + { + node = gl_list_nx_add_after (mset->elem_list, + node, + (void *) new_elem); + if (!node) + { + /* Out of memory. */ + rec_mset_elem_destroy (new_elem); + return NULL; + } + + new_elem->list_node = node; + + mset->count[0]++; + if (new_elem->type != MSET_ANY) + { + mset->count[new_elem->type]++; + } + } + else + { + node = gl_list_nx_add_last (mset->elem_list, (void *) elem); + if (!node) + { + /* Out of memory. */ + rec_mset_elem_destroy (new_elem); + return NULL; + } + + new_elem->list_node = node; + } + + return new_elem; +} + +rec_mset_elem_t +rec_mset_search (rec_mset_t mset, + void *data) +{ + rec_mset_elem_t result = NULL; + rec_mset_elem_t elem; + gl_list_iterator_t iter; + + iter = gl_list_iterator (mset->elem_list); + while (gl_list_iterator_next (&iter, (const void **) &elem, NULL)) + { + if (elem->data == data) + { + result = elem; + break; + } + } + + gl_list_iterator_free (&iter); + + return result; +} + +rec_mset_iterator_t +rec_mset_iterator (rec_mset_t mset) +{ + gl_list_iterator_t list_iter; + rec_mset_iterator_t mset_iter; + + /* Fill the mset iterator structure. Note that the list_iter field + of the mset iterator must have the same size and structure than + the gl_list_iterator_t structure. */ + + mset_iter.mset = mset; + + list_iter = gl_list_iterator (mset->elem_list); + mset_iter.list_iter = rec_mset_iter_gl2mset (list_iter); + + return mset_iter; +} + +bool +rec_mset_iterator_next (rec_mset_iterator_t *iterator, + rec_mset_type_t type, + const void **data, + rec_mset_elem_t *elem) +{ + bool found = true; + rec_mset_elem_t mset_elem; + gl_list_iterator_t list_iter; + gl_list_node_t list_node; + + /* Extract the list iterator from the multi-set iterator. */ + + list_iter = rec_mset_iter_mset2gl (iterator->list_iter); + + /* Advance the list iterator until an element of the proper type is + found. */ + + while ((found = gl_list_iterator_next (&list_iter, (const void**) &mset_elem, &list_node)) + && (type != 0) && (mset_elem->type != type)); + + if (found) + { + /* Update the multi-set iterator and set both DATA and ELEM. */ + + iterator->list_iter = rec_mset_iter_gl2mset (list_iter); + if (data) + *data = mset_elem->data; + if (elem) + { + mset_elem->list_node = list_node; + *elem = mset_elem; + } + } + + return found; +} + +void +rec_mset_iterator_free (rec_mset_iterator_t *iterator) +{ + gl_list_iterator_t list_iter; + + /* Extract the list iterator, free it and copy it back to the mset + iterator. */ + + list_iter = rec_mset_iter_mset2gl (iterator->list_iter); + gl_list_iterator_free (&list_iter); + iterator->list_iter = rec_mset_iter_gl2mset (list_iter); +} + +int +rec_mset_elem_type (rec_mset_elem_t elem) +{ + return elem->type; +} + +void +rec_mset_elem_set_type (rec_mset_elem_t elem, + rec_mset_type_t type) +{ + elem->mset->count[elem->type]--; + elem->type = type; + elem->mset->count[type]++; +} + +void * +rec_mset_elem_data (rec_mset_elem_t elem) +{ + return elem->data; +} + +void +rec_mset_elem_set_data (rec_mset_elem_t elem, + void *data) +{ + elem->data = data; +} + +bool +rec_mset_elem_equal_p (rec_mset_elem_t elem1, + rec_mset_elem_t elem2) +{ + return rec_mset_elem_equal_fn ((void *) elem1, + (void *) elem2); +} + +void * +rec_mset_elem_dup_data (rec_mset_elem_t elem) +{ + return elem->mset->dup_fn[elem->type] (elem->data); +} + +void +rec_mset_dump (rec_mset_t mset) +{ + gl_list_iterator_t iter; + gl_list_node_t node; + rec_mset_elem_t elem; + int i; + + printf ("MSET:\n"); + printf (" ntypes: %d\n", mset->ntypes); + + for (i = 0; i < mset->ntypes; i++) + { + printf(" type %d:\n", i); + printf(" count: %zd\n", mset->count[i]); + printf(" disp_fn: %p\n", mset->disp_fn[i]); + printf(" equal_fn: %p\n", mset->equal_fn[i]); + printf(" dup_fn: %p\n", mset->dup_fn[i]); + } + + printf(" nodes:\n"); + iter = gl_list_iterator (mset->elem_list); + while (gl_list_iterator_next (&iter, (const void **) &elem, &node)) + { + printf(" node=%p elem=%p elem->type=%d elem->data=%p contained=%p\n", node, elem, + elem->type, elem->data, elem->mset); + i++; + } + + printf("END MSET\n"); +} + +rec_mset_elem_t +rec_mset_add_sorted (rec_mset_t mset, + rec_mset_type_t type, + void *data) +{ + rec_mset_elem_t elem; + gl_list_node_t node; + + /* Create the mset element to insert in the gl_list, returning NULL + if there is no enough memory. */ + + elem = rec_mset_elem_new (mset, type, data); + if (!elem) + { + return NULL; + } + + /* Insert the element at the proper place in the list. */ + + node = gl_sortedlist_nx_add (mset->elem_list, + rec_mset_elem_compare_fn, + (void *) elem); + if (!node) + { + rec_mset_elem_destroy (elem); + return NULL; + } + + elem->list_node = node; + + mset->count[0]++; + if (elem->type != MSET_ANY) + { + mset->count[elem->type]++; + } + + return elem; +} + +/* + * Private functions. + */ + +static void +rec_mset_init (rec_mset_t mset) +{ + /* Initialize the mset structure so it can be safely passed to + rec_mset_destroy even if its contents are not completely + initialized with real values. */ + + memset (mset, 0 /* NULL */, sizeof (struct rec_mset_s)); +} + +static bool +rec_mset_elem_equal_fn (const void *e1, + const void *e2) +{ + rec_mset_elem_t elem1; + rec_mset_elem_t elem2; + + elem1 = (rec_mset_elem_t) e1; + elem2 = (rec_mset_elem_t) e2; + + if ((elem1->mset != elem2->mset) + || (elem1->type != elem2->type)) + { + return false; + } + + return (elem1->mset->equal_fn[elem1->type]) (elem1->data, + elem2->data); +} + +static void +rec_mset_elem_dispose_fn (const void *e) +{ + rec_mset_elem_t elem; + + elem = (rec_mset_elem_t) e; + rec_mset_elem_destroy (elem); +} + +static int +rec_mset_elem_compare_fn (const void *e1, + const void *e2) +{ + int result = 0; + rec_mset_elem_t elem1; + rec_mset_elem_t elem2; + + elem1 = (rec_mset_elem_t) e1; + elem2 = (rec_mset_elem_t) e2; + + if (elem1->mset->compare_fn) + { + result = (elem1->mset->compare_fn[elem1->type]) (elem1->data, + elem2->data, + elem2->type); + } + + return result; +} + +static rec_mset_list_iter_t +rec_mset_iter_gl2mset (gl_list_iterator_t list_iter) +{ + rec_mset_list_iter_t mset_iter; + + mset_iter.vtable = (void *) list_iter.vtable; + mset_iter.list = (void *) list_iter.list; + mset_iter.count = list_iter.count; + mset_iter.p = list_iter.p; + mset_iter.q = list_iter.q; + mset_iter.i = list_iter.i; + mset_iter.j = list_iter.j; + + return mset_iter; +} + +static gl_list_iterator_t +rec_mset_iter_mset2gl (rec_mset_list_iter_t mset_iter) +{ + gl_list_iterator_t list_iter; + + list_iter.vtable = (const struct gl_list_implementation *) mset_iter.vtable; + list_iter.list = (gl_list_t) mset_iter.list; + list_iter.count = mset_iter.count; + list_iter.p = mset_iter.p; + list_iter.q = mset_iter.q; + list_iter.i = mset_iter.i; + list_iter.j = mset_iter.j; + + return list_iter; +} + +static rec_mset_elem_t +rec_mset_elem_new (rec_mset_t mset, + rec_mset_type_t type, + void *data) +{ + rec_mset_elem_t new; + + if (type >= mset->ntypes) + { + return NULL; + } + + new = malloc (sizeof (struct rec_mset_elem_s)); + if (new) + { + new->type = type; + new->data = data; + new->mset = mset; + new->list_node = NULL; + } + + return new; +} + +static void +rec_mset_elem_destroy (rec_mset_elem_t elem) +{ + if (elem) + { + /* Dispose the data stored in the element if a disposal callback + function was configured by the user. The callback is never + invoked if the stored data is NULL. */ + + if (elem->data && elem->mset->disp_fn[elem->type]) + { + elem->mset->disp_fn[elem->type] (elem->data); + } + + free (elem); + } +} + +/* End of rec-mset.c */ diff --git a/devspec.en_US/project/recutils/src/rec-parser.c b/devspec.en_US/project/recutils/src/rec-parser.c new file mode 100755 index 0000000..fd4d24e --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-parser.c @@ -0,0 +1,1162 @@ +/* -*- mode: C -*- + * + * File: rec-parser.c + * Date: Wed Dec 23 20:55:15 2009 + * + * GNU recutils - Parsing routines + * + */ + +/* Copyright (C) 2009-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> +#include <stdarg.h> +#include <gettext.h> +#define _(str) dgettext (PACKAGE, str) +#define N_(str) gettext_noop (str) + +#include <rec.h> +#include <rec-utils.h> + +/* + * Static functions defined in this file + */ +static int rec_parser_getc (rec_parser_t parser); +static int rec_parser_ungetc (rec_parser_t parser, int ci); + +static bool rec_expect (rec_parser_t parser, const char *str); + +static bool rec_parse_field_value (rec_parser_t parser, char **str); + +static bool rec_parse_comment (rec_parser_t parser, rec_comment_t *comment); + +static bool rec_parser_digit_p (char c); +static bool rec_parser_letter_p (char c); +static bool rec_parser_init_common (rec_parser_t parser, const char *source); + +/* + * Parser Data Structure + */ + +enum rec_parser_error_e +{ + REC_PARSER_NOERROR, + REC_PARSER_ERROR, + REC_PARSER_EUNGETC, + REC_PARSER_EFNAME, + REC_PARSER_ENOMEM, + REC_PARSER_ETOOMUCHNAMEPARTS, + REC_PARSER_ECOMMENT, + REC_PARSER_EFIELD, + REC_PARSER_ERECORD +}; + +struct rec_parser_s +{ + FILE *in_file; /* File stream used by the parser. */ + const char *in_buffer; /* Buffer used by the parser. */ + size_t in_size; /* Length of in_buffer. */ + const char *p; /* Pointer to the next unreaded character in + in_buffer */ + char *source; + + rec_record_t prev_descriptor; + + bool eof; + enum rec_parser_error_e error; + + size_t line; /* Current line number. */ + size_t character; /* Current offset from the beginning of the file, + in characters. */ +}; + +const char *rec_parser_error_strings[] = +{ + "no error (unused)", + "unknown error", + "unreading a character", + "expected a field name", + "out of memory", + "too much parts in field name", + "expected a comment", + "expected a field", + "expected a record", + NULL /* Sentinel */ +}; + +/* The following macro is used by some functions to reduce + verbosity. */ + +#define FNAME(id) rec_std_field_name ((id)) + +/* + * Public functions. + */ + +rec_parser_t +rec_parser_new (FILE *in, + const char *source) +{ + rec_parser_t parser; + + parser = malloc (sizeof (struct rec_parser_s)); + if (parser != NULL) + { + parser->in_file = in; + parser->in_buffer = NULL; + parser->in_size = 0; + + if (!rec_parser_init_common (parser, source)) + { + free (parser); + parser = NULL; + } + } + + return parser; +} + +rec_parser_t +rec_parser_new_str (const char *buffer, + const char *source) +{ + return rec_parser_new_mem (buffer, strlen (buffer), source); +} + +rec_parser_t +rec_parser_new_mem (const char *buffer, + size_t size, + const char *source) +{ + rec_parser_t parser; + + parser = malloc (sizeof (struct rec_parser_s)); + if (parser != NULL) + { + parser->in_buffer = buffer; + parser->in_size = size; + parser->in_file = NULL; + + if (!rec_parser_init_common (parser, source)) + { + free (parser); + parser = NULL; + } + } + + return parser; +} + +void +rec_parser_destroy (rec_parser_t parser) +{ + if (parser) + { + free (parser->source); + free (parser); + } +} + +bool +rec_parser_eof (rec_parser_t parser) +{ + return parser->eof; +} + +bool +rec_parser_error (rec_parser_t parser) +{ + return (parser->error != REC_PARSER_NOERROR); +} + +void +rec_parser_perror (rec_parser_t parser, + const char *fmt, + ...) +{ + va_list ap; + char *number_str; + + va_start (ap, fmt); + vfprintf (stderr, fmt, ap); + fputs (": ", stderr); + number_str = NULL; /* asprintf does the allocation */ + if (asprintf (&number_str, "%zu", parser->line) != -1) + { + fputs (number_str, stderr); + free (number_str); + } + fputs (": error: ", stderr); + fputs (gettext (rec_parser_error_strings[parser->error]), stderr); + fputc ('\n', stderr); + + va_end (ap); +} + +bool +rec_parse_field_name (rec_parser_t parser, + char **fname) +{ + bool ret = true; + int ci; + size_t str_size; + char c; + rec_buf_t buf; + + /* Sanity check */ + if (rec_parser_eof (parser) + || rec_parser_error (parser)) + return false; + + buf = rec_buf_new (fname, &str_size); + if (!buf) + { + /* Out of memory */ + parser->error = REC_PARSER_ENOMEM; + return false; + } + + /* The syntax of a field name is described by the following regexp: + * + * [a-zA-Z%][a-zA-Z0-9_]*: + */ + + /* [a-zA-Z%] */ + ci = rec_parser_getc (parser); + if (ci == EOF) + ret = false; + else + { + c = (char) ci; + + if ((rec_parser_letter_p (c)) + || (c == '%')) + { + if (rec_buf_putc (c, buf) == EOF) + { + /* Out of memory */ + parser->error = REC_PARSER_ENOMEM; + return false; + } + } + else + { + /* Parse error */ + parser->error = REC_PARSER_EFNAME; + ret = false; + } + } + + /* [a-zA-Z0-9_]* */ + if (ret) + { + while ((ci = rec_parser_getc (parser)) != EOF) + { + c = (char) ci; + + if (rec_parser_letter_p (c) + || rec_parser_digit_p (c) + || (c == '_')) + { + if (rec_buf_putc (c, buf) == EOF) + { + /* Out of memory */ + parser->error = REC_PARSER_ENOMEM; + return false; + } + if (parser->error > 0) + break; + } + else if (c == ':') + /* End of token. Consume the ':' and report success */ + break; + else + { + /* Parse error */ + parser->error = REC_PARSER_EFNAME; + ret = false; + break; + } + } + + if (parser->eof) + { + parser->error = REC_PARSER_EFNAME; + ret = false; + } + } + + rec_buf_close (buf); + + if (!ret) + free (*fname); + else + { + /* Field names ends with: + * + * - A blank character or + * - A tab or + * - A newline or + * - The end of the file + * + * Note that if the field name ends with a newline it is + * pushed back to the input stream, since (unlike a blank + * character) it will be part of the field value. + */ + + ci = rec_parser_getc (parser); + if (ci != EOF) + { + c = (char) ci; + if ((c == ' ') || (c == '\t')) + parser->error = REC_PARSER_NOERROR; + else if (c == '\n') + { + parser->error = REC_PARSER_NOERROR; + rec_parser_ungetc (parser, c); + } + else + rec_parser_ungetc (parser, c); + } + } + + return ret; +} + +void +rec_parser_reset (rec_parser_t parser) +{ + parser->eof = false; + parser->error = REC_PARSER_NOERROR; + parser->p = parser->in_buffer; +} + +bool +rec_parse_field (rec_parser_t parser, + rec_field_t *field) +{ + bool ret; + rec_field_t new; + char *field_name; + char *field_value; + size_t location; + size_t char_location; + + /* Sanity check */ + if (rec_parser_eof (parser) + || rec_parser_error (parser)) + return false; + + location = parser->line; + char_location = parser->character; + if (char_location != 0) + char_location++; + + ret = rec_parse_field_name (parser, &field_name); + if (ret) + { + ret = rec_parse_field_value (parser, &field_value); + + if (ret) + { + new = rec_field_new (field_name, + field_value); + if (new == NULL) + return false; + + rec_field_set_source (new, parser->source); + rec_field_set_location (new, location); + rec_field_set_char_location (new, char_location); + *field = new; + + free (field_value); + } + + free (field_name); + } + + return ret; +} + +bool +rec_parse_record (rec_parser_t parser, + rec_record_t *record) +{ + rec_record_t new; + rec_field_t field; + bool ret; + int ci; + char c; + rec_comment_t comment; + size_t char_location; + + /* Sanity check */ + if (rec_parser_eof (parser) + || rec_parser_error (parser)) + return false; + + new = rec_record_new (); + if (!new) + { + parser->error = REC_PARSER_ENOMEM; + return false; + } + + /* Localize the potential record. */ + rec_record_set_source (new, parser->source); + rec_record_set_location (new, parser->line); + char_location = parser->character; + + if (char_location != 0) + char_location++; + rec_record_set_char_location (new, char_location); + + /* A record is a list of mixed fields and comments, containing at + * least one field starting it: + * + * FIELD (FIELD|COMMENT)* + */ + if (rec_parse_field (parser, &field)) + /* Add the field to the record */ + rec_mset_append (rec_record_mset (new), MSET_FIELD, (void *) field, MSET_ANY); + else + { + /* Expected a field. */ + parser->error = REC_PARSER_EFIELD; + rec_record_destroy (new); + *record = NULL; + return false; + } + + ret = true; + while ((ci = rec_parser_getc (parser)) != EOF) + { + c = (char) ci; + + if (c == '#') + { + rec_parser_ungetc (parser, ci); + if (rec_parse_comment (parser, &comment)) + /* Add the comment to the record. */ + rec_mset_append (rec_record_mset (new), MSET_COMMENT, (void *) comment, MSET_ANY); + } + else if ((c == ' ') || (c == '\t')) + { + /* A line composed just by blanks acts like an end of record + separator. */ + + while ((ci != EOF) && ((c == ' ') || (c == '\t'))) + { + ci = rec_parser_getc (parser); + c = (char) ci; + } + + if ((ci == EOF) || (c == '\n')) + /* End of record */ + break; + else + { + /* Parse error: field expected */ + parser->error = REC_PARSER_EFIELD; + ret = false; + break; + } + } + else if (c == '\n') + /* End of record */ + break; + else + { + /* Try to parse a field */ + rec_parser_ungetc (parser, ci); + if (rec_parse_field (parser, &field)) + /* Add the field to the record */ + rec_mset_append (rec_record_mset (new), MSET_FIELD, (void *) field, MSET_ANY); + else + { + /* Parse error: field expected */ + parser->error = REC_PARSER_EFIELD; + ret = false; + break; + } + } + } + + if (ret) + *record = new; + else + { + rec_record_destroy (new); + *record = NULL; + } + + return ret; +} + +bool +rec_parse_rset (rec_parser_t parser, + rec_rset_t *rset) +{ + bool ret; + int ci; + char c; + rec_rset_t new; + rec_record_t record; + rec_comment_t comment; + size_t comments_added = 0; + + ret = false; + + if ((new = rec_rset_new ()) == NULL) + { + /* Out of memory */ + parser->error = REC_PARSER_ENOMEM; + return false; + } + + /* Set the descriptor for this record set. */ + rec_rset_set_descriptor (new, parser->prev_descriptor); + parser->prev_descriptor = NULL; + + while ((ci = rec_parser_getc (parser)) != EOF) + { + c = (char) ci; + + /* Skip newline characters and blanks. */ + if ((c == '\n') || (c == ' ') || (c == '\t')) + continue; + /* Skip comments */ + else if (c == '#') + { + rec_parser_ungetc (parser, c); + rec_parse_comment (parser, &comment); + + /* Add the comment to the record set. */ + rec_mset_append (rec_rset_mset (new), MSET_COMMENT, (void *) comment, MSET_ANY); + + comments_added++; + } + else + { + /* Try to parse a record */ + rec_parser_ungetc (parser, c); + if (rec_parse_record (parser, &record)) + { + /* Check if the parsed record is a descriptor. In that + case, set it as the previous descriptor in the parser + state and stop parsing. In the special case where + the previous descriptor is NULL (we did not find a + descriptor yet) then record the position of the + descriptor as well. + + Otherwise, add the record to the current record + set. */ + if (rec_record_field_p (record, FNAME(REC_FIELD_REC))) + { + if ((rec_rset_num_records (new) == 0) && + (!rec_rset_descriptor (new))) + { + /* Special case: the first record found in the + input stream is a descriptor. */ + rec_rset_set_descriptor (new, record); + rec_rset_set_descriptor_pos (new, comments_added); + } + else + { + parser->prev_descriptor = record; + ret = true; + break; + } + } + else + { + rec_record_set_container (record, new); + rec_mset_append (rec_rset_mset (new), MSET_RECORD, (void *) record, MSET_ANY); + } + } + else + { + /* Parse error */ + parser->error = REC_PARSER_ERECORD; + break; + } + } + } + + if ((parser->error == REC_PARSER_NOERROR) + && (rec_rset_descriptor (new) + || (rec_rset_num_records (new) > 0))) + ret = true; + + if (ret) + *rset = new; + else + { + rec_rset_destroy (new); + *rset = NULL; + } + + return ret; +} + +bool +rec_parse_db (rec_parser_t parser, + rec_db_t *db) +{ + bool ret; + rec_rset_t rset; + rec_db_t new; + + ret = true; + + new = rec_db_new (); + if (!new) + /* Out of memory. */ + return false; + + while (rec_parse_rset (parser, &rset)) + { + /* Add the rset into the database. */ + if (!rec_db_insert_rset (new, + rset, + rec_db_size (new))) + { + /* Parse error: out of memory. */ + parser->error = REC_PARSER_ENOMEM; + ret = false; + break; + } + } + + if (!rec_parser_eof (parser)) + ret = false; + + if (ret) + *db = new; + + return ret; +} + +char * +rec_parse_field_name_str (const char *str) +{ + rec_parser_t parser; + char *field_name = NULL; + char *str2; + size_t str_size; + + /* Make sure the input string ends with a colon character. */ + str_size = strlen (str); + str2 = malloc (str_size + 2); + if (!str2) + /* Out of memory. */ + return NULL; + + memcpy (str2, str, str_size); + if (str_size > 0 && str2[str_size - 1] == ':') + str2[str_size] = '\0'; + else + { + str2[str_size] = ':'; + str2[str_size + 1] = '\0'; + } + + parser = rec_parser_new_str (str2, "dummy"); + if (!rec_parse_field_name (parser, &field_name)) + field_name = NULL; + + if (!rec_parser_eof (parser)) + { + /* There is additional stuff after the field name. */ + free (field_name); + field_name = NULL; + } + + rec_parser_destroy (parser); + free (str2); + + return field_name; +} + +rec_record_t +rec_parse_record_str (const char *str) +{ + rec_parser_t parser; + rec_record_t record; + + record = NULL; + parser = rec_parser_new_str (str, "dummy"); + if (parser) + { + if (!rec_parse_record (parser, &record)) + record = NULL; + rec_parser_destroy (parser); + } + + return record; +} + +bool +rec_parser_seek (rec_parser_t parser, + size_t line_number, + size_t position) +{ + if (parser->in_file) + { + if (fseek (parser->in_file, position, SEEK_SET)) + return false; + } + else if (parser->in_buffer) + { + if (position > parser->in_size) + return false; + parser->p = parser->in_buffer + position; + } + else + { + /* This point should not be reached! */ + fprintf (stderr, "rec_parser_seek: no backend in parser. This is a bug.\ + Please report it."); + return false; + } + parser->line = line_number; + parser->character = position; + return true; +} + +long +rec_parser_tell (rec_parser_t parser) +{ + if (parser->in_file) + return ftell (parser->in_file); + else if (parser->in_buffer) + return parser->p - parser->in_buffer; + else + { + /* This point should not be reached! */ + fprintf (stderr, "rec_parser_seek: no backend in parser. This is a bug.\ + Please report it."); + return -1; + } +} + +/* + * Private functions + */ + +static int +rec_parser_getc (rec_parser_t parser) +{ + int ci; + + /* Get the input character depending on the backend used (memory or + file). */ + if (parser->in_file) + ci = getc (parser->in_file); + else if (parser->in_buffer) + { + if (parser->p == parser->in_buffer + parser->in_size) + ci = EOF; + else + { + ci = *(parser->p); + parser->p++; + } + } + else + { + /* This point should not be reached! */ + fprintf (stderr, "rec_parser_getc: no backend in parser. This is a bug.\ + Please report it."); + return EOF; + } + + /* Manage EOF and update statistics. */ + + if (ci == EOF) + parser->eof = true; + else + { + parser->character++; + if (((char) ci) == '\n') + parser->line++; + } + + return ci; +} + +int +rec_parser_ungetc (rec_parser_t parser, + int ci) +{ + int res; + + /* Update statistics. */ + + parser->character--; + if (((char) ci) == '\n') + parser->line--; + + /* Unread the character, depending on the backend used (memory or + file). */ + + if (parser->in_file) + { + res = ungetc (ci, parser->in_file); + if (res != ci) + parser->error = REC_PARSER_EUNGETC; + } + else if (parser->in_buffer) + { + if (parser->p > parser->in_buffer) + { + res = ci; /* Emulate ungetc. */ + parser->p--; + } + else + { + res = EOF; + parser->error = REC_PARSER_EUNGETC; + } + } + else + { + + /* This point should not be reached! */ + fprintf (stderr, "rec_parser_ungetc: no backend in parser. This is a bug.\ + Please report it."); + return EOF; + } + + return res; +} + +static bool +rec_parser_digit_p (char c) +{ + return ((c >= '0') && (c <= '9')); +} + +static bool +rec_parser_letter_p (char c) +{ + return (((c >= 'A') && (c <= 'Z')) + || ((c >= 'a') && (c <= 'z'))); +} + +static bool +rec_expect (rec_parser_t parser, + const char *str) +{ + size_t str_size; + size_t counter; + bool found; + int ci; + char c; + + found = true; + str_size = strlen (str); + + for (counter = 0; + counter < str_size; + counter++) + { + ci = rec_parser_getc (parser); + if (ci == EOF) + { + /* EOF */ + found = false; + parser->eof = true; + break; + } + else + { + c = (char) ci; + if (c != str[counter]) + { + /* Not match */ + rec_parser_ungetc (parser, ci); + found = false; + break; + } + } + } + + return found; +} + +static bool +rec_parse_field_value (rec_parser_t parser, + char **str) +{ + bool ret; + int ci, ci2; + char c, c2; + size_t str_size; + bool prev_newline; + rec_buf_t buf; + + /* Sanity check */ + if (rec_parser_eof (parser) + || rec_parser_error (parser)) + return false; + + c = '\0'; + prev_newline = false; + ret = true; + buf = rec_buf_new (str, &str_size); + if (!buf) + { + /* Out of memory */ + parser->error = REC_PARSER_ENOMEM; + return false; + } + + /* A field value is a sequence of zero or more ascii codes finished + * with a newline character. + * + * \$ is translated to nothing. + * $+ ? is translated to $. + */ + while ((ci = rec_parser_getc (parser)) != EOF) + { + c = (char) ci; + + if ((prev_newline) && (c != '+')) + { + /* End of value */ + rec_parser_ungetc (parser, ci); + rec_buf_rewind (buf, 1); + break; + } + + if (c == '\\') + { + ci2 = rec_parser_getc (parser); + if (ci2 == EOF) + { + parser->eof = true; + ret = false; + break; + } + else + { + c2 = (char) ci2; + if (c2 == '\n') + { + /* Consume both $\n chars not adding them to str => + do nothing here. */ + } + else + { + /* Add \ and put back c2 */ + if (rec_buf_putc (c, buf) == EOF) + { + /* Out of memory */ + parser->error = REC_PARSER_ENOMEM; + return false; + } + + if (parser->error > 0) + { + break; + } + + if (rec_parser_ungetc (parser, ci2) + != ci2) + { + ret = false; + break; + } + } + } + + prev_newline = false; + } + else if (c == '+') + { + if (prev_newline) + { + /* Reduce \n+ ? to \n by ignoring the + ? */ + ci2 = rec_parser_getc (parser); + + if (ci2 == EOF) + { + parser->eof = true; + ret = false; + break; + } + else + { + c2 = (char) ci2; + /* If the look ahead character is a blank, skip it. + Otherwise put it back in the stream so it will be + processed in the next iteration. */ + if (c2 != ' ') + { + if (rec_parser_ungetc (parser, ci2) != ci2) + { + ret = false; + break; + } + } + } + } + else + { + if (rec_buf_putc (c, buf) == EOF) + { + /* Out of memory */ + parser->error = REC_PARSER_ENOMEM; + return false; + } + + if (parser->error > 0) + break; + } + + prev_newline = false; + } + else if (c == '\n') + { + if (rec_buf_putc (c, buf) == EOF) + { + /* Out of memory */ + parser->error = REC_PARSER_ENOMEM; + return false; + } + + if (parser->error > 0) + break; + prev_newline = true; + } + else + { + if (rec_buf_putc (c, buf) == EOF) + { + /* Out of memory */ + parser->error = REC_PARSER_ENOMEM; + return false; + } + + if (parser->error > 0) + break; + prev_newline = false; + } + } + + if (ret) + { + if (rec_parser_eof (parser) && (c == '\n')) + /* Special case: field just before EOF */ + rec_buf_rewind (buf, 1); + } + + rec_buf_close (buf); + + if (!ret) + free (*str); + + return ret; +} + +static bool +rec_parse_comment (rec_parser_t parser, rec_comment_t *comment) +{ + bool ret; + rec_buf_t buf; + char *str; + size_t str_size; + int ci; + char c; + + ret = false; + buf = rec_buf_new (&str, &str_size); + + /* Comments start at the beginning of line and span until the first + * \n character not followed by a #, or EOF. + */ + if (rec_expect (parser, "#")) + { + while ((ci = rec_parser_getc (parser)) != EOF) + { + c = (char) ci; + + if (c == '\n') + { + if ((ci = rec_parser_getc (parser)) == EOF) + break; + c = (char) ci; + + if (c != '#') + { + rec_parser_ungetc (parser, ci); + break; + } + else + c = '\n'; + } + + if (rec_buf_putc (c, buf) == EOF) + { + /* Out of memory */ + parser->error = REC_PARSER_ENOMEM; + return false; + } + } + + ret = true; + } + + rec_buf_close (buf); + + if (ret) + *comment = rec_comment_new (str); + else + *comment = NULL; + + free (str); + return ret; +} + +static bool +rec_parser_init_common (rec_parser_t parser, + const char *source) +{ + if (source) + { + parser->source = strdup (source); + if (!parser->source) + return false; + } + else + parser->source = NULL; + + parser->eof = false; + parser->error = REC_PARSER_NOERROR; + parser->line = 1; + parser->character = 0; + parser->prev_descriptor = NULL; + parser->p = parser->in_buffer; + + return true; +} + +/* End of rec-parser.c */ diff --git a/devspec.en_US/project/recutils/src/rec-record.c b/devspec.en_US/project/recutils/src/rec-record.c new file mode 100755 index 0000000..33693ae --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-record.c @@ -0,0 +1,846 @@ +/* -*- mode: C -*- + * + * File: rec-record.c + * Date: Thu Mar 5 17:11:41 2009 + * + * GNU recutils - Records + * + */ + +/* Copyright (C) 2009-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <stdlib.h> +#include <string.h> + +#include <rec.h> +#include <rec-utils.h> + +/* + * Record data structures. + */ + +struct rec_record_s +{ + /* Container pointer. The semantics of this pointer depends on the + user. */ + + void *container; + + /* type ids for the elements stored in the mset. */ + + int field_type; + int comment_type; + + /* Localization. */ + + char *source; + size_t location; + char *location_str; + size_t char_location; + char *char_location_str; + + /* The internal multi-set storing the data. */ + + rec_mset_t mset; +}; + +/* Static functions implemented below. */ + +static void rec_record_init (rec_record_t record); +static void rec_record_field_disp_fn (void *data); +static bool rec_record_field_equal_fn (void *data1, void *data2); +static void *rec_record_field_dup_fn (void *data); +static void rec_record_comment_disp_fn (void *data); +static bool rec_record_comment_equal_fn (void *data1, void *data2); +static void *rec_record_comment_dup_fn (void *data); + +/* + * Public functions. + */ + +rec_record_t +rec_record_new (void) +{ + rec_record_t record; + + record = malloc (sizeof (struct rec_record_s)); + + if (record) + { + rec_record_init (record); + + /* The container pointer is initially NULL, until the client + uses it for something else. */ + record->container = NULL; + + /* Localization information is not used until the user + explicitly sets it. */ + + record->source = NULL; + record->location = 0; + record->location_str = NULL; + record->char_location = 0; + record->char_location_str = NULL; + + /* Create the multi-set that will hold the elements of the + record. Note that the order in which the types are + registered is significative. If you change the order please + update the MSET_FIELD and MSET_COMMENT constants in + rec.h. */ + + record->mset = rec_mset_new (); + if (record->mset) + { + record->field_type = rec_mset_register_type (record->mset, + "field", + rec_record_field_disp_fn, + rec_record_field_equal_fn, + rec_record_field_dup_fn, + NULL); + + record->comment_type = rec_mset_register_type (record->mset, + "comment", + rec_record_comment_disp_fn, + rec_record_comment_equal_fn, + rec_record_comment_dup_fn, + NULL); + } + else + { + /* Out of memory. */ + + rec_record_destroy (record); + record = NULL; + } + } + + return record; +} + +void +rec_record_destroy (rec_record_t record) +{ + if (record) + { + free (record->source); + free (record->location_str); + free (record->char_location_str); + rec_mset_destroy (record->mset); + free (record); + } +} + +rec_record_t +rec_record_dup (rec_record_t record) +{ + rec_record_t new; + + new = malloc (sizeof (struct rec_record_s)); + if (new) + { + rec_record_init (new); + + new->field_type = record->field_type; + new->comment_type = record->comment_type; + new->mset = rec_mset_dup (record->mset); + if (!new->mset) + { + rec_record_destroy (new); + return NULL; + } + + new->source = NULL; + if (record->source) + { + new->source = strdup (record->source); + if (!new->source) + { + rec_record_destroy (new); + return NULL; + } + } + + new->location = record->location; + new->char_location = record->char_location; + + new->location_str = NULL; + if (record->location_str) + { + new->location_str = strdup (record->location_str); + if (!new->location_str) + { + rec_record_destroy (new); + return NULL; + } + } + + new->char_location_str = NULL; + if (record->char_location_str) + { + new->char_location_str = strdup (record->char_location_str); + if (!new->char_location_str) + { + rec_record_destroy (new); + return NULL; + } + } + + new->container = record->container; + } + + return new; +} + +bool +rec_record_subset_p (rec_record_t record1, + rec_record_t record2) +{ + bool result; + rec_mset_iterator_t iter1; + rec_mset_elem_t elem1; + const void *data; + + result = true; + + /* Iterate on the elements stored in record1. For each element, + verify that an equal element is also stored in record2. */ + + iter1 = rec_mset_iterator (record1->mset); + while (rec_mset_iterator_next (&iter1, MSET_ANY, &data, &elem1)) + { + bool elem_found = false; + rec_mset_elem_t elem2; + rec_mset_iterator_t iter2 = rec_mset_iterator (record2->mset); + + while (rec_mset_iterator_next (&iter2, MSET_ANY, &data, &elem2)) + { + if (rec_mset_elem_equal_p (elem1, elem2)) + { + elem_found = true; + break; + } + } + + if (!elem_found) + { + result = false; + break; + } + + rec_mset_iterator_free (&iter2); + + } + + rec_mset_iterator_free (&iter1); + + return result; +} + +bool +rec_record_equal_p (rec_record_t record1, + rec_record_t record2) +{ + return ((rec_record_subset_p (record1, record2)) && + (rec_record_subset_p (record2, record1))); +} + +rec_mset_t +rec_record_mset (rec_record_t record) +{ + return record->mset; +} + +size_t +rec_record_num_elems (rec_record_t record) +{ + return rec_mset_count (record->mset, MSET_ANY); +} + +size_t +rec_record_num_fields (rec_record_t record) +{ + return rec_mset_count (record->mset, record->field_type); +} + +size_t +rec_record_num_comments (rec_record_t record) +{ + return rec_mset_count (record->mset, record->comment_type); +} + +size_t +rec_record_get_field_index (rec_record_t record, + rec_field_t field) +{ + size_t res = 0; + rec_mset_iterator_t iter; + rec_field_t list_field; + + iter = rec_mset_iterator (record->mset); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &list_field, NULL)) + { + if (field == list_field) + { + break; + } + + res++; + } + + rec_mset_iterator_free (&iter); + + return res; +} + +bool +rec_record_field_p (rec_record_t record, + const char *field_name) +{ + return (rec_record_get_num_fields_by_name (record, field_name) > 0); +} + +size_t +rec_record_get_num_fields_by_name (rec_record_t record, + const char *field_name) +{ + rec_mset_iterator_t iter; + rec_field_t field; + int num_fields = 0; + + iter = rec_mset_iterator (record->mset); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) + { + if (rec_field_name_equal_p (rec_field_name (field), field_name)) + { + num_fields++; + } + } + rec_mset_iterator_free (&iter); + + return num_fields; +} + +rec_field_t +rec_record_get_field_by_name (rec_record_t record, + const char *field_name, + size_t n) +{ + size_t num_fields = 0; + rec_field_t field = NULL; + rec_field_t result = NULL; + rec_mset_iterator_t iter; + + + iter = rec_mset_iterator (record->mset); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) + { + if (rec_field_name_equal_p (rec_field_name (field), field_name)) + { + if (n == num_fields) + { + result = field; + break; + } + + num_fields++; + } + } + rec_mset_iterator_free (&iter); + + return result; +} + +void +rec_record_remove_field_by_name (rec_record_t record, + const char *field_name, + size_t n) +{ + rec_field_t field; + rec_mset_iterator_t iter; + rec_mset_elem_t elem; + int num_fields = 0; + + iter = rec_mset_iterator (record->mset); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void**) &field, &elem)) + { + if (rec_field_name_equal_p (rec_field_name (field), field_name)) + { + if ((n == -1) || (n == num_fields)) + { + rec_mset_remove_elem (record->mset, elem); + } + + num_fields++; + } + } + rec_mset_iterator_free (&iter); +} + +size_t +rec_record_get_field_index_by_name (rec_record_t record, + rec_field_t field) +{ + size_t res = 0; + rec_mset_iterator_t iter; + rec_field_t list_field; + + iter = rec_mset_iterator (record->mset); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &list_field, NULL)) + { + if (field == list_field) + { + break; + } + + if (rec_field_equal_p (field, list_field)) + { + res++; + } + } + + rec_mset_iterator_free (&iter); + + return res; +} + +rec_comment_t +rec_record_to_comment (rec_record_t record) +{ + rec_buf_t buf; + rec_comment_t res; + char *comment_str; + size_t comment_str_size; + rec_mset_iterator_t iter; + rec_mset_elem_t elem; + const void *data; + + buf = rec_buf_new (&comment_str, &comment_str_size); + + iter = rec_mset_iterator (record->mset); + while (rec_mset_iterator_next (&iter, MSET_ANY, &data, &elem)) + { + if (rec_mset_elem_type (elem) == MSET_FIELD) + { + rec_buf_puts (rec_write_field_str ((rec_field_t) data, + REC_WRITER_NORMAL), + buf); + rec_buf_putc ('\n', buf); + } + else + { + /* Comment. */ + rec_buf_puts (rec_write_comment_str (rec_comment_text ((rec_comment_t) data), + REC_WRITER_NORMAL), + buf); + rec_buf_putc ('\n', buf); + } + } + + rec_mset_iterator_free (&iter); + + rec_buf_close (buf); + + /* Remove a trailing newline. */ + if (comment_str[comment_str_size - 1] == '\n') + { + comment_str[comment_str_size - 1] = '\0'; + } + + res = rec_comment_new (comment_str); + free (comment_str); + + return res; +} + +char * +rec_record_source (rec_record_t record) +{ + char *res; + + if (record->source) + { + res = record->source; + } + else + { + res = ""; + } + + return res; +} + +void +rec_record_set_source (rec_record_t record, + char *source) +{ + if (record->source) + { + free (record->source); + record->source = NULL; + } + + record->source = strdup (source); +} + +size_t +rec_record_location (rec_record_t record) +{ + return record->location; +} + +char * +rec_record_location_str (rec_record_t record) +{ + char *res; + + if (record->location_str) + { + res = record->location_str; + } + else + { + res = ""; + } + + return res; +} + +void +rec_record_set_location (rec_record_t record, + size_t location) +{ + record->location = location; + + if (record->location_str) + { + free (record->location_str); + record->location_str = NULL; + } + + asprintf (&(record->location_str), "%zu", record->location); +} + +size_t +rec_record_char_location (rec_record_t record) +{ + return record->char_location; +} + +char * +rec_record_char_location_str (rec_record_t record) +{ + char *res; + + if (record->char_location_str) + { + res = record->char_location_str; + } + else + { + res = ""; + } + + return res; +} + +void +rec_record_set_char_location (rec_record_t record, + size_t location) +{ + record->char_location = location; + + if (record->char_location_str) + { + free (record->char_location_str); + record->char_location_str = NULL; + } + + asprintf (&(record->char_location_str), "%zu", record->char_location); +} + +bool +rec_record_contains_value (rec_record_t record, + const char *str, + bool case_insensitive) +{ + bool res = false; + rec_mset_iterator_t iter; + rec_field_t field; + const char *field_value; + char *occur; + + iter = rec_mset_iterator (record->mset); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) + { + field_value = rec_field_value (field); + + if (case_insensitive) + { + occur = strcasestr (field_value, str); + } + else + { + occur = strstr (field_value, str); + } + + res = (occur != NULL); + if (res) + { + break; + } + } + + rec_mset_iterator_free (&iter); + + return res; +} + +bool +rec_record_contains_field (rec_record_t record, + const char *field_name, + const char *field_value) +{ + bool res = false; + rec_mset_iterator_t iter; + rec_field_t field; + + iter = rec_mset_iterator (record->mset); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) + { + if (rec_field_name_equal_p (field_name, + rec_field_name (field)) + && (strcmp (field_value, rec_field_value (field)) == 0)) + { + res = true; + break; + } + } + rec_mset_iterator_free (&iter); + + return res; +} + +void * +rec_record_container (rec_record_t record) +{ + return record->container; +} + +void +rec_record_set_container (rec_record_t record, void *container) +{ + record->container = container; +} + +void +rec_record_uniq (rec_record_t record) +{ + rec_mset_iterator_t iter1, iter2; + rec_mset_elem_t elem1; + rec_field_t field1, field2; + bool *to_remove; + size_t num_fields, i, j; + + /* Create a map of the fields to remove and initialize all the + entries to false. */ + + num_fields = rec_record_num_fields (record); + to_remove = malloc (sizeof(bool) * num_fields); + memset (to_remove, false, num_fields); + + /* Iterate on the fields of the record an mark the fields that will + be removed in the removal mask. */ + + i = 0; + iter1 = rec_mset_iterator (record->mset); + while (rec_mset_iterator_next (&iter1, MSET_FIELD, (const void **) &field1, NULL)) + { + if (!to_remove[i]) + { + /* Mark any other occurrence of this field having the same + value for removal. */ + + j = 0; + iter2 = rec_mset_iterator (record->mset); + while (rec_mset_iterator_next (&iter2, MSET_FIELD, (const void **) &field2, NULL)) + { + if ((j != i) + && rec_field_name_equal_p (rec_field_name (field1), rec_field_name (field2)) + && rec_field_name_equal_p (rec_field_value (field1), rec_field_value (field2))) + { + to_remove[j] = true; + } + + j++; + } + rec_mset_iterator_free (&iter2); + } + + i++; + } + rec_mset_iterator_free (&iter1); + + + /* Remove the fields marked for removal. */ + + i = 0; + iter1 = rec_mset_iterator (record->mset); + while (rec_mset_iterator_next (&iter1, MSET_FIELD, (const void **) &field1, &elem1)) + { + if (to_remove[i]) + { + rec_mset_remove_elem (record->mset, elem1); + } + + i++; + } + + /* Cleanup. */ + + free (to_remove); +} + +void +rec_record_append (rec_record_t dest_record, + rec_record_t src_record) +{ + rec_mset_iterator_t iter; + rec_field_t field; + + iter = rec_mset_iterator (src_record->mset); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) + { + if (!rec_mset_append (rec_record_mset (dest_record), + MSET_FIELD, + (void *) rec_field_dup (field), + MSET_FIELD)) + { + /* Out of memory. Just return. */ + return; + } + } + rec_mset_iterator_free (&iter); +} + +void +rec_record_reset_marks (rec_record_t record) +{ + rec_mset_iterator_t iter; + rec_field_t field; + + iter = rec_mset_iterator (record->mset); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) + { + rec_field_set_mark (field, 0); + } + rec_mset_iterator_free (&iter); +} + +bool +rec_record_mark_field (rec_record_t record, + rec_field_t field, + int mark) +{ + rec_mset_iterator_t iter; + rec_field_t iter_field; + + iter = rec_mset_iterator (record->mset); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &iter_field, NULL)) + { + if (field == iter_field) + { + rec_field_set_mark (field, mark); + rec_mset_iterator_free (&iter); + return true; + } + } + rec_mset_iterator_free (&iter); + + return false; +} + +int +rec_record_field_mark (rec_record_t record, + rec_field_t field) +{ + return rec_field_mark (field); +} + +/* + * Private functions + */ + +static void +rec_record_init (rec_record_t record) +{ + /* Initialize the record structure so it can be safely passed to + rec_record_destroy even if its contents are not completely + initialized with real values. */ + + memset (record, 0 /* NULL */, sizeof (struct rec_record_s)); +} + +static void +rec_record_field_disp_fn (void *data) +{ + rec_field_destroy ((rec_field_t) data); +} + +static bool +rec_record_field_equal_fn (void *data1, + void *data2) +{ + return (data1 == data2); + /* return rec_field_equal_p ((rec_field_t) data1, + (rec_field_t) data2);*/ +} + +static void * +rec_record_field_dup_fn (void *data) +{ + rec_field_t copy; + + copy = rec_field_dup ((rec_field_t) data); + return (void *) copy; +} + +static void +rec_record_comment_disp_fn (void *data) +{ + rec_comment_destroy ((rec_comment_t) data); +} + +static bool +rec_record_comment_equal_fn (void *data1, + void *data2) +{ + return (data1 == data2); +/* return rec_comment_equal_p ((rec_comment_t) data1, +(rec_comment_t) data2);*/ +} + +static void * +rec_record_comment_dup_fn (void *data) +{ + rec_comment_t copy; + + copy = rec_comment_dup ((rec_comment_t) data); + return (void *) copy; +} + +/* End of rec-record.c */ diff --git a/devspec.en_US/project/recutils/src/rec-rset.c b/devspec.en_US/project/recutils/src/rec-rset.c new file mode 100755 index 0000000..90e506e --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-rset.c @@ -0,0 +1,1825 @@ +/* -*- mode: C -*- + * + * File: rec-rset.c + * Date: Thu Mar 5 18:12:10 2009 + * + * GNU recutils - Record Sets + * + */ + +/* Copyright (C) 2009-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <stdlib.h> +#include <stdint.h> +#include <errno.h> +#include <locale.h> +#include <string.h> +#include <parse-datetime.h> + +#if defined UUID_TYPE +# include <uuid/uuid.h> +#endif + +#include <rec.h> +#include <rec-utils.h> + +/* Record Set Data Structures. + * + * A record set is a set of zero or more non-special records + * intermixed with comments, maybe preceded by a record descriptor. + */ + +/* The fprops structure contains useful properties associated with + fields. Those properties are usually extracted from the record + descriptor of the rset. */ + +struct rec_rset_fprops_s +{ + char *fname; + + bool key_p; /* Primary key */ + bool auto_p; /* Auto-field. */ +#if defined REC_CRYPT_SUPPORT + bool confidential_p; /* Confidential field. */ +#endif + rec_type_t type; /* The field has an anonymous type. */ + char *type_name; /* The field has a type in the types registry. */ + + struct rec_rset_fprops_s *next; +}; + +typedef struct rec_rset_fprops_s *rec_rset_fprops_t; + +/* The rec_rset_s structure contains the data associated with a record + set. */ + +struct rec_rset_s +{ + rec_record_t descriptor; + size_t descriptor_pos; /* Position of the descriptor into the record + set. Some comments can appear before the + record descriptor in the rec file, so we + need to track it in order to write back + the record properly. */ + + /* Field properties. */ + rec_rset_fprops_t field_props; + + /* Type registry. */ + rec_type_reg_t type_reg; + + /* Simple fex containing the fields to use for ordering the records + of this record descriptor. */ + rec_fex_t order_by_fields; + + /* Size constraints. */ + size_t min_size; + size_t max_size; + + /* Sex-driven constraints. */ + rec_sex_t *constraints; + size_t num_constraints; + + /* Storage for records and comments. */ + int record_type; + int comment_type; + rec_mset_t mset; +}; + +/* Static functions implemented below. */ + +static void rec_rset_init (rec_rset_t rset); + +static void rec_rset_update_types (rec_rset_t rset); +static void rec_rset_update_field_props (rec_rset_t rset); +static void rec_rset_update_size_constraints (rec_rset_t rset); +static void rec_rset_update_sex_constraints (rec_rset_t rset); + +static bool rec_rset_record_equal_fn (void *data1, void *data2); +static void rec_rset_record_disp_fn (void *data); +static void *rec_rset_record_dup_fn (void *data); +static int rec_rset_record_compare_fn (void *data1, void *data2, int type1); + +static bool rec_rset_comment_equal_fn (void *data1, void *data2); +static void rec_rset_comment_disp_fn (void *data); +static void *rec_rset_comment_dup_fn (void *data); +static int rec_rset_comment_compare_fn (void *data1, void *data2, int type2); + +static bool rec_rset_type_field_p (const char *str); +static rec_fex_t rec_rset_type_field_fex (const char *str); +static char *rec_rset_type_field_type (const char *str); + +static rec_rset_fprops_t rec_rset_get_props (rec_rset_t rset, + const char *fname, + bool create_p); + +static bool rec_rset_add_auto_field_int (rec_rset_t rset, + const char *field_name, + rec_record_t record); +static bool rec_rset_add_auto_field_date (rec_rset_t rset, + const char *field_name, + rec_record_t record); + +#if defined UUID_TYPE +static bool rec_rset_add_auto_field_uuid (rec_rset_t rset, + const char *field_name, + rec_record_t record); +#endif + +static rec_record_t rec_rset_merge_records (rec_record_t to_record, + rec_record_t from_record, + rec_fex_t excluded_fields); + +static int rec_rset_compare_typed_records (rec_rset_t rset, + rec_record_t record1, + rec_record_t record2, + rec_fex_t fields); + + +/* The following macro is used by some functions to reduce + verbosity. */ + +#define FNAME(id) rec_std_field_name ((id)) + +/* + * Public functions. + */ + +rec_rset_t +rec_rset_new (void) +{ + rec_rset_t rset; + + rset = malloc (sizeof (struct rec_rset_s)); + if (rset) + { + rec_rset_init (rset); + + /* Create the mset. */ + rset->mset = rec_mset_new (); + if (rset->mset) + { + /* No descriptor, initially. */ + rset->descriptor = NULL; + rset->descriptor_pos = 0; + rset->min_size = 0; + rset->max_size = SIZE_MAX; + rset->constraints = NULL; + rset->num_constraints = 0; + + /* Create an empty type registry. */ + rset->type_reg = rec_type_reg_new (); + if (!rset->type_reg) + { + /* Out of memory. */ + rec_rset_destroy (rset); + return NULL; + } + + /* No field properties, initially. */ + rset->field_props = NULL; + + /* No order by field, initially. */ + rset->order_by_fields = NULL; + + /* register the types. See rec.h for the definition of + MSET_COMMENT and MSET_RECORD. */ + + rset->record_type = rec_mset_register_type (rset->mset, + "record", + rec_rset_record_disp_fn, + rec_rset_record_equal_fn, + rec_rset_record_dup_fn, + rec_rset_record_compare_fn); + rset->comment_type = rec_mset_register_type (rset->mset, + "comment", + rec_rset_comment_disp_fn, + rec_rset_comment_equal_fn, + rec_rset_comment_dup_fn, + rec_rset_comment_compare_fn); + } + else + { + /* Out of memory. */ + + rec_rset_destroy (rset); + rset = NULL; + } + } + + return rset; +} + +void +rec_rset_destroy (rec_rset_t rset) +{ + rec_rset_fprops_t props, aux = NULL; + size_t i = 0; + + if (rset) + { + rec_record_destroy (rset->descriptor); + rec_type_reg_destroy (rset->type_reg); + + for (i = 0; i < rset->num_constraints; i++) + { + rec_sex_destroy (rset->constraints[i]); + } + free (rset->constraints); + + props = rset->field_props; + while (props) + { + aux = props; + + if (aux->type) + { + rec_type_destroy (aux->type); + } + free (aux->fname); + free (aux->type_name); + props = props->next; + free (aux); + } + + rec_fex_destroy (rset->order_by_fields); + + rec_mset_destroy (rset->mset); + free (rset); + } +} + +rec_rset_t +rec_rset_dup (rec_rset_t rset) +{ + rec_rset_t new = NULL; + + new = malloc (sizeof (struct rec_rset_s)); + if (new) + { + rec_rset_init (new); + + new->record_type = rset->record_type; + new->comment_type = rset->comment_type; + new->mset = NULL; + new->min_size = rset->min_size; + new->max_size = rset->max_size; + /* XXX: make copies of the following structures. */ + new->type_reg = NULL; + new->field_props = NULL; + new->constraints = NULL; + new->num_constraints = 0; + + if (rset->order_by_fields) + { + new->order_by_fields = rec_fex_dup (rset->order_by_fields); + if (!new->order_by_fields) + { + /* Out of memory. */ + rec_rset_destroy (new); + return NULL; + } + } + } + + new->mset = rec_mset_dup (rset->mset); + if (!new->mset) + { + /* Out of memory. */ + rec_rset_destroy (new); + return NULL; + } + + return new; +} + +rec_mset_t +rec_rset_mset (rec_rset_t rset) +{ + return rset->mset; +} + +size_t +rec_rset_num_elems (rec_rset_t rset) +{ + return rec_mset_count (rset->mset, MSET_ANY); +} + +size_t +rec_rset_num_records (rec_rset_t rset) +{ + return rec_mset_count (rset->mset, rset->record_type); +} + +size_t +rec_rset_num_comments (rec_rset_t rset) +{ + return rec_mset_count (rset->mset, rset->comment_type); +} + +rec_record_t +rec_rset_descriptor (rec_rset_t rset) +{ + return rset->descriptor; +} + +void +rec_rset_set_descriptor (rec_rset_t rset, rec_record_t record) +{ + if (rset->descriptor) + { + rec_record_destroy (rset->descriptor); + rset->descriptor = NULL; + } + rset->descriptor = record; + + /* Update the types registry and the auto fields. */ + rec_rset_update_types (rset); + rec_rset_update_field_props (rset); + rec_rset_update_size_constraints (rset); + rec_rset_update_sex_constraints (rset); +} + +size_t +rec_rset_descriptor_pos (rec_rset_t rset) +{ + return rset->descriptor_pos; +} + +void +rec_rset_set_descriptor_pos (rec_rset_t rset, + size_t position) +{ + rset->descriptor_pos = position; +} + +void +rec_rset_set_type (rec_rset_t rset, + const char *type) +{ + rec_field_t rec_field; + + if (!type) + { + /* This is a no-op for the default record set. */ + return; + } + + if (!rset->descriptor) + { + /* Create a record descriptor. */ + rset->descriptor = rec_record_new (); + + } + + rec_field = rec_record_get_field_by_name (rset->descriptor, + FNAME(REC_FIELD_REC), + 0); + + if (rec_field) + { + rec_field_set_value (rec_field, type); + } + else + { + rec_field = rec_field_new (FNAME(REC_FIELD_REC), type); + rec_mset_append (rec_record_mset (rset->descriptor), MSET_FIELD, (void *) rec_field, MSET_FIELD); + } +} + +char * +rec_rset_type (rec_rset_t rset) +{ + char *res; + rec_field_t field; + + res = NULL; + if (rset->descriptor) + { + field = rec_record_get_field_by_name (rset->descriptor, + FNAME(REC_FIELD_REC), + 0); + if (field) + { + res = rec_extract_type (rec_field_value (field)); + } + } + + return res; +} + +char * +rec_rset_url (rec_rset_t rset) +{ + char *res; + rec_field_t field; + + res = NULL; + if (rset->descriptor) + { + field = rec_record_get_field_by_name (rset->descriptor, + FNAME(REC_FIELD_REC), + 0); + if (field) + { + res = rec_extract_url (rec_field_value (field)); + } + } + + return res; +} + +rec_type_reg_t +rec_rset_get_type_reg (rec_rset_t rset) +{ + return rset->type_reg; +} + +void +rec_rset_rename_field (rec_rset_t rset, + const char *field_name, + const char *new_field_name) +{ + size_t j; + rec_record_t descriptor; + rec_fex_t fex; + char *fex_str; + char *type_str; + rec_buf_t buf; + char *result; + size_t result_size; + rec_fex_elem_t fex_elem; + const char *fex_fname; + + descriptor = rec_rset_descriptor (rset); + if (descriptor) + { + rec_mset_t descriptor_mset = rec_record_mset (descriptor); + rec_mset_iterator_t iter = rec_mset_iterator (descriptor_mset); + rec_field_t field; + + while (rec_mset_iterator_next (&iter, MSET_FIELD, (void *) &field, NULL)) + { + if (rec_field_name_equal_p (rec_field_name (field), FNAME(REC_FIELD_TYPE))) + { + /* Process a %type entry. Invalid entries are + skipped. */ + if (!rec_rset_type_field_p (rec_field_value (field))) + { + continue; + } + + fex = rec_rset_type_field_fex (rec_field_value (field)); + if (fex) + { + for (j = 0; j < rec_fex_size (fex); j++) + { + fex_elem = rec_fex_get (fex, j); + fex_fname = rec_fex_elem_field_name (fex_elem); + if (rec_field_name_equal_p (field_name, fex_fname)) + { + /* Replace it with new_field_name. */ + rec_fex_elem_set_field_name (fex_elem, new_field_name); + } + } + + fex_str = rec_fex_str (fex, REC_FEX_CSV); + type_str = rec_rset_type_field_type (rec_field_value (field)); + + buf = rec_buf_new (&result, &result_size); + rec_buf_puts (fex_str, buf); + rec_buf_putc (' ', buf); + rec_buf_puts (type_str, buf); + rec_buf_close (buf); + + rec_field_set_value (field, result); + + free (fex_str); + free (type_str); + rec_fex_destroy (fex); + } + } + else if (rec_field_name_equal_p (rec_field_name (field), FNAME(REC_FIELD_KEY)) + || rec_field_name_equal_p (rec_field_name (field), FNAME(REC_FIELD_MANDATORY)) + || rec_field_name_equal_p (rec_field_name (field), FNAME(REC_FIELD_UNIQUE)) + || rec_field_name_equal_p (rec_field_name (field), FNAME(REC_FIELD_PROHIBIT)) +#if defined REC_CRYPT_SUPPORT + || rec_field_name_equal_p (rec_field_name (field), FNAME(REC_FIELD_CONFIDENTIAL)) +#endif + || rec_field_name_equal_p (rec_field_name (field), FNAME(REC_FIELD_SORT))) + { + /* Rename the field in the fex expression that is the + value of the field. Skip invalid entries. */ + fex = rec_fex_new (rec_field_value (field), REC_FEX_SIMPLE); + if (fex) + { + for (j = 0; j < rec_fex_size (fex); j++) + { + fex_elem = rec_fex_get (fex, j); + + fex_fname = rec_fex_elem_field_name (fex_elem); + if (rec_field_name_equal_p (field_name, fex_fname)) + { + /* Replace it with new_field_name. */ + rec_fex_elem_set_field_name (fex_elem, new_field_name); + } + } + + fex_str = rec_fex_str (fex, REC_FEX_SIMPLE); + rec_field_set_value (field, fex_str); + free (fex_str); + } + } + } + + rec_mset_iterator_free (&iter); + } + + /* Update the types registry. */ + rec_rset_update_field_props (rset); +} + +const char * +rec_rset_key (rec_rset_t rset) +{ + const char *key = NULL; + rec_rset_fprops_t props = rset->field_props; + + while (props) + { + if (props->key_p) + { + /* There must be only one field marked as key. */ + key = props->fname; + break; + } + props = props->next; + } + + return key; +} + +rec_fex_t +rec_rset_auto (rec_rset_t rset) +{ + rec_fex_t fex; + rec_rset_fprops_t props; + + fex = rec_fex_new (NULL, REC_FEX_SIMPLE); + + props = rset->field_props; + while (props) + { + if (props->auto_p) + { + rec_fex_append (fex, + props->fname, + -1, -1); + } + props = props->next; + } + + return fex; +} + +#if defined REC_CRYPT_SUPPORT + +bool +rec_rset_field_confidential_p (rec_rset_t rset, + const char *field_name) +{ + rec_fex_t fex; + size_t fex_size; + size_t i; + bool result = false; + const char *fex_field_name; + + fex = rec_rset_confidential (rset); + fex_size = rec_fex_size (fex); + + for (i = 0; i < fex_size; i++) + { + fex_field_name = rec_fex_elem_field_name (rec_fex_get (fex, i)); + if (rec_field_name_equal_p (field_name, fex_field_name)) + { + result = true; + break; + } + } + + return result; +} + +rec_fex_t +rec_rset_confidential (rec_rset_t rset) +{ + rec_fex_t fex; + rec_rset_fprops_t props; + + fex = rec_fex_new (NULL, REC_FEX_SIMPLE); + + props = rset->field_props; + while (props) + { + if (props->confidential_p) + { + rec_fex_append (fex, + props->fname, + -1, -1); + } + + props = props->next; + } + + return fex; +} + +#endif /* REC_CRYPT_SUPPORT */ + +rec_type_t +rec_rset_get_field_type (rec_rset_t rset, + const char *field_name) +{ + rec_type_t type = NULL; + rec_rset_fprops_t props = NULL; + + props = rec_rset_get_props (rset, field_name, false); + if (props) + { + type = props->type; + if (!type && props->type_name) + { + type = rec_type_reg_get (rset->type_reg, props->type_name); + } + } + + return type; +} + +size_t +rec_rset_min_records (rec_rset_t rset) +{ + return rset->min_size; +} + +size_t +rec_rset_max_records (rec_rset_t rset) +{ + return rset->max_size; +} + +char * +rec_rset_source (rec_rset_t rset) +{ + rec_record_t record; + + /* The source of the record set is considered to be the source of + its first record: either the descriptor or some other record. */ + + record = rec_rset_descriptor (rset); + if (!record) + { + record = (rec_record_t) rec_mset_get_at (rset->mset, MSET_RECORD, 0); + } + + return rec_record_source (record); +} + + +bool +rec_rset_set_order_by_fields (rec_rset_t rset, + rec_fex_t field_names) +{ + rec_fex_destroy (rset->order_by_fields); + rset->order_by_fields = rec_fex_dup (field_names); + return (rset->order_by_fields != NULL); +} + +rec_fex_t +rec_rset_order_by_fields (rec_rset_t rset) +{ + return rset->order_by_fields; +} + +rec_rset_t +rec_rset_sort (rec_rset_t rset, + rec_fex_t sort_by) +{ + if (sort_by) + { + rec_rset_set_order_by_fields (rset, sort_by); + } + + if (rset->order_by_fields) + { + /* Duplicate the multi-set indicating that the elements must be + sorted. */ + + if (!rec_mset_sort (rset->mset)) + { + /* Out of memory. */ + return NULL; + } + + /* Update field properties, in case order_by_fields was changed + above. */ + + rec_rset_update_field_props (rset); + } + + return rset; +} + +rec_rset_t +rec_rset_group (rec_rset_t rset, + rec_fex_t group_by) +{ + rec_mset_iterator_t iter; + rec_record_t record; + rec_mset_elem_t elem; + size_t map_size; + bool *deletion_map; + size_t num_record; + + /* Create and initialize the deletion map. */ + + map_size = sizeof(bool) * rec_rset_num_records (rset); + deletion_map = malloc (map_size); + if (!deletion_map) + { + /* Out of memory. */ + return NULL; + } + + memset (deletion_map, false, map_size); + + /* Iterate on the records of RSET, grouping records and marking the + grouped records for deletion. */ + + num_record = 0; + iter = rec_mset_iterator (rec_rset_mset (rset)); + while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **)&record, NULL)) + { + if (!deletion_map[num_record]) + { + size_t num_record_2 = num_record; + rec_mset_iterator_t iter2 = iter; + rec_record_t record2; + + while (rec_mset_iterator_next (&iter2, MSET_RECORD, (const void**)&record2, NULL)) + { + num_record_2++; + + if (rec_rset_compare_typed_records (rset, record, record2, group_by) != 0) + { + break; + } + else + { + /* Insert all the elements of record2 into record, + but not the group-by fields. Also, remove any + duplicated field created in record2 as the result + of the operation. */ + + if (!rec_rset_merge_records (record, + record2, + group_by)) + { + /* Out of memory. */ + return NULL; + } + + /* Mark record2 for removal. */ + deletion_map[num_record_2] = true; + } + } + } + + num_record++; + } + rec_mset_iterator_free (&iter); + + /* Delete the records marked for deletion. */ + + num_record = 0; + iter = rec_mset_iterator (rec_rset_mset (rset)); + while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **) &record, &elem)) + { + if (deletion_map[num_record]) + { + rec_mset_remove_elem (rec_rset_mset (rset), elem); + } + + num_record++; + } + rec_mset_iterator_free (&iter); + + free (deletion_map); + + return rset; +} + +rec_rset_t +rec_rset_add_auto_fields (rec_rset_t rset, + rec_record_t record) +{ + rec_fex_t auto_fields; + rec_type_t type; + size_t i; + + if ((auto_fields = rec_rset_auto (rset))) + { + size_t num_auto_fields = rec_fex_size (auto_fields); + + for (i = 0; i < num_auto_fields; i++) + { + const char *auto_field_name = + rec_fex_elem_field_name (rec_fex_get (auto_fields, i)); + + if (!rec_record_field_p (record, auto_field_name)) + { + /* The auto field is not already present in record, so + add one automatically. Depending on its type the + value is calculated differently. If the record does + not have a type, or the type is incorrect, ignore + it. */ + + type = rec_rset_get_field_type (rset, auto_field_name); + if (type) + { + switch (rec_type_kind (type)) + { + case REC_TYPE_INT: + case REC_TYPE_RANGE: + { + if (!rec_rset_add_auto_field_int (rset, auto_field_name, record)) + { + /* Out of memory. */ + return NULL; + } + + break; + } + case REC_TYPE_DATE: + { + if (!rec_rset_add_auto_field_date (rset, auto_field_name, record)) + { + /* Out of memory. */ + return NULL; + } + + break; + } +#if defined UUID_TYPE + case REC_TYPE_UUID: + { + if (!rec_rset_add_auto_field_uuid (rset, auto_field_name, record)) + { + /* Out of memory. */ + return NULL; + } + + break; + } +#endif /* UUID_TYPE */ + default: + { + /* Do nothing for other types. */ + break; + } + } + } + } + } + } + + return rset; +} + +size_t +rec_rset_num_sex_constraints (rec_rset_t rset) +{ + return rset->num_constraints; +} + +rec_sex_t +rec_rset_sex_constraint (rec_rset_t rset, + size_t index) +{ + return rset->constraints[index]; +} + +/* + * Private functions + */ + +static void +rec_rset_init (rec_rset_t rset) +{ + /* Initialize the rset structure so it can be safely passed to + rec_rset_destroy even if its contents are not completely + initialized with real values. */ + + memset (rset, 0 /* NULL */, sizeof (struct rec_rset_s)); +} + +static void +rec_rset_record_disp_fn (void *data) +{ + rec_record_t record = (rec_record_t) data; + rec_record_destroy (record); +} + +static bool +rec_rset_record_equal_fn (void *data1, + void *data2) +{ + return (data1 == data2); + /* return rec_record_equal_p ((rec_record_t) data1, + (rec_record_t) data2); */ +} + +static void * +rec_rset_record_dup_fn (void *data) +{ + rec_record_t record = (rec_record_t) data; + rec_record_t new = rec_record_dup (record); + + return (void *) new; +} + +static int +rec_rset_record_compare_fn (void *data1, + void *data2, + int type2) +{ + /* data1 is a record. data2 can be either a record or a comment. + + order_by_field can't be NULL, because this callback is invoked + only if rec_mset_add_sorted is used to add an element to the + list. + + The following rules apply here: + + 1. If the fields in order_by_fields are not in both record1 and + record2, then data1 < data2. + + 2. Else, perform a lexicographic comparison, i.e. + + (a1, a2, ...) < (b1, b2, ...) IFF + a1 < b1 OR (a1 = b2 AND a2 < b2) OR ... + + Note that record1 will always be a regular record. Never a + descriptor. + */ + + rec_rset_t rset = NULL; + rec_record_t record1 = NULL; + rec_record_t record2 = NULL; + int type_comparison = 0; + + /* If elem2 is a comment then elem1 > elem2. */ + if (type2 == MSET_COMMENT) + { + return 1; + } + + /* Get the records and the containing rset. */ + record1 = (rec_record_t) data1; + record2 = (rec_record_t) data2; + rset = (rec_rset_t) rec_record_container (record1); + + /* Perform a lexicographic comparison of the order_by_fields in both + registers. */ + + type_comparison = rec_rset_compare_typed_records (rset, + record1, + record2, + rset->order_by_fields); + + /* If both records are equal, return -1 instead of 0 in order to + maintain the relative ordering between equal records. */ + + if (type_comparison == 0) + { + type_comparison = -1; + } + + return type_comparison; +} + +static void +rec_rset_comment_disp_fn (void *data) +{ + rec_comment_t comment = (rec_comment_t) data; + rec_comment_destroy (comment); +} + +static bool +rec_rset_comment_equal_fn (void *data1, + void *data2) +{ + return (data1 == data2); + /* return rec_comment_equal_p ((rec_comment_t) data1, + (rec_comment_t) data2);*/ +} + +static void * +rec_rset_comment_dup_fn (void *data) +{ + rec_comment_t comment = (rec_comment_t) data; + rec_comment_t new = rec_comment_dup (comment); + return (void *) new; +} + +static int +rec_rset_comment_compare_fn (void *data1, + void *data2, + int type2) +{ + /* data1 is a comment, and data2 can be either a comment or a + record. In any case, data1 < data2. */ + + return -1; +} + +static void +rec_rset_update_sex_constraints (rec_rset_t rset) +{ + /* Reset the existing constraints. */ + + { + size_t i = 0; + + for (i = 0; i < rset->num_constraints; i++) + { + rec_sex_destroy (rset->constraints[i]); + } + rset->num_constraints = 0; + } + + /* If there is not a record descriptor in the record set then simply + return. */ + + if (!rset->descriptor) + { + return; + } + + /* Allocate memory for the constraints memory. In case of + not-enough-memory simply return. */ + + { + size_t num_constraints = + rec_record_get_num_fields_by_name (rset->descriptor, FNAME(REC_FIELD_CONSTRAINT)); + rset->constraints = malloc (num_constraints * sizeof(rec_sex_t)); + + if (!rset->constraints) + { + return; + } + } + + /* Scan the record descriptor for %constraint: directives, and build + the constraints. Not well formed constraint entries, + i.e. entries not containing valid sexes, are simply ignored. */ + + { + rec_field_t field = NULL; + rec_mset_iterator_t iter; + + iter = rec_mset_iterator (rec_record_mset (rset->descriptor)); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **)&field, NULL)) + { + const char *field_name = rec_field_name (field); + const char *field_value = rec_field_value (field); + + if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_CONSTRAINT))) + { + rec_sex_t sex = rec_sex_new (false); + if (!sex) + { + return; + } + + if (rec_sex_compile (sex, field_value)) + { + rset->constraints[rset->num_constraints++] = sex; + } + else + { + rec_sex_destroy (sex); + } + } + } + rec_mset_iterator_free (&iter); + } +} + +static void +rec_rset_update_size_constraints (rec_rset_t rset) +{ + rec_field_t field; + enum rec_size_condition_e condition; + size_t size = 0; + + /* Reset the constraints. */ + rset->min_size = 0; + rset->max_size = SIZE_MAX; + + /* Scan the record descriptor for %size: directives, and build the + new list. */ + if (rset->descriptor) + { + field = rec_record_get_field_by_name (rset->descriptor, + FNAME(REC_FIELD_SIZE), + 0); + + if (field && rec_match (rec_field_value (field), REC_INT_SIZE_RE)) + { + /* Extract 'min' and 'max' and update the constraints in the + rset. */ + condition = rec_extract_size_condition (rec_field_value (field)); + size = rec_extract_size (rec_field_value (field)); + + /* Set min_size and max_size depending on the + condition. */ + switch (condition) + { + case SIZE_COND_E: + { + rset->min_size = size; + rset->max_size = size; + break; + } + case SIZE_COND_L: + { + rset->max_size = size - 1; + break; + } + case SIZE_COND_LE: + { + rset->max_size = size; + break; + } + case SIZE_COND_G: + { + rset->min_size = size + 1; + break; + } + case SIZE_COND_GE: + { + rset->min_size = size; + break; + } + } + } + } +} + +static void +rec_rset_update_field_props (rec_rset_t rset) +{ + rec_rset_fprops_t props = NULL; +#if defined REC_CRYPT_SUPPORT + const char *confidential_field_name; +#endif + char *type_name = NULL; + + /* Reset the field properties. */ + props = rset->field_props; + while (props) + { + props->key_p = false; + props->auto_p = false; + if (props->type) + { + rec_type_destroy (props->type); + props->type = NULL; + } + + props = props->next; + } + + if (rset->descriptor) + { + /* Pass 1: scan the record descriptor for % directives, and update + the fields properties accordingly. */ + + rec_field_t field; + rec_mset_iterator_t iter; + + iter = rec_mset_iterator (rec_record_mset (rset->descriptor)); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void**) &field, NULL)) + { + const char *field_name = rec_field_name (field); + const char *field_value = rec_field_value (field); + + /* Update field types. Only valid %type: descriptors are + considered. Invalid descriptors are ignored. */ + + if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_TYPE)) + && rec_rset_type_field_p (field_value)) + { + size_t i; + rec_fex_t fex = rec_rset_type_field_fex (field_value); + + for (i = 0; i < rec_fex_size (fex); i++) + { + char *field_type = rec_rset_type_field_type (field_value); + rec_type_t type = rec_type_new (field_type); + + if (!type) + { + /* Set field_type as a field property. Note + that if the field is already associated with + an anonymous type, or a type name, they are + replaced. */ + + const char *p = field_type; + rec_parse_regexp (&p, "^" REC_TYPE_NAME_RE, &type_name); + props = rec_rset_get_props (rset, + rec_fex_elem_field_name (rec_fex_get (fex, i)), + true); + if (props->type) + { + rec_type_destroy (props->type); + props->type = NULL; + } + free (props->type_name); + props->type_name = type_name; + } + else + { + /* Set the type as a field property. Note that + if the field is already associated with an + anonymous type, or a type name, they are + replaced. */ + + props = rec_rset_get_props (rset, + rec_fex_elem_field_name (rec_fex_get (fex, i)), + true); + if (props->type) + { + rec_type_destroy (props->type); + } + free (props->type_name); + props->type_name = NULL; + props->type = type; + } + + free (field_type); + } + + rec_fex_destroy (fex); + } + + /* Update the key field. */ + if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_KEY))) + { + /* %key: fields containing incorrect data are + ignored. */ + + const char *field_value = rec_field_value (field); + char *type_name = NULL; + + rec_skip_blanks (&field_value); + rec_parse_regexp (&field_value, "^" REC_RECORD_TYPE_RE, &type_name); + props = rec_rset_get_props (rset, type_name, true); + props->key_p = true; + free (type_name); + } + + /* Update auto fields. */ + if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_AUTO))) + { + /* %auto: fields containing incorrect data are + ignored. */ + + rec_fex_t fex = rec_fex_new (rec_field_value (field), REC_FEX_SIMPLE); + if (fex) + { + size_t i; + + for (i = 0; i < rec_fex_size (fex); i++) + { + const char *auto_field_name + = rec_fex_elem_field_name (rec_fex_get (fex, i)); + props = rec_rset_get_props (rset, auto_field_name, true); + props->auto_p = true; + } + } + } + + /* Update sort fields. The last field takes precedence. */ + if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_SORT))) + { + /* Parse the simple fex in the field value. Invalid + entries are just ignored. */ + + const char *field_value = rec_field_value (field); + + rec_fex_t fex = rec_fex_new (field_value, REC_FEX_SIMPLE); + if (fex) + { + rec_fex_destroy (rset->order_by_fields); + rset->order_by_fields = fex; + } + } + +#if defined REC_CRYPT_SUPPORT + /* Update confidential fields. */ + if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_CONFIDENTIAL))) + { + /* Parse the field names in the field value. Ignore + invalid entries. */ + + rec_fex_t fex = rec_fex_new (rec_field_value (field), REC_FEX_SIMPLE); + if (fex) + { + size_t i; + + for (i = 0; i < rec_fex_size (fex); i++) + { + confidential_field_name = + rec_fex_elem_field_name (rec_fex_get (fex, i)); + props = rec_rset_get_props (rset, confidential_field_name, true); + props->confidential_p = true; + } + } + } +#endif /* REC_CRYPT_SUPPORT */ + + } + + rec_mset_iterator_free (&iter); + } + + /* Pass 2: scan the fields having properties on the record set. */ + + props = rset->field_props; + while (props) + { + /* Auto fields not having an explicit type are implicitly + typed as integers. */ + + if (props->auto_p && !props->type && !props->type_name) + { + props->type = rec_type_new ("int"); + } + + props = props->next; + } +} + +static void +rec_rset_update_types (rec_rset_t rset) +{ + rec_field_t field; + rec_mset_iterator_t iter; + const char *p, *q = NULL; + rec_type_t type; + char *type_name, *to_type = NULL; + + + /* Scan the record descriptor for %typedef directives and update the + types registry accordingly. */ + if (rset->descriptor) + { + /* Purge the registry. */ + + rec_type_reg_destroy (rset->type_reg); + rset->type_reg = rec_type_reg_new (); + + /* Iterate on the fields of the descriptor. */ + + iter = rec_mset_iterator (rec_record_mset (rset->descriptor)); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) + { + const char *field_name = rec_field_name (field); + const char *field_value = rec_field_value (field); + + if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_TYPEDEF))) + { + p = field_value; + rec_skip_blanks (&p); + + /* Get the name of the type. */ + if (rec_parse_regexp (&p, "^" REC_TYPE_NAME_RE, &type_name)) + { + /* Get the type. */ + type = rec_type_new (p); + if (type) + { + /* Set the name of the type. */ + rec_type_set_name (type, type_name); + + /* Create and insert the type in the type + registry. */ + rec_type_reg_add (rset->type_reg, type); + } + else + { + /* This could be a synonym. Try to parse a type + name and, if the operation succeeds, insert + the synonym in the registry. */ + rec_skip_blanks (&p); + q = p; + if (rec_parse_regexp (&q, + "^" REC_TYPE_NAME_RE "[ \t\n]*", + NULL)) + { + rec_parse_regexp (&p, "^" REC_TYPE_NAME_RE, &to_type); + rec_type_reg_add_synonym (rset->type_reg, + type_name, + to_type); + } + } + + free (type_name); + } + } + } + + rec_mset_iterator_free (&iter); + } +} + +static bool +rec_rset_type_field_p (const char *str) +{ + const char *p = str; + + /* Check the fex */ + + rec_skip_blanks (&p); + if (!rec_parse_regexp (&p, + "^" REC_FNAME_LIST_CS_RE, + NULL)) + { + return false; + } + rec_skip_blanks (&p); + + /* Check the type description, or the name of a type. */ + + return (rec_type_descr_p (p) + || rec_parse_regexp (&p, "^" REC_TYPE_NAME_RE "[ \t\n]*$", NULL)); +} + +static rec_fex_t +rec_rset_type_field_fex (const char *str) +{ + rec_fex_t fex = NULL; + const char *p; + char *name; + + p = str; + + if (rec_parse_regexp (&p, + "^" REC_FNAME_LIST_CS_RE, + &name)) + { + fex = rec_fex_new (name, REC_FEX_CSV); + free (name); + } + + return fex; +} + +static char* +rec_rset_type_field_type (const char *str) +{ + char *result = NULL; + const char *p; + + if (rec_rset_type_field_p (str)) + { + p = str; + + rec_skip_blanks (&p); + rec_parse_regexp (&p, "^" REC_FNAME_LIST_CS_RE, NULL); + rec_skip_blanks (&p); + + /* Return the rest of the string. */ + result = strdup (p); + } + + return result; +} + +static rec_rset_fprops_t +rec_rset_get_props (rec_rset_t rset, + const char *fname, + bool create_p) +{ + rec_rset_fprops_t props = NULL; + + props = rset->field_props; + while (props) + { + if (rec_field_name_equal_p (fname, props->fname)) + { + break; + } + + props = props->next; + } + + if (!props && create_p) + { + /* Create a new properties structure for this field name and + initialize it. */ + props = malloc (sizeof (struct rec_rset_fprops_s)); + if (props) + { + props->fname = strdup (fname); + props->auto_p = false; + props->key_p = false; + +#if defined REC_CRYPT_SUPPORT + props->confidential_p = false; +#endif + + props->type = NULL; + props->type_name = NULL; + + /* Prepend it to the field properties list. */ + props->next = rset->field_props; + rset->field_props = props; + } + } + + return props; +} + +static bool +rec_rset_add_auto_field_int (rec_rset_t rset, + const char *field_name, + rec_record_t record) +{ + rec_mset_iterator_t iter; + rec_record_t rec; + rec_field_t field; + size_t num_fields, i; + int auto_value, field_value; + char *end; + char *auto_value_str; + + /* Find the auto value. */ + + auto_value = 0; + + iter = rec_mset_iterator (rec_rset_mset (rset)); + while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **) &rec, NULL)) + { + num_fields = rec_record_get_num_fields_by_name (rec, field_name); + for (i = 0; i < num_fields; i++) + { + field = rec_record_get_field_by_name (rec, field_name, i); + + /* Ignore fields that can't be converted to integer + values. */ + errno = 0; + field_value = strtol (rec_field_value (field), &end, 10); + if ((errno == 0) && (*end == '\0')) + { + if (auto_value <= field_value) + { + auto_value = field_value + 1; + } + } + } + } + + rec_mset_iterator_free (&iter); + + /* Create and insert the auto field. */ + + if (asprintf (&auto_value_str, "%d", auto_value) != -1) + { + field = rec_field_new (field_name, auto_value_str); + if (!field) + { + /* Out of memory. */ + free (auto_value_str); + return false; + } + + if (!rec_mset_insert_at (rec_record_mset (record), MSET_FIELD, (void *) field, 0)) + { + /* Out of memory. */ + free (auto_value_str); + return false; + } + + free (auto_value_str); + } + + return true; +} + +static bool +rec_rset_add_auto_field_date (rec_rset_t rset, + const char *field_name, + rec_record_t record) +{ + rec_field_t auto_field; + time_t t; + char outstr[200]; + struct tm *tmp; + + t = time (NULL); + tmp = localtime (&t); + + setlocale (LC_TIME, "C"); /* We want english dates that can be + parsed with parse_datetime */ + strftime (outstr, sizeof(outstr), "%a, %d %b %Y %T %z", tmp); + setlocale (LC_TIME, ""); /* And restore the locale from the + environment. */ + + auto_field = rec_field_new (field_name, outstr); + if (!auto_field) + { + /* Out of memory. */ + return false; + } + + if (!rec_mset_insert_at (rec_record_mset (record), MSET_FIELD, (void *) auto_field, 0)) + { + /* Out of memory. */ + return false; + } + + return true; +} + +#if defined UUID_TYPE + +static bool +rec_rset_add_auto_field_uuid (rec_rset_t rset, + const char *field_name, + rec_record_t record) +{ + rec_field_t auto_field; + uuid_t uu; + char uu_str[40]; /* Enough to hold any standard UUID. */ + + /* Generate a new time-based UUID using the libuuid library and use + it for the value of the new auto field. */ + + uuid_generate_time (uu); + uuid_unparse (uu, uu_str); + + auto_field = rec_field_new (field_name, uu_str); + if (!auto_field) + { + /* Out of memory. */ + return false; + } + + if (!rec_mset_insert_at (rec_record_mset (record), MSET_FIELD, (void *) auto_field, 0)) + { + /* Out of memory. */ + return false; + } + + return true; +} + +#endif /* UUID_TYPE */ + +static rec_record_t +rec_rset_merge_records (rec_record_t to_record, + rec_record_t from_record, + rec_fex_t group_by_fields) +{ + rec_mset_elem_t elem; + void *data; + rec_mset_iterator_t iter; + + iter = rec_mset_iterator (rec_record_mset (from_record)); + while (rec_mset_iterator_next (&iter, MSET_ANY, (const void**) &data, &elem)) + { + if (rec_mset_elem_type (elem) == MSET_FIELD) + { + rec_field_t field = (rec_field_t) data; + + /* Don't add the field if it is in the list of group-by + fields. */ + + if (rec_fex_member_p (group_by_fields, rec_field_name (field), -1, -1)) + { + continue; + } + + /* Don't allow duplicated fields in the resulting record + generated as a result of this operation. This is + commented out because it fucks up the usage of aggregated + functions in grouped-by record sets. */ + + /* if (rec_record_contains_field (to_record, + rec_field_name (field), + rec_field_value (field))) + { + continue; + } */ + + /* Ok, add this field. */ + + if (!rec_mset_append (rec_record_mset (to_record), + MSET_FIELD, + (void *) rec_field_dup (field), + MSET_ANY)) + { + /* Out of memory. */ + return NULL; + } + } + else + { + rec_comment_t comment = (rec_comment_t) data; + rec_mset_append (rec_record_mset (to_record), + MSET_COMMENT, + (void *) rec_comment_dup (comment), + MSET_ANY); + } + } + rec_mset_iterator_free (&iter); + + return to_record; +} + +static int +rec_rset_compare_typed_records (rec_rset_t rset, + rec_record_t record1, + rec_record_t record2, + rec_fex_t fields) +{ + int result = 0; + size_t i = 0; + size_t num_fields = rec_fex_size (fields); + + for (i = 0; i < num_fields; i++) + { + rec_fex_elem_t elem = rec_fex_get (fields, i); + const char *field_name = rec_fex_elem_field_name (elem); + rec_field_t field1 = rec_record_get_field_by_name (record1, field_name, 0); + rec_field_t field2 = rec_record_get_field_by_name (record2, field_name, 0); + + /* If any of the fields is not present in some of the records + then that record is considered to be smaller than the record + featuring the other one. */ + + if (field1 && !field2) + { + result = 1; /* field1 > field2 */ + break; + } + else if (!field1 && field2) + { + result = -1; /* field1 < field2 */ + break; + } + else if (!field1 && !field2) + { + result = -1; /* field1 < field2 */ + break; + } + + /* A field with such a name exists in both records. Compare the + field typed values. */ + + result = rec_type_values_cmp (rec_rset_get_field_type (rset, field_name), + rec_field_value (field1), + rec_field_value (field2)); + + if (result != 0) + { + /* Either (a1, a2, ...) < (b1, b2, ...) or (a1, a2, ...) > + (b1, b2, ...) */ + + break; + } + } + + return result; +} + +/* End of rec-rset.c */ diff --git a/devspec.en_US/project/recutils/src/rec-sex-ast.c b/devspec.en_US/project/recutils/src/rec-sex-ast.c new file mode 100755 index 0000000..0a8bb71 --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-sex-ast.c @@ -0,0 +1,437 @@ +/* -*- mode: C -*- + * + * File: rec-sex-ast.c + * Date: Tue Jan 12 17:29:03 2010 + * + * GNU recutils - SEX Abstract Syntax Trees + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> +#include <stdio.h> + +#include <rec-sex-ast.h> + +/* + * Data types + */ + +#define REC_SEX_AST_MAX_CHILDREN 3 + +struct rec_sex_ast_node_s +{ + enum rec_sex_ast_node_type_e type; + union { + int integer; + double real; + char *string; + char *name[2]; + } val; + + int index; + bool fixed; + char *fixed_val; + rec_sex_ast_node_t children[REC_SEX_AST_MAX_CHILDREN]; + size_t num_children; +}; + +struct rec_sex_ast_s +{ + rec_sex_ast_node_t top; +}; + +/* + * Public functions + */ + +rec_sex_ast_t +rec_sex_ast_new () +{ + rec_sex_ast_t new; + + new = malloc (sizeof (struct rec_sex_ast_s)); + if (new) + { + new->top = NULL; + } + + return new; +} + +void +rec_sex_ast_destroy (rec_sex_ast_t ast) +{ + if (ast->top) + { + rec_sex_ast_node_destroy (ast->top); + } + + free (ast); +} + +rec_sex_ast_node_t +rec_sex_ast_node_new (void) +{ + rec_sex_ast_node_t new; + + new = malloc (sizeof(struct rec_sex_ast_node_s)); + if (new) + { + new->type = REC_SEX_NOVAL; + new->num_children = 0; + new->index = -1; + new->fixed = false; + new->fixed_val = NULL; + } + + return new; +} + +void +rec_sex_ast_node_destroy (rec_sex_ast_node_t node) +{ + size_t i; + + /* Destroy children. */ + for (i = 0; i < node->num_children; i++) + { + rec_sex_ast_node_destroy (node->children[i]); + } + + /* Destroy values. */ + if (node->type == REC_SEX_STR) + { + free (node->val.string); + } + else if (node->type == REC_SEX_NAME) + { + free (node->val.name[0]); + free (node->val.name[1]); + } + + free (node->fixed_val); + free (node); +} + +enum rec_sex_ast_node_type_e +rec_sex_ast_node_type (rec_sex_ast_node_t node) +{ + return node->type; +} + +void +rec_sex_ast_node_set_type (rec_sex_ast_node_t node, + enum rec_sex_ast_node_type_e type) +{ + node->type = type; +} + +int +rec_sex_ast_node_int (rec_sex_ast_node_t node) +{ + return node->val.integer; +} + +void +rec_sex_ast_node_set_int (rec_sex_ast_node_t node, + int num) +{ + node->type = REC_SEX_INT; + node->val.integer = num; +} + +double +rec_sex_ast_node_real (rec_sex_ast_node_t node) +{ + return node->val.real; +} + +void +rec_sex_ast_node_set_real (rec_sex_ast_node_t node, + double num) +{ + node->type = REC_SEX_REAL; + node->val.real = num; +} + +char * +rec_sex_ast_node_str (rec_sex_ast_node_t node) +{ + return node->val.string; +} + +void +rec_sex_ast_node_set_str (rec_sex_ast_node_t node, + char *str) +{ + if (node->type == REC_SEX_STR) + { + free (node->val.string); + } + + node->type = REC_SEX_STR; + node->val.string = strdup (str); +} + +const char * +rec_sex_ast_node_name (rec_sex_ast_node_t node) +{ + return node->val.name[0]; +} + +const char * +rec_sex_ast_node_subname (rec_sex_ast_node_t node) +{ + return node->val.name[1]; +} + +void +rec_sex_ast_node_set_name (rec_sex_ast_node_t node, + const char *name, + const char *subname) +{ + if (node->type == REC_SEX_NAME) + { + free (node->val.name[0]); + free (node->val.name[1]); + } + + node->type = REC_SEX_NAME; + node->val.name[0] = strdup (name); + node->val.name[1] = NULL; + if (subname) + { + node->val.name[1] = strdup (subname); + } +} + +void +rec_sex_ast_node_link (rec_sex_ast_node_t parent, + rec_sex_ast_node_t child) +{ + if (parent->num_children < REC_SEX_AST_MAX_CHILDREN) + { + parent->children[parent->num_children++] = child; + } +} + +rec_sex_ast_node_t +rec_sex_ast_top (rec_sex_ast_t ast) +{ + return ast->top; +} + +void +rec_sex_ast_set_top (rec_sex_ast_t ast, + rec_sex_ast_node_t node) +{ + ast->top = node; +} + +void +rec_sex_ast_print_node (rec_sex_ast_node_t node) +{ + int i; + + for (i = 0; i < node->num_children; i++) + { + rec_sex_ast_print_node (node->children[i]); + } + + printf ("------- node\n"); + printf ("type: %d\n", node->type); + if (node->type == REC_SEX_INT) + { + printf("value: %d\n", node->val.integer); + } + if (node->type == REC_SEX_NAME) + { + printf("value: %s\n", node->val.name[0]); + } + if (node->type == REC_SEX_STR) + { + printf("value: %s\n", node->val.string); + } + + printf("\n"); +} + +int +rec_sex_ast_node_num_children (rec_sex_ast_node_t node) +{ + return node->num_children; +} + +rec_sex_ast_node_t +rec_sex_ast_node_child (rec_sex_ast_node_t node, + int n) +{ + rec_sex_ast_node_t res; + + res = NULL; + if (n < node->num_children) + { + res = node->children[n]; + } + + return res; +} + +void +rec_sex_ast_node_reset (rec_sex_ast_node_t node) +{ + int i; + + for (i = 0; i < node->num_children; i++) + { + rec_sex_ast_node_reset (node->children[i]); + } + + node->index = 0; +} + +void +rec_sex_ast_node_fix (rec_sex_ast_node_t node, + char *val) +{ + free (node->fixed_val); + node->fixed = true; + node->fixed_val = strdup (val); +} + +void +rec_sex_ast_node_unfix (rec_sex_ast_node_t node) +{ + int i; + + for (i = 0; i < node->num_children; i++) + { + rec_sex_ast_node_unfix (node->children[i]); + } + + node->fixed = false; +} + +bool +rec_sex_ast_node_fixed (rec_sex_ast_node_t node) +{ + return node->fixed; +} + +char * +rec_sex_ast_node_fixed_val (rec_sex_ast_node_t node) +{ + return node->fixed_val; +} + +int +rec_sex_ast_node_index (rec_sex_ast_node_t node) +{ + return node->index; +} + +void +rec_sex_ast_node_set_index (rec_sex_ast_node_t node, + int index) +{ + node->index = index; +} + +void +rec_sex_ast_print (rec_sex_ast_t ast) +{ + rec_sex_ast_print_node (ast->top); +} + +bool +rec_sex_ast_name_p_1 (rec_sex_ast_node_t node, + const char *name, + size_t idx) +{ + size_t i = 0; + + if (node) + { + if ((node->type == REC_SEX_NAME) + && ((node->index == -1) || (node->index < idx)) + && (strcmp (name, node->val.name[0]) == 0)) + { + return true; + } + + for (i = 0; i < node->num_children; i++) + { + if (rec_sex_ast_name_p_1 (node->children[i], name, idx)) + { + return true; + } + } + } + + return false; +} + +bool +rec_sex_ast_name_p (rec_sex_ast_t ast, + const char *name, + size_t idx) +{ + /* Traverse the AST looking for any name node NAME[I] where I < + idx. */ + + return rec_sex_ast_name_p_1 (ast->top, + name, + idx); +} + +static bool +rec_sex_ast_hash_name_p_1 (rec_sex_ast_node_t node, + const char *name) +{ + if (node) + { + size_t i = 0; + + if ((node->type == REC_SEX_OP_SHA) + && (node->num_children == 1) + && (node->children[0]->type == REC_SEX_NAME) + && (strcmp (name, node->children[0]->val.name[0]) == 0)) + return true; + + for (i = 0; i < node->num_children; i++) + if (rec_sex_ast_hash_name_p_1 (node->children[i], name)) + return true; + } + + return false; +} + +bool +rec_sex_ast_hash_name_p (rec_sex_ast_t ast, + const char *name) +{ + /* Traverse the AST looking for any name node NAME whose father is a + REC_SEX_OP_SHA. */ + return rec_sex_ast_hash_name_p_1 (ast->top, name); +} + +/* End of rec-sex-ast.c */ diff --git a/devspec.en_US/project/recutils/src/rec-sex-ast.h b/devspec.en_US/project/recutils/src/rec-sex-ast.h new file mode 100755 index 0000000..a461e1f --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-sex-ast.h @@ -0,0 +1,137 @@ +/* -*- mode: C -*- + * + * File: rec-sex-ast.h + * Date: Tue Jan 12 17:07:59 2010 + * + * GNU recutils - SEX Abstract Syntax Trees + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef REC_SEX_AST_H +#define REC_SEX_AST_H + +#include <config.h> + +#include <stdbool.h> + +enum rec_sex_ast_node_type_e +{ + REC_SEX_NOVAL, + + /* Operations. */ + REC_SEX_OP_NEG, + REC_SEX_OP_ADD, + REC_SEX_OP_SUB, + REC_SEX_OP_MUL, + REC_SEX_OP_DIV, + REC_SEX_OP_MOD, + REC_SEX_OP_EQL, + REC_SEX_OP_NEQ, + REC_SEX_OP_MAT, + REC_SEX_OP_LT, + REC_SEX_OP_GT, + REC_SEX_OP_LTE, + REC_SEX_OP_GTE, + REC_SEX_OP_AND, + REC_SEX_OP_OR, + REC_SEX_OP_NOT, + REC_SEX_OP_SHA, + REC_SEX_OP_SAMETIME, + REC_SEX_OP_IMPLIES, + REC_SEX_OP_BEFORE, + REC_SEX_OP_AFTER, + REC_SEX_OP_COND, + REC_SEX_OP_CONCAT, + + /* Values. */ + REC_SEX_INT, + REC_SEX_REAL, + REC_SEX_STR, + REC_SEX_NAME +}; + +typedef struct rec_sex_ast_node_s *rec_sex_ast_node_t; +typedef struct rec_sex_ast_s *rec_sex_ast_t; + +/* + * Public functions. + */ + + +/* Creation and destruction of ASTs. */ +rec_sex_ast_t rec_sex_ast_new (); +void rec_sex_ast_destroy (rec_sex_ast_t ast); + +/* Running the AST. */ +/* Not here but in rec-sex.c int rec_sex_ast_run (rec_sex_ast_t ast, rec_record_t record); */ + +rec_sex_ast_node_t rec_sex_ast_top (rec_sex_ast_t ast); +void rec_sex_ast_set_top (rec_sex_ast_t ast, rec_sex_ast_node_t node); + +/* Nodes management. */ +rec_sex_ast_node_t rec_sex_ast_node_new (void); +void rec_sex_ast_node_destroy (rec_sex_ast_node_t node); + +enum rec_sex_ast_node_type_e rec_sex_ast_node_type (rec_sex_ast_node_t node); +void rec_sex_ast_node_set_type (rec_sex_ast_node_t node, + enum rec_sex_ast_node_type_e type); + +int rec_sex_ast_node_int (rec_sex_ast_node_t node); +void rec_sex_ast_node_set_int (rec_sex_ast_node_t node, int num); +double rec_sex_ast_node_real (rec_sex_ast_node_t node); +void rec_sex_ast_node_set_real (rec_sex_ast_node_t node, double num); +char *rec_sex_ast_node_str (rec_sex_ast_node_t node); +void rec_sex_ast_node_set_str (rec_sex_ast_node_t node, char *str); +const char *rec_sex_ast_node_name (rec_sex_ast_node_t node); +const char *rec_sex_ast_node_subname (rec_sex_ast_node_t node); +void rec_sex_ast_node_set_name (rec_sex_ast_node_t node, const char *name, const char *subname); + +int rec_sex_ast_node_num_children (rec_sex_ast_node_t node); + +rec_sex_ast_node_t rec_sex_ast_node_child (rec_sex_ast_node_t node, + int n); + +void rec_sex_ast_node_link (rec_sex_ast_node_t parent, + rec_sex_ast_node_t child); + +void rec_sex_ast_node_reset (rec_sex_ast_node_t node); +int rec_sex_ast_node_index (rec_sex_ast_node_t node); +void rec_sex_ast_node_set_index (rec_sex_ast_node_t node, + int index); + +void rec_sex_ast_print (rec_sex_ast_t ast); + +void rec_sex_ast_node_fix (rec_sex_ast_node_t node, char *val); +void rec_sex_ast_node_unfix (rec_sex_ast_node_t node); +bool rec_sex_ast_node_fixed (rec_sex_ast_node_t node); +char *rec_sex_ast_node_fixed_val (rec_sex_ast_node_t node); + +/* This function returns 'true' if there is a node on AST of type + REC_SEX_NAME where NAME.name == NAME and NAME.idx <= IDX. */ +bool rec_sex_ast_name_p (rec_sex_ast_t ast, const char *name, size_t idx); + +/* This function returns 'true' if there is a node on AST of type + REC_SEX_NAME where NAME.name == NAME and the parent of the node is + of type REC_SEX_OP_SHA, i.e. it recognizes #NAME in the source. */ +bool rec_sex_ast_hash_name_p (rec_sex_ast_t ast, const char *name); + +#endif /* rec-sex-ast.h */ + + +/* End of rec-sex-ast.h */ diff --git a/devspec.en_US/project/recutils/src/rec-sex-lex.c b/devspec.en_US/project/recutils/src/rec-sex-lex.c new file mode 100755 index 0000000..a861edd --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-sex-lex.c @@ -0,0 +1,2656 @@ +#line 2 "rec-sex-lex.c" + /* This code goes at the "top" of the generated file. */ + #include <config.h> + +#line 6 "rec-sex-lex.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +/* %not-for-header */ + +/* %if-c-only */ +/* %if-not-reentrant */ +/* %endif */ +/* %endif */ +/* %ok-for-header */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 1 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* %if-c++-only */ +/* %endif */ + +/* %if-c-only */ + +/* %endif */ + +/* %if-c-only */ + +/* %endif */ + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +/* %if-c-only */ +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <stdlib.h> +/* %endif */ + +/* %if-tables-serialization */ +/* %endif */ +/* end standard C headers. */ + +/* %if-c-or-c++ */ +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include <inttypes.h> +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* %endif */ + +/* %if-c++-only */ +/* %endif */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* %not-for-header */ + +/* Returned upon end-of-file. */ +#define YY_NULL 0 +/* %ok-for-header */ + +/* %not-for-header */ + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) +/* %ok-for-header */ + +/* %if-reentrant */ + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* %endif */ + +/* %if-not-reentrant */ +/* %endif */ + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE sexrestart(yyin ,yyscanner ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +/* %if-not-reentrant */ +/* %endif */ + +/* %if-c-only */ +/* %if-not-reentrant */ +/* %endif */ +/* %endif */ + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + #define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { +/* %if-c-only */ + FILE *yy_input_file; +/* %endif */ + +/* %if-c++-only */ +/* %endif */ + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via sexrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* %if-c-only Standard (non-C++) definition */ +/* %not-for-header */ + +/* %if-not-reentrant */ +/* %endif */ +/* %ok-for-header */ + +/* %endif */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +/* %if-c-only Standard (non-C++) definition */ + +/* %if-not-reentrant */ +/* %not-for-header */ + +/* %ok-for-header */ + +/* %endif */ + +void sexrestart (FILE *input_file ,yyscan_t yyscanner ); +void sex_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +YY_BUFFER_STATE sex_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); +void sex_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void sex_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void sexpush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +void sexpop_buffer_state (yyscan_t yyscanner ); + +static void sexensure_buffer_stack (yyscan_t yyscanner ); +static void sex_load_buffer_state (yyscan_t yyscanner ); +static void sex_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner ); + +#define YY_FLUSH_BUFFER sex_flush_buffer(YY_CURRENT_BUFFER ,yyscanner) + +YY_BUFFER_STATE sex_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); +YY_BUFFER_STATE sex_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); +YY_BUFFER_STATE sex_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner ); + +/* %endif */ + +void *sexalloc (yy_size_t ,yyscan_t yyscanner ); +void *sexrealloc (void *,yy_size_t ,yyscan_t yyscanner ); +void sexfree (void * ,yyscan_t yyscanner ); + +#define yy_new_buffer sex_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + sexensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + sex_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + sexensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + sex_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */ +/* Begin user sect3 */ + +#define sexwrap(yyscanner) (/*CONSTCOND*/1) +#define YY_SKIP_YYWRAP + +#define FLEX_DEBUG + +typedef unsigned char YY_CHAR; + +typedef int yy_state_type; + +#define yytext_ptr yytext_r + +/* %% [1.5] DFA */ + +/* %if-c-only Standard (non-C++) definition */ + +static yy_state_type yy_get_previous_state (yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner); +static int yy_get_next_buffer (yyscan_t yyscanner ); +static void yynoreturn yy_fatal_error (yyconst char* msg ,yyscan_t yyscanner ); + +/* %endif */ + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ +/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\ + yyleng = (int) (yy_cp - yy_bp); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ +/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\ + yyg->yy_c_buf_p = yy_cp; + +/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ +#define YY_NUM_RULES 32 +#define YY_END_OF_BUFFER 33 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[64] = + { 0, + 0, 0, 33, 31, 1, 1, 17, 31, 25, 7, + 28, 31, 21, 22, 14, 4, 5, 31, 6, 3, + 3, 27, 20, 15, 19, 26, 29, 31, 18, 16, + 0, 30, 0, 23, 0, 0, 0, 3, 3, 2, + 0, 9, 10, 12, 13, 11, 8, 0, 29, 0, + 24, 0, 30, 0, 0, 30, 0, 3, 29, 0, + 29, 29, 0 + } ; + +static yyconst YY_CHAR yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 4, 5, 6, 1, 7, 8, 9, 10, + 11, 12, 13, 1, 14, 15, 16, 17, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 19, 1, 20, + 21, 22, 23, 1, 24, 24, 24, 24, 24, 24, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 26, 27, 28, 1, 29, 1, 24, 24, 24, 24, + + 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 30, + 25, 25, 1, 31, 1, 32, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst YY_CHAR yy_meta[33] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 1, 3, 3, 1, 1, + 1, 1, 1, 3, 3, 3, 1, 1, 3, 3, + 1, 1 + } ; + +static yyconst flex_uint16_t yy_base[70] = + { 0, + 0, 0, 105, 127, 127, 127, 83, 28, 127, 127, + 94, 25, 127, 127, 127, 127, 20, 22, 127, 26, + 30, 127, 29, 32, 36, 127, 36, 69, 127, 127, + 37, 127, 41, 127, 50, 51, 48, 52, 56, 58, + 62, 127, 127, 127, 127, 127, 127, 59, 46, 70, + 127, 58, 76, 85, 82, 83, 84, 77, 73, 79, + 72, 127, 127, 112, 115, 117, 120, 123, 33 + } ; + +static yyconst flex_int16_t yy_def[70] = + { 0, + 63, 1, 63, 63, 63, 63, 63, 64, 63, 63, + 63, 65, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 66, 63, 63, 63, + 64, 63, 67, 63, 65, 68, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 66, 63, + 63, 64, 64, 67, 65, 65, 68, 63, 69, 63, + 69, 63, 0, 63, 63, 63, 63, 63, 63 + } ; + +static yyconst flex_uint16_t yy_nxt[160] = + { 0, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 27, 4, 4, 4, 4, 27, + 28, 29, 32, 32, 37, 61, 38, 39, 40, 40, + 37, 32, 39, 39, 37, 53, 39, 39, 42, 43, + 48, 36, 44, 45, 33, 41, 46, 47, 32, 56, + 48, 50, 32, 33, 40, 40, 37, 54, 39, 39, + 37, 50, 39, 39, 40, 40, 36, 57, 58, 58, + 32, 41, 59, 59, 33, 58, 60, 60, 59, 53, + 32, 32, 56, 58, 58, 60, 60, 50, 50, 51, + + 58, 34, 33, 30, 63, 63, 62, 63, 36, 36, + 57, 54, 31, 31, 31, 35, 35, 35, 49, 49, + 52, 52, 52, 55, 55, 55, 3, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63 + } ; + +static yyconst flex_int16_t yy_chk[160] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 8, 12, 17, 69, 17, 17, 18, 18, + 20, 31, 20, 20, 21, 33, 21, 21, 23, 23, + 27, 12, 24, 24, 8, 20, 25, 25, 35, 36, + 49, 27, 52, 31, 37, 37, 38, 33, 38, 38, + 39, 49, 39, 39, 40, 40, 35, 36, 41, 41, + 53, 38, 48, 48, 52, 41, 50, 50, 48, 54, + 55, 56, 57, 58, 58, 60, 60, 61, 59, 28, + + 58, 11, 53, 7, 3, 0, 60, 0, 55, 56, + 57, 54, 64, 64, 64, 65, 65, 65, 66, 66, + 67, 67, 67, 68, 68, 68, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63 + } ; + +static yyconst flex_int16_t yy_rule_linenum[32] = + { 0, + 82, 84, 97, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 136, 159, + 173 + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "../../src/rec-sex-lex.l" +/* -*- mode: C -*- + * + * File: rec-sex.l + * Date: Sat Jan 9 16:35:18 2010 + * + * GNU recutils - Selection Expressions lexer + * + */ +/* Copyright (C) 2010-2019 Jose E. Marchesi */ +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ +/* Automake needs this. */ +#define YY_NO_INPUT 1 + +#line 44 "../../src/rec-sex-lex.l" +#include <rec-utils.h> + +#include <rec-sex-ast.h> +#include <rec-sex-parser.h> +#include <rec-sex-tab.h> + +#define YY_INPUT(buf,result,max_size) \ + { \ + int ci; \ + if ((ci = rec_sex_parser_getc ((rec_sex_parser_t) yyextra)) == -1) \ + { \ + result = YY_NULL; \ + } \ + else \ + { \ + buf[0] = (char) ci; \ + result = 1; \ + } \ + } + + /* Forward prototypes for functions defined below. */ + char *rec_sex_lex_extract_name (char *str); + char *rec_sex_lex_extract_subname (char *str); + bool rec_sex_lex_extract_index (char *str, int *num); + +/* Please do not touch this comment' */ +#line 632 "rec-sex-lex.c" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +/* %if-c-only */ +#include <unistd.h> +/* %endif */ +/* %if-c++-only */ +/* %endif */ +#endif + +#define YY_EXTRA_TYPE void * + +/* %if-c-only Reentrant structure and macros (non-C++). */ +/* %if-reentrant */ + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + int yy_n_chars; + int yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + YYSTYPE * yylval_r; + + }; /* end struct yyguts_t */ + +/* %if-c-only */ + +static int yy_init_globals (yyscan_t yyscanner ); + +/* %endif */ + +/* %if-reentrant */ + + /* This must go here because YYSTYPE and YYLTYPE are included + * from bison output in section 1.*/ + # define yylval yyg->yylval_r + +int sexlex_init (yyscan_t* scanner); + +int sexlex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); + +/* %endif */ + +/* %endif End reentrant structures and macros. */ + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int sexlex_destroy (yyscan_t yyscanner ); + +int sexget_debug (yyscan_t yyscanner ); + +void sexset_debug (int debug_flag ,yyscan_t yyscanner ); + +YY_EXTRA_TYPE sexget_extra (yyscan_t yyscanner ); + +void sexset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); + +FILE *sexget_in (yyscan_t yyscanner ); + +void sexset_in (FILE * _in_str ,yyscan_t yyscanner ); + +FILE *sexget_out (yyscan_t yyscanner ); + +void sexset_out (FILE * _out_str ,yyscan_t yyscanner ); + + int sexget_leng (yyscan_t yyscanner ); + +char *sexget_text (yyscan_t yyscanner ); + +int sexget_lineno (yyscan_t yyscanner ); + +void sexset_lineno (int _line_number ,yyscan_t yyscanner ); + +int sexget_column (yyscan_t yyscanner ); + +void sexset_column (int _column_no ,yyscan_t yyscanner ); + +/* %if-bison-bridge */ + +YYSTYPE * sexget_lval (yyscan_t yyscanner ); + +void sexset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner ); + +/* %endif */ + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int sexwrap (yyscan_t yyscanner ); +#else +extern int sexwrap (yyscan_t yyscanner ); +#endif +#endif + +/* %not-for-header */ + +#ifndef YY_NO_UNPUT + +#endif +/* %ok-for-header */ + +/* %endif */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT +/* %if-c-only Standard (non-C++) definition */ +/* %not-for-header */ + +#ifdef __cplusplus +static int yyinput (yyscan_t yyscanner ); +#else +static int input (yyscan_t yyscanner ); +#endif +/* %ok-for-header */ + +/* %endif */ +#endif + +/* %if-c-only */ + +/* %endif */ + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* %if-c-only Standard (non-C++) definition */ +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) +/* %endif */ +/* %if-c++-only C++ definition */ +/* %endif */ +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ +/* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + size_t n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = (int) fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ +/* %if-c++-only C++ definition \ */\ +/* %endif */ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +/* %if-c-only */ +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +/* %endif */ +/* %if-c++-only */ +/* %endif */ +#endif + +/* %if-tables-serialization structures and prototypes */ +/* %not-for-header */ + +/* %ok-for-header */ + +/* %not-for-header */ + +/* %tables-yydmap generated elements */ +/* %endif */ +/* end tables serialization structures and prototypes */ + +/* %ok-for-header */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 +/* %if-c-only Standard (non-C++) definition */ + +extern int sexlex \ + (YYSTYPE * yylval_param ,yyscan_t yyscanner); + +#define YY_DECL int sexlex \ + (YYSTYPE * yylval_param , yyscan_t yyscanner) +/* %endif */ +/* %if-c++-only C++ definition */ +/* %endif */ +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +/* %% [6.0] YY_RULE_SETUP definition goes here */ +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/* %not-for-header */ + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yylval = yylval_param; + + if ( !yyg->yy_init ) + { + yyg->yy_init = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) +/* %if-c-only */ + yyin = stdin; +/* %endif */ +/* %if-c++-only */ +/* %endif */ + + if ( ! yyout ) +/* %if-c-only */ + yyout = stdout; +/* %endif */ +/* %if-c++-only */ +/* %endif */ + + if ( ! YY_CURRENT_BUFFER ) { + sexensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + sex_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + } + + sex_load_buffer_state(yyscanner ); + } + + { +/* %% [7.0] user's declarations go here */ +#line 80 "../../src/rec-sex-lex.l" + + +#line 978 "rec-sex-lex.c" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { +/* %% [8.0] yymore()-related code goes here */ + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + +/* %% [9.0] code to set up and find next match goes here */ + yy_current_state = yyg->yy_start; +yy_match: + do + { + YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 64 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 127 ); + +yy_find_action: +/* %% [10.0] code to find the action number goes here */ + yy_act = yy_accept[yy_current_state]; + if ( yy_act == 0 ) + { /* have to back up */ + yy_cp = yyg->yy_last_accepting_cpos; + yy_current_state = yyg->yy_last_accepting_state; + yy_act = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + +/* %% [11.0] code for yylineno update goes here */ + +do_action: /* This label is used only to access EOF actions. */ + +/* %% [12.0] debug code goes here */ + if ( yy_flex_debug ) + { + if ( yy_act == 0 ) + fprintf( stderr, "--scanner backing up\n" ); + else if ( yy_act < 32 ) + fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", + (long)yy_rule_linenum[yy_act], yytext ); + else if ( yy_act == 32 ) + fprintf( stderr, "--accepting default rule (\"%s\")\n", + yytext ); + else if ( yy_act == 33 ) + fprintf( stderr, "--(end of buffer or a NUL)\n" ); + else + fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); + } + + switch ( yy_act ) + { /* beginning of action switch */ +/* %% [13.0] actions go here */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = yyg->yy_hold_char; + yy_cp = yyg->yy_last_accepting_cpos; + yy_current_state = yyg->yy_last_accepting_state; + goto yy_find_action; + +case 1: +/* rule 1 can match eol */ +YY_RULE_SETUP +#line 82 "../../src/rec-sex-lex.l" +{ /* Ignore whitespace */ } + YY_BREAK +case 2: +YY_RULE_SETUP +#line 84 "../../src/rec-sex-lex.l" +{ + /* + * Create a real node. + */ + double real_value; + + yylval->node = rec_sex_ast_node_new (); + rec_atod (yytext, &real_value); + rec_sex_ast_node_set_real (yylval->node, real_value); + + return REC_SEX_TOK_REAL; +} + YY_BREAK +case 3: +YY_RULE_SETUP +#line 97 "../../src/rec-sex-lex.l" +{ + /* + * Create an integer node. + */ + int integer_value; + + yylval->node = rec_sex_ast_node_new (); + rec_atoi (yytext, &integer_value); + rec_sex_ast_node_set_int (yylval->node, integer_value); + + return REC_SEX_TOK_INT; +} + YY_BREAK +case 4: +YY_RULE_SETUP +#line 110 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_ADD; } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 111 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_SUB; } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 112 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_DIV; } + YY_BREAK +case 7: +YY_RULE_SETUP +#line 113 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_MOD; } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 114 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_AFTER; } + YY_BREAK +case 9: +YY_RULE_SETUP +#line 115 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_BEFORE; } + YY_BREAK +case 10: +YY_RULE_SETUP +#line 116 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_LTE; } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 117 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_GTE; } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 118 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_SAMETIME; } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 119 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_IMPLIES; } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 120 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_MUL; } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 121 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_EQL; } + YY_BREAK +case 16: +YY_RULE_SETUP +#line 122 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_NEQ; } + YY_BREAK +case 17: +YY_RULE_SETUP +#line 123 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_NOT; } + YY_BREAK +case 18: +YY_RULE_SETUP +#line 124 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_MAT; } + YY_BREAK +case 19: +YY_RULE_SETUP +#line 125 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_GT; } + YY_BREAK +case 20: +YY_RULE_SETUP +#line 126 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_LT; } + YY_BREAK +case 21: +YY_RULE_SETUP +#line 127 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_BP; } + YY_BREAK +case 22: +YY_RULE_SETUP +#line 128 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_EP; } + YY_BREAK +case 23: +YY_RULE_SETUP +#line 129 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_AND; } + YY_BREAK +case 24: +YY_RULE_SETUP +#line 130 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_OR; } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 131 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_SHARP; } + YY_BREAK +case 26: +YY_RULE_SETUP +#line 132 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_QM; } + YY_BREAK +case 27: +YY_RULE_SETUP +#line 133 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_COLON; } + YY_BREAK +case 28: +YY_RULE_SETUP +#line 134 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_AMP; } + YY_BREAK +case 29: +YY_RULE_SETUP +#line 136 "../../src/rec-sex-lex.l" +{ + int res; + char *match; + char *name, *subname; + int index = -1; + + match = strdup (yytext); + rec_sex_lex_extract_index (match, &index); + name = rec_sex_lex_extract_name (match); + subname = rec_sex_lex_extract_subname (match); + + /* Create a name node. */ + yylval->node = rec_sex_ast_node_new (); + rec_sex_ast_node_set_name (yylval->node, name, subname); + rec_sex_ast_node_set_index (yylval->node, index); + res = REC_SEX_TOK_NAM; + + free (name); + free (match); + + return res; +} + YY_BREAK +case 30: +/* rule 30 can match eol */ +YY_RULE_SETUP +#line 159 "../../src/rec-sex-lex.l" +{ + /* + * Create a string node. + */ + + /* Strip the quoting characters */ + yytext[strlen(yytext) - 1] = 0; + + yylval->node = rec_sex_ast_node_new (); + rec_sex_ast_node_set_str (yylval->node, yytext + 1); + + return REC_SEX_TOK_STR; +} + YY_BREAK +case 31: +YY_RULE_SETUP +#line 173 "../../src/rec-sex-lex.l" +{ return REC_SEX_TOK_ERR; } + YY_BREAK +case 32: +YY_RULE_SETUP +#line 175 "../../src/rec-sex-lex.l" +ECHO; + YY_BREAK +#line 1275 "rec-sex-lex.c" +case YY_STATE_EOF(INITIAL): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * sexlex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; +/* %if-c-only */ + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; +/* %endif */ +/* %if-c++-only */ +/* %endif */ + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { +/* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */ + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( sexwrap(yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of sexlex */ +/* %ok-for-header */ + +/* %if-c++-only */ +/* %not-for-header */ + +/* %ok-for-header */ + +/* %endif */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +/* %if-c-only */ +static int yy_get_next_buffer (yyscan_t yyscanner) +/* %endif */ +/* %if-c++-only */ +/* %endif */ +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = yyg->yytext_ptr; + int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + sexrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + sexrestart(yyin ,yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) sexrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + +/* %if-c-only */ +/* %not-for-header */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +/* %endif */ +/* %if-c++-only */ +/* %endif */ +{ + yy_state_type yy_current_state; + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + +/* %% [15.0] code to get the start state into yy_current_state goes here */ + yy_current_state = yyg->yy_start; + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { +/* %% [16.0] code to find the next state goes here */ + YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 64 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ +/* %if-c-only */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +/* %endif */ +/* %if-c++-only */ +/* %endif */ +{ + int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ +/* %% [17.0] code to find the next state, and perhaps do backing up, goes here */ + char *yy_cp = yyg->yy_c_buf_p; + + YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 64 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c]; + yy_is_jam = (yy_current_state == 63); + + (void)yyg; + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT +/* %if-c-only */ + +/* %endif */ +#endif + +/* %if-c-only */ +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +/* %endif */ +/* %if-c++-only */ +/* %endif */ +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + int offset = yyg->yy_c_buf_p - yyg->yytext_ptr; + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + sexrestart(yyin ,yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( sexwrap(yyscanner ) ) + return 0; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + +/* %% [19.0] update BOL and yylineno */ + + return c; +} +/* %if-c-only */ +#endif /* ifndef YY_NO_INPUT */ +/* %endif */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ +/* %if-c-only */ + void sexrestart (FILE * input_file , yyscan_t yyscanner) +/* %endif */ +/* %if-c++-only */ +/* %endif */ +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + sexensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + sex_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + } + + sex_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner); + sex_load_buffer_state(yyscanner ); +} + +/* %if-c++-only */ +/* %endif */ + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ +/* %if-c-only */ + void sex_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +/* %endif */ +/* %if-c++-only */ +/* %endif */ +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * sexpop_buffer_state(); + * sexpush_buffer_state(new_buffer); + */ + sexensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + sex_load_buffer_state(yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (sexwrap()) processing, but the only time this flag + * is looked at is after sexwrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/* %if-c-only */ +static void sex_load_buffer_state (yyscan_t yyscanner) +/* %endif */ +/* %if-c++-only */ +/* %endif */ +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; +/* %if-c-only */ + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; +/* %endif */ +/* %if-c++-only */ +/* %endif */ + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ +/* %if-c-only */ + YY_BUFFER_STATE sex_create_buffer (FILE * file, int size , yyscan_t yyscanner) +/* %endif */ +/* %if-c++-only */ +/* %endif */ +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) sexalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in sex_create_buffer()" ); + + b->yy_buf_size = (yy_size_t)size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) sexalloc(b->yy_buf_size + 2 ,yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in sex_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + sex_init_buffer(b,file ,yyscanner); + + return b; +} + +/* %if-c++-only */ +/* %endif */ + +/** Destroy the buffer. + * @param b a buffer created with sex_create_buffer() + * @param yyscanner The scanner object. + */ +/* %if-c-only */ + void sex_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +/* %endif */ +/* %if-c++-only */ +/* %endif */ +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + sexfree((void *) b->yy_ch_buf ,yyscanner ); + + sexfree((void *) b ,yyscanner ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a sexrestart() or at EOF. + */ +/* %if-c-only */ + static void sex_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) +/* %endif */ +/* %if-c++-only */ +/* %endif */ + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + sex_flush_buffer(b ,yyscanner); + +/* %if-c-only */ + b->yy_input_file = file; +/* %endif */ +/* %if-c++-only */ +/* %endif */ + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then sex_init_buffer was _probably_ + * called from sexrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + +/* %if-c-only */ + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + +/* %endif */ +/* %if-c++-only */ +/* %endif */ + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ +/* %if-c-only */ + void sex_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +/* %endif */ +/* %if-c++-only */ +/* %endif */ +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + sex_load_buffer_state(yyscanner ); +} + +/* %if-c-or-c++ */ +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +/* %if-c-only */ +void sexpush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +/* %endif */ +/* %if-c++-only */ +/* %endif */ +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + sexensure_buffer_stack(yyscanner); + + /* This block is copied from sex_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from sex_switch_to_buffer. */ + sex_load_buffer_state(yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} +/* %endif */ + +/* %if-c-or-c++ */ +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +/* %if-c-only */ +void sexpop_buffer_state (yyscan_t yyscanner) +/* %endif */ +/* %if-c++-only */ +/* %endif */ +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + sex_delete_buffer(YY_CURRENT_BUFFER ,yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + sex_load_buffer_state(yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} +/* %endif */ + +/* %if-c-or-c++ */ +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +/* %if-c-only */ +static void sexensure_buffer_stack (yyscan_t yyscanner) +/* %endif */ +/* %if-c++-only */ +/* %endif */ +{ + int num_to_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + yyg->yy_buffer_stack = (struct yy_buffer_state**)sexalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in sexensure_buffer_stack()" ); + + memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = num_to_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)sexrealloc + (yyg->yy_buffer_stack, + num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in sexensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = num_to_alloc; + } +} +/* %endif */ + +/* %if-c-only */ +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE sex_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return NULL; + + b = (YY_BUFFER_STATE) sexalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in sex_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = NULL; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + sex_switch_to_buffer(b ,yyscanner ); + + return b; +} +/* %endif */ + +/* %if-c-only */ +/** Setup the input buffer state to scan a string. The next call to sexlex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * sex_scan_bytes() instead. + */ +YY_BUFFER_STATE sex_scan_string (yyconst char * yystr , yyscan_t yyscanner) +{ + + return sex_scan_bytes(yystr,(int) strlen(yystr) ,yyscanner); +} +/* %endif */ + +/* %if-c-only */ +/** Setup the input buffer state to scan the given bytes. The next call to sexlex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE sex_scan_bytes (yyconst char * yybytes, int _yybytes_len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) sexalloc(n ,yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in sex_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = sex_scan_buffer(buf,n ,yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in sex_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} +/* %endif */ + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +/* %if-c-only */ +static void yynoreturn yy_fatal_error (yyconst char* msg , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} +/* %endif */ +/* %if-c++-only */ +/* %endif */ + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/* %if-c-only */ +/* %if-reentrant */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE sexget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/* %endif */ + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int sexget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int sexget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *sexget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *sexget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +int sexget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *sexget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/* %if-reentrant */ + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void sexset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/* %endif */ + +/** Set the current line number. + * @param _line_number line number + * @param yyscanner The scanner object. + */ +void sexset_lineno (int _line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "sexset_lineno called with no buffer" ); + + yylineno = _line_number; +} + +/** Set the current column. + * @param _column_no column number + * @param yyscanner The scanner object. + */ +void sexset_column (int _column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "sexset_column called with no buffer" ); + + yycolumn = _column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param _in_str A readable stream. + * @param yyscanner The scanner object. + * @see sex_switch_to_buffer + */ +void sexset_in (FILE * _in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = _in_str ; +} + +void sexset_out (FILE * _out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = _out_str ; +} + +int sexget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void sexset_debug (int _bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = _bdebug ; +} + +/* %endif */ + +/* %if-reentrant */ +/* Accessor methods for yylval and yylloc */ + +/* %if-bison-bridge */ + +YYSTYPE * sexget_lval (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yylval; +} + +void sexset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yylval = yylval_param; +} + +/* %endif */ + +/* User-visible API */ + +/* sexlex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ + +int sexlex_init(yyscan_t* ptr_yy_globals) + +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) sexalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* sexlex_init_extra has the same functionality as sexlex_init, but follows the + * convention of taking the scanner as the last argument. Note however, that + * this is a *pointer* to a scanner, as it will be allocated by this call (and + * is the reason, too, why this function also must handle its own declaration). + * The user defined value in the first argument will be available to sexalloc in + * the yyextra field. + */ + +int sexlex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals ) + +{ + struct yyguts_t dummy_yyguts; + + sexset_extra (yy_user_defined, &dummy_yyguts); + + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) sexalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in + yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + sexset_extra (yy_user_defined, *ptr_yy_globals); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* %endif if-c-only */ + +/* %if-c-only */ +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from sexlex_destroy(), so don't allocate here. + */ + + yyg->yy_buffer_stack = NULL; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = NULL; + yyg->yy_init = 0; + yyg->yy_start = 0; + + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = NULL; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = NULL; + yyout = NULL; +#endif + + /* For future reference: Set errno on error, since we are called by + * sexlex_init() + */ + return 0; +} +/* %endif */ + +/* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */ +/* sexlex_destroy is for both reentrant and non-reentrant scanners. */ +int sexlex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + sex_delete_buffer(YY_CURRENT_BUFFER ,yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + sexpop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + sexfree(yyg->yy_buffer_stack ,yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + sexfree(yyg->yy_start_stack ,yyscanner ); + yyg->yy_start_stack = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * sexlex() is called, initialization will occur. */ + yy_init_globals( yyscanner); + +/* %if-reentrant */ + /* Destroy the main struct (reentrant only). */ + sexfree ( yyscanner , yyscanner ); + yyscanner = NULL; +/* %endif */ + return 0; +} +/* %endif */ + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *sexalloc (yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + return malloc(size); +} + +void *sexrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void sexfree (void * ptr , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + free( (char *) ptr ); /* see sexrealloc() for (char *) cast */ +} + +/* %if-tables-serialization definitions */ +/* %define-yytables The name for this specific scanner's tables. */ +#define YYTABLES_NAME "yytables" +/* %endif */ + +/* %ok-for-header */ + +#line 175 "../../src/rec-sex-lex.l" + + + +char * +rec_sex_lex_extract_name (char *str) +{ + size_t size; + char *res; + char *p; + + p = str; + while ((*p != '[') && (*p != '.') && (*p != 0)) + { + p++; + } + + size = p - str; + res = malloc (size + 1); + memcpy (res, str, size); + res[size] = 0; + + return res; +} + +char * +rec_sex_lex_extract_subname (char *str) +{ + char *p; + + /* If there is not a subname denoted in STR then this function + returns NULL. */ + + p = str; + while ((*p != '.') && (*p != '\0')) + { + p++; + } + + if (*p == '\0') + { + /* There is not a second name. */ + return NULL; + } + + p++; /* Skip the dot separator. */ + + return rec_sex_lex_extract_name (p); +} + +bool +rec_sex_lex_extract_index (char *str, + int *num) +{ + bool res; + char *p; + char aux[100]; + int aux_size; + + /* Note that this function assumes syntax correctness in STR if a + '[' is found. */ + + aux_size = 0; + p = str; + while ((*p != 0) && (*p != '[')) + { + p++; + } + + if (*p == 0) + { + res = false; + } + else + { + p++; /* Pass the [. */ + while (*p != ']') + { + aux[aux_size++] = *p; + p++; + } + aux[aux_size] = 0; + + if (!rec_atoi (aux, num)) + { + res = false; + } + + res = true; + } + + return res; +} + +/* End of rec-sex.l */ + diff --git a/devspec.en_US/project/recutils/src/rec-sex-lex.l b/devspec.en_US/project/recutils/src/rec-sex-lex.l new file mode 100755 index 0000000..a1f8596 --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-sex-lex.l @@ -0,0 +1,267 @@ +/* -*- mode: C -*- + * + * File: rec-sex.l + * Date: Sat Jan 9 16:35:18 2010 + * + * GNU recutils - Selection Expressions lexer + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/* Automake needs this. */ +%option outfile="lex.yy.c" +%option prefix="sex" +%option pointer +%option noyywrap +%option reentrant +%option bison-bridge +%option extra-type="void *" + +%option header-file="rec-sex-lex.h" +%option nounput +%option noinput +%top { + /* This code goes at the "top" of the generated file. */ + #include <config.h> +} + +%{ +#include <rec-utils.h> + +#include <rec-sex-ast.h> +#include <rec-sex-parser.h> +#include <rec-sex-tab.h> + +#define YY_INPUT(buf,result,max_size) \ + { \ + int ci; \ + if ((ci = rec_sex_parser_getc ((rec_sex_parser_t) yyextra)) == -1) \ + { \ + result = YY_NULL; \ + } \ + else \ + { \ + buf[0] = (char) ci; \ + result = 1; \ + } \ + } + + /* Forward prototypes for functions defined below. */ + char *rec_sex_lex_extract_name (char *str); + char *rec_sex_lex_extract_subname (char *str); + bool rec_sex_lex_extract_index (char *str, int *num); + +%} + +NEWLINE \n +BLANK [ \t\n] +DIGIT [0-9] +LETTER [a-zA-Z] +FIELD_NAME {LETTER}[a-zA-Z0-9_]* +STRING '([^']|\\(.|\n))*'|\"([^"]|\\(.|\n))*\" + +/* Please do not touch this comment' */ + +%% + +{BLANK} { /* Ignore whitespace */ } + +"-"?{DIGIT}*\.{DIGIT}+ { + /* + * Create a real node. + */ + double real_value; + + yylval->node = rec_sex_ast_node_new (); + rec_atod (yytext, &real_value); + rec_sex_ast_node_set_real (yylval->node, real_value); + + return REC_SEX_TOK_REAL; +} + +"-"?((0x[0-9a-fA-F]+)|{DIGIT}+) { + /* + * Create an integer node. + */ + int integer_value; + + yylval->node = rec_sex_ast_node_new (); + rec_atoi (yytext, &integer_value); + rec_sex_ast_node_set_int (yylval->node, integer_value); + + return REC_SEX_TOK_INT; +} + +"+" { return REC_SEX_TOK_ADD; } +"-" { return REC_SEX_TOK_SUB; } +"/" { return REC_SEX_TOK_DIV; } +"%" { return REC_SEX_TOK_MOD; } +">>" { return REC_SEX_TOK_AFTER; } +"<<" { return REC_SEX_TOK_BEFORE; } +"<=" { return REC_SEX_TOK_LTE; } +">=" { return REC_SEX_TOK_GTE; } +"==" { return REC_SEX_TOK_SAMETIME; } +"=>" { return REC_SEX_TOK_IMPLIES; } +"*" { return REC_SEX_TOK_MUL; } +"=" { return REC_SEX_TOK_EQL; } +"!=" { return REC_SEX_TOK_NEQ; } +"!" { return REC_SEX_TOK_NOT; } +"~" { return REC_SEX_TOK_MAT; } +">" { return REC_SEX_TOK_GT; } +"<" { return REC_SEX_TOK_LT; } +"(" { return REC_SEX_TOK_BP; } +")" { return REC_SEX_TOK_EP; } +"&&" { return REC_SEX_TOK_AND; } +"||" { return REC_SEX_TOK_OR; } +"#" { return REC_SEX_TOK_SHARP; } +"?" { return REC_SEX_TOK_QM; } +":" { return REC_SEX_TOK_COLON; } +"&" { return REC_SEX_TOK_AMP; } + +{FIELD_NAME}(\.{FIELD_NAME})?(\[[0-9]+\])? { + int res; + char *match; + char *name, *subname; + int index = -1; + + match = strdup (yytext); + rec_sex_lex_extract_index (match, &index); + name = rec_sex_lex_extract_name (match); + subname = rec_sex_lex_extract_subname (match); + + /* Create a name node. */ + yylval->node = rec_sex_ast_node_new (); + rec_sex_ast_node_set_name (yylval->node, name, subname); + rec_sex_ast_node_set_index (yylval->node, index); + res = REC_SEX_TOK_NAM; + + free (name); + free (match); + + return res; +} + +{STRING} { + /* + * Create a string node. + */ + + /* Strip the quoting characters */ + yytext[strlen(yytext) - 1] = 0; + + yylval->node = rec_sex_ast_node_new (); + rec_sex_ast_node_set_str (yylval->node, yytext + 1); + + return REC_SEX_TOK_STR; +} + +. { return REC_SEX_TOK_ERR; } + +%% + +char * +rec_sex_lex_extract_name (char *str) +{ + size_t size; + char *res; + char *p; + + p = str; + while ((*p != '[') && (*p != '.') && (*p != 0)) + { + p++; + } + + size = p - str; + res = malloc (size + 1); + memcpy (res, str, size); + res[size] = 0; + + return res; +} + +char * +rec_sex_lex_extract_subname (char *str) +{ + char *p; + + /* If there is not a subname denoted in STR then this function + returns NULL. */ + + p = str; + while ((*p != '.') && (*p != '\0')) + { + p++; + } + + if (*p == '\0') + { + /* There is not a second name. */ + return NULL; + } + + p++; /* Skip the dot separator. */ + + return rec_sex_lex_extract_name (p); +} + +bool +rec_sex_lex_extract_index (char *str, + int *num) +{ + bool res; + char *p; + char aux[100]; + int aux_size; + + /* Note that this function assumes syntax correctness in STR if a + '[' is found. */ + + aux_size = 0; + p = str; + while ((*p != 0) && (*p != '[')) + { + p++; + } + + if (*p == 0) + { + res = false; + } + else + { + p++; /* Pass the [. */ + while (*p != ']') + { + aux[aux_size++] = *p; + p++; + } + aux[aux_size] = 0; + + if (!rec_atoi (aux, num)) + { + res = false; + } + + res = true; + } + + return res; +} + +/* End of rec-sex.l */ diff --git a/devspec.en_US/project/recutils/src/rec-sex-parser.c b/devspec.en_US/project/recutils/src/rec-sex-parser.c new file mode 100755 index 0000000..7a639ce --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-sex-parser.c @@ -0,0 +1,173 @@ +/* -*- mode: C -*- + * + * File: rec-sex-parser.c + * Date: Tue Jan 12 18:01:37 2010 + * + * GNU recutils - Sexy parser + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> +#include <stdio.h> + +#include <rec-sex-parser.h> +#include "rec-sex-tab.h" +/*#include "rec-sex-lex.h" */ + +/* + * Data types + */ + +struct rec_sex_parser_s +{ + char *in; /* String to be parsed. */ + size_t index; /* Index in in_str. */ + void *scanner; /* Flex scanner. */ + bool case_insensitive; + + rec_sex_ast_t ast; +}; + +/* + * Public functions + */ + +rec_sex_parser_t +rec_sex_parser_new (void) +{ + rec_sex_parser_t new; + + new = malloc (sizeof (struct rec_sex_parser_s)); + if (new) + { + new->in = NULL; + new->index = 0; + new->case_insensitive = false; + + /* Initialize the sexy scanner. */ + sexlex_init (&(new->scanner)); + sexset_extra (new, new->scanner); + } + + return new; +} + +void * +rec_sex_parser_scanner (rec_sex_parser_t parser) +{ + return parser->scanner; +} + +void +rec_sex_parser_destroy (rec_sex_parser_t parser) +{ + if (parser->scanner) + { + sexlex_destroy (parser->scanner); + } + + free (parser->in); + free (parser); +} + +rec_sex_ast_t +rec_sex_parser_ast (rec_sex_parser_t parser) +{ + return parser->ast; +} + +void +rec_sex_parser_set_ast (rec_sex_parser_t parser, + rec_sex_ast_t ast) +{ + parser->ast = ast; +} + +bool +rec_sex_parser_case_insensitive (rec_sex_parser_t parser) +{ + return parser->case_insensitive; +} + +void +rec_sex_parser_set_case_insensitive (rec_sex_parser_t parser, + bool case_insensitive) +{ + parser->case_insensitive = case_insensitive; +} + +void +rec_sex_parser_set_in (rec_sex_parser_t parser, + const char *str) +{ + if (parser->in) + { + free (parser->in); + parser->in = NULL; + } + + parser->in = strdup (str); + parser->index = 0; +} + +int +rec_sex_parser_getc (rec_sex_parser_t parser) +{ + int res; + + res = -1; + if ((parser->in) + && (parser->index < strlen (parser->in))) + { + res = parser->in[parser->index++]; + } + + return res; +} + +bool +rec_sex_parser_run (rec_sex_parser_t parser, + const char *expr) +{ + int res; + + rec_sex_parser_set_in (parser, expr); + if (!sexparse (parser)) + { + res = true; + } + else + { + /* Parse error. */ + res = false; + } + + return res; +} + +void +rec_sex_parser_print_ast (rec_sex_parser_t parser) +{ + rec_sex_ast_print (parser->ast); +} + +/* End of rec-sex-parser.c */ diff --git a/devspec.en_US/project/recutils/src/rec-sex-parser.h b/devspec.en_US/project/recutils/src/rec-sex-parser.h new file mode 100755 index 0000000..2f1a8b3 --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-sex-parser.h @@ -0,0 +1,60 @@ +/* -*- mode: C -*- + * + * File: rec-sex-parser.h + * Date: Tue Jan 12 17:59:45 2010 + * + * GNU recutils - Sexy parser + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + + +#ifndef REC_SEX_PARSER_H +#define REC_SEX_PARSER_H + +#include <config.h> + +#include <stdbool.h> + +#include <rec-sex-ast.h> + +typedef struct rec_sex_parser_s *rec_sex_parser_t; + +/* + * Public functions + */ + +rec_sex_parser_t rec_sex_parser_new (void); +void rec_sex_parser_destroy (rec_sex_parser_t parser); + +bool rec_sex_parser_case_insensitive (rec_sex_parser_t parser); +void rec_sex_parser_set_case_insensitive (rec_sex_parser_t parser, + bool case_insensitive); +void rec_sex_parser_set_in (rec_sex_parser_t parser, + const char *str); +int rec_sex_parser_getc (rec_sex_parser_t parser); +rec_sex_ast_t rec_sex_parser_ast (rec_sex_parser_t parser); +void rec_sex_parser_set_ast (rec_sex_parser_t parser, rec_sex_ast_t ast); +bool rec_sex_parser_run (rec_sex_parser_t parser, const char *expr); +void *rec_sex_parser_scanner (rec_sex_parser_t parser); + +void rec_sex_parser_print_ast (rec_sex_parser_t parser); + +#endif /* rec-sex-parser.h */ + +/* End of rec-sex-parser.h */ diff --git a/devspec.en_US/project/recutils/src/rec-sex-tab.c b/devspec.en_US/project/recutils/src/rec-sex-tab.c new file mode 100755 index 0000000..48564d6 --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-sex-tab.c @@ -0,0 +1,1778 @@ +/* A Bison parser, made by GNU Bison 3.0.4. */ + +/* Bison implementation for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "3.0.4" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + + +/* Substitute the variable and function names. */ +#define yyparse sexparse +#define yylex sexlex +#define yyerror sexerror +#define yydebug sexdebug +#define yynerrs sexnerrs + + +/* Copy the first part of user declarations. */ +#line 31 "../../src/rec-sex-tab.y" /* yacc.c:339 */ + + #include <config.h> + + #include <stdlib.h> + #include <stdio.h> + #include <string.h> + #include <regex.h> + + #include <rec-sex-ast.h> + #include <rec-sex-parser.h> + #include "rec-sex-tab.h" + /* #include "rec-sex-lex.h" */ + + void sexerror (rec_sex_parser_t context, const char *err) + { + /* Do nothing. */ + } + + #define scanner (rec_sex_parser_scanner (sex_parser)) + + #define CREATE_NODE_OP1(TYPE,RES,OP) \ + do \ + { \ + /* Create the node. */ \ + (RES) = rec_sex_ast_node_new (); \ + rec_sex_ast_node_set_type ((RES), (TYPE)); \ + \ + /* Set children. */ \ + rec_sex_ast_node_link ((RES), (OP)); \ + } \ + while (0) + +#define CREATE_NODE_OP2(TYPE, RES, OP1, OP2) \ + do \ + { \ + /* Create the node. */ \ + (RES) = rec_sex_ast_node_new (); \ + rec_sex_ast_node_set_type ((RES), (TYPE)); \ + \ + /* Set children. */ \ + rec_sex_ast_node_link ((RES), (OP1)); \ + rec_sex_ast_node_link ((RES), (OP2)); \ + } \ + while (0) + +#define CREATE_NODE_OP3(TYPE, RES, OP1, OP2, OP3) \ + do \ + { \ + /* Create the node. */ \ + (RES) = rec_sex_ast_node_new (); \ + rec_sex_ast_node_set_type ((RES), (TYPE)); \ + \ + /* Set children. */ \ + rec_sex_ast_node_link ((RES), (OP1)); \ + rec_sex_ast_node_link ((RES), (OP2)); \ + rec_sex_ast_node_link ((RES), (OP3)); \ + } \ + while (0) + + +#line 133 "rec-sex-tab.c" /* yacc.c:339 */ + +# ifndef YY_NULLPTR +# if defined __cplusplus && 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif +# endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* In a future release of Bison, this section will be replaced + by #include "y.tab.h". */ +#ifndef YY_SEX_REC_SEX_TAB_H_INCLUDED +# define YY_SEX_REC_SEX_TAB_H_INCLUDED +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int sexdebug; +#endif + +/* Token type. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { + REC_SEX_TOK_INT = 258, + REC_SEX_TOK_REAL = 259, + REC_SEX_TOK_STR = 260, + REC_SEX_TOK_NAM = 261, + REC_SEX_TOK_COLON = 262, + REC_SEX_TOK_QM = 263, + REC_SEX_TOK_IMPLIES = 264, + REC_SEX_TOK_AND = 265, + REC_SEX_TOK_OR = 266, + REC_SEX_TOK_EQL = 267, + REC_SEX_TOK_NEQ = 268, + REC_SEX_TOK_LT = 269, + REC_SEX_TOK_GT = 270, + REC_SEX_TOK_LTE = 271, + REC_SEX_TOK_GTE = 272, + REC_SEX_TOK_SAMETIME = 273, + REC_SEX_TOK_AFTER = 274, + REC_SEX_TOK_BEFORE = 275, + REC_SEX_TOK_SUB = 276, + REC_SEX_TOK_ADD = 277, + REC_SEX_TOK_MUL = 278, + REC_SEX_TOK_DIV = 279, + REC_SEX_TOK_MOD = 280, + REC_SEX_TOK_MAT = 281, + REC_SEX_TOK_AMP = 282, + REC_SEX_TOK_NEG = 283, + REC_SEX_TOK_MIN = 284, + REC_SEX_TOK_NOT = 285, + REC_SEX_TOK_BP = 286, + REC_SEX_TOK_EP = 287, + REC_SEX_TOK_ERR = 288, + REC_SEX_TOK_SHARP = 289 + }; +#endif + +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED + +union YYSTYPE +{ +#line 92 "../../src/rec-sex-tab.y" /* yacc.c:355 */ + + rec_sex_ast_node_t node; + rec_sex_ast_t ast; + +#line 213 "rec-sex-tab.c" /* yacc.c:355 */ +}; + +typedef union YYSTYPE YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 +#endif + + + +int sexparse (rec_sex_parser_t sex_parser); + +#endif /* !YY_SEX_REC_SEX_TAB_H_INCLUDED */ + +/* Copy the second part of user declarations. */ + +#line 229 "rec-sex-tab.c" /* yacc.c:358 */ + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#else +typedef signed char yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T +# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include <libintl.h> /* INFRINGES ON USER NAME SPACE */ +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) +# endif +# endif +# ifndef YY_ +# define YY_(Msgid) Msgid +# endif +#endif + +#ifndef YY_ATTRIBUTE +# if (defined __GNUC__ \ + && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ + || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C +# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +# else +# define YY_ATTRIBUTE(Spec) /* empty */ +# endif +#endif + +#ifndef YY_ATTRIBUTE_PURE +# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) +#endif + +#if !defined _Noreturn \ + && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) +# if defined _MSC_VER && 1200 <= _MSC_VER +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(E) ((void) (E)) +#else +# define YYUSE(E) /* empty */ +#endif + +#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") +#else +# define YY_INITIAL_VALUE(Value) Value +#endif +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include <alloca.h> /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include <malloc.h> /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS +# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's 'empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined EXIT_SUCCESS +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined EXIT_SUCCESS +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +# define YYCOPY_NEEDED 1 + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) + +#endif + +#if defined YYCOPY_NEEDED && YYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) +# else +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ + while (0) +# endif +# endif +#endif /* !YYCOPY_NEEDED */ + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 13 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 157 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 35 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 3 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 29 +/* YYNSTATES -- Number of states. */ +#define YYNSTATES 57 + +/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned + by yylex, with out-of-bounds checking. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 289 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, without out-of-bounds checking. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34 +}; + +#if YYDEBUG + /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ +static const yytype_uint8 yyrline[] = +{ + 0, 124, 124, 134, 135, 136, 137, 138, 140, 141, + 142, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || 0 +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "REC_SEX_TOK_INT", "REC_SEX_TOK_REAL", + "REC_SEX_TOK_STR", "REC_SEX_TOK_NAM", "REC_SEX_TOK_COLON", + "REC_SEX_TOK_QM", "REC_SEX_TOK_IMPLIES", "REC_SEX_TOK_AND", + "REC_SEX_TOK_OR", "REC_SEX_TOK_EQL", "REC_SEX_TOK_NEQ", "REC_SEX_TOK_LT", + "REC_SEX_TOK_GT", "REC_SEX_TOK_LTE", "REC_SEX_TOK_GTE", + "REC_SEX_TOK_SAMETIME", "REC_SEX_TOK_AFTER", "REC_SEX_TOK_BEFORE", + "REC_SEX_TOK_SUB", "REC_SEX_TOK_ADD", "REC_SEX_TOK_MUL", + "REC_SEX_TOK_DIV", "REC_SEX_TOK_MOD", "REC_SEX_TOK_MAT", + "REC_SEX_TOK_AMP", "REC_SEX_TOK_NEG", "REC_SEX_TOK_MIN", + "REC_SEX_TOK_NOT", "REC_SEX_TOK_BP", "REC_SEX_TOK_EP", "REC_SEX_TOK_ERR", + "REC_SEX_TOK_SHARP", "$accept", "input", "exp", YY_NULLPTR +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[NUM] -- (External) token number corresponding to the + (internal) symbol number NUM (which must be that of a token). */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289 +}; +# endif + +#define YYPACT_NINF -20 + +#define yypact_value_is_default(Yystate) \ + (!!((Yystate) == (-20))) + +#define YYTABLE_NINF -1 + +#define yytable_value_is_error(Yytable_value) \ + 0 + + /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +static const yytype_int16 yypact[] = +{ + -1, -20, -20, -20, -20, -1, -1, 0, 7, 89, + -20, 43, -20, -20, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -20, 69, 108, 22, 22, 118, + 118, 118, 118, 118, 118, 125, 125, 125, 130, 130, + -19, -19, -19, -19, -20, -1, 89 +}; + + /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE does not specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = +{ + 0, 3, 4, 5, 6, 0, 0, 0, 0, 2, + 24, 0, 28, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 29, 0, 23, 25, 26, 8, + 9, 17, 16, 19, 18, 22, 20, 21, 12, 11, + 13, 14, 15, 10, 27, 0, 7 +}; + + /* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = +{ + -20, -20, -5 +}; + + /* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int8 yydefgoto[] = +{ + -1, 8, 9 +}; + + /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ +static const yytype_uint8 yytable[] = +{ + 10, 11, 1, 2, 3, 4, 12, 13, 33, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 5, + 6, 0, 0, 7, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 56, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 0, 0, 0, 0, 34, 55, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 27, 28, 29, 30, + 31, 32, 33, 29, 30, 31, 32, 33 +}; + +static const yytype_int8 yycheck[] = +{ + 5, 6, 3, 4, 5, 6, 6, 0, 27, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 30, + 31, -1, -1, 34, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + 55, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, -1, -1, -1, -1, 32, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 21, 22, 23, 24, + 25, 26, 27, 23, 24, 25, 26, 27 +}; + + /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 3, 4, 5, 6, 30, 31, 34, 36, 37, + 37, 37, 6, 0, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 32, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 7, 37 +}; + + /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 35, 36, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37 +}; + + /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 1, 1, 1, 1, 1, 5, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 2, 3, 3, 3, 2, 3 +}; + + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (sex_parser, YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (0) + +/* Error token number */ +#define YYTERROR 1 +#define YYERRCODE 256 + + + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include <stdio.h> /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + +/* This macro is provided for backward compatibility. */ +#ifndef YY_LOCATION_PRINT +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +#endif + + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value, sex_parser); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + + +/*----------------------------------------. +| Print this symbol's value on YYOUTPUT. | +`----------------------------------------*/ + +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, rec_sex_parser_t sex_parser) +{ + FILE *yyo = yyoutput; + YYUSE (yyo); + YYUSE (sex_parser); + if (!yyvaluep) + return; +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# endif + YYUSE (yytype); +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, rec_sex_parser_t sex_parser) +{ + YYFPRINTF (yyoutput, "%s %s (", + yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep, sex_parser); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +static void +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +{ + YYFPRINTF (stderr, "Stack now"); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +static void +yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, rec_sex_parser_t sex_parser) +{ + unsigned long int yylno = yyrline[yyrule]; + int yynrhs = yyr2[yyrule]; + int yyi; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + YYFPRINTF (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, + yystos[yyssp[yyi + 1 - yynrhs]], + &(yyvsp[(yyi + 1) - (yynrhs)]) + , sex_parser); + YYFPRINTF (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, Rule, sex_parser); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +static YYSIZE_T +yystrlen (const char *yystr) +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +static char * +yystpcpy (char *yydest, const char *yysrc) +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message + about the unexpected token YYTOKEN for the state stack whose top is + YYSSP. + + Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is + not large enough to hold the message. In that case, also set + *YYMSG_ALLOC to the required number of bytes. Return 2 if the + required number of bytes is too large to store. */ +static int +yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, + yytype_int16 *yyssp, int yytoken) +{ + YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); + YYSIZE_T yysize = yysize0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + /* Internationalized format string. */ + const char *yyformat = YY_NULLPTR; + /* Arguments of yyformat. */ + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + /* Number of reported tokens (one for the "unexpected", one per + "expected"). */ + int yycount = 0; + + /* There are many possibilities here to consider: + - If this state is a consistent state with a default action, then + the only way this function was invoked is if the default action + is an error action. In that case, don't check for expected + tokens because there are none. + - The only way there can be no lookahead present (in yychar) is if + this state is a consistent state with a default action. Thus, + detecting the absence of a lookahead is sufficient to determine + that there is no unexpected or expected token to report. In that + case, just report a simple "syntax error". + - Don't assume there isn't a lookahead just because this state is a + consistent state with a default action. There might have been a + previous inconsistent state, consistent state with a non-default + action, or user semantic action that manipulated yychar. + - Of course, the expected token list depends on states to have + correct lookahead information, and it depends on the parser not + to perform extra reductions after fetching a lookahead from the + scanner and before detecting a syntax error. Thus, state merging + (from LALR or IELR) and default reductions corrupt the expected + token list. However, the list is correct for canonical LR with + one exception: it will still contain any token that will not be + accepted due to an error action in a later state. + */ + if (yytoken != YYEMPTY) + { + int yyn = yypact[*yyssp]; + yyarg[yycount++] = yytname[yytoken]; + if (!yypact_value_is_default (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yyx; + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR + && !yytable_value_is_error (yytable[yyx + yyn])) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + break; + } + yyarg[yycount++] = yytname[yyx]; + { + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); + if (! (yysize <= yysize1 + && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } + } + } + } + + switch (yycount) + { +# define YYCASE_(N, S) \ + case N: \ + yyformat = S; \ + break + YYCASE_(0, YY_("syntax error")); + YYCASE_(1, YY_("syntax error, unexpected %s")); + YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); + YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); + YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); + YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); +# undef YYCASE_ + } + + { + YYSIZE_T yysize1 = yysize + yystrlen (yyformat); + if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; + } + + if (*yymsg_alloc < yysize) + { + *yymsg_alloc = 2 * yysize; + if (! (yysize <= *yymsg_alloc + && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) + *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; + return 1; + } + + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + { + char *yyp = *yymsg; + int yyi = 0; + while ((*yyp = *yyformat) != '\0') + if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyformat += 2; + } + else + { + yyp++; + yyformat++; + } + } + return 0; +} +#endif /* YYERROR_VERBOSE */ + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, rec_sex_parser_t sex_parser) +{ + YYUSE (yyvaluep); + YYUSE (sex_parser); + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + + + +/*----------. +| yyparse. | +`----------*/ + +int +yyparse (rec_sex_parser_t sex_parser) +{ +/* The lookahead symbol. */ +int yychar; + + +/* The semantic value of the lookahead symbol. */ +/* Default value used for initialization, for pacifying older GCCs + or non-GCC compilers. */ +YY_INITIAL_VALUE (static YYSTYPE yyval_default;) +YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); + + /* Number of syntax errors so far. */ + int yynerrs; + + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + + /* The stacks and their tools: + 'yyss': related to states. + 'yyvs': related to semantic values. + + Refer to the stacks through separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; + + YYSIZE_T yystacksize; + + int yyn; + int yyresult; + /* Lookahead token as an internal (translated) token number. */ + int yytoken = 0; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + yyssp = yyss = yyssa; + yyvsp = yyvs = yyvsa; + yystacksize = YYINITDEPTH; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + if (yystate == YYFINAL) + YYACCEPT; + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to lookahead token. */ + yyn = yypact[yystate]; + if (yypact_value_is_default (yyn)) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = yylex (&yylval, scanner); + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yytable_value_is_error (yyn)) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token. */ + yychar = YYEMPTY; + + yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + '$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: +#line 125 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { + rec_sex_ast_t ast; + + ast = rec_sex_ast_new (); + rec_sex_ast_set_top (ast, (yyvsp[0].node)); + rec_sex_parser_set_ast (sex_parser, ast); + } +#line 1372 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 3: +#line 134 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { (yyval.node) = (yyvsp[0].node); } +#line 1378 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 4: +#line 135 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { (yyval.node) = (yyvsp[0].node); } +#line 1384 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 5: +#line 136 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { (yyval.node) = (yyvsp[0].node); } +#line 1390 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 6: +#line 137 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { (yyval.node) = (yyvsp[0].node); } +#line 1396 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 7: +#line 139 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP3 (REC_SEX_OP_COND, (yyval.node), (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1402 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 8: +#line 140 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_EQL, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1408 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 9: +#line 141 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_NEQ, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1414 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 10: +#line 143 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { + if ((rec_sex_ast_node_type ((yyvsp[-2].node)) == REC_SEX_INT) + || (rec_sex_ast_node_type ((yyvsp[0].node)) == REC_SEX_INT)) + { + rec_sex_ast_node_destroy ((yyvsp[-2].node)); + rec_sex_ast_node_destroy ((yyvsp[0].node)); + YYABORT; + } + + CREATE_NODE_OP2 (REC_SEX_OP_MAT, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); + } +#line 1430 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 11: +#line 154 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_ADD, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1436 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 12: +#line 155 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_SUB, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1442 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 13: +#line 156 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_MUL, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1448 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 14: +#line 157 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_DIV, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1454 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 15: +#line 158 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_MOD, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1460 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 16: +#line 159 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_GT, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1466 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 17: +#line 160 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_LT, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1472 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 18: +#line 161 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_GTE, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1478 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 19: +#line 162 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_LTE, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1484 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 20: +#line 163 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_AFTER, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1490 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 21: +#line 164 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_BEFORE, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1496 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 22: +#line 165 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_SAMETIME, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1502 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 23: +#line 166 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_IMPLIES, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1508 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 24: +#line 167 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP1 (REC_SEX_OP_NOT, (yyval.node), (yyvsp[0].node)); } +#line 1514 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 25: +#line 168 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_AND, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1520 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 26: +#line 169 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_OR, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1526 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 27: +#line 170 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP2 (REC_SEX_OP_CONCAT, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } +#line 1532 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 28: +#line 171 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { CREATE_NODE_OP1 (REC_SEX_OP_SHA, (yyval.node), (yyvsp[0].node)); } +#line 1538 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + case 29: +#line 172 "../../src/rec-sex-tab.y" /* yacc.c:1646 */ + { (yyval.node) = (yyvsp[-1].node); } +#line 1544 "rec-sex-tab.c" /* yacc.c:1646 */ + break; + + +#line 1548 "rec-sex-tab.c" /* yacc.c:1646 */ + default: break; + } + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action invokes + YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or + if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an + incorrect destructor might then be invoked immediately. In the + case of YYERROR or YYBACKUP, subsequent parser actions might lead + to an incorrect destructor call or verbose syntax error message + before the lookahead is translated. */ + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + /* Now 'shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*--------------------------------------. +| yyerrlab -- here on detecting error. | +`--------------------------------------*/ +yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); + + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (sex_parser, YY_("syntax error")); +#else +# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ + yyssp, yytoken) + { + char const *yymsgp = YY_("syntax error"); + int yysyntax_error_status; + yysyntax_error_status = YYSYNTAX_ERROR; + if (yysyntax_error_status == 0) + yymsgp = yymsg; + else if (yysyntax_error_status == 1) + { + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + if (!yymsg) + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + yysyntax_error_status = 2; + } + else + { + yysyntax_error_status = YYSYNTAX_ERROR; + yymsgp = yymsg; + } + } + yyerror (sex_parser, yymsgp); + if (yysyntax_error_status == 2) + goto yyexhaustedlab; + } +# undef YYSYNTAX_ERROR +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval, sex_parser); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule whose action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (!yypact_value_is_default (yyn)) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp, sex_parser); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#if !defined yyoverflow || YYERROR_VERBOSE +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (sex_parser, YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEMPTY) + { + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = YYTRANSLATE (yychar); + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval, sex_parser); + } + /* Do not reclaim the symbols of the rule whose action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp, sex_parser); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + return yyresult; +} +#line 174 "../../src/rec-sex-tab.y" /* yacc.c:1906 */ + + +/* End of rec-sex.y */ diff --git a/devspec.en_US/project/recutils/src/rec-sex-tab.h b/devspec.en_US/project/recutils/src/rec-sex-tab.h new file mode 100755 index 0000000..7176f7b --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-sex-tab.h @@ -0,0 +1,105 @@ +/* A Bison parser, made by GNU Bison 3.0.4. */ + +/* Bison interface for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +#ifndef YY_SEX_REC_SEX_TAB_H_INCLUDED +# define YY_SEX_REC_SEX_TAB_H_INCLUDED +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif +#if YYDEBUG +extern int sexdebug; +#endif + +/* Token type. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { + REC_SEX_TOK_INT = 258, + REC_SEX_TOK_REAL = 259, + REC_SEX_TOK_STR = 260, + REC_SEX_TOK_NAM = 261, + REC_SEX_TOK_COLON = 262, + REC_SEX_TOK_QM = 263, + REC_SEX_TOK_IMPLIES = 264, + REC_SEX_TOK_AND = 265, + REC_SEX_TOK_OR = 266, + REC_SEX_TOK_EQL = 267, + REC_SEX_TOK_NEQ = 268, + REC_SEX_TOK_LT = 269, + REC_SEX_TOK_GT = 270, + REC_SEX_TOK_LTE = 271, + REC_SEX_TOK_GTE = 272, + REC_SEX_TOK_SAMETIME = 273, + REC_SEX_TOK_AFTER = 274, + REC_SEX_TOK_BEFORE = 275, + REC_SEX_TOK_SUB = 276, + REC_SEX_TOK_ADD = 277, + REC_SEX_TOK_MUL = 278, + REC_SEX_TOK_DIV = 279, + REC_SEX_TOK_MOD = 280, + REC_SEX_TOK_MAT = 281, + REC_SEX_TOK_AMP = 282, + REC_SEX_TOK_NEG = 283, + REC_SEX_TOK_MIN = 284, + REC_SEX_TOK_NOT = 285, + REC_SEX_TOK_BP = 286, + REC_SEX_TOK_EP = 287, + REC_SEX_TOK_ERR = 288, + REC_SEX_TOK_SHARP = 289 + }; +#endif + +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED + +union YYSTYPE +{ +#line 92 "../../src/rec-sex-tab.y" /* yacc.c:1909 */ + + rec_sex_ast_node_t node; + rec_sex_ast_t ast; + +#line 94 "rec-sex-tab.h" /* yacc.c:1909 */ +}; + +typedef union YYSTYPE YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 +#endif + + + +int sexparse (rec_sex_parser_t sex_parser); + +#endif /* !YY_SEX_REC_SEX_TAB_H_INCLUDED */ diff --git a/devspec.en_US/project/recutils/src/rec-sex-tab.y b/devspec.en_US/project/recutils/src/rec-sex-tab.y new file mode 100755 index 0000000..96de003 --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-sex-tab.y @@ -0,0 +1,176 @@ +/* -*- mode: C -*- + * + * File: rec-sex.y + * Date: Sat Jan 9 16:36:55 2010 + * + * GNU recutils - Selection Expressions parser + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +%pure-parser +%name-prefix "sex" +%parse-param {rec_sex_parser_t sex_parser} +%lex-param { void *scanner } + +%{ + #include <config.h> + + #include <stdlib.h> + #include <stdio.h> + #include <string.h> + #include <regex.h> + + #include <rec-sex-ast.h> + #include <rec-sex-parser.h> + #include "rec-sex-tab.h" + /* #include "rec-sex-lex.h" */ + + void sexerror (rec_sex_parser_t context, const char *err) + { + /* Do nothing. */ + } + + #define scanner (rec_sex_parser_scanner (sex_parser)) + + #define CREATE_NODE_OP1(TYPE,RES,OP) \ + do \ + { \ + /* Create the node. */ \ + (RES) = rec_sex_ast_node_new (); \ + rec_sex_ast_node_set_type ((RES), (TYPE)); \ + \ + /* Set children. */ \ + rec_sex_ast_node_link ((RES), (OP)); \ + } \ + while (0) + +#define CREATE_NODE_OP2(TYPE, RES, OP1, OP2) \ + do \ + { \ + /* Create the node. */ \ + (RES) = rec_sex_ast_node_new (); \ + rec_sex_ast_node_set_type ((RES), (TYPE)); \ + \ + /* Set children. */ \ + rec_sex_ast_node_link ((RES), (OP1)); \ + rec_sex_ast_node_link ((RES), (OP2)); \ + } \ + while (0) + +#define CREATE_NODE_OP3(TYPE, RES, OP1, OP2, OP3) \ + do \ + { \ + /* Create the node. */ \ + (RES) = rec_sex_ast_node_new (); \ + rec_sex_ast_node_set_type ((RES), (TYPE)); \ + \ + /* Set children. */ \ + rec_sex_ast_node_link ((RES), (OP1)); \ + rec_sex_ast_node_link ((RES), (OP2)); \ + rec_sex_ast_node_link ((RES), (OP3)); \ + } \ + while (0) + +%} + +%union { + rec_sex_ast_node_t node; + rec_sex_ast_t ast; +}; + +/* Bison declarations. */ + +%token <node> REC_SEX_TOK_INT +%token <node> REC_SEX_TOK_REAL +%token <node> REC_SEX_TOK_STR +%token <node> REC_SEX_TOK_NAM +%token <node> REC_SEX_TOK_COLON +%left <node> REC_SEX_TOK_QM +%right <node> REC_SEX_TOK_IMPLIES +%left <node> REC_SEX_TOK_AND REC_SEX_TOK_OR +%left <node> REC_SEX_TOK_EQL REC_SEX_TOK_NEQ REC_SEX_TOK_LT REC_SEX_TOK_GT REC_SEX_TOK_LTE REC_SEX_TOK_GTE +%left <node> REC_SEX_TOK_SAMETIME REC_SEX_TOK_AFTER REC_SEX_TOK_BEFORE +%left <node> REC_SEX_TOK_SUB REC_SEX_TOK_ADD +%left <node> REC_SEX_TOK_MUL REC_SEX_TOK_DIV REC_SEX_TOK_MOD REC_SEX_TOK_MAT +%left <node> REC_SEX_TOK_AMP +%left <node> REC_SEX_TOK_NEG REC_SEX_TOK_MIN /* negation--unary minus */ +%right <node> REC_SEX_TOK_NOT +%token <node> REC_SEX_TOK_BP REC_SEX_TOK_EP +%token <node> REC_SEX_TOK_ERR +%token <node> REC_SEX_TOK_SHARP + +%type <ast> input +%type <node> exp + +%% /* The grammar follows. */ + +input: + exp + { + rec_sex_ast_t ast; + + ast = rec_sex_ast_new (); + rec_sex_ast_set_top (ast, $1); + rec_sex_parser_set_ast (sex_parser, ast); + } + ; + +exp : REC_SEX_TOK_INT { $$ = $1; } + | REC_SEX_TOK_REAL { $$ = $1; } + | REC_SEX_TOK_STR { $$ = $1; } + | REC_SEX_TOK_NAM { $$ = $1; } + | exp REC_SEX_TOK_QM exp REC_SEX_TOK_COLON exp + { CREATE_NODE_OP3 (REC_SEX_OP_COND, $$, $1, $3, $5); } + | exp REC_SEX_TOK_EQL exp { CREATE_NODE_OP2 (REC_SEX_OP_EQL, $$, $1, $3); } + | exp REC_SEX_TOK_NEQ exp { CREATE_NODE_OP2 (REC_SEX_OP_NEQ, $$, $1, $3); } + | exp REC_SEX_TOK_MAT exp + { + if ((rec_sex_ast_node_type ($1) == REC_SEX_INT) + || (rec_sex_ast_node_type ($3) == REC_SEX_INT)) + { + rec_sex_ast_node_destroy ($1); + rec_sex_ast_node_destroy ($3); + YYABORT; + } + + CREATE_NODE_OP2 (REC_SEX_OP_MAT, $$, $1, $3); + } + | exp REC_SEX_TOK_ADD exp { CREATE_NODE_OP2 (REC_SEX_OP_ADD, $$, $1, $3); } + | exp REC_SEX_TOK_SUB exp { CREATE_NODE_OP2 (REC_SEX_OP_SUB, $$, $1, $3); } + | exp REC_SEX_TOK_MUL exp { CREATE_NODE_OP2 (REC_SEX_OP_MUL, $$, $1, $3); } + | exp REC_SEX_TOK_DIV exp { CREATE_NODE_OP2 (REC_SEX_OP_DIV, $$, $1, $3); } + | exp REC_SEX_TOK_MOD exp { CREATE_NODE_OP2 (REC_SEX_OP_MOD, $$, $1, $3); } + | exp REC_SEX_TOK_GT exp { CREATE_NODE_OP2 (REC_SEX_OP_GT, $$, $1, $3); } + | exp REC_SEX_TOK_LT exp { CREATE_NODE_OP2 (REC_SEX_OP_LT, $$, $1, $3); } + | exp REC_SEX_TOK_GTE exp { CREATE_NODE_OP2 (REC_SEX_OP_GTE, $$, $1, $3); } + | exp REC_SEX_TOK_LTE exp { CREATE_NODE_OP2 (REC_SEX_OP_LTE, $$, $1, $3); } + | exp REC_SEX_TOK_AFTER exp { CREATE_NODE_OP2 (REC_SEX_OP_AFTER, $$, $1, $3); } + | exp REC_SEX_TOK_BEFORE exp { CREATE_NODE_OP2 (REC_SEX_OP_BEFORE, $$, $1, $3); } + | exp REC_SEX_TOK_SAMETIME exp { CREATE_NODE_OP2 (REC_SEX_OP_SAMETIME, $$, $1, $3); } + | exp REC_SEX_TOK_IMPLIES exp { CREATE_NODE_OP2 (REC_SEX_OP_IMPLIES, $$, $1, $3); } + | REC_SEX_TOK_NOT exp { CREATE_NODE_OP1 (REC_SEX_OP_NOT, $$, $2); } + | exp REC_SEX_TOK_AND exp { CREATE_NODE_OP2 (REC_SEX_OP_AND, $$, $1, $3); } + | exp REC_SEX_TOK_OR exp { CREATE_NODE_OP2 (REC_SEX_OP_OR, $$, $1, $3); } + | exp REC_SEX_TOK_AMP exp { CREATE_NODE_OP2 (REC_SEX_OP_CONCAT, $$, $1, $3); } + | REC_SEX_TOK_SHARP REC_SEX_TOK_NAM { CREATE_NODE_OP1 (REC_SEX_OP_SHA, $$, $2); } + | REC_SEX_TOK_BP exp REC_SEX_TOK_EP { $$ = $2; } + +%% + +/* End of rec-sex.y */ diff --git a/devspec.en_US/project/recutils/src/rec-sex.c b/devspec.en_US/project/recutils/src/rec-sex.c new file mode 100755 index 0000000..27f152b --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-sex.c @@ -0,0 +1,1172 @@ +/* -*- mode: C -*- + * + * File: rec-sex.c + * Date: Sat Jan 9 20:28:43 2010 + * + * GNU recutils - Record Selection Expressions. + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <stdlib.h> +#include <string.h> +#include <regex.h> +#include <parse-datetime.h> + +#include <rec.h> +#include <rec-utils.h> +#include <rec-sex-ast.h> +#include <rec-sex-parser.h> +#include <rec-sex-tab.h> + +/* + * Data structures + */ + +struct rec_sex_s +{ + rec_sex_ast_t ast; + rec_sex_parser_t parser; +}; + +#define REC_SEX_VAL_INT 0 +#define REC_SEX_VAL_REAL 1 +#define REC_SEX_VAL_STR 2 + +struct rec_sex_val_s +{ + int type; + + int int_val; + double real_val; + char *str_val; +}; + +/* Static functions declarations. */ +static struct rec_sex_val_s rec_sex_eval_node (rec_sex_t sex, + rec_record_t record, + rec_sex_ast_node_t node, + bool *status); +static bool rec_sex_op_real_p (struct rec_sex_val_s op1, + struct rec_sex_val_s op2); + +/* + * Public functions. + */ + +rec_sex_t +rec_sex_new (bool case_insensitive) +{ + rec_sex_t new; + + new = malloc (sizeof (struct rec_sex_s)); + if (new) + { + /* Initialize a new parser. */ + new->parser = rec_sex_parser_new (); + rec_sex_parser_set_case_insensitive (new->parser, + case_insensitive); + + /* Initialize a new AST. */ + new->ast = NULL; + } + + return new; +} + +void +rec_sex_destroy (rec_sex_t sex) +{ + if (sex) + { + if (sex->parser) + { + rec_sex_parser_destroy (sex->parser); + } + + if (sex->ast) + { + rec_sex_ast_destroy (sex->ast); + } + + free (sex); /* yeah! :D */ + } +} + +bool +rec_sex_compile (rec_sex_t sex, + const char *expr) +{ + bool res; + + res = rec_sex_parser_run (sex->parser, expr); + if (res) + { + sex->ast = rec_sex_parser_ast (sex->parser); + } + return res; +} + +#define EXEC_AST(RECORD) \ + do \ + { \ + val = rec_sex_eval_node (sex, \ + (RECORD), \ + rec_sex_ast_top (sex->ast), \ + status); \ + \ + switch (val.type) \ + { \ + case REC_SEX_VAL_INT: \ + { \ + res = (val.int_val != 0); \ + break; \ + } \ + case REC_SEX_VAL_REAL: \ + case REC_SEX_VAL_STR: \ + { \ + res = false; \ + break; \ + } \ + } \ + } \ + while (0) + +char * +rec_sex_eval_str (rec_sex_t sex, + rec_record_t record) +{ + char *res; + struct rec_sex_val_s val; + bool status; + + rec_sex_ast_node_unfix (rec_sex_ast_top (sex->ast)); + val = rec_sex_eval_node (sex, + record, + rec_sex_ast_top (sex->ast), + &status); + + if (!status) + { + /* Error evaluating the expression. */ + return NULL; + } + + res = NULL; + switch (val.type) + { + case REC_SEX_VAL_INT: + { + asprintf (&res, "%d", val.int_val); + break; + } + case REC_SEX_VAL_REAL: + { + asprintf (&res, "%f", val.real_val); + break; + } + case REC_SEX_VAL_STR: + { + res = strdup (val.str_val); + break; + } + } + + return res; +} + +bool +rec_sex_eval (rec_sex_t sex, + rec_record_t record, + bool *status) +{ + bool res; + rec_field_t field; + rec_field_t wfield; + rec_record_t wrec; + rec_mset_iterator_t iter; + int j, nf; + struct rec_sex_val_s val; + + res = false; + wrec = NULL; + + rec_sex_ast_node_unfix (rec_sex_ast_top (sex->ast)); + EXEC_AST (record); + if (res) + { + goto exit; + } + + rec_record_reset_marks (record); + + iter = rec_mset_iterator (rec_record_mset (record)); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void**) &field, NULL)) + { + nf = rec_record_get_num_fields_by_name (record, rec_field_name (field)); + if ((nf > 1) + && (rec_record_field_mark (record, field) == 0) + && (rec_sex_ast_name_p (sex->ast, rec_field_name (field), nf)) + && (!rec_sex_ast_hash_name_p (sex->ast, rec_field_name (field)))) + { + for (j = 0; j < nf; j++) + { + wfield = rec_record_get_field_by_name (record, + rec_field_name (field), + j); + if (wrec) + { + rec_record_destroy (wrec); + } + + rec_record_mark_field (record, wfield, 1); + + wrec = rec_record_dup (record); + rec_record_remove_field_by_name (wrec, + rec_field_name (field), + -1); /* Delete all. */ + rec_mset_append (rec_record_mset (wrec), MSET_FIELD, (void *) rec_field_dup (wfield), MSET_ANY); + + EXEC_AST(wrec); + + if (res) + { + rec_record_destroy (wrec); + goto exit; + } + } + } + } + + rec_mset_iterator_free (&iter); + + exit: + + if (!*status) + { + res = false; + } + + return res; +} + +void +rec_sex_print_ast (rec_sex_t sex) +{ + rec_sex_parser_print_ast (sex->parser); +} + +/* + * Private functions. + */ + +#define GET_CHILD_VAL(DEST,NUM) \ + do \ + { \ + (DEST) = rec_sex_eval_node (sex, \ + record, \ + rec_sex_ast_node_child (node, (NUM)), \ + status); \ + if (!*status) \ + { \ + return res; \ + } \ + } \ + while (0) + + +#define ATOI_VAL(DEST, VAL) \ + do \ + { \ + switch ((VAL).type) \ + { \ + case REC_SEX_VAL_INT: \ + { \ + (DEST) = (VAL).int_val; \ + break; \ + } \ + case REC_SEX_VAL_STR: \ + { \ + if (strcmp ((VAL).str_val, "") == 0) \ + { \ + (DEST) = 0; \ + } \ + else \ + { \ + if (!rec_atoi ((VAL).str_val, &(DEST))) \ + { \ + *status = false; \ + return res; \ + } \ + } \ + break; \ + } \ + } \ + } \ + while (0) + +#define ATOD_VAL(DEST, VAL) \ + do \ + { \ + switch ((VAL).type) \ + { \ + case REC_SEX_VAL_REAL: \ + { \ + (DEST) = (VAL).real_val; \ + break; \ + } \ + case REC_SEX_VAL_INT: \ + { \ + (DEST) = (VAL).int_val; \ + break; \ + } \ + case REC_SEX_VAL_STR: \ + { \ + if (strcmp ((VAL).str_val, "") == 0) \ + { \ + (DEST) = 0.0; \ + } \ + else \ + { \ + if (!rec_atod ((VAL).str_val, &(DEST))) \ + { \ + *status = false; \ + return res; \ + } \ + } \ + break; \ + } \ + } \ + } \ + while (0) + +#define ATOTS_VAL(DEST, VAL) \ + do \ + { \ + switch ((VAL).type) \ + { \ + case REC_SEX_VAL_REAL: \ + { \ + *status = false; \ + return res; \ + break; \ + } \ + case REC_SEX_VAL_INT: \ + { \ + *status = false; \ + return res; \ + break; \ + } \ + case REC_SEX_VAL_STR: \ + { \ + if (!parse_datetime (&(DEST), (VAL).str_val, NULL))\ + { \ + *status = false; \ + return res; \ + } \ + \ + break; \ + } \ + } \ + } \ + while (0) + +struct rec_sex_val_s +rec_sex_eval_node (rec_sex_t sex, + rec_record_t record, + rec_sex_ast_node_t node, + bool *status) +{ + struct rec_sex_val_s res = {0, 0, 0, NULL}; + struct rec_sex_val_s child_val1 = {0, 0, 0, NULL}; + struct rec_sex_val_s child_val2 = {0, 0, 0, NULL}; + struct rec_sex_val_s child_val3 = {0, 0, 0, NULL}; + + *status = true; + + switch (rec_sex_ast_node_type (node)) + { + case REC_SEX_NOVAL: + { + fprintf (stderr, "Application bug: REC_SEX_NOVAL node found.\nPlease report this!\n"); + exit (EXIT_FAILURE); + break; + } + /* Operations. */ + case REC_SEX_OP_NEG: + case REC_SEX_OP_ADD: + { + int op1; + int op2; + double op1_real; + double op2_real; + + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + + if (rec_sex_op_real_p (child_val1, child_val2)) + { + /* Real operation. */ + ATOD_VAL (op1_real, child_val1); + ATOD_VAL (op2_real, child_val2); + + res.type = REC_SEX_VAL_REAL; + res.real_val = op1_real + op2_real; + } + else + { + /* Integer operation. */ + ATOI_VAL (op1, child_val1); + ATOI_VAL (op2, child_val2); + + res.type = REC_SEX_VAL_INT; + res.int_val = op1 + op2; + } + + break; + } + case REC_SEX_OP_SUB: + { + int op1; + int op2; + double op1_real; + double op2_real; + + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + + if (rec_sex_op_real_p (child_val1, child_val2)) + { + /* Real operation. */ + ATOD_VAL (op1_real, child_val1); + ATOD_VAL (op2_real, child_val2); + + res.type = REC_SEX_VAL_REAL; + res.real_val = op1 - op2; + } + else + { + /* Integer operation. */ + + ATOI_VAL (op1, child_val1); + ATOI_VAL (op2, child_val2); + + res.type = REC_SEX_VAL_INT; + res.int_val = op1 - op2; + } + + break; + } + case REC_SEX_OP_MUL: + { + int op1; + int op2; + double op1_real; + double op2_real; + + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + + if (rec_sex_op_real_p (child_val1, child_val2)) + { + /* Real operation. */ + ATOD_VAL (op1_real, child_val1); + ATOD_VAL (op2_real, child_val2); + + res.type = REC_SEX_VAL_REAL; + res.real_val = op1_real * op2_real; + } + else + { + /* Integer operation. */ + ATOI_VAL (op1, child_val1); + ATOI_VAL (op2, child_val2); + + res.type = REC_SEX_VAL_INT; + res.int_val = op1 * op2; + } + + break; + } + case REC_SEX_OP_DIV: + { + int op1; + int op2; + double op1_real; + double op2_real; + + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + + if (rec_sex_op_real_p (child_val1, child_val2)) + { + /* Real operation. */ + ATOD_VAL (op1_real, child_val1); + ATOD_VAL (op2_real, child_val2); + + res.type = REC_SEX_VAL_REAL; + res.real_val = op1_real / op2_real; + } + else + { + /* Integer operation. */ + ATOI_VAL (op1, child_val1); + ATOI_VAL (op2, child_val2); + + res.type = REC_SEX_VAL_INT; + + if (op2 != 0) + { + res.int_val = op1 / op2; + } + else + { + /* Error: division by zero */ + *status = false; + return res; + } + } + + break; + } + case REC_SEX_OP_MOD: + { + int op1; + int op2; + + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + + /* Integer operation. */ + ATOI_VAL (op1, child_val1); + ATOI_VAL (op2, child_val2); + + res.type = REC_SEX_VAL_INT; + + if (op2 != 0) + { + res.int_val = op1 % op2; + } + else + { + /* Error: division by zero */ + *status = false; + return res; + } + + break; + } + case REC_SEX_OP_EQL: + { + int op1; + int op2; + double op1_real; + double op2_real; + + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + + if ((child_val1.type == REC_SEX_VAL_STR) + && (child_val2.type == REC_SEX_VAL_STR)) + { + /* String comparison. */ + res.type = REC_SEX_VAL_INT; + + if (rec_sex_parser_case_insensitive (sex->parser)) + { + res.int_val = (strcasecmp (child_val1.str_val, + child_val2.str_val) == 0); + } + else + { + res.int_val = (strcmp (child_val1.str_val, + child_val2.str_val) == 0); + } + } + else + { + if (rec_sex_op_real_p (child_val1, child_val2)) + { + /* Real comparison. */ + ATOD_VAL (op1_real, child_val1); + ATOD_VAL (op2_real, child_val2); + + res.type = REC_SEX_VAL_INT; + res.int_val = op1_real == op2_real; + } + else + { + /* Integer comparison. */ + ATOI_VAL (op1, child_val1); + ATOI_VAL (op2, child_val2); + + res.type = REC_SEX_VAL_INT; + res.int_val = op1 == op2; + } + } + + break; + } + case REC_SEX_OP_NEQ: + { + int op1; + int op2; + double op1_real; + double op2_real; + + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + + if ((child_val1.type == REC_SEX_VAL_STR) + && (child_val2.type == REC_SEX_VAL_STR)) + { + /* String comparison. */ + res.type = REC_SEX_VAL_INT; + + if (rec_sex_parser_case_insensitive (sex->parser)) + { + res.int_val = (strcasecmp (child_val1.str_val, + child_val2.str_val) != 0); + } + else + { + res.int_val = (strcmp (child_val1.str_val, + child_val2.str_val) != 0); + } + } + else + { + if (rec_sex_op_real_p (child_val1, child_val2)) + { + /* Real comparison. */ + ATOD_VAL (op1_real, child_val1); + ATOD_VAL (op2_real, child_val2); + + res.type = REC_SEX_VAL_INT; + res.int_val = op1_real != op2_real; + } + else + { + /* Integer comparison. */ + ATOI_VAL (op1, child_val1); + ATOI_VAL (op2, child_val2); + + res.type = REC_SEX_VAL_INT; + res.int_val = op1 != op2; + } + } + + break; + } + case REC_SEX_OP_MAT: + { + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + + if ((child_val1.type == REC_SEX_VAL_STR) + && (child_val2.type == REC_SEX_VAL_STR)) + { + /* String match. */ + res.type = REC_SEX_VAL_INT; + + if (rec_sex_parser_case_insensitive (sex->parser)) + { + res.int_val = + rec_match_insensitive (child_val1.str_val, child_val2.str_val); + } + else + { + res.int_val = + rec_match (child_val1.str_val, child_val2.str_val); + } + } + else + { + /* Error. */ + *status = false; + return res; + } + + break; + } + case REC_SEX_OP_BEFORE: + { + struct timespec op1; + struct timespec op2; + struct timespec diff; + + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + + ATOTS_VAL (op1, child_val1); + ATOTS_VAL (op2, child_val2); + + res.type = REC_SEX_VAL_INT; + res.int_val = rec_timespec_subtract (&diff, &op1, &op2); + break; + } + case REC_SEX_OP_AFTER: + { + struct timespec op1; + struct timespec op2; + struct timespec diff; + + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + + ATOTS_VAL (op1, child_val1); + ATOTS_VAL (op2, child_val2); + + res.type = REC_SEX_VAL_INT; + res.int_val = (!rec_timespec_subtract (&diff, &op1, &op2) + && ((diff.tv_sec != 0) || (diff.tv_nsec != 0))); + break; + } + case REC_SEX_OP_SAMETIME: + { + struct timespec op1; + struct timespec op2; + struct timespec diff; + + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + + ATOTS_VAL (op1, child_val1); + ATOTS_VAL (op2, child_val2); + + rec_timespec_subtract (&diff, &op1, &op2); + + res.type = REC_SEX_VAL_INT; + res.int_val = ((diff.tv_sec == 0) && (diff.tv_nsec == 0)); + break; + } + case REC_SEX_OP_IMPLIES: + { + int op1; + int op2; + + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + + ATOI_VAL (op1, child_val1); + ATOI_VAL (op2, child_val2); + + res.type = REC_SEX_VAL_INT; + res.int_val = !op1 || (op1 && op2); + + break; + } + case REC_SEX_OP_LT: + case REC_SEX_OP_LTE: + { + int op1; + int op2; + double op1_real; + double op2_real; + + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + + if (rec_sex_op_real_p (child_val1, child_val2)) + { + /* Real comparison. */ + ATOD_VAL (op1_real, child_val1); + ATOD_VAL (op2_real, child_val2); + + res.type = REC_SEX_VAL_INT; + + if (rec_sex_ast_node_type (node) == REC_SEX_OP_LT) + { + res.int_val = op1_real < op2_real; + } + else + { + res.int_val = op1_real <= op2_real; + } + } + else + { + /* Integer comparison. */ + ATOI_VAL (op1, child_val1); + ATOI_VAL (op2, child_val2); + + res.type = REC_SEX_VAL_INT; + + if (rec_sex_ast_node_type (node) == REC_SEX_OP_LT) + { + res.int_val = op1 < op2; + } + else + { + res.int_val = op1 <= op2; + } + } + + break; + } + case REC_SEX_OP_GT: + case REC_SEX_OP_GTE: + { + int op1; + int op2; + double op1_real; + double op2_real; + + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + + if (rec_sex_op_real_p (child_val1, child_val2)) + { + /* Real comparison. */ + ATOD_VAL (op1_real, child_val1); + ATOD_VAL (op2_real, child_val2); + + res.type = REC_SEX_VAL_INT; + + if (rec_sex_ast_node_type (node) == REC_SEX_OP_GT) + { + res.int_val = op1_real > op2_real; + } + else + { + res.int_val = op1_real >= op2_real; + } + } + else + { + /* Integer comparison. */ + ATOI_VAL (op1, child_val1); + ATOI_VAL (op2, child_val2); + + res.type = REC_SEX_VAL_INT; + + if (rec_sex_ast_node_type (node) == REC_SEX_OP_GT) + { + res.int_val = op1 > op2; + } + else + { + res.int_val = op1 >= op2; + } + } + + break; + } + case REC_SEX_OP_AND: + { + int op1; + int op2; + + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + + ATOI_VAL (op1, child_val1); + ATOI_VAL (op2, child_val2); + + res.type = REC_SEX_VAL_INT; + res.int_val = op1 && op2; + + break; + } + case REC_SEX_OP_OR: + { + int op1; + int op2; + + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + + ATOI_VAL (op1, child_val1); + ATOI_VAL (op2, child_val2); + + res.type = REC_SEX_VAL_INT; + res.int_val = op1 || op2; + + break; + } + case REC_SEX_OP_CONCAT: + { + size_t str1_size; + size_t str2_size; + + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + + if ((child_val1.type == REC_SEX_VAL_STR) + && (child_val2.type == REC_SEX_VAL_STR)) + { + str1_size = strlen (child_val1.str_val); + str2_size = strlen (child_val2.str_val); + + res.type = REC_SEX_VAL_STR; + res.str_val = malloc (str1_size + str2_size + 1); + memcpy (res.str_val, child_val1.str_val, str1_size); + memcpy (res.str_val + str1_size, child_val2.str_val, str2_size); + res.str_val[str1_size + str2_size] = '\0'; + } + else + { + *status = false; + return res; + } + + break; + } + case REC_SEX_OP_NOT: + { + int op; + + GET_CHILD_VAL (child_val1, 0); + ATOI_VAL (op, child_val1); + + res.type = REC_SEX_VAL_INT; + res.int_val = !op; + + break; + } + case REC_SEX_OP_SHA: + { + int n; + const char *field_name = NULL; + const char *field_subname = NULL; + rec_sex_ast_node_t child; + + /* The child should be a Name. */ + child = rec_sex_ast_node_child (node, 0); + if (rec_sex_ast_node_type (rec_sex_ast_node_child(node, 0)) + != REC_SEX_NAME) + { + *status = false; + return res; + } + + field_name = rec_sex_ast_node_name (child); + field_subname = rec_sex_ast_node_subname (child); + + if (field_subname) + { + /* Compound a field name from the name/subname pair in the + AST node. */ + + char *effective_name + = rec_concat_strings (field_name, "_", field_subname); + + n = rec_record_get_num_fields_by_name (record, + effective_name); + free (effective_name); + } + else + { + n = rec_record_get_num_fields_by_name (record, field_name); + } + + res.type = REC_SEX_VAL_INT; + res.int_val = n; + break; + } + case REC_SEX_OP_COND: + { + int op1; + + GET_CHILD_VAL (child_val1, 0); + GET_CHILD_VAL (child_val2, 1); + GET_CHILD_VAL (child_val3, 2); + + /* Get the boolean value of the first operand. */ + ATOI_VAL (op1, child_val1); + + /* Return the first or the second operand, depending on the + value of op1. */ + if (op1) + { + res = child_val2; + } + else + { + res = child_val3; + } + + break; + } + /* Values. */ + case REC_SEX_INT: + { + res.type = REC_SEX_VAL_INT; + res.int_val = rec_sex_ast_node_int (node); + break; + } + case REC_SEX_REAL: + { + res.type = REC_SEX_VAL_REAL; + res.real_val = rec_sex_ast_node_real (node); + break; + } + case REC_SEX_STR: + { + res.type = REC_SEX_VAL_STR; + res.str_val = rec_sex_ast_node_str (node); + break; + } + case REC_SEX_NAME: + { + rec_field_t field; + const char *field_name; + const char *field_subname; + int index; + bool tofix; + + if (rec_sex_ast_node_fixed (node)) + { + res.type = REC_SEX_VAL_STR; + res.str_val = rec_sex_ast_node_fixed_val (node); + } + else + { + field_name = rec_sex_ast_node_name (node); + field_subname = rec_sex_ast_node_subname (node); + index = rec_sex_ast_node_index (node); + tofix = (index != -1); + if (index == -1) + { + index = 0; + } + + /* If there is a subname then the effective field name is + the concatenation of the name and the subname separated + by a '_' character. Otherwise it is just the name. */ + + { + if (field_subname) + { + char *effective_field_name = malloc (sizeof (char) * + (strlen (field_name) + strlen (field_subname) + 2)); + memcpy (effective_field_name, field_name, strlen(field_name)); + effective_field_name[strlen(field_name)] = '_'; + memcpy (effective_field_name + strlen(field_name) + 1, field_subname, strlen(field_subname) + 1); + + field = rec_record_get_field_by_name (record, effective_field_name, index); + } + else + { + field = rec_record_get_field_by_name (record, field_name, index); + } + } + + res.type = REC_SEX_VAL_STR; + if (field) + { + res.str_val = strdup (rec_field_value (field)); + } + else + { + /* No field => "" */ + res.str_val = ""; + } + + if (tofix) + { + /* Make this node fixed. */ + rec_sex_ast_node_fix (node, res.str_val); + } + } + + break; + } + } + + return res; +} + +static bool +rec_sex_op_real_p (struct rec_sex_val_s op1, + struct rec_sex_val_s op2) +{ + bool ret; + int integer; + double real; + + ret = true; + + if ((op1.type == REC_SEX_VAL_INT) + || ((op1.type == REC_SEX_VAL_STR) + && rec_atoi (op1.str_val, &integer))) + { + /* Operand 1 is an integer. */ + switch (op2.type) + { + case REC_SEX_VAL_INT: + { + ret = false; + break; + } + case REC_SEX_VAL_REAL: + { + ret = true; + break; + } + case REC_SEX_VAL_STR: + { + ret = (rec_atod (op2.str_val, &real) + && (!rec_atoi (op2.str_val, &integer))); + break; + } + default: + { + ret = false; + break; + } + } + } + + if ((op1.type == REC_SEX_VAL_REAL) + || ((op1.type == REC_SEX_VAL_STR) + && rec_atod (op1.str_val, &real) + && (!rec_atoi (op1.str_val, &integer)))) + { + /* Operand 1 is a real. */ + switch (op2.type) + { + case REC_SEX_VAL_INT: + { + ret = true; + break; + } + case REC_SEX_VAL_REAL: + { + ret = true; + break; + } + case REC_SEX_VAL_STR: + { + ret = rec_atod (op2.str_val, &real); + break; + } + default: + { + ret = false; + break; + } + } + } + + return ret; +} + +/* End of rec-sex.c */ diff --git a/devspec.en_US/project/recutils/src/rec-types.c b/devspec.en_US/project/recutils/src/rec-types.c new file mode 100755 index 0000000..12b44ea --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-types.c @@ -0,0 +1,1691 @@ +/* -*- mode: C -*- + * + * File: rec-types.c + * Date: Fri Apr 23 14:10:05 2010 + * + * GNU recutils - Field types. + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <stdlib.h> +#include <stdio.h> +#include <regex.h> +#include <string.h> +#include <limits.h> +#include <regex.h> +#include <parse-datetime.h> +#include <gettext.h> +#define _(str) dgettext (PACKAGE, str) + +#if defined UUID_TYPE +# include <uuid/uuid.h> +#endif + +#include <rec-utils.h> +#include <rec.h> + +/* + * Constants. + */ + +/* Textual name of the types expected in the type description + strings. */ + +#define REC_TYPE_INT_NAME "int" +#define REC_TYPE_BOOL_NAME "bool" +#define REC_TYPE_RANGE_NAME "range" +#define REC_TYPE_REAL_NAME "real" +#define REC_TYPE_SIZE_NAME "size" +#define REC_TYPE_LINE_NAME "line" +#define REC_TYPE_REGEXP_NAME "regexp" +#define REC_TYPE_DATE_NAME "date" +#define REC_TYPE_ENUM_NAME "enum" +#define REC_TYPE_EMAIL_NAME "email" +#define REC_TYPE_FIELD_NAME "field" +#define REC_TYPE_REC_NAME "rec" + +#if defined UUID_TYPE +# define REC_TYPE_UUID_NAME "uuid" +#endif + +/* Regular expressions. */ + +#define REC_TYPE_BLANK_RE "[ \t\n]" +#define REC_TYPE_NO_BLANK_RE "[^ \t\n]" +#define REC_TYPE_BLANKS_RE REC_TYPE_BLANK_RE "+" +#define REC_TYPE_NO_BLANKS_RE REC_TYPE_NO_BLANK_RE "+" +#define REC_TYPE_ZBLANKS_RE REC_TYPE_BLANK_RE "*" + +/* Regular expressions denoting values. */ +#define REC_TYPE_INT_VALUE_RE \ + "^" REC_TYPE_ZBLANKS_RE REC_INT_RE REC_TYPE_ZBLANKS_RE "$" + +#define REC_TYPE_BOOL_TRUE_VALUES_RE "1|yes|true" +#define REC_TYPE_BOOL_FALSE_VALUES_RE "0|no|false" + +#define REC_TYPE_BOOL_VALUE_RE \ + "^" REC_TYPE_ZBLANKS_RE "(" REC_TYPE_BOOL_TRUE_VALUES_RE "|" \ + REC_TYPE_BOOL_FALSE_VALUES_RE \ + ")" REC_TYPE_ZBLANKS_RE "$" + +#define REC_TYPE_REAL_VALUE_RE \ + "^" REC_TYPE_ZBLANKS_RE "-?([0-9]+)?(\\.[0-9]+)?" REC_TYPE_ZBLANKS_RE "$" + +#define REC_TYPE_LINE_VALUE_RE \ + "^[^\n]*$" + +#define REC_TYPE_EMAIL_VALUE_RE \ + "^[ \n\t]*" \ + "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}" \ + "[ \n\t]*$" + +#define REC_TYPE_ENUM_NAME_RE \ + "[a-zA-Z0-9][a-zA-Z0-9_-]*" +#define REC_TYPE_ENUM_VALUE_RE \ + "^" \ + REC_TYPE_ZBLANKS_RE \ + REC_TYPE_ENUM_NAME_RE \ + REC_TYPE_ZBLANKS_RE \ + "$" + +/* REC_FNAME_RE is defined in rec.h */ +#define REC_TYPE_FIELD_VALUE_RE \ + "^" \ + REC_TYPE_ZBLANKS_RE \ + REC_FNAME_RE \ + REC_TYPE_ZBLANKS_RE \ + "$" + +#define REC_TYPE_REC_VALUE_RE + +/* Regular expression denoting a type name. */ + +#if defined UUID_TYPE +# define REC_TYPE_CLASS_UUID_RE "|" REC_TYPE_UUID_NAME +#else +# define REC_TYPE_CLASS_UUID_RE +#endif + +#define REC_TYPE_CLASS_RE \ + "(" REC_TYPE_INT_NAME "|" REC_TYPE_RANGE_NAME "|" \ + REC_TYPE_REAL_NAME "|" REC_TYPE_SIZE_NAME "|" \ + REC_TYPE_LINE_NAME "|" REC_TYPE_REGEXP_NAME "|" \ + REC_TYPE_DATE_NAME "|" REC_TYPE_ENUM_NAME "|" \ + REC_TYPE_EMAIL_NAME "|" REC_TYPE_BOOL_NAME "|" \ + REC_TYPE_FIELD_NAME "|" REC_TYPE_REC_NAME \ + REC_TYPE_CLASS_UUID_RE \ + ")" + +/* Regular expressions for the type descriptions. */ + +/* int */ +#define REC_TYPE_INT_DESCR_RE \ + REC_TYPE_INT_NAME + +/* bool */ +#define REC_TYPE_BOOL_DESCR_RE \ + REC_TYPE_BOOL_NAME + +/* range MIN MAX */ +#define REC_TYPE_RANGE_MINMAX_RE "MIN | MAX" +#define REC_TYPE_RANGE_DESCR_RE \ + REC_TYPE_RANGE_NAME \ + REC_TYPE_BLANKS_RE \ + "(" REC_INT_RE "|" REC_TYPE_RANGE_MINMAX_RE ")" \ + "(" \ + REC_TYPE_ZBLANKS_RE \ + "(" REC_INT_RE "|" REC_TYPE_RANGE_MINMAX_RE ")"\ + ")?" + +/* real */ +#define REC_TYPE_REAL_DESCR_RE \ + REC_TYPE_REAL_NAME + +/* size NUM */ +#define REC_TYPE_SIZE_DESCR_RE \ + REC_TYPE_SIZE_NAME \ + REC_TYPE_BLANKS_RE \ + REC_INT_RE + +/* line */ +#define REC_TYPE_LINE_DESCR_RE \ + REC_TYPE_LINE_NAME + +/* regexp /RE/ */ +#define REC_TYPE_REGEXP_DESCR_RE \ + REC_TYPE_REGEXP_NAME \ + ".+" + +/* date */ +#define REC_TYPE_DATE_DESCR_RE \ + REC_TYPE_DATE_NAME + +/* enum NAME NAME NAME*/ +#define REC_TYPE_ENUM_DESCR_RE \ + REC_TYPE_ENUM_NAME \ + REC_TYPE_BLANKS_RE \ + REC_TYPE_ENUM_NAME_RE \ + "(" REC_TYPE_BLANKS_RE REC_TYPE_ENUM_NAME_RE ")*" + +/* field */ +#define REC_TYPE_FIELD_DESCR_RE \ + REC_TYPE_FIELD_NAME + +/* rec RECORD_TYPE */ +#define REC_TYPE_REC_DESCR_RE \ + REC_TYPE_REC_NAME REC_TYPE_BLANKS_RE REC_RECORD_TYPE_RE + +/* email */ +#define REC_TYPE_EMAIL_DESCR_RE \ + REC_TYPE_EMAIL_NAME + +/* Regexp denoting any type description. */ +#define REC_TYPE_DESCR_RE \ + "^" \ + REC_TYPE_ZBLANKS_RE \ + REC_FNAME_RE "(," REC_FNAME_RE ")*" \ + REC_TYPE_ZBLANKS_RE \ + "(" \ + "(" REC_TYPE_INT_DESCR_RE ")" \ + "|" "(" REC_TYPE_BOOL_DESCR_RE ")" \ + "|" "(" REC_TYPE_RANGE_DESCR_RE ")" \ + "|" "(" REC_TYPE_REAL_DESCR_RE ")" \ + "|" "(" REC_TYPE_SIZE_DESCR_RE ")" \ + "|" "(" REC_TYPE_LINE_DESCR_RE ")" \ + "|" "(" REC_TYPE_REGEXP_DESCR_RE ")" \ + "|" "(" REC_TYPE_DATE_DESCR_RE ")" \ + "|" "(" REC_TYPE_EMAIL_DESCR_RE ")" \ + "|" "(" REC_TYPE_ENUM_DESCR_RE ")" \ + "|" "(" REC_TYPE_FIELD_DESCR_RE ")" \ + "|" "(" REC_TYPE_REC_DESCR_RE ")" \ + ")" \ + REC_TYPE_ZBLANKS_RE \ + "$" + +/* + * Data types. + */ + +struct rec_type_s +{ + char *name; /* Name of the type. May be NULL in an + anonymous type. */ + enum rec_type_kind_e kind; /* Kind of the type. */ + char *expr; /* Copy of the type descriptor used to + create the type. */ + size_t size; /* Used for enumerations: number of + names. */ + + union + { + size_t max_size; /* Size of string. */ + int range[2]; /* Range. */ + regex_t regexp; /* Regular expression. */ + char *recname; /* Record. */ + +#define REC_ENUM_ALLOC_NAMES 50 + char **names; /* Names in enumeration. */ + } data; +}; + +#define REC_TYPE_REG_ALLOC_TYPES 100 + +struct rec_type_reg_entry_s +{ + char *type_name; + + rec_type_t type; + char *to_type; + bool visited_p; +}; + +struct rec_type_reg_s +{ + size_t num_types; + struct rec_type_reg_entry_s *types; +}; + +/* + * Forward declarations. + */ + +static enum rec_type_kind_e rec_type_parse_type_kind (char *str); + +static bool rec_type_check_int (rec_type_t type, const char *str, rec_buf_t errors); +static bool rec_type_check_bool (rec_type_t type, const char *str, rec_buf_t errors); +static bool rec_type_check_range (rec_type_t type, const char *str, rec_buf_t errors); +static bool rec_type_check_real (rec_type_t type, const char *str, rec_buf_t errors); +static bool rec_type_check_size (rec_type_t type, const char *str, rec_buf_t errors); +static bool rec_type_check_line (rec_type_t type, const char *str, rec_buf_t errors); +static bool rec_type_check_regexp (rec_type_t type, const char *str, rec_buf_t errors); +static bool rec_type_check_date (rec_type_t type, const char *str, rec_buf_t errors); +static bool rec_type_check_email (rec_type_t type, const char *str, rec_buf_t errors); +static bool rec_type_check_enum (rec_type_t type, const char *str, rec_buf_t errors); +static bool rec_type_check_field (rec_type_t type, const char *str, rec_buf_t errors); +static bool rec_type_check_rec (rec_type_t type, const char *str, rec_buf_t errors); + +#if defined UUID_TYPE +static bool rec_type_check_uuid (rec_type_t type, const char *str, rec_buf_t errors); +#endif + +/* Parsing routines. */ + +static const char *rec_type_parse_size (const char *str, rec_type_t type); +static const char *rec_type_parse_enum (const char *str, rec_type_t type); +static const char *rec_type_parse_regexp_type (const char *str, rec_type_t type); +static const char *rec_type_parse_range (const char *str, rec_type_t type); +static const char *rec_type_parse_rec (const char *str, rec_type_t type); + +/* + * Public functions. + */ + +bool +rec_type_descr_p (const char *str) +{ + bool ret; + rec_type_t aux_type; + + ret = false; + + aux_type = rec_type_new (str); + if (aux_type) + { + ret = true; + rec_type_destroy (aux_type); + } + + return ret; +} + +char * +rec_type_descr_type (char *str) +{ + char *result = NULL; + char *name; + const char *p; + + if (rec_type_descr_p (str)) + { + p = str; + + /* Skip blank characters. */ + rec_skip_blanks (&p); + + /* Skip the FEX */ + if (rec_parse_regexp (&p, "^" REC_FNAME_RE "(," REC_FNAME_RE ")*", + &name)) + { + free (name); + } + + /* Skip blanks. */ + rec_skip_blanks (&p); + + /* Return the rest of the string. */ + result = strdup (p); + } + + return result; +} + +rec_type_t +rec_type_new (const char *str) +{ + rec_type_t new; + const char *p; + char *type_kind_str = NULL; + + p = str; + new = malloc (sizeof (struct rec_type_s)); + if (!new) + { + goto exit; + } + new->name = NULL; /* Newly created types are anonyous. */ + new->size = 0; + + rec_skip_blanks (&p); + + /* Get the type kind. */ + if (!rec_parse_regexp (&p, "^" REC_TYPE_CLASS_RE, &type_kind_str)) + { + free (new); + new = NULL; + goto exit; + } + + /* Continue parsing depending on the kind of type. */ + new->kind = rec_type_parse_type_kind (type_kind_str); + switch (new->kind) + { + case REC_TYPE_SIZE: + { + p = rec_type_parse_size (p, new); + if (!p) + { + free (new); + new = NULL; + } + break; + } + case REC_TYPE_ENUM: + { + p = rec_type_parse_enum (p, new); + if (!p) + { + free (new); + new = NULL; + } + break; + } + case REC_TYPE_REGEXP: + { + p = rec_type_parse_regexp_type (p, new); + if (!p) + { + free (new); + new = NULL; + } + break; + } + case REC_TYPE_RANGE: + { + p = rec_type_parse_range (p, new); + if (!p) + { + free (new); + new = NULL; + } + break; + } + case REC_TYPE_REC: + { + p = rec_type_parse_rec (p, new); + if (!p) + { + free (new); + new = NULL; + } + break; + } + case REC_TYPE_INT: + case REC_TYPE_BOOL: + case REC_TYPE_REAL: + case REC_TYPE_LINE: + case REC_TYPE_FIELD: + case REC_TYPE_DATE: + case REC_TYPE_EMAIL: +#if defined UUID_TYPE + case REC_TYPE_UUID: +#endif + { + /* We are done. */ + break; + } + case REC_TYPE_NONE: + { + /* This point should not be reached. */ + fprintf (stderr, + _("internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() in rec_type_new().\n")); + exit (EXIT_FAILURE); + break; + } + } + + if (new) + { + /* Check that all characters until the end of the string are + blank characters. */ + while (*p != '\0') + { + if (!rec_blank_p (*p)) + { + rec_type_destroy (new); + new = NULL; + break; + } + + p++; + } + } + + exit: + + free (type_kind_str); + + return new; +} + +enum rec_type_kind_e +rec_type_kind (rec_type_t type) +{ + return type->kind; +} + +char * +rec_type_kind_str (rec_type_t type) +{ + char *res; + + switch (type->kind) + { + case REC_TYPE_NONE: + { + res = ""; + break; + } + case REC_TYPE_INT: + { + res = REC_TYPE_INT_NAME; + break; + } + case REC_TYPE_BOOL: + { + res = REC_TYPE_BOOL_NAME; + break; + } + case REC_TYPE_RANGE: + { + res = REC_TYPE_RANGE_NAME; + break; + } + case REC_TYPE_REAL: + { + res = REC_TYPE_REAL_NAME; + break; + } + case REC_TYPE_SIZE: + { + res = REC_TYPE_SIZE_NAME; + break; + } + case REC_TYPE_LINE: + { + res = REC_TYPE_LINE_NAME; + break; + } + case REC_TYPE_REGEXP: + { + res = REC_TYPE_REGEXP_NAME; + break; + } + case REC_TYPE_DATE: + { + res = REC_TYPE_DATE_NAME; + break; + } + case REC_TYPE_EMAIL: + { + res = REC_TYPE_EMAIL_NAME; + break; + } + case REC_TYPE_ENUM: + { + res = REC_TYPE_ENUM_NAME; + break; + } + case REC_TYPE_FIELD: + { + res = REC_TYPE_FIELD_NAME; + break; + } + case REC_TYPE_REC: + { + res = REC_TYPE_REC_NAME; + break; + } +#if defined UUID_TYPE + case REC_TYPE_UUID: + { + res = REC_TYPE_UUID_NAME; + break; + } +#endif + default: + { + res = REC_TYPE_NONE; + break; + } + } + + return res; +} + +bool +rec_type_check (rec_type_t type, + const char *str, + char **error_str) +{ + bool res; + rec_buf_t errors; + char *err_str; + size_t errors_size; + + errors = rec_buf_new (&err_str, &errors_size); + + res = false; + switch (type->kind) + { + case REC_TYPE_NONE: + { + res = true; + break; + } + case REC_TYPE_INT: + { + res = rec_type_check_int (type, str, errors); + break; + } + case REC_TYPE_BOOL: + { + res = rec_type_check_bool (type, str, errors); + break; + } + case REC_TYPE_RANGE: + { + res = rec_type_check_range (type, str, errors); + break; + } + case REC_TYPE_REAL: + { + res = rec_type_check_real (type, str, errors); + break; + } + case REC_TYPE_SIZE: + { + res = rec_type_check_size (type, str, errors); + break; + } + case REC_TYPE_LINE: + { + res = rec_type_check_line (type, str, errors); + break; + } + case REC_TYPE_REGEXP: + { + res = rec_type_check_regexp (type, str, errors); + break; + } + case REC_TYPE_DATE: + { + res = rec_type_check_date (type, str, errors); + break; + } + case REC_TYPE_EMAIL: + { + res = rec_type_check_email (type, str, errors); + break; + } + case REC_TYPE_ENUM: + { + res = rec_type_check_enum (type, str, errors); + break; + } + case REC_TYPE_FIELD: + { + res = rec_type_check_field (type, str, errors); + break; + } + case REC_TYPE_REC: + { + res = rec_type_check_rec (type, str, errors); + break; + } +#if defined UUID_TYPE + case REC_TYPE_UUID: + { + res = rec_type_check_uuid (type, str, errors); + break; + } +#endif + } + + /* Terminate the 'errors' string. */ + rec_buf_close (errors); + /* err_str[errors_size] = '\0';*/ + + if (error_str) + { + *error_str = err_str; + } + else + { + free (err_str); + } + + return res; +} + +void +rec_type_destroy (rec_type_t type) +{ + int i; + + if (type) + { + if (type->kind == REC_TYPE_ENUM) + { + for (i = 0; i < type->size; i++) + { + free (type->data.names[i]); + } + } + else if (type->kind == REC_TYPE_REGEXP) + { + regfree (&type->data.regexp); + } + + free (type->name); + free (type); + } +} + +rec_type_reg_t +rec_type_reg_new (void) +{ + rec_type_reg_t new; + + new = malloc (sizeof (struct rec_type_reg_s)); + if (new) + { + new->num_types = 0; + new->types = NULL; + } + + return new; +} + +void +rec_type_reg_destroy (rec_type_reg_t reg) +{ + size_t i; + + for (i = 0; i < reg->num_types; i++) + { + if (reg->types[i].type) + { + rec_type_destroy (reg->types[i].type); + } + free (reg->types[i].type_name); + free (reg->types[i].to_type); + } + free (reg->types); + free (reg); +} + +void +rec_type_reg_add (rec_type_reg_t reg, + rec_type_t type) +{ + size_t i; + const char *type_name = NULL; + + type_name = rec_type_name (type); + if (!type_name) + { + /* The registry only contains named types. */ + return; + } + + for (i = 0; i < reg->num_types; i++) + { + if (strcmp (reg->types[i].type_name, type_name) == 0) + { + /* Replace this entry. */ + if (reg->types[i].type) + { + rec_type_destroy (reg->types[i].type); + } + free (reg->types[i].type_name); + free (reg->types[i].to_type); + break; + } + } + + /* If we need to add a new entry then allocate it. */ + + if (i == reg->num_types) + { + reg->types = + realloc (reg->types, + ((i / REC_TYPE_REG_ALLOC_TYPES) + 1) * (sizeof (struct rec_type_reg_entry_s *) * REC_TYPE_REG_ALLOC_TYPES)); + reg->num_types++; + } + + reg->types[i].type_name = strdup (rec_type_name (type)); + reg->types[i].type = type; + reg->types[i].to_type = NULL; + reg->types[i].visited_p = false; +} + +void +rec_type_reg_add_synonym (rec_type_reg_t reg, + const char *type_name, + const char *to_type) +{ + size_t i; + + for (i = 0; i < reg->num_types; i++) + { + if (strcmp (reg->types[i].type_name, type_name) == 0) + { + /* Replace this entry. */ + if (reg->types[i].type) + { + rec_type_destroy (reg->types[i].type); + } + free (reg->types[i].type_name); + free (reg->types[i].to_type); + break; + } + } + + + /* If we need to add a new entry then allocate it. */ + + if (i == reg->num_types) + { + reg->types = + realloc (reg->types, + ((i / REC_TYPE_REG_ALLOC_TYPES) + 1) * (sizeof (struct rec_type_reg_entry_s *) * REC_TYPE_REG_ALLOC_TYPES)); + reg->num_types++; + } + + reg->types[i].type_name = strdup (type_name); + reg->types[i].to_type = strdup (to_type); + reg->types[i].type = NULL; + reg->types[i].visited_p = false; +} + +rec_type_t +rec_type_reg_get (rec_type_reg_t reg, + const char *type_name) +{ + size_t i; + rec_type_t type = NULL; + + for (i = 0; i < reg->num_types; i++) + { + if (strcmp (reg->types[i].type_name, type_name) == 0) + { + if (reg->types[i].type) + { + /* Type found. */ + type = reg->types[i].type; + break; + } + else + { + /* Loop detection. */ + if (reg->types[i].visited_p) + { + break; + } + + /* Mark this entry as visited and follow the name. */ + reg->types[i].visited_p = true; + type = rec_type_reg_get (reg, reg->types[i].to_type); + } + } + } + + /* Reset the visited flags. */ + for (i = 0; i < reg->num_types; i++) + { + reg->types[i].visited_p = false; + } + + return type; +} + +const char * +rec_type_name (rec_type_t type) +{ + return type->name; +} + +void +rec_type_set_name (rec_type_t type, const char *name) +{ + type->name = strdup (name); +} + +bool +rec_type_equal_p (rec_type_t type1, + rec_type_t type2) +{ + bool ret; + size_t i; + + ret = true; + + if (type1->kind != type2->kind) + { + ret = false; + } + else + { + if (type1->kind == REC_TYPE_SIZE) + { + ret = (type1->data.max_size == type2->data.max_size); + } + else if (type1->kind == REC_TYPE_RANGE) + { + ret = ((type1->data.range[0] == type2->data.range[0]) + && (type1->data.range[1] == type2->data.range[1])); + } + else if (type1->kind == REC_TYPE_ENUM) + { + for (i = 0; i < type1->size; i++) + { + ret = ((i < type2->size) + && (strcmp (type1->data.names[i], + type2->data.names[i]) == 0)); + } + } + else if (type1->kind == REC_TYPE_REGEXP) + { + /* Since there is no way to determine whether two + regex_t variables refer to equivalent regexps. */ + ret = false; + } + } + + return ret; +} + +int +rec_type_min (rec_type_t type) +{ + int res; + + if (type->kind != REC_TYPE_RANGE) + { + res = -1; + } + else + { + res = type->data.range[0]; + } + + return res; +} + +int +rec_type_max (rec_type_t type) +{ + int res; + + if (type->kind != REC_TYPE_RANGE) + { + res = -1; + } + else + { + res = type->data.range[1]; + } + + return res; +} + +const char * +rec_type_rec (rec_type_t type) +{ + const char *res = NULL; + + if (type->kind == REC_TYPE_REC) + { + res = type->data.recname; + } + + return res; +} + +int +rec_type_values_cmp (rec_type_t type, + const char *val1, + const char *val2) +{ + int type_comparison; + enum rec_type_kind_e kind = REC_TYPE_NONE; + + if (type) + { + kind = type->kind; + } + + switch (kind) + { + case REC_TYPE_INT: + case REC_TYPE_RANGE: + { + int int1, int2 = 0; + + if (!rec_atoi (val1, &int1) || !rec_atoi (val2, &int2)) + { + goto lexi; + } + + if (int1 < int2) + { + type_comparison = -1; + } + else if (int1 > int2) + { + type_comparison = 1; + } + else + { + type_comparison = 0; + } + + break; + } + case REC_TYPE_REAL: + { + double real1, real2 = 0; + + if (!rec_atod (val1, &real1) || !rec_atod (val2, &real2)) + { + goto lexi; + } + + if (real1 < real2) + { + type_comparison = -1; + } + else if (real1 > real2) + { + type_comparison = 1; + } + else + { + type_comparison = 0; + } + + break; + } + case REC_TYPE_BOOL: + { + bool bool1, bool2 = false; + + /* Boolean fields storing 'false' come first. */ + + bool1 = rec_match (val1, + REC_TYPE_ZBLANKS_RE "(" REC_TYPE_BOOL_TRUE_VALUES_RE ")" REC_TYPE_ZBLANKS_RE); + bool2 = rec_match (val2, + REC_TYPE_ZBLANKS_RE "(" REC_TYPE_BOOL_TRUE_VALUES_RE ")" REC_TYPE_ZBLANKS_RE); + + if (!bool1 && bool2) + { + type_comparison = -1; + } + else if (bool1 == bool2) + { + type_comparison = 0; + } + else + { + type_comparison = 1; + } + + break; + } + case REC_TYPE_DATE: + { + struct timespec op1; + struct timespec op2; + struct timespec diff; + + if (parse_datetime (&op1, val1, NULL) + && parse_datetime (&op2, val2, NULL)) + { + if ((op1.tv_sec == op2.tv_sec) + && (op1.tv_nsec == op2.tv_nsec)) + { + /* op1 == op2 */ + type_comparison = 0; + } + else if (rec_timespec_subtract (&diff, &op1, &op2)) + { + /* op1 < op2 */ + type_comparison = -1; + } + else + { + /* op1 > op2 */ + type_comparison = 1; + } + } + else + { + /* Invalid date => lexicographic order. */ + goto lexi; + } + + break; + } + default: + { + lexi: + /* Lexicographic order. */ + type_comparison = strcmp (val1, val2); + break; + } + } + + return type_comparison; +} + +/* + * Private functions. + */ + +static enum rec_type_kind_e +rec_type_parse_type_kind (char *str) +{ + enum rec_type_kind_e res; + + res = REC_TYPE_NONE; + + if (strcmp (str, REC_TYPE_INT_NAME) == 0) + { + res = REC_TYPE_INT; + } + if (strcmp (str, REC_TYPE_BOOL_NAME) == 0) + { + res = REC_TYPE_BOOL; + } + if (strcmp (str, REC_TYPE_RANGE_NAME) == 0) + { + res = REC_TYPE_RANGE; + } + if (strcmp (str, REC_TYPE_REAL_NAME) == 0) + { + res = REC_TYPE_REAL; + } + if (strcmp (str, REC_TYPE_SIZE_NAME) == 0) + { + res = REC_TYPE_SIZE; + } + if (strcmp (str, REC_TYPE_LINE_NAME) == 0) + { + res = REC_TYPE_LINE; + } + if (strcmp (str, REC_TYPE_REGEXP_NAME) == 0) + { + res = REC_TYPE_REGEXP; + } + if (strcmp (str, REC_TYPE_DATE_NAME) == 0) + { + res = REC_TYPE_DATE; + } + if (strcmp (str, REC_TYPE_EMAIL_NAME) == 0) + { + res = REC_TYPE_EMAIL; + } + if (strcmp (str, REC_TYPE_ENUM_NAME) == 0) + { + res = REC_TYPE_ENUM; + } + if (strcmp (str, REC_TYPE_FIELD_NAME) == 0) + { + res = REC_TYPE_FIELD; + } + if (strcmp (str, REC_TYPE_REC_NAME) == 0) + { + res = REC_TYPE_REC; + } +#if defined UUID_TYPE + if (strcmp (str, REC_TYPE_UUID_NAME) == 0) + { + res = REC_TYPE_UUID; + } +#endif + + return res; +} + +static bool +rec_type_check_int (rec_type_t type, + const char *str, + rec_buf_t errors) +{ + bool ret; + + ret = rec_match (str, REC_TYPE_INT_VALUE_RE); + if (!ret && errors) + { + rec_buf_puts (_("invalid integer."), errors); + } + + return ret; +} + +static bool +rec_type_check_rec (rec_type_t type, + const char *str, + rec_buf_t errors) +{ + /* The values of type 'rec' are of whatever type the primary key of + the referred type is. That check is not implemented here, but in + rec-types.c. + + So sorry Mario, but the Princess is kept in another castle... */ + + return true; +} + +static bool +rec_type_check_field (rec_type_t type, + const char *str, + rec_buf_t errors) +{ + bool ret; + + ret = rec_match (str, REC_TYPE_FIELD_VALUE_RE); + if (!ret && errors) + { + rec_buf_puts (_("invalid 'field' value."), errors); + } + + return ret; +} + +#if defined UUID_TYPE + +static bool +rec_type_check_uuid (rec_type_t type, + const char *str, + rec_buf_t errors) +{ + int ret; + uuid_t uu; + + /* Determine whether the given string is a valid UUID by parsing it + using the uuid_parse function provided by the libuuid + library. */ + + ret = uuid_parse (str, uu); + if ((ret == -1) && errors) + { + rec_buf_puts (_("invalid 'uuid' value."), errors); + } + + return (ret == 0); +} + +#endif /* UUID_TYPE */ + +static bool +rec_type_check_bool (rec_type_t type, + const char *str, + rec_buf_t errors) +{ + bool ret; + + ret = rec_match (str, REC_TYPE_BOOL_VALUE_RE); + if (!ret && errors) + { + rec_buf_puts (_("invalid 'bool' value."), errors); + } + + return ret; +} + +static bool +rec_type_check_range (rec_type_t type, + const char *str, + rec_buf_t errors) +{ + bool ret; + const char *p; + int num; + char *tmp; + + p = str; + + rec_skip_blanks (&p); + if (!rec_parse_int (&p, &num)) + { + if (errors) + { + rec_buf_puts (_("invalid 'range' value."), errors); + } + return false; + } + + ret = ((num >= type->data.range[0]) + && (num <= type->data.range[1])); + if (!ret && errors) + { + if (asprintf (&tmp, _("expected an integer between %d and %d."), + type->data.range[0], type->data.range[1]) != -1) + { + rec_buf_puts (tmp, errors); + free (tmp); + } + } + + return ret; +} + +static bool +rec_type_check_real (rec_type_t type, + const char *str, + rec_buf_t errors) +{ + bool ret; + + ret = rec_match (str, REC_TYPE_REAL_VALUE_RE); + if (!ret && errors) + { + rec_buf_puts (_("invalid 'real' value."), errors); + } + + return ret; +} + +static bool +rec_type_check_size (rec_type_t type, + const char *str, + rec_buf_t errors) +{ + bool ret; + char *tmp; + + ret = (strlen (str) <= type->data.max_size); + if (!ret && errors) + { + if (asprintf (&tmp, + _("value too large. Expected a size <= %zu."), + type->data.max_size) != -1) + { + rec_buf_puts (tmp, errors); + free (tmp); + } + } + + return (strlen (str) <= type->data.max_size); +} + +static bool +rec_type_check_line (rec_type_t type, + const char *str, + rec_buf_t errors) +{ + bool ret; + + ret = rec_match (str, REC_TYPE_LINE_VALUE_RE); + if (!ret && errors) + { + rec_buf_puts (_("invalid 'line' value."), errors); + } + + return ret; +} + +static bool +rec_type_check_regexp (rec_type_t type, + const char *str, + rec_buf_t errors) +{ + bool ret; + ret = (regexec (&type->data.regexp, + str, + 0, + NULL, + 0) == 0); + if (!ret && errors) + { + rec_buf_puts (_("value does not match the regexp."), errors); + } + + return ret; +} + +static bool +rec_type_check_date (rec_type_t type, + const char *str, + rec_buf_t errors) +{ + bool ret; + struct timespec tm; + + if (strcmp (str, "") == 0) + { + /* The parse_datetime call accepts the empty string. */ + return false; + } + + ret = parse_datetime (&tm, str, NULL); + if (!ret && errors) + { + rec_buf_puts (_("invalid date."), errors); + } + + return ret; +} + +static bool +rec_type_check_email (rec_type_t type, + const char *str, + rec_buf_t errors) +{ + bool ret; + + ret = rec_match (str, REC_TYPE_EMAIL_VALUE_RE); + if (!ret && errors) + { + rec_buf_puts (_("invalid email."), errors); + } + + return ret; +} + +static bool +rec_type_check_enum (rec_type_t type, + const char *str, + rec_buf_t errors) +{ + size_t i; + const char *p, *b; + char name[100]; + + if (rec_match (str, REC_TYPE_ENUM_VALUE_RE)) + { + /* Get the name from STR. */ + p = str; + + while (p && rec_blank_p (*p)) + { + p++; + } + + b = p; + while (p && (rec_letter_p (*p) + || rec_letter_p (*p) + || rec_digit_p (*p) + || (*p == '_') + || (*p == '-'))) + { + name[p - b] = *p; + p++; + } + name[p - b] = '\0'; + + /* Check for the name in the enum types. */ + for (i = 0; i < type->size; i++) + if (strcmp (name, type->data.names[i]) == 0) + return true; + } + + if (errors) + { + rec_buf_puts (_("invalid enum value."), errors); + } + + return false; +} + +static const char * +rec_type_parse_size (const char *str, rec_type_t type) +{ + const char *p; + int size; + + p = str; + + /* Skip blanks. */ + rec_skip_blanks (&p); + + /* Get the size. */ + if (rec_parse_int (&p, &size) + && (size >= 0)) + { + type->data.max_size = size; + } + else + { + p = NULL; + } + + return p; +} + +static const char * +rec_type_parse_enum (const char *str, rec_type_t type) +{ + const char *p; + size_t i; + + p = str; + + type->size = 0; + type->data.names = NULL; + + while (*p) + { + /* Allocate space in the list of enum names if needed. */ + if ((type->size % REC_ENUM_ALLOC_NAMES) == 0) + type->data.names = + realloc (type->data.names, ((type->size / REC_ENUM_ALLOC_NAMES) + 1) * (sizeof(char *) * REC_ENUM_ALLOC_NAMES)); + + /* Skip blanks. */ + rec_skip_blanks (&p); + + if (*p == '(') + { + /* Skip the comment. */ + p++; + while (*p && (*p != ')') && (*p != '(')) + { + p++; + } + if (*p == ')') + { + p++; + } + else + { + /* Parse error: unterminated comment. */ + p = NULL; + break; + } + } + else if (*p) + { + /* Parse an enum entry. */ + if (!rec_parse_regexp (&p, + "^" REC_TYPE_ENUM_NAME_RE, + &(type->data.names[type->size++]))) + { + p = NULL; + break; + } + } + } + + if (type->size == 0) + { + /* We require at least one entry in the enum. In this case it + is not needed to save memory. */ + return NULL; + } + + if (!p) + { + /* Free memory. */ + for (i = 0; i < type->size; i++) + { + free (type->data.names[i]); + } + } + + return p; +} + +static const char * +rec_type_parse_regexp_type (const char *str, rec_type_t type) +{ + const char *p; + char re[200]; + bool end_regexp; + size_t i; + char delim_char; + + p = str; + + /* The regexp type descriptor is like: + + BLANKS BEGIN_RE CHARS END_RE BLANKS + + where BEGIN_RE == END_RE and is the first non-blank + character found in the string. Escaped apperances of + BEGIN_RE in CHARS are un-escaped. + */ + + /* Skip blanks. */ + rec_skip_blanks (&p); + + end_regexp = false; + delim_char = *p; + p++; + + i = 0; + while (*p) + { + if (*p == delim_char) + { + if (*(p + 1) == delim_char) + { + re[i++] = delim_char; + p++; + } + else + { + /* End of the regexp. */ + p++; + end_regexp = true; + break; + } + } + else + { + re[i++] = *p; + } + + p++; + } + re[i] = '\0'; + + if (!end_regexp) + { + /* Error. */ + p = NULL; + } + else + { + /* Compile the regexp. */ + if (regcomp (&type->data.regexp, re, + REG_EXTENDED) != 0) + { + p = NULL; + } + } + + return p; +} + +static const char * +rec_type_parse_rec (const char *str, rec_type_t type) +{ + const char *p = str; + + /* Get the record name. */ + rec_skip_blanks (&p); + if (!rec_parse_regexp (&p, + "^" REC_RECORD_TYPE_RE, + &(type->data.recname))) + { + return NULL; + } + + return p; +} + +static bool +rec_type_parse_range_point (const char **str, int *num) +{ + if (rec_match (*str, "^MIN")) + { + *num = INT_MIN; + *str += 3; + } + else if (rec_match (*str, "^MAX")) + { + *num = INT_MAX; + *str += 3; + } + else if (!rec_parse_int (str, num)) + { + return false; + } + + return true; +} + +static const char * +rec_type_parse_range (const char *str, rec_type_t type) +{ + const char *p; + + p = str; + + rec_skip_blanks (&p); + + if (!rec_type_parse_range_point (&p, &(type->data.range[0]))) + { + return NULL; + } + + rec_skip_blanks (&p); + + if (*p == '\0') + { + /* One of the indexes is ommitted. The range is of the + form 0..N. */ + type->data.range[1] = type->data.range[0]; + type->data.range[0] = 0; + } + else + { + if (!rec_type_parse_range_point (&p, &(type->data.range[1]))) + { + return NULL; + } + } + + return p; +} + +/* End of rec-types.c */ diff --git a/devspec.en_US/project/recutils/src/rec-utils.c b/devspec.en_US/project/recutils/src/rec-utils.c new file mode 100755 index 0000000..99d101b --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-utils.c @@ -0,0 +1,447 @@ +/* -*- mode: C -*- + * + * File: rec-utils.c + * Date: Fri Apr 9 19:45:00 2010 + * + * GNU recutils - Miscellanea utilities + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <regex.h> +#include <stdlib.h> +#include <gettext.h> +#define _(str) dgettext (PACKAGE, str) +#include <string.h> +#include <locale.h> + +#include <rec-utils.h> + +bool +rec_atoi (const char *str, + int *number) +{ + bool res; + long int li; + char *end; + int base = 0; + + res = false; + + li = strtol (str, &end, base); + if ((*str != '\0') && (*end == '\0')) + { + /* The entire string is valid. */ + res = true; + *number = (int) li; + } + + return res; +} + +bool +rec_atod (const char *str, + double *number) +{ + bool res; + char *end; + + res = false; + + setlocale (LC_NUMERIC, "C"); /* We want the dot to always be the + decimal separator. */ + *number = strtod (str, &end); + setlocale (LC_NUMERIC, ""); /* Restore the locale from the + environment. */ + + if ((*str != '\0') && (*end == '\0')) + { + /* The entire string is valid. */ + res = true; + } + + return res; +} + +char * +rec_extract_file (const char *str) +{ + regex_t regexp; + regmatch_t matches; + char *rec_file = NULL; + size_t rec_file_length = 0; + + if (regcomp (®exp, "[ \n\t]" REC_FILE_REGEXP, REG_EXTENDED) != 0) + { + fprintf (stderr, _("internal error: rec_int_rec_extract_file: error compiling regexp.\n")); + return NULL; + } + + if ((regexec (®exp, str, 1, &matches, 0) == 0) + && (matches.rm_so != -1)) + { + /* Get the match. */ + rec_file_length = matches.rm_eo - matches.rm_so; + rec_file = malloc (rec_file_length + 1); + memcpy (rec_file, str + matches.rm_so + 1, rec_file_length - 1); + rec_file[rec_file_length - 1] = '\0'; + } + + regfree (®exp); + return rec_file; +} + +char * +rec_extract_url (const char *str) +{ + regex_t regexp; + regmatch_t matches; + char *rec_url = NULL; + size_t rec_url_length = 0; + + if (regcomp (®exp, REC_URL_REGEXP, REG_EXTENDED) != 0) + { + fprintf (stderr, _("internal error: rec_int_rec_extract_url: error compiling regexp.\n")); + return NULL; + } + + if ((regexec (®exp, str, 1, &matches, 0) == 0) + && (matches.rm_so != -1)) + { + /* Get the match. */ + rec_url_length = matches.rm_eo - matches.rm_so; + rec_url = malloc (rec_url_length + 1); + memcpy (rec_url, str + matches.rm_so, rec_url_length); + rec_url[rec_url_length] = '\0'; + } + + regfree (®exp); + return rec_url; +} + +char * +rec_extract_type (const char *str) +{ + regex_t regexp; + regmatch_t matches; + char *rec_type = NULL; + size_t rec_type_length = 0; + + /* TODO: use a REC_TYPE_NAME_RE */ + if (regcomp (®exp, REC_FNAME_RE, REG_EXTENDED) != 0) + { + fprintf (stderr, _("internal error: rec_int_rec_extract_url: error compiling regexp.\n")); + return NULL; + } + + if ((regexec (®exp, str, 1, &matches, 0) == 0) + && (matches.rm_so != -1)) + { + /* Get the match. */ + rec_type_length = matches.rm_eo - matches.rm_so; + rec_type = malloc (rec_type_length + 1); + memcpy (rec_type, str + matches.rm_so, rec_type_length); + rec_type[rec_type_length] = '\0'; + } + + regfree (®exp); + return rec_type; +} + +bool +rec_parse_int (const char **str, int *num) +{ + bool ret; + const char *p, *b; + char number[30]; + + ret = true; + p = *str; + + b = p; + while (rec_digit_p (*p) + || ((p == b) && (*p == '-')) + || ((*p >= 'a') && (*p <= 'f')) + || ((*p >= 'A') && (*p <= 'F')) + || (*p == 'x') + || (*p == 'X')) + { + number[p - b] = *p; + p++; + } + number[p - b] = '\0'; + + if (!rec_atoi (number, num)) + { + ret = false; + } + + if (ret) + { + *str = p; + } + + return ret; +} + +bool +rec_parse_regexp (const char **str, const char *re, char **result) +{ + bool ret; + const char *p; + regex_t regexp; + regmatch_t pm; + + ret = true; + p = *str; + + /* Compile the regexp. */ + if (regcomp (®exp, re, REG_EXTENDED) != 0) + { + ret = false; + } + + if (ret) + { + /* Try to match the regexp. */ + if (regexec (®exp, p, 1, &pm, 0) == 0) + { + if (result) + { + /* Get the match into 'result'. Note that + since the pattern starts with a ^ rm_so shall be 0 and we + can use rm_eo relative to *p. */ + *result = malloc (pm.rm_eo + 1); + memcpy (*result, p, pm.rm_eo); + (*result)[pm.rm_eo] = '\0'; + } + + /* Advance 'p'. */ + p = p + pm.rm_eo; + } + else + { + ret = false; + if (result) + { + *result = NULL; + } + } + + regfree (®exp); + } + + if (ret) + { + *str = p; + } + + return ret; +} + +void +rec_skip_blanks (const char **str) +{ + const char *p; + + p = *str; + while (rec_blank_p (*p)) + { + p++; + } + + *str = p; +} + +bool +rec_blank_p (char c) +{ + return ((c == ' ') + || (c == '\n') + || (c == '\t')); +} + +bool +rec_digit_p (char c) +{ + return ((c >= '0') && (c <= '9')); +} + +bool +rec_letter_p (char c) +{ + return (((c >= 'a') && (c <= 'z')) + || ((c >= 'A') && (c <= 'Z'))); +} + +static bool +rec_match_int (const char *str, + const char *reg, + int flags) +{ + bool ret; + regex_t regexp; + + if (regcomp (®exp, reg, flags) != 0) + { + fprintf (stderr, _("internal error: rec_match: error compiling regexp.\n")); + return false; + } + + ret = (regexec (®exp, str, 0, NULL, 0) == 0); + regfree (®exp); + + return ret; +} + +bool +rec_match (const char *str, + const char *reg) +{ + return rec_match_int (str, reg, REG_EXTENDED); +} + +bool +rec_match_insensitive (const char *str, + const char *reg) +{ + return rec_match_int (str, reg, REG_EXTENDED | REG_ICASE); +} + +size_t +rec_extract_size (const char *str) +{ + const char *p; + char *condition_str; + int res; + + if (!rec_match (str, REC_INT_SIZE_RE)) + { + return 0; + } + + p = str; + rec_skip_blanks (&p); + rec_parse_regexp (&p, "^[><]=?", &condition_str); + rec_skip_blanks (&p); + rec_parse_int (&p, &res); + + return (size_t) res; +} + +enum rec_size_condition_e +rec_extract_size_condition (const char *str) +{ + const char *p; + char *condition_str = NULL; + enum rec_size_condition_e condition; + + if (!rec_match (str, REC_INT_SIZE_RE)) + { + return SIZE_COND_E; + } + + p = str; + rec_skip_blanks (&p); + rec_parse_regexp (&p, "^[><]=?", &condition_str); + + if (condition_str) + { + if (strcmp (condition_str, ">") == 0) + { + condition = SIZE_COND_G; + } + else if (strcmp (condition_str, ">=") == 0) + { + condition = SIZE_COND_GE; + } + else if (strcmp (condition_str, "<") == 0) + { + condition = SIZE_COND_L; + } + else if (strcmp (condition_str, "<=") == 0) + { + condition = SIZE_COND_LE; + } + else + { + fprintf (stderr, "internal error: rec_extract_size_condition: invalid condition.\n"); + return SIZE_COND_E; + } + + free (condition_str); + } + else + { + condition = SIZE_COND_E; + } + + return condition; +} + +int +rec_timespec_subtract (struct timespec *result, + struct timespec *x, + struct timespec *y) +{ + result->tv_sec = x->tv_sec - y->tv_sec; + result->tv_nsec = x->tv_nsec - y->tv_nsec; + if (result->tv_nsec < 0) + { + /* Overflow. Subtract one second. */ + result->tv_sec--; + result->tv_nsec += 1000000000; + } + + /* Return whether there is an overflow in the 'tv_sec' field. */ + return (result->tv_sec < 0); +} + +uint32_t +rec_endian_swap (uint32_t number) +{ + uint32_t res; + + res = (number >> 24) + | ((number << 8) & 0x00FF0000) + | ((number >> 8) & 0x0000FF00) + | (number << 24); + + return res; +} + +char * +rec_concat_strings (const char *str1, + const char *str2, + const char *str3) +{ + char *res = malloc (strlen (str1) + strlen (str2) + strlen (str3) + 1); + + if (res) + { + memcpy (res, str1, strlen (str1)); + memcpy (res + strlen (str1), str2, strlen (str2)); + memcpy (res + strlen (str1) + strlen (str2), str3, strlen (str3) + 1); + } + + return res; +} + +/* End of rec-utils.c */ diff --git a/devspec.en_US/project/recutils/src/rec-utils.h b/devspec.en_US/project/recutils/src/rec-utils.h new file mode 100755 index 0000000..15dd06f --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-utils.h @@ -0,0 +1,91 @@ +/* -*- mode: C -*- + * + * File: rec-utils.h + * Date: Fri Apr 9 19:42:52 2010 + * + * GNU recutils - Miscellanea utilities + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef REC_UTILS_H +#define REC_UTILS_H + +#include <config.h> + +#include <rec.h> +#include <stdint.h> +#include <stdbool.h> + +enum rec_size_condition_e + { + SIZE_COND_E, + SIZE_COND_L, + SIZE_COND_LE, + SIZE_COND_G, + SIZE_COND_GE + }; + +/* Non public constants used by several modules. */ + +#define REC_INT_RE "-?((0x[0-9a-fA-F]+)|[0-9]+)" +#define REC_INT_SIZE_RE \ + "^[ \t\n]*(>|<|>=|<=)?[ \t\n]*" \ + REC_INT_RE \ + "[ \t\n]*$" + +/* Parse an integer/real in the NULL-terminated string STR and store + it at NUMBER. Return true if the conversion was successful. false + otherwise. */ +bool rec_atoi (const char *str, int *number); +bool rec_atod (const char *str, double *number); + +/* Extract type and url from a %rec: field value. */ +char *rec_extract_url (const char *str); +char *rec_extract_file (const char *str); +char *rec_extract_type (const char *str); + +/* Extract size and condition from a %size: field value. */ +size_t rec_extract_size (const char *str); +enum rec_size_condition_e rec_extract_size_condition (const char *str); + +/* Matching a string against a regexp. */ +bool rec_match (const char *str, const char *regexp); +bool rec_match_insensitive (const char *str, const char *regexp); + +/* Generic parsing routines. */ +bool rec_blank_p (char c); +bool rec_digit_p (char c); +bool rec_letter_p (char c); +bool rec_parse_int (const char **str, int *num); +void rec_skip_blanks (const char **str); +bool rec_parse_regexp (const char **str, const char *re, char **result); + +/* String utilities. */ +char *rec_concat_strings (const char *str1, const char *str2, const char *str3); + +/* Miscellanea. */ +int rec_timespec_subtract (struct timespec *result, + struct timespec *x, + struct timespec *y); + +uint32_t rec_endian_swap (uint32_t number); + +#endif /* rec-utils.h */ + +/* End of rec-utils.h. */ diff --git a/devspec.en_US/project/recutils/src/rec-writer.c b/devspec.en_US/project/recutils/src/rec-writer.c new file mode 100755 index 0000000..446b184 --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec-writer.c @@ -0,0 +1,752 @@ +/* -*- mode: C -*- + * + * File: rec-writer.c + * Date: Sat Dec 26 22:47:16 2009 + * + * GNU recutils - Writer + * + */ + +/* Copyright (C) 2009-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <rec.h> + +#include <stdlib.h> +#include <string.h> + +#include <rec.h> +#include <rec-utils.h> + +/* + * Static functions defined in this file + */ +static bool rec_writer_putc (rec_writer_t writer, char c); +static bool rec_writer_puts (rec_writer_t writer, const char *s); + +/* Writer Data Structure + * + */ +struct rec_writer_s +{ + FILE *file_out; /* File stream used by the writer. */ + rec_buf_t buf_out; /* Growable buffer used by the writer. */ + + bool eof; + int line; /* Current line number. */ + + /* The following flags and options can be accesssed using the + corresponding rec_writer_(get/set)_FLAG function. */ + + bool collapse_p; /* If true the writer won't introduce + separators between records. */ + bool skip_comments_p; /* If true the writer won't print out + comments. */ + enum rec_writer_mode_e mode; /* The mode in which the writer operates. + See the definition of the enumerated type + in rec.h for a list of allowed modes. */ + +}; + +static void +rec_writer_new_common (rec_writer_t writer) +{ + writer->file_out = NULL; + writer->buf_out = NULL; + writer->line = 1; + writer->eof = false; + writer->collapse_p = false; + writer->skip_comments_p = false; + writer->mode = REC_WRITER_NORMAL; +} + +rec_writer_t +rec_writer_new (FILE *file_out) +{ + rec_writer_t new; + + new = malloc (sizeof(struct rec_writer_s)); + if (new) + { + rec_writer_new_common (new); + new->file_out = file_out; + } + + return new; +} + +rec_writer_t +rec_writer_new_str (char **str, size_t *str_size) +{ + rec_writer_t new; + + new = malloc (sizeof(struct rec_writer_s)); + if (new) + { + rec_writer_new_common (new); + new->buf_out = rec_buf_new (str, str_size); + } + + return new; +} + +void +rec_writer_destroy (rec_writer_t writer) +{ + if (writer) + { + if (writer->file_out) + { + fflush (writer->file_out); + } + if (writer->buf_out) + { + rec_buf_close (writer->buf_out); + } + + free (writer); + } +} + +bool +rec_write_comment (rec_writer_t writer, + rec_comment_t comment) +{ + char *line; + char *str; + char *orig_str; + size_t i; + + if (writer->mode == REC_WRITER_SEXP) + { + if (!rec_writer_puts (writer, "(comment ")) + { + return false; + } + if (!rec_writer_putc (writer, '"')) + { + return false; + } + + str = rec_comment_text (comment); + for (i = 0; i < strlen (str); i++) + { + if (str[i] == '\n') + { + if (!rec_writer_puts (writer, "\\n")) + { + return false; + } + } + else + { + if (!rec_writer_putc (writer, str[i])) + { + return false; + } + } + } + + if (!rec_writer_puts (writer, "\")")) + { + return false; + } + } + else + { + /* Every line in the comment is written preceded by a '#' + character. The lines composing the comments are separated by + newline characters. */ + + bool first = true; + + str = strdup (rec_comment_text (comment)); + orig_str = str; /* Save a pointer to str to deallocate it later, + since strsep will modify the str + variable. */ + line = strsep (&str, "\n"); + do + { + if (!first) + { + if (!rec_writer_putc (writer, '\n')) + { + return false; + } + } + + if (!rec_writer_putc (writer, '#') + || !rec_writer_puts (writer, line)) + { + return false; + } + + first = false; + } + while ((line = strsep (&str, "\n"))); + + free (orig_str); + } + + return true; +} + +bool +rec_write_field (rec_writer_t writer, + rec_field_t field) +{ + size_t pos; + const char *fname; + const char *fvalue; + enum rec_writer_mode_e mode = writer->mode; + + if (mode == REC_WRITER_SEXP) + { + if (!rec_writer_puts (writer, "(field ")) + { + return false; + } + if (!rec_writer_puts (writer, rec_field_char_location_str (field))) + { + return false; + } + if (!rec_writer_putc (writer, ' ')) + { + return false; + } + } + + if ((mode != REC_WRITER_VALUES) && (mode != REC_WRITER_VALUES_ROW)) + { + fname = rec_field_name (field); + if (!rec_write_field_name (writer, fname)) + { + return false; + } + } + + /* Write the field value */ + if (mode == REC_WRITER_SEXP) + { + if (!rec_writer_putc (writer, ' ')) + { + return false; + } + + if (!rec_writer_putc (writer, '"')) + { + return false; + } + } + + fvalue = rec_field_value (field); + + if ((strlen (fvalue) > 0) && (mode == REC_WRITER_NORMAL)) + { + if (!rec_writer_putc (writer, ' ')) + { + return false; + } + } + + for (pos = 0; pos < strlen (fvalue); pos++) + { + if (fvalue[pos] == '\n') + { + if (mode == REC_WRITER_SEXP) + { + if (!rec_writer_puts (writer, "\\n")) + { + return false; + } + } + else if (mode == REC_WRITER_NORMAL) + { + if (!rec_writer_puts (writer, "\n+ ")) + { + return false; + } + } + else + { + if (!rec_writer_putc (writer, '\n')) + { + return false; + } + } + } + else if (((fvalue[pos] == '"') || (fvalue[pos] == '\\')) && (mode == REC_WRITER_SEXP)) + { + if ((!rec_writer_putc (writer, '\\')) + || (!rec_writer_putc (writer, fvalue[pos]))) + { + return false; + } + } + else + { + if (!rec_writer_putc (writer, fvalue[pos])) + { + /* EOF on output */ + return false; + } + } + } + + if (mode == REC_WRITER_SEXP) + { + if (!rec_writer_putc (writer, '"')) + { + return false; + } + } + + if (mode == REC_WRITER_SEXP) + { + if (!rec_writer_puts (writer, ")")) + { + return false; + } + } + + return true; +} + +bool +rec_write_field_name (rec_writer_t writer, + const char *field_name) +{ + /* Field names can be written in several formats, according to the + * desired mode: + * + * REC_WRITER_NORMAL + * The field name is written in rec format. i.e. NP: + * REC_WRITER_SEXP + * The field name is a string: "NP" + */ + + enum rec_writer_mode_e mode = writer->mode; + + if (mode == REC_WRITER_SEXP) + { + if (!rec_writer_putc (writer, '"')) + { + return false; + } + } + + if (!rec_writer_puts (writer, field_name)) + { + return false; + } + + if (mode == REC_WRITER_SEXP) + { + if (!rec_writer_putc (writer, '"')) + { + return false; + } + } + else + { + if (!rec_writer_putc (writer, ':')) + { + return false; + } + } + + return true; +} + +bool +rec_write_record (rec_writer_t writer, + rec_record_t record) +{ + bool ret; + rec_mset_iterator_t iter; + rec_mset_elem_t elem; + char *data; + size_t num_field, num_elem, num_fields, num_elems; + enum rec_writer_mode_e mode = writer->mode; + + ret = true; + + if (mode == REC_WRITER_SEXP) + { + if (!rec_writer_puts (writer, "(record ")) + return false; + if (!rec_writer_puts (writer, rec_record_char_location_str (record))) + return false; + if (!rec_writer_puts (writer, " (\n")) + return false; + } + + num_elems = rec_record_num_elems (record); + num_fields = rec_record_num_fields (record); + num_field = 0; + num_elem = 0; + iter = rec_mset_iterator (rec_record_mset (record)); + while (rec_mset_iterator_next (&iter, MSET_ANY, (const void **) &data, &elem)) + { + if (rec_mset_elem_type (elem) == MSET_FIELD) + { + /* Write a field. */ + rec_field_t field = (rec_field_t) data; + + if (!rec_write_field (writer, field)) + { + ret = false; + break; + } + + /* Include a field separator. */ + + if ((mode == REC_WRITER_VALUES_ROW) + && (num_field != (num_fields - 1))) + { + if(mode == REC_WRITER_VALUES_ROW) + { + if (!rec_writer_putc (writer, ' ')) + return false; + } + } + else if ((writer->skip_comments_p && (num_field != (num_fields - 1))) + || (!writer->skip_comments_p && (num_elem != (num_elems - 1)))) + { + if (!rec_writer_putc (writer, '\n')) + return false; + } + + num_field++; + } + else if (!writer->skip_comments_p) + { + /* Write a comment. */ + + rec_comment_t comment = (rec_comment_t) data; + + if ((mode != REC_WRITER_VALUES) && (mode != REC_WRITER_VALUES_ROW)) + { + if (!rec_write_comment (writer, comment)) + { + ret = false; + break; + } + + if (num_elem != (num_elems - 1)) + { + if (!rec_writer_putc (writer, '\n')) + return false; + } + } + } + + num_elem++; + } + + rec_mset_iterator_free (&iter); + + if (mode == REC_WRITER_SEXP) + { + if (!rec_writer_puts (writer, "))")) + { + return false; + } + } + + return ret; +} + +bool +rec_write_rset (rec_writer_t writer, + rec_rset_t rset) +{ + bool ret; + rec_record_t descriptor; + bool wrote_descriptor; + size_t position; + size_t descriptor_pos; + rec_mset_iterator_t iter; + rec_mset_elem_t elem; + void *data; + enum rec_writer_mode_e mode = writer->mode; + + ret = true; + wrote_descriptor = false; + position = 0; + descriptor_pos = rec_rset_descriptor_pos (rset); + descriptor = rec_rset_descriptor (rset); + + /* Special case: record set containing just the record + descriptor. */ + if ((rec_rset_num_elems (rset) == 0) && descriptor) + { + rec_write_record (writer, + rec_rset_descriptor (rset)); + rec_writer_putc (writer, '\n'); + + return true; + } + + iter = rec_mset_iterator (rec_rset_mset (rset)); + while (rec_mset_iterator_next (&iter, MSET_ANY, (const void **) &data, &elem)) + { + if (position != 0) + { + if (!rec_writer_putc (writer, '\n')) + { + ret = false; + } + } + + if (position == descriptor_pos) + { + if (descriptor + && (!(wrote_descriptor = rec_write_record (writer, + rec_rset_descriptor (rset))))) + { + ret = false; + } + else + { + if (wrote_descriptor) + { + if (!rec_writer_puts (writer, "\n\n")) + { + ret = false; + } + } + } + } + + if (rec_mset_elem_type (elem) == MSET_RECORD) + { + ret = rec_write_record (writer, (rec_record_t) data); + } + else if (!writer->skip_comments_p) + { + ret = rec_write_comment (writer, (rec_comment_t) data); + } + + if (!writer->collapse_p || (position == (rec_rset_num_elems (rset) - 1))) + { + if (!rec_writer_putc (writer, '\n')) + { + ret = false; + } + } + + if (!ret) + { + break; + } + + position++; + } + + rec_mset_iterator_free (&iter); + + /* Special case: + * + * # comment 1 + * + * # comment 2 + * ... + * %rec: foo + */ + if (!wrote_descriptor + && (descriptor_pos >= rec_rset_num_elems (rset)) + && rec_rset_descriptor (rset)) + { + if (!rec_writer_putc (writer, '\n')) + { + ret = false; + } + if (!rec_write_record (writer, rec_rset_descriptor (rset))) + { + ret = false; + } + if (!rec_writer_putc (writer, '\n')) + { + ret = false; + } + } + + return ret; +} + +bool +rec_write_db (rec_writer_t writer, + rec_db_t db) +{ + bool ret; + int i; + + ret = true; + for (i = 0; i < rec_db_size (db); i++) + { + rec_rset_t rset = rec_db_get_rset (db, i); + + if (i != 0) + { + if (!rec_writer_putc (writer, '\n')) + { + ret = false; + break; + } + } + + if (!rec_write_rset (writer, rset)) + { + ret = false; + break; + } + } + + return ret; +} + +char * +rec_write_field_str (rec_field_t field, + rec_writer_mode_t mode) +{ + rec_writer_t writer; + char *result; + size_t result_size; + + result = NULL; + writer = rec_writer_new_str (&result, &result_size); + if (writer) + { + rec_writer_set_mode (writer, mode); + rec_write_field (writer, field); + rec_writer_destroy (writer); + } + + return result; +} + +char * +rec_write_field_name_str (const char *field_name, + rec_writer_mode_t mode) +{ + rec_writer_t writer; + char *result; + size_t result_size; + + result = NULL; + writer = rec_writer_new_str (&result, &result_size); + if (writer) + { + rec_writer_set_mode (writer, mode); + rec_write_field_name (writer, field_name); + rec_writer_destroy (writer); + } + + return result; +} + +char * +rec_write_comment_str (rec_comment_t comment, + rec_writer_mode_t mode) +{ + rec_writer_t writer; + char *result; + size_t result_size; + + result = NULL; + writer = rec_writer_new_str (&result, &result_size); + if (writer) + { + rec_writer_set_mode (writer, mode); + rec_write_comment (writer, comment); + rec_writer_destroy (writer); + } + + return result; +} + +bool +rec_write_string (rec_writer_t writer, + const char *str) +{ + return rec_writer_puts (writer, str); +} + +void +rec_writer_set_collapse (rec_writer_t writer, + bool value) +{ + writer->collapse_p = value; +} + +void +rec_writer_set_skip_comments (rec_writer_t writer, + bool value) +{ + writer->skip_comments_p = value; +} + +void +rec_writer_set_mode (rec_writer_t writer, + enum rec_writer_mode_e mode) +{ + writer->mode = mode; +} + +/* + * Private functions + */ + +static bool +rec_writer_putc (rec_writer_t writer, char c) +{ + bool ret; + + ret = false; + if (writer->file_out) + { + ret = (fputc (c, writer->file_out) != EOF); + } + if (writer->buf_out) + { + ret = (rec_buf_putc (c, writer->buf_out) != EOF); + } + + return ret; +} + +static bool +rec_writer_puts (rec_writer_t writer, const char *s) +{ + bool ret; + + ret = false; + if (writer->file_out) + { + ret = (fputs (s, writer->file_out) != EOF); + } + if (writer->buf_out) + { + ret = (rec_buf_puts (s, writer->buf_out) != EOF); + } + + return ret; +} + +/* End of rec-writer.c */ diff --git a/devspec.en_US/project/recutils/src/rec.c b/devspec.en_US/project/recutils/src/rec.c new file mode 100755 index 0000000..eaa0d71 --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec.c @@ -0,0 +1,53 @@ +/* -*- mode: C -*- + * + * File: rec.c + * Date: Sun Oct 24 19:47:16 2010 + * + * GNU recutils - Initialization and finalization routines. + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#if defined REMOTE_DESCRIPTORS +# include <curl/curl.h> +#endif + +#include <gettext.h> + +#include <rec.h> + +void +rec_init (void) +{ + bindtextdomain (PACKAGE, LOCALEDIR); +#if defined REMOTE_DESCRIPTORS + curl_global_init (CURL_GLOBAL_ALL); +#endif +} + +void +rec_fini (void) +{ +#if defined REMOTE_DESCRIPTORS + curl_global_cleanup (); +#endif +} + +/* End of rec.c */ diff --git a/devspec.en_US/project/recutils/src/rec.h b/devspec.en_US/project/recutils/src/rec.h new file mode 100755 index 0000000..114831b --- /dev/null +++ b/devspec.en_US/project/recutils/src/rec.h @@ -0,0 +1,2273 @@ +/* -*- mode: C -*- + * + * File: rec.h + * Date: Fri Feb 27 20:04:59 2009 + * + * GNU recutils - Main Header + * + */ + +/* Copyright (C) 2009-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef GNU_REC_H +#define GNU_REC_H + +#include <stdbool.h> +#include <stdio.h> +#include <fcntl.h> + +/* + * rec format version implemented by this library. + */ + +#define REC_VERSION_MAJOR 1 +#define REC_VERSION_MINOR 0 +#define REC_VERSION_STRING "1.0" + +/* + * INITIALIZATION of the library + */ + +void rec_init (void); +void rec_fini (void); + +/* + * HETEROGENEOUS ORDERED SETS (MULTI-SETS) + * + * Element types: A, B, C + * + * type value next_A next_B next_C + * +-----+----------+-------+--------+--------+ + * | | | | | | + * +-----+----------+-------+--------+--------+ + * . . . . . . + * | | | | | | + * +-----+----------+-------+--------+--------+ + */ + +/* Opaque data type representing a multi-set. */ + +typedef struct rec_mset_s *rec_mset_t; + +/* Opaque data type representing an element which is stored in the + multi-set. */ + +typedef struct rec_mset_elem_s *rec_mset_elem_t; + +/* Structure to hold iterators in the stack. Note that the inner + structure must have the same structure than the gl_list_iterator_t + structure in the internal (and not distributed) gl_list.h. This + structure must be keep up to date. */ + +typedef struct +{ + void *vtable; + void *list; + size_t count; + void *p; void *q; + size_t i; size_t j; +} rec_mset_list_iter_t; + +typedef struct +{ + rec_mset_t mset; + rec_mset_list_iter_t list_iter; +} rec_mset_iterator_t; + + +/* Data types for the callbacks that can be registered in the + multi-set and will be triggered to some events. */ + +typedef void (*rec_mset_disp_fn_t) (void *data); +typedef bool (*rec_mset_equal_fn_t) (void *data1, void *data2); +typedef void *(*rec_mset_dup_fn_t) (void *data); +typedef int (*rec_mset_compare_fn_t) (void *data1, void *data2, int type2); + + +/* Data type representing an element type in a multi-set. This type + is assured to be a scalar and thus it is possible to use the + comparison operators, but otherwise its contents must be + opaque. */ + +typedef int rec_mset_type_t; +#define MSET_ANY 0 + +/*************** Creating and destroying multi-sets *****************/ + +/* Create a new empty multi-set and return a reference to it. NULL is + returned if there is no enough memory to complete the + operation. */ + +rec_mset_t rec_mset_new (void); + +/* Destroy a multi-set, freeing all used resources. This disposes all + the memory used by the mset internals, but not the data elements + stored in the multi-set. */ + +void rec_mset_destroy (rec_mset_t mset); + +/* Create a copy of a multi-set and return a reference to it. This + operation performs a deep copy using the user-provided callback to + duplicate the elements stored in the set. NULL is returned if + there is no enough memory to complete the operation. */ + +rec_mset_t rec_mset_dup (rec_mset_t mset); + +/*************** Registering Types in a multi-set *****************/ + +/* Return true if the multi-set has the specified TYPE registered. + Return false otherwise. Note that this function always returns + true when TYPE is MSET_ANY. */ + +bool rec_mset_type_p (rec_mset_t mset, rec_mset_type_t type); + +/* Register a type in a multi-set. NAME must be a NULL-terminated + string with a unique name that will identify the type. The + provided callbacks will be called when needed. This function + returns an integer value that will identify the newly created type. + The only assumption user code can make about this number is that it + cant equal MSET_ANY. */ + +rec_mset_type_t rec_mset_register_type (rec_mset_t mset, + char *name, + rec_mset_disp_fn_t disp_fn, + rec_mset_equal_fn_t equal_fn, + rec_mset_dup_fn_t dup_fn, + rec_mset_compare_fn_t compare_fn); + +/* Return the number of elements of the given type stored in a + multi-set. If TYPE is MSET_ANY then the total number of elements + stored in the set is returned, regardless their type. If the + specified type does not exist in the multi-set then this function + returns 0. */ + +size_t rec_mset_count (rec_mset_t mset, rec_mset_type_t type); + +/*************** Getting, inserting and removing elements **********/ + +/* Get the data stored at a specific position in a mset. The returned + data occupies the POSITIONth position in the internal list of + elements of the specified type. If there is no element stored at + POSITION this function returns NULL. */ + +void *rec_mset_get_at (rec_mset_t mset, + rec_mset_type_t type, + size_t position); + +/* Create a new element at a specific position in a mset, storing a + given data. If POSITION is 0 then the element is prepended. If + POSITION is equal or bigger than the number of the existing + elements with the same type in the mset then the new element is + appended. The function returns the newly created element, or NULL + if there is not enough memory to perform the operation. */ + +rec_mset_elem_t rec_mset_insert_at (rec_mset_t mset, + rec_mset_type_t type, + void *data, + size_t position); + +/* Insert some given data just after another element in a mset. The + function returns the newly created element, or NULL if there was no + enough memory to perform the operation. */ + +rec_mset_elem_t rec_mset_insert_after (rec_mset_t mset, + rec_mset_type_t type, + void *data, + rec_mset_elem_t elem); + +/* Append some given daata to a mset. This is equivalent to call + rec_mset_insert_at specifying a position equal or bigger than the + number of the existing elements with type TYPE in the mset. The + function returns the newly created element, or NULL if there was no + enough memory to perform the operation. */ + +rec_mset_elem_t rec_mset_append (rec_mset_t mset, + rec_mset_type_t elem_type, + void *data, + rec_mset_type_t type); + +/* Add some given data to a mset. The position where the new element + is inserted depends on the sorting criteria implemented by the + compare_fn callback for the element type. The function returns the + newly created element, or NULL if there was no enough memory to + perform the operation. */ + +rec_mset_elem_t rec_mset_add_sorted (rec_mset_t mset, + rec_mset_type_t type, + void *data); + +/* Remove the element occupying the specified position from a record + set. This function returns true if the element was removed, and + false if there were no element stored at the specified + position. */ + +bool rec_mset_remove_at (rec_mset_t mset, + rec_mset_type_t type, + size_t position); + +/* Remove an element from the multi-set. The function returns true if + the element was found in the list and removed. */ + +bool rec_mset_remove_elem (rec_mset_t mset, rec_mset_elem_t elem); + +/* Search for an element storing the specified data in a mset and + return it. NULL is returned in case no element in the record set + is storing DATA. */ + +rec_mset_elem_t rec_mset_search (rec_mset_t mset, void *data); + +/*************** Iterating on mset elements *************************/ + +/* Create and return an iterator traversing elements in the multi-set. + The mset contents must not be modified while the iterator is in + use, except for replacing or removing the last returned + element. */ + +rec_mset_iterator_t rec_mset_iterator (rec_mset_t mset); + +/* Advance the iterator to the next element of the given type. The + data stored by the next element is stored in *DATA if DATA is + non-NULL and a reference to the element in *ELEM if ELEM is + non-NULL. The function returns true if there is a next element to + which iterate to, and false otherwise. */ + +bool rec_mset_iterator_next (rec_mset_iterator_t *iterator, + rec_mset_type_t type, + const void **data, + rec_mset_elem_t *elem); + +/* Free an iterator. */ + +void rec_mset_iterator_free (rec_mset_iterator_t *iterator); + +/*************** Managing mset elements ******************************/ + +/* Return the type of the given multi-set element. Since every + element must be of some concrete type, the returned value cannot be + equal to MSET_ANY. */ + +rec_mset_type_t rec_mset_elem_type (rec_mset_elem_t elem); + +/* Set the type of the given multi-set element. This function is + useful to transform records into comments. */ + +void rec_mset_elem_set_type (rec_mset_elem_t elem, rec_mset_type_t type); + +/* Return a void pointer pointing to the data stored in the given mset + element. If no data was stored in the element then this function + returns NULL. */ + +void *rec_mset_elem_data (rec_mset_elem_t elem); + +/* Set the data stored in a multi-set element. The memory pointed by + the previous value of the internal pointer is not freed or altered + in any other way by this operation. */ + +void rec_mset_elem_set_data (rec_mset_elem_t elem, void *data); + +/* Determine whether the values stored in two multi-set elements are + equal. The comparison is performed using the user-provided + compare_fn callback. */ + +bool rec_mset_elem_equal_p (rec_mset_elem_t elem1, rec_mset_elem_t elem2); + +/* Create a copy of the data stored in a mset element and return a + reference to it. This uses the user-provided callback to duplicate + the data. NULL is returned if there is no enough memory to + complete the operation. */ + +void *rec_mset_elem_dup_data (rec_mset_elem_t elem); + +/************** Sorting, grouping and other operations **************/ + +/* Sort a given multi-set using the compare_fn callbacks provided by + the user when defining the types of the elements stored. This is a + destructive operation. Returns a copy of the mset argument if the + operation suceeded, NULL if there is not enough memory to perform + the operation. */ + +rec_mset_t rec_mset_sort (rec_mset_t mset); + +/************************* Debugging ********************************/ + +/* Dump the contents of a multi-set to the terminal. For debugging + purposes. */ + +void rec_mset_dump (rec_mset_t mset); + +/* + * FLEXIBLE BUFFERS + * + * A flexible buffer (rec_buf_t) is a buffer to which stream-like + * operations can be applied. Its size will grow as required. + */ + +typedef struct rec_buf_s *rec_buf_t; + +rec_buf_t rec_buf_new (char **data, size_t *size); +void rec_buf_close (rec_buf_t buffer); + +/* rec_buf_putc returns the character written as an unsigned char cast + to an int, or EOF on error. */ +int rec_buf_putc (int c, rec_buf_t buffer); +/* rec_buf_puts returns a non-negative number on success (number of + characters written), or EOF on error. */ +int rec_buf_puts (const char *s, rec_buf_t buffer); + +void rec_buf_rewind (rec_buf_t buf, int n); + +/* + * COMMENTS + * + * A comment is a block of text. The printed representation of a + * comment includes a sharp (#) character after each newline (\n) + * character. + */ + +typedef char *rec_comment_t; + +/* Create a new comment and return it. NULL is returned if there is + not enough memory to perform the operation. */ + +rec_comment_t rec_comment_new (char *text); + +/* Destroy a comment, freeing all used resources. */ + +void rec_comment_destroy (rec_comment_t comment); + +/* Make a copy of the passed comment and return it. NULL is returned + if there is not enough memory to perform the operation. */ + +rec_comment_t rec_comment_dup (rec_comment_t comment); + +/* Return a string containing the text in the comment. */ + +char *rec_comment_text (rec_comment_t comment); + +/* Set the text of a comment. Any previous text associated with the + comment is destroyed and its memory freed. */ + +void rec_comment_set_text (rec_comment_t *comment, char *text); + +/* Determine whether the texts stored in two given comments are + equal. */ + +bool rec_comment_equal_p (rec_comment_t comment1, rec_comment_t comment2); + +/* FIELD NAMES + * + */ + +/******************* Regexps for field names *******************/ + +#define REC_FNAME_RE "[a-zA-Z%][a-zA-Z0-9_]*" + +#define REC_TYPE_NAME_RE "[a-zA-Z][a-zA-Z0-9_-]*" +#define REC_URL_REGEXP "(file|http|ftp|https)://[^ \t]+" +#define REC_FILE_REGEXP "(/?[^/ \t\n]+)+" + +/******************* Field data types **************************/ + +/* + * The following enumeration contains identifiers for the standard + * fields used by the library. + * + * Changes to this enumerated value will require some fixes in + * rec-field-name.c. + */ + +enum rec_std_field_e +{ + REC_FIELD_AUTO = 0, + REC_FIELD_CONFIDENTIAL, + REC_FIELD_KEY, + REC_FIELD_MANDATORY, + REC_FIELD_PROHIBIT, + REC_FIELD_REC, + REC_FIELD_SIZE, + REC_FIELD_SORT, + REC_FIELD_TYPE, + REC_FIELD_TYPEDEF, + REC_FIELD_UNIQUE, + REC_FIELD_CONSTRAINT, + REC_FIELD_ALLOWED +}; + +/******************* Field name utilities **********************/ + +/* Determine whether two given strings contain the same field name. + Note that this function does not check wheter the strings actually + contain valid field names. */ + +bool rec_field_name_equal_p (const char *name1, const char *name2); + +/* Determine whether a given string is a correct field name. */ + +bool rec_field_name_p (const char *str); + +/* Normalise a field name. Any non alphanumeric character, including + '_', '-' and '%', are transformed into '_'. This function returns + NULL if there is not enough memory to perform the operation. */ + +char *rec_field_name_normalise (const char *str); + +/* Return the field name corresponding to a standard field, as defined + above. */ + +const char *rec_std_field_name (enum rec_std_field_e std_field); + +/* + * FIELD EXPRESSIONS + * + * A Field expression is composed by a sequence of "elements". Each + * element makes a reference to one or more fields in a record. + */ + +/* Opaque data types for field expressions and the elements stored in + them. */ + +typedef struct rec_fex_s *rec_fex_t; +typedef struct rec_fex_elem_s *rec_fex_elem_t; + +enum rec_fex_kind_e +{ + REC_FEX_SIMPLE, + REC_FEX_CSV, + REC_FEX_SUBSCRIPTS +}; + +/* Regular expressions matching written fexes. */ + +#define REC_FNAME_FEX_RE REC_FNAME_RE "(\\." REC_FNAME_RE ")?" +#define REC_FNAME_LIST_RE REC_FNAME_RE "([ \n\t]+" REC_FNAME_RE ")*" +#define REC_FNAME_LIST_CS_RE REC_FNAME_FEX_RE "(," REC_FNAME_FEX_RE ")*" +#define REC_FNAME_SUB_RE REC_FNAME_FEX_RE "(\\[[0-9]+(-[0-9]+)?\\])?" +#define REC_FEX_FUNCTION_NAME "[a-zA-Z_][a-zA-Z0-9_]*" +#define REC_FEX_CALL REC_FEX_FUNCTION_NAME "\\(" REC_FNAME_FEX_RE "\\)" +#define REC_FNAME_LIST_SUB_ELEM_RE "(" REC_FNAME_SUB_RE "|" REC_FEX_CALL ")" "(:" REC_FNAME_FEX_RE ")?" +#define REC_FNAME_LIST_SUB_RE REC_FNAME_LIST_SUB_ELEM_RE "(," REC_FNAME_LIST_SUB_ELEM_RE ")*" + +/*********** Creating and destroying field expressions ************/ + +/* Parse and create a field expression, and return it. A fex kind + shall be specified in KIND. If STR does not contain a valid FEX of + the given kind then NULL is returned. If there is not enough + memory to perform the operation then NULL is returned. If STR is + NULL then an empty fex is returned. */ + +rec_fex_t rec_fex_new (const char *str, enum rec_fex_kind_e kind); + +/* Destroy a field expression, freeing any used resource. */ + +void rec_fex_destroy (rec_fex_t fex); + +/* Create a copy of a given fex and return a reference to it. If + there is not enough memory to perform the operation then NULL is + returned. */ + +rec_fex_t rec_fex_dup (rec_fex_t fex); + +/********* Getting and setting field expression properties **********/ + +/* Get the number of elements stored in a field expression. */ + +size_t rec_fex_size (rec_fex_t fex); + +/* Check whether a given field (or set of fields) identified by their + name and indexes, are contained in a fex. */ + +bool rec_fex_member_p (rec_fex_t fex, const char *fname, int min, int max); + +/* Get the element of a field expression occupying the given position. + If the position is invalid then NULL is returned. */ + +rec_fex_elem_t rec_fex_get (rec_fex_t fex, size_t position); + +/* Append an element at the end of the fex and return it. This + function returns NULL if there is not enough memory to perform the + operation. */ + +rec_fex_elem_t rec_fex_append (rec_fex_t fex, const char *fname, + int min, int max); + +/* Determine whether all the elements of the given FEX are function + calls. */ + +bool rec_fex_all_calls_p (rec_fex_t fex); + +/**************** Accessing field expression elements **************/ + +/* Return the name of the field(s) referred by a given fex + element. */ + +const char *rec_fex_elem_field_name (rec_fex_elem_t elem); + +/* Set the name of the field(s) referred by a given fex element. This + function returns 'false' if there is not enough memory to perform + the operation. */ + +bool rec_fex_elem_set_field_name (rec_fex_elem_t elem, const char *fname); + +/* Get the 'min' index associated with the field(s) referred by a + given fex element. */ + +int rec_fex_elem_min (rec_fex_elem_t elem); + +/* Get the 'max' index associated with the field(s) referred by a + given fex element. Note that if the index is unused (the element + refers to just one field) then -1 is returned. */ + +int rec_fex_elem_max (rec_fex_elem_t elem); + +/* Get the 'rewrite_to' field name associated with the field(s) referred + by a given fex element. If no rewrite rule was specified in the + fex entry then NULL is returned. */ + +const char *rec_fex_elem_rewrite_to (rec_fex_elem_t elem); + +/* Get the function name associated with a given fex element. If the + fex entry is not a function call then NULL is returned. */ + +const char *rec_fex_elem_function_name (rec_fex_elem_t elem); + +/* Get the pointer to the context data to be used in the function + call, if any. */ + +void **rec_fex_elem_function_data (rec_fex_elem_t elem); + +/*********** Miscellaneous field expressions functions ************/ + +/* Check whether a given string STR contains a proper fex description + of type KIND. */ + +bool rec_fex_check (const char *str, enum rec_fex_kind_e kind); + +/* Sort the elements of a fex using the 'min' index of the elements as + the sorting criteria. */ + +void rec_fex_sort (rec_fex_t fex); + +/* Get the written form of a field expression. This function returns + NULL if there is not enough memory to perform the operation. */ + +char *rec_fex_str (rec_fex_t fex, enum rec_fex_kind_e kind); + +/* + * FIELD TYPES + * + */ + +enum rec_type_kind_e + { + /* Unrestricted. */ + REC_TYPE_NONE = 0, + /* An integer number. */ + REC_TYPE_INT, + /* A Boolean. */ + REC_TYPE_BOOL, + /* An integer number within a given range. */ + REC_TYPE_RANGE, + /* A real number. */ + REC_TYPE_REAL, + /* A string with a limitation on its size. */ + REC_TYPE_SIZE, + /* A line. */ + REC_TYPE_LINE, + /* A regexp. */ + REC_TYPE_REGEXP, + /* A date. */ + REC_TYPE_DATE, + /* An Enumeration. */ + REC_TYPE_ENUM, + /* A field name. */ + REC_TYPE_FIELD, + /* An email. */ + REC_TYPE_EMAIL, + /* An universally unique identifier (uuid). */ + REC_TYPE_UUID, + /* A foreign key. */ + REC_TYPE_REC + }; + +typedef struct rec_type_s *rec_type_t; + +/* Create a new type based on the textual description in STR. */ +rec_type_t rec_type_new (const char *str); + +/* Destroy a type. */ +void rec_type_destroy (rec_type_t type); + +/* Determine whether a string contains a valid type description. */ +bool rec_type_descr_p (const char *str); + +/* Get the kind of the type. The _str version returns a string with + the name of the type. */ +enum rec_type_kind_e rec_type_kind (rec_type_t type); +char *rec_type_kind_str (rec_type_t type); + +/* Get the min and max parametes of a range type. If the type does + not define a range then -1 is returned. */ +int rec_type_min (rec_type_t type); +int rec_type_max (rec_type_t type); + +/* Get the record set name of a rec type. If the type does not define + a rec then NULL is returned. */ +const char *rec_type_rec (rec_type_t type); + +/* Get and set the name of a type. Types are created anonymous by + rec_type_new, so the getter will return NULL unless a name is + set. */ +const char *rec_type_name (rec_type_t type); +void rec_type_set_name (rec_type_t type, const char *name); + +/* Determine whether two types are the same type. + * + * Two types are equal if, + * + * - They are of the same kind, and + * + * - Depending on the kind of types: + * + * + For sizes + * + * The maximum size specified in both types is the same. + * + * + For ranges + * + * The ranges specified in both types are the same. + * + * + For enums + * + * Both enums have the same number of entries, they are identical + * and in the same order. + * + * + For regexps + * + * They are never equal. + */ +bool rec_type_equal_p (rec_type_t type1, rec_type_t type2); + +/* Check the contents of a string against a type. In case some error + arises, return it in ERROR_STR if it is not NULL. */ + +bool rec_type_check (rec_type_t type, const char *str, char **error_str); + +/* Compare two values of a given type. The comparison criteria will + vary depending of the given type: numerical for ints and reals, + time comparison for dates, etc. If TYPE is NULL then a + lexicographic comparison is performed. Return -1 if VAL1 < VAL2, 0 + if VAL1 == VAL2 and 1 if VAL1 > VAL2. */ + +int rec_type_values_cmp (rec_type_t type, const char *val1, const char *val2); + +/* + * TYPE REGISTRIES. + * + * Type registries are collections of named types. The following API + * provides facilities to maintain type registries. + */ + +typedef struct rec_type_reg_s *rec_type_reg_t; + +/* Create and return an empty type registry. NULL is returned if + there is not enough memory to perform the operation. */ + +rec_type_reg_t rec_type_reg_new (void); + +/* Destroy a type registry, freeing resources. */ +void rec_type_reg_destroy (rec_type_reg_t reg); + +/* Insert a new type in the type registry. If a type with the same + name already exists in the registry then it gets replaced. */ +void rec_type_reg_add (rec_type_reg_t reg, rec_type_t type); + +/* Insert a new type in the type registry as a synonim of another + type. If a type with the same name already exists in the registry + then it gets replaced. */ +void rec_type_reg_add_synonym (rec_type_reg_t reg, const char *type_name, + const char *to_name); + +/* Get the type named TYPE_NAME stored in REG. If it does not exist + NULL is returned. */ +rec_type_t rec_type_reg_get (rec_type_reg_t reg, const char *type_name); + +/* + * FIELDS + * + * A field is an association between a label and a value. + */ + +/* Opaque data type representing a field. */ + +typedef struct rec_field_s *rec_field_t; + +/*************** Creating and destroying fields *****************/ + +/* Create a new field and return a reference to it. NULL is returned + if there is no enough memory to perform the operation. */ + +rec_field_t rec_field_new (const char *name, const char *value); + +/* Destroy a field freeing all used resources. This disposes all the + memory used by the field internals. */ + +void rec_field_destroy (rec_field_t field); + +/* Create a copy of a field and return a reference to it. This + operation performs a deep copy of the contents of the field. NULL + is returned if there is no enough memory to perform the + operation. */ + +rec_field_t rec_field_dup (rec_field_t field); + +/******************** Comparing fields ****************************/ + +/* Determine wether two given fields are equal (i.e. they have equal + names but possibly different values). */ + +bool rec_field_equal_p (rec_field_t field1, rec_field_t field2); + +/************ Getting and Setting field properties *****************/ + +/* Return a NULL terminated string containing the name of a field. + Note that this function can't return the empty string for a + properly initialized field. */ + +const char *rec_field_name (rec_field_t field); + +/* Set the name of a field. This function returns 'false' if there is + not enough memory to perform the operation. */ + +bool rec_field_set_name (rec_field_t field, const char *name); + +/* Return a NULL terminated string containing the value of a field, + i.e. the string stored in the field. The returned string may be + empty if the field has no value, but never NULL. */ + +const char *rec_field_value (rec_field_t field); + +/* Set the value of a given field to the given string. This function + returns 'false' if there is not enough memory to perform the + operation. */ + +bool rec_field_set_value (rec_field_t field, const char *value); + +/* Return a string describing the source of the field. The specific + meaning of the source depends on the user: it may be a file name, + or something else. This function returns NULL for a field for + which a source was never set. */ + +const char *rec_field_source (rec_field_t field); + +/* Set a string describing the source of the field. Any previous + string associated to the field is destroyed and the memory it + occupies is freed. This function returns 'false' if there is not + enough memory to perform the operation. */ + +bool rec_field_set_source (rec_field_t field, const char *source); + +/* Return an integer representing the location of the field within its + source. The specific meaning of the location depends on the user: + it may be a line number, or something else. This function returns + 0 for fields not having a defined source. */ + +size_t rec_field_location (rec_field_t field); + +/* Return the textual representation for the location of a field + within its source. This function returns NULL for fields not + having a defined source. */ + +const char *rec_field_location_str (rec_field_t field); + +/* Set a number as the new location for the given field. Any + previously stored location is forgotten. This function returns + 'false' if there is not enough memory to perform the operation. */ + +bool rec_field_set_location (rec_field_t field, size_t location); + +/* Return an integer representing the char location of the field + within its source. The specific meaning of the location depends on + the user, usually being the offset in bytes since the beginning of + a file or memory buffer. This function returns 0 for fields not + having a defined source. */ + +size_t rec_field_char_location (rec_field_t field); + +/* Return the textual representation for the char location of a field + within its source. This function returns NULL for fields not + having a defined source. */ + +const char *rec_field_char_location_str (rec_field_t field); + +/* Set a number as the new char location for the given field. Any + previously stored char location is forgotten. This function + returns 'false' if there is not enough memory to perform the + operation. */ + +bool rec_field_set_char_location (rec_field_t field, size_t location); + +/* Get/set the mark of a given field, which is an integer associated + to the field ADT. */ + +void rec_field_set_mark (rec_field_t field, int mark); +int rec_field_mark (rec_field_t field); + +/********************* Transformations in fields ********************/ + +/* Get the textual representation of a field and make it a comment + variable. This function returns NULL if there is no enough memory + to perform the operation. */ + +rec_comment_t rec_field_to_comment (rec_field_t field); + +/* + * RECORDS + * + * A record is an ordered set of one or more fields intermixed with + * comment blocks. + */ + +/* Opaque data type representing a record. */ + +typedef struct rec_record_s *rec_record_t; + +/* Record mset types. Note that the following constants are relying + on the fact the multi-sets assign consecutive type ids starting + with 1. This is done this way for performance reasons, but it + means that this constants must be ajusted in case the order in + which the types are registered in rec_record_new changes. */ + +#define MSET_FIELD 1 +#define MSET_COMMENT 2 + +/*************** Creating and destroying records *****************/ + +/* Create a new empty record and return a reference to it. NULL is + returned if there is no enough memory to perform the operation. */ + +rec_record_t rec_record_new (void); + +/* Destroy a record, freeing all used resources. This disposes all + the memory used by the record internals, including any stored field + or comment. */ + +void rec_record_destroy (rec_record_t record); + +/* Create a copy of a record and return a reference to it. This + operation performs a deep copy of the contained fields and + comments. NULL is returned if there is no enough memory to perform + the operation. */ + +rec_record_t rec_record_dup (rec_record_t record); + +/******************** Comparing records ***************************/ + +/* Determine whether a given record is a subset of another record. A + record 'A' is a subset of a record 'B' if and only if for every + field or comment contained in 'A' there is an equivalent field or + comment in 'B'. The order of the elements is not relevant. */ + +bool rec_record_subset_p (rec_record_t record1, rec_record_t record2); + +/* Determine whether a given record is equal to another record. A + record 'A' is equal to a record 'B' if the 'A' is a subset of 'B' + and 'B' is a subset of 'A'. */ + +bool rec_record_equal_p (rec_record_t record1, rec_record_t record2); + +/************ Getting and Setting record properties ****************/ + +/* Return the multi-set containing the elements stored by the given + record. */ + +rec_mset_t rec_record_mset (rec_record_t record); + +/* Return the number of elements stored in the given record, of any + type. */ + +size_t rec_record_num_elems (rec_record_t record); + +/* Return the number of fields stored in the given record. */ + +size_t rec_record_num_fields (rec_record_t record); + +/* Return the number of comments stored in the given record. */ + +size_t rec_record_num_comments (rec_record_t record); + +/* Return a string describing the source of the record. The specific + meaning of the source depends on the user: it may be a file name, + or something else. This function returns NULL for a record for + which a source was never set. */ + +char *rec_record_source (rec_record_t record); + +/* Set a string describing the source of the record. Any previous + string associated to the record is destroyed and the memory it + occupies is freed. */ + +void rec_record_set_source (rec_record_t record, char *source); + +/* Return an integer representing the location of the record within + its source. The specific meaning of the location depends on the + user: it may be a line number, or something else. This function + returns 0 for records not having a defined source. */ + +size_t rec_record_location (rec_record_t record); + +/* Return the textual representation for the location of a record + within its source. This function returns NULL for records not + having a defined source. */ + +char *rec_record_location_str (rec_record_t record); + +/* Set a number as the new location for the given record. Any + previously stored location is forgotten. */ + +void rec_record_set_location (rec_record_t record, size_t location); + +/* Return an integer representing the char location of the record + within its source. The specific meaning of the location depends on + the user, usually being the offset in bytes since the beginning of + a file or memory buffer. This function returns 0 for records not + having a defined source. */ + +size_t rec_record_char_location (rec_record_t record); + +/* Return the textual representation for the char location of a record + within its source. This function returns NULL for records not + having a defined source. */ + +char *rec_record_char_location_str (rec_record_t record); + +/* Set a number as the new char location for the given record. Any + previously stored char location is forgotten. */ + +void rec_record_set_char_location (rec_record_t record, size_t char_location); + + +/* Return the position occupied by the specified field in the + specified records, not considering comments. */ + +size_t rec_record_get_field_index (rec_record_t record, rec_field_t field); + +/* Return the position occupied by the specified field in the + specified record among the fields having the same name. Thus, if + the provided field is the first having its name in the record then + the function returns 0. If it is the third then the function + returns 2. */ + +size_t rec_record_get_field_index_by_name (rec_record_t record, rec_field_t field); + +/* Determine whether a record contains some field whose value is STR. + The string comparison can be either case-sensitive or + case-insensitive. */ + +bool rec_record_contains_value (rec_record_t record, const char *value, bool case_insensitive); + +/* Determine whether a record contains a field whose name is + FIELD_NAME and value FIELD_VALUE. */ + +bool rec_record_contains_field (rec_record_t record, const char *field_name, const char *field_value); + +/* Determine whether a given record contains a field named after a + given field name. */ + +bool rec_record_field_p (rec_record_t record, const char *field_name); + +/* Return the number of fields name after a given field name stored in + a record. */ + +size_t rec_record_get_num_fields_by_name (rec_record_t record, + const char *field_name); + +/* Return the Nth field named after the given field name in a record. + This function returns NULL if there is no such a field. */ + +rec_field_t rec_record_get_field_by_name (rec_record_t record, + const char *field_name, + size_t n); + +/* Remove the Nth field named after the given field name in a + record. */ + +void rec_record_remove_field_by_name (rec_record_t record, + const char *field_name, + size_t n); + +/* Return the 'container pointer' of a record. It is a pointer which + is used by the user of the record. This function returns NULL if + no container pointer has been set in the record. */ + +void *rec_record_container (rec_record_t record); + +/* Set the 'container pointer' of a record, replacing any previous + value. */ + +void rec_record_set_container (rec_record_t record, void *container); + +/********************* Transformations in records *******************/ + +/* Get the textual representation of a record and make it a comment + variable. This function returns NULL if there is no enough memory + to perform the operation. */ + +rec_comment_t rec_record_to_comment (rec_record_t record); + +/* Remove duplicated fields in a given record. Fields are compared by + field name and value. */ + +void rec_record_uniq (rec_record_t record); + +/* Append two records. This function adds all the fields in + SRC_RECORD to DEST_RECORD. */ + +void rec_record_append (rec_record_t dest_record, rec_record_t src_record); + +/********************* Field Marks in records **********************/ + +/* Reset the marks of all fields in a given records, setting all the + marks to 0. */ + +void rec_record_reset_marks (rec_record_t record); + +/* Set the mark of a given field. Return true if the field is marked + as desired. Return false if the field is not stored in the + record. */ + +bool rec_record_mark_field (rec_record_t record, rec_field_t field, int mark); + +/* Get the mark associated to a field in a record. If the given field + is not found in the record then return 0. */ + +int rec_record_field_mark (rec_record_t record, rec_field_t field); + +/* + * RECORD SETS + * + * A record set is an ordered set of zero or more records and comments + * maybe preceded by a record descriptor. + */ + +#define REC_RECORD_TYPE_RE REC_FNAME_RE + +/* Opaque data type representing a record set. */ + +typedef struct rec_rset_s *rec_rset_t; + +/* Opaque data type representing a selection expression. This is + placed here as a forward declaration. See below in this file for + the definition of the selection expressions stuff. */ + +typedef struct rec_sex_s *rec_sex_t; + +/* Record set mset types. MSET_COMMENT is defined above. */ + +#define MSET_RECORD 1 + +/************ Creating and destroying record sets **************/ + +/* Create a new empty record set and return a reference to it. NULL + is returned if there is no enough memory to perform the + operation. */ + +rec_rset_t rec_rset_new (void); + +/* Destroy a record set, freeing all user resources. This disposes + all the memory used by the record internals, including any stored + record or comment. */ + +void rec_rset_destroy (rec_rset_t rset); + +/* Create a copy of a record set and return a reference to it. This + operation performs a deep copy of the contained records and + comments. NULL is returned if there is no enough memory to perform + the operation. */ + +rec_rset_t rec_rset_dup (rec_rset_t rset); + +/********* Getting and Setting record set properties *************/ + +/* Return the multi-set containing the elements stored by the given + record set. */ + +rec_mset_t rec_rset_mset (rec_rset_t rset); + +/* Return the number of elements stored in the given record set, of + any type. */ + +size_t rec_rset_num_elems (rec_rset_t rset); + +/* Return the number of records stored in the given record set. */ + +size_t rec_rset_num_records (rec_rset_t rset); + +/* Return the number of comments stored in the given record set. */ + +size_t rec_rset_num_comments (rec_rset_t rset); + +/***************** Record descriptor management ******************/ + +/* Return the record descriptor of a given record set. NULL is + returned if the record set does not feature a record + descriptor. */ + +rec_record_t rec_rset_descriptor (rec_rset_t rset); + +/* Set a new record descriptor for a given record set. If there was + previously a record descriptor in the rset then it is destroyed. + This function performs all the requires updates to the semantics + associated with record sets, such as the type registry, size + constraints, etc. If RECORD is NULL then the record set wont + feature a record descriptor. */ + +void rec_rset_set_descriptor (rec_rset_t rset, rec_record_t record); + +/* Return the relative position of the descriptor with respect the + first element in the record set. For example, if there are two + comments before the record descriptor in the record set then this + function returns 3. */ + +size_t rec_rset_descriptor_pos (rec_rset_t rset); + +/* Set the relative position of the descriptor with respect the first + element in the record set. See the documentation for + rec_rset_descriptor_pos for details. */ + +void rec_rset_set_descriptor_pos (rec_rset_t rset, size_t position); + +/* Return the URL associated with a record set (external descriptor). + NULL is returned if the record set does not feature a record + descriptor, or if the record set is not featuring an external + descriptor. */ + +char *rec_rset_url (rec_rset_t rset); + +/* Return the type name of a record set. NULL is returned if the + record set does not feature a record descriptor. */ + +char *rec_rset_type (rec_rset_t rset); + +/* Set the type name of a record set. If there was not a record + descriptor in the rset then it is created with a single %rec field. + In case there was an existing descriptor in the rset then it is + updated to reflect the new name. */ + +void rec_rset_set_type (rec_rset_t rset, const char *type); + +/************ Management of the type registry ***********************/ + +/* Return the type registry of a record set. Note that the registry + will be empty for a newly created rset. */ + +rec_type_reg_t rec_rset_get_type_reg (rec_rset_t rset); + +/* Return the declared type for fields named after the provided field + name in a record set. NULL is returned if no such a type is + found. */ + +rec_type_t rec_rset_get_field_type (rec_rset_t rset, + const char *field_name); + +/********************** Size constraints ****************************/ + +/* Return the minimum number of records allowed for a rset in its + record descriptor. This is 0 for record sets for which no size + constraints have been defined. */ + +size_t rec_rset_min_records (rec_rset_t rset); + +/* Return the maximum number of records allowed for a rset in its + record descriptor. This is SIZE_MAX for record sets for which no + size constraints have been defined. */ + +size_t rec_rset_max_records (rec_rset_t rset); + +/********************** Sex constraints *****************************/ + +/* Return the number of sex constraints defined in a record set. This + is 0 for record sets for which no sex constraints have been + defined. */ + +size_t rec_rset_num_sex_constraints (rec_rset_t rset); + +/* Return a given sex constraint defined in a record sex. The + provided index must be between 0 and the value returned by + rec_rset_num_sex_constraints - 1. */ + +rec_sex_t rec_rset_sex_constraint (rec_rset_t rset, size_t index); + + +/********************** Other functionality *************************/ + +/* Rename a field in a record descriptor. Field names are not + modified in the records themselves, but only in the record + descriptor. Note that the comparisons of the field names are + EQL. */ + +void rec_rset_rename_field (rec_rset_t rset, + const char *field_name, + const char *new_field_name); + +/* Return a fex with the names of all the fields defined as + auto-incremented fields in a record set. */ + +rec_fex_t rec_rset_auto (rec_rset_t rset); + +/* Return the name of the key field of the record set. If the record + set does not have a key defined then return NULL. */ + +const char *rec_rset_key (rec_rset_t rset); + +/* Return a fex with the names of all the fields defined as + confidential fields in a record set. */ + +rec_fex_t rec_rset_confidential (rec_rset_t rset); + +/* Determine whether a given field name corresponds to a confidential + field in a record set. */ + +bool rec_rset_field_confidential_p (rec_rset_t rset, const char *field_name); + +/* Return a string describing the source of the record set. The + specific meaning of the source depends on the user: it may be a + file name, or something else. This function returns NULL for a + record set for which a source was never set. */ + +char *rec_rset_source (rec_rset_t rset); + +/* Set an orderd set of of field names that will be used as the + sorting criteria for a record set. The field names will take + precedence to any other way to define the sorting criteria, such as + the %sort special field in the record descriptor. This function + returns 'false' if there is not enough memory to perform the + operation. */ + +bool rec_rset_set_order_by_fields (rec_rset_t rset, rec_fex_t field_names); + +/* Return the field names that are used to sort a record set. */ + +rec_fex_t rec_rset_order_by_fields (rec_rset_t rset); + +/* Sort a record set. The SORT_BY parameter is a fex that, if non + NULL, contains the field names which will be used as the sorting + criteria. If no SORT_BY fields is specified then whatever sorting + criteria specified in the record set is used. If no sorting + criteria exists then the function is a no-op. The function returns + a copy of RSET or NULL if there is not enough memory to perform the + operation. */ + +rec_rset_t rec_rset_sort (rec_rset_t rset, rec_fex_t sort_by); + +/* Group the records of a record set by the given fields in GROUP_BY. + The given record set must be sorted by GROUP_BY. Note that this + function uses the first field with the given names found in a + record, ignoring any subsequent field. It is up to the user to + provide the right records in order to get the desired results. The + function returns a copy of RSET or NULL if there was not enough + memory to perform the operation. */ + +rec_rset_t rec_rset_group (rec_rset_t rset, rec_fex_t group_by); + +/* Add missing auto fields defined in a record set to a given record. + The record could not be stored in the record set used to determine + which auto fields to add. This function is a no-operation if the + given record set is not defining any auto field, or if the passed + record already contains all fields marked as auto in the record + set. The function returns a copy of RSET or NULL if there was not + enough memory to perform the operation. */ + +rec_rset_t rec_rset_add_auto_fields (rec_rset_t rset, rec_record_t record); + +/* + * DATABASES + * + * A database is an ordered set of zero or more record sets. + */ + +/* Opaque type representing a database. */ + +typedef struct rec_db_s *rec_db_t; + +/* Opaque data type representing a registry of aggregates. This is + placed here as a forward declaration. See below in this file for + the description of field functions. */ + +typedef struct rec_aggregate_reg_s *rec_aggregate_reg_t; + +/************ Creating and destrying databases *********************/ + +/* Create a new empty database and return it. This function returns + NULL if there is not enough memory to perform the operation. */ + +rec_db_t rec_db_new (void); + +/* Destroy a database, freeing any used memory. This means that all + the record sets contained in the database are also destroyed. */ + +void rec_db_destroy (rec_db_t db); + +/*********** Getting and setting properties of databases **********/ + +/* Return the number of record sets contained in a given record + set. */ + +size_t rec_db_size (rec_db_t db); + +/*********** Managing record sets in a database *******************/ + +/* Return the record set occupying the given position in the database. + If no such record set is contained in the database then NULL is + returned. */ + +rec_rset_t rec_db_get_rset (rec_db_t db, size_t position); + +/* Insert the given record set into the given database at the given + position. If POSITION >= rec_rset_size (DB), RSET is appended to + the list of fields. If POSITION < 0, RSET is prepended. Otherwise + RSET is inserted at the specified position. If the rset is inserted + then 'true' is returned. If there is an error then 'false' is + returned. */ + +bool rec_db_insert_rset (rec_db_t db, rec_rset_t rset, size_t position); + +/* Remove the record set contained in the given position into the + given database. If POSITION >= rec_db_size (DB), the last record + set is deleted. If POSITION <= 0, the first record set is deleted. + Otherwise the record set occupying the specified position is + deleted. If a record set has been removed then 'true' is returned. + If there is an error or the database has no record sets 'false' is + returned. */ + +bool rec_db_remove_rset (rec_db_t db, size_t position); + +/* Determine whether an rset named TYPE exists in a database. If TYPE + is NULL then it refers to the default record set. */ + +bool rec_db_type_p (rec_db_t db, const char *type); + +/* Get the rset with the given type from db. This function returns +NULL if there is no a record set having that type. */ + +rec_rset_t rec_db_get_rset_by_type (rec_db_t db, const char *type); + +/******************** Miscellaneous database functions ****************/ + +/* Return the registry of aggregates of the given database. */ + +rec_aggregate_reg_t rec_db_aggregates (rec_db_t db); + +/******************** Database High-Level functions *******************/ + +/* Query for some data in a database. The resulting data is returned + in a record set. + + This function takes the following arguments: + + DB + + Database to query. + + TYPE + + The type of records to query. This string must identify a + record set contained in the database. If TYPE is NULL then the + default record set, if any, is queried. + + JOIN + + If not NULL, this argument must be a string denoting a field + name. This field name must be a foreign key (field of type + 'rec') defined in the selected record set. The query operation + will do an inner join using T1.Field = T2.Field as join + criteria. + + INDEX + + If not NULL, this argument is a pointer to a buffer containing + pairs of Min,Max indexes, identifying intervals of valid + records. The list of ends with the pair + REC_Q_NOINDEX,REC_Q_NOINDEX. + + INDEX is mutually exclusive with any other selection option. + + SEX + + Selection expression which is evaluated for every record in the + referred record set. If SEX is NULL then all records are + selected. + + This argument is mutually exclusive with any other selection + option. + + FAST_STRING + + If this argument is not NULL then it is a string which is used + as a fixed pattern. Records featuring fields containing + FAST_STRING as a substring in their values are selected. + + This argument is mutually exclusive with any other selection + option. + + RANDOM + + If not 0, this argument indicates the number of random records + to select from the referred record set. + + This argument is mutually exclusive with any other selection + option. + + FEX + + Field expression to apply to the matching records to build the + records in the result record set. If FEX is NULL then the + matching records are unaltered. + + PASSWORD + + Password to use to decrypt confidential fields. If the password + does not work then the encrypted fields are returned as-is. If + PASSWORD is NULL, or if it is the empty string, then no attempt + to decrypt encrypted fields will be performed. + + GROUP_BY + + If not NULL, group the record set by the given field names. + + SORT_BY + + If not NULL, sort the record set by the given field names. + + FLAGS + + ORed value of any of the following flags: + + REC_Q_DESCRIPTOR + + If set returned record set will feature a record descriptor. If + the query is involving a single record set then the descriptor + will be a copy of the descriptor of the referred record set, and + will feature the same record type name. Otherwise it will be + built from the several descriptors of the involved record sets, + and the record type name will be formed concatenating the type + names of the involved record sets. If this flag is not + activated then the returned record set won't feature a record + descriptor. + + REC_Q_ICASE + + If set the string operations in the selection expression will be + case-insensitive. If FALSE any string operation will be + case-sensitive. + + This function returns NULL if there is not enough memory to + perform the operation. */ + +#define REC_F_DESCRIPTOR 1 +#define REC_F_ICASE 2 +#define REC_F_UNIQ 4 + +#define REC_Q_NOINDEX ((size_t)-1) + +rec_rset_t rec_db_query (rec_db_t db, + const char *type, + const char *join, + size_t *index, + rec_sex_t sex, + const char *fast_string, + size_t random, + rec_fex_t fex, + const char *password, + rec_fex_t group_by, + rec_fex_t sort_by, + int flags); + +/* Insert a new record into a database, either appending it to some + record set or replacing one or more existing records. + + This function takes the following arguments: + + DB + + Database where to insert the record. + + TYPE + + Type of the new record. If there is an existing record set + holding records of that type then the record is added to it. + Otherwise a new record set is appended into the database. + + INDEX + + If not NULL, this argument is a pointer to a buffer containing + pairs of Min,Max indexes, identifying intervals of records that + will be replaced by copies of the provided record. The list of + ends with the pair REC_Q_NOINDEX,REC_Q_NOINDEX. + + INDEX is mutually exclusive with any other selection option. + + SEX + + Selection expression which is evaluated for every record in the + referred record set. If SEX is NULL then all records are + selected. + + This argument is mutually exclusive with any other selection + option. + + FAST_STRING + + If this argument is not NULL then it is a string which is used + as a fixed pattern. Records featuring fields containing + FAST_STRING as a substring in their values are selected. + + This argument is mutually exclusive with any other selection + option. + + RANDOM + + If not 0, this argument indicates the number of random records + to select from the referred record set. + + This argument is mutually exclusive with any other selection + option. + + PASSWORD + + Password to use to crypt confidential fields. If PASSWORD is + NULL, or if it is the empty string, then no attempt to crypt + confidential fields will be performed. + + RECORD + + Record to insert. If more than one record is replaced in the + database they will be substitued with copies of this record. + + FLAGS + + ORed value of any of the following flags: + + REC_F_ICASE + + If set the string operations in the selection expression will be + case-insensitive. If FALSE any string operation will be + case-sensitive. + + REC_F_NOAUTO + + If set then no auto-fields will be added to the newly created + records in the database. + + If no selection option is used then the new record is appended to + either an existing record set identified by TYPE or to a newly + created record set. If some selection option is used then the + matching existing records will be replaced. + + This function returns 'false' if there is not enough memory to + perform the operation. */ + +#define REC_F_NOAUTO 8 + +bool rec_db_insert (rec_db_t db, + const char *type, + size_t *index, + rec_sex_t sex, + const char *fast_string, + size_t random, + const char *password, + rec_record_t record, + int flags); + +/* Delete records from a database, either physically removing them or + commenting them out. + + This function takes the following arguments: + + DB + + Database where to remove records. + + TYPE + + Type of the records to remove. + + INDEX + + If not NULL, this argument is a pointer to a buffer containing + pairs of Min,Max indexes, identifying intervals of records that + will be deleted or commented out. The list of ends with the pair + REC_Q_NOINDEX,REC_Q_NOINDEX. + + INDEX is mutually exclusive with any other selection option. + + SEX + + Selection expression which is evaluated for every record in the + referred record set. If SEX is NULL then all records are + selected. + + This argument is mutually exclusive with any other selection + option. + + FAST_STRING + + If this argument is not NULL then it is a string which is used + as a fixed pattern. Records featuring fields containing + FAST_STRING as a substring in their values are selected. + + This argument is mutually exclusive with any other selection + option. + + RANDOM + + If not 0, this argument indicates the number of random records + to select for deletion in the referred record set. + + This argument is mutually exclusive with any other selection + option. + + FLAGS + + ORed value of any of the following flags: + + REC_F_ICASE + + If set the string operations in the selection expression will be + case-insensitive. If FALSE any string operation will be + case-sensitive. + + REC_F_COMMENT_OUT + + If set the selected records will be commented out instead of physically + removed from the database. + + This function returns 'false' if there is not enough memory to + perform the operation. */ + +#define REC_F_COMMENT_OUT 16 + +bool rec_db_delete (rec_db_t db, + const char *type, + size_t *index, + rec_sex_t sex, + const char *fast_string, + size_t random, + int flags); + +/* Manipulate the fields of the selected records in a database: remove + them, set their values or rename them. + + This function takes the following arguments: + + DB + + Database where to set fields. + + TYPE + + Type of the records to act in. + + INDEX + + If not NULL, this argument is a pointer to a buffer containing + pairs of Min,Max indexes, identifying intervals of records that + will be deleted or commented out. The list of ends with the pair + REC_Q_NOINDEX,REC_Q_NOINDEX. + + INDEX is mutually exclusive with any other selection option. + + SEX + + Selection expression which is evaluated for every record in the + referred record set. If SEX is NULL then all records are + selected. + + This argument is mutually exclusive with any other selection + option. + + FAST_STRING + + If this argument is not NULL then it is a string which is used + as a fixed pattern. Records featuring fields containing + FAST_STRING as a substring in their values are selected. + + This argument is mutually exclusive with any other selection + option. + + RANDOM + + If not 0, this argument indicates the number of random records + to select for manipulation in the referred record set. + + This argument is mutually exclusive with any other selection + option. + + FEX + + Field expression selecting the fields in the selected records + which will be modified. + + ACTION + + Action to perform to the selected fields. Valid values for this + argument are: + + REC_SET_ACT_RENAME + + Rename the matching fields to the string pointed by ACTION_ARG. + + REC_SET_ACT_SET + + Set the value of the matching fields to the string pointed by + ACTION_ARG. + + REC_SET_ACT_ADD + + Add new fields with the names specified in the fex to the + selected records. The new fields will have the string pointed + by ACTION_ARG as their value. + + REC_SET_ACT_SETADD + + Set the selected fields to the value pointed by ACTION_ARG. IF + the fields dont exist then create them with that value. + + REC_SET_ACT_DELETE + + Delete the selected fields. ACTION_ARG is ignored by this + action. + + REC_SET_ACT_COMMENT + + Comment out the selected fields. ACTION_ARG is ignored by this + action. + + ACTION_ARG + + Argument to the selected action. It is ok to pass NULL for + actions which dont require an argument. + + FLAGS + + ORed value of any of the following flags: + + REC_F_ICASE + + If set the string operations in the selection expression will be + case-insensitive. If FALSE any string operation will be + case-sensitive. + + This function return s'false' if there is not enough memory to + perform the operation. +*/ + +#define REC_SET_ACT_NONE 0 +#define REC_SET_ACT_RENAME 1 +#define REC_SET_ACT_SET 2 +#define REC_SET_ACT_ADD 3 +#define REC_SET_ACT_SETADD 4 +#define REC_SET_ACT_DELETE 5 +#define REC_SET_ACT_COMMENT 6 + +bool rec_db_set (rec_db_t db, + const char *type, + size_t *index, + rec_sex_t sex, + const char *fast_string, + size_t random, + rec_fex_t fex, + int action, + const char *action_arg, + int flags); + +/* + * INTEGRITY. + * + */ + +/* Check the integrity of all the record sets stored in a given + database. This function returns the number of errors found. + Descriptive messages about the errors are appended to ERRORS. */ + +int rec_int_check_db (rec_db_t db, + bool check_descriptors_p, + bool remote_descriptors_p, + rec_buf_t errors); + +/* Check the integrity of a given record set. This function returns + the number of errors found. Descriptive messages about the errors + are appended to ERRORS. */ + +int rec_int_check_rset (rec_db_t db, + rec_rset_t rset, + bool check_descriptor_p, + bool remote_descriptor_p, + rec_buf_t errors); + +/* Check the integrity of a database provided ORIG_REC is replaced by + REC. This function returns the number of errors found. + Descriptive messages about the errors are appended to ERRORS. */ + +int rec_int_check_record (rec_db_t db, + rec_rset_t rset, + rec_record_t orig_rec, + rec_record_t rec, + rec_buf_t errors); + +/* Check the type of a given field. This function returns the number + of errors found. Descriptive messages about the errors are + appended to ERRORS. */ + +bool rec_int_check_field_type (rec_db_t db, + rec_rset_t rset, + rec_field_t field, + rec_buf_t errors); + +/* + * PARSER + * + * The rec parser provides functions to parse field, records and + * entire record sets from a file stream or a memory buffer. + */ + +/* Opaque data type representing a parser. */ + +typedef struct rec_parser_s *rec_parser_t; + +/**************** Creating and destroying parsers ******************/ + +/* Create a parser associated with a given file stream that will be + used as the source for the tokens. If not enough memory, return + NULL. */ + +rec_parser_t rec_parser_new (FILE *in, const char *source); + +/* Create a parser associated with a given buffer that will be used as + the source for the tokens. The buffer is of specified size and + doesn't have to be null-terminated. If not enough memory, return + NULL. */ + +rec_parser_t rec_parser_new_mem (const char *buffer, size_t size, const char *source); + +/* Create a parser associated with a given null-terminated buffer that + will be used as the source for the tokens. If not enough memory, + return NULL. */ + +rec_parser_t rec_parser_new_str (const char *buffer, const char *source); + +/* Destroy a parser, freeing all used resources. Note that this call + is not closing the associated file stream or the associated memory + buffer. */ + +void rec_parser_destroy (rec_parser_t parser); + +/*********************** Parsing routines **************************/ + +/* Parse a field name and return it in FNAME. This function returns + 'false' and the value in FNAME is undefined if a parse error is + found. */ + +bool rec_parse_field_name (rec_parser_t parser, char **fname); + +/* Parse a field name from a string and return it. This function + returns NULL if a parse error is found. */ + +char *rec_parse_field_name_str (const char *str); + +/* Parse a field and return it in FIELD. This function returns + 'false' and the value in FIELD is undefined if a parse error is + found. */ + +bool rec_parse_field (rec_parser_t parser, rec_field_t *field); + +/* Parse a record and return it in RECORD. This function returns + 'false' and the value in RECORD is undefined if a parse error is + found. */ + +bool rec_parse_record (rec_parser_t parser, rec_record_t *record); + +/* Parse a record from a string and return it. This function builds + up an ephimeral parser internally in order to do the parsing. This + function returns NULL if a parse error is found. */ + +rec_record_t rec_parse_record_str (const char *str); + +/* Parse a record set and return it in RSET. This function returns + 'false' and the value in RSET is undefined if a parse error is + found. */ + +bool rec_parse_rset (rec_parser_t parser, rec_rset_t *rset); + +/* Parse a database and return it in DB. This function returns + 'false' and the value in DB is undefined if a parse error is + found. */ + +bool rec_parse_db (rec_parser_t parser, rec_db_t *db); + +/************ Getting and Setting properties of parsers *************/ + +/* Determine whether a given parser is in an EOF (end of file) + state. */ + +bool rec_parser_eof (rec_parser_t parser); + +/* Determine whether a given parser is in an error state. If the + parser is in an error state then rec_parser_perror can be used to + get a string describing the error. */ + +bool rec_parser_error (rec_parser_t parser); + +/* Reset the error status and EOF of a parser. */ + +void rec_parser_reset (rec_parser_t parser); + +/* Print a message with details on the last parser error. This + * function produces a message on the standard error output, + * describing the last error encountered while parsing. First, if FMT + * is not NULL, it is printed along with any remaining argument. Then + * a colon and a space are printed, and finally an error message + * describing what went wrong. + */ + +void rec_parser_perror (rec_parser_t parser, const char *fmt, ...); + +/* Change the position in file of the parser to a given offset from + the start of the input. The line number is only used to store it + in the parsed records. Return 'false' on error, e.g. when the + stream used is not seekable or when the position is outside the + buffer. */ +bool rec_parser_seek (rec_parser_t parser, size_t line_number, size_t position); + +/* Return the current position in the file of the parser or -1 on error. */ +long rec_parser_tell (rec_parser_t parser); + +/* + * WRITER + * + * The rec writer provides functions to generate the written form of + * rec objects such as fields and records. + */ + +/* Opaque data type representing a rec writer. */ + +typedef struct rec_writer_s *rec_writer_t; + +/* Enumerated value identifying the operation modes of the writers. + The operation mode defines what kind of output the writer will + generate. */ + +enum rec_writer_mode_e +{ + REC_WRITER_NORMAL, /* Generate output in rec format. */ + REC_WRITER_VALUES, /* Generate output in values format. */ + REC_WRITER_VALUES_ROW, /* Generate output in row format. */ + REC_WRITER_SEXP /* Generate output in sexps. */ +}; + +typedef enum rec_writer_mode_e rec_writer_mode_t; + +/**************** Creating and destroying writers ******************/ + +/* Create a writer associated with a given file stream. If not enough + memory, return NULL. */ + +rec_writer_t rec_writer_new (FILE *out); + +/* Create a writer associated with a given string. If not enough + memory, return NULL. */ + +rec_writer_t rec_writer_new_str (char **str, size_t *str_size); + +/* Destroy a writer, freeing any used resources. Note that this call + is not closing the associated file stream, nor free the associated + string. */ + +void rec_writer_destroy (rec_writer_t writer); + +/************ Getting and setting writer properties ***************/ + +/* Set whether the writer must "collapse" the output records when + writing record sets. */ + +void rec_writer_set_collapse (rec_writer_t writer, bool value); + +/* Set whether the writer must skip comments when outputting record + sets and records. */ + +void rec_writer_set_skip_comments (rec_writer_t writer, bool value); + +/* Set the operation mode of the writer. See the enumerated type + defined above for a list of allowed modes. Note that the mode can + be changed at any time. */ + +void rec_writer_set_mode (rec_writer_t writer, enum rec_writer_mode_e mode); + +/************** Getting the properties of a writer ****************/ + +/* Determine whether a given writer is in an EOF (end-of-file) + state. */ + +bool rec_writer_eof (rec_writer_t writer); + +/********************** Writing routines **************************/ + +/* Write a string in the given writer. This function returns 'false' + if there was an EOF condition. */ + +bool rec_write_string (rec_writer_t writer, const char *str); + +/* Write a comment in the given writer. This function returns 'false' + if there was an EOF condition. */ + +bool rec_write_comment (rec_writer_t writer, rec_comment_t comment); + +/* Write a field name in the given writer. This function returns + 'false' if there was an EOF condition. */ + +bool rec_write_field_name (rec_writer_t writer, const char *field_name); + +/* Write a field in the given writer. If NAME is not NULL, use it + instead of the proper name of the field. This function returns + 'false' if there was an EOF condition. */ + +bool rec_write_field (rec_writer_t writer, rec_field_t field); + +/* Write a record in the given writer. This function returns 'false' + if there was an EOF condition. */ + +bool rec_write_record (rec_writer_t writer, rec_record_t record); + +/* Write a record set to the given writer. This function returns + 'false' if there was an EOF condition. */ + +bool rec_write_rset (rec_writer_t writer, rec_rset_t rset); + +/* Write a database to the given writer. This function returns + 'false' if there was an EOF condition. */ + +bool rec_write_db (rec_writer_t writer, rec_db_t db); + +/* Create a string with the written representation of a field name and + return it. This function returns NULL if there is not enough + memory to perform the operation. */ + +char *rec_write_field_name_str (const char *field_name, rec_writer_mode_t mode); + +/* Create a string with the written representation of a field and + return it. This function returns NULL if there is not enough + memory to perform the operation. */ + +char *rec_write_field_str (rec_field_t field, rec_writer_mode_t mode); + +/* Create a string with the written representation of a comment and + return it. This function returns NULL if there is not enough + memory to perform the operation. */ + +char *rec_write_comment_str (rec_comment_t comment, rec_writer_mode_t mode); + +/* + * SELECTION EXPRESSIONS + * + * A selection expression is an expression that can be applied to a + * record. The result of the evaluation is a boolean value indicating + * whether the record matches the expression. + * + * The abbreviated term to refer to a selection expression is 'a sex'. + * The plural form is 'sexes'. + */ + +/* The opaque type rec_sex_t is defined above in this file as a + forward declaration. */ + +/**************** Creating and destroying sexes ******************/ + +/* Create a new selection expression and return it. If there is not + enough memory to create the sex, then return NULL. */ + +rec_sex_t rec_sex_new (bool case_insensitive); + +/* Destroy a sex, freeing any used resources. */ + +void rec_sex_destroy (rec_sex_t sex); + +/**************** Compiling and applying sexes ******************/ + +/* Compile a sex. Sexes must be compiled before being used. If there + is a parse error return false. */ + +bool rec_sex_compile (rec_sex_t sex, const char *expr); + +/* Apply a sex expression to a record, setting STATUS in accordance: + 'true' if the record matched the sex, 'false' otherwise. The + function returns the same value that is stored in STATUS. */ + +bool rec_sex_eval (rec_sex_t sex, rec_record_t record, bool *status); + +/* Apply a sex expression and get the result as an allocated + string. */ + +char *rec_sex_eval_str (rec_sex_t sex, rec_record_t record); + +/**************** Miscellaneous sexes functions ******************/ + +/* Print the abstract syntax tree of a compiled sex. This function is + intended to be used for debugging purposes. */ + +void rec_sex_print_ast (rec_sex_t sex); + + +/* + * ENCRYPTION + * + * The following routines encrypt and decrypt fields in rec data. + * + * If librec was built without encryption support, all of them will do + * nothing and return 'false' as if an error occurred. + */ + +/* Prefix used in the encrypted and ASCII encoded field values, which + is used to recognize encrypted values. */ + +#define REC_ENCRYPTED_PREFIX "encrypted-" + +/**************** Encryption routines *******************************/ + +/* Encrypt a given buffer and place the encrypted data in an allocated + output buffer. This function returns 'false' if there was an error + while performing the encryption, such as an incorrect password or + an out-of-memory condition. */ + +bool rec_encrypt (char *in, size_t in_size, const char *password, + char **out, size_t *out_size); + + +/* Encrypt and ASCII-encode the value of a field used the provided + password. The REC_ENCRYPTED_PREFIX is prepended to the result. + This function returns 'false' if there was an error while + performing the encryption, such as an incorrect password or an + out-of-memory condition. */ + +bool rec_encrypt_field (rec_field_t field, const char *password); + +/* Encrypt and ASCII-encode the fields of a record marked as + "confidential" in a given record set, using the provided password. + The REC_ENCRYPTED_PREFIX is prepended to the result. This function + returns 'false' if there was an error while performing the + encryption, such as an incorrect password or an out-of-memory + condition. */ + +bool rec_encrypt_record (rec_rset_t rset, rec_record_t record, + const char *password); + +/**************** Decryption routines *******************************/ + +/* Decrypt a given buffer and place the decrypted data in an allocated + output buffer. This function returns 'false' if there was an error + while performing the decryption, such as an incorrect password or + an out-of-memory condition. */ + +bool rec_decrypt (char *in, size_t in_size, const char *password, + char **out, size_t *out_size); + +/* Decrypt the value of a field used the provided password. This + function returns 'false' if there was an error while perfoming the + decryption, such as an incorrect password or an out-of-memory + condition. Note that this function uses the REC_ENCRYPTED_PREFIX + in order to determine whether a field is already encrypted. */ + +bool rec_decrypt_field (rec_field_t field, const char *password); + +/* Decrypt the encrypted fields of a record marked as "confidential" + in a given record set, using the provided password. This function + returns 'false' if there was an error while performing the + decryption, such as an incorrect password or an out-of-memory + condition. Note that this function uses the REC_ENCRYPTED_PREFIX + in order to determine whether a field is already encrypted. */ + +bool rec_decrypt_record (rec_rset_t rset, rec_record_t record, + const char *password); + +/* + * AGGREGATES + * + * The following routines and data types provide support for + * "aggregate functions". Aggregate functions are applied to sets of + * fields and return a single value. + */ + +/* Data type representing an aggregate function. Aggregate functions + get a record set, a record, a field name and subscripts which can + be -1. The field functions must return a string, which may be + empty. If an out-of-memory condition occurs then they return + NULL. */ + +typedef char *(*rec_aggregate_t) (rec_rset_t rset, + rec_record_t record, + const char *field_name); + +/* + * AGGREGATES REGISTRIES + * + * The following data types and functions provide support for + * maintaining registries with collections of aggregate functions. + * The aggregate functions are identified by a constant string that + * must be unique in the registry. + */ + +/* See the definition of rec_aggregate_reg_t above. */ + +/******** Creating and destroying function registries ************/ + +/* Create a new, empty aggregates registry. If there is not error to + perform the operation then NULL is returned. */ + +rec_aggregate_reg_t rec_aggregate_reg_new (void); + +/* Destroy a functions registry, freeing any used resources. */ + +void rec_aggregate_reg_destroy (rec_aggregate_reg_t func_reg); + +/********* Registering functions and fetching them ***************/ + +/* Register a field function into a functions register, associating it + with a given constant string. If a function associated with the + given string already exists in the registry then it is substitued + by the provided function. The function true if the operation was + successful, and false if there was not enough memory to perform the + operation. */ + +bool rec_aggregate_reg_add (rec_aggregate_reg_t func_reg, const char *name, rec_aggregate_t function); + +/* Fetch a field function from a functions registry. If no function + associated with NAME is found in the registry then NULL is + returned. */ + +rec_aggregate_t rec_aggregate_reg_get (rec_aggregate_reg_t func_get, const char *name); + +/* Register the standard built-in functions shipped with librec in the + given aggregate register. */ + +void rec_aggregate_reg_add_standard (rec_aggregate_reg_t func_reg); + +/* Determine whether a given function name is a standard aggregate. + The comparison is case-insensitive. */ + +bool rec_aggregate_std_p (const char *name); + +#endif /* !GNU_REC_H */ + +/* End of rec.h */ diff --git a/devspec.en_US/project/recutils/src/stamp-h1 b/devspec.en_US/project/recutils/src/stamp-h1 new file mode 100755 index 0000000..57ea58e --- /dev/null +++ b/devspec.en_US/project/recutils/src/stamp-h1 @@ -0,0 +1 @@ +timestamp for src/config.h diff --git a/devspec.en_US/project/recutils/torture/.deps/runtests-runtests.Po b/devspec.en_US/project/recutils/torture/.deps/runtests-runtests.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/.deps/runtests-runtests.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/Makefile b/devspec.en_US/project/recutils/torture/Makefile new file mode 100755 index 0000000..beb02c1 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/Makefile @@ -0,0 +1,4466 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# torture/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# torture/ Makefile.am +# GNU rec library + +# Copyright (C) 2009-2015 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Note that we want to run the unit tests first. They are stored in +# the rec-* subdirectories, but commanded by the Makefile in the +# current directory. That explains the dot in the SUBDIRS variable +# definition. + + +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/recutils +pkgincludedir = $(includedir)/recutils +pkglibdir = $(libdir)/recutils +pkglibexecdir = $(libexecdir)/recutils +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +#TESTS = runtests$(EXEEXT) +#noinst_PROGRAMS = runtests$(EXEEXT) +subdir = torture +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +PROGRAMS = $(noinst_PROGRAMS) +am__runtests_SOURCES_DIST = runtests.c rec-mset/elem-types.h \ + rec-mset/rec-mset-new.c rec-mset/rec-mset-dup.c \ + rec-mset/rec-mset-type-p.c rec-mset/rec-mset-register-type.c \ + rec-mset/rec-mset-count.c rec-mset/rec-mset-get-at.c \ + rec-mset/tsuite-rec-mset.c rec-comment/rec-comment-new.c \ + rec-comment/rec-comment-destroy.c \ + rec-comment/rec-comment-dup.c rec-comment/rec-comment-text.c \ + rec-comment/rec-comment-set-text.c \ + rec-comment/rec-comment-equal-p.c \ + rec-comment/tsuite-rec-comment.c \ + rec-field-name/rec-field-name-equal-p.c \ + rec-field-name/rec-field-name-p.c \ + rec-field-name/rec-field-name-normalise.c \ + rec-field-name/tsuite-rec-field-name.c rec-type/rec-type-new.c \ + rec-type/rec-type-destroy.c rec-type/rec-type-descr-p.c \ + rec-type/rec-type-kind.c rec-type/rec-type-kind-str.c \ + rec-type/rec-type-equal-p.c rec-type/rec-type-check.c \ + rec-type/rec-type-name.c rec-type/rec-type-set-name.c \ + rec-type/tsuite-rec-type.c rec-type-reg/rec-type-reg-new.c \ + rec-type-reg/rec-type-reg-destroy.c \ + rec-type-reg/tsuite-rec-type-reg.c \ + rec-type-reg/rec-type-reg-get.c rec-field/rec-field-name.c \ + rec-field/rec-field-set-name.c rec-field/rec-field-value.c \ + rec-field/rec-field-set-value.c rec-field/rec-field-dup.c \ + rec-field/rec-field-new.c rec-field/rec-field-destroy.c \ + rec-field/rec-field-equal-p.c rec-field/rec-field-source.c \ + rec-field/rec-field-set-source.c \ + rec-field/rec-field-location.c \ + rec-field/rec-field-location-str.c \ + rec-field/rec-field-set-location.c \ + rec-field/rec-field-char-location.c \ + rec-field/rec-field-char-location-str.c \ + rec-field/rec-field-set-char-location.c \ + rec-field/rec-field-to-comment.c rec-field/tsuite-rec-field.c \ + rec-record/tsuite-rec-record.c rec-fex/rec-fex-new.c \ + rec-fex/rec-fex-destroy.c rec-fex/rec-fex-check.c \ + rec-fex/rec-fex-sort.c rec-fex/rec-fex-size.c \ + rec-fex/rec-fex-get.c rec-fex/rec-fex-elem-field-name.c \ + rec-fex/rec-fex-elem-rewrite-to.c rec-fex/rec-fex-elem-min.c \ + rec-fex/rec-fex-elem-max.c rec-fex/rec-fex-str.c \ + rec-fex/tsuite-rec-fex.c rec-parser/rec-parser-new.c \ + rec-parser/rec-parser-new-str.c \ + rec-parser/rec-parser-new-mem.c \ + rec-parser/rec-parser-destroy.c \ + rec-parser/rec-parse-field-name-str.c \ + rec-parser/rec-parse-field-name.c rec-parser/rec-parse-field.c \ + rec-parser/rec-parse-record.c \ + rec-parser/rec-parse-record-str.c rec-parser/rec-parse-rset.c \ + rec-parser/rec-parse-db.c rec-parser/rec-parser-eof.c \ + rec-parser/rec-parser-error.c rec-parser/rec-parser-reset.c \ + rec-parser/rec-parser-perror.c \ + rec-parser/rec-parser-seek-mem.c \ + rec-parser/tsuite-rec-parser.c rec-writer/rec-write-comment.c \ + rec-writer/rec-write-field.c rec-writer/rec-write-field-name.c \ + rec-writer/rec-writer-destroy.c rec-writer/rec-write-record.c \ + rec-writer/rec-writer-new.c rec-writer/rec-write-rset.c \ + rec-writer/rec-write-db.c \ + rec-writer/rec-write-field-name-str.c \ + rec-writer/rec-write-field-str.c \ + rec-writer/rec-write-comment-str.c \ + rec-writer/tsuite-rec-writer.c rec-sex/rec-sex-new.c \ + rec-sex/rec-sex-destroy.c rec-sex/rec-sex-compile.c \ + rec-sex/rec-sex-eval.c rec-sex/tsuite-rec-sex.c +am__dirstamp = $(am__leading_dot)dirstamp +#am__objects_1 = rec-mset/runtests-rec-mset-new.$(OBJEXT) \ +# rec-mset/runtests-rec-mset-dup.$(OBJEXT) \ +# rec-mset/runtests-rec-mset-type-p.$(OBJEXT) \ +# rec-mset/runtests-rec-mset-register-type.$(OBJEXT) \ +# rec-mset/runtests-rec-mset-count.$(OBJEXT) \ +# rec-mset/runtests-rec-mset-get-at.$(OBJEXT) \ +# rec-mset/runtests-tsuite-rec-mset.$(OBJEXT) +#am__objects_2 = \ +# rec-comment/runtests-rec-comment-new.$(OBJEXT) \ +# rec-comment/runtests-rec-comment-destroy.$(OBJEXT) \ +# rec-comment/runtests-rec-comment-dup.$(OBJEXT) \ +# rec-comment/runtests-rec-comment-text.$(OBJEXT) \ +# rec-comment/runtests-rec-comment-set-text.$(OBJEXT) \ +# rec-comment/runtests-rec-comment-equal-p.$(OBJEXT) \ +# rec-comment/runtests-tsuite-rec-comment.$(OBJEXT) +#am__objects_3 = rec-field-name/runtests-rec-field-name-equal-p.$(OBJEXT) \ +# rec-field-name/runtests-rec-field-name-p.$(OBJEXT) \ +# rec-field-name/runtests-rec-field-name-normalise.$(OBJEXT) \ +# rec-field-name/runtests-tsuite-rec-field-name.$(OBJEXT) +#am__objects_4 = rec-type/runtests-rec-type-new.$(OBJEXT) \ +# rec-type/runtests-rec-type-destroy.$(OBJEXT) \ +# rec-type/runtests-rec-type-descr-p.$(OBJEXT) \ +# rec-type/runtests-rec-type-kind.$(OBJEXT) \ +# rec-type/runtests-rec-type-kind-str.$(OBJEXT) \ +# rec-type/runtests-rec-type-equal-p.$(OBJEXT) \ +# rec-type/runtests-rec-type-check.$(OBJEXT) \ +# rec-type/runtests-rec-type-name.$(OBJEXT) \ +# rec-type/runtests-rec-type-set-name.$(OBJEXT) \ +# rec-type/runtests-tsuite-rec-type.$(OBJEXT) +#am__objects_5 = \ +# rec-type-reg/runtests-rec-type-reg-new.$(OBJEXT) \ +# rec-type-reg/runtests-rec-type-reg-destroy.$(OBJEXT) \ +# rec-type-reg/runtests-tsuite-rec-type-reg.$(OBJEXT) \ +# rec-type-reg/runtests-rec-type-reg-get.$(OBJEXT) +#am__objects_6 = \ +# rec-field/runtests-rec-field-name.$(OBJEXT) \ +# rec-field/runtests-rec-field-set-name.$(OBJEXT) \ +# rec-field/runtests-rec-field-value.$(OBJEXT) \ +# rec-field/runtests-rec-field-set-value.$(OBJEXT) \ +# rec-field/runtests-rec-field-dup.$(OBJEXT) \ +# rec-field/runtests-rec-field-new.$(OBJEXT) \ +# rec-field/runtests-rec-field-destroy.$(OBJEXT) \ +# rec-field/runtests-rec-field-equal-p.$(OBJEXT) \ +# rec-field/runtests-rec-field-source.$(OBJEXT) \ +# rec-field/runtests-rec-field-set-source.$(OBJEXT) \ +# rec-field/runtests-rec-field-location.$(OBJEXT) \ +# rec-field/runtests-rec-field-location-str.$(OBJEXT) \ +# rec-field/runtests-rec-field-set-location.$(OBJEXT) \ +# rec-field/runtests-rec-field-char-location.$(OBJEXT) \ +# rec-field/runtests-rec-field-char-location-str.$(OBJEXT) \ +# rec-field/runtests-rec-field-set-char-location.$(OBJEXT) \ +# rec-field/runtests-rec-field-to-comment.$(OBJEXT) \ +# rec-field/runtests-tsuite-rec-field.$(OBJEXT) +#am__objects_7 = \ +# rec-record/runtests-tsuite-rec-record.$(OBJEXT) +#am__objects_8 = rec-fex/runtests-rec-fex-new.$(OBJEXT) \ +# rec-fex/runtests-rec-fex-destroy.$(OBJEXT) \ +# rec-fex/runtests-rec-fex-check.$(OBJEXT) \ +# rec-fex/runtests-rec-fex-sort.$(OBJEXT) \ +# rec-fex/runtests-rec-fex-size.$(OBJEXT) \ +# rec-fex/runtests-rec-fex-get.$(OBJEXT) \ +# rec-fex/runtests-rec-fex-elem-field-name.$(OBJEXT) \ +# rec-fex/runtests-rec-fex-elem-rewrite-to.$(OBJEXT) \ +# rec-fex/runtests-rec-fex-elem-min.$(OBJEXT) \ +# rec-fex/runtests-rec-fex-elem-max.$(OBJEXT) \ +# rec-fex/runtests-rec-fex-str.$(OBJEXT) \ +# rec-fex/runtests-tsuite-rec-fex.$(OBJEXT) +#am__objects_9 = \ +# rec-parser/runtests-rec-parser-new.$(OBJEXT) \ +# rec-parser/runtests-rec-parser-new-str.$(OBJEXT) \ +# rec-parser/runtests-rec-parser-new-mem.$(OBJEXT) \ +# rec-parser/runtests-rec-parser-destroy.$(OBJEXT) \ +# rec-parser/runtests-rec-parse-field-name-str.$(OBJEXT) \ +# rec-parser/runtests-rec-parse-field-name.$(OBJEXT) \ +# rec-parser/runtests-rec-parse-field.$(OBJEXT) \ +# rec-parser/runtests-rec-parse-record.$(OBJEXT) \ +# rec-parser/runtests-rec-parse-record-str.$(OBJEXT) \ +# rec-parser/runtests-rec-parse-rset.$(OBJEXT) \ +# rec-parser/runtests-rec-parse-db.$(OBJEXT) \ +# rec-parser/runtests-rec-parser-eof.$(OBJEXT) \ +# rec-parser/runtests-rec-parser-error.$(OBJEXT) \ +# rec-parser/runtests-rec-parser-reset.$(OBJEXT) \ +# rec-parser/runtests-rec-parser-perror.$(OBJEXT) \ +# rec-parser/runtests-rec-parser-seek-mem.$(OBJEXT) \ +# rec-parser/runtests-tsuite-rec-parser.$(OBJEXT) +#am__objects_10 = \ +# rec-writer/runtests-rec-write-comment.$(OBJEXT) \ +# rec-writer/runtests-rec-write-field.$(OBJEXT) \ +# rec-writer/runtests-rec-write-field-name.$(OBJEXT) \ +# rec-writer/runtests-rec-writer-destroy.$(OBJEXT) \ +# rec-writer/runtests-rec-write-record.$(OBJEXT) \ +# rec-writer/runtests-rec-writer-new.$(OBJEXT) \ +# rec-writer/runtests-rec-write-rset.$(OBJEXT) \ +# rec-writer/runtests-rec-write-db.$(OBJEXT) \ +# rec-writer/runtests-rec-write-field-name-str.$(OBJEXT) \ +# rec-writer/runtests-rec-write-field-str.$(OBJEXT) \ +# rec-writer/runtests-rec-write-comment-str.$(OBJEXT) \ +# rec-writer/runtests-tsuite-rec-writer.$(OBJEXT) +#am__objects_11 = rec-sex/runtests-rec-sex-new.$(OBJEXT) \ +# rec-sex/runtests-rec-sex-destroy.$(OBJEXT) \ +# rec-sex/runtests-rec-sex-compile.$(OBJEXT) \ +# rec-sex/runtests-rec-sex-eval.$(OBJEXT) \ +# rec-sex/runtests-tsuite-rec-sex.$(OBJEXT) +#am_runtests_OBJECTS = runtests-runtests.$(OBJEXT) \ +# $(am__objects_1) $(am__objects_2) $(am__objects_3) \ +# $(am__objects_4) $(am__objects_5) $(am__objects_6) \ +# $(am__objects_7) $(am__objects_8) $(am__objects_9) \ +# $(am__objects_10) $(am__objects_11) +runtests_OBJECTS = $(am_runtests_OBJECTS) +am__DEPENDENCIES_1 = +#runtests_DEPENDENCIES = $(am__DEPENDENCIES_1) \ +# ../src/librec.la +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +am__v_lt_1 = +runtests_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(runtests_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_$(V)) +am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I. -I$(top_builddir)/src +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(runtests_SOURCES) +DIST_SOURCES = $(am__runtests_SOURCES_DIST) +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + check recheck distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/depcomp \ + $(top_srcdir)/build-aux/test-driver +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing aclocal-1.15 +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = $${TAR-tar} +AM_DEFAULT_VERBOSITY = 1 +APPLE_UNIVERSAL_BUILD = 0 +AR = ar +ARFLAGS = cr +ASM_SYMBOL_PREFIX = "" +AUTOCONF = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoconf +AUTOHEADER = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoheader +AUTOMAKE = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing automake-1.15 +AWK = gawk +BASH_HEADERS = /usr/include/bash +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CA68 = +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CHECK_CFLAGS = +CHECK_LIBS = +CONFIG_INCLUDE = src/config.h +CPP = gcc -E +CPPFLAGS = +CURLLIBS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = false +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FGREP = /bin/grep -F +FLOAT_H = +FLOOR_LIBM = -lm +GETOPT_CDEFS_H = +GETOPT_H = +GETTEXT_MACRO_VERSION = 0.19 +GLIBC21 = yes +GLIB_CFLAGS = +GLIB_LIBS = +GMSGFMT = /usr/bin/msgfmt +GMSGFMT_015 = /usr/bin/msgfmt +GNULIB_ACOSF = 0 +GNULIB_ACOSL = 0 +GNULIB_ASINF = 0 +GNULIB_ASINL = 0 +GNULIB_ATAN2F = 0 +GNULIB_ATANF = 0 +GNULIB_ATANL = 0 +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CANONICALIZE_FILE_NAME = 1 +GNULIB_CBRT = 0 +GNULIB_CBRTF = 0 +GNULIB_CBRTL = 0 +GNULIB_CEIL = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHDIR = 1 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 1 +GNULIB_COPYSIGN = 0 +GNULIB_COPYSIGNF = 0 +GNULIB_COPYSIGNL = 0 +GNULIB_COSF = 0 +GNULIB_COSHF = 0 +GNULIB_COSL = 0 +GNULIB_CTIME = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP = 0 +GNULIB_DUP2 = 1 +GNULIB_DUP3 = 0 +GNULIB_DUPLOCALE = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 1 +GNULIB_EXP2 = 0 +GNULIB_EXP2F = 0 +GNULIB_EXP2L = 0 +GNULIB_EXPF = 0 +GNULIB_EXPL = 0 +GNULIB_EXPLICIT_BZERO = 0 +GNULIB_EXPM1 = 0 +GNULIB_EXPM1F = 0 +GNULIB_EXPM1L = 0 +GNULIB_FABSF = 0 +GNULIB_FABSL = 0 +GNULIB_FACCESSAT = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCHMODAT = 0 +GNULIB_FCHOWNAT = 0 +GNULIB_FCLOSE = 0 +GNULIB_FCNTL = 1 +GNULIB_FDATASYNC = 0 +GNULIB_FDOPEN = 0 +GNULIB_FFLUSH = 0 +GNULIB_FFS = 0 +GNULIB_FFSL = 0 +GNULIB_FFSLL = 0 +GNULIB_FGETC = 1 +GNULIB_FGETS = 1 +GNULIB_FLOCK = 1 +GNULIB_FLOOR = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FMA = 0 +GNULIB_FMAF = 0 +GNULIB_FMAL = 0 +GNULIB_FMOD = 0 +GNULIB_FMODF = 0 +GNULIB_FMODL = 0 +GNULIB_FOPEN = 0 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 1 +GNULIB_FPURGE = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREAD = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPF = 0 +GNULIB_FREXPL = 1 +GNULIB_FSCANF = 1 +GNULIB_FSEEK = 1 +GNULIB_FSEEKO = 1 +GNULIB_FSTAT = 1 +GNULIB_FSTATAT = 0 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 1 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FUTIMENS = 0 +GNULIB_FWRITE = 1 +GNULIB_GETC = 1 +GNULIB_GETCHAR = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 1 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETGROUPS = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 1 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETPASS = 1 +GNULIB_GETSUBOPT = 0 +GNULIB_GETTIMEOFDAY = 1 +GNULIB_GETUSERSHELL = 0 +GNULIB_GL_UNISTD_H_GETOPT = +GNULIB_GRANTPT = 0 +GNULIB_GROUP_MEMBER = 1 +GNULIB_HYPOT = 0 +GNULIB_HYPOTF = 0 +GNULIB_HYPOTL = 0 +GNULIB_ILOGB = 0 +GNULIB_ILOGBF = 0 +GNULIB_ILOGBL = 0 +GNULIB_IMAXABS = 0 +GNULIB_IMAXDIV = 0 +GNULIB_ISATTY = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_ISWBLANK = 0 +GNULIB_ISWCTYPE = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPF = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LINKAT = 0 +GNULIB_LOCALECONV = 1 +GNULIB_LOCALENAME = 0 +GNULIB_LOCALTIME = 0 +GNULIB_LOG = 0 +GNULIB_LOG10 = 0 +GNULIB_LOG10F = 0 +GNULIB_LOG10L = 0 +GNULIB_LOG1P = 0 +GNULIB_LOG1PF = 0 +GNULIB_LOG1PL = 0 +GNULIB_LOG2 = 0 +GNULIB_LOG2F = 0 +GNULIB_LOG2L = 0 +GNULIB_LOGB = 0 +GNULIB_LOGBF = 0 +GNULIB_LOGBL = 0 +GNULIB_LOGF = 0 +GNULIB_LOGL = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MBRLEN = 1 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MBTOWC = 1 +GNULIB_MEMCHR = 1 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDIRAT = 0 +GNULIB_MKDTEMP = 0 +GNULIB_MKFIFO = 0 +GNULIB_MKFIFOAT = 0 +GNULIB_MKNOD = 0 +GNULIB_MKNODAT = 0 +GNULIB_MKOSTEMP = 1 +GNULIB_MKOSTEMPS = 0 +GNULIB_MKSTEMP = 1 +GNULIB_MKSTEMPS = 0 +GNULIB_MKTIME = 1 +GNULIB_MODF = 0 +GNULIB_MODFF = 0 +GNULIB_MODFL = 0 +GNULIB_NANOSLEEP = 0 +GNULIB_NL_LANGINFO = 1 +GNULIB_NONBLOCKING = 0 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_OPENAT = 0 +GNULIB_OVERRIDES_STRUCT_STAT = 0 +GNULIB_OVERRIDES_WINT_T = 0 +GNULIB_PCLOSE = 0 +GNULIB_PERROR = 0 +GNULIB_PIPE = 0 +GNULIB_PIPE2 = 0 +GNULIB_POPEN = 0 +GNULIB_POSIX_OPENPT = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_POWF = 0 +GNULIB_PREAD = 0 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 1 +GNULIB_PTHREAD_SIGMASK = 0 +GNULIB_PTSNAME = 0 +GNULIB_PTSNAME_R = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_PWRITE = 0 +GNULIB_QSORT_R = 0 +GNULIB_RAISE = 1 +GNULIB_RANDOM = 0 +GNULIB_RANDOM_R = 1 +GNULIB_RAWMEMCHR = 1 +GNULIB_READ = 0 +GNULIB_READLINK = 1 +GNULIB_READLINKAT = 0 +GNULIB_REALLOCARRAY = 0 +GNULIB_REALLOC_POSIX = 1 +GNULIB_REALPATH = 1 +GNULIB_REMAINDER = 0 +GNULIB_REMAINDERF = 0 +GNULIB_REMAINDERL = 0 +GNULIB_REMOVE = 0 +GNULIB_RENAME = 1 +GNULIB_RENAMEAT = 0 +GNULIB_RINT = 0 +GNULIB_RINTF = 0 +GNULIB_RINTL = 0 +GNULIB_RMDIR = 1 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SCANF = 1 +GNULIB_SECURE_GETENV = 1 +GNULIB_SETENV = 1 +GNULIB_SETHOSTNAME = 0 +GNULIB_SETLOCALE = 0 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SINF = 0 +GNULIB_SINHF = 0 +GNULIB_SINL = 0 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 0 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_SQRTF = 0 +GNULIB_SQRTL = 0 +GNULIB_STAT = 1 +GNULIB_STDIO_H_NONBLOCKING = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 1 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 1 +GNULIB_STRERROR = 1 +GNULIB_STRERROR_R = 0 +GNULIB_STRFTIME = 0 +GNULIB_STRNCAT = 0 +GNULIB_STRNDUP = 0 +GNULIB_STRNLEN = 0 +GNULIB_STRPBRK = 0 +GNULIB_STRPTIME = 0 +GNULIB_STRSEP = 1 +GNULIB_STRSIGNAL = 0 +GNULIB_STRSTR = 0 +GNULIB_STRTOD = 0 +GNULIB_STRTOIMAX = 0 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRTOUMAX = 0 +GNULIB_STRVERSCMP = 1 +GNULIB_SYMLINK = 0 +GNULIB_SYMLINKAT = 0 +GNULIB_SYSTEM_POSIX = 0 +GNULIB_TANF = 0 +GNULIB_TANHF = 0 +GNULIB_TANL = 0 +GNULIB_TIMEGM = 1 +GNULIB_TIME_R = 1 +GNULIB_TIME_RZ = 1 +GNULIB_TMPFILE = 0 +GNULIB_TOWCTRANS = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCATE = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_TTYNAME_R = 0 +GNULIB_TZSET = 1 +GNULIB_UNISTD_H_NONBLOCKING = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNLINK = 0 +GNULIB_UNLINKAT = 0 +GNULIB_UNLOCKPT = 0 +GNULIB_UNSETENV = 1 +GNULIB_USLEEP = 0 +GNULIB_UTIMENSAT = 0 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 1 +GNULIB_VFSCANF = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSCANF = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WAITPID = 1 +GNULIB_WCPCPY = 0 +GNULIB_WCPNCPY = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSCASECMP = 0 +GNULIB_WCSCAT = 0 +GNULIB_WCSCHR = 0 +GNULIB_WCSCMP = 0 +GNULIB_WCSCOLL = 0 +GNULIB_WCSCPY = 0 +GNULIB_WCSCSPN = 0 +GNULIB_WCSDUP = 0 +GNULIB_WCSFTIME = 0 +GNULIB_WCSLEN = 0 +GNULIB_WCSNCASECMP = 0 +GNULIB_WCSNCAT = 0 +GNULIB_WCSNCMP = 0 +GNULIB_WCSNCPY = 0 +GNULIB_WCSNLEN = 0 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSPBRK = 0 +GNULIB_WCSRCHR = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCSSPN = 0 +GNULIB_WCSSTR = 0 +GNULIB_WCSTOK = 0 +GNULIB_WCSWIDTH = 0 +GNULIB_WCSXFRM = 0 +GNULIB_WCTOB = 1 +GNULIB_WCTOMB = 1 +GNULIB_WCTRANS = 0 +GNULIB_WCTYPE = 0 +GNULIB_WCWIDTH = 0 +GNULIB_WMEMCHR = 0 +GNULIB_WMEMCMP = 0 +GNULIB_WMEMCPY = 0 +GNULIB_WMEMMOVE = 0 +GNULIB_WMEMSET = 0 +GNULIB_WRITE = 0 +GNULIB__EXIT = 0 +GREP = /bin/grep +HAVE_ACOSF = 1 +HAVE_ACOSL = 1 +HAVE_ASINF = 1 +HAVE_ASINL = 1 +HAVE_ATAN2F = 1 +HAVE_ATANF = 1 +HAVE_ATANL = 1 +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_C99_STDINT_H = 1 +HAVE_CANONICALIZE_FILE_NAME = 1 +HAVE_CBRT = 1 +HAVE_CBRTF = 1 +HAVE_CBRTL = 1 +HAVE_CHOWN = 1 +HAVE_COPYSIGN = 1 +HAVE_COPYSIGNL = 1 +HAVE_COSF = 1 +HAVE_COSHF = 1 +HAVE_COSL = 1 +HAVE_CRTDEFS_H = 0 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_CBRTF = 1 +HAVE_DECL_CBRTL = 1 +HAVE_DECL_CEILF = 1 +HAVE_DECL_CEILL = 1 +HAVE_DECL_COPYSIGNF = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXP2 = 1 +HAVE_DECL_EXP2F = 1 +HAVE_DECL_EXP2L = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_EXPM1L = 1 +HAVE_DECL_FCHDIR = 1 +HAVE_DECL_FDATASYNC = 1 +HAVE_DECL_FLOORF = 1 +HAVE_DECL_FLOORL = 1 +HAVE_DECL_FPURGE = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_FSEEKO = 1 +HAVE_DECL_FTELLO = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETDOMAINNAME = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_GETPAGESIZE = 1 +HAVE_DECL_GETUSERSHELL = 1 +HAVE_DECL_IMAXABS = 1 +HAVE_DECL_IMAXDIV = 1 +HAVE_DECL_INITSTATE = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOCALTIME_R = 1 +HAVE_DECL_LOG10L = 1 +HAVE_DECL_LOG2 = 1 +HAVE_DECL_LOG2F = 1 +HAVE_DECL_LOG2L = 1 +HAVE_DECL_LOGB = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_REMAINDER = 1 +HAVE_DECL_REMAINDERL = 1 +HAVE_DECL_RINTF = 1 +HAVE_DECL_ROUND = 1 +HAVE_DECL_ROUNDF = 1 +HAVE_DECL_ROUNDL = 1 +HAVE_DECL_SETENV = 1 +HAVE_DECL_SETHOSTNAME = 1 +HAVE_DECL_SETSTATE = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR_R = 1 +HAVE_DECL_STRNCASECMP = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOIMAX = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_STRTOUMAX = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCATE = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_TRUNCL = 1 +HAVE_DECL_TTYNAME_R = 1 +HAVE_DECL_UNSETENV = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_DUP3 = 1 +HAVE_DUPLOCALE = 1 +HAVE_EUIDACCESS = 1 +HAVE_EXPF = 1 +HAVE_EXPL = 1 +HAVE_EXPLICIT_BZERO = 1 +HAVE_EXPM1 = 1 +HAVE_EXPM1F = 1 +HAVE_FABSF = 1 +HAVE_FABSL = 1 +HAVE_FACCESSAT = 1 +HAVE_FCHDIR = 1 +HAVE_FCHMODAT = 1 +HAVE_FCHOWNAT = 1 +HAVE_FCNTL = 1 +HAVE_FDATASYNC = 1 +HAVE_FEATURES_H = 1 +HAVE_FFS = 1 +HAVE_FFSL = 1 +HAVE_FFSLL = 1 +HAVE_FLOCK = 1 +HAVE_FMA = 1 +HAVE_FMAF = 1 +HAVE_FMAL = 1 +HAVE_FMODF = 1 +HAVE_FMODL = 1 +HAVE_FREELOCALE = 1 +HAVE_FREXPF = 1 +HAVE_FSEEKO = 1 +HAVE_FSTATAT = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_FUTIMENS = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETGROUPS = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETLOGIN = 1 +HAVE_GETOPT_H = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETPASS = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETTIMEOFDAY = 1 +HAVE_GRANTPT = 1 +HAVE_GROUP_MEMBER = 1 +HAVE_HYPOTF = 1 +HAVE_HYPOTL = 1 +HAVE_ILOGB = 1 +HAVE_ILOGBF = 1 +HAVE_ILOGBL = 1 +HAVE_IMAXDIV_T = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWBLANK = 1 +HAVE_ISWCNTRL = 1 +HAVE_LANGINFO_ALTMON = 0 +HAVE_LANGINFO_CODESET = 1 +HAVE_LANGINFO_ERA = 1 +HAVE_LANGINFO_H = 1 +HAVE_LANGINFO_T_FMT_AMPM = 1 +HAVE_LANGINFO_YESEXPR = 1 +HAVE_LCHMOD = 1 +HAVE_LCHOWN = 1 +HAVE_LDEXPF = 1 +HAVE_LIBGCRYPT = no +HAVE_LINK = 1 +HAVE_LINKAT = 1 +HAVE_LOG10F = 1 +HAVE_LOG10L = 1 +HAVE_LOG1P = 1 +HAVE_LOG1PF = 1 +HAVE_LOG1PL = 1 +HAVE_LOGBF = 1 +HAVE_LOGBL = 1 +HAVE_LOGF = 1 +HAVE_LOGL = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MAX_ALIGN_T = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSLEN = 0 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMCHR = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDIRAT = 1 +HAVE_MKDTEMP = 1 +HAVE_MKFIFO = 1 +HAVE_MKFIFOAT = 1 +HAVE_MKNOD = 1 +HAVE_MKNODAT = 1 +HAVE_MKOSTEMP = 1 +HAVE_MKOSTEMPS = 1 +HAVE_MKSTEMP = 1 +HAVE_MKSTEMPS = 1 +HAVE_MODFF = 1 +HAVE_MODFL = 1 +HAVE_MSVC_INVALID_PARAMETER_HANDLER = 0 +HAVE_NANOSLEEP = 1 +HAVE_NEWLOCALE = 1 +HAVE_NL_LANGINFO = 1 +HAVE_OPENAT = 1 +HAVE_OS_H = 0 +HAVE_PCLOSE = 1 +HAVE_PIPE = 1 +HAVE_PIPE2 = 1 +HAVE_POPEN = 1 +HAVE_POSIX_OPENPT = 1 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_POSIX_SPAWNATTR_T = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = 1 +HAVE_POWF = 1 +HAVE_PREAD = 1 +HAVE_PTHREAD_SIGMASK = 1 +HAVE_PTSNAME = 1 +HAVE_PTSNAME_R = 1 +HAVE_PWRITE = 1 +HAVE_QSORT_R = 1 +HAVE_RAISE = 1 +HAVE_RANDOM = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_READLINKAT = 1 +HAVE_REALLOCARRAY = 1 +HAVE_REALPATH = 1 +HAVE_REMAINDER = 1 +HAVE_REMAINDERF = 1 +HAVE_RENAMEAT = 1 +HAVE_RINT = 1 +HAVE_RINTL = 1 +HAVE_RPMATCH = 1 +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0 +HAVE_SCHED_H = +HAVE_SECURE_GETENV = 1 +HAVE_SETENV = 1 +HAVE_SETHOSTNAME = 1 +HAVE_SIGACTION = 1 +HAVE_SIGHANDLER_T = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SINF = 1 +HAVE_SINHF = 1 +HAVE_SINL = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_SQRTF = 1 +HAVE_SQRTL = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASECMP = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRINGS_H = 1 +HAVE_STRPBRK = 1 +HAVE_STRPTIME = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYMLINK = 1 +HAVE_SYMLINKAT = 1 +HAVE_SYS_BITYPES_H = 0 +HAVE_SYS_CDEFS_H = +HAVE_SYS_FILE_H = 1 +HAVE_SYS_INTTYPES_H = 0 +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TANF = 1 +HAVE_TANHF = 1 +HAVE_TANL = 1 +HAVE_TIMEGM = 1 +HAVE_TIMEZONE_T = 0 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_TZSET = 1 +HAVE_UNISTD_H = 1 +HAVE_UNLINKAT = 1 +HAVE_UNLOCKPT = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_USLEEP = 1 +HAVE_UTIMENSAT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCHAR_T = 1 +HAVE_WCPCPY = 1 +HAVE_WCPNCPY = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSCASECMP = 1 +HAVE_WCSCAT = 1 +HAVE_WCSCHR = 1 +HAVE_WCSCMP = 1 +HAVE_WCSCOLL = 1 +HAVE_WCSCPY = 1 +HAVE_WCSCSPN = 1 +HAVE_WCSDUP = 1 +HAVE_WCSFTIME = 1 +HAVE_WCSLEN = 1 +HAVE_WCSNCASECMP = 1 +HAVE_WCSNCAT = 1 +HAVE_WCSNCMP = 1 +HAVE_WCSNCPY = 1 +HAVE_WCSNLEN = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSPBRK = 1 +HAVE_WCSRCHR = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCSSPN = 1 +HAVE_WCSSTR = 1 +HAVE_WCSTOK = 1 +HAVE_WCSWIDTH = 1 +HAVE_WCSXFRM = 1 +HAVE_WCTRANS_T = 1 +HAVE_WCTYPE_H = 1 +HAVE_WCTYPE_T = 1 +HAVE_WINSOCK2_H = 0 +HAVE_WINT_T = 1 +HAVE_WMEMCHR = 1 +HAVE_WMEMCMP = 1 +HAVE_WMEMCPY = 1 +HAVE_WMEMMOVE = 1 +HAVE_WMEMSET = 1 +HAVE_XLOCALE_H = 1 +HAVE__BOOL = 1 +HAVE__EXIT = 1 +HELP2MAN = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing help2man +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +INT32_MAX_LT_INTMAX_MAX = 1 +INT64_MAX_EQ_LONG_MAX = 0 +INTLLIBS = +INTL_MACOSX_LIBS = +LD = /usr/bin/ld +LDFLAGS = +LEX = flex +LEXLIB = -lfl +LEX_OUTPUT_ROOT = lex.yy +LIBGCRYPT = +LIBGCRYPT_PREFIX = +LIBICONV = -liconv +LIBINTL = +LIBMULTITHREAD = -pthread -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBREADLINE = +LIBS = +LIBTHREAD = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIB_ACL = +LIB_CLOCK_GETTIME = +LIB_EACCESS = +LIB_POSIX_SPAWN = +LIB_SELINUX = +LIMITS_H = limits.h +LIPO = +LN_S = ln -s +LOCALCHARSET_TESTS_ENVIRONMENT = +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTALLOCA = +LTLIBGCRYPT = +LTLIBICONV = -liconv +LTLIBINTL = +LTLIBMULTITHREAD = -pthread +LTLIBOBJS = +LTLIBPTH = +LTLIBREADLINE = +LTLIBTHREAD = +LT_SYS_LIBRARY_PATH = +MAKEINFO = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing makeinfo +MANIFEST_TOOL = : +MDBLIBS = +MDB_DATETIME = +MKDIR_P = /bin/mkdir -p +MSGFMT = /usr/bin/msgfmt +MSGFMT_015 = /usr/bin/msgfmt +MSGMERGE = /usr/bin/msgmerge +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = <fcntl.h> +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = <getopt.h> +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = <inttypes.h> +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = <langinfo.h> +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = <limits.h> +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = <locale.h> +NEXT_AS_FIRST_DIRECTIVE_MATH_H = <math.h> +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = <signal.h> +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = <spawn.h> +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = <stdint.h> +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = <stdio.h> +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = <stdlib.h> +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = <strings.h> +NEXT_AS_FIRST_DIRECTIVE_STRING_H = <string.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = <sys/file.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = <sys/stat.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = <sys/time.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = <sys/types.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = <sys/wait.h> +NEXT_AS_FIRST_DIRECTIVE_TIME_H = <time.h> +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = <unistd.h> +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = <wchar.h> +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = <wctype.h> +NEXT_ERRNO_H = +NEXT_FCNTL_H = <fcntl.h> +NEXT_FLOAT_H = +NEXT_GETOPT_H = <getopt.h> +NEXT_INTTYPES_H = <inttypes.h> +NEXT_LANGINFO_H = <langinfo.h> +NEXT_LIMITS_H = <limits.h> +NEXT_LOCALE_H = <locale.h> +NEXT_MATH_H = <math.h> +NEXT_SCHED_H = +NEXT_SELINUX_SELINUX_H = +NEXT_SIGNAL_H = <signal.h> +NEXT_SPAWN_H = <spawn.h> +NEXT_STDARG_H = <stdarg.h> +NEXT_STDDEF_H = +NEXT_STDINT_H = <stdint.h> +NEXT_STDIO_H = <stdio.h> +NEXT_STDLIB_H = <stdlib.h> +NEXT_STRINGS_H = <strings.h> +NEXT_STRING_H = <string.h> +NEXT_SYS_FILE_H = <sys/file.h> +NEXT_SYS_STAT_H = <sys/stat.h> +NEXT_SYS_TIME_H = <sys/time.h> +NEXT_SYS_TYPES_H = <sys/types.h> +NEXT_SYS_WAIT_H = <sys/wait.h> +NEXT_TIME_H = <time.h> +NEXT_UNISTD_H = <unistd.h> +NEXT_WCHAR_H = <wchar.h> +NEXT_WCTYPE_H = <wctype.h> +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = recutils +PACKAGE_BUGREPORT = bug-recutils@gnu.org +PACKAGE_NAME = GNU recutils +PACKAGE_STRING = GNU recutils 1.8 +PACKAGE_TARNAME = recutils +PACKAGE_URL = http://www.gnu.org/software/recutils/ +PACKAGE_VERSION = 1.8 +PATH_SEPARATOR = : +PKG_CONFIG = /usr/bin/pkg-config +PKG_CONFIG_LIBDIR = +PKG_CONFIG_PATH = +POSUB = po +PRAGMA_COLUMNS = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PRIPTR_PREFIX = "l" +PRI_MACROS_BROKEN = 0 +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = 0 +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_ACOSF = 0 +REPLACE_ASINF = 0 +REPLACE_ATAN2F = 0 +REPLACE_ATANF = 0 +REPLACE_BTOWC = 0 +REPLACE_CALLOC = 0 +REPLACE_CANONICALIZE_FILE_NAME = 0 +REPLACE_CBRTF = 0 +REPLACE_CBRTL = 0 +REPLACE_CEIL = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_COSF = 0 +REPLACE_COSHF = 0 +REPLACE_CTIME = GNULIB_PORTCHECK +REPLACE_DPRINTF = 0 +REPLACE_DUP = 0 +REPLACE_DUP2 = 0 +REPLACE_DUPLOCALE = 0 +REPLACE_EXP2 = 0 +REPLACE_EXP2L = 0 +REPLACE_EXPF = 0 +REPLACE_EXPM1 = 0 +REPLACE_EXPM1F = 0 +REPLACE_FABSL = 0 +REPLACE_FACCESSAT = 0 +REPLACE_FCHOWNAT = 0 +REPLACE_FCLOSE = 0 +REPLACE_FCNTL = 1 +REPLACE_FDOPEN = 0 +REPLACE_FFLUSH = 0 +REPLACE_FLOOR = 0 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FMA = 0 +REPLACE_FMAF = 0 +REPLACE_FMAL = 0 +REPLACE_FMOD = 0 +REPLACE_FMODF = 0 +REPLACE_FMODL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 1 +REPLACE_FPURGE = 0 +REPLACE_FREELOCALE = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPF = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 0 +REPLACE_FSTAT = 0 +REPLACE_FSTATAT = 0 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_FTRUNCATE = 0 +REPLACE_FUTIMENS = 0 +REPLACE_GETCWD = 0 +REPLACE_GETDELIM = 0 +REPLACE_GETDOMAINNAME = 0 +REPLACE_GETDTABLESIZE = 0 +REPLACE_GETGROUPS = 0 +REPLACE_GETLINE = 0 +REPLACE_GETLOGIN_R = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETPASS = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_GMTIME = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_HYPOT = 0 +REPLACE_HYPOTF = 0 +REPLACE_HYPOTL = 0 +REPLACE_ILOGB = 0 +REPLACE_ILOGBF = 0 +REPLACE_ILOGBL = 0 +REPLACE_ISATTY = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWBLANK = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_ITOLD = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LINK = 0 +REPLACE_LINKAT = 0 +REPLACE_LOCALECONV = 0 +REPLACE_LOCALTIME = 0 +REPLACE_LOCALTIME_R = 0 +REPLACE_LOG = 0 +REPLACE_LOG10 = 0 +REPLACE_LOG10F = 0 +REPLACE_LOG10L = 0 +REPLACE_LOG1P = 0 +REPLACE_LOG1PF = 0 +REPLACE_LOG1PL = 0 +REPLACE_LOG2 = 0 +REPLACE_LOG2F = 0 +REPLACE_LOG2L = 0 +REPLACE_LOGB = 0 +REPLACE_LOGBF = 0 +REPLACE_LOGBL = 0 +REPLACE_LOGF = 0 +REPLACE_LOGL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MALLOC = 0 +REPLACE_MBRLEN = 1 +REPLACE_MBRTOWC = 1 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MBTOWC = 0 +REPLACE_MEMCHR = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKFIFO = 0 +REPLACE_MKNOD = 0 +REPLACE_MKSTEMP = 0 +REPLACE_MKTIME = 0 +REPLACE_MODF = 0 +REPLACE_MODFF = 0 +REPLACE_MODFL = 0 +REPLACE_NAN = 0 +REPLACE_NANOSLEEP = GNULIB_PORTCHECK +REPLACE_NEWLOCALE = 0 +REPLACE_NL_LANGINFO = 1 +REPLACE_NULL = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_OPENAT = 0 +REPLACE_PERROR = 0 +REPLACE_POPEN = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 0 +REPLACE_PREAD = 0 +REPLACE_PRINTF = 1 +REPLACE_PTHREAD_SIGMASK = 0 +REPLACE_PTSNAME = 0 +REPLACE_PTSNAME_R = 0 +REPLACE_PUTENV = 0 +REPLACE_PWRITE = 0 +REPLACE_QSORT_R = 0 +REPLACE_RAISE = 0 +REPLACE_RANDOM_R = 0 +REPLACE_READ = 0 +REPLACE_READLINK = 0 +REPLACE_READLINKAT = 0 +REPLACE_REALLOC = 0 +REPLACE_REALPATH = 0 +REPLACE_REMAINDER = 0 +REPLACE_REMAINDERF = 0 +REPLACE_REMAINDERL = 0 +REPLACE_REMOVE = 0 +REPLACE_RENAME = 0 +REPLACE_RENAMEAT = 0 +REPLACE_RMDIR = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SETENV = 0 +REPLACE_SETLOCALE = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SINF = 0 +REPLACE_SINHF = 0 +REPLACE_SLEEP = 0 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_SQRTF = 0 +REPLACE_SQRTL = 0 +REPLACE_STAT = 0 +REPLACE_STDIO_READ_FUNCS = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STPNCPY = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRCHRNUL = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRERROR_R = 0 +REPLACE_STRFTIME = GNULIB_PORTCHECK +REPLACE_STRNCAT = 0 +REPLACE_STRNDUP = 0 +REPLACE_STRNLEN = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 0 +REPLACE_STRTOD = 0 +REPLACE_STRTOIMAX = 0 +REPLACE_STRTOK_R = 0 +REPLACE_STRTOUMAX = 0 +REPLACE_STRUCT_LCONV = 0 +REPLACE_STRUCT_TIMEVAL = 0 +REPLACE_SYMLINK = 0 +REPLACE_SYMLINKAT = 0 +REPLACE_TANF = 0 +REPLACE_TANHF = 0 +REPLACE_TIMEGM = 0 +REPLACE_TMPFILE = 0 +REPLACE_TOWLOWER = 0 +REPLACE_TRUNC = 0 +REPLACE_TRUNCATE = 0 +REPLACE_TRUNCF = 0 +REPLACE_TRUNCL = 0 +REPLACE_TTYNAME_R = 0 +REPLACE_TZSET = 0 +REPLACE_UNLINK = 0 +REPLACE_UNLINKAT = 0 +REPLACE_UNSETENV = 0 +REPLACE_USLEEP = 0 +REPLACE_UTIMENSAT = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 1 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSFTIME = 0 +REPLACE_WCSNRTOMBS = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCSWIDTH = 0 +REPLACE_WCTOB = 0 +REPLACE_WCTOMB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SED = /bin/sed +SELINUX_CONTEXT_H = selinux/context.h +SET_MAKE = +SHELL = /bin/sh +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +STDARG_H = +STDBOOL_H = +STDDEF_H = +STDINT_H = stdint.h +STRIP = strip +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = 0 +TIME_H_DEFINES_STRUCT_TIMESPEC = 1 +UINT32_MAX_LT_UINTMAX_MAX = 1 +UINT64_MAX_EQ_ULONG_MAX = 0 +UNDEFINE_STRTOK_R = 0 +UNISTD_H_DEFINES_STRUCT_TIMESPEC = 0 +UNISTD_H_HAVE_WINSOCK2_H = 0 +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = 0 +USE_ACL = 0 +USE_NLS = yes +UUIDLIBS = +VERSION = 1.8 +WCHAR_T_SUFFIX = +WINDOWS_64_BIT_OFF_T = 0 +WINDOWS_64_BIT_ST_SIZE = 0 +WINDOWS_STAT_INODES = 0 +WINDOWS_STAT_TIMESPEC = 0 +WINT_T_SUFFIX = +XGETTEXT = /usr/bin/xgettext +XGETTEXT_015 = /usr/bin/xgettext +XGETTEXT_EXTRA_OPTIONS = --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format +YACC = bison -o y.tab.c +YFLAGS = +abs_builddir = /mnt/lfs/build/recutils/recutils-1.8/torture +abs_srcdir = /mnt/lfs/build/recutils/recutils-1.8/torture +abs_top_builddir = /mnt/lfs/build/recutils/recutils-1.8 +abs_top_srcdir = /mnt/lfs/build/recutils/recutils-1.8 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +builddir = . +crypt_support = no +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +gl_LIBOBJS = asnprintf.o asprintf.o fcntl.o fprintf.o fseterr.o localtime-buffer.o mbrlen.o mbrtowc.o mktime.o nl_langinfo.o obstack.o printf.o printf-args.o printf-parse.o readline.o regex.o time_rz.o vasnprintf.o vasprintf.o vfprintf.o +gl_LTLIBOBJS = asnprintf.lo asprintf.lo fcntl.lo fprintf.lo fseterr.lo localtime-buffer.lo mbrlen.lo mbrtowc.lo mktime.lo nl_langinfo.lo obstack.lo printf.lo printf-args.lo printf-parse.lo readline.lo regex.lo time_rz.lo vasnprintf.lo vasprintf.lo vfprintf.lo +gltests_LIBOBJS = +gltests_LTLIBOBJS = +gltests_WITNESS = IN_RECUTILS_GNULIB_TESTS +have_uuid = no +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = $(MKDIR_P) +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +runstatedir = ${localstatedir}/run +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +SUBDIRS = . utils +#REC_MSET_TSUITE = rec-mset/elem-types.h \ +# rec-mset/rec-mset-new.c \ +# rec-mset/rec-mset-dup.c \ +# rec-mset/rec-mset-type-p.c \ +# rec-mset/rec-mset-register-type.c \ +# rec-mset/rec-mset-count.c \ +# rec-mset/rec-mset-get-at.c \ +# rec-mset/tsuite-rec-mset.c + +#REC_COMMENT_TSUITE = rec-comment/rec-comment-new.c \ +# rec-comment/rec-comment-destroy.c \ +# rec-comment/rec-comment-dup.c \ +# rec-comment/rec-comment-text.c \ +# rec-comment/rec-comment-set-text.c \ +# rec-comment/rec-comment-equal-p.c \ +# rec-comment/tsuite-rec-comment.c + +#REC_FIELD_NAME_TSUITE = rec-field-name/rec-field-name-equal-p.c \ +# rec-field-name/rec-field-name-p.c \ +# rec-field-name/rec-field-name-normalise.c \ +# rec-field-name/tsuite-rec-field-name.c + +#REC_TYPE_TSUITE = rec-type/rec-type-new.c \ +# rec-type/rec-type-destroy.c \ +# rec-type/rec-type-descr-p.c \ +# rec-type/rec-type-kind.c \ +# rec-type/rec-type-kind-str.c \ +# rec-type/rec-type-equal-p.c \ +# rec-type/rec-type-check.c \ +# rec-type/rec-type-name.c \ +# rec-type/rec-type-set-name.c \ +# rec-type/tsuite-rec-type.c + +#REC_TYPE_REG_TSUITE = rec-type-reg/rec-type-reg-new.c \ +# rec-type-reg/rec-type-reg-destroy.c \ +# rec-type-reg/tsuite-rec-type-reg.c \ +# rec-type-reg/rec-type-reg-get.c + +#REC_FEX_TSUITE = rec-fex/rec-fex-new.c \ +# rec-fex/rec-fex-destroy.c \ +# rec-fex/rec-fex-check.c \ +# rec-fex/rec-fex-sort.c \ +# rec-fex/rec-fex-size.c \ +# rec-fex/rec-fex-get.c \ +# rec-fex/rec-fex-elem-field-name.c \ +# rec-fex/rec-fex-elem-rewrite-to.c \ +# rec-fex/rec-fex-elem-min.c \ +# rec-fex/rec-fex-elem-max.c \ +# rec-fex/rec-fex-str.c \ +# rec-fex/tsuite-rec-fex.c + +#REC_FIELD_TSUITE = rec-field/rec-field-name.c \ +# rec-field/rec-field-set-name.c \ +# rec-field/rec-field-value.c \ +# rec-field/rec-field-set-value.c \ +# rec-field/rec-field-dup.c \ +# rec-field/rec-field-new.c \ +# rec-field/rec-field-destroy.c \ +# rec-field/rec-field-equal-p.c \ +# rec-field/rec-field-source.c \ +# rec-field/rec-field-set-source.c \ +# rec-field/rec-field-location.c \ +# rec-field/rec-field-location-str.c \ +# rec-field/rec-field-set-location.c \ +# rec-field/rec-field-char-location.c \ +# rec-field/rec-field-char-location-str.c \ +# rec-field/rec-field-set-char-location.c \ +# rec-field/rec-field-to-comment.c \ +# rec-field/tsuite-rec-field.c + +#REC_RECORD_TSUITE = rec-record/tsuite-rec-record.c +#REC_PARSER_TSUITE = rec-parser/rec-parser-new.c \ +# rec-parser/rec-parser-new-str.c \ +# rec-parser/rec-parser-new-mem.c \ +# rec-parser/rec-parser-destroy.c \ +# rec-parser/rec-parse-field-name-str.c \ +# rec-parser/rec-parse-field-name.c \ +# rec-parser/rec-parse-field.c \ +# rec-parser/rec-parse-record.c \ +# rec-parser/rec-parse-record-str.c \ +# rec-parser/rec-parse-rset.c \ +# rec-parser/rec-parse-db.c \ +# rec-parser/rec-parser-eof.c \ +# rec-parser/rec-parser-error.c \ +# rec-parser/rec-parser-reset.c \ +# rec-parser/rec-parser-perror.c \ +# rec-parser/rec-parser-seek-mem.c \ +# rec-parser/tsuite-rec-parser.c + +#REC_WRITER_TSUITE = rec-writer/rec-write-comment.c \ +# rec-writer/rec-write-field.c \ +# rec-writer/rec-write-field-name.c \ +# rec-writer/rec-writer-destroy.c \ +# rec-writer/rec-write-record.c \ +# rec-writer/rec-writer-new.c \ +# rec-writer/rec-write-rset.c \ +# rec-writer/rec-write-db.c \ +# rec-writer/rec-write-field-name-str.c \ +# rec-writer/rec-write-field-str.c \ +# rec-writer/rec-write-comment-str.c \ +# rec-writer/tsuite-rec-writer.c + +#REC_SEX_TSUITE = rec-sex/rec-sex-new.c \ +# rec-sex/rec-sex-destroy.c \ +# rec-sex/rec-sex-compile.c \ +# rec-sex/rec-sex-eval.c \ +# rec-sex/tsuite-rec-sex.c + +#runtests_SOURCES = runtests.c \ +# $(REC_MSET_TSUITE) \ +# $(REC_COMMENT_TSUITE) \ +# $(REC_FIELD_NAME_TSUITE) \ +# $(REC_TYPE_TSUITE) \ +# $(REC_TYPE_REG_TSUITE) \ +# $(REC_FIELD_TSUITE) \ +# $(REC_RECORD_TSUITE) \ +# $(REC_FEX_TSUITE) \ +# $(REC_PARSER_TSUITE) \ +# $(REC_WRITER_TSUITE) \ +# $(REC_SEX_TSUITE) + +#AM_CPPFLAGS = -I$(top_srcdir)/src \ +# -I$(top_srcdir)/torture + +#runtests_CFLAGS = $(CHECK_CFLAGS) +#runtests_LDADD = $(CHECK_LIBS) ../src/librec.la +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu torture/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu torture/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +rec-mset/$(am__dirstamp): + @$(MKDIR_P) rec-mset + @: > rec-mset/$(am__dirstamp) +rec-mset/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-mset/$(DEPDIR) + @: > rec-mset/$(DEPDIR)/$(am__dirstamp) +rec-mset/runtests-rec-mset-new.$(OBJEXT): rec-mset/$(am__dirstamp) \ + rec-mset/$(DEPDIR)/$(am__dirstamp) +rec-mset/runtests-rec-mset-dup.$(OBJEXT): rec-mset/$(am__dirstamp) \ + rec-mset/$(DEPDIR)/$(am__dirstamp) +rec-mset/runtests-rec-mset-type-p.$(OBJEXT): rec-mset/$(am__dirstamp) \ + rec-mset/$(DEPDIR)/$(am__dirstamp) +rec-mset/runtests-rec-mset-register-type.$(OBJEXT): \ + rec-mset/$(am__dirstamp) rec-mset/$(DEPDIR)/$(am__dirstamp) +rec-mset/runtests-rec-mset-count.$(OBJEXT): rec-mset/$(am__dirstamp) \ + rec-mset/$(DEPDIR)/$(am__dirstamp) +rec-mset/runtests-rec-mset-get-at.$(OBJEXT): rec-mset/$(am__dirstamp) \ + rec-mset/$(DEPDIR)/$(am__dirstamp) +rec-mset/runtests-tsuite-rec-mset.$(OBJEXT): rec-mset/$(am__dirstamp) \ + rec-mset/$(DEPDIR)/$(am__dirstamp) +rec-comment/$(am__dirstamp): + @$(MKDIR_P) rec-comment + @: > rec-comment/$(am__dirstamp) +rec-comment/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-comment/$(DEPDIR) + @: > rec-comment/$(DEPDIR)/$(am__dirstamp) +rec-comment/runtests-rec-comment-new.$(OBJEXT): \ + rec-comment/$(am__dirstamp) \ + rec-comment/$(DEPDIR)/$(am__dirstamp) +rec-comment/runtests-rec-comment-destroy.$(OBJEXT): \ + rec-comment/$(am__dirstamp) \ + rec-comment/$(DEPDIR)/$(am__dirstamp) +rec-comment/runtests-rec-comment-dup.$(OBJEXT): \ + rec-comment/$(am__dirstamp) \ + rec-comment/$(DEPDIR)/$(am__dirstamp) +rec-comment/runtests-rec-comment-text.$(OBJEXT): \ + rec-comment/$(am__dirstamp) \ + rec-comment/$(DEPDIR)/$(am__dirstamp) +rec-comment/runtests-rec-comment-set-text.$(OBJEXT): \ + rec-comment/$(am__dirstamp) \ + rec-comment/$(DEPDIR)/$(am__dirstamp) +rec-comment/runtests-rec-comment-equal-p.$(OBJEXT): \ + rec-comment/$(am__dirstamp) \ + rec-comment/$(DEPDIR)/$(am__dirstamp) +rec-comment/runtests-tsuite-rec-comment.$(OBJEXT): \ + rec-comment/$(am__dirstamp) \ + rec-comment/$(DEPDIR)/$(am__dirstamp) +rec-field-name/$(am__dirstamp): + @$(MKDIR_P) rec-field-name + @: > rec-field-name/$(am__dirstamp) +rec-field-name/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-field-name/$(DEPDIR) + @: > rec-field-name/$(DEPDIR)/$(am__dirstamp) +rec-field-name/runtests-rec-field-name-equal-p.$(OBJEXT): \ + rec-field-name/$(am__dirstamp) \ + rec-field-name/$(DEPDIR)/$(am__dirstamp) +rec-field-name/runtests-rec-field-name-p.$(OBJEXT): \ + rec-field-name/$(am__dirstamp) \ + rec-field-name/$(DEPDIR)/$(am__dirstamp) +rec-field-name/runtests-rec-field-name-normalise.$(OBJEXT): \ + rec-field-name/$(am__dirstamp) \ + rec-field-name/$(DEPDIR)/$(am__dirstamp) +rec-field-name/runtests-tsuite-rec-field-name.$(OBJEXT): \ + rec-field-name/$(am__dirstamp) \ + rec-field-name/$(DEPDIR)/$(am__dirstamp) +rec-type/$(am__dirstamp): + @$(MKDIR_P) rec-type + @: > rec-type/$(am__dirstamp) +rec-type/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-type/$(DEPDIR) + @: > rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-new.$(OBJEXT): rec-type/$(am__dirstamp) \ + rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-destroy.$(OBJEXT): \ + rec-type/$(am__dirstamp) rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-descr-p.$(OBJEXT): \ + rec-type/$(am__dirstamp) rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-kind.$(OBJEXT): rec-type/$(am__dirstamp) \ + rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-kind-str.$(OBJEXT): \ + rec-type/$(am__dirstamp) rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-equal-p.$(OBJEXT): \ + rec-type/$(am__dirstamp) rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-check.$(OBJEXT): rec-type/$(am__dirstamp) \ + rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-name.$(OBJEXT): rec-type/$(am__dirstamp) \ + rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-set-name.$(OBJEXT): \ + rec-type/$(am__dirstamp) rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-tsuite-rec-type.$(OBJEXT): rec-type/$(am__dirstamp) \ + rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type-reg/$(am__dirstamp): + @$(MKDIR_P) rec-type-reg + @: > rec-type-reg/$(am__dirstamp) +rec-type-reg/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-type-reg/$(DEPDIR) + @: > rec-type-reg/$(DEPDIR)/$(am__dirstamp) +rec-type-reg/runtests-rec-type-reg-new.$(OBJEXT): \ + rec-type-reg/$(am__dirstamp) \ + rec-type-reg/$(DEPDIR)/$(am__dirstamp) +rec-type-reg/runtests-rec-type-reg-destroy.$(OBJEXT): \ + rec-type-reg/$(am__dirstamp) \ + rec-type-reg/$(DEPDIR)/$(am__dirstamp) +rec-type-reg/runtests-tsuite-rec-type-reg.$(OBJEXT): \ + rec-type-reg/$(am__dirstamp) \ + rec-type-reg/$(DEPDIR)/$(am__dirstamp) +rec-type-reg/runtests-rec-type-reg-get.$(OBJEXT): \ + rec-type-reg/$(am__dirstamp) \ + rec-type-reg/$(DEPDIR)/$(am__dirstamp) +rec-field/$(am__dirstamp): + @$(MKDIR_P) rec-field + @: > rec-field/$(am__dirstamp) +rec-field/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-field/$(DEPDIR) + @: > rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-name.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-set-name.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-value.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-set-value.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-dup.$(OBJEXT): rec-field/$(am__dirstamp) \ + rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-new.$(OBJEXT): rec-field/$(am__dirstamp) \ + rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-destroy.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-equal-p.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-source.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-set-source.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-location.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-location-str.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-set-location.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-char-location.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-char-location-str.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-set-char-location.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-to-comment.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-tsuite-rec-field.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-record/$(am__dirstamp): + @$(MKDIR_P) rec-record + @: > rec-record/$(am__dirstamp) +rec-record/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-record/$(DEPDIR) + @: > rec-record/$(DEPDIR)/$(am__dirstamp) +rec-record/runtests-tsuite-rec-record.$(OBJEXT): \ + rec-record/$(am__dirstamp) \ + rec-record/$(DEPDIR)/$(am__dirstamp) +rec-fex/$(am__dirstamp): + @$(MKDIR_P) rec-fex + @: > rec-fex/$(am__dirstamp) +rec-fex/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-fex/$(DEPDIR) + @: > rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-new.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-destroy.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-check.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-sort.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-size.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-get.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-elem-field-name.$(OBJEXT): \ + rec-fex/$(am__dirstamp) rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-elem-rewrite-to.$(OBJEXT): \ + rec-fex/$(am__dirstamp) rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-elem-min.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-elem-max.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-str.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-tsuite-rec-fex.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-parser/$(am__dirstamp): + @$(MKDIR_P) rec-parser + @: > rec-parser/$(am__dirstamp) +rec-parser/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-parser/$(DEPDIR) + @: > rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-new.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-new-str.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-new-mem.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-destroy.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parse-field-name-str.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parse-field-name.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parse-field.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parse-record.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parse-record-str.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parse-rset.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parse-db.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-eof.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-error.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-reset.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-perror.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-seek-mem.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-tsuite-rec-parser.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-writer/$(am__dirstamp): + @$(MKDIR_P) rec-writer + @: > rec-writer/$(am__dirstamp) +rec-writer/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-writer/$(DEPDIR) + @: > rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-comment.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-field.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-field-name.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-writer-destroy.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-record.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-writer-new.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-rset.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-db.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-field-name-str.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-field-str.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-comment-str.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-tsuite-rec-writer.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-sex/$(am__dirstamp): + @$(MKDIR_P) rec-sex + @: > rec-sex/$(am__dirstamp) +rec-sex/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-sex/$(DEPDIR) + @: > rec-sex/$(DEPDIR)/$(am__dirstamp) +rec-sex/runtests-rec-sex-new.$(OBJEXT): rec-sex/$(am__dirstamp) \ + rec-sex/$(DEPDIR)/$(am__dirstamp) +rec-sex/runtests-rec-sex-destroy.$(OBJEXT): rec-sex/$(am__dirstamp) \ + rec-sex/$(DEPDIR)/$(am__dirstamp) +rec-sex/runtests-rec-sex-compile.$(OBJEXT): rec-sex/$(am__dirstamp) \ + rec-sex/$(DEPDIR)/$(am__dirstamp) +rec-sex/runtests-rec-sex-eval.$(OBJEXT): rec-sex/$(am__dirstamp) \ + rec-sex/$(DEPDIR)/$(am__dirstamp) +rec-sex/runtests-tsuite-rec-sex.$(OBJEXT): rec-sex/$(am__dirstamp) \ + rec-sex/$(DEPDIR)/$(am__dirstamp) + +runtests$(EXEEXT): $(runtests_OBJECTS) $(runtests_DEPENDENCIES) $(EXTRA_runtests_DEPENDENCIES) + @rm -f runtests$(EXEEXT) + $(AM_V_CCLD)$(runtests_LINK) $(runtests_OBJECTS) $(runtests_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f rec-comment/*.$(OBJEXT) + -rm -f rec-fex/*.$(OBJEXT) + -rm -f rec-field-name/*.$(OBJEXT) + -rm -f rec-field/*.$(OBJEXT) + -rm -f rec-mset/*.$(OBJEXT) + -rm -f rec-parser/*.$(OBJEXT) + -rm -f rec-record/*.$(OBJEXT) + -rm -f rec-sex/*.$(OBJEXT) + -rm -f rec-type-reg/*.$(OBJEXT) + -rm -f rec-type/*.$(OBJEXT) + -rm -f rec-writer/*.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/runtests-runtests.Po +include rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Po +include rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Po +include rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Po +include rec-comment/$(DEPDIR)/runtests-rec-comment-new.Po +include rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Po +include rec-comment/$(DEPDIR)/runtests-rec-comment-text.Po +include rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Po +include rec-fex/$(DEPDIR)/runtests-rec-fex-check.Po +include rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Po +include rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Po +include rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Po +include rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Po +include rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Po +include rec-fex/$(DEPDIR)/runtests-rec-fex-get.Po +include rec-fex/$(DEPDIR)/runtests-rec-fex-new.Po +include rec-fex/$(DEPDIR)/runtests-rec-fex-size.Po +include rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Po +include rec-fex/$(DEPDIR)/runtests-rec-fex-str.Po +include rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Po +include rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Po +include rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Po +include rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Po +include rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Po +include rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Po +include rec-field/$(DEPDIR)/runtests-rec-field-char-location.Po +include rec-field/$(DEPDIR)/runtests-rec-field-destroy.Po +include rec-field/$(DEPDIR)/runtests-rec-field-dup.Po +include rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Po +include rec-field/$(DEPDIR)/runtests-rec-field-location-str.Po +include rec-field/$(DEPDIR)/runtests-rec-field-location.Po +include rec-field/$(DEPDIR)/runtests-rec-field-name.Po +include rec-field/$(DEPDIR)/runtests-rec-field-new.Po +include rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Po +include rec-field/$(DEPDIR)/runtests-rec-field-set-location.Po +include rec-field/$(DEPDIR)/runtests-rec-field-set-name.Po +include rec-field/$(DEPDIR)/runtests-rec-field-set-source.Po +include rec-field/$(DEPDIR)/runtests-rec-field-set-value.Po +include rec-field/$(DEPDIR)/runtests-rec-field-source.Po +include rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Po +include rec-field/$(DEPDIR)/runtests-rec-field-value.Po +include rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Po +include rec-mset/$(DEPDIR)/runtests-rec-mset-count.Po +include rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Po +include rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Po +include rec-mset/$(DEPDIR)/runtests-rec-mset-new.Po +include rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Po +include rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Po +include rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Po +include rec-parser/$(DEPDIR)/runtests-rec-parse-db.Po +include rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Po +include rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Po +include rec-parser/$(DEPDIR)/runtests-rec-parse-field.Po +include rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Po +include rec-parser/$(DEPDIR)/runtests-rec-parse-record.Po +include rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Po +include rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Po +include rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Po +include rec-parser/$(DEPDIR)/runtests-rec-parser-error.Po +include rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Po +include rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Po +include rec-parser/$(DEPDIR)/runtests-rec-parser-new.Po +include rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Po +include rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Po +include rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Po +include rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Po +include rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Po +include rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Po +include rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Po +include rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Po +include rec-sex/$(DEPDIR)/runtests-rec-sex-new.Po +include rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Po +include rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Po +include rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Po +include rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Po +include rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Po +include rec-type/$(DEPDIR)/runtests-rec-type-check.Po +include rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Po +include rec-type/$(DEPDIR)/runtests-rec-type-destroy.Po +include rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Po +include rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Po +include rec-type/$(DEPDIR)/runtests-rec-type-kind.Po +include rec-type/$(DEPDIR)/runtests-rec-type-name.Po +include rec-type/$(DEPDIR)/runtests-rec-type-new.Po +include rec-type/$(DEPDIR)/runtests-rec-type-set-name.Po +include rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Po +include rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Po +include rec-writer/$(DEPDIR)/runtests-rec-write-comment.Po +include rec-writer/$(DEPDIR)/runtests-rec-write-db.Po +include rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Po +include rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Po +include rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Po +include rec-writer/$(DEPDIR)/runtests-rec-write-field.Po +include rec-writer/$(DEPDIR)/runtests-rec-write-record.Po +include rec-writer/$(DEPDIR)/runtests-rec-write-rset.Po +include rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Po +include rec-writer/$(DEPDIR)/runtests-rec-writer-new.Po +include rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Po + +.c.o: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< + +.c.obj: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ + $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Plo +# $(AM_V_CC)source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< + +runtests-runtests.o: runtests.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT runtests-runtests.o -MD -MP -MF $(DEPDIR)/runtests-runtests.Tpo -c -o runtests-runtests.o `test -f 'runtests.c' || echo '$(srcdir)/'`runtests.c + $(AM_V_at)$(am__mv) $(DEPDIR)/runtests-runtests.Tpo $(DEPDIR)/runtests-runtests.Po +# $(AM_V_CC)source='runtests.c' object='runtests-runtests.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o runtests-runtests.o `test -f 'runtests.c' || echo '$(srcdir)/'`runtests.c + +runtests-runtests.obj: runtests.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT runtests-runtests.obj -MD -MP -MF $(DEPDIR)/runtests-runtests.Tpo -c -o runtests-runtests.obj `if test -f 'runtests.c'; then $(CYGPATH_W) 'runtests.c'; else $(CYGPATH_W) '$(srcdir)/runtests.c'; fi` + $(AM_V_at)$(am__mv) $(DEPDIR)/runtests-runtests.Tpo $(DEPDIR)/runtests-runtests.Po +# $(AM_V_CC)source='runtests.c' object='runtests-runtests.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o runtests-runtests.obj `if test -f 'runtests.c'; then $(CYGPATH_W) 'runtests.c'; else $(CYGPATH_W) '$(srcdir)/runtests.c'; fi` + +rec-mset/runtests-rec-mset-new.o: rec-mset/rec-mset-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-new.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-new.Tpo -c -o rec-mset/runtests-rec-mset-new.o `test -f 'rec-mset/rec-mset-new.c' || echo '$(srcdir)/'`rec-mset/rec-mset-new.c + $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-new.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-new.Po +# $(AM_V_CC)source='rec-mset/rec-mset-new.c' object='rec-mset/runtests-rec-mset-new.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-new.o `test -f 'rec-mset/rec-mset-new.c' || echo '$(srcdir)/'`rec-mset/rec-mset-new.c + +rec-mset/runtests-rec-mset-new.obj: rec-mset/rec-mset-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-new.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-new.Tpo -c -o rec-mset/runtests-rec-mset-new.obj `if test -f 'rec-mset/rec-mset-new.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-new.c'; fi` + $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-new.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-new.Po +# $(AM_V_CC)source='rec-mset/rec-mset-new.c' object='rec-mset/runtests-rec-mset-new.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-new.obj `if test -f 'rec-mset/rec-mset-new.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-new.c'; fi` + +rec-mset/runtests-rec-mset-dup.o: rec-mset/rec-mset-dup.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-dup.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Tpo -c -o rec-mset/runtests-rec-mset-dup.o `test -f 'rec-mset/rec-mset-dup.c' || echo '$(srcdir)/'`rec-mset/rec-mset-dup.c + $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Po +# $(AM_V_CC)source='rec-mset/rec-mset-dup.c' object='rec-mset/runtests-rec-mset-dup.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-dup.o `test -f 'rec-mset/rec-mset-dup.c' || echo '$(srcdir)/'`rec-mset/rec-mset-dup.c + +rec-mset/runtests-rec-mset-dup.obj: rec-mset/rec-mset-dup.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-dup.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Tpo -c -o rec-mset/runtests-rec-mset-dup.obj `if test -f 'rec-mset/rec-mset-dup.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-dup.c'; fi` + $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Po +# $(AM_V_CC)source='rec-mset/rec-mset-dup.c' object='rec-mset/runtests-rec-mset-dup.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-dup.obj `if test -f 'rec-mset/rec-mset-dup.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-dup.c'; fi` + +rec-mset/runtests-rec-mset-type-p.o: rec-mset/rec-mset-type-p.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-type-p.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Tpo -c -o rec-mset/runtests-rec-mset-type-p.o `test -f 'rec-mset/rec-mset-type-p.c' || echo '$(srcdir)/'`rec-mset/rec-mset-type-p.c + $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Po +# $(AM_V_CC)source='rec-mset/rec-mset-type-p.c' object='rec-mset/runtests-rec-mset-type-p.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-type-p.o `test -f 'rec-mset/rec-mset-type-p.c' || echo '$(srcdir)/'`rec-mset/rec-mset-type-p.c + +rec-mset/runtests-rec-mset-type-p.obj: rec-mset/rec-mset-type-p.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-type-p.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Tpo -c -o rec-mset/runtests-rec-mset-type-p.obj `if test -f 'rec-mset/rec-mset-type-p.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-type-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-type-p.c'; fi` + $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Po +# $(AM_V_CC)source='rec-mset/rec-mset-type-p.c' object='rec-mset/runtests-rec-mset-type-p.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-type-p.obj `if test -f 'rec-mset/rec-mset-type-p.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-type-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-type-p.c'; fi` + +rec-mset/runtests-rec-mset-register-type.o: rec-mset/rec-mset-register-type.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-register-type.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Tpo -c -o rec-mset/runtests-rec-mset-register-type.o `test -f 'rec-mset/rec-mset-register-type.c' || echo '$(srcdir)/'`rec-mset/rec-mset-register-type.c + $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Po +# $(AM_V_CC)source='rec-mset/rec-mset-register-type.c' object='rec-mset/runtests-rec-mset-register-type.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-register-type.o `test -f 'rec-mset/rec-mset-register-type.c' || echo '$(srcdir)/'`rec-mset/rec-mset-register-type.c + +rec-mset/runtests-rec-mset-register-type.obj: rec-mset/rec-mset-register-type.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-register-type.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Tpo -c -o rec-mset/runtests-rec-mset-register-type.obj `if test -f 'rec-mset/rec-mset-register-type.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-register-type.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-register-type.c'; fi` + $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Po +# $(AM_V_CC)source='rec-mset/rec-mset-register-type.c' object='rec-mset/runtests-rec-mset-register-type.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-register-type.obj `if test -f 'rec-mset/rec-mset-register-type.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-register-type.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-register-type.c'; fi` + +rec-mset/runtests-rec-mset-count.o: rec-mset/rec-mset-count.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-count.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-count.Tpo -c -o rec-mset/runtests-rec-mset-count.o `test -f 'rec-mset/rec-mset-count.c' || echo '$(srcdir)/'`rec-mset/rec-mset-count.c + $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-count.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-count.Po +# $(AM_V_CC)source='rec-mset/rec-mset-count.c' object='rec-mset/runtests-rec-mset-count.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-count.o `test -f 'rec-mset/rec-mset-count.c' || echo '$(srcdir)/'`rec-mset/rec-mset-count.c + +rec-mset/runtests-rec-mset-count.obj: rec-mset/rec-mset-count.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-count.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-count.Tpo -c -o rec-mset/runtests-rec-mset-count.obj `if test -f 'rec-mset/rec-mset-count.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-count.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-count.c'; fi` + $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-count.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-count.Po +# $(AM_V_CC)source='rec-mset/rec-mset-count.c' object='rec-mset/runtests-rec-mset-count.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-count.obj `if test -f 'rec-mset/rec-mset-count.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-count.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-count.c'; fi` + +rec-mset/runtests-rec-mset-get-at.o: rec-mset/rec-mset-get-at.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-get-at.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Tpo -c -o rec-mset/runtests-rec-mset-get-at.o `test -f 'rec-mset/rec-mset-get-at.c' || echo '$(srcdir)/'`rec-mset/rec-mset-get-at.c + $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Po +# $(AM_V_CC)source='rec-mset/rec-mset-get-at.c' object='rec-mset/runtests-rec-mset-get-at.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-get-at.o `test -f 'rec-mset/rec-mset-get-at.c' || echo '$(srcdir)/'`rec-mset/rec-mset-get-at.c + +rec-mset/runtests-rec-mset-get-at.obj: rec-mset/rec-mset-get-at.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-get-at.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Tpo -c -o rec-mset/runtests-rec-mset-get-at.obj `if test -f 'rec-mset/rec-mset-get-at.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-get-at.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-get-at.c'; fi` + $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Po +# $(AM_V_CC)source='rec-mset/rec-mset-get-at.c' object='rec-mset/runtests-rec-mset-get-at.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-get-at.obj `if test -f 'rec-mset/rec-mset-get-at.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-get-at.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-get-at.c'; fi` + +rec-mset/runtests-tsuite-rec-mset.o: rec-mset/tsuite-rec-mset.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-tsuite-rec-mset.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Tpo -c -o rec-mset/runtests-tsuite-rec-mset.o `test -f 'rec-mset/tsuite-rec-mset.c' || echo '$(srcdir)/'`rec-mset/tsuite-rec-mset.c + $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Tpo rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Po +# $(AM_V_CC)source='rec-mset/tsuite-rec-mset.c' object='rec-mset/runtests-tsuite-rec-mset.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-tsuite-rec-mset.o `test -f 'rec-mset/tsuite-rec-mset.c' || echo '$(srcdir)/'`rec-mset/tsuite-rec-mset.c + +rec-mset/runtests-tsuite-rec-mset.obj: rec-mset/tsuite-rec-mset.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-tsuite-rec-mset.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Tpo -c -o rec-mset/runtests-tsuite-rec-mset.obj `if test -f 'rec-mset/tsuite-rec-mset.c'; then $(CYGPATH_W) 'rec-mset/tsuite-rec-mset.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/tsuite-rec-mset.c'; fi` + $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Tpo rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Po +# $(AM_V_CC)source='rec-mset/tsuite-rec-mset.c' object='rec-mset/runtests-tsuite-rec-mset.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-tsuite-rec-mset.obj `if test -f 'rec-mset/tsuite-rec-mset.c'; then $(CYGPATH_W) 'rec-mset/tsuite-rec-mset.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/tsuite-rec-mset.c'; fi` + +rec-comment/runtests-rec-comment-new.o: rec-comment/rec-comment-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-new.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-new.Tpo -c -o rec-comment/runtests-rec-comment-new.o `test -f 'rec-comment/rec-comment-new.c' || echo '$(srcdir)/'`rec-comment/rec-comment-new.c + $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-new.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-new.Po +# $(AM_V_CC)source='rec-comment/rec-comment-new.c' object='rec-comment/runtests-rec-comment-new.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-new.o `test -f 'rec-comment/rec-comment-new.c' || echo '$(srcdir)/'`rec-comment/rec-comment-new.c + +rec-comment/runtests-rec-comment-new.obj: rec-comment/rec-comment-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-new.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-new.Tpo -c -o rec-comment/runtests-rec-comment-new.obj `if test -f 'rec-comment/rec-comment-new.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-new.c'; fi` + $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-new.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-new.Po +# $(AM_V_CC)source='rec-comment/rec-comment-new.c' object='rec-comment/runtests-rec-comment-new.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-new.obj `if test -f 'rec-comment/rec-comment-new.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-new.c'; fi` + +rec-comment/runtests-rec-comment-destroy.o: rec-comment/rec-comment-destroy.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-destroy.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Tpo -c -o rec-comment/runtests-rec-comment-destroy.o `test -f 'rec-comment/rec-comment-destroy.c' || echo '$(srcdir)/'`rec-comment/rec-comment-destroy.c + $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Po +# $(AM_V_CC)source='rec-comment/rec-comment-destroy.c' object='rec-comment/runtests-rec-comment-destroy.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-destroy.o `test -f 'rec-comment/rec-comment-destroy.c' || echo '$(srcdir)/'`rec-comment/rec-comment-destroy.c + +rec-comment/runtests-rec-comment-destroy.obj: rec-comment/rec-comment-destroy.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-destroy.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Tpo -c -o rec-comment/runtests-rec-comment-destroy.obj `if test -f 'rec-comment/rec-comment-destroy.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-destroy.c'; fi` + $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Po +# $(AM_V_CC)source='rec-comment/rec-comment-destroy.c' object='rec-comment/runtests-rec-comment-destroy.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-destroy.obj `if test -f 'rec-comment/rec-comment-destroy.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-destroy.c'; fi` + +rec-comment/runtests-rec-comment-dup.o: rec-comment/rec-comment-dup.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-dup.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Tpo -c -o rec-comment/runtests-rec-comment-dup.o `test -f 'rec-comment/rec-comment-dup.c' || echo '$(srcdir)/'`rec-comment/rec-comment-dup.c + $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Po +# $(AM_V_CC)source='rec-comment/rec-comment-dup.c' object='rec-comment/runtests-rec-comment-dup.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-dup.o `test -f 'rec-comment/rec-comment-dup.c' || echo '$(srcdir)/'`rec-comment/rec-comment-dup.c + +rec-comment/runtests-rec-comment-dup.obj: rec-comment/rec-comment-dup.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-dup.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Tpo -c -o rec-comment/runtests-rec-comment-dup.obj `if test -f 'rec-comment/rec-comment-dup.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-dup.c'; fi` + $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Po +# $(AM_V_CC)source='rec-comment/rec-comment-dup.c' object='rec-comment/runtests-rec-comment-dup.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-dup.obj `if test -f 'rec-comment/rec-comment-dup.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-dup.c'; fi` + +rec-comment/runtests-rec-comment-text.o: rec-comment/rec-comment-text.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-text.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-text.Tpo -c -o rec-comment/runtests-rec-comment-text.o `test -f 'rec-comment/rec-comment-text.c' || echo '$(srcdir)/'`rec-comment/rec-comment-text.c + $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-text.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-text.Po +# $(AM_V_CC)source='rec-comment/rec-comment-text.c' object='rec-comment/runtests-rec-comment-text.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-text.o `test -f 'rec-comment/rec-comment-text.c' || echo '$(srcdir)/'`rec-comment/rec-comment-text.c + +rec-comment/runtests-rec-comment-text.obj: rec-comment/rec-comment-text.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-text.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-text.Tpo -c -o rec-comment/runtests-rec-comment-text.obj `if test -f 'rec-comment/rec-comment-text.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-text.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-text.c'; fi` + $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-text.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-text.Po +# $(AM_V_CC)source='rec-comment/rec-comment-text.c' object='rec-comment/runtests-rec-comment-text.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-text.obj `if test -f 'rec-comment/rec-comment-text.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-text.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-text.c'; fi` + +rec-comment/runtests-rec-comment-set-text.o: rec-comment/rec-comment-set-text.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-set-text.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Tpo -c -o rec-comment/runtests-rec-comment-set-text.o `test -f 'rec-comment/rec-comment-set-text.c' || echo '$(srcdir)/'`rec-comment/rec-comment-set-text.c + $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Po +# $(AM_V_CC)source='rec-comment/rec-comment-set-text.c' object='rec-comment/runtests-rec-comment-set-text.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-set-text.o `test -f 'rec-comment/rec-comment-set-text.c' || echo '$(srcdir)/'`rec-comment/rec-comment-set-text.c + +rec-comment/runtests-rec-comment-set-text.obj: rec-comment/rec-comment-set-text.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-set-text.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Tpo -c -o rec-comment/runtests-rec-comment-set-text.obj `if test -f 'rec-comment/rec-comment-set-text.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-set-text.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-set-text.c'; fi` + $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Po +# $(AM_V_CC)source='rec-comment/rec-comment-set-text.c' object='rec-comment/runtests-rec-comment-set-text.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-set-text.obj `if test -f 'rec-comment/rec-comment-set-text.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-set-text.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-set-text.c'; fi` + +rec-comment/runtests-rec-comment-equal-p.o: rec-comment/rec-comment-equal-p.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-equal-p.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Tpo -c -o rec-comment/runtests-rec-comment-equal-p.o `test -f 'rec-comment/rec-comment-equal-p.c' || echo '$(srcdir)/'`rec-comment/rec-comment-equal-p.c + $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Po +# $(AM_V_CC)source='rec-comment/rec-comment-equal-p.c' object='rec-comment/runtests-rec-comment-equal-p.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-equal-p.o `test -f 'rec-comment/rec-comment-equal-p.c' || echo '$(srcdir)/'`rec-comment/rec-comment-equal-p.c + +rec-comment/runtests-rec-comment-equal-p.obj: rec-comment/rec-comment-equal-p.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-equal-p.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Tpo -c -o rec-comment/runtests-rec-comment-equal-p.obj `if test -f 'rec-comment/rec-comment-equal-p.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-equal-p.c'; fi` + $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Po +# $(AM_V_CC)source='rec-comment/rec-comment-equal-p.c' object='rec-comment/runtests-rec-comment-equal-p.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-equal-p.obj `if test -f 'rec-comment/rec-comment-equal-p.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-equal-p.c'; fi` + +rec-comment/runtests-tsuite-rec-comment.o: rec-comment/tsuite-rec-comment.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-tsuite-rec-comment.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Tpo -c -o rec-comment/runtests-tsuite-rec-comment.o `test -f 'rec-comment/tsuite-rec-comment.c' || echo '$(srcdir)/'`rec-comment/tsuite-rec-comment.c + $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Tpo rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Po +# $(AM_V_CC)source='rec-comment/tsuite-rec-comment.c' object='rec-comment/runtests-tsuite-rec-comment.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-tsuite-rec-comment.o `test -f 'rec-comment/tsuite-rec-comment.c' || echo '$(srcdir)/'`rec-comment/tsuite-rec-comment.c + +rec-comment/runtests-tsuite-rec-comment.obj: rec-comment/tsuite-rec-comment.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-tsuite-rec-comment.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Tpo -c -o rec-comment/runtests-tsuite-rec-comment.obj `if test -f 'rec-comment/tsuite-rec-comment.c'; then $(CYGPATH_W) 'rec-comment/tsuite-rec-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/tsuite-rec-comment.c'; fi` + $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Tpo rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Po +# $(AM_V_CC)source='rec-comment/tsuite-rec-comment.c' object='rec-comment/runtests-tsuite-rec-comment.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-tsuite-rec-comment.obj `if test -f 'rec-comment/tsuite-rec-comment.c'; then $(CYGPATH_W) 'rec-comment/tsuite-rec-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/tsuite-rec-comment.c'; fi` + +rec-field-name/runtests-rec-field-name-equal-p.o: rec-field-name/rec-field-name-equal-p.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-equal-p.o -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Tpo -c -o rec-field-name/runtests-rec-field-name-equal-p.o `test -f 'rec-field-name/rec-field-name-equal-p.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-equal-p.c + $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Po +# $(AM_V_CC)source='rec-field-name/rec-field-name-equal-p.c' object='rec-field-name/runtests-rec-field-name-equal-p.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-equal-p.o `test -f 'rec-field-name/rec-field-name-equal-p.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-equal-p.c + +rec-field-name/runtests-rec-field-name-equal-p.obj: rec-field-name/rec-field-name-equal-p.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-equal-p.obj -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Tpo -c -o rec-field-name/runtests-rec-field-name-equal-p.obj `if test -f 'rec-field-name/rec-field-name-equal-p.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-equal-p.c'; fi` + $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Po +# $(AM_V_CC)source='rec-field-name/rec-field-name-equal-p.c' object='rec-field-name/runtests-rec-field-name-equal-p.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-equal-p.obj `if test -f 'rec-field-name/rec-field-name-equal-p.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-equal-p.c'; fi` + +rec-field-name/runtests-rec-field-name-p.o: rec-field-name/rec-field-name-p.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-p.o -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Tpo -c -o rec-field-name/runtests-rec-field-name-p.o `test -f 'rec-field-name/rec-field-name-p.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-p.c + $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Po +# $(AM_V_CC)source='rec-field-name/rec-field-name-p.c' object='rec-field-name/runtests-rec-field-name-p.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-p.o `test -f 'rec-field-name/rec-field-name-p.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-p.c + +rec-field-name/runtests-rec-field-name-p.obj: rec-field-name/rec-field-name-p.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-p.obj -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Tpo -c -o rec-field-name/runtests-rec-field-name-p.obj `if test -f 'rec-field-name/rec-field-name-p.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-p.c'; fi` + $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Po +# $(AM_V_CC)source='rec-field-name/rec-field-name-p.c' object='rec-field-name/runtests-rec-field-name-p.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-p.obj `if test -f 'rec-field-name/rec-field-name-p.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-p.c'; fi` + +rec-field-name/runtests-rec-field-name-normalise.o: rec-field-name/rec-field-name-normalise.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-normalise.o -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Tpo -c -o rec-field-name/runtests-rec-field-name-normalise.o `test -f 'rec-field-name/rec-field-name-normalise.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-normalise.c + $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Po +# $(AM_V_CC)source='rec-field-name/rec-field-name-normalise.c' object='rec-field-name/runtests-rec-field-name-normalise.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-normalise.o `test -f 'rec-field-name/rec-field-name-normalise.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-normalise.c + +rec-field-name/runtests-rec-field-name-normalise.obj: rec-field-name/rec-field-name-normalise.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-normalise.obj -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Tpo -c -o rec-field-name/runtests-rec-field-name-normalise.obj `if test -f 'rec-field-name/rec-field-name-normalise.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-normalise.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-normalise.c'; fi` + $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Po +# $(AM_V_CC)source='rec-field-name/rec-field-name-normalise.c' object='rec-field-name/runtests-rec-field-name-normalise.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-normalise.obj `if test -f 'rec-field-name/rec-field-name-normalise.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-normalise.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-normalise.c'; fi` + +rec-field-name/runtests-tsuite-rec-field-name.o: rec-field-name/tsuite-rec-field-name.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-tsuite-rec-field-name.o -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Tpo -c -o rec-field-name/runtests-tsuite-rec-field-name.o `test -f 'rec-field-name/tsuite-rec-field-name.c' || echo '$(srcdir)/'`rec-field-name/tsuite-rec-field-name.c + $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Tpo rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Po +# $(AM_V_CC)source='rec-field-name/tsuite-rec-field-name.c' object='rec-field-name/runtests-tsuite-rec-field-name.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-tsuite-rec-field-name.o `test -f 'rec-field-name/tsuite-rec-field-name.c' || echo '$(srcdir)/'`rec-field-name/tsuite-rec-field-name.c + +rec-field-name/runtests-tsuite-rec-field-name.obj: rec-field-name/tsuite-rec-field-name.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-tsuite-rec-field-name.obj -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Tpo -c -o rec-field-name/runtests-tsuite-rec-field-name.obj `if test -f 'rec-field-name/tsuite-rec-field-name.c'; then $(CYGPATH_W) 'rec-field-name/tsuite-rec-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/tsuite-rec-field-name.c'; fi` + $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Tpo rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Po +# $(AM_V_CC)source='rec-field-name/tsuite-rec-field-name.c' object='rec-field-name/runtests-tsuite-rec-field-name.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-tsuite-rec-field-name.obj `if test -f 'rec-field-name/tsuite-rec-field-name.c'; then $(CYGPATH_W) 'rec-field-name/tsuite-rec-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/tsuite-rec-field-name.c'; fi` + +rec-type/runtests-rec-type-new.o: rec-type/rec-type-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-new.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-new.Tpo -c -o rec-type/runtests-rec-type-new.o `test -f 'rec-type/rec-type-new.c' || echo '$(srcdir)/'`rec-type/rec-type-new.c + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-new.Tpo rec-type/$(DEPDIR)/runtests-rec-type-new.Po +# $(AM_V_CC)source='rec-type/rec-type-new.c' object='rec-type/runtests-rec-type-new.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-new.o `test -f 'rec-type/rec-type-new.c' || echo '$(srcdir)/'`rec-type/rec-type-new.c + +rec-type/runtests-rec-type-new.obj: rec-type/rec-type-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-new.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-new.Tpo -c -o rec-type/runtests-rec-type-new.obj `if test -f 'rec-type/rec-type-new.c'; then $(CYGPATH_W) 'rec-type/rec-type-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-new.c'; fi` + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-new.Tpo rec-type/$(DEPDIR)/runtests-rec-type-new.Po +# $(AM_V_CC)source='rec-type/rec-type-new.c' object='rec-type/runtests-rec-type-new.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-new.obj `if test -f 'rec-type/rec-type-new.c'; then $(CYGPATH_W) 'rec-type/rec-type-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-new.c'; fi` + +rec-type/runtests-rec-type-destroy.o: rec-type/rec-type-destroy.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-destroy.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-destroy.Tpo -c -o rec-type/runtests-rec-type-destroy.o `test -f 'rec-type/rec-type-destroy.c' || echo '$(srcdir)/'`rec-type/rec-type-destroy.c + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-destroy.Tpo rec-type/$(DEPDIR)/runtests-rec-type-destroy.Po +# $(AM_V_CC)source='rec-type/rec-type-destroy.c' object='rec-type/runtests-rec-type-destroy.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-destroy.o `test -f 'rec-type/rec-type-destroy.c' || echo '$(srcdir)/'`rec-type/rec-type-destroy.c + +rec-type/runtests-rec-type-destroy.obj: rec-type/rec-type-destroy.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-destroy.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-destroy.Tpo -c -o rec-type/runtests-rec-type-destroy.obj `if test -f 'rec-type/rec-type-destroy.c'; then $(CYGPATH_W) 'rec-type/rec-type-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-destroy.c'; fi` + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-destroy.Tpo rec-type/$(DEPDIR)/runtests-rec-type-destroy.Po +# $(AM_V_CC)source='rec-type/rec-type-destroy.c' object='rec-type/runtests-rec-type-destroy.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-destroy.obj `if test -f 'rec-type/rec-type-destroy.c'; then $(CYGPATH_W) 'rec-type/rec-type-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-destroy.c'; fi` + +rec-type/runtests-rec-type-descr-p.o: rec-type/rec-type-descr-p.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-descr-p.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Tpo -c -o rec-type/runtests-rec-type-descr-p.o `test -f 'rec-type/rec-type-descr-p.c' || echo '$(srcdir)/'`rec-type/rec-type-descr-p.c + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Tpo rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Po +# $(AM_V_CC)source='rec-type/rec-type-descr-p.c' object='rec-type/runtests-rec-type-descr-p.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-descr-p.o `test -f 'rec-type/rec-type-descr-p.c' || echo '$(srcdir)/'`rec-type/rec-type-descr-p.c + +rec-type/runtests-rec-type-descr-p.obj: rec-type/rec-type-descr-p.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-descr-p.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Tpo -c -o rec-type/runtests-rec-type-descr-p.obj `if test -f 'rec-type/rec-type-descr-p.c'; then $(CYGPATH_W) 'rec-type/rec-type-descr-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-descr-p.c'; fi` + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Tpo rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Po +# $(AM_V_CC)source='rec-type/rec-type-descr-p.c' object='rec-type/runtests-rec-type-descr-p.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-descr-p.obj `if test -f 'rec-type/rec-type-descr-p.c'; then $(CYGPATH_W) 'rec-type/rec-type-descr-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-descr-p.c'; fi` + +rec-type/runtests-rec-type-kind.o: rec-type/rec-type-kind.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-kind.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-kind.Tpo -c -o rec-type/runtests-rec-type-kind.o `test -f 'rec-type/rec-type-kind.c' || echo '$(srcdir)/'`rec-type/rec-type-kind.c + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-kind.Tpo rec-type/$(DEPDIR)/runtests-rec-type-kind.Po +# $(AM_V_CC)source='rec-type/rec-type-kind.c' object='rec-type/runtests-rec-type-kind.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-kind.o `test -f 'rec-type/rec-type-kind.c' || echo '$(srcdir)/'`rec-type/rec-type-kind.c + +rec-type/runtests-rec-type-kind.obj: rec-type/rec-type-kind.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-kind.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-kind.Tpo -c -o rec-type/runtests-rec-type-kind.obj `if test -f 'rec-type/rec-type-kind.c'; then $(CYGPATH_W) 'rec-type/rec-type-kind.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-kind.c'; fi` + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-kind.Tpo rec-type/$(DEPDIR)/runtests-rec-type-kind.Po +# $(AM_V_CC)source='rec-type/rec-type-kind.c' object='rec-type/runtests-rec-type-kind.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-kind.obj `if test -f 'rec-type/rec-type-kind.c'; then $(CYGPATH_W) 'rec-type/rec-type-kind.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-kind.c'; fi` + +rec-type/runtests-rec-type-kind-str.o: rec-type/rec-type-kind-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-kind-str.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Tpo -c -o rec-type/runtests-rec-type-kind-str.o `test -f 'rec-type/rec-type-kind-str.c' || echo '$(srcdir)/'`rec-type/rec-type-kind-str.c + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Tpo rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Po +# $(AM_V_CC)source='rec-type/rec-type-kind-str.c' object='rec-type/runtests-rec-type-kind-str.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-kind-str.o `test -f 'rec-type/rec-type-kind-str.c' || echo '$(srcdir)/'`rec-type/rec-type-kind-str.c + +rec-type/runtests-rec-type-kind-str.obj: rec-type/rec-type-kind-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-kind-str.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Tpo -c -o rec-type/runtests-rec-type-kind-str.obj `if test -f 'rec-type/rec-type-kind-str.c'; then $(CYGPATH_W) 'rec-type/rec-type-kind-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-kind-str.c'; fi` + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Tpo rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Po +# $(AM_V_CC)source='rec-type/rec-type-kind-str.c' object='rec-type/runtests-rec-type-kind-str.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-kind-str.obj `if test -f 'rec-type/rec-type-kind-str.c'; then $(CYGPATH_W) 'rec-type/rec-type-kind-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-kind-str.c'; fi` + +rec-type/runtests-rec-type-equal-p.o: rec-type/rec-type-equal-p.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-equal-p.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Tpo -c -o rec-type/runtests-rec-type-equal-p.o `test -f 'rec-type/rec-type-equal-p.c' || echo '$(srcdir)/'`rec-type/rec-type-equal-p.c + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Tpo rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Po +# $(AM_V_CC)source='rec-type/rec-type-equal-p.c' object='rec-type/runtests-rec-type-equal-p.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-equal-p.o `test -f 'rec-type/rec-type-equal-p.c' || echo '$(srcdir)/'`rec-type/rec-type-equal-p.c + +rec-type/runtests-rec-type-equal-p.obj: rec-type/rec-type-equal-p.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-equal-p.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Tpo -c -o rec-type/runtests-rec-type-equal-p.obj `if test -f 'rec-type/rec-type-equal-p.c'; then $(CYGPATH_W) 'rec-type/rec-type-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-equal-p.c'; fi` + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Tpo rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Po +# $(AM_V_CC)source='rec-type/rec-type-equal-p.c' object='rec-type/runtests-rec-type-equal-p.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-equal-p.obj `if test -f 'rec-type/rec-type-equal-p.c'; then $(CYGPATH_W) 'rec-type/rec-type-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-equal-p.c'; fi` + +rec-type/runtests-rec-type-check.o: rec-type/rec-type-check.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-check.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-check.Tpo -c -o rec-type/runtests-rec-type-check.o `test -f 'rec-type/rec-type-check.c' || echo '$(srcdir)/'`rec-type/rec-type-check.c + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-check.Tpo rec-type/$(DEPDIR)/runtests-rec-type-check.Po +# $(AM_V_CC)source='rec-type/rec-type-check.c' object='rec-type/runtests-rec-type-check.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-check.o `test -f 'rec-type/rec-type-check.c' || echo '$(srcdir)/'`rec-type/rec-type-check.c + +rec-type/runtests-rec-type-check.obj: rec-type/rec-type-check.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-check.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-check.Tpo -c -o rec-type/runtests-rec-type-check.obj `if test -f 'rec-type/rec-type-check.c'; then $(CYGPATH_W) 'rec-type/rec-type-check.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-check.c'; fi` + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-check.Tpo rec-type/$(DEPDIR)/runtests-rec-type-check.Po +# $(AM_V_CC)source='rec-type/rec-type-check.c' object='rec-type/runtests-rec-type-check.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-check.obj `if test -f 'rec-type/rec-type-check.c'; then $(CYGPATH_W) 'rec-type/rec-type-check.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-check.c'; fi` + +rec-type/runtests-rec-type-name.o: rec-type/rec-type-name.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-name.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-name.Tpo -c -o rec-type/runtests-rec-type-name.o `test -f 'rec-type/rec-type-name.c' || echo '$(srcdir)/'`rec-type/rec-type-name.c + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-name.Tpo rec-type/$(DEPDIR)/runtests-rec-type-name.Po +# $(AM_V_CC)source='rec-type/rec-type-name.c' object='rec-type/runtests-rec-type-name.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-name.o `test -f 'rec-type/rec-type-name.c' || echo '$(srcdir)/'`rec-type/rec-type-name.c + +rec-type/runtests-rec-type-name.obj: rec-type/rec-type-name.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-name.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-name.Tpo -c -o rec-type/runtests-rec-type-name.obj `if test -f 'rec-type/rec-type-name.c'; then $(CYGPATH_W) 'rec-type/rec-type-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-name.c'; fi` + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-name.Tpo rec-type/$(DEPDIR)/runtests-rec-type-name.Po +# $(AM_V_CC)source='rec-type/rec-type-name.c' object='rec-type/runtests-rec-type-name.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-name.obj `if test -f 'rec-type/rec-type-name.c'; then $(CYGPATH_W) 'rec-type/rec-type-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-name.c'; fi` + +rec-type/runtests-rec-type-set-name.o: rec-type/rec-type-set-name.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-set-name.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-set-name.Tpo -c -o rec-type/runtests-rec-type-set-name.o `test -f 'rec-type/rec-type-set-name.c' || echo '$(srcdir)/'`rec-type/rec-type-set-name.c + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-set-name.Tpo rec-type/$(DEPDIR)/runtests-rec-type-set-name.Po +# $(AM_V_CC)source='rec-type/rec-type-set-name.c' object='rec-type/runtests-rec-type-set-name.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-set-name.o `test -f 'rec-type/rec-type-set-name.c' || echo '$(srcdir)/'`rec-type/rec-type-set-name.c + +rec-type/runtests-rec-type-set-name.obj: rec-type/rec-type-set-name.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-set-name.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-set-name.Tpo -c -o rec-type/runtests-rec-type-set-name.obj `if test -f 'rec-type/rec-type-set-name.c'; then $(CYGPATH_W) 'rec-type/rec-type-set-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-set-name.c'; fi` + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-set-name.Tpo rec-type/$(DEPDIR)/runtests-rec-type-set-name.Po +# $(AM_V_CC)source='rec-type/rec-type-set-name.c' object='rec-type/runtests-rec-type-set-name.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-set-name.obj `if test -f 'rec-type/rec-type-set-name.c'; then $(CYGPATH_W) 'rec-type/rec-type-set-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-set-name.c'; fi` + +rec-type/runtests-tsuite-rec-type.o: rec-type/tsuite-rec-type.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-tsuite-rec-type.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Tpo -c -o rec-type/runtests-tsuite-rec-type.o `test -f 'rec-type/tsuite-rec-type.c' || echo '$(srcdir)/'`rec-type/tsuite-rec-type.c + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Tpo rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Po +# $(AM_V_CC)source='rec-type/tsuite-rec-type.c' object='rec-type/runtests-tsuite-rec-type.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-tsuite-rec-type.o `test -f 'rec-type/tsuite-rec-type.c' || echo '$(srcdir)/'`rec-type/tsuite-rec-type.c + +rec-type/runtests-tsuite-rec-type.obj: rec-type/tsuite-rec-type.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-tsuite-rec-type.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Tpo -c -o rec-type/runtests-tsuite-rec-type.obj `if test -f 'rec-type/tsuite-rec-type.c'; then $(CYGPATH_W) 'rec-type/tsuite-rec-type.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/tsuite-rec-type.c'; fi` + $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Tpo rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Po +# $(AM_V_CC)source='rec-type/tsuite-rec-type.c' object='rec-type/runtests-tsuite-rec-type.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-tsuite-rec-type.obj `if test -f 'rec-type/tsuite-rec-type.c'; then $(CYGPATH_W) 'rec-type/tsuite-rec-type.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/tsuite-rec-type.c'; fi` + +rec-type-reg/runtests-rec-type-reg-new.o: rec-type-reg/rec-type-reg-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-new.o -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Tpo -c -o rec-type-reg/runtests-rec-type-reg-new.o `test -f 'rec-type-reg/rec-type-reg-new.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-new.c + $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Po +# $(AM_V_CC)source='rec-type-reg/rec-type-reg-new.c' object='rec-type-reg/runtests-rec-type-reg-new.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-new.o `test -f 'rec-type-reg/rec-type-reg-new.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-new.c + +rec-type-reg/runtests-rec-type-reg-new.obj: rec-type-reg/rec-type-reg-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-new.obj -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Tpo -c -o rec-type-reg/runtests-rec-type-reg-new.obj `if test -f 'rec-type-reg/rec-type-reg-new.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-new.c'; fi` + $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Po +# $(AM_V_CC)source='rec-type-reg/rec-type-reg-new.c' object='rec-type-reg/runtests-rec-type-reg-new.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-new.obj `if test -f 'rec-type-reg/rec-type-reg-new.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-new.c'; fi` + +rec-type-reg/runtests-rec-type-reg-destroy.o: rec-type-reg/rec-type-reg-destroy.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-destroy.o -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Tpo -c -o rec-type-reg/runtests-rec-type-reg-destroy.o `test -f 'rec-type-reg/rec-type-reg-destroy.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-destroy.c + $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Po +# $(AM_V_CC)source='rec-type-reg/rec-type-reg-destroy.c' object='rec-type-reg/runtests-rec-type-reg-destroy.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-destroy.o `test -f 'rec-type-reg/rec-type-reg-destroy.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-destroy.c + +rec-type-reg/runtests-rec-type-reg-destroy.obj: rec-type-reg/rec-type-reg-destroy.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-destroy.obj -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Tpo -c -o rec-type-reg/runtests-rec-type-reg-destroy.obj `if test -f 'rec-type-reg/rec-type-reg-destroy.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-destroy.c'; fi` + $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Po +# $(AM_V_CC)source='rec-type-reg/rec-type-reg-destroy.c' object='rec-type-reg/runtests-rec-type-reg-destroy.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-destroy.obj `if test -f 'rec-type-reg/rec-type-reg-destroy.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-destroy.c'; fi` + +rec-type-reg/runtests-tsuite-rec-type-reg.o: rec-type-reg/tsuite-rec-type-reg.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-tsuite-rec-type-reg.o -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Tpo -c -o rec-type-reg/runtests-tsuite-rec-type-reg.o `test -f 'rec-type-reg/tsuite-rec-type-reg.c' || echo '$(srcdir)/'`rec-type-reg/tsuite-rec-type-reg.c + $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Tpo rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Po +# $(AM_V_CC)source='rec-type-reg/tsuite-rec-type-reg.c' object='rec-type-reg/runtests-tsuite-rec-type-reg.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-tsuite-rec-type-reg.o `test -f 'rec-type-reg/tsuite-rec-type-reg.c' || echo '$(srcdir)/'`rec-type-reg/tsuite-rec-type-reg.c + +rec-type-reg/runtests-tsuite-rec-type-reg.obj: rec-type-reg/tsuite-rec-type-reg.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-tsuite-rec-type-reg.obj -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Tpo -c -o rec-type-reg/runtests-tsuite-rec-type-reg.obj `if test -f 'rec-type-reg/tsuite-rec-type-reg.c'; then $(CYGPATH_W) 'rec-type-reg/tsuite-rec-type-reg.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/tsuite-rec-type-reg.c'; fi` + $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Tpo rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Po +# $(AM_V_CC)source='rec-type-reg/tsuite-rec-type-reg.c' object='rec-type-reg/runtests-tsuite-rec-type-reg.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-tsuite-rec-type-reg.obj `if test -f 'rec-type-reg/tsuite-rec-type-reg.c'; then $(CYGPATH_W) 'rec-type-reg/tsuite-rec-type-reg.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/tsuite-rec-type-reg.c'; fi` + +rec-type-reg/runtests-rec-type-reg-get.o: rec-type-reg/rec-type-reg-get.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-get.o -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Tpo -c -o rec-type-reg/runtests-rec-type-reg-get.o `test -f 'rec-type-reg/rec-type-reg-get.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-get.c + $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Po +# $(AM_V_CC)source='rec-type-reg/rec-type-reg-get.c' object='rec-type-reg/runtests-rec-type-reg-get.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-get.o `test -f 'rec-type-reg/rec-type-reg-get.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-get.c + +rec-type-reg/runtests-rec-type-reg-get.obj: rec-type-reg/rec-type-reg-get.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-get.obj -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Tpo -c -o rec-type-reg/runtests-rec-type-reg-get.obj `if test -f 'rec-type-reg/rec-type-reg-get.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-get.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-get.c'; fi` + $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Po +# $(AM_V_CC)source='rec-type-reg/rec-type-reg-get.c' object='rec-type-reg/runtests-rec-type-reg-get.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-get.obj `if test -f 'rec-type-reg/rec-type-reg-get.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-get.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-get.c'; fi` + +rec-field/runtests-rec-field-name.o: rec-field/rec-field-name.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-name.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-name.Tpo -c -o rec-field/runtests-rec-field-name.o `test -f 'rec-field/rec-field-name.c' || echo '$(srcdir)/'`rec-field/rec-field-name.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-name.Tpo rec-field/$(DEPDIR)/runtests-rec-field-name.Po +# $(AM_V_CC)source='rec-field/rec-field-name.c' object='rec-field/runtests-rec-field-name.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-name.o `test -f 'rec-field/rec-field-name.c' || echo '$(srcdir)/'`rec-field/rec-field-name.c + +rec-field/runtests-rec-field-name.obj: rec-field/rec-field-name.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-name.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-name.Tpo -c -o rec-field/runtests-rec-field-name.obj `if test -f 'rec-field/rec-field-name.c'; then $(CYGPATH_W) 'rec-field/rec-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-name.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-name.Tpo rec-field/$(DEPDIR)/runtests-rec-field-name.Po +# $(AM_V_CC)source='rec-field/rec-field-name.c' object='rec-field/runtests-rec-field-name.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-name.obj `if test -f 'rec-field/rec-field-name.c'; then $(CYGPATH_W) 'rec-field/rec-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-name.c'; fi` + +rec-field/runtests-rec-field-set-name.o: rec-field/rec-field-set-name.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-name.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-name.Tpo -c -o rec-field/runtests-rec-field-set-name.o `test -f 'rec-field/rec-field-set-name.c' || echo '$(srcdir)/'`rec-field/rec-field-set-name.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-name.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-name.Po +# $(AM_V_CC)source='rec-field/rec-field-set-name.c' object='rec-field/runtests-rec-field-set-name.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-name.o `test -f 'rec-field/rec-field-set-name.c' || echo '$(srcdir)/'`rec-field/rec-field-set-name.c + +rec-field/runtests-rec-field-set-name.obj: rec-field/rec-field-set-name.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-name.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-name.Tpo -c -o rec-field/runtests-rec-field-set-name.obj `if test -f 'rec-field/rec-field-set-name.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-name.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-name.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-name.Po +# $(AM_V_CC)source='rec-field/rec-field-set-name.c' object='rec-field/runtests-rec-field-set-name.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-name.obj `if test -f 'rec-field/rec-field-set-name.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-name.c'; fi` + +rec-field/runtests-rec-field-value.o: rec-field/rec-field-value.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-value.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-value.Tpo -c -o rec-field/runtests-rec-field-value.o `test -f 'rec-field/rec-field-value.c' || echo '$(srcdir)/'`rec-field/rec-field-value.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-value.Tpo rec-field/$(DEPDIR)/runtests-rec-field-value.Po +# $(AM_V_CC)source='rec-field/rec-field-value.c' object='rec-field/runtests-rec-field-value.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-value.o `test -f 'rec-field/rec-field-value.c' || echo '$(srcdir)/'`rec-field/rec-field-value.c + +rec-field/runtests-rec-field-value.obj: rec-field/rec-field-value.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-value.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-value.Tpo -c -o rec-field/runtests-rec-field-value.obj `if test -f 'rec-field/rec-field-value.c'; then $(CYGPATH_W) 'rec-field/rec-field-value.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-value.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-value.Tpo rec-field/$(DEPDIR)/runtests-rec-field-value.Po +# $(AM_V_CC)source='rec-field/rec-field-value.c' object='rec-field/runtests-rec-field-value.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-value.obj `if test -f 'rec-field/rec-field-value.c'; then $(CYGPATH_W) 'rec-field/rec-field-value.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-value.c'; fi` + +rec-field/runtests-rec-field-set-value.o: rec-field/rec-field-set-value.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-value.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-value.Tpo -c -o rec-field/runtests-rec-field-set-value.o `test -f 'rec-field/rec-field-set-value.c' || echo '$(srcdir)/'`rec-field/rec-field-set-value.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-value.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-value.Po +# $(AM_V_CC)source='rec-field/rec-field-set-value.c' object='rec-field/runtests-rec-field-set-value.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-value.o `test -f 'rec-field/rec-field-set-value.c' || echo '$(srcdir)/'`rec-field/rec-field-set-value.c + +rec-field/runtests-rec-field-set-value.obj: rec-field/rec-field-set-value.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-value.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-value.Tpo -c -o rec-field/runtests-rec-field-set-value.obj `if test -f 'rec-field/rec-field-set-value.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-value.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-value.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-value.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-value.Po +# $(AM_V_CC)source='rec-field/rec-field-set-value.c' object='rec-field/runtests-rec-field-set-value.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-value.obj `if test -f 'rec-field/rec-field-set-value.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-value.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-value.c'; fi` + +rec-field/runtests-rec-field-dup.o: rec-field/rec-field-dup.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-dup.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-dup.Tpo -c -o rec-field/runtests-rec-field-dup.o `test -f 'rec-field/rec-field-dup.c' || echo '$(srcdir)/'`rec-field/rec-field-dup.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-dup.Tpo rec-field/$(DEPDIR)/runtests-rec-field-dup.Po +# $(AM_V_CC)source='rec-field/rec-field-dup.c' object='rec-field/runtests-rec-field-dup.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-dup.o `test -f 'rec-field/rec-field-dup.c' || echo '$(srcdir)/'`rec-field/rec-field-dup.c + +rec-field/runtests-rec-field-dup.obj: rec-field/rec-field-dup.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-dup.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-dup.Tpo -c -o rec-field/runtests-rec-field-dup.obj `if test -f 'rec-field/rec-field-dup.c'; then $(CYGPATH_W) 'rec-field/rec-field-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-dup.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-dup.Tpo rec-field/$(DEPDIR)/runtests-rec-field-dup.Po +# $(AM_V_CC)source='rec-field/rec-field-dup.c' object='rec-field/runtests-rec-field-dup.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-dup.obj `if test -f 'rec-field/rec-field-dup.c'; then $(CYGPATH_W) 'rec-field/rec-field-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-dup.c'; fi` + +rec-field/runtests-rec-field-new.o: rec-field/rec-field-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-new.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-new.Tpo -c -o rec-field/runtests-rec-field-new.o `test -f 'rec-field/rec-field-new.c' || echo '$(srcdir)/'`rec-field/rec-field-new.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-new.Tpo rec-field/$(DEPDIR)/runtests-rec-field-new.Po +# $(AM_V_CC)source='rec-field/rec-field-new.c' object='rec-field/runtests-rec-field-new.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-new.o `test -f 'rec-field/rec-field-new.c' || echo '$(srcdir)/'`rec-field/rec-field-new.c + +rec-field/runtests-rec-field-new.obj: rec-field/rec-field-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-new.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-new.Tpo -c -o rec-field/runtests-rec-field-new.obj `if test -f 'rec-field/rec-field-new.c'; then $(CYGPATH_W) 'rec-field/rec-field-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-new.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-new.Tpo rec-field/$(DEPDIR)/runtests-rec-field-new.Po +# $(AM_V_CC)source='rec-field/rec-field-new.c' object='rec-field/runtests-rec-field-new.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-new.obj `if test -f 'rec-field/rec-field-new.c'; then $(CYGPATH_W) 'rec-field/rec-field-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-new.c'; fi` + +rec-field/runtests-rec-field-destroy.o: rec-field/rec-field-destroy.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-destroy.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-destroy.Tpo -c -o rec-field/runtests-rec-field-destroy.o `test -f 'rec-field/rec-field-destroy.c' || echo '$(srcdir)/'`rec-field/rec-field-destroy.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-destroy.Tpo rec-field/$(DEPDIR)/runtests-rec-field-destroy.Po +# $(AM_V_CC)source='rec-field/rec-field-destroy.c' object='rec-field/runtests-rec-field-destroy.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-destroy.o `test -f 'rec-field/rec-field-destroy.c' || echo '$(srcdir)/'`rec-field/rec-field-destroy.c + +rec-field/runtests-rec-field-destroy.obj: rec-field/rec-field-destroy.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-destroy.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-destroy.Tpo -c -o rec-field/runtests-rec-field-destroy.obj `if test -f 'rec-field/rec-field-destroy.c'; then $(CYGPATH_W) 'rec-field/rec-field-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-destroy.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-destroy.Tpo rec-field/$(DEPDIR)/runtests-rec-field-destroy.Po +# $(AM_V_CC)source='rec-field/rec-field-destroy.c' object='rec-field/runtests-rec-field-destroy.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-destroy.obj `if test -f 'rec-field/rec-field-destroy.c'; then $(CYGPATH_W) 'rec-field/rec-field-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-destroy.c'; fi` + +rec-field/runtests-rec-field-equal-p.o: rec-field/rec-field-equal-p.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-equal-p.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Tpo -c -o rec-field/runtests-rec-field-equal-p.o `test -f 'rec-field/rec-field-equal-p.c' || echo '$(srcdir)/'`rec-field/rec-field-equal-p.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Tpo rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Po +# $(AM_V_CC)source='rec-field/rec-field-equal-p.c' object='rec-field/runtests-rec-field-equal-p.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-equal-p.o `test -f 'rec-field/rec-field-equal-p.c' || echo '$(srcdir)/'`rec-field/rec-field-equal-p.c + +rec-field/runtests-rec-field-equal-p.obj: rec-field/rec-field-equal-p.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-equal-p.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Tpo -c -o rec-field/runtests-rec-field-equal-p.obj `if test -f 'rec-field/rec-field-equal-p.c'; then $(CYGPATH_W) 'rec-field/rec-field-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-equal-p.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Tpo rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Po +# $(AM_V_CC)source='rec-field/rec-field-equal-p.c' object='rec-field/runtests-rec-field-equal-p.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-equal-p.obj `if test -f 'rec-field/rec-field-equal-p.c'; then $(CYGPATH_W) 'rec-field/rec-field-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-equal-p.c'; fi` + +rec-field/runtests-rec-field-source.o: rec-field/rec-field-source.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-source.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-source.Tpo -c -o rec-field/runtests-rec-field-source.o `test -f 'rec-field/rec-field-source.c' || echo '$(srcdir)/'`rec-field/rec-field-source.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-source.Tpo rec-field/$(DEPDIR)/runtests-rec-field-source.Po +# $(AM_V_CC)source='rec-field/rec-field-source.c' object='rec-field/runtests-rec-field-source.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-source.o `test -f 'rec-field/rec-field-source.c' || echo '$(srcdir)/'`rec-field/rec-field-source.c + +rec-field/runtests-rec-field-source.obj: rec-field/rec-field-source.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-source.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-source.Tpo -c -o rec-field/runtests-rec-field-source.obj `if test -f 'rec-field/rec-field-source.c'; then $(CYGPATH_W) 'rec-field/rec-field-source.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-source.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-source.Tpo rec-field/$(DEPDIR)/runtests-rec-field-source.Po +# $(AM_V_CC)source='rec-field/rec-field-source.c' object='rec-field/runtests-rec-field-source.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-source.obj `if test -f 'rec-field/rec-field-source.c'; then $(CYGPATH_W) 'rec-field/rec-field-source.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-source.c'; fi` + +rec-field/runtests-rec-field-set-source.o: rec-field/rec-field-set-source.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-source.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-source.Tpo -c -o rec-field/runtests-rec-field-set-source.o `test -f 'rec-field/rec-field-set-source.c' || echo '$(srcdir)/'`rec-field/rec-field-set-source.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-source.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-source.Po +# $(AM_V_CC)source='rec-field/rec-field-set-source.c' object='rec-field/runtests-rec-field-set-source.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-source.o `test -f 'rec-field/rec-field-set-source.c' || echo '$(srcdir)/'`rec-field/rec-field-set-source.c + +rec-field/runtests-rec-field-set-source.obj: rec-field/rec-field-set-source.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-source.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-source.Tpo -c -o rec-field/runtests-rec-field-set-source.obj `if test -f 'rec-field/rec-field-set-source.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-source.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-source.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-source.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-source.Po +# $(AM_V_CC)source='rec-field/rec-field-set-source.c' object='rec-field/runtests-rec-field-set-source.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-source.obj `if test -f 'rec-field/rec-field-set-source.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-source.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-source.c'; fi` + +rec-field/runtests-rec-field-location.o: rec-field/rec-field-location.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-location.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-location.Tpo -c -o rec-field/runtests-rec-field-location.o `test -f 'rec-field/rec-field-location.c' || echo '$(srcdir)/'`rec-field/rec-field-location.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-location.Po +# $(AM_V_CC)source='rec-field/rec-field-location.c' object='rec-field/runtests-rec-field-location.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-location.o `test -f 'rec-field/rec-field-location.c' || echo '$(srcdir)/'`rec-field/rec-field-location.c + +rec-field/runtests-rec-field-location.obj: rec-field/rec-field-location.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-location.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-location.Tpo -c -o rec-field/runtests-rec-field-location.obj `if test -f 'rec-field/rec-field-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-location.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-location.Po +# $(AM_V_CC)source='rec-field/rec-field-location.c' object='rec-field/runtests-rec-field-location.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-location.obj `if test -f 'rec-field/rec-field-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-location.c'; fi` + +rec-field/runtests-rec-field-location-str.o: rec-field/rec-field-location-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-location-str.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-location-str.Tpo -c -o rec-field/runtests-rec-field-location-str.o `test -f 'rec-field/rec-field-location-str.c' || echo '$(srcdir)/'`rec-field/rec-field-location-str.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-location-str.Tpo rec-field/$(DEPDIR)/runtests-rec-field-location-str.Po +# $(AM_V_CC)source='rec-field/rec-field-location-str.c' object='rec-field/runtests-rec-field-location-str.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-location-str.o `test -f 'rec-field/rec-field-location-str.c' || echo '$(srcdir)/'`rec-field/rec-field-location-str.c + +rec-field/runtests-rec-field-location-str.obj: rec-field/rec-field-location-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-location-str.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-location-str.Tpo -c -o rec-field/runtests-rec-field-location-str.obj `if test -f 'rec-field/rec-field-location-str.c'; then $(CYGPATH_W) 'rec-field/rec-field-location-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-location-str.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-location-str.Tpo rec-field/$(DEPDIR)/runtests-rec-field-location-str.Po +# $(AM_V_CC)source='rec-field/rec-field-location-str.c' object='rec-field/runtests-rec-field-location-str.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-location-str.obj `if test -f 'rec-field/rec-field-location-str.c'; then $(CYGPATH_W) 'rec-field/rec-field-location-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-location-str.c'; fi` + +rec-field/runtests-rec-field-set-location.o: rec-field/rec-field-set-location.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-location.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-location.Tpo -c -o rec-field/runtests-rec-field-set-location.o `test -f 'rec-field/rec-field-set-location.c' || echo '$(srcdir)/'`rec-field/rec-field-set-location.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-location.Po +# $(AM_V_CC)source='rec-field/rec-field-set-location.c' object='rec-field/runtests-rec-field-set-location.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-location.o `test -f 'rec-field/rec-field-set-location.c' || echo '$(srcdir)/'`rec-field/rec-field-set-location.c + +rec-field/runtests-rec-field-set-location.obj: rec-field/rec-field-set-location.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-location.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-location.Tpo -c -o rec-field/runtests-rec-field-set-location.obj `if test -f 'rec-field/rec-field-set-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-location.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-location.Po +# $(AM_V_CC)source='rec-field/rec-field-set-location.c' object='rec-field/runtests-rec-field-set-location.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-location.obj `if test -f 'rec-field/rec-field-set-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-location.c'; fi` + +rec-field/runtests-rec-field-char-location.o: rec-field/rec-field-char-location.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-char-location.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-char-location.Tpo -c -o rec-field/runtests-rec-field-char-location.o `test -f 'rec-field/rec-field-char-location.c' || echo '$(srcdir)/'`rec-field/rec-field-char-location.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-char-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-char-location.Po +# $(AM_V_CC)source='rec-field/rec-field-char-location.c' object='rec-field/runtests-rec-field-char-location.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-char-location.o `test -f 'rec-field/rec-field-char-location.c' || echo '$(srcdir)/'`rec-field/rec-field-char-location.c + +rec-field/runtests-rec-field-char-location.obj: rec-field/rec-field-char-location.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-char-location.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-char-location.Tpo -c -o rec-field/runtests-rec-field-char-location.obj `if test -f 'rec-field/rec-field-char-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-char-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-char-location.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-char-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-char-location.Po +# $(AM_V_CC)source='rec-field/rec-field-char-location.c' object='rec-field/runtests-rec-field-char-location.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-char-location.obj `if test -f 'rec-field/rec-field-char-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-char-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-char-location.c'; fi` + +rec-field/runtests-rec-field-char-location-str.o: rec-field/rec-field-char-location-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-char-location-str.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Tpo -c -o rec-field/runtests-rec-field-char-location-str.o `test -f 'rec-field/rec-field-char-location-str.c' || echo '$(srcdir)/'`rec-field/rec-field-char-location-str.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Tpo rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Po +# $(AM_V_CC)source='rec-field/rec-field-char-location-str.c' object='rec-field/runtests-rec-field-char-location-str.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-char-location-str.o `test -f 'rec-field/rec-field-char-location-str.c' || echo '$(srcdir)/'`rec-field/rec-field-char-location-str.c + +rec-field/runtests-rec-field-char-location-str.obj: rec-field/rec-field-char-location-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-char-location-str.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Tpo -c -o rec-field/runtests-rec-field-char-location-str.obj `if test -f 'rec-field/rec-field-char-location-str.c'; then $(CYGPATH_W) 'rec-field/rec-field-char-location-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-char-location-str.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Tpo rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Po +# $(AM_V_CC)source='rec-field/rec-field-char-location-str.c' object='rec-field/runtests-rec-field-char-location-str.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-char-location-str.obj `if test -f 'rec-field/rec-field-char-location-str.c'; then $(CYGPATH_W) 'rec-field/rec-field-char-location-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-char-location-str.c'; fi` + +rec-field/runtests-rec-field-set-char-location.o: rec-field/rec-field-set-char-location.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-char-location.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Tpo -c -o rec-field/runtests-rec-field-set-char-location.o `test -f 'rec-field/rec-field-set-char-location.c' || echo '$(srcdir)/'`rec-field/rec-field-set-char-location.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Po +# $(AM_V_CC)source='rec-field/rec-field-set-char-location.c' object='rec-field/runtests-rec-field-set-char-location.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-char-location.o `test -f 'rec-field/rec-field-set-char-location.c' || echo '$(srcdir)/'`rec-field/rec-field-set-char-location.c + +rec-field/runtests-rec-field-set-char-location.obj: rec-field/rec-field-set-char-location.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-char-location.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Tpo -c -o rec-field/runtests-rec-field-set-char-location.obj `if test -f 'rec-field/rec-field-set-char-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-char-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-char-location.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Po +# $(AM_V_CC)source='rec-field/rec-field-set-char-location.c' object='rec-field/runtests-rec-field-set-char-location.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-char-location.obj `if test -f 'rec-field/rec-field-set-char-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-char-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-char-location.c'; fi` + +rec-field/runtests-rec-field-to-comment.o: rec-field/rec-field-to-comment.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-to-comment.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Tpo -c -o rec-field/runtests-rec-field-to-comment.o `test -f 'rec-field/rec-field-to-comment.c' || echo '$(srcdir)/'`rec-field/rec-field-to-comment.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Tpo rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Po +# $(AM_V_CC)source='rec-field/rec-field-to-comment.c' object='rec-field/runtests-rec-field-to-comment.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-to-comment.o `test -f 'rec-field/rec-field-to-comment.c' || echo '$(srcdir)/'`rec-field/rec-field-to-comment.c + +rec-field/runtests-rec-field-to-comment.obj: rec-field/rec-field-to-comment.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-to-comment.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Tpo -c -o rec-field/runtests-rec-field-to-comment.obj `if test -f 'rec-field/rec-field-to-comment.c'; then $(CYGPATH_W) 'rec-field/rec-field-to-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-to-comment.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Tpo rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Po +# $(AM_V_CC)source='rec-field/rec-field-to-comment.c' object='rec-field/runtests-rec-field-to-comment.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-to-comment.obj `if test -f 'rec-field/rec-field-to-comment.c'; then $(CYGPATH_W) 'rec-field/rec-field-to-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-to-comment.c'; fi` + +rec-field/runtests-tsuite-rec-field.o: rec-field/tsuite-rec-field.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-tsuite-rec-field.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Tpo -c -o rec-field/runtests-tsuite-rec-field.o `test -f 'rec-field/tsuite-rec-field.c' || echo '$(srcdir)/'`rec-field/tsuite-rec-field.c + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Tpo rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Po +# $(AM_V_CC)source='rec-field/tsuite-rec-field.c' object='rec-field/runtests-tsuite-rec-field.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-tsuite-rec-field.o `test -f 'rec-field/tsuite-rec-field.c' || echo '$(srcdir)/'`rec-field/tsuite-rec-field.c + +rec-field/runtests-tsuite-rec-field.obj: rec-field/tsuite-rec-field.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-tsuite-rec-field.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Tpo -c -o rec-field/runtests-tsuite-rec-field.obj `if test -f 'rec-field/tsuite-rec-field.c'; then $(CYGPATH_W) 'rec-field/tsuite-rec-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/tsuite-rec-field.c'; fi` + $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Tpo rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Po +# $(AM_V_CC)source='rec-field/tsuite-rec-field.c' object='rec-field/runtests-tsuite-rec-field.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-tsuite-rec-field.obj `if test -f 'rec-field/tsuite-rec-field.c'; then $(CYGPATH_W) 'rec-field/tsuite-rec-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/tsuite-rec-field.c'; fi` + +rec-record/runtests-tsuite-rec-record.o: rec-record/tsuite-rec-record.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-record/runtests-tsuite-rec-record.o -MD -MP -MF rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Tpo -c -o rec-record/runtests-tsuite-rec-record.o `test -f 'rec-record/tsuite-rec-record.c' || echo '$(srcdir)/'`rec-record/tsuite-rec-record.c + $(AM_V_at)$(am__mv) rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Tpo rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Po +# $(AM_V_CC)source='rec-record/tsuite-rec-record.c' object='rec-record/runtests-tsuite-rec-record.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-record/runtests-tsuite-rec-record.o `test -f 'rec-record/tsuite-rec-record.c' || echo '$(srcdir)/'`rec-record/tsuite-rec-record.c + +rec-record/runtests-tsuite-rec-record.obj: rec-record/tsuite-rec-record.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-record/runtests-tsuite-rec-record.obj -MD -MP -MF rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Tpo -c -o rec-record/runtests-tsuite-rec-record.obj `if test -f 'rec-record/tsuite-rec-record.c'; then $(CYGPATH_W) 'rec-record/tsuite-rec-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-record/tsuite-rec-record.c'; fi` + $(AM_V_at)$(am__mv) rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Tpo rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Po +# $(AM_V_CC)source='rec-record/tsuite-rec-record.c' object='rec-record/runtests-tsuite-rec-record.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-record/runtests-tsuite-rec-record.obj `if test -f 'rec-record/tsuite-rec-record.c'; then $(CYGPATH_W) 'rec-record/tsuite-rec-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-record/tsuite-rec-record.c'; fi` + +rec-fex/runtests-rec-fex-new.o: rec-fex/rec-fex-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-new.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-new.Tpo -c -o rec-fex/runtests-rec-fex-new.o `test -f 'rec-fex/rec-fex-new.c' || echo '$(srcdir)/'`rec-fex/rec-fex-new.c + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-new.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-new.Po +# $(AM_V_CC)source='rec-fex/rec-fex-new.c' object='rec-fex/runtests-rec-fex-new.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-new.o `test -f 'rec-fex/rec-fex-new.c' || echo '$(srcdir)/'`rec-fex/rec-fex-new.c + +rec-fex/runtests-rec-fex-new.obj: rec-fex/rec-fex-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-new.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-new.Tpo -c -o rec-fex/runtests-rec-fex-new.obj `if test -f 'rec-fex/rec-fex-new.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-new.c'; fi` + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-new.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-new.Po +# $(AM_V_CC)source='rec-fex/rec-fex-new.c' object='rec-fex/runtests-rec-fex-new.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-new.obj `if test -f 'rec-fex/rec-fex-new.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-new.c'; fi` + +rec-fex/runtests-rec-fex-destroy.o: rec-fex/rec-fex-destroy.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-destroy.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Tpo -c -o rec-fex/runtests-rec-fex-destroy.o `test -f 'rec-fex/rec-fex-destroy.c' || echo '$(srcdir)/'`rec-fex/rec-fex-destroy.c + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Po +# $(AM_V_CC)source='rec-fex/rec-fex-destroy.c' object='rec-fex/runtests-rec-fex-destroy.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-destroy.o `test -f 'rec-fex/rec-fex-destroy.c' || echo '$(srcdir)/'`rec-fex/rec-fex-destroy.c + +rec-fex/runtests-rec-fex-destroy.obj: rec-fex/rec-fex-destroy.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-destroy.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Tpo -c -o rec-fex/runtests-rec-fex-destroy.obj `if test -f 'rec-fex/rec-fex-destroy.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-destroy.c'; fi` + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Po +# $(AM_V_CC)source='rec-fex/rec-fex-destroy.c' object='rec-fex/runtests-rec-fex-destroy.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-destroy.obj `if test -f 'rec-fex/rec-fex-destroy.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-destroy.c'; fi` + +rec-fex/runtests-rec-fex-check.o: rec-fex/rec-fex-check.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-check.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-check.Tpo -c -o rec-fex/runtests-rec-fex-check.o `test -f 'rec-fex/rec-fex-check.c' || echo '$(srcdir)/'`rec-fex/rec-fex-check.c + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-check.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-check.Po +# $(AM_V_CC)source='rec-fex/rec-fex-check.c' object='rec-fex/runtests-rec-fex-check.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-check.o `test -f 'rec-fex/rec-fex-check.c' || echo '$(srcdir)/'`rec-fex/rec-fex-check.c + +rec-fex/runtests-rec-fex-check.obj: rec-fex/rec-fex-check.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-check.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-check.Tpo -c -o rec-fex/runtests-rec-fex-check.obj `if test -f 'rec-fex/rec-fex-check.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-check.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-check.c'; fi` + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-check.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-check.Po +# $(AM_V_CC)source='rec-fex/rec-fex-check.c' object='rec-fex/runtests-rec-fex-check.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-check.obj `if test -f 'rec-fex/rec-fex-check.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-check.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-check.c'; fi` + +rec-fex/runtests-rec-fex-sort.o: rec-fex/rec-fex-sort.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-sort.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Tpo -c -o rec-fex/runtests-rec-fex-sort.o `test -f 'rec-fex/rec-fex-sort.c' || echo '$(srcdir)/'`rec-fex/rec-fex-sort.c + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Po +# $(AM_V_CC)source='rec-fex/rec-fex-sort.c' object='rec-fex/runtests-rec-fex-sort.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-sort.o `test -f 'rec-fex/rec-fex-sort.c' || echo '$(srcdir)/'`rec-fex/rec-fex-sort.c + +rec-fex/runtests-rec-fex-sort.obj: rec-fex/rec-fex-sort.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-sort.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Tpo -c -o rec-fex/runtests-rec-fex-sort.obj `if test -f 'rec-fex/rec-fex-sort.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-sort.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-sort.c'; fi` + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Po +# $(AM_V_CC)source='rec-fex/rec-fex-sort.c' object='rec-fex/runtests-rec-fex-sort.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-sort.obj `if test -f 'rec-fex/rec-fex-sort.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-sort.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-sort.c'; fi` + +rec-fex/runtests-rec-fex-size.o: rec-fex/rec-fex-size.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-size.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-size.Tpo -c -o rec-fex/runtests-rec-fex-size.o `test -f 'rec-fex/rec-fex-size.c' || echo '$(srcdir)/'`rec-fex/rec-fex-size.c + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-size.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-size.Po +# $(AM_V_CC)source='rec-fex/rec-fex-size.c' object='rec-fex/runtests-rec-fex-size.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-size.o `test -f 'rec-fex/rec-fex-size.c' || echo '$(srcdir)/'`rec-fex/rec-fex-size.c + +rec-fex/runtests-rec-fex-size.obj: rec-fex/rec-fex-size.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-size.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-size.Tpo -c -o rec-fex/runtests-rec-fex-size.obj `if test -f 'rec-fex/rec-fex-size.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-size.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-size.c'; fi` + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-size.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-size.Po +# $(AM_V_CC)source='rec-fex/rec-fex-size.c' object='rec-fex/runtests-rec-fex-size.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-size.obj `if test -f 'rec-fex/rec-fex-size.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-size.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-size.c'; fi` + +rec-fex/runtests-rec-fex-get.o: rec-fex/rec-fex-get.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-get.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-get.Tpo -c -o rec-fex/runtests-rec-fex-get.o `test -f 'rec-fex/rec-fex-get.c' || echo '$(srcdir)/'`rec-fex/rec-fex-get.c + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-get.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-get.Po +# $(AM_V_CC)source='rec-fex/rec-fex-get.c' object='rec-fex/runtests-rec-fex-get.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-get.o `test -f 'rec-fex/rec-fex-get.c' || echo '$(srcdir)/'`rec-fex/rec-fex-get.c + +rec-fex/runtests-rec-fex-get.obj: rec-fex/rec-fex-get.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-get.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-get.Tpo -c -o rec-fex/runtests-rec-fex-get.obj `if test -f 'rec-fex/rec-fex-get.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-get.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-get.c'; fi` + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-get.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-get.Po +# $(AM_V_CC)source='rec-fex/rec-fex-get.c' object='rec-fex/runtests-rec-fex-get.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-get.obj `if test -f 'rec-fex/rec-fex-get.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-get.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-get.c'; fi` + +rec-fex/runtests-rec-fex-elem-field-name.o: rec-fex/rec-fex-elem-field-name.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-field-name.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Tpo -c -o rec-fex/runtests-rec-fex-elem-field-name.o `test -f 'rec-fex/rec-fex-elem-field-name.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-field-name.c + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Po +# $(AM_V_CC)source='rec-fex/rec-fex-elem-field-name.c' object='rec-fex/runtests-rec-fex-elem-field-name.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-field-name.o `test -f 'rec-fex/rec-fex-elem-field-name.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-field-name.c + +rec-fex/runtests-rec-fex-elem-field-name.obj: rec-fex/rec-fex-elem-field-name.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-field-name.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Tpo -c -o rec-fex/runtests-rec-fex-elem-field-name.obj `if test -f 'rec-fex/rec-fex-elem-field-name.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-field-name.c'; fi` + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Po +# $(AM_V_CC)source='rec-fex/rec-fex-elem-field-name.c' object='rec-fex/runtests-rec-fex-elem-field-name.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-field-name.obj `if test -f 'rec-fex/rec-fex-elem-field-name.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-field-name.c'; fi` + +rec-fex/runtests-rec-fex-elem-rewrite-to.o: rec-fex/rec-fex-elem-rewrite-to.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-rewrite-to.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Tpo -c -o rec-fex/runtests-rec-fex-elem-rewrite-to.o `test -f 'rec-fex/rec-fex-elem-rewrite-to.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-rewrite-to.c + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Po +# $(AM_V_CC)source='rec-fex/rec-fex-elem-rewrite-to.c' object='rec-fex/runtests-rec-fex-elem-rewrite-to.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-rewrite-to.o `test -f 'rec-fex/rec-fex-elem-rewrite-to.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-rewrite-to.c + +rec-fex/runtests-rec-fex-elem-rewrite-to.obj: rec-fex/rec-fex-elem-rewrite-to.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-rewrite-to.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Tpo -c -o rec-fex/runtests-rec-fex-elem-rewrite-to.obj `if test -f 'rec-fex/rec-fex-elem-rewrite-to.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-rewrite-to.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-rewrite-to.c'; fi` + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Po +# $(AM_V_CC)source='rec-fex/rec-fex-elem-rewrite-to.c' object='rec-fex/runtests-rec-fex-elem-rewrite-to.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-rewrite-to.obj `if test -f 'rec-fex/rec-fex-elem-rewrite-to.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-rewrite-to.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-rewrite-to.c'; fi` + +rec-fex/runtests-rec-fex-elem-min.o: rec-fex/rec-fex-elem-min.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-min.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Tpo -c -o rec-fex/runtests-rec-fex-elem-min.o `test -f 'rec-fex/rec-fex-elem-min.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-min.c + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Po +# $(AM_V_CC)source='rec-fex/rec-fex-elem-min.c' object='rec-fex/runtests-rec-fex-elem-min.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-min.o `test -f 'rec-fex/rec-fex-elem-min.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-min.c + +rec-fex/runtests-rec-fex-elem-min.obj: rec-fex/rec-fex-elem-min.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-min.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Tpo -c -o rec-fex/runtests-rec-fex-elem-min.obj `if test -f 'rec-fex/rec-fex-elem-min.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-min.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-min.c'; fi` + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Po +# $(AM_V_CC)source='rec-fex/rec-fex-elem-min.c' object='rec-fex/runtests-rec-fex-elem-min.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-min.obj `if test -f 'rec-fex/rec-fex-elem-min.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-min.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-min.c'; fi` + +rec-fex/runtests-rec-fex-elem-max.o: rec-fex/rec-fex-elem-max.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-max.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Tpo -c -o rec-fex/runtests-rec-fex-elem-max.o `test -f 'rec-fex/rec-fex-elem-max.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-max.c + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Po +# $(AM_V_CC)source='rec-fex/rec-fex-elem-max.c' object='rec-fex/runtests-rec-fex-elem-max.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-max.o `test -f 'rec-fex/rec-fex-elem-max.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-max.c + +rec-fex/runtests-rec-fex-elem-max.obj: rec-fex/rec-fex-elem-max.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-max.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Tpo -c -o rec-fex/runtests-rec-fex-elem-max.obj `if test -f 'rec-fex/rec-fex-elem-max.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-max.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-max.c'; fi` + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Po +# $(AM_V_CC)source='rec-fex/rec-fex-elem-max.c' object='rec-fex/runtests-rec-fex-elem-max.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-max.obj `if test -f 'rec-fex/rec-fex-elem-max.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-max.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-max.c'; fi` + +rec-fex/runtests-rec-fex-str.o: rec-fex/rec-fex-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-str.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-str.Tpo -c -o rec-fex/runtests-rec-fex-str.o `test -f 'rec-fex/rec-fex-str.c' || echo '$(srcdir)/'`rec-fex/rec-fex-str.c + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-str.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-str.Po +# $(AM_V_CC)source='rec-fex/rec-fex-str.c' object='rec-fex/runtests-rec-fex-str.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-str.o `test -f 'rec-fex/rec-fex-str.c' || echo '$(srcdir)/'`rec-fex/rec-fex-str.c + +rec-fex/runtests-rec-fex-str.obj: rec-fex/rec-fex-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-str.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-str.Tpo -c -o rec-fex/runtests-rec-fex-str.obj `if test -f 'rec-fex/rec-fex-str.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-str.c'; fi` + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-str.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-str.Po +# $(AM_V_CC)source='rec-fex/rec-fex-str.c' object='rec-fex/runtests-rec-fex-str.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-str.obj `if test -f 'rec-fex/rec-fex-str.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-str.c'; fi` + +rec-fex/runtests-tsuite-rec-fex.o: rec-fex/tsuite-rec-fex.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-tsuite-rec-fex.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Tpo -c -o rec-fex/runtests-tsuite-rec-fex.o `test -f 'rec-fex/tsuite-rec-fex.c' || echo '$(srcdir)/'`rec-fex/tsuite-rec-fex.c + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Tpo rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Po +# $(AM_V_CC)source='rec-fex/tsuite-rec-fex.c' object='rec-fex/runtests-tsuite-rec-fex.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-tsuite-rec-fex.o `test -f 'rec-fex/tsuite-rec-fex.c' || echo '$(srcdir)/'`rec-fex/tsuite-rec-fex.c + +rec-fex/runtests-tsuite-rec-fex.obj: rec-fex/tsuite-rec-fex.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-tsuite-rec-fex.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Tpo -c -o rec-fex/runtests-tsuite-rec-fex.obj `if test -f 'rec-fex/tsuite-rec-fex.c'; then $(CYGPATH_W) 'rec-fex/tsuite-rec-fex.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/tsuite-rec-fex.c'; fi` + $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Tpo rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Po +# $(AM_V_CC)source='rec-fex/tsuite-rec-fex.c' object='rec-fex/runtests-tsuite-rec-fex.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-tsuite-rec-fex.obj `if test -f 'rec-fex/tsuite-rec-fex.c'; then $(CYGPATH_W) 'rec-fex/tsuite-rec-fex.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/tsuite-rec-fex.c'; fi` + +rec-parser/runtests-rec-parser-new.o: rec-parser/rec-parser-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new.Tpo -c -o rec-parser/runtests-rec-parser-new.o `test -f 'rec-parser/rec-parser-new.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new.c + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new.Po +# $(AM_V_CC)source='rec-parser/rec-parser-new.c' object='rec-parser/runtests-rec-parser-new.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new.o `test -f 'rec-parser/rec-parser-new.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new.c + +rec-parser/runtests-rec-parser-new.obj: rec-parser/rec-parser-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new.Tpo -c -o rec-parser/runtests-rec-parser-new.obj `if test -f 'rec-parser/rec-parser-new.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new.c'; fi` + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new.Po +# $(AM_V_CC)source='rec-parser/rec-parser-new.c' object='rec-parser/runtests-rec-parser-new.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new.obj `if test -f 'rec-parser/rec-parser-new.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new.c'; fi` + +rec-parser/runtests-rec-parser-new-str.o: rec-parser/rec-parser-new-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new-str.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Tpo -c -o rec-parser/runtests-rec-parser-new-str.o `test -f 'rec-parser/rec-parser-new-str.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new-str.c + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Po +# $(AM_V_CC)source='rec-parser/rec-parser-new-str.c' object='rec-parser/runtests-rec-parser-new-str.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new-str.o `test -f 'rec-parser/rec-parser-new-str.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new-str.c + +rec-parser/runtests-rec-parser-new-str.obj: rec-parser/rec-parser-new-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new-str.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Tpo -c -o rec-parser/runtests-rec-parser-new-str.obj `if test -f 'rec-parser/rec-parser-new-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new-str.c'; fi` + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Po +# $(AM_V_CC)source='rec-parser/rec-parser-new-str.c' object='rec-parser/runtests-rec-parser-new-str.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new-str.obj `if test -f 'rec-parser/rec-parser-new-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new-str.c'; fi` + +rec-parser/runtests-rec-parser-new-mem.o: rec-parser/rec-parser-new-mem.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new-mem.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Tpo -c -o rec-parser/runtests-rec-parser-new-mem.o `test -f 'rec-parser/rec-parser-new-mem.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new-mem.c + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Po +# $(AM_V_CC)source='rec-parser/rec-parser-new-mem.c' object='rec-parser/runtests-rec-parser-new-mem.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new-mem.o `test -f 'rec-parser/rec-parser-new-mem.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new-mem.c + +rec-parser/runtests-rec-parser-new-mem.obj: rec-parser/rec-parser-new-mem.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new-mem.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Tpo -c -o rec-parser/runtests-rec-parser-new-mem.obj `if test -f 'rec-parser/rec-parser-new-mem.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new-mem.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new-mem.c'; fi` + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Po +# $(AM_V_CC)source='rec-parser/rec-parser-new-mem.c' object='rec-parser/runtests-rec-parser-new-mem.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new-mem.obj `if test -f 'rec-parser/rec-parser-new-mem.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new-mem.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new-mem.c'; fi` + +rec-parser/runtests-rec-parser-destroy.o: rec-parser/rec-parser-destroy.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-destroy.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Tpo -c -o rec-parser/runtests-rec-parser-destroy.o `test -f 'rec-parser/rec-parser-destroy.c' || echo '$(srcdir)/'`rec-parser/rec-parser-destroy.c + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Po +# $(AM_V_CC)source='rec-parser/rec-parser-destroy.c' object='rec-parser/runtests-rec-parser-destroy.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-destroy.o `test -f 'rec-parser/rec-parser-destroy.c' || echo '$(srcdir)/'`rec-parser/rec-parser-destroy.c + +rec-parser/runtests-rec-parser-destroy.obj: rec-parser/rec-parser-destroy.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-destroy.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Tpo -c -o rec-parser/runtests-rec-parser-destroy.obj `if test -f 'rec-parser/rec-parser-destroy.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-destroy.c'; fi` + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Po +# $(AM_V_CC)source='rec-parser/rec-parser-destroy.c' object='rec-parser/runtests-rec-parser-destroy.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-destroy.obj `if test -f 'rec-parser/rec-parser-destroy.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-destroy.c'; fi` + +rec-parser/runtests-rec-parse-field-name-str.o: rec-parser/rec-parse-field-name-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field-name-str.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Tpo -c -o rec-parser/runtests-rec-parse-field-name-str.o `test -f 'rec-parser/rec-parse-field-name-str.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field-name-str.c + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Po +# $(AM_V_CC)source='rec-parser/rec-parse-field-name-str.c' object='rec-parser/runtests-rec-parse-field-name-str.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field-name-str.o `test -f 'rec-parser/rec-parse-field-name-str.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field-name-str.c + +rec-parser/runtests-rec-parse-field-name-str.obj: rec-parser/rec-parse-field-name-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field-name-str.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Tpo -c -o rec-parser/runtests-rec-parse-field-name-str.obj `if test -f 'rec-parser/rec-parse-field-name-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field-name-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field-name-str.c'; fi` + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Po +# $(AM_V_CC)source='rec-parser/rec-parse-field-name-str.c' object='rec-parser/runtests-rec-parse-field-name-str.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field-name-str.obj `if test -f 'rec-parser/rec-parse-field-name-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field-name-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field-name-str.c'; fi` + +rec-parser/runtests-rec-parse-field-name.o: rec-parser/rec-parse-field-name.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field-name.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Tpo -c -o rec-parser/runtests-rec-parse-field-name.o `test -f 'rec-parser/rec-parse-field-name.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field-name.c + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Po +# $(AM_V_CC)source='rec-parser/rec-parse-field-name.c' object='rec-parser/runtests-rec-parse-field-name.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field-name.o `test -f 'rec-parser/rec-parse-field-name.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field-name.c + +rec-parser/runtests-rec-parse-field-name.obj: rec-parser/rec-parse-field-name.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field-name.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Tpo -c -o rec-parser/runtests-rec-parse-field-name.obj `if test -f 'rec-parser/rec-parse-field-name.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field-name.c'; fi` + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Po +# $(AM_V_CC)source='rec-parser/rec-parse-field-name.c' object='rec-parser/runtests-rec-parse-field-name.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field-name.obj `if test -f 'rec-parser/rec-parse-field-name.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field-name.c'; fi` + +rec-parser/runtests-rec-parse-field.o: rec-parser/rec-parse-field.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field.Tpo -c -o rec-parser/runtests-rec-parse-field.o `test -f 'rec-parser/rec-parse-field.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field.c + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field.Po +# $(AM_V_CC)source='rec-parser/rec-parse-field.c' object='rec-parser/runtests-rec-parse-field.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field.o `test -f 'rec-parser/rec-parse-field.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field.c + +rec-parser/runtests-rec-parse-field.obj: rec-parser/rec-parse-field.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field.Tpo -c -o rec-parser/runtests-rec-parse-field.obj `if test -f 'rec-parser/rec-parse-field.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field.c'; fi` + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field.Po +# $(AM_V_CC)source='rec-parser/rec-parse-field.c' object='rec-parser/runtests-rec-parse-field.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field.obj `if test -f 'rec-parser/rec-parse-field.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field.c'; fi` + +rec-parser/runtests-rec-parse-record.o: rec-parser/rec-parse-record.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-record.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-record.Tpo -c -o rec-parser/runtests-rec-parse-record.o `test -f 'rec-parser/rec-parse-record.c' || echo '$(srcdir)/'`rec-parser/rec-parse-record.c + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-record.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-record.Po +# $(AM_V_CC)source='rec-parser/rec-parse-record.c' object='rec-parser/runtests-rec-parse-record.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-record.o `test -f 'rec-parser/rec-parse-record.c' || echo '$(srcdir)/'`rec-parser/rec-parse-record.c + +rec-parser/runtests-rec-parse-record.obj: rec-parser/rec-parse-record.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-record.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-record.Tpo -c -o rec-parser/runtests-rec-parse-record.obj `if test -f 'rec-parser/rec-parse-record.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-record.c'; fi` + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-record.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-record.Po +# $(AM_V_CC)source='rec-parser/rec-parse-record.c' object='rec-parser/runtests-rec-parse-record.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-record.obj `if test -f 'rec-parser/rec-parse-record.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-record.c'; fi` + +rec-parser/runtests-rec-parse-record-str.o: rec-parser/rec-parse-record-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-record-str.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Tpo -c -o rec-parser/runtests-rec-parse-record-str.o `test -f 'rec-parser/rec-parse-record-str.c' || echo '$(srcdir)/'`rec-parser/rec-parse-record-str.c + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Po +# $(AM_V_CC)source='rec-parser/rec-parse-record-str.c' object='rec-parser/runtests-rec-parse-record-str.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-record-str.o `test -f 'rec-parser/rec-parse-record-str.c' || echo '$(srcdir)/'`rec-parser/rec-parse-record-str.c + +rec-parser/runtests-rec-parse-record-str.obj: rec-parser/rec-parse-record-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-record-str.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Tpo -c -o rec-parser/runtests-rec-parse-record-str.obj `if test -f 'rec-parser/rec-parse-record-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-record-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-record-str.c'; fi` + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Po +# $(AM_V_CC)source='rec-parser/rec-parse-record-str.c' object='rec-parser/runtests-rec-parse-record-str.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-record-str.obj `if test -f 'rec-parser/rec-parse-record-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-record-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-record-str.c'; fi` + +rec-parser/runtests-rec-parse-rset.o: rec-parser/rec-parse-rset.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-rset.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Tpo -c -o rec-parser/runtests-rec-parse-rset.o `test -f 'rec-parser/rec-parse-rset.c' || echo '$(srcdir)/'`rec-parser/rec-parse-rset.c + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Po +# $(AM_V_CC)source='rec-parser/rec-parse-rset.c' object='rec-parser/runtests-rec-parse-rset.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-rset.o `test -f 'rec-parser/rec-parse-rset.c' || echo '$(srcdir)/'`rec-parser/rec-parse-rset.c + +rec-parser/runtests-rec-parse-rset.obj: rec-parser/rec-parse-rset.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-rset.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Tpo -c -o rec-parser/runtests-rec-parse-rset.obj `if test -f 'rec-parser/rec-parse-rset.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-rset.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-rset.c'; fi` + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Po +# $(AM_V_CC)source='rec-parser/rec-parse-rset.c' object='rec-parser/runtests-rec-parse-rset.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-rset.obj `if test -f 'rec-parser/rec-parse-rset.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-rset.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-rset.c'; fi` + +rec-parser/runtests-rec-parse-db.o: rec-parser/rec-parse-db.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-db.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-db.Tpo -c -o rec-parser/runtests-rec-parse-db.o `test -f 'rec-parser/rec-parse-db.c' || echo '$(srcdir)/'`rec-parser/rec-parse-db.c + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-db.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-db.Po +# $(AM_V_CC)source='rec-parser/rec-parse-db.c' object='rec-parser/runtests-rec-parse-db.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-db.o `test -f 'rec-parser/rec-parse-db.c' || echo '$(srcdir)/'`rec-parser/rec-parse-db.c + +rec-parser/runtests-rec-parse-db.obj: rec-parser/rec-parse-db.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-db.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-db.Tpo -c -o rec-parser/runtests-rec-parse-db.obj `if test -f 'rec-parser/rec-parse-db.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-db.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-db.c'; fi` + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-db.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-db.Po +# $(AM_V_CC)source='rec-parser/rec-parse-db.c' object='rec-parser/runtests-rec-parse-db.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-db.obj `if test -f 'rec-parser/rec-parse-db.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-db.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-db.c'; fi` + +rec-parser/runtests-rec-parser-eof.o: rec-parser/rec-parser-eof.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-eof.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Tpo -c -o rec-parser/runtests-rec-parser-eof.o `test -f 'rec-parser/rec-parser-eof.c' || echo '$(srcdir)/'`rec-parser/rec-parser-eof.c + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Po +# $(AM_V_CC)source='rec-parser/rec-parser-eof.c' object='rec-parser/runtests-rec-parser-eof.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-eof.o `test -f 'rec-parser/rec-parser-eof.c' || echo '$(srcdir)/'`rec-parser/rec-parser-eof.c + +rec-parser/runtests-rec-parser-eof.obj: rec-parser/rec-parser-eof.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-eof.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Tpo -c -o rec-parser/runtests-rec-parser-eof.obj `if test -f 'rec-parser/rec-parser-eof.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-eof.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-eof.c'; fi` + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Po +# $(AM_V_CC)source='rec-parser/rec-parser-eof.c' object='rec-parser/runtests-rec-parser-eof.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-eof.obj `if test -f 'rec-parser/rec-parser-eof.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-eof.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-eof.c'; fi` + +rec-parser/runtests-rec-parser-error.o: rec-parser/rec-parser-error.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-error.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-error.Tpo -c -o rec-parser/runtests-rec-parser-error.o `test -f 'rec-parser/rec-parser-error.c' || echo '$(srcdir)/'`rec-parser/rec-parser-error.c + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-error.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-error.Po +# $(AM_V_CC)source='rec-parser/rec-parser-error.c' object='rec-parser/runtests-rec-parser-error.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-error.o `test -f 'rec-parser/rec-parser-error.c' || echo '$(srcdir)/'`rec-parser/rec-parser-error.c + +rec-parser/runtests-rec-parser-error.obj: rec-parser/rec-parser-error.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-error.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-error.Tpo -c -o rec-parser/runtests-rec-parser-error.obj `if test -f 'rec-parser/rec-parser-error.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-error.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-error.c'; fi` + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-error.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-error.Po +# $(AM_V_CC)source='rec-parser/rec-parser-error.c' object='rec-parser/runtests-rec-parser-error.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-error.obj `if test -f 'rec-parser/rec-parser-error.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-error.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-error.c'; fi` + +rec-parser/runtests-rec-parser-reset.o: rec-parser/rec-parser-reset.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-reset.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Tpo -c -o rec-parser/runtests-rec-parser-reset.o `test -f 'rec-parser/rec-parser-reset.c' || echo '$(srcdir)/'`rec-parser/rec-parser-reset.c + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Po +# $(AM_V_CC)source='rec-parser/rec-parser-reset.c' object='rec-parser/runtests-rec-parser-reset.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-reset.o `test -f 'rec-parser/rec-parser-reset.c' || echo '$(srcdir)/'`rec-parser/rec-parser-reset.c + +rec-parser/runtests-rec-parser-reset.obj: rec-parser/rec-parser-reset.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-reset.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Tpo -c -o rec-parser/runtests-rec-parser-reset.obj `if test -f 'rec-parser/rec-parser-reset.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-reset.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-reset.c'; fi` + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Po +# $(AM_V_CC)source='rec-parser/rec-parser-reset.c' object='rec-parser/runtests-rec-parser-reset.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-reset.obj `if test -f 'rec-parser/rec-parser-reset.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-reset.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-reset.c'; fi` + +rec-parser/runtests-rec-parser-perror.o: rec-parser/rec-parser-perror.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-perror.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Tpo -c -o rec-parser/runtests-rec-parser-perror.o `test -f 'rec-parser/rec-parser-perror.c' || echo '$(srcdir)/'`rec-parser/rec-parser-perror.c + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Po +# $(AM_V_CC)source='rec-parser/rec-parser-perror.c' object='rec-parser/runtests-rec-parser-perror.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-perror.o `test -f 'rec-parser/rec-parser-perror.c' || echo '$(srcdir)/'`rec-parser/rec-parser-perror.c + +rec-parser/runtests-rec-parser-perror.obj: rec-parser/rec-parser-perror.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-perror.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Tpo -c -o rec-parser/runtests-rec-parser-perror.obj `if test -f 'rec-parser/rec-parser-perror.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-perror.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-perror.c'; fi` + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Po +# $(AM_V_CC)source='rec-parser/rec-parser-perror.c' object='rec-parser/runtests-rec-parser-perror.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-perror.obj `if test -f 'rec-parser/rec-parser-perror.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-perror.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-perror.c'; fi` + +rec-parser/runtests-rec-parser-seek-mem.o: rec-parser/rec-parser-seek-mem.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-seek-mem.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Tpo -c -o rec-parser/runtests-rec-parser-seek-mem.o `test -f 'rec-parser/rec-parser-seek-mem.c' || echo '$(srcdir)/'`rec-parser/rec-parser-seek-mem.c + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Po +# $(AM_V_CC)source='rec-parser/rec-parser-seek-mem.c' object='rec-parser/runtests-rec-parser-seek-mem.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-seek-mem.o `test -f 'rec-parser/rec-parser-seek-mem.c' || echo '$(srcdir)/'`rec-parser/rec-parser-seek-mem.c + +rec-parser/runtests-rec-parser-seek-mem.obj: rec-parser/rec-parser-seek-mem.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-seek-mem.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Tpo -c -o rec-parser/runtests-rec-parser-seek-mem.obj `if test -f 'rec-parser/rec-parser-seek-mem.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-seek-mem.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-seek-mem.c'; fi` + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Po +# $(AM_V_CC)source='rec-parser/rec-parser-seek-mem.c' object='rec-parser/runtests-rec-parser-seek-mem.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-seek-mem.obj `if test -f 'rec-parser/rec-parser-seek-mem.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-seek-mem.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-seek-mem.c'; fi` + +rec-parser/runtests-tsuite-rec-parser.o: rec-parser/tsuite-rec-parser.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-tsuite-rec-parser.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Tpo -c -o rec-parser/runtests-tsuite-rec-parser.o `test -f 'rec-parser/tsuite-rec-parser.c' || echo '$(srcdir)/'`rec-parser/tsuite-rec-parser.c + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Tpo rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Po +# $(AM_V_CC)source='rec-parser/tsuite-rec-parser.c' object='rec-parser/runtests-tsuite-rec-parser.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-tsuite-rec-parser.o `test -f 'rec-parser/tsuite-rec-parser.c' || echo '$(srcdir)/'`rec-parser/tsuite-rec-parser.c + +rec-parser/runtests-tsuite-rec-parser.obj: rec-parser/tsuite-rec-parser.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-tsuite-rec-parser.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Tpo -c -o rec-parser/runtests-tsuite-rec-parser.obj `if test -f 'rec-parser/tsuite-rec-parser.c'; then $(CYGPATH_W) 'rec-parser/tsuite-rec-parser.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/tsuite-rec-parser.c'; fi` + $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Tpo rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Po +# $(AM_V_CC)source='rec-parser/tsuite-rec-parser.c' object='rec-parser/runtests-tsuite-rec-parser.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-tsuite-rec-parser.obj `if test -f 'rec-parser/tsuite-rec-parser.c'; then $(CYGPATH_W) 'rec-parser/tsuite-rec-parser.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/tsuite-rec-parser.c'; fi` + +rec-writer/runtests-rec-write-comment.o: rec-writer/rec-write-comment.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-comment.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-comment.Tpo -c -o rec-writer/runtests-rec-write-comment.o `test -f 'rec-writer/rec-write-comment.c' || echo '$(srcdir)/'`rec-writer/rec-write-comment.c + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-comment.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-comment.Po +# $(AM_V_CC)source='rec-writer/rec-write-comment.c' object='rec-writer/runtests-rec-write-comment.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-comment.o `test -f 'rec-writer/rec-write-comment.c' || echo '$(srcdir)/'`rec-writer/rec-write-comment.c + +rec-writer/runtests-rec-write-comment.obj: rec-writer/rec-write-comment.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-comment.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-comment.Tpo -c -o rec-writer/runtests-rec-write-comment.obj `if test -f 'rec-writer/rec-write-comment.c'; then $(CYGPATH_W) 'rec-writer/rec-write-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-comment.c'; fi` + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-comment.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-comment.Po +# $(AM_V_CC)source='rec-writer/rec-write-comment.c' object='rec-writer/runtests-rec-write-comment.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-comment.obj `if test -f 'rec-writer/rec-write-comment.c'; then $(CYGPATH_W) 'rec-writer/rec-write-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-comment.c'; fi` + +rec-writer/runtests-rec-write-field.o: rec-writer/rec-write-field.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field.Tpo -c -o rec-writer/runtests-rec-write-field.o `test -f 'rec-writer/rec-write-field.c' || echo '$(srcdir)/'`rec-writer/rec-write-field.c + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field.Po +# $(AM_V_CC)source='rec-writer/rec-write-field.c' object='rec-writer/runtests-rec-write-field.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field.o `test -f 'rec-writer/rec-write-field.c' || echo '$(srcdir)/'`rec-writer/rec-write-field.c + +rec-writer/runtests-rec-write-field.obj: rec-writer/rec-write-field.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field.Tpo -c -o rec-writer/runtests-rec-write-field.obj `if test -f 'rec-writer/rec-write-field.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field.c'; fi` + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field.Po +# $(AM_V_CC)source='rec-writer/rec-write-field.c' object='rec-writer/runtests-rec-write-field.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field.obj `if test -f 'rec-writer/rec-write-field.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field.c'; fi` + +rec-writer/runtests-rec-write-field-name.o: rec-writer/rec-write-field-name.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-name.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Tpo -c -o rec-writer/runtests-rec-write-field-name.o `test -f 'rec-writer/rec-write-field-name.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-name.c + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Po +# $(AM_V_CC)source='rec-writer/rec-write-field-name.c' object='rec-writer/runtests-rec-write-field-name.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-name.o `test -f 'rec-writer/rec-write-field-name.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-name.c + +rec-writer/runtests-rec-write-field-name.obj: rec-writer/rec-write-field-name.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-name.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Tpo -c -o rec-writer/runtests-rec-write-field-name.obj `if test -f 'rec-writer/rec-write-field-name.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-name.c'; fi` + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Po +# $(AM_V_CC)source='rec-writer/rec-write-field-name.c' object='rec-writer/runtests-rec-write-field-name.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-name.obj `if test -f 'rec-writer/rec-write-field-name.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-name.c'; fi` + +rec-writer/runtests-rec-writer-destroy.o: rec-writer/rec-writer-destroy.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-writer-destroy.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Tpo -c -o rec-writer/runtests-rec-writer-destroy.o `test -f 'rec-writer/rec-writer-destroy.c' || echo '$(srcdir)/'`rec-writer/rec-writer-destroy.c + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Tpo rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Po +# $(AM_V_CC)source='rec-writer/rec-writer-destroy.c' object='rec-writer/runtests-rec-writer-destroy.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-writer-destroy.o `test -f 'rec-writer/rec-writer-destroy.c' || echo '$(srcdir)/'`rec-writer/rec-writer-destroy.c + +rec-writer/runtests-rec-writer-destroy.obj: rec-writer/rec-writer-destroy.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-writer-destroy.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Tpo -c -o rec-writer/runtests-rec-writer-destroy.obj `if test -f 'rec-writer/rec-writer-destroy.c'; then $(CYGPATH_W) 'rec-writer/rec-writer-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-writer-destroy.c'; fi` + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Tpo rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Po +# $(AM_V_CC)source='rec-writer/rec-writer-destroy.c' object='rec-writer/runtests-rec-writer-destroy.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-writer-destroy.obj `if test -f 'rec-writer/rec-writer-destroy.c'; then $(CYGPATH_W) 'rec-writer/rec-writer-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-writer-destroy.c'; fi` + +rec-writer/runtests-rec-write-record.o: rec-writer/rec-write-record.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-record.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-record.Tpo -c -o rec-writer/runtests-rec-write-record.o `test -f 'rec-writer/rec-write-record.c' || echo '$(srcdir)/'`rec-writer/rec-write-record.c + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-record.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-record.Po +# $(AM_V_CC)source='rec-writer/rec-write-record.c' object='rec-writer/runtests-rec-write-record.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-record.o `test -f 'rec-writer/rec-write-record.c' || echo '$(srcdir)/'`rec-writer/rec-write-record.c + +rec-writer/runtests-rec-write-record.obj: rec-writer/rec-write-record.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-record.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-record.Tpo -c -o rec-writer/runtests-rec-write-record.obj `if test -f 'rec-writer/rec-write-record.c'; then $(CYGPATH_W) 'rec-writer/rec-write-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-record.c'; fi` + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-record.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-record.Po +# $(AM_V_CC)source='rec-writer/rec-write-record.c' object='rec-writer/runtests-rec-write-record.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-record.obj `if test -f 'rec-writer/rec-write-record.c'; then $(CYGPATH_W) 'rec-writer/rec-write-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-record.c'; fi` + +rec-writer/runtests-rec-writer-new.o: rec-writer/rec-writer-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-writer-new.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-writer-new.Tpo -c -o rec-writer/runtests-rec-writer-new.o `test -f 'rec-writer/rec-writer-new.c' || echo '$(srcdir)/'`rec-writer/rec-writer-new.c + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-writer-new.Tpo rec-writer/$(DEPDIR)/runtests-rec-writer-new.Po +# $(AM_V_CC)source='rec-writer/rec-writer-new.c' object='rec-writer/runtests-rec-writer-new.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-writer-new.o `test -f 'rec-writer/rec-writer-new.c' || echo '$(srcdir)/'`rec-writer/rec-writer-new.c + +rec-writer/runtests-rec-writer-new.obj: rec-writer/rec-writer-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-writer-new.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-writer-new.Tpo -c -o rec-writer/runtests-rec-writer-new.obj `if test -f 'rec-writer/rec-writer-new.c'; then $(CYGPATH_W) 'rec-writer/rec-writer-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-writer-new.c'; fi` + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-writer-new.Tpo rec-writer/$(DEPDIR)/runtests-rec-writer-new.Po +# $(AM_V_CC)source='rec-writer/rec-writer-new.c' object='rec-writer/runtests-rec-writer-new.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-writer-new.obj `if test -f 'rec-writer/rec-writer-new.c'; then $(CYGPATH_W) 'rec-writer/rec-writer-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-writer-new.c'; fi` + +rec-writer/runtests-rec-write-rset.o: rec-writer/rec-write-rset.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-rset.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-rset.Tpo -c -o rec-writer/runtests-rec-write-rset.o `test -f 'rec-writer/rec-write-rset.c' || echo '$(srcdir)/'`rec-writer/rec-write-rset.c + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-rset.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-rset.Po +# $(AM_V_CC)source='rec-writer/rec-write-rset.c' object='rec-writer/runtests-rec-write-rset.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-rset.o `test -f 'rec-writer/rec-write-rset.c' || echo '$(srcdir)/'`rec-writer/rec-write-rset.c + +rec-writer/runtests-rec-write-rset.obj: rec-writer/rec-write-rset.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-rset.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-rset.Tpo -c -o rec-writer/runtests-rec-write-rset.obj `if test -f 'rec-writer/rec-write-rset.c'; then $(CYGPATH_W) 'rec-writer/rec-write-rset.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-rset.c'; fi` + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-rset.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-rset.Po +# $(AM_V_CC)source='rec-writer/rec-write-rset.c' object='rec-writer/runtests-rec-write-rset.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-rset.obj `if test -f 'rec-writer/rec-write-rset.c'; then $(CYGPATH_W) 'rec-writer/rec-write-rset.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-rset.c'; fi` + +rec-writer/runtests-rec-write-db.o: rec-writer/rec-write-db.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-db.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-db.Tpo -c -o rec-writer/runtests-rec-write-db.o `test -f 'rec-writer/rec-write-db.c' || echo '$(srcdir)/'`rec-writer/rec-write-db.c + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-db.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-db.Po +# $(AM_V_CC)source='rec-writer/rec-write-db.c' object='rec-writer/runtests-rec-write-db.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-db.o `test -f 'rec-writer/rec-write-db.c' || echo '$(srcdir)/'`rec-writer/rec-write-db.c + +rec-writer/runtests-rec-write-db.obj: rec-writer/rec-write-db.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-db.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-db.Tpo -c -o rec-writer/runtests-rec-write-db.obj `if test -f 'rec-writer/rec-write-db.c'; then $(CYGPATH_W) 'rec-writer/rec-write-db.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-db.c'; fi` + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-db.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-db.Po +# $(AM_V_CC)source='rec-writer/rec-write-db.c' object='rec-writer/runtests-rec-write-db.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-db.obj `if test -f 'rec-writer/rec-write-db.c'; then $(CYGPATH_W) 'rec-writer/rec-write-db.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-db.c'; fi` + +rec-writer/runtests-rec-write-field-name-str.o: rec-writer/rec-write-field-name-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-name-str.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Tpo -c -o rec-writer/runtests-rec-write-field-name-str.o `test -f 'rec-writer/rec-write-field-name-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-name-str.c + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Po +# $(AM_V_CC)source='rec-writer/rec-write-field-name-str.c' object='rec-writer/runtests-rec-write-field-name-str.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-name-str.o `test -f 'rec-writer/rec-write-field-name-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-name-str.c + +rec-writer/runtests-rec-write-field-name-str.obj: rec-writer/rec-write-field-name-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-name-str.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Tpo -c -o rec-writer/runtests-rec-write-field-name-str.obj `if test -f 'rec-writer/rec-write-field-name-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-name-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-name-str.c'; fi` + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Po +# $(AM_V_CC)source='rec-writer/rec-write-field-name-str.c' object='rec-writer/runtests-rec-write-field-name-str.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-name-str.obj `if test -f 'rec-writer/rec-write-field-name-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-name-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-name-str.c'; fi` + +rec-writer/runtests-rec-write-field-str.o: rec-writer/rec-write-field-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-str.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Tpo -c -o rec-writer/runtests-rec-write-field-str.o `test -f 'rec-writer/rec-write-field-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-str.c + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Po +# $(AM_V_CC)source='rec-writer/rec-write-field-str.c' object='rec-writer/runtests-rec-write-field-str.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-str.o `test -f 'rec-writer/rec-write-field-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-str.c + +rec-writer/runtests-rec-write-field-str.obj: rec-writer/rec-write-field-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-str.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Tpo -c -o rec-writer/runtests-rec-write-field-str.obj `if test -f 'rec-writer/rec-write-field-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-str.c'; fi` + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Po +# $(AM_V_CC)source='rec-writer/rec-write-field-str.c' object='rec-writer/runtests-rec-write-field-str.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-str.obj `if test -f 'rec-writer/rec-write-field-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-str.c'; fi` + +rec-writer/runtests-rec-write-comment-str.o: rec-writer/rec-write-comment-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-comment-str.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Tpo -c -o rec-writer/runtests-rec-write-comment-str.o `test -f 'rec-writer/rec-write-comment-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-comment-str.c + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Po +# $(AM_V_CC)source='rec-writer/rec-write-comment-str.c' object='rec-writer/runtests-rec-write-comment-str.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-comment-str.o `test -f 'rec-writer/rec-write-comment-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-comment-str.c + +rec-writer/runtests-rec-write-comment-str.obj: rec-writer/rec-write-comment-str.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-comment-str.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Tpo -c -o rec-writer/runtests-rec-write-comment-str.obj `if test -f 'rec-writer/rec-write-comment-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-comment-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-comment-str.c'; fi` + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Po +# $(AM_V_CC)source='rec-writer/rec-write-comment-str.c' object='rec-writer/runtests-rec-write-comment-str.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-comment-str.obj `if test -f 'rec-writer/rec-write-comment-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-comment-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-comment-str.c'; fi` + +rec-writer/runtests-tsuite-rec-writer.o: rec-writer/tsuite-rec-writer.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-tsuite-rec-writer.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Tpo -c -o rec-writer/runtests-tsuite-rec-writer.o `test -f 'rec-writer/tsuite-rec-writer.c' || echo '$(srcdir)/'`rec-writer/tsuite-rec-writer.c + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Tpo rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Po +# $(AM_V_CC)source='rec-writer/tsuite-rec-writer.c' object='rec-writer/runtests-tsuite-rec-writer.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-tsuite-rec-writer.o `test -f 'rec-writer/tsuite-rec-writer.c' || echo '$(srcdir)/'`rec-writer/tsuite-rec-writer.c + +rec-writer/runtests-tsuite-rec-writer.obj: rec-writer/tsuite-rec-writer.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-tsuite-rec-writer.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Tpo -c -o rec-writer/runtests-tsuite-rec-writer.obj `if test -f 'rec-writer/tsuite-rec-writer.c'; then $(CYGPATH_W) 'rec-writer/tsuite-rec-writer.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/tsuite-rec-writer.c'; fi` + $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Tpo rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Po +# $(AM_V_CC)source='rec-writer/tsuite-rec-writer.c' object='rec-writer/runtests-tsuite-rec-writer.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-tsuite-rec-writer.obj `if test -f 'rec-writer/tsuite-rec-writer.c'; then $(CYGPATH_W) 'rec-writer/tsuite-rec-writer.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/tsuite-rec-writer.c'; fi` + +rec-sex/runtests-rec-sex-new.o: rec-sex/rec-sex-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-new.o -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-new.Tpo -c -o rec-sex/runtests-rec-sex-new.o `test -f 'rec-sex/rec-sex-new.c' || echo '$(srcdir)/'`rec-sex/rec-sex-new.c + $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-new.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-new.Po +# $(AM_V_CC)source='rec-sex/rec-sex-new.c' object='rec-sex/runtests-rec-sex-new.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-new.o `test -f 'rec-sex/rec-sex-new.c' || echo '$(srcdir)/'`rec-sex/rec-sex-new.c + +rec-sex/runtests-rec-sex-new.obj: rec-sex/rec-sex-new.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-new.obj -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-new.Tpo -c -o rec-sex/runtests-rec-sex-new.obj `if test -f 'rec-sex/rec-sex-new.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-new.c'; fi` + $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-new.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-new.Po +# $(AM_V_CC)source='rec-sex/rec-sex-new.c' object='rec-sex/runtests-rec-sex-new.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-new.obj `if test -f 'rec-sex/rec-sex-new.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-new.c'; fi` + +rec-sex/runtests-rec-sex-destroy.o: rec-sex/rec-sex-destroy.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-destroy.o -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Tpo -c -o rec-sex/runtests-rec-sex-destroy.o `test -f 'rec-sex/rec-sex-destroy.c' || echo '$(srcdir)/'`rec-sex/rec-sex-destroy.c + $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Po +# $(AM_V_CC)source='rec-sex/rec-sex-destroy.c' object='rec-sex/runtests-rec-sex-destroy.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-destroy.o `test -f 'rec-sex/rec-sex-destroy.c' || echo '$(srcdir)/'`rec-sex/rec-sex-destroy.c + +rec-sex/runtests-rec-sex-destroy.obj: rec-sex/rec-sex-destroy.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-destroy.obj -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Tpo -c -o rec-sex/runtests-rec-sex-destroy.obj `if test -f 'rec-sex/rec-sex-destroy.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-destroy.c'; fi` + $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Po +# $(AM_V_CC)source='rec-sex/rec-sex-destroy.c' object='rec-sex/runtests-rec-sex-destroy.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-destroy.obj `if test -f 'rec-sex/rec-sex-destroy.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-destroy.c'; fi` + +rec-sex/runtests-rec-sex-compile.o: rec-sex/rec-sex-compile.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-compile.o -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Tpo -c -o rec-sex/runtests-rec-sex-compile.o `test -f 'rec-sex/rec-sex-compile.c' || echo '$(srcdir)/'`rec-sex/rec-sex-compile.c + $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Po +# $(AM_V_CC)source='rec-sex/rec-sex-compile.c' object='rec-sex/runtests-rec-sex-compile.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-compile.o `test -f 'rec-sex/rec-sex-compile.c' || echo '$(srcdir)/'`rec-sex/rec-sex-compile.c + +rec-sex/runtests-rec-sex-compile.obj: rec-sex/rec-sex-compile.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-compile.obj -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Tpo -c -o rec-sex/runtests-rec-sex-compile.obj `if test -f 'rec-sex/rec-sex-compile.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-compile.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-compile.c'; fi` + $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Po +# $(AM_V_CC)source='rec-sex/rec-sex-compile.c' object='rec-sex/runtests-rec-sex-compile.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-compile.obj `if test -f 'rec-sex/rec-sex-compile.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-compile.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-compile.c'; fi` + +rec-sex/runtests-rec-sex-eval.o: rec-sex/rec-sex-eval.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-eval.o -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Tpo -c -o rec-sex/runtests-rec-sex-eval.o `test -f 'rec-sex/rec-sex-eval.c' || echo '$(srcdir)/'`rec-sex/rec-sex-eval.c + $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Po +# $(AM_V_CC)source='rec-sex/rec-sex-eval.c' object='rec-sex/runtests-rec-sex-eval.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-eval.o `test -f 'rec-sex/rec-sex-eval.c' || echo '$(srcdir)/'`rec-sex/rec-sex-eval.c + +rec-sex/runtests-rec-sex-eval.obj: rec-sex/rec-sex-eval.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-eval.obj -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Tpo -c -o rec-sex/runtests-rec-sex-eval.obj `if test -f 'rec-sex/rec-sex-eval.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-eval.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-eval.c'; fi` + $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Po +# $(AM_V_CC)source='rec-sex/rec-sex-eval.c' object='rec-sex/runtests-rec-sex-eval.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-eval.obj `if test -f 'rec-sex/rec-sex-eval.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-eval.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-eval.c'; fi` + +rec-sex/runtests-tsuite-rec-sex.o: rec-sex/tsuite-rec-sex.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-tsuite-rec-sex.o -MD -MP -MF rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Tpo -c -o rec-sex/runtests-tsuite-rec-sex.o `test -f 'rec-sex/tsuite-rec-sex.c' || echo '$(srcdir)/'`rec-sex/tsuite-rec-sex.c + $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Tpo rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Po +# $(AM_V_CC)source='rec-sex/tsuite-rec-sex.c' object='rec-sex/runtests-tsuite-rec-sex.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-tsuite-rec-sex.o `test -f 'rec-sex/tsuite-rec-sex.c' || echo '$(srcdir)/'`rec-sex/tsuite-rec-sex.c + +rec-sex/runtests-tsuite-rec-sex.obj: rec-sex/tsuite-rec-sex.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-tsuite-rec-sex.obj -MD -MP -MF rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Tpo -c -o rec-sex/runtests-tsuite-rec-sex.obj `if test -f 'rec-sex/tsuite-rec-sex.c'; then $(CYGPATH_W) 'rec-sex/tsuite-rec-sex.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/tsuite-rec-sex.c'; fi` + $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Tpo rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Po +# $(AM_V_CC)source='rec-sex/tsuite-rec-sex.c' object='rec-sex/runtests-tsuite-rec-sex.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-tsuite-rec-sex.obj `if test -f 'rec-sex/tsuite-rec-sex.c'; then $(CYGPATH_W) 'rec-sex/tsuite-rec-sex.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/tsuite-rec-sex.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + elif test -n "$$redo_logs"; then \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +runtests.log: runtests$(EXEEXT) + @p='runtests$(EXEEXT)'; \ + b='runtests'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +#.test$(EXEEXT).log: +# @p='$<'; \ +# $(am__set_b); \ +# $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +# --log-file $$b.log --trs-file $$b.trs \ +# $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +# "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-recursive +all-am: Makefile $(PROGRAMS) +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f rec-comment/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-comment/$(am__dirstamp) + -rm -f rec-fex/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-fex/$(am__dirstamp) + -rm -f rec-field-name/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-field-name/$(am__dirstamp) + -rm -f rec-field/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-field/$(am__dirstamp) + -rm -f rec-mset/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-mset/$(am__dirstamp) + -rm -f rec-parser/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-parser/$(am__dirstamp) + -rm -f rec-record/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-record/$(am__dirstamp) + -rm -f rec-sex/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-sex/$(am__dirstamp) + -rm -f rec-type-reg/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-type-reg/$(am__dirstamp) + -rm -f rec-type/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-type/$(am__dirstamp) + -rm -f rec-writer/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-writer/$(am__dirstamp) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean-local: +clean: clean-recursive + +clean-am: clean-generic clean-libtool clean-local clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) rec-comment/$(DEPDIR) rec-fex/$(DEPDIR) rec-field-name/$(DEPDIR) rec-field/$(DEPDIR) rec-mset/$(DEPDIR) rec-parser/$(DEPDIR) rec-record/$(DEPDIR) rec-sex/$(DEPDIR) rec-type-reg/$(DEPDIR) rec-type/$(DEPDIR) rec-writer/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) rec-comment/$(DEPDIR) rec-fex/$(DEPDIR) rec-field-name/$(DEPDIR) rec-field/$(DEPDIR) rec-mset/$(DEPDIR) rec-parser/$(DEPDIR) rec-record/$(DEPDIR) rec-sex/$(DEPDIR) rec-type-reg/$(DEPDIR) rec-type/$(DEPDIR) rec-writer/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) check-am install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-TESTS check-am clean clean-generic clean-libtool \ + clean-local clean-noinstPROGRAMS cscopelist-am ctags ctags-am \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +#clean-local: +# -rm -f tests.log + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/torture/Makefile.am b/devspec.en_US/project/recutils/torture/Makefile.am new file mode 100755 index 0000000..1dfaa9b --- /dev/null +++ b/devspec.en_US/project/recutils/torture/Makefile.am @@ -0,0 +1,163 @@ +# torture/ Makefile.am +# GNU rec library + +# Copyright (C) 2009-2015 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Note that we want to run the unit tests first. They are stored in +# the rec-* subdirectories, but commanded by the Makefile in the +# current directory. That explains the dot in the SUBDIRS variable +# definition. + +SUBDIRS = . utils + +if CHECK + +TESTS = runtests +noinst_PROGRAMS = runtests + +REC_MSET_TSUITE = rec-mset/elem-types.h \ + rec-mset/rec-mset-new.c \ + rec-mset/rec-mset-dup.c \ + rec-mset/rec-mset-type-p.c \ + rec-mset/rec-mset-register-type.c \ + rec-mset/rec-mset-count.c \ + rec-mset/rec-mset-get-at.c \ + rec-mset/tsuite-rec-mset.c + +REC_COMMENT_TSUITE = rec-comment/rec-comment-new.c \ + rec-comment/rec-comment-destroy.c \ + rec-comment/rec-comment-dup.c \ + rec-comment/rec-comment-text.c \ + rec-comment/rec-comment-set-text.c \ + rec-comment/rec-comment-equal-p.c \ + rec-comment/tsuite-rec-comment.c + +REC_FIELD_NAME_TSUITE = rec-field-name/rec-field-name-equal-p.c \ + rec-field-name/rec-field-name-p.c \ + rec-field-name/rec-field-name-normalise.c \ + rec-field-name/tsuite-rec-field-name.c + +REC_TYPE_TSUITE = rec-type/rec-type-new.c \ + rec-type/rec-type-destroy.c \ + rec-type/rec-type-descr-p.c \ + rec-type/rec-type-kind.c \ + rec-type/rec-type-kind-str.c \ + rec-type/rec-type-equal-p.c \ + rec-type/rec-type-check.c \ + rec-type/rec-type-name.c \ + rec-type/rec-type-set-name.c \ + rec-type/tsuite-rec-type.c + +REC_TYPE_REG_TSUITE = rec-type-reg/rec-type-reg-new.c \ + rec-type-reg/rec-type-reg-destroy.c \ + rec-type-reg/tsuite-rec-type-reg.c \ + rec-type-reg/rec-type-reg-get.c + +REC_FEX_TSUITE = rec-fex/rec-fex-new.c \ + rec-fex/rec-fex-destroy.c \ + rec-fex/rec-fex-check.c \ + rec-fex/rec-fex-sort.c \ + rec-fex/rec-fex-size.c \ + rec-fex/rec-fex-get.c \ + rec-fex/rec-fex-elem-field-name.c \ + rec-fex/rec-fex-elem-rewrite-to.c \ + rec-fex/rec-fex-elem-min.c \ + rec-fex/rec-fex-elem-max.c \ + rec-fex/rec-fex-str.c \ + rec-fex/tsuite-rec-fex.c + +REC_FIELD_TSUITE = rec-field/rec-field-name.c \ + rec-field/rec-field-set-name.c \ + rec-field/rec-field-value.c \ + rec-field/rec-field-set-value.c \ + rec-field/rec-field-dup.c \ + rec-field/rec-field-new.c \ + rec-field/rec-field-destroy.c \ + rec-field/rec-field-equal-p.c \ + rec-field/rec-field-source.c \ + rec-field/rec-field-set-source.c \ + rec-field/rec-field-location.c \ + rec-field/rec-field-location-str.c \ + rec-field/rec-field-set-location.c \ + rec-field/rec-field-char-location.c \ + rec-field/rec-field-char-location-str.c \ + rec-field/rec-field-set-char-location.c \ + rec-field/rec-field-to-comment.c \ + rec-field/tsuite-rec-field.c + +REC_RECORD_TSUITE = rec-record/tsuite-rec-record.c + +REC_PARSER_TSUITE = rec-parser/rec-parser-new.c \ + rec-parser/rec-parser-new-str.c \ + rec-parser/rec-parser-new-mem.c \ + rec-parser/rec-parser-destroy.c \ + rec-parser/rec-parse-field-name-str.c \ + rec-parser/rec-parse-field-name.c \ + rec-parser/rec-parse-field.c \ + rec-parser/rec-parse-record.c \ + rec-parser/rec-parse-record-str.c \ + rec-parser/rec-parse-rset.c \ + rec-parser/rec-parse-db.c \ + rec-parser/rec-parser-eof.c \ + rec-parser/rec-parser-error.c \ + rec-parser/rec-parser-reset.c \ + rec-parser/rec-parser-perror.c \ + rec-parser/rec-parser-seek-mem.c \ + rec-parser/tsuite-rec-parser.c + +REC_WRITER_TSUITE= rec-writer/rec-write-comment.c \ + rec-writer/rec-write-field.c \ + rec-writer/rec-write-field-name.c \ + rec-writer/rec-writer-destroy.c \ + rec-writer/rec-write-record.c \ + rec-writer/rec-writer-new.c \ + rec-writer/rec-write-rset.c \ + rec-writer/rec-write-db.c \ + rec-writer/rec-write-field-name-str.c \ + rec-writer/rec-write-field-str.c \ + rec-writer/rec-write-comment-str.c \ + rec-writer/tsuite-rec-writer.c + +REC_SEX_TSUITE = rec-sex/rec-sex-new.c \ + rec-sex/rec-sex-destroy.c \ + rec-sex/rec-sex-compile.c \ + rec-sex/rec-sex-eval.c \ + rec-sex/tsuite-rec-sex.c + +runtests_SOURCES = runtests.c \ + $(REC_MSET_TSUITE) \ + $(REC_COMMENT_TSUITE) \ + $(REC_FIELD_NAME_TSUITE) \ + $(REC_TYPE_TSUITE) \ + $(REC_TYPE_REG_TSUITE) \ + $(REC_FIELD_TSUITE) \ + $(REC_RECORD_TSUITE) \ + $(REC_FEX_TSUITE) \ + $(REC_PARSER_TSUITE) \ + $(REC_WRITER_TSUITE) \ + $(REC_SEX_TSUITE) + +AM_CPPFLAGS = -I$(top_srcdir)/src \ + -I$(top_srcdir)/torture +runtests_CFLAGS = $(CHECK_CFLAGS) +runtests_LDADD = $(CHECK_LIBS) ../src/librec.la + +clean-local: + -rm -f tests.log + +endif # CHECK + +# End of Makefile.am diff --git a/devspec.en_US/project/recutils/torture/Makefile.in b/devspec.en_US/project/recutils/torture/Makefile.in new file mode 100755 index 0000000..9cd2786 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/Makefile.in @@ -0,0 +1,4466 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# torture/ Makefile.am +# GNU rec library + +# Copyright (C) 2009-2015 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Note that we want to run the unit tests first. They are stored in +# the rec-* subdirectories, but commanded by the Makefile in the +# current directory. That explains the dot in the SUBDIRS variable +# definition. + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@CHECK_TRUE@TESTS = runtests$(EXEEXT) +@CHECK_TRUE@noinst_PROGRAMS = runtests$(EXEEXT) +subdir = torture +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +PROGRAMS = $(noinst_PROGRAMS) +am__runtests_SOURCES_DIST = runtests.c rec-mset/elem-types.h \ + rec-mset/rec-mset-new.c rec-mset/rec-mset-dup.c \ + rec-mset/rec-mset-type-p.c rec-mset/rec-mset-register-type.c \ + rec-mset/rec-mset-count.c rec-mset/rec-mset-get-at.c \ + rec-mset/tsuite-rec-mset.c rec-comment/rec-comment-new.c \ + rec-comment/rec-comment-destroy.c \ + rec-comment/rec-comment-dup.c rec-comment/rec-comment-text.c \ + rec-comment/rec-comment-set-text.c \ + rec-comment/rec-comment-equal-p.c \ + rec-comment/tsuite-rec-comment.c \ + rec-field-name/rec-field-name-equal-p.c \ + rec-field-name/rec-field-name-p.c \ + rec-field-name/rec-field-name-normalise.c \ + rec-field-name/tsuite-rec-field-name.c rec-type/rec-type-new.c \ + rec-type/rec-type-destroy.c rec-type/rec-type-descr-p.c \ + rec-type/rec-type-kind.c rec-type/rec-type-kind-str.c \ + rec-type/rec-type-equal-p.c rec-type/rec-type-check.c \ + rec-type/rec-type-name.c rec-type/rec-type-set-name.c \ + rec-type/tsuite-rec-type.c rec-type-reg/rec-type-reg-new.c \ + rec-type-reg/rec-type-reg-destroy.c \ + rec-type-reg/tsuite-rec-type-reg.c \ + rec-type-reg/rec-type-reg-get.c rec-field/rec-field-name.c \ + rec-field/rec-field-set-name.c rec-field/rec-field-value.c \ + rec-field/rec-field-set-value.c rec-field/rec-field-dup.c \ + rec-field/rec-field-new.c rec-field/rec-field-destroy.c \ + rec-field/rec-field-equal-p.c rec-field/rec-field-source.c \ + rec-field/rec-field-set-source.c \ + rec-field/rec-field-location.c \ + rec-field/rec-field-location-str.c \ + rec-field/rec-field-set-location.c \ + rec-field/rec-field-char-location.c \ + rec-field/rec-field-char-location-str.c \ + rec-field/rec-field-set-char-location.c \ + rec-field/rec-field-to-comment.c rec-field/tsuite-rec-field.c \ + rec-record/tsuite-rec-record.c rec-fex/rec-fex-new.c \ + rec-fex/rec-fex-destroy.c rec-fex/rec-fex-check.c \ + rec-fex/rec-fex-sort.c rec-fex/rec-fex-size.c \ + rec-fex/rec-fex-get.c rec-fex/rec-fex-elem-field-name.c \ + rec-fex/rec-fex-elem-rewrite-to.c rec-fex/rec-fex-elem-min.c \ + rec-fex/rec-fex-elem-max.c rec-fex/rec-fex-str.c \ + rec-fex/tsuite-rec-fex.c rec-parser/rec-parser-new.c \ + rec-parser/rec-parser-new-str.c \ + rec-parser/rec-parser-new-mem.c \ + rec-parser/rec-parser-destroy.c \ + rec-parser/rec-parse-field-name-str.c \ + rec-parser/rec-parse-field-name.c rec-parser/rec-parse-field.c \ + rec-parser/rec-parse-record.c \ + rec-parser/rec-parse-record-str.c rec-parser/rec-parse-rset.c \ + rec-parser/rec-parse-db.c rec-parser/rec-parser-eof.c \ + rec-parser/rec-parser-error.c rec-parser/rec-parser-reset.c \ + rec-parser/rec-parser-perror.c \ + rec-parser/rec-parser-seek-mem.c \ + rec-parser/tsuite-rec-parser.c rec-writer/rec-write-comment.c \ + rec-writer/rec-write-field.c rec-writer/rec-write-field-name.c \ + rec-writer/rec-writer-destroy.c rec-writer/rec-write-record.c \ + rec-writer/rec-writer-new.c rec-writer/rec-write-rset.c \ + rec-writer/rec-write-db.c \ + rec-writer/rec-write-field-name-str.c \ + rec-writer/rec-write-field-str.c \ + rec-writer/rec-write-comment-str.c \ + rec-writer/tsuite-rec-writer.c rec-sex/rec-sex-new.c \ + rec-sex/rec-sex-destroy.c rec-sex/rec-sex-compile.c \ + rec-sex/rec-sex-eval.c rec-sex/tsuite-rec-sex.c +am__dirstamp = $(am__leading_dot)dirstamp +@CHECK_TRUE@am__objects_1 = rec-mset/runtests-rec-mset-new.$(OBJEXT) \ +@CHECK_TRUE@ rec-mset/runtests-rec-mset-dup.$(OBJEXT) \ +@CHECK_TRUE@ rec-mset/runtests-rec-mset-type-p.$(OBJEXT) \ +@CHECK_TRUE@ rec-mset/runtests-rec-mset-register-type.$(OBJEXT) \ +@CHECK_TRUE@ rec-mset/runtests-rec-mset-count.$(OBJEXT) \ +@CHECK_TRUE@ rec-mset/runtests-rec-mset-get-at.$(OBJEXT) \ +@CHECK_TRUE@ rec-mset/runtests-tsuite-rec-mset.$(OBJEXT) +@CHECK_TRUE@am__objects_2 = \ +@CHECK_TRUE@ rec-comment/runtests-rec-comment-new.$(OBJEXT) \ +@CHECK_TRUE@ rec-comment/runtests-rec-comment-destroy.$(OBJEXT) \ +@CHECK_TRUE@ rec-comment/runtests-rec-comment-dup.$(OBJEXT) \ +@CHECK_TRUE@ rec-comment/runtests-rec-comment-text.$(OBJEXT) \ +@CHECK_TRUE@ rec-comment/runtests-rec-comment-set-text.$(OBJEXT) \ +@CHECK_TRUE@ rec-comment/runtests-rec-comment-equal-p.$(OBJEXT) \ +@CHECK_TRUE@ rec-comment/runtests-tsuite-rec-comment.$(OBJEXT) +@CHECK_TRUE@am__objects_3 = rec-field-name/runtests-rec-field-name-equal-p.$(OBJEXT) \ +@CHECK_TRUE@ rec-field-name/runtests-rec-field-name-p.$(OBJEXT) \ +@CHECK_TRUE@ rec-field-name/runtests-rec-field-name-normalise.$(OBJEXT) \ +@CHECK_TRUE@ rec-field-name/runtests-tsuite-rec-field-name.$(OBJEXT) +@CHECK_TRUE@am__objects_4 = rec-type/runtests-rec-type-new.$(OBJEXT) \ +@CHECK_TRUE@ rec-type/runtests-rec-type-destroy.$(OBJEXT) \ +@CHECK_TRUE@ rec-type/runtests-rec-type-descr-p.$(OBJEXT) \ +@CHECK_TRUE@ rec-type/runtests-rec-type-kind.$(OBJEXT) \ +@CHECK_TRUE@ rec-type/runtests-rec-type-kind-str.$(OBJEXT) \ +@CHECK_TRUE@ rec-type/runtests-rec-type-equal-p.$(OBJEXT) \ +@CHECK_TRUE@ rec-type/runtests-rec-type-check.$(OBJEXT) \ +@CHECK_TRUE@ rec-type/runtests-rec-type-name.$(OBJEXT) \ +@CHECK_TRUE@ rec-type/runtests-rec-type-set-name.$(OBJEXT) \ +@CHECK_TRUE@ rec-type/runtests-tsuite-rec-type.$(OBJEXT) +@CHECK_TRUE@am__objects_5 = \ +@CHECK_TRUE@ rec-type-reg/runtests-rec-type-reg-new.$(OBJEXT) \ +@CHECK_TRUE@ rec-type-reg/runtests-rec-type-reg-destroy.$(OBJEXT) \ +@CHECK_TRUE@ rec-type-reg/runtests-tsuite-rec-type-reg.$(OBJEXT) \ +@CHECK_TRUE@ rec-type-reg/runtests-rec-type-reg-get.$(OBJEXT) +@CHECK_TRUE@am__objects_6 = \ +@CHECK_TRUE@ rec-field/runtests-rec-field-name.$(OBJEXT) \ +@CHECK_TRUE@ rec-field/runtests-rec-field-set-name.$(OBJEXT) \ +@CHECK_TRUE@ rec-field/runtests-rec-field-value.$(OBJEXT) \ +@CHECK_TRUE@ rec-field/runtests-rec-field-set-value.$(OBJEXT) \ +@CHECK_TRUE@ rec-field/runtests-rec-field-dup.$(OBJEXT) \ +@CHECK_TRUE@ rec-field/runtests-rec-field-new.$(OBJEXT) \ +@CHECK_TRUE@ rec-field/runtests-rec-field-destroy.$(OBJEXT) \ +@CHECK_TRUE@ rec-field/runtests-rec-field-equal-p.$(OBJEXT) \ +@CHECK_TRUE@ rec-field/runtests-rec-field-source.$(OBJEXT) \ +@CHECK_TRUE@ rec-field/runtests-rec-field-set-source.$(OBJEXT) \ +@CHECK_TRUE@ rec-field/runtests-rec-field-location.$(OBJEXT) \ +@CHECK_TRUE@ rec-field/runtests-rec-field-location-str.$(OBJEXT) \ +@CHECK_TRUE@ rec-field/runtests-rec-field-set-location.$(OBJEXT) \ +@CHECK_TRUE@ rec-field/runtests-rec-field-char-location.$(OBJEXT) \ +@CHECK_TRUE@ rec-field/runtests-rec-field-char-location-str.$(OBJEXT) \ +@CHECK_TRUE@ rec-field/runtests-rec-field-set-char-location.$(OBJEXT) \ +@CHECK_TRUE@ rec-field/runtests-rec-field-to-comment.$(OBJEXT) \ +@CHECK_TRUE@ rec-field/runtests-tsuite-rec-field.$(OBJEXT) +@CHECK_TRUE@am__objects_7 = \ +@CHECK_TRUE@ rec-record/runtests-tsuite-rec-record.$(OBJEXT) +@CHECK_TRUE@am__objects_8 = rec-fex/runtests-rec-fex-new.$(OBJEXT) \ +@CHECK_TRUE@ rec-fex/runtests-rec-fex-destroy.$(OBJEXT) \ +@CHECK_TRUE@ rec-fex/runtests-rec-fex-check.$(OBJEXT) \ +@CHECK_TRUE@ rec-fex/runtests-rec-fex-sort.$(OBJEXT) \ +@CHECK_TRUE@ rec-fex/runtests-rec-fex-size.$(OBJEXT) \ +@CHECK_TRUE@ rec-fex/runtests-rec-fex-get.$(OBJEXT) \ +@CHECK_TRUE@ rec-fex/runtests-rec-fex-elem-field-name.$(OBJEXT) \ +@CHECK_TRUE@ rec-fex/runtests-rec-fex-elem-rewrite-to.$(OBJEXT) \ +@CHECK_TRUE@ rec-fex/runtests-rec-fex-elem-min.$(OBJEXT) \ +@CHECK_TRUE@ rec-fex/runtests-rec-fex-elem-max.$(OBJEXT) \ +@CHECK_TRUE@ rec-fex/runtests-rec-fex-str.$(OBJEXT) \ +@CHECK_TRUE@ rec-fex/runtests-tsuite-rec-fex.$(OBJEXT) +@CHECK_TRUE@am__objects_9 = \ +@CHECK_TRUE@ rec-parser/runtests-rec-parser-new.$(OBJEXT) \ +@CHECK_TRUE@ rec-parser/runtests-rec-parser-new-str.$(OBJEXT) \ +@CHECK_TRUE@ rec-parser/runtests-rec-parser-new-mem.$(OBJEXT) \ +@CHECK_TRUE@ rec-parser/runtests-rec-parser-destroy.$(OBJEXT) \ +@CHECK_TRUE@ rec-parser/runtests-rec-parse-field-name-str.$(OBJEXT) \ +@CHECK_TRUE@ rec-parser/runtests-rec-parse-field-name.$(OBJEXT) \ +@CHECK_TRUE@ rec-parser/runtests-rec-parse-field.$(OBJEXT) \ +@CHECK_TRUE@ rec-parser/runtests-rec-parse-record.$(OBJEXT) \ +@CHECK_TRUE@ rec-parser/runtests-rec-parse-record-str.$(OBJEXT) \ +@CHECK_TRUE@ rec-parser/runtests-rec-parse-rset.$(OBJEXT) \ +@CHECK_TRUE@ rec-parser/runtests-rec-parse-db.$(OBJEXT) \ +@CHECK_TRUE@ rec-parser/runtests-rec-parser-eof.$(OBJEXT) \ +@CHECK_TRUE@ rec-parser/runtests-rec-parser-error.$(OBJEXT) \ +@CHECK_TRUE@ rec-parser/runtests-rec-parser-reset.$(OBJEXT) \ +@CHECK_TRUE@ rec-parser/runtests-rec-parser-perror.$(OBJEXT) \ +@CHECK_TRUE@ rec-parser/runtests-rec-parser-seek-mem.$(OBJEXT) \ +@CHECK_TRUE@ rec-parser/runtests-tsuite-rec-parser.$(OBJEXT) +@CHECK_TRUE@am__objects_10 = \ +@CHECK_TRUE@ rec-writer/runtests-rec-write-comment.$(OBJEXT) \ +@CHECK_TRUE@ rec-writer/runtests-rec-write-field.$(OBJEXT) \ +@CHECK_TRUE@ rec-writer/runtests-rec-write-field-name.$(OBJEXT) \ +@CHECK_TRUE@ rec-writer/runtests-rec-writer-destroy.$(OBJEXT) \ +@CHECK_TRUE@ rec-writer/runtests-rec-write-record.$(OBJEXT) \ +@CHECK_TRUE@ rec-writer/runtests-rec-writer-new.$(OBJEXT) \ +@CHECK_TRUE@ rec-writer/runtests-rec-write-rset.$(OBJEXT) \ +@CHECK_TRUE@ rec-writer/runtests-rec-write-db.$(OBJEXT) \ +@CHECK_TRUE@ rec-writer/runtests-rec-write-field-name-str.$(OBJEXT) \ +@CHECK_TRUE@ rec-writer/runtests-rec-write-field-str.$(OBJEXT) \ +@CHECK_TRUE@ rec-writer/runtests-rec-write-comment-str.$(OBJEXT) \ +@CHECK_TRUE@ rec-writer/runtests-tsuite-rec-writer.$(OBJEXT) +@CHECK_TRUE@am__objects_11 = rec-sex/runtests-rec-sex-new.$(OBJEXT) \ +@CHECK_TRUE@ rec-sex/runtests-rec-sex-destroy.$(OBJEXT) \ +@CHECK_TRUE@ rec-sex/runtests-rec-sex-compile.$(OBJEXT) \ +@CHECK_TRUE@ rec-sex/runtests-rec-sex-eval.$(OBJEXT) \ +@CHECK_TRUE@ rec-sex/runtests-tsuite-rec-sex.$(OBJEXT) +@CHECK_TRUE@am_runtests_OBJECTS = runtests-runtests.$(OBJEXT) \ +@CHECK_TRUE@ $(am__objects_1) $(am__objects_2) $(am__objects_3) \ +@CHECK_TRUE@ $(am__objects_4) $(am__objects_5) $(am__objects_6) \ +@CHECK_TRUE@ $(am__objects_7) $(am__objects_8) $(am__objects_9) \ +@CHECK_TRUE@ $(am__objects_10) $(am__objects_11) +runtests_OBJECTS = $(am_runtests_OBJECTS) +am__DEPENDENCIES_1 = +@CHECK_TRUE@runtests_DEPENDENCIES = $(am__DEPENDENCIES_1) \ +@CHECK_TRUE@ ../src/librec.la +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +runtests_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(runtests_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(runtests_SOURCES) +DIST_SOURCES = $(am__runtests_SOURCES_DIST) +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + check recheck distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/depcomp \ + $(top_srcdir)/build-aux/test-driver +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BASH_HEADERS = @BASH_HEADERS@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CA68 = @CA68@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CURLLIBS = @CURLLIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +FLOOR_LIBM = @FLOOR_LIBM@ +GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ACOSF = @GNULIB_ACOSF@ +GNULIB_ACOSL = @GNULIB_ACOSL@ +GNULIB_ASINF = @GNULIB_ASINF@ +GNULIB_ASINL = @GNULIB_ASINL@ +GNULIB_ATAN2F = @GNULIB_ATAN2F@ +GNULIB_ATANF = @GNULIB_ATANF@ +GNULIB_ATANL = @GNULIB_ATANL@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CBRT = @GNULIB_CBRT@ +GNULIB_CBRTF = @GNULIB_CBRTF@ +GNULIB_CBRTL = @GNULIB_CBRTL@ +GNULIB_CEIL = @GNULIB_CEIL@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ +GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ +GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ +GNULIB_COSF = @GNULIB_COSF@ +GNULIB_COSHF = @GNULIB_COSHF@ +GNULIB_COSL = @GNULIB_COSL@ +GNULIB_CTIME = @GNULIB_CTIME@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_EXP2 = @GNULIB_EXP2@ +GNULIB_EXP2F = @GNULIB_EXP2F@ +GNULIB_EXP2L = @GNULIB_EXP2L@ +GNULIB_EXPF = @GNULIB_EXPF@ +GNULIB_EXPL = @GNULIB_EXPL@ +GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ +GNULIB_EXPM1 = @GNULIB_EXPM1@ +GNULIB_EXPM1F = @GNULIB_EXPM1F@ +GNULIB_EXPM1L = @GNULIB_EXPM1L@ +GNULIB_FABSF = @GNULIB_FABSF@ +GNULIB_FABSL = @GNULIB_FABSL@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FCNTL = @GNULIB_FCNTL@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FLOCK = @GNULIB_FLOCK@ +GNULIB_FLOOR = @GNULIB_FLOOR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FMA = @GNULIB_FMA@ +GNULIB_FMAF = @GNULIB_FMAF@ +GNULIB_FMAL = @GNULIB_FMAL@ +GNULIB_FMOD = @GNULIB_FMOD@ +GNULIB_FMODF = @GNULIB_FMODF@ +GNULIB_FMODL = @GNULIB_FMODL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPF = @GNULIB_FREXPF@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSTAT = @GNULIB_FSTAT@ +GNULIB_FSTATAT = @GNULIB_FSTATAT@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETPASS = @GNULIB_GETPASS@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_HYPOT = @GNULIB_HYPOT@ +GNULIB_HYPOTF = @GNULIB_HYPOTF@ +GNULIB_HYPOTL = @GNULIB_HYPOTL@ +GNULIB_ILOGB = @GNULIB_ILOGB@ +GNULIB_ILOGBF = @GNULIB_ILOGBF@ +GNULIB_ILOGBL = @GNULIB_ILOGBL@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPF = @GNULIB_LDEXPF@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LOCALENAME = @GNULIB_LOCALENAME@ +GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ +GNULIB_LOG = @GNULIB_LOG@ +GNULIB_LOG10 = @GNULIB_LOG10@ +GNULIB_LOG10F = @GNULIB_LOG10F@ +GNULIB_LOG10L = @GNULIB_LOG10L@ +GNULIB_LOG1P = @GNULIB_LOG1P@ +GNULIB_LOG1PF = @GNULIB_LOG1PF@ +GNULIB_LOG1PL = @GNULIB_LOG1PL@ +GNULIB_LOG2 = @GNULIB_LOG2@ +GNULIB_LOG2F = @GNULIB_LOG2F@ +GNULIB_LOG2L = @GNULIB_LOG2L@ +GNULIB_LOGB = @GNULIB_LOGB@ +GNULIB_LOGBF = @GNULIB_LOGBF@ +GNULIB_LOGBL = @GNULIB_LOGBL@ +GNULIB_LOGF = @GNULIB_LOGF@ +GNULIB_LOGL = @GNULIB_LOGL@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKFIFO = @GNULIB_MKFIFO@ +GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ +GNULIB_MKNOD = @GNULIB_MKNOD@ +GNULIB_MKNODAT = @GNULIB_MKNODAT@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_MKTIME = @GNULIB_MKTIME@ +GNULIB_MODF = @GNULIB_MODF@ +GNULIB_MODFF = @GNULIB_MODFF@ +GNULIB_MODFL = @GNULIB_MODFL@ +GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ +GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_POWF = @GNULIB_POWF@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_QSORT_R = @GNULIB_QSORT_R@ +GNULIB_RAISE = @GNULIB_RAISE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMAINDER = @GNULIB_REMAINDER@ +GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ +GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RINT = @GNULIB_RINT@ +GNULIB_RINTF = @GNULIB_RINTF@ +GNULIB_RINTL = @GNULIB_RINTL@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SINF = @GNULIB_SINF@ +GNULIB_SINHF = @GNULIB_SINHF@ +GNULIB_SINL = @GNULIB_SINL@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_SQRTF = @GNULIB_SQRTF@ +GNULIB_SQRTL = @GNULIB_SQRTL@ +GNULIB_STAT = @GNULIB_STAT@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRFTIME = @GNULIB_STRFTIME@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRPTIME = @GNULIB_STRPTIME@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TANF = @GNULIB_TANF@ +GNULIB_TANHF = @GNULIB_TANHF@ +GNULIB_TANL = @GNULIB_TANL@ +GNULIB_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_TZSET = @GNULIB_TZSET@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WAITPID = @GNULIB_WAITPID@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +HAVE_ACOSF = @HAVE_ACOSF@ +HAVE_ACOSL = @HAVE_ACOSL@ +HAVE_ASINF = @HAVE_ASINF@ +HAVE_ASINL = @HAVE_ASINL@ +HAVE_ATAN2F = @HAVE_ATAN2F@ +HAVE_ATANF = @HAVE_ATANF@ +HAVE_ATANL = @HAVE_ATANL@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CBRT = @HAVE_CBRT@ +HAVE_CBRTF = @HAVE_CBRTF@ +HAVE_CBRTL = @HAVE_CBRTL@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_COPYSIGN = @HAVE_COPYSIGN@ +HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ +HAVE_COSF = @HAVE_COSF@ +HAVE_COSHF = @HAVE_COSHF@ +HAVE_COSL = @HAVE_COSL@ +HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ +HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ +HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ +HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ +HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ +HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ +HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ +HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ +HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ +HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ +HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ +HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ +HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ +HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ +HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ +HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ +HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ +HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ +HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ +HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_EXPF = @HAVE_EXPF@ +HAVE_EXPL = @HAVE_EXPL@ +HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ +HAVE_EXPM1 = @HAVE_EXPM1@ +HAVE_EXPM1F = @HAVE_EXPM1F@ +HAVE_FABSF = @HAVE_FABSF@ +HAVE_FABSL = @HAVE_FABSL@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FLOCK = @HAVE_FLOCK@ +HAVE_FMA = @HAVE_FMA@ +HAVE_FMAF = @HAVE_FMAF@ +HAVE_FMAL = @HAVE_FMAL@ +HAVE_FMODF = @HAVE_FMODF@ +HAVE_FMODL = @HAVE_FMODL@ +HAVE_FREELOCALE = @HAVE_FREELOCALE@ +HAVE_FREXPF = @HAVE_FREXPF@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSTATAT = @HAVE_FSTATAT@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_FUTIMENS = @HAVE_FUTIMENS@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETPASS = @HAVE_GETPASS@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_HYPOTF = @HAVE_HYPOTF@ +HAVE_HYPOTL = @HAVE_HYPOTL@ +HAVE_ILOGB = @HAVE_ILOGB@ +HAVE_ILOGBF = @HAVE_ILOGBF@ +HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LDEXPF = @HAVE_LDEXPF@ +HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOG10F = @HAVE_LOG10F@ +HAVE_LOG10L = @HAVE_LOG10L@ +HAVE_LOG1P = @HAVE_LOG1P@ +HAVE_LOG1PF = @HAVE_LOG1PF@ +HAVE_LOG1PL = @HAVE_LOG1PL@ +HAVE_LOGBF = @HAVE_LOGBF@ +HAVE_LOGBL = @HAVE_LOGBL@ +HAVE_LOGF = @HAVE_LOGF@ +HAVE_LOGL = @HAVE_LOGL@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDIRAT = @HAVE_MKDIRAT@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKFIFO = @HAVE_MKFIFO@ +HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ +HAVE_MKNOD = @HAVE_MKNOD@ +HAVE_MKNODAT = @HAVE_MKNODAT@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MODFF = @HAVE_MODFF@ +HAVE_MODFL = @HAVE_MODFL@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ +HAVE_POWF = @HAVE_POWF@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_QSORT_R = @HAVE_QSORT_R@ +HAVE_RAISE = @HAVE_RAISE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_REMAINDER = @HAVE_REMAINDER@ +HAVE_REMAINDERF = @HAVE_REMAINDERF@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RINT = @HAVE_RINT@ +HAVE_RINTL = @HAVE_RINTL@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SINF = @HAVE_SINF@ +HAVE_SINHF = @HAVE_SINHF@ +HAVE_SINL = @HAVE_SINL@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_SQRTF = @HAVE_SQRTF@ +HAVE_SQRTL = @HAVE_SQRTL@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRPTIME = @HAVE_STRPTIME@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ +HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TANF = @HAVE_TANF@ +HAVE_TANHF = @HAVE_TANHF@ +HAVE_TANL = @HAVE_TANL@ +HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_TZSET = @HAVE_TZSET@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSFTIME = @HAVE_WCSFTIME@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ +INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBGCRYPT = @LIBGCRYPT@ +LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBREADLINE = @LIBREADLINE@ +LIBS = @LIBS@ +LIBTHREAD = @LIBTHREAD@ +LIBTOOL = @LIBTOOL@ +LIB_ACL = @LIB_ACL@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LIB_EACCESS = @LIB_EACCESS@ +LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ +LIB_SELINUX = @LIB_SELINUX@ +LIMITS_H = @LIMITS_H@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTALLOCA = @LTALLOCA@ +LTLIBGCRYPT = @LTLIBGCRYPT@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBREADLINE = @LTLIBREADLINE@ +LTLIBTHREAD = @LTLIBTHREAD@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MDBLIBS = @MDBLIBS@ +MDB_DATETIME = @MDB_DATETIME@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ +NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LIMITS_H = @NEXT_LIMITS_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_ACOSF = @REPLACE_ACOSF@ +REPLACE_ASINF = @REPLACE_ASINF@ +REPLACE_ATAN2F = @REPLACE_ATAN2F@ +REPLACE_ATANF = @REPLACE_ATANF@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CBRTF = @REPLACE_CBRTF@ +REPLACE_CBRTL = @REPLACE_CBRTL@ +REPLACE_CEIL = @REPLACE_CEIL@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_COSF = @REPLACE_COSF@ +REPLACE_COSHF = @REPLACE_COSHF@ +REPLACE_CTIME = @REPLACE_CTIME@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_EXP2 = @REPLACE_EXP2@ +REPLACE_EXP2L = @REPLACE_EXP2L@ +REPLACE_EXPF = @REPLACE_EXPF@ +REPLACE_EXPM1 = @REPLACE_EXPM1@ +REPLACE_EXPM1F = @REPLACE_EXPM1F@ +REPLACE_FABSL = @REPLACE_FABSL@ +REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOOR = @REPLACE_FLOOR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FMA = @REPLACE_FMA@ +REPLACE_FMAF = @REPLACE_FMAF@ +REPLACE_FMAL = @REPLACE_FMAL@ +REPLACE_FMOD = @REPLACE_FMOD@ +REPLACE_FMODF = @REPLACE_FMODF@ +REPLACE_FMODL = @REPLACE_FMODL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPF = @REPLACE_FREXPF@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FSTAT = @REPLACE_FSTAT@ +REPLACE_FSTATAT = @REPLACE_FSTATAT@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETPASS = @REPLACE_GETPASS@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_GMTIME = @REPLACE_GMTIME@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_HYPOT = @REPLACE_HYPOT@ +REPLACE_HYPOTF = @REPLACE_HYPOTF@ +REPLACE_HYPOTL = @REPLACE_HYPOTL@ +REPLACE_ILOGB = @REPLACE_ILOGB@ +REPLACE_ILOGBF = @REPLACE_ILOGBF@ +REPLACE_ILOGBL = @REPLACE_ILOGBL@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LOG = @REPLACE_LOG@ +REPLACE_LOG10 = @REPLACE_LOG10@ +REPLACE_LOG10F = @REPLACE_LOG10F@ +REPLACE_LOG10L = @REPLACE_LOG10L@ +REPLACE_LOG1P = @REPLACE_LOG1P@ +REPLACE_LOG1PF = @REPLACE_LOG1PF@ +REPLACE_LOG1PL = @REPLACE_LOG1PL@ +REPLACE_LOG2 = @REPLACE_LOG2@ +REPLACE_LOG2F = @REPLACE_LOG2F@ +REPLACE_LOG2L = @REPLACE_LOG2L@ +REPLACE_LOGB = @REPLACE_LOGB@ +REPLACE_LOGBF = @REPLACE_LOGBF@ +REPLACE_LOGBL = @REPLACE_LOGBL@ +REPLACE_LOGF = @REPLACE_LOGF@ +REPLACE_LOGL = @REPLACE_LOGL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKFIFO = @REPLACE_MKFIFO@ +REPLACE_MKNOD = @REPLACE_MKNOD@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_MKTIME = @REPLACE_MKTIME@ +REPLACE_MODF = @REPLACE_MODF@ +REPLACE_MODFF = @REPLACE_MODFF@ +REPLACE_MODFL = @REPLACE_MODFL@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_OPENAT = @REPLACE_OPENAT@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_QSORT_R = @REPLACE_QSORT_R@ +REPLACE_RAISE = @REPLACE_RAISE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_READLINKAT = @REPLACE_READLINKAT@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMAINDER = @REPLACE_REMAINDER@ +REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ +REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SINF = @REPLACE_SINF@ +REPLACE_SINHF = @REPLACE_SINHF@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_SQRTF = @REPLACE_SQRTF@ +REPLACE_SQRTL = @REPLACE_SQRTL@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRFTIME = @REPLACE_STRFTIME@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ +REPLACE_TANF = @REPLACE_TANF@ +REPLACE_TANHF = @REPLACE_TANHF@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TRUNC = @REPLACE_TRUNC@ +REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ +REPLACE_TRUNCF = @REPLACE_TRUNCF@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_TZSET = @REPLACE_TZSET@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SED = @SED@ +SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ +UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +USE_ACL = @USE_ACL@ +USE_NLS = @USE_NLS@ +UUIDLIBS = @UUIDLIBS@ +VERSION = @VERSION@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ +WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ +WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +crypt_support = @crypt_support@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +have_uuid = @have_uuid@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = . utils +@CHECK_TRUE@REC_MSET_TSUITE = rec-mset/elem-types.h \ +@CHECK_TRUE@ rec-mset/rec-mset-new.c \ +@CHECK_TRUE@ rec-mset/rec-mset-dup.c \ +@CHECK_TRUE@ rec-mset/rec-mset-type-p.c \ +@CHECK_TRUE@ rec-mset/rec-mset-register-type.c \ +@CHECK_TRUE@ rec-mset/rec-mset-count.c \ +@CHECK_TRUE@ rec-mset/rec-mset-get-at.c \ +@CHECK_TRUE@ rec-mset/tsuite-rec-mset.c + +@CHECK_TRUE@REC_COMMENT_TSUITE = rec-comment/rec-comment-new.c \ +@CHECK_TRUE@ rec-comment/rec-comment-destroy.c \ +@CHECK_TRUE@ rec-comment/rec-comment-dup.c \ +@CHECK_TRUE@ rec-comment/rec-comment-text.c \ +@CHECK_TRUE@ rec-comment/rec-comment-set-text.c \ +@CHECK_TRUE@ rec-comment/rec-comment-equal-p.c \ +@CHECK_TRUE@ rec-comment/tsuite-rec-comment.c + +@CHECK_TRUE@REC_FIELD_NAME_TSUITE = rec-field-name/rec-field-name-equal-p.c \ +@CHECK_TRUE@ rec-field-name/rec-field-name-p.c \ +@CHECK_TRUE@ rec-field-name/rec-field-name-normalise.c \ +@CHECK_TRUE@ rec-field-name/tsuite-rec-field-name.c + +@CHECK_TRUE@REC_TYPE_TSUITE = rec-type/rec-type-new.c \ +@CHECK_TRUE@ rec-type/rec-type-destroy.c \ +@CHECK_TRUE@ rec-type/rec-type-descr-p.c \ +@CHECK_TRUE@ rec-type/rec-type-kind.c \ +@CHECK_TRUE@ rec-type/rec-type-kind-str.c \ +@CHECK_TRUE@ rec-type/rec-type-equal-p.c \ +@CHECK_TRUE@ rec-type/rec-type-check.c \ +@CHECK_TRUE@ rec-type/rec-type-name.c \ +@CHECK_TRUE@ rec-type/rec-type-set-name.c \ +@CHECK_TRUE@ rec-type/tsuite-rec-type.c + +@CHECK_TRUE@REC_TYPE_REG_TSUITE = rec-type-reg/rec-type-reg-new.c \ +@CHECK_TRUE@ rec-type-reg/rec-type-reg-destroy.c \ +@CHECK_TRUE@ rec-type-reg/tsuite-rec-type-reg.c \ +@CHECK_TRUE@ rec-type-reg/rec-type-reg-get.c + +@CHECK_TRUE@REC_FEX_TSUITE = rec-fex/rec-fex-new.c \ +@CHECK_TRUE@ rec-fex/rec-fex-destroy.c \ +@CHECK_TRUE@ rec-fex/rec-fex-check.c \ +@CHECK_TRUE@ rec-fex/rec-fex-sort.c \ +@CHECK_TRUE@ rec-fex/rec-fex-size.c \ +@CHECK_TRUE@ rec-fex/rec-fex-get.c \ +@CHECK_TRUE@ rec-fex/rec-fex-elem-field-name.c \ +@CHECK_TRUE@ rec-fex/rec-fex-elem-rewrite-to.c \ +@CHECK_TRUE@ rec-fex/rec-fex-elem-min.c \ +@CHECK_TRUE@ rec-fex/rec-fex-elem-max.c \ +@CHECK_TRUE@ rec-fex/rec-fex-str.c \ +@CHECK_TRUE@ rec-fex/tsuite-rec-fex.c + +@CHECK_TRUE@REC_FIELD_TSUITE = rec-field/rec-field-name.c \ +@CHECK_TRUE@ rec-field/rec-field-set-name.c \ +@CHECK_TRUE@ rec-field/rec-field-value.c \ +@CHECK_TRUE@ rec-field/rec-field-set-value.c \ +@CHECK_TRUE@ rec-field/rec-field-dup.c \ +@CHECK_TRUE@ rec-field/rec-field-new.c \ +@CHECK_TRUE@ rec-field/rec-field-destroy.c \ +@CHECK_TRUE@ rec-field/rec-field-equal-p.c \ +@CHECK_TRUE@ rec-field/rec-field-source.c \ +@CHECK_TRUE@ rec-field/rec-field-set-source.c \ +@CHECK_TRUE@ rec-field/rec-field-location.c \ +@CHECK_TRUE@ rec-field/rec-field-location-str.c \ +@CHECK_TRUE@ rec-field/rec-field-set-location.c \ +@CHECK_TRUE@ rec-field/rec-field-char-location.c \ +@CHECK_TRUE@ rec-field/rec-field-char-location-str.c \ +@CHECK_TRUE@ rec-field/rec-field-set-char-location.c \ +@CHECK_TRUE@ rec-field/rec-field-to-comment.c \ +@CHECK_TRUE@ rec-field/tsuite-rec-field.c + +@CHECK_TRUE@REC_RECORD_TSUITE = rec-record/tsuite-rec-record.c +@CHECK_TRUE@REC_PARSER_TSUITE = rec-parser/rec-parser-new.c \ +@CHECK_TRUE@ rec-parser/rec-parser-new-str.c \ +@CHECK_TRUE@ rec-parser/rec-parser-new-mem.c \ +@CHECK_TRUE@ rec-parser/rec-parser-destroy.c \ +@CHECK_TRUE@ rec-parser/rec-parse-field-name-str.c \ +@CHECK_TRUE@ rec-parser/rec-parse-field-name.c \ +@CHECK_TRUE@ rec-parser/rec-parse-field.c \ +@CHECK_TRUE@ rec-parser/rec-parse-record.c \ +@CHECK_TRUE@ rec-parser/rec-parse-record-str.c \ +@CHECK_TRUE@ rec-parser/rec-parse-rset.c \ +@CHECK_TRUE@ rec-parser/rec-parse-db.c \ +@CHECK_TRUE@ rec-parser/rec-parser-eof.c \ +@CHECK_TRUE@ rec-parser/rec-parser-error.c \ +@CHECK_TRUE@ rec-parser/rec-parser-reset.c \ +@CHECK_TRUE@ rec-parser/rec-parser-perror.c \ +@CHECK_TRUE@ rec-parser/rec-parser-seek-mem.c \ +@CHECK_TRUE@ rec-parser/tsuite-rec-parser.c + +@CHECK_TRUE@REC_WRITER_TSUITE = rec-writer/rec-write-comment.c \ +@CHECK_TRUE@ rec-writer/rec-write-field.c \ +@CHECK_TRUE@ rec-writer/rec-write-field-name.c \ +@CHECK_TRUE@ rec-writer/rec-writer-destroy.c \ +@CHECK_TRUE@ rec-writer/rec-write-record.c \ +@CHECK_TRUE@ rec-writer/rec-writer-new.c \ +@CHECK_TRUE@ rec-writer/rec-write-rset.c \ +@CHECK_TRUE@ rec-writer/rec-write-db.c \ +@CHECK_TRUE@ rec-writer/rec-write-field-name-str.c \ +@CHECK_TRUE@ rec-writer/rec-write-field-str.c \ +@CHECK_TRUE@ rec-writer/rec-write-comment-str.c \ +@CHECK_TRUE@ rec-writer/tsuite-rec-writer.c + +@CHECK_TRUE@REC_SEX_TSUITE = rec-sex/rec-sex-new.c \ +@CHECK_TRUE@ rec-sex/rec-sex-destroy.c \ +@CHECK_TRUE@ rec-sex/rec-sex-compile.c \ +@CHECK_TRUE@ rec-sex/rec-sex-eval.c \ +@CHECK_TRUE@ rec-sex/tsuite-rec-sex.c + +@CHECK_TRUE@runtests_SOURCES = runtests.c \ +@CHECK_TRUE@ $(REC_MSET_TSUITE) \ +@CHECK_TRUE@ $(REC_COMMENT_TSUITE) \ +@CHECK_TRUE@ $(REC_FIELD_NAME_TSUITE) \ +@CHECK_TRUE@ $(REC_TYPE_TSUITE) \ +@CHECK_TRUE@ $(REC_TYPE_REG_TSUITE) \ +@CHECK_TRUE@ $(REC_FIELD_TSUITE) \ +@CHECK_TRUE@ $(REC_RECORD_TSUITE) \ +@CHECK_TRUE@ $(REC_FEX_TSUITE) \ +@CHECK_TRUE@ $(REC_PARSER_TSUITE) \ +@CHECK_TRUE@ $(REC_WRITER_TSUITE) \ +@CHECK_TRUE@ $(REC_SEX_TSUITE) + +@CHECK_TRUE@AM_CPPFLAGS = -I$(top_srcdir)/src \ +@CHECK_TRUE@ -I$(top_srcdir)/torture + +@CHECK_TRUE@runtests_CFLAGS = $(CHECK_CFLAGS) +@CHECK_TRUE@runtests_LDADD = $(CHECK_LIBS) ../src/librec.la +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu torture/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu torture/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +rec-mset/$(am__dirstamp): + @$(MKDIR_P) rec-mset + @: > rec-mset/$(am__dirstamp) +rec-mset/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-mset/$(DEPDIR) + @: > rec-mset/$(DEPDIR)/$(am__dirstamp) +rec-mset/runtests-rec-mset-new.$(OBJEXT): rec-mset/$(am__dirstamp) \ + rec-mset/$(DEPDIR)/$(am__dirstamp) +rec-mset/runtests-rec-mset-dup.$(OBJEXT): rec-mset/$(am__dirstamp) \ + rec-mset/$(DEPDIR)/$(am__dirstamp) +rec-mset/runtests-rec-mset-type-p.$(OBJEXT): rec-mset/$(am__dirstamp) \ + rec-mset/$(DEPDIR)/$(am__dirstamp) +rec-mset/runtests-rec-mset-register-type.$(OBJEXT): \ + rec-mset/$(am__dirstamp) rec-mset/$(DEPDIR)/$(am__dirstamp) +rec-mset/runtests-rec-mset-count.$(OBJEXT): rec-mset/$(am__dirstamp) \ + rec-mset/$(DEPDIR)/$(am__dirstamp) +rec-mset/runtests-rec-mset-get-at.$(OBJEXT): rec-mset/$(am__dirstamp) \ + rec-mset/$(DEPDIR)/$(am__dirstamp) +rec-mset/runtests-tsuite-rec-mset.$(OBJEXT): rec-mset/$(am__dirstamp) \ + rec-mset/$(DEPDIR)/$(am__dirstamp) +rec-comment/$(am__dirstamp): + @$(MKDIR_P) rec-comment + @: > rec-comment/$(am__dirstamp) +rec-comment/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-comment/$(DEPDIR) + @: > rec-comment/$(DEPDIR)/$(am__dirstamp) +rec-comment/runtests-rec-comment-new.$(OBJEXT): \ + rec-comment/$(am__dirstamp) \ + rec-comment/$(DEPDIR)/$(am__dirstamp) +rec-comment/runtests-rec-comment-destroy.$(OBJEXT): \ + rec-comment/$(am__dirstamp) \ + rec-comment/$(DEPDIR)/$(am__dirstamp) +rec-comment/runtests-rec-comment-dup.$(OBJEXT): \ + rec-comment/$(am__dirstamp) \ + rec-comment/$(DEPDIR)/$(am__dirstamp) +rec-comment/runtests-rec-comment-text.$(OBJEXT): \ + rec-comment/$(am__dirstamp) \ + rec-comment/$(DEPDIR)/$(am__dirstamp) +rec-comment/runtests-rec-comment-set-text.$(OBJEXT): \ + rec-comment/$(am__dirstamp) \ + rec-comment/$(DEPDIR)/$(am__dirstamp) +rec-comment/runtests-rec-comment-equal-p.$(OBJEXT): \ + rec-comment/$(am__dirstamp) \ + rec-comment/$(DEPDIR)/$(am__dirstamp) +rec-comment/runtests-tsuite-rec-comment.$(OBJEXT): \ + rec-comment/$(am__dirstamp) \ + rec-comment/$(DEPDIR)/$(am__dirstamp) +rec-field-name/$(am__dirstamp): + @$(MKDIR_P) rec-field-name + @: > rec-field-name/$(am__dirstamp) +rec-field-name/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-field-name/$(DEPDIR) + @: > rec-field-name/$(DEPDIR)/$(am__dirstamp) +rec-field-name/runtests-rec-field-name-equal-p.$(OBJEXT): \ + rec-field-name/$(am__dirstamp) \ + rec-field-name/$(DEPDIR)/$(am__dirstamp) +rec-field-name/runtests-rec-field-name-p.$(OBJEXT): \ + rec-field-name/$(am__dirstamp) \ + rec-field-name/$(DEPDIR)/$(am__dirstamp) +rec-field-name/runtests-rec-field-name-normalise.$(OBJEXT): \ + rec-field-name/$(am__dirstamp) \ + rec-field-name/$(DEPDIR)/$(am__dirstamp) +rec-field-name/runtests-tsuite-rec-field-name.$(OBJEXT): \ + rec-field-name/$(am__dirstamp) \ + rec-field-name/$(DEPDIR)/$(am__dirstamp) +rec-type/$(am__dirstamp): + @$(MKDIR_P) rec-type + @: > rec-type/$(am__dirstamp) +rec-type/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-type/$(DEPDIR) + @: > rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-new.$(OBJEXT): rec-type/$(am__dirstamp) \ + rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-destroy.$(OBJEXT): \ + rec-type/$(am__dirstamp) rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-descr-p.$(OBJEXT): \ + rec-type/$(am__dirstamp) rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-kind.$(OBJEXT): rec-type/$(am__dirstamp) \ + rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-kind-str.$(OBJEXT): \ + rec-type/$(am__dirstamp) rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-equal-p.$(OBJEXT): \ + rec-type/$(am__dirstamp) rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-check.$(OBJEXT): rec-type/$(am__dirstamp) \ + rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-name.$(OBJEXT): rec-type/$(am__dirstamp) \ + rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-rec-type-set-name.$(OBJEXT): \ + rec-type/$(am__dirstamp) rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type/runtests-tsuite-rec-type.$(OBJEXT): rec-type/$(am__dirstamp) \ + rec-type/$(DEPDIR)/$(am__dirstamp) +rec-type-reg/$(am__dirstamp): + @$(MKDIR_P) rec-type-reg + @: > rec-type-reg/$(am__dirstamp) +rec-type-reg/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-type-reg/$(DEPDIR) + @: > rec-type-reg/$(DEPDIR)/$(am__dirstamp) +rec-type-reg/runtests-rec-type-reg-new.$(OBJEXT): \ + rec-type-reg/$(am__dirstamp) \ + rec-type-reg/$(DEPDIR)/$(am__dirstamp) +rec-type-reg/runtests-rec-type-reg-destroy.$(OBJEXT): \ + rec-type-reg/$(am__dirstamp) \ + rec-type-reg/$(DEPDIR)/$(am__dirstamp) +rec-type-reg/runtests-tsuite-rec-type-reg.$(OBJEXT): \ + rec-type-reg/$(am__dirstamp) \ + rec-type-reg/$(DEPDIR)/$(am__dirstamp) +rec-type-reg/runtests-rec-type-reg-get.$(OBJEXT): \ + rec-type-reg/$(am__dirstamp) \ + rec-type-reg/$(DEPDIR)/$(am__dirstamp) +rec-field/$(am__dirstamp): + @$(MKDIR_P) rec-field + @: > rec-field/$(am__dirstamp) +rec-field/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-field/$(DEPDIR) + @: > rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-name.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-set-name.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-value.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-set-value.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-dup.$(OBJEXT): rec-field/$(am__dirstamp) \ + rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-new.$(OBJEXT): rec-field/$(am__dirstamp) \ + rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-destroy.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-equal-p.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-source.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-set-source.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-location.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-location-str.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-set-location.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-char-location.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-char-location-str.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-set-char-location.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-rec-field-to-comment.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-field/runtests-tsuite-rec-field.$(OBJEXT): \ + rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) +rec-record/$(am__dirstamp): + @$(MKDIR_P) rec-record + @: > rec-record/$(am__dirstamp) +rec-record/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-record/$(DEPDIR) + @: > rec-record/$(DEPDIR)/$(am__dirstamp) +rec-record/runtests-tsuite-rec-record.$(OBJEXT): \ + rec-record/$(am__dirstamp) \ + rec-record/$(DEPDIR)/$(am__dirstamp) +rec-fex/$(am__dirstamp): + @$(MKDIR_P) rec-fex + @: > rec-fex/$(am__dirstamp) +rec-fex/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-fex/$(DEPDIR) + @: > rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-new.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-destroy.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-check.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-sort.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-size.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-get.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-elem-field-name.$(OBJEXT): \ + rec-fex/$(am__dirstamp) rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-elem-rewrite-to.$(OBJEXT): \ + rec-fex/$(am__dirstamp) rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-elem-min.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-elem-max.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-rec-fex-str.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-fex/runtests-tsuite-rec-fex.$(OBJEXT): rec-fex/$(am__dirstamp) \ + rec-fex/$(DEPDIR)/$(am__dirstamp) +rec-parser/$(am__dirstamp): + @$(MKDIR_P) rec-parser + @: > rec-parser/$(am__dirstamp) +rec-parser/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-parser/$(DEPDIR) + @: > rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-new.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-new-str.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-new-mem.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-destroy.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parse-field-name-str.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parse-field-name.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parse-field.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parse-record.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parse-record-str.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parse-rset.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parse-db.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-eof.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-error.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-reset.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-perror.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-rec-parser-seek-mem.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-parser/runtests-tsuite-rec-parser.$(OBJEXT): \ + rec-parser/$(am__dirstamp) \ + rec-parser/$(DEPDIR)/$(am__dirstamp) +rec-writer/$(am__dirstamp): + @$(MKDIR_P) rec-writer + @: > rec-writer/$(am__dirstamp) +rec-writer/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-writer/$(DEPDIR) + @: > rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-comment.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-field.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-field-name.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-writer-destroy.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-record.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-writer-new.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-rset.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-db.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-field-name-str.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-field-str.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-rec-write-comment-str.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-writer/runtests-tsuite-rec-writer.$(OBJEXT): \ + rec-writer/$(am__dirstamp) \ + rec-writer/$(DEPDIR)/$(am__dirstamp) +rec-sex/$(am__dirstamp): + @$(MKDIR_P) rec-sex + @: > rec-sex/$(am__dirstamp) +rec-sex/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rec-sex/$(DEPDIR) + @: > rec-sex/$(DEPDIR)/$(am__dirstamp) +rec-sex/runtests-rec-sex-new.$(OBJEXT): rec-sex/$(am__dirstamp) \ + rec-sex/$(DEPDIR)/$(am__dirstamp) +rec-sex/runtests-rec-sex-destroy.$(OBJEXT): rec-sex/$(am__dirstamp) \ + rec-sex/$(DEPDIR)/$(am__dirstamp) +rec-sex/runtests-rec-sex-compile.$(OBJEXT): rec-sex/$(am__dirstamp) \ + rec-sex/$(DEPDIR)/$(am__dirstamp) +rec-sex/runtests-rec-sex-eval.$(OBJEXT): rec-sex/$(am__dirstamp) \ + rec-sex/$(DEPDIR)/$(am__dirstamp) +rec-sex/runtests-tsuite-rec-sex.$(OBJEXT): rec-sex/$(am__dirstamp) \ + rec-sex/$(DEPDIR)/$(am__dirstamp) + +runtests$(EXEEXT): $(runtests_OBJECTS) $(runtests_DEPENDENCIES) $(EXTRA_runtests_DEPENDENCIES) + @rm -f runtests$(EXEEXT) + $(AM_V_CCLD)$(runtests_LINK) $(runtests_OBJECTS) $(runtests_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f rec-comment/*.$(OBJEXT) + -rm -f rec-fex/*.$(OBJEXT) + -rm -f rec-field-name/*.$(OBJEXT) + -rm -f rec-field/*.$(OBJEXT) + -rm -f rec-mset/*.$(OBJEXT) + -rm -f rec-parser/*.$(OBJEXT) + -rm -f rec-record/*.$(OBJEXT) + -rm -f rec-sex/*.$(OBJEXT) + -rm -f rec-type-reg/*.$(OBJEXT) + -rm -f rec-type/*.$(OBJEXT) + -rm -f rec-writer/*.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runtests-runtests.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-comment/$(DEPDIR)/runtests-rec-comment-new.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-comment/$(DEPDIR)/runtests-rec-comment-text.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-check.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-get.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-new.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-size.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-str.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-char-location.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-destroy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-dup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-location-str.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-location.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-name.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-new.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-set-location.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-set-name.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-set-source.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-set-value.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-source.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-value.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-mset/$(DEPDIR)/runtests-rec-mset-count.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-mset/$(DEPDIR)/runtests-rec-mset-new.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parse-db.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parse-field.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parse-record.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-error.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-new.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-sex/$(DEPDIR)/runtests-rec-sex-new.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-check.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-destroy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-kind.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-name.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-new.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-set-name.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-comment.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-db.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-field.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-record.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-rset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-writer-new.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +runtests-runtests.o: runtests.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT runtests-runtests.o -MD -MP -MF $(DEPDIR)/runtests-runtests.Tpo -c -o runtests-runtests.o `test -f 'runtests.c' || echo '$(srcdir)/'`runtests.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/runtests-runtests.Tpo $(DEPDIR)/runtests-runtests.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='runtests.c' object='runtests-runtests.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o runtests-runtests.o `test -f 'runtests.c' || echo '$(srcdir)/'`runtests.c + +runtests-runtests.obj: runtests.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT runtests-runtests.obj -MD -MP -MF $(DEPDIR)/runtests-runtests.Tpo -c -o runtests-runtests.obj `if test -f 'runtests.c'; then $(CYGPATH_W) 'runtests.c'; else $(CYGPATH_W) '$(srcdir)/runtests.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/runtests-runtests.Tpo $(DEPDIR)/runtests-runtests.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='runtests.c' object='runtests-runtests.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o runtests-runtests.obj `if test -f 'runtests.c'; then $(CYGPATH_W) 'runtests.c'; else $(CYGPATH_W) '$(srcdir)/runtests.c'; fi` + +rec-mset/runtests-rec-mset-new.o: rec-mset/rec-mset-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-new.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-new.Tpo -c -o rec-mset/runtests-rec-mset-new.o `test -f 'rec-mset/rec-mset-new.c' || echo '$(srcdir)/'`rec-mset/rec-mset-new.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-new.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-new.c' object='rec-mset/runtests-rec-mset-new.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-new.o `test -f 'rec-mset/rec-mset-new.c' || echo '$(srcdir)/'`rec-mset/rec-mset-new.c + +rec-mset/runtests-rec-mset-new.obj: rec-mset/rec-mset-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-new.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-new.Tpo -c -o rec-mset/runtests-rec-mset-new.obj `if test -f 'rec-mset/rec-mset-new.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-new.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-new.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-new.c' object='rec-mset/runtests-rec-mset-new.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-new.obj `if test -f 'rec-mset/rec-mset-new.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-new.c'; fi` + +rec-mset/runtests-rec-mset-dup.o: rec-mset/rec-mset-dup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-dup.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Tpo -c -o rec-mset/runtests-rec-mset-dup.o `test -f 'rec-mset/rec-mset-dup.c' || echo '$(srcdir)/'`rec-mset/rec-mset-dup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-dup.c' object='rec-mset/runtests-rec-mset-dup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-dup.o `test -f 'rec-mset/rec-mset-dup.c' || echo '$(srcdir)/'`rec-mset/rec-mset-dup.c + +rec-mset/runtests-rec-mset-dup.obj: rec-mset/rec-mset-dup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-dup.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Tpo -c -o rec-mset/runtests-rec-mset-dup.obj `if test -f 'rec-mset/rec-mset-dup.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-dup.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-dup.c' object='rec-mset/runtests-rec-mset-dup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-dup.obj `if test -f 'rec-mset/rec-mset-dup.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-dup.c'; fi` + +rec-mset/runtests-rec-mset-type-p.o: rec-mset/rec-mset-type-p.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-type-p.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Tpo -c -o rec-mset/runtests-rec-mset-type-p.o `test -f 'rec-mset/rec-mset-type-p.c' || echo '$(srcdir)/'`rec-mset/rec-mset-type-p.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-type-p.c' object='rec-mset/runtests-rec-mset-type-p.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-type-p.o `test -f 'rec-mset/rec-mset-type-p.c' || echo '$(srcdir)/'`rec-mset/rec-mset-type-p.c + +rec-mset/runtests-rec-mset-type-p.obj: rec-mset/rec-mset-type-p.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-type-p.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Tpo -c -o rec-mset/runtests-rec-mset-type-p.obj `if test -f 'rec-mset/rec-mset-type-p.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-type-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-type-p.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-type-p.c' object='rec-mset/runtests-rec-mset-type-p.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-type-p.obj `if test -f 'rec-mset/rec-mset-type-p.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-type-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-type-p.c'; fi` + +rec-mset/runtests-rec-mset-register-type.o: rec-mset/rec-mset-register-type.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-register-type.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Tpo -c -o rec-mset/runtests-rec-mset-register-type.o `test -f 'rec-mset/rec-mset-register-type.c' || echo '$(srcdir)/'`rec-mset/rec-mset-register-type.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-register-type.c' object='rec-mset/runtests-rec-mset-register-type.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-register-type.o `test -f 'rec-mset/rec-mset-register-type.c' || echo '$(srcdir)/'`rec-mset/rec-mset-register-type.c + +rec-mset/runtests-rec-mset-register-type.obj: rec-mset/rec-mset-register-type.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-register-type.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Tpo -c -o rec-mset/runtests-rec-mset-register-type.obj `if test -f 'rec-mset/rec-mset-register-type.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-register-type.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-register-type.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-register-type.c' object='rec-mset/runtests-rec-mset-register-type.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-register-type.obj `if test -f 'rec-mset/rec-mset-register-type.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-register-type.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-register-type.c'; fi` + +rec-mset/runtests-rec-mset-count.o: rec-mset/rec-mset-count.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-count.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-count.Tpo -c -o rec-mset/runtests-rec-mset-count.o `test -f 'rec-mset/rec-mset-count.c' || echo '$(srcdir)/'`rec-mset/rec-mset-count.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-count.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-count.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-count.c' object='rec-mset/runtests-rec-mset-count.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-count.o `test -f 'rec-mset/rec-mset-count.c' || echo '$(srcdir)/'`rec-mset/rec-mset-count.c + +rec-mset/runtests-rec-mset-count.obj: rec-mset/rec-mset-count.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-count.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-count.Tpo -c -o rec-mset/runtests-rec-mset-count.obj `if test -f 'rec-mset/rec-mset-count.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-count.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-count.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-count.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-count.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-count.c' object='rec-mset/runtests-rec-mset-count.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-count.obj `if test -f 'rec-mset/rec-mset-count.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-count.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-count.c'; fi` + +rec-mset/runtests-rec-mset-get-at.o: rec-mset/rec-mset-get-at.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-get-at.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Tpo -c -o rec-mset/runtests-rec-mset-get-at.o `test -f 'rec-mset/rec-mset-get-at.c' || echo '$(srcdir)/'`rec-mset/rec-mset-get-at.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-get-at.c' object='rec-mset/runtests-rec-mset-get-at.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-get-at.o `test -f 'rec-mset/rec-mset-get-at.c' || echo '$(srcdir)/'`rec-mset/rec-mset-get-at.c + +rec-mset/runtests-rec-mset-get-at.obj: rec-mset/rec-mset-get-at.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-get-at.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Tpo -c -o rec-mset/runtests-rec-mset-get-at.obj `if test -f 'rec-mset/rec-mset-get-at.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-get-at.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-get-at.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-get-at.c' object='rec-mset/runtests-rec-mset-get-at.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-get-at.obj `if test -f 'rec-mset/rec-mset-get-at.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-get-at.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-get-at.c'; fi` + +rec-mset/runtests-tsuite-rec-mset.o: rec-mset/tsuite-rec-mset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-tsuite-rec-mset.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Tpo -c -o rec-mset/runtests-tsuite-rec-mset.o `test -f 'rec-mset/tsuite-rec-mset.c' || echo '$(srcdir)/'`rec-mset/tsuite-rec-mset.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Tpo rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/tsuite-rec-mset.c' object='rec-mset/runtests-tsuite-rec-mset.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-tsuite-rec-mset.o `test -f 'rec-mset/tsuite-rec-mset.c' || echo '$(srcdir)/'`rec-mset/tsuite-rec-mset.c + +rec-mset/runtests-tsuite-rec-mset.obj: rec-mset/tsuite-rec-mset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-tsuite-rec-mset.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Tpo -c -o rec-mset/runtests-tsuite-rec-mset.obj `if test -f 'rec-mset/tsuite-rec-mset.c'; then $(CYGPATH_W) 'rec-mset/tsuite-rec-mset.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/tsuite-rec-mset.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Tpo rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/tsuite-rec-mset.c' object='rec-mset/runtests-tsuite-rec-mset.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-tsuite-rec-mset.obj `if test -f 'rec-mset/tsuite-rec-mset.c'; then $(CYGPATH_W) 'rec-mset/tsuite-rec-mset.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/tsuite-rec-mset.c'; fi` + +rec-comment/runtests-rec-comment-new.o: rec-comment/rec-comment-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-new.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-new.Tpo -c -o rec-comment/runtests-rec-comment-new.o `test -f 'rec-comment/rec-comment-new.c' || echo '$(srcdir)/'`rec-comment/rec-comment-new.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-new.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-new.c' object='rec-comment/runtests-rec-comment-new.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-new.o `test -f 'rec-comment/rec-comment-new.c' || echo '$(srcdir)/'`rec-comment/rec-comment-new.c + +rec-comment/runtests-rec-comment-new.obj: rec-comment/rec-comment-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-new.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-new.Tpo -c -o rec-comment/runtests-rec-comment-new.obj `if test -f 'rec-comment/rec-comment-new.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-new.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-new.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-new.c' object='rec-comment/runtests-rec-comment-new.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-new.obj `if test -f 'rec-comment/rec-comment-new.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-new.c'; fi` + +rec-comment/runtests-rec-comment-destroy.o: rec-comment/rec-comment-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-destroy.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Tpo -c -o rec-comment/runtests-rec-comment-destroy.o `test -f 'rec-comment/rec-comment-destroy.c' || echo '$(srcdir)/'`rec-comment/rec-comment-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-destroy.c' object='rec-comment/runtests-rec-comment-destroy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-destroy.o `test -f 'rec-comment/rec-comment-destroy.c' || echo '$(srcdir)/'`rec-comment/rec-comment-destroy.c + +rec-comment/runtests-rec-comment-destroy.obj: rec-comment/rec-comment-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-destroy.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Tpo -c -o rec-comment/runtests-rec-comment-destroy.obj `if test -f 'rec-comment/rec-comment-destroy.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-destroy.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-destroy.c' object='rec-comment/runtests-rec-comment-destroy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-destroy.obj `if test -f 'rec-comment/rec-comment-destroy.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-destroy.c'; fi` + +rec-comment/runtests-rec-comment-dup.o: rec-comment/rec-comment-dup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-dup.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Tpo -c -o rec-comment/runtests-rec-comment-dup.o `test -f 'rec-comment/rec-comment-dup.c' || echo '$(srcdir)/'`rec-comment/rec-comment-dup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-dup.c' object='rec-comment/runtests-rec-comment-dup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-dup.o `test -f 'rec-comment/rec-comment-dup.c' || echo '$(srcdir)/'`rec-comment/rec-comment-dup.c + +rec-comment/runtests-rec-comment-dup.obj: rec-comment/rec-comment-dup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-dup.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Tpo -c -o rec-comment/runtests-rec-comment-dup.obj `if test -f 'rec-comment/rec-comment-dup.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-dup.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-dup.c' object='rec-comment/runtests-rec-comment-dup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-dup.obj `if test -f 'rec-comment/rec-comment-dup.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-dup.c'; fi` + +rec-comment/runtests-rec-comment-text.o: rec-comment/rec-comment-text.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-text.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-text.Tpo -c -o rec-comment/runtests-rec-comment-text.o `test -f 'rec-comment/rec-comment-text.c' || echo '$(srcdir)/'`rec-comment/rec-comment-text.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-text.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-text.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-text.c' object='rec-comment/runtests-rec-comment-text.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-text.o `test -f 'rec-comment/rec-comment-text.c' || echo '$(srcdir)/'`rec-comment/rec-comment-text.c + +rec-comment/runtests-rec-comment-text.obj: rec-comment/rec-comment-text.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-text.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-text.Tpo -c -o rec-comment/runtests-rec-comment-text.obj `if test -f 'rec-comment/rec-comment-text.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-text.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-text.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-text.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-text.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-text.c' object='rec-comment/runtests-rec-comment-text.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-text.obj `if test -f 'rec-comment/rec-comment-text.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-text.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-text.c'; fi` + +rec-comment/runtests-rec-comment-set-text.o: rec-comment/rec-comment-set-text.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-set-text.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Tpo -c -o rec-comment/runtests-rec-comment-set-text.o `test -f 'rec-comment/rec-comment-set-text.c' || echo '$(srcdir)/'`rec-comment/rec-comment-set-text.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-set-text.c' object='rec-comment/runtests-rec-comment-set-text.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-set-text.o `test -f 'rec-comment/rec-comment-set-text.c' || echo '$(srcdir)/'`rec-comment/rec-comment-set-text.c + +rec-comment/runtests-rec-comment-set-text.obj: rec-comment/rec-comment-set-text.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-set-text.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Tpo -c -o rec-comment/runtests-rec-comment-set-text.obj `if test -f 'rec-comment/rec-comment-set-text.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-set-text.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-set-text.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-set-text.c' object='rec-comment/runtests-rec-comment-set-text.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-set-text.obj `if test -f 'rec-comment/rec-comment-set-text.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-set-text.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-set-text.c'; fi` + +rec-comment/runtests-rec-comment-equal-p.o: rec-comment/rec-comment-equal-p.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-equal-p.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Tpo -c -o rec-comment/runtests-rec-comment-equal-p.o `test -f 'rec-comment/rec-comment-equal-p.c' || echo '$(srcdir)/'`rec-comment/rec-comment-equal-p.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-equal-p.c' object='rec-comment/runtests-rec-comment-equal-p.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-equal-p.o `test -f 'rec-comment/rec-comment-equal-p.c' || echo '$(srcdir)/'`rec-comment/rec-comment-equal-p.c + +rec-comment/runtests-rec-comment-equal-p.obj: rec-comment/rec-comment-equal-p.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-equal-p.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Tpo -c -o rec-comment/runtests-rec-comment-equal-p.obj `if test -f 'rec-comment/rec-comment-equal-p.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-equal-p.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-equal-p.c' object='rec-comment/runtests-rec-comment-equal-p.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-equal-p.obj `if test -f 'rec-comment/rec-comment-equal-p.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-equal-p.c'; fi` + +rec-comment/runtests-tsuite-rec-comment.o: rec-comment/tsuite-rec-comment.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-tsuite-rec-comment.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Tpo -c -o rec-comment/runtests-tsuite-rec-comment.o `test -f 'rec-comment/tsuite-rec-comment.c' || echo '$(srcdir)/'`rec-comment/tsuite-rec-comment.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Tpo rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/tsuite-rec-comment.c' object='rec-comment/runtests-tsuite-rec-comment.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-tsuite-rec-comment.o `test -f 'rec-comment/tsuite-rec-comment.c' || echo '$(srcdir)/'`rec-comment/tsuite-rec-comment.c + +rec-comment/runtests-tsuite-rec-comment.obj: rec-comment/tsuite-rec-comment.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-tsuite-rec-comment.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Tpo -c -o rec-comment/runtests-tsuite-rec-comment.obj `if test -f 'rec-comment/tsuite-rec-comment.c'; then $(CYGPATH_W) 'rec-comment/tsuite-rec-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/tsuite-rec-comment.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Tpo rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/tsuite-rec-comment.c' object='rec-comment/runtests-tsuite-rec-comment.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-tsuite-rec-comment.obj `if test -f 'rec-comment/tsuite-rec-comment.c'; then $(CYGPATH_W) 'rec-comment/tsuite-rec-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/tsuite-rec-comment.c'; fi` + +rec-field-name/runtests-rec-field-name-equal-p.o: rec-field-name/rec-field-name-equal-p.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-equal-p.o -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Tpo -c -o rec-field-name/runtests-rec-field-name-equal-p.o `test -f 'rec-field-name/rec-field-name-equal-p.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-equal-p.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field-name/rec-field-name-equal-p.c' object='rec-field-name/runtests-rec-field-name-equal-p.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-equal-p.o `test -f 'rec-field-name/rec-field-name-equal-p.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-equal-p.c + +rec-field-name/runtests-rec-field-name-equal-p.obj: rec-field-name/rec-field-name-equal-p.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-equal-p.obj -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Tpo -c -o rec-field-name/runtests-rec-field-name-equal-p.obj `if test -f 'rec-field-name/rec-field-name-equal-p.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-equal-p.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field-name/rec-field-name-equal-p.c' object='rec-field-name/runtests-rec-field-name-equal-p.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-equal-p.obj `if test -f 'rec-field-name/rec-field-name-equal-p.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-equal-p.c'; fi` + +rec-field-name/runtests-rec-field-name-p.o: rec-field-name/rec-field-name-p.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-p.o -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Tpo -c -o rec-field-name/runtests-rec-field-name-p.o `test -f 'rec-field-name/rec-field-name-p.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-p.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field-name/rec-field-name-p.c' object='rec-field-name/runtests-rec-field-name-p.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-p.o `test -f 'rec-field-name/rec-field-name-p.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-p.c + +rec-field-name/runtests-rec-field-name-p.obj: rec-field-name/rec-field-name-p.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-p.obj -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Tpo -c -o rec-field-name/runtests-rec-field-name-p.obj `if test -f 'rec-field-name/rec-field-name-p.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-p.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field-name/rec-field-name-p.c' object='rec-field-name/runtests-rec-field-name-p.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-p.obj `if test -f 'rec-field-name/rec-field-name-p.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-p.c'; fi` + +rec-field-name/runtests-rec-field-name-normalise.o: rec-field-name/rec-field-name-normalise.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-normalise.o -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Tpo -c -o rec-field-name/runtests-rec-field-name-normalise.o `test -f 'rec-field-name/rec-field-name-normalise.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-normalise.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field-name/rec-field-name-normalise.c' object='rec-field-name/runtests-rec-field-name-normalise.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-normalise.o `test -f 'rec-field-name/rec-field-name-normalise.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-normalise.c + +rec-field-name/runtests-rec-field-name-normalise.obj: rec-field-name/rec-field-name-normalise.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-normalise.obj -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Tpo -c -o rec-field-name/runtests-rec-field-name-normalise.obj `if test -f 'rec-field-name/rec-field-name-normalise.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-normalise.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-normalise.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field-name/rec-field-name-normalise.c' object='rec-field-name/runtests-rec-field-name-normalise.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-normalise.obj `if test -f 'rec-field-name/rec-field-name-normalise.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-normalise.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-normalise.c'; fi` + +rec-field-name/runtests-tsuite-rec-field-name.o: rec-field-name/tsuite-rec-field-name.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-tsuite-rec-field-name.o -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Tpo -c -o rec-field-name/runtests-tsuite-rec-field-name.o `test -f 'rec-field-name/tsuite-rec-field-name.c' || echo '$(srcdir)/'`rec-field-name/tsuite-rec-field-name.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Tpo rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field-name/tsuite-rec-field-name.c' object='rec-field-name/runtests-tsuite-rec-field-name.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-tsuite-rec-field-name.o `test -f 'rec-field-name/tsuite-rec-field-name.c' || echo '$(srcdir)/'`rec-field-name/tsuite-rec-field-name.c + +rec-field-name/runtests-tsuite-rec-field-name.obj: rec-field-name/tsuite-rec-field-name.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-tsuite-rec-field-name.obj -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Tpo -c -o rec-field-name/runtests-tsuite-rec-field-name.obj `if test -f 'rec-field-name/tsuite-rec-field-name.c'; then $(CYGPATH_W) 'rec-field-name/tsuite-rec-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/tsuite-rec-field-name.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Tpo rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field-name/tsuite-rec-field-name.c' object='rec-field-name/runtests-tsuite-rec-field-name.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-tsuite-rec-field-name.obj `if test -f 'rec-field-name/tsuite-rec-field-name.c'; then $(CYGPATH_W) 'rec-field-name/tsuite-rec-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/tsuite-rec-field-name.c'; fi` + +rec-type/runtests-rec-type-new.o: rec-type/rec-type-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-new.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-new.Tpo -c -o rec-type/runtests-rec-type-new.o `test -f 'rec-type/rec-type-new.c' || echo '$(srcdir)/'`rec-type/rec-type-new.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-new.Tpo rec-type/$(DEPDIR)/runtests-rec-type-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-new.c' object='rec-type/runtests-rec-type-new.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-new.o `test -f 'rec-type/rec-type-new.c' || echo '$(srcdir)/'`rec-type/rec-type-new.c + +rec-type/runtests-rec-type-new.obj: rec-type/rec-type-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-new.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-new.Tpo -c -o rec-type/runtests-rec-type-new.obj `if test -f 'rec-type/rec-type-new.c'; then $(CYGPATH_W) 'rec-type/rec-type-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-new.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-new.Tpo rec-type/$(DEPDIR)/runtests-rec-type-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-new.c' object='rec-type/runtests-rec-type-new.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-new.obj `if test -f 'rec-type/rec-type-new.c'; then $(CYGPATH_W) 'rec-type/rec-type-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-new.c'; fi` + +rec-type/runtests-rec-type-destroy.o: rec-type/rec-type-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-destroy.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-destroy.Tpo -c -o rec-type/runtests-rec-type-destroy.o `test -f 'rec-type/rec-type-destroy.c' || echo '$(srcdir)/'`rec-type/rec-type-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-destroy.Tpo rec-type/$(DEPDIR)/runtests-rec-type-destroy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-destroy.c' object='rec-type/runtests-rec-type-destroy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-destroy.o `test -f 'rec-type/rec-type-destroy.c' || echo '$(srcdir)/'`rec-type/rec-type-destroy.c + +rec-type/runtests-rec-type-destroy.obj: rec-type/rec-type-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-destroy.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-destroy.Tpo -c -o rec-type/runtests-rec-type-destroy.obj `if test -f 'rec-type/rec-type-destroy.c'; then $(CYGPATH_W) 'rec-type/rec-type-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-destroy.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-destroy.Tpo rec-type/$(DEPDIR)/runtests-rec-type-destroy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-destroy.c' object='rec-type/runtests-rec-type-destroy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-destroy.obj `if test -f 'rec-type/rec-type-destroy.c'; then $(CYGPATH_W) 'rec-type/rec-type-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-destroy.c'; fi` + +rec-type/runtests-rec-type-descr-p.o: rec-type/rec-type-descr-p.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-descr-p.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Tpo -c -o rec-type/runtests-rec-type-descr-p.o `test -f 'rec-type/rec-type-descr-p.c' || echo '$(srcdir)/'`rec-type/rec-type-descr-p.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Tpo rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-descr-p.c' object='rec-type/runtests-rec-type-descr-p.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-descr-p.o `test -f 'rec-type/rec-type-descr-p.c' || echo '$(srcdir)/'`rec-type/rec-type-descr-p.c + +rec-type/runtests-rec-type-descr-p.obj: rec-type/rec-type-descr-p.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-descr-p.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Tpo -c -o rec-type/runtests-rec-type-descr-p.obj `if test -f 'rec-type/rec-type-descr-p.c'; then $(CYGPATH_W) 'rec-type/rec-type-descr-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-descr-p.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Tpo rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-descr-p.c' object='rec-type/runtests-rec-type-descr-p.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-descr-p.obj `if test -f 'rec-type/rec-type-descr-p.c'; then $(CYGPATH_W) 'rec-type/rec-type-descr-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-descr-p.c'; fi` + +rec-type/runtests-rec-type-kind.o: rec-type/rec-type-kind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-kind.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-kind.Tpo -c -o rec-type/runtests-rec-type-kind.o `test -f 'rec-type/rec-type-kind.c' || echo '$(srcdir)/'`rec-type/rec-type-kind.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-kind.Tpo rec-type/$(DEPDIR)/runtests-rec-type-kind.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-kind.c' object='rec-type/runtests-rec-type-kind.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-kind.o `test -f 'rec-type/rec-type-kind.c' || echo '$(srcdir)/'`rec-type/rec-type-kind.c + +rec-type/runtests-rec-type-kind.obj: rec-type/rec-type-kind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-kind.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-kind.Tpo -c -o rec-type/runtests-rec-type-kind.obj `if test -f 'rec-type/rec-type-kind.c'; then $(CYGPATH_W) 'rec-type/rec-type-kind.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-kind.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-kind.Tpo rec-type/$(DEPDIR)/runtests-rec-type-kind.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-kind.c' object='rec-type/runtests-rec-type-kind.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-kind.obj `if test -f 'rec-type/rec-type-kind.c'; then $(CYGPATH_W) 'rec-type/rec-type-kind.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-kind.c'; fi` + +rec-type/runtests-rec-type-kind-str.o: rec-type/rec-type-kind-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-kind-str.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Tpo -c -o rec-type/runtests-rec-type-kind-str.o `test -f 'rec-type/rec-type-kind-str.c' || echo '$(srcdir)/'`rec-type/rec-type-kind-str.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Tpo rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-kind-str.c' object='rec-type/runtests-rec-type-kind-str.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-kind-str.o `test -f 'rec-type/rec-type-kind-str.c' || echo '$(srcdir)/'`rec-type/rec-type-kind-str.c + +rec-type/runtests-rec-type-kind-str.obj: rec-type/rec-type-kind-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-kind-str.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Tpo -c -o rec-type/runtests-rec-type-kind-str.obj `if test -f 'rec-type/rec-type-kind-str.c'; then $(CYGPATH_W) 'rec-type/rec-type-kind-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-kind-str.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Tpo rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-kind-str.c' object='rec-type/runtests-rec-type-kind-str.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-kind-str.obj `if test -f 'rec-type/rec-type-kind-str.c'; then $(CYGPATH_W) 'rec-type/rec-type-kind-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-kind-str.c'; fi` + +rec-type/runtests-rec-type-equal-p.o: rec-type/rec-type-equal-p.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-equal-p.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Tpo -c -o rec-type/runtests-rec-type-equal-p.o `test -f 'rec-type/rec-type-equal-p.c' || echo '$(srcdir)/'`rec-type/rec-type-equal-p.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Tpo rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-equal-p.c' object='rec-type/runtests-rec-type-equal-p.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-equal-p.o `test -f 'rec-type/rec-type-equal-p.c' || echo '$(srcdir)/'`rec-type/rec-type-equal-p.c + +rec-type/runtests-rec-type-equal-p.obj: rec-type/rec-type-equal-p.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-equal-p.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Tpo -c -o rec-type/runtests-rec-type-equal-p.obj `if test -f 'rec-type/rec-type-equal-p.c'; then $(CYGPATH_W) 'rec-type/rec-type-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-equal-p.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Tpo rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-equal-p.c' object='rec-type/runtests-rec-type-equal-p.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-equal-p.obj `if test -f 'rec-type/rec-type-equal-p.c'; then $(CYGPATH_W) 'rec-type/rec-type-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-equal-p.c'; fi` + +rec-type/runtests-rec-type-check.o: rec-type/rec-type-check.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-check.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-check.Tpo -c -o rec-type/runtests-rec-type-check.o `test -f 'rec-type/rec-type-check.c' || echo '$(srcdir)/'`rec-type/rec-type-check.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-check.Tpo rec-type/$(DEPDIR)/runtests-rec-type-check.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-check.c' object='rec-type/runtests-rec-type-check.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-check.o `test -f 'rec-type/rec-type-check.c' || echo '$(srcdir)/'`rec-type/rec-type-check.c + +rec-type/runtests-rec-type-check.obj: rec-type/rec-type-check.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-check.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-check.Tpo -c -o rec-type/runtests-rec-type-check.obj `if test -f 'rec-type/rec-type-check.c'; then $(CYGPATH_W) 'rec-type/rec-type-check.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-check.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-check.Tpo rec-type/$(DEPDIR)/runtests-rec-type-check.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-check.c' object='rec-type/runtests-rec-type-check.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-check.obj `if test -f 'rec-type/rec-type-check.c'; then $(CYGPATH_W) 'rec-type/rec-type-check.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-check.c'; fi` + +rec-type/runtests-rec-type-name.o: rec-type/rec-type-name.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-name.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-name.Tpo -c -o rec-type/runtests-rec-type-name.o `test -f 'rec-type/rec-type-name.c' || echo '$(srcdir)/'`rec-type/rec-type-name.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-name.Tpo rec-type/$(DEPDIR)/runtests-rec-type-name.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-name.c' object='rec-type/runtests-rec-type-name.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-name.o `test -f 'rec-type/rec-type-name.c' || echo '$(srcdir)/'`rec-type/rec-type-name.c + +rec-type/runtests-rec-type-name.obj: rec-type/rec-type-name.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-name.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-name.Tpo -c -o rec-type/runtests-rec-type-name.obj `if test -f 'rec-type/rec-type-name.c'; then $(CYGPATH_W) 'rec-type/rec-type-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-name.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-name.Tpo rec-type/$(DEPDIR)/runtests-rec-type-name.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-name.c' object='rec-type/runtests-rec-type-name.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-name.obj `if test -f 'rec-type/rec-type-name.c'; then $(CYGPATH_W) 'rec-type/rec-type-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-name.c'; fi` + +rec-type/runtests-rec-type-set-name.o: rec-type/rec-type-set-name.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-set-name.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-set-name.Tpo -c -o rec-type/runtests-rec-type-set-name.o `test -f 'rec-type/rec-type-set-name.c' || echo '$(srcdir)/'`rec-type/rec-type-set-name.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-set-name.Tpo rec-type/$(DEPDIR)/runtests-rec-type-set-name.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-set-name.c' object='rec-type/runtests-rec-type-set-name.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-set-name.o `test -f 'rec-type/rec-type-set-name.c' || echo '$(srcdir)/'`rec-type/rec-type-set-name.c + +rec-type/runtests-rec-type-set-name.obj: rec-type/rec-type-set-name.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-set-name.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-set-name.Tpo -c -o rec-type/runtests-rec-type-set-name.obj `if test -f 'rec-type/rec-type-set-name.c'; then $(CYGPATH_W) 'rec-type/rec-type-set-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-set-name.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-set-name.Tpo rec-type/$(DEPDIR)/runtests-rec-type-set-name.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-set-name.c' object='rec-type/runtests-rec-type-set-name.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-set-name.obj `if test -f 'rec-type/rec-type-set-name.c'; then $(CYGPATH_W) 'rec-type/rec-type-set-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-set-name.c'; fi` + +rec-type/runtests-tsuite-rec-type.o: rec-type/tsuite-rec-type.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-tsuite-rec-type.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Tpo -c -o rec-type/runtests-tsuite-rec-type.o `test -f 'rec-type/tsuite-rec-type.c' || echo '$(srcdir)/'`rec-type/tsuite-rec-type.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Tpo rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/tsuite-rec-type.c' object='rec-type/runtests-tsuite-rec-type.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-tsuite-rec-type.o `test -f 'rec-type/tsuite-rec-type.c' || echo '$(srcdir)/'`rec-type/tsuite-rec-type.c + +rec-type/runtests-tsuite-rec-type.obj: rec-type/tsuite-rec-type.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-tsuite-rec-type.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Tpo -c -o rec-type/runtests-tsuite-rec-type.obj `if test -f 'rec-type/tsuite-rec-type.c'; then $(CYGPATH_W) 'rec-type/tsuite-rec-type.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/tsuite-rec-type.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Tpo rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/tsuite-rec-type.c' object='rec-type/runtests-tsuite-rec-type.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-tsuite-rec-type.obj `if test -f 'rec-type/tsuite-rec-type.c'; then $(CYGPATH_W) 'rec-type/tsuite-rec-type.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/tsuite-rec-type.c'; fi` + +rec-type-reg/runtests-rec-type-reg-new.o: rec-type-reg/rec-type-reg-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-new.o -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Tpo -c -o rec-type-reg/runtests-rec-type-reg-new.o `test -f 'rec-type-reg/rec-type-reg-new.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-new.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type-reg/rec-type-reg-new.c' object='rec-type-reg/runtests-rec-type-reg-new.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-new.o `test -f 'rec-type-reg/rec-type-reg-new.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-new.c + +rec-type-reg/runtests-rec-type-reg-new.obj: rec-type-reg/rec-type-reg-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-new.obj -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Tpo -c -o rec-type-reg/runtests-rec-type-reg-new.obj `if test -f 'rec-type-reg/rec-type-reg-new.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-new.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type-reg/rec-type-reg-new.c' object='rec-type-reg/runtests-rec-type-reg-new.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-new.obj `if test -f 'rec-type-reg/rec-type-reg-new.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-new.c'; fi` + +rec-type-reg/runtests-rec-type-reg-destroy.o: rec-type-reg/rec-type-reg-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-destroy.o -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Tpo -c -o rec-type-reg/runtests-rec-type-reg-destroy.o `test -f 'rec-type-reg/rec-type-reg-destroy.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type-reg/rec-type-reg-destroy.c' object='rec-type-reg/runtests-rec-type-reg-destroy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-destroy.o `test -f 'rec-type-reg/rec-type-reg-destroy.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-destroy.c + +rec-type-reg/runtests-rec-type-reg-destroy.obj: rec-type-reg/rec-type-reg-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-destroy.obj -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Tpo -c -o rec-type-reg/runtests-rec-type-reg-destroy.obj `if test -f 'rec-type-reg/rec-type-reg-destroy.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-destroy.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type-reg/rec-type-reg-destroy.c' object='rec-type-reg/runtests-rec-type-reg-destroy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-destroy.obj `if test -f 'rec-type-reg/rec-type-reg-destroy.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-destroy.c'; fi` + +rec-type-reg/runtests-tsuite-rec-type-reg.o: rec-type-reg/tsuite-rec-type-reg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-tsuite-rec-type-reg.o -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Tpo -c -o rec-type-reg/runtests-tsuite-rec-type-reg.o `test -f 'rec-type-reg/tsuite-rec-type-reg.c' || echo '$(srcdir)/'`rec-type-reg/tsuite-rec-type-reg.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Tpo rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type-reg/tsuite-rec-type-reg.c' object='rec-type-reg/runtests-tsuite-rec-type-reg.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-tsuite-rec-type-reg.o `test -f 'rec-type-reg/tsuite-rec-type-reg.c' || echo '$(srcdir)/'`rec-type-reg/tsuite-rec-type-reg.c + +rec-type-reg/runtests-tsuite-rec-type-reg.obj: rec-type-reg/tsuite-rec-type-reg.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-tsuite-rec-type-reg.obj -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Tpo -c -o rec-type-reg/runtests-tsuite-rec-type-reg.obj `if test -f 'rec-type-reg/tsuite-rec-type-reg.c'; then $(CYGPATH_W) 'rec-type-reg/tsuite-rec-type-reg.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/tsuite-rec-type-reg.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Tpo rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type-reg/tsuite-rec-type-reg.c' object='rec-type-reg/runtests-tsuite-rec-type-reg.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-tsuite-rec-type-reg.obj `if test -f 'rec-type-reg/tsuite-rec-type-reg.c'; then $(CYGPATH_W) 'rec-type-reg/tsuite-rec-type-reg.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/tsuite-rec-type-reg.c'; fi` + +rec-type-reg/runtests-rec-type-reg-get.o: rec-type-reg/rec-type-reg-get.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-get.o -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Tpo -c -o rec-type-reg/runtests-rec-type-reg-get.o `test -f 'rec-type-reg/rec-type-reg-get.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-get.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type-reg/rec-type-reg-get.c' object='rec-type-reg/runtests-rec-type-reg-get.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-get.o `test -f 'rec-type-reg/rec-type-reg-get.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-get.c + +rec-type-reg/runtests-rec-type-reg-get.obj: rec-type-reg/rec-type-reg-get.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-get.obj -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Tpo -c -o rec-type-reg/runtests-rec-type-reg-get.obj `if test -f 'rec-type-reg/rec-type-reg-get.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-get.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-get.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type-reg/rec-type-reg-get.c' object='rec-type-reg/runtests-rec-type-reg-get.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-get.obj `if test -f 'rec-type-reg/rec-type-reg-get.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-get.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-get.c'; fi` + +rec-field/runtests-rec-field-name.o: rec-field/rec-field-name.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-name.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-name.Tpo -c -o rec-field/runtests-rec-field-name.o `test -f 'rec-field/rec-field-name.c' || echo '$(srcdir)/'`rec-field/rec-field-name.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-name.Tpo rec-field/$(DEPDIR)/runtests-rec-field-name.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-name.c' object='rec-field/runtests-rec-field-name.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-name.o `test -f 'rec-field/rec-field-name.c' || echo '$(srcdir)/'`rec-field/rec-field-name.c + +rec-field/runtests-rec-field-name.obj: rec-field/rec-field-name.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-name.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-name.Tpo -c -o rec-field/runtests-rec-field-name.obj `if test -f 'rec-field/rec-field-name.c'; then $(CYGPATH_W) 'rec-field/rec-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-name.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-name.Tpo rec-field/$(DEPDIR)/runtests-rec-field-name.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-name.c' object='rec-field/runtests-rec-field-name.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-name.obj `if test -f 'rec-field/rec-field-name.c'; then $(CYGPATH_W) 'rec-field/rec-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-name.c'; fi` + +rec-field/runtests-rec-field-set-name.o: rec-field/rec-field-set-name.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-name.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-name.Tpo -c -o rec-field/runtests-rec-field-set-name.o `test -f 'rec-field/rec-field-set-name.c' || echo '$(srcdir)/'`rec-field/rec-field-set-name.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-name.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-name.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-name.c' object='rec-field/runtests-rec-field-set-name.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-name.o `test -f 'rec-field/rec-field-set-name.c' || echo '$(srcdir)/'`rec-field/rec-field-set-name.c + +rec-field/runtests-rec-field-set-name.obj: rec-field/rec-field-set-name.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-name.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-name.Tpo -c -o rec-field/runtests-rec-field-set-name.obj `if test -f 'rec-field/rec-field-set-name.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-name.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-name.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-name.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-name.c' object='rec-field/runtests-rec-field-set-name.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-name.obj `if test -f 'rec-field/rec-field-set-name.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-name.c'; fi` + +rec-field/runtests-rec-field-value.o: rec-field/rec-field-value.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-value.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-value.Tpo -c -o rec-field/runtests-rec-field-value.o `test -f 'rec-field/rec-field-value.c' || echo '$(srcdir)/'`rec-field/rec-field-value.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-value.Tpo rec-field/$(DEPDIR)/runtests-rec-field-value.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-value.c' object='rec-field/runtests-rec-field-value.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-value.o `test -f 'rec-field/rec-field-value.c' || echo '$(srcdir)/'`rec-field/rec-field-value.c + +rec-field/runtests-rec-field-value.obj: rec-field/rec-field-value.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-value.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-value.Tpo -c -o rec-field/runtests-rec-field-value.obj `if test -f 'rec-field/rec-field-value.c'; then $(CYGPATH_W) 'rec-field/rec-field-value.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-value.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-value.Tpo rec-field/$(DEPDIR)/runtests-rec-field-value.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-value.c' object='rec-field/runtests-rec-field-value.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-value.obj `if test -f 'rec-field/rec-field-value.c'; then $(CYGPATH_W) 'rec-field/rec-field-value.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-value.c'; fi` + +rec-field/runtests-rec-field-set-value.o: rec-field/rec-field-set-value.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-value.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-value.Tpo -c -o rec-field/runtests-rec-field-set-value.o `test -f 'rec-field/rec-field-set-value.c' || echo '$(srcdir)/'`rec-field/rec-field-set-value.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-value.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-value.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-value.c' object='rec-field/runtests-rec-field-set-value.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-value.o `test -f 'rec-field/rec-field-set-value.c' || echo '$(srcdir)/'`rec-field/rec-field-set-value.c + +rec-field/runtests-rec-field-set-value.obj: rec-field/rec-field-set-value.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-value.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-value.Tpo -c -o rec-field/runtests-rec-field-set-value.obj `if test -f 'rec-field/rec-field-set-value.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-value.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-value.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-value.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-value.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-value.c' object='rec-field/runtests-rec-field-set-value.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-value.obj `if test -f 'rec-field/rec-field-set-value.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-value.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-value.c'; fi` + +rec-field/runtests-rec-field-dup.o: rec-field/rec-field-dup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-dup.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-dup.Tpo -c -o rec-field/runtests-rec-field-dup.o `test -f 'rec-field/rec-field-dup.c' || echo '$(srcdir)/'`rec-field/rec-field-dup.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-dup.Tpo rec-field/$(DEPDIR)/runtests-rec-field-dup.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-dup.c' object='rec-field/runtests-rec-field-dup.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-dup.o `test -f 'rec-field/rec-field-dup.c' || echo '$(srcdir)/'`rec-field/rec-field-dup.c + +rec-field/runtests-rec-field-dup.obj: rec-field/rec-field-dup.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-dup.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-dup.Tpo -c -o rec-field/runtests-rec-field-dup.obj `if test -f 'rec-field/rec-field-dup.c'; then $(CYGPATH_W) 'rec-field/rec-field-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-dup.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-dup.Tpo rec-field/$(DEPDIR)/runtests-rec-field-dup.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-dup.c' object='rec-field/runtests-rec-field-dup.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-dup.obj `if test -f 'rec-field/rec-field-dup.c'; then $(CYGPATH_W) 'rec-field/rec-field-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-dup.c'; fi` + +rec-field/runtests-rec-field-new.o: rec-field/rec-field-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-new.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-new.Tpo -c -o rec-field/runtests-rec-field-new.o `test -f 'rec-field/rec-field-new.c' || echo '$(srcdir)/'`rec-field/rec-field-new.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-new.Tpo rec-field/$(DEPDIR)/runtests-rec-field-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-new.c' object='rec-field/runtests-rec-field-new.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-new.o `test -f 'rec-field/rec-field-new.c' || echo '$(srcdir)/'`rec-field/rec-field-new.c + +rec-field/runtests-rec-field-new.obj: rec-field/rec-field-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-new.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-new.Tpo -c -o rec-field/runtests-rec-field-new.obj `if test -f 'rec-field/rec-field-new.c'; then $(CYGPATH_W) 'rec-field/rec-field-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-new.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-new.Tpo rec-field/$(DEPDIR)/runtests-rec-field-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-new.c' object='rec-field/runtests-rec-field-new.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-new.obj `if test -f 'rec-field/rec-field-new.c'; then $(CYGPATH_W) 'rec-field/rec-field-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-new.c'; fi` + +rec-field/runtests-rec-field-destroy.o: rec-field/rec-field-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-destroy.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-destroy.Tpo -c -o rec-field/runtests-rec-field-destroy.o `test -f 'rec-field/rec-field-destroy.c' || echo '$(srcdir)/'`rec-field/rec-field-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-destroy.Tpo rec-field/$(DEPDIR)/runtests-rec-field-destroy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-destroy.c' object='rec-field/runtests-rec-field-destroy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-destroy.o `test -f 'rec-field/rec-field-destroy.c' || echo '$(srcdir)/'`rec-field/rec-field-destroy.c + +rec-field/runtests-rec-field-destroy.obj: rec-field/rec-field-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-destroy.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-destroy.Tpo -c -o rec-field/runtests-rec-field-destroy.obj `if test -f 'rec-field/rec-field-destroy.c'; then $(CYGPATH_W) 'rec-field/rec-field-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-destroy.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-destroy.Tpo rec-field/$(DEPDIR)/runtests-rec-field-destroy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-destroy.c' object='rec-field/runtests-rec-field-destroy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-destroy.obj `if test -f 'rec-field/rec-field-destroy.c'; then $(CYGPATH_W) 'rec-field/rec-field-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-destroy.c'; fi` + +rec-field/runtests-rec-field-equal-p.o: rec-field/rec-field-equal-p.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-equal-p.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Tpo -c -o rec-field/runtests-rec-field-equal-p.o `test -f 'rec-field/rec-field-equal-p.c' || echo '$(srcdir)/'`rec-field/rec-field-equal-p.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Tpo rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-equal-p.c' object='rec-field/runtests-rec-field-equal-p.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-equal-p.o `test -f 'rec-field/rec-field-equal-p.c' || echo '$(srcdir)/'`rec-field/rec-field-equal-p.c + +rec-field/runtests-rec-field-equal-p.obj: rec-field/rec-field-equal-p.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-equal-p.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Tpo -c -o rec-field/runtests-rec-field-equal-p.obj `if test -f 'rec-field/rec-field-equal-p.c'; then $(CYGPATH_W) 'rec-field/rec-field-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-equal-p.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Tpo rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-equal-p.c' object='rec-field/runtests-rec-field-equal-p.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-equal-p.obj `if test -f 'rec-field/rec-field-equal-p.c'; then $(CYGPATH_W) 'rec-field/rec-field-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-equal-p.c'; fi` + +rec-field/runtests-rec-field-source.o: rec-field/rec-field-source.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-source.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-source.Tpo -c -o rec-field/runtests-rec-field-source.o `test -f 'rec-field/rec-field-source.c' || echo '$(srcdir)/'`rec-field/rec-field-source.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-source.Tpo rec-field/$(DEPDIR)/runtests-rec-field-source.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-source.c' object='rec-field/runtests-rec-field-source.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-source.o `test -f 'rec-field/rec-field-source.c' || echo '$(srcdir)/'`rec-field/rec-field-source.c + +rec-field/runtests-rec-field-source.obj: rec-field/rec-field-source.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-source.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-source.Tpo -c -o rec-field/runtests-rec-field-source.obj `if test -f 'rec-field/rec-field-source.c'; then $(CYGPATH_W) 'rec-field/rec-field-source.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-source.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-source.Tpo rec-field/$(DEPDIR)/runtests-rec-field-source.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-source.c' object='rec-field/runtests-rec-field-source.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-source.obj `if test -f 'rec-field/rec-field-source.c'; then $(CYGPATH_W) 'rec-field/rec-field-source.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-source.c'; fi` + +rec-field/runtests-rec-field-set-source.o: rec-field/rec-field-set-source.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-source.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-source.Tpo -c -o rec-field/runtests-rec-field-set-source.o `test -f 'rec-field/rec-field-set-source.c' || echo '$(srcdir)/'`rec-field/rec-field-set-source.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-source.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-source.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-source.c' object='rec-field/runtests-rec-field-set-source.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-source.o `test -f 'rec-field/rec-field-set-source.c' || echo '$(srcdir)/'`rec-field/rec-field-set-source.c + +rec-field/runtests-rec-field-set-source.obj: rec-field/rec-field-set-source.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-source.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-source.Tpo -c -o rec-field/runtests-rec-field-set-source.obj `if test -f 'rec-field/rec-field-set-source.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-source.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-source.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-source.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-source.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-source.c' object='rec-field/runtests-rec-field-set-source.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-source.obj `if test -f 'rec-field/rec-field-set-source.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-source.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-source.c'; fi` + +rec-field/runtests-rec-field-location.o: rec-field/rec-field-location.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-location.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-location.Tpo -c -o rec-field/runtests-rec-field-location.o `test -f 'rec-field/rec-field-location.c' || echo '$(srcdir)/'`rec-field/rec-field-location.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-location.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-location.c' object='rec-field/runtests-rec-field-location.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-location.o `test -f 'rec-field/rec-field-location.c' || echo '$(srcdir)/'`rec-field/rec-field-location.c + +rec-field/runtests-rec-field-location.obj: rec-field/rec-field-location.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-location.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-location.Tpo -c -o rec-field/runtests-rec-field-location.obj `if test -f 'rec-field/rec-field-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-location.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-location.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-location.c' object='rec-field/runtests-rec-field-location.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-location.obj `if test -f 'rec-field/rec-field-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-location.c'; fi` + +rec-field/runtests-rec-field-location-str.o: rec-field/rec-field-location-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-location-str.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-location-str.Tpo -c -o rec-field/runtests-rec-field-location-str.o `test -f 'rec-field/rec-field-location-str.c' || echo '$(srcdir)/'`rec-field/rec-field-location-str.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-location-str.Tpo rec-field/$(DEPDIR)/runtests-rec-field-location-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-location-str.c' object='rec-field/runtests-rec-field-location-str.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-location-str.o `test -f 'rec-field/rec-field-location-str.c' || echo '$(srcdir)/'`rec-field/rec-field-location-str.c + +rec-field/runtests-rec-field-location-str.obj: rec-field/rec-field-location-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-location-str.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-location-str.Tpo -c -o rec-field/runtests-rec-field-location-str.obj `if test -f 'rec-field/rec-field-location-str.c'; then $(CYGPATH_W) 'rec-field/rec-field-location-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-location-str.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-location-str.Tpo rec-field/$(DEPDIR)/runtests-rec-field-location-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-location-str.c' object='rec-field/runtests-rec-field-location-str.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-location-str.obj `if test -f 'rec-field/rec-field-location-str.c'; then $(CYGPATH_W) 'rec-field/rec-field-location-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-location-str.c'; fi` + +rec-field/runtests-rec-field-set-location.o: rec-field/rec-field-set-location.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-location.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-location.Tpo -c -o rec-field/runtests-rec-field-set-location.o `test -f 'rec-field/rec-field-set-location.c' || echo '$(srcdir)/'`rec-field/rec-field-set-location.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-location.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-location.c' object='rec-field/runtests-rec-field-set-location.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-location.o `test -f 'rec-field/rec-field-set-location.c' || echo '$(srcdir)/'`rec-field/rec-field-set-location.c + +rec-field/runtests-rec-field-set-location.obj: rec-field/rec-field-set-location.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-location.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-location.Tpo -c -o rec-field/runtests-rec-field-set-location.obj `if test -f 'rec-field/rec-field-set-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-location.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-location.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-location.c' object='rec-field/runtests-rec-field-set-location.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-location.obj `if test -f 'rec-field/rec-field-set-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-location.c'; fi` + +rec-field/runtests-rec-field-char-location.o: rec-field/rec-field-char-location.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-char-location.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-char-location.Tpo -c -o rec-field/runtests-rec-field-char-location.o `test -f 'rec-field/rec-field-char-location.c' || echo '$(srcdir)/'`rec-field/rec-field-char-location.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-char-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-char-location.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-char-location.c' object='rec-field/runtests-rec-field-char-location.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-char-location.o `test -f 'rec-field/rec-field-char-location.c' || echo '$(srcdir)/'`rec-field/rec-field-char-location.c + +rec-field/runtests-rec-field-char-location.obj: rec-field/rec-field-char-location.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-char-location.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-char-location.Tpo -c -o rec-field/runtests-rec-field-char-location.obj `if test -f 'rec-field/rec-field-char-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-char-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-char-location.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-char-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-char-location.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-char-location.c' object='rec-field/runtests-rec-field-char-location.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-char-location.obj `if test -f 'rec-field/rec-field-char-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-char-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-char-location.c'; fi` + +rec-field/runtests-rec-field-char-location-str.o: rec-field/rec-field-char-location-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-char-location-str.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Tpo -c -o rec-field/runtests-rec-field-char-location-str.o `test -f 'rec-field/rec-field-char-location-str.c' || echo '$(srcdir)/'`rec-field/rec-field-char-location-str.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Tpo rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-char-location-str.c' object='rec-field/runtests-rec-field-char-location-str.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-char-location-str.o `test -f 'rec-field/rec-field-char-location-str.c' || echo '$(srcdir)/'`rec-field/rec-field-char-location-str.c + +rec-field/runtests-rec-field-char-location-str.obj: rec-field/rec-field-char-location-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-char-location-str.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Tpo -c -o rec-field/runtests-rec-field-char-location-str.obj `if test -f 'rec-field/rec-field-char-location-str.c'; then $(CYGPATH_W) 'rec-field/rec-field-char-location-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-char-location-str.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Tpo rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-char-location-str.c' object='rec-field/runtests-rec-field-char-location-str.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-char-location-str.obj `if test -f 'rec-field/rec-field-char-location-str.c'; then $(CYGPATH_W) 'rec-field/rec-field-char-location-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-char-location-str.c'; fi` + +rec-field/runtests-rec-field-set-char-location.o: rec-field/rec-field-set-char-location.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-char-location.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Tpo -c -o rec-field/runtests-rec-field-set-char-location.o `test -f 'rec-field/rec-field-set-char-location.c' || echo '$(srcdir)/'`rec-field/rec-field-set-char-location.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-char-location.c' object='rec-field/runtests-rec-field-set-char-location.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-char-location.o `test -f 'rec-field/rec-field-set-char-location.c' || echo '$(srcdir)/'`rec-field/rec-field-set-char-location.c + +rec-field/runtests-rec-field-set-char-location.obj: rec-field/rec-field-set-char-location.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-char-location.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Tpo -c -o rec-field/runtests-rec-field-set-char-location.obj `if test -f 'rec-field/rec-field-set-char-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-char-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-char-location.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-char-location.c' object='rec-field/runtests-rec-field-set-char-location.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-char-location.obj `if test -f 'rec-field/rec-field-set-char-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-char-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-char-location.c'; fi` + +rec-field/runtests-rec-field-to-comment.o: rec-field/rec-field-to-comment.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-to-comment.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Tpo -c -o rec-field/runtests-rec-field-to-comment.o `test -f 'rec-field/rec-field-to-comment.c' || echo '$(srcdir)/'`rec-field/rec-field-to-comment.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Tpo rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-to-comment.c' object='rec-field/runtests-rec-field-to-comment.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-to-comment.o `test -f 'rec-field/rec-field-to-comment.c' || echo '$(srcdir)/'`rec-field/rec-field-to-comment.c + +rec-field/runtests-rec-field-to-comment.obj: rec-field/rec-field-to-comment.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-to-comment.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Tpo -c -o rec-field/runtests-rec-field-to-comment.obj `if test -f 'rec-field/rec-field-to-comment.c'; then $(CYGPATH_W) 'rec-field/rec-field-to-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-to-comment.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Tpo rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-to-comment.c' object='rec-field/runtests-rec-field-to-comment.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-to-comment.obj `if test -f 'rec-field/rec-field-to-comment.c'; then $(CYGPATH_W) 'rec-field/rec-field-to-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-to-comment.c'; fi` + +rec-field/runtests-tsuite-rec-field.o: rec-field/tsuite-rec-field.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-tsuite-rec-field.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Tpo -c -o rec-field/runtests-tsuite-rec-field.o `test -f 'rec-field/tsuite-rec-field.c' || echo '$(srcdir)/'`rec-field/tsuite-rec-field.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Tpo rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/tsuite-rec-field.c' object='rec-field/runtests-tsuite-rec-field.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-tsuite-rec-field.o `test -f 'rec-field/tsuite-rec-field.c' || echo '$(srcdir)/'`rec-field/tsuite-rec-field.c + +rec-field/runtests-tsuite-rec-field.obj: rec-field/tsuite-rec-field.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-tsuite-rec-field.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Tpo -c -o rec-field/runtests-tsuite-rec-field.obj `if test -f 'rec-field/tsuite-rec-field.c'; then $(CYGPATH_W) 'rec-field/tsuite-rec-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/tsuite-rec-field.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Tpo rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/tsuite-rec-field.c' object='rec-field/runtests-tsuite-rec-field.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-tsuite-rec-field.obj `if test -f 'rec-field/tsuite-rec-field.c'; then $(CYGPATH_W) 'rec-field/tsuite-rec-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/tsuite-rec-field.c'; fi` + +rec-record/runtests-tsuite-rec-record.o: rec-record/tsuite-rec-record.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-record/runtests-tsuite-rec-record.o -MD -MP -MF rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Tpo -c -o rec-record/runtests-tsuite-rec-record.o `test -f 'rec-record/tsuite-rec-record.c' || echo '$(srcdir)/'`rec-record/tsuite-rec-record.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Tpo rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-record/tsuite-rec-record.c' object='rec-record/runtests-tsuite-rec-record.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-record/runtests-tsuite-rec-record.o `test -f 'rec-record/tsuite-rec-record.c' || echo '$(srcdir)/'`rec-record/tsuite-rec-record.c + +rec-record/runtests-tsuite-rec-record.obj: rec-record/tsuite-rec-record.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-record/runtests-tsuite-rec-record.obj -MD -MP -MF rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Tpo -c -o rec-record/runtests-tsuite-rec-record.obj `if test -f 'rec-record/tsuite-rec-record.c'; then $(CYGPATH_W) 'rec-record/tsuite-rec-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-record/tsuite-rec-record.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Tpo rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-record/tsuite-rec-record.c' object='rec-record/runtests-tsuite-rec-record.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-record/runtests-tsuite-rec-record.obj `if test -f 'rec-record/tsuite-rec-record.c'; then $(CYGPATH_W) 'rec-record/tsuite-rec-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-record/tsuite-rec-record.c'; fi` + +rec-fex/runtests-rec-fex-new.o: rec-fex/rec-fex-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-new.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-new.Tpo -c -o rec-fex/runtests-rec-fex-new.o `test -f 'rec-fex/rec-fex-new.c' || echo '$(srcdir)/'`rec-fex/rec-fex-new.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-new.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-new.c' object='rec-fex/runtests-rec-fex-new.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-new.o `test -f 'rec-fex/rec-fex-new.c' || echo '$(srcdir)/'`rec-fex/rec-fex-new.c + +rec-fex/runtests-rec-fex-new.obj: rec-fex/rec-fex-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-new.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-new.Tpo -c -o rec-fex/runtests-rec-fex-new.obj `if test -f 'rec-fex/rec-fex-new.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-new.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-new.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-new.c' object='rec-fex/runtests-rec-fex-new.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-new.obj `if test -f 'rec-fex/rec-fex-new.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-new.c'; fi` + +rec-fex/runtests-rec-fex-destroy.o: rec-fex/rec-fex-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-destroy.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Tpo -c -o rec-fex/runtests-rec-fex-destroy.o `test -f 'rec-fex/rec-fex-destroy.c' || echo '$(srcdir)/'`rec-fex/rec-fex-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-destroy.c' object='rec-fex/runtests-rec-fex-destroy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-destroy.o `test -f 'rec-fex/rec-fex-destroy.c' || echo '$(srcdir)/'`rec-fex/rec-fex-destroy.c + +rec-fex/runtests-rec-fex-destroy.obj: rec-fex/rec-fex-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-destroy.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Tpo -c -o rec-fex/runtests-rec-fex-destroy.obj `if test -f 'rec-fex/rec-fex-destroy.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-destroy.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-destroy.c' object='rec-fex/runtests-rec-fex-destroy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-destroy.obj `if test -f 'rec-fex/rec-fex-destroy.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-destroy.c'; fi` + +rec-fex/runtests-rec-fex-check.o: rec-fex/rec-fex-check.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-check.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-check.Tpo -c -o rec-fex/runtests-rec-fex-check.o `test -f 'rec-fex/rec-fex-check.c' || echo '$(srcdir)/'`rec-fex/rec-fex-check.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-check.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-check.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-check.c' object='rec-fex/runtests-rec-fex-check.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-check.o `test -f 'rec-fex/rec-fex-check.c' || echo '$(srcdir)/'`rec-fex/rec-fex-check.c + +rec-fex/runtests-rec-fex-check.obj: rec-fex/rec-fex-check.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-check.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-check.Tpo -c -o rec-fex/runtests-rec-fex-check.obj `if test -f 'rec-fex/rec-fex-check.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-check.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-check.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-check.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-check.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-check.c' object='rec-fex/runtests-rec-fex-check.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-check.obj `if test -f 'rec-fex/rec-fex-check.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-check.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-check.c'; fi` + +rec-fex/runtests-rec-fex-sort.o: rec-fex/rec-fex-sort.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-sort.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Tpo -c -o rec-fex/runtests-rec-fex-sort.o `test -f 'rec-fex/rec-fex-sort.c' || echo '$(srcdir)/'`rec-fex/rec-fex-sort.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-sort.c' object='rec-fex/runtests-rec-fex-sort.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-sort.o `test -f 'rec-fex/rec-fex-sort.c' || echo '$(srcdir)/'`rec-fex/rec-fex-sort.c + +rec-fex/runtests-rec-fex-sort.obj: rec-fex/rec-fex-sort.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-sort.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Tpo -c -o rec-fex/runtests-rec-fex-sort.obj `if test -f 'rec-fex/rec-fex-sort.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-sort.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-sort.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-sort.c' object='rec-fex/runtests-rec-fex-sort.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-sort.obj `if test -f 'rec-fex/rec-fex-sort.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-sort.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-sort.c'; fi` + +rec-fex/runtests-rec-fex-size.o: rec-fex/rec-fex-size.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-size.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-size.Tpo -c -o rec-fex/runtests-rec-fex-size.o `test -f 'rec-fex/rec-fex-size.c' || echo '$(srcdir)/'`rec-fex/rec-fex-size.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-size.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-size.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-size.c' object='rec-fex/runtests-rec-fex-size.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-size.o `test -f 'rec-fex/rec-fex-size.c' || echo '$(srcdir)/'`rec-fex/rec-fex-size.c + +rec-fex/runtests-rec-fex-size.obj: rec-fex/rec-fex-size.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-size.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-size.Tpo -c -o rec-fex/runtests-rec-fex-size.obj `if test -f 'rec-fex/rec-fex-size.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-size.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-size.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-size.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-size.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-size.c' object='rec-fex/runtests-rec-fex-size.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-size.obj `if test -f 'rec-fex/rec-fex-size.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-size.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-size.c'; fi` + +rec-fex/runtests-rec-fex-get.o: rec-fex/rec-fex-get.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-get.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-get.Tpo -c -o rec-fex/runtests-rec-fex-get.o `test -f 'rec-fex/rec-fex-get.c' || echo '$(srcdir)/'`rec-fex/rec-fex-get.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-get.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-get.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-get.c' object='rec-fex/runtests-rec-fex-get.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-get.o `test -f 'rec-fex/rec-fex-get.c' || echo '$(srcdir)/'`rec-fex/rec-fex-get.c + +rec-fex/runtests-rec-fex-get.obj: rec-fex/rec-fex-get.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-get.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-get.Tpo -c -o rec-fex/runtests-rec-fex-get.obj `if test -f 'rec-fex/rec-fex-get.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-get.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-get.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-get.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-get.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-get.c' object='rec-fex/runtests-rec-fex-get.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-get.obj `if test -f 'rec-fex/rec-fex-get.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-get.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-get.c'; fi` + +rec-fex/runtests-rec-fex-elem-field-name.o: rec-fex/rec-fex-elem-field-name.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-field-name.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Tpo -c -o rec-fex/runtests-rec-fex-elem-field-name.o `test -f 'rec-fex/rec-fex-elem-field-name.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-field-name.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-elem-field-name.c' object='rec-fex/runtests-rec-fex-elem-field-name.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-field-name.o `test -f 'rec-fex/rec-fex-elem-field-name.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-field-name.c + +rec-fex/runtests-rec-fex-elem-field-name.obj: rec-fex/rec-fex-elem-field-name.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-field-name.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Tpo -c -o rec-fex/runtests-rec-fex-elem-field-name.obj `if test -f 'rec-fex/rec-fex-elem-field-name.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-field-name.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-elem-field-name.c' object='rec-fex/runtests-rec-fex-elem-field-name.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-field-name.obj `if test -f 'rec-fex/rec-fex-elem-field-name.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-field-name.c'; fi` + +rec-fex/runtests-rec-fex-elem-rewrite-to.o: rec-fex/rec-fex-elem-rewrite-to.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-rewrite-to.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Tpo -c -o rec-fex/runtests-rec-fex-elem-rewrite-to.o `test -f 'rec-fex/rec-fex-elem-rewrite-to.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-rewrite-to.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-elem-rewrite-to.c' object='rec-fex/runtests-rec-fex-elem-rewrite-to.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-rewrite-to.o `test -f 'rec-fex/rec-fex-elem-rewrite-to.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-rewrite-to.c + +rec-fex/runtests-rec-fex-elem-rewrite-to.obj: rec-fex/rec-fex-elem-rewrite-to.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-rewrite-to.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Tpo -c -o rec-fex/runtests-rec-fex-elem-rewrite-to.obj `if test -f 'rec-fex/rec-fex-elem-rewrite-to.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-rewrite-to.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-rewrite-to.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-elem-rewrite-to.c' object='rec-fex/runtests-rec-fex-elem-rewrite-to.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-rewrite-to.obj `if test -f 'rec-fex/rec-fex-elem-rewrite-to.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-rewrite-to.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-rewrite-to.c'; fi` + +rec-fex/runtests-rec-fex-elem-min.o: rec-fex/rec-fex-elem-min.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-min.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Tpo -c -o rec-fex/runtests-rec-fex-elem-min.o `test -f 'rec-fex/rec-fex-elem-min.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-min.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-elem-min.c' object='rec-fex/runtests-rec-fex-elem-min.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-min.o `test -f 'rec-fex/rec-fex-elem-min.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-min.c + +rec-fex/runtests-rec-fex-elem-min.obj: rec-fex/rec-fex-elem-min.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-min.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Tpo -c -o rec-fex/runtests-rec-fex-elem-min.obj `if test -f 'rec-fex/rec-fex-elem-min.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-min.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-min.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-elem-min.c' object='rec-fex/runtests-rec-fex-elem-min.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-min.obj `if test -f 'rec-fex/rec-fex-elem-min.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-min.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-min.c'; fi` + +rec-fex/runtests-rec-fex-elem-max.o: rec-fex/rec-fex-elem-max.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-max.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Tpo -c -o rec-fex/runtests-rec-fex-elem-max.o `test -f 'rec-fex/rec-fex-elem-max.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-max.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-elem-max.c' object='rec-fex/runtests-rec-fex-elem-max.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-max.o `test -f 'rec-fex/rec-fex-elem-max.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-max.c + +rec-fex/runtests-rec-fex-elem-max.obj: rec-fex/rec-fex-elem-max.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-max.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Tpo -c -o rec-fex/runtests-rec-fex-elem-max.obj `if test -f 'rec-fex/rec-fex-elem-max.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-max.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-max.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-elem-max.c' object='rec-fex/runtests-rec-fex-elem-max.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-max.obj `if test -f 'rec-fex/rec-fex-elem-max.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-max.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-max.c'; fi` + +rec-fex/runtests-rec-fex-str.o: rec-fex/rec-fex-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-str.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-str.Tpo -c -o rec-fex/runtests-rec-fex-str.o `test -f 'rec-fex/rec-fex-str.c' || echo '$(srcdir)/'`rec-fex/rec-fex-str.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-str.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-str.c' object='rec-fex/runtests-rec-fex-str.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-str.o `test -f 'rec-fex/rec-fex-str.c' || echo '$(srcdir)/'`rec-fex/rec-fex-str.c + +rec-fex/runtests-rec-fex-str.obj: rec-fex/rec-fex-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-str.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-str.Tpo -c -o rec-fex/runtests-rec-fex-str.obj `if test -f 'rec-fex/rec-fex-str.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-str.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-str.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-str.c' object='rec-fex/runtests-rec-fex-str.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-str.obj `if test -f 'rec-fex/rec-fex-str.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-str.c'; fi` + +rec-fex/runtests-tsuite-rec-fex.o: rec-fex/tsuite-rec-fex.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-tsuite-rec-fex.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Tpo -c -o rec-fex/runtests-tsuite-rec-fex.o `test -f 'rec-fex/tsuite-rec-fex.c' || echo '$(srcdir)/'`rec-fex/tsuite-rec-fex.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Tpo rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/tsuite-rec-fex.c' object='rec-fex/runtests-tsuite-rec-fex.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-tsuite-rec-fex.o `test -f 'rec-fex/tsuite-rec-fex.c' || echo '$(srcdir)/'`rec-fex/tsuite-rec-fex.c + +rec-fex/runtests-tsuite-rec-fex.obj: rec-fex/tsuite-rec-fex.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-tsuite-rec-fex.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Tpo -c -o rec-fex/runtests-tsuite-rec-fex.obj `if test -f 'rec-fex/tsuite-rec-fex.c'; then $(CYGPATH_W) 'rec-fex/tsuite-rec-fex.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/tsuite-rec-fex.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Tpo rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/tsuite-rec-fex.c' object='rec-fex/runtests-tsuite-rec-fex.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-tsuite-rec-fex.obj `if test -f 'rec-fex/tsuite-rec-fex.c'; then $(CYGPATH_W) 'rec-fex/tsuite-rec-fex.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/tsuite-rec-fex.c'; fi` + +rec-parser/runtests-rec-parser-new.o: rec-parser/rec-parser-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new.Tpo -c -o rec-parser/runtests-rec-parser-new.o `test -f 'rec-parser/rec-parser-new.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-new.c' object='rec-parser/runtests-rec-parser-new.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new.o `test -f 'rec-parser/rec-parser-new.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new.c + +rec-parser/runtests-rec-parser-new.obj: rec-parser/rec-parser-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new.Tpo -c -o rec-parser/runtests-rec-parser-new.obj `if test -f 'rec-parser/rec-parser-new.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-new.c' object='rec-parser/runtests-rec-parser-new.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new.obj `if test -f 'rec-parser/rec-parser-new.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new.c'; fi` + +rec-parser/runtests-rec-parser-new-str.o: rec-parser/rec-parser-new-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new-str.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Tpo -c -o rec-parser/runtests-rec-parser-new-str.o `test -f 'rec-parser/rec-parser-new-str.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new-str.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-new-str.c' object='rec-parser/runtests-rec-parser-new-str.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new-str.o `test -f 'rec-parser/rec-parser-new-str.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new-str.c + +rec-parser/runtests-rec-parser-new-str.obj: rec-parser/rec-parser-new-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new-str.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Tpo -c -o rec-parser/runtests-rec-parser-new-str.obj `if test -f 'rec-parser/rec-parser-new-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new-str.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-new-str.c' object='rec-parser/runtests-rec-parser-new-str.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new-str.obj `if test -f 'rec-parser/rec-parser-new-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new-str.c'; fi` + +rec-parser/runtests-rec-parser-new-mem.o: rec-parser/rec-parser-new-mem.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new-mem.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Tpo -c -o rec-parser/runtests-rec-parser-new-mem.o `test -f 'rec-parser/rec-parser-new-mem.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new-mem.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-new-mem.c' object='rec-parser/runtests-rec-parser-new-mem.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new-mem.o `test -f 'rec-parser/rec-parser-new-mem.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new-mem.c + +rec-parser/runtests-rec-parser-new-mem.obj: rec-parser/rec-parser-new-mem.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new-mem.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Tpo -c -o rec-parser/runtests-rec-parser-new-mem.obj `if test -f 'rec-parser/rec-parser-new-mem.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new-mem.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new-mem.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-new-mem.c' object='rec-parser/runtests-rec-parser-new-mem.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new-mem.obj `if test -f 'rec-parser/rec-parser-new-mem.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new-mem.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new-mem.c'; fi` + +rec-parser/runtests-rec-parser-destroy.o: rec-parser/rec-parser-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-destroy.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Tpo -c -o rec-parser/runtests-rec-parser-destroy.o `test -f 'rec-parser/rec-parser-destroy.c' || echo '$(srcdir)/'`rec-parser/rec-parser-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-destroy.c' object='rec-parser/runtests-rec-parser-destroy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-destroy.o `test -f 'rec-parser/rec-parser-destroy.c' || echo '$(srcdir)/'`rec-parser/rec-parser-destroy.c + +rec-parser/runtests-rec-parser-destroy.obj: rec-parser/rec-parser-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-destroy.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Tpo -c -o rec-parser/runtests-rec-parser-destroy.obj `if test -f 'rec-parser/rec-parser-destroy.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-destroy.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-destroy.c' object='rec-parser/runtests-rec-parser-destroy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-destroy.obj `if test -f 'rec-parser/rec-parser-destroy.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-destroy.c'; fi` + +rec-parser/runtests-rec-parse-field-name-str.o: rec-parser/rec-parse-field-name-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field-name-str.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Tpo -c -o rec-parser/runtests-rec-parse-field-name-str.o `test -f 'rec-parser/rec-parse-field-name-str.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field-name-str.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-field-name-str.c' object='rec-parser/runtests-rec-parse-field-name-str.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field-name-str.o `test -f 'rec-parser/rec-parse-field-name-str.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field-name-str.c + +rec-parser/runtests-rec-parse-field-name-str.obj: rec-parser/rec-parse-field-name-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field-name-str.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Tpo -c -o rec-parser/runtests-rec-parse-field-name-str.obj `if test -f 'rec-parser/rec-parse-field-name-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field-name-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field-name-str.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-field-name-str.c' object='rec-parser/runtests-rec-parse-field-name-str.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field-name-str.obj `if test -f 'rec-parser/rec-parse-field-name-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field-name-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field-name-str.c'; fi` + +rec-parser/runtests-rec-parse-field-name.o: rec-parser/rec-parse-field-name.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field-name.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Tpo -c -o rec-parser/runtests-rec-parse-field-name.o `test -f 'rec-parser/rec-parse-field-name.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field-name.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-field-name.c' object='rec-parser/runtests-rec-parse-field-name.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field-name.o `test -f 'rec-parser/rec-parse-field-name.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field-name.c + +rec-parser/runtests-rec-parse-field-name.obj: rec-parser/rec-parse-field-name.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field-name.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Tpo -c -o rec-parser/runtests-rec-parse-field-name.obj `if test -f 'rec-parser/rec-parse-field-name.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field-name.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-field-name.c' object='rec-parser/runtests-rec-parse-field-name.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field-name.obj `if test -f 'rec-parser/rec-parse-field-name.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field-name.c'; fi` + +rec-parser/runtests-rec-parse-field.o: rec-parser/rec-parse-field.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field.Tpo -c -o rec-parser/runtests-rec-parse-field.o `test -f 'rec-parser/rec-parse-field.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-field.c' object='rec-parser/runtests-rec-parse-field.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field.o `test -f 'rec-parser/rec-parse-field.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field.c + +rec-parser/runtests-rec-parse-field.obj: rec-parser/rec-parse-field.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field.Tpo -c -o rec-parser/runtests-rec-parse-field.obj `if test -f 'rec-parser/rec-parse-field.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-field.c' object='rec-parser/runtests-rec-parse-field.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field.obj `if test -f 'rec-parser/rec-parse-field.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field.c'; fi` + +rec-parser/runtests-rec-parse-record.o: rec-parser/rec-parse-record.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-record.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-record.Tpo -c -o rec-parser/runtests-rec-parse-record.o `test -f 'rec-parser/rec-parse-record.c' || echo '$(srcdir)/'`rec-parser/rec-parse-record.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-record.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-record.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-record.c' object='rec-parser/runtests-rec-parse-record.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-record.o `test -f 'rec-parser/rec-parse-record.c' || echo '$(srcdir)/'`rec-parser/rec-parse-record.c + +rec-parser/runtests-rec-parse-record.obj: rec-parser/rec-parse-record.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-record.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-record.Tpo -c -o rec-parser/runtests-rec-parse-record.obj `if test -f 'rec-parser/rec-parse-record.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-record.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-record.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-record.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-record.c' object='rec-parser/runtests-rec-parse-record.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-record.obj `if test -f 'rec-parser/rec-parse-record.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-record.c'; fi` + +rec-parser/runtests-rec-parse-record-str.o: rec-parser/rec-parse-record-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-record-str.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Tpo -c -o rec-parser/runtests-rec-parse-record-str.o `test -f 'rec-parser/rec-parse-record-str.c' || echo '$(srcdir)/'`rec-parser/rec-parse-record-str.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-record-str.c' object='rec-parser/runtests-rec-parse-record-str.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-record-str.o `test -f 'rec-parser/rec-parse-record-str.c' || echo '$(srcdir)/'`rec-parser/rec-parse-record-str.c + +rec-parser/runtests-rec-parse-record-str.obj: rec-parser/rec-parse-record-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-record-str.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Tpo -c -o rec-parser/runtests-rec-parse-record-str.obj `if test -f 'rec-parser/rec-parse-record-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-record-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-record-str.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-record-str.c' object='rec-parser/runtests-rec-parse-record-str.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-record-str.obj `if test -f 'rec-parser/rec-parse-record-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-record-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-record-str.c'; fi` + +rec-parser/runtests-rec-parse-rset.o: rec-parser/rec-parse-rset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-rset.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Tpo -c -o rec-parser/runtests-rec-parse-rset.o `test -f 'rec-parser/rec-parse-rset.c' || echo '$(srcdir)/'`rec-parser/rec-parse-rset.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-rset.c' object='rec-parser/runtests-rec-parse-rset.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-rset.o `test -f 'rec-parser/rec-parse-rset.c' || echo '$(srcdir)/'`rec-parser/rec-parse-rset.c + +rec-parser/runtests-rec-parse-rset.obj: rec-parser/rec-parse-rset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-rset.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Tpo -c -o rec-parser/runtests-rec-parse-rset.obj `if test -f 'rec-parser/rec-parse-rset.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-rset.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-rset.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-rset.c' object='rec-parser/runtests-rec-parse-rset.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-rset.obj `if test -f 'rec-parser/rec-parse-rset.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-rset.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-rset.c'; fi` + +rec-parser/runtests-rec-parse-db.o: rec-parser/rec-parse-db.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-db.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-db.Tpo -c -o rec-parser/runtests-rec-parse-db.o `test -f 'rec-parser/rec-parse-db.c' || echo '$(srcdir)/'`rec-parser/rec-parse-db.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-db.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-db.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-db.c' object='rec-parser/runtests-rec-parse-db.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-db.o `test -f 'rec-parser/rec-parse-db.c' || echo '$(srcdir)/'`rec-parser/rec-parse-db.c + +rec-parser/runtests-rec-parse-db.obj: rec-parser/rec-parse-db.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-db.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-db.Tpo -c -o rec-parser/runtests-rec-parse-db.obj `if test -f 'rec-parser/rec-parse-db.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-db.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-db.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-db.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-db.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-db.c' object='rec-parser/runtests-rec-parse-db.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-db.obj `if test -f 'rec-parser/rec-parse-db.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-db.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-db.c'; fi` + +rec-parser/runtests-rec-parser-eof.o: rec-parser/rec-parser-eof.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-eof.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Tpo -c -o rec-parser/runtests-rec-parser-eof.o `test -f 'rec-parser/rec-parser-eof.c' || echo '$(srcdir)/'`rec-parser/rec-parser-eof.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-eof.c' object='rec-parser/runtests-rec-parser-eof.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-eof.o `test -f 'rec-parser/rec-parser-eof.c' || echo '$(srcdir)/'`rec-parser/rec-parser-eof.c + +rec-parser/runtests-rec-parser-eof.obj: rec-parser/rec-parser-eof.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-eof.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Tpo -c -o rec-parser/runtests-rec-parser-eof.obj `if test -f 'rec-parser/rec-parser-eof.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-eof.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-eof.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-eof.c' object='rec-parser/runtests-rec-parser-eof.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-eof.obj `if test -f 'rec-parser/rec-parser-eof.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-eof.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-eof.c'; fi` + +rec-parser/runtests-rec-parser-error.o: rec-parser/rec-parser-error.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-error.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-error.Tpo -c -o rec-parser/runtests-rec-parser-error.o `test -f 'rec-parser/rec-parser-error.c' || echo '$(srcdir)/'`rec-parser/rec-parser-error.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-error.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-error.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-error.c' object='rec-parser/runtests-rec-parser-error.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-error.o `test -f 'rec-parser/rec-parser-error.c' || echo '$(srcdir)/'`rec-parser/rec-parser-error.c + +rec-parser/runtests-rec-parser-error.obj: rec-parser/rec-parser-error.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-error.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-error.Tpo -c -o rec-parser/runtests-rec-parser-error.obj `if test -f 'rec-parser/rec-parser-error.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-error.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-error.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-error.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-error.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-error.c' object='rec-parser/runtests-rec-parser-error.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-error.obj `if test -f 'rec-parser/rec-parser-error.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-error.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-error.c'; fi` + +rec-parser/runtests-rec-parser-reset.o: rec-parser/rec-parser-reset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-reset.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Tpo -c -o rec-parser/runtests-rec-parser-reset.o `test -f 'rec-parser/rec-parser-reset.c' || echo '$(srcdir)/'`rec-parser/rec-parser-reset.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-reset.c' object='rec-parser/runtests-rec-parser-reset.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-reset.o `test -f 'rec-parser/rec-parser-reset.c' || echo '$(srcdir)/'`rec-parser/rec-parser-reset.c + +rec-parser/runtests-rec-parser-reset.obj: rec-parser/rec-parser-reset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-reset.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Tpo -c -o rec-parser/runtests-rec-parser-reset.obj `if test -f 'rec-parser/rec-parser-reset.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-reset.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-reset.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-reset.c' object='rec-parser/runtests-rec-parser-reset.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-reset.obj `if test -f 'rec-parser/rec-parser-reset.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-reset.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-reset.c'; fi` + +rec-parser/runtests-rec-parser-perror.o: rec-parser/rec-parser-perror.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-perror.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Tpo -c -o rec-parser/runtests-rec-parser-perror.o `test -f 'rec-parser/rec-parser-perror.c' || echo '$(srcdir)/'`rec-parser/rec-parser-perror.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-perror.c' object='rec-parser/runtests-rec-parser-perror.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-perror.o `test -f 'rec-parser/rec-parser-perror.c' || echo '$(srcdir)/'`rec-parser/rec-parser-perror.c + +rec-parser/runtests-rec-parser-perror.obj: rec-parser/rec-parser-perror.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-perror.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Tpo -c -o rec-parser/runtests-rec-parser-perror.obj `if test -f 'rec-parser/rec-parser-perror.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-perror.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-perror.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-perror.c' object='rec-parser/runtests-rec-parser-perror.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-perror.obj `if test -f 'rec-parser/rec-parser-perror.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-perror.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-perror.c'; fi` + +rec-parser/runtests-rec-parser-seek-mem.o: rec-parser/rec-parser-seek-mem.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-seek-mem.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Tpo -c -o rec-parser/runtests-rec-parser-seek-mem.o `test -f 'rec-parser/rec-parser-seek-mem.c' || echo '$(srcdir)/'`rec-parser/rec-parser-seek-mem.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-seek-mem.c' object='rec-parser/runtests-rec-parser-seek-mem.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-seek-mem.o `test -f 'rec-parser/rec-parser-seek-mem.c' || echo '$(srcdir)/'`rec-parser/rec-parser-seek-mem.c + +rec-parser/runtests-rec-parser-seek-mem.obj: rec-parser/rec-parser-seek-mem.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-seek-mem.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Tpo -c -o rec-parser/runtests-rec-parser-seek-mem.obj `if test -f 'rec-parser/rec-parser-seek-mem.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-seek-mem.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-seek-mem.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-seek-mem.c' object='rec-parser/runtests-rec-parser-seek-mem.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-seek-mem.obj `if test -f 'rec-parser/rec-parser-seek-mem.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-seek-mem.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-seek-mem.c'; fi` + +rec-parser/runtests-tsuite-rec-parser.o: rec-parser/tsuite-rec-parser.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-tsuite-rec-parser.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Tpo -c -o rec-parser/runtests-tsuite-rec-parser.o `test -f 'rec-parser/tsuite-rec-parser.c' || echo '$(srcdir)/'`rec-parser/tsuite-rec-parser.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Tpo rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/tsuite-rec-parser.c' object='rec-parser/runtests-tsuite-rec-parser.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-tsuite-rec-parser.o `test -f 'rec-parser/tsuite-rec-parser.c' || echo '$(srcdir)/'`rec-parser/tsuite-rec-parser.c + +rec-parser/runtests-tsuite-rec-parser.obj: rec-parser/tsuite-rec-parser.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-tsuite-rec-parser.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Tpo -c -o rec-parser/runtests-tsuite-rec-parser.obj `if test -f 'rec-parser/tsuite-rec-parser.c'; then $(CYGPATH_W) 'rec-parser/tsuite-rec-parser.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/tsuite-rec-parser.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Tpo rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/tsuite-rec-parser.c' object='rec-parser/runtests-tsuite-rec-parser.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-tsuite-rec-parser.obj `if test -f 'rec-parser/tsuite-rec-parser.c'; then $(CYGPATH_W) 'rec-parser/tsuite-rec-parser.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/tsuite-rec-parser.c'; fi` + +rec-writer/runtests-rec-write-comment.o: rec-writer/rec-write-comment.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-comment.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-comment.Tpo -c -o rec-writer/runtests-rec-write-comment.o `test -f 'rec-writer/rec-write-comment.c' || echo '$(srcdir)/'`rec-writer/rec-write-comment.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-comment.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-comment.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-comment.c' object='rec-writer/runtests-rec-write-comment.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-comment.o `test -f 'rec-writer/rec-write-comment.c' || echo '$(srcdir)/'`rec-writer/rec-write-comment.c + +rec-writer/runtests-rec-write-comment.obj: rec-writer/rec-write-comment.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-comment.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-comment.Tpo -c -o rec-writer/runtests-rec-write-comment.obj `if test -f 'rec-writer/rec-write-comment.c'; then $(CYGPATH_W) 'rec-writer/rec-write-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-comment.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-comment.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-comment.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-comment.c' object='rec-writer/runtests-rec-write-comment.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-comment.obj `if test -f 'rec-writer/rec-write-comment.c'; then $(CYGPATH_W) 'rec-writer/rec-write-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-comment.c'; fi` + +rec-writer/runtests-rec-write-field.o: rec-writer/rec-write-field.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field.Tpo -c -o rec-writer/runtests-rec-write-field.o `test -f 'rec-writer/rec-write-field.c' || echo '$(srcdir)/'`rec-writer/rec-write-field.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-field.c' object='rec-writer/runtests-rec-write-field.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field.o `test -f 'rec-writer/rec-write-field.c' || echo '$(srcdir)/'`rec-writer/rec-write-field.c + +rec-writer/runtests-rec-write-field.obj: rec-writer/rec-write-field.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field.Tpo -c -o rec-writer/runtests-rec-write-field.obj `if test -f 'rec-writer/rec-write-field.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-field.c' object='rec-writer/runtests-rec-write-field.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field.obj `if test -f 'rec-writer/rec-write-field.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field.c'; fi` + +rec-writer/runtests-rec-write-field-name.o: rec-writer/rec-write-field-name.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-name.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Tpo -c -o rec-writer/runtests-rec-write-field-name.o `test -f 'rec-writer/rec-write-field-name.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-name.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-field-name.c' object='rec-writer/runtests-rec-write-field-name.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-name.o `test -f 'rec-writer/rec-write-field-name.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-name.c + +rec-writer/runtests-rec-write-field-name.obj: rec-writer/rec-write-field-name.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-name.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Tpo -c -o rec-writer/runtests-rec-write-field-name.obj `if test -f 'rec-writer/rec-write-field-name.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-name.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-field-name.c' object='rec-writer/runtests-rec-write-field-name.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-name.obj `if test -f 'rec-writer/rec-write-field-name.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-name.c'; fi` + +rec-writer/runtests-rec-writer-destroy.o: rec-writer/rec-writer-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-writer-destroy.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Tpo -c -o rec-writer/runtests-rec-writer-destroy.o `test -f 'rec-writer/rec-writer-destroy.c' || echo '$(srcdir)/'`rec-writer/rec-writer-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Tpo rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-writer-destroy.c' object='rec-writer/runtests-rec-writer-destroy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-writer-destroy.o `test -f 'rec-writer/rec-writer-destroy.c' || echo '$(srcdir)/'`rec-writer/rec-writer-destroy.c + +rec-writer/runtests-rec-writer-destroy.obj: rec-writer/rec-writer-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-writer-destroy.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Tpo -c -o rec-writer/runtests-rec-writer-destroy.obj `if test -f 'rec-writer/rec-writer-destroy.c'; then $(CYGPATH_W) 'rec-writer/rec-writer-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-writer-destroy.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Tpo rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-writer-destroy.c' object='rec-writer/runtests-rec-writer-destroy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-writer-destroy.obj `if test -f 'rec-writer/rec-writer-destroy.c'; then $(CYGPATH_W) 'rec-writer/rec-writer-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-writer-destroy.c'; fi` + +rec-writer/runtests-rec-write-record.o: rec-writer/rec-write-record.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-record.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-record.Tpo -c -o rec-writer/runtests-rec-write-record.o `test -f 'rec-writer/rec-write-record.c' || echo '$(srcdir)/'`rec-writer/rec-write-record.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-record.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-record.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-record.c' object='rec-writer/runtests-rec-write-record.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-record.o `test -f 'rec-writer/rec-write-record.c' || echo '$(srcdir)/'`rec-writer/rec-write-record.c + +rec-writer/runtests-rec-write-record.obj: rec-writer/rec-write-record.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-record.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-record.Tpo -c -o rec-writer/runtests-rec-write-record.obj `if test -f 'rec-writer/rec-write-record.c'; then $(CYGPATH_W) 'rec-writer/rec-write-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-record.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-record.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-record.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-record.c' object='rec-writer/runtests-rec-write-record.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-record.obj `if test -f 'rec-writer/rec-write-record.c'; then $(CYGPATH_W) 'rec-writer/rec-write-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-record.c'; fi` + +rec-writer/runtests-rec-writer-new.o: rec-writer/rec-writer-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-writer-new.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-writer-new.Tpo -c -o rec-writer/runtests-rec-writer-new.o `test -f 'rec-writer/rec-writer-new.c' || echo '$(srcdir)/'`rec-writer/rec-writer-new.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-writer-new.Tpo rec-writer/$(DEPDIR)/runtests-rec-writer-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-writer-new.c' object='rec-writer/runtests-rec-writer-new.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-writer-new.o `test -f 'rec-writer/rec-writer-new.c' || echo '$(srcdir)/'`rec-writer/rec-writer-new.c + +rec-writer/runtests-rec-writer-new.obj: rec-writer/rec-writer-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-writer-new.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-writer-new.Tpo -c -o rec-writer/runtests-rec-writer-new.obj `if test -f 'rec-writer/rec-writer-new.c'; then $(CYGPATH_W) 'rec-writer/rec-writer-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-writer-new.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-writer-new.Tpo rec-writer/$(DEPDIR)/runtests-rec-writer-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-writer-new.c' object='rec-writer/runtests-rec-writer-new.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-writer-new.obj `if test -f 'rec-writer/rec-writer-new.c'; then $(CYGPATH_W) 'rec-writer/rec-writer-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-writer-new.c'; fi` + +rec-writer/runtests-rec-write-rset.o: rec-writer/rec-write-rset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-rset.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-rset.Tpo -c -o rec-writer/runtests-rec-write-rset.o `test -f 'rec-writer/rec-write-rset.c' || echo '$(srcdir)/'`rec-writer/rec-write-rset.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-rset.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-rset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-rset.c' object='rec-writer/runtests-rec-write-rset.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-rset.o `test -f 'rec-writer/rec-write-rset.c' || echo '$(srcdir)/'`rec-writer/rec-write-rset.c + +rec-writer/runtests-rec-write-rset.obj: rec-writer/rec-write-rset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-rset.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-rset.Tpo -c -o rec-writer/runtests-rec-write-rset.obj `if test -f 'rec-writer/rec-write-rset.c'; then $(CYGPATH_W) 'rec-writer/rec-write-rset.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-rset.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-rset.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-rset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-rset.c' object='rec-writer/runtests-rec-write-rset.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-rset.obj `if test -f 'rec-writer/rec-write-rset.c'; then $(CYGPATH_W) 'rec-writer/rec-write-rset.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-rset.c'; fi` + +rec-writer/runtests-rec-write-db.o: rec-writer/rec-write-db.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-db.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-db.Tpo -c -o rec-writer/runtests-rec-write-db.o `test -f 'rec-writer/rec-write-db.c' || echo '$(srcdir)/'`rec-writer/rec-write-db.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-db.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-db.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-db.c' object='rec-writer/runtests-rec-write-db.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-db.o `test -f 'rec-writer/rec-write-db.c' || echo '$(srcdir)/'`rec-writer/rec-write-db.c + +rec-writer/runtests-rec-write-db.obj: rec-writer/rec-write-db.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-db.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-db.Tpo -c -o rec-writer/runtests-rec-write-db.obj `if test -f 'rec-writer/rec-write-db.c'; then $(CYGPATH_W) 'rec-writer/rec-write-db.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-db.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-db.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-db.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-db.c' object='rec-writer/runtests-rec-write-db.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-db.obj `if test -f 'rec-writer/rec-write-db.c'; then $(CYGPATH_W) 'rec-writer/rec-write-db.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-db.c'; fi` + +rec-writer/runtests-rec-write-field-name-str.o: rec-writer/rec-write-field-name-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-name-str.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Tpo -c -o rec-writer/runtests-rec-write-field-name-str.o `test -f 'rec-writer/rec-write-field-name-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-name-str.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-field-name-str.c' object='rec-writer/runtests-rec-write-field-name-str.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-name-str.o `test -f 'rec-writer/rec-write-field-name-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-name-str.c + +rec-writer/runtests-rec-write-field-name-str.obj: rec-writer/rec-write-field-name-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-name-str.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Tpo -c -o rec-writer/runtests-rec-write-field-name-str.obj `if test -f 'rec-writer/rec-write-field-name-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-name-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-name-str.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-field-name-str.c' object='rec-writer/runtests-rec-write-field-name-str.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-name-str.obj `if test -f 'rec-writer/rec-write-field-name-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-name-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-name-str.c'; fi` + +rec-writer/runtests-rec-write-field-str.o: rec-writer/rec-write-field-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-str.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Tpo -c -o rec-writer/runtests-rec-write-field-str.o `test -f 'rec-writer/rec-write-field-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-str.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-field-str.c' object='rec-writer/runtests-rec-write-field-str.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-str.o `test -f 'rec-writer/rec-write-field-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-str.c + +rec-writer/runtests-rec-write-field-str.obj: rec-writer/rec-write-field-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-str.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Tpo -c -o rec-writer/runtests-rec-write-field-str.obj `if test -f 'rec-writer/rec-write-field-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-str.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-field-str.c' object='rec-writer/runtests-rec-write-field-str.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-str.obj `if test -f 'rec-writer/rec-write-field-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-str.c'; fi` + +rec-writer/runtests-rec-write-comment-str.o: rec-writer/rec-write-comment-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-comment-str.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Tpo -c -o rec-writer/runtests-rec-write-comment-str.o `test -f 'rec-writer/rec-write-comment-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-comment-str.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-comment-str.c' object='rec-writer/runtests-rec-write-comment-str.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-comment-str.o `test -f 'rec-writer/rec-write-comment-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-comment-str.c + +rec-writer/runtests-rec-write-comment-str.obj: rec-writer/rec-write-comment-str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-comment-str.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Tpo -c -o rec-writer/runtests-rec-write-comment-str.obj `if test -f 'rec-writer/rec-write-comment-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-comment-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-comment-str.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-comment-str.c' object='rec-writer/runtests-rec-write-comment-str.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-comment-str.obj `if test -f 'rec-writer/rec-write-comment-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-comment-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-comment-str.c'; fi` + +rec-writer/runtests-tsuite-rec-writer.o: rec-writer/tsuite-rec-writer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-tsuite-rec-writer.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Tpo -c -o rec-writer/runtests-tsuite-rec-writer.o `test -f 'rec-writer/tsuite-rec-writer.c' || echo '$(srcdir)/'`rec-writer/tsuite-rec-writer.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Tpo rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/tsuite-rec-writer.c' object='rec-writer/runtests-tsuite-rec-writer.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-tsuite-rec-writer.o `test -f 'rec-writer/tsuite-rec-writer.c' || echo '$(srcdir)/'`rec-writer/tsuite-rec-writer.c + +rec-writer/runtests-tsuite-rec-writer.obj: rec-writer/tsuite-rec-writer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-tsuite-rec-writer.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Tpo -c -o rec-writer/runtests-tsuite-rec-writer.obj `if test -f 'rec-writer/tsuite-rec-writer.c'; then $(CYGPATH_W) 'rec-writer/tsuite-rec-writer.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/tsuite-rec-writer.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Tpo rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/tsuite-rec-writer.c' object='rec-writer/runtests-tsuite-rec-writer.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-tsuite-rec-writer.obj `if test -f 'rec-writer/tsuite-rec-writer.c'; then $(CYGPATH_W) 'rec-writer/tsuite-rec-writer.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/tsuite-rec-writer.c'; fi` + +rec-sex/runtests-rec-sex-new.o: rec-sex/rec-sex-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-new.o -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-new.Tpo -c -o rec-sex/runtests-rec-sex-new.o `test -f 'rec-sex/rec-sex-new.c' || echo '$(srcdir)/'`rec-sex/rec-sex-new.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-new.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/rec-sex-new.c' object='rec-sex/runtests-rec-sex-new.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-new.o `test -f 'rec-sex/rec-sex-new.c' || echo '$(srcdir)/'`rec-sex/rec-sex-new.c + +rec-sex/runtests-rec-sex-new.obj: rec-sex/rec-sex-new.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-new.obj -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-new.Tpo -c -o rec-sex/runtests-rec-sex-new.obj `if test -f 'rec-sex/rec-sex-new.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-new.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-new.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-new.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/rec-sex-new.c' object='rec-sex/runtests-rec-sex-new.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-new.obj `if test -f 'rec-sex/rec-sex-new.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-new.c'; fi` + +rec-sex/runtests-rec-sex-destroy.o: rec-sex/rec-sex-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-destroy.o -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Tpo -c -o rec-sex/runtests-rec-sex-destroy.o `test -f 'rec-sex/rec-sex-destroy.c' || echo '$(srcdir)/'`rec-sex/rec-sex-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/rec-sex-destroy.c' object='rec-sex/runtests-rec-sex-destroy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-destroy.o `test -f 'rec-sex/rec-sex-destroy.c' || echo '$(srcdir)/'`rec-sex/rec-sex-destroy.c + +rec-sex/runtests-rec-sex-destroy.obj: rec-sex/rec-sex-destroy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-destroy.obj -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Tpo -c -o rec-sex/runtests-rec-sex-destroy.obj `if test -f 'rec-sex/rec-sex-destroy.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-destroy.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/rec-sex-destroy.c' object='rec-sex/runtests-rec-sex-destroy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-destroy.obj `if test -f 'rec-sex/rec-sex-destroy.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-destroy.c'; fi` + +rec-sex/runtests-rec-sex-compile.o: rec-sex/rec-sex-compile.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-compile.o -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Tpo -c -o rec-sex/runtests-rec-sex-compile.o `test -f 'rec-sex/rec-sex-compile.c' || echo '$(srcdir)/'`rec-sex/rec-sex-compile.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/rec-sex-compile.c' object='rec-sex/runtests-rec-sex-compile.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-compile.o `test -f 'rec-sex/rec-sex-compile.c' || echo '$(srcdir)/'`rec-sex/rec-sex-compile.c + +rec-sex/runtests-rec-sex-compile.obj: rec-sex/rec-sex-compile.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-compile.obj -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Tpo -c -o rec-sex/runtests-rec-sex-compile.obj `if test -f 'rec-sex/rec-sex-compile.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-compile.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-compile.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/rec-sex-compile.c' object='rec-sex/runtests-rec-sex-compile.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-compile.obj `if test -f 'rec-sex/rec-sex-compile.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-compile.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-compile.c'; fi` + +rec-sex/runtests-rec-sex-eval.o: rec-sex/rec-sex-eval.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-eval.o -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Tpo -c -o rec-sex/runtests-rec-sex-eval.o `test -f 'rec-sex/rec-sex-eval.c' || echo '$(srcdir)/'`rec-sex/rec-sex-eval.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/rec-sex-eval.c' object='rec-sex/runtests-rec-sex-eval.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-eval.o `test -f 'rec-sex/rec-sex-eval.c' || echo '$(srcdir)/'`rec-sex/rec-sex-eval.c + +rec-sex/runtests-rec-sex-eval.obj: rec-sex/rec-sex-eval.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-eval.obj -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Tpo -c -o rec-sex/runtests-rec-sex-eval.obj `if test -f 'rec-sex/rec-sex-eval.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-eval.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-eval.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/rec-sex-eval.c' object='rec-sex/runtests-rec-sex-eval.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-eval.obj `if test -f 'rec-sex/rec-sex-eval.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-eval.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-eval.c'; fi` + +rec-sex/runtests-tsuite-rec-sex.o: rec-sex/tsuite-rec-sex.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-tsuite-rec-sex.o -MD -MP -MF rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Tpo -c -o rec-sex/runtests-tsuite-rec-sex.o `test -f 'rec-sex/tsuite-rec-sex.c' || echo '$(srcdir)/'`rec-sex/tsuite-rec-sex.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Tpo rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/tsuite-rec-sex.c' object='rec-sex/runtests-tsuite-rec-sex.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-tsuite-rec-sex.o `test -f 'rec-sex/tsuite-rec-sex.c' || echo '$(srcdir)/'`rec-sex/tsuite-rec-sex.c + +rec-sex/runtests-tsuite-rec-sex.obj: rec-sex/tsuite-rec-sex.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-tsuite-rec-sex.obj -MD -MP -MF rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Tpo -c -o rec-sex/runtests-tsuite-rec-sex.obj `if test -f 'rec-sex/tsuite-rec-sex.c'; then $(CYGPATH_W) 'rec-sex/tsuite-rec-sex.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/tsuite-rec-sex.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Tpo rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/tsuite-rec-sex.c' object='rec-sex/runtests-tsuite-rec-sex.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-tsuite-rec-sex.obj `if test -f 'rec-sex/tsuite-rec-sex.c'; then $(CYGPATH_W) 'rec-sex/tsuite-rec-sex.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/tsuite-rec-sex.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + elif test -n "$$redo_logs"; then \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +runtests.log: runtests$(EXEEXT) + @p='runtests$(EXEEXT)'; \ + b='runtests'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-recursive +all-am: Makefile $(PROGRAMS) +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f rec-comment/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-comment/$(am__dirstamp) + -rm -f rec-fex/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-fex/$(am__dirstamp) + -rm -f rec-field-name/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-field-name/$(am__dirstamp) + -rm -f rec-field/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-field/$(am__dirstamp) + -rm -f rec-mset/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-mset/$(am__dirstamp) + -rm -f rec-parser/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-parser/$(am__dirstamp) + -rm -f rec-record/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-record/$(am__dirstamp) + -rm -f rec-sex/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-sex/$(am__dirstamp) + -rm -f rec-type-reg/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-type-reg/$(am__dirstamp) + -rm -f rec-type/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-type/$(am__dirstamp) + -rm -f rec-writer/$(DEPDIR)/$(am__dirstamp) + -rm -f rec-writer/$(am__dirstamp) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +@CHECK_FALSE@clean-local: +clean: clean-recursive + +clean-am: clean-generic clean-libtool clean-local clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) rec-comment/$(DEPDIR) rec-fex/$(DEPDIR) rec-field-name/$(DEPDIR) rec-field/$(DEPDIR) rec-mset/$(DEPDIR) rec-parser/$(DEPDIR) rec-record/$(DEPDIR) rec-sex/$(DEPDIR) rec-type-reg/$(DEPDIR) rec-type/$(DEPDIR) rec-writer/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) rec-comment/$(DEPDIR) rec-fex/$(DEPDIR) rec-field-name/$(DEPDIR) rec-field/$(DEPDIR) rec-mset/$(DEPDIR) rec-parser/$(DEPDIR) rec-record/$(DEPDIR) rec-sex/$(DEPDIR) rec-type-reg/$(DEPDIR) rec-type/$(DEPDIR) rec-writer/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) check-am install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-TESTS check-am clean clean-generic clean-libtool \ + clean-local clean-noinstPROGRAMS cscopelist-am ctags ctags-am \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +@CHECK_TRUE@clean-local: +@CHECK_TRUE@ -rm -f tests.log + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-destroy.Po b/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-destroy.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-destroy.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-dup.Po b/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-dup.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-dup.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-equal-p.Po b/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-equal-p.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-equal-p.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-new.Po b/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-new.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-new.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-set-text.Po b/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-set-text.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-set-text.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-text.Po b/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-text.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-rec-comment-text.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-tsuite-rec-comment.Po b/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-tsuite-rec-comment.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-comment/.deps/runtests-tsuite-rec-comment.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-destroy.c b/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-destroy.c new file mode 100755 index 0000000..674bdfe --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-destroy.c @@ -0,0 +1,62 @@ +/* -*- mode: C -*- + * + * File: rec-comment-destroy.c + * Date: Fri Oct 29 11:27:27 2010 + * + * GNU recutils - rec_comment_destroy unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_comment_destroy_nominal + * Unit: rec_comment_destroy + * Description: + * + Destroy a properly created comment. + * + + * + 1. The call shall not crash. + */ +START_TEST(rec_comment_destroy_nominal) +{ + rec_comment_t comment; + + comment = rec_comment_new ("abc"); + fail_if (comment == NULL); + rec_comment_destroy (comment); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_comment_destroy (void) +{ + TCase *tc = tcase_create ("rec-comment-destroy"); + tcase_add_test (tc, rec_comment_destroy_nominal); + + return tc; +} + +/* End of rec-comment-destroy.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-dup.c b/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-dup.c new file mode 100755 index 0000000..61c7dc6 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-dup.c @@ -0,0 +1,73 @@ +/* -*- mode: C -*- + * + * File: rec-comment-dup.c + * Date: Fri Oct 29 11:31:22 2010 + * + * GNU recutils - rec_comment_dup unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_comment_dup_nominal + * Unit: rec_comment_dup + * Description: + * + Dup a properly initialized comment. + * + + * + 1. The call to rec_comment_dup shall return a + * + non-null pointer different that the original. + * + 2. The contents of the copy shall be the same + * + than the contents of the original. + */ +START_TEST(rec_comment_dup_nominal) +{ + rec_comment_t comment; + rec_comment_t copy; + + comment = rec_comment_new ("abc"); + fail_if (comment == NULL); + + copy = rec_comment_dup (comment); + fail_if (copy == NULL); + fail_if (copy == comment); + fail_if (strcmp (rec_comment_text (copy), "abc") != 0); + + rec_comment_destroy (comment); + rec_comment_destroy (copy); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_comment_dup (void) +{ + TCase *tc = tcase_create ("rec-comment-dup"); + tcase_add_test (tc, rec_comment_dup_nominal); + + return tc; +} + +/* End of rec-comment-dup.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-equal-p.c b/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-equal-p.c new file mode 100755 index 0000000..b9f38d3 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-equal-p.c @@ -0,0 +1,85 @@ +/* -*- mode: C -*- + * + * File: rec-comment-equal-p.c + * Date: Fri Oct 29 11:58:25 2010 + * + * GNU recutils - rec_comment_equal_p unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_comment_equal_p_nominal + * Unit: rec_comment_equal_p + * Description: + * + Compare comments. + * + + * + 1. The comparisons shall be correct. + */ +START_TEST(rec_comment_equal_p_nominal) +{ + rec_comment_t comment1; + rec_comment_t comment2; + rec_comment_t comment3; + rec_comment_t comment_empty; + + comment1 = rec_comment_new ("abc"); + fail_if (comment1 == NULL); + + comment2 = rec_comment_new ("xyz"); + fail_if (comment2 == NULL); + + comment3 = rec_comment_new ("abc"); /* Same than comment1 */ + fail_if (comment3 == NULL); + + comment_empty = rec_comment_new (""); + fail_if (comment_empty == NULL); + + fail_if (rec_comment_equal_p (comment1, comment2)); + fail_if (rec_comment_equal_p (comment1, comment_empty)); + fail_if (rec_comment_equal_p (comment2, comment_empty)); + fail_if (!rec_comment_equal_p (comment1, comment1)); + fail_if (!rec_comment_equal_p (comment_empty, comment_empty)); + fail_if (!rec_comment_equal_p (comment1, comment3)); + + rec_comment_destroy (comment1); + rec_comment_destroy (comment2); + rec_comment_destroy (comment3); + rec_comment_destroy (comment_empty); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_comment_equal_p (void) +{ + TCase *tc = tcase_create ("rec-comment-equal-p"); + tcase_add_test (tc, rec_comment_equal_p_nominal); + + return tc; +} + +/* End of rec-comment-equal-p.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-new.c b/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-new.c new file mode 100755 index 0000000..4cf6869 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-new.c @@ -0,0 +1,81 @@ +/* -*- mode: C -*- + * + * File: rec-comment-new.c + * Date: Fri Oct 29 11:22:47 2010 + * + * GNU recutils - rec_comment_new unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_comment_new_nominal + * Unit: rec_comment_new + * Description: + * + Create a new comment from a string. + * + + * + 1. rec_comment_new shall return a non-NULL pointer. + */ +START_TEST(rec_comment_new_nominal) +{ + rec_comment_t comment; + + comment = rec_comment_new ("foo"); + fail_if (comment == NULL); + + rec_comment_destroy (comment); +} +END_TEST + +/*- + * Test: rec_comment_new_null + * Unit: rec_comment_new + * Description: + * + Create a new comment from a NULL. + * + + * + 1. rec_comment_new shall return NULL. + */ +START_TEST(rec_comment_new_null) +{ + rec_comment_t comment; + + comment = rec_comment_new (NULL); + fail_if (comment != NULL); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_comment_new (void) +{ + TCase *tc = tcase_create ("rec_comment_new"); + tcase_add_test (tc, rec_comment_new_nominal); + tcase_add_test (tc, rec_comment_new_null); + + return tc; +} + +/* End of rec-comment-new.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-set-text.c b/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-set-text.c new file mode 100755 index 0000000..b392f29 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-set-text.c @@ -0,0 +1,71 @@ +/* -*- mode: C -*- + * + * File: rec-comment-set-text.c + * Date: Fri Oct 29 11:54:14 2010 + * + * GNU recutils - rec_comment_set_text unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_comment_set_text_nominal + * Unit: rec_comment_set_text + * Description: + * + Set the text of a comment. + * + + * + 1. The function shall change the value of the comment. + */ +START_TEST(rec_comment_set_text_nominal) +{ + rec_comment_t comment; + + comment = rec_comment_new ("abc"); + fail_if (comment == NULL); + + rec_comment_set_text (&comment, "xyz"); + fail_if (strcmp ("xyz", + rec_comment_text (comment)) != 0); + + rec_comment_set_text (&comment, ""); + fail_if (strcmp ("", + rec_comment_text (comment)) != 0); + + rec_comment_destroy (comment); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_comment_set_text (void) +{ + TCase *tc = tcase_create ("rec-comment-set-text"); + tcase_add_test (tc, rec_comment_set_text_nominal); + + return tc; +} + +/* End of rec-comment-set-text.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-text.c b/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-text.c new file mode 100755 index 0000000..f79900a --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-comment/rec-comment-text.c @@ -0,0 +1,87 @@ +/* -*- mode: C -*- + * + * File: rec-comment-text.c + * Date: Fri Oct 29 11:48:45 2010 + * + * GNU recutils - rec_comment_text unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_comment_text_nominal + * Unit: rec_comment_text + * Description: + * + Get the contents of a comment. + * + + * + 1. The function shall return the right contents. + */ +START_TEST(rec_comment_text_nominal) +{ + rec_comment_t comment; + + comment = rec_comment_new ("abc"); + fail_if (comment == NULL); + fail_if (strcmp ("abc", + rec_comment_text (comment)) != 0); + + rec_comment_destroy (comment); +} +END_TEST + +/*- + * Test: rec_comment_text_empty + * Unit: rec_comment_text + * Description: + * + Get the contents of an empty comment. + * + + * + 1. The function shall return the empty string. + */ +START_TEST(rec_comment_text_empty) +{ + rec_comment_t comment; + + comment = rec_comment_new (""); + fail_if (comment == NULL); + fail_if (strcmp ("", + rec_comment_text (comment)) != 0); + + rec_comment_destroy (comment); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_comment_text (void) +{ + TCase *tc = tcase_create ("rec-comment-text"); + tcase_add_test (tc, rec_comment_text_nominal); + tcase_add_test (tc, rec_comment_text_empty); + + return tc; +} + +/* End of rec-comment-text.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-comment/tsuite-rec-comment.c b/devspec.en_US/project/recutils/torture/rec-comment/tsuite-rec-comment.c new file mode 100755 index 0000000..9d0f11b --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-comment/tsuite-rec-comment.c @@ -0,0 +1,52 @@ +/* -*- mode: C -*- + * + * File: tsuite-rec-comment.c + * Date: Fri Oct 29 11:19:36 2010 + * + * GNU recutils - rec_comment test suite + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +extern TCase *test_rec_comment_new (void); +extern TCase *test_rec_comment_destroy (void); +extern TCase *test_rec_comment_dup (void); +extern TCase *test_rec_comment_text (void); +extern TCase *test_rec_comment_set_text (void); +extern TCase *test_rec_comment_equal_p (void); + +Suite * +tsuite_rec_comment () +{ + Suite *s; + + s = suite_create ("rec-comment"); + suite_add_tcase (s, test_rec_comment_new ()); + suite_add_tcase (s, test_rec_comment_destroy ()); + suite_add_tcase (s, test_rec_comment_dup ()); + suite_add_tcase (s, test_rec_comment_text ()); + suite_add_tcase (s, test_rec_comment_set_text ()); + suite_add_tcase (s, test_rec_comment_equal_p ()); + + return s; +} + +/* End of tsuite-rec-comment.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-check.Po b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-check.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-check.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-destroy.Po b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-destroy.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-destroy.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-elem-field-name.Po b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-elem-field-name.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-elem-field-name.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-elem-max.Po b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-elem-max.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-elem-max.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-elem-min.Po b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-elem-min.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-elem-min.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-elem-rewrite-to.Po b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-elem-rewrite-to.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-elem-rewrite-to.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-get.Po b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-get.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-get.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-new.Po b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-new.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-new.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-size.Po b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-size.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-size.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-sort.Po b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-sort.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-sort.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-str.Po b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-str.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-rec-fex-str.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-tsuite-rec-fex.Po b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-tsuite-rec-fex.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/.deps/runtests-tsuite-rec-fex.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-check.c b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-check.c new file mode 100755 index 0000000..7fdb170 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-check.c @@ -0,0 +1,137 @@ +/* -*- mode: C -*- + * + * File: rec-fex-check.c + * Date: Tue Nov 9 17:26:40 2010 + * + * GNU recutils - rec_fex_check unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_fex_check_simple_nominal + * Unit: rec_fex_check + * Description: + * + Check for simple field expressions. + */ +START_TEST(rec_fex_check_simple_nominal) +{ + fail_if (!rec_fex_check ("foo", REC_FEX_SIMPLE)); + fail_if (!rec_fex_check ("foo bar baz", REC_FEX_SIMPLE)); + fail_if (!rec_fex_check ("foo\nbar\nbaz", REC_FEX_SIMPLE)); + fail_if (!rec_fex_check ("foo\tbar\tbaz", REC_FEX_SIMPLE)); +} +END_TEST + +/*- + * Test: rec_fex_check_simple_invalid + * Unit: rec_fex_check + * Description: + * + Check for simple field expressions. + */ +START_TEST(rec_fex_check_simple_invalid) +{ + fail_if (rec_fex_check ("fo!o", REC_FEX_SIMPLE)); + fail_if (rec_fex_check ("foo,bar", REC_FEX_SIMPLE)); +} +END_TEST + +/*- + * Test: rec_fex_check_csv_nominal + * Unit: rec_fex_check + * Description: + * + Check for comma-separated simple field expressions. + */ +START_TEST(rec_fex_check_csv_nominal) +{ + fail_if (!rec_fex_check ("foo", REC_FEX_CSV)); + fail_if (!rec_fex_check ("foo,bar,baz", REC_FEX_CSV)); + fail_if (!rec_fex_check ("foobarbaz,bar,baz", REC_FEX_CSV)); +} +END_TEST + +/*- + * Test: rec_fex_check_csv_invalid + * Unit: rec_fex_check + * Description: + * + Check for csv simple field expressions. + */ +START_TEST(rec_fex_check_csv_invalid) +{ + fail_if (rec_fex_check ("fo!o", REC_FEX_CSV)); + fail_if (rec_fex_check ("foo bar", REC_FEX_CSV)); +} +END_TEST + +/*- + * Test: rec_fex_check_sub_nominal + * Unit: rec_fex_check + * Description: + * + Check for comma-separated field expressions. + */ +START_TEST(rec_fex_check_sub_nominal) +{ + fail_if (!rec_fex_check ("foo", REC_FEX_SUBSCRIPTS)); + fail_if (!rec_fex_check ("foo[10]", REC_FEX_SUBSCRIPTS)); + fail_if (!rec_fex_check ("foo,bar,baz", REC_FEX_SUBSCRIPTS)); + fail_if (!rec_fex_check ("foo[0],bar[1],baz[2]", REC_FEX_SUBSCRIPTS)); + fail_if (!rec_fex_check ("foo[0-10],bar[1-100],baz[2-20]", REC_FEX_SUBSCRIPTS)); + fail_if (!rec_fex_check ("foobarbaz,bar,baz", REC_FEX_SUBSCRIPTS)); + fail_if (!rec_fex_check ("foobarbaz,bar[100-0],baz", REC_FEX_SUBSCRIPTS)); +} +END_TEST + +/*- + * Test: rec_fex_check_sub_invalid + * Unit: rec_fex_check + * Description: + * + Check for comma-separated field expressions. + */ +START_TEST(rec_fex_check_sub_invalid) +{ + fail_if (rec_fex_check ("fo!o", REC_FEX_SUBSCRIPTS)); + fail_if (rec_fex_check ("foo[]", REC_FEX_SUBSCRIPTS)); + fail_if (rec_fex_check ("foo bar", REC_FEX_SUBSCRIPTS)); + fail_if (rec_fex_check ("foo,bar[[10]", REC_FEX_SUBSCRIPTS)); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_fex_check (void) +{ + TCase *tc = tcase_create ("rec_fex_check"); + tcase_add_test (tc, rec_fex_check_simple_nominal); + tcase_add_test (tc, rec_fex_check_simple_invalid); + tcase_add_test (tc, rec_fex_check_csv_nominal); + tcase_add_test (tc, rec_fex_check_csv_invalid); + tcase_add_test (tc, rec_fex_check_sub_nominal); + tcase_add_test (tc, rec_fex_check_sub_invalid); + + return tc; +} + +/* End of rec-fex-check.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-destroy.c b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-destroy.c new file mode 100755 index 0000000..195329a --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-destroy.c @@ -0,0 +1,61 @@ +/* -*- mode: C -*- + * + * File: rec-fex-destroy.c + * Date: Tue Nov 9 15:54:08 2010 + * + * GNU recutils - rec_fex_destroy unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_fex_destroy_nominal + * Unit: rec_fex_destroy + * Description: + * + Destroy a properly initialized field expression. + */ +START_TEST(rec_fex_destroy_nominal) +{ + rec_fex_t fex; + + fex = rec_fex_new ("foo", REC_FEX_SIMPLE); + fail_if (fex == NULL); + + rec_fex_destroy (fex); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_fex_destroy (void) +{ + TCase *tc = tcase_create ("rec_fex_new"); + tcase_add_test (tc, rec_fex_destroy_nominal); + + return tc; +} + +/* End of rec-fex-destroy.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-elem-field-name.c b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-elem-field-name.c new file mode 100755 index 0000000..a5c8c74 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-elem-field-name.c @@ -0,0 +1,71 @@ +/* -*- mode: C -*- + * + * File: rec-fex-elem-field-name.c + * Date: Wed Nov 10 12:28:21 2010 + * + * GNU recutils - rec_fex_elem_field_name unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_fex_elem_field_name_nominal + * Unit: rec_fex_elem_field_name + * Description: + * + Get the field name of a field expression + * + element. + */ +START_TEST(rec_fex_elem_field_name_nominal) +{ + rec_fex_t fex; + rec_fex_elem_t elem; + const char *fname_bar; + + fname_bar = "bar"; + + fex = rec_fex_new ("foo bar baz", REC_FEX_SIMPLE); + fail_if (fex == NULL); + + elem = rec_fex_get (fex, 1); + fail_if (elem == NULL); + fail_if (!rec_field_name_equal_p (rec_fex_elem_field_name (elem), + fname_bar)); + + rec_fex_destroy (fex); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_fex_elem_field_name (void) +{ + TCase *tc = tcase_create ("rec_fex_elem_field_name"); + tcase_add_test (tc, rec_fex_elem_field_name_nominal); + + return tc; +} + +/* End of rec-fex-elem-field-name.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-elem-max.c b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-elem-max.c new file mode 100755 index 0000000..5520958 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-elem-max.c @@ -0,0 +1,120 @@ +/* -*- mode: C -*- + * + * File: rec-fex-elem-max.c + * Date: Fri Nov 12 12:38:03 2010 + * + * GNU recutils - rec_fex_elem_max unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_fex_elem_max_nosub + * Unit: rec_fex_elem_max + * Description: + * + Get the max index of an entry in + * + a field expression created without + * + subscripts. + * + + * + The max subscript shall be -1 in this case. + */ +START_TEST(rec_fex_elem_max_nosub) +{ + rec_fex_t fex; + rec_fex_elem_t elem; + + fex = rec_fex_new ("foo bar baz", REC_FEX_SIMPLE); + fail_if (fex == NULL); + + elem = rec_fex_get (fex, 1); + fail_if (elem == NULL); + fail_if (rec_fex_elem_max (elem) != -1); + + rec_fex_destroy (fex); +} +END_TEST + +/*- + * Test: rec_fex_elem_max_min + * Unit: rec_fex_elem_max + * Description: + * + Get the max index of an entry in + * + a field expression created with + * + a min subscript. + */ +START_TEST(rec_fex_elem_max_min) +{ + rec_fex_t fex; + rec_fex_elem_t elem; + + fex = rec_fex_new ("foo,bar[6],baz", REC_FEX_SUBSCRIPTS); + fail_if (fex == NULL); + + elem = rec_fex_get (fex, 1); + fail_if (elem == NULL); + fail_if (rec_fex_elem_max (elem) != -1); + + rec_fex_destroy (fex); +} +END_TEST + +/*- + * Test: rec_fex_elem_max_minmax + * Unit: rec_fex_elem_max + * Description: + * + Get the max index of an entry in + * + a field expression created with + * + full subscripts (both min and max). + */ +START_TEST(rec_fex_elem_max_minmax) +{ + rec_fex_t fex; + rec_fex_elem_t elem; + + fex = rec_fex_new ("foo,bar[2-10],baz", REC_FEX_SUBSCRIPTS); + fail_if (fex == NULL); + + elem = rec_fex_get (fex, 1); + fail_if (elem == NULL); + fail_if (rec_fex_elem_max (elem) != 10); + + rec_fex_destroy (fex); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_fex_elem_max (void) +{ + TCase *tc = tcase_create ("rec_fex_elem_max"); + tcase_add_test (tc, rec_fex_elem_max_nosub); + tcase_add_test (tc, rec_fex_elem_max_min); + tcase_add_test (tc, rec_fex_elem_max_minmax); + + return tc; +} + +/* End of rec-fex-elem-max.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-elem-min.c b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-elem-min.c new file mode 100755 index 0000000..c4e4c2d --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-elem-min.c @@ -0,0 +1,120 @@ +/* -*- mode: C -*- + * + * File: rec-fex-elem-min.c + * Date: Fri Nov 12 12:38:03 2010 + * + * GNU recutils - rec_fex_elem_min unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_fex_elem_min_nosub + * Unit: rec_fex_elem_min + * Description: + * + Get the min index of an entry in + * + a field expression created without + * + subscripts. + * + + * + The min subscript shall be -1 in this case. + */ +START_TEST(rec_fex_elem_min_nosub) +{ + rec_fex_t fex; + rec_fex_elem_t elem; + + fex = rec_fex_new ("foo bar baz", REC_FEX_SIMPLE); + fail_if (fex == NULL); + + elem = rec_fex_get (fex, 1); + fail_if (elem == NULL); + fail_if (rec_fex_elem_min (elem) != -1); + + rec_fex_destroy (fex); +} +END_TEST + +/*- + * Test: rec_fex_elem_min_min + * Unit: rec_fex_elem_min + * Description: + * + Get the min index of an entry in + * + a field expression created with + * + a min subscript. + */ +START_TEST(rec_fex_elem_min_min) +{ + rec_fex_t fex; + rec_fex_elem_t elem; + + fex = rec_fex_new ("foo,bar[6],baz", REC_FEX_SUBSCRIPTS); + fail_if (fex == NULL); + + elem = rec_fex_get (fex, 1); + fail_if (elem == NULL); + fail_if (rec_fex_elem_min (elem) != 6); + + rec_fex_destroy (fex); +} +END_TEST + +/*- + * Test: rec_fex_elem_min_minmax + * Unit: rec_fex_elem_min + * Description: + * + Get the min index of an entry in + * + a field expression created with + * + full subscripts (both min and max). + */ +START_TEST(rec_fex_elem_min_minmax) +{ + rec_fex_t fex; + rec_fex_elem_t elem; + + fex = rec_fex_new ("foo,bar[2-10],baz", REC_FEX_SUBSCRIPTS); + fail_if (fex == NULL); + + elem = rec_fex_get (fex, 1); + fail_if (elem == NULL); + fail_if (rec_fex_elem_min (elem) != 2); + + rec_fex_destroy (fex); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_fex_elem_min (void) +{ + TCase *tc = tcase_create ("rec_fex_elem_min"); + tcase_add_test (tc, rec_fex_elem_min_nosub); + tcase_add_test (tc, rec_fex_elem_min_min); + tcase_add_test (tc, rec_fex_elem_min_minmax); + + return tc; +} + +/* End of rec-fex-elem-min.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-elem-rewrite-to.c b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-elem-rewrite-to.c new file mode 100755 index 0000000..03c0565 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-elem-rewrite-to.c @@ -0,0 +1,93 @@ +/* -*- mode: C -*- Time-stamp: "2015-04-27 19:59:28 jemarch" + * + * File: rec-fex-elem-rewrite-to.c + * Date: Sun Feb 26 13:14:15 2012 + * + * GNU recutils - rec_fex_elem_rewrite_to unit tests. + * + */ + +/* Copyright (C) 2012-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_fex_elem_rewrite_to_default + * Unit: rec_fex_elem_rewrite_to + * Description: + * + The rewrite_to property of a fex + * + elem without a rewrite rule must be NULL. + */ +START_TEST(rec_fex_elem_rewrite_to_default) +{ + rec_fex_t fex; + rec_fex_elem_t elem; + + fex = rec_fex_new ("foo,bar,baz", REC_FEX_SUBSCRIPTS); + fail_if (fex == NULL); + + elem = rec_fex_get (fex, 0); + fail_if (elem == NULL); + fail_if (rec_fex_elem_rewrite_to (elem) != NULL); + + rec_fex_destroy (fex); +} +END_TEST + +/*- + * Test: rec_fex_elem_rewrite_to_nominal + * Unit: rec_fex_elem_rewrite_to + * Description: + * + The rewrite_to property of a fex + * + elem must be properly parsed and returned. + */ +START_TEST(rec_fex_elem_rewrite_to_nominal) +{ + rec_fex_t fex; + rec_fex_elem_t elem; + + fex = rec_fex_new ("foo,bar:xxx,baz", REC_FEX_SUBSCRIPTS); + fail_if (fex == NULL); + + elem = rec_fex_get (fex, 1); + fail_if (elem == NULL); + fail_if (rec_fex_elem_rewrite_to (elem) == NULL); + fail_if (strcmp (rec_fex_elem_rewrite_to (elem), "xxx") != 0); + + rec_fex_destroy (fex); +} +END_TEST + +/* + * Test case creation function + */ + +TCase * +test_rec_fex_elem_rewrite_to (void) +{ + TCase *tc = tcase_create ("rec_fex_elem_rewrite_to"); + tcase_add_test (tc, rec_fex_elem_rewrite_to_default); + tcase_add_test (tc, rec_fex_elem_rewrite_to_nominal); + + return tc; +} + +/* End of rec-fex-elem-rewrite-to.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-get.c b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-get.c new file mode 100755 index 0000000..9af16e9 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-get.c @@ -0,0 +1,104 @@ +/* -*- mode: C -*- + * + * File: rec-fex-get.c + * Date: Wed Nov 10 12:10:43 2010 + * + * GNU recutils - rec_fex_get unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_fex_get_nominal + * Unit: rec_fex_get + * Description: + * + Get elements from a field expression. + */ +START_TEST(rec_fex_get_nominal) +{ + rec_fex_t fex; + rec_fex_elem_t elem; + const char *fname_aaa; + const char *fname_bbb; + + fname_aaa = "aaa"; + fname_bbb = "bbb"; + + fex = rec_fex_new ("aaa bbb", REC_FEX_SIMPLE); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 2); + + elem = rec_fex_get (fex, 0); + fail_if (elem == NULL); + fail_if (!rec_field_name_equal_p (rec_fex_elem_field_name (elem), + fname_aaa)); + elem = rec_fex_get (fex, 1); + fail_if (elem == NULL); + fail_if (!rec_field_name_equal_p (rec_fex_elem_field_name (elem), + fname_bbb)); + + rec_fex_destroy (fex); +} +END_TEST + +/*- + * Test: rec_fex_get_invalid + * Unit: rec_fex_get + * Description: + * + Get elements from a field expression + * + providing invalid positions. + * + + * + The calls to 'rec_fex_get' shall return + * + NULL in those cases. + */ +START_TEST(rec_fex_get_invalid) +{ + rec_fex_t fex; + + fex = rec_fex_new ("aaa bbb ccc", REC_FEX_SIMPLE); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 3); + + fail_if (rec_fex_get (fex, -10) != NULL); + fail_if (rec_fex_get (fex, 4) != NULL); + fail_if (rec_fex_get (fex, 20000) != NULL); + + rec_fex_destroy (fex); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_fex_get (void) +{ + TCase *tc = tcase_create ("rec_fex_get"); + tcase_add_test (tc, rec_fex_get_nominal); + tcase_add_test (tc, rec_fex_get_invalid); + + return tc; +} + +/* End of rec-fex-get.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-new.c b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-new.c new file mode 100755 index 0000000..ecfd2e1 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-new.c @@ -0,0 +1,297 @@ +/* -*- mode: C -*- + * + * File: rec-fex-new.c + * Date: Tue Nov 9 14:04:42 2010 + * + * GNU recutils - rec_fex_new unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_fex_new_single + * Unit: rec_fex_new + * Description: + * + Create field expressions composed by a single + * + field. It shall work for any kind of field name. + */ +START_TEST(rec_fex_new_single) +{ + rec_fex_t fex; + const char *fname_foo; + const char *fname_foobar; + const char *fname_foobarbaz; + + fex = rec_fex_new (NULL, REC_FEX_SIMPLE); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 0); + rec_fex_destroy (fex); + + fname_foo = "foo"; + fname_foobar = "foobar"; + fname_foobarbaz = "foobarbaz"; + + fex = rec_fex_new ("foo", REC_FEX_SIMPLE); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 1); + fail_if (!rec_field_name_equal_p (fname_foo, + rec_fex_elem_field_name (rec_fex_get (fex, 0)))); + fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != -1); + fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); + rec_fex_destroy (fex); + + fex = rec_fex_new ("foobarbaz", REC_FEX_SIMPLE); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 1); + fail_if (!rec_field_name_equal_p (fname_foobarbaz, + rec_fex_elem_field_name (rec_fex_get (fex, 0)))); + fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != -1); + fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); + rec_fex_destroy (fex); +} +END_TEST + +/*- + * Test: rec_fex_new_simple + * Unit: rec_fex_new + * Description: + * + Create field expressions of the SIMPLE variety. + */ +START_TEST(rec_fex_new_simple) +{ + rec_fex_t fex; + const char *fname_foo; + const char *fname_foobar; + const char *fname_foobarbaz; + + fname_foo = "foo"; + fname_foobar = "foobar"; + fname_foobarbaz = "foobarbaz"; + + fex = rec_fex_new ("foo foobar foobarbaz", REC_FEX_SIMPLE); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 3); + fail_if (!rec_field_name_equal_p (fname_foo, + rec_fex_elem_field_name (rec_fex_get (fex, 0)))); + fail_if (!rec_field_name_equal_p (fname_foobar, + rec_fex_elem_field_name (rec_fex_get (fex, 1)))); + fail_if (!rec_field_name_equal_p (fname_foobarbaz, + rec_fex_elem_field_name (rec_fex_get (fex, 2)))); + fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != -1); + fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); + fail_if (rec_fex_elem_min (rec_fex_get (fex, 1)) != -1); + fail_if (rec_fex_elem_max (rec_fex_get (fex, 1)) != -1); + fail_if (rec_fex_elem_min (rec_fex_get (fex, 2)) != -1); + fail_if (rec_fex_elem_max (rec_fex_get (fex, 2)) != -1); + rec_fex_destroy (fex); + + fex = rec_fex_new ("\tfoo foobar\n ", REC_FEX_SIMPLE); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 2); + fail_if (!rec_field_name_equal_p (fname_foo, + rec_fex_elem_field_name (rec_fex_get (fex, 0)))); + fail_if (!rec_field_name_equal_p (fname_foobar, + rec_fex_elem_field_name (rec_fex_get (fex, 1)))); + fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != -1); + fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); + fail_if (rec_fex_elem_min (rec_fex_get (fex, 1)) != -1); + fail_if (rec_fex_elem_max (rec_fex_get (fex, 1)) != -1); + rec_fex_destroy (fex); + + fex = rec_fex_new ("foo\nfoobar\nfoobarbaz", REC_FEX_SIMPLE); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 3); + fail_if (!rec_field_name_equal_p (fname_foo, + rec_fex_elem_field_name (rec_fex_get (fex, 0)))); + fail_if (!rec_field_name_equal_p (fname_foobar, + rec_fex_elem_field_name (rec_fex_get (fex, 1)))); + fail_if (!rec_field_name_equal_p (fname_foobarbaz, + rec_fex_elem_field_name (rec_fex_get (fex, 2)))); + fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != -1); + fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); + fail_if (rec_fex_elem_min (rec_fex_get (fex, 1)) != -1); + fail_if (rec_fex_elem_max (rec_fex_get (fex, 1)) != -1); + fail_if (rec_fex_elem_min (rec_fex_get (fex, 2)) != -1); + fail_if (rec_fex_elem_max (rec_fex_get (fex, 2)) != -1); + rec_fex_destroy (fex); + + fex = rec_fex_new ("\n\t foo\nfoobarbaz\n", REC_FEX_SIMPLE); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 2); + fail_if (!rec_field_name_equal_p (fname_foo, + rec_fex_elem_field_name (rec_fex_get (fex, 0)))); + fail_if (!rec_field_name_equal_p (fname_foobarbaz, + rec_fex_elem_field_name (rec_fex_get (fex, 1)))); + fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != -1); + fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); + fail_if (rec_fex_elem_min (rec_fex_get (fex, 1)) != -1); + fail_if (rec_fex_elem_max (rec_fex_get (fex, 1)) != -1); + rec_fex_destroy (fex); +} +END_TEST + +/*- + * Test: rec_fex_new_csv + * Unit: rec_fex_new + * Description: + * + Create field expressions of the CSV variety. + */ +START_TEST(rec_fex_new_csv) +{ + rec_fex_t fex; + + fex = rec_fex_new ("foo", REC_FEX_CSV); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 1); + rec_fex_destroy (fex); + + fex = rec_fex_new ("foo,bar,baz", REC_FEX_CSV); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 3); + rec_fex_destroy (fex); + + fex = rec_fex_new ("foo,bar", REC_FEX_CSV); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 2); + rec_fex_destroy (fex); +} +END_TEST + +/*- + * Test: rec_fex_new_subscripts + * Unit: rec_fex_new + * Description: + * + Create field expressions featuring subscripts. + */ +START_TEST(rec_fex_new_subscripts) +{ + rec_fex_t fex; + const char *fname_foo; + const char *fname_foobar; + const char *fname_foobarbaz; + + fname_foo = "foo"; + fname_foobar = "foobar"; + fname_foobarbaz = "foobarbaz"; + + fex = rec_fex_new ("foo", REC_FEX_SUBSCRIPTS); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 1); + fail_if (!rec_field_name_equal_p (fname_foo, + rec_fex_elem_field_name (rec_fex_get (fex, 0)))); + fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != -1); + fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); + rec_fex_destroy (fex); + + fex = rec_fex_new ("foo[1]", REC_FEX_SUBSCRIPTS); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 1); + fail_if (!rec_field_name_equal_p (fname_foo, + rec_fex_elem_field_name (rec_fex_get (fex, 0)))); + fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != 1); + fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); + rec_fex_destroy (fex); + + fex = rec_fex_new ("foo[1],foobar[0-23],foobarbaz", REC_FEX_SUBSCRIPTS); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 3); + fail_if (!rec_field_name_equal_p (fname_foo, + rec_fex_elem_field_name (rec_fex_get (fex, 0)))); + fail_if (!rec_field_name_equal_p (fname_foobar, + rec_fex_elem_field_name (rec_fex_get (fex, 1)))); + fail_if (!rec_field_name_equal_p (fname_foobarbaz, + rec_fex_elem_field_name (rec_fex_get (fex, 2)))); + fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != 1); + fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); + fail_if (rec_fex_elem_min (rec_fex_get (fex, 1)) != 0); + fail_if (rec_fex_elem_max (rec_fex_get (fex, 1)) != 23); + fail_if (rec_fex_elem_min (rec_fex_get (fex, 2)) != -1); + fail_if (rec_fex_elem_max (rec_fex_get (fex, 2)) != -1); + rec_fex_destroy (fex); +} +END_TEST + +/*- + * Test: rec_fex_new_invalid + * Unit: rec_fex_new + * Description: + * + Try to create field expressions from an invalid string. + * + The creation of the fex shall fail. + */ +START_TEST(rec_fex_new_invalid) +{ + rec_fex_t fex; + + fex = rec_fex_new ("", REC_FEX_SIMPLE); + fail_if (fex != NULL); + + fex = rec_fex_new ("?", REC_FEX_SIMPLE); + fail_if (fex != NULL); + + fex = rec_fex_new ("foo&", REC_FEX_SIMPLE); + fail_if (fex != NULL); + + fex = rec_fex_new ("foo foo:bar", REC_FEX_SIMPLE); + fail_if (fex != NULL); + + fex = rec_fex_new ("foo,bar,!,baz", REC_FEX_CSV); + fail_if (fex != NULL); + + fex = rec_fex_new ("foo[]", REC_FEX_SUBSCRIPTS); + fail_if (fex != NULL); + + fex = rec_fex_new ("foo[10 10]", REC_FEX_SUBSCRIPTS); + fail_if (fex != NULL); + + fex = rec_fex_new ("bar[[10]", REC_FEX_SUBSCRIPTS); + fail_if (fex != NULL); + + fex = rec_fex_new ("bar,foo[10]]", REC_FEX_SUBSCRIPTS); + fail_if (fex != NULL); + + fex = rec_fex_new ("foo[10-]", REC_FEX_SUBSCRIPTS); + fail_if (fex != NULL); + + fex = rec_fex_new ("foo[-]", REC_FEX_SUBSCRIPTS); + fail_if (fex != NULL); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_fex_new (void) +{ + TCase *tc = tcase_create ("rec_fex_new"); + tcase_add_test (tc, rec_fex_new_single); + tcase_add_test (tc, rec_fex_new_simple); + tcase_add_test (tc, rec_fex_new_csv); + tcase_add_test (tc, rec_fex_new_subscripts); + tcase_add_test (tc, rec_fex_new_invalid); + + return tc; +} + +/* End of rec-fex-new.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-size.c b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-size.c new file mode 100755 index 0000000..e8588dd --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-size.c @@ -0,0 +1,72 @@ +/* -*- mode: C -*- + * + * File: rec-fex-size.c + * Date: Wed Nov 10 11:59:31 2010 + * + * GNU recutils - rec_fex_size unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_fex_size_nominal + * Unit: rec_fex_size + * Description: + * + Get the size of several field + * + expressions. + */ +START_TEST(rec_fex_size_nominal) +{ + rec_fex_t fex; + + fex = rec_fex_new ("foo", REC_FEX_SIMPLE); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 1); + rec_fex_destroy (fex); + + fex = rec_fex_new ("foo bar", REC_FEX_SIMPLE); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 2); + rec_fex_destroy (fex); + + fex = rec_fex_new ("foo,bar,baz", REC_FEX_CSV); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 3); + rec_fex_destroy (fex); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_fex_size (void) +{ + TCase *tc = tcase_create ("rec_fex_size"); + tcase_add_test (tc, rec_fex_size_nominal); + + return tc; +} + +/* End of rec-fex-size.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-sort.c b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-sort.c new file mode 100755 index 0000000..d5954c4 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-sort.c @@ -0,0 +1,78 @@ +/* -*- mode: C -*- + * + * File: rec-fex-sort.c + * Date: Tue Nov 9 17:51:59 2010 + * + * GNU recutils - rec_fex_sort unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_fex_sort_nominal + * Unit: rec_fex_sort + * Description: + * + Sort a field expression. + */ +START_TEST(rec_fex_sort_nominal) +{ + rec_fex_t fex; + const char *fname_aaa; + const char *fname_bbb; + const char *fname_ccc; + + fname_aaa = "aaa"; + fname_bbb = "bbb"; + fname_ccc = "ccc"; + + fex = rec_fex_new ("ccc[2],aaa[0],bbb[1]", REC_FEX_SUBSCRIPTS); + fail_if (fex == NULL); + fail_if (rec_fex_size (fex) != 3); + + rec_fex_sort (fex); + + fail_if (!rec_field_name_equal_p (rec_fex_elem_field_name (rec_fex_get (fex, 0)), + fname_aaa)); + fail_if (!rec_field_name_equal_p (rec_fex_elem_field_name (rec_fex_get (fex, 1)), + fname_bbb)); + fail_if (!rec_field_name_equal_p (rec_fex_elem_field_name (rec_fex_get (fex, 2)), + fname_ccc)); + + rec_fex_destroy (fex); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_fex_sort (void) +{ + TCase *tc = tcase_create ("rec_fex_sort"); + tcase_add_test (tc, rec_fex_sort_nominal); + + return tc; +} + +/* End of rec-fex-sort.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-str.c b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-str.c new file mode 100755 index 0000000..6b4cccf --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/rec-fex-str.c @@ -0,0 +1,107 @@ +/* -*- mode: C -*- + * + * File: rec-fex-str.c + * Date: Thu Nov 25 16:13:12 2010 + * + * GNU recutils - rec_fex_str unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> +#include <stdlib.h> + +#include <rec.h> + +/*- + * Test: rec_fex_str_nominal + * Unit: rec_fex_str + * Description: + * + Write fexes in strings. + */ +START_TEST(rec_fex_str_nominal) +{ + rec_fex_t fex; + char *str; + + fex = rec_fex_new ("foo", REC_FEX_SIMPLE); + fail_if (fex == NULL); + str = rec_fex_str (fex, REC_FEX_SIMPLE); + fail_if (str == NULL); + fail_if (strcmp (str, "foo") != 0); + free (str); + str = rec_fex_str (fex, REC_FEX_CSV); + fail_if (str == NULL); + fail_if (strcmp (str, "foo") != 0); + free (str); + str = rec_fex_str (fex, REC_FEX_SUBSCRIPTS); + fail_if (str == NULL); + fail_if (strcmp (str, "foo") != 0); + free (str); + rec_fex_destroy (fex); + + fex = rec_fex_new ("foo bar baz", REC_FEX_SIMPLE); + fail_if (fex == NULL); + str = rec_fex_str (fex, REC_FEX_SIMPLE); + fail_if (str == NULL); + fail_if (strcmp (str, "foo bar baz") != 0); + free (str); + str = rec_fex_str (fex, REC_FEX_CSV); + fail_if (str == NULL); + fail_if (strcmp (str, "foo,bar,baz") != 0); + free (str); + str = rec_fex_str (fex, REC_FEX_SUBSCRIPTS); + fail_if (str == NULL); + fail_if (strcmp (str, "foo,bar,baz") != 0); + free (str); + rec_fex_destroy (fex); + + fex = rec_fex_new ("foo[0],bar[1-2],baz", REC_FEX_SUBSCRIPTS); + fail_if (fex == NULL); + str = rec_fex_str (fex, REC_FEX_SIMPLE); + fail_if (str == NULL); + fail_if (strcmp (str, "foo bar baz") != 0); + free (str); + str = rec_fex_str (fex, REC_FEX_CSV); + fail_if (str == NULL); + fail_if (strcmp (str, "foo,bar,baz") != 0); + free (str); + str = rec_fex_str (fex, REC_FEX_SUBSCRIPTS); + fail_if (str == NULL); + fail_if (strcmp (str, "foo[0],bar[1-2],baz") != 0); + free (str); + rec_fex_destroy (fex); +} +END_TEST + + +/* + * Test case creation function + */ +TCase * +test_rec_fex_str (void) +{ + TCase *tc = tcase_create ("rec_fex_str"); + tcase_add_test (tc, rec_fex_str_nominal); + + return tc; +} + +/* End of rec-fex-str.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-fex/tsuite-rec-fex.c b/devspec.en_US/project/recutils/torture/rec-fex/tsuite-rec-fex.c new file mode 100755 index 0000000..415ee21 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-fex/tsuite-rec-fex.c @@ -0,0 +1,62 @@ +/* -*- mode: C -*- + * + * File: tsuite-rec-fex.c + * Date: Tue Nov 9 14:02:54 2010 + * + * GNU recutils - rec_fex test suite. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +extern TCase *test_rec_fex_new (void); +extern TCase *test_rec_fex_destroy (void); +extern TCase *test_rec_fex_check (void); +extern TCase *test_rec_fex_sort (void); +extern TCase *test_rec_fex_size (void); +extern TCase *test_rec_fex_get (void); +extern TCase *test_rec_fex_elem_field_name (void); +extern TCase *test_rec_fex_elem_rewrite_to (void); +extern TCase *test_rec_fex_elem_min (void); +extern TCase *test_rec_fex_elem_max (void); +extern TCase *test_rec_fex_str (void); + +Suite * +tsuite_rec_fex () +{ + Suite *s; + + s = suite_create ("rec-fex"); + suite_add_tcase (s, test_rec_fex_new ()); + suite_add_tcase (s, test_rec_fex_destroy ()); + suite_add_tcase (s, test_rec_fex_check ()); + suite_add_tcase (s, test_rec_fex_sort ()); + suite_add_tcase (s, test_rec_fex_size ()); + suite_add_tcase (s, test_rec_fex_get ()); + suite_add_tcase (s, test_rec_fex_elem_field_name ()); + suite_add_tcase (s, test_rec_fex_elem_rewrite_to ()); + suite_add_tcase (s, test_rec_fex_elem_min ()); + suite_add_tcase (s, test_rec_fex_elem_max ()); + suite_add_tcase (s, test_rec_fex_str ()); + + return s; +} + +/* End of tsuite-rec-fex.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field-name/.deps/runtests-rec-field-name-equal-p.Po b/devspec.en_US/project/recutils/torture/rec-field-name/.deps/runtests-rec-field-name-equal-p.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field-name/.deps/runtests-rec-field-name-equal-p.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field-name/.deps/runtests-rec-field-name-normalise.Po b/devspec.en_US/project/recutils/torture/rec-field-name/.deps/runtests-rec-field-name-normalise.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field-name/.deps/runtests-rec-field-name-normalise.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field-name/.deps/runtests-rec-field-name-p.Po b/devspec.en_US/project/recutils/torture/rec-field-name/.deps/runtests-rec-field-name-p.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field-name/.deps/runtests-rec-field-name-p.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field-name/.deps/runtests-tsuite-rec-field-name.Po b/devspec.en_US/project/recutils/torture/rec-field-name/.deps/runtests-tsuite-rec-field-name.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field-name/.deps/runtests-tsuite-rec-field-name.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field-name/rec-field-name-equal-p.c b/devspec.en_US/project/recutils/torture/rec-field-name/rec-field-name-equal-p.c new file mode 100755 index 0000000..153fbfd --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field-name/rec-field-name-equal-p.c @@ -0,0 +1,81 @@ +/* -*- mode: C -*- + * + * File: rec-field-name-equal-p.c + * Date: Fri Oct 29 14:35:27 2010 + * + * GNU recutils - rec_field_name_equal_p unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_name_equal_p_empty + * Unit: rec_field_name_equal_p + * Description: + * + Compare two empty field names with + * + rec_field_name_equal_p. + * + + * + 1. The function call shall return true. + */ +START_TEST(rec_field_name_equal_p_empty) +{ + const char *fname1 = ""; + const char *fname2 = ""; + + fail_if (!rec_field_name_equal_p (fname1, fname2)); +} +END_TEST + +/*- + * Test: rec_field_name_equal_p_nonempty + * Unit: rec_field_name_equal_p + * Description: + * + Compare two field names with + * + rec_field_name_equal_p. + */ +START_TEST(rec_field_name_equal_p_nonempty) +{ + const char *fname1 = "a"; + const char *fname2 = "a"; + const char *fname3 = "c"; + + fail_if (!rec_field_name_equal_p (fname1, fname1)); + fail_if (!rec_field_name_equal_p (fname1, fname2)); + fail_if (rec_field_name_equal_p (fname1, fname3)); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_field_name_equal_p (void) +{ + TCase *tc = tcase_create ("rec-field-name-equal-p"); + tcase_add_test (tc, rec_field_name_equal_p_empty); + tcase_add_test (tc, rec_field_name_equal_p_nonempty); + + return tc; +} + +/* End of rec-field-name-equal-p.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field-name/rec-field-name-normalise.c b/devspec.en_US/project/recutils/torture/rec-field-name/rec-field-name-normalise.c new file mode 100755 index 0000000..101e1df --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field-name/rec-field-name-normalise.c @@ -0,0 +1,71 @@ +/* -*- mode: C -*- + * + * File: rec-field-name-normalise.c + * Date: Fri Oct 29 15:38:54 2010 + * + * GNU recutils - rec_field_name_normalise unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdlib.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_name_normalise_nominal + * Unit: rec_field_name_normalise + * Description: + * + Check normalisation of names. + */ +START_TEST(rec_field_name_normalise_nominal) +{ + char *normalised; + + normalised = rec_field_name_normalise ("abc"); + fail_if (normalised == NULL); + fail_if (strcmp (normalised, "abc") != 0); + free (normalised); + + normalised = rec_field_name_normalise ("a#c d"); + fail_if (normalised == NULL); + fail_if (strcmp (normalised, "a_c_d") != 0); + free (normalised); + + normalised = rec_field_name_normalise ("a-b%c_d"); + fail_if (normalised != NULL); + free (normalised); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_field_name_normalise (void) +{ + TCase *tc = tcase_create ("rec_field_name_normalise"); + tcase_add_test (tc, rec_field_name_normalise_nominal); + + return tc; +} + +/* End of rec-field-name-normalise.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field-name/rec-field-name-p.c b/devspec.en_US/project/recutils/torture/rec-field-name/rec-field-name-p.c new file mode 100755 index 0000000..c09ffbe --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field-name/rec-field-name-p.c @@ -0,0 +1,64 @@ +/* -*- mode: C -*- + * + * File: rec-field-name-p.c + * Date: Fri Oct 29 15:26:11 2010 + * + * GNU recutils - rec_field_name_part_str_p unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_name_p_nominal + * Unit: rec_field_name_p + * Description: + * + Check field name parts. + */ +START_TEST(rec_field_name_part_str_p_nominal) +{ + fail_if (rec_field_name_p ("")); + fail_if (rec_field_name_p (":")); + fail_if (rec_field_name_p ("-x")); + fail_if (rec_field_name_p ("_x")); + fail_if (rec_field_name_p ("0x")); + fail_if (rec_field_name_p ("x%")); + fail_if (!rec_field_name_p ("%")); + fail_if (!rec_field_name_p ("ax")); + fail_if (!rec_field_name_p ("Ax")); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_field_name_p (void) +{ + TCase *tc = tcase_create ("rec_field_name_part_str_p"); + tcase_add_test (tc, rec_field_name_part_str_p_nominal); + + return tc; +} + + +/* End of rec-field-name-part-str-p.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field-name/tsuite-rec-field-name.c b/devspec.en_US/project/recutils/torture/rec-field-name/tsuite-rec-field-name.c new file mode 100755 index 0000000..0ccc4e4 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field-name/tsuite-rec-field-name.c @@ -0,0 +1,47 @@ +/* -*- mode: C -*- + * + * File: tsuite-rec-field-name.c + * Date: Fri Oct 29 13:43:08 2010 + * + * GNU recutils - rec_field_name test suite + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +extern TCase *test_rec_field_name_equal_p (void); +extern TCase *test_rec_field_name_normalise (void); +extern TCase *test_rec_field_name_p (void); + +Suite * +tsuite_rec_field_name () +{ + Suite *s; + + s = suite_create ("rec-field-name"); + suite_add_tcase (s, test_rec_field_name_equal_p ()); + suite_add_tcase (s, test_rec_field_name_normalise ()); + suite_add_tcase (s, test_rec_field_name_p ()); + + return s; +} + + +/* End of tsuite-rec-field-name.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-char-location-str.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-char-location-str.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-char-location-str.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-char-location.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-char-location.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-char-location.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-destroy.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-destroy.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-destroy.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-dup.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-dup.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-dup.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-equal-p.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-equal-p.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-equal-p.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-location-str.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-location-str.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-location-str.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-location.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-location.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-location.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-name.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-name.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-name.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-new.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-new.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-new.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-char-location.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-char-location.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-char-location.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-location.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-location.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-location.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-name.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-name.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-name.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-source.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-source.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-source.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-value.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-value.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-set-value.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-source.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-source.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-source.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-to-comment.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-to-comment.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-to-comment.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-value.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-value.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-rec-field-value.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-tsuite-rec-field.Po b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-tsuite-rec-field.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/.deps/runtests-tsuite-rec-field.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-field/rec-field-char-location-str.c b/devspec.en_US/project/recutils/torture/rec-field/rec-field-char-location-str.c new file mode 100755 index 0000000..0cf5bc0 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/rec-field-char-location-str.c @@ -0,0 +1,72 @@ +/* -*- mode: C -*- + * + * File: rec-field-char-location-str.c + * Date: Fri Nov 12 15:01:45 2010 + * + * GNU recutils - rec_field_char_location_str unit tests. + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdlib.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_char_location_str_nominal + * Unit: rec_field_char_location_str + * Description: + * + Get the char location of a field as a string. + */ +START_TEST(rec_field_char_location_str_nominal) +{ + rec_field_t field; + const char *num; + + field = rec_field_new ("foo", "value"); + fail_if (field == NULL); + + num = rec_field_char_location_str (field); + fail_if (num == NULL); + fail_if (strcmp (num, "") != 0); + + rec_field_set_char_location (field, 100); + num = rec_field_char_location_str (field); + fail_if (num == NULL); + fail_if (strcmp (num, "100") != 0); + + rec_field_destroy (field); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_field_char_location_str (void) +{ + TCase *tc = tcase_create ("rec_field_char_location_str"); + tcase_add_test (tc, rec_field_char_location_str_nominal); + + return tc; +} + +/* End of rec-field-char-location.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/rec-field-char-location.c b/devspec.en_US/project/recutils/torture/rec-field/rec-field-char-location.c new file mode 100755 index 0000000..c80fcc6 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/rec-field-char-location.c @@ -0,0 +1,65 @@ +/* -*- mode: C -*- + * + * File: rec-field-char-location.c + * Date: Fri Nov 12 15:01:45 2010 + * + * GNU recutils - rec_field_char_location unit tests. + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_char_location_nominal + * Unit: rec_field_char_location + * Description: + * + Get the char location of a field. + */ +START_TEST(rec_field_char_location_nominal) +{ + rec_field_t field; + + field = rec_field_new ("foo", "value"); + fail_if (field == NULL); + + fail_if (rec_field_char_location (field) != 0); + rec_field_set_char_location (field, 100); + fail_if (rec_field_char_location (field) != 100); + + rec_field_destroy (field); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_field_char_location (void) +{ + TCase *tc = tcase_create ("rec_field_char_location"); + tcase_add_test (tc, rec_field_char_location_nominal); + + return tc; +} + +/* End of rec-field-char-location.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/rec-field-destroy.c b/devspec.en_US/project/recutils/torture/rec-field/rec-field-destroy.c new file mode 100755 index 0000000..c49916a --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/rec-field-destroy.c @@ -0,0 +1,61 @@ +/* -*- mode: C -*- + * + * File: rec-field-destroy.c + * Date: Fri Nov 12 13:19:45 2010 + * + * GNU recutils - rec_field_destroy unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_destroy_nominal + * Unit: rec_field_destroy + * Description: + * + Destroy a field. + */ +START_TEST(rec_field_destroy_nominal) +{ + rec_field_t field; + + field = rec_field_new ("foo", "value"); + fail_if (field == NULL); + + rec_field_destroy (field); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_field_destroy (void) +{ + TCase *tc = tcase_create ("rec_field_new"); + tcase_add_test (tc, rec_field_destroy_nominal); + + return tc; +} + +/* End of rec-field-destroy.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/rec-field-dup.c b/devspec.en_US/project/recutils/torture/rec-field/rec-field-dup.c new file mode 100755 index 0000000..2736b1e --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/rec-field-dup.c @@ -0,0 +1,125 @@ +/* -*- mode: C -*- + * + * File: rec-field-dup.c + * Date: Thu Mar 5 23:29:56 2009 + * + * GNU recutils - rec_field_dup unit tests + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_dup_empty + * Unit: rec_field_dup + * Description: + * + Dup a field with empty name and empty value. + * + + * + 1. The name of the copied field should be the + * + empty string. + * + 2. The value of the copied field should be the + * + empty string. + */ +START_TEST(rec_field_dup_empty) +{ + rec_field_t field; + rec_field_t field_copy; + const char *field_name; + const char *field_value; + + /* Create a field */ + field_name = ""; + field = rec_field_new (field_name, ""); + fail_if(field == NULL); + + /* Create a copy of the field */ + field_copy = rec_field_dup (field); + fail_if(field_copy == NULL); + + /* Get the attributes of the copy */ + field_name = rec_field_name (field_copy); + field_value = rec_field_value (field_copy); + + /* Validate the attributes */ + fail_if(strcmp (field_name, "") != 0); + fail_if(strcmp (field_value, "") != 0); + + rec_field_destroy (field); + rec_field_destroy (field_copy); +} +END_TEST + +/*- + * Test: rec_field_dup_non_empty + * Unit: rec_field_dup + * Description: + * + Dup a field with non-empty name and non-empty value. + * + + * + 1. The name of the copied field should be the + * + appropriate. + * + 2. The value of the copied field should be the + * + appropriate. + */ +START_TEST(rec_field_dup_nonempty) +{ + rec_field_t field; + rec_field_t field_copy; + const char *field_name; + const char *field_value; + + /* Create a field */ + field_name = "name"; + field = rec_field_new (field_name, "value"); + fail_if(field == NULL); + + /* Create a copy of the field */ + field_copy = rec_field_dup (field); + fail_if(field_copy == NULL); + + /* Get the attributes of the copy */ + field_name = rec_field_name (field_copy); + field_value = rec_field_value (field_copy); + + /* Validate the attributes */ + fail_if(strcmp (field_name, "name") != 0); + fail_if(strcmp (field_value, "value") != 0); + + rec_field_destroy (field); + rec_field_destroy (field_copy); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_field_dup (void) +{ + TCase *tc = tcase_create("rec_field_dup"); + tcase_add_test (tc, rec_field_dup_empty); + tcase_add_test (tc, rec_field_dup_nonempty); + + return tc; +} + +/* End of rec-field-dup.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/rec-field-equal-p.c b/devspec.en_US/project/recutils/torture/rec-field/rec-field-equal-p.c new file mode 100755 index 0000000..ac6a2dc --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/rec-field-equal-p.c @@ -0,0 +1,96 @@ +/* -*- mode: C -*- + * + * File: rec-field-equal-p.c + * Date: Fri Nov 12 13:34:34 2010 + * + * GNU recutils - rec_field_equal_p unit tests. + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_equal_p_equal + * Unit: rec_field_equal_p + * Description: + * + Test if two given fields are equal. i.e. + * + they have eql field names and the same value. + */ +START_TEST(rec_field_equal_p_equal) +{ + rec_field_t field1; + rec_field_t field2; + + field1 = rec_field_new ("foo", "value"); + fail_if (field1 == NULL); + + field2 = rec_field_new ("foo", "value"); + fail_if (field2 == NULL); + + fail_if (!rec_field_equal_p (field1, field2)); + + rec_field_destroy (field1); + rec_field_destroy (field2); +} +END_TEST + +/*- + * Test: rec_field_equal_p_nonequal + * Unit: rec_field_equal_p + * Description: + * + Check whether two different fields are + * + equal. + * + + * + The comparison function shall return false. + */ +START_TEST(rec_field_equal_p_nonequal) +{ + rec_field_t field1; + rec_field_t field2; + + field1 = rec_field_new ("foo", "value"); + fail_if (field1 == NULL); + field2 = rec_field_new ("other", "value"); + fail_if (field2 == NULL); + + fail_if (rec_field_equal_p (field1, field2)); + + rec_field_destroy (field1); + rec_field_destroy (field2); +} +END_TEST + +/* + * Test creation function. + */ +TCase * +test_rec_field_equal_p (void) +{ + TCase *tc = tcase_create ("rec_field_equal_p"); + tcase_add_test (tc, rec_field_equal_p_equal); + tcase_add_test (tc, rec_field_equal_p_nonequal); + + return tc; +} + +/* End of rec-field-equal-p.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/rec-field-location-str.c b/devspec.en_US/project/recutils/torture/rec-field/rec-field-location-str.c new file mode 100755 index 0000000..ec4b952 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/rec-field-location-str.c @@ -0,0 +1,71 @@ +/* -*- mode: C -*- + * + * File: rec-field-location-str.c + * Date: Fri Nov 12 15:01:45 2010 + * + * GNU recutils - rec_field_location_str unit tests. + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_location_str_nominal + * Unit: rec_field_location_str + * Description: + * + Get the location of a field as a string. + */ +START_TEST(rec_field_location_str_nominal) +{ + rec_field_t field; + const char *num; + + field = rec_field_new ("foo", "value"); + fail_if (field == NULL); + + num = rec_field_location_str (field); + fail_if (num == NULL); + fail_if (strcmp (num, "") != 0); + + rec_field_set_location (field, 100); + num = rec_field_location_str (field); + fail_if (num == NULL); + fail_if (strcmp (num, "100") != 0); + + rec_field_destroy (field); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_field_location_str (void) +{ + TCase *tc = tcase_create ("rec_field_location_str"); + tcase_add_test (tc, rec_field_location_str_nominal); + + return tc; +} + +/* End of rec-field-location.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/rec-field-location.c b/devspec.en_US/project/recutils/torture/rec-field/rec-field-location.c new file mode 100755 index 0000000..8713fbc --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/rec-field-location.c @@ -0,0 +1,66 @@ +/* -*- mode: C -*- + * + * File: rec-field-location.c + * Date: Fri Nov 12 15:01:45 2010 + * + * GNU recutils - rec_field_location unit tests. + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdlib.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_location_nominal + * Unit: rec_field_location + * Description: + * + Get the location of a field. + */ +START_TEST(rec_field_location_nominal) +{ + rec_field_t field; + + field = rec_field_new ("foo", "value"); + fail_if (field == NULL); + + fail_if (rec_field_location (field) != 0); + rec_field_set_location (field, 100); + fail_if (rec_field_location (field) != 100); + + rec_field_destroy (field); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_field_location (void) +{ + TCase *tc = tcase_create ("rec_field_location"); + tcase_add_test (tc, rec_field_location_nominal); + + return tc; +} + +/* End of rec-field-location.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/rec-field-name.c b/devspec.en_US/project/recutils/torture/rec-field/rec-field-name.c new file mode 100755 index 0000000..bff3697 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/rec-field-name.c @@ -0,0 +1,97 @@ +/* -*- mode: C -*- + * + * File: rec-field-name.c + * Date: Sun Mar 1 17:04:00 2009 + * + * GNU recutils - rec_field_name unit tests + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_name_empty + * Unit: rec_field_name + * Description: + * + Get the name of a field with an empy name + * + + * + 1. The call should not produce an error. + * + 2. The name of the field should be properly + * + returned. + */ +START_TEST(rec_field_name_empty) +{ + rec_field_t field; + const char *fname; + + fname = ""; + field = rec_field_new (fname, ""); + fail_if(field == NULL); + + fname = rec_field_name (field); + fail_if(strcmp (fname, "") != 0); + + rec_field_destroy (field); +} +END_TEST + +/*- + * Test: rec_field_name_nonempty + * Unit: rec_field_name + * Description: + * + Get the name of a field with a non-empty name + * + + * + 1. The call should not produce an error. + * + 2. The name of the field should be properly + * + returned. + */ +START_TEST(rec_field_name_nonempty) +{ + rec_field_t field; + const char *fname; + + fname = "foo"; + field = rec_field_new (fname, ""); + fail_if(field == NULL); + + fname = rec_field_name (field); + fail_if(strcmp (fname, "foo") != 0); + + rec_field_destroy (field); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_field_name (void) +{ + TCase *tc = tcase_create("rec_field_name"); + tcase_add_test (tc, rec_field_name_empty); + tcase_add_test (tc, rec_field_name_nonempty); + + return tc; +} + +/* End of rec-field-name.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/rec-field-new.c b/devspec.en_US/project/recutils/torture/rec-field/rec-field-new.c new file mode 100755 index 0000000..5644006 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/rec-field-new.c @@ -0,0 +1,64 @@ +/* -*- mode: C -*- + * + * File: rec-field-new.c + * Date: Fri Nov 12 13:00:24 2010 + * + * GNU recutils - rec_field_new unit tests. + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_new_nominal + * Unit: rec_field_new + * Description: + * + Create a field. + */ +START_TEST(rec_field_new_nominal) +{ + const char *fname; + rec_field_t field; + + fname = "foo"; + field = rec_field_new (fname, "value"); + fail_if (field == NULL); + + rec_field_destroy (field); +} +END_TEST + + +/* + * Test creation function + */ +TCase * +test_rec_field_new (void) +{ + TCase *tc = tcase_create ("rec_field_new"); + tcase_add_test (tc, rec_field_new_nominal); + + return tc; +} + +/* End of rec-field-new.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/rec-field-set-char-location.c b/devspec.en_US/project/recutils/torture/rec-field/rec-field-set-char-location.c new file mode 100755 index 0000000..6a09101 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/rec-field-set-char-location.c @@ -0,0 +1,64 @@ +/* -*- mode: C -*- + * + * File: rec-field-set-char-location.c + * Date: Fri Nov 12 15:01:45 2010 + * + * GNU recutils - rec_field_set_char-location unit tests. + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_set_char_location_nominal + * Unit: rec_field_set_char_location + * Description: + * + Set the char location of a field. + */ +START_TEST(rec_field_set_char_location_nominal) +{ + rec_field_t field; + + field = rec_field_new ("foo", "value"); + fail_if (field == NULL); + + rec_field_set_char_location (field, 100); + fail_if (rec_field_char_location (field) != 100); + + rec_field_destroy (field); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_field_set_char_location (void) +{ + TCase *tc = tcase_create ("rec_field_set_char_location"); + tcase_add_test (tc, rec_field_set_char_location_nominal); + + return tc; +} + +/* End of rec-field-set-char-location.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/rec-field-set-location.c b/devspec.en_US/project/recutils/torture/rec-field/rec-field-set-location.c new file mode 100755 index 0000000..7805fee --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/rec-field-set-location.c @@ -0,0 +1,64 @@ +/* -*- mode: C -*- + * + * File: rec-field-set-location.c + * Date: Fri Nov 12 15:01:45 2010 + * + * GNU recutils - rec_field_set_location unit tests. + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_set_location_nominal + * Unit: rec_field_set_location + * Description: + * + Set the location of a field. + */ +START_TEST(rec_field_set_location_nominal) +{ + rec_field_t field; + + field = rec_field_new ("foo", "value"); + fail_if (field == NULL); + + rec_field_set_location (field, 100); + fail_if (rec_field_location (field) != 100); + + rec_field_destroy (field); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_field_set_location (void) +{ + TCase *tc = tcase_create ("rec_field_set_location"); + tcase_add_test (tc, rec_field_set_location_nominal); + + return tc; +} + +/* End of rec-field-set-location.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/rec-field-set-name.c b/devspec.en_US/project/recutils/torture/rec-field/rec-field-set-name.c new file mode 100755 index 0000000..89f8121 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/rec-field-set-name.c @@ -0,0 +1,104 @@ +/* -*- mode: C -*- + * + * File: rec-field-set-name.c + * Date: Sun Mar 1 17:04:00 2009 + * + * GNU recutils - rec_field_set_name unit tests + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_set_name_empty + * Unit: rec_field_set_name + * Description: + * + Set the name of a field to the empty string + * + + * + 1. The call should not produce an error. + * + 2. The name of the field should be properly + * + set. + */ +START_TEST(rec_field_set_name_empty) +{ + rec_field_t field; + const char *field_name; + const char *field_name_2; + + field_name = ""; + field = rec_field_new (field_name, ""); + fail_if(field == NULL); + field_name_2 = ""; + rec_field_set_name (field, field_name_2); + + field_name_2 = rec_field_name (field); + fail_if(strcmp (field_name_2, "") != 0); + + rec_field_destroy (field); +} +END_TEST + +/*- + * Test: rec_field_set_name_nonempty + * Unit: rec_field_set_name + * Description: + * + Set the name of a field to a non-empty name + * + + * + 1. The call should not produce an error. + * + 2. The name of the field should be properly + * + set. + */ +START_TEST(rec_field_set_name_nonempty) +{ + rec_field_t field; + const char *field_name; + const char *field_name_2; + + field_name = ""; + field = rec_field_new (field_name, ""); + fail_if(field == NULL); + field_name_2 = "foo"; + + rec_field_set_name (field, field_name_2); + + field_name_2 = rec_field_name (field); + fail_if(strcmp (field_name_2, "foo") != 0); + + rec_field_destroy (field); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_field_set_name (void) +{ + TCase *tc = tcase_create("rec_field_set_name"); + tcase_add_test (tc, rec_field_set_name_empty); + tcase_add_test (tc, rec_field_set_name_nonempty); + + return tc; +} + +/* End of rec-field-set-name.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/rec-field-set-source.c b/devspec.en_US/project/recutils/torture/rec-field/rec-field-set-source.c new file mode 100755 index 0000000..6f72377 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/rec-field-set-source.c @@ -0,0 +1,64 @@ +/* -*- mode: C -*- + * + * File: rec-field-set-source.c + * Date: Fri Nov 12 14:56:51 2010 + * + * GNU recutils - rec_field_set_source unit tests. + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_set_source_nominal + * Unit: rec_field_set_source + * Description: + * + Set the source of a field. + */ +START_TEST(rec_field_set_source_nominal) +{ + rec_field_t field; + + field = rec_field_new ("foo", "value"); + fail_if (field == NULL); + + rec_field_set_source (field, "source"); + fail_if (strcmp (rec_field_source (field), "source") != 0); + + rec_field_destroy (field); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_field_set_source (void) +{ + TCase *tc = tcase_create ("rec_field_set_source"); + tcase_add_test (tc, rec_field_set_source_nominal); + + return tc; +} + +/* End of rec-field-set-source.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/rec-field-set-value.c b/devspec.en_US/project/recutils/torture/rec-field/rec-field-set-value.c new file mode 100755 index 0000000..b80899a --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/rec-field-set-value.c @@ -0,0 +1,101 @@ +/* -*- mode: C -*- + * + * File: rec-field-set-value.c + * Date: Sun Mar 1 17:04:00 2009 + * + * GNU recutils - rec_field_set_value unit tests + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_set_value_empty + * Unit: rec_field_set_value + * Description: + * + Set the value of a field to the empty string + * + + * + 1. The call should not produce an error. + * + 2. The value of the field should be properly + * + set. + */ +START_TEST(rec_field_set_value_empty) +{ + rec_field_t field; + const char *fname; + const char *field_value; + + fname = ""; + field = rec_field_new (fname, ""); + fail_if(field == NULL); + + rec_field_set_value (field, ""); + field_value = rec_field_value (field); + fail_if(strcmp (field_value, "") != 0); + + rec_field_destroy (field); +} +END_TEST + +/*- + * Test: rec_field_set_value_nonempty + * Unit: rec_field_set_value + * Description: + * + Set the value of a field to a non-empty value + * + + * + 1. The call should not produce an error. + * + 2. The value of the field should be properly + * + set. + */ +START_TEST(rec_field_set_value_nonempty) +{ + rec_field_t field; + const char *fname; + const char *field_value; + + fname = ""; + field = rec_field_new (fname, "foo"); + fail_if(field == NULL); + + rec_field_set_value (field, "foo"); + field_value = rec_field_value (field); + fail_if(strcmp (field_value, "foo") != 0); + + rec_field_destroy (field); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_field_set_value (void) +{ + TCase *tc = tcase_create("rec_field_set_value"); + tcase_add_test (tc, rec_field_set_value_empty); + tcase_add_test (tc, rec_field_set_value_nonempty); + + return tc; +} + +/* End of rec-field-set-value.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/rec-field-source.c b/devspec.en_US/project/recutils/torture/rec-field/rec-field-source.c new file mode 100755 index 0000000..5e4ccfd --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/rec-field-source.c @@ -0,0 +1,66 @@ +/* -*- mode: C -*- + * + * File: rec-field-source.c + * Date: Fri Nov 12 14:53:14 2010 + * + * GNU recutils - rec_field_source unit tests. + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_source_nominal + * Unit: rec_field_source + * Description: + * + Get the source property of a field. + */ +START_TEST(rec_field_source_nominal) +{ + rec_field_t field; + + field = rec_field_new ("foo", "value"); + fail_if (field == NULL); + + fail_if (rec_field_source (field) != NULL); + rec_field_set_source (field, "source"); + fail_if (strcmp (rec_field_source (field), + "source") != 0); + + rec_field_destroy (field); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_field_source (void) +{ + TCase *tc = tcase_create ("rec_field_source"); + tcase_add_test (tc, rec_field_source_nominal); + + return tc; +} + +/* End of rec-field-source.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/rec-field-to-comment.c b/devspec.en_US/project/recutils/torture/rec-field/rec-field-to-comment.c new file mode 100755 index 0000000..09d262d --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/rec-field-to-comment.c @@ -0,0 +1,79 @@ +/* -*- mode: C -*- + * + * File: rec-field-to-comment.c + * Date: Fri Nov 12 15:38:17 2010 + * + * GNU recutils - rec_field_to_comment unit tests. + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_to_comment_nominal + * Unit: rec_field_to_comment + * Description: + * + Convert fields into comments. + */ +START_TEST(rec_field_to_comment_nominal) +{ + rec_field_t field; + rec_comment_t comment; + + field = rec_field_new ("foo", ""); + fail_if (field == NULL); + comment = rec_field_to_comment (field); + fail_if (strcmp (rec_comment_text (comment), "foo:") != 0); + rec_comment_destroy (comment); + rec_field_destroy (field); + + field = rec_field_new ("foo", "value"); + fail_if (field == NULL); + comment = rec_field_to_comment (field); + fail_if (strcmp (rec_comment_text (comment), "foo: value") != 0); + rec_comment_destroy (comment); + rec_field_destroy (field); + + field = rec_field_new ("foo", "line1\nline2"); + fail_if (field == NULL); + comment = rec_field_to_comment (field); + fail_if (strcmp (rec_comment_text (comment), "foo: line1\n+ line2") != 0); + rec_comment_destroy (comment); + rec_field_destroy (field); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_field_to_comment (void) +{ + TCase *tc = tcase_create ("rc_field_to_comment"); + tcase_add_test (tc, rec_field_to_comment_nominal); + + return tc; +} + + +/* rec-field-to-comment.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/rec-field-value.c b/devspec.en_US/project/recutils/torture/rec-field/rec-field-value.c new file mode 100755 index 0000000..422afb9 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/rec-field-value.c @@ -0,0 +1,99 @@ +/* -*- mode: C -*- + * + * File: rec-field-value.c + * Date: Sun Mar 1 17:04:00 2009 + * + * GNU recutils - rec_field_value unit tests + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_field_value_empty + * Unit: rec_field_value + * Description: + * + Get the value of a field with an empy value + * + + * + 1. The call should not produce an error. + * + 2. The value of the field should be properly + * + returned. + */ +START_TEST(rec_field_value_empty) +{ + rec_field_t field; + const char *fname; + const char *field_value; + + fname = ""; + field = rec_field_new (fname, ""); + fail_if(field == NULL); + + field_value = rec_field_value (field); + fail_if(strcmp (field_value, "") != 0); + + rec_field_destroy (field); +} +END_TEST + +/*- + * Test: rec_field_value_nonempty + * Unit: rec_field_value + * Description: + * + Get the value of a field with a non-empty value + * + + * + 1. The call should not produce an error. + * + 2. The value of the field should be properly + * + returned. + */ +START_TEST(rec_field_value_nonempty) +{ + rec_field_t field; + const char *fname; + const char *field_value; + + fname = ""; + field = rec_field_new (fname, "foo"); + fail_if(field == NULL); + + field_value = rec_field_value (field); + fail_if(strcmp (field_value, "foo") != 0); + + rec_field_destroy (field); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_field_value (void) +{ + TCase *tc = tcase_create("rec_field_value"); + tcase_add_test (tc, rec_field_value_empty); + tcase_add_test (tc, rec_field_value_nonempty); + + return tc; +} + +/* End of rec-field-value.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-field/tsuite-rec-field.c b/devspec.en_US/project/recutils/torture/rec-field/tsuite-rec-field.c new file mode 100755 index 0000000..c0cedef --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-field/tsuite-rec-field.c @@ -0,0 +1,74 @@ +/* -*- mode: C -*- + * + * File: tsuite-rec-field.c + * Date: Sun Mar 1 17:06:28 2009 + * + * GNU recutils - rec_field test suite + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +extern TCase *test_rec_field_name (void); +extern TCase *test_rec_field_set_name (void); +extern TCase *test_rec_field_value (void); +extern TCase *test_rec_field_set_value (void); +extern TCase *test_rec_field_dup (void); +extern TCase *test_rec_field_new (void); +extern TCase *test_rec_field_destroy (void); +extern TCase *test_rec_field_equal_p (void); +extern TCase *test_rec_field_source (void); +extern TCase *test_rec_field_set_source (void); +extern TCase *test_rec_field_location (void); +extern TCase *test_rec_field_location_str (void); +extern TCase *test_rec_field_set_location (void); +extern TCase *test_rec_field_char_location (void); +extern TCase *test_rec_field_char_location_str (void); +extern TCase *test_rec_field_set_char_location (void); +extern TCase *test_rec_field_to_comment (void); + +Suite * +tsuite_rec_field () +{ + Suite *s; + + s = suite_create ("rec-field"); + suite_add_tcase (s, test_rec_field_name ()); + suite_add_tcase (s, test_rec_field_set_name ()); + suite_add_tcase (s, test_rec_field_value ()); + suite_add_tcase (s, test_rec_field_set_value ()); + suite_add_tcase (s, test_rec_field_dup ()); + suite_add_tcase (s, test_rec_field_new ()); + suite_add_tcase (s, test_rec_field_destroy ()); + suite_add_tcase (s, test_rec_field_equal_p ()); + suite_add_tcase (s, test_rec_field_source ()); + suite_add_tcase (s, test_rec_field_set_source ()); + suite_add_tcase (s, test_rec_field_location ()); + suite_add_tcase (s, test_rec_field_location_str ()); + suite_add_tcase (s, test_rec_field_set_location ()); + suite_add_tcase (s, test_rec_field_char_location ()); + suite_add_tcase (s, test_rec_field_char_location_str ()); + suite_add_tcase (s, test_rec_field_set_char_location ()); + suite_add_tcase (s, test_rec_field_to_comment ()); + + return s; +} + +/* End of tsuite-rec-field.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-count.Po b/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-count.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-count.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-dup.Po b/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-dup.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-dup.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-get-at.Po b/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-get-at.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-get-at.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-new.Po b/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-new.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-new.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-register-type.Po b/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-register-type.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-register-type.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-type-p.Po b/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-type-p.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-rec-mset-type-p.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-tsuite-rec-mset.Po b/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-tsuite-rec-mset.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-mset/.deps/runtests-tsuite-rec-mset.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-mset/elem-types.h b/devspec.en_US/project/recutils/torture/rec-mset/elem-types.h new file mode 100755 index 0000000..3cfea6e --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-mset/elem-types.h @@ -0,0 +1,123 @@ +/* -*- mode: C -*- + * + * File: elem-types.h + * Date: Thu Oct 28 20:01:31 2010 + * + * GNU recutils - Element types for the rec_mset tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <stdlib.h> + +/* mset types used by the tests in this file: + * + * TYPE1 and TYPE2 + */ + +#define TYPE1 "TYPE1" + +struct type1_t +{ + int i; +}; + +static void +type1_disp (void *data) +{ + struct type1_t *s; + + s = (struct type1_t *) data; + free (s); +} + +static bool +type1_equal (void *data1, + void *data2) +{ + struct type1_t *s1; + struct type1_t *s2; + + s1 = (struct type1_t *) data1; + s2 = (struct type1_t *) data2; + + return (s1->i == s2->i); +} + +static void * +type1_dup (void *data) +{ + struct type1_t *s; + struct type1_t *s_copy; + + s = (struct type1_t *) data; + s_copy = malloc (sizeof (struct type1_t)); + if (s_copy) + { + s_copy->i = s->i; + } + + return (void *) s_copy; +} + +#define TYPE2 "TYPE2" + +struct type2_t +{ + char c; +}; + +static void +type2_disp (void *data) +{ + struct type2_t *s; + + s = (struct type2_t *) data; + free (s); +} + +static bool type2_equal (void *data1, + void *data2) +{ + struct type2_t *s1; + struct type2_t *s2; + + s1 = (struct type2_t *) data1; + s2 = (struct type2_t *) data2; + + return (s1->c == s2->c); +} + +static void * +type2_dup (void *data) +{ + struct type2_t *s; + struct type2_t *s_copy; + + s = (struct type2_t *) data; + s_copy = malloc (sizeof (struct type2_t)); + if (s_copy) + { + s_copy->c = s->c; + } + + return (void *) s_copy; +} + +/* End of elem-types.h */ diff --git a/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-count.c b/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-count.c new file mode 100755 index 0000000..f28287a --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-count.c @@ -0,0 +1,138 @@ +/* -*- mode: C -*- + * + * File: rec-mset-count.c + * Date: Thu Oct 28 20:17:55 2010 + * + * GNU recutils - unit tests for rec_mset_count + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> +#include <rec-mset/elem-types.h> + +/*- + * Test: rec_mset_count_empty + * Unit: rec_mset_count + * Description: + * + Count the number of total elements of an + * + empty mset. + * + + * + 1. The function shall return 0. + */ +START_TEST(rec_mset_count_empty) +{ + rec_mset_t mset; + + mset = rec_mset_new (); + fail_if (mset == NULL); + fail_if (rec_mset_count (mset, MSET_ANY) != 0); + + rec_mset_destroy (mset); +} +END_TEST + +/*- + * Test: rec_mset_count_existing + * Unit: rec_mset_count + * Description: + * + Count the number of elements of a non empty + * + mset. + * + + * + 1. The function shall return the number of + * + elements. + */ +START_TEST(rec_mset_count_existing) +{ + int type; + struct type1_t *elem1; + struct type1_t *elem2; + rec_mset_elem_t e1; + rec_mset_elem_t e2; + rec_mset_t mset1; + + /* Create a mset, register a type and insert two elements of that + type. */ + mset1 = rec_mset_new (); + fail_if (mset1 == NULL); + type = rec_mset_register_type (mset1, + TYPE1, + type1_disp, + type1_equal, + type1_dup, + NULL); + elem1 = malloc (sizeof (struct type1_t)); + fail_if (elem1 == NULL); + elem1->i = 1; + e1 = rec_mset_append (mset1, type, (void *) elem1, MSET_ANY); + fail_if (e1 == NULL); + + elem2 = malloc (sizeof (struct type1_t)); + fail_if (elem2 == NULL); + elem2->i = 2; + e2 = rec_mset_append (mset1, type, (void *) elem2, MSET_ANY); + fail_if (e2 == NULL); + + /* Count elements. */ + fail_if (rec_mset_count (mset1, MSET_ANY) != 2); + fail_if (rec_mset_count (mset1, type) != 2); + + rec_mset_destroy (mset1); +} +END_TEST + +/*- + * Test: rec_mset_count_nonexisting + * Unit: rec_mset_count + * Description: + * + Count the number of total elements pertaining to + * + an unexisting type in a mset. + * + + * + 1. The function shall return 0. + */ +START_TEST(rec_mset_count_nonexisting) +{ + rec_mset_t mset; + + mset = rec_mset_new (); + fail_if (mset == NULL); + fail_if (rec_mset_count (mset, MSET_ANY + 1) != 0); + + rec_mset_destroy (mset); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_mset_count (void) +{ + TCase *tc = tcase_create ("rec_mset_count"); + tcase_add_test (tc, rec_mset_count_empty); + tcase_add_test (tc, rec_mset_count_existing); + tcase_add_test (tc, rec_mset_count_nonexisting); + + return tc; +} + +/* End of rec-mset-count.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-dup.c b/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-dup.c new file mode 100755 index 0000000..14a9f9d --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-dup.c @@ -0,0 +1,125 @@ +/* -*- mode: C -*- + * + * File: rec-mset-dup.c + * Date: Thu Oct 28 19:03:01 2010 + * + * GNU recutils - rec_mset_dup unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> +#include <rec-mset/elem-types.h> + +/*- + * Test: rec_mset_dup_empty + * Unit: rec_mset_dup + * Description: + * + Dup an empty mset. + * + + * + 1. The copy shall be successfully returned. + * + 2. The copy shall be empty. + */ +START_TEST(rec_mset_dup_empty) +{ + rec_mset_t mset1; + rec_mset_t mset2; + + /* Create an empty mset. */ + mset1 = rec_mset_new (); + fail_if (mset1 == NULL); + + /* Get a copy. */ + mset2 = rec_mset_dup (mset1); + fail_if (mset2 == NULL); + fail_if (rec_mset_count (mset2, MSET_ANY) != 0); + + rec_mset_destroy (mset1); + rec_mset_destroy (mset2); +} +END_TEST + +/*- + * Test: rec_mset_dup_nonempty + * Unit: rec_mset_dup + * Description: + * + Dup an mset containing two elements of a nonempty type. + * + + * + 1. The copy shall be successfully returned. + * + 2. The copy shall contain the same elements. + */ +START_TEST(rec_mset_dup_nonempty) +{ + int type; + struct type1_t *elem1; + struct type1_t *elem2; + rec_mset_elem_t e1; + rec_mset_elem_t e2; + rec_mset_t mset1; + rec_mset_t mset2; + + /* Create a mset, register a type and insert two elements of that + type. */ + mset1 = rec_mset_new (); + fail_if (mset1 == NULL); + type = rec_mset_register_type (mset1, + TYPE1, + type1_disp, + type1_equal, + type1_dup, + NULL); + elem1 = malloc (sizeof (struct type1_t)); + fail_if (elem1 == NULL); + elem1->i = 1; + e1 = rec_mset_append (mset1, type, (void *) elem1, MSET_ANY); + fail_if (e1 == NULL); + + elem2 = malloc (sizeof (struct type1_t)); + fail_if (elem2 == NULL); + elem2->i = 2; + e2 = rec_mset_append (mset1, type, (void *) elem2, MSET_ANY); + fail_if (e2 == NULL); + + /* Make a copy of the mset. */ + mset2 = rec_mset_dup (mset1); + fail_if (mset2 == NULL); + fail_if (rec_mset_count (mset2, type) != 2); + + rec_mset_destroy (mset1); + rec_mset_destroy (mset2); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_mset_dup (void) +{ + TCase *tc = tcase_create ("rec_mset_dup"); + tcase_add_test (tc, rec_mset_dup_empty); + tcase_add_test (tc, rec_mset_dup_nonempty); + + return tc; +} + +/* End of rec-mset-dup.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-get-at.c b/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-get-at.c new file mode 100755 index 0000000..ce596da --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-get-at.c @@ -0,0 +1,195 @@ +/* -*- mode: C -*- + * + * File: rec-mset-get-at.c + * Date: Thu Oct 28 20:35:33 2010 + * + * GNU recutils - Unit tests for rec_mset_get_at + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> +#include <rec-mset/elem-types.h> + +/*- + * Test: rec_mset_get_at_empty + * Unit: rec_mset_get_at + * Description: + * + Try to get an element from an empty mset. + * + + * + 1. The function shall return NULL. + */ +START_TEST(rec_mset_get_at_empty) +{ + rec_mset_t mset; + + mset = rec_mset_new (); + fail_if (mset == NULL); + fail_if (rec_mset_get_at (mset, MSET_ANY, 0) != NULL); + + rec_mset_destroy (mset); +} +END_TEST + +/*- + * Test: rec_mset_get_at_existing + * Unit: rec_mset_get + * Description: + * + Get an existing element from a mset. + * + + * + 1. The function shall return a pointer to + * + the element. + */ +START_TEST(rec_mset_get_at_existing) +{ + int type; + struct type1_t *elem1, *elem1aux; + rec_mset_elem_t e1; + rec_mset_t mset; + + /* Create a mset, register a type and insert two elements of that + type. */ + mset = rec_mset_new (); + fail_if (mset == NULL); + type = rec_mset_register_type (mset, + TYPE1, + type1_disp, + type1_equal, + type1_dup, + NULL); + elem1 = malloc (sizeof (struct type1_t)); + fail_if (elem1 == NULL); + elem1->i = 1; + e1 = rec_mset_append (mset, type, (void *) elem1, MSET_ANY); + fail_if (e1 == NULL); + + /* Get the element and compare. */ + elem1aux = rec_mset_get_at (mset, type, 0); + fail_if (elem1aux == NULL); + fail_if (elem1aux != elem1); + + rec_mset_destroy (mset); +} +END_TEST + +/*- + * Test: rec_mset_get_at_any + * Unit: rec_mset_get + * Description: + * + Get an existing element from a mset using + * + the ANY index. + * + + * + 1. The function shall return a pointer to + * + the element. + */ +START_TEST(rec_mset_get_at_any) +{ + int type; + struct type1_t *elem1, *elem1aux; + rec_mset_elem_t e1; + rec_mset_t mset; + + /* Create a mset, register a type and insert two elements of that + type. */ + mset = rec_mset_new (); + fail_if (mset == NULL); + type = rec_mset_register_type (mset, + TYPE1, + type1_disp, + type1_equal, + type1_dup, + NULL); + elem1 = malloc (sizeof (struct type1_t)); + fail_if (elem1 == NULL); + elem1->i = 1; + e1 = rec_mset_append (mset, type, (void *) elem1, MSET_ANY); + fail_if (e1 == NULL); + + /* Get the element and compare. */ + elem1aux = rec_mset_get_at (mset, MSET_ANY, 0); + fail_if (elem1aux == NULL); + fail_if (elem1aux != elem1); + + rec_mset_destroy (mset); +} +END_TEST + +/*- + * Test: rec_mset_get_at_invalid + * Unit: rec_mset_get_at + * Description: + * + Get the first element of a mset by using invalid + * + indexes. + * + + * + 1. The function shall return NULL. + */ +START_TEST(rec_mset_get_at_invalid) +{ + int type; + struct type1_t *elem1; + rec_mset_elem_t e1; + rec_mset_elem_t e1aux; + rec_mset_t mset; + + /* Create a mset, register a type and insert two elements of that + type. */ + mset = rec_mset_new (); + fail_if (mset == NULL); + type = rec_mset_register_type (mset, + TYPE1, + type1_disp, + type1_equal, + type1_dup, + NULL); + elem1 = malloc (sizeof (struct type1_t)); + fail_if (elem1 == NULL); + elem1->i = 1; + e1 = rec_mset_append (mset, type, (void *) elem1, MSET_ANY); + fail_if (e1 == NULL); + + /* Try to get invalid elements. */ + e1aux = rec_mset_get_at (mset, MSET_ANY, -10); + fail_if (e1aux != NULL); + e1aux = rec_mset_get_at (mset, MSET_ANY, 1000); + fail_if (e1aux != NULL); + + rec_mset_destroy (mset); +} +END_TEST + + +/* + * Test case creation function + */ +TCase * +test_rec_mset_get_at (void) +{ + TCase *tc = tcase_create ("rec_mset_get"); + tcase_add_test (tc, rec_mset_get_at_empty); + tcase_add_test (tc, rec_mset_get_at_existing); + tcase_add_test (tc, rec_mset_get_at_any); + tcase_add_test (tc, rec_mset_get_at_invalid); + + return tc; +} + +/* End of rec-mset-get-at.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-new.c b/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-new.c new file mode 100755 index 0000000..b0ab776 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-new.c @@ -0,0 +1,63 @@ +/* -*- mode: C -*- + * + * File: rec-mset-new.c + * Date: Thu Oct 28 16:47:46 2010 + * + * GNU recutils - rec_mset_new unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_mset_new_and_destroy + * Unit: rec_mset_new + * Description: + * + Create an empty record set and destroy it. + * + + * + 1. The value returned by rec_mset_new shall not + * + be NULL. + */ +START_TEST(rec_mset_new_and_destroy) +{ + rec_mset_t mset; + + mset = rec_mset_new (); + fail_if (mset == NULL); + rec_mset_destroy (mset); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_mset_new (void) +{ + TCase *tc = tcase_create ("rec_mset_new"); + tcase_add_test (tc, rec_mset_new_and_destroy); + + return tc; +} + +/* End of rec-mset-new.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-register-type.c b/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-register-type.c new file mode 100755 index 0000000..32ed474 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-register-type.c @@ -0,0 +1,75 @@ +/* -*- mode: C -*- + * + * File: rec-mset-register-type.c + * Date: Thu Oct 28 20:10:18 2010 + * + * GNU recutils - Tests for rec_mset_register_type + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> +#include <rec-mset/elem-types.h> + +/*- + * Test: rec_mset_register_type_nominal + * Unit: rec_mset_register_type + * Description: + * + Register a type in a mset. + * + + * + 1. The registration should succeed. + * + 2. The number returned by rec_mset_register_type shall + * + be bigger than 0. + */ +START_TEST(rec_mset_register_type_nominal) +{ + int type; + rec_mset_t mset; + + mset = rec_mset_new (); + fail_if (mset == NULL); + type = rec_mset_register_type (mset, + TYPE1, + type1_disp, + type1_equal, + type1_dup, + NULL); + + fail_if (type <= 0); + rec_mset_destroy (mset); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_mset_register_type (void) +{ + TCase *tc = tcase_create ("rec_mset_register_type"); + tcase_add_test (tc, rec_mset_register_type_nominal); + + return tc; +} + + +/* End of rec-mset-register-type.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-type-p.c b/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-type-p.c new file mode 100755 index 0000000..e2ca816 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-mset/rec-mset-type-p.c @@ -0,0 +1,126 @@ +/* -*- mode: C -*- + * + * File: rec-mset-type-p.c + * Date: Thu Oct 28 19:55:46 2010 + * + * GNU recutils - rec_mset_type_p unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> +#include <rec-mset/elem-types.h> + +/*- + * Test: rec_mset_type_p_any + * Unit: rec_mset_type_p + * Description: + * + Check for the MSET_ANY type with rec_mset_type_p. + * + + * + 1. The MSET_ANY type shall exist. + */ +START_TEST(rec_mset_type_p_any) +{ + rec_mset_t mset; + + mset = rec_mset_new (); + fail_if (mset == NULL); + + fail_if (!rec_mset_type_p (mset, MSET_ANY)); + rec_mset_destroy (mset); +} +END_TEST + +/*- + * Test: rec_mset_type_p_existing + * Unit: rec_mset_type_p + * Description: + * + Register a type in an empty mset and check + * + for it with rec_mset_type_p. + * + + * + 1. The function shall report that the type + * + exists. + */ +START_TEST(rec_mset_type_p_existing) +{ + int type; + rec_mset_t mset; + + mset = rec_mset_new (); + fail_if (mset == NULL); + type = rec_mset_register_type (mset, + TYPE1, + type1_disp, + type1_equal, + type1_dup, + NULL); + + fail_if (!rec_mset_type_p (mset, type)); + rec_mset_destroy (mset); +} +END_TEST + + +/*- + * Test: rec_mset_type_p_nonexisting + * Unit: rec_mset_type_p + * Description: + * + Register a type in an empty mset and check + * + for other type with rec_mset_type_p. + * + + * + 1. The function shall report that the type + * + does not exist. + */ +START_TEST(rec_mset_type_p_nonexisting) +{ + int type; + rec_mset_t mset; + + mset = rec_mset_new (); + fail_if (mset == NULL); + type = rec_mset_register_type (mset, + TYPE1, + type1_disp, + type1_equal, + type1_dup, + NULL); + + fail_if (rec_mset_type_p (mset, type + 1)); + rec_mset_destroy (mset); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_mset_type_p (void) +{ + TCase *tc = tcase_create ("rec_mset_type_p"); + tcase_add_test (tc, rec_mset_type_p_any); + tcase_add_test (tc, rec_mset_type_p_existing); + tcase_add_test (tc, rec_mset_type_p_nonexisting); + + return tc; +} + +/* End of rec-mset-type-p.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-mset/tsuite-rec-mset.c b/devspec.en_US/project/recutils/torture/rec-mset/tsuite-rec-mset.c new file mode 100755 index 0000000..4c1e197 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-mset/tsuite-rec-mset.c @@ -0,0 +1,52 @@ +/* -*- mode: C -*- + * + * File: tsuite-rec-mset.c + * Date: Thu Oct 28 16:45:34 2010 + * + * GNU recutils - rec_mset test suite + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +extern TCase *test_rec_mset_new (void); +extern TCase *test_rec_mset_dup (void); +extern TCase *test_rec_mset_type_p (void); +extern TCase *test_rec_mset_register_type (void); +extern TCase *test_rec_mset_count (void); +extern TCase *test_rec_mset_get_at (void); + +Suite * +tsuite_rec_mset () +{ + Suite *s; + + s = suite_create ("rec-mset"); + suite_add_tcase (s, test_rec_mset_new ()); + suite_add_tcase (s, test_rec_mset_dup ()); + suite_add_tcase (s, test_rec_mset_type_p ()); + suite_add_tcase (s, test_rec_mset_register_type ()); + suite_add_tcase (s, test_rec_mset_count ()); + suite_add_tcase (s, test_rec_mset_get_at ()); + + return s; +} + +/* End of tsuite-rec-mset.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-db.Po b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-db.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-db.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-field-name-str.Po b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-field-name-str.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-field-name-str.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-field-name.Po b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-field-name.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-field-name.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-field.Po b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-field.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-field.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-record-str.Po b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-record-str.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-record-str.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-record.Po b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-record.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-record.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-rset.Po b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-rset.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parse-rset.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-destroy.Po b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-destroy.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-destroy.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-eof.Po b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-eof.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-eof.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-error.Po b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-error.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-error.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-new-mem.Po b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-new-mem.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-new-mem.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-new-str.Po b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-new-str.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-new-str.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-new.Po b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-new.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-new.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-perror.Po b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-perror.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-perror.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-reset.Po b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-reset.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-reset.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-seek-mem.Po b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-seek-mem.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-rec-parser-seek-mem.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-tsuite-rec-parser.Po b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-tsuite-rec-parser.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/.deps/runtests-tsuite-rec-parser.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-db.c b/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-db.c new file mode 100755 index 0000000..489362d --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-db.c @@ -0,0 +1,80 @@ +/* -*- mode: C -*- + * + * File: rec-parse-db.c + * Date: Sat Nov 13 21:59:40 2010 + * + * GNU recutils - rec_parse_db unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_parse_db_nominal + * Unit: rec_parse_db + * Description: + * + Parse valid databases. + */ +START_TEST(rec_parse_db_nominal) +{ + rec_parser_t parser; + rec_db_t db; + char *str; + + str = "%rec: foo\n\nfoo: bar\n\n%rec: bar\n\nfoo: bar\n\nfoo: bar"; + parser = rec_parser_new_str (str, "dummy"); + fail_if (!rec_parse_db (parser, &db)); + fail_if (rec_db_size (db) != 2); + rec_db_destroy (db); + rec_parser_destroy (parser); +} +END_TEST + +/*- + * Test: rec_parse_db_invalid + * Unit: rec_parse_db + * Description: + * + Try to parse invalid databases. + */ +START_TEST(rec_parse_db_invalid) +{ + /* Nothing here, since the empty string is a valid (empty) + database. */ +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_parse_db (void) +{ + TCase *tc = tcase_create ("rec_parse_db"); + tcase_add_test (tc, rec_parse_db_nominal); + tcase_add_test (tc, rec_parse_db_invalid); + + return tc; +} + +/* End of rec-parse-db.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-field-name-str.c b/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-field-name-str.c new file mode 100755 index 0000000..8dca53c --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-field-name-str.c @@ -0,0 +1,102 @@ +/* -*- mode: C -*- + * + * File: rec-parse-field-name-str.c + * Date: Sat Nov 13 15:42:21 2010 + * + * GNU recutils - rec_parse_field_name_str unit tests. + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_parse_field_name_str_nominal + * Unit: rec_parse_field_name_str + * Description: + * + Parse valid field names. + */ +START_TEST(rec_parse_field_name_str_nominal) +{ + char *fname; + + fname = rec_parse_field_name_str ("foo"); + fail_if (fname == NULL); + fail_if (strcmp (fname, "foo") != 0); + free (fname); + + fname = rec_parse_field_name_str ("foo:"); + fail_if (fname == NULL); + fail_if (strcmp (fname, "foo") != 0); + free (fname); +} +END_TEST + +/*- + * Test: rec_parse_field_name_str_invalid + * Unit: rec_parse_field_name_str + * Description: + * + Try to parse invalid field names. + */ +START_TEST(rec_parse_field_name_str_invalid) +{ + char *fname; + + fname = rec_parse_field_name_str (""); + fail_if (fname != NULL); + + fname = rec_parse_field_name_str ("fo!o"); + fail_if (fname != NULL); + + fname = rec_parse_field_name_str ("foo::"); + fail_if (fname != NULL); + + fname = rec_parse_field_name_str (":foo"); + fail_if (fname != NULL); + + fname = rec_parse_field_name_str ("foobar baz"); + fail_if (fname != NULL); + + fname = rec_parse_field_name_str ("foo:bar:baz"); + fail_if (fname != NULL); + + fname = rec_parse_field_name_str ("foo:baz!!#"); + fail_if (fname != NULL); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_parse_field_name_str (void) +{ + TCase *tc = tcase_create ("rec_parse_field_name_str"); + tcase_add_test (tc, rec_parse_field_name_str_nominal); + tcase_add_test (tc, rec_parse_field_name_str_invalid); + + return tc; +} + +/* rec-parse-field-name-str.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-field-name.c b/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-field-name.c new file mode 100755 index 0000000..5d04c68 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-field-name.c @@ -0,0 +1,121 @@ +/* -*- mode: C -*- + * + * File: rec-parse-field-name.c + * Date: Sat Nov 13 16:31:54 2010 + * + * GNU recutils - rec_parse_field_name unit tests. + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_parse_field_name_nominal + * Unit: rec_parse_field_name + * Description: + * + Parse valid field names. + */ +START_TEST(rec_parse_field_name_nominal) +{ + rec_parser_t parser; + char *fname; + char *str; + + str = "foo:"; + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (!rec_parse_field_name (parser, &fname)); + fail_if (strcmp (fname, "foo") != 0); + free (fname); + rec_parser_destroy (parser); + + str = "%foo:"; + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (!rec_parse_field_name (parser, &fname)); + fail_if (strcmp (fname, "%foo") != 0); + free (fname); + rec_parser_destroy (parser); +} +END_TEST + +/*- + * Test: rec_parse_field_name_invalid + * Unit: rec_parse_field_name + * Description: + * + Try to parse invalid field names. + */ +START_TEST(rec_parse_field_name_invalid) +{ + rec_parser_t parser; + char *fname; + char *str; + + str = " "; + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (rec_parse_field_name (parser, &fname)); + rec_parser_destroy (parser); + + str = "foo"; + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (rec_parse_field_name (parser, &fname)); + rec_parser_destroy (parser); + + str = ":foo"; + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (rec_parse_field_name (parser, &fname)); + rec_parser_destroy (parser); + + str = "fo!o"; + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (rec_parse_field_name (parser, &fname)); + rec_parser_destroy (parser); + + str = "%%foo"; + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (rec_parse_field_name (parser, &fname)); + rec_parser_destroy (parser); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_parse_field_name (void) +{ + TCase *tc = tcase_create ("rec_parse_field_name"); + tcase_add_test (tc, rec_parse_field_name_nominal); + tcase_add_test (tc, rec_parse_field_name_invalid); + + return tc; +} + +/* End of rec-parse-field-name.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-field.c b/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-field.c new file mode 100755 index 0000000..a32762c --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-field.c @@ -0,0 +1,190 @@ +/* -*- mode: C -*- + * + * File: rec-parse-field.c + * Date: Sat Nov 13 17:37:11 2010 + * + * GNU recutils - rec_parse_field unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_parse_field_nominal + * Unit: rec_parse_field + * Description: + * + Parse valid fields. + */ +START_TEST(rec_parse_field_nominal) +{ + rec_parser_t parser; + rec_field_t field; + char *fname; + char *str; + + str = "foo: bar"; + fname = rec_parse_field_name_str ("foo"); + fail_if (fname == NULL); + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (!rec_parse_field (parser, &field)); + fail_if (strcmp (rec_field_value (field), "bar") != 0); + free (fname); + rec_field_destroy (field); + rec_parser_destroy (parser); + + str = "foo: bar"; + fname = rec_parse_field_name_str ("foo"); + fail_if (fname == NULL); + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (!rec_parse_field (parser, &field)); + fail_if (strcmp (rec_field_value (field), " bar") != 0); + free (fname); + rec_field_destroy (field); + rec_parser_destroy (parser); + + str = "foo: bar "; + fname = rec_parse_field_name_str ("foo"); + fail_if (fname == NULL); + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (!rec_parse_field (parser, &field)); + fail_if (strcmp (rec_field_value (field), "bar ") != 0); + free (fname); + rec_field_destroy (field); + rec_parser_destroy (parser); + + str = "foo:\n"; + fname = rec_parse_field_name_str ("foo"); + fail_if (fname == NULL); + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (!rec_parse_field (parser, &field)); + fail_if (strcmp (rec_field_value (field), "") != 0); + free (fname); + rec_field_destroy (field); + rec_parser_destroy (parser); + + str = "foo:\n+ bar"; + fname = rec_parse_field_name_str ("foo"); + fail_if (fname == NULL); + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (!rec_parse_field (parser, &field)); + fail_if (strcmp (rec_field_value (field), "\nbar") != 0); + free (fname); + rec_field_destroy (field); + rec_parser_destroy (parser); + + str = "foo:\n+bar"; + fname = rec_parse_field_name_str ("foo"); + fail_if (fname == NULL); + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (!rec_parse_field (parser, &field)); + fail_if (strcmp (rec_field_value (field), "\nbar") != 0); + free (fname); + rec_field_destroy (field); + rec_parser_destroy (parser); + + str = "foo: bar\n+baz"; + fname = rec_parse_field_name_str ("foo"); + fail_if (fname == NULL); + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (!rec_parse_field (parser, &field)); + fail_if (strcmp (rec_field_value (field), "bar\nbaz") != 0); + free (fname); + rec_field_destroy (field); + rec_parser_destroy (parser); + + str = "foo: one\n+\n+ \n+ two"; + fname = rec_parse_field_name_str ("foo"); + fail_if (fname == NULL); + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (!rec_parse_field (parser, &field)); + fail_if (strcmp (rec_field_value (field), "one\n\n\ntwo") != 0); + free (fname); + rec_field_destroy (field); + rec_parser_destroy (parser); + + str = "foo: bar \\\nbaz"; + fname = rec_parse_field_name_str ("foo"); + fail_if (fname == NULL); + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (!rec_parse_field (parser, &field)); + fail_if (strcmp (rec_field_value (field), "bar baz") != 0); + free (fname); + rec_field_destroy (field); + rec_parser_destroy (parser); + + /* str = "foo:"; + stm = fmemopen (str, strlen (str), "r"); + fail_if (stm == NULL); + parser = rec_parser_new (stm, "dummy"); + fail_if (parser == NULL); + fail_if (!rec_parse_field (parser, &field)); + rec_parser_destroy (parser); + fclose (stm); */ +} +END_TEST + +/*- + * Test: rec_parse_field_invalid + * Unit: rec_parse_field + * Description: + * + Try to parse invalid fields. + */ +START_TEST(rec_parse_field_invalid) +{ + rec_parser_t parser; + rec_field_t field; + char *str; + + str = " "; + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (rec_parse_field (parser, &field)); + rec_parser_destroy (parser); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_parse_field (void) +{ + TCase *tc = tcase_create ("rec_parse_field"); + tcase_add_test (tc, rec_parse_field_nominal); + tcase_add_test (tc, rec_parse_field_invalid); + + return tc; +} + +/* End of rec-parse-field.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-record-str.c b/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-record-str.c new file mode 100755 index 0000000..d337a12 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-record-str.c @@ -0,0 +1,89 @@ +/* -*- mode: C -*- + * + * File: rec-parse-record-str.c + * Date: Sat Nov 13 20:16:11 2010 + * + * GNU recutils - rec_parse_record_str unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_parse_record_str_nominal + * Unit: rec_parse_record_str + * Description: + * + Parse valid records from strings. + */ +START_TEST(rec_parse_record_str_nominal) +{ + rec_record_t record; + rec_field_t field; + char *fname; + + record = rec_parse_record_str ("foo: bar"); + fail_if (record == NULL); + fname = rec_parse_field_name_str ("foo"); + fail_if (fname == NULL); + field = (rec_field_t) rec_mset_get_at (rec_record_mset (record), MSET_FIELD, 0); + fail_if (strcmp (rec_field_value (field), "bar") != 0); + fail_if (!rec_field_name_equal_p (fname, + rec_field_name (field))); + free (fname); + rec_record_destroy (record); +} +END_TEST + +/*- + * Test: rec_parse_record_str_invalid + * Unit: rec_parse_record_str + * Description: + * + Try to parse invalid records from strings. + */ +START_TEST(rec_parse_record_str_invalid) +{ + rec_record_t record; + + record = rec_parse_record_str (""); + fail_if (record != NULL); + + record = rec_parse_record_str (" "); + fail_if (record != NULL); +} +END_TEST + +/* + * Test creation function. + */ +TCase * +test_rec_parse_record_str (void) +{ + TCase *tc = tcase_create ("rec_parse_record_str"); + tcase_add_test (tc, rec_parse_record_str_nominal); + tcase_add_test (tc, rec_parse_record_str_invalid); + + return tc; +} + +/* End of rec-parse-record-str.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-record.c b/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-record.c new file mode 100755 index 0000000..e2c6d57 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-record.c @@ -0,0 +1,139 @@ +/* -*- mode: C -*- + * + * File: rec-parse-record.c + * Date: Sat Nov 13 19:17:40 2010 + * + * GNU recutils - rec_parse_record unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_parse_record_nominal + * Unit: rec_parse_record + * Description: + * + Parse valid records. + */ +START_TEST(rec_parse_record_nominal) +{ + rec_parser_t parser; + rec_record_t record; + rec_field_t field; + char *fname; + char *str; + + str = "foo: bar"; + fname = rec_parse_field_name_str ("foo"); + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (!rec_parse_record (parser, &record)); + field = (rec_field_t) rec_mset_get_at (rec_record_mset (record), MSET_FIELD, 0); + fail_if (strcmp (rec_field_value (field), "bar") != 0); + fail_if (!rec_field_name_equal_p (fname, + rec_field_name (field))); + rec_record_destroy (record); + rec_parser_destroy (parser); + free (fname); + + str = "foo: bar\nfoo2: bar2"; + fname = rec_parse_field_name_str ("foo"); + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (!rec_parse_record (parser, &record)); + field = (rec_field_t) rec_mset_get_at (rec_record_mset (record), MSET_FIELD, 0); + fail_if (strcmp (rec_field_value (field), "bar") != 0); + fail_if (!rec_field_name_equal_p (fname, + rec_field_name (field))); + free (fname); + fname = rec_parse_field_name_str ("foo2"); + field = (rec_field_t) rec_mset_get_at (rec_record_mset (record), MSET_FIELD, 1); + fail_if (strcmp (rec_field_value (field), "bar2") != 0); + fail_if (!rec_field_name_equal_p (fname, + rec_field_name (field))); + free (fname); + rec_record_destroy (record); + rec_parser_destroy (parser); + + str = "foo: bar\nfoo2:\nfoo3: bar3"; + fname = rec_parse_field_name_str ("foo"); + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (!rec_parse_record (parser, &record)); + field = (rec_field_t) rec_mset_get_at (rec_record_mset (record), MSET_FIELD, 0); + fail_if (strcmp (rec_field_value (field), "bar") != 0); + fail_if (!rec_field_name_equal_p (fname, + rec_field_name (field))); + free (fname); + fname = rec_parse_field_name_str ("foo2"); + field = (rec_field_t) rec_mset_get_at (rec_record_mset (record), MSET_FIELD, 1); + fail_if (strcmp (rec_field_value (field), "") != 0); + fail_if (!rec_field_name_equal_p (fname, + rec_field_name (field))); + free (fname); + fname = rec_parse_field_name_str ("foo3"); + field = (rec_field_t) rec_mset_get_at (rec_record_mset (record), MSET_FIELD, 2); + fail_if (strcmp (rec_field_value (field), "bar3") != 0); + fail_if (!rec_field_name_equal_p (fname, + rec_field_name (field))); + free (fname); + rec_record_destroy (record); + rec_parser_destroy (parser); +} +END_TEST + +/*- + * Test: rec_parse_record_invalid + * Unit: rec_parse_record + * Description: + * + Try to parse invalid records. + */ +START_TEST(rec_parse_record_invalid) +{ + rec_parser_t parser; + rec_record_t record; + char *str; + + str = " "; + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (rec_parse_record (parser, &record)); + rec_parser_destroy (parser); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_parse_record (void) +{ + TCase *tc = tcase_create ("rec_parse_record"); + tcase_add_test (tc, rec_parse_record_nominal); + tcase_add_test (tc, rec_parse_record_invalid); + + return tc; +} + +/* End of rec-parse-record.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-rset.c b/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-rset.c new file mode 100755 index 0000000..66307fa --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/rec-parse-rset.c @@ -0,0 +1,109 @@ +/* -*- mode: C -*- + * + * File: rec-parse-rset.c + * Date: Sat Nov 13 21:30:44 2010 + * + * GNU recutils - rec_parse_rset unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_parse_rset_nominal + * Unit: rec_parse_rset + * Description: + * + Parse valid record sets. + */ +START_TEST(rec_parse_rset_nominal) +{ + rec_parser_t parser; + rec_rset_t rset; + char *str; + + str = "foo1: bar1\n\nfoo2: bar2\n\nfoo3: bar3"; + parser = rec_parser_new_str (str, "dummy"); + fail_if (!rec_parse_rset (parser, &rset)); + fail_if (rec_rset_num_records (rset) != 3); + rec_rset_destroy (rset); + rec_parser_destroy (parser); + + str = "%rec: foo\n\nfoo1: bar1\n\nfoo2: bar2\n\nfoo3: bar3"; + parser = rec_parser_new_str (str, "dummy"); + fail_if (!rec_parse_rset (parser, &rset)); + fail_if (rec_rset_num_records (rset) != 3); + rec_rset_destroy (rset); + rec_parser_destroy (parser); + + str = "foo1: bar1\n\n#foo2: bar2\n\nfoo3: bar3"; + parser = rec_parser_new_str (str, "dummy"); + fail_if (!rec_parse_rset (parser, &rset)); + fail_if (rec_rset_num_elems (rset) != 3); + fail_if (rec_rset_num_comments (rset) != 1); + fail_if (rec_rset_num_records (rset) != 2); + rec_rset_destroy (rset); + rec_parser_destroy (parser); +} +END_TEST + +/*- + * Test: rec_parse_rset_invalid + * Unit: rec_parse_rset + * Description: + * + Try to parse invalid record sets. + */ +START_TEST(rec_parse_rset_invalid) +{ + rec_parser_t parser; + rec_rset_t rset; + char *str; + + str = " "; + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (rec_parse_rset (parser, &rset)); + rec_parser_destroy (parser); + + /* A record set shall have at least one record. */ + str = "#foo1: bar1\n\n#foo2: bar2\n\n#foo3: bar3"; + parser = rec_parser_new_str (str, "dummy"); + fail_if (rec_parse_rset (parser, &rset)); + rec_parser_destroy (parser); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_parse_rset (void) +{ + TCase *tc = tcase_create ("rec_parse_rset"); + tcase_add_test (tc, rec_parse_rset_nominal); + tcase_add_test (tc, rec_parse_rset_invalid); + + return tc; +} + +/* End of rec-parse-rset.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-destroy.c b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-destroy.c new file mode 100755 index 0000000..8877f1f --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-destroy.c @@ -0,0 +1,62 @@ +/* -*- mode: C -*- + * + * File: rec-parser-destroy.c + * Date: Sat Nov 13 15:29:18 2010 + * + * GNU recutils - rec_parser_destroy unit tests. + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_parser_destroy_nominal + * Unit: rec_parser_destroy + * Description: + * + Destroy a rec parser. + */ +START_TEST(rec_parser_destroy_nominal) +{ + rec_parser_t parser; + + parser = rec_parser_new (stdin, "stdin"); + fail_if (parser == NULL); + + rec_parser_destroy (parser); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_parser_destroy (void) +{ + TCase *tc = tcase_create ("rec_parser_destroy"); + tcase_add_test (tc, rec_parser_destroy_nominal); + + return tc; +} + +/* End of rec-parser-destroy.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-eof.c b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-eof.c new file mode 100755 index 0000000..f3c221e --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-eof.c @@ -0,0 +1,67 @@ +/* -*- mode: C -*- + * + * File: rec-parser-eof.c + * Date: Sat Nov 13 22:21:31 2010 + * + * GNU recutils - rec_parser_eof unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_parser_eof_nominal + * Unit: rec_parser_eof + * Description: + * + Check for EOF in a parser operating a stream. + */ +START_TEST(rec_parser_eof_nominal) +{ + rec_parser_t parser; + rec_field_t field; + char *str; + + str = "foo: bar"; + parser = rec_parser_new_str (str, "dummy"); + fail_if (rec_parser_eof (parser)); + fail_if (!rec_parse_field (parser, &field)); + fail_if (!rec_parser_eof (parser)); + rec_field_destroy (field); + rec_parser_destroy (parser); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_parser_eof (void) +{ + TCase *tc = tcase_create ("rec_parser_eof"); + tcase_add_test (tc, rec_parser_eof_nominal); + + return tc; +} + +/* End of rec-parser-eof.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-error.c b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-error.c new file mode 100755 index 0000000..b01314b --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-error.c @@ -0,0 +1,67 @@ +/* -*- mode: C -*- + * + * File: rec-parser-error.c + * Date: Sat Nov 13 22:28:22 2010 + * + * GNU recutils - rec_parser_error unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_parser_error_nominal + * Unit: rec_parser_error + * Description: + * + Check for the error status of a rec parser. + */ +START_TEST(rec_parser_error_nominal) +{ + rec_parser_t parser; + rec_field_t field; + char *str; + + str = "invalid field"; + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (rec_parser_error (parser)); + fail_if (rec_parse_field (parser, &field)); + fail_if (!rec_parser_error (parser)); + rec_parser_destroy (parser); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_parser_error (void) +{ + TCase *tc = tcase_create ("rec_parser_error"); + tcase_add_test (tc, rec_parser_error_nominal); + + return tc; +} + +/* End of rec-parser-error.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-new-mem.c b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-new-mem.c new file mode 100755 index 0000000..b8d8488 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-new-mem.c @@ -0,0 +1,71 @@ +/* -*- mode: C -*- + * + * File: rec-parser-new-mem.c + * Date: Fri May 25 11:14:05 2012 + * + * GNU recutils - rec_parser_new_mem unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ +/* Copyright (C) 2012-2015 Michał Masłowski */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <check.h> + +#include <rec.h> + +/* Based on rec_parse_rset unit tests. */ + +/*- + * Test: rec_parser_new_mem_nominal + * Unit: rec_parser_new_mem + * Description: + * + Parse a valid truncated record set. + */ +START_TEST(rec_parser_new_mem_nominal) +{ + rec_parser_t parser; + rec_rset_t rset; + char *str; + char *short_str; + + str = "foo1: bar1\n\nfoo2: bar2\n\nfoo3: bar3"; + short_str = "foo1: bar1\n\nfoo2: bar2"; + parser = rec_parser_new_mem (str, strlen(short_str), "dummy"); + fail_if (!rec_parse_rset (parser, &rset)); + fail_if (rec_rset_num_records (rset) != 2); + rec_rset_destroy (rset); + rec_parser_destroy (parser); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_parser_new_mem (void) +{ + TCase *tc = tcase_create ("rec_parser_new_mem"); + tcase_add_test (tc, rec_parser_new_mem_nominal); + + return tc; +} + +/* End of rec-parser-new-mem.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-new-str.c b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-new-str.c new file mode 100755 index 0000000..3f02ec3 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-new-str.c @@ -0,0 +1,63 @@ +/* -*- mode: C -*- + * + * File: rec-parser-new-str.c + * Date: Sat Nov 13 15:23:03 2010 + * + * GNU recutils - rec_parser_new_str unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_parser_new_str_nominal + * Unit: rec_parser_new_str + * Description: + * + Create a rec parser. + */ +START_TEST(rec_parser_new_str_nominal) +{ + rec_parser_t parser; + char *buffer = "foo: bar"; + + parser = rec_parser_new_str (buffer, "buffer"); + fail_if (parser == NULL); + + rec_parser_destroy (parser); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_parser_new_str (void) +{ + TCase *tc = tcase_create ("rec_parser_new_str"); + tcase_add_test (tc, rec_parser_new_str_nominal); + + return tc; +} + +/* End of rec-parser-new-str.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-new.c b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-new.c new file mode 100755 index 0000000..d15fdab --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-new.c @@ -0,0 +1,62 @@ +/* -*- mode: C -*- + * + * File: rec-parser-new.c + * Date: Sat Nov 13 15:23:03 2010 + * + * GNU recutils - rec_parser_new unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_parser_new_nominal + * Unit: rec_parser_new + * Description: + * + Create a rec parser. + */ +START_TEST(rec_parser_new_nominal) +{ + rec_parser_t parser; + + parser = rec_parser_new (stdin, "stdin"); + fail_if (parser == NULL); + + rec_parser_destroy (parser); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_parser_new (void) +{ + TCase *tc = tcase_create ("rec_parser_new"); + tcase_add_test (tc, rec_parser_new_nominal); + + return tc; +} + +/* End of rec-parser-new.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-perror.c b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-perror.c new file mode 100755 index 0000000..5e4fa4f --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-perror.c @@ -0,0 +1,68 @@ +/* -*- mode: C -*- + * + * File: rec-parser-perror.c + * Date: Sat Nov 13 22:37:26 2010 + * + * GNU recutils - rec_parser_perror unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include <config.h> + +#include <check.h> +#include <rec.h> + +/*- + * Test: rec_parser_perror_nominal + * Unit: rec_parser_perror + * Description: + * + Print the error message associated with a failed + * + parsing. + */ +START_TEST(rec_parser_perror_nominal) +{ + rec_parser_t parser; + rec_field_t field; + char *str; + + str = "invalid field"; + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (rec_parser_error (parser)); + fail_if (rec_parse_field (parser, &field)); + fail_if (!rec_parser_error (parser)); + rec_parser_perror (parser, "expected error while parsing: "); + rec_parser_destroy (parser); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_parser_perror (void) +{ + TCase *tc = tcase_create ("rec_parser_perror"); + tcase_add_test (tc, rec_parser_perror_nominal); + + return tc; +} + +/* End of rec-parser-perror.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-reset.c b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-reset.c new file mode 100755 index 0000000..a6ba8a1 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-reset.c @@ -0,0 +1,67 @@ +/* -*- mode: C -*- + * + * File: rec-parser-reset.c + * Date: Sat Nov 13 22:34:36 2010 + * + * GNU recutils - rec_parser_reset unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include <config.h> +#include <check.h> +#include <rec.h> + +/*- + * Test: rec_parser_reset_nominal + * Unit: rec_parser_reset + * Description: + * + Reset a rec parser. + */ +START_TEST(rec_parser_reset_nominal) +{ + rec_parser_t parser; + rec_field_t field; + char *str; + + str = "invalid field"; + parser = rec_parser_new_str (str, "dummy"); + fail_if (parser == NULL); + fail_if (rec_parser_error (parser)); + fail_if (rec_parse_field (parser, &field)); + fail_if (!rec_parser_error (parser)); + rec_parser_reset (parser); + fail_if (rec_parser_error (parser)); + rec_parser_destroy (parser); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_parser_reset (void) +{ + TCase *tc = tcase_create ("rec_parser_reset"); + tcase_add_test (tc, rec_parser_reset_nominal); + + return tc; +} + +/* End of rec-parser-reset.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-seek-mem.c b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-seek-mem.c new file mode 100755 index 0000000..0960634 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/rec-parser-seek-mem.c @@ -0,0 +1,117 @@ +/* -*- mode: C -*- + * + * File: rec-parser-seek-mem.c + * Date: Fri May 25 15:13:53 2012 + * + * GNU recutils - rec_parser_seek unit tests using memory buffers. + * + */ + +/* Copyright (C) 2012-2015 Michał Masłowski */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_parser_seek_mem_tell + * Unit: rec_parser_seek_mem + * Description: + * + Check that tell gives the same position as seeked to. + */ +START_TEST(rec_parser_seek_mem_tell) +{ + rec_parser_t parser; + char *str; + size_t position; + + str = "foo1: bar1\n\nfoo2: bar2\n\nfoo3: bar3"; + position = strlen ("foo1: bar\n\n"); + parser = rec_parser_new_mem (str, strlen (str), "dummy"); + fail_if (!parser); + fail_if (rec_parser_tell (parser) != 0); + fail_if (!rec_parser_seek (parser, 3, position)); + fail_if (rec_parser_tell (parser) != position); + rec_parser_destroy (parser); +} +END_TEST + +/*- + * Test: rec_parser_seek_mem_skip + * Unit: rec_parser_seek_mem + * Description: + * + Check that seek might skip a part of a record. + */ +START_TEST(rec_parser_seek_mem_skip) +{ + rec_parser_t parser; + rec_record_t record; + char *str; + size_t position; + + str = "foo1: bar1\nfoo2: bar2\n\nfoo3: bar3"; + position = strlen ("foo1: bar1\n"); + parser = rec_parser_new_mem (str, strlen (str), "dummy"); + fail_if (!parser); + fail_if (!rec_parser_seek (parser, 2, position)); + fail_if (!rec_parse_record (parser, &record)); + fail_if (rec_record_num_fields (record) != 1); + fail_if (rec_record_location (record) != 2); + rec_record_destroy (record); + rec_parser_destroy (parser); +} +END_TEST + +/*- + * Test: rec_parser_seek_mem_fail + * Unit: rec_parser_seek_mem + * Description: + * + Check that seek outside the file fails. + */ +START_TEST(rec_parser_seek_mem_fail) +{ + rec_parser_t parser; + char *str; + size_t position; + + str = "foo1: bar1\n\nfoo2: bar2\n\nfoo3: bar3"; + position = strlen (str) + 100; + parser = rec_parser_new_mem (str, strlen (str), "dummy"); + fail_if (!parser); + fail_if (rec_parser_seek (parser, 20, position)); + rec_parser_destroy (parser); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_parser_seek_mem (void) +{ + TCase *tc = tcase_create ("rec_parser_seek_mem"); + tcase_add_test (tc, rec_parser_seek_mem_tell); + tcase_add_test (tc, rec_parser_seek_mem_skip); + tcase_add_test (tc, rec_parser_seek_mem_fail); + + return tc; +} + +/* End of rec-parser-seek-mem.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-parser/tsuite-rec-parser.c b/devspec.en_US/project/recutils/torture/rec-parser/tsuite-rec-parser.c new file mode 100755 index 0000000..e2af5b2 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-parser/tsuite-rec-parser.c @@ -0,0 +1,73 @@ +/* -*- mode: C -*- + * + * File: tsuite-rec-parser.c + * Date: Sat Nov 13 15:20:44 2010 + * + * GNU recutils - rec_parser test suite + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +extern TCase *test_rec_parser_new (void); +extern TCase *test_rec_parser_new_str (void); +extern TCase *test_rec_parser_new_mem (void); +extern TCase *test_rec_parser_destroy (void); +extern TCase *test_rec_parse_field_name_str (void); +extern TCase *test_rec_parse_field_name (void); +extern TCase *test_rec_parse_field (void); +extern TCase *test_rec_parse_record (void); +extern TCase *test_rec_parse_record_str (void); +extern TCase *test_rec_parse_rset (void); +extern TCase *test_rec_parse_db (void); +extern TCase *test_rec_parser_eof (void); +extern TCase *test_rec_parser_error (void); +extern TCase *test_rec_parser_reset (void); +extern TCase *test_rec_parser_perror (void); +extern TCase *test_rec_parser_seek_mem (void); + +Suite * +tsuite_rec_parser () +{ + Suite *s; + + s = suite_create ("rec-parser"); + suite_add_tcase (s, test_rec_parser_new ()); + suite_add_tcase (s, test_rec_parser_new_str ()); + suite_add_tcase (s, test_rec_parser_new_mem ()); + suite_add_tcase (s, test_rec_parser_destroy ()); + suite_add_tcase (s, test_rec_parse_field_name_str ()); + suite_add_tcase (s, test_rec_parse_field_name ()); + suite_add_tcase (s, test_rec_parse_field ()); + suite_add_tcase (s, test_rec_parse_record ()); + suite_add_tcase (s, test_rec_parse_record_str ()); + suite_add_tcase (s, test_rec_parse_rset ()); + suite_add_tcase (s, test_rec_parse_db ()); + suite_add_tcase (s, test_rec_parser_eof ()); + suite_add_tcase (s, test_rec_parser_error ()); + suite_add_tcase (s, test_rec_parser_reset ()); + suite_add_tcase (s, test_rec_parser_perror ()); + suite_add_tcase (s, test_rec_parser_seek_mem ()); + + return s; +} + + +/* End of tsuite-rec-parser.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-record/.deps/runtests-tsuite-rec-record.Po b/devspec.en_US/project/recutils/torture/rec-record/.deps/runtests-tsuite-rec-record.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-record/.deps/runtests-tsuite-rec-record.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-record/tsuite-rec-record.c b/devspec.en_US/project/recutils/torture/rec-record/tsuite-rec-record.c new file mode 100755 index 0000000..069813a --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-record/tsuite-rec-record.c @@ -0,0 +1,51 @@ +/* -*- mode: C -*- + * + * File: tsuite-rec-record.c + * Date: Thu Mar 5 23:56:38 2009 + * + * GNU recutils - rec_record test suite + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +/* extern TCase *test_rec_record_new (void); +extern TCase *test_rec_record_size (void); +extern TCase *test_rec_record_field_p (void); +extern TCase *test_rec_record_insert_field (void); +extern TCase *test_rec_record_remove_field (void); */ + +Suite * +tsuite_rec_record () +{ + Suite *s; + + s = suite_create ("rec-record"); + /* suite_add_tcase (s, test_rec_record_new ()); + suite_add_tcase (s, test_rec_record_size ()); + suite_add_tcase (s, test_rec_record_field_p ()); + suite_add_tcase (s, test_rec_record_insert_field ()); + suite_add_tcase (s, test_rec_record_remove_field ()); */ + + return s; +} + + +/* End of tsuite-rec-record.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-rec-sex-compile.Po b/devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-rec-sex-compile.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-rec-sex-compile.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-rec-sex-destroy.Po b/devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-rec-sex-destroy.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-rec-sex-destroy.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-rec-sex-eval.Po b/devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-rec-sex-eval.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-rec-sex-eval.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-rec-sex-new.Po b/devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-rec-sex-new.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-rec-sex-new.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-tsuite-rec-sex.Po b/devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-tsuite-rec-sex.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-sex/.deps/runtests-tsuite-rec-sex.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-sex/rec-sex-compile.c b/devspec.en_US/project/recutils/torture/rec-sex/rec-sex-compile.c new file mode 100755 index 0000000..af07b57 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-sex/rec-sex-compile.c @@ -0,0 +1,91 @@ +/* -*- mode: C -*- + * + * File: rec-sex-compile.c + * Date: Mon Nov 15 15:12:24 2010 + * + * GNU recutils - rec_sex_compile unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_sex_compile_nominal + * Unit: rec_sex_compile + * Description: + * + Compile valid selection expressions. + */ +START_TEST(rec_sex_compile_nominal) +{ + rec_sex_t sex; + + sex = rec_sex_new (false); + fail_if (sex == NULL); + fail_if (!rec_sex_compile (sex, + "true")); + rec_sex_destroy (sex); + + sex = rec_sex_new (false); + fail_if (sex == NULL); + fail_if (!rec_sex_compile (sex, + "false")); + rec_sex_destroy (sex); +} +END_TEST + +/*- + * Test: rec_sex_compile_invalid + * Unit: rec_sex_compile + * Description: + * + Try to compile invalid selection expressions. + */ +START_TEST(rec_sex_compile_invalid) +{ + rec_sex_t sex; + + sex = rec_sex_new (false); + fail_if (sex == NULL); + fail_if (rec_sex_compile (sex, "")); + rec_sex_destroy (sex); + + sex = rec_sex_new (false); + fail_if (sex == NULL); + fail_if (rec_sex_compile (sex, "+")); + rec_sex_destroy (sex); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_sex_compile (void) +{ + TCase *tc = tcase_create ("rec_sex_compile"); + tcase_add_test (tc, rec_sex_compile_nominal); + tcase_add_test (tc, rec_sex_compile_invalid); + + return tc; +} + +/* End of rec-sex-compile.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-sex/rec-sex-destroy.c b/devspec.en_US/project/recutils/torture/rec-sex/rec-sex-destroy.c new file mode 100755 index 0000000..a35a7a0 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-sex/rec-sex-destroy.c @@ -0,0 +1,64 @@ +/* -*- mode: C -*- + * + * File: rec-sex-destroy.c + * Date: Mon Nov 15 15:06:48 2010 + * + * GNU recutils - rec_sex_destroy unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_sex_destroy_nominal + * Unit: rec_sex_destroy + * Description: + * + Destroy selection expressions. + */ +START_TEST(rec_sex_destroy_nominal) +{ + rec_sex_t sex; + + sex = rec_sex_new (true); + fail_if (sex == NULL); + rec_sex_destroy (sex); + + sex = rec_sex_new (false); + fail_if (sex == NULL); + rec_sex_destroy (sex); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_sex_destroy (void) +{ + TCase *tc = tcase_create ("rec_sex_destroy"); + tcase_add_test (tc, rec_sex_destroy_nominal); + + return tc; +} + +/* End of rec-sex-destroy.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-sex/rec-sex-eval.c b/devspec.en_US/project/recutils/torture/rec-sex/rec-sex-eval.c new file mode 100755 index 0000000..7e205c7 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-sex/rec-sex-eval.c @@ -0,0 +1,80 @@ +/* -*- mode: C -*- + * + * File: rec-sex-eval.c + * Date: Mon Nov 15 15:19:22 2010 + * + * GNU recutils - rec_sex_eval unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_sex_eval_match + * Unit: rec_sex_eval + * Description: + * + Eval SEX expressions against matching records. + */ +START_TEST(rec_sex_eval_match) +{ + rec_sex_t sex; + + sex = rec_sex_new (false); + fail_if (sex == NULL); + + rec_sex_destroy (sex); +} +END_TEST + +/*- + * Test: rec_sex_eval_nomatch + * Unit: rec_sex_eval + * Description: + * + Eval SEX expressions against non matching + * + records. + */ +START_TEST(rec_sex_eval_nomatch) +{ + rec_sex_t sex; + + sex = rec_sex_new (false); + fail_if (sex == NULL); + + rec_sex_destroy (sex); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_sex_eval (void) +{ + TCase *tc = tcase_create ("rec_sex_eval"); + tcase_add_test (tc, rec_sex_eval_match); + tcase_add_test (tc, rec_sex_eval_nomatch); + + return tc; +} + +/* End of rec-sex-eval.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-sex/rec-sex-new.c b/devspec.en_US/project/recutils/torture/rec-sex/rec-sex-new.c new file mode 100755 index 0000000..310ba01 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-sex/rec-sex-new.c @@ -0,0 +1,64 @@ +/* -*- mode: C -*- + * + * File: rec-sex-new.c + * Date: Mon Nov 15 15:06:48 2010 + * + * GNU recutils - rec_sex_new unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_sex_new_nominal + * Unit: rec_sex_new + * Description: + * + Create selection expressions. + */ +START_TEST(rec_sex_new_nominal) +{ + rec_sex_t sex; + + sex = rec_sex_new (true); + fail_if (sex == NULL); + rec_sex_destroy (sex); + + sex = rec_sex_new (false); + fail_if (sex == NULL); + rec_sex_destroy (sex); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_sex_new (void) +{ + TCase *tc = tcase_create ("rec_sex_new"); + tcase_add_test (tc, rec_sex_new_nominal); + + return tc; +} + +/* End of rec-sex-new.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-sex/tsuite-rec-sex.c b/devspec.en_US/project/recutils/torture/rec-sex/tsuite-rec-sex.c new file mode 100755 index 0000000..6c0b6e0 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-sex/tsuite-rec-sex.c @@ -0,0 +1,48 @@ +/* -*- mode: C -*- + * + * File: tsuite-rec-sex.c + * Date: Mon Nov 15 15:04:12 2010 + * + * GNU recutils - rec_sex test suite. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +extern TCase *test_rec_sex_new (void); +extern TCase *test_rec_sex_destroy (void); +extern TCase *test_rec_sex_compile (void); +extern TCase *test_rec_sex_eval (void); + +Suite * +tsuite_rec_sex () +{ + Suite *s; + + s = suite_create ("rec-sex"); + suite_add_tcase (s, test_rec_sex_new ()); + suite_add_tcase (s, test_rec_sex_destroy ()); + suite_add_tcase (s, test_rec_sex_compile ()); + suite_add_tcase (s, test_rec_sex_eval ()); + + return s; +} + +/* End of tsuite-rec-sex.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-type-reg/.deps/runtests-rec-type-reg-destroy.Po b/devspec.en_US/project/recutils/torture/rec-type-reg/.deps/runtests-rec-type-reg-destroy.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type-reg/.deps/runtests-rec-type-reg-destroy.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-type-reg/.deps/runtests-rec-type-reg-get.Po b/devspec.en_US/project/recutils/torture/rec-type-reg/.deps/runtests-rec-type-reg-get.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type-reg/.deps/runtests-rec-type-reg-get.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-type-reg/.deps/runtests-rec-type-reg-new.Po b/devspec.en_US/project/recutils/torture/rec-type-reg/.deps/runtests-rec-type-reg-new.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type-reg/.deps/runtests-rec-type-reg-new.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-type-reg/.deps/runtests-tsuite-rec-type-reg.Po b/devspec.en_US/project/recutils/torture/rec-type-reg/.deps/runtests-tsuite-rec-type-reg.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type-reg/.deps/runtests-tsuite-rec-type-reg.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-type-reg/rec-type-reg-destroy.c b/devspec.en_US/project/recutils/torture/rec-type-reg/rec-type-reg-destroy.c new file mode 100755 index 0000000..fa5f0b0 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type-reg/rec-type-reg-destroy.c @@ -0,0 +1,60 @@ +/* -*- mode: C -*- + * + * File: rec-type-reg-destroy.c + * Date: Fri Oct 29 21:09:51 2010 + * + * GNU recutils - rec_type_reg_destroy unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_type_reg_destroy_nominal + * Unit: rec_type_reg_destroy + * Description: + * + Destroy a type registry. + */ +START_TEST(rec_type_reg_destroy_nominal) +{ + rec_type_reg_t reg; + + reg = rec_type_reg_new (); + fail_if (reg == NULL); + + rec_type_reg_destroy (reg); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_type_reg_destroy (void) +{ + TCase *tc = tcase_create ("rec_type_reg_destroy"); + tcase_add_test (tc, rec_type_reg_destroy_nominal); + + return tc; +} + +/* End of rec-type_reg_destroy.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-type-reg/rec-type-reg-get.c b/devspec.en_US/project/recutils/torture/rec-type-reg/rec-type-reg-get.c new file mode 100755 index 0000000..fe904fb --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type-reg/rec-type-reg-get.c @@ -0,0 +1,95 @@ +/* -*- mode: C -*- + * + * File: rec-type-reg-get.c + * Date: Fri Oct 29 21:30:27 2010 + * + * GNU recutils - rec_type_reg_get unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_type_reg_get_nominal + * Unit: rec_type_reg_get + * Description: + * + Insert a type in a type registry and get it. + * + The call shall success. + */ +START_TEST(rec_type_reg_get_nominal) +{ + rec_type_t type; + rec_type_t type2; + rec_type_reg_t reg; + + reg = rec_type_reg_new (); + fail_if (reg == NULL); + + /* Register a type. */ + type = rec_type_new ("int"); + rec_type_set_name (type, "foo"); + fail_if (type == NULL); + rec_type_reg_add (reg, type); + + /* Get the type and compare. */ + type2 = rec_type_reg_get (reg, "foo"); + fail_if (type2 == NULL); + fail_if (type2 != type); + + rec_type_reg_destroy (reg); +} +END_TEST + +/*- + * Test: rec_type_reg_get_nonexisting + * Unit: rec_type_reg_get + * Description: + * + Try to get a nonexisting named type + * + from a type registry. + */ +START_TEST(rec_type_reg_get_nonexisting) +{ + rec_type_reg_t reg; + + reg = rec_type_reg_new (); + fail_if (reg == NULL); + + fail_if (rec_type_reg_get (reg, "foo") != NULL); + + rec_type_reg_destroy (reg); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_type_reg_get (void) +{ + TCase *tc = tcase_create ("rec_type_reg_get"); + tcase_add_test (tc, rec_type_reg_get_nominal); + tcase_add_test (tc, rec_type_reg_get_nonexisting); + + return tc; +} + +/* End of rec-type-reg-get.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-type-reg/rec-type-reg-new.c b/devspec.en_US/project/recutils/torture/rec-type-reg/rec-type-reg-new.c new file mode 100755 index 0000000..400c69a --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type-reg/rec-type-reg-new.c @@ -0,0 +1,60 @@ +/* -*- mode: C -*- Time-stamp: "2015-04-27 20:12:36 jemarch" + * + * File: rec-type-reg-new.c + * Date: Fri Oct 29 21:01:56 2010 + * + * GNU recutils - rec_type_reg_new unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_type_reg_new_nominal + * Unit: rec_type_reg_new + * Description: + * + Creation of a type registry. + */ +START_TEST(rec_type_reg_new_nominal) +{ + rec_type_reg_t reg; + + reg = rec_type_reg_new (); + fail_if (reg == NULL); + + rec_type_reg_destroy (reg); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_type_reg_new (void) +{ + TCase *tc = tcase_create ("rec_type_reg_new"); + tcase_add_test (tc, rec_type_reg_new_nominal); + + return tc; +} + +/* End of rec-type-reg-new.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-type-reg/tsuite-rec-type-reg.c b/devspec.en_US/project/recutils/torture/rec-type-reg/tsuite-rec-type-reg.c new file mode 100755 index 0000000..44981cb --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type-reg/tsuite-rec-type-reg.c @@ -0,0 +1,46 @@ +/* -*- mode: C -*- Time-stamp: "2015-04-27 20:12:44 jemarch" + * + * File: tsuite-rec-type-reg.c + * Date: Fri Oct 29 20:58:54 2010 + * + * GNU recutils - rec_type_reg test suite + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +extern TCase *test_rec_type_reg_new (void); +extern TCase *test_rec_type_reg_destroy (void); +extern TCase *test_rec_type_reg_get (void); + +Suite * +tsuite_rec_type_reg () +{ + Suite *s; + + s = suite_create ("rec-type-reg"); + suite_add_tcase (s, test_rec_type_reg_new ()); + suite_add_tcase (s, test_rec_type_reg_destroy ()); + suite_add_tcase (s, test_rec_type_reg_get ()); + + return s; +} + +/* End of tsuite-rec-type-reg.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-check.Po b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-check.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-check.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-descr-p.Po b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-descr-p.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-descr-p.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-destroy.Po b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-destroy.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-destroy.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-equal-p.Po b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-equal-p.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-equal-p.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-kind-str.Po b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-kind-str.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-kind-str.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-kind.Po b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-kind.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-kind.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-name.Po b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-name.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-name.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-new.Po b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-new.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-new.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-set-name.Po b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-set-name.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-rec-type-set-name.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-tsuite-rec-type.Po b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-tsuite-rec-type.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/.deps/runtests-tsuite-rec-type.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-type/rec-type-check.c b/devspec.en_US/project/recutils/torture/rec-type/rec-type-check.c new file mode 100755 index 0000000..82f92f2 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/rec-type-check.c @@ -0,0 +1,354 @@ +/* -*- mode: C -*- + * + * File: rec-type-check.c + * Date: Fri Oct 29 18:50:01 2010 + * + * GNU recutils - rec_type_check unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <stdlib.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_type_check_int + * Unit: rec_type_check + * Description: + * + Check strings of type int. + */ +START_TEST(rec_type_check_int) +{ + rec_type_t type; + char *err_str; + + type = rec_type_new ("int"); + fail_if (type == NULL); + + /* Positive tests. */ + fail_if (!rec_type_check (type, "10", NULL)); + fail_if (!rec_type_check (type, "01", NULL)); + fail_if (!rec_type_check (type, "-10", NULL)); + fail_if (!rec_type_check (type, " 10 \n\t ", NULL)); + + /* Negative tests. */ + fail_if (rec_type_check (type, "abc", NULL)); + fail_if (rec_type_check (type, "a10", NULL)); + fail_if (rec_type_check (type, "10a", &err_str)); + fail_if (err_str == NULL); + free (err_str); + + rec_type_destroy (type); +} +END_TEST + +/*- + * Test: rec_type_check_bool + * Unit: rec_type_check + * Description: + * + Check strings of type bool. + */ +START_TEST(rec_type_check_bool) +{ + rec_type_t type; + + type = rec_type_new ("bool"); + fail_if (type == NULL); + + /* Positive tests. */ + fail_if (!rec_type_check (type, "true", NULL)); + fail_if (!rec_type_check (type, "false", NULL)); + fail_if (!rec_type_check (type, "1", NULL)); + fail_if (!rec_type_check (type, "0", NULL)); + fail_if (!rec_type_check (type, "yes", NULL)); + fail_if (!rec_type_check (type, "no", NULL)); + fail_if (!rec_type_check (type, " yes \n\t ", NULL)); + + rec_type_destroy (type); +} +END_TEST + +/*- + * Test: rec_type_check_range + * Unit: rec_type_check + * Description: + * + Check strings of type range. + */ +START_TEST(rec_type_check_range) +{ + rec_type_t type; + + type = rec_type_new ("range -10 10"); + fail_if (type == NULL); + + /* Positive tests. */ + fail_if (!rec_type_check (type, "-10", NULL)); + fail_if (!rec_type_check (type, "10", NULL)); + fail_if (!rec_type_check (type, "010", NULL)); + fail_if (!rec_type_check (type, "5", NULL)); + fail_if (!rec_type_check (type, " 5 \n\t ", NULL)); + + /* Negative tests. */ + fail_if (rec_type_check (type, "-100", NULL)); + fail_if (rec_type_check (type, "100", NULL)); + fail_if (rec_type_check (type, "-11", NULL)); + fail_if (rec_type_check (type, "11", NULL)); + fail_if (rec_type_check (type, "abc", NULL)); + + rec_type_destroy (type); +} +END_TEST + +/*- + * Test: rec_type_check_real + * Unit: rec_type_check + * Description: + * + Check strings of type real. + */ +START_TEST(rec_type_check_real) +{ + rec_type_t type; + + type = rec_type_new ("real"); + + /* Positive tests. */ + fail_if (!rec_type_check (type, "3", NULL)); + fail_if (!rec_type_check (type, "-3", NULL)); + fail_if (!rec_type_check (type, "03", NULL)); + fail_if (!rec_type_check (type, "3.14", NULL)); + fail_if (!rec_type_check (type, "-3.14", NULL)); + fail_if (!rec_type_check (type, ".10", NULL)); + fail_if (!rec_type_check (type, "-.10", NULL)); + fail_if (!rec_type_check (type, " 3.14 \n\t ", NULL)); + + /* Negative tests. */ + fail_if (rec_type_check (type, "abc", NULL)); + fail_if (rec_type_check (type, "3.14a", NULL)); + + rec_type_destroy (type); +} +END_TEST + +/*- + * Test: rec_type_check_size + * Unit: rec_type_check + * Description: + * + Check strings of type size. + */ +START_TEST(rec_type_check_size) +{ + rec_type_t type; + + type = rec_type_new ("size 5"); + fail_if (type == NULL); + + /* Positive tests. */ + fail_if (!rec_type_check (type, "", NULL)); + fail_if (!rec_type_check (type, "abcde", NULL)); + fail_if (!rec_type_check (type, "ab", NULL)); + + /* Negative tests. */ + fail_if (rec_type_check (type, " abcde ", NULL)); + fail_if (rec_type_check (type, "abcdef", NULL)); + + rec_type_destroy (type); +} +END_TEST + +/*- + * Test: rec_type_check_line + * Unit: rec_type_check + * Description: + * + Check strings of type line. + */ +START_TEST(rec_type_check_line) +{ + rec_type_t type; + + type = rec_type_new ("line"); + fail_if (type == NULL); + + /* Positive tests. */ + fail_if (!rec_type_check (type, "", NULL)); + fail_if (!rec_type_check (type, "A line.", NULL)); + + /* Negative tests. */ + fail_if (rec_type_check (type, "\n", NULL)); + fail_if (rec_type_check (type, "several\nlines\n", NULL)); + + rec_type_destroy (type); +} +END_TEST + +/*- + * Test: rec_type_check_regexp + * Unit: rec_type_check + * Description: + * + Check strings of type regexp. + */ +START_TEST(rec_type_check_regexp) +{ + rec_type_t type; + + type = rec_type_new ("regexp /[abc][abc][abc]$/"); + fail_if (type == NULL); + + /* Positive tests. */ + fail_if (!rec_type_check (type, "abc", NULL)); + + /* Negative tests. */ + fail_if (rec_type_check (type, "", NULL)); + fail_if (rec_type_check (type, "abcx", NULL)); + fail_if (rec_type_check (type, "abc ", NULL)); + + rec_type_destroy (type); +} +END_TEST + +/*- + * Test: rec_type_check_date + * Unit: rec_type_check + * Description: + * + Check strings of type date. + */ +START_TEST(rec_type_check_date) +{ + rec_type_t type; + + type = rec_type_new ("date"); + fail_if (type == NULL); + + /* Positive tests. */ + fail_if (!rec_type_check (type, "13 August 1980", NULL)); + + /* Negative tests. */ + fail_if (rec_type_check (type, "", NULL)); + fail_if (rec_type_check (type, "1000 November -10", NULL)); + + rec_type_destroy (type); +} +END_TEST + +/*- + * Test: rec_type_check_enum + * Unit: rec_type_check + * Description: + * + Check strings of type enum. + */ +START_TEST(rec_type_check_enum) +{ + rec_type_t type; + + type = rec_type_new ("enum A B C"); + fail_if (type == NULL); + + /* Positive tests. */ + fail_if (!rec_type_check (type, "A", NULL)); + fail_if (!rec_type_check (type, "B", NULL)); + fail_if (!rec_type_check (type, "C", NULL)); + fail_if (!rec_type_check (type, " B \n\t ", NULL)); + + /* Negative tests. */ + fail_if (rec_type_check (type, "A B", NULL)); + fail_if (rec_type_check (type, "XXX", NULL)); + fail_if (rec_type_check (type, "", NULL)); + fail_if (rec_type_check (type, " ", NULL)); + + rec_type_destroy (type); +} +END_TEST + +/*- + * Test: rec_type_check_field + * Unit: rec_type_check + * Description: + * + Check strings of type field. + */ +START_TEST(rec_type_check_field) +{ + rec_type_t type; + + type = rec_type_new ("field"); + fail_if (type == NULL); + + /* Positive tests. */ + fail_if (!rec_type_check (type, "a", NULL)); + fail_if (!rec_type_check (type, " ac \n\t ", NULL)); + + /* Negative tests. */ + fail_if (rec_type_check (type, "", NULL)); + fail_if (rec_type_check (type, " ", NULL)); + fail_if (rec_type_check (type, "a:", NULL)); + fail_if (rec_type_check (type, "a:b:", NULL)); + fail_if (rec_type_check (type, "a%:b:", NULL)); + + rec_type_destroy (type); +} +END_TEST + +/*- + * Test: rec_type_check_email + * Unit: rec_type_check + * Description: + * + Check strings of type email. + */ +START_TEST(rec_type_check_email) +{ + rec_type_t type; + + type = rec_type_new ("email"); + fail_if (type == NULL); + + /* Positive tests. */ + fail_if (!rec_type_check (type, "jemarch@gnu.org", NULL)); + fail_if (!rec_type_check (type, " jemarch@gnu.org \n\t ", NULL)); + + /* Negative tests. */ + fail_if (rec_type_check (type, "", NULL)); + fail_if (rec_type_check (type, "invalid@@email.com", NULL)); + + rec_type_destroy (type); +} +END_TEST + +/* + * Test case creation function. + */ +TCase * +test_rec_type_check (void) +{ + TCase *tc = tcase_create ("rec_type_check"); + tcase_add_test (tc, rec_type_check_int); + tcase_add_test (tc, rec_type_check_bool); + tcase_add_test (tc, rec_type_check_range); + tcase_add_test (tc, rec_type_check_real); + tcase_add_test (tc, rec_type_check_size); + tcase_add_test (tc, rec_type_check_line); + tcase_add_test (tc, rec_type_check_regexp); + tcase_add_test (tc, rec_type_check_date); + tcase_add_test (tc, rec_type_check_enum); + tcase_add_test (tc, rec_type_check_field); + tcase_add_test (tc, rec_type_check_email); + + return tc; +} + +/* End of rec-type-check.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-type/rec-type-descr-p.c b/devspec.en_US/project/recutils/torture/rec-type/rec-type-descr-p.c new file mode 100755 index 0000000..ae2d8ad --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/rec-type-descr-p.c @@ -0,0 +1,95 @@ +/* -*- mode: C -*- + * + * File: rec-type-descr-p.c + * Date: Fri Oct 29 17:15:50 2010 + * + * GNU recutils - rec_type_descr_p unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_type_descr_p_nominal + * Unit: rec_type_descr_p + * Description: + * + Check valid type descriptions. + */ +START_TEST(rec_type_descr_p_nominal) +{ + fail_if (!rec_type_descr_p ("int")); + fail_if (!rec_type_descr_p ("int \n\n ")); + fail_if (!rec_type_descr_p ("bool")); + fail_if (!rec_type_descr_p ("range 10")); + fail_if (!rec_type_descr_p ("range 1 10")); + fail_if (!rec_type_descr_p ("real")); + fail_if (!rec_type_descr_p ("size 10")); + fail_if (!rec_type_descr_p ("line")); + fail_if (!rec_type_descr_p ("regexp /[abc][abc][abc]/")); + fail_if (!rec_type_descr_p ("regexp |/jo/jo|")); + fail_if (!rec_type_descr_p ("date")); + fail_if (!rec_type_descr_p ("enum A B C")); + fail_if (!rec_type_descr_p ("field")); + fail_if (!rec_type_descr_p ("email")); +} +END_TEST + +/*- + * Test: rec_type_descr_p_invalid + * Unit: rec_type_descr_p + * Description: + * + Check for invalid type descriptions. + */ +START_TEST(rec_type_descr_p_invalid) +{ + fail_if (rec_type_descr_p ("")); + fail_if (rec_type_descr_p (" ")); + fail_if (rec_type_descr_p ("int additionalstuff")); + fail_if (rec_type_descr_p ("invalidkeyword")); + fail_if (rec_type_descr_p ("range a b")); + fail_if (rec_type_descr_p ("range a 1")); + fail_if (rec_type_descr_p ("range 1 a")); + fail_if (rec_type_descr_p ("size")); + fail_if (rec_type_descr_p ("size xxx")); + fail_if (rec_type_descr_p ("size 10 extra")); + fail_if (rec_type_descr_p ("regexp")); + fail_if (rec_type_descr_p ("regexp foo")); + fail_if (rec_type_descr_p ("regexp /abc/ extra")); + fail_if (rec_type_descr_p ("enum")); + fail_if (rec_type_descr_p ("enum # ! '")); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_type_descr_p (void) +{ + TCase *tc = tcase_create ("rec_type_descr_p"); + tcase_add_test (tc, rec_type_descr_p_nominal); + tcase_add_test (tc, rec_type_descr_p_invalid); + + return tc; +} + +/* End of rec-type-descr-p.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-type/rec-type-destroy.c b/devspec.en_US/project/recutils/torture/rec-type/rec-type-destroy.c new file mode 100755 index 0000000..2b07d32 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/rec-type-destroy.c @@ -0,0 +1,60 @@ +/* -*- mode: C -*- + * + * File: rec-type-destroy.c + * Date: Fri Oct 29 16:57:32 2010 + * + * GNU recutils - rec_type_destroy unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_type_destroy_nominal + * Unit: rec_type_destroy + * Description: + * + Destroy a type. + */ +START_TEST(rec_type_destroy_nominal) +{ + rec_type_t type; + + type = rec_type_new ("int"); + fail_if (type == NULL); + + rec_type_destroy (type); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_type_destroy (void) +{ + TCase *tc = tcase_create ("rec_type_destroy"); + tcase_add_test (tc, rec_type_destroy_nominal); + + return tc; +} + +/* End of rec-type-destroy.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-type/rec-type-equal-p.c b/devspec.en_US/project/recutils/torture/rec-type/rec-type-equal-p.c new file mode 100755 index 0000000..dd1736a --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/rec-type-equal-p.c @@ -0,0 +1,140 @@ +/* -*- mode: C -*- + * + * File: rec-type-equal-p.c + * Date: Fri Oct 29 18:33:21 2010 + * + * GNU recutils - rec_type_equal_p unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_type_equal_p_nominal + * Unit: rec_type_equal_p + * Description: + * + Check equality for equal types. + */ +START_TEST(rec_type_equal_p_nominal) +{ + rec_type_t type1; + rec_type_t type2; + + type1 = rec_type_new ("int"); + type2 = rec_type_new ("int"); + fail_if (!rec_type_equal_p (type1, type2)); + rec_type_destroy (type1); + rec_type_destroy (type2); + + type1 = rec_type_new ("bool"); + type2 = rec_type_new ("bool"); + fail_if (!rec_type_equal_p (type1, type2)); + rec_type_destroy (type1); + rec_type_destroy (type2); + + type1 = rec_type_new ("range 1 10"); + type2 = rec_type_new ("range 1 10"); + fail_if (!rec_type_equal_p (type1, type2)); + rec_type_destroy (type1); + rec_type_destroy (type2); + + type1 = rec_type_new ("range 1 10"); + type2 = rec_type_new ("range -10 0"); + fail_if (rec_type_equal_p (type1, type2)); + rec_type_destroy (type1); + rec_type_destroy (type2); + + type1 = rec_type_new ("real"); + type2 = rec_type_new ("real"); + fail_if (!rec_type_equal_p (type1, type2)); + rec_type_destroy (type1); + rec_type_destroy (type2); + + type1 = rec_type_new ("size 10"); + type2 = rec_type_new ("size 10"); + fail_if (!rec_type_equal_p (type1, type2)); + rec_type_destroy (type1); + rec_type_destroy (type2); + + type1 = rec_type_new ("size 10"); + type2 = rec_type_new ("size 20"); + fail_if (rec_type_equal_p (type1, type2)); + rec_type_destroy (type1); + rec_type_destroy (type2); + + type1 = rec_type_new ("line"); + type2 = rec_type_new ("line"); + fail_if (!rec_type_equal_p (type1, type2)); + rec_type_destroy (type1); + rec_type_destroy (type2); + + type1 = rec_type_new ("date"); + type2 = rec_type_new ("date"); + fail_if (!rec_type_equal_p (type1, type2)); + rec_type_destroy (type1); + rec_type_destroy (type2); + + type1 = rec_type_new ("enum A B C"); + type2 = rec_type_new ("enum A B C \n\n "); + fail_if (!rec_type_equal_p (type1, type2)); + rec_type_destroy (type1); + rec_type_destroy (type2); + + type1 = rec_type_new ("enum A B C"); + type2 = rec_type_new ("enum B C A"); + fail_if (rec_type_equal_p (type1, type2)); + rec_type_destroy (type1); + rec_type_destroy (type2); + + type1 = rec_type_new ("enum A B C"); + type2 = rec_type_new ("enum B C A D"); + fail_if (rec_type_equal_p (type1, type2)); + rec_type_destroy (type1); + rec_type_destroy (type2); + + type1 = rec_type_new ("field"); + type2 = rec_type_new ("field"); + fail_if (!rec_type_equal_p (type1, type2)); + rec_type_destroy (type1); + rec_type_destroy (type2); + + type1 = rec_type_new ("email"); + type2 = rec_type_new ("email"); + fail_if (!rec_type_equal_p (type1, type2)); + rec_type_destroy (type1); + rec_type_destroy (type2); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_type_equal_p (void) +{ + TCase *tc = tcase_create ("rec_type_equal_p"); + tcase_add_test (tc, rec_type_equal_p_nominal); + + return tc; +} + +/* End of rec-type-equal-p.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-type/rec-type-kind-str.c b/devspec.en_US/project/recutils/torture/rec-type/rec-type-kind-str.c new file mode 100755 index 0000000..8fdd99e --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/rec-type-kind-str.c @@ -0,0 +1,113 @@ +/* -*- mode: C -*- + * + * File: rec-type-kind-str.c + * Date: Fri Oct 29 18:17:18 2010 + * + * GNU recutils - rec_type_kind_str unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_type_kind_str_nominal + * Unit: rec_type_kind_str + * Description: + * + Get the string representation of all + * + the supported types and check they are + * + ok. + */ +START_TEST(rec_type_kind_str_nominal) +{ + rec_type_t type; + + type = rec_type_new ("int"); + fail_if (type == NULL); + fail_if (strcmp (rec_type_kind_str (type), "int") != 0); + rec_type_destroy (type); + + type = rec_type_new ("bool"); + fail_if (type == NULL); + fail_if (strcmp (rec_type_kind_str (type), "bool") != 0); + rec_type_destroy (type); + + type = rec_type_new ("range 1 10"); + fail_if (type == NULL); + fail_if (strcmp (rec_type_kind_str (type), "range") != 0); + rec_type_destroy (type); + + type = rec_type_new ("real"); + fail_if (type == NULL); + fail_if (strcmp (rec_type_kind_str (type), "real") != 0); + rec_type_destroy (type); + + type = rec_type_new ("size 10"); + fail_if (type == NULL); + fail_if (strcmp (rec_type_kind_str (type), "size") != 0); + rec_type_destroy (type); + + type = rec_type_new ("line"); + fail_if (type == NULL); + fail_if (strcmp (rec_type_kind_str (type), "line") != 0); + rec_type_destroy (type); + + type = rec_type_new ("regexp /[abc]/"); + fail_if (type == NULL); + fail_if (strcmp (rec_type_kind_str (type), "regexp") != 0); + rec_type_destroy (type); + + type = rec_type_new ("date"); + fail_if (type == NULL); + fail_if (strcmp (rec_type_kind_str (type), "date") != 0); + rec_type_destroy (type); + + type = rec_type_new ("enum A B C"); + fail_if (type == NULL); + fail_if (strcmp (rec_type_kind_str (type), "enum") != 0); + rec_type_destroy (type); + + type = rec_type_new ("email"); + fail_if (type == NULL); + fail_if (strcmp (rec_type_kind_str (type), "email") != 0); + rec_type_destroy (type); + + type = rec_type_new ("field"); + fail_if (type == NULL); + fail_if (strcmp (rec_type_kind_str (type), "field") != 0); + rec_type_destroy (type); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_type_kind_str (void) +{ + TCase *tc = tcase_create ("rec_type_kind_str"); + tcase_add_test (tc, rec_type_kind_str_nominal); + + return tc; +} + +/* End of rec-type-kind-str.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-type/rec-type-kind.c b/devspec.en_US/project/recutils/torture/rec-type/rec-type-kind.c new file mode 100755 index 0000000..ee10680 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/rec-type-kind.c @@ -0,0 +1,110 @@ +/* -*- mode: C -*- + * + * File: rec-type-kind.c + * Date: Fri Oct 29 18:08:46 2010 + * + * GNU recutils - rec_type_kind unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_type_kind_nominal + * Unit: rec_type_kind + * Description: + * + Get the kind of types. + */ +START_TEST(rec_type_kind_nominal) +{ + rec_type_t type; + + type = rec_type_new ("int"); + fail_if (type == NULL); + fail_if (rec_type_kind (type) != REC_TYPE_INT); + rec_type_destroy (type); + + type = rec_type_new ("bool"); + fail_if (type == NULL); + fail_if (rec_type_kind (type) != REC_TYPE_BOOL); + rec_type_destroy (type); + + type = rec_type_new ("range 1 10"); + fail_if (type == NULL); + fail_if (rec_type_kind (type) != REC_TYPE_RANGE); + rec_type_destroy (type); + + type = rec_type_new ("real"); + fail_if (type == NULL); + fail_if (rec_type_kind (type) != REC_TYPE_REAL); + rec_type_destroy (type); + + type = rec_type_new ("size 10"); + fail_if (type == NULL); + fail_if (rec_type_kind (type) != REC_TYPE_SIZE); + rec_type_destroy (type); + + type = rec_type_new ("line"); + fail_if (type == NULL); + fail_if (rec_type_kind (type) != REC_TYPE_LINE); + rec_type_destroy (type); + + type = rec_type_new ("regexp /[abc]/"); + fail_if (type == NULL); + fail_if (rec_type_kind (type) != REC_TYPE_REGEXP); + rec_type_destroy (type); + + type = rec_type_new ("date"); + fail_if (type == NULL); + fail_if (rec_type_kind (type) != REC_TYPE_DATE); + rec_type_destroy (type); + + type = rec_type_new ("enum A B C"); + fail_if (type == NULL); + fail_if (rec_type_kind (type) != REC_TYPE_ENUM); + rec_type_destroy (type); + + type = rec_type_new ("field"); + fail_if (type == NULL); + fail_if (rec_type_kind (type) != REC_TYPE_FIELD); + rec_type_destroy (type); + + type = rec_type_new ("email"); + fail_if (type == NULL); + fail_if (rec_type_kind (type) != REC_TYPE_EMAIL); + rec_type_destroy (type); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_type_kind (void) +{ + TCase *tc = tcase_create ("rec_type_kind"); + tcase_add_test (tc, rec_type_kind_nominal); + + return tc; +} + +/* End of rec-type-kind.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-type/rec-type-name.c b/devspec.en_US/project/recutils/torture/rec-type/rec-type-name.c new file mode 100755 index 0000000..daa19c7 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/rec-type-name.c @@ -0,0 +1,85 @@ +/* -*- mode: C -*- + * + * File: rec-type-name.c + * Date: Thu Jul 14 21:36:05 2011 + * + * GNU recutils - rec_type_name unit tests + * + */ + +/* Copyright (C) 2011-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <stdlib.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_type_name_anonymous + * Unit: rec_type_name + * Description: + * + Get the name of an anonymous type. + * + The returned value shall be NULL. + */ +START_TEST(rec_type_name_anonymous) +{ + rec_type_t type; + + type = rec_type_new ("int"); + fail_if (type == NULL); + fail_if (rec_type_name (type) != NULL); + + rec_type_destroy (type); +} +END_TEST + +/*- + * Test: rec_type_name_nominal + * Unit: rec_type_name + * Description: + * + Get the name of a type. + * + The returned name shall be correct. + */ +START_TEST(rec_type_name_nominal) +{ + rec_type_t type; + + type = rec_type_new ("range 0 120"); + fail_if (type == NULL); + rec_type_set_name (type, "age_t"); + fail_if (strcmp ("age_t", + rec_type_name (type)) != 0); + + rec_type_destroy (type); +} +END_TEST + +/* + * Test case creation function. + */ +TCase * +test_rec_type_name (void) +{ + TCase *tc = tcase_create ("rec_type_name"); + tcase_add_test (tc, rec_type_name_anonymous); + tcase_add_test (tc, rec_type_name_nominal); + + return tc; +} + +/* End of rec-type-name.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-type/rec-type-new.c b/devspec.en_US/project/recutils/torture/rec-type/rec-type-new.c new file mode 100755 index 0000000..8fd9cb8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/rec-type-new.c @@ -0,0 +1,178 @@ +/* -*- mode: C -*- + * + * File: rec-type-new.c + * Date: Fri Oct 29 16:16:05 2010 + * + * GNU recutils - rec_type_new unit tests + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_type_new_nominal + * Unit: rec_type_new + * Description: + * + Create types from correct type descriptions. + */ +START_TEST(rec_type_new_nominal) +{ + rec_type_t type; + + type = rec_type_new ("int"); + fail_if (type == NULL); + rec_type_destroy (type); + + type = rec_type_new ("int \n\n "); + fail_if (type == NULL); + rec_type_destroy (type); + + type = rec_type_new ("bool"); + fail_if (type == NULL); + rec_type_destroy (type); + + type = rec_type_new ("range 10"); + fail_if (type == NULL); + rec_type_destroy (type); + + type = rec_type_new ("range 1 10"); + fail_if (type == NULL); + rec_type_destroy (type); + + type = rec_type_new ("real"); + fail_if (type == NULL); + rec_type_destroy (type); + + type = rec_type_new ("size 10"); + fail_if (type == NULL); + rec_type_destroy (type); + + type = rec_type_new ("line"); + fail_if (type == NULL); + rec_type_destroy (type); + + type = rec_type_new ("regexp /[abc][abc][abc]/"); + fail_if (type == NULL); + rec_type_destroy (type); + + type = rec_type_new ("regexp |/jo/jo|"); + fail_if (type == NULL); + rec_type_destroy (type); + + type = rec_type_new ("date"); + fail_if (type == NULL); + rec_type_destroy (type); + + type = rec_type_new ("enum A B C"); + fail_if (type == NULL); + rec_type_destroy (type); + + type = rec_type_new ("field"); + fail_if (type == NULL); + rec_type_destroy (type); + + type = rec_type_new ("email"); + fail_if (type == NULL); + rec_type_destroy (type); +} +END_TEST + +/*- + * Test: rec_type_new_invalid + * Unit: rec_type_new + * Description: + * + Try to create types from invalid type descriptions. + */ +START_TEST(rec_type_new_invalid) +{ + rec_type_t type; + + type = rec_type_new (""); + fail_if (type != NULL); + + type = rec_type_new (" "); + fail_if (type != NULL); + + type = rec_type_new ("int additionalstuff"); + fail_if (type != NULL); + + type = rec_type_new ("invalidkeyword"); + fail_if (type != NULL); + + type = rec_type_new ("range"); + fail_if (type != NULL); + + type = rec_type_new ("range a"); + fail_if (type != NULL); + + type = rec_type_new ("range a b"); + fail_if (type != NULL); + + type = rec_type_new ("range a 1"); + fail_if (type != NULL); + + type = rec_type_new ("range 1 a"); + fail_if (type != NULL); + + type = rec_type_new ("size"); + fail_if (type != NULL); + + type = rec_type_new ("size xxx"); + fail_if (type != NULL); + + type = rec_type_new ("size 10 extra"); + fail_if (type != NULL); + + type = rec_type_new ("regexp"); + fail_if (type != NULL); + + type = rec_type_new ("regexp foo"); + fail_if (type != NULL); + + type = rec_type_new ("regexp /abc/ extra"); + fail_if (type != NULL); + + type = rec_type_new ("enum"); + fail_if (type != NULL); + + type = rec_type_new ("enum "); + fail_if (type != NULL); + + type = rec_type_new ("enum # ! '"); + fail_if (type != NULL); +} +END_TEST + +/* + * Test case creation function + */ +TCase * +test_rec_type_new (void) +{ + TCase *tc = tcase_create ("rec_type_new"); + tcase_add_test (tc, rec_type_new_nominal); + tcase_add_test (tc, rec_type_new_invalid); + + return tc; +} + +/* End of rec-type-new.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-type/rec-type-set-name.c b/devspec.en_US/project/recutils/torture/rec-type/rec-type-set-name.c new file mode 100755 index 0000000..3a2810e --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/rec-type-set-name.c @@ -0,0 +1,66 @@ +/* -*- mode: C -*- + * + * File: rec-type-set-name.c + * Date: Thu Jul 14 21:47:51 2011 + * + * GNU recutils - rec_type_set_name unit tests + * + */ + +/* Copyright (C) 2011-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <stdlib.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_type_set_name_nominal + * Unit: rec_type_name + * Description: + * + Set the name of a type. + * + The call shall not crash. + * + The returned type must match. + */ +START_TEST(rec_type_set_name_nominal) +{ + rec_type_t type; + + type = rec_type_new ("int"); + fail_if (type == NULL); + rec_type_set_name (type, "foo_t"); + fail_if (strcmp ("foo_t", + rec_type_name (type)) != 0); + + rec_type_destroy (type); +} +END_TEST + +/* + * Test case creation function. + */ +TCase * +test_rec_type_set_name (void) +{ + TCase *tc = tcase_create ("rec_type_set_name"); + tcase_add_test (tc, rec_type_set_name_nominal); + + return tc; +} + +/* End of rec-type-set-name.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-type/tsuite-rec-type.c b/devspec.en_US/project/recutils/torture/rec-type/tsuite-rec-type.c new file mode 100755 index 0000000..d377d9b --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-type/tsuite-rec-type.c @@ -0,0 +1,58 @@ +/* -*- mode: C -*- + * + * File: tsuite-rec-type.c + * Date: Fri Oct 29 16:13:26 2010 + * + * GNU recutils - rec_type test suite + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +extern TCase *test_rec_type_new (void); +extern TCase *test_rec_type_destroy (void); +extern TCase *test_rec_type_descr_p (void); +extern TCase *test_rec_type_kind (void); +extern TCase *test_rec_type_kind_str (void); +extern TCase *test_rec_type_equal_p (void); +extern TCase *test_rec_type_check (void); +extern TCase *test_rec_type_name (void); +extern TCase *test_rec_type_set_name (void); + +Suite * +tsuite_rec_type () +{ + Suite *s; + + s = suite_create ("rec-type"); + suite_add_tcase (s, test_rec_type_new ()); + suite_add_tcase (s, test_rec_type_destroy ()); + suite_add_tcase (s, test_rec_type_descr_p ()); + suite_add_tcase (s, test_rec_type_kind ()); + suite_add_tcase (s, test_rec_type_kind_str ()); + suite_add_tcase (s, test_rec_type_equal_p ()); + suite_add_tcase (s, test_rec_type_check ()); + suite_add_tcase (s, test_rec_type_name ()); + suite_add_tcase (s, test_rec_type_set_name ()); + + return s; +} + +/* End of tsuite-rec-type.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-comment-str.Po b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-comment-str.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-comment-str.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-comment.Po b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-comment.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-comment.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-db.Po b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-db.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-db.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-field-name-str.Po b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-field-name-str.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-field-name-str.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-field-name.Po b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-field-name.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-field-name.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-field-str.Po b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-field-str.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-field-str.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-field.Po b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-field.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-field.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-record.Po b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-record.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-record.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-rset.Po b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-rset.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-write-rset.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-writer-destroy.Po b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-writer-destroy.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-writer-destroy.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-writer-new.Po b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-writer-new.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-rec-writer-new.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-tsuite-rec-writer.Po b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-tsuite-rec-writer.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/.deps/runtests-tsuite-rec-writer.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/torture/rec-writer/rec-write-comment-str.c b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-comment-str.c new file mode 100755 index 0000000..5490723 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-comment-str.c @@ -0,0 +1,99 @@ +/* -*- mode: C -*- + * + * File: rec-write-comment-str.c + * Date: Mon Nov 15 14:43:35 2010 + * + * GNU recutils - rec_write_comment_str unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_write_comment_str_nominal + * Unit: rec_write_comment_str + * Description: + * + Write comments. + */ +START_TEST(rec_write_comment_str_nominal) +{ + rec_comment_t comment; + char *str; + + comment = rec_comment_new ("foo bar"); + str = rec_write_comment_str (comment, REC_WRITER_NORMAL); + rec_comment_destroy (comment); + fail_if (strcmp (str, "#foo bar") != 0); + free (str); + + comment = rec_comment_new (""); + str = rec_write_comment_str (comment, REC_WRITER_NORMAL); + fail_if (str == NULL); + rec_comment_destroy (comment); + fail_if (strcmp (str, "#") != 0); + free (str); +} +END_TEST + +/*- + * Test: rec_write_comment_str_sexp + * Unit: rec_write_comment_str + * Description: + * + Write comments. + */ +START_TEST(rec_write_comment_str_sexp) +{ + rec_comment_t comment; + char *str; + + comment = rec_comment_new ("foo bar"); + str = rec_write_comment_str (comment, REC_WRITER_SEXP); + fail_if (str == NULL); + rec_comment_destroy (comment); + fail_if (strcmp (str, "(comment \"foo bar\")") != 0); + free (str); + + comment = rec_comment_new (""); + str = rec_write_comment_str (comment, REC_WRITER_SEXP); + fail_if (str == NULL); + rec_comment_destroy (comment); + fail_if (strcmp (str, "(comment \"\")") != 0); + free (str); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_write_comment_str (void) +{ + TCase *tc = tcase_create ("rec_write_comment_str"); + tcase_add_test (tc, rec_write_comment_str_nominal); + tcase_add_test (tc, rec_write_comment_str_sexp); + + return tc; +} + +/* End of rec-write-comment-str.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-writer/rec-write-comment.c b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-comment.c new file mode 100755 index 0000000..3f9169f --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-comment.c @@ -0,0 +1,127 @@ +/* -*- mode: C -*- + * + * File: rec-write-comment.c + * Date: Sun Nov 14 11:11:56 2010 + * + * GNU recutils - rec_write_comment unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_write_comment_nominal + * Unit: rec_write_comment + * Description: + * + Write comments. + */ +START_TEST(rec_write_comment_nominal) +{ + rec_writer_t writer; + rec_comment_t comment; + char *str; + size_t str_size; + + comment = rec_comment_new ("foo bar"); + writer = rec_writer_new_str (&str, &str_size); + fail_if (writer == NULL); + rec_writer_set_mode (writer, REC_WRITER_NORMAL); + fail_if (!rec_write_comment (writer, comment)); + rec_comment_destroy (comment); + rec_writer_destroy (writer); + fail_if (strcmp (str, "#foo bar") != 0); + free (str); + + comment = rec_comment_new ("one\ntwo\nthree"); + writer = rec_writer_new_str (&str, &str_size); + fail_if (writer == NULL); + rec_writer_set_mode (writer, REC_WRITER_NORMAL); + fail_if (!rec_write_comment (writer, comment)); + rec_comment_destroy (comment); + rec_writer_destroy (writer); + fail_if (strcmp (str, "#one\n#two\n#three") != 0); + free (str); + + comment = rec_comment_new (""); + writer = rec_writer_new_str (&str, &str_size); + fail_if (writer == NULL); + rec_writer_set_mode (writer, REC_WRITER_NORMAL); + fail_if (!rec_write_comment (writer, comment)); + rec_comment_destroy (comment); + rec_writer_destroy (writer); + fail_if (strcmp (str, "#") != 0); + free (str); +} +END_TEST + +/*- + * Test: rec_write_comment_sexp + * Unit: rec_write_comment + * Description: + * + Write comments. + */ +START_TEST(rec_write_comment_sexp) +{ + rec_writer_t writer; + rec_comment_t comment; + char *str; + size_t str_size; + + comment = rec_comment_new ("foo bar"); + writer = rec_writer_new_str (&str, &str_size); + fail_if (writer == NULL); + rec_writer_set_mode (writer, REC_WRITER_SEXP); + fail_if (!rec_write_comment (writer, comment)); + rec_comment_destroy (comment); + rec_writer_destroy (writer); + fail_if (strcmp (str, "(comment \"foo bar\")") != 0); + free (str); + + comment = rec_comment_new (""); + writer = rec_writer_new_str (&str, &str_size); + fail_if (writer == NULL); + rec_writer_set_mode (writer, REC_WRITER_SEXP); + fail_if (!rec_write_comment (writer, comment)); + rec_comment_destroy (comment); + rec_writer_destroy (writer); + fail_if (strcmp (str, "(comment \"\")") != 0); + free (str); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_write_comment (void) +{ + TCase *tc = tcase_create ("rec_write_comment"); + tcase_add_test (tc, rec_write_comment_nominal); + tcase_add_test (tc, rec_write_comment_sexp); + + return tc; +} + +/* End of rec-write-comment.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-writer/rec-write-db.c b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-db.c new file mode 100755 index 0000000..e56f246 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-db.c @@ -0,0 +1,100 @@ +/* -*- mode: C -*- + * + * File: rec-write-db.c + * Date: Mon Nov 15 14:06:38 2010 + * + * GNU recutils - rec_write_db unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_write_db_nominal + * Unit: rec_write_db + * Description: + * + Write a database. + */ +START_TEST(rec_write_db_nominal) +{ + rec_writer_t writer; + rec_db_t db; + rec_rset_t rset; + rec_record_t record; + rec_field_t field; + char *str; + size_t str_size; + + db = rec_db_new (); + fail_if (db == NULL); + + rset = rec_rset_new (); + fail_if (rset == NULL); + + record = rec_record_new (); + fail_if (record == NULL); + field = rec_field_new ("foo1", "value1"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + field = rec_field_new ("foo2", "value2"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + fail_if (rec_mset_append (rec_rset_mset (rset), MSET_RECORD, (void *) record, MSET_ANY) == NULL); + + record = rec_record_new (); + fail_if (record == NULL); + field = rec_field_new ("bar1", "value1"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + field = rec_field_new ("bar2", "value2"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + fail_if (rec_mset_append (rec_rset_mset (rset), MSET_RECORD, (void *) record, MSET_ANY) == NULL); + rec_db_insert_rset (db, rset, rec_db_size (db)); + + writer = rec_writer_new_str (&str, &str_size); + fail_if (!rec_write_db (writer, db)); + rec_db_destroy (db); + rec_writer_destroy (writer); + fail_if (strcmp (str, + "foo1: value1\nfoo2: value2\n\nbar1: value1\nbar2: value2\n") != 0); + free (str); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_write_db (void) +{ + TCase *tc = tcase_create ("rec_write_db"); + tcase_add_test (tc, rec_write_db_nominal); + + return tc; +} + + +/* End of rec-write-db.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-writer/rec-write-field-name-str.c b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-field-name-str.c new file mode 100755 index 0000000..e64b4a1 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-field-name-str.c @@ -0,0 +1,83 @@ +/* -*- mode: C -*- + * + * File: rec-write-field-name-str.c + * Date: Mon Nov 15 14:14:56 2010 + * + * GNU recutils - rec_write_field_name_str unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_write_field_name_str_nominal + * Unit: rec_write_field_name_str + * Description: + * + Write field names. + */ +START_TEST(rec_write_field_name_str_nominal) +{ + char *fname; + char *str; + + fname = "foo"; + str = rec_write_field_name_str (fname, REC_WRITER_NORMAL); + fail_if (str == NULL); + fail_if (strcmp (str, "foo:") != 0); + free (str); +} +END_TEST + +/*- + * Test: rec_write_field_name_str_sexp + * Unit: rec_write_field_name_str + * Description: + * + Write field names. + */ +START_TEST(rec_write_field_name_str_sexp) +{ + char *fname; + char *str; + + fname = "foo"; + str = rec_write_field_name_str (fname, REC_WRITER_SEXP); + fail_if (strcmp (str, "\"foo\"") != 0); + free (str); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_write_field_name_str (void) +{ + TCase *tc = tcase_create ("rec_write_field_name_str"); + tcase_add_test (tc, rec_write_field_name_str_nominal); + tcase_add_test (tc, rec_write_field_name_str_sexp); + + return tc; +} + +/* End of rec-write-field-name-str.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-writer/rec-write-field-name.c b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-field-name.c new file mode 100755 index 0000000..693df9e --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-field-name.c @@ -0,0 +1,93 @@ +/* -*- mode: C -*- + * + * File: rec-write-field-name.c + * Date: Sun Nov 14 11:32:17 2010 + * + * GNU recutils - rec_write_field_name unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_write_field_name_nominal + * Unit: rec_write_field_name + * Description: + * + Write field names. + */ +START_TEST(rec_write_field_name_nominal) +{ + rec_writer_t writer; + char *fname; + char *str; + size_t str_size; + + fname = "foo"; + writer = rec_writer_new_str (&str, &str_size); + rec_writer_set_mode (writer, REC_WRITER_NORMAL); + fail_if (!rec_write_field_name (writer, fname)); + rec_writer_destroy (writer); + fail_if (strcmp (str, "foo:") != 0); + free (str); +} +END_TEST + +/*- + * Test: rec_write_field_name_sexp + * Unit: rec_write_field_name + * Description: + * + Write field names. + */ +START_TEST(rec_write_field_name_sexp) +{ + rec_writer_t writer; + char *fname; + char *str; + size_t str_size; + + fname = "foo"; + writer = rec_writer_new_str (&str, &str_size); + rec_writer_set_mode (writer, REC_WRITER_SEXP); + fail_if (!rec_write_field_name (writer, fname)); + rec_writer_destroy (writer); + fail_if (strcmp (str, "\"foo\"") != 0); + free (str); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_write_field_name (void) +{ + TCase *tc = tcase_create ("rec_write_field_name"); + tcase_add_test (tc, rec_write_field_name_nominal); + tcase_add_test (tc, rec_write_field_name_sexp); + + return tc; +} + +/* End of rec-write-field-name.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-writer/rec-write-field-str.c b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-field-str.c new file mode 100755 index 0000000..84cbc7f --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-field-str.c @@ -0,0 +1,88 @@ +/* -*- mode: C -*- + * + * File: rec-write-field-str.c + * Date: Mon Nov 15 14:21:12 2010 + * + * GNU recutils - rec_write_field_str unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_write_field_str_nominal + * Unit: rec_write_field_str + * Description: + * + Write fields. + */ +START_TEST(rec_write_field_str_nominal) +{ + rec_field_t field; + char *str; + + field = rec_field_new ("foo", "value"); + fail_if (field == NULL); + str = rec_write_field_str (field, REC_WRITER_NORMAL); + fail_if (str == NULL); + rec_field_destroy (field); + fail_if (strcmp (str, "foo: value") != 0); + free (str); +} +END_TEST + +/*- + * Test: rec_write_field_str_sexp + * Unit: rec_write_field_str + * Description: + * + Write fields. + */ +START_TEST(rec_write_field_str_sexp) +{ + rec_field_t field; + char *str; + + field = rec_field_new ("foo", "value"); + fail_if (field == NULL); + str = rec_write_field_str (field, REC_WRITER_SEXP); + fail_if (str == NULL); + rec_field_destroy (field); + fail_if (strcmp (str, "(field \"foo\" \"value\")") != 0); + free (str); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_write_field_str (void) +{ + TCase *tc = tcase_create ("rec_write_field_str"); + tcase_add_test (tc, rec_write_field_str_nominal); + tcase_add_test (tc, rec_write_field_str_sexp); + + return tc; +} + +/* End of rec-write-field-str.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-writer/rec-write-field.c b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-field.c new file mode 100755 index 0000000..7efa3ee --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-field.c @@ -0,0 +1,171 @@ +/* -*- mode: C -*- + * + * File: rec-write-field.c + * Date: Sun Nov 14 13:11:01 2010 + * + * GNU recutils - rec_write_field unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <check.h> +#include <stdlib.h> + +#include <rec.h> + +/*- + * Test: rec_write_field_nominal + * Unit: rec_write_field + * Description: + * + Write fields. + */ +START_TEST(rec_write_field_nominal) +{ + rec_writer_t writer; + rec_field_t field; + char *str; + size_t str_size; + + field = rec_field_new ("foo", "value"); + fail_if (field == NULL); + writer = rec_writer_new_str (&str, &str_size); + rec_writer_set_mode (writer, REC_WRITER_NORMAL); + fail_if (!rec_write_field (writer, field)); + rec_field_destroy (field); + rec_writer_destroy (writer); + fail_if (strcmp (str, "foo: value") != 0); + free (str); +} +END_TEST + +/*- + * Test: rec_write_field_values + * Unit: rec_write_field + * Description: + * + Write a field using the + * + REC_WRITER_VALUES writing mode. + */ +START_TEST(rec_write_field_values) +{ + rec_writer_t writer; + rec_field_t field; + char *str; + size_t str_size; + + field = rec_field_new ("foo", "value"); + fail_if (field == NULL); + writer = rec_writer_new_str (&str, &str_size); + rec_writer_set_mode (writer, REC_WRITER_VALUES); + fail_if (!rec_write_field (writer, field)); + rec_field_destroy (field); + rec_writer_destroy (writer); + fail_if (strcmp (str, "value") != 0); + free (str); + + field = rec_field_new ("name", "foo\nbar\nbaz"); + fail_if (field == NULL); + writer = rec_writer_new_str (&str, &str_size); + rec_writer_set_mode (writer, REC_WRITER_VALUES); + fail_if (!rec_write_field (writer, field)); + rec_field_destroy (field); + rec_writer_destroy (writer); + fail_if (strcmp (str, "foo\nbar\nbaz") != 0); + free (str); +} +END_TEST + +/*- + * Test: rec_write_field_values_row + * Unit: rec_write_field + * Description: + * + Write a field using the + * + REC_WRITER_VALUES_ROW writing mode. + */ +START_TEST(rec_write_field_values_row) +{ + rec_writer_t writer; + rec_field_t field; + char *str; + size_t str_size; + + field = rec_field_new ("foo", "value"); + fail_if (field == NULL); + writer = rec_writer_new_str (&str, &str_size); + rec_writer_set_mode (writer, REC_WRITER_VALUES_ROW); + fail_if (!rec_write_field (writer, field)); + rec_field_destroy (field); + rec_writer_destroy (writer); + fail_if (strcmp (str, "value") != 0); + free (str); + + field = rec_field_new ("name", "foo\nbar\nbaz"); + fail_if (field == NULL); + writer = rec_writer_new_str (&str, &str_size); + rec_writer_set_mode (writer, REC_WRITER_VALUES_ROW); + fail_if (!rec_write_field (writer, field)); + rec_field_destroy (field); + rec_writer_destroy (writer); + fail_if (strcmp (str, "foo\nbar\nbaz") != 0); + free (str); +} +END_TEST + +/*- + * Test: rec_write_field_sexp + * Unit: rec_write_field + * Description: + * + Write fields. + */ +START_TEST(rec_write_field_sexp) +{ + rec_writer_t writer; + rec_field_t field; + char *str; + size_t str_size; + + field = rec_field_new ("foo", "value"); + fail_if (field == NULL); + writer = rec_writer_new_str (&str, &str_size); + rec_writer_set_mode (writer, REC_WRITER_SEXP); + fail_if (!rec_write_field (writer, field)); + rec_field_destroy (field); + rec_writer_destroy (writer); + fail_if (strcmp (str, "(field \"foo\" \"value\")") != 0); + free (str); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_write_field (void) +{ + TCase *tc = tcase_create ("rec_write_field"); + tcase_add_test (tc, rec_write_field_nominal); + tcase_add_test (tc, rec_write_field_sexp); + tcase_add_test (tc, rec_write_field_values); + tcase_add_test (tc, rec_write_field_values_row); + + return tc; +} + +/* End of rec-write-field.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-writer/rec-write-record.c b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-record.c new file mode 100755 index 0000000..92855f9 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-record.c @@ -0,0 +1,240 @@ +/* -*- mode: C -*- + * + * File: rec-write-record.c + * Date: Sun Nov 14 13:27:25 2010 + * + * GNU recutils - rec_write_record unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_write_record_nominal + * Unit: rec_write_record + * Description: + * + Write records. + */ +START_TEST(rec_write_record_nominal) +{ + rec_writer_t writer; + rec_record_t record; + rec_field_t field; + rec_comment_t comment; + char *str; + size_t str_size; + + record = rec_record_new (); + fail_if (record == NULL); + field = rec_field_new ("foo1", "value1"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + comment = rec_comment_new ("comment"); + fail_if (comment == NULL); + fail_if (rec_mset_append (rec_record_mset(record), MSET_COMMENT, (void *) comment, MSET_ANY) == NULL); + field = rec_field_new ("foo2", "value2"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + writer = rec_writer_new_str (&str, &str_size); + rec_writer_set_mode (writer, REC_WRITER_NORMAL); + fail_if (!rec_write_record (writer, record)); + rec_record_destroy (record); + rec_writer_destroy (writer); + fail_if (strcmp (str, + "foo1: value1\n#comment\nfoo2: value2") != 0); + free (str); +} +END_TEST + +/*- + * Test: rec_write_record_skip_comments + * Unit: rec_write_record + * Description: + * + Write records. + */ +START_TEST(rec_write_record_skip_comments) +{ + rec_writer_t writer; + rec_record_t record; + rec_field_t field; + rec_comment_t comment, comment2; + char *str; + size_t str_size; + + record = rec_record_new (); + fail_if (record == NULL); + field = rec_field_new ("foo1", "value1"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + comment = rec_comment_new ("comment"); + fail_if (comment == NULL); + fail_if (rec_mset_append (rec_record_mset(record), MSET_COMMENT, (void *) comment, MSET_ANY) == NULL); + field = rec_field_new ("foo2", "value2"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + comment2 = rec_comment_new ("comment2"); + fail_if (comment2 == NULL); + fail_if (rec_mset_append (rec_record_mset(record), MSET_COMMENT, (void *) comment2, MSET_ANY) == NULL); + writer = rec_writer_new_str (&str, &str_size); + rec_writer_set_mode (writer, REC_WRITER_NORMAL); + rec_writer_set_skip_comments (writer, true); + fail_if (!rec_write_record (writer, record)); + rec_record_destroy (record); + rec_writer_destroy (writer); + fail_if (strcmp (str, + "foo1: value1\nfoo2: value2") != 0); + free (str); +} +END_TEST + +/*- + * Test: rec_write_record_sexp + * Unit: rec_write_record + * Description: + * + Write records in sexps. + */ +START_TEST(rec_write_record_sexp) +{ + rec_writer_t writer; + rec_record_t record; + rec_field_t field; + rec_comment_t comment; + char *str; + size_t str_size; + + record = rec_record_new (); + fail_if (record == NULL); + field = rec_field_new ("foo1", "value1"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + comment = rec_comment_new ("comment"); + fail_if (comment == NULL); + fail_if (rec_mset_append (rec_record_mset(record), MSET_COMMENT, (void *) comment, MSET_ANY) == NULL); + field = rec_field_new ("foo2", "value2"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + writer = rec_writer_new_str (&str, &str_size); + rec_writer_set_mode (writer, REC_WRITER_SEXP); + fail_if (!rec_write_record (writer, record)); + rec_record_destroy (record); + rec_writer_destroy (writer); + fail_if (strcmp (str, + "(record (\n(field \"foo1\" \"value1\")\n(comment \"comment\")\n(field \"foo2\" \"value2\")))") != 0); + free (str); +} +END_TEST + +/*- + * Test: rec_write_record_values + * Unit: rec_write_record + * Description: + * + Write records using the + * + REC_WRITER_VALUES mode. + */ +START_TEST(rec_write_record_values) +{ + rec_writer_t writer; + rec_record_t record; + rec_field_t field; + rec_comment_t comment; + char *str; + size_t str_size; + + record = rec_record_new (); + fail_if (record == NULL); + field = rec_field_new ("foo1", "value1"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + comment = rec_comment_new ("comment"); + fail_if (comment == NULL); + fail_if (rec_mset_append (rec_record_mset(record), MSET_COMMENT, (void *) comment, MSET_ANY) == NULL); + field = rec_field_new ("foo2", "value2"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + writer = rec_writer_new_str (&str, &str_size); + rec_writer_set_mode (writer, REC_WRITER_VALUES); + fail_if (!rec_write_record (writer, record)); + rec_record_destroy (record); + rec_writer_destroy (writer); + fail_if (strcmp (str, "value1\nvalue2") != 0); + free (str); +} +END_TEST + +/*- + * Test: rec_write_record_values_row + * Unit: rec_write_record + * Description: + * + Write records using the + * + REC_WRITER_VALUES_ROW mode. + */ +START_TEST(rec_write_record_values_row) +{ + rec_writer_t writer; + rec_record_t record; + rec_field_t field; + rec_comment_t comment; + char *str; + size_t str_size; + + record = rec_record_new (); + fail_if (record == NULL); + field = rec_field_new ("foo1", "value1"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + comment = rec_comment_new ("comment"); + fail_if (comment == NULL); + fail_if (rec_mset_append (rec_record_mset(record), MSET_COMMENT, (void *) comment, MSET_ANY) == NULL); + field = rec_field_new ("foo2", "value2"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + writer = rec_writer_new_str (&str, &str_size); + rec_writer_set_mode (writer, REC_WRITER_VALUES_ROW); + fail_if (!rec_write_record (writer, record)); + rec_record_destroy (record); + rec_writer_destroy (writer); + fail_if (strcmp (str, "value1 value2") != 0); + free (str); +} +END_TEST + + +/* + * Test creation function + */ +TCase * +test_rec_write_record (void) +{ + TCase *tc = tcase_create ("rec_write_record"); + tcase_add_test (tc, rec_write_record_nominal); + tcase_add_test (tc, rec_write_record_skip_comments); + tcase_add_test (tc, rec_write_record_sexp); + tcase_add_test (tc, rec_write_record_values); + tcase_add_test (tc, rec_write_record_values_row); + + return tc; +} + +/* End of rec-write-record.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-writer/rec-write-rset.c b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-rset.c new file mode 100755 index 0000000..ff40e50 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/rec-write-rset.c @@ -0,0 +1,95 @@ +/* -*- mode: C -*- + * + * File: rec-write-rset.c + * Date: Mon Nov 15 13:56:25 2010 + * + * GNU recutils - rec_write_rset unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_write_rset_nominal + * Unit: rec_write_rset + * Description: + * + Write record sets. + */ +START_TEST(rec_write_rset_nominal) +{ + rec_writer_t writer; + rec_rset_t rset; + rec_record_t record; + rec_field_t field; + char *str; + size_t str_size; + + rset = rec_rset_new (); + fail_if (rset == NULL); + + record = rec_record_new (); + fail_if (record == NULL); + field = rec_field_new ("foo1", "value1"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + field = rec_field_new ("foo2", "value2"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + fail_if (rec_mset_append (rec_rset_mset (rset), MSET_RECORD, (void *) record, MSET_ANY) == NULL); + + record = rec_record_new (); + fail_if (record == NULL); + field = rec_field_new ("bar1", "value1"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + field = rec_field_new ("bar2", "value2"); + fail_if (field == NULL); + fail_if (rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); + fail_if (rec_mset_append (rec_rset_mset (rset), MSET_RECORD, (void *) record, MSET_ANY) == NULL); + + writer = rec_writer_new_str (&str, &str_size); + rec_writer_set_mode (writer, REC_WRITER_NORMAL); + fail_if (!rec_write_rset (writer, rset)); + rec_rset_destroy (rset); + rec_writer_destroy (writer); + fail_if (strcmp (str, + "foo1: value1\nfoo2: value2\n\nbar1: value1\nbar2: value2\n") != 0); + free (str); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_write_rset (void) +{ + TCase *tc = tcase_create ("rec_write_rset"); + tcase_add_test (tc, rec_write_rset_nominal); + + return tc; +} + +/* End of rec-write-rset.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-writer/rec-writer-destroy.c b/devspec.en_US/project/recutils/torture/rec-writer/rec-writer-destroy.c new file mode 100755 index 0000000..63b89e1 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/rec-writer-destroy.c @@ -0,0 +1,62 @@ +/* -*- mode: C -*- + * + * File: rec-writer-destroy.c + * Date: Sun Nov 14 10:57:39 2010 + * + * GNU recutils - rec_writer_destroy unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_writer_destroy_nominal + * Unit: rec_writer_destroy + * Description: + * + Destroy a rec writer. + */ +START_TEST(rec_writer_destroy_nominal) +{ + rec_writer_t writer; + + writer = rec_writer_new (stdout); + fail_if (writer == NULL); + + rec_writer_destroy (writer); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_writer_destroy (void) +{ + TCase *tc = tcase_create ("rec_writer_destroy"); + tcase_add_test (tc, rec_writer_destroy_nominal); + + return tc; +} + +/* End of rec-writer-destroy.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-writer/rec-writer-new.c b/devspec.en_US/project/recutils/torture/rec-writer/rec-writer-new.c new file mode 100755 index 0000000..9d34dc2 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/rec-writer-new.c @@ -0,0 +1,62 @@ +/* -*- mode: C -*- + * + * File: rec-writer-new.c + * Date: Sun Nov 14 10:57:39 2010 + * + * GNU recutils - rec_writer_new unit tests. + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <string.h> +#include <stdio.h> +#include <check.h> + +#include <rec.h> + +/*- + * Test: rec_writer_new_nominal + * Unit: rec_writer_new + * Description: + * + Create a rec writer. + */ +START_TEST(rec_writer_new_nominal) +{ + rec_writer_t writer; + + writer = rec_writer_new (stdout); + fail_if (writer == NULL); + + rec_writer_destroy (writer); +} +END_TEST + +/* + * Test creation function + */ +TCase * +test_rec_writer_new (void) +{ + TCase *tc = tcase_create ("rec_writer_new"); + tcase_add_test (tc, rec_writer_new_nominal); + + return tc; +} + +/* End of rec-writer-new.c */ diff --git a/devspec.en_US/project/recutils/torture/rec-writer/tsuite-rec-writer.c b/devspec.en_US/project/recutils/torture/rec-writer/tsuite-rec-writer.c new file mode 100755 index 0000000..dc77987 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/rec-writer/tsuite-rec-writer.c @@ -0,0 +1,62 @@ +/* -*- mode: C -*- + * + * File: tsuite-rec-writer.c + * Date: Sun Nov 14 10:54:46 2010 + * + * GNU recutils - rec_writer test suite + * + */ + +/* Copyright (C) 2010-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> +#include <check.h> + +extern TCase *test_rec_writer_new (void); +extern TCase *test_rec_writer_destroy (void); +extern TCase *test_rec_write_comment (void); +extern TCase *test_rec_write_field_name (void); +extern TCase *test_rec_write_field (void); +extern TCase *test_rec_write_record (void); +extern TCase *test_rec_write_rset (void); +extern TCase *test_rec_write_db (void); +extern TCase *test_rec_write_field_name_str (void); +extern TCase *test_rec_write_field_str (void); +extern TCase *test_rec_write_comment_str (void); + +Suite * +tsuite_rec_writer () +{ + Suite *s; + + s = suite_create ("rec-writer"); + suite_add_tcase (s, test_rec_writer_new ()); + suite_add_tcase (s, test_rec_writer_destroy ()); + suite_add_tcase (s, test_rec_write_comment ()); + suite_add_tcase (s, test_rec_write_field_name ()); + suite_add_tcase (s, test_rec_write_field ()); + suite_add_tcase (s, test_rec_write_record ()); + suite_add_tcase (s, test_rec_write_rset ()); + suite_add_tcase (s, test_rec_write_db ()); + suite_add_tcase (s, test_rec_write_field_name_str ()); + suite_add_tcase (s, test_rec_write_field_str ()); + suite_add_tcase (s, test_rec_write_comment_str ()); + + return s; +} + +/* End of tsuite-rec-writer.c */ diff --git a/devspec.en_US/project/recutils/torture/runtests.c b/devspec.en_US/project/recutils/torture/runtests.c new file mode 100755 index 0000000..cfc8b9e --- /dev/null +++ b/devspec.en_US/project/recutils/torture/runtests.c @@ -0,0 +1,72 @@ +/* -*- mode: C -*- + * + * File: runtests.c + * Date: Sun Mar 1 17:00:14 2009 + * + * GNU recutils - Unit testing driver + * + */ + +/* Copyright (C) 2009-2015 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <stdio.h> +#include <check.h> + +extern Suite *tsuite_rec_mset (void); +extern Suite *tsuite_rec_comment (void); +extern Suite *tsuite_rec_field_name (void); +extern Suite *tsuite_rec_type (void); +extern Suite *tsuite_rec_type_reg (void); +extern Suite *tsuite_rec_field (void); +extern Suite *tsuite_rec_record (void); +extern Suite *tsuite_rec_fex (void); +extern Suite *tsuite_rec_parser (void); +extern Suite *tsuite_rec_writer (void); +extern Suite *tsuite_rec_sex (void); + +int +main (int argc, char **argv) +{ + int failures; + SRunner *sr; + + sr = srunner_create (NULL); + + srunner_add_suite (sr, tsuite_rec_mset ()); + srunner_add_suite (sr, tsuite_rec_comment ()); + srunner_add_suite (sr, tsuite_rec_field_name ()); + srunner_add_suite (sr, tsuite_rec_fex ()); + srunner_add_suite (sr, tsuite_rec_type ()); + srunner_add_suite (sr, tsuite_rec_type_reg ()); + srunner_add_suite (sr, tsuite_rec_field ()); + srunner_add_suite (sr, tsuite_rec_record ()); + srunner_add_suite (sr, tsuite_rec_parser ()); + srunner_add_suite (sr, tsuite_rec_writer ()); + srunner_add_suite (sr, tsuite_rec_sex ()); + + srunner_set_log (sr, "tests.log"); + + srunner_run_all (sr, CK_ENV); + failures = srunner_ntests_failed (sr); + srunner_free (sr); + + return (failures == 0) ? 0 : 1; +} + +/* End of runtests.c */ diff --git a/devspec.en_US/project/recutils/torture/utils/Makefile b/devspec.en_US/project/recutils/torture/utils/Makefile new file mode 100755 index 0000000..e057071 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/utils/Makefile @@ -0,0 +1,2157 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# torture/utils/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# Makefile for torture/utils. +# +# Copyright (C) 2010-2015 Jose E. Marchesi. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/recutils +pkgincludedir = $(includedir)/recutils +pkglibdir = $(libdir)/recutils +pkglibexecdir = $(libexecdir)/recutils +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +subdir = torture/utils +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = config.sh +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_$(V)) +am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check recheck +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.sh.in \ + $(top_srcdir)/build-aux/test-driver +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing aclocal-1.15 +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = $${TAR-tar} +AM_DEFAULT_VERBOSITY = 1 +APPLE_UNIVERSAL_BUILD = 0 +AR = ar +ARFLAGS = cr +ASM_SYMBOL_PREFIX = "" +AUTOCONF = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoconf +AUTOHEADER = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoheader +AUTOMAKE = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing automake-1.15 +AWK = gawk +BASH_HEADERS = /usr/include/bash +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CA68 = +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CHECK_CFLAGS = +CHECK_LIBS = +CONFIG_INCLUDE = src/config.h +CPP = gcc -E +CPPFLAGS = +CURLLIBS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = false +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FGREP = /bin/grep -F +FLOAT_H = +FLOOR_LIBM = -lm +GETOPT_CDEFS_H = +GETOPT_H = +GETTEXT_MACRO_VERSION = 0.19 +GLIBC21 = yes +GLIB_CFLAGS = +GLIB_LIBS = +GMSGFMT = /usr/bin/msgfmt +GMSGFMT_015 = /usr/bin/msgfmt +GNULIB_ACOSF = 0 +GNULIB_ACOSL = 0 +GNULIB_ASINF = 0 +GNULIB_ASINL = 0 +GNULIB_ATAN2F = 0 +GNULIB_ATANF = 0 +GNULIB_ATANL = 0 +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CANONICALIZE_FILE_NAME = 1 +GNULIB_CBRT = 0 +GNULIB_CBRTF = 0 +GNULIB_CBRTL = 0 +GNULIB_CEIL = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHDIR = 1 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 1 +GNULIB_COPYSIGN = 0 +GNULIB_COPYSIGNF = 0 +GNULIB_COPYSIGNL = 0 +GNULIB_COSF = 0 +GNULIB_COSHF = 0 +GNULIB_COSL = 0 +GNULIB_CTIME = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP = 0 +GNULIB_DUP2 = 1 +GNULIB_DUP3 = 0 +GNULIB_DUPLOCALE = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 1 +GNULIB_EXP2 = 0 +GNULIB_EXP2F = 0 +GNULIB_EXP2L = 0 +GNULIB_EXPF = 0 +GNULIB_EXPL = 0 +GNULIB_EXPLICIT_BZERO = 0 +GNULIB_EXPM1 = 0 +GNULIB_EXPM1F = 0 +GNULIB_EXPM1L = 0 +GNULIB_FABSF = 0 +GNULIB_FABSL = 0 +GNULIB_FACCESSAT = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCHMODAT = 0 +GNULIB_FCHOWNAT = 0 +GNULIB_FCLOSE = 0 +GNULIB_FCNTL = 1 +GNULIB_FDATASYNC = 0 +GNULIB_FDOPEN = 0 +GNULIB_FFLUSH = 0 +GNULIB_FFS = 0 +GNULIB_FFSL = 0 +GNULIB_FFSLL = 0 +GNULIB_FGETC = 1 +GNULIB_FGETS = 1 +GNULIB_FLOCK = 1 +GNULIB_FLOOR = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FMA = 0 +GNULIB_FMAF = 0 +GNULIB_FMAL = 0 +GNULIB_FMOD = 0 +GNULIB_FMODF = 0 +GNULIB_FMODL = 0 +GNULIB_FOPEN = 0 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 1 +GNULIB_FPURGE = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREAD = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPF = 0 +GNULIB_FREXPL = 1 +GNULIB_FSCANF = 1 +GNULIB_FSEEK = 1 +GNULIB_FSEEKO = 1 +GNULIB_FSTAT = 1 +GNULIB_FSTATAT = 0 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 1 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FUTIMENS = 0 +GNULIB_FWRITE = 1 +GNULIB_GETC = 1 +GNULIB_GETCHAR = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 1 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETGROUPS = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 1 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETPASS = 1 +GNULIB_GETSUBOPT = 0 +GNULIB_GETTIMEOFDAY = 1 +GNULIB_GETUSERSHELL = 0 +GNULIB_GL_UNISTD_H_GETOPT = +GNULIB_GRANTPT = 0 +GNULIB_GROUP_MEMBER = 1 +GNULIB_HYPOT = 0 +GNULIB_HYPOTF = 0 +GNULIB_HYPOTL = 0 +GNULIB_ILOGB = 0 +GNULIB_ILOGBF = 0 +GNULIB_ILOGBL = 0 +GNULIB_IMAXABS = 0 +GNULIB_IMAXDIV = 0 +GNULIB_ISATTY = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_ISWBLANK = 0 +GNULIB_ISWCTYPE = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPF = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LINKAT = 0 +GNULIB_LOCALECONV = 1 +GNULIB_LOCALENAME = 0 +GNULIB_LOCALTIME = 0 +GNULIB_LOG = 0 +GNULIB_LOG10 = 0 +GNULIB_LOG10F = 0 +GNULIB_LOG10L = 0 +GNULIB_LOG1P = 0 +GNULIB_LOG1PF = 0 +GNULIB_LOG1PL = 0 +GNULIB_LOG2 = 0 +GNULIB_LOG2F = 0 +GNULIB_LOG2L = 0 +GNULIB_LOGB = 0 +GNULIB_LOGBF = 0 +GNULIB_LOGBL = 0 +GNULIB_LOGF = 0 +GNULIB_LOGL = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MBRLEN = 1 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MBTOWC = 1 +GNULIB_MEMCHR = 1 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDIRAT = 0 +GNULIB_MKDTEMP = 0 +GNULIB_MKFIFO = 0 +GNULIB_MKFIFOAT = 0 +GNULIB_MKNOD = 0 +GNULIB_MKNODAT = 0 +GNULIB_MKOSTEMP = 1 +GNULIB_MKOSTEMPS = 0 +GNULIB_MKSTEMP = 1 +GNULIB_MKSTEMPS = 0 +GNULIB_MKTIME = 1 +GNULIB_MODF = 0 +GNULIB_MODFF = 0 +GNULIB_MODFL = 0 +GNULIB_NANOSLEEP = 0 +GNULIB_NL_LANGINFO = 1 +GNULIB_NONBLOCKING = 0 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_OPENAT = 0 +GNULIB_OVERRIDES_STRUCT_STAT = 0 +GNULIB_OVERRIDES_WINT_T = 0 +GNULIB_PCLOSE = 0 +GNULIB_PERROR = 0 +GNULIB_PIPE = 0 +GNULIB_PIPE2 = 0 +GNULIB_POPEN = 0 +GNULIB_POSIX_OPENPT = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_POWF = 0 +GNULIB_PREAD = 0 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 1 +GNULIB_PTHREAD_SIGMASK = 0 +GNULIB_PTSNAME = 0 +GNULIB_PTSNAME_R = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_PWRITE = 0 +GNULIB_QSORT_R = 0 +GNULIB_RAISE = 1 +GNULIB_RANDOM = 0 +GNULIB_RANDOM_R = 1 +GNULIB_RAWMEMCHR = 1 +GNULIB_READ = 0 +GNULIB_READLINK = 1 +GNULIB_READLINKAT = 0 +GNULIB_REALLOCARRAY = 0 +GNULIB_REALLOC_POSIX = 1 +GNULIB_REALPATH = 1 +GNULIB_REMAINDER = 0 +GNULIB_REMAINDERF = 0 +GNULIB_REMAINDERL = 0 +GNULIB_REMOVE = 0 +GNULIB_RENAME = 1 +GNULIB_RENAMEAT = 0 +GNULIB_RINT = 0 +GNULIB_RINTF = 0 +GNULIB_RINTL = 0 +GNULIB_RMDIR = 1 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SCANF = 1 +GNULIB_SECURE_GETENV = 1 +GNULIB_SETENV = 1 +GNULIB_SETHOSTNAME = 0 +GNULIB_SETLOCALE = 0 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SINF = 0 +GNULIB_SINHF = 0 +GNULIB_SINL = 0 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 0 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_SQRTF = 0 +GNULIB_SQRTL = 0 +GNULIB_STAT = 1 +GNULIB_STDIO_H_NONBLOCKING = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 1 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 1 +GNULIB_STRERROR = 1 +GNULIB_STRERROR_R = 0 +GNULIB_STRFTIME = 0 +GNULIB_STRNCAT = 0 +GNULIB_STRNDUP = 0 +GNULIB_STRNLEN = 0 +GNULIB_STRPBRK = 0 +GNULIB_STRPTIME = 0 +GNULIB_STRSEP = 1 +GNULIB_STRSIGNAL = 0 +GNULIB_STRSTR = 0 +GNULIB_STRTOD = 0 +GNULIB_STRTOIMAX = 0 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRTOUMAX = 0 +GNULIB_STRVERSCMP = 1 +GNULIB_SYMLINK = 0 +GNULIB_SYMLINKAT = 0 +GNULIB_SYSTEM_POSIX = 0 +GNULIB_TANF = 0 +GNULIB_TANHF = 0 +GNULIB_TANL = 0 +GNULIB_TIMEGM = 1 +GNULIB_TIME_R = 1 +GNULIB_TIME_RZ = 1 +GNULIB_TMPFILE = 0 +GNULIB_TOWCTRANS = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCATE = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_TTYNAME_R = 0 +GNULIB_TZSET = 1 +GNULIB_UNISTD_H_NONBLOCKING = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNLINK = 0 +GNULIB_UNLINKAT = 0 +GNULIB_UNLOCKPT = 0 +GNULIB_UNSETENV = 1 +GNULIB_USLEEP = 0 +GNULIB_UTIMENSAT = 0 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 1 +GNULIB_VFSCANF = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSCANF = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WAITPID = 1 +GNULIB_WCPCPY = 0 +GNULIB_WCPNCPY = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSCASECMP = 0 +GNULIB_WCSCAT = 0 +GNULIB_WCSCHR = 0 +GNULIB_WCSCMP = 0 +GNULIB_WCSCOLL = 0 +GNULIB_WCSCPY = 0 +GNULIB_WCSCSPN = 0 +GNULIB_WCSDUP = 0 +GNULIB_WCSFTIME = 0 +GNULIB_WCSLEN = 0 +GNULIB_WCSNCASECMP = 0 +GNULIB_WCSNCAT = 0 +GNULIB_WCSNCMP = 0 +GNULIB_WCSNCPY = 0 +GNULIB_WCSNLEN = 0 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSPBRK = 0 +GNULIB_WCSRCHR = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCSSPN = 0 +GNULIB_WCSSTR = 0 +GNULIB_WCSTOK = 0 +GNULIB_WCSWIDTH = 0 +GNULIB_WCSXFRM = 0 +GNULIB_WCTOB = 1 +GNULIB_WCTOMB = 1 +GNULIB_WCTRANS = 0 +GNULIB_WCTYPE = 0 +GNULIB_WCWIDTH = 0 +GNULIB_WMEMCHR = 0 +GNULIB_WMEMCMP = 0 +GNULIB_WMEMCPY = 0 +GNULIB_WMEMMOVE = 0 +GNULIB_WMEMSET = 0 +GNULIB_WRITE = 0 +GNULIB__EXIT = 0 +GREP = /bin/grep +HAVE_ACOSF = 1 +HAVE_ACOSL = 1 +HAVE_ASINF = 1 +HAVE_ASINL = 1 +HAVE_ATAN2F = 1 +HAVE_ATANF = 1 +HAVE_ATANL = 1 +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_C99_STDINT_H = 1 +HAVE_CANONICALIZE_FILE_NAME = 1 +HAVE_CBRT = 1 +HAVE_CBRTF = 1 +HAVE_CBRTL = 1 +HAVE_CHOWN = 1 +HAVE_COPYSIGN = 1 +HAVE_COPYSIGNL = 1 +HAVE_COSF = 1 +HAVE_COSHF = 1 +HAVE_COSL = 1 +HAVE_CRTDEFS_H = 0 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_CBRTF = 1 +HAVE_DECL_CBRTL = 1 +HAVE_DECL_CEILF = 1 +HAVE_DECL_CEILL = 1 +HAVE_DECL_COPYSIGNF = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXP2 = 1 +HAVE_DECL_EXP2F = 1 +HAVE_DECL_EXP2L = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_EXPM1L = 1 +HAVE_DECL_FCHDIR = 1 +HAVE_DECL_FDATASYNC = 1 +HAVE_DECL_FLOORF = 1 +HAVE_DECL_FLOORL = 1 +HAVE_DECL_FPURGE = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_FSEEKO = 1 +HAVE_DECL_FTELLO = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETDOMAINNAME = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_GETPAGESIZE = 1 +HAVE_DECL_GETUSERSHELL = 1 +HAVE_DECL_IMAXABS = 1 +HAVE_DECL_IMAXDIV = 1 +HAVE_DECL_INITSTATE = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOCALTIME_R = 1 +HAVE_DECL_LOG10L = 1 +HAVE_DECL_LOG2 = 1 +HAVE_DECL_LOG2F = 1 +HAVE_DECL_LOG2L = 1 +HAVE_DECL_LOGB = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_REMAINDER = 1 +HAVE_DECL_REMAINDERL = 1 +HAVE_DECL_RINTF = 1 +HAVE_DECL_ROUND = 1 +HAVE_DECL_ROUNDF = 1 +HAVE_DECL_ROUNDL = 1 +HAVE_DECL_SETENV = 1 +HAVE_DECL_SETHOSTNAME = 1 +HAVE_DECL_SETSTATE = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR_R = 1 +HAVE_DECL_STRNCASECMP = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOIMAX = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_STRTOUMAX = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCATE = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_TRUNCL = 1 +HAVE_DECL_TTYNAME_R = 1 +HAVE_DECL_UNSETENV = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_DUP3 = 1 +HAVE_DUPLOCALE = 1 +HAVE_EUIDACCESS = 1 +HAVE_EXPF = 1 +HAVE_EXPL = 1 +HAVE_EXPLICIT_BZERO = 1 +HAVE_EXPM1 = 1 +HAVE_EXPM1F = 1 +HAVE_FABSF = 1 +HAVE_FABSL = 1 +HAVE_FACCESSAT = 1 +HAVE_FCHDIR = 1 +HAVE_FCHMODAT = 1 +HAVE_FCHOWNAT = 1 +HAVE_FCNTL = 1 +HAVE_FDATASYNC = 1 +HAVE_FEATURES_H = 1 +HAVE_FFS = 1 +HAVE_FFSL = 1 +HAVE_FFSLL = 1 +HAVE_FLOCK = 1 +HAVE_FMA = 1 +HAVE_FMAF = 1 +HAVE_FMAL = 1 +HAVE_FMODF = 1 +HAVE_FMODL = 1 +HAVE_FREELOCALE = 1 +HAVE_FREXPF = 1 +HAVE_FSEEKO = 1 +HAVE_FSTATAT = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_FUTIMENS = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETGROUPS = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETLOGIN = 1 +HAVE_GETOPT_H = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETPASS = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETTIMEOFDAY = 1 +HAVE_GRANTPT = 1 +HAVE_GROUP_MEMBER = 1 +HAVE_HYPOTF = 1 +HAVE_HYPOTL = 1 +HAVE_ILOGB = 1 +HAVE_ILOGBF = 1 +HAVE_ILOGBL = 1 +HAVE_IMAXDIV_T = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWBLANK = 1 +HAVE_ISWCNTRL = 1 +HAVE_LANGINFO_ALTMON = 0 +HAVE_LANGINFO_CODESET = 1 +HAVE_LANGINFO_ERA = 1 +HAVE_LANGINFO_H = 1 +HAVE_LANGINFO_T_FMT_AMPM = 1 +HAVE_LANGINFO_YESEXPR = 1 +HAVE_LCHMOD = 1 +HAVE_LCHOWN = 1 +HAVE_LDEXPF = 1 +HAVE_LIBGCRYPT = no +HAVE_LINK = 1 +HAVE_LINKAT = 1 +HAVE_LOG10F = 1 +HAVE_LOG10L = 1 +HAVE_LOG1P = 1 +HAVE_LOG1PF = 1 +HAVE_LOG1PL = 1 +HAVE_LOGBF = 1 +HAVE_LOGBL = 1 +HAVE_LOGF = 1 +HAVE_LOGL = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MAX_ALIGN_T = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSLEN = 0 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMCHR = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDIRAT = 1 +HAVE_MKDTEMP = 1 +HAVE_MKFIFO = 1 +HAVE_MKFIFOAT = 1 +HAVE_MKNOD = 1 +HAVE_MKNODAT = 1 +HAVE_MKOSTEMP = 1 +HAVE_MKOSTEMPS = 1 +HAVE_MKSTEMP = 1 +HAVE_MKSTEMPS = 1 +HAVE_MODFF = 1 +HAVE_MODFL = 1 +HAVE_MSVC_INVALID_PARAMETER_HANDLER = 0 +HAVE_NANOSLEEP = 1 +HAVE_NEWLOCALE = 1 +HAVE_NL_LANGINFO = 1 +HAVE_OPENAT = 1 +HAVE_OS_H = 0 +HAVE_PCLOSE = 1 +HAVE_PIPE = 1 +HAVE_PIPE2 = 1 +HAVE_POPEN = 1 +HAVE_POSIX_OPENPT = 1 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_POSIX_SPAWNATTR_T = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = 1 +HAVE_POWF = 1 +HAVE_PREAD = 1 +HAVE_PTHREAD_SIGMASK = 1 +HAVE_PTSNAME = 1 +HAVE_PTSNAME_R = 1 +HAVE_PWRITE = 1 +HAVE_QSORT_R = 1 +HAVE_RAISE = 1 +HAVE_RANDOM = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_READLINKAT = 1 +HAVE_REALLOCARRAY = 1 +HAVE_REALPATH = 1 +HAVE_REMAINDER = 1 +HAVE_REMAINDERF = 1 +HAVE_RENAMEAT = 1 +HAVE_RINT = 1 +HAVE_RINTL = 1 +HAVE_RPMATCH = 1 +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0 +HAVE_SCHED_H = +HAVE_SECURE_GETENV = 1 +HAVE_SETENV = 1 +HAVE_SETHOSTNAME = 1 +HAVE_SIGACTION = 1 +HAVE_SIGHANDLER_T = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SINF = 1 +HAVE_SINHF = 1 +HAVE_SINL = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_SQRTF = 1 +HAVE_SQRTL = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASECMP = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRINGS_H = 1 +HAVE_STRPBRK = 1 +HAVE_STRPTIME = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYMLINK = 1 +HAVE_SYMLINKAT = 1 +HAVE_SYS_BITYPES_H = 0 +HAVE_SYS_CDEFS_H = +HAVE_SYS_FILE_H = 1 +HAVE_SYS_INTTYPES_H = 0 +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TANF = 1 +HAVE_TANHF = 1 +HAVE_TANL = 1 +HAVE_TIMEGM = 1 +HAVE_TIMEZONE_T = 0 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_TZSET = 1 +HAVE_UNISTD_H = 1 +HAVE_UNLINKAT = 1 +HAVE_UNLOCKPT = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_USLEEP = 1 +HAVE_UTIMENSAT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCHAR_T = 1 +HAVE_WCPCPY = 1 +HAVE_WCPNCPY = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSCASECMP = 1 +HAVE_WCSCAT = 1 +HAVE_WCSCHR = 1 +HAVE_WCSCMP = 1 +HAVE_WCSCOLL = 1 +HAVE_WCSCPY = 1 +HAVE_WCSCSPN = 1 +HAVE_WCSDUP = 1 +HAVE_WCSFTIME = 1 +HAVE_WCSLEN = 1 +HAVE_WCSNCASECMP = 1 +HAVE_WCSNCAT = 1 +HAVE_WCSNCMP = 1 +HAVE_WCSNCPY = 1 +HAVE_WCSNLEN = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSPBRK = 1 +HAVE_WCSRCHR = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCSSPN = 1 +HAVE_WCSSTR = 1 +HAVE_WCSTOK = 1 +HAVE_WCSWIDTH = 1 +HAVE_WCSXFRM = 1 +HAVE_WCTRANS_T = 1 +HAVE_WCTYPE_H = 1 +HAVE_WCTYPE_T = 1 +HAVE_WINSOCK2_H = 0 +HAVE_WINT_T = 1 +HAVE_WMEMCHR = 1 +HAVE_WMEMCMP = 1 +HAVE_WMEMCPY = 1 +HAVE_WMEMMOVE = 1 +HAVE_WMEMSET = 1 +HAVE_XLOCALE_H = 1 +HAVE__BOOL = 1 +HAVE__EXIT = 1 +HELP2MAN = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing help2man +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +INT32_MAX_LT_INTMAX_MAX = 1 +INT64_MAX_EQ_LONG_MAX = 0 +INTLLIBS = +INTL_MACOSX_LIBS = +LD = /usr/bin/ld +LDFLAGS = +LEX = flex +LEXLIB = -lfl +LEX_OUTPUT_ROOT = lex.yy +LIBGCRYPT = +LIBGCRYPT_PREFIX = +LIBICONV = -liconv +LIBINTL = +LIBMULTITHREAD = -pthread -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBREADLINE = +LIBS = +LIBTHREAD = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIB_ACL = +LIB_CLOCK_GETTIME = +LIB_EACCESS = +LIB_POSIX_SPAWN = +LIB_SELINUX = +LIMITS_H = limits.h +LIPO = +LN_S = ln -s +LOCALCHARSET_TESTS_ENVIRONMENT = +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTALLOCA = +LTLIBGCRYPT = +LTLIBICONV = -liconv +LTLIBINTL = +LTLIBMULTITHREAD = -pthread +LTLIBOBJS = +LTLIBPTH = +LTLIBREADLINE = +LTLIBTHREAD = +LT_SYS_LIBRARY_PATH = +MAKEINFO = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing makeinfo +MANIFEST_TOOL = : +MDBLIBS = +MDB_DATETIME = +MKDIR_P = /bin/mkdir -p +MSGFMT = /usr/bin/msgfmt +MSGFMT_015 = /usr/bin/msgfmt +MSGMERGE = /usr/bin/msgmerge +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = <fcntl.h> +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = <getopt.h> +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = <inttypes.h> +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = <langinfo.h> +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = <limits.h> +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = <locale.h> +NEXT_AS_FIRST_DIRECTIVE_MATH_H = <math.h> +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = <signal.h> +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = <spawn.h> +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = <stdint.h> +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = <stdio.h> +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = <stdlib.h> +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = <strings.h> +NEXT_AS_FIRST_DIRECTIVE_STRING_H = <string.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = <sys/file.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = <sys/stat.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = <sys/time.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = <sys/types.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = <sys/wait.h> +NEXT_AS_FIRST_DIRECTIVE_TIME_H = <time.h> +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = <unistd.h> +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = <wchar.h> +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = <wctype.h> +NEXT_ERRNO_H = +NEXT_FCNTL_H = <fcntl.h> +NEXT_FLOAT_H = +NEXT_GETOPT_H = <getopt.h> +NEXT_INTTYPES_H = <inttypes.h> +NEXT_LANGINFO_H = <langinfo.h> +NEXT_LIMITS_H = <limits.h> +NEXT_LOCALE_H = <locale.h> +NEXT_MATH_H = <math.h> +NEXT_SCHED_H = +NEXT_SELINUX_SELINUX_H = +NEXT_SIGNAL_H = <signal.h> +NEXT_SPAWN_H = <spawn.h> +NEXT_STDARG_H = <stdarg.h> +NEXT_STDDEF_H = +NEXT_STDINT_H = <stdint.h> +NEXT_STDIO_H = <stdio.h> +NEXT_STDLIB_H = <stdlib.h> +NEXT_STRINGS_H = <strings.h> +NEXT_STRING_H = <string.h> +NEXT_SYS_FILE_H = <sys/file.h> +NEXT_SYS_STAT_H = <sys/stat.h> +NEXT_SYS_TIME_H = <sys/time.h> +NEXT_SYS_TYPES_H = <sys/types.h> +NEXT_SYS_WAIT_H = <sys/wait.h> +NEXT_TIME_H = <time.h> +NEXT_UNISTD_H = <unistd.h> +NEXT_WCHAR_H = <wchar.h> +NEXT_WCTYPE_H = <wctype.h> +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = recutils +PACKAGE_BUGREPORT = bug-recutils@gnu.org +PACKAGE_NAME = GNU recutils +PACKAGE_STRING = GNU recutils 1.8 +PACKAGE_TARNAME = recutils +PACKAGE_URL = http://www.gnu.org/software/recutils/ +PACKAGE_VERSION = 1.8 +PATH_SEPARATOR = : +PKG_CONFIG = /usr/bin/pkg-config +PKG_CONFIG_LIBDIR = +PKG_CONFIG_PATH = +POSUB = po +PRAGMA_COLUMNS = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PRIPTR_PREFIX = "l" +PRI_MACROS_BROKEN = 0 +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = 0 +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_ACOSF = 0 +REPLACE_ASINF = 0 +REPLACE_ATAN2F = 0 +REPLACE_ATANF = 0 +REPLACE_BTOWC = 0 +REPLACE_CALLOC = 0 +REPLACE_CANONICALIZE_FILE_NAME = 0 +REPLACE_CBRTF = 0 +REPLACE_CBRTL = 0 +REPLACE_CEIL = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_COSF = 0 +REPLACE_COSHF = 0 +REPLACE_CTIME = GNULIB_PORTCHECK +REPLACE_DPRINTF = 0 +REPLACE_DUP = 0 +REPLACE_DUP2 = 0 +REPLACE_DUPLOCALE = 0 +REPLACE_EXP2 = 0 +REPLACE_EXP2L = 0 +REPLACE_EXPF = 0 +REPLACE_EXPM1 = 0 +REPLACE_EXPM1F = 0 +REPLACE_FABSL = 0 +REPLACE_FACCESSAT = 0 +REPLACE_FCHOWNAT = 0 +REPLACE_FCLOSE = 0 +REPLACE_FCNTL = 1 +REPLACE_FDOPEN = 0 +REPLACE_FFLUSH = 0 +REPLACE_FLOOR = 0 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FMA = 0 +REPLACE_FMAF = 0 +REPLACE_FMAL = 0 +REPLACE_FMOD = 0 +REPLACE_FMODF = 0 +REPLACE_FMODL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 1 +REPLACE_FPURGE = 0 +REPLACE_FREELOCALE = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPF = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 0 +REPLACE_FSTAT = 0 +REPLACE_FSTATAT = 0 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_FTRUNCATE = 0 +REPLACE_FUTIMENS = 0 +REPLACE_GETCWD = 0 +REPLACE_GETDELIM = 0 +REPLACE_GETDOMAINNAME = 0 +REPLACE_GETDTABLESIZE = 0 +REPLACE_GETGROUPS = 0 +REPLACE_GETLINE = 0 +REPLACE_GETLOGIN_R = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETPASS = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_GMTIME = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_HYPOT = 0 +REPLACE_HYPOTF = 0 +REPLACE_HYPOTL = 0 +REPLACE_ILOGB = 0 +REPLACE_ILOGBF = 0 +REPLACE_ILOGBL = 0 +REPLACE_ISATTY = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWBLANK = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_ITOLD = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LINK = 0 +REPLACE_LINKAT = 0 +REPLACE_LOCALECONV = 0 +REPLACE_LOCALTIME = 0 +REPLACE_LOCALTIME_R = 0 +REPLACE_LOG = 0 +REPLACE_LOG10 = 0 +REPLACE_LOG10F = 0 +REPLACE_LOG10L = 0 +REPLACE_LOG1P = 0 +REPLACE_LOG1PF = 0 +REPLACE_LOG1PL = 0 +REPLACE_LOG2 = 0 +REPLACE_LOG2F = 0 +REPLACE_LOG2L = 0 +REPLACE_LOGB = 0 +REPLACE_LOGBF = 0 +REPLACE_LOGBL = 0 +REPLACE_LOGF = 0 +REPLACE_LOGL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MALLOC = 0 +REPLACE_MBRLEN = 1 +REPLACE_MBRTOWC = 1 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MBTOWC = 0 +REPLACE_MEMCHR = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKFIFO = 0 +REPLACE_MKNOD = 0 +REPLACE_MKSTEMP = 0 +REPLACE_MKTIME = 0 +REPLACE_MODF = 0 +REPLACE_MODFF = 0 +REPLACE_MODFL = 0 +REPLACE_NAN = 0 +REPLACE_NANOSLEEP = GNULIB_PORTCHECK +REPLACE_NEWLOCALE = 0 +REPLACE_NL_LANGINFO = 1 +REPLACE_NULL = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_OPENAT = 0 +REPLACE_PERROR = 0 +REPLACE_POPEN = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 0 +REPLACE_PREAD = 0 +REPLACE_PRINTF = 1 +REPLACE_PTHREAD_SIGMASK = 0 +REPLACE_PTSNAME = 0 +REPLACE_PTSNAME_R = 0 +REPLACE_PUTENV = 0 +REPLACE_PWRITE = 0 +REPLACE_QSORT_R = 0 +REPLACE_RAISE = 0 +REPLACE_RANDOM_R = 0 +REPLACE_READ = 0 +REPLACE_READLINK = 0 +REPLACE_READLINKAT = 0 +REPLACE_REALLOC = 0 +REPLACE_REALPATH = 0 +REPLACE_REMAINDER = 0 +REPLACE_REMAINDERF = 0 +REPLACE_REMAINDERL = 0 +REPLACE_REMOVE = 0 +REPLACE_RENAME = 0 +REPLACE_RENAMEAT = 0 +REPLACE_RMDIR = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SETENV = 0 +REPLACE_SETLOCALE = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SINF = 0 +REPLACE_SINHF = 0 +REPLACE_SLEEP = 0 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_SQRTF = 0 +REPLACE_SQRTL = 0 +REPLACE_STAT = 0 +REPLACE_STDIO_READ_FUNCS = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STPNCPY = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRCHRNUL = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRERROR_R = 0 +REPLACE_STRFTIME = GNULIB_PORTCHECK +REPLACE_STRNCAT = 0 +REPLACE_STRNDUP = 0 +REPLACE_STRNLEN = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 0 +REPLACE_STRTOD = 0 +REPLACE_STRTOIMAX = 0 +REPLACE_STRTOK_R = 0 +REPLACE_STRTOUMAX = 0 +REPLACE_STRUCT_LCONV = 0 +REPLACE_STRUCT_TIMEVAL = 0 +REPLACE_SYMLINK = 0 +REPLACE_SYMLINKAT = 0 +REPLACE_TANF = 0 +REPLACE_TANHF = 0 +REPLACE_TIMEGM = 0 +REPLACE_TMPFILE = 0 +REPLACE_TOWLOWER = 0 +REPLACE_TRUNC = 0 +REPLACE_TRUNCATE = 0 +REPLACE_TRUNCF = 0 +REPLACE_TRUNCL = 0 +REPLACE_TTYNAME_R = 0 +REPLACE_TZSET = 0 +REPLACE_UNLINK = 0 +REPLACE_UNLINKAT = 0 +REPLACE_UNSETENV = 0 +REPLACE_USLEEP = 0 +REPLACE_UTIMENSAT = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 1 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSFTIME = 0 +REPLACE_WCSNRTOMBS = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCSWIDTH = 0 +REPLACE_WCTOB = 0 +REPLACE_WCTOMB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SED = /bin/sed +SELINUX_CONTEXT_H = selinux/context.h +SET_MAKE = +SHELL = /bin/sh +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +STDARG_H = +STDBOOL_H = +STDDEF_H = +STDINT_H = stdint.h +STRIP = strip +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = 0 +TIME_H_DEFINES_STRUCT_TIMESPEC = 1 +UINT32_MAX_LT_UINTMAX_MAX = 1 +UINT64_MAX_EQ_ULONG_MAX = 0 +UNDEFINE_STRTOK_R = 0 +UNISTD_H_DEFINES_STRUCT_TIMESPEC = 0 +UNISTD_H_HAVE_WINSOCK2_H = 0 +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = 0 +USE_ACL = 0 +USE_NLS = yes +UUIDLIBS = +VERSION = 1.8 +WCHAR_T_SUFFIX = +WINDOWS_64_BIT_OFF_T = 0 +WINDOWS_64_BIT_ST_SIZE = 0 +WINDOWS_STAT_INODES = 0 +WINDOWS_STAT_TIMESPEC = 0 +WINT_T_SUFFIX = +XGETTEXT = /usr/bin/xgettext +XGETTEXT_015 = /usr/bin/xgettext +XGETTEXT_EXTRA_OPTIONS = --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format +YACC = bison -o y.tab.c +YFLAGS = +abs_builddir = /mnt/lfs/build/recutils/recutils-1.8/torture/utils +abs_srcdir = /mnt/lfs/build/recutils/recutils-1.8/torture/utils +abs_top_builddir = /mnt/lfs/build/recutils/recutils-1.8 +abs_top_srcdir = /mnt/lfs/build/recutils/recutils-1.8 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +builddir = . +crypt_support = no +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +gl_LIBOBJS = asnprintf.o asprintf.o fcntl.o fprintf.o fseterr.o localtime-buffer.o mbrlen.o mbrtowc.o mktime.o nl_langinfo.o obstack.o printf.o printf-args.o printf-parse.o readline.o regex.o time_rz.o vasnprintf.o vasprintf.o vfprintf.o +gl_LTLIBOBJS = asnprintf.lo asprintf.lo fcntl.lo fprintf.lo fseterr.lo localtime-buffer.lo mbrlen.lo mbrtowc.lo mktime.lo nl_langinfo.lo obstack.lo printf.lo printf-args.lo printf-parse.lo readline.lo regex.lo time_rz.lo vasnprintf.lo vasprintf.lo vfprintf.lo +gltests_LIBOBJS = +gltests_LTLIBOBJS = +gltests_WITNESS = IN_RECUTILS_GNULIB_TESTS +have_uuid = no +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = $(MKDIR_P) +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +runstatedir = ${localstatedir}/run +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../../ +top_builddir = ../.. +top_srcdir = ../.. +TESTS = recinf.sh \ + recsel.sh \ + recdel.sh \ + recins.sh \ + recset.sh \ + recfix.sh \ + recfmt.sh \ + rec2csv.sh \ + csv2rec.sh + +EXTRA_DIST = $(TESTS) testutils.sh +TESTS_ENVIRONMENT = top_srcdir=$(top_srcdir) builddir=$(builddir) \ + PATH=$(srcdir)$(PATH_SEPARATOR)$(top_builddir)/utils$(PATH_SEPARATOR)$$PATH + +all: all-am + +.SUFFIXES: +.SUFFIXES: .log .test .test$(EXEEXT) .trs +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu torture/utils/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu torture/utils/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +config.sh: $(top_builddir)/config.status $(srcdir)/config.sh.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + elif test -n "$$redo_logs"; then \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +recinf.sh.log: recinf.sh + @p='recinf.sh'; \ + b='recinf.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +recsel.sh.log: recsel.sh + @p='recsel.sh'; \ + b='recsel.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +recdel.sh.log: recdel.sh + @p='recdel.sh'; \ + b='recdel.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +recins.sh.log: recins.sh + @p='recins.sh'; \ + b='recins.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +recset.sh.log: recset.sh + @p='recset.sh'; \ + b='recset.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +recfix.sh.log: recfix.sh + @p='recfix.sh'; \ + b='recfix.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +recfmt.sh.log: recfmt.sh + @p='recfmt.sh'; \ + b='recfmt.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +rec2csv.sh.log: rec2csv.sh + @p='rec2csv.sh'; \ + b='rec2csv.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +csv2rec.sh.log: csv2rec.sh + @p='csv2rec.sh'; \ + b='csv2rec.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +#.test$(EXEEXT).log: +# @p='$<'; \ +# $(am__set_b); \ +# $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +# --log-file $$b.log --trs-file $$b.trs \ +# $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +# "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool cscopelist-am ctags-am distclean \ + distclean-generic distclean-libtool distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \ + uninstall uninstall-am + +.PRECIOUS: Makefile + + +perf: + $(TESTS_ENVIRONMENT) srcdir=$(srcdir) $(srcdir)/p-recsel.sh + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/torture/utils/Makefile.am b/devspec.en_US/project/recutils/torture/utils/Makefile.am new file mode 100755 index 0000000..db341c9 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/utils/Makefile.am @@ -0,0 +1,34 @@ +# Makefile for torture/utils. +# +# Copyright (C) 2010-2015 Jose E. Marchesi. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +TESTS = recinf.sh \ + recsel.sh \ + recdel.sh \ + recins.sh \ + recset.sh \ + recfix.sh \ + recfmt.sh \ + rec2csv.sh \ + csv2rec.sh +EXTRA_DIST = $(TESTS) testutils.sh +TESTS_ENVIRONMENT = top_srcdir=$(top_srcdir) builddir=$(builddir) \ + PATH=$(srcdir)$(PATH_SEPARATOR)$(top_builddir)/utils$(PATH_SEPARATOR)$$PATH + +perf: + $(TESTS_ENVIRONMENT) srcdir=$(srcdir) $(srcdir)/p-recsel.sh + +# End of Makefile.am diff --git a/devspec.en_US/project/recutils/torture/utils/Makefile.in b/devspec.en_US/project/recutils/torture/utils/Makefile.in new file mode 100755 index 0000000..aa99694 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/utils/Makefile.in @@ -0,0 +1,2157 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Makefile for torture/utils. +# +# Copyright (C) 2010-2015 Jose E. Marchesi. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = torture/utils +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = config.sh +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check recheck +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.sh.in \ + $(top_srcdir)/build-aux/test-driver +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BASH_HEADERS = @BASH_HEADERS@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CA68 = @CA68@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CURLLIBS = @CURLLIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +FLOOR_LIBM = @FLOOR_LIBM@ +GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ACOSF = @GNULIB_ACOSF@ +GNULIB_ACOSL = @GNULIB_ACOSL@ +GNULIB_ASINF = @GNULIB_ASINF@ +GNULIB_ASINL = @GNULIB_ASINL@ +GNULIB_ATAN2F = @GNULIB_ATAN2F@ +GNULIB_ATANF = @GNULIB_ATANF@ +GNULIB_ATANL = @GNULIB_ATANL@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CBRT = @GNULIB_CBRT@ +GNULIB_CBRTF = @GNULIB_CBRTF@ +GNULIB_CBRTL = @GNULIB_CBRTL@ +GNULIB_CEIL = @GNULIB_CEIL@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ +GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ +GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ +GNULIB_COSF = @GNULIB_COSF@ +GNULIB_COSHF = @GNULIB_COSHF@ +GNULIB_COSL = @GNULIB_COSL@ +GNULIB_CTIME = @GNULIB_CTIME@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_EXP2 = @GNULIB_EXP2@ +GNULIB_EXP2F = @GNULIB_EXP2F@ +GNULIB_EXP2L = @GNULIB_EXP2L@ +GNULIB_EXPF = @GNULIB_EXPF@ +GNULIB_EXPL = @GNULIB_EXPL@ +GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ +GNULIB_EXPM1 = @GNULIB_EXPM1@ +GNULIB_EXPM1F = @GNULIB_EXPM1F@ +GNULIB_EXPM1L = @GNULIB_EXPM1L@ +GNULIB_FABSF = @GNULIB_FABSF@ +GNULIB_FABSL = @GNULIB_FABSL@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FCNTL = @GNULIB_FCNTL@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FLOCK = @GNULIB_FLOCK@ +GNULIB_FLOOR = @GNULIB_FLOOR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FMA = @GNULIB_FMA@ +GNULIB_FMAF = @GNULIB_FMAF@ +GNULIB_FMAL = @GNULIB_FMAL@ +GNULIB_FMOD = @GNULIB_FMOD@ +GNULIB_FMODF = @GNULIB_FMODF@ +GNULIB_FMODL = @GNULIB_FMODL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPF = @GNULIB_FREXPF@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSTAT = @GNULIB_FSTAT@ +GNULIB_FSTATAT = @GNULIB_FSTATAT@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETPASS = @GNULIB_GETPASS@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_HYPOT = @GNULIB_HYPOT@ +GNULIB_HYPOTF = @GNULIB_HYPOTF@ +GNULIB_HYPOTL = @GNULIB_HYPOTL@ +GNULIB_ILOGB = @GNULIB_ILOGB@ +GNULIB_ILOGBF = @GNULIB_ILOGBF@ +GNULIB_ILOGBL = @GNULIB_ILOGBL@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPF = @GNULIB_LDEXPF@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LOCALENAME = @GNULIB_LOCALENAME@ +GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ +GNULIB_LOG = @GNULIB_LOG@ +GNULIB_LOG10 = @GNULIB_LOG10@ +GNULIB_LOG10F = @GNULIB_LOG10F@ +GNULIB_LOG10L = @GNULIB_LOG10L@ +GNULIB_LOG1P = @GNULIB_LOG1P@ +GNULIB_LOG1PF = @GNULIB_LOG1PF@ +GNULIB_LOG1PL = @GNULIB_LOG1PL@ +GNULIB_LOG2 = @GNULIB_LOG2@ +GNULIB_LOG2F = @GNULIB_LOG2F@ +GNULIB_LOG2L = @GNULIB_LOG2L@ +GNULIB_LOGB = @GNULIB_LOGB@ +GNULIB_LOGBF = @GNULIB_LOGBF@ +GNULIB_LOGBL = @GNULIB_LOGBL@ +GNULIB_LOGF = @GNULIB_LOGF@ +GNULIB_LOGL = @GNULIB_LOGL@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKFIFO = @GNULIB_MKFIFO@ +GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ +GNULIB_MKNOD = @GNULIB_MKNOD@ +GNULIB_MKNODAT = @GNULIB_MKNODAT@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_MKTIME = @GNULIB_MKTIME@ +GNULIB_MODF = @GNULIB_MODF@ +GNULIB_MODFF = @GNULIB_MODFF@ +GNULIB_MODFL = @GNULIB_MODFL@ +GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ +GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_POWF = @GNULIB_POWF@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_QSORT_R = @GNULIB_QSORT_R@ +GNULIB_RAISE = @GNULIB_RAISE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMAINDER = @GNULIB_REMAINDER@ +GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ +GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RINT = @GNULIB_RINT@ +GNULIB_RINTF = @GNULIB_RINTF@ +GNULIB_RINTL = @GNULIB_RINTL@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SINF = @GNULIB_SINF@ +GNULIB_SINHF = @GNULIB_SINHF@ +GNULIB_SINL = @GNULIB_SINL@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_SQRTF = @GNULIB_SQRTF@ +GNULIB_SQRTL = @GNULIB_SQRTL@ +GNULIB_STAT = @GNULIB_STAT@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRFTIME = @GNULIB_STRFTIME@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRPTIME = @GNULIB_STRPTIME@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TANF = @GNULIB_TANF@ +GNULIB_TANHF = @GNULIB_TANHF@ +GNULIB_TANL = @GNULIB_TANL@ +GNULIB_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_TZSET = @GNULIB_TZSET@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WAITPID = @GNULIB_WAITPID@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +HAVE_ACOSF = @HAVE_ACOSF@ +HAVE_ACOSL = @HAVE_ACOSL@ +HAVE_ASINF = @HAVE_ASINF@ +HAVE_ASINL = @HAVE_ASINL@ +HAVE_ATAN2F = @HAVE_ATAN2F@ +HAVE_ATANF = @HAVE_ATANF@ +HAVE_ATANL = @HAVE_ATANL@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CBRT = @HAVE_CBRT@ +HAVE_CBRTF = @HAVE_CBRTF@ +HAVE_CBRTL = @HAVE_CBRTL@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_COPYSIGN = @HAVE_COPYSIGN@ +HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ +HAVE_COSF = @HAVE_COSF@ +HAVE_COSHF = @HAVE_COSHF@ +HAVE_COSL = @HAVE_COSL@ +HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ +HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ +HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ +HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ +HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ +HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ +HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ +HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ +HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ +HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ +HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ +HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ +HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ +HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ +HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ +HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ +HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ +HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ +HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ +HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_EXPF = @HAVE_EXPF@ +HAVE_EXPL = @HAVE_EXPL@ +HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ +HAVE_EXPM1 = @HAVE_EXPM1@ +HAVE_EXPM1F = @HAVE_EXPM1F@ +HAVE_FABSF = @HAVE_FABSF@ +HAVE_FABSL = @HAVE_FABSL@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FLOCK = @HAVE_FLOCK@ +HAVE_FMA = @HAVE_FMA@ +HAVE_FMAF = @HAVE_FMAF@ +HAVE_FMAL = @HAVE_FMAL@ +HAVE_FMODF = @HAVE_FMODF@ +HAVE_FMODL = @HAVE_FMODL@ +HAVE_FREELOCALE = @HAVE_FREELOCALE@ +HAVE_FREXPF = @HAVE_FREXPF@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSTATAT = @HAVE_FSTATAT@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_FUTIMENS = @HAVE_FUTIMENS@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETPASS = @HAVE_GETPASS@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_HYPOTF = @HAVE_HYPOTF@ +HAVE_HYPOTL = @HAVE_HYPOTL@ +HAVE_ILOGB = @HAVE_ILOGB@ +HAVE_ILOGBF = @HAVE_ILOGBF@ +HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LDEXPF = @HAVE_LDEXPF@ +HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOG10F = @HAVE_LOG10F@ +HAVE_LOG10L = @HAVE_LOG10L@ +HAVE_LOG1P = @HAVE_LOG1P@ +HAVE_LOG1PF = @HAVE_LOG1PF@ +HAVE_LOG1PL = @HAVE_LOG1PL@ +HAVE_LOGBF = @HAVE_LOGBF@ +HAVE_LOGBL = @HAVE_LOGBL@ +HAVE_LOGF = @HAVE_LOGF@ +HAVE_LOGL = @HAVE_LOGL@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDIRAT = @HAVE_MKDIRAT@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKFIFO = @HAVE_MKFIFO@ +HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ +HAVE_MKNOD = @HAVE_MKNOD@ +HAVE_MKNODAT = @HAVE_MKNODAT@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MODFF = @HAVE_MODFF@ +HAVE_MODFL = @HAVE_MODFL@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ +HAVE_POWF = @HAVE_POWF@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_QSORT_R = @HAVE_QSORT_R@ +HAVE_RAISE = @HAVE_RAISE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_REMAINDER = @HAVE_REMAINDER@ +HAVE_REMAINDERF = @HAVE_REMAINDERF@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RINT = @HAVE_RINT@ +HAVE_RINTL = @HAVE_RINTL@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SINF = @HAVE_SINF@ +HAVE_SINHF = @HAVE_SINHF@ +HAVE_SINL = @HAVE_SINL@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_SQRTF = @HAVE_SQRTF@ +HAVE_SQRTL = @HAVE_SQRTL@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRPTIME = @HAVE_STRPTIME@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ +HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TANF = @HAVE_TANF@ +HAVE_TANHF = @HAVE_TANHF@ +HAVE_TANL = @HAVE_TANL@ +HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_TZSET = @HAVE_TZSET@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSFTIME = @HAVE_WCSFTIME@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ +INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBGCRYPT = @LIBGCRYPT@ +LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBREADLINE = @LIBREADLINE@ +LIBS = @LIBS@ +LIBTHREAD = @LIBTHREAD@ +LIBTOOL = @LIBTOOL@ +LIB_ACL = @LIB_ACL@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LIB_EACCESS = @LIB_EACCESS@ +LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ +LIB_SELINUX = @LIB_SELINUX@ +LIMITS_H = @LIMITS_H@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTALLOCA = @LTALLOCA@ +LTLIBGCRYPT = @LTLIBGCRYPT@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBREADLINE = @LTLIBREADLINE@ +LTLIBTHREAD = @LTLIBTHREAD@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MDBLIBS = @MDBLIBS@ +MDB_DATETIME = @MDB_DATETIME@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ +NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LIMITS_H = @NEXT_LIMITS_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_ACOSF = @REPLACE_ACOSF@ +REPLACE_ASINF = @REPLACE_ASINF@ +REPLACE_ATAN2F = @REPLACE_ATAN2F@ +REPLACE_ATANF = @REPLACE_ATANF@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CBRTF = @REPLACE_CBRTF@ +REPLACE_CBRTL = @REPLACE_CBRTL@ +REPLACE_CEIL = @REPLACE_CEIL@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_COSF = @REPLACE_COSF@ +REPLACE_COSHF = @REPLACE_COSHF@ +REPLACE_CTIME = @REPLACE_CTIME@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_EXP2 = @REPLACE_EXP2@ +REPLACE_EXP2L = @REPLACE_EXP2L@ +REPLACE_EXPF = @REPLACE_EXPF@ +REPLACE_EXPM1 = @REPLACE_EXPM1@ +REPLACE_EXPM1F = @REPLACE_EXPM1F@ +REPLACE_FABSL = @REPLACE_FABSL@ +REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOOR = @REPLACE_FLOOR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FMA = @REPLACE_FMA@ +REPLACE_FMAF = @REPLACE_FMAF@ +REPLACE_FMAL = @REPLACE_FMAL@ +REPLACE_FMOD = @REPLACE_FMOD@ +REPLACE_FMODF = @REPLACE_FMODF@ +REPLACE_FMODL = @REPLACE_FMODL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPF = @REPLACE_FREXPF@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FSTAT = @REPLACE_FSTAT@ +REPLACE_FSTATAT = @REPLACE_FSTATAT@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETPASS = @REPLACE_GETPASS@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_GMTIME = @REPLACE_GMTIME@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_HYPOT = @REPLACE_HYPOT@ +REPLACE_HYPOTF = @REPLACE_HYPOTF@ +REPLACE_HYPOTL = @REPLACE_HYPOTL@ +REPLACE_ILOGB = @REPLACE_ILOGB@ +REPLACE_ILOGBF = @REPLACE_ILOGBF@ +REPLACE_ILOGBL = @REPLACE_ILOGBL@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LOG = @REPLACE_LOG@ +REPLACE_LOG10 = @REPLACE_LOG10@ +REPLACE_LOG10F = @REPLACE_LOG10F@ +REPLACE_LOG10L = @REPLACE_LOG10L@ +REPLACE_LOG1P = @REPLACE_LOG1P@ +REPLACE_LOG1PF = @REPLACE_LOG1PF@ +REPLACE_LOG1PL = @REPLACE_LOG1PL@ +REPLACE_LOG2 = @REPLACE_LOG2@ +REPLACE_LOG2F = @REPLACE_LOG2F@ +REPLACE_LOG2L = @REPLACE_LOG2L@ +REPLACE_LOGB = @REPLACE_LOGB@ +REPLACE_LOGBF = @REPLACE_LOGBF@ +REPLACE_LOGBL = @REPLACE_LOGBL@ +REPLACE_LOGF = @REPLACE_LOGF@ +REPLACE_LOGL = @REPLACE_LOGL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKFIFO = @REPLACE_MKFIFO@ +REPLACE_MKNOD = @REPLACE_MKNOD@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_MKTIME = @REPLACE_MKTIME@ +REPLACE_MODF = @REPLACE_MODF@ +REPLACE_MODFF = @REPLACE_MODFF@ +REPLACE_MODFL = @REPLACE_MODFL@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_OPENAT = @REPLACE_OPENAT@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_QSORT_R = @REPLACE_QSORT_R@ +REPLACE_RAISE = @REPLACE_RAISE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_READLINKAT = @REPLACE_READLINKAT@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMAINDER = @REPLACE_REMAINDER@ +REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ +REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SINF = @REPLACE_SINF@ +REPLACE_SINHF = @REPLACE_SINHF@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_SQRTF = @REPLACE_SQRTF@ +REPLACE_SQRTL = @REPLACE_SQRTL@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRFTIME = @REPLACE_STRFTIME@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ +REPLACE_TANF = @REPLACE_TANF@ +REPLACE_TANHF = @REPLACE_TANHF@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TRUNC = @REPLACE_TRUNC@ +REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ +REPLACE_TRUNCF = @REPLACE_TRUNCF@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_TZSET = @REPLACE_TZSET@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SED = @SED@ +SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ +UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +USE_ACL = @USE_ACL@ +USE_NLS = @USE_NLS@ +UUIDLIBS = @UUIDLIBS@ +VERSION = @VERSION@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ +WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ +WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +crypt_support = @crypt_support@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +have_uuid = @have_uuid@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +TESTS = recinf.sh \ + recsel.sh \ + recdel.sh \ + recins.sh \ + recset.sh \ + recfix.sh \ + recfmt.sh \ + rec2csv.sh \ + csv2rec.sh + +EXTRA_DIST = $(TESTS) testutils.sh +TESTS_ENVIRONMENT = top_srcdir=$(top_srcdir) builddir=$(builddir) \ + PATH=$(srcdir)$(PATH_SEPARATOR)$(top_builddir)/utils$(PATH_SEPARATOR)$$PATH + +all: all-am + +.SUFFIXES: +.SUFFIXES: .log .test .test$(EXEEXT) .trs +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu torture/utils/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu torture/utils/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +config.sh: $(top_builddir)/config.status $(srcdir)/config.sh.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + elif test -n "$$redo_logs"; then \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +recinf.sh.log: recinf.sh + @p='recinf.sh'; \ + b='recinf.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +recsel.sh.log: recsel.sh + @p='recsel.sh'; \ + b='recsel.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +recdel.sh.log: recdel.sh + @p='recdel.sh'; \ + b='recdel.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +recins.sh.log: recins.sh + @p='recins.sh'; \ + b='recins.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +recset.sh.log: recset.sh + @p='recset.sh'; \ + b='recset.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +recfix.sh.log: recfix.sh + @p='recfix.sh'; \ + b='recfix.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +recfmt.sh.log: recfmt.sh + @p='recfmt.sh'; \ + b='recfmt.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +rec2csv.sh.log: rec2csv.sh + @p='rec2csv.sh'; \ + b='rec2csv.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +csv2rec.sh.log: csv2rec.sh + @p='csv2rec.sh'; \ + b='csv2rec.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-TESTS check-am clean clean-generic \ + clean-libtool cscopelist-am ctags-am distclean \ + distclean-generic distclean-libtool distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \ + uninstall uninstall-am + +.PRECIOUS: Makefile + + +perf: + $(TESTS_ENVIRONMENT) srcdir=$(srcdir) $(srcdir)/p-recsel.sh + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/torture/utils/config.sh b/devspec.en_US/project/recutils/torture/utils/config.sh new file mode 100755 index 0000000..d141e05 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/utils/config.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# +# config.sh.in - Configuration for testutils +# +# Copyright (C) 2011-2015 Jose E. Marchesi. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +crypt_support=no +uuid_support=no +EXEEXT= + +# End of config.sh.in diff --git a/devspec.en_US/project/recutils/torture/utils/config.sh.in b/devspec.en_US/project/recutils/torture/utils/config.sh.in new file mode 100755 index 0000000..600c379 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/utils/config.sh.in @@ -0,0 +1,24 @@ +#!/bin/sh +# +# config.sh.in - Configuration for testutils +# +# Copyright (C) 2011-2015 Jose E. Marchesi. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +crypt_support=@crypt_support@ +uuid_support=@have_uuid@ +EXEEXT=@EXEEXT@ + +# End of config.sh.in diff --git a/devspec.en_US/project/recutils/torture/utils/csv2rec.sh b/devspec.en_US/project/recutils/torture/utils/csv2rec.sh new file mode 100755 index 0000000..dca8663 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/utils/csv2rec.sh @@ -0,0 +1,148 @@ +#!/bin/sh +# +# csv2rec.sh - System tests for csv2rec. +# +# Copyright (C) 2011-2015 Jose E. Marchesi. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# +# Initialization +# + +: ${srcdir=.} +. $srcdir/testutils.sh +test_init "csv2rec" + +# +# Create input files. +# + +test_declare_input_file simple-table \ +'a,b,c +a1,b1,c1 +a2,b2,c2 +a3,b3,c3 +' + +test_declare_input_file simple-table-quotes \ +'"a","b","c" +"a1","b1","c1" +a2,b2,c2 +"a3","b3",c3 +' + +test_declare_input_file empty-columns \ +'"a","b","c" +,b1,c1 +a2,,c2 +a3,b3, +' + +test_declare_input_file multi-line \ +'a,b +"foo +bar",baz +x,y +' + +# +# Declare tests. +# + +test_tool csv2rec-simple-table ok \ + csv2rec \ + '' \ + simple-table \ +'a: a1 +b: b1 +c: c1 + +a: a2 +b: b2 +c: c2 + +a: a3 +b: b3 +c: c3 +' + +test_tool csv2rec-simple-table-quotes ok \ + csv2rec \ + '' \ + simple-table-quotes \ +'a: a1 +b: b1 +c: c1 + +a: a2 +b: b2 +c: c2 + +a: a3 +b: b3 +c: c3 +' + +test_tool csv2rec-empty-columns ok \ + csv2rec \ + '' \ + empty-columns \ +'a: +b: b1 +c: c1 + +a: a2 +b: +c: c2 + +a: a3 +b: b3 +c: +' + +test_tool csv2rec-empty-columns-omit ok \ + csv2rec \ + '-e' \ + empty-columns \ +'b: b1 +c: c1 + +a: a2 +c: c2 + +a: a3 +b: b3 +' + +test_tool csv2rec-multi-line ok \ + csv2rec \ + '' \ + multi-line \ +'a: foo ++ bar +b: baz + +a: x +b: y +' + +# +# Cleanup +# + +test_cleanup +exit $? + +# End of csv2rec.sh diff --git a/devspec.en_US/project/recutils/torture/utils/rec2csv.sh b/devspec.en_US/project/recutils/torture/utils/rec2csv.sh new file mode 100755 index 0000000..8e1dbaa --- /dev/null +++ b/devspec.en_US/project/recutils/torture/utils/rec2csv.sh @@ -0,0 +1,246 @@ +#!/bin/sh +# +# rec2csv.sh - System tests for rec2csv. +# +# Copyright (C) 2011-2015 Jose E. Marchesi. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# +# Initialization +# + +: ${srcdir=.} +. $srcdir/testutils.sh +test_init "rec2csv" + +# +# Create input files. +# + +test_declare_input_file default-records \ +'a: a1 +b: b1 +c: c1 + +a: a2 +b: b2 +c: c2 +' + +test_declare_input_file missing-fields \ +'a: a1 +b: b1 +c: c1 + +a: a2 +c: c2 + +b: b3 +c: c3 + +a: a4 +b: b4 +' + +test_declare_input_file missing-fields-first \ +'a: a1 +c: c1 + +a: a2 +b: b2 +c: c2 +' + +test_declare_input_file multi-line \ +'a: foo ++ bar ++ baz +b: jo ++ ju ++ je +' + +test_declare_input_file escape-quotes \ +'a: foo"bar +b: bar"baz +' + +test_declare_input_file repeated-fields \ +'a: a11 +a: a12 + +a: a21 +a: a22 +' + +test_declare_input_file repeated-missing \ +'a: a11 +a: a12 + +b: b2 +a: a21 +' + +test_declare_input_file several-types \ +'a: a_none +b: b_none + +%rec: foo + +a: a_foo +b: b_foo + +%rec: bar + +a: a_bar +b: b_bar +' + +test_declare_input_file sort \ +'%rec: Sorted +%sort: foo +%type: bar int + +foo: b +bar: 100 + +foo: a +bar: 50 + +foo: c +bar: 0 +' + +# +# Declare tests. +# + +test_tool rec2csv-default-record ok \ + rec2csv \ + '' \ + default-records \ +'"a","b","c" +"a1","b1","c1" +"a2","b2","c2" +' + +test_tool rec2csv-missing-fields ok \ + rec2csv \ + '' \ + missing-fields \ +'"a","b","c" +"a1","b1","c1" +"a2",,"c2" +,"b3","c3" +"a4","b4", +' + +test_tool rec2csv-missing-fields-first ok \ + rec2csv \ + '' \ + missing-fields-first \ +'"a","c","b" +"a1","c1", +"a2","c2","b2" +' + +test_tool rec2csv-multi-line ok \ + rec2csv \ + '' \ + multi-line \ +'"a","b" +"foo +bar +baz","jo +ju +je" +' + +test_tool rec2csv-escape-quotes ok \ + rec2csv \ + '' \ + escape-quotes \ +'"a","b" +"foo""bar","bar""baz" +' + +test_tool rec2csv-repeated-fields ok \ + rec2csv \ + '' \ + repeated-fields \ +'"a","a_2" +"a11","a12" +"a21","a22" +' + +test_tool rec2csv-repeated-missing ok \ + rec2csv \ + '' \ + repeated-missing \ +'"a","a_2","b" +"a11","a12", +"a21",,"b2" +' + +test_tool rec2csv-default-type ok \ + rec2csv \ + '' \ + several-types \ +'"a","b" +"a_none","b_none" +' + +test_tool rec2csv-with-type ok \ + rec2csv \ + '-t bar' \ + several-types \ +'"a","b" +"a_bar","b_bar" +' + +test_tool rec2csv-nonexistant-type ok \ + rec2csv \ + '-t jorl' \ + several-types \ +'' + +test_tool rec2csv-sort ok \ + rec2csv \ + '' \ + sort \ +'"foo","bar" +"a","50" +"b","100" +"c","0" +' + +test_tool rec2csv-sort-field ok \ + rec2csv \ + '-S bar' \ + sort \ +'"foo","bar" +"c","0" +"a","50" +"b","100" +' + +# +# Cleanup +# + +test_cleanup +exit $? + +# End of rec2csv.sh diff --git a/devspec.en_US/project/recutils/torture/utils/recdel.sh b/devspec.en_US/project/recutils/torture/utils/recdel.sh new file mode 100755 index 0000000..6c27f3f --- /dev/null +++ b/devspec.en_US/project/recutils/torture/utils/recdel.sh @@ -0,0 +1,295 @@ +#!/bin/sh +# +# recdel.sh - System tests for recdel. +# +# Copyright (C) 2010-2015 Jose E. Marchesi. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# +# Initialization +# + +: ${srcdir=.} +. $srcdir/testutils.sh +test_init "recdel" + +# +# Create input files. +# + +test_declare_input_file multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value22 +field3: value23 + +field1: value31 +field2: value32 +field3: value33 +' + +test_declare_input_file multiple-named \ +'%rec: Type1 + +field1: value11 +field2: value12 +field3: value13 + +%rec: Type2 + +field1: value21 +field2: value22 +field3: value23 + +%rec: Type3 + +field1: value31 +field2: value32 +field3: value33 +' + +test_declare_input_file integrity-fail \ +'%rec: IntegrityFail +%type: Id int + +Id: foo + +Id: bar +' + +test_declare_input_file external-types \ +'%rec: External +%type: Id int +' + +test_declare_input_file external \ +'%rec: External external-types.in + +Id: foo + +Id: bar +' + +# +# Declare tests. +# + +test_tool recdel-first ok \ + recdel \ + '-n 0' \ + multiple-records \ +'field1: value21 +field2: value22 +field3: value23 + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recdel-second ok \ + recdel \ + '-n 1' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recdel-last ok \ + recdel \ + '-n 2' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value22 +field3: value23 +' + +test_tool recdel-index-list ok \ + recdel \ + '-n 0,2' \ + multiple-records \ +'field1: value21 +field2: value22 +field3: value23 +' + +test_tool recdel-case-insensitive ok \ + recdel \ + '-i -q Value22' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recdel-case-sensitive ok \ + recdel \ + '-q Value22' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value22 +field3: value23 + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recdel-comment ok \ + recdel \ + '-n 1 -c' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +#field1: value21 +#field2: value22 +#field3: value23 + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recdel-sex ok \ + recdel \ + '-e "field2 = '\''value22'\''"' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recdel-try-type xfail \ + recdel \ + '-t Type2' \ + multiple-named + +test_tool recdel-type ok \ + recdel \ + '--force -t Type2' \ + multiple-named \ +'%rec: Type1 + +field1: value11 +field2: value12 +field3: value13 + +%rec: Type2 + +%rec: Type3 + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recdel-request-all xfail \ + recdel \ + '' \ + multiple-records + +test_tool recdel-force-all ok \ + recdel \ + '--force' \ + multiple-records \ +'' + +test_tool recdel-integrity-fail xfail \ + recdel \ + '-t IntegrityFail -n 0' \ + integrity-fail + +test_tool recdel-force-restrictions ok \ + recdel \ + '--force -t IntegrityFail -n 0' \ + integrity-fail \ +'%rec: IntegrityFail +%type: Id int + +Id: bar +' + +test_tool recdel-external-fail xfail \ + recdel \ + '-t External -n 0' \ + external + +test_tool recdel-no-external ok \ + recdel \ + '--no-external -t External -n 0' \ + external \ +'%rec: External external-types.in + +Id: bar +' + +test_tool recdel-quick-simple ok \ + recdel \ + '-q value22' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recdel-random-all xfail \ + recdel \ + '-m 0' \ + multiple-records + +test_tool recdel-random-all-force ok \ + recdel \ + '-m 0 --force' \ + multiple-records \ +'' + +# +# Cleanup +# + +test_cleanup +exit $? + +# End of recdel.sh diff --git a/devspec.en_US/project/recutils/torture/utils/recfix.sh b/devspec.en_US/project/recutils/torture/utils/recfix.sh new file mode 100755 index 0000000..0416b25 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/utils/recfix.sh @@ -0,0 +1,2419 @@ +#!/bin/sh +# +# recfix.sh - System tests for recfix. +# +# Copyright (C) 2010-2015 Jose E. Marchesi. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# +# Initialization +# + +: ${srcdir=.} +: ${builddir=.} +: ${crypt_support=yes} +: ${uuid_support=yes} + +. $builddir/config.sh +. $srcdir/testutils.sh +test_init "recfix" + +# +# Create input files. +# + +test_declare_input_file type-rec-valid \ +'%rec: Package +%type: Maintainer rec Hacker + +Name: GNU recutils +Maintainer: jemarch@gnu.org +' + +test_declare_input_file type-rec-invalid-empty \ +'%rec: Package +%type: Maintainer rec +' + +test_declare_input_file type-rec-invalid-malformed \ +'%rec: Package +%type: Maintainer rec foo;invalid +' + +test_declare_input_file type-int-valid \ +'%rec: Types +%type: Integer int + +Integer: 10 + +Integer: 0x10 + +Integer: 012 + +Integer: 0xaaaa0000 + +Integer: -0x10 + +Integer: -0xFF +' + +test_declare_input_file type-int-invalid \ +'%rec: Types +%type: Integer int + +Integer: aaa + +Integer: 0x + +Integer: --0xF +' + +test_declare_input_file type-real-valid \ +'%rec: Types +%type: Real real + +Real: 3.14 +' + +test_declare_input_file type-real-invalid \ +'%rec: Types +%type: Real real + +Real: 3..14 +' + +test_declare_input_file duplicated-keys \ +'%rec: Keys +%key: Id + +Id: 0 + +Id: 1 + +Id: 2 + +Id: 2 + +Id: 3 +' + +test_declare_input_file missing-mandatory \ +'%rec: Mandatory +%mandatory: ma + +foo: bar + +bar: baz +ma: foo +' + +test_declare_input_file several-unique \ +'%rec: Unique +%unique: Id + +Id: 0 + +Id: 1 +Id: 2 + +Id: 3 +' + +test_declare_input_file referred-type \ +'%rec: One +%type: foo int + +foo: 10 + +foo: 20 + +%rec: Two + +One:foo: 20 +' + +test_declare_input_file hidden-type \ +'%rec: One +%type: foo int + +foo: 10 + +foo: 20 + +%rec: Two +%type: foo line + +One:foo: foobar +' + +test_declare_input_file ranges-ok \ +'%rec: Foo +%type: bar range -10 10 +%type: baz range 10 + +bar: -10 +baz: 0 + +bar: 10 +baz: 10 + +bar: 2 +baz: 5 +' + +test_declare_input_file ranges-hex-ok \ +'%rec: Foo +%type: bar range -0x10 0x10 + +bar: -16 + +bar: 0 + +bar: 5 + +bar: 0x10 +' + +test_declare_input_file ranges-hex-invalid \ +'%rec: Foo +%type: bar range 0 0xFF + +bar: 0 + +bar: 0x100 +' + +test_declare_input_file ranges-oct-ok \ +'%rec: Foo +%type: bar range -010 010 + +bar: -8 + +bar: 0 + +bar: 8 +' + +test_declare_input_file ranges-oct-invalid \ +'%rec: Foo +%type: bar range -010 010 + +bar: -8 + +bar: 0 + +bar: 9 +' + +test_declare_input_file ranges-xfail-1 \ +'%rec: Foo +%type: bar range -10 10 +%type: baz range 10 + +bar: -25 +baz: 0 +' + +test_declare_input_file ranges-xfail-2 \ +'%rec: Foo +%type: bar range -10 10 +%type: baz range 10 + +bar: 2 +baz: 11 +' + +test_declare_input_file multiple-rec \ +'%rec: foo +%type: bar int +%rec: bar + +bar: 10 +' + +test_declare_input_file enum-valid \ +'%rec: foo +%type: bar enum ++ KEY1 (This is key 1) ++ KEY2 (This is key 2) ++ KEY3 (This is key 3) + +bar: KEY1 + +bar: KEY2 + +bar: KEY3 +' + +test_declare_input_file enum-invalid-1 \ +'%rec: foo +%type: bar enum ++ KEY1 (This is key 1) ++ KEY2 ((This is key 2) ++ KEY3 (This is key 3) + +bar: KEY1 + +bar: KEY2 + +bar: KEY3 +' + +test_declare_input_file enum-invalid-2 \ +'%rec: foo +%type: bar enum ++ KEY1 (This is key 1) ++ KEY2 (This is key 2)) ++ KEY3 (This is key 3) + +bar: KEY1 + +bar: KEY2 + +bar: KEY3 +' + +test_declare_input_file type-size-valid \ +'%rec: foo +%type: bar size 10 + +bar: + +bar: xxx + +bar: 1 2 3 ++ 4 55 +' + +test_declare_input_file type-size-valid-hex \ +'%rec: foo +%type: bar size 0xa + +bar: + +bar: xxx + +bar: 1 2 3 ++ 4 55 +' + +test_declare_input_file type-size-valid-oct \ +'%rec: foo +%type: bar size 012 + +bar: + +bar: xxx + +bar: 1 2 3 ++ 4 55 +' + +test_declare_input_file type-size-invalid \ +'%rec: foo +%type: bar size 2 + +bar: + +bar: xxx + +bar: 1 2 3 \ ++ 4 55 +' + +test_declare_input_file type-size-invalid-negative \ +'%rec: foo +%type: bar size -2 +' + +test_declare_input_file prohibited-fields-ok \ +'%rec: foo +%prohibit: banned + +foo: bar + +bar: baz +' + +test_declare_input_file prohibited-fields \ +'%rec: foo +%prohibit: banned1 banned2 + +foo: bar +banned1: foo + +bar: baz +banned2: bar + +bar: foo +' + +test_declare_input_file auto-int \ +'%rec: foo +%type: myint int +%auto: myint +' + +test_declare_input_file auto-range \ +'%rec: foo +%type: myrange range 0 10 +%auto: myrange +' + +test_declare_input_file auto-date \ +'%rec: foo +%type: mydate date +%auto: mydate +' + +test_declare_input_file auto-notype \ +'%rec: foo +%auto: myint +' + +test_declare_input_file auto-invalid-type \ +'%rec: foo +%auto: key +%type: key line +' + +test_declare_input_file auto-nofex \ +'%rec: foo +%auto: this%is#not%a^ fex +' + +test_declare_input_file size-invalid-1 \ +'%rec: foo +%size: > +' + +test_declare_input_file size-invalid-2 \ +'%rec: foo +%size: foo +' + +test_declare_input_file size-exact-zero \ +'%rec: foo +%size: 0 +' + +test_declare_input_file size-exact-zero-invalid \ +'%rec: foo +%size: 0 + +foo: bar +' + +test_declare_input_file size-exact \ +'%rec: foo +%size: 2 + +foo: bar + +bar: baz +' + +test_declare_input_file size-exact-hex \ +'%rec: foo +%size: 0x2 + +foo: bar + +bar: baz +' + +test_declare_input_file size-exact-oct \ +'%rec: foo +%size: 02 + +foo: bar + +bar: baz +' + +test_declare_input_file size-exact-invalid \ +'%rec: foo +%size: 2 + +foo: bar +' + +test_declare_input_file size-less \ +'%rec: foo +%size: < 2 + +foo: bar +' + +test_declare_input_file size-less-invalid \ +'%rec: foo +%size: < 2 + +foo: bar + +bar: baz +' + +test_declare_input_file size-less-equal \ +'%rec: foo +%size: <= 2 + +foo: bar + +bar: baz +' + +test_declare_input_file size-less-equal-invalid \ +'%rec: foo +%size: <= 1 + +foo: bar + +bar: baz +' + +test_declare_input_file size-bigger \ +'%rec: foo +%size: > 1 + +foo: bar + +bar: baz +' + +test_declare_input_file size-bigger-invalid \ +'%rec: foo +%size: > 2 + +foo: bar +' + +test_declare_input_file size-bigger-equal \ +'%rec: foo +%size: >= 2 + +foo: bar + +bar: baz +' + +test_declare_input_file size-bigger-equal-invalid \ +'%rec: foo +%size: >= 2 + +foo: bar +' + +test_declare_input_file size-several \ +'%rec: foo +%size: 2 +%size: < 10 +' + +test_declare_input_file typedef-valid \ +'%rec: foo +%typedef: Id_t int +%type: Id Id_t + +Id: 10 +' + +test_declare_input_file typedef-valid-xfail \ +'%rec: foo +%typedef: Id_t int +%type: Id Id_t + +Id: xx +' + +test_declare_input_file typedef-valid-with-blanks \ +'%rec: foo +%typedef: ++ Id_t int +%type: Id Id_t ++ + +Id: 10 +' + +test_declare_input_file typedef-valid-with-blanks-xfail \ +'%rec: foo +%typedef: ++ Id_t int +%type: Id Id_t ++ + +Id: xx +' + +test_declare_input_file typedef-valid-order \ +'%rec: foo +%type: Id Id_t +%typedef: Id_t int + +Id: 10 +' + +test_declare_input_file typedef-valid-order-xfail \ +'%rec: foo +%type: Id Id_t +%typedef: Id_t int + +Id: xx +' + +test_declare_input_file typedef-valid-chain \ +'%rec: foo +%typedef: Foo_t Bar_t +%typedef: Bar_t Baz_t +%typedef: Baz_t int +%type: Foo Foo_t + +Foo: 10 +' + +test_declare_input_file typedef-valid-chain-xfail \ +'%rec: foo +%typedef: Foo_t Bar_t +%typedef: Bar_t Baz_t +%typedef: Baz_t int +%type: Foo Foo_t + +Foo: xx +' + +test_declare_input_file typedef-valid-multiple \ +'%rec: foo +%typedef: Foo_t int +%typedef: Foo_t email +%type: Foo Foo_t + +Foo: foo@bar.baz +' + +test_declare_input_file typedef-valid-multiple-xfail \ +'%rec: foo +%typedef: Foo_t int +%typedef: Foo_t email +%type: Foo Foo_t + +Foo: 10 +' + +test_declare_input_file typedef-invalid-bad-type \ +'%rec: foo +%typedef: Id_t int invalid +%type: Id Id_t + +Id: 10 +' + +test_declare_input_file typedef-invalid-chain-undefined \ +'%rec: foo +%typedef: Id_t Undefined_t +%type: Id Id_t + +Id: 10 +' + +test_declare_input_file typedef-invalid-chain-loop \ +'%rec: foo +%typedef: Foo_t Bar_t +%typedef: Bar_t Baz_t +%typedef: Baz_t Foo_t +%type: Id Foo_t + +Id: 10 +' + +test_declare_input_file sortcheck-valid \ +'%rec: foo +%sort: AField +' + +test_declare_input_file sortcheck-with-blanks \ +'%rec: foo +%sort: ++ AField \ + +' +test_declare_input_file sortcheck-invalid-empty \ +'%rec: foo +%sort: +' + +test_declare_input_file sortcheck-invalid-field-name \ +'%rec: foo +%sort: A/Field +' + +test_declare_input_file sortcheck-with-several-fields-invalid \ +'%rec: foo +%sort: BField +%sort: AField +' + +test_declare_input_file unsorted-int \ +'%rec: foo +%type: Id int +%sort: Id + +Id: 4 +Name: A Field + +Id: 2 +Name: C Field + +Id: 1 +Name: D Field + +Id: 3 +Name: B Field +' + +test_declare_input_file unsorted-int-with-equals \ +'%rec: foo +%type: Id int +%sort: Id + +Id: 4 +Name: A Field + +Id: 2 +Name: C Field + +Id: 1 +Name: D Field + +Id: 3 +Name: B Field + +Id: 2 +Name: Cbis Field +' + +test_declare_input_file unsorted-range \ +'%rec: foo +%type: Id range 0 10 +%sort: Id + +Id: 4 +Name: A Field + +Id: 2 +Name: C Field + +Id: 1 +Name: D Field + +Id: 3 +Name: B Field +' + +test_declare_input_file unsorted-range-with-equals \ +'%rec: foo +%type: Id range 0 10 +%sort: Id + +Id: 4 +Name: A Field + +Id: 2 +Name: C Field + +Id: 1 +Name: D Field + +Id: 3 +Name: B Field + +Id: 2 +Name: Cbis Field +' + +test_declare_input_file unsorted-real \ +'%rec: foo +%type: Id real +%sort: Id + +Id: 4.2 +Name: A Field + +Id: 2.2 +Name: C Field + +Id: 1.2 +Name: D Field + +Id: 3.2 +Name: B Field +' + +test_declare_input_file unsorted-real-with-equals \ +'%rec: foo +%type: Id real +%sort: Id + +Id: 4.2 +Name: A Field + +Id: 2.2 +Name: C Field + +Id: 1.2 +Name: D Field + +Id: 3.2 +Name: B Field + +Id: 4.2 +Name: Abis Field +' + +test_declare_input_file unsorted-lex \ +'%rec: foo +%sort: Name + +Id: 4 +Name: A Field + +Id: 2 +Name: C Field + +Id: 1 +Name: D Field + +Id: 3 +Name: B Field +' + +test_declare_input_file unsorted-lex-with-equals \ +'%rec: foo +%sort: Name + +Id: 4 +Name: A Field + +Id: 2 +Name: C Field + +Id: 1 +Name: D Field + +Id: 3 +Name: B Field + +Id: 1 +Name: Dbis Field +' + +test_declare_input_file unsorted-bool \ +'%rec: foo +%type: Bool bool +%sort: Bool + +Id: 5 +Bool: 1 + +Id: 1 +Bool: 0 + +Id: 3 +Bool: no + +Id: 6 +Bool: true + +Id: 2 +Bool: false + +Id: 4 +Bool: yes +' + +test_declare_input_file unsorted-date \ +'%rec: foo +%type: Date date +%sort: Date + +Id: 1 +Date: 24 September 1972 + +Id: 3 +Date: 23 October 1972 + +Id: 5 +Date: 26 May 1984 + +Id: 2 +Date: 23 September 1972 + +Id: 4 +Date: 1 April 1999 +' + +test_declare_input_file unsorted-date-with-equals \ +'%rec: foo +%type: Date date +%sort: Date + +Id: 1 +Date: 24 September 1972 + +Id: 3 +Date: 23 October 1972 + +Id: 5 +Date: 26 May 1984 + +Id: 6 +Date: 23 October 1972 + +Id: 2 +Date: 23 September 1972 + +Id: 4 +Date: 1 April 1999 +' +test_declare_input_file unsorted-multiple \ +'%rec: SortMultiple +%sort: Class Price +%type: Price real + +Item: one +Class: B +Price: 30 + +Item: two +Class: A +Price: 30 + +Item: three +Class: C +Price: 40 + +Item: four +Class: A +Price: 10 + +Item: five +Class: B +Price: 15 +' + +test_declare_input_file confidential \ +'%rec: foo +%confidential: Foo Bar Baz + +Foo: encrypted-foo +Bar: encrypted-bar +Baz: encrypted-baz + +%rec: bar + +Foo: jorl +Bar: jarl +Baz: jerl +' + +test_declare_input_file confidential-several \ +'%rec: foo +%confidential: Foo Bar Baz +%confidential: Jorl +' + +test_declare_input_file confidential-with-unencrypted-fields \ +'%rec: foo +%confidential: Foo + +Foo: encrypted-foo + +Foo: Not encrypted +' + +test_declare_input_file confidential-fields \ +'%rec: foo +%confidential: Password WebPassword + +User: user1 +Password: secret1 +Password: secret2 +WebPassword: websecret1 + +User: user2 +Password: secret2 +Password: secret22 +WebPassword: websecret2 +' + +test_declare_input_file encrypt \ +'%rec: Account +%confidential: Secret + +Secret: foo + +Secret: bar + +%rec: Jorl + +Secret: jojo + +%rec: jojo +%confidential: joo + +joo: je +fo: fu + +joo: ji +fo: ja +' + +test_declare_input_file decrypt \ +'%rec: Account +%confidential: Secret + +Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== + +Secret: encrypted-V1xOls6u5Zw/D5AOtZ9gfQ== + +%rec: Jorl + +Secret: jojo + +%rec: jojo +%confidential: joo + +joo: encrypted-MhsqXvDjqU9vOXG8QoHxKg== +fo: fu + +joo: encrypted-By/F2HBy1wiim1fUWMVKRg== +fo: ja +' + +test_declare_input_file encrypt-already-encrypted \ +'%rec: Account +%confidential: Secret + +Id: 1 +Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== + +Id: 2 +Secret: bar +' + +test_declare_input_file missing-auto-fields \ +'%rec: Item +%auto: Id + +Id: 0 +Title: foo + +Id: 1 +Title: baz + +Title: bar +' + +test_declare_input_file uuid-fields-ok \ +'%rec: Item +%type: Id uuid + +Id: 550e8400-e29b-41d4-a716-446655440000 +Name: Item 1 + +Id: 550e8401-e29b-41d4-a716-446655440000 +Name: Item 2 +' + +test_declare_input_file uuid-fields-invalid \ +'%rec: Item +%type: Id uuid + +Id: +Name: Item 1 + +Id: foo +Name: Item 2 +' + +test_declare_input_file type-rec-norset \ +'%rec: foo +%type: Foo rec bar + +Foo: foo + +Foo: bar +' + +test_declare_input_file type-rec-nokey \ +'%rec: foo +%type: Foo rec bar + +Foo: foo + +Foo: bar + +%rec: bar + +Bar: 10 + +Bar: 20 +' + +test_declare_input_file type-rec-key-notype \ +'%rec: foo +%type: Foo rec bar + +Foo: foo + +Foo: bar + +%rec: bar +%key: Bar + +Bar: 10 + +Bar: 20 +' + +test_declare_input_file type-rec-key-type \ +'%rec: foo +%type: Foo rec bar + +Foo: 2 + +Foo: 3 + +%rec: bar +%key: Bar +%type: Bar int + +Bar: 10 + +Bar: 20 +' + +test_declare_input_file type-rec-key-type-invalid \ +'%rec: foo +%type: Foo rec bar + +Foo: xxx + +Foo: 3 + +%rec: bar +%key: Bar +%type: Bar int + +Bar: 10 + +Bar: 20 +' + +test_declare_input_file constraint-sex-valid \ +'%rec: Task +%constraint: Status = '\''Closed'\'' => #ClosedBy + +Id: 0 +Status: Closed +ClosedBy: jemarch + +Id: 1 +Status: Closed +ClosedBy: bar + +Id: 2 +Status: Open +' + +test_declare_input_file constraint-sex-invalid \ +'%rec: Task +%constraint: Status &= 'Closed' => #ClosedBy + +Id: 0 +Status: Closed +ClosedBy: jemarch + +Id: 1 +Status: Closed + +Id: 2 +Status: Open +' + +test_declare_input_file constraint-sex-invalid-empty \ +'%rec: Task +%constraint: + +Id: 0 +Status: Closed +ClosedBy: jemarch + +Id: 1 +Status: Closed + +Id: 2 +Status: Open +' + +test_declare_input_file constraint-sex-with-violation \ +'%rec: Task +%constraint: Status = '\''Closed'\'' ++ => #ClosedBy = 0 + +Id: 0 +Status: Closed +ClosedBy: jemarch + +Id: 1 +Status: Closed + +Id: 2 +Status: Open +' + +test_declare_input_file constraint-sex-several-valid \ +'%rec: Task +%constraint: Status = '\''Closed'\'' => #ClosedBy +%constraint: 1 + +Id: 0 +Status: Closed +ClosedBy: jemarch + +Id: 1 +Status: Closed +ClosedBy: mr foo + +Id: 2 +Status: Open +' + +test_declare_input_file constraint-sex-several-invalid \ +'%rec: Task +%constraint: Status = '\''Closed'\'' => #ClosedBy +%constraint: Id = 1 => Status != '\''Closed'\'' + +Id: 0 +Status: Closed +ClosedBy: jemarch + +Id: 1 +Status: Closed + +Id: 2 +Status: Open +' + +test_declare_input_file unused-type \ +'%rec: Task +%typedef: Status_t enum Open Closed +%key: Id + +Id: 1 +' + +test_declare_input_file blank-line-after-record \ +'foo: bar + +' + +test_declare_input_file blank-line-after-record-invalid \ +'foo:bar + x +' + +test_declare_input_file hyphens-in-field-names \ +'foo-bar: baz +' + +test_declare_input_file ranges-min-ok \ +'%rec: foo +%type: Negative range MIN -1 + +Negative: -1 +Negative: -2147483648 +' + +test_declare_input_file ranges-min-invalid \ +'%rec: foo +%type: Negative range MIN -1 + +Negative: -1 +Negative: 0 +' + +test_declare_input_file ranges-max-ok \ +'%rec: foo +%type: Positive range 0 MAX + +Positive: 0 +Positive: 2147483647 +' + +test_declare_input_file ranges-max-invalid \ +'%rec: foo +%type: Positive range 0 MAX + +Positive: -1 +Positive: 2147483647 +' + +test_declare_input_file ranges-minmax-ok \ +'%rec: foo +%type: Any range MIN MAX + +Any: -2147483648 +Any: 0 +Any: 2147483647 +' + +test_declare_input_file ranges-minmax-invalid \ +'%rec: foo +%type None range MAX MIN + +None: -2147483648 +None: 0 +None: 2147483647 +' + +test_declare_input_file allowed-ok-1 \ +'%rec: foo +%allowed: xxx + +xxx: 10 + +xxx: 20 +' + +test_declare_input_file allowed-ok-2 \ +'%rec: foo +%allowed: xxx yyy + +xxx: 10 + +xxx: 20 +yyy: 30 +' + +test_declare_input_file allowed-ok-3 \ +'%rec: foo +%allowed: xxx +%allowed: yyy + +xxx: 10 + +xxx: 20 +yyy: 30 +' + +test_declare_input_file allowed-ok-4 \ +'%rec: foo +%allowed: xxx +%allowed: yyy + +xxx: 10 + +xxx: 20 +yyy: 30 +' + +test_declare_input_file allowed-ok-5 \ +'%rec: foo +%key: xkey +%mandatory: xmandatory +%allowed: xxx + + +xkey: jur +xxx: 10 +xmandatory: jur + +xxx: 20 +xkey: jor +xmandatory: jur +' + +test_declare_input_file allowed-xfail-1 \ +'%rec: foo +%allowed: xxx + +xxx: 10 + +xxx: 20 +yyy: 30 +' + +test_declare_input_file allowed-xfail-2 \ +'%rec: foo +%allowed: xxx yyy + +xxx: 10 + +xxx: 20 +zzz: 40 +yyy: 30 +' + +test_declare_input_file allowed-xfail-3 \ +'%rec: foo +%allowed: xxx +%allowed: yyy + +xxx: 10 + +xxx: 20 +zzz: 40 +yyy: 30 +' + +# +# Declare tests. +# + +test_tool recfix-with-operation ok \ + recfix \ + '--check' \ + type-int-valid \ +'' + +test_tool recfix-type-int-valid ok \ + recfix \ + '' \ + type-int-valid \ +'' + +test_tool recfix-type-int-invalid xfail \ + recfix \ + '' \ + type-int-invalid + +test_tool recfix-type-real-valid ok \ + recfix \ + '' \ + type-real-valid \ +'' + +test_tool recfix-type-real-invalid xfail \ + recfix \ + '' \ + type-real-invalid + +test_tool recfix-duplicated-keys xfail \ + recfix \ + '' \ + duplicated-keys + +test_tool recfix-missing-mandatory xfail \ + recfix \ + '' \ + missing-mandatory + +test_tool recfix-several-unique xfail \ + recfix \ + '' \ + several-unique + +test_tool recfix-referred-type ok \ + recfix \ + '' \ + referred-type \ +'' + +test_tool recfix-hidden-type ok \ + recfix \ + '' \ + hidden-type \ +'' + +test_tool recfix-ranges-ok ok \ + recfix \ + '' \ + ranges-ok \ +'' + +test_tool recfix-range-hex-ok ok \ + recfix \ + '' \ + ranges-hex-ok \ +'' + +test_tool recfix-range-hex-xfail xfail \ + recfix \ + '' \ + ranges-hex-invalid + +test_tool recfix-range-oct-ok ok \ + recfix \ + '' \ + ranges-oct-ok \ +'' + +test_tool recfix-range-oct-xfail xfail \ + recfix \ + '' \ + ranges-oct-invalid + +test_tool recfix-range-min-ok ok \ + recfix \ + '' \ + ranges-min-ok \ +'' + +test_tool recfix-range-min-invalid xfail \ + recfix \ + '' \ + ranges-min-invalid + +test_tool recfix-range-max-ok ok \ + recfix \ + '' \ + ranges-max-ok \ +'' + +test_tool recfix-range-max-invalid xfail \ + recfix \ + '' \ + ranges-max-invalid + +test_tool recfix-range-minmax-ok ok \ + recfix \ + '' \ + ranges-minmax-ok \ +'' + +test_tool recfix-range-minmax-invalid xfail \ + recfix \ + '' \ + ranges-minmax-invalid + +test_tool recfix-ranges-xfail-1 xfail \ + recfix \ + '' \ + ranges-xfail-1 + +test_tool recfix-ranges-xfail-2 xfail \ + recfix \ + '' \ + ranges-xfail-2 + +test_tool recfix-one-rec ok \ + recfix \ + '' \ + type-int-valid \ + '' + +test_tool recfix-multiple-rec-in-descriptor xfail \ + recfix \ + '' \ + multiple-rec + +test_tool recfix-enum-valid ok \ + recfix \ + '' \ + enum-valid \ + '' + +test_tool recfix-enum-invalid-1 xfail \ + recfix \ + '' \ + enum-invalid-1 + +test_tool recfix-enum-invalid-2 xfail \ + recfix \ + '' \ + enum-invalid-2 + +test_tool recfix-type-size-valid ok \ + recfix \ + '' \ + type-size-valid \ +'' + +test_tool recfix-type-size-valid-hex ok \ + recfix \ + '' \ + type-size-valid-hex \ +'' + +test_tool recfix-type-size-valid-oct ok \ + recfix \ + '' \ + type-size-valid-oct \ +'' + +test_tool recfix-type-size-invalid xfail \ + recfix \ + '' \ + type-size-invalid + +test_tool recfix-type-size-invalid-negative xfail \ + recfix \ + '' \ + type-size-invalid-negative + +test_tool recfix-prohibited-fields-ok ok \ + recfix \ + '' \ + prohibited-fields-ok \ +'' + +test_tool recfix-prohibited-fields-fail xfail \ + recfix \ + '' \ + prohibited-fields + +test_tool recfix-auto-int ok \ + recfix \ + '' \ + auto-int \ +'' + +test_tool recfix-auto-range ok \ + recfix \ + '' \ + auto-range \ +'' + +test_tool recfix-auto-date ok \ + recfix \ + '' \ + auto-date \ +'' + +test_tool recfix-auto-notype ok \ + recfix \ + '' \ + auto-notype \ +'' + +test_tool recfix-auto-invalid-type xfail \ + recfix \ + '' \ + auto-invalid-type + +test_tool recfix-auto-nofex xfail \ + recfix \ + '' \ + auto-nofex + +test_tool recfix-size-invalid-1 xfail \ + recfix \ + '' \ + size-invalid-1 + +test_tool recfix-size-invalid-2 xfail \ + recfix \ + '' \ + size-invalid-2 + +test_tool recfix-size-exact-zero ok \ + recfix \ + '' \ + size-exact-zero \ +'' + +test_tool recfix-size-exact-zero-invalid xfail \ + recfix \ + '' \ + size-exact-zero-invalid + +test_tool recfix-size-exact ok \ + recfix \ + '' \ + size-exact \ +'' + +test_tool recfix-size-exact-hex ok \ + recfix \ + '' \ + size-exact-hex \ +'' + +test_tool recfix-size-exact-oct ok \ + recfix \ + '' \ + size-exact-oct \ +'' + +test_tool recfix-size-exact-invalid xfail \ + recfix \ + '' \ + size-exact-invalid + +test_tool recfix-size-less ok \ + recfix \ + '' \ + size-less \ +'' + +test_tool recfix-size-less-invalid xfail \ + recfix \ + '' \ + size-less-invalid + +test_tool recfix-size-less-equal ok \ + recfix \ + '' \ + size-less-equal \ +'' + +test_tool recfix-size-less-equal-invalid xfail \ + recfix \ + '' \ + size-less-equal-invalid + +test_tool recfix-size-bigger ok \ + recfix \ + '' \ + size-bigger \ +'' + +test_tool recfix-size-bigger-invalid xfail \ + recfix \ + '' \ + size-bigger-invalid + +test_tool recfix-size-bigger-equal ok \ + recfix \ + '' \ + size-bigger-equal \ +'' + +test_tool recfix-size-bigger-equal-invalid xfail \ + recfix \ + '' \ + size-bigger-equal-invalid + +test_tool recfix-size-several xfail \ + recfix \ + '' \ + size-several + +test_tool recfix-typedef-valid ok \ + recfix \ + '' \ + typedef-valid \ +'' + +test_tool recfix-typedef-valid-xfail xfail \ + recfix \ + '' \ + typedef-valid-xfail + +test_tool recfix-typedef-valid-with-blanks ok \ + recfix \ + '' \ + typedef-valid-with-blanks \ +'' + +test_tool recfix-typedef-valid-with-blanks-xfail xfail \ + recfix \ + '' \ + typedef-valid-with-blanks-xfail + +test_tool recfix-typedef-valid-order ok \ + recfix \ + '' \ + typedef-valid-order \ +'' + +test_tool recfix-typedef-valid-order-xfail xfail \ + recfix \ + '' \ + typedef-valid-order-xfail + +test_tool recfix-typedef-valid-chain ok \ + recfix \ + '' \ + typedef-valid-chain \ +'' + +test_tool recfix-typedef-valid-chain-xfail xfail \ + recfix \ + '' \ + typedef-valid-chain-xfail + +test_tool recfix-typedef-valid-multiple ok \ + recfix \ + '' \ + typedef-valid-multiple \ +'' + +test_tool recfix-typedef-valid-multiple-xfail xfail \ + recfix \ + '' \ + typedef-valid-multiple-xfail + +test_tool recfix-typedef-invalid-bad-type xfail \ + recfix \ + '' \ + typedef-invalid-bad-type + +test_tool recfix-typedef-invalid-chain-undefined xfail \ + recfix \ + '' \ + typedef-invalid-chain-undefined + +test_tool recfix-typedef-invalid-chain-loop xfail \ + recfix \ + '' \ + typedef-invalid-chain-loop + +test_tool recfix-sortcheck-valid ok \ + recfix \ + '' \ + sortcheck-valid \ +'' + +test_tool recfix-sortcheck-with-blanks ok \ + recfix \ + '' \ + sortcheck-with-blanks \ +'' + +test_tool recfix-sortcheck-invalid-empty xfail \ + recfix \ + '' \ + sortcheck-invalid-empty + +test_tool recfix-sortcheck-invalid-field-name xfail \ + recfix \ + '' \ + sortcheck-invalid-field-name + +if test "x$crypt_support" = "yes"; then + +test_tool recfix-confidential ok \ + recfix \ + '--check' \ + confidential \ + '' + +test_tool recfix-confidential-several ok \ + recfix \ + '--check' \ + confidential-several \ + '' + +test_tool recfix-confidential-with-unencrypted-fields xfail \ + recfix \ + '--check' \ + confidential-with-unencrypted-fields + +test_tool recfix-encrypt ok \ + recfix \ + '--encrypt -s foo' \ + encrypt \ +'%rec: Account +%confidential: Secret + +Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== + +Secret: encrypted-V1xOls6u5Zw/D5AOtZ9gfQ== + +%rec: Jorl + +Secret: jojo + +%rec: jojo +%confidential: joo + +joo: encrypted-MhsqXvDjqU9vOXG8QoHxKg== +fo: fu + +joo: encrypted-By/F2HBy1wiim1fUWMVKRg== +fo: ja +' + +test_tool recfix-encrypt-password-long ok \ + recfix \ + '--encrypt --password=foo' \ + encrypt \ +'%rec: Account +%confidential: Secret + +Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== + +Secret: encrypted-V1xOls6u5Zw/D5AOtZ9gfQ== + +%rec: Jorl + +Secret: jojo + +%rec: jojo +%confidential: joo + +joo: encrypted-MhsqXvDjqU9vOXG8QoHxKg== +fo: fu + +joo: encrypted-By/F2HBy1wiim1fUWMVKRg== +fo: ja +' + +test_tool recfix-encrypt-without-password xfail \ + recfix \ + '--encrypt' \ + encrypt + +test_tool recfix-encrypt-password-before-operation xfail \ + recfix \ + '-s foo --encrypt' \ + encrypt + +test_tool recfix-encrypt-already-encrypted xfail \ + recfix \ + '--encrypt -s foo' \ + encrypt-already-encrypted + +test_tool recfix-encrypt-already-encrypted-force ok \ + recfix \ + '--force --encrypt -s foo' \ + encrypt-already-encrypted \ +'%rec: Account +%confidential: Secret + +Id: 1 +Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== + +Id: 2 +Secret: encrypted-V1xOls6u5Zw/D5AOtZ9gfQ== +' + +test_tool recfix-decrypt ok \ + recfix \ + '--decrypt -s foo' \ + decrypt \ +'%rec: Account +%confidential: Secret + +Secret: foo + +Secret: bar + +%rec: Jorl + +Secret: jojo + +%rec: jojo +%confidential: joo + +joo: je +fo: fu + +joo: ji +fo: ja +' + +test_tool recfix-decrypt-invalid-password ok \ + recfix \ + '--decrypt -s bar' \ + decrypt \ +'%rec: Account +%confidential: Secret + +Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== + +Secret: encrypted-V1xOls6u5Zw/D5AOtZ9gfQ== + +%rec: Jorl + +Secret: jojo + +%rec: jojo +%confidential: joo + +joo: encrypted-MhsqXvDjqU9vOXG8QoHxKg== +fo: fu + +joo: encrypted-By/F2HBy1wiim1fUWMVKRg== +fo: ja +' + +fi # crypt_support + +test_tool recfix-sort-several-fields-invalid xfail \ + recfix \ + '--check' \ + sortcheck-with-several-fields-invalid + +test_tool recfix-sort-ints ok \ + recfix \ + '--sort' \ + unsorted-int \ +'%rec: foo +%type: Id int +%sort: Id + +Id: 1 +Name: D Field + +Id: 2 +Name: C Field + +Id: 3 +Name: B Field + +Id: 4 +Name: A Field +' + +test_tool recfix-sort-multiple ok \ + recfix \ + '--sort' \ + unsorted-multiple \ +'%rec: SortMultiple +%sort: Class Price +%type: Price real + +Item: four +Class: A +Price: 10 + +Item: two +Class: A +Price: 30 + +Item: five +Class: B +Price: 15 + +Item: one +Class: B +Price: 30 + +Item: three +Class: C +Price: 40 +' + +test_tool recfix-sort-ints-with-equals ok \ + recfix \ + '--sort' \ + unsorted-int-with-equals \ +'%rec: foo +%type: Id int +%sort: Id + +Id: 1 +Name: D Field + +Id: 2 +Name: C Field + +Id: 2 +Name: Cbis Field + +Id: 3 +Name: B Field + +Id: 4 +Name: A Field +' + +test_tool recfix-sort-ranges ok \ + recfix \ + '--sort' \ + unsorted-range \ +'%rec: foo +%type: Id range 0 10 +%sort: Id + +Id: 1 +Name: D Field + +Id: 2 +Name: C Field + +Id: 3 +Name: B Field + +Id: 4 +Name: A Field +' + +test_tool recfix-sort-ranges-with-equals ok \ + recfix \ + '--sort' \ + unsorted-range-with-equals \ +'%rec: foo +%type: Id range 0 10 +%sort: Id + +Id: 1 +Name: D Field + +Id: 2 +Name: C Field + +Id: 2 +Name: Cbis Field + +Id: 3 +Name: B Field + +Id: 4 +Name: A Field +' + +test_tool recfix-sort-reals ok \ + recfix \ + '--sort' \ + unsorted-real \ +'%rec: foo +%type: Id real +%sort: Id + +Id: 1.2 +Name: D Field + +Id: 2.2 +Name: C Field + +Id: 3.2 +Name: B Field + +Id: 4.2 +Name: A Field +' + +test_tool recfix-sort-reals-with-equals ok \ + recfix \ + '--sort' \ + unsorted-real-with-equals \ +'%rec: foo +%type: Id real +%sort: Id + +Id: 1.2 +Name: D Field + +Id: 2.2 +Name: C Field + +Id: 3.2 +Name: B Field + +Id: 4.2 +Name: A Field + +Id: 4.2 +Name: Abis Field +' + +test_tool recfix-sort-lex ok \ + recfix \ + '--sort' \ + unsorted-lex \ +'%rec: foo +%sort: Name + +Id: 4 +Name: A Field + +Id: 3 +Name: B Field + +Id: 2 +Name: C Field + +Id: 1 +Name: D Field +' + +test_tool recfix-sort-lex-with-equals ok \ + recfix \ + '--sort' \ + unsorted-lex-with-equals \ +'%rec: foo +%sort: Name + +Id: 4 +Name: A Field + +Id: 3 +Name: B Field + +Id: 2 +Name: C Field + +Id: 1 +Name: D Field + +Id: 1 +Name: Dbis Field +' + +test_tool recfix-sort-dates ok \ + recfix \ + '--sort' \ + unsorted-date \ +'%rec: foo +%type: Date date +%sort: Date + +Id: 2 +Date: 23 September 1972 + +Id: 1 +Date: 24 September 1972 + +Id: 3 +Date: 23 October 1972 + +Id: 5 +Date: 26 May 1984 + +Id: 4 +Date: 1 April 1999 +' + +test_tool recfix-sort-dates-with-equals ok \ + recfix \ + '--sort' \ + unsorted-date-with-equals \ +'%rec: foo +%type: Date date +%sort: Date + +Id: 2 +Date: 23 September 1972 + +Id: 1 +Date: 24 September 1972 + +Id: 3 +Date: 23 October 1972 + +Id: 6 +Date: 23 October 1972 + +Id: 5 +Date: 26 May 1984 + +Id: 4 +Date: 1 April 1999 +' + +test_tool recfix-sort-booleans ok \ + recfix \ + '--sort' \ + unsorted-bool \ +'%rec: foo +%type: Bool bool +%sort: Bool + +Id: 1 +Bool: 0 + +Id: 3 +Bool: no + +Id: 2 +Bool: false + +Id: 5 +Bool: 1 + +Id: 6 +Bool: true + +Id: 4 +Bool: yes +' + +test_tool recfix-missing-auto-fields ok \ + recfix \ + "--auto" \ + missing-auto-fields \ +'%rec: Item +%auto: Id + +Id: 0 +Title: foo + +Id: 1 +Title: baz + +Id: 2 +Title: bar +' + +if test "$uuid_support" = "yes"; then + +test_tool recfix-uuid-ok ok \ + recfix \ + '--check' \ + uuid-fields-ok \ + '' + +test_tool recfix-uuid-invalid xfail \ + recfix \ + '--check' \ + uuid-fields-invalid + +fi + +test_tool recfix-type-rec-valid ok \ + recfix \ + '--check' \ + type-rec-valid \ + '' + +test_tool recfix-type-rec-invalid-empty xfail \ + recfix \ + '--check' \ + type-rec-invalid-empty + +test_tool recfix-type-rec-invalid-malformed xfail \ + recfix \ + '--check' \ + type-rec-invalid-malformed + +test_tool recfix-type-rec-norset ok \ + recfix \ + '--check' \ + type-rec-norset \ + '' +test_tool recfix-type-rec-nokey ok \ + recfix \ + '--check' \ + type-rec-nokey \ + '' + +test_tool recfix-type-rec-key-notype ok \ + recfix \ + '--check' \ + type-rec-key-notype \ + '' + +test_tool recfix-type-rec-key-type ok \ + recfix \ + '--check' \ + type-rec-key-type \ + '' + +test_tool recfix-type-rec-key-type-invalid xfail \ + recfix \ + '--check' \ + type-rec-key-type-invalid + +test_tool recfix-constraint-sex-valid ok \ + recfix \ + '--check' \ + constraint-sex-valid \ + '' + +test_tool recfix-constraint-sex-invalid xfail \ + recfix \ + '--check' \ + constraint-sex-invalid + +test_tool recfix-constraint-sex-invalid-empty xfail \ + recfix \ + '--check' \ + constraint-sex-invalid-empty + +test_tool recfix-constraint-sex-several-valid ok \ + recfix \ + '--check' \ + constraint-sex-several-valid \ + '' + +test_tool recfix-constraint-sex-several-invalid xfail \ + recfix \ + '--check' \ + constraint-sex-several-invalid + +test_tool recfix-constraint-sex-with-violation xfail \ + recfix \ + '--check' \ + constraint-sex-with-violation + +test_tool recfix-unused-type ok \ + recfix \ + '--check' \ + unused-type \ + '' + +test_tool recfix-blank-line-after-record ok \ + recfix \ + '--check' \ + blank-line-after-record \ + '' + +test_tool recfix-blank-line-after-record-invalid xfail \ + recfix \ + '--check' \ + blank-line-after-record-invalid + +test_tool recfix-hyphens-in-field-names xfail \ + recfix \ + '--check' \ + hyphens-in-field-names + +test_tool recfix-allowed-ok-1 ok \ + recfix \ + '--check' \ + allowed-ok-1 \ + '' + +test_tool recfix-allowed-ok-2 ok \ + recfix \ + '--check' \ + allowed-ok-2 \ + '' + +test_tool recfix-allowed-ok-3 ok \ + recfix \ + '--check' \ + allowed-ok-3 \ + '' + +test_tool recfix-allowed-ok-4 ok \ + recfix \ + '--check' \ + allowed-ok-4 \ + '' + +test_tool recfix-allowed-ok-5 ok \ + recfix \ + '--check' \ + allowed-ok-5 \ + '' + +test_tool recfix-allowed-xfail-1 xfail \ + recfix \ + '--check' \ + allowed-xfail-1 + +test_tool recfix-allowed-xfail-2 xfail \ + recfix \ + '--check' \ + allowed-xfail-2 + +test_tool recfix-allowed-xfail-3 xfail \ + recfix \ + '--check' \ + allowed-xfail-3 + +# +# Cleanup. +# + +test_cleanup +exit $? + +# End of recfix.sh diff --git a/devspec.en_US/project/recutils/torture/utils/recfmt.sh b/devspec.en_US/project/recutils/torture/utils/recfmt.sh new file mode 100755 index 0000000..3dcc3d9 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/utils/recfmt.sh @@ -0,0 +1,150 @@ +#!/bin/sh +# +# recfmt.sh - System tests for recfmt. +# +# Copyright (C) 2010-2015 Jose E. Marchesi. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# +# Initialization +# + +: ${srcdir=.} +. $srcdir/testutils.sh +test_init "recfmt" + +# +# Create input files. +# + +test_declare_input_file empty-file '' + +test_declare_input_file multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value22 +field2: value22bis +field3: value23 + +field1: value31 +field2: value32 +field3: value33 +' + +# +# Declare tests +# + +# Apply an empty template. +test_tool recfmt-empty-template ok \ + recfmt \ + '""' \ + multiple-records \ +'' + +# Apply a template to an empty file. +test_tool recfmt-empty-file ok \ + recfmt \ + '"a template {{foo}}"' \ + empty-file \ +'' + +# Apply a template affecting all the records. +test_tool recfmt-all-records ok \ + recfmt \ + '"foo {{field3}} bar +"' \ + multiple-records \ +'foo value13 bar +foo value23 bar +foo value33 bar +' + +# Apply a template with a slot starting at 0. +test_tool recfmt-slot-beginning ok \ + recfmt \ + '"{{field1}} bar +"' \ + multiple-records \ +'value11 bar +value21 bar +value31 bar +' + +# Apply a template without prolog. +test_tool recfmt-no-prolog ok \ + recfmt \ + '"foo {{field1}} +"' \ + multiple-records \ +'foo value11 +foo value21 +foo value31 +' + +# Apply a template with subscripts. +test_tool recfmt-subscripts ok \ + recfmt \ + '"foo {{field2[1]}} bar +"' \ + multiple-records \ +'foo bar +foo value22bis bar +foo bar +' + +# Apply a template with non-matching records. +test_tool recfmt-non-matching-records ok \ + recfmt \ + '"{{field2[1]}}"' \ + multiple-records \ +'value22bis' + +# Apply a template with string concatenation. +test_tool recfmt-concat ok \ + recfmt \ + '"{{field1 & '\'' '\'' & field2 & field3}} +"' \ + multiple-records \ +'value11 value12value13 +value21 value22value23 +value31 value32value33 +' + +# Try to apply an empty slot. +test_tool recfmt-empty-slot xfail \ + recfmt \ + '"{{field2[1]}}{{}} +"' \ + multiple-records + +# Try to apply an invalid slot. +test_tool recfmt-invalid-slot xfail \ + recfmt \ + '"invalid slot: {{in#alid[}} +"' \ + multiple-records + +# +# Cleanup +# + +test_cleanup +exit $? + +# End of recfmt.sh diff --git a/devspec.en_US/project/recutils/torture/utils/recinf.sh b/devspec.en_US/project/recutils/torture/utils/recinf.sh new file mode 100755 index 0000000..64cfb94 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/utils/recinf.sh @@ -0,0 +1,154 @@ +#!/bin/sh +# +# recinf.sh - System tests for recinf. +# +# Copyright (C) 2010-2015 Jose E. Marchesi. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# +# Initialization +# + +: ${srcdir=.} +. $srcdir/testutils.sh +test_init "recinf" + +# +# Create input files. +# + +test_declare_input_file empty-file '' + +test_declare_input_file invalid \ +'foo: bar +bar: baz + ++ jo +ju: bar +' + +test_declare_input_file one-record \ +'field1: value1 +field2: value2 +field3: value3 +' + +test_declare_input_file multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value22 +field3: value23 + +field1: value31 +field2: value32 +field3: value33 +' + +test_declare_input_file multiple-named \ +'%rec: Type1 + +field1: value11 +field2: value12 +field3: value13 + +%rec: Type2 + +field1: value21 +field2: value22 +field3: value23 + +%rec: Type3 + +field1: value31 +field2: value32 +field3: value33 +' + +# +# Declare tests. +# + +test_tool recinf-empty ok \ + recinf \ + '' \ + empty-file \ +'' + +test_tool recinf-one-record ok \ + recinf \ + '' \ + one-record \ +'1 +' + +test_tool recinf-multiple-records ok \ + recinf \ + '' \ + multiple-records \ +'3 +' + +test_tool recinf-multiple-named ok \ + recinf \ + '' \ + multiple-named \ +'1 Type1 +1 Type2 +1 Type3 +' + +test_tool recinf-multiple-named-descriptors ok \ + recinf \ + '-d' \ + multiple-named \ +'%rec: Type1 + +%rec: Type2 + +%rec: Type3 +' + +test_tool recinf-multiple-types ok \ + recinf \ + '-t Type2' \ + multiple-named \ +'1 Type2 +' + +test_tool recinf-names-only ok \ + recinf \ + '-n' \ + multiple-named \ +'Type1 +Type2 +Type3 +' + +test_tool recinf-invalid xfail \ + recinf \ + '' \ + invalid + +# +# Cleanup +# + +test_cleanup +exit $? + +# End of recinf.sh diff --git a/devspec.en_US/project/recutils/torture/utils/recins.sh b/devspec.en_US/project/recutils/torture/utils/recins.sh new file mode 100755 index 0000000..73448c2 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/utils/recins.sh @@ -0,0 +1,540 @@ +#!/bin/sh +# +# recins.sh - System tests for recins. +# +# Copyright (C) 2010-2015 Jose E. Marchesi. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# +# Initialization +# + +: ${srcdir=.} +. $srcdir/testutils.sh +test_init "recins" + +# +# Create input files. +# + +test_declare_input_file empty-file \ +'' + +test_declare_input_file one-record \ +'field1: value11 +field2: value12 +field3: value13 +' + +test_declare_input_file multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value22 +field3: value23 + +field1: value31 +field2: value32 +field3: value33 +' + +test_declare_input_file multiple-records-case \ +'field1: Value11 +field2: Value12 +field3: Value13 + +field1: Value21 +field2: Value22 +field3: Value23 + +field1: Value31 +field2: Value32 +field3: Value33 +' + +test_declare_input_file multiple-named \ +'%rec: Type1 + +field1: value11 +field2: value12 +field3: value13 + +%rec: Type2 + +field1: value21 +field2: value22 +field3: value23 + +%rec: Type3 + +field1: value31 +field2: value32 +field3: value33 +' + +test_declare_input_file integrity \ +'%rec: Integrity +%type: Id int + +Id: 0 +' + +test_declare_input_file only-descriptor \ +'%rec: foo +' + +test_declare_input_file comments-and-descriptor \ +'# comment 1 + +# comment 2 + +%rec: foo +' + +test_declare_input_file external-descriptor-types \ +'%rec: Patata +%type: foo int +' + +test_declare_input_file external-descriptor \ +'%rec: Patata recins-external-descriptor-types.in + +foo: 10 +' + +test_declare_input_file auto-fields \ +'%rec: foo +%type: myint int +%type: myrange range 0 10 +%auto: myint myrange + +myint: 10 +myrange: 0 +' + +test_declare_input_file auto-notype \ +'%rec: foo +%auto: key + +key: 12 +' + +test_declare_input_file auto-fields-several \ +'%rec: foo +%type: myint int +%type: myrange range 0 10 +%auto: myint +%auto: myrange + +myint: 10 +myrange: 0 +' + +test_declare_input_file auto-range-overflow \ +'%rec: foo +%type: myrange range 0 10 +%auto: myrange + +myrange: 10 +' + +test_declare_input_file marks \ +'%rec: Marks +%type: Class enum A B C + +Name: Alfred +Class: A + +Name: Bertram +Class: B +' + +# +# Declare tests. +# + +test_tool recins-empty ok \ + recins \ + '-f field1 -v "value1"' \ + empty-file \ +'field1: value1 +' + +test_tool recins-empty-with-type ok \ + recins \ + '-t Type1 -f field1 -v "value1"' \ + empty-file \ +'%rec: Type1 + +field1: value1 +' + +test_tool recins-several-fields ok \ + recins \ + '-f field1 -v "value1" -f field2 -v "value2"' \ + empty-file \ +'field1: value1 +field2: value2 +' + +test_tool recins-append ok \ + recins \ + '-f afield1 -v "appended1"' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value22 +field3: value23 + +field1: value31 +field2: value32 +field3: value33 + +afield1: appended1 +' + +test_tool recins-append-in-type ok \ + recins \ + '-t Type2 -f afield1 -v "appended1"' \ + multiple-named \ +'%rec: Type1 + +field1: value11 +field2: value12 +field3: value13 + +%rec: Type2 + +field1: value21 +field2: value22 +field3: value23 + +afield1: appended1 + +%rec: Type3 + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recins-append-new-type ok \ + recins \ + '-t NewType -f afield1 -v "appended1"' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value22 +field3: value23 + +field1: value31 +field2: value32 +field3: value33 + +%rec: NewType + +afield1: appended1 +' + +test_tool recins-replace ok \ + recins \ + '-n 1 -f afield1 -v "replaced"' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +afield1: replaced + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recins-replace-range ok \ + recins \ + '-n 1-2 -f afield1 -v "replaced"' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +afield1: replaced + +afield1: replaced +' + +test_tool recins-replace-several-indexes ok \ + recins \ + '-n 0,2 -f afield1 -v "replaced"' \ + multiple-records \ +'afield1: replaced + +field1: value21 +field2: value22 +field3: value23 + +afield1: replaced +' + +test_tool recins-replace-sex ok \ + recins \ + '-e "field2 = '\''value22'\''" -f afield1 -v "replaced"' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +afield1: replaced + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recins-violate-restrictions xfail \ + recins \ + '-t Integrity -f Id -v "not a number"' \ + integrity + +test_tool recins-force-restrictions ok \ + recins \ + '--force -t Integrity -f Id -v "not a number"' \ + integrity \ +'%rec: Integrity +%type: Id int + +Id: 0 + +Id: not a number +' + +test_tool recins-only-descriptor ok \ + recins \ + '' \ + only-descriptor \ +'%rec: foo +' + +test_tool recins-comments-and-descriptor ok \ + recins \ + '' \ + comments-and-descriptor \ +'# comment 1 + +# comment 2 + +%rec: foo +' + +test_tool recins-external-descriptor ok \ + recins \ + '-t Patata -f foo -v 20' \ + external-descriptor \ +'%rec: Patata recins-external-descriptor-types.in + +foo: 10 + +foo: 20 +' + +test_tool recins-auto-fields ok \ + recins \ + '-t foo -f foo -v bar' \ + auto-fields \ +'%rec: foo +%type: myint int +%type: myrange range 0 10 +%auto: myint myrange + +myint: 10 +myrange: 0 + +myint: 11 +myrange: 1 +foo: bar +' + +test_tool recins-auto-notype ok \ + recins \ + '-t foo -f foo -v bar' \ + auto-notype \ +'%rec: foo +%auto: key + +key: 12 + +key: 13 +foo: bar +' + +test_tool recins-auto-fields-several ok \ + recins \ + '-t foo -f foo -v bar' \ + auto-fields-several \ +'%rec: foo +%type: myint int +%type: myrange range 0 10 +%auto: myint +%auto: myrange + +myint: 10 +myrange: 0 + +myint: 11 +myrange: 1 +foo: bar +' + +test_tool recins-no-auto ok \ + recins \ + '--no-auto -t foo -f foo -v bar' \ + auto-fields \ +'%rec: foo +%type: myint int +%type: myrange range 0 10 +%auto: myint myrange + +myint: 10 +myrange: 0 + +foo: bar +' + +test_tool recins-auto-range-overflow xfail \ + recins \ + '-t foo -f foo -v bar' \ + auto-range-overflow + +test_tool recins-auto-range-overflow-force ok \ + recins \ + '--force -t foo -f foo -v bar' \ + auto-range-overflow \ +'%rec: foo +%type: myrange range 0 10 +%auto: myrange + +myrange: 10 + +myrange: 11 +foo: bar +' + +test_tool recins-quick-simple ok \ + recins \ + '-q value22 -f foo -v bar' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +foo: bar + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recins-random-all ok \ + recins \ + '-m 0 -f foo -v bar' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value22 +field3: value23 + +field1: value31 +field2: value32 +field3: value33 + +foo: bar +' + +test_tool recins-random-one ok \ + recins \ + '-m 1 -f foo -v bar' \ + one-record \ +'foo: bar +' + +test_tool recins-case-insensitive ok \ + recins \ + '-i -q value22 -f foo -v bar' \ + multiple-records-case \ +'field1: Value11 +field2: Value12 +field3: Value13 + +foo: bar + +field1: Value31 +field2: Value32 +field3: Value33 +' + +test_tool recins-case-sensitive ok \ + recins \ + '-q value22 -f foo -v bar' \ + multiple-records-case \ +'field1: Value11 +field2: Value12 +field3: Value13 + +field1: Value21 +field2: Value22 +field3: Value23 + +field1: Value31 +field2: Value32 +field3: Value33 +' + +test_tool recins-insert-default-type ok \ + recins \ + '-f Name -v Xavier -f Class -v X' \ + marks \ +'Name: Xavier +Class: X + +%rec: Marks +%type: Class enum A B C + +Name: Alfred +Class: A + +Name: Bertram +Class: B +' + +# +# Cleanup. +# + +test_cleanup +exit $? + +# End of recins.sh diff --git a/devspec.en_US/project/recutils/torture/utils/recsel.sh b/devspec.en_US/project/recutils/torture/utils/recsel.sh new file mode 100755 index 0000000..2bedc18 --- /dev/null +++ b/devspec.en_US/project/recutils/torture/utils/recsel.sh @@ -0,0 +1,1850 @@ +#!/bin/sh +# +# recsel.sh - System tests for recsel. +# +# Copyright (C) 2010-2015 Jose E. Marchesi. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# +# Initialization +# + +: ${srcdir=.} +: ${crypt_support=yes} + +. $srcdir/testutils.sh +test_init "recsel" + +# +# Create input files. +# + +test_declare_input_file empty-file '' + +test_declare_input_file one-record \ +'field1: value1 +field2: value2 +field3: value3 +' + +test_declare_input_file multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value22 +field3: value23 + +field1: value31 +field2: value32 +field3: value33 +' + +test_declare_input_file multiline \ +'field1: foo bar \ +baz +field2: foo ++ bar ++ baz + +field1: jo ja \ +ju +field2: ++ foo ++ bar +' + +test_declare_input_file repeated-fields \ +'field1: value11 +field2: value121 +field2: value122 +field3: value13 + +field1: value21 +field2: value221 +field2: value222 +field3: value23 +' + +test_declare_input_file multiple-types \ +'%rec: type1 + +field1: value11 +field2: value12 +field3: value13 + +%rec: type2 + +field1: value21 +field2: value22 +field3: value23 + +%rec: type3 + +field1: value31 +field2: value32 +field3: value33 +' + +test_declare_input_file integer-fields \ +'field1: 314 + +field1: 10 + +field1: -10 + +field1: 0 +' + +test_declare_input_file real-fields \ +'field1: 3.14 + +field1: 10.0 + +field1: -10.0 + +field1: 0 +' + +test_declare_input_file recurrent-fields \ +'field1: value11 +field2: value121 +field2: value122 + +field2: value22 +field3: value23 +' + +test_declare_input_file recurrent-fields-2 \ +'Name: foo +Index: 5 +Index: 9 + +Name: bar +Index: 7 +' + +test_declare_input_file dates \ +'Date: Tue Nov 30 12:00:00 CET 2002 + +Date: Tue Nov 30 12:00:00 CET 2010 + +Date: Tue Nov 30 12:00:00 CET 2030 +' + +test_declare_input_file academy \ +'Name: John Smith +Role: Professor +Age: 52 + +Name: Tom Johnson +Role: Professor +Age: 67 + +Name: Tommy Junior +Role: Student +Age: 5 + +Name: Johnny NotSoJunior +Role: Student +Age: 15 +' + +test_declare_input_file confidential \ +'%rec: Account +%confidential: Password + +User: foo +Password: encrypted-MHyd3Dqz+iaViL8h1m18sA== +' + +test_declare_input_file sort \ +'%rec: Sorted +%sort: Id +%type: Id int + +Id: 100 +Key: foo + +Id: 20 +Key: bar + +Id: -2 +Key: baz +' + +test_declare_input_file sort-with-comment \ +'%rec: Sorted +%sort: Id +%type: Id int + +# Foo + +# Bar + +Id: 100 +Key: foo + +Id: 20 +Key: bar + +Id: -2 +Key: baz +' + +test_declare_input_file sort-multiple \ +'%rec: SortMultiple +%sort: Class Price +%type: Price real + +Item: one +Class: B +Price: 30 + +Item: two +Class: A +Price: 30 + +Item: three +Class: C +Price: 40 + +Item: four +Class: A +Price: 10 + +Item: five +Class: B +Price: 15 +' + +test_declare_input_file empty-field-values \ +'a: a1 +b: +c: +d: d1 +' + +test_declare_input_file duplicated-fields \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value21 +field1: value21 + +field1: value31 +field2: +field2: +field3: value33 + +field1: foo +field1: foo +' + +test_declare_input_file group-records \ +'id: 3 +pos: 1 + +id: 1 +pos: 2 + +id: 1 +pos: 3 + +id: 2 +pos: 4 + +id: 3 +pos: 5 +' + +test_declare_input_file group-records-missing \ +'id: 3 +pos: 1 + +id: 1 +pos: 2 + +pos: 3 + +id: 2 +pos: 4 + +id: 3 +pos: 5 +' + +test_declare_input_file sales \ +'Item: A +Date: 21 April 2012 +Cost: 23 + +Item: B +Date: 20 April 2012 +Cost: 50 + +Item: A +Date: 21 April 2012 +Cost: 10 + +Item: C +Date: 12 January 2003 +Cost: 12 + +Item: D +Date: 20 April 2012 +Cost: 100 +' + +test_declare_input_file packages-maintainers \ +'%rec: Package +%type: Maintainer,PreviousMaintainer rec Hacker + +Name: GNU PDF +URL: http://www.gnupdf.org +Maintainer: jemarch@gnu.org +Maintainer: aleksander@gnu.org + +Name: GNU recutils +URL: http://www.gnu.org/software/recutils +Maintainer: jemarch@gnu.org + +Name: GNU Emacs +URL: http://www.gnu.org/software/emacs +Maintainer: stefan@monnier.com +PreviousMaintainer: rms@gnu.org + +%rec: Hacker +%key: Email +%type: Email email + +Name: Jose E. Marchesi +Email: jemarch@gnu.org +URL: http://www.jemarch.net + +Name: Aleksander Morgado +Email: aleksander@gnu.org + +Name: Richard M. Stallman +Email: rms@gnu.org +URL: http://www.stallman.org + +Name: Stefan Monnier +Email: stefan@monnier.com +' + +test_declare_input_file implications \ +'%rec: Task + +Id: 0 +Status: Closed +ClosedBy: jemarch + +Id: 1 +Status: Closed + +Id: 2 +Status: Open +' + +test_declare_input_file non-existant-foreign-key \ +'%rec: Record +%type: Foreign rec NonExistant + +Name: Fred +Foreign: xxx +' + +test_declare_input_file several-foreign-keys \ +'%rec: R +%key: Id + +Id: R1 +Description: this is R1 + +Id: R2 +Description: this is R1 + +Id: R3 +Description: this is R1 + +%rec: T +%key: Id +%type: Requirement rec R + +Id: T1 +Requirement: R1 + +Id: T2 +Requirement: R2 +Requirement: R3 + +Id: T3 +Requirement: R3 +' + +test_declare_input_file unquoted-lisp-strings \ +'foo: fo\o +bar: a quote"etouq a +' + +test_declare_input_file single-char-field-names \ +'a: 10 +b: 20 + +c: 30 +d: 40 +' + +test_declare_input_file record-with-comments \ +'foo1: v1 +# bar +foo2: v2 + +# jorl +bar1: v1 +bar2: v2 +# jurl +' + +test_declare_input_file ignored-first-blanks \ +'foo: v1 +bar: v2 +' + +test_declare_input_file negative_fields \ +'foo: 10 +bar: -10 + +foo: 9 +bar: -9 +' + +# +# Declare tests +# + +# Select the whole record set. +test_tool recsel-all-fields ok \ + recsel \ + '' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value22 +field3: value23 + +field1: value31 +field2: value32 +field3: value33 +' + +# Print just one field. +test_tool recsel-one-field ok \ + recsel \ + '-p field2' \ + multiple-records \ +'field2: value12 + +field2: value22 + +field2: value32 +' + +# Print two fields. +test_tool recsel-two-fields ok \ + recsel \ + '-p field2,field3' \ + multiple-records \ +'field2: value12 +field3: value13 + +field2: value22 +field3: value23 + +field2: value32 +field3: value33 +' + +# Print values +test_tool recsel-values ok \ + recsel \ + '-P field2' \ + multiple-records \ +'value12 + +value22 + +value32 +' +test_tool recsel-values-long ok \ + recsel \ + '--print-values=field2' \ + multiple-records \ +'value12 + +value22 + +value32 +' + +# Print multiple values +test_tool recsel-multiple-values ok \ + recsel \ + '-P field1,field3' \ + multiple-records \ +'value11 +value13 + +value21 +value23 + +value31 +value33 +' + +# Print collapsed +test_tool recsel-collapsed ok \ + recsel \ + '-C -p field1' \ + multiple-records \ +'field1: value11 +field1: value21 +field1: value31 +' + +# Print values collapsed +test_tool recsel-values-collapsed ok \ + recsel \ + '-C -P field2,field3' \ + multiple-records \ +'value12 +value13 +value22 +value23 +value32 +value33 +' + +# Print in a row +test_tool recsel-row ok \ + recsel \ + '-R field1,field2' \ + multiple-records \ +'value11 value12 + +value21 value22 + +value31 value32 +' + +test_tool recsel-row-long ok \ + recsel \ + '--print-row=field1,field2' \ + multiple-records \ +'value11 value12 + +value21 value22 + +value31 value32 +' + +# Print collapsed in a row +test_tool recsel-collapsed-row ok \ + recsel \ + '-C -R field1,field2,field3' \ + multiple-records \ +'value11 value12 value13 +value21 value22 value23 +value31 value32 value33 +' + +# Print all fields (multiline) +test_tool recsel-multi-all-fields ok \ + recsel \ + '' \ + multiline \ +'field1: foo bar baz +field2: foo ++ bar ++ baz + +field1: jo ja ju +field2: ++ foo ++ bar +' + +# Print values (multiline) +test_tool recsel-multi-values ok \ + recsel \ + '-P field1,field2' \ + multiline \ +'foo bar baz +foo +bar +baz + +jo ja ju + +foo +bar +' +# Print collapsed values (multiline) +test_tool recsel-multi-collapsed-values ok \ + recsel \ + '-C -P field1,field2' \ + multiline \ +'foo bar baz +foo +bar +baz +jo ja ju + +foo +bar +' + +# Print a count of all the records. +test_tool recsel-count ok \ + recsel \ + '-c' \ + multiple-records \ +'3 +' + +# Subscripts. +test_tool recsel-subs ok \ + recsel \ + '-p field2[0]' \ + repeated-fields \ +'field2: value121 + +field2: value221 +' + +test_tool recsel-subs-2 ok \ + recsel \ + '-p field2[1]' \ + repeated-fields \ +'field2: value122 + +field2: value222 +' + +# Print records identified by its position into the record set. + +test_tool recsel-index-first ok \ + recsel \ + '-n 0' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 +' + +test_tool recsel-index-long ok \ + recsel \ + '--number=0' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 +' + +test_tool recsel-index-second ok \ + recsel \ + '-n 1' \ + multiple-records \ +'field1: value21 +field2: value22 +field3: value23 +' + +test_tool recsel-index-toobig ok \ + recsel \ + '-n 100' \ + multiple-records \ +'' + +test_tool recsel-index-several ok \ + recsel \ + '-n 0,2' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recsel-index-range-1 ok \ + recsel \ + '-n 0-1' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value22 +field3: value23 +' + +test_tool recsel-index-range-2 ok \ + recsel \ + '-n 1-2' \ + multiple-records \ +'field1: value21 +field2: value22 +field3: value23 + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recsel-index-range-3 ok \ + recsel \ + '-n 0,1-2' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value22 +field3: value23 + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recsel-index-invalid-1 xfail \ + recsel \ + '-n 0,' \ + multiple-records + +test_tool recsel-index-invalid-2 xfail \ + recsel \ + '-n ,0' \ + multiple-records + +test_tool recsel-index-invalid-3 xfail \ + recsel \ + '-n 0,1,2-' \ + multiple-records + +test_tool recsel-index-invalid-4 xfail \ + recsel \ + '-n 0,1,,2' \ + multiple-records + +# Print records of several types. + +test_tool recsel-type ok \ + recsel \ + '-t type1' \ + multiple-types \ +'field1: value11 +field2: value12 +field3: value13 +' + +test_tool recsel-type-2 ok \ + recsel \ + '-t type2' \ + multiple-types \ +'field1: value21 +field2: value22 +field3: value23 +' + +test_tool recsel-type-3 ok \ + recsel \ + '-t type2' \ + multiple-types \ +'field1: value21 +field2: value22 +field3: value23 +' + +test_tool recsel-type-4 ok \ + recsel \ + '-t type3' \ + multiple-types \ +'field1: value31 +field2: value32 +field3: value33 +' + +# Selection expressions. + +test_tool recsel-sex-integer-equal ok \ + recsel \ + '-e "field1 = 0"' \ + integer-fields \ +'field1: 0 +' + +test_tool recsel-sex-integer-equal-hex ok \ + recsel \ + '-e "field1 = -0xa"' \ + integer-fields \ +'field1: -10 +' + +test_tool recsel-sex-integer-equal-oct ok \ + recsel \ + '-e "field1 = -012"' \ + integer-fields \ +'field1: -10 +' + +test_tool recsel-sex-integer-nonequal ok \ + recsel \ + '-e "field1 != 314"' \ + integer-fields \ +'field1: 10 + +field1: -10 + +field1: 0 +' + +test_tool recsel-sex-integer-lessthan ok \ + recsel \ + '-e "field1 < -5"' \ + integer-fields \ +'field1: -10 +' + +test_tool recsel-sex-integer-lessequalthan ok \ + recsel \ + '-e "field1 <= 0"' \ + integer-fields \ +'field1: -10 + +field1: 0 +' + +test_tool recsel-sex-integer-biggerthan ok \ + recsel \ + '-e "field1 > 10"' \ + integer-fields \ +'field1: 314 +' + +test_tool recsel-sex-integer-biggerequalthan ok \ + recsel \ + '-e "field1 >= 10"' \ + integer-fields \ +'field1: 314 + +field1: 10 +' + +test_tool recsel-sex-integer-plus ok \ + recsel \ + '-e "field1 + 2 = 316"' \ + integer-fields \ +'field1: 314 +' + +test_tool recsel-sex-integer-minus ok \ + recsel \ + '-e "field1 - 2 = -12"' \ + integer-fields \ +'field1: -10 +' + +test_tool recsel-sex-integer-mul ok \ + recsel \ + '-e "field1 * 20 = 200"' \ + integer-fields \ +'field1: 10 +' + +test_tool recsel-sex-integer-div ok \ + recsel \ + '-e "field1 / 2 = 5"' \ + integer-fields \ +'field1: 10 +' + +test_tool recsel-sex-integer-mod ok \ + recsel \ + '-e "field1 % 313 = 1"' \ + integer-fields \ +'field1: 314 +' + +test_tool recsel-sex-integer-not ok \ + recsel \ + '-e "!field1"' \ + integer-fields \ +'field1: 0 +' + +test_tool recsel-sex-integer-and ok \ + recsel \ + '-e "field1 && field1"' \ + integer-fields \ +'field1: 314 + +field1: 10 + +field1: -10 +' + +test_tool recsel-sex-integer-or ok \ + recsel \ + '-e "field1 || 1"' \ + integer-fields \ +'field1: 314 + +field1: 10 + +field1: -10 + +field1: 0 +' + +test_tool recsel-sex-real-equal ok \ + recsel \ + '-e "field1 = 3.14"' \ + real-fields \ +'field1: 3.14 +' + +test_tool recsel-sex-real-nonequal ok \ + recsel \ + '-e "field1 != 3.14"' \ + real-fields \ +'field1: 10.0 + +field1: -10.0 + +field1: 0 +' + +test_tool recsel-sex-real-lessthan ok \ + recsel \ + '-e "field1 < -5.2"' \ + real-fields \ +'field1: -10.0 +' +test_tool recsel-sex-real-biggerthan ok \ + recsel \ + '-e "field1 > 3.14"' \ + real-fields \ +'field1: 10.0 +' + +test_tool recsel-sex-real-plus ok \ + recsel \ + '-e "((field1 + 2) > 5.14) && ((field1 + 2) < 5.15)"' \ + real-fields \ +'field1: 3.14 +' + +#test_tool recsel-sex-real-minus \ +# recsel \ +# '-e "((field1 - 2.0) > -12.0)"' \ +# real-fields \ +#'field1: -10.0 +#' + +test_tool recsel-sex-real-mul ok \ + recsel \ + '-e "field1 * 20.0 = 200.0"' \ + real-fields \ +'field1: 10.0 +' + +test_tool recsel-sex-sharp-zero ok \ + recsel \ + '-e "#field1 = 0"' \ + recurrent-fields \ +'field2: value22 +field3: value23 +' + +test_tool recsel-sex-sharp-one ok \ + recsel \ + '-e "#field3 = 1"' \ + recurrent-fields \ +'field2: value22 +field3: value23 +' + +test_tool recsel-sex-sharp-multiple ok \ + recsel \ + '-e "#field2 = 2"' \ + recurrent-fields \ +'field1: value11 +field2: value121 +field2: value122 +' + +test_tool recsel-sex-sharp-multiple-2 ok \ + recsel \ + '-e "#Index = 1"' \ + recurrent-fields-2 \ +'Name: bar +Index: 7 +' + +test_tool recsel-sex-sharp-subname ok \ + recsel \ + '-t Package -j Maintainer -e "#Maintainer.URL" -P Maintainer.URL' \ + packages-maintainers \ +'http://www.jemarch.net + +http://www.jemarch.net +' + +test_tool recsel-sex-match ok \ + recsel \ + '-p Name -e "Name ~ '\''Tom'\''"' \ + academy \ +'Name: Tom Johnson + +Name: Tommy Junior +' + +test_tool recsel-sex-date-sametime ok \ + recsel \ + '-e "Date == '\''Tue Nov 30 12:00:00 CET 2010'\''"' \ + dates \ +'Date: Tue Nov 30 12:00:00 CET 2010 +' + +test_tool recsel-sex-date-before ok \ + recsel \ + '-e "Date << '\''Tue Nov 30 12:00:00 CET 2030'\''"' \ + dates \ +'Date: Tue Nov 30 12:00:00 CET 2002 + +Date: Tue Nov 30 12:00:00 CET 2010 +' + +test_tool recsel-sex-date-after ok \ + recsel \ + '-e "Date >> '\''Tue Nov 30 12:00:00 CET 2002'\''"' \ + dates \ +'Date: Tue Nov 30 12:00:00 CET 2010 + +Date: Tue Nov 30 12:00:00 CET 2030 +' + +test_tool recsel-sex-implies-1 ok \ + recsel \ + '-e "Status = '\''Closed'\'' => #ClosedBy"' \ + implications \ +'Id: 0 +Status: Closed +ClosedBy: jemarch + +Id: 2 +Status: Open +' + +test_tool recsel-sex-conditional-1 ok \ + recsel \ + '-e "Role ~ '\''Professor'\'' ? Age > 65 : Age < 10" -p Name' \ + academy \ +'Name: Tom Johnson + +Name: Tommy Junior +' + +test_tool recsel-sex-conditional-2 ok \ + recsel \ + '-e "(Role ~ '\''Professor'\'') ? (Age < 65) : (Age > 10)" -p Name' \ + academy \ +'Name: John Smith + +Name: Johnny NotSoJunior +' + +test_tool recsel-sex-string-single-quote ok \ + recsel \ + '-e "(Role ~ '\''Professor'\'')" -p Name' \ + academy \ +'Name: John Smith + +Name: Tom Johnson +' + +test_tool recsel-sex-string-double-quote ok \ + recsel \ + "-e '(Role ~ "\""Professor"\"")' -p Name" \ + academy \ +'Name: John Smith + +Name: Tom Johnson +' + +test_tool recsel-sex-string-multiline ok \ + recsel \ + "-e 'field2 = "\"" +foo +bar"\""' -c" \ + multiline \ +'1 +' + +test_tool recsel-sex-string-equal ok \ + recsel \ + "-e 'field2 = \"value12\"'" \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 +' + +test_tool recsel-sex-string-non-equal ok \ + recsel \ + "-e 'field2 != \"value12\"'" \ + multiple-records \ +'field1: value21 +field2: value22 +field3: value23 + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recsel-sex-string-equal-insensitive ok \ + recsel \ + "-i -e 'field2 = \"vaLue12\"'" \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 +' + +test_tool recsel-sex-string-non-equal-insensitive ok \ + recsel \ + "-i -e 'field2 != \"vaLue12\"'" \ + multiple-records \ +'field1: value21 +field2: value22 +field3: value23 + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recsel-quick-simple ok \ + recsel \ + "-q value22" \ + multiple-records \ +'field1: value21 +field2: value22 +field3: value23 +' + +test_tool recsel-quick-not-found ok \ + recsel \ + "-q notfound" \ + multiple-records \ +'' + +test_tool recsel-quick-and-sex xfail \ + recsel \ + "-q foo -e 'Bar = 10'" \ + multiple-records + +test_tool recsel-sex-and-quick xfail \ + recsel \ + "-e 'Bar = 10' -q foo" \ + multiple-records + +test_tool recsel-quick-and-num xfail \ + recsel \ + "-q foo -n 5" \ + multiple-records + +test_tool recsel-num-and-quick xfail \ + recsel \ + "-n 5 -q foo" \ + multiple-records + +test_tool recsel-num-and-random xfail \ + recsel \ + "-n 5 -m 2" \ + multiple-records + +test_tool recsel-sex-and-random xfail \ + recsel \ + "-e 'field1 = 10' -m 2" \ + multiple-records + +test_tool recsel-quick-and-random xfail \ + recsel \ + "-q foo -m 1" \ + multiple-records + +if test "x$crypt_support" = "xyes"; then + + test_tool recsel-confidential ok \ + recsel \ + '-s secret' \ + confidential \ +'User: foo +Password: secret +' + +test_tool recsel-confidential-fex ok \ + recsel \ + '-s secret -p Password' \ + confidential \ +'Password: secret +' + +test_tool recsel-confidential-fex-value ok \ + recsel \ + '-s secret -P Password' \ + confidential \ +'secret +' + +test_tool recsel-confidential-num ok \ + recsel \ + '-s secret -n 0' \ + confidential \ +'User: foo +Password: secret +' + +fi # crypt_support + +test_tool recsel-sort ok \ + recsel \ + '' \ + sort \ +'Id: -2 +Key: baz + +Id: 20 +Key: bar + +Id: 100 +Key: foo +' + +test_tool recsel-sort-with-comment ok \ + recsel \ + '' \ + sort-with-comment \ +'Id: -2 +Key: baz + +Id: 20 +Key: bar + +Id: 100 +Key: foo +' + +test_tool recsel-sort-multiple ok \ + recsel \ + '' \ + sort-multiple \ +'Item: four +Class: A +Price: 10 + +Item: two +Class: A +Price: 30 + +Item: five +Class: B +Price: 15 + +Item: one +Class: B +Price: 30 + +Item: three +Class: C +Price: 40 +' + +test_tool recsel-sort-field ok \ + recsel \ + '-S Key' \ + sort \ +'Id: 20 +Key: bar + +Id: -2 +Key: baz + +Id: 100 +Key: foo +' + +test_tool recsel-sort-field-multiple ok \ + recsel \ + '-S Price,Class' \ + sort-multiple \ +'Item: four +Class: A +Price: 10 + +Item: five +Class: B +Price: 15 + +Item: two +Class: A +Price: 30 + +Item: one +Class: B +Price: 30 + +Item: three +Class: C +Price: 40 +' +test_tool recsel-sort-field-nonexist ok \ + recsel \ + '-S doesnotexist' \ + sort \ +'Id: 100 +Key: foo + +Id: 20 +Key: bar + +Id: -2 +Key: baz +' + +test_tool recsel-empty-field-values ok \ + recsel \ + '' \ + empty-field-values \ +'a: a1 +b: +c: +d: d1 +' + +test_tool recsel-uniq ok \ + recsel \ + '-U' \ + duplicated-fields \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value21 + +field1: value31 +field2: +field3: value33 + +field1: foo +' + +test_tool recsel-uniq-long ok \ + recsel \ + '--uniq' \ + duplicated-fields \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value21 + +field1: value31 +field2: +field3: value33 + +field1: foo +' + +test_tool recsel-random-all ok \ + recsel \ + '-m 0' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value22 +field3: value23 + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recsel-random-one ok \ + recsel \ + '-m 1' \ + one-record \ +'field1: value1 +field2: value2 +field3: value3 +' + +test_tool recsel-group-records ok \ + recsel \ + '-G id' \ + group-records \ +'id: 1 +pos: 2 +pos: 3 + +id: 2 +pos: 4 + +id: 3 +pos: 1 +pos: 5 +' + +test_tool recsel-group-records-sort ok \ + recsel \ + '-G pos' \ + group-records \ +'id: 3 +pos: 1 + +id: 1 +pos: 2 + +id: 1 +pos: 3 + +id: 2 +pos: 4 + +id: 3 +pos: 5 +' + +test_tool recsel-group-records-non-existing-field ok \ + recsel \ + '-G doesnotexist' \ + group-records \ +'id: 3 +pos: 1 + +id: 1 +pos: 2 + +id: 1 +pos: 3 + +id: 2 +pos: 4 + +id: 3 +pos: 5 +' + +test_tool recsel-group-one-record ok \ + recsel \ + '-G field3' \ + one-record \ +'field1: value1 +field2: value2 +field3: value3 +' + +test_tool recsel-group-records-missing ok \ + recsel \ + '-G id' \ + group-records-missing \ +'pos: 3 + +id: 1 +pos: 2 + +id: 2 +pos: 4 + +id: 3 +pos: 1 +pos: 5 +' + +test_tool recsel-group-multiple-fields ok \ + recsel \ + '-G Date,Item' \ + sales \ +'Item: C +Date: 12 January 2003 +Cost: 12 + +Item: B +Date: 20 April 2012 +Cost: 50 + +Item: D +Date: 20 April 2012 +Cost: 100 + +Item: A +Date: 21 April 2012 +Cost: 23 +Cost: 10 +' + +# rewrite rule + +test_tool recsel-aggregate-field-name ok \ + recsel \ + '-p "Count(Cost)"' \ + sales \ +'Count_Cost: 5 +' + +test_tool recsel-aggregate-case-insensitive ok \ + recsel \ + '-p "cOuNt(Cost)"' \ + sales \ +'cOuNt_Cost: 5 +' + +test_tool recsel-aggregate-rewrite-rule ok \ + recsel \ + '-p "Count(Cost):MyCount"' \ + sales \ +'MyCount: 5 +' + +test_tool recsel-aggregate-count-overall ok \ + recsel \ + '-P "Count(Cost)"' \ + sales \ +'5 +' + +test_tool recsel-aggregate-count-grouped ok \ + recsel \ + '-p "Item,Count(Cost)" -G Item' \ + sales \ +'Item: A +Count_Cost: 2 + +Item: B +Count_Cost: 1 + +Item: C +Count_Cost: 1 + +Item: D +Count_Cost: 1 +' + +test_tool recsel-aggregate-avg-overall ok \ + recsel \ + '-P "Avg(Cost)"' \ + sales \ +'39 +' + +test_tool recsel-aggregate-avg-grouped ok \ + recsel \ + '-p "Item,Avg(Cost)" -G Item' \ + sales \ +'Item: A +Avg_Cost: 16.5 + +Item: B +Avg_Cost: 50 + +Item: C +Avg_Cost: 12 + +Item: D +Avg_Cost: 100 +' + +test_tool recsel-aggregate-sum-overall ok \ + recsel \ + '-P "Sum(Cost)"' \ + sales \ +'195 +' + +test_tool recsel-aggregate-sum-grouped ok \ + recsel \ + '-p "Item,Sum(Cost):TotalCost" -G Item' \ + sales \ +'Item: A +TotalCost: 33 + +Item: B +TotalCost: 50 + +Item: C +TotalCost: 12 + +Item: D +TotalCost: 100 +' + +test_tool recsel-aggregate-sum-negative ok \ + recsel \ + '-p "Sum(bar):TotalBar"' \ + negative_fields \ +'TotalBar: -19 +' + +test_tool recsel-aggregate-min-overall ok \ + recsel \ + '-P "Min(Cost)"' \ + sales \ +'10 +' + +test_tool recsel-aggregate-min-grouped ok \ + recsel \ + '-p "Item,Min(Cost)" -G Item' \ + sales \ +'Item: A +Min_Cost: 10 + +Item: B +Min_Cost: 50 + +Item: C +Min_Cost: 12 + +Item: D +Min_Cost: 100 +' + +test_tool recsel-aggregate-max-overall ok \ + recsel \ + '-P "Max(Cost)"' \ + sales \ +'100 +' + +test_tool recsel-aggregate-max-grouped ok \ + recsel \ + '-p "Item,Max(Cost)" -G Item' \ + sales \ +'Item: A +Max_Cost: 23 + +Item: B +Max_Cost: 50 + +Item: C +Max_Cost: 12 + +Item: D +Max_Cost: 100 +' + +test_tool recsel-fex-rewrite-all ok \ + recsel \ + "-p field1,field2:xxx,field3" \ + repeated-fields \ +'field1: value11 +xxx: value121 +xxx: value122 +field3: value13 + +field1: value21 +xxx: value221 +xxx: value222 +field3: value23 +' + +test_tool recsel-fex-rewrite-subscript-single ok \ + recsel \ + "-p field1,field2[0]:xxx,field2[1],field3" \ + repeated-fields \ +'field1: value11 +xxx: value121 +field2: value122 +field3: value13 + +field1: value21 +xxx: value221 +field2: value222 +field3: value23 +' +test_tool recsel-fex-rewrite-subscript-multi ok \ + recsel \ + "-p field1,field2[0-1]:xxx,field3" \ + repeated-fields \ +'field1: value11 +xxx: value121 +xxx: value122 +field3: value13 + +field1: value21 +xxx: value221 +xxx: value222 +field3: value23 +' + +test_tool recsel-fex-rewrite-several ok \ + recsel \ + "-p field1,field2:xxx,field3:yyy" \ + repeated-fields \ +'field1: value11 +xxx: value121 +xxx: value122 +yyy: value13 + +field1: value21 +xxx: value221 +xxx: value222 +yyy: value23 +' + +test_tool recsel-descriptor ok \ + recsel \ + "-t type2 -d" \ + multiple-types \ +'%rec: type2 + +field1: value21 +field2: value22 +field3: value23 +' + +test_tool recsel-nonexistent-print ok \ + recsel \ + '-p dontexist' \ + multiple-records \ + '' + +test_tool recsel-join-default-rset xfail \ + recsel \ + '-j field2' \ + multiple-records + +test_tool recsel-join-no-foreign ok \ + recsel \ + '-t type1 -j field2' \ + multiple-types \ +'field1: value11 +field2: value12 +field3: value13 +' + +test_tool recsel-non-existant-foreign-key ok \ + recsel \ + '-t Record -j Foreign' \ + non-existant-foreign-key \ +'Name: Fred +Foreign: xxx +' + +test_tool recsel-several-foreign-keys ok \ + recsel \ + '-t T -j Requirement -p Id,Requirement.Id' \ + several-foreign-keys \ +'Id: T1 +Requirement_Id: R1 + +Id: T2 +Requirement_Id: R2 + +Id: T2 +Requirement_Id: R3 + +Id: T3 +Requirement_Id: R3 +' + +test_tool recsel-join-descriptor ok \ + recsel \ + '-t Package -j Maintainer -d -p Name' \ + packages-maintainers \ +'%rec: Package_Maintainer + +Name: GNU PDF + +Name: GNU PDF + +Name: GNU recutils + +Name: GNU Emacs +' + +test_tool recsel-unquoted-lisp-strings ok \ + recsel \ + '--print-sexps' \ + unquoted-lisp-strings \ +'(record 0 ( +(field 0 "foo" "fo\\o") +(field 11 "bar" "a quote\"etouq a"))) +' +test_tool recsel-sex-single-char-field-names ok \ + recsel \ + '-e "c = 30"' \ + single-char-field-names \ +'c: 30 +d: 40 +' + +test_tool recsel-record-with-comments ok \ + recsel \ + '' \ + record-with-comments \ +'foo1: v1 +foo2: v2 + +bar1: v1 +bar2: v2 +' + +test_tool recsel-ignored-first-blanks ok \ + recsel \ + '' \ + ignored-first-blanks \ +'foo: v1 +bar: v2 +' + +# +# Cleanup +# + +test_cleanup +exit $? + +# End of recsel.sh diff --git a/devspec.en_US/project/recutils/torture/utils/recset.sh b/devspec.en_US/project/recutils/torture/utils/recset.sh new file mode 100755 index 0000000..a9bf01b --- /dev/null +++ b/devspec.en_US/project/recutils/torture/utils/recset.sh @@ -0,0 +1,491 @@ +#!/bin/sh +# +# recset.sh - System tests for recset. +# +# Copyright (C) 2010-2015 Jose E. Marchesi. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# +# Initialization +# + +: ${srcdir=.} +. $srcdir/testutils.sh +test_init "recset" + +# +# Create input files. +# + +test_declare_input_file one-record \ +'field1: value1 +field2: value2 +field3: value3 +' + +test_declare_input_file repeated-fields \ +'field1: value1 +field2: value21 +field2: value22 +field3: value3 +' + +test_declare_input_file integrity \ +'%rec: Integrity +%key: Id + +Id: 10 +other: field +' + +test_declare_input_file renames \ +'%rec: Type1 +%key: field1 +%type: field2 line +%mandatory: field2 +%sort: field2 + +field1: field11 +field2: field121 +field2: field122 +field2: field123 +field3: field13 +' + +test_declare_input_file renames-multiple \ +'%rec: Type1 +%key: field1 +%type: field2 line +%mandatory: field2 +%sort: field2 + +field1: field11 +field2: field121 +field2: field122 +field2: field123 +field3: field13 + +field1: field21 +field2: field221 +field2: field222 +field2: field223 +field3: field23 +' + +test_declare_input_file multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: value21 +field2: value22 +field3: value23 + +field1: value31 +field2: value32 +field3: value33 +' + +# +# Declare tests. +# + +test_tool recset-append-field ok \ + recset \ + '-n 0 -f foo -a bar' \ + one-record \ +'field1: value1 +field2: value2 +field3: value3 +foo: bar +' + +test_tool recset-set-field ok \ + recset \ + '-n 0 -f field2 -s bar' \ + one-record \ +'field1: value1 +field2: bar +field3: value3 +' + +test_tool recset-delete-field ok \ + recset \ + '-n 0 -f field2 -d' \ + one-record \ +'field1: value1 +field3: value3 +' + +test_tool recset-comment-out-field ok \ + recset \ + '-n 0 -f field2 -c' \ + one-record \ +'field1: value1 +#field2: value2 +field3: value3 +' + +test_tool recset-delete-non-existant ok \ + recset \ + '-n 0 -f nonexistant -d' \ + one-record \ +'field1: value1 +field2: value2 +field3: value3 +' + +test_tool recset-comment-out-fex-first ok \ + recset \ + '-n 0 -f field2[0] -c' \ + repeated-fields \ +'field1: value1 +#field2: value21 +field2: value22 +field3: value3 +' + +test_tool recset-comment-out-fex-last ok \ + recset \ + '-n 0 -f field2[1] -c' \ + repeated-fields \ +'field1: value1 +field2: value21 +#field2: value22 +field3: value3 +' + +test_tool recset-violate-integrity xfail \ + recset \ + '-n 0 -f Id -d' \ + integrity + +test_tool recset-force-integrity ok \ + recset \ + '--force -n 0 -f Id -d' \ + integrity \ +'%rec: Integrity +%key: Id + +other: field +' + +test_tool recset-rename ok \ + recset \ + '--force -t Type1 -n 0 -f field2 -r foo' \ + renames \ +'%rec: Type1 +%key: field1 +%type: field2 line +%mandatory: field2 +%sort: field2 + +field1: field11 +foo: field121 +foo: field122 +foo: field123 +field3: field13 +' + +test_tool recset-rename-first ok \ + recset \ + '--force -t Type1 -n 0 -f field2[0] -r foo' \ + renames \ +'%rec: Type1 +%key: field1 +%type: field2 line +%mandatory: field2 +%sort: field2 + +field1: field11 +foo: field121 +field2: field122 +field2: field123 +field3: field13 +' + +test_tool recset-rename-middle ok \ + recset \ + '--force -t Type1 -n 0 -f field2[1] -r foo' \ + renames \ +'%rec: Type1 +%key: field1 +%type: field2 line +%mandatory: field2 +%sort: field2 + +field1: field11 +field2: field121 +foo: field122 +field2: field123 +field3: field13 +' + +test_tool recset-rename-last ok \ + recset \ + '--force -t Type1 -n 0 -f field2[2] -r foo' \ + renames \ +'%rec: Type1 +%key: field1 +%type: field2 line +%mandatory: field2 +%sort: field2 + +field1: field11 +field2: field121 +field2: field122 +foo: field123 +field3: field13 +' + +test_tool recset-rename-range-first ok \ + recset \ + '--force -t Type1 -n 0 -f field2[0-1] -r foo' \ + renames \ +'%rec: Type1 +%key: field1 +%type: field2 line +%mandatory: field2 +%sort: field2 + +field1: field11 +foo: field121 +foo: field122 +field2: field123 +field3: field13 +' + +test_tool recset-rename-range-last ok \ + recset \ + '--force -t Type1 -n 0 -f field2[1-2] -r foo' \ + renames \ +'%rec: Type1 +%key: field1 +%type: field2 line +%mandatory: field2 +%sort: field2 + +field1: field11 +field2: field121 +foo: field122 +foo: field123 +field3: field13 +' + +test_tool recset-rename-range-all ok \ + recset \ + '--force -t Type1 -n 0 -f field2[0-2] -r foo' \ + renames \ +'%rec: Type1 +%key: field1 +%type: field2 line +%mandatory: field2 +%sort: field2 + +field1: field11 +foo: field121 +foo: field122 +foo: field123 +field3: field13 +' + +test_tool recset-rename-all ok \ + recset \ + '--force -t Type1 -e "1" -f field2[0-2] -r foo' \ + renames-multiple \ +'%rec: Type1 +%key: field1 +%type: field2 line +%mandatory: field2 +%sort: field2 + +field1: field11 +foo: field121 +foo: field122 +foo: field123 +field3: field13 + +field1: field21 +foo: field221 +foo: field222 +foo: field223 +field3: field23 +' + +test_tool recset-rename-all-descriptor ok \ + recset \ + '--force -t Type1 -f field2[0-2] -r foo' \ + renames-multiple \ +'%rec: Type1 +%key: field1 +%type: foo line +%mandatory: foo +%sort: foo + +field1: field11 +foo: field121 +foo: field122 +foo: field123 +field3: field13 + +field1: field21 +foo: field221 +foo: field222 +foo: field223 +field3: field23 +' + +test_tool recset-rename-all-key ok \ + recset \ + '--force -t Type1 -f field1 -r newkey' \ + renames-multiple \ +'%rec: Type1 +%key: newkey +%type: field2 line +%mandatory: field2 +%sort: field2 + +newkey: field11 +field2: field121 +field2: field122 +field2: field123 +field3: field13 + +newkey: field21 +field2: field221 +field2: field222 +field2: field223 +field3: field23 +' + +test_tool recset-rename-invalid-fex xfail \ + recset \ + '--force -t Type1 -f field1,field2 -r foo' \ + renames-multiple + +test_tool recset-set-add-1 ok \ + recset \ + '-f field2 -S foo' \ + one-record \ +'field1: value1 +field2: foo +field3: value3 +' + +test_tool recset-set-add-2 ok \ + recset \ + '-f field4 -S foo' \ + one-record \ +'field1: value1 +field2: value2 +field3: value3 +field4: foo +' + +test_tool recset-set-add-3 ok \ + recset \ + '-f field2,field4 -S foo' \ + one-record \ +'field1: value1 +field2: foo +field3: value3 +field4: foo +' + +test_tool recset-quick-simple ok \ + recset \ + '-q value22 -f field1 -s foo' \ + multiple-records \ +'field1: value11 +field2: value12 +field3: value13 + +field1: foo +field2: value22 +field3: value23 + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recset-set-field-in-range ok \ + recset \ + '-n 0-1 -f field2 -s XXX' \ + multiple-records \ +'field1: value11 +field2: XXX +field3: value13 + +field1: value21 +field2: XXX +field3: value23 + +field1: value31 +field2: value32 +field3: value33 +' + +test_tool recset-set-field-in-several-indexes ok \ + recset \ + '-n 0,2 -f field2 -s XXX' \ + multiple-records \ +'field1: value11 +field2: XXX +field3: value13 + +field1: value21 +field2: value22 +field3: value23 + +field1: value31 +field2: XXX +field3: value33 +' + +test_tool recset-random-all ok \ + recset \ + '-m 0 -f field2 -s XXX' \ + multiple-records \ +'field1: value11 +field2: XXX +field3: value13 + +field1: value21 +field2: XXX +field3: value23 + +field1: value31 +field2: XXX +field3: value33 +' + +test_tool recset-random-one ok \ + recset \ + '-m 1 -f field2 -s XXX' \ + one-record \ +'field1: value1 +field2: XXX +field3: value3 +' + +# +# Cleanup. +# + +test_cleanup +exit $? + +# End of recset.sh diff --git a/devspec.en_US/project/recutils/torture/utils/testutils.sh b/devspec.en_US/project/recutils/torture/utils/testutils.sh new file mode 100755 index 0000000..1b70e3a --- /dev/null +++ b/devspec.en_US/project/recutils/torture/utils/testutils.sh @@ -0,0 +1,216 @@ +#!/bin/sh +# +# testutils.sh - Misc utilities for testing the GNU recutils. +# +# Copyright (C) 2010-2015 Jose E. Marchesi. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +: ${builddir=.} +. $builddir/config.sh + +# Create an input file. +# +# $1 => Name of the file. +# $2 => Contents of the file. +test_declare_input_file () +{ + # Check parameters. + if test "$#" -ne "2" + then + echo "error: testutils: invalid parameters to test_declare_input_file" + exit 1 + fi + + filename="${test_suite}-$1.in" + contents="$2" + + # Create the input file. + printf "%s" "$contents" > $filename + + # Add the file to the global list of temp files. + test_tmpfiles="$test_tmpfiles $filename" +} + +# Generate an input file. +# +# $1 => Name of the file. +# $2 => Number of records. +# $3 => Number of fields in each record. +test_gen_input_file () +{ + # Check parameters. + if test "$#" -ne "3" + then + echo "error: testutils: invalid parameters to test_gen_input_file" + exit 1 + fi + + filename="$1.in" + numrecords="$2" + numfields="$3" + + # Create the contents of the file if it does not already exist. + # This is important, since the generated test files will usually + # be very big. + + echo -n " Creating input file $filename ..." + + if test -f $filename; then + echo " skipped" + else + recno=0 + while test "$recno" -lt "$numrecords" + do + fieldno=0 + while test "$fieldno" -lt "$numfields" + do + echo "field$fieldno: value$recno$fieldno" >> $filename + fieldno=`expr $fieldno + 1` + done + echo "" >> $filename + + recno=`expr $recno + 1` + done + + echo " done" + fi +} + +# Initialize the testing environment. +# +# $1 => Name of the test suite. +test_init () +{ + if test "$#" -ne "1"; then + echo "error: testutils: invalid parameters to test_init" + exit 1 + fi + + test_suite=$1 + test_result="0" + trap 'rm -fr $test_tmpfiles' EXIT 1 2 3 15 + + echo "Running $test_suite test(s): " +} + +# Delete temporary files and other cleanup. +# +# No parameters. +test_cleanup () +{ + rm -fr $test_tmpfiles + return $test_result +} + +# Test a recutil. +# +# $1 => Test name. +# $2 => Expected result: ok, xfail, perf +# $3 => Utility to test. +# $4 => Parameters. +# $5 => Input file to use. +# $6 => Expected result. Only for 'ok' tests. +test_tool () +{ + # Check parameters. + if test "$#" -lt "2" || \ + { test "$2" != "ok" && test "$2" != "xfail" && test "$2" != "perf"; } || \ + { test "$2" = "ok" && test "$#" -ne "6"; } || \ + { test "$2" = "perf" && test "$#" -ne "5"; } || \ + { test "$2" = "xfail" && test "$#" -ne "5"; } + then + echo "error: testutils: invalid parameters to test_tool" + exit 1 + fi + + printf " %s " $1 + + status=$2 + utility=$3$EXEEXT + parameters=$4 + input_file="${test_suite}-$5.in" + ok_file="$1.ok" + output_file="$1.out" + error_file="$1.err" + timing_file="$1.tim" + postprocessed_output_file="$1.put" + expected=$6 + + test_tmpfiles="$test_tmpfiles $output_file $ok_file" + if test "$status" = "perf"; then + test_tmpfiles="$test_tmpfiles $timing_file" + fi + + # Run the tool. + if test "$status" = "perf"; then + eval "cat $input_file | time -f %E -o $timing_file \ + $utility $parameters > $output_file 2> $error_file" + else + eval "cat $input_file | $utility $parameters > $output_file 2> $error_file" + fi + res=$? + + if test "$status" = "ok" || test "$status" = "perf" + then + if test "$res" -ne "0" + then + printf "%s (see %s)\n" "error" "$error_file" + else + if test "$status" = "ok"; then + # Check for the result in output_file. + LC_ALL=C tr -d '\r' < $output_file > $postprocessed_output_file + printf "%s" "$expected" > $ok_file + cmp $ok_file $postprocessed_output_file > /dev/null 2>&1 + res=$? + if test "$res" -eq "0" + then + echo $status + else + printf "%s (see %s)\n" "fail" "$1.diff" + diff $ok_file $postprocessed_output_file > $1.diff + fi + rm $error_file $postprocessed_output_file + else + elapsed_time=`cat $timing_file` + echo $elapsed_time + rm $error_file + fi + fi + fi + + if test "$status" = "xfail" + then + if test "$res" -eq "0" + then + echo "error (expected failure)" + res=1 + else + echo $status + + # Don't accumulate any error. + res=0 + fi + + rm $error_file + fi + + # Accumulate the error. + test_result=`expr $test_result + $res` +} + +PATH=$srcdir:$PATH +export PATH + +# End of testutils.sh diff --git a/devspec.en_US/project/recutils/utils/.deps/csv2rec.Po b/devspec.en_US/project/recutils/utils/.deps/csv2rec.Po new file mode 100755 index 0000000..5dbe722 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/.deps/csv2rec.Po @@ -0,0 +1,220 @@ +csv2rec.o: csv2rec.c /usr/include/stdc-predef.h ../src/config.h \ + /usr/include/getopt.h /usr/include/ctype.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/string.h /usr/include/string.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h ../lib/sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/xalloc.h \ + ../lib/stdint.h /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h \ + /usr/include/stdint.h /usr/include/i386-linux-gnu/bits/wchar.h \ + ../lib/limits.h /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h ../lib/xalloc-oversized.h \ + ../lib/gettext.h /usr/include/libintl.h ../lib/locale.h \ + /usr/include/locale.h /usr/include/i386-linux-gnu/bits/locale.h \ + ../libcsv/csv.h ../lib/stdio.h /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../src/rec.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h recutl.h ../lib/progname.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +/usr/include/getopt.h: + +/usr/include/ctype.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/xalloc.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +../lib/xalloc-oversized.h: + +../lib/gettext.h: + +/usr/include/libintl.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +../libcsv/csv.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../src/rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +recutl.h: + +../lib/progname.h: diff --git a/devspec.en_US/project/recutils/utils/.deps/mdb2rec-mdb2rec.Po b/devspec.en_US/project/recutils/utils/.deps/mdb2rec-mdb2rec.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/.deps/mdb2rec-mdb2rec.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/utils/.deps/mdb2rec-recutl.Po b/devspec.en_US/project/recutils/utils/.deps/mdb2rec-recutl.Po new file mode 100755 index 0000000..9ce06a8 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/.deps/mdb2rec-recutl.Po @@ -0,0 +1 @@ +# dummy diff --git a/devspec.en_US/project/recutils/utils/.deps/rec2csv.Po b/devspec.en_US/project/recutils/utils/.deps/rec2csv.Po new file mode 100755 index 0000000..9cf1b51 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/.deps/rec2csv.Po @@ -0,0 +1,220 @@ +rec2csv.o: rec2csv.c /usr/include/stdc-predef.h ../src/config.h \ + /usr/include/getopt.h /usr/include/ctype.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/string.h /usr/include/string.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h ../lib/sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/xalloc.h \ + ../lib/stdint.h /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h \ + /usr/include/stdint.h /usr/include/i386-linux-gnu/bits/wchar.h \ + ../lib/limits.h /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h ../lib/xalloc-oversized.h \ + ../lib/gettext.h /usr/include/libintl.h ../lib/locale.h \ + /usr/include/locale.h /usr/include/i386-linux-gnu/bits/locale.h \ + ../libcsv/csv.h ../lib/stdio.h /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../src/rec.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h recutl.h ../lib/progname.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +/usr/include/getopt.h: + +/usr/include/ctype.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/xalloc.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +../lib/xalloc-oversized.h: + +../lib/gettext.h: + +/usr/include/libintl.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +../libcsv/csv.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../src/rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +recutl.h: + +../lib/progname.h: diff --git a/devspec.en_US/project/recutils/utils/.deps/recdel.Po b/devspec.en_US/project/recutils/utils/.deps/recdel.Po new file mode 100755 index 0000000..634f00e --- /dev/null +++ b/devspec.en_US/project/recutils/utils/.deps/recdel.Po @@ -0,0 +1,218 @@ +recdel.o: recdel.c /usr/include/stdc-predef.h ../src/config.h \ + /usr/include/getopt.h /usr/include/ctype.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/string.h /usr/include/string.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h ../lib/sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/gettext.h \ + /usr/include/libintl.h ../lib/locale.h /usr/include/locale.h \ + /usr/include/i386-linux-gnu/bits/locale.h ../lib/xalloc.h \ + ../lib/stdint.h /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h \ + /usr/include/stdint.h /usr/include/i386-linux-gnu/bits/wchar.h \ + ../lib/limits.h /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h ../lib/xalloc-oversized.h \ + ../src/rec.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + ../lib/stdio.h /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h recutl.h ../lib/progname.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +/usr/include/getopt.h: + +/usr/include/ctype.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/gettext.h: + +/usr/include/libintl.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +../lib/xalloc.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +../lib/xalloc-oversized.h: + +../src/rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +recutl.h: + +../lib/progname.h: diff --git a/devspec.en_US/project/recutils/utils/.deps/recfix.Po b/devspec.en_US/project/recutils/utils/.deps/recfix.Po new file mode 100755 index 0000000..2688c23 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/.deps/recfix.Po @@ -0,0 +1,219 @@ +recfix.o: recfix.c /usr/include/stdc-predef.h ../src/config.h \ + /usr/include/getopt.h /usr/include/ctype.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/stdlib.h /usr/include/stdlib.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h ../lib/sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/xalloc.h \ + ../lib/stdint.h /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h \ + /usr/include/stdint.h /usr/include/i386-linux-gnu/bits/wchar.h \ + ../lib/limits.h /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h ../lib/xalloc-oversized.h \ + ../lib/gettext.h /usr/include/libintl.h ../lib/locale.h \ + /usr/include/locale.h /usr/include/i386-linux-gnu/bits/locale.h \ + ../lib/string.h /usr/include/string.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h ../src/rec.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h recutl.h ../lib/progname.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +/usr/include/getopt.h: + +/usr/include/ctype.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/xalloc.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +../lib/xalloc-oversized.h: + +../lib/gettext.h: + +/usr/include/libintl.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +../src/rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +recutl.h: + +../lib/progname.h: diff --git a/devspec.en_US/project/recutils/utils/.deps/recfmt.Po b/devspec.en_US/project/recutils/utils/.deps/recfmt.Po new file mode 100755 index 0000000..ecf2d1a --- /dev/null +++ b/devspec.en_US/project/recutils/utils/.deps/recfmt.Po @@ -0,0 +1,217 @@ +recfmt.o: recfmt.c /usr/include/stdc-predef.h ../src/config.h \ + ../lib/string.h /usr/include/string.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h /usr/include/xlocale.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h \ + /usr/include/getopt.h /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h ../lib/sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/xalloc.h \ + ../lib/stdint.h /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h \ + /usr/include/stdint.h /usr/include/i386-linux-gnu/bits/wchar.h \ + ../lib/limits.h /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h ../lib/xalloc-oversized.h \ + ../lib/regex.h ../lib/gettext.h /usr/include/libintl.h ../lib/locale.h \ + /usr/include/locale.h /usr/include/i386-linux-gnu/bits/locale.h \ + ../src/rec.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + ../lib/stdio.h /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h recutl.h ../lib/progname.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/include/getopt.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/xalloc.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +../lib/xalloc-oversized.h: + +../lib/regex.h: + +../lib/gettext.h: + +/usr/include/libintl.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +../src/rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +recutl.h: + +../lib/progname.h: diff --git a/devspec.en_US/project/recutils/utils/.deps/recinf.Po b/devspec.en_US/project/recutils/utils/.deps/recinf.Po new file mode 100755 index 0000000..9fdaf71 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/.deps/recinf.Po @@ -0,0 +1,218 @@ +recinf.o: recinf.c /usr/include/stdc-predef.h ../src/config.h \ + /usr/include/getopt.h /usr/include/ctype.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/string.h /usr/include/string.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h ../lib/sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/xalloc.h \ + ../lib/stdint.h /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h \ + /usr/include/stdint.h /usr/include/i386-linux-gnu/bits/wchar.h \ + ../lib/limits.h /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h ../lib/xalloc-oversized.h \ + ../lib/gettext.h /usr/include/libintl.h ../lib/locale.h \ + /usr/include/locale.h /usr/include/i386-linux-gnu/bits/locale.h \ + ../src/rec.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + ../lib/stdio.h /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h recutl.h ../lib/progname.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +/usr/include/getopt.h: + +/usr/include/ctype.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/xalloc.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +../lib/xalloc-oversized.h: + +../lib/gettext.h: + +/usr/include/libintl.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +../src/rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +recutl.h: + +../lib/progname.h: diff --git a/devspec.en_US/project/recutils/utils/.deps/recins.Po b/devspec.en_US/project/recutils/utils/.deps/recins.Po new file mode 100755 index 0000000..c8ecf97 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/.deps/recins.Po @@ -0,0 +1,238 @@ +recins.o: recins.c /usr/include/stdc-predef.h ../src/config.h \ + /usr/include/getopt.h /usr/include/ctype.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/string.h /usr/include/string.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h ../lib/sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/xalloc.h \ + ../lib/stdint.h /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h \ + /usr/include/stdint.h /usr/include/i386-linux-gnu/bits/wchar.h \ + ../lib/limits.h /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h ../lib/xalloc-oversized.h \ + ../lib/gettext.h /usr/include/libintl.h ../lib/locale.h \ + /usr/include/locale.h /usr/include/i386-linux-gnu/bits/locale.h \ + /usr/include/errno.h /usr/include/i386-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/i386-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/i386-linux-gnu/bits/timex.h ../lib/base64.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../src/rec.h \ + ../lib/stdio.h /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h recutl.h ../lib/progname.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +/usr/include/getopt.h: + +/usr/include/ctype.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/xalloc.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +../lib/xalloc-oversized.h: + +../lib/gettext.h: + +/usr/include/libintl.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +/usr/include/errno.h: + +/usr/include/i386-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/i386-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +../lib/base64.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../src/rec.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +recutl.h: + +../lib/progname.h: diff --git a/devspec.en_US/project/recutils/utils/.deps/recsel.Po b/devspec.en_US/project/recutils/utils/.deps/recsel.Po new file mode 100755 index 0000000..bddf15a --- /dev/null +++ b/devspec.en_US/project/recutils/utils/.deps/recsel.Po @@ -0,0 +1,218 @@ +recsel.o: recsel.c /usr/include/stdc-predef.h ../src/config.h \ + /usr/include/getopt.h /usr/include/ctype.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/string.h /usr/include/string.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h ../lib/sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/xalloc.h \ + ../lib/stdint.h /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h \ + /usr/include/stdint.h /usr/include/i386-linux-gnu/bits/wchar.h \ + ../lib/limits.h /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h ../lib/xalloc-oversized.h \ + ../lib/gettext.h /usr/include/libintl.h ../lib/locale.h \ + /usr/include/locale.h /usr/include/i386-linux-gnu/bits/locale.h \ + ../src/rec.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + ../lib/stdio.h /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h recutl.h ../lib/progname.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +/usr/include/getopt.h: + +/usr/include/ctype.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/xalloc.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +../lib/xalloc-oversized.h: + +../lib/gettext.h: + +/usr/include/libintl.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +../src/rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +recutl.h: + +../lib/progname.h: diff --git a/devspec.en_US/project/recutils/utils/.deps/recset.Po b/devspec.en_US/project/recutils/utils/.deps/recset.Po new file mode 100755 index 0000000..f6f93b8 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/.deps/recset.Po @@ -0,0 +1,218 @@ +recset.o: recset.c /usr/include/stdc-predef.h ../src/config.h \ + /usr/include/getopt.h /usr/include/ctype.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/string.h /usr/include/string.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/i386-linux-gnu/bits/string3.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h ../lib/sys/types.h \ + /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h ../lib/xalloc.h \ + ../lib/stdint.h /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h \ + /usr/include/stdint.h /usr/include/i386-linux-gnu/bits/wchar.h \ + ../lib/limits.h /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h ../lib/xalloc-oversized.h \ + ../lib/gettext.h /usr/include/libintl.h ../lib/locale.h \ + /usr/include/locale.h /usr/include/i386-linux-gnu/bits/locale.h \ + ../src/rec.h /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h \ + ../lib/stdio.h /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/fcntl.h \ + /usr/include/fcntl.h /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/stat.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h recutl.h ../lib/progname.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +/usr/include/getopt.h: + +/usr/include/ctype.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +../lib/xalloc.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +../lib/xalloc-oversized.h: + +../lib/gettext.h: + +/usr/include/libintl.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +../src/rec.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +recutl.h: + +../lib/progname.h: diff --git a/devspec.en_US/project/recutils/utils/.deps/recutl.Po b/devspec.en_US/project/recutils/utils/.deps/recutl.Po new file mode 100755 index 0000000..96a81d5 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/.deps/recutl.Po @@ -0,0 +1,256 @@ +recutl.o: recutl.c /usr/include/stdc-predef.h ../src/config.h \ + ../lib/stdlib.h /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/i386-linux-gnu/sys/cdefs.h \ + /usr/include/i386-linux-gnu/bits/wordsize.h \ + /usr/include/i386-linux-gnu/gnu/stubs.h \ + /usr/include/i386-linux-gnu/gnu/stubs-32.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stddef.h \ + /usr/include/i386-linux-gnu/bits/waitflags.h \ + /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/i386-linux-gnu/bits/endian.h \ + /usr/include/i386-linux-gnu/bits/byteswap.h \ + /usr/include/i386-linux-gnu/bits/types.h \ + /usr/include/i386-linux-gnu/bits/typesizes.h \ + /usr/include/i386-linux-gnu/bits/byteswap-16.h /usr/include/xlocale.h \ + ../lib/sys/types.h /usr/include/i386-linux-gnu/sys/types.h ../lib/time.h \ + /usr/include/time.h /usr/include/i386-linux-gnu/sys/select.h \ + /usr/include/i386-linux-gnu/bits/select.h \ + /usr/include/i386-linux-gnu/bits/sigset.h \ + /usr/include/i386-linux-gnu/bits/time.h \ + /usr/include/i386-linux-gnu/bits/select2.h \ + /usr/include/i386-linux-gnu/sys/sysmacros.h \ + /usr/include/i386-linux-gnu/bits/pthreadtypes.h ../lib/alloca.h \ + /usr/include/i386-linux-gnu/bits/stdlib-bsearch.h \ + /usr/include/i386-linux-gnu/bits/stdlib-float.h \ + /usr/include/i386-linux-gnu/bits/stdlib.h /usr/include/getopt.h \ + ../lib/stdio.h /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h ../lib/wchar.h /usr/include/wchar.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h \ + /usr/include/i386-linux-gnu/bits/stdio_lim.h \ + /usr/include/i386-linux-gnu/bits/sys_errlist.h \ + /usr/include/i386-linux-gnu/bits/stdio.h \ + /usr/include/i386-linux-gnu/bits/stdio2.h ../lib/string.h \ + /usr/include/string.h /usr/include/i386-linux-gnu/bits/string.h \ + /usr/include/i386-linux-gnu/bits/string2.h \ + /usr/include/i386-linux-gnu/bits/string3.h ../lib/closeout.h \ + /usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h ../lib/xalloc.h \ + ../lib/stdint.h /usr/lib/gcc/i686-linux-gnu/5/include/stdint.h \ + /usr/include/stdint.h /usr/include/i386-linux-gnu/bits/wchar.h \ + ../lib/limits.h /usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h \ + /usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/i386-linux-gnu/bits/posix1_lim.h \ + /usr/include/i386-linux-gnu/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/i386-linux-gnu/bits/posix2_lim.h \ + /usr/include/i386-linux-gnu/bits/xopen_lim.h ../lib/xalloc-oversized.h \ + ../lib/unistd.h /usr/include/unistd.h \ + /usr/include/i386-linux-gnu/bits/posix_opt.h \ + /usr/include/i386-linux-gnu/bits/environments.h \ + /usr/include/i386-linux-gnu/bits/confname.h \ + /usr/include/i386-linux-gnu/bits/unistd.h ../lib/locale.h \ + /usr/include/locale.h /usr/include/i386-linux-gnu/bits/locale.h \ + ../lib/gettext.h /usr/include/libintl.h ../lib/progname.h \ + ../lib/sys/stat.h /usr/include/i386-linux-gnu/bits/timex.h \ + /usr/include/i386-linux-gnu/sys/stat.h \ + /usr/include/i386-linux-gnu/bits/stat.h ../lib/readline.h ../lib/regex.h \ + ../lib/getpass.h ../lib/tmpdir.h ../lib/pathmax.h ../src/rec.h \ + ../lib/fcntl.h /usr/include/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl.h \ + /usr/include/i386-linux-gnu/bits/fcntl-linux.h \ + /usr/include/i386-linux-gnu/bits/uio.h \ + /usr/include/i386-linux-gnu/bits/fcntl2.h recutl.h ../lib/read-file.h + +/usr/include/stdc-predef.h: + +../src/config.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/i386-linux-gnu/sys/cdefs.h: + +/usr/include/i386-linux-gnu/bits/wordsize.h: + +/usr/include/i386-linux-gnu/gnu/stubs.h: + +/usr/include/i386-linux-gnu/gnu/stubs-32.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stddef.h: + +/usr/include/i386-linux-gnu/bits/waitflags.h: + +/usr/include/i386-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/i386-linux-gnu/bits/endian.h: + +/usr/include/i386-linux-gnu/bits/byteswap.h: + +/usr/include/i386-linux-gnu/bits/types.h: + +/usr/include/i386-linux-gnu/bits/typesizes.h: + +/usr/include/i386-linux-gnu/bits/byteswap-16.h: + +/usr/include/xlocale.h: + +../lib/sys/types.h: + +/usr/include/i386-linux-gnu/sys/types.h: + +../lib/time.h: + +/usr/include/time.h: + +/usr/include/i386-linux-gnu/sys/select.h: + +/usr/include/i386-linux-gnu/bits/select.h: + +/usr/include/i386-linux-gnu/bits/sigset.h: + +/usr/include/i386-linux-gnu/bits/time.h: + +/usr/include/i386-linux-gnu/bits/select2.h: + +/usr/include/i386-linux-gnu/sys/sysmacros.h: + +/usr/include/i386-linux-gnu/bits/pthreadtypes.h: + +../lib/alloca.h: + +/usr/include/i386-linux-gnu/bits/stdlib-bsearch.h: + +/usr/include/i386-linux-gnu/bits/stdlib-float.h: + +/usr/include/i386-linux-gnu/bits/stdlib.h: + +/usr/include/getopt.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +../lib/wchar.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdarg.h: + +/usr/include/i386-linux-gnu/bits/stdio_lim.h: + +/usr/include/i386-linux-gnu/bits/sys_errlist.h: + +/usr/include/i386-linux-gnu/bits/stdio.h: + +/usr/include/i386-linux-gnu/bits/stdio2.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/include/i386-linux-gnu/bits/string.h: + +/usr/include/i386-linux-gnu/bits/string2.h: + +/usr/include/i386-linux-gnu/bits/string3.h: + +../lib/closeout.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdbool.h: + +../lib/xalloc.h: + +../lib/stdint.h: + +/usr/lib/gcc/i686-linux-gnu/5/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/i386-linux-gnu/bits/wchar.h: + +../lib/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/limits.h: + +/usr/lib/gcc/i686-linux-gnu/5/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/i386-linux-gnu/bits/posix1_lim.h: + +/usr/include/i386-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/i386-linux-gnu/bits/posix2_lim.h: + +/usr/include/i386-linux-gnu/bits/xopen_lim.h: + +../lib/xalloc-oversized.h: + +../lib/unistd.h: + +/usr/include/unistd.h: + +/usr/include/i386-linux-gnu/bits/posix_opt.h: + +/usr/include/i386-linux-gnu/bits/environments.h: + +/usr/include/i386-linux-gnu/bits/confname.h: + +/usr/include/i386-linux-gnu/bits/unistd.h: + +../lib/locale.h: + +/usr/include/locale.h: + +/usr/include/i386-linux-gnu/bits/locale.h: + +../lib/gettext.h: + +/usr/include/libintl.h: + +../lib/progname.h: + +../lib/sys/stat.h: + +/usr/include/i386-linux-gnu/bits/timex.h: + +/usr/include/i386-linux-gnu/sys/stat.h: + +/usr/include/i386-linux-gnu/bits/stat.h: + +../lib/readline.h: + +../lib/regex.h: + +../lib/getpass.h: + +../lib/tmpdir.h: + +../lib/pathmax.h: + +../src/rec.h: + +../lib/fcntl.h: + +/usr/include/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl.h: + +/usr/include/i386-linux-gnu/bits/fcntl-linux.h: + +/usr/include/i386-linux-gnu/bits/uio.h: + +/usr/include/i386-linux-gnu/bits/fcntl2.h: + +recutl.h: + +../lib/read-file.h: diff --git a/devspec.en_US/project/recutils/utils/.libs/csv2rec b/devspec.en_US/project/recutils/utils/.libs/csv2rec new file mode 100755 index 0000000000000000000000000000000000000000..25a4a1ec688a2149faa698f32e5e477216d78687 GIT binary patch literal 438508 zcwW4{33wDm769CxbV36oJ>aMjBSv@Bpg|Ienvu8$NC;|#fgGF?A|wtNl9=>B&=`V~ zLE5%8Dz5IXx9*DQu6RYf69Nf%Z2%P%T@bGt1~hnt5RUoZd(}NN8QuT*{{Q>o>r}t4 z>(#sJ)vM~Bm3ak|MNt&2e{n**fY6F{lAH<YC+idGd8Uve3>H#_3k9c;NHAPYPzJ6P zsDM`jJd@yxhpPzSqE(WN*Qo%XYUYXNMgO2KUQPQ&0WYjC*m?fiA4OqpW1@^#B{Y}< znTck893=Z7e;?%G)dMhIiDn;od7u#w^o>_8z`0R*?(ft^HFt?Z&5%SHuj5b=FDrjK z<O_fBFOhdI%z*p>_(5NIS>qd9x%kGhm5atyF0S&{Us6|n$)!BcZszAtEvEM3%r;X5 zp6?Ji?Jz&%XZLq=W~G1IdhV=mHa*??$&Zt_-8>2MmYD4fhU=xl7s0sFF6fe9%FU1x z<z}BeVPoDu{dZrJw?USNHeD{eQzn$P+vf>6aqTDKu3aEs;Pfn*Y<#`qQvHcU$N5X5 z#&$DYOU?T#xT@j01+H4SRP*_AxNa4G|L-=q8sNGeu9a{#!R3Q%HC$`p(%`xaE<LJ_ z0oOfn-EYDV!1WMZe>dSr&Gd1&o`mbEsJhR>wH~hL;rbU`|2Ch$4A(1gy#`k+TpQtf zGpgQOaJ>!JJ8-=V*Cx0&!_@`Xy*qwfHRPU`p55F0qI%&)`&V40N{1!=f@fSm>&brO z#ZeW-W%g}<*?rMdV^-F_aNRd;qtCuOdHuZZ%Z4O0J^EJYi<K9?Q4sgaQ%6RO+k9li zft^1M8?$uJwVzLTtY>x4UmB|Zn%REhxi409E}VAIe%JMXy5$?!8C$QP_@}p4fAmsu zTg9k1jKjn7$9((W`)}Jes_Z`hdC%57uv571qoM9QUVCWWBS$;FyCrVYSB+=3ww!U_ zM-@l*{xpAcg|IVm`E8f3|7&mVE0bruDsLNg_MwFreScYX-JYwT8M6DK$B&2h&;IMj zX*({v;@mfX3JjfoH0Sh@9q+#1HL7#izN@4ut8&Y~y;nPM{`2>J_(A>2vR>C2x2#zj zT(bAC`%k^VUYdVT@eLJU{T!H>_vyiR|J^obg)(vJooAd~`N@PW-whU)oxSJLtoyp_ zXVt%0{z%=M-`wBe>wY79<ypDQu9`6Ky-z<s_Tb!MKOE^?tk*sE&-E`9{W#;Yp%<Mx z$Z_3=PyVv+D*NApEoHlJnU(y_XVrxjbJvb5cjPl6=3m<2$o&YovJwZvPs;=0vOxpk zC!^{Qhig?#d#6M|(!C$0f%#)%;G;49T@usZV=-`k48AiG2EsSS;FB6tJ}qL72_6*F ze{Kxyje-9b)Be>l_+1xM{(>0zg&6vM6+;gtW;`=v+7HFxzc?npAZ{Q$C?<bd4E}>+ z`ri_R@2xTQm&DZXjw%0C41Qx`@;{GhFCiv>d<;IjV)B2Cfj^AtuRmt|Z^z)vV%q;U zroH76kl+<D@^f{pJj9g$Fb1xOfxBY(J31;q1+K?q=u;lk-}y1)c{wKks~GrXOnYl$ z>faDkeoGAf`eMdEET(*SO#7$B<ojas-;K%N6F(5{i=oe$82Fi}_E3M0#nitnroU-1 za8^wJSrL%vUlo&oSqwd9#N-c((dXJ2`W8e$YQHH4-$gO<`({l3kr@2782IfN`2HC9 z_85G7V)FkSlb;iV|E8Goff#z+8B>2$On!RIc#2}$zXSN&@?L^`9l^tde4xiZfTx-8 za?n@%e<gXg3BLjIn6ooMe$<4YhW@&DO7fpf_-?4*wklCh7myz#g+~y-I}&Ay;Io8z z=uhvH<V(!*55xFUqVn$teA7RX<XvXI4*m7~N0OZ;d=8Y){W-xbZx?!?yfdo)hfv=B zsU)9omfsE;ZP4FQ6Lv!R1v@19LK7YW<)7Fs$%EoJ{2<_)6V=`n=ue7*JE6SuXKpn| z2#PQT=vM>u$u`?-gtP_PzrcjMgvdXV4=CUBYJyy6<{toja^8~UP7}TtI%?V#!S6Jr zcPK$lHOKon<fn8?@?<lA5x`G?pPokfrwb#2zBR8U$Y+}Qr(%0wNyHC?r@=VCd_pqu zA1b^A>AF?c_(lrP0e&0aNsx=o@<XxzJ(7I33GYCA0QjC}!szSf>`0Ign{Y46!`G6$ z)`XLxy!~xSe#eBDL4M7CNgiXuUqJgQQSFsu`P~tDY68S^fS>1>@S}*&CkgVUCVVBz z>!%6wGd2z%gy%J%N%H4r{wnCN1?qod!Ya_){%(T&qzU8N%M-=l36Ng{@^-G7|1#>+ zClP)ef&3=u-=b$b^uGc4?>Axez1y}+Vg2|4@>{k?>d%MzPr&%!GvOTQzYXXmoA7IB zkKRs@PZK%piqYR{D8Jy-2z`nHzYQQS7n|^@I6lzFLKE&qecTbD-&~|$6n(Ei`P&=O z@5RvGz8#VLmw_<*K;NzWLMY$!RYV@*P~JcuOH6nh+83ZF;%f(a8Uguk(7!Y@|6ypq z3E-<u_$x?rqU_I2(0&{6XPgQ5L;p1}o*5>57QpWRMEXAj^vG#TkdF;F@qzjqfInkQ z`h5xbyy~;?IZJpM>AyFE&sR9!T@iitBELX?UNYf#p}+3#i2S~Q@(TK~+JqOPz4=dM zJkKD%-izRW3bg+O<X>yTV<EqLZ$y7z1N_}l{40j`YIaBXH5K~b;ETv-_W=5yC3qp- z0Q|@@%kM#b0DXPX9RK@h@1pcqfc1NA`9fT|X9%U&6kT7ssJyoPrp0w?d2P}4lPasL z%8SZwtSlEwOK)0QT~%7Ames1Ir9$bo%SvaM<t9~@)zy{P@#=qA8G0zKDXXn3uPv=A zUoO;FEiJ38tX?SG;;mN8%W7{bttwqwzEr5KsVrSqQB%9PO0A$eOY6$j(#6nPnOcoi z>s6t=ez96wQMS0!TU#EfUr}4mdx5H@3q9ovZ!TSQBehpsUb?hQUFa#jG`hEi-a55< zDRmltdZV|ZqP$k9uTyImd26i7h(X<oDz&Vh+OI_z(GobCd|1(iEdtaD_0T-E1obKw zmsc(-ttwkuUK(zCVfE6Q#g*kSnmTo9Sq;ae6#p)+x~a6fMqON8RToXWMdg57^$N58 zO;}&3zqG2hoKutVD_>Y$yNIY<Q>J<Vqq5qCp2#2v(mgUHbwy3NfHw<0WwjO#f53w< zq3LmXW%<%l7-H$7GPTU4|6(=L+aHnHVzkNTD5lh@D=LvHAU8riAzHd<aTJp&KL+H@ zLC1@3EWHV-k7(Vvf{%w2v?^SNGLbac|I!<4)#~L7Ek0J1t2p$V>VAh&)B~Y@Atzw{ zr54e#NsDE?cs;gbainZf<>IRH0g`C3ue`o|VKjGZ%4=(@YomyVoUo`x!bPmCzcs>b zVnSI>O?lNK>Z|m|#Z_gsD?r+!m5#<OEUc`C+d6eowO6Gkt13$?%c^c#TvbtRQLt|D zt$@F&oHzY$WKn{QL<DGgElNg=V4C_8mf!)6loE~WE%HT1OKgvk94?Vuh%A`|sw^sn zs%6of;nHFeE82vZ#O1Wb2cYJJ{_h0Ok`fvdnh)%}rndT~+OnmjxfYccS3!$h)PxH7 z18svzi`K%3azx4D04<>5{+_#FrDBW&Xfbq9WeE-G-|q~Wg&B@3n$KjAP#8G=%gXAi z{+D$XDoB7xat1PNSy^RWv~3~l7sY%_7NCC|ZK-L<EbT*ts{Yulkv<NvK31uU$}*4= z&Sg>r>eJL4Vx=`qz<Q|wXjd&Bs5!r<!{VE&s)4Y1?rYq67Q$h{H3fqz;hab_;^i=< zO~WP@SCx9}$`=V06_wsP4`ONxAXt#f>g6zN;IKdmp*7%Qt*~ezXpf5X)$)a4W|rOv z^CwK5FfA?g+)UG#u()nH@j|$f%n<zXf+E)nWj9vWsseQ?l;UhBSTeY{Y8mv3<m2pI z=vi952pY!Ow^j|eT2@)*1(K95ByOM<FTD}u1Z)Y+VSu1ojm1E$Rv=VaUWJvYumJLi zgf2yOsj4O|!|w3;LYQkxODkY@EK@Jf6e?=G>O%TkN4YgCgbGf)a_{0rWeXRU*VUl~ zsR87K3bh<m18UWlFRfk%-P~A5^F(Q>)trUxjo2p=6DKF20jd^I&Xigt9ySX3P!4PX zN^4a$`X=R2wsP@Op@M{x3o~>_bXs~d%*RV>sGAD3m1sul%7G+Ap7N??e?;Os5AcB# zx?)i^R0|`iRuiWP)yOlF1M^v36uv+m8gvD=0XTq(UWAgdsCsD`uozgtNsB^fx>uA@ z!R5S^Oc0?Fxh<{mR#sx)^<|}HDhWwxInBYPr8m~q@n+x=NMwG&H4`V5UV2H!CF8>P zmxk{$Bl(fLE5f(w;k$8BMbVeVWl+2z(SQCgA$)KBwf-j#$QcyAv+@K%HcLo?On(Q{ zofK|MFzY0mZAJPW2n~d#FdS)t|L6V1QBE8^$DP2)f62VWs8pmnvCsbB{r~@}9sDl~ zrw!u!W%#e|oW+B2=j`jj{Mm@bi%&s1A2MMF!GnY&COn+rL_r+F;fL<~OCs`gs0rIC zUlL9?Vf9RGKVC>N;ZrF;PDmTV`|n<vC@0pyQW?`GLD-GyGlK9XrdPt61k+kU_!iS; zg1|7nUJwpqii<~B(<DHBj0Gjs@|aG-G9G(LXy7rKgxdtc)|4m@g0+nuQ(&b7Q&{69 zVG8U`#uV3Rn1XOQF$K(1F$G-HFdZrg>6qGZpBGXXNfxHCJj%vYf&MUsf#zZgYs)E^ z!UDVi(^Fy1hN(jkiZDG*5N2U|x**KM^bA;YVVWcei!dE22p&w&g5?*c$*{)56c%MF zrlSO*9#dHKHDH<|2u+xtD+tY)o+k)vFoi|=-IzLIjf&~{g0L1-SiC-r>4k#u2&Sp9 z=EQWgAUuQVMS`#nQ&?oafGI3~H()vj*2b7#A_yBX9V-ZLW10?Ya7;4<VKb(e3c^-Q z!4Q0iX(sR+)60P0m|hP2#`Fr{H>R){-G`|Q_>Jj!;5Vk(z;8^i5`-R1|11c<VhW4r zK1_22;W(xfKps{>IuZDf=_HV3Oml(%nC1chF@;661JiuqKc-WF|Cn9_{Kpg)-A+ue z1O8)L0Q|>vD)1lEX~2I>-N1iLrvv{nEd>5!S_J&Zv>5o0=}h21rn7<nn9jj-0FcfF z{$n~1_>bugz<*5V1OG8C#r=9n7Xbe;Ed%~zdL!^3(}lo)Ocw$FF)auFV_E_H$Mh!P zKc*hwKc<TXq0o0wW^aK3Sk-aXUQy6}Uxq><f18@XE(huNZI<VD2%*a)pl0ZNxrxUM zLg%CQc<?r`4~mD*M=kPTUZ9&`)FuzAcc6`6)GALB!W#%i?ee4``~<<MWgZMo23iP4 zZS!DgEYL(SYMlo|6M-6nQTseO2rnQQwa_yKVK>33jUG3`IRv9tdS)S<PB3bxX92<~ z1f!OEa6kb&!KkgC8iWOcQENT*2=|;s7`4~aMB^tIwb-+U#!oP6v!{i|PcUk==V2N@ z!KmGyCusZxqn3Nt(fA2QZTD=T@e_<%@7YM>Cm6Ng(?;Vb7_ES3D~+FEv<9AT8b85k z6+F9X`~;(Q@a&`U6O2~E!)W{jqqXq#(D(^PtKsRR@t;8WZsNa)<0rU<_>XWm!E1^C z2)7aZF!3MZ4Fo?z{73i+f}bG%BiuspGsJ&{n+RS<{71Nk;1`Jh2rnRb1MweWH^HwG z{}Ik1cq8#2;dFxECjKLwLU0@LA7MMen~DDj3j}W^{v+IT9N`a%|1^GryNUlaeu6(C z{?qsg-c9_c@e}+d@t?*|@IK-{ji2CeiT^Zyf*J9j#!v7;;y;a_;2z>Xji2COiT^Zy zg8PX7G=74Q6aQ)a1f!MoFd9F>Xe~WGG=757YI^!;{KpVR>*+xcD6o%Uw4xpv;ckM_ zntJRAw-Jn1)suwq27=MLdQuR6f?%|=o>YWe2u5q`Nk_PeV6?iPEQD(aM(gXzL3jbd zXoWpf5Ox!c*4X1lIEP@g%AQ#WrxT3U*|PxQ6oS!8dpro+2}Wz}sX<sE7_GLa9^syT zgwc9?nrQq4qZRk8q45)p*4)!V<0lxcy60gUKf!3-Jx|d12}UdLSx4h17_Gf$1C5_x zwECWnG=757`g_`F`~>4H;Mq#!Cm3e~PdAO9V4M{^yJ`Fc<LuzsN8=~BiTF?BC%BpT zPva+e4e_7Ge-z=niU099euB|kt7ri^H`6aE70iD|fm8B*+Y`Fwc(L|fN#S(g!6f|_ zNk7x`U0;IChQ;ALWA`1jEfG8mjwQ&RL-4qykev^z=i8j(>kBE(7$(n-SC_5)Q?{s< zt-QFo%{!fa3w{(;WAB5M8p{OZZQLFavdh&A8dI|C)ckDKdl8ffU50KSYtEvco}LFl z@ZN06JFGLI2=2w;9qeJVEs-@sTkL3@)pRw0oe9NQEHDek`XqXiu8zi}(H*{^=<PJz zqAso0PQ%Af&%$or0k_ZJrgf+;>KZ*z_IY0@q;<}kQ&_?-0g7swPIduEmX_>fj~&Nh z+B4dW@?U4qoqvN-cDw^sT?qb|acI8wHBio7G{e(&7$~y<{!B0N<UA|M>~g60Yeh>% zON*ZD?7$oA|HgReatwOHzP`j|BXQmUgw)|cecwTc2Qxz5(B-yYI$8|%0%4<Im2dBh z(>ApqI7jT>-lv{L=feCu)DcwC?&dXj@S0fBq<7O*xww<yJ(bGItRaLX!)GEC1biN8 zOq6xIe}^|A_yDlUYWHW3kefFd@Io~j56DMIbtbb<z#r5kC%YSX!>#~9>yn(f$H~Tn zsh>5+)9_1zyd;sG07A~5<(cv`5a>zx!wQa5QMyloYO_L@r4av-;?Q0t<j)CRRshfZ zZOVfQZp^#_q^&EVz}yn)N|<8a`8Fqa1W##+{-?B36(HWLxZQ(3lx<0ZX94sF0y7_2 zJ!iH@1<1`ZNaQeA<GDF~$ZebF5y0K^D3v*dm(kBgNr94^f1#46Q#*xjb~Xt}(%b?4 zg-c7nQfYR?EdA3lvvfos29#gJ%Wt&GzxVs{P~5ZLqGsqa+}8B`8;Q9P9CIKn(wz-D zN&|rwH}+DC71W~VT^f_?3Txb3`M9SX;k56j@h5i}tz;Q+`%)+Y1SMmh(*eR0x{QR3 zI%R(%+-y2MgSNisZ5{8$o=V&-p63^Wv?TG0tmOg`QAGV=uR>oarXagexrbMNua_fo zCrFz~&;Qx~)BS(ge}mP(um5-b+o6BoX2;z5QS|(u?N5qnKg8Qlw%Y&G@7v#S{_oo_ zo{2pa>AB8IeV((XTt5v@$!bN;+>9Mst`ihYbyl*~N65}-ox$tPaie)sohj_?-$J1q zw60k*3t9WGRH(U4+oJdzc$q>L{EhIyc9IL((mu0{(u}*dFeoF}nd~lMnO27PA5iTr z<Ut7=`<qqTe}K2AeO1B&{Hb2x%q|~y3Zcss|8Q(>bHUvCr8nU4{2|4^m+Amj3RyXd z5cD*Mke&&c0!`Cq&vzHH_i1dlV15hdH;&86oE#sp#hps?z2N~nS@0KVscROJl_}89 z5}{<Ko8?jQ6tI*PFrXy&5&?T1+iMMK9noShZ!|C=B0umvV^0aovuLL@pAMP8^Nc;v zh27H)lUfPu<n#~pgGbG!KjTo~*hwk~ynp5h@jitbK{V}v(teza#{6nk7{G6v-T*^s z`wf?CO7rXRT&GEBe33In>u5MHSl<%CubAEW3#T}haY32JDSGBZ$h?W7r!|xyKaCl{ zuU{>qZBZ8kYK0(&e?MW-;8mnS#vV49Qz7^a(p%dN7;~nz^8O^ZC*>Ek9b|XsL3M2t z%HHng9p0Tp#;u$h8EwH1xZdM57|JbQ@-L?Re{+ncb<!UlD8hCCa$1MKSIq>(3F{Kp z_=}0Kns1_e@VJStdbV$~r0oV}A-Q-Gv3VB}3w~<K36AA#E{nmP7QHg|1iPZ`6O^L~ zSub+JB&ME<@)$RRefpc(v9h)e2+*PRM)7CW!MkDot3Tp=29sBvPe4-sBnf)6vjKpN zHvb-_c{?W;$XklLa7jEH-b+&#_J*SF3G^XFJQyl7-ge>&awfa}V$>4u7rn;Oo5`kd zD$v6xxXyTTe?e3H@h@cXv@NWt$E54?hv8A0lhqyOuE<$H*7-LS&Saayt*E#98k``8 zcC=ZlGqaGDm@3QBFCUkHgYiyXwHXIW+>eqs)9u;+li8!o?CB-mLGTSXu=@he?lFhC zMg9$D6qa)s6#@n{lPdxg%jd-s57UD}P>T<aa>E{FUz1JZg1O6RBgp`)(^%PIOE|8C zfoL5-Xgk^qz!Q8gt&`RC@KF^xZRO**-R$v>;1)J4552*??Ae~MzH|L^M)!#Ag6+-G zE1g-Om)UNmbr1E$&H)m*3$@NAVln&WuxVjdo(9I+X3=mFOo&847<dVr4;^WJT-~Nk zhw*>NEkj}tC)3pM#Cx1)9Qui8Tt*poq--jQ4clqv{2jEFeGkA4Ac{=($ed2T9z!m1 z@cn3c$CwZd#vZ(cKW(ZP%e^C->f`FXwx;@cL7i&pxy@6GzQA>3Ef>C!Rr7nG_&%l8 z?(1Knw)y(2ygQ+hYVSwTh~Vw=ZI(0IBK{13q+fGQ`+@Y$==B|(0!YjYQ#mW6jr(lu z?q9g)>;!Te5}kC$QGPm_de*w0#!|sk!}{1Iy&gh?+$j=<hme!GLL8KJb=K}j(<6F{ zfMN#B2PJHnEb;*;{+)uk3ZSW=gvAfRtQ5>z$FoY<y@N$TAA{cFlh`fPgl1$TdtLCX z@c6dG`MPA7Q>mEh_H~HZ=@3}sWc(Zo!6=ioK~Pa?jn5wA-41zJVoMy9fO>_@W);dm zj^m?Npe)G8YutY~jZ>N_!QLx;o3jVlW5DwVJ}fY{pK@c{z-8pcLtI9dgXLkH4xtN< z{x_%ec|ZSer#Rw&Jc*B^;evs12?><ybU?4Sb7gj!y{`Jn($6J;rJH?y5%97@>*3-* z%rf8Mc?BI<-olZCyoIa7Eu=v&pxciHtq1L>3T=FtTg~DvV8y_`|I@Vn6S#c{{v~?- z1f-Oj`css(?M?lI!MG3Js<gI6jfdx-Lit1fAfMZZBw$%O*n&)BlIUhx7m`D)b)qwu z>Sh}`mQ5=iLZ>uJP;b-olhAXJ#fU%gBgah!EWi$Th^~%0r_$;e1-N;GPzWlPmatJ~ zvHynUo%nszPa(@2xf^lLPts>58&gDWT9TG|hc#i7{OHqU|2Cx=UlVG&3KztJw?Hqo z>D5WDpmOI1YEdrH^OHlF53|w(I0erNEtlEm1L!&xE`i|<rruI~`8F}^3xw&>^k+f+ zF8Hq~{E&}HM~N|Gfe>?VfGMJvPYr<?A<NxqXEJo`YZKe|4RME-C$qovF=_e9f!*LZ zu~QGC^P}a<ihoiFVVE-lF1XV#!<D$c(!LRA`x($%HudK3RdRdS+kp4%IfcL`w`m5y zNJZ{AVD;YwP4fA>QUa=7g)T#Q-kvAny!|A$-IeR4?LkOoGqqvb37(?}Kneo>Hn>YR zv+ZVzZ3*gGmILEv?;Nl^t}dndRMGTz!HT4pF!AEBG1^M(!9awd_`l#x@$|eVfeSQr zj3~^#!DDYlVAL3@0>1IQ;02~Xj2^np?b+~#Bzw}KR52K{zfidp7xP{{(}O#jOT<F< zWEht%-mUst8nJ0rV8)UZ|6k#5)n=qkM1Dx#c8wOv3hx~)lAvz^qQAgdTo6DnpxDh$ z{h5pEy{MRLO#TPBVjkg|7&sHy=XNg<OW1eRl0D$SCt>eUKbwLqeau?Fn)SL+AmRdO zzqr4M>#a$4vFSF4;Jr$pB!NMgj9zmckbEQ~rynJE+Ch@su1TDYlZcC8ccSM1&PfjQ z371Ru7MHt8lA7}*29uy^1&vRrPGWll+@Xkvhoi}+{fp6rjk%$5B=3L?qFjYCTMGCG z-(Y<KYBJvYA-f))=<&gbKWWAnx;ep4{=f<L8Mi3mg?%5--ur_|nD2w+O44F|4j~mO zo7_)jU$M%*31!(oeu`8WO%;;n22$W5+B<dv5J@<)8JOI%C{7Tf<3E&-2XGU1LH?SS z1u^-cPHYw!{8b$rAs>0*`xYnUbhiHtQ@qtvo8H1|f_grC2m8)S@t&pox@jF{gOVGq zlHTh;@H*UvukAMAVFIku*un2HxTgCS#aXUL77@PrOwigcwiMbk9{BJ!@<3<K2&F@n z!NijkBLUB>BSwOoz4jgYpH#RT3YYMbNKcg6PjtzOvY~xocOJw6{m_8}N(Q$t-G4}F zzJsgflCi~XdBB>6W*Kf#+YZZd+vtGrXkz0Oqo&_@%hnJIy@6*Me)*^JP`mcAa(}z_ zbJqLbi(sO(8E-i-8_xhk(>5%!2?{{=P{SkXKIl87r5XtsMbJ`pA0yauBRSnd>4xtU zq|p^9<{qFCdz#dvWo8LXLm6#vps2I=f;f(IU>w>JU;mI_o>yh9M>`#f%<2NP{(|zm zz=LILspzkpM1hS4cA$H=e{WNNv3Ii4>K5s~$a@{!$I<;{@73Tfj`6yh>ZL62xTg99 z!8@ku&kGD+QUek>8U8{yO5P?@ubTSvy|!>u6V)>e--T3iH2n322G50}fL04Qks01^ zpzSR0SI~C4cNerh&bz&-J~7?<K~w!8!Mla}Nuk=#*nWy<YP*1gTMpoG&fkO_Y(O_2 zmNt(-wuY`&fioE%rNW~p1adzM;Px4QJ0<LsR%W!ZKYvGIi6Y3y^%+b66GZqk3GasC zA4S;C!0tQAzT`SH$-wLreQ!JQ<%S{fC>I~C$#v!!zKa{EwOL@W7eSh?+&Nz++nWSy zNh}}V{BRQnSodMeB4)r%j+k)>yFf><tC`B7G8s*yd2^X$r=iUS8NC2zYkk@gNM%kB z*V|5v)hiEf^6@)ZL)L(3Ht$fHZ-W#h(g`!?gY72Dams^j&0Ce`Ovr0$fbl8KqX!X^ zPOAYUd64#BZ-%c=T$Z+`$eFUHz-i~vmsBv!sci9gq#a5t<SDI?39~C!biK+^xnp-C zHJA*QCxSJH`VO%VP<CPyaAmuxo%a2vmQf?v+(gBn&GE{CdGaG0ab%)MeoiiSCS*4P zsqM<0zs1wglHy-o{Q^?-d&}Oxfn*Gi723=JCog4_;@_A6^Z$-4AiT2rQ-Nxy`g_$g zl~!0SX}jB40yu)Yv|4$3w{i!*$pTnR6pVaP@qYtQR*`eqvQ$^4Q(h*6W9aCV#$IR? zi>@MgFqj_XjukHi$Dbr;Jd~@mQPY^WCV8yVsyZk5wuo9+^EL|VgEOP`z+ff>Trm4Z z{434`5!e)A=tF~np>1B-5BF!GS+&Nuwk>0uIjB1?h73-*W{htI&Z3a~#@c9ltle}T zQpEqf6z0Cp#n+y(%_RGkgQF|7LF2>ft~3Xpivv%+(8v>AxioNmkeezxjl8%4PvU?S z@kk1BK+SnT0U&AM%Wxcxu-JGb62y<22sj>d6t_X4K=DZ)F4$NGMFLYo1L}d_8xfZ~ z<Otr{fmqB7u>a9fEW-!6qXF~cxB*Y%pp1!mQKaVZc~;ZL5>aU`fo_dyqU&xh@vA4J z3W3=Hj=Mzd^EJSCUm(5d=wM(AWFZd9okM}J#<g*-f=F+}<I;^K@fq9RM5%>N?dgFz zC&+GRYztftcP(K~G@l0zp+x00&jWTh2SLf2!SnwHQXnbPEim&$IL@)L0_l|$rt`*S z2+LtO((cQNVJJcIKM76ra%(85=Nb8NF0S0mPRH>zHMqp9f$BhNE4~5}7<lG*q+k5F zLO?$e?pH<lwiCbaw>A-LlfGu`K%*-L=11DG%27Vb`3~9+Z}Bxai$En`LkAyhJv$CY z1l8QGqgzjJmMgDI(<|E9Fs<G9wU||ay5Wu=Ak)y;FULY5G`<+f#eH1MqN@e8!U5~B zpk#?acIuk{k{zB0w#wC`G(RAls~|K<#s;#|9Z;5?%gfC&%QedwB_`qYUJPzlfzle+ z+@_`==OgPY*H6ph*GQv5FO*j4B2e-l(W6nFMJ3etiM@Q)1jbWSotZRm&^|7;tJdHg zVoe?yhaz)E;6o@AHNjBDm{|tj;xn2qv}*kAs7Vnj3uMu(ZWRA?o~MZZkUEHTS-8+@ zU3iDu{6Cw)0)LJ)^%oH1NGs==ttjGvR-({~$AL6BWo>(O(_#8GZ&T0YHUyV+N-i&> z@dU$${V?I+=Ep4HX0!7Je7f(1JM=2unh9=Y03w;}F^X&>iz>~n4aJXd@B214kat$m zg7X?qN&?MjDS<_1I1`^YWoO|;3{$V)-xsmch&>1$_?T-qrEJo+E6snB!d7c}BHc~` zTZXS)!|eokdL%)h9hC19XeQ0YU4qXO!ZJJrn#@&JKXru1me`$p!+Jxw1wQTz>s!0% z+OGKX;?Q_BIJ5XfUWv1x_6z%Q4=f`5ZRUj3CssPMaDHare_>6{&8vVP+EMUi=Rv1# zP`@-$S^dxB)N@+K4lq41zo$TZGEL*+F>RMNj{>TW0KPzH;$;r^v;m5^31`*1RM(Ho zq)zE#GR~hZOX$qKn44vOA2pTma`TMaMc2t?cJ2MP1Bu!$Ust-;zozJ7(YQSh9-oSj z<KgiSgRGo5-`9hn4PSe@3!R76c=+Kx6f<ZrevR#7v}~k+HqqB6l3xRef!WCCQ|d%P z9cuLr<#;3GfTCJI4nSFbVLY`JI|$Pqn8>}!;C-~-HYau9YI+wEM(E0+U<Ax}ai;sC z0in^D;bRR5ul)ze>yB5QX((mDpmf8Qu5%F|-Q%7P4sR|zokA94Pm;Ni(zYnglW>a) zw-pZJ@~ZD7j5JGWzBewK2_5IboC5O*?i2OF-1fx@vK+~V;}WAFT@*KIec&HtnS4}Q zMIW1+eXernQzu9<lfZ3?fBVjLjX<j(Dq6J9QQV_cH8AIRDC&HNIk!MRBTz-U#K4um zMduHg3#aym<yvWlCjs1v4$uE!SCeVln*qgI2FO|S0X(y@9Z?B<aV)xhUhi8Vm5h5h z7l@?&xfyN#ZHhmMLox^pde}565$`f~AdQJRfo})kOL|`q3#td(0<(L6r}SETV9tR4 z(V5ozQB_jFpv!@0e&hBd?71A_wVY539GD#Cj{m|PAe9LSKG=38JX&_XwpD2z43;k$ zwM;uOnz?qNAfM{nghFg@-sb&L`_%Q5#+20=yf!*N0yS#ViSRI$HYHH-8(*tiF8=Dz z`Lx65{y+t=`v1ZMoQHHnFR)!%{e?($;eMdD73mA)lLJqlq*(;)lka#KtMmW^vYBfK zG%;vumSr`$1a%xVl7^N==YAHTmJ+m?{LhXT)FGg*hGURx`|=*(R~n87ypdVQNHD1( z0IxZQ9zwEcT(`IB=-JAh*Mba@jP2aNYJdB50TkkjBjM?3tjOK9u*-P$?_9?7e&;g6 zllTEo;;+`ad|M>+12f1)5BPo=C>u2AaaOymi8pW>?I_FEj0IPgIYTW;h@Ps7oQr6> z`iVBcfPFYeuBFD|c>x>LLz8Dgpy)_+#uWDBPn0nwun;n$mGrf~u)Cl{tw*Eg;oA;} zLhN05itL1<GO_gI<9v1w+-IKG!1#*R$<E({>vR9hxIRzQim0@WJ-&+?v+IJtSAYIj zk?+7MYw&{*<6pruiw&i#P681W<=*Q7G9JKli$<g9`qYq4kQr!>=RsC?G0U)%rPH=( zK5R;V02|Qyz&9J+Z4`YfwC{^|FA-+2!Px6tn2E7HAT-b~2ji*@zX^JdWLzujWA)_{ zVCeL16>(OF0#ib@Y3Q_tYE!3c2i#C?Rwy0yL+b$oq%xHU&0SlT&ow-v;ll%ku1;;N zYNLqiKX#J>`Ed9C=rBMlU&13~$OP>`s0IyrL8t~7!)YOI*9SI#8gE|D<qJqH%eOgA z>lv^wBxCq&jDiC{jsv&I;OpZf)ruu8PY8U6vDFG70lQ_mAeiy5&nf=3fd};PL`K4A zz{gar3kCvn8HL(07M5PZ_5hW&u~vAhh2ipW)u!j6E+8iv_fz>cC3ll9;I;u9N%{I8 z<f9bWW6xs&HcZAEvw0004BsAAOMBn<^*L<^U~#^~P+MeZ#G#MUcJE{vn=lTuU);Gr z;|mOVS@GTB2ScHRq1afFQzE0(M2+oGa=Z13l6I{WbAE}f*p1Zq{6(aOL==Zkj90K0 z)K5Y*I{iDk1boXywfncJHqD)?O-bWnWj5rqX!{Q2C4xGs(Pn5gilpqZPk_u>T8A+i zcSl0Y(n8Bp-JxYt=yKF`oSmWXO!N)dsfS1cwDB0t8@NBkx^`jX7rw~jm*B8P_i^PX z6!p#0w&<WbGRU(8v)c}^HA5#$;a)R#%tYODXS7k@Zs^<19tYZCz!Pk#Z?j_t=xq`k zZxe*sb9g1KV<wb!L~1}ksci8<vK>zDIA{5{f!L`-;0X@MrpX{XxDm*=l?vGqLVn4= z5qUIqNlOIyi*8La8x`WA>w)Jn-bGWyc6^5QF8wzb+UHT9^|w&seJ8}mQPJlY)FYCw zQ)K6UN;>HJ(R)D8mw=(DqCILd#g`?>>>^dcqwv}*$GOrNuizus5p@I|WcV-8QhViB zp4a8WKCwpBHW|Ap5vBL<|Kjrg1_p1r_-ZJBAoGDhe^h*j^(SEYo6Yh_p_t-t_D9Q8 zA^YM}9QT#~!g1R<z1V7tPA!G(P0Alh`8b0onPu*`$_zMvg!?PG&`*&u&xxu(D;y8a z&S=wivqu8t3D7vSp9=xU1uT`0vPB>G@+SH==c4fcYZM6h|C9E!dHdKjEV8KiZAbrS z^HZ^T&e$+L-v0#0d(jKA<2~;W$6Lt$M&<jT56fFrovFW*H&ibV)!0fka>MxNWVGp| zW?+zuXcqG|$MYFX_pRY~NxJWDewVEKTKHXx?pw?6oVxE}ewV8I9^rRsy6*{om#+Js z;dhz3ZymqO(tR)RyX+;R@-9%z%?~<k=_dzjk=74X&2%z9Khp(-&$bQ{4DxNxp`C!i zXNy8)KZ@P86GwMoJ<$)_OmZ&?k@g8;3P$#S3fUYg|0b2UFS(LRwnoX{m6ZQC-X71V zGB2O}BYq%#Wvbz!8a3daG{bZKZ705i6CIt`_OW3<z%V5z*kxn@c^$dreb~^8L0gS( z4*Hsq;v}7<VKhINHUMTpngZ!OG)|B%fHW0S^qtZm^`M=_u9k>Pt^~49DPdLUNO7l^ zYd}8|H}!}mpjK1>iCaU&ec`OI0=#F9FLeiwZ_RW6TYeV&|1UqllX-Y?`AIlR@`LfC z1$>Z`djGcsb&U+GVIjMAJC1JsIvkyYBquHUV*SMT)VX|rxsZ*d^0%)0BmMjL@AR*b z9q7jL*Yfs5e8(VsL7l%1XrJMSQdey{Yh9E*Jq<rT7PhBLej8{{@1ph(JR562Uj85U zV-A&nlb7e3Lh^mb|0sVEmA~uRXnP&j7u_-NxIg#Dj{FC!%!Ded4&v$<bOKLqnDHtY z35vJfIvc!}G$mt)n^k{^&DxA2XUYusl6Y47eu#%{>K!QK=i^s{uM(QjZO#<&yRa!V zK^C*`t%7)LK^5tkoQt0aI1y5s@xyBx+s?FhksaCY`sf|h1!W=w1{Tj`+dncZE6w<& zGp$Ptz%V64x?=QUj77+}XX)TQ=r*U=>1tQkv8O)(b!ykKe<*``N(W_`zSV3ES?A3* zibJl?Y8RubcS=_XTDsN;Tx>8!Qt^L`?B0y0VoZPZI<s9(a%%Xl3QpS>encJ#YODi2 zVKJjE_=f2pp7jCkl;i%X)*k%Om@J|zJ(C^#&>B@<U*PueJ_DB#JIgdFwnJI-+DTgT z6u|5@#nrFe`wxH{WLJ;k`#ao??mTmsFC;Xa**Jo|2$i}7>?)%za2d+L$&<?iMwJ*? z1|{Lyx$ulFJ|oIL)B5Q%_T5J)5qbYWA#zT4vto-%>U<1pZYgoIO?Wc5lU)aWXk9S= zG_-NaY;Kpu+QWDjGFjU?;C!dQR~?}bLMG&*9XRm;XA^KEW1BW8_;JRzf#(TX`#$ie z-+G4pY1vrQx{^pM1qwr?R_sa4|9d#!W95&d?I)NYM$%AjeTKGbK~zDG`Jr(zKN;Id zZg+9wX6*2{d55F*HYGO)L;sti?5@`BP4I25pWDGQPY07^t~c51A7U40JQMbZfj#I+ z=fG$OH~ksJ2G2(|?|26zZN@7%1CENnU7#3ib3f<uOm?3|V{MbylhM|Rr-O{#gh68W zc(AF;opi$epoDI*1O4D^_TrXMXx5yPVhm0tfp@61wi(Uw4J+}?OK6FR-f=vvA!o4F zG{BUMHftRf=C?5=)Re7^rDK5Dqv*Xm=mWaqni;Tq2ZQt_thdWD&a$sBL7B{Od-rPO zfX};<94a@vf3qbb!-2Oly8}e5xecp$hx<e7=~^GFrbp^fu=u+IGBL>T)j$KrTlkkv zqkKBL@Fs=R{rHM5V_hi57$?|>h9Gc7C=zdDA5iA$;mnaC{w9!V-+()3et_Ir@e~<E z;7)Q0tLQXw^-BI;^!8{ag)hB<{ePeAKNZJ#ll{mdr$cGk1Xk@dSOxlbc!$w=pR#N! z!<X~I@7J*PRDZ}**8Gvo>cf^A&!aPq3Iv|y>pfV{U?+fv1n8vTX*oChaceYw=U7LI zR5~x^W?eiR*-40>5hq0E$BU@>yPmZ0cL4rL9RD*p{v+tT5n@&q9>XUX=&<DZhi%wI z{*!#E(*Q0&B~1RfVI9)17u0bXJ2n;-7Z)Gtb+y+`)wXVDMu8}5*JFpuiyu#)$><#h zQ`ERN`?q;VKsC@PA!FN-UOf2TF1Bl1k9<$40b=!%e~0=eyUs);?9a2=gv}dIaC#MS zv+CcWi|Tn-6#^Q|$7-G1e>8Fv(UNMSdj@-mrf52b?QeS*`@|)5TYX|iFKFcF><1xC zFKGYhR&0Ov6H)TfNiQwfN|p$2cI_6cF+>Z>Z=>>~O?(QRSjQ0_N&P5J<TH?y)7f!L z(o{>z@T>6A=UdqdYVY&Mt^QL=*krSRoW9*`YrBO3o=;=fQ2FN`kHWWPGaknBwTbQ$ zwmuXoU4izGir-4bZH8~nO6%y;VQAJk4G%HtBix1$&n;2BYIFw~3-%HWocjm6y0D2W z9!LM+_@Jnl5e^Q*sl{k^CgDMo7o2vP_Rx~>i@><Yg^%g|1f#*3I+Kmv%g;TSv-c`! zq!<s<(ZmtAi74gj1Qy$tU*YPfP}U6g#THJ%-ui3wyQxRZ825OKS8YaoqU6lg|1O#V z^%M4T2N@=eDnW}$GuVC55Jr;h!PnV?9cVT1gO5;zY7{g4bT8)qmCdw^f@wc+F7e4J zVW)}5KRS^f7d~d$`*hHc%&?<vqa*$3YNFGd?e8sCa(hbH%fv;yukVD`wJaUO6Cf0+ zK6+8K^)Pw^=qmIzZ}Wng$rH3h{vxM&&W79&>oo(fY$+FeL9tNf|3Uu=xw{@E{Rc!G z_)3j=Y7V{4bhhp%94Kf#w~t4+ko;2xv_&ah=K0jfL<y5~mw8wfkWSWL!Pd~7zTC~; z?7+7qFK17^%jXCmebym;$q;&nfxpPm`<|%<D=rL9ik$m=93?O}5wnz5dsF`@YC=>0 z5U;J1#6*Ib)4L1ZvIxV6aLERD@dx(OFi~j1c-Nd%*PN`zJiS&@T9ZeuN%Gz578{4_ zwW;H4lhwict+Frs^^kf^)3JGKdegDF>cXaDH>gvaj?GtBG#wk`P4CQ+PUplP)B^W$ z8Eq8v;{MmyqN?cErW&)w@pICZyYam?C?oQh4zQTH@0lZ=#@jH@MbAk!>csK2=?&*& z@lIhb&;3WF{F(g81HAkUK)z_C*wlaJ8oTOh>c2`YXzIVjy9o-8+(<F<n{e9G=A`nX zLqu$Mjhz|^Tt`zP()DXey$5ne@jBzI=kO?*Kf<q84A?)Co9dH>tBDzO3|)6ST(ENS z9&Va4QiezTJbJcXk0A$~PTY7H5kw-zaOCLuNru#-;kqXWW-sNQ8%1idh<0@{4xz{z zQd9fBI9w?braSkc<9DRH0+LZ$w{IUt`<!@#WgNjjne@pXtTf|C9kM00fOK$+=<-O) zJp%6mI+XRyb^0K~(WA6Zl(J>-M<6Lq|2B0yim)rryUn*bn_Pl{?-w;Vi$dzZaM-wk ztX0BVw$hmrKT9>FWgJm^@YD!>d>xLa+l~wB^6}%mzxYm^vvP>?`lJzl7=!w)p6?*@ zpDW9{-~!Sp&G-`=I1Ay5WFCemlQAg3T2Gp~5B^?x2v6&JX=;XaJ~sMS<#ixO#krG4 znEiPze04-HGX8rpMuOfly`{080sVL!khi8Z<2OW*0OR8n|7Pkno5cBsj&Logb7Z%5 z{<?Uk;kX~qbm}=O?&U*&$%dmvpD4R_ubiRJu(@`w9Piq#tZj4c1Ya0D%#1xS!HGKt zZ}JYc!m7{?5Hg8x5CpcJh>ADTo19VQ-a?K9JEP)Vcs{g4`<S1y9;|iHjrWK?NrnV> z0SZe(ySOv-r-~N+RPYkc0ra4-<m&ML2dTX?TtwZAIypC^4bOUFf6)HN*#52o4V@S6 zA9_Q#Up*Jw>4>!RgBkYL<FzjUJPq-ZU7OUOp!O&Hp*P6;8L<AQ`Qh0%w5Wp~=Kd4R z==i#&uMw<L&MF-L)yq9b+B*W5mEzDcnVopoaucR%lVyFf4es!j-(ol0AI=)5O|~^P zUMF}*XpK&A4@|~d=k#ZWmPzc@aOnhXvK0IbifzONpcO9$>;@BdiyyN5PrF_sxlUKl z*C)%ywW2l^eHw>mYuU&{&C-DPg?*dQ%QB=9?fc`k#2JYDgm9N55cd)(xG`!!y)F25 zOneHvWX<m(65sws#Bh{DPo!z31YAIG9^j#6`6fr(*kwq_u0({pAOn&m5_|GZvtQ^{ zovCF-iUU1d-D(LmG(PM0asC}fLCbMt*6~I=$j@+JK+>kmt`EGwX6(?i%~3+5!3Rl> zZ7se7q7D^Y|7rL+_+RJ_(e6sbzkzDBoem^+`@VSXbT<xv;yc#xWpns<!OA)>6xokt zC$_^H^~i%r@KhLm4w^s>6*3p!_tQ({uE{vR!JKbM57G^WTuNZ#eCLhu7?W@*rCyP- z2gXxnUpXw8O?>YVUGwF}bPyT+3|)G-H+PdHdjoujQsHK&xy`#99EJgMfd0py@^i_E zrx@8S`Wdd7QsZfQKFNThWwxM;f%1JrhspCa<oS%yax|RD?7FwDVLzkg%UZRhpAp=Q z{*l%NBmT!b$linpxdwRBT^^@0)#KD_l3l+wUdDP~!{~nSG~h>)zFg96y7(FN;`(&W zF!fAb(U<3l+vBGt`FoYt!RnVvt8G~DGwnC6I$5hu@eO!i*zC`VuLx{<a4jwJ_2tRY zaa=t=-IWjB=R1+CF5IfOEB9aw%gD$0ZIZ#`vdJ_LSAss20#WSxOvmWo{CjZP!zoYk zZ-W~8%p~#W_%qOvD#jNg@wkGM{eU4pH(B`p6U&S6pbIR$mFBOpMyYH}6*b2zVyEly z?R9t_>f^3l{W#hI?_n3{!b%;OQE9%=sVz^|mZvEG9YW;P7vVKX?1|4$0yjy|&jE43 z_We%?bSMG$EcsiITB!s2)27)YT{aln$JmQ<F9v&pYpr=D-)$5*({R!r8^Tx+LP1-L zYm0IZ?t&o=6tNwc0MyTbYp7l-i5+Wf<JQ>XV4>m4cdy(T_!VaxPF`aUpP6ur)TRMp zXF3AT5FUMS*b!R_*sv2)%zh2&$MUyOT6W!!>kE3}>;)$dEzHCQU}9dnD-W2M=WM$D zT0!?>fL-zq)vwRN*UzS+S8#jEcyJmU#%PdvdkR#UhjF{JdE72PVL;q26934v8wC`G z#~>7L!poykLTq}mUBBL;;dW?oj)wb+I~4zo;6dqmNn&4o9)-&>G-qBZa5>mlzkno6 z36X*q;4Y@!cl5Y&XBmdwi=64Wpn)b+*kv2Jvka?QtsT2_ZBm-gj;8<*h+~#}I$$*g z-K^>C=*w1FS!;)K{(oX?c@oBga1}51xY<8mp)yUk7m!D1*s>J=bd0?JM=zEsC_P!! zY%j;FP7D+pmx56<{aavVXIJhWraT7TILYl6wxsyi0p#jb4E)6epcHy&2H&)BLYfI_ zYA}oYuf>x1GX{;=NI+MoXq+x>ToVU~0t!m2l&(oH`#MFCMR4QJ=Y-U+M>5LdR;4vN z{YY06Amlv@*Bd_b^AcaZY+4zL&i;)&Kb$X$9U7=0aH@f}U~GCG3R#wxOS{*$ndo}i z#h=CP({+xo!_6lAjFCzshkIhc75oSow2NH9xN#bLyp>bBz?tl7SDNu7W<X@zRd5qK zz=`DrD_-Jj)h@+9kw@iVm^0A<6?>+;*%@JurRaG`{v;T<=2&ACT@iA9rWk!EBj=2P zB0qQKZm{V86>8M=ZvQq6QY-g7h;+I>35J=1t||=LDIUcaOaPy3NYMdJj=!Go*i^!# z0oY}10}`bL6URdfx5HX8QvvE<x+eD&Jd6nslN-LHm=3gMdY2g9PYR61^WNm;=Oy8Y zu9v{%<Owsy!|v%U_oc8922w+j_!}%|!IdTDY{=8|P!4dsSQ9LVutvHRxQ}m71MQ`| z6#of+x-U~lZUNJZ9f1S<kxe@ixbt{yE-JGZlsRw-W|7bXKS(%G?*Fxc&<ez3z@)*M z96{z5KnC@cOlDpVz6FWD3j<APhu1jLxqMe6^SVUDuK`x<z%1aB;(ztn?~r`*n0d}N z&!+u6x*wN4{hFf%C$0Cry@9pALp<Qc56qy$KN(#CDN)-*Mkdec+O+%=z1Rl!q`3nq zh?scK@b|(pvlv`DO}c}0(%ajaS0M5cPZxX86ri%Z+rN)vufK@2K*36;lVm_`F9y_U zvw`GI`?K$;xa>SU6b5J|EBTwmK27=y>Q9$M-$~?{|M%ho<afHbb^Ps_T3-6?@#6Ja zKtA-*(AdT|(3YnZcoGj0bO!zg3CjvmR3{sI47`Khet}bhwG+iAhrVQaEO|IDNs1p| z1R>ueumpFFfq>Z?0;^B*sUdK)X>cO(u*I+8Y_RR_h<}QQZYDdgf|BPbcfOAk#ME@L z4SW*UR%Kedt6M49<St>WtgnxF3-!s1z%e;bFL9#d;&>2!xEXHt&?{yMr5X2pwaJT` z8m9>A#ps$V_h2{*6wFR8Z(!k3S|)2f?5{^~el%mSSajt9eJV^l>Oy^fx@$g6O7ori z<YZUJ%7oxd$k9(1H^rBL+>L-~b2vDJ=8W0l-LK70*5-o;Bcba~^E%v{ei`@Up}#kJ zvA^Iw1cT(`MxWLZwAO3*{+ZUvCcTPOdRjL<ERUY!bak&xA3r($_KS^t+EglG|2}Dv zB++%E;ZHaU+raq`5$|f)kJY{kc7Z=uvWOpHW57_OXuU)s!O5UzTB8S=3cfY)JOttL z`YW{mq4O=rbavs(7!rcj$f%d`YgynVp9VLxL(6Q;1~<6fE0Kw$sOo_B3fU5B?ESlV z{Ms$8+8+`m!PlP%eCm%^htYRMqu*DD4qLg<Q5K)qbOC|D4IyhIEm9s0p0CZp?hA3g z+M>@JnCAz-dztpX2#GX|H8e`DKE;Q>gsG3x935IghXj7Rp15jJw-geNhx9}MjpXi( zwx*+ruv%_9nxNJxt%Zs0`y}7~p9XiYnS>?4O*i!qS6kqGPj-MQ>B63^gV<d;GG`3W zPx?Q}cZ*ty?Ax3c<qyMv8s~}1<86VJA=+P&uD+_cxcD@jB$Ycc@U8XH3yMX~Bt#8& z0xoBb8^VgQ8EKVvg40UY5{r>*^Ec4J$&}f%0JO7d8))}FS=%yej*<OF`wwxj_H?i; zUdlOp7Jx}?^oFpH18ep_`wyvCq9()rrGDHOO2Q`83v`^qVReHuK$Tr<w9$dX$r3ID z8yx}TB-g`S%PB}^TfzL{CurJUL@`4*q4h;FzsZ{9Wb0p~ZuxG|-jgx>FP>?n;p=xO zxE<PO+J7*DE9j1Hy`V?ZcC+Jj3_YYS(1#k1Em&~X4<T@*+JBH?5(eCcOYi^~J`^Ag zASjnTTrU_c>D5wuKyE)I4-UZXs;{Zm*Yc|Gu=L=7HVuk46%0?5^g=s*MS(|fW6mRj zet!h0?ZjiN=-1$tZrJ|Yv_g`U<{x?V%Vs#{8rif`)N>r@0~wAi{Z<LL6EDKU^&wH8 zAuG-JLu&d+qiCsMmWD|Hy(d836ejW;V9n<ym({QlX$)ytZ%!g~_o6@t7w>r%($Veu zO1rVRFF1<qkjP+}EcWnncbet!$7#nWKjhu7PeEF68n_Cax!!J&C0Z}BW7fAN)QMo* zZTPJi9Z&R5cIdfDvOY`FdbBSXzIF#}(6-=lIT=sZq{L4KAMTy-mnr;TpERcxO98ka zT40{f`GO5M+vrqx<6aEDD?sh!Lp$Cu7H^}JAJ)DA<O=Z8`dGbXHI?SsxMq3`!x`#Q zLBA3vU$JNWJZFwcKCkQwD*g|U4-@dK0XD6_oyq6pum{8HUfYf6ur(*l!6?lbr;V?3 zaO>Rjqcxc3aUs(OIu_x!f5b^TT99Kivgzk~wIB85hmG8&g7y(cD!D%~0bRh{u3S6k zCxd|}Mf%%wk~GzZrgVZ$cVuaf4aM5Ws4Iczd8p6^9q5jSHOD%bYw#1p7)o-pLO_l_ zyp_?0FBIXH8tLNi&d;L#{}<VRKezuiN$i3bXaaDuvtK|<mui&YM+;ot>KUlRH8M+h zf#!o$cKms6x#2O`nIE60dg<)D=V{_dV_!bc=ZjCC|Ks_B`oDtuf2i5)UuOU0?bz6( zym^e8sl%ufiD_n+G@+aJ{<jyfh2mzuql23qDPXO^RGpa-3MOE@B+-!iz*S^(!7p$% z%FBP`C})H+4zVksMSUuMzX!a68C(u0C-E;kfXT{&`H%Mrvu*U#(0cQ!Bl>B8KlN=9 zeO)$JmAw2F>dL{o*VCwySl4=@PBMFUJ(BTq*18_aoI*mY&gshK-xD$Q!Ip8za9o2i zo<aV$#w2ro%!lRKI_QI4iEF&ED``B-Wp*?64&s5YhbJS`Cg;{BK-<CBumkk)uA$Dd zjR%_igeb7pMj7er!@O)o|B9Wno-^+ZGh@JxFpmfF_5bs<{=b7$e+s@(Zwv1?ZBy>S z4~JNB3lv!JYBPHECOWs5)&eVa|Bl9s%yH#8aEi~~06u+axt%@o9H5ZxWNV+}xO(j? zzeEJR4z}t!@}fD>EWxaN4r%O_*}~_n!4$KZ&k;?M=#_aNEf8(42@T4<Ri@f@<>0;$ zOwE-78KmTJ+=j;Y(0Ux-kyYfYL1)+K_Ke<)Ls}Q$JvPh_$OC?a)N}{?ejQ)|j{tzh zQxf}Z9mjs`%3UU#Hm@^DYDIxf`e1x@mNb5jq@H3%r_FU*P&900MS>$qE^1^wdzfA; z>zTuR0m*d)OmtB6?^*FZ->9<U=l(Wmv2nJ3sZk%w*yB1@H_DL4Z)f9es~hb>C-@hR z`0WQ=w!bu7pmn=CYJ0}p9y2D1^p)1R{JRNYr}`rCU}KJ`bp>A!`)?+aG2cJ3(c%;r zsq>tvMwJXk$KpTuVoCaBN&8$oz)C~(0Yg9Ty6A%pX}8kqmc|!3)4hB{CQY46VSlzd zV43?;BYCc#?`Z!fPTUR7C205!zWzAxI%t=>7qn*^s*y@&GW=dVeX`4Y2~-hx2k(GY zV)|h3#k|oBt5NUB2>#}b6h5CF#USGIc)9TQGxZS>|9jqDl9qfIuFU0zpXYWIl7P>{ z7o*%sP5qKOwW)u&I+%a*4EaVl_cYy_G~9bYzt*A809bQNYMd6QKR_Ch<M16lN0;t^ z_4dlHjiBA3oo(k%a)alN^{EUr@h^RfL$}?fO>vm}a)T$iv6mS8PWW(KhN=^r`t9oZ z9EC)Eie0<buDfLda_rhfJJz@O<d(q+(C65++4e{#tS{V>Rj@U}?=-!J?=R+5;;W_T zpk{2NAh^np>bcr)pKLfp5DQt`*&aMcU#5y*Z0|Rc?;qdrnACVdAbe~@8m@If0de>C zJ|nqF+v0+J<?hQMTifK?-mn+k5x(IML@vPPUgKG4PYg+eIW>Nws^>@`Ik`&S#~SVJ z;odj&J_UN$K5PH+9PwvF0=mw=ACMS7?_H@eHLy>x;%V4_SNl)rh<(t1HueuCl)KTB zjP(B=_TP9aHe~iYSsg!1QgV;t+9czUp6>5e?!hCN<a2`0OK%_p!m!MkrsA^LvCfe0 zH>6cMt?$8uP2P$DNUbmI$9&FGz9oM=NlyeR)INtg7^|crMR>8$H{7fM<<-m0?H=w+ zX`gDF_;)|97q#xd?dXZXBhYt(gJHLt7E@cq@u|w)3urwR-tLKt@1EF*`yUP5yf;wX z5J#1c{%Q~#$;aK}W~3r4m-S&r@<i9?%H8-8e~gmMLEa`$^f3{9PHhX&K|b=SDQ8-s zJ#bF*HuY-%j{5O12kWJ>p6qia-^Zixib3Dut8~gDRM#QZlAqJI9Qo9&=iO?ZOKhu8 zg+=;k6v7hR;gBhyA-TcW8jiospgoVPALH|NzNAl;jD`szt?y!}0QJ-hjp-q=9XHRW z%A{wRZ|KSQx>Y%1Dm${e-=1nSb@N$Pqk~Oqp>wsN|Pce1tqUJ2f0{%$QDHe)uSL z8CA`+=LbakeF=*wM?MW42Bx%#TWPC?UOt0`H?{G^Q>H(wUIFCQU|n?yQXIUxe<ELD zsg;jWCg>YSYt@>;dk$P14&O`+@$Z|lId8$TsO!SpkfF11#iwmWl`YpVqkz5YoRZON zNI7~f`lgi>yga7ug7(Eu^jV>7Dwyyt>w7kBcm^OHyJsIgMk1SSy5E;z_%k0DicngX zLLu{9tzsl^;o5d47?dNM1n{^OKmO=KZ;k{DpH^J>RO4Y5Nn~WNlzZ@3>5T%X6JIeD zGI}x6ADrES@`Z6;-ELGm)4}AVqlLn#e+~w|vS@=ABm3h{Sc?Mx69UI7H;Kd+f9BWh z44e*;xoV_FiW%58-~ox`Yplt}*B|oUYZjvy9jWZfPkj7bI!4yrY|sAiq5$O|Pf{e) zM<iAsHM>=j80qBhW2jF@`lDx(s!hPx$I`S3az-0&ES8VEif?}4=VZd)MmF8&N{V}H z{YzlYz%Gcac!uJNr+q+tMTI35ZgaVxpi+c-U`UA8<$9F_3;Szy5Sq(-a}UF6(7ys2 zYd?T5m}z~h_TyS;1|Ec%p>1cQ4u^?27kN2I+#R^~Wb}EI0krtf*VeS1iUThqpFq+a zc(yiGE6T#tfN7A*fnQFV=Ulj?;yaw|z5~|#hX33M^4ht)9_4k4MxP!)yBLwzEN~}l zC7N&w$n{L;(uJSM#r!lk8}|rFW|m2&(IP+D=I^ymOJR%3J?LVQ{-YsLX}7|LvLJ0R z967XLqcbyl4Zcz0Kr{b0<fBK{uLj#`YoXY$((EVZ`US)BAEkAU<eKMnd%x9_o#RJ( zzw#XosUFUkdFJL5e%Xj#-(+w1T0RSYFG2R92B65f@+IY7JVC^rD+kx|G}iDKsZ_d_ zsN;stWRxHrBUlN*C!>Y)1K&7svh;q-jy$8`OEHK+Cbe?8X&5C89H*6!Bf5GO>r<k{ zl;F24#2|@{cL0BImnUJ@GMXREs7EGHD5DMN(|jCBf#<1LQhei(K$8xvlK%`UrNhK9 z+|{AndjXG(r0cU_O1%{HBFpz9T1K%Cj4wv8sm;YQ@}l4!+I0e+RJ6FZs;4T(KT-02 z66+^no@=Z3kblRDQ-Y_X|8_tGwN;1ewg+78D-XNcVXae%GzF8SNjh{=KMZRQ)_IG; zcL)oZ<mg=B6tt~~y|@)7i1>U7+~|vuC++?=m@FE>GOd^amJj8c8~(Ru6q5Pf`B1Fk z=lgZg;iG0>fvZE|eI!1Q0IHhp74_eG=39vH$BoReg=ZffXP@AMMy5z7I7qfJvI5>N zxA^ssSo}Q~@JZJ?v@0}NCeD;-ILjrI3xU5|kr(;}rGe{lYybaI+W+_RDIdQ}m+m`p zj#>u%x<PFJE`hv&k%l9+Ya&;kYh`1OU8}X})sit$(y!K*Bx|=OH7y+Wi+@|!ME?ED zi4LC7?=FGEEBbrkZ({h}V2YpPE1&%Ay60OkJ?yrJtwD{{&w(}9AY8oBUTPAZO`<O; zM&8dTo@p$}!q^}>rQ^ao(8(EX#>5<>fqSFDVUhjgMoH^1CSgP;W1Aa|DcU;rn`Kb7 zL28bct`BOOGE&kfN%|F_nIGtdGM*47J8`Ohxwacz=+m{G^jJLv>*)Z#IJ-0WEPd~V z;-uD#U*T{sd-*#-s4(M&i0lyk2DB-*Xq<Z|Cfk)}{Hz3iYyy8|2zO3*`})sO?xn*C zx44z3KT~`d_A@4Afn`rZyKSt<0rwk>l>w@+_2YL9O0>=;=#4tq$dmNBfYiZSSH`wk z_(6Rca(Xbd%TDr1QtQN)@bll==a^qYJ2-d{?yD2l6vDGRFx#yi4HtMjJk2(@3mok? z1pcA~e$539!gB&2Mu|h4=}=mWM=GsTNBZ{5zORoA-o9okfYV0e{rhWXjs!VN4o`#h z;nQ%i&=lMMo1=D~_}`<JO`P{=or*sW!_LW}DF4_Neg&s0N?lguM0E}QHqbkT_~}*b z`y@KKAcac=w*GjyXYJ?Nvv|)?VK>9ydm?HFUcmY8$!}o3Ls@X(Y>mgxqK_n7@f7_! z$-hlaY+8{tT%D+2Cx?Nv^~eEZG%(&P&3GI4Q}Gzg&&)W%zg{Y<+qI<NN3b5?&%GzC zubRF9&)2cj5SK{&<F6F|sNs86{9S?+Jx{{v=60~^jreOfS|WLXAFQ=BXR@qLK(`ck z7re5Ywcj7Mh_-Nig&)i^Pies@C!61x<|Qgx2AtpG^HAIG;!iic0Q1kx8ot?63G2@e zR39B*`2=6qe~6~`X7r*6UFDumfs5k1NZw80%L2MU2<09$sxaliXyRxzCmsle$XVgR zG$=L^+|y~a5iQd%Y}ob5GQD7q{s7n^rztlWv;|*am-d@B@1^67S$I%@x>(P1=?h1? z?LJ)Xe7>?<S&PTCwBMB0J>YB3gB9~Gt>Bg8E4Namd;h_inxuIo&;TnUf$^PCBb|HF zDk*M`<}Jt65&Hc%FtH9AU*jpD5V^rUkvLq^A8kt^ccS;BbiUNHkKSe2%oC52A+0kU zf0-_xnBgYxfwl0J2DyajFIA%bmJG-17_%R}#jxS)Q-b)LA>BFMJ%j4JYSy_h#J7(* zYkl0GFxCS<@2nzzB3X5OS(jD;%?IKLrvkCtzk^QR*c;EJ>>OC;wN$jk!)i`)b$gG{ z>c4?JU+~#-&)sbvl>^@`3y3xiY?eocWyId#P};`@_I#|m^m(rduJPW(O6#Od-#!J1 zUjTmFq*R!Gz5+RzqS>5m_Cb0v%H~wx*LDZ)Lq`(NH_A)IC0XQWZw;%!7Nr?a${0Dg zQHLV|?RUG`v&X}3bT6$DiZk&Qu!4-<u$DJCr}*~w01AV<*W}Te7%eZ=$fMWpj6B(t zZ%&n!BLnDFnejfa3&t{jxuh8QqkkADc5Kk`s3JI{_yr54^;)T&$ra~^;(bTO3h)G# z*HQW<wL@vW0T7vysO@e$Ao;%8+r|<G;}P%neF=j*d`IKfKz1|AukWbDf4>46#$&$* zA~-%TRcSs54|^r2s5IY?cgQLAVt5eeJs<ws)j{|uPE7(JM`_0Ied7aIb>#E)h;|rH zG}I3T^>Vc<ci)bk;Rz#iOn0Z5^1{!NIB;#}W-~vt2+kD$mqKKgsA%zhU<a%NMIm#2 zfv70Wx0w9`niaTS(jx1n4|1@)(<+Zqhaym`Jc`q>6G50AZVpAApE+n-Vk55axYt4= zFI6q$n=tQM9=G@0rt34CEba!rplupkF;#qn+eI{2e5Q$LIDaM#c*d^z9x&bxtG*n( z*&6G=f&N_oEa*@E&6YoosAqvcju!72`VzgQGg+iF8@Qgwr<-~MrYTdOkb7<q>dOSu zmsJ0u#%cN#Ib)BuRSRfag2SWF*Nd(X)C|4hQNeYE_b{HHG4k;ko<#B0W<2;Msh{JE zq<sV8A7On-Vh`UJ_8IVZ9F1A%2T6S8l2gc595u7~ag@{eN+C;|ooc?d@DU0kEcwB} z*|d-J5$3DgS^6AslYK~l;B<>$T-T;0YTa!C$+w?Ge5)zqn|vqZ))Z%|H~UV4ct3?$ zp0ufhkK{`jpHL-ap|1lMbFx~Z$D_}0WOpg8%O&4Q(fbdp+?Pu0_0UItqV|3plYC$A zZ94#Jq`hzUg8CeMJ}f`)+s!7SXYYF4Qq=+=+$DHW4VQ*FY{gD49|fpt+E(wh==}-b z`#DfCP|jC|(}|v*7E7SgErCjo2voWyP}Vcn_YDeEB%aHjy^qenFGc~%*7!=;9d<_2 z==~^IIU|>hT>4gmO}XbT%>7LJC?gcCh<ZN-7G&U}Tn9t)wM!sl)A7wkJIn2(<#-y` zjzX@^vbh{iVwd5mB<WrBmNMDH_tF~IEPJ7^OLR3j-D<Kfy$dj`reHlNy=y-92F!Ce zdeo0%$ks}hW&a<Py$gI4<@GndlMG=4tFziwqi!|o)`pte#73K#Z4DutL<z7!0#Sot zOZi1ai!v)wLs;Bh$aEZtw`yBjZEG#H{NCEurl`~=0kWXhBD9EjLu~5|E6SyY5Fq=W z?|Ei68`SsTKcA28WG>I;Jm)#jxt~2Q*J%EsbQ{h1{3mJ0oYjg6w`j<jP!m{8>#ORm zi$JzvqW`YWY$#nel;W6c(@Z*aq1kQ_nr+`_X|{{4+j3l4@q>ZnS<IZz*e<a#+9o z((-qa^Sk1&%IfoT_!RINvPLs$gN(UUrLh!MG(t(k`DTt0SA7KAp$^)2Xp+3K9-Ivx z+r2A5w~CD7ywr@YtaIN8vg`=EvHTbxqBu)@dU(Dxq@M?teHR*?<Thq{%oqM8icB2= z&TR2Tmz{7a@eZ*Ez4{z%JdfT6d(NP_hTm0p6ENCxBc975?h3k!=umSR@{M>E%JPXm zNbx1wpmxY?;ZGvJOd`*yi=z)~SdmS16&Cpt^PcagowTSJ$9h--N=k8J1&P_Nf*Rx5 z0DB$ZFMgm&+hcAzkWODe7Zo@BTEBTE(V{ufnWIT9X@(3&sRr#ZHJd+_-=`#Q6La$E zi&bk&Mn6tei1z19>ZxI-`SE{vC=JZT2k7rt#YSrk1c^6!q_2FtvhsZ~1Yd63e3Ao5 zmL$~1DB%59V$K<2ezI80X?8|qK6iiG&VS_9tLD>b4bAQY!nhwK*qrTvJ)sR}<PX*m zHe^Jj&Ag*qGP?f}`IhzloY+^yAyVfKtO;~<iBh>P8`h_5S+G{GhV(^m1i7IWPJC9Z zm0OnzVw0J`pe}%EvoznyD4gMak+f5sqf`8fC*K+tmOq4o6CpXM)Fdq=pf=a;I(2_) z|DgSOmH~<snJ-xUu*jbiLW-}|uvKa%adQ6v;-}6U;akBolqd$Q&$^@spP>&7c`({0 zyCZvbS8VXY<!|UsBtZ8qd5w`d++Nug6)^ItOND(}6Q1DkVp&+QP%=OKK09O-L7Az^ z56~s7_WBC8+{s<g(QC9DUZ>|(!ZTI7yPbWl*cL_OxgTc9%=(P*+kyi=1l+MZG<+}v z0EeLF@u#0*qx^&4cN8Lj)$L$v9_06V==bqJW{56n9zw^YX4PZRk~7VI9pJq5JCZB0 zqb*n&E>V}q+QL%DMB11s51%VSZ&s+6b;X9$>cQypsjkRE8tw2n^;<WN*roM45Y{Yz z#3~snB=x!)?d9I%V|4#xY?o4g@$#M9=<8$SB7M>2QzZK4+@7O|8qCCL<`6e}ZV%ld z5|;W&jN?mJIqcJz*znxQ3K4L*;uQS&t5ElNxa%@EhZE*1ao~lr5=s4oW7N}wW0eF0 z=wQ63?H=u5aGVm~ZvP$e=t~+0R^o9qGEcu#=6;U$^JyN|CpT;Rdp~lM!2TDQTMlV` z3*Z@bv>$R)<gVDi-KxA!BL23wP#s&^Gtif#p1<Nfw8rhIr)%4L&0ISDQ}TkYEa{hL z5tJey5-~e;^*D89wp^?o)UQ^$dwK`Q=)qN`J<2bRD))UGtZI+rCpge2seeG{t5WN; z&f6u8^oZwDr6f@CJhl2$^72=ILZ{uAZ^mY7pz~&)CfxGpXXo0|Lj@C(l{JC+9WAkC zgc_$OLqdxeVlAE?Do%z(d7Dsy_$kCsf2aY+)_g5gqKC?~P&r|4D>Cg3I*ThumrZtQ zp`a3nfi#g;zpGCvtoWN^K%phvx_>LNh}>$-P7|AZEz~nK1p20<P!IXxkp7`OVGshk zAwSOorO&+NKE@TLJ2V;IWzSL*6PEcWEGwk-&6Soxe>{J}vT`j{podB(42lLzI%Y?g z)w?1U)Xkkp>=G&xz@-x`Xsf}M#LT=A^9#`sEhKYzm=g!xWFB>Lzo;*!wg_lrl1icj zAsiup>Q|Zl!4V!IuuNVhp~?Vc*ajrB=dMP&rRcJ2>Dwzrh=t9+yCrA><}0gFhroz< zi4E}+zw0wpjw&e7`cq!^>+7c@mtMP?oA&BWK7AQvXpVt`#6%OAaCEkG5Nue0A!qeC z(N7?3v7r-pJ&%L-Wm%~0HgQYDIC~KEF2aM@LtgC0)sEkeUymRM%pxX7Zdm5&82Tjj z1@T;2jo2HbUaEL)+2m{^zuuB?Y5f)NE_+++OYQ68^_6*jX>qT%7q>PFZ}ZS(XbdhL zWp6ST!z%2ncvqQv(6|Ytxs`qBe8<!2N*LWk!Da4>qe^@x_y(AJ=L1D^L&dcE;_uv0 z8682P@(v^u_g1z)b3#2cb+%34D%&4B5y@xQ8tt9Pp-N&>msRUih&D416$}0@9jT1< z;rMi?P9u3Uct+Z&mLp%*`k+!c68Xqp-O?ReQz7PH-AeeZT6P0`@c6tFhGIi5t;w(M z>9~MeFYR&owWQ1ur+Skg+N8eaA0uk0HBC>_5w3G&F1$}X-t0~NWI>nS<kBMr+VKgS zwB68vO1q?k+7Vz%MV~UMPwO{oD$^AQmHXD61W2KUa>w@dM2Dj4`POnsUyhvQ6}Oed zEnqcGsp8<0{m^P!w`a!(GsuF^D2XRnq(!WdQTAv1iO1QbSJ>;=(E*n&Ug6E2Q7b%O zJfZzc6PYjwDcVm9G6%^RJYUbEZ@v{1hBRLc&<OdLA7qH0JCgSw$Y32gnfV*rTS@!^ z1Vx0J;avnsH2D!9QL$ZFJr^6TB``mg4}0jG0(w!8xTIZ3MnM0at51<T{bwNFVtZsS z4ND6ZT04*1`=3K*syI-E*tYJfv`q(9I*a5Sy{Sg)?L9U|_k90(aSZm}Ilgp9Y>-Z$ zJAsf*LF?-DsCa%lvvZqDw0;`JguVovXxvKT9xROD+=>}1Yzrq`ay`h=P!?t=UhrpT zFTqMmLlX|i22U;}p?=8%4%I5ezO<g9k$>(!pj}|yN-tbSG=!uJ@PAswAE~z)4cc17 z7jXS(+E=k*SLAxYUyBr4KM)B8izaLzeNJfo1Thv=kVPlDjJSv?%m=7rsEO1I(PdL4 zn-fTVL{zwaOFC^usIiW-36)BFlJb3w{}IOj{^cJF0w1ZPJ63E&>IKhKVBWsmVHl7} z*&RDJH}aq$QxBGIv%Yy8BcT3v9NiJymt%DZl$|wdJDtCrdvmA_Y*pIM*ihc{&_F9w zcM>0b6+AXb&~CdBR9NR6=6)|wrPF_oV4NZc06Pd<Rt=bj?basjntlM5Aj-bG<})wb z=kZHFgg?fk*Ykl)Z5C@uy$bA`*YM4tqiCM9-j2(KQQSqB<qTj%3n7p-B#+p`gQWwk z(I&BcFHk20-3=u5twKHwq~>SIgJ2=qIA0~3ue>hAJ<Y|cUdSc6b$%QcC6Fn@=J-t2 zokS~kRfvsNBl@#VQbh~;eF%+*+$3Srx#d+q(9hw}X7wFIt`d0~;K{8ocE{ReNk1FB zYR3!>jJSs_aFgtTuu}OhIWf@jq%P7ict~vg5<iVRz{3YCeh7nC>~EIRH`ce(h@XI5 zp6bs!FHlVMO%@*@3AaIAYzx317>W`-9rMM$b~DnKJ*LC1e#rd8F7ELfd`7+DBqcuo zFiE{Xg!a*twBELhD+ZTcfEQr1K1^}|*miT<>sj;?@R=hoe?n*96c4s-(EL+}Z5he( z`iNZaupGiJTI0k|)bJ<q4oAo1NfBe6`h)rHZNi>N_;lB!@Rz8Yjd)zs#T;Fg20{2p zCi4$;!=)UC-0C8dV*2i7$*;tgvSUKcUTCxj7L9=p37QAYCRrs2P!;1N_UBlhR*xJT zEW8uai=Si&$YuA9b7d+c(r<u~^&}iawS#s>5%IQ1D5%SHlFqg(-RxOWLd&Tg6^spd zZ(>jvtoV02H<p%^_*jHU(5@pU{~u$-<rq<s3YTM*_%+C8MDvYNxA2|_RMxuN6Mz-R zOOF$W6AfxUkNraraS_zlqTYY!plnK^nRgFEqm7|~9EYbP$8>wZ^Yrwlv*^1Pe5b7O zO17X$EjU=+5at#(-_0%fY<T`#Y&F?f&nX#=_L37u&0<7zAm%jy^Byv_WdM1QZS}MO z{WXEfY}}z&-K=q346G{B5Dn4Jc}YPrO0*;@e1Uf8!a)y#zEEWaooVWqm%f=epsa@2 zqMg)^^3E6!e7sOu{l8%H>SW#Xm>%-zawkG){%LrsIF!_F$erO?<{^=NeUadF`vo?7 zdA0-hvgHTxqT8hdv-$4cdxdWb@N`kYLz@ltWj*O{5NCuJVo8s=@m|K`ijN}y5)Bsf zr@y?{*%8kMUU4C1l+BCZhK1M+9e+ljiE;>TqHOP7NMhE`eX+g%{Khe^1&)1h!O{Lg z`f$M*zKqi4gW^(lsSQ9F!l<kAczMcVZ7sxuhw)c)5PA0rtTvsLA3C~ye9fctE~$Bh zHp3%Gq><kn8*)ef1+HQ>QFm(6?NX=OO<q2#$yr%V_6z@_AI!T1ZGLup-#Y2=7d4!H zq{uNHXu=%Eh`d%37*D-He`u^_{TKDolg&>gT$lJ(363fMwb-CL@*z41NvL&hhzy~n z1H`zu5N;9w(_#>hwdUx~i*_E}aY>`$()^wI@8mZIWR3oa^-8g0?#Ld%c9)AcnMZ$E zRK@wwjeR{P7c1hWn<xsSg=M<h$X9N<>ftMVvYD^&-d4Wy(bX$_RX|rPnTP#$jS_9F zE~<WLgrRnwzB;#Vm*=bV=yr9!Ius~h$5*K5x1O&G=!!jY>p1PIA>T#EU9lmr2%ClP zWsb5N!HgXgo{Su9Q^Q8?GNMlDGI(YcnmI4<+i>jrs@V6ie4Q_>Q^`X5^}+GUU5R7& z{`t_~5p+lzBmV7sV7lOJ0Qcx(0VSjk)1W(S7f_03pcKzQsWStm`!i7L%0TI18%iL} zL`8$;m>lgOqip3VxmI{jl|~!`RjpfXr15$rt^CuJ$Lh<@H;xTPZ5GiM!{lh_+DpCr zb7TAb(so_WQ+}~ki5;W4S{-&2_$Y%tu=GnJv>G`Gi82roaOCDubl};gf)0EV`4`vL z;(p-=N%%Y7w?d;IS{<P80qY`aQ5)7i=EUy>NTpeCZhlYjpJIZvBX-h`h_;ovlumHo z5OZ|oiO9wAth+QgfU&OtL@n&IPxphBm1F%L`Ynb*0M2*?GX1Xv9_9fh@$(@r`!N|p zM~#v=U*=uViWFBi$X~pRu>b;iferd%CC&h5Zvi6ger*emL1P&L`h6@VFm0EMp!&6z zV`D?E-x2GVUo(~X?Q~<Eq<&0@RG4`9YdD*g1nQGv_PN9i(yqpQDo{tfxA3CZ6KVBu z@B8pjD@!zfZJrYE7nX%`-E*OKdg`eWBE?$&`XG~!&wvM?(NUo3x~hnK#r(jcG%eJ+ zs1omjnUnq=wpI%L_M+0B75iK=4*t=|1rz?a2boqz!4)jROEjq=_;7s+6U*t%h0@3( zzxyt`{oA0V<3C@BZUvRO>RG65H#xSvB}XV6r|j;ezZd3=eEl==b(QmV;@C+ZYzqc; zfUd0x$1-wbG6e5zlICRb;}$<2{8)zx;Y-uj8KOp7$v{<Jm6F(a>@(+}9u<DJErBvn zW~RrDv3WLN1x4O(ZOCpazWKA8njq?RwZKAi5ypG>Am2d4JM@}|=6%L#Vp{)u3<LlC z*^s;@ethDmK>YZ5rYQIq+akwEs*c7^780hN#Lx!f0l0L)%G#h79L?cXObqZ~rC47f zXkf&2I0T}e+7WZd5)tjInp>CH`&$i!X)&~<#LUD}HxUBfHosaTh{15=gKVatOWYP2 z^WHzoEQickY`rZC0=3|1O93=D9d-N!M!pY=?@!sI=PeO?G_yY+>9JNKWx$)(R%+E8 z_o8c5E8~`AIB%l=zqgu?^7jEj3FMVJVq9vAl=w*qek+RzG>kCZZBC}!U)=dA(omwr ze>Gr}272~Qmr=*n{sd8=_YwmUZ|d7!Ha+N-U;9XHJlfAn=8r*Q6Azbz9z>dOB+wB< zv;d|A-3?mMQ+Uy9iEZj(SOyH4L&<0$vhL5-&ZUcTUCz~3U?Ee#h$Zb6Pt%Go0UqQJ zvy<hkU3UJ0SD|tD>-Ei=FF;68Vm|o+iAQPTNzm-fMs1URdF*{RvlSkCcdry95_C2A zc<7K)-i-abSE}>`)K<O5a2fujK2z@9@78uPvmd=z&WXH3jGS6B&?l>KRhAQPs;|WM zxg$wt>r{^PpnDsbps1{!Ozcp9o$)E9ch$esU4%Tnl6s(P#Oy8fl9_tp(R&NL>dpF0 zpFWulsoISm^S6IVb0BV?Hp#Dkx3q`e@u;WSDb;Mg5Q#SaG})(Lm5CVFTXxAS-sh<C zH?)Rb^62*`$vPeFB;C*SP^(TViOhK`tUznC@_7sU*PU$tx>k7L!9Tgkn3YcK(7bIo z8}bajiT$$5IH*E8tmkk*L4bou?sT)|anh~WeoNivb&H{CbKQX0MDv^C59uHcN;^jn zd$rj#J|Cp7*_kAzMyxQAPKS-y50|IYtuu)#(e*FrI&A*rd#A+bJN2UH-+=*duIB;I zFeA5#tv4t|zNmC7H*#4X;v;tMB~Bt=K3hZ)5?<f90okKR>`OHNEto$y7vbjo12utf zA*GXBy@<eHZoKe&8q0HFIF3A}B*sDE5nI1pxcdt}0!LScTZtD6#?7tc04y=?kZf0D z?Hfi}CuD2mg%{~VGjAb%od@SZr`bn)l?Quh2Iajv(zvyXjyGp_jLK4p143bkRGsD% zxAXbp)(c9valJq~2L|NHIjTq7stxxJj@kL|{IdIK2dp>-dK7uTH2o<*8Isr%Z-P0c zc0?VU>zr1LO1CZO8mO7#a&v=6(BS*|{;US~rT$lpbAvNZ0T>!>sD>ra(eO#^g>GHV z2UtAWPUh_aU-}zn!R-#e9QWliTi(tYa|nC@r><B}39dK0$0JXvH;G#>Wdm!CYXn%g zz|VWhZKnc@(Q2S(vQ+qa0NZE11Us_b%s=UtS^TMH1RT-M=K_A8bzf%S>$64~hcF>- zTiJuZC~Ku9+74#-qEmX!>|gZj{``K&K@ZqQU-MUb3GrU`cx7VJX{$7hacM)^%d}f| z?(0qEYOkT2*!%u`&v|szev_No$;w4%K&YN)e(BT!b!EXp{`~RWa}xR5Z~e^i<ox&J zL9ms8+xBd@eLri_C(}t|cHDaEFfqQW&mZ3&oXGW`HNKi!>AxP}4(q`a&H%G$M`W@y zxZ8k{?=3uKa2T8P`D6PQwfPtJZn!Gb`mWC-5Pzb3=5nV8654rl56JcC;AQP-@9{A^ zKgbXMD2qB+Zxg$1PF|QbdCXe=?`ORh4UEffpbIS&{`W1Q7^S)OmUNnjtCRRRAlFIG z_lN&K5#zk$4rJcShK!y;j7YV4%PlD5t(S0k2U<y;o8@olz(a|@N<zbeSa7QA?)|hR z?_x;^V)v!qGQXTXKzgOlb@zWc!W~xIkTb%4S(wpokFLyoxz%2?lG1H2h&7ukHdJN= z*=sfd3AY|?9Stz~zXzCg%o&b};f&?s`~@Pm@@S9pU~l<WC6PSl?Ec7==4GE6U(Hm> z`*{Q0XLZuY=D`1C53r_=KKL(3xWlSL1AqLVQ?T;CCSE(NJT#!5I)eWisdiXfNDMN+ zerf|%|9u1T!HnF;`tz%!u*Zz80=Lm<+X@zG$03))8wa`ENaSy|b#aRw>kKrx85fG0 z(w>FV!b0<f1(`#0w<OeL{q&%Sg@B(r520gz4Ora`?NRq^uQAON+c!*nbN+ViaA%!Y z6uINDN~4ZTRRzqw0~!4ls$VNFPI0lQ5Z|Vjjl{=XnAoPhtX$jMd;G%K7O6LNK4F3M z20>)P8`{pD@8hd{|H}Bb$lpnV@sJqD@vu;Lw6#bbUu1TPl>)-f?^|(^Z>6mgILxmh z{H32*iCk0|H=4_h)+#%>q(7|fU+B_yn@??HZp?23;?b-gl+}m}iq<!y)Nx53;6q#m zCR@6VzTHn>w{COXD{e+V<G`6T27)uFb#`;wZPto6^z5Kn=qEElvm^GOS%um``tzvQ z_II|<NRN(R^#~KdCEtae)O_prX~*}}2?I(!20!&dvsXOwq&f}G$Lr6;390D}K4se5 zIsa1)Sq&raX$(pG-Cxb;zUSF}6V5_J)V%b`x%7#-^tTzlrfGKR0m9f%zRUS<z6pyD zs-fx|1Bj;9*sKDdKMl$+V&fby){TJ%dQJ={EdlUWiOVuu$7%?h{q~502CNH$ODslK zo#i!FUoP{pv7uZg4u65zP@WR^z#{YB$>^~$O8jkPK^@9b;@=iZsp3pFno3DAV!5_X zv7NIX1UCSab(i7cjAe){H{ilGOO6dm+G~-=l<uo^1lk_xmrEq|Ow<3JG_sSzVktk< zFH2~+Y@q7&D)nI<1z7JUoc+FjhSDt$b<*ICI;nD^TZvth%Q~+jL%kX)o{^KT(6wSn za=|okF__s!#PKGPOLhtZoKl63ycTgu!?EP4A4RB#v!M;|kvgZRD?{!(cR|0Y{Y`IR zXay(yO}JUx(KX@O(+xGyFw1NgQTfO`x>p1N5UMwr|Coc@xUPb&wZ`1sVhc=ZCH|*j zxN4wKT{}t&kCm)nX8coei&l(Xurv#y`u6?CKoKm{r31R`)lMR0(^n3iq2u52i^EGM zB)0XBmDG!2Xhz(n`InnBz=iEoE@A*TuqP#)8Mnx>;ljvfM-N&Et!P1Puuv8Ha#u>z z{>rKX{_`p(AccBI0Hx>$snda4ucRbC!tkaRqF^>V%g*wZrV-%39Tsw=Z(bA#j`*+2 zPSjB{Bmf$cZS3?m>3Qk04GgYFZgjw<ehne_T+^>#c1tYEH?XSaZ1dfDtR?c$9OX`( z>oaE|5aOo-Jm#zQyiBx{Ctc<?uj1A4G>Nq-8tKd{*2QiL`ywe-cKDS0YiOS$7qvBX zf@kIFhyN?#KowRDQxtJWQTXDjrK2a;v{0J0&}D{yZ1*!9*^Pdxu=e~x<Zr+>>!(7s z?laotq)VcI$ta?&aTWXE#DqbucLT0h^x~ZBwQ`R929u4}({_yW{<o7>M{ZuR8C1hD zsln_4LrAZAHVQm!vHpqdskAk$^H2W&>yZe-k>5lfNUbtAJ<W8ZX|@sEN(8IsW)Q3= z%SDU|=gXN3!)8hJ_*f;r5`?8KEGhB-xR_p)8TAsAjm7?oSC!T8;BG6)rv@)lyWvWU z{N9)02&x%#f=jKZJn+Zrq(}dDG3QuuDDrXiIMFENfs7u{QxeFk7aOL2*mL|G{f0s) zR}pB6+&nd?ny$AeTyzY6rDB;&okP@rJnP>o>8?5zJ}FxxNA&6dEFH)xfEbk01KO_C znYLf+7OC>~fMUQ9qt`;HPM58Nd9=Vh<3{IL+oK^Vjc1_RD`^MSJQ2SzI&NG)bD*zE zEnTrM3gkbiz6Y%v%ilBPXz*&6`fBP`#;4<Bv{#kHg@k^om&LgxUaO+l%Ev`sO#PBZ zOOpfFfXuGghF_pxbgpWN0iivg)^D|^*?*!QO5QT*C8awj*sH9Z54?u3KbM;|mP!@x zC<f}F2H&NPS0OE(8S9O5rIP5eYm}8&L3{YMtaFZM%5d(uU%yT!fGVt~MS@i&eiyx2 z8C=nRP+#Z<h?jq0{hR1X@Z+Vm!M&0E=&{F@l}H@;Vy=xB(n0#{{#WUi@bfv{Id|bL zq~5G_2Xl;RQ5wo!2P|a64jx_V3m!yEYm}8piuWRRT<Y22ak@W<`>T|d%W)sd_te_p zNoCbye0KuRV#><z;2ETXR8;usS~G{U>}AY9{`HP@dQ9@lOgi+9fhSx{vdV2!rG7u# zDfRV%XI<<a!43tv-)rN@)sdQ?NSt2Rs4tPlL0<8RE^o!TtQaT9@ce5y)lmE@nD6J# z*QY@%NV}<CZ+3H@&<1^4v$nKIn>*jk*+HNcMc}cwm3SFGD*i*_fD*qr53FaXY+aR- zxMvKHh<yg=x7Ge#gx_^l>TIKhE1<R#-hN30U%-}&Q*74E+2;CJnA2<L92QFAR+%4p z5CH*hqBU%u=Ty`}bYwrKQ8!;Jex~AChJ~_vERO2BHu}2r1lWpx$>Fa@@_E23wuqWr ztiea6hCP_8bm7WW<O~`<IpEOi=Ib&%QsO1TKu3&Um?p7!rg`C?vOF4;1ds~QfJU9b zPVLO&{y4$Aj>1YV2FB<-t|4rt)dgdidzxSRrk&CpzE)-wtW~NW`>;XOi8Cj^#x?Yc z>>wOrYxc37xjc;wAU|50u`?@Rr8Y^Gb9{=S11zBe;gCcpm=XMhVd5(vsLu1MkArbO zl(vhDV#}Hj3^_ViW%U;YFXnMVf3EfDp5MXXDD`7hjx%c2eDI3IS<&28+@VFj1UboJ zgAzsOicRZ}47J5EJ0`C<vXGul=Vx#KI5YSe!iC6bn@;fDFq(%o9r;dt%=k1USzHZj zIRJ1>gus+NLrBdDLaF(Au<86`*zt!T=nAZZm7M5ky?OWbd?tzU(7;-h1S)Pbo;C)c zsVzwCP{UC3?y<2|7aT&3`IF~HVZcU79Qh+Sjad;||6|)Iw0>A(4$Ft#HE6DTHJuJ; zVR-qbEDX=(6iD+y@iTH_G1jo4BF-4!aW14O!e?x9m>x<h>)Mpnm!EXF!#1AfL(MeH zwPN&j^8qONF(CC*IWCbjm0mK!9<3B}qy4T;D<UexWnin^<|n^p&$x$sl<pooSlH%o zX=u}s1FBxHLzFv%1-X;xzHp&HZdrOn^3Gow2JANlT8n)q@yd!&t$OosjSiGp%o~z2 zl+Gb>SQK6e&3)=poVg)uDRe=ol=y?hd8CR)$!FPXzic*x8qIrLj-5^b?Ax;$EzlnI z(QYT;P!bPGqbf-_dUjgXTLe4h$t~B0tjQ->EQJ33pio*BVDQ$MVPVg0XRSb+?Za1Z z9+}0lPE01LOMZ9Rh#xY&+k!s0%7#D(coIlS8ICP33r0&0(+TlL6ZC2Mi=(g;6<|T7 z**_Nfk(U#9G2vjv7G(|8>4xv}74#r|jj}3=KSe1T&;`O&Xbi$4QB1u#ZI;7%+`y=V zxV(QMahW!ec&cZ#>2lLTmzb8PkzcjCj`8$9^Hi{^h8S>|VEl5rw$x!K1Z)Kx4y}I( zp`b=X3_(4R3zB7Bk+9{qKnwo!C)j_{>{>{N=l3s{T-v{8i^!fuTIfkV<Vl8hbFZPd za`<O2{?bCv5(U;m&)8>X=${B(aYvUGxJd8~tyAKc<OvilF-vBoMM_*Pv^TMX$EU<M z!NDT5TMMn%L+g^ES40=v#n0b)>Dub`khgbl?l=FUpofQ*mAvWZJPCA*JZ$cs?(Fwa zSAS>?ag#UWdE^<G7Uw)kugpqEy3F2bw8WvUBo|=>YxU52EyDh|p~tj?+OU?iR=P&) z6-3mP1Y9+u$EcC5O8hX#gFLIfVY*+&5u(Hw@k!~?BRzCT5Yg0|)@yUN60Q3hy;s@X zqO57kWuk7AiaLnyFh0^rVZQ$x;VXMZZf3qjbUT-TDOk2u4?TlKii67ilhDMRb%uwJ z8!ghKP1&3~Ug@4r61rQ7GsPUrSK=^IRSZTv=z8%yCH{3jub$QCY}VTvQRl4yi3bLH zVTHpUphr!}b%)`3y7W4q;k#>=;qNj+uTT$RE%b!h^+@J0LFZgpObcyLRxbf4Cb{(~ zn`wi<Qm=(J>Jtf&n~jMcE!2}bC&Q0v!+d~lP~sPGuN(EI9zFP&9@?xOGv9rh<5k~A zgxfAXwB2a>J3(gK(;_ypmS?^m0>M6@?-%qbTa9X|a*_<!le=?y42Ew8ygz;0wR>cJ z*^}BhT5YXqvv%C<qvh6{HVee4cB@w+#yRqEI`T}|?4E+czw|U6dBUjngw02sT3Eya z508omu(9m#=7Tf%mFTiHM8y8Z$gtj=^J{yf>5+eCd?Zoi-T3Z*n7qY$E+CY2#r7VY zu$fLLg)Rt7t+^ThLJn+b@+zyZ!5rs2W5_$Ta$<1+Sc14!WYfFMd*|T25WTm(qFlKj zamWJ`^W5rb`WzCrc9O7l7L5(Q&x}Hrd6K_}&hF8u3x4)n(~)Nh%!i#^a$29A)?><6 z!e+yN2BET5V$(xCM{jz@sOjTuq%Q5H34O6;>s>b9kpO-dvZ>vHh}kP}=7(O1aRJ_@ zhcc-1JjOfC2j93kTaj@SvBy9^Vs;ME&Ja7o+__Gy`q2}-Y`N!XZ_rET+9dC_1Q!Si zt;YhLbUKptDQoqn$HH`<Ry7^*np5|}$saRcwv~AqY$4;%_%^eSFNL$#5lT9&<0HQ! zs#%VaE?bYFD+GM#5pQBZ?boMx2?QDatG_StX4}|Ud!L+E$3n{Kjif3<UiGJ+Go%;Z z#gJ%I7&3bYF!9-J-F(7^@04dj_i0mHE6<>fM^o3{pkHmLv|W06CJj4mHcz%!O2>18 z0J6JV@cLWOMGKw5Ya(*=zWK&=j38qEmI>F#Ve5(GU}x~+OnNi*I()9CLU4M+8cRR1 z;bA52J?X$Wu@*f%oQ3~g=7ZD3Ni+tSAy<KP%z09q(nGtgcdyJdUhFp2X_<}G%PYBF zpVIT%w`JOaG&O5V)>3qt*Vs+oGYpR>FdQyx;8^xzeNnto+QZ8g{{elTDjaz{JT<eH zLT-+$*&Ps|%{Rp>L~yKT7%yM=AttredQ9w#rrFxxID`4u!%&Dk^kpbSpjRu?7X`|Z z$pS3bLU&WxnCMR5A*V~jv&=_%>kucZW^!_m@N=?0YY_`9azKZqC+oF~EBX`z##cjr zP@k&y?#)T;=*Tx(qz@}^mDLvb&`4W#WW;NgwE`V3JN530m$hb(@^CNhd!>8Z(Ki-o z^=E3c7WG$oUE1!;kdm;rZCS2X+lB;lazNUD84pG~h}1)8{n)8nI>{^1fT&mMn>tQC zXuFHZ(HK|Z3#ac=%@?OQ49VB@S&Ow=q{uZq57LLd@8uZ22d6Kj54yr;2VvrC3l`IT zEZgO2!6H)w5z&C)In3da{491pyZH+c5pm_E8Ik-eh>{`j){F$rw3iO(iyIRMNZzU9 zh?>P5S*fg+h0YrMJBK!DCv8`MTLP^&U>>RoG^fr+yh#l)c3xIIR^};2QiwrS%rLri zd4ra;#mOSw4o8<G+w^An=q8Rgu7$Q=pVHi$a%-kJrH{7Ao&`w5Ij~7q;%~dy`}2pf z_uY|)2l@(Cd0mdG3$2hkejOdI_X=}{9$CcdUlEXb5YZnMz01D!|HxEvLFzUfJD-)G zV)^x)o8o<46;-M#UhP<_H>pTX(T>ax_f@pXk?(>M&jT+xs{U$^FWPp(rPft?BS$g} z<1Xy{tbD{bryYGZO^jGJ`g0wzQP59WPmewiLyfvfwblsp0U{{E`m**!y5r~iGNhyx zK~ZX;g?(#9JcM6=lqCi@y%s;O<C7-2GPs@dBqB<r9LrT+S=X)@-;j8{sP)tqh9d_G z=~G;s@1#&!9UlXSc^x(tf}{m^Y@ug^pT1w(U0H|d-eP6V&s;3^5=3VbN(I4z7Zb(> zrR`v?8%(LzA*)d3H3Z6(L`onFoB|73px5@NMe2wG_7yy6zH;0V>h)Rj(mUXF4h=mL zefTOvUd7nNoPiIk43@A~W|dN4!pp?RtRcQXEwuy+Q$Kh1hc-x~F0O1VQP#k-SQ}zP zQPOODl*668*xYo73lW$0Ea;-Q+cPG%`{Yrg6!qCsxpa|s(phK4IB<g1g&sp*F7`~h zHYhI247u9~B2TJolzktT247`lkz)Lgk6aaM3u&;@9r-7AMrBxzyr~N&_O%JU?B3Xb zT8fjfZrA$Qld<7kx1MkKuVt5LY^Q4rCiH100l(1j{7~B&+b<b@QIZ2{nJLZYzg}cD z1dLq)Jv86&6u@jk6W8-`l$?#mIiYYdv=JYOmBq58?<h(m6}S4kY|)opJ#y#Fw^bd` zB0%ji-~8eq=(XG%M?}~L^Z9ylKs3!~9P-?U9)9m)MDU|6OUO>JG8F4_PDQ<2S#8Tx zJ|XZ1jAq#m?9+NV{CUg9QNyVfsuUl|-KJ>`ajrjFBPEWCAk5-r&W~&1f?KA0&b3~^ zZF>d<nHk*pdxlh%mSdqXTGEb4wf-qav<TorqG@Y~t-#2d>fh@49gNEQgK!b@RYXwv zkG9JlFq9A`r^c~f75l57Gsr&PBh@g12P$YMD)-mZivovyoL@6=84`hXT*1_dKv+@h zS5||8BJK#t&D(=^k<#6uq{}_uP!f437&<s+{k%~iB9&m|A7iNXZWOKfCobDSs2hot zphSFFFDUJS>#D7<?iKV{FI#2!jzsT~^CMQ}S0eu+X@XuZ5gDWqN4N~yh4==6Gz;^g zQkpe89g(3<D>q-_G6aRRqg54a^&>`mZ)M0MlB*;0h;O090KDBH8A==yzo>BuP6#oh z@&m{qSc3E;O<t|nAspI%n{+$?N97KgXkt)M5M>pL@^O$H=!l#Fu>n6mYcJtR7iN-r zOK2&JCk)cG!<_G|!Q2<hNWE?)adFy_`1c5H3F2Z4D>_P))sIm-##|}JMHk-6<oZhd z4lmY%zbV#sTQflB+g%d79kT5$oR0Xorzf1A)SqZ1>o4>02@hPc{tbV%)~*qK7T1H> zWwzY}5020UB45nHMh$tVi6OeDC_BAs<vpz(SLxOBHO~g^o>o27puLQN6$tH~-_9PT z?N$;{c#W=8bi;gmm>L3rHtD%olpnZI@I<dFQsNx{I=u+Ybz{IAo`J-mGtDXg%Nx-v z04FI4VHYaWr#3^+cF=5jp0}4fcNTP|?(j@xxbv9*`agV|-2i&E9G%^qmH4%3Mr6D6 zg-GYHutw06hJf3ekU3Yi@toAOOZQS&7?DVmj!aC*vVox1gXX)>!OfRYAuM|R-v8mI zsK;FE9dQgNwyBN8i9+VRg%h66*7`JyzMZ*&M`+J1Cvy3~q_Qd{{_HT{mie9U4bUI{ z0HQA<r|Y%zb^iwIA<=H>n-;PgnQK?OPRaj6+}qPFSk0w=tY+&7!`6(f--z0+*N$U5 zvv1Dp$r?6oLOaE&jo4i9iGHVhp=@4WmCnv370+SS5bYTY)_KkuTQUpVz>F8Ls04Jl zTpY?Chq<s%E!f(@)EP?)=)|HqwQ~kKLU>cK5O7B+<Vq^+6aWLH9xPAbJoG6wuhD4B zD`&SUYsQH7QP!(4wulb9q@6MeWU0OU1mwZ*qRDBnAovKs7B?!Zk<X&^01^9>+EK0F z%H%C?VBXSazQ2L(4DCD+I4rr?3ZmYs&-Un^AK6mx+dpIt$gCuMG+g$ut5DA9GPE=u z<wF9})-Va?>9WV@7IHwbq1?=I>=Y4%h(i5cV!jj0h~1notY4~(_!Q$;XgO4%pQHPq zF=Wt8mxSt91+3+Y*Qe8IdzehjXlN4~VJToXfm1TUUND^`a+mqSdub<eTx`&#^@_TW zSRc-iQl#8po)&vdKSP)AqnUh>56<aXv;N>QA?u%>7P~6<9BcD%cDxAKF&I$_d8Tb= z+qe+96dRA$sF15K6by4v#2NTbN%YcRsoyaT)H1=^jZDB^uM%4leE&$+uE>>6#x6U* zx?m{+3)$hiK|5})`Bpl86SEhORM~Q9>P7Qz-Q^l>Z=BPF{I};qxB=>GkS*eYdBB;C zfp(#V2L=1CE(qGg#DsE267XYvI#79@v5~D2L{;mbyBH8%A6SGhpAEF3NoFETd$eHS z$Zz!PyxLkKdZ2amepn4C-81|HeZ;xHd%DY2xt@KGl=u$%BeqXcYG6PE`&+Ju3n~sP zv7<tuDnGh|YYwX-VmyxE698PVf;l~YNZ70b`n5%1iS`K>o`62L7%I7)_;WdzAlb@V zPHG}DQNP=rNJp;LZ$wbYIP?*1^Sjz6Bo3%P0s_Xxf;z0;KY->l&iC-I^Z?dz!Y<kh zL7Q$gEAg&ed;7LCd9Bwc`e^Qel)jeDA2hXAtslkNrnL|(>)iAhtV8eqv*~It8hSPW zF9w2yc7H$?pAfqy5o_}ZT_J7_I{(gx`C<MZx)=-ib<b|rcJ?6FQtC<N&|SoI>JRgP zWA96yYXf5>Ud;c9HRUoG_TxUOVyn`CYSUBu!c5CAS<d@rzD?95h0nNvwmsG}Pm2fO zo}+YEH+Rx$f~=K$rRc^0@?y9;<AEG%GJ^d8F04LwPm4rffS(~O0}MKH2s7d$YBwJE zyLg~V{MU!#rYSaQxzb(b7k!MSh9${f@wNu~A}aBMAgUhPN2BZ-`p_eB!qV9*hF^K* z6%VnA9u#xT#Q`LL1KDN3@taLorx6KPP9KyD2p15ln%|<^bPHKUvH$2m#i@C@hwVM_ zOX)Y(9%z<mg#x1QV)~K9nw4P<R_;EXCj-j^>epVQta|(mXfG150o%r(a&uP&_fsS} zheli(&);E6+Io)O9i0S=-o|<n4`T0@pY|9vE?yzcRHnrp_q{6mt0D7Onb;mJ8tSkt zqCdjuYX+@lY*^ZWA*m?YQa&*8^r{HB!q!AurNt@T;dIlD9I8L<%ik*P$nUFML_+7| zz4TM1tnG34DhU|h?N<$vP7%xO(o)LQUgf7Xf#uY1n^Ap&ep&<%z8IcKL7E(`Y6n5H zMOIcl<Kbm3qM<C#jk}+S(rWI_<mD?b-I27-%VOgv#-7O7$#{3tPQ@0?nCwzs$eAE* zj)xKfp@F`91oliCM38lB6(qPQtKSmo9qQTkOVml}mJ5)JCrV95+Hi-s(^go>2|o2H zyPh7saUuPehqsi(ZvoLwQpKLg2Rd9?<07&iX~D`Wo)tI`j<_Cm(W%K+VvCUQ2f2d7 z(O?b{KX~LqlFImj%8-QU=1ks>>hDKw$2-R}DlU@L^NHeOBP9k@gtH@dK2}adZid7p z2UM4CBLRYqt}by|ICAM9x$F{GF8$sB_0|wwUglD?i4t3N3Ch@9x*Rb7{aaSJB=99L z>O!DfUu<6<dv|_JdthCTk~r@)`jwS9c5OJlv}mRwg7L#<?URlykW>=;FyxKgHHk32 zZiYjV5i3CuS?iT>Gv!FKuo3$hKW1~qsC>${)&r*S0<P!B8yh>iEMVSW;T)xWWTf+< zjA4R`bjnDlaolXhZlrhTW!{w`?IeCSUd*;0`D8`1gxr?Ed_tQlP5ilh9OIBtc9P$K zAV8?v2zXl8jRhEsaNr;bH7x?yW$01Q)Nh1r-jH}x3wA1ryT=PR?&Y*0d`fp+**dS1 z_~v+S2`o57W_AOhakbGYi>0hsFX$xkHHKI;%-6899-y4r>OZ(x&t!xo-uzyhC{^?; z214d^L4Jt?@+!uc^IWchy0Stg0cTu%A}~f5R9orx7wL7yfZrAzx&FsSCgVk&u>gbq zcZUg#n{d`XP8@2*yOHrx;#_HWw9%jaHMs1a#IrjJG!iq>-nHkVteMX822>{0(O9u7 zp^a;h%31A}CP>}}-G6$RBpE?6%C(J5{|Bo4)b2TXHi1@Fdh&Sq7$s1oUza!NVYgB5 znGMd-{O%S<=n2qVeQ04KeHL%Y6UQxmik-6}4H~W?rT(hZXhg<R39S*b*{NU3&GBUp zDsNHZH{|oE+=AM~$BlJ44&CMEzOOqk_ABvHdU0gAuyX6fB`52MiQ-%fUE<3PWkPvF z2Lr!lJ7oz5Oh>f=k+K4G?lWDEFyr?R3mrx?krfaLZu$1B9E@kG@=sPJuy4bYxXjDw z7anFv!Y=o*#0${{?3SM=3^*`QRpwO@c%2Pkd9x4&k;A5rvt(Eh`McshZ9$tJX*J9< zBNcAE0K0w>XOBe{EJBNnqUf!Yqx87~ZP43Hw=vn%#J&B%@t{%SzY$)+{?wCBJ`_|R z@nHxJ*1ab)e$Zmu5KR+^ti7xxz`KESY&!|R36dwu8v`B6eYc$C-OC$dEfY(kAblyH zXuo&`F;5&wk~k2#h}{yG?MIeSB@UY;@mcuL3fT5Z`)_QR(rvVJ%zHmhgR){UU@{Z= z!nfq%{LJ9EvbRI;D&x#8Dn=z#F(0~PTXKZ#{f8*C6i>J^a_H^3VprQBQ{tCkC1<;B z+)jX<mxXU^%#6~UP%V!zBy}@^d!3}th`r~IOmU0`HMY^<^mT5vJlns<t-Ya{X_1H< zsklna`oCv%Hh*<xjvwqI&dTpzwh&$jek5^{^&+F@ZQ8zhUUi>dCI1>W4PcA<lylr5 zHi?Mvl3%lw=IOQE+DpQ~(JLznB<iPeD)C0!27nj|(M|ggp=YN_Wu0r*g~x3>=2CWq ztQ(UVpWPo0I_ggTwP<c5AEQ5osA1(n0VRMbZK)8asWL_UYWp>DfsgB=tT7eYXq3cO z+$KH>Ouzh?;pgfWoG!n>@O9Z#O4_Y)pfPaxw+vW$MtU)n#bLAV$Go;rj;w7&$_$t~ zG@8=p%ysE>t~i3gz}I6n41o_}bJtp^k+JnbIe6<Yxk7Ax@rf?~2F*?%W>m+pF^+1e z_0A9*-(K$w{=IUHo@MQ)9D6vLplW(GSXPeiuXfY;Y}5pFe*G&t#6LAe)LSDUvBpZ` z{Pd-7QnxrxJq!-dOdj_Or4Gpo==BZQGVD1*?Y@^_GTCSy_#{g|?f<DYRV2%>c|fk1 z{{J`{uKSCiT;f=;ze`PV+7s}ivs)k)(R>Vbn>8><pACAH#PxZZw>YO9^h%6+mmL~4 z49+nrI>AP?v}1xJ?U<^A8)Z(^S71z%qQNu3(|*Eg(y-oOGooiR{h@cp8ddbp+4PQ| zu(@KZwkcxiBU~tRD2er-pb*6;8NL}zjIyR4DqfKdy>tiLxz-CI^^k^IcEtCl&a>@o zDdg#^5~(HLP}Vf$fWNJHJHyr%5CbX;j(Ds~-5%dTU(^1qq#<cXtgn8;bC>A|19l_@ zYTzFoV^4}Z>+Cy8;YY|11$NjcWl|h-{Gbmju6)QQ100*#r`ls*%jWqKo&o1ni-Q9a zHU`LV{PL||%N(u{$7nc(0*moRjAO)_5s!k5S<bS4@1(sJi`ZqfO5ey(OO-F^D&1D` zZpV1q3xaX-(8`=nEA!R=q|;KWVvo%?Dr;W-#Fjtq-%MB9?#tqw&Z<&~!*_0gCI3_z zVDVEnU4?>_*eb&N%!jF!r2|<k?IV{9me#mjfP#Q^Up&LbT32E@=-%z|v~6=i5`Dyt zYDdiLFGsa;A<&u)q5<p2!q+h{P}L01o=`a{wh;bV)rXjF;8@Xy%yqvNJ}_H98R3e> zZoy6lgLvr)-ZOn8_-F&h;hr5xj}i7jzcu_x+Npq2ZvN@3JSgGFB;M4p@n1ilX^;2} z$ZkOzbA!WFBv9?kuO$9}wERiyH=;>nsoR+AS;(9M9c72j=YBT&B#rE3uDnV~T;MRW zRx_G7;t(h6ChGWk@LJXz2f0x?W{qi3=ruD<85nWbx|F`OkeOS*x7d332qV%w8fmk3 z&}e*Bj`etA$E3S_Ns)l3>I8mbJ?@I_kq>Fv=Mj{_?`qXtxDn0*g87Y1WX4y$nwkrg z_6*e0^*H^m2HPSA%>#{QG5xnFEzEO`W)GLaVF%@ILHHpOU@Y9z`alo<6y(8Xih-QH z@8ufp<7BS9hs@2}V?DASK7sV_=SDXMSRbM!*aYg94oio$@CnV0DI_DPRHY`~?3h3u zsJV^Q5hhQ^z2Vy>9dza_J9F-%IfGz67Ps-{UV(-4h*&KOG#iWES~7Kk-Vi%c@sfIm z-uO4ScDCLaJE1qe?$Kt+v3|GKXH-iSTOw~-fTWFN7A%_1^+N|oiEg}{YmV{xy-7)2 zMGIuL9vL}Lv`yB<N0^gtba3=$9545lSZ5yQO~p9$$G2?`fX|4;YUU{G%B&aZqLOy6 zTBtWZ;?fI<1jqy*7+;k5-`MK<6PML5j3DmRJKC$7P^%CPwZJK6Nydx7le~8j@!}EJ zNPH*kACuVrk(=>eX+>0WnQ+%fagusRv)dSGCs@jzhL0nokQ~;IK1tdh*f2W)Z^MxM zmdYaiX%Tp*--);8;VmLnvzv^Xz@o7E^rLC`v^fs;N`e)CQ~kzGew@}%uoEi8?__Nu zcTnrM)pE_|i<dewQf)wOpx5XlE^@`4Bzl(nta-UY4zX)iP3PtiR4hua>LEWoe`cCX z66uks19iJlnU_GmgprVA9f{d`GbyveO6A}!z6smz29jy2A{TIi)e-lF-{p;VU#LMQ zExm1#HppeW>EnvtWp%=3rtGs^X1;78LPgZs{_MIgd*M?d>bk&dMG&xHMN(OfDiDSo zh4}%BG<{@R+OA%Eod!4yIw#v<HGDoN+KAJ#zr3S7H5OoN!7YT`b-}C};q07;Ocy z9wcH%-q5PlB^i4`P*x|?P>M!Uqt+4BqavE9h_&1eY!%G*R4S~zn>bmeyJk?1yvSY{ z(>>~QK{@hAT{x;W=*=o`dtn+g<SHqJSqb+WRH7+K6$raI!bpA54zJ6&$tMbN;ls*Y z?VZT``XtX~laQy6_-KiaMPbwP+VM?QkVcB(m*EtwX$W{L>pjYvv3N{8V<!-M$o6t> z;7qjIJLa(tws9qFnWoS&jI%1Rk@h{J56V`gZOc{SdNHPXXzVm-t6Bn!b(Z2GPA%q9 z)dbYp2GQP`W~$ZsF#eP<YrqGpT=#=tDI?Nx_4~ruWQeCeF4?ADf<uMC4}&_?q;y?k zF8@JB(3+do7IoC79n<{CwW?}|wcX~WG$oO8`0R>J9cR);Rf(aaNA!Yu{c?dV`eIf3 z$kL%<5hZ9!W}8zw)7cRP2L%1~#oD0PiMs3&wjejLoLj&opfzm%>LG|5dgi<M<Mf^N z3@GqFh$6EK*K2614jx!VVs9()d3NicYH#+b?R^LB;q@+i3ux?WwM9@Q598FcP8<b- zlRbJ>fi8E!L`R#*@ZCrE3o5JK9m^4@QF*7l{4Qi>A6I#&NB5w(c|eJ?8_H|~e#Z@^ zZ{k?xeEplG%DM8gdb~}dwC_iTXS>opQI47J*r2p@Z)IuZEwH4=SSBtr8=lN85i+TZ z&)Y}pZPSQ+oLZByy4t7Qf1QvSnD|;h!AUSpPHgMgrO$PfgpQQ%URx{3+Ce1qH9Weu zht@JkkPB#kO<j~FpC8MQjIX><38B6M{TJ(#EB4drbA=H+sB}-0k)HKU@!ZeP;Q1HX ztJkpS9(H31H5#PxccLyUrq)N23J9EOe(x8V$?X&&9k}i+O7qf!&U_J<bKR_5@H70F zZZG>Ey2(4P_z(I-ztM6Vm$>A@=|<R%+}um<WrwoA@kr=dZgYV?Nj7G>&FjUJKMF8I z^$RmcvH9N5GouM1l<gxa^#F8A)?>n($xFwNb|($US~WbvcfMo&5FW=P^=N=DC3=n5 z&EBwntM9nuGEYnqbXDdt-V>ft&PvVZ#g{lzhsWA-EF%{;3L7;{AFU9IVTY*}grOSz zld4yPK(*=BAiwQ;bpde=*jeDKya?=RpJ_hj)bLT_Kd0eXOa@zMIK&gpK9)|OGL%Oz z7EF5(nNse#En9vU{;jbOajrCjh10J?7?(G@T3hU%u%zCuSNo0YrHb7h^Yw*pqm13( zV(mY1r6V&ZY&BZ0bYiA$`7o%bBUd11x;Jt}AD<k{g5oq;sxD$PNO30G;2_IYqP*II zE^TY-HPHFo2DbQmwCjqL?kZW^6np=8^!Rz|q@Z8DCU|z_%hC3L*A+p2!$u+s0rSWl zPNrIPmg?Cs9s~K2qwn)1$6`cEx2v-b@xm+gJIgB$wU66?+ty+MIs{!)i%R$Toh^ZL zQbk$y&ftdL=`V_Hkzywc)oo~zfJBX8V8IL27X1d<m?&x0G*bWgivEtL%BhLS7X3Oo z8kFWlHp0t;=rp}RyP#h#;z9ApekBg=N$>(<_V9b2C_7ZzW4&Sf6GZQs>{5Rky{EyY z#8+TEv<iOa%_?9OFHlb-?BO8wcmy-4_ULj!Zcc7>fzn+tuqmn}ZUP@bD@a3Budbj^ zI?D8W=#y0-75>PVW4*}j>P?-ForRPX?VTsmk>ZL5E?nh}nA%njNv$s8Vg}Sq?l}F1 z0x{ilEsr?uP*BF3+LMF<5aU0W#-GHwia$L3M~?U-4VSA=7G~-LvwwBuB6zR=V-OUj zINQZauP&;nF4tgnT>S*@?$T$-O1Ccu1rlR>AMZS;vnDXUvo24s4HLobI9s1uR5{hJ zp03~S7IFRYd_u73P>T}BF6yt7rC3K;>TE=jfzu(BOfAxD;gF;kcQ%=ezUb_%ZoKhG zPweDe<>B7^t-X8m#)+O{`^QCxmME)!mII{Pk-PSxXJMdxU-+xn$vHIY7I=SsQ6Tse zV_YM?U(}m%i&S}giDLB9(`X0E{ColIQ!Pzvkz3MC46$=82C1z6GdPplB7GJH2!F(~ z`(~M2{mvL^c*8WjzWnVY!!tr}1ZOF$mdY4iPwv`S92GF$ck*_0(_0LLt%dZmh@YF1 z&d@*evI`)ZEFv6tD}VCbqU~SMYvsn?lcGb^QBO7;tRu9n)Kow;f}F4mx}ewOzgN8H zI+Ol?4F6XWDe-E7wa>=uqa;7N+%6~V;brlBoM`ILBlH;UX<OI1BUcd^2mqC}CF*5b zErPdw#2o$kq)2U25WBrdGQvms`{<CQth!tHg;Arl{|jAqPu91y`!CG&KUwtewyHn- z`DNmHzICzvoc<UuTJ#QQ+avH@j_iDwKqVP^^-OF3$;@|S#CN+-0$!)Qze&9R1?%~d z_eG&3YaPF@LqOd9Yqu*(Z*y!wZ4r)vjkug8N85AK<09h*l5QpOYsePj+eIUK+0R~| z$)ewLtZKVoyhpFZ`IV^473t<EO9l(w<OB^$!Y4i(XN^C}N2<*CGfn3(eJ8do^^4DW zxD$-q`zP&&2_fu;UpT=H7h1nR@u_Ezi)R;GKlt>sn0N+~4^dqG^cy#4-lzg(W_<dM zYs4EDaT>l;o?RlIU1FX0>1Sg{`lcJ!;PFu)!6L_w<tT~0IIs(bKlS<6<Id;#7}#^i zKlR2_nK$zA#-q*~RhjjOgLO&KJ48!%#`c$L=U8`q&M>aWFm84rUzllPBJQ8@>H8CK z|BX-2`i#t=q8L;TxFbBV29aK`%Y5@(>fftbO7}M9Px5t|wLlcJiyoV6RgdWBL=y;) z5g7YCI5wi^R}gJBd~6}n;5!#wM-+WKJc6g^RLt_LXW9>A?OvIlbR(sDM}sS(=y{Tv zTT7>4k@aivqP27|uFK66w~lU!^59n?*!cTMu{VFd@PD-H0VcIwFR<3>Lz|z`hS&pj z3UN?U9i4oj)@KKE)Vk<Uv3f(WK%Eto)NycmPp5W*98_-)<}dv?c6?afA3L5_zh=lk zHsorfdHXj@qVS5L|0&aUr+(%5Eo}B|z{gIyF{OJ?ELD=~r2E?LtUNBP~Pr{%8> z(Sm-+rr&opF#0>4Y6$SbCK-e^a_~dWxa~p7Ub;j7LNEa5U}e>J#^6NQp1bkUy{Lus z!O=MD_~@UcB<9dE4u~6tN@Ci`UtT3Kix}Wwz7oGhnB@@`?h%RHCdovHt7a~A#d^xk zkM3pGIAHUttA#HI3Xgd7`?)QWQwGhWM+vHvkkZag$2u|f9Jpr8tkQe|8$Q8v?&25~ zeJxKSbGY6NVzL=P5a(;~%;#M0`(1P<D!=Gm@>l2rg6HVh!<ERRSLnCMO8gihSnvxx z4lxE!Yp?^JK&Y6cx>%#2?J?(NhUEieU7Ew>6BYpINeVG65+T-HPxqtC3(ipDU!$wo za9TS?Epnoeam1X=BbL2|;Gs8i#J|sc;~qz;)vLszR7akt*p{4%kJ|6xvUmN^^$}PW z6ZHCtE%$OL&&;rv<X{72+d61IWVb>{4@WS77d~=$9|`WXUh0xdMtIHEOo#nSd=rpu zi&Q~<E_+n#)sglaii%wEE&7@{UF*$^_A>D?I2!#6i5)7t&2$PZ^JU?S!_z8p7!8Bt zRd?_l61;|m2%qSIJ~j|2-DW)46&X&O@+^MfPr6QXF<W>E-b67%sEd#kJ6`Q(aS4!E za1X0blS<+t`~1~2`SL{bO8n6reto2ipEYsnfR{%53y39W6#$%6JSWneqPt(XCB+7Z z)q)IrUZBK31hPn?Y;b0_g~SmYP`K*?t+|NNrB&9-`>SNY!Dk_#P{v=)&qiFfOebM1 zpnuk;;gR|*0Yn#fJu!b6Ir~1O*Q^aEGjuUVY&CU%4aq8qDf}}?D<M>)Hk>*a-(%(n zp`sB>s@xAMVneOu?kxOC68;>@tZGx6jXhd_WTW-lEPjjT5^a+u;fBS3l@}|Cf4Eqa z;{7ZTZevnC3=nc%`oXk1j^qrlvgYxT1`CwL11{bjO8jYF@fE}A<+S%6?*VXZGqkfK z?F|TX2sWU-!p{t|sOHT-q9m4_;A^b*L%iC5m?;oScUh|i((%aS4~!eVaEZE6{F=a{ zaaa>X6m?+(T63XCX`prVp9Bi6pfwm7D|;4*&lG&tev;LLqtW|IGo5$bJXx#exEPb} zJ=%w~JnEewn}lV}>%5T#Sg_bu?>cv9b+eNA^LY5lC9CIQfXQk)nbNt*>Q)-}s$}&d z`WgFTl%9wzuJMP)i*16|lhupGH>&t)6F==dQ?GF!3@X2d50jF39m?w=mmohL+O>J2 z8N!uh$c5xpO$%K#pBu`JJFB$a#A{!47Z-v6th8i|>mZbF(+<P6o|AM+cQLxPj?=bi z$C_`@4ik^w5^ka=A4D8%+eCypae&C9yH81=HVFvpQtaIJ(ThK1?mNUst+v~85An{a z!YmNYBrQbXM45Kn{OK9#^i6Y-4prM?K5&NU<p7eQmb(Q_ED=YJX9Q^rXh8i__*|kh ze3Bf@QQ}w9TfuW_@K+H)ErM(CEG2#gQZh9LYCylW;sAlEz|l@JkHV>r?3zR^ffDCP z=-uztcEZ29CGZWXj_7_(E{_}mGYw&FfBIQIrlC(}omWjDXsRD&lvR(988u{1VS1K5 zV0yR42oJ~hom9_Ox@XE!B+6_V1DWS+CB6ib=Af*s`tle-3-z`4sc{11&h-13ISnC* zkkvww$VZ=1H5+!85+gRABv?a#ad|o&<~@BSylbv;j&9nsp+TXA{^lSP)yN>Dvq;`5 zFu+(`Wwe!ZMZ2R*MjiW3x>jRRpi!i3#euJt1$f6JoOn?{PN5poVtrCk#iVj&^&DD* z%1M6OY!HBFx?{on2xseLfvqFFgK56-F}O50k%`i6gt6KnA9;}_0vEl6i-($TfVsTM zesseU2Tl4T_m3PSG^r;<eG~@MC0SsanE_M#5`gKY446(|M_+uynd*R&fZE17SG1E2 z9BnsoGvJ8cx-$zjYBY8)z+ny$*E+d5$9fm82}=rijw2hwsFhZ1qa_9tI;nu>ocu^^ z4J*1#CMK*@64<qezAJ3fg#!Q#18GtGj8^0<5Q*E^etkemEIKZ9UeSB$^TajKLl3)` zaxGWk&~a$zzWkYpJ#pjwI0G?t4S^P#!t~gt@`cD~w%a`O&QXi}dz!hnm`LV;P3TZD z$;}&O=ibDmMkW5R%y=!pl0PY|?E!4G-NY*PF>HG77}erD943<*B!<kEPe}4`$aoHs z@s*!A6xJ(NZ{H^@AM>p-;@029JB3#Gs9;0DTxdya?NLVJv1vXk>vcI`#(%=sevUo6 zQg=82+FiqvAP1+9;Wj6n82M=0PZ*B)C|7-1FAmrq31#M&PD|r7f9D2A2kh4o6q-1E zEQ<*^^dI_swy(00FfD!<2Ai?Qb&@s>hN*hZ(`7-U2R&3hC*sz&Yp?0P0K}*FE{yH< zqgX?Z1ut1WR7Fe8sKQPL4Meu;XBe{sGZ^Cs*YYs!3N^V(99no*`Yh;*PV-6*T&WXv z?20KaJB|j0G36{mB!!E#K3aIKel+nM%wg8?D#_{>N`DXdAggysFe2hWfy8?1fwKL3 ze4s$w<paff8kX~RrU{unK196k>nX-};P@f7zS(%aX9U6jd042p-#YSX!W3rg`u6wu z4Q&&rEa%w!#YY4aVZ_3sK#4?Tu=Rk43zR&KU2dKjXR{T>fuxHS#sz{4!5uA^3oy`g zSqc?_Ez73aH`j^PYbGMCz7QQE9Qu6@A1UpG0u4A55H*Ndy+J2K<3cHOG=yo=-!@0M zcFxb8eLU_rbL%oE0xTyrAgsp3VP)FU*xr*$-1b##hz)X}vl2%{IWdzyV$f&d@)+U4 z|JwKH@&ifuo33KDA@EyBJ&CLNMol0Ls{ns>&~}S8@ry(T_3DLMqZ3Q+XZ%NnD9ujD zhetzngal>5&eCNmT}Imj-*6G92m|eXkV+B*>LvQr!b*hW$Nj*;T3Nrzt@%2kU9W|? z+N;Sr@f^o1Uc0k^-t#U!Q!fi>TRC&Qot%E<NOJl&uyESD!UftYI>GdzIKbustROAl z<P#1R$rB`F?V+^rD}qJqh&d;p<`E2-P5J!ZsO;N!9CE$|Q*OD?l+!vQNpq|N$Fuor z#+VXo_i@HPul4MI1a$&+t#QF2xd@IA>2ELuQ*L|t)o*HJiAq@S9cQN08_NU+mYFx@ z@k_|&0BBsxi>ac7Y`xO$6$ycg10#o=b>pZ;TDXyOM>V3X{N$vV2oTizyN%xyLPgHb z1`lFAA}Fe$5yb(b4YZ!bJte*)5YMfLTVg{}M}h9-f7kshE^5hCgFB?x5l<ianqF5x zKSg>S5z)v+`qIM0K;%67P+84I66XdIZ$`!q)IkRF+b#3fwiCWL=NXI3we~=x(Tt?= zaBFaDduaPCbeVVDN^|XX4wP-0X*3l^&a*xm#s4FVd!G_Vq#7u+`Y|;c&LxI~_9Y4* zxk0mt(Ku*cd~3$$hU&{1L3<C5#_1wnUOQ;9ie;db=}IhFV7{3rm;v2o{3ePm?^|rh zFEGY({T=x_cjPOE|Mb}Lx$4DSAG0vBAL%mt3+Y&_*uq#$VuSUq|8Tyf<3#ogQoCp_ znmLk${`<px-rU|Os2@)PgCmZMhSxZqsbJ|g(7_uPW}mW&MZ`;3drqd)nX~H_fe+S< zkNB)&nUD77b@ajvexX&S7W$~478@SJ;2;KxG<+hY9Htc(^q~SFzeIFHeU_m645&rw zZQT~=j*0IguUH@3A1d80{`MjIyL1Q0O=1ZYk6+2gNjq(I5t5<Uo5%2onChB9$#lZ+ zn)F>V5A~O0#AKV1sIY2!`Yt!$UOh&f%MA#JR;$^AGN@h+ny1yei3n*o$r>DbeAY7R z-mDF01lb%Vu{E>tSyRg%`*3>U^PhV2Ot-1Wg=6>#^lH9<`32FX$Z_!2aYsKO^o^$b z0(fZs<83f<Rr(cnY<SCeb&g;|B9T%!D|*>q%R)WE7W`)(pp%gXI#y5$H>4?K=QL`o zK=qAUj(ZY*!66wDSx0dgHPN6N6FXEnn6F-o^Jk<*T?8%r&4;LEUBQ9bPatBg&l5m| zH&vOoXgS)W-fG@)8jbu$+f7g?&IH}T)6KE#j_fzW%p%rDyg}QwI6O-iL7_$FrvGv1 z-B>!J!JNQWPqRK~Ji;RNj!6VFzNDMG%}tYFQxv2)wK8L`r}3eb9erqY;az(3hm)Aw zgHUfSo9c4X17z&qTV~DFUN%?yu>v#S;uRRl5l~V(pkD!0$C5yqs&@z?Lu^WzeLBQK zlno2+A_-#2l*A3O$v%d|r!o6Zs3BIyYprkzeY3q1ZYWccZ&R;r6bwO)(5`5;ji5p! zJ<$h6X8%diTOar4;-%kV=k%b#<<~X>&RpoCwwwq+@pSDNc)>!mWu#(=`gP*}$3>c; z8fAuM@jha+LPg-~oK;m4H>R-@Q@<TK$7JUO%rfIguE;F4?ME?~+ROT>wEBfn>oI8N zS992VuX(V+)@P49AFzLYPez{&R-Miwtry|G1Zww4*$JkvX?>&Mvl>UT;wC3@a8oC< z?%<K`_9Q2AT?2hWY;V_!yX94QJkhVLjM1CMGO$jxnUHt>ShC99$#YuKi(leOxyeM_ zCH`^p`(&u<LKmwlyerbbe){Qg+Mu%PXJc5_5<9<G3(3ey1}V~%hKFsfN64kbzwa13 zwIRSo>Z#~kGGr`<?23#iC=GMmeAPwUIZ~sA3e8JS60kxoNjY#jePoth4mJ$gF=G4P zjSe+Mu2Q<g5??n)zCzbId|ey4pmayHE%&R+!+l1LH#b^d9wDkFxgvSdDb4bNF50)v zytuJtEmCJwbH`bT$Q(1qme8Y7xJibBdXozXwHaJkh!w=o;Zg_+Mth+Cxw8O?IV}$K z;Y;u(m#fNUBd$+*q)%V$EA8Q$0R^3+?l7^7a3y$F6eeEl#JklikM!jC@zB}>ZS<c? z?>{8gJ1QD)*Lr)*+#V|jVbJeMiF9W?@F3Rn{s8of>ZRhiMtn?>xwI;yOo8f4=@zZg zaN|4pG$piALXClj1XTVFB*M_s*l}VyE`^*ds*?K=Vq&&9xnm+%R;qzkWi^MKH?`z8 zau)MN72B0HC`bVnL{E68dEy#}jETCyIFSGjy<D#=r@I%9#Hs2f0#A<Fcru_J<eI0+ zI!+UktYd6T)|KI}G>hj2<}36vwO5?1<8#?Oft<9ad8N=djt=*u8&x>vHrgf=+ims7 z<42iHFz+?9#$a)j_*vt4{%sX%V39Ia<rwk#75&N@#B6H)L=fj|h<-*5inyau^E*hO zUzn^Dl|*`Ng+&a@XNYP(0j=LW?HwX9@WO>C$M=WA3thGthk2Q|4mn422~Hj*F&1jL zNmWG9s&YWk?iFVm9r7fNB1e7EbX58=@4Go|gK?AkMZ7J{CP0XptokW5=i0B(Dfxjc z^n>rxuNH#C7~~gPrKPgr;e_Kx*<I5C^4@>vP$z}v6+^=~<_mF8tHW+D(mVn4eB9<+ zaN8<GkcB&Q3krvF-1_9$ustiUMjS6mPje-PT>-Y)OmSU=>pi(*VAqI~gGaTvAX7;Z zIIvDMM##Gg^hv$BbO-TgioiEt7m_y|jttN;y7js;?U?a{k|>>@hl7kFKE0m%&x2z0 zaeR-|Ly<2MjUR{jIA5%yFESQh^1VwBBSqEwV;LpT7PuVa2a8uzYc)Zk4}^xCo)|ya z`$rhQ%wqe#?A-5(@_iM(&n`oK7Ht>XH){*@S^l6`S@m2Fi(_u3d#k=)?}Wbc?exE# z^QMs#m(}ZQnPy16xebANN_W1}?HS+c$>A~$kv-OTPBOpXO;$7Ji#Q0uYu$4~giPZP z+9~710t~0_loIRjCs>on>Scg=;&BJep`iNbPy3O2O4D}5RL)P!VZ8<BWU)A~f}BZ% z_vAJOh4$tcG4AIb?T4#S#9eVvm5Cs`;m+JI#nOe57vc4ZBgqpREQ~y1-2+SZv}TEf zV4wp^M!<u))vwnwGxl@)M!i3AK<WH=EX(Abo3U8Pg**cr1J-L_7m>I?G6xV@=;k4| z9vuc-YS%iib}R818lw*?{z|fW9!v%@-dFBVB3#R@waOWPI58aL;L-Z6s~{cLdPNdr z6s3hVi@GoFq7xLePKHJ*$QPI&4`d)poeqrQP75?QHyZh^wTe6NVv@AMio2p61#-j? z^U0nIw_Kgw@*@MMPU$1U2(5@qWKokC^Tf1}#Ee)~mbM4lcDg<-3T@Bnw0MF&r0sAf z^JjV5VSM~LPncn^rYg3pAJFW}sf%@PCGkj}7<N4m+tVdrlz5APlll`g)3d%wGE8!4 z1Q9Khy)@meK<Xx*!qA`toGnWHd7*;y5q|PfNfRM~n|Art{|zZz+Ty6X{*%>bGQ=l| zbsKeED(bXY9jpn}XTu|ROKJ@J<5uiaCmQ~{Q1iWx#P<TM4bCO)kT$fCtLT^mO_>9B zEeBlK@2O`~Q>hndKWJvWN4>c8&C&y<1F1jJ*U(_W<RM7d7%|z@cBV+QaXDs5;lG*- zpm&;$cBdhrGyWd7n0yyCVh4u&U-rH|Ag=1#`<!7Q!^1OEMMcFrwy3Bi5}Vp!P=T3& z;Sn++gb+g#2#|mhKp67Ss3?#y5?XE>t+r_!Z&PbqThmt4wDmzAhWM!BD~%@BRIScP zRO%y=80UPywe~qPXJCl-`|fxDa+1w{uf6u#Yp=cb^Q8EH@v%;<f>dkwX(xy_;)y)p zF6fp?;q$u-Qu~u~ASU{g?+{W!7ZG{lF8l&Z)^OV^P{D6OE%fOwpHHR({<i4{<(++V z&3%nfux}~i=dy-I&NjX$%E{;)ca_C_GpQjJedeE`Oul*2>+#<)lWEmG*zqE5AqAGx z63hqG>rq(JtkssbA5!>HSEX4WN4;l~901t`L2`Jq>?bkln$bm1o^xMwx%qxe3f*r} z>Ejs#OL($NOySg8=bJQ&++0Fm*5+q*s?u^m-0#vFV?TXkkUuSjI$`A1zN7PmoHb(o z?$0G5;%H^DFSF15tNv_$HKOxYv$^Bo^g$xeh(dBte0S&DR8I13{mJ{qJBEFiWnI$o zCLq}OtOxCsHPK72IcUL{0=^%T={w;2w}10&KD^ya?3}zxR5x6s$L5Ck?0^_0a+r^R z;`bJdDPj_T*)WYRy=VG^OZC}}D@}a+sdLQ?$=XXB(LPtE&jkfNU95cxKDzl6F)lm# z;6a3@cCNT@64uk^e)1paX=$HC>S^VLJnZC%+H^M@g+ORN#x+Rc^XJ#mEupjuy0DqK z!2j)~q=u(oXR4ULz@N^wvIG0;;>e!@e_sd5I@F0q{=UT-nD_GK*7L;XH0fLEfeQqQ zY=KpDr!?K?HV3jH5RMj9%GRD=)6qMA%z?FlE^(nc#eW^T*3brh;)6m0L9y0HPZZa| zGz31^_Fnu7csuX`e3~?doH}?+f5@@>6BfM?i-Cp5gtH+va1|}Szt3ZJzUYXw@+t-9 zjA^*$lf#9|kZiMdf0sF!medaFLona3vURR8Cs{X$YqcIT$YzOo<cH66(=n#bnc_p1 zR`;uXm!fNsmdKOnNOQ-&?t?T3vG&j?!tXNhr{(%wCD!fpD~DY49WzqEem2<k#<BQO zc`$ys*Hsy~{e*Vz#MX7(?){Z@J$-Mm>v)d$r(L@`z4ru`Y4QB>!-%hs_}<oEWb4{x z@5+MGokz;WPIK1t9ixPNpiUc%{KX&gbDykF2D}(i{I6Uk^r6UcYMU6RF5z)%`G>(M zL)n8OiJg-;q9)lTl5}pMB=!$!EoFq)hdPhPdS`X*lxNMhSi3%;Vf|*v+~<h2oyX;l z!yxI}!=2S}uaCSs{V1Pr={jz+cGG<nmS}r(%u_}lUp|1@{I5O=s<-Wqf0}s8)_?l8 zt~l{|zXa>{)>Pk9JKsI4>+KJ^-jH{`VUGW>>#5FOPwHG=b}C6r^B?&@72nvHJ_woo z^}g;OZ0Vtq(tKTPe|L<u9(ZGbyW%~eWbH98TCzK0J;(oFajF{I_Y|uZX03FSFCqLr z`00am-+^8!&**En^<CP33#KB135V97(Al0A1q|Q4^Bw4$pH|Udl+?A$;@`KCIF$Nd zmMhJBCTS+_q<)X3!gs*`0LRhdYTx{ftX(3uD9LxAf^vS>5SxkE<cQeTjV!%7i&HIK zdy=LP^7L%vlmX*UTd&&h-yctFCO?0YsGLDdBw)ClJ}1jH`XWot&JWI`xwvmkewCQ~ zAmk@HK#ui$&y(vZ>-VPf@ryOI1B1|SlJ5m;?+-BU?i@L<`=B?8BK}I$u$I0^H$ko2 zXQ%o;pq(?{KHt-W{@9%(u{0fj(-gmZ7Sj5v=+F<H?&+iFj4*Ov7(>0YAeA2ZIUDY- z!*SVWYxf5x)*1R6WZ(P!=J&Wym-B>MNZO$z+URcWo?()-Hx*N9Rhi{HUur8O2TV4Z z1^yWi674eigHkqcP1l(G7<!oMjeQIpN^9FZm-F|3z>s~T`honu#XKD>rbPdQE=Nxf zYq$ut>}j#oM$=rDr(yk{Uu}3?5;g3vkca(UhhwbW-<RnShAh;Ut}&Cfhn_#8^s~~f z8(PI?sm%m^<-6L;pe6mO|Moq_Pf0hJ=|NSJGYQ~`t|$0@?d%hMMJIgj6Im~I_-P8} z8wF-1Suv|F;n~q5GvA;r<9tJAI_*y{o(!4kNT)ih15&QdZ{5Bim6pY9kZL5;?vLvw z&52%R<<It_tI1gypR7H}gwze@OTB41;#Es=j%|8?J|jBddn)j6(yWh$&rg+5edH{g zwTmu#X`c-uei3w}yG^NlomXua%DV0SkfuxezqR`^nHNx0@c?tB_{>m>-~XPLj#5zr zSi7w<%f=Gl^=6;L;yW$ya8Sryv?qPhD0F_757P$D2;m<_E16Dtisd>@38;J*Q`9H= zwEc|tXvLn%+yGYHBzQA9ylIvu#`kwwyjJP>@ir$=^0tO3;<E+L4AYOU=ca?{v!1YS zi20m9xc$EMd%+XhIlvvHjk0dTBM5B}Q?|fc+PE_Pg}~Yqq^m>v20!QRCz}+wFv#0^ z$sun2t>`%%OLYjCgZiXL62rhfw_+IhOy*&rj7N&Ijs&A5IVO^Po0A+J(UaH=NgfkP zuHz&xB1!)$Z9U!pi}z>@h<$?Em0oh50p*6CeRb2pUPz{$@1Mu3=pXvVEW_5G$B4?$ zQXmh=^xlo{xfo=#c50gF4BBY)JxeErsN2!)Gbm!1Uwdyx<rnxj`9nPAZO3py8w<(u z`(@C--=-L9Ir=`{%nJY7w}lL7O3NfRI7Zzfne<IEl`yp8UXJ{9#wX2x2QNq^`}WTF z&lw3xk5uix+VuBE{v!A<HRAj>P|HNzPkDX&hewDSpYA4Vq%$SxQuC;|mo`+uY7hkJ zPytU#8YCe>&U){*e?2wlbIHHs9b|vv#2;cLQNscZyu3_4y7TbqyyzPL#HV`+N=J3) ziqu<49_@Uep1ACK8$kK6$<DXUU57u2A4RW6?Q;BSex5KpeLJB|Wu*DN;<Q26n9Z93 zeS9ht^|>()41Y^>`GD`;&N-=_U2i<z`K;`Fd1MpwEsZnOIab^J8SgTQG_{we5F@*E z`jGM_=z{>``?IS@h(3ScC6+~<y!Vv>R94UJ>+Xs={{IU-)|}>h!e8}{w#eS!Dtph& z3i?J@ry(^zKt03%-M2J7A;~u?&WHOC`k7B@v7o;I-RMeH8hJK6p9405cL|$9#>UKx z!Eu-l#QLAViU$%+RS?Rny2|Fy3P54b=lWKvtCIZ}v!AIBz6mQRj|=#GJHp@1g}k*> zFU0=o-Z2`ltU{*=$ycpi-9q-*{Y`I&780kwa5Oj7=FOp{r|YEaB#)=eqYsGwwEMO3 zknV`>F<Z9}5+bX_0d@#v%GyUa8$0MNkP4b@ks0~RIDLcW1oReyh1Rktb4UrV;#2=L zW#(sJ;7?u@So~>7;0pXF<TvKi;LusIRFVJOFU+r>p3>nM^3%-Aj(EF<59xSmuu~TW z>Oa%u?4<ZagQJzh4@3|g4PMHk!0BOlLiY3V+ny&o&g)#3dQ4wiv<QniWzlZ!eWq(u zyWTw3^|Yz?+EgAhEIto?A~(h7u`Jr%HzRF#Uv?Tgn)o*`pTA<~pYJDjdH8YKA<N{2 z088J^Hhr72<E`mO`yZyyF!*{T68Ns93SSRhFr#nV^(50M)UySDJq!HBr%OVNSbMje z!ozNb`Y@&N%gLdb`{>o$9{S$xUs#(MoYFNGXU*Rg)AInrthets(;EqKS;N*1Pn+o+ z@z1PKgEq`bqP?)Rp`MpeG*vp{vtd1>gb*W0B79*ImBC0#z8<<o*VnT(Nbdmk-AQR6 z?2irg9MK^8dXl&nsa(m!42eSeW@a6;cCQ4bFMiH9DvycUvMOM8use%ki*Re#Bed+z zA$)KFec9TZ4ou|1St3OqTXZFWQ(3zc5Iaj?)IWxDt($siP=&6%ogLQheR1@@khNzp zPN*>tbAflBK;kn0HzBI}IAb4&(D>0~;o4d>EbdR_0~YC>j}kn|dminM^pm@yOnsPA z`JZ^5pimI<$8Z=uu`;*9|C`r^KwwJE;#RhHFF%E9N%X-4F0J$U1=j9)ae7c+PC9=U z{<Z`<Hr#CO_S2&A!x=&PEQY!7QEn!4oUi9Zn94bpy;Clr7hda-wts=_yOVIa-{d{D zk6rym@?O(af%N@mgmP7oaPO2$wX_z5a{OM|j)|t0))s<rBOrX!$NBEhiGWb3L9io~ zNxoOgr2EwD?(1g+bCdek+Oo#H=YT914=wPh4^yPS9}2Ggs7ANGM>%OhO5d%i6O%5B zNGjUuxNY@?V$=5d7Z3lcGgp?Z-N%`b0*$6H8h0{mu9S6qUfN!y?UnoTl9|-gFj)g_ z<<YL0vDO|7z2%r=7DsJ+?7=XV?VNhlB2w?|x*DlprOoO*6!R7}N50wDeJ5w(PTO}U z^V(?FpebuF#_}F|9aC_BKE2-E^(%>|bv<6f`eBOA;*8b}6f(p-&bMedXCJd}*66C! z84<n{z!6#pWyb64r_PY|taZ~MRInlNuZ7lRs0aMiV(0-H>we=6p)~EK6<U?n{O=?L zFuP9>nVzKV4~M&isM%g~rsRJg%<bzL(`3Xj^CLA3y$#btUk2=ZluEkvQN7dOI>Zu! z3E&><dXy4>t&brHp={l72XT8pXYNkix<OUt1M1<>c<a9@TqKL5{yXW~N!GBJG#rn= z<eyr1%iy?7V_c>lCyLV!Ni2RVbXn~J1nD1E)aQ|+<sat8%}Mw5e9YA|$8Z5%LAj5v zRPCp^a}ZO>#j=<VKTHx3oSVjUwufjJ!_rHAnELQ_>UHu0kN?-NLUi0oRDnJq;L|*R zE+A$7-M4>LN?*UAJ>`_27Y|t1qvf;iq_npveVoT9MDO1Id^u~#x}iLQUc)7dTe}-* z)3~1+f=3JAK6$X`$v=xW*coGBy46#%My-xf--kj1WBBNr6%;aX2CWqIj>M28Mz~|R z>o`QHkiaj~R)AoTN1644A=aa7Yl4enVkWZQFJCvX-uDPfKeOJGI_oKMI_m}g@VP3! zGila{J1IdIz7i&=Jw#C7gG@x~|8(BM+Ovy>X%RbU_5F!snXUMtQ8RI2kD*RuUOF@& z80npVXpHm{=hi}>*F&SQ<-`A&oGtJ9hk-49nbQXY4WEbBF~m}>6ndY8nJYYg`LhoO z4MP@(iP4N76InjcwI*G)_VD{kLeFTGvqpsgDj3z8dDPlPXEdmpKc~~gy)?HJacJyO zYu;YNaQm7(o-lM}Xt4KAG1fi<0Ns#hbTVapbMJU92-(XC`8+utz~bd&#*7Y0QO<X1 z$Ny1-xMAVp+qKs`^8(QuyLc>>``qTP!3?2z7?h2kAJF9$=4aoX%sQQ8hWACks6SgD zLx=9UOrQ6MdNTFlK=0?F^@4ulxc;>!3?vtcQ8Caz7Ao@Cr~0}9x8GAICbXab_E$9K z4~RtufnNxfzRdoL_q&dptsB-7qdxS5BO3@~v-}TqPp+N%2ECt<BTIq1j)(Z==pLK3 zXLSrY;;h|q$8?@Ij)j5O#zN`W*yI<op4EEt`n%`>nzLRFNm#CoP_Fm{ThHmtNP_LH z-7Uv?#^v$v7hD)<JRYLY7ty(opAE8h(<kv*be8D?f(Tv~c>Fl`_b(0S=K_xR5gow6 z&-gsKu2PN5`C5*-k4J1?3Z$34cq#BTlK}}hUQ102TyfmEo;C@*gAGP_%{shaFg&vk zFX>=*THx(t6XBhNAOA%B_%nLFxApT7qn{-G<CMOI(&v1s^mHe<=Nd{+-)Hq@ibfCo z*9oS-zxWlNkNfT<2!RWAzMlR<;GLsz^UZ-3V_dm1|L^wet2{iJuy)U;F2Vc~nppJw z@*|ACEKP_2f%`sEjpw~X{bSjFy?@kxYW#kHd9DyA6@Jf4B83<r=<{dG2Yjr&_~-wf z#sHQ9%*lc8e6FoS(lgCkep^KT^EkiguTwso*k50GS)?A)L|EV|nqxv*|K-z&_7uIX zB;4C>`@|3*QVz;Ifj2+pS%OF4v%uf^q9}odUm$p#>yxP;ff3De{J5xx@82Sz*AjTg z$e+tY4LHpCLxufqjL96q*?$hpfe>CAlg|EBlq2}(u`?uEM$bv>I{ZO)?T&KtIY$Er zBl4H|pZmKI1FstHRYV&NfBE;xN5ei5=l=o7JtR@NAn}5u5$$29!q1NC?P`g@e}fio zRKt1L>%T>Yev&^#%J*FoE8pFJlWEk80oD+PK}{HL_y`2dV*Rz<%5UhuL4@W2ZDbOP z_C9R@WVOBfZdnX~1M<WH@K5`B0A#k@N&VzWYj^)~J~zTc-%YgT$=Y6)p%~J%SEY$b zH^_80pf2$EhWw3sXR|to^eJnELXxw8a)l&q|Kv?z(c=yXfxxf>FMcfKDGv;flCB@4 z(UzipGXqO$m>s7xolZBexy_gWzk4~F;&k`RljFJW<;n4^*5iaeUo3d#(vMjK-7w>r zE@rq(Umj%M&^mMM3!<y-)S4r314m<8PreF)?p*)-&(XA=7aWk7TP9FL`CmQ{U5(d& zX!U2oep>zc({E|@=L8f-?SZWBv?Eh^it#|2&BA*IDZ>a*A4;RoCuml`GtKVlUze7? zz`yN1m7iGPM)lq@zv4QX_S91S8-^L%EP8k%Y4wb(<4k}u|572qdXBEi@7u_QX{Y;r zqa9_p?IBe3_3o_Wj}iBK|L(t%s(vJ?FWomp%UWgrvjD|+8Q_fk#eeP#L5-3~!a3&q z?@_q=Bb)uNe_hl%{7<X@%Uu5lC>LFh&6w|Z0_DCA$u~rc*Y7;bcy_%_w};L}-Qs&h zXY^)v?MaIGzID%FN4Ecm&j+>XAfgT1M(EG}n-JGEGoF`ClW5uW(*wr*5gC9Vp||5D zLNA5Uv+!}0RR7lJwa(+6+BwtFVdFE{35%u=E?Fv;zyB)HQ<{7KOsmO@KDuuS3S0_+ zi+H(V$x>|vaA2PQT893Y-w^cV>lFVbi0}Ua-9)CIxvT#NaRAgg69RKr*PfI`yCVrW z&wn=Ozft6;rQiPE^aJ4afxH8<)O9S;n!n5A{}*!rax=Z(d6BXda27h6p4R`zBosoY zU-=#QGwC(Q7re8lztI1iR;mV)_>$9DPR=~Tx`7VM^=0;L`eQO8<yTpe)W@&sT|3Rb zR$B2)>oTXwU4yp1?6j;aSMLpPd9z%d-nZ7=wbO#6zBQJS;gEh!`IjSf<WX%s^=k;| z^_WL~%l_A7WO}XAJn~Z^&ktVQwKM798uQ3^^?ghv$K0`%9!y6&_R)tu*O&uMswU43 z@s%{0Z7>HsszE;(*Z%VtOn(m)JLm178hiS$iD2{%U|J2Pm*DIA#9`@b^vzVtu5sO9 zco{v9NYOy2KWJr}c7*5<nr3Hk9zM3#waY?>AAJ>O->#9<LgR7gu?zYOWN#*^4c6`_ zJ3hGni40%1Nh?3e=b?q}RG%k_HgQVA-ygmHy$tzf-_6pHODs~ml7wXwRx;Ib$dw{| z0(F;N1g7)s?y)&?|J>ou<MFGO@vMKu&2T%9O|^CpF=CfmyPsu;9aDIAeAC)}h#i^M z?l;*{i1`>*Znh;y|BjXgnoZ}ii~1{7-#<FGAx0i~*SE{JR~w({Yw~CJJBG94SAEp^ zS(<N@OYeAU`U}2~Mq&nhA9V#XZ##a^J@=f&?X)_!-~4@fP~K;KtXS@Emwmg$<TP)% zKbK%U*Y&R4b^LSdhJW)hbCY#@u_<t)8rC~zTTFo!5q@)EL4@BDD2VXe0^f=7+XEMc z{hh}yv39qiMY;IZ*}laPGBI8L%<OpUhFju8=Zm}cqMmUazUm|2=*0)<9G$PjmNjH` z@UzO+?MmmdY1Zz8GCvSN-#Q*iUp~-zti(I3^H`Jj>ds@=d2@YFcfI*~=V#Y?r*t0k zc3esKKNNuOJl4?hvTrBfLhSmd{Ng+DV<Z0(=iT<1M-KA2J`2BN1y&t-n!4}8gLEFt z_bCK`z4Nnq)(wN=h^oc9{a{S@-5b%<)x&gv@oSP~cwdzDcRIZ6o1dOlo|bG~-y`mt zG+<Um5ZURa?~D3&?|jo7Q<avIHN5&8q5d`~55=%!w=HXU6@7@_PMyjZhm0vZ-!RL= zeKwjo?h{X5Wcp}(%icRX&F3<6FOd2h_-P!iusUD*DodZo9C$|DBINy!P89Hb9q)|U zu3GGUK6dpD*AHiK_8fDTlP@I4v3M^NM+Rp9O`nMD_2z4xEq#^;^TZu-T)jHqha~0F z1NEYq<etGb=gNawV?MeYv%y8&Rv>HMt}DVcL1}5$o|h32I85()+#-WvUZL9;9VyoB z`EvgfnYm*1siM7h%R2w8`UpId>O0_DoO<!7b$g=kA3C$7@&!+@n$KmUyY<%Xi|D#> zO3%^$;$d-Ztn*mBbv-}SL0hk2*EzE9=45O4t0ocT+v_Vy%gCZn&#s@Ua+M-lQ1b2E z`A>6930iM#wcU8XRvwbsvD20{wu(-!H1N~SDLdaW%VXkIg!9ZK8R^jmuxH=`;0km| zLQ+oahDMUZJAM0oL(2!ccA~y=zlSByhamD^-<a>;oyXF|(H(ldc{+sC)7;BR6sRN$ zND4eoQUGG|_64z2&Jwx5RAxD1-LQ^Mxj#Fy4>EEclqTy>2D=8WbRINt)#u{;G>OGO zx8qOXQZ0mTW&OF9LeBb}$&sR;v+f$RTE9p4AG!|HcjL|iup|aHdLo?g3_an&6SQL@ zUP9~|n?iAPwaWUvT@+y=|Ec8fp_dT54$Ge&5D&9w2JSr}-n(Xa@jARd4PI9m-V}z{ z7J|oA?O7(^b%nku8N*PE#k|}|ic>h^as&1WdTHlsrJWuw&BCRbL#6RWf}W2*8&{f{ zfxbpFxm!%&Z4{RZmP-YXoBG|u*7a-5f-5)Bx9ok#e0#a+&(cJ{Z*=-mh<|Gj9ni5p zHh5c*+8G%`Qhz(Q_g?Gmw~Iq)a{p2p@eJ}7S_6E2WGIr0Q>gEG>6nk`<ke3K{XZ-Q z43Q2klFo1z4C!-8E<NylI>Opv=f|#S^v?29pDz%nz34D^ul0mj`=su_+DdEc?6lr~ zR9u8kzKRAZ>xOs4ODzpM57Xm8DSgG}EPjjpC9#<05vST7-=|9>dbcgb+P&>Ft%p{n zrOm2@RN56I1PmX`a+?Et<uEQ?pD`}O8ZLRVa9VG_P86Pe+h+oqYc;44)ASXHUi$Ko zCa}6|#lqG+L7Ztoh*TQBpt^=odx5?jN{4u6@@m={03|ZgyMnAG@nu(Y;K(ulA_g>s z8JM{S>Vw++`&g{C+d`{I^Mc0p90RTXdOSL<vQ0)>{Qzyn&)zXwPZGTtqweE6Mwgf( zX_ZRVE{6yl#u!FdJ!weW^|=-ZB`xqx@#J<H7m%<gG&E@MnuP_scWQ`#Vunt_TyO6U zGuOL&g4$-1V6JZ;J*o5^U42G`%pKKbE}a%K$50NIxpX96$Xs6#s$*aW9r8|xT8LRH zAEp=AnM!twC6|kjv2e}sjrzdYAOi9BqbIaLBEp#@@knd=x+YcWoz}-0<tAFk9YWL; zy#tbT;^`lMhlM{P2pw!C+!%Gb_L>6UCz7Jgd+JWmhN{&U44lEsS=uS}t-Az=i3N&o zItCc#Fls!08^GL4U(BHMNi$J-k9NvMoZxF46f{Oc$~iNz>T|v){)409F@2I-ftx<# zGDWLo?i$z4t_g~!Kw)+|#zO_A>IE^o(VZN>B~%ifaZU;Rj41U!NQf%mNVh>i(IHb{ zzp<=6JI9sv+NWQttj&){mPL;+80Ui(^B_o(y)wNoC)xLkZ`Y^KfBHh!KC9!^o`W6n zBYDq{cr*I)>4|#zfJa@Gq*i2#Y3$qbl4M^#Pb27nlCGZ(<);v#5U5Ryb|WN4XVwwA zZfow#NeQK=Q`!DipJ0Bu>z&OKJwwxf`yn4~4fb{4@eJtsQRI1U%1@`S=py)ThB+~w zj^7|nT(2i}`k<D`@P4})Wm^0uF0*|zEdh9&dflmgcN`#v;rlPC^o=1g{gL>uSP%^z z-w{)yoMd6~lxT0xx!>5E^Yx6O9J>fj6IOaBTRd&^xifv986ku;eCE;pohoRZ2fgR@ zIg)@&0=2n1ZwAOb<Pc~$w8LW-F(0Q%coo`{o=WhhrPFz3o?*w(7C`qMlypp9w~&0_ zeSm#29mRb&K{GE-?YrLW8~b!P#$oe0Y(4LJTf6>g@ml(dllD4gS;8dV*2Q0q&-AG6 zN$Lx{+T&HkVcZ$lsp@`4OUwfu;%?O7kV6p2AqXVYb8Vfa&taxwdj>mB0S0{z+r?ue z8)<!iU)SN->{xF)f&w)0*4yWLPA}31=&=F8I1i#wl3~JkukpOG-rh02p09s2{(O97 z{JBx%!AoD?ZQu|1&o%n#4GMzc^Vp;2567pSto$jUZj8^9`H}Iw<HYzG6XL`0(<dw6 zg5Jy7z+dCuvmk!S0H5SQllpq!)qSP5UT4}F@SF?#%)Wd(1c$9JKaD1lbex0`%BMrx zmcD$tb4CX+-L#MLsF=x+yZb7%#q{?AZ%g{~8ITc}p=Uj9?S4mK?d)F+A&&WTc?w2` zSQ9CMbgsKcwf6p!l3)tf^PaW)oEScZ4Lxrc__`N7?NMI_lhLD7bd@fZk1Tc%c689K z7|L;*`OD?7c0Wg2kt##Iptsu8qxq>O?=+<F&_eheZNc1|R#m2!r&R;O^d}+c1rzh5 z){-=kRh8!Umib;oUW>Ko43ZE_l2Of`vs5}~Lpp(f2Q8@&ilgf$mBq5zceQVc4f;zT zooddvbnVIT`6JGGh%}{!G(=nd8bWygMvbxdtOn4T<!CgfV;|oIw056Ak#dMiRfnU} z!Xfj-&Eng4@fd&V=i+0u)`jM9?xf0rg-V4G5SKN)=k#iy81$x9vg9x4)9nPAF!q4! ztdr7jx~fw!@Rtbv4AnT(+Wk|RU8vAH6SD$0?11UZHtc$tbD8P!LV82Zx9?IEJZUv7 z(W_zU(>{1l-@`&xrmN8_6ZrJ=uzYgz3PE@IL|hSNk52p^Mb>McN?Yamsj{^vja2ab zB)yQwY1r&dwqRBh*bpwS^EkaaiOH?+3HscEKk%WLkBO$F(Ni?%u8WU@shztt8dQJ= zCYf)`L#muQvHs!O@uE+twUV@bOCeXR-TVz()CYnh>G7B_iuyeS(Fz?N(Ve}sqP1Vo zV2C2#i*!2XCkaShKtm4P32>;Y*N>Wd-=zBK@u5a&W6ecy&0QgSCYcx(Q%|pihGH(w zhdYm-V%-EKxAS-c=$8Oj;QbTE{Zqk3-CHG5&oe>=2jozG&_6+^|IME>{U?NP{EWjz z+wL|{ZCo{eBhrP7`O#;_{=x0d_{Qt_{`GSMz7d=r(aP5Dbg`$z4LWIa2QG;y4?F}4 z5KK_PxlaR}55N|gn2fFpcb@`E7^K16aniu}t{vc&Yw%u}2v55tbt~_i3RvRsk#YV; zV_^}~v3rM5sLjwJnM>n{10#f{&mY)l+>Z`10;LaJjVKNY(Bx4Q*YTf(#r4c%A#rVl z3bnuOILBD@qV>zECLIGRdUp6Aj8;B|+de1XPO|ai?CV$xbpJx4onP-lC{y!$#Oc^? zhzFkJAwKsxk|xH{tPk7ct=m(;7`+SC=?7_UdFO7-ujE&=#=Lo*Gr!UCTGswm7w?t% zZMa?X$g|q}1V?*R-}4>6=i3A$)57D&akb+BUCJKo;CmN<AA`)8)gy+N${{os(I%9r zhS-tn3d*Y<7I?i7SwG$n`um@0Kj=IECGmbx6R*Igp{nVS083ECYavYMU-u3FbKAu} z+?eWJ(4%&oJ5n=1F&_W+aKzPg^Zf(an{VA7m;H^7*R`yh!YLq6;zowT`z`ve(00vl z*s!DXdYpZJC_6p9Z``<>aDS5YBWib=AEop3pRS#)OH0FCD=AI9PTuo^?{D5J)U49? zG&f)G+1BnK8(Qx|eSUHB_VbNgnbL6x4Vd10R@C-;P_*ClleJ%*b-OvOSB`8#o`uot zJ$uX=eW(q8FR(M*XW{lca|gBG>hDqe(P!M~o_jXEQHN^J?0JvApyXYS+Aagx#D%?N zG@ATys7V&0HP0KV)#&Z<zx`0u_M8bo9j{RmboCVfU^rC@wJEpPp44&enL438Idj)T z5iOb;ZqbSR!{7N6)$fPj4e@9HAL$!!{zVT4)&8zca9+H3XV8QiUNAj$&cm$Vd6}<n z`YWZOw^;VrvOev2Q=iNLpN}T&r#`iv3cG|0v-HPqy)BLe*qMC<(xdJE?*F~EojNdm zaO9oH{C9Bvcl$ZNf8(~GN^?SgI|skmug&`;?MDJomQ2!R9qnzGHMP{%G+ox-P}5c~ z-1SmfeQQgb*S@S{MZ4YGa;5!(_5=x@scrSO9p1*K_M8>X9n)IcR!A4L+Z$R|*4tZa zR@7f<&%U7j>IA8vbiQ3rC{3R>lM<y<;05g$Go;Hir)N&ZpDZb1L0hBOTi<M7w$@(M z(q3<OO|#FgX{&9hZ*QC?U1_gxYint{(k``hc<n9A?JMh7wzREHK*Z{rw&up>6^N>> zX>M-uqQIIu`|`%7dM=^eTi4jEN7W+ETW_zicQiNN&{1!1u31?>EkRm+snk{vH^Ar_ zQCH6HX{xUQGBwTZtLxkB7p<*tzsTMKM{~<X$mpqQZ(rTgR)@lMr@dxHO=B|x@N4jT zTd%zAvem0sPt&M$S$oTJ?`k5iPL|7%uAsiTzOAOo-caAvYVT+#G>AxgT2M0zq!smE zN`D#1Z0Fz9shoe(Uu#=qvln&eR4eP-+tE;{Se?CoO`~^Of(~R=eOr5DOY<Z^+8bI{ z+w~;j%o6ydmTKQ#-&9}grO1|6vf8f%;Hixn09*?~PHk*%uWxQ|^fs=lj|9B3=K6Yj zyB9cu(IzBqYz{+Ch>qFBU;UcaHdK?apz2Na5*FUIt@T%xFZ8&gW@%|fLx4koe;Ze* zotO=Twzs#|*ETM1tgo{Z1SDu$%RuW1Xt<=S%3O{)WzMCpN>7;%G)$9lI?j6o<-MV! zvG)3_=9Pz%NBl(I5HhP9y$xW|`X;z*TbjLKHR6^UjdBdNnV>dztXx*#c2(*8*%{NO zO`8O&R;St!c=Wy279x2IfN)uDHO(vP1^HGIT=?r+RubHkU|VBffktb#3nYkwBAZ?g z@r$FSb!}VYiUzMe-9fToVy90iX{-eU)Y}U@C9A%5>6P3k;103hx2PvJp}E>Z9YpUO zO(JXiWh+{nrZsq1HeEd}p}e87-H!ju+v@8LeQRw?haC<Pj9y>cKvibmZmX|rB*HH1 z080>?mp9ZSC18}!u`kFiE6Xh{UzkCeh(qevKzw=a;GmTx$?AxjO*N}g*}9HaAXGzP zZF)EH+Aq2QvSfK1$Z`QwM3MyeanD)?p^M~o9gGt?Zv6_#$F=t5HH}RjZS^8U2Z+NR zb{WwQ=^zt8{JMJZMH3fBvRl9wX_vRO)pE-A>l<4c>o90gz4m%eyd-^5=G3gkm!?k@ z_Qls^Tztv+pfpLMylu@8T$*rZnbx$lvAM2(&C({2ZfR>xTYJ4Gyuq+5TN|5*U)$<e zpet}$ghOjv%c{mYAl#}6(RO=XOY=ou2nBC#1CrIYueuz-CGVB(^%BW1N#g;DI-^8w zRO^*mK=-NjD_gy5CBki0O;cl?=qxPg1;HUn8ZbcAx1sP0+A*FrbzBKTpiO~Uz22$X zDO~Gl85sP$>=zmJ{<oTVfd(6<?{YzMZY*>llzk(hwXd=>3EDV~Aj9eg8e%AzNa2`Q z!DEgXS)ot0^Z2RN*uH3vr@U}Z>Ac0%ix(mB()_{_*Wv{9pJvd&%SF`Hcx$L3Tc`!t zC))hW$vl>4OdxOv^F*zH9b(t^S@y=|Or$R@dr>_=q^=3dwyZ?U5OEqvD71(Y5e}ZL zW6{!1Sc+Dh4B#>`Iv{~gImQ&VC+dYoahM6BL7`Z?h!w3U2z8R*hhwo8qyJNbpXbH! z%bK55ZS%2kJn2@62ESRF_*;#>S1&q<;Kz1J%C(oyFDZdkTCr+T=3;0#?c6h%f^97w zD;gl3Aa2ms?Q7e;^(!%6HZ`FpmrZMGTn3Gz$vahgqw{W<d!&1()Jyk1D1Ae^NUD~a zP!<#osU3Yt`#ZI!X?4xocFj}YURy&Q%HYux)J|Plvvyg%RI4e5+Aq}^RDXPRP(1+q zF4)(&g6bVGC*Yq3JKY&J2Xcezup_$Jhqx^;op86pSYXETf~s_qJpZW~y(Xyc$P?yo zIhxxc>;XqOE)@R%V)7zQiiX1%=KG&AD09$IzX<z(!EDp$OE%HEwNMzTV50rMWw^X3 zKkC2Kcd5TpAEiy}I2bzDLY<e+zO*fqNYF@^c~`bd<+DA`!ZPWy3#MJtUdca6Oi0ix z8)`bxC+j30<LYat)k;u<>{nl9&y;GKS{rJlj#dowQd0}Y4}>66s%`eRp*yzL)YeO^ zrAy12YMQT?R<zZ$Hb|`<%^2L))HSYX^wJPwzv?P`nX6!_Yn~_9;i7VAU`07grRJ8p z`l(kpLldDyBt)d9`sH5x)%K~=C82EzXZ?!yrH~mdLMagd=V556bU8T^Ksr_~B^P1d zOb)4)M`H-2X>BW)wzp8Oc5h9aHyTC5zx$5{RWet@JTMYe-AB+D;#IXX;s3wM8CTBT z@b7>*05fWcvwaCzUu5iGBF+D#$uYP+Un2egv>AZe0W)e*)fbXf^)E304f8Qfk7kcI zOTUEC(_W?7=fDIL!{LV#BVqpEn89%{wtfkiw`*ytzeL(EGR|=@(#QEnK-cGBEC`QH zR@H-N2%F3&DXKblX4ro@{3T}z_v4DHCMAdCjE3UKxK9s<{SN*&mFVep<2yr`ZD$J8 zin4Og2EW6+4EGk8dbkfy6{cIWr%w%sk$EFSn5#5HZe#o~{HZfkwc}ghFPKj?dlaTL zQ^a+CE7A<ZwAC-I#Z;1I70Da;+v{lxxwPHeu}qR$TUwWrZVqov?e&txvz(<Y%AiC_ zP>GtaU)sF9W+}-|Kwx!!>9RH?uJ<m*Eal|ljXro7@r#y*#t=HSOvg6dFr+-umlNq+ z?C)R(Vg3g5FPKj$Jq9HDIt^W+Z_<^^Nq+M>YHRD;+ojSLF<X)fwTTZ1($Q4YW>|9w zMb)-6HHmp9CcCI9l)`YF9%8R;g3iek1F5{NMoiq6fh_F^4;MorC~G+;L(Lez<~K7I z7*rNz*cUB<xe{ht22Ir$U1f+)r;w_2LrB$41_YaVF5R*mp;b4B>%>#@`sO-m_W0pe zPlC$UV%jbynd1rIX{$$Rm_HK?UYD4drffnGCUq_LWsNHgxL(ZIUkv)6UpQ~6%QLUA zWKQYQ(m76-JzWgK-j?g@o2SuC=VHk|8+=>{J}*HZg6V{@=SP~#V)P}L!!Vgq;>qkN z1<%9SW(%_gZqJ-~g_Tn7JV#-nlujc)kQ$y3Ii(qoW^CikOwF{ybQ;13V75g`ubXt# zxfEtTOo?VL)_Adfp{o9L@&BHAXOXa9UKIB0=8N(g&F(1apRM}he0n)MkhZ#NV)@lk zVA!ez?Ds3fVZU88u}pI7YZwq+-VR#utHabx>+d}0Z>L2D;!ZH^ih6B*L7yLU3bELr z&74{GQB-|%&9WwR8vMrVty+%8W?Cy}ILkVgqjz&zNH3ogGiwaW@ju`mxGSjAjiTYr zm_N}W@}C9OnecCcy$1F+*c)Nnw*=LXVS8X_Kp1wyu7f=a`vKUVdokC8-Fh$ShJXjV z6?W!-V_pc`zBQ=&F;TbuBB*vJqFmT7!5)M?20QbY(Cbe@xv-t|C7k<%>LL2<^REC; zf&bTl1A80nw_p##9)mp$JIRXp-(cPedkgGMum@q^PvO4}s(0HYDd)kUx(5Q>wk@d6 zKs^Uw55wLD`z_eRu*YEE^?TI&G{Awq5q9+-5D$9*c5*WOe+;VCbo6d_Q1zaUbbEqo z>KT%B7<M(C?tTK{urp!z!tR9q0PJnB2PuAUP(1>>8g}NHpvzED-3r?Sdl>d8?DQ0b z?+dEgusyInuv=lTfxQLxRyu0;B<KU1&Yvfr1^i&=z#fF%1bfR<n76?mhJ6V3C~WiD zfcrGcg)Kc3RM){i40{l^?QfV{!_I-7dJf8iT>^Ux>}uG<us6b%p2eIH_Ia=m!_I{L zG3=aSl$VNhu#?V3d9dxUZO?<=uv=j_kpD&S0qh*usb2?uV7p;&f!zdKdMT(r0y_ux z5!l19v(H00FQfjj>AvkY*xO+HVIPKVw*&6}pjrvr1A8Oce+S>3kMyuJU`q$Ucd#>I zZ-YGw+wu+gUq$(_J+Q0De+Y14Z-edrCg8pnR5!!!ggpw|{twh64fw*|0(;<f)E{=| zVT4}*xUjdv-u6aNJpp^rkM_I>cm}|Suv_0ndf0=oXFw3!F`x3n&Vjv={O<v82;)K6 z<*-{vfe-9a*g2N~zkh?zVQ>2o^}ZD4e*`{*Eq#o3hV6l!0wrY-b~)@VpP-+SANDA0 z59V;mQ;{EbHtc~h;03$-IPjc?`hFf%AA-Ft2)bQ{dO<ttg`Fc~+=4v{JCz=wH>>I+ zum@ltft?wP@ozf9r@#-J<~Ca{M}FwS<=;X*PJxVtZTp(4Hq1bIr$UE^oq3w7rhFTI z=&7x+N6*2$=nCZjI&^y2TQ0#EHxv0URn?8KZO}1af;|X3CkuYkS7CR48}ka-nKLmK zUI}_<t7`Tvq`L<A!<Gs#?p+1=7;`IOd*%R7*f|SSHSHR}!ML{-b|z$YNe=vN7)SHq zzY%ykK#z6M3!O;ch5Eog4EuiA+kU93n+uTc9#u6%G2HeeRc&&Uyi!$v5z74y$}L8_ z!p??$81~(;JGY@e7<dPM54~VE^8G<oH^I*NBlHZ|TVSVSkoG);^sonDKLmUDA<`cJ z?_uB%yA`%&jwC$}I|KG^*g3F=VV9FV1p1J@595{x>7PV7u!mtEfo*#V;d4<g>>03I zp9Z~P+Yi7lL%FbrVQ+!`7VKfzV`bETFi)9>{I39i*jr%FfISSm8usB=!5^@tgUAot z4*M<GnXt!T=fF-XN4vwe!|sGV1NIi!ZrFpct6(37-AZpg96~){x4sGdp}2V70w2J( z{|of403L6v>K@pmu&Wjz{vEUr>}uGLz}^CT6n3(v=g2pfN%A_2d`^<t+$+;p-zABz zuzJ6TenksMiX~r3DzYYe&1<A<&YpG2<!Rr@mgpT-;P%6yN{<yu4kgv8*q17)xk`#l zNzGI2`MTSs*vpjEe8pbMf9n;q#2+E<gt6ZZ*`wh>12|nzN<~-$1>`E0E|Wt^&YJ)- zSFyVd;c&YQ;qJ)vxmvg-cQ+L+(T4}<;qo+;bD^=EFOhGCEb#kJ@}X<+yeAp?>IAK9 zF2*>YiBtY1YUlwZnrl4-IN5+xrIo+ll&d6l#Q<UfgUde|0g~Z%avE-5S|s!U)>#6l zaAEKgo7uJaivPE=+)5G%VaeS~#2~ozZLG@wVYu|M(_z4^2HZDg0k?<XZivZMZ0pUr zN^)1MLut5HX>uy9Zl$`E9r;QV0&|t7Tn?PAIqGti2B#iatTecEcY)HBuLU9_IVuu> z(r(2DG?H?MfX)+&*_ntud7P(+izy<vR*Z{sRu}1b%+?(Aw?OgcDr<6;b-7BXjJQIj zE>8y}3Kxz!df~-NUA_Uk`3al>{yeUQGgM|GeL0RkM4Wj~P<>CDls@(*B_mhKbW@K_ zcPknB>@HN&a+UO4J*t2mMT)&RO5F<*9h}<5nTsg1maSMx%j57oB{QD_HHbXt+K4vn z25#O7JW&?z4&aYu11s1H5|ku|#sc|?^EkLju@V0s0=$O+?;@?gd6bkqJ)0X0!{;Ak zA-|BOelmW^SGJtrplm(grQCmhuJXY7dCIo)=PM7v-hr@3&UY(=Fk8+qL0m54g!_KP z3BQMJk(c}x<NTC<4*X7oKN>$3f~F6gpN|yz;~;pD!;t_K^R!|K#o3AO5WvV7@*A@Y z8E%1$PybO+Z5&Vg^tnogQ)}{c(duR3jD&E<E2OVClguswjB>zuX>#70xmd||D>?a! zGgomtm6BY=<5n`uqtrJS_07&za*C8pmog(yndwrp^OPJ<ggY}g!Qh{rn6J!mvM*oB z0bHO#pPP9Lcx?t=H)?p1ytb`iu?tRc=qyp4pjg03OleC#9CR<pjyc|8<h^Aw{%|Q( z6-xC|#j{kY%2ldM6i<Oto~KkI+@(~z6;H8Jm8Vqaaj(>c3<V<bJjJtu6X&wGRPhuk z<!<&msfT-3Owze1HK2g^wW3hM>_nOd(PK8-eyoj64wjKs`dCYk(d<DS4d?XZt4SDm z2MuAgHkgdCM-aAkJTD~Yhle8cL!w(rWDf*#2@xX}iStljbs3^&Cl=^^mGJ0AnPVvP z3<GYP5oX>T4m$#~4PiEf4NflKGfIeE)4;k;UF=jU84h+_t7N#?QL0B>8->LAiS;a) zSn^TM0%b<7GBb}El6pdvJjIYb(PbMl%;l~lP`JU6tk{q&m&?f2c$Z?+QO7Ou;6K#& zvB~9AXS`{N(i`tmHpb^F1MzMI%!WS?ewXI2G{on#9htsV^HX}4vI*gL!)%7x!tpMp z8%Ds?^VCHpoI^|DK@O(|HP29Lt^tArY4QwdJP6B2Snjxz^2ensi2|z$<as6m`sz=# zXNn@mk4jcd3wTh<(;CG#H$sLL7<>hZmCUsc=GsDo*5P2@Ee1pskqyE363Xk;%8S%f zJ(H*}<&%Uj4C#ubSKkfTGw%qhS=8>%Bv~r3#hN-Kmo=ut8)u6%b*!_+m^#+PoFgaf zL~QQv+`YL^IH0`eCUW07fc!gv+v$e>bOd303}N)0SGpuUjIh009X1fn))RkqnW3t? zg=EweY?~`#H>k81m=2MI&gH7)MoNSVoyvJk<-!D}qbsq537DsY(s1fT`DgqzsOslP zNH^Ssuq1>%s^K(&=S!8$IpOY@X=;f&ez=txZao$6Qyc+YFW^p%tgD0SS{+$4*0WPj z5$T_blHRnyn4u`KhP+PAo0sS{L`pWaVFO@|0oG<~M4cRlIt|D%%VlM=>{PbMCGa&W zo8(gEZumFLxmsAv56lS7L#PX(c?k6&v{(z9t%Xs_Tj6%;xvrEEo3FvnQ???<{c?fw z0L(Uq5N!l@B${@I(Ag}P!FCg{dt?+h8vr385TX_FZIc1@nANg|IE6S-U;zru(+Vs{ z3L0D1DbV+R8&rQbnQZeYIi_;OovY~yIr9`}k>bu{Z>f?~thj5Gk^;q(tCTyG%6uL* z5niFEcd(<F{<;e}rBf+)8dA<iwH;B$S1K}3@l+`}IY2E9ZMN=rLG_x+`O&^e7c4~+ z2}yk302pfk<6Mo;DQq3Wx)FB17G{STpfy{B6=`K@GR%~(i6+YT5Yjw@G-+Bs+P~O` zFh9cbBlDFiwq}E1%T1*Ee2lb74~FMn#y;Q3G7cR!mq*Y%R{qMNB^el+bcC5eB>lmY z_t92mCUiIlwS&{e>Yh{a%+s_w{0+xCxm6Kcu4GnDY!a=G51>r%gPK0i@)p%|vdDF^ zfY+wmBts4$?HZ*0$z=G=BgKd+S4<+ATCNgG2|G&3F`*Sjo6%EEgE|h92y-Ir(1V)J zg&(y`CBnuKcAf!O!ZOdWC_r`UM7mL=`=%jXvU5UGUUzr^X+K8Vd0N`g_~u!rRJmFA z^h7kamhUa(OWhV!%cAAOJk%2<AK{jID(bfFi*cj0ZlrZ@o7gtvljk7Xi?k(3`*$sE z<d{=#x`TTtwC74j%$6G|nz_6kfZ+#>3yiqs^Z4R4;zn&j`x!^Jjcbc>2?=J>X-GT1 zzT=ro68qgVPZQ<qbDhXKbjmA~Zkg0F2)&Jv!vpdX1V*V0(W4u%*8M)HzA_0tHY$}) zrpL9>=|N-LKEO!%Lr}fcfIE@hsiZks5#~9Zr~%b=OiTYo?M1NZ<1wk@VLJ`5^TM#H zKa^|f_5MKRH6U!}AHEzfZ9>}Y@oA&91GViS(&qf(<o%3r@*~}M{t(tP=o^?P5H<s0 zQ%q8H88H_F)(Q+*m@=ac@5g}m0NQgK4|>&b=W6bDEl&4)kUk$_`G&ChaF=NAwkV@* z9_9}sHRkj3vT+b8&Z)U2(mi)TiR=AiQ0<l`!QI1i385eru&9N5sghY3WymW`EL5^x zoRnylj0x8xe~cWf(h;`L5Jq$BY=ph^$M8BN(Y_mcLNCzX2to}2-A=hNL9|0|BI%p0 zG?{xSsNOl*n2&K|wT^c+Pl+&{chZtUcCKC}=mB{=VifZ7fh!6*ixQXWs{o61aD?;d z8MIdrR5LZ4L*t~j8c;k=5E4J8oe6$Mo|%Sv+7=oYc&V$Jc>MMtZRW!ooeX_NXGU7* z@*+(J(kvX0gKeH+vTVeJ=2iL}Iub$ZpL+l=8}PCt@gq>qaVT>6A0vGU()UP{wt>Al zJbRwF0-@NuVtY*M%^PBPeZ`p~NgJcqr<%2i+=zABJRlOYp1K^3O`XWQ4S6%7w}&=m zh=f4-b|ByV4@c8?7LQvT3=@m;jUwM5@=cq(JZH4>($7Mfli?|*aTD?pk5!)~>Zj|D zEXzWZrcx!Xz%V04l3tii$nyyD9Gk3t<|+fW<;o^ZxbC)L9ssk&2DKYA)lD``-EDaY z%hkf>Xl|(PwyLPhNpq2+5Gjg~!UK1{mYVy${cP~__VE4;=~gokmVvNMlk-nz6|clO zxa+!U$&eQ4ij>UjqfXUCKiden-tFP}8S}AN?kzG(bi!c=(yl?;$H%t^ajqa}zBVu+ zo3`R&T>2?d?AMR$>(qa2=Sb3Fz`a6~PsXv>RBoK}6(lY(dfj5)?V<dC3aWOEUeum- z2s?tXgOjgWc}#x-Ve%))Wz%xjg>qR*GnE>Mmmk_^SQJH~=Oz|ROiFTkl+GsnIjF9V zY&$36;vigBCyWE-N-P*3RGR3Xm<n~L`lo{D0e_JcK|h`|FVTCZOR-(6O9t1(RR#DQ z`rMgdZUxLHz^sh|v%mmz;bbtKiA#(yX@6l1Fnj-elKBBRshXGO9Qq1gXf<zM6oQk4 z4yP`e*p`xzcdZy0w*7g+9tRk`*1(O$iBM$=^#v%R!TrcLhI~gNX~2Bh5?NQ!U=HV- zV+?mCnyPtcO~9l%+zG(k^p~Le{$w<mtz@s{?&~!w6Hyq|nOLu}rXzw0^OczeJjW}c z#dsPkTEC7y_Sc|#U1XWYbr8F0?nD_uef|ODbt3N{<w^4n$mlVfpnr(f30i%aLxG+s zV#mev9KbR|d3@lJpc)%D2_5DFjA?OHEyF~sDNbl>PEA9b$NHbp+)7yQ3+s-Bng&;n zuv{&VLklxKV^HyK&=M4CnP!gzI!7y12TEbZT3CTWZ8SZGz(NE%jDg(-ltab8t`%9N zrL3mFTMXII2SJ`pyCe<l465hI<M|i8yI3E0=PD^~-M!4f*Y3m;gD)@9WZXM&(cVFl zzR;1M$a?M;l$WzBsNOyqzjze;d_&)y9krDzm9!##SSaSbZIbmT;P3)=USwbN=u5MX z$iJR2<|2Rg`Ix)y3eU%RysFUD-J(Q?zSQZ^f(jB{iavLta~JE7pWbBT^;ic{%`C=$ zgg=1r7f-e>c5l?NyiH%aaw|Dyirb--IA~Le7Qk}ZUBd2y3E@a@n$1fvrP@MF4)<64 zH}GeVcD^Hwi#vo%p^|A@GZB>mB&YLZb;x^f<oqh!c9?RQh8Y7VW3ZClZgxlOvH6J$ zIYkMlC{WyP&RGO7OAO0|rWFZ_8<i_gT%d;{iO^j}fm7$+pxQQ}%|q?XN=Mi$wg|t7 z7wBx<{eYV@Ib5-ophGm|-;6B1T7K{3ZJyc4qI8auIZs!siY7QpIZb}#-#l6?&Aget zbCpaFi}JZNFVtkZgXc;fazt78ssl>tm~8hB1=T~+B=|w+GdY#)LI&gJqKdhM5F(-+ zQS!2A<<K}cK$H4?;eF_6<8qafQNZe50r%$6&YC02$|3Ln0%j^;7Hcq#V`pK4K{IeC zUJqZst|u`6UjUhhyvs!&jmWz?a@<{N)G=tTTZO!J$ouMKbpbD!N({oQhL>ra$_z(% zyp51<(GQwLt2gZhA42(i_G!APgXB{c3m@{2A#NYyZqsn<GA%@H(8EmCoQ9eq^+M<@ zPX^U%Lup9U0F~yG<wz{VUy{*Iq-%QeB=QQ4ACoC7&Pv6d&pp<oI16<*I&5i_YC$32 z2yk026lZmZCxbm3eD@%)6Nt$MG!0X3RM|M6Q#qNgCDB(6+=+_~8cVf4htU)mlFgYH z!8{XGADnE>s8ne}o3@rH)g~Wr_=_VxrUiVO$R#|{wp-j#*~K}b>I!xM#C1wTA!kD1 z5(5B<by#|>sQg*T=E>Jms#fu`uxSJDcsThukW<6SvskGrP^uTx4hbzVI{8dN5j&7) zUerdR_NH^X>z)g$yH3_7pMNp63ldFkWhP`rfuOGw;0DsgS?Rw-_8CWnoLLriY$(>( zuxNeu0N^w{A5?!A3CC$1ds=va%;UWzQ?#xH9wgbEcCjQq16bC{#xd{*+T2~PZE%!` zvn>K}5%YO2@jP(T+-1lRZ8BbnN<;^9lj2^$;d2b(B?>>Ay9fAXzZg{ew7Q1Y_wA;l zh+S<&)0xVTk$&@wC!N33i3xG;tB4nQ9l8XH){d^kg;BQ;Ne8IDM3RP4)^n5dN{$KY zNInzDv?0pW%9XevYM~ubS*l!d7I3@fGJPOvDs&|PUTGWEA2=nw98@olISEd`<^{$) z4G3u(Lb-^!M&|vhkkS%O<8&mNYW2)T2F;{W$0ORtV{T&fP{#TGOC{;<zX#PTCzCtW z=X_D}yD>b_CU_qAu`<0&(zf~g`iT=a`=eFFl~}6x;Qt6^2_j0W0&}Ll5>(%soX<R_ zLZ!SwKk+0EPdRmIRHz5u6uocK`K&>du?=Nxifl`VfiA5vy|S_{kM>`b)&<JC0=VYU z`ARxv>Eu(EY?UjmOO-WFWt|J2B2M7ck72gf@Ucv%NLeB*fHUPpMXgC$S0oZF3ndl$ zXX{jqX@`QUYw|g4j%l^ddkd7DTcZ{L-M&~UDPpE#xcdP2?$?6q9*x!!XBBcI7pk0* zM;985-cs!dC9OshTsz%?_(xDpn+#tUq|C3Q_QW}p&AFd}Sp&F!z#W(}DL+@6cJR?w zaR`?N)J0KgF;74GYWfAIckuW&2mXypokP#>QL1BNWIol)r*Anyw^CQGCnz%{E<@r= zWc~20i*uVsbU4ihDDyBF6R*23Lm&NDP%WKYFQ_*4D|K$eC>~QF>s2d@I-(WmdH}{n z(EkCHvFV+lx-@B$GUh5L<Yh`H#-dT#^btJ8@Oa=^VQ`yvDPx%WpTNXkq%45jsYN>A zc4+PrxY27&Wrj4AKH9*Qn;6qC1FmVSR+1YD%MnnjWh6f)m?vaYgN~rj0KY}~7|F(f zQ@9+{tq5>wiOLZWbA=owS!0y2m_|9|3s<f{tK6J%6>2rO9fmR~Pn99gI}RV3ujEXJ ztoty0MrcC+z#PT&lPDCU{k|v%9Y_b-1ek{a^M@MD@Hw^{BGyutNBGJNODX8o$a)BH zW_%P>e?A#*JkF=h=i%MSGb&7^3fWx~rH#YeJ_SlzF;7bhXk9Od`2TYBX_QqMMgDkn ziNceud7%Z#T*G9GWX(pv=mv~N%cS^bf?H^gS)*xz6GuDK&8$-D2Y|N#)LVeN`Lm$< ztI7Lj!#eG}Je~A+vK!s5o+W@w?}et@^}7S;%*&Jpw;oZVpTCE2h^E>XC)RTG0;PJ5 zo^BC47E#}(z3AR=L4JH5RDWxpr0#Q-QB%x+p#vad4CaIh!&D5qm8lqRC%Zp}E#jP7 zTudV6n1@i8Ar#zu!sO7h<c`Z?T7<wnEig|Hye|3>%x58-GeBQiRsSAIUuQ(Sy{GR% zLzRdo$Dy5WhKw5ktW2}2UOm~kK)d6n*R+#lPURu=`yDWkzzp&_Xo+EQ)upd)-e?G* zM5ddxrA~dtwO!k;cj^g>wdGYk!04w871}8}echLi$1M+?sM{hh)s|+<Id2$U=Qwm1 zL_^o50j(g<Mn#-DAgD{=F4mwf(V&)SB{;P-(X?fE;!WC8F6F#MtBX#Jb@00k(8_>Q zk#=BDUviejIg`vQpwGvv>U*KJ@{&_x9UEfSo4aCTvSSkH9O_W+6MPVr^?#%vu&HY0 zWcq_gnNg;%cI5NEzOF52MmuI*m}u(Mf{j}ZMTtvTvlYusvy~aMS?P5uIi>n)l(-K- zceg$UPE}u1RsWPpaH948nCng2GPz5mIZ<H|{BDibrPMeBQTv5yRLkoyaL^nja;Ly; zp!ixXtcqafC5%hyNvtt&mgyLx^R#Gco?Nh%Lt`r^*os)FN^8D6t$?}kS8CuEz~8Fz zzaHN-?!d`nt)dQ{MX3E}N>Xx)s_r@2x^z)gP3C$&0f?4$@$_do-~SL(D0mm>j<tF+ zF}14T#o#hpyWNT+A3*taXQ}F$lg-;om323<dfr;BteYcTF_O%xdx5epUnuzn2F1Vi z7G+JPQ1VHeUl5uJ+@Ndvt<f*16e(V(vL;VtEeU~>av%fCvoQ9aqpGi*J}I3Jn_{-h zir-|qRyhL6I|}{cu*oz8PXRpFk*6G<TzKYD;ze?FKKqmM7IOHJ&;VvT0v%c)32!$7 zYZ2x`Sb<i=Y=k+q_$s*PYo%3CX)ns~m1y8rX{pFvrKKYG3P5xMVxATTL<MNZp}^=_ zWb}N5JWdVWITX-@0Jj1Em|Pj4a}nw=BwMBx=L}WK0CUZ_ND5qFz!kI1aD`%iL)9zR zeAjAl>M7YR<H+eY)R`!=G*qatDc;m;EGS>YV1Y)tB0b_}EtOLnrJbQ67a08s%`4i6 zCP?%>iMwY(pSny{&#+9wL%b(huMHl$FfZkv{{U>!Yda7(+aSbE(dHS@-QSYONt|*X z!9-?#RPw^@)@6`!3sZ+)gD}T9Y}Q5z!#qtu;<4^&%~PcCI4wMkY?DDiRshCY12R>H zINE>Nhd&KhsOn9VuhDrzBZsl}jzr#fuv`WGYo@AhjGH9Cn3rpU$rNpIG%s--pE0K? zIm4_1%(t#q)gMWdz%0SsxiKNyc6xENxxpyvwhb^duTj;fPMef325D-w5A=Kn(tQ}i z4gzYT;tSPcA1El&d62Fdeh2)y@R!41srf0s6#ho|bG7&~_+tiTLk<o(!-NpGmS-_S z90vbfPPq>)Cvp@KZUqR)(-M?u33NXv__4AF?Y<A{)HC2WfvKqmfgTN=xmw{%;Lq1` zR#2h_L%@6uv{Ng)lru~OQf|mYG{7`)k4!igBd`F0vk|yjtCUMa=LRj_sR1$lMJr_< zd9KqSxQrE8HI7cTNR+S9rckSTi2)bF7mD*9lp_!(TwIAv2)9O^5KVt;Ea_n_=34TU z8=AZX0rRz#<nA!IO%EVpwH82ScO+=U(~<FL$mYXekjOk&XrP-%E474a8s-qpqV{oQ z0mBiELX>gnC6{Z2C46b`aVz>$l1EkBCtouwU#2e_(sChR2NB*f#S?7>tvJ!GR2Jw5 zt0b|<nUpI@X>(Pzb8=m^e1(2{1d0hbw|uVdN4d31rJE1b(~ishs9HGRd-tN8>@rn- z)_Sr&yd6|1)=08UYjUFP_3+1>Eo+TIt>dQTc^ZkyQ)lRu!XKtCHBlwpYv7J{_Yq3P z8gNvh)(H!=YzyHpH<VYZai-pru7%qJw~07zl>zmb1#(3HCLt1L3=E#nKtgGZN_@Fk zi&+DAg%;5;p6!bhp?(Oi(IH(w4nZglf;B0!NfCXD+^vd%$?w#F&en5LDf1LV=h=pU zQUlzjK*g!$(!**DAQwlWb+tmGR0y$Ljk$}Im*74Ca|q@z!*L-^t`Zip#e_hq<{^O= zbE`a20u+C#AW5847<FJiwiJCy8<WE4SXa<}f18I-+PgzXR}{lJ1v=lD>BRgG`T4yF z{CNKtVTTa*`^m;Rhmzq{GUpORS}~eUyGpdZRH{387k|QtHwtiD06V8zRev(sx(LlV zp47Khig|#}RmxrZm5I=nCod7_T&t&ywvUyYxJZwVnI$W37Z2wpbYOut+=RO!>Uh13 zXEvCrEYbG2b4=@XSPK&rXED!e0D;>k!fWuMiZo~5<dUQ#wW?~HT;63uAJ(>U3V9bt zKgvNn)}bAq0^Ztj@_v<5Lrj|rN2|YsaEnqoIxCo-5B;i6RZpLMuQ_`;>Z)X}RI(S+ zPFH4$jz;vds&rJ!qaBtczS@j3lj~J=y)<c=_62;lSKOB_qjNcF;zG4}vcM5#i7=1P zfsX;U8?ejA_XAs*lIo!gV02Pvj*<Pv`L_Z|YDK<#BlFFp)0W}HMQB!W_TDy!7eDhD zP2)vxr*>k;=0-lJmd}}3!O6wV8al(V1?6o+dEe5?>oTq6^BENP2;yFvB<=v>#t>H= ziZi)(Yv)2fMqI}7iE(y#ZEi`bM%<iGT%$M_vP7I)BN;FQY5I_c{E`;tM%Yb;Fj_0B zLYNm}pM6cz+AlA>R`gt~VXerWNM|cHBE55ss{UKj(@z)|2W<6G&b_<-FV4L?CqMVz ziQ-cVC20q6Im!88I!-<x92j+#sw_%RawXD17qoT6(iJ^7F|h*>Uv35tF98SrUPa`+ zu+R-Qo5y&Di3-uY&LQe&##MH4_UB{3Jp{OyhuT=&6<ex^(}|QOr3n0kG?~UU3&QtU zNLFPdjd`uAPMusP*iF|*>4MN&e;lRG^d8dyU>*j{t&w|NVcAFff<KPB#uPI%Mt@<W zM5&HB5TiRip$)`a3<*qKx~IbEDTAj}Pjl@=5Niw%1ChT^U(l~o>Pq#)HN1DArC6xc z6&W@mS4<KviM^izbjpDqRc+PiuE`gdVyo3}=H^Grn!>~)!?9Uflc)Z80C08yj(%^0 z!j2&9A%uO?5Jne*h7op}AuJhThY*%x2unwpA7MT%jP7e>Bdl({kw+XXK64qzxr%<) zm1KDX(l#LNl*!MC*-cAW?1@wKE`D%ETrPw=+Dj;UUH1TX>IPN)ngQPf2umLqb_8KF z5EgF;lV(Gvj|)piSjM=#=?I%SE-V{iPJ|iXSnwdsGcK$SVO8Vuu0dGChA`ceK$ndO z^CE27WP2ZU&gg#DG+a<bbjK?FC7l99FOIq?7ERGFN^E2Zg~(N`A8Bzg6ps<&Y`q+l zD>7BNewqpHrVyw*BNLgH>DgmiWIpv5jw*~ydUJyApOeVC>gH0&zkXGHL6RoOKhqy0 z&oty3Wgr-X&NdxFe(!fxb*D55Jz0MseiQeE<`_;|8pF$@&{RBhGf`J^81fZP6!t9F zy%<~{0A6oThL=N0G3|-U@X-{ST>br}X8_mvJym^i^7>{j<NK6CFPm$))v=J>;ta9p zKdNsyU$pwt{$L#ji;ci*@k!dDQNK%^%kzVRiIo@qW*cB_0W6c&Z%Fp+LD*)5&CuZU zIs7?_c6Ts*1u{=ufn*(M40-NHo@8Sl>8syYzps8@{l5Br_514g)$gm{SHG`*U;QL0 z=T~Nn9fsUfPsCcj4KoYI4Kp9+UNzRz2)h(!;fJx78%~ICWRAwiS&|asEIBY^a36x9 zB@o@5K82rPln!k%Tj=v1X~;`^E1PbKv(V=yX#IpfPjNT=sha<jpxW}lZDtF7(=YkI z%=C1x)ZJ~i(04ztz#p0q(p*MggP`M5QfHin=027farc<kBF>cP{YtZi+)c3Qb0>6e znARi+`Jk${9NKKQsIUpwQP@R4HtS1D|KEOxQCHo4#=U0Cg)mpZ<ik|JEQeVIvmWLy znEPP1!|a9G5A!z6QJA>@He1esxe(?Gn0%NDnB_35VAjLj1#=(Fc9^{|`(fUOISLc^ zbL5A)5atS)e3%ND<uI#Y*2CNdb05rhn7uIjVcv#03KO>#`C%@ExdJ91rUGU;%qp1m zFn7V+2eTb!FU)?Jw_%RL#Qg&KVJ?KZ0wy1(0%kePDwy>!cfs5TvmItH%zl`+VUEJY z-G}@z7s6ZtlMhn?vm9m>%zBu+VD5w24zm|#Kg`=OM`7ZAiTuBuyuIZ~!v9kSAvj~V zq0QmwygklR;BZ`NPoKZ6quJYG|Ms*Q(=w-C(ZRmyw@klcTIP&t(=WeRMA$FSoPI^- z6`5K5n7vpO5L*zf=&atPa3N_NfBG4E{OH4Giw!*}2NldR)I`8JD=qYC+rNSkhWKQT z&r2Ww>06QS`B1p+5wqpd3GuEBJ$@MRkDoI>{_;{ie#-%~<u!ekBNYF7g&yB|&}{i+ z0^T1i4#mG_ww#!d|DD=U{9&`@nsBrh|8$)mKZy8a6XHK?2*v-?Y%w;ph(B<BsD6mw zG$H;+D?{z`hS@T8Lj23Eq532K@d@#Jyn1}~n`X;%hsMWmu9da;oWWSjXZnh3D1LBt zDE@_5%fG|XTKvCm3dO$|Yx&89_zkz}@rMz=a6-IvTPXiav6jmx#1DN}kMBf$=7jjV zAL;Si5I=Q7`=0jGQ28&%TDBVaTg2P%*W(A?h_&oi!tq}ValTn5vLzh@@LS>|JBq2r zgW=);;T2<^^1~@)#XgB%5+hqGP`en@l=Blf?)wxc$5nD*?CanJvpJSN^BQA`-9s5H zQ~Hs_ln1x@I}MW7In6U$$oUG&Hm|#loKB!%zL`oiJwyp^Vds66?bZ@<zK`L}+{tNu z7`)84aRMLEFyGG3Z79dw^&N6<B0RcR3G{O)<V*_bqsUmZ>07|Td=IBw0a}=UMk!5y zrqBl|G|qg9%+*?IBF}f=nL;6!t5Ad`c1;c3@h_v~*c*>hZQ?%x^w^uuqS{C?N#-|z zs>wllGwH07<r+9QP5C#S+lzk{qw16oYdG7_QI9E~(v>=Md<p75WsKaGc={N@lw;&h zil0V>A1Ajhej$pS@)^04<6odOC&--=PY>2i`JCLT@ecu&DM51E6X>$o6iFseTEZNP zklB--K%ZxvVq#B5!kdJKS-y%s36XFg<%yFW@XSbfgpjhxgze0P07x|@i9Oi~ZB)D> z(^Hi>2|Fpzsj>?mXF>wyIZdX=Q1TP#3eS{exe(9_63Qr9io6gWcfu+HaK8K&l9eP} zP8GOVmXV-5AuEo_O`ghx9P(Vso~ncb@?@~5I-!(2(`0)1vo7IkD)chOtsx<cKu?#K z#?V&1>1j~ilKvU~CYryGztoUPgwT|`EGGDqrfjB~$M>M+r~HJRQv7^^{ZpcWIsVB! zxc{3VTfhrRF~kwns;3Yjs*CagH6}u1W3<o~J@g{U^a8QL9BO*YYxI4y_-O^8WBe81 zr1;E@%m!5Z_{)iUmiSl5{hi-R)b!b?RQ#2@C2IO#QuwTAC2IOP#78-FD=Z~`kbvd> zw?s`}N8v7lX^$r&#upIG^my+AxJ!uA8S(V?YkX-8kem@u>+tbq3fwc}N5NY0i?ZR) ziT@jgSCQKtPj6quFDADq{vg3@rCUmslIamx3Db%CrfSqB!A+giy1`6*_Y?UFG(o}^ z3{naA%Cks6O}KzOTV<-eIpK;q@cfcJmV`@Y!1HUl44$Nfznu%ugUpz=1bUb-;bA!! z0Fo0<LG2QDaC@iN)&P}+$7JgFX8F8S8(k|&cvARH=cd~1;JbvsY4NG4wo57f^P2yh zR2zNfFX3g)e|D;ED*->C`OiwVO{e?^HGfK~^tC6s-Kkn}=Bp8UY9&?rAM#>gZ8DRx zowI}^>+tt$$Ix=7n~@^X<>k;DDRd<QPD@QJc?q8Q%P6*#SQ(;(m~#%f&GFq(ED}9b zOG|RAlsK0{lag=HT(;y!DY1-VlasI0Tq%<2DnupDyA^OxvnS4{4}8ZDVHT0NU>?yv z{(UN|l8QA;re&x};=<Qin44Zj$)~2kop_D>^*F*b4S&C;Amr3U$~DdWZ4RDA!SvPe zQ#VjqDX}FSTt>n4O^j1%P)W?1Qp>@O6#NkiI`vVw5+9s$BL{a<@HYH8ow|Z)kNgxY z>RB;=MBo|!lsRxZtTS#+U^j&m`2gz7CsDe5tw~NvyAmW}(#3p?`2WM+dxuw5bZ^7E zoqhJnIoUZU2_Y2{(hKQ8AS5KA_aZ7H3Q7@tq$mhh1jU9G>>3fQpxCkZUa_NC0o$Wu z0n208@4naUeR6ny&v$+A_rAaD``$lZu4{*TO<A*MX3d&4b7s%Z$_n{()?)!evdmhS zM92oxvUeg_AI%w#_ZR7%XMj}>mq+?&YMQY|%Y6Wxws{LXeO@CH<b4UUhKr!QlYp9m z@>T&1BRCsiBEcm9(+I8um`kt)U@^ht0Luwp1~{AGEr3hNvBwfLmp(s?LZde;2TJeE z&R`7}=ObXQ1pJdy)Pvl>%!2?n6HM?!X8Iu~_#vkOJj?>JuV4Y^TnM^Ec%`6>yp4Xk zJLBo1Xj=W!$K&bxG2M1Q-L81L<!r*6_JE!x=}u$1<Xb!evH*DXa9+hNUe11g)CfOh zf|o|?Ihwp4n*n;7@Y)4l`E%wkL13Ngj)Go?Ez<NSXh`+_@=m@*Ns)K4&+BSG<PLzh z2p$I5DcpNNr}eFmgU%A}A*e^*>weC60Vuncy_xCW+zI*sNjD?pOYx>JMIoiwwon$% z$or>XYWil6Ti#|bq;|8CL(BdJdZ+Jb+w8NwFV1$yK5Tc9Epy}@;xk#|vpv}lxzJ}@ z^bpzZroya87(Z*JcOC>4&Y!mc;Y8q^Q-FB=Yo*gx{;b0_{Tt4p#u}&anAwXp{W~&X zM;HH2{n%3u(p<CUl#(Cd`RRKPwAGC=rTl3$3p`8iWioL~?q+x!{(KBc%53(Gqci{a z2rK7%t9nS+gx|xblwW|^R8P|9(afy5|CCam{n)~c_p%<zGKcrn*>AU6&eyE!Hh^D5 z=Kw5N!Mxo7QLeM{&H>6{&=r2%jR2(t`fZj|PY?rWk<_1}fkrUsI{;onofklAew{Qg z4d5t(MYnlPz5F&$AM##A>f;z!g+w&NdF=of5*!H7Nl<y47cvT9Bf)6^TUe}Z%|(4G zR<Q@Fb+-D2i26o!pgUT(az;R6Xq?bhl^YbvDD+ho`>Iy5jR2c6>Bu^n2j9U{#a^!0 z+0AsI^VWm)BP{*}fENh%0=y-4z1?!Cb9vowSLQ2kh#xY=4_R`%uV}Y>wTI!S^j}k` znIgstL@g2NS3|_!BG60`i0-V&J6jT-Zg}#|5&1r#eCOZp$#?DTo>*IaAwB{4lnqvq zPwuO9s-$)Yx>E{!giR%dt<pW)oR@>xJ<L*l0>|uXy%qtpWe5~vX;VX4R_jX9z0Bu$ znXRgY$71N6C!*0oE6-!}`8qS2Yd)A>ww%RYpf5mhp~;GIoLnf~)J~6h@sc`CU!!vh zGS~cZXxa5N(rYDtGQ#RkN5<)pXA${arLVxeTYn?MmLjtLN`M;x@)jb+AEKQX0Y$n2 zYy{{|@FXiw@G?LH!8U+F1Rvhvb?;|)s8-AS7GN}^lJ10sA!xnR%QgH?FW2}xy~H!` z^!oW9cdCBQTXd&V*SzBa4rk)kews_XG|Go<MEf+*hy6Q6t60m?{-iYNdZd~sJ@u&T z_tcYqPnErh{QA>E-fwzp@r<;63Jgi(v&hUFv2Q`va=K3XOXAQOYv$&?jkx&~Xy=`( z&RX7McY4Yby2~46)ki>u^tbdV0^SlS)~0w0@K#&_?xnQbM6aL#l^?O3w>{D+OQpoy zb^h0cnDQkwNbh<zm|Xre3wY0yYD!)^3ObHbjRjama16kO(r|Zq4Yw9RCYkH}kX!ta zNBody?(#a|MXxG(I{-SlHCwTmjrN@gxCenJNWIRFqII`v663XQm6-6olJGD~oki31 z?<M*&(4}XAE=9gRkFy1Sl}eO#GvfGVB<jmVWxJCkkcE6rPR~0+Q>nYrWz-tm?zS9S zn-k;w{z~Ad@X1Kp&rhg${v|xu1bm)<3D4_=XI}B$o=;E*u#t7Qt&5R7NRPUrleI}P zSi41tUoPW&O$^<;c*!x0@utu6#grgs3=gQerb(J5RWj;Tm|4>#<)@V4-d+exH@K)z zL3Hix1+z50o52?2v{W@u(=!ZK<q*W?U3|A^A3Fi=W*^@I@EF0He#rL#FA^kgv7EOF z3IIMPm=5qQ!73lT;79G+;_1PcTRc7Zc8jOd{poq`+2Z?Ox1qv$e{JzR&jF2W)Wb!@ z{Cm_Ezuq}uHqG>0<GmO!nfF6&i>WHUq5?0FDz+i+dWqYR3T=ADk{C4*s7)}8izMMm z2rB!L8IKWqH|WNV_o$yDrlk5BaH7c3M>Ig;yt|O-SN3Gyf%kY-oDSf?vCmt0kLNXC z;YV%oqn`IeUc1L@j~(}TRc^kBm1~z-p*e-s@1RIpb27yrEVwwIvJPRIfH~n*+bMpL zoj;Tf5-`Uw;8v>7Fv=J(M<8I}bI6`NoZ2|>4ld?4a(O?n56p+XN#J&fVc#t9Yh-rw zsYNYK5SLHNCwl7?NX94H*7^nF__)QbwHB|cz%r+I%b#GuCnadKPRIXzVkfnJfLicL zJ)m_b{^OH6spS#WfsZ}aY<UOy`J}mK>&?i-C$(YFMM&8IfzsOoge})2n2&v@(Q*U+ z=VRYzv=kyMpY(Nh%h|B4d{TNEE!QIxpK!6>!ug0#IH<R9;^GsYY_)!b`HWBa*_Qrb z!6$q`pmlf>w`_p-v>t(a@(KUadIXw}Px$YayO5Ai_#CU{AXI}-cw(UCBmB=NTo-8B zg#Y=3I|3~`p*4KM?ZKA4$j2vqe6ZyW$iXLkZm{KG^dg_|<Y3D%$iydnWw7lwG&-La zY8sz#aiH}mFymu?GiV*8TgSG@(Ft4Hfcb<g0xjPm37@o5eGn)4a}jQI%6#8C5i;=U zmObb#i1|3XZh=AA@-;-_W7q2~y-+lt@YBJTBhV&%!miVLF?jH?x3pN?zT~PuM{ga0 z()ieSwYGu-pNyQAtB{aSxLt3#ANArBc7rXy;D0{h4!vas1mKenH5iF%^6B2Qr4JbM z$y}|s)<F(F(LOD|p$tArrx-0?A{U>e(~Op_XaYV-=NPT8BaBbVeeF>;5S}cJsAVr0 z@=3c7^10j^_|Vk+P2rQmYE$?NP5t`|QHI+4HPqg(q4tFhwFPXbEnq`!0h?+I*ic)* zhS~zQ)D|!oMV8vC<wR$wePv7S*v^uWU>irRWm{Ki!ddOYZUhlzh_eeWVl*)KE8tKG z-MS;W|D}a~fwc<E=Nl_lsE~L8lQ>CB4?9W=EM#~Dd?cRx+xGSb@>konw#A=g!xndK zgSF|pziaF4U1NB=w$AtRGK}onIzL~c`Mb8xFT`rs*7=oK?b<rO5vyHW=XYYYYwP?$ ztafdkKZ(_@t@9UgeuTTWj;50+ig4G~(S<0BaM#u`gs6&e*VeK07a(43guAwmt-lJQ zF~VJ2$I&TmQ-r&=PDF@-5$@VLuFk#pwg`7^om8D~=nRQ)*VakX+d&MAaM#vJ*SRe< zJi=XDCsY57N*&>@ty7?{M6xjv?pr$L`b8inN4VkWR0uI8LQl-86k=M0yS7f15Hlj& zwRNiXJs@U9xNGawh-`Bs+_iP;^xYiQS~53i9dCoy>0~8kgVwp4P;JmU>sVd2LF-&g zCfuOCT$F_!=u%lIc8YAXB9vVzp}+f~rJD0yg!`YZ&!fPQ3mh7xx_NpscUhG-Rff6C zN}-+5T@3GF@<^zj;e#0-4b?Mz2yuGo81fm)yqTe)P@RxWM7g063?D8NXXpsx5yU-0 z2QcqQj=%g6za|+PMO+m645KA9nmo%w$20wy@99;Cvbdu=Ho}P~bTHG5%cFa(DHkBh zg2^COtm^#=aFp%O+_60>@Do3fY+?j{%rA&Z&GSPMkZN%p%4T8O{SYJRWuvdfh=H7Q zHX|f$4x~;RXO5NN{TNKAKaG2cN!8XY2|kj++(S&`9%52v;6w>t$zXbWY1}MKx;?m7 zf-h$<HwztFr+mF31O-W=r{8Cx#SW4kjJ{JWc2E$7>HXTN>!EJk%IMF!L_(7oK0tNQ zVq%#p(?cJj!S&WX(m@{+4<h$m6wATY&7x({Ck#MX#`Sb=GX|1r#`#>VXS|FIX2wy; zw3*#q64|2A=1EAOIY9*oj=1s2tm)Gi_&Boxe9RpEOr+7WFOoJ6p#id2A|U5m$`jM| zhe2e`BosxGjgy!RquiNGj)R*kDUg-##OA$&Tt+=(%^wlmgPWp8J*DU|N1`N@o1#X& z^mDd>5_?kf^!r!<e+cJCne@({X!Lv(d>_>Zo}$*1I;lUxRMC6=R71T~kNBwyPG=iE zRf`n-DzDyoExI}%uK80JsTBD~&Bk)@sXanjy`(~3oKq-1{xf1Fk*z47B|b~?Ad=KZ z{kaPKJqu)^)c<)_|3;GV;$I-wA3zj8iO>;{VLheX$`2Zse1V`CY+C7u0421+MWD*2 zAXS*Zc$VLFpXG23(gzGGTG%9Fuk{1U-a<?|(v*D;(34;fKqYgPv6OxcIuW3Q;94I% z05FaqhSXCDaslQLlmgH`lpW@?J`&($g7W~*BDflWUq3Co6<|FJt2|4zRHy1wf=8u= zKS4FBq%qocYJs_C)w14Pb9d-er4B}8K{QyW!86xfzpR?pNFO4rx0Q@N{Mb40n{_fW z*L<+7dK&w1m}uz(2&>@`*mb|<@K+ywiGDD`N){sQU4oeaUlSY%U_jwYxU-u9Q1%`2 z+#;<s6X+q<<rILI2yOs)o8T@0PUdCr0r0D=W#tc8&d&sO00ydDHsk@XmBv2cwbEgJ z$UHyfM1W)_zTA)6;78pCkjYhy*!>?Nto-Qqx2e^g8{j8cEay2<=Sv`U{S^UG)cWh> zf2-kk{9lfU#@CRhgt14mmW*EQ2lrv3vbVvgfFkUA!0X;_4_Z!dhSUM{Cm0Mclwcyj zM1sQ}RNY%P7vK<vEcQb1ukWoK1G85kWQB+r;Qr~_2fZp@2{4aY?({<*1UQ}{&jOrI z@Sz{|xgWI~U=6{~UYdS9*wV=sYPy2ut<VRem>#lOxq>6Uhip`?q<!o!OUBa}+8-l- z6`NEWFt{4=r;3sC57FqIv%#xbn5Y=EYV!s~hE(JB7G|p?b_*J_H%<HLqTo9~R?EKJ z8TuKZ(;(46)_yklzrgU-dNp^aa}idDrzDodpPu2>`Y9SpK^@NJQ$7A{V9T9|sGC^z zP5^dy*^M`;p<MPd0O$3xFZ`(Q{ivS-9$}Qe(Hr+#+2II#o?#6Lqm?Tg4)7*JCIRdq zm<q6);BbJSMFWq8$b7`}2x!4u@n6N$9B>DoBfFC`eh)Z7wp{BM2o3b74Ql1OH87m5 z)XH^ha3j5*R<2uvn*?&*8oZfs&~Gw&nJr*W!=iW423n2bDqso&K4u?};3OC@_h-QG z3>c{bCL^GY6A7Poe;pcb=<wGi5!dYS*O$pXjdp)A;`ZtA*C;8g^^VuUlTXt1ddE75 z#3$)ZqvK()<&(71Z1<O)Nzb;^Xz+=C)G;Cx#v4!aPQ4=?DfuKFYPRz?9X`<=gE`?2 z0dq51Cmigr{eo)k*S;SL;}e?Ho*$t<4S0CFiyVAHGu!v#KR%%Y+soKN$@C}NFUEg- zLI<?Jg)DqRhr}129sY_rX|mOEB9ie*YO^{X10z03Ypo7{<(pI&=<rv*NgaU>f6<y$ z92o4c=p$-H-{G(5gLfJo{)#?$pV7{r@AyRDY3Hwke4^Xihp_H=0=KsNdl7D1JAazv z6Meg#KXmemZtL(Dtw~P@JN!j!lIwJw0crUpy&CNB*U3p00j-#hly)jtW_l6&H?kRj z?&HZJ@8sLHwk+4=a1Yl{#&&M2S!x|<sl}nC7KfHv6<TUlXn6;N)N;^L%R!UNL9-wC zV@xgw&C^a7Zt9p3mxJc2g^GWhrj~;@YQmDs!JsV8ti2WZ&*9?C`o5S$)8XRG`guK5 zI$WGtzYseP7iZS5#1V&!GwV0vsKdpX^*eF8L&w1SgE-US;>`M!IM?Cg%=(KsKg7kE zrRgM!LR_3#x)5a{F3v1Nh^i2sYs=CP=i)5H#hGR6bGbMRadC#VCZ%l(adBovgcum& z;>>b&u8P}2T%1|nk(v+}XO?%QCd9=V);9~dI16!cW@YNjxi|}Pab^|hv@T=hP>EHp zuLChzPJ>t#LQDy9ab{HtF)hT!nN=mkj1U)RR<*1MXN9;pvuZ@PxgjpjtU7&_EY6a+ zII}Jd%HquGWF;Lg&aA5mHHV8cYaOc#Ta3k-buF22aaJdbGupi{JCkBZ<aT3(vMVL@ zVn4JLp;v-PmX25JbeF7BENY%!`6w-dnZo?Bbo{3`P**wB^v;hFm#TMXAQ{p@jhzo| z)~Dph)9^>k)ITJUkZCNn%!$>I-LY**`m7|q)Z~w~Xzil`()q=5{RHymUS7BBk?d21 zcY7G%JA$VGekXW`g9p9bZI2(KKdeHuZigZ$#<<0P+*y9eZh%}S%8(yes##RPoCW)w zaSh9EqPzif1_HWsRtRilb9d*g5ZEM;vqIozfdje6nR+8&rf<`O4O!oS4<F}DJu}Va z)*~!ledek7k55u#=1%;_Cv0S$h5z_O4mGrM*c;k&qWfYfMy4o3@o_L=TS&(7f7vqn zAKWYQ_JF*-A8VWz-=_(%GJ59G8mqsNhlLkW8MQztF3we+IR44oWat0bt^Z@U{{OaH z{INhU^>tG3v>;2$7AkWoGlnoDNAK(IkM;2+=_u<pBo~5=^+(<@+`xGrU<$!jfFl63 zRQ_P07bq(+7e*oNG+Khb?9{Z`T~Ph-!5XHiA3g-CA3g}vZ$v1cprLm=6#q}g6Viy% zZ^Iuxj%jFL7Eqf?sDo<EZSAJUoPU}<H?;4V3nY%YzzM1NGeRFFL2Cck8)M#P>|(GJ z8*k^|g}=cc`NL3fbQF~g^3&8t@EQCygIC3nE_gIj2ZC#n#ty#3pA&<Br9;l(pZFUJ z1~XvHH2cjopXK-4$gDY?%vyL3Ef^u2|1ne0Wdnl!CTgAy2%g5O$lwpI`dd}BjUhaB z96X1Sjuo;7=$dZ_%q+w>qf5CD#^7mq!uj}PLNh64TFnEXlK+y4D)}M4l4B%493}7M zl?-%}f8ei&(PaMMtK}!3$6cAW<fl0st_T)N?LJ6n?H-Xv8XBW2hpflI)@6|?Vv0h0 zdB`D3QxsCBC`wZl`k5DGTTz;#&@aSJl%^>3D{&-BQxy7*I2xrX3jI!;9;GP?{Xv`= zr6~&iNt_#{DGL2XoFAhp3TZltq8Lq4NEf0kMpG0rgs6(q6ooAPRs2^QqbUm6`Zf@a zF`A-~XNqDpMIp}=#b}B`uAYR{Z84gnP^$c%F(gJ)6iU;-0x>K`Qxr<q-v_thF`A-K zroJ1*h!{;#s6glKW@BP<F1K8-2QfJ&2Wl&Xm=dEY3RMa*Ek;umsuE&GjHW2$nW7j? zQOGkzF`A-KoxazkDN41H_MbtQ!bZ0wO_3hoPB?80*ubVIO<Ku*IW?V24%IIkh!1I( z>CU_)%7qbGn3oYA$>iN=;6j(Ch=B`rvgx8UaG|RSwI~f-XdN5TiqgP^JOdZ9)=6VO z?W-djL)4L>mziFuZh4`lT1pEPrdDqs#U;v#&_{j9bP@7>?k~v>w-p^rJeo<I=mMyx zK8`wF7Cjx>tWPAa(vn#9sXpVNmNA|~SMM-SwRjGdzRnPnt*LeA&p7%}QxsFnJO{N7 zH|guR>%~7=Gf7HIc|KhB9LQx<FvxrnDRLIqfn>2ci|ak4W#=%_dPy`X;3ZlgPvoOo zzyS)@b;0^B*w6(VyI`L#*tZMz>w--l)UpS&QC?+n`gxEe_li27&RGn=*3G+}X<lbo zUM}174XHv8o`*HZQU6Syf6e9AucC8Fn{o&?ms`K)IBCkBPoa^m?QBW&T~>MlD2d76 zKpXo6dzz-ax5lX|6KYc+o%{sFI3JTyuZ5ca6jR*}qVP{7O(|e4O4yofr8O_Hz1CbC zZ%rRDu&W8zb~WMJt|naD)r4!ins9Ab6Rz!Q!nLXi>sa_IDLfeT3SSj3+((36C9di! zaaC7|tGY^D)m7rEt`b+N5(l!xrBdPozr>~S5`BbXmUb1hw5yn<UBxWzDrRX{F-ui3 zZ=m0exk{1!V&=w+@ez2>?czPRi}&0v-gCQn&sDr9unJR!caG!no*L)vBQTuW#c*mD z!>L^irz(avM!hjc7#`*`91~~gBXAkh#brzvmobXV!4#`ixODnlTH{=NgsiPySzA@s zA_`C|Szq?E*2c5?2<dAjeG!Mf_K4-YD9XMNCa3st1pO15T|6IPXhhRWI5CuRPyIS> z3euc(N0vU!^3_#L$+sL{MqKeQAJqDw*az7FI|)(%ej=~{l9B;_1;?HQ-vTred<rm< z;5~rD0Lpuz#0t$TVo9=BsDN4@6#IZ>@izl0>*{2$th@ZOp7YE4z%OgBUseb$P{A?p zmuK8me75beUG9U$KA7tR9-)#F`BH$C$eB?}9B6wba!Qqg%51M7nu%%@)Pn_GQT#i| zTz0`8AAIJ6_k8dwKrO-307D6Qgla0m?Eun)HvpVT{<H)G9#Jnf8|M`BPPHqU;6NXY z@j<%}_-@W^1eE}McdobqU^_u~fIVc(;ob(e+z>WSE`F3=AzZKGyM3_H2Uq)m?qqiY z{)AOUupD3rKm|wjut(HEE@NRa&*~q@1eOne4SL{PAAAb%4}$jq=<R#|Dyf@u!7CHW zt$#h6Qd3PXW!hmrpuXHoKz-RxknM+1Uw)Iq1N7W9r7x`n)R!3q)R$8Us4q7IRMqMp z`{$!xfdW|07g4XAq?lKZgs_~dm{-oYm{-oCm{-o)m{-o0m{-mR0KKV~^HDpN=jo*s zwA=^OOW{wwloAi|L#UThBK1;Aq+Uvi)JrLdddY%BFE2zvMWUD0)Jv^;kNl-Z)>cy; z8>&SYtEq@h)zree8mgfE{gGoiP^pE##XK#%)YtNJs^w<C>I3C3^{=*?%GXfcS1{GC zsfIe|^P$=$r+RAF$<7tEtA12C+%11MO5Ur54^^$U=Bxw`RJHt6Pt~sV$HT&Es+v|U zuf0_NDjcX`4K<%8<fVo+FfS*FjlR+!R=vOE8YO=RIV`b{)0L|dco=hW7P!q<?)|DS zl=P?bZ_SAb>5m3JC{^qFS4az6R{&JImFr|pyz18w*h#YUG9<3!J7&6COdLgeS}dOO zT+sE09dm@H>pG48{g@Z(erCKb@!LsrrKuY_{TjYt&>;S+;T`{V8pMS)brxl;iPVV~ zYYDfT(s}lq4p~6xk3l!i!=g)gn_$~0KX*Gq4@1U22eRyt&}X9q`+P+@NpinR`cW1Z zmiT9~KtId)h`6|ak*?yRE?MZKvO&j~-WB>H(tom9QiLwS8oW;u(?^B=i1e3~HYW7K zTutly8RG}&Y|*}(h<`VBJ_EcTYZ)-Ip8(#)GBhJVd>VbjH;fUF1FvSgy=qh<ydNjf zBOkRKzPO+tsUOL)#)-2Ng~(L;FhCV!OF4~x3aW%tY2omvEoUG)xarrIEr)Y;e|>_r z=HXN9{`w?yjYWkSz?UjsLPIpp<f(fu-Ba>F&0Y-pBB5{TiMpN2x?L=FOUeh$;jLdH z^cSSRVf>{+kLv}t>!}cAJD<mErO6A~M6BX0gUOD@$RF?vl3k2s&1tOfeB)e`iZHn! zUGycWaue1W`U0btrsHme^@idUZv<#3xEf%8s?vZ7NVgJ+1}@X|Wk#!L*MvSdj6?3@ zr1T?^YydwBuz*4xsp)GZcoTCM_Il28hNGPde|p|>CUHa*4nWYM3>xr~<s8YN0T&`S zPY?GwmUZ1M`TvsqpFU+dOC{TZkEzs!*8r?!ko4XG=!pASm4E1Esb23*D)D;n7=S9q zO7C4+;`iP{zxPtNCiLF@iM?0Y3vF~R%X{i+Rd7rFvzEgd`p{G_!z#&OECV&sT669x zwpRG%vuZujvg>7)_`H1+TWhxPe?R#olz$oP60)vFLYGU*+Doa#^JTTT2=UiYH#=uS z%j*{~obB>ViEkk0n;e9Hl=uc>zAQO&N?{P>z{CQRIgK^YJ566CnFk=Uaq&`3KgL{u zxLZLEc#S(MNZ;p1YRmDmF8vu1eKOc1CrG}gGEAmapFNO@H?QcYn#ZMi>a(cKQ=ePP zJoR}DpfLD~<*b+f+ks4**q)!f;(?S`EoTek21Q>{$22BDoIbL0K2xgk9auEV;`uCT z4x=3LV&_(iM3tm-DB(GheiZ0_TsSTVL%z7IUurtwS^O%;IU)<sM8sn(vt`;Vs)NeY zrGt#68vF8C_NBRI1p4MgBzTcZ@{pJEKc&(N*Pvc+vpPwydP~WWH4i*pt}#OvHwfDL zQREYzMria^b!Ua%NveIJ7mWVth5k8-l{y)6b}Z8LlNq5;D6D+dD_|(VE>!?|xA9QF zemd>{gjdzeDSGD~kL&4PuWN%pVXE^MAw_|t=+RB3IL|A$9c%RSrpvIlw6+Xdk;^H@ zdgK@-IWF~bT<+(9{kohB5aei|=OxFK)9YA7TuHljA*#>|Rk(^-9|SREKK|%eGogL7 z=KP&~O|N4#eI4no<x(SRe%q^Tr;QBV^Q!V+^v?IdVkk=A$kM+<Vivhk6=`*V%gx04 z1a0sl%6@nLYnC%ia`wtlIqzmp7t4WRG6`;ZK#4v~ra+H!3g^7$b>HxX97j=6s70^& z??S$ftPL_{N0lnB(Hf?8B?P|_G9F{5$FM<$W6X<<jDR4i-dKz_qHWTJ7+#^t$m}Ni zJQdVHR4GGpq3_qerux3=k=NonXs*$GJ0)63?__vA3#$^zUVF{osNab}s-&v&q|%gB zRldv(GT5q2ri9ECvbQH>ghJK`G2auiR)jpS!XJe7LT?~_1lcwS+wGu7%HgbjB99En zrq?Zp7dIj7itgTk{JDZk{kk_G3;*TSwWaQLRo5rFOMUfP)RuoHvgTUT5wCX*$Hkho z#1z|)g(gvk;RkZ;^px^1eBFORuTQ4m9zFMMkDl>9L<8h|4d4{sg`DhnZBz{vXM*`S z0<IQTt1>+sI!SD3Mx}D0_LCMV2UYm@>&ko-=Dy*94i9L<cd*dwM7kMo_|m<ZsVw|; z!ed6IFY9%ltk&o=k@i}dPyF6DLVttZWgOz0RAt}r-^QuWQtUPfyHn!qHu>yS)i-%n zcShg)U$}d^HHU3^yRd&8X?hC#*;zir+x@mId=If~7;X6ZWPOih*@?hH$#PRX%RT!x z|2=;57ygCBZwiO$9Lx_1hv=J@v!8Hig|9eb0mIe!*G4QRF+FhrKI9L;f#}OeOqyc8 zYSq#RF5EFp%ic$IFxj_^cvIE9F*|X9iLI9wE}Z$MH%$+pL7VZUnwt?gNyPfh6YI%D zv7X#ltf%(13s3oWfl@xxCFRAQln?w@DR1(meE&a4X|9Q2#(FX?=0uA5qA~|>`t4r~ zPnwdw=t<^v#*4l}6n=}O>?Cb?Ps;e3<k#Nv6?BQ0|FwPdzqYSJz2+-aVK3xlk7>i_ z(^|YO>}nDCj<EYP$5)59_f?0t<D+rrTvBSPahk=S*=};~V_Oxz4_2JbT6VvsTIPqG zE`y=GGHJQO;5NTqo@Tr3P+En+Vx?8Nz92h%L8RmzUddKrEz+{~+Hf8_&_5FfZQJ~@ zaCDr(XYsKx6|sLxmQyJ9ZZ+7q`F(MBJj?EVE5AEF7M8~gUCjZwSB>v&{@bJb=P9Mz zo2Ybq_f@*RzS60-`yt+TEl+M!dRCC9^lV97&kF0`_L_CX+p1Yd=k23#%i_ag*4uu& zZj`mBCBp)N?}~)KdlDL!Ct-ukzlP=Oi%h_#M><Mm%OfMIIV?*xN0j5lw&H!C^N!`v zGid4kjuLY3e-P4K6GeSSzT-<djm7^a?KlB}l_KRqJ(QHcnfpljo4Jpaznl9=>64Md zrC`La(1stvHi$?Yta!&CGdF{~Vi>Xfeinv4>Gf2y-wK7-BJc0Q@OWlR6NY!h#ZBtz zGfdl;VcNb7(|v}j9n-ybj1;~d7q}m@6-&CE@A%Wk;+|^SD3(rJ7oRqY<Gm*QiY<TI zu($uGX`?^n3Yd@cl#4d}L9XsAg+X+?KLYOQ>9ekkS43D>TK)*AMq<`i8-52XTqo(; z;v9bJsd}!?*DuAc&X=_C(0Kklj-Y-Lv1q$LY|HX}3HtdG6s|@rCDVp*<3wLVg$tM~ zPO}~P9dTs7_jBLhTJstv7-ja)mlUVkPIDQh94&ejF!!MD&BHk}k1?kT7hVw9%pVE$ zvEnoY%pVbwv;hn@_<WNzm!gbW$YlH9C%o4$w;gv4VA9L@^Rk~bq`4gIV}9UFIs0Qt z+V*$AaUTX8TR`b@EhRtuVH{6TL^kp#)NwpP5!pmI-ai|WY#I}sb@u*~hxKmKCM2zM zhIiC8)i%^>6Hh^>@Nx4e`e(3G8YcdPn(>LAHU2{s#V7W(G5#3@@ku&LAMc;5O<k=| zd<FI4lQw?hCbSZt)b@#=qhLPC=S<?KMfgnOPl9|V?nJ%#Sj`i+gCifSVWNL-*XlFg zf4?>P6Mdq83@p8VB45SjW3_6V9RA??iW@)dF|NBh?BQQccqB?pJnUiZbHM699q{;n zdDJ4%Z>XlJ>q`SoO9|ga*9A^Gi;x$`1x{v(<`yPcE|3?;1x`7PkQc`VR!CZ292ZzA z33zc_;8cM;!Vx%)n=*2QBe3dZZQmmtfpZucuuNVY7q~)F^5VF_HB4#p;<&)=47Dx3 zGwh%7P&dF0*8O8&!M%?g-m$M>!m+R5&y~#Ns2kvj)v>SOuf*!uSMWDtb?htnJFz<U z75sx(9s3IYNvw{21^*&e$G(EF2D*RjE2s;hj(r6UA=I(2pr!v}_{YA2w*HslANvX> z9{UO=9{UQq`cBP1_7zOkr)vJOuV9)!SM!g31=DpNcT&f`f|*#g`NzJ31^RByKlT+Y z*ZC5rI`$Q;5JDaM3RViCj(r8Igiy!6f{Dkzf{Dkzf^~Yf89(+F^p1T6J6TCbUG_$( zj(r8!vAXKmS1^9;>p6Cy#SRR!UnzFvU+g!8vMVLD!Vl%KuUZhv3^niK2KqEsE-1GK zI>*gMoWolKofH0)&gZRx&WW@_mKO9bhpR^uJL+<{izJb{9F7g^IO=jZYI(#_m&5Tl z%c!F+hvS|>x}z?K<GHv@M_mrLNuyS%%i+i~-%*#tk!P8sE{CI>RpN+;#_{w_qoXc| z<3X4vM_mrrX7aH3R)$X_9^t6V;fN<V>T)>V)Hy|SKR{)SH}n_qAKTKL0YOq)x=SDf zQsjECH*|)h)z~so??pP<J>SUm-ivgCy%*^i8S`GGBTn&Nq`RAZQmGZT)r7yPw;~{o zFJ9}F)Nop=Aa}Al?}wP_eIkrt8q8Mdn<kTD1g5)gvgYp1OpjpN&Uk+`BCA<eI{tLe z2g{qFT$ziPV5LsE%{6~4&tk9bLK!@YrT3YL1lfECau%{=^OC!Z0CM&s0pCK?a@*ds zoPz<l!PjlkLb#m$`heAqNR@l^d+JA5-hz<PlLrEu8TSe~tVCP^IpmB1suILv2NHE} zLb6WOB15(##!}|b@h9VTPN;GQ#OjS?6Oe2zlikno$xK$)o0nF|WJ$6+kJRQe$yAnq z6dU6vB*{7OUCSAPvT{Cq*At}29Mo<Os0-QF`yYf%J+DGg_67L!4Dw{32JjidGJs#n z<s>AZEbWkwTI2(q!m>J8)?s48s*$Sqd#Wrg=RB{loErdUNzkuAiv(o@oy5p)Ufbl{ z1aOukdd14*|G;XlCf_>{vx+^`IUNJ6z-ED~IecqSV1cN?YO28ml7m8i?3o}lL}kvU z%4`JLO<gKPrXN)MO?*C^I9dY{UP3`@D9c9x_gic*U%H<FHV_oP?^Pk~4`$v>UTyFD zJCL_Rz;qFCGewB2>1Iz&dmVzLk8<Z!dFzG#mV4UA<n{o$&4_dRJ<jcceYic~b36I} zhFg(3FiP84qz;S{7T1GSIY;vqI$??LHzd^;XMlbZBG^%rur%S4i&FpPp72h+_}|{* zDNR9QK6a~F>boT2PxR9F5ymI{hF<1-H^u*U-9t&&O%O2fw5ED2?yQ{PIV=7>$>nML zIxB(yZfC{ra#rjvXT|PvR_rck#qM%e>@H`;?s8V_E@#E=a#rjvXT|<6&WfGrtk_-7 zirwX`*#Fg8v8`5J=1k4I<u-U6e|eKzZi8yRl3Q+r-h5?S3-EuEe@VjEoL$r<3F6pz zmn4W|<6V*<j*WLof;cwbB?;o#c$XxIW8+<tAdZc9NrG4f?~(*@Y{K3p3F6p<y-O0r zu?f?$aXiN+>|K&jg#T*8-X#ef0*ztsk_2&V!rmnb;@E_}OA>a1XbXFnB#2`Z_AW^f z$0qDulE4{%c-XrnL8is9cS(XcHev6Q1aWM_-X#g**o3`H62!3ydzU1LV-xl+Nf5^- z>|K%|j!oFRBw?61Hj#ZVNnj<tOA-kEOA=UJ|B?jXvH3xIoR|5FvqG_5-?3p=O6UQ8 zXleZFTD~S2O7KoX3EoL4!8-{hcqgF*?<ADqorDs+lTd<p5=!t+LJ8hUD8V}kC3q*^ z)wT4}{Htq;{i|z<{i|!0caoBD`KWj&ya6WaT|P?hA?jT|I#GEiY=_tlFe6q^Nq!1~ zQ>RZ~44N?QR*70=@p6N1RJ(3u65~6RW<5L9e2B^9RA#-vITFSCr^%_zdiJ!|jcL1a z)MY$ETRo~zK$$IdNhYc8v*sOx2=X6}i6&E=l`#j18*=U`S?rz*kYOVy<FS==Lxvz| zE|O;RuCuc_Ic-9MhtM2a&Idp*5qSq@b6H{iKvr@mqAt-{ERV3{Jx6&CWZf`#<eesz zx4)o7I*=mWTtnYs&T$_3FOYfXGVK(~Zmfy+n5F4c8P%^Ae!}yZIrW3d<^Yl}clXH+ zAoK4gIgJ?$&W2dyKTt<j^iE#-lzlsbwjo*e^#DH-@MXzh9cpzLQohAn6lQv7X9 zzj^@k9mB~Osj_Ji2Qv9;B=}I8qXy_}pqv+d@GSsu3hwn6z%$5kq(4Vav9(^Y4^`lD z6=*C&!a6T(ZC6;%2!vS}GdZ(8pr+NNjU1UWttM?EEdICKiAwzWuEc*OxAZ79%Hf<1 zHKH<qZy>T-FS`r@e3Azk<^Fu^)@!`=!O}X?;`3ozrZ*pY-vuyu(DGNR@Flg>Ztrz0 zwT|!5{-37CeP+RZCra;Ct~?YN=vAzBO`TnDMqR5VOhC75Tzkoodr+f6u~@v`^A-F} zGQmaH!s@8=l@ydO<3-d_XVMXM)R}dNsH4uDF14^4hLWQ`o}*r%8iu^xUFE2k9LY?Z zOf%+ki$pIa&DN?F^;@a)jwl586aCksi!{BQNftw!Vpk&Fx&UuE2DmvuChwwcjhRfr zuqI*hkz!)Z^q8b9j$<qJu@9B1zogThWA522DOl_yMDQl=*cWl;JjiWq=goP0KJ>jk zUX)Gd+dbwn=OdL*bGZ|wH&B)+!VZ$;2P1j<A}{!iI#s&{Png&Mq`QX|Itbtif_WeL zg%3oZ7>k%~5lawmPqXkvUNCD0K^A$;SW6E(si%CTYI&#O*YX%u%WDzAD#SMX1$C=q zLAOaC=3<~^Eb^#~Mc{s$1cCK!WZfMhcMxQ{2+k4}G9FBt01j;!_Nt`Eq$KDW6XsCl zJ5bi?Qi0RC_Ib+?;d4Kf|E=7A%KuItPeVM6Ch8H{p`=gk0f5n@9fNE=Q#kF$e)B8P zXNTWX!>GNZD015lzuogKX(<)VmO^FpQMuxuTlo}f3ew8Gdt(YH06!y9K#9r-DB__2 zy_iA-yBJiD6+6`Te^OTiaQ+Hgalww?;R$wyFBn97opyFIWmu2UDiMvhxTCZ5$({xk zatJ=SLmm9n4>%do1wR7bMM1s<c!uC3fOi36&m!ekvX3#3(!9Ma<`5S1+7AC{0dIh# zvK`Vj3VdvFSWRd0ufZ|(3$K-Vm8W!}K1(T!wbOFmrdDR`^xK-dmij_w%|}?Zl*CKf z+13lUbd|KwE2)r%WWY{UfPVB;&Nw9q;%Ctda&+Fq2M`4)0f>!2%8#XT%%dvD_we;) z9EB5h`fW%nP&A6GtYw>2p|K+oxtqc+1z_d1Vt;vKzoD1-`?E$vvA<HXu~PC^LpD}J z{<d!M_sGM?eoHU)XNO{cItZ@TwVfL6es#CF-JkB;{hjLU%qet&ymipNpZM@T+@UP| zzTfuvx6glgs~+zwAl@3pduNvhKfvnf`F@dl=e-)&At0Y1xDViEg2#5MpEI=}-|h{h zt^joWZE~Z*@!v@{8$<q1yJZ@3<DsQJ*j2|_`>Q(o->mtIbyTnXs<}<o^MB<VChE;! zqwCFIuhopMH-F82-~9C&M7{@N)$)Lr+6@lu?ZZLMMN{B=db?^jIPmj&cAe}72NGTa z4kWw;97uQxIFRrXa3J9&;6TDlz=4F9fCGsy0S6La0uCg;1RSvRQw@JNIAH5%8UAi? zz>(FE+6@jwgiyP|fy9@91F1R}nQAvUkfx8({N3O{x_-Xl?*<1l^>v278yrY{2{@4W z5^x~#CE!5fOTdA|mw*G__dsMfI8Y<9somf}oz8DOc;5rD%i8caNxlcdJ_>Us74Wu* z1D&k7Y!L^pCRAI*fpu&HwM87bR+c=NK_-%$#a@k&5$lqCnZ|#%HOlZpxA>vlB7P8r z%TW0=h&7&C;0?AE-m#(=k+-kHdMB@EjLw1aD!R{9c4ReYlOi&uyO1V}fRablB4APa zX^bspPxgns>L!Pf%h)P&KxSOQ*m9EQnzI(ApUh3aipRj}0>pMdewT70R)AUhQB2xQ zVO~I7=JH+Yl7q|(cBxAaw9MEpb#Fmt^)7X%LFO<oF7qls_3Z$>KQ8kD^0uU5ZuOgs z7t>|2VO|Yt*>sAnjcnv>I>pu|!W`e14c6!SmeBb`&p8gl@d=H{<=e@8te1?OH3;I9 zRGjB~&l+!nu(W>N<7Q&LXA1pKR~2ObA2abkZzkp^nu*2#t!Co*L^E;r|3_xx0weyT zQI|!S-(?ZzCs>5V|G^>*j9Ub`6@X&L?+Rd7O6WCyXsJK;lc~0P4__yBx%1NHxbN|T zjC6nCq^NPiqEpm3A=G#woTV9=aV@{u({ld<Y#&m~y<aA~uEFr`>#+DrzM)>p_wMcp zSmyqVD7B42WXdbbHeXRTr!iCuvISSL&irHgS9XLPbJ9lqpTswp&B=sX65m`l51FV@ z!mu}H_yV(e=$XvR7nsc>x%~4k3W->6fJkNu{=FdHEeiaFJn*y}ZTIV?cb?DH)S_iG zHGQQ{`~l2WbTKJ<7jz~UkWd>IPIQq(U96Le#MG5$5}Dr!XOC=F>FR|3l(aq{TMkB^ zb_|zYJem81ekI^Yq}0+~L~a0;UID=SrqgEu+)tM<A|DBg$U@e;1f|<9$j--Hq-ShF zXYjGQcaPhte(YDRIV;|Svpsjl|3u!Vtp9!N)PK0hq{}${?{ksKvbb@wZ2jc8ak3JP zla*+k{{148F5_e+8Ye4VKP_&YtW5o)xN-XLxX7f-I9Z9t$*R+@FycN;pp4e!-+Y*^ z+fA1F7R$PNS=?e->rReaEGurYh8g=z%B)M=hhaBM=q4k<hq>KI^kMAr)B@j!;q7L6 z4_<CY{=V+&otgAw#C7ShNg1?Q>f<EynNFXOCca1k-I^sBUg?)3XEoi7Zt6!UO5RQV z2t}CT-+3NfXUlyBmUeKq<`12(JmcqoJ@S-n?LU3g@PB3KSY1QM`Y%Jr+IQ#}&vC48 zo+?dxr>5;Q+Xrf&()<Bs?``u3l$|i3?4NJZG;cuJzYwbdW&cX729*69u^LeJ@5E|A z*?$nL0cHP5tOk_*7qJ>pwx*L%1IpHgPy@;~gir&@w)ErT1Io7L`W`i)?8E_OCk`k( zaX{IL1IkVuP<Fap(xV2HovB|OA5eDUfU*+@l$|)B?8E_OCk`k(aX{IL1In(`uQcMb zz3q)1yYo1I?ATWy7au$Jy5;e)W5>tNa2Y%7z%ctYeg_ak*_9G{vmeT_a|Z{K=zuq; zz0Qew@p^`Qi@21XLK8-L)WKN%qv4%&Fc$N=cksAH{uaw$dK$5j8kYnN_BCGbT#q`X zZj*?c)qqQrpRG%n%vdukUCs%V$}GEPZnuY#=4WrZ(`!yd<_vnyn=uwM-T`=-;AMmR zT39J0ePTKM&WhIkbL4pvsQb47bm+SmAnsj)=>VU}N<rOG#s<t(ca#xk{e+tG30z@h z`4=Gu?liLBMHrvJ_gM*h8aeTq@~v+<++WLy5BK6SHQfD=!Jd$##Wy$peT-k0uw}9D z=Ego_T&}ARbzN5<lI!ZtgzM@<a$UVQ#x4Hz8ajt*0+z+$9@?z>Ct<i-FK}rxpIvS7 z0-*3{{^BK<(MPrq01PrQH`E-eys247A}YBzx8E#&a51?~AV0X6Jfa;iBubEcFkBXJ zPR)g-3r`(_pz!Bd$LZmX{m~HNhQVMKzM&3T!^OxD2&cm)+u_z`6d67g9qWYafkWZ( z<zN%uRtN^+>tHD(;UY9;a`>GbUZ2@M6p9$Wt`eH5MILBE#A3N?Cs{uGn0&Q950!NJ zeoyiSJ&S8Sm!Ex1zFy~Uq2=<kkI6R);kf+lWAe@V-yk9`Kl_+`yO^4&OJkaRkKWUw zkHrnk<ok8jJ2Qo!eN28-XH)UBk171@WAY1%Hu7>)_}RzgtzLX?ZVEs9nEbj&=j5jF z$DHJC9-W<=!YzU1?H-+#o5IgNCcp2|nYrK%y*<nBG*}roGJ;mXsO2Yi-KWu-_BDp| zhdTjHWv>^)aaW=B><tFLd=hbQ=u2xMMASW+#C66UnXFj*AQ0CJk?9_t58?(Pa@_?* zAZ|4JqMUqp9=h4S$q2#sD{^nZ(6cuRQRbeEp0qa!QRNoE0@ybTQS06XZ`QuW7zhT9 z?$4-=z1iph(d6zL4dPaVr)~$j4<X3DO}^vO=H5jK?lkyn#t?UE3y8an{XvXye`TR} z3o*uBMRD#m{sCfw+n=oO6Jm18F4pG(!|R(VDZOCn?MFPi$CQ+%13^FP(Rou+x<O6t z$2>ZBN=k1ihyA!m=S*?G=T!fMNH@)WhmlVjOHtAc(H#3JgPOC#?Tw*tKP?Ts3ZreF z*kgM05q_aF`6He4TjU5T>*qRcWpd>(1SId(`CFj-GS&*oKj<8DntR}65I;(U73HUb zl7A9Hu7Jb;F()}-bTZprXrSbvQ71Zn4OAi75yH|Ux0Qej8OMQ2wPaA&1Yk1K)Ky+- z>ME}^b(L3|y2>j}UFDUguJTG#S9ztWtGvQ;l~-7<@(RmUUSV~Wmu-c?Hk}ruoA?gy z-t(Z|8T1`obqXVczJsfLhYb1-uJRo+=sUQ|cgUdc;40rCgT8~Se1{DB4zBVYGUz+F z%6G`1@8Bxm!DZXJp6}q&cW^!5!KLrudcK28-@&!?XpqWD-@&zY-e}wC(syvZQyA`- zGRV{^441xx>wT)irSIUT>gX#dCw&JuO~+u=hPm_|+;lw`+=jdK9o$U4DoC}Z@8Ei$ zs&MH$xSsFe(syt@-@&Et;CjA;OW(oud<U1lgIg_@XO>If!SzmIxbz*|I=wzf-=VwZ z?7taFGr3N7rm)8|xlVSb@dXYo%W)=cWxsGi?5L}}GPodi4q<m$n#Gl{b0}G4(+zPi z?Iv!B+sXFIpc~>|O{iti4RP18<*W?4A#VIY#|}Cu7QbUJQwUo?rVxg1x4qB~KeSYf zaJ?THA+DL}e*xuS#OElTO{w5};JNF$&eaSp_f`O%;K4@H0M9jYf&zG}k+lHW1rQ+k zmgAG)T7V$I?VMr=9tH>zywJ#F`T%b?^5<-TPXHnWdpI!=Jd{Q40yrBMD23qpEKWTD z+W=w&A7}B~vjE=#q!Ij)#e*0Cp=@5e43GhkLGTZN?gYmJWD=a2&F|p=Jc3-=1m~cv z9D)}Sl1uOoKpw%T06hry0`w%{wG8<LVely+$OPy`Fdv|h;6#8TsYN!=n*i_tLWwY} zmQO@$xlQ#LGX%dEXj(bJJWPlc1XsdrRs!S=oz$*XF{B38tvA61FlyBV(=adB5d4Bc zQA@A~QFT(~HchK1xEOlWKyVeBw~=5YKp%p80QwR<*~t6g0bT`YBKQEHKf#v(0|?GV zS<M8O0SqL#7NCXTR)AK5`vC?KJO$83@CraX!M$j)4uVx^=fRQ&AwvjW0~kv1A;2(# zuK<P<{0uOHz{=)FkpN-<qX^~zj3!tDFoxh%fUyJ*!<iXJ@EpK+f;RvrND%-N3BCZB zMDPQ^eguC3OeP3bXxjb+=>P{1bb#}L1mm*h8`xUzRDgpBGU~YA1=xW;J(!>YeL9Wc zU+B|A2<G+Dv_lClL7z@1_zqLi41(27{17t0foQ11MILnJOoH8rnk8jn?w(Bm{nX}& zJQe&J7iF%2St8g5&hrS4MvEOuuop)29|Q*vkgWqP_W*$T1Y@Ba3kXJm^Fo5m7LIpQ z%UxE@@ea^1kmDWT$<d4eIIM!>9iXs);~n7caUAaePmkkx2iP`_;~k)HPmXth+#Ve7 z0H%z0fIVd#@8n#-@eV-0%OzM{%JB}cegMZiz^{Wj-T_X{<#-3!Z!E{VsfCY1Vl8}q z5ogIGYB@`u*`Mz2(pt`ye~+fSdpiBI@Wr)scfV|*yL)>r-QCk$=<c3SL3cNIINjYD zg>-id;2yi-FWUHbbQPW604!}Zyd13&3%8Eo*Rjt<6QzX@hToMQ{(z<?{5PtW5iWwu z-aTBzpG?97$MQ3}qo5nv;RZ;O6TT6-a>KikD=+*6{`Ls>MJYYQ$wfTXct7MR2=73H z^a{^|LtYr3-jfF$KR}I&!|PxZO2QMM52fKAxjgGwhZ4)f&2Ww?!gHW+mEl2Sc<iwo zYS%mbz$n;<@T;gxO}LYmA^bL6_qy;N+Jx}ks7pimuY4Ycd=u^5C;TD$sBgF)W%Uam zPIoc96-J|fcnI`uKzKd|Y;!m(i$^4XK;D+H0sgIF2lW~hehIDD7H&X|+QU2H0d<5Y zL8`&wZi9Jn@(K8QL&JIv&rRN3$ODs)jpa$nA*kud@HXI4;obN<I;@Z5p~>#}J2u=K zf5(LfkK=W?2jTC8@BygZ#PEFlofKY$zx#!+8pCsycj52;;W9{gK<>*j#adeKR?%UA zw0!C?!0W?gQKjX+J5**~7>#!7Fu*2yqXbEPslxz^WzGUPpqM%gP&J4;3~<nJ>M+2l z9@JrgQ+rW|0q!179R@h7fI1BD{ZQ&KKxa?tFhJf=^}Y1mt*z8yfVmx<vjASM<(vi3 ze+cI+fIr4?&H}ignR6Dv{1Ke90MZ9?&H}iiiE|d^Y37^-u&jo276t3eISb(Ye9l<_ zFZSV_MKStu&H||G%Q*{RcoF9;3SY)Ki`mC>&H{M8FXt>KF65jAFna*!EP%Fl&RGC8 zrJS<>eyQc01+c4-cYFe@9KbmX;Ea0CSpY{2WjE<s?nkvA=;*`$0J`OQ;JiF`9KePi z>^J~xBs&h^gEn>?z?EFl5L`;X1!1`tjbL_w`eJ4WcxC{z16((r*#VxH>;Q)hX09NN z^Kj+@xTt}-09IBp7l6SHOz1-Hew9oEa5FdI38v>W4M41toB<x1K+XW$@+cTU-{C9( z;P}zx6M|s*<OA?&Kk@-s-kW>?F6~V|0NcyR2jKFt<OA?nDfs{#P)cb4&g>vNfNjmx zOn`%XP%{Bm7g93;cIQ(w0pxX6q{=mivUGqxqgXn?=TbVrKigS4z&(9fI>42~m@BO1 zwn(P{d_Rb}0IIo_heC4iAIvC#H+wP)pgS!v!FAcPCem_yj3PsT<OWs;U{pP;1MuT` zRtI3&I93N>W&s5SFiKc9Kv5A(0(h~V)dASnz<~y^Y61ruz_`A$F9Bzxk^?P*9Dn!b z&nRj=&tI9GBk77;zrf5!8@YdC?MBPRRxm-2k+Y7|?DevWy9~p}-pECv^*2}Zn<eeP zsA{jTgkv1!l9!8Uai?J}zUGqsjm}iM(TuZ}Lk9cJTP5Ib{7q-5@~!P%CYEU7tU}IA zqw_g4jV|PD^uid<MwbraOtZ0y^FftZ)#G3bR;1li$6=CoC;x*rOXc$V>-)hqD`J1k z<*&S}WbffRUCS828tf&uGXA7(`<_X-RFJT#T*m+4rp0CYS8+Peit(l0@KgObm-edT zTzW?{=hBt*@xw1QQ{rQ}HxNEPhjS_4&3D55xLqjxSrMiGd>rS}=4{TTk5{lJ<BK_G ze$$6@=54(>XD;Z?IrHTnoHL&o&pC6>Sk9T;8_o>BI*4=T>Yki4$M@!(`A`+-%=0Ta zXSQ~5&V0Izb7oZ&+h}?T=gd3WIA<Qxi*x4tgK51Y5j37%qK`o(V`X-^{y1vreh<EO zm0-=C3Rll=5yEn>fgahdLOAY|+#l=Ep9K*~*`Ila`nyh1_j<PN2%Qa??zVHAc(f3i zZXP7E#|e?^UQ5lHC`7*7PKJ|(C_*Q2DP~)PxCpzKs<XddhoX8~_EbH$o5t^|+0*1V z$$~lDeK|y@vK5rG*QTo!^Qf(d3B!UicJSdk)e2l+PUlXAJw@MybkT*2j?wIy`gT@0 zC6tT=vvu~h<z!kZOSw@rPt`2RwNjSBG}uRaHBGis{$_pt;n5K*r7!x-p6}6ND`gUe zTjbG6R*G!X9OKa;4E(Fu2aEMykR&+<W|Qq@I&Zyl$HT7JCkoc0^ABIF*{8^cpA}s; z6U3={T6gxtQ&2hkG+phbeF2MMuhJV+xtI0?H{;Io+I<R%)n2<lN+Hkn+WjxsO8b1( z?(TY+CHq1l%G{@!Y^@MgQJ#{qFBYQK&18RHE<~f7OX5l)n%t|X``1YQ2D&R)g$*Kg zo7$kdPUk!PL)>2Mj~k@_M!2%?b)yg?UD@=yNr+MIr`!(QD8y)YF?Dg15Mx~KL)teB zG1irhv0H=~r*_3Q%Ra;e^tIbvy_g8d1$%^TY~QBegZ7Sa@6x_Y_GFWff-jVBf1_W? zw*QlYe<xUTKjtRj9w98Zh*oQ_5RQ8boBMkqBJLSf^B;tWy6G5%_D`Z;>F)j9dHhwi zJ@?6&oW<F{>%_f^Fm69JZOz!mvW1T!SabOWK-)BU0FrMMZN~q>_4u>9yJuN@Xc1<& z0|w)gYthY3cA;#Oy6<xXwpcbSy{*|2qn$rQyGvjN>{213?pTUaCPc1#G3!?@`ODm9 z5*5b1ncSjkYlsuIDHW_=rP_+LavM_)qTW>bTa%4y7}R=nc4NwGFn4ynM`tyr9K&JN z;L(}<EGLV%t%o!D_h+^ct77*th?9HN^H-;ShRNNH1;@_U?EbRbiaOGw4-mp~_oE^; zODfuNZuQ#MlVBN(*lk7|H%soPs&ph~9-NqYh?hC?1AUXBMhbUP((RGP$;@2N8D+GW z`4*-h<7NJYzsZf2B9PhPm>g$}VdhMGvau`6Pk(@ySvVb-n0bn%a@>L3tvyI$B5os< zb*d0iw}mkW8~>Eu8{2A=+I=H`DP80MI1u(U<80vMm4o>{<DtgfY`?G>iDDn-mAnhH zlYO`lj(a}y&-6;pqH51FxG5HOd0^L`Ekw+1<}5JB;7((z7CXzHXO!`$k8fZx?W2q= zF;}zZ9H!X|jD{R;CZ@6@7t1#F6t@}w*~dyD)7*t@<fTH)aDSyCJWkqwmfOY&<amjh z>rSM$o+!jo?uRrmCke60{fNZLMia_e;(o)*ESGYQb4PH8?G#CNlKUl1+zKI9xL=W2 zX|(33?eJ>+pI%HO!D`sn-_oE%1pmNhjj_I`N=wFa?N!DG*0wL>&k$iTNTJ5|nL=2q zPG@;dI+d&Hv%Mz0h(=|#8gyFZIgZ+Mj05=N(U^YR96itY4n$O@tqT(M<U+5v&g9&) zMp8L$0sCaFaN{?dx#yl7Eaxz}#Hh&ihskA$ntr**=XQ?dD<l<%$*odXnkw6RMaCa3 zjBU}zgp}{|rm+Nx!`tCVXyHG_`MIou&QI0|IzL;>Xr3Y?X(-<{M&!yo{gH7if1a5+ zSF?A@aiju%iQ3*}a5~6e#_*2~&hng!-#1=IVpnG052Y|~UjD>bkt@va<Sg^4@GRs3 z@4z_jL7Tklw1{u4D7uL6xCG=??jpXi5*WwLX|0f_zXSD>qdlIZUf>*w8kXnhsFxhY zOk2EvkRS7;8673pt?0)hS!vG-2_P<$-Wp{}E8EtI2ukM=C^;U;93R-iH39#Wel|=3 z9wPp#3zyH+%!vWXZmM_8Z0iYfVaJwykNM9$RHF5CnAEbxvzIVHxLnXL9$8K?%ozdt z;}x8uJX}71-Yg$$l|P~F%*6qHK%CR!fEaqoy;w<6@*1jZ-WQM?$WB1YQqCL*kTPla zfvFS~oL<ZaBq3|@pvqs>6Qecw4qMB-6xn-EpFY#0wUTi)RGk2Siq*d+@ADcYfQ?;B zT?giGa^*B2dUAkis=4VR71Uz^VN+9a0{61ARDozP4&M^K2dtl@c+(|OyiZEteUk9j zYJY-xcFvT0T+IPUSw;~Npk&NO6^)IS^xRpDr7Q@bc@RFpELhqCSlWV$Yus$nZLFZn zXxt*<T4ey8VSE_Slk$B|9|nX|Ws5{`Fqc+gTp1rJ{6K+VDS_UYkCRK|Se3R@8l(Dm zh*<F$6MmxFqefBRdaYA3k89YJu;|b+aVb*5A_e;vSo(G;mKa7<5|&B{(J)J>xEemS zkt*Re6@Q@Rjc!6zNMmG#$&|ft9R5$I87XOkejArZrO0;>T6%1S1PJB?<V9A{wKA?$ zm}=``QCmMettuXlLOx_6qjIQAY_w59>8EuCej%fRQV4A=u+&S3LK>rkQm><Py6_u= zyRcRj$D(`2*dQmbibC=kC*c*Vin{Q)QC;|RxD>_&g?ZPcF)^sxN*Z*sVmh0z4DKJ~ zOa<Aua(YwOT<UKX_$H+`!KBoRNvSxw9^vZ#OReNm+SeA7daM5x&()HUt3?^2IvqpC z+@g;~&3p5+(dHKZz}lNWyt#!*ikQ{h!URS1(#?Blm5b<>oA<Cud$SeHd#NO7bunqr z!5J~{v}AxigN&s)Aqfx@viO*p#LA>C*37$QjFi*-C|J>n>Cwjzl*DmO#YrUYR}s@| zXj3e%W>Dg%qzY7t2Nn7y7D$PuUknv2UHlDkFR%1E%`EatukV73yWlJzDmjW0<SR;) zsY*rs%0}t!%S2VvzjkR!^m_`u;e-G&XVhmevXuJlV=f2uZ(NR)3Jc}v-${5)g$7fk zfA8|>0eIIl*-ph<FY<ZsOyIpUfwzY_RP|jhO;7m}P5;E@5Y$RO=ZTj0OliByBH!S@ zXG+`2)bXBDmXbd)zRj&F<^J)MTUAP)fC5%2&tR)Ksy|LC^83R{&;UpJKr2}UT`>*{ zNy>i~`GfPIkl?g_f`z|WgQ=mefj2EA1CMJa;}8`-`<P=i<4|E%qm0fG5<$(RDX1!J z!<6%(OgW)qf65VBt3Lw0XQ|UM=AdFR_KO)nT>49;MA8c>o!4LRC}u0ZMVNCPT|5K< zl~uLW0Yh#ukzogdgQwz77y`3K9IJ}0BjUKG9R7{jD9$LFqlzxXzYGp6^WI{wi4nlv zud;bWs)2Jk-(O>L>d;e4sMzTe5Fg>dVz1~^1CxC@ntg+yn(}49o5es>jDk;Q-l{rI zD|`={66mk|pAz5y5nA~_{psl_|EItBKP3w|i99GHKtHd<@4*KxF|W6=6CSb{E@A<z zp`{s*s6iu><D+U4w5^MfFr5pr%B*54ysf`TmM=O&@VJoF6qt=#%Hu1*e~TbD!UXDb z)VvNu?ak|R66W<e2|mMI@fqN>q1*MZl&T)WTxXO^08^IDSwMJnoY`)R%tW>HZzM^L zD4o97Qc8C+OuYV^#Nb~81DU&#*%~F(wpdE#7K|nR4O72|yvxQ5L9B#(%cO8>&~Gz2 z=qtF|_b?q97~#q!uBHDl%x$H<qWocS-&CvYM|=O3Vg4GA`ATA_LSHErs=SfQs65lG zEc3=E2uZ{72~3r%xSvb1o@!dDEaKY0FwLQ5K3Bt3<$Xq8dkk}4JZ4Y4yggod>$rLd zo8|@a^1=z_g{3@L4$h<R2c<jCDfgX__k-euG-gSp*n`S8;1ATqEtB{MD*PjHmt_7_ zHsix!mu=V~jFrvUsU~8XxOXN_#GfWi#GeVH>V=S`;z%f)@vX`w-pzM{t7nvZDq(!D zBE={AAxJ~(+o2>!jW3Vv;dCYJ=}1D<y_ws@<CPP?mvx`Bm^5K&T@Q)l+)|n{B%ZF6 zOFd(P@(8)o17<Unb5UnZk~DqR^nulbMvy;r=cgR*HwRRh><zhE`p+n&WD68ZKOsr{ zhDJn|9Zs@J#!tIM<;s*XgSvQ4vUJi?q$}mlDgxM@D&;lFOj(-2@b$?eH5YZjvQ1f1 zHU>l}EF7MWa|ngIIE2E&A%t$$lfqpblEUOrF_p7xN?4ho9Ih6ARPr3kgCO)&5I|Q& zasDwuwx5)2FZCBJoJ;e8|CLPNN7<BrCDW$BOzD5fyE7G1_MeiX`X87KDjqixV7L^Z zqMH%NH5I#)gb*p8cLXcrUVYvFWWFbu?>UMac13R<?G2pla!XyS{x#0EG=XbrBG=Lc zuBATLx+*_kc|yMO#C+um`O5u#^Wym`6Y^Ci=BrG|SLx^55YN{;Az$yre7zI$_4f0< z8_!phkgp~&Urj>38b4pGx1X;rAzxi$zPf~bb$-5)@q7&l`5F@QH6-L~@bj&V=j)S@ zuTNsWJ_-5y`1u})=j)e{uU}%mehK;d`T6$7^Yu^2*FP~||Ac(~{e0!se!k{}e9ejZ zniKLhd--Zqo|c3>Es1$r67sZod9=zo+$4*c=BjFcVu*>+R})K`H?d6O9$c|$-dpWY z4aEslLvg}XRO;pE1{<d5>ZXa2U&<5DAn1yfa$y2Y2dWI76`(jg6?wE5`HCo~+vgEv z7UlF?s_Uij-Ad>76+-4^9vB7|uSN<flS0%ST_GD26)Bi+^h(*YuaLs4q;O^E^%^~H z==ECpv8b9qd6mnH#!XUU`66_V{PaPuOdlXlW(6H5y;**s(W<xAC|fj6SAN`FAJ&u~ zsp%6{=rT>8r2oU4WhyE8!SeGKGfopRs*`HP3)D}PUqEWg`D2m3TonRRggQs(jY6vY zbG;}`70kd0nJ-e*A;{rA{kK+f(KyUKr%S)<;W~fbKHZghTjtx-#deANW}M;5{+P_q zXDFK{^Ws@*<rA$3K3kYo{FoER^cq)7>b^lZ5ypWj)!S8#jPu<p=@=h*O<-(uDNMzj zVmb(l2^!h>&}AdT4aOAzl{-jP(zaqqo6g_-N>(&;3Qv+5<s^hEr}l>=wM1zZEa54f zbAL?Y?t1C!9)hKsPYjP^<$C-}m{okuD*r6uDDYGk$j#%DYw6m2q1Hi1*ZT#2q1HjN z`SL|bR;|*mU&-1>G2Shi*fw9wVy7a=Rns?u`)=me#ki!JiX`rB>{SW+)O2B^Zx@zs z`aaa<mj4ivJuB&&A4AeLwUqNGS(4RMbaH1UCY7nkqwAEK#Gg_so??cyB)U#D72>p2 zC$*<3O)B}DnzBLFG_Ap}=>}C(HzJr^R86l-sOk0bn%)pn{+jUK6e916VZ#MevWhLN z$<3-JPh#zD+!7LH+CjzIoKVACRSiY>+oV`XxRhrvE>)NDA0L<SQb$%aX)02}rNJ%} zUry<=hXYM<tZH$EBWqO=<w{|U&gbs~m1D``^Qg{y0Tl1gqrzJoESSF)lpYRKZ~RkX z{%im&<?vSn4{Iggvu?kctb>^agIXqS_M2c;gWpWnK&``mH@l?!(`=BQk`~d_QVjC3 zu}j)v-prBe^Di^VN!GL@6Be2y6(=rZ)m7u=3+K$y%rV|pz%HcMhb!M~CmC={0Re*f zx;3z@<z(w)M6#^$+N%VUo7&nKkt|yq;+u^W->j4ye84oe6|d3=k4aXhzKwgnhbGJJ z2CBi|3;G>|-qF957p?hXQ(sEcxe}gXlN9@9kj1u=mgVJ_L5kFdvC$+&ei>wun?d)7 z`P?nma3Jb2U_0i-Bl<A7UelB0zM5MR-YgXeOHaSlkBKLIs_ti%gt{dBnGssQ-=Hjd zEQJlU-b<u+zD!YM$r(%G+A#@<nq)?arEnS919X4c>P|~xJ2PJE*G`?8FSUFetlpPe zzQbBb|Ie2#&la*8)ia**5Yn>nSs=@olR>xeLuDRqtkGJ2uSg)R{-QODWaG25iM8c9 zrlVyo_8Ms!7sp6)o}O;~1+CO9R^&Jd906apwGA^~e_3QLmqiwjnzpWB;H<?6Tq!AU zKw$GC<~&t|{TTG1q|Ysf4b<j+B(05~F?*Q*Pc)7d<<<Iak!=OZvmVKpNvp2z=QqWp z(iA^|ThrD7LbJ4a1N^3VOz71E{HA!!Z;B=v=ZfUdc}>zZj|=?^=>A8|!@}!HsnJkO zBF)m$Pl+J!fo}h~OL+4KeL@@BQ+?K^<08)4FUqjX|EIduSnrgMmo14GWmh2$#SiAT z#EY^mF=(K#Cojp?#HxW_OY2)D`3t0FQ$o=_Fi=`wla}YU#rslPT??CR2=`1@px~KO z@KGpuXbeH)5j!*w;6#ElfX4xbH39@$*}330tR2*BPy?KRrX7x~!^R;*?p7UsA$aok zK5fK>7*yuDEOO63{SO!ApbtihQ8|}m4oy6=xR8{mYy<Ma@fUC$^)3^w;bE5hz<1R9 zP%`skW`7&x=z(8Y{IZ(%Et5Xh%v~=o?Y=_Xm|=)J{~JV(sr1pnxnHPHe~x;Vzk+R~ z|Me%+F7Z=n>GW><oeOJXHp%aE7b0qj2z?St9V@$^O|snP7?G{grhq5*z}Ju%rbBC% zUEvm4xkoWh#{4s0K)?Obai%4_qhDIi*TOp+S~OUATf(~#nVN*TCCnEM@`k=?3;hV_ zaohwR0TxXGZfyqs1^I^dK-dR}9GVL78;hQf6jw^^-}q8pjjg215a}}8kmU0(<I?rW zMpTi_?$W-poNq-s7cDzhw)~51`gW}Oi#;VFXCBnNMSkupwr5B~IL#kJt<6%Kui$ad zMy7JJOxX6Hr<vt8D=`u=<GA}=f|4e%5>@s?Xo#UB5H=T)Lk9w!NeKsk<yB(9T%`L5 ziJGN#>V%Pn(#EVrlKlRx=hI)QdXATU`T>$e-+z1?CKI#S=7g$G81vy*ew`<r4HYo6 zjXelCQtG=5^=%UM%$9xJ?%?126gPQuWnb$c(z2hc=u<%tSOLN2H`CZ-QY?_Y-Amf3 ze%ZS%=SG$^u@ytwd~*iqyTwW$fPp$m%6XH;Y(?_@=#QK4GR9ofdCDkWC}_S<kDOQW zjp8pp<_9cu3`vne$md8FmHOmANgj;WH$S98*A3<;J0aj0@ZFF5z@O3=HrHH!%H&0w z`5AXOjzOBymw&Ckx7UGmlhILMvl^!(W-@Cf)b)c|sV`B9J7sjGePcO~5Xl5NXP~z{ z7^L-^_<u3>-GNmV+t=r|a7iO72m(qd1_%NHfj|<HP;w|agwWwiNJ5h;y(lFS5l{pP zpi(7>g)SgXMa522nhJ;tA}Tfn3o0OdYwel2x%i&H_vMe9wP*J1+0$qCnF1v|x5?4k zSTOMroNHMeinF<-`8Jns`yC~bm1N!FDOy;N%<pZU%Cdaf+lqZz!ytWE>tNOk{W@t$ zx1t+ofR=>cE>``$pu0()R&z0GW@>lt74wXDy$q$2b|dMBQ31L!SH`+jw#+MNhHM$< zV!pJok$2~Os$*+5q2D;m^N6rLM2{FGsun!r-^DW4^O(e$#d&AKd9ObKo}Rg`MeIYl znfeSuWW)j7glTI=MSv6lrwv%&V-EJ<eubW(c!1F}&vlpq8^dh~`Qrf|C8z?hf&qtu z^%Dk6<s*=6SPMjfqwvh4th8Uee!k=ES>w7rRm&>fR?Dj0R?Fgf45!yGT9)(sFS@NM zeL7rJ&n|o3aOE2rqm7K2Mh4GEIQ=ea8JV8}l>xXvRp#!Vw?!|@sRWHr2}h#~UVk9~ z*PPURk}PNswbczskyk*XWg!Lcr)m%N079*Hl=kaSx)LTW3gfc?x)kdLOEHNTwC_zb z<<?p}dbZ;n4jwboOu4lwDYp~Qkk3?m+PSjRbh#~Wr^{_iJ6&!^0Gv;M*5%fd`Sdj? zeh>9zx+IUR_BxMlX|MCB7J&2D&pMA(?ry!HE<E&falMhIbGNq%Il_c|j3EzPFeSA4 zXOoK;p)HbR{m7)y+~H{~`QuzVuRER0pAd|*dm2?G2XlpEH=DWB3X;ADoAdb3rad43 z#k6NG_nV}bwC7EnBpsJYYr?Nctn^`x(P=f8>DBQvT+PYMF<D4P!<i$m2y%Za;Ywwq zd9wApPnKcpuLwGG3WNb$+YnbWdujL2W!OtU0#B#tSKUu%aU=BSpqOBHRLnJSXY_{K zGO(r6(H;cqJy7;ofU^K8zy7Kw2=;?;sp2r(EoTHAIn(L&8UQ=2!21B~^lP+`IhuPs z(wq33*Uy1Z(^g_R)D-tp8N;&SH_c-5KWkxTmrKK#{1%9#Y3^M@vp<>$y4lzfBQ5uG zp<e-=Iqo;5)$=X%oXq{Kh&>KZXBs@2>sHUt(T!~aRgw9)J}kq7n(zZyGX8`|H55k1 zPXJ8-oPA)sq(-yvlQ{8<J`I<aqGAI6H5J>?2hp?*b!LFS;C-D1@BUqb2m{I*P+0>j zyA0P$x0gxy-MoP~xTRT|z!geNrOY9kzt=+m%owb5FiUXVB}G3Ej^!lqHUw@i^Vhp% zox>_4vhI>)4ysJr3NTY|WWKM+8^$x-i5J;YAC&3OCU_r}>Q@2%e=C`qJSgAxc6QLq zJJ4JV{tUVYGxD}eYMJHP?5lz?MKUunOJ`<gmd?yv0L9<T@Ne;TH2jkc|Ko;#75P&N z!RvuK$-6m_J?vv=@&<g83puHsArq}HNN>F}NdH25IKSx5lo=oGk;%=|f^-eiG;erj z`Iy52(D%snceao7-$-ZeCDk&VeFmH`;DQ0y4e0rYF4Q~&h8Qqj1LVhM474ssD(XDA z7D;hEXtEeS%;MqDr0LR@LC(dbxvdE_JDPVvcP!5pbe5WWWv6Y0ux+Y1-DAKKcN40y zOV7;SZfzF)Niw^vIi*d|v!=*R7P)GdS95W<5+6jtx(>>R--JKC{*^Q;EZb!pRS!yS zxJcFRZzG%x7L&~l(Dj0J1JKQ@VV3AR<TGo%cFlxjjGePN`C#xP;ysXbc)cLK33Rg& zLoL@)na*DZ*-;e!NP?pxr^cdRO3p;Fx{gVZ)}26~O9;|)L1!_C7a|dD!R#s%#>2iD zYvFbto*7RAxH|*P2PoH>!!`T5?VuWUW~pV4{LAa_32?V<mUy>FchUylfdY84kwn>Q z`B~&}>5NiH*AG)VOTodlP1;TX7Dl>UydLC|-p?tgxdO>rV2*A2#(&7`VmSSm73WOb zlzh58iWuaKy{tJWYR=7?bKE~=zNR_R7rntreVee;a2YN2vknTVDW?%|<#Hr|WILBH z>)P$PqCq7CY8cSafMf$&8{k|qUEfMJx%r+vIHXH-!`qm}!F&&guo;Z*0Tb{c1D*;> zScHVR+PI71Fjo4k5p7K^ZR2Jw-O^d6K(2POnD~O!5JLsf-)0tG_4*q_6gNR9v%h!c z$?YaZ@J!-mHb2uttoQxo3X^By;XIE}Y!H^S?W)$r`S^<JSDo*So)Oy5scJx?0oexh zGN7*kLku`(zy$+be``?sZ<7Q3rteOPiG{;wl83SF%&3_X!%_1P^i7V!h~Z8Z!{*Oj zXgve_{a{aijvg(<qhePxoVJYNF6>UAlO`euE+bEqWiwz#4DIs$;o(d-syt>?aaI_o ztp>biz+S_I&V_C61L<6>YhM3gQM#ZVtuSNg!LRcZ5JSqX@a0rAIf+ppmL|Q5Q72u~ zQrjEQ`<fBoyAYklNRXK#cReSSMR58Q0dtlExH{Ww@ULt)GQS738_WZR`7)Suz9LVj zoMZSGcA38`Lb3fberqDE%@;iT5R^hKn@?$pzsh!lNa;4Od;On^(9`Yp`W`-JeLpW# z7?q*J+x!I@#Ihq*C+TlK`_2$DvbpSO$c|JKzL;d$rP^714<pv3c_^Sa+pE6P-7Ql3 zO1NjPzOEkp+}PgCg9eLc6}lt8cEj_sO!FVTt{T5{N&_n`ABg$JZepBtQe&(>Ouckg zy}27Y#`0;qDkq&8b>UP8a&xQRp?|F2+<}|`wg-i6HrZZ)Q#-I_yaX^7z<vW@J3wYO zIN1eE$kg6ncGm%{9;~j~JC6ZUazJ5*W7%JTx}^t;-AY*kM}85p55X}`9DDx)xEt;P z(cuHi_F&SK1mBD@00SxeC>S^k6tC6BYnPI62C0m7`SgUS6S{|tU*U8JzBv(9r8INO z%YSc9b@}hlsE_~UF=pgkk7d2#?}|`tCxamo40aoULV_*;YYB1z_5kD!1<0F#pR6ee z(+n!C=F~j9)LKqb=fdr?o}pj~z*T@$vf0mrs@Mx)3qVtX*8zqR>;qWWi-{A-Z$R=M zO72w3+d&IF+$$7N@<o8uJw|ewfR@}Wpe5fQ(2{pDtF4rdZl6C7z@Cm29H-|zfJ*>@ zLU_@F-mF8(V8|L~rLELHH@Kn<x^VsC@%ax)8SuMkPJd<G$QddBy?K-IKW`>~=JV(2 zYP>Zc>W<=El1w%30br;B0IBq{8RmIVHp5*fVAu}50T}-I-g=$?5~Aj{x1Qr(AH{JM z`5ioE6&aCZsa0eZ0Ov4RWfds_W4vf24EVM;)dWn+(E)Qzz)=kNx>pC3)ovY7tofeb zyb|bP6X*qiTn2Jln*c~nQ^aAfgUWBg+ui|inlfjBMH?O;;Cf)C%v%n@^+lP_{muE? zxQ^n(o+!MJ897(VR5ZSiS%$2XY2hr;&BbuOGK{?p@?TAeR*B%%ebhkvtS}!2)v-RA zp9|y1M0ZhZnan*eL2t=LuRc8;zAp&fAXghJEBSo>Y;Jg19X1G>iLr7GJjGbK2f(=- z9LiY92kKtqbT}W~u4}iBCOi2D&LQ6vEk0+64-kS?D6lrn=V$GCsblCwXaZOc!AA{Y zje%s=baN@6%-6o}7&2$`7HyJ`BJ$sIT9i`EP62={>l5GRD!rm~w1sdik}CUXC!MqK zk)uv%8ck&@Zbcab;z&!cUrG9P8?@^7E9q`u_u#jS;IH$vz1n?;uvgAUVeR1edqsDY z54Tk!b%sdBZiO<%$S`;H$Tzcf#&*ls89OGQ*;LA8>`w4a;8a?MnmQtLJy?=ip6<IM z`Bkb^Uv$jjXz+LVeKLJ=*Nwb~GwMokYY5Mbnz4$j1f&7v65I_i1|Y=*wlm=}lP<|{ z;YS3!CtRL~i`^gKoxW1jow4xcu;m=`t1@-I_nVS?RwL)8(z-BubE|wTsJEmPW@GM` z^NH>_&Zv$f=e+#)=UryE;lqkDFNQyr_!GyUhWJT3gd7>bWdhmHFbNXA9{>eb>&I_E zY=sol5|m9*4--(_Q38s*MnJKZ`vXvP=l;6Q*9`Y53)g6GF5A4c_l5m+C-F9b(>y%b z=2PYaXEUGDAmmd@<1u~T0I+QeH|@SRckW*R`HIC1_?;;j52p%X%b8YP<;2|TDkp|i z=K#gu6`|N(g5PWeNSPSn<0~(g{Q_M2F{Xzjbd|9Z8#YG_&BVm839cI@!q>Z)Pi@W0 z5RV^VdYEQq*uy+Cz<gUv7XL$_J5D2iiZ)jCOkRZ4yPB8T3-5}Ur6nJzE;PL}KxdYV z^!e)}w#PWjmG5$$L{>je=>k`v3(I|Lmyjl}mT8?_34NGC_qeu}(<f5bnK17=U@fbT z;W3iLA>0a?F8iGGz*R>2&Q~xyX(gRsx{uod9z$$RWz%uGj~kti4m5qI3K@4Vzrr%* zEoJST13I}PDvPU?`19Gm+L(E}TB{A!{f3P(I60F33O50pI>n&qEFOc{0Iklk&+Ou> zfr($n_i)PvW5yQ%vk8tE@E*VpfK>A5Uy_pV8u%nqWzzAkp^Hu#flVGwNVft9q7>Wp z|C24vj#g|Xi_-C-EMsVO7QGp5Y-#A-)%T6j8v}^ad%$3=w*cy01dvMppx(b|y`Sh7 zqL8Pkbx7fcf%2zUwgTt0@^Aic-n6{`j}-J^3jTlsm08of`7*of6znl6_{^l>XMkL$ zAjR;T6r|k}6^zMK)HbX{B{lPrNN$Z%lL1$E-zF1@dx(zY)*(8QMng;_hCdidqkoNL zf^@1QqRrs-7P?wjysXSdG7qE?ckE#dit)1XKWI>l_i2M-vQ+%Lq~f=M9^Is2)D=1I zqCtV9kaZBPs!k7;r$vKQo?3w)v`@xAeVi*ssop#nW0mpg>-1fmR}WOC@SM@|-z&EM zv@&Y??<wnD$2mOv&{0ElKe}Lu?nhq$a5|RJ{b*($5I+a~!4Q=83K=Q>gCW{RY*;+y zy<(<3O%9qVe<Pro(mzzPv2hvQ876L~;c>ET1Sp2%K^c8&U<Tb(4(&`<ho}&$sT`!5 zEC+YmfNm~_sip{xL8%$fQx(Xejxj^oHX0gotC0N-`TJ09S3Mr1Mo-UN?+aWMP~k_0 zX@!>$(+Y1MX6YHKbrYuP)ahyO>7F{%-W{eh?XzJz(=GuxwQdTX+9rT1WWZ;=H}%p1 zs}DyNWI#1T?QH@$o*0!gy><ggamMZD2ktpyQF6V~OPeU+5Ih+PTypAlu9zrm%4hJo zVdm89JelIfccocZVf7`vNT#Fl@(q2yM4`5hdREDC7uh=Mc{VI~VAS(mnA)I~_yjG; zS9}aI652QPu;9vLs^38bUy-gJ6;FMxzv5HNd2e%3_^MAATXWI*s<u)_s>8b1<gjjh zL@VIy5`+4TZ^>u;4#U-VI+r9P4^$7H6kZ4=YO^>a!scV?l#vOyg5jZ{2f$i@6vJxw zgUjo1u}1)WHk|3o{288H+5Z~QmMl+<<jVzk_oTg~)XhG59^7+FSO#q*(f3)(YElg# z#rWpYZjx3WRDrS%sBJcu)t8mK7Ti~}N|X=F=moklWpn_@CujliAVFh*mG^O-3SN5v zs5kGUwg8t1CUK2Af~zus5dcYh!1yhfXA9x-F1?BYt`V#UXg(5kk~WEvxA^=QsK9$+ z?{Kw8GsNtXp@3$J4FGAkl=b;(mys^9x9SpmhV>z%dz=?lwq99PWu2B~Rh3OE2G|v} zpu(pq(i?Fepx4cc#aROdxYxwFx2&FuKBWV(%FpBGk9$;=f26mm^7n*P`Fm8Am-^B> zSk3!{RPEf5s+|{FwMT?h?U7;X_)FsbNRDT}RJKh}BuQp2?faPOy#L1Py#L1Pe85!a zj-t<p>Qs7nRf7+P)Zjxt*5IE;sv4}UbhnPuHTWaM%YMdl($_UdSKP*<LIG=V9zcp= zl^Q&Dl&--uM=>c$d^Yf<98-HwOY}?O)t9xmemP7ez~K4HC$;yTQM&eiHHuS)a8q;B z%9)yr<(xOP{<4ktgl|(yIp@nr2kjXRDUAS{5!3?cHJXcUu-Fc$`$5^=0p<|&1=tRd z)D!*{`%rthB#mK>2I$A}+!<6(SDBgRbd{NTtFAITZ`D=i+^xYXlh`H&C9qY>`~sZM zS}Z^-*DNNtO5J&E3~6rg+bY{{)|2KofA=<_kAv<YhnKd6>CZ6A8oWbo?-{EHZ1>JE zHDEhQg-F9Cq@kmO@yPv#Sy?;1%lrHsfSpMIti#T%@@Dz<QF$|q=mG8BlVzoP8jcI4 z7d@G8zGP31G+(l11w1)u1>MVVQ-W5|Md=}=wt`MER#3HJvLKQhCaVWiP#CFG5Wj&N zvLBSdYDeU>NbVo(4%Q~8xOAHtDb}wuP_Q^$c-?uHGI|w^4F$A*Jq?gbHnDzv1WK%5 z*9d6+YK{&;tY4F5vt-g9upZ`uS@x#S7Bx1&D|t($ApHmEB)$&)1>)^^2}6c^gITdB zRfs_K&eJyC&0^Ed;e5$=n@=pW1$oLkJ0?<$5$g-Wlzn!L7t7y@x^7jisI3#VD(OO! zO>G~+xhdqk-;CVPBy&^SBnX#HZSy$y`lX_t$v9mq>T<rfq85>qji9TMwvJymg^Wc; z<>Y&58(1s_un9tvUuqkqPmI@54}$uG81?c<J6}i5NvK2}OGC_z+jP`{{yM3n^KY=f zEK{3O$18)hx2U)v%nG~)URtxBP`uuv)div7;UdE<Xa8;5U~uv_oszT$I)?w0J|<MU z<&3SQt9D#(8d+Y9VWM1h`kGzfFUn^YbwS08Y9G1mX;rv>{MVQlyLYH76=Vm-&KO>S zgSjnFau-5+hD;H^r(t0poLV9)a#rg}?y?$Oi}QCyD7LraHy@1lZh%Jt@($GCeqZFT zeFA7JocglaeTxW+nd`$#XLu2XXCfzr@TgAkBR~s)%psM1vP1R@8eML}&oH>=-wxo) zcAl)PZ3<4=%Bl~e`aDm42=qG^)t}Z6;@*c-A>|$gxK3~ip!5BZ`2)b~07<){%s?>b z(kqvYxeS&{_q-nrvM&K0W<XaQ7Eu7sgSY$q<yG80c^o_uG#0X!=WS2!I*M7r?!ij@ zl6CL-GHf=*V5uRwTeH9UEcSdEZdHzYKrhijj|QCsx|LYfUXTso&pe>E^tjjXM2dCG zBxwF8^ooF-WZBrizYM2%3*eD<(;YrPbE9O*IL;_J5ngEKmiwhLp-RR*hN|beDEsPM z&-XXy04~bDy_&0P20d$z$P&zLy797^?^oH(7taqnp5N4QDA|<vyKJ<QljxV^iWQzp z$C}})Ishdb`TiDunl;eddRn^0Bn%Dt70I>i$Y8U7u%%n?AM79-W7V}??4{-SdrP<K zhyBSDd>~tk@B5SVDkQv$Pu{Ebba2-lV5wC|?a7u}g)}GNDx?zt785AjdEk$Y1pjLH zK=L<++d#6#1MDEE0&p0>*#OpRtO1#^v1+L^X8=cNZthKxdlb%+tu{Ql_sB|W3c1&5 zZ0SP1Ulv9G087#!cpRk15PtH0Pdp|~k<DzD=Y2P`ZwbgOR-1<*ZW9%Bd)f|!I@xe* zG8LdTKp%pp08;@{$!7NkwG5O!2;d!pu>e026av&Q;Kvj&=0Db-x!BfTg#TmV>U@is zWTzN3JO_?@X*U{;X71VV=4rs?VB+pcMV&2>;jO=+>lH%q1qAEJ+Xy{p+>NBroNiJL zzLG1S5MA<54t&o_l4Bn<TR6XVv-I6X-PI1yZ{)!cKJMLYBqBT~5j^yuF5*XP_+*on z=NEU(y}F1GJ*bQL?1Q?9{{&F{4e!)d;!k(F;jb`F^WQa1^QTW^$$H~_vbn1Fy=qGN zgH*O|^mDe<F!>{5PeW`CioMxWY{ZT;VrLn#%K@C<!P<Z|Cs5%|)mGoVH^e3wMvH!f z$}(PHQs`{CQ+G9~F;VOXEYEFn6le1^-K<k<=)ULn8~PqAsTTPE9)vK%MxfXRNG_j3 zsN~6Pe~NDT5d7tWC`FHdNGGVMn$KT_QkS|%4bllZ{*X@44-e@CS<{iA=d0-iNgJwL z-RE!1+5cqs^9Y#BHYDw*>~!6J5*es-b=`g>5UD%{n(96^NH@Ip({;cZCg2(d9A*Nh z?W$VR)!nd_gmY;TI}#idDR#ZP$zUyZml6A?5nJhDh<&uG(T5ulKSm_;7%<gSz<}I< zSPyKebd(K<&cl}4fH(vo<x+M1$(I`tpL<yHKQOb3(yw^%4PSW*jE;fxVBmhltw9DW zFqZW*Sy}J2o0Avk3)y>pX0YC?>9Z0ma|>ogx%q%hS+cNtXjt$gkKC>B-os{msVHYz zB4&V=<8>9~UWKlpo7YJPU8$5>YFWv=%GZ6nus=4#e73(sB02#&xewW^NO12=H1h{I z48@i*A9`4WW<a6UoGVu?wRVWELDgpJ8q{Q_u0ic*va0R|-!ntahn^Y|Z|+QfAB9Kq zDhjVHj!(idc`XNoc%i=m9r!Iy&7aB)wL*-k-lDB~HYz8HET>#epPwIM0#j-#etW2% zrLDi=pixOcDUqd`d-Q+jHZwrs-K=?^x<QkYNuubntd^emS($%=pL@DS4l`*_m1LEg z#SaSLL-|@AhncTzEyVLqc=n*3p=K>*YC(5ek0vr&4YFs20@@kKp4O&T(9WP0r*%{8 z3`#32jnZzIh2E&Pl@=9b2!4JHCcY>e^>naKn6t5#nWtW6wR<y4<`%n$o3q1jMv1Lq zqw<t9*!wt7eJe@~lJaTnttj%V)1mLk8N=FKgS;!J0(nsMJ&{^_NDvJ*D1H~$bMGt6 z-L~#MQG63AUe<YgqgctCtV{zQ6|HaWI208$TeuHLm0aO=B#JYudcC1a{A*mwU6c5& zdiT-g1XmtW(Q-1oUSZHBR=L!VKSvRX(GvFzehO`>@L9Si30M3J%}em_cLuS=&pu>M zY+MJ9AIZ{d6Y@1Tl5Kp+c+<u|k`K89X6fB=plOnLc$Qg;ej+O$PtlK4F@(8~$&xSW z5!rmEsYf2s^ULG1s4ep->SFTU5OqQ#ZA_ZSaNM6pQnMdPzZM&$b7zBYjNEgd6#ng` z4>E<H34MOHDUr`5x@6uc>;58=CV{8Xk0pQ1N%AS7|0aF$t|0x!9MGc^gLK`wXbufp zgFY?mJx|evsmW4xPRr_jDg2YA`g|G5>hm%A@8MeaOe8bYgSuZWj7E*S+-D<OjIgX| z3H?nZGt}xQLBEY$OCr)rCa3#c<Zh5<9!H&doV{L+sN`Pt@V{IX=Oy*wp2Z&bI?Bev z%))&=vJ$$2jGb_M0iGG_0sbZ^2Iw*mU?IR(fK>9^?|=#~0yqS4JHbhS1cI*tmJ|F8 zP&6OlFM#&}@_oaZnyXXon*g#FSXTer0aEK@5O}qw(k7kS?2BqagX12!?FCm~_RPjJ z?3!D8<<A!AUisnz-7AxoCL}P$(4-It*}jDU4FLucqyk(9$l?t}tLk83$JjoJdW^B1 zhui!o0L}os{scwsg!k9*v-1(~Fr0c)&3X;hjwg3aw5V9>N&T_Ico-EcKB-l#|D;xt ztQ33*f>UXv8w0_up45WxNBHs-TwMu%*a$WrM(`pdc!LrAuoip)f?JP9RzE0Ny{sUA z&Tv(O?8N|Yg3W#o;3I;~0N(;+@tUMN>iYaKWe|DS==W&>oCdejPXUYvhzID)FBgU@ zEXpHaExM3{UoC`{UoOasuAU;NfVm^n(=GaD=#)#5B5u%A`m?>^FydxBr9Xm*s6k2; z=Zg`jBR5f0^XLW?RWfIEPS@2Io9KGVVx!X29#k!+XHfK0qjh?gn)GZm=`mbJfnz2; zOHFz<iV|Xgxd+T`DROZ1`xHq7%#Y-w0VaGAR5(~q8(?~{JWtnC+x*<aqi-6c>vOF| zx=f9yDbwUdx=gbd=`tlNB=OFysrA)YN%x7UOiH>LY3NVBFn|dFDTc$o11^u2g#0x@ zE%e-{q8>IO*O-vI7}9V^$b%{*Z`8W2ftsSbFGSHOn$ZVt=NYmyfP1lFtKC4YP29gk z9W`v_7HhWJWJ?-}JnJ|Xv%QYPb<QL<&{|!OsxwySOv+-NGse^8OvlAKXZkPJIYU-3 zvlaI?TDqd81y5Y8TkvDTBe4x>pxafc=*1?s6(%<0X=2-AVte1jwn9lF^Pga@N=ZLP z?WH6JIB5d>Yyx<fP&?jZ_8uB;2KmoKWi$m{eu<9Nc!YU9A|!r^7Lv9^3+YNBTsqV@ z6EE3`bh5V3KZ|uRCaMj4Z0<z57p%G5iR4_at?Qrkryb)lnI&(-sG@N?-D{TU{?vGy zbnh}695x!P5e<^|fT{F&V}4DP3Ch<?boDv`?V2-zeWK2e)79&yrMh~>0i+lXsb0xT zB~4}OXmjFvc=7|LQ`A6%gBn=QkG1qiq?C9K;_K+CTDk%K4VYv=%LM(AAnR`J($j$Z z4VY)ZAp^d-TZam3q$YvRt&Ox-P9trxlXU_IS$)NfJQT7!NbBc9!o1}%K=<Zdg)xnN z{(TlFJ|icvJ;ZTdZdo}rnb0)ZCywSw{;mkc_INHIm(tn+@EkxE@A^%IG%E%n-|_aO zxJ<ac4bR+u02w{-^W9R8&S0@efVxTvlK>_zW1gqo)%YJaHcyd-336}VXLuTZPl=`< zLv+qbt>Cxv-)sMh|6ecT;vB-?X5{4XEe9aWZ2+nC$|ED9ay9XpBQ-h_?y@h0>ne%l zGa5EufYV(Fne$R@726x~-<z{v{`+&5)fQ`QZL!>zVEY(;2O?npR{%awtS`(jAJx}D zemXO#o9{kG!0!BM>d5YVI{~}%eE`k}P0SVsZ=$jo>@_NV@oy@*dgL;G`AIRs@~BLR zB2IO9q>GK!`J{=iL0@TL_2%7l3E*fa+0f;F#5ogA*Qwk(fYwhV@)hw+D}PtyED+4! z74{DNJ_3dw?Dl#js*lR9vJvelhF#waPwTGl@Y9Sx6D*ljr8h6MD+I*{HC@ZTF96%e za5_tVUWbyl0@3~zFKNx-z0WJ?z-N!#MUgo_i4H%BJ|Wn?9sVzY(XI*bb}=$@1>!(w zVI6};c}?MJx5m%;V)i0EW0Vy-kJlU6NAMH9k_AwqsR|SE0Q|1ekN5l8^pjayI{Zh* zaKB7+!v}Oir>@iqEef(d2DW)*s}<eLusv(oc1TRSbxh+J(@4fN89)2zm$Vu|m%!a# z4W}>QWN!ty3gE;v)3*D}hRu|K?G(_2TDHVb#b@Z3q5Y1~?>_oHfS=CK82yIBe>e53 z7yXyf@0n+`e%pd<TfugkY<ES+PSR|94BJVG=?5KC3jFh)XH0w&_`LYJlayai`h7va z@9~qm%7~ALzlCX(t6_A35kGB}7XL($Z4lUEZ<5S>-mtAUY##^NUIklIvL!@+VA#Gh zY*&M9e}b*&O;Uot8MZRdYPOVTsdrMc(mQ4{^uDz&^sa`V>}QRLzVIJO5sjh~Cu<Q4 zjffY5Y>U7)?<UE;K8EcT!}hJjbW+Fk0AtExOac5{35vK5|J4-HBzmP0arbjtg#8>v zG)qw;UZaQ^6fqw^y`D27^5MUSBAP~@H6rdeA|4B}Jps0JD)%C$XtouG?Ld(26R=q~ zOT}qu*iIX^sOJq^h31$u-7JyzGHg|!*KAp2%k0uz*MIou@y14bAAb4<MNEQ!0!1W6 zFEb*>8xfBL*<J=)TgCRaVOwU{_DW2@>zGb4rb~>;jkV|JK@sIreSX;wkrEv?Rg1W2 zM0j5?Z0*2SsMzWnw(>7%w$@}zS_JP5_~peT0=o%*dIp1UL-0)uo*F&O1RrLC7X;b9 z2iqaVw!pB>H*9YN+3KXBxNerF^NL|RYS^sRhHV(wtXri1d}-LquGVZVf@~YWR^b+@ z(Eb9=*3Ga@Bb##>ooNqFN!SDSC3w;Rb|wP08o-7vV2}Z?8t|t9Y(xSU8F1YIR#^d0 z81RV!tXKjj81S+IEJgwC4A^GC_XaTA1Pn7^g9cXOnnYxPEq8%mfa4mm18<sUHaXjJ zd-#*cjHYsZsvXTcaZZu084J2iG_SyDwZ>dH)K=(zpqukmFVO0kg;)0LxY|Xl{W|_+ zxqvk@n$K=+26wVt!rDR3pI-pokx!1evZB=|ySDOm%#|HYgH-*s@b1pYJIQ6`?jk2y z_7iuOR0QDNy(;5=KKeonpI?gl#dI_)7WIVaUki0n&s?jEdI^BlgO^eITPWLst1!AQ zKL9O<+Xk`~0qh1yF&y?9xEy6bEAw8sA#bex2$F13lX;@aFKhMo*T-9^eetfv(JxXg zx4+)B&QjZ7d0Dt@e{H?aY=1TU!R@bWTl{l3ubgQUgEIKiX8m`6R{|8^)wjo6sKuOX zQuJ?7Aa^L-QjB9B-=amG$Vk`I@4gxYiUBx3N|>h2zgvy@S9ab;_Te0an;!!0wE`Wd z{Wm3?zgwuuSHRoSCkOwBO*7VFD^Nwd6_&U;9a@^@f(C&?&Gmc;*W#9DgDr3TEC#i~ z%j#QiCbBdJPQ8$&IkoDmd1U4KoHp@yMJTo#;rAIZ+I%(W5`hDdvYzuLRGAtOX7_?i zN4VGn02*(A*DQElc?e}RzCKMmpG~o+0X)BfUqr>_(3JeA1bj3_K5CqYdYf1UTe%AO z5lk*?0J|*rt`l&%cgsfBMcy-VUu(6bciFC;<mWvjwcsoFj5H_UJtNrw&SbEv`(b!j z>a5m!M|WG-IR-olw*llo2=Exe+W^Ik$m!ZzeT#I40t`QIL=?7CD{NOISN?P@Vw(~1 zsS)whM%GoZmSThW7B21=(f9M!7vt)Rb!G4Z%)0P!7Q%5N<3O9)iTKbpTYpUF&Nk$e z{StoC!Ina=A(Z$ATpodoy%%6LMN_xWTdPkOu5K>T>*$MGuU}r&digd%%8#v;26@y= zbTTeRr;1>6F18Np1g)B6`20iB#r!b?v3`PBn}NqZ1K<E;&V)DmChJ~!=SL){a?dZH zpi7yhMwa6&<+-lD52K~A)N)y3xhySbU4|(s`2r1!27A{W*ZhZdl^D87SBZj6x=JkA zWQygb40TS#^|<S|hjp>6-lUWN*(RO*ivX#A-lB^nY%``8O#T4`rmIPQV|X}+GlI#N zN*86L=`)7;uDUaHrR%m?SGpmab)}oapcU-UN*8PErO-lG&J3;E{LNammp5zGKG@7k z7jEmimeS5vAF=W;>L!zNFI?j3a#gn-$tb!;Q+k2x)fqaY&TQ5hb!oHCsPHXDn_1v5 zP5uX6KNxMQY|+}Z-lDbXNq(o$4sKTvlgvt{q%6V~yHtT}(eXUKMaT0Z!=aCAV|pK6 zd7BODm<*m-v%uFMPTztrXJmrveI_TURcy}$_B{Mu5sK|u_^tX93XP9w=K<su1K8{F zvk}yQ?Epy$(Ca1kN4#sS@>YNk00skCS$tXK0Vt6T9`_s3-?0yT6>bOMoADyRj{vFk zwciI-ej5{!I*9ZM2x$S@{u*F5!9{?#0J8YJ%vDI8MX6szCopXn;dUCH8D9hZMmZ@? zTV+SJ|3*OncH~YjTpm(2D{d8siGAu`_lQT#ma}~kvgJ&+ne9{W2FX{p{SophZ(Dp2 zs|!g#h>%NP`6=(i2)W=>9ymHELDkp3!xBfl>_j{oK~qtEb-n5_^%jwQCq1s;B9iM} zzmAZ*X~nAcje3`eZ~VExjZk}xti*3o;_f>|a6)^ZKeZIg_`x}5E9jjOW-BP);RDHc z__)bv+wDTC35>sa2Ywcd(`00Gxv<rcG0mGb4k62`jiPa)v%9E*+9+B}l3#7R`8roS zLVcavRgf&(Oyec=VE895ZWg4sk(Ml0bnFh$Bku^(mq~M{jk}KIM8}<=r5Ns#tgrSm z+@vV(iqL0ZlYeQ0|8*nyRW18vvyrS`1V4A~0xhH6C1h1G>&(E2;g9MT8~2KCN%kwc zB@KLqHJ1%$X{OJ=ll+fG?4J$ahu}7gY!d)35ex-Ldlev;UI3}&w;u=fDJXj>K;kZd z=K=Bn^0&;QzUld|%YU`Cfbm>lJRe2)W^29H@6vkh-lg^W2*66>ZA81lWbcQ7?<o2h zz%8%AD;-{g>2($^DR8kb0E{NM3NRnQDc?ccSMTniH?j8bptqvF&_Nrc0^J;+pPLS6 z&el_`3scobg5RcwS<ZMzpX7Z5fU}zIv-L;x>A{ca>^{6jKazb_N3)Z;Znm*kC-sD? z9r<xowrw_&V%q`zl8<4A?QSf!;1kk)SZkUH{T*puj_6Jl`s!=CSkFQ3M9#TeMr1%{ zF0)UvuJY@kn01b~lTY0=<($aYMjQEVa|@JP#Gsuc3J_Gj+aw^Ae79*0;56uHHqL(7 zUYSW3KX${Wf&$BFg!1F=ai@ExwpD+bsgFi~)j{o`J^q-^%7r02Xk}ll<wRtu;DK6M zDu%y9W6-(YG)s$~lcgu0`?J*kg&K3n-N{oF6J`a<bW|c*%n1?UD~b$jP}vIH*HI}m zV9viQ^SUlB=fQ0K@$9}%X7|Hdc1Q=+`#Fo}nlAI8dOt^=`cR(gsgHwRdFn%+134s5 zO{tx{hZK)I0dh#av&8#J4tse&iRx94dZkw#j259D;bH&!vAkbbFLkcj`EXnU$B$|P zd_v(Q_NAZd2d^U7ot^QjK2!I(f2*f_q%XTBZ`;*-gaYL%-BNPKqTT~=kQ?URWqj*Y zSdm-7XG94Zr%5aBId-Fs)pI@-9@pt<tX@NrZmzL<0Y!poEZNm0<Ykm5AuppeQ7@xN zm)cb1s#j8)`BciJ)uj0N+9mpzN85txr%o55tbPjPVDRfg3<f+u2p?h&22x!8d@L>w z2J-w~Ke_jdgMqx>*I%^YU~s&qkZPr@&jk#Wqb&W=F1pDEo_qEEQ|W56k0O`ByQ3sy zkk8yuzzi8I88Z3}-m}Gh2}69pOH|p(@>bwbiTOQvC!b+8875Iz*sZ6f=aI5<)O3pP z_IbLI=dzJY16S7)CUw?4vwhvcBX<6Y5FmE`IRv!xKLg-&?5yqlNt+O24Y-rN96=UH z5_W(k@NRdXpC3I|%+syqS-nwep59i4*3*YJfAO&#Pfv3ifCKSFL~xuv%LZQ_w;_BA zw@;|ThXD4Q0B-?&L$Dp7?^^(C0gezn4bbv!fcXGx0a7W-{u)%pcQ_LQ=udD3U@kyX zg<G+DpAVNbRNnRU$^>ZmE{6qp1-R?tQMl}bOWNn1&CVxvO;%D*u)Iu`-e5TgmduUa ze0~RB%jh}@t{vY)uD#k#b^U2Sb-PhQ%IWUv9vOQ$c>9vq-vb@3%(ViGI;-*I<D$?l zXL1%d(5IUkME)#NTg)aDx<bYfuBg+z-Bs{^1hrBpLTx(&5l%pac6os11l0jHy+<1$ z{JSFa?F6`d1D7oJTH#%N{@w6#U-Xt?$$SmBxc3200JJ6e0AL8gn*fgzYy;RzuomFd z``k%?D_01hT-o;D_*Z_9u7sIgm5I~c&UbRYu7oZ3=t|gQkFJEn0GvQq^Rem49_mx* z6&7JQx{w0;Z|z|Y2c&k@A3BG2)h9izz?WTA8Qi_#hJA4Qo^d&Zoc2eT;2t-3k#ob| zy+v{aqp*wK8G+2<%b-5cr<pmA`!djLWIO@4`BeHaK=r)<?*iOI@G`(sf(-x%3049` z?Bg~^7R=|M+JMSD4V`Ntf`crI^Kjj{kEO?N>-JTU`}gUrtB&+WGVA{EMJ?1>_uD?5 zb*1;~th)n1ZPBO?{#uaYc83Y?-TO6fTf=(~fRorGc)f$=9O|TVvQ}pe=62Ns>M8)< z@il&7NrSfn4Rts0e2DA+)eUs-uEh=QuEf0?D$bePLyxat8c<F58%~A+-FgNuP55ge zpK|u{9V(7cgVYh3UQd|8cTmU?nL!~(WHdfkDTr&09f3YrpPU(m@^BB2QBQaFzO?}+ zr--vBWiMOHokKO@G?KZP2CyF>C$oViYsMb(-<xxH1FjSKyTa~=-%1A{gzpMxU4zaq zL0meE=301L%1eXB&A^dyH^3BvngAyWDgpdOPzK<(573$P?4>U`%7jbe2YQ+}imntn zKBf^xas=oGPnqgXA>c?*1mMi?Wu|*WdZ{Mltm_q=d`^UrVoG3=Hh@2usmNf$-uyr( z`Sb@m6L|C^l_Bz&NSg_)3#S&zkjGnO)79npjB7E{%$1}S7heZz2GpA@o1QXd6;N-o z$lEIc_4dkhDM75CiVT<MH)QdYqn<07k{ZNnR?;V&=Ir>5-0_(w?)B;-l6c;+=k6EI z2=!xs?vdkLI|R5<URi<f6$M$0oW@uiRe_ZSt;1FcFhzx-=lZx%)G<A6Oiyn&aZ z)su1?6l(=)x>0=M<?)vn!{xb5R^IIhT9%KG$8BPU9FRNiT;&%b;X`VP12s~W_drPH zRajNh4<%6jc<zyL9}YR|btHzb#-sMmM3L-9X`GWqaPl$~+#)!2M=9kzE0vVLD?+io z3BS|8VDAFhMX(3p5Wx|ETMuG<{Q@8+$LCL4gwk)Yj8;3=0NzE{1pfAQfB^&%4Kdyj zln019#1RM}8z8SfK++zBpSl>%DWE3Ozb(LOg029E0g^6&=VtKa=Qm{Y%69JRqmP7k z>7yt91N-Rip;N9|sQr+mX8Q??)ofp%xF{@;>Hez-z{7N%Lw(I;pNopXF>tUr#{L_J zQ!ZC;y2)a<@J7JruYj4UJ1o2c^Z6*;{D%SF2M7?n3h*RAD%tE)pbmkue*h?V1mF*V zZUi3Gjims2WdPKLX%ODCg4F58+-NixZVw*~1xo<70Hl&lj*NZ}N{)<{{m4>BM!OK~ zi&aH~!6*G5pFfJN6C&+c#5ErbR%#(7)C2h(`I7+764(G0J_hIv;1Kiy*iJA6p!O%6 zFe2#Zlr{-2ufxU3?X9LdfrS9<o8MWY@>AX9GS2G54u(7G)2{Xob{l4S_ZSD_)I*S( z_Xs4~PvGY}h_zP&G(Kjj>!2>>>g`l}!v}J2Po-E(-2nCEu~3i(@CU)&0OgPKEQby# zS3$L=OZ7Zu7L}`@?t_b51@+W%X|-9eBG&QXILD&+Jp33U%Qy?S-SE#i4seFx06Uoz z(3@=b1yFZ@${e2W^VfyX0d6t+8?FuDYL`Y8YYpJc$~P05`FZBFqcbp1b(?{Mc`EnZ z%l;+zoICRM*PyNdP0~eSEA64cKMu}#i~gL-$<69~b9A~aJG!6za$+Bj@5n&6Y`MN` z2tND**yDsb$oP|=J$2Zppx4ljbY4RC`BdLE<h~$}B)tndS<HPG<pHIyKBawz1}F$l zmiM8qNkG?0W01Nomzv*o(%7%8(&m`&uoNL#x%!cveT}9cJjrgLuj&s1WBaPqR$Oj! z$#Q1*)qTYFzIyU;QFGbLL-TS%f#taR=@uQR+fVfmqe6Mi84qN4pi@89J<R_X24`$P zV;V@{M5B)!ba&nTv>EaGgo$ZD9*gP|CXYo)2cN61N$!v&xWt;8A10&U%Um1x4O35F zV@L~Ala>eC!}&gSIf*RhM}*NBDaL`3Vd^P6IT-$Em|mGDrXly;>S2&VCdR{Zzg}$0 zxrXSs^CWMLt0FXYJbu!g5Q>wKl|D1($(j;jr_YS}vX(@&19V48OKo$azq`C<)+4O( zK%ZX>O<NFqER|^xb`IGihNe=VTguRMCxCOLpV^?vdO5ql&)=5(?ZWy(-HgL<YeW8b z0R|JiOfG^A02=^O$!~uS>L4ilJAgk4eg~-e1^n~qZz1+hpzKJ12M8(vtOm%uj5sk) zTdTNrs|H-(gKOFy1AKm7@EJ1q)m6Y#lpfaSIx;Yf=eet+OUdFZX~PhpkgDGwR-dXT zz^&pbfUW>31Z@F25u^Z&A*caRbc+2lb<6|x5-58Zz-fTM69d#Lu|~11WlC|aQ(dhT z#~5qlE>5pc3{VRmgn6yMS~hkl4prXRxxVVJ7@dX#f-4{~Gz=T4jR<LBON;e1^VZXP znpx+xo@S;2I1dig)6BqC6keAXE$g)#;?kFRNn7#{R2*O3$RS7JOSEb?P>=Dm4R~sx zZejy(ha#Q^(!$29G|$~P;A!HzW5$jK<gBpnumSf0vRc;IRMj$&+ax><xl5u3Uw-s7 zWNWD_*ON4)N#|ZU=-Y_G2OUC*dKya$ird9zT~RGMwyiYHx}sWi@We7On?$Yqh*UG> zb?@$~F&|2n#=V@*cBO2Fqn|MnYIsG$=Pd<OnVM@j!MjuJgsL;B=`DFrua;c;6n}x% z;o8cCmyCGb@e0d3f^`&@?*?~y<qOI{cKdZje*A~>K|pxqnPDnJ<?6>zqyaHsg?ODt zhrZfosGb_GTM<rMRY!j08S`4*R)5KBbz5b)Q0Kq431hq*3fkePU7PRCxp&HY8T#S6 zPh=E;=<<;7PL{{~T-8<?(aEJtL?_E*gDO$Yg|U9^;rSCScY4SRiY@fh@p0Q|h+M3m zy<fJ<$XM*543()%<pI6;sVHOjGEYfHDqLG0y;v>+;+wGSpY|{b@%OMjuTWTe%3=@S z1XPbUp7&UF4zX|U7310-jJ20k5-V{j)7VbV!xy72pD0J&!ZsS~WIMO9PPXqVBx^CP zlWP=7wcJJiraefu7qT<jUellI1nF&{n^&$9q}@ejn~H6-y&SdvnBHRC%ycW`W@R~S z4^n;0idCI`2hp+Wmu8U9a<gSDJ%i5vBnPC9B0T;p&`!-Dy@+&Kjz-xcF6=C5sn?y{ ztaoEc51_K0#eWs(j_X+0yGVFX(fX;$QUqOv?)WwMOHqC|p|^l;Hm0xT?k?iWe4{H= z50TbUWwpC~CHXKtHJNX}x^vt#TOR;xGZbf@o9+HQC^afQ?&&$s=kMNzwe^I1{&<W~ z91$Z2`TWH!<{9qWxZ|!9ntQ`<0l4EfgCH4T06_x46oNYemJ?J2*hNqV;75Q|in4oy zy6qgmy#UPs24AbHVmb|PPjWOPYJnc?QTSyv0a#8@2jDe=Sb&cS$^l#=;Nzg>zC-Gq z4<Lo_p<vWucQ|-323WS#$KCf)>N2=B1!KlMfJ}nv07C#$9sz3)gtK3O%TwRcI51e- zg5DZzF5b*ycQ<F4&!0}AcX}RL3lZG^yN<Gs01Wyb;5~rIACO+M+24a&@gw(0tz>y@ znrgezVH|~v9StxWl5Oq^ZihLn9S5+MpdmoHp8-+<t^nk>e}>z}6S#k!uWh~$HC9uN z2Hv4BAktspw&Mc8HvkbA0X_xj4UkGU`x>Ziq)wBHKxgtDsKEEb)SNK)1!cAvYlX>j z@y97#E;{kU^~4af*cjBOTi0@l08Qe5;SvGhQGl!o0F&?Y`A4!Tjq-M1gXoK&;b|d& zg#a@MW&tGq1{KI=uLm^`l)V$+AV3x$j-`}6l=8YimQv=z&GUOGm<EstkV-at38<r> z@}H-F(blQ<7J!<U;C})B`LBud&Z+iZfP3L=e+=+2!IuCV34Q`NK=2p9?*u+%R;xca zLXS~%jM=MiSW4`k5_ZEh<Jl=#IOmK}S-E<3XjXcQR@1ZeShdD``vy;$F!vg(XYo_U zDgodAg9j7zC1dque#2NjnXfrcF_&HQAI#0il@wYm<|VDcV!wl29)TpK9T*c_88HxC z{P+9(?+sT5;Ry`YgG1V}Q9eHnSMCDuTM&@@Gu(2&Vxbxz`wFNze`uFJbm5VW?QpTn z0-R!WjYs?Z$;<ToX6F={DvGYM=?^IyG+dp52wcBUah_ZAAKX^p0mSegmNk)UwP&#| zg2+C7#4rU(Q%36rVBr1x)hZ_a25z$-5XHt@ecThgR-oboN^b9e$ej>rrA16uOP!GH z4GN&ihyqY;IY^I0BAOzr-ASIq>rqMXhTGprekvX9G*IRL0>}ioi=YR<9D;rT#|TCM zIF|t?0XzecKXa9;x&s!h($mluBlXF&U7l*_&DC8mS1dIR?L)w6=x6|^=SV#b%_=}$ zCN+}kz3!REfV<%KF!?tDEFyRoU<1J-fZYU-0UW)e51>sRsZZej6eF>oGqGMZvBq4L zn#0&CO;F#7+@E_co7nDzcP?X-n3`VIF*#RtOu1L}uBN64Jgag^Oodl<Obf5-m{v<n zf$7L{-mh1Ay)L=cQ*@KkAE2Ct!}WZ5rvbYS_<e-#-0v8vKwvol7peEIzoE)VEwr31 zBXzTj)b(&i2%8lcH9-Y_W_@UFVc}WMtO+{KZ3fJqsKEjQ2HzhvL>D84w`?%Bg1hBG z<kyknz`7ACW@|%8%xUk9Q?5Z5E7OA12PleCcx90LvYVshbx3jY;K>V+tR9>TuAQiE znRd_j6o5Np4d<JGBeE^<;NvdCHk5P}&ih8)k2J87_CVWbHkc2kon*q;4Fa4^XjlB~ zjUi-+&g$O7RMdgv!<F#8p~44@(>YuKz=v?Y4e<>;t@XJY8sz@T#?mm0BgQplY3Q@j zT)}WnUH2&0fLs%cLd`np9^BWJ6+tF=F1hc676rFlJRvW~yS=64E$z5LoIBs`7r9)h zsafpZAx~-F?Ju!lG*ZuJOB{{-CC{BV@s})G5=EGLtGuc3tIHWQj-t$Fe$J!g(;Kos z5qCAGe$-z-{yu_Midi-+wD!wQ4r1re@T)h=<ze&Aib;$gT@-d<qU7$X9`=?8O#HG6 zl7&Qfzj{90N?b;LK2-J*<nXP2PR_e;HTIDY#Xj=v-^M<2Q0yb`kd|CHDE5!Dpqoq1 z9}3e?%&Hmm5i#d9x@OENM<t>h(8-c<A4%bi0-ePL!Ozg(G`oY-VG}l?hSrDM4tQo% z2RKVmej|&N6C1GQCzC2lx7*-<EL`nQ0BHa{cpSFY6m^A>JG@kY(s&$p0zBnn{wD#P zmQ&1id|^}c9;i7}^!BKuh3aw@sK!e6Gu+uRxqlDavIR00z->E)%>?*`VA4juOYE{T zMgSB7q{^nU6`*#3vez*U1Ump4xB%V;SO$=PP^Ba9<VMb~H)?Y@qpWbdREyS|EoBA& z3+yFe2|z73Vj`QE!}CCiIlP#F=I~PlG>6~8r{1ij1h77h6xbIKPbaw9R{>@c_)+P< z14!*japgd@^TN3*Kp_FQOCKR<1`zE7Xbo@|fZX1)q)=Tm>YnC5M}6hR8hDlf-rh16 zAZ<rs@b(sWQP=d6yIbVmmB9N2$~1FrGg&%$i>~rp#g7Hb4wbM)_katv0mYbgiVKW2 z>bI%1MmcvD>Wyl4q3W``-56AE${tmyhL)kmuaF;onHZ|DK)Jd@ZY#&MDR@VW6PRv3 z$2->^(mm!Q(@h7T^*GjflODt%NB(calF+a+-htZ+W=9Zw2C$Rh5WuGdI{`|C0jvk8 zO;8Nb6(E(O>~o;*1!eyRFpt2(D*Fiii|HQ)DxwseZv$unkog0&z&gMh{Sv%K!gUY5 zCj)!~kXCk@&(DjP%)D1!VV=?j&N-+zc03sG^dm$QfLws2orq@*g|&gpgY@bGa1g-C ztb?q;9Mh_R^xFAw{u9oD4iBk3{rDwatQT0U_iER_UQ(0NF@EExZ{9?cE_f)Yom7UB zp`Ti&UHpggoi&rbhaE*y`a#{kdl~TLbTgi8K%H`pkQ;ei8=!Da-VFnX)3m{iaSN8K z1NlCqYouJP!xgw|bQDcG@zZ-)24iS(jfvvA+=?5GG<k-5=<GU6v0|<pE|0I(uRUVm zK+7{u*<AR#>3F#V4O7!R#99p9CNbh=+&G&t3Qo6{Mje;}FqYsEfcF7%o@gY!ZO#Vy z@6CBx{`>RZ#sA!ujr0cWcOdUH^3v5IYREQAZNUDPa<~Ee=5SOR`pO3EgmCr}nRySZ zozqW)J^zRZ?V2_mj^8v2X|<kTU7geQTX$9ujv5QWGL0G8D=L?&7r-q5kr`tEMiAT! zFbyEZu-dcXvI{QulK@{6JOfZV!e#Yjaiq`iv177alcF+S2i*uBDcLjB^H=tMxU_+b zeGK3shGBwdz#C(y<(cJ?#IB3biQUh@##a*jU4+Zhm88;4^R;MPb;Nf?Z2hrtd`vdf z-LlhCZ*;<kb>MG=Z2D7Kp;@SnB0<MD68bvjMY(vro$K!~)`1zIlKw<ChwZTBCP~-A zQoIUL_Od^NNMg|a!R;!ujeFUDM*!K&UOE~YI$LMzYx9z7fpI;B^lNCj%E=XKSyd2i zm03Q2Hic9!)oTZbIk;6u*o*{#wg9R0wcCOk70u=f@JO^2cdJ>dxSuh)RV&fWhTkBH ztyXH$4z1hnXsz2((XHn!t()VUqfhW96(YzP@OPZS*7R{HbtbNBTE9npe%9*Hu3zd< zYffi}J*sX$w2;^8&5?cbp6@pj&$e0mpy2vBrld9@<6Yb3K;9-eE@4Gk_7+P@N@jaB zOU5eW(j~V&nkAP}#+20dXqMEYpqp`jrE8~1ItaQOa^dA@X}z6$F2WpZ&m4W)V^?&> zYoOy|kO!Lqnh`t)-~gl@ol}y&kas-f)>12OJcc*dj?(flN&3sCf7wx5`WJcZVMl2` z_MrNj9i^#lP0@5`X=+;Y%Z`GnrPzvrX)Bhwr|Xr{^1759JA73liLYo=<I*2W>}we9 z9T5`y-d9ZQcSJCD^_1xy5tN`}zayd~_9_vKUBy@>f-%N-k7ZShWVy!6vB}#bi)4n| zg8Y#@G8tbw9XM8Q$%?1(#$ZlD48E0Nt17&|SqYYdn$_jTt@zwD;2M#Vq82C<*PU{+ zSNv;CU7YYVnMj_Ls3uofBa))T#D4;bWTNYBe1#I(s_%_FOewPyOYm0Afn9?lzaY;f zjHj-_g2fi@8Y0(?#do6nP!;P){JMrI&C)UUyM{|H)Q{)ZHrHE`yQK!#kC#K2rK3da z*XjX>tD(Uv72#95$;BWyS!G!m(vZ&^$0}A_0yFXvwTEcktEMC#2^TCm{%H6zu0bTn zXNNP#Yf3IZ7A~8uCB1XPH<4e`J6CXg4#Pef&QB2WXYUN+`qJ`Ohs%|=*;tgh)`YVc zh;PNTuN7QBzEvF%?}syu@gqa<(~NA7YzeZs>Bo}&KZvd@^SI6t*4tu_tKKeC)rvi= zY8)}2k+HA#5X-enAr7w33T(29HE55getgr~RKg?I%I&7o>lA*Ec)h}35O46P>*nHK zV?{Wl+S-L(W?WYes^*_5T~hPUlrE|HUxl>0uS%EH{I8^~srL1?YF|z31~HTJjru6V zZxtHX<}I?u{b<Xed;AmZQ@<_En$x5vRUHyuKfWtPJK^mm1&RHegWB(>@a(xh|2`C| zYuQt1%S}c7{eG&Si(W@PkhI^=uA?BvbawmwOvbUBTvl^Q$^k!<!Y?h-iyZK)ZzcK= z^Z~y<1g&0E`q0n(xPG(CQpcDNiW+y8#blqo;Z2YG{K!trHNW)n*U+P~N4&k9?h%KV z(>>zb0BN-!5B7-Oq61Uaoc;Jz^#PeS$)rVyY4Tghlb)C&xt@~T%wkO`K+rvRh+EaS zxW<CpZMSlb1@H(#KY)t_JphK42gn5Yj35obseoaR66~3v8sCOtZvjAbMSv9m%L zd`GYiU~?saHvxKA2KWHrO@RI<0D2br{8>!=VyG3vwq7gz^6NVB&2HC;?{&LQ{3L+D zZk_n!um5`nq_tS^KXOQ3b@~mW5*TZC_@FmX?mVw8XSJ6zMxNE)Ou)0+2LV#aD`&Mm zSni~ipBFrg?Jaso$FbYYlI8s+Z_ys^no+T(gTE(Z>m7asvB~N1vy{&m|1>e)dWVj& z(H&ej-VkF>NsMYFl=%KLrjg(q$(ZuOQ+Df^+TEdJ%DF?wG|I&EIAa=lLrk;&cT95P zef>Or26<rkRuj{+CZ?Sxreh{1cNI()O_-9{-u?HS^cJ1|N4%M_^VQVqXGCb9K`kl| zscDVi`e>rkSayNM6rG(K<_WY%WS-))UVk;6IfY>4wrp3k@ccKm%5|z}mD8$dm2;|S zl}A?L3h{=_SvvpU3x52K1s`Cc^DVn6Z-%I*d;{%^l;7h2;`c24I6Z#-O&!m19nXQ1 zN*rKPDB#ooBH-KkO2GC1LqOW_1;I@77JVcPKF_@0y?*n3AyBzUab&-B1DDF&zuPi% z$zM$cNGmA%4}psH$Uj-FEY2yvfdZ>p80Y=Jz0GMPW^fNP>pcKl3H|`rj|4veREPyQ z1&~2-6rcbgl@jbq2(cEFT@&DIg1Z5ttGX=dVHz(&$H$o7D4qPa?qL$E>K>+dRo%mk z0!Zt%=wCaJQpmRSRyC^X>c1PDoDI7^F1_w;U6*E5)pcn}Rb7`hR@HUs06>ZfQ&OM4 zSoDuu9l}_I)zfdRNmq1P9eLX-sos;?{IdjRL)asSZYXoJ`}Bb7AzsB4B5tA2e~!74 zRC@k9P<#*EzJzwEbhJMLRi+wp@C$%01m^%o0}S{TAf+inV?4I(tDr8>-;ZYKtqxEY zpfW)$KqCP8{xJ{%;+Riws|)xXc*s|YJOX}|7+YN}8j~zE?UnCht<twG_)}%%ngh?| z>FtB`cF@w6e}>!&u^iw_*M3*$|3}qz{-3L^^FOSH&i~tL(6SdBn)juj_^<Eh{j&oP z99*dQI=}lLy!x#@-R^$YjFbKcV_NLe|Lf&G9kI*|YC%UDmtFa#e|c9|-Fh{2)oocr zSKS@}X{k^AuW^rSq_*H{%53}1{|gT!JP5a8lrs+C62V}A@pl5`09bJVodBK$NM*qM zIWIH+9xJdH1H{%uc|Ql>tqrgl;CX`AUgoxafV}{t2tL+c`Cm%#!UFpzfF^a|^%uYe z0w3n<ad!dS1aJwU|Lp+h7yJDE?*y3sw9lVk_Z5E2&-R7+lV(AiKlehTv{xu{dO?2X zD@wKe9s-sX<o6S>tH2%su(>W|PXf3?FcYA8J!rJx6;&a!xL$Z4`E!o>vp#b59^_9l zs`+2w%BT;}uRcI^fcFT>1EeMZL;x%xxDEmLH(*nWr6~{2A2*<F0HAb3mz9)_&SN2@ z+Ietk0vCHIKsSO308avBMPk-=YMIZ!2)wSX;a~EYR86?O3(t((0lot0$^AJ$EYnxc zOb*Ye3)*+L%W|&3aq)R+PTa5-$JnMrc13vF^8o4t<Shem9$Kjnb1X5y^^7*UMm=K= z-|=RhuFHM?LsaKncn9VQZ`K(FF><rcbO5U-wSK=?U32f+5-u7qx?5|!{cf%C{$h2Q z%V_)&H9lT!G`5_+Pphl+oEJ3ExA56Z)HQ&vS0fJ^4ZbxRRBHqcGOIkT9$WvJDK17q zG=a0z{As;KI&jyMK0hsox9rtT<i`-pr|KXBnNKR4T%*0AZBsbZsJk9@k(VlVQVjf< z)`yn{(lk2cOLz_m@#v&I0<)H=J9g%ZXUI&k<aQnBou%em{!*pG&VSP(b(u=Y@x38) zG;P48c{gWS(6DIwfso)TKQ}MY_oVcQtg=t%XV*qLKL;^C)m=#|)MdafPgF0m@vfvv zWaC{)a{*EehuoF4k^!xxbEqm6(6`txq7-(+E$`J=^q_fSg`P83joP(OciMk8(w%l> zW8G<2ZLB-(G=LNnCfITFOXmvJfquO&G!Mr7XP5k;W{lqde=|Beigk^b%an48wR!4V zWQ+agG9}|^E>r6Jgx)?sLW97PCsfvt-yc$TH*~_zmBspFt$T^O>}bJ$Gl8=L$Cjw@ z+y6cM+skzm-LFAlbg>fjS&5*uCyQ0GZy3muEX+NAIe_uCIqfH>WDVN2u^vw&pTg8y z7Ww{32XxU)X{?K;$P~?srfA**NF{&Cc>3g1C8OGe8!GxgX2vop>jdt$jPJC6-vK?c z9c!#dwjUbnk?k5l+JLA2V`OuWDXGzElm0E@|1zL9SgJeCN~K$UprgH|iH^2r6CG^| zKw7({|6@Q6xF1&$kNrTn)ZDFU$t><as^hEZV0bO)f)BLVJtEHMdHuT2Zw3B(Qpwx( zK}cf$+f3ukQ%cUsf6Cb>a?0viB@d%ZJ)%yYF}wd$P{LxxS^s}>4nuCx@YChPf1O|k z=IVLP^bi04^26~JYa8^wmBt1=m$tH}rEbPz6dFT=-7?N<m6_&gG1GKvV$3v8i<xFr z6Jw@%TFf-_niw<9iW|)|D{eH?tT1L8WtLef(Vj=(<X;nlbhSj6eiZu|G2;vaof)%A z9jfF3wfI>K{E{$BH%Cu?yoK9=gSstkNz`rWy+qxX&L--%^antS2@|{!uI{RTe{@+t z1l=}FwoX}rtW|1(aQ<LOHy65`OUqeRvPK^BPhTt0?-^CP31<1QOCL>0ml(O_{x!|g z<=<Im>PQL>g+x@Q$O-d&nDmduinCyqDe?O3jfP9^6~nPmN__eeQ{uy=#ABM85+5!l z-lnN3@!?Y91Dl!>zwgEpzwgEpzwbuF+(;?W<xP!YZj`9;D(Qu7g7nX%U!zHUw4e6S zgl2kW>3J5lfSuU={<(*BZ_=@u?o9?a)4j=LfV54|mVC;%;eJ0Jw6KyULds7N5kH?6 z`6&`jAb>EmP`-0mh11W%w+%C6efj79Vfm2E&TsY~3vSlRiI6sr%0BAvbwt<7$D8R| zxvH72m2WlEwen+t)OpoHYUILaLo7p0L&{#SnB?vPEAZngrS$_x{=3#r>~rR8aRnwe zS?#dTIBKlN$zsf|xh_jQ`L!kfqlUoEJ>L<Zc7W47a%%Tit_)i$9-fqN*@EkpJ4(y8 zhb5>y%ejNNe*6#NLU2c5{2sqx^(~=3&CZ2E3wmLR1zkZ}^+7!9q4^$v19w$KCFmgf zuR3Z@k#s0IMbe?<6iElx!y0mQB&+1;NLI<wk*t!VBiWQ_#ZBr0xtUT0T~$9ahW1Q< z$p@}XX$;D^p6M?!t~>sc4_R6Mk`GxOMOf_tBSsq>KcjZgJ-!+j-r0Vd(XF_fp{i@P z92If(`^dyN+shc0<T+mX>L8zX<_e=^;4*#SBhEu{3)D?6$0<SX4_zSdv&%VUV9`gU zJ>gT|F#1olTu=Ixxu0oyN(9I!C<>v_`tfI&C(j92e2qFmY)+XZvvGc}D%LF@BUi>S zTfg_nR<>zX#gqIsH{Kb<Sg|rI#;VP5{XRC;acr36A2*)4#;fyk)6;<`s6%o}$pZD{ zaef1M6w0|Z$ZN}<t+$f5B`B}A$g9n_Z(aJ;WJ$BeBZgY8Tz&rTZ&VT2fUsl{SLfGe zppv~V|0ltgA_XA(;9Sks-9E_wRIhwl`;1@H($sOCfv8%pbgz;+jLE#$tEzn5S;q0T z%Bs~t$zMwwj9<rg_pQfB)<{x(PMvG{6}7?jorfu|ukz@!Itar(cCITP*<;tAs{AeP z^&UkW@%M3?h}+Aa8^KO7mMDGCP@Vc9Vx%_lFY#M;S)a&h5_TLPVgcz|_VAaM9u7Wn zvp$|fXVtVun$T==!;(Pr%nN9?`LC1A@NmqnhX=W0&2>Tq^Q9m)Abjd(x*tk*SskUZ zopj$;p8m56x-V)4I^5%3?ek}Gcv=i?R#Ul4?$JENyAp2R6!e}?08~h!aT31v22d?P z*)IbOBX}2}fZ#B|+W>MQ1H~PuxDK9O$1Jr)xm0tPzI%&+#<BzeE9p=0{RpPKGmv1P z$4{%~+#|>Mu7K(R$}WWtX-IQflEt8Rc8>GTZ@Ag9_*p`Zcz_K6ndjE24^S=1(*&-v zT&F7vk^P-4*N=eJ`F)*Pt~+n6)2EJ|>(A+(stuplYog`=YX}^Gt-_zh9{wYcwV;g) zbAl5{<zsOBnu&Xm-DfJmcz`Deh63y*$O9;w2G9-QUVv0eu%8089n@gv9_0?=N~F_Y z$93kNO4FJ5Tbj;1On3C5na{yKi|n0SQHvJHxJvMpLo@XVcxWbzK-M?}JTx<ofQM!t z5lMUu@Fi4-)s!@OHYM>bz~$*Id#cE{0N(^9ZvmbHNNK%Jtv}=~z`xU_k~{ampbp<S z@4TQM1a*GXE`jik>J`9OPpFyT*ves6+L<lt89?K}b0la4;ZS8a^ESd$<x}V~9d1=y zKo>gN^FXD8vX=pLAy^GC8NjKzS}!WQt`2Ut<8byV$m0}vtLMT=2t0n27ab!D4gln| z1lSF5cPoIc0Gk0)$#0(pHM=#UxB&1rK;BhWJU_bcKS1U4egRL>Z&PIw^(A7l*g<sm zAOBQOqRM6HNmO!%o<wy5NV{dtKlXz#`IuJt$L@A%<Gf6D+JP^YBD?#CozzpE$r*a8 zvn)eTbp&v#vnzv(*&4yc?A57(`_`zrj(sv@cI6ox8?vmF8QA?B|FQP`PaeG}n6O4K z3VQkv8=XEiI-NH<xonrdA=>Z<bxJE*^WWoA^RBeUYl7x~&)B<Uai(_5h<6qz5HEm5 zHd$2i3^)ZH8p5qCVoar@o%#_k^FXP!2Z(LsvXW-OIp;HY^?*w%Tmo~~qOe$jKC{#+ zBEj<c)f~`rwr??JL$XvrRo}$OHhVw$9Ff(6+mn!ydpkhJO|;y#Mbu=m8-Z$UsJs@S zvN+|S2tW5BT=c#}5ruI38EhG20Y<h1KYi`TKz#$sUIZ|@J;1X7zX9ZL`iS=8be{d< z!SN9gm`8!H`>IkP4~~z`bg6^m^8uWp8}v5jq(bmb2b29eWbB2Xy$|3Hhy69cl=Vm+ zMQ!$t0#|Mr2KbE2@R$pZjPn3*0XU1+n{Cm7t;)pbOwmAHns^Qj$0=v0ZxiKEB~j<5 z4hVjeQODV`K?g53!O`I}^;yWRqz-Dh%;IEcG7=esCga-bZT|%%)__|o9qa_4`@m|a z06f)!Jt>{rfjR>!zuU*U`hSXQy#Vv?)Gu^>O1QB;Ih9^CJ%!bSQ>DS6ce8fy_I}Jb z$HFbeINF6DOKMS4096PU0SwR5L*GN-OQ*v5VLQIiz4z=a-FvUd(!KXf09MK_@b;$6 zXCdJfoSd*tXza~I73ae>dLa7RfIkh0SgS!#4FaF7Rja4iQ@SpXjF!6W8Cy2Y3jC&h zn;Ty~-lJ=JAab2*1_9%_JER%h^J4JWBd2Ov(61*`7v~vq8mYStZvKw^!q2?F6I4x5 zb_0N30Qt$EsLnCJ%_pifk|u&N5kc*)a5+HcJb>G?0fqs*2#{0^p6cY84VMq-vIj1I zLqB^FTz-Iy({i)gk8h>b*j)0Q=NQ$M++|F4vQc;}Mxm4+HmS?2?J1B@x)ZCIGjfx@ z$a3^%eXwrTW<7c&Z_zGo4d}VWoTrlkYAZNTGbd_$cAwS*RKrf(F&n1`s7{^q0M);f z9-!s`I0sD>S2qU-C{C!GyyWx$NrBZov6vC&zQLMK2YWwIF@okD1F*luPvy>#_!Gb& zfXqJ-k`v%^2xeb~>l<*joIBCBc1zm|^k1z`(=`4v*ri&5p>P}y$97+uwXGF+Vx4l! zDRFb^ZB*YK0+Cyklu02{oW!kq0X(!Er>rM9W4!=34i;EFoq_xsK@Ut-+sRD!1ShiY zB5%7vO+bB0Hg}P~tE|30<1F?lk`QRL4f7Ec*JT}HkzZM9EM>R!BKiPW4lt2n-gyW% zl>1#>*ElU6xlMm=T$WBH;)5QXFH1z0i=->t8umK39r|6&#CZs|S%Q`N3iEQ&&+npw z7dso<S-6W6YhM?aC8w%g5iXvpuFyqy0rMduhD(Vk*DGgq7f`2*?gCnL(Op0{04s1D zynMdm!!xD=qqS<cGa+s_Z&z-YO5D;Cw40`_xJ5i_zu(0@d#?G=UR@u$Utu}tzTYKR ziOLnD`_)_byxPruK++z+6D8&TP%sZe9aJyfPotDWf@S5p8sZpL{rF!T_?&Z%_JZqt zOW^MWvoxA}^>#*b%g)6}t1OSiCk|#LBVD`~EE_3U?qz20{90!=e3;pTkULG~-2X@y zYtH2^dJzPgiu~0Tiy%4qKgy+yVpem0L<LE~ye2@-{Tp9@Q^|`_k{5fsA#i^zXx*b- z`WDmVeSY>7F4nz>?kHHvu5prGwMk2sjTdPTk(R8QAd!7VTJ8;)C|TFFhps5@`=z3M z4mw$GC3rx>Uj#jT#JI7R`(4+4%upuY=ZWFK&PsP~2i6s+KklurN8yu^0=G#hri=uD z*9mF>{7p~+U|27Xec-p-f_e{>-4);(K_7tH0d&MezG4&>zcu${mjt=?M7VtjPkTDR zj{r`Em-W}vbOXk`qB|*P^~-w9`OJV9UeTlYzE^?|m^Is>J%<7C$_Hn`4&C3q3&5u6 z{AAe0zLDrb_v~&VIe7s-F<iVa%lg*ThZa&Fu0y@14KjpgeHd^L=ogtuEhSGsAl)oO zX!<wqjUwJr;?D{p)y0s0Rb5)?>Jr&p>PIW7AH3pRYENs;TvpYV*1EP-XhwsW+m@KR z^)|Jk&HrQWO8}!PvUcyib*sC&vvxWgdsxDr?gYY`bO1q?BrGmK0&Xlxh=wicB!B{% zprW`WxQ#Oya9;+{8J*E#QFL@B;EoC|<A@6G&S-Ggao+jr-b&vNi#l)q|GgR0d{wuW zQ>V^3^;O-jM79;C^Z=Za8Ixu0Q8k(|MFxml=!yKRbG19USO(eV=!f6atlwt&7Cn@| zp)&n!-TDocg9#L0w$uI%m9pY$O07r5xq7Gf?TUqG+ZE3ta4sqq-=r!PSM9X<!Cwe$ zqoGZB-wvf`Izp*j>0jJw&veyyI4pQpnzFWwixfE_U%qeuUJiN!42P3}{aO9H_bvS% z%4x5MLunafpO+q0O`_$=2>gPKxp!k|lXuysvT2v~f_%=_T~@q*=Y8kKK*ssUciG1C z#V%XSOq`Wu$^(+4ovCHFJRHf`&BbLhe1G}@37pbXKCwiy<#!u+1cCoJQ6|S^S_aXC zQ$=A|OH=Hq#WfWa>g5rP_Z*TRe>Opnk&lN`dhW*{y0Nlt-{>tQ%!|})-bx(ib&;hi zsFeJRwc*|NyXT&UoU*2K>?ynb9DA<+NT9f3xB6|Q#dCIB%Ubcm-S)Q#ZrE+F=9&1d zC`+Hkq^vX^*lm4<N#8X7Lp47u<tdW7YN=l+Pl5KKgXec!t9$YLyKSHR+6LMMA0qzY z`_o$Dqg>o7+x(o`oFac0%N|Q*+7ua*_t-N&MgA_8$1R14DKca}ZvU3(DKa2FZfQR8 zOnJ-m&#;9zNs>b8ici8lK11@}_GIUCb?r<UJD-BsBPm&Y=A*U_E_&38DO%Ns_;o+Y z(%<$xYJFKk-*oXuDrO|hm@(&EwT2{1PhClA>zBtQx33CPkQABx6^hF!kRqeNBa|L@ z^ij)iB;g?XL8I2Q=~LLLM4gPjYCFX-qq`JGdrXOw@v#!8yA<c$c5%8(ag6hnINhVg z=^>Ln>G4Pzqk71O$Dz0suZJC^lE)2wtfO>Fu2|NbY{^GfTV<k|0kWB~RHaDD_iDR* z1EhRa=cy1oK+3n_JQZRGNP+G<Plecl^7&q*Wr!UppMQb09DtQho~QIVND7=wX)CM_ zvd7zX+y;_nH?2jGSn4&IHFt&F=~Ay>kO>&Wq})yIa^L!il6#nx``md-?qO1{HS?6* z!(>0V%u{j?m(O?2Q*sZN&;K@0$!(>7n5Ps!T=v{`zEb=MTk&13VT`bckumO#$S@M^ z0nk7)tbx!3EX^B91v?ps9<%;*wZ4gw(}m<9IvE!GwfpE~SbdnGXUL3<&hpYeqSJW; zWU|^`uI`-SNG4iTE14Qy2CB7M*Op&{XuK}-Q@QTDTp}4=y1UTka`dM*BTLkl&&0i> z9YwO#7Gej<0|`!l8b|B_W4_G37}=N5NUQT`zoj2V0O#z1Mwh60fN5INJ*jR@s~MI+ z@Ls_1<aABLkN=P!ej`oO@Z;aF*X|iY-bz32Gs16DbNESq(y044g+~0;R}jTYrg<?R z)B)=b#%UUUYVRbniJ!!$!cV1W8h%8TUe||+E`GuzQ^_Le$N#P#Zllid<9}JN{fbr` z{3I@2@j8X&7w9KN16qM<okt@HRC_fQ!cXd{;b9&k5A>6ErC$5ZG)==#;%{r8OD3*F zKkn(Zmyn3~NqnOAEfNYp?$c_&qH_32yubEd5(PhL<LbZ6BkE5*h)Z?A+V@CH`0;ND z<Dxx&(l;34?UaQdKQn6Yqd<(GPD8Z}>d@5Ylh#eWPdqVb<8)1Xn84UQTzpR|yXXv> z{ikWU=Kb+CXJ&3R@ZA`ccb!Yn*pFxP5rnzPE0+-ETuKw}di5NXG2J)Obh%d1Jh&$7 z%ViedOLk-m{v`g1HQ#a3;LOoh>9P37aQE~gZwn=a)s>iK$mbi~vf~n@4E~ltL+-07 z(>R4%bB|a7OMZaT?nZQGTu&w3>skqV@QXser5`WMQrBY4*fG?~_2Tmt^iSODe(DQ* z4Z^pR$qD?yE6t26rg;+I0E;+{x)9$2$HoO{nGxRsC&rbMwBmc<<hcDP^8;{t9H)_q ze*t%mdx!)PKLTgOV;3nj9f>~i)A2x;iT?4|q8~#h2FJe(F--jd5-&UcF4S@9f22fi z{4NM3bVxfg{zGz45i1k<@zv-)UVn)aW8)u3oh1D_N=%6NqK;pGkP;K)@fUYRvc8L2 zn-q_oyhzudF>q6}4h{6w|4zk<<A-1X19WKZ%=l4A43vqI__0U~l8Lk8Cm}IdCeDkW zhD1OotI-z57ogLilx<P`C^Vg;!(OVigee%^jj;x$V#Ov5GVan5lywWB7B>^kv|zYq z++N!DiQCYKAgfqwz&5_el)^S3wwzMrVk%|sJ1Vyy<rd3l|Ddcy*T1vK63cWLr_aQv zXUIlGn3q9ulKSG{Ajz0XmXj2F8d-Z%3Auxr)QyJ2lQvL}D=Ci3xRZLF2Hm!irF)Xn zsf;&iA$`UqZKM3yq)(`PT+%_p@kwXXXF}3NR4XxQG+|%TTzZ<6w4OfwNiO<KPHLsk zl%#j5OsZxuDop2YRXdd|6>rZ@Q}dg8&Kz|xXmLznaJ1pEsM&ffv}9N+@XbaD>L zF2tCVFQH~VWf*1hK$6Z=4xdOKgIxUf87=u6<W|CIlCK3k|8c;}0jp%k@1pGD`vBLV zizRDOpb~JY?4mPzTmDZHHhD5&&99N0Pa5>p{tne1MGN(?jpRwFwqh4@-$55Ep8(7S zT!jfsjzhHzTao)7%C3G6Y{xXsD=-Vfd|!r&hhgw#a!wzVpF8B|a?1kfGbPb8_b3&L z!#h>a*_dA~b)M$A>=uS#XSATl^)FM2log(<2a#FEt)npLxfVuCC95kmPZP4uxIHM^ zoWm{CL!%yijN`U>xisTN6uIt4v^Ll~>@~EOO~QLeKoeTroxmf3&A2xx$aqIdLykL* zwB;R*{Mfjwf%AY9<0iwH@*zobTp{Vh8$y11+%mLN0Nge1Zj`|^Y8i1C0gr{v_lcVZ zJP!H&H6s(1#}|`4X%lqs#DOk*nBK|OFc(%<Yu+iyHscB@%Zm>ZtOCLmogoDq0bHEz z!aD9YF*XlA;Qea&+fjAeVaiS4N!=S#EQa3?)M?k5D&6UccG$TFe@jLRsinJ-eWt9j zqrJwNks20kjlk#Hq1FZKwmAfr#XdphP9CHsESHZy2W;^I${Jl!w(AFEX<b$kcVHpR z1RFrBMYnU$t)a9Hmk^Y_ZNt0lP=Io~Yh7g=mvixV2yu>-dX8I3eNIGb3AG+8s1N-+ z7wW0SRNr(1nLx(bXSP2fQkIcBQzr3<NLj{}sQ10=*Yc^zSe-1B<76_n=R#cS#{{tE zU#;#*o39^TutwIr<)U6Ukd5eXr|f)+i(Z*DO#N>uy`LsL2OaEBneieQy&oZ3F`jzr z^EPN%k{hyS;y3&2em4Y~L{zlzt(2=L%k+bk&RnnzxBVfJdjTaYH9b{UJP)ab^f1j0 zL)t^hzBuL5JIT5e7E(HM7NtAO;%}BwS{}}Jk?DyQy4DY-vSW|+%YXGA?oyh?{@W?< z^hLVX|8@f90KXz|A;8rHng|Rivg;*7F|*pJ*Z$>{bq5N~CGaN#166@R%PHsCML3d| z6`$K<|FMr*{XBNXL-ceoDh^Z+Wu-4=r7To>eUJ60AdOkFLgz|VK|PQa0+pzs^*%(3 zexC?eU-`|B?|cYD<LFsmL;?MKAB^u`l+G-lPYO&*g2K9-PtTvh#Q2jCwy&ttwLrq@ zn2aQlbei*v`lex)Q<6}B?P6W)UDBWSp~Tn%@NRvsUs`qZ^%wQsje_UMbZ`keMnmWN zrJFCMimy_|RpcI-h<N(9ez-@%GF=OPMZ*~VI2ZV<qWX9K2~?(kSF-e8^sv8=zz6^r zfkFaWHp-vz7cTl+<z?A&RrW$v_8I~?mr=3b`K5x!Qt2F0+mI!izBU<B1)=4CPzh{A z^ox@pqmBnd)pA1bqxwVfM5_5Q^sEhCfv+zu!@w?+P3))azJm>!hDOttlZhd=Jn*db zH-ad?8+F?M5akuo!~U-jxBy@ufei$5_E6D1kTK_yzjCpcP|litT)bk5{VVG6;uxj1 z%~HKBR84B(0jlr_gx_Lm;djezE&OG<t%cXn!@<9{YvBbd{U|lpw+e25W-^-l5@klU za`86$p02<J3S4djE%&p%T!5DUtzDq&q(D8ZNjtqiptgI(swYqSu{h?^lVK3`&~x_R zCw<Bi^{i@J)aBK-sO!*()>|8>X|3(8?DK;oY@tW}(8@JW+kde2Y5xVWwwXMlT6$Ks zbO<fU^825*uL?Zv|BWjDgDUT<vCH?t_n4)W%aoK)TT+g#vCGa>Wf#>*Dbq>HC2>m1 z7yaNY>uPK%{m<B6CfM)y#o4`XQ!PEAT6(2MN%`4x_FsqI?;oeif3C{A!gl#iVI}1Q z&$pMCWrv0BvW2Sb*<mT=NRl!+UP*b-4?49nY)iR7N%^Y(Vb$wxs-=fjOZ&n~N}+mv z)&IUK|DG!Uy(%AHtE6nD^4+cSvh2WGyX=@+yX@&GtL0w&jAd0r+9kcyk8rdEk8=;% zPiM40y;(lJ1W$7^$$37Nwz>Sz)^~S)i*n@SyOZFc*Hfu%I3ym+JNHi{NoTyf)^^4n zwYD=pOCYE5&$csaxtj=r==@+exL-E-j%pB(m!ZLfR)b%v21T9SU>5>8+uIwI;imLS zF4m*gbpMb9dnw391%#Xl1cu_N3^}EBat^mp`ppCtcBadCT3@Ha&U8P*&hIEKo4<;h zZ?&3lR?Qz#&GUL{zEw4!S&!yru=?y->*6-m+LvGltMT>ra2C|t!)YXtqdljBmFp=x zShYNB2dkV@DC=9G-XBmeA17LRJ6A5gH&X3Bo3R+5=WY+aRTT9T2g$s#iMF`=>TPk~ zgt&Mr#r;f*+q*xd|B$G(F<&;7u|jEMzT^Q@SJ**#*c0}}wE6Da676xVSYeNA!wP#` zEd+9ko>1fBPuSynveh2fFtl~%6ZVPsBDZYkLDkM*R6DPsoif!9EjT3VR;pr+dW96V zA4dIAt9=#kBKK&YJ?f(?>`}W{5|2<N<jA|OluOT|L2A^iEd{Prqh2jXUAfX8^~KNG zv$@*+E1x~;TUOfA?p|q2`zC>$ruNxfw$~nY;JNmtXFc^eJ4yArBL%&F*52!m6!h9{ zm2G*x7r3}*kj#%svIjMJl|86M1cu(Drt-2??Uon2-}-CQRBJ+#E$bbtY*`;(Wy^Yy zKu)jyO4j8s*s^~AqAhFg*k`T3NxlZ+J^+0WluG&<HBVOtDz*Q~^Y-^9cceU`1od8M z3)-E)KvhBtn{%OzQ4dm|oe8{!4&?av$nj60$2pJL0%<ufKV`3(pD9rIv<*&s-Uf$W zu)z-sq`zo`Y6aFSaEAhWY@p@bK=jWf?v-;tfdqg**nXFj_OuP&c-96hRj)TFaLe=d zqdZb*XRuYb2~`cp(Pzv(I0G4uqtBRo0Y_xhv%d5buK|rzCzzwuk!b88eUv&9joq)0 zQYV+O@9Lw}Az&;sM*As>;wNs%=rA>eAMc~1zoLKe<JmM)9hz!AO>CRzWVW9XE|_Vb z5t6{4Q-QyhYSyWr@v3!3C{O*Eb!x|~<2+^^-ZAU&j@gHI)`=mr4g;CvD36Vpr`bn& ztnpIWs6026Cwgq%QmdP>8crQu=3Sa>S)NCZ$C**~BT%C};NzbUqkjYr_;}kK_>sT? zAOCubhC>A$@bPbeg}?zH{}wn_;DC>R2b?Hyz{kG_P8K-e<39kW3mowAe*t$DIN;+y z0%v$|z{iOLQlgIs2Yg(YiT)lO@Nq*X277S8$4$L~#LM>JfRDTM^_0l<;DC<{9ny~U z;DC?E%0#{g2YftUUqy+r9vtxTB)xzV6FfNJ<9>P8HqnCvKAx;!L#<8n;DC>(>n)U+ z?7;ya@2O+=UhKgEA0MFOg29;{9PsghGEw5e4wDa(iL*R7;Nyd3;ye!y_;^6Rf?epr z0Ur-a*%o<lz{hj+I}9A~$unbD|FJlTlV`@5qZpj}@f+Rp)Q@k%$OTUQ_$`2%z^NZ^ zfeuW8Q$KziS{9niJPoaxnAKP`gt5fkq~U)qv(T_}A5yvfD0c@X@GJhU6KZohtbkd^ z%?Z6prFtK<txQ<o^am0xv7EMIeSm0R?voqwK4_G-<vzI&@AH^Ui6psW?z@v=t98{f ze<O<a!?ez(_>+ux^Ll@%XdNX}ZpPCANV4Yj%ThnzZ}Ge}RNF6U|44|kjf$pyMbF-$ z{51DV#G`O>mDWUA-y-W?0wzhG_V|A5S(^VPyL3MSiFlMlpo=NhvP~)L87h$uwLI_E zIw7c-_dvy+5LC>20XwT;;2zRN#S8JS-Wf+2`0-5cat;;7kNLFGxtX%?<IU{a9wb`i z+1mcT?Lp#t6(mTaTd2VMbL=3&{%b+Pj06eum>^;PRFL3~AmNGx36~>CxEw*k<p>fk zN04wif`rQvBwUUl;c^5Cmm^5HoI%3n3=%G9kZ_s$;`Sina_KegLBiz>5-w+ua5;m7 z%NZnG&LH7R)>pO%30Jy)MSGBNIfI1D86;fJAmMTb370cSxST=4<qQ(89Q|4uB)o_R zE;}B$HZ4~1z;(;w_ITiGscDY~uJ(A4-yRQQFs~3hR>cEMrOe%|a{DRIk6VSa{dH)C zJ%Io*G!|(<+hY<A#VdzYmaA_%2eDyTEFL^zSi#|ToT-g2qX&D)Z+%xHnTMqRB1$en zG9Ss=luWvdDxF2GwStf3jY27`<yX-&Eg26kW;j+SumRv^0yhHu!3Jcv#_Loe1%jl) zh50?uN-A8K-wT-b0CkBUcTrjulnV?0G)+0S7@}c&W@>T$+dXur?V*RL7kuk9`z#uo z?I4!h7|JcB2b%cZ>l(+Tx~$cHwkC_hkqz7REH5=IbsLs<8<txemRlQ^TN{=myB|UT z>^oPF$f0jSO6-LW`(ndK`u6Ncsy`lVCarlXPUBY(YM)RdhP})Mb*c@Zr?K)HV-ObZ zk+&EnOj)gKajKX{UT6%?r_uu`-y`od2GP-^)!>#f=`UM+^RyGTSC4}6KajwSQNysN z$24(R$ZKFm=L-C;V$$73+MjV6t-T&m{6Q5OU$%cM{@GH0GRj$s#qA>d<>_%>n5s9T z*8H68#VE7b)TuBci%lUCFpEa5wz|PoBSOOd?bo_iSTsM+G3>Btwqf3_uxNgLx2D3P z`3<lY7R_>*~f*2W*8!^Lt<`ESf(6TVc`s7qAr;%^!iSuxM&J5>{9=b(yfjqG`y4 z6&6iXuQXIxG+p{qLxn}t`l78B7R^|hu)?AludmlsSTvJlP_n|J>DL!&DlD4Gdaa?t zqM5E=YN)Vi_LMJFt*~eg(C^e#STqO9gcTOeK{8>5MRTxBSYgo&=z}#C7R{iP%?gWV zj=sTY4~wQ97R^l<qzsGZEr3>7G+QuSD=eC~p%H||kp|+}LzIfaWI}BGsXYz3m`a)Z z8<h*1bSov|kQ;Bp=v)J<$yyV(<f4wDCE%Ak>i|1)ktXn00u12gT+9@Kw{t;v3H*bA z3*a^aZh-r9As2yN1UvwH33vex5QqVIHy2;rCGZ)6IDnm<u)QI0#W0cuptTcTK@oVR z6Mktafp-Wb0sNDIAK(W9$pD_t_|^r1)XwsSs+Mp8fi!@X1kwR6C(sFCH`VG4uz~vO z0<e#Ax&j;|&<)^lC%ge7@OdZvc2ojC6376Ep>}!#q!Z``u(&hMObJ{_ppP5{flPod zIka_?4F;fm0wagWcXe9A_dO{X0aOw*90>61eA@65NIdoQaoS+y1j%l)0InUWX#s$< z$gP6_-%KVy0Qig^<;WqA)wCf1*VD8P1^5lAHy7X@0>c3QKwvn)69h&8JWpUGz~2ar z0{Ac&U-uwz74?+|a1()ifZGU!0Jae*0C<GJ7=S+$7z^+mfpGwTB#oT{u#WURUY6;E zKUzTG1p=o6yh&gpz()io0enqhGJr`soC4q@PzX@o8GnL=K$t)=Km&oP0J{d@P8ET_ z5||FKpTG>+1%cB5a5jEAz)=Ec0Q^YcOaRY7O`8djOkftkDb(_8fN2Cu0Ok-V1;C## zp9Am~&FNf#p){vw0enSsdNx31FXGMsH_)7(3-Hg06b=Bcr1_c$Fq;%LU&=#Mxd7l} zdbCjXRitTU0A!z9xs-<ltB^7WDR=<9LM>MUEGLbf5AgX=O}hYK?r6Cm(-LM8SPU?g zY-0&PA+@{|AUy<sXIcV&S&t4d6knMJc%ldo2+SJ@e<#qpC;XkjgVW&e1fHA*e<$$D zH26D#;XUB*1iE&IzY}26-wAxyAO4P(d&1ud;5tD(z?J>r?*z7thQAZ|c0Bx@Ktosf zJApH%!rz(ZtD?f1?~Xnsu&;u)6o&8eQ6#Fbj<D(bH;K)CmlAgQuBT78??W1+@ZC?? z<GYlw*SCsB6yxhktR~iXUT+e{*E5SG@qI8BpGD+u2|m!BMBf_HhR;_(Q<LPoid5wH z&7DHg#`iab8sEQZXsNzFv~s8U@W({cefcD0Cto4iMrYqplBA38E~?el_c7J#=6jqz zyZeSyFFky5B!7nQ5t65;?=4bDFJEOI1rXo4q`*GDztM;?eJvCd`ub*&J@oT+Cq4A{ z<xr0Ue0kF;R`|-v-Uj)`5G@((OQF$a`TkT$@xk{zjV0*Ygvj7KK*Tf0_Zeb>??D>N zP~VRk6b*bYk)DV7-lRDi?i)gVjquH<_DA}jrJym&hd+=$+P9b-HqY0I>?+@Pl<J0j z2DM+{!*?ae_?{;1jr9$s5smZVUeYPP(@CoFz7(3c3BJcC;O?SMRyxslA8B}!?=jNM zWZwiD=@j29gbRHi(`S)SC(9}JrP1e9Ulx5%^Npv^>Aq6>oZ*{AqdU#Fm_ASUt)tH~ ze7~X3Gkw3O&zZjdB;l-tXCy%}wS;G-4HNKZz=jFDI1x5X;I&gxf<Sm2Y?#2k6JWyx zyu)F`1Zw1(MPODYY?#2{F|c6*rITR81PZ&uh6yzEf(;XRa1v~o!1|uBVFGQZ!iEWK z>H!-j(Ct*%FeEI14HH;&3f3$F&tzlGA~0$K)+_=)6l2XIaBUveECP!sW6dIvoR2k& zz|AAEW<j1jtXTx=gIKd5*l?^_1g^=znnhsWFsxY+V+7VL0y)F6W)Yaw2Wu9D?~gSL z)u&_4BG5V<YZeOk#+pT-Y&6y^0%ONv%_0!&hc%19H`!RT2)s>&2LoI(8fzAT%Z6ah zB2WP;O7oNO_iP)SG7SF^Na<#St8oVc;MVS#I0EJrNegLV8jFb|@arN>9Dy6b+$k^N zy2+?cU`Qsa6L@MgsuQ?<I;s<BmDLHHJs!2(6r3la7J=)Aq85Qm2BQ`MBMW5&#T@M0 z0PX`j2RJtaWeE5Np=AO)XP{*QuXKZ81cpyS2Lx8)Tg7Bb2}3f_4uQiX&<=q$S!jpA zjag`i0N%=TfL~2TI|Lr<hjs|e>IZ2ETz(3gBk)QdER(?8?yyV(SN4Ww68Ja+mPueH z&YGxH0y`DG6Bt&A-U+-XdnfSzIP^~755v$qfnQHVtr#sKBqxPH8!nh9jkP7)p& zk4FSv!grMc(hz|GZtsi+33M++g9PG+VmJf}hhR7azL<{T5U8Jq;SgBR6M_;j`l4?F zefpp$0{g~cI0Rl93P&TbZU!8Uz_j6TGy=~Jf}_zkJ!vhzY;(T>rmHqt`ldUG+4|qZ zKJs_+i9REF7Cqd7tzL??sRpM`u{PC!sp=cFZX)J4$6!cb5KFMPasRNlaTmXAy%7Bb z+qfTaz|hA!;j(wlj4HB$_~eRLbH%H<;?-R7YOZ)SSG<}lUd<J+=89Ky#jCmE)m-sv zu6Q+9yqYUs%@wcaidS>RtGVLUT=8nIcr{nNnk!z-6|d%sS98Uyx#HDa@oKJkHCMcv zD_+eNujYzZbH%H<;?-R7YOZ)SSG<}lUd<J+=89Ky#jCmE)m-svm*Ul2@oKJkHCMcv zD_+eNujYzZbH%H<;?-R7YOZ)SSG<}lUd<J+=89Ky#jCmE)m-svu6Q+9yqYUs%@wca zidS>RtGVLUT=8nIcr{nNnk!z-6|d%sS98Uyx#HDa@oKJkHCMcvD_+eNujYzZbH%H< z;?-R7YOZ)SSG<}lUd<J+=89Ky#jCmE)m-svu6Q+9yqYUs%@wcaidS>RtGVLUT=8nI zcr{nNnk!z-6|d%sS98Uyx#HDa@oKJkHCMcvD_+eNujYzZbH%H<;?-R7YOZ)SSG<}l zUd<J+=89Ky#jCmE)m-svu6Q+9yqYUs%@wcaidS>RtKE`UyCtu7OJ41kyxJ{!wOjIP zx8&7s$*bLxSGy&zc1vFEmb}_6d9_>eYPaOoZpo|Nl2^MWuXamb?UuaSEqS$D@@lu_ z)o#hF-I7<kC9if%UhS5=+AVptTk>kR<kfD;tKE`UyCtu7OJ41kyxJ{!wOjIPx8&7s z$*bLxSGy&zc1vFEmb}_6d9_>eYPaOoZpo|Nl2^MWuXamb?UuaSEqS$D@@lu_)o#hF z-I7<kC9if%UhS5=+AVptTk>kR<kfD;tKE`UyCtu7OJ41kyxJ{!wOjIPx8&7s$*bLx zSGy&zc1vFEmb}_6d9_>eYPaOoZpo|Nl2^MWuXamb?UuaSEqS$D@@lu_)o#hFx#HDa z@oKJkHCMcvD_+eNujYzZbH%H<;?-R7YOZ)SSG<}lUd<J+=89Ky#jCmE)m-svu6Q+9 zyqYUs%@wcaidS>RtGVLUT=8nIcr{nNnk!z-6|d%sS98Uyx#HDa@oKJkHCMcvD_+eN zujYzZbH%H<;?-R7YOZ)SSG<}lUd<J+=89Ky#jCmE)m-svu6Q+9yqYUs%@wcaidS>R ztGVLUT=8nIcr{nNnk!z-6|d%sS98Uyx#HDa@oKJkHCMcvD_+eNujYzZbH%H<;?-R7 zYOZ)SSG<}lUd<J+=89Ky#jCmE)m-svu6Q+9yqYUs%@wcaidS>RtGVLUT=8nIcr{nN znk!z-6|d%sS98Uyx#HDa@oKJkHCMcvD_+eNujYzZbH%H<;?-R7YOZ)SSG<}lUd<J+ z=89Ky#jCmE)m-sv-p;Fq^-4lmuMC9s_CZ*03_NCf3?9k16~cO3A*{C*!g^aFtk)F6 zdQBm$*A&8fP2mO0Ha8eOs13!Z^-WEbiupGf``HLW8&;E6eoIf0uf@et75uPChW1;W zm}_?qY$xaDEQ_2!K*h6kTB*;`PW+CA<ARzoSud1X$9dnv@NEXx|9lMx>G(E77$vQN zbKEI1%5=LuXr}!N+i##Ilx6r50-Jv>>{TALn?p_^sl4*ukyqY3^2&QhUU~1xEAJh7 z<-H@Xym#c4_l~^s-jP?{JMzkVM_zgF$Sdz1dF8z$ue^8UmG_Rk^4^hG-aGQjdq-Y* z@5n3f9eL%wBd>Muh~eImS@K(0XRLY78F)#6dq?JZ65`&GId2Xi?j4!)=K<p0k-6X+ zm@V!dnF}#ZvAB0+mSL2!xOZfhL$9&8{$W-uLN(kwGI5JYi^aVo^L%W!VsY=ttf~XV zy(4q+YCzmOGMAK~ENYlbWf!=2WG=rD5ciJEni~Ld@5roOhibTYWY*&~b1d#1nJbzB zaqq}nc@rS+9hs|c0mQu{^TOK!aqq}neXn6nuY8@RUbWd@MzCJBSytQeYSNXkYj|;- z={BJ@w>eLKLT0yFC_gdm_(XH=bMzzumjg`vZaA8zd760{elZo1L0nNX*WXVi;#Zhg zyU4f`@a=x{TD&@<lGPQO*@SE}0aujF=2)i5D@th8hmWq5k#xBxi6pKlnb*BWxqf`N zOYZ}5lw;_duA`#K*4JCM(1TaV%Tnf10{IWE(Y4e{P4A12TalQzOw;?J>$J7HmbT{= z>-*X1Nx0^*>|X4m*)ri07%61%K_~Y{gb_D0_yFDtYHuLMTkaaP-SrT)cLzn9iRVVU zt9gvOnkR8rr)QeS^Gug{8Ri1+D5N{`A-zZ!9_fxA>5d-hjvncb9_fxA>5d-hjvncb z9_fxA>5d-hjvncb9_fxA>5d-hjvncb9_fxA>5d-hjvncb9_fxA>5d+UJMxkZB#$?i zpEHz(69aeT=Sc{6<nu-Y!X5eiae#0~zF;NQiGe$E>5egQM=sql2JXnEJI25rdBtQ@ zgFABRjxlgYe*Sdi!X0@PY(EC>$QPdt2zTVt9b-^~OLvTcJM!h_fN)1%b1@*?k=HIn zHMk?MhnvU19r=pofN)2?vK|ob$XCJRW8jYb!bU*2BVT>Rf8>rX^L+Ro+%eX4nNXX{ z949{^vrD?8OS)rRBA>e*&IWhnXTub<gn2}+vLf!t*CUw3t>9O`hmvqdZn<Lu+>tjS z+l+@h^5#zrO}>vsqlx(V0e)GnwYwv~?oViKuxr@$<PY(<G3XirrD^fFG3XizY{uiR zkZTmg74f(+=o*du*m&F+bmajj#^c7ID<6_1$K%GJD}?;?c-$Ct6##dQ$BjYP7?jC~ z$BjYPSeSmFc-$CtjYEEajp4?iYrGr2Ize|$Ji_c@x+Yu0#En7M6l9z6xGd-@94rOH zjX@W7btD*W47!RxW?&936Jtxn$M-BUeB2mxP20?%{8*E$KiRrChz8gg+@rKE4kDfM zL_18iE)Ggj((sK}HU#FxmZJvl{;?qvmdi(VfVlg|hR7P}D4Xswaccu1@C@iw1si=+ zE7k8TzwdVj6lOGQT^15Xw$W^Mp=fx<a}tZLxC=KEg{D&c>sE-cHw#@fHBhnu$=OK8 zHBz!Sk|jt^L=sBVOOgBxN$5?VgXDedbgg>>g+IO0xc5yiy35;p%Z;4Zx#)3-qGU65 z-gSYdugA0%U#e>v_+8-LFn#(4wD1?o>x!FrS7CmdFVnRiGbsPh6cf8HS%%+SLWN$S z?4HXGaxnu&u|(5vLsj!~UF#J`nz@{wETSC!&ffhg8KnH)-3XjQAOjEj45ie}%i$fg z_qmvI-lX<3r(sw^M_Y|}*yC3OpCk{=lvm%T>+q+W=t+;(!MKA>59A%VGjvSC^Qe+> zh@SK%iN+XcCb*t@r2UPSDZlA%WzMC{O!-akF$R3?Axigy+`s#~{daQ47!595Nua#H zuD6AMgFsJJLJr`c>oI_Su(a^oT;y3b@28sm%P6n^9DGctj{z<8_+`?(HsCvI;7vjU z&Z4XjJ(dE}v#^<0LQa-K8doSGrx=)tS(KJt-G9iw+%wzgOLcmqs~hNHZ*=zv0J?mJ zz<?(YsczqR&F=QAx9o0v;E#U(;I@=yN}az&bu!LtSC*BTcBPWT)S;}|SK7+zLMD}} z$^84>wz96i(pJ{31bV6xQdxhvvRzqkzit27O;i6sjiB{Pdj#KIX^$X&1C2nuqegJU zTlNTEXjfd1i%Hg03f`F)zyVH?@&-0Y!=WeD!Zz6tFQ)v{DL><pEX!Q~iIST(*yeim z8(h3fPxLl9h>tedgZLM!;DH=K;#Ib}envSj3Mh`+?xmygq4X>xF<>dPzm#J&Wer5@ ztH}+sao{mXm(B0F%5MH8RKgS4{Cjru8I$d13S={$tEtekfSMC4bJ*2tP736l)Lw1R zNv1O30)4#4o|8XbZTGj2K+jC40ssB#_BomQjy)#@`h^~QPClo{gD@vX^8`61y|1Au z3Aay4rLyJxciL@P8?cAQ`z3PURNzAbIz`X{-459~qZOEV$a+K({CgS4vAhjdR}r$* zRRs4TJxg6haPQZ%)K`n$@9F`^7Zcx*FIENx+R5ORvo-B*3Y|?P;GZeu@B;04_X{lM z_kZ;bVm1Qb`LeGWK#}(Sf;y|4vGh-euMWGcUpio4GkA=!u&){5E2$pqn!!A%)Z@5j z;Bj0t@X)?pT{G}Ft{He7*9<(4YX%<2H3N_1nt|7O&A{utX5htF<<vC;uYJuROyXsG z?P~_BD3R;6uNgqvkzV_n0TTIM`<lTelo;!^uNj<5i3wi&ngNA;ZKBt{W^ggJHpy#W zGiaj3WUup@f!BG>!0Wtb;B{Uz@H(#<c%9b_y!JH%$hOF9Uo*JT!123%qd?d<3NT2I zb)x`K^H?_uFkI7P-6%jKpl0LcWMTs4m*gRK`;7ujrOdrc<@VFWKZz-fbQRQ4ho1OY z@F{DW&y5400yaH^V!)>)U-SGP`KO?GtY--F$0I+{GX(h)fRjDdXy;VaP4}D%t~U{M zwX0_`@+Sdz^Hcy&2JY^eg}PJLQ=1u{e6(2z+{bfd7AP3n?C)8L^2PXF7lS>W$dg=C zA7=QL<Xn`Q*2?g<%4MRxcyx>g5(=zwuLR|T{!u$2)5^R?Wuln`0QCe0p4h5#DPuQi z-gO{7NpiB_z{}`geN!q~R}${I>p<fvBKg<IUko5;_&Q1_*U{rHa`q2Ul3IiEQ~HBK zoF+B>E*C;Jb_z9-N~KRrl~ImLU5`>FTcBSm)mxT2pB|<`!Fma*%W`Gtb3T$|-?i`j zZEB`+>D1bMwDxawo$@kjRiW5<@7i~4H~qyfR)t~%ucf^&CQPp?kZqe<${DCsk4hI) zr7L8m@9j$Us5G;^QoX9wX#!1<zA^EzI`Qhpt)XpfAKE`4vb5T<RLZTR)DFAUZFZ^D z1@m(#^*ooYQfdgLj>wcq`=b{Pw8$P~JHuM_JEfE)PG=aheixEkk%ax~cVkMvLlS1I z--Bdd3N~HtCjs!g61zN30KeBd5j{psLYV=?OGNhx^BlRafQt^tc=ydXV&C1|)X8Oy zWMBJ82rKP$y$+>cT-IKCl3n^mN9h;aC*UHKeig|ks^O6}7TYymZP(|e(C1qywWYn( zb#|$@RH?2R(93%dwD<hDUE)2}b2(wSj+8SVdiwN*_R{~fOMmJp{b_q?ALRVvGb)`T zOLuo$rN6LCr&H-K;A|TZ;k%vzfxl0DPZghP7ysT-{CjxeeJI}TO%ylu?Dv!~7gPD} z%aCVR=n)?;i)7l0%lH?ncw~CUd&({Dbz2_mk=6F1?Vg`woVl{#GAcOVje>JMR{OcC z{q8kLY_nSLF7HC++MS8+(o%DE%T!~#OH<9&En7|OA#F8Rw~RG8xt3ZQuA_r5sQ+Y| z?Gf@KOL8-%mMx{HBW1(xjTBGTL9Kc6c_q@_aH5qj(_4{7?9@X#rs1DRBYqNZLVCz` zl$M?`M#imLq@`<&mFcSMDJ^|toa}Gb4V0G7af(bYzmdG7@B8EwwOW@F``=%`4{u3y z^?H@SbJWXGieA0tpJJfh<p+3J?CSEU1hK9zuYX__?~?PORsYft?I(ACXg_&df*GzZ zpMPW(34dZ2d4_;dul2e7Q>!bx8}hn&q`XY%Amb&>@?WLAhp5<oIm@5Z<Gx)y@(Hy5 z!%e!@w|aJa$%0?$T9W+RJAaikx`EPtOCrx-rL=z@(tC9*brWx<bYJP@a^4<C`mH{c zep;5#`8C;5##9veM5=brKe%{Yin5sIzB?}9eWC+OLqf-&C{wcf{Y192;n%94f5?7b zqjbN|sjdAqEB(Cxw83BnF0g_9?f8sAsOpiwS+$8Cy(cAzp#nXmGCYQ5g0?QKg7Lr6 zZIL{NC6cg2vK~*M$33Lcc?>HiC0d$^F`$`8f1@OhH6ZcGO-eIyvihb?&`dQZDPYL> z{23Q7Nx5!}u{9GgqBIjQqBIkb?R>RKi4m~Hh_$-SmfcRcg%tJJXSP~iS3vvR1|b`0 zv0Lclt{9vDm|Fh|G*b95<#6`Q8kfj~SOcv4gdkW0toww31HYzW;KvLZn(osx<NYx# zzDvAMPjV&FX23|*Sp4XiyqGBzYgivGCZ>R%Q*j%DRwihe4j2AGDR*BD{|LX%;$vb^ zSEr;WuDzj=RN8ANxs{ATWfqTmv8qQJkFHPgqjG#tYBESU3GIz?<R?a2iHV7eiH$*9 zK0jsV<I7R0?N4b3<JTj?BvU;R5hf*|kLhF;T@v4~(-eP(ES1U~_0s~HD$}o1231OL zuM}fd$?b$now!3`ot<T%(y{3`og#~Mi4-%4wRG*K=lD<8XQq|Jl*+!lUD2RxKFTC} zYVTQg)ZPqvfV26__2?clc>5U9Lr-v{Ub#_uy&XxK>psyVifS!0H%i{VjwIFW7ek_> zSpVF1l_7tCBT2OeM)Z742ZMN2(ZRN8c0*Y_s@;IIp{QnpJW`LE$<B>R<~Y<W4QL40 za%77`rG?SjmK&p^K|CB5kzUh=V~CnI!g@?WA<}YJvW8IsYB@@h(N2Sjnzp=%@=!HD zk{r_sb{j&?{7y^at=bgYqcW(<nCKEq$RWo@vNUa6bOk(jI`_;ppDvv{;?FGN&!*Gm z|6}KNxK~VH1gU6;kBfMDyz=q{<>iSfI#h-{AD8_lAqQ!{)2EY_r>B@Y#8cv=_NRQP zHZ9uVl#ix69lKM+V#r}f$nLrX^oXmYM%P?Np>D_b{O(TA?_sxatS5E!%SgefV!fgR zL`PSR_P@-I;iIpz>wW;_myvKXAY$MHqn&zCWYisGc6uWf%!+o-K(x~bJ33jm@~xa> zoW$}!YI10<EpV>oXTx%(+`~^8Ku1_3y5W>gC^s^qMQg%FMf3$%JaOE~i;g?_-E0w+ z@FC^!1s&aVj57muPv(M}c1lOD9)GM8A9n?gcqVgtrWtYGW1KYFJ4Lj2dZIni8}Y;# z<%zM%6XPs*j~^!gNr-l{MCE3_6V6gnv=#f+I*}Z0zbO&(OpUh5w2oR&@2J;K9rfx| z;z^>MH6-3~692!Qf)naEfk){wF<Q00h-#BMj@92$xyc=MnR4=l<d-PO8Ms}h)K0{d z+{%=MrALp_qgUx8M(HCq+6d!hO%gTU(o;gT;uE74?~7J^QksJl`r{muCp+n4N@RXg zqX}qQTze!O8N~^Cghoa$FwS+sdftUQLRDAiBGN6_k?4N>Ri{VCY`MmqaP{dKZ7fbg zNXgz2W9f5Dtj<(xN?$8B_fsLezawVK?gyxtIneop7MPC9)L<*vXF2m}JwZn>hM-y< zvQM}&<wO(1Av|hj8X6tkbEDTS2fssdxYthlXnQxJ<03YaRHIv}8FeLT$w+TLg_<0# zB3fQ<R9E@YD`rU5M$v+fYs{F)l05b#9DH0fb2ue8Dmngy0b)XQNIjKD&H2RW5IyN6 zYvtr<ay`XKiV9Ci$&0M9+beZ(#~?H{qBtvKTF0m~y<=3GF<e8z(>g8%r#lzm|1?hh z?*;Ox&1OQxR4Hm5pSSv)ktE5Ys{WH0Omg(prbIitbETzZnzH2dXuImv(YrgVIM5{$ zExJZ5I67!`^!OeYAN~0OD$00zJ3OyXM>EMhmQVHVXd(SNno|G&36uF*dn9a%VxrCG z<VPRJx0^(#-T0!7LD@}`bA|CcSD0ilo)pWHQcpN1Y0(kmcn0E}<Kr60NzAlcw3&8~ zHq#!_W}4wNubv%kvzIf@{$E&2M@x~+r+-J|8PL(Ze)b8P_*n)76Y)gT9j_uvF~^_k zSm*4<jX0J%cF=u7^qP_wt$QbVjCi=;IR(klwvp0NEL2E!+Fx3(Bau#FlK$xw86=rc zj4pTJ9q30_MFzSl-qAfqvuH*Si;!eQ(}<qR40~BDqjyJR=@V^tnH{J1WYOcNgN5U) z)ZS{G?6l4m(X_jxsfvzrcuuzEIjP<K#L4Y1TI(W5wlR^o6|3S_oQhkDm!HH46QhmL z7d<aYh*AFNnA36pc;b~UU9N1(bkieh?xap7I(O7}myY`G+EL%#e$o*Br<H$FqH#hd z7$2?ZgpMOWnN7!cTmYRLI_}&^xttp*w-Qe%@jTA0l{b2rF%kX5D#aYjn@$+TY$l)R zNWz|?X@62QHTOrXBROInDIKRgwWCp_{Xe&X|JVU7{&0*7I$XvFpG%5%BY(8dIhEDX zj#B@>2vEO>j60Sq$AL;zY&wQtMQO0(QP+tB7N~f~wJ23BR%sEnrgv29F-KjUI~rw| zpESzjuTUpF@;}yt+m~w|;UsaSW<^e7ov|S<`p6_cdX^H7_X;mD`dGzhM+{j%DVh-Z z)%j1dHKQrfCXyO$B5BSzmF|pFot#mrbHsGIfP{6Goe<OLMnC{`Pj#3@k2HsT84=lu zgTy%$(MyWPRl(lJXK;O-)|Y89xW3Nw56ejVIeCA7=f-e=b6c*C_+`Rzz;87&_;}`@ z<+S*KMbLuaWZB0%-OA~B@;>DFd)J|ncRIP&I~{raGR2?UscXFB@I})`oba$`q~kaz zEpo<hCy#p+L;3mYG%Dn%PCi&*(ZVs2gPpOC4a2yojpr%H%5<Y8)A;D6XF`Ox+67Kk zo;^|V)=8F&Ux#icpK#MPB|4rIMn~VG$f{Kwi5OF(7rtp753#1_MrmM1WK>aIpLT+G zQm04n&CiGqac4%8u$j@z>@4T$+U$-eU?t8BO)HIhxiiPPshb-a0wT>>$Ltf%R{Ml= zFq=7kIh*HN#}4ON8-;nfc9Ho`1!>v>M`+^sHmioVHLc7mtCb&nc3a`x%q(*5iz++r ziqE%30eHblmXWHH(456yTcw(|L^%(JvGjyzZ_5<PT^_yuR6CazWYlzAYr-AZn%a(Q zO`UVCsXul*z2axSJBXqI5l-XWA4e7~mvd!tt0hWUvEQRsDz93pVyv|+HhNKri(V8u zu1JyKpNQb^i(YV&)FS71t|iINwIs#4mZZkDn}}S2=owefj`<D=GNZpi;xw=>$6qnJ zT8l(CXWZ@%0@vdtwv-Va40}d<YcHp__Ev#a9im9(XGTZgzL950_Uq{3{Z$wo(2@EK zRPlL`3Xp>>Z_SE+d*FP{oPNC5%+b!A6A6n$oGao`E9^VJ=Mf!zhIe#@5yu+xNT=<O z>gXz?|KoF^|0ezYkGBWEbblVb40PNkM6U{ttpW<CMrOfDd{xxy)Nv|KMtCjVcXiIp z{}a9c?5(+S_;{zo|I|D<l;?}qbW+C^$FE$@xmB}fJGG-?(|(r89{)|cQWLk@b~zR7 zKFM%I^l&`U!|_HNPE5p7Vx8-3oQfXtkwGT>lEM6vgZ=-W9oXB?=%pn=Z8H+pHp8bD zo1~M3a^-P$VEmuin9IvqQPOfHtxHK8d5a&>VdPEzNk$M8O)O(0BZ&K10{@Jubn*sQ zBs3mFAx?DM?p*9+or`^(WhC*=H9sNRGSqg~PWqHNBq?+Fxi9e$K%>vwQ=`2kO?iXk z>;N|LU(=e@nf-bqT2&sUDz8&jF-}#*TB?e3swzHORSD6mN>r-yDODvo`I8^~Ectjb zHN_cI9ZGV3CoqacrCTJb(@AEcb9B6Nd~XBEuF*5$cnvDwRX7P%4@IalEH2Vh&04SM zHyFKD0PmxiQKrMyZPMl7V8<t2M7bjVG%%VZ4N{w>!OmqftE1BeepW#J4;EI;-%o#+ z)E==sAU-LTiJUPcSZ550>U*QU6K>$u%TZg0{%8#+M{79cB<7JCZ4YVD){-9Ww^4Q$ zB~RyQ!|CEUEa-Y{CG`sRgge0Q(MJM3qG^A|NrH0E<2|#5Jn?(h$Z1NZ6(;&dAKLVb z*kb?OC=CsWB(242;4!iPJ6z1t9>vW%{d<ZWI{gpENdE<EYpR2lOBPhsE-VXH4jnl> ztEzHI?TW05CAGntl{K1tUR60iSg~M1uyT0R^I@u@cCuFHSB7h%3Xof%Mf`(H9$IzT zg4%FZfDrAc!}G#{MUbo}yl`Pzc>uqoQVXwKR#rohh7qn@Tt>*01uB<XkXloaa_3c7 zSk>&t7`mt^TS1V^-Uztxw7POh#Zaq2MOk?1var>}vg)N3OXkULxNMM`x1Ow+S5>ui zft62SUR7D7|0Og8nW$Y-Np+%Sr1Ig#%NABvD;ef3%qp*}DvKmZU+o=2E~|e2{MyQ@ za8~6Kd3}`vfwAmfQ?REsJ;XdB>73mMh5u3ZH4}yGii^q#G?i{<S6$R1h9rMAL)>Zf zNfYlqGgUnL!BplIJ3a`B8y*wSiA%qlTO>l_h{*XmBp$PIw#v-@CM>SloEN-)XOAH3 zK`ozU^wQa20;lD(V2MaC7);tV^^i*hT<r9%ET-XzShQv5>|lj4AfEauX=bs9M+_Ay zp)9sU>|hs!S(Z2;`h=&Kve*XZ6JfTz>Ag^1Xm;sGqE}HCOKM{)4v1HGva<@AuaI>W zJ4&Y279V7>VH#ux3%AaGh)PuxOlxZ>qP`7RA$_`BBKT~Jc)~Q;kOos{C2fTIhk*)> z%w#e3wNW{x*I#<M=v4P5t1x=&2XA6Et*pB!XLTfFoY7A&dF){Q(Y)Ygtd8XL7VZf@ zcIsn2^EPJ%S;ApfBMO^0iVE?dSab&S7=3kg%9v*des7bjoIc&<E*86EFI$%142{&` z<8l;om7okgjVWjK`OFhw)vYYP<O&v7$Z7)lET(OnsK~2D(e3!CMom|~OH2@d6L+vQ zqrZOs!1Ht2qWoP`hTeL?h+R|8zn*!UO4%&Y(#%$dS+;0c5!$wS^Xti9C4W^iRg~6k zW2sH7>VRmh6UiicIZG)l$}+s<>st(X|L9-p{m1(4&x-|?cQ2@^Qx2}&UDGIY2>j1> zb>)A$?I=Smth`-!xTWC;2rS}PM#T3G*}Ua8mXC9%V;Yf4E{9Va4ySfGe9vePON%tO z<$0g|fjsYF(p{18KOjHCSCYYfxTc9L?j}87;sD{_=v%9chhRq8vI8u=6$U%Yp5WqL zVwD)jG7qzPtq*Nv2?vB<R2Iv!m1N&b+t@OidohJ|+gh3xs<?CUsIz{3)@;#-jc#EX zE$qB<mUfs`mozpumNIVxs}D3bUXjgWM2oobxr0x?O6K{ywW5t$dsaI@i3it~NE~1> z0k)D_W=o7Ax_FcPGK2LYlV;bg4VO$Su43t7asH_KI(E(h)~k?}?V#R=Z2X{#Er;{R zgiEu6LH5TrB4esJTfDzpd{nw?iowa0NHJsYCdD)`T?Ec%Kdx>ydUg6jT>Lk-iu^pO zkR_1Sp4Y;>hna83##QV!T_nvNl#_jQV<TI!l_du5G2GNlz78Axw{{{M{Yk6)WtOZh zs9IW6wzM{^Owl$ihxIv3%VBT?%T`o|%jZ?XGBl@!(WB+HOT%T>@<abCtFB&RTPDG! z)mE<TIg1RfY~Erkr+vX-mZ51oNuNV?KkFk7`zab8J}4@r`82s$e2ZAbstZMMFN>l0 z#a4(UqYG)Pp9cN)Jf8j{0?V;#F;dkp{jaIIeL4M^s#a=?)_S{VGKcrF<E@a1yGVWg zbTaUm!YdC-#TClWkTEDlygHV}H>_XB<}`>pX~2a7>X`qZN5@~JFGRt1E0GFW09#lv zucoYQxn&Mfaj`u(IaOzLv@}P=wD}Q>Qfd8yMf0jHxFBl*O1HP@Fz|MrN@{~DHD%%B zSb4o_!O^lAJwuKXYC3gmc3!~jJg)1dB9s>#k`<gpVXTC8Zl&n?r?n-ldMm5mA^$6< z|0s4{tCxQ`VjMmF{n{`EKFWDR+i|2vh;nXRTWA$)|Bs$-)63r<HHM{zMZPhrQ*-_7 z*)!)1y5urOi|*8h%h~usii%gPZK0Cy=nX7SG_kl6_6W7qs+9!S+|Ob~KpKn42g49y z7s+Sz^G{!Ww#+{4GWx_lXXGbuzpgf`h<&Pw7FyTY=W8g~J!k~BG(Pp{o3bG2fq@UR z0aTy~Y@x~3*#3;UcHtB20xMvTtPzJ%)+HKT)7ZMTB9MjVHnY1Z<T8KBZ*Skut|1|J z7?yNf(Yi=N6*T5*kj>MF2OnO1#Ns0k58_cIvB8D-oy5vX+a>JJdJDU4jmT%?+O|7d z4E&N7U02|ftwc`Zcq>G;xx^MZx)%8vij22OX0WrNSH{u<@*mRu+*bB?t$}$Cu$$M4 zrY!cVcHk>EvrRm-S=Qa*5~XZn0NG!#{I<{8M{7#h4SIkmWdnP3O#^#TZ@B++saH0p zm3_LJcxpI|g^#6$*^g^l#HII&-Rx#vF2l9LngPk=q$IAq%S7G8vuG0Qif&=29A<Te z%oCo&Y8#k$>qoQM@)GvA7T#vfexa-O+Bsw-kF7nt&CaNsGJEbN>=9-RBuda|j7()s ztHlAdEJm_@q*1Z=q3yq8`!6D0zo?0fZy^Tzkrqo9+bV*ar$X7{*$3E%s|(pp2F><| zs{`y7LzFnCMNYJ&y!dd3F)euR1&S?cpB6k#lpnU{<v80MQz0{mH{+i?d?1^RXLT(! z7mgA#dx|W;mW4mAi##fHjoBhoput9=l8i$XcZrKVM8-=q`@w~v<i9e>;!Z7RA7~}) zS7g5*&`i%Mzr^U5JS%(A4J^L(w`l4%qqm=JUt^5b*-UYmYy);Nf@;ogV^hQIkVbH% zI9&e?TV<I|OoRMq$yWJ~AA++QiI>Vy&lZrjU)GJYbmoI0>PKA4_nb4|n7x^OzXmL5 zlAJQzQX3rlvRt(}q79kbAV1j;Ye0^kk*1})jGQD_Mc%t_vDem+F+6aR_L_b&!|E|h z^~l)6Ys=en*goQO6G$h2HpmAKU1Y4%r_^1-9%YBw#~N*OM1JD~gBMP#ynMHjl|sc| zU5UVWuS=BQG<EXGsbkox{NT7rwMM`6y3i%TplPzFR_&k?yLc1fCs*YY-pvEXkn~&G zxoz7Qu45ET&tpHXEEgF?&0<dW4O@%$&e&Q+TfMf{OMja^`nD+*!Mu&XYMDNHTd3gK zwsi}O=VVnZ3WXN1*UZEDN49OuGy0_FWi$T)YGB)($<sy_Z>FB^zR(z;Q(u2KTPby$ zG?>4e0a0IcZ78^f&2K#-f-G=AR4&ARlkL^iEK8NluG`nVdE=JmjhopM+SaW_;%odI z*>?VsBce~~B}Z#Tg^`&iL8;L<6}i;j>mq5_!eXP^FM5ig(JS?c@PB335y{medvl&~ zmj9q=WbsBOG1Z-AMON7&+EN{+Z7xe_p;q1iif@q}qFwxKlWbzABv<AyWfScuE&pY< z;W%kH_ISnGaCO*OIXKzz4_KTBF!SuKnS<#%k4v!LZ+Vs0`$0NIW$d6S^lfIa#<wqO zlh#h_>q_#~E+s5e9JsL}D|j25E6T}eU(&Ia+O{U#j(@kNbzydKb6%qud(o7lAnOqz zyWH_zb7NkRU2vE!-@2EgM_`w1cB@NloLaYS`8n%ZDEztzt*C!><LKgF4`HzZ+UjQ% z2lI+H7SS%hI>5TNZKg%PWV7L?$$CXjU;qDarq4b!I%e(^Lo|NYL`J48>Y!|1IM8vP zquI3cB+5Cjj_Jk}U;GA5@jeZc`@M0PX6n+_g%Y<CzI=6)oDqDwT*6Nbip5YIcucd_ zPZrxmyV%*xTaN!aH#|BJJ7?GRH0_($wozQD5*gIYzch*!rKm%Wn9t4-4dV87M{E-k z$*QsCt*m!bMH!3P!D>sYwy}7Tu}z+VtdtY`SM3*0?0-CQD;8VCUCvxIiH|<@XlL|R zp{%8KWz{v6tI8It;t^WzB-m2#Z_15MTT#XR3rXLjN{)y*&9m51t@TJV>FKpK4Q-8A zZoZ$k+0Eyoz>pnOVDBuJ-y|}24=!M-fu}DG?PUuOoL-w1tP?${&W5#ZI7EA2YZ#nO z&+9MC3sUZn<b?+NObc(>OsN~z?r1AA+4-ja@SSbz?G2Voq%5R8J|3_MaPZK9^=(C> zr{N-1<Coae7VD>!->!p&m3Fv_Y&-O*J#@QP^p4wcsh2~fmkj-g(Ldb~)L9QX_ivxD z`(HG*KV!pNzKrH6Tz=C1u4CsFeac|%>Gb2rR4P(8uV#tez8r8l?a`=cWb}J5`aTqJ zKV~b#D=rfiQ-9B5L_^W8(^(afgIu<%B)c@PXfyMMw}oa`oF$j7N8}9M`oE_lTk2n~ zB00pjX^7o*eTHF@q^(l+_5U5&u|HotzdF3Me!;QAsm(44M_^%A`zrt~YKtwmxe)OZ zhEoVX#j9S0?3@PHE5OdlV7>B}uodOQrQfu;#MBBFZe_lJ(U~OQFURty|IS!`dL9Be zo%u;yJ%NEnA0DU`M82bVN6ya&MPiz?uCIS$R6i;2FB-PveTo`Y<<ev0t>et(M9vr; zZnwN69jmSAl6~unh5vpEiGR@$>UONP&J13|2W{y_-$0zE@H9E}A4g#5PwD^h(0|Uv z{`~iJ0r@Iy!P3RcEZxZWV(LI%Ce9^uD63vF&ps`bW<5ly$+2{GC~O^V+NVB7l&d%o zr;d4#=Ois=)O$KL6EMJeODZatlrL3HN4mkxE$KjGoB`7z3Gc{m=GD}cRkzoToclX^ z>-Yu%W^mrSWCkB5=mnS8=3v6*xkp~<O)RE_^)7jz#T2r-686~I{37<WChdZaZz*M? z4i}fQ`mLw4l_hLWn5Azm3YD_Brs-$0lJMoDvv*HCn^l#E)=kM~X@}>q>Oz)K!dAAh z6~voM*f(*9_2To<*8JwFWOoOb<=5sFPhR)zL#$uZFm`$&>n92?yn#&?8C1x4_>0YK zsI@6=aIu62wlJS{En(wY>sWFFt7>4$`7A}0u(O+{mNIY4-n&HQE_)fjbk0ULodVXA zT3gZVQdU<k^LMzIcLyuaXPpCVP6_K<C_hWq6OGPm99zGlboQ9Rr8DkZG?~>OfF7#1 zf(5Q>D>;qUpkX#kyQp?!6=|TE#e~_4lHr$^Ot1ZF!-%0p%paywMf2}3n$cw_(TDZ* zZ6ae`)ny`B7pmJ_H+D$@5&RV`yXwwj75S`F3A@76&{oW1TK1BBZK1qSUa+}N^k5U( z@<mQ%eQ6QPC}G=Iheub`*3J$MWzQI4wy=T4hNrggA}=AXSunduZl+hsjddRT)9P0C zM?++U%BZ<Z*j2_>k#zg1GuRy$=Ce1<FuUu*z<mW3v*jk8y(tgL^lA7QNlIQ9$_mvo zAMMG{&u6J6tft{8DR$kIAge1R3BRZdu{Y|QM8Ou3dGpx=vV(c0S)t(kVWAM)y7~aI z)O=Q*&*F9*%qkL>PaR#BGk6_~Ew7cwG}z2Af9uAIyx=8lW`Jdv-$&Jm6>pwhv}ny) z%$v{Z^67ICn<<Ya>=R7WWgjRO;2*qcG{qno2lKYF_#JGO2(YA9(VsSERN=N$Lvk#x zfQz+iTP4hQv9Gl9P$<Z*UTYNSoAZiTY{O1bBo>L#lnP?zqZ>$lMYLNp*)VL=iUKBQ zcdbV5RZNtK^z412CrK@PeQV9uEzEzI%3i9Y#Aj;`H-EX8)#TqMwvhzojbkQm-X>mq zPlTw*zqK7y<g&G*iCX-4^;Sx3F+|Hg5wx1qS>Lc6oiRxsjkzlE`LLKy#UETv8wSSi zG>pMIik4m$Dwxz*P>~m^V5JyzA?qA|Jrts%e_0K&Z)QUJO6{fFx3AkWhB#3Ln=j;{ z8MY#<jGfU0bzT3>gDAGhg|3;)Izp?XX0Bb0L**~Yb||r7b-qlL)XfU!6_3uI5}bSV zo>k3xp<t+B^3+LqNt+R7zh5g#cFii-%tp1`L&{m#Rphr_{)V`;ew8TLKDKfTODSX* zl#sqJA`1#%KrP;}FuY|~?Nh68@cn9+d~%8DEi9*mEpK4)7{zT1LEJwQO`^1*_UyeY zW(3(XkyJ|(JyO#|PhO4{cu%<{ktU|+%I4<gMq0f@{(G;_d1de2Lr<kC$O!GCcJ^0^ zBoShL4>a#v_m>Z-`hB&nl>M657^^q4RR?e;=gDXFCCpQJzNo$bmf+rPQ-Y$%IuE7I zok!$P4Nb}`C|<}`9NyWuc_;O{RToXcnr%nt82$amAb))&`(}+O|Cl9;fYH12*paMj zd64Ch_e?KjIa`fs$)z*{8GBbWPTAa?7t9uZ_J_4w*?z5ro!5E<8AWws4l8XV<xZ-< zD^#{~TV8O{UUtS-*0qo=41BaRD<pbOX{5S~it?J7X9tb7mF-*`V6i1T*~ol08Ap`Q zYGSMC+1R{q+pcZU$78ERzUbAsvH2j0ynS`K7^B(oo!N6PPvs)VrnBc%OeuY@_6Yr7 z+W5-D%(Io6S|{cfWyyNG+RKi@2O4BEr{l$^S2S!qy6cTbs<y9-C>Om(7mLcqEZM`p z_FA&9(d|`ngvr*d-?jzXHg?HQmo*W?Y}i)IzB_-1=n08soD;q9xey<S08BRg&y}yi zIM;}zG3&bw6<3Sd(|VMyPZ>03dR}&M>9wV^2cNzzFT_@61b2STsxw%8fI4_Pt~LA~ z>n6`p*@6-=_6YMfY_1c%=8Af@_(0uenx2%BSAx{?#noHW24wE7siTq`*9I~!y$Q=$ zb<@5AijTqU=DZ3S(b$r<Tbo%@3wu=)fs7*NJy2Uwdp@h(x)Wyr)#WU{oci6#TIxr! z{Yi(}_Qipz?D?dI;?NY@xriP+^MbbwK7Hy_@3R#LCN0`b=2vEC&3vEzc5%7*AXqRe zB$CCY;)(0#vWJoyg0-81MeO&B+h}zqIrpw2BTur{yav~H<|UhM2wfts6TK>AWQ=K> zN~Zt!I_X)Se2L-YcY8!rUZ|*I=7in1QbeKrr|V!!fAs`d_&`YJJZa~MRyOnS8g@Zj zFfVj;OK9#odUmu9(cv<Wd`160YY`cuidLXKY*o_?dT@_CdwrE7K;FG7zj!aD{>Ha{ zKpQxDKE0Wx(o%7LAxjOj`tTK^ZtnxEOk})P3862dRh9J)3;*^b?~B?XTObaLp0u`< zh%8ppTKi?5sAB^}tMIR+)<4CU0jTvGT`hRG<}DXt(TS~ubPp|UXsj;YY#MT^4kjKJ zb&XRhDEhy@x>f8d3T<XL(ux{aBDS-tFzZ6?2Zf)k=7N%=EUx9~2o{T0u3jo|2y`?N zD*W40@~q<8EL-6pQnYEUEf|$OTHL|n3m1_MPi@ZIU9^i<&_K})wz4pEZ78%dm<4qn ztZ$+g_6X6!&N{$4i*Tqc#A*XjKbuq@5}WIarie>$WSv4|7&~wpExhASol{$o7aB2c z-SmOAwROQ@Q8ud(h5PD)e+q75PiZZ?2fdHr!)i-J>Fi*3@cdCZr{5nenn(W2>hr5+ zuy-#ITbqNUzrMZkAp5odaH-M9S1Nvs11M8mi%$vJKdXfGE<gla-!_X^*=2sCk1k8I zPpd>ZyUt%iARy8<v#V$$SZeg9C*M|y1FW#TL=>#kEN)a~|GR`Ha>q9E71|-nf4s1| zXI7J;G*;9T(U}dE+_eH0_O4q5f|PoE1s2Q4+(hVBwCrV{kWZ0y_Zlp}RbstP5QVPy zXz3LG*&*gLGWBIc<|B5vN?cn+-w^S<`a*n1i9UUSJL>W*Cq1{Rv6yvlVDrPXHH#c# zHF>Tc%fTOnpsB}tzo8!AGx<m~5WcY<a(ygB5+!bsiO&S_1J0W23uU53Vm$a<gt2tm z_%J(n2m8iopw*+0J-GJpqQQ#}&So!a4PuTIlm<{&RJ4~pwkDrFuD2~`>-3hRvxCG$ zet+Fd+eERL!B!RSdM~f2ZuIsX@#x60i>_P85?a~sRvY;`+iwWTTL-oY|D3_>g*7xU zdJ9WwV~eThzpQR!dkk^-Ady9pI)%+?W&d8&cI&7dR#n21TiD`!<`1yn>m@Mv>uBAQ zLY5sCq1miwp^UR6;0_XS9YytgqBJZnz`oRW9NjKLA5RHwH~ObRr0k6c*|PAW=Aze( z!D%d9&SDE$IG-goh@Kk<vrpFq*fshNws<RRSSx#{^*^PBRpqnf0J}jiA!o{M6&XY! zh>EW)95#*BHi#9MhVn$OI#ID%t_3w)H`Xp^z5_w_U<_Vswa~cVsSnWSErRT_!VaJ{ zGFo2A4%HuKTWBnY>RZGB(18p#zJc`>Nkug~MGpB|fSp37RC#Mv?UZdaPmeEYZEO@h ze;1^#9`OZ=#F3g{>9xU9mP|Gk%6o4oixX|4!a5S9DZ8BgX)P&auNGi0xJ5${ZR{!+ z`Rno;kF2CN-t@sLZeIfCa=;fpN{PFch=!w-e8PHfhyBaI9c;r&5@XCL(wH$gxpZeO zdpf>>Vj}e=3PSAG<xT9Z_<Z?qoG1*+rz^vav@<CBvaaZrW@`7HG7<h_8nNZWA?(0n z8Y;03IcF>DmH%fGZ^jX(p4J=Kiv06Xz+>&)>g798+SAE@YV)mBn4K49{x(rWf_|DN z0^4gT%(h-&y|6BKJs~-H$z^k9%^92x_j7??nrO;;f9qoNk#Mu_=*1(yEa-7zf9E-q zKD=Pz^LMb`0akioS{Cb5P7>Z#z5{Dwr<RfOn`J*pNxBDI)=OKqT)rdL*>X$71i00u zWuiqST{dxdD65Km?V5}5Ugb-6prE$4c6I0i(Q9(S1ydhjk83TjO&UW5uD=kqJ~gr2 zU3VdZ_-CeQ+8ttFX!%72#iK)KpE@pkG0{z0T*wa^*sFS5^Cx$)@75fcT*o}+qw8*9 z58x{Xsm36kogcWpEYw(?Es|*~!@`AUeOdPk`<vD(KB^c?+uEH|f>WrUmo6+p0FZrN zEBk!dGzRKBza<kN&*EDaO|IBDxWG23CRZ>kyTa(3GI9osX=33W*AuVCvuvpb=E4lH z8pOm4TQF8r9H=O(nDPJ_PNOl<Csp&CwK7&cej(!6<Fez&Wa&SfGCb{;Qaovj{7`6g zw(Oe;NyaW=J9Jt#x3HtDw-yjxTU7eest`M*w-$_^Gq|WWNV9Yn3_7zxh6GHyoAz## zM8*vxh7Q2q<nvXSf}1(5h6P2mqD~TF8sPsS?oHsMtj>k;cjkm}*pW?9KaKkWnJfqb z$p8TYWF{L~$OP24lVoNxkW9kNJ6RACoq$?z)qv}DNuqWAH>~28fLiO-fY$4E3E0+J zZ9r?iwGC>mw)K0S=bU$$OuX&A-~Ijm{79bjK4*W<bDr&-_YFAPxaFMbyyR{ch#^^i zvjvx;XUw2_m!eDYF`6ft%_modmG;RQlNS={Vc;|WiG8<CV|Uw8t{&bp4E1-8flbe+ z^XWf1#9nUeWN+Fu_A_M=0|;Y1+>^1WU=fskK8%X`-zE)1x<8E97+;zcyNPYdeuJ)< z@%?-|3xV?$sNMC&np*50?5(A4(E5L%u}tOJ_6uh?^PD^#`aHOmr|coy0onx53XE^? z(;N7}sVj@vCI`F7#crLTfzbIsF;?wh|A#w{?T3y(^5Y=7X1i{OhY$SVO4->LXYy%w z#|)m9m!B1QZ`VFHxtIBR*#W!~GZl5-i}fzFpI?}UEA~Qtc0MRLlufTp^Rt%N%|TEK z*$*FsYUsvL2ZOUUcb*#_pP<L@&fuNwFNy~cH~BdlonOy}#>0I~i*4s$^snau=GS<@ znaZatx)F`qP*~^BHJ@U)fL{1Nd=S?Du8r8_r!yUtMmpX)i%;7HCdGl~1N`WB&eUsm zK%xf|d@Toa4Z4~<_<%EY1AlV2ud@AS7{+g_V^HzIvvJ5DRA*D#-ea?I=bk(G&V8&j z27VH<>AzRwIvzY5wd?EE$aYVR#g#wSl1+Gft_^UfHuCI1baw@MjknB1p89$t&i1Po zwCsO-79WDa_6K`$v0$)lKB#WSKBt-NoH@Y3-gu6E+|~!BUft+V`w5^Qo`DWxMcPI% z;N5w^^t9A3Z;GAxiCp$OXV@>WvAJEp=c#V@x+VM~V2^b>kXH(cXL&4{Z#>3^l-^^| z?oT&nS7N*WJ~IYS9UF04-%<Mdjkr-i*@Boy&*IvRfcrRzitt}&Va~fXxMF{r4c^m| zb?Foy>i|;#(qhjfjY($P!LY?yCv#LXhh`v&Ua!Fx`_AH>H$CS}eH1XyA%>Xw_s|;q z$i}DL^sX}%a`x1qeSG_wKu(s?`4!IZIX1aZcvpNo{XVzl3${}1%e8~->2~ho^LT3h zx+P$X#b9%5>}Z?k3)W*Bc2{%<*bjOIU0&eF*P*LsyFpOJmCS#!6K`(+8nmG2P0&Ou zccM8kU1RkQ@bQK^nBV0*QoEj=Zcn$dU?)3$n2zUqY`vcR&;!oOtjc+FHvXIaf|)Eb zfadYUY&0+?I-Y_lTs6#>&M9!FrlHCBVH7FXJwBV#c=zr>uv~T?;b~b*SZfU0e0qX? zuFdmC|5ZzY=<hb*5$qFFhtt`X*fs3^F<qc%!O-!rNv<>=cnF?A9|Ga({V-a-hX<h2 zOF`fz8+(41pB@~Pj#1iA={|NwZyLBS(*XB!kS?Ii8m4qFrTf4VJHco13%B$2d(zl! zAZt3c{Jd!SC2IM3YWbyEy_D7{-S<a$cu|ykkxIQtrCyxXM`=x@zvQ*lUY{uW3YF}m zlCR7fq_jrqK2gX;!_sJoJewZ4_8B}L5)Hge4IH8dUY<2TX^ql-qL7Q`tqI~}(*qE0 z+z^f8S<%P<HS#PqqNg=V_lZI-8oVZEC>}&3sDGXojU1(lPg5gDXL%^CQ5uLk%r5Do z9uJDbuT$ZJRQPo&e2`Y?b?Wh;=;USU@lbG((p)^y9A2WF=YvC(=Hh{JUZ<Rc!2wEh z?F99DK=k^?ENGXWJmRU7o(9DOl*Q@nqq=X>0Qb=V-=qQVqXE821KcMD_$GCxSHK2l zmZNytLzuUyi9OWBThzoJBFJ0R#2(SaThzoJ8pB&+CVRw8UZI>m%6UcP^og9Kl=C#@ z92GfFi<|+<d6sepaEWGtr<{V9_M7~CSsNQayz>A*uOh7ueAZ=r3yF{My(CU;?5kQB z5T$ND-6KWpSG9eFvjc9xz-1da+(;7XGLYGY`@3Nnj|a65AGG%2tiE-X-8{PQS8Fza z1v4F7EUl8|a@?1n)PmVo0flY{llEwnJ1f8<T9iH0-r4=DBlt9#ryOm<+ct|e_DxM6 z_wSv<_pixEDcOeW@wUwc>D_H8KR&g&STM%Ug&9xk1QWCKd3IZSC(l2^n--_DI!83s z4fbzeJ1)qpAR%Y<@|E5F9ro1II{5VJrHk%_mhPffKc!ahqBko(wGHqlaJ&DmAh*TZ z2brgjIe0H$-jT}JGq)$zNv(FtR_B2${5ZP^WL3b$W;+6G2FD0=7Pu?e=C*8j_|#4p zOk63DUVxpr`dDXs>`0y%po^OFK>9hEcCbGxy?hB2&*V73!d~{H_89xUGR(p}#zUxt zw;^*qY9C}>?chY6P&x^TL7xG;-C?@{W7}P98u`HY(+ec8V!Rqv(Y9=QaumV(eK0$g zv52q8UjxhYSg^B)SK8B01N^_74)V5>pT7X`L$#>QdQQjP^qX3TNT>0NN6;w43(9>j zT)~Fg2BSTB?kv`f{QhNaHZ|fnh^SdH_N~G_^=vQL?)^LXRjHL}>=_&Qk9-#!XycB8 zSJ`Y2-`k9`y5Q9o_`l;-U{&^~mSLdmIG)nPnn41^z(3;WiSvk(^tnxJ23>!~Q_&<e zmy&Yu7no!SFgTI441ZmQzl!h|hDejLj0}pf;C;U&H=FF27cWt#e;Y(s2#hOj`*yzT z08gt(+l0Bn<N?fnKZwf<>h1IxyRp45@5FI%O%H(K8(Y=}1imGRy6;=uk(s@$(8V(S z{2boID_KGB;d;KFuRqLZ@a~T7+<D;0e(*Q#m(S#Bz!KV=f=BY)`MiHWKXl;ODd;pR z&LWC&Ms_r7*t~&L-NGfI+oq)6H{&mI+VBRcjdCfn%)V<I0_)ke9BAT>b~i6t3YN+( zn|sN}hB5wOvbF;-w{6Dw{huZ~c$6Kqfkho_=N@)W>=arCui%AG<R%S#TK0_s@NaFx z7CD=Dy%4Qn2iw6>W$SqMx+Oi%L;P41n!o=_7T(F3Xg%Ibw(7?-vk9Lq4WavH*)wf) z%k+L*7rRCaMz?gc$08cna(FHmwuOsL^aT5}oM{y`$o0RDVnYv&=dPuE*|Cb{xq#bG zmd5V^M{yJnnh0OC@vev1xnM*EvX*2y`6+$@+iugS+pBxo+sYs;2KaZ6w2P}_F3^{4 zeM=WD<>v<%1!~V(vS{hfefIe?<{olpIghKnkR4Ha*|Y5qHlSoXK|YP|T(TIQw=8Ej z#moK>#cgrt_#yUKJ6@Z$ao4e<9c-EhjWvxzEH3t2g~vAR>fjeu-p<Ai2Jo2duiK#X zc|dH{!_ITu?#u$OoS)az!zRX#><MIb*e{sP?y~We-K>Q7u|+)l*iq&t;_pe;l0_Iq zBi@KKtL*bO`vRNO=RDWRhHPNL!N7j1A;or&v!9PoZ#UsJs}INZ0m+B%`2#R7XpEzK zV3O<xTQ8j%u{nLmmds_d`;IlO3&7UvWlxMB=AN&4##XjvnEfYgzT2bO00-FA-rL-_ z*XCtq<l$OH9c)7OlEu5CyV)r%yE`u}i~VJM7YHnkpATJss$$por63QSP;pRQDIlP> z3?5@&hItCFXRUrdBZsv*@(Y?+hM%3$$7&sH3T^vm+Ix8cProC$r)hDMef}Bj?nxT^ zUDyxMFCtFw_GhK}=Dx%ZN4nV0Cb|G-^Sf_lJ?$=b&!mAgH~Szw%-&b{5Sx<CHoMpq z*X^v4OiDhBwf2GL8D@WK%Vz&#b1j2}gWU$|WgINsWH36z_IWlu*B-|^tCq3#j;mI^ z*1eZs^YLr>uxa~Pnv1>A4lUz}Rg8`IA7fEI_&aA_+R@<kZr|>mdCv5?@Ux_$V8`nG zKvwNZSY006@8kjSoQwNGGMwCVB-IT|>|hgz`3G$F0NVn5F-%vj5AWfjJ!~R4^slow zfP?I*Gn~!<d$Qeibm=1KkT-8<U%<|s(06JN>(Kn{y9wEAmM%_nvg@>LUfax8^|1@l zOK)1Y1boddKJ&<4wrk>`n+KbmtS1s<o=(=iZGbx?OBO%BKEN)|W-|xa3M3WpOm)^e zv)o^-OAmdy`>Tb8r`XkaA$?XXbKx%*7PcV&@n5&{UF*^_drqaMrSl^8M~tMUymku) zTCVLv@A<VPARUG!c3+#l8=l`y!sFI`*CG?VndIP=pV(7p^6tDSY^&=kcHpavz+n?y zf~D9@KL_X7e({VO_uA*2euQo4Jwz(N0l&d}?n!bLu=lUchD0{|4MEp~{5)S8ue{C8 z4qgjN55$^Z10Q-CyDY}0$JnaQQ&AYfP1kZ%{9m^qXMQ|^ySmvK8XImN<eL4m8EfcG zT8(~tj<X5=mW5m9=FfH0oGTwi@Cp7}rAP<Mp4^KE;*;^$^r2)nxi=b(_OQ*pY>H<) zp9R=tc9nSPhg}TrG$jsfb&)s(1B&Um<6EgvRAxNJG*QQ|*SR)ZX1$S=Epbn7^+?>$ znI>@u<J)=7$ar?E-oSu?duFTX<+}Dhg5N2kGXC0yzwop%*@wTJMh3oAoZMqPvTxg{ z5&QYm_nta-eKal4ofqZj0d-$V(vC&Je!Ar>u=j>*dLfbBRD76M=IuVg{!jyZ?B26H zAUTF=v>?BPcZ2eeM0p{19y|8NGYZnSi>D-~?OL~FZu&g?k~2Ya+vnS=Zr~S!4TNzj zJNtYaA7n>CJ$2hxPG1bXJB`y?(W?|mAmJB*=@dPn7$UPbnf=f{+`|5{O=CZ@!~O>| zD>a*yBKK_Heti25b}`tNcn!r-%dP~i_z7qgzGO}QcD8zmy{Y(5u%EX9XAiS4+lC5O zH}h2XihY2kXWw*SVd3S=Sjf*V7+~vT*R#)+7+c-T7HMpQi+u=o&A&u@Z{Ky24RT<~ zsa?Fl*})!c&OUOSO^toL0eoEtTkT*kDuey(#%+VU?g1j^N3$w<#_Hz#*vE>Cf%J>` zfipMq02m1;k5r(`{YWdvD9g_CxPMKwiM`{~*iX(x2LJpTWbl*8Tsy+2pJb>hw{$u0 zbat~BZ1{%f_@O`SU@bhxO3>@Sz{Rfiurr2ua|ip`xS<Fer@ga%mHpB)j<b83z<z%n z_S{>b7JhHz(-yW|UWjkoLoRP(0q)sR_vLY(!5Z*A;Jd;0n8~x9H}D-D>=Rqx&XaSS zI#Q#XdcwO-+`w!1^7Er0`kd^hD0chlc&;sAEgE0RTC%t9U;~@&m)Y27w%8GVeg``` zo}$l;y{*Mg0x8(@c6$c+d_bv#U>Uvv4Acwo6zphx|2LaG0BSd2cb=9$_vd)`-kyF2 zm_R(EpO)VxIpX@Wd2CH|59)6s5s=Pf&};ixp3<G=K6UZ{&sftO0Ry)S40P!AL{D03 zl!b<OzQ&h)42rZDc)@Xk4Yu{NyUyg<9fIxHb2TuQX@l(9iNkDXGbq+Sfi}6Vxfcc- zV}FZ4=C2qGbg-?H9clx5K4u>-D0FYjT!jZWtr|bp{1p3LTOYfvZGhd&y1<YCdzo5( zt&NTZ8Je%`PlfIuvn{T=*Jx&a$q(@DAbC#0s<Eh+56jxMgH0YzOLfvFsTZdWGwB^A zPIm|B7QubRRGoX0kM5uVEb974+cC=i4)F9%?ch>?j}_~OnLp7sL_5--oS%*{bg?~? zf5g7A!7QI>gP9#l?&I#P!iBu>-aXri9CQqc*9>e;AcS}D=^x{p<gd17XGNAAq2OVE zvZH+mZ_eVoqHJ}Ho#|qJ7dz9>{0?>|S#HUWWWGF&Jv5yURdma9rc^p-dWqfBU{8fH z_p)&=)*Qq0lkxT|Y^=$}uimk`KYwx4o&uoCZnim_O>tzo+2uoQEqC+;nria-5<dMD zKhHjQ)?e}$yE}I8-@SYL9^SmS!-qQJRBPu+bOn+JS?9Jv<{otK1KSM*)ZXblJ1vbp zTi3OCJLp5ew7|r_we^D3YT_4EW<^=LpYI7c4;6mFv|hFfw)&1XAkYu(19s=^^{ja? zKP|c*cH$MVd<<;wCVu|@eztj#P3hX3=j6xvoqWk2e0~pv+UIngZnozOwgG$(cb0wL z^i%A-;X~{{w{rAFe?D=j6C>&%gg@IfT-$BG{4~JcKSN6mIGv0l#y{UgB_Es-bLTnT z$M+v;KAaZ_fE0<|2R=d<)4G=M^nxS#JTri&O?Zppmz#PwvWZ>%J?9>1U{8DJu7Lf* z({LLq!#6=&-%bayIKkhr2{vwsm1*pbNEgpOTwQQeYhxy=1mUD)Rld*urgY{*8+)5E zTJa9YU`cOtHl?%e7oEXQw(&kU`_SfKPquM9kAJRZh@FlDer9YeEia=7Ds;DCh2M_N zUTl5fvrdBFI8fmZupfd<0-p!ui5oU%A4_$yQV)2HwFB&Bkim!AJpu62TzGE@$3@3! zzN?&jD%|46(P8(dGPa=;&4db1;5BwpjBS7_P(9nlay=*6A`s+&ICFrV<6_kwR;#i3 zG3Ex;^Z|CBi~YdUifvLX-<Gw*$xg>BN5d?`#foqsjRWjo+Cf<T21e6^qj^{9WaIHZ zCtp^~ws=?}WG;-cHJ-rTEIr1Gp-8Y3e6SenYxmT;*;&2pQn1)C35LZLF_w=d=f+qW zl&tGyOJghtGabEbvWta1EC*!F&!PI0RK2N}y#o)u`ok~b;gNPv5UfwUzckIoLLR;l z9rlf$$Jv=Ne3!Simz@^_2L)=J)64DygZEK9q;j+Aekctq)zR#!v}c~N@x!H0!ixMI zmD)R#I=d^_;l@sObjn~JIi&e_yz{&wt_1M+=t3dMqV^qZyEe?bUR%wh>2vd07U<k@ zeA+MH2ZOety!izCw`+S@&lvlaHa0s3DrP9H!pZ(a@f6H)?qb<~_V29@wm-QSPhuhM zVo$?P1^;GdjBSds(_;^_dthZh0b^0XY<Bm!Y&ZL~3CMESI1eNo^?U~V(YW49cB)BZ zw~TYJFPnzg&EvSElKrI#6wHlK>@Uzji=R#GWwCL6mEd#2GChJ<?|<9o+I@ZCa0mOi zjZf=l`|Lvx?M_W&mv*szZC(9*I{SA84>QnZ^l#|sxRFiZ)1o_(31aAKcd{TK;-9n~ zWqWZ1Z^HQY!3f@J0vhgte&2$ApK3>W11`go#p!I8pTES8gQkax^4Ot6tbq5v0Zvxe zH|$ejrDre#2Fp9-hOVD$@4|Q5kF(FTzG$kGo#h9k8En$lvTM*0r*}3#JPo5Tvuf9{ zaa~za@Bz}6u=^(fafUPxdtictozQ>;_f7CX!hyG#9=JBf{*VNte_@OU^yTN*q;DwC zV3P*<&KFpzgQa@dG(Q{M3MHAwe!CSW@&N0F1bA_*&)u;&pZ6T(&4+%@=5?~?TETY6 zoCQV%UX^*Ht(PA;z-|TiZ8(D7R~M)kp|LxY+1*<Q*ngtNynQRUpDdf*0E+dSh=<)c z(ZRmOSGIOc^gzPFB93nMuuV4X2ghl5Yd5eAP-javJ2GZS!Wh9f#&kW8F9%QHK>s_& z^Xy7+=6T<K*4-B4ce*Pod0@X=X!J8Yd}cQrQaZcYQ#OsYbh2C8huGc8+Mh3*$EG>{ z%wp{^5Z3hgvEn((o(7ZTwXq-~Ck^4}P(WzyuftgMpQrOd`z2tJc&=cdwha_O#$ELo zME-1=*6|bPk*C<?F7^TVQM4jp?{~4slYknF(U+;rVt0=nW_Pw@SSA82IBgJ0{g_Sa zba&jE&(qhX*Kw77cCCxuk>rvv8z4y8GtrHFjTbN%tjYohbGec@yCp;)HJFCBE$+Mm zb~bl7@ybGHBL*wKor20^M<a^jzf6JtUWMiS<F%lTI+Hx?&6eJ7_HW7B$?fcgEdy)- zm;y9X3L9n~@Pbp=FSdYDKBhB&@%EEV?A>bz*(4Zt9=mN!FFUaX?`F<|wd{(rPhgw8 zx4$2HdZbQEi$GuRPmggo5B#{G+}#o7JNeO$`bsyLi$@tO)S)2v&t;c`kGjsoE_1#6 z9iItRkF*V7boss+oqN}VaS&zT^P`i;3Su--jIRD<+K~OCNzEsDS>7|S=ngicYsaF3 z%>_K4XYd7X9|)Iiy=+kN9Aj_U@aEYGHgN4QUsA(&fRS*)Oyq=Phj@2I+Ka3yR#48) z>SK>ggh^Gh*CSjz4i)fq8#hnG;MwkWp29sxQV%=x+^0YYT(^zx&)e9IjQ4%9WSu+8 z16gVOV)o%gt&;s1KdSUTaPg0Ui|ZWhZ(IHB1|TI+eP4GbYXmPI+Xcb?iss=i(Dz+` z!HexTZ!Ruf+B#=h<1*OS!&`7Y?;V4ImXljtl-4MX5#z7M@PRG-LT6U=^|EE(r8V>E zSxay3Ki1#RqZ{v7wJf~@gAadfBRlw=EqJgA{0{Y=rE3gBTVjyz9pj>0dJF&8imNbs zd44n7q7{KP<8l|YL|3PQI0g;{wo@DtNNDM&_=fZ~yXNKx`K+ByJv<%n?Cu-W$NFtu z?`5Ukch4e_OKcCAyKmcE_)hNnXm^xdi2eU`3m?3bJ;h>2f8~Zszk>WjpfP_8UfZq~ z7aJHKW3NUX?1Qlyd*2=dyq|qQA4Q0yvD+sBuY4W`HrYAJ0|^J~oCIS1R2WS0{^&6K zvpu_TVP?<b^^132AMMDa{}HGC(pj*+fsEZ*;GUe|w>AHeS8hMG{S-Pet1*IlUn|;R zk-&XyFB_(b46qX|T{q&Gx7#{Tfrbik+*|i-#Y4wf(m)44zaNAd&tlz4UGCk%-NB9y zXz0*Z+*L0#yj{@0HM{#ng|qgj(Rw^`{R;ewpS1VVZ41U8-HMC)3o7{V)`2J<xNic? zF1w$-V(aS<;9U+X^BXGDy)`>85IrFZ^@AWj)&}<Q&F*`_sPAPD+O-Zav+#n$_01@E z9v(BuN(b<)sCGB|XuJl519to}Y`+}*m}rb0QTkHZgW!bx-9E64P3qdq&)W-AbZk!p zlL5T3hhWR|{yiLZ^Fs_nzTZUXGWZP>v*{t5(%j$7^WCYy9rlZ7@JhA?1jO?o=74Q( zl3oOR-8QsjalpyDpWMx6_0dgK2kzsR>>YXT!+gfxKp@m{{jsBb7m9Xve%}}CmejJ- zx_nF7m)l@F@3RdaHW=!4V5p~nVO|4<Vqe&JAJ6YuyyT&(Wjq7sUc@~}=@)EZD{$8l zz`WPYQ##n@PImp+!6;<?4VditF<p;iENd$rDt@T&F8hVk`9qJfEAZrrd%{g@HR$mv zz+}@k9%kbP!1)|tkAPqIZIZ`+!D(zdO6r5#;P*|XC;KbeYX4R?Z;<`ECH6Jj;xFbK zYQNaUkFXis@!*>6={Eww{)5h<_Szht{498UlO7M+@Ph%<ck@6L|2y-+FZq=Mns_{P z-{ksX0U1@UIT>_y057(^r|9tyTXNG^{i)6@=Z4h<^-mXWXA=ic9XSAQ`)-}?Gd%o4 zl1wYb-J;&)BlvZw=h;~<=F4U&4m@Q$y>k~oogY6|{bRl}0-9-WyY|K0C3Q{x`~oPf z@fq~ljUFE0^P)~x21W|VfTN0sT^(bY!}g1(zv?{Bov%9QQBO}{^m$fl8qWoT+{6B= zXsiJQ;6y%PzhEkr$VJNCh>kB`&bHu{A%C&`lG9;3?pl`)g!#=j47=~O+b;u)bjITJ zKqd2bv2$ZM;<G%=i@R@!&Bar8qz5)HYi6yUC*dbl;S3(W+1<Rz8QIHkxS;^Q3{%yW zvD(QdgWuS>n=fM<ve`u*Fn4&$jVkY1oW6bTk_@z&Xp8-k0n3JZ!6eIbf(6Z|4ZG6{ zu3i*q>S)>-h4DOxyTMfi))A{4y7`mbd4U~#X=RoZEyyMpnftCZa5yqqHt$P0b$!S6 z`RC#xR|=0_@7{h6Xr&au>JMEh_DiQ<@BZQ(_K~eCr5`+8ci=eq_DA#5oLlX7#b#Tb zjBfy*{Xc&L@E^X^7yt63<pp8!@;Sau?l3?1G}_C2k+_d$j{1(I<;6(RdMeb2h;}8S z5kDAZ>B*7sVJXYEpc22^wd}<)oP9gV#{K-lsyoj91a=NadY%dM&On8epX)^VIVpC? z`2eci_t-_i7k+jQs<{)Japmuu?4mRZ{RbxZeF2q!yBYUp&t#6bhJHh(dM1l^+VHm> zZ`ISQT;nimG6{c8v0skv=V<~=8%zSz<?YQVhYwG-&$IChF#-rX>Wdkj>~UKsJKpBs z$sV(H;uc`zI^Fy{{r~xHejy~1lGr!vaZEQ|gy+p)ug4+XdJ)*2__>u6l=T2*{g$$R z3|SXoh;9;yu*-&7g^Oi44jn(v&p!^6_<JR%`WNH5+Hj@6GPMI9Z@E~=kr>DZcB(Q) zC^BXyCUg316L-<vE~2?nglbwWncw*(TL@ygYzRLj_b8j29qDIpC)wvvC@Y!Xfx>`u z(r|J=n))m~c{mwN{Gou4pO@vN;B*pu#WO_r4Ip(1P>52R-^k21GW|CMFmCy4WpF>6 zjAytnRnS$SOL296S}_=ahnFuMqP}ru>@j0`G;?|4r@($<r+~z5<v3{=z$IW(wc~k4 zPbFR5xWtcdK!R^Hf3V|b?(FaGPng@G4)%8+b~qWQcLtu#+1aa`yYMRt{gb;!8_$3_ zo=e1dh9pU&>}n7&+u74+fZQWGxrr1EEMvUb^g9s6?0p6ctaljmb36wgV2#;qs*5%H z+0NM>H+y#*y_aUk?;p_x;$#P%3nbwRJ0wwWxmY3rhqV0qa*%!(_`f*DhOXs)>OLS> z;#*uMcJn1XMMtwQJvgGBmw*c^3;n^v(Gb1+641sv?h}DKaWU@`^I@&MBNN{QdehkN z&KP8U_$9Pcf!MB{6@eFijZ<WIoWWzz%*jfQ0~nZW|A8^}9e6VL*VBh#mk1jDbUkc1 z7R5dB+sS-rCkqdy`O=O9tFisG3GcqtzRVV=h=S=2T4_%e*AkYqf46MxKp1O$bGdy1 zF6d3={t73NNZgr@nJcQ(^`>&2u3ulS(-o>wC0zE2RB7~ezo4e)h5lcR!d?A0vg(0n z4zu%O+{vepR-hk7_q#HUx``2KhHy0BmT?Tn?VkgN9=%MCO2n>w^u6!V|F<;7KYrz0 zY5M>7OBT!C8Y8}B!LQoR`}4OLpRwRWqkqLBm+14__tNJd&iubcz!9JF{D1t`0AN*L zi<Y1#i4boCAr{(r3chggI(>8CV0(5t8;^H|UsO=cEu(w?baq1DWV0vZjT3v>0=8w? zy?^0Vv>#gNJ7Wh$n!bUyQlwE)um#C|$qNM`-%yZ{4gWig7XPt~1XeOWq9Na}{|!#| zV%zcKI3Ya4X33spHrvl?Q^Z#TC$oS?VD^A`N)b<vxTkEqHu8fMmg2E982?F{(aZlk zGy2C{$1&m~n*aRgH4Nr3zd{iIB)_q->>VJ}-Z8e%ShmLQ0eAGc(no8zm1cVNKiUL1 z#891TG)yA|gw^CTJB@$Rzx#wkcwey%xp8?e?h8==gVcZIe@^K*`!a!WR>6{Bh~lXB zy(6SX3j3*oS3mp&SGYL%&I(CuJGg)`whM}6rLkMvJCCtC`l$9!cDB~By@O4SU3K}g zz*q2#jq~G|5EgBqncbU&GduQ=DEq%AUgFH^L|guQz9aR|S?8mf<h1+V1?s)6*jT26 z6*~BW{6ZFX6>qP-^2Q}=3ffpJSW>atd)cLqy;;uGxnRd=wY#J2GzYt5>%azQRQzjZ zoBNof?@su4*Dj_G(-%Qm3B8KQW_2B<SKB=Mg(B2-?*sU$YD~g1>AJV8T{Cc9t<ST` z-0^4l$EFOkOFLWW(3I}Y=l`B99fZZY`fB_b>uFuAWMDlny76W@PI*JYSK;RHl-p3+ z%}ORq_;fx<cJXZPNDk&Xm+s8#{xOZGkABm^*hBb>lbc?SzcMn!hsId%wqfd;tnI^X zgU(cpeeFvcV2^AYVyRtDw${bc#I3--WIi+1$?j?At|iVww#Aj7xo{&pqtl%g_{ut* zKKkG%4u@3_F2c7ZST+9oAz#8zr!jHE{Cl$v<J5a?UF=pn7(wH>r-L<gb+AyEn{Ff~ zi+giU2F9R{NxsQ>eQnzHwNCa}`%oe>1zh_8_atUK*T%E6mR966;`<fs7W}oA&$x5M zi0-BleF7tT(QZHA)_v;8sS|8q+rZsa4lQVV9}=sht&4~S2+sa$BU73_R56+CxM}p7 z^GtF6m&~rW3p!KP*j7u`zcEpDn5yFUDyG@fu+~iM>r6zSnauue8+{6cCsX6&EdAIo z7KM}9)AnJs$n1E6ix5xh?YP|b40i5704D+uv)HTK#6rQO^_9ZU+5UMO-5%a<=Y9R` znRfCs|D%n9Q9uoNxTlQ@9JF;EMt(gLk2;CTrr`X<{hsOUt84Mjs*MfW>{&K84aYcz z1qNj9{x(jAtj&I<?Rh8Vf$A4|Fn|I3l^~0*A?ftQ|6K0=b27}3PIdH+|Nnt$D8AA! zrFG{=Aa8crZPzZXOigR54};V1$Xb$y-;o)o(aV^P*-^HyO`8$D!*<f?%ZPqr%P&~B z;TN{;1<plR-C^Tk2Dw%Q*k*q;fU>8_?MC2Sg7-~lcy4gz7esra%~xqZz2N{)=gSo| zDCmj_y^o3J_E;D3(kX>3sN`S0H|H3BPsGLo<Wz&ynMNEE*6f#0X^pZohsA{n{OVnf zB{`$x2KaBw*AcDOq$n0k{<9@zE$Qw^V;2u<#YO3?HQU_*6KUZKSS^VocILqQO^ery z?@<uXC-H&g{J5u%{o(`6eaS2cI}kg;$l-1tV5byt@o#O<X2Xi(S)S%*ci=79mz2&2 z%@*wEPfPB=aAQ(3?HNIsJ|c|#`aJmB<#;D}a@WK0J>ye9RqY$SCX8t&_~r4v?O;>8 z9?80%-tT5T?Vzt;RJaz%qif$J6GTh&E14C<*d%;0w4;K}77+sS-=OJf_6u$FVjipS zdVMD=9eVKL#g!e@?A$&)lcxR6ml386ywh{=>UY<>tcs)yn=V{P=9iz~woD?KdF<&n zK^2#Q2ETQ@{elEEl+Nb<?QBX{UX-V?r`m@r+0T>#c6WOh4*=o{jqpbm?#ll2j)KBD zL0;_MxqUHfakwk#3^VXJZ@C8J#FJufK8yMK*jbJ%@m?!WIlO~swDJpJM^xhVk3qI6 zo6U5v&>)-U*~W9O%sFcw&(wI%WjVp%#yJ~!o!)YQTCTLVybRx>Jj+pvii4+oIj11V zcibu3-U)5@#kYMmwoM<}Q`M-tIqI!ZH6^MA>s0)xKmL^rwWdl9`I_Y)%uw-bvuZG+ zHiv_nx2nzuVnD6dg7pd-FDM<1@3Ub}Roy1Ui)2IfrU<oI4@R>Z1b5J@HH1}v*ymHQ zIbT@O!roA%&a3$pHLpmGc$<8xFI1!V9Sqg@TGYBAv_|%hqN;%)4p>#gKDDkP6i~4@ zKtPFl98_btp}tX5Ru`71tjNenneVv5k)D#7p0OZ(LHeSU)Osx%@;L*(kS`pphDUF> zy4HyzG$l2Vl3J9RlIo9W-s(-M(2nM-hS8!w2>sCTXv}JrH{vsAMT5hs;HYrM_|db7 zN?*Q&Y1ND}{}4EaI-w(aLNf_K9rzm>eW3+cC@T0I!B8AQd=Z*8WJSYjbwgdW9`YOO zfFuDTt*X}enuth^UaeNazVVMXguV5~8jC;BggpWYHo-aoIYW_X71W7js&zi2!-lA) zHu%+gUwuQk6>{bJ%Hgic%g=?9^$kt5;?ZD@5)DOyfsn5z1$`w%hG8&@pL}caJ-9}_ zZ9z_)djoM9Hjh!{U`TE95@D54gQof#>hv1)%}^X;YXrQpIyFKpfHMWHR&CT$mp6zy zf@{LW&OR8Ox4POFiRi?_@8&7qP(w&Xr%vyK>}$2wSJwz-svE*JYQ$FutPpGnAw|jh zR#nB1TrY<Wl)#l&#j0XswBn;Iy#)u2){}b%t=2cx_*7#A@h#I+qZTIh8&aBl;VK}d z+K6PxkV~c3_`R}iIb%sFvAPk(UxVyqEfBFj7+u43;jyX}y7$%95TW#_5tR>yf(Gjb zU=lP}C{FW0ZUbWBo>E9^2rfmQsSarit}wfy?+ki@rcKBb$fo$+L0EmipLlWPLcmJZ zH-t>;Qg^^xAPkg-Mqrp4#T(hAH3zGGN-zSgwJNa3=u?JBD1V(d5Xm$rEY{l~uCbw^ ze@PciiHQn1MI0nQ0<5UfP&DGJ$%Ls%`KgOaujZ`-uTBfsM1ixyf$F$@tEdfiHL#of z3EV~>32rbpU8ErlTNWE=f<A(w24Zm%Odt+6srY?dKmeJM|5NA}G-HubaWXU*&snf^ zevpzThv8(22E;TGe8w+T3&~Fs14bZ(L!-AQLx4;H<_U0x0P__!g0(HIRpUbeilU<h zKT!=5t=bDK4Gl-@jD3yU9tQ@`h8Dt6A=P1-L!ezYSyv-seXwv92}dFoQcX~&rXgBI zvIQ{2gD6v~q<kQ5idYzH6z20cG@zzxGPEBGH2mIWq|sMxoob`lbmCK**b-=`){y3H zN!a$05zm@sAq@eFD~cq8Rf|OHkOP2qWK%e}>RKQ00})LwE{PgR1fv6QV<U2dp{ESu z3XyEeT>QH=^(a<wZqSe48`0{$jVcJuXc#p#tOlxi)f=j=Z4m7MFBuDroCF*iZ4}G| zeT!Hi@B|dsBwyf2TYV8&9TYCQY?0g{=18kV`cLsUM!{35sRmi2q1M#d6=zhxDWdsk zz>+{P4h_~7<RmPFLY)#3rMSm0qbgbx=sAEepBC5`)wLjc6;-UQzBN^vlgU+vtb#oW zeW1uia|2{H6paddM3*IU<B?VaA*CA1POKI-767(wRnqE1T3Veyl199rMx}yv5hIbB z;aHePDZRa52tRNtWf$&EprPEcFe)KzB~4(L$x4KkLjWQ+dLtIrup~!l0O~|gFpeK( zp-{9wk<oM|XAwiFwv3&MtZI%|2sGjfRcvrotdzkK(h9L`6OgKE4aitylaerxlV`BL zxV%*`I%JrdhI+J~(5k^T^P-6;D>r+?p&%G`VN&ww#;QaJUl^K-hN=}(fkOU88ogjR zD87&uZdDr_BA{fbAT%uO0B>E;8&Pm~AY-F6k*0(7K~rj>ED8$CU(PegV~R>KEsXdn zYjX38)tr*miDF4KOsl9XM8uebHhV#G2dg!jqA;WNjE4FkkQNMP=oD82_IR{jv=K2V zLX#IH!8OCv5oKL&NoihDAq|cGc9lxz9#$cJQ`M@0m5QWMYJ7FUdR1D3UM(6?gc`LH zxw=Xz$z4%YvQjOpEY8&@tWQSxBJwF>Nt2yVZa`5Z+GpmN!6=B3WdKSQ0MOE$eb|`3 zzAi{ST1V?@VYg^FP(>lx#rg~XrXd;zV?+EwLmC2VKwxX&3?i5yOAV4NT&)xp<dvzp z1;u5R#^h-2uoJM&(JEE(Pb|{-fyC6EK1@UsbBq3U1uMr%mS$;LN#2SwY8y=T>c&=c zA&D6xlFgCQwcdy-2_l-;T5y!YR-^c_O1=xy?*GA$D$ZN+{oa(cQiPEzBr$3un0pO+ z93)Nxp$4!GbBptebFF{h@1GK!b-^m5MPgX}53HfT1oIM&E2TMwd1ZO)f#X)LEXge` zO&o=316i}^uN06O7KK(Ue~{1Arhb~DqB~x}P?Myo(1xPTQF0Bu{2O~PexPkw@m4`C zG6~b=j)R2;QCkWPG}fB)6E-xeM6I=s_>aD?P1bsS6}gP{-WCOIf*`ujAWOin0(YuW zSdBPo+^j0L7$nEHR4}wC>aA<`wnp?^m3om`@i=2dA-xc`9F1ros`a+v0hYL00fQzI z1v>?`LVXoUBG}w|dtx6)gp?O;!Jxc#jkR7SZv62BXn}<%d!2+P8E<g~z+J3EW3d_R z=(Ra&X>mU6QP@YTOLB_Wl$zrgg^}6@N(eBy0Ny&-YYGhk=hP4m>Z?F|3X%jztdKk? zRppVQnT@T+&1zJNL%)q6KS9#M{)*IjBek-)oKcm9{*qtB5fieI-0SfU1#S8|C4}6u z*&MOauUrL*4beEISw>}iBPf=@08}Fg%0PU>9Tpg5B@nAtuMgh5mJa&D?*(fvp<g{x zM1FW)X<b7z5YgP$Lchqrym$p!67ml}C>SZI2CKD3HTl$sJ|*~_W}O8JC@OHnVSD=o z_X91B+=bx%`RdWF133`-KB{Q7V1uh#LxW{t#PRV1jb|p3NQ45G^0rou<YNmR<@PbE z%QYoa3AdMCksMydI%mNgV4<LqHgc=_Le&jXG;@7W9ME+>xgtR4syZ+DUeQnxRk|uI zde|<x`FSgI)xz@pe06zcS#Bw<UK5yJ@teeW9I^Mvx&hgQ{U&mX5Yj5{&?tt&K-F5- z#j?ebn$jtka;{3Hr@Yc?P?mLuat(&SlR$J!O)wzT4Q;>p_N44Fmp$D~W|+xLGdWM6 zx25EKGkK+%Tm<Wpu!qH9gcy`dWFZEwbEA}E6iW<P*4P*^8C-fT&=}&c?x;0EUmQ<} z^1(<mi9_sMNZfdlEQ{&F34NRp&M;z*i(-rh2Nac;<(8;x%Zrc)sz;fG+yHexe}bH_ zurtat8keP}zPHe#0Y6W0Jo*HiqoCb@9DWU0yFu~Gz=DV#qX8pOiiqw6L*8(!Frb3+ z?^{?xY~)Cx&h-mxM6?O52`Yk1h(^Bdo%;141|&gOq9u#*GP20bzsv?!ohlp~-5LO4 zD<g*>Zp}Xf28lY_ylB@6EUX#mXwuidP?Hid+#!EGsQ((+peXDWC<$gq1l9%HP#Uq3 zmMvl{w1o6Pl`45bY_pbXsSmYqO^`wfYjW1*s%S&6$jQ$yT4DJ!SMgPaiQJMI(p74U znab2tD|1)nl;@YJ1)fzorDgGd{0Wz)My`!{QA~k7joT77cs-C;-WUT`2_f~&KPqJY z1s}Y6qzj?2PXqaYdQ3*7fn;<H;rG`?fkfaz!jo`8jXxlxB4NoTfmW+k4S5-Lh2`#y zq88?>E65Q6=3be%I<IVzTCsvw6<stn1iJ!MLl796#6^VS9^g*`M?|ZFH7yEyJR(cM zqgFKZ8#HRSEUzFJsjaTe1COT+d?;*}h5>V>03^8=6ha}D7nHrIRhz;-KQ&U3v%CPD zuMF$MJnO?1)`$7lhXvM$E3FR;tq+TUW&vO?jJ1(Oj2nuQQ@CPHQHiKPBT2WUGc4)M zxbddPJ;e<lN>;-%p<WK6S0wtu0w81x%koy`t;j)YffJRJmk*=URbMqo2rV21O9=fM zTnL>?VhQsKX$4C&)Pm(kBuMxj`f^m{=DO94(z2B~mDDhr{UY|Is3p0p)#W)WONz@B z5v0UrM>Q!{H<4AYL{`CbhDKp>;;2B(1{=T=#t0m6M^Uj_UbbqXTAW*wSG1BgwXZP} zL@NM%Maf>0Z>k%>mm?+StD%D<$_5u&tFA@QO}N`p&A(8MRH??0b8`z<A~X708p&*i z3N2{<Qy2wh1&pDnIJZzOEnlANDOQjHGi24mqSDIJQ7A~805?E{#-IvW0b;l+3{;Oh z(SWUmog`9cKDGhwsdP6nzbHRHrwsN)(aPM?+%n6`3M&!hf{2G0y|hpij<&9fn$sKb z5m`-X3krjdq)_K5BJk!7hl40B@SF<=kF*sBSJ*=}7)rq!<hZgmMdhWr#g<{{+7~B9 z0}`SYhF*}HQ(9h<TLAoN44;@PH$S&{O;KSkrht59>Z*b=1;n;oJnI<93Js$*zPhBS zyg09LwbDpYfkgTfXK4+MvJqlss*f(J!LU%RFsHzzC#`8=Q9(}GiZzN5BtQ#qD@FVg zHj#ePVqKYv+`QFm%AoH?q_SXb;3blW)D#RJ7%8_H3_<Xsa#rM0b?H*8`8kEF)%?8W z3I_buY6>E%-s;WKAoY)wCCMhH1qg7CwT4ZSeG1D9V3({=SLUwBD*&-sT!i$5!N6h$ zYt*o}S!d@J`9-C<>hhAD6>hl>@vJuwYe}k!Ln<{>DFlgvrG&wwMlcqFZ3164$_?L) zVH2RbPk6yr%9Q0S&(DQct3XHAc*8;1ws@LIn{$)}B<8oO4T|~!CH2jS?SfgATL2Wr zX%@#*HGZEN^0MZ?l$UyB16NCMa0FvrK2!CDePYBa9_gSgj-xeL%3iRa$waa)>x!cC z!m^S|Vm74$LwBq4N<i&bg{`ZHoJhY4N=m`{0z0{`Ap+)21mt3!z8ygCingKi+_D^K zbY*$bXao@KTZ_(ay*IK+As<i`VlJYfB&5RuWC+QowXKb{CMT)+D-3!hGDrq452%J} z5!esw;$1E_t|F>zP$PyFU}+`SQ&y6r7UUEI87cg#3&4@<QCyra(+VzRM*PfIloYP0 zEG;Y1SC?oh){5qbtzrzv>|GA8w6b8ix+bS|jar(wJ{Ja=$bYm0NawC3iBzM{g64xV z6*ssav}i+3D@YpQV#^?Vw9&E&^lc<gw{$x_B=)f{1Xd}qbYW4MDGe%w5X9{Px=!ji z6&E;fbs=zCX`w|NNsCgCq9{HXX(kxx$fTiYebtCjfeS{XN269MDA<1(0Rvg0ScIf* z{wHb_ePY2-by&$OEJe=-nOZmHjny<3s=TmBU6%tckXlwG_&*=5ULn75VJ!;)E3=}! z1en94H2Qp-<Oac}QKLsj>?<L+DVMf})ye>Ql~cMRFAq$}(p=y(;&M>INC?3aq{2%; z=H|wamlRu0;mT6lQYf^9fzd2ZCK9<NL+6$e3|x}CE)Qe>3e6%japM+R))dSDATF|% z4C;|h)S%V+1hb*NgXbw$l_<}-P+wYxRR-D-3?^Dm5i(Op=yqI340wQyQ83a;q7L{l zC!eeeIp0P!9bjCMksG+ID8Hy8w`88qXi|y^YpQfb4k!s#t%N0l%_-z1jnL3M(vm`+ zUQwzRgQ&=bmDGzuQyA^S^&|_1HnX5fs7~><NGX<}8&NgW$tSW@CUHd&Y?W$hA!g9; zOsOw`$x28N6y+0sp5g;~z+MPRu@<4jZ`AhDdW;Q^BA%8n#|0MhDcsN?B}8M`*Mtiu zbzA&$!AvscQlLly=O<`L0NO;&)e#|DFn~+#k?lZ+R6<i^@k-N`Tw`xIK=&mAf|MGb zC~01y#H{uMiU4%iOJTRI$tkfeE$oL<jP4pPYF=q+9-1Y&g?LdU>{UZjX@k`Xz9z7b zIMD+W(F+D;!tP&DRHz?;m4NhBL>Lpj$^_Gg6r?$p6(A-`m0Bnd8>m@`*aSIF$^>LM zk_pWb@+p0xfL5C!VdkjHIInbhq2jM2H%LS2CI}7G1a{U{r1USMAm~Y((8AFgNTn$b z@AQ?%zu;M|F9@2LV(q*bdqDPTu7>rc5ei*ZheE;hPbg#&twMVWE7B1b)gvWIQIhY` z{Du%|l=g`~7={hk5Y-|WrzJizb|0>|r0r;gS)ud82xX2Yp-+UrMKoMf{II|1Y^}*~ ze(}v8RX1H|XQk`LVRb~0=j*QG@)BXusH6%aXi;P;;YcmmeTukX0HO!HIVrVqk6FkC z0@E8(OcT{mS#g%DP^p#}046id<UBKZg_)dhCKs5=E6wCWGr0&4gu{4_9`9&ry57Ju z3oISyK_jGDk-=gmxX#h_blPZYMzEJ~gOr*pnY*?;Z=GDqc=?X3WVpZ)1@<5aEut0L z)KXC51s~uuSeTJo9t5Zluhf9b5ds5wHrj}89|i@4nzdN0AS1-Srm(A&&tloNuux=% z3nUhML<_4yx`>tCgg4a8!s3#M@Vesl5^fJ~sM@C+NJ5(z=ad*tS@sm^A7R(a!Iu|U zXsg?`3o-IR-lrU-@T`dtL;||ahC5tnG!hauey@UtT2s(#7;9iwfC7Y_<d4Mf_e3>4 z4^>r*uHot$0#pHGA;Q)4QV6=xu*!>bP`BevqxvY`2Ck7ygz_do4?JmUTnV?|aG0#T zB8^zDkX<q~fj!a|!b>665@_~}ST3|r1;Ig;1GEZlVU!73-arfhqX<zvfczt0#3G6e zFOD=J1&boakgX2tNGX-Gd~~s%vwR-bUs+zPt}V|k)uV=LT>ps+zd)64fEkb=(OQzb zD$k=d<4qEc0t(_tiv%jkAM3LDbzvoMPWl35zhLlGC`Tb3Exw%+5;iy<B!+#$WijN4 z7AF--%JY$~qeYw0Xh!v%m_z&=sS?Z!<ESAHB;zL+oG0A?B2iXcprXCzlNY+^o-B!x zc-s%fP+5^-UCUjL<R$7V^}cX`juwO=6e9cHBoZn&bb{(J4z0VR(sK|;y{4a<sP0C@ zPQt>&MS%yqTX)&3y&wz80u!59sA|+CbSKXm%R#1~h&Y{qnAR1}Ti**7*-dUcNpOsR zCUVgg6gV}SH!ke!ldF%2OZW<j30iF_Y=nt#wzxW{I3xZsGyZX2{Nok+b~L<5BWr;W zFEm#X`$NvQdLAV?EAu>L2MX>c4gmUxM=Zd|xDv5Vj$oVI!j)>#Dj0+rjRl7nSiTW9 zjcGKD!lShH^bH~0L6d~y3aDHmVkq=<P`guLS_O&*K|$23z6MDFYFq(xnw(M?bbele z@DPdS!jh(aXog6XYH<oIt~Lr8{(b%u-R>n~;_}tw)fmG85%q=LM#KS+mt-ZGW5yDX z@FURlEzenPT{fMeGLbfPnylBAN<d!}X+K$JB`iNMEb4;Q<T8m6jX3eu8t5RC&V9vT zi5*GWV-FZE5q6yJSy`Mf-Mt!R3ah|fPh45r4k!|(=PWG&6r&L>Jc=V5e^5lH6LI#W zxRgs?2z5uQ&<F!GMkBRWR%;ALftiE#;50{q=ECA_FT;izF%JN_tBXo1%`K0=)&sHQ zWHDK27~zi!huttZH5um_Whv8%7>0WxcL~Mj1mg<JrJ+&xw$)Xj{!~FpRB6jW8A8cb zkb_z*tjW9Wv<a7kKr#=x@FCOsFwgpMh4o>+^<jba;YvIJ7Z-LCmzEgQ2Q1Pgl&U4v zFF91~LtVVVpyQ${7<B+GsRg}tG7bcmIw&gLR32%T8PaCCG~ZD*mz7njtI7-MXi!zH zaRSq15rZ+b`Ur_8J*dLCFoZN8iu21$m5_c)R<)_xB0a53V^Js4toCY&-B_J8%fRCK z4?Ruk`;lEh_LCW|9>w#sj=LcoFajP4p@L{A*zmn!xm6`a1$aFo?o}-7!3&A<h!hWD zLsUp>cXX1*Y3fjQ1HOaQS|1tVMEc0G5=MlDpW+PAP@ND1^fDOw!$!=IwkX=#K*f?g zpuq@h1S6ip#8Obd<*X>nwFWy(>re96NNW<7t4t}7K@vO{)Msx|@~~d!xP@^m!lA<N zx5x(loY-oBnwA>**8%a~f>1t2AOV~i>Z(DQL=`w=5tkl~&*CklfGPu8YP^X<cADZ1 zwUT?PAJ|9C4us~yx1um=Z8&v8Zi$P~qe;-B!ZIN9C`7&jXDGu~hF^n68x%>_1&G?H zt6n<wNYp%W5lBV8MS;vnyHf@hiow~HE-ffeq5{gXct^k@vqoAZFjB)v#RKCw=}%!N zI?qC%!FrNP(o3zv3m7sehT-%&U%ZosgC!G-NUg5KHb-4c%jS&BGtMh9#+vIXj*r(M zEX`euj;!HRdFcQijCM5D2tCRIW#Y6cRH$FH9C>z3Y#*&s&6qAQ6(SPP<b_T{4=&e| zb|+3UUiKy~2C<D9RS+*%jV5udGPyLbpg7+=;ly>9@g&@y@-l&S!&CSXghPQ61-29c z23kj@UdA-dI8!E&W3)jOC(gur_=yo6@{J<q$+G2)Ll3?v=p_jn1|t^cGb5s4XRp%F z&&64hnp03*U<vKU`x2%F5_c)V6rj?rDJmhiMr#;R-v|lAH0Z>P+!s2YwobB;JXEDo z1Vc>&R2-ff@{(puCN19eGsCQMzoOgWi_jZ>D~fOtJ)@jc3o?jcm=<g_<O4?Rfj^LS z!6k@TuP2#?3*M^0mw|QPPw`sL;>-%*In7s^rP*voEYLE**iqP!O5z#^Mo++|F$g<C zESBY!<>%t%Exh`q$7t~=T==MJ171T%zg4^zRgDKd(pJ<Vt%}fZ!ibknr3}lFZnj*w zk!F<<IyNS0I)GM15r1l7Muh_526<ja(V+%)<*FPhPexp;kZ-1nlgc>VkM@jln2lBn zNxu+==LDmJxwgsV6S2!^k0l;Hl6(sLv?%mM(Jpb6F1$gBHv#}k81Jzli-DbKk-&7` zQmE2J4>dmz>eJPux+vcFHLoP-zLt4+MbXU|sXOFpDjuas*UG#fGn$r9*9{GEw@u3N zV5rFqnH#yNgK-49X#-kPDie(Bi>swlCZcYm7ffLIw5wo(g7!j{>J~)&tV&D4=`7W8 zbaljfH78zpETTw~jC+c3l0}#`2en!Z?_i7xcb{NW^9b*IR9jh*)g)28n#J8jJ}N5B zE6ZD#OQy4ekypza!Vb~s1w1;Sqyy4A0_dZQ6Eq(=0-L<Bvve*UZEvCiRw9l1twSRK zXt`!(28L+a#ibBB^t9M2LMlp8q~A%fhF~oRFXoX*++H^BvKYRCuZ7N;OiMdXW92Lt zRzFU=CZc6nBFPD-j4IjCC|LADVX=_@I(jJ!4Q|2v;_wN-PeAYB_=I0BgR_`vx+Ehs z1Pr^VBv%9@MKnezhwmSZbXtWczlN?)fr*cCf*O5MWvoDYVyf8PBFJJ9KgNA!tArS3 zwM&c2OYnY-v{V#wt4m=~)+9Pj8KW6ic)gY42l&D-XdG{(Iv7-fwC_-)iC5%6PBb)s zk8fl>dzN?3a!X2zN)&mZio#g1_VV&oBAic?vbarheuTzAEwLTR_QKrNIp(Gztq`vM z{<RX9&G9r=a;z>b#TpYUfVUMHu{ZFx-pZl^VYiOrLkne}Az`K-okZh-<VKBgC{~e^ zU#6RF>WKSPh7nOC!bnEgros~Lumn3Sp$<!+!xHAO1UW>AL)_vr?h^v3GVoWXu@kM6 z61I~N0bXFWRxlpO4Mv+3?=efy(Dd`9F2h2G{zbO+ii0Q_Rje}k+F~f-xvG9&mm<mW zUZK1?Kn!NNTxnHS;+C`wK8DfS&^>rL@A!}mtVjm_lEgHQu<+7lNW7yjCn#@P3Dd}A zt%|&rWow9Mg;KU?8#)a#qOj67X-0o9(f${*Ks1JS4@x-Ns^SpEa#$G>_bcRZjF=jE zwrX66+pvvC+X-c`EmwMsz;zugn(kN{2Nw#xb{+ETM|?gJF{T47*vd%QFvT)RD}-rR z%Al~NOFTT0);k$o;%26Js{uDS#cmU1hSjr?aRlMbnZ93~uD+6jbK&qjeM&){<AkON z3DIf^u_WGXFnK_aVO#Blgd0+p*jtq^pkGx;q;uKwd=ca|?qi$fOd~1o6h&MyGCc+} zC$b4`e>(FqkvJ>bGkSn(gg0XxnpLbIJ%v%7hN_LeYRz)dI<Dj*{cLc=bkH#;#u-J+ zfP5SwF;Se9!qW<InNZ&3GQDZ!ba|sfx9S@7+eDNi4xv+LnXfen{nywkI0D>NVS>V9 z<2}65y}<c68}oczeg#QC9uUWGDBzGT!Hk8W?;%b+6>wS2%MK_aN1@}DIvw?(Y@WRB zW8RA>1gTsqZ^9X_ly320Fb-6M^*Uz6+MZ<25l#ab>-Yr|8cy6TZ5RxOSEV5@F2TiJ z^3`W#<x#TU=4I-F-BeIwxH9|*%HJ#A5VLe1w+i#(dCI&ID_{IbKxd4O&Kw;*Z*=q( z`h89PwwXK{Rp`Q-PrhkgUng%|MvRLZapGv?>9HwCM%=qF55nRZVg3k4(2YdhPS$;F z$>$`i;?A>FtFx4F%NlCp7mZM{%1g1M5@S^C=!CmsRP6jwu?t4UUO6gu;i%X};?$(M zdNje3Q@%0}h@YD%vBh09{IZmJ&qOl3d75k@GDjkedlO)9!agc><M|KCg%K}T)mK^V zZvE3YbTkLjDxk=>0Km10$cvNlyr1zs@^r+FL&1VRaqOGOg(DBKsetrpRr6+Wi}4;2 zdS7@kMO^qLg+(K!eILSz1WFb2y3;7c2fCExmErlIE+Z^gsS^2|HaXr5qR@^wZWT8k z#M?(Bj<MzWQrM?|s80woimyr^Iw9CDJyhXnhiVcoW|fRYlp;C(!4~<RqgRd6{KXff z@bZedGpW!-@{0;r;}6>6_?{^-1Lc&iDJm%w@9&E@6$x9e7p@70rSu>?S@U>lNxmW( zq2OC%1Nm&S!LkxubFWwq7-Mx1gMj3RddWYPAEy!>VJC6l+k^d#onmog=qroLm(xf0 zG<~x4Jqet&NKnZN6o_=dqYn>z!yml$qYpCfZ_5Z0!e%pPZIDToHI3G+tuzN~v|4<j zTYM5o))&O2v>dXW6X{&wF#VfnUe#aM;H3#z#)wN3rTcm&*~~6lBGGz!1-4p7FX)3N zdKL6yTj(VaeQD^68~S*?R$7P=l9(0Fkz7^D^JPlhJG>#wOT2Qt*an&vf(lkf6OEQq zfJARr))!ylffh!LfQV)kM*cNomc(6R%E2aBC2u^diTZNEEWBxDFyaR}0y049C48ji z6()a)^=`%+w#2o9ktHkPaO231FD!edl`0t_BHy~ePjaEnjKne5&`Ka;Qn^P&U9mA} zCn?@&02k9&qt_vFfY(m%$HK1+`khI?=h1IDjY2#VZ^7$lBS<rnJc3gbwuzOw<H;^B zUpML$k`p(lCnk?qhk>b^t$%Std;wEjZxFAVtI-gUa1&mwLwlHVs^k9zMWg}0<0L-S z0-WgAleKYwfdNg30Dhhm(Ifv*fwY1~{BZzy0^L?W;@kW*Cwfg!PRwgLJRkA-`Wj0X zZcMQKL&oQqL}UlQ?}QjU=%NoY(T9xayEvJ6A_L}>kuSasAif`kL7RwizwDp=-jDwI zB=OxHeI!+No20~{k0^zL^hr5$T=H`{MiJqP3g(s*2v?i!W*UXWJLJ?VdK>1{C<-Uq zqay+1^HKWwzur~AXvO&Uw%)j)Myp*>UbN#kze^SQ?>%@-VR5K@czliF$HFtZ5q>JN z$0RArQ%M4i@U<jD{{p~Agih~9IC+dHqPM0(Z7;P@>@^x&hmECC1M8lU4M6g9Ss#*m z^=2sFBB~?UL&*xPo<(&ku=*<^X;!b$tDg&~ODVS)0TyP;&fa$H@N@k^FI)<U8c`TQ zObkjdY8g~Ibh3szDn{@SB})-JO0(CL#{l+@5mZ5VKosc%@V2Ok-~)k0@Ug%m_(Wh4 zd@h?n_$N`~6o5&|aSMiHs1;<}Wc0PpEVwSQVEIh|?hq~BVbm$dI*jTRBM{Zg_3BgM zaS{Esx}5~wqV-Y$HSm+Hu#{6{csHh7L>7YWvWEUI1)eiR9~nj?rP#>T0*fFdun5A* zf}|1IEYbsEES?CN@VLTkphhJ10YFkOSTR;nHjE_{g66StbG!;3YeeoF00zg#)m;dW zYsV%u_rO@<q|dHVxT0Ld^#}RybLjso_(@WB{`Hz}O#NMq2*LQVdWN<5__1+w%Yi00 zaWQp-4V>yDxRH|U5ZolN2=0)D5#A%v2>zAFu|p9&sv;Lbgp#Fteajr*g~wkB6oRir zGk*b~jf-pXI(R%ePV|lN6Ur_|@U=uE{AOHS^H}R<nT_zE$o{Ep%+i3R5*B=jD$VO2 zkZodmWIj|G_=gSM1wRuM?rXH&VdLMOd3HA<?ia{Nqg^8JmragS8X2L^?S2g&-yDa$ z&s)RF+1+~kmLhsTSnLxTWM&-hWc+Xt^{!|!ge_wFmtrIh#_)bA>p?g65#8(`uPEP* zr<Fu7W&(0!#MX_8`4i&UY5?*F$K!~a3I0Z;TRsQ)Ej3Y$VEhD8WCp-XsD)w#a|C*; z-dZjcT|Hi`BEqfX<5=TOtT|C+BV-e)B?MC`S&Cqqz#{m8z#^!T^$>0pXau2&LNYV} z)MOF8yU(G!zl*_UKvs@u_Xo0;h28~EC-DmS0ThDclw614m+&)IX;d;V3@hj3!@OrG zZvlX3MN)5M-+xhaH53iU7oQG~GYD0T;BrbD%d!+|zekN#yeAt2`AP5!Dp`R5M}cUB z{Q`~Pj}omnb{*7unHnp_fmFqJg_HL@oq)2?L*yDG-}r12Z+w<=5zKy$Iz9_Phe&o9 z$zlY11Xiy;1?t@WERHa}y9BZ}KPS?gWi2!u5I!OC)_VPxdL#2cguJhwjq6HBB`M>T zq=bT23&pH#5aBs!|0^1LDT1%5yPZi0c^{z>jPDa@gw1_%4gAckrRdpKCHS+^I~b*< zD<4ndfyc#k5r!Wp;v#5$Je~?zbd|_PP)Es9EZHou&9aiE`8;@ZiCmZL$+Fy4k0o(O zBI>t~Q5(Ym&WLaBT0q@Lxy6qHcugb+jXK3x=PQx4LDgxZYrXo7|IO-?;;TOjKfMZV zZv?-f<htJjNVdfZBm9T@8J7fMM5M2}4q!LcDo4-*KVuYD8%ySxJgmf9GIQbQ1}a^Q z;3fq{ZFH-#9`oR5J>{3Im-*O<V)-{$WFtsb&=NRhD>3Thzp+%Qk>JIYZX$T8#9u0F zB3}QO4nM1?;bH{0P;woDU9ykjZcH5(83<l5GBEX}$UyLok&)PX34&WGS#hhS^%83R zd6DtFrS%eO{VS32m8Era&a2^P2NfvBM)ry%R{KvSPHtmC@u%$4yGP=f!WWK)OdSom zYBXfoXvp#eWU?~+g963;r{gW-EKvkutmD*iapSZgQ%6It8Vy-C8nQeAIdYtcmsHkK z*C>hO)Nyg+v>;PQL#|3dj_e)rBYNMcB=)Z3;(E6rQxlLQJ3{=3jvAH3j&xjHM>=w3 zn}{FLW|NZGrj8p~y(zIe7JEWgM@AnS(UhJK!!rxe!zd-@Sxd|tt;9lWiG`z;$gq~k z7_G!|Yl-Efl~`>pu{xmykYyv1MK7d3k1Qwm{*V$!u?LiRihZNRQ%uh{DE5v1FiMGe z))MnZE3wd8V&P~dGOQ&sMk}%0T4MQVC01KYtWGFlrPw!0BE|G_qf5(CP_HDSUQa~5 zm54f?i28LR3ew8Cq;-oC+&>lPwR3yBHGeJTmmo-{uv7(t@sun^@F=5NU$?yliS)7Z zAs-T7k`G#eAbFg`V<MHjsfsoL<Ht)pCZ-C12ElAfRv>8CiyQ)1!8=JlTn~vGCQ*3= zPwV*4Adxd!KCFjCzy5F(5-C&U!zGZIJykwn!abEbM6f}}V`7`Y#{k@_<8Pm8(CX{9 zL|Uy~Ytr&ZakRY8E{qd|A50MGuK;S3MH*r2WSSHLY{P2HU=y#|2$zKL6s0q}5ppi@ z2<LKvM|cgT=XWD)mt_$4$ubDPlw}ZZ5Pc@;b4UEPsm556tYf)XjAbgq8^ppNYTpBi z%&GFhZBpt``zTds+-s8RS)%~XXS`jA3xp!JSaD49mt?8GaD$7U8E0_I<$`e#+)R${ z&SmIrZy*=DvAr7;Rl?^)a7f2v;w!>eAb5JBsEhDF$Qi9bFo;gE(%jySi40=DiUk0A zMH0F2#3b1wa^d>P@&OYs(#lpKII80@aZKP5ESMs?MOZV1&<LKSWHEw)DF#2@Em-qz zgT{?*hD0hb*dx9BHlW*sM8XmTk5aPySpYB6){WY_F>y@bZ-OP>B?7Dn?oE<KF!8X! zBj^=)dp9Qb6TbWf059p~F>zGjmyc1D?G(H$LGY4@V<LE+l4}vXgJDf2Z12Xz2~h-v z$SY&TERF&E#aP)mCO#5DL2fWGFpHENnEn9ZpNSbt5d4*r<zr!Or-@}oaLxqTASNyo zcm!D!<m@m}K=|^q2|61=d6SLGuLIDb;~$2^KEjvmlk5dWkX!ylTvT3b$gT2Ou;7=| z+L!3O0@#}Y+#zHDf}Y8;WlZ!6e6M6C8llNS<x${`-NYXy2o6!QT$gT06mwUncOwhk zOe|E4;P$DqK`RU0D_IEP0UK@8JK8ZJ<@Uk$5prAZ<%8|kRu0Hkehu(*8wH^+`|B9q z{kddPsQZjuX%ZCrQjb@n_?UeD1?Gx#!bFwxyXlEb(Qy_eF5qU<7f3M(O|Jw{F0wAc zta2$8A*%<#eoL+WQZPc+NdTW&YJJ9aeO4TTIcihQEX`08#otG}Z^la6eIo}AWf4en z-O>Ji6(!N1B%*<KTR`pE^cJ5K8U(T^kC+pHGnw$EJvJ(L>CX#NQb@YaKLtwGI8} zMkV92?yIFRPF8lVOonH@7!IUItP_IQ#F+NAn>r|ibkJNbGfc&kVJIHTK;rtw$p;+l zSCixe?touSkq;l5Bj49<8Tr0;>yYAT^PsRo{@$jGIHVv#A*dij7gRVXg#Ixy0~2^A zgBb|_JYHt#asx9E?wcSp^sSA3AgrAvGcbXc31%Ra<NkY_b=-Z)a@?5sFj=&ZP%h(> zM4360<ii4^&5Ul->RF4Rb+RneDkTDzK`4p$BoXiSsUpK-wmca}$hQRT_P4)fsDWYx zvhaSRaMf6$=+O{Bv64A8-YC%XVQ0+2ouQY}pY?Lr%5u;T7P(Mt9t5ePOVd~w1LHVD z4CxFxI>^7S9TUG7cm$3liO0lzp{5X2>Ud0SNTPF`&i3RDQaMo;CVnBRAoxPZW8!ZD zkH9`g;xREt9LphiLdT=hIzyZqAviBt;xUmb@CY(>JSLn1k6^iu$HZoVNARyY9utoU zJc9pE$7A9tfk)7%<1z83z`rRujqsTGTHq0Ur{gg(U91X%{IL>mvEQ$2N5ksz@$vyJ ztA(WE)-D0y5lPihd}|TBPRZierBy{0pO&^1;88FBO(YT6C+Sp%#A(97M{tIY$3&&T zSDJ=DGzp2<#MVIYj*iE~#{!Qsrkqse+HymMLJ{2}13YTdnkf=rV<^#5ix9fb;LZ7x zrzGS2MkN0@X2jZy1?T?mOk<UKQ}>^&lf_BRnKYvLbTECtmS*tR(hP<I2Z;CO>Kw4H z&H)k}cZ?HNbZZ#X2n#02LRE&r0uLP{M46=L0ix$SQj{V5OwY(MNq4{?9hO3PXo}3h z#IY%+r6GxTAZ~U`rJP2%QCO%r$=gH{r#T}@ltAbp`j$8()e-HN`xwO=!Xb$tlKU8n zBRFS_K%XN`ODv8sU)q*B4KY2Eg!?545&ld#7eABK#Ac9~|4JNQf#6|b`#o%IfeHkJ z^59Fi1F<5)9!X!M^+&{`6}lyeMRcbDi<mrGqFa1e1mQ?BW7<mPizJm1I*GJvml}S+ z+R>@J)=FhvS^|1>BCkb&;s((pwOYC)a=Mf$P<$kf+a-+=_7IKNA`s3Q$ZJfTCTXP$ z11O{K8btpWTGC2o$;F-RrgsJpm}r%R9;r%?>V=MuAoWPKY9;%GvHH9-jCn&N_mlYa zj+YPZ<{a;De{X_tK(QI!1Embhu<y4H`~J9LTZVdnJ8{Pp`GAQO;Xoo-pyLe|G1mo0 zw@i%g@%F3b!T?i#-@2G%&Y&^33Qrk<9RB0&{|wbfP#TB-5%GG(`7qi`B+(Jh5$>-( zb{xrjGypT?XX4TmaL{~@F>##jwKS{pxfAt6>*9@a@PNf}{E5a<e2Ju-#m2|#^WbNa zvRP?T&ffW>_T;m{QJE)cI04XvgS_smCko==R1rQjQ54YY83TO?YWC8YN_$O83+?u@ zRi%BVKOjl-C(8#58BINcmew9=wV^fU9$~fV`MMXRm(ic~azB>kfCgB^DXcaGtAubj zBRD;Pcv0jdSbrKO*CDV^)6c3fwR9R~BvvayfVnWxHHq14E!p{c_S=B_PIQW3+-WqZ z;^c9%TPRzGaN;zXfr<Gt1K}bXO)-MS5{+<)KrfkQbXjKYat2MV9Ko5CEJjcvu-M;O zRKFa-C8DWIjHw%Unm&{*jRT*TeSLj0zpPuYYe6lR6)h-h1ItdsRh#(t@4lNtwQ*AV zvtCty*6XD}ojIqWW8JKTm9ytv*o{vP_?ZY8_DAR>8L^02a9Z3Bz^YfC7QfTX=EBOn z3(-%XBP&jnjR~w?p6C=$3S^T*f@A&w;5(80POhS*e;=T(6+^n#Tw{-({UgBLFR~F} zTTF?z8(r@)`Z2n`8k%T}AI%AP{E|>>5qwR_5(KADkKae%0dDs6IEEevkCUfM2m8!! zOrAMCo`&$~6b%tvN!cZOb}>9Q%WQ;qirNV7f}g2?PHw_q>5fZn%B<<e<PJmb7x9C6 z86LkRlp#OQn*n-z29-k4KLbhB++wtHF(Bs8i0ApG@LWQ5iV<{)>|%sZQ(7Z<SmOUL zZ{GrE<+%O7YsT)1s3@hTCM06INToCqD$(A1+IvS)QW5Fi<TiWKiK5VGN=Q2-ofH$P zBne@tPU(b@Bj>n;;dJP9;)MVDuJv5jyJvFF?|<|8<h!1AU+cNN@4Ihf&4$x>5}U;) zdGWv_h>J7C^&5slvl<3+2dhy-Ia7gcSeyWy-4JyY7N<dUY8dFk92!2;P&x`+(=ad} zn`ron5d*&nit9C@XSpUK2A<O-AU==&-4T)<0h|?LF(8*;KuPu>m?tD2z5i`q>jC~E zFR=isR}Yj5x8p-NIBSP;(x8^J<M>MFINrm&azrHHU^T0L(D`#~`U3jbJ0u@!Or=3Z z*k23~bpov}3a-!<<aBQ}oF<XE*|E9V-<w+O*y_FK_=&mMNzeBkN%+Lw97SkYP)*hn zaCkL7vG=Ax++YOSRar=Q!1W=c3}UkpY$yCU#Jd>qsnr2-z~}%ETLH4_XCfiu?HN(m z8t2p#sP?KBXirACJ=Uw1?+MA;t!xvqHeot}3)NwHuWOZGkTkPx<jpuhY4yyHf_Q}( zAfL$uU`}=W!Hzk`QcZz3i)z17=l2ZabeF(@t7U~<Z~PMJow{TZwU@AZIhzD*rb(!2 z&fKpB8V(Sf0mg<l-(VOO8Tu|`RXyW_JFP=(1^_?UmmH@M1DwtZbTd|kLc}X*4@2qS zq7a9z2|Si(CV3*kIYI&+tR@=3Ma+)vCitglXkQD&S6yHO*%01W0+1A6b(7A4YttAS z7Rk~8+*K`jey*W^>q0CB>}4{x*JO>xA(ZUMNUn>@seUe`b%pd!U{>6x7r)G;N9H~| zci?Of#{4W4oUHAJry62e)z$l-7}qAp$5LUX)pBb7c2d^uza3T6?+++sSK~JcLgA9Z z;g)HPYDxZp+5w?8JBj|C9SW?}IUzYn5FWTi#DLEY8@MlMg|liRM~ea`acd`srd6|N zeiZPaVfz&k0jw4c>kFO#shS)SzY#XB9y~4}KO`oHoN7rnR2#`=0*IBrN7?19V#+Gy ztzyc`8in>atBBWhRd=P~#lcN$S^CZpyo-XC(`i@|WUZ%RdC-|<>5Ra8D`<(%-4tRL z;NB3QxrfK%Qu&!3Smk)gedZ4GwL-p6@O3B<{ESfGb9xbRv~O(0hp3r`ivxCGEnla9 z?}q~00RMFkNhQG9EKUIK51G5Ul7Z@O4&2gEAR%PYk696b6p{3bZU>E^e>a9?sR74{ z5nuwd{f80hrZ9A}hyg7^a;*cN#&pSWAdW#Q(SK4Gv4*h1IL1+-;HeWeax%I;4Pv+i z0gNy~MtHjj@CK`|oeUS|@bqw_O-_{ZaHov_E)zMRf5;x%pb{bgT<HX$ibMdo!wEo@ zhyXCx2|zt70>COK0QIT}0Ixd%sBc67_`4H;l8?Pc0ClQa0jOpo0OUFWsCFU%baH}_ z`cDdt=|W>%=o2D%LZuz!wB>w@ZBg09I6L_uXbfOu#j1!E)v=-+>sk>2?r?%TToO^8 zM3j^Gy9fZb6H)F&eJ(g!Uv(nNo#-S2n+rXF@sw8!6(EBfg#=(~u}bX}XQ5{x9ub{K zOkU7IDz6J0@Sb5Ktsf0-|JxC=S;y+QbljB^$HJ<R9NX_1O?>9Ys_Ji<{5vE?EA#wn z^6soY_rSYMc-g=qvJ|X%C=DkF3vgam#_KYW%UwdO$jdhb<c~;CA2D+M42K)xQ~A_Q zwkF8pSCEr<i>|ehZ3wyuX>DeZ%{`LRJwBxWfB@w0R+CEwunGH*!~Z2h0=|{=e<1LH zun{(gW5p5H<m%2I_&UIG6TcFiBG;7G&OQPA)7U-%`wl`{^S(~80Mhm>bswR>n<P)l z<p=P`>T;Gr^DNekoMk#uD>S7+czmd3Zq2YYUQXH@gV(P7Ecr?&4t0V%Bp1N+EW5!$ z%@F}$zNiBpbUL8^C^~=@P5^3cutLPVh*`0Vj5N5r^IepvjuPc4;w-9lXJ^T}g!oAo z7d&Z_02}y%uwO6^^qmPjOc!2F-~+50f51fMTWG?kh5fX5T+`R)F0{!k`-RpR0F68v zwVl(feXGI)A-eaoy*<{lsY|(&NHE=0lA&)qo58kSuH?oi<@WOg8s5UJ2;jCXJm5{B z)1*ZjbdhKy{`{cfCK_%PL%<Fu3jj^BGmrmGP9X+p!0*o_0S&Y51cN$B1b`;lnKSR5 zL;>|#H&I_XiL#T%B516f_y@$ds>~W6F?dh7fP=yXgxOgPa6FR*2yudt)~Q!?tgndm zlX$F6l141`udij>FEK{|=ZY=h50!f7bz^|R(jvfBu0^2aOUKD+%1NvWCsBaBKb#n( zoJ85l9U{0xIq|(aEtvJ?k~JVIT)>sWg|lHo0&Wlmz!c#Ere+7al1IY}g%vZIDJh26 zi!ER>lQBR_xG9sgTBG=;`EGFo_$-_6Fl$<I8IAWducIsSOT$x<8yrOqJSxDNag_b? zwqupKw{c4tkLM3FBmfP<!Ui@MHeiBb0~ZRr3TN5C`YcY?_s+7tv!rsC?VY)cT`mpJ zVsT-1Kf<BmK$GCVo>&Yuj+C*NCcM<;c^3^I3<vtqyM}z^hJ4`b(D&5{xcdhw9}dff z71)}^Zri*`tiMWnfct6$FP{+O(;-=*!g}dL&O8oiU&HW0oWt)Nm1Ku=>!m@*L=SL{ z)dMkH>4CmU^lmbVvz`rJj~F>M0=3Se;fulod?U32DufF-BwPSKXcyewtBA9a6%rer zhnV-^I{l1ex$6lG%9$0#XYck2xzD(%7n%|ZPiYixIU&@Nzv=65kZa1v5-C5xUztn- zKCfx>1ND5Zz|@T()`Xh=)zmkL-l4|rNd3H8e*6&8kEyZsb1vCD#W53rSD1_fJ`?U| zCaLP7DNSuwM<J`+rXWw^v=V?*n2Z9>7A~NjZ~;<6LWj<m%JWTufj1@bW%d;;j|1M2 zd=RubJBkBx#eJ@epFpH%Y6a%zZf72W`7yQRhWi+oUSt}<okBil?DZ=tIHlx!`EH}a zuzxMtJHTmTZN-CVIH4Avo2TIImzJ3OahY@9ybf)eI{bRmz7%c&(-;kKoGHY4>*!Eu zCx22Q(eoI(9pkrdr&Lda7%hWp>CwlALKBbGW;Vo6ltUAKw>WVwK}tw`={vuUw4UHX zeh+zEwe*E1Jn;cdBrc$*yqP?`xIYo!3BR{VfynD9IFcZh{VAIbdAXV3&SL}9{tIPv zG^Y^(G?5Pze4avj1L~Loh?^u4z-z}CzKuhC8-@9ZbGIF=BH|4@uwkz-)z<_wjCb7I zyJ8dH6V#B8BUGeT5wVNk-j4xLy*IMGsLdSeN4P0>e~c74#w1mn?%6OEE!#Cs+a7o) zHmA9i&w6RadSCs%6u#=-Q9f(X(It~a=eKd^lUNXYg~VLcImQ@*Xeb{?0GRgdOWo-^ zvd?uS<wG7y!A-?6W}sSoNZb0avfwudK9I}-pD-Ey#Cxnrsl+N$SSGXVV3AL)g59sO z1M7Z=ai5J3KBqx_DZv2yogh=aayI*GSK;{+aj>vB{fYA&{nBe6aN37z%kL)8QUDxd zCrHZ;GiZe0Y^XuEMcDdj`vVSPS`-+A7O(EOD5sXZdyIL+CHz<>u`xBK*|BmK0rPp4 zxijcf(mKSNQNT}j{<PdM4+NNB9;4F3VBax5y?xHBOE0j<s$d=pF#mP5@{YkTM|<y} zs|UT?U54WA{-ToXzR|A`w;)kl`qv~>GP5`wrmID`C7qiX<kATnJYG+sFxPOX7-0A@ z*n{Ik?ORQ*8E$D03DwR4b?xVqB7ntmAWY>WFUdJY05>0P8exy-EPd6&Z&TbVmNNrP z<@wgSRTzz~YggrHryW(=hh2~FG|8#k0n4hSH@mKy3k)8p>*oUWg1UjZ7+?xizQMW{ za~+z@m$J!?)EgsK=we_ng6DfY#{hk!OsKU<({P<x5|}U08;+KbN%3!O$TWiW3jI6A z%~^1IkF6(P&{NreP7^wiSqZ@4dU8*H72z0R1I8LQ@FigbHW)VW9bp5u7&h=*VcT%+ zXxJl|K~dE{zp8AEZ`8af#$M|D%%I^j%qoENYazcjiuFT<t-^(QVfp`=!OwNz(}qvg z!#!tVC`|Vpg_SnOev;OekG%joGMND2vpRCm32MS|fsA3+f>|-ZIZP(cQD!kVyIgcG zcOKkQ!so2y6GCzC-`%FQq~Ynu1=;`~R~;uGJ(?V9+P+m9qfw#+xFI0aW{~Kk1H56! z@mGebwQp7Uc}T6|sl;C(P64k<-GJAQ%X~=KL7ZChDI>t~$6EzZCy4-%dwiy4ggDoU z0-%O`_6AV9zSRYl+aS>Pi21}(I7IjD(Ye{xje#9EBf5_oH*O#<?AZEwk$il3Jetxi zU742`;B7e`jVi1e?$)fZfoc?Vf6DOTd3gcex5|e;GR~x2JIaTY02T7trG8d?1C7TB z&n<&u8c!7yK;s61bu))prDEYef|RE5Hn9MF!Q#S3z<&w*U&fJ+-IsWy>IYU}9;sX` zpJlq(d?<-FBH+~qnG+1%KJp1Az($$JjY>Bb(7lWmqJZm}OkS^a{cAlti1VrB02qH_ zFl#T4S#dCySBPqb$^rDNtse)y=JKbU3Pzj|3f+GKlkXDjWiko)hj4qGC;`;#2p?yJ zXHRi>TFEwXc>0%+fKF_l@SfaEzd)uN<l|O968tLUd1O<-=8;VV+l3rLro-7hGTeD` z*Lsw*SxVaJJQdU-(-Bg~7+)PK>mel-I8W|O+e@b3NFv`jPw`e{(_Rv3@0=!3?<>N6 z#rcn)Ob**hrhp#7ntPDLWetOKV|l8{V2xo`a*VfdYow2}a4i_<@^XuPDusSXG6DQU zCIaxoiJ6N%)QI*^Bi04<Xe5(Hkl!d%7o3FX0#-F<UBK$bnYve!!iYw4oB+qMT@o<4 z5$<rN6sJMlD*U?%<{EY27tD_5kl!mCa}NezO*o1}MgTV&HgHViK>cUZuzh232E2g9 zalplm5qolR8bsg5fhjuEd2*}5TGym2Q~Op^=;j5Zi-c1w9ILyDxL->mfQ2VXewkt< z1so&tffER)ofODFi-xsN5>;SR7AF8_o`n1hi_;)F3SXOvCs$Hqr{zjoOvBeC9^f~T z0%|qMoWzYr7l{Dh74Lv=PBM)I@sD6se0H*#d|ndJ!ubU?Py~QMl>&AoPC=8vj<}A7 zW12_~z=a|PJk|s`j4Mt*PQ==v*=QQ3n3V*~k*H8yD%_>c#`S#)4et~dU^bJn*;ScG zyt&(nf1}|($>N^`9h)*ahG1UPKyGblcrLRd#ZKz77)rw%f~+zczQe32V26-ais83S z<qj2yk9JTrK=fo`SD~5>Y{;q+z?q_&4eTxK-rj>dvp)RqgB>A&7N2=?pfRD7Ez1?x zm4+9x<+uixH<ZTrnqVb_%MJYu;hKyjlx{Y3pOS>0@@CmETPJM5dS*|kXFW_*(W>CN zdN$GcU2y~WdovdI1}2-^g%0Z0<{|;kZJxOWHhJ5+O1rL=|Bd8dahSwcM)fFi7S0`D zBjHrBmPTYlRaY<kZ*OJ;<)wlBo5N`ws`m?NH7{sxr4dM{HxDe%92&MVC0X8AssXxW zEg#a1_aVeLu*am94q|E4OQTv^m!%OvJ0@dL93+ViayD*j{z^72L=n(d%-dFF9`oj| z0l`L(4mNkR)f&>w7kxt&MMJ)w!xdPuTKkZWFw-%@X-2(fw6bPNKj1x54Pcd21EVq0 zj4{sMHRBdidQ21nE5&?eRpv2o?wWz{e>34#neHB?PIJ3j3jA7fW&RAy=JK_XUd`}g zIY!N!;~@i_DF^fu-Cp9Sa(Hn7%5r4Ottb44p@GM?V3n=}BU=QP5*(DWgG8x!5K<08 z-a*1Ua2M5ok%P85vRnw-<?tn^S{g)u;RCM9F_$8nCgp%2+lBNo+_r(^1WRML63k`? z<BQX?or4%0yvh6t#c2>93g3Hka|&-iNv8qG4tpKgiH+ibD-9bsn%M=Tb6i&jt~Y-5 zDKVXRGjdGPARcGC2;k`)Q}ok0Hs=U@?92&NifHK1QT!vUX^`V8Yh06qz*A~w@@j=9 zk`+CF`c-ie<#>4u{?vSSm^^~MD%f49^luUL=z0F_>Mc2vuE`DL-*N(;wis3|Y6=A# zuilkuM9zA0+&EUvxE6tZ(wc@{C9AGR5s{&JV=!45&J-4)c`JSe(0`Z<@|`l@fL~kk zngX=TwGWA)e#~V7piV0*0CiF;766(%f%g6cdyhWhqx)arxQXK2#vvnp$#ar}M4lsf zB{xvUNu<=HrJP{Eb!?OXyxh{<wt_e)d}Lh29^7Vok0d`xsLx39ZP5QiErR}Mu+x%f zi$UDOf_7=(Dl1rJLPG%j)e72~LU@ogi9iduFIQsNxNlP2Z8AOE%uLV@>7~VgZNa{J zIUD3Rlq-oYBG@b>!uH{!++m(W?Y@?$CjwY?3On*2)PsC9%VVRxd|egtC}5JEJrMtH zg-j<go_LB8farLN2!I2v0K~OM0GwzAAZ|4R;FG7=7al;ZFcRP@C$Z@@AWrL3xV&)$ zcMA!)*SZHW$2hV7-A);owvuT8wi4yl#qiZmoD4B`S^7hU{fr?kDw~{IUyx3f4n@*a zooWOiDU|e{bBgP-`bYsOtQK9sZ>{ipHie}Ff#xEdOQ#cf?ZihuQoHVy$~xD%QcLo! z>y2c$O<ZsDE_w~|s=c)87FJDeF{->)R44qxf%1>7<PukzHz~l|Zd$$F$knC;>tkj` zKXuY*WohiMPU<d7^-m3jJ~@?BsQC?H`_qK3LY}SU*;U9xN^ZrW(}`DnD$g)r+NtJ{ z0kKH<F#FN+K~y^}up;21FRLa2m$B-U;xvfq!UxQ-d=L){{~PDc-EEW+>-kg7MG?dn zQH5Ijpeh3IWNFNnraHHlSZ}d30^1yxMgXUuX553wJ1sC*@Yz<Z0JopY?HT}-HbnuZ zqXSe&2Urh?x%*VU*bSg{JCQDS816Zh-zo=dlD<8I`u0=#MmQACb@O@-c^xf%2Heak zlLm-s!Tv{RSQM;c4h>f`D+;L7+MX$(TD4{Ypl@r=-Mzr_KEkvPxH^S~y@M=##p?!P z0j4ln0Qj|arC0i$LJV-IHR_n$JAFuL`|D_iyE`Qa;5Fd_wu?K!2f_t>-a0V*@HC!- zl?+US_!rBQKbg2{8A0_Rvl3qFy88kRH%T6VcO>FFE~4uSzVz1YbY=nSx8c_I19om> z+XAZg86p85dq$-f6Unv%yNLm;X^c&;Y{LS;DklK-z6b!;Wh~&b4!ev3&Sl;Bxhk<J zdxxdE`9c*}iW#8jbl$)DX%G*djyF0>dWCD|H)Y!hJB>z6lJxM;cw-wFO~_A!nApa6 z0P%1e<pCv>i-&Sk4Lkt9V54!p(_fg@WrZg8PU{@kaE=9?jZ-4wZkLdNPuSgLcP7GM zyUY}zxoE<6m5^4kuPGb9n9<o302*rF8M?A=p3==zx_JTJsyh2WZsdR4x9{3y^v%v; z^-vd{jr-dO4aLwILRZ$!Q@VLdH?NYen^|k%7}hF~4osfs5c!pOYA<@0n<C8Rt_;hJ z`Q25ug}#tbKG*Q#PXLC=24#HYj6epT((sEja9U5nvku4uX9Rpf<4blhxu)iQe@5`M zI5QMF;mp8(^Q?qsH9Hf|{F{uPmlxnQ5z{74>@V{9G#=1actZ(~J*%?3pUATzA8Y9G zUe|4&ouqqATRv?74cqd%EKY+sL--F9tQT?z!C!>b4nE~vBY?l1X)eYf#6biOmIw(4 z``ZRux6@e_iq+TBM?i%%0dP>b07<e?Cz$}8$7CGPtu0@I2ZnRA5&dP6loRX_5^z{d z0oi8-<_?{j(>6F!o|jhz&%ZpdoW|vC-I~&DbP=!e(8IfWW`<;KTl<d6IFhV2Dc537 zNk4Ue@j0=-WA6~9zcc-;h1cE21wJY;kxH6=R-o0Eg%W^ooE2D}9ckEEEC83D&4tzc zIgd{2c0y~_t7IwFwY;7*?k(oMjac0mLwfmH!S*4C`&q4Eu1m-5?5AkB_N-uB@YV#2 zf>k1q)go8>R3q&Pdm38nnzHJuvg%eLud-|<&sK7`o7$dj<#}mf$2@K@()wA*E+#A0 zcJEY-T1zp#&&U%8pyA<bLx1f8=cT*&B70kZKaszq&*mQWA=L;6jv#)xU7&NHlHxvT z=04Lz+5@(SM52YA#0GG#Z~<L1;;X%b5(aSi*jR#jLITR@-*KTr^R{8QL#vYPuv*&Q zFj`2kOGu=1BWD(!LGXx>>j<{x1s0e$j{t_sH1(QA_@J;KJli$2mz@&Os)_EwvYu%^ z-Q8xV5p<m$XpIx{a49Ur=4+b9AXjpN!E-`BXKbCCwSR&lmPvB~Yue#wf^atAdjdJC zFHaaL`VIW9U0|C`qG7T40bJi+mh7b+LZLw&g3A}GCGCQH(DKxR1Z!G`8Unw?YRN4G ze-{$)k9L7Y^$`vK!mJqJ({{lWyf|XTbnD~0`VUhAr2}Xv6%6i1c&VXnWh!H9b)>?T zJX^`#zU|)L%6-MB(YPyT5;=|3+jGPStdkuA71t!CQ$-OlP~r>#4r$MKMz^Pjm;hmV ziV1gYnzprtLz8(7`lJqCZtJyjmGpp_g!gm^CJTQrat_JYjB6sT7j-}56%%g~)R#Vb zMc2|fG+ZNv0w#6jhcEvs8|3e^JO(J}$kqU;2A^2GZq)0>wXT18Y>m-Hbza%!zm|qC zb1vg{F)`#E`>;Kr;9Pq8JJ$`Z$w<-|-HAg!OwjIJCZYImAv1kb$$$o(x!)lzKKdM4 zSilzNaAtt^hHW#*Nch!`QV*~_TSdKQG*go@0(>c%0FGmu7;KVk6G=LAcO$kN`l1Lp zn#l;Dl6lOV2Z~qGeOpHd+dA4BTu&M+*>mDkf`1DM$m)cntfXdma?Nnl$#v-{^L<ai z(`V-fmf8%mnI-80mPm(|82?%L6R2=IlIJi1Uw`dn`0!RDZ7ea4ng5xaT^Hq5viXo* zMAnhyEor2cPNL!S)><=H3Nw;kX*AT)i;Qj%mw<VaAmSd|IS{*$B)5tp;9(|{UeT?V znk4BWZmKB3N;w}Z54<XyL+;LJml42-F1#*XmFE&K#^M;@UrfepcM(ms8muB#t=CL= zO_vj-*GUnh33dw!_&eK=%l^BuuO}~;l|;h1)2q?-KR4UEa}Ah5ihnj6@3=0mf>5TM zOpg0q>j=aRSsZEDrE)7EK2><`q!>rz2gC%hPMiZ?>|$To0rjQ`0B<<~s6UG_;AhbR zRPSnaK-KHYI)IK{1KA^dDVxPgmFpP0{!s)!Dt|Hd*NC0O8X12X?_`nsGi(`sMwJoe zGCmN&2g+rXUDjcj(K^Pv2tehCAV<aWC-(;~OLwF#qu~q8O4$6=(kXSx#k_NOp5@c< za_JS|Ad>}vpItve)jN*`fClGT0jS|3(Egs15Kk#5F?Q0Pbz^{w&$EJyos&RP4@eUL zKQS5qN%@PiznW|o1=MFUUSH)G<@_XO)W#$oAJBC$M$V>6+W^y~A%MGtdzZ^70x0W> zn}&(m_%jhmq%ONl)HTt`vk#p>yf~AQxCza+<3sKvd@qoXE#e;VeOK3~u435LrSF;) z>J|zO>jqZxD}qzHGx-|975PlQM9}5}CMOfj7jj%rDzzt*O9<W+67We+KIZ&8Im;>F zy7RDk{VR5!msg2LH}3u$ww)-a^Sa@AdmKHY<B=Jo^Skl$cGIx1Fzm@SL;x3dgX2kz z{km~B{ts7lGR&I%#6Lkj+FOZg&f7HHDUL1c-xzX}B7i#G5o>Z&AezQ+30~fVF3~;A z0R2PbcmQGwcQ7)=G!xdqqk9^i#zcH+2j3C#Z#%F#KqIH8bPw3BXCTD}-DMuLLbZNN z`&?)czQE=}0|Z^lxkLdkS^icc_Syl6e~VJ6rzA<_1q4wc0iz_rWyMQe>SXFur-9Aw z6w{}0=!ZXi6cSUcB|Fa4!;Qby(GLMuP8-pR)fI6RNhWpo-!ooE^d>d7dS?)?pG;;y z=P=<Ny3-HR!J;^W;EzHAR&t{!R7<aP8MjM&4{lOUF`>8{-d%LC^Fe&;gZS1(pnKjf zS?E-gKAO8a-9R%wy$4tY)BR#xUF;VC4KUH)+ku}t^>*}RV@q|wQjUQLU?h_XxcIA( zaPXPb{F(8k8i<6(iYLJM9{48LMB0NbC+`T+gEknGMec(p5VWzlZ*1bX#rMCaa4lj= z!~9EIwbU$(+sN0E?BVo3G_wa;JDA}Q`BX9tGL@;VxRq;I3^48jvqx0dWy3tfor*o< zCt#VIfS7A_1a><w2&^d|A_3?vQb3;z<Ol>tCD@$e-=86PIRAp+G3|MI0p3~SvS0cv zqoB@Adwgg=o|jjN7dY-$QBLc)2@{Ib>s*q~IW9R1f_a0rgiUJtjRNNMo_x5v&HiqF zDD;<n|AjxMrDgtV=6Z|0_1Er_GVs{*d0TcOC=l{ETBD76hz78oEZ^hF?Wy^~2Il88 zyHCEoqPp9K-6jM{0Y|gj7$PKv^fs;mQ2eLZ)HvT}6@g7$$cG4?WwPK;1Rpb*0Q}{A zG^wy!8pL0P?<2UvQN~3*0ztvLyhlch!91r&u*DzI_^Tdh@dW<bCFp<j2)O^qv7Gxu zH2kH9OblJn)1a&6vlXCvzN}?noqS$+{&IfE=prJ1aiE$}QW2pdEEn+vs=mqjJ|gJm z(mz1X`4SO$`uQ0VPcXVRVsoRUBA(z_F5+ZL;3ZBXjwSsaFE)3*Dt6MCm&UZTjHMAs z_sK%tXB6v)CbtSt&I`-`Grom6pUl$v_}M2qw&-SOVx=GcxR5$=Av*-z(F<e}kb9B6 zKL^$4A{GEHcLMFCB|C`$ZtZ36S8i2qV$KbVw4+$S(JkyK3b;tL*A-vnGKgBk!0THV z7(47a;7Bf`08rXX*uX==Mk433w*u=}A51ThgV&`c&^(VdBLI_+f6bu_3TJsd*W{&U z719ehEC0rn=jB!61zsHZ8!`SVSpb^$!Y%7W^A+T)dr6I+W6e<gTNj$kcwJIy#5KnN zO__`WuI^=2tS3^*^%eR%fMbjuekjQ525w0nC&o+cAOUz&Vp!>0G<=6m@HZrhc%S7F zz?YR(zv`7Su@TBAB@+O6Hp=qNDJ`GH@)#hew@gq9M33Hfd4Z~anGu1Qc9|7{dZND( zfw(kcMW7yz7!io2P6X;rD+2M26M<?RH6jqmIk?IjT|$psm&h8}OZdH^frl>PRsyoQ zn8M;Th&sK6PZ`#T1eebZq&wBP0Ip{j1)clRvt2(XyHJq>E)xylsLPnWnVjwE&&@@7 zj~TzHXJ>@jeJJ<gQDFm%qHOrIDNAROO+H&)Chv82Xq86g9isBaY6t&5CnnLB4t)0# z?$pOAOc64M066V3BLLCjauEPaE;j-YdHqEIyr91kfOx_PfP*7OFxX5e1h!xn*y*&@ zn`QQ~TV_oti8kD{2;l6?%wI}4C4IJ8O(a3A)zZ%H5m`v8vqYXuZo6^^6M!Dvo<ex( zVH&D#YnqsT;&Gyt3lj65W8QP@WYcXZ1Lv`?*wfCfyOv-A9x(?Vuvu@hLjPp}wByzN ztnsGpzP(uNfa@>ucA4`AepS;3epRyuepQnOepPd3bIhDFo$n8n%dfopBft9Pw7_j~ z9;ijIz-?n5937QiOy+hEGher3uW1MH*NY|8#coNL9%)IJ9%)IJ9%)IJ9%)IJ9%)IJ z9%)IJx(cdOnoaqnNH+Bwu{@<REl;WJ%2O(%@|4P=T=%g&rJ|L)Xkl_+lcPmy`e>_l zwADJ=Y8`F0j<#AyTdkw5cG0k~m&sLQnOWl`FH6})&V!}ivdmeoAoVh_Ec2G@wB<T& zxz1V63C67C`6aV7!lAm$qw$7rMcA<|-i~ekc5GW<$F>W0Y#U+6Htt4B=EjRv83@b+ zy9{}N&@bA-CbJHCVAo!tTIID&do9ym%e2=r?X^sMEem+vBt6{Z1FX;iR_FjLbbu8) zzzQ8;MOA5U)?PPjubZ{k&D!f`?bY9eOzj&A-P@PbwybAp_;Qf7onr4dCogc=#b(ux zyjYSVU6s;moziNZ(rTU3YMqkb0gsWR4SdTG18n4VOpnwcUKjoWg1UW}1RT@HsDNl9 zd_aC5Ng4QNUk<Y%wUdZFQr?4?hC<seHT=I2@#Cdp01Wk$YZ^gaE{pDFKr|BmeyZcQ z%h?SBS3x(5AnNpIejkD>nT!Dj_cvLB7}-B?X&Xuz-o%MV0Au?YZy@dz{v3iSoOkp{ z(_)s#LS7!JOU+;^5r44*5MN%(4gqGu7U~IGs3&Zpp0I^_!WLFq`jl~YdXqVNYGCb# zbF<wItYg^QR>!b6tBzqW0FGgAOdUgq-p;!&naQFD{+vpB`mV1Lb*qW2-6j{i=55k@ zYm@HFCf%1!x-Xk_UpBeEv>=bU93TO>g306+KGrfhn|Vzq0gd_@K8Vh|(2_O-B5iyk z5nYy95?~Tp#)*uygOMgH)t$3VBKVY0?ceBO8W|kutr!?!!yJn%Zn*O)wSUVxi3K(% zr)e{D44a>0*d95C?UQ5Jyn0jA%X;(YQuqZf&{y>4uRd%_g@e!iy^T!22x0n&`2}ua zaTM{fQF(*7j=BBwCt`hZdBBln1y+w`>eaK;^bI_q96M1v8DOK>K8Eh&_PmSU*r=-L zmKBI@nL0Yoi@W;-+~It9t&f~pinW}N5}L|YM7-M946MdRV*W|a7r@DV@w`{E!T&HI z6yEE@AG27P3ZK)8uA||W>GzDTx<qU=tU&5ujPA?U3%qrvG+^=#F)q9`&=s)$-8VCb ze>=s9R=n`i42MZ#Ol7^~HggiH{othuFZHj_((u7xGL{vHVVQc0nz=0;t;~vRR*t#R z&T(Q_(OlYMPhS>r;#qOcns=EvndijL$%{06mBn4tnLOp?Z5sahvS1OGr_?^B;oqxf z1$ttc+TFisT>J81CYGoCVc4Q-Rv?6B>Jat}(jV;i=eBzB#~-FHh(9j_tVNkS(leDm z%T&g9(?L5&E&zas<ka7v0`W8-!dTF`)zZjg)8&d`J>c1+(Io+=mKDgzGIb{&r19hO z+yeOHB{<XZn%k7@aLaJ}R`|e_)xCw5-6L}G*^sJ&xhuf@gITbDFbZm|mC-ugA`hQ{ z51A|g+#1V#>2)h{4@JclaBM8F&>{X>TmdS?m6gJvX3YMQ@_@QAu{T4jW!Wl2Yj|vE zT&P2<DWR6R*>ZU~mY8`leqqvZFuJNLRWOIpzXmMeh~co44lzN!BOALZaR<lL<!`Ww z(9lQFms}g?q>MOP$40AkNxhSpe~Y2LC84hgPb?7H{s-P~v8s8h(K$qoF5sB~EGe)b zEdlkK2mr4;fwjDVIDJ?l1}G@NQlh(PZy2+N%(r$|5aXr-+zXV1!s-P$@UP(_@VnhX zUH$(0e@tu#alT=N2%z==-lBlI1MDINb)pCWjR$0|UhgCZsKdI+I?73moiq|bBjv=u zoccW+utEg7CkzNI)q^BGT;OktK-U-`pZ^Fhtb<0Pu3b4a94!6-N5}aT0W^-=T0nIZ z0br;TfSSyL2;lC)fg=d6Z)VpqfHjM;*|TgG1MH0R#0&;*A83_8eK=4gKsXO}1^y!g zSi?>9epf>@-=s=p4wZXhg30R%W(m2MAS=maBZ9t6M#d4$749;EkAz!~GUzanxxEQ) zV=}U0pkz$kW3HfM;R+_tCm7FUWGcb)LcU7yqmZXw843-!l68j>%wsb08o}qn{ehs> zAm$DuxRc4~T!J@+yNjR(cRSLMptq2T!FCSZ+UQ9Am@56P37jsoHQmgXZe0(|5x4Uk zo}mZgLR<Mlk{xS!jZJSs+i3%BCraC`GgD%9(Q?q}_wU&qL@qLam09kQ_!1fx1hqWN zX;oFve6#duGuXAJ_C=YKM!eLuHM5SnhW_Y3)bvGM79x1F5=ZvY!T7js;P3l8jeK-S z1giHeSN&KT-WJsIET{FqlMj|TXsq$f+#Xl{e$PkV@A&wNeEb;9+_PNfx#Yb~(jS1J z&r8Y=DOdVi0J%n3U42Jx3XT7e421D47v^~yu2*3|Z#hz!=Z#Q@`ER>`O%A%o;L062 zk#uth22%Abm+Al-4jSlF1wDG;5mFssggVv#Hoe{%={--nuLRTcESKJqJX(1J;^kZs z@Zwp{OJ5pBukb~J9(KhMitKBIy2#lyo~s;yUUDP{vyD(Y*h=F+D+i!IKazv3MyMV9 zSVi#{`>R7`mMeY?4JTjeLxaBS$|HmxV}v?1t~!~a%Zaxu7}~R3=wE1<J;;X!-Ehzm zLPNRXpkU}$gKX$dPHz;ACl3mQ_AD1VO~a)sH0ZTQ3Y|7W9eOW~zfulBA3BnQy+)`V zw4epwda!o@y361rIA~#n+QBdyk5Udm-+Ckm!;DZnm_y^`a+L>McD1~WR}5n0)%Mm5 zRNWy)1ft83%v)19`kWob0DrlPwO1E|u#RHv=&q}c2*evs1ghf@BkHJP#Hxr91#}T@ z^|dWxUV0T5$T;pQ=*9svIiJbJX%O!V-zGz(4X&R{zCa|_i~ufU&BREPG?9R<Oh!I5 z_Uf8ni)<Q*c>`yj^yW#}RET+nGf!Ice6ks6qLZW%OCx}eb|S3m_oViVr~>**e^<Ev zX6cXMz~{|Z1-8aO(;t=mG8%3SYI#;bYdQBjFTLD}-F;1KihYq32<US)G$&bU=<KT{ zSN+1w+5eqMprU;0$8c#6;PPu(zPSj*1J~Mh3Tl%Tf%xv)%q2XNtnU*?fERfEk#_h6 z?{;+&9L>L$wE)YnwOY%4gw;jXr*(uD0r$z|tthG>;(!D@;N7n%QeIY6@}i!HF#J@O zOtqo3w}&zbc#X*j;EkbhG_E)eVz=<SUK0xSx`wp@v1|B6&J{)Y_R^*zdencPIA4eY z;KX5>3SSWC`%2skDCyqZmm~lM1r<=)^U^rLdeL2P>J92vt}@n)((k|}#JZZiiA1tT z4Pz33WRFMx!{L&3MgHXxq<mP^kmnSR9YY%XgtP(U6k+aAp3+Z>(x7&6%qZX^X)+3V z=31-sj4R7+l|PZ*S3@!B{v*Afmsg2LbG_Bg^)XaY(`%|=Hn}FSyOdtJ(`!wPw%71m z80AIgEewpi25nm#mQKd<$lns@FJ~y-4GzWAf1!E$$LNBgfny-YvErGmfU}Oo=wzJX zw;;kTG3q{4UPt0zhp?(=53Ljh6Fy!_D=P|<TYL(h#;dQv-yi|6Fw|1mU~QCjZB=vq z>y|eeM<^cn{xyL(5YLgt1z0LASzNT#sk+5dWaJs)wOBkwHEU^RlV|_Fn>{4@VOSu? z>Sn2<1mG7ecGnKDIu8r3KhMjn#0xC70%8mt7F<FYkK-6oz%;R07_c$S#Z@tVt>cL? zMZ7P>cE>8f_|{?kJ0FJU*1_oi5O^gq)@4=z=GtL_1+Vn{X4yoHH!>>4cw5kRlVR!3 zSze&F8gvRYyf)Z&&Ã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 B-qipA literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/utils/.libs/rec2csv b/devspec.en_US/project/recutils/utils/.libs/rec2csv new file mode 100755 index 0000000000000000000000000000000000000000..70773a3feaa5da8ac90c6ad6bb6c1f6e605f08ae GIT binary patch literal 441336 zcwW4{d3+Pq7C1iBPRjt12^h6v)#{5{v`QnWjnrp>77!~2y0K~5TGCqD+D@RnS4uGn zG7bY(abF%P`Vf7JPepKTDYW3qrhvF0ZW97nT-s8W{LVRdCP}03`~Cg?`L&<voilek z_iXpvbMH(S=j4vzd7d+W;<$JYp|16UI2_W0Zzj_7;am#WmrLcY;Otx?!EiM~8MsoQ z0$vI5On@sMu6%&=mk1(WX9Ik;k;fYs{Xkv3KK_B{@WT3>mF2HG#&fG05=Fe0LxWk6 znP}w4AzqMw5c2Tq02r@CqYu2?(1;uQ#w#1(?5I4~kMbPrN}jVyi6UM<Kt;UF{E3jy z{l!lr>z<ng`O)}QKwo&7;~QF0Hfw0boU1F!Dm``A)K*<{Ez7eS`C}&(P<wGkn<*U2 zw{eVin168e{W;Iy^!#x9tBKj~FBjjjeSN{mnUE(N<@>>P36Hh<0r<D9;apstkF#2R z39GGf<M?Kd6ZtriOKqOHBx#%&$L-8o4cvpL<GA=nzU;!)mviZs0sXivK^RoV4IF?h z<nFO%#q||@>v&<c$fYbfx6vjdo>oA7o49%Q3@$O7OA)lytA+kTqLs#g_{`_n&jPsW z;93aRKa6LK;A({H9s~Bm<%7!)*HYuzy+*3QrNXrWu9aNm=YAtyWuy-q=_7DG3fE&? z@1Mtw^eMQWhU;H&J!?FB4zA~o`+vjrB3$d>dMT>@D{!rc>%Rv4CR`h$^4~JjjZx3u zf$Lqk-s5`zd;nK7TrE-0TH)Gi+_%BC4X*8QeF)dbT<@PxqwYV0YnO4q8?HTY-Lqp; zX2G#Z*S+}UiPn|7jxD)q<n#|lo;$d8j%}>|hPeHr@4u+Z6V%Jslz#nd;Ocn?#vi`y zrTZ6OkUjs3D-SJv?&`%g`yct&sUPo-8-2qiZ~x-D=gmj@Cp12_^t=lzKHq=xq3UJx zf)D(2`$Y?-QS;^&%(S)*ICzs^d-b9{Be(w8bl&}+yjt>PZT9P9CYAiKQW>4|`H=%p zW!%60;eA&=5p0^7@vEBLR;Jb#Zz<)j*pwT${kBnmJG}ds0r}0P7j4px4;XmgZGY>x z;<bN&@JjR5r(XPWVd&75$Aoc9vj21I_s#q7o}4WGGVr5se6Pyo-#&Ke^=G>Vz5V?I z^#^WV({Iq_*5ciX3;x+Q`}QMauKwYhe^)=ad)k1XyDmIB`^u`vhPUh+`E<uu4d-uo zXXz)ey%YL!@sJCbCx84=-I=*v-~Phi`bq!K(so@}I&Iakb8h|knM_$Y9_T;u#7on6 zTsNcBd0zi3&+c<?$HVo*);-qw^b6}=zWaOUc|ToORr}k)o2(yv*nZKqTe=4AsGD3j z<?sa$&b;4$>DUzocl71vUl_wO?nK|n{UEp|_2~_V5_`kdG3Bojd&5;iZ@98w1Re<2 zgeVyE&x(L#E2by(&Tot9@7Eao?uzOE{+Rv;#FXC`)BeyHe13@;Z(3x!A$U(re*<Ii z8x;f3jcMN!Q$H!D{BJS&3uEYaYYhI2Vqkkr{Ub5>Umue{E3P;EQ4GCC$KXFLhQ23a z%0Cb@p0P3g-4N5>Q!(Z5kHNPmrv3{t@U9s6tQh>(#I%2D%y{34&5!R5D>3*M#?bq< znEDGMAmevT{>B*m9_J!I2uIsggiB-KyJF;XNK}3bTop0&xHeXQV&KIw@VXfIqnP#z zV(4*m3_Y)msed3Q|J@jQIS|wSQ!((N7}ym9t1<lzjiK)cG4y&OhJVd5@ZC}EqrTl9 z(_UOm|H(1%pqTa&V(`m|fW)u0G4eJdru?lj^cxUU{^FSOd!k^(KNM5`<{19vMnJ;n z&6x7P#K2o(##<NzD=~0!3_Lyt-*aR5^IlB({;~Ekh8|DG)ITd`d@Ezx%a3WVe@uIm zW5#<)OnW~=e$)4Ym`3mbt_SQ@({4c=Z@~8<|C<HzJp;ZR@LS)SAl_=gbD;eCO$p*_ z2K)+?Klq~{iUxcU$eZh1LA=m_pM?I>Hz$bC7_bM@)!zwXh5`Q*+B>);QB3EM--Ee0 zfM@Ix#6lx~1GGQmkRWCn@CY2=UO~(=;5dMH91z6I4R{ggXUE<I@hJn&0{9?|&u+lC z0)FZH6R1CgmjnHpeiFp14R{aq-}t#8USW<0+V6nztuo-7alAhW;t2!(8qyh2^htyK z<~<Sm7327U-ct<tHlXK@mIN{1q#yKO4ei}*z$HM)ta}ngf#`7oH#3Hx(*Zv#l)uI( zzY_8f0)2-Wa1i<Tl_37jfUku788F_fc?LfM{Wb0v#63p-T>!5J`dwwf4}-j<K>ygE z75K3j5Xssd;b%Lvm$FX~_ZslCkiWwl!MCh0t8c<rqP^T58Q)Cg&%OllS_9q*^k@Qn z`@}JL3shVU>%26oe=c_)l;6{tAhPjG++4`72Kh1hR|54`Jtr9X{kgB8y@T<IVk*_Q za$|8m-jX2RZj>JcaMlkI`Tsl0!v})cX29zqe>KRP-+<$xJ=gvSJ--Khgsuc*d{*wM zUi7+v`vc|miv-bUl;4X54@LOD81UWkMWnr1K(855^m-B6+vAP2w=E9kIU<iK(0&up z&us5T)ZZ@?#5EQM|AO>65Gjv(`tcI8{lVOP7*EIhf_RRRUk&5Q0(o3&z$>7AUlcyq zLwPIcd##b*0BPeF5q*0a>RUgEv^N;>f%4}Ya4yJ;>x&3J+0bxyRQunfJ%Rj-jr@b8 zpAlGtv;*jQ+<@PQbUo;&so&e6{tmD=4;k`31@O&^lIKl8zvjIWdM^chnnB+`FyJPX zPw4M51HKgC^eFu)!t$WMV+^>Ri~OKI9)WAdmx8$8$ls6p(Hham5RAvVCsMx*^%3;p z5(7?#{$_j?8Sfel4m2l-=NRKT2PDBBMX&o|d^13vPYz`H?;!m^o`)FqcR_x7l>PlD z+K2BVup8wQ=rPHFxr(w`H6^n#a^m2MZ^^%{cuq-8$=tG9xuholw$T+;l_mKzXH}GN z#l>^yRaF+($}?-^;$p6N{QTlcM!C@yGiz&0YFYKatPDLASI?}eEvYH4ELp(SRnD7P zQBgIUyW3MGm&~l0TU=Q@uVfxqQ(aL!zqGohtWqweI`e8v<l-`DZKhm>RqJG~q^?XZ zE}dCc;i)N!)Gw_mVZA`r;@R$!*>@GsnMLi@loZdKDbIEnUmM-qY)`FRHIF(CKb_?% zEiI|x>T2bhIi6~>GGb7>uu`5`NA1@jjA(HTO*X9P!X^P~xjJY*s-@Xg^Qy}#N&xv< zdEU%w)^RcZEvuYcTvaWXRaMqTlWI;0pi;Has6Q9$b9L8N)|4>f;p3UL2DPeZ%5La> zX3cDOWJJA*9Kl~+SY5*5&20C~8WV%RAb6Ona8=dJDV__NrDY`*bBbpzEUuh6k7bsY z)Dc(1^-C&B<`u)hi|5RgXBu27lOt&T74c2>8^eiWRjs_R0*MFG#MRM=iszI?v7Yi{ zK-L^|JZBamO``^!Y2YT#GpnmhD(4t%s0>$O1Drpz!o%1)Z&r<5wP3c%@6r+(sW!Lv zPdG+B;Ob^G+SgrcatkpqdCiK~VLJvZOJ>fgD61^#C9x*oOX^Byhmo!=`$sQzsxGOi zsj7*hEppT(CP^fTMBP8kjtm|dgAa>DZB>mN?gZ-3!nO&o;#p;tGiw$CU7{74YH_nG zs^GR(o>S$KsmIES;)<D-bIU4At4#V6#&z=|{YUYHoBJoKm^hFS%`2-64}^5EmzrQP zXn^b0Kr!*A&Ln$;FeE@RGRTyGiDR@HV9R7hI3VYoVrXb)G=G^CnpBQ9SO!-ZQ}6*8 z6;h5r3A8D03u-{!&{!cV)iqUfYi7=i=oZkbtP)x@$W;n|plvXqVIvStE+)F+$`NHG zxo3hNwzFZ=(VIjOJ%CnwTOdQ2z>>yTG%!AZmdUEQWH$a}Y|Zf?HKOH)j3x>fLmcp` zj3VftEKgbG96&7E{`9h0Tq(&c32Se;0FADVZjy|6m;*Io69y<Exrz+~ZQ2LKx$@8E zI$EtuD`w8Ejj|zxA(I`_OX|?jX%Y~V41n@H4k}fa^;YCR)2VE3Wfc%U$90P<$HX?w zBtzV&63**1t6vY(^6l6}S!J=Owqy=hT3X?$b<@*ok4%QikZ&+^6;%sh3dF&Iae!ul z-8I~t*+707C*K9L!4}S&1<nBY0WinTcHc#FF;`Z*fSAV3B3lW6JYZmIxS6xiu2An> zF;3l_DdJ_7^PyKHBBRr6_q?h(&@j3ZHFCJsnH7~DpiS{?;t7huyjdVnVB=sy1_b3Q zEC%wo5TS~aN~}bMIS^!|crj{YWfdtgc8AYr!%SLSTnbbDO!@lZTqzL(|JG7&^+K+c zQL)5RHfQGS*(J5LXsW6KIj&SL0nLM2H6`<^=0i8LYH4~aE;gGpv7Lo|A~A9D1sb5{ z0_6<xM&e<kkPqd+@Sx0AR-vO+0%a@8=5eJYnoOjjJEGIPyTG}aS54iNq76rzRa*ii zA@Y<|&i^YC*SdiZjL@ZXs-RjJNx6zRMW{xeksKJ$YNPN4>d>G|u?@fh=7u>a8FQ-U z%>)($3m9op`V3!@GD?}i7n6k}G$OafrJjlk?7MDe@l2V7q_~7!hvMQ{wY97ncmxtT zHusiMql>S-#&ONC@cp&nyWx@i$lVR$+w}0=u&AQwsB<ic5^wBEvXEIq_>MDDA^e*d z&cnZb!grBejuVYC=6zqd%x94wES(r`_s=~=%Egv2pPKiPGGaIfM<&qd1lnu<|Ne{Z z{PpwyTh0G_ssEKL{7(q?bVY7|AGW`XKeZQQ#Gx<uN<a2&P+8eoNbk1|*hX+4Zi@jA zBsh`#)PNtk|KUXB^*#f(Qog`_Z@}{T*nT{B)PT>X{5bA}5m(!>I8jV|9M<fZZsWLp zn6BiwuQ0s{)?S#d;J6<!eV5~OOkweL1k*b?iX9|8&SE|ZE7;mN;a#@oOZbe%1`__m zahAqJu@A<6Fa?I%Fom^U5~jfFWK3agmx3vb$c`xpLMo<!YZ|8gVQq-11<w;e3M0wD z6qbRRm`Z>LrZCWKOks^V4pUg@=3;s_tmQGaaa=y8u;`zR>A4&?9n<pwUrduYZVsmB zbDSH~!LZE4G@0Y7F@?pbjOj%jSBEJqe(Nz!;kZUjVR7uk^iqynhAAw@mt$(@xF$?t zvAzn^%Q@~*Ot0X$CoxUsxYd}#Vt5UvS9081Ot0d&moZI)wKAqxbKD!4Uc+%4F&)Zr z?_!z`Ykf=|9JdA2YdLNkreGsJ#&kIF8`JB6-<Vzx{KoVK;5Vijz;8^Qz;8@%1b$;W z0{D$-CdYMP`ge}|9n+gRt{c-Vjyr|vND!zckd6Wg#B?-BGN#$Ue@t_L|Co*e{$n~8 z_>bv0;6J9f0RJ%^5B$gUR^UITxxjx+Zv*~gIsy2P>FvOOOkKc#OeX^WG0g-1W10{A z$Fu<Wk7*(BAJZZ{ZvyEQ;6J8Qf&Z9J1O8(=9r%yw9e6GT(qiC0rZa&5n9c(JV>%o7 zkLeuXKc*$Xe@sh(|Cr7N{$uI}{$pAO{KvE$_>bvbz<*3Dfd81z1O8)L3H-;j3iyv{ zHSizPyMh0h)&T!8t>w5p?-5b=f+8$wo&6Qhsot+bp^(2>PSC#rE%I&=r?qnCPv|-U zxD>ifY-I7d&}FEVZoCZ~gleJ7P&?h27uZ2CYN;E|MxdEs)K+&A!s`h}t#zj$yqaLt zUN?p=15E^@7P~Rj8E7OJwb_lK^FTGhsMYQ)gl7<p+U*{Pu!~^Sa<>cNEP_$n-IEbc zCm6NfJp<tsf>Hb3IG}))V6+16YJ@q0(Hgk%*h!${48mv?+>JDTg3&s-m(lnMMl0cN zqVW@q*24WLjh|q&8t&CJeuB|@xYyG72}Ud8UQgpE7_EtWBaNS6v?}gq8b85kUEJGf z`~;(waqpn<6O7izy^qFEFj^h=K^i~7Xnou|jh|q&LhcS4Kf!2?+}$+((+Dpo{_{9~ zf}4o{2=5?x74aY8W`Z9j{v*7e;3tXy2(Ko1HSr(eCW6-x{}FB^crEcC;c9|kCjKKl zgW&bVe}r8Gzd`&*IE&zo#D9d-34WLOk8ldX&BT9%tpsl&{v*s0yp8yeaK|ZxKPLXu z_zB)Y{HO5~yodNt<0p6@@t?*|@K?lt8b84YiT^Zyf`1_X)A$M2iT^Zyf{zgYY5W9t z5dUfX1piL_r|}cqP5h_v6MTyJPva*Tt*=|B@e_<z*xf<nCm5}<yPL*;5@EE;ZuGAL z2MI>&>=qH;K`>frw-w=Lg3(&LlMr4{Fj{SQ3c{-iM(gcPMYxGzwBqh`gc}J)YwpfK zxSC+J>h3IrXAq3m-8~Lr7r|)d-7bW)2u5q~o{Vrh!D#i}GZ0Q87_GnCjj)wqoCVy~ z2y+DEY~Zd#xT6PQoE6-SG=73{c5pAF@e_=*gu98xPcY6F?ni0-1mmpXUQOdC7-tXn zS{gsWIE%Q~)A$L-*~Gn(#!oQLD(+?)KfyS=xVO>x3C3B*y@SS2FwQpaeKdZ8an^Ak zr12BnNc^Yq6YL}Y)A$KqM*OGopFnsy@jo8NPjD0QAK@JYuOj{<+)VJJ#D9d>6Z|Cc zAK}#muO|K@+(hsi;y=QT1g|CjBV0}J%fx?#XAr!e_>ZuQ;5Uf>2xk$DUTSF*=%JB* zMJZ?eXt{R5`$I?Q?o$QIk41%f6PFypZBO-l^=`qvCX^tSJcGw3m7E_O&HBZCaC)?Q zk66k%m@%NA51~Y1p8f)8ig!zjw>u>H1W=XCczNF9<V;?kyg1v}?73bq0XLGW>9;~r zZ9bPdN4_#s_9Vf>&~@nW>Vurr_;Ymt1fR^zldr-GygnEzJcA{q4cxQaU~qwY7?ysv zXtsC)#MFC}j2m+D;7R2P?kqqGo*#$dD}r60B2vRHS2=HVb;D^y*XnDQ{~q=95*mcn z-~1f5CHc>RZd}mZ%dEL)jpq8X<^r8(ShkO4dyVWMqfzh$mkS7UR)2#0&5GX*%}Ksb zz;AE&SHL||A4mTtX6S29Q0Gp{lDrF{n9CJ<6CtC-t}ZI!y$K1#DgJ6|?^)hx1wnnl z31bM7Pmaz|FT_gvFWsTgoyB=B{oyXNoIe-JO`I6I4##Y?vg}m2mCFE+yu5M_1{eoq zzLS+uTD3Rpu;ejlr+BJM^CP4!TI15|q0}byhP+!Wzdf%ldQyAia+0&0HRW7UIq%Z@ z^%%sLeCHcDdY;r*K}%Do7%jQ<>!2Bx?x7teXN&4brYkwy)SN~o=VLX;r{wHVbCxMN zd(@oeO3pqtr%B2AO3hiN<QxnR0|C?Cy@F9#40%>#5BI>Rl(xwL>0>)Xp~6B}p8jb! z$t?)NP%US5Ip@-HwjhqBCkz}tAHWkp(WQGCQ3At4B)^3AYW?&dMoTuP0l|$1e`Jf7 zSjh*HKu#hYst8lwx75ra_C9B@SLZ!j19w3dP>ee62Q53Am8WDPhE-_|PJ`z~`lT=k zZ!-@luPJoz1R-?kH(!r*Pl2bB4-e6*i?9iAD_^ABX+#!RQRq5cZt8ooc}^K_*S`Wn z7l%A+^xY>}|A-KFrC-bV<ZP9^co5isz;ibcGtbB!-c91JwCn2(!Jh;xB&7}SHbS13 zortv?Gj5cN2;JI0!XkGQvY61G0XD>?FT0MJ6+qj63pS36+Q7|N$|b#@fI82xcIjFt z<3bH&wsBl=jmxDi+QM?n`>8}E-3^7N8uZSEZl~O7O6Z$Ry7qQQ3u%)kU(WSn|J<&y zh~k+EM`r-Hz^NRN0Mz<=D4?|CSfBhI?lSF)pL%{88de`-oU%-Ep@gWN#<-PsIfEG5 z*C5#aUC~v4i>b=kboFSSNYlnc)jVn+dD2#Ug}+nsRiO!B1VTACXjH~19heBYP2uO| z{dAX+fquRz)-NM6$#z3Ntbs9L8XX5BVwuTEq3ly{`=MmmSvVJXF4RgorcArD_zrF6 zsaD*K=7OK<c{t<j1R>HN1Clt7-l=>C^NK5flDoPy0VYKFGqKRUdYvHZYk?%cmp0*V zlbURAWw-2i<KF<+t1&|2?M|FOn2vzM(rh5iPTnInH)e!(07Bb;YbAbcOfk#1bjK;1 zTMl2$@7UQbU+^|n+$9g9idGk^xr@~#hBN!nc+(tISI^m0PSnxNv?bs(9tr|JPc|fq zs@1>ClMs9m^xkauSB8*_H5u?gH5!liNK#0)C+peQf;Iq?Pr))%f8@7Ns9mt*nG^jk zP`t@g-C5l*Yb269Pnql%yMRP9;g6o&MMdep5volNU58;JUFc*&lZJLObX^5J166t` zp&B#K1F>jNz-NeEdxG1z^KMCQ4W88${UdFlDnLADm-BEAO>n1l(Ioc%uV{tc!@JO$ z>>Nf40=c)a+||F5aJpvz?(RFN%zs!J^+FP{1oyITDmkCpfr;iQNq^F`Uj2njZ)2s$ znWaB4OGoT?ukyJksC<%He&wIbLveSxNzKr8c&x=;iNuTtOo6aScYW?}G!SU9{v@^7 zcAUoDKx5i}tvT*xY}{*)Guo$9wd7WfURKcXI0;t>2nyPCyNwi$gp4}Xe<NkHsPqil zdV#eyoq8&C>AP8e9!N_PtEe|$$|H)XP`VxZV)n)gmDjV%7aNG&iwex>`9J%w{p<d} z>M;7x`*Z(Um!h$;O}jISp8vD`vt!!-fVE$5w*TAje`^2WC4X+epa^@&SF`OE>U4W` ziFyvXoB8%^$1Ww?4hkmQEA-Ce%nG#yZ!^Y?7D~3K=*iIE9ZLJ;qCEYQUkt0QY?b`= ztW2JMYX_V7P%HEFqrZkNdmK3*qLyt>b`|Pxm>Hhup&A*rLVcy#qU1l!+EczR)TdC3 zRyEh2X;?%>m;3{<xh=V97IAp~kmUcC>Ht;p^dFIP(9={x`mJNYzv=cgn3(eP@l30N zV~zO*$7R>|{Ax}cZIW+gc))i3)?+yJOh&TmRd8R<6&AVl1QN{@u#}}Rpd=T1Y<c>> zI?O?>C0cy&8#D4FBk}{!9R~{a=Z}TyaxP9mM+C<K=)y`fbfNw*!zR#!ehEpx<7nU{ z`7Z+S-hGOA-$;!hnpQyR5cn;+cFe5Mi{BQt9)^<MfnhhpRXGQv-y`zvDN1YorNO$U z2z~|n&qo=>sf-iKG>lV+KZ48~#k&iIMDaPyDAfOT%p}@YxeQRt137%c^z}V&APpP` z^Z*-7a1GL1*#{Uirfp#T2`=|RvK?f1r$cpRGtGd$U7p=U#<i>gM{}?ht`8UuJ~HJ0 zs3HH~pCmt#^hX7X=%ao?$JyU04+q2v>q7n5Q3GLltby*4QwF;7h2AZKvJaGn<l-5` z=6ysg__-k`IF_fFga&t;^l}^swny71D2K5VPR+N&BqpDY@)$Qsf2hOgSX$K#1ZY({ zqxiGr$Z{*xc+$QGlQ-<EAu*PLK6^a?j%NP>$+we{3*;@ul~*3G@9dzd3wuLRcmG5b zapM+>_O2ZxfJORymopC)7m9B(^osP2j0*H{HPacl*o~(6@5h*zxm90t*r03wBk(BA zuI~;)3J&ZOP~^@#@{06pkD0B=|M1q^K@6>Evt;}5JpEilWf}S<!xG4knXqIF4wSeb zC2xl7b*<UsV@6L7)<JL+uKEr$c56Xqk^cbqNnagAg@6I|A+F#I(x1(6r9pa-2Ws)r z31--%>}#??TrhWzW|9oRI!)ghG=<|v7znJnvh7x|7dKuCMU(AHo4(^P8&$sDQZkI$ z%?{5XW?{qf&>8$z?-LB`JJUaVbdT6B*xoF)!kz(ondy=?9H74R#R2e^^OUx7zCfRS z#IP`n&jDj?F=;plCPX4247^Z(A23q7nY!IR5ys!dEJNvGMy3fTOu{s?jN6Qi>zMnA zls&?7h8a0efN!IZ0bmjkMI?J<Oeaf*u$A_Q(ejS5eHe^2cny2nSjU%m1~t~j)p{(A zb@7}$!PIk$`)}wA1h3?bm`0v1UB$80x_nUDVD<Jal$*Uhm7d+uNR{UkXoT~$d$)*= z=7>K7AnDgM!+s!r9i84I;{b{2VJc@hnwih0R~%#h_9|qFuoc}j9A(aB)U(q59F_{6 z9oENo;jIuFWMctv2Ug4G;=H&Bs5ykDhj%BPP7pPi4+`~H;(0az$-kQo5+?$f3JUe- z5-=+Tv(~b#LVYMaQ?EvE@fqwEYC<!jmbo@~L3n&y<Gk%6%&AmNcEMs2JM9OHARg2f zMwz7afr`?G_{^(4J0TBCY>k5wP%lsa>WEQj>?s@{wE|^9KHg;hyJ4Kt3<>t!;N6nh z%N_%s_X;#DFt(pFW1DrFWJJ=Lj4S{@P`^}17aaX>M(Mbt|Jx~!_#e;U<7l{|H(W>p zCEIP#>qw@|kNwPg<qw<sSx!r-i9j%=Rq0^jKfpBK;duoeSk^+3(ZUA-vxPM11$6t& zkLH6G3N5i=rW(bY{=l_a@CC#6Uvh-mqlcr{PliALGOKy)Css2twYQtThh=~Eli^5@ z36kk1=XktMIvOt9&B{J!mK_Xb_3M6*R5+h1Buxvf2loP4Dd?wRzzKa?cur};KymbX zi}LXWiiDq=d2U%#eM~;6kFJBWw4`+#<fEtH{Q(sqU4J&okZt+w#&@t9Cts$2f_-PC zcrH-AJIHUbK*>6@q~}(Uq*j;abv1&cl;A@D_eYEZsb0j3wZ<0ZzVm^3?fN2UPkV5B zBU${SNuhM8()VYwd|JZCw9dAuoJ)TQkkVaLcm@<MWF^1-iE(6)DwwNUv<LcmG@z~z za6rjmX4CygCEq<9^A3j==#S_o+b3%-UfBumuVqNUdm^!6oL1eVz4Ih=u?bI{{Pu$M zNQ?5R^gxU9YsQD3D?u<V+B<77J06K!VYgtB%}@Zc`)h7N^@5aylvFJNy>=y4_38wh zW}DG1l&*Q_AdPOo@Q3?Hj7N|<H5C;qZF!F7O%`Zgzr6#;F%-t3ba{LF{q~Y9DjmwX zNMyZLCw~XZ?}Zsdw^LC8it2&$cn;0!p>G>|3Or+^4KAMU^F6o1eH`77@!Sm7`D%}| zu};YF3~Q`Q;5=71{(Xk#UE7F6ei{BkH&V`KL!TOZ#(FH_rbfx<Y2LS}<R<v*4fUM{ zMFFiQFxn2!_t18R=WA#?-Ln_k9_HEESeKaY`KYn359irR{j8_jZ^ZUfP^9by4i@}^ z!@2H#<X}Bco8U@33E2vowp@EMJW7Q}t2r|Fxp2FN-Hr>-0TqsB{qH}}G9VxF(I0Bd zwvXiD&uF|GfPW-zr{11zw`13k4ky!bkoUf8$EbWic$AHgmSx+sH19i&)Y@d2tmi<Q zF5P=4SU8xSlfZYw^6|b$Q<eaC4`RzaX24Ar?>LHGpy6%zQ8`p5t#K1;Za9mFW!q;s zIswd7x|J?SMMe+jyLQ|=kRICXWq07S;rk@MU6Svgkb*?o{hiW7Ee6VQ(nHO@ZIW*| z<TcjA_$1$uK7^#*Y(PuyqkQ9Wc)R)eY0JR5UzTgPveiy1%p9qD*$<>0(gw(rHb5qL zp;*!R21DhZeTmdyGE^P~b{6W}_-;Vij!nRo>7sUC`_A-vu@P);l;qE3cx7>t{}T&w zWE79%hxVW|F0%nhZI$l*Bc6tq6#vH3T%_nv=KQz`$rv6hw3!7Sb;@SRzcB%vuU#2H zcxmb99Mw(*=l^_Z19&IOzGgi^+R&^DOQq-bN%!EJE`Y@-P8-Wh{_g?G$hQxepX#iz zi}OWr%4}`I&?~e89u`01{J!)cdnkVeOtd69BcNQZg__2^WywRO4YGZtcPp>7`?gaM zP0H?2I$$s(15Q}Ch5ZYI2|TbV!q7+h0z;cUA}nHk7ob@+$G584vE3Ndy;ng7qnr=d zlYt8;1h%mznjWh*Uy2m*za)gYuQKtqI<^~Rzp-z0g=T1cK<$mjz_W4SsaI$@yfd2y zjt{a^dApVq*Xv0fkRl#Q!S|{;9Vh@K4SW?|w-Oc`XCXoS7_`Ij7^C<n6bclaVea|H znNTD!F4U`@<oi!VT<#Ggcq@lvG0(;RheWXqA7l>!%nRarJ&A)d2Il#ZnggesO>5=6 z<ST@3wcB~;awhRh$Dj&<*#V9_d1e1H;JY`F-gu%fum!RZ2kBmX4OJT-=gf`tHZU$- zE01?<e;cJ1I<=+;rk*Cd?bsf;{xrsmO-}gmttgbJEZ=lsw=W1v=G!j$zK0Y@igXJU zoer-nHkKm2lEQS}h#xHph+#O=?tc@*P=e%t2Ab$()=-cy)yBp-nR3rR7suCF@8oX= zsspLb^$bX0V9lvWzm?dJdOF;%jPO5C|GD3qM66Bv>ez)wmk-<-X~!%_`6%bR==eYr ztR(Y6CEo-AMmJWkI1~z@np;&7j3|9+L3&G=SlXfwP+Gj-@fo?O8@T-%tu(s=znu() z(D-8D1oyp7i!SGqX9(6|MqxQecFOrR+2QHv<9A5D2SvksM3bbgCoA0wW%Yrq++?Gi zPsFGU38&{OaI<oy4RO9^IR!Z%@n@aC%#U9t3<156HV9XOk{?5lMz-e{Qs1Y)AsdOt zQ-PH;%^S4uP3_9nIER>%hvR5u&Io)AWuhh+su(lN;9II%<6CBp$4?j(p|U_0#q37% zPh@!#?+?j+NSC=Q%+|U0sLlV=3>Nr%q^XBNj3cdFYP2Hpy;_MvD;@_@Zx@xF(M^Zx z=i4ry&uj>uwUx428HFXdOz(jS2ZN21ftx=2%lP!*X;<hCx-}9E9Rec5^`~if1zA*K zgc2oxAKE~!C-1DZ3FkGOlsKBvQUY^~@Buz=%*?=v7^YsozdK^35ql6i@G)0yPT8#N zlze{^!d7cRBHfM#Th^UGw<F<cR{}>7%O4YHCe6mE-2Q~H4EKX3v!$iacCodbzW1B3 z-Vkm9+($L^t%Y~)l>9kyXguoe8Ehi2z}ZjvO+WS}EF%2P#)Q<(SJ*Rfe%8O(Z%)m= zCBP5m1bDL3p;H&AUm7nh#q$NwbDCopm>!tlQ=mPOrg8qHvR9c-0SsFJUwk$2GKPCj zFGbvpvubUs^Voc$O}L7T^B40I+On@=W|`ebO(m?{bZrsuJTu>_eAs+AQQ7NlPgi=D z<zK~Xi{jw%+4wjf9{=3O%!%`U*9Y40wxm1Jd02{vMLs|=g9hW5S*}9MMha-*anBR| z8bA!p##lC`j^gD0X5UbbH8Kn+s`TIhq@`EHQ(LivFx-Jr%$p3}PjNzHQU|W4w<BS= z_AELj4)a}{;l3z9Xf$T{SOLN-p8<JY@v=P)r3@I9u36GmCgMXnTob|J&4#Dr$YS(A z-&jZ~TP5FU3<+Zx?+7lhy3fE!GbG>2xM(J{UJ7#x%p(|=?S{GS%hO~zk~P~kT5dYe zZ&td&KgclnC~e@q`n1eTq<fz|O^TTWZd3fb_m1-dt$r?TQud>`N2zLHDm!3e=&Lce zKtF>}McVnmjekVv_nHeQbcW?x+5k@i<GP~ef3T~`H0@1-Vokl|%y$^K!*?PofiF)+ zx6kVR0HhKzW_meK+Mn%c_HUQ`NemJ}SkS|!Nr`yp*o8DE<^+D|g)ixS9W1CGY7R{4 z{FBlvErF@M`bTG4=|NRV0fR0E*8IWjN7!@eVzum03mlj%>7H-!=tZu5I3V~?^NsLm z{$<KGX+vMIe95R~%Hbipb1w?=+1|}4#8%&S&oSk5=P!ybEp@Qk==^Zhs6i*f!%*6k z0Pf01yZB4@v1y0R{ee<o_5Z~KoQ`xuFR(>g`Xx_vVSb>p4e1Ny69dnjp;-j%6CU0$ zuu2c;KsICTfF=e_&HRi;CnpbsM$*u-sLam-)KY>Lga4WFoZJu8RkQVR?p)9T{7S>| zfHyMvBnc)p1mG<v(L+e)wOhY!JaM6P?|6_QlCj-~mK<uC$bmxK&=sDZhVsl^3%iUr z|H);%^iM7$Jc;l1B>rZl-MdvlKhQxgdcgZzZ`q(ZkFnZmPP~D0Xa`3$XDqlfj2Wst zA$qFHx6h&J>K6*51N(4}Tt$t;^IW}82Th*2f&8xMjB)z0UnpZ-U^Z@RM=9x>-C=h@ zidv6G&BOmZ9t!CVm+_=7P*fzAetL?{&Vl>8nH*z$MQPLD{1(^e550ox^E4%&N?Y_- zzo5pfD(CN1U$Vuqh_|#1Kd3R{bv&b4U%ccD5J8ew-UiRK2l1Sy*1$VI*M!q#27K{6 z&FiiL-C<=h+O3Kgn^GUd29$2_&4%pI@;~QV4#vC6xk>u@*y}r17GMI*vw(hCxLH;I z2d8EU+IUeNsxA-!L%VkykFz=y7#FHZL#HiNlR8m3?1E~OL+Pj=N(T@iRhMZ?A;r0M z!8FayYhFA+>1<Pm$`*={p2HM~cFRr-0JO#mO55bA$OPqZs2UA<Zm1d;!)YOA*LydA z4r^Y`W(!Cq!@DI->F5=Q6)}8vwS)st#(|q;@Fua5Dg}a)!v%f>a_Sp^1p3_rInIcG zeM9lDmsvm$cR<hi9Qc^3w8KDPF7tQ7>J(#P>4o|Mpt3U53{N%bxIA34`5mYW$O+m5 zRK8it-mG#Mrqu^i{u6(Zk5XWbJ^z5=MG<S1u^JW_zBQ_r@}c*;i<=L_;(V7TH;K@Q zO}$9jw_A5?#yHF&e)l2Aml*Og=%Noi5(*_;fQ{wb1u{yF)YvX5dxttoP{s=}=LPh> zUn4aFFCjGqqBwM-y^gh@eiEY5=HJy$pP-bj{_V0waiuEb(!5&)=vJTld9-~8@)AMc z_zD|c1&v0LRDWeRkU2wX)yB{Pq4{Z{`KhkZd?9o_>N?KO(D!ik4fL~V6D~y=fziC) z`}2AcHGacOEPe?NTXY}ecT?0iL)of=>WCoE0?cl^z}EC1BZPZ(>?%Utb2*x+Zx{6K z(*Fgt!+<B)QtuYqB+%O=eT0SMrc7m(l-43BYm3x?ep2<aBV;@5%yG`}ZwIlH`@s_& zkVO$eb};bH_TlsN#}6R#|5%5}qp3?O=io28HOcx#Ar`vsz5n?>nj(D`)f=^r3GGX$ z&+0oU@!r#X!$r~ig>skRZR7R(_mB=ck9iKOV+CL+s%VFtOz~wIGTTX2@YMn3^<<_r z+Uxkp*(DF6jl&60N_pMJ^4h)FC&ib{EozYWD-%(AUwV<r`z8$DGVxVV{y^pffu5-N zj^2}i<^O4vM+(Ihf4e7Ip7QkaFLB)CU&L`+8NKwSCY_q{^zoE`CFSD`o@A7Hz%0{i zzaRHcvZ0@RZMq#*e{wh;n(1g(_UTUs$P=J(D8J?bjx+RBcJfe-9I)^tdbebw@Xxy# z1pNO?`<bkLY#J6>)cp1n|Fii4*gRuwm>yI2<9Kge8#~@h|8l%}`ju3^-`cReMb(+` zCwW8l>fVPn_Wc`cWQXz3ax|-?W?+!>X%_RYiDxsI>Rrq3l2q@@>@HdLu4i{Cs`m|c zXIH%&*<GsYeV5&(sorLGm#%uZu)E=^cN@FQP`w|syUcQ4dLO9eVjGKFd&q&Bqx1k( zhud{OJBSE`&onpg`gpfw(N4hj3wbU)zC3*}jjrbfq93-I<SGx5_HkhfM)rU5^uv3x z{D)NDT7Dyy+z=&yA5#80)*j2JGXFjESNuTwK1wy}s75uoCq8(tzH7&KmZGEc%0Yd= z&oE5E4t5zCKwd{Sc^?+^V$fEjn}fb4q&P_@DHzSqrVW6}kfuO79gP#DGayZc6n&>O zNZn{>v8!^v{6-+_xI(=W9VzDYG7acK;-+?)0%}GDkhs-E+=}F|0(@YOZ{rs@zDJ+` z-|{o#|9|-bo=nG!$xp%wk{^s8&0vEZ-TA*I=-vy$YM7^g`8kg6?KL<$8%a)D^riO@ z-&3ctb254QIx2tPn!nP&SN^1bdHO%7{8ZL{i0v4JFR1f)ulDtI9NN>X)<oIUbMRw! zVS8HsM{j#NnA-1oF4lhh_kY-r!+S{nS$U=@B;WV^kMeI*`NyA&w%1{OQEk1C*D`<X zUaB$|sw_Ezt7Fg!eBsWBSHVb7yshS0yj7$rj$JN&@kiLKMa#FROmdaS>&4qcENoL} zLm9sezY=~E*NATOa2~(aoI(?1f&P<OP-$mxCOA5SPIlhybV%~yhvgJ~r>?Z{de=_p zC-0#yNTYOMU_p^S@)M)7<ilgwO1lz(VG5dX!;s?`ix6?o(#CpFEq1=m*&?siU;hx) zsYS*9p$zIN9Zb{z*>1Fktn*}Q1tI4bHD##kZNd$llCE?E7wZj?l>GR8=p|d0bLKH2 zeVWm(BG?stcLt~JM?NNx1U1%%o-prd4sJ61!>c}|opRhiRa$}{Yh!qHrHk~tJ~l^{ z(;Zk8-e+JkV%3Km6x$^&d-Dvfd2(TP8|UniRz44Kz3A+ayidU0khb&pdP7|O`3-~g z51>*zhg~_E1J|JpoH?@~pjGmL`DgGYg1{y4OdpaIWuIyN^o8!(g%VNl3<{BbqDwC@ zsU+WtLCvj&E`2keglp5MK_5yxj6V%+T(W*^o5|Yac=jk++1BekmA_LSr1n83WTPFJ z_Yq?gaKo`(=@b0avAy^C9lhls_|qS)CVyJgmKFMlv_c>+L~5l!gZVFo^F=d%7;Qhn z{IG5(>Hlilss&L6IcA46!TdP3liXhMAz|Uz<!|;3MC)xxZWf0AH%HlBWrruhyQOYg ztN#1BV3LgWraqRsxMFqK9|rcIC!GbO?c4Zw5S#ySxFz}?M%uL3`vZ=WzlEb1tFMP~ zxk$g?q_MKu<90N|Qds1)?1Vo2juBu}rF-c_=@9|lVjKFwnfkxBghG?278YP|D#_cy zOB<RsUwpC;UqlL(^XMJN!y0mu-bvDv;%GM4QDJ^-<3f#@($I}Y&`ab!%Y$B^E3TOV ztM@QSU#NGsnZ{Z4b|*+<bll#(89CrR$43s8ORs4)MPwlGR@CnS5%V=;70*C_NIqBT z)~o1|+#f9d-hfC9(!5q^Kzj%O>bFxq9bI^v!s&i|rCIN8Lor5Ic_SKvzzv~DyiGqq zndgQx2Zz|nd&9l~cV7GqxuZNy1`)WET&S0BHE{I^{!aAvXeEU&34;Bn;!~+O#+$5N zbL=*$X){>0b6^$d-{l!V<9*h&sXD&Q7(UOg-$?ZbKW)w*$$DMbQseng{d_8L;wiS? zgY^t{0%!<;P73r1x^?HaX#6f__?hQ{UHT0y8`(*SpBKkP=Et``CHw!BiN6i-Ph$9= z&+s3F7Kbpa437c7c^a1I1=K{*Q*5bI4=z9jO#ZlG9a3-O<YA6o8}kba3c5O-EwvMr zZ98=>m*<t+utVw9PbU`XbY|EPHKxt}?VdqU4K#{#Z13vCgQhKfi?XfjCqfMns}uaY z<hS)(4Mf8JydL-jvDyA4qgOsNtNvXoFJF379-y&csM5Ccn3kQ0mQ>+glk`Vuil$?a z{^s|wPh3Jb*CjeSK_mC;KXYMvLHi1|U-o2_e6-OaVM}2-=hCNcF&jg)p!^gn?=<kq zwPPJycqDZfF(RLboSdjvnC4J6rL3Hb-ao?iKeZQl!t6h#P#<ITkJGnH-`H$oP>S-r z|6?q_>4_+O3tRCp7QX#esILn}N|&PjqvH2baf{|n^_fSXzJq49bMO$8I>@DY@!S%{ ztA=bQW1;h)Bv8Mc>W`=Tcsf1_k3@&Pkmbj5ISLXK?N8i5RnB_?{fSe3q7Dlm>4Q^| z=Cdc^!IYQnR+0AHl6Jsz+!MpcbbeT?x2G2AL%(I`B#ha92{ckr2(vp)G`ol@R%aWY zcU^FUvxh=olk~xcZg<w*qAsT%P2=6+DOj=v@rja4XV3d+Hsn3}1DnZ^VH65lOq!(c z1jb|J$r^l1_iRQhgCF>XB2=S5$4^sZ?qmATR-QB8UxK;EE2e~<ETYF1A0a*ZJZ{bp z>7Y-;!;ZOyj@+VaicWH-zq3Hf?kLpnVdL|5pH|xEr(-w+gecWZuegr+6}<;^ExLW% zJz$n{I3<y6c+fbPLvD+C4A>)@%BW|CQ8ms7>i2z!$dx~4^4Es^HBQ-~cbcwebcA_~ z@;8MlIH>~Kt`y)PZ6QS_R+!A&v)O0-0qJD*b!-jY@9SOq;m!CK)AjnK_t>1`J%~M} zm-nMH#_XVR+xv#rEW9E(+O&IxdKF46dy!DuU~TL<OHOF)>F2Suk(dZD(|Y!z8y8`C zKc)%bUjD3)lz6TQ<6~1(ol`R!a?~0@+K_zFvLx?6TztbowI+2$O|slq{fFqyd@Cg1 z(s**ZoZfhHnmoJl<Q?*a#*=r-3mZ>f?MZLT63%7B?$ZSKagJt+kuiVmJ6@L5@u}Jr ze#F#tX*s@k0%dr1C>V<w`=nXIIjjw4*8wT5mLE}*UVj-DZ{w!1+~*_Z&u32_WaTFT z^7(`L#-1COS!HKq&rNb}W6w37%}{XgMvAG=#c5KRn#zjy<FVakR%#@0D@~zD*Y5;* z1>{`B>I^fV!=q&OC?yoL-y}BHB@L7l9nCnOsV<unRyv;JjpGK3@Q9r!&s6I$M1j+f z3lA@XNTg`CEOl&>CNwFyPRfGWPFgXG?bPJcE|B9WimWCywj7MZl_g=i`ye`sT{}u4 zxk%aJJ&4gkJKkU!TkvlNeKPw>KKy7#rXc5%4sPY0Zb4eXu^ym9Q60Wk?W5T`qz$8l zOwscRNQ&LRUEYZz?2Pkl_io7~7ozw1|9X3VNd6BF8#kPl3RwGA*i+&s%bGBsA!-et z9reChtF7^$r#N}Rh+&@Jyr(Z-+)sLI^dLWsLH<D<YoqBRTNG8!38ayH_$DpRTDXFl zj^WH?3?k?o&KSB6{$WW7--_|jR1WE#*yv-@TR@J|OGXbe`tz9hs)%4@{3|i0g5EWq zqTZ<k{aD<PwI=!S8!bqH5pj}#3-y{w;(SMIxE9pu+D9ZI|3I@nfM-C}EE)Iyp}%C! z)})RSo%<F~QYTrQyBCje?vqwEJ9mTc3?8ZD08EJduD+W+{mn2ev;%}pVjBv9?Wd#S zlk}!lRJnJMBf++)_!yoiZB;&1M}q{(eU(<a@pP%9MM!YhAg?gAmpM;=D{WHG2Cw2` zKo1HF&Q{N7NbTL>BJ#JWlhYi{cs3OKgZ4kg_V@N`=+bci&>Joj<V&!f)<`=)8)0%a zUilKha}Y1lxmo@NYVTnWJwet_uk||34}G?xMg93f=5K)qfUiS&8^9`M;o-v2%?sRG z8vUmuTmgsXi~3Ebfs`jGV?=d~1@7>byaJbgX*g?`GRD%_a4Y8-q%_#UoiG?{zPDTy znlI?Tzh{<CP{s(sFQC{)TrisPWx%d%3u1T6gQmY~RSN~@x$<S|7*QL~D-+NMvMH9P zjVv@R^m?DqyBWPQO&HX2C|*gNgt#vWcR2`gFBF0sqxRpMgYU+~v#?A3hgL*l%L6=y zuWV`}O)G`qGJ0|V4<*ApCfdf*`}pmN2)B>H4^VLBf`0cVqhIJ%E>bcg#ep8q9daQw zG$LcsF#j$sx9OBN`BZ}y<Y%BaASe?>=SQC39lMlFW0cTn@F9|8OOy97uR;aqXZ61Z zzk%)$?e;|c8^9N`H5(GU<zT#Wt_z2M&%5UEMPvB)!Ad+Q6xqMjKY{gR!ruFl;HfbB zEHr@%Dr7dkkE0ff?PG9$gE?Ol9-<oz(G<eOscj68F$tGm@(qpyFrG^5;sL=-;(IIa zyi;sQ2a!?FQ-w!6vo{N(C%|?zC1!Sf&7OVWF!YiG^gsSKHk*uiik8`=p64tQ8qQJ2 zk_<@7@FsLIP`>YIHF%zeJf9R=fQB<!SKl#*y+#=;Dpi7dUT_QgM@l=4IAJrg_s1rt z0q%6C+b&IT+tuo1=N}E%=?}kwy8*#-fFDWf0ztK?{1?!R^Ydi`<nvWYU694^jK4j} z-zjbAD}N<zunY)(q5Pp#B`Z}az2E0E`uqI|^tahV{ne`rlB46k>ezJWSm=JN9m(p% zt$nMs0%Km<Sd8~3X)KPLO!IIB=tD6O#i|zBhWz0_fYTmMd6IuS)KH6(_+R7CLr1Cr zUs%H94R-x!3<<i(!uOnBkdFsrV5u(ozQY>DqBen7Y_Ice&f|+}@%+@M?b#}RdMM;M z?gU*}tO7GCj2Ety1<A^S6v@Afbgw>aH`P9TNBr0%aFf)rSs)JBzJE1GhZt~=lf9*+ z6x*Ob<#ubN%X&@u6nl|YVsI$9%A8lmy0m<I8cy0nLl`?kC}?SNZk1Nxt{Kum;#+_T zKz#>X{ncWDZ(U{?w#*U-3lry9*W%rQ-*L8K<khCKnF+U4Eea5}$QH1N@Ti2%ir7+s zN7oW!_IF4>_I`lU^41DmUtlN>RuVY0Fca&6i8<-c9AILOy>ZcaPW50wUhwo+Z_Dy; zmwXe@D_E2=0-VPBs};yxlmb<zW1R0o7UvtA&@0XtiI?P9wOk6@W6%mW?ZqJ|Ar`g3 zs@`T(aQn0%OTm4}U6LRFGnJZ?#CON%P<S0fdB&9jmref~U+W$hA_dRIT~Dj`#3|`s z{Er_%mvmgvK$9tY!CTB(hSjgqg55bcOTG)^DIf&mnBkfTSdBwBYoh+*Yi3zdX@PS7 z7qGP)0b@tFX5%|tddYvOOyi<l^5`^6hUA}!k^0Zn0+E8)V|c~#-+0-Mfko|FFlvT> z3#@Ew&%Vcy$H1mD%x+;zl7B5g&NfM#A4ilz4^3m69Ck>DLz)`QVE$`?!2gOtCjIU8 zAO{q^Q-zJo;s8-VLE0dsE5d)hZ9K>#xN(;;LaMhR8AX1Zv>`LStGy8r@?3!H4X^R~ z_fxMKR)(UvkCW$z^F@J80Tl#J)zg-ZMa@AW%TTgux7$*Lu9ubnmESp0W%$}$`p91~ zvZ-Y;PYk$%A6bKTkt-NyPSZbllTkX?p6qOqeE5+#ATl75<|1~06Uz#oyPmC8+a>=f z7R7^M7NG;mcT9BYd)J#BOHp%>{7Eoy#kNe#zaixOLejd=M9w7xMSgA1UT@O>Yt*RQ zT>kAC)RtB}gmk(s35J=1t||=L&Y!>+QUIS!NYMdJj=zoV@KnI00oXaV1Budti6fwe zMX;6}E&=tgU6y?o9^Qn9$@M={3<%mXyi42;ND2(a^Wo&>=U_}gy-fg<lfxD9$6XV3 zAv`28kQ$1_>tHzxt}H2MeU6%ga)9H-nqWD&Wx}<<eSEtSXfNC+`A@UcfWuYf7BH>A z7C6ivS(L88y{BSxQJFoU%z<k#i-aEdLBfG@KkrpSD-e$XmU??~1ev=58ProUnK@bb zUgUC~^hP<p%$CmNy9$}t&Le*Huwn;h0hc8I8z=vS<TEFYbGbPd<<}uSxa{dsY)v?6 zedy^7tojq;0S|s~2Oa(~=n4pl%4RY$Id<pf1$)#23)mB1D^L(I@to)Hgk@#{xO9qe z59y?*vn?l=XCt1-cc3XiWp}mw6sIqE1!;kTl}snkfZ84mz|-ag$(!<b?+JeXrFe)8 z&`OrZZsxlc;bGLDcA*JnjbZ-HRk_ITbbi~2MZ=Yx^hNRfZ5cp5^wH4R#@EvpsStPu z4;{1x9*0EV7NV$5CiWP3554_dy8vq^ie(;n)$~|$a9$E5KfX9ZzDJ-OcbS2Jnd<}i zaU`4?*r$+s#Rs=<!r9=(WfA`r59y4t-vlKumhSx!Cx{8@d^7kY&TZ1|EzTWM?q*k^ zzT|hKXHT9wW)3(em#T$!bX;r?p$|6+^zy$(3CV|h#LAdCjSb^C`6_hHr4<;C0tK^@ z%Nv+|f|kijhyGX>&W}dS7K<)EtWJPwN1m<TneMz3CZ#*=>X>9_>*9o95#*@n@|)ue zLGA{@v^fwQLSx2k^&C>}Ojhm$4@N-Oo#u78H~cc@$3uUcI<ddt3W7oMabr+v4VvpU zd|ypz)1TXjRPx?ycvx;V%kJE<IDN#J^hH-`V`&qrP=Do&Ns>h8>H5FnC@j6_KSaE} z{t#CCI@k{WSm7LY<V^>LYWeE~3L#z&OjR1(&{Xi9-sdL>m-7ghuBB{?GF_kh8is^m zHFD=`_%$1Fk_+HwN@%`C&xIS@9?mAiPEpui?d9nozJ-mgTgu|yE@8=`5GQcno<!hN zPrN*UzTX;ozlq)m?PS)8ve>+)atH+O2$>sik@9Hpyv;WK{t)A<CHj1Vao#Y8khqMH zNW)k|gW&9zy!fAO)r%BctCHI)fZwhrE}64K2yv%EY9fGI@(xFH<B3FAEjOM>kZYw4 zd5J9t1@EC>`tDdZ8cTqiZs;Gbw!rxwV*^vtjy;<Px7)Ks#u%2L^nb{A@k*iS-I5mN z55s^Ort{LjngfeNv>zkfd{aR|!8tfdO7~)*T<NA48uRT*h#Kx3T(7_XYFIJ0Ag$6) zGg^sCVgYjP=~wBXWy+Mv09y5xuhMRRva)sZR4sE;%g=GJ_O$7BtdxDqWB`-&vRA`C z4y@V#?msHuh?)%d*ZOfEDG8g9FIRC2ht&<v0F_py!9oWV#|XF#Y_J8iGfWS&O{XAP z7qOo-yUx9eVuo%)=PP7>lNG_PAAW_pWxGe;o{8aqL6Me*uj`@UwklsJpJ4=-Q*Arc z+zvt6r=Ox@>mhlD+F!G6#ez$I#{XB?^0Nq&FyJ;&fCs?v{s1WeLAlI<YVHt0trA)S zV#`snZvbwWd`Gpu6PNsmrTYey+o5P<?!ZJr&9f@Q?=d5|G3OUSzdr%gcH=Qu^lR`+ z*DT*OE))dGcZ@~9EShbamPso`HOq!RkY>wJ{~_S^<CS>0EX1pmM9GK$C`}!#<<H}c z(l802_XMaL!bE-ptodBzvT7D0jV27}%u0mrUghYZ<BESnI;2HiY}LxTgBOt<;&oUi z^Bt_*y+*mkkd8=x#B)d;hqPccaOT>xJv%^_XuYJLG{3ncj{@6n!EZUJcmjBgP0dac z)yaa=p?s<1YkI&2Wh)-96Y(TYO8gk`;oggUvFE!p#<XH80P{n0jq^NT>I027+T?w> zcZ2U1P&;Fx9ZwjGcTviZD_;U~xp*nvdYx%CCEpZWGd+#r40#@>-UyQ~-!WpkJ<A}U zM|1`y|3}D&kpiy7l%5t{ybOok7gqPmK14@fcG?(><ij{^e65XH=Z?rnd4`1yALwL+ z+x|gk=qN&#Maz7Om~~7|epJhz$0?s+q>}j)BhdxSZqK$de(Esrq)2}U&XA^B(3Fm} zsJ0Bnw!T356m=!=5(^btpaa$RsA5|Sa}9pN8AC}fJr6%*fgi?kG~)|MxCKYL_^0!> zX#f99_P>$Y|LP>Y^d*`A?D`!qp`}aJ3I%kRcgW|V4p)nM&Py~Or0SV3G0P2)!OmR6 z>ZR+Ky+jj7nx6a;n=foH{q=l7{Xg;=_P@aFU(|nEN9|bjuh+44QNyjAJb*e8^zG}6 z$pR;I!`>HA3)eNW9Ua`{NC9gNrs{l0D42lpl0;4D23Jv^27ZCFL0oW*q3j4bj_M1b zMRfvxUjw{?NlXsMBtat*nXC+$|5%?e+eSaV*?ek?emca!Z!7O@w>T@s1+P<AHr>ib zm8ADsN7PBy&%B6ayk75o5y_lFLMu;g&!*!joS_dE$5G983&wc*_?sJ&jQMdaEYH?L zANq~B#v8hr#<M`wUxKE*ARhQSc``C>Om<BIv>kjCJ3tRlq0Tb32UG4NM1idq%BX%Z z%*zevU+Kj!GUgQ-8NGIpSv-)f|6ir`e*>fbID7%$65emxF0H_SP;bU9P+-BUb#$tY zbj~lW30CU<T@6<n<I1t&6rZ^seEQG=tNzv65PpPF-?NtC>ai~V3K8_!^p>^cMKhwA zg8A}Vq_IcTpId7Vra*sWEzu;2Ua|Mm0@30eSud@uG}N{|3-^U!YOdhOASH+6HZ;Dj zS8#lL7m=?9o!z2Z9i5J&N;}{^G|Ugk1Ac_$ben!TVgZi;fW=diey)N2(8YTVHVFoL z;V7^{AB?X~7Dh}J<g<+Ew6RVL@|uOLNN_O8MYX7A4p3`Eb@%{pKyY?}i4OAq0}Fp* z8&zif+}{i>HcU~k)#^fy1J0AR7iq$Xo%#sN(gthL4*rELe&=DQ<>C6vl^xF3nvM~c zr?t^MeMNB^`_2N`sqRQTSewc#?ZLOg{+oeh%=h9fv^d2@>U4XmRw;tfG5HU^SduzM zQ1&Z__2LkHV9bxZE@~f5*e7jp2_y3D=^nNrlO|7~u)n@EV4C}4EqR(c*4FZU9KR2o zOVIE;yghNAwa_keFKEv;R4o)1>G*+B`lOEM8mPkW3*G~(#Pq(Nt5~BBvr*6B2>!;5 z6h6-##USGI2r+Nb`RbsE|2_RaK}o(3SLR~<uhUxdNWiD#i&U<p#vVbQ(AYCj?#n(& zgnT2MI~xCyG|+Qc9dA=70j#(LIZlaFA0&;)vUyKjtP1zQdV6vEM$qoi?&eEIyTEhD z`cwv*_>VfyrdsY(#@UR0xxS-a*h`FkCwv$#{pC@OJy!WLhC-q`&Z>;JsxFa$EUPlg ziuFxCxkPXR)TtI_iZzl6>kF4)7TgfwcbZzw_7}4%@KscFP#xPT2rjduea@CeV>BBN zVj(KKTY?v>^JV_aojqFe10(9678))OgpZjB1C>@N!0+4HttB@qTb+<EEx!)3mCeqb z_1}U!!Z!SY$ho-OYq$XIi6$s8r^b(x)hq!dCtJ$-RH3~+-1~;!$3gGP7cIvw=6^*b zpzF*B0ErRP-xnHE0|z-Xo`(ImxBPN3-wpj|V*gM=T8^G%r2h}F|Aw=%A*0_h@`%ZT zlzjr%CXS<Oy1!Fefk!sU=LDaZ-dF~NVVQBejLTx%T1|LB6PBp7z6TFBc^d{GmF}<~ zvtLhPUn5CU6F~}<{ZI#El~g1jFFo`<Gb=!O`Fdl!hxt;<=gMaGosipjWk+BUdLr-$ z^qt^f*sZ3;)K-2(s<eCtt*64<JyG%9Pd4KIM;$Zo^%OV6QKh558pKA%;_k5zsR+wu zb%2&U%DG=!j{hV9qa;(2x5=ZtIuAalvK8ncc71NhnG$FTT<qH}-|XL2Hv;BhwOCY> zz0TzOS@d1f=sQ^zc9DnbDx^yCi^|rn&y9MXZRR<~=DJi^qz^$MEW{lSkpdcm3yiI1 zdwde@d4!&1^YvIkogirSBST8}RZs!y$yaC-LwpNvo=p%*&xUVOlkaza({PcN9OwN7 zdsl`(=FuZZ_6#x&kHbMFzqarb<gwAIX4^DrB6Yc(bs1I7u;+()`u`m!QMx`490#T} z@!M#thF(^Kg*UZv@EOCOm2Uv@DzL7)1}P3+-3!Q9SZa;MC=>LJqcv*{Vm$}Ohr>6c z;Ewn?^&MCiwf9+o44sTCK4lxKY>9du1?*+}I7g=@WT`din^sWp@}#mC+UMKQXN9t< zV8YwY@82}z8Gv-`UVrK-64^|{{k{gnpJQ>M2&F|K6f(}?N?P((rfuhgLFw9z|59G^ z<3F|N%o1SXvjG=ARd|?1;B~TB(hB^Nx|VCV<12}rqZ1?j!6{8BUl`|Aty+aW9ZXI- zS}2VAXJOzggEnX}vOny!xhU|j<``DlNhG%TZ-R}^!0F(1XSL8kF$2qbJRp&Li#geN zdqSR-MlpIZlFBaL<7MaAF|zK`4;%_F3Q+#>Bt<fPbYkfVqgxq?kxuSDhWb>bKYAvq z%1C_OEKM0HI+}4~v1HgyZ1V#@KNJ3Tso_3XP~2PTDTg(KetBfY(;rtnExqC^GAyZZ zo2%(xREkg!^b66tT&)yfVSkGXLUVm*_HkGZ`WHfDEr;=iG^KmVAzTYh!h;Z#l%4uT z$HPRNhP>><?+c7S6MY_~7cD;f&YZSWap3vn69|e8&*G*k`5Ab6Fbz^M@Y@;VoC}jw zeCJcYBxt^$_`*hz*R~=V<#n7wpDIAR7?IZua3^a7ns9Q-^-O2dg`cp*{4|#y{{%^9 zhC!wwJUiLu?=(+KVT;lVbg@YP(U8crTVX+25Y}t9ELyP9nHjYj-$1dUnSUJl=oZzR z!FF1jDE2G){KQ;8r`bM}HcS<q)9o(L4{EY~#9+_Y-V-6&&G<6i*nGk-A<^re`n#Q` z&w}4q5WT1YD00rRg0vD(5HaV<#<V<5fA=X;sdOb##SNV?C_y+zuo8feqlxhY&j#A{ z^d8fWtWoeK8pL2YwKD%HW*7ww9H*5GBf5Gd^HYDsl;98g$^ay>@ebh6e_;KX@Kz1Y z4@T5uI8eyZj2}Tig`~jq*NZ8>ag?J;2Uf{{2bEG`Vi@Rbl~!KPA|vVQWSCN~1-;1d z9z)B>cZ2c82sX7@CL%9#-=ke8;7MtdbDMm&q`iQW_X}S)8uOgnJV*Vz7M>M67yY-x zJgBYQU$s2wY*~EV*#c{w3ZyBRBt=l6lez&|v#-ip48BKLz$8cK0>`0kMeO-)FhRtR z6~K+Y3VG7vZ-&XD0W8zPNnrU<u9@L~XHp)S-v=L#HT-P94my0w=!-s~Z|XD6BY>)6 zd0l=*9sUj?{Aq)(S;DiAinCAfA#FHMCpbv9F|q>QF0=R>pD_7*3E-2iv?@0!uuLox zXgCW5gA0Kt%*YG<hpOJ|adZFwS=#@vW>Y?X$1dG_`eJz|@aqn~<;Mi_0tRcg)b>$K zdB%&{RI5^BQL6-Pl%U?MlqW0yNNSut;5YyF_EA<W(>}_^5<I~c0*9CPcf#Mq@Vmqm zKgU-@*;#k@4`6!qTOTn8HCVkE)?9sX@kV>8Npv<TP|4huO{PDpm1kgV5S`Lt;T`B? zN3%96ORHzzXmCJe|F}U=TD8#_(Q#~dp)o~Ur~hFZRHcucrKGEU8pjP5)X{=^18C+) zYMzKEipfr#tzNI}0~h*SWj8&RkHUI7fG^ta4*r|I4?}TM^F^_6xK|(b6UUVr@j^tl zpLz${6iYPDouiVik`F&afgh*9f8vBYr~AA;7fUPYaKha#>A5c?FNXcJkr`mwlhAH! z3$wue24kgx>MK3?9fU%qtsK2kn?CpqeO@57uhQ<=J{doFEkaHQhIaKcY?4&kuqFIF zud*NW3uy-j55j$Y+MGgIb}MGPloR0s?}n#YUkk_3-o&vNEAZ<tXb@iH*f0uhN|8<4 zP%v29Fk!Iwkm&uctMATb69Bw@Fy4Q-tY|RES#o$9{E~|f78+vv|8ms!)Bk(aqJi@P zrA_k3Vc0o26y+aV!msR9Myboftf;P`-+Fon(W*_SzR#eO3sP9l>FZ8~dscp(GMV)Z z753>(rwnQbUdH*(@dM0vC<`{6t?}4d^pRvUo}%6=__xc6jSG_o%A?d<#V~N88aZH$ z2F7!v5pQFDDjtLRRo71Aidz{i$~%>$;3u#iV9!0qb3uL?p0CxP|K9k28Z7?t6vaO( z*j^QT_aH^h5pcR$1XjJliLOW@d4NwmXll+FQ67nIDef+KM3=tg{;)-~gySphV3u)8 z3r0D{_y#O1QQFk&{1%&sn*S7ky8309e{QH?n>`h<{%l3{QSlW~@MZl+X=?YO7e(kw zE7~|Fiti(NH-j$==mH_66=+mp%7M|u(P%z-AQU2Jg$2`~*eGyMZ>NoDk-mU$RmX_* zLOS{bV2A96++ffae1W~nAIkLCPBmoUK>_Mw9m}OJBB_@9akaC5@eXMf9@A3(kTx6u zUvoOFnD;8Vub*1HjVi5to-s8^aSNaUW<&zxJD~<T_oP%%+#JnYmZ2l`|MkGc+Gu<Y zXMsXw2M<Kza7ll)Err~P-j7n*QqMYMuVyh$JPMkyR<k`kkv~1jMc%{Om29O!E+P6$ z6==T&&Gr_??1yaCEcm(=$N!-T_fB+8qB^os=ZX;9K4z@-GJoQZb->TL<-|`UtBNo8 z(kj4rIF4}2<#+gZ(a9TY!}*k*1<Smq(x!M=%?ZvOo-SJb*OTW9K3n!B`;4P<;Jal2 z(QXHu<rZNX@olg_?c)M_K9!y7^fx)@2+wh8!|37OgAx!w7yP!-sWAO~4RSC}vDoz~ zN9aW=i(URu*%!DU9Z5XjD3<f(8RTb+t4tNxD*5oFjFyEPbvP2xewR!CclaMT`8#Qi zP%s={8OwEahPAxjKF)in15oI@V_6QJiBWP=wH$g)Ps<Sv`DRpEJUD<}l@agrIAJU! z76_7t|5Op<#J2S+9#sTq6u)>OZ5S`K=wj(*p?L2Jz7#w`=`ECgL2i{c+yRJ8N>uhW z9~Qjdf7`4l^u;6IEe8|&wt7#*ErV<y%CGl?z`idJ4dbz24G|oXlPdX+z{5_#&P%=r z@D4d8Uj+~1JeR>=tK0`4#mPwkWJ$hBz<qoGtB$d3J)#`P6Ag9!LA{(U((*;v8J;jQ z#<V=mkQa82#D;4-mtORRNpM~Af5k;+iP9$TM^?Z(kRLME7l?}FyW8j&&@9FEk`h@j zeUyde?Pht5I^=^|<xrePKOKbG;jU2B`I#e@atm?&*%c-dIjQnYwh8mT>2Z55X}oQC zqsiUCm$Xe|DWHlcm|aA3#b%m_hO=i}uV?x#KLN%&Vbzy~H``+UH_)F8{|)+c#az=L zN7OUGA4iLK5`BqI(wPj>ne|N1<I@ej0n;>G9hrSe2kOg6(w9{K(T3aAaiZgZvP}sn zTZ03m&)4(+4`ts1A4Pffy^{>EfvvOJRikb->b4CvwTX>3G20qLmP84#kOZOz!4`Qb zrWR!uq9$Q+cOm0A5bw6dYFl56m-nr$HpNSA5+DI@MQ9Q6hEVGaE6PPf5+M7X|9NIM z8`SUX$M2_^oy&7M&w0*s?x*w>wMcJy$W{7-$U*qe7*%k?lUctShvS#5zJ<Wkfl>O8 z^nS@TcXp(C2Gq$k8o&q1LUJjuHE$WT9}9PsQ-!2ZqFt45M=iVtL?n@)2%JZIO+UpB z^)At`CN?<+03>HP>m~Nu^s(C3E=!K>VHDqNqj*njIIF$BSiK=OOz8bvjB?nc<{YV# zp`TD?EMaT|ggLi5OV0++Zv^|4&Si3JSc?3&^WHm3=Tz#WYOMBhmnp|Sc)x2OZ6obv zyBF-|<dbRqdD&|>Nj*oNfJs%e2)Sp$Q4OMDxp~WWfgd&4YTD+=^i2Ci?B#O$(7Iko zhBFwRHa*rkrJO)0{|G`AItb<5GY9qpp+@w%=D7RW|9w6XD5wcZIGkoi3OGKBBxkIW zQOUU#Jj&`j@N|dvT2U&wAR|771Ttb#rqGmP-7?|W48*E=&B_55#|y;ns1@7UZHvRX z=Ed+zl3xP1RBY~C%`&e2?zdxoQfW&dton8NCHhU$6v>0~OZM%EW&7Re8A<EijwEZo zy36Gn%|8@vp&2KCM?2>8pJ2j`8geXD1{Tx$s`|nvkZqXguh*FkrOTQk9COW@Nrx^p z+ciS7?fWv#c7gS?ELTQ+p&^eSt>4C5%9{Et)-S)j{C(sIFMUl}eO4Bq0zO05XeP~& zF_)<{mi*E>C~1zt^KFp0>ciL$RnWdeljMzc;cW2O?p*=8m2VV`P0sAdIQNYp%Z{)c z%MbD)inGM0hv!Q}`k7$acc9TpZll&?zVM+a0&^HRv&k22J?2v4ZDJ34^*Pvh9=#d% zoB?wUzpL&fU^Hh(JQqaVrF0e1q2@B=Yw#+R<(K;)#TRM=+Cj6CKZ*QzAM%pAIQp=X z71=~rVUaI1uhddb8dZ$rDOdsui*RBEiP<iP8spgjdmY~?{y>wq%iOR(mAYy!${YE$ zUh`t2MRTAtN0VBgnYfctszy6R&E^c{^eBm+i8=Z7#j3R_tsf^UMEkRrda9{4KmCk{ zQo~$)fPTL&Hd<XENW95?JtbR}m3zeyeA&(ONe&=cl299?fcIaaIcJFZ$pS5_!5NJ? zsHg0FNnX8tKAqOk?A|4e`$2-uX%5&E+HhL_U=3kSS~S|oJGwEg`yY{SS>MlzfJGc4 zb?(5LKu4D-MeMR+{obk!SgV&p`l2_2+)yJYN-NMxtZxZolb%3{m_Uuq()=W?aEA9q zpPdpNo#L-}@}ps4`9tV95t0K+WuJwF)n>t)C+<(}pR_+CcYz|+&l4<uSmfIYAtl&q z*eW%XIJtiU@sp>H@U7q(3Kav^XI;{RPtym6JP>V`-I3k8D>iV>^0)MQ5}<pQyurvE zZYk@C3K;p+Wx_tK2~Ti%u`J46B$)+wutP>Zl$n}*7hS??udiUso!kK(y+*s?O?qA~ zJX5t>TG-c$ZBaCyJGnxqvpysIw%~vd0(a~V4Ij(^z#*u4{HdqeD8Ef}6e6$bcJMV1 z@(v#Q?L3f~qDz{G&@rhQ^&7OlTJu{S0O#1bk}I*TIan4hRF}t^!&2Mjv@w$&K39a^ zEKe`)hz+OI1JUKvT#-dI+Tro)kFFW9OY2o2tQr1@<uX!E>Q$B6E8R!O=>7-UE~WhL zm7BNF*Ms9DJ<;V;CHm%!t|N#VOvh<v5jT297u_KemV79N_|oMo9rkHVY<O;Dg$TG@ zaRPq4Ce%G1?z-5`;e^>r9C)FuL=k}C81<y!I3>XVIuP$_zEwLA9IwQ;+P@<neMw#a zN<5B6=IJ-f+|Q9-KF!1Wlm=~I_a|-=*#8D|%R#MY0X(CQ^g?cmERFr!t;*{p;%~e2 z)Nw^!{XJRgSt~w3Yut`{lD4(m%%;;nDKF^AkbZd<K`HVv5wnArj#pP^%Ej6N{Zgf~ zt9xLK9$Zz_rTp%Qa{G_Ls&+Ykg8e;``V2Z>m3%7Wyj@a9k9aQSN}>>7tp0+$e0(jP zcH`z?Gu6;}Gfxw4`SUY#bLpYniG5|2f%$EXu~tHjllnqJix*-oo*pXb3;D&3T=6Fl ze|keTIJV|%p+Y@Wtc6Mla~C2r-+;5Ya<p}dOA7^+I1HqTlzP2BHLvvViUEa|aO?hq z#3J%SV|I$z+$*4-p&`&WZFzdg4~O)R<%t6j&<*){7ASq@-YDaW(ixfp@3Lp9iHWWL ziLH6GzS&YM^vCljww7q2Ts>4caX>U!*fu-bTJ4IIQa3lhLc}VRFMvxYSkP93D~Z~% zBjy*PAzDc0@GvJ1y52nE<cd*WN^TO+#w3+Q8$vij{^ak|`-3AqLSUJ^N<x(Z$gmAa zWZPYhbWhRNE9l#cM2LmWzq=)90_H2LQMbT|c!>@16Tj;-RE{dh)q0a&_Ur4VBbQ#g zl$-YI^*+57GBn3PL1Ll_Ogu7MIsi5-z>u@LoaiSIw%E|IrO)G_eMJ^(yA9kDG0q+Y zy^HW5_K+95akb;O<JTj|8Pmk%$PLRp9Ydcdzb>9Ds}Xx+R7<6Av`)!1^6QNWm)2YQ ze(SqhPjXKOudmGOON)D{y|`nS!`nPG1sa2Ijj}fxi(wV^mA<b`J78Q3(!7v;=zK?0 zsWKSdL%~*e=@BJf3%&v7-uXb$>`(!%zWALTDyAbSRMLjz<KD8Cr;n+pBu}&HTUpD4 z$09lGTBE%eIao$aYHNi)m1r~bP_f`2Q<1V*4~|cF@@ph-22V~I6>{X;S`SnTha;cZ zt6Q{9tIxw6tQ!cQRm*OG4<4U);!teJrPce@U2SJm>qT7-zt$&n#Hn8Ihc>Ba`KO2) zT8QG*sff(5xpIYgywRI{XhDZw@6sc=+R=#{w4Km^N;{+j+F@WyX^%3gN9#2z%TlEW zl-t)G2S}lXa>w>`MTes5S=Mq$UyhvQ6}OedPr+)MQt5#u`=HgdZp@4iW{?G+RuYe} zNQ+n@qxi4(6OXe=FS6J1N3C$#;uYTL8MVRz@r3p(O=RK#q-Z}a$Q&eN@MP4B)_p4` z4r#s^pb_#fKfn+@W28<1kij~9JpCKnTS@#51Vx0J;avns)cX-1QMy%GJr^6TF)%-w z1AFM4TzXNDxTGCOMnM0ap-+|D{U;;dVryhK4ND8<S*XS={CN;EQ_g`Z#I|*or))Z? z(pe;D>GhRbclY2J-E+tD;u!3{c|y^)*Z`eAHv=K-gVv>~QStnAW@pzIYP~dyi9HE8 z(YTewtymbrxfL*0*cMK><a&^!p*YM?Jo~TAUV@dBh9(}04IE!aLj95j9IBOveQ7;S zBmc^MK)b-YfnK<PXb4Fc;QzFUKT>To8nm^DFEH1mFmfmu8+Jvm0{pc|o^`)SK$t&q z>*#Yr>m`V>pn|MB(N^LjrZOL(j-e)!FGO3XN;W5u{Di1*%cfMyicn*1rx7X@b@j=& zGyX>y|9h8zDhPa}itbpk5vdnEQ?5C!&0!djdD$HsoEy1Ykg2<iwpc$riV;wM+m39D z?a8v*1j^1DwVjT(a&Hc`fvrm09vd3_JT%bCwC%(PUjmN}611Do0TtFc=egetRB890 zE*PiCe!vdGmQ@L+VXL(PyQUX_C5W=`u37%7eICF33;1I!tLFom+APre^m4FoUc)z& zj-q+adOI!`MnMN%mN0-3ErdYUkUU}!4;J;aMw`U)-9ViXbT^RHHw*bNker_(4}yhc z<9xYnzWSyR_cRx)dLfr&SNU;R6hfv9n-lh=b(agVt3qtF8quF^kV+fT?>%Td<R%G| z&MmL{k$yUdHmmO$a=FOU08egxu{+i*OZsWxRoiB2V8lIaftzFxgq6xm<wSqmqq<1P z;32W`oBT9#7Y`q-_(2R_vA<bH-&j9NA$|gKd9pX-yg;$Pw^@9EB-{*ju`K|5U?@s- zwapj%+RaE`{GblI`a$!V9o*w(_>6kPNlJYFA(DE30qvtHY2D4|l@7F?jTd0EK16Z= z*miTvn;G;H@R=hoe?({B6c4s-&^*#=TShXxJ|Y)7EQhd*Ryy$$mHf%ZR!7I<NfKk7 ze8xPqMc5MwpO!uVe~E9`A|BUtF-KRfK@dKi&in)2a1n<gFLV(}G5>W7OMZp6lpPal z_B^8{&@=`*BxoKmo4#^EfXW#ku|LQ0w7TTjK;F%eUi>6OKrXv|Jmag!#@hfR>v1@S zY6t9$BI0e2P*4}^B%N(lI@z<Lkd{+BA{ZO+-o&6TSn=;vb}S_+@o@-|pj}5y{y)cv z%Q2#Y6)wjq@yn3Sh~^ukZs9!<D4XnVNdQ(HFFjryPBf_bJob-0#6?hFP2K;_LYb93 zb4N2nqnV+BoQNkOCv{7}^Tdq$Q|Y@#e5b7OO17X$EjU<R6Xq7~6)pH|c>Y^#HQ9KI zQ#cweg~yD_#fauW%xeJVJ!E!E1M&dd>S+ObD+5#5xI?eHS>w1ESe36K8lr{sn1W&y zYJCP$cM|Q;g@YafeWA(<I@8oIEP6Y!Us(;YMLVt?;hix7_;`-8`hURWRmr;NK|SQr z<#vS7{LAo^b113XklVwv%!6<8l$r#m+bgiq%d@@YHn#i#UUa*te>UIEyG{6}08g6& z9@=cE|L95mfH)((5bN`p$8KdjF8w6(p=hvxKmG7lXGc66AS&rf^Ws0lLTrSNKdsM1 z`2;snwhzuBF>Cvt*lvGL-5A#b$G*4VNN*l}xL^!lM(OfyaVfjh8Xyc|)Foqid5UAr zjl_e8@v9+-JpBY#n@-C29N9Xd@_~8hSKddP;XWkN$mxy^xg#Hft5{9cotkvJ)M<8; z7mjLjRz{P(!oTSLdFP|eFK_Qh#~uEnlCzKGJEj9on8O&6*GdB8sW<2kjkT=*qCUDZ z`H6(<eBUa;G3C4w8*oQHMh77YwTKOoQM9O^823iPE#iL~4dSuZ9NB*E_9NTQuQObl zzdh%@oVtLl(T`ZS6dQC$b^*3KT)fFV`n{rx&c|-->oM6_5ii|D5g9Ek)76W7<)*7H zzQQLP`3moC<|`jvy~<a)bj6Z+*st5wd&cRaN{B`nYS;Cva_e?EzbcPzSM#ev0pWFg zh5CO_@l`Heu_ta7CrC5orF7gC81jm+nU^j&m$(MZ*a6|m$iX(1Y~(H`>Xa&mXI7q> zB@$-9vG2QL-^22CmatCs<<Vas9G~1}ICk%x5B(iMhomv$-+m6J3(f{`k1h~ULh3LL zy2BO$rDz&T@idg$(@?rI4W*7Wl<u{m1ky}YG+2Vk(GD_-SDuh-h4+-CItHrAZncia z>yfmQFH#<>Co?}eHW;;;Pg@L=qoHdrckj!N?eR-nb$P7vyUj{$kmhQ&9k)X%G7a{? z(r=2;YUC^=%0NWGk()=+fzOr-I`DbqL$1Ze{lX8D@OOf5g+_m9b%4J6t#heGZCLx1 z6UFBu^=7rX@dLqsiV4z=*iJhl+Fa~X+QE54%+Zl2A{)oE?$Y1@#=Zg&wXn~=*bi1# zj`e!zZvhMfaK_7(>3@arFb^n+-wtt^kSP#4DwV`pGVg+gNO5I@d^o~b00BJL27Q4N zX8^Oe01<Y-wh70e(Tae6A4>^L+vR+yey!!$*pTbD#d_s8OeKCJ-B>57pAsVFCGPzm z&SoWndS;k?HZg;=t1+Ka)cNhsJNL~*N<GxQ7anTGiMsF2Q{uhCvQVOX&e2XvJ~l$6 zSnFRMWb*MP@Zd8#3N&3;9&xXjA81O^LamD`@eY_d>G!a;Qs}pvin><pamhINM<W+Z z_&*+CS{Vgb(1e$0QbX|J`T{1F(3^{-kwt$0eRlh|K}pAdju72)%d*u|Q44QMY<Xjr zP&iKA*-pO~WsQ9O8}W6y^L1kII1jcFgW6Bm*2KZI+}Ia_cQ#3LviRc`e?0hO9U_D; zN?9k1nremp<zvg0#EXMpItTTL@Uv|U6oWD|J+6z*vjHn8@;+;QW>fKvU*6P2QQxZ( z7MgQ0-dhIv1{&U`SKc%4OHLEh`kz4z{Htd}@|yVL6Mu5WA3x6&1p;H6<QPfS(b(}k z!nETUT7NtMmkwB2Yt-B$S-gsgejcn8>&XKRjF=9GK-5z^Y@V`2MEk0ydx^cj)j&9g zqS_KO6U*F02zc9kbh97^!;z0NnS!n2w#b;b_Xx8bGGnpzt|%bXh@&kD&|G`O@e>&N zzC(O}!XCZ)X0b=p`}4joYb8<!ylri!R?T0&<Qmn=l{cq3Z=(NyvKo%?_W?l(<dr&N zTqfr$@#7HuR^}6E7-6{EtaP_~Z~6jhC{*IV@3%<<J^P`{sN(8?f+)~?iT;Q;`Qr|o z9(2oZe4^GJ>18GJry#M3drLqMBK0^D=!hX&08@hQ1}*5yJNJ#m7WEJ;1BT3@WHb<2 z_h)No&_#(ZXKO34kjdZ0`s@`?(TXnt9^?$OljZ9jcK(9bp>g-?)eV|2KuAz%KKc=f zM=9b-&}?m;wn4uzw%5&Ug@@kVEyaigT?#%PI;5mGZU63;$~*yep<ZdY41b?qD|hd6 zYde_PkKQI{McyMuPA%;3kyW@V%ZazuS7UqJkv?YYRF3qZd+V8?sH~k#Y*Qak`;^kV z>Obf%LY`ht-qkT;_7-|c_}j7IAH6Ntt6rzq`t&JmNY$?Kn1A?NiUV<bv`K#T`l2p+ z$D@ADPN`<|g-EpVmnlB|l61tl-nc_vv6rL9-_mM!$fMt%B<pmvlXPF}p;nz#66y0+ zSb^4N<o_1-ucd7N3JDK9_$TKZvr>s|nz#8nL!PPEvtL#*2USRi^ehf22yhU|&2F|l zW-r3_Tjn<J_&GFfuB#E7Xts(U(g7NjcDf$+YO`s4K1g4)(@9E=SeKScg^gHgJe68l zOH_%jCn2k~x&Ou!;`5#Q(i<Zf@S~MH;F)HqNo>6VDe?`aQ@MuA_z)kleK&CuIr3>D zijeU78dNlJjo6oH{+lp=Zmyo2^Y>Q<euR`xZuMLOe~IzJOd88`U^osxrX<Eg;SsBe z3wM9PN8soxbt~~a!MM3~9Ds$!O_J?uto^_!Zij4byl^cNU-vGgugAi9&}sI8ZsqPS znn6jojx=ryMaT0qJ4Pj{#D1Z$L#j@5_s{rzaqGE7Te!X;odf;ylq}VwZPtdn2gYpw zcTVx`v;$TQf*wWo7Nx%6Cqoij;%zXe)Q+fobBEJve$kc%9sQM4U2bmhFdE#O<IiYt zPx61nI2)XC3c%24LzOIfj)qTSH+1W24#48cbTV%V_)<SG8-C{S%W+>ev*j(EF^9kh zaO#TnnBaOddp!J@daby%C=*y~TqD5xDg3;jX*v;Dj8^@XQ>47F0@xnwW!RDJX8uLD z%%(3iBjAX3z7p_ztlQHAugMr?9KwXStz{1W+>Di$XgiqwH=NLGdjFzd_gD8j9(us_ z^fiB_7ZUGfk5?upowiEN7?(Dry+XTX`=0J(w)O_PiS700c+RAw_J`cec2+Jr146Yu z^ZFA9)R6%P`K!lsD>Y>1fBAT_{`2u5*h;`{aVFgE$XN6#bkdkFEjn?S7+?8Uk8c-F z<n~2hGQP^m(tkX_ZPwk#oB?Lgj>r^ea6bb^o_pfpFgEF{$Mz#?^Kb0ka7nuLrC&uL z{zCW6zx~wifrNJ6-2HMjI(S7p(tUKy_K$Lczs#Tx*1N=RoBB^PCXZRm|M{%fqJb+j z8|Xj_dH;C}C|+s0sRbUcPU2&~TqQZ*ANqeH#+gSQ$h2faMo%L~q{4iBA<BO1g&f|2 zR+49A_!~O#P~xwX(6AsDoaVY^A1%rISQ3KR?a6n{|5}(aKzgOhb<2M^!fjUbkTb&D zGccpY9$m3HVWGWdg+*Il5NkF~Y^d}IGS_S(5^lZuU!wsg|K|X+2A$!wV>sh@IDdnP ztvt}B+}&NWSxNK_I=eq|v3bLPojAVAX_EJ=2Dry+r;p7`Mh&pCiaz)cN4U+ZLIa;K zH~}mFW8$^V8jA*=U2wt({$r%tW^E!d$Xs$_1LgmD1Mz{h+{gO!OQW#Id{hQ*qt3P! zG-*d6m%|$ex!g$PUuf&%7CY7%XmZmo6qQ9?i=;()=F#iZhvrU6sL6WiK|Tus?>P^l zV}1iz-3jec=WMSr-4ok0Onh_BR_#!Gl~)wS<FHDjic4Ds%-#KI{S~TZD=$rTv8WK= zq85+D$DEVcqP?PA(cOLYoY*F*J9!pif%FzZWa3-e_U(J|RgQmUd`sjXB*Az{jN^D% zs5_b)rM7P{yTnQXVdwX)IM=t*RtX&9*AV{FORPjTDv}!wCC0*XJGrDktnFLm(sr7U zZDDTAZv*0ij2@KLhzp8VH=s0f;aI?jxC%_RXbXM2kG@{$R3}oeLqFrenbZY>GpTiU zbJ}T6wyO(e2F*f0nGTvAvH#4<(+<$jBVOCz**ZBjI)2q7OaMQb4?C&(&Yx0_@2L|8 zlzb3=>H}uCc;rd88=Q~VpN<n!Q)zrkxA*n=Uuejx8F^1*NZRjy^b_uTp4~U$EJQ@j zOP`!UpP1vGPV+VOvy1i<#?~+5{5Per_@H{K{$c>p)Eb*r;Pa<J`9*A;<Hh=7poX3k z!%0g3yj9||%+|3=!e+lcqM!lmg5VMhkX2`SrPY(od~9qeTZzM8AT~5siF;s?`QUhT zaEuav7g<n;vXuCbg;J^@osFhUQjA!(ty65_tOvpMz+~NJcsOGjBFhc9aLtlqLz4DJ z<UytL5*>lI`+Ma=Nj=4E`f&=`Nnx>+pYD|<G+f+Yep0!5ua1JPw-C<Wp`WaD%0ulm zc%w=xyWFkBF3V<}SH7WMiWJYtNtfqZF(kQQ8aNNkY!h+3eaIy{6#-7kJV#!OxTN7& z--#bZsE5;_4eyfLXQawP?wfZ&zp4FQuVH8fC;nZyS=-Sy;n_0`HBd9lY<WniHu?m! zEffni=6#L0jq7sQS}RTU8e3pWDe=Dy!&L)??OITRc${SYciKM{w`j%K1xvFKs&C(~ z3*^HxUDU73UhOzSHhm?~89M$QzdN*KVq#10I7vMZhGxWFn#y%);KKGP=QDt7*pm{@ zjGN@xa9(7iqX*4{Rx~#@kf#cLxhtt@ud%9te_p}_Bu{S(pmhBJb=p7KD=CRjFuZAb zD6q}Wva@_eDFpa$g@qjHo0|f`5&u=$i8|^F34n%V8#}%A`q)(QdIneMY6o2E_YiW= zH2`~Mx5T1+4XbKSGru>FwL~78quj1@J?9JrLi|*K$9$<iHXZHcNfo=zes11VFV<$~ zRq4*WVqNT}urK<gvNoS`XC>`Z<f68Qj`6HKz3_h}94N<%VTvN|C<<R(wP^I@>K93~ z7P-vuuk3z?BRkPgIo6&(i2NPcX8l^I)_q2^+~<<$Utbi_*0_p&bZp{)*1aCrE4p#c zbz517pTuON)wCVsy#MW_)sgE~Yy{PCOlmNDz!1`Ho`wPso2-8!dn#=W>#XDde?1Z* zIQ(SfuH-7S_DQB2^|OuOW+GURUJrtWGIWSh;e0uBVc0B;9v!E|SAwuKhb1NcnTzQ~ zu~98C*;wo^eO+1o9_}tA`PAS=YB5|Xk>C3Q96^<1j&W)BqzC?3?eys1F6JCd4@N$X z9wi!uJdn|&W0eH5>cxhsANCwSUB5aH%2foKA~#PZs;uiR2^SrM-zjZ%sdI?>PhkC9 z8QoQ<!6#*N<gi{5fTaUD1rUQ$v|rniJjM2F-6WOW7*GrtV)V%ns#C@5U>?miKe);{ z)^=$~O5^FT@JiYNb*zYA7#%mRpVHq`t`@D>69w`gP(Ogyjpgr|ax{3UOMN~0I^)yP zG1}`&;v7Q1<SXJ_60eohYbE0&FD3t*MoW_e*MQ8f*oI%Hzvx`m68%DZKE2m!NwNP# zHI%%?(#uL`R<K)HIUjfpVSg?+Yb=vW-%||KO%1+J8?RJaRvYV%a;1{!;AP6nOQ1dc zUdB1cGi5lp-Kk$G6F?Q#(;~sD5?@MhmIYU|9MBiJ0pjH!S^p+_68v=8<lyc|PIT~L zWhD{^zLag_g>-;EyYqFrCH#C&a?V|N3#r#Boxv<)dX$E;biajc*uf*qe8B@~X^pZH zN%3C7j!QlpJWBTmaDSDuayjlp`JP-GJg%%-jPH)&Sxi~^6Fh@dkc<jHU8{CD!(PVx z<3l&4Qe%E!lun2KV&D-MldKZkRH@&|c1r!Jz_Tv)j$ns^?4LJt<myO`P$W*Ts?(Rq z;vg^mT$eZFTvm+ZV|f0RoN6e33C#C%=j+p<6{Ou%tv9$iPiT!ky+K=+ug#rrW^E(T zilXt@+e*9`9~C^4*ssLT8w=JmRJ^WSN!&VyN5nn@^mn2Cw+VmOm8-LjMy{B;knr}K zBKQKfT%2OFYG<2Iy~><k3+J#<5;w^F$b$$7a1#r|=9%e&gqxIjFQ!p7Un_XJ^jU_5 zvU(hj>Z)e?y8Rf~ieAa#uSfEEz$-SNnp>>FN2QWIn9FtH%9QU68a_GT(5vR_GCWe^ zg~C8bj9-{0vAEVe=Pwx^4N3w?1!zE{PGF~Y=5c?V;9W;yB^Lu@bRO3bw$kd{G0Z*9 zFM8WfX%1g2GYZx!S&e;IBkIbTQ{Ld3d--+{j<7ZR*v?#%LI#juu1(vS6|hnpq_R0a z#n3rve6Davq7%#re$FuQmGoDP^{NkpaXy%`%Yb3ans*I3I#*@&Hv}){aYBEt@aUdD z!r&<NVpNVZYWaNdio{vb+*RD6MLr)n$zg*MMd}Jn>(30e#W6c3uOPCBp3UHA@BS)1 z_?g0m$Z4BS@a!;}hczAfPJGPx)bz2q8q~4?;Ft)3DSn!eniGUl^YdWS`RB0X4?)ls zSO+UP(a~!2xduLy#CT|6jY{G(T0zFsx&Sn_xruFR7;4^KHn!@5L#Q+#dTta3yeNqy ze*~v7D?;mkZW)Ev_e#uR`LMeN%yqA)QsE2?FWHcR;n|!5X+9`^T23s$8s?V98ROf| zfHXz;j7<*HLt$A}v$Fca;|_P&%(L7+n`XIIjJ|3<03|;Nq<$>RC6cDnOGenE6=80) z-?i!aL}j>aY`NR~{15CIcW;-{*<}X{+x#sJZ8~y5RqIuVa%Zq0cM{zfE)>WuOOHt2 zd5vMfep8^e*k=;2tO(VrHXp8apu}R{kd&r$4vE8}@Iq+r6PMzY^%+Z{3qqyD?<US8 znLkQC%Ut`v&SFrbd5_Dn(+Pn6b{3-r+M_;N>;xQ2;vQ*KB?(8*POJJ;!A^OyOSB<t z$}tuTp?^OhlvcSIyftQ6*mGN0E6{BF@Ku}NpT)6GOeU#Iez$eR51HO=L?2vbL!bjZ z38X$5jx8<=MoSLU3Gqe~^lAA^qp%YdV?m|aKNk6smlJm}@j&S&WewEnhVQ}^^dNPa zvMP$7q7)720%0mN24RsXrrKOn?{FShGwL8N??WUm(=I2T>S=9;T))UAruFeme%0z2 z<mr9ssbG~4G2k%4_=R+Bsl!eP*a|irTK^P6L8XQmf@&ZaB+IINVasiV7W|^$u>Ybt zk3`uqi@qbdv=3*C$et!G^r#;4^o4eEuc3Fc_|I<q(n8M?1=d1O+h=CzUkF`sM_Y4U zB>0BbDe?2i3KT6gT{BW5C9W3Qo!G|XQ{o%oU=iA>g`Uzw>-s{kiY~T_KmXvRYp&Kq z-tOJmKm4159`03E@}`^fD9|l(uemPl?DtSdZ)gp1lh@&S<Y|}|=R8WU%t}Q%%oW5X z8KKQ27hwcz_0UsVg#B?t4{8UrVXe<v=^C+D5K&hWaMg$oQX`v{_#uu5c~*PNbiaZl zM2R=?N$JreU35qg(bVgo(&lU?TK7GAudJa_SyP|QMBOG8RS?}_e58}Y-20^PmAxoC zJzpZa?MuKEv~JczPa~1yfO6*~G%;tL;o;*(i*#vIH)c;zI%klC?pESVF^6)LIE+-K z0}&6pUOZ2Uf1l5*XZ1N7_2xR%dCNuOf&Ok-;jjnjQ9W|qVR)Vny~=0!md-N#9Y*L? z>LIL!9x*%aOCKiaoC}L-q4mn@B>=@Fw?1{_OYl;lGdJ|2emMbhqj9-M3w0$=PxE8i zFdv}nmH64*>x+7QmmYjj4{g*2&G(<+c-40i;kH8$Z8hruL6F(<gosU?%rk!q0>K`j z@7MLIn~e&oY?2JulUuTR42Eweygz+gwOeJq^-*m+t+rObQ9EkhP0Ov<Zxo18;Z`q3 zjC17PROIQfxwHm_g6U~0@`zF437hvlpVksC9Uc`AU}M=o%xyFHm1yf4B4QshGCXC@ zdEDM;dgNbeAIS%?&ewm&<So{9Hld^|w)?=ujdVIGbU|2Z%}x6ka$rNfS6O`-<~ZkR zL*A~H5Q_uA62z^1o8G10J00(Z=)J9_CCZ(ML+-zPtXut>K8J*@?IdiSN@IiXGoz4Y z9_R0&vwI-wf}j27RODF#^C2gfoYrHf^_aSuu-WjROsH%X+VoJ*((9i#DtkB^sY`o# zVo$8~DVL3RB!DkPHnp1&F?$it{Lrg0F4$XtPa1We$9Sjv;2Sq*Gcs->_890#%+5jD z8DdA6+t-OzKXQzhE&FusEqcjZ+sAt?!39D>Pho+MI~~dT)U|s3gJHT)tD1^<&1t*g z<d2!RZf0HvTgdn;zD=*=_;AKLLP>{pyzlo!HA^tk)~673g@6w|;!X6cz4}xyfgr7a z_4g#+ZXOqF>5)_FI7m6&kz{GetN!{chV;Vw7!qv?LuT&)CO#Xj>yFv*o%$^3K5dFC z<e9YbXzJQq^jF(1ZIxcBrD2E7+$-&s((#-ifb8xTy#5w+&_bv2nur{|Z~o#6Mi4Q7 z%Y^IWu=NP4sql-n^k(u+_*_kc;PjR?j{d}khn2YZxC7(FTJ&&l2L5-L+op+=Xbdnz zE(htD^Qbnpi*{T0ZkcDi*lj*LExnPtc_p9Hr*^&ZW0`g!P0gB`u@oKVa=Xb}hvD%A zhQnp`4`wdb9Pvg`7cW=*e)>F_H}d#L)6#1x<mR}V*#QCCJWISn1jlNC@p8&9F{#bg zgJNIQ&({9V8O-mggF<A<`A~>JuU4!#1xk>~0xZ`ecYWBn+?~2fP8Ee`nGf*RAx>0H z=j0yY=VX0W6ALVIK!>C!>ysCk_9zC7uZDcLK27c3ot4<umSZ$ZAD7)AtBvrXkv8kd zh__JIa&@@uRJ%)G(HcC;z1_6$mCh|k-ddnlpQ6ob>Mi%Ww4E0qCE?`e)@*HZGZM_n z0cqa_JQ(c&QV*T_E2nPhB(FpRqF$+Q>Nt6~?JgomV_bzVoLZ`y!!-^=@;!alVr?=~ z<Qks4>BH_1vJBtdGZxVY9bxlY!o)WgET;QdwhL2&MWzP+EE*6zhdDfwpT*8+H-7;l zB2GOoEs}o+Q8EPH%8{U%mZE-rab03R$vfp7QL~sME0xu<&{>0j=g=nYxb5n1OQ6*T z%tMudhU968H>o7X&dZ9&vayQMC&Zv~W*A+%yk6_G#mRi#4o8<GTl5C`$Oeu#o(yfj zKDD7c>DEkhY7cFZT?>$gvwwrE#NTzX_vbHSd)<+H`+M?Kd0m#O3$2hkVI3W=w+VBG z9%*9ruL#IIfas6X?$#guUousko%|V&oiEEzvHU8|O|e&3MU|@3*V~rq^(s<Rv>>y? z?WN6f<a$uzdEg~S)nD!MMVpVg)T%OX<Zzl{+<~2+k&pPgl%vn4i4n_2Ki3f(1^txu z#OU)dRHutnYjrRmAc7*Sx3(lwZNJr9k&;#fMX7;C_N^815PtmumKfmlTJXG%PwM5e z;8xC)h$xW~ELTZcRf}T$K;reH){~nUjvOeYPjzv=lRRa0d<-1sb=Xu0k`~;tg`N$5 z`hIC=Srwvt3zRj#ak11(5UnMY3W5VKAdCx2Tfth_nBA2QS%oUECQz&-k^))a6qv^X zy|ynUQb**nuiydm)uWD3ug{W~-2|_5Xy}pX!&esaD#ixp418E+u!NIkRw)H0zCwJ= z8j?{`Qez-5`CDgyXah9rg0kj9Weq%wwIMbX^_g`KaJZ8fo15-%A>yL01s(KuOWMSC zyF5yiqCOkTmNjX|opn}>{l{2c=rQEwV$YOl1LC6CkUNba@}#;(+4o^-@RdcH6yuM4 z<f>3xNCRc=$iJ{N%EEHwZCx<2Z%piF_r@C3Qk;Z!yTZqwj5TMt^&G>01-nFJJ6(}G zu}3or_<4rs7uxpNKFRQlk{nRWOl>efe2LW%Fm?s>(0s#_3$qDLT+hK#avB=vgu(^T zMtmez7R!>lDL;i&-0B}QMPGLH$euIbR&_v&0JX<_^Bd35YuVR~h_E&0P?b0!>gO{K zd2UA!e{wM*_|cXnWG7e|3UoQEwA!t#w&f|G5O@PdgKP)(Y26(Dyy?YJ!<j5pDL#_B zP173UTz|AiN*onIn8iz<A6LKyw^;X_VZDIc_6%~<Gq~nY45@N0%R*taK06}S`j;3{ z6TpQ;)7Cayfsrv)rHbFdsH|s%i;%B0g35oiU2cM*gfKZdp7pBOU%i|`_Tet6k`X*m zN;^@xvzlHMIOOB}nt=<D2&C;IrcMOH(#d{hH5e%3j)2^}J!lsxoi$3T#Pb6sG4>ck z2gj_RHwr|gLX7-V47J*gq80zbWitqM9gz~0h!5+zMO|=Rwe{8Af*$L|s|?@a=&f>2 z#47tv<U^7s=;cC@K?-q%t<WyS*9)XslmnI0tl6oE40T$G`7)Ow$fF&ts#vREGTM8~ zLLQM^9hpabizEi%|Ax}s4J3Y1;}V<@Vn*e=kU_8z=|}3lTDL<uw0$<|xC@TTZ8Fis zpr9biDir18AUV(xISpb1etgz$!jlfnB>9feQWi`cplOFW-&u`$o--CL<W>^rr5uTW zm(Z3VE;g^Utx#G0Ahl!6m110U;hnpj86^IQ7bk<iDbRLWGePECToSt-vh6LLiukyv z-43BtAJRzHZ}spA4_vYS4S%(PjuCwp*Mr$%HeU-5j&GhR^2IEw(~x(X7@}MAGt;Y< z-MX;t61`%+=2@@Zx=;_*Xs=*kxk9_=x3foSJCy_!UZd+2T|M6(riK8Z4SF^f<$f0m zp6KQIN}S_gXXJyqt_yg>Gm#jy)|~o3yb-+uaFUV`cA<QIS_AZK2h7Ijd3(9DXF*r$ z4%Z^XoyYv}fB81M0d#9wI=eY5apJUr$ad)qk<Q_XNrIl#1l-od^tq}{;H0J<x|h1b zh(wxnWMV>=4Ft6wFyDU;ZoY&HVbSZ)MJX=oG241i9K(q%Y8`Q+ka>T~2~THhJ(@+| z)~@Ff+B3_FT-ZOUxLk=pJIuFbe&^@?^ur%O^hM+(ee!(Wzuvk>v|IGHh3rOV!5Y^I z`G1Ied!iAmIXf4txp0JGYe3d-MD12<N3osRH|Nd1N;YjmJH@Gu*j(_rezSX#Y!3e@ zm6=N_p2eym+A|ic^PDrba2B?K8P8==3FvU4IFvmOb77xau(gA!GnVDjiA8g2;S6+y z@TOoP;Es~Vl~mX%00u}sSdzeb=u;}+pwX6;&2CoKj1ldltXE#Fi4MCyJ7p5cQcKA( z$b;9T$?32l_z1ri*D0%!&!T8Q5&PrX5v|us=Pj>c-qL68UC(xg79I#3mRxKFQE$*^ zdvwn)ZK?O&U$6#bRv&ycT=uZbQO@WBv@`?dLjuy~FbU?V;s@y#azL@6+{|+96cL1o zLj7H6z86c2-JCD1S1OD66yx`3Ih3oPuKS-hWYA2Pgz8thtmTSVr&1|<m`u!QXqVT) zQow8ir(}Y?U<OI#F7t&CQcmKy*nmsx7Ih!7KAa&XU%9g+CH9zpvM%3FGx-J|oHH_J z{n3L$);}pFc2)N2*2dw?coDE;Frwt~Oq)-$aUt?8Y&=?{Jg&ZwJIp~5C*wOM(M`XS ze`Fe{rGvHWn1G#LF1952{*kO*k&B&-U3PwT!BPYkvBPzZcGUd&4^ydYnZ5YuWwsoe ze96oqhHJFF@w@fNe|su~8=$@h*&-g82b_5^&?2<(pkUYQf}q_?Oekk00YBEG1C{3) zFS0d)sA~0d=K-Qm1)A{Xvw>zb$xLKXmlg~hep0{EtF0xX2U<t(ht+`6In&?YL!A5j zC%If@PqFWj65mEYVtXW|5(YG|za@G&xAc$_J0b+Ck|W!==CCRv#^VS+0l@WgnA772 zh0Q9UUy%=%XpeB=3FvbRppx5;pUb%f$!6AaQWKHO^;_JDROC|q8U%%mM<3B<zpHs- zV!!GmAYfc9sKe@gKQy0lzK4HB`>~D_chFV{+H|8qiFah%+qZ?uYqfs4kLC_Y>1)~i zK~r0(^`bc2^hSbZm75-eb?DxA8eQ#1L(c}_#XykI?hMG{6JpmSVr}lDE5xlq=ih!W zKg`)h7vliG&e;vx_AbO)N?pk;x{H`j{azk$Y_HV5HZVrw#r#aHDVM>pANNS5o0S?= zo1WGaW?Fv!a^5%dZK5VAe8vT|t+B3oT08*v9Hq0Op`A_>WUbsSMPCdcFNUi<9>}65 zBiIk%!m4ApHcIpb_!+`7z@ROQFe5IacH@D6hzF{~zdjZ>O|eN!l+JR$=wlo;EJ^l? zH`mY?QHd7>QT5P18pW5<haQO&md;)={OYT(dWcQ*pqOJe4j}ml$Swnp-~4823XyOn z^g)S$a4w;$c@o{GTgWPk{YM8XPR$EFZ10JGi~h!10u2(aP(buuKz}5$X2n>8l{-)3 z$-we}`n8uSs~$cX+KU8iz_#(H#C)uT`^lG_LnE$C;O{Uc?J17l9i0S=-o|<n4`T0@ zUw0XmE?yzcRHnxr_q}rZRg?ZzEVf6ZhB_=w^dpSEX3|>5hNblwl8TZoCH<G5R2~6W zxG<4YX>p3SIo)(3hw86;ayCoba(c>|Na%dHoBot5YrEXtN&?1r`&C1vQ^Yd6w4^ev zTlsZmU^(^MY*ZYhKaGM1UkuNrAWe=|wT+<JC@ZU;_VBXi(@+*?$KB-#TFu?*ynH1^ z+xl$tve@{EamUhjGTxoEQ?UipCcC5;awbTd<Do=AsG%?KgFTZ55oFz3DG4sh>UTtX zhibO{5_M8K<y_?AiBgl1X51m}bRjI{1fS}pT~CkRIEVfli?@`-9{|w}Qt7V9M><?t z<07&iX~Bw1pA|R{j<_0i(W%LW#1<jp4{`;Eqrog9e(=bJB$f69l_3ey&05}$>Yqk! z$D1cGDmF>#SwwNMkrMqX!r2i!A1fguH&bGg1FB26kpRI)SC_cV8@cq4Ty}^nmwsD- zdaH>pFLo)~<q}(U3Ch@9x*Rb7{RdXKB=99L>Kve3Pi)Uv_U`<Y_Q1L<C2{80=&!8A zv1`MrW%;#+2*wYalOJ_tfj%X%2Sa|5yCxB)+s$yuH)2~6M7Ho^xS4V!S=flJ;UKbg zC8P2w+gcBp!gI~0$L)=c9bFtSUoCNtQa&<LIZ(zhK}9-cq|-Rc?cv==((lTUb`rmt zAZA;=CIwSEmNdIDFrUz-ToXT+k7pb*ijVUf5CjNS>i|#d%5eZ=J`Nltp{7OPx(r?F zDf%^#&1({GYr%FUamxhZ#=V?2giq<LDqiPR5<i^4ErA7x$joj4G_GbkWwDf{PYF6n ze2pO%4f8eZtOqD(w)z<t>zRy@#GBu16Q$B##X!iMF32x&Kwic8_E?vzzp6M-Nx&Hw zp9qZ61=UtM{rP%T0pPa@N3Q?Dk;!;bXDq;=|KlM7;|83y4-<!4`hH|WlsH$~9nJK! zw-T3~lX!MVfJR~_+WYoglr=M0-hj%4IvOW-CA4uhQVFZwQUuALLHC~;CP_w+j1uid zrvLrreroshu{MELR(i(r@G(lDNUtuh*TZh3+A|xRqj~)%N9YOATzzQaa{4UZI943D z^eJ}EiWF$LhLrlNzD6T5mPu%hkj+m0QewV+k%P*cl=#&-JSw-KHu3S}T#iF`iTS7W zi@i#`h+Z67F09--ammR#Vxl<LBA58`!S4&@4IK>pmhF@!7%&~x21LpV(77*lIl_$h z9uhi?1|lmU65R6tUhH5zQ<Z<QDuI0)9>wL@w0_}Uh9vBApGv$C9l&n+dBTAG{pH18 z6@k~80G2ljQ4l$7syIuA1(Cla-qjqm>5*2+JTp?^#&fajn>c$cs$daXq!mT)93Q36 z6=;LrYTd>ZPd)c`zvDrp#Ge#i!T#i<PCgV=AMs%bHP&s%(|*um+Yn6?h^)P$B*43Y zb8J2izX_5jO6me_%I!Zr&bya4#9AhnL_vCzKGA-`3Syo(kR-7`axS|iw(digP$dqV zB=K4J&<fc0N&7c8OwktFIp%Gjra)OS7%-WM9N}AXZ%%q}T-n>9cV%(r78Roms+f=6 zu}xV*_I@VHEX5<Pv>bY4w%FA+$dvf`SjpLL8@Cf+=Vjp=8#ALcCsfNL3`t%`;9e)G zGh-jPBU2rtL8WapIBA_*Ey?t+acggBW=bUDMk=mCv-%%toy}{m^znmT#98^>t&8A= z;71ZCS<g2r-=*z4)~oK(%jL&m(*U-pk2%K;Vv~pnFL|7$G*7qX)?O9{j&4~=AW=V! zQ;FBvHUPv(h;CYb0X;iSD&t(U&N*t^F_*C;WYw7T`0W00&{22t<D$72`565*L=9^! z6i@<~(xy^znkrMpUu~ZzF7R<xlr^Rz8;z3KjN8OVf$5hYH2hrMg45;a8omyjN=Z94 z4m1W1|A7H3&rB_bvN&v3{fgK2(UG-{Na+DnhemzMtX-E%Ws4&S416_K!w~ooHg~Lr z8W~$3l!LeaGeu(Si%)d<Ni;iSm{A?W#yBdV);n2je0#mq`1k4{J<HfnS@v)=LDlpM zu&f;2U*V?l*{BKVJpOw+#J@1a@2}<cWsQ}@`RR+^rfzYZdKes@S|0b&LWg7p^y(UH z8TK5Zc0WiknXI$+f1aVA_W#<NCX!{?JRnz0|Gyj!SN=^<E^#c_-zBFy?Fo3%*)5QY zXg-Fz#p)lR&jvh7;;OOfw>YO9^h%6+7aSZl49+nrI>AP?v_Zj<woTK)jWQ?d%QYrR z(csD8X+LK*X;`nZ8PU_2{?I$)jB<MCG<wHR*j&0<+Yqtz5iXQDl*Ch?qY%aCX}%du zjIyR0DqfKdy=WWTxt<b2>Ol>)?1=A8o@v|JlE~9nE>cUprL3vR0)JcjZknylB?eR$ z9Pv1px;4IyzNY<IMnlpLTi^Yh=PuI`2JGk)sDXcUj6Evuth4X*2|q%9D6qpmDf`4R z#}9h2;>yQtGQhE!d8+NaFq7v?c>0}FEe;My*cc$c@ykzMm_A$~j?r-P1Qz3s7{`b; zARYx7vz%r9`Eh$Kn%HHuTz`?FmMmG&QM9G>{k93T7X;(vp_Ms_R_42(rBYI|beGLH zDr;W<+?GG?+(=j2&I{t4&Z<m^!#A&oCI3VjVDV!%U4?>_*eb&N^oPlnMg18p?LWUO zSlZXVD?mZOLU^jp#ab6*Iq2Sv@sw?IK@xq$jcSL@UwjwU#)Uv@-YFWeekFVz1O4R< z;Oq&N`@|N)Kda&((+wOe+K{>K55fm#^XDU6vDhux$zTw_b&U5+&j>!+fN{8I2hwAN zJ<x9rf1YwGpp=+L3V2Y$kx9I%VdKAfG~FKY8IawAH0BzIsYsyOmtRRdgS7m8){~-1 zW0~8S>siE{0v%<C%;$bH`Xr5PXRf?lNu2F4vQ`6{IP4H7>sspgdGK1+TL-vNI%bXO zQ0O%<P3a$T*ZLNHX(2PWep`X{{$WO>c{I`n?SN7Dx*Y5B#0I6MzCMwFr~DZH#Jb$2 zTO%LSvd<$ZgWuIExNsw!1qAaOxttka^-^jsP}J2wnXbp{OKWV47&H$wn#J^AQ%acU z>dY=KgToHWor3T~B*0j>r>6p4_$kPP%@hMUyFbV_TE@#<c@LSJx5m0;J$wx5-_MA? z7+`&fl3)|4TRJ2i)WXL!H>S`RL8U4+@pjup>Ojq|qmD3nI_?eM4(Wh1XW5x^56u|_ z^TD`{H@68aoJYi}DbQdnc58jfv-O(TvC@~-ll8j4yS3Bwy4W$j?oE$2OOExrwH~8F zD%})$+X5tQB(q@Abgu6?FiLde<y<q!=l2FBaS1JuweaxBd7^Ew&O6MUbe)5v*Wq}% zt<XB<5N|5Rp+CQCa{zosBvvy=SygPkL>FbWd(}L>?mm~EOC&%h_`vw0#Q)A#*N0qI zuP}nRlkaJ-YeKC;G}Hp8m?0TAfhYNZhHrj*scR&@6ZVfuZ2w5P9PgEdh)OON?)oTB zQtfDV>jEtVOS#?faby&d!`jg&eYOWS%nrcYFeJZavPgfL58mmI;;ngji%8Y%dZRMX z6gHoDAO)W`$H87nu;Oo;-?-L~)A|v1LWTI<H#v_xnC!RJat-F{Z#pv4<bYa3uhB<b z<cd2<bS?K;^Rk5;V%Myi!ObD4Sd?7VLw<Pv)S62YsgbAyb*oUB7ec;-k&t5@iP?I) zPiBRc%E4QF6Sm#;B-4~f&gKNGBkl`-96Q>5p%R(2^yVgQfXjB%$EDq^Rl;Sa_{&^o zzHK2wMbz2;^13d&;Zq^%y1;8i5U^lrpRyWNAPhMQ^8*xVa0;s7F_)`lbtQBhOvk2a z2?R+v<6uI1<^WDF$NIxK;gmo+PrQLp&;Z^rnsZ}aNW_l3q2<Z*)AoX(tWKe!<d39A zts<yLMKn=9Yq@LKDwyf1lvj2Oak5Hh<$xS{iM=ppc+}^Da^%mta8#?&8&ux*!Zc>c z<x&!}67DysL{pf|6?Sukk@})-UYBvLPZZ+9hh^E?dy&2RB+mttkf)FMXo-$RVbk;4 z@lEBBMhf7U;S{W?33$t@J<6JKcuYKFI}m%w_HwS_Otjj2=3pD!xDvKZljj)5Sru4E z`ySB;#Vb;_<tlNN7}Gp7_BCj$8Uu@Umf|5!E#^^G2GrRG(cW4!xzPDA{+KXpzz3>C z_k&+4Cem@~USVu9#8V%aY*Ww2p+ew?K^<yRx-K-A-=7w==4P}-9W`r%njg7VRqc?r z)BF}qNu(S;t#m`%DYQ{lV(91*y<lFoTwsg7Sd~7pbZA&a37W#$=G697W<<e$L4SR* zX6SXIE_;NH$W1I~=Q0Uc7&d=@55x^U{ayTF`p$Y96!@P+k=cdo4K!5+53GE#x0U!j zyY(-$H~Yl)euDP!dWXFQG<LPxBq)-Haq3wojsn5S9=$wQmpfphqfKP^Zm0XXWfktW z<p|U$yIEeo6q(t_m)-2qJt%G-P~z-{GMj+kc6HI)I954d{|2dSuH0IUw@H-t{nGGk zRXQ)1W2QScAT8TnRup*$Ea@Q2#KmUKqv<6=CUx<7%SgR#8j+7vYcf_>_>?=Z6fy%7 zU+W>91k>fjmbM-GTsKMRNa^miwSuf2L^5B)qiefpErSHPfc9GQ+zk1AFefsh>>MS8 z`U>=4tVb^0N2kw4M(}{rIbBA2*0;rTKR<)#Uu3sl$)0=IjfK=`kjCGRx~!O54@oK@ zaHje5-=!zFU4(Stx;;O|OA9*l4P4H3vvR@D@MF5&`d@UDcU-|U`sIG3@n>A(k_)FB zVK;JfFS(5!%KpwHp=a3*x%wp8sCAoHi6?&+V20`!W{v{$gWsk{6GAB4CsOh*=#;Dn zg*TIzjvwu28j!VWc!ckK&-w*Cjz{Xz09^|8O0S!}Vf|LmQO9MTm?G$^%t780o>9(9 z4d#!}bEFQBwP`Rd7uN|JHB281Ar!+7Qy~aL1^6dbuK<B+)+<1MTl9)t;u^5Cz*l(@ z*wa#LK6Xc%fBY>C$6_+rNW&qXX!c+#b;3~IJXbL7L1ao9e`BWnF8o_#ALCqU01KyI zi7+m2X0^81tzk*MQLpeDS4pKi+ve+w+(t3Gzr|V}a-|}*6E_=;7dtW2wtN`WQ;~}h zGu<6ItWW40$AaQ?S*plqGe|)?+TZ}oRieDwf(~tS@(s}W>>9TCdbBI^mCkZm+YsA( zG<x(*byCo;UKTtp^6h9#!0U=2zhNB_g@Ac@4kuI1KUMXtpMZh<($V*M`o>{IN~f#6 z3h}}#^qWgc54Mb7kK5K_0XhU-Q;SOHS?!I1)06ob_0Hgi-tNzjZIWWg^VBV9k$^;v zU|_+s)kghl*|=QNDrlts38lSlkCjjpkxlxQax^H-iM$9e52Dlb0_}ocIiCl`AN!R! zv?sx{iP^*7Gey~<qAu$#+n*qM>lByz>*%dDE+xJK<DpgXGjCQ3t9Y*ZHNqYaQjbS4 zlM0V6=VoVRSL7<4x&0fWO5$4Z0kncNMD@~A`lPK`zm+~&1ybRUd^^^S+^*i_N!VFP zNzu}NEEOpzt>MB|-iWDf=8)8id@g1{&18?)ug(?IJ;U;d(+&k?yvbdCFaTowXVCcj zaIWHqhks;=A1Sz8C2mO92WJ23e|{6*>wo?X6r~{3#Y(TpFRduiV0B#m2=4CCXUa;a zFAD_{W4j-2KfS#&FrmF_tUftR1h?%peOi9mG{1V1exqB&^~ZAv!J<QrN*ueWw@Q{` zZDFas4n+n|f>1IoU!M$zB)y=$-mLLEJF63K+}9O5K3BQ7J7;tE?y=)VPqBUDqeDxS zRlmssQf<p#drut<lzWB0dX=0-qi%%v*Ea-$KQhKO;`>Ft89$ZEZY)%cZh9JRLz$ni zgMFGz(`s@{nu#H{kHa99)qe$NGC5zLg#p4JvH12`=DM?-G1BmcX?Q(3TStaxgx(6y zQdTXKF}kkowXwh|jLym1(MfMH5H{!0%OZYmYAQ|t%p1M|(WHrR+^zh@^HXi#f^I82 z_JI@~qK>*U;b0x6Wu>M9q7meTUC;r&CjVaXf$J3d{~-RaB$DFQTx*Yw*GEWxbh%wl z*uyL0`FPRPUq|RM+S4|#b4M;AFc1LBCKsv~Xp<4V?IY&sug67dlib*i`H~Sn!rw=S zBxTht!Y_;(rTw4hvU{?AoY{X~y8kJnf45cf<<Bn=&vUHv?C11jf@sk@oN151cUiLY zT>_P4=+#rKeaF+^jS=7NJPvrB@cstz{@1PNN8T5OlB{+7z77F#=i_cyl-}mpfXVqd z242MFEIHbel^P!z-{0p}5|2Z+5Z^Y9=w-ireWr+hPq!-Ue(@f?66aT<E?1<JqbwOL zbdwV_C<&kVY`it$I3KAp-%mH4#q^!nvgGf+;^B5MZhMd04HH7x4Zm=V8_u)-bnFYy z9v08ev+n=mvzT}Wk`GZ_{o)(frQawAWM+QxjmyLv=W-gp6P}$fo}F)<`Ne1BM*5~3 z*1*wGAi*NX2D6mJZXDRT!(aG(^HJyX91QHaqhEOAvGf~b@x}wr8|CTsh=X-W(mO;; zw#W7rX{TE^eZ?@Y!Z5CLAfK0R;&R+S`HS}_;{ID-ob}1+K}9jBEO1A7Vhtd@UWa+s z8Pva5vy{#)%3tIwHEV$=W)~ftYgLTs=R^|-j}aLAJUBL@=NA!eHhgR$(cn85Tt^gr zD?EZ{WR=eHtEboxV=Z2po^&FmdRvVvqUd8KGkY?fg8A0t;6*3X!MHAathjY#Q<Mk4 z3c<#AAjRHi^M(JTT@SEN+wlTxoj$ht8EuF?P^S_HB~{VM2Wov<FiWk94i%_Z2Xoa~ zK}j7Cm-ke1JIF!B)?m)EPh&@i)qSy}DfN4X{3}DQFdDZ0urLa*82X<weP{Cbj^DyY z&w709q#IK@cg2#0$#%N0?aavI!up)wpN-RU)qd!6*!26p21b9oQw;$=*d&9nMh<?+ zX}3Kn*^9R6Uk?W09IUMR$rzjnTeDw$AWDK=>Z2oZ*74ClNlDD1W$YI>@|48%kzZaV zF^d@BV2%?1sW8hUEZid!xlNLZ4wu(1a>cqz%ujA();M7Es;h-B2MUjP^gFpNl2ZoE zBS#3TlaSKRO~*Ph^&Gfn)Rt?$fDNDE=}S3AMPJL4NFT1(ftYLr5XAW!Jmoo;`%V{~ ziOTP~m%IjDK=5?^D!3AP^iut&vJxL81Pgwh$05eRX$`i)69^TPR2OR$v|Z-B^sszj ztc$Xke8K_%JxLyhMIywStLT1odG5(d{Cjj28%}A1)FLMe8Bff~JYv}!2_AYKNBsND zw{CTmTHOi~7{Mm#jcv**{iNk4E_>GtT_1sEF+s1F*m5t2^3;a4J`OfOwygu^J$5UE z^l$_Nc;O?5_mSXE>!vQbWQ5mTnC`GwiEjY1ZIVi<&(;UDZXIdAp{U3f-=eSD8CrLG zv=@kv!O`enPi#}!ZKhpdnJ)uh9G+H*!)O?spt^&nli)QhMEFD(^s#|J(H7(Gr|D=m zWszOM-{<<8i`l~S@g|B9LS2NU*zpQCi%WpSf?HXA+NUJ$vCm&Uoi9%`uf!k7;@3yI z_)R^h4tROAzkpbBRsq0C#d9phDY|=wTT*ObSj|nd=ebJ!V<3wp$_A%rn@1eMeucZv z)f(~{T^7n(NpHCfIQT5&6H5E5`Pqoemgzni3+SJ<VR)oIO90Wu9bF5Dk+bh(dd*sY zJWUs4#8y-HmyxW3n8Lq;v=TzqX~W4g@I7XJ04f@>q{^M3A~w_tZ^^))KEj`a=~b<7 zwy{U+jl5|6A%owdxkQ^~Nw{J0uaW{K@lO|PQoLUV!YxdyhXF#aOFxiO$CI4lRn|N_ z(qOKVxXZ=6Ly14ZE52elwVd|e!(9N5ZH9Jsq`d)Q4#5VrSNQ2+7S+5thn2*VV|<O( zzK2))nOcERy31NEkd8+lzia&Hg-cY8;@1QojmMfGqNoEK(3%T9N)4@}|2R-+1+Brz zSlP2ce5T;DmgB4*9F5-JtaaXT^JJ~cqhd_D_ec-Y@~Ah1Y!a3=tn)?|V8LRWz3bfV z6%9(_uM^-W*H<wQ1MI7ylPQ(mS3&rZTGdz4M1RJ;6s0F3i);Lz31XX|^}dS5;u}@` zX%>H4c&1+Cb{JG1hYypIcoWL&A(tRO9@@2IMKgpeeIXZ;SJf|a(R{8hF>Wr`b`r0B z?ouuU0a$5$F|LD9v_(4v*LqIUDJ^AmTR2|ZqzyJ)tsNpBy)j%*Pd<t`*tUTPb7DV{ zM|Y2sKy4Bb)@9haEu$BI$lP;~k6LY~<sRalQ;u06nn_xOz=>k*sQI2ZmAZB=(xGab z%s0HEm;FeFTH+Qou}~a2o)M(Yr2+L$<#UP7@JVtoONn1hZw1ew!CyiEwFs`kQ<eBd zNXb+es097i3IYVCTt_>}JPM~evTG7G1`3@cp?jZK+YbNg#=sAtI->iP**tOt%+!Rn zeW_>pn1()?bzYT$ps9Y6R#rVcX4H^5h3TpGfa%>zBRm}2b6h=5>8zEbNR-()1~SiS zN_+_<%>h|i_3bf&7V2wn_h|&i?Ww((ISnC*kkveq$VZ=9J{xwHLL>HMoHm7y-1TAJ z(-*_L<}&B#rac=P5L)OT4lq%T3@|#2<gEe&jK$?fa|u_pJF;ZdvG1g7HJSo-B4sNM ze62XZJ09W0O#wNHYDkOqN%^IdN|e=eXbs9H`DwF30Iqe%g0~aSR>=ZeM|cO*eBo1Y zX>KADMOz4CwE;fzB1;4=dI=W~He3yJdA<GU>Lm`E^hWL+IYwwwkBIsx45srlz*L(C zQ+YGMv?vXxlh)A}KX9hnuOy(hvCa_fWCBOqN!$!LqIYi20F4@r-3D-&{lv9SX~?qP zhik%;T%O~|hA<{eE4I)Qg9)9KOLOk~L~IQ!+A0$hRwN1R+C|^x)$76m0EU5-D1JsO zaw>?#&)9ywUr96_6*{lzZS;BKGU%a)-OIR^t8nNzxP4DfEn-jHI6qECOkGW&k)|*s zwxMJZGMeo)Pq}&2BL9hIt}P~#*>4j%R7`U7M%lhQF{w_8-zzg-3$Wx&3TwLn8*L}C ziaiXQuA4@+I1h)(q#B7Kv*~k^JRCBfMPz*C=MIJSiq+fmIm^d<YmB({ckxc16+R-^ z5HJ^7pSAV~Bk{NtAC=X*95CY#@wK00&o0&-4uE#ouq4RANn^OpiN{7hn*I>O5g%o% zujmB<+asaayxx<-Y5v~Tjt<zbBPcX+XfT5bIQSWTKHFDTN0=5r1cS{u<4Q@J4#QNn z=IOAY(SshUniFwrTeUZIUjX9M2j|3g`%$bR%Yv7z9xA7$W>jG(gBl`R)iaIRftif) z18aGhc7>X3B@Qh-D}5GpM5lWt2d>nKI&Q^OmmNog!kBUfA(F!RS`RI}Ry~?{4rDRw zc!^~73Z=gXe2~>WBp4BKpg>|h@j%)7b3RZY?(%_RJps#k3)6)39v>oJ_st~ZJ8=9U zTi<NF-Zg^Y|2ia8-0vLzB4G+McK!J0{D!uHQ<ih={o=!di7;XZM1hju(9T}C-@^q; zu4Lcxn(;PUQ4r{JvBEf4a3Q#(Wpe=rdM-<$e6VGiH2b<Lv3d<eq}3OqLxe+r%HkuX zg;1adX9A)IF{`)eWT;ytrH_U%P5Q^?2-nW}xigQ)eP(u5`b2=`q!NVHxO`Zdek8X0 zxDvO0)oNk`9O$gX5m8Req>mW%S-2b|Joq2`9$kJU34ha7tTqIG3#lh@Dc`6Jgkcrn zuMXI5u_pc^kwLY3j#lTylKUC|zd4Ra#|ioHXo!xGpe)!~x-6p0XiMM+F5(nnpuHVZ zNupmpU!Rs&hH(72A2>K!)~|JIzIJHWC&OIr)nuJ`j-#b-+?-4Ad6%7{7YDS>oH^c3 zPQP*_IsIE$IPHDm0&V3VWBO1KVDkW0kd|-CF^7tb6(nQr!IbbTf<^1F`H-9D5e%63 zx%s_O*|%>x=zI&N+;X8Qr*%Y<W?B1>X7bgHF@@I7ql|rC>)Fo)bpmy*bipAxAC3>H zA20+jaNEnT{!kl7RKoh;C^MzrSUNDU*t~EIzl3ZKfW{TPm?}!hRx6!ekr1dLFmlLQ z*NkeUksGn(%tn-zpC1<!0fJipu<?6hDBs!H;6beW1Vt4zq98!Df!33_r^HVL;<@#3 zV{Axj%hjFy@4A1*xsB;+a0m4&;^`yb)2njnPrhD7L^N`)zAP`%A32jgR9175#JPdQ z+mZ48Rgi)FcFVlA?S$_QV~xcnT1%kLXh70<xHY)7U9^1`xy+kxpt*KC2g(-BH0tvr zXIh_(;{TDwy+?^7QVkSZ{gfIFXA?t0`x1qZ+@M*+XdE!lyCH3JL-pmfpuG!6;|vim zuN|;h#nNBIbS2i8Yo0Y$Fax^FcruDD?^|rhFEGY({T=yAcjP;U|D@Q_x$1dbA2Tnq z59u;{^XOPC-NaZ-VuSUg&p2PwQ6l@f$sIHo%^XQWf5$MNH#gP^>c^A7;E3a*;nmGx zDp<4ybnxm$nWt=`iFgTX*YQ*;eRe%Akjk3*37=Ig^U>bCl3tj}FH~n!3q90NqYaN? za1aAT8a@|N4$}$?`cQ$8-z2)BK1<Mj8q^~Bu5Jr-gW|i$tJbIXhf1f5zrBZk7i|N% zNi2cl@jIC~X{W8uM=}(9^B5ixQ(YM-oI&_qnOZ9IP(PH#WE+sEuzW^pshe-VE>Iq> zDm1DJ_Mi-^mxAVLlifswv}<Jz4n01rmAW@~gwuj-mXg?<-uSGkWsiM0z3}-@y?JKX z)MKv9N1#{p1<YE}rO0vc&QV7{AoPu<`)qh<{rN30a^?C(c5Ha#^*TqeA(2QCoE5$7 zuVtYgVI%%C_tVKp105$Qg&WcovU3`f%R%*x$sG42{DMO=BC?L)Fsi3P)g`v6axh1| z0_V?2i@FF}_M7)m%esOCvzI``TAxRN2yd%0ZP606N4-_P=QJ95Qrk&TC`bq0!PCvL z>yGR<!pwZuN4!PbwIDo87eS%<=7#@r=-oIvqQRWNR!_4&VBE(d^|na_GrpvoJIxJ~ zU{e&NIJq)yucz^$lpTF&bl_cj^B0qt+k;SVer>wTNe_^=e{Y&qtG!~b^kW6Szmr#B zBu7ADQNMl>P#sGGWvbpLhzzkQVfN_|3sF2QxQjjzOQs}lh)wn}9R3=!?}Qp+WxUo3 zm(VxcE8&JR75O&x$#sGus1({2ZE_u`&`3}8LB830T=dq%y}5Ylx7j&8XmB}`>i}mi zbTPSv2tdIMZ4kU*p4qs-;VSyn?-Tz&K2i_WC^IaJ_Yj*E$_HQPtg4c@CWW1t{KLpO zCOao!h8aI{QF^IuKZ=3mZq`qw)US_Pj{!5Mg2Uds&FEBHpFRF8!2T~g()w($>U0)q z-3a$3P`gLUPB48<=`RXCt8OGKZr|k`+|<sjJ9wm9JbjmQT?2h$Y<I_sTjW)Ee7Rp) z8KXCiR<KUAnUHsWu&><R&U0GPjlaZ|a+8U;OZ?;H_kE%Ab6l*d@UBQb{=^gGwE<<- zZ^p2!C3b#+7Lt*Z3{s@|#<5{r>k)D(@jD!2r#1w*NL{5pONNZakX?}x1*Kt*nkTtv zJ4Y(DP@Z}CC;=<f*e3^0qL0jt7lI8#c8u7b_oGAgkxP`$u*BDOk?+uT7GF<}oL#gn z+MNAe<=!5n(wiMEDTxr(l3bCo(Wwpcf)3iZ4ZOIq)<&tlzM<_@L}ZQ`V@v4KygO(F zp`c#x0zz#B7Zzd#@pHHof`ZW!sDAELKw?g#1AX`seADGBciD*RQ|{~07yF93xMo0Z zyQn)%>>^wVo)v|O*E;cT)yjQcIXyhImOwN8r_%fPi1m(&##^-RE;GB!%0d|Q2T~%{ z9uM4&^}I6xy`uUpaa<!lCf{6Eo>rzn^`&%*)@Zo#ZG4&%+9;vAKurQF{~8iu=xOXI zF&*E6oGhx6`w?PdHab~qA{UpbfrZLy4mq!H%&y}s=1rwrl{F|x0To17xYj&&nM1}z zU0|F@0Eb?pSC!D+b4KD+^+JIsrNaVG`n3aG^R%yu(}eU@F}C$p72{Wm#q(U#LoZW% z1$|X~E}O?@(t4TZ#X{dWI^2(Ll;f0p(KeabZmYkVFv?_td9Rr@28*M_PaV(mZ!T2> zP0BQtW5nl|_9|--v#IqGL7cB4`WZDS;*Lhm?;wGGPG6O%B+_jwEMizbLsat#Xuamw z-XjtNFI<Rne19ms$YqOhn3s9OkaIK_;^a{h<DiC{R89n~JPQQvHgTrWAy3jMa@6O~ zK&2n^_UlqM7&oZjz}v!X0)(h#)lZ%|*M5ag$&X~AAAFzwY9Tm`L4KiCS|%GFPB?B9 zFP#C9cmF$!I>|G$28VIX=i#1Kh25U7c>-o~U^pdi!EGxKK^8mHx1ew+!L3aL!}hGa z8gaZNJ<XLEcDdMQwc<J-*SoUCz%COf2ajrTZn}~paG+T<M##Gg^hv$0XdCfoioiEt z2a-1&iuBVmy7j7JZP2(s9H;a1P>@l?r&n|TW1$#*7~doHP~;m#<HsXD&KE1~iHw7n zeD|_LNKv(S9HRu<0+(al-*Gp!Rv8rfKxoM6iE+Q{c^JOT0{gz~+}|DN`zm^$U5xrH z+77mFPR`Y5`Ga0%)pJ=aj=7c2&H7V%KJ=CErapAen>tQhR;{mPnjv*(*97J%ojFRU zXF|Iti_0`bc3D3;&isP6uYxgO#6bvN>(*l;WEwwcr%VV7Fr2tk3ax(}V@)EfmjUJ# zLk^fjLG`a+^dt2YrR<8SoS&A%dUMSS#NxmTataOJlU*Ma+M7XQ+|NAH8>RC!;x0X) z%0!UeaA)q7VyV2yOYr){k>rUD<V7B_ZiOX#dV@qlFwg-dBjCZj(69d=_TB|7uIlO= zKWCVb;o_NTi;9XmDk@PD!KOCEsKCs?a0!_ZLWm&=1W3RTKp2v!F`@$rQ$owzMr+^K zwrOi^+Sk^!jnTGV$VG^kTD(W2HLX@>iWk%vNsM#8-&*^enKLk`{eSQGKF|MoI>~0= z*Is+=wbx$zdJ0$>`>7V-PV0Hs+WY==o|E?;pvI!NkjtrK(C&5007P8+u!$&gorO`H zb1Xz^srIe&e2cZ)N5GIF=g*j%$J3U9nbKRg4bycki@(tvJ`X3*p*MK^L%}O(c35B& zj~LTOX=yhL#b*v+1f^OJyCPqZPYpc!ahReg^w=~mG}Uimpq=*xw{ihCsw6sC=0Mlx zRC8y)sE@HO3_0Hjx#8o9ReBE`;m_btWC0}MoF`8DS^9lP468k~+79=xd9`N+8c(Q) z=nh|H{Vd-9A!UAvE6lX_j^>Pb-$w1{popCoYtQZR0&O>=ojf3D)blEcGx`84)0J0Y z4l{fr!id2DpVG865>qecD$EV{>c_0ze-uk_Dd0~YDp3(kxY5h!ei>1?p;}++I%+6$ z*u^7Ba2<-y7T;+JZswKHz9n=b_p#Awd>%LFMQ>hz+Isrtdm*Opsnj+!F8M$3pSX^{ zq7yi#KLBs-xr;AcXz9GC0o3T9&>#GP?m_SQ*@v^=%|15z0CLj`7HxS55$5`YD?2*E z5(yob?<`r_SCvZZPD=>x0=m%I{Wt1j=Jf!gT?|PLbbh20t1!*l{k4-s8}US*e;;(q z<jDEmC29T1xeycmDc=%OK^GDE;x7CWOU_99%TU2LqZayfm(M5D0e@TeVR>)gLUUge z6zt8#{9M-X=$Xd%L^&Cq<F2-tZzeUQvd{cul*u<wdOd+}iB}}L2RommEu`RTT7r3> zdOZqDzH)=5{rePt%vEL9$5HR;BnLotL6BUYEC)zTx@P<6$#d>&E;rwANu~QODt$a- zU<FThi7A{~>s&yi$jznnWo>>|r#d|s#Qip{G4|6p2Km!cs1rtB?K?V;$vLCeZ~sgZ zB92xT`?C7XzwDpKuSRs;Vm5ak&K@N4j4CAe#CLbTLFJ^}+Mn{Gc*n5svYbmg-v9&~ zpY@=fvSxbeH5V-ySIGB6viyhq9|Z22&xf~riJeo{i|R&d^vJ?6pB)mTL@x6YQ2fqv zF-1(~FB_)QrT45rXr(^8aixoIKXq-KEm?bMBiirE^1Gm*XNa{g!AB1t72~p#4<1Bm zYG;f4CJ{aDKaTzjdRqO_Xg#f>h=-kAQJe0@V-N@}$GHZneE$48x+RoeNf$P=mIS`B zlGN~w>r9o4mjp7nR(4>2T|D_y;qU7tS%*5&$ltd-6Z2la+<LCqoF;uMBY2@8kuA8M z?v!Tu-R9st2!vyWRkF3`S9J7_A9G+Wz$Y$Lrv`q7t~I<>pZK7VU`VX>(G$h>Fpa^_ zw7r*r0^Sb351%HDA*T)>*B^51{+LBC#A0yiap7!C3tmNw@9*(gT_8Flt-MOX1>+j7 z1>|s{G9=rq-QQ*orX{t*`Vh?bt885x&B@lS;##f846<3`9{PT>pN=tg%@H56w7Os6 zyA-}bS|U%TBh8%$yARVG#M(on2*1m~pO))$m0I^Kt{QgHcg#ou`|+Uf@5d9y<iUiI zURPD{wv*bq6PxdZ-TO=H7W&?x??kTmN4|Ys-X8>4Y4QB>!>GTH_}<oEZ1e52`*NUk z=aX`=*PQcA=NKU$tk(vkz}gS^xlh(7gI<g%fu^g4J`_Dp?GoeE6Fg4s`5+WyD7#N2 z8RR72i<xAfNMhecN!mW3wUkj_AL=?W&3mP9uYBcvi`Dl&4eK{U=Kh69+jT<jJOYy5 zaHOjy{`JvUvXAlk7T*b*wVUpvutXcmHBTRXboBsc^9dNpZrvXoBA&AKpE}};7oYb_ zwC-t3^FOiopJ({qdf)eVdGFuN2_O2N=<4;PE#zgV()9GeJMXLF8yne!kjdxtb$>6H z?mE0<zHVB7ciaxRF<%HA8x=~{0rRpI`=i!#0=4m~I&JL`s}^Rhbdx_Z@;&(MLAvii zuasx@b=dkY?ca>4h+x9uEhlxhr$qt7ckld%`WB~G_7^An_E`c4w-JX@|I2Zudrv3L z#GTylu~hmG1@7fIT3qd0oSCyv#1<#}4^>jmZyRE>5StPe+qR9RS64}z#djb%dyuDR zqo)iQf7*K0i-8vtXwAg;7*RQsmPo*GxqVKSYxG5y+`aFgOLKAmxcmw+`C-UUbbwsz zcb*~F6V~r!^YM#~v;%|C3&{7ZwfB1%clVB-+kM!ZOc8$~YFNvjqnn`CJ@eE2@6*ni z|DgZL!N9b=qtj?Q{)Q=G|CLDVuckvkbh@XHo-@M8eNi0s&cZZ$<mXJdeMjQwnXTRL zn^<S)Z<PJ-^_$=2K3%~RZXs#EKdO!H*6!IRNqbW<jaHRe&hw?Va&o}TBeNth`#z#w z7JpF6=B@RO%a5RksorUifJ13*o9A+YKflM2{bTxp{J!Np9W0?le}gVZPY-Lj2(|1< zvD8M>T$ZO1{hwcLcvKQK?5~tZ0=^@0*6#1hbO=KhYKw2&WbL8nk0||>8P=_BVzbm{ zg1+)??Pbu?{<IJLPw-RHjb?gKmE=q!IKuZB->;p2vak50-+eOYxy}Gh!Te*utTZQX z{Utm*T4v@Ol;xan*nAt+o4$Hx_L1w#PDr`-fOXH3G+Gw3L8_5V+Zo?WniIXs%Af5; zSCexvK3RKG2&wDMmwMB4#jBR$99wpfJ|jBde<Jt+Y1YRg=ch`kK5~xD>Z6NZ+Gm4^ zUj!ZLZc`dx=T$p|vhH~|tm%^eZ|%NJ<^>d0JiuHfJ~NaW$k5YKDrx|0w^e4@Sn6ME z_B$;8uLbW93Au~*q%RtU&(HE<+Tdwn{3B?k&?!%`T&F1k89_`@AM4ZhGv1{YdnR)u zSarML&6LQd8J}7S91XB|t=945ZBC%%Z3|PxZwsCtp&wn(%>dKqJZ9Y*_Zfe1`#tM- zLMOFzfDe*3%DN4YAhbbD*@ACs<4X3k!5dDJt`6xN`i!@qY*O%|5O3$Dgt_%y(Q`PK z>JT)C^hwVSF$~blX^o%CJPdruBSq6_C`OXwBFPJ!q#&GRmm$d`B1vKoCAk1e`qyjg z>49k<(irfML26fe$$2)E8+!KDO$U1+nfAVSF0Z10=pVO?SbH8JDnCtuJRsA1H~zoG zA)B>J(?n;}Mx*~}Iw?fmj&7ep5ySl2dowD(BvAi$n5VoQ7%pgIAw_<#+!HAN2gOj! z(f9G@R0eYXA!I;vdKR(4aq1Q+q;Ha`f}s`n3go9VKIwsP@q$!}e`s;wJO2zzk2LMR zTK2o6e-!+e7Il6bsAVDUN4&oM$rw@NrALVx8B7Vf)I28cr41Ld8U#T)T*y<BMoCDJ zGv2-RA5Sd!ObYbAh3t=={9T+RYFLPYmzT-M_8vKv7hMw``(%iqbk=mONxOyQ(cbsy ziA&#G0Lq6=_P%BI9eF=t480z;%MBcTizm!Z|6XWQndt$qIBnn?w|O(6kI!VH{$-p4 zBi|BTJ>dUm*MhVz-`^kYdRq3sFuI-jmc|+C92;zb<{*<uQ+sI&F}hEu4=HbgJ_s<r zKl{@AM4ty95zC@Z-uub~DjOE|b^BtD|8Jnjn$!J{1v1~#7TNpTWbf%YA^+Hhbfo47 zsAmVt-q7@fWdE2rA0GJhZRS&2Ea)#pH=3(TqfbZXbHJvEv6;cxn0YZc9@BwofoHDb zfkaakgz~Dcw*_v1C>So_`c|pyQvyxwXR3p5A_~f*0zTi42)y|o6>{KVy%75+L*q1F zS%pp$makg7x`phq2j=}FypWjv?6JHwn>Ux1p01OwlRTbsk3Jv<(syd(A>9!>V7BfV zBt+JW1MCpUl(mm;Hg?imAeA)RA~X8O3Hk=j3Fs{Z3$0~Q=CBf8&8Plp%FNHcz@M@# zxcrl_z!msU%5Ti4!J)HaX(IpGUzlG%J*C4j<foaJ9r1PzAJXyCVW%w%Hhikd*(vdf z1xG7~ABZ408obnH!BZpfgzV?zw>^({p4+u5?YO?SXb~23%Ci01`%KrS`QAA0d(zZ< zZ5odm7Qcr+k(=uGSeEVYo1MPDZ(ce&n)o-cn7?8dxc?num)rkDJ7ihB5Mb%M*`{w( zcD|W?tp9%c41>Q%B7yHpuJrfN1vC1#T~7*)LOnb1*Rv#W_*6-V5o_;`Q+U{|RPU!0 zf&WMe$J|4&*7nf%ZvV*I#Nc$_c)Yb>UtG_<2(#YyqM6=Eh|d|ZZhg{B=ZJr7g&MSV zK{D-yr4RQ!kD{s4QJ)R#86$)kK@#Chlc@|wQu6oEExNv*yF>I2P~Yv82EzXMaL+p$ zB!5pb*CLH8d4wTRNZ*{C<JRtVp!AHt_{ZdNQCn68tPXbPFl-TS^*uz(-W<XQ7toij zy&1qn9=uYd$Y+bL1aK;AcOqi16d3i7qg?Cu9vW1kEAL^4wfkT^y)R_#8H^Wd%>7*8 z?I)4AJW%&01TAOm;}9A@dMsR9i-yI{BtBq~(e*IFlf38B?npnmE6dgUDOI57uLOmH zkUx&Y=!unum4UT?6#{`NbtSj5wR`m`R7;`{CUEIpCoZ&hFN)WL`f@Y)v+%bj(y`$d zYj=PajqlG4(PuHteGhXpndALECnHqOwG2(akY0GLN80`+vj29%Wv9ve)joFh7t2GY znF8sZW`uH8kZ@@FrCM4GLOFg&wqv5HrL~12+z1F4_&MLs+$ab|8U#B+ndC!K7Tu?2 zcV9mvn3vplgDq#=dltwtV|a;2y`Lfj^Ir?8^1~Y4`X1(_g{ghFq)kqGepFJ?Rwry5 zE)tuz&pdbJmtA?XWbHn|gcN8rN6@&PVRNOdd-BtVkhWLu%THla&%$I4w3WwvbEa8) zEcBLRu2~$l?Xia<RJL>KF^fn&<hvTFU!l$Fd=&F0HAjKj-+eo0;ZECkJM-F@Z_t!8 zgt5GbUdI&NUqG*S`+h0$w64cXSl>^vIh@hDl|qJ@$N3fw=j>zF%^6#NDkH*o0yskJ zpv-uE{nQz9p0;iugbFqc{<YAW4E2B?SqwcuW8GDM6H3z%t<b8p=6^dOfZ2Vb$n-d6 zzdzC?M9qfGSyJF>Ft@*FT$2$a%#YMC^fpWneHpOtVJhj;hxJZ>%P>m_CV+d~_b?^? zN*_ZILfN|YTg2`CoVh#6i7B^yNIeoBZv)FBMY1^Rzn!j~<cxSp!|?>R9nrd5CdXwN z<J$B%QJi*2V)>il%W4-QNdK^+K93YFe?K>FZic_-C|A!M#|8L8avxo(dXeVNAxtHg z%VIiwKS@AvZaUN19;RI!OE2|)>ciKm*U3vffoore=(wGz0)0Thr+NNDK+1W^|Kj@8 zzJ5V_$|*l19<Xje%jeuqX*Vl<oX0Oj?@)h%oHK0QT9HVv;S$BI-Ho(q+)oX`qlN#V zJlOO2A4D7MjWaOahUqzDR>zqCLm`1NeE6;m2^lz>RtkDY<46)C+%e)i0TC)B@C&pR zAQ<FfX1!3D_2}A~;G(#=$*lMGUk$AH9fH!&toOLidP=;`dcog)ri$-Onl<81NzjBt z5rW#o1ohv?M5O*t=Pj%~`)HUJv4d9s102h2#Se{|i3@uSbsG25p#i~27wa<pdCskc zenk(B!ImGtHZ@zm{F;F+{aM+A!N$+R>lk9GRtmpQ!ps#JzXHjxgbYI#hl$aQ9}`(U z;M<s?T6_3?C81}u$vI;}02PjD%{*rH(HRYD=FjLfaWBm+MI0J?%$h%B7;ayaClZFP z3=Q_)F2>rY0H7Q4j83LZZ0_+_Ly*0kkk6CT0W4lVX3Xf26y^LU?f5@z5H~D5{QHK? zb1oFU(Z^${+~+p?1~Y}?VNf=DzDJi=n4kT(GwXDX8{QZFqW)}s1Rc8PGJW13?#a}L zgT0@H*9-cI<N9wfVIa9!jEcej@o<sHKhf6>xc#0uIjQ{u<%cxp4~j(wfnOMvzO4Sr z_k1VJ)~z=XqwfCRHd>p^HOqfR_vG5Cf2a2oa%Cxa$B8h%96MmM_H2kFN4&K={<zNb z#<4K?+ITqqMw|R>&eK{?-f{;$Ky&<1Si*8;gmT3v*m_Q7MiOjq?QT86GcHfyw8LDN zVAF{(eZGj!ef(^YwVOVP$D*@b7Z617^5CN<xW9jCI6o6`ybtLB4u8t$$#s=#LeAH6 z&3!y#^HLza?8QrgubB);!0}pIdhm)9#`Ux*;2mx>!fVmt{hZ;Mb$H2#=cNbVIzAcR z=kVhL#E(Cw*L&MO3p4uXq<@ssw^I7tFO{C|1ovD+>FN8d{w&ex!T&hP^bf2(#Pf0g z?F1osk<QoI&j#N<1~=avSToL*D-UdbL0{$J$%M6gK6MG^m+-`*=NBJg^kr#61PI>q zk!n2e9qu2Ozo7Szx=)PX4=^tj;-oTQdrqVf0|b5kZ1sSjm6yObUZgRAWdL(>@SC4$ z>yY$JvzCA4S!4clIlt(y(?6ZuUw`_%NIk5Hu;5iR$Aq;0<0nz=DSBIJq_^Gru^~RJ z9F%*4Z+ybD1dqUHNg!9lhlO7-#P2isv-Be{qFGLy5cTkXAOd<V!MBb4xjNi{Bb+~6 z*q_Il%u$^Ehlm^q<E1g_{7*zVf`1-4O`>J=+;rcO_vh6;SV2DLSnzOE{_=qJB_Rf0 zG2E+&H5$JC;?$$zlOitA0dfyZR4z!o<XBXD7^?8&V|u$<qVV6Ug&Wmy9`^b-%g|2> zhDrIpLt^E-`_D3sdU3!S!Z4%>!>u2IfH|zcc3Alh{l62TIY1kkgra>=8vt2t@4izO z1K@x>c>w(61s(vIE%#DCdEDCFe}d1A@X&V?ZF#b`mt!b~H0|~2V$uyVoe8K*JpSRp zFZIr5bq?!O)+mLf>xHQmlKK~>ZUVO+cSr~Xh8=wFsF0^TFg#4Uew;>IiuTV5uB2gh zg3fd*-Mr>DV*<SQd@RN3(DPH{`Ox!I<GDkR6Z(9K;FU{{vIe?!_HkXzaF@P3#Jr(( z<`+gpSKF&KNAP-%#<ZS%l>*&`f!{n$(|TTTKw@s0U@hfuu%oNd`cLJez#m?rwVxmS zlG-~Z{5DoHpTD;2XI}fA={8y!ed=9RG@AF^KK@+M#&i7f{t?>#)=uVkUMf~4nOjHS z;+pP(qzlwO!#InIir9mJSI-rQ=>K@V_F~3p`Y&lU>Le6d4XN(*cc$}{=iYRih4(O0 zM-ZUyPN&Z~XciE)d-^w}XDkWWfh#@vAn@J1xbixg_W05Q!%s6NIrI=l@`l+tC%8e- z|Aj#AIkvH&ZyOh;)yY5BS$^vQLPcMH&pGi3)xi5w;9Jxb?<DtS_=jnktvv8J#GwB& zz#08xVBJVaYgr`W9E$@93X^d3uE6W(L|2~H<GB7WbNzQxF1oCnxj3+$TC!8}57T1$ z>3?QCeQ(iirn6DEgdQOryji{j$x+|i?iuWy7kK+GA#Hk!Xu~!Z<V)a5#QEkV@G@>P zE#rQ2$e2GW1MnmCdJhqLjlW<4!N+6L0_G8|Gka%t&2e<v_)K`>vh2YXE5&mBpLT4c z>D?b_b$i)I_pCsHD*<pBFMq69sjWy3EDBu0&=VPY%5_TM62$j^k8Vbjq}bR0y?X$t zYYqhXKHq`VW&5KExG3<?mni=e_i%n%itg{tIE218kbg*)e8-cl1^YY!7uA|_Grb?+ zEZ^rWbW}dQ|M$GlUYc&_cj-^3*Cn6z&d+|f|G#bhDm`qM?oUZ)xjpAJ>sC6v*O%3| z{r9_Ry8j9*w)%LQ?b~bix6ul0y3d?0`vz@&^U`zXZWxMe!Lyvt?z_S4+iO8m|3=H` zNLb&e{HqZ<`mnaX`xONAdd#E0X8&t4GQC!19{rIRUk=ak?M*(s(LDNXeP0#HF_&$l z2i(z)ee|Kxjpksps*Nv(_$r!QH=2VU)u69TX#d4avfl;8mi;57PHXr%5sbb`OsmuM zGJSoYIJ{khzL`eZHLe?sEbHeJDH`cC3azx$4iz1W)9g&n!^h}+`z&-A(_d-!?;HJE zSU>1Geqn#1?9C!I#@hXO=lg3P%k<APY2_#TJ+$zi=JzDirc!C-d#G#Q&6Hp8-z*Kg z#G<(?Sy(n<rBEG*U8%w+P<PoyU<S`NA6X#xFC6JQk+6OhuR@Hv8E)6{nbz)MM(k2+ z_tWgKTf1Li#|75zSJ{ze?S6wDMVKE_<>p&*_3wIFplNj-zqr3j_5ZbV7h>emfBN_N zhctbGzHWbJzhh)x!upT8K27(Jap|2;WIyZwXf$rX|B)}4b?b>A{NM*?a64_7)^Gl< zJSZQuK2jq0cgX&IVzQh+(w|2#{^I+m>^t$9b?XOw?A>JDQ(_9<s7Cal`4&@fO_bjp zToUEC1Pi15w%|9T{Py6*5r5b5ORU}PXi+YH!#w|T2$?uvAZuQNb?fGY@Ofw75b7Dv z;p;#0kIgtl=lcAewwz(BgP(b}?oqmq&$4zOmifT~`u6f@#_EBt<E7p!yN)+|ukJd2 zoj1?_r0<Q_yFR_vJH6|;w{tGtM^ON}>v&`53;w-)E7JEj`MI|f#z+4l&fgt0j~?c8 zh8BKT3#>Z&Bz51Vhv|Hn{}TuRd)KFntXl`gky(p%&*8Z4J2N2$)FX7D@+*>Lc<+?w z6Lgr`zc?eOB0a^rrAOR-X~Zm#AhOd--#hj1-}{C+t~xz6XJo_q;r=!#567`%zb$8E z{TLNboys4NjH!G7Zk9*-Y&4TSD4yWR^3!&ky?1`P-(}`rAoVx$Q$1Q?_5O_YmOhU; z_>{QS$onr{DBziT-l?-)wcPv6v<=s<9m(YEx#k=vUyzPx@m?;DFnso;J~0~d7HFL< z<4O<atq;a?_3Hf}l9bB`Hi%+UdImS1Ef405`{}OERu^$wp{#j*S43!n($cLxFCZXz zgx(q1EQ4WQrrRK$sn$IOa{mgMxnjdtMSJa+b^clZ5qKocf5^W)ZN`{&Pm=$yI<utl zg;TJa-({n_{?<Lq==yVN&$0fJ5pj*J>v)273qKq}Tft!01+xF<6l?b@CK2Qx@|UJ( z=Fq2bx6D+zN>ME+`S<Sqn>nr&tv9~GZoKa+56kS>Ys(p5PbX;_`6=nty>FZ4aq&vS zxn`1#^oRu5Gk76z1v(@l`B353CX&N@{V)25R}c91qP}v!hb7O4Ao7rZ-2Xw>@pN&N zh+dP<hH!e4dpU^$l|%tafk#OSKuq4YWEz#TLhdh<S&mq@ZlY87PmdmijNAmJ$@;@V z-=LMwrv|V3Oq}N?vG|7${0UyFh0rarKh#mk8J{sZQuTA+zHzJdJ9HnzcZ9xUcLsnZ zGqACfk%Xt|2@jv79USp8qi=jV#nDwS>v#51go*rLC4UdS%;-BJe{x7X6rUCR$w~44 zHp5HM;q__od=Yrl8D4uB9#gevm4N39f8#Qap_Yhs0wXC-;fTu(*eB|xovoF2YNRv^ zmu3!^#upoUj($3!G&2Kzjb@gcP2g=5mj;$g1CN{f-6Pg58_j|%xBd<Q{Kx%6-1KK? zqTfH3eGKB?+CvA1td9)d8lrYa#<0}i!|gp}z3nz}C{FHQDI=aiZl*QK*GGq=xj2>j zo|ldtiB4`iDCQ#(F<^-NXjnwjnbPk+rq6A;^x$_fbL#7~^W$4Idgpkl&lif*XLPu{ z*LqT{#Zvd*V5K#Fc3N*cCN5^DTt$PFb?e*W<(S63N9Zx5)V>mP4!@25yjWcGh*Ng0 z!@4x0cjQv7-Mc>3dT4ce`ju6XO8er3fZ=0eZgX%*j^N_^lyMo+aLJd2(|X%=qVSYk zKNZMat3idBrms@;(wC4lfz@3n7TOjG;{0_eL?`1j_`>W)LhV`lk|`Z3n!~Gmrva46 zNbel7mc*BD&B1q$^A|dxA<V{1I@l1>)&q`Dvvyl(RclemxV~hd)t^qprqw)?kyZ{u zZLf~j<3umUsQZMD(Iuv6TBT97D<A?#Fox09QyS9teWnFMNef;eo&YcB0*d#AhX(DP zwTNK%&J6R<?;rad=DOpt2y@NdAJR6r1ap1k*yl>$u??q1$=oqr=F;gUa~$PhnM+6X zh0OJbpgIO0q(kQ!Pzy0@=EMEsdex>!#S+kr<1Ab={bPPGHi$sH{qRXGkce<PNj%b8 z&e5bQy&L-|qufmE%EO47u6IC^PCWhN@51m$4WWargBzocZ^#t<E|C;%-cx^)Hh8W6 zQ1CQfUeiv^zd0y4%qNbm(y_z{hf(A4TLtD``ho{d-{+w69_`ePI8pf1M+A+LkaErm zuK$eht$**Bc-)`lR`8}zxlGY2ZG#iK*)<{26e!G2$BL++G`%2ZH@YJfm=i9E&RnMk ze@v8m4<tmDZ=~BPpy;qE_@c2a^Te`V`{YZN_0+@BWznM$#`$37A_!7sugd7lP4U0% z-}lKgpFEp$(CT=l=Wu7jX#O*!-psxNdNN-=<WbirtCd+|8vB;KBE?_8(+D~+rR!(I z1*t?R1ZvZw{RoNEnRS$||C;-9Q^V=$lz3pzQOqy*ee+I<p2g|EZPT}DtFo{ATTg+W zA4Q)pr~Gspj4q~&C6vkWyznyUjqmlOWe;kJ4DZRCQKlu3&t>laJ}m)wn|s}9ecw7n z3d47wSLvHaV)`TTU$H<NK29X2M7b%#;wjNk?%C%L<(`u{oNE`M>B7qBVvDD3es`AN zGdqlshR-6pPgD)9^RV~aK1VWeNu)Mc7tN-nAcsK1p&e$ki1|28!mH7q^mKzaJ%i3q z^9(zVwj{d0MM=lyO-sr5?R(i5*ICkc6EyRZw7#`w|M({(aSof`Ve5I<+vfY5#cSy+ zNgi^_vV=*z&BtG{&+@1p$?CJb+T&Hk;o#ZVsp^Z2mY4@R#9ghyVTT})Ll8))=h`|; zpTkVW_6&BO0u1^bwi)B2+i1Vxpzp}EdDFZZ2ny1~TW_DWoL;02(&Gn$aqdH*B*TR7 zC&u&7dV9z9dd~T1;(7h(__JfigO|?PZ{QF3&o=t$O$>tJ_t<0RkHn{cUis5O-8jD| z>m%d&%gOPxC&fqLXG~ST1-+NEfxjlauR;8h2|me%CUs8V)qQ2QUT6Ag@SF|%^u7W+ z1c$A!Ae|<Wbi9QSDxgE-mc9bI14jo!-L$Xsu$ak^yZb7%MfSVFw<P^J56B42&~u)& zcE2sKcJ?oa5XbzvA{8UUG!rR-bk4j-wf6pkl3)tf^RBh~EIL6@nhrg0ANaZ#Jnd0m z0F%)pSah{7jgL@v4|aCaEgi~ntNF|2uy+52v?5i8dO>f;smBV^Ox{^Y;h}~31=<3> zH@&)Ctw^r{gzU#5=mit=BioWRkW-!R_Llo!Ltcxu=QNTKD^gI+o-<TB_d_~C;6YmA z9~4LFO)86Jv;S)U3LEs7K00MxVDTNu^arBOorpALhBQQ5{aQq1KS_<V_G|#qITdI$ zreh!9O|*8OH<@yXN>fK-(!wG0#LePAIAfeYJv8Gut#zR}oO`KqV4*T01jOYL?^(Ut zCl9^pRV?`{__RGiCX7AcI_s45%T{#?2LBkPpP?G3Tf2WGvkMj4WMWp}h8-|{*@oRB zb1pMIrbutP`43)-f~Ty8C3ZC|q8j4+T&PO68oM&VPd<ytCnv8EbXQEq6;bxs#P3mL zz2<4ObzhJsTYJ(;1usa}3we}=&E6CXW;MaBk@C7u&?}gj-1;A*&p!l$ABy>yXi6GA zMRV?(aRN;3+^5l?5;QQ$e0v{K<*SqHAE_NL`h;66S=&bya>d%s-_%8YASjX_jf<eD z--{5f(CHD~*?VQI_Ujo8Q^b3*PRD{|0m%n6<lyZ9hpKu5sHyi2s-GSoZiIH$Tm;wL z5vFIdiD5DI^h#(b=Fxn(>%=M6?ND;NP9%bUiEstqJ89g{6<pMPw<PL$TDah#9L^8= zC+hUS`7@^fr0{K@a=2*Q{RXN{sK$Sbbdh5I^HXF0;Pz&G6Lft4^qB$QC{B-RWovha z*yG{`owB)umqe8Z9s&gjCaB;%r~xhjV2eylMpu`+PXQ$i(qQ2PX<&S35AZ59c+XCT zr(N2*h4*m<EO8jhIDezDu$bxC{h&~&&Cns4OXG<HqlBhE5Ikty9}hDEr4L?>C=LnI z<WUpX2_Hwq^_=5jaczVOwZHuY$5`~D^~<s*9Rn(Qe&k?|Rz8N?J}2Lnvhic_n^+2T z|6HP-Xzx-eQ;U1VY2EY1gH!S_pF<r@7vpHohaCylJ*i-f-lb~xVVYasz8~`|`IVe; zZ+_RD^E+S5d2#)WA(`K*+b54ct-Y6UtVi`f)A?Jz-7q>UGJc#;I}gz%@$pW+2LkwU z$c$M%VtA<>LSq?iLWydK9VuT(UVp#9>)Gh~iSHjgO#4Aww@JJo)XXce>8NT3B)|$( z@mdJe#n+u5xaNMb4>zuQm-MKeXOGqnP>d&VQ6%DOx{3e3>@BeFiJy0V=j&Qlb0h`i zN&M(=WWPn<722cu4I6fJevq?2wp-6mp8_y$+)cXAN%|4BJI#+Wc=}J*;5MbFW3H8) zE?!ITdDj1DZ#8OG<$sc!ulG!A_kS5$?;?GE@%ioNADx@p`6?PPqxX!M?RTGOzwFOz zzj*5&b9%2F-Gn>~qt}EEm^J!P8~#>cXSiR(?f3SdsQre&MeRqQm7{z2^XSbyRC`X( zyYxjT?`qU`704zo5T>BfuK#_wNtU8D&mFDP=<Nwq{yt`V&H<p#*C+|PdTJmmk}8$j zl-uh-+JyE@o7A41`J>-OwP;$TMJMkMPv`o*?GN*3|L^IWbAh^Fhtz)Gb~tAY?G2ew z!wa*+=T6M}9h}AL_CHY?dK>0|E$5TYH}uI2@cC%ce(HbzkqWz!3$yf3J8)|}39!@q z2&6~b{XK1$ww*eVJvjPybpC5O|6Gwj@X&8UD$NN44i3J+ug&|UDSjjnWyvI6*4fd1 zS#xV$ZS!RvjkWC!!rdU1H?+03d+n<_*L2vut#j=cb|gyh%xrI{>-07?cjT^V>73Qt zzDByR!`|4suEE|`yQX2Tecpu~S0_q^WsB{4LMeOJ97>cyffshnU`Ur|WoOOApByQ1 zNqdvm+t6ZPb%VXQwWGoAnq{9~+g{h$(9twYnrm-pZ*Og%YnNI(z4q4C_H_;GTH9|( zM8t;L_LioWHHfOKZE0!sqQKgE`|76V1}>q)Ti?_o0SP_24)NXwd#$~*rRn<42762G zx`tVa(uPZs2yTGVGo!u?!qePP3xsN0IyN-4+b_PMq2pqED;zDY7bBymwxeT1YkNHq z(4F?$HMLDG2*9t=>usBR*<~9xY?!4{>avd3)!q$6Vx2UXAzfiZOGA5Yv%RsQxy|0$ zL1+-6^t7O83`lDlyp;YjklN0_nKL>6l)tw2rWP;i&Z*WlbabGxP_cS@!^S4>tVA8i z`iAz7rq-4zfOIsrZm{b~BAF%dN*&d{qoKK>&P$Q4ZDe)K1>l)YnE+e|Le6Yz>1b%_ zX!16#Z-@rGu6AvMy~7I}!EBR~Hnl_`C&tEX@~>fITRW;rSWxw5dI<~f4Q&lqRV?+m zVrFS=LqmW=fPXtzsDl^|gtm9IHPkh&ZfdBv69gn^zJY-@5YR|TSCzXQ3(B1<T~(fP z9cY9mk#wB*ddho!XH(tUs}@y+lSlnT-Y_y7n!Jr*(S~NY>snj9U^U{FT8(lHwS}Oz zbgo;~(0*0f;`y1gX3d%cs#d4EFnIL8wpJo}D}ZoW?X@jy8U*>)5nTA|Th|fX&%w6V zz6OofVi!md1w}T!9O4&8YugR&O=}vx_6!HfgUKB~v9zfU4A5XN^pvju`lWNZPrw~! zzpqnIY({gnhdYSgIhsY*j?31xHP34Fu4}$}R$@hCQ->Y@SGPAb82Z)?t(|r_L@;`N zT_aVQdAq%#zKICCsuL_hY+ljWfRunyw!pq5ue?03tYT><Wg-q~*a#8kwS$A!ku<9( zYBtwyKxOMY+kj9lg|+M5#B0C!LdcTU?I6pAOc6;E+{Zm@6$CGm*LN~b=(r7QAR}+E zudZ!s?rd)m89G56?y#$fc1Q=A0OHp-fG?W4Fp}Q_wn)3WwY`p0cC2k`W2_^fLG`+| zoOngXvaFdo%P-BCDeM{7WX`x`Vo<syQQr0z2rf-PvrKDV+0;_suyJKGNVl@Bw!Nc4 z6X0Ojb!|<}#INlQYtR+AEW)9!y>)$4JrHiwglLDozP06IFNA`(u2JB>xP!+Q6mfZ7 z$9ns+1)hqc1!aqt6L&8|r(0Q2RO(uu2)=3oLAb}*>ubHWR6#T<vXD=}0yEbWGuJmX zH?6x04c;D`nY|rMB2L!SQtL$>GU^*v*LF6e^)fG>@g;?dq0I>u4MBm`mG&l*FJLK< z3ZoGS`laO?GPP=~1~gkVTm^cDGLa08Ur)#`B4j(j6IT@!xk{ajVgRLBhJ?Yk4dX4C zI9mJ(>BEF1AqYv>V5hdGZmvtFS`6jJJhdGpq5zp1zYg5i(B7oAMN`ZA+U6z=EDy*6 z8YKSAMM$DG_yk@PBRP-P4I7clJ9p9C`ngasR$f>y(EulDLPDaZk*H{C^6w>en#JgU z)!--H_f7a^&Ce4-gFjB1{M$e^69@to(w8JD&tA5;v=kC%&H80o%b~G!Fqd<iwYPSz zX@sPK=m58N+|c1|SO?-YH={<E&1!C11?`~OJ5&05*PSpwkbW|~LHfyk()rTGQjOG1 zRIF{5I#6Bh@66if4YfCPXr6|Sx>~Bc!J{Xro4Ky`hE)wxou=qb@k@4x)V}<XdJy&& z*q0TB)Ei;mf&U!XsqTn5=nAQWg|W?ph#P=ugS!T1ydb0oV8)zN=lNI75l2YfSs={A zPR(5??5@H{TsZvy#uP*wi-yA&=KG&AD07#geo^-Sg4v<bmu#YS&3s|TiYMFuTZYPu z#lzHJsqa#MrBxW(q>hK7b1c-^>8wlpDv8v7=`!!SHmPF1$5~V^U3THDOFF9fCy5CM zdTC>AC;Di;#N$^(-K;tZDvtf?tL#})ZF5^=t<>3uAzW&1#bf~?h?MGDyzS_oZMAg` z5^Lbns^;33wbGjQ+O|fit+S=hD{ZWATGQl}AUNz-U1cwK6|QtG^5i*OR1OWAC}*YA z(pujz^Xe988I*{Giqzb&+H1esJ~LYqnv`%htm#+@8PX~g4gqixhQ}(GlOqA7bKOdE z5#}xAklJ{pg@BsXzHVhlE9L6&*2WZ?hTp*x==U%yV4iwEq&AL))H$c9>JH`qy{VZ{ z&V%qDf*FUg8N#!^1gtMIxnCm9|D>rgxZA!&`u}OO3+51v4Yd5wrmC;N?1M@9imLux zvnQHcY+r2jw97U3m9Wn-grBs=hW)RYBNJd8_!2OGs-@}r5^2B4)K7rnp5RY{|9#Ll z1NMcfs`}}f!X|U-*{YhF7V($E-F&uizy4KK%}kBN84bmeX*?qm_B8x)UyGeyH@`en zn31!D89-UJ=YZc~K8AY`rU!26a$)Yy7WTsINEjJYwlK@HgfUHsA4Ax@IjVa5H^E;p zr_T|#4R*_H5x3);(Pj*$y<ue?rim=8NZ!ET(LmF~l^x#BRg%=!+P0D=MDW(ut(7F6 z!K`Fa2Gvl4iqx`pWy|W?l_Wa>foCHtSG6N?gLfrnAfGSZ=!1(<zgTH#453rXbWFny zL&_9=xslGn{sv|c=Fc$yfcb>dV?d&><IolUW?h+_;<u=?uCAe@Ln><(Ga;!+Q<g!H z&SuP7BI^m^sJhnXW-*7Pc};B{l*CA!9%8R+h7QWwwp7txD<);DK$Z@KM~a~kl(ia@ z-WCjBi(42A3@Xbq?aNlc%!QeiNz?FUR~e!+D5N^W5K?`U0l^lYCu6!$eN*+#kvj3T zyP>6Cnm=*4)svvIb(oTi3FJfqc-k9K8s^3XgV!7;rzxKlglSl-eO1#M1Fka|`x&7B zc}0s>x;%@DN*9!^EL-4o*)zl->}_4!&@zi=7Bi&Wh2Y~d@CNJ=4|o?Qw>a8tT!6j= zBO%TcBc9Bma_~G%)<R(h;r1+8R8%G9EpikUNf|Wa1F5cSQJ!Wb%?vJ$HUZ7p5tn6% z&xN}tMta?3pw4A5i(yJNGehIW3s$IV*{c6N^ZgoO_tZrEy7{8KM$-`^{pQ*)&Zn2t zh_tra$>rN(z!<C%uz$2X61Kc%a+&1T=e-bJ-cDM~tH)GL>+ig7(b05c19K-Bc1?pM zroAM=i2pgohDKVerUj}xuUNgIsD_r>Rn6!$_)XMXwH!??G<#+^t2$SscXL@tFP{~6 z<q;^yhvD9}J*1w5d*Hu97(*rL$WKG69ZGZ8&!B6=9)Rs7CHn4=`YP-!*eMW(HLy!z zkHFpzJL~6|o5A+LCS`jU>?+u{doYI~<$GsH9Z8g=G1$#XkkP*ksSm;40s9DS+ka!O zn2d5^XPyH1_W~c-M_@||{J#Ml*aNVig1rOw5!kz6AEo&FpqCQ<u#@S`*)G%rwjK6t z*l)q!4SNjsLD;)~i+Bk1Bd|TNcl|D;-UZvU59NFn>GlKvuc2NC5Dwb|dl&33*au*b zzz)Ec9s~U-9(G0w;J|K%-8KaLVDEsPe5xen4u{lw*ln;k!rlRU8|*>YyJ3&PJ_6fw z5cBNQ00*`Q_7T{dVA~$YTnzRY>~~<>pFq0P0T*^I>^9iVusu&=9u7O}Dc}XW26kpD z=mxtA_8{zD*kiEof^GjZ=mFaU`zY*I*lA~=p0KlE5Bvq?!M2ZtRQH)E4|X-|8rW^H z2Vvh${%1pK`dLU1y9zeltM7(A274!L&vPMloZ?|;qygUZpabkK*t=oxg8dHN8G8Y6 z&IbOlt6|r`-VS>Q?1QjJU>_y>Ma=il0exU^hu!rO^26Q*JM~=9;}GzJz3XMP8|)F- z2grXIbhQKis|bfZ0NZ>X%6$!Z!`=aV1h)OJnD3tty1x!QU`t034x8Q&O1=R3|Bm*A zof`<L1L?ps2tK_K^@Uwc?>+t#^o6|x_N%Z5VIL*`JHY!Q#J>yvhdqY*l;>i=#hhv< z>|L+}u(LiyJ3&y}KEk{gb{A|Xg!BmPF4(z8ksr4G<B&S<68K?P!5)FV33k>ov<qz8 zIPkg@=pP53um?_}eWAo;g+MnxbBggOlk^u=oih`7$g0{6yDLsr(`O;SSyd}w?}9xD zyDJ|4%aA@nRW0-oezK}Q1bYm&Jsa?$=a0ZX0v$Nxa^!=4+6DUvbkswz+n|5${5tYO z=S-dr{4c>+`VHiVeH8Y<rO*?vKz%Zi4)y@-cVJ83P*vwQ0T23O0Cvqh=&5s%?i%0^ zyQ=_t?Oed04?JOyV63jV66I8?>b7}+Q-$)bLjGl{x*PVu^_W9m1OE-cGY|CGgfRg2 z;BBZ6>>3|re?G#$uc~Gj(%lIi9d_1#s_OHwrC(v(h9cMndjR$h*muLO`EQKXMI?Vv zAK13vs%mdB^8F6;9@vAht4dJs-y<LF5!f^U+jgsJ8f*{jIk0!Yu7EuTyAAd=_p9o5 z*bdk`DIM&G$Q}lLU>|{<HJ{`K!eMtk4m|*a{1Mo9mXW+bIBXB>Be1)kRMpuFfY%|| z9+U@r6YO2E2Vft8eK&0BWz4x@+hIRN@vx6jJnZC!!0#2%4Yutt^25%8Jpelw_T8{O zupflo2Ky=41F(-Qq<#qcz#f5ZDF+<bX|Qdtq8_lj-T?lKK+iY9Kd`g@fjLtJ@OTUK zptmR9Mm{JoHLxpSx4~|Ny$kkTuv0XBM!vCJk~dl8vy#o`UYWiwFG(b3?(Gk$^cJ9` zSPGQnVr!DuyivO5%quUsJpFvIi<ArVAjU*`6iIR@X->tyQc25GQe8?~zG5%X-7dvm zuA~(x_A>t4pqM58*l`z3>Rpf_8Xh!I)3u`%gf&t?o?`Kt97;<5B#?QE-E9bm+hquM zN2kxz!Yz6Gsc4Bla6k{Fr=gsSjOBcZe6wYN-@lU2DT(<_GV;|6TG?ETaRC#j;!D)f z14uNd+6_3f0jF9ke~T$kN%qA7Vj+Vo_&frn!0qHT+`hCJ=mxAa1Wu8{;3f94Yw?x; zcV)SiWDvrVH$=oBxbzJ!&;Kx7`l#v%;8p?d8?u1gLvXjo<ter;<~$|EH_f3mUaK@a zl{U9hQ^t-0r5S;FN^>3u&et6Ec}k;G4=hm{UAntaX)e$Lk&zsgi9l(;Vgnk<dBZ^G zF~#gmLY{oiQ_RH_lUpmsMLBDVbv)*44*FZDc=MEvdCI0drAtO!ky4+p0}_P`#{#|Z z5~aStfZgIm&H#Tt*TNYtGl{-XM;|=S_+dzWSDKPO_GTqBPswsqkIir^nFZ`FQquF3 zj66N6kR8Q}y(C863zHn2+QpfRDYKTXL`l!*@O&k!fC4p$Jh$40Hrxc<ypwpMJklM& zA1MY_uoWgM$qtPL3X&FaaIs<|{(Tkj?ghMywf^Q&QuFm}ZZHg=Yn%r8g)|LQ@k@cS z<Ge=Y?(<yA&hzq=d(X>PcAd9a*$w+aggtbgTN#Aeab79n@(?H7I}s=R9=1hZ@>fpq zQ~Cw)I}QF={8R**-g{mFQWQ*p;6V;YB2diNiX{~1C%MA_qhrW#%r0cO1v1|LqmbG( zk@gu2l}xAB<QbyX%fT6mk&ahHUx_A}T?!bbfbsm)yftUJGS98#7AVd<#qCr|^AwL; z$*PD^-#pZJUY?R$tYo>A+4;&GmohJ3$@N6Jv+@!R{`pA-%4{e53Y1*H1se2On>T^i zcHniRh8M|e+Zq<T-~@-x5;cj61)Ri`wiLiY_kC!NcL;emPsJZDrMgn7S*dtdD%E*P zO{wB3R4Ve7Dula~8n@ypQL6Kmntbk+x{#qjBwnO=)^OrH_LeE0Vx_{(UMKZ%&zdPZ z7o`Ri@V-_QN|>KSH;L$xnw>w^#wG{L$ZCD8rAKBSLL3d}^y4c>7<eBvgwYxx&0BXP z?Cy!YkWvsCiqH><Zl%#Z5XdD)jaVek!+q6dh?<{NsQ1+>6w`|`$53XMp^c1iVh;rs zQ-m*#8h76W>;ruvbqQ6{nJi0%wrQqLslXc7*%oh`ZtC1*i#K&{w8fb^y>S`wiF=VG zZ-3rU-f-Sy4(LO9NrG0Hn4dod98WdSFBf5l3}N(*&I*LRiLfE9E?bFyTZm_TW~e`I z!EKt-Vsj<#N8=6w<6+|ZJg!n+G?gn^oaVFGM3$mNB@J@gl~l^IFkc6y;q*MpzhnpI zYZ^{8-Ubk6N7%y}PLue!OvzfH%*p3IhpuC4joByN%51luir08^6VY~nJ2Sej4ytQS zbj?_IY17g_5hJ~6i7`WQQZ0F%nm0emYlxI==#LKpR`O3Uf3!x`$ziC|fE>44R_>CW z$_}{{z9wb6T&CO!|6OvP78dtCGeYwb>OyEfLOlpA(Zc3yVU+R~xLta#xiVr4G}!sd z-N><1E>!M?*~JiINi|23X@3}<yX11%ZUXiL8O6;9z&wPy^&-AuGN2x}LDmqb5GM*O zM1lEQffYzW{dEMqdgpy1^~Y1mE02<Es!-f{n(WP8q&SNecRqW|l-v@<U8|H9DxN&0 z!l6_Zup~lwrJmlwjuQIoF5;9<rNU`QIUm(_#E@B3WWM65R&sNJ+Qwweadw5&Yo_K$ z`!Z&ERx>6MlKA`~z}N;DXKQ>;VIv5;6Jh6RVRo1|5w;s)#adaKJTnz&LW}ZQXblZ% z(zSfF_M3*VlL#w_&R3?`S`5QqUJ}*EjkNaPM)X-@pKnr99o%8_lynEz2?J^cMjiu0 zlib|~81sJn`F*ranS*iBLG9pl@et}%Jd3oE5`QDHPHt7iRw!9jlbb}VBdr<s{#MhG zSni^FP8PjRp3P}f7?L5GNV^Sbe>fF>i)gT+%9W64rk1OMpl3%JIVQEDXtQp>eO|{w z5@B~DZ0xt%IEEj!%e@Fo{#{5t*MKWwnQxeAQJtPgIy2H;U`UtZoRpO3auQ^R1!)&) zX~SckXO&Xz=JDJU)!16TIaXS$2&v_<@<F%v#K=duwIN^Cm%xqEl3c6)-Q>2Jm^>HJ z2a&c0X<yRPMvplarf+c%g+@}vh}rU@MKhO2>%k`h<3b~D1w6hujkr-;%%Mj5{e-rd zkdR>3Al>-H`c7mnN$eGF)5_QN$LKnA$!nBu*|b9Gh0xmuIXob*Kwyl@5Iqh7)&TH( zc?x=LQ>vUyk85MogT}VBufX0NQZF^&PGol~=}slXsp-X{22|HlE&Ug@7s1|$v{@5j zI}Nb&Be03oJGJzBf1vUnLRjhUFULy(TC<;+Hby&8+opUKI>YYI?`MS5Jfthx9nmxB z`-L8axe+$qB*m5y3o&4=!GMKn2-<Kb2E2RGp1XL^tARUDb9ZQQy5EEJ1qdrJge``< zRCBk-7;W=09~7xEN0L`ffJkvp%`K4*n*25Nx%)$Ew=@Or9%W9Rt{@e%sD*o_l2sIA z$SX=JQs%ihDbcEt_CoHD9;-GX>{UY;%~u8x7PvpMwnMb<hMv$1w6}p!13<S+Zb}sG zke5XIChfDN><Ov2Pc`Oa+}NPwU8Bs-<0+DpreQQ<h$=x3$mbEGh^J((800KYTB*;h zmg(RKXJ-mz;sYTyOT#%lPHHo(k_m#4_;DlhWFgNSLp^Ovjf-Z~RZTp8-;K1+2Q)ev z`ijnsw03Y1X>yTf=|miCiwqMGBPIn&;hCQ+8bRuxskFxgc=Mw1BT&u>D02C3q_08x z9%;%pu(xo>=7o^SvpU7@o7Q96V%{3ZbJja)?<;0~YFL}di(3222O@D>sLRpV^gQw& zK;F#Q?V(K>q9IVe<kKKi9*CvyET6F85+N4lb0XjK$Tw^1@|>~Cqy4(4rovN9=O*PN z9@~AIsGqJovMdWvn#z>)LS1nbb0U_1$TNaGGmPz7sN)uC(q2TToG$8fe5$rws0`Rv zE8CI(PRwcVg4tn%if$`HSRTUi5tgTgEzsOh^KI2Jr}GPuq6jI9k-`IaftH$O#17!% zelW5=PI}mGggFtmeJcFW->Z2g#KGO%O-nYkKvJw^t&KUY)5iZ)jKL2^=5hua6&s~L z;V_5xN|E-_iET$*E{I>C4PwZqE&93GTgI`aihb<_xj=nw0C2|v_X<sx8OLo?g>imZ zn6$#^bteh^pYs19q}nxlQG33LF!LWn>fx!^ggvGQK$wC_GTgM9^`<;l=uBk>;uVC~ zd6&hI{&`7-larE6Z#x6}-=9M2hUm6)5-twHWkccwP_CrHi9uya?#Zbjuc-cjzY*}4 zNm2CU`Sl9D7rPYOwYn5>O<sY3&!Nw=31<44(9r?2E(Xj(1I(pU!E`3AFv6tu-Hm{` z<4>P6mjEZ#@anLGnP#D3?RilQf|E3lq%NJ@mXeT-V<`9FpC+v_gVE~@+*pzXwYP}p zY!D$tgN(B<W<L~C--)IH^JQyvT|t8doNs|K+?8ai;hhZuljeJy0P|kJd~Yfm%va{E z<L>J<DjqQy)tS_wv8E%62@8}tg*+cDrNvMhSH@6g#={}?y67^EYbJKn!pSm%=YMIK zk09^w<tg(H$mlWKp{t0M3|gsJK!KhZV#mdEBEaef+yjq<)M@ck&|x9Kn3l)XNKCZy z;)G`B)U>%ptSbsFuatGfh@M%bX?qn2%hU2Wv@p|C26gayEkTi%Y5oMD3$#LYpcGc3 zg%ui9Ow%I>EJC2e7}#w<Ib8hfT9L(C${GsXY{(`_%^=S%C_y{-ht#v=iTsP+U80ZC z3zby2?p|f!Yj;wq!Iz(8GOpdaXzeyxUlb`wVx8E24&>E=kb2ux{NhpUiw%8qe#};? zQqqg{VWEWg7D?7`0_<&oogdv7J^FI4Bl@o=g1N~55c1!3AToF7@v2f&jf<%tie*uU z7F3wzQuKKa?R%d@{)Y}|Yqt)fnwiIo6ij>$ApE({TSNOv%(1*(U*>Wvx#f!6p_Dpk zQJ)se^4ML<?!rmoNN<|Y%Qa=%qD?OM*B!tmbx7M^kKp1C<5Hw#nKn*FWdO<Pz57kb z`;+LoSfuSRJu!_i22RFc9lPD^j@4rel9qCcQch8*xZRwy7+_WymK05E5*0TpSCX_u z4@DB8yR@P4?>rb%+b6YoxSd()h<L>o%@^^)LBJgZ+}x?*(!zNJq9OlX$YME9<o8b9 z=2=ZFN*5?ui*&WBc#@-x(-cJi&8KzMtee@pP|5PJC|^i(NKK|YcwXfpM~pSHdZ4tE z&RjhnQeTy(zz;f~$*IgMVlZwls)S1jBO=NXC9jHA4vllR^TBUVMD_t=jmy<aW+AJ0 zh1{D9^-<RmW0jG3xE?TP17?W^(>Qh(B^opXchXw;3Uobz`5$@R$h%tf(Wtx|qQ~8p zMjeCZ#jhgoCggo(s=9y|Or-|lRm)2{PGz<uGTuf>x7Zu~vFc5Gan%<9hbJ^$)Isv8 znuQPfHzMu`;%?P&^O=^SHt1od8csv&Fn1wM>60P#+He}uG(e@rWI2+G@Rwxt0i^4G z@^j=B8b2;eR-9FeyMTMFM{ySEZgkkP7}bJ8z762)K*aLrkUBCI?D^ok`*=-3Og5lt znDS!E#>Je<$#gA^y~5y5T5ix-YV<jbrofPF-UWQzPlwd|rdnSrQ<~AHZKX<$$<G_E z;)sQ537_V02~Vu888=jRaZaPAk{tkXozhsunGm?b06=0LcHV^;lSd$%r(SodUe8O& zrmeg?;^gBPP7No|a;3UZsaa0DDYO{r<UQSDb|BB9n2kd1y&L6je<q~v`@A;!?2D;g zm}GJ*b08}U1$~_WXS)dP{ai@>V|1T!M9G;|F~^1yeZ7m;a;pHR3vhlD4aaF5ds=yb z%;$Y4Q>?B99wga(H(<R9Sk|e=G4Kc4++Cq<hLno41p;s}^LZZeJaE(8<;W0gGG2sA z#0GPd;$Fhx3k>0<3O`5cyclEK3n8^nt7~{Kz-}rws9S}k@6wqzFVgRR;dAHj_A33{ zO))PBJ9G&Ys~ufQOJi;|k`8bLWd%^yU#8}jTocrh0w$1YYmBLtD``p0LOWx!RE6R! z<aW(t`asfD>Pi5-(k`lh2ISjIA@%aO&%x<eycn6U0U=F8C>L?p$h@}|R$5|doQ@<@ zou0YapqW(Zc*NSI%u9+L$~b4t5ND+4P9=A!&-r8IcVl><4fA~NW9536q%HRMxQpiT zi5U1}Rm7E4ruX1~31tZ)N_rJI&pRAa-<+DyJf<S0qEJ6^A`Y)Ob!k+j2i_FBZ_@dg z+)JQ)p^WX(ZRs%3r7f;kRyO6+UX9YWMA=jb*CIOKMyK4Ie9Dcj3Z-qOveBt*a=}x~ z37q;dxVBn87UvWxON9k+rremQH7lEnMS@k~q(c831HKRbHKe+xp2OyvHt4*!M9IA+ zW&zOcOO(=LW-5m3z7+iNdPqH>(K_l}LtgYkl{5O7L!;4KrX69Ul}m!V18_5rgw*t@ z@O44T{3>QoTrky~`ze@l+Iad~NFA6yB|q1g9^|8i;t(VasLNu~Vv&CI(DZXo@8I!m z0sPyPdWW9hqtwL3$$YAkPd{>kZl%6LPf%`1T#m$-$ok<$7w0yO>Tp^NP!?e@CSE@X zK|J_&NG+RMFQ_r~EA?)}C>~cR>s2d{IieNndVnO+C+ae1O47Z-kh(H?iZT`|C*@U2 z7sjG7+4K=SCGdFQSz~aU_9^3-`k%zaUZgC9+o?r5;C5*4Qn=A;Oy!0&ls?wLm6sIP zF9WXWZmlFY5>_CfOv^}qOfXN%rbZn>zX5)$aumtNfm5U$(=7;aX^AQj5O;+fBUw|7 zu(&2U?2A;cP^;X62^DHHxE+QvDNnT_&N~4gny=7Zi;YJk=ZPlu56n?aKa4>!+8c~< zD1vmLl*=UPC}4hHgBdx8dVSPd%IYXzxnU^<of=uI0jKoikovQ!aN}`4eK8O3PM%R= zB2~oh+8Avd*&-@b(o1++Qb_B1xy1h{YXD^x#gIQ9U83-0Yf*SXGS4vCB3Y9RSa$(N zlVwVLv%oDh$E?+~z{#VX>1I|b^#hnY0IDAL?$1K%FQ@LCjhnRd%5>7&$!>JJ29^LW zy%(Bp)6Z_BGp|w_-Fif+e*PK4A(m=il2pghOO%?8db(xoSVn!D_N^`1;3YMr{@Of6 z-4`ljrnvt=2SCI)%t;f5sW@~iQwiKob{~Z;;+$GsToUD2gix0u6x@5#<j}I@O~_(e zhQNF+FkcV6F7^=2=OzvS_uX--`cgD~ol))fuD)LlRU(!ghjw}wWSs4Cz>HVbtEU<l zXeZtDns(~Usq99-e-P#&m_c3#Ej28zy7bk}8w~-J$aIso)Tytyc4%AsPCY@1w!Eqb z82yx?Qaf>{ulv$by4B&+cRS>j+R|(V=Z&E2oPh3<Sm?Smpq1p=ric>?1a$@6B^uNf z8q`v)1gDlJmbUCpx=CBgrJS3!y6Du{1i#AwtsFQNYlr*vC1**TN!j&v=<`Xc`fhlw zy!4c5j;(Q9%)V)H^WqY<W2<~>mGyt5-}zNlt(r=I@F=s(_0^67J_Dd@%e>Ptd4^=_ z(t?d!4aG?-ShE$&O!Jl5^I7S2D!FC)YLqySO?PL!vthobs)6ZK;6&^FacfQ5GPz5m zIZ<I5{BDibWz;wWG5dvSOv~#qaL@uJdZ)l`p!f}1ST(`SPn?j_lT>TqEYopB=WEf_ zJb7R%hsIV;uobaTwbp$3S^*2;uhPIRfxk`Te?7i=!r_$VT16c?i-1)3egiykrm7zJ zymjf~n3~L5J}rorb@B9PHJ`s1Qz&?s=#CroWMXPn$&10|w03(p@!u7+XQisAPc?5V zQ#Rei>Ump<vT1>E#Yr-&?uE*x0-@v=8WjJw&C13qq2!Y`za%^pxL()v+hSi1C|0~q zWn;d`S{eo?<w6EN4?K^at*S4dIwhTsnBw-xO2A~gR(S`KcMST)5tC^co<ex8BTof9 zdGIWv#LMK^eD;9yCUOLj&;Vu+0v%c)32!$7>k#HbSfN(Le1ti)_-eQpYo%3EY0t^< zm1^MDYpKXxt)(LO8bEXcV!jpzL<MNZq0s1AX7qf7JWdVW1r*SX0Jj1ExI7u4^APGV zBwM8w=L}cM0CVGnND5qHz!kI1NQL75o2pl$`L5OAG*Gh56UgZ{)R`!=GF+&zDc;m; zET}-kV2MV#Vm;z!EtOLnrJdm+7Z^Q&<`wNj6C`@4KQ#yXRJN*~W|@MAcu%rH8$5Jj zUdBEDUf817b|P-RL5Q1T%`>38zbQ|UI2AmCiOl+_<b~U<%OK+xrVhOpVU7vd+z=xS z^E3g8$GRsqPqD(|wD2&p%?1Hk2^cpRkf}Dr(f*5jt|WEMQPrEKUZeAbM-F4{9Z9_J z(2M+ob5(U){1o}cyj&AZrdW%k`AM7jJUUIu8Rn~ic`{d3|5KU*W+~>*O^LC#(@SE_ z4aQKntSeF1JXL+-Yg6*YAWf|ff}T%7x{qMkK|pOxe4$z#1O-Jp57M>3?|?rK{tEc3 zG(W|c!QTXbo)%vYf83yK$iX3}nGoXE@+?P)!{A@YDG#FMM2=#@tq=kET7pt7f$rx7 z|D_y2yB~x)^%VF`U}~yGphrVzp;q_`_zSe0m6WK_5U^MS?bOOH;|!C5R2cFQ4KNKn zAQO%y2rNY4d<1ULD&^A9xn7HRYCueX)Jj=Ip6fISE@K7OPoPsB5*28)DblK5YQTl? zh2new<p_ic7grJ!!mUv!Ow(T*OS)f+xt2T?h9)mXz+x>WxjPMR)4fPoqXkgeorxOp zbYwglvIX!LCNa+y8R+KGN-brYMmPkssDm6?$Z$lX5M>;C$rT!5318ZKOurhYTva=! zUNfs$r7s%Nav@(G5#Dme6Ke&nB+0E*73v48B(cZ24du*Rq^ez0>#7xN^qVG7Ou)Gn z3w1xrty8MpeE6PrTo%XF!uj6uQIu0rp{h??Kd%q(0ToI#lC092oM^ii{<t$`tud%| z+>|_DBQbgE4V_Z>Bh;lPs)BnX+}FldDmH?ninLBxsAXFUe}$pEGL19!o^&nT9=J`! zaqA7J$1Rbg`Zo!Y2xDOId<qguV^reH<yy=}xGS}Y#))iSk_7cbaE%UW?F0m&GziwD z$Yw?KDRQ?d1}48<13F*NMWrlK44r2e0?G_<R{|BMmP-$-HGo_mgVr?)iBciN@-*fy zR-T9Z5X`GEM;ML^Y4Vhah%F%m$}|rNw76U3$r7OCO9e^doI+b3=3}+!OWK$eIrF-P z?pxbDd@A1^KDwe9&MDCO#$CuCKz_cjk00;<BJ3!_emm7T=TI`eO4dSxNGnG3X;+E1 zm&$Yp@8VAy@x}noo{utCsp=1>S{I=?$K(38N(m3pc}j&#zg`jE^5iAr+-voevG%d@ zl9uVwaaYQU+r`6qDIHj#4L9L#j5%Jf;+YL*Dl4@8?Of9q9oEuB#aY6$8bIK-iSinJ zs3OgoQyh|HUahLOspVZ3^kHoqr-*lP^rIZKV;$b%DdepkC+}A|HN>>3aIE?}2)7uO zqqBlLfm0W7I(6#3=6S18S0!tmGH)sEbY+$5Xv8k7T1TZK)?rEFt28Hc;WetdMVhiq z`w~9e>*k}r<#aA5UEJvxSH>MNmI(9t%=kvYt^w?diT%J<uB3VBvKXDzSzu&;asCbY zdXeuZ(fJn9Y0F6BVl=Bb)NNb9i=X+7rZ~rur|*pOi5;68`J7rlXHq367q@We42Rt% zNe5Bh*R}F|rgeNigW~2P?wu*(st{*uRKsUpd?u4?zjiLfi#TVDI6Ltl;x-~~K{&2S zoC{eY&aIIQ*o`zlLmKi+TG&B^ea{d^YelajY#YKp{feZuUw&k*=r7X@YejCp!<bwk zN!2&1;rlO<Gu;(T50`$RyC&-3b}>^GLWRy}cmQK3V0<9yWlkDf2W$;7&d$63Kb)O+ zPJMR1i|P+t(r!{e?~E}WNnZ>uj=9oR9-}w9lIXAu_$6xji=GUa+=+;{YYHW44sg)# zaYWxk3*VTtd5q_vs1VKT9Hzc%T&Wl5haLpnT)@3tgR9?7Td9Z>j+EwAq^U-lEMuA_ zk$W>F?`Q$J5ou;lEm!QOwK2LeG~fS<QD=HnrvfmYn^g7g=zX$?{G`3b|BAUz6*nhN ze<h(*sfjxjr#n62O~}oL1SX&EsWf`Z;VIM8Tss-WM#JMS<nPlr1*(<$GW~!K?>}fM zmMZndhK<ZMQ-n)m|EQt}<MCEiZHw+lF2z=--vlm*mRChd#fGD|`g;R+0Zv-48ov9% z<3GYu5q5zg>;S@MBkXI2utNyTMOdmK>>Y%aBFwLa@%`Uo$c|nkk2qKa=P`~875%&{ zjR%=X`xMenpZc7c-L!&5g*b`t;zvWoWk$GTy=I};mEQj9@~i4s4EWxKux%5<b|LIe zge4fl4j^p%gs?*h8<>#y9faLAAxwf0-ia{dn+_=m+dUyH17U*`^3FrpQ~n6ulR*~` z!VV#9)l~Z@bXI96Yb!1&GrD8F{u)XlqL;_qSc^4TC{Ai(2t~+Mq92QKFcgmw;(Wav zlPfw^g?=Im?&dJ4+oKbiR_WQ}T4g>t7>O#1PI_~q?q86^`fg1r<llg*J}XI+<e%yH z(dQ!aj4}|6LFc1(Aparc-z!Z)Pu4+*-^9?gz;IgA7+w*BrsA=Z$@-SVkgsU6uxGhG zXFhn~KUDRtsqk_rsip%l89tU$#P`Fgz5{@}6L6oKy1rSf`2MEQ?G_qthAd^bIEU={ zm+BkI7puOs$CyzjNn^lk`RBAllYVzur~`$QD=+$u7qHCVRaKMLZ%Fp^(nGrlo2|j; zv-}Gb?XF_veqO$~a>;rWz0;SBJSoOJ(!YQI{{8#+@87?F|Ni~^_wV1ofB%2}4gS__ z*#SfDhoyMSV=zy`9D?}=OrAO3avb(wVb1tunnjl5IqiTFZ@Cxd2+W-@n_y_#s+*TF zKcnS|?LRZq(_hl_$EI0mO?~_3c*|Lm_%_y=Fn7YArujb(sjc_kYPQffv$lWNY~kkw zd(0O4a9<o0c+%lX|J3J={7t;Bcnj&PRdM3ZDa{{Ghncs-Y$5maKQ>#wDv5g`G>;_Y zL#o>9M7Ro@a2<nv=MT;LGQj_{-;vGn;WAzXUEYE@1`~g`*>W1pMKD*u6u?x%tcF<+ zvjyf3n0sLMzzo5>2=f-qF_`$DBR|YVFjv47z*NGlhFK4@1?CQzdtmm!48gnz^A^l8 znD~2;ALb&MD_{y>Dq&W`tcTeGa|g^lFneHzU|xiI3+5P1{4bCn<|3FYU<zO=VOGPe zhuH#i2h2S%dtioOUW9oI<`_);PUMHV2<8fy0+>pe)iCQ}w!qv0a}UfOm?4-KVcvo{ z1{42F<cGNk<_eesm`a${FzaEqz}x|I56m8zA($6o-hw#>6aOpZhq(ym3YY?zN|@C! z>wh(wFKF#oo){<z-uhR51S9n}@B|z?U>7<ZbL|<6S9P{{JMG_?HG5Xp%qu$Cm%Tar zidk8+XJubLLqymw&&s|c>x!%#eq>rq^u*Hi7&@~zIZ{YE$Dewd9^dwe+0rG^L-A(I z68%+DNz&kCUJ!<Zbn%8-rf~e?i}m>Ed~Zg=2hEm;C&gD?s>cr^{?W50#=GY0@dK}# zEwAY_*KquYi^KT8Znk`Ez)QrNmWSj2X11K1l>fx4aQvHQ%QcZ`E&i`{di*ZL>mQ+s z#Lrlx#~(rb@k#NXwc+@Gm@P&|5b;;Egz1X-?UUliTf_B#%WRoBDgNsnVfrEd(Mj>= zZ_wkr-ZoqQ^6JF+6AiK!UvprZ<x_o?EgXN&jp6tgr&+oq(OUd(Z`R|-5dXoX_!n;t z$G<eq^215-8+-KlfkV?QODDyDuqB)y@t04Ee{j1VpY`%I{@z1${Nf#9{1HEM5`UQQ z4wwJRG|SzF{vqPO@*6!q_w8wx{YoVME8(7FmWiy%#{qnELUcznjd(B|9U{Eq%+tR= zovdk(V;qZ<EtO!#IMej=5;^X>6eq`5ap1Jq!6|0*H2O?qoMqYp%3zt^k0hpixXs^e zl(f!mp3_Rsmr=HP)2-xm0tNHURHA7&CD_c)dnns2^kA0hJ#=n!7pL`Oa5Ue_3H(6A zd>cD=p&YaCo8+V~=a{?K3-og-<a7$@qsVDy)7OE6`3IbG4QOHhF{L#9fkN-2(0KDD zGFNM*i9FwgXF7#gu0j!(X&Y<dPIv(&PrLCL)h6L%K%aKg8B`l7F4_EdplWhZ-Yhx; zW4Q*-?bAP?^I!?@W7MAhVJ&C-8R{|p6S}HpPAEnFr;n4{l0c7)Pd`rX<b+vN_z7~` z5|*OK>7SB2CE;00bCTSt3G@)k^v}qhmarSBOb?OUo=BIFrb{w;(i0a@gv_3dMEbni zbQ60r6W<^-%<@&RvJ&s1Jn^yvp4o{H5mFYJu$_|_1gWMcvu9pnI~A|U^ju<Y;$F)0 zRhd5D;Y>`VJYSRPk&S{xx*9S)MJ@ug!o+e)mMSlW$DO#I0GubkiDadTms161$TAXC zB<933xye(Nm`k2Z*;AcZNS;jg)FhUXXO>KlPu3@1O@&^@xHTr`5a?`qWgKk*o1O&K zEg7HUZ<6`D_)86$ObAWC!(xIzdHP*c^Mu#Y^3#7vPAOqA!Tu4^z?^W21MZ&^WD9s9 zIgU7jTJ;nHM0HW#r^ZC+v^XuaRS&&bGCfOduz;H0LW*2X!mL8jG2seuQbN`?W&^5y z!sSFgOTx?K{^qYGYWjJoRKnc-5;grVDE!K&C2INw#7DVw+bA_*kbvd=RHCM@r*IeF z!cQO~CKM9PjD&$IxJ!xBnF;j%XhK;Wker=BYqJUE3fyxN#=u$$%jUtIn?T>&OQ<Hd zJAvL*NLWs8Pr_k>*+#ctswC4xuoAP0`X>6GRic|ZsdcNF`0j`D6=;IQRZH;aC-Rk~ z|0aI75`XTNsq*H;?=OJo7woYlcF%_AS8_Q#$%z-A1J8ZTn6^ZE953;HIS&9*5>G+x z5+CIDPPJ_WDv6KC)bGvmxoI}Ku8{b+@SDy~v)RFSiGSAO)6#60Qu=2!|5<6aaq_>Q z`Oi$V-A%v`Y5p_PY}x;Zz4s2Ys>t?+cRKr=)4O~3Ii2VT-E=<PbZ%&98X5$e&>$cv zA|gr<90}3}#sH}3m`BW^#XJLw!k7RNj5A}7s3-<Z<0u9&D~9j)TebJ;!=1U$_kQnp zpZC3g+<u-q{j0QURn=Nmt7_M-&HTGOe|EkWeM<VB)v~Q22u+*DO24BY39bzbjpww_ zl*l>wjsA$9GtNK?XXJ?zdMZN~A|O5A>D&QNxR$XKD9RX0D4YiqTj6VAm^c$z%TUG= z&6&i|<ct$M6v<eiIg=Tik#U@dvNfX(QO+SNKsUY6naU6JhWB8V;v9Ae+dljS%bLbw zEzLLvHE|AqR|a$AO_ZFL4eSind)wr+1iw)iA!!bC)mY6E+{$2n^*8MgEGs+EDZ!H& z%)9Q>IH@=TgR>=g0fWCrL2287oDIQKC3q!+H`-kBKoyK9^v^LFQM1f@5t#L!E`jy< zm$f2EFvHn=Al2(Bl&()V^z3s6p-H6a%x@5%lN0v+IS&U2Nit^*Z~LCW2GVkOBUm5D z8IJej=-uanR34XK`Z!9Ov0BUD0!mZwQO2>ppa}^I7QkD}MOMMj$k_^1U?FG}K^R~X zK_<Wqf?@#P+F8&9&_&P=u$-V1;CzB909TS??-S8n`a%bVUV4u*u=MWSEY`5=CK8f> zkIBV7@ZQYK4+E?xc+n5}zz_M!4>9kxLJzTk+-q6Dg%SA6gjOobD5$vCOIIIH7eUkN zSGC8}4Pd%ye!8RM>6Wtz|GWhLIg;*drn~rFkAZ6eo+P-#&$-EudeRSh(MzNC8An<V z?}mSd(0UKF3g<065rOrpJBs=qy+qR=<v^+*Qt*q%MM1`W9<74=ypTG89Rz~`b_@01 zkZJw7cKCCIdKltSFv-t(H~@Lqa@RB6E3@D~RMO1~`&_)@b5Tq#UR^8;bL2h4FZBwa z+6{ilMvo6I_Xo(G{_Z1jvYX;$-#virdnC&o1#kOAzVXTa;)g`;_sEuPCD}a`m_mf{ zb2WPR;Sk}%1&a_)1j>0uh}S<;GHn&kIY!ez=L~AB4izt*+okDWk^nopbU)=|Zza6u z>ibrdEyP%@@8bfBH<gt0aaj&%mOa2^VwT*?@OJ#X4^Ap<_Do1;{;v>L`F<n(VO<k? z53Q*D1hc80q%YtwvwHK2a=C|u86RLhQe+PAqqE;0utJ})s#5`e5Sat8FbWp@4j{sH zT7d(U$DkZP4vdA$3C;v)AXp91CaLG3fkrcEF~Agpa{y)$Tn@m`2o~&pz-#JXAMoU% zU@YQz&1}JXfK>#K0$fV)IzTtUoey{+PXnwaFgIDD`&g`P%}0G=tJniII$J%0sLw?P zdcm%)niY^34o>K*s+*OUQRu5`_Enu^8x1lQ(vkHt555jp&0cQM+08Vd3kpGc8;c(U z@D#xb06V0v0F=3ct2e3PtKbPgWTzkU%_d*aHhHzjz)$W!BU7`54Q(^l1H%0UV6mSt zG+P*=IV=3mm4xRQ9)I(MzqiPryV>Kf?`Ds!rp+D`vjIM2gT)F-eU(m;T#3MPDQp{? zN(x)0dt-CK^@!ceEH$T6XD`q<B4DnlKrxm!wdCajT?x9E`9d$VRlWEmsNTiG8V$6{ z0!Ck=Go!ist)nWIv)DiCix6CFvSQSeOQoBJ(IW0Tv0l?x>zsnj)j!XyxQ&DKWfDIH zVfE)A<GbKz3F%y~uf)9D@F#?wjL3%T0B#2;_!2387U@jiVukqS%7O}jUIfDd$_Y9F z8VRNX3?(>ni`Tt#x2RStSOhSRQ5OIlO0eC}^>;tl3x47cws`%#XN&6Rg1uXmxEA~f za10YCJ?N#$e9)5xv0<CgK8>_te@oS3mr>gvlO`=hss++h+g-n>9`k#u;%Vg9pAhe6 z(-VuoO53MmAZZ$f%)FKPPGqg5>7+j+2A#2be!-!LTS$gxJ*eue6%2jQ6Q1)Q^pvdT zScs6mL%)<U!o_8&o&fBK3%~>9_EnK92td_4Eax@P8>&bn$2)cYYe7uqi5!sL@M<un z@(C93rpMK^f=5vhzbjhs9Kb4quK+HUhTG~jTpEB(GR1yKl^@dPhm73nb->uIUI!cn z(9NyiSQi`ZOJQ&c0#B8CT@pd-zN$%#*Sgg*gzuAtM}zf>@r?dTqOXR({5<%}k+1m? zw!n{4iHb}kj-N%M{!CP{CrJWX$Y-SVWJvrJ>P(u9TGJ!ogrm)AaeBWd&{OyfBpu)< zR5X7TnyUjo&0mG)Z9=o)_N|^x@E3r!th;Spf#gA2)Uj^XCe>i=_9A|{==bU<y0`1Z zrHt{W&&n=x5H&giYOZOKW=WHbdNpR&bV>Okd59DvEW_ZUJ{8e*{64mxX|TmOEmbej z^elr_ITEo284r2mV?MyW?BgnchY1exLzV(OO>i;5YXmm~yif2hz!wD8HV=&1=0zR7 z&69%#+dMf~w9OOgfwVlAZ1e4}yHVkS<=Z^Vb5Ii-^%!CCrfupGg5Eu7E{Ey)#+yjH zF&=7LOcnc-0=!77_z2=|lenAHAWhF(5~CD>(u9F=i6lH7K^5OH<5KbOfxoF@yL!|y zEzOsJ(}a&^kpP7Y8j$Em_GH29eih#Z2*I!~_;Q<PHRo*iqKdYAQKS8kiQB#QIBL6B z<<`qtxnbl|YfWYKhm$3(HHGXSB)GJYypCX+fVt!>J5>5KJAWh_Bw!xTfV(I@qsU{x zoR5IPe@FI|4oc(Tja<yF<??>;SPUQbI)OXEhJA;?&yd+Iq!hJ{2fK8sALv7-fit>D z`;dPkj?OI|QU}6xPQSKaK!PqcXbd?D|LLNq4|xl<pi4V+$Zq_jOPk!b4RxTir<-lB zBR^fbYYw>snds6QhhC19jbJFFJwVuY8-nTVzZh+|<3F9f$!IG^R=SKecH0_^t#qk< zjJDg5iOwn2+c+Q5IYGUR6BnH`#TxPs<}*6yZ*2oXg3dWKFr*`iTQ<OZha8J~(m6j2 zITp=F=ls@o4-(Qj7g}wHqZ)M1q(Iv{_)q852in%*Kb<o?(6$>=L+1<&w(UbcI_LMn zwwJ*NopVvJ?FjTDoiioaHVQn^IoAc-??$83wNcXOoYKIM<3Wth{(R^faJPnSk*5>3 zwFA>Ru|V6GNJ5uht`FrTe-XlsZkg|gOac#dnYlyx5v)hpb&Cwbw$H#4o!y|f^+nNi z&J)45W6>sbjvE?s1!&OO_qAEvzT~PuPaiTGrP0~<3>g9nbXj?A*CQdFGfZ#WjC#>I zZm{hK{HJq<>uoE+09^*eU<|5B*Q-xkGYHdVU!V`E2Oo5i=C+?u23^t$qwN#qqDwm4 zXnPJ#K$mo(G2|tL(WP!07GVRy<!D50`#_K`eUquBr*LcFZBz3%g)36LO<_&_{fa0< z?fn{R@7GZK!iL%cHq;idp|*fcwFPXbEnq`!0bASxHU@A}WO1w3IGYolq4t$6?${cu z=154eomy+z*7cfDR=cok;R!M%^a4!8h&lgL;PBJH=5gHr(!!}U=@#-$2rJxx3Yd$S zB$RaW(Z_4%VumM!j>L0++uGSk`f9sY?a>DItuVYj+Q3)xN`>sv2EM;i^Y>^2KM<=u z+Q5&*YL7PX6S3N(4eTdYd$fU{iPau$;1^=GM;rK+xX|GqZ9voMDRH<*8_>m5;c$;O zV2G#M;T~<k(l>#<I){6-0bAb&Pm{wv+CWGrw=E9$XamXO8SHS6HsI>qX>WJ9M;l1f z<^Dm3d$fUceHc8W9PZHuGW5qmt;69SZ6I5Jg(B>5k2X-GpNV9h4tFU7mHOrIOmVoq z7>J2ynnSxQP$ixj4)<sS)#91uaE~@nqf?6JINYNR)CzC&9q!Qv>h(9M!)iM=;BChS zx>-rtjt$&EsJ3GRYgk>i9UHiXM7SM$u84*Krc)>yWZRWZRfMuDCG-<Nv|O{eRcE(< zBiX1ssobiI<lCJb4rNo$o<QE!rks5+vD%cgC$bu$q$Qd?iJ{3!CwM55v_P{bGd3gX zI1goO7B}VWLwIU6QfN<IX?mM-_F<n$rMM|)Ph+u`W^q%_KKv-rGTD@ip2ehF^)-yJ zZo_ZtGK55bg1p-g>Gw<URtE1uNZQ}1z!YbDyZ#|U(?{@0PWtf(*3<vS%>gaCl3AZM z_Da_8n3a!vqLUrg*$i3?<{X>Kmk*=d{j+PV-V$8GVDA1!x%+2l2bv|gmBF;rGNf#M z$Xrfg+h`4@XC$-eL%6z4uW@*|A@dFV(<l26Z1wI}kvi)vcq53&x&VNCa#=U~A$I^& z5j+4efZ#bl>NP)V7r;RTAA4zf@j>qdvXFfT%Uh%;L)3C)@x6#*lOqf7#SG0A6X*nn z=FW!gbG;HAYFyrx%v_{jh<4IXLE3z-F^cp`i#8y$6-!+26PT_<=L)F+)?}#&dvDoY zDbv#|?njC3RI4Jyc2XD|a@^I|=^v3p$+C_)3g^vTrs;Q(WRdKvtf%l4&1Xq>ts~4O zyn8=k0kdsjpBFvBCf`Wzb5C3dJNPdG!PGrcT;J1~Yrm}JM%jLe`&nYqC5-w-N(_^y zU!}xMhW<v_TS`P~VkuG=IqN-(sSQzTt@wr-c*cmwe;f}B9vW97&97o$dY0U*yzB$4 z&`QOCA1ARH5VBG>b*D5nA1#zoPImA-15LU^^kWfL&Q;5Dg7*Mc1624aD!)ev7wMG- z$WzO*K1CGQpjpnHR){j1l?gD1AvFL?2uArKM*^HiaI7D);!aQM{s3?;!L<OZ2{r)S zK=8bu<~2Xf=YGhyUI=XSG;q{=y%oBN@_(d$JesDe7-7{6=vM<&Gl)%dNaZN}Yr()= zIT7GkfZ8*VuMo+eLyh_!iO_!BT+3RG;B_qKI)M9GOpN06IDC9kqqpib7|Xv!*v$ad z46Nif-2?E|(1JEkx@|>G78eC4ji@P-fbJDF{RG^!qLM>BC-to7*L!t+AK(dsZvglK z$*ioqtk5okYJh(bwBF@KT>|ixv>Cv!1h)VrK~%FI^m9E2kj0P>{4}2d6ftDf-6{&z zq88G-lhqoc_hsW<g0S+l12Q3N)r_gRHXt>r<eIYpp*0%<UQHfkQzE4DuK?#T>cxPn ze&sHJEeOe)i30ku;1d7_5?ll@lAs%462WZ%GYIbT!FGW81aIA~9-?Rc1Aqf=))#ks z0``MXCuM_IM8yWLh=BkX5gY<=HNi3;tlHqU^|c$k2Hmp3Yqd8wcx8R)6Z~p}S7>0P z6}pw67r+LBJ{!H#`}rXUZS<-$d85btDI2{)FZID~8~xVLszzULW!MCOzY{F=C2upp zD-6lF+Y9M;x0iT52)s-1`9@Vmz?YznoV2n`<ok}`2}J4`NV2{MNa30@<!1CQoy^;o z7UUDrx{XMzkJv;Di<4L=$g!oKpX)RSa;&T8!Y;U$hC)3TcENRo4Ta3s%me{*8J2<# z8#rk7=V%u&Ph`MrOflekN%7>FcBs)`gM}KK{54pzT7xzFYp~#7jAnlg7Tjbs@_`Fo z`1M9U$Ds@FY@C9k=*+vC{e@XlAEVJ<NjmL~e6T_neyx$uMd-rsGzZa)bap?Zc|ZQs z**o=Sf7NAQX!Z9E`V=wfoBc(dJ;iGDS8w*-Mt}8Y|IoY}jL_L<n$7%pD4qSh+58Bq zPiKE&H1`6BboS?Zqrcj-e{0^0q;&QVdh=`~rL!YOa}oHWOP*vm`^yyf0=@B7q@_ze zyxCttCw-td2a|b*09pU3H&Yzw?636ZYw(}W4j7Gme$!h_z~-YsnJ#d*-aG)*=<H9- z<|ZVivwt+2{q?3@A87s!@pSgUKr@X2I{PQ9c@O^6*>CBMd=^L-ezlQ%^>pF)oBb7| z9SaQbSDRX?McI4A=CWuYKPLJpex7xE4wDVFWd$SWUAUw$c5<i5QcELCt(PpdUb56e z$x;g?%R4KhR!EjwA(>nunFF{*VRD6Jo_&r`Qzvh@LNZq^R`lB`s#qcYNfVM>Aq8ax zW9^IKUx+Ih>#I`gTZk(d>-(FSGQ<^(^#gGz#1)M7BXM$wD;Vo1;z)=q7;8UqMu;mI z>u2KZ5LYnPFU0vFu3)TRi3`JA!C0D3Pf3_77)uvVMVKoX80Yj<hq;2WEd3a+V8UF% zShhZ&E0{1>Fc<*HZA+Ld7%N#kgTq|GSgy{6Vtbe?7|T0l66OlV@=lqAxq`7W^hI33 zgt>yTvi0R$!GyVjv5IsKBAs&1!m8BQX#C_hr!^}ko@rsOV5}<f%m{M@V^xc1R+uXo zt45YhbHZG~Shd32{4iHAR=vJTRxn9i!B|%XWd&n(vyvgMV5}PmwGdY@)*4pV3ULKv z-9jQ<!PLuAgu|P|&LrE(a*-@T*_9G{g&$gu(CfIak&ahOSC^zxElQqVwVlh2Y+h8O zMJw@7Z=|ep%S7*fA8~0Vy%<P>FvPUzt&nDYTI69r4WH|!MVWCLA=6miiev;sPpU)G zze&=oxX$1q=@S4lR+G@Fr28dWDf0>>qk)*Y9^gxYdjV)ZX8s+(MlWaX_Cxl0AzJ1H zpeW;J`*F+skX-=zOq3<h9BNopz+8#pJL^7{-D1mlemVkraUKY)Wpnr9JP=qXkQ;n~ zI|NSRwqM$x46YKqp+4A{V<40+^ank=0yOEu4cS-YA6-&Y_P6*)=NLIR;2&M`Ohdbn zy@6G@<_{DzQ`JDRBABpKB6|EUyD0yQ+b7<(h_@YLP0-?77XemA&ptt8^`FJ;r7fW_ zY6tbOv(aP6Kg@bZ@PEdw{~5RbZ;xBtKiA8Bnbf;2@RIrzg}Iy=v(cZC{k?o$pGj{R z%<HxEE>GeJhrFH072OQLS0<v{0FDLF(zu7O7pYNV6$XX$Yd8}0XQ!s0+5^?I0M;;F zJqr-1o&^wQY(*$t(9kox@P7eZSR=}K96xj+)6hOCqBPB6ODmn@b06xQe?WXo=s=wd zB<ft?k7@WBt&f!;wI%B5m})HhJdl$y-Y&cczriq{9R+7aP|4s({2IYG@oNS*Mv*Rf zE>Z`Ae}*>M!QFhq7EDJ-D42%da4?_N7;La~pX67slGwxy5}TYwVnrnLzcv)~i~+#` zlQeG(2%gQVi1G(l{iZ6~&JZ5N4PMB|kQKHD>6$+dm^rk!$CV=_iNQ1AoI;&DN6Erv zdhHhO^QC7|SW;f(TQEk-OA*pexr(z_C`Bf*NXlRa7N*?7l<g^Ra5h{SY?0dS%V6zZ zmPVQ$r6`B3he6h5k*P8ih4=Bfe}qF(SPexH4n^Vbc^9!2;ZPL*fjAW5P!#@=I61<h zDEt#~B*LL6yq`ED!l5YqGjVo=Ls9q_;`|7QqVTW8g;5SgVNIu}B+8*Etc#~2%AqK1 zh^IQrp(t$WFW_HYltWS2)?bCEDaxTJ><vXx4n<*aD2j3@3cGp|QnyDr6ou1di+@Cv zLs2+g=N|c}D2JkOhQ15bI-(qk!rA&Bct%G#6ord)UL@5Sm7}VadILODqH@MGCZ1_g z4n^TA@yv*FC<<4LXI7L$QP>-bq8y6C-cS_fP!z7$_n91u(yXMZvuIM}p<9xsNsoU{ zIHMC}Fs3I>K9l`&HF_{<it3jKh>sj5)17$-dOc|-Nto*ik7M#o4shYCQe}V(ceCjt z9N@w?5NZ()aN#v<L@UApF6<3(VQY;v_7lE1vN1#)8G5zph3b|UTCSx|hQQS6!^R>g z!UF>Oh@*tby$IJkNY;uRLp+X2LXoo}p85pJbVcMkNV7hPxLQkM)u;P}gId-c)H0+G zH_t*?w3`Fs2$QX;_2QEaeWWRZsb$}UT01TJ8YDCMlQWxMX(`W!%RLQz88HT#Pa{QM zS3SHeHm|F}Lt1Vf6Wt_<CI`GkH^meAs19(Dg7rPHp$9hhz@{G9+yndfzyUq5#e-Td zA3W<XusHo<@R9#@z3<QK0$}SFJi#<CF|44T?fJ4)p*N3+niD90CXa;X^N6VO=hJV> zxzKzb5j7`BQ})@3Mz(gcCCxWj=|%8KOyL6@V;^Ntb13hpajMFO*c3@8KT0-k0HMB% zHT`j>+73_g=SZ4b#9FknH7}Faywdhs^Rjqr`iOx&O?X*P6JFNSgqQU+;blEdcv(*q zUe?oum#HQk#llxf;lZF+_^No}J|gTXaaB)=t9nXY)l=fCo)TB}l(<TjIEf{mEF~`T zOFTJVqK{C_$vwrK+*8cSJ;j{dQ_RUd#hk2)`566f%vXZ!7c)OzjE_Kjeh=;WJ+$Zd z(4OBzd%mJQmsOZ9wDUq9?dfsaJ_5n%Jp`xs5S-paaJnLx2dy_ch2YUX!Ol2AAAw3| z50%ayDxHeT60$W!sC4^OhQz7(2w8{pWF4Zi4kQD0lJ!|XYh666kC47j(w9)}_d<f7 z7GYluE2i`q1bqj|E?pSl13*nH<HS&YCVuXLuY$u#@KGz&%q*W?kDyW>{O3+(=_nu6 z`JmJXxd2}hqy}i~aL)xGhu}w0tReUU;2?qz0j3eW39tm9G7TlhG_Q!Wlf6O()cK&) z2P})*no`z!zpO|7vR?Dc+T)j{rFdm!1H`EFetE{9OV77GvdewY<%9V?;He@hk>}*4 zM9z#-;$Yh=kyEM^RAGAsahT|hf_k%{YfJaTTg3!>eejVF-t@r>07D6$u+@HJDNhwG zAlLw~oZxnVt4N<CLF`fW9<gy@DX*Sd#{`G@pwkD#e8AULwh>eTyi8C8@G(KJpxSeb zQQhl6HkoA4DBTWk8YSmmAFTDk4L+bbSw?UkKq~>C=^O$OqgMBSRGn=y7MJq)`aCAE zeDGt?17G;yLx58W-UPUe%U$(XMcJGNTAWYy&*m}-#pHH^Q9hu&{FQ+6@-acKA3}Kv zr)o-Gst71A;|VA)iwP(%s|hGCTL7wCbdUV&sa}BsSkCvUUO71tuN(<sIjs?|oFgM% zIV&PwIX6eVavqO(<?I3IN4Y!_wPSgnTuMR9eL%Ss`jks4@kl>}aw#QJE~P}urIbjy zl!7RiEJ);XB?>ALxvZgFYBhW1ml9c5Lvd`Zc|kA*v89GmSYJyKw7)u|lZr|y3`adF zJlB`<3v1*8w3@@@m-1IvL*Z+z=`WaK*HTNF^XX9R@}r*ET?9JWB6c;~g~Gk^yH@hv zAap2db+zXuP@t&QMm<rx%-4s-H54_iM&1Oe`B5lP!WwHoOvp<K8_v9(Ag=L+{^**i zl54E|4h^xy=1@<rD&VQi#aUpDFWiUJTq^0$;cx9}3F%J=(Mr~O{)#!m))xWQz0Y;B zCRX($2<)b}`)X97p08c$YB6ydGS{CFji<aGu;J*X$MW$l2mQY@eKJibUE(>b)^nw) z8#?Wp80L*ev0n}EL~N*0OjuKAQO4@zda+_Hq4oe`>cx@`h<_jaO$)H-6544nu$qpa zyNIt1&_5N$G#^ji!s5RMhHW$N%fniQx!<Ax6&B`5{0?+*^Df3Gi;0_(1OG5C>Qcmi z8vSKV?~4Bx`qOB;rHa2f7p@P}N5ua*{lAjisQ8y-jo$w!#t+ijqW!lM?>An23V1$i z88DLm3j7_*(2Q@N0KSIwUp88ZZ)Cf@VB{gq08XIOAG1OeIpQ3rA4fgn#CazQk*V|< zfNI8;a~k~`zA{dw#RHzSLW9x4EuXw-g*aCa)F)c2A6j7#)F+#(Eegz_CCK&+8lq`7 z52ADF-a8+@xn1yIF8&9hRL$%m{R*jDP9OMZv+b@F|M&D8tjAU2KN2MlS_`t9Np>Mm zoJy1TWfQTAa||Y1S&U?S|KJKFYpq~?7aA9t6oe@QXrj+SmD>@oFEZ+or1V~d4aRU$ zx)xv}!3|8s0b~&O5Y9xR!KY~YDaH_yu8Ga|!N|Q#O8-5Q4O)p*i^$Y*n!Z|sH#2u} z+A~(D16&t>^sE({OpPdxA!sIpVlP;s;}|sP8sz4I+U5(`7V9N{3I(}%$KS2c$&#(( zah1CGj{s*fNP2G+I^q#l<#&2Tn%8?rmwLT-CO|b~rT5mA`n`9Q-+RVO3B9*DvG<D8 z&_)-rynCNi1-JEm+6vLenwjQhSS1;ZQ{bCqt-ff5trfrVv|3NJz4W3=eDQ&at=0GO zzn^?K%D<X*30pTHq01#@-JKNTg|b?lh4>pOo87Y^<qeA%&UV>R>JJbLO)8;N<_{1H zWyu+Xzi~PRXOYRA#%jo&rZ17qV-VTYb+V=}H5Vc7A$SMvq_iM?^HxgB?`2(Tm&0F0 zqNhr}4)}*qe0GB?XuYPNWiCti#AijhCq56Bd*bsvK=JoTdXx0u3qb4Gp0B*@f!_e` zW86^fWpxUIJ6p}Na{hx<<5!SqlEw3R(j3tW#LGB$fp9d4{yK7ap`<??{sCM#E&{<H zC>2+kA<!&+0b##KWbrA8c$j6jb-t`Rs4_!3$T(SJU!KIiG*^#C-~0{<o~Dr8>81R4 zskGuVQLoonou6LzmXcv>0cg5hV}>nm5VUua<x`*FR^Th@8VJ3czF~{KVDwL4^v~(6 z)J5QP_!3P&gAw|~;=EV90-6EdQw5NA`;+Xdb2$FDzoOpP(7X3~RL}8xT|4Lprn-0* zQWQyw-kB=J#a_9?utvX_M2yvz)?UR?<QlSZDRPXJ99MZcuJLnV{JMq<5abxPz)OxP zr|(IKxQ^r6ji^FjRN;DNeF~ltf3F0k8<@~OK@0tsdt=|Fn!bkqw<@GYl>GJ&*-mR2 zy89Jnzv$g>g2YIazLur`io`5(tt!$Q4k~vL>l3wu&LQvjMs`@CQIfN7mdbfAa~6Ps zQ8EeMw?(l&N~S>17b-q<hu3`_t2h8hM4)Ev@Lvyn4Otsy%8rOAq8%Df=t&5AqeUO1 zrbn<*)G_MCCXWUqX`U`dn$R{G;yJWZ6V1#Nd0qhDU{onfa-r|f+M)Ws<*prZ88laG z{x~I4Nb97dgRE2wXOHagH|lpolN49g9#@*;s@mtdQIxIPWJ>T%Ci{6zCX>lp@tp24 zStm?(SNclWApVW?pU(0dh3v=hk2&U~d73^z_z{Jyc-0EYE35;|YkPSLX~!tkuX+ku z{130LZAGuDx<1-V>Z{kGw)~mInrkhGz1pLWU7EDSG~17bB$0;>zC5V+k@8o*>c6wr zob9(qp99;YPrMJ&0EJ!ygo<xLPWHPtb_4}yqPY<PHwdX!+1?mBS;o-Pm@=UbkrruT z#lC!14IjnHuX&)s16s#7Y^_^`yNR#)+`W>mM)+HW#^RXI>#ZKI*0@uU_7<5>{N6Xh zzk%F(s`xrp+1LCRR2p&=xphMBk~q0_J~>tObzap&<Now7)IHfcjcvI>$ZtfNK0<zO zj!$rd-<HKsBbE)Lb==Ad-Y;2RL}0OG`ExwW{RcMx{eJToe}TlW2!#`=%v*(m_PP~1 zL?{e_EjW4+!<GJPqr2!iDp3Kq`U*H0eYwr#P|UZF+Dbr$JBI1G2Z#<P`?i+XRn41n z6BSIxdTHU}Ltgi$>5h}g?_+9iM&M*&>m!e?#}e6k>_E02KX6=l+#eUn<zIWaT;*}O z<zKnH+T(K9zv0qcos1dlo;aKHSjN+8IC$M}|58}5<m_pWGp{qA_64H&9VBHZX&p`M zzZWI{-q(ErJ<-em;(_^JJW!xs^aZLoZKoAtk7*reakO|%$Q2^+bs_glo-Yos9Via3 z#kFzveEQT>6KWNEW~a%yk8M@_3`lV{YumL`wG7R3f51>ynY3K-_dES|d4u%dRZ{ha z6)IIymG3k1uFr^+{H|BBRa}U)ti9I3V+Z<2LZI#qUl&e@6Zj~u3u6)ci)5i$rSDP7 z{)XQd_r|mAIk573;<~UXUg(Wfz<o-;-|%0koLZoSZeOC%?K@ED_W44m+V1Ok+qK>E zhLW?Q0wrfB#^tQI@0(t;w!EpDbzH##0(VMWEvCHbx9c`pds?Cv2z*00-0yK{SRRLs zGXENuFE26yo1QnMShhTGvT6>?Qq2*ep4e8r@10#%h?YTH!7jz*zJJ4{xjKUS4BX{& zc>;_7N!qa;fmOog;k^}?KbZ$``IC77m;22Fxb(fr#q&UjU7>X>Wg8?*8!Xx7>&zXX zt_UVuem@IA-|O{Mir)&wmm%+dA$SS1r3=BE;_N2%@d>6MNHG0Cf*C$R)s7inJ0=(Z zEzWQ!BT6ORi@W@3qpOdaHcF+_?ut(vrSV=%R@wY%<GWq|ZrT_Kz5?cMo^sJTUZB!c z2?6abUjy#%<CCt6S42oxS-uAJMq<`i>-Z}xTrcVB;uOB^qk691moG)G-siM<LOefj z9?%C!#H_b`wXG=hIT+w`P<$$4$(c4{J$X5i0v9lEI@=D(bHp))-s8UCwAMc{!B}%( zp`<v=4z;$C%W)z{0W-po8Jw9r&FMmgckZ?FA)!8AjD~=jfsmw|LEvVeZj$Dbl}_Gk zpikYTXfL-z?rOlKXYuo_pERtwRQ68ZH>uBkUy|-Nk@O+J@%_nNzNPqQKTO~WisZF? zggSvID3aF^9_*iuNHL9xp*8l@DWm$eXcLpxggS=Tx70P(X_L5#K<5@t^3PzUHcm?7 z*#x-Ac?W-mqUfSe7za})>5`7u5BATQrd^;<`T+HzOFwwhcI2W<8#ZY_3Z_fBaB>C+ z&`steLApub!UCYPS|@!DigZ@vB>%lStNCF6z-r0|`Xv7tSVqI75zs?AYlyZk#0Rd) zZv3#vxxLh35C68mAnKKP*uy&DfYrY{;PL<Qs6}AFNKI2Wh6Y+rCVT^37dZVqLf)ko zID;jc_c6h8fxJsCu;OS!-lY~;DQS6^THs7cz`N7}X9?sHj=<U6l#wGGfmLT{2Oi-F zT*%0PW%4eyz_pT+cc}$#WJ;5FsRcGL)VBB<t$)TtU5a*)?jQRK?&B^>NL`9X`Buli zg5Os$Q%GHkMy!r~1%D(~$G(C;5vyZg!TrSQ*jMmpVs-2*_zST*_7(h<SRMNcVl>eG zV_!jCJnGn2&=8M0_7${rF80;2ub{2}YWT;#f{Dkzf{Dkzg08+>^N)Q6)AZ?@f9xxm zuFu!}V_(4xoyVQjv9Dk@R&D;VuV9hBNAr(;1uJ!)uvEvsf-&)^V_(54@u*{8!D{iS zV_(6<V_(6<V_(5~J=csM`wDu;zJlGXWJukAMyQT`1=p~;>eyE>e(dY->_Ceh=&)bO zcJg=ZH-xe)B{b%T^4M1$JShw{@8Jge3|1~E7wLtT%|%>@7wLsg{Y5&T7wLsg<0xdI zlX}U0X$@%Nkh(AJa!I7_OJl=^Lh8OWN_lcf-IvB^mXVOUFO7Q!86kCF8qdXLhtz#( z>oiJ*x-X413q$I@G}5dHsr%B%XSEpO;R!rF(-czorSTw4OGw?9)^76D_;U=OK|DI7 z?n@({7*hA8@p8*)n)@4%RlTf#hJS2Ja~2p$J*k%jG9XoMyn0z@I9iP@6Pbx<Ggo@k zT+8%}Re<2@dLpAo9ks~Esg(@R)9)pnG)jeS@ySryT?k0$yU2PKC7dHwkULr3o55yA z71!%kOoQ1fBWWsqjKFl4DQoV2%=9d#?X1C_h^%2*#V{RuRe<E5AzayACt{^ezRlG? zFVA7Gy@WD&6iaWOgao;VAgBvja(VCDEdY7%AwiUnJ@V_`u|h`xaDy*%$zqtC1DZkV zex%Aj`W^Mql@|kKjU%J2jC-3DPC#4{DdY_Xsusjz2NU&TKXjuOS+X55o;-hxTv^}9 z(Hk~<I>LJK<ltpY_8h~fFj+f(3a*vOlHOj+kR+c;E+eJm*%%KXBCq3ZD>NEq<-Pj0 z$4KvasNJFPUBkAXdN?xmxgJ5ef5guY<jFl7;2VNdDB1mx`FJFsBJB`)N4@2>f@Ph` zvW{k1RZLazjw(ybJHsn1?@E9<67&hs5<y8or!z9(wN2jD0Oy57u2`AEEYiJzbZ<h; zD)vzKQBbg=28p2h4ncuMA_f;w4346AXxNXv3f?RcnTsego8Zk<_w119o_>B4U&1Et zQv(*ZqM+5}<#~Y378}gx?jr!cnwFRTu2+ThJ|w-KwCdjVcOdTyau${dvJe;3^`4ma z9gn2jxpS(l^<sa^Jw3ooTS#qUoZ9|4wJirw+u~DO_@7WKQ3pmjHkPOZqlBe%Kx!(r z`C6T@%(oko8cK)5{}Eclj+lhy3HLsfUzDwBbk1(Ql-m9}(wQkbVR<Wl=<Fe8xo?s< zAL!+Mke<$YS+DS|o6`Sq143EP<p>zyIhqcQ#Eq3Ly_B)yUp@S{H0?h>nfhO0tk^xq zirr(Z*geLI-D9lSJ;sXNW31Rc#){oztk^xqirr(Z*#Baz*onr9-D9lSJ;sXtuf~dP z4bf%J)VzydgUfismt6cBRP&Ww{2KJ;E8ALx|4Hg5fzZCsIJ?lW2`R%yZW0J7!$xir z2r0uxZW0J7!$xir2r0uxZW0J7!$xir2r0uxZW0J7!$xir2r0uxZW0K2hK<}L5b_Kg zxk(`888&j0K*-WdO#dc<kgZb%)J*~*&#;l31VWx+BR2_zJi|tA5(s&Qjoc&<@(dff zNg$M=bH-OU352qBnHJ?Hfskj|$V~zv&#;l31VWx+BR2_zJi|tA5(s&Qjoc&<@(dff zNg(7IHgc0ds9qms#%~e`c{d4!x>-rNNg#9sp}I*Rw1(AHHwlE|hRxT~<Gep#j1{u& z`i2d=QbG^)L(Aj0x$@eTaDsIbPOwhG3D!wC!8!>iSSR5G>m;0DorDvtlW>A{5>BvA z!U@(%IKevcZgZuT=HKQ@?BC`}?BC|9tdrD)`#8lq;iV`M?><gi4-xM^&PmETVLL?2 z9JFE|NxlNXX-6H^1wUc>zFv%41(=~_QtUEGB>EUllLmIExs}P}RAz&~Jrc$Gr^~6# z2KKa;$+Vf&x-1<do<6oYpoT4VZzO%a<}6r>2+}_k6HT@lE1idm8FJBz9CptNWZ<Z+ zkFTN`G6F%TAZaeI|GI{g)3r#j70sdLJqz><k#}G=pB2^*V<lfi)Rj7m<q?(whx{DI zx?%1pc#1R0Vc!0NV(Bolv<2jQEt$8>^9E{>^JS);M&6Cpk=}DOeLAB?A*xSb{OCuJ z%v^dS*}iupyoKL0;|yjjIv;Ee-K~zS=-qsaJ9h(uK18zI+W^cuO<e(+1&}uhDR;0| zMTa4XzDnl1VG#2zMNo{%IU<f@@>7xEZE21^K%W8SJ?MjX0C;(B-!B0EiX6xJbL2Ez z>#M(~0+*{m;}j$;^1?3b3Cn9im<655o9Y2IttPFdX3Dghw2rX!KU~;T=FfL!6eYUy zJMnWfoTCv{_<IA%7w8plBY-YtkWuN+$8Ll64d*d!Wm<ebJS^Lr5524Qxh-n6A<(+A zj?(SDj-}S|!?pjnsquhW@W6@EdzI^G&<^x1)q1ARo;Raz(Gn)04I0;8qH+&v98fG4 zulIQ#zeydG4$V<Vov$OK@M_8Gs5AY^>Zmj8kgSe6bGp<VrG}EDA)cc_pi)C#c&>6Z zNRAYyP2n)+a*ISSr=P7=C*pUe&TEqpJV4}Mi!9OfN+#jG?9mI5ZVhrpZvwa@Kq3X; z+?dT23~Lc0?<gY1Y>!B4R~%bu8{Si*{tObOmofL;Gs#%=c|`DX>gdimaUSG0cJea0 z-S7F<9`BAO@tq#==nq~#&E-yz-bh}w_bs`}U++Ew$upLC!IS~kuF+#A8biAKS)nli zj}jdIzF+uC^0tK8W+7~_P<w)fFY$s|GcdBmBgR^KIFz>deO1f97=A66s#;!#2v#B5 z?H81J5~J^yKFo)rWG(T0SxZ3uZV3YEyGgniLN*d)y9mw^5i%Z3x&jp1q4uhzhovOQ z858D_<(p8}IZ}ahxc1p$2=n=G%YQ5XWBDH{;LYaGpox0_>~Wvweqe>5P1;gq>yyf9 zH~Ohxfzl8BmbyU3bFy6bf#2?hmb8=#W=o+m`q+H2&#gi-H5zH3<WSyOL<V}*V@xAQ z0|?0CLV&(ZA&lJ$U+*O!s88;soeIGD%dz5&E%?A=?0lawu$D>IrjUnA5n3&*@nUmy zmOjOkpkk`v9UrKJfBK<kAiC%qz(>i*CjdJL-U0Y0K=c8me2(O!%%dcaPmT2>S<E9J z_(uzPDH?_C$Q~{5u|>5yiplqbV%koxm3h0RbfG>+3ClN#c#TqNf9SV0cP;hB%o;&h zjg-WD%GuV7@9QaPu~$+t2a?!_ssR0j>6~$RwF(ALtte0DLJ^LiyKe@FwjkyEQaR>P zmE+|G`YF`H_7D9w<S0;b=M+Y)Q-wySBXSR!od>|mYo-43#(r5Z^Y>?s#!`Q!WMie| zuZC=_hWu^a(*B5~vv=s_{_IfdPY1yZbZxiBai0(Hy>b6mf86&zp~BbV{B_WQU%l|Y zWuZp+13!21AHIm;t$Mr<V|Z&2@10!^_yJZ&FZ7GlyC1->{YQ8oCHOPIvjiJHRF5;Y zAm8o{q^$%D`P<}1W5|Ce*=!2?JMETfXdSd{wI6!w_}8hbj{aw0u4f(9E5B-PQ}z7+ z^H~q|=C9H7=C9XkM$enS=7Dein*ZsWzcg|GyS@2)ijnZ<?-@qIo4@2X{^l<||NhNi zt}Nqk{&s2!Z~pSrwDC88FE{=x-~6Sp#ozoTZ}B&OuQlS|#Ryb1<2OmZi@}a@4tyP$ zHTPZzCiGtiW*hjg1Is!G)5a)6^Iiu|CLz`(<!X(8w#9Ci&~<(&_k}mW<1*CyL<Xh6 z)38+DD5Cc!ZC`Hn?!I6x@>dRYz5B|HphY%{k5oA?r(MSFy2AU|j2M>E<u2kP6457S z>;N5ZexhJ@Zl>DBVNEjCE)HSVCJ>|x&a>q{O-swl(tK5V$x|i&i%DI*{`;tsd~L?6 z+pPIo71-D8YgHgYs{#pH6-dykK!R2U60|CipjCkctqLS)RUkpD0*P7`NYtu8qE-bg z{j9iF1#JDixK;%cwJMOPRe?mU3M6V(AW^FV8Tuu0tqNr8YvNiJNYtu8qE-bGwJMOP zRe?mU3M6V(AW^FV_4;i+T4h(X|EpF7Jgo|JpXF;+;D)o}S`}DxUR<jJajlvpTE$)! z{aKT!Rbzdvx-U_y9y~y+tb>~qw2C*2>LsM@i?H6kiCQ%ec0kD{rBqQ-s*?MZQl+KK zdb(_zT2C*@_>i&X?8*7iu}nG7U%^(n65gz@8CyxOx%#{%8KRJ}he2vPVtZZtk+R2m zp<KpuOxj9jen4FInvc|dA=w)~Qul>u+4Uc(D?qX*e59@i$)4xMWpDLUzW~4s?6Th= zZA&{~5PF{GE*s{Bpq5L8x7M<ebE)vwI>J1ESr}}{_l=6s2YTKcV2&<4I-f84(^=0L zd3z8<msDEdFGMw7s$yxE_lge_KY3P#|KYT&vj1n8_}?EU7A6i8UH_%S#P1V_iSz#t z4HJJf;?G}uMudeuBf`Rj5uxkfj0l6{BZ6G8LAK-9Zm=sQ^hQ6l+}Hh-Ju+4LGO2ez z#c_gq-}@=ibYF2&m7cKZRHY|`+IF#+W@g8w+{*E8!ty@<HyM8KZkmJ}WxT6zEZ%Nm zsM{^PYj6UVIduuS=G*?JyzOuEZGUqHL$x4Va3$-^AJf16CLA&+uf_i)UIJiFA=Hw1 z34nRzB#j(8p3d+t0CVOan3s0}n8$G^#k+GS*?L*?UIX#3*zqnT;bD`&6Y`dbUoXA; z5}gaBQ)X-WnL4r42&wO)kA^zeWsB%hdw-$G5{bG(r!P4wH-(-pkq0AR8p*8E)ypo^ z(x?8z3PJO<rAQs+A@@i1>j0M_rIt~H$eZEI7z@DL%rjO2Z071JSw2CPEPF!UeL|Vv zfp<D{iJs-6Gw7^dz2f8409hGaofGfDmpyaF|3G8!-2Xn~)c>pu{%2*NY5#6zz?&HL z-n@vB^nKaYyR&J>B(4XvXj*O#*8^$+kS?}J5zU%gp<WrAk+X(o#(%OB@Nd))uCe9n z4@=vWtNE%k!W;bjZ<l`KtB(0!raD%S>RA7xI@W=zV-!)V*H4!w{fnj@Fxv;}9@l(@ zviG(73S}oKl>Pmkn&v5#{R6R5DEmiZrBL=y#7d#;{lrS4?4OC1LfO9%D}}OuB~}V$ zYdSqjp=@0|N}+5+JW8Q#OJ5dODBG5su#`gCi3(*WDwLh5P<En1*@+5eXUKh5N}=p* z{ff9k*@+5eCn}Vks8DvILfMH5WhW|>ov2WDy?&h$pY3f=ckJ$EzV6sJEQ{-oy=Hk_ zckH<CbcpV-10D8j{5ma$vMVL@4nLH-vyqA<GT_Z=Rh*c+Zeqw6h)W$Le!>V(4H;d$ z3tbKk8C|>(9W?Hg-%|Odr4b#YaY?{nU*h%dn^32;S0&;OrEuwT0;G(|jMZ~8<j76A z%(AQJXFh~9y*^gconCtyGH20p-UVIEdL3Xt!LtDEO-L9+N`A#h>tzEyX7Wl>02=hY zh5@`muma#CCdyXV{jmYF)pdV_IR~Srbb)J)9RJeRz+a5qMugD?zRF419?Xl+lsmql zx>x7N)qO>UQg{DT#9!uV@qNPosN+{B?EW3NPk4Zi%f}GHJs(2|%f}GRgpVPF<zon* zj$1s%5WbLU0+vN}53g7Klc4TaF~XA;va2oLrR9v{!(;i>LGsQ)fI%ka-gJl}Z(>P< zsFZ%($+q}8&y;$BymLEc^f17%2tmpbFj;u=7A>;E**XG2PJ3^3qZ0;I!?^+?YdXKx zBdfCl83N8CjLEihV=IbuHlsg7&gH;iXI&-8IJG4p;QWG-GTGrv*C|dtD7(%rBO!>+ zFIA9CEjf1}BD&<-sucOCXvz)x0#wrFt8ytf>p5KOx%{YT%56F~-Yu6O6;1iGctS2e zDw=YK{u?~WE<Y-ovO$KLh|9q=<$k>n2xPe2`%l@dv)<XM{HSQkcAZVdkBX-9qoOHK zDZf#WpURJlrab4x=jW&LqoOG<dH%foR6Z9?dDZjh=BIK?AZ4fL&&f~aM@3V1dH(Et z(1zTeXLlQ{jJt3&M**XbA8>YiV@+(|Xh?s!cc7{4o5T}x-zkRYW`p0=Np^qh&(T6W z5%(E-ZZ$XwX1KQuh37W$WV_E4!gITL^4%xV{Pv%W{wSx=eHz_t|Jevba!TCan&DY1 zo(lJM^rXE`Jk{=57y;}%#8c-cvv=<_2J@YBcN#j@UT+MCr^OwP5!b%USPd;2>}F!A zZ{ICn32Jwfi!^?;W)@;bxLe!cxyP6a&uI4$a(%COI^B=R&I88p;F;)Nhla8@iDydc z@OF5%7+&8@OXYDNdz<I)JuUV1!SHYQ`~}lePllM<4}1RnX{nb$IP6C}f8I1Vh*g38 zsBkyKZGj%xj~OSUq*)?4_TvU6XQlfGsJ{J#H1H~D+X5MnY0W3|`>!eQ=$zk@pKJmC zht9Dw<)TptNZF_JvASDEDg0We&S~!EDe!zF5mtmBqDuKzJaU^N{zpS80i&DQ(owmT zpiwU}{v#ACB_tjTlW{qGVPhG5X_hE;Z2&_?y1ErFUEPY8u5QIkSGVG&t6TBX)vb8x z>Q=mTbt|4Dx8gZ+E1n~_;yLP8Jlk?WHiIKZrq~YdzKbE=S+pHob)YGWwu7r|hb-C- zuCg7nXgj#dcF3ab;40f8i?)NSY=<n`4z98tvS>TF%67=2?cgfg!DZXJp6%e$c5pr0 z!KLlsdbWd0+rhQ;NRYxw+rhPU-oD-B(sppY15GY%2iH5$<kEI<y-%aKv>n_uovW@9 zE^P-lU57Giqg>h!Zib!@Y8@_Z2RB=<4pMAsJGkDbQC!*%u4g;Av>jZ}c5vHe3Rbp* zOWVQqYzLRNgIgmb&m5PwgX<k=a%nrb^?E~)wnHx~G<7|aW^<h!n#LZ_<~lhvgYQCV zIib+x=h!b?5Qo&Qcv)N!hmK@-S(?R_aA+n;<kAdrugVlN#O-E#Wzh_AZy?mNXok3J z*m71D%@8+!HtJm(C{`rkO(ARnnL-%4)AmA#`=RApGS~abqs27y>=4^J0`YlDW>aIl zQX&7RCXz6;{2&G%ogkx`et@E8PEY_f&8!7LD?or?G)F0dpOHOC5N;-$09gQGg5qYr z@d8lS%#$GiZ2-vxV*yeKGIJ?i03RSEm7s4fryhV>fGEM>Tz=UYU<^Py!J)Z4(*!UZ zAd_GTKo-GY0eTU<0+3DcUM|131kej0m*69ml}Av5kbHuAfC2)((b$_{96%p}X#j-; za{-D7mICx8_&Y!`!K(lzQj1(3-2ynNo?mz+!CLtMxt4z!CX)(+seSqF2Y|;hHpd9| zW7w<$C>S|;m{!e@^D(;hBiM^Ut%hJ5=H*&~!!Zlg5lq75Tu<<9yQVb|d;vLXB={Dc z(nMgOrp*MY0R0K_0R|9M0<;kH2N+0jP_w#NB>!`i)k^RKz+eIs<7pd#3owKrXB2OC z04M=yC#VG&Mi4<G3@3O81P>x8K*$J!7{Ew^0RW>2MgVk3bpS>a%*^E{w*Y<zFqYsE zfN=!R19TF+1u&i<E2e1^2#Np>Ca4COC`ABFA{Y)ZnP5D?Aq3L^rVz{qm`bn+;822Y zP(F-cZLWM_UCX}@;BbN^^<3`)3`CzEL2xnpbOymh^y!fVj|0pk_zrz~ltgu4pdr}P z!q032Y(}ddLofwhIh&vpT{(wf>o`rDOE4WK**xJV#@qkNGwhG~1pP5_FCcgZhQM(I z<Ivr|BY0?#Y#nI%n*bIP+zr`SL~ti4FDCeX8};4P@?WZ<z5`q_nEDP-+{p-ltug95 zz!^o<cYqAe+ytcuQ{MslA547*xU>)T9pL2N)OUa*o2c&qV=Jle0Qr5X?*PXPqP_!s zSWbNh&|9hR0MkcM-vQprr@jN+H=g=#YR=z~SaW_Y;Vk)R9cRgZ4y3vJVjbtoS)DX@ z-=%%#d{IYpckB?FyWx78yZ>mTxw|7qbN7r6n!67c)7(7`29)cJ8OGn+t7-Heg^@Pm zyo=U|IyYkKNpt>zCQ5f6LN{eN{m~<t&fyU0Eax1UD!rWLn5(j#8^-e^&9|YfT;~cj za-IV{)$*Oru{@vH7r(uotI-R6oMTIPKsaXzztu1h4bs<n8g(yrw)Ejy;Wo5Psq+KI zgfizZ5S4OgSw4>qUx>!6bh^>nG3OD;Ta|NDCr=PBMos%Ux#Rf#m`d<j>-;jBhl%S@ zmwIOs>eb+6pze*%v?87>ZbDhj&H$9v-?@Aszsm3s%|)jMWes%Jpmu|tzoT}oPFD_3 z8&5&rHfJ{YAL1-PDMOuV&~JCHKx+(h2BAlWJNJUCgPfBO;u++=km`}n5w$#mY?bir zap43WI$nd)$2k3g$2y((9p@Y~f#;8x;di`q34SLyx8e6-=Ry2VbT*-Olbq-AJK6aN zzlS(Kck+mGI@)=va~3!}G{3BjGHhx2<+YSyfQ5yWVSt7XSyXBHgGR~Bi@|vqWf&l7 zBxM+2PJhZUz;j#{5o|1_3<F#|lrjwPU<YLw;I`hBVSu+ph5<50Q-%TFFQN<s95RYB z4Deka$}qt4k(6P8nxT|ofTxCY&H^Z_=bQy_-3ZQE07s7JoCUDAm2(!r^P@Ru0h~0L za~8l)Eu6Ce?ri0p1@KZW=PWYTpK}(#KMOf$0hILToCR>o0M1ze7xw3z1#oi-=PWW` z!8r@ygM&F|0rVZfIg5#l<tuGk{@(_1&SI`%oU;JVFXx;EFu9&{7C>tWugfLDL7cMy zb~kX&0(f#HyGhsbTk1W~Ej9+g;sOtRT)>V4*x#ES2QYUGI}V^tI*w7}*l_^g4<em_ zmjBIYW(T;al-U8wTA3Zdn#k+`m69D``$5bV)bgM1U@m~q8<`7WS2c41%-{wlWFh~q zDy9K&CNT}bmO`ch_+1q#1LRL4Wq{h=WDMZy4i*6L<~Y&`gRw%=0T|grIsiNSkq*G# zexw7?P)RxfKaM9IfSd}_0oYhhZUFu{oa6xd52j=S+~1p$3GiVtC6h%IQ8EEG@WC!p z<<A+((gCg-%hCbbYgjtK=;16KAhkbB2iQM~xg69&ItAd6cIE>3Be(KUNPf-;MgjB_ zMFUvI5t!hYTv-!o`76efAi%MWtPa3!4Xh5p)QPMPz|IM*4#2h|G72!GjAa8XFJVal zRl`{wfZ8T18o);rsb~Oe`^&zBmS0g#MN3AG!%?y1xoSPnr%a*aXo_2hgY!re_fM=& zj_50yp!b+L%QX8YS;g&x`q*o^D6|geVtl=%J&cRzm(GM?9OROhi)b;YF<kI7w)V^2 zX*8o5XYGVM*st6r0rzs>ilNH3w%;?cM02`|IWyf}$eHQ(V$Mdf@tlpmAIh1==*Ris z;tr0gZ=iiwrl&SgP0}6y!)VsU<@INq(|8rD{RNl5^4g!hm+N#b>k8IjAF-7+lVjUg zOv0stgl*+A{%bcq&eM0LSdut1`To08(!#m)^m@*v(ZQTccQtV?tsYE{U*q0@^GY7) z(!=sOm+~U&ursuj+;<$zx%A3h&ZW8BC~|oBTGZ+2&p9(BbLNx%IA@mi;hfobBInG% zbC7e68NxZUuAOt{hkZC_uH#E}PG&#Ong5J&&b)Cr=gi)foHH+OVH<5J<D3~C#yN9S zU(T6>M{x8?UWmrC%XHqr6|Jx<^+!-cx0CH%Em(8!0~xzbJeCW4P_u`KC*<aXQG2-l zH+Yg$H-Hy=q`&JFaermoj@H?b8SeGmCLSlAY<D?0vL}cq-~E~UK$FB%=w8n)nJMBa zK__r2W?MtK2#Zj3rt0-5s*hz)*Yh)xezs=MkY|!bk8m+{q)uTgx`4fQluEIH(t5NI zEIOZCDaYs(D^PtlgF6-WG<_Y?MHVkvs@b!3p1IaiYoQeOT%CPwg|e;G7g2=0K-DbC zwNiIdQjYU#nqsBSf*#wy^ZdzH>ZKgh7J7ciN?lLpmU#XoD^<2>mU{j$6#r-TL6_ba zoTMy8<4mzn(RqQKyAk7xeVSk`vhbKL&0ZlJepcj^+3=jDr}tt%lyKANY+dc84d>9Y zN^eTzURqync%A39`xfrZUEsBQHoNO0uid9{d*~9??k*X#FBMOP+ndQQ6Hj%7r)2Ca z#8c-kWz03=X>w1d=Q{DUxIa_&Z<P8CcHd(aZWgZF)dtnAI<LbR;hxR@xLx{hv@82w ze-h6aS2n%=ES|CM5Q@%P@r-kyqb#lyPp8X$Nc#@)jCW;Y>`w7aP`hI5WglW9`r1V+ zWmHSIbHSd>Hn#89??-zlbMMl=NA_e>{swt2v_IGRO0qkXo${q%%^l25z`f$J+~pj# z_K7Ft2H4zRi6`0JO<uniPsBY5N@#y8@|EG{U}U#{RBg|FGA3tn_I{nX?{etvho-F= zud-~RV+hvV2l%MUG<LCUWL=N{!JF{IcN}D7?X4v<yB#nXm$Dk&++r8YHmS>l&3375 zSbAHtWyUZ*h<2aHC}5Y1C*uB@tW=06-~EF1tCai|?v?b!j0dv0MRi?c+*6l&A?sJA zwj!<krql<i2G#!7WRp^ZI?tcmlp4ceXg7HNoTk)gsaB1iKf4K4WAV22P&R-0l29_M zVmBMaDa#u8)M<cW!nTeqI%%P150u?jbPh-KLE^F8`zT1Ql8WOvw|Z^sF_4TV+wDd> zylxJqaCl<ogAy~3@G>WlX9Y$YsqjTJ>@mg}%zOc7lyP3>WJ-Fcm-z!7p7BxyGB4nU z@&u!knX~OF#(Oz_`a`|ULg}!?%+n-Q$i0f{c(}wQyH`?Jr;8`zUd@;zjE{3@3ENh? z)b4ZnC3nf2C}uN^^MO;|htZZ{&ot)e`i0F(Wcz5Z<W|g1_A%lKxnDB>Y_H@l%FY~v zn_?0781~j&@kHHjw%|O2JB?{t^gMfkQGw2N4T!pZypbcr)tq@pYxW|eF^`*xUF^s% z*`}W6UdgfiBq?Nu`xG_nWbw>$r!(0yY5zIyb(}zcFER7oJ1MQFiRXBC2rF~Cc$T<B z={dt_K{+S79jwf9DQB5`3wOX*NV3!2gV=H_#k0~KLC=}SkUX^=UW5M`r5q$!4cq!n z8gzu<ui30iS>LmyC8PQFD&uC>_EN^5E6i$cFLw7I#AB&Co#!>_eOy(a?=|T+91Sl} zN~a|kQMWEM4&}q6KSAZQ?TZaQl#9r;^~Xdxxzy{ee{$|wEvZ88Y3!5Bgc`pH&OP^( zqq$*VUuneheKol{QPQvR=!Dre*Gej?$z4)c4pp}GyyzcC7~A3)6IQm*E5?aP>@>(m z!b~xK_Qh!YoI0AuPkAMWr{r7N0dE+i^JSiX$GD4+XJ*gW?A>x4sfgb>x8E~39Tc9z z@b?YQ@|=oy887kqnasX#OJUx;{DHADUx+(}i26`y7V}++zy$6=o2h8-62APU{3U!{ zEFiZcl<?)RzyxkiYsGw#BG4c?hQ)I<2;3u4qYC^S4U(gjX-lVqy|SlZ=GkNA<|6$h zBrE@YOah22q_@VJ(#p1V8iF#Y0%flNnFj~%<C=g!<)b<zU@P&s9$dLVGbaTkyQyB+ zw5>-;g&kYg3BfRDO0=GV5vihU?uiT#DxdU3R+0^KR)F?+j8l|{D;F-9<72JrVDi)z z&<DjSbp>Rgm)u>7i?SFr-`o`7tf8NZl;xZ`5Fll8+y|ym#5lc}TO=WC@u13I{d;I@ zkWbz;^D1QTchpg{J-=4AmKzREfRAGJ&q({@MhReJms8e(`An{o1BjjyV49k@dwUhs zqX8jP8{5IXtQ=J!8jR{&whPUnpRQ=<_wi|;o<RF_p{>;&ijh9_2e}g29E6k=WDx<1 z$J0<nW344UcOGNO3j#Pi2pwP+ENuZSZ9%~`?yzV!#%MAccS^Wcbrd?ocsrmc75bFk z4hW@-+9ZO?Tz)PLbmJX`)B6gR5@<&G_}KC|R;BHh#;Dm37Gs4>_<?GVTIKt~Yn`&E zxrR-3M242exkz<{3-&Fr^zG|dVi*xgSS}?*9F`FK6*jezCgHWQL%Cy+DV~@#MwUaO z?1g3cpTS|I>{^U;#x)Ts@^yrkzYvoE!JL4+$QVs4<2r>YwjLI-^}`od$HP&`+bm>k z9%YG*HZ~~z#9cB~$k?D1!m$=u>U9KLbX-vC#VgBw+&H2KPp^(+kv(I4kds$z73oZn z@Yp*gJ$S>|9^Aq6h7%Q@#7ayGs<x5_ouY`&<=eMYgPf_rdpYL?bz`i)qsSjp>Jo;O zIvG-8uS3Udb(O4EwwL2;n@PFVe~ssAOUTux2BP{Spfcut`gqj5U)PCCf%$;7A8mN^ zJ|-z)R`Wh4D4~^Z-p^6Fgl4&UKby24TfuyQLV{M8A+3U27Jsos!TySj<#}NVkRhaN z>1<*(q;+ZLy`m$P9DWpxeTV7M$LZy9TpN209cgY>5nF0GrdV9fpu{0)CbLMDczCg2 zVv&?sK4z3)>Ea2*eZA7_HM7Jky`cwo^}snkRD6^q@K=(^Q?-hij%nBI=kxSK5yvi< zBZ+>0v8PT5kl~E->_wJSo_);afd08lO^MA!Ir^6pUK=|ari1>K%cBRNeL0iuR<!jJ zpZ4wq+Pf2Idzh-Kzvpu3sXS5BKX9pnT3H9X@=a6PuByZz@ZU70?PThBQwdAiOpfW# zsgzUWDW6j*c>)SprQFR{390^AQR4SUC_w^3(g#}EOWd|QJS-_cF7cJ~@UY;80|X0w z84ad~dlYX*SQL+ICgVsIK6mL-&6p{~YSo}~tVB>UITTc{YR8oGwoEzUQh&-3zt-?1 z+QCw%V@z(qRLB(%n|0#y$<-1`E2RACfr7^}Tj`xboa^Y)5eTR{my+1ekjsEX?ckyE z#L~tA*NR~ks~Ho=wUw}M%qB5L(H!T}g!s;&Vwn$=dQFS~?tWD)AW{u{a(^Va(d5*j zr=qdTX;mX2uHnEkUeTroCizM<`^|!CD^CGlF9SsEHki5QU8>`>;wBIX3{>_{nQ#Ay zU)etcY3V5YXQ0?WWiOyPj0Z&n^oz^<9(>S};Wc$A@K%fA!WOVnEzQ`bltw1U?P?OV zt;>-xgA1{$u2KrTtv^kY@^;%-HjfKQO@Y~{<vhLu{F^YMaT=ee=5-DFs^;~13G@2A z1e;;L*bG|Pi`;SjREg@5%(c5x0+_O5-Xg*i;>7k?BqpMze=bRCMd<W>mJ+&m4o1vR z5`(`+1~PXOvo%SmZLyT9Olt7UrhY$ZpMS7;h!t}?OfsjG{#BDoALDA@!!%?t2v_}% zYw4d2^VM=+P<}SJZ>m+T=6L_9Vg4A8`BY*kLZ2!TstR%$RbZM`6`p>=BWb9gz!bSy z4!4H-sA;9@96lc~Omk#~Pt`D0d80^cuVF5T$Lx)lx7RE02d*9*)BIz+JSU+%N6OR6 zKIS~SD=6J@VWn?`><Wqza!HOv%6M>5JMdd-;+9GLEfvm{p7FNKpK8o_JJ>Teyeov& zn6X<;#4>U3PMnB8Oqhs25<)eL!Aa~12%GVR$|cs#mx60%ReB;}e5E4ACi*(afz}^~ zl0r(qJa6w%Pr^PSNr<{%$!+3;l@Y&>b)VNoKVkWWy(NxwOZk!!@pR=}>KPN2MaY#N zFq@&0i#lVnq-oyMj8P8~LHdxLZ}Yg{98h7hH{@y=-=mPSOlYBgYLeIuO^B>GhTdw? zpJ5V}FH^>Yl*JoUq?1lYx^nKUB7ohgQr?)tl;ukpep8BY%|#usY*Ut<k7cGFc7(zc zaSCClheFs93df<F^(3c<LXtxYF@EwwPj%D~bP`t!-za`&)*vM<6$H>!QIx+);O$$* zTlFBpLix->;O|ms`=~MHyA+No7^d`}<=vT>l>LjOsNn;u*drza43`YVGL1N{jqOPi zk8t^9NU$2*Yi|AD%=aksRghiB6}idgk%APLTk2ZPk8!Hy2~^7ysg@^DE%&L`SNr)Y z6Y^Ci=BrG|SLx?l5YJbYkgqB+UsXcBDnH-N@qGOf^7Tv1*DoPoKR@3a@qD!j`DzpM z)h6Vt_47sh`T6P-^3^Bit53*R@8=s6&)1lcuQ4%SV?w@0Ki`@0e9Z~@niKOiC**7P z^KFUe8<3E1Kw`cD3Hb*2`S!*04NS;4Ffrf2gnR@2d_2UU^0g-9Yfa48nvk#6%U7%N zv?b(eOU%=jkf+Vdqg6e^O|qzIuB!1ThNuksYGO(ECYJTwXDT(#2WtGOp)_G?C{37( z%Do(mF^1{+x@q#*7f(FHLsP7r3lm@(P!+JO0L9>mox<^=P<bk8_IVx>JAu=0xvq1u zRsL9i@yNW)1H-^#)kq-~Qiz(PW3n+3TY@=8uaZ6cm=s<ug{y&HuhruNy<R5|i)wBI z%a!t?af_5#xdfdfk3MLX>4U_`jL~q?Tjc?bR`Y7D8jB|A%8r}w!`jN@G<}i^Jw?+e z>%a46nTyEz5%PG88D|I^HA!`11?s2C6Oh_UJ}lCgt3u!vrY_V6)cNIK<V9hsU<O9W ze37aSL3a55-?XxCCSdM4NBUiN>iv2999QOTnQzaLu}jQ1<6Kwv$7Fs!SB+^hFP^7X zKF2ixpD)B>6Y}GjR^tVdy8qEIB8<aQYj&y{8JD=#(lI{rn!tF~B{Q){I9<P`h@g>; zw_P?e%wSCMpSnX;C2cE;v>ANnSN2{jr|=}1QTX&$8MR+0$+G0NA%Z2GqoMIl5_i|j zKkO}7s@ZpR94ph~J0TVu&nkZ};VAGd7Rb%xvY%<%{8O!iPH6B8{HM1L8ZB5>t<tWa z%GyT}-XodVHlN92Cw4SfO`i+ypF&e%LQ-vP4)-?psRVzl?ZGqp_h9L!ufjcM`PX6D zvy!g)CM;cZ0r~t^mSnZD@3^xPmCD4H({xHp;-i#U39bJ0B$`gOF)`X|l7^)#Nh+HK zZ8L6GHBE2yYkIS)so5f!R8&oGO{nQ@@tWQqR`#0EUKb|q*q=KDle1VRYjTIGNj`UD z?hK1C4Mcgy`h*(ZrD`b5-z~**NzezrtJHTbejn%Xs*tQ`7OF@Imj=69Y&j*%9-h|{ z$Ep_BhGeZOtXwCA(fNEnP<1y(HRB%<{i#Nu_CF#*`{;uN^I1XpLm29fj}_))17InK zPYpb*m36XiKbfq9nS%kfLfY&n!Kwy7nXG|YhwV3exckLyl%A3n(bQ55{IRjiZb7xo zG3rZ7vq(wSv||z$nqw3tE@RcL{gsR7&C|?IZ!4gcI}jbpHrq`C+)_Y*V7_h*ENeO0 z`WT%eYrN~L1(TZE+8CW8TN`4VjS<_dd_a+44z{s6j<uaBYN)@Cd%iPMWOoDA;PZk3 z4-Q7yC+bD(kF8LDa?^b#EW;Kl_LCrsUD(8r*=35KEG=fd6!}SzMec%sAcoI9G8+C4 znlorO=EP$qxIxpC<mx9L6Kj<UIMUNU!LJQo@=tZuu_V+bVc7sOIN%7Z;`C@L8|V=) zk>33*i<Tv4G?i<|fk@jTGfFg-%gFKY50tI$^i;Mp<Fx^|P-YfNEq8;|E~(|~D8EJe zf1zx79#2xY^@*pvh<;i4ERyBRdidL(EsOh&)mq!sssyh!P^4ywY<xb0)UAB~#yCON zV!zQZda+cJ_i5olW=w9aGKwsdz*87F8i504k+obFSr0JqJO<9`Lg1N_at8uiUt-R) zgxM$>YiR6KE5rtB_r5pS&MyK!#Q&3wlSFv60hw%y?ULsaBtJ!3^@0I@Q*4)}C;_#W znpW|%v}*?XP4Te!w+!@~;$gojT13y4_ai2krg=nd4nuPW9=`w!ug9cDC&J$<E&aGK z5=KeGdhLlbZ+@*$Y)5;lFGLOhhI97QqIT_j)CJ*scM=+)MYbfKmR*J6pm7klC7zaT ziAAlxoIE326Zf`yEv-K%$$y|<HYJpQJoI45PHA~=TkMk3W({VOjo_ZiO(=M_6ns1i z9vMZ@a>R}-0Jwvo0^m!4QBB;|Xk+IF;2Q?t74Qw>dlSbX>!=9`xd$Oy$41cPMVQ*? zPoY%iMJzJ%ng0#2JT&4M8B{K!&Y_9NtSF|>6ShGWp!fqQj&0=Qs?|Kq!n4L>2Sdor zE0{fi`i`3cid+wU!K8(Qx$DKH9ghKb&O_WKpCht!oR0>d_nG>N?$|=;qPdp#S2fdK z;iu3tXx$F@2SyXKMV`-XMAV7G^yw&dyzG9q$a0%HB3q>`0gvs$dyyDJht?{)!fmp0 z=iWqT@N>U_0UOY9rX{rN5c-+W&V|$*B(yD|JsFu=gt#TdZye&OzG;j9Gx#TP6L>yI zv<JAg8TbzTjqHsu2bwuD4WJUBa|KddC$<0Tb9KwS;x0?L>tGW5i#T`7auHQxv%3lr z`h{@kLZHUWmVb#&+m1CaDU^hqc~J8<dE8fO&yt1+wI0M><8qs?;7uRuP32~VkR7-{ zGb?RYVi{s4aQAr>O5$~TX0^Q)4KZ>w!mef|_+`}x$l>fSyh;pOf^_dt$E0=Yg-~NV zlH80W{|{qd0%vpe{{Ok#xMo9$tRotXeVs8gX2vof%UomZT!tC@nl+SdND-2;glr>1 zvWF}!N-MGpQAvq!8<mO_|M&Yj=iIsK+wc4Ldb#s{&Uwyrp0l6xe9jWpi0S<LN0rXD zVyBN67DuPHFJLfnC4_K5b!7Pd3ZyyXTV$rIl(X=4w|B6lcN`m-RL@dk$F(6pp)96t zt}<fRnn_yhxr*KnI({Y;8<xP%9)n^9vF*N_!s-_fx$78HyCrDSu2VUnUzJ{(pBmds zJf|4VpJ4C6`MB#meO$TAr?kGrSTAr!UJpG*Yku)@U1XdSNQw?Z{zh_gWkWuQ{BOMr zx$pXn6*{XaU%!Qd+^*SycHpl$7k1??nbL8D<+?%($7=AT?YW_zu51dvjwq<_nT(zA z>Bv+Gb*d>7RS=BZrFGT&$?biENCwFMiF$dEY{l+iC3r}V)~0}ohu|E`qmjtQlIDjT zy6v}>M3$CyhbwpClmvcnbCr?h%Pq)AkW?$Wd$T~+3;hFWNw=c=V(yzD2`?*F{ac_r zNuECJVARai&fF{J8tXU@rQ$zC(mB?2Vy=vFsBD=xr4h2_F$eQyEE-Gv4FDd<Y&5RV zW0va~VcS6uK22T)9x>(lZEB9hna+7<#?NkV96Vif9ZS%2rPhU85gQ;HAcde5zz_i6 z0I<H#9PGmV3gbcX0HbT3;{*dXfEz!Vrp5s5B`6PYlmTah^%Dk6$_P;nYk?@>#H=`- zvU>gI_Ku(uFFVR6X<2bCw5+Zzv@CA)^gaHYmgOt{yKZYrpJBhM7tCF6IkJt6)kel{ zBjYe-Jo&4Zk@hE0A%Mq|WbW=dD0*4G1Zez)aCE%s_T~U=Nm80mkOl3%7P<i`G6riP zv@E3HgCy;t-V*6T4`0!rbtR0?1523{U5YgWr5Jwz?jI$aa%(OgGg@*E2al(dO}Vwm zFSpx2tLvX#tsEK2y4;Sm)aCYNOI>ab)Ii@Kzvy!7%6#%5L8X~bX%5MwTCH>*HEpHy zs0#x<bW`V%%H7j9)!m`44vx2yb?(kKAy=A^`x)|k6Vi9$7n6%cfRH5XdnSeE4p#%o zAK!z&=uRgs0!6{ueZdr+gS~{~dMmQ^0o%7=^KJdbwC7vDnfA=(e#4af_FRO^{c|#D z%|IO~Eqz!6bUck^dUdW4S92U2dL#<TXgG7^6+zBVC0s*vE(vV?&I^Uu`dficTLEFf z)-J@Az+T#Uy%2lpJ@E8x|6TXf>1`qJFHk(o>5M3R7u=~m;C2{nNp!Rag8CJdJqDm? z8is<Rx6}l|o(h+AIX__eo`Vq1bh>>8zz)lQ6@Z<7r6w{*bB;xNyC5hBK22M(!)qem zWip11fZsHW$-mgd%r2LOF!>`8N8H}(LbE?w54zEq;Ug^P3Zef4I&G2GYF!gOCv&b9 zu?2k4?nQVq*R8Ifp&L66suc5aQ%I@{HK7z(Qg6Yd9l;L({TS$5u>Gb+v$O<G{35N} zZf{dju{Qq1iEZfPNZN*`GQdOdzQ=-p*nnyV)Hfhe11n<$*Gpv!W!yH;i4JONmL_Ej zaTT?hGG}T2ZfgLTF;;BHD6mwQqTdF`;u3fl0ymcVYjs)Yu*!(6>axs1l}UaJ%+wp1 z@5yzCR77sYrm>|?mFdrMc%PE$R}%euGntx9m2Z1jeR_EZnv215ZP3t|k&XUP%PiM+ zPkD?Pl9~P6=*)bgjn2%u0E)kx;osqDYxp-B{x=Q(N%AM=f!76f5=wEPddkDj<VW}< ze9B4f(=ySDK;ub>j1JHhNPoaDx-(?PmrQzPa)9nYn&u7HOb>JT8PMHj`a9dh`ER)I z&>yO0_`WsZwgH9jXi(mO@pp8g<`^)`faf*fu{9QoPb%s*xaLZ6O*L5zA7=4#XcG5l z(*Wm(q`9pLG&>qv1>26~3OZd)y)u$dL)b1=oX*i;i5`Vwa_E`a!RBVcA1|}Z%AdCg zcvcp<2_jeR@@g#ZR_tZuuj80}_|5p!?Ojcy!t&Q`qv|oK4N+JG#eLdBI2kONbXLs( zO|w+vi6|7uagSN+ZEPeYW1QNS3n>OaDc*}n_pKSAzX086_z=r+N~ZHwGmvmm__PE^ zMNX=MekoxS?W$)b$Y}5+G_4b$-vFJ?9NvjUWPsUGDC8(67O5NIR<<3$N`N{9^8uQ- z<6zIeZa1ht?O1AQ^Zvs08K9nRmUu;_I~faa|0;O0kwn;P`I+nE(ix?YqThJ+?FR?f zHp%AzSQshthCzT!dOu$S&E@Z|1!mf&Z~U9Q(T20iUBx-WHYJ}T?~4XFQ|@ZcC7N@) z=6vk$GC$LtDC~zg*=rGE-E(_KN&T#b0*a&Q8m?T9JcDHWO5M}7yP^RJ1~fOIy#d_~ z=xe~xd#3AivdPVN<-j3DqT_5yEe__pIE3wDbT62IYYccTAmKI==4jzO0EaQsXAN&@ zYH156Yw4HmWD4YHC5wrO_MiqE>KRaJd6vi90HSUq>V(Ct_*rth$pLuA4@7OaP7kr( z_mL}1PQk<XK0>iUSiUnrqKog>d#Ydc71U0?Y6dhhpo;+`40zmtX$H(P;CBNGJ2a?Z zKvfN_j4POLI};11z~Q3gVN@$KY9<!usCf_iCOnD}!<i(8&2k-RJp=pWU{45v!p<h* z(W-+PPMa3yF6<o8@j1wWKai&hvKcV7FzxaS;Ne?qRM})y@x5i7P8;x<0sk>f=v+`_ z&X1*YiE?_pgGA{mt!RZAO%HyZUq>Aq!j}`NgoTXygf!`sjN0$iQU@C_(P_l@$U$c@ z4`iCi-Nad5E}RN>M5|f>;An5Zj6cmflKFk0OJMFV%zuD6^DFYS%RGxeA%F09RWP=% z<F_-y+I$T6S%LznWp7hjY#WSF&bHywZMr<(PetgZ)_Q#pAG5yyDNPuap~KzSfmY|t z2v?n?xAB!ng2?d3vZo;<Tut~2C&(_<_Tp=GLIEv70lnQ?^_9*};nG*aJ?%qifX>(2 z(%Q^}28m`Z;OV;r&p%|6x)F$t-*-;~D|spq^NroaW70{Dwt6!4(pmN3Zs^)>kG888 zKvGg`z{wA}y(*N`KUNR!K+XW$RAHM<w)Jot54O}-0oDN6ZvkAPwj;pFE?``m_AcC6 z2dLGV)m3|EF+k!ZP#8=t`*ToDJG0oW#C>q&7ZLk796O0)kDmcA!QC%9d`#J{@|HD- zvI_w$qU>M5z*(Spoi$$HDG8U6$`p@BPl(!~dr18SPWRxO8CF3`GqZ&Jb!S$TzuweZ z_-l6o!@Vfh8~&~e#&!Z2`h&r40kD;z1HgHLUI4!XWDNnx;-Vvc62f$Y3cTpcnNeUP z=caSv7S=TwyZ}%QAc<`DI#8`Z**gFR5WESnjNlN!ryS9g<S!ukI3>3$;BKP@THS&H zB}V}y9XFDbx@pM+yJ^WAx@pN*yHRrD@DPtT3&5U^6cj-A+w%Y(0r2O+ix%`oZSn_0 z)-WsiZS8ZPE6Sh)YJ5}ys3~Qz05hP>zRI|fIYR!rvnJwi)(rm4=g&&~#9xEDBf*?X zrVfZYm7x{_B+<)em@`z3;c9jVVAzQS41cD(Ugw`e)P=nmlFqq36vtI$$sU$kMaC0w z6`2m;`w6VFij;u0y&i8B20Z9aG64sffOAa1JO=#Ss{_hvHw_fqkn5&f0_`+`J^|>( zK)${v08*2JIBcHO`3c@OkC_(A1j`1nXv5=aPCZx4yyXU5x5|9(FV5FKX)8YLi5g{^ zk#n_7MZ0C1Wyoro7QP0$u^7%*hp?AH{;LVm8WDUpQw_9h)f}=XrfbiT`K1tkOmyZp zm&x2Z3EC9C30G3!yI$z5p4wQMP|)M;$_)=2LIy%JF;<>~rx+`L2k><OhcZ@<2j3fD zYP+8^z5_a%jD%F~U3y!z2=9duKOh9FkpEDq$IIHo%OCP5LgT=4Bh(CGokCSF=&u{* zk@?!UZG+})?%ZwiQAGY)zU(mFcdi1EWqoW}_T8nVqs@b3u2k7s?R3t<heJREs1+w$ zaZAY<(22D4`lY2`e+;zh_Dkz-U-#f;MR2h!ZLfBg6ZSOFF-15HP;^`Qa9ciHXNY9% zX(+P+8Ro1Q{&t4W*y&k1V_(c-HiemtJpjIOP+1K%)kNk6uq3cNoz=tnRjOe&mU5x& z3&Pd($yp=3J15em;g${0)XGtcD<32S%q6G?@FGB>32djqWj9^A!-XFa?5=P*0~fn5 zz%SWS(|rrW)v)Ee5w6PA7aCzo?%i-b7pN1V3!?|O%BO&OM@nHf=0TaC=#JyE>Nqlg zl)v7rKiF+}u%gT=%%9TyiRMpT{KTI_j`TzDRI(T84Z!eq2q>^!Z+-(}E2Nl_plpiT zNkDPVJ^&P1gMebw2q=1LAKm6#M0%8kYm~be+q|^*gMD--@iTxgGcwTT6L$b-FrShk zq+nlWAwYcq-|<M(?t5_Oe&IqM?>>te@GDa=7EUd|mN~7W%89uZRZa}9$N`GKtAerp z0)D3;K;jYzs>>+X!(~2Wda01EGFI$@#)zSjm>7=3b&Ev!W(V`Btx+N3m-?C>rcojG zFegB(Z)*wSe-Cuqi{ww##)_^9KO^;y#)UqDcdLG2kFF#%y~lt~Yf#wZMT58Ibg=Yy zxppFJK0GadY520-cXkMB@@kpZ&QZH3Q|NrGrRAGkSl5{l_q$*%rjFq;lGu0IoutS< z=NxbqlD=~v#{Xv0`K5Tc9bi9Vi<3>qDIRWga`rcUrwZArKfl5<<xOSnJO^~b7*rNV zGx4uIfM5AXSdQjuLv^2_qYX~zj~|WuflZxaP;@$vL3|9YZm`en;HkvP)wgh)3&vF5 z^|+7Vqyg^(d;^d~{_NkR<U9I*)0uRxWALI=Mqrai<5DdD_eB)jz5kOfx&H%-Eq_ru zHkgIm=at@!wn{<h-O=-n(R<)Pt@px#T5kc=`v5=^`2%`CpcPuwDM%q#Zu6kR4FTm% zDP#G)TC2DJH*a#z|3?bCFa;%`KpEEbPM);RIt9O*6od`ZDJTcfiz!Gn{3Zp-^@;>y za^<!R$yZ6ud?b>FMbu=#(b==jL{evvjwIDY(kBp!;SWU8@n0huC!OkZ517HL4CZK# z7+IOkV;)E&ZrjBe6k}xLf54y^<Ix7i1gZGdrQ(l;9-X9N)DSt&+=2dIAnO=fRkbcE zPjd&VJhl8`MU_wL-+g?gi<(ZH=VGEjEfj4Wn7L;5ucW%JQS#R<w*Fp4)%4$0%>4?a z$-F6VknTs{8KnEsPXK(wi|T$fEeD97gE-?(rL_N$k>dXxq;158#Z|&BX39c?EoG*x zNI)}X>|n{pPDOQR7#qfqrxRr(zyT&uMxRQU7{|$>or!X2r!zvu$w8`#a&TuX=*DuG zYLd_xlp66o)f73@@#0_(`E?EXm5_Z6S!sy2tKKT6Mo-sV_j)c0sPLX4THzx@w8EE$ zSbByURovqpNS#)?FLl+Kc5{f%w6LK%(;flvwJaVywaoxElL6Pdi*(Zg+k>qa1F9M7 zL=(VQv6#x4ZkGU9oK|$HD1?1hEJ}`j-L#1k4uO-A!1<?M=ZcB4vU~=g8)8nq&XXx# z%q|+I6jootb7eXjQ;AW`mnhWMQP&zd?jl=9U28)E2S!~lg{Tc$vDY!#a^3MT$UJCY z*TsS>fk|~65qw9wdQ?31x&DqvE$7{hMd3d^y4V_v&VOnvWw<)5dshzY#tdx+d{1If zpYbjEj6ZRx`cCJNWIP9|3r`B~gc4O*oM9pJxqeB5+m@lhpbNlxfJDP;_kqg~aIuF2 zgbic5(h5E3@p5JVi(gx^T!kfH%EP-W?Io4LP?!-F4N0Yqq%l0iYSIoM(fDT3Zju}e zYKpQBsBJcu)ti;OCET~MN|Xpm?FPCpWwZg9N6-Xd8$knr<HNX41+U!?)Qw@(wi};o z1(*Qv7{LsHl>qU_!FZLcvW0NDNv}MB8p8oL0SpC5r%hsB36J*{6?i}7U9hLp46$!` zFrb;@B0zGzk{&PZGSVgXP+elzke+08KITT1O)sgctgm-TRb`V8lvD;kHH&~xSEM)W zM}Ws4R4l%apaA!p_-2&UQ_<ISAXfQrx%s2Js`AhDFjc;LP?hhls=U;f9)W7!GpK6! z3aZ*!!Bu;BP}Lq0qK?1Bo<ee5ho!O|ha&MZb7|evROiF@SLeg`SLY+9I=2;lj;d4X zomCA!7F2_edsu_Zj8HXLS?N+o=o)+z@s?%9y5Q-UsVi>Z5y5~p_&I<?!zwj+%?MqC zcaLCF;tPjj*_LT)?<I-;5WIS`_O^Wp6A3W5zVb-z{bhu%y$_7!lp)mA++Givnv3O} zJGlO`jgN<K3Z-20q^5wbi@>S%0R|FO0hmc~WU+mqHh{7_1H4Yq8{i5+d=~sm^`!Q2 z88nJD8esk?R+*U(=_<4SAzfwGm(o?{Tq#{;yrlzGCU!$2N?@myd0{wzZLt8YUS=`5 zQ|iwCQKY%SZ>Ma(xj>rR{GGdmE`X^-8#%nRD@1>WQP$ws)b^gydcbz>2~h*KFMcM{ z@Eg+5c5^Bm-ZCp|-$W?E0ob<;fOXinp|n|k-7IZp5qqG$bE2$Ntuh$5r5C-BZN6kr z3^!l0Wd%GjU<Hlgs&!Jp3VJ&wh}2flNyZAQHcU<l=Z4AlffVF~>lDNk;6C1|5?Jks zoEFaggHM6AVI$6qW`v9N%LxTHgbJ@S%Th+KEu(`0tzRDlB#}+5U#>BhvVPSdp!I7g z0j*!JjFH-U9IPjh-~`#5K3mkd2(N_jG66aook;vGFn*4B+jc>#a&9&&_V}nU%UYJD zZMxgVraK4x{zu9x%j}daWt|-zF2;yWQ$mz|cC;JI-*UQcH7Td96D`Z@LXu5wH{qND z`Ode)4>QT!)V2}AWmDT*0KNyx>zRyibU9tlGs<ZZ@m&#g1Jc&EDMUM$7?l&=rfp!U z6u=h{l2EKwfcB2nQO|_>BN+9Ha64N^U1zM0x-F-D>&oh={nK?)M`hn<e_5_JrH)kw zX?Jekln~4R8F*>UTBLa0xf`Yge}@YXv3%c^)dqt*WpzrD+m$tD?!QYP9W34QEiA9A zcJ%HlP=0G+CdyH*x7h{0RX($*3o5p%edMyIRpDAO$qe<Hx>7-QVC*T(D{wHk<w@>5 zNKch1;<vOX%!AWNWJTr%J;_~OiEDBGt_sHXPW;XTqkRBiFF@9jO5E>@{I$;meFdl9 zY<2~rP{*0;!wROl5k=i`oDjmJJ;C<?BLLE7fepi^^*OB;v~ethYj#-xM}}{Al(s4O z>PM+QjOz0|^$pPPT2y~pABg(^PFpGW6hO`K0AB!11+c#Z_yHjPLnzZ9%)RK<i;TS( zEQ#(}-x*~8#<u=AfFl}<C;;E;3Lb9>6?a!22k!zJ3t7u`(ADb|idn@VRxCFKIoB0p zvpE2kN|L*k`<l;U>k4tJa^mB9i4J-c=sBR9iB)aAYydy;xZ2X=e7O+!5H)=Qn)BYq zFvv-ejs1rUaf<g2Jd*1??C~-;@|TQ{86}s%3(eeezFH_)$><-Tr0XZySLayQ*PH|R zN%rkk{;P7pv-0tD!Q7@BBb)htk<ENDh0=g;s^d_yDeqU=XeB4nf0HX#cq$!hhCkH- zDA~yOm+&Kx4s)r|)F~!mXgIF`^XTLtvwyIuQ|}*aBO7DYwO#C`<@kG3r|O5j3FAB< zn~U#nPv})hOhu13lEu=-S)-q&Rv}#{SZWnAlz^*{8~`jPP`2B^UxhQ54bJ}LZveMN zWQzg#hM+t@WKBd3_!z7Yvj(K4R8mWwXAwd+LAh$nJqkt1)(W27dt}9@K<>Q(D6yT? zd#@-O4VL&3@Hj?~ce!okeeu{hQ8u$#t`D5dzK=krv)a4_aeJts)77#+)X9Kbzexbi z0iGp@1K13ZL^itzsKcP_fdIb{i~%S!86XFs=VX3N0b}-@zRbmz_7ePE16N;xM?7k$ z7`H`&W558WE_)oNXHK35JOU=}o>WxPDKfnEHFPHEq+8+aoUvYaU3S)&Li2T!YVeg@ z`Gn{a(%ZoIYe{n39J7V<ij$@9%<Zgpczz=fhAhlse2DOxM6e@A7xBg_9@%8&`q^1{ zfG*;DIl738PSr(R89?#3ud1uWEoX}1Z!uN#cQ^dQ$)8p!#v_}ndJIrg%I~DIO{bsl zWEGP?BGv+HC5nB(m1o4RHDX^gVvhj$ii5QdYmPszs%oq64G6LchR~v4r;Lmjm=yX> zR@GfiQppJR1D5L{If`>>s&3XjtLVO`?0tQY6<-_te+@*Kp~F#Z{Unzor=g;K!uF@= zk)RvN1yPEAX_`*Z_Gpi{Jf$vkjvS~HRNzUSpi)oj1l0oYy&tU;ByFfoWsf%lF}o%@ z*CAjpwjpUh&7Rclr#}OYs;t|O1R^z%fhIe@7^oZG<4@{<yG+1y3^>OGOuqO?eph$j zRuayoMeICq<WTG;XTw2S>~}_N<>^{%YXINIM~pt)fcPsSS;Bxxt|<)24TzawOQNG} zK%6k$QX3GL0wg|IMSt?;2E^0TCI9{FD=PhH{0aKXGsWoWk3?(ce#D&t2Ft&Y^%HI% z=DYcFVmv{6uP+bMdo?{)>?CkHOUca#WJ;HX)ssU5A9>_%g<q$e@uifUWr=?Zv>dN1 zCHE@uS+>S=Qb3n3pq5%zLIj7EvckUqDf8LBoJ8b(8dc~mvX__O^+311K>nx#=0gu_ z&^joz4cX<aP+;R=U4z;^t!q%fr*#c_{ApIz55f215c8p@lEgdrX?`DtM}nJk(yHS4 z9wT>i-W(%z@fpaoV%60Asn8HB$e8NR-Kl4za+1jMH2@nw#Q0ZeetU?XrER+JpizE6 zDUtn}d(?mDHZwrsJ)wCQ-=|6bBvJHuy}H>Vl2#IsU%*EUHEB<hWHp?@4+`)^`C4s< zny+k4#IqwjyU@<iqPjA*pgXNe8w{-mQ)UDM+8M~6JfM2O&Y%^ibyMsNN-Haw((apu z-mkWmTqD2``1}}1d~OEn=`%WEzN6L6JheMk$<DVUWNvX_m^nNAc7)g(3Mo%HgI$gD z)ORA}o{!oU1(RQ$4t-b77*^#P<UKhR$b+Kqi`1%v189grF=gW*-~)yEb>I161m8r8 zk#*ij5%Ss4$r?N|Qs3HfJR)GWaGr?BzryWg1ZP$?dq9<#5?spNmH4fikJ2TcE02gs zIhkEEC*TsLTx!KMtpO@FQsTbKMP;1ANpz1Ft{87pK5iQwz!pFIkU93bYH&O)ORwX| z*Iwal<1dUgZTz%+$Xz%??~Vgalf=#$W-0oKtbAO#-%rL6<~%D)zCkl(^O>gh%+&MC zbF!#SdIoiI5r%E&d5N?yX&%FIei}~AO3wl<J53Zlm-KU7PhJrIE2OJ3g%^b`JKL1V zXA)fkZ<KX@9!`_M$M8#N$Vu`SLRUw>mXKB>K>tYkNNj-a@hqAHcSt%f$$HO~dt-8f zRGmw*dOrmJ1gSn>hO_#(=YoG1tx1=|nVBxs{f7r&!f91^ejVOqI0i%s{Y^MC)aoNa zuZC|V5pE@r(|IlY0LUarYIuWnrcy-0t2Obrcm(GqJ>j0t9=CiA48xdNIPZm*<|1|v z+&+P4>L!5d&jI8COe0tb@D)H3`R#YvyypQN2k;SG0O&<<1>gw5b$|o80Ji~t1IYFa zV`~1KY!?BTG#|xO7NBQ63<CQrD{Wd*n?n&zXoUI@ZnwbIn?1Af47ux+UO8-m?v<k! z=w6wuG$DbhFcM=&Lw0?5+I0aI5hSs3E=1aSL(#!nSlBVPPa@_pwjbg4Hat@=1N^}6 zCGiK~eTBBPYy`9xVeUdT(;KQCPtL-TqGH2E`eTRjFe<iMq*d&>NUKOz3O)zHNi=+o zhTu^~@KS^?LBSQ3;GIUW@i2lvFoG`{!8^6!TM*oQ6ta4%WcBhX+0PDBHOO8Ha06`i zOLTc2U^~Er0O`CYDX9)t1ceZJ$H)(8vYQ6CIC!Rx1?UFQn_n&rS4f0QzFJHp2ftbf zE5BTj6<s|=t^jjerl(Wn1JJ1#MT)q^&+E_jhQo;4^}PNFBBB;6QJgPULmeqXQH>+( zP*nb$(P!1w7Mq%N^%guy&tOosnVx}>i%04795U(o%%sO~83jTX>+~El>G@2Q5ChBv zFlSKYpvVs>k_MR43_t@+BLLs^y4nEKh2?40Q``KU!y=1}*7do|VqK=j)0FAp#kx$V zEY@X8R{ZkLtd;fDS4rpjh%`!i0BKl2z7T+Q0EvdfE(e#r`5}uoPzych7ZFdHkmpRu z?-<f>NXWY?ByZGe)Id$qoi`#jF=S7;m0beR9-z(=!`7;STAMh3jyPr5nj5yRWQ!k< zJZn3KTiS=|oath;x))JxjLw-MOLWc{Pm?o~m*|{Xutet!S;5R!Jke<Bh?Ew*eu-|u z`-Mkho7F(Ks{)ZrO>9R^Y{t{X_N9sKHxt`YC5g->(GV+8()SS`Q4#}$F4Y0bE!6?) zEv0t6$Lt&Mr;`72L~0ypd#R4qc!aoJBBYxU@~9E=B!zJ4P|r-fWGB)cbc6F)2Mb5E zV2{n6NY8_{7k480O4Zc$Px{m0ptg~>Zba^5I^E}%>i*Ptnsk3>G_YRK8k`di;*W!= z;8<gRjg<*Xu@`jpx()3bGl4xLzJ5$suap;b_38wWXgH*L4Sqq=RI8RYCmw+(KVbT{ zH_+g^29__phW?1uLnq4Dx|W`*Wf?HtfMo{suCG55JQ}NA#v8EIfNcicFd!sOhl-9< zlR#g?IPEn_ds(th;2^87n30D<4g_fZTu6w!1P16HysNNwBaiox#fc9sgsJV}^bFFU zIhYfsTr0C@G|iFxT@{S&v0OgBKx+rUX@GRz_1gu~_#M&tuDdJ6rNQlIc=qZ8klF=5 zC6{q@28%r$R5eic1c3F+nCHp9Mt`%hxpFN`kbCexLo43nT`ZcOf#}Q&TEVOG*KPlT zzr~hwaSq`J896!X!zGn0Edi3~l|@EGRRQAkks2KdZ_dku>l%sVA`P4C;nW==GheN$ zVtY&ex-$>UUvK8}s$#9JDwf-PY@fyNA_UC-3c%w!P%y+RAJspC{Fcn1PM${@0lV{$ zsUy4dD+KJ$Zv*&#h&NjpDkUh3!AC}=h!y{$lA}v6#xFmKCRi4g2~xz@3?3;zN+tg- zUe_R3f^NY*csE@}g4&kvSl;1r#5n^_H4$g(D*&Sz`KlPEmA|Vp7YOF>D*HA3?g2v= zc6;Lz)JJ7Uv9MMY!>;d>6}s!QRx<t}U`eAYJ$RvA9w<Jj=~({l6tJCvQ&F&`ehKg> zK<4cjNo%SH6Wyb9D8d<UZg}PoqQeiOPY|}t!v8WD?aBZ@uR><Ng*ebzSZAS8RvcXI z=J+X_#|oAOZLib)eY&5-Ph+~L#U-jRVNbyCF8z4F-(&QXSy~qS#~0>)naH|N=!9<0 z(+NEgVA}+?C1k4-+0C$>GHl;SOqX;_k1?hZjA<f%Zi{x?5cCDO+Z*5%u^M0}Ks5kg z?Z(=6pVq#y60n;B8bV9EDSle5re8npcanaO((eiUOkHjCdlvp5Qoov!w~c-$R%`vf z4zQgD+cmOPkBpk2*?u={p)WF~up|{zBK)(~F{T~(DJy;tYd@Ncvp%QaxA+<Mq7mO3 z{+vcR>PAj6;<vx3#lIV1n+dimMI<xV8Md>A&ArC3T>x7O*=k3AY}iV!(QMTMY$cOD z-mD^0f;SCYl3^P{wlsgT(!20P=>1>~=>0H$rUXPxga3Gns2>?SQHwZeM0^rp+XJ>G zMI`rn8n*u!wg=ZTraL;OCm2&YWAfuCW~~uXJ_Vy9MKp|DZAA25t3^B}BD$q05pPh$ z(-biuKQjX&ro#U?MZ`sZZA5G^BK8N^c7g4N%Du2jn(e4zyAxph4Q$>Aq~g>yY=vIZ zY>6)!wzwvkO+Fxzb~9`lhHVnr(ndGY^&kFOZ&L3=_{j~3SO)(%iinR~ZbZCfMC=K$ zod;WnVmoNq4jZ;x5>xS}DyA<O({GH)iM40=IwPV1{0CA*Vr0l<Eh1{27Ev$2HVAAp z6<ZC%W*fHAWQ)&(cPjj{Vi1Ad5I-{l!OtK#-_UX-MGiH=mzm&O0&JnpJl=DPZGmBX z+pzr@U`qqrjR&OZ>@#f6^_s2Ldc!scY&5E({(NcJni;kc0k)697FAR#w0DYTn{L>) zlg(EO-BlM(N!SDSCfIENI}-t?4Pe6-Fw=kw2C(@Fm}bBp16bJwOf_Ja0lyi*iX~vN z0p|^1F$x%Dz!?LWsRGgrm}9`l8d$NsO2}c$UEqbAd%Q1;9eCR`v&q?(+r!^OX2i+$ zsdgmq#EIMhdTJEt7LmLHV-#uGU)fUV`Jfx~RWH!$n1x&R>o{6Ps{K0N1i64UEt1b} zT>^K4T*BH$&Yzcm87mb&IpRo<RG;ix%GWVRMkEbVJ?XuTk++k}%AL8s1ldpAUQ+Q4 zygPHs<yaS4*!Fm(sE;9OaV+X_k-y~VqTc<oF6xf}tS)jHWva3rIC3Iu@XN~zxLqV$ zF2HqwM8jdf3>W7{i!E&i+-Mj&j35bqYBEnWsjyLRf8Cm@_QgAvMsB58ZhuXIr)+=i zNWkr{qc@uEuZBOc{q<1l-*@xMnKm&fgD-i*fA@FPh623$_ExG|%sD1R-h=|ZhQKY+ zIA)Ej$z=HYHP_ScX&U$s0C0X(dzv=??lk6K*?Ak@lXDR6!1WK-3bdW}-<0r`wbkUy zUkQK*|A$U9)?&+_tle_*-F(Arvs^GC^EB7GAg;Z(*<i~XKM#P~>}K_?IRjZ*7)~>h zrI}S~sd;3XTAViVcU3U9>*MzX810l=>gsme2QcIn&X-VSDnXdt4K9=E)eoTWCV0(* z*PSO(Mq_Kyv~zKiJq_T@CVmkWm*bPN7YjH&Nj_>swm?tFD%i|1g&&gSvWCr;TJF^( z;Bv3&X4XaCGcvcOTGBgg#~$+Yo{=tO<2@ro33$)Q6ae3Hu&VoEcvtF%mU>5bOUE?^ zya2a_<Ua<mpWq<CF-GJY(^7ql^vwns_M;Jz*FvqZ9rYdA)3u1NjfjF<w1_fWSXaSX zfDPg*T<XB3D_?yvu8t^2>MYPb;NjZ|$MK8<ZRQ-}L)UEmKAk(;kWcoj_!&-#^cqZw zZ^2~`T<nhk&QdgW`>Un;bm8da5WSpRwO$prYQ5?MB!;(A8e~x~(aE?Nomzp-SEN-y zCur3f)DUzrzdwywKS8Vm!DC+rm;jKr9^ULL2EaQzthOrm>=LzgDYMkba*3rp*U|ea zv^17lFP2y@mX_~uD^pVP1sc=?)aY5q{HJu4cwwuq5?i+FD)G)%Q!J-isdFNZ=Nvbm z(#3MtBtLAMPJR?Xl2uF>Ndr*5nf&h&n64)Iec|EzDL?sA>1wn_(`O9x9W|cTm2Ubr zUFnu?)0J)$gT}QEu5>A_^-^e|BlBsk+S}W-YS)Zve{N%?i)pRvTH>JA>LXV6PrAt@ z&VWk{UH;T<M>2}8k(55gvHxkEQAM`vjCy3d&ZtJ)jW!#=Uy%G$9p4#k(zk1EMsL^J z%pkunuXSL%f|z9923?Z*l;=<dV&Zwz#Pd1Bp^r*4y$`Rv9RcdB44&yT!Pgf~5AHzk zGorTYeJ0jct607y9`Xl&R|R8xCVn#zz+MRO96(kcfV~MnpMmPP8z4RodcDg2=pd-H zR{=f-SOQ?B^AVdDphQ>jINyr=5BtFVaJvKF)U5!eccNa<*Z!aa*H%nK(g@P$sXu7@ z3cx;sp8$RWNayo1Wqcm*JWBmMvNqH96Wj{z0=NQDaTg16s888Z?Y|H(7EZn?aCuVI ztmwZuOdL}8x`#buwwxUblPzbm&FqkRH%Pv+9S)OEd4;M4u)2`+<1o4Om7nsChRFq= z^1#tC397#Kosc+UWGCXOFq(>Lsq0nGs<(*bJLx(77Li=<dL>NmrWLE&H|kv?zVYY0 z8m9IbS+RWO%lU{1&PexolM1kmr#@@8f<6*vwu15<K9GEekDH7Nl@n4;V7!gj^RrmA zCc_)cg{_7x+;~BQAhMX+C>kv~J9A5_jiOZ~`R#U@uX9zy)YrM!rzG4?0bh)SUIPDw zKN<z-uSrW5E4uA&(1*$e=&G-Q=1v=DHOYy|q@@_DOV+pBgD_GQ)x-1|*n|!(@wY}8 zzp72yV>Xi24CCj{??B6F_h4I(cLVE8|FB`Rbc^k@SGT0c_Ue|jXfJCn8_a(2^JQ4) zoUp^Q;rk@qUL)H$fJgQL3;}qQpclOWlE`mA2ddzHfMo#v3DyBT2avsECiP9pepCLc ztp$wd7UMY`=9#Vay0BmCb$!3q%k?_+iZ6`G<pD6+hasROob0mzO#$Lt!fOz{zJ|*X zdffn6P4Fkc+W@}UcG|w$p`G5uI=!9Viuyr2ZH)3imf`Vo)8UNSdWv;pvf4;+b8?8~ zdp<*-<oyDGvzpzr^+)vSfsg3yKHRzAll@=^vy-_^M`N#!&w{FL`7u<sZPu4!`v&?Y z#9@Z*Y#_D3^9DC&u+}sbx+G~{j_8aPy4oAMSiPM*-W<-kn}(%AW-n%+WL+9KdNJ#K zmB1o5P5Ewj)J7ZmZc`7+<uPdcuqg;C-)(v!lzg`t4d83n!EBuUF<qHSm(ICwQ^6F= z*AeB%-Q&KoZMCi1k)e-9yV|QAwCCpNtXvqhgI4y%TE1%SRd9dH_9}+If@9FR-nG3J zy}7-fe16wn?O&+$EV<jcatnu8{#qTBh$hbliSXoxhtw%!`R8^}%Jh5o-<A1X7ng5! zNB!|^ZYQ(*!Oafon0h~F>0Hxg9#ik<$WtH6Q$6)@%q>rS$a5ga<*6yPllQpdktaZo zt9O=oKgkI<?<Y~c>M6JMs)NuX)FV9XU(d+<bv60rTJ3x|CxK%QHv~Sf@Iv{HuOGbX z$L{R1TlJZ`&;3h1<s*IBU3uHC<}(y1SLqgzGZr<UfP>sH?=0kbMTHf)B|S!zkkOj7 zqVKV*YM`F;DfygEPXqNDiga@g)C(vQOk>HehCwf*Gz@wfrJ;HmMY_~Dk*i)wY2;BU zlU9@H;cJ%|48CL6*GHW$L|Oe1!olE|g%}KYeh@yy91Ntm`gmAe91P_7y*_g97Y74* zy|1rm!NH(z6(QA1S)U8&FGpDxpj~v54Lk$%{ZlDwvyUPV!@I2{W1z>}P{0fsBpI^$ zP2RIb?!lg4C8~@Bc`I;;#QZC~6Pj`3$54s7#ant>8rj(+7qK}fdCJbyjl35dxioNf zEur7=%=UB!kJ$OwLx9-%UniiQ{{(<<cxP?rkKcn3FM~UwUkij>AW8TJEdDEgkCz`k zR?X9`Wv$*QHBWD=LhI>Co4@#2zKT7}X#ftyOAx^&_AHw{S=@&3Dcn2<0FDAYM(_?m z@wWkX1LP8H1aQ0quo7S-!F+)807(>OUjfzXAZJ1V3kdE2ya5m&^&lpn^Wl<=%6oxc zX#m;pa#(<upPMaa!R0nwlK<*#c0Q?Vvf{JAvX?A9z*6Ep^qfb#dA#U~t>tu`0N2TI z^<C(uy8h${|NRmYt?ud`8G9IbbIDr;E^}qB<=@j;jVEVvgSVW?SzQ0*ZfX#@m8-Ux zjmvQajUil7Cs*>T;C~BhCFMYEI}8!7Lxgq-fFlGI0ls*THbD4y<nE5za4G&iN`}2w zOjnQhL-;s<au;IBT!C9Bc&45Q7)S6iz*2&@0rnE?0{DtxBS7Q_+)4i+R|udS8TMau zIe*oaa7b5W;&it1T$ryb;m8kkC4Bk=T?v-~_@3x$J~r*{u0Dm{VG)L+3)w>d)7{PC zfSz6ThtAnu^+`|5@93(^px%P}_QC0U#^n%la*3|_HxA|c?%TV!M2=wOb<sN`kU4xA z^bye4m^sgRQn}-05!~LU(kB4ge+cj%z$}8j0EY-R1KcH84G{kkw>h$4J_9utRGNh% zMrUFjV^RDF*Q+0~^a_{Y#02CYAL*=XhV+Ir>wfn{EYw+7@sQ5CxI;SY+5o668g0Q} z8&aIk5aI1@c*hyuSpdE+-2>M<SiT#bbWXPHtihJ9dO$r0z&pOiF3fN6mcPC32G#|+ z{$Jg|SicrG+pomE7c9=VrMn(q9lE>lH8r500gv?vT$*ruA)j(~^BpRVPy^KwnQn{B z;5#trh|IvCBQhHE4K|Idj2VtTSf89Z%+7sSVfA!pj|b~mRu1CqO4-Xda(_!@IIUtX zCIkEdkeOD;k~L!&`RmTCSBL9F{;sn7;J5W*EDwhRq~C?kry#B+i{@@<OUg@z#sk5T zS`T0oL1lo@BLJlVst^<cXbF%wK2u+Elm?gnNAxr=7p?;-a%|!H6v+`_I>T`k*hIjQ z-~fPcN2ZzX&B|0w$agq1F!{`ZkUUCYk}iV37gLeSgxxrzlU(Ryoe8x+W=De%SxltO z1onValkSkmTVzwz<@k(iFVf7Fq!m4#YZJeElV#gtQ&xWUCX2ki;#Y64gftFd{ZwSA zJij4}r%d%+$>&J{tY#%WLut;ADMX$uaj#hek;L$hJ!hX#MyMbAbB<6?xyUmxBSU%j zT#P&eGfJL;i5Z9lI7h2!E;P%>l`02t&6yNki8kNKp>^C8t)7(ItXLnX7F)z8Mjn6J z8Y<6avhwam&|-XiJepr_ok!%3J4cBnNcg)|#DN;A%6lZJ@+zz<=}`$(D`q~46G3Oa zP8Q~?@hFWMD3VJkjcc+9PFRkDTLP!2P)eC=rIPY@RWP=<;deV2?AHOlBlr;D9>Gc0 z1<Z;1e$LX*_ITrYXGxvqwA!%-{DPl;@VD;)EF=i4i}8k_1VG|3jz9oY0J3TU#2-ia z$xGp!2x>k3TLPRV=m=mP2hT0=Jg}5E{M2Rh%JBJm>m#9~d+Uk+)4g@~FtU$XsD<@b zv;Epj)ofp%xX76z)BOwZ<zc$^!M<j)&qam*cW|&c#{3(HuR$NZ=_Z}s!WTW!rD103 z3<)jCd_D!YSg4=+0l+f^`vKkqNFtm41*m(V?C$`Yp8)tBU^;;db>k2~Rv`d&VH$*I zm6ST&fcu2z!foftVDJLKmjFp*lOv-KowC%C(Pjj10!$+~6s3v=gHKj3k2iv?liOyZ z5ZBvau##p{LQRmT$sZ3;^fZ7C(1M^nzyyMx09OdO3$N=LP8bpNGfJBPmmlEbo06rb zI{uvi?3>?xLFK2q$>lMtCp#GKs824F9q2a9@@@_X;-qtsn)M7M+Kcd0@)Lm70DS@E zI;aQx>g`k?h4x>DE~|8urEY+F?~`DV3=n<RQddFQXL*)G2b8OzM$@HPUu71RtDsiE zMXrK+|E#py^!<qSd2rldQG6D97LlcX4Y%u*%Kd>w&H)?&s0ENjHv0ysHlWg;?dS2< zfRrN$W&Z`&EV$YQQN>0B_%`%26Pg`;&1py9(|uL9>A&7r<(_l-zvP}Tsh|EDGzOqy ziYRO)uj%=>gEQ{jTa!7t`LLfkI{g?sx*xo9Vjqt0%0Rb#g}!SDKKugs^f_~o@dqz^ z>IUaQhq7DzQ9?d@Uf(t3ydjSy-2|N==Dwfg0i_2%rF{mB84#Qx??c^{fVDq02B~{; zsd@KLjs40hXpZ@QoG2vMee=oQq;7!T_9?r8{;EIlFYK>UTWW>LCCm3pf89rX(qB(L ziVRR(_KM)V95==CRT!XKw7<;&)jy03<}qhHklp@~1621g|6dq<3kMj}z$`B1ddfj} zN4=G1#OoO%rU7{@s%MBi79|~gFLh1wmUzMW*3|3}8U0FeJ={A)J$;QKEksRPF0_X8 zqv~=JS<DX)p)pd710zDzQ+9GNd{&5Fna3_g?mN}PAbCuTi{*YV&y;f|(eLV~yfv=8 z(A2TO1#?0uT0*wIV9b-1CBmEw#(Y^tBKih&TS-e*bE3bqyk^!Vq|;!JR}4)j5qlLX zQzzsavPTR}4KG^C(9{vY_wxX=L6i0Jm4O~_2Kifs^oF{rC*U@g{O<uQA=nGBk6<&v zMSvvo+n<5D3(EcvK;_Q>eg)_ZkTj6~+yRzD=Wu|R2}%N-1xPD32=xI9tXT!uN^t!Z zuE|Mo<prNXb6;HrT)8PBJ?|j{LwKIMBD$1xzLGWv0cKM5$3tpS_1bW2^*KOCfFT4e z0dfcu0bV4i1aRPU_RG{U3)E#$_E3OAU!W%L8l+Z<mGWdQQ-EuoifW}e+E^Q3=k)sa zAhqB@n9l~PWn-JXVC9XS%cU88?FR)`Kw@Z^GguoDl0%kJeX%A&2bpI22{_Gs6u`H7 zu%2f6%OI`}Td@|uFD`wFm$aoSgB8bD_jAZm_<XGf4c24)D+ataSU0i$<DiJEj<m4R ztIc!wb$FV%#^^Dl068nHF|^;KfUK64LLasa<TeRcUG9>o#Frmkb=g{K$n_+3Y0?=W z2Yu^P_`sM7U}zvMDEdLJA4;i3$F9|;S(j3a4xU&BW|OG$D3NNWyzbpup|A|UR&*)$ zyy^*h$EX*Lgi3Cakkm{tm8tB)63Y3A*a=l<P}!aTo?aEX^eKkV2RN%L6W$_DLSqz` zcLb{`EZ+^PyX6bY2aLRi$d9STxM~WIJTpvXs9dd>lQbY^s}LnQ)b!RiL-o|~j8bsg zDIK}v<csFDx}Dzq*Xnl4aG}nB?GnZqITZAomv(KwH|N|V?`7zR>pqcD0HQ}S%?a|D zpX1>*Msz~Ke9;N=*q};OV_~dSby)Uz%b61Nf?^Z>bbNFngmW%c&)zRzV`MCKQHILY zW%7Vt%sI4L=W<tmMk-uY9=%v00%GQ|OJC_?5@L3-J+D$&ddfT(-vm^THvZ_cs?|Xc z;p|q}u{#iJH>o66?5|8?D>)B;0Co9%aq1Sb#aJg>IgNGlm5xHP7SlQz+DS;N<;?ZQ z?V)dLA*Z74#kHs&puYy)cx?Fq?aVC}C$`Pja@5*=iRVGtU8gyfakGpZwg;)cWkspZ zzK!UZamftw=}xwcLtmn^Pvn5qR)lxE40>JV0Q~{!N4Y%85OEE@0xk8ros;!$4e7U7 z8`_KiNziRQ%##ih-j%y)a)J~=N1-Qw4gPG(?<Dk>pc{?uZ8<xOxTGt(LUj>oZB<q~ zTbGs((~}eU_Nz0~Nwf7Gur@+*W;xmJ%YK7VK#J=**Z9Xh-p(7i>N@Y-@dQRFj)>KV zdb}H0%uhQX;wHCtXztkvlxhQvAxHpNNKhMK6Tu?@M+iy*d`D0Sp!8MfNl|tWP%S~( z0{{jB47yuE#dHncu7pTN)CAqsUihUp1UN!a4d8o%C;<00fZ_m;5U@{c4q*9yfE2!m zf>DRv;WNW9z_O)2=X{h>m&0uUL(Btsf?ztpQh>yl!P*7k?DcSY{~C=0!?Z2v@-TDp zW;(mO%_BVCmK6Gk>&cA}@j2W+rL2<xi~j@gK0v~^NH5v!Z$TaXj(en5vplv<ww>rO zoZrJM5?~)eDS+{a!j1+wPf!=2IcBwX5<tv#1aJK!w~Zg?{&l{#c@=7GqZ)PGL)IhG zpW*fm_)@<Ch`#~wDZp%iB(m9eL48f?8mTaJ3MGHS5EMF6%?W$0S7wVbR){PYzn{eA zqObKxJu!sLlBiD)ZsZaHnsob#O9X(u0O{iZmXGpy$FnJoba#Fk(dWT!$j<-^0d^70 z1Q_%SR3MwZ3DjGl>^%T?0n+(!ETtT$lsCOmlrk4?b#DfPX#o8JlE`Mi0Lu9*vS(dg z=I+kP_6~r~a7nra|Lix!dCz3~BY@}OY@Y$xN$@4WX9Pb0+#$FPQ0X@S4>D`iZyce= zsX4~%4fic24onKUZ<?`o5*E&r#;L5_upu}r-MJg+S#`Wx;~l)uQzp!hkJq#K72}nF ztAFFc1byFlJ(>S_yq?Urcw8|Td-)&CnUCieS``e|&B0=GzxGNbDf#<xft3*h!KKP1 zkN5pymRb!kR2L3uzdz>j(s1RR;(iALdR>QGudncvXngEDpkDt?yY!?Bk8E6F4i*E5 z{2jtOjrDjFmh1V=o=GxQ6kTQ0A5t`Pq&frPFF#swUVHf;+?M|Z#PB|rHQ^hzXPz#C z@SZ#dL)*V^#aO)n^k1E%Rxv5}ahv^sC^p{e;~eL<{PB~O+#Y|EJ1*Qxu9l;gIzibR z5I~a=1)$n;ke<gxa9$MeI<X0rv>x25Bl$^mw39*Ex9~p=pgTbqfY%B70EFBI7!ELj zU;@Aifb1D-RMqXbV2z%JW{=S)(_VKyjNV+`_40?FhCcg;o`$Xl@Qoj%r=jUnP?t%K zr+RO?<}u*waN9}#Z2%t-tOdA8ums>b!5mI6?&t$(%g5*wcs~@DSWDc|u~xgIV@<vz zHHWb!Oi<s6oS(V=FtK%ncQ3{!F%7t*W14VB$29kj-qq9<f#;RUk7=uk>7a?}ti<GB zi!A5;dSy20lG`vzH!1xA%C~c*o-dy>;F1Bw$LP*INdx~I09>RF*mPf&ky>c^PL9#d zuDY&=PY1DC{@e*F@Qa&*YYPj{@@<%)<2+-)D-$(%)qrOv1q{&}kiw#yjjf=bJc#@Q zQtUrGTE%Q_4vIPXo5z)Fz{N_7g48D{ic)xGkn;~Gh9#@!pNJ_3p1c6b>cY9;p^562 zY3F<w_h+WQ%$f!^|4Df8ahIW+^E(RPRio}r4XpU%(Dud6=0j;anJ`XgJjc<l_}Lpn z$fG)|Cyr22`)`d@!aoWY{?y|-hgSjcA)Kp0zWz70K7R%WS(;-k4VO7$+*Ou_o?FZn z40qLak8%yjU9l)so`deec~4mpWP<0A`#xw<aLUCK@^ZY>T|nN_j(&%2pq^Lca-pVX zvGszU(yr&tw_wy)&u2><^}YGeoj3I6FIr+nn0l)`PWaX33>puh%tl_$qhn-fix+n_ zr=I1l6?2TU$YzRJHY_yv%1sVp=TG&jH_PQ=^Y)5Kj2|5o?v9C)v!i<0TOKg+$|^_} z5}m#3`EV=tFY0qt*+-DW4|+K{@4VC4M~;ep<kX+WK5|U#BfpTATsS87kD`BJf-O0J zJVZY+t7gzA#hlaUFJn$QB@xX5ogf)^S_&r*bUGIVg{ER&$nM}$$hd8&p|#-l4LnmT z0u;RqPy(RNT~2J+LndrtTq$-7{A~+YyB)xz09|+-w&hfHg^@F~fS=NM9CjUr@Hp&y z0KVQ+&2@ayQ}rIG%~SREs9&b5%T=HnD_Nmw9<K#moxg_c*Z~;};C6+=W&l*U2QUF( zGy%5@Z@tIeuHd&<f%*=V{R-1yIV}4%fGmQ80EYpxkEwKIUBKUdSGQ<$IHQazE7hX; zc1u~ot2i7%;01s#07+yMbNF+h#2kK%fadT>r$d>;+W>I0CRkS@1@;ZZlS9ux0d^C3 zQRz#%ATEpIih~*t%H|H{tpqgy9BzO{0F4Qn19S(F+gtWcSJ#X>r+KeYU*5$s7oPcm zx3{bTNIp9~aC?h0w_{5F-7RwOivQ}9$~1F#J6YPfbN}SGity>m4pn=H?g1BS1Bx;0 z<V`WwsGE~%jq;^V*BjOPPgh-br~8A-P1(8A)zC7;_~r1UFB3x*7ARL|&~4?IHU;j8 z@jWrqe2({(o2h%umuH#|KK;2WmbL6D407bZ8WN9&mC7$)N0}V~a1r1t!Eu0s9)LXn z4GA^@bS20GcoHCqqU>v+o(E;$1bB<U!iv%n0{;#4j{p@9%6<r71VCEY(;j)_dDN@$ z9s$?i={*skcmb41eR%UCCNu9<SC}V`hI1zBjU5BVj$pJK0?Y-7KY(~%rmz-p*+#Dp z0Cxebw6qx>FXot5Nu<}#hI3`F!}1TCq4M<1tGZZkuvlkk*W0hEN$F^>@zXbNV!E+v zMnF5M4EaMpwM;HD<9_AaYbJdUJBp<0Q@VXWZouxDW;}_+^u;k;Zsc)nhQgJ3Hw+vu z(FQZxDOj!!<ok?{5puB(SKy9O5j5$<@IG*jF|;^FM{r$kMV~^NT*F*+c6?2-Vy+t| zkFV9LI=p{>%k`MDx$t$<v2q6*rlwhl^#F96z=)R*+KmdsM+sArfvJ-K)(|`c@Ebtp zqWaR?W^R_h?##XN*PHbo{`Oj3UvI$v8uG3oFCA?n2Jf=e2J8n5I@AX2CICtFl?~Xv z3bL0-%XvoaoL&j`?2{t2WAd|b{HA_Tt9AY2XrH3ry0f}))Yu7@Y0SuO5xuDT6u3RZ zm_`GvBp3j&9U#%L+Oy&E9bD|^0g8nJyvXqfpeu_bYnF!{ljWEYk@_a+KJZ8!F-tvv zWgmviScW+Zu!CWk;C1lE*lD?Dx+JlmhU&!r!NA5>5?nIOVd+YeFxz}BI#v<!-4R=V z3LNLihPtAAEcHewd{_snBV?SjxX>)rKBTAD7aASDH6h%=>+KwWg|H6n0u^teiwk+p zlA9zQ3k&cnMA^&!4k9TDKe+wLY~x<`N)ZmVmpu-^@|~Woug#0E4aQ9r(x<NFC@xp1 zrI$yv$#Xp3t`t(HK)2U8%)u><LTUqy14yE;-4aw@1e+_so(L)KK66xYzi4!OIA6E^ z@Ebv~4;NVSn%3>Q(ajl2-Nw(+y7?Z-)hGDkXClaD@VC9h)^w(TIuqA1`N?NJUe@a1 zu3zd<b53XH%vHA^TF7hl=Exy=&$qb5b7qb{D0n2-lvF57YPTH7I}XPeSW%Y0!;+Gc z*&Qj(4WU)Z?T%#0jfpfRwL6j}wHI_F?yq$05lMGJcS0`gjg;2gzUvaqv99In(;lx! zroI8XQz7KRc7TBdF9A#dNd6@^KYc;(c*w1#R`gj6Z;sar@*JKcWv}U9UMnd5i#+!5 zT0uVcp!%BE3R2t3qUoN3)U<Nb48hb=Y{kH|70cYyv9BPHMXF~^_Ddu&6KrZ+@TkPj zC6=RHn8g0kJ`;PnFvhN)GA$QI2`ct-VfnF_4`b{q#`0l|F=ks7t6DhAHAaq2mJQF9 z8EzBuhx5o}%-|H@D7hso=4Rb|JgaOz9>K5`6s{hhkL93dMY(Y+<^bmDj!NN@qGc!( z$0KsHS4=r99URfZ)9^fb5+fRRVvUH85EK7-B$A1)xn&<E(q};U2}-#Vn~#e#<iPOH z$#Vwdsbi2}v4uMZ%XMQhuh4yniuDkF9Yd97FJSC<43k`_71NSg@=o{xsll~k<j`fo z2+_JkE#Oc!G*|_~JW4mY7^H|*jD;Z$`A6ee-ipp;Mn0qV5WTYBl*BWkf+fdig)ZkB zL~?v~D095B<no+Q*=#N8eKvF(`6az`1;@O`u+N9`6GTi>bO6_qmcJoXuC(3GoP9Zz zy+F(grhTK}S}`lCf%qVlX^c4(gl{pj4`oY`#Z5n!?EgV@#hAy{>apJDxg0fLH&rdq z#j3^;^F<l^st&dsYZT((x>jIAH`Df^t5(c>&Tlrl<XX8>RQeT#qlh;t97nv_rLLQc zE<uehtG0IIbu+Fj2UYVg7tF8umkZ|C{I7!A-B$(kYyMZ#)>QktqS_bF_iN0ge4{?f z@LPq(Re6i7aj)Mj;2v|Ged^VMtT_#*LJh~@&{{EDDB2g=T2c`E9+p^+!(Iv>G2i1o zghF*JUyQaKC+Z*eQvJE;b<_h%hrR4NwiGg*-C-}25mLlqHI}3t@iHm=(jvXc5m_4s z4nZIB>O;`#HKn6o=10v39F{u9d`#5nSQL|e_J(y9c)Z9?%Q3&;xi>H>ut)S2(>>zy zV!B8C86dgUf<TYx&OI_&&DqaQRv(aQlZ?+pOcUQhp6tLB$+1{+Go3YM6@v27Nw`&b zhifdjwJZ+d!vXdX^Z|%^5TFadGJ-UKuo3{t022U`D8Zfqs&7dQdkX*>KLoG};0VFX z03}NS>;kw%z>_kwO9Olia08(4d4TbYJl=FBelOH2$?mC2=pS$D#1AZ^6F;+zPW(my z|0SLHb8r581|(-M{vSCcuR0Z5=<&ue){M}BZ(*j!^V)J&`v_y?S?x;%Jga>dAc?$k zR@;T;PIBzRz+r56?z=jU17?;i?=QJ?Kjf|%6<Zegvlv^C(36NwPKOsQ>rgRPE~{fq zEvsYfQ<m$-`(m7wAEO!xCBA>gG!J~^8B<nh;sG7gcoWkc6H}gv=}pEo{=S$t{O_3L z#QTwj`V4aa(48ixQzoXXCZ>>bI;J`Ri6%^bY*+q0C*8T1{uXaq%JXV!bsZ7fmr;vs zNKNht*IBVjW7!2(IQQ$xA+A4LATrm1Yi{quI&<>CIFFgrC^Y+Rt+KzIR{7C#TID%L z<yGalLcA|?_CNpc1wZ!wg7>q~`Ig<Jw}VtuzW%|Bl;6_-;`c86I6Z#zZ5_`!9nX>c zO6+G+DB#ooBA~!xCE(uwAt3qL#eqz7=bjb@k89g)x7U1M@Fy-(92xK2$E7lNmCej0 z|HCRk@~TDu5U5zk{GHWG=bSQRiO0K*h4G{J=0OxjA<W=*GV5IcUlIHcuF~ZJc;v7J z!508y2u=ZP0Z5_*yEH<a2W3|VC>8}!51=uC^e~;4qvK;tZxu{9sC$_HQM!kj9i@Ai zJb>iKm;Y<$Q2^PN(yUSiUHvbClNK$<nS!qz)OBfBl&(u3Md`ZqS(L6zcK{MinEd*5 zclqCLbqHY*R!q6SCY4^Ivi9UbE5CY|P5pZbyaHj|HX2msX7}k4)kEyZ6vBqE8_bRP zg7e>n;vd4Ta0O%~9qrSgl0ey?156{h2Cy2S-!A}(T@f1Nv1R`Ws{F$=bfFp6BPjMd zZ$<)$0_X!E-#?ySqTY9Q98?$ZO@N1dm3WSTUnSN&tQL*&Y}%{e!&>EFOYkSj$n`or z6Rxxl&{sf9TQ0N|T|pEF_<~j6)A{eJsPn%>MV<c*D(d`iS&^2#sNlS>y7a%kpZE6; z+<$$E;%oojKX~<9d%E2f(gG*^560w_RsYw^eL7;98MK5*8kZf}1%G}|SKZ8ty6TRs zsH^VN0LeX<{;zS5YovkTN@2F$^#06q15@F)jB<Ej_mN5fgZA<z0f0<^T8{v<19%T0 zi2<{p-OK!&GsRvC&^8+7{SrXEDgfI7&Jer-(5WiGM*w*QXS7%Lml8Z@iv0sXzZiJk z1}I+*z=QdECxRjXk5tD*p)5e;N{_cMj|Z=P(c{gov5(*KZxjsi#?ON`w?2YK$y}J^ zPM?yUwoj>+-9^CiDcOAlygtPq4sZz~?Fn3%)Bu<PFcctr!9G<X(z#x^iu}33{Mi(~ z;X~w40;+kHn#hD&0P_hd0{lu)0$^AzfG~h}2<}0^hT3dOQ8eYj*<FXW0f0Dw_^#+Y z7DB3>1($yG8Uiq#U>v}E0O{eFwcX3}c=N#P*ctjIPYYFs+f8_;mIZjAE?QO@wAHZH z`pTJ!p{X@M*N2C%G#r=yD9vdPBt$c|>5$zDp7uO|o&Z_P0eov-(uX<r8Bk%JHoDeW zXAa--W}PvRd5-E_3vI(Z;mtaE5F<D1yb54-rPf#1s%!2YJ3>X{59(@-uNaNLTdNLp z8I4`_pz*D>Mq|r2?L~E!p6>$<^eue-SE_3O9s9$N84Vt+r!{B?V5KF$s2*Ft&J^dN zAo@{w=8JlZwBPrF$4kp$(T{W!`98?<sX9pikQbCquKq{CZBsbZsC#6E$ID9<+bITq zOzX)@18Eu^?0}MkgFM=45C4Xh>W-bc;u$nk%)ed7_w_3CEk94`u;<@&=$WSya_*y` zIhr=$(!4t<FJM?S{XkG~m7gb8>U&bUgqJ_0^YclQpNpBF>aL_U>M~%5E210OcvsR! zvhl8@Hvke1huoEPoB^%)8>lKJ(YM%JQ3}`LmbHJM9yD*S(R0QM5w9Q8op$B=y3<am zuRHCG`nuD86d=)r33S~2(z!-;pjQqB=fUWIcF8|##>m6}H>2<DT3zGiGNnmtwR!4p zc$35CG9}|^E>oJeRBxYuP6PkGr7G*k9u6wI`#ND?>6Q9p?ZYe8Wk(ARn+crd|9zzj zzx&_Af3;dS(eE_y&tIzqUCbAhynC%m_I(3cJm(%iA3;VhMgkmP$Qty?`g%OAzRcsT z!j<!7?}Q_|Xf~OmIbe$Bb5k@w0VI(>e>~m2EPqrRcV9*S+ss%dWh23z!T2tD4;|4X zTSx;vvXyF}N46RO$xki&$H?X!onNDqm;GDB|7AdJw@P=Kr3*IuSV!B`MBCX!JA}~= zTJ=8$RR6;ZRK#OG7A`e+i_4$I{i8ZwKnKHXK^J_i#eOK_Jg%PZ5U=HbNGIg=kAo8P z-)0)l<x0+lzsngca_Z|@B@d%ZJ)%yo(Fgu1C}V}<to1)R=O8y|_~~%;UniLUEqY!v z{pkN+e)t|)t8LKVzGQ6B*J&$TDRnaiqtIv??3Qy@tIRYj#Y~gaz?f-PikT*_ficsp z6f@0R4UCy))%|9gRri}|Rv9ymGRv%%Xv;Rll(S8p0NoC>GUL1`W}Ic9(`v6*hbkkW zS<GbyepQ&Io1-T`-oow3G2NEFY^dAPuMKruDjKWXQZzuK2@|*wuFd*?e{@+t1l=;k z8^^BE|LA(PK=|=kP&XI6oJ*dxK7Wlo`tQD$|H*Z#bZeXC!|VEJLW;!5E%%>kmJa{U zvR+3r<#<p;g>ro%t`Tv6TdeqAU2jVK8TLlQB=-)$F-J;#`bksb!=%KMV@-(<lM){r zYf5~Wl=z}pQ{s=_U*eD6U*eD6Z<re)C3+;*80JQb8sC!swMBp~7YDjr3g}T@+CzKA z>6K;04Ib}6c4Civ=bq5L$>ccQn=Faby~!&8$;UV3f6BP;em@?xu;Ozd<p+p}`JNW} zNfM3!3521A^4$|EoPHL*Wr!K;V_*K8<wG*t75k3`H*4h*NLxZ>XL-Aw)V1=>I9)4G z#_3x5Q=G1q?ndb0mpmL)BX@2HvJAxqmAzgu$=wB(KU{15#L54zwJ+sm^R;*s6PuuR z*r%Q{*5d>*W>*exE1vw?5>pdXJ4a*Je~6p30Zw+wsojogz)ckoPf9p!!8MCRSj+(z zOHg?hcLs2+nD0V`;EuqU550obw}e_WJLd!}=sEcobOmYE2QkY<^F99ce-LAdtBvTt z=9D=_(kA~DNt^srByCs^)zOjk{G%i3`A0|6^N)^XP@)xmu><6$NfmTdIBg8=Y2N$~ zTxrr6lyN=Hn{QnAdGkMHrF-)~WVIDxRr?JeWpK=;ssZ<yC%N#>@Y0NKMURH6j@fcl z#L?%piE*}@F)GQ=y5*~beA<~SjFN%N^?{G*z7)4W-Q;qP66F5S1@b<-oKprCeMH(K zkNSqucf93z-lNR@Ov_>sAfKQpghFe@B=V!zOTra1xmp05Qznbh>|EcfidFOsa%D8L z^;?&0WxH5GJjq|#8y&z_^mJy$7_}L$&lyu4$An1!apRd|tU51ug?+&|bx2MrIYm8r zyr08Hj+|SAycgNC^-%J51myJ)c~$xLtwX<>ENRww_z=s{OP{~%nTnA8LJ~w=wT}Ft zm*94IKMAxHDFE3A=V+|%_Cfw9x#i1RLw;FHR>yS?plUf%+)C>EOy&T$s`AmPjN^*R zstp0jSELQba67l-s>?{$NK$-Fooi{s?^*wGF~zl19{r&X!f=nB<Bm)A*uBXQdw+?0 z%~^;e<`~<p)6Je6!5T4^2z}4cQ~bDBSZWjh#Wq3D;`l^Pld$7BiUp)&`BPt7dN}yR z$@*9VomJdZ$wITqEhEh{FQD1xi^ZGa;jB{+4|2tt<GcvwOF?Qt_|(aC?*MySX>1pq z50#+*%qg93Hv=8&s<g@DP3Q2m7usxNfBKtq)H(F0tKn8J0lnuUfEEcfPQusT3~B@@ zdoRE;g7*Nn5S#$`89**%ptwsE*T(hwSxaqEZkXuMcW)8USk?=`inov_--9XZG9=hP z;%5}xljv;U0rfN}y8t?*rHQg6D+v$ZIo|mVH#-VHACV&l;37bpcbobE)s#F9;VR2@ zx<<ei{hch=9gVS~F22ny*L`1X)u)bq<u~e`s_i%GHBlzO%LGFKb_#zwd-$6m`Hqq! z#C7yMQaJ~1#UM9zDnJK<u>kK93<0=BkOj~z37`|e^8iVdU@r!B1=Jws9_5bUN~GQG zb2{@PlXd1*OxBqf3!o0o`~~)TWN+V$S~Nkvw<Z@4&14er(99$P9-5g)z(X@@33zB` zk4WNUfTvI$wo%f=*_6b$0FNZI?5QH(0=xlA-U5tF!8EV$R<-_+w*afBNG10zeMKF< z@qPV@dJxoCY?E^F$LvtA0Pa7pW`bkNgjmVW*VHqB#)0QZ&<J7>=tJghn5+D!&}BN@ zG7v=)9qoCbhJ&(~156{>0PqTcuf-<4s2sB?u-T5o*&iS;QQ(8F8y6t(9NgYSfYc)Z zbD97g0O;KmU?;#OfF$zUUxV7$3{l(w_!%JUPgXoHy6@=b4lBFZX|}1GlVuX+*zECg zZ>gib_uQv?64ku9o<t39t|w7B0Lk?>|7|}AlaFbIcgz8YHqOgbXAt<RP-JKC&<lF1 z^Gb6))j8Z;Pjv)vs`FiQE@mqQ7PEg&_Rrm{<~sI;pxKpcOjOXaQf6RFcl>Sb`A;6b zC|JB%FABPPPZ*sFrfQwarfQvP1E?FK4SztV<n5dPdt7SXmE37_!2ItTQ(YEkYPXDd zr*i`F0a&<m*HPNl?+fTq7jDfEV-g+hBv3~|*{uQE+72t8uRLd7gjW~141<e*%NCE< zLcQs5(Ne3347bOt=75&(likK_NR~KM^*xMiyZe*R5Lp$ty$2b+$^xVoq2;axq9%)7 zA5>pMWi<hn&M5~)@I<WRC-=J)kps7KEs<4Y09FAc(bt{>s(33Xz64-3!CHWdtx?mq zou<9`63>3|;P`V8$VTaS(^G*0d2oCU_~hXD+W@}V+x0f)_?h6F4kr6e$hZYR`w&2z zH1^j3E6@?{p{VVik>KhTf&o7D4|u!*j?^Ckegg3A*=DvyKe0!d_<SogP?sip5#c4u z+2h$pIaEp1N%0|g9ixu#<aQnWfC-Kc9}UA!M{W)Bso^r6lbz*AWJxxxo$l73Lt-Vk zCDFmI4YUHRb|S$0KK7(^ZUw4H8{}4}GrIc!foi=V9l<`=^{Mv#^~sm;s_7}LE}SYo z1Ns1K_W}1A#yJLViN?{+0aXhT*mD5V36@aLHhSn=1HP72I6LIE&voy;uZ`}#kG9dh z_hkSp@gjJ8Q07`lh)hQoMep=@qZ)}Sz8^R1fylE(gOUbRGhn<1{y(><)l<|Lx-QRq zK<ct<OtBElUu>)LZESq`c#p2>{_0y*Gw>VFOF_+G!mEK}kDRJK3jMN}x@gz%OGw>A zaEndn7k=jbBcM8ivg-iM1jtVKM0JkYEk04D5zqIDViDBt2$wr#&I0hY1sDqOIY9gd zE=S2T8!ms+<v3jaf`0ZAxRlC3PW9fU_TyX0&3ENL=Q&z+CDo0oPBsdU!6=j%wo6@J zZBK%PxC~Y?-@KjrBFp)^^ufA=yY%SMeYbWQXu$a0<~*GYP^ZCpjX6=(b>Na7pt3W# zV>Vh3P&pZTfLf5D2dLMn_;nLSncaZ_iWBP2uc=~iJnV|XjIh^Rtm$;H4+9-T(5$ln z_LulcYX^zEU}iBuS_w2FPJoLenEeM_e}t>$ONH|RX<Pp3o78EV244ocRLegbj>F*C z>Pxe>wfwubD!0shH(&Y=_1(c=eYcV_AxMg^%O1S|9x|3w*7KaP7T)Xea<IVa=`!R$ z74X1RwUx|d&vPQ{%yqYVry;0M$>z-Uc9hlEMb2WK?a@JZgd9%e|IiWUdX<&NQg%x> zqJIJ`N0`VE_dEm}@;K+kcR4Mdw^x5|T%JNDrUyJYUzUh02T4bUHB`3PdL7KfZ3wnq zf))4*6-D&(I;db&dt*Bbb#P)`AGDmRc7!>2s=7sc-39D`h>|SH2*<w5x(o2P*ImGf z_PPt04q*9jftSx$9KCERFk0(A<#sv9t*&<aE#ECUL%V6(ioVVBM2C6rjOCaQ?bY?6 zhZUA{?uQ+6m8e`XdRV=6&#T>>M<ner52XMf70km>$J9&rUs1|&!LoAQ0C9|}R!oOB z@VVv~<px(<EGeA-5zNwP?AF^E$t^n<!>wXVfMXA#Iygr-crVxpq+o@cnZ4(V&TRNF zvlk<G;^f@_2nTCU)ed?Q1e%Ie>4-&;octf@P)0GU@#QEXDVWy;$hm*x>y4AV7%6#i zi-F(7g4Q|8p>HuwIOJtd;b7g1?}UPt?0QVHt1D^Avaup<2WiQw|Hs{X0LE2ZZNvB8 z+1Z_4)zzxF$hPDv7wt;6T%~nyDlTA*B^%r&S>P(In!z^6222Z*X(2JPA%swDLjnnj zY{0ZcHXVY2Kmq|7o8kmS2`zd5^US@odsi+%zP#`Eet*KQpP4)5%$ak}JTtqqs+XN5 zol9x?y8#VSbz9H148>@ah7!Agp37e)*eL5~P<qX}+K^^ErLToTF?i1I$HESy69;Ht zLH1)js9!}-rWH`$Jyd5}4uKN@{Rs@CiJR7qz)wrD_90Nrq}1n>ntl#}>@ot236v68 zcEP*oVmCf(UJ8Cf?M`o?ynmw9HUd2tQfwOYu=VNbQU$Jm#0pX+?GIaP&bJEu;Sp;U z|KO4EA22K1Z#}$*0DkhJ<bnNGygNz&u2>THs8w8^Z;W0^;n|oZHJM0H60v#TIs2Hh zhe^^N{3PC(9n)kQ_HYBzZrZOKlci3-MfxYxWE#&`E}|*+MxMhUq`9c1FwJF(WiGKn zX&+Ohec&g~rS(j;3MZS^GS#w{ZewvEW=xkoZCj+QVTNq$XOtd{Q!-<wtUb0yGYVyZ zc!r+HzdCm#4YL6gyio6WPcwhbGX6Z>{DsOH0QiN<MFdLjeAN1dN?Gw%N?~a+7U|uO zSrr>q#cK&HLB*1XRHc$@9<}(vdj$5<(54=<Lg_iSP%2mYPad^qdiB>hEO=I$a>hX} zQsjhue$4t^4tfF%hm(Q*S^eu{rhdl_57)z?w2ZOOOOLvZM9Y^E_yrkrk6>u44qB#i z;Gp>d`NC%on(_XfWA=@KjPrjzXc<rPW0sf$a8@z^Gq8FVPJ~?YaAYDqzFday6URy5 zb(!*sDUv0>%fKTDoHj!yCk!wR;scy23d3BQV#ltjsiaUZk6^~0Px9ZEgHSIYFQ@dP zX;}SZW!v6ySl(ZxX7gXh0cTHH>Lw~B|6=V8k6E8RXBu+K9zEZhvX{=c=K3gslG`6s zzeZZJ@iB8*E7|s#^(}&5KW44w1MsUT>z>7=G#W2FW`2c9-#O)dH9w8=6iHpR)Gv~! zKwqJQzdvTK?j^3rEuT!YfOg^gh<^t$m>kNxO}6<7wOJ^Ci{+rHGObXC<b&3X7s}sK zdCXLpD3l@dG3!^N3uQoj%+!41Ir5h06R?HY#ky7`UGYh{M;|0*V3)~4N}eNQ=Ti{7 zl9DB%$1NS~eB6vF+Ug?w+)uLfx3?cRzbv8eyyOEFGm>S@xN@;tLz1PZ-bHEi$77Pi ztAZ3HMJE4%;xY=P$S81((vy5on0_M(2hk52wVp%o!b&CTxg-w$28hvHij(n#5+~zB zB~EWCPSO%3PH!nr?h++V?`U!Q$mCoUmoci3xmKdM6t9mJq>?AiJ4revS1fBuHsvF$ zUA-9143^C-r7FczzSqL?4VLo#bcqVFgQa|JOH_y*ECqUfi3+hp<nu3)mLYbCeBN&< zrR4z3^pvGapF^d<D=2M-)uGmS(<j|a(mYIS5hRv+O=d0Wkh`1I>ui)BDdoODEcb06 zDY-{Vxqq}&$vslawRfqKd!+2=nWakZQS$kROO@QC<nx$iN^UbfbeU58DA{xIGNt&@ zmg3XRVT`thkum9;$S@ME0nk7)%z@AZtlNoe{M`-hN%K!v>pK}aT~H39yJ50ltB>x6 z*@q)Ikm9A$LtffPbZQ$clhxL8<vh!lOf;!hGBvs$RBMy2Z8(nO`)vbG$aUZ26v^n) z)sr@t<4#zNEK%F=8+@+VRxC?RM5!SJ=L|p)^Bc=$b_TL9rIA+Oh$G!k5x_ZnVXITr z+|S6Y?@D!PT1`;`!Mg!N*L2e~ynJu#p+594UcQ&~+8*Q=c)8|<I;lCllAko{lJPIS z>f4E8t)+<Kct8iNdpu3k@Tzsv#N(CtROnABnueEHt=C;fL>I5ntW-_I%lEDx8bzJq z<@=*vJD0c>UWw}(^6<$4y;3xw22{If9Fjn_$4J$9rA`ZtbQ8;^SK3v2Z5hoKUWxbC zzMHIRc)8}(zCj}5mH2q=L=p-w*IBg-s2pC2_tic^qTrP_ss3EzHrG%O;xZku_8Za? zUcReCD`>UBtJ~E^=n2Zg%g2n`dngd&)qRAPK^;1@M@Z`qeQZ31&J|~qITKh)cJvLc zD4)!u*?*drYo3L#IWxx&11IVz?_5IAcnQyzBM5T`uUbo#^97o4=WB~m#^Jh|rptL9 z>E1b0-ypO2A+jTf;7{V8SjRg~8k}RCS$ZP=F<hA*<n5+}FuM}x8uIxLm+ZI{DTBWy z(2(m|$}}cZYp&4^u;lwG?b?dYj2ozgYg;=(H-0GOD|&fgmbw<>h@C*K+#o(_pnu~2 z?xVgsQAUgV8JV2GAH32WaV0cQ;!9u=r%@N;E8y5TKP@xjYv9DVGLlw&1DqW963ToF z+%1mN$izQ^)8if_LBzj+Gvcv}6q=4i|M)q0pvy#7{B`KZkcnaO??McRem{wq6MrY_ zIQ8F9A}{^`gc3TW9TWdPxu=MgiGuiQbRVz3Oo@r{kD*SIemy0o#(Pl5r$0c6>GAlB zyCPXXK&{P)$0kv9)1RTl%=kJqkg5NLij~9<#{dTF(AqiiW04pl6Q%JJkr*ly=f%%J zVwg-Ujh~H#Uni^4R>qG<rvWM3s`#;JI#-9itkx0=F}j;#4NAp|ofu@?TcauKRzNLo zKALI8a2;_&rVzdzjR>-eEe34k8%!x|17gc5MJ}dN=DwqH2T^W`eD*iWN_3VH$#$0O zFix)n@9yC{5Mf5rBB>=^K_OaCT7d;KX$?g`mh?Mv2S?Io8V*nTh;p1sYpIMYY3o_g z?L2ySCpA(TPtsHL9+MPL@3Bd<s7zea7{c*Mk5HL}q(4(mV$x3udy@`OYe`A()4MOJ zavmbnV0xO8G?n^I)r^&BwDcPi*B9$v{4<)~<S*&Ddnx8Fc^sZD`#InsYTv!Q4KM(> z0yCYw17%lY%*pRi<L+{dG8qTq?h5!s@^0kf*JrfkGQcW0P4dSmaKU4M#{pN%j;Err zHTM9%g^t&5L4m`7>tq)fp}>Z}8~A-Fz?z>R_f{H-yY`o;)(5%uu#M!qP_5wra;Ko< z#>W9~L~k20VaaPz?V@(%&Oq*_=djavI2<2f7KG!N3>6Q-;LGKlJ|N%Q<ogEG0_Z&@ z(Y@$XDinv$RNd!eeznwPn)~uw8G@bhUub*#AE`u2gZtW{WR`KaP#APy2cxBu)s>pN z8QG4wOvu@i%T3cmqi(!S;+A<iHDfr6T>me$Hq0~fb+pz(1NDrCCbT#wjAIP2Bkp4g zGM=&0kmG(udhv`yer(*|fb)S9<L*ZJ0!We^cQ5I~6GVQuxEImpc;NInL61EXP$nbp z&nQ0;Hs3$)KHy2n&(e&`QF%%U$&)r!_e>w+w1(-KX%2H`Rkh|RM7AUDUNl%VPYTu! zVT$KT!F~)}lH<fW?s8ykZoI+!)$kKgWOfJTc1y=nA;n_&eW32W=Bsq~eqq?727gON z3aNEl1xj>|tkD*(aZaR$2?s}DAPlvhShpR+VOi`WRPOFZTEY+IqfY=^J%F-CI?ARW zCrj)31})z#h?!u6X|?FJWJwLBEx4AT?CleLmL2p{Zf`AJ#&J0p6ClK5DfL2^l6rAO zY6-PIuTvlT*G|+^i>bczMlyknN6ra9AySrc<9wOKBO+xP_|k>`jq@k+smR!oER&OD zGB$H1F7;yqSj&$$Wzy#BUrtyfYuSBq-!I5U^uMOOafpk)18A7~n<-PCC%hjWyp*#3 z6)yT6Bw8_rdg?zJg_B&6bpU?ZU-!8nP#saxfd&Ljmg#pWJz&Lp-1dh=qn1;$O4Czi z#p{q-Ne|OpFr>dzav)B*^zO25%?e8IIG55rWbxQ?O3TC9o-$oqp=*O+Dt~&?{PADC zkE@JkF>4>?U0SJYSwACiBfyUd+yihefkz1pF1G3=Low%eQm<JRl=U(SEh2E7zz|hn z=myI9wh~A3vf|&KwEoz~xr5wR#e`M5HVhSqsE4vr|5d1zjY?lXY5pll<6K#xFkC@B zkQL6C6|{cGNzuoMa1E5-?D*P?FtnbY4MY^szwyHOhE<XNDwdN1laipYB1#X;#>DuN z5Vn7Np|1JYpN+{#0!gPizj$B+o~I<C{=U^Z?TKigv5**>AKtAm@=2?1x#8l0y-{(o zOfOzT4I`@POMKA$=(SYwZK}AD++zSDp8k~&?lFFyt_8lJVJv)#i$r|$<!j$mDwCB? zmVOpJ%<>Yb0B{m$B%tM>e9d7la?J9w?2W4IJ*w=(1aj}BV!!lB1<j<=xumw?Yc+jK zGNcMX%kfWhu?h`clKd!jJPfLq6Z$&UAAu)Q&3{AB+K5Z=^`#dv(92~L`g$7ZFhi!H z(dm>PgxK=Ji{{@5qWoUeY1Z46w~-!Zy+Yt80EY>*5y*X;iXMcFxwnxlhY01iKF7r? zrr5iw$4g?A)^<ttK1<c47G9tV2O<1!Qwwjex3uv2dP@sp1NHEar^8x!jY>a4%?*4O zZhuZPn(L1;WzTT&SM<G3fvXkxg$1;{M3M`%{LQdH*GqxsQVUwYkE!jxvFgc_J}iza z=*dWks=aLeebT2)QLo-$iMo4(CF%ocMC*r>hxTwQhkf7(&(otpXl38?)*ozr+IL~B zWhTc|OW&%N5~`^sS-$gm>#D%hzMrb{L#wUw6RWNA^H5$&+5D0v<<q8=>r~los_f0x zQpyaHa&4TF@<ksw%LCPxlp|iSzD)3v&l_j;`lf2>6V;NVMoF3Yvh~-YU-C^-<uhum z@*``k@-u6clrKce%d#s~*+y0Nni?tPM3OQ&UP<|?4|M9T8cWKpO3K%K52;>XR4u)y zTKXz1WtQsoHQzB+J|$$89}=?42SZBA<5a%4SzeYcQ)SnxvX`Q)mbd!_)2fDtCH=V% z;pkR8&eL8rpUw?Gy+uB~A5U|q(bE&sHe3E+es||ylp`O1I0+8=1eMBxL*nsLQiuL{ zl61x+A<G%x4_VImErHyh{lRiZE$;w95S?$W249j5dTXr)@wfpEzG^nuzt(DSbgk83 z5rN$2!VSuB)7Z{MGiuH84NtI^f+eVckW)io1fI%}v%OZ%;a!yebAk#xb7VZdvsQ(j zIX;A)w<#@~-$Tv6U^d^Pnoq8?n$IIJ;sw?GIdy1W2CKxE%!}Jp>u`b<tg7p*;q0ih zhVv@|xfw61U^VcN6|5e4(F#_%%PH$Cpne}yFCQkFdRrnF->0Z{e+`TAQdc<mUPDp8 z+fbP|G0_tDD<y7hJ&B8_QrtfEQX4sx{&k|##&X%zoO-2=<&p<nTyF*8`M<X=rY(2f zo@kBh7xmV-+Ul)wJxd_>!r!ZL4fwq^u8wD{ag9V<q2F64-m6@)op)3_pR0C61GRIR zYDeoglSJJ^Rm@R0NKpr2)ShRpt9Tc?#(Aw#_ieC7J&M2(RYH!uxIr#G>xZgQZ<0+d zZcwA%BuD+@25Z#2)ogBZ{n%@b`k4kx+K(D6X=58n+WW(^+5D_E>e(-am!4+oaY2&m zwJim`_GwhTwxyugl19t&a{tK1{X=DbOp-OI`bKL|Hxn3fznaQlH-;^5*b(!uO;fF@ zNtUcHH(Ij3*J#P=+(@!cKB8o8`J*Lk&m)$sc}rh3|0elni0g&Ehe#z2M9petpi=v> zf3&_g*_QHKCFt0VmY}l;3{fSduuC_}81*vc^&s#TI*{W(D92xe4&Jf^(sDmLWUZNr zhb?fy^A_0fvIVqPERe3i7zK7HaF+s4D)6=iwA^14{c{la%6*<d0>CSl-{p>e-U8pe zXn|W)ufJB{;g_vPi%5Gtz*b!jsA?3BK4b2}8OSIcea74kIJ$+NT|uvS4QPxy!5piO zL}TC9$EqXI*q8LN>f|!^U45)N1dL_IxU6`bIMJqX__$Z7A-p_~j9Wm=A20XLG3wA% zyH0MK@l(#$8R3)jtusOrcpDWcSg4t&e#UF&8KFG&W9F$HGmrC_d3eXn!#idj-kB$c z%sdQawxc{YdYNV&<*}`o$wuY5p*+!J+t!)gOw@4d=ycqv$(C^*>5`{<j!%ZrKLV$E zj?RT}9)VLm$3J#!I7z^%p5sekA#kea_zE~y;8f4?HE^Q9sh;B-;ADYQJ;%4e-2_hc z9RCDP7dX{({0lh4jZ-}b5kE@wcjHvgq02;;8>e~>Lnel~ajNHV==C_&bK_Lc;nX+b zRL_l5J%`XC?HD&s^&GJ>QQ*d@o+Do0NQsGVoa#A}^zoFK>c**_!zT~ern_;f=SbGK z;#AL#Q$0sF{d%10xpAuJ$kefAFLC2k&oNlXt%7shIMs6uk%>|_wv~>dGI5?8r+SWI zGO^T+Q$2@Ye(t)`jZ-~GK+3ktjZ-~Gu6~O=)w2$YN8<EN9u#9@VsO;wxXC4t`W!nk za)F~h$E|>xz)_#06*_PT9Q8SFN6SKUI;I==n#W#B#iAjMCGKVo|8qJp%`*3Hl{<)X z@1q2M*WWyrcFutnF!PK#;UN(0Oth`+R^M67aO5u^0Mc$eQEtC8(JF1m6XotZ^Ff&s zUb%Pe2Q3&atCHkSw?C%!atb=W8>rPvYQ%S#KsCVg1U3V75V(>_xlueBp6$E~Lr#Wg zJMRWe!GQr@u9>OIX~nyGigHx<@U*Z?X2LwQ69YBnk}p^;`7!nM2^9z~`rqS{#uUtL z&Tlp4o&1xL$~(EuJGsp}xy?Jd%{#fxJGsp}xy?Jd%{#fxJGtFEx!pUt-8;EMZwh-S zck0{2-pTFW$?e|B?cT}l-pTFW$&>XTg}sw^(_6#d$?e|B?cT}l-pTFW$?e|B?cT}l z-pO<IJ0jlc%$j(zcXG=+`OYTgo&46Ouy^v-?P2faVedRkdM9R8`eCcxJByTeK4|yO zwkYp(%o%C(&VCL!6WUfLtnd6ayt86G<^S4rPOo&%{-!%RywW-QKWaK>l03v3xS!$l z<C^up4ip`PX}yoUGZ|l((X*hUHz}F&DV`2SlC^AKpL*M?=GIGktK5l?fhhbUT}!)@ zp1ni)X%7)N0WVIQNa!nMl@V}|<Y^nMXK7EU(ytOo#G}6w=;_d+LfJD^q8rrmyi4nj zXyCXDD(;SG;J6#GhjM$@@Se74&_e|Y_spI(R2VPE(?*XEDGM*pfb?*XXqD@Bc~&?` z=;vBNf+V_?3Y>qQ6(rbyEJ!#aLBerTkZ^ogkl?l;;fw?cr!7c0Z9&3m3ldISkZ{_9 zgwqxzoVFn0v;_&LEl4=+LBeSd5>9)Na60rg;UM93>NVjY;j{+{r#(nG?Loq64-!s$ zkZ>mJjo~2S?51BC4iZj#kZ{_Agwq}*oc18$v<C^NJxDn1LBg4<Unhfv2l2pZ#RKQg zH7XuBZ(S3P2hP@-a6E8^<3T|<9>ic?A$F{a2bfBkyG!K`Ql1}o3}@!s&<cAT0b+0( z(twu7BzzvP98y`XzH>2R!_YK5c-%09Ln2O^$Cbmi$Zx&>z+#<`<b_DSfn))a_fazG zP6+ZEZO*Yp${!2A2fgl~XIe5ITtZpN-3eR`P)Oh=fN~3v-5P(Q3MmjI6)w#0f>u)D z!u)Q)v|c0-UasP_)le=h{6v~^Y%yG`m7EbLik63FSsvO<z2J-Bcb-o}vmC^98$-FJ z^gxGW2IX-~s?%KU7ih959NDm3&-7BmRJUPzw_&=qVY;<py0u|CvMV0nQX9BPkI13# zL`sZ;h6mydhV<>8fK(P9{DZXSp*THw5={DHU5j~uDpIG~V0s!WZx#n&;cj`cSi&__ zEKU`3%R9z_<y87o%6H3a#sPG+>tby8V%lFbw}5Azw!P<3Fn$k}TZ0;gIXw;sj^lX^ z%xDQUiWj?Bdm;{sUo#}E_^B#1zGnWRiiX8fe=^FMip7OL>-!9+{0@Wql7cxuXZo%J zGuhNM7?H`Q5DAz`qc)k{V5$)zVgHWkolUM0-q~Q@)z0P@nhJ}KFM-w023YNEfYr_h zSnX_p)y@W3?QDR<I~ydzI~ydzI~ydzJDV!QwzFAh*mgFMHoUVzBD}NNuGw}r@bmD_ zW|d~!+0+`goy}#2ZD(`6X4~2PT(j+LkO=Q=kO=Q=kO=Q=hH18)4P*=NY_2xKVKK6a z!62<o44~S?V7O`%gGLY*#~6rX4^k=ylL@i$*Dp2XVk%|sPgO2x(ruK8LvFkSM&}$- zP1c(5bsp*%T7qjNnLI%9NTdm55?}!Sk(en0`2;w?Oae}TZ>hQqz&#Rj5lAKA2Ixn? z1CT=?1|Ucv7NCeg96(ABoH!78mvRyS`u4!5!UO_6@H@f;3J4?t6!yTMn;>v5fn<Oc zJ@7>+0_%Io?>J})PZ3B1c$q*qfWH#x4v<Em2f$J4t0zEz%1H;vCD03Cd=GpmOQ5(1 zez2H8DS-@tasrtE)dczi{DD9}fLD6p^beyTFaV%7SJMW{1_Mw&fgR-jSpf6<QuqRR z0$=O`_@+S9h7w4ecJ?G~7;>&8yU7Olc#Nj`0Ujo|4gi!Dk{<w^H5O+~1fH3wX~O~j zM$<Y1;PX73rxP$}q$2?m2#f+qComddFo7`uqX>)zm@*RIz#?#h`pO6Rl0X3fn@(Fl zfcWXS+C!i_fe8Tp2}}eC5SRpzNJ^Lt@E2-u3P3N)nF=t3z%+o-1f~N_B``w{hrmpL z#RLigE+kL{aF9STz;gsj0Nx}p3m|m}t~nCOBrpeH7=gL63j${WOeSzPz$^mu07?m* z1F(X?e1NqC&IQ;>EiVALi$E#Bg9OR|*3+CW1Q<(mx(MJ}n$z<D@Dobs13W=sF~Aoz zr%U9c8TivE1U{sxTn6x4(&}=6b7(480F=;Ft_0X$tZC%{3wvr>g_MT`tCTVmm0krf zDyV5y08i6$dI3N&P4|TW2gb?$n3nJmfi(d8$Trpj+)FL5185Aw-<g*1q96WF;0D}c z0O(hO2L$$G0Rz~S34bS$JO}<xV89&sJAqMi;O_+R)2wcQy58`20_W$!-w6~AhQAX? z?+bq?uzVc+oj}JR_&WhTAO22Y;Z*oLfj86P?*ty41%GFn_xDs-^Zu(p3G980^k8_8 zlg60$1;P&RQWBec-y-bv{*B&U-XdD~gx5{;<@UZu<Mnv|NF$2zZlbw}^|tjRVZ0Y* zlO*24NqGM`xm$vF35C`~?^~n|uXoo>lEM2PsmSL&K+}}$9Yr&e;w>YSPW4_!D|ecA z^9YJC-djn??q2*kwI1FZNXb3D<fmG?x1@+dinlMl_x9dQv(U#|N%CiSyOV60-m#>R zzTU$$_I}>qkplaBgQS@O-Y<LMT>F<~DucZEgJ)UZt4W!Iy*o+UL%avc-iCU2(|Ct@ z*U?C`y*;Q$zjrXn8Sws-WX|#C&{%T4XVJKZdy{GGBfR*%!#r;u^)=Evn)({$y`Ho; z+IxW7ALI2?Ut_(kG`ex#KhWs%y)|T41>SS0ZqU1e<R9;?D#l+V8Ak0-^xi<)nB*Nt zGcwux07*5)TSx2CRBzvDxK6x?#y;Kappnk-X3Qp!_Tq0>6naMyF7lSpd$D&py_a|! z=zW&=NAy11dk4MG@wU<XT<=3Py0g5`(firnqx3${`z^hn<MolA=X;w-!gCV_4ulOm zw1hzc*f4=L8L(jj!)L&T35=VL5(HkE1REycnFbpsuyPb^n834nuwerC4}c95xOM_; zm_XYM*f4=Rdc%eZyeVy%K=Mr3FoAb6VZ#LGO@|E=_@WPNn84;~uwerJ39w-ThbCjq zA}}x)YZif@OvRc-;QU!wvj}{gk2Q<Hb2G7K5vVP|nnmF2F<7$*+?$Uzi@=KktXU9j z6xJ*P$1|{I5$Hb(YZig}(O9zxTs;bF7J=LPW6gr_Sy;0OygLVL7J<H_v1XxgKde~< zem@Rt7HUnxnnmEsL0Gd0oSlm`i$Fd#I7~J;4r>;Hw})fRBG3*hO7oL2Cf5QxCC4DJ zu9pRl^}@sv_@*}|jzD>#q=m#5<iz0-zC;c1k8x;+YYCstM0En!3_x`P1M^XxfMYJI z6BsP36L@3_YPqz8!!uBez=;v4Mc|ELs72tsY)$g2guU3e0mPhzG6a5?fieUx9Ez3+ zq@RVB2?TmWFakHvKnDc=gfIG&DJ5K!fp!Q?8-sQTyq1l22z;E4b_fg~jCKfoH4E(! z=$?gk2;4si(hxX48O;$GRRGH*@ax{NOadMKV43J56P8KfKAbgCsf3l&&^v*fiqJcO ziGK7>VCH1>P9R|vdMEJBbkvHWQOHRlFmEDi5x5RJ2<jxE`&2w4kS!gJKm#H$z(0GS zK>}Nf&>(@z5f~1EJBDL81m@4ha0t9M8^a;+a3%yLaNa=lO<;3>^h99jWDJKuAP<g4 z;OJa98iBh;!O;k04TGb_l9Szl@4ww=fa$7DmcH{2Vz$0{*hl_SKGEkUJ74Fb4O_hw zb5jjYonmgP0aMkN+FeA<Z;8Q>uE2bo+qgy6HZJFN^E(R5myi~!DAVX~o^V;aW=0j+ z5WI86tGVLUT=8nIcr{nNnk!z-6|d%sS98Uyx#HDa@oKJkHCMcvD_+eNujYzZbH%H< z;?-R7YOZ)SSG<}lUd<J+=89Ky#jCmE)m-svu6Q+9yqYUs%@wcaidS>RtGVLUT=8nI zcr{nNnk!z-6|d%sS98Uyx#HDa@oKJkwNvqGu6Q+9yqYUs%@wcaidS>RtGVLUT=8nI zcr{nNnk!z-6|d%sS98Uyx#HDa@oKJkHCMcvD_+eNujYzZbH%H<;?-R7YOZ)SSG<}l zUd<J+=89Ky#jCmE)m-svu6Q+9yqYUs%@wcaidS>RtGVLUT=8nIcr{nNnk!z-6|d%s zS98Uyx#HDa@oKJkHCMcvD_+eNujYzZbH%H<;?-R7YOZ)SSG<}lUd<J+=89Ky#jCmE z)m-svu6Q+9yqYUs%@wcaidS>RtGVLUT=8nIcr{nNnk!z-6|d%sS98Uyx#HDa@oKJk zHCMcvD_+eNujYzZbH%H<;?*w6t6h>;yCko6NnY)eyxJvswM+79m*mwh$*WzGSGy#y zc1d3ClDyg_d9_ROYM12IF3GE1l2^MVuXagZ?UKCOC3&?=@@kjl)h@}aU6NP3B(HW! zUhR^++9i3lOY&-$<kc?8t6h>;yCko6NnY)eyxJvswM+79m*mwh$*WzGSGy#yc1d3C zlDyg_d9_ROYM12IF3GE1l2^MVuXagZ?UKCOC3&?=@@kjl)h@}aU6NP3B(HW!UhR^+ z+9i3lOY&-$<kc?8t6h>;yCko6NnY)eyxJvswM+79m*mwh$*WzGSGy#yc1d3ClDyg_ zd9_ROYM12IF3GE1l2^MVuXagZ?UKCOC3&?=@@kjl)m-svu6Q+9yqYUs%@wcaidS>R ztGVLUT=8nIcr{nNnk!z-6|d%sS98Uyx#HDa@oKJkHCMcvD_+eNujYzZbH%H<;?-R7 zYOZ)SSG<}lUd<J+=89Ky#jCmE)m-svu6Q+9yqe!;@oKJkHCMcvD_+eNujYzZbH%H< z;?-R7YOZ)SSG<}lUd<J+=89Ky#jCmE)m-svu6Q+9yqYUs%@wcaidS>RtGVLUT=8nI zcr{nNnk!z-6|d%sS98Uyx#HDa@oKJkHCMcvD_+eNujYzZbH%H<;?-R7YOZ)SSG<}l zUd<J+=89Ky#jCmE)m-svu6Q+9yqYUs%@wcaidS>RtGVLUT=8nIcr{nNnk!z-6|d%s zS98Uyx#HDa@oKJkHCMcvD_+eNujYzZbH%H<;?-R7YOZ)SSG<}lUd<J+=89Ky#jAOk zR}1qa31NO@Ak0r6g!zeq+tDoskL0Hn!u+&Cn4eY%^V14peoP_Ek12%tF@-QcrtpAe zJFYhR#6<YCzO$K9F{{DY&&LV(yBCvI7SU7WYjKrS1ur(k(C)>Fxi)54n4E90$oWz# zo~>)zJ0Rz$`;3L-&Zsd{FOpfO_`HST+YBu00u2Z0_%=fbCC!0zT=O%^b*nvSCVZ>( zr%)5hGJFYvVTVA9k|l>vCaFB~DxgPR1@y?PfF5}j&?Bz`dgN6=kGu-#kyimd@+zQ5 zUIp~XtAHMP70@HE0(#_CK##l%=#f_eJ@P7`M_vW=$g6-Jc@@wjuL64HRX~q<6_DX7 zpriC&SZAzb@jQ|@7FPisOC`irK*zF$fVc|iSiTGpR{<R>egw0{RY1o|Oj9hb0y@eu z%2-?lbW}jEvA7E8s9c3=xC-c~It#hD3h1~1o2^(}1$3;g1H@H8#~OT5DHc}&9cxQb z7FPis>tq+W3h3By5g@JtI%;kN#8p5??KV`yRX|5QK4y-^RX|5W3m~onIvQ^V#8p7Y z##;e#70_|f&j4{1(6I?$$O?a)rao%3zKmdg)Mi?3*V}?u!LH%OaSoRQYI8Z3$#=-? zaumsT3_Cv2vFJH^l7Ra<j`Lv(TH-RzaXEfRjmRKw4LY{VFPJqru5~i}O`T-Qx{eGS zC95knM>Db=3Ai=rXo+R;d6xr?dhwRdaK%)UL=rdB9M`{2xjuZ|QtuCOlw;^Sug6Et z=GR+x(}V0yx|Xtx63CC;tZS)Nnm!O6XCSd`y`~RB*Xt;iw*F7%m5FX!;HB&D#x9yA z#yJH>3K_i6$=wlQ#4QXy;K4B0A~u`ux>J1?P3_%5Iyta3+FczdxvS$0?rQf;$EiHi z>9`zo0e2MA9r<wlr6ad=N4IoGw{%ChbVs*zN4IoGw{%ChbVs*zN4IoGw{%ChbVs*z zN4IoGw{%ChbVs*zN4IoGw{%ChbVs*zN4IoGx6K`S>D45UCzdZBLBolGJMyIx!X5dt zae#0~zI+lO+>x(nq&hKhM=sql2JXnEJI2VrJRsdM2JXl!XQCS1kxO@sfjjaG<{%gD z$XCPmW8jW_&G~?EM=sql2JXnEJI25r`GyKWxFfH*1Q71XYgeKg+>zJA&12w>ykP?% z+>tlpo0&0iN4^mr9|L#f7vY<wF>pt|>B@i09i5H~;Cpb#SclUAwK*M=<U3?`N_TWh zcZ^Hqi}u0U;Ew!!`A4r3mTCO*?1($^?Fc4u4gA{oP!jIQO?OOyJMv~^JL2JvyyYW9 zlb^?;(L}s`3%{(^!tThg{~cNz<{Wtg`9nM|@j6FCX<9rk@jAx<JK}MD&p8(2ig;Y& zb&f-RY&<UUI`e@O<8g`CSpZ3r<8g`C8AN`!cwFLjjt5SU$0c6p1nI-^xWwz62-EK$ zk4wDHNyyLA7%uTTr?}v&Q+4O`qs$tnbEY{=T;g>WBHIy<OT5maVNx($;&m1elY-$A zue0Ps2Ik;&U~Gwa`-Vk^k4wDH*}E8&AL}6NPd4xJq5(F6GE&UDyhx|?3&T|NF0T|N z4PQcM!(mQr18U$pE*mc4hw@P!Ag<%G;j%_Il<nrE-0t}Dxjqj%Rl!Ez*-rI)$nX2j zgTjm!t>;R@$TnIWJt-Q_dro4Jj_axOQRwFs|9U-yuy-!HIDRQ5??rL}lI2a5Y(}ya z$yOwxG`$STnOi9dz3B^)#1CEfzL~<GUS*WM!$og-p>~7u*S~Pl=QuIp7V12Gg{E)E zwB13aGcu@NFHE0)HCpI>nXaYda_lvjpZ6)%2mL-lF)@AZdi<CW=J;}5%glI_i@7k0 zwVHlAs-8!=ed9<oqv^?d%F%z`FN=~_P=3E&1b#vw0}uL-pw!;W;T^R1*-klsruGNi zhhYgFZM}hqeRdOkl00yLyp1|Xhd=$Dp7eQv9wg#{yp}po$0Q88f}Um^rzZnRq6r3? zxq|XC1g#DO<mD4H^8v~nATM7`FyL#k+jVUa<X-l!^{1;Q7){i;6u!@POZX84GF1sV zfEn8{fI+ad{_k;-Z`QnzYG##FUe-dq&7rr!v+404N%Pv^d#Hgw6B-;#S?{||1!QDn zGp~f4DTQ3PT?tueU?%oKNOZO2sCD0NfiaNk^g~xCASAj=ypjOA>`!2D=&0)U>c3ds z-q~Sw+h-zm`mM`UmP6`%G}Xyi6;_s+x$a6OheL<5?z_@b*3;BvswVUAb6LtddZneT zuLxwS5>i=lSA~_;@}BjVa2@(_HG+(*tPz}jl{JD20)u}WR@}4>YXp~s71w7w$(l;R zd%!brfXPzc%de7#Lr<!OWwP&ILizVle#XIU(_H_KlAm2=nQQQEF5admdZ!%3<g2Yg z%qNh62XX+buC~neOUijsKylP|UmcBKjgsB`rZTgn9IsH;5VW36Za4;qc0+a9e79?? z=7$o<z!Ta0_-oAOGv->&jF-(UL!k!0niDhg+H2IDjF)rr>^0V$yz-7^z~l8PZfj2B zueJK?OCVE~kbRE2HasW)RC6+3zsPOPNg+KRia9Y_rphU~h%yHEKc=RnyRzkvBDSmz zUQa!Ij@)Y%xP^dD5p?jg9ahc<3VhLFKB5Tzjf~@1-iE2$LD}kdkn3$dTip(Fy`*QW zuNJ%B)%~_FCcYs*Sa~E6CWCv4UW68C+C-B13CdVluAS<Bfyw;-kG?_7M&mnQ)-?kt z(z;(zXLd7@{^|17VW;^!Al5a5M+pn-ngPC&>Nc+#EQ3njwrd7%+cg6>?c3Eg1Gnv( zf!lV?z-_x`;I>^eaNDjKc<k2<Joak_9(+|!T{G}l*9<}=UXI7QX0VYGc^>PU0i+${ zv91{)QQ)zz8C*(<i5}~k!8A%t^;p*oDCBF?J=QgYOQ^LO9_yMxGbLtv?AHuD_G<<n z`!xfP{hEQte$BvRzh>aEt{FhKRUYe_!A%B^->n-3!n#p_LAuQw1%R5{yitJRI^5=s z0yF|@HbqV*CQyD!9%6@Y6ksZ4?wu-kkS40gBF8w#*HDLUHU@mkoaWS0@F`%2`+)`E zQ<AT_57OfAoQ&eM6F`|M$WL_t5&2Vrlifc?{xsC>=3WS{Hyv~}-CcloW&rncFF=`@ zz`fmnL4M(OYBR&V0r^G1{oT(XzZh+1xf6j)@bfdn+-{Va^$^3iB)>wxv)dUyt#Ufh zUOYNR0}12JaW{hULI0?oFu=_Gk;+6f2>|K|3_P)2<x<AOpn3DDe?3V~794mz{j2Xx zCF@GUPfzGTKc$G|8;No~<P3jE>Et?k+*8iJ|3^AngYr`vX$1ONXzYG!OvuJ2QxmCF z`m9tL<*3w?C{?<fo*tx9{bZ>N=waHA<pWfg<<imTawI=KW?jSG*@Ea!tu04u3($26 zL$TE;mU!H{_P+D?R<YG6)<nh9Fk$-Y@v?1)mXeLG>QO0&DqSfnePdOsN2R^tO7*Hz z_o=9~<KS_1;?;|rL)#G^+AEMnTJ6VF%B7=Jn^o#|t5oWW<++r4p37D#HJnmMWlE&| z#)Af0Wsk8vV6FPk(cEh!P7fHeey23v>nI8P)qjC0IU7lst$r7hn<?3I$@^U3=SzET zAb_8mPehLqlTc;=@e<K}!ZKU#E0mEw3N0SiKCrG+@9ge0M{+nk62eM5>Aykg7c;`8 zXIQ0Qw3U7_JOR5<`ZXjcQVqAPvBs+LT3DYmFvPb|YHqmH^;W63RH^jcDD~dbaL<of zCEim#R}hBlNIBmE&p&ZVxb)wx(kE=CPlQYBkn^+MR60eL?(H&5e`b~LMx{T4v%O17 z*U~>h<KG+%7oTMn|HfAQ8+f6C1)<lIklfJU4hwS$mG8YCc~*r!JJV#50hZ!2PN0fg zrnL{1Tioq3J=QI&WuooO!w@A;7R;c6%UvkA$ZfWtr`qpbgT!95_1^L>RG!tD=q)WZ zPd809wzo9ZJl(X_#6Hqi^K{c#lap(yrBOOMD53t7X|_kpi!7^=TEC8-j*$&7X`y)X z3#c_;K7S19;W*JMkZH#bN+WjaK^@aD18Kxh;!Q|jg|zgH2{LXyi?no&i8B4<^^}&r zF-i8f?*>Xs=a?+hhi)YAI6@jRYPFu?BlF*)kKiqd&c53TJV(8JO3|yI{Oc%M&*T$$ zSmNxtR)Sb(&#O+D#e4qsgjs*&->fGK{$@RCkzlT~=WTyCi}e4*DsnLaqh9Mjy3_2+ z>V~{-87Xf7bdb>o`Trp0ZKh%`$yxq{9uMs4mQUpRe6y|%{84GR<V}=Ll79~C4{}D| z#q;Hn=Q%$nO<aidAstIyE7HBBlgoMQehZ~>fT2Gv%U?-pE#s9q%J@jCcKxSZJSIh1 zLv!C77w|sP0i_|K<Byannf-nw+j;jE)z9B#Ke<04E`1xd^->IeTtI<073ley2{iND z@fm$l)h&PQcp^P|Pf8F&1^P&3xDC?;EnS!eE2s}sB)4ITButUa$2;k9A8B-M!;DFZ zre<OcXeRZiO5#`p5;y-;X(moq|LmvG%wSBC-;k@w=Uluj<+>@x(v07T(v07T(u`lW zGkd2J!*7WZYj&F>yWL5T2d(?uQp;5e+^@h13uv*s>Fv%Ki~l&ZtgUFI=plTKi9NH~ zDF#5S!RCEJ5Uj!GeL}z?$7mRMIf90!d-VbFz8DtYGv2EwITI=P7^xbI9~YA!Q%JFf z_19uz#?x~uZb8t>1P#;S#6KwI8mQqP;nP`sObqJklyt|18yZ8UJyw#N$rw~-@u(N8 zdZh8_dZ7=M<1?wr0Ocfv8|BDPjI<IH6BiR3gSNar$}H$kF)=m#RMUJuJt9mp)e{k6 zQvCXa?q<=o@q@Y-`Z8pxRBo%E=GRo2LEST`QnzrW7_&-VcU0=mZ3^pQF9VfM>~`~H zS*&NIm_e*1y_cTrJ6oThRvJ?#`|fpRldgFwlk6$nv+O9`40(XP`78A39x`}%jOZZ~ z+^BC}R9-(@lIFU9^oXKb8;}<z??79UY7UAa(NQcbFRU`;54I(#){uyvPwHSOk19IM z63uETn@6?lw>K2kOn^t~Q8PJtQOR7Jnxz2^=UT38afGxmTHEqsbTo*EBO}t&Rvtst zw9)2c+FwLkPA6*^>!+5ZBpGKnn5b#Xk0=jS3nIx0-C?&u)GX+}Hr}kQY2%|ZsLF)s z5^KpJCq}X~ZBldvJhwad{4}pFojc;sEaJ}&yUYLE&TVtAm}p=B4hOfKH_`5|Ub`nJ zIb`33zHwF*@MY0cXfoNMTlun9%4xkXHR4@qCcJTSccjRvRRuE!M7wjuU&w>4qC65X z(j&%49-L=O^tPK)pBO#LJ;^!qY`yf2$e<eTcLvAlAMH2;q8(>oFUu~K#Sc;zpQS9B zoYc%2($zbLqAdBMY5LiDGUb=Wsi#21Q*xrCLvB}#9&XP-i4k2bI`3qQ9@*6mMxAWc zqwQ9I%JnN^*UWC$j)>`>Wa81bEuwAP9c|2>h%v_~V~$nE9A`R9{7CsvLbP=zDy#LL z)=ZP47YUz=vdPiWHzi`tsnHXW)^#Gfb=7<Ku1dBm@eDD-91`z3um5YO;IukU;8D6v zj8?5TqS~acWA$}aZgN*$rkptp{}2V)1EA9u0HuCh%9MnuN4L_WN9iL*=_5AU2;*c; z5;fk`Q$n=j6QdRHjaGb8nk_{8;%t&9+k<yXWPVbk>04S{I982`VpO)6+T9*gdz>5^ zd)nh@x;<L=vIo`Pr)Fz?x@IFY!`@4jv1CRYi=9qUvR}kl`kzDx2B^3@&<vx4RMgF~ zMQGXmU=^5$*q=}|?#dBWT(;*^d`3qwh5)w$b&h?diV`X}npO?xQESJD=#?cedS$V( zBP2(8tfZF~x6xf!k};$j-Biukt4K>mx0cD&<Tw@4^7Ep)Du||SK~)<?$9G-PCPdbu ziDzK2lcM?X<h-cll+y-?snH>I8jqUu>Cqv2#u*msnbFj=(9REvPD^Nu&9Phjq@-&Q zniWx;nK8R-RGQN@D$O0Gq2O6vmx8nZpIA#zy;Vzym?}lBu5rZlb+0{=B#oBM`OaW4 z$<b4r67B5vm6noe%96W9+g10j-rYmRfu50Qksh(&=%Cfr<NKI|?E43(DC6m8^Su6D z&1AsI1Z-ee3mMeal(POiOy+y-Fa~Nra9?q1yGgX$jW^mDl-(rRR~Vmtg-HhENii)c z^|W)679BB8WgzxBKBa-2!AyHan`!T8Gwl;?rWtng%Is>JeeH4f|G-+hT8d;oSzV21 za98vC-sex^dl?W+#2rm{Jc=mAoO-Hb?Xw#<`ef?ZMfVBOYf56Y?(O6;;^98~6eLI6 zMoL$)P$AWBe`$HPL^leP^iTK5Ajy2Nx$Joo{YY12pqJtuy<;?!X7n)$Nk%k{$W&(7 z*JK&}x*ALWXuBKGb$ZVfJ-$0w*iIU)t;U(ox||VBySkdH=qiW%Ok18a+TC}Yd;Xxc zE^^=*6Ny`~DsIK8xTSdc8H_M7dLq0CN=eafZ?icRNsg#1rK`G9|9_|*n~Qp*m6Zf# z`Jy9o*WLB$*ZppC-B*s?Euz)#>NK%OSM~PnYK`e#_1)_`-Q>Sp`DdhIr{&4<(TYy! zI`T7le0*1WVBhX?`!>^Q-)6d$ctVNiwr@N=(Zh_1=qFYw=44iR+8A%`a}sSy*i&BA z)1>H)i!WjwcAx7y<*8kbBJKaW4gA{<XtJvx6rj3A2dK3F7Xs7|+N#(VbK7xKRBSql zeMV`p>p|e@0~R(aU03Q<wUnnt)Y`49T2DF%?9tUIdw!=;o_hU0<HrdndvKV{$j!aU z*y2ddin_(xV?$i@fl_?*EG3-k<H5w}Lnp5lF=YLuXu9ZAr(?<HjHX1JNNTi+q}k(C zH+!7wZjVYmBBs+56g6FTLOiS&0RhlE)n*ob(rof&L}Vw17H3mLUnv?_1^aciy}YQ; z3S`RzOny7?<j*k%*>^=*_HFavJX>N&o~_u>NHb<5!%k)X*>;QfoAfmR#+q}gv%lP~ zpT-P7_0E1oijE{;9+!iXhf{^Vyzc4owxcP0UU0gjurZM_!&Syc$MsVlR8f9`I;#uX zs*?|nH%aq^$g$T%+jeSF)V6%`$uiw!$}}Z<>6sc~^;Ust%Cn~{RzJgZ@$1pe%+qd3 z3!~#nQFQbzj;vZGk%%!Xdf}Vh^@wjyUX%vrMn)CY^;r?2qVms<KDn3|9pcW3CSmiV zm)UdeXO9cIo)4DVGc>I%>I1)p_AT$C$Pf@|&O2!rb-vm~Eyir-`s8dbF%M;yn%k&l z>f^EHb_HqL3R`I6_@=Cewl%HXBdb-Me6n3>-|DTh?;5MRo*7(Vjsoz)Gb|&k&p>n5 zcr2A_+FIp27{<EOo=mP+BzHsf`crLRT98rGb*%|?U2AH)t~GV`wWj{$!-j^F&lkR% z21GcG{q!KRXgTdGi%Tt0!i@cHwNiQ1N)=<SWwFtVLR|Es&~-(M1ph<?e{b}HlcW|o zpM5P!wyz~A_O&E6E^H!l1)^tMJv-_9DabtI$JwV^G1ARNqL)2x_XdIMa|T<=hz^FC z(caqE?ydb)U{yy<Qu$p!#EuTSgSvWnmI{M|yHcMaDn1WY0dkn>t=Z9^t@xvZSD<Tf z%ZYa8+(=j)ZeI~cm|@@k9g^taGpegAj6T_r$JlLuY*$wq_ivw?{U_<~zr8*9&dot| zEa`fV5z%{cS52mLRm@2nh5v_lRX_AtBYO4hy1R;AOjDv&o*FS;`+h+M`|e%!ex`kb zsrU5%>w5p*CmJeF#@plMcg@3T%ooQ2T^DMfid6O;t~uMOT@{=5y*%A^f?_)zS8C#B z+fKWJU1u1Mh#rnRdN`hF!-<JlO01op#HpYg9~orA4;jo4`LyUiX9w1<J$gk>P`k54 zwL9~wH9F}GE1>c?Yd!hzInR*y<)WnJN?NCqHuBYwhz=uP4>`jKVxswYY-9v+-%H@{ zF_m_@<&1>JlbF}(KEttdq*yygiZhKQ-cFSgqAf$60$53}GKVB(4&V2aVFXYf<rb;Y zUXrG~!FJ>VoA{4uP3p}0%qv<|Zlx-ZT~#r5RmGaBinFUKK3Y`?(W**Rs`4sTCE01G z541M<R53Nh9#d^fLZmw-_v~hJ&+ccKi5}7M%JyX-B-5j3!uHuZlD+Lbw2$JU8776x zRI}DM`eU(vDuDM_gmQq*)h(`Sqpqjss>D<y{xl?-TMkuw%whIrGrOzP`M*~{{Wlg? z%-?r^z1JGCJXb#>m5Ch9B$!7tiO7-mbJ}wc^@+QsLtnIplcP19at8BAjkbrhXlv;f z?YB{O79~%QXv67gJ7Y;dxsv)^{<ItC-q9y1eWG_u8D|K}nWuVY33>Vt?<0p$1I#cn zF#4=(P{bCq@}e{}IFd9Mt05=F{;zSJO?w2F9rbT0a_ICw7$f}`sI93ERIOdHx^`uG zplZaJQQ51j*48#;SFWuM)HK#;^7-nj<$=l-D*{!cqMnab6}2<9vb-u(6IFoR0xjYn z+`G}L%U9HfR{IHQT1{wK$iE7b)r3~AEU)n6XG676<NER%f;5a!)tYib4q2dToe8Nm z1u1t~b){L&YK)<a%JK$+T=qu5iKo?7Yb!^X1uDx!>(+<NCe~N4t6aNGcEe?Z)V%qm zVcF`{>sFZg1eUEXkMzHmh9DEQYpbYEw2V|fv}XOvs%j;}vX$8tRjbP*NzzxiL&#;; zFIZk%wK|ktwN~CJra)kP{7Z*mPiuORxkb|AhhG)GN7z4@C}LM$TtT3@Y!|!c;#M&{ z`HQ*Y=SKfD@!m7D#3RRNF^_0F9uzk|DxMRUeX*!m1jSL2`;VY_)WSI`Gv~{YxN=v1 z;D-Hu0;~_Ue4f!)XTu1bRlowJqTBdkq+N#|bPB(doxO*}G#wSIcJE&hs5A!0Q$M9G zEVg6x2$2%ZW@|+oyD-GE#SzgzG^dQkHZiXVu?@}d1@nUo%03W%i?dl$Cu=w&Ufa*k zD`MUvmM+>#XV;dz%3?z_$P5;0U+^H6swSA$*;Gt@8_ptncREGj*;etm!(hXk96BrQ zB$O2bDl!Hni&?La%`Lm(vMWUQy3bjq(NBN%W>(YAdW#BHM>574gY?ozU#<T%KX5s# zBRM@q2Sbledo(kDS9X9Ubg&vx)UrcViU-81dCYAL)X^zp?l%0Cma~H1T@_9i+jfYp zFKB^A>hN|23OP$rhMvY$u=)b#_Ot4C7GHWLiz{L^{sI=$xmQ%?*P`e?yj7#7v%o2) ziZ{g_EX~N$FBoz`9$Qs#pm4-(7mhwqc)<<K(_F^R6|F6-F~o92Q$uj?u3djh{v!E{ z(pjRcZZAu1W~+~gt#u-qM6X~eMa9{MhkQL~!21I~)ca5N+wT_(EVuUC+?@VdQBx;< zZ#V(d)s<80Ht#cRe$OI)Z78?3xs+jdJ0l!LqJ7q|`K&Wi*V)yx!ahe8AmA#^WxCt? zN66h?()3y4d~xhy@nPA4LW7eA>Cx_c=+PlV7Zr=y#?oK0J2p2NeY<}qdXq!2S~BuM zMQll{NGDU;A#N1sA6-zkift4}*kiib)3TtF&Fd5gMBvuSO0m_*>cM7-_I=ekMy^k6 zGnS-$CN{HpYGfnLWFOJQ8k-*%TVG*S?d&I8+E`l0k5~*fwX}j|6o|5|Y;m*LH|J=6 z;C(Tfe5OF$#a6dci8hv6I(&>6ZshpLg0u98FB!j5)X&e&5x)G&1!N{oB4-;*An&Ya zhqX2q*U6IoB87!SGh0G#+bRcJpu>RvOFNwbeWywMFf-FutX@}BzOFW;mITWn^oY$E z5!+yqX(d?RP!+0JRs}oI>;^)QHq@>Qm78k={ja>bdaY$f1lLuYxw7YMvWD_yYs{Q* zG-p=)g+YwaeXPIe@KLDhcvVzN=WTYf_*SusRTqiCAr?cyg*AvIqbF%=kOuu_o=Sfa zf#q1W7^&))|Ho7vUhBT6s+HQJwH|gKX7fFEs^v>NNa`D;Qz(xqy6RP_xFY!;G=`># z*Cw*~rtRC<!X{BCEw4yG9n1gy(Dj4#MKLR4B~l?PU<)gj)s&ZSFwG%C8gyG|v8&GL zYH7AOXOR~crPBHptCm%pa7FeCln%FOGw`rZCGS9$n)1*oth`>eU~AbCJwvt<YC3gu zb`D~89@F(Q5zG$^&koFBo~BaPqn*~(-)$*n)q7ZVoBXeW{-bsFI=$lk(Ua)uueO9( zbt&b%p|u_D6QrD*wiKDg!vE3Jy?Vv5u@hKoNE8@jySLOYSTKL#&`U38v?9)Gx`It9 zqUH6<Ev;1Y9leR=QxJ+PWxu7C+O^Wa=KENz@JnM61z7$?$Vu`UgM4!~oiDRHoJRk+ z=Zu2neb?7!7qb(ZXr)D$eX^P2=mUm-_tvK#`LisDwcEg(qY3MDGnVpZ=hpBu<~)G+ zbMZEw{dTkHKv}0~a?WPkwg`VVn%l+h+)Q@tE4}w;``C|2$Tq{2ZVy@)NvMLxoK3QM zdUNB=gSS|`#o<9biX=8U*>5(BBvwJ%E@e;Xt?c&AqJT~6+-Gai|3g}IUWs?sh@8YJ zW{B!^irsQ_t@1q>8E>=9VCO@xjCJ$Ne@OR>+Sy;UCgwiEZrLK5v)OCfkuTW%PVwL_ zS+~t8%Gh*2vOi-5ou9A|HkYy+bwBaFCickYCibG<bl)dZuWUj)JF$sKWQgX1Y$+|o z{<XPPTz0p3nBAhcV}P~7oB>I*q$JM#%SGMv^Jo(5if?6;J6K&2bB7kP+9u}N^T7hP zp_DzQh4z}WU*xR4ZXp@Tqgy)mS{ZeP3l?3<e#?v@dND1sV^Uf3CUFEUi!tmlX;d6~ zaNjT4OBa)_U(`g#R}h2!OBa3?+b#mTW<lBF+56f1n~K=Y2F>>SoBZrnLzLR4MNYKj zqj+<LFfDlQ0g5dRPYa$V$~Q~%a-5yEsgM~&YVl7#-jL0vu)0>73tI`9T__8%^`Q^z zB9Drk6L!lKII2;kB;ydpRqA99lJU~a9=`~D`Ns~jxM>yaxK_%3O!j-6W_n@8rN*G- zb8}YR$l}}YMN_vM{d{cSW@Dnx=8F!p4cNtKs=1((%?h!%HG*SANBx&<qiHrVP4b_$ zd*nYp2+nFGUME96TS40Xqi&q1GcOELKk8JzXP^14IlI_5n~8O^8FI=jOKr00%XHP2 zh&E(ylYD32ZpOCd8EIO&)5uM7R_4F^7JGd&8N>Z&Xs`J@Gt3^dRga84w51}PLo~|I zrjkycFvthqzS!8P7uH?M9$_8qLyh(zqG0R&!&c6&y5eCYJB5nB)`-A(w^LNyJZt8d zSrgdCg21F1wZ@=sb-_ym0f&P<wXuy#9N^7_pWIkL_+johhIhM-E$Q61avO2Af~D+V zjTIuJxJ4|?xp7bNp}BjCX&=_ve%ZY_<8Cjk4CL?laqFC!dxPVj?cBDqWMOvYs$g&h zd)?7daCGmEe4~GAeh%{;p$7IYoH=_;$u8>Y7Z(|Wb?WOcj&@4jE)C`{4!@``zAhNp z&6c+x6#?cyBC1wmGsq5UYL=x+7StVX*|lSL%Z^>_ac$3@V(|~Wj_$qS=uy$X?9xwb zMWrzyO@cCGU@CH{y+4Vh11n36YM;my0i$o~QQ`Z-sw0xCMb55#<2>K1Vk?U`2IwMb ze|fQ4wwQ=)2kk*wLMyfM22gyf>=5nZwO6u<{gPZcekhv=AA|gd*@o>H;N-K9s&&Kt zC+&x9ob1%6ANJFcW!8qu#&qpx8CdU|-=y_^s7_HC+gl2KyBMtTuNQYpYp3<Kk$kmh zDH|Y;+*FwzxScH$6=bw8>wc`}n?qsz%gya8b4ptBw~C1u7ZwLtA3xb;+t)2y^8@U{ z4z^*>A&MUU1G3pYPO)QF-QEq0x3ggAPa@b*|JsgmB|jO?V*Rua&nOAx7w;&hEqJw` zrFZV4MZa{H;iJiVMNVJV|C;HuPIOM1JH-%<?=_K;DT_MAS{Cwmo#)eRSsl^yYMXAk zfqjdn_^^h_{l@5^nYwIKk;LtUuh`TqX9Vv~r|=PjVlfm49@WhClf^c(djA6Eslb0d znjRT493^j{Y2US_lj6c^kwMM;Q=?c>hC1Yk1#BMeDu1@^sAWPTSv9tyo%L(3EN3xo zthRLZUfSMf?3D);jdEiDp#8v!{kJEsVU0=L<;+EscpJO7GkUX7_PV<A>YA#J<ttV3 z2rai0Y^nFZ%8gEEapiq0N#A2jkBWsY=dw?=_M<JNr`I<(b#A?C*L|#EPs<V%7~Vz& z4xP&innlLL!^X2z|I?QR53!X;&aTZ4)QL>0bM=-^oNyh}nug`j^ZLv41C;wO@<M}s ztc7;(qSTFB+B%CJ>;i}W(9b)!TN^B=NLk4|9eBW|!oh<_ws#hbOv6d4#*hBf7VEo| zAJ)OjDl1$?wjFxZ9y+WQz3X;d>ZOD9lA#|pvbq_9I{TySe*bB^|3Opx-5Xxo;Vr9K zPg51D_`X}-@QJbt%;9Y1m>Adn7*}uoc(F*4YfT?%(|`S+8kbh_JqBfy{xst|)mlMC z>Xy~4wc3{xSwVYGDjJ#9w=w$uw2*wr8bb}2i^^HQVlkqr_`un0HIbe?wy`v)EWdac z^Mv*W7gU}nRrFgq^|$@csmPN0hpR{q@u-|&eXijkN!z9D+y67N!z$M-uMVxNUvaW< zY7<Yw5m=cW{@g)}Iy#VNQxNe|hSL=v#o@k1Y;hCo>t~BISl@!Rtf69*j0dewF{_e= z+L_mH^dQM!l4JSZe`YM-Jr91II(?_D{$K}eeor~zY-wHp_>NJ1r@TLC*tQRG)TpY~ zg+)H;gRJP0M2$6i89Df#bga(eOAl`=5x)B<)c;;X2yfeBo`t-QH`=O>yOFqB(OGin z{~C><Kc)ZML;pS#`~5#0^vloRR;*jI-qel!Fs^)sEwO~mp}czSGV2snn)Ps{CfkzS zrLcKqYn^5pQLbV?bUW$8LpvFBM144@W&#GdY;9%L+KP3m=}0%2xwT#BnLS|IB;j3I z+p?OP^6GHi$cGNL-guV}Hed#q93wM$KS3XVMQtu7T%PCTm)*=_N?E_sV=ShK)s?bG zw-gk!r!{F8Y)Wex8{1J*#_IQ+%^FMD!Vv4Wr#M)~;+p52!%9O}jLUg=`uS{iMQ~eT z4omA;$f}E2LMdx(Wev0+C}m&9b?7A*psnRCv&imVU0+a}Uovysvk$UC%_G^_MQo5L zy68qWQ)Eyf<Dt)Xu@UBGyUEECn%K$$mR`yxwb!xaCbqhXB^R(1QOeG5o>j&?t%vRu zRR=73a@oQiYz_siC$-Mv1!b(RLgu$QnWv3a6tEtCwy=~9ERye~+i81{zjb1LL)n4} z!^-B~vuY-*KLR~e?*Y5r*jaiOtwAF#_IYvbj@6`r78Vm?4W*;5D4kRL#nq!n6f<9l zN)<1^uXt|H5k!l&*LRAHZL2RAfx2MbuDXe9$J558q4hxBd91R4buVRCx|=#nSWN37 zlCLwEAIuN5)QLW9YG;ASt*S38W*Mby-=@&G%G%lm!4d2kBg9rVvDnb8@b36h;?Uz4 z6w5<`jq<=CpZ#uAJNu0xGJ@sQ+@<UqV~<Gs*|fRrj*AM|8;%gW^CJH}<0}`)!w2?f zdHAQ##@iTD^0r`hu$Fm661$*)rIxaqrcX(++X@4$u81W3tS-pjsBaeIcZ&hHoIf}x zkYAP^3@jfR46;3&ju87UVATaIuI<(AVsXW+apk$gwz1fXT6z40O&asH@2JcVT*~JA zSx&`0RE^mFt_8)bHlN2l1+1=s-dC~t^0>u1nRPg=gVOQ%2On=b#84Oq^R%=0Hnvgt zSyH>mq75fixP4ksj>YMBvUY8cgauCag;o&^2H3S*jPd%e{9+c{v|kj9RU%keNjr{l zO{BhJ+J!pUNNhig{SMCV+=Sd~m?#z9at@13l3Moq*5*CCnXiM&UZ$hO$D2D^K0m~2 z3T_vBNrH;46Q=LlD_(z31gXe>X>C;G@-3p7TKsU+9!l&sMC)M@Fq_laz>plBF+(2t zIjivgkeEZoAJ{}2A;x}g7{hcFExSB8e#X}EmHEL+R)#?ru^yp61%p)d_nRR0ElfyX zsl9C9zHPfF5GSf+%Y{4)#1@N{vw6)>*9~7jfMTnh=$bjrqrp0A=DJNdEdQKrhZ0wB zDv*iNx^n~hCF61m1B*VrYhz1(Fc2I+bJh%eGMo`&zuF>751c!G7aQAp7b$03x+v(p z;tg?G{YEi<-^8ljETxEDSW5c7m@FuCA+>nN%FyluwNGutf&Obf3&<trw6fe%wxNl| zV-&Zq#D?Sp(Jacw*Pef<VQzq}7fH1w(Qj*->B%2sNtrs^ok$at+1S$3vXxdZQSjcM z7QS-m7bB+86l4SsP&+TJ7D*z=1|DfSyzTeLsro&&?Uenx$C#+Mu#HD>*61!^^`*>R zbb+Y7@7BPfy@df$Y@YMdrqwM9W(8;Dk1tut8anoG-L;>3-J^@<K+WDy7aCbUW2mpb ziha3RRD8%1h2QAcW8xT=UJ+oq<UMnWSneKUc5)fbK*phlt%bW<@&h@-$9}zK4|_=~ zWlP(SBBQuYEM#S!q}&<xcLvM%@68XaI>hGfVd+I|rT>Hd*+G$6xRvUzD$Z|V?lu~0 zJKMj-&tgmWvoQs1CXQa8)x;i=xwYl+-UEA~k4HC(0?~Ktj+R$R<b9he#01TX@64KW zdD<8`4qmXZvasyE+N1P;Y2%F@%)N)2+9nniXUlpA!ez(e4GpsSb7-f@JfdmGrw88H zO4Sbc6cwWHxDrvdHCy&@I9yBiH7;BgN3(46_Px8IZR3FKbbT{1%%;7y?CT5KL?$Gb zaZdEb`%1ha0x;R|-y2_tac&k#6SnspA+8k*X7?%Eo-%a8ocx@Uvg^tg3_E*oevmb0 z1or=fRcEkxKXvfexc1O{td~3=W-Cg?#G}m9w5v|^T_oz+nj>|)XnImgUkOmlmsIab z8$94pO&yiovBjTp+09tSs+$jwr}!AiY00mY5sj_wysd>LwX)YV;m;^$o+GuDwHL73 zJ^OLCQC-2}E2!W7thIhDdnu`d?OWrY#hy=UDhU?S&PDXupC7n&*x9q5I>s7~%viOH z%&*+antzPlyQV@M4~!oh6v^T;@%Z(N*n>$;f!dvcV)m;wowT}=oQF1&ktdmJUXybl z^N>w91uqrXi@udIGRAbyBGdm%o%Aesfy8j~U${kcez3T5{?vzWqliNJPuIbe{^0hr z(2=0bdD6-e?QDL>W_Dp`AV2u&?%<+r^z73*M2E}WqLZ|6jJ1jkv6@z(gKT5-TzYVq zJX3y+BS8LQV?oIwO1;VV9LE<7AnY!dN=wBBMJzSM>O)tGx<mJ~a*^?R6@<Q+R#nz7 zBz*gh9uu_zwnB7>Oj=t?MK&vKul+n<)Um;$UHBTQ^%IRo7S5D!a<<|#Lr;YWiSDcs z(mlAYX=`=KE{7qf>ea*!QMa|QlA`~yP3_`9ac~#AiB{COQn8P%4zZrpen9xhYA!7O zl*P4vI-13zm21}t9BzG@2o=7$jy$WRHrrD8`xI^3YsZhx87J;w@kOi1hG(_pKU{o( zR#1QOT-I0=ye=4Q3}i!{uhutH3kQX0W#=7XJwzy29%QwCsGrTK2#Q^G#f9Qh9L1;5 z7$y#xO$+a&X$xz|=Lbhm+BRoMZEam3P@KamMbY89!0!S(*;88U!$XfD_^{eiQMMqE z6S!b(?%DSRikFf9vigG6bJ@EWiajlXasT+))>qk2d>v&*e{Y$%7YAz&aUI?zWPe{R z%+EN4-}zOGc#U1|Gy3bYG&`|cRIuxPr3CyUZ5O+SHiBhFKYH@jYH@@WRg{YH+cc9K zt+xJMOB30)mwbhGi1Hr~tnQgjWGGuJ>xt+rfJ*LcfQ7y568-?C9&5m2`KXHsT|?_3 z_7V9MS$E%IC9+M)ZbXsuJz6@2Z$XfGjRE@l;mZ*_oTbj)VqlPXUVRb17)9@1{~dMt zrjssd-de(XH?ifR1)50?v6?(rkLBRkLeSJ>y}!Et2&F#|O@wc%hg=^Dkwl3bW#VH& z{D8CO`XZTVl^72`5g{y{7Vcn6+Sr#y6RjRa?13#EtA?$5bpd-(YZ42kpfrHG;^IT> z(ai<yF}-sG+ordEx*$MI<X6|fyjPTnxol(6f%o!@>&ETN6_1RWxa#_CETNtKa+6V@ zvzH7ZdFzl);afP2y|9_)MQ>#(ooo&D{QFIv?4Th!UL~?9QVZF_cJ^PJJ8v7C%T|}N z<W{z(fcgCFS9&ST{d!urq>$wuBDjEM7RfkE0=AKW+bF6R5T#*pe)hT6_US$m{ID>% z&&W!HNI5%RW$Qz$T8dvchNZDk1&b|Wp#qlFBr<mlV<$HI*^l%#wq_4&+9G?W^*^PR ztuA26es-f?O3swmE;5Kh5EXAM8abQQHi?GIg88Cvov7R;*MgcoJ8CyD?~wp|AO;`T zwbHoXsrS?St%B^b(h8t8GFo26-mdRpyJ;+M*SCtnpaU6fN)sC>l8S5gi(K+GKbuUZ zRCU|x+QPjwPmir_-?~*~{xU#a{nqO*7DsCWW!DADSTfmEF#o;%EKYQaO7p0brtAv# zyDg-ULz<tx;1W#%v~i$96l}}idbE++__G&Q@w2sHE=RnfPbqQdTG8|=B_B6GkHr3E zNE^Glk;IrVmNaGzOD@}A%bt#JqL@g1iSa>p+lFTLR(yf{H%=4<<kQB`R@xa9e_mJo zN(;67PPqtuHk;UTM-V%(n5HUhLl*C0eG8s&;1hp@si*ZO)=;n%1>EM&tzLfCOM5!` zPi=vj3bCaj=Ia#2B<P7W;onzFVYdB3^Mm*b=i`!-mtMZ`+=at(;C@c<O9z@VKbLm0 z<w&?#Z}j4p-%xZrvA=VlLvJ3i@a1i+pP!W-nVrr0SCE8vR<vPF?A|&Cq*VV_O48f! zG(U`H{~vL00^e3~EsS63IL>4b+1UE1*|%6;0wIa5Bu?Taw!FnlEGK{}+mb9|%Z_yA zC5v6;1SszTP6&mv*nt9Vzd9=^6gy#QdEf-f<I&;-UTF(;0;RkH4qKru-#KUIUR~Md zYya=-@B8y3p1HH0Ip@sTX71HSKKr)8MhW6H+E&|rqFc<kY2^`TYCZ0?+qckp(I+st zI2w&^b#4$BtX{mKa6de&b-%u92{zcZnR@+q5~;g8H<J+mFiCVBal*%1wrg?0BIk9v zIq3~(ZlZF*eGr2aw&5M`KMG&853X*83I0XRcfo$TIx)w7r44RyeBbBn45y1(=*obe zf9)sDufeai0r6g7DY~`&d1-k#&o4K-NdWMickrA~B-yX9_5T@Jd^t?*u3H`0Id`#Q zsIKI+)bxP;lGzJNU{V+8eY?=Ern+=S10)j#AVM;6b2qIuNel*jfxP|5IGy$@&S2Es z*TJ&t+07)!p5=+3=GH$?V)1l@p?EGyWILUU(s^zWY>eFqeKypZyW#ZK-o<FH)m8m+ zlM{Yt8(6$(-CS2R4XJc3G4#bT770Z3@#wp)5-E3GGw*WpO+MO0B>3Jq)P{>)s8Lr5 z9T$ksHf=d)x+uLH0x?3%?=}%Bc8?qMd{;B1_&D923|F(O0%d(_#q5Pdb_4p%AHi2! zb-3G3a`nijVeG$S9Bz6sQ_TGFVR){+3tqA5@N;dD0tn;X!kw|Oa3QvRDol#{-=_>? zzCWBzn{P_&7TA>iGGCn&2gEiAq4O1}+xhY8I+`BsttBqh`hQ|rri*O*MYEiFPLYmt z9@-*O_Ok7OW1?q;#y9%ujbh;RHN~*O0T<`P?UQsAI{y-b8VCG~a2!8?6Tj^zAiB@a zzY`yR>ql404j-Q*X4oCGL|R@!R^auW`(bJ?_<G?WUG<qxI`5f=e6pXPo<S6Qx*@v& z6&%T?=V$n#HFj$dl|uHz$FUo^F+9QG*}5ywg^xet$FI&3UGQhkjRm*(1sR>6pN)fu z`#_Iv6Cd}l69Mq+BH&CFGd07ACT%FK^Cw$Q!)>S+{zVKT?Z0~i4f)<|2j>Zox6ctX zcA`mfu;rjQ_LVdB`t6w6O&PI9pt*)qO&xr|nYvy)w#Qf1aVvuH`<fVbeDE6t@^5Rh zId9)>vkB+kU1G<6D2t(=L~QyWHAKfl-yrS!QVp@)kH!<_kGE!Xxjom0Wv6ct*@5Vu zO7a?Sn@v3R`3<z%Pg}{d|NXgQ2!ZVn_7brWShyNhH^2wHk{z=L1lk)<!aMDK*y@EF z{AoYN;)iFEgIJk%0~+wIJY;$%^>Z6yCx5KSe%CDfg*KSm{YR1Na;;q~E=KlPyPbHY zh<R4TlEn?jVMyyej^jRiLv|I7`yaDo_|$m=E$b`J-*^LU)OR;g$)o2A{bnqCCrFC$ zdvmDfwOXRsM`xq=w0LbghsQe66u`XPGfCr;VH+B@wCZF*O6Kq^LeWdLG-BVmqU)9? zovDvv$&*yV%=||j4c@ki8MnOVOvReLwPYXPc@ClzGP*vc^*sqw`=oazw(;L@wtfsN z<i1=p2#<G&d@)a?7OY*2wpa`|w+_eJ-5<kl+pw#$Cjj5-m3VntoLEb)n(ZcumHcG! z#tynJ{u|VS?pII~t=K{4z)T$)9O&Z>b%H<Nd9-dFoM}(DL9h$X9Oh%k-L_tLLFfTz zRaVu!D{uIB`-QV1GC=0><ZLo9COdwDOSpDeEV;7KnVLo><6BX}T+hU8&eNU32hnob zaa5#bErzxjj`{c``&^s*<^F4zAktrJq@(2@O&?B&O|k3Y&2inRXVK7c!<76q5qJon zP#+@V8vF>Y*ee3q>1RPfzdZ2N96vueI3MG@pYwfiR&N@*FEg<0xgcMxnKR7!Ue5QS zC3aHG5f^O}>-MI>*@)J39{DLb^3QnWr+DO_&FSU5&iTF%@!=WS>KShJ47Yk_P9NuW zng2x8@pyf*<@4OKk6S)JXOQzc=lf)%d<IKr5JfgW2>pG0JS+!zjt4l*13Wipfb%-% z`(&ehUbilhlg$r^xCuiH#ZToR13bu2c@QJ7bG}bD%4gtpxkC9M2O<6QxE$mdcYK@& zIX1`5d7bl!)M2=^n`b;E8^6Sj4{_s{xbY#T&`UhyAvwu&JmcZuAm@dA;5Gb=Yn}=Y zabCy=u6c=T4h07|FZ7c<>p?l|%X4sCesasFE`A!657?HLv!DCE!T|1P0AFDM_cMU6 zFo63dfUodmMh6;Tb_I!-y<GAt53!erc$J6P%LsXuhuABJc$J6P%P_nuSF%^G<aw^? z<C^DXO`ohe#x;*~%`sW?xU3oAnxAsb0Fh`8ddev<F$T?kv9ui~4(~W9&aX_XN1t`6 z*u>&vVlRtR8+=-a0CDctGu=wWep=VZWp*qZFw3&dGTKP0FyAc9E;`VIVEizsclvO& zx90S%t?Cic{l8wl9xa%e=wj(rkSl0kzFUW8TO~HS6HVG<&91BfMD!>;(b3iO>!b8E zRiqqirdvddboipSPx$v;DGsbIASu~S^!TMMAM<<KNq)R%%ZFeLzKJWI(uF2w*Hdsu zN0%r#Dw-FiL%k!K>O%XsuY(Bk0!qj^y<$aAf2Te5j7~ALX34_4aHQ|@sPFNp-)(nr zen2#%+x<6<xGmN(2<|>`h+eU*GgYhumpj$TqjsxN=b<b7L%0}aRUjYEb_8ISpa^sp zx+^s1)@*!u&(0TT@>4KBpC-xggRYL)(L4!YJ`d%_{F5s0fDg4^u^5|Y3IedG7yhjy z27lCsAuM7dL`rxoG1sH^LFn#4C+eiu#f22~8L-<Owwoxn-3>F?2fn|Z0<$kryqZ+e z)@*)q6eIn9dv+{ip;%t98p-p6VApO@Wlui?%m4LEl(${tg85iJR7cuu_nEYteply^ z`7}}a2pMH`@w)Hnt6->oFuFU>l?5%t@1N9V^B|5xR5T|BUuweL0Q=B(@82%2O|43U zCv50Hik&dfE*ym~z}arGuZ3iF;R~(!|MnM<RpF!7VZ`hNk<tt;D1l<=ABpqjc|>XY z+-8`?*ShIcG>Ocmq#XK#CK)9ZoJd+qe=es##q@_lq)Az31xHxu9%GUVrux-|Qqt*P z2FVpd<4WJQP3$}<(kjz7P;D@IfU4gN5_wU*of(6hJNoiYo<P_1AR4~0rR|8|+k&L~ zzN8(Q*$YMakm(oaiDpp+g}p}_#5%F=h?pgMI=2bu!J`Mz-?U#bTcjaN=vNj#lIJQA z{RhP1gU3(fq)~YmQ9>)SlUW1v22S@#mxOQ8vU=Z0f7ofGo3S>o<;XI8)jovQbN({K zi7VREvTzAnDz|OyWgi=1{L@r@JC@wBk>d9sO?8MU9I~NB9qSNoI4^dZEQ9CiA}eu| zPOmzBp<(*hc4>=zLv%kKt%O4z=%~V4k-c{DZs%cfyqV13@3Dn<YBpJq_p+_}&g^V1 z&sK)eeRJ%YHoiT3zpWdt*MrebJ@A8wF7zCcE2M3a50l-&{w!x&Wi4_2Z=y8NLlZ^* z60!7n<+5BXJHVF4AF+(%C~h(lK5iG?55YIlhzeva&T@*=;zHPF(|OwKdf}JaAQA)p zyGJ_YmAHJ=m+gH^7A_GN1Q!PC&Re{2$&UT@t7pwU?96hW@Q5Nfs`bK8I~*{eWjj$m zP3&5{h@7`9XAj5A{uHHcao5Bl_(2C<2eyg)<HtH-hMSBvokJ}7@Ow?f*6-{T7gya0 z69xlxO!k+p*!p}#w#N<UJMMI5p;s=>-@O|q$Bym|WOdpvJR81i6DfP3RP@0@k$wCa zxET3+ll5d72GN-}A}t>Hpxr*-=JYwg>4YI0T5t&1vpQjH&jkAg^z_SSx<2;Sgg!+1 z&^>=b=0%NhY%eYnZnE|AnGsyscYN_&IJ@t7^V$Gzy<Ygy#9`t7Tx4v4O~dftxcTmk zW@9=4(|hl5-C38Hm61oZiaKCY_Toi5qkG`Ap52p|mIZ&F*o^{97Z>2v?|EqI`%;Jp zPI?Ha?i3VIn+A`=Ct;By8lcTDX5~PeqoA-EGW>8>AJjQu8gKh2I(kK+NZ%FQ+q|gR ze)U;!_Y@ue5cXs0ml3De`m@q}bAJX$BHi%w$@!ROi@R@!-5vRG&y;~Q7yLFn3~y>; z2&QGj#(bETe<w7tNh#()TOVqkVfd&$8~)XnzZ5eLxC7P81SH*5G&;lfc{V!No*=ra zm%=*7wJTrj*(a`l=fwitw0)444^MaC$aG>AgNgp*5EX-eaOR~Q3*PAR?b(s%OrMMY z7B?1dUsVvusyl_$6~O~e5kSwmq#q^2sl7*2T}WaFOdb}$g|i1>6Y|9{Um-uTSA_P$ zWOV3Xf|rql?5VSy&Hy~tk$-H-LYz>vY=e(+XHM!ny%#!lKYTSQd-ak<X-@dIo-OKH zU}Ya%L|%IH+QsN=c8l3Z_rcD|gDw$lcEavR4BTDNvvoi?Ba0V3wJrcxWW($MSWc)C zU8&AGXO`>ZwdtWx_I$da=rmkM7wzZ7G8eqDps1DjPyD7$>|C3kx%+f#TDmBP4=IwC z^5Sh2XxZFN-t&t|h&l>O?Ae^X2cKU{qT|;6n~4ctNpgs)ckQXOMNeK7x7D{Rx5LFl zDCg;x1G5y&_6u~5?U&5Dd7u5tGmpah-ovZ{9QYT#=iN#9h4AL)Y|LcC?>NnWP@L~e z6IFM(;Lv7NdMMWXI{MHv;PM#EjKRvT(@})rmd%0`|L3j5neR*z`8{x!4#O>jLbqQ& zYc;>VtMgy?37F(>U9f3x!CV)wx$03$-lab)HRWL0lY8kvd@B8!Ig|`jd!y0lZrIoh z)7;y{94t+SYvs#Ka0$B8oH@89pT!{>P+*ju*ussXs^SNr%RYXi&*p4Z^>R|SDtl~; zTb2C+bX9gJahw;;il1&V1{g5Qp4cL1`F2Mir(bEZGyT~~f9SL^*++kzW(B>;oV?q7 zgfH895c>r)_nkg|V>B(#l@}G~BX*xp(vL^ce!A^kwD*Q<doh#UTyjKI<?T5Mf2zej zcJH}vlpI5~dQe;{dQkaCqM}GRj~{>e35{^uEmD%xcCKAKH+`Oc@i{2D?N{5XZxR=w z4McG&JAANJ48k!~Pd)Y(GZ!K6&Jav1enlh+CHz7(ouUUdQ)Kog!*}e%t?=iqI{cd* z_dl9hso79Q+_P=liEZ2A60|Mp8j7P1u0gH%E@~CAcy+-xSTzK%X#SJ%i+1GfVfdtd zsBl$_NQLL^1CXA5%fSUjS1g5)A1)k#b+H@a11$!tdSRgs>+|6)v}^t~+I#2DQ!pry zC8u|bLT4vD*phwp1Wb>;vmSk22dr|yGumK3+`M&g=RJtTf@oHi$XL~KAH1XG14_S$ zA35^|5kMp1)X_?ExgTj06lK|QzVNS(Hp8!cI{f$?V(<^HCk8*2EcByd<|!aexvATE zm$L_+w$Yob6Nmn^9a=>UO3CZLFdwdS!&yV3r4xQWVJHF<^j~dTX}|2O6L3#6+V3yn zo_iJ5!XIs7#)8%>is%)8tQE}=5bo{upPUdG&}hHR26v<FF<WFiZxY)(;aywbj#G1+ zJ5!?@c87PKyh+sU6Bk5L^f}>{C{6p`M4``zR$Z)s*6c0YVPK>EavQvFiyajgbi%QT z9DN4(r5-zlsDP*J_6+p-5L1WHGJF{ss29`IxTE298`_KypxO=CooA%a{RO>KU{5~_ zO(2oc&*aZn9C70}L~M0*FX?Ya5u(m*;%nP@k<ydpI(_P($XMMHK?AoN4RoCK<nFZ8 zD1?T0yeJmGgNn2ldBJfK2HSh#yXT1PPRVxgWG%unV-S8ic^G!Ipkn<9waFbVy$Ea! z{u;r`UjqU<*xm()+Yz5Xun!j&xwdAmq=TC_T^w)u3H+hG5AJ9mfP0}E4GFZDdE^({ z`A87Re1(sST;GRH`SmaI%KDNY5Zh4loI<KWR4+iXc5jEN!)d8b-Xsn3v|%>CdnNep z0N*0GuY|h`ck;3A9DpTV|7ZtA*?)yReM<+r6zF5c`f=qyY9Hbq=}#_5rx?22p2`0P zU)XS!KWfL79Zv2OuB@U3qUhee+ZY{u3`y4vY|SWyw~LwYoIq;6(3YJQS$vd(hyBTp zj_sl)OYDrosu-M;5B_{O#}9r7oWqt|vLjh6OM{1IilNFLb<UK^=S)9?dm8Pj2y-t? z$cL5~ou5p!UuA>ld~x0ORs98vn)enWR`$TgY?$WAa={ftutqp`2byaO#9}e?v^d{B zcg~*+7P&h29N4pG+g{PKuhU05;&fZrDRKpp2cc{0Ah-ry`_Xno0kv<Y$WBXxpVoIT z+J^cNOImT^U)p+6YBh@stFoey?iYIl&cj6?gWd}(ajS1{M+AMxK45pAy$)Ii3(}(N za3@}c<O8(5o5ckO`eEZBOzYm4=M*QzU1ITGdVU>++6R1{?ritRupWI6SC)O=%+qlG z@L~AxErNW}UrZkAqKG;Q;rBNT*Y()1I0H-XpQWb;oKE0~@h>)T%Lix0TzO8{i33Ml zj^qUbC`F?8p^wlFdiP?HUU;-XWCrN8iEc6c*M{C3U~;#3-MJSB*xS*yGhn~y4BCd; z@GUsjmorf;PVzTyz>OP%avgR>x<&Spn!;P!nlecxNGBz$>P`5o)>VLG>}#QD#jgYf zOL|+fIiGF6_$)ZpF8W;Xmdyc=wF^3rf3kH5&Ln`J7#~Z^%h-(_dRnQ&@5g5^vOb78 zr_gU4sB{J3J1CRT=RtYm!j0JnsrgXmMvt*>0G>k`e7M6MKrbzy?ky2qe4OUH*15OR zC2t%ZacwAv^<88pRJsE%!o@LIk6o~Pc0S~~Pr*VI<XCXd0GyW(HEyWW;p!N;uxRE0 zoSzTha<|c#9Lu+5ZFj<%bmeFmGV-CA0BIV4f9*hF^*e-SH$n57)&&#kKBrh(0-M}W zgp~_ou-YBC8`5J?f=z;5=!3<euftvEf^&P}GPKwzi-yHjF({yxb7N4BE$h2rNeptR z($Nc3^C9ep9F#G?!0wN6_vT*s6+ZMD5C4S^k94?$XnoTCr5X7Ua*GAzu;1YRA)FJV zca+<D;rtjnDA?n?Ubqhp-bd+>$^|q1*cvI-+2XFUXP$M#TT328iu{d~+OMW`^;E)< zrY<-(Z7`1=(t=&TdP<X50>tZlp^#-!$9CAJ4~y;>SBYr)+ycl#ojXCy_^&t7pe?Lu zISK#1xfgbivtMI_vty`YhSDmX@SmEy@Ji=S$o9j3v^n5Faxb04Vm==p$DNA)&FmO# zh{2h$hv6Qi?7L_z$}}79o{;T=_nHwc-<{ybjH5x!f`6OPTLq_^b+~PU13qaUf?FpD zM-}|J85PXU*zC_ZK&u}n_d;w!UlsbCNTx^V>izHA^Y`2sIMNC4w2K)%u-`uP(4N#Z zxU3uYw|Do8neZPP9cGZr=wIL2c{5BBGom|)31Z}GcR^4LiFezN!9IfE6@+g;Lhx!c z;&3m{`zp@+lMa$M=rSx`ln!(J;%9IIH9am=#10>ZLecv&I$7Ocz<bC_Pf!F5$vfo2 zsh{lVrg!yE!25b%G}Q^``q5}co3yR`dUC}1UDUVEpeW3oy45hDJ1dGlK-yxse-a{R zNO!{nlN@kTM-<#Q$&DEY-C}xRa}55JgwQ`dPDlKT3u@EXS7gAHL9yd$D04un8)o=n za0|8s9e%$B7xDn~Vg|i9=yP>0DiFI5iI&5^fO%c;WE<KJnRC#HpsO-3xA%&p2jO;f z--aXPeRZRHks7-z8SdUP0RK%I^Uf{kenK|fgo^cxh#PL6?0_%nRkZDs-I#Ge#L)u} z+tk2*be#6I^&rb2b~a_h(Q!j6jdA+&xbCOurRPZk@xN=L$gV<XUi2M+p7xly%T-w= z0tZ}Dqo3s#vwL7j>*|4@*mP*^g4;TV;O=Dov&-kf498~>>xiMS=Erw5_c3@JO_CSK zqlla`1R;@vLhC?1#iBo(DF*GAqDA7q3f^lUD8!2IHc$}x{TX`akDW(<0#m!;x9CSP zMbO^wh94#&HWraDQ<VjGj~|A+Iw&j?K^B}bh^@X4Q@UK8w-<=?wdwW31MhFnhh0he zD$T|erR+K6M!qNtAs?wS-vRmgNdj&Q@y8lwkZnsluMoZ=98S8j(A7l2$}gvp^4Q)) zqWI6#aK0CioF8sRZPb<IhF4m9d*I)b^;6s6=}iMLfJ}iJDFueXjb3mHys-(5@^M`S zi?*F=hSxR^!W0BM5AGP(3nw?x-OM>i%kC(=i`(S&1N}JDBlUV(1m}8lW=yz5;QNIY zuFj~~A&zx6RJqVxJO)Up!$IMn3s<0zy4DSs=fC!qn2lYJwhvHr`Mz0Q`_`dx5C!!4 z$;pGl7%!Bft3RGGWWRVy%PCQw_XHB%0kgWdFD%?xC<;V|nD6qTaM{`mgPQv|ylSJH zXD4A`^RQT4E4HJNaN%s?gyV-rPi5LO&>SnQfOGrck;%BIDtIX(^b^>DUbk_HGzy;W z=@2QxeKhrmGtYGzg}}GB^8I-m+zg`c<Hc)TQ4z>W6PLhSll3b2K7GmQP2}S5BNx{@ z;ICW!a1){uvA(}26PnPAr*ToRKd-w*KI;4KKhwqbTQ`=JEor-QY12~N*Tb8Lp7)NU zK+CC3`JC4|PZ8r!$BBVW;v#2O^riBpU!}E(nORG2?LXe%FQPZ>TDdg6lY$Q)wzD1l zt4(yUiTsZJe#+MvhBn18-#ad!Yx(N}ztQrGqE{5Oz$U#It(kmRVQX|%8j54&P-HvJ z5y6a}ep;+gU%hi~K~T)u(Y#xv)1BS@<NBcA*8O@`+I{ydM7ace(cJx|EuY>sUKj0& z!bLRyvzx@=UGNi#9s9KlJN+8#52MEXK6-6CTk~OHVhmo0I^ehCb$HVr!*W0TmOu6o zNrOA5Ag_E7MmE_o#f=#UbWK6Aemab%cz<*lKC@>REy&!xXx*Y6H%2@2`2UF0e%TzP zZy;k&7P==V#T_l*5mnnxZ#zv+%qohY-q%JpSR`;C?1N!m$N-#d?Y@~{-e&7MjT$N> zXm8!Kg$^BKNdukYf_@ZcA`5zwx?OvMdxD*vIMCrOw5y&2x?Rw}CA;TjrL*qYXagO& zeu{p@k2`w#wgteWTZpJ{aKneU3`FU`eFK*4wEN+CTVH>G?s9OO-*KCsE!la2=t<eA z9|iI8cC?3Yb=`|beJ?y{*E`Y7q6-c;wvgO;c-$bA4bWLp-5z**qK=3|cKjr4zXJW3 zXbg^OeW~yuIw60v4=jZ#-TTD(`*4YlZE0vSpf~mqZh6taSCDRg2q@(HMT9Sd-!wU! zAF??w{4Juum5SV9zhsuEf=wtOo<cE)Y;%k9BH$(4(Bee_r|5ZX56tP~o2U-j$F14h z^IS*7tbKt%sPo3-$HYz&?QlWg$7>hY!5Q7YCGg2s+|K)LgGWq;dI=foC&(}_B16H) zHqj>vb}w4|Q1w!gfom@oZo>4_HnbH){!uJ>y+x#S!p1JRar|HutNw~i_SCrUA5tu9 z3m+=JrHO9)MKi@iKY**~<Vm>0&9Dmf_%vj)nYswWgaLFu2jCI(>%L5K+b=u=W|E{n zv=#r}Qg*7p3Rd~Iz`Q~DO>69P*yJw}>+3$=DUQM{;dpTMw)C43VgJczQTuETcR?0D zzQT`(Z1f?7nR`SaO8+|x&@cJ5hMIUHPT!pWokBLM@~_O`s{?eg?RCwFf7p_nKkZL- zW;xfdDr|VXXd6r(Jbm;ay6t-myw7rri&!$PkavrElaJC@ubzT)^TC%5DGoYiJF{!2 zI8&TBUh{piBZ8V~Ux)tj+{N|H{o+DwtczLvIg#BWAm&A#P>x0l%79~<8?K8%=CJ*e znJ+j`2<HpVc|6lkDEd4nHBIEALGFgXXgV~a0Guoa>=#bw7P*AEo5}GN%U}~-8S<Cd zFFg~t<Ic6|h?w7PrLg-xyZv&sNM|id4^)A-8@?GMh|hI{mv-NFTfRuyo*vk^v<2GS zkKw;ir89WsR#(eHXJnta>83*Z;!SmT#wsUFMZd9Yk5~%pv*BVlnmZ!pW{=ptD1F=9 z#TjHX@fQ0KkYz)?Xp-eQ(SjB;hFxie*DVY*cQ)^cB0NvhZpbf2>j>(HZhbd*USPXe zQkCT-3$i(%&Hel|bT~30TlA%zzOnPhf^X6xSBi+<=-PH3YNZq`H6FTC?3c~F(e?3p z@V2cxr5`<9SKtKt_Q&$loLlU6&1PGbOm6^w<A44J;NN|zFY)C^%L~HtrFwcx-Vy(d z)mSg{MH0T$Ip#Z(mKP)C=&9HvBF9w)P4pow%S?_@AI!3R<7)Kx$iDU5I00Wyu?fGp zsCw5o-o>3mk)9{QqAO786yJ1`{G1Xy?0kS!?(1+d@`WGHBQ<w&BT@dosrj5Iq5r_t zzK^l<?>Exk+&xv$t)bs>tKC!OJ8ksWPPgj$RjvsXHJL(xrrEC`_wx*y%ot2U)8&^N zNe&;GYM*Bl7f}QdchtwTy5NVlE;!Nd-vK|cb<q}p30*F6zVZJBE^!fNl9J$ybp+Eb z7t?w3=j#Zh+b>4DlRhJJlB*uzs^4?f_p$0i3einL5q9}7ROUm5<M4?S;(`;nh`&_{ z?tclLs|{EAt5Q4h@wQ8(9EqW9fYVhmE@ES5a<bshQHgwB+r_*#j!?~rC5yX0fdwd* z%ZKO#d5^-}>_|WSGRb}=hq99S9ViMoCk-d}lc^8s$-~KL;tvIU;`}Tp2d9(ZdG`?C zH^AJbh#}7DezP*$tn}X$pt$94w7~-~mCkT~R>@a^E+gtZTR9lOhvzOE;<<@3_LxZ? zJx-p)CBTpE9FVx9f)<ScT#6=D2c2i^uHvg3m-^`qNc4@a9_+kTIQx70N3HE}C;ZJv z6HcY&okeGJc6ec9H+>zVe`@zw@C?M^xm3b4q)-}#>rlXKgU8Q8xyN{NF)9EpW4hS% z2NcEdCLn>031fai=fDHdlnvAKp~(+B&UU-twXOVKnw`Gu#21K@9egg3L=<)?q~3Ok zD#S9v<>yzR^t;gi@o^a1Ec`ruKvCjLA`{$tsYo%3;S)DOwBu5AVO66)xdj=bcVCLy z*eH8fmYuvr^vU%=Tkpus7lGb1_`_L)&_`c*I~|Da+)){L`Zu&h*mahO;V`GF1OYHG z)&4DW>D%dK?k{H!<1UdndUhRdIEd1o`2AEdv;)FJX}+`*$ZBwaH{sov*_YY^l~FXk zQ7i4O7Wyc1_U}=H9Sl>CFRrl9CxYHm;jeTuisYT?Se&8;UT>)|@cQ``241lncOtS+ z=1ybN{lePaPxrqu26y$}3^fB!9D(y=!YO8s)u11t`$M_T)5I7xLj=v2<$}U-2d+dz zk6$MLt46A1Q2T%MbpTQ&|CG-IjQnQBSSmriUHz>=R08MQhCde0mhYsefi4`aJF2n* zn-~G4MeW+#|L+j+|L><fJ|tw&r#!^9+eClCCi6QUVrcBoc;qsEUi@18{N0uRe?s7h zZ?yhjery3tJ-$|bl%c?gIF5)|U=u0y#>Gqg(S<`D+37HmE=xb7k(^)3FFx?$5r1sY zo=jJ6?B(-e)3EEnf@@hIwDJe!4#_-!+-`-;lct3E$$iNSBqCqto!0ozVYI}rg^Xe) z^D8213v`{p#a?1Nae@{^hxm}}PKLAnP?sV<2RRi2Iwxlj$fp$f<VbkRrh7BrN`Vx& z9T5IgyrSp+IV<}6TgNft>!|;@05O>({uzeEC-sq$4+%~C#@XJ7Y#r`FfBb~j$F$qR zE4}XTZ2|%@RPQkdW(cvsYV*b?O?*<6N`D<ecvG_txrjWM^aXhSL7qSIKgV=}fjtUw zR>3mL5@!+mx|A9z@T^96U;Lad&lh{(ZH?8H9ev;!?8GKnX>fZ-*Kw%lPnqw4Z|I%d zI$?V3+AEd@KE*#U!B3xpSh${7c5f1`?D*fq>_1JsB={AhotdxsK-fR#o{Z&_@a}s9 zvG+^O2AK{ha)|i_MG(#}*;aSW&5KtTwnH15lCipb;WEd*ENALmH01QUJyAHr0lT&g ztanD`e=V@F4;+1W;eX%V37+BIEM-dhT}+tMeT?7jb03hFfMI+*(BW3b$J?4=d~|o{ zW?6UJQ!rIHKEwZD+Av(!)yk*F{Ng~tA7RNL66?C_=qtNtbVKRDI#GP{t$d#JvPSO$ zUMW)UAZa%znO%W1#UMKdXA4JiFwePUM_$kO8J<4=%O`^m(I3HaiVFIZks-ez2fbT| zd1`hyj<gRtQz`hjKWP9S**XNN-A-7O4{7pRWM8tFo$7>pIz;|rXAx}5FUVYQ1Dw_6 z$_jjH1*ea{<VxT`&EP_MT?A_A&v(RPaVEngO#Anhb_&$*vvtGmcC-Q~2zMtmc6UOk z+r?KhljX%hC!jTKlqBEcys<9r#yThbpkrusVT$n66^YRmPqvHftR<B>P4t2Z+(v)a zh*@`yfaq?9=v{>98N2-gThHmEr%%Gb)`7dZ9k~$pK0;P!dp9Es3k3Yd#=Zo9sbeY| zvNQNS@7eMIG#PHROFVPe*cMCIzk=*K%w6e&9W(4{)N3})bq*DulMMg9mA?fdl6mk6 zmU--#$i~U=xP6#RQac@CQ%YAA>_l#R27GfMKnuZ#Iq<?(Nhn;jK`Hu9@n>84`t&xt z=<A0kI@r<v&vuT+AvW;go_20<$ku&?`1Kq*>t!aJM(dLooMytOo9WW74F+xYEE~)q z7^gvCK-C^-7i`Jf?AO?ya&jH2ep!bA4A`$hS#&*1ryu>#<?cTw!%XQ^&%dPbKQImD zuNo+6z4RTFH#_aN%}c6M)0!K?Fi|+N7N^mNbSCKhHfmFL6!y34v!c6fr<}fw=)1Op z!nNz)ux%@JF1&V^O`sW+zdQgN{m}r)o@SSe66a#Na68L=Q+`2Vba%AnTK(CZ4vKWK zOe2GW@7VAQspM~r&u3mbt+54_{Oi}RJWd}}u|a^N3Mh4EFo%S7`xVpLqHxZzyfH$b zGt9AMXLa6$|Jw?Tf;MYbHj5>HX31Gwx;oR~l0m(sI33!uU7fg)RxuyySRBDQ18+7j zS|>lq!91TN29gUBo;nZ6FKhQDLlAc$O+um5Jt6?7HQ_)#mkq<3<EJ9c1-s}P@Xxfa z2je5yFPM?sN%7XCWZp9pF@1~}^|J!8WT>D^(Nnu0PMn#Z`nhZ0*gX-Z+4f80K^2~D zJ529>B<n_g!5wyYpuT=a6M7(z@4d53kR$P*WGIZm6nZnZvl7mhArf|Aap)QLi){R6 zA~bZrv;)e99(;IFRVNQSw~r3xd4G$gTvCqi`FV8rz56w&X6XVmr4J2$^=);_B9g&v zPq#^|<eSClxKFfSII0+1XAA!}nAV*a6>0F3j^Qf!xi$cIcXW#Y7F?xs`7ur8XMeW6 zu;|L5C~@uBwg_4st|~sn4g65FUQdDYDKVFr1HL{u*KrM9>=h|Twu_85aUt%AD!TtN z2ph6twgW<gFvGo7<Xn?;?mUsHi=4}Ig25ZETrcX4kpnz(m38E$^cv~8jxtglBIT1S z3xi_&U2^OlICfv+*w@k6{G~yUC+gW4_11cHEvg6WJ@ji0^kXNU+G<b8*P?#+#6zDE z_5>rImT*w_R@eJb40vkvV1q`+3rPp_19enWUB7|KWwx<qLxe|cK%?0cM0e1uH-<g_ zu+OK_aK5mnhrOXly;t{Xp1fjD#M|ui_(HYD+`&+-uhml@#L?K^(LA0&kO200!ah%Z zV<_OE*{}dxG!Rft;l_q0U0YRDk+M7^BjswxRgUzO%=C=;>GRVUrldCL(U8v>@P&Ng zU=2Qc!!>nI5}_%nft1wZ%#>7rMEBNgNX2n<UkyS_{vgi7;4#deYH!3BUljvKOChLe z#q`y;h=)IEip#1UWBnm?3=Kp_jEo*f08ij=Z1RQXU!{4_=Lm)p5aNsQs<A2>_S7`i zM;oxdsUA@hVAOg%wZ3LXQj=G&(`at`HIA^i!KAVLSuC0nQLq8&fanZGqSe?ZlIf}U znG-ffbx)(;)8K1p47XveqOSsXWnMupwrpr@W{O9HwOTY32?j#G+7$AYs4$GcXnyvs z<p=SajIkv;Y3+^7Wi&j6(SspRvzHO8g&K8_ud&|f!5@Pq7~3M~jn#W1%mTDh)M_<m zFVC_@*++6snAzEf(0OZWe36KOEc$Su<_$H5Jml0FbFh8wsq@u0VVj!9aIGiet4CG{ zHiihJY<+t?nxD8{fsL3T%6lYLX)vbv7^Jt9;h+udp5dqsjkP|H2|?n>{M4j}S^b8z zW?#4(QR!(SG-N1Jd20P$HMUx@!jz<LMDy1YJ6Rh<tPkeYxLka!Zo}z)^|g#BBWlF$ zgQ1|wx&d4SuN9l~I*8j4S+u7#mKu^viDzm;`uwZn)9{BDy@=Ch;t66?`tTxB-|uH$ z97zbIR6}DZj$NJ(c?*Ss*4Ts$Q>%F+8}yc7jZX_kaI`iJ_ZWZ6kr3st_XZ-F@dZnI zo5(dcG|sQ^LOHomDW{l&)YqLgPc#&b_-Zq8X-a+?qSC8->(Q&z!?jW5tZ<+vVc%+= z#`;>^P5x2b#$SJKG&fzOF^pT52581Pf}uucaTZJ{4mNn`!^c>FXeRzo;XgQxMMfpa z&|o5GA?f@mCF2}Mi)9=z(?sZ*K0z)eKT8aRKnjN@Z*7K5GG#JPCRfSiYRwa&-WJxX z^^pK2(a}oZ9!H5*<3&p2z|nehU(>cH!0_4BLIf3I9myO*?Xtm2jfnNZ!c{CB8C8Te ziJjWUXf?|gEMXobnNqFf19MZv!dPQ4pTDt@G*z>y{YaqE2R|cCz8dRNo8+dG-x8&f zP&>7SbZ_gZZ66u&tXl|a3Q(dbp$w@OiPjSbAnT~12)LR$AMyhuO%azxjY5Jsfw!rN zxWUv@CUT`nj>}y7L81l{E3`J8$M22k4c;aX3e9MkG&E9!)V#+Vs;O&~;~+1Y1SU>G z4vjWRX2Q8;ED(7Do9l`%2+}rR1gS&9#gHwEJLDRfO054he^V4amD(DVH9BccgI#Gw z4I3i5j{#N)LO67!E6PbEgvOIH5|y~8Ps3_@GwL}^aXqcLFKX&g^lBbSTVrc_cujGx zGG!I+Nt}a3E}0uBv$1JZ+9QT6Q5%o78VV_osq7@RXs`gXZJU<X5Yp4?{gE{0{WNYB ztdE$P)C|XhG|n001w-_OS0%e>Zz2xWjzy@XuvIw0U8Xv5sR99!*yN2^Si_PXp#gXj ziNOSZRE<K>hS7{>C^?H5BDH1iRASXQyi%YsS9s(G_ee^a9HFcb%Qiu&>ZwH;Yi?2& z<_Yo)=}Y9TM(BuPY8xBKdLpZaXyzpoQFU(dhC@L#>}U!<ZdfLe#u6pWdY_>&&WyCO z;?i<YPU$L(*g)*aCuJsBA0$g4_tt1MIDxN)8(XAa<(Bk&g~(_)UjuEb5fx~#k*Q)X zR~GVmDHN!!&Mhcma7uHRdsgPUJ!KWk%9fYrm6Vs6*fB+zxkh8J8qdni=R9-D+T7Bz zyy7Bbp**XxB5CT^NJ!Dvs*n2Ov*#6-pecxt#ic7e<y9rQCa#R-dm5w}tNKSQdEIOn z@ac)2WCK<TXw$RFU))5tn6*DwH*&EBv-L=8EJSoA4jD;&)D_K@Qs&O=AfSlw(2q-o z&EJ+JJHkq2vVbH6XaX@1^7kegOik8E&2QjodD+@H!p)pM_Mp=HF@`o^W8=WE(Bflk zz}6lgMPodE-fq@0O>2}|DuodCC0KD<oj2mK;tEavYEo*rc{r%-VTXoL{D0wGmE<k| zdKXKXF4A(9;+a$w%86QXLs-THLXBuJ=9c7@<XV5t@gI_=^}%X$L^|U$e@>5_C|s8u zTr0~d$}7)Xha9|OMQLtX*=Q)@hLN?3f0Kf3vnY;Y`T51TidB>`ys==YS>aTwNIB*h zwPv~cMMZ=kaU0gW)g*(+PE41JA*!L|DZ>Gp>f-B@hBfI)y{#U7QnVdeI}!04s@ach z@V08i7eVr=QD~sEg+5l3G$m=#<j;9%#2|aaWsxQ?THCUzx4y;O7BOl)Jd3JIEHfbr z8I5S<XhcW(ZH$c%Na7j|t(-^{d6iT}Lp3Q2vPz8c<aUop(J#kBpuF`>bzUt2{zL#; zk??H9vvg#OE};R*HL@UE(70Zc<0&gC$Se1hm*%Z1%_&)37KdLpCTyEUJgz|iZ$0Wr zjX|I_HHL!*6<E$<meUawQm3aLb<P;Crco1CH73S!-lk}%M%Ty=i`07~b*i~qQMCpC zieKcp6S0tT))Ku8-t_fah`3{89Aa}`MFmwFVmOtp#%+8fFgA(-xJQsgHGkQjq;bT9 z$f`5?ql>SnYqdVV7frlT^BUnJcFyz4>Kj`SiScbMLlEkBHm_oZu6_<fqwqlunzFT? zIG_5+(L`r7-e<msY6N|A+}=LP{fJAmb^*GCz6SF3P!5E?4l8;c8s;9ovC#q;b9^G8 ziOj?jiHne>ylvGZ`PhO-wSCO)il%Ho(e^SrvKOpb*DRR>T?4Y*Ms8JKsHQPWwyzJH zV{yGtQ3UZ^UGGJQEE)<{x9L8QGV^h}<QC+u$n_Le6cl)tRh8$KG4-0!9!uOL=HrOH z$CeGsCYpCNr$`~~QI?0lF<fJ%i)D)wHkGHY<Xp9fpYqCTLTJBhhH(`Pp@Bxlt+l~` zR5!f+630`rCr<YCcs3)R&5UQ~8SA#RygHt}CZ1i0^cb~=B`{J9DiT?cL3D0XQj7zP z0Sk>yh}r8mdZEUUzp>=04f+yzLbeY^T38&?<Wk}$ie%Ny5KiRyglL74I9wcfG&!KS zqCB_Mv!<e$c%WvCMW_u>@AHq66Bc$RdB$*AdK!BR>&aV{98YH7#wcnx)@?F0=dBNV zBbr}FMsL*oD)t})%w*2UB25N>f+26XO*#-k^&248D4bz0u+v4V*e{I~IXDh0k&Esl z%`QDz2Eu%t&jAwldi<zPDUd{QHg<{QKh=lkxJNofM&wM{4OpN8k0_YqKMzMZXlkS9 zdfx3iE<#o!kx{9$g7<|eh(te}j&nDlwNQ)unRJ7O?a)ezAQ@={t%-(c-6VHTYsd(8 zc@*o&UD;Zr)TbV<4RSbQb<Wyc5839+a|#NIms@@VEwQU~AX+m+h6Zkp=Q54lirkes z6$Ry<Lifs?vhu`V2E!fS;FUh2d6iF-u748~wpLL#eiKbY`9ND--9<xw3lV<fzt<H1 zaU{CbWJt2GPe&m`SW~fXL?a(?`2F=!L>&62_#~ZM^S60Cgly?`G*s7kblMOEtL0XX z<|!)hENAZscgTvoRe9wLJ(bIu?&O+zLb$b1zXWktu*`{YL<K!n<e6x7u(lOtb%UzX z=n&UOeRLkTJg+d9Xy93qhu%gxdT}%^gMn-1&?X<uaBzn8W>C%IsooIw`FW7aoMnaR z{$*Gn=2;)EvOZjGeVA{3xW@Xh!1}NdaTY+PqbMGW)dWzqoTBBci%Vq(h9upR&#>e( z6W~oxcuD{tTh<_%NVx~e;g$1H1C&%n<#{Xfmgf+*Jh_EAc?Afap+9R-%;@20jdYEO z5C)bc3G<4Wf@K+=!ewTRNjfhEIVy8=U7n1x@)bE%JTUnVGODI|N^@6vmgTG{Eh*Pz z_>;&^x>izmG^<=gtU@OkP10^9s8Ci18*8;%itQnH6qk4^%2zJ%l;oD?6|dl}?rVw! z$&^3=px8_CO-&<;4%UP?DIH01wT4@)rViC+s|*}Rb^iiSq}pSGoSR#;f|$|Q+Qhau zc4#FZf_-U{AP7ToNp2AZBy!y)8Zlso>RMD>R#i3z26+?E28b{W9w|XkmRE-n>j`Hi zxV31K(b&0~#z1MPL?_i37Zl`_<DMv9kz1BqZlSC+HBpwxfQmUwE64YE>v~B2dILU2 zYg`bc#O1>-Qe2u0>3PH9AV~{4K_lP^xAI7gW~f1HD_Bb$SH8NqqAa(>0*0Z&X;BQ2 z6u1a_VQx-YMQLs!@}~(tGgWRuZprH6qFl-$`pP{k3(GYW=8AY$7}%5zlNMQ3T3k_* zSF}oN;(*U+{4;0ijZJD0W@YYAey+)|*sUn1Fpf{AX;E=uPWkfHniM363vU~TGe&J9 z;|#}2nabR}RjbQ!?k2*rWNqXnmWMnP0*{Q8TY}akx?(xYbGf_n%RL1-MXNjodCN39 zO7PThc+%so*%%G-{DfJSY;svxfF8EqxIwW`QAHu{lI5Nixy$nkQEZkJ6Fw0bBxbPI z6ZW<k?7Y07xGdMRtTbo2OVJ^b_2yA8g*AEn<;m2FP@+&PX*GEwxT7>06Zxu1ZTJ=n z%^=o&(v`MiraWg^K`xG3jheI88xG>OrE^N&oMRA>ncu25IHZM`G&UoRi?&&AA!3x4 zS(1p=#C>MU%i8~=yfnfiL@mj|5wd!Gan%?0Nr*jkSVXco0oQ15d(jAIgUU+Q<;4|6 z<)u~3Y+5D76IbSyqA^e%wo;Eck^dBymZ8yx#&&&U1Wld@%EfwPJD}c`W8>tx<vBR$ zii+Z~5FpvNjy&cDZ)AhUj-*G5xrj!RkdGaRArza|wKdhnImuJ7+{DLd2FW1uplYa* zM+RX-yenc86-i~I8ZoT^%P6_-^3ohnVNMC6k&xvv1mH+|l#~>xyhen~NL=~y(xT;6 zW#y#?bs3kER=hqMl>$NW*%f$YRfWqut8>a$d&=_G<sy)y`Hy!1>)aJAk!p=q@Ont5 z(gydV7HzCWd$m#e=_-65ZL(|vV;jkHGsD;q$$jh#p{<H6T~u5imj;zm2-5aIU8i)M zhX|avst7r)tjHpcl$~jWVl*E@nu+E-F=;4D0nY@e(2ry2$<$Q}3ils{(Yze{H-)6( zHH_9M#=?T3ny{8vR7UO*F|}dro76N3RZ&#zS(}4?l&8E{@_zx@!cu<mK|-7WNSWmo zrN|s^t;y%xpf(5%O&UEiVqZzQ&9%HWtX2lftDLgsd3k6;mgOR!F_)tXCPYY<U=?19 zGB-C7URG>5MJvj9OOeo$21biI2N}gJ83wnEVBpf+wRv><pz$g)M{nFB3r*1sK;#lz zsmLJPM2&i#Pcj?XJ57y|1eK^x&`4iez$!=Whz1jrQ^wsqBXm2_k)kFjV>AkvvZzBo z%qd{2Lan!nOb3K3GI9f#7Z(&)=9bPg7)?nrX-$<a&p{>O@l+v+aC1s|$q<^FM_E$D z)62^|B`7L#k&;GJ9Ew6_L{GM0cr#0!gz7aqXJ9EdN;i^f<}+1dsZ8dIAlfQ5%0kTG zznMy3Ad{7{ASf>2@_CvM@qv3Gq{Lc;kJU-rM;piqA45DXTSf$y@+sWds3b&F*w;)1 zQ@SmYT)2`<MG6ur===mt3Ba4Er6wXp3q^r>JhmO!kQy}<TfEA2Wp~*dmgh|YiAo)} zc)jkGO3Z3MkO&~>z6^KU>YP$5X>mW4QHa=dT=UAx^2jX7Eut$ZVXr5olr~zO=xZYT z$iM`eh+Z@(NA3RQ#YM&;Tq#OlO~yjWs~lzeu!4-kvK+-knO2AGaRaqT5j#qbvob*$ zPG}-?gnde1D4^G6s5Em-Wt>;GtVr|Mvm2z7bd!iiY$7`wDpL6uQ55v7O_*>@1En-6 zTo^GaO+SuWV-SQ)Oi4R0MI?y5T56EK458Fj^&}MH{s{*%qSa(iQAbn`;WqBaN|NI! zU!(a=A=0Gm6Mry_8?G^`M=03Kd}QuEqPW8CScq9}@WTjYP9~vG#?WO*UDy0{L`Nrb z&8G89?-Y3q(}j0dx?vpFM2tfL!&O{XDlHlhtAYqw6q#B$Qipb*Ca*4_=s|BzNp0F= z7IdM&^oF#!iE65>1j|*bR7(tivYGMhym<Dic=qaec78m2O+33Go?WOl(eZzEFqG(M z>4x6m`wc}SJZMUJRcx?W5pHmF16kM>&4~6AZIH4!C3DwQ<gHbtOqB1$N~Q}O(Qpr< z&|+MXO|1kaT^&L`L&A*I@+d%kbXf;gjuaTgv(YAU`zR<N)vU#0MHwOYHOFq1e3oR_ z!%~r%E|4Vlh!Iwybdi*$V_!>Sd9W+Ju0*{=+rt~G@fik^)aE5QrRGqUJ;nM*+Vu+f zib4x+4ZC&$MLyX3R6t74ni0V$;Cphk!=*-JAyMo1YGkN22fe1ThGqpSK-@|GNaB7U zt)}OZs%kYfTzzAJJ5Ve{x|&{&V;7lLc}WiGcDlpV5T$#@wTeU}Zwm6zlUBx+bo)(* z$;vCri1kX@r9u-lBX1$PZendgX3q$6k$ox=j;b6}tI(E4nUv*?%m4^Qh~ok5ANe8{ zQDk~?tO+?-6fr@zI;bP1RL-)o#d^-NdDMSJMTuukMQ)i9HS{FRKbr9KJ<1J;2P9au zmgcU^b89Vh??mT-f;<;vfy(m7N;bbCtkj)MUx4iw3Z6>kD5aytx6?w>2B*`=uur-y zrX0}|q(W&$0pWG5XcHODq@G9DFh57CCG#R2wakHR{N$qZWEem!%1R17WUu+uRWZJS z%VH$a_9HP=UTj*|YL^pw8M|78FC5?#326w0*uIY=iIf{TK@Aj#Hr!F=Imq+kxSu*& z-HnKygr$c|0uOh$;j-6wQ5LcVCO5HE)uc)Iwx2bYLrlRDaXvVSTUWGhV=q`_H@odD z!72VZnv1UDz^OUB`6__1xQ2+l-mkHkU}`I2BTfAHh^ul+G7=v%6CdX#K3-*PN7IWm ztL97b!fTbWKjLhw=TVxoBG1ispyY1m0K|WI1OZ0Im6&aEB-`W`t?(4DL?GhPSaf)i z<(qKR#EphAc$BxEu_4sGG82XJev_gQGZc9`q}@3%?LmwNQ9(3#e2oeNJh+DDG&`jT zbU|LB^bi^6(vs$V7!Q$XHS#D~UYe9L{OkNBzBkOsB=R-T{TkB&k^QCJ#>hdBmt`fJ zV<w45_z`6KR^+U*lFeYKOu`KxNgI8Y5-^CO>?g~rq~(W(MSZY_T_zc#k;le*BcF!y z;jsjk*^#9^%|PK2X~!9!mBslo+^aE`uoB(%(Uj%wKq66j&dL%XF&fdsV>q&j2St23 zkzh~C>%Q!T@N}#S%`iYyG*V|}wWe?snK{^iPIDv}CoEm{G;Np>>%b&;RdH!me9P0H zb%^W)S<Dt1MfjuAVK)s<UB!9EAZ0ou!*nmyF5%dmWL#;vG&ULDwr3@(Kaa#DskCLN z46)@(tRXEH*43?f-h|6gAjJ>4=pobkFwgpMmG$9j>%)BO!!>k@E^qyeCM`3j4_TyH zDpgCUUva41hlY4VpcA4h6m>u?sRzCFDh`B}Iw~r|R32%TnbKyNGT%uxmzP(0R#p`8 z(V)j;jT6L8772{0)kjD)<v|rCgdvpqP*PA)riF}Cvg!>r7U^jvjYXX(v)ZeVp2q5= zSpZAqKk_t{@5gol+fVUu^%$O?74F7xzzled3Kc{{!N#u*%dIReE~Gma2`_nB4_;W5 zN0fL7o1#KlyJMp?K~sln8tLt(wuZ<EC(_53l{6wO{FGpThU%pl;MdH^A2wr#yhX{@ zMl6=*Ar6{Ulq1n7p}?oKv@}w4Im^p)tuc?d5vbT~q)~}fE7uBDtb~pS4J24}J(4XB zzO->=R8+eE77<|_7hCPnxWUG5c0j%uA$5=$Pe7lBr)rdzQ6(*0hNs73w?soJ;8Afc zPoky6=9=aWwXv6KoZCm@6G#O{uU%2_+Vt(D`0_P0>1|^Q(&D0WMDrL(zKT|;qF1JS zLnj;@P&VX<r^(R3eE2b10VM<?HT9YX@g#3j6<;VppI3RdZG3+?Kr!(V{(wbvjWkRU zQqxwYbK?Xhz|ki@)*{!zdZ5Ze%u`MGFjQ=eqU!a&L|=`7WlM`u?O8!%j!8?)9!;n- zk1Z+Gn(Hn}4BJpzmb-@hS<|)h@;N-(?qsoX@fZZkq-Ar&(73cY@(7vPK3eUGhjx*v zs9^Nbyi{%E$mLq{uF;E36v3m3!E6%`F37jH#u7YM(JU|Vn|>tGU4@lsd#XDH)(y{5 zNE8l*S`^t*#u=E7T7wF0#=}jSh>o#<C>gyH>lr8ocGyLV#1EJ)M;%5CMk8lQ;xHJo zFkd_{istr8;}~5Y8F_LFOA0L!-b9xoZipn@O^C};<=qsQvUj65j_7YjhH)8uaK>H? zpHf>FS;UU2)+A%1aXVC=p_=lNSIm|z-5ZQYTh)Fg@52}2R|uCE6A|5G99K&;$e5TO zY%=8o1@4hQh;`93h*)na#qAfmTtROe8!n*cwH(RCJD>w~wbr7n=Xl_P3<L@xg-xj> zZ*x!(1x*_hu_MG{d0u%zF5Ua08&F25mQKW_tLkZ_EA8aI%J;5n=)6anj7G{-k@`*A z^2)bV(K%MpmU}nKx-uik<|5;MpjA;M9$v(QLxFIkIyU1VQKM(Y${Zz6M%=DYufECy z%LEgE%o_7dn~W8fej$p|Nk&JjZ9|+-<SyeqHu?;b<x|+FM{y<&ddU-Y=@hDRGY+7I z={gIs7@C_F3CzbXMIOHI;VH<&{(J+eK1z3o<2Mrwmn(jSMKi1!r90H2DxIh(4=a96 zW-KkAZWtQ!ikp(-!BBHNa&Fd=4kic;3kS8NQYIAMm)BI4OeEbVU-YS$y9yU5aW7S= zVL>FWs;mrs&oZNoZ;)7T=p+h{g&a^);ZGS=vIw)5pk7B&9tt(l?vrd9Kgs(V)mC0? zHAytDZt*&akBZCk%JbIdvIVVC0M<f7+#x!@;m7Bcd`?==3AyU>AkD}Azy>ewEQ3qO z+MA?+wMdh3`Ou65T5em#<3mh#c{ha5J}tJ2l!{6e8CMgmkyy+5OZ;RcVK19kT1=P0 z*UHCDaf3TSW92N9#y>5)Hlk-(0?MNf8$E1FlVC9#g(V^V_579>+1--&<rx%x0D<4< z@k#ew#b~KA?wO3x5D0d0X|9Y(%Akx?4qp$9@?E7vznX7Rp`}mZf?9*9DrBG>GLPKd zGS*@dKjv*`tArSX+GWKRrF2b3St=TP*JVhQ)uVl<jIj(Wy5-7Y1bU+wHI6q@6AWrW z-ghL@SRMFLPBgZBjf-SGf>u}0a!X5#OEq<_O2SyO_OgnVGOEvuvUpEweOyfOT4p<z z?M1n(a^jnYwL-Y&>uDt~uG68c;#fmkN*XgOpwkr@u{Y?_-iqQvX}6ByN=s#*q0&qv zNJ+*6%Z*y|Y^*Y;pxiLqJR`1EnMOpdj3$}Un@UU6!xHnbL_93<4okGd66=tW4tbf& zyjF;)%Ah})=1#OOO4?3R1bC6v+R%7lZ<uUSy3VXT!?>TPbQv`=^)IolSDr_y;9_;0 zuPufW9j_YKb~&J&=oP9P1k7NTJC;^uB`-^>7-X2N4a1RF>rRZ!AVo6hk3yz-l0|nf zL-Hd4YJuv)l{AgwtW}w}qI@;;tW?StZNrB`W-wOSCN1Rejkf=#ERchd-9r+Nx2il# zv7A|k<TVQgju~2G&(@O=={9ZSv35c^Zp#&JGk#r<L^B*q^ZY{N_qs!V<D}0g1IK)h zg<F{r8|IJ(YlSfHN);QnOi5=b%6eymOJ2~FFFeo&=Me5FnPK&8R2)Hib8+7<L04bH zF}iSgp0T8$!EsVkgrsP-L|R5)aESAO5z4mO38OAbSwe8tzJPIKVKko0mleoZuX!yy z-Y#w=B^;*6n?`YuAzl;NK(;?0{lp7tRlH}6IMoPm#ymT#T+VumqB@P$H~4CF%YEyF zmJ5v|!V$|M$DA2w3@wB5afHMqaZ-j)%jKOyb)hTnO%tc9ixq}d*JxZS;v91bA3m#k zy;17FrZ&kD=&ni=6p2mO@y7N7ucp<+kIB_%mW)#Zc?w4Yj_?x9SP=Re<RoH&$Qr-% zKq7JsJYHkq(TL6FsY^fc>k&mLmCMwHIMbCfEFKERp=z++%8XdYQ_MNSX+UG0K9R!U zBwW@;U?|F}40(AMF5#}Pu_7yvvh_AE(-7=&1tq~%;YU>dUir3}W%2|n%uD2{_{CWD z{>P}|jIoO|$1a{XcJWolwN2yFnK~iW_}-gOy|vv?uP$Cj%=;P%;%MX{a$Js#xPB2o z4@+c(t4A<`VI&%Mvf*PZK4)2#aIEFAI!mK2TVqf9WD+S>bvJfQWQ<ulHsY=tv-IjQ zOXrVSdd--n3&t#6C=X9sYQ_>QITb7N5c#>ICAPehMxU;VUpG+<A3s!%7i5ksFt1Ob zy@~s%%tgmQEEh(+W7SY?wY!aP>+lI3N~?gTUIswdCZg_7Ch~s9*T~Zm7Y`*1`sC^F zXf7Oimdy>6PwR<a5N<VJCnE2Q?x)CmzpStrQr`C=ib#-DiQjq}1Nn%T(!6pyCNyM( z<wn(LKIctN7lb&pBTrrB#RvHk(umV+b<7m@8D9dFf{f#<%7-2mY*!wtbhJaYqwZ&w zjw~o6bozs>>Lp08C(7%WpQxfcEb{84#tSJZE?PzZ$QGw}R+$;NrfhX_X}SCsfP7Pt zODl}VwZX8G9$e1WJl$PV?@vZJ_}0|OKARe_yp(9}mE=GeYl0L6WIxo){;B%<m7Its zN%){2?q`~mnwy}nD6Uw>U-i?C#qzf)XwfpmEh|YN@&S(l9?eGo=<<&NWWulaNEG5` zi?7;5lSlP5N3)L760Fth=;d(rF%{WgB9rq9WVI&NxyWJ0N7cL@e|@8u7hr*rNE792 zdvUbIr)Z5t8~FX$8Wp|ZPoo%J$ct^|cR>u&@Yg#Gc)eC!NC;WXO6N#XRq=eemhhHu z$nu)6f|tf1vqECQ%4l-XG7gX!!>a!BYneF02nZNyW@F-CGiJ%$C6^p*Mk;v|Sxxp= z1hep_mBE-F6a;L5@(cZh%d6u2CF$Kl7j2nqB_k_VB5)JXPVX{%m6fU(A);QspcjA1 zW+vpsX=p_dGpX7mvaj42ypuF<G(g1k)f#;m9q6_5YqIz!ga2mo-+BC3Eu)Bz##`wY z+6dH)M33auQQO4I+=*yccd(lb45@|3mnRobH;9p`TM~ZL#PahV@^hQ=#)EuU-4hKV zIyca5JF<<rrY7<CE+UN$K9BkY405I4$krwN+yj{t0s0mw6_5N?1Z5G8_$2~-LOs_o z;)eiuef;L0TBO%<o<8DR`L&iR+N9_Qg!o2l8%OEQZ)2%4DFNtPNo0un!VMmOG*n}j z$gq&Lq_K(jG;^F;5ily^-&D$^a~?F()Mp2njf|%9GY0fTC$m0p#JtC5f*1aWzf(lt zoic#q_lG1{oRt8{F9{iKs_QqzSB>sakdDFRi${L`2$=z;`VvqAhK!e@cnV$yN&||2 zne$|-b<sC6R44hSJ5R^2m^0$ZKjR9Ic@J35#Ag=>5)p$t$rq)~oN<GJw;tL{(TEAL zoXGq<xiNnn-Ne8=TAN+dp0U$6(#tgU-|P680trP0`1m5w$JH}>D1A>>k4w_DpCrj* zN?%Ok;x{mPn~T$XD4jY^HZex?U~eyvP~tTQTT6qb@c?Uoqz1t32dY12jqWYjzEyUo zWG`ncse2apsif}D%WS-RrP2MHSaccJmQX^CLEF*WK@)ypJQ$73u%K2prX(hTGMZX| zO2<i7^F$?-JjB^DN*?9a>)H=6?HwnvLg_)-qz{u{%8r!$R+duojx43*U0F)W2WkjP zKawp@V=^T<fnWqfokZIPbFQ`VhHFPRthfb}U2?=-W}gb`1Kg*C64|}N=sq1E7xK>= z?%>oVM=!&q7XKw{@Vn2(i5|+g$|_2>sUF6EDfpZr=g2SzDWgHIlckh|WGN-#WQo#< z8kX=uX)F;5nfSOoK0vL^8USF{XjnO3)7FpYB1&4uC#>;We5{qVFJm$|KB4add|Wer z)Nl`sXHI(mdQE8B#lm<{|9yb-e~SN-v>kuBzK3#ulMqodalBDsZ9Z{)!rF3h$PGd+ zozh0Z{VBPbvui22MV3;sOEsqS9$8Gu_e26a6yu{u)>0DTY?;yDvc}i&@z=75l27F@ zf5t?gkTBx6@$u9IIX9*6a&-wMpQ~a@znG9PJoUO&Ra1IMRzIr-vkYMAL=7L}PV;&O z)R>eXS&v-?{_a5E#eb7D;cK$(vWc(G`9=>F+%F3wO?FjyzZ!Ca)&yMi&7K$W@s$b0 z`=TwZeWS-1-_pdGhnl_1KxQVCok|3Uie8f=hG;~}|CfZM(FE_mR6m@?K4O{!6E*Ft ziA+gK#!Vt_jM#c8bM>SIwi>|t!HEP>3#Y%6`PL6G{gQ_$p=9DD*<==`m+}ZDlw2u` zw-}@4V$)R<B^4>%GBJTQUZI|oWi_QRnMa~zI%mr$nITIl`IaoDq*nE#^afc>NocZ^ z42_uTs);e(2RPl|B(ND+l_SUfmg;4}_e=jPNj$zkNl<4>-@t#Q)-ZXCvn7-as}_`g zDvK%kOg1*gn%bKr&g(Thy(=3Uwf~7Teeq)|T06SP9OFGKn#e^ZvoT4P*#(&7%Ir!^ zTr%s%<XV{xVAB5Mg!w-Gr;S8w%Eo`7Mc;4#Vh`5sRS$>uOYHH3(foRBx>2Hml1F9F z58FS&p46Kkl5vPdd)0%{^XJ&~x!w_l$Fblog;h*w6vP+xUAZ>_bzNAqgKJAD`4MN= zzP88cW1^k<Rg9dQ3ck$)R=$PFNzRr~vUnetuE*qCGW%;xe$UwwN+vU*O{0Sz=SbR9 zl9yOZ^X%ur*M5k}XL6p;%z4(v=UHp*bCX;wC3_h5NJkH4BHXm>MNID5pU~@3{MV~7 zw^Q;4XV?A_lVn@M-lYFXU6GomG$QlYejC#s?o~m_Zu~b+gKe>7LD?f(qGF$m|8C;e zC6wHvk>rVPF}LJA{I`zlOV_D-nnbhwH&<3ulB$tnJZ&pA`_q5pxl<FTmvFwB)5}!( zWvVBY8~>%_zm+_22_?62b}c14)f^=~lsh6TD0$kfpxh_2f|4)HiqWH&QgS<ID{r@q zUdp3CB`cn?j9$v4e<~|JwTvEL^D6weog0+UAp2yNy8XA7AjYVn{3X2fo{?psi3MX7 zrjAv(a;(Dgu?j0j6((!LkpeCLpHXgsvs9CavBGJTCBSJZOdYFm<yeK~V-;46DjW$X zl`AY8Mb~Si;WWw;;ItH`j#apFRN=_kseHujH)x}0H_8%bw-lz1DjYcxm5-RHNgF+p zQI;@~Q8;o;DjzXsvo?B6qikgN=F#1$*^g9rV)UUALmBl5Uc3Q6jL~AAwZ*)#S}d@( zSTI(L3~P&wv05y%wpcb+i&fSZt46gzv}`4`7>$hQk?qvpAJP&q_JEd%u`jelj2ZPN z#=bBf#%M9m+G5^VEf!c?EEuarhP6e;SS^-WTPz!^#VTuyRij#1G4_Qv8e>Mgv8Cl0 zMbD2edTDggtD}ofj4t}k=pxK(-(;;@LdpHpX<a+Eby(}yaD6Ey$sDDrq+}vzODK61 zxYy_HuVN;Bym~0W%qQ%URZ@~XL6uV`m7R;qc1$KtROOVJF3o#N&gN_-B^^eS!)Q5s zr>KV;F>})tZcoYMM)~`g$(gDi)?udKcsPcclxgbWQp}t^T|H37HJvA<WW7;NnXR%s zhRN+l`JK~ETz%d?8dq!9#Bup=3Ant^E{zjPe>+L$KgCp^D)W@KP31*VLStBM85-h6 z8<!<fdYbc@J(LO|%PE~JWI3hRbN=ccN;^~=O8ZnBN<UF;C|xh-OfuF^<y)tluq0Vw zxmUt6ozj~m;SYE0#Z2aO_27zQ>Tt&xU1!}JN7YZw2DF}ub}23>m7%uE<BGo&OZ{1x zT=c{QlUuHkj6=z-?Dy?hO3vqc_Bfk5dMHyZT`)=x8|9Swl*=nAd3>_$OX+{IZ&pdk z;ACpv($Pbi3}(N|`Iz*|EOFt<DQZOG!gW*C17)6J%2rZx%qXYKaam5u{AqGpN^7Ta zF(r?2wuF*_X(m73Em`w!6UR;MrbH?<*(1H@4#eAojKWe%9_4JsPceChw{FzdLz&~U z{1znfP8n~c<lZFJgfb7ya!Pt-xxI%n2e`cAX-s}*w5QB5S-xzXrfuU`UMVF%lVLqd zUgGQ;N`6IAJ}qqTq0C9ygoMcR<K-%jWBSH;H8^G7mN7D6GB7fWk{p!(EvBC_Gn7*D z7tU6UN7~MiWTxc2NoqjKTrSHg$(p2AN0~w{uPC2nuo1S8vr)yjG3hkQAI8jnE-&4$ z*bAEww|vB0R8eQjt%^BF@GF@1r3SBH>8+UTk}`mj-BZ=bl<Ae_y^5I_!Z-(2M3Fc4 zFn^R%a+tFfhIAvO#CLUi53$g#%t9rU+&NthXl0>$6$?>%(8k+zR|jR3+&<JXLT;<Q ze5k`Z%0V^CZ!rD9#xdC^wPexrfnrkZ`-Gx23krkO6SXKkCSP!2oZ^B@qS^&L{3Mj< zI2SV)iulkMDlv#dufU{2Ry{#g6-p{%)ox4<Sb7~$f)T4uVe-DE*ZacIXC)zAqdq-e zrJHJ^<m+(v#dw9gFBH(&mJ)@oT^(Q7Q6c>?M*7=wl&{*2rPGlHrAoVg)lS0j7t_?k z@o5q+eu%{-@mHqKT8o2TXCwc)Nz1sr=Q<^fleHZylJVJSMu6;=bfV-%3Df?LxDLu- z9W+;{in!v*FclA15ORGJ)B^$g=@j)qJK)#T)WchG$oF?xAm86%1t|eH4@xWKZ|#PN zBMee11r=5pf{K8m)IUyDP=<~usDjeZCaMZUZcqiK`zNUiV{6kKl-5mA6_g>%geoXi zaR05{3U^<!f}1jLCCl+CRb+gOF>~b<^)TNYGovSN^{k<!ZK`V1rX&Kjp;RI7F-G2< z(`ALlY<VmJk*`YJ9q4$~R0AcHsKy7(#?|Acq9;Ru#7gG$M5Dl{$DPqnJHu#WJR9vc zt9CdKHMvM`9!gT>lyPHW9Kvyy1nDdV9oB!lgED`V<&-#*R5@j?mTHQUDx;h->y!9c zqpKr%y;4qGMVU8b7fL=h$|>_#Sx$+4oGPcxmGYE|k{=o6q_obGhbWYspRCF$lPb$8 z$u!C-<CNu;EHla}vr(2)@;#%RGLOh|O8%EoPMM#`a!UG)a>~3S%U@BP#^sdxT$WSv zl~GQanUX4$6pUBp7W@6%9b{PjaH4u3%W46uxHXG0am%d7RD5eFd5N<nFDa{vJ3g*# zDJ&<w_*a>w#6HEqGG@+@20kTc8Re9zlI2x#!ykvl%!_hsQ1UCIoHFmoa*{C>tSZ-3 zm?{*T7#10plP0a5rpjwgC0b??Lf<xd^J>LYigA7?vmcHdL3>GX;qS>bsVtg%KC&*B z7Io#65yPjW>HE1dgFjbhFg7^IysxNp&`O<yEI4*ekX;OGnDUesPEw7kO@jp=I!A~y zh0lYG&tEA~M(O)TMNS-b2TjybD@qSfQx%jsJ}qu(DC8YXSltpOrzyQbTBx+hJ7kuY zIV(xFpwz+mEp;fYQ?Xy|V-jza4yp1XwU4nmCFhNk#pfy0lA2RmplnM6hm;?Q!UGD0 zl>S^g7e80nq+tk|-(wE1q~u{~`#o%Kfl5jSC(AJmJCHh3x?ACwaQ!y(Xr*BZQWL{z zpeAu1Ej27YYC`EqG*jM+<%<=TDRnYx*DNvpfHh-dd5smzhP1@uv5~xn5)wC5JW{Kr zD<r2YnS#wn;<!WMn9|*h<295>=M3dFWzJBzGK2xPF?J0V{~xrZ70Zf?yE@|D89q>^ zO(A-uDm`X2IyM5;Bh{)E?UTkE>&`IOjf33J;?p}(J#@s^cz?(1lcWPm!x$bYS6INl z-wO8q31C}5y}yIGW14!POp0_MDVcASn=BHi3qiM3LifXt>l9&-DZh>`ahNk0<~Hdm zQ=-8CVaGp$^%0mR@ZV-$ue<=Ey;LEc(krF=YrsyByv_i`Lw@nH^igFv{BCpMwA#(Q zs*1UjjWgVm8x-(ZN^pF{aFkrCFlVvxsr$VD&D*!YSv{x!e{06+im2$O+l1Vwizw0{ zRKhuDI_E@DQn@8vXWZsY+9(Q*ri64t(q>{Jl_Vj|u54*T$jYuu7`CNtW5fS>KhNj# ze9ugFfB&1;EAQv?+@I%j`F_9WHuUe{V0=&%v?-fa8filhD&0&E8xfm%B+FdhSek=U zfsZv71#9OLeT*zCIH$r2-)XtJZPb^vYCAwn2OeSus*V0Sf;+9J&0QPr#xBgdYqN6u z6l8Vm*y=rQ^r#0==`D9{fb->W_pjhABE|-h11>uZWD-#KaQj{rs6L0Ypr%<I04XKf zuckPr!~?DP&&2yxf&v;G#z{pZ4NO?l9RzHAxDkLj)d+w+Ih!b;mth0X682e#yO4u) z$Yxwz0?>-dC?F+V#B0s=3Ba-9>R4C0`-sn{#!~}&=FMp_HB$e$jI~v)UdB+dw1a}f zFl&u}`SsUB*&0RJu{E`0YuBD^PB;t?*2TeupiQ?<8H`S*e~pQg(}aRVzy+trVWAxW z)6)(M?=<gjLeQ-fp3_e-hK-Fg;aYv}Q@9maChKIyd`IxBkiVK)RPjd<>sCqWRzJss zt#}sk7Kj)CUpc|#QWyGZ7srLZoLr>C*?dmJe=;iu*vDiXaAec)KKhk-Et`fGbORb5 z($qX)x5|KQ)im5g8uk`PjD1-gx8f)bi;WmKSF8c^=wB0JM~d*j{F6J^365y$ihGHq zd&0?Vq~SlA<<8Fz&FH$_jI{tSHbaYwZ*pFaA;ziA!fU<{jpJ++1uPVC6u64%NsKQU zzBL<3<4J55pX9}Z4<Ihh5;tug1T&k5atEtLb2(Fi$Fn#IIHfu2C@Rf>=+QjXh1oQG zy18@|xT<+*J~q(sV<QHB9u_xgP0w<zMGQQ(bx3>${kuJo9RZvfuo#fXFQBCQ5X==4 zkKX?_uk`?bmX}xnb?b&oh1>A~4$g)_`wXaM>^QO9IZpI3uN)Bx*jvY{?{)s%nm(KU z^$X-Pe(4OTDEo^8VospdMZpzXK~8tp!D$kmlN+Ct`<<!9j;-Fij-Q;9oAP|$k)%)D z%~6zwg>_^t0Y}#16MJVG#C1lXT~!9c1Fj8>GKh^vu$l0qfOj$A6RQJakI@0{w*q7} z&_qJS+p?mrHqNOhQ0-eM)Sj$xJFHhN-x0{#t!WdrHW503i_~Fxk871*kTkQ$%bRh4 z^19g{1@Q`TKmn6U!0fvAgB`PtrJ4e77Sn!X&hH7t=`Dc)SI7#x#`q=DJ9Wt-YF}aX zbv8-ZOqEbmow;8NG#n&0gNzMrzM(KGG4!3rs&3W?cRB}b1^_?Ym-bE}4mge#=w_@I zg{W819){Dug#m}H4?L7-CUqpisX_uCs3RJ{h0Km`C-|pmXkYWiS7Tr^*%01W5|9#K zjZ@BnYtvX7mdMfo+*v1ley*Z_YXTMnb}|{?X|hJ+5K4ArG|xrlR6i5ax<YzKFe~BH zOI&2qBXggfJ8(9KV}2ThCu_6esfJiqUG@Ga#tq5wp;TCTo%Z#AZI#m|H&Wm44=Ci; z;Wr6_NZHUx#|%adB!57|kkFd7qJO6Zp_Mv2kb?x_fp3Wz@R?x)cZIERR!!t+F~B5l z?c`u;9ed`-01p_pUlCEjO3|>s(D@(h$Pw`?VavMV;{x)1VzSSvmgPdVg={8(SowRD zZO$sLtO9QpS60?2*x{_AUei_Gi-zZiH?3vqJ45i!3tLX3VOf~9mWEYfXO^Wi0`JYR zCEeKsd4Viof=&USx&HA5oxMTifO|x~|3+L&KeYp^oCw@!@*rO=<a-2P1)=0l2tuFZ zi;AONH%5Jk`Wd*`6J+J{8vT1O2yGMmcX}X|0%x%}3AisXcY9@n)!iPr<v}PRWHFFg zQGgVY@``SUjiP_o2eK4_<HQIsf!Y4UifHXoA_jB_<XQ+kmg%yQKpc})Vy?frr+>p( zVI1SNLHJaP895nUlL0YOf&fODAfvop6nLH0*G@(Xb7W?u(IzKKd8AXue;0`ya7kbf zbx=tW04{R^P$eP&-0lRR%0vK|;{>3d5dmO@6M%X}1c29^0Myqa0Q}tvK*`5qqku+r ztN>J75diX>08|$d0D3q<p#GCW<GRo|7y7se9#?6{Ic+)r;%}+!;+&m)P&5v(vEsGF zis@J}j&+p?0Jl5A?JkL!P9nxh{9Ob9+ld%=qA3>~YpOaC<4*Jtfz5>;(0I!01ck`p zdLaRrTC7q##X0C1h=)bzVUrhhkjiVq2E1$7Nb3hf+yAx%HtTpJmyWxV;#gP_$g%#e z(ZpwRtg8M}#=iq8TA3Hrk#}$Pxd`4x!pj8?lciwA!)Z7{Sb#HfvR=1=T<#*`C0@QR zB!5_X`mmAfXFS{}AH%0|sxv_jzrvitTX>y?Jf5JZkk)28+1xED-R(pA4-i29P93?F z09&*F1pHqhB;XslJ`4u#5jMiM=U54ZHMzR82fp@j+~h9=N6R&*v$Ida{#dq8!oHi3 z)_j0dEQGWxOWlY5?;^<)a(M#$zOI~Q&^(znqbHkAGzf~DMaBmm^Xf;e@iNk0AHKE~ z<j6N5ai|mAF1Y}v<=71lYPJXf^F$r+fYSl>d(i<@I02~D;R+G+JZ8nuGt%(xE^tv| zI!cVAh_jg1os}c&65=OVT=;}Z0&L*(!hYU3(04BIFim*%f%mg&;(imEZ?OrV682Nx zaeZH#yU?a`?Ds$805tMo)OKpyuAPeZ1axm`dwZy5Q<w54kzkssBun3RHj8b$T*Hk| z%I)U~G`yKvQNXP^cmSM0r%8tl=n~OJ{CQ!+4K&;&hJY<h76Mx5W*`3>oI)JXjNiXW z0h;I92?o_l1c27L*)#8*!~jiMH`!D<iLsNGB50|c_y@>0Yt0%TL3mfVfW5*6MA%sz za5$5N2yujv)~Q!?tS^c6qj+pck`^rWufOHm@BBsqr-?1#cQtzFb>o1c(jvg+u0^2a zJG!Z<%1OKyCozD$f1DhmoW$74?IO5cIq|(aHk|dvk~JVET)<_*g|iVt0<IGUK(TNE zQ*uLH$*1AD!it;BloZ2j#1=4_$v7Y_+_Xtrtx<e2d%L&+e45L5nDwo=lE%B4*WDHQ zh2g2l%?_dl9u#6tKgfR9*|93!+q`9rhx3OWl7MCrVFTL<8!*AJfeVCPi?du{Qx>P1 zdS|)bSxPy}_0HVIE{}#Mv$!aCAmQ*xs7dhOL@b6IN6OeslV0lbypx6xL_&S&S5H2Y zLq72B;d|?a-2H=;_ebQy3hc~cw{6}a)?Xz(z`gatmrscC>5-hEs7Yp@Gfx1z)-!w% zr}8^XWx0{OCK=Fi(F0s*^+1eNdZ2F*y&Fv8tY?EaAx8Upp;~9t@C9K3zLr`6)xrhr z6D|NB#0&546~tN33d!}(L)?3CoqpP}-1P(oRm_Uvvw6FO+-2M}35tVAaf?XD2|-8x zVywSGt}h>3r2GJXWikc$tiH_;)N>6&Q#XoO6YBd{TVE%7iyC(!^)njy@q<J^s>asO zX=L*x$4mlVW-<o&RJfm-r0NF6ZERKtA*;MLAX{--Nx;!e#sH@X7tlqx04X7<Ll;Qp z1*X8zo0j<QcLmE6fY&7-1Z~HT5`a8$pXcHy5$Wj$p}D!snMYxMNCUayKE$OLol0<r zkdGRB{Ync?Dft?^+o&+Sq=D=m;8d};;vqDg&;ZZP#dv$BBj$cw_T0B?M4P4&zaF(K zja$GBMuQxum^g1990XhWlMKmo4x!sIervb5ZU)2{8Pv&)IW!0+9;(f3h#x73*8FaA z@-%|9kob;tK_h8B!MXe%^SC;hb4_^S16oU5z&Y|}^R&`Si1=3c{Y(l(UQNM~1gY#! z+ib|oO$2uw8k+W>DWiiqjVPeCeAwW#G}0T?$P7T-Ac+88J;d;B9OBz3%txHN>|g~E zuiJqQd#S0uK9~`_Bj42(oBWQTo_t)PI=zC3ZT$9s9DwS*k?lo8=1@N(ZMgemrO2@+ zsfKjVhN<Y-rA@~6z&o)y&7pkON-Ng->UX8_&G7E>S%mH`nG`zzHg`US1+h~|%tfO^ zj3J2T@^J-#Y0s|o9lj>u0JA<i0fAR3Bmns<r#Ht^cYEzM}uWWDfY4$=Ju<V|7|3 zR-MK&nP~?LeQMS0euW)a_gjqnTzoJ(1L_M22H5Qc+3Gd3+1;=f&mW6}1*Msfo#)sW zUVD$z-q%omW`LFg;1D}OT5gzOBmBfcJ-RKz*3a1AJBZMtz!<c6b;m^&wd9>c%p)%0 zM>2^msWEL2m9q#~z^lxiL7$M;KGuu@ezfza<%YQ@#QfqAl^zDW4)N*ja$a3}p+!~; zb6<%0uY;9$41PY?dk0-N?A`7%6mRzzm1Osgeg(M$iB6(_t%I@|rI83-Eg~K1+{7S{ zPT27AdNhT(l0(G-BM-qI93OP;G`W7Hqdg>4I|ntkpI?ds7RiAyg^#=x=M)9pbg*fJ zJ(_d$RSQ4maEn;Z2r-rCTN>A5G^Vj#m1CTCOlj|TJ-)*vr)~!<tA^gJ#%eAwxWBQV z3()f$hvs6CDNy+a>nhB3Fqto9lUt}aPOQ+yz+e>5_jry0`g)mAYm=ej8nYxYU!d0= zEFYul+R5D^f%P)|JH*XdczO?QB46NB*?&e8I+$5Wz|bagPk%Y#SYZQhG;H9D!Un7} zY~UY-4S372f!_$*hU-GZKH&^XYWMkNO=EoH<^?hKQs-wn4WDLKA*5dk`IS*@8WeSk z6y-<c|0jk&_km9%KG_8KoJB!|?m3ETY>eF`Z7d&)0d!|F3BYH0<en4Mgu_A^!>j|d z;($|`Or5IC;%s)Y=v?ePxTS>8VaX?m65hYNP3uU*;|>e80X{B2Og@@4IcU?hQwF1J zMG0_SNT|&q(MJb(BM#%Q6xHe4spzvnt>P)fpD#`UuSng1R}ag6NZ3N02J$H+z~P5m z1yHR-0LVK$+cHX=t3?4&Pd=LiXxP;1g34<aYJ1dtA}JEkeS2(9Ze3$w$8Cx3uf{E# zi3>ZneqJCS9~_RRoSCV~%MbD1IvkBEsvkMCZBaATDCqu}<-_yxL%eU44}D~uNV#^G z4>19%<+Du#t@t_`j}@L<2BkEfA|`;A%|h#DHnGaZ!hJ+3L*uu_0`NJDi&_BxCG3A0 zM>_TZ;$7P`v;y-<<$U?9)A{B@OSBOIuQbb^VCeRjPcQ-2%RH`Ey77?iMXV45T*GAQ z8l~%B>)Aq_Pb3Gx_#?wvdvV-~!?C<VOe@q3pkHnMDC{+lKLu4d>WCn??+7N}A=t@e z3h)o%_Bm1lsMirb$_me(67aN~Z4&VGFChUv*gWYyxtV^ROxMZBv3?-<MaVPArjX5} z8wfTFIgCt4vUzl*^W?7eC}*RTwAFbkY(%D`q>iz^I#kw2N-A`o+?lqMOuv>yzIL7x zoyexEB+}J6O`_hHh5NGepE!yfo+Oz9`h;ulLk^cV56_L|sV0LpmRYH>-omYs{?5X+ zV6e-}E%qrC`a#JA@DG^?!1qUHFZQ4X?VlE`3+U5ACXJw=MYb+DNznzYXvw;Ol`XS% zFC&FfE#x=>j$^wNU~&uG;S`r<K-?nyy9nkOb>QdBPP8Y#m$l>`484NzS`HZnTyNOG zu`NUOpGd>5EyWq|Y!)W~=eI=c$)y<(16qcr=tSqqtqN;hpRP<@I~CK-3r6P&r&Ksr zcLQ<1l0*OtT1kG{Vk89|EAqh;2&c9R<)1^thOI;u*oMVPz=^Gpe^F@$M0eq9Gx6j~ zYU#9GNsDOss>B2QDpEj$*4dM|-smC`;5*_S@O3NGND%)BN5y9=+sfxD0UexQP=iGP z7*Zo(cj6Sb4(*7mX*jmE<N#bCV!)%Vk;Ays%wt5X4x5dkVVYSfz-);M#U;XB;%r>s zi)na=umH1|jL)jgJnGHePW&4UcS#oiB<S9T$*}};+k|pEo`$C}D_ZKLE{owbye`bD zq~RZ#6$5M$(n>M>rj6X80`bufiUx=sCG1*MbAioSH3~RURC9s-gx$}3aA(#B|9!9n z1kmCWj|w#=ILfkIalL4GE?bUkW_iPDe2)oMM!3w-PZO@nN<!)8Lib5Y=t*yu3$r!C z2CQZFgeKO*L=~+To~vgAjo%SBfWNn8aX(<Hon7dlZfPeH;GA~ZTVR8?ZLG8#TlwEe z{w0S=erZ$>B4?4jK{gUj6>DikHdI~p!vE&BHc);Bcu6}rO+fWNA+6@w?W{Bk>9lsC z#o3;QolHrV_oZrpE?LWmwdH*X@pbGmrKLky8uQYamNsT-6wrmqI24CSVndvb+nT?S zO$Si~oFwKa)n*>|=B@$ZMvn<McZ}5<*47t&T`fgJzL~=nTCrODkd89bG0JJiyk@MX zX4ydC-BJx;g;WEhvC@pO&fYcSW>R`o6amY{e0go=ac}OLf$)Db;Z>RL9;Hz`yIKnU zT5@In1j}~vwUWMV@nShf?b_iX1DxVL`iX8Q@zd>jaR4gY%a&V9_zyz^5ADDzy$D8k z2rVTzC}#)Ba_=Be4g&8W=^eO>>c7arN$q915OitJmz+8o5SIuaaCv)kDY9u&4hXVY zNFT#(8#qp~G=2-gEOs!yG&9RNh{M4f%%4!20r7$Gy*D?f@b;s08i4Gu*MU9QC;_<4 zuz_QkT{xz_>&oD@#;-mlrV(#?ds8%s$Jj0kc&fcA`l<Fd=O}z^Z6B%>(a;}!cLtCC zM2@Seab<f1F0P-=YY<E%D|-I)tKvM$@!}5rsruXqc?5lVxVuofq(j)F=lQp*-)b-E zn%qGCt$oPTTZYwunnJ<Gt9NBukh60*ZUU=jT!+v;=}g03l2tFGh{({qKAbEJX9x?> zt`olk=s(N_`Bs^4z%LznO#!;(*@r|>Kjg6h(5RCYfNIr=1%P%=puIoN-eZsZ=>8Wv zZlE}~a>(ca@|@xz(Ps%>&I^^%ij?|vloJfNhK-VdmpYo;RuFrIkBm#$gWGKHlH_{{ z^(jfd3HyJrL)iaxc3SpKDTupS&?N(0VFfEpXb6D6SV0$42oF*w5oiH-<w*=1_YI2s zwoK34W+rHd^wr|Oc3@w9oelCE&XvR#5^NL_Vf%AY?l5mp?Y@eqCkj|`G&}Mi)PsBs z%j09bd`&I#7+{i}JrMuygiI$f9(lA8fard-2!MmF0K`>B0GwzAAZ{@N;1fsN7al-W z7zuENli2i{5vTLfT;4c>yMzSXW8H(8ZJgNuZljFLJIOQvJBjkjQuyj3PKFt~9Q`4~ zfyR&)l}%2qFG#0IhoYG&PBjXU6w3O|KH7CzeWZXCR*Ej**G_mno5Iq8Kywkvqtgkz zF5;sAsa<_^O`WS<sbvM$^?I^<TU@{GUGyF1Rr_kyw^%jxmQm%kqB`Lh4wQfBB$v3F zyh$P6X4C4;My@s;SRXMf_KB0mYD(jOby9axYI;l%e0&V2Q2%SfuEz>pi#%7!b8C?Y zN^Zr$al|V<hG!Ts^%!%=fLJJenEhb+AnF_&S`lzDfK^j~i&(X|Gy`Iq@Bz~;AH+k# z|Jr$TcN>+&dhQr=Q3Uaps6wr4SQUY{vNUc>Q=MB)tT$O2g>8G5MghkiYutm#KQ=U1 z@OhG00d6~n+cgL%ZHfU*M+d2n4zeB)bNexTu^U9|b|PKuFx+trzf}&_Bz=1Z_07ld zjc^djbMtyCc^xBt2HeCclLm;X;r>TySQ4&cHVs!YD+XxP*`6t&I(23NU_fWi-Mzr_ z9>R1ExjLGL{lYAK1?)Ou0g9O{1pLyu#w-0!Ar9Er8FftVm)WPZ{dF|U-5nAH@TzbD zo5daAec=K=>l~VWcpA^a$_8gZ{EOwOA5C1fjG(%gSxGN--F=>h8zc|FA0^@+T}0Ov zd?~K&am)fVJ)T=T5P16Wwk@C<o*)w7p(oUMF_CP$v70!+n#S4mvg26*Sm6Yq-V*`9 zx{QZhHe#1Cz-g?TI87xMWACt3H(#jYGBE>`9LM{&AOqro<M2jjS>H(gf;Ma$Wv8*I zNs=D^8LvMcMiUA$ASNDfJb-xUc;x{lREdWwQw=--KWC$H{W71M*5w2f`(<>Ft2oEP z(~VOi;clCdfREYTWOpXQV6)5=pq*&Kc7>2uaeyfszo>D#DF8IozBP1B-F&5+uXOW6 zy0vxof85Cbwr}4apVc=zhjoLVJRA2NFEkW`6NIj*o3C{9m2Q3wT{pAVz%i^<C>@wQ z#~})8@YG)PEH_1%%WYYfS@XNCb_;zWp?t37#h(O>kPXWC@Cl&|KB3{~C*ZU$#<LE{ zJtu^GLE{T{FuA_weRo3mv^X&cjyN&2-#ja+S#3{*Gyf)|=jDfZt;Mvp6Z?yN0gVTp zB)s8-hn`$hK2YSjkl$$N@m|+$o~@*N$Vq(K0Ggk~>#{Th;soJ8M6g!KEd+lNQakvB zbBzN2cA~i$gAfN%I9Mzs9PB<R)Vi(Csz|K9l0E{er3rw&!Uaf@MLNkO;0z`cfHP0x zOYq=GUM`})B$6tEEkXkJizy)Y<j~xqQ?pMBPn757*TVBJ4=kf`)k$tmX*RluS9$2+ zT|F~Hvic<Zj><TatTrh(U{2XUb${_0vA<>S5M{nK{cM2O-NuDJDlm~sns#!i)s}@4 zfUln%TAtl$c)C~sE<A+`tN&9zozz`~)~c7wQfh2@=g_#HnD;YcbzcnW#V3c`haB!> zwZb_r9k;Weq~Yq5!*Rh|6)p-^$$VCeUg1-Xb|pN=&|24&)mW9)xE6V>Wh;5ElDpk> z(kWJ+p8<By=LRFKpM>mbvQlmLPQ|FR6w~j7d~pC89=<a4S1xdVrl&8mpY``6`8)U& z?ooeIjdI{9;zzoKI`;`F?viHiGEJmCV0%a;TG&Hu0H+BT&@(H(+B+y=5QmT7NHAAO zKqdV<EGRN>8%DZyD$9+irR@!4MFiV~L^{`VX0ho64-2`5;O+d-0`ulkz;KzSzB36Q z5cUJ7xQ6z%QvzBw(LGo;G0msD+uRI-uCW8HaYQ~Yg+<tWZ88|-Nlq|$R>)_Kty8o1 zk5j}-X)a(@7yOJ6&IWu>puOtL<3@^p1HbJO+9s1|SSo%1*L0O7dttXA7}71ge4$#_ zCA<eMPc2BWre>)j@SCibdW+!iLIVELCA6qMq~Twf6$gCMC7gm6N3ED{eSBB{VM?HM z0L`U>p=T0aXlPrR%Gg>RsBk6ERdTm)dv~>RU-7Xt?!}ozk0tf495D*(RJTyY^-1X% zQ3MQ@ID>%0y7HaTZJA*vK!l!RBHi0$Y;BQXGLJ#G>gMIPUMp8g51K)Eceik|@b?1e zkb2d)CenIQ_cLBG`36B#>7!S4EuBrnRZ=KmQg?p%@~^T%{vONYfWq!<4S;I+iN)*2 zylz74`j^L68C_K8m0kX;Y4{T7GHx3a!%npi+k*;Eqo=>q+|ZhgCXF#YIOIbFT~1>X zivJce+c%XAXm&dHJJ8~TPnCrQ>~Jb)2Iy+oHiN8$U+FIO0K2kP%xlK7H7O&&7m^9! zFt&-qCdD?<lrwiXV%woFihzTei~?$y$Gv%|cop5ZbxgReW30h7q_LbmCqE(hw~&CG z9yrR%>PIHmkF=TGn2s{v_ar=hdRl0yO(&a~k}hDebZD{hpM$>`3b&(q4wLZp*B*us zZ)MWPGUJ%}pSsy~QC=aN57<R?4N2aVMq2448a`*OHFLQzqnYJKLmj=y=sIx;m@5e) z?xClLVi%F*7EuH|#AM1Vy46yjBt6AVEhShf=VRreS7qCiyR+D36fmkMuS-|uX~c`O zI1cz1lZl2sMN_Q?tB6(WHIrV`<pk-~Qp6a7?Lq?n&i3PS|8DG?$jfDA(MaC3I&}Td z%k}PD1E!PWpUuWQtf#9W$d;4IVZUh|g}6D3qs@EPYz4%}2+y4q<7j-pm;ly@bHEEd z?F&1g-Vg!cO(y{LXE6r+Bsze)y{rzXCcRh((7jhEdxS4%vv|339cR}+h~Nk1FV6m2 zu#<QT<1g!-EK+}(En`osGGbiD`yzN>xs0*PM(i@y$aoh4sP-aguVVR=`+b+CJJOcY z@Ofq>ZGLL$l)L2O-nl!^3TSw-^a`+-$wI(SuAiWqoWTM>voov!)JPF%e@{w?CzX>p zJL$^0alrX!Si$+uNhqoNr3ru^nN0ks{KeQ`eKv~$nlhPas`86*eiAcgW0H;!=sFlD zXH%qYfT_|Dz@5Uq(`6I|RQAG6!^B+t83`oPnB65Co9N`(hfX41g2`yYgl60Ef%^#G z^W@_#aS!;em+Mn6G3@2icTEb;41y77f|dG`;OO2=zDjUu0h2Eh9Dg>GlL_VtIqn=P z^&BP_6TBfL;Nx@nnDg)CETe#H&cNpNuh@BBehnVoxchI|_Mn{3I1|s?<LD6`kIWdI zbtXS=w}}V~!*jTXDB#>P;dm0`z%w};|A#Gl7-oHb;-8=%?X5&L=MOa8DvmAd-xzX} zqJT!d5o>ZAAezQ+30~ZXF429=0R2PbcmSf9I~XlC&4e}Z;B$;lOCr9ogKvrWw;k9V zpwa#u=^n7lIiVDr^_F?e2^##G@ww0-a<<Kd1_-)@bBO_7wERs(?6d<A{}!d-97&SM zvk78C0<M(=mzFMesgtQsod!0yqfMV8!S|o;2*ea?$&R!2aN}=v^h1D^(?+ynbw#|E zB$Imk?-{QldV?BUy%UHxP$qMrbC~oF-RTGEP*I#t@OvQv%em1L>SUI?jJssK2RA84 zn^4>h?=Cjf`5?aaL44~X)ID#PDsrkRAI)8zuA>>B)(5P@X?`)TEcFY32AJsY?7&Z* zdOLcuv86g-DaSw*Fq+9ET>Mo?IQUd*{?zzV4MajWiYLJMKKLfrMB0NLCvOSpK^u(8 zBKJX)2-;HIw>0rj!uP+5xfU^{VZnu+I%*ci$II7|?BVo3G_wa;7ntD>{nRiFGnJ{W zxRYyG95C)|vqx0dWy3tpor*v0Ct#_YfVgXQ6n0zB4y`F4A_?dxQb7N+<p>1EB-rfI z-<~0OIP2{2G3|NzA>PU2a$x3UqoB@Adwgg=o|j*P7dq}&P)=*O2@^^)Yh04fIW9T# z!+C?Xm`&>YjRNMhbNFy|oBf@FAoxpx|H2>B(lUQFbG^mh`fG1V8F=Vfye)eW6bgA5 zt<e^JL<87Gmha)@_Lu@;0}Be6-M_$IQQhsrb`yf6fP>j>91&7NdK=dODE?Dy>YZh? ziozx#<bwpyFj@E~f{&O?0{(Iqnp9LL1LCj3_Yqv-DC4|7p`c)0+$XEWV4m71+~N;u z{AC}scmjXz67)a%gxr7VSkC=E8vfizCWbEP8PIhK*a}d$K-My_Q2{SJe>vZ0bP*B1 zI8etZsfbV!mWy}<Rp0t79}#pr=^vo|SrQR=+*w%>k1)D6VmqUxA|BybF5+ZL;6+X% zfhGMdFE)3*Ds|Ghm&UcUlBH2dcgaHCWfYqRlRHHw=SSrKS>M8(M`oD<{Ol7QTXeHC zvBnR7oJ*ZJmmLCb?+Y>o$UD#8pM&au9t!{$JAro6k)6Z=xAZmlE4L^&ap#6b+EF~@ z=w@~l1Dq$?Yf8^^8N{q%==H6$jUDzJa5R@u2q^C>Y~Vg&BazeCTcLHV52okI!E4eI zXr95EQGm(Ezvj>rg|j@7XYx|B3hCLLm49Q(^YUx(LN5;djTrxwEC6l#;+A!y`3mwC zeWgavv1X|L&2!CVyfLY?;F{xrHcZ9<SM)V1))T4Z`3n6Vz#+yCKNMtjL$@T45#vR6 zkOaITF|71W8vc<@@HZxjc#q{#z!x=DzwDbeu~Et=EfWBECdTrOX)T}0@;IP<KbfF3 zh(7)7@&Z-&A|nDZ^&%?*_4p-51meP|6@hvvYD6HGI1#8ftO&%{P6VoD%!oiB=kO|T zaREJYT_9^<C*gO72JX9nTM5YJVv0&LAR6@(K4n-h8eTrvk?s`Z0=Sl46rMhip6v!Q z*^`PKbdhKPuf2%b8_C&@OSrix?@{9y^=yqYyFcYVGA3+bNsJAjGG*y3a>-|>i{!n| zZk;lyyjx7(SncND=fou1(t+<>z@7RijVVIL5CErMWCS2OTr2`$*~LZxBL5N*0MEX} z2tYh;1i+zDBN%EX6arf?3+!~->di9y$St$hl*IAev?$<|i_BkAI68BRSxqECtd-Kv z-ceads<T8MMQ(d>2a|w4+@2zM>0=tIZfjbbe&TVWlM52}p5xwg{3z3HC<EuRulQ5W zt-F?B0v<L89<Xgcu|of40d(Qj{fzOZ?Y=o*?0{=8@OIhr27YbR27Ya`27Yam27YaG zW^>G*GM(@Dl*=!?`lG-2<uu=IaUQ5eFyC!s9vmE#T}<Y74>Mo4W2b2c@R#!?)cI~n zmmg?Jmmg?Jmmg?Jmmg?Jmmg?Jmmg?Jm%9q;Qkre}q)4^#8?h>_GObFh?5ff#qpGyZ zqDuF%Dy^bbxo8n`U!S8z>-%Ucb+nZ_+DaX5rH-~zM_Z|*t#r|_u$RhJW2sr=B(F@{ zMb3jI-m=nJR*-t7SXO$=HQI8Gwp`;ZXNP0f@cg1#8j+y!vRI<ITM>3_i??H2za85a z*s<+`9ot6Ov5mW)lDYnTRR#j{z%D}`AoL4%u)(ZD9@w=Ps#bZe)LtvK*GlcRQhTk` zUMoXhH%JdR_y83;K!pxap#xOt02MkwMQv$s)Lu7guN$@3joRx*?bY9eOc@Xa_YB~) zE$e9-z7%F{rr5j9$qO8DzFD=S&zGb~SEaO4r?gV1v{I+EQm5p1z@y}79p5s<0qc1k z(<3#A*Mz@^pmBdD0f+QADj-@5A5hR=QU<;;fWypBZzW=fl=r}eLGbp4hW{5Lez;H! zfWbhyrV%vevgmFGL<`~XraFGTnB6dN6?CHrqR}PH?@w?UlX1Y%OH7s^Mqd)Tv<;^W zZ{WnEfE)W8Zy@dv{%nF`&O3IXX)()V0WXjAg=R2?h`-nYh%YW=hX6BS3-p97&=a;m zPuK!IVGC+3eabjDv%wra^{{p$dAaTe)-mjDt7F)kRmZRw0LQR5rjDUQZ{}T>%4X36 zfBPDG`mV19b*r_k-PY&3=55e>YlH5~2Hlqpx-T1aUpBbDbRds;93Tm}l*!bkKGsq> zn|V#A04)X@K8VwKp`~mFMB4a7BDyTI6u>01loJ_k2cu0^synBcMDQu0hQHFoG&0!J zPcbmShB*{h+{o!iH~clH6$@-mPSa-Q7&br0usw1N+b74cdG({H7xm-MrSJ<}pfBym zUwzn+j)b54`x%*j5yJEl^9y{7#WBRkM&%9SI_CDzpNRGO#UV$Q6<R%(saMZd(>L&d za_q$HWPpug`y0By+w(4ZOQWiyTUIE#W$NfSFYf9ea)<Nb)&6p3Db_MRN@yxq5b??Y zGq4)#iTNivUjRo9!1G?&I{(9fP<XdLf6QV*I&x|!x{gLVX5KZr>JqWuutKSWF=hZ; z&-d2Z(vZp5#5niDP*=eE_kipi{_PZ_TJhWqvmB;~F@^O~Z<~`)?FTPSdZ~YXmWB_6 zld-H&49nD0)Yfg`SWQ+!v)Y>*?e<RWDw;!E?5T@FPCP52S#vKECv%<HIeCGGudujR zCYz_c{DFplz9?LT<tepKX!!TqS)ra-rgrx)8aKQ+oQdTre;9VCofQgUnL30$gY*ac z{kg4P{PBmW3*yhq5Nl!fj`U3B&oY(qU3AdSmJ0yjK{@qzr$Ic$hcFg&UY!i`*l@98 zSPyviXmLTvsbz&SvP|8H2Wb45JhuRTe*w;PyyjM%8|fJ7+6f<+vbs0ZvU^xAKI_u8 zFt>%6zcUN=cSb?2wMts2Z^^?a-~%QL0k_1nUwYj{+<h@|1-vmHTIdjeC9VL~;>t>4 zP(N;eNqJD?xY(Pa)v|1rp*1`-7#DQwR2+27%azN^p~TFO^9z%PgVE)+se(C-{xxF( zM~p<AbeIY19og7zh&wc{E`LK!gyueizU10Ct+L{19UHC2CG`$s{w<F7mIYrC9$6@~ z{SUlf<F)ftquUcTrjTa_u(;5Ev;@?vA^^PR1lICw;`C>QIH0f)ONs8Hy<yxMGT+)= zN{kx{aW7C7MAQp#;9to_;CH*jy88X~|Crbo;(W~tQ9#2%yhQ<x2iZjm>PQg)S`Nxy zz1~S2(1>+Yjg*r(J82<;7Rrf#IrTd@V1+1jj~EnMs(VSgztG<lfvz`5KK~J3SbL2` zUAx-TaH#kL9Gu`&1kf^JYXNnp2mr&K0Muj_L;-gV4IM#neG|Km1FTt`&7NViIACjn zCuS&c^I)q4>Vv@|0m6B>EASs3#2Rj*ce@&51twJ@+f%vcCYij3V5X2e335_Qwjdb5 zWON+C9N{h{_)xe_D1&Z;ncI)xRwknrgC%3)9&#xi3zsr^7QuKXqf-c;6Y>>;AA~&S zvLG0A8S9Q9n9F4JRf5li`#nLYA<P{?a0ipIIRtMAcN;-H?sl{}K|djrL+u>6wb7mW zF-7`YA2>~BYnquY-MT)QBW~xZJVW;<gtqbpBs<jbTAJR1w$ldMPL#G=W2VIFqUE5` z@87c9i(F*>YO>rT@dY$23~PCo)2gkWd1mR+X0U5b?Tbn$je4nTYjz!T4E^DMsOj^B zEJW~TCJ*eRoAGh$;NSLlEcxh`3{~%0uKF8kcxzb8vz*rdPCi)Xps~iYb9+qr`z;^& zzv1Ic^6^7BbI)>_=aKj0Q~m%1eMU-tNV&$}0?0GMy6QV}#Wen1Dip@ET$tx*xK@P$ z{nmlPJZFSD%zxVjY;w@`hSu!Jk))e9IFzbqxl{+yaL8bvD(EqT50L60Bh;z>x9RoE zO7A(+eL0+-XSwta<k8BT5wHEFAupcgybPdW>{4GO=n<D5pvVD6sEeFM<2lL!=*0(e zFv|$FgH1I4vvL6XvjaKUWQ5wm549A3zP~!uWVzzU(s1%+J~Ze%FFQc!u|}vv<EoP# zx{7$)!l6COh5ng_xkG$t(9MS&AT*Sl4+)3vG{lDP;q<Ph@#G<)(4OT&XK1)Yg$BL) zK%p~6s6+3h@t4X0=zRxru+s>&gATOdI}h~^K=&Ma00$k6P&*hw<7<@z(6=1O!3ZPN z4rbGMnOx-o7hNGQ<CTIKeTBU>1J!t#5rODAEc@0Jjy_{Yall_LXYG}xAgrS}JG%1< zBLeZd6M^bJ%!s<H81Y(S!~i`-TYYVdm=|8o1u~Ai9J&d>49;hAX$Hi5!ner~X@l$M zlFt!|HKTxwSTi}=Buyk>6O+*ojJ>+%Hz1p4V&2S|r@VOzHq~NY?aWiwynt*5o9HBI z!O|$8yPXKD`W>nLEUJJ3(%%Z#-yHoB9QeHH^3c{8Z2F^;UrNLEVJ*)JX)WV^=Vz8V zvAeJ7OtH_C0s;N6faWAC4Nkd2a@8-)obun9geoeaevFj%04~0Y<r_;t+<%o_r=T`i z5r}WE%3i`V$ogJ!1bCj;A8ALP_ik5~z|p*`SPQW1Dyy~3M_5^6eOgCo5pb7GUPVbY z5ql)q9`C-QM0u&G;YB?UVfcwGnL5L1Zx3e@@G6s0!0W@|Xk2Lq#CGBLx-tm*Udh^k z_?7%3XGICVy|kf(9`)ZN&gY^4IC4a`!so>Kt_JsPO1dBSB?Ul1VFgt7oHP!wR&>{z zdc(RktBkj$^t*8h@m?lxB9ZJtBbWpr*~8KQNTh5{iGO(nDeo6G<XOzI<49wdkTzg~ zBFq`iQ~Gg92Gll=83TMMO-3P4UuAWkc4fJ(@+Z>!ayTa4f27y*@@w#Dt~a^4K7=Z2 zb7d{e)>nphm(r_pdYy@J(v|!cMpcP<3j^a`VcX7zrIWEd^0(OeYd@Us28ZM6zsNlO zV|4cL&@s^7u@c#=khAW@=wY1Uw;&=NG3q^BUPt0zhp?)r46hLd6Fy!_t1O9-TYL(h z#w)MH-yi|6DCj6`u-41EwyJslb;}!!BNPvO@5)ddh-b^<0xXf1EGk*zRNZ1JG4ibN zS}dMonzbam$+Ldj%?=WMKO&T4U9;3t0`PMdyK4tnr;iA)KhMjr!3!<5LShUa5ne(V zkK-6Iz*MnW5VA4MMYS<~t>cMNEZ!GjyJHn#e9H*_oe#rv>tM`(2)vvaYqBc<bM=VO zf>(Nevuq&7>sggz{C3!OgJJ2;Szf5NdUOgjzbf2z&&#jD3nkr|7$;q&cN#{gUlrcB zh85bkPR-3fj<_57fNB`j$>4DM%#E^j@F6g(p+67?xw$AU=1b}2SGl8mgXM$R98PgJ z4Nn-!GX_{V%DxZ^>hV!50K7Rm`xVj#q`rhLQyod+6xK}*B)CS%i3E2E31@3Yg^E6& z9G*EEMRdym$BpJKGl^gZv%6<z5iS}nPbo_Y*Nv9P2H=~cLpuzKJU3E04Sbywi&hbQ zXxPBUoI~O(f**wh<c<~%;4$ns8gm&%5$)B{p{7-k(MN0_1;8DC8w<7tqFG?<!5(K) zH@@C9Z2R9kWc{8r`aR>U5r4Zq7k^_guMWJ%*gOUp#$;-k32+eq<>HP$M$C7|^|}?6 zKAzi9mWv5Wj1pSQJ4?qpd(}Xxx@<d<?23`H_O39x6x6D!v-4ildpdx9>yv<HOvbT3 z77B@?_lg2QCLyjpH6A5%<n5Ez9_+7-mELJs6QY{>$~kpCSzwm0?t|i4R!~jje~z@j zh*YHB5If;&Is&fdt^v-x8oR7`8xuWm;4N2P3S!(1MgroHu|{Iu^f0#MMp-Uk%d>7^ zKH%CLaPp1ETR__ay5+jo`&!_94JQXzv9B0l^wp@PxHIsk>*Xf3w2X+k*Rx;1s4<3r z`xqCzqO^jD5AEPHA{vY}0~=}p`CP@Jk`1n*b#V=ofD5mIYEfxs1QDZ{9|erQj$Q0Y zgZS5VtPf}+ne9u1XvPD&1qN}{_56P4zH|hC;gJT%jN!>?47_-Zafie!>;S~`W7s#~ zQ_KI<R7ZT&_6H$R**7;B6<b*YQv=o#O4uWL&n`u>M_q3QDuvnHyWj>hP)=vNc44th zy;_`3b*)SMj71|Y0(`<<NdR^+83o+Lvz71-$j{j5#J=5>NhF|}$!N8!HvvG+umf%s z_D0hNuz_#OT6^2fJZS(vGa7acsGG*~D4)?XUAY+$*YRM&O_^_uvfhm;s`N50x)5-! z?3T}%Fl%#Z>D@%!BWv>>zc!cZwYgNU&82#6`X}t0$>+VYr2w)Z%c|2=)Xc5YSHSx+ zvD?$nna;9O;~QM8>a<@g(LeaG{x4n5Bll19w4Rx<y88PtUY@Vy`8DJ@_;qTlkfVR9 zdOjt;<r>2Tu|t*%;9@CYe;Uc3KgJButViqsn_z<-fOvb1@uik&IGT8!+$7_@(!hJA z!Sl`$4ZI`uO-JvDc9u$Sk4|q-+B>2_t-BG9KIf8CpL?IXwa?w!=Wbo{Zs${-{J$qR z%cY6So%5J-Uag&1Yv<KE;cDgFUG<K*HV8Ug%g+By@K+(>@0>AATE$mPXsia{IlL|l zp?MZ-7TUN(+LDO0G4(1!MXy{FUU{BZQ!hvVS<I6t#bMWqBJfU08PUtbDI?8*rO9pt zQ-t(sy1TIlNU}`a0G_@U&vtlZqzQ@Sjf`{zXVtYxWZZ2oyW0$tx(RrL<z=%<wS4Ne z{3m|*r13WwGZ-CtT`2U;)S7bHuz-iTQ{(Gfu{{fw#o08Rc|+)AyO@SIF)MzPF$nGY z2X62us^#Gf`RRJTJk{5{AFelB><6QuJ~uI(4z3&dP>llan#8J$N<qw>#C*WdmT&Er zkaFW2c~Jujm`nl&-pHzJN*^Gi?>OcI65|Yi`1l~Wbv&B_j-0?MZ3v2m1XN5g+S`bD zpZQV1E>USRF$mgDWD;=oM57I2JoBS~&qbx0pdJ^KL@_Ic{HLi)O~h!bYK9!;(F};0 z(i%X&@yuV$`I|m1E``6{c3?g7!1~-mwjYX{551cirA4j{(ObR88QS9v?NR-eS>ur( zDG1LHm(yKmAy7W2yV-<5`Jb-+Pj~*|^Y3G`mcC*xt&Qo^Yfargexd{eUNkYZg%6`; zG3!Rtq>qU>!Z!Bv@owH1m)=HJ>nB<X5!H6E&&(zddJr-3H~X*R_01q&vvFnsq8%^L zD8S?~pYw=KFiIdUll6C*UzdF|D!;xNmEU}wU*C+%Z@$jYU+)e(!1nq00NdyD|GZ~x zZp63A)V|(TZ_4#tl<T=D*K<*>=b~KKTCV4!T-RD&+gvQw@s{d%OLe@ZI^I$pZ>f&A zRL5IdBOXpf8xFLM2HFN=zKI3eh5~IPfwqD4DXZ$L&~;Vlx+-*C6}qkpT~~#!t3uaR zQKK$8LcbtL@iIx-SVa02kn$@a<yU~a6FFg=m}9d7A7fXAHaYzXJCd9%yJZLk88e~A zu0Hujb1y-895g{_;31+4Xv1V2(A8*kbsH>>tmkmlIN*heW<9^)s)_q*;=Y<t7Ts?2 zZ*GD<?MD8UVf(T^<@V!vuYpWXoZ!cx6BF?3Y{l}kB<>9XBzMom+9Wooni8AWKsR5> zBV8BVF2wNY3G#af_*gCI<9N-CtCKm-B-GeBhl))m%(aPxxi$=rh`Hg&a5G!F?0-$_ zNOLUa1mklvATAll&%oqQeWwLl=Z_1m5WAN61IH<IqEa+0rZ0K=l6GmU9H2N>7H~1a zW+4IFcwJ7&^@}m(?cEA~hO`>lqdRom)}oPhXk=?-?{zJ&C9wl!vw<~ZkQTBuR_KGS zDXpnmxWQ*Am$W`?SJ=nf`3u@=XBYP&;wprn%5O;RC!P^?C0ER)A?A<cLYrxjtIn~o zzaEftZc*tIH@aJoMWwjiDC6la1UzB+Al?=}VAll0Z{m-_MWrA%%V`5JWh~OSLW}f4 z=x;-j!`tS7M+%>tNrXo%8_-xf`zD4b)Y|3Z>J+h-GP1TZveq)nwx@M$jfu3D=9Y8c z#Lz;wHaWOivQ|8>c090_Ir^ST*)G+#OSSD%ZR@A@MVD(FmQy*`IAGp*9F616VTGw$ zCPKi6AtA!NHc@jB>-!ML2E4;80QLIma@V9dJiW)AiTfrw#n;SI2(4JfTv{8`_enKi zRt=^)s%mXiFgXZXP38p;IFHFBpx<Qs&OfMaA^?0S>VS`&4yeIJp}B|a(^)qLIG@SX z`O0;SUB4@Wca^`G^5>43p2RAU*f1-c9NMN=(Qxc!toY(w;A>2m4TYoc4b502I=~By zgs**!7Pq5~yPRNB5K;aHDSv~2zgVSTjB{#lG@`r@(%xTV?+G}$kgH2%OYtJO73&wo zy>-%CyIwb>;fc(O77z?53iakl8n!QzcP;w1&44_%h~H1%9Ylzs^|}_xEsEwrxnWRL z4drp_w+)fcN0Y;Og7=<O`JNZ&YH_U-t`+{%V$-^BPv&cXZiJ=)Kcm($^R_c{J8U== zP$4}5Y?g%u=$FoR`Y>@9N_Q6;GybJ%YshaYSkur(thhM{p1wKUzQ>Fec)$<XL)q^1 z$3%QCDFI;1{7pohn>K@NFO-vtywAy3+(OUrx0)j$L&OF<c$<iy?ZB!JDGq|`i`gBZ z;Z6LFjy>r}-k4*E9-+n&^4#<m*ca8wfM|D1XyI)(W#r(6ntep<mzn^>I7Dig3Bf8L z5QF#tQ+Bm3+rQwGN0te867_b`Ih4UX<R`*FBBv{@D(!i#lZ9R$Kr&7UOL`{CEt_ zoBqoKXOO2px5)kIxS&l2^aUIw1~7j2`xznTTOvo?mA5j9w!bZ;RqT9=IHv>vci+PA zY3;$!26oIKcbI#QHNzDBzSvANh}Wc<fNw4TC)3$*Gxw#D?YY@&WQez{c9uK{O@y+o z4%y0rNnG#U?9p!ar0vql(XS(0%bZ~Hw!qq&#Wl#9+i}+7b0=qC;$0whUSL!jAiYR8 zd<tTOPrtHMrSE^)w68JZx0VQJNS5<UXA$wBtf~jSm-*Vu{2IFkKTVfaNp4mpxmlIu zf`0ubvkgJ~!cpUZRuXk~DTod?Gru=MnUGK3EQt|`wCdc(B%uCn#$hue+6o^~RATrb zrj~Hu0FkuegQ%b8vH|B>{sE@@KhN-iR_YtItkjzA%+FkJbZOss%~-akIj-(uG74DE zWE?iX2=^Cf?hgN{#ClW|A2qp>;_quSk9%`>VScYzrdnN3yVG<G<SB_RaI+JQP>Wk~ zx1%?@#z*%M)J=!XCsKe?3G&EI);xj9J&PwX(aTJV$^vWVBvwoUx-l6W=AtM4+Hhy{ zGPCH=VPM~z&D0_Hge0A~*)97$y!V^kW(IyyMFGcIzD-VF<q+u;nY31>H+%|%cvw<> z*aw=e7HkZDr<WN0*+gWdZ-8ED!}kq|>5#9>)_vV?qA8^)sK^d(@<FGRs_LecBJ40b z08w%qKk!c}#mfg6yjNnRAbyafe(*_6QAxR(MJ7LSQiVU6O`e0V=w9dM$=!`(sxP>W z53*^ck;(YAS_})N<Ao+YB}E$Fm4sN<*BsJ(f{PiKn*s6MZTx3e_w(C6MFD<jKLg%( zxAAZA3m+#FOVH|<N@|nX0Q3HT1o-eaEUKQYy`)6wY&jq6P*}_pl2~kXL&yC*lOR^; zbH>oDs3j$#`GWK{mL}hDib=1Stf?6PgHw!qMR(X7LBqjzIUk%>YdBkjyj!^n<fREO zb*DgAC-pB+I4yUwc6KbM6{TT`umDf<{+-159Mfe5z`q$j@F&9uwl5VvuxqLCf&C31 zc&Xt7?>BtlV#5cnHGJSU!v{8-B7B|hOinirsFWU6nr!9k4xo054q!wn>i{M&8J}Pr ztL}QgF_?cZB%nvBeGmbaU=LBi2uZUaa5A%FfTd0!)bi3$x34CL^JV4`=B3imB#tN6 z3YjrTB}F%RTZ#3)%oJc3&%(suM)GlUsnGVnW;8xtB9{@&6B6)%=`#>79OdZO;NEwY zN8$B%;oK4b%d~8sFP&!m`?PDtz#C1)`U=pVsu(|oJpoSp9S8L<;CXo*u$IXb;2=?5 zR0^W;@0brb&GM~_1*H6xgjhP29&x5J`2oQ$ApyImvX%dARv)t1K1GrR{xU`86FBg8 zP6z;RU~eRR*U&a0m;&2#a&bV{--(Kiat(RAo^wkAo@6osXm-0v=o#|5(PrmsO*A&{ zLRrJfo#M}{CbOkEc+1wxbM)`Lo<LD&NwAfrwx%5Y6Rb*Of!0`1o5muov8XnU#ahEp z`)Q<c0e3lhfl;REwW?~_L-9OrRdJKddCu?TCK>Nnea;2ym^Mt!K<7B=9lKsZ`W0tT z_z$O8=oQ@s`96|<ER$7H3f0@Eihos@e>ZBY(WYg$#rblZ=pm9Uxm`ZLT^b=XdeX#r znOFdp-!5Ae_|om>mIB1<S$5WE{i#{gu_b#tpmEgHtlh567HG2tH8f0HwuIZF>=$c$ zKgS)2kuUY<d*yXn*}pp9lNc9@GGGXku_4~BqSPnh`ib@3LDsmx%v+{DhWs{lwgoht zJ&m_(W8j~r^S1k%p!p18cPAV;gW2Dd(cOL-lh58C1TWt&8n?}*NuA5=hvv~WZ61?4 z#N8622|~1dP-rbbNaQVmO{U?=uqc=iw8<ckU#5!;*kFd2sSH|JUnQjTHS2fDAm>kK z2p!xN1fA~U$^pag=5FmNxtEBC?iQV=2~i*m_7Sn<eltLnzt{nY7w3ox@al3S7*9k= zxpe$4!iD7~Hg)DO?oPB7LASX^e*h7;*#X-3jvavbVXjyM8_Y9;4n*8z2WazFI{*=V zK!O8@Jiq|~z2^%Xn3ykKuO*y5-`Ik9U_R>uUbB1<e>cX!UyU)a*@H&Oc78d{;xn?g z0H;pleFC`V4pt2!ATT*O_^R92W;RI)fW^j2AiB>mN_Oe71jMuV8;PBKG6%GL(C}?K z9mstiujOdobQgAK37nWo-dWQ5emBWGd6G-Y%>eT^V6GWpZW8m&;96h&P8aPIa^Fp& zb@S1->1f+@v~4=tHXUu7j<!ul+vcJ*#paY~&3&|KX%%f+T1A_dR?()VRkUeo6>VBt zMVpqk(O#eCLhL9}bFhPJFzP#8a@c`#h{XS7lA{O5{Uvywfi-rUW7sX{7&dFiu$eoC z&E7Fk0Ztvqz`j69j$zAk44W&~?4P)_2ES(Pk;enS@MvI9Js#MF#{+xt@xUH^p<ma+ zfwr0VLVUAtWO@1*6OH(4#h0i3VH;PyE>EjP?tcaEOmb2%-TW^0ahU?sdj5gy<1(uK zv(gb_*!AHUs@uX)-4=%GwlGw;4Z~Dzf~w|=Ts2=9Hu<lA=gQk%qRQJ{qBTa|!7meT zr+I6JV)pRiKCamw(?2V-eY0ch<KNWu_wPVIQ<~M3S#iJ^IiCC#A95X5^RKuAPxj-2 z!^a0lG&>>ucOM|H$9@X|h^pUUhPWZeniNDDn!vgEvRh<~QKvL^m1OJVHV8OL6c&|C za?brD;dmNP<=D}w-r1gzGbGhAm{{lVQ2IwSJ4wob80EFWAEwMZkd}6M$#3@clG^%u z$pQMR3%$e^nw`99>?QxHv6r~UT9vkU(&hM0ct~p2S<H%_Wu)Y^y%wKwrz8a&bEipa zj8pdAKaR#znCCylH<WHO{&^Q0%}?W;J87mFfcQxUn@V23ht7w4%mBpRd*p%(G>7>n zzI2>^zZu-@PxejvzF`yJ9?YC)!l>JW`Dt~%-&CS5^7GT`V(!04h~(?bJ<>u>-sHP5 z{jyJMVOpiNFs;&Bm{w^mOyd@2za6L?7wQ}r>KqrQRgMdFjtkQ|#~1FBi2%NRmzg0D zyNzJCFJw`PEd&D8(ePfg=m?Lx*C>H#a-Rr*$KGcIAm$hW@F^<*Q9WA(z??E80C9Ag z2!K&508wQGz|X7z#5YD@n+w|Z7PM_GXxmxPXl#6*(7^HYjMMR^;}D?XPZ}Edl2v-i z%mf5>BKS2DGY_CK4GkYOJ$uki$)eD*`HJtd3(@O0?`HCk#x;@fmYL6F_CCRyhtaV! zg+A8rk}Z0dY*D+Ui{2$$^e)+=cgYsLOSZUOf+&k!+4=gOcuR?|J73@LZYjymo3HjZ zaUQ75*XhjHxy*C$O0P<Nolbq7PJNwDeVy9i6vuBK8mQ#gsSQpNmHj%G{aDKU4tX8| z+;x{p>Mnn3RhOt!t6HBe)%ww+S|2CXE&!Tv=S;pnJWBA%Ou1F3nlHPT$$j@q`J`Zr zClaO47V;6(1tQUdSLZTmt5MgTu_otw{A0cOC-ZFl?QX^Rn?J!;mZ%eKrSAJm-S?Hc z?<-5x3AU0u(Qlp^T#~hz{%8eu)w?9r46Q7&8^K94wXe68|J96{6Rx^M9o5yk&}v<1 zwJx+;7h0_g{jDiiwPek|%Dwu(%KaU^+E&;?{x~mdfn~B6*x27X{@*bI>l3tfX-~C` zIn}hojd$^#LuEPx>JO6gAB;m0SeG)gPGw}>%1AqY=Pq|DuJ~_G#k);16y9b+#mz7A z4x-*c)H`sm>tNq*mHmfx@YOv`+B2u-rc*oZ9ocDij%(j^J;`?g`;P*yVlsJ^+3Gp? z6$-@Ncdr?M7;+yg0gB2DAH@BfQS$yWw_YptdadO3`iLF)b0MjgZlzw6l_fsoq|NwJ ze<JlV84ziM9`G1aXHT{#te#%~ckc>{jNtzNojZit_xn49SLcRTx6PTHtSRZ`XJAc< zYWo`9_BAEeCl9Ps9$2rpx}HY+QjHhRW)d)k$)xXT(l^pg$xY6@5azeCO(AT$u}vXt zR<n)U83mMkUsg;ZM$Kuoi$zUX!Ea4ccQZ-w_WyXoklOV7!xIyw6fWhB5e1Br)RvZx zGO6X@H!^IcJWvz1xWu~5(LW**HI8sGv3{uSzF$e-ucY;$=4C4>?qi!c6xXm~+)Cl` zInKCn6TwL`YjFOD*`cXg>J+1p&X?6;rFXe(5<Z)R&nBVc-6?K<cJZP|k$!i!i2{0- znG^C&BHkB1V29;fZ=br_q6qttr~;Oj@yWf^KQ@kW3pwf+vMb=-d*ys17S5g<<N&_O z9h*+^4yRb?6$_y_HGJwrajAG*NAT9YAvd_nH#HYC;A!@`2E;%k01mf;t7iqlv{@nm z&YxujAXXXy@D(cnvC9a6iF=Fy#DaT70DQ&@K)h@OcsaaTxzNB9%8e3;^Nav^wH4q6 z@pk5@0-6`c7nR^9<X0mAnwP*AmEeZto_XOtggS4M5|+A&M!U|v+w2Tzl#9m7(ocza z?j9onv5K#b(N(4t=AYx!T<n78==TT_Aja3?6x_comstCj0FfxJlUzFXn-Yk$zSQ{y zPbW&Ml_em$$tAv<FJWm(e<D)CPx(n+Tyi$WJx2;S#}`mp(#EtCk4ZMX{w{WX<AiqF z0!n|$EOxQPRgyp@!?}{gaMKJNDE2)JV*9ER+G}_AngpD8w;1(z!IJ3J>$8Ln+$w>$ zy1+@>LL05kT%p^z$Vp#Ne#Wl||4tXC_?uaLf6c!Lm%-p)5(%(R%e2wHSv4K)V>@>` zV%Ytj&;(jm=oI#PwU{QdSvmT;de}X})br(e`89Ys`bh!pt5+V%&$6_wS4(Kt{yBUK zu1RP1I|X+HZFhcrUfXN&ZF#x)dvuO_29<ig%mH8k&p|PMz$WOJq_g!(IbQ*z?#IV| zCj}7}S_gPX?LEop6M|obY(Z<G)!a~?c*#0pP7h$QJyt;6HaC2F;3j(4JlQCCzw80? zHrmUCI}F{F4(fJ%SjPcf_&#%7X$C}Z;ahj@>9(^E-+D#?Js#!I{u{554`O+IkeB;U zj6(hd%VU5(53zh-8pNd!F(2^uBZd!R-y_Ti7=Qkg&8I(T?GmF%KATk&usUvGX!d(Q zB+>NbPAB6<Qp_Ts%#2cadifDEfUiRrN~3`N7a4)|a$nd>Z|!B`Bef{^=6q9Du2!;_ zCcM;@u%Dy{JtUa`Pk$)1{g#rrLh=CYkp~38>73HUkr|&74Xj-iX>1oezy}W^g8!ru z#2>S`5K#Rf%!~X75NDF}QMOEU?QJ_irxq?UgJnb<_h?o(VEegU0wBJX)_m)I?n_&r z#8)2orIkm&9#l4a(kh!hX=S@d+wQ5&wp>?It}7|mm6V4nx%y##`M<n0k~hej+p*RA zVnGmmzkr*47>V0(UC~>~<s*xje8h*UPX9zi!$+A9KvaDYo%*l@1rJ#AFxyQly`6}= zA7(p%DQcRoV;a}d@KG}W(ODvOe$>_HKe-6^lh|Wwl5x%%K1Re6i3E68RNnPLtGV$r zZAGei{woIMzuEXM*}X3RjaAe3;hL*P+buNv2l%s`H-JD&0JLQ?=IvwI_T&=q8k14L zS4_rX^P0@)YtGyqozIif2cr0aselweugyH}&E4+Limn#hn5@M%#+rOcI^Re`7L<Nt z=0t5HBJCnjZL(91KV^@vIaU(=ni{`m=J{~>F3pru^+$HzH4&ScuV{p&*?G~C0{EH9 zB;ZNj8ijzDnM@9U#HO7@+C`jpA=2I><Q`XnI|-YTX?xjZfYA&1ul_WSOspSild)br z$C`B_y)JAP2bdMPn-_3ukr{xvnj^;n3oT#mCjZ^7)4iMh+RgrSk+<EiZT+{5UMJga zQUsK5T_h{i{Pz)Z<+c<8x;-NAlTQdbf;{yR+<c6~H(30S=k<ETCF4IV2xf0)()Auh ze_6kPWO(_vHW$Bo^1T-SfjkJlSZMa$5B?JAPi1Jx^*DN*SDsR;l>M(GDR(op#*C1L zxJy}g_!^?s)n7^Us%|5#q~V*AOc~X%D8pnsGCXBbsK+;wQrcYk)6S?6VUEcNdnw_1 zLjzA=6k3QjI>f*a7MhdqW0N*TQx*CX@mdp_+V3MLp}JSNd%cxEr27$b0?XqQjDwcE z5xaKcDQgkw7&*0VSKgH!Gw{}mi;n~D&itk}Dnr2EP_bzs?hHwzjNmyTv!%4+>SxM{ zn7>eesT!k)r89u1tfn=$-RF0IK#a<mjRWFpt|tjF-SHc$hNaQ)+ZD_+#RK46p4bVD z7YKb@f5M@n0vKjghMCw<(cUg#)fo2MokF6IXD$kDEG(S2Sen>M&}~s@xfamDaFJY@ z0nf`}4fxZe_WP@#&UlOkfb$-+0#JiR0C@57>~FjlIG1tlGR`g=vt=C6{V^*5wd!#e z0IbV+$mJk*83RBeM}G_y%-JFbJi#|L6FMW{HbZOGCnP&7Rx9Z`8s7h?JlfpvG-F=V zb=c+{%0m^RS^rHRSJmhvxKmi6u#8}bkoP@qL%3JLYzY2?o)PO;M%g+zHmn9{8(OUn z1iCL=#Gy1i>T&)$D_!7%j-bzboc9<#jS{aTMi&YvEgWkL-SKQYk+1c4JTC6-*y<fa zylWqq$+9|n;;fv~vSO9tDJH)DHRTO7-pOiF!1Bf1Y``;%ZL>iQT*d-z_D}H+n8{{I zz&s}7^OT1;d-z^-0LMLH1)!dKf(3w;P5|n{B`g38T4DvDt``Adk`sV>Tm*m$Cjj+l z5dd~L0jLX~lo$kqo^&yYx={pxg}=7~P#16~k^nR%ya~~lW?X0tFmti}%8GAIY~EsT z>A!^kBUu(o?*J1Q^96MvI`;=*13qAOF?Vnf_bm>%^$F3QLU^yRcTlR|{GQ2gOx7^8 z|D8jQE@o#%owIrBO8PPl-&rh61|IX43Eg>_b?KLq)g^PQN~G0PPJ0+uB$ymp-A$KS zs|2i|=6{RW8qwyd6aIDLzq`d1t;uph8`DI#dlL3Vx%f%NE^VwNN?u2B*eKx7veE(X zF0)$z)GiSKzIK9|PU3*AQt?*hB+gF06v3CuNxT*(F~BzI#Wv+6#!kKx!B@&jtcDZ5 z-h!CJ+J$ooo)z*Hf_H?3yN`t2N$`b`Ul`A-rSMcFaci<tHCe9lyJ^_wDfR_eyPmHH z+tXU!jOB5_OePBf6_sua6LsPW765jwumVs&ivV!kbM9av>b&Pz0Jzl&K)oUYKy;-Q zfEu)t1%UZZ0BV5<09%~^RPX0m0GRu{6@Yp~1b}KM0M%g?3jjS=Spld55dhv<Z3Up3 ztziLR?m8EPs7KaGjCIo1@M1z=XLB=SvrRLp@0-%TmoeK*=7Xs7Eb{?qAoD@QxM8uF z=_K<(OcVYz(@5rnxQW{pyUFyC`5+z@{-dUi%m?wA@B!!@^Fd^|iLs1nBJ+I@V;xMZ zm=9v-YUTsbAMr!PVs2Dy@jAEuHo5h8CN<|gS%2r5^@rEtX8N90anH6^iU4SuR+YBv z4+6UYSpcHoIS~~2wpDT4W*ET?-?yr?U4IbR1;_%s{vfamkOd(28Noi^x~jBYe-J$4 zdspRp2Z3r{6*q6!Y7qcUm#SQsmQXuZ$Swx#ev0MW(uY>iqs4MFc$<h-Pn*GuL|k5J z1|x{L(+;Z4vZJMYC3T>P7g4mxcWGPt5h5yt4|vP+HxtpD7fW)6=@F@{F<l{Yn<<w_ zyTjP98*QG`c^^dqXET{xwU#bhYmLfvRP*%pW?<{K#p2->wXRz(G)ld*QfM0pwDkzu zI@Axws(IVf)*%n9M;@r$x2IK>+jW-PYh=j_TY252y>8N8H)*e%v{%0~+L5Dc#L*6R zRQG8!IEIKNcAzGDho0yiI^GT)Z-<VzqeeX2UxWi~qk*=;K-*aV(>YLeZPImZ;<`?I zn$L>Ue2JTMiJNqZ|0gZ2(xIz#ORIFeDjly%$E(uus&u@n+Tv~3@wV%D+jYF{I^O?y zAtK)N3TAFggZQoj-An=YF&W)wQX(!AdRNHr2=*`;-DA=uu1Zo4ln;at*l+nDj(>*v zfF4Xn0sVywxYQm#AW$mtLx<Aw`n34Z=YlO1&xdajek8>KzGpHC*w19_bgHPY6bBg0 zWDGEpm;0o^cOvRndwwQVXCo@3xfBODhsmTZ4(h(PnBN=unOaMOz;6!!=7uh8x?epz zdG+wrkN`QpXmYgE!b%`?HX|yHK<DH4YJTQFrSq0sEeYSFgzZb+plb#w6P@t&CysY9 zx;kGm@->8KBtFDfwnguYE$RM54CYl91&m=b`H)|TTX-QNqUaMbNM;2vQDz0uqSB~< z=)q|vFR7IN5NVTT6}1$%=smZ^&6m2PPM9eomhB0t?&2*y#>|RMm~_yrpM?C$XTFOw zpY@EW1D}v8o-nDCI^bwCX*P4vHd|7$eO4D!J$;=i&EA}9Az)aAd{ZYK$?J@4AL6tM zk;!I`Uf9AlsL)3#^i3$Vi$uM)^C?~V4rb4(Ik|~BxwrtHtj3sVG|G-K*NAS%GfgIT z{6wYP`q}X)3Wu<EtmomX3c0qtMd^R`O!zuu<$OX~h0t-SG&X4sf5FI*bbUp*so<@W zlVz0=t4A<vk)y8zIDda;Hw78ZQ)lweVK<Q0Jjt^Cg@QDp9-qP|g#Wvlo|hluwUfgR zaP0DsYikj5J&+iqmWT5nSo=|`#lt1aa3dzok;V}pO4;5+A+gK<%)6<$ndKdC&Rv~G z)-^|t<&>71lRBFfiiU;$gd6}n_{M(r^JZWl4RiFZl2xb8l#5?avKDr1jqEtv4$IWq zfVTR2`KpvQ>6A9Pl+>(Q<yxPNXFp%db8faJHBANCu7aepRdZ^4`k8GXa#X{@{e6g| zL{A{ao8=J!Q1X1Og<##AXDT9nGHx2bH}T09uzw|9TPh181?P6^kkLx}S7z;c#q=9} zC<U6zvvGE&CNDq4J8<^aB2@bumEot?6YbM09*y^{t3`XSIq3HqZTyWoC_lJP_`pT{ zOq~L(V;{xWxFo??Z*<q2AS%n+LgWPXr__kCp6!x=Kdh4<X&4`L%z*xry!HXup+um+ z6RYn`U@NlGx4WY9Yw#jL;~@AorxyOg++TkEb$TuO#IEP`BP*=$f?9a_HF)*V`AFV4 zC%B22ck{Dx6tIEG)E`#Mv$}dcZXQV<6vYRfVnRzRSA>t^EQ`w8E!1|itkCkn!~3Tz z!Y760g;u#@`c;m{e)Ag1jx;vZWA<d*K*Yk;W`M`@bM3R@AR=zEgHj?^*#T||%<DWm z(wOSYUNVDWM2uQ*2Dn{VYX{kxpbnb|XqyLUn+9l`1!$WDXqy9Qn*wN?0ce|m?wRVu zCf$imx)YmpCpPI$Y|@?Bq&u-mcVd(7#3tQ|@SN288kWkcN@rE2v#QcrRq3p%bXHY5 zt16vUmCmXvl$FV3yUt|0&SbmJWV_B}yUt|0&SbmJWV_B}yUxTf<c7}%!6E#@XcRD( z$pm2evvSJ;-25z?ZAfo^)-J3`ys++FB{b4LbhXgHQ&t-T5N8<ya3OE>1S%W2M%ciS zYm7dK*Np)9sTF{@_XQCEAA7+FK*&0t<km4oK!@%X5-`tbJnB~WBwpQb7#g^9t#JwB zpGE*Y=tUy{(dk7IbR+C#Xy5>=1Y)ld0GqBe0!&TYmqY;U@{$o?n#LLd@OCR;V!a4} zz1JH7h*3s>c`Y+EaIRIdb9@9%+Nm<fr<(brgU~KJBJH9h5)-rc1ttL}a|a6n=Q5c> zi$^dS9pSp2vg?sZyBdkKYmrF15{b0yP#wnpyvon`^C~~%&#U~5Kd<sL{=CZ1`12}1 z<Ik)7j6bjPGyc4y=YDry`70LUFML*bc9qr^=UzkaBY%gl=ikoUm5y}jq;5jBtA+lp zhMj4<U3h@P&RT5-I-=V0JJSaWfA3ni`*-s0|C1enct>XEowe>%*r`v2o%&SRsZRy} z%&?n^NSPv1zKFfLh`qXqy<9|JQv|S#=`NYF)$Tyss}Hojq3Tpcd-Zv?S7*LgXTDcw zzSm_wmegnS>WczoA;x-<-2h&Q(bP-MpMSyYEUNJw*&%?x%W=0c4dMsk|KQuOQ6JeG zxed3jHUki)ax+uvE8obK*LlGVKpe!IEPBujt|J@uslHKnVWaNCM%{&tx(gda^Cye2 z3opVqrH1#P4R5o1)iyh8b@uY_!i%wJjqs<{y8XJSb=k$u;{VB3+(bEkA?YIYG<jR& za~w-T0-AF3k~qvOWVKhUwFgkrdP3ocnQGxGV=4iDAie+}o2$)8I;yXEk=fdV?pM<E zYw`hlcec5b*@({?`dQaI-J>qtqwh?=fE`{Geg}7%$<N?2Gt%&Zx4oF%$1bXm{sRkW zQQlfSn&Kz?ae$xhM)razBO6&pHlB=Z6dBn#GRlsWgHQ3<Ks>N<cwocuz((PLTF=#b zJ^PO?+7OZ8`*iO*a#=cEjcp)1wz2HkhO=WE(T;6UJJxaKYM8VkiL}x17-j+yX=4!S zFLp_IerSDYUBc-B?_~1Uiok|rrM3S41pyCuYtrGrxiuMS1pkk3I-0s-%2Y9Bs+cl2 zO`!cc|Id#Xmy+*0cv|96E#{Lwo*{Tn$ma<@64Kg?CH?8r=`FnCt~LkK62j*VZI!<_ z^A6r#Q;2%RN9>0rK48fU=5lfixk<}q29S{qkkeb?WS00XvnBnFU;bP4^55cmd56iJ z7ST)-Ppu~_WfRCVFJ#%*%FLrE$F4V-TV^j}4Cmz<9lqW!;zA^~NVtGXJJ*$NZu~2g z0hM)lxLuZ|)zJO>xhcu#U4N2VTI{DXt9#dbsbzgZr||cy`16VUsVmU?cr1UC4)j5* z`G##qY50o+Ul@_j?&Gy`hET!wELN9=7-<h?3;+6q<*64PmXg&AFNQkdSs|@u=1gDa z#4gs+bm=@%?q>i!<bI~dI(KidEsYzSVJ~G(<jw2s<=5wUv$oRAnm0_fnE0nxd|+WS zKSU%tuA~&@!wG;sD?_zG+M8d+^e-4?S@f>mLahbM3Z?K53g2jD_*Aew_42D_<>;3L z@LE&#>aeZl<>+T)#q`!2u-;$h`~lrIu-tzF*vsQqPJs%v_#56zF~B{nnE)(#*?!m! z)F&bU)Z1VMpibVv0zfw>u-*@Xx+Dj9jLAaydr!!ZOiHRpBZ+mJ*Z^iSnS{-H;R15l zCW!=EFd1#(a&a?-f;x#g07cac%KlexZvq`vk^KR`KqoX1ARs6rN)S+VG=?3N(I_CO zh)IA1w`oGsA(3n*9Tq`}ii!&g4l3iQiH`dq;<$@S5YdPr5l{h9QBiS3MMXtrhVS>Q zTlK2?CFuOW^PTUVb92|ab*t*u@?N@Mk4Xv-?XKEHC%(Y6#TOVav|PV3K4}8ctX~;d z?}NT*d{ETHdj_g3u2-Ij7OqmgNwjE{`Pd_=`c-jx$znIEV%bF0ws2n8ZPi&s3sm9p z3mmUmj#od*C~U7&q8w^htcq*aB4}?@PBV#4QQF);0~HHt%jCKqU#yqa<N$C>rOqTe zNs-w^16Ij$cNg$-5gP|{>ZM}3ulE}|(x^v(AHS-(e+C$h(`i=Zx47#nX^6Wlb!|Sl zU=gR4R^)dU1N~GQOEl~iH5fz}zoJ(>5-+YbgG_4uT4hD__F7eIZ{n|o?o52!22+4k z?FP{h-~6`GxG_k@*-ph<;wsK|D$aH)?(0<C)vY+&t+=aOaduqAAF0M?eWYW6af%Z} zV_XnfDu|U*TMF^3x@O`vLU&(dqf2$7OL3#ia-&OeqqB?BF{t_Pud2*AV-3z)uPbsZ zP}>GY9s`sn<at0J2zf86c}MlrM52!rnMpL_O(h+H+OFH6NCt7IA~WyQ@i=)nPWJ;t zbY-QhgLMvh)Aw!+AA;dis&Kzr;#F#ZGmWKt%e5P-9?GY`eY2WgYiKsGmW_XLt<a_q zNi*7wjY7ZIC_PBJsgL1~kKvAw;f{~tj*sDSK1x(7gy%OAx+h;Fb9$f?nv}LWzNtO5 z%xNk`y;t++(85D2JaxwEUfWySwe~6!l&FXA;u^o(b6wF|CCVY%(4byvket*jG@y4} zx!W4zCV%bfxD1=VCYWK&rN<?gifq=n#otto$tFsEmHiZ3m_Q;$m?a4$Itz1G0*S7| z)FqJU{wf<DYfMPWIHPyB^t4(EP7-0gFLW!+Rq^I9-dq)Ljtw%$1{v2z2E-&LmiFe_ z_U795=2};|)>UpZuDUvH?49Jav2T*o#uJiE8@W=Mrm?u|@*k=TbN^wzcQ@X-vKr@f z(b>8?!Ex8!xI0|SkX{8qH9{`-o9!o^sTX-Yp*ARV^V$i}h{%4qIxZ9b5uXWPuGX2* zv`9`+<c9CaQks$Zy*6GCUdW3zc(rEygflh;{s3p%0ruNJ8JaRlAFK6a+X>Nu*ZHk# zc;xp&VmrK~qvLOX9z};fCY?(3gp5RISAF2sxPGJAYf|EMphiXJ5d9E8I4@bP5#5eh zUs$7hHNBR^YGDS}l2{|m&{`7fgc)8-VvF=ry;n=>JL7>w;%mAPiPo>_LL@rAW(tuy z>@{78>*oHonjw+$ruIOh^PAcOiSBP252Sj%sSCNSd058gVcW3!1gBxICO8diNN^gq zF2OXcB^M5-UG)i0yBZRlcCAY=?NVi&X4NM+&8kmun$?itG;3XgX_j)}w5mSAZPi}Y zs@%Og4kot=gU10A1?RO1!km~6$hvbtN5G;c02Vd%v#6=wO*oSwG7C&kf?MbLIRdWH z^OFSJX3x!%EjCNUi|I}&XBr~qoJ84T6Gh6IE)~x7sdzDM5-(1&Y_Z7_Ka<(AF0Zk3 z#&_`tZpIi@%TemkG5#ojJRmpaK18`MCCi9LDi=8{wO7tWM1OiSZk`Q%%@}6VpJ@Gw zc|Y9zOL@#9dUg#rXthtdC;I!fD!vtzKD<Ux+J}8dnZ}V5#OJ!f{Fv%@x{>ZjR;@nW z(Wf`jqhr3aePp!kzkaH;y-zf<X3U(pMuQ!vGnTkiI*MqSPHN(v+JyL9p;L)}(>BC~ zuZs=OqGR>V0r9y)rxNE2-J7^*LwvSp!pBy1AkO95-CeeC9*gdkX~Z)oQlBKz6N;Sp z4A65z61^b?J#_{AAL|A=8-nD~@LeH!GR$~ektTpSsQfw=K;~kg+SlU}C6Rl|>oO|D z-IO{z4d`4gCeD>oL>Gt!QK3lLHD_&zAKAxW|No-d-`Hl4XtvqAnl!r#=(6}8U@US^ zlHH8xX+P2&8)*(Bz5ESDUIjEoPHjYGG9`&-i?n8~X;lteHA<!;(HNEQl?tD&=;_|^ z2zj8K{A^=#*qCR9T<;HOj%}Bp+6ND}$cDQ{$hU#AZH$YB{QoR~;K)h<xi)}Y8$hlN zAlC-)zi08mYyJN}pH}*@WHW%nRa>*!?D;|xJ^Y3m?(Xb@FGbuNk!GoAvu$r=v)ZRs zwb`upmqtbY3e;Uyn|&nEX+j1gP_tHd2Wc}3q|GppHse6rR8889g!)(Q26MBSUTemJ zwCM|XcC*e7a^v+aT=!NjndoXIqF7g|+ekx+I;o0deTjPu?Vpvu_fu%1&5((9fF?4k zM}=JOciKc|>)S#y)Fa=Hi=`zT4pC0Ch)z=-5*tb^9Tn?qJ0aHBc0#Q01AcW`W=2qK z2Pw-AlK(ip*BgJ(2q#>(jKrAj#Msw~v8xkfS0~1<PGEjNE<u^MB?NZS3aN}}y(0aY zd=UnqMAihN8X2Y$dfftPmMy2uII#DN=s}<cAvvM?Y-nP5kJ3&gdQcWcqI$Iu_Nyg+ zRm89Qt|nSne*ats&3rMmT7L%{jX8bMI?2zA{H@ZDqczyWw3_%hrOqVESjR(7#oSsF z<3xT5&~$A+-CsQXvj#<1i{*nr&#a3JrI&W<K9{kw^f(y<2zwRY@S`fdqie~XAd<Nv zF}4h-QdY1^9UE%2q4}#4*S0g)D?_5O>s3}H8}+YjtWswZwOX&<PB1X3S8`IX?&LbG zXKz$Dm;zp!?<KwVLg35AInkTqyesimp;L)J5V|+<XF~TS{!ZK1zlHI6OXxL?=7E+? z-F#h5EA`%lOTDAXtW=@Kx+W<Jxz+3WgNI5IdlmP)#;vt74yVEL0abp6ep3*+6@Wv1 z+oS<}pQd@+*a}@^S63fPcHT#3BIxEs5VWxo%?P~3j4irX^<<_oax#du|5s^qO#e8! z{E4s4v|7I`J>RIb*^7W45z<!T?;aDt=1RRp7s`NicGVBP6_;ByE0YrCKr<DYL-hCf z_@h>9L|mSJ-5_a1+(*Vd`2^rGvW}Jjt<hp`HD}10N;L9q5ffL5*zCx3NIYMg5Z@fX z8VBo^`o^=qdLc7>zvF{`#n<@X_mx9mw+VTNZU#u}Hm7;F_URG|yx17OKD-N)_mx>D z(Jybu4PW|3oXt0~#3Cc|&H%q-qne+t=);Y1bx|~RBk%Xxc=q#*M(RdjWKQ8dU^{J6 zK@r`q$caR!ZdS=cl(E_T%Y;<<J4!(`Ly;4SLhmXmQD;R?B<k|6DM@Ol*bsdyHbe{F zi_1zz)J=tvO|(jpIYd1-tL~Z5(+MeCg><QkHHYYVZS=g3RE%t}IYbY=BSsJDz{QAE zClyytCnxr775jj9r3mqTzJ}CGQsgDwKpNQ=<`DIM&)Ac?<UKJWUf^ro=2xgTXI0oX zPjcIwrP{0;I>~KlmebHIqPwJ_lkRdFnxz`rMTM6|bgD!>=~Sm_S*mHeJ(FyEvfTD$ zx$T+cwkIpDJq??bMKbX^X&cdf;yu~a1o2Lt4-^{@$(yAckfI#mIYJukRyb-aqPCm; z{>pSxA(I_(y>vt-+k2#{EAwceAreBS(+=M=Q?5bg1EcL>bL^+hekMuU=XB9sr}JR7 z9s3`I-1n|j;7mQX>zK_lLy3pl3NC&}#Kco1ZHX??V&d|5;$ooq=yy$@rq`N@<xYPN z#nqccM!Znw{X&1<k0;tAgO$k~8=*oPKSED2icNyiiOD0<#7FDibW$hNq>dZNUIg-^ zTAM12$m@e@i)7jpRc_M%tX>pKI=Z&f4>6lz6{xVX3v5^yF|10}CE1la!d5I^g+rH3 z_iRS<Zz2D!1M|&HBn#kj;bwV<=74UsB$rBp(d)c-{Ny=F@@O==IqSW+q@34ml9=)N z!_1hclUGmTXJtM=>ksv!Npv+@mCqt767dA4@tMk37SU*((Zt0fE^a2#S>1eTAyHqM zD#<pr7A4!%T9j;70Mf*1()Kj#*`K-#{8`wq*1GHGWNN=!(|-5glq|DZPmP~+NV?bd z1#-z$ff0RP_j*fjdP1%3xNN86F0vh$O;jS{%n}`tDryEtG5d6D6=VB1+w`xJ+YZh) z9jxRg$d!m-vn0-DKOZI<?G9h$56MD!ST6labjTJ}far=XGStLZiI`}f78BpL#caBy z?hzxRI&I|EQZHc>{UD<^fw-+Il}&W2l)C6tUAyd8SLjM%<kp$3>Z}umTaP%*BI=>Y z9HLa^JEm|Ssb^##r=BdQo-DVXET^6<w;mm>@^F`?%{4@~2HjyA<Ep2DuTbhtqS+GW zY;74BokO-r9v-42hnnbeac`ogg$dNn+AdrEr*1gLZ>?MK7_qp>l{q0Cvn4LO$PSSb zp=M-8<c;0xd6Ty)FEv2d2zfowUxg&Pe`|cz-@r+!Qco-cnk6LB97Sed0aPO-(NkhT z^z>HVY_&d+z9^j3uUq<Y>Q`5j*PizuuUoJEpSAZ}d;oSWx2Xt-(iAyy5YU<1;u@L^ z_5>x$Av#IQ(C{=NPxH(8D{XtQokc{{)0PoKf5;uJE9w&;f)TZFezdg^d|7<S?(btw zc|T6H3l{&`CP_kkgi>dp3X~<JvHaQBW}fbAeLriU{dOCdAM9!;LO0@l%@~Wx5M2Jg zj6LzK@eZh-CF;;DU!Co$7l=A}fmXX&ME&(5OCi2l6(4`IHT5@#I`B{H;=~){1EG42 z4rGn5&UV%7wa4{Z?FK^qDjf*%8xqJH*3_R3JHY=(7biY`dt4w?CvKM_#G=l2)$K$b zZs)7BT=g$HPT~Zm9-p8s-H>T|q{vc^wEDO>`-rS_AFB_$`ol%mmAI!=)zg}$7}Ip{ zqjdGem&G@k>T`AN=lbewS3OZzKG9cax$3B>lcQSgwv+m59Z<E^hg^NBZfB|0hh2T1 zZYOcEw6oZn`Z<PMa1T2x+eS1sQB8(jv$ujckgS;_+hMh6r;Lb(v{UkRvq>Cir;S>* zN9T6X%q1Xx>ZlpFE?vPow}N%EkBhJ1fT_Uoxz6>u&iA<+aC8Do<`TWC$Sk7HEtKh= z+2^BQt_~|X(LG@;zoND0J=|K!Q`%t3XcIR^blg6Hot0ioe7y3UL!{fV({01f*=O3o zce;V^bOYb%2Tq@zmCwx1+CB7lT}~oR<Y~69d2?9Tb*(jXogaE8k&a>B94Cf(bDS9F z&2eIwH^;>Aq32h;Z}#zi_hmcXw|6#)FG7l`nM301km?B{9bJuzZb~c7kSJ}XjEK$; zYq=eWY-b?$&L)x5S{sqLNHr~&=sF{}P0l9bh$*=px@@9Pjhw^}BJb4J@1h#jMOU}e z42hdn-sLO>T5aSc-V*s+wo7YNmyU0*84`bKuOd~bgO-y>>7Z(6uV<xbIf>j9HE2X% zb<}ba9GXD#T_OWBe-4Qmk`XmP_X$ZfHl$5R6or_q!)s>(FHl32xxfz5d^JRSlQcu3 zg&Lwvq6|f56MY=kCL}&rqm}tB&~HK#9p6TqkodFoG0{3BC$Z7?{l;W1{~*~Pi1}(D zZf>WUrM8#nt6rYcUNbS<wewXLZ#4{wkEEZ!V0J4qm+1D6+JwYo9i?9$>*&vb`E%Tk zc4v9F7HZJ@wD3FbCe?8|hi_6je2?mi9HO$;T3+U-XO5GeH#zB<bA;{{C3pJeCbwU1 za{J|`IV6_a1U+EnP8Z$ecF|3$i#nue<{J<#I%<YQ2bE_z9dy4ax#^3`01tTVi@~)) zSxfiV%p74|6JZN)NL=Zgn=`yQU^rjPoE?_zonD}33Kx6o!N>iV^K*Z-i?x|kl5DUY zcWarmN7rDCuT{gHd95Apy|bO+-aFeF%e}KXfMX1ExgE{DvpJfL$(s4hj^^Ik&S>tP zy;LtNis2AuwAai%b_n;X{o*dea0qoi@AWs2>k)95mMZq|b%ag_P<w}3zGo!VlDJzn zGn?pMS=RT@Ch=$s^>k<dY`$!Y%#+G6i|AQnNTS{~B=d%NBwB9_No;iu$$TUpi9R)k zBzC)oWPVhJxkSGhLlP}oI)-H0s&;1+b!e##NgUxClIbZOM0A!h919|5m>D2$Hw=mU zTo+^>78gW1KlZ!%v0vrK_pLQUBB71$cM@&eD1W<@KQb~<xlSVOSBZ3=VMr`%<3vH` zc^Tg4ZN}|)Gj6}1aeS&}^KHMIZ~Ilgb#L#uCUdOXzcP=txwzlW#r<wB?ss!>zn_aQ zqI0&ilqHn-b4B;7CGMd1p=_c~vL$u0They7E4RB{x!s*=+f@%;Zy2W+w!6KsUG>5b zsu!|<&>g~<oF3Wk_Q>|xPOG=Ot={godb``|?S89M5c;8ss!2pW68Rhghsq>Ux`7RD z0~_21Hn<IJa2wd*wy9xukqy4Vjkm##x516K!Hu`UkN0F97JGzIO-vG+xI9U<gQ!%_ zaJy%dc(9e&5I-e{g{SO!Znxhc+Bogm?Y3vP-yT{y&DrfYhYGf4yQa6>mhJXiMupR` z-Ax*XX~lMRR&nMs{9Qus(joWYzMq8sE~$I+fddET`ds?)>d8v2X^x(t$IDzbZ2@Uo z0@B0|(hLMh6D&x^x?dgka*4R%{$T(#>aI5ET%z0mmolasLKwU@GLA;{zRfp#5B9!o zWKh(Ghf(F-KI%UNF1sfMd>EnQ!-$&mu?q5c#fLp?ybi%;<->o}6gY_LRBUp})LAxv zj+0FGKzAleT_Cx7fxQhGq02#PN;wr%G*^kT=DLS3SKr(%gR2jSZbO>XCC3d1Lz&eo z(3M8$bfpnB*Oi-fE~6&SlCM+-=6t0yP!=F#`%Y^aS|^0lkig^G^2_6ye+^~-HN@0? zti9!posq|dYJ^UxM$}xW*P)(!+BWsg`Y&!9@NI;SZzF2X_pRD@oDU;(d>B!4KAgqW z`f#RoP}H1{74ZFqs`5g1!zxwsLaqYy)GBbHG2EmL<0{+am(C4}nybvz5a+{In;R50 z=fi{+=flRE8x%F?qb<^Uh)V4XSLsz7<UD`r^Bdhu8^%@E%P*Z96g9hc=o;dD*lKfw zqUL;<(Bgd9cyoiI=6pmEUq$?UUXyHg179>4N1m}Q<D617qN(VNmQ4zdFegzX%!6P? zd{K(Znu<!}y&0=GZ--+B4p)x|?DrImEN-<M2*EHptPRt8=gCCi>B86M2?S4BMP@N} zPFZ$keiNo2Ny(4wQ>1)d4pLLfSw`)1jsCUfp@Q20qgM^EPaT?+=jSPWt=|?_xKdS^ zz0yW(d*Wb^gj{_<bV7pX^_4pr`=lV(J_N|MH}tt~nQ;jR5yg2<PmuSb&cKZ?=~LuU z&?(wFF8G@GM@9N^-uyY2*e7pxY_`E-hZyg$#x-*m_-*i$>%Us>gho*txgiW%DKADy zL7x_J4W+1ei?~sth>u~yY8p;=K6mgaB6%q+cNalfT-%@2LMO(+Bdm*B>mJzF&Ux^} zb^b5y1AQ|Lrf17ON~E7n{-Dc2YDziHqUby&$~@2dv;k7z+;c=%9}oo|apk7yFq?g> zb+UcbSP$LD>QI^au{E`!n5Ss$RQtHhcCdZQmSfaTw_0tk)%r27>u8>A=D4EYd-A#N z55nbLUB`BDx%MFHf4)O})JEpi{FE>9<C}{vx-KOyy$1qDdrEWxP(;W)pkgo1kVKJ) zi1-AH>uouoGHo@CF`l3;5DxW^3;7n%$6j2JD*$gPk^e8#o`AldeA*^Gt(N4Oik(4r z49H6?TLSW0%d*bDTh_Qd2{1~DryC!|mZgttEK47ETGsV(stt=iCRvt+mRQyl>ZuDl z&EwV2lhGp{sMMK6W3`xgoQR2Xw3zsOFK$q}YiEuFr;uaVOS^P)rdP9tT`l{*trs5Q zzXhPLF4D|f00#Os4Dw~X`Y72Vg^!mih|)dw&LS_V*DK3g@l#!1QkyNucF#Dc_tD8X z5Z0U!f4j%)IPHmevhtKg6!n;VmxgLd%o91$LXn4SNz{p)=mBF-V!6nPo-uL~D@0DT z#`q!8C~~5AM4ntrVu#3yJ~MtucnLDwff5t6oWzM*?p(t>)ja>kf!A<Po&*pVDLRI% zlxNDA*KFqVTFg*;B?#S1*8q2ujVtzAl`57=L@zD9ii%nib45;feG}rc;8;)Q7b+vV zK@5rhDbgo_+DaLsvlTg>C`Y73e^E`Zm|IJtKum}(5fh^86`4bHi%5wYRlykvwIsHR zoM@-`Ao^0IM0-U_^ovM|LTbAmPt;nGnMAUsk0&}@q=)-k^LV1;L`pP5q(oVKLhDs0 z6W<`G0-~E*=mwHlrkLq-YoBQ$4~`W>;!P<*w8_Xxyd!d=_l=yy2O=l>)W}JECUT-5 zjhw{k>Rg;d)JL5HbBWHDljmfhm^wR7PpFOg$J+7#1bSXbqL)I_LgEHFYCboY#5Z!5 zCCXLLpK^%G<e4DRE%H=~=r)lOtxwcGNQ}^rCtAsa3l$29Yvhpt(aY)~Ty^)uacWs1 z$4R2I)G;K7s6b96M6KocOO!6>&FMhx<tCHpxVE}>5~JFRYvNp^AaRi@kV8~1Wr;S3 zl;~YWjwkw542XuRyP+JSvy;U&@%{0)dz?ZuJekKc^u)o$9Lt&Wen{x|{r=4&l0H~8 zmVNL;YoUMeo100ruZ@WJ`R&alx<6UOrt(34<wI2EZ^>=a^0^y9?2y|iqWhDz+!QPh z6lByecxo=g9u(3HiBlynh(;PYb8SReGbF~yQIu$$kxu}z!7wB?ixJT_Bi|90p;ZhA zS4aAkA8B*_3xlO9(pfDuGpB{j3B^pdxxG~7_S+#pp^Fk_mt?xW+)CSUAPQP*=8M*T zNK5CMd{c}`GR0h^lSMH@ll{n-{!!#Fs>sg{X@<c*Xc$h`zqHcK3fng?&Rq{;w_%*r ze{t?8o#Bcp*V(KXlh3@xGzs0(eFvUh^ZBEi-hLsu)TFBadQ6{7EXz)oncx&Nw8Par z%_15lNj%{TKZ&y#$ZVCkSwxSt6$?|d*;mx>!;%=UR`hJ{AcaB_tv4nlW~pT{+pc-p z?5>t-Ey}iwRW{L8vV>iwS13rQBethh$k{~i$#6gC_a)?}Cqdd(A)7t-t&l{Wl667T zl$QVxsxF#nLz~E9m9Ch`99l2r?lxxq@DGgK9j}uXb4$EcHcFxwWWRgC-y8j7H4XnI zWvF#N=CW0FSf%|W@<R|jru12^=n>gKgQ6syZ}}@Fq@NX&XZ=Y0JCuqRG8pa$T$w0; zRY|ibbA_Hxq)keYHmhz6=d<Y7z|YOvm%_4Wwa|Ij(%o7VL+3}C!86_!L-#dp1EX_- zc7)ZtFN>zM7MjLYZG|?rKSSR|rO0@q!=;vmb4g5Wt^U>c)ZC<jy=z%`hDwR?GjyKw zTsB*`&$ly<8P(#paXtPv>f++(p4hF-#<We#oTA&&oL^NpW&f&=0%5N0N#PTYs%39< zQOTCwMQ@u{X%-PHF+N++iLCTQa=gen61K<6rgW^o2j>_sPC{;IBTu8$k7>j0M&D$j zYqDDsVN6iwcrsH6ebD(EJ-tbD`u<bKt}|!k7czF8O}X3s>77aRg*#k!24{Y&m%%1O z^txUXFi(D_sXPfKI#!WcL_>pf{}ex3JBp_`Eikf?{=(poVr%$npDa_3fspQ!EVr0o zyZAN7l^7}qfRV23_X1pkO7D}3iMU|4!hJ$@*ChL@&7$~o-nEL%;^FRPSw&y=SJ5oH zTISf*(qCCv<_S3_vdk)Ry2>w}+p(?LxUi<v!5HNrcT8Keht04{*JCL2Y+_sm6g{38 z*DFS3mafPBQohMltR2(j2s+I_jb;%o6X`O2FvWZ}dpxA<%=1*=jyIlI=3Y7E+A=vO zv^D1fw2GxpQKfQD(GKFi8ge(vJk%<#RTR~>iVN9@Osi`BQoczatO|2wwMgX_b7dQ$ zS>yO*p^Yt{lFpY^goq2FKLcogp=27-{mspeg<=1}DbYU_nUxRIQYlIFSINV_Ci`b0 zn}?%NVnSfKvoag#I4yJ9Sq)#8ITMBSm3E?B>DL@r;`f5#)y`8zh(;?ihlneae3OP$ zo+yZ>_zF@LqA<SD@m{JDjVC(VV{lbozdp4j&lC+EP8QO-@Dq#Wj#Z+}0YGO6$ujzp zoiXI244ydnq=fhtQ4_7!Vsr5+#wS`v{Dqhj?FyLg0aPW3jCiK({Y0}8;!Rgjr8exU z(9ysH_2xafg?z}0@@8y3YuiuR=Bv|OCeiiUgjhb?m3g=I)?CfugVY>u#x{lcC~+Gs zR;5jdtHp$9o)*v3!9jeztt7=%G8wyXm7IA(#MQDX8+DC65`~Cwi&xi!T_<XVH_FL} zXj9AhKK}yz86ok+{qo4RLK}S))NOJkCVEIrC*6T%aFd*Vi9Smdabc3@)v3=aWE1@> zNyLA{^74jSVzP-oY^BZ#A%0b|U-!=F+2ho_%qAKbc9kE2>nKNSqRwjXt?;BEn8RAT z);+)t66<q;E)en|pp`-ry&6}9?LDJyT<_T~Nv|coSdQI9eN~gk6ICd3BGIL?C$LZC z$T8mbWO}Ww!Jm@*P{V#16QWa8Wz&x$)?<-F4?ndL`A>FS{Dr~e0Y-LTBJJWx$3?E= z;z-AZ|9GJl?AnNnHr7R|<08{>k?OecmyGtX>nJWdS{J<?7h@e4y&V^0jf*a@>nbjY zP7)U(;vSMdBL@SYt3QRs4Ev9k6Cc+~<is7qB4<Wjq3Ij-_Ck6Y@T;08{wOSEi4T*T zijhpAsHUrduh8_hz$eNXbL2?iv)V{m;t#a^6MGIF=`=e;e1<f8q}%M>s@b{x99+2^ zVwg$t1T2@?^qr8l{r&v*Lu{MhPc{DvIdKsEO^N&062B;7c1k}r&2l-#hO4#@s2#5R z1Y+AI{Z*H2QFA8uC!n4xt#fU|`>BS%BVxAu3n6#6G0E<yS$B@43~&!Sz+vLUWZ4+Q z9vCcxIwm;SpKEz=u&-z(a@*W=)!Y^`z+;>w7~>?t7~*Am;FsBfAJaoG7^I1-TZ@g8 z1Y?*4-)WlNGExS6OfVtL&4`l(VJ8X3xLuQ@x+aTVFj`KeqxF&k%SpuYbTn%p(1~i~ zGu=K~mn2_SfY|LKcFW>cJe^#cP`g<75xl$(^o^YMh`v+iF@^UjbKJi5Mz;(J>#{?1 zvY_ltpev1>#El|f0(7sD->dr<awgO^Bj2X83-V-iUANX+PNIj(v@CXek&zeaF@T)t zN+Tz6t;nAN`c#pb9nia{s1(d{2O|P}t%%K7fOM9jNoFWA!M`Fhh2N7sfv9z|h>26x z*)N;uXf1BWLx^~-@{qIEdI%ABRvvPQ4%OmAwKwP7=Qs-!zoVRGzGIz*i4T#}=^@rx z*gDH}ojoefl9yS>$+n%jM4xFf@$R<#|6PTbTHzhNC^_lqTGrM@xy|ijYfHAZ`Sblk z6rHJil31QjWD(ujRu3YHXGKo*l99ipql28NQIXk=y48@j)^$T_tIl$(zCrgI@x#(< z59{`;|Fe*Adh<PPPW-Eg|M!k%ee#4Ry>_-=cfZ;j{AOgEKBky>uZUawj?-(6WA_Fo z9elB_nD{E`W1{)V>SlIsEr~}&PV|B{Ul06k{E+Z}3(qQ1&a>7sM7&nSEc8usTnh3& z=7e@)Nqm}oeurqA788Hou1Tq3qE040T|U7>bcq(10biwQ;yc8I=m9N$K!5fpE(IHH z&B?ZAzmbQulkZ!icZnt_GK=Vfb~?RC%oI7%<wkzFjtFw1h2n*%QKY77NNvqoZq53W zSwxq#)2T+{HjxwEA+d*vpA#|tz9Zy2?flk-Z5^3z9n!DqwZvoENy3crL(evSNip$L zBDUR@UTYk?skR6FkoHnBakhM#hG<fIooXa57dg=l+WhYJO+HiE9_)2WlyjZ63=!Wc zViu}zAD1*yz%)P%u)wod5e~=8TFT?Y<$xyvPXl%V+9z7O6s@QH+mMxKfWE33`M208 z4*-&|<F#pJ<qNTy+y!U=G`6<#qn3ukPc09HcLBZ!82M_*zk4hcK6zOvd?sKVVB#{X zcV+iG<tkndh4%pJ9u0+mcI1BrYy*4+NJ{Yhi=Pj91W*syX~pWhTFuGtMA`cj<a?&q z0uIN0W&aebr*0`A9e15$p`VAgE&-(S?1FT-0K@ZM2lO4v+|^7u+=F?e00UruGoY@G zd@<)az(-i%b^>+*_5kXW#osJF>}%;8aDIoTe(7&6puX+z`#D(o2H0(FYvuHp*CyW2 zgUL<H(=G#WakA*mbwe}lV{E1!=3*c7p&k499H+lN2A$Cn`P&KirGS$Gr**RWWzanf zcmeQYM=LMt?5QWbmjmW@w(?T|C4f4#^*1L!7JBjtj*JA+H7CymR5zo4)r;5HIQrKB z>j4`8+pXAR*Bt^#_2knb=Gu}VpP#^#SD%eA7xVWyK!YdGgHm8K*r|vAlHw;a`1y+? z^dpsCEhIm80>W4WQUSgAKMBC`fHc4Wz|fZQe(na`3wSBP`Wd4A{89P8>+;V8%AW=p z4LBPx8Bh#p{2%=70R0p1^Rf1X07)UaT|P7<_q^shE+iko9S1lc!2j@F4!8nP<JfVH z+XLv8D32n{wF`6#*0afg$|Ng)4fJ}z2EccY{72CH0Ab{8UuXTR2fY@s0q{0p6X4&D zJ`*d|O295aAFLNc0n40q@_fvXNthp-lV$(?8c>B~xgM~_nQxD3JL=nF9$nVn+CAae zHMWs|k>3b?$wBnI@%#p`r;U}<p5M55=pf}jg8VzcUcfKTJnp7rc_I++rHJ8)w(>0o z)3zP$tbP{c^8p#jR$tSMesZ#W*QGi6WsdxEtQ$`Oz5smXtS28~EogZt#u_m8Fysqh z3ZMXR>0#DxU>A%HU<BadE>=GDaL+pxa5~`3!>v4}8|EvZJK%(FR=(#5<O-m5cN}E8 zTlv-_J@0+M7l6o7o|oGLr=A{GPuYf}L{{U-cYyv^D)J2QC14*Qr6<-!Kw(d7$7kI+ zfC~VzR4ZSeD&<E7>|Gxfj(i2^)qvLkp8!&NV~l%SecI7jvjM{ZHvpCZo&Y=tcnL7H z7vk?_?I)mY4d8)3*l+q+`4Y&E06!V9(2*Z<4C)2!0rWrC%Fo53IUO(?a5-Sa@yJua zrGP5H%Ye@TUje>8-j;LA+;LodnfZVPfLj7(+x*FvuR9U>0C*Iz0`L-`;Y6!%1icxs z1@H-AC*Ui<*MR+wT|*kiCmrntwCRVo0nX@W^_eH3uK<$)eYM@MfMEf<6v%o3>HziW zR{lC{z5x6iu-mcU0D2Q(8{i{Hz7O=k0hoV)3jtRHZWv(oWBTLl2zVZl1bG`kJ8gfC zWA_Z`7XU8;8UVWh0|r|CRiNhqRsebrLfZiS0po`tPls5$T*xAT3czE4mjS)CO^2Ze zx2qd$?LKz=-RbB*0X!Gb)Baw-6GKF2uFrItj|26FAseRUzd80(Ve=8-6Tnx1Hp6f> zA7=H}{egZ7=%)dn0KNe127Ckf0q`^6S3tta*!utjPqyXm1KkMN2>1Z-31AQ4WE^-h zPqB9C!!aI!!GO%+R=x*x!=E8L4S7V!!1$hlH4X4N;A_BdXIT5re~!0LIUQ#o!0mw7 z0qah;<tqR+2l3NK`zh9T=E{UD8*tIV^nrR=-)DgPbv@={J7{BKFc*EMoQnKC)%u#8 zVfE|5Hv+Z+zCX>%N&g7g2S|48>FW@{q1vapsxu@8({^(mGXi4(7zQ|fgq7ETZUlS) zh>gTvG74+;sHXbw52CLH{SUy)fN5vq+%?AYhL6R(JJ<7ijzfL{o(I$e($7QPfPbFX zeEAKI-~WI<U;A5s4$d}!4*^}r{@?tMK>1OCF@W>OSovJgZ;p|2Z5{iKko7%FWX4~i zqtAdY8!#EL>TJx_b0j`<y$tyqfOUW)&$jY^gWdz!3-}H2U%&{boRQ^1HVbeCpvGyp zx!yy&e+KLagvMF<Z1mN&fa?MOJk$1xxxR($CqU9@oXY{j0pmtneIG~m!f5H^XU5t- zW?u{koRf(dGi|x|vJf9&2Oq6uBS!(bfXRRg|NnDnJLm&|7UL23cq=~(^jN_8fKo?( z%LJTX0Cxc%n_%TTKz|O{1=s`l3DCm%zQqZkhXY0f#yj#`L2m?Xn1r*?Br9*1gLwq# z0!RfM3m9M@jd>G5UjVoWPy{Fk%y#r^K{o<60(Jnt0Q}(S!?{?;0lfgH<XZWKpz{Fv zfC|72z}1d^3FunDlYloJc?-lI2DAaB01gB6a@sQ#^l5+zfD%Vu3;F@TLx81#Cjl!R zeZu*k*9y=Y&>qkkkb1t=4+1?La5i9yBcBfXa==Z1`yKgnpjQIc0d_j_BQ8KL0nP-R ze}R>go(w1hT<gf62E79C65tg;17NeG{}S{bz<&T;F0}IApa%g?24pz$iJ&h8Tnv~3 zC<atJ`Wrwm0@MPYb>we?-U!$M*yqTTFGBtRdIE-BWaa0Ao&cBvxXh8CcQNFE$$(No z1>j1+HGugSTf3Vh$XURhfCmB30X_ok1<c6Dc@VHG|KRo$Cwtz=Jh6N7Aa?fvHp6ZU zU>o3z$=2@JDY!=l3<vxfa2nv8DOO(s`cgnOV1^?<9d(uKIzIw@0@&%)->v}n(}21t z?&AQ*6k`7_wEAw)T?!Zv-NdMs-vn7V@Kw?HvgW#rJ^}Xu9xSl(+o$4w7qGMx>vE}; zpHhUe04xEFy97B|f}8}*2h;)T0qX%fQRb^axe<Uz0IQ0ue1!J54$ugA7tpiV^G+;o z-hZ&%G;L?DY17bFz_3z@eOsx-Vy^k1Zw4#^EC$@6?acKg%6<XZ2l#cGm491?y&Ui} z;6H$rD(o|W+hVwXjaj>{<>+(32Y}Q|k!ygZm10{D_zbWcun*7*<pu+)nkgSFXY9?D zq3znkCbiPaN#FT9<@V{gOdP@bCs$zZ0m>?V-|kW9mjWIKw7s;c{sGjp9#EtEAlP<u zJ^Tmy4F{2ruf}~DARn+Aumdn@y480C-5GEgpuZ!h?Rvo5fK7mRby;&g4BJM)XMlgq z#JUey3Rq5<1s!0-6;17z&Jz8nfRxKTuLmGuj<tIVHqQWF()Q0of5dFWGCSTbG6VM+ zfN6lQ0lxxLP<Q&wrtz>&mUZKC%dZ5i2E69@G1nB(a{+b#qu&O|PlJ3UU<_d5EU`0J z2JEl89BT;RWT)Jr;70(?1WW?7yCPn{5p>a9tmgpx#Tp!mY7iq}8sJL6JixVp#H+D) zTy5?CbfxDlybAFFwq9lBe}?=6z?TQnCxbo&a46t#z>!ypow=6ILp*>d0jmIO0qX%9 z0b2pv0sjVk4cH6#4e;JI2QUA7<yxU!8^C!^`PSDWKLAGoY5>;&?zz_LPrM#$D&QhO z$_-en0l(ged9(oQ?jq#NtvJ&Ft^@oFaOZ8<R{%c%_5=Ff?s*FU_X9o!6fZ%p01f~; z|IOAj75*;)lmXTPHUQqfUg~=SuvVA91LbO$*m5)fkM=+6cKilNLOa?4js>IxHvS*l z#dh4$Ogp-3f9C_P1)OvX`W60`EQ<GgJzyc=cEH`*|8l^yfL8!(b$vm<8Spo7A$%^3 z_Zze;g5Ar2*8qKf$9}xlnYhfwKAH@edXx0YioastUyMB-F%8yz&{dD^owwU^`(WP@ z_FVu27g+fgl>Y|sBcRn{D?b7D;{e%!^8xucNu8s0-<ykLIn>D=bKQcz&$tt7(cRb= z?snu_wi2)&kXh$>{qBv|AN6;uH&+E@F~ALfm+~w(8?YSE#wouR`YnKMfIWbgcm2No z5%=J}2=K!_Vq>m!@QuyMYq6dIMgt;%JU|ri44}T&+7+OV2LO$LElz!B+>ibQ`~^^T zf4qDQ;2gj>N4^|%`UA)Xz(PRzLs-im!8!sM{iwBD3A?xNZz}&BvM&MO0={?r{s><k z9>g30q&{fnJ(haji;sEUJAiAK<1F?J&QgG9UO*jyOJ2tL>E(F)BG_IAxI&j}u?#T- z9t6}c```QwgP)OriGX~-n~&q%_PEtAhU|90-vD<3Y5~tOR=~?kt=$gLy8+(-{^Q6~ z5LaKoiGY(Hv+`8b(HC$$;1oax;0&i;#{K|c<5M{6JuPj>c*g4AfqW<63&6L4?*aRt zvijFh_Jk);_C>_=qLu#{vU<RM&tlx3wenjaTMW1z@CaZTVEGePzYFwnPf85;0qUO- zAE!TuyhOiF0L%o;eZls%sXMCs`~|1qr~V6TJ76y02EeWVvi@(@{xcl^iyXhbS9snK zz#Ks2rT^XkJ%GgLvBv@00a5^m0FH#u0f3>pp4$Q6JM|R&zo=)d_G|ogSt0%o=4USK zuLN8Jc<^~E{~q*Sz`lc&qwXi#qmE85Soyarr2o%;N$ND$QuOh1z?*;#fbRgOJ=Iiy z1Z1gzqXB~frvU!!*s)w9_%NWYBmYM|#ttxI750)<R^A9%SMYU!6^@*;fq-FvQylrQ zS8y*2$N-E6j02Re##yBS=PSUFH&Mr%zi(giiq&^Q+1`LTC_BHw%IVL@K5*nQ*wz5% z18xG;0_tAH99`pi(*ZkQmtSAyFW)}CR(=thKMLxWzdTU>AFHkYa_yh8p8>xBTD@xZ z;{)}W>rvS31?&SHaO^LG?KOY}fLqqc&!F?C$@v53e{%ZiN^M8|J!|aGkDH6Xecm4B z4tY&}6`a3%-peV^U-dRI9i#h<eZaBcuYU4JQcYj*2U5+i*qUFkH5Y&Lx)3n?4V>Qr zv*3e2etMQJZ?5NFxAk?`^##kA`ZM43{9ktdqxzfkTcQ2(7kl~Rt&_BW{!;J%>eu+= z&kgSen4jh~m#L>Ye=D@VBOQN7!Z!5{`F+~v%9)ElcYNa;^24)?e}#_ET$9&If0=$V zS9d**l+`yQA0LqOXH$<^CqJFapHwxM`sLHN<Yz7!;~S0g+nDA$dA;YI3djJA2k^&C ze_H?hcA0>?4`SDF5IKK1^DaQ$Tk->%=6YAh#Id^B>EHev(VrXbk1d*uKdp7+X8FM? z{+?A0Ap9<9z{Bs#Z;|nbqs+BP>yzG-AD}W9f9>bUE%Nh0{2d>2xw0XSoIi2H-=rD3 zO@7qIT$g$Bjm#a1G{W8mNbP`}=pgT<GS{zw|9bKs`EG!s7ML%(+~hFU_SW*^XMPSX z6HwDezFg6@t-L^R2Y??i<#+4&u}0Rz7l73P!n!`b&uUK!biY$CUrB80Eoy~wt!(}K zTF2LaU!eY7fC|*T9FTsH`uQH)7Qa(J>pe3G`*4!HUU-MD_n`IxJ>MbA^5^OD=6X0u z+GFB3ahhux^iL+)_sp7W=O2_~|J>0^zB<ZR9P|B-?&nyHzE11SwNCfz4&6WIVt?|j zrR=xm?X6tN+S-0K7iIkH9&H=iOFz$d{87ix-cZN7=Ie1VSHG5+M=kBkBh7UY=txWZ z8c1{TZIAq}3coSVw>p}O-?ir380&RjG7n8(H9Gyp&vN|*@G5LxYa>7RKznoX2SoVp zL-tJ_;EvYuxo<AM$?y!om;`xkp}8g`$ZLp9d2^BG_a-iBEx)&*V$yv%+3C+W!}4~% zgXtM7e-&g^2YERjUs&hP<F_H-)WN>fj{18XJwGbc18{;TFEKM$jVCV!!LixP3d!f( z_=Ujkh$qroV&^-I`F-R2o&2Ib-`P=-@P8{u`>PV<B^W!L{xk2SSe_s+pfFbk`joGG zF|X(_7hlwLcT4%IIo}qsLf32F5n<jw;o7G<_U7UnBlvYqQ$ARZ@`=sJUv4S6$hz20 z^Kt`oQOABUZ&)hQv6(ls1np`LqQ3;XOGEOqr++$m&o4Q$E#@ow=KJ~Py6q42=Ii!7 zwBB6&$~?!>lrdk6H`g_Ppf_K5KSk@!#qY1PFR#>nWnRz3vTlByr0s(8X0HiX$_KSu zdXh0kKHoy|^L<`clBGT`Jvs6k!zU_!@vVlJm3YbBhL?;PS!;Ni;hTM4c7ow`hL=oO z{13xRPt^Oow5;Y)!^=ul=kqf2H~*BVdA)M}Z1@z#rgTWsyv+2yT@2qz@r$o8{2_{8 z;`5yqf0xg9QGA`xAFB8rK7W|v8|NCntKz*H!ym5L`YR3JP4TH$8U6^*y;^$CCl?ie zWPm>^!1oC7sR6!cfIm9G_wt-I1*88RU&ZOSKLPD$3(}vE{%?W)XT*~oJ`K3e;YR`& zpnVCd{1NJ##7lgCoz(%X-m&L1@x{LW5cTFlH=bp{CGZ#0{&){w;rQoSv&hkZ9w@&@ zQAy!UrBCtP22+0;y12$E{}YCIj^n>=!2Zwx-!p+X>Y?z7p0sB;_&wm)YCenlRiUu_ z-a&iyrlZMkhr+c9!e7n}(yzapcMbRyhrbDYSMXuY-v+*p`I8{=@q^%XS0{zjb-Yiq zzSqqcHQIa6aYI>c`Io`p_=@FMGv2k9e*=7SgXK4XZ*cg{;IDPc^Ic0Py<zze!C&U^ zpMu}*l-~vZC`bP_+vn)NXMJld|1<dK9DYCeg$~~WOIn4~-c~$pID9hreXm)*Bluko ze<=7puUfu4_=g>RPw+1}`eUef{Qn7jjl=Vc0AYt81b(^W@8lMI0AhK5V1M#@%a4*J zT3yU9zJ#&v!%%phC;3tk(3i6PABDmfY5k0V{>lLVP1|_>*8qQWz<x=9|1DsDUqJs@ zfPb3(^F=5;Sm%2K`1)O;aH=Q#7Vta3zpwRsssDE<JVWc-V~fi8Dipp@^IgH$fzQ`G ze+ejMcPM<f=1&2?9DGdk<H4tY9SZN(d?EPMZ$ja3G|$&nq<k9+U!wW>;A_A?spI(@ z>;EnkPD~PhIrz+<L*XN|ekJ&deWCDGy8KpdslSB6XK0?kn3D;9yym}SeBiri{x|TA z;5TW1Z87ne{}u`_()w=TGxvwW{Anlh{kSk32!$)Po`?P#@EMvvkB5HnG3}2B(9||b zs=vAZm4MGkNDOb+_H(Fjkr*!4Jb%<-A^3ANzYP2i@P(RR%XnHQhPP>+KOUGKO7zFG zEshMC;IGttciy~$zd-ZHfX_%w^xJzH_|#U3;YQ78f!`BO3_q^hTad_`s>JXjvtF`% zyTtG-n&-<0QaU7tU(o*f=A}mP%QRmPz9uCx+(G-};csE5#PE$;|32$KBr&|$j1TyF z@Ef%MFvfjhm&9=YmcsW0-`F)Ve6se}AAHIYiQ%2P{74>=y2GEg&jnxCBQZQm`<n%R zPikWLRc(JW`1+oS;oe$bNBz->;f1Y)e+GQb@rmJax;}o1zVU>_a3opyZQ#>~CHni# zZ><01#PA)O=NAX-!2d(@M}n_!ouuw@nGb_o@q^2W;j^@UVt_AadGN(y;jaUqGBPpz zh>qt@`a3f*{8&i%7kJZsPGa~yt=~p};}XNC>h|!LdlpVi41cZX6Ti-1b5UY=lId^M zv*Y5#@GfoN8+>CF{iXH8z}HPp3?HWZm+wldt4RzWs^cpJuD>KPytRw&Z<cr3dn@(x z6T`E0d{2YVxG^z&la8mJ_KOn3ck1@92VZe3`u7mwKV<ob62mn*p55U0z<($0KM_aX zj0Y3LRa)PP{3D6sxAgvhOlv+QvGJTnJ?7^~%})Sd2mXo#;rWJ-iWd^YckBL*QIGQN zwEY5gLvH;&$eZ((iQyDo|FgX5tVs0tmzP=oX3MVu-+7Vc*MaY|#PXZKm)vdnZQxt} z)$$+ni2pCk?*hMPx#hnFU-p#c`7(;(&sqLIjOSU)hj5F~aGB-#3u}LI_)dICQEvIe z!4F+vc|Mew?C^YL-*XP127Zgf4+6i>;fI4yar%e9GL-J{XM@jh_$=1v@RPt-I6U9$ zu-xGbS--=VvOcH&82IlOT7EY8Z4Q4G_*WdBKV$WP!!HCs*WvE~f3d^g1O60;e*pYZ z4!;!q{#z{nB={W;{{r||9ex$~`y9Rje2v5NrnbQ0-vvL$;rRfkt;6pG|E<$MUxDxI z=)VX5+ntvG1$-ALKY2^p^)Ab|0-x>hyz&3&R?Bw*e}a?m-N6_A&GNm#zvb8;5B?FS z{(j&a|8DuA;1@da@aLKG?y>xt;4>WlT<||S_7lL@J3L?9aE)U>1^oR_SiTs1mcv(o zZ{hHKHRr|7e7pkuZO(kV2K-^pe7p&Kio^dE{2s^t&cONaA-3mjt6$3UZ&{vSM)Vy0 zGwiQM%kzthbq>!jEoZE?{2K5xH&~u8DXDjO_3+6lzZra{!}CklTQ*w$L$=4^`CuvC ziH~2tu6Oib2ip5ffDa|d^M?fZo&i2Rz@Hl6$AV93mlWoc0Iuh}f2!H$j6d}bU&!(f z&vQ%tR?A<)e*`#uIrvn^J_bJB;b(!*aQG|0Pj>jL1M%Jpe%vSV<J0TI`0==7hvjdF z{WT8%ckopX&xiF_d~Ep#z!y0@^CQLKABDc&DgQY5dp@xI)8H?5^e+VBU(NP@kr=M< zWWRh5{JJZW!h8~x;2r9H60lFOtm40hzM;T8zv$%smK^{5#Jy<Ws-1lv!mp-xZD*e+ zC3uH<J=@vmA=D3SXP;+zUPo^<H~t!9f4Fxs_?mY^;bXveLi{Cs(En3nxP|8DI1l@I zM)^DWt)Xxqt$&2}KO}}%Y5u8z{ptX}k@0>OQqLo3&-ZkA|4s~d)cmf1eF#f(BkoW6 z+=BWP=ixo|y~w|s7(P#z9~#h);RFBGaz8?SuA^t2r2+f7{Kv|b@;sy?pO=8Ic`g(_ zR+r~5snu@|g<sNqy;DBblOG&QeIlfuzjSKR-plM_pWmgz-}iy~{tJHL3!(64?XL^} zsrPPT_&d!X4SvU_P`J0|2U3szTdesE=bu0HcR_&Xm%_dG<o=QNmxE8$&xbmCM|ih@ zuYW2O&e8gNz)#+6`DForD+7FEfd7zuz3rcG1Ns&z@q8EX8SjU}f715Hl1DzY*8HG= z{V4D?$j^bE^zYb!{-OYX3HW-<&tBT!Z->O|XQXg_3Wc|7{enRGT9!xunexlP?|DM* zugSjvzG6ive3|B750u{qemU|ds`K~zfIj5>Gl_gx@C(0B3~$u_j_&CB&wEplKgR{^ zPXW)Dtkh`xbHQgkY3FlA!2T+SCwVvi)NHl+_f)`sO@N=?&OSfy<aO{iLf_lTr=0=& zUjlq9{K>?8KGKu=x^{}!4-D{s#-AOpB!&lQ`?JaK426Hud=B{ZPebAJH9r~ra%a9* zfKRPY40qA}KZo@@`E^4legF;kTbjR@m40IVJqkW!Z({g!%|A_lPlv*vYJVF7@osV+ z!IS?Wp#L(!|A+DKN(^7`iNB;kes&M=>EP#Xm*;)V|1$&n^TDUUUsvs~5PUlN?_SMU zg0KHP6ke(M*@5y4z*l@6QtKb}w*~YM2l$u4H?B$yPtf*j1Nz<6zia2uF9Cf!Y?K)o z&l9x1OXqm~F#&!^fS(ZHF9E+0{ln+D^v9RWq^}HxU-N{&Dqw#b_{kXW;aXoC&_55p z{-sd(eywi+zvE+@znj3<IQ!RUtba?QpFckY=KFWhSG;fclLTjrr~c3Ye;oMCt+xM$ z2lV5d{e|nph2SS+zv!v$OTkyXWY>eMz&E~c`Towogy`?)fd4xK{1fEi|1@3xb@0pI zk>{u6-wD`%9^iir@cft9d9Nn=`Ftq&ik;SfPw*MopAOgj;6rWsRKO_k={TR7e4Pk> z5Awg2o}Z5g_MgAdKi0<rZC?fcRo#CbTXgekSRU*76}tQq@Qqj7^=+9`KmEM|J{9|S zvG%tqp#SVpK2MS7wbZvf3~T<+iP~R^*9m+b^6wh0Kk_g>-?r^J=CF8we-7{$AkWjC z_4GXGQ=NRgIAC8+|InLwt_<k!0l)Bb`F|Akj|B8j2l$2nzXN=Vv;X|Ucvjo>yA>9u z9W9f>eLZP^H}G}H&m^rs5qt{vmy0$3XD(#hZT^o2pW*B`lUUw4Ka_x<>F8^~H(V+I zkK=jnX4dcYPi@!u_?LB+|JR<N><{%;1@xN&Jl|Hg`D!!&j_|$+=vy8h&rd+dn-`(6 z{>}mYG2m<7vFpPi>YaQU9<V<L{AA3Z-#UtY4)}%G&&+%&q8{_(M4ivGz>jqL=SJ|$ zu|D_E_KU%%|Ckuwr1`qT-Sfv0-qJw*FCQ-dU*~gb+OG!x(@MKPZ3UmP$>!%*;MZMg z>hI?5V|`m~{jIuT{^7iKh~_(Yi?8ok@RObKJ2{}wX8HGQ|3$%PV1K$+^OcT0ecVQW zu+P@|N6F*-Jx}w`fnSdG=s3-<3Dmbez|X^<$=hvvz6<C>N5G$x?;V|g;Zxruz^8*x z!Fl{lZT|_@vw6<=jetINODO!F)=vb#@L%@+s)+ojc7LsK{HFru1?pP_z8>?B+aSm9 zVd}rK<MAT+$<F=48*C58%hb0Ce9VdO-{3Rfwd28;ETzI9U)V?fK%oAPf%8*e@afL{ zPY>ub0(_3cbA0Cp^b5M%eCB%pH}G}NdbkYyLgee&nqLV%<=Ig9Yt3&6`1{h~QvofR z=+DXj4{6`s`3MH>)4=nEh^D@?0{Zj8ry$?bv_22~cxQi{5wO2Lz~3F<mj(EhtRLr- z{+{@ME1>@r{A6eRex&_-iT?iHB5+>l6ySS<U$`wX%nupSzF$Cp2KXIM%Kw|GAJWNw zo~M)7);kaS`cG}X=LX6bg0Dk<7is<6fc`%4%d!4Fq4m!P^jiY_cl3wz+)!=*Ye0X9 z^AQ>H#|QY~0p826j8(;|3k%coy-4Kj5!sQkXN{i_iFgIk%IMVMs#vr#5-W}5mz0-9 zt6))39+_HFJ|(XtQV=Vztcv7S&-C)kODjsEv1mcskpAhznm39R7MB%A@+vFyW<{c9 zvC3IqVP#%vG*VDqS~?3w94-ROSe$8PG`~7lf(V6xK|ypT!tq%|nU^0co*s=<1Z*Nz z#g|1X>z`jW9UexHn;1b`rk+<3D=sgq^3brVXnA!Es*1|;sbz=)<fYZ+v1nf9R81C_ zO^uXG0R&oJ8mWrSDv5eiqp?_YW-Owt(<<^RV`=^TqLC@+RCHctR2dgoMVayCRh5*- zrbqL=G7>(Uu84GuKw(~WiMV$n@Y2Q(9D+anh785u0sPZ1eIWl1;@|#*`G*Gmsp>zB zM(O<1kAM2JI2D5^>o=JEAoXVe|IovrK}w@|Wl0x<X+D@PR1u{etZGdkgzn8NII*y} zgk7fwqYOh&VT3|2R$5U|TnQciMrR_Ys=S${c_k&~`H;<2#EAvPEL>QHG^(U&>6FS? z`HXxu=6MAr#br@NPL0mwNJXR5BC+ym(Xz-C4E(fc%qz{SoW>rCR8>!j&aCkAi=z3{ zA_Y~kNJ(*NajYtmpI4F}sVJ|C^gFoD10Z3M`bdVT5S3Akb|w2CfiP4(u*|+lS$P4} z(HOF=Dq0DDc~!Ay<eop3s$zMus5hm$xTGLbT~Psvc+;X8`BhB?adybJXjy?DLw-p# zuS~omt*1tc3nOLGXaUl#ureBr<QL^tA`D?vhiMXj7-vCYUL>!eK*j47R9BP~=hIU& zELVW4>dL5;muA?mDL|4}R_E)A=rz9_c~BPfs$+#iBUMu(rFj(?qgZ}XBtJGYqQVyA z!o1=V`ooA+Mq|~LWpVw-r6sS@pIq^(vREGaH?6p;GB2&a9#t$G#nX{}$bmfcQ#8MX z84*{oGFn=Wl_D=DB?pM}fga~qDOL-eLg-wkMHza$NybRYe*NS8mPRY5Mx{_x_g17B zgMQG+;!1NE)ZD3xq95~-Y%x7#YP58XgPdVegIH2NgJ~s6?=r#sEM|{Y%xWsFF2kxq zabEtV)y0*1aAg2z#+oQR)l6-q7HLnnXv(z8Xd&hjnyZ^EkwnzEGfiUU6}lZmoaE6p zVL)^-6<=O{ezYPMH~nC!(+rLy(Tb{KtmKiZ%6wI#N>7<sWh`$>i3y=74=ZR~i*y9T zWTXm<D=}p&$}5~i)EPAZ+fruss0kC!kDNJi+=vNhoi{ELNgFa`*Z^HqetAhro?4o# zW|dAUFVW=&YjqU8HXW&+S7mZ^kSU01>B@%$<ygtsa%MjkP=r<$!vs><q>Bt~+E<Y& zvtm)>a#(!Ud6M{3tGH>IaRJg(Al-{q=9N_yo32trsdfG1MtnwbtcWX(S5;i7t+8aG z(`MvV7I@Va1*)g3k%iDl3!Ie#dmm=M*&Ytkx9Fk@E?H(>k3>tNrC3MO)YxN(u1Fg& z$XWlr!YJ32vg*<)T(nhDG!2_>6|-6dXg7t;RylYW_B_AJviu^q-+wpQ!GqI>LIHE^ zSml+G(yFP&n8F1!n+Toe<ES;I`KAxXYSO$SJ>7B8UtC~gAEfs30sYjbJfPnIZpH%! z$f2Nr|8zmz$_ES?FhGzx3k(?|+z`<XO;^t3urO$VaB^1Y*H5DXf(8m2BxtapA%cbq zQZ@9G+WYmF;{7Gg{^F&-@{&F*T~L2P0|aT^AVGr#4G}a{kkpVaHKa=o=~6?w)Q~Q5 zrc0dZ5@))^nJ(QUZRjt-_wT2L%5{H<y1zu-U!v|WQTJDeD<CP?U&`q&A1YlwR4j*z z<xpigL<VQbfWd;aP?Z}pM1(_B?L)QY(0<<ZysEMatb8#Z&C|xJQ5!<7DlmjTRL#Q} z?@(%0)kE1dRr^2&G*BJ*s2DhiE`5*F3w=_ZfltKJ8qF&Oi$$p5L>zST)Ok)3`Wyka ztOSRgvZ=*oh2`qVOcy8OR9gjZMlsf+vg(o&y<}qv9jMNUj0n(APO1Duk?L=xiguzV zp=v7Ss^f;T)KIc2T~xC4Q{9G4DJh;JM|%9lOy!QrNi4@C%G3<3!tPWY<JzunaL&v= z{oGNJQR7D94o7Zx3>|mVQQ$>Jo<HvNbI%$Pufb}D(_AFNyNFR^w6`%Mv%SdZvFDv} z`q;>MXP!BJ)P%@{)6W<?D&ijbOQWSI$CxAeRn_Wl2z-8QRt0x?IpU$KGcrbxJ?o4S zk^X4|Y-#qsYEj{g%3`&ea^H$#!{F_TVwIv2hm{%T46O=q)h~$R%!0a1Ho@IAr<yb_ ze^}FHeeq`Cez3fBiZ#IEQ^CW$K03)cR^56<3Z_K3o2V0}Hj*PAS2A-q<$6L|<d;^s z64k~gcR2bMu28MPRjP4nOZR(34&tg$&zf*<#NMk;ICli^R3|9&NMz>F!D$S!B0mx< zsxF(BHf5%Y99g3JN>?OXC0F~YsA`sKjF}&5=QIHpmgHdzrCQ&gK%38V9x92JO}8z> z%2HTZQe9Qlq_L6?asycvL*$ileJufDGc7}X!JA1h!ekEEM+&1e)ixO^EiN<TqVlRj z#m<4i&9%*y(ki{LDl6>nr92NGB+&e7+!2+kWSZ(H6A$jLJ+^qnrJVDWR#~9x5MG^( z$*FwA8pB!Hv<5Ypfc%PC%|;>}=HJ^(ZKP*KtIEo8yI4hGb6v@qp}M48?nVn$1g<3p zQk|S#8Kafi7K!3aljjwxRni$@Q-Mm8NKv$;qN&7mM-{p|pSi7?7(WH<REZQ~?fkuj z;fb?c##pVEm9oa!6#(s2w=rb}uA72<{iGt8IcjiJ5~!Q?DaB=Zm9wOmBKn>Ti-kHF z+oA(iQ5gbf(ksTynVJ3d&9YrQ<n*HXsXSr%Nu`=;EX~;qixLlC-b~}kACdlkKdWOK zhE_e3QDK|Otp>|X2K5Lia@Ki~it1Q?aFA6)B8)@jwyQ3#nxWbgKUz)J6rA`9%PXQ~ zg9p0VVU}MEN0n)HbY|2(&+ue5cb)5}BJKdIJL_`wgls0y(rzVwZ*o5Ry9r|}ouba* zrFk=(O()JZG)~#a)sMPxf9bC(u*0z$>qsGkZjwEc+pJG^qbajwkwL8Jjsh%TZmfm& zfsh&<Bv?Utb<8~JiHoDm3_2P$GcO|Ri_^Q<9d!<%_6poEc{905+C))_9j!!GRF}z# zCL$*qXIGV#t#lgpjnaxhze@GZcAlDpvRpMWibS|p=wpJral|cOxI0ld-|`Sswm|V{ zI)18NJ=IdpojosBUa22NaDQvEWBSn*%99;V(3sxW3Z}RTrMErK3zE&`b5*f^C>JRx z_G89KMal~qWO*gCacXIKnY0t9C#IouFqE?jPdIT4;&hxFxCEk;s>*R=URL0)=;#a_ zkE&u4r@wB@DvRaK^qYxWN(2@^(fm#|*;QD;*%&t$oqUrAA5+W9;eAx*S(&5M$^cz) zS){ruT7b2y%w2L+hoXP@Y>^L+<7Ywegky3~mNZPK5;qd7mq%aBO?@bot}M+fjx%R3 z=q1&p1_w<ieQ-iL=P}Mjy|4$jBrLF{+(g`k*^A55$n?At{}6^-Yd=+;1FTv$C3Ts& zs{fjwE_Qpbl&A1!;V|(jnH(%k_e?37=0CV+v&<?OA0}@*xS^s%VA;+qLD=yV6FX&D zxmpC6O0I57aQR^tm6bQ!8oeqNRz!+s*jXh<V0**n9+@SB^-WGhJ+4r3OExxFiF4HF zL3&D6m0nPqtOy?SrMW4L3eCo9S0ApSYA@$w-1z0p-->0ol1|spv@89?8(UM6m#-7o zB&0e?I=3V7M>ZLFz5S`fiaC!Kmrd7$5ed$sCg&dG#J_=6oX<FGkLv~j%c37Aj8!7x zn>%!?EcctG)=sZ5cw}HF=#<vI8-Jf>5<T#LDR1UwI(5#T9?8}>D<k-*PyUUis+4m| z;NT_umOnuHze;9uuo~%B|Blz6QdQ-ZY8_Bx<7^Q!+IpFd2G9O}lBsdUX+UjhW|xv! z)nH?hs76v%7Z>pHWBh8=%otY{F`VE?SDI5OgGJkM|EBNAO~#r3x~QB}z0Y1YeXqMf z9-m^P!x6TCC*6Yb;8Ln?6q~(GbT^PDhe^F_R_IO+ZY1g!HU7>juY!jkoaLgWJWDlq zU@XQOh2w49oemZu^%Nj(w<sztk2`kdO+h!g0?BXx|2(Ly=^+tw8p9svS2u$XeEjS) zYb^f8%HwWB^x7pE!x<6WdDP81vZMsZFnfZfQ{5R&ccH@a@>o>vTq=X-NI49c(`4Yj zKtBt29-hd5JpvC;A`#B5%2?p$g=foB|7fWkObHfkvdqdEAitT@Ue&=Ksd#Bsvr1!m zQ-Ia~BY=wxrIv*XFRhIKH9q}}vrdfVP1W4gvg$OI%O@5Wc#12^t19x+3TBnTpWs-f zXv}fSWg^g3MoVZXL`6xA6=JU@nKrc?g!;EmnmV7QRhFySofa+9|A8+msI;6E)&J#5 zv;V>O(k{t|8H=h~D$7-9d8Nhq9_x^5#WS`qFO6po{x>kKAUdTQyJ#g=Yb<=4RcA({ znlhy_I^A&UK1tK6;aZI0)1>zFKVSU#4nJGR?~CxgF??Z@^ATUqeBXti-)W`o_&%AU z1o^y-xk4KEbL{w@nfb8m-HaW-@A}h$1Ld^i`)By0m`hrE`i(PUM;Pa+uk<N@d@s$& zM0uGNKYx{=ZTJygex9kNw&VM17Iy;gd{@h~<1c^%x?aA=X33GB_h^Exw}pmjfd6Vc zzTakK5BU*Fw_aZS-au<zhVQ-E3_E_d#cc;a9CNj{<9h-4KAhpHo;OLi_i)GVChec~ z@N+ebdr9A$%hY?FW5@UB)WfJg$=ao8+glwwzE`K_c+Yb_;;7%)<9UB~?D%=WI@k>y zYrpMeJ_dcSW5@3iY@VLrIUl+9<9o=nd8OXZGb6!EaVk#L_;JUM-*Za2B|*L9&0NOc zOO74i=d<^=1aHf@rgpD;{FayG0>4MK_?rY@=i2e}ksY)hzmK)#Aa);lQZMcJy{@|s zVz<+=<L6K7V3*<8rE1LY1tn=ae(!4s?Dl9GFOvtiJO227p~i0$n#?!Cua2GiUf7-l z_0E@|UCRV($IqMBf0y7*cKoGk+&V$(ryW0Mm->Bz_mtz$*tOUG(v2K;gRGg-5e`eR zbC1_V*iCL3Z^!GHfZfwSqF<i35<~S5*gf!gOK)I*%Nt!rz;5fuExi|uo7#;HwBxpO zLf+ex;_V2z0e^+}!|tx8@l6TX4LLo@TbO2fqvK~Aoo?{TpGs0MfeYFZw{Ywl%9Fgz bKIkt`+Gy54t}U*=uD2zrAG<V{@%R4#6M`yM literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/utils/.libs/recdel b/devspec.en_US/project/recutils/utils/.libs/recdel new file mode 100755 index 0000000000000000000000000000000000000000..4e980b4091905c2050c807ea24f63db9ef9195c9 GIT binary patch literal 422228 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 literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/utils/.libs/recfix b/devspec.en_US/project/recutils/utils/.libs/recfix new file mode 100755 index 0000000000000000000000000000000000000000..e0751ca416d14065d6a50325a07c5b327f2d6fbd GIT binary patch literal 418632 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ⅆ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�P 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�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 XPEh`je2Z@H&?U*n=i2>7(%%0A4)U6& literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/utils/.libs/recfmt b/devspec.en_US/project/recutils/utils/.libs/recfmt new file mode 100755 index 0000000000000000000000000000000000000000..071272447ba38af9d748b4ac0f876b23241b5f9a GIT binary patch literal 418964 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%0DN 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 HNyhho*_m?q literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/utils/.libs/recinf b/devspec.en_US/project/recutils/utils/.libs/recinf new file mode 100755 index 0000000000000000000000000000000000000000..e1eb62f1f712309698e3c48a77f99a75a7cb0abb GIT binary patch literal 417864 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�q)kek9wq93|ddA&sZ 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∓o=h?it>67Vl3 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�h{es{q88P5>;O>I5L>Ocep}Nfm&2$qDc}yy*;~fxn&Mlt7&A1i))lfEVIN zxT6Z_UXITz!%fI;Cjh!v;Pc9GLo#(%bPplV8zqH>exXsWZg;qy0gV}=v84PHBA%J* zBp{ySt7H5*mkRUG3SrLoPV?>02;m^X*WxtHza*Df{gD8XNUn`sI(E4fh*VqVe1fIp zB-F)aAll0%zI{kxVOdWi(!x)NMV?=FCiy)}5;!X)u(+(bD<>Y4)V=*(>;}#V?X)=* z{(>oNVu8=36q)qnOiKH?V&Fj0pJ5O?WL0Xdc3`V1z}a`mq@Lbc3bk50McBZN;&`KX zoYE4ix8^g2Ztgv&LPEva&=KJ$U0C9;r||tXe<NHLgMW!9z)mZ(lXgz2ZD=RY^QR+* z9i~PWP+5^vIOx?ewKSKNZ?CKSO%<kHufQv=#ml!(3MgOw8IkyuW#<O9Qp?(PH=lyb zGTB{T!5=}Jy`2!(<~nREuK<6K&T~(vRL_w$0G!8bFa}>>6Kj>Cv-Ju&UjbL&g^&G? zj1{s_4d5qg?@2@-6YLhU8TG;;Gb3^0m365*J%D5MSOGC^X7u#HP4t(uWTW8cW%sxr zqrF79)zJsgL45=t)=5A+zRw(5o&|A+@YP%ky6x=3x1Mpp$q%yY@Efm?_hxyrcaVoq zj6(hh%M*Yu_py9u2E@hpF(0t*0mlci^8w}qoW1bL=8pI3ywa;lKAlxdG3%JQk<~xr zKJjK3cM?sWC&|nU!AvfPrI#LX1K8Skt`rK`bDk5Zl|M$UoMEkuc%TmDGdSL~%1tK+ zX=#x96n2qxulpntV8{C++ixL>D<uxVc6mSmbmWjmT$K$W(Lm=_k;Z132iS5iJcLgg zLHrSmO8_<ZV*2Rt0mM7W_|=*ws<uuCsMOqfZtxfp$2^!*4b1&aTL8r0r8IvJHg{&! zCh?8Mof%^>^n;0Jd&WewJ!9r>w{y4GHFt*1WQNUThRtL~B$I3I=hy!;$_rcf*6BJ{ zz0c>wV&Bi<V(&-d=A2i2ESY>@9+M9QS2dX*iD>j7^8xT`52BOq7pLF>%kJlS6U+ZV z#2xqZJb+7TqRnF>=h5gvHvrLAJhgq$=NCS?2=gP^VtS-A&JjLD!~*dIcvn>34Nhyg z@ONrPrg-633}*ad;oIfbdd4qw&Efag?ixF9uG>GrpX9sTj4;Y=pN{6y}2G6`7C zWE}7nlS#~3Ei1a(PxnXXv!t{|6t}nxNb$3}rYFO6zx#8%n`RrF(`<uv$_J$LwG?Dd z`PXhu%r+uYo4}Mwml}V{9>3<enCR7JyxOhv{_?vt<IBw-*?HG_Z0deRBPz{}i;fh) zPfVr&kMh<i0ldUys^0?|b_!vS=CDf;_I4q+`waX^cmPdpA)5>^U=IJ)pQ6GM4GNoQ z)k@&#v^J#Ij;AF7t|PzW22Rg&0}$7+=OkdR^384vzq{2jnAv5`?8=M|b9dRf;kS&| z(%emw1eC|llMZ$NK18fsmJ&ew2ju7E!(**Lp7a22K8E5qSi+a*o%VnaCVW^B%rlrt z*Lx5>rGEjbX!{@PE`Igp_gcaS@*wzpuG@D%giB;Nm7yWm<M=T_d3?E14&RPs%uTi$ zlOq~pF0JP9Yly0Ae<d-f`i-=NhObF56_mrgER#pj#1rO4YCMFLGVaQs@smp6=BTW& z7ZR>?G_d2mNF%Cuh=E(?x|8oC7dCk_8HN*akaJDt51vy{-67l^VOBV#dk}Lt%ag;M zfrEJ?p4f($tXW~J!jld^k#}XQEUX>E$tMAKWPec`nZe;NsAw4QJ6Xc0Ab3W|Tq$*2 zgX|0<X3w?1RE^R7QW?PGs;Sep`ux)$5Laj2#sP5+=aT}s>VyqdYo^l(+ZD`CVgb;N z7j`(~xk8WYN!V9Z0GB(J%bjniSZn99Y6AQ1HX%{RPV*ug3yt$8OG`Hrw4WDg*RFIh zTp(9wz_W5#1KxU2e}5I!=?}30aP~tg0M$nXfaMS8{>E!pZ!&33CfQ^W&rAY3Jfs3p z&ppfnfSOE3O!j7z2>=xG?Z-gDoGx;}BYaacye%AVa<o-_M50r%>7;9Ec-MpSXmgj> zOax6|VU0Nwhe^b;{+l{JSF4WTj%S6E3WBXd{_$aT;opL(3;u(ig=$wuxjHyDR0FiS zHr)Y7e~c!vFAWcSn17v>E^x6{pwE7o_ZU5m60a3T=L;tz9Gwf@VLW#PU+ZsuSj_8K z^^PLmpoe9#RL3ry$|)=rn+Q*E{_VFZucGlbR*M4`&F5kRo}9162G#2^7T9V36zhOH zd0GlEi^=3HV<E{Fz84+9F^{MK)Z>q^0I<XhK%KvU1%TcQQ~>Ha5dcPd0jP&X0I2i= zQ16HUu+<Ado&Tu#An5(5_d(PU5dh}?Nd=(J<w~RgC`xn_qApE2(FEYm`T8p>p)`qE z^TW*WOZfk$nI%#?z=-*LLG6Xgy)JCP7G{s(3ijr@B>`g}5$*AW(}ca1LjC$rOn&X6 z#zg&h78$ybjg4-b%QIKfmuUF*d}$e2Z2g$fZ68yUp_NpZrmHHEs%ea#>{x}dQIYOG z;4z(5idj$#-$ksGX!GPnzn%D7-(2z9Ebp|47V?NkF@JOczEZJWbCtx&YJYYc2fQPl z4tV!5-2$M#6anCGUQpXe60lJ+-e`;@*~k|n_`(=T)?p+8*d(>sWQ-)($X6ox${0!1 zGQ!te5O=e7$xMQ$g?yRdZ6RUqLm{^jd@khY&ax>fER7bwwOQ%fEMNHVXxRL5wgq@$ zC0`FVXRN#_%aedRnJfWRF7{iPsN<eu0pQE0Q~>HH5de;P#vd$1o&5|80AsxX)XO3O z#FwZ5RPQA$0L=CRP;*28*yshI&UlsufSJ##0Mr8_0MvK^sFu&M0C4JaDgf101c0}f zssL2eWh?;9T;Y8X^}q`8u|mokZ6?%pIu|oB-4&DSUY!ZGOlU2c4<her<^xbb=7UIZ z!4e5qN#=u?DEx`8kjw{hBbO_2qpKtHK|Cn@2VEJN58_kd15i8WgUE6b6IoY8=7$<4 zTDnp(AH=q$%m<)8Vuy(NT&TqS6~6zfegAc$;+!r0ced+4yob9p)U1kYwsEltfUam& z8SOs^v;kQFqU$pv=o-pa#bul91d~JEsxsPt5NHFkK>H5@Z9o=)*y#j2L+PqA+J6u{ z5NcQDYX^ZTUKJPb%cUX!x++!qDlMRLJSDpr@ZIAq-;~+6k{&G<xxqRjo_oR#mJ{*& z#ct4_h}(2f<=T!~_X?`OXl|nT=uo9inFold6h7ch<*z5=3~rXxWLG0nS>~!j<R+Ic zk-EcpVtd*=9eE$c0cSFqdhP|fY`x%AuBDtOt#kv;Ta(4ZEplD4NNA*b+hU>B5oomt zS`FF<V^h4%88yfQwa5b#`{s;^a<h$cbFC=3v5nPgYqi>1t+rOHt<|tIjvzw=#n4tZ zRPPBlIEsh`Ixq{p)h_f_>u;;|x7GUFTFal-7w$l-H_++~wEFs=u7Sy`+U8Zwd7bhE zpB1Ns6sv8D)i%Zdlaf|h*HyNpRn}jX^;c#6Rat*k)?Za!{x(~Go2|di*5799?|<Bg z@HeTFnVT{ozNtht(}0~!#&^1qh>L*U74jQ`?M%kEyD*7sf|LVgi|_%vln>(ACz%g8 znaMbyr*Hum>)`_esS-bOC>?80i(fw%G*LVszDf9@BnSAO$rNB0lZlR$QFloW(1*zc z;3{tSk+D#Tc<A=xY$VUdl*WOQ9N;V_Q<@yqLvD$%H;S`$rUpUS9N~u>HnB;ed$w`+ z@Y0X~F)nv8>awsB2pdiR#ZF-33466T`)lF6>AR&g)TmVJQZII57AOl{8uBka*84co z+e(nFOL;|-mxjzX*nP1f)02ok++}gVU?x-dg+|=KjR=pTPegB76~G8t6+pAaP6fot z99HV0#Zn(4HCR?Lt+>JNxeb23%pG;9TOwj<O-S`i-qM5Js%XHZgJS(C<c}fpFFEol zPl`J55y|2a7doi}j&zHrk%QJ~Nk!{yE~a+*+ESQjaHu7K%PZwKbuxvm+alWgIII#x zvYx${H1h>230_J<5lXa4%)6aW=*qV@TTb6yP<nR(E`Z0IF%}wy(lOQ=-gSJZi$uqd zES6h89bZlE;8w?W9j>gDYs;Gy{-;kyuQMv=6H*l-$EDGzwi@ArktONM%4ku+drnT4 z=bYF)g6WKWdmX^}`xBe#nzcN0CjS&Q18MD(EZ1JdNfWB^34B6?znd9&#Sz{Sa@YZm zUKBB{Ga{yY5##Db(fE7SeUw^pKk?GfiAnP+XNV7_T<Z~+*yZo=ZW_~6dB?hQ*M^aE z&5>g{ZKdv{&Sgcsq0t|a17IuP*iV1f4fN44-`*;zI&G!`e0!44(6LU^aqc{{sm=kd z`nG*dNYyr^Y9EqWHC3+j$$0v+bv)<h&ZMFlC!39vbgpWCT~9yL^&!U;ELz|D*h~Dk zq<E7&A^^&stuqnyy?dr2G6dt7@q6c=<^pyt!Mml3SYg+0ZCYln(yk>ryWTLvM(<0G zCh%&UnXSz$j_~#zz0Qc_{_5iB)9Z2i^omF0oh$0l-r)}V9Znm6qYldVt`I(O9zRp3 z0V~+Xn1Mb>FjhL<mClKYvMv|-u?FL7`B=&GQh?W2$d@z>i?zyveoNkc0Ja(t=x=1! zH_ow&)ca<iRB<g{VXP<?+nrwre{R9gyLV5jL!a37y?)_SYP)M4yy9BC`lx(i>!Dt7 zBQfvbXX7|v6_e@Lm&&ucc^@~6B=?Hqy<V}@N*6yBJ&JQ?EUtTo*>1{;v<DvEKY1#8 zQYbId<%Su$9FP6(9m&=VHq=9UvaKRw?ov0v<9RoIR_sm0jXEeN;yE4QmcYH|*_y#p zU-F_GTu#K*E8PIM3oqy(HxlHbfq>RHKx-JFH44xg1Za%`w1xm$BLJ-d*qWJ2RNG2a z+e%d1N>tlQRNG2a+e%d1N>tlQRNG2K*QCyOSSG3}8&#E!s>()HWuvOHQB~Qfs%%tM zHma&fR4$UuHj>RYlFc@f%{G$FHj>RYlFc@f%{G$FHj>cDjh>Fh_Td+!alj2smI4+% zEw>!N^-uG(RhjiqYh#V%#+vq=&<K0qr9uNwSn4K#=<Ec*xxCR!ky)>0!UkTo%;|$z z>jc10Q~+Yy^CAE~^t=;*kUk#i`<OhSLeqo<%yJqJ`tBad-TkVgf!khiCPDnu34nVo zcLES?mW!Z0;c1Qro~KG6b~pj>fE7-Fr8)dX5dho0=mc1%8=L_62Nf`}QUt&=RyqNQ ztDOMrTH$EmOjXh~K8P0WBw6E=-1^Z$sBK52HXV^zm>thE2{@iBSOVzAWEv&z&t$y6 zuXbAdkx1=EBDEKZ)J`N)`_LT5;k+u&hV!a88_uiZY&frqv*Eld&W7`<I2+EZ;%qpt zinHOoqUU~pUWF?b{Lg(_c-p0P`I+YEon&wSmHgeAUuFv1wJ|rL*3{haqlRr6-7Y*p zVx5<|f%Ry%{I<-V+)sPK@BVGP``^+5h__{R-hRQK3ft_du+5$d+w7?jo*BNQB+@R4 zbVy={O=5>lVh1PD-6a96V7gtlVyQpScGv@LM<hFw(GGi_?XZ#Wu#xYuk?-)4-$3fq zx%=V(X~e{7H19la#CZBeZ!f&?>P$JFB|8N0tsHl2G9Z2s{tuxHYwVG|hRZN^sT+VO zmz$aLkog+UJnwlo0I?TuviM%l`--fwr}`ROg*CPcYit$P*ea}vte-StJ8r_)B!~B( zj&8GQW}9_hn%n;ExEV(;6aK_Hw_iKcm+ky2{-12cYKrl52^X#>%8xZZ!?7eJ-~cXO z3Ws^6bbI9sdH|)=5)$9fWeZbTmkDr-*aCdyt~OWEQ9W=uv#kYNuav9Ts6Eu~Om`(y zk54=LX<s{Aqjp@QZ(O~AEtd<wrN7J+XK|Ui%JG5Ymgm;7ovCB^zyeCt`UO0i;w$`d zfOqsGy&%d+J<CY_$w<A(Nd3qt*Hb<|#ix#VpniCuZg`+xcwqXu#`bgg=%TtPjD3IV z$$4^F>S)I5NXP0+$LdbU>QTq)RL9n@Tn$s|l1TN2$1vxJNcBNvxY(s&`M#BrzJ$>| z-pRCnK?LfKm0k$<FL1cWTa%Xm&8^8*PVoQursDvgOod6N!X#7SmkD&}^Iw0wxR`9; z%FB|3>KH!RlUagignX9ZLm_p}4WvIwD!qX_?izO>Eg*c>(W?BtTX*nwxJ1k&K78LN z{s9Y~cbAi!$xKErGk~l_fSBHl2D2b+nGKn*L;G*A?Z3g-@>Ul+HPM~UpXn!+@)XFk z&*#jqli8ZQ9KF&-uFTVj(U03T-fyKgaS4K&CtSc{UF*euZNi($7^Ss;v|P%vYN-BQ zT$I$azCI}{9TS!^r+U`~sj@z&Q~3Mm`16VUsVmSsc`SdD4)k72`G#$BdGr?tK6fG; z-A6CT8A1u`S!^x~3DWMvGs61^<(Zcb3u)H#%OjNttcccQ?o5Boi@mQS>C$<e+|K|` zmiw8LSNMB_O&Q$ST>fItLf*7OFTWwio9ryhtbM~&$CU8&iVrNT=ZA>WR!b;E`EUZD z%aTZLke<PBF~bX^oEc}-J;U^ZvLYe;gWNY>5<L}^XI{T5E8o5nz`LfJrO~;{%eT+Q zh8bqBLchPn@dMhgVtM!kaF8cePL8@-@z=bS5`d|!SqfP2l783?)W;$K)L*3nP{*%g z0ieAXsP(;|F2MmFVzLDG-V^de7m}&bRm2)6a{zZTnZlfv!Ug2>oD>3R#$>#ikHxPP z5^5vU0Z6KTtfEI@gO1HPCm8Vz&BZg+3N+Wf6m6QEXx6<H@w>pYN^)7Xtal}sgI2L6 z!1R~7nt+Oz^<$5qR=phQOH8|yrzHW9)-zw%9mEO1RGwTi)mTj!t3JxBNp}*nQjjix zIg(ZdNoTUrIN)@arq3W4BxIPAwiZ{clG9{2VLprFfD@QZ0@}YU$K4#l#lltt<5r1d zm|x`+?XKc(G%k6$t{(=d#1t*Ce8$aQmPG8a)U58{a;KOq1Irf+f&NvJ1)TZ{F9zWE zuecKr#ELg`kwL9{gS7x}zrkMH0RJv@Q{c??IssI6y-0x5-d2f?K^!NI<INGrN#i(a z9Je)&n_0(6>$sV9oQydBn3GR@>|!A0CMJjtksuNr#7p9>32=?`3|uR8^R*$m7ACqT zHoAn3u8EB<97;!#=lj=iXPmW`?zLWHatlG@DkhI2I9|w$2tE?>L2~mh*QpfnF_UpX zw>O#Fjl4}-&m@AlkIDFbE*{f|7rHtiM9aH=b*|4--t^X0@ljG-!js!&fiLp{$5qol za@CON2)5}j-*D4<Ez~+>k^G7`gw`5@Mzk9@2>t#BsUYauHaZy_os5l6#zrS&qf^Aj zU~Yv5lWQ^Uov-pt1@@<uj$a*3^$5o^se;vJHU1o0gN{REe2>*U+s5fNj1A3W))C&s zt-kDO%X))ZDZu(F{z`+Q!qx@t+eGHgtcq;@?CMB|jb5AEVd$kNrI!YVuCdeK<Ybb7 zqBW?~$mw|?n#f>w9*Cwgn3D&hnGELTfoQ%4iI3cnSJ?HeHir}+p9SLtVXpE_>oCpn zrVwwM<4uJiQz6JmjtB@%43vD+A>VY!Hyuo+gQ;{Krka@?+Z37{+ZLJ}k1Nz1aZ+h& zm~Krz%q2`e9IQ82>o{4}I7~DR=8iMwnya~k9go`UDuVGs&hTmbrc=Mv*S)j3OxxEc zKxJY0)#^wmJRI$WuU5NGs68c>%d+7cUXwa_zG@|I@d{!it72JQKN+dcRepivVS#=A z{YY|yv`>)w*ghrJ?$_{J)npOB7cz2Ntguz|@#irr=prd9;3-*&rdGUrO{8v6dsSw< zMzDd&6yS&G;=CB7%9=&7zOa_7TAT&3S_U1mAlAyDV-`fU3_4{&Y?dmmie*9lLoI;V z>s2=iM8j9zBoO<(s*^zd=2bTd=jN_A+yF$AH=P9#P2Y4DKs0|-Er4qMrkiB5Stx6> zFeJ7r&m^`c&m>lrXA-N<)5P*|aG1PS<(a&y@=RXUd72l`F=?&JGij~LGig=jnY60& zG%Yq@vRajAv)ayCrMJ5{(A*jZZU;09>}w4|@0fPWxwG3vfT<b)rmBBTRrj{xv_oVU zXeDV>9rHaxqYW|NBsAI-vt6<|bctBea>_hSMCO@B*&G^0=4nY~q%{>Qnv+;D&9XT( zOLQkAvjbm6aY_#K3pb_*dpVqMI!X@r>p^^-_h*{-m2?@PJDW&h)^@ok0{r&P$Uf`v zsw&1|Po#ch&L=ZZv&95p=~`T%`8s9q=;u38Gz)MSu63Jsp*Iv)LnesNUBdX7>OWkP z_9Lr7UToyWwd7Qoe}o#T6!mMzv%_<u^6F4Cah*%U3th(oua`mro^VYK{M4xczZJR# z@IOumIN&wW!M$iN_izBbK<F00D}`<Y9JoH(?QycPg>Q({IJ=w6<r}v}56U*eJtnn2 zNWfD}mOe+YOh~}%qR`Sgz|UCM%e^6yxHWuFNZc8AeVa)QU>rH0!~w)-5M*DAG|FDM zro1Mr0z8Dp$>RwwaBN^&W&th{4Zr~5qBK3%M_2aA*Zyy${Y^-_Tb*ftSu5=k1UE-3 zfLP?2Bv}XRSs!UCM4CdRWv??ifuO(KwE=FBEeRMa-0^Q{Rw-n4wroW}5AOHjjOQ^u zI(96D+(GXALNX~NvsB1+emPSiFW=gG4tHP(cdd|b6C^{7GlcxV7C`RGN&x8)Ksp4F z4gsV?0RMd#@7e4B|9*PO$C5+<2Xn4Tq&-<kz{1ygxtpT|UkSSnMVjDflc5?(xP6x0 zCgJwq8<_l&pgFru9!Ahb$lM5c*Sd0m)>Qzl%K%!}0kpaXtt-Jls$H)So5fjO3(#5% zySw3YUwQEQmQ1(dOiHa(A{yBY;zp7vV1ITzvMsQU(EeWed*4E(p+ic;0+k}F$Anz$ zi&lzmeOpL`df3~MSn|o>DQq+W=)wgV*%2s(8re1!VPxA-gpq9@@$M43Bft)eln9ID zU#GWz{a2DO;o3P8W75Rf*2LJ%#MsQl*vtgx>o}X{ye%Q1M9ak)U>%cwC-<cV7%XQ3 zV7x3-H+OCksmGR?b0H1q3u^&Em5|s_N3O4>IG3fRfCX|W0#@-s*e(lPBkVQaRB15f z>vJ<nCW~T_`YYJEw5R)4OMmwDmr5T;LmK|ZiGjzkI1cDqjhmdI<yjCH3jbPy(N2A| zKRo=s23WU<<^qD}sw1Jac1G=cnZPTK@DM<Q*w9#~!-vOOWidKVIOW1oT?8~-PO#xF zHu4xk^QRKdwsY38BB0kg?usH6|A=H+90$~2$KOuSp|EvPVe94??Yj=u7*(YcV#j+c z#o0><%fvX~O)=gKxJBp|z>kD(1N=<rw!nWl{Z((#`n)Cd+70?bE41#F&P{#(-h^SX zRv5g*p^j`;$Q+DTufrcaWX{Mn^t`KPgO(b+jx-<P`D5HS1!1(D{yWI)7PiOtY3jF) zEq5N9S^3B!^L=C*!67DsT%8cnn4E7hLq-pBCF81OItbo>W@$?6V|w{7UK$TlKNpto zWNEU3;7>vZC;sZun}%ue3%FDkq^T7@`c|a3pmu}I7(#F(lPSRc(fF?pQf1+I`f<Iq z5%5S^^P=Mjd&oIDm|(4A<5F{$oT-5BZwnhZLfCpmhC$$DrvjW7J&kjHi@y^1TP0*y zZ?`1ZuGlL1Wm_rOnknQxE)61s*;L(T!`mgAuwp~>e0YykK4i5x;NNdYmaljt-J5U3 zj0$DN&Z6<Qjl4fC>(3h_zQDR>BcAsf#lq(qm1`qVo|*g|4flVCg96NAvJ}vH6E_Q> z>n8n?38*3OvH&oK$x=YUd&~tiWwI1-;Cng~)Tg2Y_*QfPQ{RttB_cY6!$<;NW-<k6 zxrxiuyQK*!$srBnSW|%Kozn9zQc()QrT~w=D@u>Lz(onv{v20oe-nF>V{iYSOaVUR zC7@oEDKEMNp%gMq0ouH;`k=0TUzC7Ty~L(JlygoD4LSF*IVU)0muMfGXu>3#0L+m@ z`^+(kCOFXpIlKg*vqasevq>$%skwamgnSY<pM=e)kIg3$$*1Za)+hp2OKyON#Cnl> zBKD`QAHY@%MVq7y)S_76aYCwe3mIxGtj3#sz2c@7;wZ%JQiwS6J&b+DTM?WhA;e7{ z-ZEOQO7;VyJtFkjj!nLkr0r7&y3)BmSRK~>2O)R9Cl1WkLtaO1k{t@{7##fmU10<J zOWOjjb!^~}cOx-?-ReE9X>nFJmfikXid)_h9&ozs`{{n)mjJ$##fqcHx^YM)-P{%f zTN?~Uw2wdoTe)hQ)`@HD*g&>ZAphjEX{fSdN0Qrtvh4xG-*G>zt|%yMl^yOwOd_nS zIIQGVA*{X#YdDuAIow59AJa$BO;>35B%=A7kbiT5c{Pn>Dw&+VNxnm~{UKS9mC|6a zI`LiKJSRvWol9j-ydP=GiFG!KuFtP_#zfb=ZWAw+{k+sKbwwYTI+y1s00V{H8*O|J z+e!e=bsY^HB<w+TG&<Z(mJ9)HWvdj0)~YB9tyNK^Cje;R@sj)T!Lr}FQ~fS%mks9H znNDq&)%@*`DKTf0+ZsDuNUmx-b9zZ#(273qs-7PkotF)TOPa#<4TVbr1`9hr*agH> zb#ZvG(`CzpP~W81m-(T<Ni8t*HOQAJf=$vmn|wc%s&t!Y`6Zc778Xlg0S9d634qLI zS!&<}VFM;QHgM)<z376PD@uTQPRV*%C1C@8kk#uAY|OKgfX*_jZ)fLSu2&i7l$5N` zB>S8v0_#T%CICk;nF6$6+ano|6hGaMG=37sPr~|17(WT?$3@E)<~Umao#L{ga%eJE zd>xI4vN#SHD`AdxnmMa;z-H;g16<@J29$|;jT#ynsO{PVH~&{<ILc>hCmtmleJ#&~ zaMb2VcVT#n%qXaXr>t17EwNa?Eo@~x!L35xPH?x7fcaaZuD>B8*R#0v27;S}1dL-c znIRZ2Bw&ds0G{1~hpmRYiz^xwwmYQw82+oPMQ>d6Q|yq|yFS~;XS|#A@;~4R0LL>~ zdJ@4oA4C!@qTzAON&!xgIZ*5(WEVfjpS1hXu&J;BEyEm9^h<7}mUUz_1ZCATf3$S~ zjc<s~Z2lpgDIZ2yUy{a8A4rn`4`p$(GeJT~)%=&2#?SOpZ)Yt@zx@Em4_(!MN3w1o zx`Ar+BSzVWvi88cq6Q$oNyG&=d2!N;r;4~}suSBTg8X*jH33fJ=_S*Gs=qkQqw%wD zI&fn&5Qx{hK-PM3(u&tPi|d@&1_JrZE)d}B63FX8)$fLFH2%p=2OhgM5(vb5ZIvlN z5hty9ZxJ`x+lv!c{BIX0FptG0c}~-Y4AsMg*W|DukHmST@R}YO<PEI+VBs|bwiH(_ zgK861EvE6=&OPwvXvz>@;Jjbp#YrnJb<Rt@IAO(Ci@4}&C$@P)KFS3&D##10{Cbz? z^+Ddi%CB&F0tZQ+gMzB>F?s}#(Ulds0j}ALH^Y}>w-B+r$PEtLn@)?pSqX5;-psEa z3u5=)PO1JrRNQ^t;94Sf?B@p7mvc~U9aN7!ChB0fIxse?t<7q0vxfd_m4}&Wz#1kK zfTs0W^}DebQ(bOpz<j{m29BR;7>g}z$owXa=*VakStA(UClAFc&H|5R%PD}%;ZvK# zr(@3vfq!ZP|I`NlsSg}Bo3hP#Q)iy!bIL#*FZ|<!uZiQ}Yf?iunB+r`16&Lf$C(%= zjx#Y#9A{#fI8I~ubId#5IrdmzzN9JN_OT$oDB!{PaUlL)z?A^F=*Dw&{p-5{i0kXK z65!$njvp2xX%=GpSP-d(P6<R`PAv_Xr2LR_5`YzBeptFB;IGOD@q_U9Z|qAno=bGg z-fjS58uwkQl3=y+LA)jWw?awBb4g3~aRU&S?Zc5W?Cba-n(WJ-QT0R<#|M#a!ixs@ zdOybpfu+f5zH4P+CXWL#Mml0V!9zj<dKEYo5CaR)tevtq5>DkMicbwoG?|xZd!ZYE zsK-kb2XtjJ3HYReQvvZguU7n9g8v8!IJS{f0da=Z7*MTz5F117Hx@bmM@4=iCi6l} z+uIE)LzO3UmHY4G1|vghCvz8X(E*5$rOscVyO~S_X6@%xKrGr%>au7*zXK+ZvxT<1 z{E&LQ=ttJ`g`2{Kb3HtTdw4FFA_cgiq2u4++cRa_bBbxt)S<2_%r|wJV(T)+)@8~# z5S5`pcPrnNXo@Y-6fV)eP2AucBI@nu1|at3K1=QE>cV`j#m)5JBQezC<ZLc4-~Kf- z!<<)(Sub`<WcIYW6sP4VPIf$Vg~jl`SdM2fXT<o$$NVyU?k_vTshOD==H~H$<C$yp zcv|Dzc)8=Zh2`Ep)-3n-v1To|kHrG^&_P*P&Fy2cnj4DT;Ipur+sB&K+&;F_9V<M* z5_a9k4d#X=+|JjFIXb`+x_;j7FCMp3zz61Y?BBZxO#vXihmY?ud07w-aGFWLgL16z z8VlmFdi-{0*I0bn6b8?*Vgj&K6+x`BiWs~u76I#25yTd&h{4BV5%5=41W{uZG59Ad zrUCy}MG*D!jUon(IqxK3-+ZSC;!vxIK}#tRpr<PKB4VTt#t<<}2Ou7@CNNkiCIGHK zcG>>e#r^SpLpK1C*T~f!MB_$m?@P9afh<(oG}10^q=$3>;)zBk3Jji?<$XSM+%DU3 zyL`vttybu_UAEtLalbX+$C$?8Xuf{Mj}E=K%l6_f+l#wwFYfZaxPpqaIbV)Y;O9)Y z%L4c1>rfJ~zg&{`50|8^wv=0KDYx3Kwv{V%yADhhw%RIe<tqHZRY?Be3WAtSMYh_C zY#nQ|-fFYnYO~&Iv)<~nZbG3Sv=^rYIASlnhoGCvLQpQjDw|-HO|Z%)SY;EevN=_a z9T<YIvhh~gc&lu@RW{x#AMa@{EK~$hl@<yO98$=60IrvNxSFvb7StCV;1ao6SQ75% zYJ5V_G5OTkd}@3?&@$=N_;esZHd`INHDp%fGlRe+R#Pi6+E&P`DaV;c_+JY7r3?88 zT=xs<dRN%IX!q{j<$hFrEWcUFYC3L%9xHoQb0JbQAyQ)}QWt_q4VFm6x{Gi2(g0j= ze>DIoHRlU-8Zhg>nWJSWpv7w>>!_>`L%)S*un$9$xvWOG8D;C?RsR8GvUy>S4P_b| z%Bsu8%fx?AY=oPQ*NCx+ZTMGBIX9xN6>HsPx-OeM&NNfFp*x3WT_U}DNq7wD=H?Ms zXBo#}l`|_*Zg0M<ysk$EE6-ugq&AsX6j=_0a#Q`BQYzDwQdxDCa+B+2@`PRTHFsd@ zYuABt0IBY~4P|Lf2wkXwFKmoo9*^H$ki5G9t-ENSFjhU~M?zJm2~}Bjg*u7+%xzrT zHvIp-agJ?e8r#aM%l2K)cEpA<jSXehWy2h%!G_t^xvaWuEGOGvu**wPhL?Hfr8os9 z@+oksD!$_sBhKFOv(ve(x}2$ph>hSjoy)4rhK3fg5#mkfvg)$YnA-XjZtY87cBeLx z6aCTWlWy%4BhFg;+38$Xoo9#h5U~;5rgK?!+0f7;HbT7VTvlB+uBP~gM)&jDBE1@T z*2#3s(<?t>6s&HwS!d<fn%GV6M3s33F~&rvf^|b}*7Z?qsui(zFzvuj{E8s_o`Uis zr(FkPoGLeKr#iWLGm-Ol;qUqe0(V&h^)NPfS>a@UlT<&JnIDI@NLRXf#MN2m7!B_= zPR!~{1)G4%If3xjq1JqSp2ACgE^zn~J50V5A`X?<(<>n>&tV;x7mKx(Cz<f3ARS%; zq{9P!+RnK!Zx5`9<>EZ~Ueq!4;0yY6c@=cJ(~bl`KKiQ2z0R9F?%MF?Ev(H4q_Itu zw*}?#<EHu?d~^Nm<R&z*8p#7;t`=KSCKyN7izEtGn|hH|0Sm8T8t^t8Z9aGK7)A18 z19`g0<wbIT#xYHdIj^w#HgpyEU~lu{3FrJ}`{dN-R8l=puA>0=Zt@2=kGML^qy^SR z%!*$WY=!_Kuj@UcmFKW>UU8+HxG?K{t#w*>)wqgepYTm({F9&>LeaNqC~A0J7785R zvZYjP${M8UAoVd<@277zQ<n8hZ$7JkC0sn!?YDQN*A|ff=l6|9tvus-iD&uv%Be(? znnc<g#K0J{0C+KlV{`~!9&OQqD))98<OT94g?x+PlUT&}a{BKrX8E6lwxs{s#^ggZ z#m8qsp2Nd281^9Y+AthU<ZWRHpZABMnmmF2JDb^~)yAMOgpFIn5H{`$Lu;dR2n#m) zgdrx)4nv*P(oHn!;a|I$EDEp#i{pS^jt#s}*npH{122w67Nxl}W(=4~MzOUsX<MOn zos+E;wQn42(9QpHe_J=Dj$iKY;60q=dH8oE^C}pR6&HZw7^+hdD{TGB;`;coR;;km z=A)Z;J-<z>BD&8Te_Zq_4*!mEmVo`(QUY*w49z#JAPZum@B!0>-yjQOp6~&Ws6L3r z!UsI3d=Sfp4_K>qKx_~`;9cPtWkGBcKHxL810t3uo0wp)JjVy|yS&Ke#=lczoSuIk zz`ss0dB6t_WO^iZrMxPp?TR#?cWi{(I#1}<&I6h2r>0P~5j-spfR+5%(4kon<-&)# zwt0~*I65Z#i<|-O5JkY_!hMFIvCILS$7Bg0C0xK|ochr6EQqT_1#qpX0B&b81^A<I z0ULPYn7k~AEy4$UDmDOL2^X+kxPX5P7f`@g(GoyICgT9PQkMV@7Vg3RidzCWM!0}( z!UZJo;x#s^2zZBF>;Y5ixdcHx!GqD|+2`uX`(Pe`cvEHo-cde?cZCo5Q28J}5<cLs z$_Me8@B#l+K8Q2<b~gn$l5g(Pfb-;rvLC@nz9k%;mmTTvR!bfycwR`riv^M)uuASA zmz9I~Ms867X@0Gg0^A_4`T&2Fmra0~!Ue3`%h>?Y&AoM~FYhBb6cD${lRjW2zgrvC z{9w8nSuS^pfS&RrB*0a2qXB3rceQ|Gxs4o6u#Y@D0*-0yyn{Hqv6u#?RRE$dPe=iV z$XvjB;R4=cvIOu~Q2=!0hny7Pydp6ToF9FP!xkD7lYKnKZ5-N|y|8mWED-ubU*7~k zYEaP&HTa>S&_DQe<A9xwguT<}8wboU61F-&$vZ!VoxdedKa0yZ60uF5jsWwE9A766 z%9)6$NnuGj!ak|M4M233z5sMrK6<TN12+KCL+&sE7b?Fu5$kmTVv{HVK2ZL)2C}p~ zz~Z_{m-tBQsxK*2a-=uabAxg9WKZy*U+C>h?(Me=d_xc1ORkb=*Om314i@67hHmgh zLmyIQx%L|mw8?nT*EI_dIu`lJD}OEW6&(3_1#W;~7w7<+^|JbIusqaeMfo}+YII;) ze?|G(uETjS#C0<dw4d?hs12QOzuGRG`S@Fzv0XyqsA<7J%otq`lw&8M8ysweb};YL z1mJ9G;@)5QCQcxbvD~-`z@Hk6hI-cP3jf(x5G8z~CvgQCAS7U&s(`qOkHus-^O7i6 zKA%O&a9AY)6XXb+;7%ywj;7d_aL7r(`?B22d@YHul_WBp3Q1J%TOk4a7rBX=%8T^h z0xnT$2(1*$Dy1kz53Lijrjec>{)Q1($4QbgE{S)^g%a?BT<>1+*G7L^4aKKr4y5MO zD_gi=!@~!RA0@^jmM1LhPjUgxWfju>E&lij=%u2v)JNhUJcibj#ju}SMWfu!O;ZtH z?zR(XZ3)nN>ee$KF~61UOmnsv<<P3<`YzvIT6h5ChwI|0bsoU{_{KS_bDT3or*~US zZPHL^D353?wCetg<Ogz#lmHGEFVo9Gls4p_ATB8{?9e8Q$z!-BO2)W8$9>sYm!H>D z!-#4|<4DEdCSN%G>>YdHg_u5YJTrAGrSl_~Dfy$j6=;C7y|BS?hi6fZ1G(9f2fE8< z5b7ZkIBK&VjL1n3klTyYVWfMsT$GOX*Wi>|F%7xCk-TK$zmZL5H+q#)t5PG4&?A>; zEa?{dU!7eCcvQvOK7rkE=m9~HqU!~f>y@}kAVn;p2`EB@D4^)cW_OdUY;$)53ASKC zR8&+%u2&=~SOJ3|QWRrH6p5&aTuW3GtVBh{%Kv^-c4ki!^#1caZ+71KzWJuNlT%O! zJ-!vgoBT9<ALDJ;gGS_D-gZ4?yhX|3T|_^7_2yC|xM;ta2Aeg}D`HN-IQf}W`2|k; zIe~f4rJsEJ*dLb6t!l+#S_x#>sN}?uY{mAl)uj_3a+DGB_w2-vn4mqADW}B9=No`g zdf4GIxEP7v&l9E}nlRhpoKV?2UA;lGB6XiPmwC^n&D~}`i*8QNqUWmF@_aR0CTA9k zvzl)cDb91;=yS>FQ@VAO3m4{eGBB1Im@>AbT*GFmscR+TJmpMDfPx-(rqqfIl2g~? z$yiC1a?Bkw_!e|VayNP|{jB1ltHj0><5{lp2&KxL$m({ov_x_4<C|O+=lqj8%6$P! zMX`plSmzHD22!5*Sb{hYwM!`#1ubotl4ThrOSLo^E2(lEW`(QxY~i9MW=;q0rxYi5 z;(n=17eD9mS%iLQB210|(!Y@RH2PWA(&$)VCa;Im&tuGct{18y9+Q6V;QjE9PRYHH z>W8Bdqu4gxsW6q%2_j4@XC-XS)&>gs=cs`)Cz*0ejKgKd56l1(z|Dqo6_`y|wdE6G z9k2#?64(cHaVotGA*b;D4i#Pq|J5yo?@u?3LqIwjutPf)z5w&hJ-`;Ap}h)kc*<dB zt#_EafZiJ%rVOuH=P;w-(T5zS;}I2p2e2FX3P?{=cIb-LBS1Z{M+LK+!deQy8*!JV z@f%v_0!L*SMs|jhlWYax#yUM7@@tXj#ej>Z@y>>EK^M%ST~P;!b59HL(65ZqKo0b8 z0ctz&JAl>$A7T9L0rmk+Kz%1}uNtTawvugNTG!@w$=+2!eaFMwX)XR1=)Kobg_Au` zhg3Tcc4{7<^a_ECI&rylH?~kd%9|{QbaTZFM0I?&R$m{(U)T-(ushCTz$w5P-IaV5 zWKRJbfv3Bv@CvLqwB}p^T-8H`4+DZgEz0_v)<5XV8C^>%Oyjba!i#{)7UVA)sqz|4 z{xYx)*bcm}f(@#=BLJ7duUAR8D~(^#!A!ue)<{SFcRjELXaX{zqkqhSHpz62h^`3r zMZBYd0d08y+yj^x%d{^YK)WR1L?9E$0rK0X+F1hJ2RxIe?BoeMe--~fBK|sC{4;<t zz*#^E5C9tfhP_7kf1(W@<`4&v4s-*K1bS=p%0C_aKYbH`X#kx$t^lqCYBW8XtD1lT zn8OBX^VmN4GcYfe0I_rx{xbaAfbGC{TKJFf9|TPF*+JSoRuBJHU_0<8@D}i;CNIKF z^(?RtI1ckgKCnug@1|jVOvU(k8)K*#^T;<q9G&F`;3aLmJu37_-Vx(yb{D0$TGMOj zzz^*=K^|;Hz8ClwXzHNCNuO@*c&L?lA0hlZ-~jN8Hjev<ysWn6_fq6xbw_@?ge+TQ zXC<#j_&lJnlakl8ATQ~}Z>ni2e6|*T1?G*lz+T`hZ9e%3b3xl9(bmBDUg$4CDc}Px z?WOdF^hDbLBY}r|s_^`y4C8cQIB@1sDm<eP#w*YdIH`{cZ|aM_0<`akEnz<u{$78> z_%E;*u#Ps2DaT-Ea*UEw*!H7&SdA9m2>%l<^fTZK;2@B3EapX^>{z8Y8R6#x7XS&D z3a@kV_@iz5x{at7z6t&pfR}+!fQ*4?<AF+^`47z5Kml+guozektOuR}@&_RQ1C)L- z;?@AmkHdO%oC;rzu)g3WzydA&h~tqi&;(?kpu*3=q&X9~47dUqc_R8La48T6HUpmn zUjg5osN(5y?)qnHoO!^_z^%5p9sZ@_*A7O103HQ40nY$i1}k|3{BHxhfKPxuz*oRG z!0(#gmQ1vd8|4K$WT9-ph%6;9IvI5ZlmLT--mgG`O)mps1Atnf-mSu4fzDpwOW<ow ze>?nd0lR^ZwD5!Q56Qv!11<!v0dCAu^0C?20|Fa>bcA;RIt%@?HNAE4Zv>tOwgCHp zoFPhnHT>5Cn}C5sQ8pkOn4E`xny2)pAj|@yz)D~<Fi_}p&2L?=HdpC=tl7I;lYauN zx5-KWK45homr3`Ti1V>6T@zsiBK$W^zZ^Or0iOV00UZjk$1YIv>;FQ&82%@LPk_C^ z*TA>H55UjBuRz)<So?q>r>J=M!`}ex06qXd0h)kQu;D2hru5vWqCJ3Ipy*T;-UR=a z(-3wB`VpZJ?K=W<8t^&r4e;9trQhSURQ-(M*!uvBfLDOmhpYHepr#c&#|b+Dp(kAt z!X^RJTa(+;rSv`nmWgzvqjHdr%!71fGvjph-_w<?l0qfl2HpVd2EIQ-g_HkB;2_XR z(<fU;07nX&(p47nJjk+3cl=1S0Z;%8AF0A?;BNpv01~6HmW;++J-WI4`&Q&j;eP<w z49qwa`>wHuaq4)CyK@ZV*a_%gzy_cma8E?qz+)3zj=x>A`v?5fguQKNV{Zd|2=pHR zzu6y&_@jZbz_hU{{3`fg8_VN$)bw{CY|uC!Che7J@<PZa0VTk5XJM?K&GRSSW`w^A zybkm~OND<4e-m&3_zn0I7^%gRVN(!R4O|J-XyumfU6lK0;CH|=L4{w2x|$2z06cc4 zsuSt<BkU(2eGK;Hz^TB5F-m@%7PfH=uj6&&RUK1ZoC=(clm3(<74O}1kw2i3uBc2x z9|fiWB|tQJ)f#1o{}9k-GV(oHg^z=OJTMIiY2mjPWB&r&1FS4o;f?Tr4(tP(fS-Ui z+8rP#!G9_+2AHgc-wyu{VEa_;g{G?T&gWws0X+d1Z~~BXzLFQie*rKZr~o3sWtw~| z{0+bkpb^*${GiFrDVWEB0l=^+D*QtDJ%AU80<(Z?H2GrqmjY{m*R=39$h!%205X7H zzyPg0`S70s6azsmd@20Pfro$<z#8CLO`bN*Fxmm_fi6G~z%@<Dhr)j<a28Oih0lcl z3Sd64ObcHR|FgjBz#c8U?*-^fz?s0b3sgAyOMoyiR||g<{!PF$!1KTs;B8I*1^i9G zA3)CwRro;ohXSVng<AM|@LvdA1e5{+pi-0H2>)%sQs5~q{5AM@0FA&wExglo^dI0@ zpkTTRKL`F|pcI&`g-^T);Xnxx0;0ei;5uO5MN01$3w;*28+Z^{4}1h10A_iy9|ZP! zTh~9Y#4tvAxZavp^zH@ThTbk<H?X%v>77uDGcs^0a2jw1aCWJZ2jRaIs03zd;lq(u zM5Or<@CmR-OTV)Z=V_qUk8>Pwd>Pj7G9~W=*`>f_$j<Yt@c9Vq10MIM#+B|KvI*P| zJm^#5i^_4{1y+PGFNak4unM#Vuo#$d3HoFZeG-@l)B^RuHee6pd}WI_5_kl7u0n;6 z6!u;R8i1X^u>r#v9BA3TJ>CqVC*6!0C@WA9;(6a4;(3v79{jfew*d=*yM&%}YY=xY za1i))h6>*w###>i4EzCP#Ieo*cP4OtO(?zI5!5;G0pPk6eGOO<<GS_0XTaCML7*Mt z<pS{*;@jg%ed!8?UKi-NVk(^ccONF+L6I++4}1D0QH(tx96h|=qmZuv9tS#J+FZUI z>1+dPL><`6F5Sa_A>ZCg_~c5Q%K$I%0?-IdovGyA;O_zS0<yJm(%lBU3A_dD6mg|{ z7`hF>XTSqhnD>DdKpmkPGGOGD&GlDQbNQ!0#%#kl21vVH>8*v%I^Y?hzX9^Tmmx2g zrRrI;aLxc`0N((=0vSl#UDZ54lqSX1^P|Uq7I*=8S+gTuDg0LfwSUv@7KERH@KL~6 z;Jj+CCtV@*uf76v2yluP??~{Gz?r~Qp!1cf@*VJ3T!r}@P`CPEOH_kA0yBU)z_q|! zz<CYUj%$?OzvdXmf~%1~;JvF=_-P3L0QjO6c_;Xf0FDHX0{UOg^`u*IE%F1b0iFZ4 z0^5Kcz<a>^z?Z-`zyaVl;N9z5kAJv$?GUd6Fj0%&elGe4a5PW@TnF4cSIGz8fH@VI z4rJVjxf=NOCXAz-G4I}n{&G9^G{E)16TsbfVqF1#0DcDsEi#Oofn~s_KwvTY3UCPM z@o$w*IqY8ogn_NVcHqq$czUaWts?$ih_`gHidXeN>i;Op@f(nia&!hx0NlWi|Djw| zj=NeYM?Yb28ZZ|)`Bu~`>@B`6)$R?z0$>raMA)wbo&uf+wu<!Zb_-!|$O710kZRYi zR{_1vz{|jKhtZ!bWHMjUQ5}^4<@0%+Y`O#M{z9zr$WyMUgWjTT?_Q+h9fW>2==TJM z+^oWPA^x|(k3hSHD*PnqPXHzX(*W;$p5_=)_tH^Y=4*XNx?55Ag?D2vT7q?9i54!x zo&~l6MYV>JbziFd=>I6WbWwyQfE)kA<5RrLfI6Uq7Jn<`yMWz56VUda!|V6G7w012 zhkLn>bZ+p5mco}}J_E)87T^K=z&fCQsnYWyjpaZCuuDsC#4^+;a4`^HmKr`5I2)Lt zh1bFFUXH#1EC3=8VJ>?F^9V5JQKk1R^xj<7Jp6NneF5wTzSr#j2wPnr#25iw532BE zRv5<9D-GivU~V1uV(YM%TF1W@PhX0^WHa_pn^W~GpgSA5Qp9Vs3V8+|1nO7)Jv#-k zGYU8l@B*(rj(ywXO1=<bi-3Ov_W(<Qrzo$$<`qh>5&o}%Z-GCw@C@W@5HJ`xd8G<> zA&o)6iNG+R5E!AQOL<=o>{yGv-jloxh3l039fa=z_5%BX?}6XfD*4NZd(vwD{o+5K zR^g{1tRA@kDgKFH>25{XLSPZ_2(SvMTdm~#;Q!|uo`?H^`gPpK@b&1IsMlhk3b<;c zs%x3HU)1?Vt=`L@z}ya81>6YS{)DoBi?Cm)*}qM*OJAhU11{gBK4$-S?B5GGH(-qe zIs+LS_?O!I!)DG#{*`u0hrZDMy_Sye|B=pkVOQGgxry6r&CXTOpR<8~&zwGSE**W0 z{Qz*Vm3SnhkF?9rj7ztF6R&^yeQfDgppNU-sLxo_N21SI+g#okVXn3O1Jt>|u(kX{ z)Y4HrC%Czme`H#^2kOyw_3HDt(lylcFW1&S$3NRE9fb`63ZCO%wUv%O-+C%g2#k4N zeX>-3uT*}5^l<w0DNpI>JD&7C&dU*Z-WC;3_GH)xT6hAwHNZSz{tNsQinT9djK0Lb zNJw87q|dy_k4?%iP3rNlu*IjZAWC<Iuuow>1HS<6UR3hQwsfSUPZAyg4!+1gO(@-L z=w1ih4BYw>|K1vX1C73v_AjlT<_JBK-}{pK&Y5)dk+m*}cf`y5^JDaRwE<du`h1wo z)A6Fts1B$t=<_1<H5OSH^6R+tc>wvT9O>xeT4lgxuVViWRKo^+Wo4X*FWvfARC@hH zdiFRn{i4^5<R_&5D*cx1MulDaG!T6yW~#7Hp9K25cBMV~uF=<k{05M8GM$#}Z4&nS zYxep>*Yzs@5Kc?+q@(XD-SjH|!VTqrlgOWRC0luY$$FBmpJ+!4t8XEEvMrpx&vN|h z{2MLw?H1|SCsy9z-_xKxzS_V)!Xe!$+YIA$pb(f0&{tD_+ID!oB49}?dRtlvr!REe z1Ju63ztkb!PLU^St6Q}C&EA3f+@ZeeARWEK`=+<~o3ZJ|*)@Q<6Mo>~o&2Te^oDBb zZWHqKcln#HrK8sh_us|eQ%o-mmQD}L)57Upy7cnf{N4QRxzf!x_&uVHPEx|!1-QDR zPjuxEz)JTk@Tb9FSl0)rXoK-0;+2?~+uQRuOwoO4ML-Sk0noc6e^WstV04BIXz0w- zp(l-N0aK($56(7aKz5jP>D@;%-HLXI*G{E>uzhO!_uJCn2Skx}9pG*yeR^R|o5Q3} z>7JR6bvT{B$EZ=H+p4}zPA{vW_!C8Z=^jq!<&pW9`IK%I<ZIH^3vHy^^B3``e(q|= zZ)T-;Dbb50^!r$(yjIAidtKCPqo^P0s6OfSC{%BCT~s&=>!|8gItrtE_egh37hccv zG<zhYdv8caY0VSuAYE2ljH9;dEfvyDhu><e-Zvo~y;kBF2fv4%ULPSH-Th6keW(}x zlKP>ns|KyU=w7aiffu3katHoiNz#{&-c(92S)jV91@3B}+V`cSS0;=A#-{Q2BS=@A z#vhE7@ueew1?*hXp1;_U<w?|KiB_Mlnfx^Xt;s2`^!m}~y7H&+>B)F~9KVV1x4No_ z=ShCACZ}74jsZ?G_+!=5)foISC2X6Ga~=FXw^z|e`XN77d!BcCSrXj=y-e$0q)$%~ zMbrMbc%*-I8h<ROQL8`sluTV3e<Vh_LewcefF>Url8zo7UDB4{{7%oWY!d0pr&i?i zFuJ}=)0d8(VWDShWPE!(3O}!f@Xc*`U!=6CobquC=}1QPBA@xJ5P6f&irMvQT9ID@ z*`*Ht_~~O>zmGb3S>!_l@`(ZI?)(e6d;s7WA(xJB;-_|$apaBq(p~o#a(N5>Fd>(Y z?x?4_oFnQ=J}^pg_5N|P(6fiP?26~`JGI*yyvtN1c^k&(B{`o;RwOyE%FC~n+{t*S z+a%{x@$~;l&bv(0J(BYwUb94Uz7*_Aa^4l1Y9;4Y;kr+9UbK>jB<E9AG|BnUfAM3d z;C$+AO!5rIpZ-O1KGYizN#33DwHK!gegxy|le`CypX5CmuTSzL8UH%TdoljLC3$bg zjS|U^VzkyHc^@t>mAtQ^yS9dQ>muX*ZTx5(KgPygHh!#)|HH-y7}}(Q*8h%P`jISu z8p=;4C=_@8w?X|=j-wjS#BZI(N8xuA%9qCC_hk>VtWVnO!FFH`nm%0=Uz?O4!Ct1I z=Vuju$HSgO*rP*uk!GJZn`1Tk=eGF!@$34^X-1hm!#HG<7o$KvE&g~kafxQXgH}PL z-_yoj;DwtU=3s-Dhu#nr1>Y(--K}2uw8P|YR_tN~Xoi2yVJ=PM{Bryr@W}N07}tU~ zY5XSegW#s%3&Crs|D^H!(GwIk-gMI~@=FhC7CtYZ)ab&VsVv#7INdGY@fpRRr~JO8 z_!jW_TKqS_$G)KWTj1$he7ckVaZUaK_^%rO1U#tmz2Nt1{A=*VT6*76di9F`1fH*P zdYT|Z<7t@Enx0cU9lTNF9l@(Ko&jE=@t)w(XBDTr`Uh!p7x-zKoZhN5NXzeuG^J|% zWbk=f{2}0OjTg|0tJyo9^81S7qxclf9QCgv(tpokUTg6F;<d?xRDQ^(3;9f&yvD}A z>6prIw#o0Z@o#PV_u1qtY<w+v!^aLYSM={!z%xE|m@b3!cd0(W|10D_ko+@;IZMbp zV@X;7excyKz?;Cmg1f*=K6jW)1V4qAu)Pj5A^0Tl8t|_L_k&0GIm~Ybr&kh}eBm%J z5&U}a2Jkf^KZ_~-uN<Z`o%6@RYrk`teTAHMIQ8E<%&SFwdJk{W4-RvL;GdB`_+-JG zD1QeWW>3NC`B@kETf$xk8t6Yc%-e*VcJ#I2RL{iS;6=YU%$ShVvz`s$g@V(Q7#Y8! z{KB3^yUrh-tiEZ!n*qMyH;4JY(7y~k`n$sn2!1<wBly{ZuLO7h;V{btf0gnBzFY9m zX;=2AYR?YXBGiJ<5xg(B`;f!DK=9+h7aUUMJ>5yWU8mU~coBGETc`QBD6bd1$>}t2 zlk+3RZ|5|h7km+&z}q{`jlzDNlTIQ|bCuxFI_YT(r`c85d!0_tot)-PLcW{Q@9Z=e z%Jy;6>D*~<7xvrHDYvWB%x=rM3*2>t(>z7k%K|Uy=`{C<_#?rKj)Xm-e?EBAQBHHT zuvZ0M*w<;kDD-az&*<kg2MYO8lJ|F-3)*r1BzVI>r#V5S_Zp>tg447*asD27O^!3U zzWhq*4{@4z3GRfQCh!LY??+oS^oOpZKMbYQ?@*^XPRNUGJWTPy119J6#8}DcPV*6w zpMSTbJAIud^%LS7!0Sgl&3A?TJ+e2}X`U|1vlqXO6P@NaVmvjqqdNzk=2ThVNXI?Z zY3>vH1HfG+s4pSUH)%a|n!QB*o<n@L(>zk-&yU{>zteoLr>Jk@T6yVHEg9E1&C5jo z)`Bm%&S}mU`JtzTT=Sjg-J<-jgV%#^J%aNODE|FUvqt3SE6OkIcNg{@*y1jzb((P@ z??(Iqr}>6h@9F6ymzJN?!E3-r2|gLT5&X(D&gm@%^=qBx5>dZ#k{@uIorV5<@TLRG z-g5Ag4Nfydq`wY){Uy%idh!hE&r|$GaNkXezXo1;yW%^*pT0}+_rNFLtT<iaDO#a8 zoz4m$Q~X=-&8rmu5q$m=ivLdeS*>_mx@uLacn9!R3B|jC_tVPL8+_jNiXQ`Br}5*# zO|86x!3Sx42>4iy4+AgJ_z3VCjgJFgpmDnDRHyMN;Po26n2tC%DDJ29H6En&wEV`w zM`-Oan@-Ler;}lKjn4!B@kYgOrIVw^7lE(T_!97&G`<WxtntUd$7}ovaJR<kCGb5o zPFIw^*UIw>c!S2@0AH)|cfc2G{C)5XHBMJ=&d~Um9q8^8#lHhT`%cB_^+bNHe;xv_ zSfqG5_AB>myfgU8TL0|<e!14)`+~2(L-BurAFb)riT;;`io3yGn*BWRMlC<5gRfq! zIGy$vXnZ_f0nqql@C=P#0RE1~J>Unl@l^qSpT_BG!6c2(1Yh~6;#Yuwrj562JJNq! z6~76*MC0@#=R%GD+qVCEkjnF#l0QcAw<uoMk^T#!_>)v$8s7-sv{mtE$=-{KzX-nN zRmESW`qA{?Ap07p_c+&Td>8njZHj+D<<a;j;5Ax)=&c?Zn*3{9d4IO?^iHX~hm8-g z@hlrZ1H9;<)1;F=&EIrBDtud|e;(uwZz(<vyk6sU9;?wfJqiA>#!KnyzsAeKn=~Gz z{AlT23hvVQOj~}h1Ml*FYI}V8ZfgBc*{%2u&>yYwTflQPPOnEe{lAJY1|Otx>JJT? z{u0P*G=4w$#aj9ggZJ0uD{c8tQ<U-bkgqsPUT^4byxb}EdWY^vpS~O<uV2u!<ezp@ z*MHKCUdGp*)b$IJ(*+cH{mC%88Qp2&E|L028H0$w=`fGSPj}>(KI~TVvD0iL_!#Z# zJnb>cI#YW)%;SVSVUu5D<9E@2dm0_=dI9M#waGWpf2DRi%sbP#{1uy=-qKsN*=bG` z@%P*0^d{cAXPoT3K=Lly)p)wvHc;cFp9@~^;nyd+8GVfL;0x*;<_RLc58V9}&NFR9 z`RFSDc8B?lkYBIaa{&*K{v!@{eWZJvF2<%F>iU`s_BYtle~JF<^@PKGTiBylm)A8o z&F=*Ng8rlMhQk~v_-~Xx>TjXo?X>^SkiBDVJO{kyO@7`Z{ZS+r*OR&#eU0<M8&){X z^M%|G-uQ;%l{R~GZG0iw->B+ixlO*&#<$scBY6Eg4)b3k{`WR{n+%+X(Eo-Qygu7! zq{@5Q_#H>2@_#|z__o7*&*1il+w>=c7w&MF1BASk<d5?6F7YsU%^HU}Tky+l@oxdI zM}P5){`#OzzTU=PCoZn9W}rX3Ws`qK>8*2^D-3S$XYiuO)OhTp{db7;PtrJf$Izd* zRe!qJrXR8K;hoj>>h4BY<8sIyTK~AkrvHGAuLf^;&tdjAczVy<<R9AjUT`<YXO7T6 zK>Q<z`HSGBRQG|yoF;e&inLjc=RV-kjZU+tsPE&!OV;3gBjl%bPfhPE{Fy4Qmr{AA zgV(&T?EAspD;?&i!roQj(=`3tZ1(o`N##pz^2coaIU9cme-7>B*VCv!e`S;ZN%?!) zY2Igu@}oazeC#lv75oTW|2_`9>Awy(f02B!O<ri@=YzXozgXy(+T_=Q7rm**!)-SC za`5^O9p*_wzS1VIxA8Y^d@q&fU5D9D%%|Uj*KKf^FAIBzZ2H|Xe>S4MP8ITgJyPYl z;0;eY%w<A88ocCv)gOz%i*`7Z?fsB#yiJF^=^ZuS2W|G}*!V(9?=4k75831!wE3RK z_sf+3Z4UETp}z~f=1Dc4zoGo?RD7EDFBY=*i_Lxpwg5G-cZSeE9^Bo)uQw7OqHPgK zf3%Gk+qeb3bh9(rA1lF|K2-K=deV8?VIC#;omzYsu#EIkzq0?$w9VgZDZiM%d_w*z z_%cyH-P-gqc9Old4t9Nk<llnVdDZ;mI5O2<Z*cb${Q4m2|I;QP2EJeezn;nJ6MPTm zH*PP(r~r3iez{J_<F@!W+W0i|(>iT_yT>M9W#g}bH#YMBw~+o$oBRtKPwR#J=<_>x zRGS|Mk$k_?9AxnP4+F15|4A2edUJ_^@?9kO#o#qNRsXD@_}YA4O?;<XZ*T6EnxA`m z@&6~D#Pp9e9=FM#v+)mUf9aL|y|3|(P5zyYKa2h>-_%9vx9OcK??JpljmH7K`TtL4 z`<-ahF95GY|NX5S*B?dtSPx`>Js;eK^TlA%zskV}>h%Hc#(Z~-(7&4Om#XsIVoR^K zH~)X{LSb(?_{@!JKHmghzfJX*ZQu`kWO{v!-IU+ARC-^47i;<X(Uu++B)UV@M_=#- zo1Erc!3Q0s^l7O*8@v(anIz;Tnw;#-vhn$(zf<MscAI=Tc)ix&o}l!xKRi?L#Tf4u zTK->xycYR=SIFNb{;1mTe+izUtsmcO>A8S(tgm%wZ<_X~KKp}5wf*Ud;0;>;7;0OO z$JqGAWKSCpWj6Wc8mIbO4nAEg&r>8XRrA#g;29|YS;F4i;I79V<~M@xvDyDq<1V0g zU&OED{|_SlEbU+Hq(2fos?A>)+vH*J1*pGFA)g8UfHr^6x9Q(&<4@T53pW0?jeiDS zhxt9*;OQN($=lo3t3Kd`TK$~_UiYRmxjq%x^v?z_!ug)=8X@^qn>+yC^cesDA<5}e zAoBi<?nXyrCZ+eG>W^1adgyNzg5O2<);i7Ag0HgK-)7^VgS)VQ$QSziZE{n)<$?Gy zHlAhUhBuaoCo0RzGQEanoi%cjHGbUWV#_jo{+Pc!5Ks7HRw871gORX54h>(#Di20V zJweNth{WQSr?SfMMnch`KjHUf=4HDJT2`{k0^xw=iN!qCmOq?`RU2h7PsnfiDnp@a zMA4W9%|wc7%<rvC1d&7Tfr8Iph3q6La_R9V0yF(q)TU#_1GD`U76?-j$4ofSLQ%>m zMiYTZIBuX^aet&T0Z}v-DGwtP@LpOON%%dna^Vex%dH5HfP6+mRy<K1^c&^=M8aQ{ zu$Xpc)Duf&W+kIqrKnTXUChsveM%6Pwv2c%l9=iD8e#GzshfG+Xn-<LWssZKa$sbR zACiYZS$X;Rn?rxH+(YQ^Q2LvlOMgfqn?%_Kq~xYQS@b8HqLW}Kg=OUuAIkpZ&>yle zbSRTB&NRtHE~)2|2^NJ(b6KkHp{QMtZ*W;4NL9z$B8--&K#Ky6L@4SD#2~|8e-*k^ z+^7n9g29LvVO7jC*cYJ4WpVVP7^#LzV~NNtFKcp-FBk~>nYY|uMJ?s`&#)4a8UC<U zigusjPZ%LjYzEbk6|XGyS49nPh2J~F^2HNYFc1nP;+EGF^jgtK+{$WQW&r4~==taj ze(s6+(b_Spe`JKRDjJqLpB0YyAoeHF+2Z~f?0Mpe7Q&6>NQx&s3BOTV83_8U%4ifJ z+?oiQ<&8HFNYO)o^M`%OJa~hCPncUpw=TB=Wmeel_o2I$#r%HDTj7Zz8=SBT6JGqG zeEP~fmdEE~`89l%(O|$!mRg`R0mLg~ejc9}Lsg9rojg|Q6$z15Zv_1yoG>aAW%*XT z)Czf`XrqL;!ty4nES7DqT;>S`$sSrH=1)|{!YTDfGm9sd99*fQaKeN7%?!k2p3H2~ zs+ctbGtv9d2Rx`Jzc)xdA|+zXABte2@FaN59BzDwLE|fg$wG7?R4#RkFlxM6kKr-1 zvQzAa{IPOBkK`A%Wd+dat>!ExHZ=nqJ8?hi(TmQO5KYEfOQbkdYZlgs!N@G?R=m^e z#NIyxRAbTV=Ao5g%qkS@@m^XPh>6DK4Oo?ECNNkrg%X>i4N;=f88Lqu#uADvip+Cj zv393!l88h_Ir6m5BT_<xh-fT-9<SFQO{5GzD2i?d!<Ii94`3#@;xR9a5f?)y5leVV zgE9*h9?YOAB@#I(;4M`ah+)V^BT=m*iXN4NRjFvw=;GpO)|ux`7+E}S;snde%*!jt z5h-~i!Jvmt&GG6`X(TA(<qEMMwKfx7-4mC6bf}DoVX24b*~2lDQOT+IV**9i;t32O z)|*6>{N{CKl~yPG(qutuuQPbZFOSorCEEo*VhFg6M9dS82V_;TrWCU5lop>ANL0{F zW5fexLK{;SDs7f0<})gzK33C}=!KB`ecDWcwGX3TE)T8LEvhI=Q<j|9Eq~A-!aS16 z+8!%(G&5(YHvb!CewtIlm7!9av{_UX4U2A^dNmI~xhb&4By$U}<|UI1dn@#MKWt`m zbKUt6KpiVqBxZ%;<pB&~Usba}t@zk!m9|{;T+Ajd3*2taKsGmlg?%Vn%X6~WqMVbJ zLyK`v4&M}HXS?|iE#*0RIXV1??FI7kILqU*d^a=3Hw!~^IOBVTtSs@9!+(bGpP~FG zm;dDPpM3tqQpn<|XJzx~**u@w+)6gH;x2IWpKSh<!+(TqDF4ajKY9Eopa1X_+&l$0 zPr=PoaPt)0JfCi!PdCq}o9ENbtB02%n`b^dO9V30**w?TJlEMg*V#PR*=%!#A0988 z#}iea&#OG2Yvyy!e5RSl8z(O(m;Z=B7B4T42j;QV^Mz)9mNC;44@WWcC1~54Ii9sz z9!Xh*JhH)3E};D8lawW$Peo&?51|YVVH-XY3>j+7EK3?>``*ErPW_$`C?+1?U~FzY zY!AmgV($PN4q{^yF2@Es!nVm|VlZ~Haj;nd%s=7EU{Flcm^O#7y&>fS$l^Ow`a?mi zj?q1Y5jOBx@hF^CRzAhbC(61A>mXUIs?a;IdrZ(g&CV)kP8xpBXlwL@Q8=vdlZ*7H zoF9CKHEP;~;pdDSnJU4|gq@jX(TQO6SYd7Ks7Z!3X8gnv!^c|_&pdPT=whpQ_=xeN zEq(hQ@`n&F7%25x-gqTD*noQz)lpip`F0IeSXek_{J0S#t?bMk6`N|6P9xT=7|rI` zUd+-d+egsuOYDSUSM~x#ouQe`q-hItF`pNVSvbZ;LZwOplSY&_;bP0f_n+*<Wcf-h zS_Rn7P$==O8O=cQ6r@{1(|SWuJ%p8~*~vtlyvo?z8E0i;OED{eMg4~#2$HqIH`J^? z#}%JrsUv6cIV0)7S<IqaR#kp(CS^J5wGtJT;Tf5wRjee~2Fn_xg!z(3vvxU>u4aXk zeV(m=GQ(v-50*j_i*p8~UfQoA5r255Dk)}&va(=hyrNm*c~{^E!FU2WkEPT-&kz>H zFw(Oh3Jr@ovQ3|wg>|7Q%PO@4j>HzV1rt+q(L%>ILNOn2%1~Uakt`}!>JaU1Tgj}q z5~rIG+ji?3SfG&`l}3p53(2st^2P#D9E+NpVl4-Fqtz`Y$!jNh9_NXWzuF%UM{vfA zQ(#N=Mx%jMi0Cn8Y&q36(Q0hFtA|;BY(G3k8Jpa+MwDiGKdkTvqs>D^wPLsgu>q&e z0~IW_*Q?QCm0`*|T%VxLA=_5tU`dl)jBg0kSV!sDi6iXO&G@|HqJq71u(n`r%+A%N zfv_i5&FjVz$0y7WY!j=Z4q;Jw#cSi75jiZXvc<Vp%@=&5A$U1$hNMhxj4<=i&PWxH zO2e<Qunvn2Y&ckLR3%M|+7_z(A_~jAh@|y0Ij&hF%7MWy;#f31eSRFl^x6r;XR)HB zHdM121N*YFNYo$B9g@;9cp3dwes!V2C}Rzz+Y^^7^yXwo-Uz#LRYjXz-EOk(Xs9KZ z2FgyTlx>bfo~jl*4~-|3hv}!JkF;>`(^m?aei>yuwd`dmrVrDOo}n^zIfhj%`iw79 znUL36QW6WxW<$=aJQklHv|7V@CK?n)isHCpRME1=<IqmR;yVd#)#EcyXa?r?P}Ejc zJh2w*gAF1+%QRE6EE?=$8P_NGlvxKS0d~;k*9-Zw#VsbMPpVE2dY(Ay)4J1aWlQF$ zj9)pSQI!zu4e$E0U&sX=otC^U^u%~TT=cShfn+|>7FMK;G8TzZrz#Ic!n|zQ(NJ&F zHesog*Gw$yG+m)S;t`y8!#;h^MY*w4i6?mWl4HC&obXg7ONWyh@?#qrvi@YZDf7|r z(N*-0#IGlmha<2)x@cU{XsqZHNfroOm2tlh^Gvc^p*HAB9bJY^o#tBDcLen$-E!N- zD<<R#qzI{SVpbC!(>{x8J0F~u<$P*i2{6lrXzteMLnEbkSvXQBw>z{Z%MPY(3)!^G zI~;X4RuwIGa<!I<Jj$`1nkMbIX;DJvZS$Weh&-fL6IPpWgpEULVqI2hAMez<;Yf>F z6VpIh)T)@JP4;Z(sLm()PLua6vA?(2>73=8_mY+pL1s(iaWRgY4N8L=xusErM9P~D zdYY)%8c0_vQ)dym(#STadKOo0S#eS~Exa|v;=mSexgQIJXNpR-?A^859)OH!<2I#h z`xAVUY-WIZJvv-V+ey~T*jy+2j3|BT@j~__+kZxks@bAB&zfmX68r3tbhU}~+tfV- zpTVUSUIVIl2ET-AA6;rQinWT(&T_&v{FMP8U8PDLk}cF}ydr`YvDd6<JHByZ=OfF) z5kVaIScOo*Wp#*b^NVVjp0Qi<(Wc55u}>N7*wNylL!bZbI~F<DM|s6Gn+MqeD7kTG z)#8cLqKu7%KST?8OB<8`hBEe5DO+ibRd$}VS2eE*e&ja16{r$j!&8b%)B|`|Oa40m zskg9YNt%tZoiOcA(b~EhSx~xYK;1MEN!bI7LC;s3vS?+(KL4`AA-Y8n8-~=4p_+Wl zA`!Y~ZrgB*E1=pjn_ug;9kVTqx^paH+XvI0CY0RLFaxFbsLi(nY^nFQu<wYsb|5!0 z<JBP?dGX7xLgTkW`q)T}8ku4GU*Yf(;|3=@<${%mD>GSN9USl(j8%Bz6-K77It+XK zHxc6!x!UW*f-L3_k{<U&g9%Cy>koM|%Omixi}{)CT193o!Ukuize4=mwZa!uj7JsM z_A}MLZH>%JyilX4ER|S<Wz7=`cnwN}C(A8kMmI8P9i{&PW%~T3l~_z-m<KV}2+DRc zQdC+R^UsuwZNi106<h?P`Gi+k`n!&9384EW=^k-<w*$RZMZ1m9koUOLJs9nT9=-FS zB8}e@A)Q0~W@&o#E{J*18`y##J)`#1p+gbUqjyBmm+R<jVoptuFahW&?9sa;E=S;k zP6m5hM4Hf{+XCqxleR*S-YL<kn_*1spwgA)xEMGj(xrDzOz+FTm?qP0BQOK_Q|Qq< zD4P25FU9HUlB0Wz+lx5#Zi<@zhB4JhEeGB3aE;KTXL;$J6}zC<yDir{O4FM!>{B{) zuSAoJ*S&Ny-Rm_yddG$9Si>kxS9%#j_jXN>-hEMWf+60d!JYK~N7JKwq@vI(K1J4= zVaQuA@6+_?-s2ZNX@+*2V={ja8LD5=Jz$N{dtbYs%q4yw*YxPwhNr93jDcD?q`hY} zJ$mOx<5g)!!&%MsUNPuN4c-^%*@?Apq$Op#-dhI$f*<M8GZ^bz(fi2Y>5?8j%kgw8 zdV4fIx(BZwdM9amF7Zpx2BZr;de-A>=rxHjX^+}uk!FwH0rLL#G()?+EIB@Y)%4i2 zAPs58V%2O(y|!sekM41;eKXA{(d@azZ~HW!KC?&nPVGoD)@t^oUKe4{Ed|gUs??Z_ z&?`-iJ#s^#$BipJa>v{C-bphG9#A3Dmu=GvSG6@(Y85SIg*Lsu%i9`9dz<Txx0R#7 zbQnv|OVuMxvDw>ok;51<zj^*jZF+sabQ)7L6_+x)Urnn9qkd{SdsCBLkAB-|dWqiY dY(k)WPU(Fha{i;aMYoq2mTrvK?q`zr{ttg0n}PrU literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/utils/.libs/recins b/devspec.en_US/project/recutils/utils/.libs/recins new file mode 100755 index 0000000000000000000000000000000000000000..9058e86adbc7dc012986315b259d3163821a8cca GIT binary patch literal 423912 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û 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�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 F`#(MaIG_Lk literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/utils/.libs/recsel b/devspec.en_US/project/recutils/utils/.libs/recsel new file mode 100755 index 0000000000000000000000000000000000000000..2ddb76bd433a231d57d7e35aff1b4a0220d2701e GIT binary patch literal 429124 zcwWrCd3Y367C2g!R6+qQ)nFq5qeiFIpivVEl9o6|$buTNAq!hHL`dvpLK2f|2pU4L zyM?kSjf(521LMZ1GsBD;QCvC+B;dFJE}*y|;#f@(gG&;^((jyetGYXl^Ly|8^S%dP z<<_aYo$a1`?zy+BSLWpB@;uL(|6;gU4xzx`1Th`blzZaoc{-QG4d;@%i#a<NPcU39 zPzJ6fsDM`-JQLuGg{u(Y!c~HZ*O>sHY2@+7MgO2KUe5hIhZol8tStZ4BRuzNbG(RG zH8hw7nej$`3?zpk|1jj?)eA6Q@kSqbxu6jj^o>_Gz}XRb&hO>LPp;*;CoS<JUMWx! zFEf7@<a59CFP?SJ&4&C){PLkMyiEG8sII*2it5FeRae%y8!vCDz5Gg+XEpNkW)@L< zF-Dt79Lu+HjCYvdqx|&KD>-jAyfW?n<9E!MxOCn<SKK`v^4vx{!{PeZ@JoQMl#9B> ze`Ti$@uJ`nvo_~E@3UN=vq=<3wp=ATlddakx0Y~OG3_T~ZdfQ@WOpsh)xKSRrMf=e zcA-0hwxw`28u!cLx)ZJ@xK_Zm(s+J1Tt4pffA_$(8m={P-3ylrmj+iWTo1za5M1lv zdN`uaqi{V2*OLbP6kHqNdd`4fFw(!l^%7h!N7UT}*DG+n3RfFkuN%*|!1Wef@4)pg zT<vgmM%3F1*EYDi;Od6!KX82j*G{<Z-+g4&i2MHa!Z+T3$`@a9VEHw&a8yt)de-r? zn&{L1d2U5fnRUk_doTIxWh?7nzVSQ%#B<grzF4wz@`$*Wr?v#YSb6aq`7y8jwSUZ{ zt^H#Tef-m?%a-iB;q&XB?yY$|z5V3hzF6M1=;p)LdvE%~9p5>|ZNF*SAGX}{!M}?9 z73aR89UYZ-*}<<Lylcm~We@l+c%km0kGUH^80ozGwMRETd93sMJ7T7P)jYnfb=(6V zRP=xI)2&-8xR2wP-F4-QkN0K2k~{lVamTsm{J7|n|4y!L*mv!-BlbS}mlMGQ^B(^& zW%uMM=fC+=VC1Z0S!Ye?eCNIHbA=hJvda(NuN=DYr3c>sPvfbwKF7E_)-36%`sVQi zXI^A2&AYGYmWr=_4ou7W^zb|X@L#rEnzm&1xO1vMxo+F{!?~sB?0YKXft`(W8~<7U zWW$@^J=o;g`9|i-v$L08b6v^1pMHM);RU09=<ljj8=ijt#g_|@%$_{*k~4?dZhU{k zFZ-{tKGD-!w)c*?iQj!zTTroJ-K26`p3X)6`)+vnehgfP;)lY^!e)x#`BCN16^Fue zM}*<gaAicmm>(BA6h0#i(wJ<B8=Ai<s=uCLL*WHc{U3|M|Kce4hp6_)N8xuM3=*6d zMgP{Q{*Fh%DN*>&ifaEv6#g+$<yQ+s;qRi_UlhgP+oI@M7X{m*>Q9Op3SShJzcwoW z`Y3$2M!}aw(bo`#e^V5FQ=<C&Ym|J>k7{pqRQ+91@;DUL-Xl?PM-;p=O8=gZ!uP(Y z{+^41Z-}bj5QXoODE|LBs{Uh9^&bp_1ouVZ`%x5ruSJ#rAquXDg71jp@5G4wB)CeV z`b&($_sb}_G74T71#gLJ@7gH-R7UBSEvo(nQT%x=O5gqy)xH)5pAl7lcT|2>6zq=b zKQD^kZ$|NNTa<kN9R-&~w2$NS_NexLj>69ph0nyO_A<gC$?Kaa{#+P^zdMS*!=v)w ziGUHmiBa;&4};X-;i&!|iW+|xMbY<a6g|07@bW15tSEeMj+RdtBse{ap1((x|1Apc zk1D@1D*umB`Lm<&xj%~jkx~2_2l~<46(`<E@F?y!;Lm=5Z#Li~z#r@Pf;i8BmxBDW zzK9c_GT`r^znxzQ;vWon3)Wv1FQ#%Rp9x$6;Foka_?ZNs&8g`3{~(B$8|90Do~(%c zQ-E*kK0(}L<WGVAdOs6Hy8(X*u=h}$QQpdxz)f~UeFgHZUkc)dM)_jUM?ds;%z$NR zf8pnXc(DP$5A?79Mi7U^FgPFZT^P|`9N=e<fIZND;h{K@@lWEug7)ixKbb~*k3-rD z?O$ZTnb3akmN>D�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� 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 literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/utils/.libs/recset b/devspec.en_US/project/recutils/utils/.libs/recset new file mode 100755 index 0000000000000000000000000000000000000000..da1d6425c57811d057d0b7bd3d13fad5f0e49ec7 GIT binary patch literal 423560 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%0D)j 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 literal 0 HcwPel00001 diff --git a/devspec.en_US/project/recutils/utils/Makefile b/devspec.en_US/project/recutils/utils/Makefile new file mode 100755 index 0000000..e22660a --- /dev/null +++ b/devspec.en_US/project/recutils/utils/Makefile @@ -0,0 +1,2083 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# utils/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# utils/ Makefile.am +# GNU rec + +# Copyright (C) 2009-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/recutils +pkgincludedir = $(includedir)/recutils +pkglibdir = $(libdir)/recutils +pkglibexecdir = $(libexecdir)/recutils +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +bin_PROGRAMS = recinf$(EXEEXT) recsel$(EXEEXT) recins$(EXEEXT) \ + recdel$(EXEEXT) recset$(EXEEXT) recfix$(EXEEXT) \ + recfmt$(EXEEXT) csv2rec$(EXEEXT) rec2csv$(EXEEXT) \ + $(am__EXEEXT_1) +#am__append_1 = $(LTLIBGCRYPT) +#am__append_2 = -fprofile-arcs -ftest-coverage +subdir = utils +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +#am__EXEEXT_1 = mdb2rec$(EXEEXT) +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am__objects_1 = recutl.$(OBJEXT) +am_csv2rec_OBJECTS = $(am__objects_1) csv2rec.$(OBJEXT) +csv2rec_OBJECTS = $(am_csv2rec_OBJECTS) +am__DEPENDENCIES_1 = +#am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) +am__DEPENDENCIES_3 = $(top_builddir)/lib/librecutils.la \ + $(top_builddir)/src/librec.la $(am__DEPENDENCIES_2) +csv2rec_DEPENDENCIES = $(am__DEPENDENCIES_3) \ + $(top_builddir)/libcsv/libcsv.la +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +am__v_lt_1 = +am__objects_2 = mdb2rec-recutl.$(OBJEXT) +am_mdb2rec_OBJECTS = $(am__objects_2) mdb2rec-mdb2rec.$(OBJEXT) +mdb2rec_OBJECTS = $(am_mdb2rec_OBJECTS) +mdb2rec_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) +mdb2rec_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(mdb2rec_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_rec2csv_OBJECTS = $(am__objects_1) rec2csv.$(OBJEXT) +rec2csv_OBJECTS = $(am_rec2csv_OBJECTS) +rec2csv_DEPENDENCIES = $(am__DEPENDENCIES_3) \ + $(top_builddir)/libcsv/libcsv.la +am_recdel_OBJECTS = $(am__objects_1) recdel.$(OBJEXT) +recdel_OBJECTS = $(am_recdel_OBJECTS) +recdel_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_recfix_OBJECTS = $(am__objects_1) recfix.$(OBJEXT) +recfix_OBJECTS = $(am_recfix_OBJECTS) +recfix_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_recfmt_OBJECTS = $(am__objects_1) recfmt.$(OBJEXT) +recfmt_OBJECTS = $(am_recfmt_OBJECTS) +recfmt_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_recinf_OBJECTS = $(am__objects_1) recinf.$(OBJEXT) +recinf_OBJECTS = $(am_recinf_OBJECTS) +recinf_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_recins_OBJECTS = $(am__objects_1) recins.$(OBJEXT) +recins_OBJECTS = $(am_recins_OBJECTS) +recins_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_recsel_OBJECTS = $(am__objects_1) recsel.$(OBJEXT) +recsel_OBJECTS = $(am_recsel_OBJECTS) +recsel_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_recset_OBJECTS = $(am__objects_1) recset.$(OBJEXT) +recset_OBJECTS = $(am_recset_OBJECTS) +recset_DEPENDENCIES = $(am__DEPENDENCIES_3) +AM_V_P = $(am__v_P_$(V)) +am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY)) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I. -I$(top_builddir)/src +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(csv2rec_SOURCES) $(mdb2rec_SOURCES) $(rec2csv_SOURCES) \ + $(recdel_SOURCES) $(recfix_SOURCES) $(recfmt_SOURCES) \ + $(recinf_SOURCES) $(recins_SOURCES) $(recsel_SOURCES) \ + $(recset_SOURCES) +DIST_SOURCES = $(csv2rec_SOURCES) $(mdb2rec_SOURCES) \ + $(rec2csv_SOURCES) $(recdel_SOURCES) $(recfix_SOURCES) \ + $(recfmt_SOURCES) $(recinf_SOURCES) $(recins_SOURCES) \ + $(recsel_SOURCES) $(recset_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing aclocal-1.15 +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = $${TAR-tar} +AM_DEFAULT_VERBOSITY = 1 +APPLE_UNIVERSAL_BUILD = 0 +AR = ar +ARFLAGS = cr +ASM_SYMBOL_PREFIX = "" +AUTOCONF = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoconf +AUTOHEADER = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing autoheader +AUTOMAKE = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing automake-1.15 +AWK = gawk +BASH_HEADERS = /usr/include/bash +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CA68 = +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CHECK_CFLAGS = +CHECK_LIBS = +CONFIG_INCLUDE = src/config.h +CPP = gcc -E +CPPFLAGS = +CURLLIBS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = false +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FGREP = /bin/grep -F +FLOAT_H = +FLOOR_LIBM = -lm +GETOPT_CDEFS_H = +GETOPT_H = +GETTEXT_MACRO_VERSION = 0.19 +GLIBC21 = yes +GLIB_CFLAGS = +GLIB_LIBS = +GMSGFMT = /usr/bin/msgfmt +GMSGFMT_015 = /usr/bin/msgfmt +GNULIB_ACOSF = 0 +GNULIB_ACOSL = 0 +GNULIB_ASINF = 0 +GNULIB_ASINL = 0 +GNULIB_ATAN2F = 0 +GNULIB_ATANF = 0 +GNULIB_ATANL = 0 +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CANONICALIZE_FILE_NAME = 1 +GNULIB_CBRT = 0 +GNULIB_CBRTF = 0 +GNULIB_CBRTL = 0 +GNULIB_CEIL = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHDIR = 1 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 1 +GNULIB_COPYSIGN = 0 +GNULIB_COPYSIGNF = 0 +GNULIB_COPYSIGNL = 0 +GNULIB_COSF = 0 +GNULIB_COSHF = 0 +GNULIB_COSL = 0 +GNULIB_CTIME = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP = 0 +GNULIB_DUP2 = 1 +GNULIB_DUP3 = 0 +GNULIB_DUPLOCALE = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 1 +GNULIB_EXP2 = 0 +GNULIB_EXP2F = 0 +GNULIB_EXP2L = 0 +GNULIB_EXPF = 0 +GNULIB_EXPL = 0 +GNULIB_EXPLICIT_BZERO = 0 +GNULIB_EXPM1 = 0 +GNULIB_EXPM1F = 0 +GNULIB_EXPM1L = 0 +GNULIB_FABSF = 0 +GNULIB_FABSL = 0 +GNULIB_FACCESSAT = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCHMODAT = 0 +GNULIB_FCHOWNAT = 0 +GNULIB_FCLOSE = 0 +GNULIB_FCNTL = 1 +GNULIB_FDATASYNC = 0 +GNULIB_FDOPEN = 0 +GNULIB_FFLUSH = 0 +GNULIB_FFS = 0 +GNULIB_FFSL = 0 +GNULIB_FFSLL = 0 +GNULIB_FGETC = 1 +GNULIB_FGETS = 1 +GNULIB_FLOCK = 1 +GNULIB_FLOOR = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FMA = 0 +GNULIB_FMAF = 0 +GNULIB_FMAL = 0 +GNULIB_FMOD = 0 +GNULIB_FMODF = 0 +GNULIB_FMODL = 0 +GNULIB_FOPEN = 0 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 1 +GNULIB_FPURGE = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREAD = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPF = 0 +GNULIB_FREXPL = 1 +GNULIB_FSCANF = 1 +GNULIB_FSEEK = 1 +GNULIB_FSEEKO = 1 +GNULIB_FSTAT = 1 +GNULIB_FSTATAT = 0 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 1 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FUTIMENS = 0 +GNULIB_FWRITE = 1 +GNULIB_GETC = 1 +GNULIB_GETCHAR = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 1 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETGROUPS = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 1 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETPASS = 1 +GNULIB_GETSUBOPT = 0 +GNULIB_GETTIMEOFDAY = 1 +GNULIB_GETUSERSHELL = 0 +GNULIB_GL_UNISTD_H_GETOPT = +GNULIB_GRANTPT = 0 +GNULIB_GROUP_MEMBER = 1 +GNULIB_HYPOT = 0 +GNULIB_HYPOTF = 0 +GNULIB_HYPOTL = 0 +GNULIB_ILOGB = 0 +GNULIB_ILOGBF = 0 +GNULIB_ILOGBL = 0 +GNULIB_IMAXABS = 0 +GNULIB_IMAXDIV = 0 +GNULIB_ISATTY = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_ISWBLANK = 0 +GNULIB_ISWCTYPE = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPF = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LINKAT = 0 +GNULIB_LOCALECONV = 1 +GNULIB_LOCALENAME = 0 +GNULIB_LOCALTIME = 0 +GNULIB_LOG = 0 +GNULIB_LOG10 = 0 +GNULIB_LOG10F = 0 +GNULIB_LOG10L = 0 +GNULIB_LOG1P = 0 +GNULIB_LOG1PF = 0 +GNULIB_LOG1PL = 0 +GNULIB_LOG2 = 0 +GNULIB_LOG2F = 0 +GNULIB_LOG2L = 0 +GNULIB_LOGB = 0 +GNULIB_LOGBF = 0 +GNULIB_LOGBL = 0 +GNULIB_LOGF = 0 +GNULIB_LOGL = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MBRLEN = 1 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MBTOWC = 1 +GNULIB_MEMCHR = 1 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDIRAT = 0 +GNULIB_MKDTEMP = 0 +GNULIB_MKFIFO = 0 +GNULIB_MKFIFOAT = 0 +GNULIB_MKNOD = 0 +GNULIB_MKNODAT = 0 +GNULIB_MKOSTEMP = 1 +GNULIB_MKOSTEMPS = 0 +GNULIB_MKSTEMP = 1 +GNULIB_MKSTEMPS = 0 +GNULIB_MKTIME = 1 +GNULIB_MODF = 0 +GNULIB_MODFF = 0 +GNULIB_MODFL = 0 +GNULIB_NANOSLEEP = 0 +GNULIB_NL_LANGINFO = 1 +GNULIB_NONBLOCKING = 0 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_OPENAT = 0 +GNULIB_OVERRIDES_STRUCT_STAT = 0 +GNULIB_OVERRIDES_WINT_T = 0 +GNULIB_PCLOSE = 0 +GNULIB_PERROR = 0 +GNULIB_PIPE = 0 +GNULIB_PIPE2 = 0 +GNULIB_POPEN = 0 +GNULIB_POSIX_OPENPT = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_POWF = 0 +GNULIB_PREAD = 0 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 1 +GNULIB_PTHREAD_SIGMASK = 0 +GNULIB_PTSNAME = 0 +GNULIB_PTSNAME_R = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_PWRITE = 0 +GNULIB_QSORT_R = 0 +GNULIB_RAISE = 1 +GNULIB_RANDOM = 0 +GNULIB_RANDOM_R = 1 +GNULIB_RAWMEMCHR = 1 +GNULIB_READ = 0 +GNULIB_READLINK = 1 +GNULIB_READLINKAT = 0 +GNULIB_REALLOCARRAY = 0 +GNULIB_REALLOC_POSIX = 1 +GNULIB_REALPATH = 1 +GNULIB_REMAINDER = 0 +GNULIB_REMAINDERF = 0 +GNULIB_REMAINDERL = 0 +GNULIB_REMOVE = 0 +GNULIB_RENAME = 1 +GNULIB_RENAMEAT = 0 +GNULIB_RINT = 0 +GNULIB_RINTF = 0 +GNULIB_RINTL = 0 +GNULIB_RMDIR = 1 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SCANF = 1 +GNULIB_SECURE_GETENV = 1 +GNULIB_SETENV = 1 +GNULIB_SETHOSTNAME = 0 +GNULIB_SETLOCALE = 0 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SINF = 0 +GNULIB_SINHF = 0 +GNULIB_SINL = 0 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 0 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_SQRTF = 0 +GNULIB_SQRTL = 0 +GNULIB_STAT = 1 +GNULIB_STDIO_H_NONBLOCKING = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 1 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 1 +GNULIB_STRERROR = 1 +GNULIB_STRERROR_R = 0 +GNULIB_STRFTIME = 0 +GNULIB_STRNCAT = 0 +GNULIB_STRNDUP = 0 +GNULIB_STRNLEN = 0 +GNULIB_STRPBRK = 0 +GNULIB_STRPTIME = 0 +GNULIB_STRSEP = 1 +GNULIB_STRSIGNAL = 0 +GNULIB_STRSTR = 0 +GNULIB_STRTOD = 0 +GNULIB_STRTOIMAX = 0 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRTOUMAX = 0 +GNULIB_STRVERSCMP = 1 +GNULIB_SYMLINK = 0 +GNULIB_SYMLINKAT = 0 +GNULIB_SYSTEM_POSIX = 0 +GNULIB_TANF = 0 +GNULIB_TANHF = 0 +GNULIB_TANL = 0 +GNULIB_TIMEGM = 1 +GNULIB_TIME_R = 1 +GNULIB_TIME_RZ = 1 +GNULIB_TMPFILE = 0 +GNULIB_TOWCTRANS = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCATE = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_TTYNAME_R = 0 +GNULIB_TZSET = 1 +GNULIB_UNISTD_H_NONBLOCKING = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNLINK = 0 +GNULIB_UNLINKAT = 0 +GNULIB_UNLOCKPT = 0 +GNULIB_UNSETENV = 1 +GNULIB_USLEEP = 0 +GNULIB_UTIMENSAT = 0 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 1 +GNULIB_VFSCANF = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSCANF = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WAITPID = 1 +GNULIB_WCPCPY = 0 +GNULIB_WCPNCPY = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSCASECMP = 0 +GNULIB_WCSCAT = 0 +GNULIB_WCSCHR = 0 +GNULIB_WCSCMP = 0 +GNULIB_WCSCOLL = 0 +GNULIB_WCSCPY = 0 +GNULIB_WCSCSPN = 0 +GNULIB_WCSDUP = 0 +GNULIB_WCSFTIME = 0 +GNULIB_WCSLEN = 0 +GNULIB_WCSNCASECMP = 0 +GNULIB_WCSNCAT = 0 +GNULIB_WCSNCMP = 0 +GNULIB_WCSNCPY = 0 +GNULIB_WCSNLEN = 0 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSPBRK = 0 +GNULIB_WCSRCHR = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCSSPN = 0 +GNULIB_WCSSTR = 0 +GNULIB_WCSTOK = 0 +GNULIB_WCSWIDTH = 0 +GNULIB_WCSXFRM = 0 +GNULIB_WCTOB = 1 +GNULIB_WCTOMB = 1 +GNULIB_WCTRANS = 0 +GNULIB_WCTYPE = 0 +GNULIB_WCWIDTH = 0 +GNULIB_WMEMCHR = 0 +GNULIB_WMEMCMP = 0 +GNULIB_WMEMCPY = 0 +GNULIB_WMEMMOVE = 0 +GNULIB_WMEMSET = 0 +GNULIB_WRITE = 0 +GNULIB__EXIT = 0 +GREP = /bin/grep +HAVE_ACOSF = 1 +HAVE_ACOSL = 1 +HAVE_ASINF = 1 +HAVE_ASINL = 1 +HAVE_ATAN2F = 1 +HAVE_ATANF = 1 +HAVE_ATANL = 1 +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_C99_STDINT_H = 1 +HAVE_CANONICALIZE_FILE_NAME = 1 +HAVE_CBRT = 1 +HAVE_CBRTF = 1 +HAVE_CBRTL = 1 +HAVE_CHOWN = 1 +HAVE_COPYSIGN = 1 +HAVE_COPYSIGNL = 1 +HAVE_COSF = 1 +HAVE_COSHF = 1 +HAVE_COSL = 1 +HAVE_CRTDEFS_H = 0 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_CBRTF = 1 +HAVE_DECL_CBRTL = 1 +HAVE_DECL_CEILF = 1 +HAVE_DECL_CEILL = 1 +HAVE_DECL_COPYSIGNF = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXP2 = 1 +HAVE_DECL_EXP2F = 1 +HAVE_DECL_EXP2L = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_EXPM1L = 1 +HAVE_DECL_FCHDIR = 1 +HAVE_DECL_FDATASYNC = 1 +HAVE_DECL_FLOORF = 1 +HAVE_DECL_FLOORL = 1 +HAVE_DECL_FPURGE = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_FSEEKO = 1 +HAVE_DECL_FTELLO = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETDOMAINNAME = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_GETPAGESIZE = 1 +HAVE_DECL_GETUSERSHELL = 1 +HAVE_DECL_IMAXABS = 1 +HAVE_DECL_IMAXDIV = 1 +HAVE_DECL_INITSTATE = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOCALTIME_R = 1 +HAVE_DECL_LOG10L = 1 +HAVE_DECL_LOG2 = 1 +HAVE_DECL_LOG2F = 1 +HAVE_DECL_LOG2L = 1 +HAVE_DECL_LOGB = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_REMAINDER = 1 +HAVE_DECL_REMAINDERL = 1 +HAVE_DECL_RINTF = 1 +HAVE_DECL_ROUND = 1 +HAVE_DECL_ROUNDF = 1 +HAVE_DECL_ROUNDL = 1 +HAVE_DECL_SETENV = 1 +HAVE_DECL_SETHOSTNAME = 1 +HAVE_DECL_SETSTATE = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR_R = 1 +HAVE_DECL_STRNCASECMP = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOIMAX = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_STRTOUMAX = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCATE = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_TRUNCL = 1 +HAVE_DECL_TTYNAME_R = 1 +HAVE_DECL_UNSETENV = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_DUP3 = 1 +HAVE_DUPLOCALE = 1 +HAVE_EUIDACCESS = 1 +HAVE_EXPF = 1 +HAVE_EXPL = 1 +HAVE_EXPLICIT_BZERO = 1 +HAVE_EXPM1 = 1 +HAVE_EXPM1F = 1 +HAVE_FABSF = 1 +HAVE_FABSL = 1 +HAVE_FACCESSAT = 1 +HAVE_FCHDIR = 1 +HAVE_FCHMODAT = 1 +HAVE_FCHOWNAT = 1 +HAVE_FCNTL = 1 +HAVE_FDATASYNC = 1 +HAVE_FEATURES_H = 1 +HAVE_FFS = 1 +HAVE_FFSL = 1 +HAVE_FFSLL = 1 +HAVE_FLOCK = 1 +HAVE_FMA = 1 +HAVE_FMAF = 1 +HAVE_FMAL = 1 +HAVE_FMODF = 1 +HAVE_FMODL = 1 +HAVE_FREELOCALE = 1 +HAVE_FREXPF = 1 +HAVE_FSEEKO = 1 +HAVE_FSTATAT = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_FUTIMENS = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETGROUPS = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETLOGIN = 1 +HAVE_GETOPT_H = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETPASS = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETTIMEOFDAY = 1 +HAVE_GRANTPT = 1 +HAVE_GROUP_MEMBER = 1 +HAVE_HYPOTF = 1 +HAVE_HYPOTL = 1 +HAVE_ILOGB = 1 +HAVE_ILOGBF = 1 +HAVE_ILOGBL = 1 +HAVE_IMAXDIV_T = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWBLANK = 1 +HAVE_ISWCNTRL = 1 +HAVE_LANGINFO_ALTMON = 0 +HAVE_LANGINFO_CODESET = 1 +HAVE_LANGINFO_ERA = 1 +HAVE_LANGINFO_H = 1 +HAVE_LANGINFO_T_FMT_AMPM = 1 +HAVE_LANGINFO_YESEXPR = 1 +HAVE_LCHMOD = 1 +HAVE_LCHOWN = 1 +HAVE_LDEXPF = 1 +HAVE_LIBGCRYPT = no +HAVE_LINK = 1 +HAVE_LINKAT = 1 +HAVE_LOG10F = 1 +HAVE_LOG10L = 1 +HAVE_LOG1P = 1 +HAVE_LOG1PF = 1 +HAVE_LOG1PL = 1 +HAVE_LOGBF = 1 +HAVE_LOGBL = 1 +HAVE_LOGF = 1 +HAVE_LOGL = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MAX_ALIGN_T = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSLEN = 0 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMCHR = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDIRAT = 1 +HAVE_MKDTEMP = 1 +HAVE_MKFIFO = 1 +HAVE_MKFIFOAT = 1 +HAVE_MKNOD = 1 +HAVE_MKNODAT = 1 +HAVE_MKOSTEMP = 1 +HAVE_MKOSTEMPS = 1 +HAVE_MKSTEMP = 1 +HAVE_MKSTEMPS = 1 +HAVE_MODFF = 1 +HAVE_MODFL = 1 +HAVE_MSVC_INVALID_PARAMETER_HANDLER = 0 +HAVE_NANOSLEEP = 1 +HAVE_NEWLOCALE = 1 +HAVE_NL_LANGINFO = 1 +HAVE_OPENAT = 1 +HAVE_OS_H = 0 +HAVE_PCLOSE = 1 +HAVE_PIPE = 1 +HAVE_PIPE2 = 1 +HAVE_POPEN = 1 +HAVE_POSIX_OPENPT = 1 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_POSIX_SPAWNATTR_T = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 1 +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = 1 +HAVE_POWF = 1 +HAVE_PREAD = 1 +HAVE_PTHREAD_SIGMASK = 1 +HAVE_PTSNAME = 1 +HAVE_PTSNAME_R = 1 +HAVE_PWRITE = 1 +HAVE_QSORT_R = 1 +HAVE_RAISE = 1 +HAVE_RANDOM = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_READLINKAT = 1 +HAVE_REALLOCARRAY = 1 +HAVE_REALPATH = 1 +HAVE_REMAINDER = 1 +HAVE_REMAINDERF = 1 +HAVE_RENAMEAT = 1 +HAVE_RINT = 1 +HAVE_RINTL = 1 +HAVE_RPMATCH = 1 +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 0 +HAVE_SCHED_H = +HAVE_SECURE_GETENV = 1 +HAVE_SETENV = 1 +HAVE_SETHOSTNAME = 1 +HAVE_SIGACTION = 1 +HAVE_SIGHANDLER_T = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SINF = 1 +HAVE_SINHF = 1 +HAVE_SINL = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_SQRTF = 1 +HAVE_SQRTL = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASECMP = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRINGS_H = 1 +HAVE_STRPBRK = 1 +HAVE_STRPTIME = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYMLINK = 1 +HAVE_SYMLINKAT = 1 +HAVE_SYS_BITYPES_H = 0 +HAVE_SYS_CDEFS_H = +HAVE_SYS_FILE_H = 1 +HAVE_SYS_INTTYPES_H = 0 +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TANF = 1 +HAVE_TANHF = 1 +HAVE_TANL = 1 +HAVE_TIMEGM = 1 +HAVE_TIMEZONE_T = 0 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_TZSET = 1 +HAVE_UNISTD_H = 1 +HAVE_UNLINKAT = 1 +HAVE_UNLOCKPT = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_USLEEP = 1 +HAVE_UTIMENSAT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCHAR_T = 1 +HAVE_WCPCPY = 1 +HAVE_WCPNCPY = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSCASECMP = 1 +HAVE_WCSCAT = 1 +HAVE_WCSCHR = 1 +HAVE_WCSCMP = 1 +HAVE_WCSCOLL = 1 +HAVE_WCSCPY = 1 +HAVE_WCSCSPN = 1 +HAVE_WCSDUP = 1 +HAVE_WCSFTIME = 1 +HAVE_WCSLEN = 1 +HAVE_WCSNCASECMP = 1 +HAVE_WCSNCAT = 1 +HAVE_WCSNCMP = 1 +HAVE_WCSNCPY = 1 +HAVE_WCSNLEN = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSPBRK = 1 +HAVE_WCSRCHR = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCSSPN = 1 +HAVE_WCSSTR = 1 +HAVE_WCSTOK = 1 +HAVE_WCSWIDTH = 1 +HAVE_WCSXFRM = 1 +HAVE_WCTRANS_T = 1 +HAVE_WCTYPE_H = 1 +HAVE_WCTYPE_T = 1 +HAVE_WINSOCK2_H = 0 +HAVE_WINT_T = 1 +HAVE_WMEMCHR = 1 +HAVE_WMEMCMP = 1 +HAVE_WMEMCPY = 1 +HAVE_WMEMMOVE = 1 +HAVE_WMEMSET = 1 +HAVE_XLOCALE_H = 1 +HAVE__BOOL = 1 +HAVE__EXIT = 1 +HELP2MAN = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing help2man +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +INT32_MAX_LT_INTMAX_MAX = 1 +INT64_MAX_EQ_LONG_MAX = 0 +INTLLIBS = +INTL_MACOSX_LIBS = +LD = /usr/bin/ld +LDFLAGS = +LEX = flex +LEXLIB = -lfl +LEX_OUTPUT_ROOT = lex.yy +LIBGCRYPT = +LIBGCRYPT_PREFIX = +LIBICONV = -liconv +LIBINTL = +LIBMULTITHREAD = -pthread -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBREADLINE = +LIBS = +LIBTHREAD = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIB_ACL = +LIB_CLOCK_GETTIME = +LIB_EACCESS = +LIB_POSIX_SPAWN = +LIB_SELINUX = +LIMITS_H = limits.h +LIPO = +LN_S = ln -s +LOCALCHARSET_TESTS_ENVIRONMENT = +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTALLOCA = +LTLIBGCRYPT = +LTLIBICONV = -liconv +LTLIBINTL = +LTLIBMULTITHREAD = -pthread +LTLIBOBJS = +LTLIBPTH = +LTLIBREADLINE = +LTLIBTHREAD = +LT_SYS_LIBRARY_PATH = +MAKEINFO = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/missing makeinfo +MANIFEST_TOOL = : +MDBLIBS = +MDB_DATETIME = +MKDIR_P = /bin/mkdir -p +MSGFMT = /usr/bin/msgfmt +MSGFMT_015 = /usr/bin/msgfmt +MSGMERGE = /usr/bin/msgmerge +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = <fcntl.h> +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = <getopt.h> +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = <inttypes.h> +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = <langinfo.h> +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = <limits.h> +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = <locale.h> +NEXT_AS_FIRST_DIRECTIVE_MATH_H = <math.h> +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = <signal.h> +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = <spawn.h> +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = <stdint.h> +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = <stdio.h> +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = <stdlib.h> +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = <strings.h> +NEXT_AS_FIRST_DIRECTIVE_STRING_H = <string.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = <sys/file.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = <sys/stat.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = <sys/time.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = <sys/types.h> +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = <sys/wait.h> +NEXT_AS_FIRST_DIRECTIVE_TIME_H = <time.h> +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = <unistd.h> +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = <wchar.h> +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = <wctype.h> +NEXT_ERRNO_H = +NEXT_FCNTL_H = <fcntl.h> +NEXT_FLOAT_H = +NEXT_GETOPT_H = <getopt.h> +NEXT_INTTYPES_H = <inttypes.h> +NEXT_LANGINFO_H = <langinfo.h> +NEXT_LIMITS_H = <limits.h> +NEXT_LOCALE_H = <locale.h> +NEXT_MATH_H = <math.h> +NEXT_SCHED_H = +NEXT_SELINUX_SELINUX_H = +NEXT_SIGNAL_H = <signal.h> +NEXT_SPAWN_H = <spawn.h> +NEXT_STDARG_H = <stdarg.h> +NEXT_STDDEF_H = +NEXT_STDINT_H = <stdint.h> +NEXT_STDIO_H = <stdio.h> +NEXT_STDLIB_H = <stdlib.h> +NEXT_STRINGS_H = <strings.h> +NEXT_STRING_H = <string.h> +NEXT_SYS_FILE_H = <sys/file.h> +NEXT_SYS_STAT_H = <sys/stat.h> +NEXT_SYS_TIME_H = <sys/time.h> +NEXT_SYS_TYPES_H = <sys/types.h> +NEXT_SYS_WAIT_H = <sys/wait.h> +NEXT_TIME_H = <time.h> +NEXT_UNISTD_H = <unistd.h> +NEXT_WCHAR_H = <wchar.h> +NEXT_WCTYPE_H = <wctype.h> +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = recutils +PACKAGE_BUGREPORT = bug-recutils@gnu.org +PACKAGE_NAME = GNU recutils +PACKAGE_STRING = GNU recutils 1.8 +PACKAGE_TARNAME = recutils +PACKAGE_URL = http://www.gnu.org/software/recutils/ +PACKAGE_VERSION = 1.8 +PATH_SEPARATOR = : +PKG_CONFIG = /usr/bin/pkg-config +PKG_CONFIG_LIBDIR = +PKG_CONFIG_PATH = +POSUB = po +PRAGMA_COLUMNS = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PRIPTR_PREFIX = "l" +PRI_MACROS_BROKEN = 0 +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = 0 +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_ACOSF = 0 +REPLACE_ASINF = 0 +REPLACE_ATAN2F = 0 +REPLACE_ATANF = 0 +REPLACE_BTOWC = 0 +REPLACE_CALLOC = 0 +REPLACE_CANONICALIZE_FILE_NAME = 0 +REPLACE_CBRTF = 0 +REPLACE_CBRTL = 0 +REPLACE_CEIL = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_COSF = 0 +REPLACE_COSHF = 0 +REPLACE_CTIME = GNULIB_PORTCHECK +REPLACE_DPRINTF = 0 +REPLACE_DUP = 0 +REPLACE_DUP2 = 0 +REPLACE_DUPLOCALE = 0 +REPLACE_EXP2 = 0 +REPLACE_EXP2L = 0 +REPLACE_EXPF = 0 +REPLACE_EXPM1 = 0 +REPLACE_EXPM1F = 0 +REPLACE_FABSL = 0 +REPLACE_FACCESSAT = 0 +REPLACE_FCHOWNAT = 0 +REPLACE_FCLOSE = 0 +REPLACE_FCNTL = 1 +REPLACE_FDOPEN = 0 +REPLACE_FFLUSH = 0 +REPLACE_FLOOR = 0 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FMA = 0 +REPLACE_FMAF = 0 +REPLACE_FMAL = 0 +REPLACE_FMOD = 0 +REPLACE_FMODF = 0 +REPLACE_FMODL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 1 +REPLACE_FPURGE = 0 +REPLACE_FREELOCALE = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPF = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 0 +REPLACE_FSTAT = 0 +REPLACE_FSTATAT = 0 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_FTRUNCATE = 0 +REPLACE_FUTIMENS = 0 +REPLACE_GETCWD = 0 +REPLACE_GETDELIM = 0 +REPLACE_GETDOMAINNAME = 0 +REPLACE_GETDTABLESIZE = 0 +REPLACE_GETGROUPS = 0 +REPLACE_GETLINE = 0 +REPLACE_GETLOGIN_R = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETPASS = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_GMTIME = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_HYPOT = 0 +REPLACE_HYPOTF = 0 +REPLACE_HYPOTL = 0 +REPLACE_ILOGB = 0 +REPLACE_ILOGBF = 0 +REPLACE_ILOGBL = 0 +REPLACE_ISATTY = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWBLANK = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_ITOLD = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LINK = 0 +REPLACE_LINKAT = 0 +REPLACE_LOCALECONV = 0 +REPLACE_LOCALTIME = 0 +REPLACE_LOCALTIME_R = 0 +REPLACE_LOG = 0 +REPLACE_LOG10 = 0 +REPLACE_LOG10F = 0 +REPLACE_LOG10L = 0 +REPLACE_LOG1P = 0 +REPLACE_LOG1PF = 0 +REPLACE_LOG1PL = 0 +REPLACE_LOG2 = 0 +REPLACE_LOG2F = 0 +REPLACE_LOG2L = 0 +REPLACE_LOGB = 0 +REPLACE_LOGBF = 0 +REPLACE_LOGBL = 0 +REPLACE_LOGF = 0 +REPLACE_LOGL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MALLOC = 0 +REPLACE_MBRLEN = 1 +REPLACE_MBRTOWC = 1 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MBTOWC = 0 +REPLACE_MEMCHR = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKFIFO = 0 +REPLACE_MKNOD = 0 +REPLACE_MKSTEMP = 0 +REPLACE_MKTIME = 0 +REPLACE_MODF = 0 +REPLACE_MODFF = 0 +REPLACE_MODFL = 0 +REPLACE_NAN = 0 +REPLACE_NANOSLEEP = GNULIB_PORTCHECK +REPLACE_NEWLOCALE = 0 +REPLACE_NL_LANGINFO = 1 +REPLACE_NULL = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_OPENAT = 0 +REPLACE_PERROR = 0 +REPLACE_POPEN = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 0 +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 0 +REPLACE_PREAD = 0 +REPLACE_PRINTF = 1 +REPLACE_PTHREAD_SIGMASK = 0 +REPLACE_PTSNAME = 0 +REPLACE_PTSNAME_R = 0 +REPLACE_PUTENV = 0 +REPLACE_PWRITE = 0 +REPLACE_QSORT_R = 0 +REPLACE_RAISE = 0 +REPLACE_RANDOM_R = 0 +REPLACE_READ = 0 +REPLACE_READLINK = 0 +REPLACE_READLINKAT = 0 +REPLACE_REALLOC = 0 +REPLACE_REALPATH = 0 +REPLACE_REMAINDER = 0 +REPLACE_REMAINDERF = 0 +REPLACE_REMAINDERL = 0 +REPLACE_REMOVE = 0 +REPLACE_RENAME = 0 +REPLACE_RENAMEAT = 0 +REPLACE_RMDIR = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SETENV = 0 +REPLACE_SETLOCALE = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SINF = 0 +REPLACE_SINHF = 0 +REPLACE_SLEEP = 0 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_SQRTF = 0 +REPLACE_SQRTL = 0 +REPLACE_STAT = 0 +REPLACE_STDIO_READ_FUNCS = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STPNCPY = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRCHRNUL = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRERROR_R = 0 +REPLACE_STRFTIME = GNULIB_PORTCHECK +REPLACE_STRNCAT = 0 +REPLACE_STRNDUP = 0 +REPLACE_STRNLEN = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 0 +REPLACE_STRTOD = 0 +REPLACE_STRTOIMAX = 0 +REPLACE_STRTOK_R = 0 +REPLACE_STRTOUMAX = 0 +REPLACE_STRUCT_LCONV = 0 +REPLACE_STRUCT_TIMEVAL = 0 +REPLACE_SYMLINK = 0 +REPLACE_SYMLINKAT = 0 +REPLACE_TANF = 0 +REPLACE_TANHF = 0 +REPLACE_TIMEGM = 0 +REPLACE_TMPFILE = 0 +REPLACE_TOWLOWER = 0 +REPLACE_TRUNC = 0 +REPLACE_TRUNCATE = 0 +REPLACE_TRUNCF = 0 +REPLACE_TRUNCL = 0 +REPLACE_TTYNAME_R = 0 +REPLACE_TZSET = 0 +REPLACE_UNLINK = 0 +REPLACE_UNLINKAT = 0 +REPLACE_UNSETENV = 0 +REPLACE_USLEEP = 0 +REPLACE_UTIMENSAT = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 1 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSFTIME = 0 +REPLACE_WCSNRTOMBS = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCSWIDTH = 0 +REPLACE_WCTOB = 0 +REPLACE_WCTOMB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SED = /bin/sed +SELINUX_CONTEXT_H = selinux/context.h +SET_MAKE = +SHELL = /bin/sh +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +STDARG_H = +STDBOOL_H = +STDDEF_H = +STDINT_H = stdint.h +STRIP = strip +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = 0 +TIME_H_DEFINES_STRUCT_TIMESPEC = 1 +UINT32_MAX_LT_UINTMAX_MAX = 1 +UINT64_MAX_EQ_ULONG_MAX = 0 +UNDEFINE_STRTOK_R = 0 +UNISTD_H_DEFINES_STRUCT_TIMESPEC = 0 +UNISTD_H_HAVE_WINSOCK2_H = 0 +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = 0 +USE_ACL = 0 +USE_NLS = yes +UUIDLIBS = +VERSION = 1.8 +WCHAR_T_SUFFIX = +WINDOWS_64_BIT_OFF_T = 0 +WINDOWS_64_BIT_ST_SIZE = 0 +WINDOWS_STAT_INODES = 0 +WINDOWS_STAT_TIMESPEC = 0 +WINT_T_SUFFIX = +XGETTEXT = /usr/bin/xgettext +XGETTEXT_015 = /usr/bin/xgettext +XGETTEXT_EXTRA_OPTIONS = --flag=error:3:c-format --flag=error_at_line:5:c-format --flag=asprintf:2:c-format --flag=vasprintf:2:c-format +YACC = bison -o y.tab.c +YFLAGS = +abs_builddir = /mnt/lfs/build/recutils/recutils-1.8/utils +abs_srcdir = /mnt/lfs/build/recutils/recutils-1.8/utils +abs_top_builddir = /mnt/lfs/build/recutils/recutils-1.8 +abs_top_srcdir = /mnt/lfs/build/recutils/recutils-1.8 +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +builddir = . +crypt_support = no +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +gl_LIBOBJS = asnprintf.o asprintf.o fcntl.o fprintf.o fseterr.o localtime-buffer.o mbrlen.o mbrtowc.o mktime.o nl_langinfo.o obstack.o printf.o printf-args.o printf-parse.o readline.o regex.o time_rz.o vasnprintf.o vasprintf.o vfprintf.o +gl_LTLIBOBJS = asnprintf.lo asprintf.lo fcntl.lo fprintf.lo fseterr.lo localtime-buffer.lo mbrlen.lo mbrtowc.lo mktime.lo nl_langinfo.lo obstack.lo printf.lo printf-args.lo printf-parse.lo readline.lo regex.lo time_rz.lo vasnprintf.lo vasprintf.lo vfprintf.lo +gltests_LIBOBJS = +gltests_LTLIBOBJS = +gltests_WITNESS = IN_RECUTILS_GNULIB_TESTS +have_uuid = no +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /mnt/lfs/build/recutils/recutils-1.8/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = $(MKDIR_P) +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +runstatedir = ${localstatedir}/run +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +MDB2REC = +#MDB2REC = mdb2rec +COMMONSRC = recutl.h recutl.c +COMMONLIBS = $(top_builddir)/lib/librecutils.la \ + $(top_builddir)/src/librec.la $(am__append_1) +AM_CFLAGS = $(am__append_2) +AM_CPPFLAGS = -I$(top_builddir)/lib \ + -I$(top_srcdir)/lib -I$(top_srcdir)/src \ + -I$(top_srcdir)/libcsv -DLOCALEDIR=\"$(localedir)\" \ + -DMDB_DATETIME=$(MDB_DATETIME) + +recinf_SOURCES = $(COMMONSRC) \ + recinf.c + +recinf_LDADD = $(COMMONLIBS) +recsel_SOURCES = $(COMMONSRC) \ + recsel.c + +recsel_LDADD = $(COMMONLIBS) +recins_SOURCES = $(COMMONSRC) \ + recins.c + +recins_LDADD = $(COMMONLIBS) +recdel_SOURCES = $(COMMONSRC) \ + recdel.c + +recdel_LDADD = $(COMMONLIBS) +recset_SOURCES = $(COMMONSRC) \ + recset.c + +recset_LDADD = $(COMMONLIBS) +recfix_SOURCES = $(COMMONSRC) \ + recfix.c + +recfix_LDADD = $(COMMONLIBS) +recfmt_SOURCES = $(COMMONSRC) \ + recfmt.c + +recfmt_LDADD = $(COMMONLIBS) +csv2rec_SOURCES = $(COMMONSRC) \ + csv2rec.c + +csv2rec_LDADD = $(COMMONLIBS) \ + $(top_builddir)/libcsv/libcsv.la + +rec2csv_SOURCES = $(COMMONSRC) \ + rec2csv.c + +rec2csv_LDADD = $(COMMONLIBS) \ + $(top_builddir)/libcsv/libcsv.la + +mdb2rec_SOURCES = $(COMMONSRC) \ + mdb2rec.c + +mdb2rec_CFLAGS = $(GLIB_CFLAGS) +mdb2rec_LDADD = $(COMMONLIBS) $(MDBLIBS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu utils/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu utils/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +csv2rec$(EXEEXT): $(csv2rec_OBJECTS) $(csv2rec_DEPENDENCIES) $(EXTRA_csv2rec_DEPENDENCIES) + @rm -f csv2rec$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(csv2rec_OBJECTS) $(csv2rec_LDADD) $(LIBS) + +mdb2rec$(EXEEXT): $(mdb2rec_OBJECTS) $(mdb2rec_DEPENDENCIES) $(EXTRA_mdb2rec_DEPENDENCIES) + @rm -f mdb2rec$(EXEEXT) + $(AM_V_CCLD)$(mdb2rec_LINK) $(mdb2rec_OBJECTS) $(mdb2rec_LDADD) $(LIBS) + +rec2csv$(EXEEXT): $(rec2csv_OBJECTS) $(rec2csv_DEPENDENCIES) $(EXTRA_rec2csv_DEPENDENCIES) + @rm -f rec2csv$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(rec2csv_OBJECTS) $(rec2csv_LDADD) $(LIBS) + +recdel$(EXEEXT): $(recdel_OBJECTS) $(recdel_DEPENDENCIES) $(EXTRA_recdel_DEPENDENCIES) + @rm -f recdel$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(recdel_OBJECTS) $(recdel_LDADD) $(LIBS) + +recfix$(EXEEXT): $(recfix_OBJECTS) $(recfix_DEPENDENCIES) $(EXTRA_recfix_DEPENDENCIES) + @rm -f recfix$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(recfix_OBJECTS) $(recfix_LDADD) $(LIBS) + +recfmt$(EXEEXT): $(recfmt_OBJECTS) $(recfmt_DEPENDENCIES) $(EXTRA_recfmt_DEPENDENCIES) + @rm -f recfmt$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(recfmt_OBJECTS) $(recfmt_LDADD) $(LIBS) + +recinf$(EXEEXT): $(recinf_OBJECTS) $(recinf_DEPENDENCIES) $(EXTRA_recinf_DEPENDENCIES) + @rm -f recinf$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(recinf_OBJECTS) $(recinf_LDADD) $(LIBS) + +recins$(EXEEXT): $(recins_OBJECTS) $(recins_DEPENDENCIES) $(EXTRA_recins_DEPENDENCIES) + @rm -f recins$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(recins_OBJECTS) $(recins_LDADD) $(LIBS) + +recsel$(EXEEXT): $(recsel_OBJECTS) $(recsel_DEPENDENCIES) $(EXTRA_recsel_DEPENDENCIES) + @rm -f recsel$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(recsel_OBJECTS) $(recsel_LDADD) $(LIBS) + +recset$(EXEEXT): $(recset_OBJECTS) $(recset_DEPENDENCIES) $(EXTRA_recset_DEPENDENCIES) + @rm -f recset$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(recset_OBJECTS) $(recset_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/csv2rec.Po +include ./$(DEPDIR)/mdb2rec-mdb2rec.Po +include ./$(DEPDIR)/mdb2rec-recutl.Po +include ./$(DEPDIR)/rec2csv.Po +include ./$(DEPDIR)/recdel.Po +include ./$(DEPDIR)/recfix.Po +include ./$(DEPDIR)/recfmt.Po +include ./$(DEPDIR)/recinf.Po +include ./$(DEPDIR)/recins.Po +include ./$(DEPDIR)/recsel.Po +include ./$(DEPDIR)/recset.Po +include ./$(DEPDIR)/recutl.Po + +.c.o: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ $< + +.c.obj: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC)source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ + $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Plo +# $(AM_V_CC)source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $< + +mdb2rec-recutl.o: recutl.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -MT mdb2rec-recutl.o -MD -MP -MF $(DEPDIR)/mdb2rec-recutl.Tpo -c -o mdb2rec-recutl.o `test -f 'recutl.c' || echo '$(srcdir)/'`recutl.c + $(AM_V_at)$(am__mv) $(DEPDIR)/mdb2rec-recutl.Tpo $(DEPDIR)/mdb2rec-recutl.Po +# $(AM_V_CC)source='recutl.c' object='mdb2rec-recutl.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -c -o mdb2rec-recutl.o `test -f 'recutl.c' || echo '$(srcdir)/'`recutl.c + +mdb2rec-recutl.obj: recutl.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -MT mdb2rec-recutl.obj -MD -MP -MF $(DEPDIR)/mdb2rec-recutl.Tpo -c -o mdb2rec-recutl.obj `if test -f 'recutl.c'; then $(CYGPATH_W) 'recutl.c'; else $(CYGPATH_W) '$(srcdir)/recutl.c'; fi` + $(AM_V_at)$(am__mv) $(DEPDIR)/mdb2rec-recutl.Tpo $(DEPDIR)/mdb2rec-recutl.Po +# $(AM_V_CC)source='recutl.c' object='mdb2rec-recutl.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -c -o mdb2rec-recutl.obj `if test -f 'recutl.c'; then $(CYGPATH_W) 'recutl.c'; else $(CYGPATH_W) '$(srcdir)/recutl.c'; fi` + +mdb2rec-mdb2rec.o: mdb2rec.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -MT mdb2rec-mdb2rec.o -MD -MP -MF $(DEPDIR)/mdb2rec-mdb2rec.Tpo -c -o mdb2rec-mdb2rec.o `test -f 'mdb2rec.c' || echo '$(srcdir)/'`mdb2rec.c + $(AM_V_at)$(am__mv) $(DEPDIR)/mdb2rec-mdb2rec.Tpo $(DEPDIR)/mdb2rec-mdb2rec.Po +# $(AM_V_CC)source='mdb2rec.c' object='mdb2rec-mdb2rec.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -c -o mdb2rec-mdb2rec.o `test -f 'mdb2rec.c' || echo '$(srcdir)/'`mdb2rec.c + +mdb2rec-mdb2rec.obj: mdb2rec.c + $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -MT mdb2rec-mdb2rec.obj -MD -MP -MF $(DEPDIR)/mdb2rec-mdb2rec.Tpo -c -o mdb2rec-mdb2rec.obj `if test -f 'mdb2rec.c'; then $(CYGPATH_W) 'mdb2rec.c'; else $(CYGPATH_W) '$(srcdir)/mdb2rec.c'; fi` + $(AM_V_at)$(am__mv) $(DEPDIR)/mdb2rec-mdb2rec.Tpo $(DEPDIR)/mdb2rec-mdb2rec.Po +# $(AM_V_CC)source='mdb2rec.c' object='mdb2rec-mdb2rec.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -c -o mdb2rec-mdb2rec.obj `if test -f 'mdb2rec.c'; then $(CYGPATH_W) 'mdb2rec.c'; else $(CYGPATH_W) '$(srcdir)/mdb2rec.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS + +.PRECIOUS: Makefile + + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/utils/Makefile.am b/devspec.en_US/project/recutils/utils/Makefile.am new file mode 100755 index 0000000..863e0d3 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/Makefile.am @@ -0,0 +1,88 @@ +# utils/ Makefile.am +# GNU rec + +# Copyright (C) 2009-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +if COMPILE_MDB2REC + MDB2REC = mdb2rec +else + MDB2REC = +endif + +bin_PROGRAMS = recinf recsel recins recdel recset recfix recfmt \ + csv2rec rec2csv $(MDB2REC) + +COMMONSRC = recutl.h recutl.c +COMMONLIBS = $(top_builddir)/lib/librecutils.la $(top_builddir)/src/librec.la + +if CRYPT + COMMONLIBS += $(LTLIBGCRYPT) +endif + +AM_CFLAGS = +if USE_COVERAGE + AM_CFLAGS += -fprofile-arcs -ftest-coverage +endif + +AM_CPPFLAGS = -I$(top_builddir)/lib \ + -I$(top_srcdir)/lib -I$(top_srcdir)/src \ + -I$(top_srcdir)/libcsv -DLOCALEDIR=\"$(localedir)\" \ + -DMDB_DATETIME=$(MDB_DATETIME) + +recinf_SOURCES = $(COMMONSRC) \ + recinf.c +recinf_LDADD = $(COMMONLIBS) + +recsel_SOURCES = $(COMMONSRC) \ + recsel.c +recsel_LDADD = $(COMMONLIBS) + +recins_SOURCES = $(COMMONSRC) \ + recins.c +recins_LDADD = $(COMMONLIBS) + +recdel_SOURCES = $(COMMONSRC) \ + recdel.c +recdel_LDADD = $(COMMONLIBS) + +recset_SOURCES = $(COMMONSRC) \ + recset.c +recset_LDADD = $(COMMONLIBS) + +recfix_SOURCES = $(COMMONSRC) \ + recfix.c +recfix_LDADD = $(COMMONLIBS) + +recfmt_SOURCES = $(COMMONSRC) \ + recfmt.c +recfmt_LDADD = $(COMMONLIBS) + +csv2rec_SOURCES = $(COMMONSRC) \ + csv2rec.c +csv2rec_LDADD = $(COMMONLIBS) \ + $(top_builddir)/libcsv/libcsv.la + +rec2csv_SOURCES = $(COMMONSRC) \ + rec2csv.c +rec2csv_LDADD = $(COMMONLIBS) \ + $(top_builddir)/libcsv/libcsv.la + +mdb2rec_SOURCES = $(COMMONSRC) \ + mdb2rec.c +mdb2rec_CFLAGS = $(GLIB_CFLAGS) +mdb2rec_LDADD = $(COMMONLIBS) $(MDBLIBS) + +# End of Makefile.am diff --git a/devspec.en_US/project/recutils/utils/Makefile.in b/devspec.en_US/project/recutils/utils/Makefile.in new file mode 100755 index 0000000..e51a847 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/Makefile.in @@ -0,0 +1,2083 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# utils/ Makefile.am +# GNU rec + +# Copyright (C) 2009-2019 Jose E. Marchesi + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = recinf$(EXEEXT) recsel$(EXEEXT) recins$(EXEEXT) \ + recdel$(EXEEXT) recset$(EXEEXT) recfix$(EXEEXT) \ + recfmt$(EXEEXT) csv2rec$(EXEEXT) rec2csv$(EXEEXT) \ + $(am__EXEEXT_1) +@CRYPT_TRUE@am__append_1 = $(LTLIBGCRYPT) +@USE_COVERAGE_TRUE@am__append_2 = -fprofile-arcs -ftest-coverage +subdir = utils +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/__inline.m4 \ + $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/asm-underscore.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ + $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/builtin-expect.m4 \ + $(top_srcdir)/m4/canonicalize.m4 \ + $(top_srcdir)/m4/clock_time.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/extern-inline.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl-o.m4 \ + $(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \ + $(top_srcdir)/m4/flock.m4 $(top_srcdir)/m4/floor.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/frexp.m4 \ + $(top_srcdir)/m4/frexpl.m4 $(top_srcdir)/m4/fseek.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fseterr.m4 \ + $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/ftell.m4 \ + $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ + $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ + $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ + $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpass.m4 \ + $(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/group-member.m4 \ + $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ + $(top_srcdir)/m4/include_next.m4 \ + $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ + $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \ + $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isnand.m4 \ + $(top_srcdir)/m4/isnanf.m4 $(top_srcdir)/m4/isnanl.m4 \ + $(top_srcdir)/m4/langinfo_h.m4 $(top_srcdir)/m4/largefile.m4 \ + $(top_srcdir)/m4/ldexpl.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/limits-h.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localeconv.m4 \ + $(top_srcdir)/m4/localtime-buffer.m4 $(top_srcdir)/m4/lock.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/lseek.m4 \ + $(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \ + $(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/math_h.m4 \ + $(top_srcdir)/m4/mbrlen.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mbtowc.m4 $(top_srcdir)/m4/memchr.m4 \ + $(top_srcdir)/m4/minmax.m4 $(top_srcdir)/m4/mkdir.m4 \ + $(top_srcdir)/m4/mkostemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/mktime.m4 $(top_srcdir)/m4/mmap-anon.m4 \ + $(top_srcdir)/m4/mode_t.m4 $(top_srcdir)/m4/msvc-inval.m4 \ + $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ + $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ + $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ + $(top_srcdir)/m4/open-cloexec.m4 $(top_srcdir)/m4/open.m4 \ + $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 \ + $(top_srcdir)/m4/printf-posix-rpl.m4 \ + $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ + $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ + $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ + $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ + $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ + $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/regex.m4 \ + $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rmdir.m4 \ + $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ + $(top_srcdir)/m4/selinux-context-h.m4 \ + $(top_srcdir)/m4/selinux-selinux-h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sh-filename.m4 \ + $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ + $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ + $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ + $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdarg.m4 \ + $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ + $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ + $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ + $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ + $(top_srcdir)/m4/sys_socket_h.m4 \ + $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ + $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ + $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ + $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ + $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf-posix.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ + $(top_srcdir)/m4/vfprintf-posix.m4 \ + $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ + $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ + $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ + $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ + $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +@COMPILE_MDB2REC_TRUE@am__EXEEXT_1 = mdb2rec$(EXEEXT) +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am__objects_1 = recutl.$(OBJEXT) +am_csv2rec_OBJECTS = $(am__objects_1) csv2rec.$(OBJEXT) +csv2rec_OBJECTS = $(am_csv2rec_OBJECTS) +am__DEPENDENCIES_1 = +@CRYPT_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) +am__DEPENDENCIES_3 = $(top_builddir)/lib/librecutils.la \ + $(top_builddir)/src/librec.la $(am__DEPENDENCIES_2) +csv2rec_DEPENDENCIES = $(am__DEPENDENCIES_3) \ + $(top_builddir)/libcsv/libcsv.la +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +am__objects_2 = mdb2rec-recutl.$(OBJEXT) +am_mdb2rec_OBJECTS = $(am__objects_2) mdb2rec-mdb2rec.$(OBJEXT) +mdb2rec_OBJECTS = $(am_mdb2rec_OBJECTS) +mdb2rec_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) +mdb2rec_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(mdb2rec_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_rec2csv_OBJECTS = $(am__objects_1) rec2csv.$(OBJEXT) +rec2csv_OBJECTS = $(am_rec2csv_OBJECTS) +rec2csv_DEPENDENCIES = $(am__DEPENDENCIES_3) \ + $(top_builddir)/libcsv/libcsv.la +am_recdel_OBJECTS = $(am__objects_1) recdel.$(OBJEXT) +recdel_OBJECTS = $(am_recdel_OBJECTS) +recdel_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_recfix_OBJECTS = $(am__objects_1) recfix.$(OBJEXT) +recfix_OBJECTS = $(am_recfix_OBJECTS) +recfix_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_recfmt_OBJECTS = $(am__objects_1) recfmt.$(OBJEXT) +recfmt_OBJECTS = $(am_recfmt_OBJECTS) +recfmt_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_recinf_OBJECTS = $(am__objects_1) recinf.$(OBJEXT) +recinf_OBJECTS = $(am_recinf_OBJECTS) +recinf_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_recins_OBJECTS = $(am__objects_1) recins.$(OBJEXT) +recins_OBJECTS = $(am_recins_OBJECTS) +recins_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_recsel_OBJECTS = $(am__objects_1) recsel.$(OBJEXT) +recsel_OBJECTS = $(am_recsel_OBJECTS) +recsel_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_recset_OBJECTS = $(am__objects_1) recset.$(OBJEXT) +recset_OBJECTS = $(am_recset_OBJECTS) +recset_DEPENDENCIES = $(am__DEPENDENCIES_3) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(csv2rec_SOURCES) $(mdb2rec_SOURCES) $(rec2csv_SOURCES) \ + $(recdel_SOURCES) $(recfix_SOURCES) $(recfmt_SOURCES) \ + $(recinf_SOURCES) $(recins_SOURCES) $(recsel_SOURCES) \ + $(recset_SOURCES) +DIST_SOURCES = $(csv2rec_SOURCES) $(mdb2rec_SOURCES) \ + $(rec2csv_SOURCES) $(recdel_SOURCES) $(recfix_SOURCES) \ + $(recfmt_SOURCES) $(recinf_SOURCES) $(recins_SOURCES) \ + $(recsel_SOURCES) $(recset_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in \ + $(top_srcdir)/build-aux/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +ARFLAGS = @ARFLAGS@ +ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BASH_HEADERS = @BASH_HEADERS@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CA68 = @CA68@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECK_CFLAGS = @CHECK_CFLAGS@ +CHECK_LIBS = @CHECK_LIBS@ +CONFIG_INCLUDE = @CONFIG_INCLUDE@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CURLLIBS = @CURLLIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +FLOOR_LIBM = @FLOOR_LIBM@ +GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ +GETOPT_H = @GETOPT_H@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIBC21 = @GLIBC21@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GNULIB_ACOSF = @GNULIB_ACOSF@ +GNULIB_ACOSL = @GNULIB_ACOSL@ +GNULIB_ASINF = @GNULIB_ASINF@ +GNULIB_ASINL = @GNULIB_ASINL@ +GNULIB_ATAN2F = @GNULIB_ATAN2F@ +GNULIB_ATANF = @GNULIB_ATANF@ +GNULIB_ATANL = @GNULIB_ATANL@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@ +GNULIB_CBRT = @GNULIB_CBRT@ +GNULIB_CBRTF = @GNULIB_CBRTF@ +GNULIB_CBRTL = @GNULIB_CBRTL@ +GNULIB_CEIL = @GNULIB_CEIL@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHDIR = @GNULIB_CHDIR@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_COPYSIGN = @GNULIB_COPYSIGN@ +GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@ +GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@ +GNULIB_COSF = @GNULIB_COSF@ +GNULIB_COSHF = @GNULIB_COSHF@ +GNULIB_COSL = @GNULIB_COSL@ +GNULIB_CTIME = @GNULIB_CTIME@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP = @GNULIB_DUP@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_DUP3 = @GNULIB_DUP3@ +GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_EXP2 = @GNULIB_EXP2@ +GNULIB_EXP2F = @GNULIB_EXP2F@ +GNULIB_EXP2L = @GNULIB_EXP2L@ +GNULIB_EXPF = @GNULIB_EXPF@ +GNULIB_EXPL = @GNULIB_EXPL@ +GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@ +GNULIB_EXPM1 = @GNULIB_EXPM1@ +GNULIB_EXPM1F = @GNULIB_EXPM1F@ +GNULIB_EXPM1L = @GNULIB_EXPM1L@ +GNULIB_FABSF = @GNULIB_FABSF@ +GNULIB_FABSL = @GNULIB_FABSL@ +GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCHMODAT = @GNULIB_FCHMODAT@ +GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FCNTL = @GNULIB_FCNTL@ +GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ +GNULIB_FDOPEN = @GNULIB_FDOPEN@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FFS = @GNULIB_FFS@ +GNULIB_FFSL = @GNULIB_FFSL@ +GNULIB_FFSLL = @GNULIB_FFSLL@ +GNULIB_FGETC = @GNULIB_FGETC@ +GNULIB_FGETS = @GNULIB_FGETS@ +GNULIB_FLOCK = @GNULIB_FLOCK@ +GNULIB_FLOOR = @GNULIB_FLOOR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FMA = @GNULIB_FMA@ +GNULIB_FMAF = @GNULIB_FMAF@ +GNULIB_FMAL = @GNULIB_FMAL@ +GNULIB_FMOD = @GNULIB_FMOD@ +GNULIB_FMODF = @GNULIB_FMODF@ +GNULIB_FMODL = @GNULIB_FMODL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPURGE = @GNULIB_FPURGE@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREAD = @GNULIB_FREAD@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPF = @GNULIB_FREXPF@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSCANF = @GNULIB_FSCANF@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSTAT = @GNULIB_FSTAT@ +GNULIB_FSTATAT = @GNULIB_FSTATAT@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FUTIMENS = @GNULIB_FUTIMENS@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETC = @GNULIB_GETC@ +GNULIB_GETCHAR = @GNULIB_GETCHAR@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETPASS = @GNULIB_GETPASS@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@ +GNULIB_GRANTPT = @GNULIB_GRANTPT@ +GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ +GNULIB_HYPOT = @GNULIB_HYPOT@ +GNULIB_HYPOTF = @GNULIB_HYPOTF@ +GNULIB_HYPOTL = @GNULIB_HYPOTL@ +GNULIB_ILOGB = @GNULIB_ILOGB@ +GNULIB_ILOGBF = @GNULIB_ILOGBF@ +GNULIB_ILOGBL = @GNULIB_ILOGBL@ +GNULIB_IMAXABS = @GNULIB_IMAXABS@ +GNULIB_IMAXDIV = @GNULIB_IMAXDIV@ +GNULIB_ISATTY = @GNULIB_ISATTY@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_ISWBLANK = @GNULIB_ISWBLANK@ +GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPF = @GNULIB_LDEXPF@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LINKAT = @GNULIB_LINKAT@ +GNULIB_LOCALECONV = @GNULIB_LOCALECONV@ +GNULIB_LOCALENAME = @GNULIB_LOCALENAME@ +GNULIB_LOCALTIME = @GNULIB_LOCALTIME@ +GNULIB_LOG = @GNULIB_LOG@ +GNULIB_LOG10 = @GNULIB_LOG10@ +GNULIB_LOG10F = @GNULIB_LOG10F@ +GNULIB_LOG10L = @GNULIB_LOG10L@ +GNULIB_LOG1P = @GNULIB_LOG1P@ +GNULIB_LOG1PF = @GNULIB_LOG1PF@ +GNULIB_LOG1PL = @GNULIB_LOG1PL@ +GNULIB_LOG2 = @GNULIB_LOG2@ +GNULIB_LOG2F = @GNULIB_LOG2F@ +GNULIB_LOG2L = @GNULIB_LOG2L@ +GNULIB_LOGB = @GNULIB_LOGB@ +GNULIB_LOGBF = @GNULIB_LOGBF@ +GNULIB_LOGBL = @GNULIB_LOGBL@ +GNULIB_LOGF = @GNULIB_LOGF@ +GNULIB_LOGL = @GNULIB_LOGL@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MBTOWC = @GNULIB_MBTOWC@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDIRAT = @GNULIB_MKDIRAT@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKFIFO = @GNULIB_MKFIFO@ +GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@ +GNULIB_MKNOD = @GNULIB_MKNOD@ +GNULIB_MKNODAT = @GNULIB_MKNODAT@ +GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@ +GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@ +GNULIB_MKTIME = @GNULIB_MKTIME@ +GNULIB_MODF = @GNULIB_MODF@ +GNULIB_MODFF = @GNULIB_MODFF@ +GNULIB_MODFL = @GNULIB_MODFL@ +GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@ +GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@ +GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_OPENAT = @GNULIB_OPENAT@ +GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@ +GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@ +GNULIB_PCLOSE = @GNULIB_PCLOSE@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_PIPE = @GNULIB_PIPE@ +GNULIB_PIPE2 = @GNULIB_PIPE2@ +GNULIB_POPEN = @GNULIB_POPEN@ +GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_POWF = @GNULIB_POWF@ +GNULIB_PREAD = @GNULIB_PREAD@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@ +GNULIB_PTSNAME = @GNULIB_PTSNAME@ +GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_PWRITE = @GNULIB_PWRITE@ +GNULIB_QSORT_R = @GNULIB_QSORT_R@ +GNULIB_RAISE = @GNULIB_RAISE@ +GNULIB_RANDOM = @GNULIB_RANDOM@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READ = @GNULIB_READ@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_READLINKAT = @GNULIB_READLINKAT@ +GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_REALPATH = @GNULIB_REALPATH@ +GNULIB_REMAINDER = @GNULIB_REMAINDER@ +GNULIB_REMAINDERF = @GNULIB_REMAINDERF@ +GNULIB_REMAINDERL = @GNULIB_REMAINDERL@ +GNULIB_REMOVE = @GNULIB_REMOVE@ +GNULIB_RENAME = @GNULIB_RENAME@ +GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ +GNULIB_RINT = @GNULIB_RINT@ +GNULIB_RINTF = @GNULIB_RINTF@ +GNULIB_RINTL = @GNULIB_RINTL@ +GNULIB_RMDIR = @GNULIB_RMDIR@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SCANF = @GNULIB_SCANF@ +GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ +GNULIB_SETLOCALE = @GNULIB_SETLOCALE@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SINF = @GNULIB_SINF@ +GNULIB_SINHF = @GNULIB_SINHF@ +GNULIB_SINL = @GNULIB_SINL@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_SQRTF = @GNULIB_SQRTF@ +GNULIB_SQRTL = @GNULIB_SQRTL@ +GNULIB_STAT = @GNULIB_STAT@ +GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ +GNULIB_STRFTIME = @GNULIB_STRFTIME@ +GNULIB_STRNCAT = @GNULIB_STRNCAT@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRPTIME = @GNULIB_STRPTIME@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_SYMLINK = @GNULIB_SYMLINK@ +GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ +GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@ +GNULIB_TANF = @GNULIB_TANF@ +GNULIB_TANHF = @GNULIB_TANHF@ +GNULIB_TANL = @GNULIB_TANL@ +GNULIB_TIMEGM = @GNULIB_TIMEGM@ +GNULIB_TIME_R = @GNULIB_TIME_R@ +GNULIB_TIME_RZ = @GNULIB_TIME_RZ@ +GNULIB_TMPFILE = @GNULIB_TMPFILE@ +GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCATE = @GNULIB_TRUNCATE@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ +GNULIB_TZSET = @GNULIB_TZSET@ +GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNLINK = @GNULIB_UNLINK@ +GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ +GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_USLEEP = @GNULIB_USLEEP@ +GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VFSCANF = @GNULIB_VFSCANF@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSCANF = @GNULIB_VSCANF@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WAITPID = @GNULIB_WAITPID@ +GNULIB_WCPCPY = @GNULIB_WCPCPY@ +GNULIB_WCPNCPY = @GNULIB_WCPNCPY@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@ +GNULIB_WCSCAT = @GNULIB_WCSCAT@ +GNULIB_WCSCHR = @GNULIB_WCSCHR@ +GNULIB_WCSCMP = @GNULIB_WCSCMP@ +GNULIB_WCSCOLL = @GNULIB_WCSCOLL@ +GNULIB_WCSCPY = @GNULIB_WCSCPY@ +GNULIB_WCSCSPN = @GNULIB_WCSCSPN@ +GNULIB_WCSDUP = @GNULIB_WCSDUP@ +GNULIB_WCSFTIME = @GNULIB_WCSFTIME@ +GNULIB_WCSLEN = @GNULIB_WCSLEN@ +GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@ +GNULIB_WCSNCAT = @GNULIB_WCSNCAT@ +GNULIB_WCSNCMP = @GNULIB_WCSNCMP@ +GNULIB_WCSNCPY = @GNULIB_WCSNCPY@ +GNULIB_WCSNLEN = @GNULIB_WCSNLEN@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSPBRK = @GNULIB_WCSPBRK@ +GNULIB_WCSRCHR = @GNULIB_WCSRCHR@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCSSPN = @GNULIB_WCSSPN@ +GNULIB_WCSSTR = @GNULIB_WCSSTR@ +GNULIB_WCSTOK = @GNULIB_WCSTOK@ +GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@ +GNULIB_WCSXFRM = @GNULIB_WCSXFRM@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCTOMB = @GNULIB_WCTOMB@ +GNULIB_WCTRANS = @GNULIB_WCTRANS@ +GNULIB_WCTYPE = @GNULIB_WCTYPE@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WMEMCHR = @GNULIB_WMEMCHR@ +GNULIB_WMEMCMP = @GNULIB_WMEMCMP@ +GNULIB_WMEMCPY = @GNULIB_WMEMCPY@ +GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@ +GNULIB_WMEMSET = @GNULIB_WMEMSET@ +GNULIB_WRITE = @GNULIB_WRITE@ +GNULIB__EXIT = @GNULIB__EXIT@ +GREP = @GREP@ +HAVE_ACOSF = @HAVE_ACOSF@ +HAVE_ACOSL = @HAVE_ACOSL@ +HAVE_ASINF = @HAVE_ASINF@ +HAVE_ASINL = @HAVE_ASINL@ +HAVE_ATAN2F = @HAVE_ATAN2F@ +HAVE_ATANF = @HAVE_ATANF@ +HAVE_ATANL = @HAVE_ATANL@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ +HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ +HAVE_CBRT = @HAVE_CBRT@ +HAVE_CBRTF = @HAVE_CBRTF@ +HAVE_CBRTL = @HAVE_CBRTL@ +HAVE_CHOWN = @HAVE_CHOWN@ +HAVE_COPYSIGN = @HAVE_COPYSIGN@ +HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ +HAVE_COSF = @HAVE_COSF@ +HAVE_COSHF = @HAVE_COSHF@ +HAVE_COSL = @HAVE_COSL@ +HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ +HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ +HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ +HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ +HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ +HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ +HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ +HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ +HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ +HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ +HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ +HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ +HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ +HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ +HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ +HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ +HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ +HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ +HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ +HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ +HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ +HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ +HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ +HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ +HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ +HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ +HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ +HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ +HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ +HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ +HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ +HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_DUP3 = @HAVE_DUP3@ +HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_EXPF = @HAVE_EXPF@ +HAVE_EXPL = @HAVE_EXPL@ +HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ +HAVE_EXPM1 = @HAVE_EXPM1@ +HAVE_EXPM1F = @HAVE_EXPM1F@ +HAVE_FABSF = @HAVE_FABSF@ +HAVE_FABSL = @HAVE_FABSL@ +HAVE_FACCESSAT = @HAVE_FACCESSAT@ +HAVE_FCHDIR = @HAVE_FCHDIR@ +HAVE_FCHMODAT = @HAVE_FCHMODAT@ +HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ +HAVE_FCNTL = @HAVE_FCNTL@ +HAVE_FDATASYNC = @HAVE_FDATASYNC@ +HAVE_FEATURES_H = @HAVE_FEATURES_H@ +HAVE_FFS = @HAVE_FFS@ +HAVE_FFSL = @HAVE_FFSL@ +HAVE_FFSLL = @HAVE_FFSLL@ +HAVE_FLOCK = @HAVE_FLOCK@ +HAVE_FMA = @HAVE_FMA@ +HAVE_FMAF = @HAVE_FMAF@ +HAVE_FMAL = @HAVE_FMAL@ +HAVE_FMODF = @HAVE_FMODF@ +HAVE_FMODL = @HAVE_FMODL@ +HAVE_FREELOCALE = @HAVE_FREELOCALE@ +HAVE_FREXPF = @HAVE_FREXPF@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSTATAT = @HAVE_FSTATAT@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_FUTIMENS = @HAVE_FUTIMENS@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETGROUPS = @HAVE_GETGROUPS@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETLOGIN = @HAVE_GETLOGIN@ +HAVE_GETOPT_H = @HAVE_GETOPT_H@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETPASS = @HAVE_GETPASS@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ +HAVE_GRANTPT = @HAVE_GRANTPT@ +HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ +HAVE_HYPOTF = @HAVE_HYPOTF@ +HAVE_HYPOTL = @HAVE_HYPOTL@ +HAVE_ILOGB = @HAVE_ILOGB@ +HAVE_ILOGBF = @HAVE_ILOGBF@ +HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWBLANK = @HAVE_ISWBLANK@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ +HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ +HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ +HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ +HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ +HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LCHOWN = @HAVE_LCHOWN@ +HAVE_LDEXPF = @HAVE_LDEXPF@ +HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LINKAT = @HAVE_LINKAT@ +HAVE_LOG10F = @HAVE_LOG10F@ +HAVE_LOG10L = @HAVE_LOG10L@ +HAVE_LOG1P = @HAVE_LOG1P@ +HAVE_LOG1PF = @HAVE_LOG1PF@ +HAVE_LOG1PL = @HAVE_LOG1PL@ +HAVE_LOGBF = @HAVE_LOGBF@ +HAVE_LOGBL = @HAVE_LOGBL@ +HAVE_LOGF = @HAVE_LOGF@ +HAVE_LOGL = @HAVE_LOGL@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSLEN = @HAVE_MBSLEN@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMCHR = @HAVE_MEMCHR@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDIRAT = @HAVE_MKDIRAT@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_MKFIFO = @HAVE_MKFIFO@ +HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ +HAVE_MKNOD = @HAVE_MKNOD@ +HAVE_MKNODAT = @HAVE_MKNODAT@ +HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ +HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ +HAVE_MKSTEMP = @HAVE_MKSTEMP@ +HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ +HAVE_MODFF = @HAVE_MODFF@ +HAVE_MODFL = @HAVE_MODFL@ +HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ +HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ +HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ +HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ +HAVE_OPENAT = @HAVE_OPENAT@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_PCLOSE = @HAVE_PCLOSE@ +HAVE_PIPE = @HAVE_PIPE@ +HAVE_PIPE2 = @HAVE_PIPE2@ +HAVE_POPEN = @HAVE_POPEN@ +HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ +HAVE_POWF = @HAVE_POWF@ +HAVE_PREAD = @HAVE_PREAD@ +HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ +HAVE_PTSNAME = @HAVE_PTSNAME@ +HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ +HAVE_PWRITE = @HAVE_PWRITE@ +HAVE_QSORT_R = @HAVE_QSORT_R@ +HAVE_RAISE = @HAVE_RAISE@ +HAVE_RANDOM = @HAVE_RANDOM@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_READLINKAT = @HAVE_READLINKAT@ +HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ +HAVE_REALPATH = @HAVE_REALPATH@ +HAVE_REMAINDER = @HAVE_REMAINDER@ +HAVE_REMAINDERF = @HAVE_REMAINDERF@ +HAVE_RENAMEAT = @HAVE_RENAMEAT@ +HAVE_RINT = @HAVE_RINT@ +HAVE_RINTL = @HAVE_RINTL@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SINF = @HAVE_SINF@ +HAVE_SINHF = @HAVE_SINHF@ +HAVE_SINL = @HAVE_SINL@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_SQRTF = @HAVE_SQRTF@ +HAVE_SQRTL = @HAVE_SQRTL@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASECMP = @HAVE_STRCASECMP@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRINGS_H = @HAVE_STRINGS_H@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRPTIME = @HAVE_STRPTIME@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYMLINK = @HAVE_SYMLINK@ +HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ +HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TANF = @HAVE_TANF@ +HAVE_TANHF = @HAVE_TANHF@ +HAVE_TANL = @HAVE_TANL@ +HAVE_TIMEGM = @HAVE_TIMEGM@ +HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_TZSET = @HAVE_TZSET@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNLINKAT = @HAVE_UNLINKAT@ +HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_USLEEP = @HAVE_USLEEP@ +HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCHAR_T = @HAVE_WCHAR_T@ +HAVE_WCPCPY = @HAVE_WCPCPY@ +HAVE_WCPNCPY = @HAVE_WCPNCPY@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ +HAVE_WCSCAT = @HAVE_WCSCAT@ +HAVE_WCSCHR = @HAVE_WCSCHR@ +HAVE_WCSCMP = @HAVE_WCSCMP@ +HAVE_WCSCOLL = @HAVE_WCSCOLL@ +HAVE_WCSCPY = @HAVE_WCSCPY@ +HAVE_WCSCSPN = @HAVE_WCSCSPN@ +HAVE_WCSDUP = @HAVE_WCSDUP@ +HAVE_WCSFTIME = @HAVE_WCSFTIME@ +HAVE_WCSLEN = @HAVE_WCSLEN@ +HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ +HAVE_WCSNCAT = @HAVE_WCSNCAT@ +HAVE_WCSNCMP = @HAVE_WCSNCMP@ +HAVE_WCSNCPY = @HAVE_WCSNCPY@ +HAVE_WCSNLEN = @HAVE_WCSNLEN@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSPBRK = @HAVE_WCSPBRK@ +HAVE_WCSRCHR = @HAVE_WCSRCHR@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCSSPN = @HAVE_WCSSPN@ +HAVE_WCSSTR = @HAVE_WCSSTR@ +HAVE_WCSTOK = @HAVE_WCSTOK@ +HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ +HAVE_WCSXFRM = @HAVE_WCSXFRM@ +HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ +HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE_WMEMCHR = @HAVE_WMEMCHR@ +HAVE_WMEMCMP = @HAVE_WMEMCMP@ +HAVE_WMEMCPY = @HAVE_WMEMCPY@ +HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ +HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ +HAVE__BOOL = @HAVE__BOOL@ +HAVE__EXIT = @HAVE__EXIT@ +HELP2MAN = @HELP2MAN@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ +INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBGCRYPT = @LIBGCRYPT@ +LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBREADLINE = @LIBREADLINE@ +LIBS = @LIBS@ +LIBTHREAD = @LIBTHREAD@ +LIBTOOL = @LIBTOOL@ +LIB_ACL = @LIB_ACL@ +LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ +LIB_EACCESS = @LIB_EACCESS@ +LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ +LIB_SELINUX = @LIB_SELINUX@ +LIMITS_H = @LIMITS_H@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTALLOCA = @LTALLOCA@ +LTLIBGCRYPT = @LTLIBGCRYPT@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBREADLINE = @LTLIBREADLINE@ +LTLIBTHREAD = @LTLIBTHREAD@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MDBLIBS = @MDBLIBS@ +MDB_DATETIME = @MDB_DATETIME@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ +NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ +NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ +NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ +NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ +NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ +NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ +NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ +NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ +NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_GETOPT_H = @NEXT_GETOPT_H@ +NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ +NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ +NEXT_LIMITS_H = @NEXT_LIMITS_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDDEF_H = @NEXT_STDDEF_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRINGS_H = @NEXT_STRINGS_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +POSUB = @POSUB@ +PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PRIPTR_PREFIX = @PRIPTR_PREFIX@ +PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ +PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_ACOSF = @REPLACE_ACOSF@ +REPLACE_ASINF = @REPLACE_ASINF@ +REPLACE_ATAN2F = @REPLACE_ATAN2F@ +REPLACE_ATANF = @REPLACE_ATANF@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CALLOC = @REPLACE_CALLOC@ +REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ +REPLACE_CBRTF = @REPLACE_CBRTF@ +REPLACE_CBRTL = @REPLACE_CBRTL@ +REPLACE_CEIL = @REPLACE_CEIL@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_COSF = @REPLACE_COSF@ +REPLACE_COSHF = @REPLACE_COSHF@ +REPLACE_CTIME = @REPLACE_CTIME@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_DUP = @REPLACE_DUP@ +REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_EXP2 = @REPLACE_EXP2@ +REPLACE_EXP2L = @REPLACE_EXP2L@ +REPLACE_EXPF = @REPLACE_EXPF@ +REPLACE_EXPM1 = @REPLACE_EXPM1@ +REPLACE_EXPM1F = @REPLACE_EXPM1F@ +REPLACE_FABSL = @REPLACE_FABSL@ +REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ +REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FDOPEN = @REPLACE_FDOPEN@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOOR = @REPLACE_FLOOR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FMA = @REPLACE_FMA@ +REPLACE_FMAF = @REPLACE_FMAF@ +REPLACE_FMAL = @REPLACE_FMAL@ +REPLACE_FMOD = @REPLACE_FMOD@ +REPLACE_FMODF = @REPLACE_FMODF@ +REPLACE_FMODL = @REPLACE_FMODL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FPURGE = @REPLACE_FPURGE@ +REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPF = @REPLACE_FREXPF@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FSTAT = @REPLACE_FSTAT@ +REPLACE_FSTATAT = @REPLACE_FSTATAT@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ +REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETDELIM = @REPLACE_GETDELIM@ +REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ +REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ +REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETPASS = @REPLACE_GETPASS@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_GMTIME = @REPLACE_GMTIME@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_HYPOT = @REPLACE_HYPOT@ +REPLACE_HYPOTF = @REPLACE_HYPOTF@ +REPLACE_HYPOTL = @REPLACE_HYPOTL@ +REPLACE_ILOGB = @REPLACE_ILOGB@ +REPLACE_ILOGBF = @REPLACE_ILOGBF@ +REPLACE_ILOGBL = @REPLACE_ILOGBL@ +REPLACE_ISATTY = @REPLACE_ISATTY@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_ITOLD = @REPLACE_ITOLD@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LINK = @REPLACE_LINK@ +REPLACE_LINKAT = @REPLACE_LINKAT@ +REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ +REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ +REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ +REPLACE_LOG = @REPLACE_LOG@ +REPLACE_LOG10 = @REPLACE_LOG10@ +REPLACE_LOG10F = @REPLACE_LOG10F@ +REPLACE_LOG10L = @REPLACE_LOG10L@ +REPLACE_LOG1P = @REPLACE_LOG1P@ +REPLACE_LOG1PF = @REPLACE_LOG1PF@ +REPLACE_LOG1PL = @REPLACE_LOG1PL@ +REPLACE_LOG2 = @REPLACE_LOG2@ +REPLACE_LOG2F = @REPLACE_LOG2F@ +REPLACE_LOG2L = @REPLACE_LOG2L@ +REPLACE_LOGB = @REPLACE_LOGB@ +REPLACE_LOGBF = @REPLACE_LOGBF@ +REPLACE_LOGBL = @REPLACE_LOGBL@ +REPLACE_LOGF = @REPLACE_LOGF@ +REPLACE_LOGL = @REPLACE_LOGL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MALLOC = @REPLACE_MALLOC@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKFIFO = @REPLACE_MKFIFO@ +REPLACE_MKNOD = @REPLACE_MKNOD@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_MKTIME = @REPLACE_MKTIME@ +REPLACE_MODF = @REPLACE_MODF@ +REPLACE_MODFF = @REPLACE_MODFF@ +REPLACE_MODFL = @REPLACE_MODFL@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ +REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ +REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ +REPLACE_NULL = @REPLACE_NULL@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_OPENAT = @REPLACE_OPENAT@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POPEN = @REPLACE_POPEN@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +REPLACE_PREAD = @REPLACE_PREAD@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ +REPLACE_PTSNAME = @REPLACE_PTSNAME@ +REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_PWRITE = @REPLACE_PWRITE@ +REPLACE_QSORT_R = @REPLACE_QSORT_R@ +REPLACE_RAISE = @REPLACE_RAISE@ +REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ +REPLACE_READ = @REPLACE_READ@ +REPLACE_READLINK = @REPLACE_READLINK@ +REPLACE_READLINKAT = @REPLACE_READLINKAT@ +REPLACE_REALLOC = @REPLACE_REALLOC@ +REPLACE_REALPATH = @REPLACE_REALPATH@ +REPLACE_REMAINDER = @REPLACE_REMAINDER@ +REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ +REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ +REPLACE_REMOVE = @REPLACE_REMOVE@ +REPLACE_RENAME = @REPLACE_RENAME@ +REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ +REPLACE_RMDIR = @REPLACE_RMDIR@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SINF = @REPLACE_SINF@ +REPLACE_SINHF = @REPLACE_SINHF@ +REPLACE_SLEEP = @REPLACE_SLEEP@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_SQRTF = @REPLACE_SQRTF@ +REPLACE_SQRTL = @REPLACE_SQRTL@ +REPLACE_STAT = @REPLACE_STAT@ +REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPNCPY = @REPLACE_STPNCPY@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ +REPLACE_STRFTIME = @REPLACE_STRFTIME@ +REPLACE_STRNCAT = @REPLACE_STRNCAT@ +REPLACE_STRNDUP = @REPLACE_STRNDUP@ +REPLACE_STRNLEN = @REPLACE_STRNLEN@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ +REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ +REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ +REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ +REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ +REPLACE_SYMLINK = @REPLACE_SYMLINK@ +REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ +REPLACE_TANF = @REPLACE_TANF@ +REPLACE_TANHF = @REPLACE_TANHF@ +REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ +REPLACE_TRUNC = @REPLACE_TRUNC@ +REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ +REPLACE_TRUNCF = @REPLACE_TRUNCF@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ +REPLACE_TZSET = @REPLACE_TZSET@ +REPLACE_UNLINK = @REPLACE_UNLINK@ +REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ +REPLACE_UNSETENV = @REPLACE_UNSETENV@ +REPLACE_USLEEP = @REPLACE_USLEEP@ +REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SED = @SED@ +SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDDEF_H = @STDDEF_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ +TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ +UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ +UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ +UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ +UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ +USE_ACL = @USE_ACL@ +USE_NLS = @USE_NLS@ +UUIDLIBS = @UUIDLIBS@ +VERSION = @VERSION@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ +WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ +WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ +WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +crypt_support = @crypt_support@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +gltests_WITNESS = @gltests_WITNESS@ +have_uuid = @have_uuid@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +@COMPILE_MDB2REC_FALSE@MDB2REC = +@COMPILE_MDB2REC_TRUE@MDB2REC = mdb2rec +COMMONSRC = recutl.h recutl.c +COMMONLIBS = $(top_builddir)/lib/librecutils.la \ + $(top_builddir)/src/librec.la $(am__append_1) +AM_CFLAGS = $(am__append_2) +AM_CPPFLAGS = -I$(top_builddir)/lib \ + -I$(top_srcdir)/lib -I$(top_srcdir)/src \ + -I$(top_srcdir)/libcsv -DLOCALEDIR=\"$(localedir)\" \ + -DMDB_DATETIME=$(MDB_DATETIME) + +recinf_SOURCES = $(COMMONSRC) \ + recinf.c + +recinf_LDADD = $(COMMONLIBS) +recsel_SOURCES = $(COMMONSRC) \ + recsel.c + +recsel_LDADD = $(COMMONLIBS) +recins_SOURCES = $(COMMONSRC) \ + recins.c + +recins_LDADD = $(COMMONLIBS) +recdel_SOURCES = $(COMMONSRC) \ + recdel.c + +recdel_LDADD = $(COMMONLIBS) +recset_SOURCES = $(COMMONSRC) \ + recset.c + +recset_LDADD = $(COMMONLIBS) +recfix_SOURCES = $(COMMONSRC) \ + recfix.c + +recfix_LDADD = $(COMMONLIBS) +recfmt_SOURCES = $(COMMONSRC) \ + recfmt.c + +recfmt_LDADD = $(COMMONLIBS) +csv2rec_SOURCES = $(COMMONSRC) \ + csv2rec.c + +csv2rec_LDADD = $(COMMONLIBS) \ + $(top_builddir)/libcsv/libcsv.la + +rec2csv_SOURCES = $(COMMONSRC) \ + rec2csv.c + +rec2csv_LDADD = $(COMMONLIBS) \ + $(top_builddir)/libcsv/libcsv.la + +mdb2rec_SOURCES = $(COMMONSRC) \ + mdb2rec.c + +mdb2rec_CFLAGS = $(GLIB_CFLAGS) +mdb2rec_LDADD = $(COMMONLIBS) $(MDBLIBS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu utils/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu utils/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +csv2rec$(EXEEXT): $(csv2rec_OBJECTS) $(csv2rec_DEPENDENCIES) $(EXTRA_csv2rec_DEPENDENCIES) + @rm -f csv2rec$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(csv2rec_OBJECTS) $(csv2rec_LDADD) $(LIBS) + +mdb2rec$(EXEEXT): $(mdb2rec_OBJECTS) $(mdb2rec_DEPENDENCIES) $(EXTRA_mdb2rec_DEPENDENCIES) + @rm -f mdb2rec$(EXEEXT) + $(AM_V_CCLD)$(mdb2rec_LINK) $(mdb2rec_OBJECTS) $(mdb2rec_LDADD) $(LIBS) + +rec2csv$(EXEEXT): $(rec2csv_OBJECTS) $(rec2csv_DEPENDENCIES) $(EXTRA_rec2csv_DEPENDENCIES) + @rm -f rec2csv$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(rec2csv_OBJECTS) $(rec2csv_LDADD) $(LIBS) + +recdel$(EXEEXT): $(recdel_OBJECTS) $(recdel_DEPENDENCIES) $(EXTRA_recdel_DEPENDENCIES) + @rm -f recdel$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(recdel_OBJECTS) $(recdel_LDADD) $(LIBS) + +recfix$(EXEEXT): $(recfix_OBJECTS) $(recfix_DEPENDENCIES) $(EXTRA_recfix_DEPENDENCIES) + @rm -f recfix$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(recfix_OBJECTS) $(recfix_LDADD) $(LIBS) + +recfmt$(EXEEXT): $(recfmt_OBJECTS) $(recfmt_DEPENDENCIES) $(EXTRA_recfmt_DEPENDENCIES) + @rm -f recfmt$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(recfmt_OBJECTS) $(recfmt_LDADD) $(LIBS) + +recinf$(EXEEXT): $(recinf_OBJECTS) $(recinf_DEPENDENCIES) $(EXTRA_recinf_DEPENDENCIES) + @rm -f recinf$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(recinf_OBJECTS) $(recinf_LDADD) $(LIBS) + +recins$(EXEEXT): $(recins_OBJECTS) $(recins_DEPENDENCIES) $(EXTRA_recins_DEPENDENCIES) + @rm -f recins$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(recins_OBJECTS) $(recins_LDADD) $(LIBS) + +recsel$(EXEEXT): $(recsel_OBJECTS) $(recsel_DEPENDENCIES) $(EXTRA_recsel_DEPENDENCIES) + @rm -f recsel$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(recsel_OBJECTS) $(recsel_LDADD) $(LIBS) + +recset$(EXEEXT): $(recset_OBJECTS) $(recset_DEPENDENCIES) $(EXTRA_recset_DEPENDENCIES) + @rm -f recset$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(recset_OBJECTS) $(recset_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csv2rec.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mdb2rec-mdb2rec.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mdb2rec-recutl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec2csv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recdel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recfix.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recfmt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recinf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recins.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recsel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recutl.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mdb2rec-recutl.o: recutl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -MT mdb2rec-recutl.o -MD -MP -MF $(DEPDIR)/mdb2rec-recutl.Tpo -c -o mdb2rec-recutl.o `test -f 'recutl.c' || echo '$(srcdir)/'`recutl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mdb2rec-recutl.Tpo $(DEPDIR)/mdb2rec-recutl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='recutl.c' object='mdb2rec-recutl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -c -o mdb2rec-recutl.o `test -f 'recutl.c' || echo '$(srcdir)/'`recutl.c + +mdb2rec-recutl.obj: recutl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -MT mdb2rec-recutl.obj -MD -MP -MF $(DEPDIR)/mdb2rec-recutl.Tpo -c -o mdb2rec-recutl.obj `if test -f 'recutl.c'; then $(CYGPATH_W) 'recutl.c'; else $(CYGPATH_W) '$(srcdir)/recutl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mdb2rec-recutl.Tpo $(DEPDIR)/mdb2rec-recutl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='recutl.c' object='mdb2rec-recutl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -c -o mdb2rec-recutl.obj `if test -f 'recutl.c'; then $(CYGPATH_W) 'recutl.c'; else $(CYGPATH_W) '$(srcdir)/recutl.c'; fi` + +mdb2rec-mdb2rec.o: mdb2rec.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -MT mdb2rec-mdb2rec.o -MD -MP -MF $(DEPDIR)/mdb2rec-mdb2rec.Tpo -c -o mdb2rec-mdb2rec.o `test -f 'mdb2rec.c' || echo '$(srcdir)/'`mdb2rec.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mdb2rec-mdb2rec.Tpo $(DEPDIR)/mdb2rec-mdb2rec.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mdb2rec.c' object='mdb2rec-mdb2rec.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -c -o mdb2rec-mdb2rec.o `test -f 'mdb2rec.c' || echo '$(srcdir)/'`mdb2rec.c + +mdb2rec-mdb2rec.obj: mdb2rec.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -MT mdb2rec-mdb2rec.obj -MD -MP -MF $(DEPDIR)/mdb2rec-mdb2rec.Tpo -c -o mdb2rec-mdb2rec.obj `if test -f 'mdb2rec.c'; then $(CYGPATH_W) 'mdb2rec.c'; else $(CYGPATH_W) '$(srcdir)/mdb2rec.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mdb2rec-mdb2rec.Tpo $(DEPDIR)/mdb2rec-mdb2rec.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mdb2rec.c' object='mdb2rec-mdb2rec.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -c -o mdb2rec-mdb2rec.obj `if test -f 'mdb2rec.c'; then $(CYGPATH_W) 'mdb2rec.c'; else $(CYGPATH_W) '$(srcdir)/mdb2rec.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS + +.PRECIOUS: Makefile + + +# End of Makefile.am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/devspec.en_US/project/recutils/utils/csv2rec b/devspec.en_US/project/recutils/utils/csv2rec new file mode 100755 index 0000000..483e168 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/csv2rec @@ -0,0 +1,228 @@ +#! /bin/sh + +# csv2rec - temporary wrapper script for .libs/csv2rec +# Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-2 +# +# The csv2rec program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command="(cd /mnt/lfs/build/recutils/recutils-1.8/utils; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/home/devenkong/bin:/home/devenkong/.local/bin:/home/devenkong/bin:/home/devenkong/.local/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/home/devenkong/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/; export PATH; gcc -g -O2 -o \$progdir/\$file recutl.o csv2rec.o ../lib/.libs/librecutils.a -lm ../src/.libs/librec.so ../libcsv/.libs/libcsv.a -Wl,-rpath -Wl,/mnt/lfs/build/recutils/recutils-1.8/src/.libs)" + +# This environment variable determines our operation mode. +if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then + # install mode needs the following variables: + generated_by_libtool_version='2.4.6' + notinst_deplibs=' ../src/librec.la' +else + # When we are sourced in execute mode, $file and $ECHO are already set. + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + file="$0" + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + ECHO="printf %s\\n" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string --lt- +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's ../libtool value, followed by no. +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=$0 + shift + for lt_opt + do + case "$lt_opt" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%/[^/]*$%%'` + test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=. + lt_dump_F=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%^.*/%%'` + cat "$lt_dump_D/$lt_dump_F" + exit 0 + ;; + --lt-*) + $ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n "$lt_option_debug"; then + echo "csv2rec:csv2rec:$LINENO: libtool wrapper (GNU libtool) 2.4.6 Debian-2.4.6-2" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + $ECHO "csv2rec:csv2rec:$LINENO: newargv[$lt_dump_args_N]: $lt_arg" + lt_dump_args_N=`expr $lt_dump_args_N + 1` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ + + if test -n "$lt_option_debug"; then + $ECHO "csv2rec:csv2rec:$LINENO: newargv[0]: $progdir/$program" 1>&2 + func_lt_dump_args ${1+"$@"} 1>&2 + fi + exec "$progdir/$program" ${1+"$@"} + + $ECHO "$0: cannot exec $program $*" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from $@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case " $* " in + *\ --lt-*) + for lt_wr_arg + do + case $lt_wr_arg in + --lt-*) ;; + *) set x "$@" "$lt_wr_arg"; shift;; + esac + shift + done ;; + esac + func_exec_program_core ${1+"$@"} +} + + # Parse options + func_parse_lt_options "$0" ${1+"$@"} + + # Find the directory that this script lives in. + thisdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + test "x$thisdir" = "x$file" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'` + while test -n "$file"; do + destdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + + # If there was a directory component, then change thisdir. + if test "x$destdir" != "x$file"; then + case "$destdir" in + [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;; + *) thisdir="$thisdir/$destdir" ;; + esac + fi + + file=`$ECHO "$file" | /bin/sed 's%^.*/%%'` + file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no + if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then + # special case for '.' + if test "$thisdir" = "."; then + thisdir=`pwd` + fi + # remove .libs from thisdir + case "$thisdir" in + *[\\/].libs ) thisdir=`$ECHO "$thisdir" | /bin/sed 's%[\\/][^\\/]*$%%'` ;; + .libs ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=`cd "$thisdir" && pwd` + test -n "$absdir" && thisdir="$absdir" + + program=lt-'csv2rec' + progdir="$thisdir/.libs" + + if test ! -f "$progdir/$program" || + { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \ + test "X$file" != "X$progdir/$program"; }; then + + file="$$-$program" + + if test ! -d "$progdir"; then + mkdir "$progdir" + else + rm -f "$progdir/$file" + fi + + # relink executable if necessary + if test -n "$relink_command"; then + if relink_command_output=`eval $relink_command 2>&1`; then : + else + $ECHO "$relink_command_output" >&2 + rm -f "$progdir/$file" + exit 1 + fi + fi + + mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null || + { rm -f "$progdir/$program"; + mv -f "$progdir/$file" "$progdir/$program"; } + rm -f "$progdir/$file" + fi + + if test -f "$progdir/$program"; then + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + # Run the actual program with our arguments. + func_exec_program ${1+"$@"} + fi + else + # The program doesn't exist. + $ECHO "$0: error: '$progdir/$program' does not exist" 1>&2 + $ECHO "This script is just a wrapper for $program." 1>&2 + $ECHO "See the libtool documentation for more information." 1>&2 + exit 1 + fi +fi diff --git a/devspec.en_US/project/recutils/utils/csv2rec.c b/devspec.en_US/project/recutils/utils/csv2rec.c new file mode 100755 index 0000000..fbb013f --- /dev/null +++ b/devspec.en_US/project/recutils/utils/csv2rec.c @@ -0,0 +1,414 @@ +/* -*- mode: C -*- + * + * File: csv2rec.c + * Date: Fri Aug 20 16:35:25 2010 + * + * GNU recutils - csv to rec converter. + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <getopt.h> +#include <string.h> +#include <stdlib.h> +#include <xalloc.h> +#include <gettext.h> +#define _(str) gettext (str) + +#include <csv.h> +#include <rec.h> +#include <recutl.h> + +/* Forward declarations. */ +static void parse_args (int argc, char **argv); +static rec_db_t process_csv (void); +static int is_space (unsigned char c); +static int is_term (unsigned char c); +static void field_cb (void *s, size_t len, void *data); +static void record_cb (int c, void *data); + +/* + * Types + */ + +struct csv2rec_ctx +{ + rec_db_t db; + rec_rset_t rset; + rec_record_t record; + + size_t num_fields; + size_t lineno; + +#define ALLOC_FIELDS 256 + bool header_p; + size_t num_field_names; + char **field_names; +}; + +/* + * Global variables + */ + +char *csv2rec_record_type = NULL; +char *csv2rec_csv_file = NULL; +bool csv2rec_strict = false; +bool csv2rec_omit_empty = false; + +/* + * Command line options management + */ + +enum + { + COMMON_ARGS, + RECORD_TYPE_ARG, + STRICT_ARG, + OMIT_EMPTY_ARG + }; + +static const struct option GNU_longOptions[] = + { + COMMON_LONG_ARGS, + {"type", required_argument, NULL, RECORD_TYPE_ARG}, + {"strict", no_argument, NULL, STRICT_ARG}, + {"omit-empty", no_argument, NULL, OMIT_EMPTY_ARG}, + {NULL, 0, NULL, 0} + }; + +/* + * Functions. + */ + +void +recutl_print_help (void) +{ + /* TRANSLATORS: --help output, csv2rec synopsis. + no-wrap */ + printf (_("\ +Usage: csv2rec [OPTIONS]... [CSV_FILE]\n")); + + /* TRANSLATORS: --help output, csv2rec short description. + no-wrap */ + fputs (_("\ +Convert csv data into rec data.\n"), stdout); + + puts (""); + /* TRANSLATORS: --help output, csv2rec options. + no-wrap */ + fputs (_("\ + -t, --type=TYPE type name for the converted records; if this\n\ + parameter is ommited then no type is used.\n\ + -s, --strict be strict parsing the csv file.\n\ + -e, --omit-empty omit empty fields.\n"), stdout); + + recutl_print_help_common (); + puts (""); + recutl_print_help_footer (); +} + +static void +parse_args (int argc, + char **argv) +{ + int ret; + char c; + + while ((ret = getopt_long (argc, + argv, + "t:se", + GNU_longOptions, + NULL)) != -1) + { + c = ret; + switch (c) + { + COMMON_ARGS_CASES + case RECORD_TYPE_ARG: + case 't': + { + csv2rec_record_type = xstrdup (optarg); + break; + } + case STRICT_ARG: + case 's': + { + csv2rec_strict = true; + break; + } + case OMIT_EMPTY_ARG: + case 'e': + { + csv2rec_omit_empty = true; + break; + } + default: + { + exit (EXIT_FAILURE); + } + } + } + + /* Read the name of the csv file, if any. */ + if (optind < argc) + { + if ((argc - optind) != 1) + { + recutl_print_help (); + exit (EXIT_FAILURE); + } + + csv2rec_csv_file = argv[optind++]; + } +} + +static int +is_space (unsigned char c) +{ + return (c == CSV_SPACE) || (c == CSV_TAB); +} + +static int +is_term (unsigned char c) +{ + return (c == CSV_CR) || (c == CSV_LF); +} + +void +field_cb (void *s, size_t len, void *data) +{ + char *str; + char *field_name; + rec_field_t field; + struct csv2rec_ctx *ctx; + size_t i; + + ctx = (struct csv2rec_ctx *) data; + str = xmalloc (len + 1); + memcpy (str, s, len); + str[len] = '\0'; + + if (ctx->header_p) + { + /* Add a new field name to ctx.field_names. */ + + if ((ctx->num_field_names % ALLOC_FIELDS) == 0) + ctx->field_names = + realloc (ctx->field_names, ((ctx->num_field_names / ALLOC_FIELDS) + 1) * (sizeof(char *) * ALLOC_FIELDS)); + + /* Normalize the name: spaces and tabs are turned into dashes + '_'. */ + for (i = 0; i < strlen (str); i++) + { + if ((str[i] == ' ') || (str[i] == '\t')) + { + str[i] = '_'; + } + } + + /* Verify that it is a valid field name. */ + field_name = str; + if (!rec_field_name_p (field_name)) + { + recutl_fatal (_("invalid field name '%s' in header\n"), + str); + } + ctx->field_names[ctx->num_field_names++] = str; + } + else + { + /* Create a new field and insert it in the current record. */ + + if (!ctx->record) + { + /* Create a new record. */ + ctx->record = rec_record_new (); + if (!ctx->record) + recutl_out_of_memory (); + } + + if (!csv2rec_omit_empty || (strlen(str) > 0)) + { + if (ctx->num_fields > ctx->num_field_names) + { + char *source = csv2rec_csv_file; + + if (!source) + { + source = "stdin"; + } + + fprintf (stderr, + _("%s: %lu: this line contains %lu fields, but %lu header fields were read\n"), + source, + ctx->lineno, ctx->num_field_names, ctx->num_fields); + exit (EXIT_FAILURE); + } + field = rec_field_new (ctx->field_names[ctx->num_fields], str); + rec_mset_append (rec_record_mset (ctx->record), MSET_FIELD, (void *) field, MSET_ANY); + } + + ctx->num_fields++; + } +} + +void +record_cb (int c, void *data) +{ + struct csv2rec_ctx *ctx; + ctx = (struct csv2rec_ctx *) data; + + ctx->lineno++; + + if (ctx->header_p) + { + ctx->header_p = false; + } + else + { + if (!ctx->rset) + { + /* Create a new record set. */ + ctx->rset = rec_rset_new (); + if (!ctx->rset) + recutl_out_of_memory (); + + /* Add a type, if needed. */ + if (csv2rec_record_type) + { + rec_rset_set_type (ctx->rset, csv2rec_record_type); + } + + /* Add it to the database. */ + if (!ctx->db) + { + ctx->db = rec_db_new (); + if (!ctx->db) + recutl_out_of_memory (); + } + rec_db_insert_rset (ctx->db, ctx->rset, rec_db_size (ctx->db)); + } + + /* Add the current record to the record set. */ + rec_mset_append (rec_rset_mset (ctx->rset), MSET_RECORD, (void *) ctx->record, MSET_ANY); + ctx->record = NULL; + + /* Reset the field counter. */ + ctx->num_fields = 0; + } +} + +static rec_db_t +process_csv (void) +{ + struct csv2rec_ctx ctx; + FILE *in; + struct csv_parser p; + unsigned char options = 0; + char buf[1024]; + size_t bytes_read = 0; + + /* Initialize the data in the context. */ + ctx.db = NULL; + ctx.rset = NULL; + ctx.record = NULL; + ctx.header_p = true; + ctx.field_names = NULL; + ctx.num_field_names = 0; + ctx.num_fields = 0; + ctx.lineno = 0; + + /* Set the files to read/write from/to. + + If a filename was specified, read the csv file from there. + Otherwise use the standard input. The output is written to the + standard output in any case. */ + if (csv2rec_csv_file) + { + if (!(in = fopen (csv2rec_csv_file, "r"))) + { + recutl_fatal (_("cannot read file %s\n"), csv2rec_csv_file); + } + } + else + { + in = stdin; + } + + /* Initialize the csv library. */ + if (csv_init (&p, options) != 0) + { + recutl_fatal (_("failed to initialize csv parser\n")); + } + + /* Set some properties of the parser. */ + if (csv2rec_strict) + { + options |= CSV_STRICT; + csv_set_opts (&p, options); + } + + csv_set_space_func (&p, is_space); + csv_set_term_func (&p, is_term); + + /* Parse the input file in chunks of data. */ + while ((bytes_read = fread (buf, 1, 1024, in)) > 0) + { + if (csv_parse (&p, buf, bytes_read, field_cb, record_cb, &ctx) != bytes_read) + { + recutl_fatal (_("error while parsing CSV file: %s\n"), + csv_strerror (csv_error (&p))); + } + + } + + return ctx.db; +} + +int +main (int argc, char *argv[]) +{ + int ret; + rec_db_t db; + rec_writer_t writer; + + recutl_init ("csv2rec"); + + parse_args (argc, argv); + db = process_csv (); + ret = EXIT_SUCCESS; + + if (db) + { + writer = rec_writer_new (stdout); + rec_write_db (writer, db); + + rec_writer_destroy (writer); + rec_db_destroy (db); + } + else + { + ret = EXIT_FAILURE; + } + + return ret; +} + +/* End of csv2rec.c */ diff --git a/devspec.en_US/project/recutils/utils/mdb2rec.c b/devspec.en_US/project/recutils/utils/mdb2rec.c new file mode 100755 index 0000000..7e221d7 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/mdb2rec.c @@ -0,0 +1,553 @@ +/* -*- mode: C -*- + * + * File: mdb2rec.c + * Date: Fri Aug 20 22:46:31 2010 + * + * GNU recutils - mdb to rec converter. + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <getopt.h> +#include <string.h> +#include <stdlib.h> +#include <ctype.h> +#include <xalloc.h> +#include <gettext.h> +#define _(str) gettext (str) + +#include <glib.h> +#include <mdbtools.h> + +#include <rec.h> +#include <recutl.h> + +/* Forward declarations. */ +static void parse_args (int argc, char **argv); +static rec_db_t process_mdb (void); +static rec_rset_t process_table (MdbCatalogEntry *entry); +static char *get_field_name (MdbHandle *mdb, const char *table_name, const char *col_name); +static void get_relationships (MdbHandle *mdb); + +/* + * Data types + */ + +struct relationship_s +{ + char *table; + char *column; + char *referenced_table; + char *referenced_column; +}; + +/* + * Global variables + */ + +char *mdb2rec_mdb_file = NULL; +char *mdb2rec_mdb_table = NULL; +bool mdb2rec_include_system = false; +bool mdb2rec_keep_empty_fields = false; +bool mdb2rec_list_tables = false; +struct relationship_s *relationships; +size_t num_relationships = 0; + +/* + * Command line options management + */ + +enum + { + COMMON_ARGS, + SYSTEM_TABLES_ARG, + KEEP_EMPTY_FIELDS_ARG, + LIST_TABLES_ARG + }; + +static const struct option GNU_longOptions[] = + { + COMMON_LONG_ARGS, + {"system-tables", no_argument, NULL, SYSTEM_TABLES_ARG}, + {"keep-empty-fields", no_argument, NULL, KEEP_EMPTY_FIELDS_ARG}, + {"list-tables", no_argument, NULL, LIST_TABLES_ARG}, + {NULL, 0, NULL, 0} + }; + +/* + * Functions. + */ + +void +recutl_print_help (void) +{ + /* TRANSLATORS: --help output, mdb2rec synopsis. + no-wrap */ + printf (_("\ +Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n")); + + /* TRANSLATORS: --help output, mdb2rec short description. + no-wrap */ + fputs (_("\ +Convert an mdb file into a rec file.\n"), stdout); + + puts (""); + /* TRANSLATORS: --help output, mdb2rec options. + no-wrap */ + fputs (_("\ + -s, --system-tables include system tables.\n\ + -e, --keep-empty-fields don't prune empty fields in the rec\n\ + output.\n\ + -l, --list-tables dump a list of the table names contained\n\ + in the mdb file.\n"), + stdout); + + recutl_print_help_common (); + puts (""); + recutl_print_help_footer (); +} + +static void +parse_args (int argc, + char **argv) +{ + int ret; + char c; + + while ((ret = getopt_long (argc, + argv, + "sel", + GNU_longOptions, + NULL)) != -1) + { + c = ret; + switch (c) + { + COMMON_ARGS_CASES + case SYSTEM_TABLES_ARG: + case 's': + { + mdb2rec_include_system = true; + break; + } + case KEEP_EMPTY_FIELDS_ARG: + case 'e': + { + mdb2rec_keep_empty_fields = true; + break; + } + case LIST_TABLES_ARG: + case 'l': + { + mdb2rec_list_tables = true; + break; + } + default: + { + exit (EXIT_FAILURE); + } + } + } + + /* Read the name of the mdb file. */ + if ((argc - optind) > 2) + { + recutl_print_help (); + exit (EXIT_FAILURE); + } + else + { + mdb2rec_mdb_file = argv[optind++]; + + if ((argc - optind) > 0) + { + mdb2rec_mdb_table = argv[optind++]; + } + } +} + +static void +get_relationships (MdbHandle *mdb) +{ + char *bound[4]; + MdbTableDef *table; + size_t i; + + table = mdb_read_table_by_name (mdb, + "MsysRelationships", + MDB_TABLE); + if ((!table) || (table->num_rows == 0)) + { + return; + } + + mdb_read_columns (table); + for (i = 0; i < 4; i++) + { + bound[i] = xmalloc (MDB_BIND_SIZE); + } + + mdb_bind_column_by_name (table, "szColumn", bound[0], NULL); + mdb_bind_column_by_name (table, "szObject", bound[1], NULL); + mdb_bind_column_by_name (table, "szReferencedColumn", bound[2], NULL); + mdb_bind_column_by_name (table, "szReferencedObject", bound[3], NULL); + mdb_rewind_table (table); + + num_relationships = table->num_rows; + relationships = xmalloc (sizeof (struct relationship_s) * num_relationships); + + i = 0; + while (mdb_fetch_row (table)) + { + relationships[i].column = xstrdup (bound[0]); + relationships[i].table = xstrdup (bound[1]); + relationships[i].referenced_column = xstrdup (bound[2]); + relationships[i].referenced_table = xstrdup (bound[3]); + i++; + } +} + +static char * +get_field_name (MdbHandle *mdb, + const char *table_name, + const char *col_name) +{ + char *field_name; + char *referenced_table; + char *referenced_column; + size_t i; + + /* If this field is a relationship to other table, build a compound + field name. */ + + referenced_table = NULL; + referenced_column = NULL; + for (i = 0; i < num_relationships; i++) + { + if ((strcmp (relationships[i].table, table_name) == 0) + && (strcmp (relationships[i].column, col_name) == 0)) + { + referenced_table = + rec_field_name_normalise (relationships[i].referenced_table); + if (!referenced_table) + { + recutl_fatal (_("failed to normalise record type name %s\n"), + relationships[i].referenced_table); + } + + referenced_column = + rec_field_name_normalise (relationships[i].referenced_column); + if (!referenced_column) + { + recutl_fatal (_("failed to normalise field name %s\n"), + relationships[i].referenced_column); + } + + break; + } + } + + field_name = rec_field_name_normalise (col_name); + if (!field_name) + { + recutl_fatal (_("failed to normalise field name %s\n"), + table_name); + } + + if (referenced_table && referenced_column) + { + /* TODO: handle foreign keys. */ + } + + return field_name; +} + +static rec_rset_t +process_table (MdbCatalogEntry *entry) +{ + rec_rset_t rset; + MdbTableDef *table; + MdbHandle *mdb; + size_t i; + MdbColumn *col; + char *table_name; + char *column_name; + char *field_name; + char *field_value; + char **bound_values; + char *normalised; + int *bound_lens; +#define TYPE_VALUE_SIZE 256 + char type_value[TYPE_VALUE_SIZE]; + rec_record_t record; + rec_field_t field; + + mdb = entry->mdb; + table_name = entry->object_name; + table = mdb_read_table (entry); + + /* Create the record set. */ + rset = rec_rset_new (); + if (!rset) + recutl_out_of_memory (); + + /* Create the record descriptor and add the %rec: entry. */ + field_name = rec_field_name_normalise (table_name); + if (!field_name) + { + recutl_fatal (_("failed to normalise record type name %s\n"), + table_name); + } + + record = rec_record_new (); + field = rec_field_new ("%rec", field_name); + rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY); + free (field_name); + + /* Get the columns of the table. */ + mdb_read_columns (table); + + /* Loop on the columns. We will define the key and the types. */ + for (i = 0; i < table->num_cols; i++) + { + col = g_ptr_array_index (table->columns, i); + column_name = col->name; + type_value[0] = 0; + normalised = rec_field_name_normalise (column_name); + if (!normalised) + { + recutl_fatal (_("failed to normalise the field name %s\n"), + column_name); + } + + /* Emit a field type specification. */ + switch (col->col_type) + { + case MDB_BOOL: + { + snprintf (type_value, TYPE_VALUE_SIZE, + "%s bool", normalised); + break; + } + case MDB_BYTE: + { + snprintf (type_value, TYPE_VALUE_SIZE, + "%s range 256", normalised); + break; + } + case MDB_INT: + case MDB_LONGINT: + case MDB_NUMERIC: + { + snprintf (type_value, TYPE_VALUE_SIZE, + "%s int", normalised); + break; + } + case MDB_MONEY: + case MDB_FLOAT: + case MDB_DOUBLE: + { + snprintf (type_value, TYPE_VALUE_SIZE, + "%s real", normalised); + break; + } + case MDB_DATETIME: + { + snprintf (type_value, TYPE_VALUE_SIZE, + "%s date", normalised); + break; + } + case MDB_TEXT: + { + if (col->col_size > 0) + { + snprintf (type_value, TYPE_VALUE_SIZE, + "%s size %d", normalised, col->col_size); + } + break; + } + case MDB_REPID: + case MDB_MEMO: + case MDB_OLE: + default: + { + break; + } + } + + if (type_value[0] != 0) + { + /* Insert a type field for this column. */ + field = rec_field_new ("%type", type_value); + rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY); + } + } + + rec_rset_set_descriptor (rset, record); + + /* Add the records for this table. */ + mdb_rewind_table (table); + + bound_values = xmalloc (table->num_cols * sizeof(char *)); + bound_lens = xmalloc(table->num_cols * sizeof(int)); + for (i = 0; i < table->num_cols; i++) + { + bound_values[i] = xmalloc (MDB_BIND_SIZE); + mdb_bind_column (table, i+1, bound_values[i], &bound_lens[i]); + } + + while (mdb_fetch_row (table)) + { + record = rec_record_new (); + if (!record) + recutl_out_of_memory (); + + for (i = 0; i < table->num_cols; i++) + { + col = g_ptr_array_index (table->columns, i); + + if (col->col_type == MDB_OLE) + { + continue; + } + + /* Compute the value of the field. */ + field_value = xmalloc (bound_lens[i] + 1); + memcpy (field_value, bound_values[i], bound_lens[i]); + field_value[bound_lens[i]] = '\0'; + + if (mdb2rec_keep_empty_fields || (strlen (field_value) > 0)) + { + /* Create the field and append it into the record. */ + field = rec_field_new (get_field_name (mdb, table_name, column_name), + field_value); + if (!field) + { + recutl_fatal (_("invalid field name %s.\n"), column_name); + } + + rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY); + } + + free (field_value); + } + + rec_record_set_container (record, rset); + rec_mset_append (rec_rset_mset (rset), MSET_RECORD, (void *) record, MSET_ANY); + } + + mdb_free_tabledef (table); + + return rset; +} + +static rec_db_t +process_mdb (void) +{ + rec_db_t db; + MdbHandle *mdb; + MdbCatalogEntry *entry; + int i; + char *table_name; + + /* Create the rec database. */ + db = rec_db_new (); + if (!db) + recutl_out_of_memory (); + + /* Initialize libmdb and open the input file. */ + mdb_init(); + mdb_set_date_fmt ("%Y-%m-%dT%H:%M:%S%z"); /* ISO 8601 */ + + mdb = mdb_open (mdb2rec_mdb_file, MDB_NOFLAGS); + if (!mdb) + { + recutl_fatal (_("could not open file %s\n"), + mdb2rec_mdb_file); + } + + /* Read the catalog. */ + if (!mdb_read_catalog (mdb, MDB_TABLE)) + { + recutl_fatal (_("file does not appear to be an Access database\n")); + } + + /* Read relationships from the database. Relationships in mdb files + are stored in the MSysRelationships table. */ + get_relationships (mdb); + + /* Iterate on the catalogs. */ + for (i = 0; i < mdb->num_catalog; i++) + { + entry = g_ptr_array_index (mdb->catalog, i); + + table_name = rec_field_name_normalise (entry->object_name); + + if ((entry->object_type == MDB_TABLE) + && (mdb_is_user_table (entry) || mdb2rec_include_system) + && (!mdb2rec_mdb_table || (strcmp (mdb2rec_mdb_table, table_name) == 0))) + { + if (mdb2rec_list_tables) + { + fprintf (stdout, "%s\n", table_name); + } + else + { + rec_db_insert_rset (db, + process_table (entry), + rec_db_size (db)); + } + } + } + + return db; +} + +int +main (int argc, char *argv[]) +{ + int ret; + rec_db_t db; + rec_writer_t writer; + + recutl_init ("mdb2rec"); + + parse_args (argc, argv); + db = process_mdb (); + + if (db) + { + writer = rec_writer_new (stdout); + rec_write_db (writer, db); + + rec_writer_destroy (writer); + rec_db_destroy (db); + + ret = EXIT_SUCCESS; + } + else + { + ret = EXIT_FAILURE; + } + + return ret; +} + +/* End of mdb2rec.c */ diff --git a/devspec.en_US/project/recutils/utils/rec2csv b/devspec.en_US/project/recutils/utils/rec2csv new file mode 100755 index 0000000..80b02f2 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/rec2csv @@ -0,0 +1,228 @@ +#! /bin/sh + +# rec2csv - temporary wrapper script for .libs/rec2csv +# Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-2 +# +# The rec2csv program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command="(cd /mnt/lfs/build/recutils/recutils-1.8/utils; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/home/devenkong/bin:/home/devenkong/.local/bin:/home/devenkong/bin:/home/devenkong/.local/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/home/devenkong/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/; export PATH; gcc -g -O2 -o \$progdir/\$file recutl.o rec2csv.o ../lib/.libs/librecutils.a -lm ../src/.libs/librec.so ../libcsv/.libs/libcsv.a -Wl,-rpath -Wl,/mnt/lfs/build/recutils/recutils-1.8/src/.libs)" + +# This environment variable determines our operation mode. +if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then + # install mode needs the following variables: + generated_by_libtool_version='2.4.6' + notinst_deplibs=' ../src/librec.la' +else + # When we are sourced in execute mode, $file and $ECHO are already set. + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + file="$0" + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + ECHO="printf %s\\n" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string --lt- +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's ../libtool value, followed by no. +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=$0 + shift + for lt_opt + do + case "$lt_opt" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%/[^/]*$%%'` + test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=. + lt_dump_F=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%^.*/%%'` + cat "$lt_dump_D/$lt_dump_F" + exit 0 + ;; + --lt-*) + $ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n "$lt_option_debug"; then + echo "rec2csv:rec2csv:$LINENO: libtool wrapper (GNU libtool) 2.4.6 Debian-2.4.6-2" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + $ECHO "rec2csv:rec2csv:$LINENO: newargv[$lt_dump_args_N]: $lt_arg" + lt_dump_args_N=`expr $lt_dump_args_N + 1` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ + + if test -n "$lt_option_debug"; then + $ECHO "rec2csv:rec2csv:$LINENO: newargv[0]: $progdir/$program" 1>&2 + func_lt_dump_args ${1+"$@"} 1>&2 + fi + exec "$progdir/$program" ${1+"$@"} + + $ECHO "$0: cannot exec $program $*" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from $@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case " $* " in + *\ --lt-*) + for lt_wr_arg + do + case $lt_wr_arg in + --lt-*) ;; + *) set x "$@" "$lt_wr_arg"; shift;; + esac + shift + done ;; + esac + func_exec_program_core ${1+"$@"} +} + + # Parse options + func_parse_lt_options "$0" ${1+"$@"} + + # Find the directory that this script lives in. + thisdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + test "x$thisdir" = "x$file" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'` + while test -n "$file"; do + destdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + + # If there was a directory component, then change thisdir. + if test "x$destdir" != "x$file"; then + case "$destdir" in + [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;; + *) thisdir="$thisdir/$destdir" ;; + esac + fi + + file=`$ECHO "$file" | /bin/sed 's%^.*/%%'` + file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no + if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then + # special case for '.' + if test "$thisdir" = "."; then + thisdir=`pwd` + fi + # remove .libs from thisdir + case "$thisdir" in + *[\\/].libs ) thisdir=`$ECHO "$thisdir" | /bin/sed 's%[\\/][^\\/]*$%%'` ;; + .libs ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=`cd "$thisdir" && pwd` + test -n "$absdir" && thisdir="$absdir" + + program=lt-'rec2csv' + progdir="$thisdir/.libs" + + if test ! -f "$progdir/$program" || + { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \ + test "X$file" != "X$progdir/$program"; }; then + + file="$$-$program" + + if test ! -d "$progdir"; then + mkdir "$progdir" + else + rm -f "$progdir/$file" + fi + + # relink executable if necessary + if test -n "$relink_command"; then + if relink_command_output=`eval $relink_command 2>&1`; then : + else + $ECHO "$relink_command_output" >&2 + rm -f "$progdir/$file" + exit 1 + fi + fi + + mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null || + { rm -f "$progdir/$program"; + mv -f "$progdir/$file" "$progdir/$program"; } + rm -f "$progdir/$file" + fi + + if test -f "$progdir/$program"; then + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + # Run the actual program with our arguments. + func_exec_program ${1+"$@"} + fi + else + # The program doesn't exist. + $ECHO "$0: error: '$progdir/$program' does not exist" 1>&2 + $ECHO "This script is just a wrapper for $program." 1>&2 + $ECHO "See the libtool documentation for more information." 1>&2 + exit 1 + fi +fi diff --git a/devspec.en_US/project/recutils/utils/rec2csv.c b/devspec.en_US/project/recutils/utils/rec2csv.c new file mode 100755 index 0000000..37cfae8 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/rec2csv.c @@ -0,0 +1,359 @@ +/* -*- mode: C -*- + * + * File: rec2csv.c + * Date: Mon Jan 31 22:12:29 2011 + * + * GNU recutils - rec to csv converter. + * + */ + +/* Copyright (C) 2011-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <getopt.h> +#include <string.h> +#include <stdlib.h> +#include <xalloc.h> +#include <gettext.h> +#define _(str) gettext (str) + +#include <csv.h> +#include <rec.h> +#include <recutl.h> + +/* Forward declarations. */ +static void rec2csv_parse_args (int argc, char **argv); +static bool rec2csv_process_data (rec_db_t db); +static rec_fex_t rec2csv_determine_fields (rec_rset_t rset); +static void rec2csv_generate_csv (rec_rset_t rset, rec_fex_t fex); + +/* + * Types + */ + +/* + * Global variables + */ + +char *rec2csv_record_type = NULL; +rec_fex_t rec2csv_sort_by_fields = NULL; +char rec2csv_delim = ','; + +/* + * Command line options management + */ + +enum + { + COMMON_ARGS, + RECORD_TYPE_ARG, + SORT_ARG + }; + +static const struct option GNU_longOptions[] = + { + COMMON_LONG_ARGS, + {"type", required_argument, NULL, RECORD_TYPE_ARG}, + {"sort", required_argument, NULL, SORT_ARG}, + {NULL, 0, NULL, 0} + }; + + +/* + * Functions. + */ + +void +recutl_print_help (void) +{ + /* TRANSLATORS: --help output, rec2csv synopsis. + no-wrap */ + printf (_("\ +Usage: rec2csv [OPTIONS]... [REC_FILE]\n")); + + /* TRANSLATORS: --help output, rec2csv short description. + no-wrap */ + fputs (_("\ +Convert rec data into csv data.\n"), stdout); + + puts (""); + /* TRANSLATORS: --help output, rec2csv options. + no-wrap */ + fputs (_("\ + -d, --delim=char sets the deliminator (default ',')\n\ + -t, --type=TYPE record set to convert to csv; if this parameter\n\ + is omitted then the default record set is used\n\ + -S, --sort=FIELDS sort the output by the specified fields.\n"), + stdout); + + recutl_print_help_common (); + puts (""); + recutl_print_help_footer (); +} + +static void +rec2csv_parse_args (int argc, + char **argv) +{ + int ret; + char c; + + while ((ret = getopt_long (argc, + argv, + "t:S:d:", + GNU_longOptions, + NULL)) != -1) + { + c = ret; + switch (c) + { + COMMON_ARGS_CASES + case RECORD_TYPE_ARG: + case 'd': + { + rec2csv_delim = optarg[0]; + break; + } + case 't': + { + rec2csv_record_type = xstrdup (optarg); + break; + } + case SORT_ARG: + case 'S': + { + if (rec2csv_sort_by_fields) + { + recutl_fatal (_("only one list of fields can be specified as a sorting criteria.\n")); + } + + /* Parse the field name. */ + + if (!rec_fex_check (optarg, REC_FEX_CSV)) + { + recutl_fatal (_("invalid field name list in -S.\n")); + } + + rec2csv_sort_by_fields = rec_fex_new (optarg, REC_FEX_CSV); + if (!rec2csv_sort_by_fields) + { + recutl_fatal (_("internal error creating fex.\n")); + } + + break; + } + default: + { + exit (EXIT_FAILURE); + } + } + } +} + +static void +rec2csv_generate_csv (rec_rset_t rset, + rec_fex_t fex) +{ + rec_mset_iterator_t iter; + rec_fex_elem_t fex_elem; + rec_record_t record; + rec_field_t field; + char *field_name; + char *tmp; + size_t i; + + /* Generate the row with headers. */ + for (i = 0; i < rec_fex_size (fex); i++) + { + if (i != 0) + { + putc (rec2csv_delim, stdout); + } + + fex_elem = rec_fex_get (fex, i); + field_name = xstrdup (rec_fex_elem_field_name (fex_elem)); + + /* The header is FNAME or FNAME_N where N is the index starting + at 1. Note that we shall remove the trailing ':', if any. */ + + if (field_name[strlen(field_name)-1] == ':') + { + field_name[strlen(field_name)-1] = '\0'; + } + + + if (rec_fex_elem_min (fex_elem) != 0) + { + if (asprintf (&tmp, "%s_%d", + field_name, + rec_fex_elem_min (fex_elem) + 1) == -1) + recutl_out_of_memory (); + } + else + { + if (asprintf (&tmp, "%s", field_name) == -1) + recutl_out_of_memory (); + } + + csv_fwrite (stdout, tmp, strlen(tmp)); + free (field_name); + free (tmp); + } + + putc ('\n', stdout); + + /* Generate the data rows. */ + + iter = rec_mset_iterator (rec_rset_mset (rset)); + while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void**) &record, NULL)) + { + for (i = 0; i < rec_fex_size (fex); i++) + { + if (i != 0) + { + putc (rec2csv_delim, stdout); + } + + fex_elem = rec_fex_get (fex, i); + field = rec_record_get_field_by_name (record, + rec_fex_elem_field_name (fex_elem), + rec_fex_elem_min (fex_elem)); + if (field) + { + csv_fwrite (stdout, + rec_field_value (field), + strlen (rec_field_value (field))); + } + } + + putc ('\n', stdout); + } + + rec_mset_iterator_free (&iter); +} + +static rec_fex_t +rec2csv_determine_fields (rec_rset_t rset) +{ + rec_fex_t fields; + rec_mset_iterator_t iter_rset; + rec_mset_iterator_t iter_record; + rec_record_t record; + rec_field_t field; + int field_index; + + fields = rec_fex_new (NULL, REC_FEX_SIMPLE); + + iter_rset = rec_mset_iterator (rec_rset_mset (rset)); + while (rec_mset_iterator_next (&iter_rset, MSET_RECORD, (const void **) &record, NULL)) + { + iter_record = rec_mset_iterator (rec_record_mset (record)); + while (rec_mset_iterator_next (&iter_record, MSET_FIELD, (const void **) &field, NULL)) + { + field_index = rec_record_get_field_index_by_name (record, field); + + if (!rec_fex_member_p (fields, + rec_field_name (field), + field_index, field_index)) + { + rec_fex_append (fields, + rec_field_name (field), + field_index, field_index); + } + } + + rec_mset_iterator_free (&iter_record); + } + + rec_mset_iterator_free (&iter_rset); + + return fields; +} + +static bool +rec2csv_process_data (rec_db_t db) +{ + bool ret; + rec_fex_t row_fields; + size_t i; + rec_rset_t rset; + + ret = true; + + for (i = 0; i < rec_db_size (db); i++) + { + rset = rec_db_get_rset (db, i); + if (((rec2csv_record_type) + && rec_rset_type (rset) + && (strcmp (rec_rset_type (rset), + rec2csv_record_type) == 0)) + || (!rec2csv_record_type + && (!rec_rset_type (rset) || + (rec_db_size (db) == 1)))) + { + /* Process this record set. */ + + if (!rec_rset_sort (rset, rec2csv_sort_by_fields)) + recutl_out_of_memory (); + + /* Build the fields that will appear in the row. */ + row_fields = rec2csv_determine_fields (rset); + + /* Generate the csv data. */ + rec2csv_generate_csv (rset, row_fields); + + /* Cleanup. */ + rec_fex_destroy (row_fields); + } + } + + return ret; +} + +int +main (int argc, char *argv[]) +{ + int res; + rec_db_t db; + + res = 0; + + recutl_init ("rec2csv"); + + /* Parse arguments. */ + rec2csv_parse_args (argc, argv); + + /* Get the input data. */ + db = recutl_build_db (argc, argv); + if (!db) + { + res = 1; + } + else + /* Process the data. */ + if (!rec2csv_process_data (db)) + { + res = 1; + } + + rec_db_destroy (db); + + return res; +} + +/* End of rec2csv.c */ diff --git a/devspec.en_US/project/recutils/utils/recdel b/devspec.en_US/project/recutils/utils/recdel new file mode 100755 index 0000000..edf20ca --- /dev/null +++ b/devspec.en_US/project/recutils/utils/recdel @@ -0,0 +1,228 @@ +#! /bin/sh + +# recdel - temporary wrapper script for .libs/recdel +# Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-2 +# +# The recdel program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command="(cd /mnt/lfs/build/recutils/recutils-1.8/utils; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/home/devenkong/bin:/home/devenkong/.local/bin:/home/devenkong/bin:/home/devenkong/.local/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/home/devenkong/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/; export PATH; gcc -g -O2 -o \$progdir/\$file recutl.o recdel.o ../lib/.libs/librecutils.a -lm ../src/.libs/librec.so -Wl,-rpath -Wl,/mnt/lfs/build/recutils/recutils-1.8/src/.libs)" + +# This environment variable determines our operation mode. +if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then + # install mode needs the following variables: + generated_by_libtool_version='2.4.6' + notinst_deplibs=' ../src/librec.la' +else + # When we are sourced in execute mode, $file and $ECHO are already set. + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + file="$0" + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + ECHO="printf %s\\n" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string --lt- +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's ../libtool value, followed by no. +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=$0 + shift + for lt_opt + do + case "$lt_opt" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%/[^/]*$%%'` + test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=. + lt_dump_F=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%^.*/%%'` + cat "$lt_dump_D/$lt_dump_F" + exit 0 + ;; + --lt-*) + $ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n "$lt_option_debug"; then + echo "recdel:recdel:$LINENO: libtool wrapper (GNU libtool) 2.4.6 Debian-2.4.6-2" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + $ECHO "recdel:recdel:$LINENO: newargv[$lt_dump_args_N]: $lt_arg" + lt_dump_args_N=`expr $lt_dump_args_N + 1` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ + + if test -n "$lt_option_debug"; then + $ECHO "recdel:recdel:$LINENO: newargv[0]: $progdir/$program" 1>&2 + func_lt_dump_args ${1+"$@"} 1>&2 + fi + exec "$progdir/$program" ${1+"$@"} + + $ECHO "$0: cannot exec $program $*" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from $@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case " $* " in + *\ --lt-*) + for lt_wr_arg + do + case $lt_wr_arg in + --lt-*) ;; + *) set x "$@" "$lt_wr_arg"; shift;; + esac + shift + done ;; + esac + func_exec_program_core ${1+"$@"} +} + + # Parse options + func_parse_lt_options "$0" ${1+"$@"} + + # Find the directory that this script lives in. + thisdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + test "x$thisdir" = "x$file" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'` + while test -n "$file"; do + destdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + + # If there was a directory component, then change thisdir. + if test "x$destdir" != "x$file"; then + case "$destdir" in + [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;; + *) thisdir="$thisdir/$destdir" ;; + esac + fi + + file=`$ECHO "$file" | /bin/sed 's%^.*/%%'` + file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no + if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then + # special case for '.' + if test "$thisdir" = "."; then + thisdir=`pwd` + fi + # remove .libs from thisdir + case "$thisdir" in + *[\\/].libs ) thisdir=`$ECHO "$thisdir" | /bin/sed 's%[\\/][^\\/]*$%%'` ;; + .libs ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=`cd "$thisdir" && pwd` + test -n "$absdir" && thisdir="$absdir" + + program=lt-'recdel' + progdir="$thisdir/.libs" + + if test ! -f "$progdir/$program" || + { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \ + test "X$file" != "X$progdir/$program"; }; then + + file="$$-$program" + + if test ! -d "$progdir"; then + mkdir "$progdir" + else + rm -f "$progdir/$file" + fi + + # relink executable if necessary + if test -n "$relink_command"; then + if relink_command_output=`eval $relink_command 2>&1`; then : + else + $ECHO "$relink_command_output" >&2 + rm -f "$progdir/$file" + exit 1 + fi + fi + + mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null || + { rm -f "$progdir/$program"; + mv -f "$progdir/$file" "$progdir/$program"; } + rm -f "$progdir/$file" + fi + + if test -f "$progdir/$program"; then + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + # Run the actual program with our arguments. + func_exec_program ${1+"$@"} + fi + else + # The program doesn't exist. + $ECHO "$0: error: '$progdir/$program' does not exist" 1>&2 + $ECHO "This script is just a wrapper for $program." 1>&2 + $ECHO "See the libtool documentation for more information." 1>&2 + exit 1 + fi +fi diff --git a/devspec.en_US/project/recutils/utils/recdel.c b/devspec.en_US/project/recutils/utils/recdel.c new file mode 100755 index 0000000..29c36e8 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/recdel.c @@ -0,0 +1,284 @@ +/* -*- mode: C -*- + * + * File: recdel.c + * Date: Mon Dec 28 08:54:38 2009 + * + * GNU recutils - recdel + * + */ + +/* Copyright (C) 2009-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <getopt.h> +#include <string.h> +#include <stdlib.h> +#include <gettext.h> +#define _(str) gettext (str) +#include <xalloc.h> + +#include <rec.h> +#include <recutl.h> + +/* Forward declarations. */ +void recdel_delete_records (rec_db_t db); +void recdel_parse_args (int argc, char **argv); + +/* + * Global variables + */ + +char *recutl_type = NULL; +bool recdel_comment = false; +rec_sex_t recutl_sex = NULL; +char *recutl_quick_str = NULL; +char *recutl_sex_str = NULL; +bool recutl_insensitive = false; +bool recdel_force = false; +bool recdel_verbose = false; +bool recdel_external = true; +size_t recutl_random = 0; +char *recdel_file = NULL; /* File from where to delete the + records. */ + +/* + * Command line options management + */ + +enum +{ + COMMON_ARGS, + RECORD_SELECTION_ARGS, + COMMENT_ARG, + FORCE_ARG, + VERBOSE_ARG, + NO_EXTERNAL_ARG +}; + +static const struct option GNU_longOptions[] = + { + COMMON_LONG_ARGS, + RECORD_SELECTION_LONG_ARGS, + {"comment", no_argument, NULL, COMMENT_ARG}, + {"force", no_argument, NULL, FORCE_ARG}, + {"verbose", no_argument, NULL, VERBOSE_ARG}, + {"no-external", no_argument, NULL, NO_EXTERNAL_ARG}, + {NULL, 0, NULL, 0} + }; + +void +recutl_print_help (void) +{ + /* TRANSLATORS: --help output, recdel synopsis. + no-wrap */ + printf (_("\ +Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [FILE]\n")); + + /* TRANSLATORS: --help output, recdel short description. + no-wrap */ + fputs (_("\ +Remove (or comment out) records from a rec file.\n"), + stdout); + + puts (""); + /* TRANSLATORS: --help output, recdel arguments. + no-wrap */ + fputs (_("\ + -c, --comment comment out the matching records instead of\n\ + deleting them.\n\ + --force delete even in potentially dangerous situations,\n\ + and if the deletion is violating record restrictions.\n\ + --no-external don't use external descriptors.\n\ + --verbose give a detailed report if the integrity check\n\ + fails.\n"), + stdout); + + recutl_print_help_common (); + + puts (""); + recutl_print_help_record_selection (); + + puts (""); + /* TRANSLATORS: --help output, notes on recdel. + no-wrap */ + fputs (_("\ +If no FILE is specified then the command acts like a filter, getting\n\ +the data from standard input and writing the result to standard output.\n"), + stdout); + + puts (""); + recutl_print_help_footer (); +} + +void +recdel_delete_records (rec_db_t db) +{ + /* Make sure that the user selected an existing record set from + which to delete records. */ + + if (!rec_db_type_p (db, recutl_type)) + { + recutl_fatal (_("no records of type %s found.\n"), + recutl_type ? recutl_type : "<default>"); + } + + /* Invoke the library to perform the requested deletions. */ + + { + int flags = 0; + + if (recutl_insensitive) + { + flags = flags | REC_F_ICASE; + } + + if (recdel_comment) + { + flags = flags | REC_F_COMMENT_OUT; + } + + if (!rec_db_delete (db, + recutl_type, + recutl_index (), + recutl_sex, + recutl_quick_str, + recutl_random, + flags)) + recutl_out_of_memory (); + } + + + /* Check the integrity of the resulting database. */ + + if (!recdel_force && db) + { + recutl_check_integrity (db, recdel_verbose, recdel_external); + } +} + +void +recdel_parse_args (int argc, + char **argv) +{ + int ret; + char c; + + while ((ret = getopt_long (argc, + argv, + RECORD_SELECTION_SHORT_ARGS + "c", + GNU_longOptions, + NULL)) != -1) + { + c = ret; + switch (c) + { + COMMON_ARGS_CASES + RECORD_SELECTION_ARGS_CASES + case FORCE_ARG: + { + recdel_force = true; + break; + } + case VERBOSE_ARG: + { + recdel_verbose = true; + break; + } + case NO_EXTERNAL_ARG: + { + recdel_external = false; + break; + } + case COMMENT_ARG: + case 'c': + { + recdel_comment = true; + break; + } + default: + { + exit (EXIT_FAILURE); + } + } + } + + /* Require the usage of --force for potentially dangerous + operations, such as the request of deleting a whole record + set. */ + + if ((recutl_num_indexes() == 0) && !recutl_sex_str && !recutl_quick_str && !recdel_force && (recutl_random == 0)) + { + recutl_error (_("ignoring a request to delete all records of type %s.\n"), + recutl_type ? recutl_type : "unknown"); + recutl_fatal (_("use --force if you really want to proceed, or use either -n or -e.\n")); + } + + if (recutl_sex_str) + { + recutl_sex = rec_sex_new (recutl_insensitive); + if (!rec_sex_compile (recutl_sex, recutl_sex_str)) + { + recutl_fatal (_("invalid selection expression.\n")); + } + } + + /* Read the name of the file where to delete the records. */ + if (optind < argc) + { + if ((argc - optind) != 1) + { + recutl_print_help (); + exit (EXIT_FAILURE); + } + + recdel_file = argv[optind++]; + } +} + +int +main (int argc, char *argv[]) +{ + rec_db_t db; + + recutl_init ("recdel"); + + recdel_parse_args (argc, argv); + + db = recutl_read_db_from_file (recdel_file); + if (!db) + { + recutl_fatal (_("cannot read file %s\n"), recdel_file); + } + + if (((recutl_num_indexes() != 0) || recutl_sex || recutl_quick_str) || recdel_force || (recutl_random > 0)) + { + recdel_delete_records (db); + } + + if (!recutl_file_is_writable (recdel_file)) + { + recutl_error (_("file %s is not writable.\n"), recdel_file); + return EXIT_FAILURE; + } + recutl_write_db_to_file (db, recdel_file); + + return EXIT_SUCCESS; +} + +/* End of recdel.c */ diff --git a/devspec.en_US/project/recutils/utils/recfix b/devspec.en_US/project/recutils/utils/recfix new file mode 100755 index 0000000..3e3df3e --- /dev/null +++ b/devspec.en_US/project/recutils/utils/recfix @@ -0,0 +1,228 @@ +#! /bin/sh + +# recfix - temporary wrapper script for .libs/recfix +# Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-2 +# +# The recfix program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command="(cd /mnt/lfs/build/recutils/recutils-1.8/utils; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/home/devenkong/bin:/home/devenkong/.local/bin:/home/devenkong/bin:/home/devenkong/.local/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/home/devenkong/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/; export PATH; gcc -g -O2 -o \$progdir/\$file recutl.o recfix.o ../lib/.libs/librecutils.a -lm ../src/.libs/librec.so -Wl,-rpath -Wl,/mnt/lfs/build/recutils/recutils-1.8/src/.libs)" + +# This environment variable determines our operation mode. +if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then + # install mode needs the following variables: + generated_by_libtool_version='2.4.6' + notinst_deplibs=' ../src/librec.la' +else + # When we are sourced in execute mode, $file and $ECHO are already set. + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + file="$0" + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + ECHO="printf %s\\n" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string --lt- +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's ../libtool value, followed by no. +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=$0 + shift + for lt_opt + do + case "$lt_opt" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%/[^/]*$%%'` + test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=. + lt_dump_F=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%^.*/%%'` + cat "$lt_dump_D/$lt_dump_F" + exit 0 + ;; + --lt-*) + $ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n "$lt_option_debug"; then + echo "recfix:recfix:$LINENO: libtool wrapper (GNU libtool) 2.4.6 Debian-2.4.6-2" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + $ECHO "recfix:recfix:$LINENO: newargv[$lt_dump_args_N]: $lt_arg" + lt_dump_args_N=`expr $lt_dump_args_N + 1` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ + + if test -n "$lt_option_debug"; then + $ECHO "recfix:recfix:$LINENO: newargv[0]: $progdir/$program" 1>&2 + func_lt_dump_args ${1+"$@"} 1>&2 + fi + exec "$progdir/$program" ${1+"$@"} + + $ECHO "$0: cannot exec $program $*" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from $@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case " $* " in + *\ --lt-*) + for lt_wr_arg + do + case $lt_wr_arg in + --lt-*) ;; + *) set x "$@" "$lt_wr_arg"; shift;; + esac + shift + done ;; + esac + func_exec_program_core ${1+"$@"} +} + + # Parse options + func_parse_lt_options "$0" ${1+"$@"} + + # Find the directory that this script lives in. + thisdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + test "x$thisdir" = "x$file" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'` + while test -n "$file"; do + destdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + + # If there was a directory component, then change thisdir. + if test "x$destdir" != "x$file"; then + case "$destdir" in + [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;; + *) thisdir="$thisdir/$destdir" ;; + esac + fi + + file=`$ECHO "$file" | /bin/sed 's%^.*/%%'` + file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no + if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then + # special case for '.' + if test "$thisdir" = "."; then + thisdir=`pwd` + fi + # remove .libs from thisdir + case "$thisdir" in + *[\\/].libs ) thisdir=`$ECHO "$thisdir" | /bin/sed 's%[\\/][^\\/]*$%%'` ;; + .libs ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=`cd "$thisdir" && pwd` + test -n "$absdir" && thisdir="$absdir" + + program=lt-'recfix' + progdir="$thisdir/.libs" + + if test ! -f "$progdir/$program" || + { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \ + test "X$file" != "X$progdir/$program"; }; then + + file="$$-$program" + + if test ! -d "$progdir"; then + mkdir "$progdir" + else + rm -f "$progdir/$file" + fi + + # relink executable if necessary + if test -n "$relink_command"; then + if relink_command_output=`eval $relink_command 2>&1`; then : + else + $ECHO "$relink_command_output" >&2 + rm -f "$progdir/$file" + exit 1 + fi + fi + + mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null || + { rm -f "$progdir/$program"; + mv -f "$progdir/$file" "$progdir/$program"; } + rm -f "$progdir/$file" + fi + + if test -f "$progdir/$program"; then + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + # Run the actual program with our arguments. + func_exec_program ${1+"$@"} + fi + else + # The program doesn't exist. + $ECHO "$0: error: '$progdir/$program' does not exist" 1>&2 + $ECHO "This script is just a wrapper for $program." 1>&2 + $ECHO "See the libtool documentation for more information." 1>&2 + exit 1 + fi +fi diff --git a/devspec.en_US/project/recutils/utils/recfix.c b/devspec.en_US/project/recutils/utils/recfix.c new file mode 100755 index 0000000..599e97b --- /dev/null +++ b/devspec.en_US/project/recutils/utils/recfix.c @@ -0,0 +1,581 @@ +/* -*- mode: C -*- + * + * File: recfix.c + * Date: Tue Apr 27 12:21:48 2010 + * + * GNU recutils - recfix + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <getopt.h> +#include <stdlib.h> +#include <xalloc.h> +#include <gettext.h> +#define _(str) gettext (str) + +#include <rec.h> +#include <recutl.h> + +/* Forward prototypes. */ +static void recfix_parse_args (int argc, char **argv); +static bool recfix_check_database (rec_db_t db); + +static int recfix_do_check (void); +static int recfix_do_sort (void); +#if defined REC_CRYPT_SUPPORT +static int recfix_do_crypt (void); +#endif +static int recfix_do_auto (void); + +/* + * Data types. + */ + +/* recfix supports several operations, enumerated in the following + type. */ + +enum recfix_op +{ + RECFIX_OP_INVALID, + RECFIX_OP_CHECK, +#if defined REC_CRYPT_SUPPORT + RECFIX_OP_ENCRYPT, + RECFIX_OP_DECRYPT, +#endif + RECFIX_OP_SORT, + RECFIX_OP_AUTO +}; + +/* + * Global variables. + */ + +bool recfix_external = true; +char *recfix_file = NULL; +int recfix_op = RECFIX_OP_INVALID; +char *recfix_password = NULL; +bool recfix_force = false; + +/* + * Command line options management. + */ + +enum +{ + COMMON_ARGS, + NO_EXTERNAL_ARG, + FORCE_ARG, + OP_SORT_ARG, +#if defined REC_CRYPT_SUPPORT + PASSWORD_ARG, + OP_ENCRYPT_ARG, + OP_DECRYPT_ARG, +#endif + OP_CHECK_ARG, + OP_AUTO_ARG +}; + +static const struct option GNU_longOptions[] = + { + COMMON_LONG_ARGS, + {"no-external", no_argument, NULL, NO_EXTERNAL_ARG}, + {"force", no_argument, NULL, FORCE_ARG}, + {"check", no_argument, NULL, OP_CHECK_ARG}, + {"sort", no_argument, NULL, OP_SORT_ARG}, +#if defined REC_CRYPT_SUPPORT + {"password", required_argument, NULL, PASSWORD_ARG}, + {"encrypt", no_argument, NULL, OP_ENCRYPT_ARG}, + {"decrypt", no_argument, NULL, OP_DECRYPT_ARG}, +#endif + {"auto", no_argument, NULL, OP_AUTO_ARG}, + {NULL, 0, NULL, 0} + }; + +void +recutl_print_help (void) +{ + /* TRANSLATORS: --help output, recfix synopsis. + no-wrap */ + printf (_("\ +Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n")); + + /* TRANSLATORS: --help output, recfix short description. + no-wrap */ + fputs (_("\ +Check and fix rec files.\n"), + stdout); + + puts (""); + /* TRANSLATORS: --help output, recfix global arguments. + no-wrap */ + fputs (_("\ + --no-external don't use external descriptors.\n\ + --force force the requested operation.\n"), + stdout); + + recutl_print_help_common (); + + puts(""); + /* TRANSLATORS: --help output, recfix operations. + no-wrap */ + fputs (_("\ +Operations:\n\ + --check check integrity of the specified file. Default.\n\ + --sort sort the records in the specified file.\n\ + --auto insert auto-generated fields in records missing them.\n"), + stdout); + +#if defined REC_CRYPT_SUPPORT + /* TRANSLATORS: --help output, recfix operations related with encryption. + no-wrap */ + fputs (_("\ + --encrypt encrypt confidential fields in the specified file.\n\ + --decrypt decrypt confidential fields in the specified file.\n"), + stdout); + + puts(""); + /* TRANSLATORS: --help output, recfix encryption and decryption + options. + no-wrap */ + fputs (_("\ +De/Encryption options:\n\ + -s, --password=PASSWORD encrypt/decrypt with this password.\n"), + stdout); +#endif /* REC_CRYPT_SUPPORT */ + + puts(""); + /* TRANSLATORS: --help output, notes on recfix. + no-wrap */ + fputs (_("\ +If no FILE is specified then the command acts like a filter, getting\n\ +the data from standard input and writing the result to standard output.\n"), stdout); + + puts(""); + recutl_print_help_footer (); +} + +static void +recfix_parse_args (int argc, + char **argv) +{ + char c; + int ret; + + while ((ret = getopt_long (argc, + argv, + ENCRYPTION_SHORT_ARGS, + GNU_longOptions, + NULL)) != -1) + { + c = ret; + switch (c) + { + COMMON_ARGS_CASES + case NO_EXTERNAL_ARG: + { + recfix_external = false; + break; + } + case FORCE_ARG: + { + recfix_force = true; + break; + } +#if defined REC_CRYPT_SUPPORT + case 's': + case PASSWORD_ARG: + { + if (recfix_op == RECFIX_OP_INVALID) + { + recutl_fatal (_("--password|-s must be used as an operation argument.\n")); + } + + if ((recfix_op != RECFIX_OP_ENCRYPT) + && (recfix_op != RECFIX_OP_DECRYPT)) + { + recutl_fatal (_("the specified operation does not require a password.\n")); + } + + if (recfix_password != NULL) + { + recutl_fatal (_("please specify just one password.\n")); + } + + recfix_password = xstrdup (optarg); + break; + } +#endif /* REC_CRYPT_SUPPORT */ + case OP_CHECK_ARG: + { + if (recfix_op != RECFIX_OP_INVALID) + { + recutl_fatal (_("please specify just one operation.\n")); + } + + recfix_op = RECFIX_OP_CHECK; + break; + } + case OP_SORT_ARG: + { + if (recfix_op != RECFIX_OP_INVALID) + { + recutl_fatal (_("please specify just one operation.\n")); + } + + recfix_op = RECFIX_OP_SORT; + break; + } + case OP_AUTO_ARG: + { + if (recfix_op != RECFIX_OP_INVALID) + { + recutl_fatal (_("please specify just one operation.\n")); + } + + recfix_op = RECFIX_OP_AUTO; + break; + } +#if defined REC_CRYPT_SUPPORT + case OP_ENCRYPT_ARG: + { + if (recfix_op != RECFIX_OP_INVALID) + { + recutl_fatal (_("please specify just one operation.\n")); + } + + recfix_op = RECFIX_OP_ENCRYPT; + break; + } + case OP_DECRYPT_ARG: + { + if (recfix_op != RECFIX_OP_INVALID) + { + recutl_fatal (_("please specify just one operation.\n")); + } + + recfix_op = RECFIX_OP_DECRYPT; + break; + } +#endif /* REC_CRYPT_SUPPORT */ + default: + { + exit (EXIT_FAILURE); + } + } + } + + /* The default operation is check, in case the user did not specify + any in the command line. */ + + if (recfix_op == RECFIX_OP_INVALID) + { + recfix_op = RECFIX_OP_CHECK; + } + +#if defined REC_CRYPT_SUPPORT + /* The encrypt and decrypt operations require the user to specify a + password. If no password was specified with -s and the program + is running in a terminal, prompt the user to provide the + password. */ + + if (((recfix_op == RECFIX_OP_ENCRYPT) + || (recfix_op == RECFIX_OP_DECRYPT)) + && (recfix_password == NULL)) + { + if (recutl_interactive ()) + { + if (recfix_op == RECFIX_OP_ENCRYPT) + { + recfix_password = recutl_getpass (true); + } + else + { + recfix_password = recutl_getpass (false); + } + } + + if (!recfix_password || (strlen (recfix_password) == 0)) + { + recutl_fatal ("please specify a password.\n"); + } + } +#endif /* REC_CRYPT_SUPPORT */ + + /* Read the name of the file to work on. */ + if (optind < argc) + { + if ((argc - optind) != 1) + { + recutl_print_help (); + exit (EXIT_FAILURE); + } + + recfix_file = argv[optind++]; + } +} + +static bool +recfix_check_database (rec_db_t db) +{ + bool ret; + char *errors; + size_t errors_size; + rec_buf_t buf; + + buf = rec_buf_new (&errors, &errors_size); + ret = (rec_int_check_db (db, + true, /* Check descriptors. */ + recfix_external, /* Use external descriptors. */ + buf) == 0); + rec_buf_close (buf); + fprintf (stderr, "%s", errors); + + return ret; +} + +static int +recfix_do_check () +{ + rec_db_t db; + + /* Read the database from the specified file and check its + integrity. */ + + db = recutl_read_db_from_file (recfix_file); + if (!db) + { + return EXIT_FAILURE; + } + + if (!recfix_check_database (db)) + { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + +static int +recfix_do_sort () +{ + rec_db_t db = NULL; + size_t n_rset = 0; + rec_rset_t rset = NULL; + + /* Read the database from the specified file. */ + + db = recutl_read_db_from_file (recfix_file); + if (!db) + { + return EXIT_FAILURE; + } + + /* Sort all the record sets contained in the database. */ + + for (n_rset = 0; n_rset < rec_db_size (db); n_rset++) + { + rset = rec_db_get_rset (db, n_rset); + if (!rec_rset_sort (rset, NULL)) + recutl_out_of_memory (); + } + + if (!recfix_check_database (db)) + { + return EXIT_FAILURE; + } + + if (!recutl_file_is_writable (recfix_file)) + { + recutl_error (_("file %s is not writable.\n"), recfix_file); + return EXIT_FAILURE; + } + + recutl_write_db_to_file (db, recfix_file); + return EXIT_SUCCESS; +} + +#if defined REC_CRYPT_SUPPORT + +static int +recfix_do_crypt () +{ + rec_db_t db; + size_t n_rset; + + /* Read the database from the specified file. */ + + db = recutl_read_db_from_file (recfix_file); + if (!db) + { + return EXIT_FAILURE; + } + + /* Encrypt/decrypt any unencrypted/encrypted field marked as + "confidential" using the given password. */ + + for (n_rset = 0; n_rset < rec_db_size (db); n_rset++) + { + rec_mset_iterator_t iter; + rec_fex_t confidential_fields; + rec_record_t record; + rec_rset_t rset = + rec_db_get_rset (db, n_rset); + + /* Skip record sets not having any confidential fields. */ + + confidential_fields = rec_rset_confidential (rset); + if (confidential_fields == NULL) + { + continue; + } + + /* Process every record of the record set. */ + + iter = rec_mset_iterator (rec_rset_mset (rset)); + while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **) &record, NULL)) + { + if (recfix_op == RECFIX_OP_ENCRYPT) + { + /* Encrypt any unencrypted confidential field in this + record. */ + + if (!rec_encrypt_record (rset, record, recfix_password) + && !recfix_force) + { + recutl_error (_("the database contains already encrypted fields\n")); + recutl_fatal (_("please use --force or --decrypt\n")); + } + } + else + { + /* Decrypt any encrypted confidential field in this + record. */ + + rec_decrypt_record (rset, record, recfix_password); + } + } + + rec_mset_iterator_free (&iter); + } + + /* Write the modified database back to the file. */ + + recutl_write_db_to_file (db, recfix_file); + + return EXIT_SUCCESS; +} + +#endif /* REC_CRYPT_SUPPORT */ + +static int +recfix_do_auto () +{ + rec_db_t db = NULL; + size_t n_rset = 0; + + /* Read the database from the especified file. */ + + db = recutl_read_db_from_file (recfix_file); + if (!db) + { + return EXIT_FAILURE; + } + + /* Add auto fields to any record in the database not having it, in + record sets featuring auto fields. */ + + for (n_rset = 0; n_rset < rec_db_size (db); n_rset++) + { + rec_mset_iterator_t iter; + rec_record_t record; + rec_rset_t rset = rec_db_get_rset (db, n_rset); + + iter = rec_mset_iterator (rec_rset_mset (rset)); + while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void**) &record, NULL)) + { + if (!rec_rset_add_auto_fields (rset, record)) + recutl_out_of_memory (); + } + + rec_mset_iterator_free (&iter); + } + + if (!recfix_check_database (db)) + { + return EXIT_FAILURE; + } + + recutl_write_db_to_file (db, recfix_file); + return EXIT_SUCCESS; +} + +int +main (int argc, char *argv[]) +{ + int res = EXIT_SUCCESS; + + recutl_init ("recfix"); + + /* Parse arguments. */ + + recfix_parse_args (argc, argv); + + /* Execute the proper operation as specified in the recfix_op + variable. */ + + switch (recfix_op) + { + case RECFIX_OP_CHECK: + { + res = recfix_do_check (); + break; + } + case RECFIX_OP_SORT: + { + res = recfix_do_sort (); + break; + } + case RECFIX_OP_AUTO: + { + res = recfix_do_auto (); + break; + } +#if defined REC_CRYPT_SUPPORT + case RECFIX_OP_ENCRYPT: + case RECFIX_OP_DECRYPT: + { + res = recfix_do_crypt (); + break; + } +#endif /* REC_CRYPT_SUPPORT */ + default: + { + /* This point shall not be reached. */ + + res = EXIT_FAILURE; + recutl_fatal (_("unknown operation in recfix: please report this as a bug.\n")); + } + } + + return res; +} + +/* End of recfix.c */ diff --git a/devspec.en_US/project/recutils/utils/recfmt b/devspec.en_US/project/recutils/utils/recfmt new file mode 100755 index 0000000..74ccf8a --- /dev/null +++ b/devspec.en_US/project/recutils/utils/recfmt @@ -0,0 +1,228 @@ +#! /bin/sh + +# recfmt - temporary wrapper script for .libs/recfmt +# Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-2 +# +# The recfmt program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command="(cd /mnt/lfs/build/recutils/recutils-1.8/utils; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/home/devenkong/bin:/home/devenkong/.local/bin:/home/devenkong/bin:/home/devenkong/.local/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/home/devenkong/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/; export PATH; gcc -g -O2 -o \$progdir/\$file recutl.o recfmt.o ../lib/.libs/librecutils.a -lm ../src/.libs/librec.so -Wl,-rpath -Wl,/mnt/lfs/build/recutils/recutils-1.8/src/.libs)" + +# This environment variable determines our operation mode. +if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then + # install mode needs the following variables: + generated_by_libtool_version='2.4.6' + notinst_deplibs=' ../src/librec.la' +else + # When we are sourced in execute mode, $file and $ECHO are already set. + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + file="$0" + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + ECHO="printf %s\\n" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string --lt- +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's ../libtool value, followed by no. +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=$0 + shift + for lt_opt + do + case "$lt_opt" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%/[^/]*$%%'` + test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=. + lt_dump_F=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%^.*/%%'` + cat "$lt_dump_D/$lt_dump_F" + exit 0 + ;; + --lt-*) + $ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n "$lt_option_debug"; then + echo "recfmt:recfmt:$LINENO: libtool wrapper (GNU libtool) 2.4.6 Debian-2.4.6-2" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + $ECHO "recfmt:recfmt:$LINENO: newargv[$lt_dump_args_N]: $lt_arg" + lt_dump_args_N=`expr $lt_dump_args_N + 1` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ + + if test -n "$lt_option_debug"; then + $ECHO "recfmt:recfmt:$LINENO: newargv[0]: $progdir/$program" 1>&2 + func_lt_dump_args ${1+"$@"} 1>&2 + fi + exec "$progdir/$program" ${1+"$@"} + + $ECHO "$0: cannot exec $program $*" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from $@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case " $* " in + *\ --lt-*) + for lt_wr_arg + do + case $lt_wr_arg in + --lt-*) ;; + *) set x "$@" "$lt_wr_arg"; shift;; + esac + shift + done ;; + esac + func_exec_program_core ${1+"$@"} +} + + # Parse options + func_parse_lt_options "$0" ${1+"$@"} + + # Find the directory that this script lives in. + thisdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + test "x$thisdir" = "x$file" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'` + while test -n "$file"; do + destdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + + # If there was a directory component, then change thisdir. + if test "x$destdir" != "x$file"; then + case "$destdir" in + [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;; + *) thisdir="$thisdir/$destdir" ;; + esac + fi + + file=`$ECHO "$file" | /bin/sed 's%^.*/%%'` + file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no + if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then + # special case for '.' + if test "$thisdir" = "."; then + thisdir=`pwd` + fi + # remove .libs from thisdir + case "$thisdir" in + *[\\/].libs ) thisdir=`$ECHO "$thisdir" | /bin/sed 's%[\\/][^\\/]*$%%'` ;; + .libs ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=`cd "$thisdir" && pwd` + test -n "$absdir" && thisdir="$absdir" + + program=lt-'recfmt' + progdir="$thisdir/.libs" + + if test ! -f "$progdir/$program" || + { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \ + test "X$file" != "X$progdir/$program"; }; then + + file="$$-$program" + + if test ! -d "$progdir"; then + mkdir "$progdir" + else + rm -f "$progdir/$file" + fi + + # relink executable if necessary + if test -n "$relink_command"; then + if relink_command_output=`eval $relink_command 2>&1`; then : + else + $ECHO "$relink_command_output" >&2 + rm -f "$progdir/$file" + exit 1 + fi + fi + + mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null || + { rm -f "$progdir/$program"; + mv -f "$progdir/$file" "$progdir/$program"; } + rm -f "$progdir/$file" + fi + + if test -f "$progdir/$program"; then + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + # Run the actual program with our arguments. + func_exec_program ${1+"$@"} + fi + else + # The program doesn't exist. + $ECHO "$0: error: '$progdir/$program' does not exist" 1>&2 + $ECHO "This script is just a wrapper for $program." 1>&2 + $ECHO "See the libtool documentation for more information." 1>&2 + exit 1 + fi +fi diff --git a/devspec.en_US/project/recutils/utils/recfmt.c b/devspec.en_US/project/recutils/utils/recfmt.c new file mode 100755 index 0000000..3858208 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/recfmt.c @@ -0,0 +1,303 @@ +/* -*- mode: C -*- + * + * File: recfmt.c + * Date: Wed Dec 22 18:20:20 2010 + * + * GNU recutils - recfmt + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <string.h> +#include <getopt.h> +#include <stdlib.h> +#include <xalloc.h> +#include <regex.h> +#include <gettext.h> +#define _(str) gettext (str) + +#include <rec.h> +#include <recutl.h> + +/* Forward prototypes. */ +void recfmt_parse_args (int argc, char **argv); +bool recfmt_process_data (rec_db_t db); +void recfmt_process_db (rec_db_t db, char *template); +char *recfmt_apply_template (rec_record_t record, char *template); +char *recfmt_get_subst (rec_record_t record, char *str); + +/* + * Global variables + */ + +char *recfmt_template = NULL; + +/* + * Command line options management. + */ + +enum +{ + COMMON_ARGS, + FILE_ARG +}; + +static const struct option GNU_longOptions[] = + { + COMMON_LONG_ARGS, + {"file", required_argument, NULL, FILE_ARG}, + {NULL, 0, NULL, 0} + }; + +/* + * Functions. + */ + +void +recutl_print_help (void) +{ + /* TRANSLATORS: --help output, recfmt synopsis. + no-wrap */ + printf (_("\ +Usage: recfmt [OPTION]... [TEMPLATE]\n")); + + /* TRANSLATORS: --help output, recfmt arguments. + no-wrap */ + fputs(_("\ +Apply a template to records read from standard input.\n"), stdout); + + puts (""); + /* TRANSLATORS: --help output, recfmt arguments. + no-wrap */ + fputs(_("\ + -f, --file=FILENAME read the template to apply from a file.\n"), + stdout); + + recutl_print_help_common (); + puts (""); + recutl_print_help_footer (); +} + +void +recfmt_parse_args (int argc, + char **argv) +{ + char c; + int ret; + + while ((ret = getopt_long (argc, + argv, + "f:", + GNU_longOptions, + NULL)) != -1) + { + c = ret; + switch (c) + { + COMMON_ARGS_CASES + case FILE_ARG: + case 'f': + { + /* Read the template from the specified file and store it + in recfmt_template. */ + recfmt_template = recutl_read_file (optarg); + if (!recfmt_template) + { + recutl_fatal (_("can't open file %s for reading.\n"), + optarg); + } + + break; + } + default: + { + exit (EXIT_FAILURE); + } + } + } + + /* See if the template is specified in the command line. */ + if (optind < argc) + { + if (recfmt_template) + { + recutl_fatal (_("don't specify a template in the command line and -f at the same time.\n")); + } + + if ((argc - optind) != 1) + { + recutl_print_help (); + exit (EXIT_FAILURE); + } + + recfmt_template = xstrdup (argv[optind++]); + } +} + +char * +recfmt_get_subst (rec_record_t record, + char *str) +{ + char *res; + rec_sex_t sex; + + sex = rec_sex_new (false); + if (!rec_sex_compile (sex, str)) + { + recutl_fatal (_("invalid expression in a template slot.\n")); + } + + res = rec_sex_eval_str (sex, record); + if (!res) + { + recutl_fatal (_("error evaluating expression in a template slot.\n")); + } + + rec_sex_destroy (sex); + + return res; +} + +char * +recfmt_apply_template (rec_record_t record, + char *template) +{ + rec_buf_t result_buf; + char *result; + char *tmp; + size_t tmp_size; + size_t result_size; + char *p; + regex_t regexp; + regmatch_t matches; + char *subst_str; + + /* Replace occurrences of: + + {{Name[N]}} + + where Name[N] is the name of a field with an optional subscript. + If the subscript is not present then it is assumed to be 0. If + the contents between {{...}} are not a field name then replace the + slot with the empty string. + */ + + if (regcomp (®exp, "\\{\\{" "[^}]*" "\\}\\}", REG_EXTENDED) != 0) + { + recutl_fatal (_("recfmt_apply_template: error compiling regexp. Please report this.\n")); + } + + result_buf = rec_buf_new (&result, &result_size); + p = template; + while (*p + && (regexec (®exp, p, 1, &matches, 0) == 0) + && (matches.rm_so != -1)) + { + /* Add the prolog, if any. */ + if (matches.rm_so > 0) + { + tmp = xmalloc (matches.rm_so + 1); + memcpy (tmp, p, matches.rm_so); + tmp[matches.rm_so] = '\0'; + rec_buf_puts (tmp, result_buf); + free (tmp); + } + + /* Get the match. */ + tmp_size = matches.rm_eo - matches.rm_so - 4; + tmp = xmalloc (tmp_size + 1); + memcpy (tmp, p + matches.rm_so + 2, tmp_size); + tmp[tmp_size] = '\0'; + + /* Advance p. */ + p = p + matches.rm_eo; + + /* Get the substitution text and append it to the result. */ + subst_str = recfmt_get_subst (record, tmp); + if (subst_str) + { + rec_buf_puts (subst_str, result_buf); + free (subst_str); + } + free (tmp); + } + + /* Add the epilog, if any. */ + if (*p) + { + rec_buf_puts (p, result_buf); + } + + rec_buf_close (result_buf); + + return result; +} + +void +recfmt_process_db (rec_db_t db, char *template) +{ + size_t n_rset; + rec_rset_t rset; + rec_record_t record; + char *result; + rec_mset_iterator_t iter; + + /* Iterate on all the record sets. */ + for (n_rset = 0; n_rset < rec_db_size (db); n_rset++) + { + rset = rec_db_get_rset (db, n_rset); + + /* Iterate on all the records. */ + + iter = rec_mset_iterator (rec_rset_mset (rset)); + while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void**) &record, NULL)) + { + /* Apply the template to this record. */ + result = recfmt_apply_template (record, template); + if (result && (*result != '\0')) + { + printf ("%s", result); + free (result); + } + } + + rec_mset_iterator_free (&iter); + } +} + +int +main (int argc, char *argv[]) +{ + rec_db_t db; + + recutl_init ("recfmt"); + + recfmt_parse_args (argc, argv); + + db = recutl_read_db_from_file (NULL); + if (db && recfmt_template) + { + recfmt_process_db (db, recfmt_template); + } + + return EXIT_SUCCESS; +} + +/* End of recfmt.c */ diff --git a/devspec.en_US/project/recutils/utils/recinf b/devspec.en_US/project/recutils/utils/recinf new file mode 100755 index 0000000..defae84 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/recinf @@ -0,0 +1,228 @@ +#! /bin/sh + +# recinf - temporary wrapper script for .libs/recinf +# Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-2 +# +# The recinf program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command="(cd /mnt/lfs/build/recutils/recutils-1.8/utils; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/home/devenkong/bin:/home/devenkong/.local/bin:/home/devenkong/bin:/home/devenkong/.local/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/home/devenkong/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/; export PATH; gcc -g -O2 -o \$progdir/\$file recutl.o recinf.o ../lib/.libs/librecutils.a -lm ../src/.libs/librec.so -Wl,-rpath -Wl,/mnt/lfs/build/recutils/recutils-1.8/src/.libs)" + +# This environment variable determines our operation mode. +if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then + # install mode needs the following variables: + generated_by_libtool_version='2.4.6' + notinst_deplibs=' ../src/librec.la' +else + # When we are sourced in execute mode, $file and $ECHO are already set. + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + file="$0" + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + ECHO="printf %s\\n" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string --lt- +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's ../libtool value, followed by no. +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=$0 + shift + for lt_opt + do + case "$lt_opt" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%/[^/]*$%%'` + test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=. + lt_dump_F=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%^.*/%%'` + cat "$lt_dump_D/$lt_dump_F" + exit 0 + ;; + --lt-*) + $ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n "$lt_option_debug"; then + echo "recinf:recinf:$LINENO: libtool wrapper (GNU libtool) 2.4.6 Debian-2.4.6-2" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + $ECHO "recinf:recinf:$LINENO: newargv[$lt_dump_args_N]: $lt_arg" + lt_dump_args_N=`expr $lt_dump_args_N + 1` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ + + if test -n "$lt_option_debug"; then + $ECHO "recinf:recinf:$LINENO: newargv[0]: $progdir/$program" 1>&2 + func_lt_dump_args ${1+"$@"} 1>&2 + fi + exec "$progdir/$program" ${1+"$@"} + + $ECHO "$0: cannot exec $program $*" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from $@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case " $* " in + *\ --lt-*) + for lt_wr_arg + do + case $lt_wr_arg in + --lt-*) ;; + *) set x "$@" "$lt_wr_arg"; shift;; + esac + shift + done ;; + esac + func_exec_program_core ${1+"$@"} +} + + # Parse options + func_parse_lt_options "$0" ${1+"$@"} + + # Find the directory that this script lives in. + thisdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + test "x$thisdir" = "x$file" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'` + while test -n "$file"; do + destdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + + # If there was a directory component, then change thisdir. + if test "x$destdir" != "x$file"; then + case "$destdir" in + [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;; + *) thisdir="$thisdir/$destdir" ;; + esac + fi + + file=`$ECHO "$file" | /bin/sed 's%^.*/%%'` + file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no + if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then + # special case for '.' + if test "$thisdir" = "."; then + thisdir=`pwd` + fi + # remove .libs from thisdir + case "$thisdir" in + *[\\/].libs ) thisdir=`$ECHO "$thisdir" | /bin/sed 's%[\\/][^\\/]*$%%'` ;; + .libs ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=`cd "$thisdir" && pwd` + test -n "$absdir" && thisdir="$absdir" + + program=lt-'recinf' + progdir="$thisdir/.libs" + + if test ! -f "$progdir/$program" || + { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \ + test "X$file" != "X$progdir/$program"; }; then + + file="$$-$program" + + if test ! -d "$progdir"; then + mkdir "$progdir" + else + rm -f "$progdir/$file" + fi + + # relink executable if necessary + if test -n "$relink_command"; then + if relink_command_output=`eval $relink_command 2>&1`; then : + else + $ECHO "$relink_command_output" >&2 + rm -f "$progdir/$file" + exit 1 + fi + fi + + mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null || + { rm -f "$progdir/$program"; + mv -f "$progdir/$file" "$progdir/$program"; } + rm -f "$progdir/$file" + fi + + if test -f "$progdir/$program"; then + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + # Run the actual program with our arguments. + func_exec_program ${1+"$@"} + fi + else + # The program doesn't exist. + $ECHO "$0: error: '$progdir/$program' does not exist" 1>&2 + $ECHO "This script is just a wrapper for $program." 1>&2 + $ECHO "See the libtool documentation for more information." 1>&2 + exit 1 + fi +fi diff --git a/devspec.en_US/project/recutils/utils/recinf.c b/devspec.en_US/project/recutils/utils/recinf.c new file mode 100755 index 0000000..a875b54 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/recinf.c @@ -0,0 +1,290 @@ +/* -*- mode: C -*- + * + * File: recinf.c + * Date: Mon Dec 28 08:54:38 2009 + * + * GNU recutils - recinf + * + */ + +/* Copyright (C) 2009-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <getopt.h> +#include <string.h> +#include <stdlib.h> +#include <xalloc.h> +#include <gettext.h> +#define _(str) gettext (str) + +#include <rec.h> +#include <recutl.h> + +/* + * Global variables + */ + +rec_writer_mode_t recinf_write_mode = REC_WRITER_NORMAL; + +/* + * Command line options management + */ + +enum +{ + COMMON_ARGS, + DESCRIPTOR_ARG, + NAMES_ARG, + TYPE_ARG, + PRINT_SEXPS_ARG +}; + +static const struct option GNU_longOptions[] = + { + COMMON_LONG_ARGS, + {"descriptor", no_argument, NULL, DESCRIPTOR_ARG}, + {"names-only", no_argument, NULL, NAMES_ARG}, + {"type", required_argument, NULL, TYPE_ARG}, + {"print-sexps", no_argument, NULL, PRINT_SEXPS_ARG}, + {NULL, 0, NULL, 0} + }; + +/* + * Global variables. + */ + +bool recinf_descriptor = false; +bool recinf_names_only = false; +char *recinf_type = NULL; + +/* + * Functions. + */ + +void +recutl_print_help (void) +{ + /* TRANSLATORS: --help output, recinf synopsis. + no-wrap */ + printf (_("\ +Usage: recinf [OPTION]... [FILE]...\n")); + + /* TRANSLATORS: --help output, recinf short description. + no-wrap */ + fputs (_("\ +Print information about the types of records stored in the input.\n"), + stdout); + + puts (""); + /* TRANSLATORS: --help output, recinf arguments. + no-wrap */ + fputs (_("\ + -t, --type=RECORD_TYPE print information on the records having the\n\ + specified type.\n\ + -d, --descriptor include the full record descriptors.\n\ + -n, --names-only output just the names of the record files\n\ + found in the input.\n"), + stdout); + + recutl_print_help_common (); + + puts (""); + /* TRANSLATORS: --help output, recinf special options. + no-wrap */ + fputs (_("\ +Special options:\n\ + -S, --print-sexps print the data in sexps instead of rec format.\n"), + stdout); + + puts (""); + recutl_print_help_footer (); +} + +bool +print_info_file (FILE *in, + char *file_name) +{ + bool ret; + rec_db_t db; + rec_rset_t rset; + rec_record_t descriptor; + rec_parser_t parser; + int position; + + ret = true; + parser = rec_parser_new (in, file_name); + + ret = rec_parse_db (parser, &db); + if (ret) + { + for (position = 0; position < rec_db_size (db); position++) + { + rset = rec_db_get_rset (db, position); + descriptor = rec_rset_descriptor (rset); + + if (recinf_type + && descriptor + && (strcmp (rec_rset_type (rset), recinf_type) != 0)) + { + continue; + } + + if (recinf_descriptor) + { + rec_writer_t writer; + + if (descriptor) + { + writer = rec_writer_new (stdout); + rec_writer_set_mode (writer, recinf_write_mode); + rec_write_record (writer, descriptor); + rec_write_string (writer, "\n"); + rec_writer_destroy (writer); + } + else + { + if (recinf_write_mode == REC_WRITER_NORMAL) + { + printf ("unknown\n"); + } + } + + if (position < (rec_db_size (db) - 1)) + { + printf ("\n"); + } + } + else + { + if (descriptor) + { + if (!recinf_names_only) + { + fprintf (stdout, "%zd ", rec_rset_num_records (rset)); + } + fprintf (stdout, "%s\n", rec_rset_type (rset)); + } + else + { + if (!recinf_names_only) + { + printf ("%zd\n", rec_rset_num_records (rset)); + } + } + } + } + } + + if (rec_parser_error (parser)) + { + rec_parser_perror (parser, file_name); + } + + rec_parser_destroy (parser); + + return ret; +} + +int +main (int argc, char *argv[]) +{ + char c; + int ret; + char *file_name; + FILE *in; + + recutl_init ("recinf"); + + while ((ret = getopt_long (argc, + argv, + "Sdnt:", + GNU_longOptions, + NULL)) != -1) + { + c = ret; + switch (c) + { + COMMON_ARGS_CASES + case PRINT_SEXPS_ARG: + case 'S': + { + recinf_write_mode = REC_WRITER_SEXP; + break; + } + case DESCRIPTOR_ARG: + case 'd': + { + recinf_descriptor = true; + break; + } + case NAMES_ARG: + case 'n': + { + recinf_names_only = true; + break; + } + case TYPE_ARG: + case 't': + { + recinf_type = xstrdup (optarg); + break; + } + default: + { + exit (EXIT_FAILURE); + } + } + } + + /* Process the input files, if any. Otherwise use the standard + input to read the rec data. */ + if (optind < argc) + { + while (optind < argc) + { + file_name = argv[optind++]; + if (!(in = fopen (file_name, "r"))) + { + printf(_("error: cannot read file %s\n"), file_name); + exit (EXIT_FAILURE); + } + else + { + if (!print_info_file (in, file_name)) + { + /* Parse error */ + exit (EXIT_FAILURE); + } + + fclose (in); + } + } + } + else + { + if (!print_info_file (stdin, "stdin")) + { + /* Parse error */ + exit (EXIT_FAILURE); + } + } + + return EXIT_SUCCESS; +} + +/* End of recinf.c */ diff --git a/devspec.en_US/project/recutils/utils/recins b/devspec.en_US/project/recutils/utils/recins new file mode 100755 index 0000000..d1c0950 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/recins @@ -0,0 +1,228 @@ +#! /bin/sh + +# recins - temporary wrapper script for .libs/recins +# Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-2 +# +# The recins program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command="(cd /mnt/lfs/build/recutils/recutils-1.8/utils; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/home/devenkong/bin:/home/devenkong/.local/bin:/home/devenkong/bin:/home/devenkong/.local/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/home/devenkong/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/; export PATH; gcc -g -O2 -o \$progdir/\$file recutl.o recins.o ../lib/.libs/librecutils.a -lm ../src/.libs/librec.so -Wl,-rpath -Wl,/mnt/lfs/build/recutils/recutils-1.8/src/.libs)" + +# This environment variable determines our operation mode. +if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then + # install mode needs the following variables: + generated_by_libtool_version='2.4.6' + notinst_deplibs=' ../src/librec.la' +else + # When we are sourced in execute mode, $file and $ECHO are already set. + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + file="$0" + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + ECHO="printf %s\\n" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string --lt- +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's ../libtool value, followed by no. +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=$0 + shift + for lt_opt + do + case "$lt_opt" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%/[^/]*$%%'` + test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=. + lt_dump_F=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%^.*/%%'` + cat "$lt_dump_D/$lt_dump_F" + exit 0 + ;; + --lt-*) + $ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n "$lt_option_debug"; then + echo "recins:recins:$LINENO: libtool wrapper (GNU libtool) 2.4.6 Debian-2.4.6-2" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + $ECHO "recins:recins:$LINENO: newargv[$lt_dump_args_N]: $lt_arg" + lt_dump_args_N=`expr $lt_dump_args_N + 1` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ + + if test -n "$lt_option_debug"; then + $ECHO "recins:recins:$LINENO: newargv[0]: $progdir/$program" 1>&2 + func_lt_dump_args ${1+"$@"} 1>&2 + fi + exec "$progdir/$program" ${1+"$@"} + + $ECHO "$0: cannot exec $program $*" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from $@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case " $* " in + *\ --lt-*) + for lt_wr_arg + do + case $lt_wr_arg in + --lt-*) ;; + *) set x "$@" "$lt_wr_arg"; shift;; + esac + shift + done ;; + esac + func_exec_program_core ${1+"$@"} +} + + # Parse options + func_parse_lt_options "$0" ${1+"$@"} + + # Find the directory that this script lives in. + thisdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + test "x$thisdir" = "x$file" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'` + while test -n "$file"; do + destdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + + # If there was a directory component, then change thisdir. + if test "x$destdir" != "x$file"; then + case "$destdir" in + [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;; + *) thisdir="$thisdir/$destdir" ;; + esac + fi + + file=`$ECHO "$file" | /bin/sed 's%^.*/%%'` + file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no + if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then + # special case for '.' + if test "$thisdir" = "."; then + thisdir=`pwd` + fi + # remove .libs from thisdir + case "$thisdir" in + *[\\/].libs ) thisdir=`$ECHO "$thisdir" | /bin/sed 's%[\\/][^\\/]*$%%'` ;; + .libs ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=`cd "$thisdir" && pwd` + test -n "$absdir" && thisdir="$absdir" + + program=lt-'recins' + progdir="$thisdir/.libs" + + if test ! -f "$progdir/$program" || + { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \ + test "X$file" != "X$progdir/$program"; }; then + + file="$$-$program" + + if test ! -d "$progdir"; then + mkdir "$progdir" + else + rm -f "$progdir/$file" + fi + + # relink executable if necessary + if test -n "$relink_command"; then + if relink_command_output=`eval $relink_command 2>&1`; then : + else + $ECHO "$relink_command_output" >&2 + rm -f "$progdir/$file" + exit 1 + fi + fi + + mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null || + { rm -f "$progdir/$program"; + mv -f "$progdir/$file" "$progdir/$program"; } + rm -f "$progdir/$file" + fi + + if test -f "$progdir/$program"; then + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + # Run the actual program with our arguments. + func_exec_program ${1+"$@"} + fi + else + # The program doesn't exist. + $ECHO "$0: error: '$progdir/$program' does not exist" 1>&2 + $ECHO "This script is just a wrapper for $program." 1>&2 + $ECHO "See the libtool documentation for more information." 1>&2 + exit 1 + fi +fi diff --git a/devspec.en_US/project/recutils/utils/recins.c b/devspec.en_US/project/recutils/utils/recins.c new file mode 100755 index 0000000..6fe1de7 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/recins.c @@ -0,0 +1,418 @@ +/* -*- mode: C -*- + * + * File: recins.c + * Date: Mon Dec 28 08:54:38 2009 + * + * GNU recutils - recins + * + */ + +/* Copyright (C) 2009-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <getopt.h> +#include <string.h> +#include <stdlib.h> +#include <xalloc.h> +#include <gettext.h> +#include <errno.h> +#include <time.h> +#include <locale.h> +#define _(str) gettext (str) +#include <base64.h> + +#include <rec.h> +#include <recutl.h> + +/* Forward declarations. */ +bool recins_insert_record (rec_db_t db, char *type, rec_record_t record); +void recins_parse_args (int argc, char **argv); + +/* + * Global variables + */ + +char *recutl_type = NULL; +rec_sex_t recutl_sex = NULL; +char *recutl_sex_str = NULL; +char *recutl_quick_str = NULL; +bool recutl_insensitive = false; +rec_record_t recins_record = NULL; +char *recins_file = NULL; +bool recins_force = false; +bool recins_verbose = false; +bool recins_external = true; +bool recins_auto = true; +char *recins_password = NULL; +size_t recutl_random = 0; + +/* + * Command line options management + */ + +enum +{ + COMMON_ARGS, + RECORD_SELECTION_ARGS, + NAME_ARG, + VALUE_ARG, + FORCE_ARG, + VERBOSE_ARG, + NO_EXTERNAL_ARG, + RECORD_ARG, +#if defined REC_CRYPT_SUPPORT + PASSWORD_ARG, +#endif + NO_AUTO_ARG +}; + +static const struct option GNU_longOptions[] = + { + COMMON_LONG_ARGS, + RECORD_SELECTION_LONG_ARGS, + {"type", required_argument, NULL, TYPE_ARG}, + {"name", required_argument, NULL, NAME_ARG}, + {"value", required_argument, NULL, VALUE_ARG}, + {"force", no_argument, NULL, FORCE_ARG}, + {"verbose", no_argument, NULL, VERBOSE_ARG}, + {"no-external", no_argument, NULL, NO_EXTERNAL_ARG}, + {"record", required_argument, NULL, RECORD_ARG}, + {"no-auto", no_argument, NULL, NO_AUTO_ARG}, +#if defined REC_CRYPT_SUPPORT + {"password", required_argument, NULL, PASSWORD_ARG}, +#endif + {NULL, 0, NULL, 0} + }; + +/* + * Functions. + */ + +void +recutl_print_help (void) +{ + /* TRANSLATORS: --help output, recins synopsis. + no-wrap */ + printf (_("\ +Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n")); + + /* TRANSLATORS: --help output, recins short description. + no-wrap */ + fputs (_("\ +Insert new records in a rec database.\n"), stdout); + + puts (""); + /* TRANSLATORS: --help output, recins arguments. + no-wrap */ + fputs (_("\ + -f, --field=STR field name; should be followed by a -v.\n\ + -v, --value=STR field value; should be preceded by an -f.\n\ + -r, --record=STR record that will be inserted in the file.\n\ + --force insert the record even if it is violating\n\ + record restrictions.\n\ + --no-external don't use external descriptors.\n\ + --no-auto don't insert auto generated fields.\n\ + --verbose give a detailed report if the integrity check\n\ + fails.\n"), stdout); + +#if defined REC_CRYPT_SUPPORT + /* TRANSLATORS: --help output, encryption related options. + no-wrap */ + fputs (_("\ + -s, --password=STR encrypt confidential fields with the given password.\n"), + stdout); +#endif + + recutl_print_help_common (); + + puts (""); + recutl_print_help_record_selection (); + + puts (""); + /* TRANSLATORS: --help output, notes on recins. + no-wrap */ + fputs (_("\ +If no FILE is specified then the command acts like a filter, getting\n\ +the data from standard input and writing the result to standard output.\n"), stdout); + + puts (""); + recutl_print_help_footer (); +} + + +void recins_parse_args (int argc, + char **argv) +{ + int ret; + char c; + rec_field_t field = NULL; + char *field_name = NULL; + rec_record_t provided_record; + + while ((ret = getopt_long (argc, + argv, + RECORD_SELECTION_SHORT_ARGS + ENCRYPTION_SHORT_ARGS + "f:v:r:", + GNU_longOptions, + NULL)) != -1) + { + c = ret; + switch (c) + { + COMMON_ARGS_CASES + RECORD_SELECTION_ARGS_CASES + case FORCE_ARG: + { + recins_force = true; + break; + } + case VERBOSE_ARG: + { + recins_verbose = true; + break; + } + case NAME_ARG: + case 'f': + { + if (field != NULL) + { + recutl_fatal (_("a -f should be followed by a -v\n")); + exit (EXIT_FAILURE); + } + + if (recins_record == NULL) + { + recins_record = rec_record_new (); + rec_record_set_source (recins_record, "cmdli"); + rec_record_set_location (recins_record, 0); + } + + if (!rec_field_name_p (optarg)) + { + recutl_fatal (_("invalid field name %s.\n"), optarg); + } + + field = rec_field_new (optarg, "foo"); + break; + } + case VALUE_ARG: + case 'v': + { + if (field == NULL) + { + recutl_fatal (_("a -v should be preceded by a -f\n")); + } + + rec_field_set_value (field, optarg); + rec_mset_append (rec_record_mset (recins_record), MSET_FIELD, (void *) field, MSET_ANY); + + field = NULL; + break; + } + case NO_EXTERNAL_ARG: + { + recins_external = false; + break; + } + case NO_AUTO_ARG: + { + recins_auto = false; + break; + } +#if defined REC_CRYPT_SUPPORT + case PASSWORD_ARG: + case 's': + { + if (recins_password != NULL) + { + recutl_fatal (_("more than one password was specified\n")); + } + + recins_password = xstrdup (optarg); + break; + } +#endif + case RECORD_ARG: + case 'r': + { + /* Parse the provided record and put it in recins_record. */ + provided_record = rec_parse_record_str (optarg); + if (!provided_record) + { + recutl_fatal (_("error while parsing the record provided by -r\n")); + } + + if (recins_record) + { + /* Append the fields in provided_record into + recins_record. */ + + rec_mset_iterator_t iter = rec_mset_iterator (rec_record_mset (provided_record)); + while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) + { + rec_mset_append (rec_record_mset (recins_record), MSET_FIELD, (void *) rec_field_dup (field), MSET_ANY); + field = NULL; + } + rec_mset_iterator_free (&iter); + + rec_record_destroy (provided_record); + provided_record = NULL; + } + else + { + recins_record = provided_record; + } + + break; + } + default: + { + exit (EXIT_FAILURE); + } + } + } + + if (field != NULL) + { + recutl_fatal (_("please provide a value for the field %s\n"), field_name); + } + + /* Read the name of the file where to make the insertions. */ + if (optind < argc) + { + + if ((argc - optind) != 1) + { + recutl_print_help (); + exit (EXIT_FAILURE); + } + + recins_file = argv[optind++]; + } +} + +void +recins_add_new_record (rec_db_t db) +{ + int flags = 0; + +#if defined REC_CRYPT_SUPPORT + + /* Get the password interactively from the user if some field is + declared as confidential in the requested record set. */ + + { + rec_rset_t rset; + rec_fex_t confidential_fields; + + if (recutl_type) + { + rset = rec_db_get_rset_by_type (db, recutl_type); + + if (rset) + { + confidential_fields = rec_rset_confidential (rset); + if (!confidential_fields) + recutl_out_of_memory (); + + if (rec_fex_size (confidential_fields) > 0) + { + if (!recins_password && recutl_interactive ()) + { + recins_password = recutl_getpass (true); + if (!recins_password) + { + recutl_fatal ("not in an interactive terminal.\n"); + } + } + + /* Passwords can't be empty. */ + + if (recins_password && (strlen (recins_password) == 0)) + { + free (recins_password); + recins_password = NULL; + } + } + } + } + } + +#endif /* REC_CRYPT_SUPPORT */ + + /* Set flags flags and call the library to perform the + requested insertion/replacement operation. */ + + if (recutl_insensitive) + { + flags = flags | REC_F_ICASE; + } + + if (!recins_auto) + { + flags = flags | REC_F_NOAUTO; + } + + if (!rec_db_insert (db, + recutl_type, + recutl_index (), + recutl_sex, + recutl_quick_str, + recutl_random, + recins_password, + recins_record, + flags)) + recutl_out_of_memory (); + + /* Check for the integrity of the resulting database. */ + + if (!recins_force && db) + { + recutl_check_integrity (db, recins_verbose, recins_external); + } +} + +int +main (int argc, char *argv[]) +{ + rec_db_t db; + + recutl_init ("recins"); + + recins_parse_args (argc, argv); + + db = recutl_read_db_from_file (recins_file); + if (!db) + { + /* Create an empty database. */ + db = rec_db_new (); + } + recins_add_new_record (db); + + if (!recutl_file_is_writable (recins_file)) + { + recutl_error (_("file %s is not writable.\n"), recins_file); + return EXIT_FAILURE; + } + recutl_write_db_to_file (db, recins_file); + + return EXIT_SUCCESS; +} + +/* End of recins.c */ diff --git a/devspec.en_US/project/recutils/utils/recsel b/devspec.en_US/project/recutils/utils/recsel new file mode 100755 index 0000000..c57d93e --- /dev/null +++ b/devspec.en_US/project/recutils/utils/recsel @@ -0,0 +1,228 @@ +#! /bin/sh + +# recsel - temporary wrapper script for .libs/recsel +# Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-2 +# +# The recsel program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command="(cd /mnt/lfs/build/recutils/recutils-1.8/utils; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/home/devenkong/bin:/home/devenkong/.local/bin:/home/devenkong/bin:/home/devenkong/.local/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/home/devenkong/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/; export PATH; gcc -g -O2 -o \$progdir/\$file recutl.o recsel.o ../lib/.libs/librecutils.a -lm ../src/.libs/librec.so -Wl,-rpath -Wl,/mnt/lfs/build/recutils/recutils-1.8/src/.libs)" + +# This environment variable determines our operation mode. +if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then + # install mode needs the following variables: + generated_by_libtool_version='2.4.6' + notinst_deplibs=' ../src/librec.la' +else + # When we are sourced in execute mode, $file and $ECHO are already set. + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + file="$0" + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + ECHO="printf %s\\n" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string --lt- +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's ../libtool value, followed by no. +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=$0 + shift + for lt_opt + do + case "$lt_opt" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%/[^/]*$%%'` + test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=. + lt_dump_F=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%^.*/%%'` + cat "$lt_dump_D/$lt_dump_F" + exit 0 + ;; + --lt-*) + $ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n "$lt_option_debug"; then + echo "recsel:recsel:$LINENO: libtool wrapper (GNU libtool) 2.4.6 Debian-2.4.6-2" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + $ECHO "recsel:recsel:$LINENO: newargv[$lt_dump_args_N]: $lt_arg" + lt_dump_args_N=`expr $lt_dump_args_N + 1` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ + + if test -n "$lt_option_debug"; then + $ECHO "recsel:recsel:$LINENO: newargv[0]: $progdir/$program" 1>&2 + func_lt_dump_args ${1+"$@"} 1>&2 + fi + exec "$progdir/$program" ${1+"$@"} + + $ECHO "$0: cannot exec $program $*" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from $@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case " $* " in + *\ --lt-*) + for lt_wr_arg + do + case $lt_wr_arg in + --lt-*) ;; + *) set x "$@" "$lt_wr_arg"; shift;; + esac + shift + done ;; + esac + func_exec_program_core ${1+"$@"} +} + + # Parse options + func_parse_lt_options "$0" ${1+"$@"} + + # Find the directory that this script lives in. + thisdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + test "x$thisdir" = "x$file" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'` + while test -n "$file"; do + destdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + + # If there was a directory component, then change thisdir. + if test "x$destdir" != "x$file"; then + case "$destdir" in + [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;; + *) thisdir="$thisdir/$destdir" ;; + esac + fi + + file=`$ECHO "$file" | /bin/sed 's%^.*/%%'` + file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no + if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then + # special case for '.' + if test "$thisdir" = "."; then + thisdir=`pwd` + fi + # remove .libs from thisdir + case "$thisdir" in + *[\\/].libs ) thisdir=`$ECHO "$thisdir" | /bin/sed 's%[\\/][^\\/]*$%%'` ;; + .libs ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=`cd "$thisdir" && pwd` + test -n "$absdir" && thisdir="$absdir" + + program=lt-'recsel' + progdir="$thisdir/.libs" + + if test ! -f "$progdir/$program" || + { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \ + test "X$file" != "X$progdir/$program"; }; then + + file="$$-$program" + + if test ! -d "$progdir"; then + mkdir "$progdir" + else + rm -f "$progdir/$file" + fi + + # relink executable if necessary + if test -n "$relink_command"; then + if relink_command_output=`eval $relink_command 2>&1`; then : + else + $ECHO "$relink_command_output" >&2 + rm -f "$progdir/$file" + exit 1 + fi + fi + + mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null || + { rm -f "$progdir/$program"; + mv -f "$progdir/$file" "$progdir/$program"; } + rm -f "$progdir/$file" + fi + + if test -f "$progdir/$program"; then + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + # Run the actual program with our arguments. + func_exec_program ${1+"$@"} + fi + else + # The program doesn't exist. + $ECHO "$0: error: '$progdir/$program' does not exist" 1>&2 + $ECHO "This script is just a wrapper for $program." 1>&2 + $ECHO "See the libtool documentation for more information." 1>&2 + exit 1 + fi +fi diff --git a/devspec.en_US/project/recutils/utils/recsel.c b/devspec.en_US/project/recutils/utils/recsel.c new file mode 100755 index 0000000..eac6a74 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/recsel.c @@ -0,0 +1,535 @@ +/* -*- mode: C -*- + * + * File: recsel.c + * Date: Fri Jan 1 23:12:38 2010 + * + * GNU recutils - recsel + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <getopt.h> +#include <string.h> +#include <stdlib.h> +#include <xalloc.h> +#include <gettext.h> +#define _(str) gettext (str) + +#include <rec.h> +#include <recutl.h> + +/* Forward prototypes. */ +void recsel_parse_args (int argc, char **argv); +bool recsel_process_data (rec_db_t db); + +/* + * Global variables + */ + +char *recutl_sex_str = NULL; +rec_sex_t recutl_sex = NULL; +char *recutl_quick_str = NULL; +char *recsel_fex_str = NULL; +rec_fex_t recsel_fex = NULL; +char *recutl_type = NULL; +bool recsel_collapse = false; +bool recsel_count = false; +bool recutl_insensitive = false; +bool recsel_descriptors = false; +rec_fex_t recutl_sort_by_fields = NULL; +rec_fex_t recsel_group_by_fields = NULL; +rec_writer_mode_t recsel_write_mode = REC_WRITER_NORMAL; +char *recsel_password = NULL; +bool recsel_uniq = false; +size_t recutl_random = 0; +char *recsel_join = NULL; + +/* + * Command line options management. + */ + +enum +{ + COMMON_ARGS, + RECORD_SELECTION_ARGS, + PRINT_ARG, + PRINT_VALUES_ARG, + PRINT_IN_A_ROW_ARG, + COLLAPSE_ARG, + COUNT_ARG, + DESCRIPTOR_ARG, + PRINT_SEXPS_ARG, + SORT_ARG, +#if defined REC_CRYPT_SUPPORT + PASSWORD_ARG, +#endif + UNIQ_ARG, + GROUP_BY_ARG, + JOIN_ARG +}; + +static const struct option GNU_longOptions[] = + { + COMMON_LONG_ARGS, + RECORD_SELECTION_LONG_ARGS, + {"print", required_argument, NULL, PRINT_ARG}, + {"print-values", required_argument, NULL, PRINT_VALUES_ARG}, + {"print-row", required_argument, NULL, PRINT_IN_A_ROW_ARG}, + {"collapse", no_argument, NULL, COLLAPSE_ARG}, + {"count", no_argument, NULL, COUNT_ARG}, + {"include-descriptors", no_argument, NULL, DESCRIPTOR_ARG}, + {"print-sexps", no_argument, NULL, PRINT_SEXPS_ARG}, + {"sort", required_argument, NULL, SORT_ARG}, +#if defined REC_CRYPT_SUPPORT + {"password", required_argument, NULL, PASSWORD_ARG}, +#endif + {"uniq", no_argument, NULL, UNIQ_ARG}, + {"group-by", required_argument, NULL, GROUP_BY_ARG}, + {"join", required_argument, NULL, JOIN_ARG}, + {NULL, 0, NULL, 0} + }; + +/* + * Functions. + */ + +void +recutl_print_help (void) +{ + /* TRANSLATORS: --help output, recsel synopsis. + no-wrap */ + printf (_("\ +Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n")); + + /* TRANSLATORS: --help output, recsel arguments. + no-wrap */ + fputs(_("\ +Select and print rec data.\n"), stdout); + + puts (""); + /* TRANSLATORS: --help output, recsel arguments. + no-wrap */ + fputs (_("\ + -d, --include-descriptors print record descriptors along with the matched\n\ + records.\n\ + -C, --collapse do not section the result in records with newlines.\n\ + -S, --sort=FIELD,... sort the output by the specified fields.\n\ + -G, --group-by=FIELD,... group records by the specified fields.\n\ + -U, --uniq remove duplicated fields in the output records.\n"), + stdout); + +#if defined REC_CRYPT_SUPPORT + /* TRANSLATORS: --help output, encryption related options. + no-wrap */ + fputs (_("\ + -s, --password=STR decrypt confidential fields with the given password.\n"), + stdout); +#endif + + recutl_print_help_common (); + + puts (""); + recutl_print_help_record_selection (); + fputs (_("\ + -j, --join=FIELD perform an inner join using the specified field.\n"), + stdout); + + puts (""); + /* TRANSLATORS: --help output, recsel output options. + no-wrap */ + fputs (_("\ +Output options:\n\ + -p, --print=FIELDS comma-separated list of fields to print for each\n\ + matching record.\n\ + -P, --print-values=FIELDS as -p, but print only the values of the selected\n\ + fields.\n\ + -R, --print-row=FIELDS as -P, but separate the values with spaces instead\n\ + of newlines.\n\ + -c, --count print a count of the matching records instead of\n\ + the records themselves.\n"), stdout); + + puts (""); + /* TRANSLATORS: --help output, recsel special options. + no-wrap */ + fputs (_("\ +Special options:\n\ + --print-sexps print the data in sexps instead of rec format.\n"), + stdout); + + puts (""); + recutl_print_help_footer (); +} + +void +recsel_parse_args (int argc, + char **argv) +{ + char c; + int ret; + + while ((ret = getopt_long (argc, + argv, + RECORD_SELECTION_SHORT_ARGS + ENCRYPTION_SHORT_ARGS + "S:Cdcp:P:R:UG:j:", + GNU_longOptions, + NULL)) != -1) + { + c = ret; + switch (c) + { + COMMON_ARGS_CASES + RECORD_SELECTION_ARGS_CASES + case DESCRIPTOR_ARG: + case 'd': + { + recsel_descriptors = true; + break; + } + case PRINT_SEXPS_ARG: + { + recsel_write_mode = REC_WRITER_SEXP; + break; + } + case UNIQ_ARG: + case 'U': + { + recsel_uniq = true; + break; + } +#if defined REC_CRYPT_SUPPORT + case PASSWORD_ARG: + case 's': + { + if (recsel_password != NULL) + { + recutl_fatal (_("more than one password was specified\n")); + } + + recsel_password = xstrdup (optarg); + break; + } +#endif + case SORT_ARG: + case 'S': + { + if (recutl_sort_by_fields) + { + recutl_fatal (_("only one field list can be specified as a sorting criteria.\n")); + } + + /* Parse the field name. */ + + if (!rec_fex_check (optarg, REC_FEX_CSV)) + { + recutl_fatal (_("invalid field names in -S.\n")); + } + + recutl_sort_by_fields = rec_fex_new (optarg, REC_FEX_CSV); + if (!recutl_sort_by_fields) + { + recutl_fatal (_("internal error creating fex.\n")); + } + + break; + } + case JOIN_ARG: + case 'j': + { + if (recsel_join) + { + recutl_fatal (_("only one field can be specified as join criteria.\n")); + } + + if (!rec_field_name_p (optarg)) + { + recutl_fatal (_("please specify a correct field name to -j|--join.\n")); + } + + recsel_join = xstrdup (optarg); + break; + } + case GROUP_BY_ARG: + case 'G': + { + if (recsel_group_by_fields) + { + recutl_fatal (_("only one field list can be specified as a grouping criteria.\n")); + } + + /* Parse the field name. */ + if (!rec_fex_check (optarg, REC_FEX_CSV)) + { + recutl_fatal (_("invalid field names in -G.\n")); + } + + recsel_group_by_fields = rec_fex_new (optarg, REC_FEX_CSV); + if (!recsel_group_by_fields) + { + recutl_fatal (_("internal error creating fex.\n")); + } + + break; + } + case PRINT_ARG: + case PRINT_VALUES_ARG: + case PRINT_IN_A_ROW_ARG: + case 'p': + case 'P': + case 'R': + { + if (recsel_count) + { + recutl_fatal (_("cannot specify -[pPR] and also -c.\n")); + } + + if ((c == 'P') || (c == PRINT_VALUES_ARG)) + { + recsel_write_mode = REC_WRITER_VALUES; + } + + if ((c == 'R') || (c == PRINT_IN_A_ROW_ARG)) + { + recsel_write_mode = REC_WRITER_VALUES_ROW; + } + + recsel_fex_str = xstrdup (optarg); + + if (!rec_fex_check (recsel_fex_str, REC_FEX_SUBSCRIPTS)) + { + recutl_fatal (_("invalid list of fields in -%c\n"), c); + } + + /* Create the field expresion. */ + recsel_fex = rec_fex_new (recsel_fex_str, + REC_FEX_SUBSCRIPTS); + if (!recsel_fex) + { + recutl_fatal (_("internal error creating the field expression.\n")); + } + + /* Check that all the functions called in the fex exist. + Otherwise raise an error. */ + + { + size_t i = 0; + for (i = 0; i < rec_fex_size (recsel_fex); i++) + { + rec_fex_elem_t elem = rec_fex_get (recsel_fex, i); + const char *fname = rec_fex_elem_function_name (elem); + + if (fname && !rec_aggregate_std_p (fname)) + { + recutl_fatal (_("invalid aggregate function '%s'\n"), fname); + } + } + } + + break; + } + case COLLAPSE_ARG: + case 'C': + { + recsel_collapse = true; + break; + } + case COUNT_ARG: + case 'c': + { + if (recsel_fex_str) + { + recutl_fatal (_("cannot specify -c and also -p.\n")); + exit (EXIT_FAILURE); + } + + recsel_count = true; + break; + } + default: + { + exit (EXIT_FAILURE); + } + + } + } + + /* Global checks on the parameters. */ + + if (!recutl_type && recsel_join) + { + recutl_fatal (_("joins can only be used when a named record set is selected.\n")); + } +} + +bool +recsel_process_data (rec_db_t db) +{ + int rset_size = 0; + rec_rset_t rset = NULL; + rec_writer_t writer = NULL; + + +#if defined REC_CRYPT_SUPPORT + + /* If recsel was called interactively and with an empty -s, was not + used then prompt the user for it. Otherwise use the password + specified in the command line if any. */ + + if (!recsel_password + && (recutl_type || (rec_db_size (db) == 1)) + && recutl_interactive ()) + { + rec_rset_t rset; + rec_fex_t confidential_fields; + + if (recutl_type) + { + rset = rec_db_get_rset_by_type (db, recutl_type); + } + else + { + rset = rec_db_get_rset (db, 0); + } + + if (rset) + { + confidential_fields = rec_rset_confidential (rset); + if (rec_fex_size (confidential_fields) > 0) + { + recsel_password = recutl_getpass (false); + } + + rec_fex_destroy (confidential_fields); + } + } + + /* Note that the password must be at least one character long. */ + + if (recsel_password && (strlen (recsel_password) == 0)) + { + free (recsel_password); + recsel_password = NULL; + } + +#endif /* REC_CRYPT_SUPPORT */ + + /* If the database contains more than one type of records and the + user did'nt specify the recutl_type then ask the user to clarify + the request. */ + + if (!recutl_type && (rec_db_size (db) > 1)) + { + recutl_fatal (_("several record types found. Please use -t to specify one.\n")); + } + + + /* Query the database using the criteria specified by the user in + the command line. */ + + { + int flags = 0; + + if (recutl_insensitive) + { + flags = flags | REC_F_ICASE; + } + + if (recsel_descriptors) + { + flags = flags | REC_F_DESCRIPTOR; + } + + if (recsel_uniq) + { + flags = flags | REC_F_UNIQ; + } + + rset = rec_db_query (db, + recutl_type, + recsel_join, + recutl_index(), + recutl_sex, + recutl_quick_str, + recutl_random, + recsel_fex, + recsel_password, + recsel_group_by_fields, + recutl_sort_by_fields, + flags); + if (!rset) + recutl_out_of_memory (); + } + + if (recsel_count) + { + /* Write the number of matching records. */ + + fprintf (stdout, "%d\n", rec_rset_num_records (rset)); + } + else + { + /* Write the resulting record set to the standard output. */ + + writer = rec_writer_new (stdout); + rec_writer_set_collapse (writer, recsel_collapse); + rec_writer_set_skip_comments (writer, true); + rec_writer_set_mode (writer, recsel_write_mode); + rec_write_rset (writer, rset); + rec_writer_destroy (writer); + } + + rec_rset_destroy (rset); + + return true; +} + +int +main (int argc, char *argv[]) +{ + int res; + rec_db_t db; + + res = 0; + + recutl_init ("recsel"); + + /* Parse arguments. */ + recsel_parse_args (argc, argv); + + /* Get the input data. */ + db = recutl_build_db (argc, argv); + if (!db) + { + res = 1; + return res; + } + + /* Process the data. */ + if (!recsel_process_data (db)) + { + res = 1; + } + + rec_db_destroy (db); + + return res; +} + +/* End of recsel.c */ diff --git a/devspec.en_US/project/recutils/utils/recset b/devspec.en_US/project/recutils/utils/recset new file mode 100755 index 0000000..a7ad437 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/recset @@ -0,0 +1,228 @@ +#! /bin/sh + +# recset - temporary wrapper script for .libs/recset +# Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-2 +# +# The recset program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command="(cd /mnt/lfs/build/recutils/recutils-1.8/utils; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/home/devenkong/bin:/home/devenkong/.local/bin:/home/devenkong/bin:/home/devenkong/.local/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/bin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/sbin:/mnt/lfs/buildroot/sys-basic/buildroot/package/service/fake-rootfs/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/home/devenkong/bin:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/:/mnt/lfs/opt/gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabi/bin/; export PATH; gcc -g -O2 -o \$progdir/\$file recutl.o recset.o ../lib/.libs/librecutils.a -lm ../src/.libs/librec.so -Wl,-rpath -Wl,/mnt/lfs/build/recutils/recutils-1.8/src/.libs)" + +# This environment variable determines our operation mode. +if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then + # install mode needs the following variables: + generated_by_libtool_version='2.4.6' + notinst_deplibs=' ../src/librec.la' +else + # When we are sourced in execute mode, $file and $ECHO are already set. + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + file="$0" + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + ECHO="printf %s\\n" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string --lt- +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's ../libtool value, followed by no. +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=$0 + shift + for lt_opt + do + case "$lt_opt" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%/[^/]*$%%'` + test "X$lt_dump_D" = "X$lt_script_arg0" && lt_dump_D=. + lt_dump_F=`$ECHO "X$lt_script_arg0" | /bin/sed -e 's/^X//' -e 's%^.*/%%'` + cat "$lt_dump_D/$lt_dump_F" + exit 0 + ;; + --lt-*) + $ECHO "Unrecognized --lt- option: '$lt_opt'" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n "$lt_option_debug"; then + echo "recset:recset:$LINENO: libtool wrapper (GNU libtool) 2.4.6 Debian-2.4.6-2" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + $ECHO "recset:recset:$LINENO: newargv[$lt_dump_args_N]: $lt_arg" + lt_dump_args_N=`expr $lt_dump_args_N + 1` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ + + if test -n "$lt_option_debug"; then + $ECHO "recset:recset:$LINENO: newargv[0]: $progdir/$program" 1>&2 + func_lt_dump_args ${1+"$@"} 1>&2 + fi + exec "$progdir/$program" ${1+"$@"} + + $ECHO "$0: cannot exec $program $*" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from $@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case " $* " in + *\ --lt-*) + for lt_wr_arg + do + case $lt_wr_arg in + --lt-*) ;; + *) set x "$@" "$lt_wr_arg"; shift;; + esac + shift + done ;; + esac + func_exec_program_core ${1+"$@"} +} + + # Parse options + func_parse_lt_options "$0" ${1+"$@"} + + # Find the directory that this script lives in. + thisdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + test "x$thisdir" = "x$file" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'` + while test -n "$file"; do + destdir=`$ECHO "$file" | /bin/sed 's%/[^/]*$%%'` + + # If there was a directory component, then change thisdir. + if test "x$destdir" != "x$file"; then + case "$destdir" in + [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;; + *) thisdir="$thisdir/$destdir" ;; + esac + fi + + file=`$ECHO "$file" | /bin/sed 's%^.*/%%'` + file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no + if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then + # special case for '.' + if test "$thisdir" = "."; then + thisdir=`pwd` + fi + # remove .libs from thisdir + case "$thisdir" in + *[\\/].libs ) thisdir=`$ECHO "$thisdir" | /bin/sed 's%[\\/][^\\/]*$%%'` ;; + .libs ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=`cd "$thisdir" && pwd` + test -n "$absdir" && thisdir="$absdir" + + program=lt-'recset' + progdir="$thisdir/.libs" + + if test ! -f "$progdir/$program" || + { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \ + test "X$file" != "X$progdir/$program"; }; then + + file="$$-$program" + + if test ! -d "$progdir"; then + mkdir "$progdir" + else + rm -f "$progdir/$file" + fi + + # relink executable if necessary + if test -n "$relink_command"; then + if relink_command_output=`eval $relink_command 2>&1`; then : + else + $ECHO "$relink_command_output" >&2 + rm -f "$progdir/$file" + exit 1 + fi + fi + + mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null || + { rm -f "$progdir/$program"; + mv -f "$progdir/$file" "$progdir/$program"; } + rm -f "$progdir/$file" + fi + + if test -f "$progdir/$program"; then + if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then + # Run the actual program with our arguments. + func_exec_program ${1+"$@"} + fi + else + # The program doesn't exist. + $ECHO "$0: error: '$progdir/$program' does not exist" 1>&2 + $ECHO "This script is just a wrapper for $program." 1>&2 + $ECHO "See the libtool documentation for more information." 1>&2 + exit 1 + fi +fi diff --git a/devspec.en_US/project/recutils/utils/recset.c b/devspec.en_US/project/recutils/utils/recset.c new file mode 100755 index 0000000..17fae5f --- /dev/null +++ b/devspec.en_US/project/recutils/utils/recset.c @@ -0,0 +1,373 @@ +/* -*- mode: C -*- + * + * File: recset.c + * Date: Fri Apr 9 17:06:39 2010 + * + * GNU recutils - recset + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <getopt.h> +#include <string.h> +#include <stdlib.h> +#include <xalloc.h> +#include <gettext.h> +#define _(str) gettext (str) + +#include <rec.h> +#include <recutl.h> + +/* + * Forward prototypes. + */ + +static void recset_parse_args (int argc, char **argv); +static void recset_process_actions (rec_db_t db); + +/* + * Global variables. + */ + +char *recutl_sex_str = NULL; +rec_sex_t recutl_sex = NULL; +char *recutl_quick_str = NULL; +char *recutl_fex_str = NULL; +rec_fex_t recutl_fex = NULL; +char *recutl_type = NULL; +int recset_action = REC_SET_ACT_NONE; +char *recset_value = NULL; +char *recset_new_field_name = NULL; +bool recutl_insensitive = false; +char *recset_file = NULL; +bool recset_force = false; +bool recset_verbose = false; +bool recset_external = true; +bool recset_descriptor_renamed = false; +size_t recutl_random = 0; + +/* + * Command line options management + */ + +enum + { + COMMON_ARGS, + RECORD_SELECTION_ARGS, + FIELD_EXPR_ARG, + ADD_ACTION_ARG, + RENAME_ACTION_ARG, + DELETE_ACTION_ARG, + COMMENT_ACTION_ARG, + SET_ACTION_ARG, + SET_ADD_ACTION_ARG, + FORCE_ARG, + VERBOSE_ARG, + NO_EXTERNAL_ARG + }; + +static const struct option GNU_longOptions[] = + { + COMMON_LONG_ARGS, + RECORD_SELECTION_LONG_ARGS, + {"fields", required_argument, NULL, FIELD_EXPR_ARG}, + {"add", required_argument, NULL, ADD_ACTION_ARG}, + {"rename", required_argument, NULL, RENAME_ACTION_ARG}, + {"delete", no_argument, NULL, DELETE_ACTION_ARG}, + {"comment", no_argument, NULL, COMMENT_ACTION_ARG}, + {"set", required_argument, NULL, SET_ACTION_ARG}, + {"set-add", required_argument, NULL, SET_ADD_ACTION_ARG}, + {"force", no_argument, NULL, FORCE_ARG}, + {"verbose", no_argument, NULL, VERBOSE_ARG}, + {"no-external", no_argument, NULL, NO_EXTERNAL_ARG}, + {NULL, 0, NULL, 0} + }; + +/* + * Functions. + */ + + +void +recutl_print_help (void) +{ + /* TRANSLATORS: --help output, recset synopsis. + no-wrap */ + printf (_("\ +Usage: recset [OPTION]... [FILE]...\n")); + + /* TRANSLATORS: --help output, recset short description. + no-wrap */ + fputs (_("\ +Alter or delete fields in records.\n"), stdout); + + puts (""); + /* TRANSLATORS: --help output, recset options. + no-wrap */ + fputs (_("\ + --no-external don't use external descriptors.\n\ + --force alter the records even if violating record\n\ + restrictions.\n"), stdout); + + recutl_print_help_common (); + + puts (""); + recutl_print_help_record_selection (); + + puts (""); + /* TRANSLATORS: --help output, recset field selection options. + no-wrap */ + fputs (_("\ +Field selection options:\n\ + -f, --fields=FIELDS comma-separated list of field names with optional\n\ + subscripts.\n"), stdout); + + puts (""); + /* TRANSLATORS: --help output, recset actions. + no-wrap */ + fputs (_("\ +Actions:\n\ + -s, --set=VALUE change the value of the selected fields.\n\ + -a, --add=VALUE add the selected fields with the given value.\n\ + -S, --set-add=VALUE change the value of the selected fields. If they don't\n\ + exist then add a new field with that value.\n\ + -r, --rename=NAME rename the selected fields to a given name. If an entire\n\ + record set is selected then the field is renamed in the\n\ + record descriptor as well.\n\ + -d, --delete delete the selected fields.\n\ + -c, --comment comment out the selected fields.\n"), stdout); + + puts (""); + recutl_print_help_footer (); +} + +/* This macro is used in recset_parse_args to avoid code repetition in + the actions (set, add, delete, ...) switch cases.. */ +#define CHECK_ACTION_PREREQ \ + do \ + { \ + if (!recutl_fex) \ + { \ + recutl_fatal (_("please specify some field with -f.\n")); \ + } \ + \ + if (recset_action != REC_SET_ACT_NONE) \ + { \ + recutl_fatal (_("please specify just one action.\n")); \ + } \ + } \ + while (0) + +static void +recset_parse_args (int argc, + char **argv) +{ + int ret; + char c; + + while ((ret = getopt_long (argc, + argv, + RECORD_SELECTION_SHORT_ARGS + "dct:s:S:a:f:r:", + GNU_longOptions, + NULL)) != -1) + { + c = ret; + switch (c) + { + COMMON_ARGS_CASES + RECORD_SELECTION_ARGS_CASES + case FORCE_ARG: + { + recset_force = true; + break; + } + case VERBOSE_ARG: + { + recset_verbose = true; + break; + } + case FIELD_EXPR_ARG: + case 'f': + { + recutl_fex_str = xstrdup (optarg); + if (!rec_fex_check (recutl_fex_str, REC_FEX_SUBSCRIPTS)) + { + recutl_fatal (_("invalid field expression in -f.\n")); + } + + /* Create the field expression. */ + recutl_fex = rec_fex_new (recutl_fex_str, + REC_FEX_SUBSCRIPTS); + if (!recutl_fex) + { + recutl_fatal (_("creating the field expression.\n")); + } + + /* Sort it. */ + rec_fex_sort (recutl_fex); + + break; + } + case SET_ACTION_ARG: + case 's': + { + CHECK_ACTION_PREREQ; + recset_action = REC_SET_ACT_SET; + recset_value = xstrdup (optarg); + break; + } + case RENAME_ACTION_ARG: + case 'r': + { + CHECK_ACTION_PREREQ; + if (rec_fex_size (recutl_fex) != 1) + { + recutl_fatal (_("the rename operation requires just one field with an optional subscript.\n")); + } + + recset_action = REC_SET_ACT_RENAME; + recset_value = xstrdup (optarg); + + /* Validate the new name. */ + recset_new_field_name = recset_value; + if (!rec_field_name_p (recset_new_field_name)) + { + recutl_fatal (_("invalid field name %s.\n"), recset_value); + } + + break; + } + case ADD_ACTION_ARG: + case 'a': + { + CHECK_ACTION_PREREQ; + recset_action = REC_SET_ACT_ADD; + recset_value = xstrdup (optarg); + break; + } + case SET_ADD_ACTION_ARG: + case 'S': + { + CHECK_ACTION_PREREQ; + recset_action = REC_SET_ACT_SETADD; + recset_value = xstrdup (optarg); + break; + } + case DELETE_ACTION_ARG: + case 'd': + { + CHECK_ACTION_PREREQ; + recset_action = REC_SET_ACT_DELETE; + break; + } + case COMMENT_ACTION_ARG: + case 'c': + { + CHECK_ACTION_PREREQ; + recset_action = REC_SET_ACT_COMMENT; + break; + } + case NO_EXTERNAL_ARG: + { + recset_external = false; + break; + } + default: + { + exit (EXIT_FAILURE); + break; + } + } + } + + /* Read the name of the data source. */ + if (optind < argc) + { + if ((argc - optind) != 1) + { + recutl_print_help (); + exit (EXIT_FAILURE); + } + + recset_file = argv[optind++]; + } + +} + +static void +recset_process_actions (rec_db_t db) +{ + int flags = 0; + + if (recutl_insensitive) + { + flags = flags | REC_F_ICASE; + } + + if (!rec_db_set (db, + recutl_type, + recutl_index (), + recutl_sex, + recutl_quick_str, + recutl_random, + recutl_fex, + recset_action, + recset_value, + flags)) + recutl_out_of_memory (); + + /* Check the integrity of the resulting database. */ + + if (!recset_force && db) + { + recutl_check_integrity (db, recset_verbose, recset_external); + } +} + +int +main (int argc, char *argv[]) +{ + rec_db_t db; + + recutl_init ("recset"); + + /* Parse arguments. */ + recset_parse_args (argc, argv); + + db = recutl_read_db_from_file (recset_file); + if (!db) + { + recutl_fatal (_("cannot read file %s\n"), recset_file); + } + + recset_process_actions (db); + + if (!recutl_file_is_writable (recset_file)) + { + recutl_error (_("file %s is not writable.\n"), recset_file); + return EXIT_FAILURE; + } + recutl_write_db_to_file (db, recset_file); + + return EXIT_SUCCESS; +} + +/* End of recset.c */ diff --git a/devspec.en_US/project/recutils/utils/recutl.c b/devspec.en_US/project/recutils/utils/recutl.c new file mode 100755 index 0000000..ab03234 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/recutl.c @@ -0,0 +1,654 @@ +/* -*- mode: C -*- + * + * File: recutl.c + * Date: Thu Apr 22 17:30:48 2010 + * + * GNU recutils - Common code for the utilities. + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <config.h> + +#include <stdlib.h> +#include <getopt.h> +#include <stdio.h> +#include <string.h> +#include <stdarg.h> +#include <closeout.h> +#include <xalloc.h> +#include <unistd.h> +#include <locale.h> +#include <gettext.h> +#define _(str) gettext (str) +#if defined REC_CRYPT_SUPPORT +# include <gcrypt.h> +#endif +#include <progname.h> +#include <sys/stat.h> +#include <readline.h> +#include <regex.h> +#include <stdint.h> +#include <time.h> +#include <unistd.h> +#include <getpass.h> +#include <tmpdir.h> +#include <pathmax.h> +/* GNU/Hurd doesn't define PATH_MAX */ +#ifndef PATH_MAX +# define PATH_MAX 8192 +#endif + +#include <rec.h> +#include <recutl.h> +#include "read-file.h" + +/* + * Global variables. + */ + +static bool recutl_sort_p = false; +static char *recutl_order_rset = NULL; +static char *recutl_order_by_field = NULL; +static bool recutl_interactive_p = false; +static size_t *recutl_indexes = NULL; +static size_t recutl_indexes_size = 0; + +void recutl_print_help (void); /* Forward prototype. */ + +void +recutl_init (char *util_name) +{ + set_program_name (xstrdup (util_name)); + +#if defined REC_CRYPT_SUPPORT + /* Initialize libgcrypt */ + gcry_check_version (NULL); + gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0); +#endif + + /* Initialize librec */ + rec_init (); + + /* Even exiting has subtleties. On exit, if any writes failed, change + the exit status. The /dev/full device on GNU/Linux can be used for + testing; for instance, hello >/dev/full should exit unsuccessfully. + This is implemented in the Gnulib module "closeout". */ + atexit (close_stdout); + + /* i18n */ + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + + /* Detect whether the tool has been invoked interactively. */ + + recutl_interactive_p = isatty (fileno(stdin)); + + /* Initially there are no indexes. */ + + recutl_reset_indexes (); +} + +bool +recutl_interactive (void) +{ + return recutl_interactive_p; +} + +void +recutl_print_help_footer (void) +{ + /* TRANSLATORS: --help output 5+ (reports) + TRANSLATORS: the placeholder indicates the bug-reporting address + for this application. Please add _another line_ with the + address for translation bugs. + no-wrap */ + printf (_("\ +Report bugs to: %s\n"), PACKAGE_BUGREPORT); +#ifdef PACKAGE_PACKAGER_BUG_REPORTS + printf (_("Report %s bugs to: %s\n"), PACKAGE_PACKAGER, + PACKAGE_PACKAGER_BUG_REPORTS); +#endif +#ifdef PACKAGE_URL + printf (_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL); +#else + printf (_("%s home page: <http://www.gnu.org/software/recutils/>\n"), + PACKAGE_NAME, PACKAGE); +#endif + fputs (_("General help using GNU software: <http://www.gnu.org/gethelp/>\n"), + stdout); +} + +void +recutl_print_help_common (void) +{ + /* TRANSLATORS: --help output, common arguments. + no-wrap */ + fputs (_("\ + --help print a help message and exit.\n\ + --version show version and exit.\n"), + stdout); +} + +void +recutl_print_help_record_selection (void) +{ + /* TRANSLATORS: --help output, record selection arguments + no-wrap */ + fputs (_("\ +Record selection options:\n\ + -i, --case-insensitive make strings case-insensitive in selection\n\ + expressions.\n\ + -t, --type=TYPE operate on records of the specified type only.\n\ + -e, --expression=RECORD_EXPR selection expression.\n\ + -q, --quick=STR select records with fields containing a string.\n\ + -n, --number=NUM,... select specific records by position, with ranges.\n\ + -m, --random=NUM select a given number of random records.\n"), + stdout); +} + +void +recutl_print_version (void) +{ + printf ("%s (GNU %s) %s\n", + program_name, + PACKAGE, + VERSION); + /* xgettext: no-wrap */ + puts (""); + + /* It is important to separate the year from the rest of the message, + as done here, to avoid having to retranslate the message when a new + year comes around. */ + printf (_("\ +Copyright (C) %s Jose E. Marchesi.\n\ +License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n\ +This is free software: you are free to change and redistribute it.\n\ +There is NO WARRANTY, to the extent permitted by law.\n"), "2010-2019"); + + puts (_("\ +\n\ +Written by Jose E. Marchesi.")); +} + +void +recutl_fatal (const char *fmt, ...) +{ + va_list ap; + + va_start (ap, fmt); + fputs (program_name, stderr); + fputs (_(": error: "), stderr); + vfprintf (stderr, fmt, ap); + va_end (ap); + + exit (EXIT_FAILURE); +} + +void +recutl_out_of_memory (void) +{ + recutl_fatal (_("out of memory\n")); +} + +void +recutl_error (const char *fmt, ...) +{ + va_list ap; + + va_start (ap, fmt); + fputs (program_name, stderr); + fputs (_(": error: "), stderr); + vfprintf (stderr, fmt, ap); + va_end (ap); +} + +void +recutl_warning (const char *fmt, ...) +{ + va_list ap; + + va_start (ap, fmt); + fputs (program_name, stderr); + fputs (_(": warning: "), stderr); + vfprintf (stderr, fmt, ap); + va_end (ap); +} + +bool +recutl_parse_db_from_file (FILE *in, + char *file_name, + rec_db_t db) +{ + bool res; + rec_rset_t rset; + rec_parser_t parser; + + res = true; + + parser = rec_parser_new (in, file_name); + while (rec_parse_rset (parser, &rset)) + { + char *rset_type; + /* XXX: check for consistency!!!. */ + rset_type = rec_rset_type (rset); + if (rec_db_type_p (db, rset_type)) + { + if (rset_type) + recutl_fatal (_("duplicated record set '%s' from %s.\n"), + rset_type, file_name); + else + { + /* Special case: the database already contains anonymous + records (with no type) and the record set to be + inserted also contains anonyous records. In this + case we just append the records and comments in the + anonymous record set. */ + + rec_rset_t anon_rset = rec_db_get_rset_by_type (db, NULL); + rec_mset_iterator_t iter = rec_mset_iterator (rec_rset_mset (rset)); + rec_mset_elem_t elem; + while (rec_mset_iterator_next (&iter, MSET_ANY, NULL, &elem)) + { + void *data = rec_mset_elem_dup_data (elem); + if (!data + || !rec_mset_append (rec_rset_mset (anon_rset), + rec_mset_elem_type (elem), + data, + MSET_ANY)) + return false; + } + rec_mset_iterator_free (&iter); + return true; + } + } + + if (!rec_db_insert_rset (db, rset, rec_db_size (db))) + { + /* Error. */ + res = false; + break; + } + } + + if (rec_parser_error (parser)) + { + /* Report parsing errors. */ + rec_parser_perror (parser, "%s", file_name); + res = false; + } + rec_parser_destroy (parser); + + return res; +} + +rec_db_t +recutl_build_db (int argc, char **argv) +{ + rec_db_t db; + char *file_name; + FILE *in; + + db = rec_db_new (); + if (!db) + { + return NULL; + } + + /* Register the default functions in the database. */ + + + + /* Process the input files, if any. Otherwise use the standard + input to read the rec data. */ + + if (optind < argc) + { + while (optind < argc) + { + file_name = argv[optind++]; + if (!(in = fopen (file_name, "r"))) + { + recutl_fatal (_("cannot read file %s\n"), file_name); + } + else + { + if (!recutl_parse_db_from_file (in, file_name, db)) + { + free (db); + db = NULL; + } + + fclose (in); + } + } + } + else + { + if (!recutl_parse_db_from_file (stdin, "stdin", db)) + { + free (db); + db = NULL; + } + } + + return db; +} + +rec_db_t +recutl_read_db_from_file (char *file_name) +{ + rec_db_t db; + FILE *in; + + db = rec_db_new (); + if (file_name) + { + in = fopen (file_name, "r"); + if (in == NULL) + { + return NULL; + } + } + else + { + /* Process the standard input. */ + file_name = "stdin"; + in = stdin; + } + + if (!recutl_parse_db_from_file (in, + file_name, + db)) + { + rec_db_destroy (db); + db = NULL; + } + + return db; +} + +bool +recutl_file_is_writable (char *file_name) +{ + return !file_name || (euidaccess (file_name, W_OK) == 0); +} + +void +recutl_write_db_to_file (rec_db_t db, + char *file_name) +{ + FILE *out; + char tmp_file_name[PATH_MAX]; + rec_writer_t writer; + int des; + struct stat st1; + int stat_result; + + if (!file_name) + { + out = stdout; + } + else + { + /* Record the original file attributes. */ + stat_result = stat (file_name, &st1); + + /* Create a temporary file with the results. */ + if ((path_search (tmp_file_name, PATH_MAX, NULL, + "rec", true) == -1) + || ((des = mkstemp (tmp_file_name)) == -1)) + recutl_fatal (_("cannot create a unique name.\n")); + + out = fdopen (des, "w+"); + } + + writer = rec_writer_new (out); + rec_write_db (writer, db); + + if (file_name) + { + fclose (out); + } + + rec_db_destroy (db); + + if (file_name) + { + /* Rename the temporary file to file_name. */ + if (rename (tmp_file_name, file_name) == -1) + { + remove (tmp_file_name); + recutl_fatal (_("renaming file %s to %s\n"), tmp_file_name, file_name); + } + + /* Restore the attributes of the original file. */ + if (stat_result != -1) + { + chmod (file_name, st1.st_mode); + } + } +} + +char * +recutl_read_file (char *file_name) +{ + char *result; + FILE *in; + + result = NULL; + in = fopen (file_name, "r"); + if (in) + { + size_t file_size; + result = fread_file (in, &file_size); + fclose (in); + } + + return result; +} + +void +recutl_check_integrity (rec_db_t db, + bool verbose_p, + bool external_p) +{ + rec_buf_t errors_buf; + char *errors_str; + size_t errors_str_size; + + errors_buf = rec_buf_new (&errors_str, &errors_str_size); + if (rec_int_check_db (db, true, external_p, errors_buf) > 0) + { + rec_buf_close (errors_buf); + if (!verbose_p) + { + recutl_error (_("operation aborted due to integrity failures.\n")); + recutl_error (_("use --verbose to get a detailed report.\n")); + } + else + { + fprintf (stderr, "%s", errors_str); + } + + recutl_fatal (_("use --force to skip the integrity check.\n")); + } +} + +bool +recutl_yesno (char *prompt) +{ + bool res = false; + char *line = NULL; + + while (1) + { + line = readline (prompt); + if (line) + { + if (strcmp (line, "yes") == 0) + { + res = true; + break; + } + else if (strcmp (line, "no") == 0) + { + res = false; + break; + } + } + + printf ("Please answer 'yes' or 'no'.\n"); + } + + return res; +} + +#define INDEX_LIST_ENTRY_RE "[0-9]+(-[0-9]+)?" +#define INDEX_LIST_RE "(" INDEX_LIST_ENTRY_RE ",)*" INDEX_LIST_ENTRY_RE + +bool +recutl_index_list_parse (const char *str) +{ + regex_t regexp; + bool res = true; + const char *p; + long int number; + char *end; + size_t i; + + /* Initialize the list structure. An pessimistic estimation of the + number of indexes encoded in the string is used. */ + + free (recutl_indexes); + recutl_indexes = xmalloc (sizeof (size_t) * (strlen (str) * 2 + 2)); + for (i = 0; i < (strlen (str) * 2 + 2); i++) + { + recutl_indexes[i] = REC_Q_NOINDEX; + } + + /* Make sure the string is valid. The code below relies on this + fact. */ + + if (regcomp (®exp, "^" INDEX_LIST_RE "$", REG_EXTENDED) != 0) + { + recutl_fatal (_("internal error: recutl_index_list_parse: error compiling regexp.\n")); + return false; + } + + if (regexec (®exp, str, 0, NULL, 0) != 0) + { + regfree (®exp); + return false; + } + + regfree (®exp); + + /* Parse the string. */ + + p = str; + while (true) + { + /* Get the 'min' part of the entry. */ + + number = strtol (p, &end, 10); + recutl_indexes[recutl_indexes_size] = (size_t) number; + p = end; + + /* Get the 'max' part of the entry, if any. */ + + if (*p == '-') + { + p++; + number = strtol (p, &end, 10); + recutl_indexes[recutl_indexes_size+1] = (size_t) number; + p = end; + } + + recutl_indexes_size = recutl_indexes_size + 2; + + /* Exit or pass the separator. */ + + if (*p == '\0') + { + break; + } + else + { + p++; + } + } + + return res; +} + +void +recutl_reset_indexes (void) +{ + free (recutl_indexes); + recutl_indexes = NULL; + recutl_indexes_size = 0; +} + +size_t +recutl_num_indexes (void) +{ + return recutl_indexes_size; +} + +size_t * +recutl_index (void) +{ + return recutl_indexes; +} + +char * +recutl_getpass (bool asktwice) +{ + char *ret = NULL; + + char *pass = getpass (_("Password: ")); + if (pass) + { + ret = xstrdup (pass); + if (asktwice) + { + pass = getpass (_("Password again: ")); + if (pass) + { + if (strcmp (ret, pass) != 0) + { + recutl_fatal (_("the provided passwords don't match.\n")); + memset (ret, 0, strlen (ret)); + memset (pass, 0, strlen (pass)); + } + } + else + { + memset (ret, 0, strlen (ret)); + free (ret); + ret = NULL; + } + } + } + + return ret; +} + +/* End of recutl.c */ diff --git a/devspec.en_US/project/recutils/utils/recutl.h b/devspec.en_US/project/recutils/utils/recutl.h new file mode 100755 index 0000000..2f89729 --- /dev/null +++ b/devspec.en_US/project/recutils/utils/recutl.h @@ -0,0 +1,266 @@ +/* -*- mode: C -*- + * + * File: recutl.h + * Date: Thu Apr 22 17:29:52 2010 + * + * GNU recutils - Common code for the utilities. + * + */ + +/* Copyright (C) 2010-2019 Jose E. Marchesi */ + +/* This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef RECUTL_H +#define RECUTL_H + +#include <progname.h> + +/* + * Common arguments. + */ + +#define COMMON_ARGS \ + HELP_ARG, \ + VERSION_ARG + +#define COMMON_LONG_ARGS \ + {"help", no_argument, NULL, HELP_ARG}, \ + {"version", no_argument, NULL, VERSION_ARG} + +#define COMMON_ARGS_CASES \ + case HELP_ARG: \ + { \ + recutl_print_help (); \ + exit (EXIT_SUCCESS); \ + break; \ + } \ + case VERSION_ARG: \ + { \ + recutl_print_version (); \ + exit (EXIT_SUCCESS); \ + break; \ + } + +/* + * Record selection arguments. + */ + +#define RECORD_SELECTION_ARGS \ + TYPE_ARG, \ + EXPRESSION_ARG, \ + QUICK_ARG, \ + NUM_ARG, \ + INSENSITIVE_ARG, \ + RANDOM_ARG + +#define RECORD_SELECTION_LONG_ARGS \ + {"type", required_argument, NULL, TYPE_ARG}, \ + {"expression", required_argument, NULL, EXPRESSION_ARG}, \ + {"quick", required_argument, NULL, QUICK_ARG}, \ + {"number", required_argument, NULL, NUM_ARG}, \ + {"case-insensitive", no_argument, NULL, INSENSITIVE_ARG}, \ + {"random", required_argument, NULL, RANDOM_ARG} + +#define RECORD_SELECTION_SHORT_ARGS \ + "it:e:n:q:m:" + +#define RECORD_SELECTION_ARGS_CASES \ + case TYPE_ARG: \ + case 't': \ + { \ + recutl_type = xstrdup (optarg); \ + if (!rec_field_name_p (recutl_type)) \ + { \ + recutl_fatal ("invalid record type %s\n", \ + recutl_type); \ + } \ + break; \ + } \ + case EXPRESSION_ARG: \ + case 'e': \ + { \ + if (recutl_num_indexes() != 0) \ + { \ + recutl_fatal (_("cannot specify -e and also -n\n"));\ + } \ + \ + if (recutl_quick_str) \ + { \ + recutl_fatal (_("cannot specify -e and also -q\n"));\ + } \ + \ + recutl_sex_str = xstrdup (optarg); \ + \ + /* Compile the search expression. */ \ + if (recutl_sex_str) \ + { \ + recutl_sex = rec_sex_new (recutl_insensitive); \ + if (!rec_sex_compile (recutl_sex, recutl_sex_str)) \ + { \ + recutl_fatal(_("invalid selection expression\n")); \ + } \ + } \ + \ + break; \ + } \ + case NUM_ARG: \ + case 'n': \ + { \ + \ + if (recutl_sex) \ + { \ + recutl_fatal(_("cannot specify -n and also -e\n"));\ + } \ + \ + if (recutl_quick_str) \ + { \ + recutl_fatal(_("cannot specify -n and also -q\n"));\ + } \ + \ + if (recutl_num_indexes() != 0) \ + { \ + recutl_fatal ("please specify just one -n\n"); \ + } \ + \ + if (!recutl_index_list_parse (optarg)) \ + { \ + recutl_fatal (_("invalid list of indexes in -n\n")); \ + } \ + \ + break; \ + } \ + case RANDOM_ARG: \ + case 'm': \ + { \ + if (recutl_sex) \ + { \ + recutl_fatal (_("cannot specify -m and also -e\n"));\ + } \ + \ + if (recutl_quick_str) \ + { \ + recutl_fatal (_("cannot specify -m and also -q\n"));\ + } \ + \ + if (recutl_num_indexes() != 0) \ + { \ + recutl_fatal (_("cannot specify -m and also -n\n"));\ + } \ + \ + if (recutl_random) \ + { \ + recutl_fatal ("please specify just one -m\n"); \ + } \ + \ + { \ + char *end; \ + long int li = strtol (optarg, &end, 0); \ + if (*end != '\0') \ + { \ + recutl_fatal ("invalid number in -m\n"); \ + } \ + \ + recutl_random = li; \ + } \ + \ + break; \ + } \ + case QUICK_ARG: \ + case 'q': \ + { \ + if (recutl_sex) \ + { \ + recutl_fatal (_("cannot specify -e and also -n\n"));\ + } \ + if (recutl_num_indexes() != 0) \ + { \ + recutl_fatal (_("cannot specify -e and also -n\n"));\ + } \ + \ + recutl_quick_str = xstrdup (optarg); \ + break; \ + } \ + case INSENSITIVE_ARG: \ + case 'i': \ + { \ + recutl_insensitive = true; \ + break; \ + } + +#if defined REC_CRYPT_SUPPORT +# define ENCRYPTION_SHORT_ARGS "s:" +#else +# define ENCRYPTION_SHORT_ARGS "" +#endif + +/* + * Function prototypes. + */ + +void recutl_init (char *util_name); +void recutl_print_version (void); +void recutl_print_help_common (void); +void recutl_print_help_footer (void); +void recutl_print_help_record_selection (void); + + +void recutl_error (const char *fmt, ...); +void recutl_warning (const char *fmt, ...); +void recutl_fatal (const char *fmt, ...); +void recutl_out_of_memory (void); + +bool recutl_parse_db_from_file (FILE *in, char *file_name, rec_db_t db); +rec_db_t recutl_build_db (int argc, char **argv); + +rec_db_t recutl_read_db_from_file (char *file_name); +void recutl_write_db_to_file (rec_db_t db, char *file_name); + +bool recutl_file_is_writable (char *file_name); + +char *recutl_read_file (char *file_name); + +void recutl_check_integrity (rec_db_t db, + bool verbose_p, + bool external_p); + +bool recutl_yesno (char *prompt); + +bool recutl_interactive (void); + +char *recutl_getpass (bool asktwice); + +/* Parse a list of indexes from the given string and set the internal + recutl_indexes accordingly. Return true if a list was found in the + string. Return false otherwise. */ + +bool recutl_index_list_parse (const char *str); + +/* Return the number of indexes in the internal recutl_indexes data + structure. */ + +size_t recutl_num_indexes (void); + +/* Reset the list of indexes to be empty. */ + +void recutl_reset_indexes (void); + +/* Return the index structure. */ + +size_t *recutl_index (void); + +#endif /* recutl.h */ + +/* End of recutl.h */ diff --git a/devspec.en_US/tmp.txt b/devspec.en_US/tmp.txt new file mode 100755 index 0000000..49448eb --- /dev/null +++ b/devspec.en_US/tmp.txt @@ -0,0 +1,69 @@ + + + +@ shell script±àдʱ£¬ +# Ê×ÏÈ¿¼ÂdzÌÐò¹¦ÄÜÐÔ£¬ÒÔ¼°´úÂëʵÏֵĿò¼Ü +# Æä´Î¸ù¾ÝÔËÐУ¬½øÐÐÓÅ»¯ºÍµ÷Õû¡£ +# ¸ù¾ÝÐèÒª£¬±àдbinary-code¡£ + + + + + +@ build-pkg: for pkg compile. +@ codegen: for code generating from .catalog file or other graphical design + files. and sync code back to the design file. +@ devtask: for task schedule. +@ tagdoc: for demand record. +@ codefmt: for code formatting. +@ *staruml/umbrello/umlet/dia/eclipse: one of the tool to draw diagrams. +@ *CSSC: for local file version management. append remote updata feature to be + a general version management tool. +@ gendocs.sh: utility in GNU lib. +@ modify +@ spellchk +@ codename + + + +[src-pkg] +@ Ò»¸öͨÓõÄlib»ò³ÌÐò£¬¹¦Äܾ¡Á¿µ¥Ò»£¬¶ÔÖ÷Òª¹¦ÄܽøÐÐÍêÉÆ£¬¹¦ÄܵÄÀ©Õ¹ÔÚÆäËülib»òÆäËü´úÂëÖÐʵÏÖ£¬±ÜÃ⹦ÄÜÇ÷ÓÚÍêÉƵÄͬʱ£¬´úÂë±äµÃÓ·Öס£ +¶ÔÓÚÒ»¸öÏà¶ÔÍêÉƵŦÄÜÄ£¿éµÄsrc-pkg£¬´úÂëµÄ¸üÐÂrules£º +# ´úÂëÄ£¿é»¯£¬³ÌÐò¿É¶ÁÐÔ£¬ÈõñîºÏÐÔ£¬´øÀ´µÄ³ÌÐò½á¹¹¸Ä½ø£» +# bugÐÞ¸´£¬Îĵµ¸üУ» +# ÔËÐл·¾³±ä»¯£¬ÒÀÀµÈí¼þ¸üУ» +# ÔËÐÐÐÔÄܸĽø£¬´úÂëÌå»ý¾«¼ò£¬×ÊԴʹÓøĽø£» +# ¹¤³Ì±àÒë¸Ä½ø£¬´úÂë¹¹½¨¹¤¾ß¸Ä½ø¡£ +@ й¦ÄܵÄÔö¼Ó´øÀ´µÄ´úÂë¸üУ¬Ê¹ÓÃnew-branch£¬ÔÚ¹¦Äܱàдºó£¬¸üÐÂÖ÷°æ±¾ºÅ£¬»òÕßн¨Ò»¸öÈí¼þ°ü¡£ + +@ Ëæ×ÅÈí¼þµÄ¿ª·¢£¬´úÂ빦ÄܵÄÔö¼Ó£¬´úÂë»á±È½ÏÓ¹Öס£Ð¹¦ÄܵÄÌí¼Ó£¬ÓÐʱ¿ÉÒÔÁíÒ»¸öÈí¼þ°üµÄÐÎʽÌí¼Ó¡£ÀýÈçshell³ÌÐòµÄ¹¦ÄܵÄÌí¼Ó£¬Óëscript grammerÏà¹ØµÄ¹¦ÄÜ£¬ÔÚshell³ÌÐòÖÐÌí¼Ó£¬Ò»Ð©buildin³ÌÐò£¬ÒÔpluginÐÎʽÔÚÆäËüÈí¼þ°üÖС£cmdhintÕâÀ๦Äܵ÷Õûshell³ÌÐòµÄ³ÌÐò½á¹¹£¬cmdhint¹¦ÄÜÔÚÁíÍâµÄÈí¼þ°üÖÐÌí¼Ó¡£Õâʹshell³ÌÐò±È½Ï¾«¼ò£¬ÆäËü¹¦ÄÜÊÇextensiableµÄ¡£ËùÒÔ³ÌÐòµÄplugin¹¦ÄܱȽÏÓÐÓã¬ÓÃÓÚ³ÌÐòµÄextend¡£ +@ »ù´¡lib£¬libcxtÖ®ÀàµÄ¹¦ÄÜfeature½Ï·á¸»¡£¶øһЩuserʹÓõijÌÐò£¬ÀýÈçÒ»¸ödownloadÈí¼þ£¬Ïà¶ÔÆäËüÈí¼þ£¬¹¦ÄܺÍfeatueÐèÒªÏà¶ÔÈõһЩ£¬¹¦Äܲ»ÄÇôÍêÉÆ¡£ +# Ó¦ÓóÌÐòÊÇlib¿âµÄexample£¬Í¬Ê±Ò²ÓÃÓÚ»ù±¾µÄʹÓá£Ê¹lib¿â½ÏÈÝÒ×ÔÚÆäËü³ÌÐòÖÐʹÓ㬶øÓ¦ÓóÌÐòʹÈí¼þÓÐһЩ¹¦ÄÜ£¬¿ÉÓᣠ+# libÇ÷ÓÚ¹¦ÄÜÍêÉÆ£¬appÇ÷ÓÚstable¡¢feature-less¡¢res-cost-less¡¢tiny¡£ +# ÒÔÐÂÔö¿âÎļþ»òÈí¼þ°üÌí¼Óй¦ÄÜ£¬µ¥¸öÈí¼þ°ü¹¦Äܾ¡Á¿Ç÷Óڹ̶¨£¬¶ø·ÇƵ·±µÄÈí¼þ°æ±¾¸üС£ + + +@ ³ÌÐò¿ª·¢µÄ¹¦ÄÜ×é¼þ»¯ +Ò»¸öÓ¦ÓóÌÐòÒÔpluginµÄÐÎʽÌṩ£¬ÔÚÒ»¸öexecutableÖÐÔËÐС£ + + + +@ pkg-builder£¨°üÀ¨build-pkg¡¢CCompilerCollection¡¢build-config¡¢build-pkglist£©ÓÃÓÚ²Ù×÷ϵͳµÄÈí¼þ°üµÄ±àÒë¡¢¿ª·¢ºÍ×éÖ¯¡£ +Ïà½üÓÚdebianµÄ¿ª·¢¹¤¾ß£¬µ«¾ßÓиüºÃµÄÈõñîºÏÐÔ¡£debian¿ª·¢¹¤¾ßÖÐʹÓý϶àÀàÐ͵Ľű¾£¬sh¡¢perl¡¢python¡¢tclµÈ£¬Õâ¶ÔÓÚÓ¦Óÿª·¢À´ËµÏà¶ÔÒ×ʹÓ㬶ø¶ÔÓÚ²Ù×÷ϵͳµÄ»ù´¡Èí¼þ°ü£¬pkg-builderµÄ·½·¨¸üΪʵÓᣠ+ +@ base program language knownlege. some problem not only use if/else/for/while + to implement feature, use general public knownlege technolege to writing + code. eg: data-structure, windows-system-api, + +@ templete +# project templete. dir structure of a src pkg sould include src-code, testing, man-doc/API-doc, user-manual-doc and so on. or use the templete project. +# src code templete. a src file should include file info header, language feature seperating comment. use tmpl or codegen to generate +src code framework, instead of writing manually. + +@ a src pkg use standard/default/general config/data file format, such as imi/catalog/xml/rec/csv/db. + + + + + + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..da37213 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,17 @@ +# Welcome to MkDocs + +For full documentation visit [mkdocs.org](http://mkdocs.org). + +## Commands + +* `mkdocs new [dir-name]` - Create a new project. +* `mkdocs serve` - Start the live-reloading docs server. +* `mkdocs build` - Build the documentation site. +* `mkdocs help` - Print this help message. + +## Project layout + + mkdocs.yml # The configuration file. + docs/ + index.md # The documentation homepage. + ... # Other markdown pages, images and other files. diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..c97182f --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1 @@ +site_name: My Docs diff --git a/.readthedocs.yaml b/readthedocs.txt similarity index 100% rename from .readthedocs.yaml rename to readthedocs.txt diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 07af6b6..0000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -mydocs -- 2.11.4.GIT
+ + + + + + +
+ + + + + + + +
+ + + + +
+ + +

GNU Website Guidelines

+ +

+ Our goal is to get information to people. + Keeping the site design simple helps accomplish that. +

+ + + +

Please be considerate of all who access our web pages, and accommodate +them, including those who use text-only browsers or old browsers, as well +as those with slow connections. We wish to prevent web designs that look +great under one version of one browser, and ugly under many others. Of +course, please don't install any of the proprietary web browsers +available if you don't already use them anyway.

+ + +

General Guidelines

+ + +
    +
  • The GNU web server has only free +software available. We prefer that only free software be used to +prepare pages for the GNU web server.
  • + +
  • The GNU website lists and links +only to free software. The software's source code and +executables have to be freely redistributable and modifiable to and by +all people and organizations. If in doubt, ask <gnu@gnu.org>.
  • + +
  • The GNU website gives priority to software covered by either +the GNU General Public License or GNU Lesser General Public +License.
  • + +
  • The use of graphics should be minimized so pages load fast over +slow links.
  • + +
  • Offer a document in as many formats as the GNU Project has it. +For an example, see The GNU Free +Documentation License. This lets users get the document in the +format most useful to them.
  • + +
  • In addition to copyright and license +notices, all pages should have contact info for both the FSF (or +responsible party) and the address for bug reports (webmasters for +general pages, but project-specific addresses otherwise) at the bottom +of each page. The reason to note this at the bottom is so the user +always finds this information at the same place on each page.
  • + +
  • Before you take any graphics or text from another website, +please ask for permission to use it. It's polite to do so. It is also +essential for us to avoid copyright infringement.
  • + +
  • Before adding a link, check that it follows our linking criteria.
  • + +
  • Do not list an address of an individual, including the +maintainer of a GNU package, unless explicitly asked to have it +listed. Most GNU maintainers do not want a lot of extra mail and prefer +to get bug reports, etc. from the GNU bug report mailing lists.
  • + +
  • On pages with dated entries (e.g., /philosophy/latest-articles.html), +the newer entries should be first (i.e., reverse chronological order).
  • + +
  • Pages should not load CSS from servers other than those run +by the FSF.
  • + +
  • Generally, the use of JavaScript is not allowed. Exceptions to +this need to be reviewed and approved by the Chief GNUisance on a +case-by-case basis.
  • +
+ + +

Copyright Guidelines

+ + +
    +
  • Every page should have a copyright notice. See the +boilerplate, referred below.
  • + +
  • Every page should have a notice giving everyone permission +to distribute it. If you cannot get such a permission from the author, +please discuss the issue with the webmasters before posting it. This +applies to CSS as well as to HTML.
  • + +
  • Normally you shouldn't post a page that isn't copyright FSF unless +we have permission to modify the version we publish. If you cannot +get such a permission from the author, please discuss the issue with +the FSF before posting it. This applies to CSS as well as to HTML.
  • + +
  • If ultimately we decide to post a new page we don't have permission to +modify, put the text “Posted in 20XX without FSF permission to +modify” inside an HTML comment, just after the copyright notice.
  • + +
  • The user of our pages should always find the copyright information +at the same place on each page. If the page is copyrighted by some +other person or entity, use per or its copyright notice instead of the +FSF copyright notice. Use the rest of the FSF's normal footer +material, except when there is a specific reason to change something +in it.
  • + +
  • All pages that explain how to do something, such as how to use +certain programs, are documentation. This includes all the pages in +/software/ that describe specific programs. By our +principles, documentation must be +free. So these pages must carry +a free +license. If such a page doesn't have a free license, please report the +problem to <webmasters@gnu.org>.
  • + +
  • For other pages, use the same license as some other page that serves +a similar kind of purpose.
  • +
+ + +

Spelling and Punctuation

+ + +
    +
  • English pages should follow the standard American spelling, +hyphenation and punctuation conventions.
  • + +
  • Since these conventions are not always very specific, especially as +regards hyphenation and quotes, gnu.org adds its own rules for the sake of +consistency: +
      +
    • The term “nonfree” is preferred over “non-free”; + likewise, “noncommercial” over “non-commercial.”
    • +
    • In ordinary text, HTML entities + “&ldquo;&rdquo;” and + “&lsquo;&rsquo;” + are preferred over straight quotes ("..." and '...'). + This doesn't apply to script-generated documents.
    • +
    • Where they exist, the double spaces after sentence breaks should be + preserved. They enable Emacs sentence commands to do the right thing.
    • +
    +
  • +
+ + + +

Filenames

+ + +
    +
  • To make simultaneous edition of many files easier, +try and give each HTML file a unique and descriptive name; the special filename +index.html should only be used as a symbolic link, as +explained next.
  • + +
  • Each directory in the web server tree should have a +symbolic link named index.html to the top-level HTML file +for that directory. Use the .symlinks +file to handle this.
  • + +
  • If you translate your web page in different +languages, please name the English file article.html, and +its translations article.lang.html— +lang should contain the two-letter language code from ISO 639, +and optionally an hyphen followed the two-letter country code given in +ISO 3166 (lowercase). For example, the German translation of not-ipr.html +should be named not-ipr.de.html; the Brazilian Portuguese +translation should be named not-ipr.pt-br.html.
  • +
+ + +

URLs

+ + +
    +
  • Hand-written URLs that refer to other files on www.gnu.org should be +absolute, starting from the root page. That is, paths should start +with / (e.g., /gnu/about-gnu.html; not +http://www.gnu.org/gnu/about-gnu.html, and not +about-gnu.html). This makes it easier to copy and paste +links from other pages. Besides, links like +http://www.gnu.org/ will be wrong when the visitor uses +HTTPS.
  • + +
  • Check if the linked host supports both HTTPS and HTTP and use +protocol-relative URLs (e.g. //www.example.org) if it does.
  • + +
  • Collections of files produced automatically from Texinfo source +contain links with relative file names. They always refer to another +file in the same directory. These relative links are to be +tolerated.
  • + +
  • Don't use just a directory name in a URL; always include the +specific filename. E.g., use /gnu/gnu.html, not just +/gnu/. Never use index.html in a URL. Both of +these are kindnesses to the user, as browsers change the highlighting on +a link after it has been visited. If links to a given file use several +different URLs, the URLs that haven't been explicitly referenced will +not be highlighted as visited. So the user goes to pages he/she has +already seen, which is irritating. Also, this eases maintenance of the site +as things get moved around.
  • + +
  • Be sure to omit the filename entirely when linking to an anchor in +the same file and double-check that the anchor actually works.
  • + +
  • Consider others linking to your page when removing an anchor or +id attribute.
  • + +
  • We encourage FTP sites to use a directory for each package, and only put +one package's files in each directory, so that the users can see what +versions of that package and related information can be downloaded +(e.g., a README file, information of what versions are +available, documentations, fonts, etc.). Also, it means that the FTP +location URLs do not need to be changed, on this and other sites, as new +versions are released into that directory.
  • + +
  • Cite people with e-mail addresses this way:

    +

    +<a href="//www.stallman.org/">Richard Stallman</a> +<a href="mailto:rms@gnu.org">&lt;rms@gnu.org&gt;</a> +

    +

    which browsers display this way:

    +

    +Richard Stallman +<rms@gnu.org> +

    +

    It is less confusing to the user, because it's clear what is a link +to another web page and what is a mailto: anchor that +will bring up a mail form to fill out and send, if this is +supported by the client. Also, if users save a copy of the page, +they will have a copy of the e-mail address they can use without +going back to their web browser. If the person doesn't have a web +page, leave the name unanchored.

  • + +
  • When embedding static resources like videos that are not in +the www CVS repository along with the rest of the +www.gnu.org pages, it's important that the URL used to embed the asset +be a subdomain of gnu.org, so that the Third-party Request Blocker +add-on shipped with GNU IceCat would not consider it a third-party +asset which it would prevent from being loaded. For example, when +embedding videos from FSF campaigns on www.gnu.org, use +static.gnu.org rather than static.fsf.org. +Both of these addresses have been set to point to the same machine, so +they can be used interchangeably.
  • +
+ + +

HTML Guidelines

+ + +
    +
  • HTML on the GNU web server should be strictly compliant with +W3C standards.
  • + +
  • Please follow the above mentioned web standards strictly. Don't +neglect required +elements such as <html>, <head>, +<title>, <body>, etc. when using (X)HTML, +and always include the appropriate DTD or Schema reference. +This appeases overly pedantic web browsers.
  • + +
  • Do not add comments at the top of a document. Web browsers +expect the doctype, XML declaration, or Schema to be at the top. +Comments will confuse them, and often cause them to +incorrectly interpret your markup.
  • + +
  • The <head> element should contain this line: +

    +<link rel="author" href="mailto:webmasters@gnu.org">

    +Some browsers use this information to allow users to easily report +problems they find on a page.
  • + +
  • The first header tag, <h[n]>, should have its text +duplicated at the start of the <title> tag. The <title> tag +is used by many browsers in menus like the history and bookmarks lists, +as a link to that page. Repeating the main heading in the <title> +ensures that, when +users click on an item in these menus, they get a page with the expected +heading. Please properly use your headers in numerical order: 1, 2, +etc. These are not used for looks, but for the organization of the +document.
  • + +
  • The <title> tag should include the phrases “GNU Project” +and “Free Software Foundation” so the pages will be found +when web search engines are used. The default is to add this at the +end: - GNU Project - Free Software Foundation.
  • + +
  • Acronyms/abbreviations: +
      +
    • Never use <acronym>: HTML 5 obsoletes it in + favor of <abbr>.
    • + +
    • Don't use <abbr> unless for a really + compelling reason. Browsers render it in an ugly way.
    • + +
    • When an abbreviation may be unfamiliar to a reader, give its + expansion the first time it is used in a document, like this: + <abbr title="Expanded + Abbreviation">EA</abbr> or EA + (Expanded Abbreviation).
    • + +
    • Further occurrences, in any case, should be written without any + markup: just EA.
    • + +
    • For common-enough initialisms, such as GNU, FSF, BSD, RAM, HTML, + DVD, and so on and so on, no markup is needed at all. + Use your judgment.
    • +
    +
  • +
+ + +

Tables and menus

+ + +
    +
  • Please use tables to organize data, not the presentation of the +web page.
  • + +
  • Screen reader software used by most blind people reads the text +from left to right, ignoring any tables that you make. If you use +tables, you should make sure that reading a whole +page left to right doesn't confuse such software. Please follow the +W3C web accessibility guidelines +to ensure that tables are properly marked for accessibility.
  • + +
  • Some people like to organize links as a menu to +the left or right of the main text when using graphical browsers. That +does not work very well with text browsers since they will make the +menu appear either on top of the page or at the bottom. If you have +a menu that is more than 30 lines long, then it's very probable +that a user viewing the page will never bother to read the text +because it will be too far down. You should make an effort to keep +such menus under 20 lines long so that the beginning of the article is +visible on the first page when viewing it with a text browser. A +menu bar of one or two horizontal lines might accomplish your +purpose as well. Providing a “skip link” to the main text +is another option.
  • +
+ + +

Using our page template

+ + +
    +
  • To help people follow the above guidelines, a page template (or +“boilerplate”) is provided for both the main part of the GNU +website, and the software projects. Its use is mandatory for new pages in +www.gnu.org, and highly recommended for software pages. Please don't start +out with an existing page to create a new one; use the +original source of the boilerplate instead, and follow the instructions +in it.
  • + +
  • The XHTML templated pages must follow the XHTML-1.0 guidelines.
  • + +
  • Our server-side includes declare UTF-8 as the character encoding, so +using any other encoding is problematic.
  • +
+ + +

Styling

+ + +

Styling of templated pages

+ +
    +
  • Generic styling for desktops and smartphones is provided by +/layout.css; it covers most of our use cases.
  • + +
  • Mobile devices with very limited resources use /mini.css. +This stylesheet is just the Yahoo User Interface (version 2) reset and +base stylesheets, as these devices typically have minimal need for various +fonts and no need for fancy layouts.
  • + +
  • Printers use /print.css. Note that the header, navigation +bars and footer (except copyright and license) are unprintable.
  • + +
  • In addition to /layout.css, some pages have specialized +stylesheets: /graphics/graphics.css for the GNU Art section, +and /side-menu.css for the Malware and Education sections.
  • + +
  • If some special styling is needed for a specific page, it should be added +to the page itself in a <style> element, between the SSI directives +that include header.html and banner.html. If the +style applies to a single element, it should normally be added as an attribute.
  • + +
  • If you specify any color attribute in the HTML, you should specify all of +them that are allowed for that tag. This is because some browsers +allow users to specify defaults for the color attributes, and the +user's choices could conflict with your choices, as your choices +override the user's choices. In the worse case, the foreground and +background could end up the same. Please use a stylesheet for +this, and not HTML 3.2 (HTML 4 Transitional) deprecated +markup.
  • +
+ + +

Other stylesheets

+ +
    +
  • Historical pages (unmaintained translations for the most part) refer +to /gnu.css, which in turn loads /mini.css, +as these pages are +usually very basic, plain pages with little or no formatting.
  • + +
  • There are dedicated stylesheets for software manuals. The main ones are: + +
  • + +
  • Translators maintain stylesheets (/style.lang.css) that +modify layout.css according to their own needs. The RTL languages (Arabic, +Persian, and Hebrew) use /style.rtl.css.
  • +
+ + +

Use of Graphics

+ + +
    +
  • The use of graphics should be minimized, so pages load fast +over slow links, especially animations.
  • + +
  • We do not use background images on our pages, as they make text +significantly harder to read.
  • + +
  • In the past, GIFs have had patent problems. However, now that +the IBM and Unisys patents (and other patents worldwide that are +relevant to LZW compression) have expired, GIFs that are based on the +87a or 89a standard are acceptable. Please be wary of proprietary +applications that may include non-standard patented technologies (we'd +prefer you use free software applications when authoring for our +websites). In general, PNG or JPEG format are still safe, and are +probably better from a technical standpoint. For details regarding the +old GIF problem, see https://www.gnu.org/philosophy/gif.html. +Other formats are also allowed, though JPEG is the one most widely +recognized by web browsers (avoid JPEG 2000, and be careful with PNG +alpha channels; the former is not widely supported, and the latter are +not fully supported by some older browsers).
  • + +
  • Before you take an image from another website, please ask for +permission to use it.
  • + +
  • Always have a textual alternative for in-line images, to ensure +indexability by search engines and accessibility. For instance: +

    <img src="/graphics/*.jpg" +alt="&nbsp;[DESCRIPTIVE TEXT]&nbsp;">

    +We add the non-breaking spaces (&nbsp;) and square brackets to +separate the DESCRIPTIVE TEXT from adjacent text, and help the user +realize that this is a stand-in for an image. The point of using +non-breaking spaces rather than normal ones is to make sure they find +their way to the translatable strings that are extracted by the +PO4A/Gettext tools.
  • + +
  • Make sure the image doesn't look too big or too small +when displayed at its original size, using the browser's default font +size.
  • + +
  • Adjust image width or height in a style attribute, using scalable +units such as em or %; for instance:

    + +

    <img src="/graphics/*.jpg" +alt="&nbsp;[DESCRIPTIVE TEXT]&nbsp;" +style="width: 10em; height: auto;" />

    + +

    This way, the page will look the same if the reader increases or +decreases font size.

  • + +
  • If you are adding a small floating image to a page that uses +layout.css (the stylesheet for templated pages), +you may want to use the imgright or imgleft class +(defined in the IMAGES section of the stylesheet). This will ensure that +the floating direction is reversed if the page is translated into an RTL +language.
  • + +
  • If the image you are adding is 12em wide or more, and the page is +templated, you may find it convenient to use one of the responsive +pict classes that are defined in the IMAGES section of +layout.css (you can adjust the width in a style +attribute if none of the predefined ones fits your needs); for instance: + +

    <div class="pict wide" +style="width: 25em"><img src="/graphics/*.jpg" +alt="&nbsp;[DESCRIPTIVE TEXT]&nbsp;" +/></div>

    + +Note that the div container is necessary because some browsers (e.g., +NetSurf) don't know how to apply max-width to images.
  • + +
  • Link all images that are displayed throughout the website to the +relevant page, usually in /graphics/. This can be done with +code similar to this, which corresponds to the image on the left:

    + +

    + [Image of the Head of a GNU]  +

    + +
    <p class="imgleft">
    +<a href="/graphics/agnuhead.html">
    +<img src="/graphics/gnu-head-sm.jpg"
    +     alt=" [Image of the Head of a GNU] "
    +     style="width: 8em" /></a>
    +</p>
    +
    +
    + +This will allow users to quickly go to pages related to the pictures they +are interested in.
  • +
+ + +

Appendix 1 - Linking Policies

+ + +

One of the most complex aspects of maintaining web pages is following the +linking guidelines; however, it's also a very crucial aspect of the job.

+ +

We strive to ensure that all pages we promote—all pages which are given +links on our site—are friendly to the free software movement. Some +pages will obviously not meet such standards; if the site flames the Free +Software Foundation, or has no apparent relation to free software and +surrounding issues, the link shouldn't be made. Beyond that, however, +there are criteria used in determining whether or not it is appropriate to +provide a link to a page from ours. They are listed below, in order of +descending general importance.

+ +
+
What's the context of the link?
+ +
+

The link's purpose on our site will play a role in determining how +strongly it should be judged against the other criteria. Pages +hosting GNU projects will be held to the highest standards. Pages +about other free software and given high promotion—for example, +included in a newsfeed on the main page—are a close second. +Links on the philosophy page may be given more leeway in talking +about proprietary software; GNU/Linux user group pages should call +the system GNU/Linux almost always but are hardly checked on other +criteria. Always keep this in mind when deciding how to weigh each +aspect of these policies.

+
+ +
Does the page promote proprietary software?
+ +
+

The big point made by the free software movement is that proprietary +software presents an ethical dilemma: you cannot agree to such +nonfree terms and treat those around you as you would like to be +treated. When proprietary software is promoted, people get the +impression that it is okay to use it, while we are trying to convince +them otherwise. As such, we avoid offering such free advertising, +either directly on our site or indirectly through links.

+ +

What's tricky about this criteria is the “promotion” point: there's +a difference between mentioning proprietary software and making a +sales pitch for it. Indeed, the GNU Project website mentions +proprietary software throughout, but never gives people the impression +that its use does not present ethical problems.

+ +

There are two things to keep in mind when determining whether a +reference to proprietary software promotes it, or simply mentions +it. First, how much information does it offer about the software? +Second, how much information is the reader likely to actually gain +from this page?

+ +

Different pages provide different amounts of information about +proprietary software; the more it provides, the more of a problem +it poses for us. For example, some pages may link to the primary +site for a proprietary software program. Others may describe its +functionality in detail. Even the product name given matters; +there's a difference between “Windows” and +“Microsoft Windows XP Home Edition.”

+ +

If the page requires nonfree, +nontrivial JavaScript and has serious failures with +JavaScript disabled, the link shouldn't be made. Similarly, if the page +has embedded Flash that plays an important role, so that a person would +be missing something important if the videos do not play, the link +should not be made.

+ +

The subject of the reference will also play a role in determining +how problematic a reference is. If the software is already very +popular, it's unlikely that a basic mention of it will be news to +the reader. Some examples of proprietary software which are common +enough to be considered “well-known” are major operating systems +(Windows, Mac OS, Sun OS, HP-UX) and primary common applications +such as Office, Internet Explorer, Photoshop, Acrobat Reader, and +Flash.

+ +

GNU software project pages feel the full force of this policy. +Proprietary software should only be mentioned when the GNU software +provides support for it, or to compare it against the features of +well-known proprietary software. For example, the following +text—and not much else—would be acceptable:

+ +

w3 is a web browser for GNU Emacs, similar to Internet Explorer. +It can run on all platforms GNU Emacs runs on, including GNU/Linux, +proprietary Unix systems, and Windows.

+ +

Links which appear in other areas, such as the testimonials or +philosophy pages, as well as links to user groups may discuss such +software in greater detail, but links and other methods of +encouragement to “learn more” should still be avoided.

+
+ +
How does the page compare free software to open source?
+ +
+

Almost all pages which have links on our site should, at the very +least, treat free software and open source equally. Failure to do +so—whether it be by omitting free software or by implying that +open source is superior—is usually unacceptable. GNU software +project pages should have little mention of open source. The GNOME +page used to provide a good example of a tactful way to do it:

+ +

GNOME is part of the GNU Project, and is free software (sometimes +referred to as open source software).

+ +

Any exceptions to this rule should be apparent from the context. +For instance, user groups pages may talk in greater detail about +open source; we state on the user groups page, “As with our links +page, the FSF is not responsible for the contents of other websites, +or how up-to-date their information is.”

+
+ +
How does the page treat the GNU Project?
+ +
+

Pages which we link to should treat the GNU Project well. The +primary thing to look out for in this regard is whether the page +calls the system GNU/Linux or just “Linux.” GNU software project +and user group pages should almost never, if ever, fail to do this. +Again, exceptions for other pages should be apparent from context.

+ +

That said, certain parts of a page should not be considered against these +criteria. For example, suppose we were to make a link to a page on a free +software news site. Any advertisements or reader comments attached to the +article would not be considered when determining whether it met or linking +guidelines, since they're understood to be the opinion of their individual +authors. Similarly, on user group pages, the contents of forums and wiki +pages should not hold weight in these regards.

+ +

Finally, some sites are understood to always have exception with most of +these guidelines. These sites are usually about issues which are +important, but somewhat peripheral, to the free software movement. Several +times we have linked to the Electronic Frontier Foundation's site, even +though they encourage the use of Flash and talked exclusively about open +source software. It's generally understood that since these pages are not +primarily about free software, the policies do not hold full force for +them.

+ +

As a final explanation (coming from RMS): +Even for making links from www.gnu.org, we do not require that +people call the system GNU/Linux or use the term “free software” +rather than “open source.” We do, however, require that they not +promote any nonfree software.

+ +

If all this seems complicated, that's because, unfortunately, it is. Don't +worry; a knack for it comes with time and experience. You may mis-evaluate +a few pages as you're learning to get a feel for what's acceptable and what +isn't; please don't hesitate to get a second opinion from a more +experienced webmaster, or someone in charge like the Chief Webmaster or +RMS. New exceptions will always come up; keep an open mind to that +possibility and be ready to handle them properly.

+
+
+ + +

Appendix 2 - Working with Web CVS Repositories

+ + +

Basic CVS commands

+ +
    +
  • For reference manual, execute info cvs.
  • + +
  • +Before the initial checkout, set the environment variable +CVS_RSH=ssh.
  • + +
  • +

    If you have write access to www, check out the main www repository +with your Savannah login:

    + +
    cvs -z3 -d:ext:username@cvs.savannah.gnu.org:/web/www co www
    +
    + +

    You will get a working directory, www, with the same +structure as our main website.

    +
  • + +
  • +

    If you don't have write access to www, you can still make an +anonymous checkout of www:

    + +
    cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/web/www co www
    +
    +
  • + +
  • +

    Check out the web repository of the fooproject:

    + +
    cvs -z3 -d:ext:username@cvs.savannah.gnu.org:/web/fooproject \
    +         co fooproject
    +
    + +

    You will get a working directory, fooproject, with the same +structure as the www/software/fooproject subdirectory. Note, +however, that the fooproject and www repositories are independent. The +working directories can be anywhere in your filesystem.

    + +

    Webmasters, please read Web pages for +official GNU software before committing anything to the web repository +of a software project.

    +
  • + +
  • +

    Add a file or directory:

    + +
    cvs add foo
    +
    +
  • + +
  • +

    Update before you edit a file:

    + +
    cvs update -P foo
    +
    +
  • + +
  • +

    Check the changes you are going to commit:

    + +
    cvs diff -U2 foo
    +
    +
  • + +
  • +

    Perform the commit (no need for cvs add if the file is +already in the repository):

    + +
    cvs commit foo
    +
    + +

    This will open a text editor where you should enter a log message. The +commit will occur upon saving the message.

    + +

    Without being excessively verbose, log messages should describe +as clearly as possible the nature of the commit, including any related +ticket numbers from RT to allow future historians to understand why your +changes were made.

    + +

    Whenever possible, changes to multiple files that share the same log +message should be bundled in one commit. Do not bundle multiple unrelated +changes in one commit.

    + +

    The changes (except to .symlinks files) should +be visible on www.gnu.org within minutes.

    +
  • +
+ +

For further details on CVS, such as reverting to a previous version, or +looking at the diff output of a particular change, see the CVS documentation.

+ + + + +

Since CVS is not able to handle symbolic links directly, a separate +mechanism has been implemented to allow webmasters to maintain symbolic +links, as follows. (Actual symbolic links are no longer created on +www.gnu.org; mod_rewrite rules are used instead. But we'll +keep this discussion talking about symlinks since it is easier to +understand that way.)

+ +

Being a symlink means that relative links from the linked page +may break when the symlink jumps to a different directory.

+ +

Special files, named .symlinks, when committed +to the CVS tree, are interpreted as specifications to build +symbolic links. +Each symbolic link specification from the .symlinks file is honored, +i.e., the symbolic link is created if it does not exist yet. If a +symbolic link is found in the directory and is not listed in the +.symlinks file, it is removed.

+ +

The .symlinks files obey the ln -s format, as described below:

+ +
    +
  • Lines starting with a sharp sign (“#”) are ignored.
  • + +
  • Lines that do not contain two strings separated by white space are silently +ignored.
  • +
+ +

Here is an example of a .symlinks file:

+ +
# Make a link named l.html to a target t.html.
+# Strictly equivalent to ln -s t.html l.html:
+t.html l.html
+
+ +

On each line the first file name must be a relative path name to an +existing file. The second file name may not contain any slash; it is the +name of the symbolic link to be created in the present directory. For +instance, if a page named dir.html exists in the +/dir directory, and index.html does not exist, +/dir/.symlinks should contain a line like this:

+ +
dir.html index.html
+
+ +

The ln -s analogy accounts for only part of the story. +The current method actually takes advantage of the flexibility of URL +rewriting. Thus a single HTML entry in the .symlinks file defines links +to all possible translations that follow our naming +conventions. This makes it impossible to use +symlinks to redirect to and from HTML files whose names look like +translations, that is, page.ll.html or +page.ll-cc.html, where +ll and cc are two-letter +codes. When you need such redirections, use the htaccess mechanism.

+ +

These days, the .symlinks handling happens on www.gnu.org +via a cron job that runs twice an hour. Webmasters do not have +access to it.

+ + +

.htaccess and redirections

+ +

To browsers, the symbolic links in the previous section are +indistinguishable from the actual file. You may want an actual +redirection in some cases. You can do this either in the top-level +control file .htaccess, or by using something like this as the +file to be redirected:

+ +

+<meta http-equiv="refresh" content="0; + url=https://www.gnu.org/target"> +

+ + +

Server-side scripts

+ +

A description of scripts and +software used on www.gnu.org is available. Please read it before +writing any scripts, and also update it as needed if you have write +access to www.

+ + +

System administrators

+ +

The system administrators for GNU change from time to time. Please +email the sysadmin list <sysadmin@gnu.org> rather than an individual, +unless you have a specific reason to do so.

+ + +

Useful Resources

+ + + + +
+ + + + + + + +
+ + +
+
+
+ +
+
+ + +

Available for this page:

+
+

+[en] English   +[pt-br] português   +

+
+
+
+ + + + + + +